diff --git a/STM32_Disco746G/.mxproject b/STM32_Disco746G/.mxproject index be01de492dac47d137292c331219d1f6e0087db0..86ef8f95eaddb9abfcfbd81e20181cfd0cd26615 100644 --- a/STM32_Disco746G/.mxproject +++ b/STM32_Disco746G/.mxproject @@ -1,59 +1,69 @@ [PreviousLibFiles] -LibFiles=Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_cortex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_cortex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_crc.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_crc_ex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_crc.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_rcc.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_rcc_ex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_bus.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_rcc.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_system.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_utils.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_flash.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_flash_ex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_gpio.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_gpio_ex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_gpio.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_dma.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_dma_ex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_dma.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_dmamux.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_pwr.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_pwr_ex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_pwr.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_def.h;Drivers\STM32F7xx_HAL_Driver\Inc\Legacy\stm32_hal_legacy.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_i2c.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_i2c_ex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_exti.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_exti.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_dma2d.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_dma2d.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_fmc.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_sdram.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_i2c.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_ltdc.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_ltdc_ex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_dsi.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_qspi.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_tim.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_tim_ex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_tim.h;Middlewares\Third_Party\FreeRTOS\Source\include\croutine.h;Middlewares\Third_Party\FreeRTOS\Source\include\deprecated_definitions.h;Middlewares\Third_Party\FreeRTOS\Source\include\event_groups.h;Middlewares\Third_Party\FreeRTOS\Source\include\FreeRTOS.h;Middlewares\Third_Party\FreeRTOS\Source\include\list.h;Middlewares\Third_Party\FreeRTOS\Source\include\message_buffer.h;Middlewares\Third_Party\FreeRTOS\Source\include\mpu_prototypes.h;Middlewares\Third_Party\FreeRTOS\Source\include\mpu_wrappers.h;Middlewares\Third_Party\FreeRTOS\Source\include\portable.h;Middlewares\Third_Party\FreeRTOS\Source\include\projdefs.h;Middlewares\Third_Party\FreeRTOS\Source\include\queue.h;Middlewares\Third_Party\FreeRTOS\Source\include\semphr.h;Middlewares\Third_Party\FreeRTOS\Source\include\stack_macros.h;Middlewares\Third_Party\FreeRTOS\Source\include\StackMacros.h;Middlewares\Third_Party\FreeRTOS\Source\include\stream_buffer.h;Middlewares\Third_Party\FreeRTOS\Source\include\task.h;Middlewares\Third_Party\FreeRTOS\Source\include\timers.h;Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2\cmsis_os2.h;Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2\cmsis_os.h;Middlewares\Third_Party\FreeRTOS\Source\portable\GCC\ARM_CM7\r0p1\portmacro.h;Middlewares\Third_Party\LibJPEG\include\jconfig_template.h;Middlewares\Third_Party\LibJPEG\include\jdct.h;Middlewares\Third_Party\LibJPEG\include\jerror.h;Middlewares\Third_Party\LibJPEG\include\jinclude.h;Middlewares\Third_Party\LibJPEG\include\jmemsys.h;Middlewares\Third_Party\LibJPEG\include\jmorecfg_template.h;Middlewares\Third_Party\LibJPEG\include\jpegint.h;Middlewares\Third_Party\LibJPEG\include\jpeglib.h;Middlewares\Third_Party\LibJPEG\include\jversion.h;Middlewares\Third_Party\LibJPEG\include\jdata_conf_template.h;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cortex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_crc.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_crc_ex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rcc.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rcc_ex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_flash.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_flash_ex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_gpio.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma_ex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pwr.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pwr_ex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_i2c.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_i2c_ex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_exti.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma2d.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_fmc.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_sdram.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_ltdc.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_ltdc_ex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dsi.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_qspi.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_tim.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_tim_ex.c;Middlewares\Third_Party\FreeRTOS\Source\croutine.c;Middlewares\Third_Party\FreeRTOS\Source\event_groups.c;Middlewares\Third_Party\FreeRTOS\Source\list.c;Middlewares\Third_Party\FreeRTOS\Source\queue.c;Middlewares\Third_Party\FreeRTOS\Source\stream_buffer.c;Middlewares\Third_Party\FreeRTOS\Source\tasks.c;Middlewares\Third_Party\FreeRTOS\Source\timers.c;Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2\cmsis_os2.c;Middlewares\Third_Party\FreeRTOS\Source\portable\MemMang\heap_4.c;Middlewares\Third_Party\FreeRTOS\Source\portable\GCC\ARM_CM7\r0p1\port.c;Middlewares\Third_Party\LibJPEG\source\jcapimin.c;Middlewares\Third_Party\LibJPEG\source\jcapistd.c;Middlewares\Third_Party\LibJPEG\source\jdapimin.c;Middlewares\Third_Party\LibJPEG\source\jdapistd.c;Middlewares\Third_Party\LibJPEG\source\jcomapi.c;Middlewares\Third_Party\LibJPEG\source\jcparam.c;Middlewares\Third_Party\LibJPEG\source\jctrans.c;Middlewares\Third_Party\LibJPEG\source\jdtrans.c;Middlewares\Third_Party\LibJPEG\source\jcinit.c;Middlewares\Third_Party\LibJPEG\source\jcmaster.c;Middlewares\Third_Party\LibJPEG\source\jcmainct.c;Middlewares\Third_Party\LibJPEG\source\jcprepct.c;Middlewares\Third_Party\LibJPEG\source\jccoefct.c;Middlewares\Third_Party\LibJPEG\source\jccolor.c;Middlewares\Third_Party\LibJPEG\source\jcsample.c;Middlewares\Third_Party\LibJPEG\source\jcdctmgr.c;Middlewares\Third_Party\LibJPEG\source\jfdctint.c;Middlewares\Third_Party\LibJPEG\source\jfdctfst.c;Middlewares\Third_Party\LibJPEG\source\jfdctflt.c;Middlewares\Third_Party\LibJPEG\source\jchuff.c;Middlewares\Third_Party\LibJPEG\source\jcarith.c;Middlewares\Third_Party\LibJPEG\source\jcmarker.c;Middlewares\Third_Party\LibJPEG\source\jdatadst.c;Middlewares\Third_Party\LibJPEG\source\jdmaster.c;Middlewares\Third_Party\LibJPEG\source\jdinput.c;Middlewares\Third_Party\LibJPEG\source\jdmainct.c;Middlewares\Third_Party\LibJPEG\source\jdcoefct.c;Middlewares\Third_Party\LibJPEG\source\jdpostct.c;Middlewares\Third_Party\LibJPEG\source\jdmarker.c;Middlewares\Third_Party\LibJPEG\source\jdhuff.c;Middlewares\Third_Party\LibJPEG\source\jdarith.c;Middlewares\Third_Party\LibJPEG\source\jddctmgr.c;Middlewares\Third_Party\LibJPEG\source\jidctint.c;Middlewares\Third_Party\LibJPEG\source\jidctfst.c;Middlewares\Third_Party\LibJPEG\source\jidctflt.c;Middlewares\Third_Party\LibJPEG\source\jdsample.c;Middlewares\Third_Party\LibJPEG\source\jdcolor.c;Middlewares\Third_Party\LibJPEG\source\jdmerge.c;Middlewares\Third_Party\LibJPEG\source\jquant1.c;Middlewares\Third_Party\LibJPEG\source\jquant2.c;Middlewares\Third_Party\LibJPEG\source\jdatasrc.c;Middlewares\Third_Party\LibJPEG\source\jaricom.c;Middlewares\Third_Party\LibJPEG\source\jerror.c;Middlewares\Third_Party\LibJPEG\source\jmemmgr.c;Middlewares\Third_Party\LibJPEG\source\jutils.c;Middlewares\Third_Party\LibJPEG\source\jmemnobs.c;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_cortex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_cortex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_crc.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_crc_ex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_crc.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_rcc.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_rcc_ex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_bus.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_rcc.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_system.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_utils.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_flash.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_flash_ex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_gpio.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_gpio_ex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_gpio.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_dma.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_dma_ex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_dma.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_dmamux.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_pwr.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_pwr_ex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_pwr.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_def.h;Drivers\STM32F7xx_HAL_Driver\Inc\Legacy\stm32_hal_legacy.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_i2c.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_i2c_ex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_exti.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_exti.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_dma2d.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_dma2d.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_fmc.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_sdram.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_i2c.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_ltdc.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_ltdc_ex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_dsi.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_qspi.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_tim.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_tim_ex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_tim.h;Middlewares\Third_Party\FreeRTOS\Source\include\croutine.h;Middlewares\Third_Party\FreeRTOS\Source\include\deprecated_definitions.h;Middlewares\Third_Party\FreeRTOS\Source\include\event_groups.h;Middlewares\Third_Party\FreeRTOS\Source\include\FreeRTOS.h;Middlewares\Third_Party\FreeRTOS\Source\include\list.h;Middlewares\Third_Party\FreeRTOS\Source\include\message_buffer.h;Middlewares\Third_Party\FreeRTOS\Source\include\mpu_prototypes.h;Middlewares\Third_Party\FreeRTOS\Source\include\mpu_wrappers.h;Middlewares\Third_Party\FreeRTOS\Source\include\portable.h;Middlewares\Third_Party\FreeRTOS\Source\include\projdefs.h;Middlewares\Third_Party\FreeRTOS\Source\include\queue.h;Middlewares\Third_Party\FreeRTOS\Source\include\semphr.h;Middlewares\Third_Party\FreeRTOS\Source\include\stack_macros.h;Middlewares\Third_Party\FreeRTOS\Source\include\StackMacros.h;Middlewares\Third_Party\FreeRTOS\Source\include\stream_buffer.h;Middlewares\Third_Party\FreeRTOS\Source\include\task.h;Middlewares\Third_Party\FreeRTOS\Source\include\timers.h;Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2\cmsis_os2.h;Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2\cmsis_os.h;Middlewares\Third_Party\FreeRTOS\Source\portable\GCC\ARM_CM7\r0p1\portmacro.h;Middlewares\Third_Party\LibJPEG\include\jconfig_template.h;Middlewares\Third_Party\LibJPEG\include\jdct.h;Middlewares\Third_Party\LibJPEG\include\jerror.h;Middlewares\Third_Party\LibJPEG\include\jinclude.h;Middlewares\Third_Party\LibJPEG\include\jmemsys.h;Middlewares\Third_Party\LibJPEG\include\jmorecfg_template.h;Middlewares\Third_Party\LibJPEG\include\jpegint.h;Middlewares\Third_Party\LibJPEG\include\jpeglib.h;Middlewares\Third_Party\LibJPEG\include\jversion.h;Middlewares\Third_Party\LibJPEG\include\jdata_conf_template.h;Drivers\CMSIS\Device\ST\STM32F7xx\Include\stm32f746xx.h;Drivers\CMSIS\Device\ST\STM32F7xx\Include\stm32f7xx.h;Drivers\CMSIS\Device\ST\STM32F7xx\Include\system_stm32f7xx.h;Drivers\CMSIS\Device\ST\STM32F7xx\Source\Templates\system_stm32f7xx.c;Drivers\CMSIS\Include\cmsis_armcc.h;Drivers\CMSIS\Include\cmsis_armclang.h;Drivers\CMSIS\Include\cmsis_compiler.h;Drivers\CMSIS\Include\cmsis_gcc.h;Drivers\CMSIS\Include\cmsis_iccarm.h;Drivers\CMSIS\Include\cmsis_version.h;Drivers\CMSIS\Include\core_armv8mbl.h;Drivers\CMSIS\Include\core_armv8mml.h;Drivers\CMSIS\Include\core_cm0.h;Drivers\CMSIS\Include\core_cm0plus.h;Drivers\CMSIS\Include\core_cm1.h;Drivers\CMSIS\Include\core_cm23.h;Drivers\CMSIS\Include\core_cm3.h;Drivers\CMSIS\Include\core_cm33.h;Drivers\CMSIS\Include\core_cm4.h;Drivers\CMSIS\Include\core_cm7.h;Drivers\CMSIS\Include\core_sc000.h;Drivers\CMSIS\Include\core_sc300.h;Drivers\CMSIS\Include\mpu_armv7.h;Drivers\CMSIS\Include\mpu_armv8.h;Drivers\CMSIS\Include\tz_context.h; +LibFiles=Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_rcc.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_rcc_ex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_bus.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_rcc.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_system.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_utils.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_flash.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_flash_ex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_gpio.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_gpio_ex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_gpio.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_dma.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_dma_ex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_dma.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_dmamux.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_pwr.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_pwr_ex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_pwr.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_cortex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_cortex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_def.h;Drivers\STM32F7xx_HAL_Driver\Inc\Legacy\stm32_hal_legacy.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_i2c.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_i2c_ex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_exti.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_exti.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_eth.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_crc.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_crc_ex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_crc.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_dma2d.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_dma2d.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_fmc.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_sdram.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_i2c.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_ltdc.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_ltdc_ex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_dsi.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_qspi.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_tim.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_tim_ex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_tim.h;Middlewares\Third_Party\FreeRTOS\Source\include\croutine.h;Middlewares\Third_Party\FreeRTOS\Source\include\deprecated_definitions.h;Middlewares\Third_Party\FreeRTOS\Source\include\event_groups.h;Middlewares\Third_Party\FreeRTOS\Source\include\FreeRTOS.h;Middlewares\Third_Party\FreeRTOS\Source\include\list.h;Middlewares\Third_Party\FreeRTOS\Source\include\message_buffer.h;Middlewares\Third_Party\FreeRTOS\Source\include\mpu_prototypes.h;Middlewares\Third_Party\FreeRTOS\Source\include\mpu_wrappers.h;Middlewares\Third_Party\FreeRTOS\Source\include\portable.h;Middlewares\Third_Party\FreeRTOS\Source\include\projdefs.h;Middlewares\Third_Party\FreeRTOS\Source\include\queue.h;Middlewares\Third_Party\FreeRTOS\Source\include\semphr.h;Middlewares\Third_Party\FreeRTOS\Source\include\stack_macros.h;Middlewares\Third_Party\FreeRTOS\Source\include\StackMacros.h;Middlewares\Third_Party\FreeRTOS\Source\include\stream_buffer.h;Middlewares\Third_Party\FreeRTOS\Source\include\task.h;Middlewares\Third_Party\FreeRTOS\Source\include\timers.h;Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2\cmsis_os2.h;Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2\cmsis_os.h;Middlewares\Third_Party\FreeRTOS\Source\portable\GCC\ARM_CM7\r0p1\portmacro.h;Middlewares\Third_Party\LibJPEG\include\jconfig_template.h;Middlewares\Third_Party\LibJPEG\include\jdct.h;Middlewares\Third_Party\LibJPEG\include\jerror.h;Middlewares\Third_Party\LibJPEG\include\jinclude.h;Middlewares\Third_Party\LibJPEG\include\jmemsys.h;Middlewares\Third_Party\LibJPEG\include\jmorecfg_template.h;Middlewares\Third_Party\LibJPEG\include\jpegint.h;Middlewares\Third_Party\LibJPEG\include\jpeglib.h;Middlewares\Third_Party\LibJPEG\include\jversion.h;Middlewares\Third_Party\LibJPEG\include\jdata_conf_template.h;Drivers\BSP\Components\lan8742\lan8742.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\ccp.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\chap_ms.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\chap-md5.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\chap-new.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\eap.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\eui64.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\fsm.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\ipcp.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\ipv6cp.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\lcp.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\magic.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\mppe.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\ppp.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\ppp_impl.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\ppp_opts.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\pppapi.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\pppcrypt.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\pppdebug.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\pppoe.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\pppol2tp.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\pppos.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\upap.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\vj.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\ecp.h;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rcc.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rcc_ex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_flash.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_flash_ex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_gpio.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma_ex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pwr.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pwr_ex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cortex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_i2c.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_i2c_ex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_exti.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_eth.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_crc.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_crc_ex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma2d.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_fmc.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_sdram.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_ltdc.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_ltdc_ex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dsi.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_qspi.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_tim.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_tim_ex.c;Middlewares\Third_Party\FreeRTOS\Source\croutine.c;Middlewares\Third_Party\FreeRTOS\Source\event_groups.c;Middlewares\Third_Party\FreeRTOS\Source\list.c;Middlewares\Third_Party\FreeRTOS\Source\queue.c;Middlewares\Third_Party\FreeRTOS\Source\stream_buffer.c;Middlewares\Third_Party\FreeRTOS\Source\tasks.c;Middlewares\Third_Party\FreeRTOS\Source\timers.c;Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2\cmsis_os2.c;Middlewares\Third_Party\FreeRTOS\Source\portable\MemMang\heap_4.c;Middlewares\Third_Party\FreeRTOS\Source\portable\GCC\ARM_CM7\r0p1\port.c;Middlewares\Third_Party\LibJPEG\source\jcapimin.c;Middlewares\Third_Party\LibJPEG\source\jcapistd.c;Middlewares\Third_Party\LibJPEG\source\jdapimin.c;Middlewares\Third_Party\LibJPEG\source\jdapistd.c;Middlewares\Third_Party\LibJPEG\source\jcomapi.c;Middlewares\Third_Party\LibJPEG\source\jcparam.c;Middlewares\Third_Party\LibJPEG\source\jctrans.c;Middlewares\Third_Party\LibJPEG\source\jdtrans.c;Middlewares\Third_Party\LibJPEG\source\jcinit.c;Middlewares\Third_Party\LibJPEG\source\jcmaster.c;Middlewares\Third_Party\LibJPEG\source\jcmainct.c;Middlewares\Third_Party\LibJPEG\source\jcprepct.c;Middlewares\Third_Party\LibJPEG\source\jccoefct.c;Middlewares\Third_Party\LibJPEG\source\jccolor.c;Middlewares\Third_Party\LibJPEG\source\jcsample.c;Middlewares\Third_Party\LibJPEG\source\jcdctmgr.c;Middlewares\Third_Party\LibJPEG\source\jfdctint.c;Middlewares\Third_Party\LibJPEG\source\jfdctfst.c;Middlewares\Third_Party\LibJPEG\source\jfdctflt.c;Middlewares\Third_Party\LibJPEG\source\jchuff.c;Middlewares\Third_Party\LibJPEG\source\jcarith.c;Middlewares\Third_Party\LibJPEG\source\jcmarker.c;Middlewares\Third_Party\LibJPEG\source\jdatadst.c;Middlewares\Third_Party\LibJPEG\source\jdmaster.c;Middlewares\Third_Party\LibJPEG\source\jdinput.c;Middlewares\Third_Party\LibJPEG\source\jdmainct.c;Middlewares\Third_Party\LibJPEG\source\jdcoefct.c;Middlewares\Third_Party\LibJPEG\source\jdpostct.c;Middlewares\Third_Party\LibJPEG\source\jdmarker.c;Middlewares\Third_Party\LibJPEG\source\jdhuff.c;Middlewares\Third_Party\LibJPEG\source\jdarith.c;Middlewares\Third_Party\LibJPEG\source\jddctmgr.c;Middlewares\Third_Party\LibJPEG\source\jidctint.c;Middlewares\Third_Party\LibJPEG\source\jidctfst.c;Middlewares\Third_Party\LibJPEG\source\jidctflt.c;Middlewares\Third_Party\LibJPEG\source\jdsample.c;Middlewares\Third_Party\LibJPEG\source\jdcolor.c;Middlewares\Third_Party\LibJPEG\source\jdmerge.c;Middlewares\Third_Party\LibJPEG\source\jquant1.c;Middlewares\Third_Party\LibJPEG\source\jquant2.c;Middlewares\Third_Party\LibJPEG\source\jdatasrc.c;Middlewares\Third_Party\LibJPEG\source\jaricom.c;Middlewares\Third_Party\LibJPEG\source\jerror.c;Middlewares\Third_Party\LibJPEG\source\jmemmgr.c;Middlewares\Third_Party\LibJPEG\source\jutils.c;Middlewares\Third_Party\LibJPEG\source\jmemnobs.c;Drivers\BSP\Components\lan8742\lan8742.c;Middlewares\Third_Party\LwIP\src\netif\ppp\auth.c;Middlewares\Third_Party\LwIP\src\netif\ppp\ccp.c;Middlewares\Third_Party\LwIP\src\netif\ppp\chap_ms.c;Middlewares\Third_Party\LwIP\src\netif\ppp\chap-md5.c;Middlewares\Third_Party\LwIP\src\netif\ppp\chap-new.c;Middlewares\Third_Party\LwIP\src\netif\ppp\demand.c;Middlewares\Third_Party\LwIP\src\netif\ppp\eap.c;Middlewares\Third_Party\LwIP\src\netif\ppp\eui64.c;Middlewares\Third_Party\LwIP\src\netif\ppp\fsm.c;Middlewares\Third_Party\LwIP\src\netif\ppp\ipcp.c;Middlewares\Third_Party\LwIP\src\netif\ppp\ipv6cp.c;Middlewares\Third_Party\LwIP\src\netif\ppp\lcp.c;Middlewares\Third_Party\LwIP\src\netif\ppp\magic.c;Middlewares\Third_Party\LwIP\src\netif\ppp\mppe.c;Middlewares\Third_Party\LwIP\src\netif\ppp\multilink.c;Middlewares\Third_Party\LwIP\src\netif\ppp\ppp.c;Middlewares\Third_Party\LwIP\src\netif\ppp\pppapi.c;Middlewares\Third_Party\LwIP\src\netif\ppp\pppcrypt.c;Middlewares\Third_Party\LwIP\src\netif\ppp\pppoe.c;Middlewares\Third_Party\LwIP\src\netif\ppp\pppol2tp.c;Middlewares\Third_Party\LwIP\src\netif\ppp\pppos.c;Middlewares\Third_Party\LwIP\src\netif\ppp\upap.c;Middlewares\Third_Party\LwIP\src\netif\ppp\utils.c;Middlewares\Third_Party\LwIP\src\netif\ppp\vj.c;Middlewares\Third_Party\LwIP\src\netif\bridgeif.c;Middlewares\Third_Party\LwIP\src\netif\bridgeif_fdb.c;Middlewares\Third_Party\LwIP\src\netif\ethernet.c;Middlewares\Third_Party\LwIP\src\netif\lowpan6.c;Middlewares\Third_Party\LwIP\src\netif\lowpan6_ble.c;Middlewares\Third_Party\LwIP\src\netif\lowpan6_common.c;Middlewares\Third_Party\LwIP\src\netif\slipif.c;Middlewares\Third_Party\LwIP\src\netif\zepif.c;Middlewares\Third_Party\LwIP\src\netif\ppp\ecp.c;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_rcc.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_rcc_ex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_bus.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_rcc.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_system.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_utils.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_flash.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_flash_ex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_gpio.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_gpio_ex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_gpio.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_dma.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_dma_ex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_dma.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_dmamux.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_pwr.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_pwr_ex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_pwr.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_cortex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_cortex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_def.h;Drivers\STM32F7xx_HAL_Driver\Inc\Legacy\stm32_hal_legacy.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_i2c.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_i2c_ex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_exti.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_exti.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_eth.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_crc.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_crc_ex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_crc.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_dma2d.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_dma2d.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_fmc.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_sdram.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_i2c.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_ltdc.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_ltdc_ex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_dsi.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_qspi.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_tim.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_tim_ex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_tim.h;Middlewares\Third_Party\FreeRTOS\Source\include\croutine.h;Middlewares\Third_Party\FreeRTOS\Source\include\deprecated_definitions.h;Middlewares\Third_Party\FreeRTOS\Source\include\event_groups.h;Middlewares\Third_Party\FreeRTOS\Source\include\FreeRTOS.h;Middlewares\Third_Party\FreeRTOS\Source\include\list.h;Middlewares\Third_Party\FreeRTOS\Source\include\message_buffer.h;Middlewares\Third_Party\FreeRTOS\Source\include\mpu_prototypes.h;Middlewares\Third_Party\FreeRTOS\Source\include\mpu_wrappers.h;Middlewares\Third_Party\FreeRTOS\Source\include\portable.h;Middlewares\Third_Party\FreeRTOS\Source\include\projdefs.h;Middlewares\Third_Party\FreeRTOS\Source\include\queue.h;Middlewares\Third_Party\FreeRTOS\Source\include\semphr.h;Middlewares\Third_Party\FreeRTOS\Source\include\stack_macros.h;Middlewares\Third_Party\FreeRTOS\Source\include\StackMacros.h;Middlewares\Third_Party\FreeRTOS\Source\include\stream_buffer.h;Middlewares\Third_Party\FreeRTOS\Source\include\task.h;Middlewares\Third_Party\FreeRTOS\Source\include\timers.h;Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2\cmsis_os2.h;Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2\cmsis_os.h;Middlewares\Third_Party\FreeRTOS\Source\portable\GCC\ARM_CM7\r0p1\portmacro.h;Middlewares\Third_Party\LibJPEG\include\jconfig_template.h;Middlewares\Third_Party\LibJPEG\include\jdct.h;Middlewares\Third_Party\LibJPEG\include\jerror.h;Middlewares\Third_Party\LibJPEG\include\jinclude.h;Middlewares\Third_Party\LibJPEG\include\jmemsys.h;Middlewares\Third_Party\LibJPEG\include\jmorecfg_template.h;Middlewares\Third_Party\LibJPEG\include\jpegint.h;Middlewares\Third_Party\LibJPEG\include\jpeglib.h;Middlewares\Third_Party\LibJPEG\include\jversion.h;Middlewares\Third_Party\LibJPEG\include\jdata_conf_template.h;Drivers\BSP\Components\lan8742\lan8742.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\ccp.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\chap_ms.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\chap-md5.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\chap-new.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\eap.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\eui64.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\fsm.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\ipcp.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\ipv6cp.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\lcp.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\magic.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\mppe.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\ppp.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\ppp_impl.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\ppp_opts.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\pppapi.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\pppcrypt.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\pppdebug.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\pppoe.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\pppol2tp.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\pppos.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\upap.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\vj.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\ecp.h;Drivers\CMSIS\Device\ST\STM32F7xx\Include\stm32f746xx.h;Drivers\CMSIS\Device\ST\STM32F7xx\Include\stm32f7xx.h;Drivers\CMSIS\Device\ST\STM32F7xx\Include\system_stm32f7xx.h;Drivers\CMSIS\Device\ST\STM32F7xx\Source\Templates\system_stm32f7xx.c;Middlewares\Third_Party\LwIP\src\include\lwip\altcp.h;Middlewares\Third_Party\LwIP\src\include\lwip\altcp_tcp.h;Middlewares\Third_Party\LwIP\src\include\lwip\altcp_tls.h;Middlewares\Third_Party\LwIP\src\include\lwip\api.h;Middlewares\Third_Party\LwIP\src\include\lwip\arch.h;Middlewares\Third_Party\LwIP\src\include\lwip\autoip.h;Middlewares\Third_Party\LwIP\src\include\lwip\debug.h;Middlewares\Third_Party\LwIP\src\include\lwip\def.h;Middlewares\Third_Party\LwIP\src\include\lwip\dhcp.h;Middlewares\Third_Party\LwIP\src\include\lwip\dhcp6.h;Middlewares\Third_Party\LwIP\src\include\lwip\dns.h;Middlewares\Third_Party\LwIP\src\include\lwip\err.h;Middlewares\Third_Party\LwIP\src\include\lwip\errno.h;Middlewares\Third_Party\LwIP\src\include\lwip\etharp.h;Middlewares\Third_Party\LwIP\src\include\lwip\ethip6.h;Middlewares\Third_Party\LwIP\src\include\lwip\icmp.h;Middlewares\Third_Party\LwIP\src\include\lwip\icmp6.h;Middlewares\Third_Party\LwIP\src\include\lwip\if_api.h;Middlewares\Third_Party\LwIP\src\include\lwip\igmp.h;Middlewares\Third_Party\LwIP\src\include\lwip\inet.h;Middlewares\Third_Party\LwIP\src\include\lwip\inet_chksum.h;Middlewares\Third_Party\LwIP\src\include\lwip\init.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip4.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip4_addr.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip4_frag.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip6.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip6_addr.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip6_frag.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip6_zone.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip_addr.h;Middlewares\Third_Party\LwIP\src\include\lwip\mem.h;Middlewares\Third_Party\LwIP\src\include\lwip\memp.h;Middlewares\Third_Party\LwIP\src\include\lwip\mld6.h;Middlewares\Third_Party\LwIP\src\include\lwip\nd6.h;Middlewares\Third_Party\LwIP\src\include\lwip\netbuf.h;Middlewares\Third_Party\LwIP\src\include\lwip\netdb.h;Middlewares\Third_Party\LwIP\src\include\lwip\netif.h;Middlewares\Third_Party\LwIP\src\include\lwip\netifapi.h;Middlewares\Third_Party\LwIP\src\include\lwip\opt.h;Middlewares\Third_Party\LwIP\src\include\lwip\pbuf.h;Middlewares\Third_Party\LwIP\src\include\lwip\raw.h;Middlewares\Third_Party\LwIP\src\include\lwip\sio.h;Middlewares\Third_Party\LwIP\src\include\lwip\snmp.h;Middlewares\Third_Party\LwIP\src\include\lwip\sockets.h;Middlewares\Third_Party\LwIP\src\include\lwip\stats.h;Middlewares\Third_Party\LwIP\src\include\lwip\sys.h;Middlewares\Third_Party\LwIP\src\include\lwip\tcp.h;Middlewares\Third_Party\LwIP\src\include\lwip\tcpbase.h;Middlewares\Third_Party\LwIP\src\include\lwip\tcpip.h;Middlewares\Third_Party\LwIP\src\include\lwip\timeouts.h;Middlewares\Third_Party\LwIP\src\include\lwip\udp.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\altcp_proxyconnect.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\altcp_tls_mbedtls_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\fs.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\httpd.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\httpd_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\http_client.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\lwiperf.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\mdns.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\mdns_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\mdns_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\mqtt.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\mqtt_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\mqtt_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\netbiosns.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\netbiosns_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\smtp.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\smtp_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmpv3.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp_core.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp_mib2.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp_scalar.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp_snmpv2_framework.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp_snmpv2_usm.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp_table.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp_threadsync.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\sntp.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\sntp_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\tftp_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\tftp_server.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\altcp_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\api_msg.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\memp_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\memp_std.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\mem_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\nd6_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\raw_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\sockets_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\tcpip_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\tcp_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\autoip.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\dhcp.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\dhcp6.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\dns.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\etharp.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\ethernet.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\iana.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\icmp.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\icmp6.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\ieee.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\igmp.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\ip.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\ip4.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\ip6.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\mld6.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\nd6.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\tcp.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\udp.h;Middlewares\Third_Party\LwIP\src\include\netif\bridgeif.h;Middlewares\Third_Party\LwIP\src\include\netif\bridgeif_opts.h;Middlewares\Third_Party\LwIP\src\include\netif\etharp.h;Middlewares\Third_Party\LwIP\src\include\netif\ethernet.h;Middlewares\Third_Party\LwIP\src\include\netif\ieee802154.h;Middlewares\Third_Party\LwIP\src\include\netif\lowpan6.h;Middlewares\Third_Party\LwIP\src\include\netif\lowpan6_ble.h;Middlewares\Third_Party\LwIP\src\include\netif\lowpan6_common.h;Middlewares\Third_Party\LwIP\src\include\netif\lowpan6_opts.h;Middlewares\Third_Party\LwIP\src\include\netif\slipif.h;Middlewares\Third_Party\LwIP\src\include\netif\zepif.h;Middlewares\Third_Party\LwIP\src\include\compat\posix\netdb.h;Middlewares\Third_Party\LwIP\src\include\compat\posix\arpa\inet.h;Middlewares\Third_Party\LwIP\src\include\compat\posix\net\if.h;Middlewares\Third_Party\LwIP\src\include\compat\posix\sys\socket.h;Middlewares\Third_Party\LwIP\src\include\compat\stdc\errno.h;Middlewares\Third_Party\LwIP\system\arch\bpstruct.h;Middlewares\Third_Party\LwIP\system\arch\cc.h;Middlewares\Third_Party\LwIP\system\arch\cpu.h;Middlewares\Third_Party\LwIP\system\arch\epstruct.h;Middlewares\Third_Party\LwIP\system\arch\init.h;Middlewares\Third_Party\LwIP\system\arch\lib.h;Middlewares\Third_Party\LwIP\system\arch\perf.h;Middlewares\Third_Party\LwIP\system\arch\sys_arch.h;Middlewares\Third_Party\LwIP\src\api\api_lib.c;Middlewares\Third_Party\LwIP\src\api\api_msg.c;Middlewares\Third_Party\LwIP\src\api\err.c;Middlewares\Third_Party\LwIP\src\api\if_api.c;Middlewares\Third_Party\LwIP\src\api\netbuf.c;Middlewares\Third_Party\LwIP\src\api\netdb.c;Middlewares\Third_Party\LwIP\src\api\netifapi.c;Middlewares\Third_Party\LwIP\src\api\sockets.c;Middlewares\Third_Party\LwIP\src\api\tcpip.c;Middlewares\Third_Party\LwIP\src\core\altcp.c;Middlewares\Third_Party\LwIP\src\core\altcp_alloc.c;Middlewares\Third_Party\LwIP\src\core\altcp_tcp.c;Middlewares\Third_Party\LwIP\src\core\def.c;Middlewares\Third_Party\LwIP\src\core\dns.c;Middlewares\Third_Party\LwIP\src\core\inet_chksum.c;Middlewares\Third_Party\LwIP\src\core\init.c;Middlewares\Third_Party\LwIP\src\core\ip.c;Middlewares\Third_Party\LwIP\src\core\mem.c;Middlewares\Third_Party\LwIP\src\core\memp.c;Middlewares\Third_Party\LwIP\src\core\netif.c;Middlewares\Third_Party\LwIP\src\core\pbuf.c;Middlewares\Third_Party\LwIP\src\core\raw.c;Middlewares\Third_Party\LwIP\src\core\stats.c;Middlewares\Third_Party\LwIP\src\core\sys.c;Middlewares\Third_Party\LwIP\src\core\tcp.c;Middlewares\Third_Party\LwIP\src\core\tcp_in.c;Middlewares\Third_Party\LwIP\src\core\tcp_out.c;Middlewares\Third_Party\LwIP\src\core\timeouts.c;Middlewares\Third_Party\LwIP\src\core\udp.c;Middlewares\Third_Party\LwIP\src\core\ipv4\autoip.c;Middlewares\Third_Party\LwIP\src\core\ipv4\dhcp.c;Middlewares\Third_Party\LwIP\src\core\ipv4\etharp.c;Middlewares\Third_Party\LwIP\src\core\ipv4\icmp.c;Middlewares\Third_Party\LwIP\src\core\ipv4\igmp.c;Middlewares\Third_Party\LwIP\src\core\ipv4\ip4.c;Middlewares\Third_Party\LwIP\src\core\ipv4\ip4_addr.c;Middlewares\Third_Party\LwIP\src\core\ipv4\ip4_frag.c;Middlewares\Third_Party\LwIP\src\core\ipv6\dhcp6.c;Middlewares\Third_Party\LwIP\src\core\ipv6\ethip6.c;Middlewares\Third_Party\LwIP\src\core\ipv6\icmp6.c;Middlewares\Third_Party\LwIP\src\core\ipv6\inet6.c;Middlewares\Third_Party\LwIP\src\core\ipv6\ip6.c;Middlewares\Third_Party\LwIP\src\core\ipv6\ip6_addr.c;Middlewares\Third_Party\LwIP\src\core\ipv6\ip6_frag.c;Middlewares\Third_Party\LwIP\src\core\ipv6\mld6.c;Middlewares\Third_Party\LwIP\src\core\ipv6\nd6.c;Middlewares\Third_Party\LwIP\system\OS\sys_arch.c;Middlewares\Third_Party\LwIP\src\apps\mqtt\mqtt.c;Middlewares\Third_Party\LwIP\src\include\lwip\altcp.h;Middlewares\Third_Party\LwIP\src\include\lwip\altcp_tcp.h;Middlewares\Third_Party\LwIP\src\include\lwip\altcp_tls.h;Middlewares\Third_Party\LwIP\src\include\lwip\api.h;Middlewares\Third_Party\LwIP\src\include\lwip\arch.h;Middlewares\Third_Party\LwIP\src\include\lwip\autoip.h;Middlewares\Third_Party\LwIP\src\include\lwip\debug.h;Middlewares\Third_Party\LwIP\src\include\lwip\def.h;Middlewares\Third_Party\LwIP\src\include\lwip\dhcp.h;Middlewares\Third_Party\LwIP\src\include\lwip\dhcp6.h;Middlewares\Third_Party\LwIP\src\include\lwip\dns.h;Middlewares\Third_Party\LwIP\src\include\lwip\err.h;Middlewares\Third_Party\LwIP\src\include\lwip\errno.h;Middlewares\Third_Party\LwIP\src\include\lwip\etharp.h;Middlewares\Third_Party\LwIP\src\include\lwip\ethip6.h;Middlewares\Third_Party\LwIP\src\include\lwip\icmp.h;Middlewares\Third_Party\LwIP\src\include\lwip\icmp6.h;Middlewares\Third_Party\LwIP\src\include\lwip\if_api.h;Middlewares\Third_Party\LwIP\src\include\lwip\igmp.h;Middlewares\Third_Party\LwIP\src\include\lwip\inet.h;Middlewares\Third_Party\LwIP\src\include\lwip\inet_chksum.h;Middlewares\Third_Party\LwIP\src\include\lwip\init.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip4.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip4_addr.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip4_frag.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip6.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip6_addr.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip6_frag.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip6_zone.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip_addr.h;Middlewares\Third_Party\LwIP\src\include\lwip\mem.h;Middlewares\Third_Party\LwIP\src\include\lwip\memp.h;Middlewares\Third_Party\LwIP\src\include\lwip\mld6.h;Middlewares\Third_Party\LwIP\src\include\lwip\nd6.h;Middlewares\Third_Party\LwIP\src\include\lwip\netbuf.h;Middlewares\Third_Party\LwIP\src\include\lwip\netdb.h;Middlewares\Third_Party\LwIP\src\include\lwip\netif.h;Middlewares\Third_Party\LwIP\src\include\lwip\netifapi.h;Middlewares\Third_Party\LwIP\src\include\lwip\opt.h;Middlewares\Third_Party\LwIP\src\include\lwip\pbuf.h;Middlewares\Third_Party\LwIP\src\include\lwip\raw.h;Middlewares\Third_Party\LwIP\src\include\lwip\sio.h;Middlewares\Third_Party\LwIP\src\include\lwip\snmp.h;Middlewares\Third_Party\LwIP\src\include\lwip\sockets.h;Middlewares\Third_Party\LwIP\src\include\lwip\stats.h;Middlewares\Third_Party\LwIP\src\include\lwip\sys.h;Middlewares\Third_Party\LwIP\src\include\lwip\tcp.h;Middlewares\Third_Party\LwIP\src\include\lwip\tcpbase.h;Middlewares\Third_Party\LwIP\src\include\lwip\tcpip.h;Middlewares\Third_Party\LwIP\src\include\lwip\timeouts.h;Middlewares\Third_Party\LwIP\src\include\lwip\udp.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\altcp_proxyconnect.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\altcp_tls_mbedtls_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\fs.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\httpd.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\httpd_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\http_client.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\lwiperf.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\mdns.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\mdns_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\mdns_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\mqtt.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\mqtt_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\mqtt_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\netbiosns.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\netbiosns_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\smtp.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\smtp_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmpv3.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp_core.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp_mib2.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp_scalar.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp_snmpv2_framework.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp_snmpv2_usm.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp_table.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp_threadsync.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\sntp.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\sntp_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\tftp_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\tftp_server.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\altcp_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\api_msg.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\memp_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\memp_std.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\mem_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\nd6_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\raw_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\sockets_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\tcpip_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\tcp_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\autoip.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\dhcp.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\dhcp6.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\dns.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\etharp.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\ethernet.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\iana.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\icmp.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\icmp6.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\ieee.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\igmp.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\ip.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\ip4.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\ip6.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\mld6.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\nd6.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\tcp.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\udp.h;Middlewares\Third_Party\LwIP\src\include\netif\bridgeif.h;Middlewares\Third_Party\LwIP\src\include\netif\bridgeif_opts.h;Middlewares\Third_Party\LwIP\src\include\netif\etharp.h;Middlewares\Third_Party\LwIP\src\include\netif\ethernet.h;Middlewares\Third_Party\LwIP\src\include\netif\ieee802154.h;Middlewares\Third_Party\LwIP\src\include\netif\lowpan6.h;Middlewares\Third_Party\LwIP\src\include\netif\lowpan6_ble.h;Middlewares\Third_Party\LwIP\src\include\netif\lowpan6_common.h;Middlewares\Third_Party\LwIP\src\include\netif\lowpan6_opts.h;Middlewares\Third_Party\LwIP\src\include\netif\slipif.h;Middlewares\Third_Party\LwIP\src\include\netif\zepif.h;Middlewares\Third_Party\LwIP\src\include\compat\posix\netdb.h;Middlewares\Third_Party\LwIP\src\include\compat\posix\arpa\inet.h;Middlewares\Third_Party\LwIP\src\include\compat\posix\net\if.h;Middlewares\Third_Party\LwIP\src\include\compat\posix\sys\socket.h;Middlewares\Third_Party\LwIP\src\include\compat\stdc\errno.h;Middlewares\Third_Party\LwIP\system\arch\bpstruct.h;Middlewares\Third_Party\LwIP\system\arch\cc.h;Middlewares\Third_Party\LwIP\system\arch\cpu.h;Middlewares\Third_Party\LwIP\system\arch\epstruct.h;Middlewares\Third_Party\LwIP\system\arch\init.h;Middlewares\Third_Party\LwIP\system\arch\lib.h;Middlewares\Third_Party\LwIP\system\arch\perf.h;Middlewares\Third_Party\LwIP\system\arch\sys_arch.h;Drivers\CMSIS\Include\cmsis_armcc.h;Drivers\CMSIS\Include\cmsis_armclang.h;Drivers\CMSIS\Include\cmsis_compiler.h;Drivers\CMSIS\Include\cmsis_gcc.h;Drivers\CMSIS\Include\cmsis_iccarm.h;Drivers\CMSIS\Include\cmsis_version.h;Drivers\CMSIS\Include\core_armv8mbl.h;Drivers\CMSIS\Include\core_armv8mml.h;Drivers\CMSIS\Include\core_cm0.h;Drivers\CMSIS\Include\core_cm0plus.h;Drivers\CMSIS\Include\core_cm1.h;Drivers\CMSIS\Include\core_cm23.h;Drivers\CMSIS\Include\core_cm3.h;Drivers\CMSIS\Include\core_cm33.h;Drivers\CMSIS\Include\core_cm4.h;Drivers\CMSIS\Include\core_cm7.h;Drivers\CMSIS\Include\core_sc000.h;Drivers\CMSIS\Include\core_sc300.h;Drivers\CMSIS\Include\mpu_armv7.h;Drivers\CMSIS\Include\mpu_armv8.h;Drivers\CMSIS\Include\tz_context.h; [PreviousUsedCubeIDEFiles] -SourceFiles=Core\Src\main.c;Core\Src\freertos.c;LIBJPEG\App\libjpeg.c;TouchGFX\target\generated\TouchGFXConfiguration.cpp;TouchGFX\target\generated\TouchGFXGeneratedHAL.cpp;TouchGFX\target\TouchGFXHAL.cpp;TouchGFX\target\STM32TouchController.cpp;TouchGFX\target\generated\STM32DMA.cpp;TouchGFX\target\generated\OSWrappers.cpp;TouchGFX\target\TouchGFXGPIO.cpp;TouchGFX\target\generated\SoftwareMJPEGDecoder.cpp;TouchGFX\App\app_touchgfx.c;Core\Src\stm32f7xx_it.c;Core\Src\stm32f7xx_hal_msp.c;Core\Src\stm32f7xx_hal_timebase_tim.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cortex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_crc.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_crc_ex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rcc.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rcc_ex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_flash.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_flash_ex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_gpio.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma_ex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pwr.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pwr_ex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_i2c.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_i2c_ex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_exti.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma2d.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_fmc.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_sdram.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_ltdc.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_ltdc_ex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dsi.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_qspi.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_tim.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_tim_ex.c;Middlewares\Third_Party\FreeRTOS\Source\croutine.c;Middlewares\Third_Party\FreeRTOS\Source\event_groups.c;Middlewares\Third_Party\FreeRTOS\Source\list.c;Middlewares\Third_Party\FreeRTOS\Source\queue.c;Middlewares\Third_Party\FreeRTOS\Source\stream_buffer.c;Middlewares\Third_Party\FreeRTOS\Source\tasks.c;Middlewares\Third_Party\FreeRTOS\Source\timers.c;Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2\cmsis_os2.c;Middlewares\Third_Party\FreeRTOS\Source\portable\MemMang\heap_4.c;Middlewares\Third_Party\FreeRTOS\Source\portable\GCC\ARM_CM7\r0p1\port.c;Middlewares\Third_Party\LibJPEG\source\jcapimin.c;Middlewares\Third_Party\LibJPEG\source\jcapistd.c;Middlewares\Third_Party\LibJPEG\source\jdapimin.c;Middlewares\Third_Party\LibJPEG\source\jdapistd.c;Middlewares\Third_Party\LibJPEG\source\jcomapi.c;Middlewares\Third_Party\LibJPEG\source\jcparam.c;Middlewares\Third_Party\LibJPEG\source\jctrans.c;Middlewares\Third_Party\LibJPEG\source\jdtrans.c;Middlewares\Third_Party\LibJPEG\source\jcinit.c;Middlewares\Third_Party\LibJPEG\source\jcmaster.c;Middlewares\Third_Party\LibJPEG\source\jcmainct.c;Middlewares\Third_Party\LibJPEG\source\jcprepct.c;Middlewares\Third_Party\LibJPEG\source\jccoefct.c;Middlewares\Third_Party\LibJPEG\source\jccolor.c;Middlewares\Third_Party\LibJPEG\source\jcsample.c;Middlewares\Third_Party\LibJPEG\source\jcdctmgr.c;Middlewares\Third_Party\LibJPEG\source\jfdctint.c;Middlewares\Third_Party\LibJPEG\source\jfdctfst.c;Middlewares\Third_Party\LibJPEG\source\jfdctflt.c;Middlewares\Third_Party\LibJPEG\source\jchuff.c;Middlewares\Third_Party\LibJPEG\source\jcarith.c;Middlewares\Third_Party\LibJPEG\source\jcmarker.c;Middlewares\Third_Party\LibJPEG\source\jdatadst.c;Middlewares\Third_Party\LibJPEG\source\jdmaster.c;Middlewares\Third_Party\LibJPEG\source\jdinput.c;Middlewares\Third_Party\LibJPEG\source\jdmainct.c;Middlewares\Third_Party\LibJPEG\source\jdcoefct.c;Middlewares\Third_Party\LibJPEG\source\jdpostct.c;Middlewares\Third_Party\LibJPEG\source\jdmarker.c;Middlewares\Third_Party\LibJPEG\source\jdhuff.c;Middlewares\Third_Party\LibJPEG\source\jdarith.c;Middlewares\Third_Party\LibJPEG\source\jddctmgr.c;Middlewares\Third_Party\LibJPEG\source\jidctint.c;Middlewares\Third_Party\LibJPEG\source\jidctfst.c;Middlewares\Third_Party\LibJPEG\source\jidctflt.c;Middlewares\Third_Party\LibJPEG\source\jdsample.c;Middlewares\Third_Party\LibJPEG\source\jdcolor.c;Middlewares\Third_Party\LibJPEG\source\jdmerge.c;Middlewares\Third_Party\LibJPEG\source\jquant1.c;Middlewares\Third_Party\LibJPEG\source\jquant2.c;Middlewares\Third_Party\LibJPEG\source\jdatasrc.c;Middlewares\Third_Party\LibJPEG\source\jaricom.c;Middlewares\Third_Party\LibJPEG\source\jerror.c;Middlewares\Third_Party\LibJPEG\source\jmemmgr.c;Middlewares\Third_Party\LibJPEG\source\jutils.c;Middlewares\Third_Party\LibJPEG\source\jmemnobs.c;Drivers\CMSIS\Device\ST\STM32F7xx\Source\Templates\system_stm32f7xx.c;Core\Src\system_stm32f7xx.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cortex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_crc.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_crc_ex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rcc.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rcc_ex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_flash.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_flash_ex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_gpio.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma_ex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pwr.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pwr_ex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_i2c.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_i2c_ex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_exti.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma2d.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_fmc.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_sdram.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_ltdc.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_ltdc_ex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dsi.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_qspi.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_tim.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_tim_ex.c;Middlewares\Third_Party\FreeRTOS\Source\croutine.c;Middlewares\Third_Party\FreeRTOS\Source\event_groups.c;Middlewares\Third_Party\FreeRTOS\Source\list.c;Middlewares\Third_Party\FreeRTOS\Source\queue.c;Middlewares\Third_Party\FreeRTOS\Source\stream_buffer.c;Middlewares\Third_Party\FreeRTOS\Source\tasks.c;Middlewares\Third_Party\FreeRTOS\Source\timers.c;Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2\cmsis_os2.c;Middlewares\Third_Party\FreeRTOS\Source\portable\MemMang\heap_4.c;Middlewares\Third_Party\FreeRTOS\Source\portable\GCC\ARM_CM7\r0p1\port.c;Middlewares\Third_Party\LibJPEG\source\jcapimin.c;Middlewares\Third_Party\LibJPEG\source\jcapistd.c;Middlewares\Third_Party\LibJPEG\source\jdapimin.c;Middlewares\Third_Party\LibJPEG\source\jdapistd.c;Middlewares\Third_Party\LibJPEG\source\jcomapi.c;Middlewares\Third_Party\LibJPEG\source\jcparam.c;Middlewares\Third_Party\LibJPEG\source\jctrans.c;Middlewares\Third_Party\LibJPEG\source\jdtrans.c;Middlewares\Third_Party\LibJPEG\source\jcinit.c;Middlewares\Third_Party\LibJPEG\source\jcmaster.c;Middlewares\Third_Party\LibJPEG\source\jcmainct.c;Middlewares\Third_Party\LibJPEG\source\jcprepct.c;Middlewares\Third_Party\LibJPEG\source\jccoefct.c;Middlewares\Third_Party\LibJPEG\source\jccolor.c;Middlewares\Third_Party\LibJPEG\source\jcsample.c;Middlewares\Third_Party\LibJPEG\source\jcdctmgr.c;Middlewares\Third_Party\LibJPEG\source\jfdctint.c;Middlewares\Third_Party\LibJPEG\source\jfdctfst.c;Middlewares\Third_Party\LibJPEG\source\jfdctflt.c;Middlewares\Third_Party\LibJPEG\source\jchuff.c;Middlewares\Third_Party\LibJPEG\source\jcarith.c;Middlewares\Third_Party\LibJPEG\source\jcmarker.c;Middlewares\Third_Party\LibJPEG\source\jdatadst.c;Middlewares\Third_Party\LibJPEG\source\jdmaster.c;Middlewares\Third_Party\LibJPEG\source\jdinput.c;Middlewares\Third_Party\LibJPEG\source\jdmainct.c;Middlewares\Third_Party\LibJPEG\source\jdcoefct.c;Middlewares\Third_Party\LibJPEG\source\jdpostct.c;Middlewares\Third_Party\LibJPEG\source\jdmarker.c;Middlewares\Third_Party\LibJPEG\source\jdhuff.c;Middlewares\Third_Party\LibJPEG\source\jdarith.c;Middlewares\Third_Party\LibJPEG\source\jddctmgr.c;Middlewares\Third_Party\LibJPEG\source\jidctint.c;Middlewares\Third_Party\LibJPEG\source\jidctfst.c;Middlewares\Third_Party\LibJPEG\source\jidctflt.c;Middlewares\Third_Party\LibJPEG\source\jdsample.c;Middlewares\Third_Party\LibJPEG\source\jdcolor.c;Middlewares\Third_Party\LibJPEG\source\jdmerge.c;Middlewares\Third_Party\LibJPEG\source\jquant1.c;Middlewares\Third_Party\LibJPEG\source\jquant2.c;Middlewares\Third_Party\LibJPEG\source\jdatasrc.c;Middlewares\Third_Party\LibJPEG\source\jaricom.c;Middlewares\Third_Party\LibJPEG\source\jerror.c;Middlewares\Third_Party\LibJPEG\source\jmemmgr.c;Middlewares\Third_Party\LibJPEG\source\jutils.c;Middlewares\Third_Party\LibJPEG\source\jmemnobs.c;Drivers\CMSIS\Device\ST\STM32F7xx\Source\Templates\system_stm32f7xx.c;Core\Src\system_stm32f7xx.c;;;Middlewares\Third_Party\FreeRTOS\Source\croutine.c;Middlewares\Third_Party\FreeRTOS\Source\event_groups.c;Middlewares\Third_Party\FreeRTOS\Source\list.c;Middlewares\Third_Party\FreeRTOS\Source\queue.c;Middlewares\Third_Party\FreeRTOS\Source\stream_buffer.c;Middlewares\Third_Party\FreeRTOS\Source\tasks.c;Middlewares\Third_Party\FreeRTOS\Source\timers.c;Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2\cmsis_os2.c;Middlewares\Third_Party\FreeRTOS\Source\portable\MemMang\heap_4.c;Middlewares\Third_Party\FreeRTOS\Source\portable\GCC\ARM_CM7\r0p1\port.c;Middlewares\Third_Party\LibJPEG\source\jcapimin.c;Middlewares\Third_Party\LibJPEG\source\jcapistd.c;Middlewares\Third_Party\LibJPEG\source\jdapimin.c;Middlewares\Third_Party\LibJPEG\source\jdapistd.c;Middlewares\Third_Party\LibJPEG\source\jcomapi.c;Middlewares\Third_Party\LibJPEG\source\jcparam.c;Middlewares\Third_Party\LibJPEG\source\jctrans.c;Middlewares\Third_Party\LibJPEG\source\jdtrans.c;Middlewares\Third_Party\LibJPEG\source\jcinit.c;Middlewares\Third_Party\LibJPEG\source\jcmaster.c;Middlewares\Third_Party\LibJPEG\source\jcmainct.c;Middlewares\Third_Party\LibJPEG\source\jcprepct.c;Middlewares\Third_Party\LibJPEG\source\jccoefct.c;Middlewares\Third_Party\LibJPEG\source\jccolor.c;Middlewares\Third_Party\LibJPEG\source\jcsample.c;Middlewares\Third_Party\LibJPEG\source\jcdctmgr.c;Middlewares\Third_Party\LibJPEG\source\jfdctint.c;Middlewares\Third_Party\LibJPEG\source\jfdctfst.c;Middlewares\Third_Party\LibJPEG\source\jfdctflt.c;Middlewares\Third_Party\LibJPEG\source\jchuff.c;Middlewares\Third_Party\LibJPEG\source\jcarith.c;Middlewares\Third_Party\LibJPEG\source\jcmarker.c;Middlewares\Third_Party\LibJPEG\source\jdatadst.c;Middlewares\Third_Party\LibJPEG\source\jdmaster.c;Middlewares\Third_Party\LibJPEG\source\jdinput.c;Middlewares\Third_Party\LibJPEG\source\jdmainct.c;Middlewares\Third_Party\LibJPEG\source\jdcoefct.c;Middlewares\Third_Party\LibJPEG\source\jdpostct.c;Middlewares\Third_Party\LibJPEG\source\jdmarker.c;Middlewares\Third_Party\LibJPEG\source\jdhuff.c;Middlewares\Third_Party\LibJPEG\source\jdarith.c;Middlewares\Third_Party\LibJPEG\source\jddctmgr.c;Middlewares\Third_Party\LibJPEG\source\jidctint.c;Middlewares\Third_Party\LibJPEG\source\jidctfst.c;Middlewares\Third_Party\LibJPEG\source\jidctflt.c;Middlewares\Third_Party\LibJPEG\source\jdsample.c;Middlewares\Third_Party\LibJPEG\source\jdcolor.c;Middlewares\Third_Party\LibJPEG\source\jdmerge.c;Middlewares\Third_Party\LibJPEG\source\jquant1.c;Middlewares\Third_Party\LibJPEG\source\jquant2.c;Middlewares\Third_Party\LibJPEG\source\jdatasrc.c;Middlewares\Third_Party\LibJPEG\source\jaricom.c;Middlewares\Third_Party\LibJPEG\source\jerror.c;Middlewares\Third_Party\LibJPEG\source\jmemmgr.c;Middlewares\Third_Party\LibJPEG\source\jutils.c;Middlewares\Third_Party\LibJPEG\source\jmemnobs.c; -HeaderPath=Drivers\STM32F7xx_HAL_Driver\Inc;Drivers\STM32F7xx_HAL_Driver\Inc\Legacy;Middlewares\Third_Party\FreeRTOS\Source\include;Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2;Middlewares\Third_Party\FreeRTOS\Source\portable\GCC\ARM_CM7\r0p1;Middlewares\Third_Party\LibJPEG\include;Drivers\CMSIS\Device\ST\STM32F7xx\Include;Drivers\CMSIS\Include;Drivers\BSP\Components\ft5336;Drivers\BSP\STM32746G-Discovery;Core\Inc;LIBJPEG\App;LIBJPEG\Target;TouchGFX\App;TouchGFX\target\generated;TouchGFX\target; +SourceFiles=Core\Src\main.c;Core\Src\freertos.c;LIBJPEG\App\libjpeg.c;LWIP\App\lwip.c;LWIP\Target\ethernetif.c;TouchGFX\target\generated\TouchGFXConfiguration.cpp;TouchGFX\target\generated\TouchGFXGeneratedHAL.cpp;TouchGFX\target\TouchGFXHAL.cpp;TouchGFX\target\STM32TouchController.cpp;TouchGFX\target\generated\STM32DMA.cpp;TouchGFX\target\generated\OSWrappers.cpp;TouchGFX\target\TouchGFXGPIO.cpp;TouchGFX\target\generated\SoftwareMJPEGDecoder.cpp;TouchGFX\App\app_touchgfx.c;Core\Src\stm32f7xx_it.c;Core\Src\stm32f7xx_hal_msp.c;Core\Src\stm32f7xx_hal_timebase_tim.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rcc.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rcc_ex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_flash.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_flash_ex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_gpio.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma_ex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pwr.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pwr_ex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cortex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_i2c.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_i2c_ex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_exti.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_eth.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_crc.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_crc_ex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma2d.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_fmc.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_sdram.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_ltdc.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_ltdc_ex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dsi.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_qspi.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_tim.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_tim_ex.c;Middlewares\Third_Party\FreeRTOS\Source\croutine.c;Middlewares\Third_Party\FreeRTOS\Source\event_groups.c;Middlewares\Third_Party\FreeRTOS\Source\list.c;Middlewares\Third_Party\FreeRTOS\Source\queue.c;Middlewares\Third_Party\FreeRTOS\Source\stream_buffer.c;Middlewares\Third_Party\FreeRTOS\Source\tasks.c;Middlewares\Third_Party\FreeRTOS\Source\timers.c;Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2\cmsis_os2.c;Middlewares\Third_Party\FreeRTOS\Source\portable\MemMang\heap_4.c;Middlewares\Third_Party\FreeRTOS\Source\portable\GCC\ARM_CM7\r0p1\port.c;Middlewares\Third_Party\LibJPEG\source\jcapimin.c;Middlewares\Third_Party\LibJPEG\source\jcapistd.c;Middlewares\Third_Party\LibJPEG\source\jdapimin.c;Middlewares\Third_Party\LibJPEG\source\jdapistd.c;Middlewares\Third_Party\LibJPEG\source\jcomapi.c;Middlewares\Third_Party\LibJPEG\source\jcparam.c;Middlewares\Third_Party\LibJPEG\source\jctrans.c;Middlewares\Third_Party\LibJPEG\source\jdtrans.c;Middlewares\Third_Party\LibJPEG\source\jcinit.c;Middlewares\Third_Party\LibJPEG\source\jcmaster.c;Middlewares\Third_Party\LibJPEG\source\jcmainct.c;Middlewares\Third_Party\LibJPEG\source\jcprepct.c;Middlewares\Third_Party\LibJPEG\source\jccoefct.c;Middlewares\Third_Party\LibJPEG\source\jccolor.c;Middlewares\Third_Party\LibJPEG\source\jcsample.c;Middlewares\Third_Party\LibJPEG\source\jcdctmgr.c;Middlewares\Third_Party\LibJPEG\source\jfdctint.c;Middlewares\Third_Party\LibJPEG\source\jfdctfst.c;Middlewares\Third_Party\LibJPEG\source\jfdctflt.c;Middlewares\Third_Party\LibJPEG\source\jchuff.c;Middlewares\Third_Party\LibJPEG\source\jcarith.c;Middlewares\Third_Party\LibJPEG\source\jcmarker.c;Middlewares\Third_Party\LibJPEG\source\jdatadst.c;Middlewares\Third_Party\LibJPEG\source\jdmaster.c;Middlewares\Third_Party\LibJPEG\source\jdinput.c;Middlewares\Third_Party\LibJPEG\source\jdmainct.c;Middlewares\Third_Party\LibJPEG\source\jdcoefct.c;Middlewares\Third_Party\LibJPEG\source\jdpostct.c;Middlewares\Third_Party\LibJPEG\source\jdmarker.c;Middlewares\Third_Party\LibJPEG\source\jdhuff.c;Middlewares\Third_Party\LibJPEG\source\jdarith.c;Middlewares\Third_Party\LibJPEG\source\jddctmgr.c;Middlewares\Third_Party\LibJPEG\source\jidctint.c;Middlewares\Third_Party\LibJPEG\source\jidctfst.c;Middlewares\Third_Party\LibJPEG\source\jidctflt.c;Middlewares\Third_Party\LibJPEG\source\jdsample.c;Middlewares\Third_Party\LibJPEG\source\jdcolor.c;Middlewares\Third_Party\LibJPEG\source\jdmerge.c;Middlewares\Third_Party\LibJPEG\source\jquant1.c;Middlewares\Third_Party\LibJPEG\source\jquant2.c;Middlewares\Third_Party\LibJPEG\source\jdatasrc.c;Middlewares\Third_Party\LibJPEG\source\jaricom.c;Middlewares\Third_Party\LibJPEG\source\jerror.c;Middlewares\Third_Party\LibJPEG\source\jmemmgr.c;Middlewares\Third_Party\LibJPEG\source\jutils.c;Middlewares\Third_Party\LibJPEG\source\jmemnobs.c;Drivers\BSP\Components\lan8742\lan8742.c;Middlewares\Third_Party\LwIP\src\netif\ppp\auth.c;Middlewares\Third_Party\LwIP\src\netif\ppp\ccp.c;Middlewares\Third_Party\LwIP\src\netif\ppp\chap_ms.c;Middlewares\Third_Party\LwIP\src\netif\ppp\chap-md5.c;Middlewares\Third_Party\LwIP\src\netif\ppp\chap-new.c;Middlewares\Third_Party\LwIP\src\netif\ppp\demand.c;Middlewares\Third_Party\LwIP\src\netif\ppp\eap.c;Middlewares\Third_Party\LwIP\src\netif\ppp\eui64.c;Middlewares\Third_Party\LwIP\src\netif\ppp\fsm.c;Middlewares\Third_Party\LwIP\src\netif\ppp\ipcp.c;Middlewares\Third_Party\LwIP\src\netif\ppp\ipv6cp.c;Middlewares\Third_Party\LwIP\src\netif\ppp\lcp.c;Middlewares\Third_Party\LwIP\src\netif\ppp\magic.c;Middlewares\Third_Party\LwIP\src\netif\ppp\mppe.c;Middlewares\Third_Party\LwIP\src\netif\ppp\multilink.c;Middlewares\Third_Party\LwIP\src\netif\ppp\ppp.c;Middlewares\Third_Party\LwIP\src\netif\ppp\pppapi.c;Middlewares\Third_Party\LwIP\src\netif\ppp\pppcrypt.c;Middlewares\Third_Party\LwIP\src\netif\ppp\pppoe.c;Middlewares\Third_Party\LwIP\src\netif\ppp\pppol2tp.c;Middlewares\Third_Party\LwIP\src\netif\ppp\pppos.c;Middlewares\Third_Party\LwIP\src\netif\ppp\upap.c;Middlewares\Third_Party\LwIP\src\netif\ppp\utils.c;Middlewares\Third_Party\LwIP\src\netif\ppp\vj.c;Middlewares\Third_Party\LwIP\src\netif\bridgeif.c;Middlewares\Third_Party\LwIP\src\netif\bridgeif_fdb.c;Middlewares\Third_Party\LwIP\src\netif\ethernet.c;Middlewares\Third_Party\LwIP\src\netif\lowpan6.c;Middlewares\Third_Party\LwIP\src\netif\lowpan6_ble.c;Middlewares\Third_Party\LwIP\src\netif\lowpan6_common.c;Middlewares\Third_Party\LwIP\src\netif\slipif.c;Middlewares\Third_Party\LwIP\src\netif\zepif.c;Middlewares\Third_Party\LwIP\src\netif\ppp\ecp.c;Drivers\CMSIS\Device\ST\STM32F7xx\Source\Templates\system_stm32f7xx.c;Middlewares\Third_Party\LwIP\src\api\api_lib.c;Middlewares\Third_Party\LwIP\src\api\api_msg.c;Middlewares\Third_Party\LwIP\src\api\err.c;Middlewares\Third_Party\LwIP\src\api\if_api.c;Middlewares\Third_Party\LwIP\src\api\netbuf.c;Middlewares\Third_Party\LwIP\src\api\netdb.c;Middlewares\Third_Party\LwIP\src\api\netifapi.c;Middlewares\Third_Party\LwIP\src\api\sockets.c;Middlewares\Third_Party\LwIP\src\api\tcpip.c;Middlewares\Third_Party\LwIP\src\core\altcp.c;Middlewares\Third_Party\LwIP\src\core\altcp_alloc.c;Middlewares\Third_Party\LwIP\src\core\altcp_tcp.c;Middlewares\Third_Party\LwIP\src\core\def.c;Middlewares\Third_Party\LwIP\src\core\dns.c;Middlewares\Third_Party\LwIP\src\core\inet_chksum.c;Middlewares\Third_Party\LwIP\src\core\init.c;Middlewares\Third_Party\LwIP\src\core\ip.c;Middlewares\Third_Party\LwIP\src\core\mem.c;Middlewares\Third_Party\LwIP\src\core\memp.c;Middlewares\Third_Party\LwIP\src\core\netif.c;Middlewares\Third_Party\LwIP\src\core\pbuf.c;Middlewares\Third_Party\LwIP\src\core\raw.c;Middlewares\Third_Party\LwIP\src\core\stats.c;Middlewares\Third_Party\LwIP\src\core\sys.c;Middlewares\Third_Party\LwIP\src\core\tcp.c;Middlewares\Third_Party\LwIP\src\core\tcp_in.c;Middlewares\Third_Party\LwIP\src\core\tcp_out.c;Middlewares\Third_Party\LwIP\src\core\timeouts.c;Middlewares\Third_Party\LwIP\src\core\udp.c;Middlewares\Third_Party\LwIP\src\core\ipv4\autoip.c;Middlewares\Third_Party\LwIP\src\core\ipv4\dhcp.c;Middlewares\Third_Party\LwIP\src\core\ipv4\etharp.c;Middlewares\Third_Party\LwIP\src\core\ipv4\icmp.c;Middlewares\Third_Party\LwIP\src\core\ipv4\igmp.c;Middlewares\Third_Party\LwIP\src\core\ipv4\ip4.c;Middlewares\Third_Party\LwIP\src\core\ipv4\ip4_addr.c;Middlewares\Third_Party\LwIP\src\core\ipv4\ip4_frag.c;Middlewares\Third_Party\LwIP\src\core\ipv6\dhcp6.c;Middlewares\Third_Party\LwIP\src\core\ipv6\ethip6.c;Middlewares\Third_Party\LwIP\src\core\ipv6\icmp6.c;Middlewares\Third_Party\LwIP\src\core\ipv6\inet6.c;Middlewares\Third_Party\LwIP\src\core\ipv6\ip6.c;Middlewares\Third_Party\LwIP\src\core\ipv6\ip6_addr.c;Middlewares\Third_Party\LwIP\src\core\ipv6\ip6_frag.c;Middlewares\Third_Party\LwIP\src\core\ipv6\mld6.c;Middlewares\Third_Party\LwIP\src\core\ipv6\nd6.c;Middlewares\Third_Party\LwIP\system\OS\sys_arch.c;Middlewares\Third_Party\LwIP\src\apps\mqtt\mqtt.c;Core\Src\system_stm32f7xx.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rcc.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rcc_ex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_flash.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_flash_ex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_gpio.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma_ex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pwr.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pwr_ex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cortex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_i2c.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_i2c_ex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_exti.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_eth.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_crc.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_crc_ex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma2d.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_fmc.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_sdram.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_ltdc.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_ltdc_ex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dsi.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_qspi.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_tim.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_tim_ex.c;Middlewares\Third_Party\FreeRTOS\Source\croutine.c;Middlewares\Third_Party\FreeRTOS\Source\event_groups.c;Middlewares\Third_Party\FreeRTOS\Source\list.c;Middlewares\Third_Party\FreeRTOS\Source\queue.c;Middlewares\Third_Party\FreeRTOS\Source\stream_buffer.c;Middlewares\Third_Party\FreeRTOS\Source\tasks.c;Middlewares\Third_Party\FreeRTOS\Source\timers.c;Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2\cmsis_os2.c;Middlewares\Third_Party\FreeRTOS\Source\portable\MemMang\heap_4.c;Middlewares\Third_Party\FreeRTOS\Source\portable\GCC\ARM_CM7\r0p1\port.c;Middlewares\Third_Party\LibJPEG\source\jcapimin.c;Middlewares\Third_Party\LibJPEG\source\jcapistd.c;Middlewares\Third_Party\LibJPEG\source\jdapimin.c;Middlewares\Third_Party\LibJPEG\source\jdapistd.c;Middlewares\Third_Party\LibJPEG\source\jcomapi.c;Middlewares\Third_Party\LibJPEG\source\jcparam.c;Middlewares\Third_Party\LibJPEG\source\jctrans.c;Middlewares\Third_Party\LibJPEG\source\jdtrans.c;Middlewares\Third_Party\LibJPEG\source\jcinit.c;Middlewares\Third_Party\LibJPEG\source\jcmaster.c;Middlewares\Third_Party\LibJPEG\source\jcmainct.c;Middlewares\Third_Party\LibJPEG\source\jcprepct.c;Middlewares\Third_Party\LibJPEG\source\jccoefct.c;Middlewares\Third_Party\LibJPEG\source\jccolor.c;Middlewares\Third_Party\LibJPEG\source\jcsample.c;Middlewares\Third_Party\LibJPEG\source\jcdctmgr.c;Middlewares\Third_Party\LibJPEG\source\jfdctint.c;Middlewares\Third_Party\LibJPEG\source\jfdctfst.c;Middlewares\Third_Party\LibJPEG\source\jfdctflt.c;Middlewares\Third_Party\LibJPEG\source\jchuff.c;Middlewares\Third_Party\LibJPEG\source\jcarith.c;Middlewares\Third_Party\LibJPEG\source\jcmarker.c;Middlewares\Third_Party\LibJPEG\source\jdatadst.c;Middlewares\Third_Party\LibJPEG\source\jdmaster.c;Middlewares\Third_Party\LibJPEG\source\jdinput.c;Middlewares\Third_Party\LibJPEG\source\jdmainct.c;Middlewares\Third_Party\LibJPEG\source\jdcoefct.c;Middlewares\Third_Party\LibJPEG\source\jdpostct.c;Middlewares\Third_Party\LibJPEG\source\jdmarker.c;Middlewares\Third_Party\LibJPEG\source\jdhuff.c;Middlewares\Third_Party\LibJPEG\source\jdarith.c;Middlewares\Third_Party\LibJPEG\source\jddctmgr.c;Middlewares\Third_Party\LibJPEG\source\jidctint.c;Middlewares\Third_Party\LibJPEG\source\jidctfst.c;Middlewares\Third_Party\LibJPEG\source\jidctflt.c;Middlewares\Third_Party\LibJPEG\source\jdsample.c;Middlewares\Third_Party\LibJPEG\source\jdcolor.c;Middlewares\Third_Party\LibJPEG\source\jdmerge.c;Middlewares\Third_Party\LibJPEG\source\jquant1.c;Middlewares\Third_Party\LibJPEG\source\jquant2.c;Middlewares\Third_Party\LibJPEG\source\jdatasrc.c;Middlewares\Third_Party\LibJPEG\source\jaricom.c;Middlewares\Third_Party\LibJPEG\source\jerror.c;Middlewares\Third_Party\LibJPEG\source\jmemmgr.c;Middlewares\Third_Party\LibJPEG\source\jutils.c;Middlewares\Third_Party\LibJPEG\source\jmemnobs.c;Drivers\BSP\Components\lan8742\lan8742.c;Middlewares\Third_Party\LwIP\src\netif\ppp\auth.c;Middlewares\Third_Party\LwIP\src\netif\ppp\ccp.c;Middlewares\Third_Party\LwIP\src\netif\ppp\chap_ms.c;Middlewares\Third_Party\LwIP\src\netif\ppp\chap-md5.c;Middlewares\Third_Party\LwIP\src\netif\ppp\chap-new.c;Middlewares\Third_Party\LwIP\src\netif\ppp\demand.c;Middlewares\Third_Party\LwIP\src\netif\ppp\eap.c;Middlewares\Third_Party\LwIP\src\netif\ppp\eui64.c;Middlewares\Third_Party\LwIP\src\netif\ppp\fsm.c;Middlewares\Third_Party\LwIP\src\netif\ppp\ipcp.c;Middlewares\Third_Party\LwIP\src\netif\ppp\ipv6cp.c;Middlewares\Third_Party\LwIP\src\netif\ppp\lcp.c;Middlewares\Third_Party\LwIP\src\netif\ppp\magic.c;Middlewares\Third_Party\LwIP\src\netif\ppp\mppe.c;Middlewares\Third_Party\LwIP\src\netif\ppp\multilink.c;Middlewares\Third_Party\LwIP\src\netif\ppp\ppp.c;Middlewares\Third_Party\LwIP\src\netif\ppp\pppapi.c;Middlewares\Third_Party\LwIP\src\netif\ppp\pppcrypt.c;Middlewares\Third_Party\LwIP\src\netif\ppp\pppoe.c;Middlewares\Third_Party\LwIP\src\netif\ppp\pppol2tp.c;Middlewares\Third_Party\LwIP\src\netif\ppp\pppos.c;Middlewares\Third_Party\LwIP\src\netif\ppp\upap.c;Middlewares\Third_Party\LwIP\src\netif\ppp\utils.c;Middlewares\Third_Party\LwIP\src\netif\ppp\vj.c;Middlewares\Third_Party\LwIP\src\netif\bridgeif.c;Middlewares\Third_Party\LwIP\src\netif\bridgeif_fdb.c;Middlewares\Third_Party\LwIP\src\netif\ethernet.c;Middlewares\Third_Party\LwIP\src\netif\lowpan6.c;Middlewares\Third_Party\LwIP\src\netif\lowpan6_ble.c;Middlewares\Third_Party\LwIP\src\netif\lowpan6_common.c;Middlewares\Third_Party\LwIP\src\netif\slipif.c;Middlewares\Third_Party\LwIP\src\netif\zepif.c;Middlewares\Third_Party\LwIP\src\netif\ppp\ecp.c;Drivers\CMSIS\Device\ST\STM32F7xx\Source\Templates\system_stm32f7xx.c;Middlewares\Third_Party\LwIP\src\api\api_lib.c;Middlewares\Third_Party\LwIP\src\api\api_msg.c;Middlewares\Third_Party\LwIP\src\api\err.c;Middlewares\Third_Party\LwIP\src\api\if_api.c;Middlewares\Third_Party\LwIP\src\api\netbuf.c;Middlewares\Third_Party\LwIP\src\api\netdb.c;Middlewares\Third_Party\LwIP\src\api\netifapi.c;Middlewares\Third_Party\LwIP\src\api\sockets.c;Middlewares\Third_Party\LwIP\src\api\tcpip.c;Middlewares\Third_Party\LwIP\src\core\altcp.c;Middlewares\Third_Party\LwIP\src\core\altcp_alloc.c;Middlewares\Third_Party\LwIP\src\core\altcp_tcp.c;Middlewares\Third_Party\LwIP\src\core\def.c;Middlewares\Third_Party\LwIP\src\core\dns.c;Middlewares\Third_Party\LwIP\src\core\inet_chksum.c;Middlewares\Third_Party\LwIP\src\core\init.c;Middlewares\Third_Party\LwIP\src\core\ip.c;Middlewares\Third_Party\LwIP\src\core\mem.c;Middlewares\Third_Party\LwIP\src\core\memp.c;Middlewares\Third_Party\LwIP\src\core\netif.c;Middlewares\Third_Party\LwIP\src\core\pbuf.c;Middlewares\Third_Party\LwIP\src\core\raw.c;Middlewares\Third_Party\LwIP\src\core\stats.c;Middlewares\Third_Party\LwIP\src\core\sys.c;Middlewares\Third_Party\LwIP\src\core\tcp.c;Middlewares\Third_Party\LwIP\src\core\tcp_in.c;Middlewares\Third_Party\LwIP\src\core\tcp_out.c;Middlewares\Third_Party\LwIP\src\core\timeouts.c;Middlewares\Third_Party\LwIP\src\core\udp.c;Middlewares\Third_Party\LwIP\src\core\ipv4\autoip.c;Middlewares\Third_Party\LwIP\src\core\ipv4\dhcp.c;Middlewares\Third_Party\LwIP\src\core\ipv4\etharp.c;Middlewares\Third_Party\LwIP\src\core\ipv4\icmp.c;Middlewares\Third_Party\LwIP\src\core\ipv4\igmp.c;Middlewares\Third_Party\LwIP\src\core\ipv4\ip4.c;Middlewares\Third_Party\LwIP\src\core\ipv4\ip4_addr.c;Middlewares\Third_Party\LwIP\src\core\ipv4\ip4_frag.c;Middlewares\Third_Party\LwIP\src\core\ipv6\dhcp6.c;Middlewares\Third_Party\LwIP\src\core\ipv6\ethip6.c;Middlewares\Third_Party\LwIP\src\core\ipv6\icmp6.c;Middlewares\Third_Party\LwIP\src\core\ipv6\inet6.c;Middlewares\Third_Party\LwIP\src\core\ipv6\ip6.c;Middlewares\Third_Party\LwIP\src\core\ipv6\ip6_addr.c;Middlewares\Third_Party\LwIP\src\core\ipv6\ip6_frag.c;Middlewares\Third_Party\LwIP\src\core\ipv6\mld6.c;Middlewares\Third_Party\LwIP\src\core\ipv6\nd6.c;Middlewares\Third_Party\LwIP\system\OS\sys_arch.c;Middlewares\Third_Party\LwIP\src\apps\mqtt\mqtt.c;Core\Src\system_stm32f7xx.c;;;Middlewares\Third_Party\FreeRTOS\Source\croutine.c;Middlewares\Third_Party\FreeRTOS\Source\event_groups.c;Middlewares\Third_Party\FreeRTOS\Source\list.c;Middlewares\Third_Party\FreeRTOS\Source\queue.c;Middlewares\Third_Party\FreeRTOS\Source\stream_buffer.c;Middlewares\Third_Party\FreeRTOS\Source\tasks.c;Middlewares\Third_Party\FreeRTOS\Source\timers.c;Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2\cmsis_os2.c;Middlewares\Third_Party\FreeRTOS\Source\portable\MemMang\heap_4.c;Middlewares\Third_Party\FreeRTOS\Source\portable\GCC\ARM_CM7\r0p1\port.c;Middlewares\Third_Party\LibJPEG\source\jcapimin.c;Middlewares\Third_Party\LibJPEG\source\jcapistd.c;Middlewares\Third_Party\LibJPEG\source\jdapimin.c;Middlewares\Third_Party\LibJPEG\source\jdapistd.c;Middlewares\Third_Party\LibJPEG\source\jcomapi.c;Middlewares\Third_Party\LibJPEG\source\jcparam.c;Middlewares\Third_Party\LibJPEG\source\jctrans.c;Middlewares\Third_Party\LibJPEG\source\jdtrans.c;Middlewares\Third_Party\LibJPEG\source\jcinit.c;Middlewares\Third_Party\LibJPEG\source\jcmaster.c;Middlewares\Third_Party\LibJPEG\source\jcmainct.c;Middlewares\Third_Party\LibJPEG\source\jcprepct.c;Middlewares\Third_Party\LibJPEG\source\jccoefct.c;Middlewares\Third_Party\LibJPEG\source\jccolor.c;Middlewares\Third_Party\LibJPEG\source\jcsample.c;Middlewares\Third_Party\LibJPEG\source\jcdctmgr.c;Middlewares\Third_Party\LibJPEG\source\jfdctint.c;Middlewares\Third_Party\LibJPEG\source\jfdctfst.c;Middlewares\Third_Party\LibJPEG\source\jfdctflt.c;Middlewares\Third_Party\LibJPEG\source\jchuff.c;Middlewares\Third_Party\LibJPEG\source\jcarith.c;Middlewares\Third_Party\LibJPEG\source\jcmarker.c;Middlewares\Third_Party\LibJPEG\source\jdatadst.c;Middlewares\Third_Party\LibJPEG\source\jdmaster.c;Middlewares\Third_Party\LibJPEG\source\jdinput.c;Middlewares\Third_Party\LibJPEG\source\jdmainct.c;Middlewares\Third_Party\LibJPEG\source\jdcoefct.c;Middlewares\Third_Party\LibJPEG\source\jdpostct.c;Middlewares\Third_Party\LibJPEG\source\jdmarker.c;Middlewares\Third_Party\LibJPEG\source\jdhuff.c;Middlewares\Third_Party\LibJPEG\source\jdarith.c;Middlewares\Third_Party\LibJPEG\source\jddctmgr.c;Middlewares\Third_Party\LibJPEG\source\jidctint.c;Middlewares\Third_Party\LibJPEG\source\jidctfst.c;Middlewares\Third_Party\LibJPEG\source\jidctflt.c;Middlewares\Third_Party\LibJPEG\source\jdsample.c;Middlewares\Third_Party\LibJPEG\source\jdcolor.c;Middlewares\Third_Party\LibJPEG\source\jdmerge.c;Middlewares\Third_Party\LibJPEG\source\jquant1.c;Middlewares\Third_Party\LibJPEG\source\jquant2.c;Middlewares\Third_Party\LibJPEG\source\jdatasrc.c;Middlewares\Third_Party\LibJPEG\source\jaricom.c;Middlewares\Third_Party\LibJPEG\source\jerror.c;Middlewares\Third_Party\LibJPEG\source\jmemmgr.c;Middlewares\Third_Party\LibJPEG\source\jutils.c;Middlewares\Third_Party\LibJPEG\source\jmemnobs.c;Middlewares\Third_Party\LwIP\src\netif\ppp\auth.c;Middlewares\Third_Party\LwIP\src\netif\ppp\ccp.c;Middlewares\Third_Party\LwIP\src\netif\ppp\chap_ms.c;Middlewares\Third_Party\LwIP\src\netif\ppp\chap-md5.c;Middlewares\Third_Party\LwIP\src\netif\ppp\chap-new.c;Middlewares\Third_Party\LwIP\src\netif\ppp\demand.c;Middlewares\Third_Party\LwIP\src\netif\ppp\eap.c;Middlewares\Third_Party\LwIP\src\netif\ppp\eui64.c;Middlewares\Third_Party\LwIP\src\netif\ppp\fsm.c;Middlewares\Third_Party\LwIP\src\netif\ppp\ipcp.c;Middlewares\Third_Party\LwIP\src\netif\ppp\ipv6cp.c;Middlewares\Third_Party\LwIP\src\netif\ppp\lcp.c;Middlewares\Third_Party\LwIP\src\netif\ppp\magic.c;Middlewares\Third_Party\LwIP\src\netif\ppp\mppe.c;Middlewares\Third_Party\LwIP\src\netif\ppp\multilink.c;Middlewares\Third_Party\LwIP\src\netif\ppp\ppp.c;Middlewares\Third_Party\LwIP\src\netif\ppp\pppapi.c;Middlewares\Third_Party\LwIP\src\netif\ppp\pppcrypt.c;Middlewares\Third_Party\LwIP\src\netif\ppp\pppoe.c;Middlewares\Third_Party\LwIP\src\netif\ppp\pppol2tp.c;Middlewares\Third_Party\LwIP\src\netif\ppp\pppos.c;Middlewares\Third_Party\LwIP\src\netif\ppp\upap.c;Middlewares\Third_Party\LwIP\src\netif\ppp\utils.c;Middlewares\Third_Party\LwIP\src\netif\ppp\vj.c;Middlewares\Third_Party\LwIP\src\netif\bridgeif.c;Middlewares\Third_Party\LwIP\src\netif\bridgeif_fdb.c;Middlewares\Third_Party\LwIP\src\netif\ethernet.c;Middlewares\Third_Party\LwIP\src\netif\lowpan6.c;Middlewares\Third_Party\LwIP\src\netif\lowpan6_ble.c;Middlewares\Third_Party\LwIP\src\netif\lowpan6_common.c;Middlewares\Third_Party\LwIP\src\netif\slipif.c;Middlewares\Third_Party\LwIP\src\netif\zepif.c;Middlewares\Third_Party\LwIP\src\netif\ppp\ecp.c;Middlewares\Third_Party\LwIP\src\api\api_lib.c;Middlewares\Third_Party\LwIP\src\api\api_msg.c;Middlewares\Third_Party\LwIP\src\api\err.c;Middlewares\Third_Party\LwIP\src\api\if_api.c;Middlewares\Third_Party\LwIP\src\api\netbuf.c;Middlewares\Third_Party\LwIP\src\api\netdb.c;Middlewares\Third_Party\LwIP\src\api\netifapi.c;Middlewares\Third_Party\LwIP\src\api\sockets.c;Middlewares\Third_Party\LwIP\src\api\tcpip.c;Middlewares\Third_Party\LwIP\src\core\altcp.c;Middlewares\Third_Party\LwIP\src\core\altcp_alloc.c;Middlewares\Third_Party\LwIP\src\core\altcp_tcp.c;Middlewares\Third_Party\LwIP\src\core\def.c;Middlewares\Third_Party\LwIP\src\core\dns.c;Middlewares\Third_Party\LwIP\src\core\inet_chksum.c;Middlewares\Third_Party\LwIP\src\core\init.c;Middlewares\Third_Party\LwIP\src\core\ip.c;Middlewares\Third_Party\LwIP\src\core\mem.c;Middlewares\Third_Party\LwIP\src\core\memp.c;Middlewares\Third_Party\LwIP\src\core\netif.c;Middlewares\Third_Party\LwIP\src\core\pbuf.c;Middlewares\Third_Party\LwIP\src\core\raw.c;Middlewares\Third_Party\LwIP\src\core\stats.c;Middlewares\Third_Party\LwIP\src\core\sys.c;Middlewares\Third_Party\LwIP\src\core\tcp.c;Middlewares\Third_Party\LwIP\src\core\tcp_in.c;Middlewares\Third_Party\LwIP\src\core\tcp_out.c;Middlewares\Third_Party\LwIP\src\core\timeouts.c;Middlewares\Third_Party\LwIP\src\core\udp.c;Middlewares\Third_Party\LwIP\src\core\ipv4\autoip.c;Middlewares\Third_Party\LwIP\src\core\ipv4\dhcp.c;Middlewares\Third_Party\LwIP\src\core\ipv4\etharp.c;Middlewares\Third_Party\LwIP\src\core\ipv4\icmp.c;Middlewares\Third_Party\LwIP\src\core\ipv4\igmp.c;Middlewares\Third_Party\LwIP\src\core\ipv4\ip4.c;Middlewares\Third_Party\LwIP\src\core\ipv4\ip4_addr.c;Middlewares\Third_Party\LwIP\src\core\ipv4\ip4_frag.c;Middlewares\Third_Party\LwIP\src\core\ipv6\dhcp6.c;Middlewares\Third_Party\LwIP\src\core\ipv6\ethip6.c;Middlewares\Third_Party\LwIP\src\core\ipv6\icmp6.c;Middlewares\Third_Party\LwIP\src\core\ipv6\inet6.c;Middlewares\Third_Party\LwIP\src\core\ipv6\ip6.c;Middlewares\Third_Party\LwIP\src\core\ipv6\ip6_addr.c;Middlewares\Third_Party\LwIP\src\core\ipv6\ip6_frag.c;Middlewares\Third_Party\LwIP\src\core\ipv6\mld6.c;Middlewares\Third_Party\LwIP\src\core\ipv6\nd6.c;Middlewares\Third_Party\LwIP\system\OS\sys_arch.c;Middlewares\Third_Party\LwIP\src\apps\mqtt\mqtt.c; +HeaderPath=Middlewares\Third_Party\LwIP\src\include;Middlewares\Third_Party\LwIP\system;Middlewares\Third_Party\LwIP\src\include;Middlewares\Third_Party\LwIP\system;Drivers\STM32F7xx_HAL_Driver\Inc;Drivers\STM32F7xx_HAL_Driver\Inc\Legacy;Middlewares\Third_Party\FreeRTOS\Source\include;Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2;Middlewares\Third_Party\FreeRTOS\Source\portable\GCC\ARM_CM7\r0p1;Middlewares\Third_Party\LibJPEG\include;Drivers\BSP\Components\lan8742;Middlewares\Third_Party\LwIP\src\include\netif\ppp;Drivers\CMSIS\Device\ST\STM32F7xx\Include;Middlewares\Third_Party\LwIP\src\include\lwip;Middlewares\Third_Party\LwIP\src\include\lwip\apps;Middlewares\Third_Party\LwIP\src\include\lwip\priv;Middlewares\Third_Party\LwIP\src\include\lwip\prot;Middlewares\Third_Party\LwIP\src\include\netif;Middlewares\Third_Party\LwIP\src\include\compat\posix;Middlewares\Third_Party\LwIP\src\include\compat\posix\arpa;Middlewares\Third_Party\LwIP\src\include\compat\posix\net;Middlewares\Third_Party\LwIP\src\include\compat\posix\sys;Middlewares\Third_Party\LwIP\src\include\compat\stdc;Middlewares\Third_Party\LwIP\system\arch;Drivers\CMSIS\Include;Drivers\BSP\Components\ft5336;Drivers\BSP\STM32746G-Discovery;Core\Inc;LIBJPEG\App;LIBJPEG\Target;LWIP\App;LWIP\Target;TouchGFX\App;TouchGFX\target\generated;TouchGFX\target; CDefines=USE_HAL_DRIVER;STM32F746xx;USE_HAL_DRIVER;USE_HAL_DRIVER; [PreviousGenFiles] AdvancedFolderStructure=true -HeaderFileListSize=16 +HeaderFileListSize=20 HeaderFiles#0=..\Core\Inc\FreeRTOSConfig.h HeaderFiles#1=..\LIBJPEG\App\libjpeg.h HeaderFiles#2=..\LIBJPEG\Target\jconfig.h HeaderFiles#3=..\LIBJPEG\Target\jmorecfg.h HeaderFiles#4=..\LIBJPEG\Target\jdata_conf.h -HeaderFiles#5=..\TouchGFX\App\app_touchgfx.h -HeaderFiles#6=..\TouchGFX\target\generated\TouchGFXGeneratedHAL.hpp -HeaderFiles#7=..\TouchGFX\target\TouchGFXHAL.hpp -HeaderFiles#8=..\TouchGFX\target\STM32TouchController.hpp -HeaderFiles#9=..\TouchGFX\target\generated\STM32DMA.hpp -HeaderFiles#10=..\TouchGFX\target\generated\MJPEGDecoder.hpp -HeaderFiles#11=..\TouchGFX\target\generated\DoubleBufferedVideoController.hpp -HeaderFiles#12=..\TouchGFX\target\generated\SoftwareMJPEGDecoder.hpp -HeaderFiles#13=..\Core\Inc\stm32f7xx_it.h -HeaderFiles#14=..\Core\Inc\stm32f7xx_hal_conf.h -HeaderFiles#15=..\Core\Inc\main.h -HeaderFolderListSize=6 +HeaderFiles#5=..\LWIP\App\lwip.h +HeaderFiles#6=..\LWIP\Target\lwipopts.h +HeaderFiles#7=..\LWIP\Target\ethernetif.h +HeaderFiles#8=..\TouchGFX\App\app_touchgfx.h +HeaderFiles#9=..\TouchGFX\target\generated\TouchGFXGeneratedHAL.hpp +HeaderFiles#10=..\TouchGFX\target\TouchGFXHAL.hpp +HeaderFiles#11=..\TouchGFX\target\STM32TouchController.hpp +HeaderFiles#12=..\TouchGFX\target\generated\STM32DMA.hpp +HeaderFiles#13=..\TouchGFX\target\generated\MJPEGDecoder.hpp +HeaderFiles#14=..\TouchGFX\target\generated\DoubleBufferedVideoController.hpp +HeaderFiles#15=..\TouchGFX\target\generated\SoftwareMJPEGDecoder.hpp +HeaderFiles#16=..\Core\Inc\stm32f7xx_it.h +HeaderFiles#17=..\Core\Inc\RTE_Components.h +HeaderFiles#18=..\Core\Inc\stm32f7xx_hal_conf.h +HeaderFiles#19=..\Core\Inc\main.h +HeaderFolderListSize=8 HeaderPath#0=..\Core\Inc HeaderPath#1=..\LIBJPEG\App HeaderPath#2=..\LIBJPEG\Target -HeaderPath#3=..\TouchGFX\App -HeaderPath#4=..\TouchGFX\target\generated -HeaderPath#5=..\TouchGFX\target +HeaderPath#3=..\LWIP\App +HeaderPath#4=..\LWIP\Target +HeaderPath#5=..\TouchGFX\App +HeaderPath#6=..\TouchGFX\target\generated +HeaderPath#7=..\TouchGFX\target HeaderFiles=; -SourceFileListSize=15 +SourceFileListSize=17 SourceFiles#0=..\Core\Src\freertos.c SourceFiles#1=..\LIBJPEG\App\libjpeg.c -SourceFiles#2=..\TouchGFX\target\generated\TouchGFXConfiguration.cpp -SourceFiles#3=..\TouchGFX\target\generated\TouchGFXGeneratedHAL.cpp -SourceFiles#4=..\TouchGFX\target\TouchGFXHAL.cpp -SourceFiles#5=..\TouchGFX\target\STM32TouchController.cpp -SourceFiles#6=..\TouchGFX\target\generated\STM32DMA.cpp -SourceFiles#7=..\TouchGFX\target\generated\OSWrappers.cpp -SourceFiles#8=..\TouchGFX\target\TouchGFXGPIO.cpp -SourceFiles#9=..\TouchGFX\target\generated\SoftwareMJPEGDecoder.cpp -SourceFiles#10=..\TouchGFX\App\app_touchgfx.c -SourceFiles#11=..\Core\Src\stm32f7xx_it.c -SourceFiles#12=..\Core\Src\stm32f7xx_hal_msp.c -SourceFiles#13=..\Core\Src\stm32f7xx_hal_timebase_tim.c -SourceFiles#14=..\Core\Src\main.c -SourceFolderListSize=5 +SourceFiles#2=..\LWIP\App\lwip.c +SourceFiles#3=..\LWIP\Target\ethernetif.c +SourceFiles#4=..\TouchGFX\target\generated\TouchGFXConfiguration.cpp +SourceFiles#5=..\TouchGFX\target\generated\TouchGFXGeneratedHAL.cpp +SourceFiles#6=..\TouchGFX\target\TouchGFXHAL.cpp +SourceFiles#7=..\TouchGFX\target\STM32TouchController.cpp +SourceFiles#8=..\TouchGFX\target\generated\STM32DMA.cpp +SourceFiles#9=..\TouchGFX\target\generated\OSWrappers.cpp +SourceFiles#10=..\TouchGFX\target\TouchGFXGPIO.cpp +SourceFiles#11=..\TouchGFX\target\generated\SoftwareMJPEGDecoder.cpp +SourceFiles#12=..\TouchGFX\App\app_touchgfx.c +SourceFiles#13=..\Core\Src\stm32f7xx_it.c +SourceFiles#14=..\Core\Src\stm32f7xx_hal_msp.c +SourceFiles#15=..\Core\Src\stm32f7xx_hal_timebase_tim.c +SourceFiles#16=..\Core\Src\main.c +SourceFolderListSize=7 SourcePath#0=..\Core\Src SourcePath#1=..\LIBJPEG\App -SourcePath#2=..\TouchGFX\target\generated -SourcePath#3=..\TouchGFX\target -SourcePath#4=..\TouchGFX\App +SourcePath#2=..\LWIP\App +SourcePath#3=..\LWIP\Target +SourcePath#4=..\TouchGFX\target\generated +SourcePath#5=..\TouchGFX\target +SourcePath#6=..\TouchGFX\App SourceFiles=; diff --git a/STM32_Disco746G/Core/Inc/RTE_Components.h b/STM32_Disco746G/Core/Inc/RTE_Components.h new file mode 100644 index 0000000000000000000000000000000000000000..91a6057e7f2bc929ca3cd99ae3fe6a743ab78320 --- /dev/null +++ b/STM32_Disco746G/Core/Inc/RTE_Components.h @@ -0,0 +1,28 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file + * @author MCD Application Team + * @version V2.0.0 + ****************************************************************************** + * @attention + * + * Copyright (c) 2023 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + /* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __RTE_COMPONENTS_H__ +#define __RTE_COMPONENTS_H__ + +/* Defines ------------------------------------------------------------------*/ +/* STMicroelectronics.X-CUBE-TOUCHGFX.4.22.0 */ +#define TOUCHGFX_APP + +#endif /* __RTE_COMPONENTS_H__ */ diff --git a/STM32_Disco746G/Core/Inc/stm32f7xx_hal_conf.h b/STM32_Disco746G/Core/Inc/stm32f7xx_hal_conf.h index f81164d09b5102d158b4847fd1c840848506b739..003e5b5d5d40e578005bc635536a60f484535ba4 100644 --- a/STM32_Disco746G/Core/Inc/stm32f7xx_hal_conf.h +++ b/STM32_Disco746G/Core/Inc/stm32f7xx_hal_conf.h @@ -45,7 +45,7 @@ /* #define HAL_DAC_MODULE_ENABLED */ /* #define HAL_DCMI_MODULE_ENABLED */ #define HAL_DMA2D_MODULE_ENABLED -/* #define HAL_ETH_MODULE_ENABLED */ +#define HAL_ETH_MODULE_ENABLED /* #define HAL_ETH_LEGACY_MODULE_ENABLED */ /* #define HAL_NAND_MODULE_ENABLED */ /* #define HAL_NOR_MODULE_ENABLED */ @@ -210,15 +210,15 @@ #define MAC_ADDR5 0U /* Definition of the Ethernet driver buffers size and count */ -#define ETH_RX_BUF_SIZE /* buffer size for receive */ +#define ETH_RX_BUF_SIZE 1536 /* buffer size for receive */ #define ETH_TX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for transmit */ #define ETH_RXBUFNB ((uint32_t)4U) /* 4 Rx buffers of size ETH_RX_BUF_SIZE */ #define ETH_TXBUFNB ((uint32_t)4U) /* 4 Tx buffers of size ETH_TX_BUF_SIZE */ /* Section 2: PHY configuration section */ -/* DP83848_PHY_ADDRESS Address*/ -#define DP83848_PHY_ADDRESS +/* LAN8742A PHY Address*/ +#define LAN8742A_PHY_ADDRESS 0x00U /* PHY Reset delay these values are based on a 1 ms Systick interrupt*/ #define PHY_RESET_DELAY ((uint32_t)0x000000FFU) /* PHY Configuration delay */ @@ -248,10 +248,13 @@ #define PHY_JABBER_DETECTION ((uint16_t)0x0002U) /*!< Jabber condition detected */ /* Section 4: Extended PHY Registers */ -#define PHY_SR ((uint16_t)) /*!< PHY status register Offset */ +#define PHY_SR ((uint16_t)0x001FU) /*!< PHY status register Offset */ -#define PHY_SPEED_STATUS ((uint16_t)) /*!< PHY Speed mask */ -#define PHY_DUPLEX_STATUS ((uint16_t)) /*!< PHY Duplex mask */ +#define PHY_SPEED_STATUS ((uint16_t)0x0004U) /*!< PHY Speed mask */ +#define PHY_DUPLEX_STATUS ((uint16_t)0x0010U) /*!< PHY Duplex mask */ + +#define PHY_ISFR ((uint16_t)0x1DU) /*!< PHY Interrupt Source Flag register Offset */ +#define PHY_ISFR_INT4 ((uint16_t)0x0010U) /*!< PHY Link down inturrupt */ /* ################## SPI peripheral configuration ########################## */ diff --git a/STM32_Disco746G/Core/Inc/stm32f7xx_it.h b/STM32_Disco746G/Core/Inc/stm32f7xx_it.h index 0e14b5c7fdc7cf7be3a73b06f58c45dc6794a510..e1a37247710af9e83efc999e9ab2d367eadc588e 100644 --- a/STM32_Disco746G/Core/Inc/stm32f7xx_it.h +++ b/STM32_Disco746G/Core/Inc/stm32f7xx_it.h @@ -54,6 +54,7 @@ void BusFault_Handler(void); void UsageFault_Handler(void); void DebugMon_Handler(void); void TIM6_DAC_IRQHandler(void); +void ETH_IRQHandler(void); void LTDC_IRQHandler(void); void DMA2D_IRQHandler(void); /* USER CODE BEGIN EFP */ diff --git a/STM32_Disco746G/Core/Src/main.c b/STM32_Disco746G/Core/Src/main.c index cd7ff398432339d6cc35232c38b44d0c654b3b3d..1769c18b11989c5f92573ff30744ff71e5140859 100644 --- a/STM32_Disco746G/Core/Src/main.c +++ b/STM32_Disco746G/Core/Src/main.c @@ -21,6 +21,7 @@ #include "main.h" #include "cmsis_os.h" #include "libjpeg.h" +#include "lwip.h" #include "app_touchgfx.h" /* Private includes ----------------------------------------------------------*/ @@ -896,9 +897,9 @@ static void MX_GPIO_Init(void) /* GPIO Ports Clock Enable */ __HAL_RCC_GPIOE_CLK_ENABLE(); + __HAL_RCC_GPIOG_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE(); - __HAL_RCC_GPIOG_CLK_ENABLE(); __HAL_RCC_GPIOJ_CLK_ENABLE(); __HAL_RCC_GPIOD_CLK_ENABLE(); __HAL_RCC_GPIOK_CLK_ENABLE(); @@ -974,6 +975,8 @@ static void MX_GPIO_Init(void) /* USER CODE END Header_StartDefaultTask */ void StartDefaultTask(void *argument) { + /* init code for LWIP */ + MX_LWIP_Init(); /* USER CODE BEGIN 5 */ /* Infinite loop */ for(;;) diff --git a/STM32_Disco746G/Core/Src/stm32f7xx_it.c b/STM32_Disco746G/Core/Src/stm32f7xx_it.c index 37d66f7a1a5d154af6e2371075b9bce60296b9c9..6b9aa3ea37aa4f6b9e3dc20c3370574376ca223c 100644 --- a/STM32_Disco746G/Core/Src/stm32f7xx_it.c +++ b/STM32_Disco746G/Core/Src/stm32f7xx_it.c @@ -56,6 +56,7 @@ /* USER CODE END 0 */ /* External variables --------------------------------------------------------*/ +extern ETH_HandleTypeDef heth; extern DMA2D_HandleTypeDef hdma2d; extern LTDC_HandleTypeDef hltdc; extern TIM_HandleTypeDef htim6; @@ -174,6 +175,20 @@ void TIM6_DAC_IRQHandler(void) /* USER CODE END TIM6_DAC_IRQn 1 */ } +/** + * @brief This function handles Ethernet global interrupt. + */ +void ETH_IRQHandler(void) +{ + /* USER CODE BEGIN ETH_IRQn 0 */ + + /* USER CODE END ETH_IRQn 0 */ + HAL_ETH_IRQHandler(&heth); + /* USER CODE BEGIN ETH_IRQn 1 */ + + /* USER CODE END ETH_IRQn 1 */ +} + /** * @brief This function handles LTDC global interrupt. */ diff --git a/STM32_Disco746G/Drivers/BSP/Components/lan8742/lan8742.c b/STM32_Disco746G/Drivers/BSP/Components/lan8742/lan8742.c new file mode 100644 index 0000000000000000000000000000000000000000..a2683930f3c49a37534505f38f77160b185936e6 --- /dev/null +++ b/STM32_Disco746G/Drivers/BSP/Components/lan8742/lan8742.c @@ -0,0 +1,664 @@ +/** + ****************************************************************************** + * @file lan8742.c + * @author MCD Application Team + * @brief This file provides a set of functions needed to manage the LAN742 + * PHY devices. + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2017 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "lan8742.h" + +/** @addtogroup BSP + * @{ + */ + +/** @addtogroup Component + * @{ + */ + +/** @defgroup LAN8742 LAN8742 + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/** @defgroup LAN8742_Private_Defines LAN8742 Private Defines + * @{ + */ +#define LAN8742_SW_RESET_TO ((uint32_t)500U) +#define LAN8742_INIT_TO ((uint32_t)2000U) +#define LAN8742_MAX_DEV_ADDR ((uint32_t)31U) +/** + * @} + */ + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ +/** @defgroup LAN8742_Private_Functions LAN8742 Private Functions + * @{ + */ + +/** + * @brief Register IO functions to component object + * @param pObj: device object of LAN8742_Object_t. + * @param ioctx: holds device IO functions. + * @retval LAN8742_STATUS_OK if OK + * LAN8742_STATUS_ERROR if missing mandatory function + */ +int32_t LAN8742_RegisterBusIO(lan8742_Object_t *pObj, lan8742_IOCtx_t *ioctx) +{ + if(!pObj || !ioctx->ReadReg || !ioctx->WriteReg || !ioctx->GetTick) + { + return LAN8742_STATUS_ERROR; + } + + pObj->IO.Init = ioctx->Init; + pObj->IO.DeInit = ioctx->DeInit; + pObj->IO.ReadReg = ioctx->ReadReg; + pObj->IO.WriteReg = ioctx->WriteReg; + pObj->IO.GetTick = ioctx->GetTick; + + return LAN8742_STATUS_OK; +} + +/** + * @brief Initialize the lan8742 and configure the needed hardware resources + * @param pObj: device object LAN8742_Object_t. + * @retval LAN8742_STATUS_OK if OK + * LAN8742_STATUS_ADDRESS_ERROR if cannot find device address + * LAN8742_STATUS_READ_ERROR if connot read register + * LAN8742_STATUS_WRITE_ERROR if connot write to register + * LAN8742_STATUS_RESET_TIMEOUT if cannot perform a software reset + */ + int32_t LAN8742_Init(lan8742_Object_t *pObj) + { + uint32_t tickstart = 0, regvalue = 0, addr = 0; + int32_t status = LAN8742_STATUS_OK; + + if(pObj->Is_Initialized == 0) + { + if(pObj->IO.Init != 0) + { + /* GPIO and Clocks initialization */ + pObj->IO.Init(); + } + + /* for later check */ + pObj->DevAddr = LAN8742_MAX_DEV_ADDR + 1; + + /* Get the device address from special mode register */ + for(addr = 0; addr <= LAN8742_MAX_DEV_ADDR; addr ++) + { + if(pObj->IO.ReadReg(addr, LAN8742_SMR, ®value) < 0) + { + status = LAN8742_STATUS_READ_ERROR; + /* Can't read from this device address + continue with next address */ + continue; + } + + if((regvalue & LAN8742_SMR_PHY_ADDR) == addr) + { + pObj->DevAddr = addr; + status = LAN8742_STATUS_OK; + break; + } + } + + if(pObj->DevAddr > LAN8742_MAX_DEV_ADDR) + { + status = LAN8742_STATUS_ADDRESS_ERROR; + } + + /* if device address is matched */ + if(status == LAN8742_STATUS_OK) + { + /* set a software reset */ + if(pObj->IO.WriteReg(pObj->DevAddr, LAN8742_BCR, LAN8742_BCR_SOFT_RESET) >= 0) + { + /* get software reset status */ + if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_BCR, ®value) >= 0) + { + tickstart = pObj->IO.GetTick(); + + /* wait until software reset is done or timeout occured */ + while(regvalue & LAN8742_BCR_SOFT_RESET) + { + if((pObj->IO.GetTick() - tickstart) <= LAN8742_SW_RESET_TO) + { + if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_BCR, ®value) < 0) + { + status = LAN8742_STATUS_READ_ERROR; + break; + } + } + else + { + status = LAN8742_STATUS_RESET_TIMEOUT; + break; + } + } + } + else + { + status = LAN8742_STATUS_READ_ERROR; + } + } + else + { + status = LAN8742_STATUS_WRITE_ERROR; + } + } + } + + if(status == LAN8742_STATUS_OK) + { + tickstart = pObj->IO.GetTick(); + + /* Wait for 2s to perform initialization */ + while((pObj->IO.GetTick() - tickstart) <= LAN8742_INIT_TO) + { + } + pObj->Is_Initialized = 1; + } + + return status; + } + +/** + * @brief De-Initialize the lan8742 and it's hardware resources + * @param pObj: device object LAN8742_Object_t. + * @retval None + */ +int32_t LAN8742_DeInit(lan8742_Object_t *pObj) +{ + if(pObj->Is_Initialized) + { + if(pObj->IO.DeInit != 0) + { + if(pObj->IO.DeInit() < 0) + { + return LAN8742_STATUS_ERROR; + } + } + + pObj->Is_Initialized = 0; + } + + return LAN8742_STATUS_OK; +} + +/** + * @brief Disable the LAN8742 power down mode. + * @param pObj: device object LAN8742_Object_t. + * @retval LAN8742_STATUS_OK if OK + * LAN8742_STATUS_READ_ERROR if connot read register + * LAN8742_STATUS_WRITE_ERROR if connot write to register + */ +int32_t LAN8742_DisablePowerDownMode(lan8742_Object_t *pObj) +{ + uint32_t readval = 0; + int32_t status = LAN8742_STATUS_OK; + + if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_BCR, &readval) >= 0) + { + readval &= ~LAN8742_BCR_POWER_DOWN; + + /* Apply configuration */ + if(pObj->IO.WriteReg(pObj->DevAddr, LAN8742_BCR, readval) < 0) + { + status = LAN8742_STATUS_WRITE_ERROR; + } + } + else + { + status = LAN8742_STATUS_READ_ERROR; + } + + return status; +} + +/** + * @brief Enable the LAN8742 power down mode. + * @param pObj: device object LAN8742_Object_t. + * @retval LAN8742_STATUS_OK if OK + * LAN8742_STATUS_READ_ERROR if connot read register + * LAN8742_STATUS_WRITE_ERROR if connot write to register + */ +int32_t LAN8742_EnablePowerDownMode(lan8742_Object_t *pObj) +{ + uint32_t readval = 0; + int32_t status = LAN8742_STATUS_OK; + + if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_BCR, &readval) >= 0) + { + readval |= LAN8742_BCR_POWER_DOWN; + + /* Apply configuration */ + if(pObj->IO.WriteReg(pObj->DevAddr, LAN8742_BCR, readval) < 0) + { + status = LAN8742_STATUS_WRITE_ERROR; + } + } + else + { + status = LAN8742_STATUS_READ_ERROR; + } + + return status; +} + +/** + * @brief Start the auto negotiation process. + * @param pObj: device object LAN8742_Object_t. + * @retval LAN8742_STATUS_OK if OK + * LAN8742_STATUS_READ_ERROR if connot read register + * LAN8742_STATUS_WRITE_ERROR if connot write to register + */ +int32_t LAN8742_StartAutoNego(lan8742_Object_t *pObj) +{ + uint32_t readval = 0; + int32_t status = LAN8742_STATUS_OK; + + if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_BCR, &readval) >= 0) + { + readval |= LAN8742_BCR_AUTONEGO_EN; + + /* Apply configuration */ + if(pObj->IO.WriteReg(pObj->DevAddr, LAN8742_BCR, readval) < 0) + { + status = LAN8742_STATUS_WRITE_ERROR; + } + } + else + { + status = LAN8742_STATUS_READ_ERROR; + } + + return status; +} + +/** + * @brief Get the link state of LAN8742 device. + * @param pObj: Pointer to device object. + * @param pLinkState: Pointer to link state + * @retval LAN8742_STATUS_LINK_DOWN if link is down + * LAN8742_STATUS_AUTONEGO_NOTDONE if Auto nego not completed + * LAN8742_STATUS_100MBITS_FULLDUPLEX if 100Mb/s FD + * LAN8742_STATUS_100MBITS_HALFDUPLEX if 100Mb/s HD + * LAN8742_STATUS_10MBITS_FULLDUPLEX if 10Mb/s FD + * LAN8742_STATUS_10MBITS_HALFDUPLEX if 10Mb/s HD + * LAN8742_STATUS_READ_ERROR if connot read register + * LAN8742_STATUS_WRITE_ERROR if connot write to register + */ +int32_t LAN8742_GetLinkState(lan8742_Object_t *pObj) +{ + uint32_t readval = 0; + + /* Read Status register */ + if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_BSR, &readval) < 0) + { + return LAN8742_STATUS_READ_ERROR; + } + + /* Read Status register again */ + if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_BSR, &readval) < 0) + { + return LAN8742_STATUS_READ_ERROR; + } + + if((readval & LAN8742_BSR_LINK_STATUS) == 0) + { + /* Return Link Down status */ + return LAN8742_STATUS_LINK_DOWN; + } + + /* Check Auto negotiaition */ + if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_BCR, &readval) < 0) + { + return LAN8742_STATUS_READ_ERROR; + } + + if((readval & LAN8742_BCR_AUTONEGO_EN) != LAN8742_BCR_AUTONEGO_EN) + { + if(((readval & LAN8742_BCR_SPEED_SELECT) == LAN8742_BCR_SPEED_SELECT) && ((readval & LAN8742_BCR_DUPLEX_MODE) == LAN8742_BCR_DUPLEX_MODE)) + { + return LAN8742_STATUS_100MBITS_FULLDUPLEX; + } + else if ((readval & LAN8742_BCR_SPEED_SELECT) == LAN8742_BCR_SPEED_SELECT) + { + return LAN8742_STATUS_100MBITS_HALFDUPLEX; + } + else if ((readval & LAN8742_BCR_DUPLEX_MODE) == LAN8742_BCR_DUPLEX_MODE) + { + return LAN8742_STATUS_10MBITS_FULLDUPLEX; + } + else + { + return LAN8742_STATUS_10MBITS_HALFDUPLEX; + } + } + else /* Auto Nego enabled */ + { + if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_PHYSCSR, &readval) < 0) + { + return LAN8742_STATUS_READ_ERROR; + } + + /* Check if auto nego not done */ + if((readval & LAN8742_PHYSCSR_AUTONEGO_DONE) == 0) + { + return LAN8742_STATUS_AUTONEGO_NOTDONE; + } + + if((readval & LAN8742_PHYSCSR_HCDSPEEDMASK) == LAN8742_PHYSCSR_100BTX_FD) + { + return LAN8742_STATUS_100MBITS_FULLDUPLEX; + } + else if ((readval & LAN8742_PHYSCSR_HCDSPEEDMASK) == LAN8742_PHYSCSR_100BTX_HD) + { + return LAN8742_STATUS_100MBITS_HALFDUPLEX; + } + else if ((readval & LAN8742_PHYSCSR_HCDSPEEDMASK) == LAN8742_PHYSCSR_10BT_FD) + { + return LAN8742_STATUS_10MBITS_FULLDUPLEX; + } + else + { + return LAN8742_STATUS_10MBITS_HALFDUPLEX; + } + } +} + +/** + * @brief Set the link state of LAN8742 device. + * @param pObj: Pointer to device object. + * @param pLinkState: link state can be one of the following + * LAN8742_STATUS_100MBITS_FULLDUPLEX if 100Mb/s FD + * LAN8742_STATUS_100MBITS_HALFDUPLEX if 100Mb/s HD + * LAN8742_STATUS_10MBITS_FULLDUPLEX if 10Mb/s FD + * LAN8742_STATUS_10MBITS_HALFDUPLEX if 10Mb/s HD + * @retval LAN8742_STATUS_OK if OK + * LAN8742_STATUS_ERROR if parameter error + * LAN8742_STATUS_READ_ERROR if connot read register + * LAN8742_STATUS_WRITE_ERROR if connot write to register + */ +int32_t LAN8742_SetLinkState(lan8742_Object_t *pObj, uint32_t LinkState) +{ + uint32_t bcrvalue = 0; + int32_t status = LAN8742_STATUS_OK; + + if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_BCR, &bcrvalue) >= 0) + { + /* Disable link config (Auto nego, speed and duplex) */ + bcrvalue &= ~(LAN8742_BCR_AUTONEGO_EN | LAN8742_BCR_SPEED_SELECT | LAN8742_BCR_DUPLEX_MODE); + + if(LinkState == LAN8742_STATUS_100MBITS_FULLDUPLEX) + { + bcrvalue |= (LAN8742_BCR_SPEED_SELECT | LAN8742_BCR_DUPLEX_MODE); + } + else if (LinkState == LAN8742_STATUS_100MBITS_HALFDUPLEX) + { + bcrvalue |= LAN8742_BCR_SPEED_SELECT; + } + else if (LinkState == LAN8742_STATUS_10MBITS_FULLDUPLEX) + { + bcrvalue |= LAN8742_BCR_DUPLEX_MODE; + } + else + { + /* Wrong link status parameter */ + status = LAN8742_STATUS_ERROR; + } + } + else + { + status = LAN8742_STATUS_READ_ERROR; + } + + if(status == LAN8742_STATUS_OK) + { + /* Apply configuration */ + if(pObj->IO.WriteReg(pObj->DevAddr, LAN8742_BCR, bcrvalue) < 0) + { + status = LAN8742_STATUS_WRITE_ERROR; + } + } + + return status; +} + +/** + * @brief Enable loopback mode. + * @param pObj: Pointer to device object. + * @retval LAN8742_STATUS_OK if OK + * LAN8742_STATUS_READ_ERROR if connot read register + * LAN8742_STATUS_WRITE_ERROR if connot write to register + */ +int32_t LAN8742_EnableLoopbackMode(lan8742_Object_t *pObj) +{ + uint32_t readval = 0; + int32_t status = LAN8742_STATUS_OK; + + if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_BCR, &readval) >= 0) + { + readval |= LAN8742_BCR_LOOPBACK; + + /* Apply configuration */ + if(pObj->IO.WriteReg(pObj->DevAddr, LAN8742_BCR, readval) < 0) + { + status = LAN8742_STATUS_WRITE_ERROR; + } + } + else + { + status = LAN8742_STATUS_READ_ERROR; + } + + return status; +} + +/** + * @brief Disable loopback mode. + * @param pObj: Pointer to device object. + * @retval LAN8742_STATUS_OK if OK + * LAN8742_STATUS_READ_ERROR if connot read register + * LAN8742_STATUS_WRITE_ERROR if connot write to register + */ +int32_t LAN8742_DisableLoopbackMode(lan8742_Object_t *pObj) +{ + uint32_t readval = 0; + int32_t status = LAN8742_STATUS_OK; + + if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_BCR, &readval) >= 0) + { + readval &= ~LAN8742_BCR_LOOPBACK; + + /* Apply configuration */ + if(pObj->IO.WriteReg(pObj->DevAddr, LAN8742_BCR, readval) < 0) + { + status = LAN8742_STATUS_WRITE_ERROR; + } + } + else + { + status = LAN8742_STATUS_READ_ERROR; + } + + return status; +} + +/** + * @brief Enable IT source. + * @param pObj: Pointer to device object. + * @param Interrupt: IT source to be enabled + * should be a value or a combination of the following: + * LAN8742_WOL_IT + * LAN8742_ENERGYON_IT + * LAN8742_AUTONEGO_COMPLETE_IT + * LAN8742_REMOTE_FAULT_IT + * LAN8742_LINK_DOWN_IT + * LAN8742_AUTONEGO_LP_ACK_IT + * LAN8742_PARALLEL_DETECTION_FAULT_IT + * LAN8742_AUTONEGO_PAGE_RECEIVED_IT + * @retval LAN8742_STATUS_OK if OK + * LAN8742_STATUS_READ_ERROR if connot read register + * LAN8742_STATUS_WRITE_ERROR if connot write to register + */ +int32_t LAN8742_EnableIT(lan8742_Object_t *pObj, uint32_t Interrupt) +{ + uint32_t readval = 0; + int32_t status = LAN8742_STATUS_OK; + + if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_IMR, &readval) >= 0) + { + readval |= Interrupt; + + /* Apply configuration */ + if(pObj->IO.WriteReg(pObj->DevAddr, LAN8742_IMR, readval) < 0) + { + status = LAN8742_STATUS_WRITE_ERROR; + } + } + else + { + status = LAN8742_STATUS_READ_ERROR; + } + + return status; +} + +/** + * @brief Disable IT source. + * @param pObj: Pointer to device object. + * @param Interrupt: IT source to be disabled + * should be a value or a combination of the following: + * LAN8742_WOL_IT + * LAN8742_ENERGYON_IT + * LAN8742_AUTONEGO_COMPLETE_IT + * LAN8742_REMOTE_FAULT_IT + * LAN8742_LINK_DOWN_IT + * LAN8742_AUTONEGO_LP_ACK_IT + * LAN8742_PARALLEL_DETECTION_FAULT_IT + * LAN8742_AUTONEGO_PAGE_RECEIVED_IT + * @retval LAN8742_STATUS_OK if OK + * LAN8742_STATUS_READ_ERROR if connot read register + * LAN8742_STATUS_WRITE_ERROR if connot write to register + */ +int32_t LAN8742_DisableIT(lan8742_Object_t *pObj, uint32_t Interrupt) +{ + uint32_t readval = 0; + int32_t status = LAN8742_STATUS_OK; + + if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_IMR, &readval) >= 0) + { + readval &= ~Interrupt; + + /* Apply configuration */ + if(pObj->IO.WriteReg(pObj->DevAddr, LAN8742_IMR, readval) < 0) + { + status = LAN8742_STATUS_WRITE_ERROR; + } + } + else + { + status = LAN8742_STATUS_READ_ERROR; + } + + return status; +} + +/** + * @brief Clear IT flag. + * @param pObj: Pointer to device object. + * @param Interrupt: IT flag to be cleared + * should be a value or a combination of the following: + * LAN8742_WOL_IT + * LAN8742_ENERGYON_IT + * LAN8742_AUTONEGO_COMPLETE_IT + * LAN8742_REMOTE_FAULT_IT + * LAN8742_LINK_DOWN_IT + * LAN8742_AUTONEGO_LP_ACK_IT + * LAN8742_PARALLEL_DETECTION_FAULT_IT + * LAN8742_AUTONEGO_PAGE_RECEIVED_IT + * @retval LAN8742_STATUS_OK if OK + * LAN8742_STATUS_READ_ERROR if connot read register + */ +int32_t LAN8742_ClearIT(lan8742_Object_t *pObj, uint32_t Interrupt) +{ + uint32_t readval = 0; + int32_t status = LAN8742_STATUS_OK; + + if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_ISFR, &readval) < 0) + { + status = LAN8742_STATUS_READ_ERROR; + } + + return status; +} + +/** + * @brief Get IT Flag status. + * @param pObj: Pointer to device object. + * @param Interrupt: IT Flag to be checked, + * should be a value or a combination of the following: + * LAN8742_WOL_IT + * LAN8742_ENERGYON_IT + * LAN8742_AUTONEGO_COMPLETE_IT + * LAN8742_REMOTE_FAULT_IT + * LAN8742_LINK_DOWN_IT + * LAN8742_AUTONEGO_LP_ACK_IT + * LAN8742_PARALLEL_DETECTION_FAULT_IT + * LAN8742_AUTONEGO_PAGE_RECEIVED_IT + * @retval 1 IT flag is SET + * 0 IT flag is RESET + * LAN8742_STATUS_READ_ERROR if connot read register + */ +int32_t LAN8742_GetITStatus(lan8742_Object_t *pObj, uint32_t Interrupt) +{ + uint32_t readval = 0; + int32_t status = 0; + + if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_ISFR, &readval) >= 0) + { + status = ((readval & Interrupt) == Interrupt); + } + else + { + status = LAN8742_STATUS_READ_ERROR; + } + + return status; +} + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/STM32_Disco746G/Drivers/BSP/Components/lan8742/lan8742.h b/STM32_Disco746G/Drivers/BSP/Components/lan8742/lan8742.h new file mode 100644 index 0000000000000000000000000000000000000000..c1620dd4e785e871655448cada9d109f997f8e46 --- /dev/null +++ b/STM32_Disco746G/Drivers/BSP/Components/lan8742/lan8742.h @@ -0,0 +1,448 @@ +/** + ****************************************************************************** + * @file lan8742.h + * @author MCD Application Team + * @brief This file contains all the functions prototypes for the + * lan8742.c PHY driver. + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2017 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef LAN8742_H +#define LAN8742_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include + +/** @addtogroup BSP + * @{ + */ + +/** @addtogroup Component + * @{ + */ + +/** @defgroup LAN8742 + * @{ + */ +/* Exported constants --------------------------------------------------------*/ +/** @defgroup LAN8742_Exported_Constants LAN8742 Exported Constants + * @{ + */ + +/** @defgroup LAN8742_Registers_Mapping LAN8742 Registers Mapping + * @{ + */ +#define LAN8742_BCR ((uint16_t)0x0000U) +#define LAN8742_BSR ((uint16_t)0x0001U) +#define LAN8742_PHYI1R ((uint16_t)0x0002U) +#define LAN8742_PHYI2R ((uint16_t)0x0003U) +#define LAN8742_ANAR ((uint16_t)0x0004U) +#define LAN8742_ANLPAR ((uint16_t)0x0005U) +#define LAN8742_ANER ((uint16_t)0x0006U) +#define LAN8742_ANNPTR ((uint16_t)0x0007U) +#define LAN8742_ANNPRR ((uint16_t)0x0008U) +#define LAN8742_MMDACR ((uint16_t)0x000DU) +#define LAN8742_MMDAADR ((uint16_t)0x000EU) +#define LAN8742_ENCTR ((uint16_t)0x0010U) +#define LAN8742_MCSR ((uint16_t)0x0011U) +#define LAN8742_SMR ((uint16_t)0x0012U) +#define LAN8742_TPDCR ((uint16_t)0x0018U) +#define LAN8742_TCSR ((uint16_t)0x0019U) +#define LAN8742_SECR ((uint16_t)0x001AU) +#define LAN8742_SCSIR ((uint16_t)0x001BU) +#define LAN8742_CLR ((uint16_t)0x001CU) +#define LAN8742_ISFR ((uint16_t)0x001DU) +#define LAN8742_IMR ((uint16_t)0x001EU) +#define LAN8742_PHYSCSR ((uint16_t)0x001FU) +/** + * @} + */ + +/** @defgroup LAN8742_BCR_Bit_Definition LAN8742 BCR Bit Definition + * @{ + */ +#define LAN8742_BCR_SOFT_RESET ((uint16_t)0x8000U) +#define LAN8742_BCR_LOOPBACK ((uint16_t)0x4000U) +#define LAN8742_BCR_SPEED_SELECT ((uint16_t)0x2000U) +#define LAN8742_BCR_AUTONEGO_EN ((uint16_t)0x1000U) +#define LAN8742_BCR_POWER_DOWN ((uint16_t)0x0800U) +#define LAN8742_BCR_ISOLATE ((uint16_t)0x0400U) +#define LAN8742_BCR_RESTART_AUTONEGO ((uint16_t)0x0200U) +#define LAN8742_BCR_DUPLEX_MODE ((uint16_t)0x0100U) +/** + * @} + */ + +/** @defgroup LAN8742_BSR_Bit_Definition LAN8742 BSR Bit Definition + * @{ + */ +#define LAN8742_BSR_100BASE_T4 ((uint16_t)0x8000U) +#define LAN8742_BSR_100BASE_TX_FD ((uint16_t)0x4000U) +#define LAN8742_BSR_100BASE_TX_HD ((uint16_t)0x2000U) +#define LAN8742_BSR_10BASE_T_FD ((uint16_t)0x1000U) +#define LAN8742_BSR_10BASE_T_HD ((uint16_t)0x0800U) +#define LAN8742_BSR_100BASE_T2_FD ((uint16_t)0x0400U) +#define LAN8742_BSR_100BASE_T2_HD ((uint16_t)0x0200U) +#define LAN8742_BSR_EXTENDED_STATUS ((uint16_t)0x0100U) +#define LAN8742_BSR_AUTONEGO_CPLT ((uint16_t)0x0020U) +#define LAN8742_BSR_REMOTE_FAULT ((uint16_t)0x0010U) +#define LAN8742_BSR_AUTONEGO_ABILITY ((uint16_t)0x0008U) +#define LAN8742_BSR_LINK_STATUS ((uint16_t)0x0004U) +#define LAN8742_BSR_JABBER_DETECT ((uint16_t)0x0002U) +#define LAN8742_BSR_EXTENDED_CAP ((uint16_t)0x0001U) +/** + * @} + */ + +/** @defgroup LAN8742_PHYI1R_Bit_Definition LAN8742 PHYI1R Bit Definition + * @{ + */ +#define LAN8742_PHYI1R_OUI_3_18 ((uint16_t)0xFFFFU) +/** + * @} + */ + +/** @defgroup LAN8742_PHYI2R_Bit_Definition LAN8742 PHYI2R Bit Definition + * @{ + */ +#define LAN8742_PHYI2R_OUI_19_24 ((uint16_t)0xFC00U) +#define LAN8742_PHYI2R_MODEL_NBR ((uint16_t)0x03F0U) +#define LAN8742_PHYI2R_REVISION_NBR ((uint16_t)0x000FU) +/** + * @} + */ + +/** @defgroup LAN8742_ANAR_Bit_Definition LAN8742 ANAR Bit Definition + * @{ + */ +#define LAN8742_ANAR_NEXT_PAGE ((uint16_t)0x8000U) +#define LAN8742_ANAR_REMOTE_FAULT ((uint16_t)0x2000U) +#define LAN8742_ANAR_PAUSE_OPERATION ((uint16_t)0x0C00U) +#define LAN8742_ANAR_PO_NOPAUSE ((uint16_t)0x0000U) +#define LAN8742_ANAR_PO_SYMMETRIC_PAUSE ((uint16_t)0x0400U) +#define LAN8742_ANAR_PO_ASYMMETRIC_PAUSE ((uint16_t)0x0800U) +#define LAN8742_ANAR_PO_ADVERTISE_SUPPORT ((uint16_t)0x0C00U) +#define LAN8742_ANAR_100BASE_TX_FD ((uint16_t)0x0100U) +#define LAN8742_ANAR_100BASE_TX ((uint16_t)0x0080U) +#define LAN8742_ANAR_10BASE_T_FD ((uint16_t)0x0040U) +#define LAN8742_ANAR_10BASE_T ((uint16_t)0x0020U) +#define LAN8742_ANAR_SELECTOR_FIELD ((uint16_t)0x000FU) +/** + * @} + */ + +/** @defgroup LAN8742_ANLPAR_Bit_Definition LAN8742 ANLPAR Bit Definition + * @{ + */ +#define LAN8742_ANLPAR_NEXT_PAGE ((uint16_t)0x8000U) +#define LAN8742_ANLPAR_REMOTE_FAULT ((uint16_t)0x2000U) +#define LAN8742_ANLPAR_PAUSE_OPERATION ((uint16_t)0x0C00U) +#define LAN8742_ANLPAR_PO_NOPAUSE ((uint16_t)0x0000U) +#define LAN8742_ANLPAR_PO_SYMMETRIC_PAUSE ((uint16_t)0x0400U) +#define LAN8742_ANLPAR_PO_ASYMMETRIC_PAUSE ((uint16_t)0x0800U) +#define LAN8742_ANLPAR_PO_ADVERTISE_SUPPORT ((uint16_t)0x0C00U) +#define LAN8742_ANLPAR_100BASE_TX_FD ((uint16_t)0x0100U) +#define LAN8742_ANLPAR_100BASE_TX ((uint16_t)0x0080U) +#define LAN8742_ANLPAR_10BASE_T_FD ((uint16_t)0x0040U) +#define LAN8742_ANLPAR_10BASE_T ((uint16_t)0x0020U) +#define LAN8742_ANLPAR_SELECTOR_FIELD ((uint16_t)0x000FU) +/** + * @} + */ + +/** @defgroup LAN8742_ANER_Bit_Definition LAN8742 ANER Bit Definition + * @{ + */ +#define LAN8742_ANER_RX_NP_LOCATION_ABLE ((uint16_t)0x0040U) +#define LAN8742_ANER_RX_NP_STORAGE_LOCATION ((uint16_t)0x0020U) +#define LAN8742_ANER_PARALLEL_DETECT_FAULT ((uint16_t)0x0010U) +#define LAN8742_ANER_LP_NP_ABLE ((uint16_t)0x0008U) +#define LAN8742_ANER_NP_ABLE ((uint16_t)0x0004U) +#define LAN8742_ANER_PAGE_RECEIVED ((uint16_t)0x0002U) +#define LAN8742_ANER_LP_AUTONEG_ABLE ((uint16_t)0x0001U) +/** + * @} + */ + +/** @defgroup LAN8742_ANNPTR_Bit_Definition LAN8742 ANNPTR Bit Definition + * @{ + */ +#define LAN8742_ANNPTR_NEXT_PAGE ((uint16_t)0x8000U) +#define LAN8742_ANNPTR_MESSAGE_PAGE ((uint16_t)0x2000U) +#define LAN8742_ANNPTR_ACK2 ((uint16_t)0x1000U) +#define LAN8742_ANNPTR_TOGGLE ((uint16_t)0x0800U) +#define LAN8742_ANNPTR_MESSAGGE_CODE ((uint16_t)0x07FFU) +/** + * @} + */ + +/** @defgroup LAN8742_ANNPRR_Bit_Definition LAN8742 ANNPRR Bit Definition + * @{ + */ +#define LAN8742_ANNPTR_NEXT_PAGE ((uint16_t)0x8000U) +#define LAN8742_ANNPRR_ACK ((uint16_t)0x4000U) +#define LAN8742_ANNPRR_MESSAGE_PAGE ((uint16_t)0x2000U) +#define LAN8742_ANNPRR_ACK2 ((uint16_t)0x1000U) +#define LAN8742_ANNPRR_TOGGLE ((uint16_t)0x0800U) +#define LAN8742_ANNPRR_MESSAGGE_CODE ((uint16_t)0x07FFU) +/** + * @} + */ + +/** @defgroup LAN8742_MMDACR_Bit_Definition LAN8742 MMDACR Bit Definition + * @{ + */ +#define LAN8742_MMDACR_MMD_FUNCTION ((uint16_t)0xC000U) +#define LAN8742_MMDACR_MMD_FUNCTION_ADDR ((uint16_t)0x0000U) +#define LAN8742_MMDACR_MMD_FUNCTION_DATA ((uint16_t)0x4000U) +#define LAN8742_MMDACR_MMD_DEV_ADDR ((uint16_t)0x001FU) +/** + * @} + */ + +/** @defgroup LAN8742_ENCTR_Bit_Definition LAN8742 ENCTR Bit Definition + * @{ + */ +#define LAN8742_ENCTR_TX_ENABLE ((uint16_t)0x8000U) +#define LAN8742_ENCTR_TX_TIMER ((uint16_t)0x6000U) +#define LAN8742_ENCTR_TX_TIMER_1S ((uint16_t)0x0000U) +#define LAN8742_ENCTR_TX_TIMER_768MS ((uint16_t)0x2000U) +#define LAN8742_ENCTR_TX_TIMER_512MS ((uint16_t)0x4000U) +#define LAN8742_ENCTR_TX_TIMER_265MS ((uint16_t)0x6000U) +#define LAN8742_ENCTR_RX_ENABLE ((uint16_t)0x1000U) +#define LAN8742_ENCTR_RX_MAX_INTERVAL ((uint16_t)0x0C00U) +#define LAN8742_ENCTR_RX_MAX_INTERVAL_64MS ((uint16_t)0x0000U) +#define LAN8742_ENCTR_RX_MAX_INTERVAL_256MS ((uint16_t)0x0400U) +#define LAN8742_ENCTR_RX_MAX_INTERVAL_512MS ((uint16_t)0x0800U) +#define LAN8742_ENCTR_RX_MAX_INTERVAL_1S ((uint16_t)0x0C00U) +#define LAN8742_ENCTR_EX_CROSS_OVER ((uint16_t)0x0002U) +#define LAN8742_ENCTR_EX_MANUAL_CROSS_OVER ((uint16_t)0x0001U) +/** + * @} + */ + +/** @defgroup LAN8742_MCSR_Bit_Definition LAN8742 MCSR Bit Definition + * @{ + */ +#define LAN8742_MCSR_EDPWRDOWN ((uint16_t)0x2000U) +#define LAN8742_MCSR_FARLOOPBACK ((uint16_t)0x0200U) +#define LAN8742_MCSR_ALTINT ((uint16_t)0x0040U) +#define LAN8742_MCSR_ENERGYON ((uint16_t)0x0002U) +/** + * @} + */ + +/** @defgroup LAN8742_SMR_Bit_Definition LAN8742 SMR Bit Definition + * @{ + */ +#define LAN8742_SMR_MODE ((uint16_t)0x00E0U) +#define LAN8742_SMR_PHY_ADDR ((uint16_t)0x001FU) +/** + * @} + */ + +/** @defgroup LAN8742_TPDCR_Bit_Definition LAN8742 TPDCR Bit Definition + * @{ + */ +#define LAN8742_TPDCR_DELAY_IN ((uint16_t)0x8000U) +#define LAN8742_TPDCR_LINE_BREAK_COUNTER ((uint16_t)0x7000U) +#define LAN8742_TPDCR_PATTERN_HIGH ((uint16_t)0x0FC0U) +#define LAN8742_TPDCR_PATTERN_LOW ((uint16_t)0x003FU) +/** + * @} + */ + +/** @defgroup LAN8742_TCSR_Bit_Definition LAN8742 TCSR Bit Definition + * @{ + */ +#define LAN8742_TCSR_TDR_ENABLE ((uint16_t)0x8000U) +#define LAN8742_TCSR_TDR_AD_FILTER_ENABLE ((uint16_t)0x4000U) +#define LAN8742_TCSR_TDR_CH_CABLE_TYPE ((uint16_t)0x0600U) +#define LAN8742_TCSR_TDR_CH_CABLE_DEFAULT ((uint16_t)0x0000U) +#define LAN8742_TCSR_TDR_CH_CABLE_SHORTED ((uint16_t)0x0200U) +#define LAN8742_TCSR_TDR_CH_CABLE_OPEN ((uint16_t)0x0400U) +#define LAN8742_TCSR_TDR_CH_CABLE_MATCH ((uint16_t)0x0600U) +#define LAN8742_TCSR_TDR_CH_STATUS ((uint16_t)0x0100U) +#define LAN8742_TCSR_TDR_CH_LENGTH ((uint16_t)0x00FFU) +/** + * @} + */ + +/** @defgroup LAN8742_SCSIR_Bit_Definition LAN8742 SCSIR Bit Definition + * @{ + */ +#define LAN8742_SCSIR_AUTO_MDIX_ENABLE ((uint16_t)0x8000U) +#define LAN8742_SCSIR_CHANNEL_SELECT ((uint16_t)0x2000U) +#define LAN8742_SCSIR_SQE_DISABLE ((uint16_t)0x0800U) +#define LAN8742_SCSIR_XPOLALITY ((uint16_t)0x0010U) +/** + * @} + */ + +/** @defgroup LAN8742_CLR_Bit_Definition LAN8742 CLR Bit Definition + * @{ + */ +#define LAN8742_CLR_CABLE_LENGTH ((uint16_t)0xF000U) +/** + * @} + */ + +/** @defgroup LAN8742_IMR_ISFR_Bit_Definition LAN8742 IMR ISFR Bit Definition + * @{ + */ +#define LAN8742_INT_8 ((uint16_t)0x0100U) +#define LAN8742_INT_7 ((uint16_t)0x0080U) +#define LAN8742_INT_6 ((uint16_t)0x0040U) +#define LAN8742_INT_5 ((uint16_t)0x0020U) +#define LAN8742_INT_4 ((uint16_t)0x0010U) +#define LAN8742_INT_3 ((uint16_t)0x0008U) +#define LAN8742_INT_2 ((uint16_t)0x0004U) +#define LAN8742_INT_1 ((uint16_t)0x0002U) +/** + * @} + */ + +/** @defgroup LAN8742_PHYSCSR_Bit_Definition LAN8742 PHYSCSR Bit Definition + * @{ + */ +#define LAN8742_PHYSCSR_AUTONEGO_DONE ((uint16_t)0x1000U) +#define LAN8742_PHYSCSR_HCDSPEEDMASK ((uint16_t)0x001CU) +#define LAN8742_PHYSCSR_10BT_HD ((uint16_t)0x0004U) +#define LAN8742_PHYSCSR_10BT_FD ((uint16_t)0x0014U) +#define LAN8742_PHYSCSR_100BTX_HD ((uint16_t)0x0008U) +#define LAN8742_PHYSCSR_100BTX_FD ((uint16_t)0x0018U) +/** + * @} + */ + +/** @defgroup LAN8742_Status LAN8742 Status + * @{ + */ + +#define LAN8742_STATUS_READ_ERROR ((int32_t)-5) +#define LAN8742_STATUS_WRITE_ERROR ((int32_t)-4) +#define LAN8742_STATUS_ADDRESS_ERROR ((int32_t)-3) +#define LAN8742_STATUS_RESET_TIMEOUT ((int32_t)-2) +#define LAN8742_STATUS_ERROR ((int32_t)-1) +#define LAN8742_STATUS_OK ((int32_t) 0) +#define LAN8742_STATUS_LINK_DOWN ((int32_t) 1) +#define LAN8742_STATUS_100MBITS_FULLDUPLEX ((int32_t) 2) +#define LAN8742_STATUS_100MBITS_HALFDUPLEX ((int32_t) 3) +#define LAN8742_STATUS_10MBITS_FULLDUPLEX ((int32_t) 4) +#define LAN8742_STATUS_10MBITS_HALFDUPLEX ((int32_t) 5) +#define LAN8742_STATUS_AUTONEGO_NOTDONE ((int32_t) 6) +/** + * @} + */ + +/** @defgroup LAN8742_IT_Flags LAN8742 IT Flags + * @{ + */ +#define LAN8742_WOL_IT LAN8742_INT_8 +#define LAN8742_ENERGYON_IT LAN8742_INT_7 +#define LAN8742_AUTONEGO_COMPLETE_IT LAN8742_INT_6 +#define LAN8742_REMOTE_FAULT_IT LAN8742_INT_5 +#define LAN8742_LINK_DOWN_IT LAN8742_INT_4 +#define LAN8742_AUTONEGO_LP_ACK_IT LAN8742_INT_3 +#define LAN8742_PARALLEL_DETECTION_FAULT_IT LAN8742_INT_2 +#define LAN8742_AUTONEGO_PAGE_RECEIVED_IT LAN8742_INT_1 +/** + * @} + */ + +/** + * @} + */ + +/* Exported types ------------------------------------------------------------*/ +/** @defgroup LAN8742_Exported_Types LAN8742 Exported Types + * @{ + */ +typedef int32_t (*lan8742_Init_Func) (void); +typedef int32_t (*lan8742_DeInit_Func) (void); +typedef int32_t (*lan8742_ReadReg_Func) (uint32_t, uint32_t, uint32_t *); +typedef int32_t (*lan8742_WriteReg_Func) (uint32_t, uint32_t, uint32_t); +typedef int32_t (*lan8742_GetTick_Func) (void); + +typedef struct +{ + lan8742_Init_Func Init; + lan8742_DeInit_Func DeInit; + lan8742_WriteReg_Func WriteReg; + lan8742_ReadReg_Func ReadReg; + lan8742_GetTick_Func GetTick; +} lan8742_IOCtx_t; + + +typedef struct +{ + uint32_t DevAddr; + uint32_t Is_Initialized; + lan8742_IOCtx_t IO; + void *pData; +}lan8742_Object_t; +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ +/** @defgroup LAN8742_Exported_Functions LAN8742 Exported Functions + * @{ + */ +int32_t LAN8742_RegisterBusIO(lan8742_Object_t *pObj, lan8742_IOCtx_t *ioctx); +int32_t LAN8742_Init(lan8742_Object_t *pObj); +int32_t LAN8742_DeInit(lan8742_Object_t *pObj); +int32_t LAN8742_DisablePowerDownMode(lan8742_Object_t *pObj); +int32_t LAN8742_EnablePowerDownMode(lan8742_Object_t *pObj); +int32_t LAN8742_StartAutoNego(lan8742_Object_t *pObj); +int32_t LAN8742_GetLinkState(lan8742_Object_t *pObj); +int32_t LAN8742_SetLinkState(lan8742_Object_t *pObj, uint32_t LinkState); +int32_t LAN8742_EnableLoopbackMode(lan8742_Object_t *pObj); +int32_t LAN8742_DisableLoopbackMode(lan8742_Object_t *pObj); +int32_t LAN8742_EnableIT(lan8742_Object_t *pObj, uint32_t Interrupt); +int32_t LAN8742_DisableIT(lan8742_Object_t *pObj, uint32_t Interrupt); +int32_t LAN8742_ClearIT(lan8742_Object_t *pObj, uint32_t Interrupt); +int32_t LAN8742_GetITStatus(lan8742_Object_t *pObj, uint32_t Interrupt); +/** + * @} + */ + +#ifdef __cplusplus +} +#endif +#endif /* LAN8742_H */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_eth.h b/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_eth.h new file mode 100644 index 0000000000000000000000000000000000000000..7d1f6e9b80dfd93fa63c38748200ef349a3244fc --- /dev/null +++ b/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_eth.h @@ -0,0 +1,2144 @@ +/** + ****************************************************************************** + * @file stm32f7xx_hal_eth.h + * @author MCD Application Team + * @brief Header file of ETH HAL module. + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef STM32F7xx_HAL_ETH_H +#define STM32F7xx_HAL_ETH_H + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f7xx_hal_def.h" + +#if defined(ETH) + +/** @addtogroup STM32F7xx_HAL_Driver + * @{ + */ + +/** @addtogroup ETH + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +#ifndef ETH_TX_DESC_CNT +#define ETH_TX_DESC_CNT 4U +#endif /* ETH_TX_DESC_CNT */ + +#ifndef ETH_RX_DESC_CNT +#define ETH_RX_DESC_CNT 4U +#endif /* ETH_RX_DESC_CNT */ + + +/*********************** Descriptors struct def section ************************/ +/** @defgroup ETH_Exported_Types ETH Exported Types + * @{ + */ + +/** + * @brief ETH DMA Descriptor structure definition + */ +typedef struct +{ + __IO uint32_t DESC0; + __IO uint32_t DESC1; + __IO uint32_t DESC2; + __IO uint32_t DESC3; + __IO uint32_t DESC4; + __IO uint32_t DESC5; + __IO uint32_t DESC6; + __IO uint32_t DESC7; + uint32_t BackupAddr0; /* used to store rx buffer 1 address */ + uint32_t BackupAddr1; /* used to store rx buffer 2 address */ +} ETH_DMADescTypeDef; +/** + * + */ + +/** + * @brief ETH Buffers List structure definition + */ +typedef struct __ETH_BufferTypeDef +{ + uint8_t *buffer; /*gState = HAL_ETH_STATE_RESET; \ + (__HANDLE__)->MspInitCallback = NULL; \ + (__HANDLE__)->MspDeInitCallback = NULL; \ + } while(0) +#else +#define __HAL_ETH_RESET_HANDLE_STATE(__HANDLE__) do{ \ + (__HANDLE__)->gState = HAL_ETH_STATE_RESET; \ + } while(0) +#endif /*USE_HAL_ETH_REGISTER_CALLBACKS */ + +/** + * @brief Enables the specified ETHERNET DMA interrupts. + * @param __HANDLE__ : ETH Handle + * @param __INTERRUPT__: specifies the ETHERNET DMA interrupt sources to be + * enabled @ref ETH_DMA_Interrupts + * @retval None + */ +#define __HAL_ETH_DMA_ENABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->DMAIER \ + |= (__INTERRUPT__)) + +/** + * @brief Disables the specified ETHERNET DMA interrupts. + * @param __HANDLE__ : ETH Handle + * @param __INTERRUPT__: specifies the ETHERNET DMA interrupt sources to be + * disabled. @ref ETH_DMA_Interrupts + * @retval None + */ +#define __HAL_ETH_DMA_DISABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->DMAIER \ + &= ~(__INTERRUPT__)) + +/** + * @brief Gets the ETHERNET DMA IT source enabled or disabled. + * @param __HANDLE__ : ETH Handle + * @param __INTERRUPT__: specifies the interrupt source to get . @ref ETH_DMA_Interrupts + * @retval The ETH DMA IT Source enabled or disabled + */ +#define __HAL_ETH_DMA_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->DMAIER &\ + (__INTERRUPT__)) == (__INTERRUPT__)) + +/** + * @brief Gets the ETHERNET DMA IT pending bit. + * @param __HANDLE__ : ETH Handle + * @param __INTERRUPT__: specifies the interrupt source to get . @ref ETH_DMA_Interrupts + * @retval The state of ETH DMA IT (SET or RESET) + */ +#define __HAL_ETH_DMA_GET_IT(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->DMASR &\ + (__INTERRUPT__)) == (__INTERRUPT__)) + +/** + * @brief Clears the ETHERNET DMA IT pending bit. + * @param __HANDLE__ : ETH Handle + * @param __INTERRUPT__: specifies the interrupt pending bit to clear. @ref ETH_DMA_Interrupts + * @retval None + */ +#define __HAL_ETH_DMA_CLEAR_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->DMASR = (__INTERRUPT__)) + +/** + * @brief Checks whether the specified ETHERNET DMA flag is set or not. + * @param __HANDLE__: ETH Handle + * @param __FLAG__: specifies the flag to check. @ref ETH_DMA_Status_Flags + * @retval The state of ETH DMA FLAG (SET or RESET). + */ +#define __HAL_ETH_DMA_GET_FLAG(__HANDLE__, __FLAG__) (((__HANDLE__)->Instance->DMACSR &\ + ( __FLAG__)) == ( __FLAG__)) + +/** + * @brief Clears the specified ETHERNET DMA flag. + * @param __HANDLE__: ETH Handle + * @param __FLAG__: specifies the flag to check. @ref ETH_DMA_Status_Flags + * @retval The state of ETH DMA FLAG (SET or RESET). + */ +#define __HAL_ETH_DMA_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->DMACSR = ( __FLAG__)) + +/** + * @brief Enables the specified ETHERNET MAC interrupts. + * @param __HANDLE__ : ETH Handle + * @param __INTERRUPT__: specifies the ETHERNET MAC interrupt sources to be + * enabled @ref ETH_MAC_Interrupts + * @retval None + */ +#define __HAL_ETH_MAC_ENABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->MACIER \ + |= (__INTERRUPT__)) + +/** + * @brief Disables the specified ETHERNET MAC interrupts. + * @param __HANDLE__ : ETH Handle + * @param __INTERRUPT__: specifies the ETHERNET MAC interrupt sources to be + * enabled @ref ETH_MAC_Interrupts + * @retval None + */ +#define __HAL_ETH_MAC_DISABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->MACIER \ + &= ~(__INTERRUPT__)) + +/** + * @brief Checks whether the specified ETHERNET MAC flag is set or not. + * @param __HANDLE__: ETH Handle + * @param __INTERRUPT__: specifies the flag to check. @ref ETH_MAC_Interrupts + * @retval The state of ETH MAC IT (SET or RESET). + */ +#define __HAL_ETH_MAC_GET_IT(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->MACSR &\ + ( __INTERRUPT__)) == ( __INTERRUPT__)) + +/*!< External interrupt line 19 Connected to the ETH wakeup EXTI Line */ +#define ETH_WAKEUP_EXTI_LINE 0x00080000U + +/** + * @brief Enable the ETH WAKEUP Exti Line. + * @param __EXTI_LINE__: specifies the ETH WAKEUP Exti sources to be enabled. + * @arg ETH_WAKEUP_EXTI_LINE + * @retval None. + */ +#define __HAL_ETH_WAKEUP_EXTI_ENABLE_IT(__EXTI_LINE__) (EXTI->IMR |= (__EXTI_LINE__)) + +/** + * @brief checks whether the specified ETH WAKEUP Exti interrupt flag is set or not. + * @param __EXTI_LINE__: specifies the ETH WAKEUP Exti sources to be cleared. + * @arg ETH_WAKEUP_EXTI_LINE + * @retval EXTI ETH WAKEUP Line Status. + */ +#define __HAL_ETH_WAKEUP_EXTI_GET_FLAG(__EXTI_LINE__) (EXTI->PR & (__EXTI_LINE__)) + +/** + * @brief Clear the ETH WAKEUP Exti flag. + * @param __EXTI_LINE__: specifies the ETH WAKEUP Exti sources to be cleared. + * @arg ETH_WAKEUP_EXTI_LINE + * @retval None. + */ +#define __HAL_ETH_WAKEUP_EXTI_CLEAR_FLAG(__EXTI_LINE__) (EXTI->PR = (__EXTI_LINE__)) + + +/** + * @brief enable rising edge interrupt on selected EXTI line. + * @param __EXTI_LINE__: specifies the ETH WAKEUP EXTI sources to be disabled. + * @arg ETH_WAKEUP_EXTI_LINE + * @retval None + */ +#define __HAL_ETH_WAKEUP_EXTI_ENABLE_RISING_EDGE(__EXTI_LINE__) (EXTI->FTSR &= ~(__EXTI_LINE__)); \ + (EXTI->RTSR |= (__EXTI_LINE__)) + +/** + * @brief enable falling edge interrupt on selected EXTI line. + * @param __EXTI_LINE__: specifies the ETH WAKEUP EXTI sources to be disabled. + * @arg ETH_WAKEUP_EXTI_LINE + * @retval None + */ +#define __HAL_ETH_WAKEUP_EXTI_ENABLE_FALLING_EDGE(__EXTI_LINE__) (EXTI->RTSR &= ~(__EXTI_LINE__));\ + (EXTI->FTSR |= (__EXTI_LINE__)) + +/** + * @brief enable falling edge interrupt on selected EXTI line. + * @param __EXTI_LINE__: specifies the ETH WAKEUP EXTI sources to be disabled. + * @arg ETH_WAKEUP_EXTI_LINE + * @retval None + */ +#define __HAL_ETH_WAKEUP_EXTI_ENABLE_RISING_FALLING_EDGE(__EXTI_LINE__) (EXTI->RTSR |= (__EXTI_LINE__));\ + (EXTI->FTSR |= (__EXTI_LINE__)) + +/** + * @brief Generates a Software interrupt on selected EXTI line. + * @param __EXTI_LINE__: specifies the ETH WAKEUP EXTI sources to be disabled. + * @arg ETH_WAKEUP_EXTI_LINE + * @retval None + */ +#define __HAL_ETH_WAKEUP_EXTI_GENERATE_SWIT(__EXTI_LINE__) (EXTI->SWIER |= (__EXTI_LINE__)) + +#define __HAL_ETH_GET_PTP_CONTROL(__HANDLE__, __FLAG__) (((((__HANDLE__)->Instance->PTPTSCR) & \ + (__FLAG__)) == (__FLAG__)) ? SET : RESET) + +#define __HAL_ETH_SET_PTP_CONTROL(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->PTPTSCR |= (__FLAG__)) +/** + * @} + */ + + +/* Exported functions --------------------------------------------------------*/ + +/** @addtogroup ETH_Exported_Functions + * @{ + */ + +/** @addtogroup ETH_Exported_Functions_Group1 + * @{ + */ +/* Initialization and de initialization functions **********************************/ +HAL_StatusTypeDef HAL_ETH_Init(ETH_HandleTypeDef *heth); +HAL_StatusTypeDef HAL_ETH_DeInit(ETH_HandleTypeDef *heth); +void HAL_ETH_MspInit(ETH_HandleTypeDef *heth); +void HAL_ETH_MspDeInit(ETH_HandleTypeDef *heth); + +/* Callbacks Register/UnRegister functions ***********************************/ +#if (USE_HAL_ETH_REGISTER_CALLBACKS == 1) +HAL_StatusTypeDef HAL_ETH_RegisterCallback(ETH_HandleTypeDef *heth, HAL_ETH_CallbackIDTypeDef CallbackID, + pETH_CallbackTypeDef pCallback); +HAL_StatusTypeDef HAL_ETH_UnRegisterCallback(ETH_HandleTypeDef *heth, HAL_ETH_CallbackIDTypeDef CallbackID); +#endif /* USE_HAL_ETH_REGISTER_CALLBACKS */ + +/** + * @} + */ + +/** @addtogroup ETH_Exported_Functions_Group2 + * @{ + */ +/* IO operation functions *******************************************************/ +HAL_StatusTypeDef HAL_ETH_Start(ETH_HandleTypeDef *heth); +HAL_StatusTypeDef HAL_ETH_Start_IT(ETH_HandleTypeDef *heth); +HAL_StatusTypeDef HAL_ETH_Stop(ETH_HandleTypeDef *heth); +HAL_StatusTypeDef HAL_ETH_Stop_IT(ETH_HandleTypeDef *heth); + +HAL_StatusTypeDef HAL_ETH_ReadData(ETH_HandleTypeDef *heth, void **pAppBuff); +HAL_StatusTypeDef HAL_ETH_RegisterRxAllocateCallback(ETH_HandleTypeDef *heth, + pETH_rxAllocateCallbackTypeDef rxAllocateCallback); +HAL_StatusTypeDef HAL_ETH_UnRegisterRxAllocateCallback(ETH_HandleTypeDef *heth); +HAL_StatusTypeDef HAL_ETH_RegisterRxLinkCallback(ETH_HandleTypeDef *heth, pETH_rxLinkCallbackTypeDef rxLinkCallback); +HAL_StatusTypeDef HAL_ETH_UnRegisterRxLinkCallback(ETH_HandleTypeDef *heth); +HAL_StatusTypeDef HAL_ETH_GetRxDataErrorCode(ETH_HandleTypeDef *heth, uint32_t *pErrorCode); +HAL_StatusTypeDef HAL_ETH_RegisterTxFreeCallback(ETH_HandleTypeDef *heth, pETH_txFreeCallbackTypeDef txFreeCallback); +HAL_StatusTypeDef HAL_ETH_UnRegisterTxFreeCallback(ETH_HandleTypeDef *heth); +HAL_StatusTypeDef HAL_ETH_ReleaseTxPacket(ETH_HandleTypeDef *heth); + +#ifdef HAL_ETH_USE_PTP +HAL_StatusTypeDef HAL_ETH_PTP_SetConfig(ETH_HandleTypeDef *heth, ETH_PTP_ConfigTypeDef *ptpconfig); +HAL_StatusTypeDef HAL_ETH_PTP_GetConfig(ETH_HandleTypeDef *heth, ETH_PTP_ConfigTypeDef *ptpconfig); +HAL_StatusTypeDef HAL_ETH_PTP_SetTime(ETH_HandleTypeDef *heth, ETH_TimeTypeDef *time); +HAL_StatusTypeDef HAL_ETH_PTP_GetTime(ETH_HandleTypeDef *heth, ETH_TimeTypeDef *time); +HAL_StatusTypeDef HAL_ETH_PTP_AddTimeOffset(ETH_HandleTypeDef *heth, ETH_PtpUpdateTypeDef ptpoffsettype, + ETH_TimeTypeDef *timeoffset); +HAL_StatusTypeDef HAL_ETH_PTP_InsertTxTimestamp(ETH_HandleTypeDef *heth); +HAL_StatusTypeDef HAL_ETH_PTP_GetTxTimestamp(ETH_HandleTypeDef *heth, ETH_TimeStampTypeDef *timestamp); +HAL_StatusTypeDef HAL_ETH_PTP_GetRxTimestamp(ETH_HandleTypeDef *heth, ETH_TimeStampTypeDef *timestamp); +HAL_StatusTypeDef HAL_ETH_RegisterTxPtpCallback(ETH_HandleTypeDef *heth, pETH_txPtpCallbackTypeDef txPtpCallback); +HAL_StatusTypeDef HAL_ETH_UnRegisterTxPtpCallback(ETH_HandleTypeDef *heth); +#endif /* HAL_ETH_USE_PTP */ + +HAL_StatusTypeDef HAL_ETH_Transmit(ETH_HandleTypeDef *heth, ETH_TxPacketConfig *pTxConfig, uint32_t Timeout); +HAL_StatusTypeDef HAL_ETH_Transmit_IT(ETH_HandleTypeDef *heth, ETH_TxPacketConfig *pTxConfig); + +HAL_StatusTypeDef HAL_ETH_WritePHYRegister(ETH_HandleTypeDef *heth, uint32_t PHYAddr, uint32_t PHYReg, + uint32_t RegValue); +HAL_StatusTypeDef HAL_ETH_ReadPHYRegister(ETH_HandleTypeDef *heth, uint32_t PHYAddr, uint32_t PHYReg, + uint32_t *pRegValue); + +void HAL_ETH_IRQHandler(ETH_HandleTypeDef *heth); +void HAL_ETH_TxCpltCallback(ETH_HandleTypeDef *heth); +void HAL_ETH_RxCpltCallback(ETH_HandleTypeDef *heth); +void HAL_ETH_ErrorCallback(ETH_HandleTypeDef *heth); +void HAL_ETH_PMTCallback(ETH_HandleTypeDef *heth); +void HAL_ETH_WakeUpCallback(ETH_HandleTypeDef *heth); +void HAL_ETH_RxAllocateCallback(uint8_t **buff); +void HAL_ETH_RxLinkCallback(void **pStart, void **pEnd, uint8_t *buff, uint16_t Length); +void HAL_ETH_TxFreeCallback(uint32_t *buff); +void HAL_ETH_TxPtpCallback(uint32_t *buff, ETH_TimeStampTypeDef *timestamp); +/** + * @} + */ + +/** @addtogroup ETH_Exported_Functions_Group3 + * @{ + */ +/* Peripheral Control functions **********************************************/ +/* MAC & DMA Configuration APIs **********************************************/ +HAL_StatusTypeDef HAL_ETH_GetMACConfig(ETH_HandleTypeDef *heth, ETH_MACConfigTypeDef *macconf); +HAL_StatusTypeDef HAL_ETH_GetDMAConfig(ETH_HandleTypeDef *heth, ETH_DMAConfigTypeDef *dmaconf); +HAL_StatusTypeDef HAL_ETH_SetMACConfig(ETH_HandleTypeDef *heth, ETH_MACConfigTypeDef *macconf); +HAL_StatusTypeDef HAL_ETH_SetDMAConfig(ETH_HandleTypeDef *heth, ETH_DMAConfigTypeDef *dmaconf); +void HAL_ETH_SetMDIOClockRange(ETH_HandleTypeDef *heth); + +/* MAC VLAN Processing APIs ************************************************/ +void HAL_ETH_SetRxVLANIdentifier(ETH_HandleTypeDef *heth, uint32_t ComparisonBits, + uint32_t VLANIdentifier); + +/* MAC L2 Packet Filtering APIs **********************************************/ +HAL_StatusTypeDef HAL_ETH_GetMACFilterConfig(ETH_HandleTypeDef *heth, ETH_MACFilterConfigTypeDef *pFilterConfig); +HAL_StatusTypeDef HAL_ETH_SetMACFilterConfig(ETH_HandleTypeDef *heth, ETH_MACFilterConfigTypeDef *pFilterConfig); +HAL_StatusTypeDef HAL_ETH_SetHashTable(ETH_HandleTypeDef *heth, uint32_t *pHashTable); +HAL_StatusTypeDef HAL_ETH_SetSourceMACAddrMatch(ETH_HandleTypeDef *heth, uint32_t AddrNbr, uint8_t *pMACAddr); + +/* MAC Power Down APIs *****************************************************/ +void HAL_ETH_EnterPowerDownMode(ETH_HandleTypeDef *heth, ETH_PowerDownConfigTypeDef *pPowerDownConfig); +void HAL_ETH_ExitPowerDownMode(ETH_HandleTypeDef *heth); +HAL_StatusTypeDef HAL_ETH_SetWakeUpFilter(ETH_HandleTypeDef *heth, uint32_t *pFilter, uint32_t Count); + +/** + * @} + */ + +/** @addtogroup ETH_Exported_Functions_Group4 + * @{ + */ +/* Peripheral State functions **************************************************/ +HAL_ETH_StateTypeDef HAL_ETH_GetState(ETH_HandleTypeDef *heth); +uint32_t HAL_ETH_GetError(ETH_HandleTypeDef *heth); +uint32_t HAL_ETH_GetDMAError(ETH_HandleTypeDef *heth); +uint32_t HAL_ETH_GetMACError(ETH_HandleTypeDef *heth); +uint32_t HAL_ETH_GetMACWakeUpSource(ETH_HandleTypeDef *heth); +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#endif /* ETH */ + +#ifdef __cplusplus +} +#endif + +#endif /* STM32F7xx_HAL_ETH_H */ + + diff --git a/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_eth.c b/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_eth.c new file mode 100644 index 0000000000000000000000000000000000000000..0c7697aafce74aed442c94f500fe31f76d19f218 --- /dev/null +++ b/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_eth.c @@ -0,0 +1,3220 @@ +/** + ****************************************************************************** + * @file stm32f7xx_hal_eth.c + * @author MCD Application Team + * @brief ETH HAL module driver. + * This file provides firmware functions to manage the following + * functionalities of the Ethernet (ETH) peripheral: + * + Initialization and deinitialization functions + * + IO operation functions + * + Peripheral Control functions + * + Peripheral State and Errors functions + * + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + @verbatim + ============================================================================== + ##### How to use this driver ##### + ============================================================================== + [..] + The ETH HAL driver can be used as follows: + + (#)Declare a ETH_HandleTypeDef handle structure, for example: + ETH_HandleTypeDef heth; + + (#)Fill parameters of Init structure in heth handle + + (#)Call HAL_ETH_Init() API to initialize the Ethernet peripheral (MAC, DMA, ...) + + (#)Initialize the ETH low level resources through the HAL_ETH_MspInit() API: + (##) Enable the Ethernet interface clock using + (+++) __HAL_RCC_ETH1MAC_CLK_ENABLE() + (+++) __HAL_RCC_ETH1TX_CLK_ENABLE() + (+++) __HAL_RCC_ETH1RX_CLK_ENABLE() + + (##) Initialize the related GPIO clocks + (##) Configure Ethernet pinout + (##) Configure Ethernet NVIC interrupt (in Interrupt mode) + + (#) Ethernet data reception is asynchronous, so call the following API + to start the listening mode: + (##) HAL_ETH_Start(): + This API starts the MAC and DMA transmission and reception process, + without enabling end of transfer interrupts, in this mode user + has to poll for data reception by calling HAL_ETH_ReadData() + (##) HAL_ETH_Start_IT(): + This API starts the MAC and DMA transmission and reception process, + end of transfer interrupts are enabled in this mode, + HAL_ETH_RxCpltCallback() will be executed when an Ethernet packet is received + + (#) When data is received user can call the following API to get received data: + (##) HAL_ETH_ReadData(): Read a received packet + + (#) For transmission path, two APIs are available: + (##) HAL_ETH_Transmit(): Transmit an ETH frame in blocking mode + (##) HAL_ETH_Transmit_IT(): Transmit an ETH frame in interrupt mode, + HAL_ETH_TxCpltCallback() will be executed when end of transfer occur + + (#) Communication with an external PHY device: + (##) HAL_ETH_ReadPHYRegister(): Read a register from an external PHY + (##) HAL_ETH_WritePHYRegister(): Write data to an external RHY register + + (#) Configure the Ethernet MAC after ETH peripheral initialization + (##) HAL_ETH_GetMACConfig(): Get MAC actual configuration into ETH_MACConfigTypeDef + (##) HAL_ETH_SetMACConfig(): Set MAC configuration based on ETH_MACConfigTypeDef + + (#) Configure the Ethernet DMA after ETH peripheral initialization + (##) HAL_ETH_GetDMAConfig(): Get DMA actual configuration into ETH_DMAConfigTypeDef + (##) HAL_ETH_SetDMAConfig(): Set DMA configuration based on ETH_DMAConfigTypeDef + + (#) Configure the Ethernet PTP after ETH peripheral initialization + (##) Define HAL_ETH_USE_PTP to use PTP APIs. + (##) HAL_ETH_PTP_GetConfig(): Get PTP actual configuration into ETH_PTP_ConfigTypeDef + (##) HAL_ETH_PTP_SetConfig(): Set PTP configuration based on ETH_PTP_ConfigTypeDef + (##) HAL_ETH_PTP_GetTime(): Get Seconds and Nanoseconds for the Ethernet PTP registers + (##) HAL_ETH_PTP_SetTime(): Set Seconds and Nanoseconds for the Ethernet PTP registers + (##) HAL_ETH_PTP_AddTimeOffset(): Add Seconds and Nanoseconds offset for the Ethernet PTP registers + (##) HAL_ETH_PTP_InsertTxTimestamp(): Insert Timestamp in transmission + (##) HAL_ETH_PTP_GetTxTimestamp(): Get transmission timestamp + (##) HAL_ETH_PTP_GetRxTimestamp(): Get reception timestamp + + -@- The ARP offload feature is not supported in this driver. + + -@- The PTP offload feature is not supported in this driver. + + *** Callback registration *** + ============================================= + + The compilation define USE_HAL_ETH_REGISTER_CALLBACKS when set to 1 + allows the user to configure dynamically the driver callbacks. + Use Function HAL_ETH_RegisterCallback() to register an interrupt callback. + + Function HAL_ETH_RegisterCallback() allows to register following callbacks: + (+) TxCpltCallback : Tx Complete Callback. + (+) RxCpltCallback : Rx Complete Callback. + (+) ErrorCallback : Error Callback. + (+) PMTCallback : Power Management Callback + (+) EEECallback : EEE Callback. + (+) WakeUpCallback : Wake UP Callback + (+) MspInitCallback : MspInit Callback. + (+) MspDeInitCallback: MspDeInit Callback. + + This function takes as parameters the HAL peripheral handle, the Callback ID + and a pointer to the user callback function. + + For specific callbacks RxAllocateCallback use dedicated register callbacks: + respectively HAL_ETH_RegisterRxAllocateCallback(). + + For specific callbacks RxLinkCallback use dedicated register callbacks: + respectively HAL_ETH_RegisterRxLinkCallback(). + + For specific callbacks TxFreeCallback use dedicated register callbacks: + respectively HAL_ETH_RegisterTxFreeCallback(). + + For specific callbacks TxPtpCallback use dedicated register callbacks: + respectively HAL_ETH_RegisterTxPtpCallback(). + + Use function HAL_ETH_UnRegisterCallback() to reset a callback to the default + weak function. + HAL_ETH_UnRegisterCallback takes as parameters the HAL peripheral handle, + and the Callback ID. + This function allows to reset following callbacks: + (+) TxCpltCallback : Tx Complete Callback. + (+) RxCpltCallback : Rx Complete Callback. + (+) ErrorCallback : Error Callback. + (+) PMTCallback : Power Management Callback + (+) EEECallback : EEE Callback. + (+) WakeUpCallback : Wake UP Callback + (+) MspInitCallback : MspInit Callback. + (+) MspDeInitCallback: MspDeInit Callback. + + For specific callbacks RxAllocateCallback use dedicated unregister callbacks: + respectively HAL_ETH_UnRegisterRxAllocateCallback(). + + For specific callbacks RxLinkCallback use dedicated unregister callbacks: + respectively HAL_ETH_UnRegisterRxLinkCallback(). + + For specific callbacks TxFreeCallback use dedicated unregister callbacks: + respectively HAL_ETH_UnRegisterTxFreeCallback(). + + For specific callbacks TxPtpCallback use dedicated unregister callbacks: + respectively HAL_ETH_UnRegisterTxPtpCallback(). + + By default, after the HAL_ETH_Init and when the state is HAL_ETH_STATE_RESET + all callbacks are set to the corresponding weak functions: + examples HAL_ETH_TxCpltCallback(), HAL_ETH_RxCpltCallback(). + Exception done for MspInit and MspDeInit functions that are + reset to the legacy weak function in the HAL_ETH_Init/ HAL_ETH_DeInit only when + these callbacks are null (not registered beforehand). + if not, MspInit or MspDeInit are not null, the HAL_ETH_Init/ HAL_ETH_DeInit + keep and use the user MspInit/MspDeInit callbacks (registered beforehand) + + Callbacks can be registered/unregistered in HAL_ETH_STATE_READY state only. + Exception done MspInit/MspDeInit that can be registered/unregistered + in HAL_ETH_STATE_READY or HAL_ETH_STATE_RESET state, + thus registered (user) MspInit/DeInit callbacks can be used during the Init/DeInit. + In that case first register the MspInit/MspDeInit user callbacks + using HAL_ETH_RegisterCallback() before calling HAL_ETH_DeInit + or HAL_ETH_Init function. + + When The compilation define USE_HAL_ETH_REGISTER_CALLBACKS is set to 0 or + not defined, the callback registration feature is not available and all callbacks + are set to the corresponding weak functions. + + @endverbatim + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f7xx_hal.h" + +/** @addtogroup STM32F7xx_HAL_Driver + * @{ + */ +#ifdef HAL_ETH_MODULE_ENABLED + +#if defined(ETH) + +/** @defgroup ETH ETH + * @brief ETH HAL module driver + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/** @addtogroup ETH_Private_Constants ETH Private Constants + * @{ + */ +#define ETH_MACCR_MASK 0xFFFB7F7CU +#define ETH_MACECR_MASK 0x3F077FFFU +#define ETH_MACFFR_MASK 0x800007FFU +#define ETH_MACWTR_MASK 0x0000010FU +#define ETH_MACTFCR_MASK 0xFFFF00F2U +#define ETH_MACRFCR_MASK 0x00000003U +#define ETH_MTLTQOMR_MASK 0x00000072U +#define ETH_MTLRQOMR_MASK 0x0000007BU + +#define ETH_DMAMR_MASK 0x00007802U +#define ETH_DMASBMR_MASK 0x0000D001U +#define ETH_DMACCR_MASK 0x00013FFFU +#define ETH_DMACTCR_MASK 0x003F1010U +#define ETH_DMACRCR_MASK 0x803F0000U +#define ETH_MACPMTCSR_MASK (ETH_MACPMTCSR_PD | ETH_MACPMTCSR_WFE | \ + ETH_MACPMTCSR_MPE | ETH_MACPMTCSR_GU) + +/* Timeout values */ +#define ETH_SWRESET_TIMEOUT 500U +#define ETH_MDIO_BUS_TIMEOUT 1000U + +#define ETH_DMARXDESC_ERRORS_MASK ((uint32_t)(ETH_DMARXDESC_DBE | ETH_DMARXDESC_RE | \ + ETH_DMARXDESC_OE | ETH_DMARXDESC_RWT |\ + ETH_DMARXDESC_LC | ETH_DMARXDESC_CE |\ + ETH_DMARXDESC_DE | ETH_DMARXDESC_IPV4HCE)) + +#define ETH_MAC_US_TICK 1000000U + +#define ETH_MACTSCR_MASK 0x0087FF2FU + +#define ETH_PTPTSHR_VALUE 0xFFFFFFFFU +#define ETH_PTPTSLR_VALUE 0xBB9ACA00U + +/* Ethernet MACMIIAR register Mask */ +#define ETH_MACMIIAR_CR_MASK 0xFFFFFFE3U + +/* Delay to wait when writing to some Ethernet registers */ +#define ETH_REG_WRITE_DELAY 0x00000001U + +/* ETHERNET MACCR register Mask */ +#define ETH_MACCR_CLEAR_MASK 0xFF20810FU + +/* ETHERNET MACFCR register Mask */ +#define ETH_MACFCR_CLEAR_MASK 0x0000FF41U + +/* ETHERNET DMAOMR register Mask */ +#define ETH_DMAOMR_CLEAR_MASK 0xF8DE3F23U + +/* ETHERNET MAC address offsets */ +#define ETH_MAC_ADDR_HBASE (uint32_t)(ETH_MAC_BASE + 0x40U) /* ETHERNET MAC address high offset */ +#define ETH_MAC_ADDR_LBASE (uint32_t)(ETH_MAC_BASE + 0x44U) /* ETHERNET MAC address low offset */ + +/* ETHERNET DMA Rx descriptors Frame length Shift */ +#define ETH_DMARXDESC_FRAMELENGTHSHIFT 16U +/** + * @} + */ + +/* Private macros ------------------------------------------------------------*/ +/** @defgroup ETH_Private_Macros ETH Private Macros + * @{ + */ +/* Helper macros for TX descriptor handling */ +#define INCR_TX_DESC_INDEX(inx, offset) do {\ + (inx) += (offset);\ + if ((inx) >= (uint32_t)ETH_TX_DESC_CNT){\ + (inx) = ((inx) - (uint32_t)ETH_TX_DESC_CNT);}\ + } while (0) + +/* Helper macros for RX descriptor handling */ +#define INCR_RX_DESC_INDEX(inx, offset) do {\ + (inx) += (offset);\ + if ((inx) >= (uint32_t)ETH_RX_DESC_CNT){\ + (inx) = ((inx) - (uint32_t)ETH_RX_DESC_CNT);}\ + } while (0) +/** + * @} + */ +/* Private function prototypes -----------------------------------------------*/ +/** @defgroup ETH_Private_Functions ETH Private Functions + * @{ + */ +static void ETH_SetMACConfig(ETH_HandleTypeDef *heth, ETH_MACConfigTypeDef *macconf); +static void ETH_SetDMAConfig(ETH_HandleTypeDef *heth, ETH_DMAConfigTypeDef *dmaconf); +static void ETH_MACDMAConfig(ETH_HandleTypeDef *heth); +static void ETH_DMATxDescListInit(ETH_HandleTypeDef *heth); +static void ETH_DMARxDescListInit(ETH_HandleTypeDef *heth); +static uint32_t ETH_Prepare_Tx_Descriptors(ETH_HandleTypeDef *heth, ETH_TxPacketConfig *pTxConfig, uint32_t ItMode); +static void ETH_UpdateDescriptor(ETH_HandleTypeDef *heth); +static void ETH_FlushTransmitFIFO(ETH_HandleTypeDef *heth); +static void ETH_MACAddressConfig(ETH_HandleTypeDef *heth, uint32_t MacAddr, uint8_t *Addr); + +#if (USE_HAL_ETH_REGISTER_CALLBACKS == 1) +static void ETH_InitCallbacksToDefault(ETH_HandleTypeDef *heth); +#endif /* USE_HAL_ETH_REGISTER_CALLBACKS */ +/** + * @} + */ + +/* Exported functions ---------------------------------------------------------*/ +/** @defgroup ETH_Exported_Functions ETH Exported Functions + * @{ + */ + +/** @defgroup ETH_Exported_Functions_Group1 Initialization and deinitialization functions + * @brief Initialization and Configuration functions + * +@verbatim +=============================================================================== + ##### Initialization and Configuration functions ##### + =============================================================================== + [..] This subsection provides a set of functions allowing to initialize and + deinitialize the ETH peripheral: + + (+) User must Implement HAL_ETH_MspInit() function in which he configures + all related peripherals resources (CLOCK, GPIO and NVIC ). + + (+) Call the function HAL_ETH_Init() to configure the selected device with + the selected configuration: + (++) MAC address + (++) Media interface (MII or RMII) + (++) Rx DMA Descriptors Tab + (++) Tx DMA Descriptors Tab + (++) Length of Rx Buffers + + (+) Call the function HAL_ETH_DeInit() to restore the default configuration + of the selected ETH peripheral. + +@endverbatim + * @{ + */ + +/** + * @brief Initialize the Ethernet peripheral registers. + * @param heth: pointer to a ETH_HandleTypeDef structure that contains + * the configuration information for ETHERNET module + * @retval HAL status + */ +HAL_StatusTypeDef HAL_ETH_Init(ETH_HandleTypeDef *heth) +{ + uint32_t tickstart; + + if (heth == NULL) + { + return HAL_ERROR; + } + if (heth->gState == HAL_ETH_STATE_RESET) + { + heth->gState = HAL_ETH_STATE_BUSY; + +#if (USE_HAL_ETH_REGISTER_CALLBACKS == 1) + + ETH_InitCallbacksToDefault(heth); + + if (heth->MspInitCallback == NULL) + { + heth->MspInitCallback = HAL_ETH_MspInit; + } + + /* Init the low level hardware */ + heth->MspInitCallback(heth); +#else + /* Init the low level hardware : GPIO, CLOCK, NVIC. */ + HAL_ETH_MspInit(heth); + +#endif /* (USE_HAL_ETH_REGISTER_CALLBACKS) */ + } + + __HAL_RCC_SYSCFG_CLK_ENABLE(); + + /* Select MII or RMII Mode*/ + SYSCFG->PMC &= ~(SYSCFG_PMC_MII_RMII_SEL); + SYSCFG->PMC |= (uint32_t)heth->Init.MediaInterface; + /* Dummy read to sync SYSCFG with ETH */ + (void)SYSCFG->PMC; + + /* Ethernet Software reset */ + /* Set the SWR bit: resets all MAC subsystem internal registers and logic */ + /* After reset all the registers holds their respective reset values */ + SET_BIT(heth->Instance->DMABMR, ETH_DMABMR_SR); + + /* Get tick */ + tickstart = HAL_GetTick(); + + /* Wait for software reset */ + while (READ_BIT(heth->Instance->DMABMR, ETH_DMABMR_SR) > 0U) + { + if (((HAL_GetTick() - tickstart) > ETH_SWRESET_TIMEOUT)) + { + /* Set Error Code */ + heth->ErrorCode = HAL_ETH_ERROR_TIMEOUT; + /* Set State as Error */ + heth->gState = HAL_ETH_STATE_ERROR; + /* Return Error */ + return HAL_ERROR; + } + } + + + /*------------------ MAC, MTL and DMA default Configuration ----------------*/ + ETH_MACDMAConfig(heth); + + + /*------------------ DMA Tx Descriptors Configuration ----------------------*/ + ETH_DMATxDescListInit(heth); + + /*------------------ DMA Rx Descriptors Configuration ----------------------*/ + ETH_DMARxDescListInit(heth); + + /*--------------------- ETHERNET MAC Address Configuration ------------------*/ + ETH_MACAddressConfig(heth, ETH_MAC_ADDRESS0, heth->Init.MACAddr); + + heth->ErrorCode = HAL_ETH_ERROR_NONE; + heth->gState = HAL_ETH_STATE_READY; + + return HAL_OK; +} + +/** + * @brief DeInitializes the ETH peripheral. + * @param heth: pointer to a ETH_HandleTypeDef structure that contains + * the configuration information for ETHERNET module + * @retval HAL status + */ +HAL_StatusTypeDef HAL_ETH_DeInit(ETH_HandleTypeDef *heth) +{ + /* Set the ETH peripheral state to BUSY */ + heth->gState = HAL_ETH_STATE_BUSY; + +#if (USE_HAL_ETH_REGISTER_CALLBACKS == 1) + + if (heth->MspDeInitCallback == NULL) + { + heth->MspDeInitCallback = HAL_ETH_MspDeInit; + } + /* DeInit the low level hardware */ + heth->MspDeInitCallback(heth); +#else + + /* De-Init the low level hardware : GPIO, CLOCK, NVIC. */ + HAL_ETH_MspDeInit(heth); + +#endif /* (USE_HAL_ETH_REGISTER_CALLBACKS) */ + + /* Set ETH HAL state to Disabled */ + heth->gState = HAL_ETH_STATE_RESET; + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Initializes the ETH MSP. + * @param heth: pointer to a ETH_HandleTypeDef structure that contains + * the configuration information for ETHERNET module + * @retval None + */ +__weak void HAL_ETH_MspInit(ETH_HandleTypeDef *heth) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(heth); + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_ETH_MspInit could be implemented in the user file + */ +} + +/** + * @brief DeInitializes ETH MSP. + * @param heth: pointer to a ETH_HandleTypeDef structure that contains + * the configuration information for ETHERNET module + * @retval None + */ +__weak void HAL_ETH_MspDeInit(ETH_HandleTypeDef *heth) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(heth); + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_ETH_MspDeInit could be implemented in the user file + */ +} + +#if (USE_HAL_ETH_REGISTER_CALLBACKS == 1) +/** + * @brief Register a User ETH Callback + * To be used instead of the weak predefined callback + * @param heth eth handle + * @param CallbackID ID of the callback to be registered + * This parameter can be one of the following values: + * @arg @ref HAL_ETH_TX_COMPLETE_CB_ID Tx Complete Callback ID + * @arg @ref HAL_ETH_RX_COMPLETE_CB_ID Rx Complete Callback ID + * @arg @ref HAL_ETH_ERROR_CB_ID Error Callback ID + * @arg @ref HAL_ETH_PMT_CB_ID Power Management Callback ID + * @arg @ref HAL_ETH_WAKEUP_CB_ID Wake UP Callback ID + * @arg @ref HAL_ETH_MSPINIT_CB_ID MspInit callback ID + * @arg @ref HAL_ETH_MSPDEINIT_CB_ID MspDeInit callback ID + * @param pCallback pointer to the Callback function + * @retval status + */ +HAL_StatusTypeDef HAL_ETH_RegisterCallback(ETH_HandleTypeDef *heth, HAL_ETH_CallbackIDTypeDef CallbackID, + pETH_CallbackTypeDef pCallback) +{ + HAL_StatusTypeDef status = HAL_OK; + + if (pCallback == NULL) + { + /* Update the error code */ + heth->ErrorCode |= HAL_ETH_ERROR_INVALID_CALLBACK; + + return HAL_ERROR; + } + + if (heth->gState == HAL_ETH_STATE_READY) + { + switch (CallbackID) + { + case HAL_ETH_TX_COMPLETE_CB_ID : + heth->TxCpltCallback = pCallback; + break; + + case HAL_ETH_RX_COMPLETE_CB_ID : + heth->RxCpltCallback = pCallback; + break; + + case HAL_ETH_ERROR_CB_ID : + heth->ErrorCallback = pCallback; + break; + + case HAL_ETH_PMT_CB_ID : + heth->PMTCallback = pCallback; + break; + + + case HAL_ETH_WAKEUP_CB_ID : + heth->WakeUpCallback = pCallback; + break; + + case HAL_ETH_MSPINIT_CB_ID : + heth->MspInitCallback = pCallback; + break; + + case HAL_ETH_MSPDEINIT_CB_ID : + heth->MspDeInitCallback = pCallback; + break; + + default : + /* Update the error code */ + heth->ErrorCode |= HAL_ETH_ERROR_INVALID_CALLBACK; + /* Return error status */ + status = HAL_ERROR; + break; + } + } + else if (heth->gState == HAL_ETH_STATE_RESET) + { + switch (CallbackID) + { + case HAL_ETH_MSPINIT_CB_ID : + heth->MspInitCallback = pCallback; + break; + + case HAL_ETH_MSPDEINIT_CB_ID : + heth->MspDeInitCallback = pCallback; + break; + + default : + /* Update the error code */ + heth->ErrorCode |= HAL_ETH_ERROR_INVALID_CALLBACK; + /* Return error status */ + status = HAL_ERROR; + break; + } + } + else + { + /* Update the error code */ + heth->ErrorCode |= HAL_ETH_ERROR_INVALID_CALLBACK; + /* Return error status */ + status = HAL_ERROR; + } + + return status; +} + +/** + * @brief Unregister an ETH Callback + * ETH callabck is redirected to the weak predefined callback + * @param heth eth handle + * @param CallbackID ID of the callback to be unregistered + * This parameter can be one of the following values: + * @arg @ref HAL_ETH_TX_COMPLETE_CB_ID Tx Complete Callback ID + * @arg @ref HAL_ETH_RX_COMPLETE_CB_ID Rx Complete Callback ID + * @arg @ref HAL_ETH_ERROR_CB_ID Error Callback ID + * @arg @ref HAL_ETH_PMT_CB_ID Power Management Callback ID + * @arg @ref HAL_ETH_WAKEUP_CB_ID Wake UP Callback ID + * @arg @ref HAL_ETH_MSPINIT_CB_ID MspInit callback ID + * @arg @ref HAL_ETH_MSPDEINIT_CB_ID MspDeInit callback ID + * @retval status + */ +HAL_StatusTypeDef HAL_ETH_UnRegisterCallback(ETH_HandleTypeDef *heth, HAL_ETH_CallbackIDTypeDef CallbackID) +{ + HAL_StatusTypeDef status = HAL_OK; + + if (heth->gState == HAL_ETH_STATE_READY) + { + switch (CallbackID) + { + case HAL_ETH_TX_COMPLETE_CB_ID : + heth->TxCpltCallback = HAL_ETH_TxCpltCallback; + break; + + case HAL_ETH_RX_COMPLETE_CB_ID : + heth->RxCpltCallback = HAL_ETH_RxCpltCallback; + break; + + case HAL_ETH_ERROR_CB_ID : + heth->ErrorCallback = HAL_ETH_ErrorCallback; + break; + + case HAL_ETH_PMT_CB_ID : + heth->PMTCallback = HAL_ETH_PMTCallback; + break; + + + case HAL_ETH_WAKEUP_CB_ID : + heth->WakeUpCallback = HAL_ETH_WakeUpCallback; + break; + + case HAL_ETH_MSPINIT_CB_ID : + heth->MspInitCallback = HAL_ETH_MspInit; + break; + + case HAL_ETH_MSPDEINIT_CB_ID : + heth->MspDeInitCallback = HAL_ETH_MspDeInit; + break; + + default : + /* Update the error code */ + heth->ErrorCode |= HAL_ETH_ERROR_INVALID_CALLBACK; + /* Return error status */ + status = HAL_ERROR; + break; + } + } + else if (heth->gState == HAL_ETH_STATE_RESET) + { + switch (CallbackID) + { + case HAL_ETH_MSPINIT_CB_ID : + heth->MspInitCallback = HAL_ETH_MspInit; + break; + + case HAL_ETH_MSPDEINIT_CB_ID : + heth->MspDeInitCallback = HAL_ETH_MspDeInit; + break; + + default : + /* Update the error code */ + heth->ErrorCode |= HAL_ETH_ERROR_INVALID_CALLBACK; + /* Return error status */ + status = HAL_ERROR; + break; + } + } + else + { + /* Update the error code */ + heth->ErrorCode |= HAL_ETH_ERROR_INVALID_CALLBACK; + /* Return error status */ + status = HAL_ERROR; + } + + return status; +} +#endif /* USE_HAL_ETH_REGISTER_CALLBACKS */ + +/** + * @} + */ + +/** @defgroup ETH_Exported_Functions_Group2 IO operation functions + * @brief ETH Transmit and Receive functions + * +@verbatim + ============================================================================== + ##### IO operation functions ##### + ============================================================================== + [..] + This subsection provides a set of functions allowing to manage the ETH + data transfer. + +@endverbatim + * @{ + */ + +/** + * @brief Enables Ethernet MAC and DMA reception and transmission + * @param heth: pointer to a ETH_HandleTypeDef structure that contains + * the configuration information for ETHERNET module + * @retval HAL status + */ +HAL_StatusTypeDef HAL_ETH_Start(ETH_HandleTypeDef *heth) +{ + uint32_t tmpreg1; + + if (heth->gState == HAL_ETH_STATE_READY) + { + heth->gState = HAL_ETH_STATE_BUSY; + + /* Set nombre of descriptors to build */ + heth->RxDescList.RxBuildDescCnt = ETH_RX_DESC_CNT; + + /* Build all descriptors */ + ETH_UpdateDescriptor(heth); + + /* Enable the MAC transmission */ + SET_BIT(heth->Instance->MACCR, ETH_MACCR_TE); + + /* Wait until the write operation will be taken into account : + at least four TX_CLK/RX_CLK clock cycles */ + tmpreg1 = (heth->Instance)->MACCR; + HAL_Delay(ETH_REG_WRITE_DELAY); + (heth->Instance)->MACCR = tmpreg1; + + /* Enable the MAC reception */ + SET_BIT(heth->Instance->MACCR, ETH_MACCR_RE); + + /* Wait until the write operation will be taken into account : + at least four TX_CLK/RX_CLK clock cycles */ + tmpreg1 = (heth->Instance)->MACCR; + HAL_Delay(ETH_REG_WRITE_DELAY); + (heth->Instance)->MACCR = tmpreg1; + + /* Flush Transmit FIFO */ + ETH_FlushTransmitFIFO(heth); + + /* Enable the DMA transmission */ + SET_BIT(heth->Instance->DMAOMR, ETH_DMAOMR_ST); + + /* Enable the DMA reception */ + SET_BIT(heth->Instance->DMAOMR, ETH_DMAOMR_SR); + + heth->gState = HAL_ETH_STATE_STARTED; + + return HAL_OK; + } + else + { + return HAL_ERROR; + } +} + +/** + * @brief Enables Ethernet MAC and DMA reception/transmission in Interrupt mode + * @param heth: pointer to a ETH_HandleTypeDef structure that contains + * the configuration information for ETHERNET module + * @retval HAL status + */ +HAL_StatusTypeDef HAL_ETH_Start_IT(ETH_HandleTypeDef *heth) +{ + uint32_t tmpreg1; + + if (heth->gState == HAL_ETH_STATE_READY) + { + heth->gState = HAL_ETH_STATE_BUSY; + + /* save IT mode to ETH Handle */ + heth->RxDescList.ItMode = 1U; + /* Disable MMC Interrupts */ + SET_BIT(heth->Instance->MACIMR, ETH_MACIMR_TSTIM | ETH_MACIMR_PMTIM); + + /* Disable Rx MMC Interrupts */ + SET_BIT(heth->Instance->MMCRIMR, ETH_MMCRIMR_RGUFM | ETH_MMCRIMR_RFAEM | \ + ETH_MMCRIMR_RFCEM); + + /* Disable Tx MMC Interrupts */ + SET_BIT(heth->Instance->MMCTIMR, ETH_MMCTIMR_TGFM | ETH_MMCTIMR_TGFMSCM | \ + ETH_MMCTIMR_TGFSCM); + + /* Set nombre of descriptors to build */ + heth->RxDescList.RxBuildDescCnt = ETH_RX_DESC_CNT; + + /* Build all descriptors */ + ETH_UpdateDescriptor(heth); + + /* Enable the MAC transmission */ + SET_BIT(heth->Instance->MACCR, ETH_MACCR_TE); + + /* Wait until the write operation will be taken into account : + at least four TX_CLK/RX_CLK clock cycles */ + tmpreg1 = (heth->Instance)->MACCR; + HAL_Delay(ETH_REG_WRITE_DELAY); + (heth->Instance)->MACCR = tmpreg1; + + /* Enable the MAC reception */ + SET_BIT(heth->Instance->MACCR, ETH_MACCR_RE); + + /* Wait until the write operation will be taken into account : + at least four TX_CLK/RX_CLK clock cycles */ + tmpreg1 = (heth->Instance)->MACCR; + HAL_Delay(ETH_REG_WRITE_DELAY); + (heth->Instance)->MACCR = tmpreg1; + + /* Flush Transmit FIFO */ + ETH_FlushTransmitFIFO(heth); + + /* Enable the DMA transmission */ + SET_BIT(heth->Instance->DMAOMR, ETH_DMAOMR_ST); + + /* Enable the DMA reception */ + SET_BIT(heth->Instance->DMAOMR, ETH_DMAOMR_SR); + + /* Enable ETH DMA interrupts: + - Tx complete interrupt + - Rx complete interrupt + - Fatal bus interrupt + */ + __HAL_ETH_DMA_ENABLE_IT(heth, (ETH_DMAIER_NISE | ETH_DMAIER_RIE | ETH_DMAIER_TIE | + ETH_DMAIER_FBEIE | ETH_DMAIER_AISE | ETH_DMAIER_RBUIE)); + + heth->gState = HAL_ETH_STATE_STARTED; + return HAL_OK; + } + else + { + return HAL_ERROR; + } +} + +/** + * @brief Stop Ethernet MAC and DMA reception/transmission + * @param heth: pointer to a ETH_HandleTypeDef structure that contains + * the configuration information for ETHERNET module + * @retval HAL status + */ +HAL_StatusTypeDef HAL_ETH_Stop(ETH_HandleTypeDef *heth) +{ + uint32_t tmpreg1; + + if (heth->gState == HAL_ETH_STATE_STARTED) + { + /* Set the ETH peripheral state to BUSY */ + heth->gState = HAL_ETH_STATE_BUSY; + /* Disable the DMA transmission */ + CLEAR_BIT(heth->Instance->DMAOMR, ETH_DMAOMR_ST); + + /* Disable the DMA reception */ + CLEAR_BIT(heth->Instance->DMAOMR, ETH_DMAOMR_SR); + + /* Disable the MAC reception */ + CLEAR_BIT(heth->Instance->MACCR, ETH_MACCR_RE); + + /* Wait until the write operation will be taken into account : + at least four TX_CLK/RX_CLK clock cycles */ + tmpreg1 = (heth->Instance)->MACCR; + HAL_Delay(ETH_REG_WRITE_DELAY); + (heth->Instance)->MACCR = tmpreg1; + + /* Flush Transmit FIFO */ + ETH_FlushTransmitFIFO(heth); + + /* Disable the MAC transmission */ + CLEAR_BIT(heth->Instance->MACCR, ETH_MACCR_TE); + + /* Wait until the write operation will be taken into account : + at least four TX_CLK/RX_CLK clock cycles */ + tmpreg1 = (heth->Instance)->MACCR; + HAL_Delay(ETH_REG_WRITE_DELAY); + (heth->Instance)->MACCR = tmpreg1; + + heth->gState = HAL_ETH_STATE_READY; + + /* Return function status */ + return HAL_OK; + } + else + { + return HAL_ERROR; + } +} + +/** + * @brief Stop Ethernet MAC and DMA reception/transmission in Interrupt mode + * @param heth: pointer to a ETH_HandleTypeDef structure that contains + * the configuration information for ETHERNET module + * @retval HAL status + */ +HAL_StatusTypeDef HAL_ETH_Stop_IT(ETH_HandleTypeDef *heth) +{ + ETH_DMADescTypeDef *dmarxdesc; + uint32_t descindex; + uint32_t tmpreg1; + + if (heth->gState == HAL_ETH_STATE_STARTED) + { + /* Set the ETH peripheral state to BUSY */ + heth->gState = HAL_ETH_STATE_BUSY; + + __HAL_ETH_DMA_DISABLE_IT(heth, (ETH_DMAIER_NISE | ETH_DMAIER_RIE | ETH_DMAIER_TIE | + ETH_DMAIER_FBEIE | ETH_DMAIER_AISE | ETH_DMAIER_RBUIE)); + + /* Disable the DMA transmission */ + CLEAR_BIT(heth->Instance->DMAOMR, ETH_DMAOMR_ST); + + /* Disable the DMA reception */ + CLEAR_BIT(heth->Instance->DMAOMR, ETH_DMAOMR_SR); + + /* Disable the MAC reception */ + CLEAR_BIT(heth->Instance->MACCR, ETH_MACCR_RE); + + /* Wait until the write operation will be taken into account : + at least four TX_CLK/RX_CLK clock cycles */ + tmpreg1 = (heth->Instance)->MACCR; + HAL_Delay(ETH_REG_WRITE_DELAY); + (heth->Instance)->MACCR = tmpreg1; + + /* Flush Transmit FIFO */ + ETH_FlushTransmitFIFO(heth); + + /* Disable the MAC transmission */ + CLEAR_BIT(heth->Instance->MACCR, ETH_MACCR_TE); + + /* Wait until the write operation will be taken into account : + at least four TX_CLK/RX_CLK clock cycles */ + tmpreg1 = (heth->Instance)->MACCR; + HAL_Delay(ETH_REG_WRITE_DELAY); + (heth->Instance)->MACCR = tmpreg1; + + /* Clear IOC bit to all Rx descriptors */ + for (descindex = 0; descindex < (uint32_t)ETH_RX_DESC_CNT; descindex++) + { + dmarxdesc = (ETH_DMADescTypeDef *)heth->RxDescList.RxDesc[descindex]; + SET_BIT(dmarxdesc->DESC1, ETH_DMARXDESC_DIC); + } + + heth->RxDescList.ItMode = 0U; + + heth->gState = HAL_ETH_STATE_READY; + + /* Return function status */ + return HAL_OK; + } + else + { + return HAL_ERROR; + } +} + +/** + * @brief Sends an Ethernet Packet in polling mode. + * @param heth: pointer to a ETH_HandleTypeDef structure that contains + * the configuration information for ETHERNET module + * @param pTxConfig: Hold the configuration of packet to be transmitted + * @param Timeout: timeout value + * @retval HAL status + */ +HAL_StatusTypeDef HAL_ETH_Transmit(ETH_HandleTypeDef *heth, ETH_TxPacketConfig *pTxConfig, uint32_t Timeout) +{ + uint32_t tickstart; + ETH_DMADescTypeDef *dmatxdesc; + + if (pTxConfig == NULL) + { + heth->ErrorCode |= HAL_ETH_ERROR_PARAM; + return HAL_ERROR; + } + + if (heth->gState == HAL_ETH_STATE_STARTED) + { + /* Config DMA Tx descriptor by Tx Packet info */ + if (ETH_Prepare_Tx_Descriptors(heth, pTxConfig, 0) != HAL_ETH_ERROR_NONE) + { + /* Set the ETH error code */ + heth->ErrorCode |= HAL_ETH_ERROR_BUSY; + return HAL_ERROR; + } + + /* Ensure completion of descriptor preparation before transmission start */ + __DSB(); + + dmatxdesc = (ETH_DMADescTypeDef *)(&heth->TxDescList)->TxDesc[heth->TxDescList.CurTxDesc]; + + /* Incr current tx desc index */ + INCR_TX_DESC_INDEX(heth->TxDescList.CurTxDesc, 1U); + + /* Start transmission */ + /* issue a poll command to Tx DMA by writing address of next immediate free descriptor */ + WRITE_REG(heth->Instance->DMATPDR, (uint32_t)(heth->TxDescList.TxDesc[heth->TxDescList.CurTxDesc])); + + tickstart = HAL_GetTick(); + + /* Wait for data to be transmitted or timeout occurred */ + while ((dmatxdesc->DESC0 & ETH_DMATXDESC_OWN) != (uint32_t)RESET) + { + if ((heth->Instance->DMASR & ETH_DMASR_FBES) != (uint32_t)RESET) + { + heth->ErrorCode |= HAL_ETH_ERROR_DMA; + heth->DMAErrorCode = heth->Instance->DMASR; + /* Return function status */ + return HAL_ERROR; + } + + /* Check for the Timeout */ + if (Timeout != HAL_MAX_DELAY) + { + if (((HAL_GetTick() - tickstart) > Timeout) || (Timeout == 0U)) + { + heth->ErrorCode |= HAL_ETH_ERROR_TIMEOUT; + /* Clear TX descriptor so that we can proceed */ + dmatxdesc->DESC0 = (ETH_DMATXDESC_FS | ETH_DMATXDESC_LS); + return HAL_ERROR; + } + } + } + + /* Return function status */ + return HAL_OK; + } + else + { + return HAL_ERROR; + } +} + +/** + * @brief Sends an Ethernet Packet in interrupt mode. + * @param heth: pointer to a ETH_HandleTypeDef structure that contains + * the configuration information for ETHERNET module + * @param pTxConfig: Hold the configuration of packet to be transmitted + * @retval HAL status + */ +HAL_StatusTypeDef HAL_ETH_Transmit_IT(ETH_HandleTypeDef *heth, ETH_TxPacketConfig *pTxConfig) +{ + if (pTxConfig == NULL) + { + heth->ErrorCode |= HAL_ETH_ERROR_PARAM; + return HAL_ERROR; + } + + if (heth->gState == HAL_ETH_STATE_STARTED) + { + /* Save the packet pointer to release. */ + heth->TxDescList.CurrentPacketAddress = (uint32_t *)pTxConfig->pData; + + /* Config DMA Tx descriptor by Tx Packet info */ + if (ETH_Prepare_Tx_Descriptors(heth, pTxConfig, 1) != HAL_ETH_ERROR_NONE) + { + heth->ErrorCode |= HAL_ETH_ERROR_BUSY; + return HAL_ERROR; + } + + /* Ensure completion of descriptor preparation before transmission start */ + __DSB(); + + /* Incr current tx desc index */ + INCR_TX_DESC_INDEX(heth->TxDescList.CurTxDesc, 1U); + + /* Start transmission */ + /* issue a poll command to Tx DMA by writing address of next immediate free descriptor */ + if (((heth->Instance)->DMASR & ETH_DMASR_TBUS) != (uint32_t)RESET) + { + /* Clear TBUS ETHERNET DMA flag */ + (heth->Instance)->DMASR = ETH_DMASR_TBUS; + /* Resume DMA transmission*/ + (heth->Instance)->DMATPDR = 0U; + } + + return HAL_OK; + + } + else + { + return HAL_ERROR; + } +} + +/** + * @brief Read a received packet. + * @param heth: pointer to a ETH_HandleTypeDef structure that contains + * the configuration information for ETHERNET module + * @param pAppBuff: Pointer to an application buffer to receive the packet. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_ETH_ReadData(ETH_HandleTypeDef *heth, void **pAppBuff) +{ + uint32_t descidx; + ETH_DMADescTypeDef *dmarxdesc; + uint32_t desccnt = 0U; + uint32_t desccntmax; + uint32_t bufflength; + uint8_t rxdataready = 0U; + + + if (pAppBuff == NULL) + { + heth->ErrorCode |= HAL_ETH_ERROR_PARAM; + return HAL_ERROR; + } + + if (heth->gState != HAL_ETH_STATE_STARTED) + { + return HAL_ERROR; + } + + descidx = heth->RxDescList.RxDescIdx; + dmarxdesc = (ETH_DMADescTypeDef *)heth->RxDescList.RxDesc[descidx]; + desccntmax = ETH_RX_DESC_CNT - heth->RxDescList.RxBuildDescCnt; + + /* Check if descriptor is not owned by DMA */ + while ((READ_BIT(dmarxdesc->DESC0, ETH_DMARXDESC_OWN) == (uint32_t)RESET) && (desccnt < desccntmax) + && (rxdataready == 0U)) + { + if (READ_BIT(dmarxdesc->DESC0, ETH_DMARXDESC_LS) != (uint32_t)RESET) + { + /* Get timestamp high */ + heth->RxDescList.TimeStamp.TimeStampHigh = dmarxdesc->DESC6; + /* Get timestamp low */ + heth->RxDescList.TimeStamp.TimeStampLow = dmarxdesc->DESC7; + } + if ((READ_BIT(dmarxdesc->DESC0, ETH_DMARXDESC_FS) != (uint32_t)RESET) || (heth->RxDescList.pRxStart != NULL)) + { + /* Check first descriptor */ + if (READ_BIT(dmarxdesc->DESC0, ETH_DMARXDESC_FS) != (uint32_t)RESET) + { + heth->RxDescList.RxDescCnt = 0; + heth->RxDescList.RxDataLength = 0; + } + + /* Check if last descriptor */ + bufflength = heth->Init.RxBuffLen; + if (READ_BIT(dmarxdesc->DESC0, ETH_DMARXDESC_LS) != (uint32_t)RESET) + { + /* Get the Frame Length of the received packet: substruct 4 bytes of the CRC */ + bufflength = ((dmarxdesc->DESC0 & ETH_DMARXDESC_FL) >> ETH_DMARXDESC_FRAMELENGTHSHIFT) - 4U; + + /* Save Last descriptor index */ + heth->RxDescList.pRxLastRxDesc = dmarxdesc->DESC0; + + /* Packet ready */ + rxdataready = 1; + } + + /* Link data */ + WRITE_REG(dmarxdesc->BackupAddr0, dmarxdesc->DESC2); +#if (USE_HAL_ETH_REGISTER_CALLBACKS == 1) + /*Call registered Link callback*/ + heth->rxLinkCallback(&heth->RxDescList.pRxStart, &heth->RxDescList.pRxEnd, + (uint8_t *)dmarxdesc->BackupAddr0, bufflength); +#else + /* Link callback */ + HAL_ETH_RxLinkCallback(&heth->RxDescList.pRxStart, &heth->RxDescList.pRxEnd, + (uint8_t *)dmarxdesc->BackupAddr0, (uint16_t) bufflength); +#endif /* USE_HAL_ETH_REGISTER_CALLBACKS */ + heth->RxDescList.RxDescCnt++; + heth->RxDescList.RxDataLength += bufflength; + + /* Clear buffer pointer */ + dmarxdesc->BackupAddr0 = 0; + } + + /* Increment current rx descriptor index */ + INCR_RX_DESC_INDEX(descidx, 1U); + /* Get current descriptor address */ + dmarxdesc = (ETH_DMADescTypeDef *)heth->RxDescList.RxDesc[descidx]; + desccnt++; + } + + heth->RxDescList.RxBuildDescCnt += desccnt; + if ((heth->RxDescList.RxBuildDescCnt) != 0U) + { + /* Update Descriptors */ + ETH_UpdateDescriptor(heth); + } + + heth->RxDescList.RxDescIdx = descidx; + + if (rxdataready == 1U) + { + /* Return received packet */ + *pAppBuff = heth->RxDescList.pRxStart; + /* Reset first element */ + heth->RxDescList.pRxStart = NULL; + + return HAL_OK; + } + + /* Packet not ready */ + return HAL_ERROR; +} + +/** + * @brief This function gives back Rx Desc of the last received Packet + * to the DMA, so ETH DMA will be able to use these descriptors + * to receive next Packets. + * @param heth: pointer to a ETH_HandleTypeDef structure that contains + * the configuration information for ETHERNET module + * @retval HAL status + */ +static void ETH_UpdateDescriptor(ETH_HandleTypeDef *heth) +{ + uint32_t descidx; + uint32_t desccount; + ETH_DMADescTypeDef *dmarxdesc; + uint8_t *buff = NULL; + uint8_t allocStatus = 1U; + + descidx = heth->RxDescList.RxBuildDescIdx; + dmarxdesc = (ETH_DMADescTypeDef *)heth->RxDescList.RxDesc[descidx]; + desccount = heth->RxDescList.RxBuildDescCnt; + + while ((desccount > 0U) && (allocStatus != 0U)) + { + /* Check if a buffer's attached the descriptor */ + if (READ_REG(dmarxdesc->BackupAddr0) == 0U) + { + /* Get a new buffer. */ +#if (USE_HAL_ETH_REGISTER_CALLBACKS == 1) + /*Call registered Allocate callback*/ + heth->rxAllocateCallback(&buff); +#else + /* Allocate callback */ + HAL_ETH_RxAllocateCallback(&buff); +#endif /* USE_HAL_ETH_REGISTER_CALLBACKS */ + if (buff == NULL) + { + allocStatus = 0U; + } + else + { + WRITE_REG(dmarxdesc->BackupAddr0, (uint32_t)buff); + WRITE_REG(dmarxdesc->DESC2, (uint32_t)buff); + } + } + + if (allocStatus != 0U) + { + if (heth->RxDescList.ItMode == 0U) + { + WRITE_REG(dmarxdesc->DESC1, ETH_DMARXDESC_DIC | ETH_RX_BUF_SIZE | ETH_DMARXDESC_RCH); + } + else + { + WRITE_REG(dmarxdesc->DESC1, ETH_RX_BUF_SIZE | ETH_DMARXDESC_RCH); + } + + /* Before transferring the ownership to DMA, make sure that the RX descriptors bits writing + is fully performed. + The __DMB() instruction is added to avoid any potential compiler optimization that + may lead to abnormal behavior. */ + __DMB(); + + SET_BIT(dmarxdesc->DESC0, ETH_DMARXDESC_OWN); + + /* Increment current rx descriptor index */ + INCR_RX_DESC_INDEX(descidx, 1U); + /* Get current descriptor address */ + dmarxdesc = (ETH_DMADescTypeDef *)heth->RxDescList.RxDesc[descidx]; + desccount--; + } + } + + if (heth->RxDescList.RxBuildDescCnt != desccount) + { + /* Set the Tail pointer address */ + WRITE_REG(heth->Instance->DMARPDR, 0); + + heth->RxDescList.RxBuildDescIdx = descidx; + heth->RxDescList.RxBuildDescCnt = desccount; + } +} + +/** + * @brief Register the Rx alloc callback. + * @param heth: pointer to a ETH_HandleTypeDef structure that contains + * the configuration information for ETHERNET module + * @param rxAllocateCallback: pointer to function to alloc buffer + * @retval HAL status + */ +HAL_StatusTypeDef HAL_ETH_RegisterRxAllocateCallback(ETH_HandleTypeDef *heth, + pETH_rxAllocateCallbackTypeDef rxAllocateCallback) +{ + if (rxAllocateCallback == NULL) + { + /* No buffer to save */ + return HAL_ERROR; + } + + /* Set function to allocate buffer */ + heth->rxAllocateCallback = rxAllocateCallback; + + return HAL_OK; +} + +/** + * @brief Unregister the Rx alloc callback. + * @param heth: pointer to a ETH_HandleTypeDef structure that contains + * the configuration information for ETHERNET module + * @retval HAL status + */ +HAL_StatusTypeDef HAL_ETH_UnRegisterRxAllocateCallback(ETH_HandleTypeDef *heth) +{ + /* Set function to allocate buffer */ + heth->rxAllocateCallback = HAL_ETH_RxAllocateCallback; + + return HAL_OK; +} + +/** + * @brief Rx Allocate callback. + * @param buff: pointer to allocated buffer + * @retval None + */ +__weak void HAL_ETH_RxAllocateCallback(uint8_t **buff) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(buff); + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_ETH_RxAllocateCallback could be implemented in the user file + */ +} + +/** + * @brief Rx Link callback. + * @param pStart: pointer to packet start + * @param pStart: pointer to packet end + * @param buff: pointer to received data + * @param Length: received data length + * @retval None + */ +__weak void HAL_ETH_RxLinkCallback(void **pStart, void **pEnd, uint8_t *buff, uint16_t Length) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(pStart); + UNUSED(pEnd); + UNUSED(buff); + UNUSED(Length); + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_ETH_RxLinkCallback could be implemented in the user file + */ +} + +/** + * @brief Set the Rx link data function. + * @param heth: pointer to a ETH_HandleTypeDef structure that contains + * the configuration information for ETHERNET module + * @param rxLinkCallback: pointer to function to link data + * @retval HAL status + */ +HAL_StatusTypeDef HAL_ETH_RegisterRxLinkCallback(ETH_HandleTypeDef *heth, pETH_rxLinkCallbackTypeDef rxLinkCallback) +{ + if (rxLinkCallback == NULL) + { + /* No buffer to save */ + return HAL_ERROR; + } + + /* Set function to link data */ + heth->rxLinkCallback = rxLinkCallback; + + return HAL_OK; +} + +/** + * @brief Unregister the Rx link callback. + * @param heth: pointer to a ETH_HandleTypeDef structure that contains + * the configuration information for ETHERNET module + * @retval HAL status + */ +HAL_StatusTypeDef HAL_ETH_UnRegisterRxLinkCallback(ETH_HandleTypeDef *heth) +{ + /* Set function to allocate buffer */ + heth->rxLinkCallback = HAL_ETH_RxLinkCallback; + + return HAL_OK; +} + +/** + * @brief Get the error state of the last received packet. + * @param heth: pointer to a ETH_HandleTypeDef structure that contains + * the configuration information for ETHERNET module + * @param pErrorCode: pointer to uint32_t to hold the error code + * @retval HAL status + */ +HAL_StatusTypeDef HAL_ETH_GetRxDataErrorCode(ETH_HandleTypeDef *heth, uint32_t *pErrorCode) +{ + /* Get error bits. */ + *pErrorCode = READ_BIT(heth->RxDescList.pRxLastRxDesc, ETH_DMARXDESC_ERRORS_MASK); + + return HAL_OK; +} + +/** + * @brief Set the Tx free function. + * @param heth: pointer to a ETH_HandleTypeDef structure that contains + * the configuration information for ETHERNET module + * @param txFreeCallback: pointer to function to release the packet + * @retval HAL status + */ +HAL_StatusTypeDef HAL_ETH_RegisterTxFreeCallback(ETH_HandleTypeDef *heth, pETH_txFreeCallbackTypeDef txFreeCallback) +{ + if (txFreeCallback == NULL) + { + /* No buffer to save */ + return HAL_ERROR; + } + + /* Set function to free transmmitted packet */ + heth->txFreeCallback = txFreeCallback; + + return HAL_OK; +} + +/** + * @brief Unregister the Tx free callback. + * @param heth: pointer to a ETH_HandleTypeDef structure that contains + * the configuration information for ETHERNET module + * @retval HAL status + */ +HAL_StatusTypeDef HAL_ETH_UnRegisterTxFreeCallback(ETH_HandleTypeDef *heth) +{ + /* Set function to allocate buffer */ + heth->txFreeCallback = HAL_ETH_TxFreeCallback; + + return HAL_OK; +} + +/** + * @brief Tx Free callback. + * @param buff: pointer to buffer to free + * @retval None + */ +__weak void HAL_ETH_TxFreeCallback(uint32_t *buff) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(buff); + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_ETH_TxFreeCallback could be implemented in the user file + */ +} + +/** + * @brief Release transmitted Tx packets. + * @param heth: pointer to a ETH_HandleTypeDef structure that contains + * the configuration information for ETHERNET module + * @retval HAL status + */ +HAL_StatusTypeDef HAL_ETH_ReleaseTxPacket(ETH_HandleTypeDef *heth) +{ + ETH_TxDescListTypeDef *dmatxdesclist = &heth->TxDescList; + uint32_t numOfBuf = dmatxdesclist->BuffersInUse; + uint32_t idx = dmatxdesclist->releaseIndex; + uint8_t pktTxStatus = 1U; + uint8_t pktInUse; +#ifdef HAL_ETH_USE_PTP + ETH_TimeStampTypeDef *timestamp = &heth->TxTimestamp; +#endif /* HAL_ETH_USE_PTP */ + + /* Loop through buffers in use. */ + while ((numOfBuf != 0U) && (pktTxStatus != 0U)) + { + pktInUse = 1U; + numOfBuf--; + /* If no packet, just examine the next packet. */ + if (dmatxdesclist->PacketAddress[idx] == NULL) + { + /* No packet in use, skip to next. */ + idx = (idx + 1U) & (ETH_TX_DESC_CNT - 1U); + pktInUse = 0U; + } + + if (pktInUse != 0U) + { + /* Determine if the packet has been transmitted. */ + if ((heth->Init.TxDesc[idx].DESC0 & ETH_DMATXDESC_OWN) == 0U) + { +#ifdef HAL_ETH_USE_PTP + /* Get timestamp low */ + timestamp->TimeStampLow = heth->Init.TxDesc[idx].DESC6; + /* Get timestamp high */ + timestamp->TimeStampHigh = heth->Init.TxDesc[idx].DESC7; +#endif /* HAL_ETH_USE_PTP */ + +#if (USE_HAL_ETH_REGISTER_CALLBACKS == 1) + /*Call registered callbacks*/ +#ifdef HAL_ETH_USE_PTP + /* Handle Ptp */ + heth->txPtpCallback(dmatxdesclist->PacketAddress[idx], timestamp); +#endif /* HAL_ETH_USE_PTP */ + /* Release the packet. */ + heth->txFreeCallback(dmatxdesclist->PacketAddress[idx]); +#else + /* Call callbacks */ +#ifdef HAL_ETH_USE_PTP + /* Handle Ptp */ + HAL_ETH_TxPtpCallback(dmatxdesclist->PacketAddress[idx], timestamp); +#endif /* HAL_ETH_USE_PTP */ + /* Release the packet. */ + HAL_ETH_TxFreeCallback(dmatxdesclist->PacketAddress[idx]); +#endif /* USE_HAL_ETH_REGISTER_CALLBACKS */ + + /* Clear the entry in the in-use array. */ + dmatxdesclist->PacketAddress[idx] = NULL; + + /* Update the transmit relesae index and number of buffers in use. */ + idx = (idx + 1U) & (ETH_TX_DESC_CNT - 1U); + dmatxdesclist->BuffersInUse = numOfBuf; + dmatxdesclist->releaseIndex = idx; + } + else + { + /* Get out of the loop! */ + pktTxStatus = 0U; + } + } + } + return HAL_OK; +} + +#ifdef HAL_ETH_USE_PTP +/** + * @brief Set the Ethernet PTP configuration. + * @param heth: pointer to a ETH_HandleTypeDef structure that contains + * the configuration information for ETHERNET module + * @param ptpconfig: pointer to a ETH_PTP_ConfigTypeDef structure that contains + * the configuration information for PTP + * @retval HAL status + */ +HAL_StatusTypeDef HAL_ETH_PTP_SetConfig(ETH_HandleTypeDef *heth, ETH_PTP_ConfigTypeDef *ptpconfig) +{ + uint32_t tmpTSCR; + ETH_TimeTypeDef time; + + if (ptpconfig == NULL) + { + return HAL_ERROR; + } + + tmpTSCR = ptpconfig->Timestamp | + ((uint32_t)ptpconfig->TimestampUpdate << ETH_PTPTSCR_TSFCU_Pos) | + ((uint32_t)ptpconfig->TimestampAll << ETH_PTPTSCR_TSSARFE_Pos) | + ((uint32_t)ptpconfig->TimestampRolloverMode << ETH_PTPTSCR_TSSSR_Pos) | + ((uint32_t)ptpconfig->TimestampV2 << ETH_PTPTSCR_TSPTPPSV2E_Pos) | + ((uint32_t)ptpconfig->TimestampEthernet << ETH_PTPTSCR_TSSPTPOEFE_Pos) | + ((uint32_t)ptpconfig->TimestampIPv6 << ETH_PTPTSCR_TSSIPV6FE_Pos) | + ((uint32_t)ptpconfig->TimestampIPv4 << ETH_PTPTSCR_TSSIPV4FE_Pos) | + ((uint32_t)ptpconfig->TimestampEvent << ETH_PTPTSCR_TSSEME_Pos) | + ((uint32_t)ptpconfig->TimestampMaster << ETH_PTPTSCR_TSSMRME_Pos) | + ((uint32_t)ptpconfig->TimestampFilter << ETH_PTPTSCR_TSPFFMAE_Pos) | + ((uint32_t)ptpconfig->TimestampClockType << ETH_PTPTSCR_TSCNT_Pos); + + /* Write to MACTSCR */ + MODIFY_REG(heth->Instance->PTPTSCR, ETH_MACTSCR_MASK, tmpTSCR); + + /* Enable Timestamp */ + SET_BIT(heth->Instance->PTPTSCR, ETH_PTPTSCR_TSE); + WRITE_REG(heth->Instance->PTPSSIR, ptpconfig->TimestampSubsecondInc); + WRITE_REG(heth->Instance->PTPTSAR, ptpconfig->TimestampAddend); + + /* Enable Timestamp */ + if (ptpconfig->TimestampAddendUpdate == ENABLE) + { + SET_BIT(heth->Instance->PTPTSCR, ETH_PTPTSCR_TSARU); + while ((heth->Instance->PTPTSCR & ETH_PTPTSCR_TSARU) != 0) {} + } + + /* Enable Update mode */ + if (ptpconfig->TimestampUpdateMode == ENABLE) + { + SET_BIT(heth->Instance->PTPTSCR, ETH_PTPTSCR_TSFCU); + } + + /* Initialize Time */ + time.Seconds = 0; + time.NanoSeconds = 0; + HAL_ETH_PTP_SetTime(heth, &time); + + /* Ptp Init */ + SET_BIT(heth->Instance->PTPTSCR, ETH_PTPTSCR_TSSTI); + + /* Set PTP Configuration done */ + heth->IsPtpConfigured = HAL_ETH_PTP_CONFIGURATED; + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Get the Ethernet PTP configuration. + * @param heth: pointer to a ETH_HandleTypeDef structure that contains + * the configuration information for ETHERNET module + * @param ptpconfig: pointer to a ETH_PTP_ConfigTypeDef structure that contains + * the configuration information for PTP + * @retval HAL status + */ +HAL_StatusTypeDef HAL_ETH_PTP_GetConfig(ETH_HandleTypeDef *heth, ETH_PTP_ConfigTypeDef *ptpconfig) +{ + if (ptpconfig == NULL) + { + return HAL_ERROR; + } + ptpconfig->Timestamp = READ_BIT(heth->Instance->PTPTSCR, ETH_PTPTSCR_TSE); + ptpconfig->TimestampUpdate = ((READ_BIT(heth->Instance->PTPTSCR, + ETH_PTPTSCR_TSFCU) >> ETH_PTPTSCR_TSFCU_Pos) > 0U) ? ENABLE : DISABLE; + ptpconfig->TimestampAll = ((READ_BIT(heth->Instance->PTPTSCR, + ETH_PTPTSCR_TSSARFE) >> ETH_PTPTSCR_TSSARFE_Pos) > 0U) ? ENABLE : DISABLE; + ptpconfig->TimestampRolloverMode = ((READ_BIT(heth->Instance->PTPTSCR, + ETH_PTPTSCR_TSSSR) >> ETH_PTPTSCR_TSSSR_Pos) > 0U) + ? ENABLE : DISABLE; + ptpconfig->TimestampV2 = ((READ_BIT(heth->Instance->PTPTSCR, + ETH_PTPTSCR_TSPTPPSV2E) >> ETH_PTPTSCR_TSPTPPSV2E_Pos) > 0U) ? ENABLE : DISABLE; + ptpconfig->TimestampEthernet = ((READ_BIT(heth->Instance->PTPTSCR, + ETH_PTPTSCR_TSSPTPOEFE) >> ETH_PTPTSCR_TSSPTPOEFE_Pos) > 0U) + ? ENABLE : DISABLE; + ptpconfig->TimestampIPv6 = ((READ_BIT(heth->Instance->PTPTSCR, + ETH_PTPTSCR_TSSIPV6FE) >> ETH_PTPTSCR_TSSIPV6FE_Pos) > 0U) ? ENABLE : DISABLE; + ptpconfig->TimestampIPv4 = ((READ_BIT(heth->Instance->PTPTSCR, + ETH_PTPTSCR_TSSIPV4FE) >> ETH_PTPTSCR_TSSIPV4FE_Pos) > 0U) ? ENABLE : DISABLE; + ptpconfig->TimestampEvent = ((READ_BIT(heth->Instance->PTPTSCR, + ETH_PTPTSCR_TSSEME) >> ETH_PTPTSCR_TSSEME_Pos) > 0U) ? ENABLE : DISABLE; + ptpconfig->TimestampMaster = ((READ_BIT(heth->Instance->PTPTSCR, + ETH_PTPTSCR_TSSMRME) >> ETH_PTPTSCR_TSSMRME_Pos) > 0U) ? ENABLE : DISABLE; + ptpconfig->TimestampFilter = ((READ_BIT(heth->Instance->PTPTSCR, + ETH_PTPTSCR_TSPFFMAE) >> ETH_PTPTSCR_TSPFFMAE_Pos) > 0U) ? ENABLE : DISABLE; + ptpconfig->TimestampClockType = ((READ_BIT(heth->Instance->PTPTSCR, + ETH_PTPTSCR_TSCNT) >> ETH_PTPTSCR_TSCNT_Pos) > 0U) ? ENABLE : DISABLE; + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Set Seconds and Nanoseconds for the Ethernet PTP registers. + * @param heth: pointer to a ETH_HandleTypeDef structure that contains + * the configuration information for ETHERNET module + * @param heth: pointer to a ETH_TimeTypeDef structure that contains + * time to set + * @retval HAL status + */ +HAL_StatusTypeDef HAL_ETH_PTP_SetTime(ETH_HandleTypeDef *heth, ETH_TimeTypeDef *time) +{ + if (heth->IsPtpConfigured == HAL_ETH_PTP_CONFIGURATED) + { + /* Set Seconds */ + heth->Instance->PTPTSHUR = time->Seconds; + + /* Set NanoSeconds */ + heth->Instance->PTPTSLUR = time->NanoSeconds; + + /* Return function status */ + return HAL_OK; + } + else + { + /* Return function status */ + return HAL_ERROR; + } +} + +/** + * @brief Get Seconds and Nanoseconds for the Ethernet PTP registers. + * @param heth: pointer to a ETH_HandleTypeDef structure that contains + * the configuration information for ETHERNET module + * @param heth: pointer to a ETH_TimeTypeDef structure that contains + * time to get + * @retval HAL status + */ +HAL_StatusTypeDef HAL_ETH_PTP_GetTime(ETH_HandleTypeDef *heth, ETH_TimeTypeDef *time) +{ + if (heth->IsPtpConfigured == HAL_ETH_PTP_CONFIGURATED) + { + /* Get Seconds */ + time->Seconds = heth->Instance->PTPTSHR; + + /* Get NanoSeconds */ + time->NanoSeconds = heth->Instance->PTPTSLR; + + /* Return function status */ + return HAL_OK; + } + else + { + /* Return function status */ + return HAL_ERROR; + } +} + +/** + * @brief Update time for the Ethernet PTP registers. + * @param heth: pointer to a ETH_HandleTypeDef structure that contains + * the configuration information for ETHERNET module + * @param timeupdate: pointer to a ETH_TIMEUPDATETypeDef structure that contains + * the time update information + * @retval HAL status + */ +HAL_StatusTypeDef HAL_ETH_PTP_AddTimeOffset(ETH_HandleTypeDef *heth, ETH_PtpUpdateTypeDef ptpoffsettype, + ETH_TimeTypeDef *timeoffset) +{ + if (heth->IsPtpConfigured == HAL_ETH_PTP_CONFIGURATED) + { + if (ptpoffsettype == HAL_ETH_PTP_NEGATIVE_UPDATE) + { + /* Set Seconds update */ + heth->Instance->PTPTSHUR = ETH_PTPTSHR_VALUE - timeoffset->Seconds + 1U; + + if (READ_BIT(heth->Instance->PTPTSCR, ETH_PTPTSCR_TSSSR) == ETH_PTPTSCR_TSSSR) + { + /* Set nanoSeconds update */ + heth->Instance->PTPTSLUR = ETH_PTPTSLR_VALUE - timeoffset->NanoSeconds; + } + else + { + heth->Instance->PTPTSLUR = ETH_PTPTSHR_VALUE - timeoffset->NanoSeconds + 1U; + } + } + else + { + /* Set Seconds update */ + heth->Instance->PTPTSHUR = timeoffset->Seconds; + /* Set nanoSeconds update */ + heth->Instance->PTPTSLUR = timeoffset->NanoSeconds; + } + + /* Return function status */ + return HAL_OK; + } + else + { + /* Return function status */ + return HAL_ERROR; + } +} + +/** + * @brief Insert Timestamp in transmission. + * @param heth: pointer to a ETH_HandleTypeDef structure that contains + * the configuration information for ETHERNET module + * @param txtimestampconf: Enable or Disable timestamp in transmission + * @retval HAL status + */ +HAL_StatusTypeDef HAL_ETH_PTP_InsertTxTimestamp(ETH_HandleTypeDef *heth) +{ + ETH_TxDescListTypeDef *dmatxdesclist = &heth->TxDescList; + uint32_t descidx = dmatxdesclist->CurTxDesc; + ETH_DMADescTypeDef *dmatxdesc = (ETH_DMADescTypeDef *)dmatxdesclist->TxDesc[descidx]; + + if (heth->IsPtpConfigured == HAL_ETH_PTP_CONFIGURATED) + { + /* Enable Time Stamp transmission */ + SET_BIT(dmatxdesc->DESC0, ETH_DMATXDESC_TTSE); + + /* Return function status */ + return HAL_OK; + } + else + { + /* Return function status */ + return HAL_ERROR; + } +} + +/** + * @brief Get transmission timestamp. + * @param heth: pointer to a ETH_HandleTypeDef structure that contains + * the configuration information for ETHERNET module + * @param timestamp: pointer to ETH_TIMESTAMPTypeDef structure that contains + * transmission timestamp + * @retval HAL status + */ +HAL_StatusTypeDef HAL_ETH_PTP_GetTxTimestamp(ETH_HandleTypeDef *heth, ETH_TimeStampTypeDef *timestamp) +{ + ETH_TxDescListTypeDef *dmatxdesclist = &heth->TxDescList; + uint32_t idx = dmatxdesclist->releaseIndex; + ETH_DMADescTypeDef *dmatxdesc = (ETH_DMADescTypeDef *)dmatxdesclist->TxDesc[idx]; + + if (heth->IsPtpConfigured == HAL_ETH_PTP_CONFIGURATED) + { + /* Get timestamp low */ + timestamp->TimeStampLow = dmatxdesc->DESC0; + /* Get timestamp high */ + timestamp->TimeStampHigh = dmatxdesc->DESC1; + + /* Return function status */ + return HAL_OK; + } + else + { + /* Return function status */ + return HAL_ERROR; + } +} + +/** + * @brief Get receive timestamp. + * @param heth: pointer to a ETH_HandleTypeDef structure that contains + * the configuration information for ETHERNET module + * @param timestamp: pointer to ETH_TIMESTAMPTypeDef structure that contains + * receive timestamp + * @retval HAL status + */ +HAL_StatusTypeDef HAL_ETH_PTP_GetRxTimestamp(ETH_HandleTypeDef *heth, ETH_TimeStampTypeDef *timestamp) +{ + if (heth->IsPtpConfigured == HAL_ETH_PTP_CONFIGURATED) + { + /* Get timestamp low */ + timestamp->TimeStampLow = heth->RxDescList.TimeStamp.TimeStampLow; + /* Get timestamp high */ + timestamp->TimeStampHigh = heth->RxDescList.TimeStamp.TimeStampHigh; + + /* Return function status */ + return HAL_OK; + } + else + { + /* Return function status */ + return HAL_ERROR; + } +} + +/** + * @brief Register the Tx Ptp callback. + * @param heth: pointer to a ETH_HandleTypeDef structure that contains + * the configuration information for ETHERNET module + * @param txPtpCallback: Function to handle Ptp transmission + * @retval HAL status + */ +HAL_StatusTypeDef HAL_ETH_RegisterTxPtpCallback(ETH_HandleTypeDef *heth, pETH_txPtpCallbackTypeDef txPtpCallback) +{ + if (txPtpCallback == NULL) + { + /* No buffer to save */ + return HAL_ERROR; + } + /* Set Function to handle Tx Ptp */ + heth->txPtpCallback = txPtpCallback; + + return HAL_OK; +} + +/** + * @brief Unregister the Tx Ptp callback. + * @param heth: pointer to a ETH_HandleTypeDef structure that contains + * the configuration information for ETHERNET module + * @retval HAL status + */ +HAL_StatusTypeDef HAL_ETH_UnRegisterTxPtpCallback(ETH_HandleTypeDef *heth) +{ + /* Set function to allocate buffer */ + heth->txPtpCallback = HAL_ETH_TxPtpCallback; + + return HAL_OK; +} + +/** + * @brief Tx Ptp callback. + * @param buff: pointer to application buffer + * @retval None + */ +__weak void HAL_ETH_TxPtpCallback(uint32_t *buff, ETH_TimeStampTypeDef *timestamp) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(buff); + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_ETH_TxPtpCallback could be implemented in the user file + */ +} +#endif /* HAL_ETH_USE_PTP */ + +/** + * @brief This function handles ETH interrupt request. + * @param heth: pointer to a ETH_HandleTypeDef structure that contains + * the configuration information for ETHERNET module + * @retval HAL status + */ +void HAL_ETH_IRQHandler(ETH_HandleTypeDef *heth) +{ + /* Packet received */ + if (__HAL_ETH_DMA_GET_IT(heth, ETH_DMASR_RS)) + { + if (__HAL_ETH_DMA_GET_IT_SOURCE(heth, ETH_DMAIER_RIE)) + { + /* Clear the Eth DMA Rx IT pending bits */ + __HAL_ETH_DMA_CLEAR_IT(heth, ETH_DMASR_RS | ETH_DMASR_NIS); + +#if (USE_HAL_ETH_REGISTER_CALLBACKS == 1) + /*Call registered Receive complete callback*/ + heth->RxCpltCallback(heth); +#else + /* Receive complete callback */ + HAL_ETH_RxCpltCallback(heth); +#endif /* USE_HAL_ETH_REGISTER_CALLBACKS */ + } + } + + /* Packet transmitted */ + if (__HAL_ETH_DMA_GET_IT(heth, ETH_DMASR_TS)) + { + if (__HAL_ETH_DMA_GET_IT_SOURCE(heth, ETH_DMAIER_TIE)) + { + /* Clear the Eth DMA Tx IT pending bits */ + __HAL_ETH_DMA_CLEAR_IT(heth, ETH_DMASR_TS | ETH_DMASR_NIS); + +#if (USE_HAL_ETH_REGISTER_CALLBACKS == 1) + /*Call registered Transmit complete callback*/ + heth->TxCpltCallback(heth); +#else + /* Transfer complete callback */ + HAL_ETH_TxCpltCallback(heth); +#endif /* USE_HAL_ETH_REGISTER_CALLBACKS */ + } + } + + + /* ETH DMA Error */ + if (__HAL_ETH_DMA_GET_IT(heth, ETH_DMASR_AIS)) + { + if (__HAL_ETH_DMA_GET_IT_SOURCE(heth, ETH_DMAIER_AISE)) + { + heth->ErrorCode |= HAL_ETH_ERROR_DMA; + + /* if fatal bus error occurred */ + if (__HAL_ETH_DMA_GET_IT(heth, ETH_DMASR_FBES)) + { + /* Get DMA error code */ + heth->DMAErrorCode = READ_BIT(heth->Instance->DMASR, (ETH_DMASR_FBES | ETH_DMASR_TPS | ETH_DMASR_RPS)); + + /* Disable all interrupts */ + __HAL_ETH_DMA_DISABLE_IT(heth, ETH_DMAIER_NISE | ETH_DMAIER_AISE); + + /* Set HAL state to ERROR */ + heth->gState = HAL_ETH_STATE_ERROR; + } + else + { + /* Get DMA error status */ + heth->DMAErrorCode = READ_BIT(heth->Instance->DMASR, (ETH_DMASR_ETS | ETH_DMASR_RWTS | + ETH_DMASR_RBUS | ETH_DMASR_AIS)); + + /* Clear the interrupt summary flag */ + __HAL_ETH_DMA_CLEAR_IT(heth, (ETH_DMASR_ETS | ETH_DMASR_RWTS | + ETH_DMASR_RBUS | ETH_DMASR_AIS)); + } +#if (USE_HAL_ETH_REGISTER_CALLBACKS == 1) + /* Call registered Error callback*/ + heth->ErrorCallback(heth); +#else + /* Ethernet DMA Error callback */ + HAL_ETH_ErrorCallback(heth); +#endif /* USE_HAL_ETH_REGISTER_CALLBACKS */ + + } + } + + + /* ETH PMT IT */ + if (__HAL_ETH_MAC_GET_IT(heth, ETH_MAC_PMT_IT)) + { + /* Get MAC Wake-up source and clear the status register pending bit */ + heth->MACWakeUpEvent = READ_BIT(heth->Instance->MACPMTCSR, (ETH_MACPMTCSR_WFR | ETH_MACPMTCSR_MPR)); + +#if (USE_HAL_ETH_REGISTER_CALLBACKS == 1) + /* Call registered PMT callback*/ + heth->PMTCallback(heth); +#else + /* Ethernet PMT callback */ + HAL_ETH_PMTCallback(heth); +#endif /* USE_HAL_ETH_REGISTER_CALLBACKS */ + + heth->MACWakeUpEvent = (uint32_t)(0x0U); + } + + + /* check ETH WAKEUP exti flag */ + if (__HAL_ETH_WAKEUP_EXTI_GET_FLAG(ETH_WAKEUP_EXTI_LINE) != (uint32_t)RESET) + { + /* Clear ETH WAKEUP Exti pending bit */ + __HAL_ETH_WAKEUP_EXTI_CLEAR_FLAG(ETH_WAKEUP_EXTI_LINE); +#if (USE_HAL_ETH_REGISTER_CALLBACKS == 1) + /* Call registered WakeUp callback*/ + heth->WakeUpCallback(heth); +#else + /* ETH WAKEUP callback */ + HAL_ETH_WakeUpCallback(heth); +#endif /* USE_HAL_ETH_REGISTER_CALLBACKS */ + } +} + +/** + * @brief Tx Transfer completed callbacks. + * @param heth: pointer to a ETH_HandleTypeDef structure that contains + * the configuration information for ETHERNET module + * @retval None + */ +__weak void HAL_ETH_TxCpltCallback(ETH_HandleTypeDef *heth) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(heth); + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_ETH_TxCpltCallback could be implemented in the user file + */ +} + +/** + * @brief Rx Transfer completed callbacks. + * @param heth: pointer to a ETH_HandleTypeDef structure that contains + * the configuration information for ETHERNET module + * @retval None + */ +__weak void HAL_ETH_RxCpltCallback(ETH_HandleTypeDef *heth) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(heth); + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_ETH_RxCpltCallback could be implemented in the user file + */ +} + +/** + * @brief Ethernet transfer error callbacks + * @param heth: pointer to a ETH_HandleTypeDef structure that contains + * the configuration information for ETHERNET module + * @retval None + */ +__weak void HAL_ETH_ErrorCallback(ETH_HandleTypeDef *heth) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(heth); + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_ETH_ErrorCallback could be implemented in the user file + */ +} + +/** + * @brief Ethernet Power Management module IT callback + * @param heth: pointer to a ETH_HandleTypeDef structure that contains + * the configuration information for ETHERNET module + * @retval None + */ +__weak void HAL_ETH_PMTCallback(ETH_HandleTypeDef *heth) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(heth); + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_ETH_PMTCallback could be implemented in the user file + */ +} + + +/** + * @brief ETH WAKEUP interrupt callback + * @param heth: pointer to a ETH_HandleTypeDef structure that contains + * the configuration information for ETHERNET module + * @retval None + */ +__weak void HAL_ETH_WakeUpCallback(ETH_HandleTypeDef *heth) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(heth); + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_ETH_WakeUpCallback could be implemented in the user file + */ +} + +/** + * @brief Read a PHY register + * @param heth: pointer to a ETH_HandleTypeDef structure that contains + * the configuration information for ETHERNET module + * @param PHYAddr: PHY port address, must be a value from 0 to 31 + * @param PHYReg: PHY register address, must be a value from 0 to 31 + * @param pRegValue: parameter to hold read value + * @retval HAL status + */ +HAL_StatusTypeDef HAL_ETH_ReadPHYRegister(ETH_HandleTypeDef *heth, uint32_t PHYAddr, uint32_t PHYReg, + uint32_t *pRegValue) +{ + uint32_t tmpreg1; + uint32_t tickstart; + + /* Get the ETHERNET MACMIIAR value */ + tmpreg1 = heth->Instance->MACMIIAR; + + /* Keep only the CSR Clock Range CR[2:0] bits value */ + tmpreg1 &= ~ETH_MACMIIAR_CR_MASK; + + /* Prepare the MII address register value */ + tmpreg1 |= ((PHYAddr << 11U) & ETH_MACMIIAR_PA); /* Set the PHY device address */ + tmpreg1 |= (((uint32_t)PHYReg << 6U) & ETH_MACMIIAR_MR); /* Set the PHY register address */ + tmpreg1 &= ~ETH_MACMIIAR_MW; /* Set the read mode */ + tmpreg1 |= ETH_MACMIIAR_MB; /* Set the MII Busy bit */ + + /* Write the result value into the MII Address register */ + heth->Instance->MACMIIAR = tmpreg1; + + + tickstart = HAL_GetTick(); + + /* Check for the Busy flag */ + while ((tmpreg1 & ETH_MACMIIAR_MB) == ETH_MACMIIAR_MB) + { + /* Check for the Timeout */ + if ((HAL_GetTick() - tickstart) > PHY_READ_TO) + { + return HAL_ERROR; + } + + tmpreg1 = heth->Instance->MACMIIAR; + } + + /* Get MACMIIDR value */ + *pRegValue = (uint16_t)(heth->Instance->MACMIIDR); + + return HAL_OK; +} + + +/** + * @brief Writes to a PHY register. + * @param heth: pointer to a ETH_HandleTypeDef structure that contains + * the configuration information for ETHERNET module + * @param PHYAddr: PHY port address, must be a value from 0 to 31 + * @param PHYReg: PHY register address, must be a value from 0 to 31 + * @param RegValue: the value to write + * @retval HAL status + */ +HAL_StatusTypeDef HAL_ETH_WritePHYRegister(ETH_HandleTypeDef *heth, uint32_t PHYAddr, uint32_t PHYReg, + uint32_t RegValue) +{ + uint32_t tmpreg1; + uint32_t tickstart; + + /* Get the ETHERNET MACMIIAR value */ + tmpreg1 = heth->Instance->MACMIIAR; + + /* Keep only the CSR Clock Range CR[2:0] bits value */ + tmpreg1 &= ~ETH_MACMIIAR_CR_MASK; + + /* Prepare the MII register address value */ + tmpreg1 |= ((PHYAddr << 11U) & ETH_MACMIIAR_PA); /* Set the PHY device address */ + tmpreg1 |= (((uint32_t)PHYReg << 6U) & ETH_MACMIIAR_MR); /* Set the PHY register address */ + tmpreg1 |= ETH_MACMIIAR_MW; /* Set the write mode */ + tmpreg1 |= ETH_MACMIIAR_MB; /* Set the MII Busy bit */ + + /* Give the value to the MII data register */ + heth->Instance->MACMIIDR = (uint16_t)RegValue; + + /* Write the result value into the MII Address register */ + heth->Instance->MACMIIAR = tmpreg1; + + /* Get tick */ + tickstart = HAL_GetTick(); + + /* Check for the Busy flag */ + while ((tmpreg1 & ETH_MACMIIAR_MB) == ETH_MACMIIAR_MB) + { + /* Check for the Timeout */ + if ((HAL_GetTick() - tickstart) > PHY_WRITE_TO) + { + return HAL_ERROR; + } + + tmpreg1 = heth->Instance->MACMIIAR; + } + + return HAL_OK; +} + +/** + * @} + */ + +/** @defgroup ETH_Exported_Functions_Group3 Peripheral Control functions + * @brief ETH control functions + * +@verbatim + ============================================================================== + ##### Peripheral Control functions ##### + ============================================================================== + [..] + This subsection provides a set of functions allowing to control the ETH + peripheral. + +@endverbatim + * @{ + */ +/** + * @brief Get the configuration of the MAC and MTL subsystems. + * @param heth: pointer to a ETH_HandleTypeDef structure that contains + * the configuration information for ETHERNET module + * @param macconf: pointer to a ETH_MACConfigTypeDef structure that will hold + * the configuration of the MAC. + * @retval HAL Status + */ +HAL_StatusTypeDef HAL_ETH_GetMACConfig(ETH_HandleTypeDef *heth, ETH_MACConfigTypeDef *macconf) +{ + if (macconf == NULL) + { + return HAL_ERROR; + } + + /* Get MAC parameters */ + macconf->DeferralCheck = ((READ_BIT(heth->Instance->MACCR, ETH_MACCR_DC) >> 4) > 0U) ? ENABLE : DISABLE; + macconf->BackOffLimit = READ_BIT(heth->Instance->MACCR, ETH_MACCR_BL); + macconf->RetryTransmission = ((READ_BIT(heth->Instance->MACCR, ETH_MACCR_RD) >> 9) == 0U) ? ENABLE : DISABLE; + macconf->CarrierSenseDuringTransmit = ((READ_BIT(heth->Instance->MACCR, ETH_MACCR_CSD) >> 16) > 0U) + ? ENABLE : DISABLE; + macconf->ReceiveOwn = ((READ_BIT(heth->Instance->MACCR, ETH_MACCR_ROD) >> 13) == 0U) ? ENABLE : DISABLE; + macconf->LoopbackMode = ((READ_BIT(heth->Instance->MACCR, ETH_MACCR_LM) >> 12) > 0U) ? ENABLE : DISABLE; + macconf->DuplexMode = READ_BIT(heth->Instance->MACCR, ETH_MACCR_DM); + macconf->Speed = READ_BIT(heth->Instance->MACCR, ETH_MACCR_FES); + macconf->Jabber = ((READ_BIT(heth->Instance->MACCR, ETH_MACCR_JD) >> 22) == 0U) ? ENABLE : DISABLE; + macconf->Watchdog = ((READ_BIT(heth->Instance->MACCR, ETH_MACCR_WD) >> 23) == 0U) ? ENABLE : DISABLE; + macconf->AutomaticPadCRCStrip = ((READ_BIT(heth->Instance->MACCR, ETH_MACCR_APCS) >> 7) > 0U) ? ENABLE : DISABLE; + macconf->InterPacketGapVal = READ_BIT(heth->Instance->MACCR, ETH_MACCR_IFG); + macconf->ChecksumOffload = ((READ_BIT(heth->Instance->MACCR, ETH_MACCR_IPCO) >> 10U) > 0U) ? ENABLE : DISABLE; + + + macconf->TransmitFlowControl = ((READ_BIT(heth->Instance->MACFCR, ETH_MACFCR_TFCE) >> 1) > 0U) ? ENABLE : DISABLE; + macconf->ZeroQuantaPause = ((READ_BIT(heth->Instance->MACFCR, ETH_MACFCR_ZQPD) >> 7) == 0U) ? ENABLE : DISABLE; + macconf->PauseLowThreshold = READ_BIT(heth->Instance->MACFCR, ETH_MACFCR_PLT); + macconf->PauseTime = (READ_BIT(heth->Instance->MACFCR, ETH_MACFCR_PT) >> 16); + macconf->ReceiveFlowControl = ((READ_BIT(heth->Instance->MACFCR, ETH_MACFCR_RFCE) >> 2U) > 0U) ? ENABLE : DISABLE; + macconf->UnicastPausePacketDetect = ((READ_BIT(heth->Instance->MACFCR, ETH_MACFCR_UPFD) >> 3U) > 0U) + ? ENABLE : DISABLE; + + return HAL_OK; +} + +/** + * @brief Get the configuration of the DMA. + * @param heth: pointer to a ETH_HandleTypeDef structure that contains + * the configuration information for ETHERNET module + * @param dmaconf: pointer to a ETH_DMAConfigTypeDef structure that will hold + * the configuration of the ETH DMA. + * @retval HAL Status + */ +HAL_StatusTypeDef HAL_ETH_GetDMAConfig(ETH_HandleTypeDef *heth, ETH_DMAConfigTypeDef *dmaconf) +{ + if (dmaconf == NULL) + { + return HAL_ERROR; + } + + dmaconf->DMAArbitration = READ_BIT(heth->Instance->DMABMR, + (ETH_DMAARBITRATION_RXPRIORTX | ETH_DMAARBITRATION_ROUNDROBIN_RXTX_4_1)); + dmaconf->AddressAlignedBeats = ((READ_BIT(heth->Instance->DMABMR, ETH_DMABMR_AAB) >> 25U) > 0U) ? ENABLE : DISABLE; + dmaconf->BurstMode = READ_BIT(heth->Instance->DMABMR, ETH_DMABMR_FB | ETH_DMABMR_MB); + dmaconf->RxDMABurstLength = READ_BIT(heth->Instance->DMABMR, ETH_DMABMR_RDP); + dmaconf->TxDMABurstLength = READ_BIT(heth->Instance->DMABMR, ETH_DMABMR_PBL); + dmaconf->EnhancedDescriptorFormat = ((READ_BIT(heth->Instance->DMABMR, ETH_DMABMR_EDE) >> 7) > 0U) ? ENABLE : DISABLE; + dmaconf->DescriptorSkipLength = READ_BIT(heth->Instance->DMABMR, ETH_DMABMR_DSL) >> 2; + + dmaconf->DropTCPIPChecksumErrorFrame = ((READ_BIT(heth->Instance->DMAOMR, + ETH_DMAOMR_DTCEFD) >> 26) > 0U) ? DISABLE : ENABLE; + dmaconf->ReceiveStoreForward = ((READ_BIT(heth->Instance->DMAOMR, ETH_DMAOMR_RSF) >> 25) > 0U) ? ENABLE : DISABLE; + dmaconf->FlushRxPacket = ((READ_BIT(heth->Instance->DMAOMR, ETH_DMAOMR_FTF) >> 20) > 0U) ? DISABLE : ENABLE; + dmaconf->TransmitStoreForward = ((READ_BIT(heth->Instance->DMAOMR, ETH_DMAOMR_TSF) >> 21) > 0U) ? ENABLE : DISABLE; + dmaconf->TransmitThresholdControl = READ_BIT(heth->Instance->DMAOMR, ETH_DMAOMR_TTC); + dmaconf->ForwardErrorFrames = ((READ_BIT(heth->Instance->DMAOMR, ETH_DMAOMR_FEF) >> 7) > 0U) ? ENABLE : DISABLE; + dmaconf->ForwardUndersizedGoodFrames = ((READ_BIT(heth->Instance->DMAOMR, + ETH_DMAOMR_FUGF) >> 6) > 0U) ? ENABLE : DISABLE; + dmaconf->ReceiveThresholdControl = READ_BIT(heth->Instance->DMAOMR, ETH_DMAOMR_RTC); + dmaconf->SecondFrameOperate = ((READ_BIT(heth->Instance->DMAOMR, ETH_DMAOMR_OSF) >> 2) > 0U) ? ENABLE : DISABLE; + return HAL_OK; +} + +/** + * @brief Set the MAC configuration. + * @param heth: pointer to a ETH_HandleTypeDef structure that contains + * the configuration information for ETHERNET module + * @param macconf: pointer to a ETH_MACConfigTypeDef structure that contains + * the configuration of the MAC. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_ETH_SetMACConfig(ETH_HandleTypeDef *heth, ETH_MACConfigTypeDef *macconf) +{ + if (macconf == NULL) + { + return HAL_ERROR; + } + + if (heth->gState == HAL_ETH_STATE_READY) + { + ETH_SetMACConfig(heth, macconf); + + return HAL_OK; + } + else + { + return HAL_ERROR; + } +} + +/** + * @brief Set the ETH DMA configuration. + * @param heth: pointer to a ETH_HandleTypeDef structure that contains + * the configuration information for ETHERNET module + * @param dmaconf: pointer to a ETH_DMAConfigTypeDef structure that will hold + * the configuration of the ETH DMA. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_ETH_SetDMAConfig(ETH_HandleTypeDef *heth, ETH_DMAConfigTypeDef *dmaconf) +{ + if (dmaconf == NULL) + { + return HAL_ERROR; + } + + if (heth->gState == HAL_ETH_STATE_READY) + { + ETH_SetDMAConfig(heth, dmaconf); + + return HAL_OK; + } + else + { + return HAL_ERROR; + } +} + +/** + * @brief Configures the Clock range of ETH MDIO interface. + * @param heth: pointer to a ETH_HandleTypeDef structure that contains + * the configuration information for ETHERNET module + * @retval None + */ +void HAL_ETH_SetMDIOClockRange(ETH_HandleTypeDef *heth) +{ + uint32_t hclk; + uint32_t tmpreg; + + /* Get the ETHERNET MACMIIAR value */ + tmpreg = (heth->Instance)->MACMIIAR; + /* Clear CSR Clock Range CR[2:0] bits */ + tmpreg &= ETH_MACMIIAR_CR_MASK; + + /* Get hclk frequency value */ + hclk = HAL_RCC_GetHCLKFreq(); + + /* Set CR bits depending on hclk value */ + if ((hclk >= 20000000U) && (hclk < 35000000U)) + { + /* CSR Clock Range between 20-35 MHz */ + tmpreg |= (uint32_t)ETH_MACMIIAR_CR_Div16; + } + else if ((hclk >= 35000000U) && (hclk < 60000000U)) + { + /* CSR Clock Range between 35-60 MHz */ + tmpreg |= (uint32_t)ETH_MACMIIAR_CR_Div26; + } + else if ((hclk >= 60000000U) && (hclk < 100000000U)) + { + /* CSR Clock Range between 60-100 MHz */ + tmpreg |= (uint32_t)ETH_MACMIIAR_CR_Div42; + } + else if ((hclk >= 100000000U) && (hclk < 150000000U)) + { + /* CSR Clock Range between 100-150 MHz */ + tmpreg |= (uint32_t)ETH_MACMIIAR_CR_Div62; + } + else /* ((hclk >= 150000000)&&(hclk <= 183000000))*/ + { + /* CSR Clock Range between 150-183 MHz */ + tmpreg |= (uint32_t)ETH_MACMIIAR_CR_Div102; + } + + /* Write to ETHERNET MAC MIIAR: Configure the ETHERNET CSR Clock Range */ + (heth->Instance)->MACMIIAR = (uint32_t)tmpreg; +} + +/** + * @brief Set the ETH MAC (L2) Filters configuration. + * @param heth: pointer to a ETH_HandleTypeDef structure that contains + * the configuration information for ETHERNET module + * @param pFilterConfig: pointer to a ETH_MACFilterConfigTypeDef structure that contains + * the configuration of the ETH MAC filters. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_ETH_SetMACFilterConfig(ETH_HandleTypeDef *heth, ETH_MACFilterConfigTypeDef *pFilterConfig) +{ + uint32_t filterconfig; + uint32_t tmpreg1; + + if (pFilterConfig == NULL) + { + return HAL_ERROR; + } + + filterconfig = ((uint32_t)pFilterConfig->PromiscuousMode | + ((uint32_t)pFilterConfig->HashUnicast << 1) | + ((uint32_t)pFilterConfig->HashMulticast << 2) | + ((uint32_t)pFilterConfig->DestAddrInverseFiltering << 3) | + ((uint32_t)pFilterConfig->PassAllMulticast << 4) | + ((uint32_t)((pFilterConfig->BroadcastFilter == DISABLE) ? 1U : 0U) << 5) | + ((uint32_t)pFilterConfig->SrcAddrInverseFiltering << 8) | + ((uint32_t)pFilterConfig->SrcAddrFiltering << 9) | + ((uint32_t)pFilterConfig->HachOrPerfectFilter << 10) | + ((uint32_t)pFilterConfig->ReceiveAllMode << 31) | + pFilterConfig->ControlPacketsFilter); + + MODIFY_REG(heth->Instance->MACFFR, ETH_MACFFR_MASK, filterconfig); + + /* Wait until the write operation will be taken into account : + at least four TX_CLK/RX_CLK clock cycles */ + tmpreg1 = (heth->Instance)->MACFFR; + HAL_Delay(ETH_REG_WRITE_DELAY); + (heth->Instance)->MACFFR = tmpreg1; + + return HAL_OK; +} + +/** + * @brief Get the ETH MAC (L2) Filters configuration. + * @param heth: pointer to a ETH_HandleTypeDef structure that contains + * the configuration information for ETHERNET module + * @param pFilterConfig: pointer to a ETH_MACFilterConfigTypeDef structure that will hold + * the configuration of the ETH MAC filters. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_ETH_GetMACFilterConfig(ETH_HandleTypeDef *heth, ETH_MACFilterConfigTypeDef *pFilterConfig) +{ + if (pFilterConfig == NULL) + { + return HAL_ERROR; + } + + pFilterConfig->PromiscuousMode = ((READ_BIT(heth->Instance->MACFFR, ETH_MACFFR_PM)) > 0U) ? ENABLE : DISABLE; + pFilterConfig->HashUnicast = ((READ_BIT(heth->Instance->MACFFR, ETH_MACFFR_HU) >> 1) > 0U) ? ENABLE : DISABLE; + pFilterConfig->HashMulticast = ((READ_BIT(heth->Instance->MACFFR, ETH_MACFFR_HM) >> 2) > 0U) ? ENABLE : DISABLE; + pFilterConfig->DestAddrInverseFiltering = ((READ_BIT(heth->Instance->MACFFR, + ETH_MACFFR_DAIF) >> 3) > 0U) ? ENABLE : DISABLE; + pFilterConfig->PassAllMulticast = ((READ_BIT(heth->Instance->MACFFR, ETH_MACFFR_PAM) >> 4) > 0U) ? ENABLE : DISABLE; + pFilterConfig->BroadcastFilter = ((READ_BIT(heth->Instance->MACFFR, ETH_MACFFR_BFD) >> 5) == 0U) ? ENABLE : DISABLE; + pFilterConfig->ControlPacketsFilter = READ_BIT(heth->Instance->MACFFR, ETH_MACFFR_PCF); + pFilterConfig->SrcAddrInverseFiltering = ((READ_BIT(heth->Instance->MACFFR, + ETH_MACFFR_SAIF) >> 8) > 0U) ? ENABLE : DISABLE; + pFilterConfig->SrcAddrFiltering = ((READ_BIT(heth->Instance->MACFFR, ETH_MACFFR_SAF) >> 9) > 0U) ? ENABLE : DISABLE; + pFilterConfig->HachOrPerfectFilter = ((READ_BIT(heth->Instance->MACFFR, ETH_MACFFR_HPF) >> 10) > 0U) + ? ENABLE : DISABLE; + pFilterConfig->ReceiveAllMode = ((READ_BIT(heth->Instance->MACFFR, ETH_MACFFR_RA) >> 31) > 0U) ? ENABLE : DISABLE; + + return HAL_OK; +} + +/** + * @brief Set the source MAC Address to be matched. + * @param heth: pointer to a ETH_HandleTypeDef structure that contains + * the configuration information for ETHERNET module + * @param AddrNbr: The MAC address to configure + * This parameter must be a value of the following: + * ETH_MAC_ADDRESS1 + * ETH_MAC_ADDRESS2 + * ETH_MAC_ADDRESS3 + * @param pMACAddr: Pointer to MAC address buffer data (6 bytes) + * @retval HAL status + */ +HAL_StatusTypeDef HAL_ETH_SetSourceMACAddrMatch(ETH_HandleTypeDef *heth, uint32_t AddrNbr, uint8_t *pMACAddr) +{ + uint32_t macaddrlr; + uint32_t macaddrhr; + + if (pMACAddr == NULL) + { + return HAL_ERROR; + } + + /* Get mac addr high reg offset */ + macaddrhr = ((uint32_t) &(heth->Instance->MACA0HR) + AddrNbr); + /* Get mac addr low reg offset */ + macaddrlr = ((uint32_t) &(heth->Instance->MACA0LR) + AddrNbr); + + /* Set MAC addr bits 32 to 47 */ + (*(__IO uint32_t *)macaddrhr) = (((uint32_t)(pMACAddr[5]) << 8) | (uint32_t)pMACAddr[4]); + /* Set MAC addr bits 0 to 31 */ + (*(__IO uint32_t *)macaddrlr) = (((uint32_t)(pMACAddr[3]) << 24) | ((uint32_t)(pMACAddr[2]) << 16) | + ((uint32_t)(pMACAddr[1]) << 8) | (uint32_t)pMACAddr[0]); + + /* Enable address and set source address bit */ + (*(__IO uint32_t *)macaddrhr) |= (ETH_MACA1HR_AE | ETH_MACA1HR_SA); + + return HAL_OK; +} + +/** + * @brief Set the ETH Hash Table Value. + * @param heth: pointer to a ETH_HandleTypeDef structure that contains + * the configuration information for ETHERNET module + * @param pHashTable: pointer to a table of two 32 bit values, that contains + * the 64 bits of the hash table. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_ETH_SetHashTable(ETH_HandleTypeDef *heth, uint32_t *pHashTable) +{ + uint32_t tmpreg1; + if (pHashTable == NULL) + { + return HAL_ERROR; + } + + heth->Instance->MACHTHR = pHashTable[0]; + + /* Wait until the write operation will be taken into account : + at least four TX_CLK/RX_CLK clock cycles */ + tmpreg1 = (heth->Instance)->MACHTHR; + HAL_Delay(ETH_REG_WRITE_DELAY); + (heth->Instance)->MACHTHR = tmpreg1; + + heth->Instance->MACHTLR = pHashTable[1]; + + /* Wait until the write operation will be taken into account : + at least four TX_CLK/RX_CLK clock cycles */ + tmpreg1 = (heth->Instance)->MACHTLR; + HAL_Delay(ETH_REG_WRITE_DELAY); + (heth->Instance)->MACHTLR = tmpreg1; + + return HAL_OK; +} + +/** + * @brief Set the VLAN Identifier for Rx packets + * @param heth: pointer to a ETH_HandleTypeDef structure that contains + * the configuration information for ETHERNET module + * @param ComparisonBits: 12 or 16 bit comparison mode + must be a value of @ref ETH_VLAN_Tag_Comparison + * @param VLANIdentifier: VLAN Identifier value + * @retval None + */ +void HAL_ETH_SetRxVLANIdentifier(ETH_HandleTypeDef *heth, uint32_t ComparisonBits, uint32_t VLANIdentifier) +{ + uint32_t tmpreg1; + MODIFY_REG(heth->Instance->MACVLANTR, ETH_MACVLANTR_VLANTI, VLANIdentifier); + if (ComparisonBits == ETH_VLANTAGCOMPARISON_16BIT) + { + CLEAR_BIT(heth->Instance->MACVLANTR, ETH_MACVLANTR_VLANTC); + } + else + { + SET_BIT(heth->Instance->MACVLANTR, ETH_MACVLANTR_VLANTC); + } + + /* Wait until the write operation will be taken into account : + at least four TX_CLK/RX_CLK clock cycles */ + tmpreg1 = (heth->Instance)->MACVLANTR; + HAL_Delay(ETH_REG_WRITE_DELAY); + (heth->Instance)->MACVLANTR = tmpreg1; +} + +/** + * @brief Enters the Power down mode. + * @param heth: pointer to a ETH_HandleTypeDef structure that contains + * the configuration information for ETHERNET module + * @param pPowerDownConfig: a pointer to ETH_PowerDownConfigTypeDef structure + * that contains the Power Down configuration + * @retval None. + */ +void HAL_ETH_EnterPowerDownMode(ETH_HandleTypeDef *heth, ETH_PowerDownConfigTypeDef *pPowerDownConfig) +{ + uint32_t powerdownconfig; + + powerdownconfig = (((uint32_t)pPowerDownConfig->MagicPacket << ETH_MACPMTCSR_MPE_Pos) | + ((uint32_t)pPowerDownConfig->WakeUpPacket << ETH_MACPMTCSR_WFE_Pos) | + ((uint32_t)pPowerDownConfig->GlobalUnicast << ETH_MACPMTCSR_GU_Pos) | + ETH_MACPMTCSR_PD); + + MODIFY_REG(heth->Instance->MACPMTCSR, ETH_MACPMTCSR_MASK, powerdownconfig); +} + +/** + * @brief Exits from the Power down mode. + * @param heth: pointer to a ETH_HandleTypeDef structure that contains + * the configuration information for ETHERNET module + * @retval None. + */ +void HAL_ETH_ExitPowerDownMode(ETH_HandleTypeDef *heth) +{ + uint32_t tmpreg1; + + /* clear wake up sources */ + CLEAR_BIT(heth->Instance->MACPMTCSR, ETH_MACPMTCSR_WFE | ETH_MACPMTCSR_MPE | ETH_MACPMTCSR_GU); + + /* Wait until the write operation will be taken into account : + at least four TX_CLK/RX_CLK clock cycles */ + tmpreg1 = (heth->Instance)->MACPMTCSR; + HAL_Delay(ETH_REG_WRITE_DELAY); + (heth->Instance)->MACPMTCSR = tmpreg1; + + if (READ_BIT(heth->Instance->MACPMTCSR, ETH_MACPMTCSR_PD) != 0U) + { + /* Exit power down mode */ + CLEAR_BIT(heth->Instance->MACPMTCSR, ETH_MACPMTCSR_PD); + + /* Wait until the write operation will be taken into account : + at least four TX_CLK/RX_CLK clock cycles */ + tmpreg1 = (heth->Instance)->MACPMTCSR; + HAL_Delay(ETH_REG_WRITE_DELAY); + (heth->Instance)->MACPMTCSR = tmpreg1; + } + + /* Disable PMT interrupt */ + SET_BIT(heth->Instance->MACIMR, ETH_MACIMR_PMTIM); +} + +/** + * @brief Set the WakeUp filter. + * @param heth: pointer to a ETH_HandleTypeDef structure that contains + * the configuration information for ETHERNET module + * @param pFilter: pointer to filter registers values + * @param Count: number of filter registers, must be from 1 to 8. + * @retval None. + */ +HAL_StatusTypeDef HAL_ETH_SetWakeUpFilter(ETH_HandleTypeDef *heth, uint32_t *pFilter, uint32_t Count) +{ + uint32_t regindex; + + if (pFilter == NULL) + { + return HAL_ERROR; + } + + /* Reset Filter Pointer */ + SET_BIT(heth->Instance->MACPMTCSR, ETH_MACPMTCSR_WFFRPR); + + /* Wake up packet filter config */ + for (regindex = 0; regindex < Count; regindex++) + { + /* Write filter regs */ + WRITE_REG(heth->Instance->MACRWUFFR, pFilter[regindex]); + } + + return HAL_OK; +} + +/** + * @} + */ + +/** @defgroup ETH_Exported_Functions_Group4 Peripheral State and Errors functions + * @brief ETH State and Errors functions + * +@verbatim + ============================================================================== + ##### Peripheral State and Errors functions ##### + ============================================================================== + [..] + This subsection provides a set of functions allowing to return the State of + ETH communication process, return Peripheral Errors occurred during communication + process + + +@endverbatim + * @{ + */ + +/** + * @brief Returns the ETH state. + * @param heth: pointer to a ETH_HandleTypeDef structure that contains + * the configuration information for ETHERNET module + * @retval HAL state + */ +HAL_ETH_StateTypeDef HAL_ETH_GetState(ETH_HandleTypeDef *heth) +{ + return heth->gState; +} + +/** + * @brief Returns the ETH error code + * @param heth: pointer to a ETH_HandleTypeDef structure that contains + * the configuration information for ETHERNET module + * @retval ETH Error Code + */ +uint32_t HAL_ETH_GetError(ETH_HandleTypeDef *heth) +{ + return heth->ErrorCode; +} + +/** + * @brief Returns the ETH DMA error code + * @param heth: pointer to a ETH_HandleTypeDef structure that contains + * the configuration information for ETHERNET module + * @retval ETH DMA Error Code + */ +uint32_t HAL_ETH_GetDMAError(ETH_HandleTypeDef *heth) +{ + return heth->DMAErrorCode; +} + +/** + * @brief Returns the ETH MAC error code + * @param heth: pointer to a ETH_HandleTypeDef structure that contains + * the configuration information for ETHERNET module + * @retval ETH MAC Error Code + */ +uint32_t HAL_ETH_GetMACError(ETH_HandleTypeDef *heth) +{ + return heth->MACErrorCode; +} + +/** + * @brief Returns the ETH MAC WakeUp event source + * @param heth: pointer to a ETH_HandleTypeDef structure that contains + * the configuration information for ETHERNET module + * @retval ETH MAC WakeUp event source + */ +uint32_t HAL_ETH_GetMACWakeUpSource(ETH_HandleTypeDef *heth) +{ + return heth->MACWakeUpEvent; +} + +/** + * @} + */ + +/** + * @} + */ + +/** @addtogroup ETH_Private_Functions ETH Private Functions + * @{ + */ + +/** + * @brief Clears the ETHERNET transmit FIFO. + * @param heth pointer to a ETH_HandleTypeDef structure that contains + * the configuration information for ETHERNET module + * @retval None + */ +static void ETH_FlushTransmitFIFO(ETH_HandleTypeDef *heth) +{ + __IO uint32_t tmpreg = 0; + + /* Set the Flush Transmit FIFO bit */ + (heth->Instance)->DMAOMR |= ETH_DMAOMR_FTF; + + /* Wait until the write operation will be taken into account: + at least four TX_CLK/RX_CLK clock cycles */ + tmpreg = (heth->Instance)->DMAOMR; + HAL_Delay(ETH_REG_WRITE_DELAY); + (heth->Instance)->DMAOMR = tmpreg; +} + +static void ETH_SetMACConfig(ETH_HandleTypeDef *heth, ETH_MACConfigTypeDef *macconf) +{ + uint32_t tmpreg1; + + /*------------------------ ETHERNET MACCR Configuration --------------------*/ + /* Get the ETHERNET MACCR value */ + tmpreg1 = (heth->Instance)->MACCR; + /* Clear WD, PCE, PS, TE and RE bits */ + tmpreg1 &= ETH_MACCR_CLEAR_MASK; + + tmpreg1 |= (uint32_t)(((uint32_t)((macconf->Watchdog == DISABLE) ? 1U : 0U) << 23U) | + ((uint32_t)((macconf->Jabber == DISABLE) ? 1U : 0U) << 22U) | + (uint32_t)macconf->InterPacketGapVal | + ((uint32_t)macconf->CarrierSenseDuringTransmit << 16U) | + macconf->Speed | + ((uint32_t)((macconf->ReceiveOwn == DISABLE) ? 1U : 0U) << 13U) | + ((uint32_t)macconf->LoopbackMode << 12U) | + macconf->DuplexMode | + ((uint32_t)macconf->ChecksumOffload << 10U) | + ((uint32_t)((macconf->RetryTransmission == DISABLE) ? 1U : 0U) << 9U) | + ((uint32_t)macconf->AutomaticPadCRCStrip << 7U) | + macconf->BackOffLimit | + ((uint32_t)macconf->DeferralCheck << 4U)); + + /* Write to ETHERNET MACCR */ + (heth->Instance)->MACCR = (uint32_t)tmpreg1; + + /* Wait until the write operation will be taken into account : + at least four TX_CLK/RX_CLK clock cycles */ + tmpreg1 = (heth->Instance)->MACCR; + HAL_Delay(ETH_REG_WRITE_DELAY); + (heth->Instance)->MACCR = tmpreg1; + + /*----------------------- ETHERNET MACFCR Configuration --------------------*/ + + /* Get the ETHERNET MACFCR value */ + tmpreg1 = (heth->Instance)->MACFCR; + /* Clear xx bits */ + tmpreg1 &= ETH_MACFCR_CLEAR_MASK; + + tmpreg1 |= (uint32_t)((macconf->PauseTime << 16U) | + ((uint32_t)((macconf->ZeroQuantaPause == DISABLE) ? 1U : 0U) << 7U) | + macconf->PauseLowThreshold | + ((uint32_t)((macconf->UnicastPausePacketDetect == ENABLE) ? 1U : 0U) << 3U) | + ((uint32_t)((macconf->ReceiveFlowControl == ENABLE) ? 1U : 0U) << 2U) | + ((uint32_t)((macconf->TransmitFlowControl == ENABLE) ? 1U : 0U) << 1U)); + + /* Write to ETHERNET MACFCR */ + (heth->Instance)->MACFCR = (uint32_t)tmpreg1; + + /* Wait until the write operation will be taken into account : + at least four TX_CLK/RX_CLK clock cycles */ + tmpreg1 = (heth->Instance)->MACFCR; + HAL_Delay(ETH_REG_WRITE_DELAY); + (heth->Instance)->MACFCR = tmpreg1; +} + +static void ETH_SetDMAConfig(ETH_HandleTypeDef *heth, ETH_DMAConfigTypeDef *dmaconf) +{ + uint32_t tmpreg1; + + /*----------------------- ETHERNET DMAOMR Configuration --------------------*/ + /* Get the ETHERNET DMAOMR value */ + tmpreg1 = (heth->Instance)->DMAOMR; + /* Clear xx bits */ + tmpreg1 &= ETH_DMAOMR_CLEAR_MASK; + + tmpreg1 |= (uint32_t)(((uint32_t)((dmaconf->DropTCPIPChecksumErrorFrame == DISABLE) ? 1U : 0U) << 26U) | + ((uint32_t)dmaconf->ReceiveStoreForward << 25U) | + ((uint32_t)((dmaconf->FlushRxPacket == DISABLE) ? 1U : 0U) << 20U) | + ((uint32_t)dmaconf->TransmitStoreForward << 21U) | + dmaconf->TransmitThresholdControl | + ((uint32_t)dmaconf->ForwardErrorFrames << 7U) | + ((uint32_t)dmaconf->ForwardUndersizedGoodFrames << 6U) | + dmaconf->ReceiveThresholdControl | + ((uint32_t)dmaconf->SecondFrameOperate << 2U)); + + /* Write to ETHERNET DMAOMR */ + (heth->Instance)->DMAOMR = (uint32_t)tmpreg1; + + /* Wait until the write operation will be taken into account: + at least four TX_CLK/RX_CLK clock cycles */ + tmpreg1 = (heth->Instance)->DMAOMR; + HAL_Delay(ETH_REG_WRITE_DELAY); + (heth->Instance)->DMAOMR = tmpreg1; + + /*----------------------- ETHERNET DMABMR Configuration --------------------*/ + (heth->Instance)->DMABMR = (uint32_t)(((uint32_t)dmaconf->AddressAlignedBeats << 25U) | + dmaconf->BurstMode | + dmaconf->RxDMABurstLength | /* !! if 4xPBL is selected for Tx or + Rx it is applied for the other */ + dmaconf->TxDMABurstLength | + ((uint32_t)dmaconf->EnhancedDescriptorFormat << 7U) | + (dmaconf->DescriptorSkipLength << 2U) | + dmaconf->DMAArbitration | + ETH_DMABMR_USP); /* Enable use of separate PBL for Rx and Tx */ + + /* Wait until the write operation will be taken into account: + at least four TX_CLK/RX_CLK clock cycles */ + tmpreg1 = (heth->Instance)->DMABMR; + HAL_Delay(ETH_REG_WRITE_DELAY); + (heth->Instance)->DMABMR = tmpreg1; +} + +/** + * @brief Configures Ethernet MAC and DMA with default parameters. + * called by HAL_ETH_Init() API. + * @param heth: pointer to a ETH_HandleTypeDef structure that contains + * the configuration information for ETHERNET module + * @retval HAL status + */ +static void ETH_MACDMAConfig(ETH_HandleTypeDef *heth) +{ + ETH_MACConfigTypeDef macDefaultConf; + ETH_DMAConfigTypeDef dmaDefaultConf; + + /*--------------- ETHERNET MAC registers default Configuration --------------*/ + macDefaultConf.Watchdog = ENABLE; + macDefaultConf.Jabber = ENABLE; + macDefaultConf.InterPacketGapVal = ETH_INTERFRAMEGAP_96BIT; + macDefaultConf.CarrierSenseDuringTransmit = DISABLE; + macDefaultConf.ReceiveOwn = ENABLE; + macDefaultConf.LoopbackMode = DISABLE; + macDefaultConf.ChecksumOffload = ENABLE; + macDefaultConf.RetryTransmission = DISABLE; + macDefaultConf.AutomaticPadCRCStrip = DISABLE; + macDefaultConf.BackOffLimit = ETH_BACKOFFLIMIT_10; + macDefaultConf.DeferralCheck = DISABLE; + macDefaultConf.PauseTime = 0x0U; + macDefaultConf.ZeroQuantaPause = DISABLE; + macDefaultConf.PauseLowThreshold = ETH_PAUSELOWTHRESHOLD_MINUS4; + macDefaultConf.ReceiveFlowControl = DISABLE; + macDefaultConf.TransmitFlowControl = DISABLE; + macDefaultConf.Speed = ETH_SPEED_100M; + macDefaultConf.DuplexMode = ETH_FULLDUPLEX_MODE; + macDefaultConf.UnicastPausePacketDetect = DISABLE; + + /* MAC default configuration */ + ETH_SetMACConfig(heth, &macDefaultConf); + + /*--------------- ETHERNET DMA registers default Configuration --------------*/ + dmaDefaultConf.DropTCPIPChecksumErrorFrame = ENABLE; + dmaDefaultConf.ReceiveStoreForward = ENABLE; + dmaDefaultConf.FlushRxPacket = ENABLE; + dmaDefaultConf.TransmitStoreForward = ENABLE; + dmaDefaultConf.TransmitThresholdControl = ETH_TRANSMITTHRESHOLDCONTROL_64BYTES; + dmaDefaultConf.ForwardErrorFrames = DISABLE; + dmaDefaultConf.ForwardUndersizedGoodFrames = DISABLE; + dmaDefaultConf.ReceiveThresholdControl = ETH_RECEIVEDTHRESHOLDCONTROL_64BYTES; + dmaDefaultConf.SecondFrameOperate = ENABLE; + dmaDefaultConf.AddressAlignedBeats = ENABLE; + dmaDefaultConf.BurstMode = ETH_BURSTLENGTH_FIXED; + dmaDefaultConf.RxDMABurstLength = ETH_RXDMABURSTLENGTH_32BEAT; + dmaDefaultConf.TxDMABurstLength = ETH_TXDMABURSTLENGTH_32BEAT; + dmaDefaultConf.EnhancedDescriptorFormat = ENABLE; + dmaDefaultConf.DescriptorSkipLength = 0x0U; + dmaDefaultConf.DMAArbitration = ETH_DMAARBITRATION_ROUNDROBIN_RXTX_1_1; + + /* DMA default configuration */ + ETH_SetDMAConfig(heth, &dmaDefaultConf); +} + +/** + * @brief Configures the selected MAC address. + * @param heth pointer to a ETH_HandleTypeDef structure that contains + * the configuration information for ETHERNET module + * @param MacAddr The MAC address to configure + * This parameter can be one of the following values: + * @arg ETH_MAC_Address0: MAC Address0 + * @arg ETH_MAC_Address1: MAC Address1 + * @arg ETH_MAC_Address2: MAC Address2 + * @arg ETH_MAC_Address3: MAC Address3 + * @param Addr Pointer to MAC address buffer data (6 bytes) + * @retval HAL status + */ +static void ETH_MACAddressConfig(ETH_HandleTypeDef *heth, uint32_t MacAddr, uint8_t *Addr) +{ + uint32_t tmpreg1; + + /* Prevent unused argument(s) compilation warning */ + UNUSED(heth); + + /* Calculate the selected MAC address high register */ + tmpreg1 = ((uint32_t)Addr[5U] << 8U) | (uint32_t)Addr[4U]; + /* Load the selected MAC address high register */ + (*(__IO uint32_t *)((uint32_t)(ETH_MAC_ADDR_HBASE + MacAddr))) = tmpreg1; + /* Calculate the selected MAC address low register */ + tmpreg1 = ((uint32_t)Addr[3U] << 24U) | ((uint32_t)Addr[2U] << 16U) | ((uint32_t)Addr[1U] << 8U) | Addr[0U]; + + /* Load the selected MAC address low register */ + (*(__IO uint32_t *)((uint32_t)(ETH_MAC_ADDR_LBASE + MacAddr))) = tmpreg1; +} + +/** + * @brief Initializes the DMA Tx descriptors. + * called by HAL_ETH_Init() API. + * @param heth: pointer to a ETH_HandleTypeDef structure that contains + * the configuration information for ETHERNET module + * @retval None + */ +static void ETH_DMATxDescListInit(ETH_HandleTypeDef *heth) +{ + ETH_DMADescTypeDef *dmatxdesc; + uint32_t i; + + /* Fill each DMATxDesc descriptor with the right values */ + for (i = 0; i < (uint32_t)ETH_TX_DESC_CNT; i++) + { + dmatxdesc = heth->Init.TxDesc + i; + + WRITE_REG(dmatxdesc->DESC0, 0x0); + WRITE_REG(dmatxdesc->DESC1, 0x0); + WRITE_REG(dmatxdesc->DESC2, 0x0); + WRITE_REG(dmatxdesc->DESC3, 0x0); + + WRITE_REG(heth->TxDescList.TxDesc[i], (uint32_t)dmatxdesc); + + /* Set Second Address Chained bit */ + SET_BIT(dmatxdesc->DESC0, ETH_DMATXDESC_TCH); + + if (i < ((uint32_t)ETH_TX_DESC_CNT - 1U)) + { + WRITE_REG(dmatxdesc->DESC3, (uint32_t)(heth->Init.TxDesc + i + 1U)); + } + else + { + WRITE_REG(dmatxdesc->DESC3, (uint32_t)(heth->Init.TxDesc)); + } + + /* Set the DMA Tx descriptors checksum insertion */ + SET_BIT(dmatxdesc->DESC0, ETH_DMATXDESC_CHECKSUMTCPUDPICMPFULL); + } + + heth->TxDescList.CurTxDesc = 0; + + /* Set Transmit Descriptor List Address */ + WRITE_REG(heth->Instance->DMATDLAR, (uint32_t) heth->Init.TxDesc); +} + +/** + * @brief Initializes the DMA Rx descriptors in chain mode. + * called by HAL_ETH_Init() API. + * @param heth: pointer to a ETH_HandleTypeDef structure that contains + * the configuration information for ETHERNET module + * @retval None + */ +static void ETH_DMARxDescListInit(ETH_HandleTypeDef *heth) +{ + ETH_DMADescTypeDef *dmarxdesc; + uint32_t i; + + for (i = 0; i < (uint32_t)ETH_RX_DESC_CNT; i++) + { + dmarxdesc = heth->Init.RxDesc + i; + + WRITE_REG(dmarxdesc->DESC0, 0x0); + WRITE_REG(dmarxdesc->DESC1, 0x0); + WRITE_REG(dmarxdesc->DESC2, 0x0); + WRITE_REG(dmarxdesc->DESC3, 0x0); + WRITE_REG(dmarxdesc->BackupAddr0, 0x0); + WRITE_REG(dmarxdesc->BackupAddr1, 0x0); + + /* Set Own bit of the Rx descriptor Status */ + dmarxdesc->DESC0 = ETH_DMARXDESC_OWN; + + /* Set Buffer1 size and Second Address Chained bit */ + dmarxdesc->DESC1 = ETH_DMARXDESC_RCH | ETH_RX_BUF_SIZE; + + /* Enable Ethernet DMA Rx Descriptor interrupt */ + dmarxdesc->DESC1 &= ~ETH_DMARXDESC_DIC; + + /* Set Rx descritors addresses */ + WRITE_REG(heth->RxDescList.RxDesc[i], (uint32_t)dmarxdesc); + + if (i < ((uint32_t)ETH_RX_DESC_CNT - 1U)) + { + WRITE_REG(dmarxdesc->DESC3, (uint32_t)(heth->Init.RxDesc + i + 1U)); + } + else + { + WRITE_REG(dmarxdesc->DESC3, (uint32_t)(heth->Init.RxDesc)); + } + } + + WRITE_REG(heth->RxDescList.RxDescIdx, 0); + WRITE_REG(heth->RxDescList.RxDescCnt, 0); + WRITE_REG(heth->RxDescList.RxBuildDescIdx, 0); + WRITE_REG(heth->RxDescList.RxBuildDescCnt, 0); + WRITE_REG(heth->RxDescList.ItMode, 0); + + /* Set Receive Descriptor List Address */ + WRITE_REG(heth->Instance->DMARDLAR, (uint32_t) heth->Init.RxDesc); +} + +/** + * @brief Prepare Tx DMA descriptor before transmission. + * called by HAL_ETH_Transmit_IT and HAL_ETH_Transmit_IT() API. + * @param heth: pointer to a ETH_HandleTypeDef structure that contains + * the configuration information for ETHERNET module + * @param pTxConfig: Tx packet configuration + * @param ItMode: Enable or disable Tx EOT interrept + * @retval Status + */ +static uint32_t ETH_Prepare_Tx_Descriptors(ETH_HandleTypeDef *heth, ETH_TxPacketConfig *pTxConfig, uint32_t ItMode) +{ + ETH_TxDescListTypeDef *dmatxdesclist = &heth->TxDescList; + uint32_t descidx = dmatxdesclist->CurTxDesc; + uint32_t firstdescidx = dmatxdesclist->CurTxDesc; + uint32_t idx; + uint32_t descnbr = 0; + ETH_DMADescTypeDef *dmatxdesc = (ETH_DMADescTypeDef *)dmatxdesclist->TxDesc[descidx]; + + ETH_BufferTypeDef *txbuffer = pTxConfig->TxBuffer; + uint32_t bd_count = 0; + + /* Current Tx Descriptor Owned by DMA: cannot be used by the application */ + if ((READ_BIT(dmatxdesc->DESC0, ETH_DMATXDESC_OWN) == ETH_DMATXDESC_OWN) + || (dmatxdesclist->PacketAddress[descidx] != NULL)) + { + return HAL_ETH_ERROR_BUSY; + } + + + descnbr += 1U; + + /* Set header or buffer 1 address */ + WRITE_REG(dmatxdesc->DESC2, (uint32_t)txbuffer->buffer); + + /* Set header or buffer 1 Length */ + MODIFY_REG(dmatxdesc->DESC1, ETH_DMATXDESC_TBS1, txbuffer->len); + + if (READ_BIT(pTxConfig->Attributes, ETH_TX_PACKETS_FEATURES_CSUM) != 0U) + { + MODIFY_REG(dmatxdesc->DESC0, ETH_DMATXDESC_CIC, pTxConfig->ChecksumCtrl); + } + + if (READ_BIT(pTxConfig->Attributes, ETH_TX_PACKETS_FEATURES_CRCPAD) != 0U) + { + MODIFY_REG(dmatxdesc->DESC0, ETH_CRC_PAD_DISABLE, pTxConfig->CRCPadCtrl); + } + + + if (READ_BIT(pTxConfig->Attributes, ETH_TX_PACKETS_FEATURES_VLANTAG) != 0U) + { + /* Set Vlan Type */ + SET_BIT(dmatxdesc->DESC0, ETH_DMATXDESC_VF); + } + + /* Mark it as First Descriptor */ + SET_BIT(dmatxdesc->DESC0, ETH_DMATXDESC_FS); + + /* Ensure rest of descriptor is written to RAM before the OWN bit */ + __DMB(); + /* set OWN bit of FIRST descriptor */ + SET_BIT(dmatxdesc->DESC0, ETH_DMATXDESC_OWN); + + /* only if the packet is split into more than one descriptors > 1 */ + while (txbuffer->next != NULL) + { + /* Clear the LD bit of previous descriptor */ + CLEAR_BIT(dmatxdesc->DESC0, ETH_DMATXDESC_LS); + if (ItMode != ((uint32_t)RESET)) + { + /* Set Interrupt on completion bit */ + SET_BIT(dmatxdesc->DESC0, ETH_DMATXDESC_IC); + } + else + { + /* Clear Interrupt on completion bit */ + CLEAR_BIT(dmatxdesc->DESC0, ETH_DMATXDESC_IC); + } + /* Increment current tx descriptor index */ + INCR_TX_DESC_INDEX(descidx, 1U); + /* Get current descriptor address */ + dmatxdesc = (ETH_DMADescTypeDef *)dmatxdesclist->TxDesc[descidx]; + + /* Clear the FD bit of new Descriptor */ + CLEAR_BIT(dmatxdesc->DESC0, ETH_DMATXDESC_FS); + + /* Current Tx Descriptor Owned by DMA: cannot be used by the application */ + if ((READ_BIT(dmatxdesc->DESC0, ETH_DMATXDESC_OWN) == ETH_DMATXDESC_OWN) + || (dmatxdesclist->PacketAddress[descidx] != NULL)) + { + descidx = firstdescidx; + dmatxdesc = (ETH_DMADescTypeDef *)dmatxdesclist->TxDesc[descidx]; + + /* clear previous desc own bit */ + for (idx = 0; idx < descnbr; idx ++) + { + /* Ensure rest of descriptor is written to RAM before the OWN bit */ + __DMB(); + + CLEAR_BIT(dmatxdesc->DESC0, ETH_DMATXDESC_OWN); + + /* Increment current tx descriptor index */ + INCR_TX_DESC_INDEX(descidx, 1U); + /* Get current descriptor address */ + dmatxdesc = (ETH_DMADescTypeDef *)dmatxdesclist->TxDesc[descidx]; + } + + return HAL_ETH_ERROR_BUSY; + } + + descnbr += 1U; + + /* Get the next Tx buffer in the list */ + txbuffer = txbuffer->next; + + /* Set header or buffer 1 address */ + WRITE_REG(dmatxdesc->DESC2, (uint32_t)txbuffer->buffer); + + /* Set header or buffer 1 Length */ + MODIFY_REG(dmatxdesc->DESC1, ETH_DMATXDESC_TBS1, txbuffer->len); + + bd_count += 1U; + + /* Ensure rest of descriptor is written to RAM before the OWN bit */ + __DMB(); + /* Set Own bit */ + SET_BIT(dmatxdesc->DESC0, ETH_DMATXDESC_OWN); + } + + if (ItMode != ((uint32_t)RESET)) + { + /* Set Interrupt on completion bit */ + SET_BIT(dmatxdesc->DESC0, ETH_DMATXDESC_IC); + } + else + { + /* Clear Interrupt on completion bit */ + CLEAR_BIT(dmatxdesc->DESC0, ETH_DMATXDESC_IC); + } + + /* Mark it as LAST descriptor */ + SET_BIT(dmatxdesc->DESC0, ETH_DMATXDESC_LS); + /* Save the current packet address to expose it to the application */ + dmatxdesclist->PacketAddress[descidx] = dmatxdesclist->CurrentPacketAddress; + + dmatxdesclist->CurTxDesc = descidx; + + /* disable the interrupt */ + __disable_irq(); + + dmatxdesclist->BuffersInUse += bd_count + 1U; + + /* Enable interrupts back */ + __enable_irq(); + + + /* Return function status */ + return HAL_ETH_ERROR_NONE; +} + +#if (USE_HAL_ETH_REGISTER_CALLBACKS == 1) +static void ETH_InitCallbacksToDefault(ETH_HandleTypeDef *heth) +{ + /* Init the ETH Callback settings */ + heth->TxCpltCallback = HAL_ETH_TxCpltCallback; /* Legacy weak TxCpltCallback */ + heth->RxCpltCallback = HAL_ETH_RxCpltCallback; /* Legacy weak RxCpltCallback */ + heth->ErrorCallback = HAL_ETH_ErrorCallback; /* Legacy weak ErrorCallback */ + heth->PMTCallback = HAL_ETH_PMTCallback; /* Legacy weak PMTCallback */ + heth->WakeUpCallback = HAL_ETH_WakeUpCallback; /* Legacy weak WakeUpCallback */ + heth->rxLinkCallback = HAL_ETH_RxLinkCallback; /* Legacy weak RxLinkCallback */ + heth->txFreeCallback = HAL_ETH_TxFreeCallback; /* Legacy weak TxFreeCallback */ +#ifdef HAL_ETH_USE_PTP + heth->txPtpCallback = HAL_ETH_TxPtpCallback; /* Legacy weak TxPtpCallback */ +#endif /* HAL_ETH_USE_PTP */ + heth->rxAllocateCallback = HAL_ETH_RxAllocateCallback; /* Legacy weak RxAllocateCallback */ +} +#endif /* USE_HAL_ETH_REGISTER_CALLBACKS */ + +/** + * @} + */ + +/** + * @} + */ + +#endif /* ETH */ + +#endif /* HAL_ETH_MODULE_ENABLED */ + +/** + * @} + */ + diff --git a/STM32_Disco746G/LWIP/App/lwip.c b/STM32_Disco746G/LWIP/App/lwip.c new file mode 100644 index 0000000000000000000000000000000000000000..4fb164b60e2de9a2f708a0d7e15ba2aefc12a191 --- /dev/null +++ b/STM32_Disco746G/LWIP/App/lwip.c @@ -0,0 +1,205 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * File Name : LWIP.c + * Description : This file provides initialization code for LWIP + * middleWare. + ****************************************************************************** + * @attention + * + * Copyright (c) 2023 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Includes ------------------------------------------------------------------*/ +#include "lwip.h" +#include "lwip/init.h" +#include "lwip/netif.h" +#if defined ( __CC_ARM ) /* MDK ARM Compiler */ +#include "lwip/sio.h" +#endif /* MDK ARM Compiler */ +#include "ethernetif.h" +#include + +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ +/* Private function prototypes -----------------------------------------------*/ +static void ethernet_link_status_updated(struct netif *netif); +/* ETH Variables initialization ----------------------------------------------*/ +void Error_Handler(void); + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ + +/* Variables Initialization */ +struct netif gnetif; +ip4_addr_t ipaddr; +ip4_addr_t netmask; +ip4_addr_t gw; +/* USER CODE BEGIN OS_THREAD_ATTR_CMSIS_RTOS_V2 */ +#define INTERFACE_THREAD_STACK_SIZE ( 1024 ) +osThreadAttr_t attributes; +/* USER CODE END OS_THREAD_ATTR_CMSIS_RTOS_V2 */ + +/* USER CODE BEGIN 2 */ + +/* USER CODE END 2 */ + +/** + * LwIP initialization function + */ +void MX_LWIP_Init(void) +{ + /* Initilialize the LwIP stack with RTOS */ + tcpip_init( NULL, NULL ); + + /* IP addresses initialization with DHCP (IPv4) */ + ipaddr.addr = 0; + netmask.addr = 0; + gw.addr = 0; + + /* add the network interface (IPv4/IPv6) with RTOS */ + netif_add(&gnetif, &ipaddr, &netmask, &gw, NULL, ðernetif_init, &tcpip_input); + + /* Registers the default network interface */ + netif_set_default(&gnetif); + + if (netif_is_link_up(&gnetif)) + { + /* When the netif is fully configured this function must be called */ + netif_set_up(&gnetif); + } + else + { + /* When the netif link is down this function must be called */ + netif_set_down(&gnetif); + } + + /* Set the link callback function, this function is called on change of link status*/ + netif_set_link_callback(&gnetif, ethernet_link_status_updated); + + /* Create the Ethernet link handler thread */ +/* USER CODE BEGIN H7_OS_THREAD_NEW_CMSIS_RTOS_V2 */ + memset(&attributes, 0x0, sizeof(osThreadAttr_t)); + attributes.name = "EthLink"; + attributes.stack_size = INTERFACE_THREAD_STACK_SIZE; + attributes.priority = osPriorityBelowNormal; + osThreadNew(ethernet_link_thread, &gnetif, &attributes); +/* USER CODE END H7_OS_THREAD_NEW_CMSIS_RTOS_V2 */ + + /* Start DHCP negotiation for a network interface (IPv4) */ + dhcp_start(&gnetif); + +/* USER CODE BEGIN 3 */ + +/* USER CODE END 3 */ +} + +#ifdef USE_OBSOLETE_USER_CODE_SECTION_4 +/* Kept to help code migration. (See new 4_1, 4_2... sections) */ +/* Avoid to use this user section which will become obsolete. */ +/* USER CODE BEGIN 4 */ +/* USER CODE END 4 */ +#endif + +/** + * @brief Notify the User about the network interface config status + * @param netif: the network interface + * @retval None + */ +static void ethernet_link_status_updated(struct netif *netif) +{ + if (netif_is_up(netif)) + { +/* USER CODE BEGIN 5 */ +/* USER CODE END 5 */ + } + else /* netif is down */ + { +/* USER CODE BEGIN 6 */ +/* USER CODE END 6 */ + } +} + +#if defined ( __CC_ARM ) /* MDK ARM Compiler */ +/** + * Opens a serial device for communication. + * + * @param devnum device number + * @return handle to serial device if successful, NULL otherwise + */ +sio_fd_t sio_open(u8_t devnum) +{ + sio_fd_t sd; + +/* USER CODE BEGIN 7 */ + sd = 0; // dummy code +/* USER CODE END 7 */ + + return sd; +} + +/** + * Sends a single character to the serial device. + * + * @param c character to send + * @param fd serial device handle + * + * @note This function will block until the character can be sent. + */ +void sio_send(u8_t c, sio_fd_t fd) +{ +/* USER CODE BEGIN 8 */ +/* USER CODE END 8 */ +} + +/** + * Reads from the serial device. + * + * @param fd serial device handle + * @param data pointer to data buffer for receiving + * @param len maximum length (in bytes) of data to receive + * @return number of bytes actually received - may be 0 if aborted by sio_read_abort + * + * @note This function will block until data can be received. The blocking + * can be cancelled by calling sio_read_abort(). + */ +u32_t sio_read(sio_fd_t fd, u8_t *data, u32_t len) +{ + u32_t recved_bytes; + +/* USER CODE BEGIN 9 */ + recved_bytes = 0; // dummy code +/* USER CODE END 9 */ + return recved_bytes; +} + +/** + * Tries to read from the serial device. Same as sio_read but returns + * immediately if no data is available and never blocks. + * + * @param fd serial device handle + * @param data pointer to data buffer for receiving + * @param len maximum length (in bytes) of data to receive + * @return number of bytes actually received + */ +u32_t sio_tryread(sio_fd_t fd, u8_t *data, u32_t len) +{ + u32_t recved_bytes; + +/* USER CODE BEGIN 10 */ + recved_bytes = 0; // dummy code +/* USER CODE END 10 */ + return recved_bytes; +} +#endif /* MDK ARM Compiler */ + diff --git a/STM32_Disco746G/LWIP/App/lwip.h b/STM32_Disco746G/LWIP/App/lwip.h new file mode 100644 index 0000000000000000000000000000000000000000..a066f1fc17449dc211459e938b21c589628d6cf5 --- /dev/null +++ b/STM32_Disco746G/LWIP/App/lwip.h @@ -0,0 +1,76 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * File Name : LWIP.h + * Description : This file provides code for the configuration + * of the LWIP. + ****************************************************************************** + * @attention + * + * Copyright (c) 2023 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ************************************************************************* + + */ +/* USER CODE END Header */ +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __mx_lwip_H +#define __mx_lwip_H +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "lwip/opt.h" +#include "lwip/mem.h" +#include "lwip/memp.h" +#include "netif/etharp.h" +#include "lwip/dhcp.h" +#include "lwip/netif.h" +#include "lwip/timeouts.h" +#include "ethernetif.h" + +/* Includes for RTOS ---------------------------------------------------------*/ +#if WITH_RTOS +#include "lwip/tcpip.h" +#endif /* WITH_RTOS */ + +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ + +/* Global Variables ----------------------------------------------------------*/ +extern ETH_HandleTypeDef heth; + +/* LWIP init function */ +void MX_LWIP_Init(void); + +#if !WITH_RTOS +/* USER CODE BEGIN 1 */ +/* Function defined in lwip.c to: + * - Read a received packet from the Ethernet buffers + * - Send it to the lwIP stack for handling + * - Handle timeouts if NO_SYS_NO_TIMERS not set + */ +void MX_LWIP_Process(void); + +/* USER CODE END 1 */ +#endif /* WITH_RTOS */ + +#ifdef __cplusplus +} +#endif +#endif /*__ mx_lwip_H */ + +/** + * @} + */ + +/** + * @} + */ diff --git a/STM32_Disco746G/LWIP/Target/ethernetif.c b/STM32_Disco746G/LWIP/Target/ethernetif.c new file mode 100644 index 0000000000000000000000000000000000000000..34191fe82369e0414e86140c3eb48e0af858c9b8 --- /dev/null +++ b/STM32_Disco746G/LWIP/Target/ethernetif.c @@ -0,0 +1,898 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * File Name : ethernetif.c + * Description : This file provides code for the configuration + * of the ethernetif.c MiddleWare. + ****************************************************************************** + * @attention + * + * Copyright (c) 2023 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" +#include "lwip/opt.h" +#include "lwip/timeouts.h" +#include "netif/ethernet.h" +#include "netif/etharp.h" +#include "lwip/ethip6.h" +#include "ethernetif.h" +#include "lan8742.h" +#include +#include "cmsis_os.h" +#include "lwip/tcpip.h" + +/* Within 'USER CODE' section, code will be kept by default at each generation */ +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ + +/* Private define ------------------------------------------------------------*/ +/* The time to block waiting for input. */ +#define TIME_WAITING_FOR_INPUT ( portMAX_DELAY ) +/* USER CODE BEGIN OS_THREAD_STACK_SIZE_WITH_RTOS */ +/* Stack size of the interface thread */ +#define INTERFACE_THREAD_STACK_SIZE ( 350 ) +/* USER CODE END OS_THREAD_STACK_SIZE_WITH_RTOS */ +/* Network interface name */ +#define IFNAME0 's' +#define IFNAME1 't' + +/* ETH Setting */ +#define ETH_DMA_TRANSMIT_TIMEOUT ( 20U ) +#define ETH_TX_BUFFER_MAX ((ETH_TX_DESC_CNT) * 2U) + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ + +/* Private variables ---------------------------------------------------------*/ +/* +@Note: This interface is implemented to operate in zero-copy mode only: + - Rx buffers will be allocated from LwIP stack memory heap, + then passed to ETH HAL driver. + - Tx buffers will be allocated from LwIP stack memory heap, + then passed to ETH HAL driver. + +@Notes: + 1.a. ETH DMA Rx descriptors must be contiguous, the default count is 4, + to customize it please redefine ETH_RX_DESC_CNT in ETH GUI (Rx Descriptor Length) + so that updated value will be generated in stm32xxxx_hal_conf.h + 1.b. ETH DMA Tx descriptors must be contiguous, the default count is 4, + to customize it please redefine ETH_TX_DESC_CNT in ETH GUI (Tx Descriptor Length) + so that updated value will be generated in stm32xxxx_hal_conf.h + + 2.a. Rx Buffers number must be between ETH_RX_DESC_CNT and 2*ETH_RX_DESC_CNT + 2.b. Rx Buffers must have the same size: ETH_RX_BUF_SIZE, this value must + passed to ETH DMA in the init field (heth.Init.RxBuffLen) + 2.c The RX Ruffers addresses and sizes must be properly defined to be aligned + to L1-CACHE line size (32 bytes). +*/ + +/* Data Type Definitions */ +typedef enum +{ + RX_ALLOC_OK = 0x00, + RX_ALLOC_ERROR = 0x01 +} RxAllocStatusTypeDef; + +typedef struct +{ + struct pbuf_custom pbuf_custom; + uint8_t buff[(ETH_RX_BUF_SIZE + 31) & ~31] __ALIGNED(32); +} RxBuff_t; + +/* Memory Pool Declaration */ +#define ETH_RX_BUFFER_CNT 12U +LWIP_MEMPOOL_DECLARE(RX_POOL, ETH_RX_BUFFER_CNT, sizeof(RxBuff_t), "Zero-copy RX PBUF pool"); + +/* Variable Definitions */ +static uint8_t RxAllocStatus; + +#if defined ( __ICCARM__ ) /*!< IAR Compiler */ + +#pragma location=0x2004c000 +ETH_DMADescTypeDef DMARxDscrTab[ETH_RX_DESC_CNT]; /* Ethernet Rx DMA Descriptors */ +#pragma location=0x2004c0a0 +ETH_DMADescTypeDef DMATxDscrTab[ETH_TX_DESC_CNT]; /* Ethernet Tx DMA Descriptors */ + +#elif defined ( __CC_ARM ) /* MDK ARM Compiler */ + +__attribute__((at(0x2004c000))) ETH_DMADescTypeDef DMARxDscrTab[ETH_RX_DESC_CNT]; /* Ethernet Rx DMA Descriptors */ +__attribute__((at(0x2004c0a0))) ETH_DMADescTypeDef DMATxDscrTab[ETH_TX_DESC_CNT]; /* Ethernet Tx DMA Descriptors */ + +#elif defined ( __GNUC__ ) /* GNU Compiler */ + +ETH_DMADescTypeDef DMARxDscrTab[ETH_RX_DESC_CNT] __attribute__((section(".RxDecripSection"))); /* Ethernet Rx DMA Descriptors */ +ETH_DMADescTypeDef DMATxDscrTab[ETH_TX_DESC_CNT] __attribute__((section(".TxDecripSection"))); /* Ethernet Tx DMA Descriptors */ + +#endif + +/* USER CODE BEGIN 2 */ + +/* USER CODE END 2 */ + +osSemaphoreId RxPktSemaphore = NULL; /* Semaphore to signal incoming packets */ +osSemaphoreId TxPktSemaphore = NULL; /* Semaphore to signal transmit packet complete */ + +/* Global Ethernet handle */ +ETH_HandleTypeDef heth; +ETH_TxPacketConfig TxConfig; + +/* Private function prototypes -----------------------------------------------*/ +int32_t ETH_PHY_IO_Init(void); +int32_t ETH_PHY_IO_DeInit (void); +int32_t ETH_PHY_IO_ReadReg(uint32_t DevAddr, uint32_t RegAddr, uint32_t *pRegVal); +int32_t ETH_PHY_IO_WriteReg(uint32_t DevAddr, uint32_t RegAddr, uint32_t RegVal); +int32_t ETH_PHY_IO_GetTick(void); + +lan8742_Object_t LAN8742; +lan8742_IOCtx_t LAN8742_IOCtx = {ETH_PHY_IO_Init, + ETH_PHY_IO_DeInit, + ETH_PHY_IO_WriteReg, + ETH_PHY_IO_ReadReg, + ETH_PHY_IO_GetTick}; + +/* USER CODE BEGIN 3 */ + +/* USER CODE END 3 */ + +/* Private functions ---------------------------------------------------------*/ +void pbuf_free_custom(struct pbuf *p); + +/** + * @brief Ethernet Rx Transfer completed callback + * @param handlerEth: ETH handler + * @retval None + */ +void HAL_ETH_RxCpltCallback(ETH_HandleTypeDef *handlerEth) +{ + osSemaphoreRelease(RxPktSemaphore); +} +/** + * @brief Ethernet Tx Transfer completed callback + * @param handlerEth: ETH handler + * @retval None + */ +void HAL_ETH_TxCpltCallback(ETH_HandleTypeDef *handlerEth) +{ + osSemaphoreRelease(TxPktSemaphore); +} +/** + * @brief Ethernet DMA transfer error callback + * @param handlerEth: ETH handler + * @retval None + */ +void HAL_ETH_ErrorCallback(ETH_HandleTypeDef *handlerEth) +{ + if((HAL_ETH_GetDMAError(handlerEth) & ETH_DMASR_RBUS) == ETH_DMASR_RBUS) + { + osSemaphoreRelease(RxPktSemaphore); + } +} + +/* USER CODE BEGIN 4 */ + +/* USER CODE END 4 */ + +/******************************************************************************* + LL Driver Interface ( LwIP stack --> ETH) +*******************************************************************************/ +/** + * @brief In this function, the hardware should be initialized. + * Called from ethernetif_init(). + * + * @param netif the already initialized lwip network interface structure + * for this ethernetif + */ +static void low_level_init(struct netif *netif) +{ + HAL_StatusTypeDef hal_eth_init_status = HAL_OK; +/* USER CODE BEGIN OS_THREAD_ATTR_CMSIS_RTOS_V2 */ + osThreadAttr_t attributes; +/* USER CODE END OS_THREAD_ATTR_CMSIS_RTOS_V2 */ + uint32_t duplex, speed = 0; + int32_t PHYLinkState = 0; + ETH_MACConfigTypeDef MACConf = {0}; + /* Start ETH HAL Init */ + + uint8_t MACAddr[6] ; + heth.Instance = ETH; + MACAddr[0] = 0x00; + MACAddr[1] = 0x80; + MACAddr[2] = 0xE1; + MACAddr[3] = 0x00; + MACAddr[4] = 0x00; + MACAddr[5] = 0x00; + heth.Init.MACAddr = &MACAddr[0]; + heth.Init.MediaInterface = HAL_ETH_RMII_MODE; + heth.Init.TxDesc = DMATxDscrTab; + heth.Init.RxDesc = DMARxDscrTab; + heth.Init.RxBuffLen = 1536; + + /* USER CODE BEGIN MACADDRESS */ + + /* USER CODE END MACADDRESS */ + + hal_eth_init_status = HAL_ETH_Init(&heth); + + memset(&TxConfig, 0 , sizeof(ETH_TxPacketConfig)); + TxConfig.Attributes = ETH_TX_PACKETS_FEATURES_CSUM | ETH_TX_PACKETS_FEATURES_CRCPAD; + TxConfig.ChecksumCtrl = ETH_CHECKSUM_IPHDR_PAYLOAD_INSERT_PHDR_CALC; + TxConfig.CRCPadCtrl = ETH_CRC_PAD_INSERT; + + /* End ETH HAL Init */ + + /* Initialize the RX POOL */ + LWIP_MEMPOOL_INIT(RX_POOL); + +#if LWIP_ARP || LWIP_ETHERNET + + /* set MAC hardware address length */ + netif->hwaddr_len = ETH_HWADDR_LEN; + + /* set MAC hardware address */ + netif->hwaddr[0] = heth.Init.MACAddr[0]; + netif->hwaddr[1] = heth.Init.MACAddr[1]; + netif->hwaddr[2] = heth.Init.MACAddr[2]; + netif->hwaddr[3] = heth.Init.MACAddr[3]; + netif->hwaddr[4] = heth.Init.MACAddr[4]; + netif->hwaddr[5] = heth.Init.MACAddr[5]; + + /* maximum transfer unit */ + netif->mtu = ETH_MAX_PAYLOAD; + + /* Accept broadcast address and ARP traffic */ + /* don't set NETIF_FLAG_ETHARP if this device is not an ethernet one */ + #if LWIP_ARP + netif->flags |= NETIF_FLAG_BROADCAST | NETIF_FLAG_ETHARP; + #else + netif->flags |= NETIF_FLAG_BROADCAST; + #endif /* LWIP_ARP */ + + /* create a binary semaphore used for informing ethernetif of frame reception */ + RxPktSemaphore = osSemaphoreNew(1, 1, NULL); + + /* create a binary semaphore used for informing ethernetif of frame transmission */ + TxPktSemaphore = osSemaphoreNew(1, 1, NULL); + + /* create the task that handles the ETH_MAC */ +/* USER CODE BEGIN OS_THREAD_NEW_CMSIS_RTOS_V2 */ + memset(&attributes, 0x0, sizeof(osThreadAttr_t)); + attributes.name = "EthIf"; + attributes.stack_size = INTERFACE_THREAD_STACK_SIZE; + attributes.priority = osPriorityRealtime; + osThreadNew(ethernetif_input, netif, &attributes); +/* USER CODE END OS_THREAD_NEW_CMSIS_RTOS_V2 */ + +/* USER CODE BEGIN PHY_PRE_CONFIG */ + +/* USER CODE END PHY_PRE_CONFIG */ + /* Set PHY IO functions */ + LAN8742_RegisterBusIO(&LAN8742, &LAN8742_IOCtx); + + /* Initialize the LAN8742 ETH PHY */ + LAN8742_Init(&LAN8742); + + if (hal_eth_init_status == HAL_OK) + { + PHYLinkState = LAN8742_GetLinkState(&LAN8742); + + /* Get link state */ + if(PHYLinkState <= LAN8742_STATUS_LINK_DOWN) + { + netif_set_link_down(netif); + netif_set_down(netif); + } + else + { + switch (PHYLinkState) + { + case LAN8742_STATUS_100MBITS_FULLDUPLEX: + duplex = ETH_FULLDUPLEX_MODE; + speed = ETH_SPEED_100M; + break; + case LAN8742_STATUS_100MBITS_HALFDUPLEX: + duplex = ETH_HALFDUPLEX_MODE; + speed = ETH_SPEED_100M; + break; + case LAN8742_STATUS_10MBITS_FULLDUPLEX: + duplex = ETH_FULLDUPLEX_MODE; + speed = ETH_SPEED_10M; + break; + case LAN8742_STATUS_10MBITS_HALFDUPLEX: + duplex = ETH_HALFDUPLEX_MODE; + speed = ETH_SPEED_10M; + break; + default: + duplex = ETH_FULLDUPLEX_MODE; + speed = ETH_SPEED_100M; + break; + } + + /* Get MAC Config MAC */ + HAL_ETH_GetMACConfig(&heth, &MACConf); + MACConf.DuplexMode = duplex; + MACConf.Speed = speed; + HAL_ETH_SetMACConfig(&heth, &MACConf); + + HAL_ETH_Start_IT(&heth); + netif_set_up(netif); + netif_set_link_up(netif); + +/* USER CODE BEGIN PHY_POST_CONFIG */ + +/* USER CODE END PHY_POST_CONFIG */ + } + + } + else + { + Error_Handler(); + } +#endif /* LWIP_ARP || LWIP_ETHERNET */ + +/* USER CODE BEGIN LOW_LEVEL_INIT */ + +/* USER CODE END LOW_LEVEL_INIT */ + +} + +/** + * @brief This function should do the actual transmission of the packet. The packet is + * contained in the pbuf that is passed to the function. This pbuf + * might be chained. + * + * @param netif the lwip network interface structure for this ethernetif + * @param p the MAC packet to send (e.g. IP packet including MAC addresses and type) + * @return ERR_OK if the packet could be sent + * an err_t value if the packet couldn't be sent + * + * @note Returning ERR_MEM here if a DMA queue of your MAC is full can lead to + * strange results. You might consider waiting for space in the DMA queue + * to become available since the stack doesn't retry to send a packet + * dropped because of memory failure (except for the TCP timers). + */ + +static err_t low_level_output(struct netif *netif, struct pbuf *p) +{ + uint32_t i = 0U; + struct pbuf *q = NULL; + err_t errval = ERR_OK; + ETH_BufferTypeDef Txbuffer[ETH_TX_DESC_CNT] = {0}; + + memset(Txbuffer, 0 , ETH_TX_DESC_CNT*sizeof(ETH_BufferTypeDef)); + + for(q = p; q != NULL; q = q->next) + { + if(i >= ETH_TX_DESC_CNT) + return ERR_IF; + + Txbuffer[i].buffer = q->payload; + Txbuffer[i].len = q->len; + + if(i>0) + { + Txbuffer[i-1].next = &Txbuffer[i]; + } + + if(q->next == NULL) + { + Txbuffer[i].next = NULL; + } + + i++; + } + + TxConfig.Length = p->tot_len; + TxConfig.TxBuffer = Txbuffer; + TxConfig.pData = p; + + pbuf_ref(p); + + HAL_ETH_Transmit_IT(&heth, &TxConfig); + while(osSemaphoreAcquire(TxPktSemaphore, TIME_WAITING_FOR_INPUT)!=osOK) + + { + } + + HAL_ETH_ReleaseTxPacket(&heth); + + return errval; +} + +/** + * @brief Should allocate a pbuf and transfer the bytes of the incoming + * packet from the interface into the pbuf. + * + * @param netif the lwip network interface structure for this ethernetif + * @return a pbuf filled with the received packet (including MAC header) + * NULL on memory error + */ +static struct pbuf * low_level_input(struct netif *netif) +{ + struct pbuf *p = NULL; + + if(RxAllocStatus == RX_ALLOC_OK) + { + HAL_ETH_ReadData(&heth, (void **)&p); + } + + return p; +} + +/** + * @brief This function should be called when a packet is ready to be read + * from the interface. It uses the function low_level_input() that + * should handle the actual reception of bytes from the network + * interface. Then the type of the received packet is determined and + * the appropriate input function is called. + * + * @param netif the lwip network interface structure for this ethernetif + */ +void ethernetif_input(void* argument) +{ + struct pbuf *p = NULL; + struct netif *netif = (struct netif *) argument; + + for( ;; ) + { + if (osSemaphoreAcquire(RxPktSemaphore, TIME_WAITING_FOR_INPUT) == osOK) + { + do + { + p = low_level_input( netif ); + if (p != NULL) + { + if (netif->input( p, netif) != ERR_OK ) + { + pbuf_free(p); + } + } + } while(p!=NULL); + } + } +} + +#if !LWIP_ARP +/** + * This function has to be completed by user in case of ARP OFF. + * + * @param netif the lwip network interface structure for this ethernetif + * @return ERR_OK if ... + */ +static err_t low_level_output_arp_off(struct netif *netif, struct pbuf *q, const ip4_addr_t *ipaddr) +{ + err_t errval; + errval = ERR_OK; + +/* USER CODE BEGIN 5 */ + +/* USER CODE END 5 */ + + return errval; + +} +#endif /* LWIP_ARP */ + +/** + * @brief Should be called at the beginning of the program to set up the + * network interface. It calls the function low_level_init() to do the + * actual setup of the hardware. + * + * This function should be passed as a parameter to netif_add(). + * + * @param netif the lwip network interface structure for this ethernetif + * @return ERR_OK if the loopif is initialized + * ERR_MEM if private data couldn't be allocated + * any other err_t on error + */ +err_t ethernetif_init(struct netif *netif) +{ + LWIP_ASSERT("netif != NULL", (netif != NULL)); + +#if LWIP_NETIF_HOSTNAME + /* Initialize interface hostname */ + netif->hostname = "lwip"; +#endif /* LWIP_NETIF_HOSTNAME */ + + /* + * Initialize the snmp variables and counters inside the struct netif. + * The last argument should be replaced with your link speed, in units + * of bits per second. + */ + // MIB2_INIT_NETIF(netif, snmp_ifType_ethernet_csmacd, LINK_SPEED_OF_YOUR_NETIF_IN_BPS); + + netif->name[0] = IFNAME0; + netif->name[1] = IFNAME1; + /* We directly use etharp_output() here to save a function call. + * You can instead declare your own function an call etharp_output() + * from it if you have to do some checks before sending (e.g. if link + * is available...) */ + +#if LWIP_IPV4 +#if LWIP_ARP || LWIP_ETHERNET +#if LWIP_ARP + netif->output = etharp_output; +#else + /* The user should write its own code in low_level_output_arp_off function */ + netif->output = low_level_output_arp_off; +#endif /* LWIP_ARP */ +#endif /* LWIP_ARP || LWIP_ETHERNET */ +#endif /* LWIP_IPV4 */ + +#if LWIP_IPV6 + netif->output_ip6 = ethip6_output; +#endif /* LWIP_IPV6 */ + + netif->linkoutput = low_level_output; + + /* initialize the hardware */ + low_level_init(netif); + + return ERR_OK; +} + +/** + * @brief Custom Rx pbuf free callback + * @param pbuf: pbuf to be freed + * @retval None + */ +void pbuf_free_custom(struct pbuf *p) +{ + struct pbuf_custom* custom_pbuf = (struct pbuf_custom*)p; + LWIP_MEMPOOL_FREE(RX_POOL, custom_pbuf); + + /* If the Rx Buffer Pool was exhausted, signal the ethernetif_input task to + * call HAL_ETH_GetRxDataBuffer to rebuild the Rx descriptors. */ + + if (RxAllocStatus == RX_ALLOC_ERROR) + { + RxAllocStatus = RX_ALLOC_OK; + osSemaphoreRelease(RxPktSemaphore); + } +} + +/* USER CODE BEGIN 6 */ + +/** +* @brief Returns the current time in milliseconds +* when LWIP_TIMERS == 1 and NO_SYS == 1 +* @param None +* @retval Current Time value +*/ +u32_t sys_now(void) +{ + return HAL_GetTick(); +} + +/* USER CODE END 6 */ + +/** + * @brief Initializes the ETH MSP. + * @param ethHandle: ETH handle + * @retval None + */ + +void HAL_ETH_MspInit(ETH_HandleTypeDef* ethHandle) +{ + GPIO_InitTypeDef GPIO_InitStruct = {0}; + if(ethHandle->Instance==ETH) + { + /* USER CODE BEGIN ETH_MspInit 0 */ + + /* USER CODE END ETH_MspInit 0 */ + /* Enable Peripheral clock */ + __HAL_RCC_ETH_CLK_ENABLE(); + + __HAL_RCC_GPIOG_CLK_ENABLE(); + __HAL_RCC_GPIOC_CLK_ENABLE(); + __HAL_RCC_GPIOA_CLK_ENABLE(); + /**ETH GPIO Configuration + PG14 ------> ETH_TXD1 + PG13 ------> ETH_TXD0 + PG11 ------> ETH_TX_EN + PC1 ------> ETH_MDC + PA1 ------> ETH_REF_CLK + PC4 ------> ETH_RXD0 + PA2 ------> ETH_MDIO + PC5 ------> ETH_RXD1 + PA7 ------> ETH_CRS_DV + */ + GPIO_InitStruct.Pin = GPIO_PIN_14|GPIO_PIN_13|GPIO_PIN_11; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF11_ETH; + HAL_GPIO_Init(GPIOG, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_1|GPIO_PIN_4|GPIO_PIN_5; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF11_ETH; + HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_7; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF11_ETH; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + /* Peripheral interrupt init */ + HAL_NVIC_SetPriority(ETH_IRQn, 5, 0); + HAL_NVIC_EnableIRQ(ETH_IRQn); + /* USER CODE BEGIN ETH_MspInit 1 */ + + /* USER CODE END ETH_MspInit 1 */ + } +} + +void HAL_ETH_MspDeInit(ETH_HandleTypeDef* ethHandle) +{ + if(ethHandle->Instance==ETH) + { + /* USER CODE BEGIN ETH_MspDeInit 0 */ + + /* USER CODE END ETH_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_ETH_CLK_DISABLE(); + + /**ETH GPIO Configuration + PG14 ------> ETH_TXD1 + PG13 ------> ETH_TXD0 + PG11 ------> ETH_TX_EN + PC1 ------> ETH_MDC + PA1 ------> ETH_REF_CLK + PC4 ------> ETH_RXD0 + PA2 ------> ETH_MDIO + PC5 ------> ETH_RXD1 + PA7 ------> ETH_CRS_DV + */ + HAL_GPIO_DeInit(GPIOG, GPIO_PIN_14|GPIO_PIN_13|GPIO_PIN_11); + + HAL_GPIO_DeInit(GPIOC, GPIO_PIN_1|GPIO_PIN_4|GPIO_PIN_5); + + HAL_GPIO_DeInit(GPIOA, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_7); + + /* Peripheral interrupt Deinit*/ + HAL_NVIC_DisableIRQ(ETH_IRQn); + + /* USER CODE BEGIN ETH_MspDeInit 1 */ + + /* USER CODE END ETH_MspDeInit 1 */ + } +} + +/******************************************************************************* + PHI IO Functions +*******************************************************************************/ +/** + * @brief Initializes the MDIO interface GPIO and clocks. + * @param None + * @retval 0 if OK, -1 if ERROR + */ +int32_t ETH_PHY_IO_Init(void) +{ + /* We assume that MDIO GPIO configuration is already done + in the ETH_MspInit() else it should be done here + */ + + /* Configure the MDIO Clock */ + HAL_ETH_SetMDIOClockRange(&heth); + + return 0; +} + +/** + * @brief De-Initializes the MDIO interface . + * @param None + * @retval 0 if OK, -1 if ERROR + */ +int32_t ETH_PHY_IO_DeInit (void) +{ + return 0; +} + +/** + * @brief Read a PHY register through the MDIO interface. + * @param DevAddr: PHY port address + * @param RegAddr: PHY register address + * @param pRegVal: pointer to hold the register value + * @retval 0 if OK -1 if Error + */ +int32_t ETH_PHY_IO_ReadReg(uint32_t DevAddr, uint32_t RegAddr, uint32_t *pRegVal) +{ + if(HAL_ETH_ReadPHYRegister(&heth, DevAddr, RegAddr, pRegVal) != HAL_OK) + { + return -1; + } + + return 0; +} + +/** + * @brief Write a value to a PHY register through the MDIO interface. + * @param DevAddr: PHY port address + * @param RegAddr: PHY register address + * @param RegVal: Value to be written + * @retval 0 if OK -1 if Error + */ +int32_t ETH_PHY_IO_WriteReg(uint32_t DevAddr, uint32_t RegAddr, uint32_t RegVal) +{ + if(HAL_ETH_WritePHYRegister(&heth, DevAddr, RegAddr, RegVal) != HAL_OK) + { + return -1; + } + + return 0; +} + +/** + * @brief Get the time in millisecons used for internal PHY driver process. + * @retval Time value + */ +int32_t ETH_PHY_IO_GetTick(void) +{ + return HAL_GetTick(); +} + +/** + * @brief Check the ETH link state then update ETH driver and netif link accordingly. + * @retval None + */ +void ethernet_link_thread(void* argument) +{ + ETH_MACConfigTypeDef MACConf = {0}; + int32_t PHYLinkState = 0; + uint32_t linkchanged = 0U, speed = 0U, duplex = 0U; + + struct netif *netif = (struct netif *) argument; +/* USER CODE BEGIN ETH link init */ + +/* USER CODE END ETH link init */ + + for(;;) + { + PHYLinkState = LAN8742_GetLinkState(&LAN8742); + + if(netif_is_link_up(netif) && (PHYLinkState <= LAN8742_STATUS_LINK_DOWN)) + { + HAL_ETH_Stop_IT(&heth); + netif_set_down(netif); + netif_set_link_down(netif); + } + else if(!netif_is_link_up(netif) && (PHYLinkState > LAN8742_STATUS_LINK_DOWN)) + { + switch (PHYLinkState) + { + case LAN8742_STATUS_100MBITS_FULLDUPLEX: + duplex = ETH_FULLDUPLEX_MODE; + speed = ETH_SPEED_100M; + linkchanged = 1; + break; + case LAN8742_STATUS_100MBITS_HALFDUPLEX: + duplex = ETH_HALFDUPLEX_MODE; + speed = ETH_SPEED_100M; + linkchanged = 1; + break; + case LAN8742_STATUS_10MBITS_FULLDUPLEX: + duplex = ETH_FULLDUPLEX_MODE; + speed = ETH_SPEED_10M; + linkchanged = 1; + break; + case LAN8742_STATUS_10MBITS_HALFDUPLEX: + duplex = ETH_HALFDUPLEX_MODE; + speed = ETH_SPEED_10M; + linkchanged = 1; + break; + default: + break; + } + + if(linkchanged) + { + /* Get MAC Config MAC */ + HAL_ETH_GetMACConfig(&heth, &MACConf); + MACConf.DuplexMode = duplex; + MACConf.Speed = speed; + HAL_ETH_SetMACConfig(&heth, &MACConf); + HAL_ETH_Start_IT(&heth); + netif_set_up(netif); + netif_set_link_up(netif); + } + } + +/* USER CODE BEGIN ETH link Thread core code for User BSP */ + +/* USER CODE END ETH link Thread core code for User BSP */ + + osDelay(100); + } +} + +void HAL_ETH_RxAllocateCallback(uint8_t **buff) +{ +/* USER CODE BEGIN HAL ETH RxAllocateCallback */ + struct pbuf_custom *p = LWIP_MEMPOOL_ALLOC(RX_POOL); + if (p) + { + /* Get the buff from the struct pbuf address. */ + *buff = (uint8_t *)p + offsetof(RxBuff_t, buff); + p->custom_free_function = pbuf_free_custom; + /* Initialize the struct pbuf. + * This must be performed whenever a buffer's allocated because it may be + * changed by lwIP or the app, e.g., pbuf_free decrements ref. */ + pbuf_alloced_custom(PBUF_RAW, 0, PBUF_REF, p, *buff, ETH_RX_BUF_SIZE); + } + else + { + RxAllocStatus = RX_ALLOC_ERROR; + *buff = NULL; + } +/* USER CODE END HAL ETH RxAllocateCallback */ +} + +void HAL_ETH_RxLinkCallback(void **pStart, void **pEnd, uint8_t *buff, uint16_t Length) +{ +/* USER CODE BEGIN HAL ETH RxLinkCallback */ + + struct pbuf **ppStart = (struct pbuf **)pStart; + struct pbuf **ppEnd = (struct pbuf **)pEnd; + struct pbuf *p = NULL; + + /* Get the struct pbuf from the buff address. */ + p = (struct pbuf *)(buff - offsetof(RxBuff_t, buff)); + p->next = NULL; + p->tot_len = 0; + p->len = Length; + + /* Chain the buffer. */ + if (!*ppStart) + { + /* The first buffer of the packet. */ + *ppStart = p; + } + else + { + /* Chain the buffer to the end of the packet. */ + (*ppEnd)->next = p; + } + *ppEnd = p; + + /* Update the total length of all the buffers of the chain. Each pbuf in the chain should have its tot_len + * set to its own length, plus the length of all the following pbufs in the chain. */ + for (p = *ppStart; p != NULL; p = p->next) + { + p->tot_len += Length; + } + + /* Invalidate data cache because Rx DMA's writing to physical memory makes it stale. */ + SCB_InvalidateDCache_by_Addr((uint32_t *)buff, Length); + +/* USER CODE END HAL ETH RxLinkCallback */ +} + +void HAL_ETH_TxFreeCallback(uint32_t * buff) +{ +/* USER CODE BEGIN HAL ETH TxFreeCallback */ + + pbuf_free((struct pbuf *)buff); + +/* USER CODE END HAL ETH TxFreeCallback */ +} + +/* USER CODE BEGIN 8 */ + +/* USER CODE END 8 */ + diff --git a/STM32_Disco746G/LWIP/Target/ethernetif.h b/STM32_Disco746G/LWIP/Target/ethernetif.h new file mode 100644 index 0000000000000000000000000000000000000000..c6fd9f6f9fc9c4dfd4acd70b8a000a86619b7212 --- /dev/null +++ b/STM32_Disco746G/LWIP/Target/ethernetif.h @@ -0,0 +1,46 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * File Name : ethernetif.h + * Description : This file provides initialization code for LWIP + * middleWare. + ****************************************************************************** + * @attention + * + * Copyright (c) 2023 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +#ifndef __ETHERNETIF_H__ +#define __ETHERNETIF_H__ + +#include "lwip/err.h" +#include "lwip/netif.h" +#include "cmsis_os.h" + +/* Within 'USER CODE' section, code will be kept by default at each generation */ +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ + +/* Exported functions ------------------------------------------------------- */ +err_t ethernetif_init(struct netif *netif); + +void ethernetif_input(void* argument); +void ethernet_link_thread(void* argument ); + +void Error_Handler(void); +u32_t sys_jiffies(void); +u32_t sys_now(void); + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ +#endif diff --git a/STM32_Disco746G/LWIP/Target/lwipopts.h b/STM32_Disco746G/LWIP/Target/lwipopts.h new file mode 100644 index 0000000000000000000000000000000000000000..a761724f11cdc75ef3448c4711455a6f48ba3aca --- /dev/null +++ b/STM32_Disco746G/LWIP/Target/lwipopts.h @@ -0,0 +1,122 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * File Name : Target/lwipopts.h + * Description : This file overrides LwIP stack default configuration + * done in opt.h file. + ****************************************************************************** + * @attention + * + * Copyright (c) 2023 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Define to prevent recursive inclusion --------------------------------------*/ +#ifndef __LWIPOPTS__H__ +#define __LWIPOPTS__H__ + +#include "main.h" + +/*-----------------------------------------------------------------------------*/ +/* Current version of LwIP supported by CubeMx: 2.1.2 -*/ +/*-----------------------------------------------------------------------------*/ + +/* Within 'USER CODE' section, code will be kept by default at each generation */ +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ + +#ifdef __cplusplus + extern "C" { +#endif + +/* STM32CubeMX Specific Parameters (not defined in opt.h) ---------------------*/ +/* Parameters set in STM32CubeMX LwIP Configuration GUI -*/ +/*----- WITH_RTOS enabled (Since FREERTOS is set) -----*/ +#define WITH_RTOS 1 +/*----- CHECKSUM_BY_HARDWARE enabled -----*/ +#define CHECKSUM_BY_HARDWARE 1 +/*-----------------------------------------------------------------------------*/ + +/* LwIP Stack Parameters (modified compared to initialization value in opt.h) -*/ +/* Parameters set in STM32CubeMX LwIP Configuration GUI -*/ +/*----- Value in opt.h for LWIP_DHCP: 0 -----*/ +#define LWIP_DHCP 1 +/*----- Value in opt.h for MEM_ALIGNMENT: 1 -----*/ +#define MEM_ALIGNMENT 4 +/*----- Value in opt.h for MEMP_NUM_SYS_TIMEOUT: (LWIP_TCP + IP_REASSEMBLY + LWIP_ARP + (2*LWIP_DHCP) + LWIP_AUTOIP + LWIP_IGMP + LWIP_DNS + (PPP_SUPPORT*6*MEMP_NUM_PPP_PCB) + (LWIP_IPV6 ? (1 + LWIP_IPV6_REASS + LWIP_IPV6_MLD) : 0)) -*/ +#define MEMP_NUM_SYS_TIMEOUT 5 +/*----- Value in opt.h for LWIP_ETHERNET: LWIP_ARP || PPPOE_SUPPORT -*/ +#define LWIP_ETHERNET 1 +/*----- Value in opt.h for LWIP_DNS_SECURE: (LWIP_DNS_SECURE_RAND_XID | LWIP_DNS_SECURE_NO_MULTIPLE_OUTSTANDING | LWIP_DNS_SECURE_RAND_SRC_PORT) -*/ +#define LWIP_DNS_SECURE 7 +/*----- Value in opt.h for TCP_SND_QUEUELEN: (4*TCP_SND_BUF + (TCP_MSS - 1))/TCP_MSS -----*/ +#define TCP_SND_QUEUELEN 9 +/*----- Value in opt.h for TCP_SNDLOWAT: LWIP_MIN(LWIP_MAX(((TCP_SND_BUF)/2), (2 * TCP_MSS) + 1), (TCP_SND_BUF) - 1) -*/ +#define TCP_SNDLOWAT 1071 +/*----- Value in opt.h for TCP_SNDQUEUELOWAT: LWIP_MAX(TCP_SND_QUEUELEN)/2, 5) -*/ +#define TCP_SNDQUEUELOWAT 5 +/*----- Value in opt.h for TCP_WND_UPDATE_THRESHOLD: LWIP_MIN(TCP_WND/4, TCP_MSS*4) -----*/ +#define TCP_WND_UPDATE_THRESHOLD 536 +/*----- Value in opt.h for LWIP_NETIF_LINK_CALLBACK: 0 -----*/ +#define LWIP_NETIF_LINK_CALLBACK 1 +/*----- Value in opt.h for TCPIP_THREAD_STACKSIZE: 0 -----*/ +#define TCPIP_THREAD_STACKSIZE 1024 +/*----- Value in opt.h for TCPIP_THREAD_PRIO: 1 -----*/ +#define TCPIP_THREAD_PRIO 24 +/*----- Value in opt.h for TCPIP_MBOX_SIZE: 0 -----*/ +#define TCPIP_MBOX_SIZE 6 +/*----- Value in opt.h for SLIPIF_THREAD_STACKSIZE: 0 -----*/ +#define SLIPIF_THREAD_STACKSIZE 1024 +/*----- Value in opt.h for SLIPIF_THREAD_PRIO: 1 -----*/ +#define SLIPIF_THREAD_PRIO 3 +/*----- Value in opt.h for DEFAULT_THREAD_STACKSIZE: 0 -----*/ +#define DEFAULT_THREAD_STACKSIZE 1024 +/*----- Value in opt.h for DEFAULT_THREAD_PRIO: 1 -----*/ +#define DEFAULT_THREAD_PRIO 3 +/*----- Value in opt.h for DEFAULT_UDP_RECVMBOX_SIZE: 0 -----*/ +#define DEFAULT_UDP_RECVMBOX_SIZE 6 +/*----- Value in opt.h for DEFAULT_TCP_RECVMBOX_SIZE: 0 -----*/ +#define DEFAULT_TCP_RECVMBOX_SIZE 6 +/*----- Value in opt.h for DEFAULT_ACCEPTMBOX_SIZE: 0 -----*/ +#define DEFAULT_ACCEPTMBOX_SIZE 6 +/*----- Value in opt.h for RECV_BUFSIZE_DEFAULT: INT_MAX -----*/ +#define RECV_BUFSIZE_DEFAULT 2000000000 +/*----- Value in opt.h for LWIP_STATS: 1 -----*/ +#define LWIP_STATS 0 +/*----- Value in opt.h for CHECKSUM_GEN_IP: 1 -----*/ +#define CHECKSUM_GEN_IP 0 +/*----- Value in opt.h for CHECKSUM_GEN_UDP: 1 -----*/ +#define CHECKSUM_GEN_UDP 0 +/*----- Value in opt.h for CHECKSUM_GEN_TCP: 1 -----*/ +#define CHECKSUM_GEN_TCP 0 +/*----- Value in opt.h for CHECKSUM_GEN_ICMP: 1 -----*/ +#define CHECKSUM_GEN_ICMP 0 +/*----- Value in opt.h for CHECKSUM_GEN_ICMP6: 1 -----*/ +#define CHECKSUM_GEN_ICMP6 0 +/*----- Value in opt.h for CHECKSUM_CHECK_IP: 1 -----*/ +#define CHECKSUM_CHECK_IP 0 +/*----- Value in opt.h for CHECKSUM_CHECK_UDP: 1 -----*/ +#define CHECKSUM_CHECK_UDP 0 +/*----- Value in opt.h for CHECKSUM_CHECK_TCP: 1 -----*/ +#define CHECKSUM_CHECK_TCP 0 +/*----- Value in opt.h for CHECKSUM_CHECK_ICMP: 1 -----*/ +#define CHECKSUM_CHECK_ICMP 0 +/*----- Value in opt.h for CHECKSUM_CHECK_ICMP6: 1 -----*/ +#define CHECKSUM_CHECK_ICMP6 0 +/*-----------------------------------------------------------------------------*/ +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ + +#ifdef __cplusplus +} +#endif +#endif /*__LWIPOPTS__H__ */ diff --git a/STM32_Disco746G/LightControlConvi_Disco746G.ioc b/STM32_Disco746G/LightControlConvi_Disco746G.ioc index c344e66ae8815bd9055dc1dc118195491ed8691a..5457aa48277cc912287425795d8685f1ab6308bb 100644 --- a/STM32_Disco746G/LightControlConvi_Disco746G.ioc +++ b/STM32_Disco746G/LightControlConvi_Disco746G.ioc @@ -17,6 +17,8 @@ CORTEX_M7.MPU_Control=MPU_PRIVILEGED_DEFAULT CORTEX_M7.PREFETCH_ENABLE=1 CORTEX_M7.Size-Cortex_Memory_Protection_Unit_Region0_Settings=MPU_REGION_SIZE_256MB CORTEX_M7.Size-Cortex_Memory_Protection_Unit_Region1_Settings=MPU_REGION_SIZE_16MB +ETH.IPParameters=MediaInterface +ETH.MediaInterface=HAL_ETH_RMII_MODE FMC.CASLatency1=FMC_SDRAM_CAS_LATENCY_3 FMC.ExitSelfRefreshDelay1=7 FMC.IPParameters=CASLatency1,SDClockPeriod1,ReadBurst1,LoadToActiveDelay1,ExitSelfRefreshDelay1,SelfRefreshTime1,RowCycleDelay1,WriteRecoveryTime1,RPDelay1,RCDDelay1 @@ -56,139 +58,164 @@ LTDC.PixelFormat_L0=LTDC_PIXEL_FORMAT_RGB565 LTDC.VSync=10 LTDC.WindowX1_L0=480 LTDC.WindowY1_L0=272 +LWIP.BSP.number=1 +LWIP.Version=v2.1.2_Cube +LWIP0.BSP.STBoard=false +LWIP0.BSP.api=BSP_COMPONENT_DRIVER +LWIP0.BSP.component=LAN8742 +LWIP0.BSP.condition= +LWIP0.BSP.instance=LAN8742 +LWIP0.BSP.ip= +LWIP0.BSP.mode= +LWIP0.BSP.name=Driver_PHY +LWIP0.BSP.semaphore=S_LAN8742 +LWIP0.BSP.solution=LAN8742 Mcu.CPN=STM32F746NGH6 Mcu.Family=STM32F7 Mcu.IP0=CORTEX_M7 Mcu.IP1=CRC -Mcu.IP10=RCC -Mcu.IP11=SYS -Mcu.IP12=TIM1 -Mcu.IP13=TIM4 -Mcu.IP14=TIM5 -Mcu.IP15=TIM12 +Mcu.IP10=NVIC +Mcu.IP11=QUADSPI +Mcu.IP12=RCC +Mcu.IP13=SYS +Mcu.IP14=TIM1 +Mcu.IP15=TIM4 +Mcu.IP16=TIM5 +Mcu.IP17=TIM12 Mcu.IP2=DMA2D -Mcu.IP3=FMC -Mcu.IP4=FREERTOS -Mcu.IP5=I2C3 -Mcu.IP6=LIBJPEG -Mcu.IP7=LTDC -Mcu.IP8=NVIC -Mcu.IP9=QUADSPI -Mcu.IPNb=16 +Mcu.IP3=ETH +Mcu.IP4=FMC +Mcu.IP5=FREERTOS +Mcu.IP6=I2C3 +Mcu.IP7=LIBJPEG +Mcu.IP8=LTDC +Mcu.IP9=LWIP +Mcu.IPNb=18 Mcu.Name=STM32F746NGHx Mcu.Package=TFBGA216 Mcu.Pin0=PE4 Mcu.Pin1=PE2 -Mcu.Pin10=PG15 -Mcu.Pin100=VP_TIM12_VS_ClockSourceINT -Mcu.Pin101=VP_STMicroelectronics.X-CUBE-TOUCHGFX_VS_GraphicsJjApplication_4.22.0 -Mcu.Pin11=PJ13 -Mcu.Pin12=PD0 -Mcu.Pin13=PK7 -Mcu.Pin14=PK6 -Mcu.Pin15=PK5 -Mcu.Pin16=PG12 -Mcu.Pin17=PJ14 -Mcu.Pin18=PD1 -Mcu.Pin19=PF0 -Mcu.Pin2=PE1 -Mcu.Pin20=PI10 -Mcu.Pin21=PK4 -Mcu.Pin22=PK3 -Mcu.Pin23=PJ15 -Mcu.Pin24=PF1 -Mcu.Pin25=PI12 -Mcu.Pin26=PI9 -Mcu.Pin27=PI0 -Mcu.Pin28=PK1 -Mcu.Pin29=PK2 -Mcu.Pin3=PE0 -Mcu.Pin30=PA8 -Mcu.Pin31=PH0/OSC_IN -Mcu.Pin32=PF2 -Mcu.Pin33=PI15 -Mcu.Pin34=PJ11 -Mcu.Pin35=PK0 -Mcu.Pin36=PC7 -Mcu.Pin37=PH1/OSC_OUT -Mcu.Pin38=PF3 -Mcu.Pin39=PI14 -Mcu.Pin4=PB8 -Mcu.Pin40=PJ8 -Mcu.Pin41=PJ10 -Mcu.Pin42=PG8 -Mcu.Pin43=PC6 -Mcu.Pin44=PF4 -Mcu.Pin45=PH5 -Mcu.Pin46=PH3 -Mcu.Pin47=PJ7 -Mcu.Pin48=PJ9 -Mcu.Pin49=PG6 -Mcu.Pin5=PB4 -Mcu.Pin50=PF5 -Mcu.Pin51=PJ6 -Mcu.Pin52=PD15 -Mcu.Pin53=PD10 -Mcu.Pin54=PC3 -Mcu.Pin55=PD14 -Mcu.Pin56=PD9 -Mcu.Pin57=PD8 -Mcu.Pin58=PB2 -Mcu.Pin59=PF12 -Mcu.Pin6=PA14 -Mcu.Pin60=PG1 -Mcu.Pin61=PF15 -Mcu.Pin62=PJ4 -Mcu.Pin63=PD12 -Mcu.Pin64=PD13 -Mcu.Pin65=PJ5 -Mcu.Pin66=PA0/WKUP -Mcu.Pin67=PF13 -Mcu.Pin68=PG0 -Mcu.Pin69=PJ3 -Mcu.Pin7=PA13 -Mcu.Pin70=PE8 -Mcu.Pin71=PD11 -Mcu.Pin72=PG5 -Mcu.Pin73=PG4 -Mcu.Pin74=PH7 -Mcu.Pin75=PF14 -Mcu.Pin76=PJ2 -Mcu.Pin77=PF11 -Mcu.Pin78=PE9 -Mcu.Pin79=PE11 -Mcu.Pin8=PB9 -Mcu.Pin80=PE14 -Mcu.Pin81=PH6 -Mcu.Pin82=PH8 -Mcu.Pin83=PJ0 -Mcu.Pin84=PJ1 -Mcu.Pin85=PE7 -Mcu.Pin86=PE10 -Mcu.Pin87=PE12 -Mcu.Pin88=PE15 -Mcu.Pin89=PE13 -Mcu.Pin9=PB6 -Mcu.Pin90=PB14 -Mcu.Pin91=PB15 -Mcu.Pin92=VP_CRC_VS_CRC -Mcu.Pin93=VP_DMA2D_VS_DMA2D -Mcu.Pin94=VP_FREERTOS_VS_CMSIS_V2 -Mcu.Pin95=VP_LIBJPEG_VS_JPEGLIB -Mcu.Pin96=VP_SYS_VS_tim6 -Mcu.Pin97=VP_TIM1_VS_ClockSourceINT -Mcu.Pin98=VP_TIM4_VS_ClockSourceINT -Mcu.Pin99=VP_TIM5_VS_ClockSourceINT -Mcu.PinsNb=102 +Mcu.Pin10=PB9 +Mcu.Pin100=PB15 +Mcu.Pin101=VP_CRC_VS_CRC +Mcu.Pin102=VP_DMA2D_VS_DMA2D +Mcu.Pin103=VP_FREERTOS_VS_CMSIS_V2 +Mcu.Pin104=VP_LIBJPEG_VS_JPEGLIB +Mcu.Pin105=VP_LWIP_VS_Enabled +Mcu.Pin106=VP_SYS_VS_tim6 +Mcu.Pin107=VP_TIM1_VS_ClockSourceINT +Mcu.Pin108=VP_TIM4_VS_ClockSourceINT +Mcu.Pin109=VP_TIM5_VS_ClockSourceINT +Mcu.Pin11=PB6 +Mcu.Pin110=VP_TIM12_VS_ClockSourceINT +Mcu.Pin111=VP_STMicroelectronics.X-CUBE-TOUCHGFX_VS_GraphicsJjApplication_4.22.0 +Mcu.Pin12=PG15 +Mcu.Pin13=PG11 +Mcu.Pin14=PJ13 +Mcu.Pin15=PD0 +Mcu.Pin16=PK7 +Mcu.Pin17=PK6 +Mcu.Pin18=PK5 +Mcu.Pin19=PG12 +Mcu.Pin2=PG14 +Mcu.Pin20=PJ14 +Mcu.Pin21=PD1 +Mcu.Pin22=PF0 +Mcu.Pin23=PI10 +Mcu.Pin24=PK4 +Mcu.Pin25=PK3 +Mcu.Pin26=PJ15 +Mcu.Pin27=PF1 +Mcu.Pin28=PI12 +Mcu.Pin29=PI9 +Mcu.Pin3=PE1 +Mcu.Pin30=PI0 +Mcu.Pin31=PK1 +Mcu.Pin32=PK2 +Mcu.Pin33=PA8 +Mcu.Pin34=PH0/OSC_IN +Mcu.Pin35=PF2 +Mcu.Pin36=PI15 +Mcu.Pin37=PJ11 +Mcu.Pin38=PK0 +Mcu.Pin39=PC7 +Mcu.Pin4=PE0 +Mcu.Pin40=PH1/OSC_OUT +Mcu.Pin41=PF3 +Mcu.Pin42=PI14 +Mcu.Pin43=PJ8 +Mcu.Pin44=PJ10 +Mcu.Pin45=PG8 +Mcu.Pin46=PC6 +Mcu.Pin47=PF4 +Mcu.Pin48=PH5 +Mcu.Pin49=PH3 +Mcu.Pin5=PB8 +Mcu.Pin50=PJ7 +Mcu.Pin51=PJ9 +Mcu.Pin52=PG6 +Mcu.Pin53=PF5 +Mcu.Pin54=PJ6 +Mcu.Pin55=PD15 +Mcu.Pin56=PD10 +Mcu.Pin57=PC3 +Mcu.Pin58=PD14 +Mcu.Pin59=PD9 +Mcu.Pin6=PB4 +Mcu.Pin60=PD8 +Mcu.Pin61=PC1 +Mcu.Pin62=PB2 +Mcu.Pin63=PF12 +Mcu.Pin64=PG1 +Mcu.Pin65=PF15 +Mcu.Pin66=PJ4 +Mcu.Pin67=PD12 +Mcu.Pin68=PD13 +Mcu.Pin69=PJ5 +Mcu.Pin7=PA14 +Mcu.Pin70=PA1 +Mcu.Pin71=PA0/WKUP +Mcu.Pin72=PC4 +Mcu.Pin73=PF13 +Mcu.Pin74=PG0 +Mcu.Pin75=PJ3 +Mcu.Pin76=PE8 +Mcu.Pin77=PD11 +Mcu.Pin78=PG5 +Mcu.Pin79=PG4 +Mcu.Pin8=PA13 +Mcu.Pin80=PH7 +Mcu.Pin81=PA2 +Mcu.Pin82=PC5 +Mcu.Pin83=PF14 +Mcu.Pin84=PJ2 +Mcu.Pin85=PF11 +Mcu.Pin86=PE9 +Mcu.Pin87=PE11 +Mcu.Pin88=PE14 +Mcu.Pin89=PH6 +Mcu.Pin9=PG13 +Mcu.Pin90=PH8 +Mcu.Pin91=PA7 +Mcu.Pin92=PJ0 +Mcu.Pin93=PJ1 +Mcu.Pin94=PE7 +Mcu.Pin95=PE10 +Mcu.Pin96=PE12 +Mcu.Pin97=PE15 +Mcu.Pin98=PE13 +Mcu.Pin99=PB14 +Mcu.PinsNb=112 Mcu.ThirdParty0=STMicroelectronics.X-CUBE-TOUCHGFX.4.22.0 Mcu.ThirdPartyNb=1 Mcu.UserConstants= Mcu.UserName=STM32F746NGHx -MxCube.Version=6.9.1 -MxDb.Version=DB.6.0.91 +MxCube.Version=6.9.2 +MxDb.Version=DB.6.0.92 NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false NVIC.DMA2D_IRQn=true\:5\:0\:true\:false\:true\:true\:true\:true\:true NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false +NVIC.ETH_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true NVIC.ForceEnableDMAVector=true NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false NVIC.LTDC_IRQn=true\:5\:0\:true\:false\:true\:true\:true\:true\:true @@ -208,10 +235,16 @@ NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false PA0/WKUP.GPIOParameters=GPIO_Label PA0/WKUP.GPIO_Label=PWM5 PA0/WKUP.Signal=S_TIM5_CH1 +PA1.Mode=RMII +PA1.Signal=ETH_REF_CLK PA13.Mode=Serial_Wire PA13.Signal=SYS_JTMS-SWDIO PA14.Mode=Serial_Wire PA14.Signal=SYS_JTCK-SWCLK +PA2.Mode=RMII +PA2.Signal=ETH_MDIO +PA7.Mode=RMII +PA7.Signal=ETH_CRS_DV PA8.GPIOParameters=GPIO_Label PA8.GPIO_Label=PWM1 PA8.Signal=S_TIM1_CH1 @@ -239,9 +272,15 @@ PB8.Signal=S_TIM4_CH3 PB9.GPIOParameters=GPIO_Label PB9.GPIO_Label=PWM4 PB9.Signal=S_TIM4_CH4 +PC1.Mode=RMII +PC1.Signal=ETH_MDC PC3.Locked=true PC3.Mode=SdramChipSelect1_1 PC3.Signal=FMC_SDCKE0 +PC4.Mode=RMII +PC4.Signal=ETH_RXD0 +PC5.Mode=RMII +PC5.Signal=ETH_RXD1 PC6.GPIOParameters=GPIO_Speed,GPIO_Label PC6.GPIO_Label=RENDER_TIME PC6.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH @@ -297,9 +336,15 @@ PF4.Signal=FMC_A4 PF5.Signal=FMC_A5 PG0.Signal=FMC_A10 PG1.Signal=FMC_A11 +PG11.Mode=RMII +PG11.Signal=ETH_TX_EN PG12.Locked=true PG12.Mode=RGB888 PG12.Signal=LTDC_B4 +PG13.Mode=RMII +PG13.Signal=ETH_TXD0 +PG14.Mode=RMII +PG14.Signal=ETH_TXD1 PG15.Signal=FMC_SDNCAS PG4.Signal=FMC_A14_BA0 PG5.Signal=FMC_A15_BA1 @@ -639,6 +684,8 @@ VP_FREERTOS_VS_CMSIS_V2.Mode=CMSIS_V2 VP_FREERTOS_VS_CMSIS_V2.Signal=FREERTOS_VS_CMSIS_V2 VP_LIBJPEG_VS_JPEGLIB.Mode=Enabled VP_LIBJPEG_VS_JPEGLIB.Signal=LIBJPEG_VS_JPEGLIB +VP_LWIP_VS_Enabled.Mode=Enabled +VP_LWIP_VS_Enabled.Signal=LWIP_VS_Enabled VP_STMicroelectronics.X-CUBE-TOUCHGFX_VS_GraphicsJjApplication_4.22.0.Mode=GraphicsJjApplication VP_STMicroelectronics.X-CUBE-TOUCHGFX_VS_GraphicsJjApplication_4.22.0.Signal=STMicroelectronics.X-CUBE-TOUCHGFX_VS_GraphicsJjApplication_4.22.0 VP_SYS_VS_tim6.Mode=TIM6 diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/api/api_lib.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/api/api_lib.c new file mode 100644 index 0000000000000000000000000000000000000000..e03b8b74515862e0b998bf253898c5a435fa4d0b --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/api/api_lib.c @@ -0,0 +1,1367 @@ +/** + * @file + * Sequential API External module + * + * @defgroup netconn Netconn API + * @ingroup sequential_api + * Thread-safe, to be called from non-TCPIP threads only. + * TX/RX handling based on @ref netbuf (containing @ref pbuf) + * to avoid copying data around. + * + * @defgroup netconn_common Common functions + * @ingroup netconn + * For use with TCP and UDP + * + * @defgroup netconn_tcp TCP only + * @ingroup netconn + * TCP only functions + * + * @defgroup netconn_udp UDP only + * @ingroup netconn + * UDP only functions + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + */ + +/* This is the part of the API that is linked with + the application */ + +#include "lwip/opt.h" + +#if LWIP_NETCONN /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/api.h" +#include "lwip/memp.h" + +#include "lwip/ip.h" +#include "lwip/raw.h" +#include "lwip/udp.h" +#include "lwip/priv/api_msg.h" +#include "lwip/priv/tcp_priv.h" +#include "lwip/priv/tcpip_priv.h" + +#ifdef LWIP_HOOK_FILENAME +#include LWIP_HOOK_FILENAME +#endif + +#include + +#define API_MSG_VAR_REF(name) API_VAR_REF(name) +#define API_MSG_VAR_DECLARE(name) API_VAR_DECLARE(struct api_msg, name) +#define API_MSG_VAR_ALLOC(name) API_VAR_ALLOC(struct api_msg, MEMP_API_MSG, name, ERR_MEM) +#define API_MSG_VAR_ALLOC_RETURN_NULL(name) API_VAR_ALLOC(struct api_msg, MEMP_API_MSG, name, NULL) +#define API_MSG_VAR_FREE(name) API_VAR_FREE(MEMP_API_MSG, name) + +#if TCP_LISTEN_BACKLOG +/* need to allocate API message for accept so empty message pool does not result in event loss + * see bug #47512: MPU_COMPATIBLE may fail on empty pool */ +#define API_MSG_VAR_ALLOC_ACCEPT(msg) API_MSG_VAR_ALLOC(msg) +#define API_MSG_VAR_FREE_ACCEPT(msg) API_MSG_VAR_FREE(msg) +#else /* TCP_LISTEN_BACKLOG */ +#define API_MSG_VAR_ALLOC_ACCEPT(msg) +#define API_MSG_VAR_FREE_ACCEPT(msg) +#endif /* TCP_LISTEN_BACKLOG */ + +#if LWIP_NETCONN_FULLDUPLEX +#define NETCONN_RECVMBOX_WAITABLE(conn) (sys_mbox_valid(&(conn)->recvmbox) && (((conn)->flags & NETCONN_FLAG_MBOXINVALID) == 0)) +#define NETCONN_ACCEPTMBOX_WAITABLE(conn) (sys_mbox_valid(&(conn)->acceptmbox) && (((conn)->flags & (NETCONN_FLAG_MBOXCLOSED|NETCONN_FLAG_MBOXINVALID)) == 0)) +#define NETCONN_MBOX_WAITING_INC(conn) SYS_ARCH_INC(conn->mbox_threads_waiting, 1) +#define NETCONN_MBOX_WAITING_DEC(conn) SYS_ARCH_DEC(conn->mbox_threads_waiting, 1) +#else /* LWIP_NETCONN_FULLDUPLEX */ +#define NETCONN_RECVMBOX_WAITABLE(conn) sys_mbox_valid(&(conn)->recvmbox) +#define NETCONN_ACCEPTMBOX_WAITABLE(conn) (sys_mbox_valid(&(conn)->acceptmbox) && (((conn)->flags & NETCONN_FLAG_MBOXCLOSED) == 0)) +#define NETCONN_MBOX_WAITING_INC(conn) +#define NETCONN_MBOX_WAITING_DEC(conn) +#endif /* LWIP_NETCONN_FULLDUPLEX */ + +static err_t netconn_close_shutdown(struct netconn *conn, u8_t how); + +/** + * Call the lower part of a netconn_* function + * This function is then running in the thread context + * of tcpip_thread and has exclusive access to lwIP core code. + * + * @param fn function to call + * @param apimsg a struct containing the function to call and its parameters + * @return ERR_OK if the function was called, another err_t if not + */ +static err_t +netconn_apimsg(tcpip_callback_fn fn, struct api_msg *apimsg) +{ + err_t err; + +#ifdef LWIP_DEBUG + /* catch functions that don't set err */ + apimsg->err = ERR_VAL; +#endif /* LWIP_DEBUG */ + +#if LWIP_NETCONN_SEM_PER_THREAD + apimsg->op_completed_sem = LWIP_NETCONN_THREAD_SEM_GET(); +#endif /* LWIP_NETCONN_SEM_PER_THREAD */ + + err = tcpip_send_msg_wait_sem(fn, apimsg, LWIP_API_MSG_SEM(apimsg)); + if (err == ERR_OK) { + return apimsg->err; + } + return err; +} + +/** + * Create a new netconn (of a specific type) that has a callback function. + * The corresponding pcb is also created. + * + * @param t the type of 'connection' to create (@see enum netconn_type) + * @param proto the IP protocol for RAW IP pcbs + * @param callback a function to call on status changes (RX available, TX'ed) + * @return a newly allocated struct netconn or + * NULL on memory error + */ +struct netconn * +netconn_new_with_proto_and_callback(enum netconn_type t, u8_t proto, netconn_callback callback) +{ + struct netconn *conn; + API_MSG_VAR_DECLARE(msg); + API_MSG_VAR_ALLOC_RETURN_NULL(msg); + + conn = netconn_alloc(t, callback); + if (conn != NULL) { + err_t err; + + API_MSG_VAR_REF(msg).msg.n.proto = proto; + API_MSG_VAR_REF(msg).conn = conn; + err = netconn_apimsg(lwip_netconn_do_newconn, &API_MSG_VAR_REF(msg)); + if (err != ERR_OK) { + LWIP_ASSERT("freeing conn without freeing pcb", conn->pcb.tcp == NULL); + LWIP_ASSERT("conn has no recvmbox", sys_mbox_valid(&conn->recvmbox)); +#if LWIP_TCP + LWIP_ASSERT("conn->acceptmbox shouldn't exist", !sys_mbox_valid(&conn->acceptmbox)); +#endif /* LWIP_TCP */ +#if !LWIP_NETCONN_SEM_PER_THREAD + LWIP_ASSERT("conn has no op_completed", sys_sem_valid(&conn->op_completed)); + sys_sem_free(&conn->op_completed); +#endif /* !LWIP_NETCONN_SEM_PER_THREAD */ + sys_mbox_free(&conn->recvmbox); + memp_free(MEMP_NETCONN, conn); + API_MSG_VAR_FREE(msg); + return NULL; + } + } + API_MSG_VAR_FREE(msg); + return conn; +} + +/** + * @ingroup netconn_common + * Close a netconn 'connection' and free all its resources but not the netconn itself. + * UDP and RAW connection are completely closed, TCP pcbs might still be in a waitstate + * after this returns. + * + * @param conn the netconn to delete + * @return ERR_OK if the connection was deleted + */ +err_t +netconn_prepare_delete(struct netconn *conn) +{ + err_t err; + API_MSG_VAR_DECLARE(msg); + + /* No ASSERT here because possible to get a (conn == NULL) if we got an accept error */ + if (conn == NULL) { + return ERR_OK; + } + + API_MSG_VAR_ALLOC(msg); + API_MSG_VAR_REF(msg).conn = conn; +#if LWIP_SO_SNDTIMEO || LWIP_SO_LINGER + /* get the time we started, which is later compared to + sys_now() + conn->send_timeout */ + API_MSG_VAR_REF(msg).msg.sd.time_started = sys_now(); +#else /* LWIP_SO_SNDTIMEO || LWIP_SO_LINGER */ +#if LWIP_TCP + API_MSG_VAR_REF(msg).msg.sd.polls_left = + ((LWIP_TCP_CLOSE_TIMEOUT_MS_DEFAULT + TCP_SLOW_INTERVAL - 1) / TCP_SLOW_INTERVAL) + 1; +#endif /* LWIP_TCP */ +#endif /* LWIP_SO_SNDTIMEO || LWIP_SO_LINGER */ + err = netconn_apimsg(lwip_netconn_do_delconn, &API_MSG_VAR_REF(msg)); + API_MSG_VAR_FREE(msg); + + if (err != ERR_OK) { + return err; + } + return ERR_OK; +} + +/** + * @ingroup netconn_common + * Close a netconn 'connection' and free its resources. + * UDP and RAW connection are completely closed, TCP pcbs might still be in a waitstate + * after this returns. + * + * @param conn the netconn to delete + * @return ERR_OK if the connection was deleted + */ +err_t +netconn_delete(struct netconn *conn) +{ + err_t err; + + /* No ASSERT here because possible to get a (conn == NULL) if we got an accept error */ + if (conn == NULL) { + return ERR_OK; + } + +#if LWIP_NETCONN_FULLDUPLEX + if (conn->flags & NETCONN_FLAG_MBOXINVALID) { + /* Already called netconn_prepare_delete() before */ + err = ERR_OK; + } else +#endif /* LWIP_NETCONN_FULLDUPLEX */ + { + err = netconn_prepare_delete(conn); + } + if (err == ERR_OK) { + netconn_free(conn); + } + return err; +} + +/** + * Get the local or remote IP address and port of a netconn. + * For RAW netconns, this returns the protocol instead of a port! + * + * @param conn the netconn to query + * @param addr a pointer to which to save the IP address + * @param port a pointer to which to save the port (or protocol for RAW) + * @param local 1 to get the local IP address, 0 to get the remote one + * @return ERR_CONN for invalid connections + * ERR_OK if the information was retrieved + */ +err_t +netconn_getaddr(struct netconn *conn, ip_addr_t *addr, u16_t *port, u8_t local) +{ + API_MSG_VAR_DECLARE(msg); + err_t err; + + LWIP_ERROR("netconn_getaddr: invalid conn", (conn != NULL), return ERR_ARG;); + LWIP_ERROR("netconn_getaddr: invalid addr", (addr != NULL), return ERR_ARG;); + LWIP_ERROR("netconn_getaddr: invalid port", (port != NULL), return ERR_ARG;); + + API_MSG_VAR_ALLOC(msg); + API_MSG_VAR_REF(msg).conn = conn; + API_MSG_VAR_REF(msg).msg.ad.local = local; +#if LWIP_MPU_COMPATIBLE + err = netconn_apimsg(lwip_netconn_do_getaddr, &API_MSG_VAR_REF(msg)); + *addr = msg->msg.ad.ipaddr; + *port = msg->msg.ad.port; +#else /* LWIP_MPU_COMPATIBLE */ + msg.msg.ad.ipaddr = addr; + msg.msg.ad.port = port; + err = netconn_apimsg(lwip_netconn_do_getaddr, &msg); +#endif /* LWIP_MPU_COMPATIBLE */ + API_MSG_VAR_FREE(msg); + + return err; +} + +/** + * @ingroup netconn_common + * Bind a netconn to a specific local IP address and port. + * Binding one netconn twice might not always be checked correctly! + * + * @param conn the netconn to bind + * @param addr the local IP address to bind the netconn to + * (use IP4_ADDR_ANY/IP6_ADDR_ANY to bind to all addresses) + * @param port the local port to bind the netconn to (not used for RAW) + * @return ERR_OK if bound, any other err_t on failure + */ +err_t +netconn_bind(struct netconn *conn, const ip_addr_t *addr, u16_t port) +{ + API_MSG_VAR_DECLARE(msg); + err_t err; + + LWIP_ERROR("netconn_bind: invalid conn", (conn != NULL), return ERR_ARG;); + +#if LWIP_IPV4 + /* Don't propagate NULL pointer (IP_ADDR_ANY alias) to subsequent functions */ + if (addr == NULL) { + addr = IP4_ADDR_ANY; + } +#endif /* LWIP_IPV4 */ + +#if LWIP_IPV4 && LWIP_IPV6 + /* "Socket API like" dual-stack support: If IP to bind to is IP6_ADDR_ANY, + * and NETCONN_FLAG_IPV6_V6ONLY is 0, use IP_ANY_TYPE to bind + */ + if ((netconn_get_ipv6only(conn) == 0) && + ip_addr_cmp(addr, IP6_ADDR_ANY)) { + addr = IP_ANY_TYPE; + } +#endif /* LWIP_IPV4 && LWIP_IPV6 */ + + API_MSG_VAR_ALLOC(msg); + API_MSG_VAR_REF(msg).conn = conn; + API_MSG_VAR_REF(msg).msg.bc.ipaddr = API_MSG_VAR_REF(addr); + API_MSG_VAR_REF(msg).msg.bc.port = port; + err = netconn_apimsg(lwip_netconn_do_bind, &API_MSG_VAR_REF(msg)); + API_MSG_VAR_FREE(msg); + + return err; +} + +/** + * @ingroup netconn_common + * Bind a netconn to a specific interface and port. + * Binding one netconn twice might not always be checked correctly! + * + * @param conn the netconn to bind + * @param if_idx the local interface index to bind the netconn to + * @return ERR_OK if bound, any other err_t on failure + */ +err_t +netconn_bind_if(struct netconn *conn, u8_t if_idx) +{ + API_MSG_VAR_DECLARE(msg); + err_t err; + + LWIP_ERROR("netconn_bind_if: invalid conn", (conn != NULL), return ERR_ARG;); + + API_MSG_VAR_ALLOC(msg); + API_MSG_VAR_REF(msg).conn = conn; + API_MSG_VAR_REF(msg).msg.bc.if_idx = if_idx; + err = netconn_apimsg(lwip_netconn_do_bind_if, &API_MSG_VAR_REF(msg)); + API_MSG_VAR_FREE(msg); + + return err; +} + +/** + * @ingroup netconn_common + * Connect a netconn to a specific remote IP address and port. + * + * @param conn the netconn to connect + * @param addr the remote IP address to connect to + * @param port the remote port to connect to (no used for RAW) + * @return ERR_OK if connected, return value of tcp_/udp_/raw_connect otherwise + */ +err_t +netconn_connect(struct netconn *conn, const ip_addr_t *addr, u16_t port) +{ + API_MSG_VAR_DECLARE(msg); + err_t err; + + LWIP_ERROR("netconn_connect: invalid conn", (conn != NULL), return ERR_ARG;); + +#if LWIP_IPV4 + /* Don't propagate NULL pointer (IP_ADDR_ANY alias) to subsequent functions */ + if (addr == NULL) { + addr = IP4_ADDR_ANY; + } +#endif /* LWIP_IPV4 */ + + API_MSG_VAR_ALLOC(msg); + API_MSG_VAR_REF(msg).conn = conn; + API_MSG_VAR_REF(msg).msg.bc.ipaddr = API_MSG_VAR_REF(addr); + API_MSG_VAR_REF(msg).msg.bc.port = port; + err = netconn_apimsg(lwip_netconn_do_connect, &API_MSG_VAR_REF(msg)); + API_MSG_VAR_FREE(msg); + + return err; +} + +/** + * @ingroup netconn_udp + * Disconnect a netconn from its current peer (only valid for UDP netconns). + * + * @param conn the netconn to disconnect + * @return See @ref err_t + */ +err_t +netconn_disconnect(struct netconn *conn) +{ + API_MSG_VAR_DECLARE(msg); + err_t err; + + LWIP_ERROR("netconn_disconnect: invalid conn", (conn != NULL), return ERR_ARG;); + + API_MSG_VAR_ALLOC(msg); + API_MSG_VAR_REF(msg).conn = conn; + err = netconn_apimsg(lwip_netconn_do_disconnect, &API_MSG_VAR_REF(msg)); + API_MSG_VAR_FREE(msg); + + return err; +} + +/** + * @ingroup netconn_tcp + * Set a TCP netconn into listen mode + * + * @param conn the tcp netconn to set to listen mode + * @param backlog the listen backlog, only used if TCP_LISTEN_BACKLOG==1 + * @return ERR_OK if the netconn was set to listen (UDP and RAW netconns + * don't return any error (yet?)) + */ +err_t +netconn_listen_with_backlog(struct netconn *conn, u8_t backlog) +{ +#if LWIP_TCP + API_MSG_VAR_DECLARE(msg); + err_t err; + + /* This does no harm. If TCP_LISTEN_BACKLOG is off, backlog is unused. */ + LWIP_UNUSED_ARG(backlog); + + LWIP_ERROR("netconn_listen: invalid conn", (conn != NULL), return ERR_ARG;); + + API_MSG_VAR_ALLOC(msg); + API_MSG_VAR_REF(msg).conn = conn; +#if TCP_LISTEN_BACKLOG + API_MSG_VAR_REF(msg).msg.lb.backlog = backlog; +#endif /* TCP_LISTEN_BACKLOG */ + err = netconn_apimsg(lwip_netconn_do_listen, &API_MSG_VAR_REF(msg)); + API_MSG_VAR_FREE(msg); + + return err; +#else /* LWIP_TCP */ + LWIP_UNUSED_ARG(conn); + LWIP_UNUSED_ARG(backlog); + return ERR_ARG; +#endif /* LWIP_TCP */ +} + +/** + * @ingroup netconn_tcp + * Accept a new connection on a TCP listening netconn. + * + * @param conn the TCP listen netconn + * @param new_conn pointer where the new connection is stored + * @return ERR_OK if a new connection has been received or an error + * code otherwise + */ +err_t +netconn_accept(struct netconn *conn, struct netconn **new_conn) +{ +#if LWIP_TCP + err_t err; + void *accept_ptr; + struct netconn *newconn; +#if TCP_LISTEN_BACKLOG + API_MSG_VAR_DECLARE(msg); +#endif /* TCP_LISTEN_BACKLOG */ + + LWIP_ERROR("netconn_accept: invalid pointer", (new_conn != NULL), return ERR_ARG;); + *new_conn = NULL; + LWIP_ERROR("netconn_accept: invalid conn", (conn != NULL), return ERR_ARG;); + + /* NOTE: Although the opengroup spec says a pending error shall be returned to + send/recv/getsockopt(SO_ERROR) only, we return it for listening + connections also, to handle embedded-system errors */ + err = netconn_err(conn); + if (err != ERR_OK) { + /* return pending error */ + return err; + } + if (!NETCONN_ACCEPTMBOX_WAITABLE(conn)) { + /* don't accept if closed: this might block the application task + waiting on acceptmbox forever! */ + return ERR_CLSD; + } + + API_MSG_VAR_ALLOC_ACCEPT(msg); + + NETCONN_MBOX_WAITING_INC(conn); + if (netconn_is_nonblocking(conn)) { + if (sys_arch_mbox_tryfetch(&conn->acceptmbox, &accept_ptr) == SYS_ARCH_TIMEOUT) { + API_MSG_VAR_FREE_ACCEPT(msg); + NETCONN_MBOX_WAITING_DEC(conn); + return ERR_WOULDBLOCK; + } + } else { +#if LWIP_SO_RCVTIMEO + if (sys_arch_mbox_fetch(&conn->acceptmbox, &accept_ptr, conn->recv_timeout) == SYS_ARCH_TIMEOUT) { + API_MSG_VAR_FREE_ACCEPT(msg); + NETCONN_MBOX_WAITING_DEC(conn); + return ERR_TIMEOUT; + } +#else + sys_arch_mbox_fetch(&conn->acceptmbox, &accept_ptr, 0); +#endif /* LWIP_SO_RCVTIMEO*/ + } + NETCONN_MBOX_WAITING_DEC(conn); +#if LWIP_NETCONN_FULLDUPLEX + if (conn->flags & NETCONN_FLAG_MBOXINVALID) { + if (lwip_netconn_is_deallocated_msg(accept_ptr)) { + /* the netconn has been closed from another thread */ + API_MSG_VAR_FREE_ACCEPT(msg); + return ERR_CONN; + } + } +#endif + + /* Register event with callback */ + API_EVENT(conn, NETCONN_EVT_RCVMINUS, 0); + + if (lwip_netconn_is_err_msg(accept_ptr, &err)) { + /* a connection has been aborted: e.g. out of pcbs or out of netconns during accept */ + API_MSG_VAR_FREE_ACCEPT(msg); + return err; + } + if (accept_ptr == NULL) { + /* connection has been aborted */ + API_MSG_VAR_FREE_ACCEPT(msg); + return ERR_CLSD; + } + newconn = (struct netconn *)accept_ptr; +#if TCP_LISTEN_BACKLOG + /* Let the stack know that we have accepted the connection. */ + API_MSG_VAR_REF(msg).conn = newconn; + /* don't care for the return value of lwip_netconn_do_recv */ + netconn_apimsg(lwip_netconn_do_accepted, &API_MSG_VAR_REF(msg)); + API_MSG_VAR_FREE(msg); +#endif /* TCP_LISTEN_BACKLOG */ + + *new_conn = newconn; + /* don't set conn->last_err: it's only ERR_OK, anyway */ + return ERR_OK; +#else /* LWIP_TCP */ + LWIP_UNUSED_ARG(conn); + LWIP_UNUSED_ARG(new_conn); + return ERR_ARG; +#endif /* LWIP_TCP */ +} + +/** + * @ingroup netconn_common + * Receive data: actual implementation that doesn't care whether pbuf or netbuf + * is received (this is internal, it's just here for describing common errors) + * + * @param conn the netconn from which to receive data + * @param new_buf pointer where a new pbuf/netbuf is stored when received data + * @param apiflags flags that control function behaviour. For now only: + * - NETCONN_DONTBLOCK: only read data that is available now, don't wait for more data + * @return ERR_OK if data has been received, an error code otherwise (timeout, + * memory error or another error) + * ERR_CONN if not connected + * ERR_CLSD if TCP connection has been closed + * ERR_WOULDBLOCK if the netconn is nonblocking but would block to wait for data + * ERR_TIMEOUT if the netconn has a receive timeout and no data was received + */ +static err_t +netconn_recv_data(struct netconn *conn, void **new_buf, u8_t apiflags) +{ + void *buf = NULL; + u16_t len; + + LWIP_ERROR("netconn_recv: invalid pointer", (new_buf != NULL), return ERR_ARG;); + *new_buf = NULL; + LWIP_ERROR("netconn_recv: invalid conn", (conn != NULL), return ERR_ARG;); + + if (!NETCONN_RECVMBOX_WAITABLE(conn)) { + err_t err = netconn_err(conn); + if (err != ERR_OK) { + /* return pending error */ + return err; + } + return ERR_CONN; + } + + NETCONN_MBOX_WAITING_INC(conn); + if (netconn_is_nonblocking(conn) || (apiflags & NETCONN_DONTBLOCK) || + (conn->flags & NETCONN_FLAG_MBOXCLOSED) || (conn->pending_err != ERR_OK)) { + if (sys_arch_mbox_tryfetch(&conn->recvmbox, &buf) == SYS_ARCH_TIMEOUT) { + err_t err; + NETCONN_MBOX_WAITING_DEC(conn); + err = netconn_err(conn); + if (err != ERR_OK) { + /* return pending error */ + return err; + } + if (conn->flags & NETCONN_FLAG_MBOXCLOSED) { + return ERR_CONN; + } + return ERR_WOULDBLOCK; + } + } else { +#if LWIP_SO_RCVTIMEO + if (sys_arch_mbox_fetch(&conn->recvmbox, &buf, conn->recv_timeout) == SYS_ARCH_TIMEOUT) { + NETCONN_MBOX_WAITING_DEC(conn); + return ERR_TIMEOUT; + } +#else + sys_arch_mbox_fetch(&conn->recvmbox, &buf, 0); +#endif /* LWIP_SO_RCVTIMEO*/ + } + NETCONN_MBOX_WAITING_DEC(conn); +#if LWIP_NETCONN_FULLDUPLEX + if (conn->flags & NETCONN_FLAG_MBOXINVALID) { + if (lwip_netconn_is_deallocated_msg(buf)) { + /* the netconn has been closed from another thread */ + API_MSG_VAR_FREE_ACCEPT(msg); + return ERR_CONN; + } + } +#endif + +#if LWIP_TCP +#if (LWIP_UDP || LWIP_RAW) + if (NETCONNTYPE_GROUP(conn->type) == NETCONN_TCP) +#endif /* (LWIP_UDP || LWIP_RAW) */ + { + err_t err; + /* Check if this is an error message or a pbuf */ + if (lwip_netconn_is_err_msg(buf, &err)) { + /* new_buf has been zeroed above already */ + if (err == ERR_CLSD) { + /* connection closed translates to ERR_OK with *new_buf == NULL */ + return ERR_OK; + } + return err; + } + len = ((struct pbuf *)buf)->tot_len; + } +#endif /* LWIP_TCP */ +#if LWIP_TCP && (LWIP_UDP || LWIP_RAW) + else +#endif /* LWIP_TCP && (LWIP_UDP || LWIP_RAW) */ +#if (LWIP_UDP || LWIP_RAW) + { + LWIP_ASSERT("buf != NULL", buf != NULL); + len = netbuf_len((struct netbuf *)buf); + } +#endif /* (LWIP_UDP || LWIP_RAW) */ + +#if LWIP_SO_RCVBUF + SYS_ARCH_DEC(conn->recv_avail, len); +#endif /* LWIP_SO_RCVBUF */ + /* Register event with callback */ + API_EVENT(conn, NETCONN_EVT_RCVMINUS, len); + + LWIP_DEBUGF(API_LIB_DEBUG, ("netconn_recv_data: received %p, len=%"U16_F"\n", buf, len)); + + *new_buf = buf; + /* don't set conn->last_err: it's only ERR_OK, anyway */ + return ERR_OK; +} + +#if LWIP_TCP +static err_t +netconn_tcp_recvd_msg(struct netconn *conn, size_t len, struct api_msg *msg) +{ + LWIP_ERROR("netconn_recv_tcp_pbuf: invalid conn", (conn != NULL) && + NETCONNTYPE_GROUP(netconn_type(conn)) == NETCONN_TCP, return ERR_ARG;); + + msg->conn = conn; + msg->msg.r.len = len; + + return netconn_apimsg(lwip_netconn_do_recv, msg); +} + +err_t +netconn_tcp_recvd(struct netconn *conn, size_t len) +{ + err_t err; + API_MSG_VAR_DECLARE(msg); + LWIP_ERROR("netconn_recv_tcp_pbuf: invalid conn", (conn != NULL) && + NETCONNTYPE_GROUP(netconn_type(conn)) == NETCONN_TCP, return ERR_ARG;); + + API_MSG_VAR_ALLOC(msg); + err = netconn_tcp_recvd_msg(conn, len, &API_VAR_REF(msg)); + API_MSG_VAR_FREE(msg); + return err; +} + +static err_t +netconn_recv_data_tcp(struct netconn *conn, struct pbuf **new_buf, u8_t apiflags) +{ + err_t err; + struct pbuf *buf; + API_MSG_VAR_DECLARE(msg); +#if LWIP_MPU_COMPATIBLE + msg = NULL; +#endif + + if (!NETCONN_RECVMBOX_WAITABLE(conn)) { + /* This only happens when calling this function more than once *after* receiving FIN */ + return ERR_CONN; + } + if (netconn_is_flag_set(conn, NETCONN_FIN_RX_PENDING)) { + netconn_clear_flags(conn, NETCONN_FIN_RX_PENDING); + goto handle_fin; + } + + if (!(apiflags & NETCONN_NOAUTORCVD)) { + /* need to allocate API message here so empty message pool does not result in event loss + * see bug #47512: MPU_COMPATIBLE may fail on empty pool */ + API_MSG_VAR_ALLOC(msg); + } + + err = netconn_recv_data(conn, (void **)new_buf, apiflags); + if (err != ERR_OK) { + if (!(apiflags & NETCONN_NOAUTORCVD)) { + API_MSG_VAR_FREE(msg); + } + return err; + } + buf = *new_buf; + if (!(apiflags & NETCONN_NOAUTORCVD)) { + /* Let the stack know that we have taken the data. */ + u16_t len = buf ? buf->tot_len : 1; + /* don't care for the return value of lwip_netconn_do_recv */ + /* @todo: this should really be fixed, e.g. by retrying in poll on error */ + netconn_tcp_recvd_msg(conn, len, &API_VAR_REF(msg)); + API_MSG_VAR_FREE(msg); + } + + /* If we are closed, we indicate that we no longer wish to use the socket */ + if (buf == NULL) { + if (apiflags & NETCONN_NOFIN) { + /* received a FIN but the caller cannot handle it right now: + re-enqueue it and return "no data" */ + netconn_set_flags(conn, NETCONN_FIN_RX_PENDING); + return ERR_WOULDBLOCK; + } else { +handle_fin: + API_EVENT(conn, NETCONN_EVT_RCVMINUS, 0); + if (conn->pcb.ip == NULL) { + /* race condition: RST during recv */ + err = netconn_err(conn); + if (err != ERR_OK) { + return err; + } + return ERR_RST; + } + /* RX side is closed, so deallocate the recvmbox */ + netconn_close_shutdown(conn, NETCONN_SHUT_RD); + /* Don' store ERR_CLSD as conn->err since we are only half-closed */ + return ERR_CLSD; + } + } + return err; +} + +/** + * @ingroup netconn_tcp + * Receive data (in form of a pbuf) from a TCP netconn + * + * @param conn the netconn from which to receive data + * @param new_buf pointer where a new pbuf is stored when received data + * @return ERR_OK if data has been received, an error code otherwise (timeout, + * memory error or another error, @see netconn_recv_data) + * ERR_ARG if conn is not a TCP netconn + */ +err_t +netconn_recv_tcp_pbuf(struct netconn *conn, struct pbuf **new_buf) +{ + LWIP_ERROR("netconn_recv_tcp_pbuf: invalid conn", (conn != NULL) && + NETCONNTYPE_GROUP(netconn_type(conn)) == NETCONN_TCP, return ERR_ARG;); + + return netconn_recv_data_tcp(conn, new_buf, 0); +} + +/** + * @ingroup netconn_tcp + * Receive data (in form of a pbuf) from a TCP netconn + * + * @param conn the netconn from which to receive data + * @param new_buf pointer where a new pbuf is stored when received data + * @param apiflags flags that control function behaviour. For now only: + * - NETCONN_DONTBLOCK: only read data that is available now, don't wait for more data + * @return ERR_OK if data has been received, an error code otherwise (timeout, + * memory error or another error, @see netconn_recv_data) + * ERR_ARG if conn is not a TCP netconn + */ +err_t +netconn_recv_tcp_pbuf_flags(struct netconn *conn, struct pbuf **new_buf, u8_t apiflags) +{ + LWIP_ERROR("netconn_recv_tcp_pbuf: invalid conn", (conn != NULL) && + NETCONNTYPE_GROUP(netconn_type(conn)) == NETCONN_TCP, return ERR_ARG;); + + return netconn_recv_data_tcp(conn, new_buf, apiflags); +} +#endif /* LWIP_TCP */ + +/** + * Receive data (in form of a netbuf) from a UDP or RAW netconn + * + * @param conn the netconn from which to receive data + * @param new_buf pointer where a new netbuf is stored when received data + * @return ERR_OK if data has been received, an error code otherwise (timeout, + * memory error or another error) + * ERR_ARG if conn is not a UDP/RAW netconn + */ +err_t +netconn_recv_udp_raw_netbuf(struct netconn *conn, struct netbuf **new_buf) +{ + LWIP_ERROR("netconn_recv_udp_raw_netbuf: invalid conn", (conn != NULL) && + NETCONNTYPE_GROUP(netconn_type(conn)) != NETCONN_TCP, return ERR_ARG;); + + return netconn_recv_data(conn, (void **)new_buf, 0); +} + +/** + * Receive data (in form of a netbuf) from a UDP or RAW netconn + * + * @param conn the netconn from which to receive data + * @param new_buf pointer where a new netbuf is stored when received data + * @param apiflags flags that control function behaviour. For now only: + * - NETCONN_DONTBLOCK: only read data that is available now, don't wait for more data + * @return ERR_OK if data has been received, an error code otherwise (timeout, + * memory error or another error) + * ERR_ARG if conn is not a UDP/RAW netconn + */ +err_t +netconn_recv_udp_raw_netbuf_flags(struct netconn *conn, struct netbuf **new_buf, u8_t apiflags) +{ + LWIP_ERROR("netconn_recv_udp_raw_netbuf: invalid conn", (conn != NULL) && + NETCONNTYPE_GROUP(netconn_type(conn)) != NETCONN_TCP, return ERR_ARG;); + + return netconn_recv_data(conn, (void **)new_buf, apiflags); +} + +/** + * @ingroup netconn_common + * Receive data (in form of a netbuf containing a packet buffer) from a netconn + * + * @param conn the netconn from which to receive data + * @param new_buf pointer where a new netbuf is stored when received data + * @return ERR_OK if data has been received, an error code otherwise (timeout, + * memory error or another error) + */ +err_t +netconn_recv(struct netconn *conn, struct netbuf **new_buf) +{ +#if LWIP_TCP + struct netbuf *buf = NULL; + err_t err; +#endif /* LWIP_TCP */ + + LWIP_ERROR("netconn_recv: invalid pointer", (new_buf != NULL), return ERR_ARG;); + *new_buf = NULL; + LWIP_ERROR("netconn_recv: invalid conn", (conn != NULL), return ERR_ARG;); + +#if LWIP_TCP +#if (LWIP_UDP || LWIP_RAW) + if (NETCONNTYPE_GROUP(conn->type) == NETCONN_TCP) +#endif /* (LWIP_UDP || LWIP_RAW) */ + { + struct pbuf *p = NULL; + /* This is not a listening netconn, since recvmbox is set */ + + buf = (struct netbuf *)memp_malloc(MEMP_NETBUF); + if (buf == NULL) { + return ERR_MEM; + } + + err = netconn_recv_data_tcp(conn, &p, 0); + if (err != ERR_OK) { + memp_free(MEMP_NETBUF, buf); + return err; + } + LWIP_ASSERT("p != NULL", p != NULL); + + buf->p = p; + buf->ptr = p; + buf->port = 0; + ip_addr_set_zero(&buf->addr); + *new_buf = buf; + /* don't set conn->last_err: it's only ERR_OK, anyway */ + return ERR_OK; + } +#endif /* LWIP_TCP */ +#if LWIP_TCP && (LWIP_UDP || LWIP_RAW) + else +#endif /* LWIP_TCP && (LWIP_UDP || LWIP_RAW) */ + { +#if (LWIP_UDP || LWIP_RAW) + return netconn_recv_data(conn, (void **)new_buf, 0); +#endif /* (LWIP_UDP || LWIP_RAW) */ + } +} + +/** + * @ingroup netconn_udp + * Send data (in form of a netbuf) to a specific remote IP address and port. + * Only to be used for UDP and RAW netconns (not TCP). + * + * @param conn the netconn over which to send data + * @param buf a netbuf containing the data to send + * @param addr the remote IP address to which to send the data + * @param port the remote port to which to send the data + * @return ERR_OK if data was sent, any other err_t on error + */ +err_t +netconn_sendto(struct netconn *conn, struct netbuf *buf, const ip_addr_t *addr, u16_t port) +{ + if (buf != NULL) { + ip_addr_set(&buf->addr, addr); + buf->port = port; + return netconn_send(conn, buf); + } + return ERR_VAL; +} + +/** + * @ingroup netconn_udp + * Send data over a UDP or RAW netconn (that is already connected). + * + * @param conn the UDP or RAW netconn over which to send data + * @param buf a netbuf containing the data to send + * @return ERR_OK if data was sent, any other err_t on error + */ +err_t +netconn_send(struct netconn *conn, struct netbuf *buf) +{ + API_MSG_VAR_DECLARE(msg); + err_t err; + + LWIP_ERROR("netconn_send: invalid conn", (conn != NULL), return ERR_ARG;); + + LWIP_DEBUGF(API_LIB_DEBUG, ("netconn_send: sending %"U16_F" bytes\n", buf->p->tot_len)); + + API_MSG_VAR_ALLOC(msg); + API_MSG_VAR_REF(msg).conn = conn; + API_MSG_VAR_REF(msg).msg.b = buf; + err = netconn_apimsg(lwip_netconn_do_send, &API_MSG_VAR_REF(msg)); + API_MSG_VAR_FREE(msg); + + return err; +} + +/** + * @ingroup netconn_tcp + * Send data over a TCP netconn. + * + * @param conn the TCP netconn over which to send data + * @param dataptr pointer to the application buffer that contains the data to send + * @param size size of the application data to send + * @param apiflags combination of following flags : + * - NETCONN_COPY: data will be copied into memory belonging to the stack + * - NETCONN_MORE: for TCP connection, PSH flag will be set on last segment sent + * - NETCONN_DONTBLOCK: only write the data if all data can be written at once + * @param bytes_written pointer to a location that receives the number of written bytes + * @return ERR_OK if data was sent, any other err_t on error + */ +err_t +netconn_write_partly(struct netconn *conn, const void *dataptr, size_t size, + u8_t apiflags, size_t *bytes_written) +{ + struct netvector vector; + vector.ptr = dataptr; + vector.len = size; + return netconn_write_vectors_partly(conn, &vector, 1, apiflags, bytes_written); +} + +/** + * Send vectorized data atomically over a TCP netconn. + * + * @param conn the TCP netconn over which to send data + * @param vectors array of vectors containing data to send + * @param vectorcnt number of vectors in the array + * @param apiflags combination of following flags : + * - NETCONN_COPY: data will be copied into memory belonging to the stack + * - NETCONN_MORE: for TCP connection, PSH flag will be set on last segment sent + * - NETCONN_DONTBLOCK: only write the data if all data can be written at once + * @param bytes_written pointer to a location that receives the number of written bytes + * @return ERR_OK if data was sent, any other err_t on error + */ +err_t +netconn_write_vectors_partly(struct netconn *conn, struct netvector *vectors, u16_t vectorcnt, + u8_t apiflags, size_t *bytes_written) +{ + API_MSG_VAR_DECLARE(msg); + err_t err; + u8_t dontblock; + size_t size; + int i; + + LWIP_ERROR("netconn_write: invalid conn", (conn != NULL), return ERR_ARG;); + LWIP_ERROR("netconn_write: invalid conn->type", (NETCONNTYPE_GROUP(conn->type) == NETCONN_TCP), return ERR_VAL;); + dontblock = netconn_is_nonblocking(conn) || (apiflags & NETCONN_DONTBLOCK); +#if LWIP_SO_SNDTIMEO + if (conn->send_timeout != 0) { + dontblock = 1; + } +#endif /* LWIP_SO_SNDTIMEO */ + if (dontblock && !bytes_written) { + /* This implies netconn_write() cannot be used for non-blocking send, since + it has no way to return the number of bytes written. */ + return ERR_VAL; + } + + /* sum up the total size */ + size = 0; + for (i = 0; i < vectorcnt; i++) { + size += vectors[i].len; + if (size < vectors[i].len) { + /* overflow */ + return ERR_VAL; + } + } + if (size == 0) { + return ERR_OK; + } else if (size > SSIZE_MAX) { + ssize_t limited; + /* this is required by the socket layer (cannot send full size_t range) */ + if (!bytes_written) { + return ERR_VAL; + } + /* limit the amount of data to send */ + limited = SSIZE_MAX; + size = (size_t)limited; + } + + API_MSG_VAR_ALLOC(msg); + /* non-blocking write sends as much */ + API_MSG_VAR_REF(msg).conn = conn; + API_MSG_VAR_REF(msg).msg.w.vector = vectors; + API_MSG_VAR_REF(msg).msg.w.vector_cnt = vectorcnt; + API_MSG_VAR_REF(msg).msg.w.vector_off = 0; + API_MSG_VAR_REF(msg).msg.w.apiflags = apiflags; + API_MSG_VAR_REF(msg).msg.w.len = size; + API_MSG_VAR_REF(msg).msg.w.offset = 0; +#if LWIP_SO_SNDTIMEO + if (conn->send_timeout != 0) { + /* get the time we started, which is later compared to + sys_now() + conn->send_timeout */ + API_MSG_VAR_REF(msg).msg.w.time_started = sys_now(); + } else { + API_MSG_VAR_REF(msg).msg.w.time_started = 0; + } +#endif /* LWIP_SO_SNDTIMEO */ + + /* For locking the core: this _can_ be delayed on low memory/low send buffer, + but if it is, this is done inside api_msg.c:do_write(), so we can use the + non-blocking version here. */ + err = netconn_apimsg(lwip_netconn_do_write, &API_MSG_VAR_REF(msg)); + if (err == ERR_OK) { + if (bytes_written != NULL) { + *bytes_written = API_MSG_VAR_REF(msg).msg.w.offset; + } + /* for blocking, check all requested bytes were written, NOTE: send_timeout is + treated as dontblock (see dontblock assignment above) */ + if (!dontblock) { + LWIP_ASSERT("do_write failed to write all bytes", API_MSG_VAR_REF(msg).msg.w.offset == size); + } + } + API_MSG_VAR_FREE(msg); + + return err; +} + +/** + * @ingroup netconn_tcp + * Close or shutdown a TCP netconn (doesn't delete it). + * + * @param conn the TCP netconn to close or shutdown + * @param how fully close or only shutdown one side? + * @return ERR_OK if the netconn was closed, any other err_t on error + */ +static err_t +netconn_close_shutdown(struct netconn *conn, u8_t how) +{ + API_MSG_VAR_DECLARE(msg); + err_t err; + LWIP_UNUSED_ARG(how); + + LWIP_ERROR("netconn_close: invalid conn", (conn != NULL), return ERR_ARG;); + + API_MSG_VAR_ALLOC(msg); + API_MSG_VAR_REF(msg).conn = conn; +#if LWIP_TCP + /* shutting down both ends is the same as closing */ + API_MSG_VAR_REF(msg).msg.sd.shut = how; +#if LWIP_SO_SNDTIMEO || LWIP_SO_LINGER + /* get the time we started, which is later compared to + sys_now() + conn->send_timeout */ + API_MSG_VAR_REF(msg).msg.sd.time_started = sys_now(); +#else /* LWIP_SO_SNDTIMEO || LWIP_SO_LINGER */ + API_MSG_VAR_REF(msg).msg.sd.polls_left = + ((LWIP_TCP_CLOSE_TIMEOUT_MS_DEFAULT + TCP_SLOW_INTERVAL - 1) / TCP_SLOW_INTERVAL) + 1; +#endif /* LWIP_SO_SNDTIMEO || LWIP_SO_LINGER */ +#endif /* LWIP_TCP */ + err = netconn_apimsg(lwip_netconn_do_close, &API_MSG_VAR_REF(msg)); + API_MSG_VAR_FREE(msg); + + return err; +} + +/** + * @ingroup netconn_tcp + * Close a TCP netconn (doesn't delete it). + * + * @param conn the TCP netconn to close + * @return ERR_OK if the netconn was closed, any other err_t on error + */ +err_t +netconn_close(struct netconn *conn) +{ + /* shutting down both ends is the same as closing */ + return netconn_close_shutdown(conn, NETCONN_SHUT_RDWR); +} + +/** + * @ingroup netconn_common + * Get and reset pending error on a netconn + * + * @param conn the netconn to get the error from + * @return and pending error or ERR_OK if no error was pending + */ +err_t +netconn_err(struct netconn *conn) +{ + err_t err; + SYS_ARCH_DECL_PROTECT(lev); + if (conn == NULL) { + return ERR_OK; + } + SYS_ARCH_PROTECT(lev); + err = conn->pending_err; + conn->pending_err = ERR_OK; + SYS_ARCH_UNPROTECT(lev); + return err; +} + +/** + * @ingroup netconn_tcp + * Shut down one or both sides of a TCP netconn (doesn't delete it). + * + * @param conn the TCP netconn to shut down + * @param shut_rx shut down the RX side (no more read possible after this) + * @param shut_tx shut down the TX side (no more write possible after this) + * @return ERR_OK if the netconn was closed, any other err_t on error + */ +err_t +netconn_shutdown(struct netconn *conn, u8_t shut_rx, u8_t shut_tx) +{ + return netconn_close_shutdown(conn, (u8_t)((shut_rx ? NETCONN_SHUT_RD : 0) | (shut_tx ? NETCONN_SHUT_WR : 0))); +} + +#if LWIP_IGMP || (LWIP_IPV6 && LWIP_IPV6_MLD) +/** + * @ingroup netconn_udp + * Join multicast groups for UDP netconns. + * + * @param conn the UDP netconn for which to change multicast addresses + * @param multiaddr IP address of the multicast group to join or leave + * @param netif_addr the IP address of the network interface on which to send + * the igmp message + * @param join_or_leave flag whether to send a join- or leave-message + * @return ERR_OK if the action was taken, any err_t on error + */ +err_t +netconn_join_leave_group(struct netconn *conn, + const ip_addr_t *multiaddr, + const ip_addr_t *netif_addr, + enum netconn_igmp join_or_leave) +{ + API_MSG_VAR_DECLARE(msg); + err_t err; + + LWIP_ERROR("netconn_join_leave_group: invalid conn", (conn != NULL), return ERR_ARG;); + + API_MSG_VAR_ALLOC(msg); + +#if LWIP_IPV4 + /* Don't propagate NULL pointer (IP_ADDR_ANY alias) to subsequent functions */ + if (multiaddr == NULL) { + multiaddr = IP4_ADDR_ANY; + } + if (netif_addr == NULL) { + netif_addr = IP4_ADDR_ANY; + } +#endif /* LWIP_IPV4 */ + + API_MSG_VAR_REF(msg).conn = conn; + API_MSG_VAR_REF(msg).msg.jl.multiaddr = API_MSG_VAR_REF(multiaddr); + API_MSG_VAR_REF(msg).msg.jl.netif_addr = API_MSG_VAR_REF(netif_addr); + API_MSG_VAR_REF(msg).msg.jl.join_or_leave = join_or_leave; + err = netconn_apimsg(lwip_netconn_do_join_leave_group, &API_MSG_VAR_REF(msg)); + API_MSG_VAR_FREE(msg); + + return err; +} +/** + * @ingroup netconn_udp + * Join multicast groups for UDP netconns. + * + * @param conn the UDP netconn for which to change multicast addresses + * @param multiaddr IP address of the multicast group to join or leave + * @param if_idx the index of the netif + * @param join_or_leave flag whether to send a join- or leave-message + * @return ERR_OK if the action was taken, any err_t on error + */ +err_t +netconn_join_leave_group_netif(struct netconn *conn, + const ip_addr_t *multiaddr, + u8_t if_idx, + enum netconn_igmp join_or_leave) +{ + API_MSG_VAR_DECLARE(msg); + err_t err; + + LWIP_ERROR("netconn_join_leave_group: invalid conn", (conn != NULL), return ERR_ARG;); + + API_MSG_VAR_ALLOC(msg); + +#if LWIP_IPV4 + /* Don't propagate NULL pointer (IP_ADDR_ANY alias) to subsequent functions */ + if (multiaddr == NULL) { + multiaddr = IP4_ADDR_ANY; + } + if (if_idx == NETIF_NO_INDEX) { + return ERR_IF; + } +#endif /* LWIP_IPV4 */ + + API_MSG_VAR_REF(msg).conn = conn; + API_MSG_VAR_REF(msg).msg.jl.multiaddr = API_MSG_VAR_REF(multiaddr); + API_MSG_VAR_REF(msg).msg.jl.if_idx = if_idx; + API_MSG_VAR_REF(msg).msg.jl.join_or_leave = join_or_leave; + err = netconn_apimsg(lwip_netconn_do_join_leave_group_netif, &API_MSG_VAR_REF(msg)); + API_MSG_VAR_FREE(msg); + + return err; +} +#endif /* LWIP_IGMP || (LWIP_IPV6 && LWIP_IPV6_MLD) */ + +#if LWIP_DNS +/** + * @ingroup netconn_common + * Execute a DNS query, only one IP address is returned + * + * @param name a string representation of the DNS host name to query + * @param addr a preallocated ip_addr_t where to store the resolved IP address + * @param dns_addrtype IP address type (IPv4 / IPv6) + * @return ERR_OK: resolving succeeded + * ERR_MEM: memory error, try again later + * ERR_ARG: dns client not initialized or invalid hostname + * ERR_VAL: dns server response was invalid + */ +#if LWIP_IPV4 && LWIP_IPV6 +err_t +netconn_gethostbyname_addrtype(const char *name, ip_addr_t *addr, u8_t dns_addrtype) +#else +err_t +netconn_gethostbyname(const char *name, ip_addr_t *addr) +#endif +{ + API_VAR_DECLARE(struct dns_api_msg, msg); +#if !LWIP_MPU_COMPATIBLE + sys_sem_t sem; +#endif /* LWIP_MPU_COMPATIBLE */ + err_t err; + err_t cberr; + + LWIP_ERROR("netconn_gethostbyname: invalid name", (name != NULL), return ERR_ARG;); + LWIP_ERROR("netconn_gethostbyname: invalid addr", (addr != NULL), return ERR_ARG;); +#if LWIP_MPU_COMPATIBLE + if (strlen(name) >= DNS_MAX_NAME_LENGTH) { + return ERR_ARG; + } +#endif + +#ifdef LWIP_HOOK_NETCONN_EXTERNAL_RESOLVE +#if LWIP_IPV4 && LWIP_IPV6 + if (LWIP_HOOK_NETCONN_EXTERNAL_RESOLVE(name, addr, dns_addrtype, &err)) { +#else + if (LWIP_HOOK_NETCONN_EXTERNAL_RESOLVE(name, addr, NETCONN_DNS_DEFAULT, &err)) { +#endif /* LWIP_IPV4 && LWIP_IPV6 */ + return err; + } +#endif /* LWIP_HOOK_NETCONN_EXTERNAL_RESOLVE */ + + API_VAR_ALLOC(struct dns_api_msg, MEMP_DNS_API_MSG, msg, ERR_MEM); +#if LWIP_MPU_COMPATIBLE + strncpy(API_VAR_REF(msg).name, name, DNS_MAX_NAME_LENGTH - 1); + API_VAR_REF(msg).name[DNS_MAX_NAME_LENGTH - 1] = 0; +#else /* LWIP_MPU_COMPATIBLE */ + msg.err = &err; + msg.sem = &sem; + API_VAR_REF(msg).addr = API_VAR_REF(addr); + API_VAR_REF(msg).name = name; +#endif /* LWIP_MPU_COMPATIBLE */ +#if LWIP_IPV4 && LWIP_IPV6 + API_VAR_REF(msg).dns_addrtype = dns_addrtype; +#endif /* LWIP_IPV4 && LWIP_IPV6 */ +#if LWIP_NETCONN_SEM_PER_THREAD + API_VAR_REF(msg).sem = LWIP_NETCONN_THREAD_SEM_GET(); +#else /* LWIP_NETCONN_SEM_PER_THREAD*/ + err = sys_sem_new(API_EXPR_REF(API_VAR_REF(msg).sem), 0); + if (err != ERR_OK) { + API_VAR_FREE(MEMP_DNS_API_MSG, msg); + return err; + } +#endif /* LWIP_NETCONN_SEM_PER_THREAD */ + + cberr = tcpip_send_msg_wait_sem(lwip_netconn_do_gethostbyname, &API_VAR_REF(msg), API_EXPR_REF(API_VAR_REF(msg).sem)); +#if !LWIP_NETCONN_SEM_PER_THREAD + sys_sem_free(API_EXPR_REF(API_VAR_REF(msg).sem)); +#endif /* !LWIP_NETCONN_SEM_PER_THREAD */ + if (cberr != ERR_OK) { + API_VAR_FREE(MEMP_DNS_API_MSG, msg); + return cberr; + } + +#if LWIP_MPU_COMPATIBLE + *addr = msg->addr; + err = msg->err; +#endif /* LWIP_MPU_COMPATIBLE */ + + API_VAR_FREE(MEMP_DNS_API_MSG, msg); + return err; +} +#endif /* LWIP_DNS*/ + +#if LWIP_NETCONN_SEM_PER_THREAD +void +netconn_thread_init(void) +{ + sys_sem_t *sem = LWIP_NETCONN_THREAD_SEM_GET(); + if ((sem == NULL) || !sys_sem_valid(sem)) { + /* call alloc only once */ + LWIP_NETCONN_THREAD_SEM_ALLOC(); + LWIP_ASSERT("LWIP_NETCONN_THREAD_SEM_ALLOC() failed", sys_sem_valid(LWIP_NETCONN_THREAD_SEM_GET())); + } +} + +void +netconn_thread_cleanup(void) +{ + sys_sem_t *sem = LWIP_NETCONN_THREAD_SEM_GET(); + if ((sem != NULL) && sys_sem_valid(sem)) { + /* call free only once */ + LWIP_NETCONN_THREAD_SEM_FREE(); + } +} +#endif /* LWIP_NETCONN_SEM_PER_THREAD */ + +#endif /* LWIP_NETCONN */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/api/api_msg.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/api/api_msg.c new file mode 100644 index 0000000000000000000000000000000000000000..39531024ec3ba54ef98ec344623dba35f140a1ff --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/api/api_msg.c @@ -0,0 +1,2173 @@ +/** + * @file + * Sequential API Internal module + * + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#include "lwip/opt.h" + +#if LWIP_NETCONN /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/priv/api_msg.h" + +#include "lwip/ip.h" +#include "lwip/ip_addr.h" +#include "lwip/udp.h" +#include "lwip/tcp.h" +#include "lwip/raw.h" + +#include "lwip/memp.h" +#include "lwip/igmp.h" +#include "lwip/dns.h" +#include "lwip/mld6.h" +#include "lwip/priv/tcpip_priv.h" + +#include + +/* netconns are polled once per second (e.g. continue write on memory error) */ +#define NETCONN_TCP_POLL_INTERVAL 2 + +#define SET_NONBLOCKING_CONNECT(conn, val) do { if (val) { \ + netconn_set_flags(conn, NETCONN_FLAG_IN_NONBLOCKING_CONNECT); \ +} else { \ + netconn_clear_flags(conn, NETCONN_FLAG_IN_NONBLOCKING_CONNECT); }} while(0) +#define IN_NONBLOCKING_CONNECT(conn) netconn_is_flag_set(conn, NETCONN_FLAG_IN_NONBLOCKING_CONNECT) + +#if LWIP_NETCONN_FULLDUPLEX +#define NETCONN_MBOX_VALID(conn, mbox) (sys_mbox_valid(mbox) && ((conn->flags & NETCONN_FLAG_MBOXINVALID) == 0)) +#else +#define NETCONN_MBOX_VALID(conn, mbox) sys_mbox_valid(mbox) +#endif + +/* forward declarations */ +#if LWIP_TCP +#if LWIP_TCPIP_CORE_LOCKING +#define WRITE_DELAYED , 1 +#define WRITE_DELAYED_PARAM , u8_t delayed +#else /* LWIP_TCPIP_CORE_LOCKING */ +#define WRITE_DELAYED +#define WRITE_DELAYED_PARAM +#endif /* LWIP_TCPIP_CORE_LOCKING */ +static err_t lwip_netconn_do_writemore(struct netconn *conn WRITE_DELAYED_PARAM); +static err_t lwip_netconn_do_close_internal(struct netconn *conn WRITE_DELAYED_PARAM); +#endif + +static void netconn_drain(struct netconn *conn); + +#if LWIP_TCPIP_CORE_LOCKING +#define TCPIP_APIMSG_ACK(m) +#else /* LWIP_TCPIP_CORE_LOCKING */ +#define TCPIP_APIMSG_ACK(m) do { sys_sem_signal(LWIP_API_MSG_SEM(m)); } while(0) +#endif /* LWIP_TCPIP_CORE_LOCKING */ + +#if LWIP_NETCONN_FULLDUPLEX +const u8_t netconn_deleted = 0; + +int +lwip_netconn_is_deallocated_msg(void *msg) +{ + if (msg == &netconn_deleted) { + return 1; + } + return 0; +} +#endif /* LWIP_NETCONN_FULLDUPLEX */ + +#if LWIP_TCP +const u8_t netconn_aborted = 0; +const u8_t netconn_reset = 0; +const u8_t netconn_closed = 0; + +/** Translate an error to a unique void* passed via an mbox */ +static void * +lwip_netconn_err_to_msg(err_t err) +{ + switch (err) { + case ERR_ABRT: + return LWIP_CONST_CAST(void *, &netconn_aborted); + case ERR_RST: + return LWIP_CONST_CAST(void *, &netconn_reset); + case ERR_CLSD: + return LWIP_CONST_CAST(void *, &netconn_closed); + default: + LWIP_ASSERT("unhandled error", err == ERR_OK); + return NULL; + } +} + +int +lwip_netconn_is_err_msg(void *msg, err_t *err) +{ + LWIP_ASSERT("err != NULL", err != NULL); + + if (msg == &netconn_aborted) { + *err = ERR_ABRT; + return 1; + } else if (msg == &netconn_reset) { + *err = ERR_RST; + return 1; + } else if (msg == &netconn_closed) { + *err = ERR_CLSD; + return 1; + } + return 0; +} +#endif /* LWIP_TCP */ + + +#if LWIP_RAW +/** + * Receive callback function for RAW netconns. + * Doesn't 'eat' the packet, only copies it and sends it to + * conn->recvmbox + * + * @see raw.h (struct raw_pcb.recv) for parameters and return value + */ +static u8_t +recv_raw(void *arg, struct raw_pcb *pcb, struct pbuf *p, + const ip_addr_t *addr) +{ + struct pbuf *q; + struct netbuf *buf; + struct netconn *conn; + + LWIP_UNUSED_ARG(addr); + conn = (struct netconn *)arg; + + if ((conn != NULL) && NETCONN_MBOX_VALID(conn, &conn->recvmbox)) { +#if LWIP_SO_RCVBUF + int recv_avail; + SYS_ARCH_GET(conn->recv_avail, recv_avail); + if ((recv_avail + (int)(p->tot_len)) > conn->recv_bufsize) { + return 0; + } +#endif /* LWIP_SO_RCVBUF */ + /* copy the whole packet into new pbufs */ + q = pbuf_clone(PBUF_RAW, PBUF_RAM, p); + if (q != NULL) { + u16_t len; + buf = (struct netbuf *)memp_malloc(MEMP_NETBUF); + if (buf == NULL) { + pbuf_free(q); + return 0; + } + + buf->p = q; + buf->ptr = q; + ip_addr_copy(buf->addr, *ip_current_src_addr()); + buf->port = pcb->protocol; + + len = q->tot_len; + if (sys_mbox_trypost(&conn->recvmbox, buf) != ERR_OK) { + netbuf_delete(buf); + return 0; + } else { +#if LWIP_SO_RCVBUF + SYS_ARCH_INC(conn->recv_avail, len); +#endif /* LWIP_SO_RCVBUF */ + /* Register event with callback */ + API_EVENT(conn, NETCONN_EVT_RCVPLUS, len); + } + } + } + + return 0; /* do not eat the packet */ +} +#endif /* LWIP_RAW*/ + +#if LWIP_UDP +/** + * Receive callback function for UDP netconns. + * Posts the packet to conn->recvmbox or deletes it on memory error. + * + * @see udp.h (struct udp_pcb.recv) for parameters + */ +static void +recv_udp(void *arg, struct udp_pcb *pcb, struct pbuf *p, + const ip_addr_t *addr, u16_t port) +{ + struct netbuf *buf; + struct netconn *conn; + u16_t len; +#if LWIP_SO_RCVBUF + int recv_avail; +#endif /* LWIP_SO_RCVBUF */ + + LWIP_UNUSED_ARG(pcb); /* only used for asserts... */ + LWIP_ASSERT("recv_udp must have a pcb argument", pcb != NULL); + LWIP_ASSERT("recv_udp must have an argument", arg != NULL); + conn = (struct netconn *)arg; + + if (conn == NULL) { + pbuf_free(p); + return; + } + + LWIP_ASSERT("recv_udp: recv for wrong pcb!", conn->pcb.udp == pcb); + +#if LWIP_SO_RCVBUF + SYS_ARCH_GET(conn->recv_avail, recv_avail); + if (!NETCONN_MBOX_VALID(conn, &conn->recvmbox) || + ((recv_avail + (int)(p->tot_len)) > conn->recv_bufsize)) { +#else /* LWIP_SO_RCVBUF */ + if (!NETCONN_MBOX_VALID(conn, &conn->recvmbox)) { +#endif /* LWIP_SO_RCVBUF */ + pbuf_free(p); + return; + } + + buf = (struct netbuf *)memp_malloc(MEMP_NETBUF); + if (buf == NULL) { + pbuf_free(p); + return; + } else { + buf->p = p; + buf->ptr = p; + ip_addr_set(&buf->addr, addr); + buf->port = port; +#if LWIP_NETBUF_RECVINFO + if (conn->flags & NETCONN_FLAG_PKTINFO) { + /* get the UDP header - always in the first pbuf, ensured by udp_input */ + const struct udp_hdr *udphdr = (const struct udp_hdr *)ip_next_header_ptr(); + buf->flags = NETBUF_FLAG_DESTADDR; + ip_addr_set(&buf->toaddr, ip_current_dest_addr()); + buf->toport_chksum = udphdr->dest; + } +#endif /* LWIP_NETBUF_RECVINFO */ + } + + len = p->tot_len; + if (sys_mbox_trypost(&conn->recvmbox, buf) != ERR_OK) { + netbuf_delete(buf); + return; + } else { +#if LWIP_SO_RCVBUF + SYS_ARCH_INC(conn->recv_avail, len); +#endif /* LWIP_SO_RCVBUF */ + /* Register event with callback */ + API_EVENT(conn, NETCONN_EVT_RCVPLUS, len); + } +} +#endif /* LWIP_UDP */ + +#if LWIP_TCP +/** + * Receive callback function for TCP netconns. + * Posts the packet to conn->recvmbox, but doesn't delete it on errors. + * + * @see tcp.h (struct tcp_pcb.recv) for parameters and return value + */ +static err_t +recv_tcp(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err) +{ + struct netconn *conn; + u16_t len; + void *msg; + + LWIP_UNUSED_ARG(pcb); + LWIP_ASSERT("recv_tcp must have a pcb argument", pcb != NULL); + LWIP_ASSERT("recv_tcp must have an argument", arg != NULL); + LWIP_ASSERT("err != ERR_OK unhandled", err == ERR_OK); + LWIP_UNUSED_ARG(err); /* for LWIP_NOASSERT */ + conn = (struct netconn *)arg; + + if (conn == NULL) { + return ERR_VAL; + } + LWIP_ASSERT("recv_tcp: recv for wrong pcb!", conn->pcb.tcp == pcb); + + if (!NETCONN_MBOX_VALID(conn, &conn->recvmbox)) { + /* recvmbox already deleted */ + if (p != NULL) { + tcp_recved(pcb, p->tot_len); + pbuf_free(p); + } + return ERR_OK; + } + /* Unlike for UDP or RAW pcbs, don't check for available space + using recv_avail since that could break the connection + (data is already ACKed) */ + + if (p != NULL) { + msg = p; + len = p->tot_len; + } else { + msg = LWIP_CONST_CAST(void *, &netconn_closed); + len = 0; + } + + if (sys_mbox_trypost(&conn->recvmbox, msg) != ERR_OK) { + /* don't deallocate p: it is presented to us later again from tcp_fasttmr! */ + return ERR_MEM; + } else { +#if LWIP_SO_RCVBUF + SYS_ARCH_INC(conn->recv_avail, len); +#endif /* LWIP_SO_RCVBUF */ + /* Register event with callback */ + API_EVENT(conn, NETCONN_EVT_RCVPLUS, len); + } + + return ERR_OK; +} + +/** + * Poll callback function for TCP netconns. + * Wakes up an application thread that waits for a connection to close + * or data to be sent. The application thread then takes the + * appropriate action to go on. + * + * Signals the conn->sem. + * netconn_close waits for conn->sem if closing failed. + * + * @see tcp.h (struct tcp_pcb.poll) for parameters and return value + */ +static err_t +poll_tcp(void *arg, struct tcp_pcb *pcb) +{ + struct netconn *conn = (struct netconn *)arg; + + LWIP_UNUSED_ARG(pcb); + LWIP_ASSERT("conn != NULL", (conn != NULL)); + + if (conn->state == NETCONN_WRITE) { + lwip_netconn_do_writemore(conn WRITE_DELAYED); + } else if (conn->state == NETCONN_CLOSE) { +#if !LWIP_SO_SNDTIMEO && !LWIP_SO_LINGER + if (conn->current_msg && conn->current_msg->msg.sd.polls_left) { + conn->current_msg->msg.sd.polls_left--; + } +#endif /* !LWIP_SO_SNDTIMEO && !LWIP_SO_LINGER */ + lwip_netconn_do_close_internal(conn WRITE_DELAYED); + } + /* @todo: implement connect timeout here? */ + + /* Did a nonblocking write fail before? Then check available write-space. */ + if (conn->flags & NETCONN_FLAG_CHECK_WRITESPACE) { + /* If the queued byte- or pbuf-count drops below the configured low-water limit, + let select mark this pcb as writable again. */ + if ((conn->pcb.tcp != NULL) && (tcp_sndbuf(conn->pcb.tcp) > TCP_SNDLOWAT) && + (tcp_sndqueuelen(conn->pcb.tcp) < TCP_SNDQUEUELOWAT)) { + netconn_clear_flags(conn, NETCONN_FLAG_CHECK_WRITESPACE); + API_EVENT(conn, NETCONN_EVT_SENDPLUS, 0); + } + } + + return ERR_OK; +} + +/** + * Sent callback function for TCP netconns. + * Signals the conn->sem and calls API_EVENT. + * netconn_write waits for conn->sem if send buffer is low. + * + * @see tcp.h (struct tcp_pcb.sent) for parameters and return value + */ +static err_t +sent_tcp(void *arg, struct tcp_pcb *pcb, u16_t len) +{ + struct netconn *conn = (struct netconn *)arg; + + LWIP_UNUSED_ARG(pcb); + LWIP_ASSERT("conn != NULL", (conn != NULL)); + + if (conn) { + if (conn->state == NETCONN_WRITE) { + lwip_netconn_do_writemore(conn WRITE_DELAYED); + } else if (conn->state == NETCONN_CLOSE) { + lwip_netconn_do_close_internal(conn WRITE_DELAYED); + } + + /* If the queued byte- or pbuf-count drops below the configured low-water limit, + let select mark this pcb as writable again. */ + if ((conn->pcb.tcp != NULL) && (tcp_sndbuf(conn->pcb.tcp) > TCP_SNDLOWAT) && + (tcp_sndqueuelen(conn->pcb.tcp) < TCP_SNDQUEUELOWAT)) { + netconn_clear_flags(conn, NETCONN_FLAG_CHECK_WRITESPACE); + API_EVENT(conn, NETCONN_EVT_SENDPLUS, len); + } + } + + return ERR_OK; +} + +/** + * Error callback function for TCP netconns. + * Signals conn->sem, posts to all conn mboxes and calls API_EVENT. + * The application thread has then to decide what to do. + * + * @see tcp.h (struct tcp_pcb.err) for parameters + */ +static void +err_tcp(void *arg, err_t err) +{ + struct netconn *conn; + enum netconn_state old_state; + void *mbox_msg; + SYS_ARCH_DECL_PROTECT(lev); + + conn = (struct netconn *)arg; + LWIP_ASSERT("conn != NULL", (conn != NULL)); + + SYS_ARCH_PROTECT(lev); + + /* when err is called, the pcb is deallocated, so delete the reference */ + conn->pcb.tcp = NULL; + /* store pending error */ + conn->pending_err = err; + /* prevent application threads from blocking on 'recvmbox'/'acceptmbox' */ + conn->flags |= NETCONN_FLAG_MBOXCLOSED; + + /* reset conn->state now before waking up other threads */ + old_state = conn->state; + conn->state = NETCONN_NONE; + + SYS_ARCH_UNPROTECT(lev); + + /* Notify the user layer about a connection error. Used to signal select. */ + API_EVENT(conn, NETCONN_EVT_ERROR, 0); + /* Try to release selects pending on 'read' or 'write', too. + They will get an error if they actually try to read or write. */ + API_EVENT(conn, NETCONN_EVT_RCVPLUS, 0); + API_EVENT(conn, NETCONN_EVT_SENDPLUS, 0); + + mbox_msg = lwip_netconn_err_to_msg(err); + /* pass error message to recvmbox to wake up pending recv */ + if (NETCONN_MBOX_VALID(conn, &conn->recvmbox)) { + /* use trypost to prevent deadlock */ + sys_mbox_trypost(&conn->recvmbox, mbox_msg); + } + /* pass error message to acceptmbox to wake up pending accept */ + if (NETCONN_MBOX_VALID(conn, &conn->acceptmbox)) { + /* use trypost to preven deadlock */ + sys_mbox_trypost(&conn->acceptmbox, mbox_msg); + } + + if ((old_state == NETCONN_WRITE) || (old_state == NETCONN_CLOSE) || + (old_state == NETCONN_CONNECT)) { + /* calling lwip_netconn_do_writemore/lwip_netconn_do_close_internal is not necessary + since the pcb has already been deleted! */ + int was_nonblocking_connect = IN_NONBLOCKING_CONNECT(conn); + SET_NONBLOCKING_CONNECT(conn, 0); + + if (!was_nonblocking_connect) { + sys_sem_t *op_completed_sem; + /* set error return code */ + LWIP_ASSERT("conn->current_msg != NULL", conn->current_msg != NULL); + if (old_state == NETCONN_CLOSE) { + /* let close succeed: the connection is closed after all... */ + conn->current_msg->err = ERR_OK; + } else { + /* Write and connect fail */ + conn->current_msg->err = err; + } + op_completed_sem = LWIP_API_MSG_SEM(conn->current_msg); + LWIP_ASSERT("inavlid op_completed_sem", sys_sem_valid(op_completed_sem)); + conn->current_msg = NULL; + /* wake up the waiting task */ + sys_sem_signal(op_completed_sem); + } else { + /* @todo: test what happens for error on nonblocking connect */ + } + } else { + LWIP_ASSERT("conn->current_msg == NULL", conn->current_msg == NULL); + } +} + +/** + * Setup a tcp_pcb with the correct callback function pointers + * and their arguments. + * + * @param conn the TCP netconn to setup + */ +static void +setup_tcp(struct netconn *conn) +{ + struct tcp_pcb *pcb; + + pcb = conn->pcb.tcp; + tcp_arg(pcb, conn); + tcp_recv(pcb, recv_tcp); + tcp_sent(pcb, sent_tcp); + tcp_poll(pcb, poll_tcp, NETCONN_TCP_POLL_INTERVAL); + tcp_err(pcb, err_tcp); +} + +/** + * Accept callback function for TCP netconns. + * Allocates a new netconn and posts that to conn->acceptmbox. + * + * @see tcp.h (struct tcp_pcb_listen.accept) for parameters and return value + */ +static err_t +accept_function(void *arg, struct tcp_pcb *newpcb, err_t err) +{ + struct netconn *newconn; + struct netconn *conn = (struct netconn *)arg; + + if (conn == NULL) { + return ERR_VAL; + } + if (!NETCONN_MBOX_VALID(conn, &conn->acceptmbox)) { + LWIP_DEBUGF(API_MSG_DEBUG, ("accept_function: acceptmbox already deleted\n")); + return ERR_VAL; + } + + if (newpcb == NULL) { + /* out-of-pcbs during connect: pass on this error to the application */ + if (sys_mbox_trypost(&conn->acceptmbox, lwip_netconn_err_to_msg(ERR_ABRT)) == ERR_OK) { + /* Register event with callback */ + API_EVENT(conn, NETCONN_EVT_RCVPLUS, 0); + } + return ERR_VAL; + } + LWIP_ASSERT("expect newpcb == NULL or err == ERR_OK", err == ERR_OK); + LWIP_UNUSED_ARG(err); /* for LWIP_NOASSERT */ + + LWIP_DEBUGF(API_MSG_DEBUG, ("accept_function: newpcb->state: %s\n", tcp_debug_state_str(newpcb->state))); + + /* We have to set the callback here even though + * the new socket is unknown. newconn->socket is marked as -1. */ + newconn = netconn_alloc(conn->type, conn->callback); + if (newconn == NULL) { + /* outof netconns: pass on this error to the application */ + if (sys_mbox_trypost(&conn->acceptmbox, lwip_netconn_err_to_msg(ERR_ABRT)) == ERR_OK) { + /* Register event with callback */ + API_EVENT(conn, NETCONN_EVT_RCVPLUS, 0); + } + return ERR_MEM; + } + newconn->pcb.tcp = newpcb; + setup_tcp(newconn); + + /* handle backlog counter */ + tcp_backlog_delayed(newpcb); + + if (sys_mbox_trypost(&conn->acceptmbox, newconn) != ERR_OK) { + /* When returning != ERR_OK, the pcb is aborted in tcp_process(), + so do nothing here! */ + /* remove all references to this netconn from the pcb */ + struct tcp_pcb *pcb = newconn->pcb.tcp; + tcp_arg(pcb, NULL); + tcp_recv(pcb, NULL); + tcp_sent(pcb, NULL); + tcp_poll(pcb, NULL, 0); + tcp_err(pcb, NULL); + /* remove reference from to the pcb from this netconn */ + newconn->pcb.tcp = NULL; + /* no need to drain since we know the recvmbox is empty. */ + sys_mbox_free(&newconn->recvmbox); + sys_mbox_set_invalid(&newconn->recvmbox); + netconn_free(newconn); + return ERR_MEM; + } else { + /* Register event with callback */ + API_EVENT(conn, NETCONN_EVT_RCVPLUS, 0); + } + + return ERR_OK; +} +#endif /* LWIP_TCP */ + +/** + * Create a new pcb of a specific type. + * Called from lwip_netconn_do_newconn(). + * + * @param msg the api_msg describing the connection type + */ +static void +pcb_new(struct api_msg *msg) +{ + enum lwip_ip_addr_type iptype = IPADDR_TYPE_V4; + + LWIP_ASSERT("pcb_new: pcb already allocated", msg->conn->pcb.tcp == NULL); + +#if LWIP_IPV6 && LWIP_IPV4 + /* IPv6: Dual-stack by default, unless netconn_set_ipv6only() is called */ + if (NETCONNTYPE_ISIPV6(netconn_type(msg->conn))) { + iptype = IPADDR_TYPE_ANY; + } +#endif + + /* Allocate a PCB for this connection */ + switch (NETCONNTYPE_GROUP(msg->conn->type)) { +#if LWIP_RAW + case NETCONN_RAW: + msg->conn->pcb.raw = raw_new_ip_type(iptype, msg->msg.n.proto); + if (msg->conn->pcb.raw != NULL) { +#if LWIP_IPV6 + /* ICMPv6 packets should always have checksum calculated by the stack as per RFC 3542 chapter 3.1 */ + if (NETCONNTYPE_ISIPV6(msg->conn->type) && msg->conn->pcb.raw->protocol == IP6_NEXTH_ICMP6) { + msg->conn->pcb.raw->chksum_reqd = 1; + msg->conn->pcb.raw->chksum_offset = 2; + } +#endif /* LWIP_IPV6 */ + raw_recv(msg->conn->pcb.raw, recv_raw, msg->conn); + } + break; +#endif /* LWIP_RAW */ +#if LWIP_UDP + case NETCONN_UDP: + msg->conn->pcb.udp = udp_new_ip_type(iptype); + if (msg->conn->pcb.udp != NULL) { +#if LWIP_UDPLITE + if (NETCONNTYPE_ISUDPLITE(msg->conn->type)) { + udp_setflags(msg->conn->pcb.udp, UDP_FLAGS_UDPLITE); + } +#endif /* LWIP_UDPLITE */ + if (NETCONNTYPE_ISUDPNOCHKSUM(msg->conn->type)) { + udp_setflags(msg->conn->pcb.udp, UDP_FLAGS_NOCHKSUM); + } + udp_recv(msg->conn->pcb.udp, recv_udp, msg->conn); + } + break; +#endif /* LWIP_UDP */ +#if LWIP_TCP + case NETCONN_TCP: + msg->conn->pcb.tcp = tcp_new_ip_type(iptype); + if (msg->conn->pcb.tcp != NULL) { + setup_tcp(msg->conn); + } + break; +#endif /* LWIP_TCP */ + default: + /* Unsupported netconn type, e.g. protocol disabled */ + msg->err = ERR_VAL; + return; + } + if (msg->conn->pcb.ip == NULL) { + msg->err = ERR_MEM; + } +} + +/** + * Create a new pcb of a specific type inside a netconn. + * Called from netconn_new_with_proto_and_callback. + * + * @param m the api_msg describing the connection type + */ +void +lwip_netconn_do_newconn(void *m) +{ + struct api_msg *msg = (struct api_msg *)m; + + msg->err = ERR_OK; + if (msg->conn->pcb.tcp == NULL) { + pcb_new(msg); + } + /* Else? This "new" connection already has a PCB allocated. */ + /* Is this an error condition? Should it be deleted? */ + /* We currently just are happy and return. */ + + TCPIP_APIMSG_ACK(msg); +} + +/** + * Create a new netconn (of a specific type) that has a callback function. + * The corresponding pcb is NOT created! + * + * @param t the type of 'connection' to create (@see enum netconn_type) + * @param callback a function to call on status changes (RX available, TX'ed) + * @return a newly allocated struct netconn or + * NULL on memory error + */ +struct netconn * +netconn_alloc(enum netconn_type t, netconn_callback callback) +{ + struct netconn *conn; + int size; + u8_t init_flags = 0; + + conn = (struct netconn *)memp_malloc(MEMP_NETCONN); + if (conn == NULL) { + return NULL; + } + + conn->pending_err = ERR_OK; + conn->type = t; + conn->pcb.tcp = NULL; + + /* If all sizes are the same, every compiler should optimize this switch to nothing */ + switch (NETCONNTYPE_GROUP(t)) { +#if LWIP_RAW + case NETCONN_RAW: + size = DEFAULT_RAW_RECVMBOX_SIZE; + break; +#endif /* LWIP_RAW */ +#if LWIP_UDP + case NETCONN_UDP: + size = DEFAULT_UDP_RECVMBOX_SIZE; +#if LWIP_NETBUF_RECVINFO + init_flags |= NETCONN_FLAG_PKTINFO; +#endif /* LWIP_NETBUF_RECVINFO */ + break; +#endif /* LWIP_UDP */ +#if LWIP_TCP + case NETCONN_TCP: + size = DEFAULT_TCP_RECVMBOX_SIZE; + break; +#endif /* LWIP_TCP */ + default: + LWIP_ASSERT("netconn_alloc: undefined netconn_type", 0); + goto free_and_return; + } + + if (sys_mbox_new(&conn->recvmbox, size) != ERR_OK) { + goto free_and_return; + } +#if !LWIP_NETCONN_SEM_PER_THREAD + if (sys_sem_new(&conn->op_completed, 0) != ERR_OK) { + sys_mbox_free(&conn->recvmbox); + goto free_and_return; + } +#endif + +#if LWIP_TCP + sys_mbox_set_invalid(&conn->acceptmbox); +#endif + conn->state = NETCONN_NONE; +#if LWIP_SOCKET + /* initialize socket to -1 since 0 is a valid socket */ + conn->socket = -1; +#endif /* LWIP_SOCKET */ + conn->callback = callback; +#if LWIP_TCP + conn->current_msg = NULL; +#endif /* LWIP_TCP */ +#if LWIP_SO_SNDTIMEO + conn->send_timeout = 0; +#endif /* LWIP_SO_SNDTIMEO */ +#if LWIP_SO_RCVTIMEO + conn->recv_timeout = 0; +#endif /* LWIP_SO_RCVTIMEO */ +#if LWIP_SO_RCVBUF + conn->recv_bufsize = RECV_BUFSIZE_DEFAULT; + conn->recv_avail = 0; +#endif /* LWIP_SO_RCVBUF */ +#if LWIP_SO_LINGER + conn->linger = -1; +#endif /* LWIP_SO_LINGER */ + conn->flags = init_flags; + return conn; +free_and_return: + memp_free(MEMP_NETCONN, conn); + return NULL; +} + +/** + * Delete a netconn and all its resources. + * The pcb is NOT freed (since we might not be in the right thread context do this). + * + * @param conn the netconn to free + */ +void +netconn_free(struct netconn *conn) +{ + LWIP_ASSERT("PCB must be deallocated outside this function", conn->pcb.tcp == NULL); + +#if LWIP_NETCONN_FULLDUPLEX + /* in fullduplex, netconn is drained here */ + netconn_drain(conn); +#endif /* LWIP_NETCONN_FULLDUPLEX */ + + LWIP_ASSERT("recvmbox must be deallocated before calling this function", + !sys_mbox_valid(&conn->recvmbox)); +#if LWIP_TCP + LWIP_ASSERT("acceptmbox must be deallocated before calling this function", + !sys_mbox_valid(&conn->acceptmbox)); +#endif /* LWIP_TCP */ + +#if !LWIP_NETCONN_SEM_PER_THREAD + sys_sem_free(&conn->op_completed); + sys_sem_set_invalid(&conn->op_completed); +#endif + + memp_free(MEMP_NETCONN, conn); +} + +/** + * Delete rcvmbox and acceptmbox of a netconn and free the left-over data in + * these mboxes + * + * @param conn the netconn to free + * @bytes_drained bytes drained from recvmbox + * @accepts_drained pending connections drained from acceptmbox + */ +static void +netconn_drain(struct netconn *conn) +{ + void *mem; + + /* This runs when mbox and netconn are marked as closed, + so we don't need to lock against rx packets */ +#if LWIP_NETCONN_FULLDUPLEX + LWIP_ASSERT("netconn marked closed", conn->flags & NETCONN_FLAG_MBOXINVALID); +#endif /* LWIP_NETCONN_FULLDUPLEX */ + + /* Delete and drain the recvmbox. */ + if (sys_mbox_valid(&conn->recvmbox)) { + while (sys_mbox_tryfetch(&conn->recvmbox, &mem) != SYS_MBOX_EMPTY) { +#if LWIP_NETCONN_FULLDUPLEX + if (!lwip_netconn_is_deallocated_msg(mem)) +#endif /* LWIP_NETCONN_FULLDUPLEX */ + { +#if LWIP_TCP + if (NETCONNTYPE_GROUP(conn->type) == NETCONN_TCP) { + err_t err; + if (!lwip_netconn_is_err_msg(mem, &err)) { + pbuf_free((struct pbuf *)mem); + } + } else +#endif /* LWIP_TCP */ + { + netbuf_delete((struct netbuf *)mem); + } + } + } + sys_mbox_free(&conn->recvmbox); + sys_mbox_set_invalid(&conn->recvmbox); + } + + /* Delete and drain the acceptmbox. */ +#if LWIP_TCP + if (sys_mbox_valid(&conn->acceptmbox)) { + while (sys_mbox_tryfetch(&conn->acceptmbox, &mem) != SYS_MBOX_EMPTY) { +#if LWIP_NETCONN_FULLDUPLEX + if (!lwip_netconn_is_deallocated_msg(mem)) +#endif /* LWIP_NETCONN_FULLDUPLEX */ + { + err_t err; + if (!lwip_netconn_is_err_msg(mem, &err)) { + struct netconn *newconn = (struct netconn *)mem; + /* Only tcp pcbs have an acceptmbox, so no need to check conn->type */ + /* pcb might be set to NULL already by err_tcp() */ + /* drain recvmbox */ + netconn_drain(newconn); + if (newconn->pcb.tcp != NULL) { + tcp_abort(newconn->pcb.tcp); + newconn->pcb.tcp = NULL; + } + netconn_free(newconn); + } + } + } + sys_mbox_free(&conn->acceptmbox); + sys_mbox_set_invalid(&conn->acceptmbox); + } +#endif /* LWIP_TCP */ +} + +#if LWIP_NETCONN_FULLDUPLEX +static void +netconn_mark_mbox_invalid(struct netconn *conn) +{ + int i, num_waiting; + void *msg = LWIP_CONST_CAST(void *, &netconn_deleted); + + /* Prevent new calls/threads from reading from the mbox */ + conn->flags |= NETCONN_FLAG_MBOXINVALID; + + SYS_ARCH_LOCKED(num_waiting = conn->mbox_threads_waiting); + for (i = 0; i < num_waiting; i++) { + if (sys_mbox_valid_val(conn->recvmbox)) { + sys_mbox_trypost(&conn->recvmbox, msg); + } else { + sys_mbox_trypost(&conn->acceptmbox, msg); + } + } +} +#endif /* LWIP_NETCONN_FULLDUPLEX */ + +#if LWIP_TCP +/** + * Internal helper function to close a TCP netconn: since this sometimes + * doesn't work at the first attempt, this function is called from multiple + * places. + * + * @param conn the TCP netconn to close + */ +static err_t +lwip_netconn_do_close_internal(struct netconn *conn WRITE_DELAYED_PARAM) +{ + err_t err; + u8_t shut, shut_rx, shut_tx, shut_close; + u8_t close_finished = 0; + struct tcp_pcb *tpcb; +#if LWIP_SO_LINGER + u8_t linger_wait_required = 0; +#endif /* LWIP_SO_LINGER */ + + LWIP_ASSERT("invalid conn", (conn != NULL)); + LWIP_ASSERT("this is for tcp netconns only", (NETCONNTYPE_GROUP(conn->type) == NETCONN_TCP)); + LWIP_ASSERT("conn must be in state NETCONN_CLOSE", (conn->state == NETCONN_CLOSE)); + LWIP_ASSERT("pcb already closed", (conn->pcb.tcp != NULL)); + LWIP_ASSERT("conn->current_msg != NULL", conn->current_msg != NULL); + + tpcb = conn->pcb.tcp; + shut = conn->current_msg->msg.sd.shut; + shut_rx = shut & NETCONN_SHUT_RD; + shut_tx = shut & NETCONN_SHUT_WR; + /* shutting down both ends is the same as closing + (also if RD or WR side was shut down before already) */ + if (shut == NETCONN_SHUT_RDWR) { + shut_close = 1; + } else if (shut_rx && + ((tpcb->state == FIN_WAIT_1) || + (tpcb->state == FIN_WAIT_2) || + (tpcb->state == CLOSING))) { + shut_close = 1; + } else if (shut_tx && ((tpcb->flags & TF_RXCLOSED) != 0)) { + shut_close = 1; + } else { + shut_close = 0; + } + + /* Set back some callback pointers */ + if (shut_close) { + tcp_arg(tpcb, NULL); + } + if (tpcb->state == LISTEN) { + tcp_accept(tpcb, NULL); + } else { + /* some callbacks have to be reset if tcp_close is not successful */ + if (shut_rx) { + tcp_recv(tpcb, NULL); + tcp_accept(tpcb, NULL); + } + if (shut_tx) { + tcp_sent(tpcb, NULL); + } + if (shut_close) { + tcp_poll(tpcb, NULL, 0); + tcp_err(tpcb, NULL); + } + } + /* Try to close the connection */ + if (shut_close) { +#if LWIP_SO_LINGER + /* check linger possibilites before calling tcp_close */ + err = ERR_OK; + /* linger enabled/required at all? (i.e. is there untransmitted data left?) */ + if ((conn->linger >= 0) && (conn->pcb.tcp->unsent || conn->pcb.tcp->unacked)) { + if ((conn->linger == 0)) { + /* data left but linger prevents waiting */ + tcp_abort(tpcb); + tpcb = NULL; + } else if (conn->linger > 0) { + /* data left and linger says we should wait */ + if (netconn_is_nonblocking(conn)) { + /* data left on a nonblocking netconn -> cannot linger */ + err = ERR_WOULDBLOCK; + } else if ((s32_t)(sys_now() - conn->current_msg->msg.sd.time_started) >= + (conn->linger * 1000)) { + /* data left but linger timeout has expired (this happens on further + calls to this function through poll_tcp */ + tcp_abort(tpcb); + tpcb = NULL; + } else { + /* data left -> need to wait for ACK after successful close */ + linger_wait_required = 1; + } + } + } + if ((err == ERR_OK) && (tpcb != NULL)) +#endif /* LWIP_SO_LINGER */ + { + err = tcp_close(tpcb); + } + } else { + err = tcp_shutdown(tpcb, shut_rx, shut_tx); + } + if (err == ERR_OK) { + close_finished = 1; +#if LWIP_SO_LINGER + if (linger_wait_required) { + /* wait for ACK of all unsent/unacked data by just getting called again */ + close_finished = 0; + err = ERR_INPROGRESS; + } +#endif /* LWIP_SO_LINGER */ + } else { + if (err == ERR_MEM) { + /* Closing failed because of memory shortage, try again later. Even for + nonblocking netconns, we have to wait since no standard socket application + is prepared for close failing because of resource shortage. + Check the timeout: this is kind of an lwip addition to the standard sockets: + we wait for some time when failing to allocate a segment for the FIN */ +#if LWIP_SO_SNDTIMEO || LWIP_SO_LINGER + s32_t close_timeout = LWIP_TCP_CLOSE_TIMEOUT_MS_DEFAULT; +#if LWIP_SO_SNDTIMEO + if (conn->send_timeout > 0) { + close_timeout = conn->send_timeout; + } +#endif /* LWIP_SO_SNDTIMEO */ +#if LWIP_SO_LINGER + if (conn->linger >= 0) { + /* use linger timeout (seconds) */ + close_timeout = conn->linger * 1000U; + } +#endif + if ((s32_t)(sys_now() - conn->current_msg->msg.sd.time_started) >= close_timeout) { +#else /* LWIP_SO_SNDTIMEO || LWIP_SO_LINGER */ + if (conn->current_msg->msg.sd.polls_left == 0) { +#endif /* LWIP_SO_SNDTIMEO || LWIP_SO_LINGER */ + close_finished = 1; + if (shut_close) { + /* in this case, we want to RST the connection */ + tcp_abort(tpcb); + err = ERR_OK; + } + } + } else { + /* Closing failed for a non-memory error: give up */ + close_finished = 1; + } + } + if (close_finished) { + /* Closing done (succeeded, non-memory error, nonblocking error or timeout) */ + sys_sem_t *op_completed_sem = LWIP_API_MSG_SEM(conn->current_msg); + conn->current_msg->err = err; + conn->current_msg = NULL; + conn->state = NETCONN_NONE; + if (err == ERR_OK) { + if (shut_close) { + /* Set back some callback pointers as conn is going away */ + conn->pcb.tcp = NULL; + /* Trigger select() in socket layer. Make sure everybody notices activity + on the connection, error first! */ + API_EVENT(conn, NETCONN_EVT_ERROR, 0); + } + if (shut_rx) { + API_EVENT(conn, NETCONN_EVT_RCVPLUS, 0); + } + if (shut_tx) { + API_EVENT(conn, NETCONN_EVT_SENDPLUS, 0); + } + } +#if LWIP_TCPIP_CORE_LOCKING + if (delayed) +#endif + { + /* wake up the application task */ + sys_sem_signal(op_completed_sem); + } + return ERR_OK; + } + if (!close_finished) { + /* Closing failed and we want to wait: restore some of the callbacks */ + /* Closing of listen pcb will never fail! */ + LWIP_ASSERT("Closing a listen pcb may not fail!", (tpcb->state != LISTEN)); + if (shut_tx) { + tcp_sent(tpcb, sent_tcp); + } + /* when waiting for close, set up poll interval to 500ms */ + tcp_poll(tpcb, poll_tcp, 1); + tcp_err(tpcb, err_tcp); + tcp_arg(tpcb, conn); + /* don't restore recv callback: we don't want to receive any more data */ + } + /* If closing didn't succeed, we get called again either + from poll_tcp or from sent_tcp */ + LWIP_ASSERT("err != ERR_OK", err != ERR_OK); + return err; +} +#endif /* LWIP_TCP */ + +/** + * Delete the pcb inside a netconn. + * Called from netconn_delete. + * + * @param m the api_msg pointing to the connection + */ +void +lwip_netconn_do_delconn(void *m) +{ + struct api_msg *msg = (struct api_msg *)m; + + enum netconn_state state = msg->conn->state; + LWIP_ASSERT("netconn state error", /* this only happens for TCP netconns */ + (state == NETCONN_NONE) || (NETCONNTYPE_GROUP(msg->conn->type) == NETCONN_TCP)); +#if LWIP_NETCONN_FULLDUPLEX + /* In full duplex mode, blocking write/connect is aborted with ERR_CLSD */ + if (state != NETCONN_NONE) { + if ((state == NETCONN_WRITE) || + ((state == NETCONN_CONNECT) && !IN_NONBLOCKING_CONNECT(msg->conn))) { + /* close requested, abort running write/connect */ + sys_sem_t *op_completed_sem; + LWIP_ASSERT("msg->conn->current_msg != NULL", msg->conn->current_msg != NULL); + op_completed_sem = LWIP_API_MSG_SEM(msg->conn->current_msg); + msg->conn->current_msg->err = ERR_CLSD; + msg->conn->current_msg = NULL; + msg->conn->state = NETCONN_NONE; + sys_sem_signal(op_completed_sem); + } + } +#else /* LWIP_NETCONN_FULLDUPLEX */ + if (((state != NETCONN_NONE) && + (state != NETCONN_LISTEN) && + (state != NETCONN_CONNECT)) || + ((state == NETCONN_CONNECT) && !IN_NONBLOCKING_CONNECT(msg->conn))) { + /* This means either a blocking write or blocking connect is running + (nonblocking write returns and sets state to NONE) */ + msg->err = ERR_INPROGRESS; + } else +#endif /* LWIP_NETCONN_FULLDUPLEX */ + { + LWIP_ASSERT("blocking connect in progress", + (state != NETCONN_CONNECT) || IN_NONBLOCKING_CONNECT(msg->conn)); + msg->err = ERR_OK; +#if LWIP_NETCONN_FULLDUPLEX + /* Mark mboxes invalid */ + netconn_mark_mbox_invalid(msg->conn); +#else /* LWIP_NETCONN_FULLDUPLEX */ + netconn_drain(msg->conn); +#endif /* LWIP_NETCONN_FULLDUPLEX */ + + if (msg->conn->pcb.tcp != NULL) { + + switch (NETCONNTYPE_GROUP(msg->conn->type)) { +#if LWIP_RAW + case NETCONN_RAW: + raw_remove(msg->conn->pcb.raw); + break; +#endif /* LWIP_RAW */ +#if LWIP_UDP + case NETCONN_UDP: + msg->conn->pcb.udp->recv_arg = NULL; + udp_remove(msg->conn->pcb.udp); + break; +#endif /* LWIP_UDP */ +#if LWIP_TCP + case NETCONN_TCP: + LWIP_ASSERT("already writing or closing", msg->conn->current_msg == NULL); + msg->conn->state = NETCONN_CLOSE; + msg->msg.sd.shut = NETCONN_SHUT_RDWR; + msg->conn->current_msg = msg; +#if LWIP_TCPIP_CORE_LOCKING + if (lwip_netconn_do_close_internal(msg->conn, 0) != ERR_OK) { + LWIP_ASSERT("state!", msg->conn->state == NETCONN_CLOSE); + UNLOCK_TCPIP_CORE(); + sys_arch_sem_wait(LWIP_API_MSG_SEM(msg), 0); + LOCK_TCPIP_CORE(); + LWIP_ASSERT("state!", msg->conn->state == NETCONN_NONE); + } +#else /* LWIP_TCPIP_CORE_LOCKING */ + lwip_netconn_do_close_internal(msg->conn); +#endif /* LWIP_TCPIP_CORE_LOCKING */ + /* API_EVENT is called inside lwip_netconn_do_close_internal, before releasing + the application thread, so we can return at this point! */ + return; +#endif /* LWIP_TCP */ + default: + break; + } + msg->conn->pcb.tcp = NULL; + } + /* tcp netconns don't come here! */ + + /* @todo: this lets select make the socket readable and writable, + which is wrong! errfd instead? */ + API_EVENT(msg->conn, NETCONN_EVT_RCVPLUS, 0); + API_EVENT(msg->conn, NETCONN_EVT_SENDPLUS, 0); + } + if (sys_sem_valid(LWIP_API_MSG_SEM(msg))) { + TCPIP_APIMSG_ACK(msg); + } +} + +/** + * Bind a pcb contained in a netconn + * Called from netconn_bind. + * + * @param m the api_msg pointing to the connection and containing + * the IP address and port to bind to + */ +void +lwip_netconn_do_bind(void *m) +{ + struct api_msg *msg = (struct api_msg *)m; + err_t err; + + if (msg->conn->pcb.tcp != NULL) { + switch (NETCONNTYPE_GROUP(msg->conn->type)) { +#if LWIP_RAW + case NETCONN_RAW: + err = raw_bind(msg->conn->pcb.raw, API_EXPR_REF(msg->msg.bc.ipaddr)); + break; +#endif /* LWIP_RAW */ +#if LWIP_UDP + case NETCONN_UDP: + err = udp_bind(msg->conn->pcb.udp, API_EXPR_REF(msg->msg.bc.ipaddr), msg->msg.bc.port); + break; +#endif /* LWIP_UDP */ +#if LWIP_TCP + case NETCONN_TCP: + err = tcp_bind(msg->conn->pcb.tcp, API_EXPR_REF(msg->msg.bc.ipaddr), msg->msg.bc.port); + break; +#endif /* LWIP_TCP */ + default: + err = ERR_VAL; + break; + } + } else { + err = ERR_VAL; + } + msg->err = err; + TCPIP_APIMSG_ACK(msg); +} +/** + * Bind a pcb contained in a netconn to an interface + * Called from netconn_bind_if. + * + * @param m the api_msg pointing to the connection and containing + * the IP address and port to bind to + */ +void +lwip_netconn_do_bind_if(void *m) +{ + struct netif *netif; + struct api_msg *msg = (struct api_msg *)m; + err_t err; + + netif = netif_get_by_index(msg->msg.bc.if_idx); + + if ((netif != NULL) && (msg->conn->pcb.tcp != NULL)) { + err = ERR_OK; + switch (NETCONNTYPE_GROUP(msg->conn->type)) { +#if LWIP_RAW + case NETCONN_RAW: + raw_bind_netif(msg->conn->pcb.raw, netif); + break; +#endif /* LWIP_RAW */ +#if LWIP_UDP + case NETCONN_UDP: + udp_bind_netif(msg->conn->pcb.udp, netif); + break; +#endif /* LWIP_UDP */ +#if LWIP_TCP + case NETCONN_TCP: + tcp_bind_netif(msg->conn->pcb.tcp, netif); + break; +#endif /* LWIP_TCP */ + default: + err = ERR_VAL; + break; + } + } else { + err = ERR_VAL; + } + msg->err = err; + TCPIP_APIMSG_ACK(msg); +} + +#if LWIP_TCP +/** + * TCP callback function if a connection (opened by tcp_connect/lwip_netconn_do_connect) has + * been established (or reset by the remote host). + * + * @see tcp.h (struct tcp_pcb.connected) for parameters and return values + */ +static err_t +lwip_netconn_do_connected(void *arg, struct tcp_pcb *pcb, err_t err) +{ + struct netconn *conn; + int was_blocking; + sys_sem_t *op_completed_sem = NULL; + + LWIP_UNUSED_ARG(pcb); + + conn = (struct netconn *)arg; + + if (conn == NULL) { + return ERR_VAL; + } + + LWIP_ASSERT("conn->state == NETCONN_CONNECT", conn->state == NETCONN_CONNECT); + LWIP_ASSERT("(conn->current_msg != NULL) || conn->in_non_blocking_connect", + (conn->current_msg != NULL) || IN_NONBLOCKING_CONNECT(conn)); + + if (conn->current_msg != NULL) { + conn->current_msg->err = err; + op_completed_sem = LWIP_API_MSG_SEM(conn->current_msg); + } + if ((NETCONNTYPE_GROUP(conn->type) == NETCONN_TCP) && (err == ERR_OK)) { + setup_tcp(conn); + } + was_blocking = !IN_NONBLOCKING_CONNECT(conn); + SET_NONBLOCKING_CONNECT(conn, 0); + LWIP_ASSERT("blocking connect state error", + (was_blocking && op_completed_sem != NULL) || + (!was_blocking && op_completed_sem == NULL)); + conn->current_msg = NULL; + conn->state = NETCONN_NONE; + API_EVENT(conn, NETCONN_EVT_SENDPLUS, 0); + + if (was_blocking) { + sys_sem_signal(op_completed_sem); + } + return ERR_OK; +} +#endif /* LWIP_TCP */ + +/** + * Connect a pcb contained inside a netconn + * Called from netconn_connect. + * + * @param m the api_msg pointing to the connection and containing + * the IP address and port to connect to + */ +void +lwip_netconn_do_connect(void *m) +{ + struct api_msg *msg = (struct api_msg *)m; + err_t err; + + if (msg->conn->pcb.tcp == NULL) { + /* This may happen when calling netconn_connect() a second time */ + err = ERR_CLSD; + } else { + switch (NETCONNTYPE_GROUP(msg->conn->type)) { +#if LWIP_RAW + case NETCONN_RAW: + err = raw_connect(msg->conn->pcb.raw, API_EXPR_REF(msg->msg.bc.ipaddr)); + break; +#endif /* LWIP_RAW */ +#if LWIP_UDP + case NETCONN_UDP: + err = udp_connect(msg->conn->pcb.udp, API_EXPR_REF(msg->msg.bc.ipaddr), msg->msg.bc.port); + break; +#endif /* LWIP_UDP */ +#if LWIP_TCP + case NETCONN_TCP: + /* Prevent connect while doing any other action. */ + if (msg->conn->state == NETCONN_CONNECT) { + err = ERR_ALREADY; + } else if (msg->conn->state != NETCONN_NONE) { + err = ERR_ISCONN; + } else { + setup_tcp(msg->conn); + err = tcp_connect(msg->conn->pcb.tcp, API_EXPR_REF(msg->msg.bc.ipaddr), + msg->msg.bc.port, lwip_netconn_do_connected); + if (err == ERR_OK) { + u8_t non_blocking = netconn_is_nonblocking(msg->conn); + msg->conn->state = NETCONN_CONNECT; + SET_NONBLOCKING_CONNECT(msg->conn, non_blocking); + if (non_blocking) { + err = ERR_INPROGRESS; + } else { + msg->conn->current_msg = msg; + /* sys_sem_signal() is called from lwip_netconn_do_connected (or err_tcp()), + when the connection is established! */ +#if LWIP_TCPIP_CORE_LOCKING + LWIP_ASSERT("state!", msg->conn->state == NETCONN_CONNECT); + UNLOCK_TCPIP_CORE(); + sys_arch_sem_wait(LWIP_API_MSG_SEM(msg), 0); + LOCK_TCPIP_CORE(); + LWIP_ASSERT("state!", msg->conn->state != NETCONN_CONNECT); +#endif /* LWIP_TCPIP_CORE_LOCKING */ + return; + } + } + } + break; +#endif /* LWIP_TCP */ + default: + LWIP_ERROR("Invalid netconn type", 0, do { + err = ERR_VAL; + } while (0)); + break; + } + } + msg->err = err; + /* For all other protocols, netconn_connect() calls netconn_apimsg(), + so use TCPIP_APIMSG_ACK() here. */ + TCPIP_APIMSG_ACK(msg); +} + +/** + * Disconnect a pcb contained inside a netconn + * Only used for UDP netconns. + * Called from netconn_disconnect. + * + * @param m the api_msg pointing to the connection to disconnect + */ +void +lwip_netconn_do_disconnect(void *m) +{ + struct api_msg *msg = (struct api_msg *)m; + +#if LWIP_UDP + if (NETCONNTYPE_GROUP(msg->conn->type) == NETCONN_UDP) { + udp_disconnect(msg->conn->pcb.udp); + msg->err = ERR_OK; + } else +#endif /* LWIP_UDP */ + { + msg->err = ERR_VAL; + } + TCPIP_APIMSG_ACK(msg); +} + +#if LWIP_TCP +/** + * Set a TCP pcb contained in a netconn into listen mode + * Called from netconn_listen. + * + * @param m the api_msg pointing to the connection + */ +void +lwip_netconn_do_listen(void *m) +{ + struct api_msg *msg = (struct api_msg *)m; + err_t err; + + if (msg->conn->pcb.tcp != NULL) { + if (NETCONNTYPE_GROUP(msg->conn->type) == NETCONN_TCP) { + if (msg->conn->state == NETCONN_NONE) { + struct tcp_pcb *lpcb; + if (msg->conn->pcb.tcp->state != CLOSED) { + /* connection is not closed, cannot listen */ + err = ERR_VAL; + } else { + u8_t backlog; +#if TCP_LISTEN_BACKLOG + backlog = msg->msg.lb.backlog; +#else /* TCP_LISTEN_BACKLOG */ + backlog = TCP_DEFAULT_LISTEN_BACKLOG; +#endif /* TCP_LISTEN_BACKLOG */ +#if LWIP_IPV4 && LWIP_IPV6 + /* "Socket API like" dual-stack support: If IP to listen to is IP6_ADDR_ANY, + * and NETCONN_FLAG_IPV6_V6ONLY is NOT set, use IP_ANY_TYPE to listen + */ + if (ip_addr_cmp(&msg->conn->pcb.ip->local_ip, IP6_ADDR_ANY) && + (netconn_get_ipv6only(msg->conn) == 0)) { + /* change PCB type to IPADDR_TYPE_ANY */ + IP_SET_TYPE_VAL(msg->conn->pcb.tcp->local_ip, IPADDR_TYPE_ANY); + IP_SET_TYPE_VAL(msg->conn->pcb.tcp->remote_ip, IPADDR_TYPE_ANY); + } +#endif /* LWIP_IPV4 && LWIP_IPV6 */ + + lpcb = tcp_listen_with_backlog_and_err(msg->conn->pcb.tcp, backlog, &err); + + if (lpcb == NULL) { + /* in this case, the old pcb is still allocated */ + } else { + /* delete the recvmbox and allocate the acceptmbox */ + if (sys_mbox_valid(&msg->conn->recvmbox)) { + /** @todo: should we drain the recvmbox here? */ + sys_mbox_free(&msg->conn->recvmbox); + sys_mbox_set_invalid(&msg->conn->recvmbox); + } + err = ERR_OK; + if (!sys_mbox_valid(&msg->conn->acceptmbox)) { + err = sys_mbox_new(&msg->conn->acceptmbox, DEFAULT_ACCEPTMBOX_SIZE); + } + if (err == ERR_OK) { + msg->conn->state = NETCONN_LISTEN; + msg->conn->pcb.tcp = lpcb; + tcp_arg(msg->conn->pcb.tcp, msg->conn); + tcp_accept(msg->conn->pcb.tcp, accept_function); + } else { + /* since the old pcb is already deallocated, free lpcb now */ + tcp_close(lpcb); + msg->conn->pcb.tcp = NULL; + } + } + } + } else if (msg->conn->state == NETCONN_LISTEN) { + /* already listening, allow updating of the backlog */ + err = ERR_OK; + tcp_backlog_set(msg->conn->pcb.tcp, msg->msg.lb.backlog); + } else { + err = ERR_CONN; + } + } else { + err = ERR_ARG; + } + } else { + err = ERR_CONN; + } + msg->err = err; + TCPIP_APIMSG_ACK(msg); +} +#endif /* LWIP_TCP */ + +/** + * Send some data on a RAW or UDP pcb contained in a netconn + * Called from netconn_send + * + * @param m the api_msg pointing to the connection + */ +void +lwip_netconn_do_send(void *m) +{ + struct api_msg *msg = (struct api_msg *)m; + + err_t err = netconn_err(msg->conn); + if (err == ERR_OK) { + if (msg->conn->pcb.tcp != NULL) { + switch (NETCONNTYPE_GROUP(msg->conn->type)) { +#if LWIP_RAW + case NETCONN_RAW: + if (ip_addr_isany(&msg->msg.b->addr) || IP_IS_ANY_TYPE_VAL(msg->msg.b->addr)) { + err = raw_send(msg->conn->pcb.raw, msg->msg.b->p); + } else { + err = raw_sendto(msg->conn->pcb.raw, msg->msg.b->p, &msg->msg.b->addr); + } + break; +#endif +#if LWIP_UDP + case NETCONN_UDP: +#if LWIP_CHECKSUM_ON_COPY + if (ip_addr_isany(&msg->msg.b->addr) || IP_IS_ANY_TYPE_VAL(msg->msg.b->addr)) { + err = udp_send_chksum(msg->conn->pcb.udp, msg->msg.b->p, + msg->msg.b->flags & NETBUF_FLAG_CHKSUM, msg->msg.b->toport_chksum); + } else { + err = udp_sendto_chksum(msg->conn->pcb.udp, msg->msg.b->p, + &msg->msg.b->addr, msg->msg.b->port, + msg->msg.b->flags & NETBUF_FLAG_CHKSUM, msg->msg.b->toport_chksum); + } +#else /* LWIP_CHECKSUM_ON_COPY */ + if (ip_addr_isany_val(msg->msg.b->addr) || IP_IS_ANY_TYPE_VAL(msg->msg.b->addr)) { + err = udp_send(msg->conn->pcb.udp, msg->msg.b->p); + } else { + err = udp_sendto(msg->conn->pcb.udp, msg->msg.b->p, &msg->msg.b->addr, msg->msg.b->port); + } +#endif /* LWIP_CHECKSUM_ON_COPY */ + break; +#endif /* LWIP_UDP */ + default: + err = ERR_CONN; + break; + } + } else { + err = ERR_CONN; + } + } + msg->err = err; + TCPIP_APIMSG_ACK(msg); +} + +#if LWIP_TCP +/** + * Indicate data has been received from a TCP pcb contained in a netconn + * Called from netconn_recv + * + * @param m the api_msg pointing to the connection + */ +void +lwip_netconn_do_recv(void *m) +{ + struct api_msg *msg = (struct api_msg *)m; + + msg->err = ERR_OK; + if (msg->conn->pcb.tcp != NULL) { + if (NETCONNTYPE_GROUP(msg->conn->type) == NETCONN_TCP) { + size_t remaining = msg->msg.r.len; + do { + u16_t recved = (u16_t)((remaining > 0xffff) ? 0xffff : remaining); + tcp_recved(msg->conn->pcb.tcp, recved); + remaining -= recved; + } while (remaining != 0); + } + } + TCPIP_APIMSG_ACK(msg); +} + +#if TCP_LISTEN_BACKLOG +/** Indicate that a TCP pcb has been accepted + * Called from netconn_accept + * + * @param m the api_msg pointing to the connection + */ +void +lwip_netconn_do_accepted(void *m) +{ + struct api_msg *msg = (struct api_msg *)m; + + msg->err = ERR_OK; + if (msg->conn->pcb.tcp != NULL) { + if (NETCONNTYPE_GROUP(msg->conn->type) == NETCONN_TCP) { + tcp_backlog_accepted(msg->conn->pcb.tcp); + } + } + TCPIP_APIMSG_ACK(msg); +} +#endif /* TCP_LISTEN_BACKLOG */ + +/** + * See if more data needs to be written from a previous call to netconn_write. + * Called initially from lwip_netconn_do_write. If the first call can't send all data + * (because of low memory or empty send-buffer), this function is called again + * from sent_tcp() or poll_tcp() to send more data. If all data is sent, the + * blocking application thread (waiting in netconn_write) is released. + * + * @param conn netconn (that is currently in state NETCONN_WRITE) to process + * @return ERR_OK + * ERR_MEM if LWIP_TCPIP_CORE_LOCKING=1 and sending hasn't yet finished + */ +static err_t +lwip_netconn_do_writemore(struct netconn *conn WRITE_DELAYED_PARAM) +{ + err_t err; + const void *dataptr; + u16_t len, available; + u8_t write_finished = 0; + size_t diff; + u8_t dontblock; + u8_t apiflags; + u8_t write_more; + + LWIP_ASSERT("conn != NULL", conn != NULL); + LWIP_ASSERT("conn->state == NETCONN_WRITE", (conn->state == NETCONN_WRITE)); + LWIP_ASSERT("conn->current_msg != NULL", conn->current_msg != NULL); + LWIP_ASSERT("conn->pcb.tcp != NULL", conn->pcb.tcp != NULL); + LWIP_ASSERT("conn->current_msg->msg.w.offset < conn->current_msg->msg.w.len", + conn->current_msg->msg.w.offset < conn->current_msg->msg.w.len); + LWIP_ASSERT("conn->current_msg->msg.w.vector_cnt > 0", conn->current_msg->msg.w.vector_cnt > 0); + + apiflags = conn->current_msg->msg.w.apiflags; + dontblock = netconn_is_nonblocking(conn) || (apiflags & NETCONN_DONTBLOCK); + +#if LWIP_SO_SNDTIMEO + if ((conn->send_timeout != 0) && + ((s32_t)(sys_now() - conn->current_msg->msg.w.time_started) >= conn->send_timeout)) { + write_finished = 1; + if (conn->current_msg->msg.w.offset == 0) { + /* nothing has been written */ + err = ERR_WOULDBLOCK; + } else { + /* partial write */ + err = ERR_OK; + } + } else +#endif /* LWIP_SO_SNDTIMEO */ + { + do { + dataptr = (const u8_t *)conn->current_msg->msg.w.vector->ptr + conn->current_msg->msg.w.vector_off; + diff = conn->current_msg->msg.w.vector->len - conn->current_msg->msg.w.vector_off; + if (diff > 0xffffUL) { /* max_u16_t */ + len = 0xffff; + apiflags |= TCP_WRITE_FLAG_MORE; + } else { + len = (u16_t)diff; + } + available = tcp_sndbuf(conn->pcb.tcp); + if (available < len) { + /* don't try to write more than sendbuf */ + len = available; + if (dontblock) { + if (!len) { + /* set error according to partial write or not */ + err = (conn->current_msg->msg.w.offset == 0) ? ERR_WOULDBLOCK : ERR_OK; + goto err_mem; + } + } else { + apiflags |= TCP_WRITE_FLAG_MORE; + } + } + LWIP_ASSERT("lwip_netconn_do_writemore: invalid length!", + ((conn->current_msg->msg.w.vector_off + len) <= conn->current_msg->msg.w.vector->len)); + /* we should loop around for more sending in the following cases: + 1) We couldn't finish the current vector because of 16-bit size limitations. + tcp_write() and tcp_sndbuf() both are limited to 16-bit sizes + 2) We are sending the remainder of the current vector and have more */ + if ((len == 0xffff && diff > 0xffffUL) || + (len == (u16_t)diff && conn->current_msg->msg.w.vector_cnt > 1)) { + write_more = 1; + apiflags |= TCP_WRITE_FLAG_MORE; + } else { + write_more = 0; + } + err = tcp_write(conn->pcb.tcp, dataptr, len, apiflags); + if (err == ERR_OK) { + conn->current_msg->msg.w.offset += len; + conn->current_msg->msg.w.vector_off += len; + /* check if current vector is finished */ + if (conn->current_msg->msg.w.vector_off == conn->current_msg->msg.w.vector->len) { + conn->current_msg->msg.w.vector_cnt--; + /* if we have additional vectors, move on to them */ + if (conn->current_msg->msg.w.vector_cnt > 0) { + conn->current_msg->msg.w.vector++; + conn->current_msg->msg.w.vector_off = 0; + } + } + } + } while (write_more && err == ERR_OK); + /* if OK or memory error, check available space */ + if ((err == ERR_OK) || (err == ERR_MEM)) { +err_mem: + if (dontblock && (conn->current_msg->msg.w.offset < conn->current_msg->msg.w.len)) { + /* non-blocking write did not write everything: mark the pcb non-writable + and let poll_tcp check writable space to mark the pcb writable again */ + API_EVENT(conn, NETCONN_EVT_SENDMINUS, 0); + conn->flags |= NETCONN_FLAG_CHECK_WRITESPACE; + } else if ((tcp_sndbuf(conn->pcb.tcp) <= TCP_SNDLOWAT) || + (tcp_sndqueuelen(conn->pcb.tcp) >= TCP_SNDQUEUELOWAT)) { + /* The queued byte- or pbuf-count exceeds the configured low-water limit, + let select mark this pcb as non-writable. */ + API_EVENT(conn, NETCONN_EVT_SENDMINUS, 0); + } + } + + if (err == ERR_OK) { + err_t out_err; + if ((conn->current_msg->msg.w.offset == conn->current_msg->msg.w.len) || dontblock) { + /* return sent length (caller reads length from msg.w.offset) */ + write_finished = 1; + } + out_err = tcp_output(conn->pcb.tcp); + if (out_err == ERR_RTE) { + /* If tcp_output fails because no route is found, + don't try writing any more but return the error + to the application thread. */ + err = out_err; + write_finished = 1; + } + } else if (err == ERR_MEM) { + /* If ERR_MEM, we wait for sent_tcp or poll_tcp to be called. + For blocking sockets, we do NOT return to the application + thread, since ERR_MEM is only a temporary error! Non-blocking + will remain non-writable until sent_tcp/poll_tcp is called */ + + /* tcp_write returned ERR_MEM, try tcp_output anyway */ + err_t out_err = tcp_output(conn->pcb.tcp); + if (out_err == ERR_RTE) { + /* If tcp_output fails because no route is found, + don't try writing any more but return the error + to the application thread. */ + err = out_err; + write_finished = 1; + } else if (dontblock) { + /* non-blocking write is done on ERR_MEM, set error according + to partial write or not */ + err = (conn->current_msg->msg.w.offset == 0) ? ERR_WOULDBLOCK : ERR_OK; + write_finished = 1; + } + } else { + /* On errors != ERR_MEM, we don't try writing any more but return + the error to the application thread. */ + write_finished = 1; + } + } + if (write_finished) { + /* everything was written: set back connection state + and back to application task */ + sys_sem_t *op_completed_sem = LWIP_API_MSG_SEM(conn->current_msg); + conn->current_msg->err = err; + conn->current_msg = NULL; + conn->state = NETCONN_NONE; +#if LWIP_TCPIP_CORE_LOCKING + if (delayed) +#endif + { + sys_sem_signal(op_completed_sem); + } + } +#if LWIP_TCPIP_CORE_LOCKING + else { + return ERR_MEM; + } +#endif + return ERR_OK; +} +#endif /* LWIP_TCP */ + +/** + * Send some data on a TCP pcb contained in a netconn + * Called from netconn_write + * + * @param m the api_msg pointing to the connection + */ +void +lwip_netconn_do_write(void *m) +{ + struct api_msg *msg = (struct api_msg *)m; + + err_t err = netconn_err(msg->conn); + if (err == ERR_OK) { + if (NETCONNTYPE_GROUP(msg->conn->type) == NETCONN_TCP) { +#if LWIP_TCP + if (msg->conn->state != NETCONN_NONE) { + /* netconn is connecting, closing or in blocking write */ + err = ERR_INPROGRESS; + } else if (msg->conn->pcb.tcp != NULL) { + msg->conn->state = NETCONN_WRITE; + /* set all the variables used by lwip_netconn_do_writemore */ + LWIP_ASSERT("already writing or closing", msg->conn->current_msg == NULL); + LWIP_ASSERT("msg->msg.w.len != 0", msg->msg.w.len != 0); + msg->conn->current_msg = msg; +#if LWIP_TCPIP_CORE_LOCKING + if (lwip_netconn_do_writemore(msg->conn, 0) != ERR_OK) { + LWIP_ASSERT("state!", msg->conn->state == NETCONN_WRITE); + UNLOCK_TCPIP_CORE(); + sys_arch_sem_wait(LWIP_API_MSG_SEM(msg), 0); + LOCK_TCPIP_CORE(); + LWIP_ASSERT("state!", msg->conn->state != NETCONN_WRITE); + } +#else /* LWIP_TCPIP_CORE_LOCKING */ + lwip_netconn_do_writemore(msg->conn); +#endif /* LWIP_TCPIP_CORE_LOCKING */ + /* for both cases: if lwip_netconn_do_writemore was called, don't ACK the APIMSG + since lwip_netconn_do_writemore ACKs it! */ + return; + } else { + err = ERR_CONN; + } +#else /* LWIP_TCP */ + err = ERR_VAL; +#endif /* LWIP_TCP */ +#if (LWIP_UDP || LWIP_RAW) + } else { + err = ERR_VAL; +#endif /* (LWIP_UDP || LWIP_RAW) */ + } + } + msg->err = err; + TCPIP_APIMSG_ACK(msg); +} + +/** + * Return a connection's local or remote address + * Called from netconn_getaddr + * + * @param m the api_msg pointing to the connection + */ +void +lwip_netconn_do_getaddr(void *m) +{ + struct api_msg *msg = (struct api_msg *)m; + + if (msg->conn->pcb.ip != NULL) { + if (msg->msg.ad.local) { + ip_addr_copy(API_EXPR_DEREF(msg->msg.ad.ipaddr), + msg->conn->pcb.ip->local_ip); + } else { + ip_addr_copy(API_EXPR_DEREF(msg->msg.ad.ipaddr), + msg->conn->pcb.ip->remote_ip); + } + + msg->err = ERR_OK; + switch (NETCONNTYPE_GROUP(msg->conn->type)) { +#if LWIP_RAW + case NETCONN_RAW: + if (msg->msg.ad.local) { + API_EXPR_DEREF(msg->msg.ad.port) = msg->conn->pcb.raw->protocol; + } else { + /* return an error as connecting is only a helper for upper layers */ + msg->err = ERR_CONN; + } + break; +#endif /* LWIP_RAW */ +#if LWIP_UDP + case NETCONN_UDP: + if (msg->msg.ad.local) { + API_EXPR_DEREF(msg->msg.ad.port) = msg->conn->pcb.udp->local_port; + } else { + if ((msg->conn->pcb.udp->flags & UDP_FLAGS_CONNECTED) == 0) { + msg->err = ERR_CONN; + } else { + API_EXPR_DEREF(msg->msg.ad.port) = msg->conn->pcb.udp->remote_port; + } + } + break; +#endif /* LWIP_UDP */ +#if LWIP_TCP + case NETCONN_TCP: + if ((msg->msg.ad.local == 0) && + ((msg->conn->pcb.tcp->state == CLOSED) || (msg->conn->pcb.tcp->state == LISTEN))) { + /* pcb is not connected and remote name is requested */ + msg->err = ERR_CONN; + } else { + API_EXPR_DEREF(msg->msg.ad.port) = (msg->msg.ad.local ? msg->conn->pcb.tcp->local_port : msg->conn->pcb.tcp->remote_port); + } + break; +#endif /* LWIP_TCP */ + default: + LWIP_ASSERT("invalid netconn_type", 0); + break; + } + } else { + msg->err = ERR_CONN; + } + TCPIP_APIMSG_ACK(msg); +} + +/** + * Close or half-shutdown a TCP pcb contained in a netconn + * Called from netconn_close + * In contrast to closing sockets, the netconn is not deallocated. + * + * @param m the api_msg pointing to the connection + */ +void +lwip_netconn_do_close(void *m) +{ + struct api_msg *msg = (struct api_msg *)m; + +#if LWIP_TCP + enum netconn_state state = msg->conn->state; + /* First check if this is a TCP netconn and if it is in a correct state + (LISTEN doesn't support half shutdown) */ + if ((msg->conn->pcb.tcp != NULL) && + (NETCONNTYPE_GROUP(msg->conn->type) == NETCONN_TCP) && + ((msg->msg.sd.shut == NETCONN_SHUT_RDWR) || (state != NETCONN_LISTEN))) { + /* Check if we are in a connected state */ + if (state == NETCONN_CONNECT) { + /* TCP connect in progress: cannot shutdown */ + msg->err = ERR_CONN; + } else if (state == NETCONN_WRITE) { +#if LWIP_NETCONN_FULLDUPLEX + if (msg->msg.sd.shut & NETCONN_SHUT_WR) { + /* close requested, abort running write */ + sys_sem_t *write_completed_sem; + LWIP_ASSERT("msg->conn->current_msg != NULL", msg->conn->current_msg != NULL); + write_completed_sem = LWIP_API_MSG_SEM(msg->conn->current_msg); + msg->conn->current_msg->err = ERR_CLSD; + msg->conn->current_msg = NULL; + msg->conn->state = NETCONN_NONE; + state = NETCONN_NONE; + sys_sem_signal(write_completed_sem); + } else { + LWIP_ASSERT("msg->msg.sd.shut == NETCONN_SHUT_RD", msg->msg.sd.shut == NETCONN_SHUT_RD); + /* In this case, let the write continue and do not interfere with + conn->current_msg or conn->state! */ + msg->err = tcp_shutdown(msg->conn->pcb.tcp, 1, 0); + } + } + if (state == NETCONN_NONE) { +#else /* LWIP_NETCONN_FULLDUPLEX */ + msg->err = ERR_INPROGRESS; + } else { +#endif /* LWIP_NETCONN_FULLDUPLEX */ + if (msg->msg.sd.shut & NETCONN_SHUT_RD) { +#if LWIP_NETCONN_FULLDUPLEX + /* Mark mboxes invalid */ + netconn_mark_mbox_invalid(msg->conn); +#else /* LWIP_NETCONN_FULLDUPLEX */ + netconn_drain(msg->conn); +#endif /* LWIP_NETCONN_FULLDUPLEX */ + } + LWIP_ASSERT("already writing or closing", msg->conn->current_msg == NULL); + msg->conn->state = NETCONN_CLOSE; + msg->conn->current_msg = msg; +#if LWIP_TCPIP_CORE_LOCKING + if (lwip_netconn_do_close_internal(msg->conn, 0) != ERR_OK) { + LWIP_ASSERT("state!", msg->conn->state == NETCONN_CLOSE); + UNLOCK_TCPIP_CORE(); + sys_arch_sem_wait(LWIP_API_MSG_SEM(msg), 0); + LOCK_TCPIP_CORE(); + LWIP_ASSERT("state!", msg->conn->state == NETCONN_NONE); + } +#else /* LWIP_TCPIP_CORE_LOCKING */ + lwip_netconn_do_close_internal(msg->conn); +#endif /* LWIP_TCPIP_CORE_LOCKING */ + /* for tcp netconns, lwip_netconn_do_close_internal ACKs the message */ + return; + } + } else +#endif /* LWIP_TCP */ + { + msg->err = ERR_CONN; + } + TCPIP_APIMSG_ACK(msg); +} + +#if LWIP_IGMP || (LWIP_IPV6 && LWIP_IPV6_MLD) +/** + * Join multicast groups for UDP netconns. + * Called from netconn_join_leave_group + * + * @param m the api_msg pointing to the connection + */ +void +lwip_netconn_do_join_leave_group(void *m) +{ + struct api_msg *msg = (struct api_msg *)m; + + msg->err = ERR_CONN; + if (msg->conn->pcb.tcp != NULL) { + if (NETCONNTYPE_GROUP(msg->conn->type) == NETCONN_UDP) { +#if LWIP_UDP +#if LWIP_IPV6 && LWIP_IPV6_MLD + if (NETCONNTYPE_ISIPV6(msg->conn->type)) { + if (msg->msg.jl.join_or_leave == NETCONN_JOIN) { + msg->err = mld6_joingroup(ip_2_ip6(API_EXPR_REF(msg->msg.jl.netif_addr)), + ip_2_ip6(API_EXPR_REF(msg->msg.jl.multiaddr))); + } else { + msg->err = mld6_leavegroup(ip_2_ip6(API_EXPR_REF(msg->msg.jl.netif_addr)), + ip_2_ip6(API_EXPR_REF(msg->msg.jl.multiaddr))); + } + } else +#endif /* LWIP_IPV6 && LWIP_IPV6_MLD */ + { +#if LWIP_IGMP + if (msg->msg.jl.join_or_leave == NETCONN_JOIN) { + msg->err = igmp_joingroup(ip_2_ip4(API_EXPR_REF(msg->msg.jl.netif_addr)), + ip_2_ip4(API_EXPR_REF(msg->msg.jl.multiaddr))); + } else { + msg->err = igmp_leavegroup(ip_2_ip4(API_EXPR_REF(msg->msg.jl.netif_addr)), + ip_2_ip4(API_EXPR_REF(msg->msg.jl.multiaddr))); + } +#endif /* LWIP_IGMP */ + } +#endif /* LWIP_UDP */ +#if (LWIP_TCP || LWIP_RAW) + } else { + msg->err = ERR_VAL; +#endif /* (LWIP_TCP || LWIP_RAW) */ + } + } + TCPIP_APIMSG_ACK(msg); +} +/** + * Join multicast groups for UDP netconns. + * Called from netconn_join_leave_group_netif + * + * @param m the api_msg pointing to the connection + */ +void +lwip_netconn_do_join_leave_group_netif(void *m) +{ + struct api_msg *msg = (struct api_msg *)m; + struct netif *netif; + + netif = netif_get_by_index(msg->msg.jl.if_idx); + if (netif == NULL) { + msg->err = ERR_IF; + goto done; + } + + msg->err = ERR_CONN; + if (msg->conn->pcb.tcp != NULL) { + if (NETCONNTYPE_GROUP(msg->conn->type) == NETCONN_UDP) { +#if LWIP_UDP +#if LWIP_IPV6 && LWIP_IPV6_MLD + if (NETCONNTYPE_ISIPV6(msg->conn->type)) { + if (msg->msg.jl.join_or_leave == NETCONN_JOIN) { + msg->err = mld6_joingroup_netif(netif, + ip_2_ip6(API_EXPR_REF(msg->msg.jl.multiaddr))); + } else { + msg->err = mld6_leavegroup_netif(netif, + ip_2_ip6(API_EXPR_REF(msg->msg.jl.multiaddr))); + } + } else +#endif /* LWIP_IPV6 && LWIP_IPV6_MLD */ + { +#if LWIP_IGMP + if (msg->msg.jl.join_or_leave == NETCONN_JOIN) { + msg->err = igmp_joingroup_netif(netif, + ip_2_ip4(API_EXPR_REF(msg->msg.jl.multiaddr))); + } else { + msg->err = igmp_leavegroup_netif(netif, + ip_2_ip4(API_EXPR_REF(msg->msg.jl.multiaddr))); + } +#endif /* LWIP_IGMP */ + } +#endif /* LWIP_UDP */ +#if (LWIP_TCP || LWIP_RAW) + } else { + msg->err = ERR_VAL; +#endif /* (LWIP_TCP || LWIP_RAW) */ + } + } + +done: + TCPIP_APIMSG_ACK(msg); +} +#endif /* LWIP_IGMP || (LWIP_IPV6 && LWIP_IPV6_MLD) */ + +#if LWIP_DNS +/** + * Callback function that is called when DNS name is resolved + * (or on timeout). A waiting application thread is waked up by + * signaling the semaphore. + */ +static void +lwip_netconn_do_dns_found(const char *name, const ip_addr_t *ipaddr, void *arg) +{ + struct dns_api_msg *msg = (struct dns_api_msg *)arg; + + /* we trust the internal implementation to be correct :-) */ + LWIP_UNUSED_ARG(name); + + if (ipaddr == NULL) { + /* timeout or memory error */ + API_EXPR_DEREF(msg->err) = ERR_VAL; + } else { + /* address was resolved */ + API_EXPR_DEREF(msg->err) = ERR_OK; + API_EXPR_DEREF(msg->addr) = *ipaddr; + } + /* wake up the application task waiting in netconn_gethostbyname */ + sys_sem_signal(API_EXPR_REF_SEM(msg->sem)); +} + +/** + * Execute a DNS query + * Called from netconn_gethostbyname + * + * @param arg the dns_api_msg pointing to the query + */ +void +lwip_netconn_do_gethostbyname(void *arg) +{ + struct dns_api_msg *msg = (struct dns_api_msg *)arg; + u8_t addrtype = +#if LWIP_IPV4 && LWIP_IPV6 + msg->dns_addrtype; +#else + LWIP_DNS_ADDRTYPE_DEFAULT; +#endif + + API_EXPR_DEREF(msg->err) = dns_gethostbyname_addrtype(msg->name, + API_EXPR_REF(msg->addr), lwip_netconn_do_dns_found, msg, addrtype); +#if LWIP_TCPIP_CORE_LOCKING + /* For core locking, only block if we need to wait for answer/timeout */ + if (API_EXPR_DEREF(msg->err) == ERR_INPROGRESS) { + UNLOCK_TCPIP_CORE(); + sys_sem_wait(API_EXPR_REF_SEM(msg->sem)); + LOCK_TCPIP_CORE(); + LWIP_ASSERT("do_gethostbyname still in progress!!", API_EXPR_DEREF(msg->err) != ERR_INPROGRESS); + } +#else /* LWIP_TCPIP_CORE_LOCKING */ + if (API_EXPR_DEREF(msg->err) != ERR_INPROGRESS) { + /* on error or immediate success, wake up the application + * task waiting in netconn_gethostbyname */ + sys_sem_signal(API_EXPR_REF_SEM(msg->sem)); + } +#endif /* LWIP_TCPIP_CORE_LOCKING */ +} +#endif /* LWIP_DNS */ + +#endif /* LWIP_NETCONN */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/api/err.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/api/err.c new file mode 100644 index 0000000000000000000000000000000000000000..dd2b62dab12297fd4bce230051b856581e9acf52 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/api/err.c @@ -0,0 +1,115 @@ +/** + * @file + * Error Management module + * + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#include "lwip/err.h" +#include "lwip/def.h" +#include "lwip/sys.h" + +#include "lwip/errno.h" + +#if !NO_SYS +/** Table to quickly map an lwIP error (err_t) to a socket error + * by using -err as an index */ +static const int err_to_errno_table[] = { + 0, /* ERR_OK 0 No error, everything OK. */ + ENOMEM, /* ERR_MEM -1 Out of memory error. */ + ENOBUFS, /* ERR_BUF -2 Buffer error. */ + EWOULDBLOCK, /* ERR_TIMEOUT -3 Timeout */ + EHOSTUNREACH, /* ERR_RTE -4 Routing problem. */ + EINPROGRESS, /* ERR_INPROGRESS -5 Operation in progress */ + EINVAL, /* ERR_VAL -6 Illegal value. */ + EWOULDBLOCK, /* ERR_WOULDBLOCK -7 Operation would block. */ + EADDRINUSE, /* ERR_USE -8 Address in use. */ + EALREADY, /* ERR_ALREADY -9 Already connecting. */ + EISCONN, /* ERR_ISCONN -10 Conn already established.*/ + ENOTCONN, /* ERR_CONN -11 Not connected. */ + -1, /* ERR_IF -12 Low-level netif error */ + ECONNABORTED, /* ERR_ABRT -13 Connection aborted. */ + ECONNRESET, /* ERR_RST -14 Connection reset. */ + ENOTCONN, /* ERR_CLSD -15 Connection closed. */ + EIO /* ERR_ARG -16 Illegal argument. */ +}; + +int +err_to_errno(err_t err) +{ + if ((err > 0) || (-err >= (err_t)LWIP_ARRAYSIZE(err_to_errno_table))) { + return EIO; + } + return err_to_errno_table[-err]; +} +#endif /* !NO_SYS */ + +#ifdef LWIP_DEBUG + +static const char *err_strerr[] = { + "Ok.", /* ERR_OK 0 */ + "Out of memory error.", /* ERR_MEM -1 */ + "Buffer error.", /* ERR_BUF -2 */ + "Timeout.", /* ERR_TIMEOUT -3 */ + "Routing problem.", /* ERR_RTE -4 */ + "Operation in progress.", /* ERR_INPROGRESS -5 */ + "Illegal value.", /* ERR_VAL -6 */ + "Operation would block.", /* ERR_WOULDBLOCK -7 */ + "Address in use.", /* ERR_USE -8 */ + "Already connecting.", /* ERR_ALREADY -9 */ + "Already connected.", /* ERR_ISCONN -10 */ + "Not connected.", /* ERR_CONN -11 */ + "Low-level netif error.", /* ERR_IF -12 */ + "Connection aborted.", /* ERR_ABRT -13 */ + "Connection reset.", /* ERR_RST -14 */ + "Connection closed.", /* ERR_CLSD -15 */ + "Illegal argument." /* ERR_ARG -16 */ +}; + +/** + * Convert an lwip internal error to a string representation. + * + * @param err an lwip internal err_t + * @return a string representation for err + */ +const char * +lwip_strerr(err_t err) +{ + if ((err > 0) || (-err >= (err_t)LWIP_ARRAYSIZE(err_strerr))) { + return "Unknown error."; + } + return err_strerr[-err]; +} + +#endif /* LWIP_DEBUG */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/api/if_api.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/api/if_api.c new file mode 100644 index 0000000000000000000000000000000000000000..8e094d090acede243f54a71034273347df3bad6b --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/api/if_api.c @@ -0,0 +1,102 @@ +/** + * @file + * Interface Identification APIs from: + * RFC 3493: Basic Socket Interface Extensions for IPv6 + * Section 4: Interface Identification + * + * @defgroup if_api Interface Identification API + * @ingroup socket + */ + +/* + * Copyright (c) 2017 Joel Cunningham, Garmin International, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Joel Cunningham + * + */ +#include "lwip/opt.h" + +#if LWIP_SOCKET + +#include "lwip/errno.h" +#include "lwip/if_api.h" +#include "lwip/netifapi.h" +#include "lwip/priv/sockets_priv.h" + +/** + * @ingroup if_api + * Maps an interface index to its corresponding name. + * @param ifindex interface index + * @param ifname shall point to a buffer of at least {IF_NAMESIZE} bytes + * @return If ifindex is an interface index, then the function shall return the + * value supplied in ifname, which points to a buffer now containing the interface name. + * Otherwise, the function shall return a NULL pointer. + */ +char * +lwip_if_indextoname(unsigned int ifindex, char *ifname) +{ +#if LWIP_NETIF_API + if (ifindex <= 0xff) { + err_t err = netifapi_netif_index_to_name((u8_t)ifindex, ifname); + if (!err && ifname[0] != '\0') { + return ifname; + } + } +#else /* LWIP_NETIF_API */ + LWIP_UNUSED_ARG(ifindex); + LWIP_UNUSED_ARG(ifname); +#endif /* LWIP_NETIF_API */ + set_errno(ENXIO); + return NULL; +} + +/** + * @ingroup if_api + * Returs the interface index corresponding to name ifname. + * @param ifname Interface name + * @return The corresponding index if ifname is the name of an interface; + * otherwise, zero. + */ +unsigned int +lwip_if_nametoindex(const char *ifname) +{ +#if LWIP_NETIF_API + err_t err; + u8_t idx; + + err = netifapi_netif_name_to_index(ifname, &idx); + if (!err) { + return idx; + } +#else /* LWIP_NETIF_API */ + LWIP_UNUSED_ARG(ifname); +#endif /* LWIP_NETIF_API */ + return 0; /* invalid index */ +} + +#endif /* LWIP_SOCKET */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/api/netbuf.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/api/netbuf.c new file mode 100644 index 0000000000000000000000000000000000000000..3b910de10661f2a3143dff9326eaf4528c9a3fb5 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/api/netbuf.c @@ -0,0 +1,250 @@ +/** + * @file + * Network buffer management + * + * @defgroup netbuf Network buffers + * @ingroup netconn + * Network buffer descriptor for @ref netconn. Based on @ref pbuf internally + * to avoid copying data around.\n + * Buffers must not be shared accross multiple threads, all functions except + * netbuf_new() and netbuf_delete() are not thread-safe. + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#include "lwip/opt.h" + +#if LWIP_NETCONN /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/netbuf.h" +#include "lwip/memp.h" + +#include + +/** + * @ingroup netbuf + * Create (allocate) and initialize a new netbuf. + * The netbuf doesn't yet contain a packet buffer! + * + * @return a pointer to a new netbuf + * NULL on lack of memory + */ +struct +netbuf *netbuf_new(void) +{ + struct netbuf *buf; + + buf = (struct netbuf *)memp_malloc(MEMP_NETBUF); + if (buf != NULL) { + memset(buf, 0, sizeof(struct netbuf)); + } + return buf; +} + +/** + * @ingroup netbuf + * Deallocate a netbuf allocated by netbuf_new(). + * + * @param buf pointer to a netbuf allocated by netbuf_new() + */ +void +netbuf_delete(struct netbuf *buf) +{ + if (buf != NULL) { + if (buf->p != NULL) { + pbuf_free(buf->p); + buf->p = buf->ptr = NULL; + } + memp_free(MEMP_NETBUF, buf); + } +} + +/** + * @ingroup netbuf + * Allocate memory for a packet buffer for a given netbuf. + * + * @param buf the netbuf for which to allocate a packet buffer + * @param size the size of the packet buffer to allocate + * @return pointer to the allocated memory + * NULL if no memory could be allocated + */ +void * +netbuf_alloc(struct netbuf *buf, u16_t size) +{ + LWIP_ERROR("netbuf_alloc: invalid buf", (buf != NULL), return NULL;); + + /* Deallocate any previously allocated memory. */ + if (buf->p != NULL) { + pbuf_free(buf->p); + } + buf->p = pbuf_alloc(PBUF_TRANSPORT, size, PBUF_RAM); + if (buf->p == NULL) { + return NULL; + } + LWIP_ASSERT("check that first pbuf can hold size", + (buf->p->len >= size)); + buf->ptr = buf->p; + return buf->p->payload; +} + +/** + * @ingroup netbuf + * Free the packet buffer included in a netbuf + * + * @param buf pointer to the netbuf which contains the packet buffer to free + */ +void +netbuf_free(struct netbuf *buf) +{ + LWIP_ERROR("netbuf_free: invalid buf", (buf != NULL), return;); + if (buf->p != NULL) { + pbuf_free(buf->p); + } + buf->p = buf->ptr = NULL; +#if LWIP_CHECKSUM_ON_COPY + buf->flags = 0; + buf->toport_chksum = 0; +#endif /* LWIP_CHECKSUM_ON_COPY */ +} + +/** + * @ingroup netbuf + * Let a netbuf reference existing (non-volatile) data. + * + * @param buf netbuf which should reference the data + * @param dataptr pointer to the data to reference + * @param size size of the data + * @return ERR_OK if data is referenced + * ERR_MEM if data couldn't be referenced due to lack of memory + */ +err_t +netbuf_ref(struct netbuf *buf, const void *dataptr, u16_t size) +{ + LWIP_ERROR("netbuf_ref: invalid buf", (buf != NULL), return ERR_ARG;); + if (buf->p != NULL) { + pbuf_free(buf->p); + } + buf->p = pbuf_alloc(PBUF_TRANSPORT, 0, PBUF_REF); + if (buf->p == NULL) { + buf->ptr = NULL; + return ERR_MEM; + } + ((struct pbuf_rom *)buf->p)->payload = dataptr; + buf->p->len = buf->p->tot_len = size; + buf->ptr = buf->p; + return ERR_OK; +} + +/** + * @ingroup netbuf + * Chain one netbuf to another (@see pbuf_chain) + * + * @param head the first netbuf + * @param tail netbuf to chain after head, freed by this function, may not be reference after returning + */ +void +netbuf_chain(struct netbuf *head, struct netbuf *tail) +{ + LWIP_ERROR("netbuf_chain: invalid head", (head != NULL), return;); + LWIP_ERROR("netbuf_chain: invalid tail", (tail != NULL), return;); + pbuf_cat(head->p, tail->p); + head->ptr = head->p; + memp_free(MEMP_NETBUF, tail); +} + +/** + * @ingroup netbuf + * Get the data pointer and length of the data inside a netbuf. + * + * @param buf netbuf to get the data from + * @param dataptr pointer to a void pointer where to store the data pointer + * @param len pointer to an u16_t where the length of the data is stored + * @return ERR_OK if the information was retrieved, + * ERR_BUF on error. + */ +err_t +netbuf_data(struct netbuf *buf, void **dataptr, u16_t *len) +{ + LWIP_ERROR("netbuf_data: invalid buf", (buf != NULL), return ERR_ARG;); + LWIP_ERROR("netbuf_data: invalid dataptr", (dataptr != NULL), return ERR_ARG;); + LWIP_ERROR("netbuf_data: invalid len", (len != NULL), return ERR_ARG;); + + if (buf->ptr == NULL) { + return ERR_BUF; + } + *dataptr = buf->ptr->payload; + *len = buf->ptr->len; + return ERR_OK; +} + +/** + * @ingroup netbuf + * Move the current data pointer of a packet buffer contained in a netbuf + * to the next part. + * The packet buffer itself is not modified. + * + * @param buf the netbuf to modify + * @return -1 if there is no next part + * 1 if moved to the next part but now there is no next part + * 0 if moved to the next part and there are still more parts + */ +s8_t +netbuf_next(struct netbuf *buf) +{ + LWIP_ERROR("netbuf_next: invalid buf", (buf != NULL), return -1;); + if (buf->ptr->next == NULL) { + return -1; + } + buf->ptr = buf->ptr->next; + if (buf->ptr->next == NULL) { + return 1; + } + return 0; +} + +/** + * @ingroup netbuf + * Move the current data pointer of a packet buffer contained in a netbuf + * to the beginning of the packet. + * The packet buffer itself is not modified. + * + * @param buf the netbuf to modify + */ +void +netbuf_first(struct netbuf *buf) +{ + LWIP_ERROR("netbuf_first: invalid buf", (buf != NULL), return;); + buf->ptr = buf->p; +} + +#endif /* LWIP_NETCONN */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/api/netdb.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/api/netdb.c new file mode 100644 index 0000000000000000000000000000000000000000..87714259d55dc680be4501392bcd3afcabe4bcec --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/api/netdb.c @@ -0,0 +1,414 @@ +/** + * @file + * API functions for name resolving + * + * @defgroup netdbapi NETDB API + * @ingroup socket + */ + +/* + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Simon Goldschmidt + * + */ + +#include "lwip/netdb.h" + +#if LWIP_DNS && LWIP_SOCKET + +#include "lwip/err.h" +#include "lwip/mem.h" +#include "lwip/memp.h" +#include "lwip/ip_addr.h" +#include "lwip/api.h" +#include "lwip/dns.h" + +#include /* memset */ +#include /* atoi */ + +/** helper struct for gethostbyname_r to access the char* buffer */ +struct gethostbyname_r_helper { + ip_addr_t *addr_list[2]; + ip_addr_t addr; + char *aliases; +}; + +/** h_errno is exported in netdb.h for access by applications. */ +#if LWIP_DNS_API_DECLARE_H_ERRNO +int h_errno; +#endif /* LWIP_DNS_API_DECLARE_H_ERRNO */ + +/** define "hostent" variables storage: 0 if we use a static (but unprotected) + * set of variables for lwip_gethostbyname, 1 if we use a local storage */ +#ifndef LWIP_DNS_API_HOSTENT_STORAGE +#define LWIP_DNS_API_HOSTENT_STORAGE 0 +#endif + +/** define "hostent" variables storage */ +#if LWIP_DNS_API_HOSTENT_STORAGE +#define HOSTENT_STORAGE +#else +#define HOSTENT_STORAGE static +#endif /* LWIP_DNS_API_STATIC_HOSTENT */ + +/** + * Returns an entry containing addresses of address family AF_INET + * for the host with name name. + * Due to dns_gethostbyname limitations, only one address is returned. + * + * @param name the hostname to resolve + * @return an entry containing addresses of address family AF_INET + * for the host with name name + */ +struct hostent * +lwip_gethostbyname(const char *name) +{ + err_t err; + ip_addr_t addr; + + /* buffer variables for lwip_gethostbyname() */ + HOSTENT_STORAGE struct hostent s_hostent; + HOSTENT_STORAGE char *s_aliases; + HOSTENT_STORAGE ip_addr_t s_hostent_addr; + HOSTENT_STORAGE ip_addr_t *s_phostent_addr[2]; + HOSTENT_STORAGE char s_hostname[DNS_MAX_NAME_LENGTH + 1]; + + /* query host IP address */ + err = netconn_gethostbyname(name, &addr); + if (err != ERR_OK) { + LWIP_DEBUGF(DNS_DEBUG, ("lwip_gethostbyname(%s) failed, err=%d\n", name, err)); + h_errno = HOST_NOT_FOUND; + return NULL; + } + + /* fill hostent */ + s_hostent_addr = addr; + s_phostent_addr[0] = &s_hostent_addr; + s_phostent_addr[1] = NULL; + strncpy(s_hostname, name, DNS_MAX_NAME_LENGTH); + s_hostname[DNS_MAX_NAME_LENGTH] = 0; + s_hostent.h_name = s_hostname; + s_aliases = NULL; + s_hostent.h_aliases = &s_aliases; + s_hostent.h_addrtype = AF_INET; + s_hostent.h_length = sizeof(ip_addr_t); + s_hostent.h_addr_list = (char **)&s_phostent_addr; + +#if DNS_DEBUG + /* dump hostent */ + LWIP_DEBUGF(DNS_DEBUG, ("hostent.h_name == %s\n", s_hostent.h_name)); + LWIP_DEBUGF(DNS_DEBUG, ("hostent.h_aliases == %p\n", (void *)s_hostent.h_aliases)); + /* h_aliases are always empty */ + LWIP_DEBUGF(DNS_DEBUG, ("hostent.h_addrtype == %d\n", s_hostent.h_addrtype)); + LWIP_DEBUGF(DNS_DEBUG, ("hostent.h_length == %d\n", s_hostent.h_length)); + LWIP_DEBUGF(DNS_DEBUG, ("hostent.h_addr_list == %p\n", (void *)s_hostent.h_addr_list)); + if (s_hostent.h_addr_list != NULL) { + u8_t idx; + for (idx = 0; s_hostent.h_addr_list[idx]; idx++) { + LWIP_DEBUGF(DNS_DEBUG, ("hostent.h_addr_list[%i] == %p\n", idx, s_hostent.h_addr_list[idx])); + LWIP_DEBUGF(DNS_DEBUG, ("hostent.h_addr_list[%i]-> == %s\n", idx, ipaddr_ntoa((ip_addr_t *)s_hostent.h_addr_list[idx]))); + } + } +#endif /* DNS_DEBUG */ + +#if LWIP_DNS_API_HOSTENT_STORAGE + /* this function should return the "per-thread" hostent after copy from s_hostent */ + return sys_thread_hostent(&s_hostent); +#else + return &s_hostent; +#endif /* LWIP_DNS_API_HOSTENT_STORAGE */ +} + +/** + * Thread-safe variant of lwip_gethostbyname: instead of using a static + * buffer, this function takes buffer and errno pointers as arguments + * and uses these for the result. + * + * @param name the hostname to resolve + * @param ret pre-allocated struct where to store the result + * @param buf pre-allocated buffer where to store additional data + * @param buflen the size of buf + * @param result pointer to a hostent pointer that is set to ret on success + * and set to zero on error + * @param h_errnop pointer to an int where to store errors (instead of modifying + * the global h_errno) + * @return 0 on success, non-zero on error, additional error information + * is stored in *h_errnop instead of h_errno to be thread-safe + */ +int +lwip_gethostbyname_r(const char *name, struct hostent *ret, char *buf, + size_t buflen, struct hostent **result, int *h_errnop) +{ + err_t err; + struct gethostbyname_r_helper *h; + char *hostname; + size_t namelen; + int lh_errno; + + if (h_errnop == NULL) { + /* ensure h_errnop is never NULL */ + h_errnop = &lh_errno; + } + + if (result == NULL) { + /* not all arguments given */ + *h_errnop = EINVAL; + return -1; + } + /* first thing to do: set *result to nothing */ + *result = NULL; + if ((name == NULL) || (ret == NULL) || (buf == NULL)) { + /* not all arguments given */ + *h_errnop = EINVAL; + return -1; + } + + namelen = strlen(name); + if (buflen < (sizeof(struct gethostbyname_r_helper) + LWIP_MEM_ALIGN_BUFFER(namelen + 1))) { + /* buf can't hold the data needed + a copy of name */ + *h_errnop = ERANGE; + return -1; + } + + h = (struct gethostbyname_r_helper *)LWIP_MEM_ALIGN(buf); + hostname = ((char *)h) + sizeof(struct gethostbyname_r_helper); + + /* query host IP address */ + err = netconn_gethostbyname(name, &h->addr); + if (err != ERR_OK) { + LWIP_DEBUGF(DNS_DEBUG, ("lwip_gethostbyname(%s) failed, err=%d\n", name, err)); + *h_errnop = HOST_NOT_FOUND; + return -1; + } + + /* copy the hostname into buf */ + MEMCPY(hostname, name, namelen); + hostname[namelen] = 0; + + /* fill hostent */ + h->addr_list[0] = &h->addr; + h->addr_list[1] = NULL; + h->aliases = NULL; + ret->h_name = hostname; + ret->h_aliases = &h->aliases; + ret->h_addrtype = AF_INET; + ret->h_length = sizeof(ip_addr_t); + ret->h_addr_list = (char **)&h->addr_list; + + /* set result != NULL */ + *result = ret; + + /* return success */ + return 0; +} + +/** + * Frees one or more addrinfo structures returned by getaddrinfo(), along with + * any additional storage associated with those structures. If the ai_next field + * of the structure is not null, the entire list of structures is freed. + * + * @param ai struct addrinfo to free + */ +void +lwip_freeaddrinfo(struct addrinfo *ai) +{ + struct addrinfo *next; + + while (ai != NULL) { + next = ai->ai_next; + memp_free(MEMP_NETDB, ai); + ai = next; + } +} + +/** + * Translates the name of a service location (for example, a host name) and/or + * a service name and returns a set of socket addresses and associated + * information to be used in creating a socket with which to address the + * specified service. + * Memory for the result is allocated internally and must be freed by calling + * lwip_freeaddrinfo()! + * + * Due to a limitation in dns_gethostbyname, only the first address of a + * host is returned. + * Also, service names are not supported (only port numbers)! + * + * @param nodename descriptive name or address string of the host + * (may be NULL -> local address) + * @param servname port number as string of NULL + * @param hints structure containing input values that set socktype and protocol + * @param res pointer to a pointer where to store the result (set to NULL on failure) + * @return 0 on success, non-zero on failure + * + * @todo: implement AI_V4MAPPED, AI_ADDRCONFIG + */ +int +lwip_getaddrinfo(const char *nodename, const char *servname, + const struct addrinfo *hints, struct addrinfo **res) +{ + err_t err; + ip_addr_t addr; + struct addrinfo *ai; + struct sockaddr_storage *sa = NULL; + int port_nr = 0; + size_t total_size; + size_t namelen = 0; + int ai_family; + + if (res == NULL) { + return EAI_FAIL; + } + *res = NULL; + if ((nodename == NULL) && (servname == NULL)) { + return EAI_NONAME; + } + + if (hints != NULL) { + ai_family = hints->ai_family; + if ((ai_family != AF_UNSPEC) +#if LWIP_IPV4 + && (ai_family != AF_INET) +#endif /* LWIP_IPV4 */ +#if LWIP_IPV6 + && (ai_family != AF_INET6) +#endif /* LWIP_IPV6 */ + ) { + return EAI_FAMILY; + } + } else { + ai_family = AF_UNSPEC; + } + + if (servname != NULL) { + /* service name specified: convert to port number + * @todo?: currently, only ASCII integers (port numbers) are supported (AI_NUMERICSERV)! */ + port_nr = atoi(servname); + if ((port_nr <= 0) || (port_nr > 0xffff)) { + return EAI_SERVICE; + } + } + + if (nodename != NULL) { + /* service location specified, try to resolve */ + if ((hints != NULL) && (hints->ai_flags & AI_NUMERICHOST)) { + /* no DNS lookup, just parse for an address string */ + if (!ipaddr_aton(nodename, &addr)) { + return EAI_NONAME; + } +#if LWIP_IPV4 && LWIP_IPV6 + if ((IP_IS_V6_VAL(addr) && ai_family == AF_INET) || + (IP_IS_V4_VAL(addr) && ai_family == AF_INET6)) { + return EAI_NONAME; + } +#endif /* LWIP_IPV4 && LWIP_IPV6 */ + } else { +#if LWIP_IPV4 && LWIP_IPV6 + /* AF_UNSPEC: prefer IPv4 */ + u8_t type = NETCONN_DNS_IPV4_IPV6; + if (ai_family == AF_INET) { + type = NETCONN_DNS_IPV4; + } else if (ai_family == AF_INET6) { + type = NETCONN_DNS_IPV6; + } +#endif /* LWIP_IPV4 && LWIP_IPV6 */ + err = netconn_gethostbyname_addrtype(nodename, &addr, type); + if (err != ERR_OK) { + return EAI_FAIL; + } + } + } else { + /* service location specified, use loopback address */ + if ((hints != NULL) && (hints->ai_flags & AI_PASSIVE)) { + ip_addr_set_any_val(ai_family == AF_INET6, addr); + } else { + ip_addr_set_loopback_val(ai_family == AF_INET6, addr); + } + } + + total_size = sizeof(struct addrinfo) + sizeof(struct sockaddr_storage); + if (nodename != NULL) { + namelen = strlen(nodename); + if (namelen > DNS_MAX_NAME_LENGTH) { + /* invalid name length */ + return EAI_FAIL; + } + LWIP_ASSERT("namelen is too long", total_size + namelen + 1 > total_size); + total_size += namelen + 1; + } + /* If this fails, please report to lwip-devel! :-) */ + LWIP_ASSERT("total_size <= NETDB_ELEM_SIZE: please report this!", + total_size <= NETDB_ELEM_SIZE); + ai = (struct addrinfo *)memp_malloc(MEMP_NETDB); + if (ai == NULL) { + return EAI_MEMORY; + } + memset(ai, 0, total_size); + /* cast through void* to get rid of alignment warnings */ + sa = (struct sockaddr_storage *)(void *)((u8_t *)ai + sizeof(struct addrinfo)); + if (IP_IS_V6_VAL(addr)) { +#if LWIP_IPV6 + struct sockaddr_in6 *sa6 = (struct sockaddr_in6 *)sa; + /* set up sockaddr */ + inet6_addr_from_ip6addr(&sa6->sin6_addr, ip_2_ip6(&addr)); + sa6->sin6_family = AF_INET6; + sa6->sin6_len = sizeof(struct sockaddr_in6); + sa6->sin6_port = lwip_htons((u16_t)port_nr); + sa6->sin6_scope_id = ip6_addr_zone(ip_2_ip6(&addr)); + ai->ai_family = AF_INET6; +#endif /* LWIP_IPV6 */ + } else { +#if LWIP_IPV4 + struct sockaddr_in *sa4 = (struct sockaddr_in *)sa; + /* set up sockaddr */ + inet_addr_from_ip4addr(&sa4->sin_addr, ip_2_ip4(&addr)); + sa4->sin_family = AF_INET; + sa4->sin_len = sizeof(struct sockaddr_in); + sa4->sin_port = lwip_htons((u16_t)port_nr); + ai->ai_family = AF_INET; +#endif /* LWIP_IPV4 */ + } + + /* set up addrinfo */ + if (hints != NULL) { + /* copy socktype & protocol from hints if specified */ + ai->ai_socktype = hints->ai_socktype; + ai->ai_protocol = hints->ai_protocol; + } + if (nodename != NULL) { + /* copy nodename to canonname if specified */ + ai->ai_canonname = ((char *)ai + sizeof(struct addrinfo) + sizeof(struct sockaddr_storage)); + MEMCPY(ai->ai_canonname, nodename, namelen); + ai->ai_canonname[namelen] = 0; + } + ai->ai_addrlen = sizeof(struct sockaddr_storage); + ai->ai_addr = (struct sockaddr *)sa; + + *res = ai; + + return 0; +} + +#endif /* LWIP_DNS && LWIP_SOCKET */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/api/netifapi.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/api/netifapi.c new file mode 100644 index 0000000000000000000000000000000000000000..25957cd5c3db742ddb81ab4ea4bd0725d6173036 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/api/netifapi.c @@ -0,0 +1,380 @@ +/** + * @file + * Network Interface Sequential API module + * + * @defgroup netifapi NETIF API + * @ingroup sequential_api + * Thread-safe functions to be called from non-TCPIP threads + * + * @defgroup netifapi_netif NETIF related + * @ingroup netifapi + * To be called from non-TCPIP threads + */ + +/* + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + */ + +#include "lwip/opt.h" + +#if LWIP_NETIF_API /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/etharp.h" +#include "lwip/netifapi.h" +#include "lwip/memp.h" +#include "lwip/priv/tcpip_priv.h" + +#include /* strncpy */ + +#define NETIFAPI_VAR_REF(name) API_VAR_REF(name) +#define NETIFAPI_VAR_DECLARE(name) API_VAR_DECLARE(struct netifapi_msg, name) +#define NETIFAPI_VAR_ALLOC(name) API_VAR_ALLOC(struct netifapi_msg, MEMP_NETIFAPI_MSG, name, ERR_MEM) +#define NETIFAPI_VAR_FREE(name) API_VAR_FREE(MEMP_NETIFAPI_MSG, name) + +/** + * Call netif_add() inside the tcpip_thread context. + */ +static err_t +netifapi_do_netif_add(struct tcpip_api_call_data *m) +{ + /* cast through void* to silence alignment warnings. + * We know it works because the structs have been instantiated as struct netifapi_msg */ + struct netifapi_msg *msg = (struct netifapi_msg *)(void *)m; + + if (!netif_add( msg->netif, +#if LWIP_IPV4 + API_EXPR_REF(msg->msg.add.ipaddr), + API_EXPR_REF(msg->msg.add.netmask), + API_EXPR_REF(msg->msg.add.gw), +#endif /* LWIP_IPV4 */ + msg->msg.add.state, + msg->msg.add.init, + msg->msg.add.input)) { + return ERR_IF; + } else { + return ERR_OK; + } +} + +#if LWIP_IPV4 +/** + * Call netif_set_addr() inside the tcpip_thread context. + */ +static err_t +netifapi_do_netif_set_addr(struct tcpip_api_call_data *m) +{ + /* cast through void* to silence alignment warnings. + * We know it works because the structs have been instantiated as struct netifapi_msg */ + struct netifapi_msg *msg = (struct netifapi_msg *)(void *)m; + + netif_set_addr( msg->netif, + API_EXPR_REF(msg->msg.add.ipaddr), + API_EXPR_REF(msg->msg.add.netmask), + API_EXPR_REF(msg->msg.add.gw)); + return ERR_OK; +} +#endif /* LWIP_IPV4 */ + +/** +* Call netif_name_to_index() inside the tcpip_thread context. +*/ +static err_t +netifapi_do_name_to_index(struct tcpip_api_call_data *m) +{ + /* cast through void* to silence alignment warnings. + * We know it works because the structs have been instantiated as struct netifapi_msg */ + struct netifapi_msg *msg = (struct netifapi_msg *)(void *)m; + + msg->msg.ifs.index = netif_name_to_index(msg->msg.ifs.name); + return ERR_OK; +} + +/** +* Call netif_index_to_name() inside the tcpip_thread context. +*/ +static err_t +netifapi_do_index_to_name(struct tcpip_api_call_data *m) +{ + /* cast through void* to silence alignment warnings. + * We know it works because the structs have been instantiated as struct netifapi_msg */ + struct netifapi_msg *msg = (struct netifapi_msg *)(void *)m; + + if (!netif_index_to_name(msg->msg.ifs.index, msg->msg.ifs.name)) { + /* return failure via empty name */ + msg->msg.ifs.name[0] = '\0'; + } + return ERR_OK; +} + +/** + * Call the "errtfunc" (or the "voidfunc" if "errtfunc" is NULL) inside the + * tcpip_thread context. + */ +static err_t +netifapi_do_netif_common(struct tcpip_api_call_data *m) +{ + /* cast through void* to silence alignment warnings. + * We know it works because the structs have been instantiated as struct netifapi_msg */ + struct netifapi_msg *msg = (struct netifapi_msg *)(void *)m; + + if (msg->msg.common.errtfunc != NULL) { + return msg->msg.common.errtfunc(msg->netif); + } else { + msg->msg.common.voidfunc(msg->netif); + return ERR_OK; + } +} + +#if LWIP_ARP && LWIP_IPV4 +/** + * @ingroup netifapi_arp + * Add or update an entry in the ARP cache. + * For an update, ipaddr is used to find the cache entry. + * + * @param ipaddr IPv4 address of cache entry + * @param ethaddr hardware address mapped to ipaddr + * @param type type of ARP cache entry + * @return ERR_OK: entry added/updated, else error from err_t + */ +err_t +netifapi_arp_add(const ip4_addr_t *ipaddr, struct eth_addr *ethaddr, enum netifapi_arp_entry type) +{ + err_t err; + + /* We only support permanent entries currently */ + LWIP_UNUSED_ARG(type); + +#if ETHARP_SUPPORT_STATIC_ENTRIES && LWIP_TCPIP_CORE_LOCKING + LOCK_TCPIP_CORE(); + err = etharp_add_static_entry(ipaddr, ethaddr); + UNLOCK_TCPIP_CORE(); +#else + /* @todo add new vars to struct netifapi_msg and create a 'do' func */ + LWIP_UNUSED_ARG(ipaddr); + LWIP_UNUSED_ARG(ethaddr); + err = ERR_VAL; +#endif /* ETHARP_SUPPORT_STATIC_ENTRIES && LWIP_TCPIP_CORE_LOCKING */ + + return err; +} + +/** + * @ingroup netifapi_arp + * Remove an entry in the ARP cache identified by ipaddr + * + * @param ipaddr IPv4 address of cache entry + * @param type type of ARP cache entry + * @return ERR_OK: entry removed, else error from err_t + */ +err_t +netifapi_arp_remove(const ip4_addr_t *ipaddr, enum netifapi_arp_entry type) +{ + err_t err; + + /* We only support permanent entries currently */ + LWIP_UNUSED_ARG(type); + +#if ETHARP_SUPPORT_STATIC_ENTRIES && LWIP_TCPIP_CORE_LOCKING + LOCK_TCPIP_CORE(); + err = etharp_remove_static_entry(ipaddr); + UNLOCK_TCPIP_CORE(); +#else + /* @todo add new vars to struct netifapi_msg and create a 'do' func */ + LWIP_UNUSED_ARG(ipaddr); + err = ERR_VAL; +#endif /* ETHARP_SUPPORT_STATIC_ENTRIES && LWIP_TCPIP_CORE_LOCKING */ + + return err; +} +#endif /* LWIP_ARP && LWIP_IPV4 */ + +/** + * @ingroup netifapi_netif + * Call netif_add() in a thread-safe way by running that function inside the + * tcpip_thread context. + * + * @note for params @see netif_add() + */ +err_t +netifapi_netif_add(struct netif *netif, +#if LWIP_IPV4 + const ip4_addr_t *ipaddr, const ip4_addr_t *netmask, const ip4_addr_t *gw, +#endif /* LWIP_IPV4 */ + void *state, netif_init_fn init, netif_input_fn input) +{ + err_t err; + NETIFAPI_VAR_DECLARE(msg); + NETIFAPI_VAR_ALLOC(msg); + +#if LWIP_IPV4 + if (ipaddr == NULL) { + ipaddr = IP4_ADDR_ANY4; + } + if (netmask == NULL) { + netmask = IP4_ADDR_ANY4; + } + if (gw == NULL) { + gw = IP4_ADDR_ANY4; + } +#endif /* LWIP_IPV4 */ + + NETIFAPI_VAR_REF(msg).netif = netif; +#if LWIP_IPV4 + NETIFAPI_VAR_REF(msg).msg.add.ipaddr = NETIFAPI_VAR_REF(ipaddr); + NETIFAPI_VAR_REF(msg).msg.add.netmask = NETIFAPI_VAR_REF(netmask); + NETIFAPI_VAR_REF(msg).msg.add.gw = NETIFAPI_VAR_REF(gw); +#endif /* LWIP_IPV4 */ + NETIFAPI_VAR_REF(msg).msg.add.state = state; + NETIFAPI_VAR_REF(msg).msg.add.init = init; + NETIFAPI_VAR_REF(msg).msg.add.input = input; + err = tcpip_api_call(netifapi_do_netif_add, &API_VAR_REF(msg).call); + NETIFAPI_VAR_FREE(msg); + return err; +} + +#if LWIP_IPV4 +/** + * @ingroup netifapi_netif + * Call netif_set_addr() in a thread-safe way by running that function inside the + * tcpip_thread context. + * + * @note for params @see netif_set_addr() + */ +err_t +netifapi_netif_set_addr(struct netif *netif, + const ip4_addr_t *ipaddr, + const ip4_addr_t *netmask, + const ip4_addr_t *gw) +{ + err_t err; + NETIFAPI_VAR_DECLARE(msg); + NETIFAPI_VAR_ALLOC(msg); + + if (ipaddr == NULL) { + ipaddr = IP4_ADDR_ANY4; + } + if (netmask == NULL) { + netmask = IP4_ADDR_ANY4; + } + if (gw == NULL) { + gw = IP4_ADDR_ANY4; + } + + NETIFAPI_VAR_REF(msg).netif = netif; + NETIFAPI_VAR_REF(msg).msg.add.ipaddr = NETIFAPI_VAR_REF(ipaddr); + NETIFAPI_VAR_REF(msg).msg.add.netmask = NETIFAPI_VAR_REF(netmask); + NETIFAPI_VAR_REF(msg).msg.add.gw = NETIFAPI_VAR_REF(gw); + err = tcpip_api_call(netifapi_do_netif_set_addr, &API_VAR_REF(msg).call); + NETIFAPI_VAR_FREE(msg); + return err; +} +#endif /* LWIP_IPV4 */ + +/** + * call the "errtfunc" (or the "voidfunc" if "errtfunc" is NULL) in a thread-safe + * way by running that function inside the tcpip_thread context. + * + * @note use only for functions where there is only "netif" parameter. + */ +err_t +netifapi_netif_common(struct netif *netif, netifapi_void_fn voidfunc, + netifapi_errt_fn errtfunc) +{ + err_t err; + NETIFAPI_VAR_DECLARE(msg); + NETIFAPI_VAR_ALLOC(msg); + + NETIFAPI_VAR_REF(msg).netif = netif; + NETIFAPI_VAR_REF(msg).msg.common.voidfunc = voidfunc; + NETIFAPI_VAR_REF(msg).msg.common.errtfunc = errtfunc; + err = tcpip_api_call(netifapi_do_netif_common, &API_VAR_REF(msg).call); + NETIFAPI_VAR_FREE(msg); + return err; +} + +/** +* @ingroup netifapi_netif +* Call netif_name_to_index() in a thread-safe way by running that function inside the +* tcpip_thread context. +* +* @param name the interface name of the netif +* @param idx output index of the found netif +*/ +err_t +netifapi_netif_name_to_index(const char *name, u8_t *idx) +{ + err_t err; + NETIFAPI_VAR_DECLARE(msg); + NETIFAPI_VAR_ALLOC(msg); + + *idx = 0; + +#if LWIP_MPU_COMPATIBLE + strncpy(NETIFAPI_VAR_REF(msg).msg.ifs.name, name, NETIF_NAMESIZE - 1); + NETIFAPI_VAR_REF(msg).msg.ifs.name[NETIF_NAMESIZE - 1] = '\0'; +#else + NETIFAPI_VAR_REF(msg).msg.ifs.name = LWIP_CONST_CAST(char *, name); +#endif /* LWIP_MPU_COMPATIBLE */ + err = tcpip_api_call(netifapi_do_name_to_index, &API_VAR_REF(msg).call); + if (!err) { + *idx = NETIFAPI_VAR_REF(msg).msg.ifs.index; + } + NETIFAPI_VAR_FREE(msg); + return err; +} + +/** +* @ingroup netifapi_netif +* Call netif_index_to_name() in a thread-safe way by running that function inside the +* tcpip_thread context. +* +* @param idx the interface index of the netif +* @param name output name of the found netif, empty '\0' string if netif not found. +* name should be of at least NETIF_NAMESIZE bytes +*/ +err_t +netifapi_netif_index_to_name(u8_t idx, char *name) +{ + err_t err; + NETIFAPI_VAR_DECLARE(msg); + NETIFAPI_VAR_ALLOC(msg); + + NETIFAPI_VAR_REF(msg).msg.ifs.index = idx; +#if !LWIP_MPU_COMPATIBLE + NETIFAPI_VAR_REF(msg).msg.ifs.name = name; +#endif /* LWIP_MPU_COMPATIBLE */ + err = tcpip_api_call(netifapi_do_index_to_name, &API_VAR_REF(msg).call); +#if LWIP_MPU_COMPATIBLE + if (!err) { + strncpy(name, NETIFAPI_VAR_REF(msg).msg.ifs.name, NETIF_NAMESIZE - 1); + name[NETIF_NAMESIZE - 1] = '\0'; + } +#endif /* LWIP_MPU_COMPATIBLE */ + NETIFAPI_VAR_FREE(msg); + return err; +} + +#endif /* LWIP_NETIF_API */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/api/sockets.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/api/sockets.c new file mode 100644 index 0000000000000000000000000000000000000000..cb7df914fa91b561e9df16a5edb94080d1c700af --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/api/sockets.c @@ -0,0 +1,4160 @@ +/** + * @file + * Sockets BSD-Like API module + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + * Improved by Marc Boucher and David Haas + * + */ + +#include "lwip/opt.h" + +#if LWIP_SOCKET /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/sockets.h" +#include "lwip/priv/sockets_priv.h" +#include "lwip/api.h" +#include "lwip/igmp.h" +#include "lwip/inet.h" +#include "lwip/tcp.h" +#include "lwip/raw.h" +#include "lwip/udp.h" +#include "lwip/memp.h" +#include "lwip/pbuf.h" +#include "lwip/netif.h" +#include "lwip/priv/tcpip_priv.h" +#include "lwip/mld6.h" +#if LWIP_CHECKSUM_ON_COPY +#include "lwip/inet_chksum.h" +#endif + +#if LWIP_COMPAT_SOCKETS == 2 && LWIP_POSIX_SOCKETS_IO_NAMES +#include +#endif + +#include + +#ifdef LWIP_HOOK_FILENAME +#include LWIP_HOOK_FILENAME +#endif + +/* If the netconn API is not required publicly, then we include the necessary + files here to get the implementation */ +#if !LWIP_NETCONN +#undef LWIP_NETCONN +#define LWIP_NETCONN 1 +#include "api_msg.c" +#include "api_lib.c" +#include "netbuf.c" +#undef LWIP_NETCONN +#define LWIP_NETCONN 0 +#endif + +#define API_SELECT_CB_VAR_REF(name) API_VAR_REF(name) +#define API_SELECT_CB_VAR_DECLARE(name) API_VAR_DECLARE(struct lwip_select_cb, name) +#define API_SELECT_CB_VAR_ALLOC(name, retblock) API_VAR_ALLOC_EXT(struct lwip_select_cb, MEMP_SELECT_CB, name, retblock) +#define API_SELECT_CB_VAR_FREE(name) API_VAR_FREE(MEMP_SELECT_CB, name) + +#if LWIP_IPV4 +#define IP4ADDR_PORT_TO_SOCKADDR(sin, ipaddr, port) do { \ + (sin)->sin_len = sizeof(struct sockaddr_in); \ + (sin)->sin_family = AF_INET; \ + (sin)->sin_port = lwip_htons((port)); \ + inet_addr_from_ip4addr(&(sin)->sin_addr, ipaddr); \ + memset((sin)->sin_zero, 0, SIN_ZERO_LEN); }while(0) +#define SOCKADDR4_TO_IP4ADDR_PORT(sin, ipaddr, port) do { \ + inet_addr_to_ip4addr(ip_2_ip4(ipaddr), &((sin)->sin_addr)); \ + (port) = lwip_ntohs((sin)->sin_port); }while(0) +#endif /* LWIP_IPV4 */ + +#if LWIP_IPV6 +#define IP6ADDR_PORT_TO_SOCKADDR(sin6, ipaddr, port) do { \ + (sin6)->sin6_len = sizeof(struct sockaddr_in6); \ + (sin6)->sin6_family = AF_INET6; \ + (sin6)->sin6_port = lwip_htons((port)); \ + (sin6)->sin6_flowinfo = 0; \ + inet6_addr_from_ip6addr(&(sin6)->sin6_addr, ipaddr); \ + (sin6)->sin6_scope_id = ip6_addr_zone(ipaddr); }while(0) +#define SOCKADDR6_TO_IP6ADDR_PORT(sin6, ipaddr, port) do { \ + inet6_addr_to_ip6addr(ip_2_ip6(ipaddr), &((sin6)->sin6_addr)); \ + if (ip6_addr_has_scope(ip_2_ip6(ipaddr), IP6_UNKNOWN)) { \ + ip6_addr_set_zone(ip_2_ip6(ipaddr), (u8_t)((sin6)->sin6_scope_id)); \ + } \ + (port) = lwip_ntohs((sin6)->sin6_port); }while(0) +#endif /* LWIP_IPV6 */ + +#if LWIP_IPV4 && LWIP_IPV6 +static void sockaddr_to_ipaddr_port(const struct sockaddr *sockaddr, ip_addr_t *ipaddr, u16_t *port); + +#define IS_SOCK_ADDR_LEN_VALID(namelen) (((namelen) == sizeof(struct sockaddr_in)) || \ + ((namelen) == sizeof(struct sockaddr_in6))) +#define IS_SOCK_ADDR_TYPE_VALID(name) (((name)->sa_family == AF_INET) || \ + ((name)->sa_family == AF_INET6)) +#define SOCK_ADDR_TYPE_MATCH(name, sock) \ + ((((name)->sa_family == AF_INET) && !(NETCONNTYPE_ISIPV6((sock)->conn->type))) || \ + (((name)->sa_family == AF_INET6) && (NETCONNTYPE_ISIPV6((sock)->conn->type)))) +#define IPADDR_PORT_TO_SOCKADDR(sockaddr, ipaddr, port) do { \ + if (IP_IS_ANY_TYPE_VAL(*ipaddr) || IP_IS_V6_VAL(*ipaddr)) { \ + IP6ADDR_PORT_TO_SOCKADDR((struct sockaddr_in6*)(void*)(sockaddr), ip_2_ip6(ipaddr), port); \ + } else { \ + IP4ADDR_PORT_TO_SOCKADDR((struct sockaddr_in*)(void*)(sockaddr), ip_2_ip4(ipaddr), port); \ + } } while(0) +#define SOCKADDR_TO_IPADDR_PORT(sockaddr, ipaddr, port) sockaddr_to_ipaddr_port(sockaddr, ipaddr, &(port)) +#define DOMAIN_TO_NETCONN_TYPE(domain, type) (((domain) == AF_INET) ? \ + (type) : (enum netconn_type)((type) | NETCONN_TYPE_IPV6)) +#elif LWIP_IPV6 /* LWIP_IPV4 && LWIP_IPV6 */ +#define IS_SOCK_ADDR_LEN_VALID(namelen) ((namelen) == sizeof(struct sockaddr_in6)) +#define IS_SOCK_ADDR_TYPE_VALID(name) ((name)->sa_family == AF_INET6) +#define SOCK_ADDR_TYPE_MATCH(name, sock) 1 +#define IPADDR_PORT_TO_SOCKADDR(sockaddr, ipaddr, port) \ + IP6ADDR_PORT_TO_SOCKADDR((struct sockaddr_in6*)(void*)(sockaddr), ip_2_ip6(ipaddr), port) +#define SOCKADDR_TO_IPADDR_PORT(sockaddr, ipaddr, port) \ + SOCKADDR6_TO_IP6ADDR_PORT((const struct sockaddr_in6*)(const void*)(sockaddr), ipaddr, port) +#define DOMAIN_TO_NETCONN_TYPE(domain, netconn_type) (netconn_type) +#else /*-> LWIP_IPV4: LWIP_IPV4 && LWIP_IPV6 */ +#define IS_SOCK_ADDR_LEN_VALID(namelen) ((namelen) == sizeof(struct sockaddr_in)) +#define IS_SOCK_ADDR_TYPE_VALID(name) ((name)->sa_family == AF_INET) +#define SOCK_ADDR_TYPE_MATCH(name, sock) 1 +#define IPADDR_PORT_TO_SOCKADDR(sockaddr, ipaddr, port) \ + IP4ADDR_PORT_TO_SOCKADDR((struct sockaddr_in*)(void*)(sockaddr), ip_2_ip4(ipaddr), port) +#define SOCKADDR_TO_IPADDR_PORT(sockaddr, ipaddr, port) \ + SOCKADDR4_TO_IP4ADDR_PORT((const struct sockaddr_in*)(const void*)(sockaddr), ipaddr, port) +#define DOMAIN_TO_NETCONN_TYPE(domain, netconn_type) (netconn_type) +#endif /* LWIP_IPV6 */ + +#define IS_SOCK_ADDR_TYPE_VALID_OR_UNSPEC(name) (((name)->sa_family == AF_UNSPEC) || \ + IS_SOCK_ADDR_TYPE_VALID(name)) +#define SOCK_ADDR_TYPE_MATCH_OR_UNSPEC(name, sock) (((name)->sa_family == AF_UNSPEC) || \ + SOCK_ADDR_TYPE_MATCH(name, sock)) +#define IS_SOCK_ADDR_ALIGNED(name) ((((mem_ptr_t)(name)) % 4) == 0) + + +#define LWIP_SOCKOPT_CHECK_OPTLEN(sock, optlen, opttype) do { if ((optlen) < sizeof(opttype)) { done_socket(sock); return EINVAL; }}while(0) +#define LWIP_SOCKOPT_CHECK_OPTLEN_CONN(sock, optlen, opttype) do { \ + LWIP_SOCKOPT_CHECK_OPTLEN(sock, optlen, opttype); \ + if ((sock)->conn == NULL) { done_socket(sock); return EINVAL; } }while(0) +#define LWIP_SOCKOPT_CHECK_OPTLEN_CONN_PCB(sock, optlen, opttype) do { \ + LWIP_SOCKOPT_CHECK_OPTLEN(sock, optlen, opttype); \ + if (((sock)->conn == NULL) || ((sock)->conn->pcb.tcp == NULL)) { done_socket(sock); return EINVAL; } }while(0) +#define LWIP_SOCKOPT_CHECK_OPTLEN_CONN_PCB_TYPE(sock, optlen, opttype, netconntype) do { \ + LWIP_SOCKOPT_CHECK_OPTLEN_CONN_PCB(sock, optlen, opttype); \ + if (NETCONNTYPE_GROUP(netconn_type((sock)->conn)) != netconntype) { done_socket(sock); return ENOPROTOOPT; } }while(0) + + +#define LWIP_SETGETSOCKOPT_DATA_VAR_REF(name) API_VAR_REF(name) +#define LWIP_SETGETSOCKOPT_DATA_VAR_DECLARE(name) API_VAR_DECLARE(struct lwip_setgetsockopt_data, name) +#define LWIP_SETGETSOCKOPT_DATA_VAR_FREE(name) API_VAR_FREE(MEMP_SOCKET_SETGETSOCKOPT_DATA, name) +#if LWIP_MPU_COMPATIBLE +#define LWIP_SETGETSOCKOPT_DATA_VAR_ALLOC(name, sock) do { \ + name = (struct lwip_setgetsockopt_data *)memp_malloc(MEMP_SOCKET_SETGETSOCKOPT_DATA); \ + if (name == NULL) { \ + sock_set_errno(sock, ENOMEM); \ + done_socket(sock); \ + return -1; \ + } }while(0) +#else /* LWIP_MPU_COMPATIBLE */ +#define LWIP_SETGETSOCKOPT_DATA_VAR_ALLOC(name, sock) +#endif /* LWIP_MPU_COMPATIBLE */ + +#if LWIP_SO_SNDRCVTIMEO_NONSTANDARD +#define LWIP_SO_SNDRCVTIMEO_OPTTYPE int +#define LWIP_SO_SNDRCVTIMEO_SET(optval, val) (*(int *)(optval) = (val)) +#define LWIP_SO_SNDRCVTIMEO_GET_MS(optval) ((long)*(const int*)(optval)) +#else +#define LWIP_SO_SNDRCVTIMEO_OPTTYPE struct timeval +#define LWIP_SO_SNDRCVTIMEO_SET(optval, val) do { \ + u32_t loc = (val); \ + ((struct timeval *)(optval))->tv_sec = (long)((loc) / 1000U); \ + ((struct timeval *)(optval))->tv_usec = (long)(((loc) % 1000U) * 1000U); }while(0) +#define LWIP_SO_SNDRCVTIMEO_GET_MS(optval) ((((const struct timeval *)(optval))->tv_sec * 1000) + (((const struct timeval *)(optval))->tv_usec / 1000)) +#endif + + +/** A struct sockaddr replacement that has the same alignment as sockaddr_in/ + * sockaddr_in6 if instantiated. + */ +union sockaddr_aligned { + struct sockaddr sa; +#if LWIP_IPV6 + struct sockaddr_in6 sin6; +#endif /* LWIP_IPV6 */ +#if LWIP_IPV4 + struct sockaddr_in sin; +#endif /* LWIP_IPV4 */ +}; + +/* Define the number of IPv4 multicast memberships, default is one per socket */ +#ifndef LWIP_SOCKET_MAX_MEMBERSHIPS +#define LWIP_SOCKET_MAX_MEMBERSHIPS NUM_SOCKETS +#endif + +#if LWIP_IGMP +/* This is to keep track of IP_ADD_MEMBERSHIP calls to drop the membership when + a socket is closed */ +struct lwip_socket_multicast_pair { + /** the socket */ + struct lwip_sock *sock; + /** the interface address */ + ip4_addr_t if_addr; + /** the group address */ + ip4_addr_t multi_addr; +}; + +static struct lwip_socket_multicast_pair socket_ipv4_multicast_memberships[LWIP_SOCKET_MAX_MEMBERSHIPS]; + +static int lwip_socket_register_membership(int s, const ip4_addr_t *if_addr, const ip4_addr_t *multi_addr); +static void lwip_socket_unregister_membership(int s, const ip4_addr_t *if_addr, const ip4_addr_t *multi_addr); +static void lwip_socket_drop_registered_memberships(int s); +#endif /* LWIP_IGMP */ + +#if LWIP_IPV6_MLD +/* This is to keep track of IP_JOIN_GROUP calls to drop the membership when + a socket is closed */ +struct lwip_socket_multicast_mld6_pair { + /** the socket */ + struct lwip_sock *sock; + /** the interface index */ + u8_t if_idx; + /** the group address */ + ip6_addr_t multi_addr; +}; + +static struct lwip_socket_multicast_mld6_pair socket_ipv6_multicast_memberships[LWIP_SOCKET_MAX_MEMBERSHIPS]; + +static int lwip_socket_register_mld6_membership(int s, unsigned int if_idx, const ip6_addr_t *multi_addr); +static void lwip_socket_unregister_mld6_membership(int s, unsigned int if_idx, const ip6_addr_t *multi_addr); +static void lwip_socket_drop_registered_mld6_memberships(int s); +#endif /* LWIP_IPV6_MLD */ + +/** The global array of available sockets */ +static struct lwip_sock sockets[NUM_SOCKETS]; + +#if LWIP_SOCKET_SELECT || LWIP_SOCKET_POLL +#if LWIP_TCPIP_CORE_LOCKING +/* protect the select_cb_list using core lock */ +#define LWIP_SOCKET_SELECT_DECL_PROTECT(lev) +#define LWIP_SOCKET_SELECT_PROTECT(lev) LOCK_TCPIP_CORE() +#define LWIP_SOCKET_SELECT_UNPROTECT(lev) UNLOCK_TCPIP_CORE() +#else /* LWIP_TCPIP_CORE_LOCKING */ +/* protect the select_cb_list using SYS_LIGHTWEIGHT_PROT */ +#define LWIP_SOCKET_SELECT_DECL_PROTECT(lev) SYS_ARCH_DECL_PROTECT(lev) +#define LWIP_SOCKET_SELECT_PROTECT(lev) SYS_ARCH_PROTECT(lev) +#define LWIP_SOCKET_SELECT_UNPROTECT(lev) SYS_ARCH_UNPROTECT(lev) +/** This counter is increased from lwip_select when the list is changed + and checked in select_check_waiters to see if it has changed. */ +static volatile int select_cb_ctr; +#endif /* LWIP_TCPIP_CORE_LOCKING */ +/** The global list of tasks waiting for select */ +static struct lwip_select_cb *select_cb_list; +#endif /* LWIP_SOCKET_SELECT || LWIP_SOCKET_POLL */ + +#define sock_set_errno(sk, e) do { \ + const int sockerr = (e); \ + set_errno(sockerr); \ +} while (0) + +/* Forward declaration of some functions */ +#if LWIP_SOCKET_SELECT || LWIP_SOCKET_POLL +static void event_callback(struct netconn *conn, enum netconn_evt evt, u16_t len); +#define DEFAULT_SOCKET_EVENTCB event_callback +static void select_check_waiters(int s, int has_recvevent, int has_sendevent, int has_errevent); +#else +#define DEFAULT_SOCKET_EVENTCB NULL +#endif +#if !LWIP_TCPIP_CORE_LOCKING +static void lwip_getsockopt_callback(void *arg); +static void lwip_setsockopt_callback(void *arg); +#endif +static int lwip_getsockopt_impl(int s, int level, int optname, void *optval, socklen_t *optlen); +static int lwip_setsockopt_impl(int s, int level, int optname, const void *optval, socklen_t optlen); +static int free_socket_locked(struct lwip_sock *sock, int is_tcp, struct netconn **conn, + union lwip_sock_lastdata *lastdata); +static void free_socket_free_elements(int is_tcp, struct netconn *conn, union lwip_sock_lastdata *lastdata); + +#if LWIP_IPV4 && LWIP_IPV6 +static void +sockaddr_to_ipaddr_port(const struct sockaddr *sockaddr, ip_addr_t *ipaddr, u16_t *port) +{ + if ((sockaddr->sa_family) == AF_INET6) { + SOCKADDR6_TO_IP6ADDR_PORT((const struct sockaddr_in6 *)(const void *)(sockaddr), ipaddr, *port); + ipaddr->type = IPADDR_TYPE_V6; + } else { + SOCKADDR4_TO_IP4ADDR_PORT((const struct sockaddr_in *)(const void *)(sockaddr), ipaddr, *port); + ipaddr->type = IPADDR_TYPE_V4; + } +} +#endif /* LWIP_IPV4 && LWIP_IPV6 */ + +/** LWIP_NETCONN_SEM_PER_THREAD==1: initialize thread-local semaphore */ +void +lwip_socket_thread_init(void) +{ + netconn_thread_init(); +} + +/** LWIP_NETCONN_SEM_PER_THREAD==1: destroy thread-local semaphore */ +void +lwip_socket_thread_cleanup(void) +{ + netconn_thread_cleanup(); +} + +#if LWIP_NETCONN_FULLDUPLEX +/* Thread-safe increment of sock->fd_used, with overflow check */ +static int +sock_inc_used(struct lwip_sock *sock) +{ + int ret; + SYS_ARCH_DECL_PROTECT(lev); + + LWIP_ASSERT("sock != NULL", sock != NULL); + + SYS_ARCH_PROTECT(lev); + if (sock->fd_free_pending) { + /* prevent new usage of this socket if free is pending */ + ret = 0; + } else { + ++sock->fd_used; + ret = 1; + LWIP_ASSERT("sock->fd_used != 0", sock->fd_used != 0); + } + SYS_ARCH_UNPROTECT(lev); + return ret; +} + +/* Like sock_inc_used(), but called under SYS_ARCH_PROTECT lock. */ +static int +sock_inc_used_locked(struct lwip_sock *sock) +{ + LWIP_ASSERT("sock != NULL", sock != NULL); + + if (sock->fd_free_pending) { + LWIP_ASSERT("sock->fd_used != 0", sock->fd_used != 0); + return 0; + } + + ++sock->fd_used; + LWIP_ASSERT("sock->fd_used != 0", sock->fd_used != 0); + return 1; +} + +/* In full-duplex mode,sock->fd_used != 0 prevents a socket descriptor from being + * released (and possibly reused) when used from more than one thread + * (e.g. read-while-write or close-while-write, etc) + * This function is called at the end of functions using (try)get_socket*(). + */ +static void +done_socket(struct lwip_sock *sock) +{ + int freed = 0; + int is_tcp = 0; + struct netconn *conn = NULL; + union lwip_sock_lastdata lastdata; + SYS_ARCH_DECL_PROTECT(lev); + LWIP_ASSERT("sock != NULL", sock != NULL); + + SYS_ARCH_PROTECT(lev); + LWIP_ASSERT("sock->fd_used > 0", sock->fd_used > 0); + if (--sock->fd_used == 0) { + if (sock->fd_free_pending) { + /* free the socket */ + sock->fd_used = 1; + is_tcp = sock->fd_free_pending & LWIP_SOCK_FD_FREE_TCP; + freed = free_socket_locked(sock, is_tcp, &conn, &lastdata); + } + } + SYS_ARCH_UNPROTECT(lev); + + if (freed) { + free_socket_free_elements(is_tcp, conn, &lastdata); + } +} + +#else /* LWIP_NETCONN_FULLDUPLEX */ +#define sock_inc_used(sock) 1 +#define sock_inc_used_locked(sock) 1 +#define done_socket(sock) +#endif /* LWIP_NETCONN_FULLDUPLEX */ + +/* Translate a socket 'int' into a pointer (only fails if the index is invalid) */ +static struct lwip_sock * +tryget_socket_unconn_nouse(int fd) +{ + int s = fd - LWIP_SOCKET_OFFSET; + if ((s < 0) || (s >= NUM_SOCKETS)) { + LWIP_DEBUGF(SOCKETS_DEBUG, ("tryget_socket_unconn(%d): invalid\n", fd)); + return NULL; + } + return &sockets[s]; +} + +struct lwip_sock * +lwip_socket_dbg_get_socket(int fd) +{ + return tryget_socket_unconn_nouse(fd); +} + +/* Translate a socket 'int' into a pointer (only fails if the index is invalid) */ +static struct lwip_sock * +tryget_socket_unconn(int fd) +{ + struct lwip_sock *ret = tryget_socket_unconn_nouse(fd); + if (ret != NULL) { + if (!sock_inc_used(ret)) { + return NULL; + } + } + return ret; +} + +/* Like tryget_socket_unconn(), but called under SYS_ARCH_PROTECT lock. */ +static struct lwip_sock * +tryget_socket_unconn_locked(int fd) +{ + struct lwip_sock *ret = tryget_socket_unconn_nouse(fd); + if (ret != NULL) { + if (!sock_inc_used_locked(ret)) { + return NULL; + } + } + return ret; +} + +/** + * Same as get_socket but doesn't set errno + * + * @param fd externally used socket index + * @return struct lwip_sock for the socket or NULL if not found + */ +static struct lwip_sock * +tryget_socket(int fd) +{ + struct lwip_sock *sock = tryget_socket_unconn(fd); + if (sock != NULL) { + if (sock->conn) { + return sock; + } + done_socket(sock); + } + return NULL; +} + +/** + * Map a externally used socket index to the internal socket representation. + * + * @param fd externally used socket index + * @return struct lwip_sock for the socket or NULL if not found + */ +static struct lwip_sock * +get_socket(int fd) +{ + struct lwip_sock *sock = tryget_socket(fd); + if (!sock) { + if ((fd < LWIP_SOCKET_OFFSET) || (fd >= (LWIP_SOCKET_OFFSET + NUM_SOCKETS))) { + LWIP_DEBUGF(SOCKETS_DEBUG, ("get_socket(%d): invalid\n", fd)); + } + set_errno(EBADF); + return NULL; + } + return sock; +} + +/** + * Allocate a new socket for a given netconn. + * + * @param newconn the netconn for which to allocate a socket + * @param accepted 1 if socket has been created by accept(), + * 0 if socket has been created by socket() + * @return the index of the new socket; -1 on error + */ +static int +alloc_socket(struct netconn *newconn, int accepted) +{ + int i; + SYS_ARCH_DECL_PROTECT(lev); + LWIP_UNUSED_ARG(accepted); + + /* allocate a new socket identifier */ + for (i = 0; i < NUM_SOCKETS; ++i) { + /* Protect socket array */ + SYS_ARCH_PROTECT(lev); + if (!sockets[i].conn) { +#if LWIP_NETCONN_FULLDUPLEX + if (sockets[i].fd_used) { + SYS_ARCH_UNPROTECT(lev); + continue; + } + sockets[i].fd_used = 1; + sockets[i].fd_free_pending = 0; +#endif + sockets[i].conn = newconn; + /* The socket is not yet known to anyone, so no need to protect + after having marked it as used. */ + SYS_ARCH_UNPROTECT(lev); + sockets[i].lastdata.pbuf = NULL; +#if LWIP_SOCKET_SELECT || LWIP_SOCKET_POLL + LWIP_ASSERT("sockets[i].select_waiting == 0", sockets[i].select_waiting == 0); + sockets[i].rcvevent = 0; + /* TCP sendbuf is empty, but the socket is not yet writable until connected + * (unless it has been created by accept()). */ + sockets[i].sendevent = (NETCONNTYPE_GROUP(newconn->type) == NETCONN_TCP ? (accepted != 0) : 1); + sockets[i].errevent = 0; +#endif /* LWIP_SOCKET_SELECT || LWIP_SOCKET_POLL */ + return i + LWIP_SOCKET_OFFSET; + } + SYS_ARCH_UNPROTECT(lev); + } + return -1; +} + +/** Free a socket (under lock) + * + * @param sock the socket to free + * @param is_tcp != 0 for TCP sockets, used to free lastdata + * @param conn the socekt's netconn is stored here, must be freed externally + * @param lastdata lastdata is stored here, must be freed externally + */ +static int +free_socket_locked(struct lwip_sock *sock, int is_tcp, struct netconn **conn, + union lwip_sock_lastdata *lastdata) +{ +#if LWIP_NETCONN_FULLDUPLEX + LWIP_ASSERT("sock->fd_used > 0", sock->fd_used > 0); + sock->fd_used--; + if (sock->fd_used > 0) { + sock->fd_free_pending = LWIP_SOCK_FD_FREE_FREE | (is_tcp ? LWIP_SOCK_FD_FREE_TCP : 0); + return 0; + } +#else /* LWIP_NETCONN_FULLDUPLEX */ + LWIP_UNUSED_ARG(is_tcp); +#endif /* LWIP_NETCONN_FULLDUPLEX */ + + *lastdata = sock->lastdata; + sock->lastdata.pbuf = NULL; + *conn = sock->conn; + sock->conn = NULL; + return 1; +} + +/** Free a socket's leftover members. + */ +static void +free_socket_free_elements(int is_tcp, struct netconn *conn, union lwip_sock_lastdata *lastdata) +{ + if (lastdata->pbuf != NULL) { + if (is_tcp) { + pbuf_free(lastdata->pbuf); + } else { + netbuf_delete(lastdata->netbuf); + } + } + if (conn != NULL) { + /* netconn_prepare_delete() has already been called, here we only free the conn */ + netconn_delete(conn); + } +} + +/** Free a socket. The socket's netconn must have been + * delete before! + * + * @param sock the socket to free + * @param is_tcp != 0 for TCP sockets, used to free lastdata + */ +static void +free_socket(struct lwip_sock *sock, int is_tcp) +{ + int freed; + struct netconn *conn; + union lwip_sock_lastdata lastdata; + SYS_ARCH_DECL_PROTECT(lev); + + /* Protect socket array */ + SYS_ARCH_PROTECT(lev); + + freed = free_socket_locked(sock, is_tcp, &conn, &lastdata); + SYS_ARCH_UNPROTECT(lev); + /* don't use 'sock' after this line, as another task might have allocated it */ + + if (freed) { + free_socket_free_elements(is_tcp, conn, &lastdata); + } +} + +/* Below this, the well-known socket functions are implemented. + * Use google.com or opengroup.org to get a good description :-) + * + * Exceptions are documented! + */ + +int +lwip_accept(int s, struct sockaddr *addr, socklen_t *addrlen) +{ + struct lwip_sock *sock, *nsock; + struct netconn *newconn; + ip_addr_t naddr; + u16_t port = 0; + int newsock; + err_t err; + int recvevent; + SYS_ARCH_DECL_PROTECT(lev); + + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_accept(%d)...\n", s)); + sock = get_socket(s); + if (!sock) { + return -1; + } + + /* wait for a new connection */ + err = netconn_accept(sock->conn, &newconn); + if (err != ERR_OK) { + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_accept(%d): netconn_acept failed, err=%d\n", s, err)); + if (NETCONNTYPE_GROUP(netconn_type(sock->conn)) != NETCONN_TCP) { + sock_set_errno(sock, EOPNOTSUPP); + } else if (err == ERR_CLSD) { + sock_set_errno(sock, EINVAL); + } else { + sock_set_errno(sock, err_to_errno(err)); + } + done_socket(sock); + return -1; + } + LWIP_ASSERT("newconn != NULL", newconn != NULL); + + newsock = alloc_socket(newconn, 1); + if (newsock == -1) { + netconn_delete(newconn); + sock_set_errno(sock, ENFILE); + done_socket(sock); + return -1; + } + LWIP_ASSERT("invalid socket index", (newsock >= LWIP_SOCKET_OFFSET) && (newsock < NUM_SOCKETS + LWIP_SOCKET_OFFSET)); + nsock = &sockets[newsock - LWIP_SOCKET_OFFSET]; + + /* See event_callback: If data comes in right away after an accept, even + * though the server task might not have created a new socket yet. + * In that case, newconn->socket is counted down (newconn->socket--), + * so nsock->rcvevent is >= 1 here! + */ + SYS_ARCH_PROTECT(lev); + recvevent = (s16_t)(-1 - newconn->socket); + newconn->socket = newsock; + SYS_ARCH_UNPROTECT(lev); + + if (newconn->callback) { + LOCK_TCPIP_CORE(); + while (recvevent > 0) { + recvevent--; + newconn->callback(newconn, NETCONN_EVT_RCVPLUS, 0); + } + UNLOCK_TCPIP_CORE(); + } + + /* Note that POSIX only requires us to check addr is non-NULL. addrlen must + * not be NULL if addr is valid. + */ + if ((addr != NULL) && (addrlen != NULL)) { + union sockaddr_aligned tempaddr; + /* get the IP address and port of the remote host */ + err = netconn_peer(newconn, &naddr, &port); + if (err != ERR_OK) { + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_accept(%d): netconn_peer failed, err=%d\n", s, err)); + netconn_delete(newconn); + free_socket(nsock, 1); + sock_set_errno(sock, err_to_errno(err)); + done_socket(sock); + return -1; + } + + IPADDR_PORT_TO_SOCKADDR(&tempaddr, &naddr, port); + if (*addrlen > tempaddr.sa.sa_len) { + *addrlen = tempaddr.sa.sa_len; + } + MEMCPY(addr, &tempaddr, *addrlen); + + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_accept(%d) returning new sock=%d addr=", s, newsock)); + ip_addr_debug_print_val(SOCKETS_DEBUG, naddr); + LWIP_DEBUGF(SOCKETS_DEBUG, (" port=%"U16_F"\n", port)); + } else { + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_accept(%d) returning new sock=%d", s, newsock)); + } + + sock_set_errno(sock, 0); + done_socket(sock); + done_socket(nsock); + return newsock; +} + +int +lwip_bind(int s, const struct sockaddr *name, socklen_t namelen) +{ + struct lwip_sock *sock; + ip_addr_t local_addr; + u16_t local_port; + err_t err; + + sock = get_socket(s); + if (!sock) { + return -1; + } + + if (!SOCK_ADDR_TYPE_MATCH(name, sock)) { + /* sockaddr does not match socket type (IPv4/IPv6) */ + sock_set_errno(sock, err_to_errno(ERR_VAL)); + done_socket(sock); + return -1; + } + + /* check size, family and alignment of 'name' */ + LWIP_ERROR("lwip_bind: invalid address", (IS_SOCK_ADDR_LEN_VALID(namelen) && + IS_SOCK_ADDR_TYPE_VALID(name) && IS_SOCK_ADDR_ALIGNED(name)), + sock_set_errno(sock, err_to_errno(ERR_ARG)); done_socket(sock); return -1;); + LWIP_UNUSED_ARG(namelen); + + SOCKADDR_TO_IPADDR_PORT(name, &local_addr, local_port); + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_bind(%d, addr=", s)); + ip_addr_debug_print_val(SOCKETS_DEBUG, local_addr); + LWIP_DEBUGF(SOCKETS_DEBUG, (" port=%"U16_F")\n", local_port)); + +#if LWIP_IPV4 && LWIP_IPV6 + /* Dual-stack: Unmap IPv4 mapped IPv6 addresses */ + if (IP_IS_V6_VAL(local_addr) && ip6_addr_isipv4mappedipv6(ip_2_ip6(&local_addr))) { + unmap_ipv4_mapped_ipv6(ip_2_ip4(&local_addr), ip_2_ip6(&local_addr)); + IP_SET_TYPE_VAL(local_addr, IPADDR_TYPE_V4); + } +#endif /* LWIP_IPV4 && LWIP_IPV6 */ + + err = netconn_bind(sock->conn, &local_addr, local_port); + + if (err != ERR_OK) { + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_bind(%d) failed, err=%d\n", s, err)); + sock_set_errno(sock, err_to_errno(err)); + done_socket(sock); + return -1; + } + + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_bind(%d) succeeded\n", s)); + sock_set_errno(sock, 0); + done_socket(sock); + return 0; +} + +int +lwip_close(int s) +{ + struct lwip_sock *sock; + int is_tcp = 0; + err_t err; + + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_close(%d)\n", s)); + + sock = get_socket(s); + if (!sock) { + return -1; + } + + if (sock->conn != NULL) { + is_tcp = NETCONNTYPE_GROUP(netconn_type(sock->conn)) == NETCONN_TCP; + } else { + LWIP_ASSERT("sock->lastdata == NULL", sock->lastdata.pbuf == NULL); + } + +#if LWIP_IGMP + /* drop all possibly joined IGMP memberships */ + lwip_socket_drop_registered_memberships(s); +#endif /* LWIP_IGMP */ +#if LWIP_IPV6_MLD + /* drop all possibly joined MLD6 memberships */ + lwip_socket_drop_registered_mld6_memberships(s); +#endif /* LWIP_IPV6_MLD */ + + err = netconn_prepare_delete(sock->conn); + if (err != ERR_OK) { + sock_set_errno(sock, err_to_errno(err)); + done_socket(sock); + return -1; + } + + free_socket(sock, is_tcp); + set_errno(0); + return 0; +} + +int +lwip_connect(int s, const struct sockaddr *name, socklen_t namelen) +{ + struct lwip_sock *sock; + err_t err; + + sock = get_socket(s); + if (!sock) { + return -1; + } + + if (!SOCK_ADDR_TYPE_MATCH_OR_UNSPEC(name, sock)) { + /* sockaddr does not match socket type (IPv4/IPv6) */ + sock_set_errno(sock, err_to_errno(ERR_VAL)); + done_socket(sock); + return -1; + } + + LWIP_UNUSED_ARG(namelen); + if (name->sa_family == AF_UNSPEC) { + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_connect(%d, AF_UNSPEC)\n", s)); + err = netconn_disconnect(sock->conn); + } else { + ip_addr_t remote_addr; + u16_t remote_port; + + /* check size, family and alignment of 'name' */ + LWIP_ERROR("lwip_connect: invalid address", IS_SOCK_ADDR_LEN_VALID(namelen) && + IS_SOCK_ADDR_TYPE_VALID_OR_UNSPEC(name) && IS_SOCK_ADDR_ALIGNED(name), + sock_set_errno(sock, err_to_errno(ERR_ARG)); done_socket(sock); return -1;); + + SOCKADDR_TO_IPADDR_PORT(name, &remote_addr, remote_port); + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_connect(%d, addr=", s)); + ip_addr_debug_print_val(SOCKETS_DEBUG, remote_addr); + LWIP_DEBUGF(SOCKETS_DEBUG, (" port=%"U16_F")\n", remote_port)); + +#if LWIP_IPV4 && LWIP_IPV6 + /* Dual-stack: Unmap IPv4 mapped IPv6 addresses */ + if (IP_IS_V6_VAL(remote_addr) && ip6_addr_isipv4mappedipv6(ip_2_ip6(&remote_addr))) { + unmap_ipv4_mapped_ipv6(ip_2_ip4(&remote_addr), ip_2_ip6(&remote_addr)); + IP_SET_TYPE_VAL(remote_addr, IPADDR_TYPE_V4); + } +#endif /* LWIP_IPV4 && LWIP_IPV6 */ + + err = netconn_connect(sock->conn, &remote_addr, remote_port); + } + + if (err != ERR_OK) { + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_connect(%d) failed, err=%d\n", s, err)); + sock_set_errno(sock, err_to_errno(err)); + done_socket(sock); + return -1; + } + + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_connect(%d) succeeded\n", s)); + sock_set_errno(sock, 0); + done_socket(sock); + return 0; +} + +/** + * Set a socket into listen mode. + * The socket may not have been used for another connection previously. + * + * @param s the socket to set to listening mode + * @param backlog (ATTENTION: needs TCP_LISTEN_BACKLOG=1) + * @return 0 on success, non-zero on failure + */ +int +lwip_listen(int s, int backlog) +{ + struct lwip_sock *sock; + err_t err; + + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_listen(%d, backlog=%d)\n", s, backlog)); + + sock = get_socket(s); + if (!sock) { + return -1; + } + + /* limit the "backlog" parameter to fit in an u8_t */ + backlog = LWIP_MIN(LWIP_MAX(backlog, 0), 0xff); + + err = netconn_listen_with_backlog(sock->conn, (u8_t)backlog); + + if (err != ERR_OK) { + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_listen(%d) failed, err=%d\n", s, err)); + if (NETCONNTYPE_GROUP(netconn_type(sock->conn)) != NETCONN_TCP) { + sock_set_errno(sock, EOPNOTSUPP); + } else { + sock_set_errno(sock, err_to_errno(err)); + } + done_socket(sock); + return -1; + } + + sock_set_errno(sock, 0); + done_socket(sock); + return 0; +} + +#if LWIP_TCP +/* Helper function to loop over receiving pbufs from netconn + * until "len" bytes are received or we're otherwise done. + * Keeps sock->lastdata for peeking or partly copying. + */ +static ssize_t +lwip_recv_tcp(struct lwip_sock *sock, void *mem, size_t len, int flags) +{ + u8_t apiflags = NETCONN_NOAUTORCVD; + ssize_t recvd = 0; + ssize_t recv_left = (len <= SSIZE_MAX) ? (ssize_t)len : SSIZE_MAX; + + LWIP_ASSERT("no socket given", sock != NULL); + LWIP_ASSERT("this should be checked internally", NETCONNTYPE_GROUP(netconn_type(sock->conn)) == NETCONN_TCP); + + if (flags & MSG_DONTWAIT) { + apiflags |= NETCONN_DONTBLOCK; + } + + do { + struct pbuf *p; + err_t err; + u16_t copylen; + + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_recv_tcp: top while sock->lastdata=%p\n", (void *)sock->lastdata.pbuf)); + /* Check if there is data left from the last recv operation. */ + if (sock->lastdata.pbuf) { + p = sock->lastdata.pbuf; + } else { + /* No data was left from the previous operation, so we try to get + some from the network. */ + err = netconn_recv_tcp_pbuf_flags(sock->conn, &p, apiflags); + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_recv_tcp: netconn_recv err=%d, pbuf=%p\n", + err, (void *)p)); + + if (err != ERR_OK) { + if (recvd > 0) { + /* already received data, return that (this trusts in getting the same error from + netconn layer again next time netconn_recv is called) */ + goto lwip_recv_tcp_done; + } + /* We should really do some error checking here. */ + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_recv_tcp: p == NULL, error is \"%s\"!\n", + lwip_strerr(err))); + sock_set_errno(sock, err_to_errno(err)); + if (err == ERR_CLSD) { + return 0; + } else { + return -1; + } + } + LWIP_ASSERT("p != NULL", p != NULL); + sock->lastdata.pbuf = p; + } + + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_recv_tcp: buflen=%"U16_F" recv_left=%d off=%d\n", + p->tot_len, (int)recv_left, (int)recvd)); + + if (recv_left > p->tot_len) { + copylen = p->tot_len; + } else { + copylen = (u16_t)recv_left; + } + if (recvd + copylen < recvd) { + /* overflow */ + copylen = (u16_t)(SSIZE_MAX - recvd); + } + + /* copy the contents of the received buffer into + the supplied memory pointer mem */ + pbuf_copy_partial(p, (u8_t *)mem + recvd, copylen, 0); + + recvd += copylen; + + /* TCP combines multiple pbufs for one recv */ + LWIP_ASSERT("invalid copylen, len would underflow", recv_left >= copylen); + recv_left -= copylen; + + /* Unless we peek the incoming message... */ + if ((flags & MSG_PEEK) == 0) { + /* ... check if there is data left in the pbuf */ + LWIP_ASSERT("invalid copylen", p->tot_len >= copylen); + if (p->tot_len - copylen > 0) { + /* If so, it should be saved in the sock structure for the next recv call. + We store the pbuf but hide/free the consumed data: */ + sock->lastdata.pbuf = pbuf_free_header(p, copylen); + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_recv_tcp: lastdata now pbuf=%p\n", (void *)sock->lastdata.pbuf)); + } else { + sock->lastdata.pbuf = NULL; + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_recv_tcp: deleting pbuf=%p\n", (void *)p)); + pbuf_free(p); + } + } + /* once we have some data to return, only add more if we don't need to wait */ + apiflags |= NETCONN_DONTBLOCK | NETCONN_NOFIN; + /* @todo: do we need to support peeking more than one pbuf? */ + } while ((recv_left > 0) && !(flags & MSG_PEEK)); +lwip_recv_tcp_done: + if ((recvd > 0) && !(flags & MSG_PEEK)) { + /* ensure window update after copying all data */ + netconn_tcp_recvd(sock->conn, (size_t)recvd); + } + sock_set_errno(sock, 0); + return recvd; +} +#endif + +/* Convert a netbuf's address data to struct sockaddr */ +static int +lwip_sock_make_addr(struct netconn *conn, ip_addr_t *fromaddr, u16_t port, + struct sockaddr *from, socklen_t *fromlen) +{ + int truncated = 0; + union sockaddr_aligned saddr; + + LWIP_UNUSED_ARG(conn); + + LWIP_ASSERT("fromaddr != NULL", fromaddr != NULL); + LWIP_ASSERT("from != NULL", from != NULL); + LWIP_ASSERT("fromlen != NULL", fromlen != NULL); + +#if LWIP_IPV4 && LWIP_IPV6 + /* Dual-stack: Map IPv4 addresses to IPv4 mapped IPv6 */ + if (NETCONNTYPE_ISIPV6(netconn_type(conn)) && IP_IS_V4(fromaddr)) { + ip4_2_ipv4_mapped_ipv6(ip_2_ip6(fromaddr), ip_2_ip4(fromaddr)); + IP_SET_TYPE(fromaddr, IPADDR_TYPE_V6); + } +#endif /* LWIP_IPV4 && LWIP_IPV6 */ + + IPADDR_PORT_TO_SOCKADDR(&saddr, fromaddr, port); + if (*fromlen < saddr.sa.sa_len) { + truncated = 1; + } else if (*fromlen > saddr.sa.sa_len) { + *fromlen = saddr.sa.sa_len; + } + MEMCPY(from, &saddr, *fromlen); + return truncated; +} + +#if LWIP_TCP +/* Helper function to get a tcp socket's remote address info */ +static int +lwip_recv_tcp_from(struct lwip_sock *sock, struct sockaddr *from, socklen_t *fromlen, const char *dbg_fn, int dbg_s, ssize_t dbg_ret) +{ + if (sock == NULL) { + return 0; + } + LWIP_UNUSED_ARG(dbg_fn); + LWIP_UNUSED_ARG(dbg_s); + LWIP_UNUSED_ARG(dbg_ret); + +#if !SOCKETS_DEBUG + if (from && fromlen) +#endif /* !SOCKETS_DEBUG */ + { + /* get remote addr/port from tcp_pcb */ + u16_t port; + ip_addr_t tmpaddr; + netconn_getaddr(sock->conn, &tmpaddr, &port, 0); + LWIP_DEBUGF(SOCKETS_DEBUG, ("%s(%d): addr=", dbg_fn, dbg_s)); + ip_addr_debug_print_val(SOCKETS_DEBUG, tmpaddr); + LWIP_DEBUGF(SOCKETS_DEBUG, (" port=%"U16_F" len=%d\n", port, (int)dbg_ret)); + if (from && fromlen) { + return lwip_sock_make_addr(sock->conn, &tmpaddr, port, from, fromlen); + } + } + return 0; +} +#endif + +/* Helper function to receive a netbuf from a udp or raw netconn. + * Keeps sock->lastdata for peeking. + */ +static err_t +lwip_recvfrom_udp_raw(struct lwip_sock *sock, int flags, struct msghdr *msg, u16_t *datagram_len, int dbg_s) +{ + struct netbuf *buf; + u8_t apiflags; + err_t err; + u16_t buflen, copylen, copied; + int i; + + LWIP_UNUSED_ARG(dbg_s); + LWIP_ERROR("lwip_recvfrom_udp_raw: invalid arguments", (msg->msg_iov != NULL) || (msg->msg_iovlen <= 0), return ERR_ARG;); + + if (flags & MSG_DONTWAIT) { + apiflags = NETCONN_DONTBLOCK; + } else { + apiflags = 0; + } + + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_recvfrom_udp_raw[UDP/RAW]: top sock->lastdata=%p\n", (void *)sock->lastdata.netbuf)); + /* Check if there is data left from the last recv operation. */ + buf = sock->lastdata.netbuf; + if (buf == NULL) { + /* No data was left from the previous operation, so we try to get + some from the network. */ + err = netconn_recv_udp_raw_netbuf_flags(sock->conn, &buf, apiflags); + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_recvfrom_udp_raw[UDP/RAW]: netconn_recv err=%d, netbuf=%p\n", + err, (void *)buf)); + + if (err != ERR_OK) { + return err; + } + LWIP_ASSERT("buf != NULL", buf != NULL); + sock->lastdata.netbuf = buf; + } + buflen = buf->p->tot_len; + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_recvfrom_udp_raw: buflen=%"U16_F"\n", buflen)); + + copied = 0; + /* copy the pbuf payload into the iovs */ + for (i = 0; (i < msg->msg_iovlen) && (copied < buflen); i++) { + u16_t len_left = (u16_t)(buflen - copied); + if (msg->msg_iov[i].iov_len > len_left) { + copylen = len_left; + } else { + copylen = (u16_t)msg->msg_iov[i].iov_len; + } + + /* copy the contents of the received buffer into + the supplied memory buffer */ + pbuf_copy_partial(buf->p, (u8_t *)msg->msg_iov[i].iov_base, copylen, copied); + copied = (u16_t)(copied + copylen); + } + + /* Check to see from where the data was.*/ +#if !SOCKETS_DEBUG + if (msg->msg_name && msg->msg_namelen) +#endif /* !SOCKETS_DEBUG */ + { + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_recvfrom_udp_raw(%d): addr=", dbg_s)); + ip_addr_debug_print_val(SOCKETS_DEBUG, *netbuf_fromaddr(buf)); + LWIP_DEBUGF(SOCKETS_DEBUG, (" port=%"U16_F" len=%d\n", netbuf_fromport(buf), copied)); + if (msg->msg_name && msg->msg_namelen) { + lwip_sock_make_addr(sock->conn, netbuf_fromaddr(buf), netbuf_fromport(buf), + (struct sockaddr *)msg->msg_name, &msg->msg_namelen); + } + } + + /* Initialize flag output */ + msg->msg_flags = 0; + + if (msg->msg_control) { + u8_t wrote_msg = 0; +#if LWIP_NETBUF_RECVINFO + /* Check if packet info was recorded */ + if (buf->flags & NETBUF_FLAG_DESTADDR) { + if (IP_IS_V4(&buf->toaddr)) { +#if LWIP_IPV4 + if (msg->msg_controllen >= CMSG_SPACE(sizeof(struct in_pktinfo))) { + struct cmsghdr *chdr = CMSG_FIRSTHDR(msg); /* This will always return a header!! */ + struct in_pktinfo *pkti = (struct in_pktinfo *)CMSG_DATA(chdr); + chdr->cmsg_level = IPPROTO_IP; + chdr->cmsg_type = IP_PKTINFO; + chdr->cmsg_len = CMSG_LEN(sizeof(struct in_pktinfo)); + pkti->ipi_ifindex = buf->p->if_idx; + inet_addr_from_ip4addr(&pkti->ipi_addr, ip_2_ip4(netbuf_destaddr(buf))); + msg->msg_controllen = CMSG_SPACE(sizeof(struct in_pktinfo)); + wrote_msg = 1; + } else { + msg->msg_flags |= MSG_CTRUNC; + } +#endif /* LWIP_IPV4 */ + } + } +#endif /* LWIP_NETBUF_RECVINFO */ + + if (!wrote_msg) { + msg->msg_controllen = 0; + } + } + + /* If we don't peek the incoming message: zero lastdata pointer and free the netbuf */ + if ((flags & MSG_PEEK) == 0) { + sock->lastdata.netbuf = NULL; + netbuf_delete(buf); + } + if (datagram_len) { + *datagram_len = buflen; + } + return ERR_OK; +} + +ssize_t +lwip_recvfrom(int s, void *mem, size_t len, int flags, + struct sockaddr *from, socklen_t *fromlen) +{ + struct lwip_sock *sock; + ssize_t ret; + + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_recvfrom(%d, %p, %"SZT_F", 0x%x, ..)\n", s, mem, len, flags)); + sock = get_socket(s); + if (!sock) { + return -1; + } +#if LWIP_TCP + if (NETCONNTYPE_GROUP(netconn_type(sock->conn)) == NETCONN_TCP) { + ret = lwip_recv_tcp(sock, mem, len, flags); + lwip_recv_tcp_from(sock, from, fromlen, "lwip_recvfrom", s, ret); + done_socket(sock); + return ret; + } else +#endif + { + u16_t datagram_len = 0; + struct iovec vec; + struct msghdr msg; + err_t err; + vec.iov_base = mem; + vec.iov_len = len; + msg.msg_control = NULL; + msg.msg_controllen = 0; + msg.msg_flags = 0; + msg.msg_iov = &vec; + msg.msg_iovlen = 1; + msg.msg_name = from; + msg.msg_namelen = (fromlen ? *fromlen : 0); + err = lwip_recvfrom_udp_raw(sock, flags, &msg, &datagram_len, s); + if (err != ERR_OK) { + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_recvfrom[UDP/RAW](%d): buf == NULL, error is \"%s\"!\n", + s, lwip_strerr(err))); + sock_set_errno(sock, err_to_errno(err)); + done_socket(sock); + return -1; + } + ret = (ssize_t)LWIP_MIN(LWIP_MIN(len, datagram_len), SSIZE_MAX); + if (fromlen) { + *fromlen = msg.msg_namelen; + } + } + + sock_set_errno(sock, 0); + done_socket(sock); + return ret; +} + +ssize_t +lwip_read(int s, void *mem, size_t len) +{ + return lwip_recvfrom(s, mem, len, 0, NULL, NULL); +} + +ssize_t +lwip_readv(int s, const struct iovec *iov, int iovcnt) +{ + struct msghdr msg; + + msg.msg_name = NULL; + msg.msg_namelen = 0; + /* Hack: we have to cast via number to cast from 'const' pointer to non-const. + Blame the opengroup standard for this inconsistency. */ + msg.msg_iov = LWIP_CONST_CAST(struct iovec *, iov); + msg.msg_iovlen = iovcnt; + msg.msg_control = NULL; + msg.msg_controllen = 0; + msg.msg_flags = 0; + return lwip_recvmsg(s, &msg, 0); +} + +ssize_t +lwip_recv(int s, void *mem, size_t len, int flags) +{ + return lwip_recvfrom(s, mem, len, flags, NULL, NULL); +} + +ssize_t +lwip_recvmsg(int s, struct msghdr *message, int flags) +{ + struct lwip_sock *sock; + int i; + ssize_t buflen; + + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_recvmsg(%d, message=%p, flags=0x%x)\n", s, (void *)message, flags)); + LWIP_ERROR("lwip_recvmsg: invalid message pointer", message != NULL, return ERR_ARG;); + LWIP_ERROR("lwip_recvmsg: unsupported flags", (flags & ~(MSG_PEEK|MSG_DONTWAIT)) == 0, + set_errno(EOPNOTSUPP); return -1;); + + if ((message->msg_iovlen <= 0) || (message->msg_iovlen > IOV_MAX)) { + set_errno(EMSGSIZE); + return -1; + } + + sock = get_socket(s); + if (!sock) { + return -1; + } + + /* check for valid vectors */ + buflen = 0; + for (i = 0; i < message->msg_iovlen; i++) { + if ((message->msg_iov[i].iov_base == NULL) || ((ssize_t)message->msg_iov[i].iov_len <= 0) || + ((size_t)(ssize_t)message->msg_iov[i].iov_len != message->msg_iov[i].iov_len) || + ((ssize_t)(buflen + (ssize_t)message->msg_iov[i].iov_len) <= 0)) { + sock_set_errno(sock, err_to_errno(ERR_VAL)); + done_socket(sock); + return -1; + } + buflen = (ssize_t)(buflen + (ssize_t)message->msg_iov[i].iov_len); + } + + if (NETCONNTYPE_GROUP(netconn_type(sock->conn)) == NETCONN_TCP) { +#if LWIP_TCP + int recv_flags = flags; + message->msg_flags = 0; + /* recv the data */ + buflen = 0; + for (i = 0; i < message->msg_iovlen; i++) { + /* try to receive into this vector's buffer */ + ssize_t recvd_local = lwip_recv_tcp(sock, message->msg_iov[i].iov_base, message->msg_iov[i].iov_len, recv_flags); + if (recvd_local > 0) { + /* sum up received bytes */ + buflen += recvd_local; + } + if ((recvd_local < 0) || (recvd_local < (int)message->msg_iov[i].iov_len) || + (flags & MSG_PEEK)) { + /* returned prematurely (or peeking, which might actually be limitated to the first iov) */ + if (buflen <= 0) { + /* nothing received at all, propagate the error */ + buflen = recvd_local; + } + break; + } + /* pass MSG_DONTWAIT to lwip_recv_tcp() to prevent waiting for more data */ + recv_flags |= MSG_DONTWAIT; + } + if (buflen > 0) { + /* reset socket error since we have received something */ + sock_set_errno(sock, 0); + } + /* " If the socket is connected, the msg_name and msg_namelen members shall be ignored." */ + done_socket(sock); + return buflen; +#else /* LWIP_TCP */ + sock_set_errno(sock, err_to_errno(ERR_ARG)); + done_socket(sock); + return -1; +#endif /* LWIP_TCP */ + } + /* else, UDP and RAW NETCONNs */ +#if LWIP_UDP || LWIP_RAW + { + u16_t datagram_len = 0; + err_t err; + err = lwip_recvfrom_udp_raw(sock, flags, message, &datagram_len, s); + if (err != ERR_OK) { + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_recvmsg[UDP/RAW](%d): buf == NULL, error is \"%s\"!\n", + s, lwip_strerr(err))); + sock_set_errno(sock, err_to_errno(err)); + done_socket(sock); + return -1; + } + if (datagram_len > buflen) { + message->msg_flags |= MSG_TRUNC; + } + + sock_set_errno(sock, 0); + done_socket(sock); + return (int)datagram_len; + } +#else /* LWIP_UDP || LWIP_RAW */ + sock_set_errno(sock, err_to_errno(ERR_ARG)); + done_socket(sock); + return -1; +#endif /* LWIP_UDP || LWIP_RAW */ +} + +ssize_t +lwip_send(int s, const void *data, size_t size, int flags) +{ + struct lwip_sock *sock; + err_t err; + u8_t write_flags; + size_t written; + + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_send(%d, data=%p, size=%"SZT_F", flags=0x%x)\n", + s, data, size, flags)); + + sock = get_socket(s); + if (!sock) { + return -1; + } + + if (NETCONNTYPE_GROUP(netconn_type(sock->conn)) != NETCONN_TCP) { +#if (LWIP_UDP || LWIP_RAW) + done_socket(sock); + return lwip_sendto(s, data, size, flags, NULL, 0); +#else /* (LWIP_UDP || LWIP_RAW) */ + sock_set_errno(sock, err_to_errno(ERR_ARG)); + done_socket(sock); + return -1; +#endif /* (LWIP_UDP || LWIP_RAW) */ + } + + write_flags = (u8_t)(NETCONN_COPY | + ((flags & MSG_MORE) ? NETCONN_MORE : 0) | + ((flags & MSG_DONTWAIT) ? NETCONN_DONTBLOCK : 0)); + written = 0; + err = netconn_write_partly(sock->conn, data, size, write_flags, &written); + + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_send(%d) err=%d written=%"SZT_F"\n", s, err, written)); + sock_set_errno(sock, err_to_errno(err)); + done_socket(sock); + /* casting 'written' to ssize_t is OK here since the netconn API limits it to SSIZE_MAX */ + return (err == ERR_OK ? (ssize_t)written : -1); +} + +ssize_t +lwip_sendmsg(int s, const struct msghdr *msg, int flags) +{ + struct lwip_sock *sock; +#if LWIP_TCP + u8_t write_flags; + size_t written; +#endif + err_t err = ERR_OK; + + sock = get_socket(s); + if (!sock) { + return -1; + } + + LWIP_ERROR("lwip_sendmsg: invalid msghdr", msg != NULL, + sock_set_errno(sock, err_to_errno(ERR_ARG)); done_socket(sock); return -1;); + LWIP_ERROR("lwip_sendmsg: invalid msghdr iov", msg->msg_iov != NULL, + sock_set_errno(sock, err_to_errno(ERR_ARG)); done_socket(sock); return -1;); + LWIP_ERROR("lwip_sendmsg: maximum iovs exceeded", (msg->msg_iovlen > 0) && (msg->msg_iovlen <= IOV_MAX), + sock_set_errno(sock, EMSGSIZE); done_socket(sock); return -1;); + LWIP_ERROR("lwip_sendmsg: unsupported flags", (flags & ~(MSG_DONTWAIT | MSG_MORE)) == 0, + sock_set_errno(sock, EOPNOTSUPP); done_socket(sock); return -1;); + + LWIP_UNUSED_ARG(msg->msg_control); + LWIP_UNUSED_ARG(msg->msg_controllen); + LWIP_UNUSED_ARG(msg->msg_flags); + + if (NETCONNTYPE_GROUP(netconn_type(sock->conn)) == NETCONN_TCP) { +#if LWIP_TCP + write_flags = (u8_t)(NETCONN_COPY | + ((flags & MSG_MORE) ? NETCONN_MORE : 0) | + ((flags & MSG_DONTWAIT) ? NETCONN_DONTBLOCK : 0)); + + written = 0; + err = netconn_write_vectors_partly(sock->conn, (struct netvector *)msg->msg_iov, (u16_t)msg->msg_iovlen, write_flags, &written); + sock_set_errno(sock, err_to_errno(err)); + done_socket(sock); + /* casting 'written' to ssize_t is OK here since the netconn API limits it to SSIZE_MAX */ + return (err == ERR_OK ? (ssize_t)written : -1); +#else /* LWIP_TCP */ + sock_set_errno(sock, err_to_errno(ERR_ARG)); + done_socket(sock); + return -1; +#endif /* LWIP_TCP */ + } + /* else, UDP and RAW NETCONNs */ +#if LWIP_UDP || LWIP_RAW + { + struct netbuf chain_buf; + int i; + ssize_t size = 0; + + LWIP_UNUSED_ARG(flags); + LWIP_ERROR("lwip_sendmsg: invalid msghdr name", (((msg->msg_name == NULL) && (msg->msg_namelen == 0)) || + IS_SOCK_ADDR_LEN_VALID(msg->msg_namelen)), + sock_set_errno(sock, err_to_errno(ERR_ARG)); done_socket(sock); return -1;); + + /* initialize chain buffer with destination */ + memset(&chain_buf, 0, sizeof(struct netbuf)); + if (msg->msg_name) { + u16_t remote_port; + SOCKADDR_TO_IPADDR_PORT((const struct sockaddr *)msg->msg_name, &chain_buf.addr, remote_port); + netbuf_fromport(&chain_buf) = remote_port; + } +#if LWIP_NETIF_TX_SINGLE_PBUF + for (i = 0; i < msg->msg_iovlen; i++) { + size += msg->msg_iov[i].iov_len; + if ((msg->msg_iov[i].iov_len > INT_MAX) || (size < (int)msg->msg_iov[i].iov_len)) { + /* overflow */ + goto sendmsg_emsgsize; + } + } + if (size > 0xFFFF) { + /* overflow */ + goto sendmsg_emsgsize; + } + /* Allocate a new netbuf and copy the data into it. */ + if (netbuf_alloc(&chain_buf, (u16_t)size) == NULL) { + err = ERR_MEM; + } else { + /* flatten the IO vectors */ + size_t offset = 0; + for (i = 0; i < msg->msg_iovlen; i++) { + MEMCPY(&((u8_t *)chain_buf.p->payload)[offset], msg->msg_iov[i].iov_base, msg->msg_iov[i].iov_len); + offset += msg->msg_iov[i].iov_len; + } +#if LWIP_CHECKSUM_ON_COPY + { + /* This can be improved by using LWIP_CHKSUM_COPY() and aggregating the checksum for each IO vector */ + u16_t chksum = ~inet_chksum_pbuf(chain_buf.p); + netbuf_set_chksum(&chain_buf, chksum); + } +#endif /* LWIP_CHECKSUM_ON_COPY */ + err = ERR_OK; + } +#else /* LWIP_NETIF_TX_SINGLE_PBUF */ + /* create a chained netbuf from the IO vectors. NOTE: we assemble a pbuf chain + manually to avoid having to allocate, chain, and delete a netbuf for each iov */ + for (i = 0; i < msg->msg_iovlen; i++) { + struct pbuf *p; + if (msg->msg_iov[i].iov_len > 0xFFFF) { + /* overflow */ + goto sendmsg_emsgsize; + } + p = pbuf_alloc(PBUF_TRANSPORT, 0, PBUF_REF); + if (p == NULL) { + err = ERR_MEM; /* let netbuf_delete() cleanup chain_buf */ + break; + } + p->payload = msg->msg_iov[i].iov_base; + p->len = p->tot_len = (u16_t)msg->msg_iov[i].iov_len; + /* netbuf empty, add new pbuf */ + if (chain_buf.p == NULL) { + chain_buf.p = chain_buf.ptr = p; + /* add pbuf to existing pbuf chain */ + } else { + if (chain_buf.p->tot_len + p->len > 0xffff) { + /* overflow */ + pbuf_free(p); + goto sendmsg_emsgsize; + } + pbuf_cat(chain_buf.p, p); + } + } + /* save size of total chain */ + if (err == ERR_OK) { + size = netbuf_len(&chain_buf); + } +#endif /* LWIP_NETIF_TX_SINGLE_PBUF */ + + if (err == ERR_OK) { +#if LWIP_IPV4 && LWIP_IPV6 + /* Dual-stack: Unmap IPv4 mapped IPv6 addresses */ + if (IP_IS_V6_VAL(chain_buf.addr) && ip6_addr_isipv4mappedipv6(ip_2_ip6(&chain_buf.addr))) { + unmap_ipv4_mapped_ipv6(ip_2_ip4(&chain_buf.addr), ip_2_ip6(&chain_buf.addr)); + IP_SET_TYPE_VAL(chain_buf.addr, IPADDR_TYPE_V4); + } +#endif /* LWIP_IPV4 && LWIP_IPV6 */ + + /* send the data */ + err = netconn_send(sock->conn, &chain_buf); + } + + /* deallocated the buffer */ + netbuf_free(&chain_buf); + + sock_set_errno(sock, err_to_errno(err)); + done_socket(sock); + return (err == ERR_OK ? size : -1); +sendmsg_emsgsize: + sock_set_errno(sock, EMSGSIZE); + netbuf_free(&chain_buf); + done_socket(sock); + return -1; + } +#else /* LWIP_UDP || LWIP_RAW */ + sock_set_errno(sock, err_to_errno(ERR_ARG)); + done_socket(sock); + return -1; +#endif /* LWIP_UDP || LWIP_RAW */ +} + +ssize_t +lwip_sendto(int s, const void *data, size_t size, int flags, + const struct sockaddr *to, socklen_t tolen) +{ + struct lwip_sock *sock; + err_t err; + u16_t short_size; + u16_t remote_port; + struct netbuf buf; + + sock = get_socket(s); + if (!sock) { + return -1; + } + + if (NETCONNTYPE_GROUP(netconn_type(sock->conn)) == NETCONN_TCP) { +#if LWIP_TCP + done_socket(sock); + return lwip_send(s, data, size, flags); +#else /* LWIP_TCP */ + LWIP_UNUSED_ARG(flags); + sock_set_errno(sock, err_to_errno(ERR_ARG)); + done_socket(sock); + return -1; +#endif /* LWIP_TCP */ + } + + if (size > LWIP_MIN(0xFFFF, SSIZE_MAX)) { + /* cannot fit into one datagram (at least for us) */ + sock_set_errno(sock, EMSGSIZE); + done_socket(sock); + return -1; + } + short_size = (u16_t)size; + LWIP_ERROR("lwip_sendto: invalid address", (((to == NULL) && (tolen == 0)) || + (IS_SOCK_ADDR_LEN_VALID(tolen) && + ((to != NULL) && (IS_SOCK_ADDR_TYPE_VALID(to) && IS_SOCK_ADDR_ALIGNED(to))))), + sock_set_errno(sock, err_to_errno(ERR_ARG)); done_socket(sock); return -1;); + LWIP_UNUSED_ARG(tolen); + + /* initialize a buffer */ + buf.p = buf.ptr = NULL; +#if LWIP_CHECKSUM_ON_COPY + buf.flags = 0; +#endif /* LWIP_CHECKSUM_ON_COPY */ + if (to) { + SOCKADDR_TO_IPADDR_PORT(to, &buf.addr, remote_port); + } else { + remote_port = 0; + ip_addr_set_any(NETCONNTYPE_ISIPV6(netconn_type(sock->conn)), &buf.addr); + } + netbuf_fromport(&buf) = remote_port; + + + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_sendto(%d, data=%p, short_size=%"U16_F", flags=0x%x to=", + s, data, short_size, flags)); + ip_addr_debug_print_val(SOCKETS_DEBUG, buf.addr); + LWIP_DEBUGF(SOCKETS_DEBUG, (" port=%"U16_F"\n", remote_port)); + + /* make the buffer point to the data that should be sent */ +#if LWIP_NETIF_TX_SINGLE_PBUF + /* Allocate a new netbuf and copy the data into it. */ + if (netbuf_alloc(&buf, short_size) == NULL) { + err = ERR_MEM; + } else { +#if LWIP_CHECKSUM_ON_COPY + if (NETCONNTYPE_GROUP(netconn_type(sock->conn)) != NETCONN_RAW) { + u16_t chksum = LWIP_CHKSUM_COPY(buf.p->payload, data, short_size); + netbuf_set_chksum(&buf, chksum); + } else +#endif /* LWIP_CHECKSUM_ON_COPY */ + { + MEMCPY(buf.p->payload, data, short_size); + } + err = ERR_OK; + } +#else /* LWIP_NETIF_TX_SINGLE_PBUF */ + err = netbuf_ref(&buf, data, short_size); +#endif /* LWIP_NETIF_TX_SINGLE_PBUF */ + if (err == ERR_OK) { +#if LWIP_IPV4 && LWIP_IPV6 + /* Dual-stack: Unmap IPv4 mapped IPv6 addresses */ + if (IP_IS_V6_VAL(buf.addr) && ip6_addr_isipv4mappedipv6(ip_2_ip6(&buf.addr))) { + unmap_ipv4_mapped_ipv6(ip_2_ip4(&buf.addr), ip_2_ip6(&buf.addr)); + IP_SET_TYPE_VAL(buf.addr, IPADDR_TYPE_V4); + } +#endif /* LWIP_IPV4 && LWIP_IPV6 */ + + /* send the data */ + err = netconn_send(sock->conn, &buf); + } + + /* deallocated the buffer */ + netbuf_free(&buf); + + sock_set_errno(sock, err_to_errno(err)); + done_socket(sock); + return (err == ERR_OK ? short_size : -1); +} + +int +lwip_socket(int domain, int type, int protocol) +{ + struct netconn *conn; + int i; + + LWIP_UNUSED_ARG(domain); /* @todo: check this */ + + /* create a netconn */ + switch (type) { + case SOCK_RAW: + conn = netconn_new_with_proto_and_callback(DOMAIN_TO_NETCONN_TYPE(domain, NETCONN_RAW), + (u8_t)protocol, DEFAULT_SOCKET_EVENTCB); + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_socket(%s, SOCK_RAW, %d) = ", + domain == PF_INET ? "PF_INET" : "UNKNOWN", protocol)); + break; + case SOCK_DGRAM: + conn = netconn_new_with_callback(DOMAIN_TO_NETCONN_TYPE(domain, + ((protocol == IPPROTO_UDPLITE) ? NETCONN_UDPLITE : NETCONN_UDP)), + DEFAULT_SOCKET_EVENTCB); + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_socket(%s, SOCK_DGRAM, %d) = ", + domain == PF_INET ? "PF_INET" : "UNKNOWN", protocol)); +#if LWIP_NETBUF_RECVINFO + if (conn) { + /* netconn layer enables pktinfo by default, sockets default to off */ + conn->flags &= ~NETCONN_FLAG_PKTINFO; + } +#endif /* LWIP_NETBUF_RECVINFO */ + break; + case SOCK_STREAM: + conn = netconn_new_with_callback(DOMAIN_TO_NETCONN_TYPE(domain, NETCONN_TCP), DEFAULT_SOCKET_EVENTCB); + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_socket(%s, SOCK_STREAM, %d) = ", + domain == PF_INET ? "PF_INET" : "UNKNOWN", protocol)); + break; + default: + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_socket(%d, %d/UNKNOWN, %d) = -1\n", + domain, type, protocol)); + set_errno(EINVAL); + return -1; + } + + if (!conn) { + LWIP_DEBUGF(SOCKETS_DEBUG, ("-1 / ENOBUFS (could not create netconn)\n")); + set_errno(ENOBUFS); + return -1; + } + + i = alloc_socket(conn, 0); + + if (i == -1) { + netconn_delete(conn); + set_errno(ENFILE); + return -1; + } + conn->socket = i; + done_socket(&sockets[i - LWIP_SOCKET_OFFSET]); + LWIP_DEBUGF(SOCKETS_DEBUG, ("%d\n", i)); + set_errno(0); + return i; +} + +ssize_t +lwip_write(int s, const void *data, size_t size) +{ + return lwip_send(s, data, size, 0); +} + +ssize_t +lwip_writev(int s, const struct iovec *iov, int iovcnt) +{ + struct msghdr msg; + + msg.msg_name = NULL; + msg.msg_namelen = 0; + /* Hack: we have to cast via number to cast from 'const' pointer to non-const. + Blame the opengroup standard for this inconsistency. */ + msg.msg_iov = LWIP_CONST_CAST(struct iovec *, iov); + msg.msg_iovlen = iovcnt; + msg.msg_control = NULL; + msg.msg_controllen = 0; + msg.msg_flags = 0; + return lwip_sendmsg(s, &msg, 0); +} + +#if LWIP_SOCKET_SELECT || LWIP_SOCKET_POLL +/* Add select_cb to select_cb_list. */ +static void +lwip_link_select_cb(struct lwip_select_cb *select_cb) +{ + LWIP_SOCKET_SELECT_DECL_PROTECT(lev); + + /* Protect the select_cb_list */ + LWIP_SOCKET_SELECT_PROTECT(lev); + + /* Put this select_cb on top of list */ + select_cb->next = select_cb_list; + if (select_cb_list != NULL) { + select_cb_list->prev = select_cb; + } + select_cb_list = select_cb; +#if !LWIP_TCPIP_CORE_LOCKING + /* Increasing this counter tells select_check_waiters that the list has changed. */ + select_cb_ctr++; +#endif + + /* Now we can safely unprotect */ + LWIP_SOCKET_SELECT_UNPROTECT(lev); +} + +/* Remove select_cb from select_cb_list. */ +static void +lwip_unlink_select_cb(struct lwip_select_cb *select_cb) +{ + LWIP_SOCKET_SELECT_DECL_PROTECT(lev); + + /* Take us off the list */ + LWIP_SOCKET_SELECT_PROTECT(lev); + if (select_cb->next != NULL) { + select_cb->next->prev = select_cb->prev; + } + if (select_cb_list == select_cb) { + LWIP_ASSERT("select_cb->prev == NULL", select_cb->prev == NULL); + select_cb_list = select_cb->next; + } else { + LWIP_ASSERT("select_cb->prev != NULL", select_cb->prev != NULL); + select_cb->prev->next = select_cb->next; + } +#if !LWIP_TCPIP_CORE_LOCKING + /* Increasing this counter tells select_check_waiters that the list has changed. */ + select_cb_ctr++; +#endif + LWIP_SOCKET_SELECT_UNPROTECT(lev); +} +#endif /* LWIP_SOCKET_SELECT || LWIP_SOCKET_POLL */ + +#if LWIP_SOCKET_SELECT +/** + * Go through the readset and writeset lists and see which socket of the sockets + * set in the sets has events. On return, readset, writeset and exceptset have + * the sockets enabled that had events. + * + * @param maxfdp1 the highest socket index in the sets + * @param readset_in set of sockets to check for read events + * @param writeset_in set of sockets to check for write events + * @param exceptset_in set of sockets to check for error events + * @param readset_out set of sockets that had read events + * @param writeset_out set of sockets that had write events + * @param exceptset_out set os sockets that had error events + * @return number of sockets that had events (read/write/exception) (>= 0) + */ +static int +lwip_selscan(int maxfdp1, fd_set *readset_in, fd_set *writeset_in, fd_set *exceptset_in, + fd_set *readset_out, fd_set *writeset_out, fd_set *exceptset_out) +{ + int i, nready = 0; + fd_set lreadset, lwriteset, lexceptset; + struct lwip_sock *sock; + SYS_ARCH_DECL_PROTECT(lev); + + FD_ZERO(&lreadset); + FD_ZERO(&lwriteset); + FD_ZERO(&lexceptset); + + /* Go through each socket in each list to count number of sockets which + currently match */ + for (i = LWIP_SOCKET_OFFSET; i < maxfdp1; i++) { + /* if this FD is not in the set, continue */ + if (!(readset_in && FD_ISSET(i, readset_in)) && + !(writeset_in && FD_ISSET(i, writeset_in)) && + !(exceptset_in && FD_ISSET(i, exceptset_in))) { + continue; + } + /* First get the socket's status (protected)... */ + SYS_ARCH_PROTECT(lev); + sock = tryget_socket_unconn_locked(i); + if (sock != NULL) { + void *lastdata = sock->lastdata.pbuf; + s16_t rcvevent = sock->rcvevent; + u16_t sendevent = sock->sendevent; + u16_t errevent = sock->errevent; + SYS_ARCH_UNPROTECT(lev); + + /* ... then examine it: */ + /* See if netconn of this socket is ready for read */ + if (readset_in && FD_ISSET(i, readset_in) && ((lastdata != NULL) || (rcvevent > 0))) { + FD_SET(i, &lreadset); + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_selscan: fd=%d ready for reading\n", i)); + nready++; + } + /* See if netconn of this socket is ready for write */ + if (writeset_in && FD_ISSET(i, writeset_in) && (sendevent != 0)) { + FD_SET(i, &lwriteset); + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_selscan: fd=%d ready for writing\n", i)); + nready++; + } + /* See if netconn of this socket had an error */ + if (exceptset_in && FD_ISSET(i, exceptset_in) && (errevent != 0)) { + FD_SET(i, &lexceptset); + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_selscan: fd=%d ready for exception\n", i)); + nready++; + } + done_socket(sock); + } else { + SYS_ARCH_UNPROTECT(lev); + /* no a valid open socket */ + return -1; + } + } + /* copy local sets to the ones provided as arguments */ + *readset_out = lreadset; + *writeset_out = lwriteset; + *exceptset_out = lexceptset; + + LWIP_ASSERT("nready >= 0", nready >= 0); + return nready; +} + +#if LWIP_NETCONN_FULLDUPLEX +/* Mark all of the set sockets in one of the three fdsets passed to select as used. + * All sockets are marked (and later unmarked), whether they are open or not. + * This is OK as lwip_selscan aborts select when non-open sockets are found. + */ +static void +lwip_select_inc_sockets_used_set(int maxfdp, fd_set *fdset, fd_set *used_sockets) +{ + SYS_ARCH_DECL_PROTECT(lev); + if (fdset) { + int i; + for (i = LWIP_SOCKET_OFFSET; i < maxfdp; i++) { + /* if this FD is in the set, lock it (unless already done) */ + if (FD_ISSET(i, fdset) && !FD_ISSET(i, used_sockets)) { + struct lwip_sock *sock; + SYS_ARCH_PROTECT(lev); + sock = tryget_socket_unconn_locked(i); + if (sock != NULL) { + /* leave the socket used until released by lwip_select_dec_sockets_used */ + FD_SET(i, used_sockets); + } + SYS_ARCH_UNPROTECT(lev); + } + } + } +} + +/* Mark all sockets passed to select as used to prevent them from being freed + * from other threads while select is running. + * Marked sockets are added to 'used_sockets' to mark them only once an be able + * to unmark them correctly. + */ +static void +lwip_select_inc_sockets_used(int maxfdp, fd_set *fdset1, fd_set *fdset2, fd_set *fdset3, fd_set *used_sockets) +{ + FD_ZERO(used_sockets); + lwip_select_inc_sockets_used_set(maxfdp, fdset1, used_sockets); + lwip_select_inc_sockets_used_set(maxfdp, fdset2, used_sockets); + lwip_select_inc_sockets_used_set(maxfdp, fdset3, used_sockets); +} + +/* Let go all sockets that were marked as used when starting select */ +static void +lwip_select_dec_sockets_used(int maxfdp, fd_set *used_sockets) +{ + int i; + for (i = LWIP_SOCKET_OFFSET; i < maxfdp; i++) { + /* if this FD is not in the set, continue */ + if (FD_ISSET(i, used_sockets)) { + struct lwip_sock *sock = tryget_socket_unconn_nouse(i); + LWIP_ASSERT("socket gone at the end of select", sock != NULL); + if (sock != NULL) { + done_socket(sock); + } + } + } +} +#else /* LWIP_NETCONN_FULLDUPLEX */ +#define lwip_select_inc_sockets_used(maxfdp1, readset, writeset, exceptset, used_sockets) +#define lwip_select_dec_sockets_used(maxfdp1, used_sockets) +#endif /* LWIP_NETCONN_FULLDUPLEX */ + +int +lwip_select(int maxfdp1, fd_set *readset, fd_set *writeset, fd_set *exceptset, + struct timeval *timeout) +{ + u32_t waitres = 0; + int nready; + fd_set lreadset, lwriteset, lexceptset; + u32_t msectimeout; + int i; + int maxfdp2; +#if LWIP_NETCONN_SEM_PER_THREAD + int waited = 0; +#endif +#if LWIP_NETCONN_FULLDUPLEX + fd_set used_sockets; +#endif + SYS_ARCH_DECL_PROTECT(lev); + + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_select(%d, %p, %p, %p, tvsec=%"S32_F" tvusec=%"S32_F")\n", + maxfdp1, (void *)readset, (void *) writeset, (void *) exceptset, + timeout ? (s32_t)timeout->tv_sec : (s32_t) - 1, + timeout ? (s32_t)timeout->tv_usec : (s32_t) - 1)); + + if ((maxfdp1 < 0) || (maxfdp1 > LWIP_SELECT_MAXNFDS)) { + set_errno(EINVAL); + return -1; + } + + lwip_select_inc_sockets_used(maxfdp1, readset, writeset, exceptset, &used_sockets); + + /* Go through each socket in each list to count number of sockets which + currently match */ + nready = lwip_selscan(maxfdp1, readset, writeset, exceptset, &lreadset, &lwriteset, &lexceptset); + + if (nready < 0) { + /* one of the sockets in one of the fd_sets was invalid */ + set_errno(EBADF); + lwip_select_dec_sockets_used(maxfdp1, &used_sockets); + return -1; + } else if (nready > 0) { + /* one or more sockets are set, no need to wait */ + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_select: nready=%d\n", nready)); + } else { + /* If we don't have any current events, then suspend if we are supposed to */ + if (timeout && timeout->tv_sec == 0 && timeout->tv_usec == 0) { + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_select: no timeout, returning 0\n")); + /* This is OK as the local fdsets are empty and nready is zero, + or we would have returned earlier. */ + } else { + /* None ready: add our semaphore to list: + We don't actually need any dynamic memory. Our entry on the + list is only valid while we are in this function, so it's ok + to use local variables (unless we're running in MPU compatible + mode). */ + API_SELECT_CB_VAR_DECLARE(select_cb); + API_SELECT_CB_VAR_ALLOC(select_cb, set_errno(ENOMEM); lwip_select_dec_sockets_used(maxfdp1, &used_sockets); return -1); + memset(&API_SELECT_CB_VAR_REF(select_cb), 0, sizeof(struct lwip_select_cb)); + + API_SELECT_CB_VAR_REF(select_cb).readset = readset; + API_SELECT_CB_VAR_REF(select_cb).writeset = writeset; + API_SELECT_CB_VAR_REF(select_cb).exceptset = exceptset; +#if LWIP_NETCONN_SEM_PER_THREAD + API_SELECT_CB_VAR_REF(select_cb).sem = LWIP_NETCONN_THREAD_SEM_GET(); +#else /* LWIP_NETCONN_SEM_PER_THREAD */ + if (sys_sem_new(&API_SELECT_CB_VAR_REF(select_cb).sem, 0) != ERR_OK) { + /* failed to create semaphore */ + set_errno(ENOMEM); + lwip_select_dec_sockets_used(maxfdp1, &used_sockets); + API_SELECT_CB_VAR_FREE(select_cb); + return -1; + } +#endif /* LWIP_NETCONN_SEM_PER_THREAD */ + + lwip_link_select_cb(&API_SELECT_CB_VAR_REF(select_cb)); + + /* Increase select_waiting for each socket we are interested in */ + maxfdp2 = maxfdp1; + for (i = LWIP_SOCKET_OFFSET; i < maxfdp1; i++) { + if ((readset && FD_ISSET(i, readset)) || + (writeset && FD_ISSET(i, writeset)) || + (exceptset && FD_ISSET(i, exceptset))) { + struct lwip_sock *sock; + SYS_ARCH_PROTECT(lev); + sock = tryget_socket_unconn_locked(i); + if (sock != NULL) { + sock->select_waiting++; + if (sock->select_waiting == 0) { + /* overflow - too many threads waiting */ + sock->select_waiting--; + nready = -1; + maxfdp2 = i; + SYS_ARCH_UNPROTECT(lev); + done_socket(sock); + set_errno(EBUSY); + break; + } + SYS_ARCH_UNPROTECT(lev); + done_socket(sock); + } else { + /* Not a valid socket */ + nready = -1; + maxfdp2 = i; + SYS_ARCH_UNPROTECT(lev); + set_errno(EBADF); + break; + } + } + } + + if (nready >= 0) { + /* Call lwip_selscan again: there could have been events between + the last scan (without us on the list) and putting us on the list! */ + nready = lwip_selscan(maxfdp1, readset, writeset, exceptset, &lreadset, &lwriteset, &lexceptset); + if (!nready) { + /* Still none ready, just wait to be woken */ + if (timeout == 0) { + /* Wait forever */ + msectimeout = 0; + } else { + long msecs_long = ((timeout->tv_sec * 1000) + ((timeout->tv_usec + 500) / 1000)); + if (msecs_long <= 0) { + /* Wait 1ms at least (0 means wait forever) */ + msectimeout = 1; + } else { + msectimeout = (u32_t)msecs_long; + } + } + + waitres = sys_arch_sem_wait(SELECT_SEM_PTR(API_SELECT_CB_VAR_REF(select_cb).sem), msectimeout); +#if LWIP_NETCONN_SEM_PER_THREAD + waited = 1; +#endif + } + } + + /* Decrease select_waiting for each socket we are interested in */ + for (i = LWIP_SOCKET_OFFSET; i < maxfdp2; i++) { + if ((readset && FD_ISSET(i, readset)) || + (writeset && FD_ISSET(i, writeset)) || + (exceptset && FD_ISSET(i, exceptset))) { + struct lwip_sock *sock; + SYS_ARCH_PROTECT(lev); + sock = tryget_socket_unconn_locked(i); + if (sock != NULL) { + /* for now, handle select_waiting==0... */ + LWIP_ASSERT("sock->select_waiting > 0", sock->select_waiting > 0); + if (sock->select_waiting > 0) { + sock->select_waiting--; + } + SYS_ARCH_UNPROTECT(lev); + done_socket(sock); + } else { + SYS_ARCH_UNPROTECT(lev); + /* Not a valid socket */ + nready = -1; + set_errno(EBADF); + } + } + } + + lwip_unlink_select_cb(&API_SELECT_CB_VAR_REF(select_cb)); + +#if LWIP_NETCONN_SEM_PER_THREAD + if (API_SELECT_CB_VAR_REF(select_cb).sem_signalled && (!waited || (waitres == SYS_ARCH_TIMEOUT))) { + /* don't leave the thread-local semaphore signalled */ + sys_arch_sem_wait(API_SELECT_CB_VAR_REF(select_cb).sem, 1); + } +#else /* LWIP_NETCONN_SEM_PER_THREAD */ + sys_sem_free(&API_SELECT_CB_VAR_REF(select_cb).sem); +#endif /* LWIP_NETCONN_SEM_PER_THREAD */ + API_SELECT_CB_VAR_FREE(select_cb); + + if (nready < 0) { + /* This happens when a socket got closed while waiting */ + lwip_select_dec_sockets_used(maxfdp1, &used_sockets); + return -1; + } + + if (waitres == SYS_ARCH_TIMEOUT) { + /* Timeout */ + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_select: timeout expired\n")); + /* This is OK as the local fdsets are empty and nready is zero, + or we would have returned earlier. */ + } else { + /* See what's set now after waiting */ + nready = lwip_selscan(maxfdp1, readset, writeset, exceptset, &lreadset, &lwriteset, &lexceptset); + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_select: nready=%d\n", nready)); + } + } + } + + lwip_select_dec_sockets_used(maxfdp1, &used_sockets); + set_errno(0); + if (readset) { + *readset = lreadset; + } + if (writeset) { + *writeset = lwriteset; + } + if (exceptset) { + *exceptset = lexceptset; + } + return nready; +} +#endif /* LWIP_SOCKET_SELECT */ + +#if LWIP_SOCKET_POLL +/** Options for the lwip_pollscan function. */ +enum lwip_pollscan_opts +{ + /** Clear revents in each struct pollfd. */ + LWIP_POLLSCAN_CLEAR = 1, + + /** Increment select_waiting in each struct lwip_sock. */ + LWIP_POLLSCAN_INC_WAIT = 2, + + /** Decrement select_waiting in each struct lwip_sock. */ + LWIP_POLLSCAN_DEC_WAIT = 4 +}; + +/** + * Update revents in each struct pollfd. + * Optionally update select_waiting in struct lwip_sock. + * + * @param fds array of structures to update + * @param nfds number of structures in fds + * @param opts what to update and how + * @return number of structures that have revents != 0 + */ +static int +lwip_pollscan(struct pollfd *fds, nfds_t nfds, enum lwip_pollscan_opts opts) +{ + int nready = 0; + nfds_t fdi; + struct lwip_sock *sock; + SYS_ARCH_DECL_PROTECT(lev); + + /* Go through each struct pollfd in the array. */ + for (fdi = 0; fdi < nfds; fdi++) { + if ((opts & LWIP_POLLSCAN_CLEAR) != 0) { + fds[fdi].revents = 0; + } + + /* Negative fd means the caller wants us to ignore this struct. + POLLNVAL means we already detected that the fd is invalid; + if another thread has since opened a new socket with that fd, + we must not use that socket. */ + if (fds[fdi].fd >= 0 && (fds[fdi].revents & POLLNVAL) == 0) { + /* First get the socket's status (protected)... */ + SYS_ARCH_PROTECT(lev); + sock = tryget_socket_unconn_locked(fds[fdi].fd); + if (sock != NULL) { + void* lastdata = sock->lastdata.pbuf; + s16_t rcvevent = sock->rcvevent; + u16_t sendevent = sock->sendevent; + u16_t errevent = sock->errevent; + + if ((opts & LWIP_POLLSCAN_INC_WAIT) != 0) { + sock->select_waiting++; + if (sock->select_waiting == 0) { + /* overflow - too many threads waiting */ + sock->select_waiting--; + nready = -1; + SYS_ARCH_UNPROTECT(lev); + done_socket(sock); + break; + } + } else if ((opts & LWIP_POLLSCAN_DEC_WAIT) != 0) { + /* for now, handle select_waiting==0... */ + LWIP_ASSERT("sock->select_waiting > 0", sock->select_waiting > 0); + if (sock->select_waiting > 0) { + sock->select_waiting--; + } + } + SYS_ARCH_UNPROTECT(lev); + done_socket(sock); + + /* ... then examine it: */ + /* See if netconn of this socket is ready for read */ + if ((fds[fdi].events & POLLIN) != 0 && ((lastdata != NULL) || (rcvevent > 0))) { + fds[fdi].revents |= POLLIN; + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_pollscan: fd=%d ready for reading\n", fds[fdi].fd)); + } + /* See if netconn of this socket is ready for write */ + if ((fds[fdi].events & POLLOUT) != 0 && (sendevent != 0)) { + fds[fdi].revents |= POLLOUT; + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_pollscan: fd=%d ready for writing\n", fds[fdi].fd)); + } + /* See if netconn of this socket had an error */ + if (errevent != 0) { + /* POLLERR is output only. */ + fds[fdi].revents |= POLLERR; + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_pollscan: fd=%d ready for exception\n", fds[fdi].fd)); + } + } else { + /* Not a valid socket */ + SYS_ARCH_UNPROTECT(lev); + /* POLLNVAL is output only. */ + fds[fdi].revents |= POLLNVAL; + return -1; + } + } + + /* Will return the number of structures that have events, + not the number of events. */ + if (fds[fdi].revents != 0) { + nready++; + } + } + + LWIP_ASSERT("nready >= 0", nready >= 0); + return nready; +} + +#if LWIP_NETCONN_FULLDUPLEX +/* Mark all sockets as used. + * + * All sockets are marked (and later unmarked), whether they are open or not. + * This is OK as lwip_pollscan aborts select when non-open sockets are found. + */ +static void +lwip_poll_inc_sockets_used(struct pollfd *fds, nfds_t nfds) +{ + nfds_t fdi; + + if(fds) { + /* Go through each struct pollfd in the array. */ + for (fdi = 0; fdi < nfds; fdi++) { + /* Increase the reference counter */ + tryget_socket_unconn(fds[fdi].fd); + } + } +} + +/* Let go all sockets that were marked as used when starting poll */ +static void +lwip_poll_dec_sockets_used(struct pollfd *fds, nfds_t nfds) +{ + nfds_t fdi; + + if(fds) { + /* Go through each struct pollfd in the array. */ + for (fdi = 0; fdi < nfds; fdi++) { + struct lwip_sock *sock = tryget_socket_unconn_nouse(fds[fdi].fd); + if (sock != NULL) { + done_socket(sock); + } + } + } +} +#else /* LWIP_NETCONN_FULLDUPLEX */ +#define lwip_poll_inc_sockets_used(fds, nfds) +#define lwip_poll_dec_sockets_used(fds, nfds) +#endif /* LWIP_NETCONN_FULLDUPLEX */ + +int +lwip_poll(struct pollfd *fds, nfds_t nfds, int timeout) +{ + u32_t waitres = 0; + int nready; + u32_t msectimeout; +#if LWIP_NETCONN_SEM_PER_THREAD + int waited = 0; +#endif + + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_poll(%p, %d, %d)\n", + (void*)fds, (int)nfds, timeout)); + LWIP_ERROR("lwip_poll: invalid fds", ((fds != NULL && nfds > 0) || (fds == NULL && nfds == 0)), + set_errno(EINVAL); return -1;); + + lwip_poll_inc_sockets_used(fds, nfds); + + /* Go through each struct pollfd to count number of structures + which currently match */ + nready = lwip_pollscan(fds, nfds, LWIP_POLLSCAN_CLEAR); + + if (nready < 0) { + lwip_poll_dec_sockets_used(fds, nfds); + return -1; + } + + /* If we don't have any current events, then suspend if we are supposed to */ + if (!nready) { + API_SELECT_CB_VAR_DECLARE(select_cb); + + if (timeout == 0) { + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_poll: no timeout, returning 0\n")); + goto return_success; + } + API_SELECT_CB_VAR_ALLOC(select_cb, set_errno(EAGAIN); lwip_poll_dec_sockets_used(fds, nfds); return -1); + memset(&API_SELECT_CB_VAR_REF(select_cb), 0, sizeof(struct lwip_select_cb)); + + /* None ready: add our semaphore to list: + We don't actually need any dynamic memory. Our entry on the + list is only valid while we are in this function, so it's ok + to use local variables. */ + + API_SELECT_CB_VAR_REF(select_cb).poll_fds = fds; + API_SELECT_CB_VAR_REF(select_cb).poll_nfds = nfds; +#if LWIP_NETCONN_SEM_PER_THREAD + API_SELECT_CB_VAR_REF(select_cb).sem = LWIP_NETCONN_THREAD_SEM_GET(); +#else /* LWIP_NETCONN_SEM_PER_THREAD */ + if (sys_sem_new(&API_SELECT_CB_VAR_REF(select_cb).sem, 0) != ERR_OK) { + /* failed to create semaphore */ + set_errno(EAGAIN); + lwip_poll_dec_sockets_used(fds, nfds); + API_SELECT_CB_VAR_FREE(select_cb); + return -1; + } +#endif /* LWIP_NETCONN_SEM_PER_THREAD */ + + lwip_link_select_cb(&API_SELECT_CB_VAR_REF(select_cb)); + + /* Increase select_waiting for each socket we are interested in. + Also, check for events again: there could have been events between + the last scan (without us on the list) and putting us on the list! */ + nready = lwip_pollscan(fds, nfds, LWIP_POLLSCAN_INC_WAIT); + + if (!nready) { + /* Still none ready, just wait to be woken */ + if (timeout < 0) { + /* Wait forever */ + msectimeout = 0; + } else { + /* timeout == 0 would have been handled earlier. */ + LWIP_ASSERT("timeout > 0", timeout > 0); + msectimeout = timeout; + } + waitres = sys_arch_sem_wait(SELECT_SEM_PTR(API_SELECT_CB_VAR_REF(select_cb).sem), msectimeout); +#if LWIP_NETCONN_SEM_PER_THREAD + waited = 1; +#endif + } + + /* Decrease select_waiting for each socket we are interested in, + and check which events occurred while we waited. */ + nready = lwip_pollscan(fds, nfds, LWIP_POLLSCAN_DEC_WAIT); + + lwip_unlink_select_cb(&API_SELECT_CB_VAR_REF(select_cb)); + +#if LWIP_NETCONN_SEM_PER_THREAD + if (select_cb.sem_signalled && (!waited || (waitres == SYS_ARCH_TIMEOUT))) { + /* don't leave the thread-local semaphore signalled */ + sys_arch_sem_wait(API_SELECT_CB_VAR_REF(select_cb).sem, 1); + } +#else /* LWIP_NETCONN_SEM_PER_THREAD */ + sys_sem_free(&API_SELECT_CB_VAR_REF(select_cb).sem); +#endif /* LWIP_NETCONN_SEM_PER_THREAD */ + API_SELECT_CB_VAR_FREE(select_cb); + + if (nready < 0) { + /* This happens when a socket got closed while waiting */ + lwip_poll_dec_sockets_used(fds, nfds); + return -1; + } + + if (waitres == SYS_ARCH_TIMEOUT) { + /* Timeout */ + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_poll: timeout expired\n")); + goto return_success; + } + } + + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_poll: nready=%d\n", nready)); +return_success: + lwip_poll_dec_sockets_used(fds, nfds); + set_errno(0); + return nready; +} + +/** + * Check whether event_callback should wake up a thread waiting in + * lwip_poll. + */ +static int +lwip_poll_should_wake(const struct lwip_select_cb *scb, int fd, int has_recvevent, int has_sendevent, int has_errevent) +{ + nfds_t fdi; + for (fdi = 0; fdi < scb->poll_nfds; fdi++) { + const struct pollfd *pollfd = &scb->poll_fds[fdi]; + if (pollfd->fd == fd) { + /* Do not update pollfd->revents right here; + that would be a data race because lwip_pollscan + accesses revents without protecting. */ + if (has_recvevent && (pollfd->events & POLLIN) != 0) { + return 1; + } + if (has_sendevent && (pollfd->events & POLLOUT) != 0) { + return 1; + } + if (has_errevent) { + /* POLLERR is output only. */ + return 1; + } + } + } + return 0; +} +#endif /* LWIP_SOCKET_POLL */ + +#if LWIP_SOCKET_SELECT || LWIP_SOCKET_POLL +/** + * Callback registered in the netconn layer for each socket-netconn. + * Processes recvevent (data available) and wakes up tasks waiting for select. + * + * @note for LWIP_TCPIP_CORE_LOCKING any caller of this function + * must have the core lock held when signaling the following events + * as they might cause select_list_cb to be checked: + * NETCONN_EVT_RCVPLUS + * NETCONN_EVT_SENDPLUS + * NETCONN_EVT_ERROR + * This requirement will be asserted in select_check_waiters() + */ +static void +event_callback(struct netconn *conn, enum netconn_evt evt, u16_t len) +{ + int s, check_waiters; + struct lwip_sock *sock; + SYS_ARCH_DECL_PROTECT(lev); + + LWIP_UNUSED_ARG(len); + + /* Get socket */ + if (conn) { + s = conn->socket; + if (s < 0) { + /* Data comes in right away after an accept, even though + * the server task might not have created a new socket yet. + * Just count down (or up) if that's the case and we + * will use the data later. Note that only receive events + * can happen before the new socket is set up. */ + SYS_ARCH_PROTECT(lev); + if (conn->socket < 0) { + if (evt == NETCONN_EVT_RCVPLUS) { + /* conn->socket is -1 on initialization + lwip_accept adjusts sock->recvevent if conn->socket < -1 */ + conn->socket--; + } + SYS_ARCH_UNPROTECT(lev); + return; + } + s = conn->socket; + SYS_ARCH_UNPROTECT(lev); + } + + sock = get_socket(s); + if (!sock) { + return; + } + } else { + return; + } + + check_waiters = 1; + SYS_ARCH_PROTECT(lev); + /* Set event as required */ + switch (evt) { + case NETCONN_EVT_RCVPLUS: + sock->rcvevent++; + if (sock->rcvevent > 1) { + check_waiters = 0; + } + break; + case NETCONN_EVT_RCVMINUS: + sock->rcvevent--; + check_waiters = 0; + break; + case NETCONN_EVT_SENDPLUS: + if (sock->sendevent) { + check_waiters = 0; + } + sock->sendevent = 1; + break; + case NETCONN_EVT_SENDMINUS: + sock->sendevent = 0; + check_waiters = 0; + break; + case NETCONN_EVT_ERROR: + sock->errevent = 1; + break; + default: + LWIP_ASSERT("unknown event", 0); + break; + } + + if (sock->select_waiting && check_waiters) { + /* Save which events are active */ + int has_recvevent, has_sendevent, has_errevent; + has_recvevent = sock->rcvevent > 0; + has_sendevent = sock->sendevent != 0; + has_errevent = sock->errevent != 0; + SYS_ARCH_UNPROTECT(lev); + /* Check any select calls waiting on this socket */ + select_check_waiters(s, has_recvevent, has_sendevent, has_errevent); + } else { + SYS_ARCH_UNPROTECT(lev); + } + done_socket(sock); +} + +/** + * Check if any select waiters are waiting on this socket and its events + * + * @note on synchronization of select_cb_list: + * LWIP_TCPIP_CORE_LOCKING: the select_cb_list must only be accessed while holding + * the core lock. We do a single pass through the list and signal any waiters. + * Core lock should already be held when calling here!!!! + + * !LWIP_TCPIP_CORE_LOCKING: we use SYS_ARCH_PROTECT but unlock on each iteration + * of the loop, thus creating a possibility where a thread could modify the + * select_cb_list during our UNPROTECT/PROTECT. We use a generational counter to + * detect this change and restart the list walk. The list is expected to be small + */ +static void select_check_waiters(int s, int has_recvevent, int has_sendevent, int has_errevent) +{ + struct lwip_select_cb *scb; +#if !LWIP_TCPIP_CORE_LOCKING + int last_select_cb_ctr; + SYS_ARCH_DECL_PROTECT(lev); +#endif /* !LWIP_TCPIP_CORE_LOCKING */ + + LWIP_ASSERT_CORE_LOCKED(); + +#if !LWIP_TCPIP_CORE_LOCKING + SYS_ARCH_PROTECT(lev); +again: + /* remember the state of select_cb_list to detect changes */ + last_select_cb_ctr = select_cb_ctr; +#endif /* !LWIP_TCPIP_CORE_LOCKING */ + for (scb = select_cb_list; scb != NULL; scb = scb->next) { + if (scb->sem_signalled == 0) { + /* semaphore not signalled yet */ + int do_signal = 0; +#if LWIP_SOCKET_POLL + if (scb->poll_fds != NULL) { + do_signal = lwip_poll_should_wake(scb, s, has_recvevent, has_sendevent, has_errevent); + } +#endif /* LWIP_SOCKET_POLL */ +#if LWIP_SOCKET_SELECT && LWIP_SOCKET_POLL + else +#endif /* LWIP_SOCKET_SELECT && LWIP_SOCKET_POLL */ +#if LWIP_SOCKET_SELECT + { + /* Test this select call for our socket */ + if (has_recvevent) { + if (scb->readset && FD_ISSET(s, scb->readset)) { + do_signal = 1; + } + } + if (has_sendevent) { + if (!do_signal && scb->writeset && FD_ISSET(s, scb->writeset)) { + do_signal = 1; + } + } + if (has_errevent) { + if (!do_signal && scb->exceptset && FD_ISSET(s, scb->exceptset)) { + do_signal = 1; + } + } + } +#endif /* LWIP_SOCKET_SELECT */ + if (do_signal) { + scb->sem_signalled = 1; + /* For !LWIP_TCPIP_CORE_LOCKING, we don't call SYS_ARCH_UNPROTECT() before signaling + the semaphore, as this might lead to the select thread taking itself off the list, + invalidating the semaphore. */ + sys_sem_signal(SELECT_SEM_PTR(scb->sem)); + } + } +#if LWIP_TCPIP_CORE_LOCKING + } +#else + /* unlock interrupts with each step */ + SYS_ARCH_UNPROTECT(lev); + /* this makes sure interrupt protection time is short */ + SYS_ARCH_PROTECT(lev); + if (last_select_cb_ctr != select_cb_ctr) { + /* someone has changed select_cb_list, restart at the beginning */ + goto again; + } + /* remember the state of select_cb_list to detect changes */ + last_select_cb_ctr = select_cb_ctr; + } + SYS_ARCH_UNPROTECT(lev); +#endif +} +#endif /* LWIP_SOCKET_SELECT || LWIP_SOCKET_POLL */ + +/** + * Close one end of a full-duplex connection. + */ +int +lwip_shutdown(int s, int how) +{ + struct lwip_sock *sock; + err_t err; + u8_t shut_rx = 0, shut_tx = 0; + + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_shutdown(%d, how=%d)\n", s, how)); + + sock = get_socket(s); + if (!sock) { + return -1; + } + + if (sock->conn != NULL) { + if (NETCONNTYPE_GROUP(netconn_type(sock->conn)) != NETCONN_TCP) { + sock_set_errno(sock, EOPNOTSUPP); + done_socket(sock); + return -1; + } + } else { + sock_set_errno(sock, ENOTCONN); + done_socket(sock); + return -1; + } + + if (how == SHUT_RD) { + shut_rx = 1; + } else if (how == SHUT_WR) { + shut_tx = 1; + } else if (how == SHUT_RDWR) { + shut_rx = 1; + shut_tx = 1; + } else { + sock_set_errno(sock, EINVAL); + done_socket(sock); + return -1; + } + err = netconn_shutdown(sock->conn, shut_rx, shut_tx); + + sock_set_errno(sock, err_to_errno(err)); + done_socket(sock); + return (err == ERR_OK ? 0 : -1); +} + +static int +lwip_getaddrname(int s, struct sockaddr *name, socklen_t *namelen, u8_t local) +{ + struct lwip_sock *sock; + union sockaddr_aligned saddr; + ip_addr_t naddr; + u16_t port; + err_t err; + + sock = get_socket(s); + if (!sock) { + return -1; + } + + /* get the IP address and port */ + err = netconn_getaddr(sock->conn, &naddr, &port, local); + if (err != ERR_OK) { + sock_set_errno(sock, err_to_errno(err)); + done_socket(sock); + return -1; + } + +#if LWIP_IPV4 && LWIP_IPV6 + /* Dual-stack: Map IPv4 addresses to IPv4 mapped IPv6 */ + if (NETCONNTYPE_ISIPV6(netconn_type(sock->conn)) && + IP_IS_V4_VAL(naddr)) { + ip4_2_ipv4_mapped_ipv6(ip_2_ip6(&naddr), ip_2_ip4(&naddr)); + IP_SET_TYPE_VAL(naddr, IPADDR_TYPE_V6); + } +#endif /* LWIP_IPV4 && LWIP_IPV6 */ + + IPADDR_PORT_TO_SOCKADDR(&saddr, &naddr, port); + + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getaddrname(%d, addr=", s)); + ip_addr_debug_print_val(SOCKETS_DEBUG, naddr); + LWIP_DEBUGF(SOCKETS_DEBUG, (" port=%"U16_F")\n", port)); + + if (*namelen > saddr.sa.sa_len) { + *namelen = saddr.sa.sa_len; + } + MEMCPY(name, &saddr, *namelen); + + sock_set_errno(sock, 0); + done_socket(sock); + return 0; +} + +int +lwip_getpeername(int s, struct sockaddr *name, socklen_t *namelen) +{ + return lwip_getaddrname(s, name, namelen, 0); +} + +int +lwip_getsockname(int s, struct sockaddr *name, socklen_t *namelen) +{ + return lwip_getaddrname(s, name, namelen, 1); +} + +int +lwip_getsockopt(int s, int level, int optname, void *optval, socklen_t *optlen) +{ + int err; + struct lwip_sock *sock = get_socket(s); +#if !LWIP_TCPIP_CORE_LOCKING + err_t cberr; + LWIP_SETGETSOCKOPT_DATA_VAR_DECLARE(data); +#endif /* !LWIP_TCPIP_CORE_LOCKING */ + + if (!sock) { + return -1; + } + + if ((NULL == optval) || (NULL == optlen)) { + sock_set_errno(sock, EFAULT); + done_socket(sock); + return -1; + } + +#if LWIP_TCPIP_CORE_LOCKING + /* core-locking can just call the -impl function */ + LOCK_TCPIP_CORE(); + err = lwip_getsockopt_impl(s, level, optname, optval, optlen); + UNLOCK_TCPIP_CORE(); + +#else /* LWIP_TCPIP_CORE_LOCKING */ + +#if LWIP_MPU_COMPATIBLE + /* MPU_COMPATIBLE copies the optval data, so check for max size here */ + if (*optlen > LWIP_SETGETSOCKOPT_MAXOPTLEN) { + sock_set_errno(sock, ENOBUFS); + done_socket(sock); + return -1; + } +#endif /* LWIP_MPU_COMPATIBLE */ + + LWIP_SETGETSOCKOPT_DATA_VAR_ALLOC(data, sock); + LWIP_SETGETSOCKOPT_DATA_VAR_REF(data).s = s; + LWIP_SETGETSOCKOPT_DATA_VAR_REF(data).level = level; + LWIP_SETGETSOCKOPT_DATA_VAR_REF(data).optname = optname; + LWIP_SETGETSOCKOPT_DATA_VAR_REF(data).optlen = *optlen; +#if !LWIP_MPU_COMPATIBLE + LWIP_SETGETSOCKOPT_DATA_VAR_REF(data).optval.p = optval; +#endif /* !LWIP_MPU_COMPATIBLE */ + LWIP_SETGETSOCKOPT_DATA_VAR_REF(data).err = 0; +#if LWIP_NETCONN_SEM_PER_THREAD + LWIP_SETGETSOCKOPT_DATA_VAR_REF(data).completed_sem = LWIP_NETCONN_THREAD_SEM_GET(); +#else + LWIP_SETGETSOCKOPT_DATA_VAR_REF(data).completed_sem = &sock->conn->op_completed; +#endif + cberr = tcpip_callback(lwip_getsockopt_callback, &LWIP_SETGETSOCKOPT_DATA_VAR_REF(data)); + if (cberr != ERR_OK) { + LWIP_SETGETSOCKOPT_DATA_VAR_FREE(data); + sock_set_errno(sock, err_to_errno(cberr)); + done_socket(sock); + return -1; + } + sys_arch_sem_wait((sys_sem_t *)(LWIP_SETGETSOCKOPT_DATA_VAR_REF(data).completed_sem), 0); + + /* write back optlen and optval */ + *optlen = LWIP_SETGETSOCKOPT_DATA_VAR_REF(data).optlen; +#if LWIP_MPU_COMPATIBLE + MEMCPY(optval, LWIP_SETGETSOCKOPT_DATA_VAR_REF(data).optval, + LWIP_SETGETSOCKOPT_DATA_VAR_REF(data).optlen); +#endif /* LWIP_MPU_COMPATIBLE */ + + /* maybe lwip_getsockopt_internal has changed err */ + err = LWIP_SETGETSOCKOPT_DATA_VAR_REF(data).err; + LWIP_SETGETSOCKOPT_DATA_VAR_FREE(data); +#endif /* LWIP_TCPIP_CORE_LOCKING */ + + sock_set_errno(sock, err); + done_socket(sock); + return err ? -1 : 0; +} + +#if !LWIP_TCPIP_CORE_LOCKING +/** lwip_getsockopt_callback: only used without CORE_LOCKING + * to get into the tcpip_thread + */ +static void +lwip_getsockopt_callback(void *arg) +{ + struct lwip_setgetsockopt_data *data; + LWIP_ASSERT("arg != NULL", arg != NULL); + data = (struct lwip_setgetsockopt_data *)arg; + + data->err = lwip_getsockopt_impl(data->s, data->level, data->optname, +#if LWIP_MPU_COMPATIBLE + data->optval, +#else /* LWIP_MPU_COMPATIBLE */ + data->optval.p, +#endif /* LWIP_MPU_COMPATIBLE */ + &data->optlen); + + sys_sem_signal((sys_sem_t *)(data->completed_sem)); +} +#endif /* LWIP_TCPIP_CORE_LOCKING */ + +static int +lwip_sockopt_to_ipopt(int optname) +{ + /* Map SO_* values to our internal SOF_* values + * We should not rely on #defines in socket.h + * being in sync with ip.h. + */ + switch (optname) { + case SO_BROADCAST: + return SOF_BROADCAST; + case SO_KEEPALIVE: + return SOF_KEEPALIVE; + case SO_REUSEADDR: + return SOF_REUSEADDR; + default: + LWIP_ASSERT("Unknown socket option", 0); + return 0; + } +} + +/** lwip_getsockopt_impl: the actual implementation of getsockopt: + * same argument as lwip_getsockopt, either called directly or through callback + */ +static int +lwip_getsockopt_impl(int s, int level, int optname, void *optval, socklen_t *optlen) +{ + int err = 0; + struct lwip_sock *sock = tryget_socket(s); + if (!sock) { + return EBADF; + } + +#ifdef LWIP_HOOK_SOCKETS_GETSOCKOPT + if (LWIP_HOOK_SOCKETS_GETSOCKOPT(s, sock, level, optname, optval, optlen, &err)) { + return err; + } +#endif + + switch (level) { + + /* Level: SOL_SOCKET */ + case SOL_SOCKET: + switch (optname) { + +#if LWIP_TCP + case SO_ACCEPTCONN: + LWIP_SOCKOPT_CHECK_OPTLEN_CONN_PCB(sock, *optlen, int); + if (NETCONNTYPE_GROUP(sock->conn->type) != NETCONN_TCP) { + done_socket(sock); + return ENOPROTOOPT; + } + if ((sock->conn->pcb.tcp != NULL) && (sock->conn->pcb.tcp->state == LISTEN)) { + *(int *)optval = 1; + } else { + *(int *)optval = 0; + } + break; +#endif /* LWIP_TCP */ + + /* The option flags */ + case SO_BROADCAST: + case SO_KEEPALIVE: +#if SO_REUSE + case SO_REUSEADDR: +#endif /* SO_REUSE */ + if ((optname == SO_BROADCAST) && + (NETCONNTYPE_GROUP(sock->conn->type) != NETCONN_UDP)) { + done_socket(sock); + return ENOPROTOOPT; + } + + optname = lwip_sockopt_to_ipopt(optname); + + LWIP_SOCKOPT_CHECK_OPTLEN_CONN_PCB(sock, *optlen, int); + *(int *)optval = ip_get_option(sock->conn->pcb.ip, optname); + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, SOL_SOCKET, optname=0x%x, ..) = %s\n", + s, optname, (*(int *)optval ? "on" : "off"))); + break; + + case SO_TYPE: + LWIP_SOCKOPT_CHECK_OPTLEN_CONN(sock, *optlen, int); + switch (NETCONNTYPE_GROUP(netconn_type(sock->conn))) { + case NETCONN_RAW: + *(int *)optval = SOCK_RAW; + break; + case NETCONN_TCP: + *(int *)optval = SOCK_STREAM; + break; + case NETCONN_UDP: + *(int *)optval = SOCK_DGRAM; + break; + default: /* unrecognized socket type */ + *(int *)optval = netconn_type(sock->conn); + LWIP_DEBUGF(SOCKETS_DEBUG, + ("lwip_getsockopt(%d, SOL_SOCKET, SO_TYPE): unrecognized socket type %d\n", + s, *(int *)optval)); + } /* switch (netconn_type(sock->conn)) */ + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, SOL_SOCKET, SO_TYPE) = %d\n", + s, *(int *)optval)); + break; + + case SO_ERROR: + LWIP_SOCKOPT_CHECK_OPTLEN(sock, *optlen, int); + *(int *)optval = err_to_errno(netconn_err(sock->conn)); + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, SOL_SOCKET, SO_ERROR) = %d\n", + s, *(int *)optval)); + break; + +#if LWIP_SO_SNDTIMEO + case SO_SNDTIMEO: + LWIP_SOCKOPT_CHECK_OPTLEN_CONN(sock, *optlen, LWIP_SO_SNDRCVTIMEO_OPTTYPE); + LWIP_SO_SNDRCVTIMEO_SET(optval, netconn_get_sendtimeout(sock->conn)); + break; +#endif /* LWIP_SO_SNDTIMEO */ +#if LWIP_SO_RCVTIMEO + case SO_RCVTIMEO: + LWIP_SOCKOPT_CHECK_OPTLEN_CONN(sock, *optlen, LWIP_SO_SNDRCVTIMEO_OPTTYPE); + LWIP_SO_SNDRCVTIMEO_SET(optval, netconn_get_recvtimeout(sock->conn)); + break; +#endif /* LWIP_SO_RCVTIMEO */ +#if LWIP_SO_RCVBUF + case SO_RCVBUF: + LWIP_SOCKOPT_CHECK_OPTLEN_CONN(sock, *optlen, int); + *(int *)optval = netconn_get_recvbufsize(sock->conn); + break; +#endif /* LWIP_SO_RCVBUF */ +#if LWIP_SO_LINGER + case SO_LINGER: { + s16_t conn_linger; + struct linger *linger = (struct linger *)optval; + LWIP_SOCKOPT_CHECK_OPTLEN_CONN(sock, *optlen, struct linger); + conn_linger = sock->conn->linger; + if (conn_linger >= 0) { + linger->l_onoff = 1; + linger->l_linger = (int)conn_linger; + } else { + linger->l_onoff = 0; + linger->l_linger = 0; + } + } + break; +#endif /* LWIP_SO_LINGER */ +#if LWIP_UDP + case SO_NO_CHECK: + LWIP_SOCKOPT_CHECK_OPTLEN_CONN_PCB_TYPE(sock, *optlen, int, NETCONN_UDP); +#if LWIP_UDPLITE + if (udp_is_flag_set(sock->conn->pcb.udp, UDP_FLAGS_UDPLITE)) { + /* this flag is only available for UDP, not for UDP lite */ + done_socket(sock); + return EAFNOSUPPORT; + } +#endif /* LWIP_UDPLITE */ + *(int *)optval = udp_is_flag_set(sock->conn->pcb.udp, UDP_FLAGS_NOCHKSUM) ? 1 : 0; + break; +#endif /* LWIP_UDP*/ + default: + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, SOL_SOCKET, UNIMPL: optname=0x%x, ..)\n", + s, optname)); + err = ENOPROTOOPT; + break; + } /* switch (optname) */ + break; + + /* Level: IPPROTO_IP */ + case IPPROTO_IP: + switch (optname) { + case IP_TTL: + LWIP_SOCKOPT_CHECK_OPTLEN_CONN_PCB(sock, *optlen, int); + *(int *)optval = sock->conn->pcb.ip->ttl; + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, IPPROTO_IP, IP_TTL) = %d\n", + s, *(int *)optval)); + break; + case IP_TOS: + LWIP_SOCKOPT_CHECK_OPTLEN_CONN_PCB(sock, *optlen, int); + *(int *)optval = sock->conn->pcb.ip->tos; + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, IPPROTO_IP, IP_TOS) = %d\n", + s, *(int *)optval)); + break; +#if LWIP_IPV4 && LWIP_MULTICAST_TX_OPTIONS && LWIP_UDP + case IP_MULTICAST_TTL: + LWIP_SOCKOPT_CHECK_OPTLEN_CONN_PCB(sock, *optlen, u8_t); + if (NETCONNTYPE_GROUP(netconn_type(sock->conn)) != NETCONN_UDP) { + done_socket(sock); + return ENOPROTOOPT; + } + *(u8_t *)optval = udp_get_multicast_ttl(sock->conn->pcb.udp); + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, IPPROTO_IP, IP_MULTICAST_TTL) = %d\n", + s, *(int *)optval)); + break; + case IP_MULTICAST_IF: + LWIP_SOCKOPT_CHECK_OPTLEN_CONN_PCB(sock, *optlen, struct in_addr); + if (NETCONNTYPE_GROUP(netconn_type(sock->conn)) != NETCONN_UDP) { + done_socket(sock); + return ENOPROTOOPT; + } + inet_addr_from_ip4addr((struct in_addr *)optval, udp_get_multicast_netif_addr(sock->conn->pcb.udp)); + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, IPPROTO_IP, IP_MULTICAST_IF) = 0x%"X32_F"\n", + s, *(u32_t *)optval)); + break; + case IP_MULTICAST_LOOP: + LWIP_SOCKOPT_CHECK_OPTLEN_CONN_PCB(sock, *optlen, u8_t); + if ((sock->conn->pcb.udp->flags & UDP_FLAGS_MULTICAST_LOOP) != 0) { + *(u8_t *)optval = 1; + } else { + *(u8_t *)optval = 0; + } + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, IPPROTO_IP, IP_MULTICAST_LOOP) = %d\n", + s, *(int *)optval)); + break; +#endif /* LWIP_IPV4 && LWIP_MULTICAST_TX_OPTIONS && LWIP_UDP */ + default: + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, IPPROTO_IP, UNIMPL: optname=0x%x, ..)\n", + s, optname)); + err = ENOPROTOOPT; + break; + } /* switch (optname) */ + break; + +#if LWIP_TCP + /* Level: IPPROTO_TCP */ + case IPPROTO_TCP: + /* Special case: all IPPROTO_TCP option take an int */ + LWIP_SOCKOPT_CHECK_OPTLEN_CONN_PCB_TYPE(sock, *optlen, int, NETCONN_TCP); + if (sock->conn->pcb.tcp->state == LISTEN) { + done_socket(sock); + return EINVAL; + } + switch (optname) { + case TCP_NODELAY: + *(int *)optval = tcp_nagle_disabled(sock->conn->pcb.tcp); + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, IPPROTO_TCP, TCP_NODELAY) = %s\n", + s, (*(int *)optval) ? "on" : "off") ); + break; + case TCP_KEEPALIVE: + *(int *)optval = (int)sock->conn->pcb.tcp->keep_idle; + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, IPPROTO_TCP, TCP_KEEPALIVE) = %d\n", + s, *(int *)optval)); + break; + +#if LWIP_TCP_KEEPALIVE + case TCP_KEEPIDLE: + *(int *)optval = (int)(sock->conn->pcb.tcp->keep_idle / 1000); + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, IPPROTO_TCP, TCP_KEEPIDLE) = %d\n", + s, *(int *)optval)); + break; + case TCP_KEEPINTVL: + *(int *)optval = (int)(sock->conn->pcb.tcp->keep_intvl / 1000); + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, IPPROTO_TCP, TCP_KEEPINTVL) = %d\n", + s, *(int *)optval)); + break; + case TCP_KEEPCNT: + *(int *)optval = (int)sock->conn->pcb.tcp->keep_cnt; + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, IPPROTO_TCP, TCP_KEEPCNT) = %d\n", + s, *(int *)optval)); + break; +#endif /* LWIP_TCP_KEEPALIVE */ + default: + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, IPPROTO_TCP, UNIMPL: optname=0x%x, ..)\n", + s, optname)); + err = ENOPROTOOPT; + break; + } /* switch (optname) */ + break; +#endif /* LWIP_TCP */ + +#if LWIP_IPV6 + /* Level: IPPROTO_IPV6 */ + case IPPROTO_IPV6: + switch (optname) { + case IPV6_V6ONLY: + LWIP_SOCKOPT_CHECK_OPTLEN_CONN(sock, *optlen, int); + *(int *)optval = (netconn_get_ipv6only(sock->conn) ? 1 : 0); + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, IPPROTO_IPV6, IPV6_V6ONLY) = %d\n", + s, *(int *)optval)); + break; + default: + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, IPPROTO_IPV6, UNIMPL: optname=0x%x, ..)\n", + s, optname)); + err = ENOPROTOOPT; + break; + } /* switch (optname) */ + break; +#endif /* LWIP_IPV6 */ + +#if LWIP_UDP && LWIP_UDPLITE + /* Level: IPPROTO_UDPLITE */ + case IPPROTO_UDPLITE: + /* Special case: all IPPROTO_UDPLITE option take an int */ + LWIP_SOCKOPT_CHECK_OPTLEN_CONN_PCB(sock, *optlen, int); + /* If this is no UDP lite socket, ignore any options. */ + if (!NETCONNTYPE_ISUDPLITE(netconn_type(sock->conn))) { + done_socket(sock); + return ENOPROTOOPT; + } + switch (optname) { + case UDPLITE_SEND_CSCOV: + *(int *)optval = sock->conn->pcb.udp->chksum_len_tx; + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, IPPROTO_UDPLITE, UDPLITE_SEND_CSCOV) = %d\n", + s, (*(int *)optval)) ); + break; + case UDPLITE_RECV_CSCOV: + *(int *)optval = sock->conn->pcb.udp->chksum_len_rx; + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, IPPROTO_UDPLITE, UDPLITE_RECV_CSCOV) = %d\n", + s, (*(int *)optval)) ); + break; + default: + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, IPPROTO_UDPLITE, UNIMPL: optname=0x%x, ..)\n", + s, optname)); + err = ENOPROTOOPT; + break; + } /* switch (optname) */ + break; +#endif /* LWIP_UDP */ + /* Level: IPPROTO_RAW */ + case IPPROTO_RAW: + switch (optname) { +#if LWIP_IPV6 && LWIP_RAW + case IPV6_CHECKSUM: + LWIP_SOCKOPT_CHECK_OPTLEN_CONN_PCB_TYPE(sock, *optlen, int, NETCONN_RAW); + if (sock->conn->pcb.raw->chksum_reqd == 0) { + *(int *)optval = -1; + } else { + *(int *)optval = sock->conn->pcb.raw->chksum_offset; + } + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, IPPROTO_RAW, IPV6_CHECKSUM) = %d\n", + s, (*(int *)optval)) ); + break; +#endif /* LWIP_IPV6 && LWIP_RAW */ + default: + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, IPPROTO_RAW, UNIMPL: optname=0x%x, ..)\n", + s, optname)); + err = ENOPROTOOPT; + break; + } /* switch (optname) */ + break; + default: + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, level=0x%x, UNIMPL: optname=0x%x, ..)\n", + s, level, optname)); + err = ENOPROTOOPT; + break; + } /* switch (level) */ + + done_socket(sock); + return err; +} + +int +lwip_setsockopt(int s, int level, int optname, const void *optval, socklen_t optlen) +{ + int err = 0; + struct lwip_sock *sock = get_socket(s); +#if !LWIP_TCPIP_CORE_LOCKING + err_t cberr; + LWIP_SETGETSOCKOPT_DATA_VAR_DECLARE(data); +#endif /* !LWIP_TCPIP_CORE_LOCKING */ + + if (!sock) { + return -1; + } + + if (NULL == optval) { + sock_set_errno(sock, EFAULT); + done_socket(sock); + return -1; + } + +#if LWIP_TCPIP_CORE_LOCKING + /* core-locking can just call the -impl function */ + LOCK_TCPIP_CORE(); + err = lwip_setsockopt_impl(s, level, optname, optval, optlen); + UNLOCK_TCPIP_CORE(); + +#else /* LWIP_TCPIP_CORE_LOCKING */ + +#if LWIP_MPU_COMPATIBLE + /* MPU_COMPATIBLE copies the optval data, so check for max size here */ + if (optlen > LWIP_SETGETSOCKOPT_MAXOPTLEN) { + sock_set_errno(sock, ENOBUFS); + done_socket(sock); + return -1; + } +#endif /* LWIP_MPU_COMPATIBLE */ + + LWIP_SETGETSOCKOPT_DATA_VAR_ALLOC(data, sock); + LWIP_SETGETSOCKOPT_DATA_VAR_REF(data).s = s; + LWIP_SETGETSOCKOPT_DATA_VAR_REF(data).level = level; + LWIP_SETGETSOCKOPT_DATA_VAR_REF(data).optname = optname; + LWIP_SETGETSOCKOPT_DATA_VAR_REF(data).optlen = optlen; +#if LWIP_MPU_COMPATIBLE + MEMCPY(LWIP_SETGETSOCKOPT_DATA_VAR_REF(data).optval, optval, optlen); +#else /* LWIP_MPU_COMPATIBLE */ + LWIP_SETGETSOCKOPT_DATA_VAR_REF(data).optval.pc = (const void *)optval; +#endif /* LWIP_MPU_COMPATIBLE */ + LWIP_SETGETSOCKOPT_DATA_VAR_REF(data).err = 0; +#if LWIP_NETCONN_SEM_PER_THREAD + LWIP_SETGETSOCKOPT_DATA_VAR_REF(data).completed_sem = LWIP_NETCONN_THREAD_SEM_GET(); +#else + LWIP_SETGETSOCKOPT_DATA_VAR_REF(data).completed_sem = &sock->conn->op_completed; +#endif + cberr = tcpip_callback(lwip_setsockopt_callback, &LWIP_SETGETSOCKOPT_DATA_VAR_REF(data)); + if (cberr != ERR_OK) { + LWIP_SETGETSOCKOPT_DATA_VAR_FREE(data); + sock_set_errno(sock, err_to_errno(cberr)); + done_socket(sock); + return -1; + } + sys_arch_sem_wait((sys_sem_t *)(LWIP_SETGETSOCKOPT_DATA_VAR_REF(data).completed_sem), 0); + + /* maybe lwip_getsockopt_internal has changed err */ + err = LWIP_SETGETSOCKOPT_DATA_VAR_REF(data).err; + LWIP_SETGETSOCKOPT_DATA_VAR_FREE(data); +#endif /* LWIP_TCPIP_CORE_LOCKING */ + + sock_set_errno(sock, err); + done_socket(sock); + return err ? -1 : 0; +} + +#if !LWIP_TCPIP_CORE_LOCKING +/** lwip_setsockopt_callback: only used without CORE_LOCKING + * to get into the tcpip_thread + */ +static void +lwip_setsockopt_callback(void *arg) +{ + struct lwip_setgetsockopt_data *data; + LWIP_ASSERT("arg != NULL", arg != NULL); + data = (struct lwip_setgetsockopt_data *)arg; + + data->err = lwip_setsockopt_impl(data->s, data->level, data->optname, +#if LWIP_MPU_COMPATIBLE + data->optval, +#else /* LWIP_MPU_COMPATIBLE */ + data->optval.pc, +#endif /* LWIP_MPU_COMPATIBLE */ + data->optlen); + + sys_sem_signal((sys_sem_t *)(data->completed_sem)); +} +#endif /* LWIP_TCPIP_CORE_LOCKING */ + +/** lwip_setsockopt_impl: the actual implementation of setsockopt: + * same argument as lwip_setsockopt, either called directly or through callback + */ +static int +lwip_setsockopt_impl(int s, int level, int optname, const void *optval, socklen_t optlen) +{ + int err = 0; + struct lwip_sock *sock = tryget_socket(s); + if (!sock) { + return EBADF; + } + +#ifdef LWIP_HOOK_SOCKETS_SETSOCKOPT + if (LWIP_HOOK_SOCKETS_SETSOCKOPT(s, sock, level, optname, optval, optlen, &err)) { + return err; + } +#endif + + switch (level) { + + /* Level: SOL_SOCKET */ + case SOL_SOCKET: + switch (optname) { + + /* SO_ACCEPTCONN is get-only */ + + /* The option flags */ + case SO_BROADCAST: + case SO_KEEPALIVE: +#if SO_REUSE + case SO_REUSEADDR: +#endif /* SO_REUSE */ + if ((optname == SO_BROADCAST) && + (NETCONNTYPE_GROUP(sock->conn->type) != NETCONN_UDP)) { + done_socket(sock); + return ENOPROTOOPT; + } + + optname = lwip_sockopt_to_ipopt(optname); + + LWIP_SOCKOPT_CHECK_OPTLEN_CONN_PCB(sock, optlen, int); + if (*(const int *)optval) { + ip_set_option(sock->conn->pcb.ip, optname); + } else { + ip_reset_option(sock->conn->pcb.ip, optname); + } + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_setsockopt(%d, SOL_SOCKET, optname=0x%x, ..) -> %s\n", + s, optname, (*(const int *)optval ? "on" : "off"))); + break; + + /* SO_TYPE is get-only */ + /* SO_ERROR is get-only */ + +#if LWIP_SO_SNDTIMEO + case SO_SNDTIMEO: { + long ms_long; + LWIP_SOCKOPT_CHECK_OPTLEN_CONN(sock, optlen, LWIP_SO_SNDRCVTIMEO_OPTTYPE); + ms_long = LWIP_SO_SNDRCVTIMEO_GET_MS(optval); + if (ms_long < 0) { + done_socket(sock); + return EINVAL; + } + netconn_set_sendtimeout(sock->conn, ms_long); + break; + } +#endif /* LWIP_SO_SNDTIMEO */ +#if LWIP_SO_RCVTIMEO + case SO_RCVTIMEO: { + long ms_long; + LWIP_SOCKOPT_CHECK_OPTLEN_CONN(sock, optlen, LWIP_SO_SNDRCVTIMEO_OPTTYPE); + ms_long = LWIP_SO_SNDRCVTIMEO_GET_MS(optval); + if (ms_long < 0) { + done_socket(sock); + return EINVAL; + } + netconn_set_recvtimeout(sock->conn, (u32_t)ms_long); + break; + } +#endif /* LWIP_SO_RCVTIMEO */ +#if LWIP_SO_RCVBUF + case SO_RCVBUF: + LWIP_SOCKOPT_CHECK_OPTLEN_CONN(sock, optlen, int); + netconn_set_recvbufsize(sock->conn, *(const int *)optval); + break; +#endif /* LWIP_SO_RCVBUF */ +#if LWIP_SO_LINGER + case SO_LINGER: { + const struct linger *linger = (const struct linger *)optval; + LWIP_SOCKOPT_CHECK_OPTLEN_CONN(sock, optlen, struct linger); + if (linger->l_onoff) { + int lingersec = linger->l_linger; + if (lingersec < 0) { + done_socket(sock); + return EINVAL; + } + if (lingersec > 0xFFFF) { + lingersec = 0xFFFF; + } + sock->conn->linger = (s16_t)lingersec; + } else { + sock->conn->linger = -1; + } + } + break; +#endif /* LWIP_SO_LINGER */ +#if LWIP_UDP + case SO_NO_CHECK: + LWIP_SOCKOPT_CHECK_OPTLEN_CONN_PCB_TYPE(sock, optlen, int, NETCONN_UDP); +#if LWIP_UDPLITE + if (udp_is_flag_set(sock->conn->pcb.udp, UDP_FLAGS_UDPLITE)) { + /* this flag is only available for UDP, not for UDP lite */ + done_socket(sock); + return EAFNOSUPPORT; + } +#endif /* LWIP_UDPLITE */ + if (*(const int *)optval) { + udp_set_flags(sock->conn->pcb.udp, UDP_FLAGS_NOCHKSUM); + } else { + udp_clear_flags(sock->conn->pcb.udp, UDP_FLAGS_NOCHKSUM); + } + break; +#endif /* LWIP_UDP */ + case SO_BINDTODEVICE: { + const struct ifreq *iface; + struct netif *n = NULL; + + LWIP_SOCKOPT_CHECK_OPTLEN_CONN(sock, optlen, struct ifreq); + + iface = (const struct ifreq *)optval; + if (iface->ifr_name[0] != 0) { + n = netif_find(iface->ifr_name); + if (n == NULL) { + done_socket(sock); + return ENODEV; + } + } + + switch (NETCONNTYPE_GROUP(netconn_type(sock->conn))) { +#if LWIP_TCP + case NETCONN_TCP: + tcp_bind_netif(sock->conn->pcb.tcp, n); + break; +#endif +#if LWIP_UDP + case NETCONN_UDP: + udp_bind_netif(sock->conn->pcb.udp, n); + break; +#endif +#if LWIP_RAW + case NETCONN_RAW: + raw_bind_netif(sock->conn->pcb.raw, n); + break; +#endif + default: + LWIP_ASSERT("Unhandled netconn type in SO_BINDTODEVICE", 0); + break; + } + } + break; + default: + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_setsockopt(%d, SOL_SOCKET, UNIMPL: optname=0x%x, ..)\n", + s, optname)); + err = ENOPROTOOPT; + break; + } /* switch (optname) */ + break; + + /* Level: IPPROTO_IP */ + case IPPROTO_IP: + switch (optname) { + case IP_TTL: + LWIP_SOCKOPT_CHECK_OPTLEN_CONN_PCB(sock, optlen, int); + sock->conn->pcb.ip->ttl = (u8_t)(*(const int *)optval); + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_setsockopt(%d, IPPROTO_IP, IP_TTL, ..) -> %d\n", + s, sock->conn->pcb.ip->ttl)); + break; + case IP_TOS: + LWIP_SOCKOPT_CHECK_OPTLEN_CONN_PCB(sock, optlen, int); + sock->conn->pcb.ip->tos = (u8_t)(*(const int *)optval); + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_setsockopt(%d, IPPROTO_IP, IP_TOS, ..)-> %d\n", + s, sock->conn->pcb.ip->tos)); + break; +#if LWIP_NETBUF_RECVINFO + case IP_PKTINFO: + LWIP_SOCKOPT_CHECK_OPTLEN_CONN_PCB_TYPE(sock, optlen, int, NETCONN_UDP); + if (*(const int *)optval) { + sock->conn->flags |= NETCONN_FLAG_PKTINFO; + } else { + sock->conn->flags &= ~NETCONN_FLAG_PKTINFO; + } + break; +#endif /* LWIP_NETBUF_RECVINFO */ +#if LWIP_IPV4 && LWIP_MULTICAST_TX_OPTIONS && LWIP_UDP + case IP_MULTICAST_TTL: + LWIP_SOCKOPT_CHECK_OPTLEN_CONN_PCB_TYPE(sock, optlen, u8_t, NETCONN_UDP); + udp_set_multicast_ttl(sock->conn->pcb.udp, (u8_t)(*(const u8_t *)optval)); + break; + case IP_MULTICAST_IF: { + ip4_addr_t if_addr; + LWIP_SOCKOPT_CHECK_OPTLEN_CONN_PCB_TYPE(sock, optlen, struct in_addr, NETCONN_UDP); + inet_addr_to_ip4addr(&if_addr, (const struct in_addr *)optval); + udp_set_multicast_netif_addr(sock->conn->pcb.udp, &if_addr); + } + break; + case IP_MULTICAST_LOOP: + LWIP_SOCKOPT_CHECK_OPTLEN_CONN_PCB_TYPE(sock, optlen, u8_t, NETCONN_UDP); + if (*(const u8_t *)optval) { + udp_set_flags(sock->conn->pcb.udp, UDP_FLAGS_MULTICAST_LOOP); + } else { + udp_clear_flags(sock->conn->pcb.udp, UDP_FLAGS_MULTICAST_LOOP); + } + break; +#endif /* LWIP_IPV4 && LWIP_MULTICAST_TX_OPTIONS && LWIP_UDP */ +#if LWIP_IGMP + case IP_ADD_MEMBERSHIP: + case IP_DROP_MEMBERSHIP: { + /* If this is a TCP or a RAW socket, ignore these options. */ + err_t igmp_err; + const struct ip_mreq *imr = (const struct ip_mreq *)optval; + ip4_addr_t if_addr; + ip4_addr_t multi_addr; + LWIP_SOCKOPT_CHECK_OPTLEN_CONN_PCB_TYPE(sock, optlen, struct ip_mreq, NETCONN_UDP); + inet_addr_to_ip4addr(&if_addr, &imr->imr_interface); + inet_addr_to_ip4addr(&multi_addr, &imr->imr_multiaddr); + if (optname == IP_ADD_MEMBERSHIP) { + if (!lwip_socket_register_membership(s, &if_addr, &multi_addr)) { + /* cannot track membership (out of memory) */ + err = ENOMEM; + igmp_err = ERR_OK; + } else { + igmp_err = igmp_joingroup(&if_addr, &multi_addr); + } + } else { + igmp_err = igmp_leavegroup(&if_addr, &multi_addr); + lwip_socket_unregister_membership(s, &if_addr, &multi_addr); + } + if (igmp_err != ERR_OK) { + err = EADDRNOTAVAIL; + } + } + break; +#endif /* LWIP_IGMP */ + default: + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_setsockopt(%d, IPPROTO_IP, UNIMPL: optname=0x%x, ..)\n", + s, optname)); + err = ENOPROTOOPT; + break; + } /* switch (optname) */ + break; + +#if LWIP_TCP + /* Level: IPPROTO_TCP */ + case IPPROTO_TCP: + /* Special case: all IPPROTO_TCP option take an int */ + LWIP_SOCKOPT_CHECK_OPTLEN_CONN_PCB_TYPE(sock, optlen, int, NETCONN_TCP); + if (sock->conn->pcb.tcp->state == LISTEN) { + done_socket(sock); + return EINVAL; + } + switch (optname) { + case TCP_NODELAY: + if (*(const int *)optval) { + tcp_nagle_disable(sock->conn->pcb.tcp); + } else { + tcp_nagle_enable(sock->conn->pcb.tcp); + } + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_setsockopt(%d, IPPROTO_TCP, TCP_NODELAY) -> %s\n", + s, (*(const int *)optval) ? "on" : "off") ); + break; + case TCP_KEEPALIVE: + sock->conn->pcb.tcp->keep_idle = (u32_t)(*(const int *)optval); + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_setsockopt(%d, IPPROTO_TCP, TCP_KEEPALIVE) -> %"U32_F"\n", + s, sock->conn->pcb.tcp->keep_idle)); + break; + +#if LWIP_TCP_KEEPALIVE + case TCP_KEEPIDLE: + sock->conn->pcb.tcp->keep_idle = 1000 * (u32_t)(*(const int *)optval); + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_setsockopt(%d, IPPROTO_TCP, TCP_KEEPIDLE) -> %"U32_F"\n", + s, sock->conn->pcb.tcp->keep_idle)); + break; + case TCP_KEEPINTVL: + sock->conn->pcb.tcp->keep_intvl = 1000 * (u32_t)(*(const int *)optval); + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_setsockopt(%d, IPPROTO_TCP, TCP_KEEPINTVL) -> %"U32_F"\n", + s, sock->conn->pcb.tcp->keep_intvl)); + break; + case TCP_KEEPCNT: + sock->conn->pcb.tcp->keep_cnt = (u32_t)(*(const int *)optval); + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_setsockopt(%d, IPPROTO_TCP, TCP_KEEPCNT) -> %"U32_F"\n", + s, sock->conn->pcb.tcp->keep_cnt)); + break; +#endif /* LWIP_TCP_KEEPALIVE */ + default: + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_setsockopt(%d, IPPROTO_TCP, UNIMPL: optname=0x%x, ..)\n", + s, optname)); + err = ENOPROTOOPT; + break; + } /* switch (optname) */ + break; +#endif /* LWIP_TCP*/ + +#if LWIP_IPV6 + /* Level: IPPROTO_IPV6 */ + case IPPROTO_IPV6: + switch (optname) { + case IPV6_V6ONLY: + LWIP_SOCKOPT_CHECK_OPTLEN_CONN_PCB(sock, optlen, int); + if (*(const int *)optval) { + netconn_set_ipv6only(sock->conn, 1); + } else { + netconn_set_ipv6only(sock->conn, 0); + } + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_setsockopt(%d, IPPROTO_IPV6, IPV6_V6ONLY, ..) -> %d\n", + s, (netconn_get_ipv6only(sock->conn) ? 1 : 0))); + break; +#if LWIP_IPV6_MLD + case IPV6_JOIN_GROUP: + case IPV6_LEAVE_GROUP: { + /* If this is a TCP or a RAW socket, ignore these options. */ + err_t mld6_err; + struct netif *netif; + ip6_addr_t multi_addr; + const struct ipv6_mreq *imr = (const struct ipv6_mreq *)optval; + LWIP_SOCKOPT_CHECK_OPTLEN_CONN_PCB_TYPE(sock, optlen, struct ipv6_mreq, NETCONN_UDP); + inet6_addr_to_ip6addr(&multi_addr, &imr->ipv6mr_multiaddr); + LWIP_ASSERT("Invalid netif index", imr->ipv6mr_interface <= 0xFFu); + netif = netif_get_by_index((u8_t)imr->ipv6mr_interface); + if (netif == NULL) { + err = EADDRNOTAVAIL; + break; + } + + if (optname == IPV6_JOIN_GROUP) { + if (!lwip_socket_register_mld6_membership(s, imr->ipv6mr_interface, &multi_addr)) { + /* cannot track membership (out of memory) */ + err = ENOMEM; + mld6_err = ERR_OK; + } else { + mld6_err = mld6_joingroup_netif(netif, &multi_addr); + } + } else { + mld6_err = mld6_leavegroup_netif(netif, &multi_addr); + lwip_socket_unregister_mld6_membership(s, imr->ipv6mr_interface, &multi_addr); + } + if (mld6_err != ERR_OK) { + err = EADDRNOTAVAIL; + } + } + break; +#endif /* LWIP_IPV6_MLD */ + default: + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_setsockopt(%d, IPPROTO_IPV6, UNIMPL: optname=0x%x, ..)\n", + s, optname)); + err = ENOPROTOOPT; + break; + } /* switch (optname) */ + break; +#endif /* LWIP_IPV6 */ + +#if LWIP_UDP && LWIP_UDPLITE + /* Level: IPPROTO_UDPLITE */ + case IPPROTO_UDPLITE: + /* Special case: all IPPROTO_UDPLITE option take an int */ + LWIP_SOCKOPT_CHECK_OPTLEN_CONN_PCB(sock, optlen, int); + /* If this is no UDP lite socket, ignore any options. */ + if (!NETCONNTYPE_ISUDPLITE(netconn_type(sock->conn))) { + done_socket(sock); + return ENOPROTOOPT; + } + switch (optname) { + case UDPLITE_SEND_CSCOV: + if ((*(const int *)optval != 0) && ((*(const int *)optval < 8) || (*(const int *)optval > 0xffff))) { + /* don't allow illegal values! */ + sock->conn->pcb.udp->chksum_len_tx = 8; + } else { + sock->conn->pcb.udp->chksum_len_tx = (u16_t) * (const int *)optval; + } + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_setsockopt(%d, IPPROTO_UDPLITE, UDPLITE_SEND_CSCOV) -> %d\n", + s, (*(const int *)optval)) ); + break; + case UDPLITE_RECV_CSCOV: + if ((*(const int *)optval != 0) && ((*(const int *)optval < 8) || (*(const int *)optval > 0xffff))) { + /* don't allow illegal values! */ + sock->conn->pcb.udp->chksum_len_rx = 8; + } else { + sock->conn->pcb.udp->chksum_len_rx = (u16_t) * (const int *)optval; + } + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_setsockopt(%d, IPPROTO_UDPLITE, UDPLITE_RECV_CSCOV) -> %d\n", + s, (*(const int *)optval)) ); + break; + default: + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_setsockopt(%d, IPPROTO_UDPLITE, UNIMPL: optname=0x%x, ..)\n", + s, optname)); + err = ENOPROTOOPT; + break; + } /* switch (optname) */ + break; +#endif /* LWIP_UDP */ + /* Level: IPPROTO_RAW */ + case IPPROTO_RAW: + switch (optname) { +#if LWIP_IPV6 && LWIP_RAW + case IPV6_CHECKSUM: + /* It should not be possible to disable the checksum generation with ICMPv6 + * as per RFC 3542 chapter 3.1 */ + if (sock->conn->pcb.raw->protocol == IPPROTO_ICMPV6) { + done_socket(sock); + return EINVAL; + } + + LWIP_SOCKOPT_CHECK_OPTLEN_CONN_PCB_TYPE(sock, optlen, int, NETCONN_RAW); + if (*(const int *)optval < 0) { + sock->conn->pcb.raw->chksum_reqd = 0; + } else if (*(const int *)optval & 1) { + /* Per RFC3542, odd offsets are not allowed */ + done_socket(sock); + return EINVAL; + } else { + sock->conn->pcb.raw->chksum_reqd = 1; + sock->conn->pcb.raw->chksum_offset = (u16_t) * (const int *)optval; + } + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_setsockopt(%d, IPPROTO_RAW, IPV6_CHECKSUM, ..) -> %d\n", + s, sock->conn->pcb.raw->chksum_reqd)); + break; +#endif /* LWIP_IPV6 && LWIP_RAW */ + default: + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_setsockopt(%d, IPPROTO_RAW, UNIMPL: optname=0x%x, ..)\n", + s, optname)); + err = ENOPROTOOPT; + break; + } /* switch (optname) */ + break; + default: + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_setsockopt(%d, level=0x%x, UNIMPL: optname=0x%x, ..)\n", + s, level, optname)); + err = ENOPROTOOPT; + break; + } /* switch (level) */ + + done_socket(sock); + return err; +} + +int +lwip_ioctl(int s, long cmd, void *argp) +{ + struct lwip_sock *sock = get_socket(s); + u8_t val; +#if LWIP_SO_RCVBUF + int recv_avail; +#endif /* LWIP_SO_RCVBUF */ + + if (!sock) { + return -1; + } + + switch (cmd) { +#if LWIP_SO_RCVBUF || LWIP_FIONREAD_LINUXMODE + case FIONREAD: + if (!argp) { + sock_set_errno(sock, EINVAL); + done_socket(sock); + return -1; + } +#if LWIP_FIONREAD_LINUXMODE + if (NETCONNTYPE_GROUP(netconn_type(sock->conn)) != NETCONN_TCP) { + struct netbuf *nb; + if (sock->lastdata.netbuf) { + nb = sock->lastdata.netbuf; + *((int *)argp) = nb->p->tot_len; + } else { + struct netbuf *rxbuf; + err_t err = netconn_recv_udp_raw_netbuf_flags(sock->conn, &rxbuf, NETCONN_DONTBLOCK); + if (err != ERR_OK) { + *((int *)argp) = 0; + } else { + sock->lastdata.netbuf = rxbuf; + *((int *)argp) = rxbuf->p->tot_len; + } + } + done_socket(sock); + return 0; + } +#endif /* LWIP_FIONREAD_LINUXMODE */ + +#if LWIP_SO_RCVBUF + /* we come here if either LWIP_FIONREAD_LINUXMODE==0 or this is a TCP socket */ + SYS_ARCH_GET(sock->conn->recv_avail, recv_avail); + if (recv_avail < 0) { + recv_avail = 0; + } + + /* Check if there is data left from the last recv operation. /maq 041215 */ + if (sock->lastdata.netbuf) { + if (NETCONNTYPE_GROUP(netconn_type(sock->conn)) == NETCONN_TCP) { + recv_avail += sock->lastdata.pbuf->tot_len; + } else { + recv_avail += sock->lastdata.netbuf->p->tot_len; + } + } + *((int *)argp) = recv_avail; + + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_ioctl(%d, FIONREAD, %p) = %"U16_F"\n", s, argp, *((u16_t *)argp))); + sock_set_errno(sock, 0); + done_socket(sock); + return 0; +#else /* LWIP_SO_RCVBUF */ + break; +#endif /* LWIP_SO_RCVBUF */ +#endif /* LWIP_SO_RCVBUF || LWIP_FIONREAD_LINUXMODE */ + + case (long)FIONBIO: + val = 0; + if (argp && *(int *)argp) { + val = 1; + } + netconn_set_nonblocking(sock->conn, val); + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_ioctl(%d, FIONBIO, %d)\n", s, val)); + sock_set_errno(sock, 0); + done_socket(sock); + return 0; + + default: + break; + } /* switch (cmd) */ + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_ioctl(%d, UNIMPL: 0x%lx, %p)\n", s, cmd, argp)); + sock_set_errno(sock, ENOSYS); /* not yet implemented */ + done_socket(sock); + return -1; +} + +/** A minimal implementation of fcntl. + * Currently only the commands F_GETFL and F_SETFL are implemented. + * The flag O_NONBLOCK and access modes are supported for F_GETFL, only + * the flag O_NONBLOCK is implemented for F_SETFL. + */ +int +lwip_fcntl(int s, int cmd, int val) +{ + struct lwip_sock *sock = get_socket(s); + int ret = -1; + int op_mode = 0; + + if (!sock) { + return -1; + } + + switch (cmd) { + case F_GETFL: + ret = netconn_is_nonblocking(sock->conn) ? O_NONBLOCK : 0; + sock_set_errno(sock, 0); + + if (NETCONNTYPE_GROUP(netconn_type(sock->conn)) == NETCONN_TCP) { +#if LWIP_TCPIP_CORE_LOCKING + LOCK_TCPIP_CORE(); +#else + SYS_ARCH_DECL_PROTECT(lev); + /* the proper thing to do here would be to get into the tcpip_thread, + but locking should be OK as well since we only *read* some flags */ + SYS_ARCH_PROTECT(lev); +#endif +#if LWIP_TCP + if (sock->conn->pcb.tcp) { + if (!(sock->conn->pcb.tcp->flags & TF_RXCLOSED)) { + op_mode |= O_RDONLY; + } + if (!(sock->conn->pcb.tcp->flags & TF_FIN)) { + op_mode |= O_WRONLY; + } + } +#endif +#if LWIP_TCPIP_CORE_LOCKING + UNLOCK_TCPIP_CORE(); +#else + SYS_ARCH_UNPROTECT(lev); +#endif + } else { + op_mode |= O_RDWR; + } + + /* ensure O_RDWR for (O_RDONLY|O_WRONLY) != O_RDWR cases */ + ret |= (op_mode == (O_RDONLY | O_WRONLY)) ? O_RDWR : op_mode; + + break; + case F_SETFL: + /* Bits corresponding to the file access mode and the file creation flags [..] that are set in arg shall be ignored */ + val &= ~(O_RDONLY | O_WRONLY | O_RDWR); + if ((val & ~O_NONBLOCK) == 0) { + /* only O_NONBLOCK, all other bits are zero */ + netconn_set_nonblocking(sock->conn, val & O_NONBLOCK); + ret = 0; + sock_set_errno(sock, 0); + } else { + sock_set_errno(sock, ENOSYS); /* not yet implemented */ + } + break; + default: + LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_fcntl(%d, UNIMPL: %d, %d)\n", s, cmd, val)); + sock_set_errno(sock, ENOSYS); /* not yet implemented */ + break; + } + done_socket(sock); + return ret; +} + +#if LWIP_COMPAT_SOCKETS == 2 && LWIP_POSIX_SOCKETS_IO_NAMES +int +fcntl(int s, int cmd, ...) +{ + va_list ap; + int val; + + va_start(ap, cmd); + val = va_arg(ap, int); + va_end(ap); + return lwip_fcntl(s, cmd, val); +} +#endif + +const char * +lwip_inet_ntop(int af, const void *src, char *dst, socklen_t size) +{ + const char *ret = NULL; + int size_int = (int)size; + if (size_int < 0) { + set_errno(ENOSPC); + return NULL; + } + switch (af) { +#if LWIP_IPV4 + case AF_INET: + ret = ip4addr_ntoa_r((const ip4_addr_t *)src, dst, size_int); + if (ret == NULL) { + set_errno(ENOSPC); + } + break; +#endif +#if LWIP_IPV6 + case AF_INET6: + ret = ip6addr_ntoa_r((const ip6_addr_t *)src, dst, size_int); + if (ret == NULL) { + set_errno(ENOSPC); + } + break; +#endif + default: + set_errno(EAFNOSUPPORT); + break; + } + return ret; +} + +int +lwip_inet_pton(int af, const char *src, void *dst) +{ + int err; + switch (af) { +#if LWIP_IPV4 + case AF_INET: + err = ip4addr_aton(src, (ip4_addr_t *)dst); + break; +#endif +#if LWIP_IPV6 + case AF_INET6: { + /* convert into temporary variable since ip6_addr_t might be larger + than in6_addr when scopes are enabled */ + ip6_addr_t addr; + err = ip6addr_aton(src, &addr); + if (err) { + memcpy(dst, &addr.addr, sizeof(addr.addr)); + } + break; + } +#endif + default: + err = -1; + set_errno(EAFNOSUPPORT); + break; + } + return err; +} + +#if LWIP_IGMP +/** Register a new IGMP membership. On socket close, the membership is dropped automatically. + * + * ATTENTION: this function is called from tcpip_thread (or under CORE_LOCK). + * + * @return 1 on success, 0 on failure + */ +static int +lwip_socket_register_membership(int s, const ip4_addr_t *if_addr, const ip4_addr_t *multi_addr) +{ + struct lwip_sock *sock = get_socket(s); + int i; + + if (!sock) { + return 0; + } + + for (i = 0; i < LWIP_SOCKET_MAX_MEMBERSHIPS; i++) { + if (socket_ipv4_multicast_memberships[i].sock == NULL) { + socket_ipv4_multicast_memberships[i].sock = sock; + ip4_addr_copy(socket_ipv4_multicast_memberships[i].if_addr, *if_addr); + ip4_addr_copy(socket_ipv4_multicast_memberships[i].multi_addr, *multi_addr); + done_socket(sock); + return 1; + } + } + done_socket(sock); + return 0; +} + +/** Unregister a previously registered membership. This prevents dropping the membership + * on socket close. + * + * ATTENTION: this function is called from tcpip_thread (or under CORE_LOCK). + */ +static void +lwip_socket_unregister_membership(int s, const ip4_addr_t *if_addr, const ip4_addr_t *multi_addr) +{ + struct lwip_sock *sock = get_socket(s); + int i; + + if (!sock) { + return; + } + + for (i = 0; i < LWIP_SOCKET_MAX_MEMBERSHIPS; i++) { + if ((socket_ipv4_multicast_memberships[i].sock == sock) && + ip4_addr_cmp(&socket_ipv4_multicast_memberships[i].if_addr, if_addr) && + ip4_addr_cmp(&socket_ipv4_multicast_memberships[i].multi_addr, multi_addr)) { + socket_ipv4_multicast_memberships[i].sock = NULL; + ip4_addr_set_zero(&socket_ipv4_multicast_memberships[i].if_addr); + ip4_addr_set_zero(&socket_ipv4_multicast_memberships[i].multi_addr); + break; + } + } + done_socket(sock); +} + +/** Drop all memberships of a socket that were not dropped explicitly via setsockopt. + * + * ATTENTION: this function is NOT called from tcpip_thread (or under CORE_LOCK). + */ +static void +lwip_socket_drop_registered_memberships(int s) +{ + struct lwip_sock *sock = get_socket(s); + int i; + + if (!sock) { + return; + } + + for (i = 0; i < LWIP_SOCKET_MAX_MEMBERSHIPS; i++) { + if (socket_ipv4_multicast_memberships[i].sock == sock) { + ip_addr_t multi_addr, if_addr; + ip_addr_copy_from_ip4(multi_addr, socket_ipv4_multicast_memberships[i].multi_addr); + ip_addr_copy_from_ip4(if_addr, socket_ipv4_multicast_memberships[i].if_addr); + socket_ipv4_multicast_memberships[i].sock = NULL; + ip4_addr_set_zero(&socket_ipv4_multicast_memberships[i].if_addr); + ip4_addr_set_zero(&socket_ipv4_multicast_memberships[i].multi_addr); + + netconn_join_leave_group(sock->conn, &multi_addr, &if_addr, NETCONN_LEAVE); + } + } + done_socket(sock); +} +#endif /* LWIP_IGMP */ + +#if LWIP_IPV6_MLD +/** Register a new MLD6 membership. On socket close, the membership is dropped automatically. + * + * ATTENTION: this function is called from tcpip_thread (or under CORE_LOCK). + * + * @return 1 on success, 0 on failure + */ +static int +lwip_socket_register_mld6_membership(int s, unsigned int if_idx, const ip6_addr_t *multi_addr) +{ + struct lwip_sock *sock = get_socket(s); + int i; + + if (!sock) { + return 0; + } + + for (i = 0; i < LWIP_SOCKET_MAX_MEMBERSHIPS; i++) { + if (socket_ipv6_multicast_memberships[i].sock == NULL) { + socket_ipv6_multicast_memberships[i].sock = sock; + socket_ipv6_multicast_memberships[i].if_idx = (u8_t)if_idx; + ip6_addr_copy(socket_ipv6_multicast_memberships[i].multi_addr, *multi_addr); + done_socket(sock); + return 1; + } + } + done_socket(sock); + return 0; +} + +/** Unregister a previously registered MLD6 membership. This prevents dropping the membership + * on socket close. + * + * ATTENTION: this function is called from tcpip_thread (or under CORE_LOCK). + */ +static void +lwip_socket_unregister_mld6_membership(int s, unsigned int if_idx, const ip6_addr_t *multi_addr) +{ + struct lwip_sock *sock = get_socket(s); + int i; + + if (!sock) { + return; + } + + for (i = 0; i < LWIP_SOCKET_MAX_MEMBERSHIPS; i++) { + if ((socket_ipv6_multicast_memberships[i].sock == sock) && + (socket_ipv6_multicast_memberships[i].if_idx == if_idx) && + ip6_addr_cmp(&socket_ipv6_multicast_memberships[i].multi_addr, multi_addr)) { + socket_ipv6_multicast_memberships[i].sock = NULL; + socket_ipv6_multicast_memberships[i].if_idx = NETIF_NO_INDEX; + ip6_addr_set_zero(&socket_ipv6_multicast_memberships[i].multi_addr); + break; + } + } + done_socket(sock); +} + +/** Drop all MLD6 memberships of a socket that were not dropped explicitly via setsockopt. + * + * ATTENTION: this function is NOT called from tcpip_thread (or under CORE_LOCK). + */ +static void +lwip_socket_drop_registered_mld6_memberships(int s) +{ + struct lwip_sock *sock = get_socket(s); + int i; + + if (!sock) { + return; + } + + for (i = 0; i < LWIP_SOCKET_MAX_MEMBERSHIPS; i++) { + if (socket_ipv6_multicast_memberships[i].sock == sock) { + ip_addr_t multi_addr; + u8_t if_idx; + + ip_addr_copy_from_ip6(multi_addr, socket_ipv6_multicast_memberships[i].multi_addr); + if_idx = socket_ipv6_multicast_memberships[i].if_idx; + + socket_ipv6_multicast_memberships[i].sock = NULL; + socket_ipv6_multicast_memberships[i].if_idx = NETIF_NO_INDEX; + ip6_addr_set_zero(&socket_ipv6_multicast_memberships[i].multi_addr); + + netconn_join_leave_group_netif(sock->conn, &multi_addr, if_idx, NETCONN_LEAVE); + } + } + done_socket(sock); +} +#endif /* LWIP_IPV6_MLD */ + +#endif /* LWIP_SOCKET */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/api/tcpip.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/api/tcpip.c new file mode 100644 index 0000000000000000000000000000000000000000..743553a587a6cbda41052893c519478b15e729a4 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/api/tcpip.c @@ -0,0 +1,658 @@ +/** + * @file + * Sequential API Main thread module + * + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#include "lwip/opt.h" + +#if !NO_SYS /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/priv/tcpip_priv.h" +#include "lwip/sys.h" +#include "lwip/memp.h" +#include "lwip/mem.h" +#include "lwip/init.h" +#include "lwip/ip.h" +#include "lwip/pbuf.h" +#include "lwip/etharp.h" +#include "netif/ethernet.h" + +#define TCPIP_MSG_VAR_REF(name) API_VAR_REF(name) +#define TCPIP_MSG_VAR_DECLARE(name) API_VAR_DECLARE(struct tcpip_msg, name) +#define TCPIP_MSG_VAR_ALLOC(name) API_VAR_ALLOC(struct tcpip_msg, MEMP_TCPIP_MSG_API, name, ERR_MEM) +#define TCPIP_MSG_VAR_FREE(name) API_VAR_FREE(MEMP_TCPIP_MSG_API, name) + +/* global variables */ +static tcpip_init_done_fn tcpip_init_done; +static void *tcpip_init_done_arg; +static sys_mbox_t tcpip_mbox; + +#if LWIP_TCPIP_CORE_LOCKING +/** The global semaphore to lock the stack. */ +sys_mutex_t lock_tcpip_core; +#endif /* LWIP_TCPIP_CORE_LOCKING */ + +static void tcpip_thread_handle_msg(struct tcpip_msg *msg); + +#if !LWIP_TIMERS +/* wait for a message with timers disabled (e.g. pass a timer-check trigger into tcpip_thread) */ +#define TCPIP_MBOX_FETCH(mbox, msg) sys_mbox_fetch(mbox, msg) +#else /* !LWIP_TIMERS */ +/* wait for a message, timeouts are processed while waiting */ +#define TCPIP_MBOX_FETCH(mbox, msg) tcpip_timeouts_mbox_fetch(mbox, msg) +/** + * Wait (forever) for a message to arrive in an mbox. + * While waiting, timeouts are processed. + * + * @param mbox the mbox to fetch the message from + * @param msg the place to store the message + */ +static void +tcpip_timeouts_mbox_fetch(sys_mbox_t *mbox, void **msg) +{ + u32_t sleeptime, res; + +again: + LWIP_ASSERT_CORE_LOCKED(); + + sleeptime = sys_timeouts_sleeptime(); + if (sleeptime == SYS_TIMEOUTS_SLEEPTIME_INFINITE) { + UNLOCK_TCPIP_CORE(); + sys_arch_mbox_fetch(mbox, msg, 0); + LOCK_TCPIP_CORE(); + return; + } else if (sleeptime == 0) { + sys_check_timeouts(); + /* We try again to fetch a message from the mbox. */ + goto again; + } + + UNLOCK_TCPIP_CORE(); + res = sys_arch_mbox_fetch(mbox, msg, sleeptime); + LOCK_TCPIP_CORE(); + if (res == SYS_ARCH_TIMEOUT) { + /* If a SYS_ARCH_TIMEOUT value is returned, a timeout occurred + before a message could be fetched. */ + sys_check_timeouts(); + /* We try again to fetch a message from the mbox. */ + goto again; + } +} +#endif /* !LWIP_TIMERS */ + +/** + * The main lwIP thread. This thread has exclusive access to lwIP core functions + * (unless access to them is not locked). Other threads communicate with this + * thread using message boxes. + * + * It also starts all the timers to make sure they are running in the right + * thread context. + * + * @param arg unused argument + */ +static void +tcpip_thread(void *arg) +{ + struct tcpip_msg *msg; + LWIP_UNUSED_ARG(arg); + + LWIP_MARK_TCPIP_THREAD(); + + LOCK_TCPIP_CORE(); + if (tcpip_init_done != NULL) { + tcpip_init_done(tcpip_init_done_arg); + } + + while (1) { /* MAIN Loop */ + LWIP_TCPIP_THREAD_ALIVE(); + /* wait for a message, timeouts are processed while waiting */ + TCPIP_MBOX_FETCH(&tcpip_mbox, (void **)&msg); + if (msg == NULL) { + LWIP_DEBUGF(TCPIP_DEBUG, ("tcpip_thread: invalid message: NULL\n")); + LWIP_ASSERT("tcpip_thread: invalid message", 0); + continue; + } + tcpip_thread_handle_msg(msg); + } +} + +/* Handle a single tcpip_msg + * This is in its own function for access by tests only. + */ +static void +tcpip_thread_handle_msg(struct tcpip_msg *msg) +{ + switch (msg->type) { +#if !LWIP_TCPIP_CORE_LOCKING + case TCPIP_MSG_API: + LWIP_DEBUGF(TCPIP_DEBUG, ("tcpip_thread: API message %p\n", (void *)msg)); + msg->msg.api_msg.function(msg->msg.api_msg.msg); + break; + case TCPIP_MSG_API_CALL: + LWIP_DEBUGF(TCPIP_DEBUG, ("tcpip_thread: API CALL message %p\n", (void *)msg)); + msg->msg.api_call.arg->err = msg->msg.api_call.function(msg->msg.api_call.arg); + sys_sem_signal(msg->msg.api_call.sem); + break; +#endif /* !LWIP_TCPIP_CORE_LOCKING */ + +#if !LWIP_TCPIP_CORE_LOCKING_INPUT + case TCPIP_MSG_INPKT: + LWIP_DEBUGF(TCPIP_DEBUG, ("tcpip_thread: PACKET %p\n", (void *)msg)); + if (msg->msg.inp.input_fn(msg->msg.inp.p, msg->msg.inp.netif) != ERR_OK) { + pbuf_free(msg->msg.inp.p); + } + memp_free(MEMP_TCPIP_MSG_INPKT, msg); + break; +#endif /* !LWIP_TCPIP_CORE_LOCKING_INPUT */ + +#if LWIP_TCPIP_TIMEOUT && LWIP_TIMERS + case TCPIP_MSG_TIMEOUT: + LWIP_DEBUGF(TCPIP_DEBUG, ("tcpip_thread: TIMEOUT %p\n", (void *)msg)); + sys_timeout(msg->msg.tmo.msecs, msg->msg.tmo.h, msg->msg.tmo.arg); + memp_free(MEMP_TCPIP_MSG_API, msg); + break; + case TCPIP_MSG_UNTIMEOUT: + LWIP_DEBUGF(TCPIP_DEBUG, ("tcpip_thread: UNTIMEOUT %p\n", (void *)msg)); + sys_untimeout(msg->msg.tmo.h, msg->msg.tmo.arg); + memp_free(MEMP_TCPIP_MSG_API, msg); + break; +#endif /* LWIP_TCPIP_TIMEOUT && LWIP_TIMERS */ + + case TCPIP_MSG_CALLBACK: + LWIP_DEBUGF(TCPIP_DEBUG, ("tcpip_thread: CALLBACK %p\n", (void *)msg)); + msg->msg.cb.function(msg->msg.cb.ctx); + memp_free(MEMP_TCPIP_MSG_API, msg); + break; + + case TCPIP_MSG_CALLBACK_STATIC: + LWIP_DEBUGF(TCPIP_DEBUG, ("tcpip_thread: CALLBACK_STATIC %p\n", (void *)msg)); + msg->msg.cb.function(msg->msg.cb.ctx); + break; + + default: + LWIP_DEBUGF(TCPIP_DEBUG, ("tcpip_thread: invalid message: %d\n", msg->type)); + LWIP_ASSERT("tcpip_thread: invalid message", 0); + break; + } +} + +#ifdef TCPIP_THREAD_TEST +/** Work on queued items in single-threaded test mode */ +int +tcpip_thread_poll_one(void) +{ + int ret = 0; + struct tcpip_msg *msg; + + if (sys_arch_mbox_tryfetch(&tcpip_mbox, (void **)&msg) != SYS_ARCH_TIMEOUT) { + LOCK_TCPIP_CORE(); + if (msg != NULL) { + tcpip_thread_handle_msg(msg); + ret = 1; + } + UNLOCK_TCPIP_CORE(); + } + return ret; +} +#endif + +/** + * Pass a received packet to tcpip_thread for input processing + * + * @param p the received packet + * @param inp the network interface on which the packet was received + * @param input_fn input function to call + */ +err_t +tcpip_inpkt(struct pbuf *p, struct netif *inp, netif_input_fn input_fn) +{ +#if LWIP_TCPIP_CORE_LOCKING_INPUT + err_t ret; + LWIP_DEBUGF(TCPIP_DEBUG, ("tcpip_inpkt: PACKET %p/%p\n", (void *)p, (void *)inp)); + LOCK_TCPIP_CORE(); + ret = input_fn(p, inp); + UNLOCK_TCPIP_CORE(); + return ret; +#else /* LWIP_TCPIP_CORE_LOCKING_INPUT */ + struct tcpip_msg *msg; + + LWIP_ASSERT("Invalid mbox", sys_mbox_valid_val(tcpip_mbox)); + + msg = (struct tcpip_msg *)memp_malloc(MEMP_TCPIP_MSG_INPKT); + if (msg == NULL) { + return ERR_MEM; + } + + msg->type = TCPIP_MSG_INPKT; + msg->msg.inp.p = p; + msg->msg.inp.netif = inp; + msg->msg.inp.input_fn = input_fn; + if (sys_mbox_trypost(&tcpip_mbox, msg) != ERR_OK) { + memp_free(MEMP_TCPIP_MSG_INPKT, msg); + return ERR_MEM; + } + return ERR_OK; +#endif /* LWIP_TCPIP_CORE_LOCKING_INPUT */ +} + +/** + * @ingroup lwip_os + * Pass a received packet to tcpip_thread for input processing with + * ethernet_input or ip_input. Don't call directly, pass to netif_add() + * and call netif->input(). + * + * @param p the received packet, p->payload pointing to the Ethernet header or + * to an IP header (if inp doesn't have NETIF_FLAG_ETHARP or + * NETIF_FLAG_ETHERNET flags) + * @param inp the network interface on which the packet was received + */ +err_t +tcpip_input(struct pbuf *p, struct netif *inp) +{ +#if LWIP_ETHERNET + if (inp->flags & (NETIF_FLAG_ETHARP | NETIF_FLAG_ETHERNET)) { + return tcpip_inpkt(p, inp, ethernet_input); + } else +#endif /* LWIP_ETHERNET */ + return tcpip_inpkt(p, inp, ip_input); +} + +/** + * @ingroup lwip_os + * Call a specific function in the thread context of + * tcpip_thread for easy access synchronization. + * A function called in that way may access lwIP core code + * without fearing concurrent access. + * Blocks until the request is posted. + * Must not be called from interrupt context! + * + * @param function the function to call + * @param ctx parameter passed to f + * @return ERR_OK if the function was called, another err_t if not + * + * @see tcpip_try_callback + */ +err_t +tcpip_callback(tcpip_callback_fn function, void *ctx) +{ + struct tcpip_msg *msg; + + LWIP_ASSERT("Invalid mbox", sys_mbox_valid_val(tcpip_mbox)); + + msg = (struct tcpip_msg *)memp_malloc(MEMP_TCPIP_MSG_API); + if (msg == NULL) { + return ERR_MEM; + } + + msg->type = TCPIP_MSG_CALLBACK; + msg->msg.cb.function = function; + msg->msg.cb.ctx = ctx; + + sys_mbox_post(&tcpip_mbox, msg); + return ERR_OK; +} + +/** + * @ingroup lwip_os + * Call a specific function in the thread context of + * tcpip_thread for easy access synchronization. + * A function called in that way may access lwIP core code + * without fearing concurrent access. + * Does NOT block when the request cannot be posted because the + * tcpip_mbox is full, but returns ERR_MEM instead. + * Can be called from interrupt context. + * + * @param function the function to call + * @param ctx parameter passed to f + * @return ERR_OK if the function was called, another err_t if not + * + * @see tcpip_callback + */ +err_t +tcpip_try_callback(tcpip_callback_fn function, void *ctx) +{ + struct tcpip_msg *msg; + + LWIP_ASSERT("Invalid mbox", sys_mbox_valid_val(tcpip_mbox)); + + msg = (struct tcpip_msg *)memp_malloc(MEMP_TCPIP_MSG_API); + if (msg == NULL) { + return ERR_MEM; + } + + msg->type = TCPIP_MSG_CALLBACK; + msg->msg.cb.function = function; + msg->msg.cb.ctx = ctx; + + if (sys_mbox_trypost(&tcpip_mbox, msg) != ERR_OK) { + memp_free(MEMP_TCPIP_MSG_API, msg); + return ERR_MEM; + } + return ERR_OK; +} + +#if LWIP_TCPIP_TIMEOUT && LWIP_TIMERS +/** + * call sys_timeout in tcpip_thread + * + * @param msecs time in milliseconds for timeout + * @param h function to be called on timeout + * @param arg argument to pass to timeout function h + * @return ERR_MEM on memory error, ERR_OK otherwise + */ +err_t +tcpip_timeout(u32_t msecs, sys_timeout_handler h, void *arg) +{ + struct tcpip_msg *msg; + + LWIP_ASSERT("Invalid mbox", sys_mbox_valid_val(tcpip_mbox)); + + msg = (struct tcpip_msg *)memp_malloc(MEMP_TCPIP_MSG_API); + if (msg == NULL) { + return ERR_MEM; + } + + msg->type = TCPIP_MSG_TIMEOUT; + msg->msg.tmo.msecs = msecs; + msg->msg.tmo.h = h; + msg->msg.tmo.arg = arg; + sys_mbox_post(&tcpip_mbox, msg); + return ERR_OK; +} + +/** + * call sys_untimeout in tcpip_thread + * + * @param h function to be called on timeout + * @param arg argument to pass to timeout function h + * @return ERR_MEM on memory error, ERR_OK otherwise + */ +err_t +tcpip_untimeout(sys_timeout_handler h, void *arg) +{ + struct tcpip_msg *msg; + + LWIP_ASSERT("Invalid mbox", sys_mbox_valid_val(tcpip_mbox)); + + msg = (struct tcpip_msg *)memp_malloc(MEMP_TCPIP_MSG_API); + if (msg == NULL) { + return ERR_MEM; + } + + msg->type = TCPIP_MSG_UNTIMEOUT; + msg->msg.tmo.h = h; + msg->msg.tmo.arg = arg; + sys_mbox_post(&tcpip_mbox, msg); + return ERR_OK; +} +#endif /* LWIP_TCPIP_TIMEOUT && LWIP_TIMERS */ + + +/** + * Sends a message to TCPIP thread to call a function. Caller thread blocks on + * on a provided semaphore, which ist NOT automatically signalled by TCPIP thread, + * this has to be done by the user. + * It is recommended to use LWIP_TCPIP_CORE_LOCKING since this is the way + * with least runtime overhead. + * + * @param fn function to be called from TCPIP thread + * @param apimsg argument to API function + * @param sem semaphore to wait on + * @return ERR_OK if the function was called, another err_t if not + */ +err_t +tcpip_send_msg_wait_sem(tcpip_callback_fn fn, void *apimsg, sys_sem_t *sem) +{ +#if LWIP_TCPIP_CORE_LOCKING + LWIP_UNUSED_ARG(sem); + LOCK_TCPIP_CORE(); + fn(apimsg); + UNLOCK_TCPIP_CORE(); + return ERR_OK; +#else /* LWIP_TCPIP_CORE_LOCKING */ + TCPIP_MSG_VAR_DECLARE(msg); + + LWIP_ASSERT("semaphore not initialized", sys_sem_valid(sem)); + LWIP_ASSERT("Invalid mbox", sys_mbox_valid_val(tcpip_mbox)); + + TCPIP_MSG_VAR_ALLOC(msg); + TCPIP_MSG_VAR_REF(msg).type = TCPIP_MSG_API; + TCPIP_MSG_VAR_REF(msg).msg.api_msg.function = fn; + TCPIP_MSG_VAR_REF(msg).msg.api_msg.msg = apimsg; + sys_mbox_post(&tcpip_mbox, &TCPIP_MSG_VAR_REF(msg)); + sys_arch_sem_wait(sem, 0); + TCPIP_MSG_VAR_FREE(msg); + return ERR_OK; +#endif /* LWIP_TCPIP_CORE_LOCKING */ +} + +/** + * Synchronously calls function in TCPIP thread and waits for its completion. + * It is recommended to use LWIP_TCPIP_CORE_LOCKING (preferred) or + * LWIP_NETCONN_SEM_PER_THREAD. + * If not, a semaphore is created and destroyed on every call which is usually + * an expensive/slow operation. + * @param fn Function to call + * @param call Call parameters + * @return Return value from tcpip_api_call_fn + */ +err_t +tcpip_api_call(tcpip_api_call_fn fn, struct tcpip_api_call_data *call) +{ +#if LWIP_TCPIP_CORE_LOCKING + err_t err; + LOCK_TCPIP_CORE(); + err = fn(call); + UNLOCK_TCPIP_CORE(); + return err; +#else /* LWIP_TCPIP_CORE_LOCKING */ + TCPIP_MSG_VAR_DECLARE(msg); + +#if !LWIP_NETCONN_SEM_PER_THREAD + err_t err = sys_sem_new(&call->sem, 0); + if (err != ERR_OK) { + return err; + } +#endif /* LWIP_NETCONN_SEM_PER_THREAD */ + + LWIP_ASSERT("Invalid mbox", sys_mbox_valid_val(tcpip_mbox)); + + TCPIP_MSG_VAR_ALLOC(msg); + TCPIP_MSG_VAR_REF(msg).type = TCPIP_MSG_API_CALL; + TCPIP_MSG_VAR_REF(msg).msg.api_call.arg = call; + TCPIP_MSG_VAR_REF(msg).msg.api_call.function = fn; +#if LWIP_NETCONN_SEM_PER_THREAD + TCPIP_MSG_VAR_REF(msg).msg.api_call.sem = LWIP_NETCONN_THREAD_SEM_GET(); +#else /* LWIP_NETCONN_SEM_PER_THREAD */ + TCPIP_MSG_VAR_REF(msg).msg.api_call.sem = &call->sem; +#endif /* LWIP_NETCONN_SEM_PER_THREAD */ + sys_mbox_post(&tcpip_mbox, &TCPIP_MSG_VAR_REF(msg)); + sys_arch_sem_wait(TCPIP_MSG_VAR_REF(msg).msg.api_call.sem, 0); + TCPIP_MSG_VAR_FREE(msg); + +#if !LWIP_NETCONN_SEM_PER_THREAD + sys_sem_free(&call->sem); +#endif /* LWIP_NETCONN_SEM_PER_THREAD */ + + return call->err; +#endif /* LWIP_TCPIP_CORE_LOCKING */ +} + +/** + * @ingroup lwip_os + * Allocate a structure for a static callback message and initialize it. + * The message has a special type such that lwIP never frees it. + * This is intended to be used to send "static" messages from interrupt context, + * e.g. the message is allocated once and posted several times from an IRQ + * using tcpip_callbackmsg_trycallback(). + * Example usage: Trigger execution of an ethernet IRQ DPC routine in lwIP thread context. + * + * @param function the function to call + * @param ctx parameter passed to function + * @return a struct pointer to pass to tcpip_callbackmsg_trycallback(). + * + * @see tcpip_callbackmsg_trycallback() + * @see tcpip_callbackmsg_delete() + */ +struct tcpip_callback_msg * +tcpip_callbackmsg_new(tcpip_callback_fn function, void *ctx) +{ + struct tcpip_msg *msg = (struct tcpip_msg *)memp_malloc(MEMP_TCPIP_MSG_API); + if (msg == NULL) { + return NULL; + } + msg->type = TCPIP_MSG_CALLBACK_STATIC; + msg->msg.cb.function = function; + msg->msg.cb.ctx = ctx; + return (struct tcpip_callback_msg *)msg; +} + +/** + * @ingroup lwip_os + * Free a callback message allocated by tcpip_callbackmsg_new(). + * + * @param msg the message to free + * + * @see tcpip_callbackmsg_new() + */ +void +tcpip_callbackmsg_delete(struct tcpip_callback_msg *msg) +{ + memp_free(MEMP_TCPIP_MSG_API, msg); +} + +/** + * @ingroup lwip_os + * Try to post a callback-message to the tcpip_thread tcpip_mbox. + * + * @param msg pointer to the message to post + * @return sys_mbox_trypost() return code + * + * @see tcpip_callbackmsg_new() + */ +err_t +tcpip_callbackmsg_trycallback(struct tcpip_callback_msg *msg) +{ + LWIP_ASSERT("Invalid mbox", sys_mbox_valid_val(tcpip_mbox)); + return sys_mbox_trypost(&tcpip_mbox, msg); +} + +/** + * @ingroup lwip_os + * Try to post a callback-message to the tcpip_thread mbox. + * Same as @ref tcpip_callbackmsg_trycallback but calls sys_mbox_trypost_fromisr(), + * mainly to help FreeRTOS, where calls differ between task level and ISR level. + * + * @param msg pointer to the message to post + * @return sys_mbox_trypost_fromisr() return code (without change, so this + * knowledge can be used to e.g. propagate "bool needs_scheduling") + * + * @see tcpip_callbackmsg_new() + */ +err_t +tcpip_callbackmsg_trycallback_fromisr(struct tcpip_callback_msg *msg) +{ + LWIP_ASSERT("Invalid mbox", sys_mbox_valid_val(tcpip_mbox)); + return sys_mbox_trypost_fromisr(&tcpip_mbox, msg); +} + +/** + * @ingroup lwip_os + * Initialize this module: + * - initialize all sub modules + * - start the tcpip_thread + * + * @param initfunc a function to call when tcpip_thread is running and finished initializing + * @param arg argument to pass to initfunc + */ +void +tcpip_init(tcpip_init_done_fn initfunc, void *arg) +{ + lwip_init(); + + tcpip_init_done = initfunc; + tcpip_init_done_arg = arg; + if (sys_mbox_new(&tcpip_mbox, TCPIP_MBOX_SIZE) != ERR_OK) { + LWIP_ASSERT("failed to create tcpip_thread mbox", 0); + } +#if LWIP_TCPIP_CORE_LOCKING + if (sys_mutex_new(&lock_tcpip_core) != ERR_OK) { + LWIP_ASSERT("failed to create lock_tcpip_core", 0); + } +#endif /* LWIP_TCPIP_CORE_LOCKING */ + + sys_thread_new(TCPIP_THREAD_NAME, tcpip_thread, NULL, TCPIP_THREAD_STACKSIZE, TCPIP_THREAD_PRIO); +} + +/** + * Simple callback function used with tcpip_callback to free a pbuf + * (pbuf_free has a wrong signature for tcpip_callback) + * + * @param p The pbuf (chain) to be dereferenced. + */ +static void +pbuf_free_int(void *p) +{ + struct pbuf *q = (struct pbuf *)p; + pbuf_free(q); +} + +/** + * A simple wrapper function that allows you to free a pbuf from interrupt context. + * + * @param p The pbuf (chain) to be dereferenced. + * @return ERR_OK if callback could be enqueued, an err_t if not + */ +err_t +pbuf_free_callback(struct pbuf *p) +{ + return tcpip_try_callback(pbuf_free_int, p); +} + +/** + * A simple wrapper function that allows you to free heap memory from + * interrupt context. + * + * @param m the heap memory to free + * @return ERR_OK if callback could be enqueued, an err_t if not + */ +err_t +mem_free_callback(void *m) +{ + return tcpip_try_callback(mem_free, m); +} + +#endif /* !NO_SYS */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/apps/mqtt/mqtt.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/apps/mqtt/mqtt.c new file mode 100644 index 0000000000000000000000000000000000000000..269f4a490c63b39ec88f3deed5a92fa94ecff935 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/apps/mqtt/mqtt.c @@ -0,0 +1,1463 @@ +/** + * @file + * MQTT client + * + * @defgroup mqtt MQTT client + * @ingroup apps + * @verbinclude mqtt_client.txt + */ + +/* + * Copyright (c) 2016 Erik Andersson + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack + * + * Author: Erik Andersson + * + * + * @todo: + * - Handle large outgoing payloads for PUBLISH messages + * - Fix restriction of a single topic in each (UN)SUBSCRIBE message (protocol has support for multiple topics) + * - Add support for legacy MQTT protocol version + * + * Please coordinate changes and requests with Erik Andersson + * Erik Andersson + * + */ +#include "lwip/apps/mqtt.h" +#include "lwip/apps/mqtt_priv.h" +#include "lwip/timeouts.h" +#include "lwip/ip_addr.h" +#include "lwip/mem.h" +#include "lwip/err.h" +#include "lwip/pbuf.h" +#include "lwip/altcp.h" +#include "lwip/altcp_tcp.h" +#include "lwip/altcp_tls.h" +#include + +#if LWIP_TCP && LWIP_CALLBACK_API + +/** + * MQTT_DEBUG: Default is off. + */ +#if !defined MQTT_DEBUG || defined __DOXYGEN__ +#define MQTT_DEBUG LWIP_DBG_OFF +#endif + +#define MQTT_DEBUG_TRACE (MQTT_DEBUG | LWIP_DBG_TRACE) +#define MQTT_DEBUG_STATE (MQTT_DEBUG | LWIP_DBG_STATE) +#define MQTT_DEBUG_WARN (MQTT_DEBUG | LWIP_DBG_LEVEL_WARNING) +#define MQTT_DEBUG_WARN_STATE (MQTT_DEBUG | LWIP_DBG_LEVEL_WARNING | LWIP_DBG_STATE) +#define MQTT_DEBUG_SERIOUS (MQTT_DEBUG | LWIP_DBG_LEVEL_SERIOUS) + + + +/** + * MQTT client connection states + */ +enum { + TCP_DISCONNECTED, + TCP_CONNECTING, + MQTT_CONNECTING, + MQTT_CONNECTED +}; + +/** + * MQTT control message types + */ +enum mqtt_message_type { + MQTT_MSG_TYPE_CONNECT = 1, + MQTT_MSG_TYPE_CONNACK = 2, + MQTT_MSG_TYPE_PUBLISH = 3, + MQTT_MSG_TYPE_PUBACK = 4, + MQTT_MSG_TYPE_PUBREC = 5, + MQTT_MSG_TYPE_PUBREL = 6, + MQTT_MSG_TYPE_PUBCOMP = 7, + MQTT_MSG_TYPE_SUBSCRIBE = 8, + MQTT_MSG_TYPE_SUBACK = 9, + MQTT_MSG_TYPE_UNSUBSCRIBE = 10, + MQTT_MSG_TYPE_UNSUBACK = 11, + MQTT_MSG_TYPE_PINGREQ = 12, + MQTT_MSG_TYPE_PINGRESP = 13, + MQTT_MSG_TYPE_DISCONNECT = 14 +}; + +/** Helpers to extract control packet type and qos from first byte in fixed header */ +#define MQTT_CTL_PACKET_TYPE(fixed_hdr_byte0) ((fixed_hdr_byte0 & 0xf0) >> 4) +#define MQTT_CTL_PACKET_QOS(fixed_hdr_byte0) ((fixed_hdr_byte0 & 0x6) >> 1) + +/** + * MQTT connect flags, only used in CONNECT message + */ +enum mqtt_connect_flag { + MQTT_CONNECT_FLAG_USERNAME = 1 << 7, + MQTT_CONNECT_FLAG_PASSWORD = 1 << 6, + MQTT_CONNECT_FLAG_WILL_RETAIN = 1 << 5, + MQTT_CONNECT_FLAG_WILL = 1 << 2, + MQTT_CONNECT_FLAG_CLEAN_SESSION = 1 << 1 +}; + + +static void mqtt_cyclic_timer(void *arg); + +#if defined(LWIP_DEBUG) +static const char *const mqtt_message_type_str[15] = { + "UNDEFINED", + "CONNECT", + "CONNACK", + "PUBLISH", + "PUBACK", + "PUBREC", + "PUBREL", + "PUBCOMP", + "SUBSCRIBE", + "SUBACK", + "UNSUBSCRIBE", + "UNSUBACK", + "PINGREQ", + "PINGRESP", + "DISCONNECT" +}; + +/** + * Message type value to string + * @param msg_type see enum mqtt_message_type + * + * @return Control message type text string + */ +static const char * +mqtt_msg_type_to_str(u8_t msg_type) +{ + if (msg_type >= LWIP_ARRAYSIZE(mqtt_message_type_str)) { + msg_type = 0; + } + return mqtt_message_type_str[msg_type]; +} + +#endif + + +/** + * Generate MQTT packet identifier + * @param client MQTT client + * @return New packet identifier, range 1 to 65535 + */ +static u16_t +msg_generate_packet_id(mqtt_client_t *client) +{ + client->pkt_id_seq++; + if (client->pkt_id_seq == 0) { + client->pkt_id_seq++; + } + return client->pkt_id_seq; +} + +/*--------------------------------------------------------------------------------------------------------------------- */ +/* Output ring buffer */ + +/** Add single item to ring buffer */ +static void +mqtt_ringbuf_put(struct mqtt_ringbuf_t *rb, u8_t item) +{ + rb->buf[rb->put] = item; + rb->put++; + if (rb->put >= MQTT_OUTPUT_RINGBUF_SIZE) { + rb->put = 0; + } +} + +/** Return pointer to ring buffer get position */ +static u8_t * +mqtt_ringbuf_get_ptr(struct mqtt_ringbuf_t *rb) +{ + return &rb->buf[rb->get]; +} + +static void +mqtt_ringbuf_advance_get_idx(struct mqtt_ringbuf_t *rb, u16_t len) +{ + LWIP_ASSERT("mqtt_ringbuf_advance_get_idx: len < MQTT_OUTPUT_RINGBUF_SIZE", len < MQTT_OUTPUT_RINGBUF_SIZE); + + rb->get += len; + if (rb->get >= MQTT_OUTPUT_RINGBUF_SIZE) { + rb->get = rb->get - MQTT_OUTPUT_RINGBUF_SIZE; + } +} + +/** Return number of bytes in ring buffer */ +static u16_t +mqtt_ringbuf_len(struct mqtt_ringbuf_t *rb) +{ + u32_t len = rb->put - rb->get; + if (len > 0xFFFF) { + len += MQTT_OUTPUT_RINGBUF_SIZE; + } + return (u16_t)len; +} + +/** Return number of bytes free in ring buffer */ +#define mqtt_ringbuf_free(rb) (MQTT_OUTPUT_RINGBUF_SIZE - mqtt_ringbuf_len(rb)) + +/** Return number of bytes possible to read without wrapping around */ +#define mqtt_ringbuf_linear_read_length(rb) LWIP_MIN(mqtt_ringbuf_len(rb), (MQTT_OUTPUT_RINGBUF_SIZE - (rb)->get)) + +/** + * Try send as many bytes as possible from output ring buffer + * @param rb Output ring buffer + * @param tpcb TCP connection handle + */ +static void +mqtt_output_send(struct mqtt_ringbuf_t *rb, struct altcp_pcb *tpcb) +{ + err_t err; + u8_t wrap = 0; + u16_t ringbuf_lin_len = mqtt_ringbuf_linear_read_length(rb); + u16_t send_len = altcp_sndbuf(tpcb); + LWIP_ASSERT("mqtt_output_send: tpcb != NULL", tpcb != NULL); + + if (send_len == 0 || ringbuf_lin_len == 0) { + return; + } + + LWIP_DEBUGF(MQTT_DEBUG_TRACE, ("mqtt_output_send: tcp_sndbuf: %d bytes, ringbuf_linear_available: %d, get %d, put %d\n", + send_len, ringbuf_lin_len, rb->get, rb->put)); + + if (send_len > ringbuf_lin_len) { + /* Space in TCP output buffer is larger than available in ring buffer linear portion */ + send_len = ringbuf_lin_len; + /* Wrap around if more data in ring buffer after linear portion */ + wrap = (mqtt_ringbuf_len(rb) > ringbuf_lin_len); + } + err = altcp_write(tpcb, mqtt_ringbuf_get_ptr(rb), send_len, TCP_WRITE_FLAG_COPY | (wrap ? TCP_WRITE_FLAG_MORE : 0)); + if ((err == ERR_OK) && wrap) { + mqtt_ringbuf_advance_get_idx(rb, send_len); + /* Use the lesser one of ring buffer linear length and TCP send buffer size */ + send_len = LWIP_MIN(altcp_sndbuf(tpcb), mqtt_ringbuf_linear_read_length(rb)); + err = altcp_write(tpcb, mqtt_ringbuf_get_ptr(rb), send_len, TCP_WRITE_FLAG_COPY); + } + + if (err == ERR_OK) { + mqtt_ringbuf_advance_get_idx(rb, send_len); + /* Flush */ + altcp_output(tpcb); + } else { + LWIP_DEBUGF(MQTT_DEBUG_WARN, ("mqtt_output_send: Send failed with err %d (\"%s\")\n", err, lwip_strerr(err))); + } +} + + + +/*--------------------------------------------------------------------------------------------------------------------- */ +/* Request queue */ + +/** + * Create request item + * @param r_objs Pointer to request objects + * @param r_objs_len Number of array entries + * @param pkt_id Packet identifier of request + * @param cb Packet callback to call when requests lifetime ends + * @param arg Parameter following callback + * @return Request or NULL if failed to create + */ +static struct mqtt_request_t * +mqtt_create_request(struct mqtt_request_t *r_objs, size_t r_objs_len, u16_t pkt_id, mqtt_request_cb_t cb, void *arg) +{ + struct mqtt_request_t *r = NULL; + u8_t n; + LWIP_ASSERT("mqtt_create_request: r_objs != NULL", r_objs != NULL); + for (n = 0; n < r_objs_len; n++) { + /* Item point to itself if not in use */ + if (r_objs[n].next == &r_objs[n]) { + r = &r_objs[n]; + r->next = NULL; + r->cb = cb; + r->arg = arg; + r->pkt_id = pkt_id; + break; + } + } + return r; +} + + +/** + * Append request to pending request queue + * @param tail Pointer to request queue tail pointer + * @param r Request to append + */ +static void +mqtt_append_request(struct mqtt_request_t **tail, struct mqtt_request_t *r) +{ + struct mqtt_request_t *head = NULL; + s16_t time_before = 0; + struct mqtt_request_t *iter; + + LWIP_ASSERT("mqtt_append_request: tail != NULL", tail != NULL); + + /* Iterate trough queue to find head, and count total timeout time */ + for (iter = *tail; iter != NULL; iter = iter->next) { + time_before += iter->timeout_diff; + head = iter; + } + + LWIP_ASSERT("mqtt_append_request: time_before <= MQTT_REQ_TIMEOUT", time_before <= MQTT_REQ_TIMEOUT); + r->timeout_diff = MQTT_REQ_TIMEOUT - time_before; + if (head == NULL) { + *tail = r; + } else { + head->next = r; + } +} + + +/** + * Delete request item + * @param r Request item to delete + */ +static void +mqtt_delete_request(struct mqtt_request_t *r) +{ + if (r != NULL) { + r->next = r; + } +} + +/** + * Remove a request item with a specific packet identifier from request queue + * @param tail Pointer to request queue tail pointer + * @param pkt_id Packet identifier of request to take + * @return Request item if found, NULL if not + */ +static struct mqtt_request_t * +mqtt_take_request(struct mqtt_request_t **tail, u16_t pkt_id) +{ + struct mqtt_request_t *iter = NULL, *prev = NULL; + LWIP_ASSERT("mqtt_take_request: tail != NULL", tail != NULL); + /* Search all request for pkt_id */ + for (iter = *tail; iter != NULL; iter = iter->next) { + if (iter->pkt_id == pkt_id) { + break; + } + prev = iter; + } + + /* If request was found */ + if (iter != NULL) { + /* unchain */ + if (prev == NULL) { + *tail = iter->next; + } else { + prev->next = iter->next; + } + /* If exists, add remaining timeout time for the request to next */ + if (iter->next != NULL) { + iter->next->timeout_diff += iter->timeout_diff; + } + iter->next = NULL; + } + return iter; +} + +/** + * Handle requests timeout + * @param tail Pointer to request queue tail pointer + * @param t Time since last call in seconds + */ +static void +mqtt_request_time_elapsed(struct mqtt_request_t **tail, u8_t t) +{ + struct mqtt_request_t *r; + LWIP_ASSERT("mqtt_request_time_elapsed: tail != NULL", tail != NULL); + r = *tail; + while (t > 0 && r != NULL) { + if (t >= r->timeout_diff) { + t -= (u8_t)r->timeout_diff; + /* Unchain */ + *tail = r->next; + /* Notify upper layer about timeout */ + if (r->cb != NULL) { + r->cb(r->arg, ERR_TIMEOUT); + } + mqtt_delete_request(r); + /* Tail might be be modified in callback, so re-read it in every iteration */ + r = *(struct mqtt_request_t *const volatile *)tail; + } else { + r->timeout_diff -= t; + t = 0; + } + } +} + +/** + * Free all request items + * @param tail Pointer to request queue tail pointer + */ +static void +mqtt_clear_requests(struct mqtt_request_t **tail) +{ + struct mqtt_request_t *iter, *next; + LWIP_ASSERT("mqtt_clear_requests: tail != NULL", tail != NULL); + for (iter = *tail; iter != NULL; iter = next) { + next = iter->next; + mqtt_delete_request(iter); + } + *tail = NULL; +} +/** + * Initialize all request items + * @param r_objs Pointer to request objects + * @param r_objs_len Number of array entries + */ +static void +mqtt_init_requests(struct mqtt_request_t *r_objs, size_t r_objs_len) +{ + u8_t n; + LWIP_ASSERT("mqtt_init_requests: r_objs != NULL", r_objs != NULL); + for (n = 0; n < r_objs_len; n++) { + /* Item pointing to itself indicates unused */ + r_objs[n].next = &r_objs[n]; + } +} + +/*--------------------------------------------------------------------------------------------------------------------- */ +/* Output message build helpers */ + + +static void +mqtt_output_append_u8(struct mqtt_ringbuf_t *rb, u8_t value) +{ + mqtt_ringbuf_put(rb, value); +} + +static +void mqtt_output_append_u16(struct mqtt_ringbuf_t *rb, u16_t value) +{ + mqtt_ringbuf_put(rb, value >> 8); + mqtt_ringbuf_put(rb, value & 0xff); +} + +static void +mqtt_output_append_buf(struct mqtt_ringbuf_t *rb, const void *data, u16_t length) +{ + u16_t n; + for (n = 0; n < length; n++) { + mqtt_ringbuf_put(rb, ((const u8_t *)data)[n]); + } +} + +static void +mqtt_output_append_string(struct mqtt_ringbuf_t *rb, const char *str, u16_t length) +{ + u16_t n; + mqtt_ringbuf_put(rb, length >> 8); + mqtt_ringbuf_put(rb, length & 0xff); + for (n = 0; n < length; n++) { + mqtt_ringbuf_put(rb, str[n]); + } +} + +/** + * Append fixed header + * @param rb Output ring buffer + * @param msg_type see enum mqtt_message_type + * @param fdup MQTT DUP flag + * @param fqos MQTT QoS field + * @param fretain MQTT retain flag + * @param r_length Remaining length after fixed header + */ + +static void +mqtt_output_append_fixed_header(struct mqtt_ringbuf_t *rb, u8_t msg_type, u8_t fdup, + u8_t fqos, u8_t fretain, u16_t r_length) +{ + /* Start with control byte */ + mqtt_output_append_u8(rb, (((msg_type & 0x0f) << 4) | ((fdup & 1) << 3) | ((fqos & 3) << 1) | (fretain & 1))); + /* Encode remaining length field */ + do { + mqtt_output_append_u8(rb, (r_length & 0x7f) | (r_length >= 128 ? 0x80 : 0)); + r_length >>= 7; + } while (r_length > 0); +} + + +/** + * Check output buffer space + * @param rb Output ring buffer + * @param r_length Remaining length after fixed header + * @return 1 if message will fit, 0 if not enough buffer space + */ +static u8_t +mqtt_output_check_space(struct mqtt_ringbuf_t *rb, u16_t r_length) +{ + /* Start with length of type byte + remaining length */ + u16_t total_len = 1 + r_length; + + LWIP_ASSERT("mqtt_output_check_space: rb != NULL", rb != NULL); + + /* Calculate number of required bytes to contain the remaining bytes field and add to total*/ + do { + total_len++; + r_length >>= 7; + } while (r_length > 0); + + return (total_len <= mqtt_ringbuf_free(rb)); +} + + +/** + * Close connection to server + * @param client MQTT client + * @param reason Reason for disconnection + */ +static void +mqtt_close(mqtt_client_t *client, mqtt_connection_status_t reason) +{ + LWIP_ASSERT("mqtt_close: client != NULL", client != NULL); + + /* Bring down TCP connection if not already done */ + if (client->conn != NULL) { + err_t res; + altcp_recv(client->conn, NULL); + altcp_err(client->conn, NULL); + altcp_sent(client->conn, NULL); + res = altcp_close(client->conn); + if (res != ERR_OK) { + altcp_abort(client->conn); + LWIP_DEBUGF(MQTT_DEBUG_TRACE, ("mqtt_close: Close err=%s\n", lwip_strerr(res))); + } + client->conn = NULL; + } + + /* Remove all pending requests */ + mqtt_clear_requests(&client->pend_req_queue); + /* Stop cyclic timer */ + sys_untimeout(mqtt_cyclic_timer, client); + + /* Notify upper layer of disconnection if changed state */ + if (client->conn_state != TCP_DISCONNECTED) { + + client->conn_state = TCP_DISCONNECTED; + if (client->connect_cb != NULL) { + client->connect_cb(client, client->connect_arg, reason); + } + } +} + + +/** + * Interval timer, called every MQTT_CYCLIC_TIMER_INTERVAL seconds in MQTT_CONNECTING and MQTT_CONNECTED states + * @param arg MQTT client + */ +static void +mqtt_cyclic_timer(void *arg) +{ + u8_t restart_timer = 1; + mqtt_client_t *client = (mqtt_client_t *)arg; + LWIP_ASSERT("mqtt_cyclic_timer: client != NULL", client != NULL); + + if (client->conn_state == MQTT_CONNECTING) { + client->cyclic_tick++; + if ((client->cyclic_tick * MQTT_CYCLIC_TIMER_INTERVAL) >= MQTT_CONNECT_TIMOUT) { + LWIP_DEBUGF(MQTT_DEBUG_TRACE, ("mqtt_cyclic_timer: CONNECT attempt to server timed out\n")); + /* Disconnect TCP */ + mqtt_close(client, MQTT_CONNECT_TIMEOUT); + restart_timer = 0; + } + } else if (client->conn_state == MQTT_CONNECTED) { + /* Handle timeout for pending requests */ + mqtt_request_time_elapsed(&client->pend_req_queue, MQTT_CYCLIC_TIMER_INTERVAL); + + /* keep_alive > 0 means keep alive functionality shall be used */ + if (client->keep_alive > 0) { + + client->server_watchdog++; + /* If reception from server has been idle for 1.5*keep_alive time, server is considered unresponsive */ + if ((client->server_watchdog * MQTT_CYCLIC_TIMER_INTERVAL) > (client->keep_alive + client->keep_alive / 2)) { + LWIP_DEBUGF(MQTT_DEBUG_WARN, ("mqtt_cyclic_timer: Server incoming keep-alive timeout\n")); + mqtt_close(client, MQTT_CONNECT_TIMEOUT); + restart_timer = 0; + } + + /* If time for a keep alive message to be sent, transmission has been idle for keep_alive time */ + if ((client->cyclic_tick * MQTT_CYCLIC_TIMER_INTERVAL) >= client->keep_alive) { + LWIP_DEBUGF(MQTT_DEBUG_TRACE, ("mqtt_cyclic_timer: Sending keep-alive message to server\n")); + if (mqtt_output_check_space(&client->output, 0) != 0) { + mqtt_output_append_fixed_header(&client->output, MQTT_MSG_TYPE_PINGREQ, 0, 0, 0, 0); + client->cyclic_tick = 0; + } + } else { + client->cyclic_tick++; + } + } + } else { + LWIP_DEBUGF(MQTT_DEBUG_WARN, ("mqtt_cyclic_timer: Timer should not be running in state %d\n", client->conn_state)); + restart_timer = 0; + } + if (restart_timer) { + sys_timeout(MQTT_CYCLIC_TIMER_INTERVAL * 1000, mqtt_cyclic_timer, arg); + } +} + + +/** + * Send PUBACK, PUBREC or PUBREL response message + * @param client MQTT client + * @param msg PUBACK, PUBREC or PUBREL + * @param pkt_id Packet identifier + * @param qos QoS value + * @return ERR_OK if successful, ERR_MEM if out of memory + */ +static err_t +pub_ack_rec_rel_response(mqtt_client_t *client, u8_t msg, u16_t pkt_id, u8_t qos) +{ + err_t err = ERR_OK; + if (mqtt_output_check_space(&client->output, 2)) { + mqtt_output_append_fixed_header(&client->output, msg, 0, qos, 0, 2); + mqtt_output_append_u16(&client->output, pkt_id); + mqtt_output_send(&client->output, client->conn); + } else { + LWIP_DEBUGF(MQTT_DEBUG_TRACE, ("pub_ack_rec_rel_response: OOM creating response: %s with pkt_id: %d\n", + mqtt_msg_type_to_str(msg), pkt_id)); + err = ERR_MEM; + } + return err; +} + +/** + * Subscribe response from server + * @param r Matching request + * @param result Result code from server + */ +static void +mqtt_incomming_suback(struct mqtt_request_t *r, u8_t result) +{ + if (r->cb != NULL) { + r->cb(r->arg, result < 3 ? ERR_OK : ERR_ABRT); + } +} + + +/** + * Complete MQTT message received or buffer full + * @param client MQTT client + * @param fixed_hdr_idx header index + * @param length length received part + * @param remaining_length Remaining length of complete message + */ +static mqtt_connection_status_t +mqtt_message_received(mqtt_client_t *client, u8_t fixed_hdr_idx, u16_t length, u32_t remaining_length) +{ + mqtt_connection_status_t res = MQTT_CONNECT_ACCEPTED; + + u8_t *var_hdr_payload = client->rx_buffer + fixed_hdr_idx; + size_t var_hdr_payload_bufsize = sizeof(client->rx_buffer) - fixed_hdr_idx; + + /* Control packet type */ + u8_t pkt_type = MQTT_CTL_PACKET_TYPE(client->rx_buffer[0]); + u16_t pkt_id = 0; + + LWIP_ASSERT("client->msg_idx < MQTT_VAR_HEADER_BUFFER_LEN", client->msg_idx < MQTT_VAR_HEADER_BUFFER_LEN); + LWIP_ASSERT("fixed_hdr_idx <= client->msg_idx", fixed_hdr_idx <= client->msg_idx); + LWIP_ERROR("buffer length mismatch", fixed_hdr_idx + length <= MQTT_VAR_HEADER_BUFFER_LEN, + return MQTT_CONNECT_DISCONNECTED); + + if (pkt_type == MQTT_MSG_TYPE_CONNACK) { + if (client->conn_state == MQTT_CONNECTING) { + if (length < 2) { + LWIP_DEBUGF(MQTT_DEBUG_WARN,( "mqtt_message_received: Received short CONNACK message\n")); + goto out_disconnect; + } + /* Get result code from CONNACK */ + res = (mqtt_connection_status_t)var_hdr_payload[1]; + LWIP_DEBUGF(MQTT_DEBUG_TRACE, ("mqtt_message_received: Connect response code %d\n", res)); + if (res == MQTT_CONNECT_ACCEPTED) { + /* Reset cyclic_tick when changing to connected state */ + client->cyclic_tick = 0; + client->conn_state = MQTT_CONNECTED; + /* Notify upper layer */ + if (client->connect_cb != 0) { + client->connect_cb(client, client->connect_arg, res); + } + } + } else { + LWIP_DEBUGF(MQTT_DEBUG_WARN, ("mqtt_message_received: Received CONNACK in connected state\n")); + } + } else if (pkt_type == MQTT_MSG_TYPE_PINGRESP) { + LWIP_DEBUGF(MQTT_DEBUG_TRACE, ( "mqtt_message_received: Received PINGRESP from server\n")); + + } else if (pkt_type == MQTT_MSG_TYPE_PUBLISH) { + u16_t payload_offset = 0; + u16_t payload_length = length; + u8_t qos = MQTT_CTL_PACKET_QOS(client->rx_buffer[0]); + + if (client->msg_idx <= MQTT_VAR_HEADER_BUFFER_LEN) { + /* Should have topic and pkt id*/ + u8_t *topic; + u16_t after_topic; + u8_t bkp; + u16_t topic_len; + u16_t qos_len = (qos ? 2U : 0U); + if (length < 2 + qos_len) { + LWIP_DEBUGF(MQTT_DEBUG_WARN,( "mqtt_message_received: Received short PUBLISH packet\n")); + goto out_disconnect; + } + topic_len = var_hdr_payload[0]; + topic_len = (topic_len << 8) + (u16_t)(var_hdr_payload[1]); + if ((topic_len > length - (2 + qos_len)) || + (topic_len > var_hdr_payload_bufsize - (2 + qos_len))) { + LWIP_DEBUGF(MQTT_DEBUG_WARN,( "mqtt_message_received: Received short PUBLISH packet (topic)\n")); + goto out_disconnect; + } + + topic = var_hdr_payload + 2; + after_topic = 2 + topic_len; + /* Check buffer length, add one byte even for QoS 0 so that zero termination will fit */ + if ((after_topic + (qos ? 2U : 1U)) > var_hdr_payload_bufsize) { + LWIP_DEBUGF(MQTT_DEBUG_WARN, ("mqtt_message_received: Receive buffer can not fit topic + pkt_id\n")); + goto out_disconnect; + } + + /* id for QoS 1 and 2 */ + if (qos > 0) { + if (length < after_topic + 2U) { + LWIP_DEBUGF(MQTT_DEBUG_WARN,( "mqtt_message_received: Received short PUBLISH packet (after_topic)\n")); + goto out_disconnect; + } + client->inpub_pkt_id = ((u16_t)var_hdr_payload[after_topic] << 8) + (u16_t)var_hdr_payload[after_topic + 1]; + after_topic += 2; + } else { + client->inpub_pkt_id = 0; + } + /* Take backup of byte after topic */ + bkp = topic[topic_len]; + /* Zero terminate string */ + topic[topic_len] = 0; + /* Payload data remaining in receive buffer */ + payload_length = length - after_topic; + payload_offset = after_topic; + + LWIP_DEBUGF(MQTT_DEBUG_TRACE, ("mqtt_incomming_publish: Received message with QoS %d at topic: %s, payload length %"U32_F"\n", + qos, topic, remaining_length + payload_length)); + if (client->pub_cb != NULL) { + client->pub_cb(client->inpub_arg, (const char *)topic, remaining_length + payload_length); + } + /* Restore byte after topic */ + topic[topic_len] = bkp; + } + if (payload_length > 0 || remaining_length == 0) { + if (length < (size_t)(payload_offset + payload_length)) { + LWIP_DEBUGF(MQTT_DEBUG_WARN,( "mqtt_message_received: Received short packet (payload)\n")); + goto out_disconnect; + } + client->data_cb(client->inpub_arg, var_hdr_payload + payload_offset, payload_length, remaining_length == 0 ? MQTT_DATA_FLAG_LAST : 0); + /* Reply if QoS > 0 */ + if (remaining_length == 0 && qos > 0) { + /* Send PUBACK for QoS 1 or PUBREC for QoS 2 */ + u8_t resp_msg = (qos == 1) ? MQTT_MSG_TYPE_PUBACK : MQTT_MSG_TYPE_PUBREC; + LWIP_DEBUGF(MQTT_DEBUG_TRACE, ("mqtt_incomming_publish: Sending publish response: %s with pkt_id: %d\n", + mqtt_msg_type_to_str(resp_msg), client->inpub_pkt_id)); + pub_ack_rec_rel_response(client, resp_msg, client->inpub_pkt_id, 0); + } + } + } else { + /* Get packet identifier */ + pkt_id = (u16_t)var_hdr_payload[0] << 8; + pkt_id |= (u16_t)var_hdr_payload[1]; + if (pkt_id == 0) { + LWIP_DEBUGF(MQTT_DEBUG_WARN, ("mqtt_message_received: Got message with illegal packet identifier: 0\n")); + goto out_disconnect; + } + if (pkt_type == MQTT_MSG_TYPE_PUBREC) { + LWIP_DEBUGF(MQTT_DEBUG_TRACE, ("mqtt_message_received: PUBREC, sending PUBREL with pkt_id: %d\n", pkt_id)); + pub_ack_rec_rel_response(client, MQTT_MSG_TYPE_PUBREL, pkt_id, 1); + + } else if (pkt_type == MQTT_MSG_TYPE_PUBREL) { + LWIP_DEBUGF(MQTT_DEBUG_TRACE, ("mqtt_message_received: PUBREL, sending PUBCOMP response with pkt_id: %d\n", pkt_id)); + pub_ack_rec_rel_response(client, MQTT_MSG_TYPE_PUBCOMP, pkt_id, 0); + + } else if (pkt_type == MQTT_MSG_TYPE_SUBACK || pkt_type == MQTT_MSG_TYPE_UNSUBACK || + pkt_type == MQTT_MSG_TYPE_PUBCOMP || pkt_type == MQTT_MSG_TYPE_PUBACK) { + struct mqtt_request_t *r = mqtt_take_request(&client->pend_req_queue, pkt_id); + if (r != NULL) { + LWIP_DEBUGF(MQTT_DEBUG_TRACE, ("mqtt_message_received: %s response with id %d\n", mqtt_msg_type_to_str(pkt_type), pkt_id)); + if (pkt_type == MQTT_MSG_TYPE_SUBACK) { + if (length < 3) { + LWIP_DEBUGF(MQTT_DEBUG_WARN, ("mqtt_message_received: To small SUBACK packet\n")); + goto out_disconnect; + } else { + mqtt_incomming_suback(r, var_hdr_payload[2]); + } + } else if (r->cb != NULL) { + r->cb(r->arg, ERR_OK); + } + mqtt_delete_request(r); + } else { + LWIP_DEBUGF(MQTT_DEBUG_WARN, ( "mqtt_message_received: Received %s reply, with wrong pkt_id: %d\n", mqtt_msg_type_to_str(pkt_type), pkt_id)); + } + } else { + LWIP_DEBUGF(MQTT_DEBUG_WARN, ( "mqtt_message_received: Received unknown message type: %d\n", pkt_type)); + goto out_disconnect; + } + } + return res; +out_disconnect: + return MQTT_CONNECT_DISCONNECTED; +} + + +/** + * MQTT incoming message parser + * @param client MQTT client + * @param p PBUF chain of received data + * @return Connection status + */ +static mqtt_connection_status_t +mqtt_parse_incoming(mqtt_client_t *client, struct pbuf *p) +{ + u16_t in_offset = 0; + u32_t msg_rem_len = 0; + u8_t fixed_hdr_idx = 0; + u8_t b = 0; + + while (p->tot_len > in_offset) { + /* We ALWAYS parse the header here first. Even if the header was not + included in this segment, we re-parse it here by buffering it in + client->rx_buffer. client->msg_idx keeps track of this. */ + if ((fixed_hdr_idx < 2) || ((b & 0x80) != 0)) { + + if (fixed_hdr_idx < client->msg_idx) { + /* parse header from old pbuf (buffered in client->rx_buffer) */ + b = client->rx_buffer[fixed_hdr_idx]; + } else { + /* parse header from this pbuf and save it in client->rx_buffer in case + it comes in segmented */ + b = pbuf_get_at(p, in_offset++); + client->rx_buffer[client->msg_idx++] = b; + } + fixed_hdr_idx++; + + if (fixed_hdr_idx >= 2) { + /* fixed header contains at least 2 bytes but can contain more, depending on + 'remaining length'. All bytes but the last of this have 0x80 set to + indicate more bytes are coming. */ + msg_rem_len |= (u32_t)(b & 0x7f) << ((fixed_hdr_idx - 2) * 7); + if ((b & 0x80) == 0) { + /* fixed header is done */ + LWIP_DEBUGF(MQTT_DEBUG_TRACE, ("mqtt_parse_incoming: Remaining length after fixed header: %"U32_F"\n", msg_rem_len)); + if (msg_rem_len == 0) { + /* Complete message with no extra headers of payload received */ + mqtt_message_received(client, fixed_hdr_idx, 0, 0); + client->msg_idx = 0; + fixed_hdr_idx = 0; + } else { + /* Bytes remaining in message (changes remaining length if this is + not the first segment of this message) */ + msg_rem_len = (msg_rem_len + fixed_hdr_idx) - client->msg_idx; + } + } + } + } else { + /* Fixed header has been parsed, parse variable header */ + u16_t cpy_len, cpy_start, buffer_space; + + cpy_start = (client->msg_idx - fixed_hdr_idx) % (MQTT_VAR_HEADER_BUFFER_LEN - fixed_hdr_idx) + fixed_hdr_idx; + + /* Allow to copy the lesser one of available length in input data or bytes remaining in message */ + cpy_len = (u16_t)LWIP_MIN((u16_t)(p->tot_len - in_offset), msg_rem_len); + + /* Limit to available space in buffer */ + buffer_space = MQTT_VAR_HEADER_BUFFER_LEN - cpy_start; + if (cpy_len > buffer_space) { + cpy_len = buffer_space; + } + pbuf_copy_partial(p, client->rx_buffer + cpy_start, cpy_len, in_offset); + + /* Advance get and put indexes */ + client->msg_idx += cpy_len; + in_offset += cpy_len; + msg_rem_len -= cpy_len; + + LWIP_DEBUGF(MQTT_DEBUG_TRACE, ("mqtt_parse_incoming: msg_idx: %"U32_F", cpy_len: %"U16_F", remaining %"U32_F"\n", client->msg_idx, cpy_len, msg_rem_len)); + if ((msg_rem_len == 0) || (cpy_len == buffer_space)) { + /* Whole message received or buffer is full */ + mqtt_connection_status_t res = mqtt_message_received(client, fixed_hdr_idx, (cpy_start + cpy_len) - fixed_hdr_idx, msg_rem_len); + if (res != MQTT_CONNECT_ACCEPTED) { + return res; + } + if (msg_rem_len == 0) { + /* Reset parser state */ + client->msg_idx = 0; + /* msg_tot_len = 0; */ + fixed_hdr_idx = 0; + } + } + } + } + return MQTT_CONNECT_ACCEPTED; +} + + +/** + * TCP received callback function. @see tcp_recv_fn + * @param arg MQTT client + * @param p PBUF chain of received data + * @param err Passed as return value if not ERR_OK + * @return ERR_OK or err passed into callback + */ +static err_t +mqtt_tcp_recv_cb(void *arg, struct altcp_pcb *pcb, struct pbuf *p, err_t err) +{ + mqtt_client_t *client = (mqtt_client_t *)arg; + LWIP_ASSERT("mqtt_tcp_recv_cb: client != NULL", client != NULL); + LWIP_ASSERT("mqtt_tcp_recv_cb: client->conn == pcb", client->conn == pcb); + + if (p == NULL) { + LWIP_DEBUGF(MQTT_DEBUG_TRACE, ("mqtt_tcp_recv_cb: Recv pbuf=NULL, remote has closed connection\n")); + mqtt_close(client, MQTT_CONNECT_DISCONNECTED); + } else { + mqtt_connection_status_t res; + if (err != ERR_OK) { + LWIP_DEBUGF(MQTT_DEBUG_WARN, ("mqtt_tcp_recv_cb: Recv err=%d\n", err)); + pbuf_free(p); + return err; + } + + /* Tell remote that data has been received */ + altcp_recved(pcb, p->tot_len); + res = mqtt_parse_incoming(client, p); + pbuf_free(p); + + if (res != MQTT_CONNECT_ACCEPTED) { + mqtt_close(client, res); + } + /* If keep alive functionality is used */ + if (client->keep_alive != 0) { + /* Reset server alive watchdog */ + client->server_watchdog = 0; + } + + } + return ERR_OK; +} + + +/** + * TCP data sent callback function. @see tcp_sent_fn + * @param arg MQTT client + * @param tpcb TCP connection handle + * @param len Number of bytes sent + * @return ERR_OK + */ +static err_t +mqtt_tcp_sent_cb(void *arg, struct altcp_pcb *tpcb, u16_t len) +{ + mqtt_client_t *client = (mqtt_client_t *)arg; + + LWIP_UNUSED_ARG(tpcb); + LWIP_UNUSED_ARG(len); + + if (client->conn_state == MQTT_CONNECTED) { + struct mqtt_request_t *r; + + /* Reset keep-alive send timer and server watchdog */ + client->cyclic_tick = 0; + client->server_watchdog = 0; + /* QoS 0 publish has no response from server, so call its callbacks here */ + while ((r = mqtt_take_request(&client->pend_req_queue, 0)) != NULL) { + LWIP_DEBUGF(MQTT_DEBUG_TRACE, ("mqtt_tcp_sent_cb: Calling QoS 0 publish complete callback\n")); + if (r->cb != NULL) { + r->cb(r->arg, ERR_OK); + } + mqtt_delete_request(r); + } + /* Try send any remaining buffers from output queue */ + mqtt_output_send(&client->output, client->conn); + } + return ERR_OK; +} + +/** + * TCP error callback function. @see tcp_err_fn + * @param arg MQTT client + * @param err Error encountered + */ +static void +mqtt_tcp_err_cb(void *arg, err_t err) +{ + mqtt_client_t *client = (mqtt_client_t *)arg; + LWIP_UNUSED_ARG(err); /* only used for debug output */ + LWIP_DEBUGF(MQTT_DEBUG_TRACE, ("mqtt_tcp_err_cb: TCP error callback: error %d, arg: %p\n", err, arg)); + LWIP_ASSERT("mqtt_tcp_err_cb: client != NULL", client != NULL); + /* Set conn to null before calling close as pcb is already deallocated*/ + client->conn = 0; + mqtt_close(client, MQTT_CONNECT_DISCONNECTED); +} + +/** + * TCP poll callback function. @see tcp_poll_fn + * @param arg MQTT client + * @param tpcb TCP connection handle + * @return err ERR_OK + */ +static err_t +mqtt_tcp_poll_cb(void *arg, struct altcp_pcb *tpcb) +{ + mqtt_client_t *client = (mqtt_client_t *)arg; + if (client->conn_state == MQTT_CONNECTED) { + /* Try send any remaining buffers from output queue */ + mqtt_output_send(&client->output, tpcb); + } + return ERR_OK; +} + +/** + * TCP connect callback function. @see tcp_connected_fn + * @param arg MQTT client + * @param err Always ERR_OK, mqtt_tcp_err_cb is called in case of error + * @return ERR_OK + */ +static err_t +mqtt_tcp_connect_cb(void *arg, struct altcp_pcb *tpcb, err_t err) +{ + mqtt_client_t *client = (mqtt_client_t *)arg; + + if (err != ERR_OK) { + LWIP_DEBUGF(MQTT_DEBUG_WARN, ("mqtt_tcp_connect_cb: TCP connect error %d\n", err)); + return err; + } + + /* Initiate receiver state */ + client->msg_idx = 0; + + /* Setup TCP callbacks */ + altcp_recv(tpcb, mqtt_tcp_recv_cb); + altcp_sent(tpcb, mqtt_tcp_sent_cb); + altcp_poll(tpcb, mqtt_tcp_poll_cb, 2); + + LWIP_DEBUGF(MQTT_DEBUG_TRACE, ("mqtt_tcp_connect_cb: TCP connection established to server\n")); + /* Enter MQTT connect state */ + client->conn_state = MQTT_CONNECTING; + + /* Start cyclic timer */ + sys_timeout(MQTT_CYCLIC_TIMER_INTERVAL * 1000, mqtt_cyclic_timer, client); + client->cyclic_tick = 0; + + /* Start transmission from output queue, connect message is the first one out*/ + mqtt_output_send(&client->output, client->conn); + + return ERR_OK; +} + + + +/*---------------------------------------------------------------------------------------------------- */ +/* Public API */ + + +/** + * @ingroup mqtt + * MQTT publish function. + * @param client MQTT client + * @param topic Publish topic string + * @param payload Data to publish (NULL is allowed) + * @param payload_length Length of payload (0 is allowed) + * @param qos Quality of service, 0 1 or 2 + * @param retain MQTT retain flag + * @param cb Callback to call when publish is complete or has timed out + * @param arg User supplied argument to publish callback + * @return ERR_OK if successful + * ERR_CONN if client is disconnected + * ERR_MEM if short on memory + */ +err_t +mqtt_publish(mqtt_client_t *client, const char *topic, const void *payload, u16_t payload_length, u8_t qos, u8_t retain, + mqtt_request_cb_t cb, void *arg) +{ + struct mqtt_request_t *r; + u16_t pkt_id; + size_t topic_strlen; + size_t total_len; + u16_t topic_len; + u16_t remaining_length; + + LWIP_ASSERT_CORE_LOCKED(); + LWIP_ASSERT("mqtt_publish: client != NULL", client); + LWIP_ASSERT("mqtt_publish: topic != NULL", topic); + LWIP_ERROR("mqtt_publish: TCP disconnected", (client->conn_state != TCP_DISCONNECTED), return ERR_CONN); + + topic_strlen = strlen(topic); + LWIP_ERROR("mqtt_publish: topic length overflow", (topic_strlen <= (0xFFFF - 2)), return ERR_ARG); + topic_len = (u16_t)topic_strlen; + total_len = 2 + topic_len + payload_length; + + if (qos > 0) { + total_len += 2; + /* Generate pkt_id id for QoS1 and 2 */ + pkt_id = msg_generate_packet_id(client); + } else { + /* Use reserved value pkt_id 0 for QoS 0 in request handle */ + pkt_id = 0; + } + LWIP_ERROR("mqtt_publish: total length overflow", (total_len <= 0xFFFF), return ERR_ARG); + remaining_length = (u16_t)total_len; + + LWIP_DEBUGF(MQTT_DEBUG_TRACE, ("mqtt_publish: Publish with payload length %d to topic \"%s\"\n", payload_length, topic)); + + r = mqtt_create_request(client->req_list, LWIP_ARRAYSIZE(client->req_list), pkt_id, cb, arg); + if (r == NULL) { + return ERR_MEM; + } + + if (mqtt_output_check_space(&client->output, remaining_length) == 0) { + mqtt_delete_request(r); + return ERR_MEM; + } + /* Append fixed header */ + mqtt_output_append_fixed_header(&client->output, MQTT_MSG_TYPE_PUBLISH, 0, qos, retain, remaining_length); + + /* Append Topic */ + mqtt_output_append_string(&client->output, topic, topic_len); + + /* Append packet if for QoS 1 and 2*/ + if (qos > 0) { + mqtt_output_append_u16(&client->output, pkt_id); + } + + /* Append optional publish payload */ + if ((payload != NULL) && (payload_length > 0)) { + mqtt_output_append_buf(&client->output, payload, payload_length); + } + + mqtt_append_request(&client->pend_req_queue, r); + mqtt_output_send(&client->output, client->conn); + return ERR_OK; +} + + +/** + * @ingroup mqtt + * MQTT subscribe/unsubscribe function. + * @param client MQTT client + * @param topic topic to subscribe to + * @param qos Quality of service, 0 1 or 2 (only used for subscribe) + * @param cb Callback to call when subscribe/unsubscribe reponse is received + * @param arg User supplied argument to publish callback + * @param sub 1 for subscribe, 0 for unsubscribe + * @return ERR_OK if successful, @see err_t enum for other results + */ +err_t +mqtt_sub_unsub(mqtt_client_t *client, const char *topic, u8_t qos, mqtt_request_cb_t cb, void *arg, u8_t sub) +{ + size_t topic_strlen; + size_t total_len; + u16_t topic_len; + u16_t remaining_length; + u16_t pkt_id; + struct mqtt_request_t *r; + + LWIP_ASSERT_CORE_LOCKED(); + LWIP_ASSERT("mqtt_sub_unsub: client != NULL", client); + LWIP_ASSERT("mqtt_sub_unsub: topic != NULL", topic); + + topic_strlen = strlen(topic); + LWIP_ERROR("mqtt_sub_unsub: topic length overflow", (topic_strlen <= (0xFFFF - 2)), return ERR_ARG); + topic_len = (u16_t)topic_strlen; + /* Topic string, pkt_id, qos for subscribe */ + total_len = topic_len + 2 + 2 + (sub != 0); + LWIP_ERROR("mqtt_sub_unsub: total length overflow", (total_len <= 0xFFFF), return ERR_ARG); + remaining_length = (u16_t)total_len; + + LWIP_ASSERT("mqtt_sub_unsub: qos < 3", qos < 3); + if (client->conn_state == TCP_DISCONNECTED) { + LWIP_DEBUGF(MQTT_DEBUG_WARN, ("mqtt_sub_unsub: Can not (un)subscribe in disconnected state\n")); + return ERR_CONN; + } + + pkt_id = msg_generate_packet_id(client); + r = mqtt_create_request(client->req_list, LWIP_ARRAYSIZE(client->req_list), pkt_id, cb, arg); + if (r == NULL) { + return ERR_MEM; + } + + if (mqtt_output_check_space(&client->output, remaining_length) == 0) { + mqtt_delete_request(r); + return ERR_MEM; + } + + LWIP_DEBUGF(MQTT_DEBUG_TRACE, ("mqtt_sub_unsub: Client (un)subscribe to topic \"%s\", id: %d\n", topic, pkt_id)); + + mqtt_output_append_fixed_header(&client->output, sub ? MQTT_MSG_TYPE_SUBSCRIBE : MQTT_MSG_TYPE_UNSUBSCRIBE, 0, 1, 0, remaining_length); + /* Packet id */ + mqtt_output_append_u16(&client->output, pkt_id); + /* Topic */ + mqtt_output_append_string(&client->output, topic, topic_len); + /* QoS */ + if (sub != 0) { + mqtt_output_append_u8(&client->output, LWIP_MIN(qos, 2)); + } + + mqtt_append_request(&client->pend_req_queue, r); + mqtt_output_send(&client->output, client->conn); + return ERR_OK; +} + + +/** + * @ingroup mqtt + * Set callback to handle incoming publish requests from server + * @param client MQTT client + * @param pub_cb Callback invoked when publish starts, contain topic and total length of payload + * @param data_cb Callback for each fragment of payload that arrives + * @param arg User supplied argument to both callbacks + */ +void +mqtt_set_inpub_callback(mqtt_client_t *client, mqtt_incoming_publish_cb_t pub_cb, + mqtt_incoming_data_cb_t data_cb, void *arg) +{ + LWIP_ASSERT_CORE_LOCKED(); + LWIP_ASSERT("mqtt_set_inpub_callback: client != NULL", client != NULL); + client->data_cb = data_cb; + client->pub_cb = pub_cb; + client->inpub_arg = arg; +} + +/** + * @ingroup mqtt + * Create a new MQTT client instance + * @return Pointer to instance on success, NULL otherwise + */ +mqtt_client_t * +mqtt_client_new(void) +{ + LWIP_ASSERT_CORE_LOCKED(); + return (mqtt_client_t *)mem_calloc(1, sizeof(mqtt_client_t)); +} + +/** + * @ingroup mqtt + * Free MQTT client instance + * @param client Pointer to instance to be freed + */ +void +mqtt_client_free(mqtt_client_t *client) +{ + mem_free(client); +} + +/** + * @ingroup mqtt + * Connect to MQTT server + * @param client MQTT client + * @param ip_addr Server IP + * @param port Server port + * @param cb Connection state change callback + * @param arg User supplied argument to connection callback + * @param client_info Client identification and connection options + * @return ERR_OK if successful, @see err_t enum for other results + */ +err_t +mqtt_client_connect(mqtt_client_t *client, const ip_addr_t *ip_addr, u16_t port, mqtt_connection_cb_t cb, void *arg, + const struct mqtt_connect_client_info_t *client_info) +{ + err_t err; + size_t len; + u16_t client_id_length; + /* Length is the sum of 2+"MQTT", protocol level, flags and keep alive */ + u16_t remaining_length = 2 + 4 + 1 + 1 + 2; + u8_t flags = 0, will_topic_len = 0, will_msg_len = 0; + u16_t client_user_len = 0, client_pass_len = 0; + + LWIP_ASSERT_CORE_LOCKED(); + LWIP_ASSERT("mqtt_client_connect: client != NULL", client != NULL); + LWIP_ASSERT("mqtt_client_connect: ip_addr != NULL", ip_addr != NULL); + LWIP_ASSERT("mqtt_client_connect: client_info != NULL", client_info != NULL); + LWIP_ASSERT("mqtt_client_connect: client_info->client_id != NULL", client_info->client_id != NULL); + + if (client->conn_state != TCP_DISCONNECTED) { + LWIP_DEBUGF(MQTT_DEBUG_WARN, ("mqtt_client_connect: Already connected\n")); + return ERR_ISCONN; + } + + /* Wipe clean */ + memset(client, 0, sizeof(mqtt_client_t)); + client->connect_arg = arg; + client->connect_cb = cb; + client->keep_alive = client_info->keep_alive; + mqtt_init_requests(client->req_list, LWIP_ARRAYSIZE(client->req_list)); + + /* Build connect message */ + if (client_info->will_topic != NULL && client_info->will_msg != NULL) { + flags |= MQTT_CONNECT_FLAG_WILL; + flags |= (client_info->will_qos & 3) << 3; + if (client_info->will_retain) { + flags |= MQTT_CONNECT_FLAG_WILL_RETAIN; + } + len = strlen(client_info->will_topic); + LWIP_ERROR("mqtt_client_connect: client_info->will_topic length overflow", len <= 0xFF, return ERR_VAL); + LWIP_ERROR("mqtt_client_connect: client_info->will_topic length must be > 0", len > 0, return ERR_VAL); + will_topic_len = (u8_t)len; + len = strlen(client_info->will_msg); + LWIP_ERROR("mqtt_client_connect: client_info->will_msg length overflow", len <= 0xFF, return ERR_VAL); + will_msg_len = (u8_t)len; + len = remaining_length + 2 + will_topic_len + 2 + will_msg_len; + LWIP_ERROR("mqtt_client_connect: remaining_length overflow", len <= 0xFFFF, return ERR_VAL); + remaining_length = (u16_t)len; + } + if (client_info->client_user != NULL) { + flags |= MQTT_CONNECT_FLAG_USERNAME; + len = strlen(client_info->client_user); + LWIP_ERROR("mqtt_client_connect: client_info->client_user length overflow", len <= 0xFFFF, return ERR_VAL); + LWIP_ERROR("mqtt_client_connect: client_info->client_user length must be > 0", len > 0, return ERR_VAL); + client_user_len = (u16_t)len; + len = remaining_length + 2 + client_user_len; + LWIP_ERROR("mqtt_client_connect: remaining_length overflow", len <= 0xFFFF, return ERR_VAL); + remaining_length = (u16_t)len; + } + if (client_info->client_pass != NULL) { + flags |= MQTT_CONNECT_FLAG_PASSWORD; + len = strlen(client_info->client_pass); + LWIP_ERROR("mqtt_client_connect: client_info->client_pass length overflow", len <= 0xFFFF, return ERR_VAL); + LWIP_ERROR("mqtt_client_connect: client_info->client_pass length must be > 0", len > 0, return ERR_VAL); + client_pass_len = (u16_t)len; + len = remaining_length + 2 + client_pass_len; + LWIP_ERROR("mqtt_client_connect: remaining_length overflow", len <= 0xFFFF, return ERR_VAL); + remaining_length = (u16_t)len; + } + + /* Don't complicate things, always connect using clean session */ + flags |= MQTT_CONNECT_FLAG_CLEAN_SESSION; + + len = strlen(client_info->client_id); + LWIP_ERROR("mqtt_client_connect: client_info->client_id length overflow", len <= 0xFFFF, return ERR_VAL); + client_id_length = (u16_t)len; + len = remaining_length + 2 + client_id_length; + LWIP_ERROR("mqtt_client_connect: remaining_length overflow", len <= 0xFFFF, return ERR_VAL); + remaining_length = (u16_t)len; + + if (mqtt_output_check_space(&client->output, remaining_length) == 0) { + return ERR_MEM; + } + +#if LWIP_ALTCP && LWIP_ALTCP_TLS + if (client_info->tls_config) { + client->conn = altcp_tls_new(client_info->tls_config, IP_GET_TYPE(ip_addr)); + } else +#endif + { + client->conn = altcp_tcp_new_ip_type(IP_GET_TYPE(ip_addr)); + } + if (client->conn == NULL) { + return ERR_MEM; + } + + /* Set arg pointer for callbacks */ + altcp_arg(client->conn, client); + /* Any local address, pick random local port number */ + err = altcp_bind(client->conn, IP_ADDR_ANY, 0); + if (err != ERR_OK) { + LWIP_DEBUGF(MQTT_DEBUG_WARN, ("mqtt_client_connect: Error binding to local ip/port, %d\n", err)); + goto tcp_fail; + } + LWIP_DEBUGF(MQTT_DEBUG_TRACE, ("mqtt_client_connect: Connecting to host: %s at port:%"U16_F"\n", ipaddr_ntoa(ip_addr), port)); + + /* Connect to server */ + err = altcp_connect(client->conn, ip_addr, port, mqtt_tcp_connect_cb); + if (err != ERR_OK) { + LWIP_DEBUGF(MQTT_DEBUG_TRACE, ("mqtt_client_connect: Error connecting to remote ip/port, %d\n", err)); + goto tcp_fail; + } + /* Set error callback */ + altcp_err(client->conn, mqtt_tcp_err_cb); + client->conn_state = TCP_CONNECTING; + + /* Append fixed header */ + mqtt_output_append_fixed_header(&client->output, MQTT_MSG_TYPE_CONNECT, 0, 0, 0, remaining_length); + /* Append Protocol string */ + mqtt_output_append_string(&client->output, "MQTT", 4); + /* Append Protocol level */ + mqtt_output_append_u8(&client->output, 4); + /* Append connect flags */ + mqtt_output_append_u8(&client->output, flags); + /* Append keep-alive */ + mqtt_output_append_u16(&client->output, client_info->keep_alive); + /* Append client id */ + mqtt_output_append_string(&client->output, client_info->client_id, client_id_length); + /* Append will message if used */ + if ((flags & MQTT_CONNECT_FLAG_WILL) != 0) { + mqtt_output_append_string(&client->output, client_info->will_topic, will_topic_len); + mqtt_output_append_string(&client->output, client_info->will_msg, will_msg_len); + } + /* Append user name if given */ + if ((flags & MQTT_CONNECT_FLAG_USERNAME) != 0) { + mqtt_output_append_string(&client->output, client_info->client_user, client_user_len); + } + /* Append password if given */ + if ((flags & MQTT_CONNECT_FLAG_PASSWORD) != 0) { + mqtt_output_append_string(&client->output, client_info->client_pass, client_pass_len); + } + return ERR_OK; + +tcp_fail: + altcp_abort(client->conn); + client->conn = NULL; + return err; +} + + +/** + * @ingroup mqtt + * Disconnect from MQTT server + * @param client MQTT client + */ +void +mqtt_disconnect(mqtt_client_t *client) +{ + LWIP_ASSERT_CORE_LOCKED(); + LWIP_ASSERT("mqtt_disconnect: client != NULL", client); + /* If connection in not already closed */ + if (client->conn_state != TCP_DISCONNECTED) { + /* Set conn_state before calling mqtt_close to prevent callback from being called */ + client->conn_state = TCP_DISCONNECTED; + mqtt_close(client, (mqtt_connection_status_t)0); + } +} + +/** + * @ingroup mqtt + * Check connection with server + * @param client MQTT client + * @return 1 if connected to server, 0 otherwise + */ +u8_t +mqtt_client_is_connected(mqtt_client_t *client) +{ + LWIP_ASSERT_CORE_LOCKED(); + LWIP_ASSERT("mqtt_client_is_connected: client != NULL", client); + return client->conn_state == MQTT_CONNECTED; +} + +#endif /* LWIP_TCP && LWIP_CALLBACK_API */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/altcp.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/altcp.c new file mode 100644 index 0000000000000000000000000000000000000000..d46d6cdb1d5de468ebf209b57e7837211b6efd26 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/altcp.c @@ -0,0 +1,681 @@ +/** + * @file + * @defgroup altcp Application layered TCP Functions + * @ingroup altcp_api + * + * This file contains the common functions for altcp to work. + * For more details see @ref altcp_api. + */ + +/** + * @defgroup altcp_api Application layered TCP Introduction + * @ingroup callbackstyle_api + * + * Overview + * -------- + * altcp (application layered TCP connection API; to be used from TCPIP thread) + * is an abstraction layer that prevents applications linking hard against the + * @ref tcp.h functions while providing the same functionality. It is used to + * e.g. add SSL/TLS (see LWIP_ALTCP_TLS) or proxy-connect support to an application + * written for the tcp callback API without that application knowing the + * protocol details. + * + * * This interface mimics the tcp callback API to the application while preventing + * direct linking (much like virtual functions). + * * This way, an application can make use of other application layer protocols + * on top of TCP without knowing the details (e.g. TLS, proxy connection). + * * This is achieved by simply including "lwip/altcp.h" instead of "lwip/tcp.h", + * replacing "struct tcp_pcb" with "struct altcp_pcb" and prefixing all functions + * with "altcp_" instead of "tcp_". + * + * With altcp support disabled (LWIP_ALTCP==0), applications written against the + * altcp API can still be compiled but are directly linked against the tcp.h + * callback API and then cannot use layered protocols. To minimize code changes + * in this case, the use of altcp_allocators is strongly suggested. + * + * Usage + * ----- + * To make use of this API from an existing tcp raw API application: + * * Include "lwip/altcp.h" instead of "lwip/tcp.h" + * * Replace "struct tcp_pcb" with "struct altcp_pcb" + * * Prefix all called tcp API functions with "altcp_" instead of "tcp_" to link + * against the altcp functions + * * @ref altcp_new (and @ref altcp_new_ip_type/@ref altcp_new_ip6) take + * an @ref altcp_allocator_t as an argument, whereas the original tcp API + * functions take no arguments. + * * An @ref altcp_allocator_t allocator is an object that holds a pointer to an + * allocator object and a corresponding state (e.g. for TLS, the corresponding + * state may hold certificates or keys). This way, the application does not + * even need to know if it uses TLS or pure TCP, this is handled at runtime + * by passing a specific allocator. + * * An application can alternatively bind hard to the altcp_tls API by calling + * @ref altcp_tls_new or @ref altcp_tls_wrap. + * * The TLS layer is not directly implemented by lwIP, but a port to mbedTLS is + * provided. + * * Another altcp layer is proxy-connect to use TLS behind a HTTP proxy (see + * @ref altcp_proxyconnect.h) + * + * altcp_allocator_t + * ----------------- + * An altcp allocator is created by the application by combining an allocator + * callback function and a corresponding state, e.g.:\code{.c} + * static const unsigned char cert[] = {0x2D, ... (see mbedTLS doc for how to create this)}; + * struct altcp_tls_config * conf = altcp_tls_create_config_client(cert, sizeof(cert)); + * altcp_allocator_t tls_allocator = { + * altcp_tls_alloc, conf + * }; + * \endcode + * + * + * struct altcp_tls_config + * ----------------------- + * The struct altcp_tls_config holds state that is needed to create new TLS client + * or server connections (e.g. certificates and private keys). + * + * It is not defined by lwIP itself but by the TLS port (e.g. altcp_tls to mbedTLS + * adaption). However, the parameters used to create it are defined in @ref + * altcp_tls.h (see @ref altcp_tls_create_config_server_privkey_cert for servers + * and @ref altcp_tls_create_config_client/@ref altcp_tls_create_config_client_2wayauth + * for clients). + * + * For mbedTLS, ensure that certificates can be parsed by 'mbedtls_x509_crt_parse()' and + * private keys can be parsed by 'mbedtls_pk_parse_key()'. + */ + +/* + * Copyright (c) 2017 Simon Goldschmidt + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Simon Goldschmidt + * + */ + +#include "lwip/opt.h" + +#if LWIP_ALTCP /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/altcp.h" +#include "lwip/priv/altcp_priv.h" +#include "lwip/altcp_tcp.h" +#include "lwip/tcp.h" +#include "lwip/mem.h" + +#include + +extern const struct altcp_functions altcp_tcp_functions; + +/** + * For altcp layer implementations only: allocate a new struct altcp_pcb from the pool + * and zero the memory + */ +struct altcp_pcb * +altcp_alloc(void) +{ + struct altcp_pcb *ret = (struct altcp_pcb *)memp_malloc(MEMP_ALTCP_PCB); + if (ret != NULL) { + memset(ret, 0, sizeof(struct altcp_pcb)); + } + return ret; +} + +/** + * For altcp layer implementations only: return a struct altcp_pcb to the pool + */ +void +altcp_free(struct altcp_pcb *conn) +{ + if (conn) { + if (conn->fns && conn->fns->dealloc) { + conn->fns->dealloc(conn); + } + memp_free(MEMP_ALTCP_PCB, conn); + } +} + +/** + * @ingroup altcp + * altcp_new_ip6: @ref altcp_new for IPv6 + */ +struct altcp_pcb * +altcp_new_ip6(altcp_allocator_t *allocator) +{ + return altcp_new_ip_type(allocator, IPADDR_TYPE_V6); +} + +/** + * @ingroup altcp + * altcp_new: @ref altcp_new for IPv4 + */ +struct altcp_pcb * +altcp_new(altcp_allocator_t *allocator) +{ + return altcp_new_ip_type(allocator, IPADDR_TYPE_V4); +} + +/** + * @ingroup altcp + * altcp_new_ip_type: called by applications to allocate a new pcb with the help of an + * allocator function. + * + * @param allocator allocator function and argument + * @param ip_type IP version of the pcb (@ref lwip_ip_addr_type) + * @return a new altcp_pcb or NULL on error + */ +struct altcp_pcb * +altcp_new_ip_type(altcp_allocator_t *allocator, u8_t ip_type) +{ + struct altcp_pcb *conn; + if (allocator == NULL) { + /* no allocator given, create a simple TCP connection */ + return altcp_tcp_new_ip_type(ip_type); + } + if (allocator->alloc == NULL) { + /* illegal allocator */ + return NULL; + } + conn = allocator->alloc(allocator->arg, ip_type); + if (conn == NULL) { + /* allocation failed */ + return NULL; + } + return conn; +} + +/** + * @ingroup altcp + * @see tcp_arg() + */ +void +altcp_arg(struct altcp_pcb *conn, void *arg) +{ + if (conn) { + conn->arg = arg; + } +} + +/** + * @ingroup altcp + * @see tcp_accept() + */ +void +altcp_accept(struct altcp_pcb *conn, altcp_accept_fn accept) +{ + if (conn != NULL) { + conn->accept = accept; + } +} + +/** + * @ingroup altcp + * @see tcp_recv() + */ +void +altcp_recv(struct altcp_pcb *conn, altcp_recv_fn recv) +{ + if (conn) { + conn->recv = recv; + } +} + +/** + * @ingroup altcp + * @see tcp_sent() + */ +void +altcp_sent(struct altcp_pcb *conn, altcp_sent_fn sent) +{ + if (conn) { + conn->sent = sent; + } +} + +/** + * @ingroup altcp + * @see tcp_poll() + */ +void +altcp_poll(struct altcp_pcb *conn, altcp_poll_fn poll, u8_t interval) +{ + if (conn) { + conn->poll = poll; + conn->pollinterval = interval; + if (conn->fns && conn->fns->set_poll) { + conn->fns->set_poll(conn, interval); + } + } +} + +/** + * @ingroup altcp + * @see tcp_err() + */ +void +altcp_err(struct altcp_pcb *conn, altcp_err_fn err) +{ + if (conn) { + conn->err = err; + } +} + +/* Generic functions calling the "virtual" ones */ + +/** + * @ingroup altcp + * @see tcp_recved() + */ +void +altcp_recved(struct altcp_pcb *conn, u16_t len) +{ + if (conn && conn->fns && conn->fns->recved) { + conn->fns->recved(conn, len); + } +} + +/** + * @ingroup altcp + * @see tcp_bind() + */ +err_t +altcp_bind(struct altcp_pcb *conn, const ip_addr_t *ipaddr, u16_t port) +{ + if (conn && conn->fns && conn->fns->bind) { + return conn->fns->bind(conn, ipaddr, port); + } + return ERR_VAL; +} + +/** + * @ingroup altcp + * @see tcp_connect() + */ +err_t +altcp_connect(struct altcp_pcb *conn, const ip_addr_t *ipaddr, u16_t port, altcp_connected_fn connected) +{ + if (conn && conn->fns && conn->fns->connect) { + return conn->fns->connect(conn, ipaddr, port, connected); + } + return ERR_VAL; +} + +/** + * @ingroup altcp + * @see tcp_listen_with_backlog_and_err() + */ +struct altcp_pcb * +altcp_listen_with_backlog_and_err(struct altcp_pcb *conn, u8_t backlog, err_t *err) +{ + if (conn && conn->fns && conn->fns->listen) { + return conn->fns->listen(conn, backlog, err); + } + return NULL; +} + +/** + * @ingroup altcp + * @see tcp_abort() + */ +void +altcp_abort(struct altcp_pcb *conn) +{ + if (conn && conn->fns && conn->fns->abort) { + conn->fns->abort(conn); + } +} + +/** + * @ingroup altcp + * @see tcp_close() + */ +err_t +altcp_close(struct altcp_pcb *conn) +{ + if (conn && conn->fns && conn->fns->close) { + return conn->fns->close(conn); + } + return ERR_VAL; +} + +/** + * @ingroup altcp + * @see tcp_shutdown() + */ +err_t +altcp_shutdown(struct altcp_pcb *conn, int shut_rx, int shut_tx) +{ + if (conn && conn->fns && conn->fns->shutdown) { + return conn->fns->shutdown(conn, shut_rx, shut_tx); + } + return ERR_VAL; +} + +/** + * @ingroup altcp + * @see tcp_write() + */ +err_t +altcp_write(struct altcp_pcb *conn, const void *dataptr, u16_t len, u8_t apiflags) +{ + if (conn && conn->fns && conn->fns->write) { + return conn->fns->write(conn, dataptr, len, apiflags); + } + return ERR_VAL; +} + +/** + * @ingroup altcp + * @see tcp_output() + */ +err_t +altcp_output(struct altcp_pcb *conn) +{ + if (conn && conn->fns && conn->fns->output) { + return conn->fns->output(conn); + } + return ERR_VAL; +} + +/** + * @ingroup altcp + * @see tcp_mss() + */ +u16_t +altcp_mss(struct altcp_pcb *conn) +{ + if (conn && conn->fns && conn->fns->mss) { + return conn->fns->mss(conn); + } + return 0; +} + +/** + * @ingroup altcp + * @see tcp_sndbuf() + */ +u16_t +altcp_sndbuf(struct altcp_pcb *conn) +{ + if (conn && conn->fns && conn->fns->sndbuf) { + return conn->fns->sndbuf(conn); + } + return 0; +} + +/** + * @ingroup altcp + * @see tcp_sndqueuelen() + */ +u16_t +altcp_sndqueuelen(struct altcp_pcb *conn) +{ + if (conn && conn->fns && conn->fns->sndqueuelen) { + return conn->fns->sndqueuelen(conn); + } + return 0; +} + +void +altcp_nagle_disable(struct altcp_pcb *conn) +{ + if (conn && conn->fns && conn->fns->nagle_disable) { + conn->fns->nagle_disable(conn); + } +} + +void +altcp_nagle_enable(struct altcp_pcb *conn) +{ + if (conn && conn->fns && conn->fns->nagle_enable) { + conn->fns->nagle_enable(conn); + } +} + +int +altcp_nagle_disabled(struct altcp_pcb *conn) +{ + if (conn && conn->fns && conn->fns->nagle_disabled) { + return conn->fns->nagle_disabled(conn); + } + return 0; +} + +/** + * @ingroup altcp + * @see tcp_setprio() + */ +void +altcp_setprio(struct altcp_pcb *conn, u8_t prio) +{ + if (conn && conn->fns && conn->fns->setprio) { + conn->fns->setprio(conn, prio); + } +} + +err_t +altcp_get_tcp_addrinfo(struct altcp_pcb *conn, int local, ip_addr_t *addr, u16_t *port) +{ + if (conn && conn->fns && conn->fns->addrinfo) { + return conn->fns->addrinfo(conn, local, addr, port); + } + return ERR_VAL; +} + +ip_addr_t * +altcp_get_ip(struct altcp_pcb *conn, int local) +{ + if (conn && conn->fns && conn->fns->getip) { + return conn->fns->getip(conn, local); + } + return NULL; +} + +u16_t +altcp_get_port(struct altcp_pcb *conn, int local) +{ + if (conn && conn->fns && conn->fns->getport) { + return conn->fns->getport(conn, local); + } + return 0; +} + +#ifdef LWIP_DEBUG +enum tcp_state +altcp_dbg_get_tcp_state(struct altcp_pcb *conn) +{ + if (conn && conn->fns && conn->fns->dbg_get_tcp_state) { + return conn->fns->dbg_get_tcp_state(conn); + } + return CLOSED; +} +#endif + +/* Default implementations for the "virtual" functions */ + +void +altcp_default_set_poll(struct altcp_pcb *conn, u8_t interval) +{ + if (conn && conn->inner_conn) { + altcp_poll(conn->inner_conn, conn->poll, interval); + } +} + +void +altcp_default_recved(struct altcp_pcb *conn, u16_t len) +{ + if (conn && conn->inner_conn) { + altcp_recved(conn->inner_conn, len); + } +} + +err_t +altcp_default_bind(struct altcp_pcb *conn, const ip_addr_t *ipaddr, u16_t port) +{ + if (conn && conn->inner_conn) { + return altcp_bind(conn->inner_conn, ipaddr, port); + } + return ERR_VAL; +} + +err_t +altcp_default_shutdown(struct altcp_pcb *conn, int shut_rx, int shut_tx) +{ + if (conn) { + if (shut_rx && shut_tx && conn->fns && conn->fns->close) { + /* default shutdown for both sides is close */ + return conn->fns->close(conn); + } + if (conn->inner_conn) { + return altcp_shutdown(conn->inner_conn, shut_rx, shut_tx); + } + } + return ERR_VAL; +} + +err_t +altcp_default_write(struct altcp_pcb *conn, const void *dataptr, u16_t len, u8_t apiflags) +{ + if (conn && conn->inner_conn) { + return altcp_write(conn->inner_conn, dataptr, len, apiflags); + } + return ERR_VAL; +} + +err_t +altcp_default_output(struct altcp_pcb *conn) +{ + if (conn && conn->inner_conn) { + return altcp_output(conn->inner_conn); + } + return ERR_VAL; +} + +u16_t +altcp_default_mss(struct altcp_pcb *conn) +{ + if (conn && conn->inner_conn) { + return altcp_mss(conn->inner_conn); + } + return 0; +} + +u16_t +altcp_default_sndbuf(struct altcp_pcb *conn) +{ + if (conn && conn->inner_conn) { + return altcp_sndbuf(conn->inner_conn); + } + return 0; +} + +u16_t +altcp_default_sndqueuelen(struct altcp_pcb *conn) +{ + if (conn && conn->inner_conn) { + return altcp_sndqueuelen(conn->inner_conn); + } + return 0; +} + +void +altcp_default_nagle_disable(struct altcp_pcb *conn) +{ + if (conn && conn->inner_conn) { + altcp_nagle_disable(conn->inner_conn); + } +} + +void +altcp_default_nagle_enable(struct altcp_pcb *conn) +{ + if (conn && conn->inner_conn) { + altcp_nagle_enable(conn->inner_conn); + } +} + +int +altcp_default_nagle_disabled(struct altcp_pcb *conn) +{ + if (conn && conn->inner_conn) { + return altcp_nagle_disabled(conn->inner_conn); + } + return 0; +} + +void +altcp_default_setprio(struct altcp_pcb *conn, u8_t prio) +{ + if (conn && conn->inner_conn) { + altcp_setprio(conn->inner_conn, prio); + } +} + +void +altcp_default_dealloc(struct altcp_pcb *conn) +{ + LWIP_UNUSED_ARG(conn); + /* nothing to do */ +} + +err_t +altcp_default_get_tcp_addrinfo(struct altcp_pcb *conn, int local, ip_addr_t *addr, u16_t *port) +{ + if (conn && conn->inner_conn) { + return altcp_get_tcp_addrinfo(conn->inner_conn, local, addr, port); + } + return ERR_VAL; +} + +ip_addr_t * +altcp_default_get_ip(struct altcp_pcb *conn, int local) +{ + if (conn && conn->inner_conn) { + return altcp_get_ip(conn->inner_conn, local); + } + return NULL; +} + +u16_t +altcp_default_get_port(struct altcp_pcb *conn, int local) +{ + if (conn && conn->inner_conn) { + return altcp_get_port(conn->inner_conn, local); + } + return 0; +} + +#ifdef LWIP_DEBUG +enum tcp_state +altcp_default_dbg_get_tcp_state(struct altcp_pcb *conn) +{ + if (conn && conn->inner_conn) { + return altcp_dbg_get_tcp_state(conn->inner_conn); + } + return CLOSED; +} +#endif + + +#endif /* LWIP_ALTCP */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/altcp_alloc.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/altcp_alloc.c new file mode 100644 index 0000000000000000000000000000000000000000..cd619bc1b10566ae35c71e46aa12ab31fa12ca83 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/altcp_alloc.c @@ -0,0 +1,87 @@ +/** + * @file + * Application layered TCP connection API (to be used from TCPIP thread)\n + * This interface mimics the tcp callback API to the application while preventing + * direct linking (much like virtual functions). + * This way, an application can make use of other application layer protocols + * on top of TCP without knowing the details (e.g. TLS, proxy connection). + * + * This file contains allocation implementation that combine several layers. + */ + +/* + * Copyright (c) 2017 Simon Goldschmidt + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Simon Goldschmidt + * + */ + +#include "lwip/opt.h" + +#if LWIP_ALTCP /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/altcp.h" +#include "lwip/altcp_tcp.h" +#include "lwip/altcp_tls.h" +#include "lwip/priv/altcp_priv.h" +#include "lwip/mem.h" + +#include + +#if LWIP_ALTCP_TLS + +/** This standard allocator function creates an altcp pcb for + * TLS over TCP */ +struct altcp_pcb * +altcp_tls_new(struct altcp_tls_config *config, u8_t ip_type) +{ + struct altcp_pcb *inner_conn, *ret; + LWIP_UNUSED_ARG(ip_type); + + inner_conn = altcp_tcp_new_ip_type(ip_type); + if (inner_conn == NULL) { + return NULL; + } + ret = altcp_tls_wrap(config, inner_conn); + if (ret == NULL) { + altcp_close(inner_conn); + } + return ret; +} + +/** This standard allocator function creates an altcp pcb for + * TLS over TCP */ +struct altcp_pcb * +altcp_tls_alloc(void *arg, u8_t ip_type) +{ + return altcp_tls_new((struct altcp_tls_config *)arg, ip_type); +} + +#endif /* LWIP_ALTCP_TLS */ + +#endif /* LWIP_ALTCP */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/altcp_tcp.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/altcp_tcp.c new file mode 100644 index 0000000000000000000000000000000000000000..b715f045709b466437c290376083d299b97ae9a6 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/altcp_tcp.c @@ -0,0 +1,543 @@ +/** + * @file + * Application layered TCP connection API (to be used from TCPIP thread)\n + * This interface mimics the tcp callback API to the application while preventing + * direct linking (much like virtual functions). + * This way, an application can make use of other application layer protocols + * on top of TCP without knowing the details (e.g. TLS, proxy connection). + * + * This file contains the base implementation calling into tcp. + */ + +/* + * Copyright (c) 2017 Simon Goldschmidt + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Simon Goldschmidt + * + */ + +#include "lwip/opt.h" + +#if LWIP_ALTCP /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/altcp.h" +#include "lwip/altcp_tcp.h" +#include "lwip/priv/altcp_priv.h" +#include "lwip/tcp.h" +#include "lwip/mem.h" + +#include + +#define ALTCP_TCP_ASSERT_CONN(conn) do { \ + LWIP_ASSERT("conn->inner_conn == NULL", (conn)->inner_conn == NULL); \ + LWIP_UNUSED_ARG(conn); /* for LWIP_NOASSERT */ } while(0) +#define ALTCP_TCP_ASSERT_CONN_PCB(conn, tpcb) do { \ + LWIP_ASSERT("pcb mismatch", (conn)->state == tpcb); \ + LWIP_UNUSED_ARG(tpcb); /* for LWIP_NOASSERT */ \ + ALTCP_TCP_ASSERT_CONN(conn); } while(0) + + +/* Variable prototype, the actual declaration is at the end of this file + since it contains pointers to static functions declared here */ +extern const struct altcp_functions altcp_tcp_functions; + +static void altcp_tcp_setup(struct altcp_pcb *conn, struct tcp_pcb *tpcb); + +/* callback functions for TCP */ +static err_t +altcp_tcp_accept(void *arg, struct tcp_pcb *new_tpcb, err_t err) +{ + struct altcp_pcb *listen_conn = (struct altcp_pcb *)arg; + if (listen_conn && listen_conn->accept) { + /* create a new altcp_conn to pass to the next 'accept' callback */ + struct altcp_pcb *new_conn = altcp_alloc(); + if (new_conn == NULL) { + return ERR_MEM; + } + altcp_tcp_setup(new_conn, new_tpcb); + return listen_conn->accept(listen_conn->arg, new_conn, err); + } + return ERR_ARG; +} + +static err_t +altcp_tcp_connected(void *arg, struct tcp_pcb *tpcb, err_t err) +{ + struct altcp_pcb *conn = (struct altcp_pcb *)arg; + if (conn) { + ALTCP_TCP_ASSERT_CONN_PCB(conn, tpcb); + if (conn->connected) { + return conn->connected(conn->arg, conn, err); + } + } + return ERR_OK; +} + +static err_t +altcp_tcp_recv(void *arg, struct tcp_pcb *tpcb, struct pbuf *p, err_t err) +{ + struct altcp_pcb *conn = (struct altcp_pcb *)arg; + if (conn) { + ALTCP_TCP_ASSERT_CONN_PCB(conn, tpcb); + if (conn->recv) { + return conn->recv(conn->arg, conn, p, err); + } + } + if (p != NULL) { + /* prevent memory leaks */ + pbuf_free(p); + } + return ERR_OK; +} + +static err_t +altcp_tcp_sent(void *arg, struct tcp_pcb *tpcb, u16_t len) +{ + struct altcp_pcb *conn = (struct altcp_pcb *)arg; + if (conn) { + ALTCP_TCP_ASSERT_CONN_PCB(conn, tpcb); + if (conn->sent) { + return conn->sent(conn->arg, conn, len); + } + } + return ERR_OK; +} + +static err_t +altcp_tcp_poll(void *arg, struct tcp_pcb *tpcb) +{ + struct altcp_pcb *conn = (struct altcp_pcb *)arg; + if (conn) { + ALTCP_TCP_ASSERT_CONN_PCB(conn, tpcb); + if (conn->poll) { + return conn->poll(conn->arg, conn); + } + } + return ERR_OK; +} + +static void +altcp_tcp_err(void *arg, err_t err) +{ + struct altcp_pcb *conn = (struct altcp_pcb *)arg; + if (conn) { + conn->state = NULL; /* already freed */ + if (conn->err) { + conn->err(conn->arg, err); + } + altcp_free(conn); + } +} + +/* setup functions */ + +static void +altcp_tcp_remove_callbacks(struct tcp_pcb *tpcb) +{ + tcp_arg(tpcb, NULL); + tcp_recv(tpcb, NULL); + tcp_sent(tpcb, NULL); + tcp_err(tpcb, NULL); + tcp_poll(tpcb, NULL, tpcb->pollinterval); +} + +static void +altcp_tcp_setup_callbacks(struct altcp_pcb *conn, struct tcp_pcb *tpcb) +{ + tcp_arg(tpcb, conn); + tcp_recv(tpcb, altcp_tcp_recv); + tcp_sent(tpcb, altcp_tcp_sent); + tcp_err(tpcb, altcp_tcp_err); + /* tcp_poll is set when interval is set by application */ + /* listen is set totally different :-) */ +} + +static void +altcp_tcp_setup(struct altcp_pcb *conn, struct tcp_pcb *tpcb) +{ + altcp_tcp_setup_callbacks(conn, tpcb); + conn->state = tpcb; + conn->fns = &altcp_tcp_functions; +} + +struct altcp_pcb * +altcp_tcp_new_ip_type(u8_t ip_type) +{ + /* Allocate the tcp pcb first to invoke the priority handling code + if we're out of pcbs */ + struct tcp_pcb *tpcb = tcp_new_ip_type(ip_type); + if (tpcb != NULL) { + struct altcp_pcb *ret = altcp_alloc(); + if (ret != NULL) { + altcp_tcp_setup(ret, tpcb); + return ret; + } else { + /* altcp_pcb allocation failed -> free the tcp_pcb too */ + tcp_close(tpcb); + } + } + return NULL; +} + +/** altcp_tcp allocator function fitting to @ref altcp_allocator_t / @ref altcp_new. +* +* arg pointer is not used for TCP. +*/ +struct altcp_pcb * +altcp_tcp_alloc(void *arg, u8_t ip_type) +{ + LWIP_UNUSED_ARG(arg); + return altcp_tcp_new_ip_type(ip_type); +} + +struct altcp_pcb * +altcp_tcp_wrap(struct tcp_pcb *tpcb) +{ + if (tpcb != NULL) { + struct altcp_pcb *ret = altcp_alloc(); + if (ret != NULL) { + altcp_tcp_setup(ret, tpcb); + return ret; + } + } + return NULL; +} + + +/* "virtual" functions calling into tcp */ +static void +altcp_tcp_set_poll(struct altcp_pcb *conn, u8_t interval) +{ + if (conn != NULL) { + struct tcp_pcb *pcb = (struct tcp_pcb *)conn->state; + ALTCP_TCP_ASSERT_CONN(conn); + tcp_poll(pcb, altcp_tcp_poll, interval); + } +} + +static void +altcp_tcp_recved(struct altcp_pcb *conn, u16_t len) +{ + if (conn != NULL) { + struct tcp_pcb *pcb = (struct tcp_pcb *)conn->state; + ALTCP_TCP_ASSERT_CONN(conn); + tcp_recved(pcb, len); + } +} + +static err_t +altcp_tcp_bind(struct altcp_pcb *conn, const ip_addr_t *ipaddr, u16_t port) +{ + struct tcp_pcb *pcb; + if (conn == NULL) { + return ERR_VAL; + } + ALTCP_TCP_ASSERT_CONN(conn); + pcb = (struct tcp_pcb *)conn->state; + return tcp_bind(pcb, ipaddr, port); +} + +static err_t +altcp_tcp_connect(struct altcp_pcb *conn, const ip_addr_t *ipaddr, u16_t port, altcp_connected_fn connected) +{ + struct tcp_pcb *pcb; + if (conn == NULL) { + return ERR_VAL; + } + ALTCP_TCP_ASSERT_CONN(conn); + conn->connected = connected; + pcb = (struct tcp_pcb *)conn->state; + return tcp_connect(pcb, ipaddr, port, altcp_tcp_connected); +} + +static struct altcp_pcb * +altcp_tcp_listen(struct altcp_pcb *conn, u8_t backlog, err_t *err) +{ + struct tcp_pcb *pcb; + struct tcp_pcb *lpcb; + if (conn == NULL) { + return NULL; + } + ALTCP_TCP_ASSERT_CONN(conn); + pcb = (struct tcp_pcb *)conn->state; + lpcb = tcp_listen_with_backlog_and_err(pcb, backlog, err); + if (lpcb != NULL) { + conn->state = lpcb; + tcp_accept(lpcb, altcp_tcp_accept); + return conn; + } + return NULL; +} + +static void +altcp_tcp_abort(struct altcp_pcb *conn) +{ + if (conn != NULL) { + struct tcp_pcb *pcb = (struct tcp_pcb *)conn->state; + ALTCP_TCP_ASSERT_CONN(conn); + if (pcb) { + tcp_abort(pcb); + } + } +} + +static err_t +altcp_tcp_close(struct altcp_pcb *conn) +{ + struct tcp_pcb *pcb; + if (conn == NULL) { + return ERR_VAL; + } + ALTCP_TCP_ASSERT_CONN(conn); + pcb = (struct tcp_pcb *)conn->state; + if (pcb) { + err_t err; + tcp_poll_fn oldpoll = pcb->poll; + altcp_tcp_remove_callbacks(pcb); + err = tcp_close(pcb); + if (err != ERR_OK) { + /* not closed, set up all callbacks again */ + altcp_tcp_setup_callbacks(conn, pcb); + /* poll callback is not included in the above */ + tcp_poll(pcb, oldpoll, pcb->pollinterval); + return err; + } + conn->state = NULL; /* unsafe to reference pcb after tcp_close(). */ + } + altcp_free(conn); + return ERR_OK; +} + +static err_t +altcp_tcp_shutdown(struct altcp_pcb *conn, int shut_rx, int shut_tx) +{ + struct tcp_pcb *pcb; + if (conn == NULL) { + return ERR_VAL; + } + ALTCP_TCP_ASSERT_CONN(conn); + pcb = (struct tcp_pcb *)conn->state; + return tcp_shutdown(pcb, shut_rx, shut_tx); +} + +static err_t +altcp_tcp_write(struct altcp_pcb *conn, const void *dataptr, u16_t len, u8_t apiflags) +{ + struct tcp_pcb *pcb; + if (conn == NULL) { + return ERR_VAL; + } + ALTCP_TCP_ASSERT_CONN(conn); + pcb = (struct tcp_pcb *)conn->state; + return tcp_write(pcb, dataptr, len, apiflags); +} + +static err_t +altcp_tcp_output(struct altcp_pcb *conn) +{ + struct tcp_pcb *pcb; + if (conn == NULL) { + return ERR_VAL; + } + ALTCP_TCP_ASSERT_CONN(conn); + pcb = (struct tcp_pcb *)conn->state; + return tcp_output(pcb); +} + +static u16_t +altcp_tcp_mss(struct altcp_pcb *conn) +{ + struct tcp_pcb *pcb; + if (conn == NULL) { + return 0; + } + ALTCP_TCP_ASSERT_CONN(conn); + pcb = (struct tcp_pcb *)conn->state; + return tcp_mss(pcb); +} + +static u16_t +altcp_tcp_sndbuf(struct altcp_pcb *conn) +{ + struct tcp_pcb *pcb; + if (conn == NULL) { + return 0; + } + ALTCP_TCP_ASSERT_CONN(conn); + pcb = (struct tcp_pcb *)conn->state; + return tcp_sndbuf(pcb); +} + +static u16_t +altcp_tcp_sndqueuelen(struct altcp_pcb *conn) +{ + struct tcp_pcb *pcb; + if (conn == NULL) { + return 0; + } + ALTCP_TCP_ASSERT_CONN(conn); + pcb = (struct tcp_pcb *)conn->state; + return tcp_sndqueuelen(pcb); +} + +static void +altcp_tcp_nagle_disable(struct altcp_pcb *conn) +{ + if (conn && conn->state) { + struct tcp_pcb *pcb = (struct tcp_pcb *)conn->state; + ALTCP_TCP_ASSERT_CONN(conn); + tcp_nagle_disable(pcb); + } +} + +static void +altcp_tcp_nagle_enable(struct altcp_pcb *conn) +{ + if (conn && conn->state) { + struct tcp_pcb *pcb = (struct tcp_pcb *)conn->state; + ALTCP_TCP_ASSERT_CONN(conn); + tcp_nagle_enable(pcb); + } +} + +static int +altcp_tcp_nagle_disabled(struct altcp_pcb *conn) +{ + if (conn && conn->state) { + struct tcp_pcb *pcb = (struct tcp_pcb *)conn->state; + ALTCP_TCP_ASSERT_CONN(conn); + return tcp_nagle_disabled(pcb); + } + return 0; +} + +static void +altcp_tcp_setprio(struct altcp_pcb *conn, u8_t prio) +{ + if (conn != NULL) { + struct tcp_pcb *pcb = (struct tcp_pcb *)conn->state; + ALTCP_TCP_ASSERT_CONN(conn); + tcp_setprio(pcb, prio); + } +} + +static void +altcp_tcp_dealloc(struct altcp_pcb *conn) +{ + LWIP_UNUSED_ARG(conn); + ALTCP_TCP_ASSERT_CONN(conn); + /* no private state to clean up */ +} + +static err_t +altcp_tcp_get_tcp_addrinfo(struct altcp_pcb *conn, int local, ip_addr_t *addr, u16_t *port) +{ + if (conn) { + struct tcp_pcb *pcb = (struct tcp_pcb *)conn->state; + ALTCP_TCP_ASSERT_CONN(conn); + return tcp_tcp_get_tcp_addrinfo(pcb, local, addr, port); + } + return ERR_VAL; +} + +static ip_addr_t * +altcp_tcp_get_ip(struct altcp_pcb *conn, int local) +{ + if (conn) { + struct tcp_pcb *pcb = (struct tcp_pcb *)conn->state; + ALTCP_TCP_ASSERT_CONN(conn); + if (pcb) { + if (local) { + return &pcb->local_ip; + } else { + return &pcb->remote_ip; + } + } + } + return NULL; +} + +static u16_t +altcp_tcp_get_port(struct altcp_pcb *conn, int local) +{ + if (conn) { + struct tcp_pcb *pcb = (struct tcp_pcb *)conn->state; + ALTCP_TCP_ASSERT_CONN(conn); + if (pcb) { + if (local) { + return pcb->local_port; + } else { + return pcb->remote_port; + } + } + } + return 0; +} + +#ifdef LWIP_DEBUG +static enum tcp_state +altcp_tcp_dbg_get_tcp_state(struct altcp_pcb *conn) +{ + if (conn) { + struct tcp_pcb *pcb = (struct tcp_pcb *)conn->state; + ALTCP_TCP_ASSERT_CONN(conn); + if (pcb) { + return pcb->state; + } + } + return CLOSED; +} +#endif +const struct altcp_functions altcp_tcp_functions = { + altcp_tcp_set_poll, + altcp_tcp_recved, + altcp_tcp_bind, + altcp_tcp_connect, + altcp_tcp_listen, + altcp_tcp_abort, + altcp_tcp_close, + altcp_tcp_shutdown, + altcp_tcp_write, + altcp_tcp_output, + altcp_tcp_mss, + altcp_tcp_sndbuf, + altcp_tcp_sndqueuelen, + altcp_tcp_nagle_disable, + altcp_tcp_nagle_enable, + altcp_tcp_nagle_disabled, + altcp_tcp_setprio, + altcp_tcp_dealloc, + altcp_tcp_get_tcp_addrinfo, + altcp_tcp_get_ip, + altcp_tcp_get_port +#ifdef LWIP_DEBUG + , altcp_tcp_dbg_get_tcp_state +#endif +}; + +#endif /* LWIP_ALTCP */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/def.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/def.c new file mode 100644 index 0000000000000000000000000000000000000000..9da36fee8a146a77485909fd50ed78460ddca182 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/def.c @@ -0,0 +1,240 @@ +/** + * @file + * Common functions used throughout the stack. + * + * These are reference implementations of the byte swapping functions. + * Again with the aim of being simple, correct and fully portable. + * Byte swapping is the second thing you would want to optimize. You will + * need to port it to your architecture and in your cc.h: + * + * \#define lwip_htons(x) your_htons + * \#define lwip_htonl(x) your_htonl + * + * Note lwip_ntohs() and lwip_ntohl() are merely references to the htonx counterparts. + * + * If you \#define them to htons() and htonl(), you should + * \#define LWIP_DONT_PROVIDE_BYTEORDER_FUNCTIONS to prevent lwIP from + * defining htonx/ntohx compatibility macros. + + * @defgroup sys_nonstandard Non-standard functions + * @ingroup sys_layer + * lwIP provides default implementations for non-standard functions. + * These can be mapped to OS functions to reduce code footprint if desired. + * All defines related to this section must not be placed in lwipopts.h, + * but in arch/cc.h! + * These options cannot be \#defined in lwipopts.h since they are not options + * of lwIP itself, but options of the lwIP port to your system. + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Simon Goldschmidt + * + */ + +#include "lwip/opt.h" +#include "lwip/def.h" + +#include + +#if BYTE_ORDER == LITTLE_ENDIAN + +#if !defined(lwip_htons) +/** + * Convert an u16_t from host- to network byte order. + * + * @param n u16_t in host byte order + * @return n in network byte order + */ +u16_t +lwip_htons(u16_t n) +{ + return PP_HTONS(n); +} +#endif /* lwip_htons */ + +#if !defined(lwip_htonl) +/** + * Convert an u32_t from host- to network byte order. + * + * @param n u32_t in host byte order + * @return n in network byte order + */ +u32_t +lwip_htonl(u32_t n) +{ + return PP_HTONL(n); +} +#endif /* lwip_htonl */ + +#endif /* BYTE_ORDER == LITTLE_ENDIAN */ + +#ifndef lwip_strnstr +/** + * @ingroup sys_nonstandard + * lwIP default implementation for strnstr() non-standard function. + * This can be \#defined to strnstr() depending on your platform port. + */ +char * +lwip_strnstr(const char *buffer, const char *token, size_t n) +{ + const char *p; + size_t tokenlen = strlen(token); + if (tokenlen == 0) { + return LWIP_CONST_CAST(char *, buffer); + } + for (p = buffer; *p && (p + tokenlen <= buffer + n); p++) { + if ((*p == *token) && (strncmp(p, token, tokenlen) == 0)) { + return LWIP_CONST_CAST(char *, p); + } + } + return NULL; +} +#endif + +#ifndef lwip_stricmp +/** + * @ingroup sys_nonstandard + * lwIP default implementation for stricmp() non-standard function. + * This can be \#defined to stricmp() depending on your platform port. + */ +int +lwip_stricmp(const char *str1, const char *str2) +{ + char c1, c2; + + do { + c1 = *str1++; + c2 = *str2++; + if (c1 != c2) { + char c1_upc = c1 | 0x20; + if ((c1_upc >= 'a') && (c1_upc <= 'z')) { + /* characters are not equal an one is in the alphabet range: + downcase both chars and check again */ + char c2_upc = c2 | 0x20; + if (c1_upc != c2_upc) { + /* still not equal */ + /* don't care for < or > */ + return 1; + } + } else { + /* characters are not equal but none is in the alphabet range */ + return 1; + } + } + } while (c1 != 0); + return 0; +} +#endif + +#ifndef lwip_strnicmp +/** + * @ingroup sys_nonstandard + * lwIP default implementation for strnicmp() non-standard function. + * This can be \#defined to strnicmp() depending on your platform port. + */ +int +lwip_strnicmp(const char *str1, const char *str2, size_t len) +{ + char c1, c2; + + do { + c1 = *str1++; + c2 = *str2++; + if (c1 != c2) { + char c1_upc = c1 | 0x20; + if ((c1_upc >= 'a') && (c1_upc <= 'z')) { + /* characters are not equal an one is in the alphabet range: + downcase both chars and check again */ + char c2_upc = c2 | 0x20; + if (c1_upc != c2_upc) { + /* still not equal */ + /* don't care for < or > */ + return 1; + } + } else { + /* characters are not equal but none is in the alphabet range */ + return 1; + } + } + len--; + } while ((len != 0) && (c1 != 0)); + return 0; +} +#endif + +#ifndef lwip_itoa +/** + * @ingroup sys_nonstandard + * lwIP default implementation for itoa() non-standard function. + * This can be \#defined to itoa() or snprintf(result, bufsize, "%d", number) depending on your platform port. + */ +void +lwip_itoa(char *result, size_t bufsize, int number) +{ + char *res = result; + char *tmp = result + bufsize - 1; + int n = (number >= 0) ? number : -number; + + /* handle invalid bufsize */ + if (bufsize < 2) { + if (bufsize == 1) { + *result = 0; + } + return; + } + + /* First, add sign */ + if (number < 0) { + *res++ = '-'; + } + /* Then create the string from the end and stop if buffer full, + and ensure output string is zero terminated */ + *tmp = 0; + while ((n != 0) && (tmp > res)) { + char val = (char)('0' + (n % 10)); + tmp--; + *tmp = val; + n = n / 10; + } + if (n) { + /* buffer is too small */ + *result = 0; + return; + } + if (*tmp == 0) { + /* Nothing added? */ + *res++ = '0'; + *res++ = 0; + return; + } + /* move from temporary buffer to output buffer (sign is not moved) */ + memmove(res, tmp, (size_t)((result + bufsize) - tmp)); +} +#endif diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/dns.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/dns.c new file mode 100644 index 0000000000000000000000000000000000000000..9d2f61ed86ba71b2b236eb3b6acf2650ac3b3864 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/dns.c @@ -0,0 +1,1631 @@ +/** + * @file + * DNS - host name to IP address resolver. + * + * @defgroup dns DNS + * @ingroup callbackstyle_api + * + * Implements a DNS host name to IP address resolver. + * + * The lwIP DNS resolver functions are used to lookup a host name and + * map it to a numerical IP address. It maintains a list of resolved + * hostnames that can be queried with the dns_lookup() function. + * New hostnames can be resolved using the dns_query() function. + * + * The lwIP version of the resolver also adds a non-blocking version of + * gethostbyname() that will work with a raw API application. This function + * checks for an IP address string first and converts it if it is valid. + * gethostbyname() then does a dns_lookup() to see if the name is + * already in the table. If so, the IP is returned. If not, a query is + * issued and the function returns with a ERR_INPROGRESS status. The app + * using the dns client must then go into a waiting state. + * + * Once a hostname has been resolved (or found to be non-existent), + * the resolver code calls a specified callback function (which + * must be implemented by the module that uses the resolver). + * + * Multicast DNS queries are supported for names ending on ".local". + * However, only "One-Shot Multicast DNS Queries" are supported (RFC 6762 + * chapter 5.1), this is not a fully compliant implementation of continuous + * mDNS querying! + * + * All functions must be called from TCPIP thread. + * + * @see DNS_MAX_SERVERS + * @see LWIP_DHCP_MAX_DNS_SERVERS + * @see @ref netconn_common for thread-safe access. + */ + +/* + * Port to lwIP from uIP + * by Jim Pettinato April 2007 + * + * security fixes and more by Simon Goldschmidt + * + * uIP version Copyright (c) 2002-2003, Adam Dunkels. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/*----------------------------------------------------------------------------- + * RFC 1035 - Domain names - implementation and specification + * RFC 2181 - Clarifications to the DNS Specification + *----------------------------------------------------------------------------*/ + +/** @todo: define good default values (rfc compliance) */ +/** @todo: improve answer parsing, more checkings... */ +/** @todo: check RFC1035 - 7.3. Processing responses */ +/** @todo: one-shot mDNS: dual-stack fallback to another IP version */ + +/*----------------------------------------------------------------------------- + * Includes + *----------------------------------------------------------------------------*/ + +#include "lwip/opt.h" + +#if LWIP_DNS /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/def.h" +#include "lwip/udp.h" +#include "lwip/mem.h" +#include "lwip/memp.h" +#include "lwip/dns.h" +#include "lwip/prot/dns.h" + +#include + +/** Random generator function to create random TXIDs and source ports for queries */ +#ifndef DNS_RAND_TXID +#if ((LWIP_DNS_SECURE & LWIP_DNS_SECURE_RAND_XID) != 0) +#define DNS_RAND_TXID LWIP_RAND +#else +static u16_t dns_txid; +#define DNS_RAND_TXID() (++dns_txid) +#endif +#endif + +/** Limits the source port to be >= 1024 by default */ +#ifndef DNS_PORT_ALLOWED +#define DNS_PORT_ALLOWED(port) ((port) >= 1024) +#endif + +/** DNS resource record max. TTL (one week as default) */ +#ifndef DNS_MAX_TTL +#define DNS_MAX_TTL 604800 +#elif DNS_MAX_TTL > 0x7FFFFFFF +#error DNS_MAX_TTL must be a positive 32-bit value +#endif + +#if DNS_TABLE_SIZE > 255 +#error DNS_TABLE_SIZE must fit into an u8_t +#endif +#if DNS_MAX_SERVERS > 255 +#error DNS_MAX_SERVERS must fit into an u8_t +#endif + +/* The number of parallel requests (i.e. calls to dns_gethostbyname + * that cannot be answered from the DNS table. + * This is set to the table size by default. + */ +#if ((LWIP_DNS_SECURE & LWIP_DNS_SECURE_NO_MULTIPLE_OUTSTANDING) != 0) +#ifndef DNS_MAX_REQUESTS +#define DNS_MAX_REQUESTS DNS_TABLE_SIZE +#else +#if DNS_MAX_REQUESTS > 255 +#error DNS_MAX_REQUESTS must fit into an u8_t +#endif +#endif +#else +/* In this configuration, both arrays have to have the same size and are used + * like one entry (used/free) */ +#define DNS_MAX_REQUESTS DNS_TABLE_SIZE +#endif + +/* The number of UDP source ports used in parallel */ +#if ((LWIP_DNS_SECURE & LWIP_DNS_SECURE_RAND_SRC_PORT) != 0) +#ifndef DNS_MAX_SOURCE_PORTS +#define DNS_MAX_SOURCE_PORTS DNS_MAX_REQUESTS +#else +#if DNS_MAX_SOURCE_PORTS > 255 +#error DNS_MAX_SOURCE_PORTS must fit into an u8_t +#endif +#endif +#else +#ifdef DNS_MAX_SOURCE_PORTS +#undef DNS_MAX_SOURCE_PORTS +#endif +#define DNS_MAX_SOURCE_PORTS 1 +#endif + +#if LWIP_IPV4 && LWIP_IPV6 +#define LWIP_DNS_ADDRTYPE_IS_IPV6(t) (((t) == LWIP_DNS_ADDRTYPE_IPV6_IPV4) || ((t) == LWIP_DNS_ADDRTYPE_IPV6)) +#define LWIP_DNS_ADDRTYPE_MATCH_IP(t, ip) (IP_IS_V6_VAL(ip) ? LWIP_DNS_ADDRTYPE_IS_IPV6(t) : (!LWIP_DNS_ADDRTYPE_IS_IPV6(t))) +#define LWIP_DNS_ADDRTYPE_ARG(x) , x +#define LWIP_DNS_ADDRTYPE_ARG_OR_ZERO(x) x +#define LWIP_DNS_SET_ADDRTYPE(x, y) do { x = y; } while(0) +#else +#if LWIP_IPV6 +#define LWIP_DNS_ADDRTYPE_IS_IPV6(t) 1 +#else +#define LWIP_DNS_ADDRTYPE_IS_IPV6(t) 0 +#endif +#define LWIP_DNS_ADDRTYPE_MATCH_IP(t, ip) 1 +#define LWIP_DNS_ADDRTYPE_ARG(x) +#define LWIP_DNS_ADDRTYPE_ARG_OR_ZERO(x) 0 +#define LWIP_DNS_SET_ADDRTYPE(x, y) +#endif /* LWIP_IPV4 && LWIP_IPV6 */ + +#if LWIP_DNS_SUPPORT_MDNS_QUERIES +#define LWIP_DNS_ISMDNS_ARG(x) , x +#else +#define LWIP_DNS_ISMDNS_ARG(x) +#endif + +/** DNS query message structure. + No packing needed: only used locally on the stack. */ +struct dns_query { + /* DNS query record starts with either a domain name or a pointer + to a name already present somewhere in the packet. */ + u16_t type; + u16_t cls; +}; +#define SIZEOF_DNS_QUERY 4 + +/** DNS answer message structure. + No packing needed: only used locally on the stack. */ +struct dns_answer { + /* DNS answer record starts with either a domain name or a pointer + to a name already present somewhere in the packet. */ + u16_t type; + u16_t cls; + u32_t ttl; + u16_t len; +}; +#define SIZEOF_DNS_ANSWER 10 +/* maximum allowed size for the struct due to non-packed */ +#define SIZEOF_DNS_ANSWER_ASSERT 12 + +/* DNS table entry states */ +typedef enum { + DNS_STATE_UNUSED = 0, + DNS_STATE_NEW = 1, + DNS_STATE_ASKING = 2, + DNS_STATE_DONE = 3 +} dns_state_enum_t; + +/** DNS table entry */ +struct dns_table_entry { + u32_t ttl; + ip_addr_t ipaddr; + u16_t txid; + u8_t state; + u8_t server_idx; + u8_t tmr; + u8_t retries; + u8_t seqno; +#if ((LWIP_DNS_SECURE & LWIP_DNS_SECURE_RAND_SRC_PORT) != 0) + u8_t pcb_idx; +#endif + char name[DNS_MAX_NAME_LENGTH]; +#if LWIP_IPV4 && LWIP_IPV6 + u8_t reqaddrtype; +#endif /* LWIP_IPV4 && LWIP_IPV6 */ +#if LWIP_DNS_SUPPORT_MDNS_QUERIES + u8_t is_mdns; +#endif +}; + +/** DNS request table entry: used when dns_gehostbyname cannot answer the + * request from the DNS table */ +struct dns_req_entry { + /* pointer to callback on DNS query done */ + dns_found_callback found; + /* argument passed to the callback function */ + void *arg; +#if ((LWIP_DNS_SECURE & LWIP_DNS_SECURE_NO_MULTIPLE_OUTSTANDING) != 0) + u8_t dns_table_idx; +#endif +#if LWIP_IPV4 && LWIP_IPV6 + u8_t reqaddrtype; +#endif /* LWIP_IPV4 && LWIP_IPV6 */ +}; + +#if DNS_LOCAL_HOSTLIST + +#if DNS_LOCAL_HOSTLIST_IS_DYNAMIC +/** Local host-list. For hostnames in this list, no + * external name resolution is performed */ +static struct local_hostlist_entry *local_hostlist_dynamic; +#else /* DNS_LOCAL_HOSTLIST_IS_DYNAMIC */ + +/** Defining this allows the local_hostlist_static to be placed in a different + * linker section (e.g. FLASH) */ +#ifndef DNS_LOCAL_HOSTLIST_STORAGE_PRE +#define DNS_LOCAL_HOSTLIST_STORAGE_PRE static +#endif /* DNS_LOCAL_HOSTLIST_STORAGE_PRE */ +/** Defining this allows the local_hostlist_static to be placed in a different + * linker section (e.g. FLASH) */ +#ifndef DNS_LOCAL_HOSTLIST_STORAGE_POST +#define DNS_LOCAL_HOSTLIST_STORAGE_POST +#endif /* DNS_LOCAL_HOSTLIST_STORAGE_POST */ +DNS_LOCAL_HOSTLIST_STORAGE_PRE struct local_hostlist_entry local_hostlist_static[] + DNS_LOCAL_HOSTLIST_STORAGE_POST = DNS_LOCAL_HOSTLIST_INIT; + +#endif /* DNS_LOCAL_HOSTLIST_IS_DYNAMIC */ + +static void dns_init_local(void); +static err_t dns_lookup_local(const char *hostname, ip_addr_t *addr LWIP_DNS_ADDRTYPE_ARG(u8_t dns_addrtype)); +#endif /* DNS_LOCAL_HOSTLIST */ + + +/* forward declarations */ +static void dns_recv(void *s, struct udp_pcb *pcb, struct pbuf *p, const ip_addr_t *addr, u16_t port); +static void dns_check_entries(void); +static void dns_call_found(u8_t idx, ip_addr_t *addr); + +/*----------------------------------------------------------------------------- + * Globals + *----------------------------------------------------------------------------*/ + +/* DNS variables */ +static struct udp_pcb *dns_pcbs[DNS_MAX_SOURCE_PORTS]; +#if ((LWIP_DNS_SECURE & LWIP_DNS_SECURE_RAND_SRC_PORT) != 0) +static u8_t dns_last_pcb_idx; +#endif +static u8_t dns_seqno; +static struct dns_table_entry dns_table[DNS_TABLE_SIZE]; +static struct dns_req_entry dns_requests[DNS_MAX_REQUESTS]; +static ip_addr_t dns_servers[DNS_MAX_SERVERS]; + +#if LWIP_IPV4 +const ip_addr_t dns_mquery_v4group = DNS_MQUERY_IPV4_GROUP_INIT; +#endif /* LWIP_IPV4 */ +#if LWIP_IPV6 +const ip_addr_t dns_mquery_v6group = DNS_MQUERY_IPV6_GROUP_INIT; +#endif /* LWIP_IPV6 */ + +/** + * Initialize the resolver: set up the UDP pcb and configure the default server + * (if DNS_SERVER_ADDRESS is set). + */ +void +dns_init(void) +{ +#ifdef DNS_SERVER_ADDRESS + /* initialize default DNS server address */ + ip_addr_t dnsserver; + DNS_SERVER_ADDRESS(&dnsserver); + dns_setserver(0, &dnsserver); +#endif /* DNS_SERVER_ADDRESS */ + + LWIP_ASSERT("sanity check SIZEOF_DNS_QUERY", + sizeof(struct dns_query) == SIZEOF_DNS_QUERY); + LWIP_ASSERT("sanity check SIZEOF_DNS_ANSWER", + sizeof(struct dns_answer) <= SIZEOF_DNS_ANSWER_ASSERT); + + LWIP_DEBUGF(DNS_DEBUG, ("dns_init: initializing\n")); + + /* if dns client not yet initialized... */ +#if ((LWIP_DNS_SECURE & LWIP_DNS_SECURE_RAND_SRC_PORT) == 0) + if (dns_pcbs[0] == NULL) { + dns_pcbs[0] = udp_new_ip_type(IPADDR_TYPE_ANY); + LWIP_ASSERT("dns_pcbs[0] != NULL", dns_pcbs[0] != NULL); + + /* initialize DNS table not needed (initialized to zero since it is a + * global variable) */ + LWIP_ASSERT("For implicit initialization to work, DNS_STATE_UNUSED needs to be 0", + DNS_STATE_UNUSED == 0); + + /* initialize DNS client */ + udp_bind(dns_pcbs[0], IP_ANY_TYPE, 0); + udp_recv(dns_pcbs[0], dns_recv, NULL); + } +#endif + +#if DNS_LOCAL_HOSTLIST + dns_init_local(); +#endif +} + +/** + * @ingroup dns + * Initialize one of the DNS servers. + * + * @param numdns the index of the DNS server to set must be < DNS_MAX_SERVERS + * @param dnsserver IP address of the DNS server to set + */ +void +dns_setserver(u8_t numdns, const ip_addr_t *dnsserver) +{ + if (numdns < DNS_MAX_SERVERS) { + if (dnsserver != NULL) { + dns_servers[numdns] = (*dnsserver); + } else { + dns_servers[numdns] = *IP_ADDR_ANY; + } + } +} + +/** + * @ingroup dns + * Obtain one of the currently configured DNS server. + * + * @param numdns the index of the DNS server + * @return IP address of the indexed DNS server or "ip_addr_any" if the DNS + * server has not been configured. + */ +const ip_addr_t * +dns_getserver(u8_t numdns) +{ + if (numdns < DNS_MAX_SERVERS) { + return &dns_servers[numdns]; + } else { + return IP_ADDR_ANY; + } +} + +/** + * The DNS resolver client timer - handle retries and timeouts and should + * be called every DNS_TMR_INTERVAL milliseconds (every second by default). + */ +void +dns_tmr(void) +{ + LWIP_DEBUGF(DNS_DEBUG, ("dns_tmr: dns_check_entries\n")); + dns_check_entries(); +} + +#if DNS_LOCAL_HOSTLIST +static void +dns_init_local(void) +{ +#if DNS_LOCAL_HOSTLIST_IS_DYNAMIC && defined(DNS_LOCAL_HOSTLIST_INIT) + size_t i; + struct local_hostlist_entry *entry; + /* Dynamic: copy entries from DNS_LOCAL_HOSTLIST_INIT to list */ + struct local_hostlist_entry local_hostlist_init[] = DNS_LOCAL_HOSTLIST_INIT; + size_t namelen; + for (i = 0; i < LWIP_ARRAYSIZE(local_hostlist_init); i++) { + struct local_hostlist_entry *init_entry = &local_hostlist_init[i]; + LWIP_ASSERT("invalid host name (NULL)", init_entry->name != NULL); + namelen = strlen(init_entry->name); + LWIP_ASSERT("namelen <= DNS_LOCAL_HOSTLIST_MAX_NAMELEN", namelen <= DNS_LOCAL_HOSTLIST_MAX_NAMELEN); + entry = (struct local_hostlist_entry *)memp_malloc(MEMP_LOCALHOSTLIST); + LWIP_ASSERT("mem-error in dns_init_local", entry != NULL); + if (entry != NULL) { + char *entry_name = (char *)entry + sizeof(struct local_hostlist_entry); + MEMCPY(entry_name, init_entry->name, namelen); + entry_name[namelen] = 0; + entry->name = entry_name; + entry->addr = init_entry->addr; + entry->next = local_hostlist_dynamic; + local_hostlist_dynamic = entry; + } + } +#endif /* DNS_LOCAL_HOSTLIST_IS_DYNAMIC && defined(DNS_LOCAL_HOSTLIST_INIT) */ +} + +/** + * @ingroup dns + * Iterate the local host-list for a hostname. + * + * @param iterator_fn a function that is called for every entry in the local host-list + * @param iterator_arg 3rd argument passed to iterator_fn + * @return the number of entries in the local host-list + */ +size_t +dns_local_iterate(dns_found_callback iterator_fn, void *iterator_arg) +{ + size_t i; +#if DNS_LOCAL_HOSTLIST_IS_DYNAMIC + struct local_hostlist_entry *entry = local_hostlist_dynamic; + i = 0; + while (entry != NULL) { + if (iterator_fn != NULL) { + iterator_fn(entry->name, &entry->addr, iterator_arg); + } + i++; + entry = entry->next; + } +#else /* DNS_LOCAL_HOSTLIST_IS_DYNAMIC */ + for (i = 0; i < LWIP_ARRAYSIZE(local_hostlist_static); i++) { + if (iterator_fn != NULL) { + iterator_fn(local_hostlist_static[i].name, &local_hostlist_static[i].addr, iterator_arg); + } + } +#endif /* DNS_LOCAL_HOSTLIST_IS_DYNAMIC */ + return i; +} + +/** + * @ingroup dns + * Scans the local host-list for a hostname. + * + * @param hostname Hostname to look for in the local host-list + * @param addr the first IP address for the hostname in the local host-list or + * IPADDR_NONE if not found. + * @param dns_addrtype - LWIP_DNS_ADDRTYPE_IPV4_IPV6: try to resolve IPv4 (ATTENTION: no fallback here!) + * - LWIP_DNS_ADDRTYPE_IPV6_IPV4: try to resolve IPv6 (ATTENTION: no fallback here!) + * - LWIP_DNS_ADDRTYPE_IPV4: try to resolve IPv4 only + * - LWIP_DNS_ADDRTYPE_IPV6: try to resolve IPv6 only + * @return ERR_OK if found, ERR_ARG if not found + */ +err_t +dns_local_lookup(const char *hostname, ip_addr_t *addr, u8_t dns_addrtype) +{ + LWIP_UNUSED_ARG(dns_addrtype); + return dns_lookup_local(hostname, addr LWIP_DNS_ADDRTYPE_ARG(dns_addrtype)); +} + +/* Internal implementation for dns_local_lookup and dns_lookup */ +static err_t +dns_lookup_local(const char *hostname, ip_addr_t *addr LWIP_DNS_ADDRTYPE_ARG(u8_t dns_addrtype)) +{ +#if DNS_LOCAL_HOSTLIST_IS_DYNAMIC + struct local_hostlist_entry *entry = local_hostlist_dynamic; + while (entry != NULL) { + if ((lwip_stricmp(entry->name, hostname) == 0) && + LWIP_DNS_ADDRTYPE_MATCH_IP(dns_addrtype, entry->addr)) { + if (addr) { + ip_addr_copy(*addr, entry->addr); + } + return ERR_OK; + } + entry = entry->next; + } +#else /* DNS_LOCAL_HOSTLIST_IS_DYNAMIC */ + size_t i; + for (i = 0; i < LWIP_ARRAYSIZE(local_hostlist_static); i++) { + if ((lwip_stricmp(local_hostlist_static[i].name, hostname) == 0) && + LWIP_DNS_ADDRTYPE_MATCH_IP(dns_addrtype, local_hostlist_static[i].addr)) { + if (addr) { + ip_addr_copy(*addr, local_hostlist_static[i].addr); + } + return ERR_OK; + } + } +#endif /* DNS_LOCAL_HOSTLIST_IS_DYNAMIC */ + return ERR_ARG; +} + +#if DNS_LOCAL_HOSTLIST_IS_DYNAMIC +/** + * @ingroup dns + * Remove all entries from the local host-list for a specific hostname + * and/or IP address + * + * @param hostname hostname for which entries shall be removed from the local + * host-list + * @param addr address for which entries shall be removed from the local host-list + * @return the number of removed entries + */ +int +dns_local_removehost(const char *hostname, const ip_addr_t *addr) +{ + int removed = 0; + struct local_hostlist_entry *entry = local_hostlist_dynamic; + struct local_hostlist_entry *last_entry = NULL; + while (entry != NULL) { + if (((hostname == NULL) || !lwip_stricmp(entry->name, hostname)) && + ((addr == NULL) || ip_addr_cmp(&entry->addr, addr))) { + struct local_hostlist_entry *free_entry; + if (last_entry != NULL) { + last_entry->next = entry->next; + } else { + local_hostlist_dynamic = entry->next; + } + free_entry = entry; + entry = entry->next; + memp_free(MEMP_LOCALHOSTLIST, free_entry); + removed++; + } else { + last_entry = entry; + entry = entry->next; + } + } + return removed; +} + +/** + * @ingroup dns + * Add a hostname/IP address pair to the local host-list. + * Duplicates are not checked. + * + * @param hostname hostname of the new entry + * @param addr IP address of the new entry + * @return ERR_OK if succeeded or ERR_MEM on memory error + */ +err_t +dns_local_addhost(const char *hostname, const ip_addr_t *addr) +{ + struct local_hostlist_entry *entry; + size_t namelen; + char *entry_name; + LWIP_ASSERT("invalid host name (NULL)", hostname != NULL); + namelen = strlen(hostname); + LWIP_ASSERT("namelen <= DNS_LOCAL_HOSTLIST_MAX_NAMELEN", namelen <= DNS_LOCAL_HOSTLIST_MAX_NAMELEN); + entry = (struct local_hostlist_entry *)memp_malloc(MEMP_LOCALHOSTLIST); + if (entry == NULL) { + return ERR_MEM; + } + entry_name = (char *)entry + sizeof(struct local_hostlist_entry); + MEMCPY(entry_name, hostname, namelen); + entry_name[namelen] = 0; + entry->name = entry_name; + ip_addr_copy(entry->addr, *addr); + entry->next = local_hostlist_dynamic; + local_hostlist_dynamic = entry; + return ERR_OK; +} +#endif /* DNS_LOCAL_HOSTLIST_IS_DYNAMIC*/ +#endif /* DNS_LOCAL_HOSTLIST */ + +/** + * @ingroup dns + * Look up a hostname in the array of known hostnames. + * + * @note This function only looks in the internal array of known + * hostnames, it does not send out a query for the hostname if none + * was found. The function dns_enqueue() can be used to send a query + * for a hostname. + * + * @param name the hostname to look up + * @param addr the hostname's IP address, as u32_t (instead of ip_addr_t to + * better check for failure: != IPADDR_NONE) or IPADDR_NONE if the hostname + * was not found in the cached dns_table. + * @return ERR_OK if found, ERR_ARG if not found + */ +static err_t +dns_lookup(const char *name, ip_addr_t *addr LWIP_DNS_ADDRTYPE_ARG(u8_t dns_addrtype)) +{ + u8_t i; +#if DNS_LOCAL_HOSTLIST + if (dns_lookup_local(name, addr LWIP_DNS_ADDRTYPE_ARG(dns_addrtype)) == ERR_OK) { + return ERR_OK; + } +#endif /* DNS_LOCAL_HOSTLIST */ +#ifdef DNS_LOOKUP_LOCAL_EXTERN + if (DNS_LOOKUP_LOCAL_EXTERN(name, addr, LWIP_DNS_ADDRTYPE_ARG_OR_ZERO(dns_addrtype)) == ERR_OK) { + return ERR_OK; + } +#endif /* DNS_LOOKUP_LOCAL_EXTERN */ + + /* Walk through name list, return entry if found. If not, return NULL. */ + for (i = 0; i < DNS_TABLE_SIZE; ++i) { + if ((dns_table[i].state == DNS_STATE_DONE) && + (lwip_strnicmp(name, dns_table[i].name, sizeof(dns_table[i].name)) == 0) && + LWIP_DNS_ADDRTYPE_MATCH_IP(dns_addrtype, dns_table[i].ipaddr)) { + LWIP_DEBUGF(DNS_DEBUG, ("dns_lookup: \"%s\": found = ", name)); + ip_addr_debug_print_val(DNS_DEBUG, dns_table[i].ipaddr); + LWIP_DEBUGF(DNS_DEBUG, ("\n")); + if (addr) { + ip_addr_copy(*addr, dns_table[i].ipaddr); + } + return ERR_OK; + } + } + + return ERR_ARG; +} + +/** + * Compare the "dotted" name "query" with the encoded name "response" + * to make sure an answer from the DNS server matches the current dns_table + * entry (otherwise, answers might arrive late for hostname not on the list + * any more). + * + * For now, this function compares case-insensitive to cope with all kinds of + * servers. This also means that "dns 0x20 bit encoding" must be checked + * externally, if we want to implement it. + * Currently, the request is sent exactly as passed in by he user request. + * + * @param query hostname (not encoded) from the dns_table + * @param p pbuf containing the encoded hostname in the DNS response + * @param start_offset offset into p where the name starts + * @return 0xFFFF: names differ, other: names equal -> offset behind name + */ +static u16_t +dns_compare_name(const char *query, struct pbuf *p, u16_t start_offset) +{ + int n; + u16_t response_offset = start_offset; + + do { + n = pbuf_try_get_at(p, response_offset); + if ((n < 0) || (response_offset == 0xFFFF)) { + /* error or overflow */ + return 0xFFFF; + } + response_offset++; + /** @see RFC 1035 - 4.1.4. Message compression */ + if ((n & 0xc0) == 0xc0) { + /* Compressed name: cannot be equal since we don't send them */ + return 0xFFFF; + } else { + /* Not compressed name */ + while (n > 0) { + int c = pbuf_try_get_at(p, response_offset); + if (c < 0) { + return 0xFFFF; + } + if (lwip_tolower((*query)) != lwip_tolower((u8_t)c)) { + return 0xFFFF; + } + if (response_offset == 0xFFFF) { + /* would overflow */ + return 0xFFFF; + } + response_offset++; + ++query; + --n; + } + ++query; + } + n = pbuf_try_get_at(p, response_offset); + if (n < 0) { + return 0xFFFF; + } + } while (n != 0); + + if (response_offset == 0xFFFF) { + /* would overflow */ + return 0xFFFF; + } + return (u16_t)(response_offset + 1); +} + +/** + * Walk through a compact encoded DNS name and return the end of the name. + * + * @param p pbuf containing the name + * @param query_idx start index into p pointing to encoded DNS name in the DNS server response + * @return index to end of the name + */ +static u16_t +dns_skip_name(struct pbuf *p, u16_t query_idx) +{ + int n; + u16_t offset = query_idx; + + do { + n = pbuf_try_get_at(p, offset++); + if ((n < 0) || (offset == 0)) { + return 0xFFFF; + } + /** @see RFC 1035 - 4.1.4. Message compression */ + if ((n & 0xc0) == 0xc0) { + /* Compressed name: since we only want to skip it (not check it), stop here */ + break; + } else { + /* Not compressed name */ + if (offset + n >= p->tot_len) { + return 0xFFFF; + } + offset = (u16_t)(offset + n); + } + n = pbuf_try_get_at(p, offset); + if (n < 0) { + return 0xFFFF; + } + } while (n != 0); + + if (offset == 0xFFFF) { + return 0xFFFF; + } + return (u16_t)(offset + 1); +} + +/** + * Send a DNS query packet. + * + * @param idx the DNS table entry index for which to send a request + * @return ERR_OK if packet is sent; an err_t indicating the problem otherwise + */ +static err_t +dns_send(u8_t idx) +{ + err_t err; + struct dns_hdr hdr; + struct dns_query qry; + struct pbuf *p; + u16_t query_idx, copy_len; + const char *hostname, *hostname_part; + u8_t n; + u8_t pcb_idx; + struct dns_table_entry *entry = &dns_table[idx]; + + LWIP_DEBUGF(DNS_DEBUG, ("dns_send: dns_servers[%"U16_F"] \"%s\": request\n", + (u16_t)(entry->server_idx), entry->name)); + LWIP_ASSERT("dns server out of array", entry->server_idx < DNS_MAX_SERVERS); + if (ip_addr_isany_val(dns_servers[entry->server_idx]) +#if LWIP_DNS_SUPPORT_MDNS_QUERIES + && !entry->is_mdns +#endif + ) { + /* DNS server not valid anymore, e.g. PPP netif has been shut down */ + /* call specified callback function if provided */ + dns_call_found(idx, NULL); + /* flush this entry */ + entry->state = DNS_STATE_UNUSED; + return ERR_OK; + } + + /* if here, we have either a new query or a retry on a previous query to process */ + p = pbuf_alloc(PBUF_TRANSPORT, (u16_t)(SIZEOF_DNS_HDR + strlen(entry->name) + 2 + + SIZEOF_DNS_QUERY), PBUF_RAM); + if (p != NULL) { + const ip_addr_t *dst; + u16_t dst_port; + /* fill dns header */ + memset(&hdr, 0, SIZEOF_DNS_HDR); + hdr.id = lwip_htons(entry->txid); + hdr.flags1 = DNS_FLAG1_RD; + hdr.numquestions = PP_HTONS(1); + pbuf_take(p, &hdr, SIZEOF_DNS_HDR); + hostname = entry->name; + --hostname; + + /* convert hostname into suitable query format. */ + query_idx = SIZEOF_DNS_HDR; + do { + ++hostname; + hostname_part = hostname; + for (n = 0; *hostname != '.' && *hostname != 0; ++hostname) { + ++n; + } + copy_len = (u16_t)(hostname - hostname_part); + if (query_idx + n + 1 > 0xFFFF) { + /* u16_t overflow */ + goto overflow_return; + } + pbuf_put_at(p, query_idx, n); + pbuf_take_at(p, hostname_part, copy_len, (u16_t)(query_idx + 1)); + query_idx = (u16_t)(query_idx + n + 1); + } while (*hostname != 0); + pbuf_put_at(p, query_idx, 0); + query_idx++; + + /* fill dns query */ + if (LWIP_DNS_ADDRTYPE_IS_IPV6(entry->reqaddrtype)) { + qry.type = PP_HTONS(DNS_RRTYPE_AAAA); + } else { + qry.type = PP_HTONS(DNS_RRTYPE_A); + } + qry.cls = PP_HTONS(DNS_RRCLASS_IN); + pbuf_take_at(p, &qry, SIZEOF_DNS_QUERY, query_idx); + +#if ((LWIP_DNS_SECURE & LWIP_DNS_SECURE_RAND_SRC_PORT) != 0) + pcb_idx = entry->pcb_idx; +#else + pcb_idx = 0; +#endif + /* send dns packet */ + LWIP_DEBUGF(DNS_DEBUG, ("sending DNS request ID %d for name \"%s\" to server %d\r\n", + entry->txid, entry->name, entry->server_idx)); +#if LWIP_DNS_SUPPORT_MDNS_QUERIES + if (entry->is_mdns) { + dst_port = DNS_MQUERY_PORT; +#if LWIP_IPV6 + if (LWIP_DNS_ADDRTYPE_IS_IPV6(entry->reqaddrtype)) { + dst = &dns_mquery_v6group; + } +#endif +#if LWIP_IPV4 && LWIP_IPV6 + else +#endif +#if LWIP_IPV4 + { + dst = &dns_mquery_v4group; + } +#endif + } else +#endif /* LWIP_DNS_SUPPORT_MDNS_QUERIES */ + { + dst_port = DNS_SERVER_PORT; + dst = &dns_servers[entry->server_idx]; + } + err = udp_sendto(dns_pcbs[pcb_idx], p, dst, dst_port); + + /* free pbuf */ + pbuf_free(p); + } else { + err = ERR_MEM; + } + + return err; +overflow_return: + pbuf_free(p); + return ERR_VAL; +} + +#if ((LWIP_DNS_SECURE & LWIP_DNS_SECURE_RAND_SRC_PORT) != 0) +static struct udp_pcb * +dns_alloc_random_port(void) +{ + err_t err; + struct udp_pcb *pcb; + + pcb = udp_new_ip_type(IPADDR_TYPE_ANY); + if (pcb == NULL) { + /* out of memory, have to reuse an existing pcb */ + return NULL; + } + do { + u16_t port = (u16_t)DNS_RAND_TXID(); + if (DNS_PORT_ALLOWED(port)) { + err = udp_bind(pcb, IP_ANY_TYPE, port); + } else { + /* this port is not allowed, try again */ + err = ERR_USE; + } + } while (err == ERR_USE); + if (err != ERR_OK) { + udp_remove(pcb); + return NULL; + } + udp_recv(pcb, dns_recv, NULL); + return pcb; +} + +/** + * dns_alloc_pcb() - allocates a new pcb (or reuses an existing one) to be used + * for sending a request + * + * @return an index into dns_pcbs + */ +static u8_t +dns_alloc_pcb(void) +{ + u8_t i; + u8_t idx; + + for (i = 0; i < DNS_MAX_SOURCE_PORTS; i++) { + if (dns_pcbs[i] == NULL) { + break; + } + } + if (i < DNS_MAX_SOURCE_PORTS) { + dns_pcbs[i] = dns_alloc_random_port(); + if (dns_pcbs[i] != NULL) { + /* succeeded */ + dns_last_pcb_idx = i; + return i; + } + } + /* if we come here, creating a new UDP pcb failed, so we have to use + an already existing one (so overflow is no issue) */ + for (i = 0, idx = (u8_t)(dns_last_pcb_idx + 1); i < DNS_MAX_SOURCE_PORTS; i++, idx++) { + if (idx >= DNS_MAX_SOURCE_PORTS) { + idx = 0; + } + if (dns_pcbs[idx] != NULL) { + dns_last_pcb_idx = idx; + return idx; + } + } + return DNS_MAX_SOURCE_PORTS; +} +#endif /* ((LWIP_DNS_SECURE & LWIP_DNS_SECURE_RAND_SRC_PORT) != 0) */ + +/** + * dns_call_found() - call the found callback and check if there are duplicate + * entries for the given hostname. If there are any, their found callback will + * be called and they will be removed. + * + * @param idx dns table index of the entry that is resolved or removed + * @param addr IP address for the hostname (or NULL on error or memory shortage) + */ +static void +dns_call_found(u8_t idx, ip_addr_t *addr) +{ +#if ((LWIP_DNS_SECURE & (LWIP_DNS_SECURE_NO_MULTIPLE_OUTSTANDING | LWIP_DNS_SECURE_RAND_SRC_PORT)) != 0) + u8_t i; +#endif + +#if LWIP_IPV4 && LWIP_IPV6 + if (addr != NULL) { + /* check that address type matches the request and adapt the table entry */ + if (IP_IS_V6_VAL(*addr)) { + LWIP_ASSERT("invalid response", LWIP_DNS_ADDRTYPE_IS_IPV6(dns_table[idx].reqaddrtype)); + dns_table[idx].reqaddrtype = LWIP_DNS_ADDRTYPE_IPV6; + } else { + LWIP_ASSERT("invalid response", !LWIP_DNS_ADDRTYPE_IS_IPV6(dns_table[idx].reqaddrtype)); + dns_table[idx].reqaddrtype = LWIP_DNS_ADDRTYPE_IPV4; + } + } +#endif /* LWIP_IPV4 && LWIP_IPV6 */ + +#if ((LWIP_DNS_SECURE & LWIP_DNS_SECURE_NO_MULTIPLE_OUTSTANDING) != 0) + for (i = 0; i < DNS_MAX_REQUESTS; i++) { + if (dns_requests[i].found && (dns_requests[i].dns_table_idx == idx)) { + (*dns_requests[i].found)(dns_table[idx].name, addr, dns_requests[i].arg); + /* flush this entry */ + dns_requests[i].found = NULL; + } + } +#else + if (dns_requests[idx].found) { + (*dns_requests[idx].found)(dns_table[idx].name, addr, dns_requests[idx].arg); + } + dns_requests[idx].found = NULL; +#endif +#if ((LWIP_DNS_SECURE & LWIP_DNS_SECURE_RAND_SRC_PORT) != 0) + /* close the pcb used unless other request are using it */ + for (i = 0; i < DNS_MAX_REQUESTS; i++) { + if (i == idx) { + continue; /* only check other requests */ + } + if (dns_table[i].state == DNS_STATE_ASKING) { + if (dns_table[i].pcb_idx == dns_table[idx].pcb_idx) { + /* another request is still using the same pcb */ + dns_table[idx].pcb_idx = DNS_MAX_SOURCE_PORTS; + break; + } + } + } + if (dns_table[idx].pcb_idx < DNS_MAX_SOURCE_PORTS) { + /* if we come here, the pcb is not used any more and can be removed */ + udp_remove(dns_pcbs[dns_table[idx].pcb_idx]); + dns_pcbs[dns_table[idx].pcb_idx] = NULL; + dns_table[idx].pcb_idx = DNS_MAX_SOURCE_PORTS; + } +#endif +} + +/* Create a query transmission ID that is unique for all outstanding queries */ +static u16_t +dns_create_txid(void) +{ + u16_t txid; + u8_t i; + +again: + txid = (u16_t)DNS_RAND_TXID(); + + /* check whether the ID is unique */ + for (i = 0; i < DNS_TABLE_SIZE; i++) { + if ((dns_table[i].state == DNS_STATE_ASKING) && + (dns_table[i].txid == txid)) { + /* ID already used by another pending query */ + goto again; + } + } + + return txid; +} + +/** + * Check whether there are other backup DNS servers available to try + */ +static u8_t +dns_backupserver_available(struct dns_table_entry *pentry) +{ + u8_t ret = 0; + + if (pentry) { + if ((pentry->server_idx + 1 < DNS_MAX_SERVERS) && !ip_addr_isany_val(dns_servers[pentry->server_idx + 1])) { + ret = 1; + } + } + + return ret; +} + +/** + * dns_check_entry() - see if entry has not yet been queried and, if so, sends out a query. + * Check an entry in the dns_table: + * - send out query for new entries + * - retry old pending entries on timeout (also with different servers) + * - remove completed entries from the table if their TTL has expired + * + * @param i index of the dns_table entry to check + */ +static void +dns_check_entry(u8_t i) +{ + err_t err; + struct dns_table_entry *entry = &dns_table[i]; + + LWIP_ASSERT("array index out of bounds", i < DNS_TABLE_SIZE); + + switch (entry->state) { + case DNS_STATE_NEW: + /* initialize new entry */ + entry->txid = dns_create_txid(); + entry->state = DNS_STATE_ASKING; + entry->server_idx = 0; + entry->tmr = 1; + entry->retries = 0; + + /* send DNS packet for this entry */ + err = dns_send(i); + if (err != ERR_OK) { + LWIP_DEBUGF(DNS_DEBUG | LWIP_DBG_LEVEL_WARNING, + ("dns_send returned error: %s\n", lwip_strerr(err))); + } + break; + case DNS_STATE_ASKING: + if (--entry->tmr == 0) { + if (++entry->retries == DNS_MAX_RETRIES) { + if (dns_backupserver_available(entry) +#if LWIP_DNS_SUPPORT_MDNS_QUERIES + && !entry->is_mdns +#endif /* LWIP_DNS_SUPPORT_MDNS_QUERIES */ + ) { + /* change of server */ + entry->server_idx++; + entry->tmr = 1; + entry->retries = 0; + } else { + LWIP_DEBUGF(DNS_DEBUG, ("dns_check_entry: \"%s\": timeout\n", entry->name)); + /* call specified callback function if provided */ + dns_call_found(i, NULL); + /* flush this entry */ + entry->state = DNS_STATE_UNUSED; + break; + } + } else { + /* wait longer for the next retry */ + entry->tmr = entry->retries; + } + + /* send DNS packet for this entry */ + err = dns_send(i); + if (err != ERR_OK) { + LWIP_DEBUGF(DNS_DEBUG | LWIP_DBG_LEVEL_WARNING, + ("dns_send returned error: %s\n", lwip_strerr(err))); + } + } + break; + case DNS_STATE_DONE: + /* if the time to live is nul */ + if ((entry->ttl == 0) || (--entry->ttl == 0)) { + LWIP_DEBUGF(DNS_DEBUG, ("dns_check_entry: \"%s\": flush\n", entry->name)); + /* flush this entry, there cannot be any related pending entries in this state */ + entry->state = DNS_STATE_UNUSED; + } + break; + case DNS_STATE_UNUSED: + /* nothing to do */ + break; + default: + LWIP_ASSERT("unknown dns_table entry state:", 0); + break; + } +} + +/** + * Call dns_check_entry for each entry in dns_table - check all entries. + */ +static void +dns_check_entries(void) +{ + u8_t i; + + for (i = 0; i < DNS_TABLE_SIZE; ++i) { + dns_check_entry(i); + } +} + +/** + * Save TTL and call dns_call_found for correct response. + */ +static void +dns_correct_response(u8_t idx, u32_t ttl) +{ + struct dns_table_entry *entry = &dns_table[idx]; + + entry->state = DNS_STATE_DONE; + + LWIP_DEBUGF(DNS_DEBUG, ("dns_recv: \"%s\": response = ", entry->name)); + ip_addr_debug_print_val(DNS_DEBUG, entry->ipaddr); + LWIP_DEBUGF(DNS_DEBUG, ("\n")); + + /* read the answer resource record's TTL, and maximize it if needed */ + entry->ttl = ttl; + if (entry->ttl > DNS_MAX_TTL) { + entry->ttl = DNS_MAX_TTL; + } + dns_call_found(idx, &entry->ipaddr); + + if (entry->ttl == 0) { + /* RFC 883, page 29: "Zero values are + interpreted to mean that the RR can only be used for the + transaction in progress, and should not be cached." + -> flush this entry now */ + /* entry reused during callback? */ + if (entry->state == DNS_STATE_DONE) { + entry->state = DNS_STATE_UNUSED; + } + } +} + +/** + * Receive input function for DNS response packets arriving for the dns UDP pcb. + */ +static void +dns_recv(void *arg, struct udp_pcb *pcb, struct pbuf *p, const ip_addr_t *addr, u16_t port) +{ + u8_t i; + u16_t txid; + u16_t res_idx; + struct dns_hdr hdr; + struct dns_answer ans; + struct dns_query qry; + u16_t nquestions, nanswers; + + LWIP_UNUSED_ARG(arg); + LWIP_UNUSED_ARG(pcb); + LWIP_UNUSED_ARG(port); + + /* is the dns message big enough ? */ + if (p->tot_len < (SIZEOF_DNS_HDR + SIZEOF_DNS_QUERY)) { + LWIP_DEBUGF(DNS_DEBUG, ("dns_recv: pbuf too small\n")); + /* free pbuf and return */ + goto ignore_packet; + } + + /* copy dns payload inside static buffer for processing */ + if (pbuf_copy_partial(p, &hdr, SIZEOF_DNS_HDR, 0) == SIZEOF_DNS_HDR) { + /* Match the ID in the DNS header with the name table. */ + txid = lwip_htons(hdr.id); + for (i = 0; i < DNS_TABLE_SIZE; i++) { + struct dns_table_entry *entry = &dns_table[i]; + if ((entry->state == DNS_STATE_ASKING) && + (entry->txid == txid)) { + + /* We only care about the question(s) and the answers. The authrr + and the extrarr are simply discarded. */ + nquestions = lwip_htons(hdr.numquestions); + nanswers = lwip_htons(hdr.numanswers); + + /* Check for correct response. */ + if ((hdr.flags1 & DNS_FLAG1_RESPONSE) == 0) { + LWIP_DEBUGF(DNS_DEBUG, ("dns_recv: \"%s\": not a response\n", entry->name)); + goto ignore_packet; /* ignore this packet */ + } + if (nquestions != 1) { + LWIP_DEBUGF(DNS_DEBUG, ("dns_recv: \"%s\": response not match to query\n", entry->name)); + goto ignore_packet; /* ignore this packet */ + } + +#if LWIP_DNS_SUPPORT_MDNS_QUERIES + if (!entry->is_mdns) +#endif /* LWIP_DNS_SUPPORT_MDNS_QUERIES */ + { + /* Check whether response comes from the same network address to which the + question was sent. (RFC 5452) */ + if (!ip_addr_cmp(addr, &dns_servers[entry->server_idx])) { + goto ignore_packet; /* ignore this packet */ + } + } + + /* Check if the name in the "question" part match with the name in the entry and + skip it if equal. */ + res_idx = dns_compare_name(entry->name, p, SIZEOF_DNS_HDR); + if (res_idx == 0xFFFF) { + LWIP_DEBUGF(DNS_DEBUG, ("dns_recv: \"%s\": response not match to query\n", entry->name)); + goto ignore_packet; /* ignore this packet */ + } + + /* check if "question" part matches the request */ + if (pbuf_copy_partial(p, &qry, SIZEOF_DNS_QUERY, res_idx) != SIZEOF_DNS_QUERY) { + goto ignore_packet; /* ignore this packet */ + } + if ((qry.cls != PP_HTONS(DNS_RRCLASS_IN)) || + (LWIP_DNS_ADDRTYPE_IS_IPV6(entry->reqaddrtype) && (qry.type != PP_HTONS(DNS_RRTYPE_AAAA))) || + (!LWIP_DNS_ADDRTYPE_IS_IPV6(entry->reqaddrtype) && (qry.type != PP_HTONS(DNS_RRTYPE_A)))) { + LWIP_DEBUGF(DNS_DEBUG, ("dns_recv: \"%s\": response not match to query\n", entry->name)); + goto ignore_packet; /* ignore this packet */ + } + /* skip the rest of the "question" part */ + if (res_idx + SIZEOF_DNS_QUERY > 0xFFFF) { + goto ignore_packet; + } + res_idx = (u16_t)(res_idx + SIZEOF_DNS_QUERY); + + /* Check for error. If so, call callback to inform. */ + if (hdr.flags2 & DNS_FLAG2_ERR_MASK) { + LWIP_DEBUGF(DNS_DEBUG, ("dns_recv: \"%s\": error in flags\n", entry->name)); + + /* if there is another backup DNS server to try + * then don't stop the DNS request + */ + if (dns_backupserver_available(entry)) { + /* avoid retrying the same server */ + entry->retries = DNS_MAX_RETRIES-1; + entry->tmr = 1; + + /* contact next available server for this entry */ + dns_check_entry(i); + + goto ignore_packet; + } + } else { + while ((nanswers > 0) && (res_idx < p->tot_len)) { + /* skip answer resource record's host name */ + res_idx = dns_skip_name(p, res_idx); + if (res_idx == 0xFFFF) { + goto ignore_packet; /* ignore this packet */ + } + + /* Check for IP address type and Internet class. Others are discarded. */ + if (pbuf_copy_partial(p, &ans, SIZEOF_DNS_ANSWER, res_idx) != SIZEOF_DNS_ANSWER) { + goto ignore_packet; /* ignore this packet */ + } + if (res_idx + SIZEOF_DNS_ANSWER > 0xFFFF) { + goto ignore_packet; + } + res_idx = (u16_t)(res_idx + SIZEOF_DNS_ANSWER); + + if (ans.cls == PP_HTONS(DNS_RRCLASS_IN)) { +#if LWIP_IPV4 + if ((ans.type == PP_HTONS(DNS_RRTYPE_A)) && (ans.len == PP_HTONS(sizeof(ip4_addr_t)))) { +#if LWIP_IPV4 && LWIP_IPV6 + if (!LWIP_DNS_ADDRTYPE_IS_IPV6(entry->reqaddrtype)) +#endif /* LWIP_IPV4 && LWIP_IPV6 */ + { + ip4_addr_t ip4addr; + /* read the IP address after answer resource record's header */ + if (pbuf_copy_partial(p, &ip4addr, sizeof(ip4_addr_t), res_idx) != sizeof(ip4_addr_t)) { + goto ignore_packet; /* ignore this packet */ + } + ip_addr_copy_from_ip4(dns_table[i].ipaddr, ip4addr); + pbuf_free(p); + /* handle correct response */ + dns_correct_response(i, lwip_ntohl(ans.ttl)); + return; + } + } +#endif /* LWIP_IPV4 */ +#if LWIP_IPV6 + if ((ans.type == PP_HTONS(DNS_RRTYPE_AAAA)) && (ans.len == PP_HTONS(sizeof(ip6_addr_p_t)))) { +#if LWIP_IPV4 && LWIP_IPV6 + if (LWIP_DNS_ADDRTYPE_IS_IPV6(entry->reqaddrtype)) +#endif /* LWIP_IPV4 && LWIP_IPV6 */ + { + ip6_addr_p_t ip6addr; + /* read the IP address after answer resource record's header */ + if (pbuf_copy_partial(p, &ip6addr, sizeof(ip6_addr_p_t), res_idx) != sizeof(ip6_addr_p_t)) { + goto ignore_packet; /* ignore this packet */ + } + /* @todo: scope ip6addr? Might be required for link-local addresses at least? */ + ip_addr_copy_from_ip6_packed(dns_table[i].ipaddr, ip6addr); + pbuf_free(p); + /* handle correct response */ + dns_correct_response(i, lwip_ntohl(ans.ttl)); + return; + } + } +#endif /* LWIP_IPV6 */ + } + /* skip this answer */ + if ((int)(res_idx + lwip_htons(ans.len)) > 0xFFFF) { + goto ignore_packet; /* ignore this packet */ + } + res_idx = (u16_t)(res_idx + lwip_htons(ans.len)); + --nanswers; + } +#if LWIP_IPV4 && LWIP_IPV6 + if ((entry->reqaddrtype == LWIP_DNS_ADDRTYPE_IPV4_IPV6) || + (entry->reqaddrtype == LWIP_DNS_ADDRTYPE_IPV6_IPV4)) { + if (entry->reqaddrtype == LWIP_DNS_ADDRTYPE_IPV4_IPV6) { + /* IPv4 failed, try IPv6 */ + dns_table[i].reqaddrtype = LWIP_DNS_ADDRTYPE_IPV6; + } else { + /* IPv6 failed, try IPv4 */ + dns_table[i].reqaddrtype = LWIP_DNS_ADDRTYPE_IPV4; + } + pbuf_free(p); + dns_table[i].state = DNS_STATE_NEW; + dns_check_entry(i); + return; + } +#endif /* LWIP_IPV4 && LWIP_IPV6 */ + LWIP_DEBUGF(DNS_DEBUG, ("dns_recv: \"%s\": error in response\n", entry->name)); + } + /* call callback to indicate error, clean up memory and return */ + pbuf_free(p); + dns_call_found(i, NULL); + dns_table[i].state = DNS_STATE_UNUSED; + return; + } + } + } + +ignore_packet: + /* deallocate memory and return */ + pbuf_free(p); + return; +} + +/** + * Queues a new hostname to resolve and sends out a DNS query for that hostname + * + * @param name the hostname that is to be queried + * @param hostnamelen length of the hostname + * @param found a callback function to be called on success, failure or timeout + * @param callback_arg argument to pass to the callback function + * @return err_t return code. + */ +static err_t +dns_enqueue(const char *name, size_t hostnamelen, dns_found_callback found, + void *callback_arg LWIP_DNS_ADDRTYPE_ARG(u8_t dns_addrtype) LWIP_DNS_ISMDNS_ARG(u8_t is_mdns)) +{ + u8_t i; + u8_t lseq, lseqi; + struct dns_table_entry *entry = NULL; + size_t namelen; + struct dns_req_entry *req; + +#if ((LWIP_DNS_SECURE & LWIP_DNS_SECURE_NO_MULTIPLE_OUTSTANDING) != 0) + u8_t r; + /* check for duplicate entries */ + for (i = 0; i < DNS_TABLE_SIZE; i++) { + if ((dns_table[i].state == DNS_STATE_ASKING) && + (lwip_strnicmp(name, dns_table[i].name, sizeof(dns_table[i].name)) == 0)) { +#if LWIP_IPV4 && LWIP_IPV6 + if (dns_table[i].reqaddrtype != dns_addrtype) { + /* requested address types don't match + this can lead to 2 concurrent requests, but mixing the address types + for the same host should not be that common */ + continue; + } +#endif /* LWIP_IPV4 && LWIP_IPV6 */ + /* this is a duplicate entry, find a free request entry */ + for (r = 0; r < DNS_MAX_REQUESTS; r++) { + if (dns_requests[r].found == 0) { + dns_requests[r].found = found; + dns_requests[r].arg = callback_arg; + dns_requests[r].dns_table_idx = i; + LWIP_DNS_SET_ADDRTYPE(dns_requests[r].reqaddrtype, dns_addrtype); + LWIP_DEBUGF(DNS_DEBUG, ("dns_enqueue: \"%s\": duplicate request\n", name)); + return ERR_INPROGRESS; + } + } + } + } + /* no duplicate entries found */ +#endif + + /* search an unused entry, or the oldest one */ + lseq = 0; + lseqi = DNS_TABLE_SIZE; + for (i = 0; i < DNS_TABLE_SIZE; ++i) { + entry = &dns_table[i]; + /* is it an unused entry ? */ + if (entry->state == DNS_STATE_UNUSED) { + break; + } + /* check if this is the oldest completed entry */ + if (entry->state == DNS_STATE_DONE) { + u8_t age = (u8_t)(dns_seqno - entry->seqno); + if (age > lseq) { + lseq = age; + lseqi = i; + } + } + } + + /* if we don't have found an unused entry, use the oldest completed one */ + if (i == DNS_TABLE_SIZE) { + if ((lseqi >= DNS_TABLE_SIZE) || (dns_table[lseqi].state != DNS_STATE_DONE)) { + /* no entry can be used now, table is full */ + LWIP_DEBUGF(DNS_DEBUG, ("dns_enqueue: \"%s\": DNS entries table is full\n", name)); + return ERR_MEM; + } else { + /* use the oldest completed one */ + i = lseqi; + entry = &dns_table[i]; + } + } + +#if ((LWIP_DNS_SECURE & LWIP_DNS_SECURE_NO_MULTIPLE_OUTSTANDING) != 0) + /* find a free request entry */ + req = NULL; + for (r = 0; r < DNS_MAX_REQUESTS; r++) { + if (dns_requests[r].found == NULL) { + req = &dns_requests[r]; + break; + } + } + if (req == NULL) { + /* no request entry can be used now, table is full */ + LWIP_DEBUGF(DNS_DEBUG, ("dns_enqueue: \"%s\": DNS request entries table is full\n", name)); + return ERR_MEM; + } + req->dns_table_idx = i; +#else + /* in this configuration, the entry index is the same as the request index */ + req = &dns_requests[i]; +#endif + + /* use this entry */ + LWIP_DEBUGF(DNS_DEBUG, ("dns_enqueue: \"%s\": use DNS entry %"U16_F"\n", name, (u16_t)(i))); + + /* fill the entry */ + entry->state = DNS_STATE_NEW; + entry->seqno = dns_seqno; + LWIP_DNS_SET_ADDRTYPE(entry->reqaddrtype, dns_addrtype); + LWIP_DNS_SET_ADDRTYPE(req->reqaddrtype, dns_addrtype); + req->found = found; + req->arg = callback_arg; + namelen = LWIP_MIN(hostnamelen, DNS_MAX_NAME_LENGTH - 1); + MEMCPY(entry->name, name, namelen); + entry->name[namelen] = 0; + +#if ((LWIP_DNS_SECURE & LWIP_DNS_SECURE_RAND_SRC_PORT) != 0) + entry->pcb_idx = dns_alloc_pcb(); + if (entry->pcb_idx >= DNS_MAX_SOURCE_PORTS) { + /* failed to get a UDP pcb */ + LWIP_DEBUGF(DNS_DEBUG, ("dns_enqueue: \"%s\": failed to allocate a pcb\n", name)); + entry->state = DNS_STATE_UNUSED; + req->found = NULL; + return ERR_MEM; + } + LWIP_DEBUGF(DNS_DEBUG, ("dns_enqueue: \"%s\": use DNS pcb %"U16_F"\n", name, (u16_t)(entry->pcb_idx))); +#endif + +#if LWIP_DNS_SUPPORT_MDNS_QUERIES + entry->is_mdns = is_mdns; +#endif + + dns_seqno++; + + /* force to send query without waiting timer */ + dns_check_entry(i); + + /* dns query is enqueued */ + return ERR_INPROGRESS; +} + +/** + * @ingroup dns + * Resolve a hostname (string) into an IP address. + * NON-BLOCKING callback version for use with raw API!!! + * + * Returns immediately with one of err_t return codes: + * - ERR_OK if hostname is a valid IP address string or the host + * name is already in the local names table. + * - ERR_INPROGRESS enqueue a request to be sent to the DNS server + * for resolution if no errors are present. + * - ERR_ARG: dns client not initialized or invalid hostname + * + * @param hostname the hostname that is to be queried + * @param addr pointer to a ip_addr_t where to store the address if it is already + * cached in the dns_table (only valid if ERR_OK is returned!) + * @param found a callback function to be called on success, failure or timeout (only if + * ERR_INPROGRESS is returned!) + * @param callback_arg argument to pass to the callback function + * @return a err_t return code. + */ +err_t +dns_gethostbyname(const char *hostname, ip_addr_t *addr, dns_found_callback found, + void *callback_arg) +{ + return dns_gethostbyname_addrtype(hostname, addr, found, callback_arg, LWIP_DNS_ADDRTYPE_DEFAULT); +} + +/** + * @ingroup dns + * Like dns_gethostbyname, but returned address type can be controlled: + * @param hostname the hostname that is to be queried + * @param addr pointer to a ip_addr_t where to store the address if it is already + * cached in the dns_table (only valid if ERR_OK is returned!) + * @param found a callback function to be called on success, failure or timeout (only if + * ERR_INPROGRESS is returned!) + * @param callback_arg argument to pass to the callback function + * @param dns_addrtype - LWIP_DNS_ADDRTYPE_IPV4_IPV6: try to resolve IPv4 first, try IPv6 if IPv4 fails only + * - LWIP_DNS_ADDRTYPE_IPV6_IPV4: try to resolve IPv6 first, try IPv4 if IPv6 fails only + * - LWIP_DNS_ADDRTYPE_IPV4: try to resolve IPv4 only + * - LWIP_DNS_ADDRTYPE_IPV6: try to resolve IPv6 only + */ +err_t +dns_gethostbyname_addrtype(const char *hostname, ip_addr_t *addr, dns_found_callback found, + void *callback_arg, u8_t dns_addrtype) +{ + size_t hostnamelen; +#if LWIP_DNS_SUPPORT_MDNS_QUERIES + u8_t is_mdns; +#endif + /* not initialized or no valid server yet, or invalid addr pointer + * or invalid hostname or invalid hostname length */ + if ((addr == NULL) || + (!hostname) || (!hostname[0])) { + return ERR_ARG; + } +#if ((LWIP_DNS_SECURE & LWIP_DNS_SECURE_RAND_SRC_PORT) == 0) + if (dns_pcbs[0] == NULL) { + return ERR_ARG; + } +#endif + hostnamelen = strlen(hostname); + if (hostnamelen >= DNS_MAX_NAME_LENGTH) { + LWIP_DEBUGF(DNS_DEBUG, ("dns_gethostbyname: name too long to resolve")); + return ERR_ARG; + } + + +#if LWIP_HAVE_LOOPIF + if (strcmp(hostname, "localhost") == 0) { + ip_addr_set_loopback(LWIP_DNS_ADDRTYPE_IS_IPV6(dns_addrtype), addr); + return ERR_OK; + } +#endif /* LWIP_HAVE_LOOPIF */ + + /* host name already in octet notation? set ip addr and return ERR_OK */ + if (ipaddr_aton(hostname, addr)) { +#if LWIP_IPV4 && LWIP_IPV6 + if ((IP_IS_V6(addr) && (dns_addrtype != LWIP_DNS_ADDRTYPE_IPV4)) || + (IP_IS_V4(addr) && (dns_addrtype != LWIP_DNS_ADDRTYPE_IPV6))) +#endif /* LWIP_IPV4 && LWIP_IPV6 */ + { + return ERR_OK; + } + } + /* already have this address cached? */ + if (dns_lookup(hostname, addr LWIP_DNS_ADDRTYPE_ARG(dns_addrtype)) == ERR_OK) { + return ERR_OK; + } +#if LWIP_IPV4 && LWIP_IPV6 + if ((dns_addrtype == LWIP_DNS_ADDRTYPE_IPV4_IPV6) || (dns_addrtype == LWIP_DNS_ADDRTYPE_IPV6_IPV4)) { + /* fallback to 2nd IP type and try again to lookup */ + u8_t fallback; + if (dns_addrtype == LWIP_DNS_ADDRTYPE_IPV4_IPV6) { + fallback = LWIP_DNS_ADDRTYPE_IPV6; + } else { + fallback = LWIP_DNS_ADDRTYPE_IPV4; + } + if (dns_lookup(hostname, addr LWIP_DNS_ADDRTYPE_ARG(fallback)) == ERR_OK) { + return ERR_OK; + } + } +#else /* LWIP_IPV4 && LWIP_IPV6 */ + LWIP_UNUSED_ARG(dns_addrtype); +#endif /* LWIP_IPV4 && LWIP_IPV6 */ + +#if LWIP_DNS_SUPPORT_MDNS_QUERIES + if (strstr(hostname, ".local") == &hostname[hostnamelen] - 6) { + is_mdns = 1; + } else { + is_mdns = 0; + } + + if (!is_mdns) +#endif /* LWIP_DNS_SUPPORT_MDNS_QUERIES */ + { + /* prevent calling found callback if no server is set, return error instead */ + if (ip_addr_isany_val(dns_servers[0])) { + return ERR_VAL; + } + } + + /* queue query with specified callback */ + return dns_enqueue(hostname, hostnamelen, found, callback_arg LWIP_DNS_ADDRTYPE_ARG(dns_addrtype) + LWIP_DNS_ISMDNS_ARG(is_mdns)); +} + +#endif /* LWIP_DNS */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/inet_chksum.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/inet_chksum.c new file mode 100644 index 0000000000000000000000000000000000000000..818c68f45055d2eeba0bc9db6b7d8cdd3d85bc36 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/inet_chksum.c @@ -0,0 +1,608 @@ +/** + * @file + * Internet checksum functions.\n + * + * These are some reference implementations of the checksum algorithm, with the + * aim of being simple, correct and fully portable. Checksumming is the + * first thing you would want to optimize for your platform. If you create + * your own version, link it in and in your cc.h put: + * + * \#define LWIP_CHKSUM your_checksum_routine + * + * Or you can select from the implementations below by defining + * LWIP_CHKSUM_ALGORITHM to 1, 2 or 3. + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#include "lwip/opt.h" + +#include "lwip/inet_chksum.h" +#include "lwip/def.h" +#include "lwip/ip_addr.h" + +#include + +#ifndef LWIP_CHKSUM +# define LWIP_CHKSUM lwip_standard_chksum +# ifndef LWIP_CHKSUM_ALGORITHM +# define LWIP_CHKSUM_ALGORITHM 2 +# endif +u16_t lwip_standard_chksum(const void *dataptr, int len); +#endif +/* If none set: */ +#ifndef LWIP_CHKSUM_ALGORITHM +# define LWIP_CHKSUM_ALGORITHM 0 +#endif + +#if (LWIP_CHKSUM_ALGORITHM == 1) /* Version #1 */ +/** + * lwip checksum + * + * @param dataptr points to start of data to be summed at any boundary + * @param len length of data to be summed + * @return host order (!) lwip checksum (non-inverted Internet sum) + * + * @note accumulator size limits summable length to 64k + * @note host endianess is irrelevant (p3 RFC1071) + */ +u16_t +lwip_standard_chksum(const void *dataptr, int len) +{ + u32_t acc; + u16_t src; + const u8_t *octetptr; + + acc = 0; + /* dataptr may be at odd or even addresses */ + octetptr = (const u8_t *)dataptr; + while (len > 1) { + /* declare first octet as most significant + thus assume network order, ignoring host order */ + src = (*octetptr) << 8; + octetptr++; + /* declare second octet as least significant */ + src |= (*octetptr); + octetptr++; + acc += src; + len -= 2; + } + if (len > 0) { + /* accumulate remaining octet */ + src = (*octetptr) << 8; + acc += src; + } + /* add deferred carry bits */ + acc = (acc >> 16) + (acc & 0x0000ffffUL); + if ((acc & 0xffff0000UL) != 0) { + acc = (acc >> 16) + (acc & 0x0000ffffUL); + } + /* This maybe a little confusing: reorder sum using lwip_htons() + instead of lwip_ntohs() since it has a little less call overhead. + The caller must invert bits for Internet sum ! */ + return lwip_htons((u16_t)acc); +} +#endif + +#if (LWIP_CHKSUM_ALGORITHM == 2) /* Alternative version #2 */ +/* + * Curt McDowell + * Broadcom Corp. + * csm@broadcom.com + * + * IP checksum two bytes at a time with support for + * unaligned buffer. + * Works for len up to and including 0x20000. + * by Curt McDowell, Broadcom Corp. 12/08/2005 + * + * @param dataptr points to start of data to be summed at any boundary + * @param len length of data to be summed + * @return host order (!) lwip checksum (non-inverted Internet sum) + */ +u16_t +lwip_standard_chksum(const void *dataptr, int len) +{ + const u8_t *pb = (const u8_t *)dataptr; + const u16_t *ps; + u16_t t = 0; + u32_t sum = 0; + int odd = ((mem_ptr_t)pb & 1); + + /* Get aligned to u16_t */ + if (odd && len > 0) { + ((u8_t *)&t)[1] = *pb++; + len--; + } + + /* Add the bulk of the data */ + ps = (const u16_t *)(const void *)pb; + while (len > 1) { + sum += *ps++; + len -= 2; + } + + /* Consume left-over byte, if any */ + if (len > 0) { + ((u8_t *)&t)[0] = *(const u8_t *)ps; + } + + /* Add end bytes */ + sum += t; + + /* Fold 32-bit sum to 16 bits + calling this twice is probably faster than if statements... */ + sum = FOLD_U32T(sum); + sum = FOLD_U32T(sum); + + /* Swap if alignment was odd */ + if (odd) { + sum = SWAP_BYTES_IN_WORD(sum); + } + + return (u16_t)sum; +} +#endif + +#if (LWIP_CHKSUM_ALGORITHM == 3) /* Alternative version #3 */ +/** + * An optimized checksum routine. Basically, it uses loop-unrolling on + * the checksum loop, treating the head and tail bytes specially, whereas + * the inner loop acts on 8 bytes at a time. + * + * @arg start of buffer to be checksummed. May be an odd byte address. + * @len number of bytes in the buffer to be checksummed. + * @return host order (!) lwip checksum (non-inverted Internet sum) + * + * by Curt McDowell, Broadcom Corp. December 8th, 2005 + */ +u16_t +lwip_standard_chksum(const void *dataptr, int len) +{ + const u8_t *pb = (const u8_t *)dataptr; + const u16_t *ps; + u16_t t = 0; + const u32_t *pl; + u32_t sum = 0, tmp; + /* starts at odd byte address? */ + int odd = ((mem_ptr_t)pb & 1); + + if (odd && len > 0) { + ((u8_t *)&t)[1] = *pb++; + len--; + } + + ps = (const u16_t *)(const void *)pb; + + if (((mem_ptr_t)ps & 3) && len > 1) { + sum += *ps++; + len -= 2; + } + + pl = (const u32_t *)(const void *)ps; + + while (len > 7) { + tmp = sum + *pl++; /* ping */ + if (tmp < sum) { + tmp++; /* add back carry */ + } + + sum = tmp + *pl++; /* pong */ + if (sum < tmp) { + sum++; /* add back carry */ + } + + len -= 8; + } + + /* make room in upper bits */ + sum = FOLD_U32T(sum); + + ps = (const u16_t *)pl; + + /* 16-bit aligned word remaining? */ + while (len > 1) { + sum += *ps++; + len -= 2; + } + + /* dangling tail byte remaining? */ + if (len > 0) { /* include odd byte */ + ((u8_t *)&t)[0] = *(const u8_t *)ps; + } + + sum += t; /* add end bytes */ + + /* Fold 32-bit sum to 16 bits + calling this twice is probably faster than if statements... */ + sum = FOLD_U32T(sum); + sum = FOLD_U32T(sum); + + if (odd) { + sum = SWAP_BYTES_IN_WORD(sum); + } + + return (u16_t)sum; +} +#endif + +/** Parts of the pseudo checksum which are common to IPv4 and IPv6 */ +static u16_t +inet_cksum_pseudo_base(struct pbuf *p, u8_t proto, u16_t proto_len, u32_t acc) +{ + struct pbuf *q; + int swapped = 0; + + /* iterate through all pbuf in chain */ + for (q = p; q != NULL; q = q->next) { + LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): checksumming pbuf %p (has next %p) \n", + (void *)q, (void *)q->next)); + acc += LWIP_CHKSUM(q->payload, q->len); + /*LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): unwrapped lwip_chksum()=%"X32_F" \n", acc));*/ + /* just executing this next line is probably faster that the if statement needed + to check whether we really need to execute it, and does no harm */ + acc = FOLD_U32T(acc); + if (q->len % 2 != 0) { + swapped = !swapped; + acc = SWAP_BYTES_IN_WORD(acc); + } + /*LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): wrapped lwip_chksum()=%"X32_F" \n", acc));*/ + } + + if (swapped) { + acc = SWAP_BYTES_IN_WORD(acc); + } + + acc += (u32_t)lwip_htons((u16_t)proto); + acc += (u32_t)lwip_htons(proto_len); + + /* Fold 32-bit sum to 16 bits + calling this twice is probably faster than if statements... */ + acc = FOLD_U32T(acc); + acc = FOLD_U32T(acc); + LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): pbuf chain lwip_chksum()=%"X32_F"\n", acc)); + return (u16_t)~(acc & 0xffffUL); +} + +#if LWIP_IPV4 +/* inet_chksum_pseudo: + * + * Calculates the IPv4 pseudo Internet checksum used by TCP and UDP for a pbuf chain. + * IP addresses are expected to be in network byte order. + * + * @param p chain of pbufs over that a checksum should be calculated (ip data part) + * @param src source ip address (used for checksum of pseudo header) + * @param dst destination ip address (used for checksum of pseudo header) + * @param proto ip protocol (used for checksum of pseudo header) + * @param proto_len length of the ip data part (used for checksum of pseudo header) + * @return checksum (as u16_t) to be saved directly in the protocol header + */ +u16_t +inet_chksum_pseudo(struct pbuf *p, u8_t proto, u16_t proto_len, + const ip4_addr_t *src, const ip4_addr_t *dest) +{ + u32_t acc; + u32_t addr; + + addr = ip4_addr_get_u32(src); + acc = (addr & 0xffffUL); + acc = (u32_t)(acc + ((addr >> 16) & 0xffffUL)); + addr = ip4_addr_get_u32(dest); + acc = (u32_t)(acc + (addr & 0xffffUL)); + acc = (u32_t)(acc + ((addr >> 16) & 0xffffUL)); + /* fold down to 16 bits */ + acc = FOLD_U32T(acc); + acc = FOLD_U32T(acc); + + return inet_cksum_pseudo_base(p, proto, proto_len, acc); +} +#endif /* LWIP_IPV4 */ + +#if LWIP_IPV6 +/** + * Calculates the checksum with IPv6 pseudo header used by TCP and UDP for a pbuf chain. + * IPv6 addresses are expected to be in network byte order. + * + * @param p chain of pbufs over that a checksum should be calculated (ip data part) + * @param proto ipv6 protocol/next header (used for checksum of pseudo header) + * @param proto_len length of the ipv6 payload (used for checksum of pseudo header) + * @param src source ipv6 address (used for checksum of pseudo header) + * @param dest destination ipv6 address (used for checksum of pseudo header) + * @return checksum (as u16_t) to be saved directly in the protocol header + */ +u16_t +ip6_chksum_pseudo(struct pbuf *p, u8_t proto, u16_t proto_len, + const ip6_addr_t *src, const ip6_addr_t *dest) +{ + u32_t acc = 0; + u32_t addr; + u8_t addr_part; + + for (addr_part = 0; addr_part < 4; addr_part++) { + addr = src->addr[addr_part]; + acc = (u32_t)(acc + (addr & 0xffffUL)); + acc = (u32_t)(acc + ((addr >> 16) & 0xffffUL)); + addr = dest->addr[addr_part]; + acc = (u32_t)(acc + (addr & 0xffffUL)); + acc = (u32_t)(acc + ((addr >> 16) & 0xffffUL)); + } + /* fold down to 16 bits */ + acc = FOLD_U32T(acc); + acc = FOLD_U32T(acc); + + return inet_cksum_pseudo_base(p, proto, proto_len, acc); +} +#endif /* LWIP_IPV6 */ + +/* ip_chksum_pseudo: + * + * Calculates the IPv4 or IPv6 pseudo Internet checksum used by TCP and UDP for a pbuf chain. + * IP addresses are expected to be in network byte order. + * + * @param p chain of pbufs over that a checksum should be calculated (ip data part) + * @param src source ip address (used for checksum of pseudo header) + * @param dst destination ip address (used for checksum of pseudo header) + * @param proto ip protocol (used for checksum of pseudo header) + * @param proto_len length of the ip data part (used for checksum of pseudo header) + * @return checksum (as u16_t) to be saved directly in the protocol header + */ +u16_t +ip_chksum_pseudo(struct pbuf *p, u8_t proto, u16_t proto_len, + const ip_addr_t *src, const ip_addr_t *dest) +{ +#if LWIP_IPV6 + if (IP_IS_V6(dest)) { + return ip6_chksum_pseudo(p, proto, proto_len, ip_2_ip6(src), ip_2_ip6(dest)); + } +#endif /* LWIP_IPV6 */ +#if LWIP_IPV4 && LWIP_IPV6 + else +#endif /* LWIP_IPV4 && LWIP_IPV6 */ +#if LWIP_IPV4 + { + return inet_chksum_pseudo(p, proto, proto_len, ip_2_ip4(src), ip_2_ip4(dest)); + } +#endif /* LWIP_IPV4 */ +} + +/** Parts of the pseudo checksum which are common to IPv4 and IPv6 */ +static u16_t +inet_cksum_pseudo_partial_base(struct pbuf *p, u8_t proto, u16_t proto_len, + u16_t chksum_len, u32_t acc) +{ + struct pbuf *q; + int swapped = 0; + u16_t chklen; + + /* iterate through all pbuf in chain */ + for (q = p; (q != NULL) && (chksum_len > 0); q = q->next) { + LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): checksumming pbuf %p (has next %p) \n", + (void *)q, (void *)q->next)); + chklen = q->len; + if (chklen > chksum_len) { + chklen = chksum_len; + } + acc += LWIP_CHKSUM(q->payload, chklen); + chksum_len = (u16_t)(chksum_len - chklen); + LWIP_ASSERT("delete me", chksum_len < 0x7fff); + /*LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): unwrapped lwip_chksum()=%"X32_F" \n", acc));*/ + /* fold the upper bit down */ + acc = FOLD_U32T(acc); + if (q->len % 2 != 0) { + swapped = !swapped; + acc = SWAP_BYTES_IN_WORD(acc); + } + /*LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): wrapped lwip_chksum()=%"X32_F" \n", acc));*/ + } + + if (swapped) { + acc = SWAP_BYTES_IN_WORD(acc); + } + + acc += (u32_t)lwip_htons((u16_t)proto); + acc += (u32_t)lwip_htons(proto_len); + + /* Fold 32-bit sum to 16 bits + calling this twice is probably faster than if statements... */ + acc = FOLD_U32T(acc); + acc = FOLD_U32T(acc); + LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): pbuf chain lwip_chksum()=%"X32_F"\n", acc)); + return (u16_t)~(acc & 0xffffUL); +} + +#if LWIP_IPV4 +/* inet_chksum_pseudo_partial: + * + * Calculates the IPv4 pseudo Internet checksum used by TCP and UDP for a pbuf chain. + * IP addresses are expected to be in network byte order. + * + * @param p chain of pbufs over that a checksum should be calculated (ip data part) + * @param src source ip address (used for checksum of pseudo header) + * @param dst destination ip address (used for checksum of pseudo header) + * @param proto ip protocol (used for checksum of pseudo header) + * @param proto_len length of the ip data part (used for checksum of pseudo header) + * @return checksum (as u16_t) to be saved directly in the protocol header + */ +u16_t +inet_chksum_pseudo_partial(struct pbuf *p, u8_t proto, u16_t proto_len, + u16_t chksum_len, const ip4_addr_t *src, const ip4_addr_t *dest) +{ + u32_t acc; + u32_t addr; + + addr = ip4_addr_get_u32(src); + acc = (addr & 0xffffUL); + acc = (u32_t)(acc + ((addr >> 16) & 0xffffUL)); + addr = ip4_addr_get_u32(dest); + acc = (u32_t)(acc + (addr & 0xffffUL)); + acc = (u32_t)(acc + ((addr >> 16) & 0xffffUL)); + /* fold down to 16 bits */ + acc = FOLD_U32T(acc); + acc = FOLD_U32T(acc); + + return inet_cksum_pseudo_partial_base(p, proto, proto_len, chksum_len, acc); +} +#endif /* LWIP_IPV4 */ + +#if LWIP_IPV6 +/** + * Calculates the checksum with IPv6 pseudo header used by TCP and UDP for a pbuf chain. + * IPv6 addresses are expected to be in network byte order. Will only compute for a + * portion of the payload. + * + * @param p chain of pbufs over that a checksum should be calculated (ip data part) + * @param proto ipv6 protocol/next header (used for checksum of pseudo header) + * @param proto_len length of the ipv6 payload (used for checksum of pseudo header) + * @param chksum_len number of payload bytes used to compute chksum + * @param src source ipv6 address (used for checksum of pseudo header) + * @param dest destination ipv6 address (used for checksum of pseudo header) + * @return checksum (as u16_t) to be saved directly in the protocol header + */ +u16_t +ip6_chksum_pseudo_partial(struct pbuf *p, u8_t proto, u16_t proto_len, + u16_t chksum_len, const ip6_addr_t *src, const ip6_addr_t *dest) +{ + u32_t acc = 0; + u32_t addr; + u8_t addr_part; + + for (addr_part = 0; addr_part < 4; addr_part++) { + addr = src->addr[addr_part]; + acc = (u32_t)(acc + (addr & 0xffffUL)); + acc = (u32_t)(acc + ((addr >> 16) & 0xffffUL)); + addr = dest->addr[addr_part]; + acc = (u32_t)(acc + (addr & 0xffffUL)); + acc = (u32_t)(acc + ((addr >> 16) & 0xffffUL)); + } + /* fold down to 16 bits */ + acc = FOLD_U32T(acc); + acc = FOLD_U32T(acc); + + return inet_cksum_pseudo_partial_base(p, proto, proto_len, chksum_len, acc); +} +#endif /* LWIP_IPV6 */ + +/* ip_chksum_pseudo_partial: + * + * Calculates the IPv4 or IPv6 pseudo Internet checksum used by TCP and UDP for a pbuf chain. + * + * @param p chain of pbufs over that a checksum should be calculated (ip data part) + * @param src source ip address (used for checksum of pseudo header) + * @param dst destination ip address (used for checksum of pseudo header) + * @param proto ip protocol (used for checksum of pseudo header) + * @param proto_len length of the ip data part (used for checksum of pseudo header) + * @return checksum (as u16_t) to be saved directly in the protocol header + */ +u16_t +ip_chksum_pseudo_partial(struct pbuf *p, u8_t proto, u16_t proto_len, + u16_t chksum_len, const ip_addr_t *src, const ip_addr_t *dest) +{ +#if LWIP_IPV6 + if (IP_IS_V6(dest)) { + return ip6_chksum_pseudo_partial(p, proto, proto_len, chksum_len, ip_2_ip6(src), ip_2_ip6(dest)); + } +#endif /* LWIP_IPV6 */ +#if LWIP_IPV4 && LWIP_IPV6 + else +#endif /* LWIP_IPV4 && LWIP_IPV6 */ +#if LWIP_IPV4 + { + return inet_chksum_pseudo_partial(p, proto, proto_len, chksum_len, ip_2_ip4(src), ip_2_ip4(dest)); + } +#endif /* LWIP_IPV4 */ +} + +/* inet_chksum: + * + * Calculates the Internet checksum over a portion of memory. Used primarily for IP + * and ICMP. + * + * @param dataptr start of the buffer to calculate the checksum (no alignment needed) + * @param len length of the buffer to calculate the checksum + * @return checksum (as u16_t) to be saved directly in the protocol header + */ + +u16_t +inet_chksum(const void *dataptr, u16_t len) +{ + return (u16_t)~(unsigned int)LWIP_CHKSUM(dataptr, len); +} + +/** + * Calculate a checksum over a chain of pbufs (without pseudo-header, much like + * inet_chksum only pbufs are used). + * + * @param p pbuf chain over that the checksum should be calculated + * @return checksum (as u16_t) to be saved directly in the protocol header + */ +u16_t +inet_chksum_pbuf(struct pbuf *p) +{ + u32_t acc; + struct pbuf *q; + int swapped = 0; + + acc = 0; + for (q = p; q != NULL; q = q->next) { + acc += LWIP_CHKSUM(q->payload, q->len); + acc = FOLD_U32T(acc); + if (q->len % 2 != 0) { + swapped = !swapped; + acc = SWAP_BYTES_IN_WORD(acc); + } + } + + if (swapped) { + acc = SWAP_BYTES_IN_WORD(acc); + } + return (u16_t)~(acc & 0xffffUL); +} + +/* These are some implementations for LWIP_CHKSUM_COPY, which copies data + * like MEMCPY but generates a checksum at the same time. Since this is a + * performance-sensitive function, you might want to create your own version + * in assembly targeted at your hardware by defining it in lwipopts.h: + * #define LWIP_CHKSUM_COPY(dst, src, len) your_chksum_copy(dst, src, len) + */ + +#if (LWIP_CHKSUM_COPY_ALGORITHM == 1) /* Version #1 */ +/** Safe but slow: first call MEMCPY, then call LWIP_CHKSUM. + * For architectures with big caches, data might still be in cache when + * generating the checksum after copying. + */ +u16_t +lwip_chksum_copy(void *dst, const void *src, u16_t len) +{ + MEMCPY(dst, src, len); + return LWIP_CHKSUM(dst, len); +} +#endif /* (LWIP_CHKSUM_COPY_ALGORITHM == 1) */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/init.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/init.c new file mode 100644 index 0000000000000000000000000000000000000000..b3737a356de6c703cf2439216a95af309c86f81f --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/init.c @@ -0,0 +1,380 @@ +/** + * @file + * Modules initialization + * + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + */ + +#include "lwip/opt.h" + +#include "lwip/init.h" +#include "lwip/stats.h" +#include "lwip/sys.h" +#include "lwip/mem.h" +#include "lwip/memp.h" +#include "lwip/pbuf.h" +#include "lwip/netif.h" +#include "lwip/sockets.h" +#include "lwip/ip.h" +#include "lwip/raw.h" +#include "lwip/udp.h" +#include "lwip/priv/tcp_priv.h" +#include "lwip/igmp.h" +#include "lwip/dns.h" +#include "lwip/timeouts.h" +#include "lwip/etharp.h" +#include "lwip/ip6.h" +#include "lwip/nd6.h" +#include "lwip/mld6.h" +#include "lwip/api.h" + +#include "netif/ppp/ppp_opts.h" +#include "netif/ppp/ppp_impl.h" + +#ifndef LWIP_SKIP_PACKING_CHECK + +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct packed_struct_test { + PACK_STRUCT_FLD_8(u8_t dummy1); + PACK_STRUCT_FIELD(u32_t dummy2); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif +#define PACKED_STRUCT_TEST_EXPECTED_SIZE 5 + +#endif + +/* Compile-time sanity checks for configuration errors. + * These can be done independently of LWIP_DEBUG, without penalty. + */ +#ifndef BYTE_ORDER +#error "BYTE_ORDER is not defined, you have to define it in your cc.h" +#endif +#if (!IP_SOF_BROADCAST && IP_SOF_BROADCAST_RECV) +#error "If you want to use broadcast filter per pcb on recv operations, you have to define IP_SOF_BROADCAST=1 in your lwipopts.h" +#endif +#if (!LWIP_UDP && LWIP_UDPLITE) +#error "If you want to use UDP Lite, you have to define LWIP_UDP=1 in your lwipopts.h" +#endif +#if (!LWIP_UDP && LWIP_DHCP) +#error "If you want to use DHCP, you have to define LWIP_UDP=1 in your lwipopts.h" +#endif +#if (!LWIP_UDP && !LWIP_RAW && LWIP_MULTICAST_TX_OPTIONS) +#error "If you want to use LWIP_MULTICAST_TX_OPTIONS, you have to define LWIP_UDP=1 and/or LWIP_RAW=1 in your lwipopts.h" +#endif +#if (!LWIP_UDP && LWIP_DNS) +#error "If you want to use DNS, you have to define LWIP_UDP=1 in your lwipopts.h" +#endif +#if !MEMP_MEM_MALLOC /* MEMP_NUM_* checks are disabled when not using the pool allocator */ +#if (LWIP_ARP && ARP_QUEUEING && (MEMP_NUM_ARP_QUEUE<=0)) +#error "If you want to use ARP Queueing, you have to define MEMP_NUM_ARP_QUEUE>=1 in your lwipopts.h" +#endif +#if (LWIP_RAW && (MEMP_NUM_RAW_PCB<=0)) +#error "If you want to use RAW, you have to define MEMP_NUM_RAW_PCB>=1 in your lwipopts.h" +#endif +#if (LWIP_UDP && (MEMP_NUM_UDP_PCB<=0)) +#error "If you want to use UDP, you have to define MEMP_NUM_UDP_PCB>=1 in your lwipopts.h" +#endif +#if (LWIP_TCP && (MEMP_NUM_TCP_PCB<=0)) +#error "If you want to use TCP, you have to define MEMP_NUM_TCP_PCB>=1 in your lwipopts.h" +#endif +#if (LWIP_IGMP && (MEMP_NUM_IGMP_GROUP<=1)) +#error "If you want to use IGMP, you have to define MEMP_NUM_IGMP_GROUP>1 in your lwipopts.h" +#endif +#if (LWIP_IGMP && !LWIP_MULTICAST_TX_OPTIONS) +#error "If you want to use IGMP, you have to define LWIP_MULTICAST_TX_OPTIONS==1 in your lwipopts.h" +#endif +#if (LWIP_IGMP && !LWIP_IPV4) +#error "IGMP needs LWIP_IPV4 enabled in your lwipopts.h" +#endif +#if ((LWIP_NETCONN || LWIP_SOCKET) && (MEMP_NUM_TCPIP_MSG_API<=0)) +#error "If you want to use Sequential API, you have to define MEMP_NUM_TCPIP_MSG_API>=1 in your lwipopts.h" +#endif +/* There must be sufficient timeouts, taking into account requirements of the subsystems. */ +#if LWIP_TIMERS && (MEMP_NUM_SYS_TIMEOUT < LWIP_NUM_SYS_TIMEOUT_INTERNAL) +#error "MEMP_NUM_SYS_TIMEOUT is too low to accomodate all required timeouts" +#endif +#if (IP_REASSEMBLY && (MEMP_NUM_REASSDATA > IP_REASS_MAX_PBUFS)) +#error "MEMP_NUM_REASSDATA > IP_REASS_MAX_PBUFS doesn't make sense since each struct ip_reassdata must hold 2 pbufs at least!" +#endif +#endif /* !MEMP_MEM_MALLOC */ +#if LWIP_WND_SCALE +#if (LWIP_TCP && (TCP_WND > 0xffffffff)) +#error "If you want to use TCP, TCP_WND must fit in an u32_t, so, you have to reduce it in your lwipopts.h" +#endif +#if (LWIP_TCP && (TCP_RCV_SCALE > 14)) +#error "The maximum valid window scale value is 14!" +#endif +#if (LWIP_TCP && (TCP_WND > (0xFFFFU << TCP_RCV_SCALE))) +#error "TCP_WND is bigger than the configured LWIP_WND_SCALE allows!" +#endif +#if (LWIP_TCP && ((TCP_WND >> TCP_RCV_SCALE) == 0)) +#error "TCP_WND is too small for the configured LWIP_WND_SCALE (results in zero window)!" +#endif +#else /* LWIP_WND_SCALE */ +#if (LWIP_TCP && (TCP_WND > 0xffff)) +#error "If you want to use TCP, TCP_WND must fit in an u16_t, so, you have to reduce it in your lwipopts.h (or enable window scaling)" +#endif +#endif /* LWIP_WND_SCALE */ +#if (LWIP_TCP && (TCP_SND_QUEUELEN > 0xffff)) +#error "If you want to use TCP, TCP_SND_QUEUELEN must fit in an u16_t, so, you have to reduce it in your lwipopts.h" +#endif +#if (LWIP_TCP && (TCP_SND_QUEUELEN < 2)) +#error "TCP_SND_QUEUELEN must be at least 2 for no-copy TCP writes to work" +#endif +#if (LWIP_TCP && ((TCP_MAXRTX > 12) || (TCP_SYNMAXRTX > 12))) +#error "If you want to use TCP, TCP_MAXRTX and TCP_SYNMAXRTX must less or equal to 12 (due to tcp_backoff table), so, you have to reduce them in your lwipopts.h" +#endif +#if (LWIP_TCP && TCP_LISTEN_BACKLOG && ((TCP_DEFAULT_LISTEN_BACKLOG < 0) || (TCP_DEFAULT_LISTEN_BACKLOG > 0xff))) +#error "If you want to use TCP backlog, TCP_DEFAULT_LISTEN_BACKLOG must fit into an u8_t" +#endif +#if (LWIP_TCP && LWIP_TCP_SACK_OUT && !TCP_QUEUE_OOSEQ) +#error "To use LWIP_TCP_SACK_OUT, TCP_QUEUE_OOSEQ needs to be enabled" +#endif +#if (LWIP_TCP && LWIP_TCP_SACK_OUT && (LWIP_TCP_MAX_SACK_NUM < 1)) +#error "LWIP_TCP_MAX_SACK_NUM must be greater than 0" +#endif +#if (LWIP_NETIF_API && (NO_SYS==1)) +#error "If you want to use NETIF API, you have to define NO_SYS=0 in your lwipopts.h" +#endif +#if ((LWIP_SOCKET || LWIP_NETCONN) && (NO_SYS==1)) +#error "If you want to use Sequential API, you have to define NO_SYS=0 in your lwipopts.h" +#endif +#if (LWIP_PPP_API && (NO_SYS==1)) +#error "If you want to use PPP API, you have to define NO_SYS=0 in your lwipopts.h" +#endif +#if (LWIP_PPP_API && (PPP_SUPPORT==0)) +#error "If you want to use PPP API, you have to enable PPP_SUPPORT in your lwipopts.h" +#endif +#if (((!LWIP_DHCP) || (!LWIP_AUTOIP)) && LWIP_DHCP_AUTOIP_COOP) +#error "If you want to use DHCP/AUTOIP cooperation mode, you have to define LWIP_DHCP=1 and LWIP_AUTOIP=1 in your lwipopts.h" +#endif +#if (((!LWIP_DHCP) || (!LWIP_ARP)) && DHCP_DOES_ARP_CHECK) +#error "If you want to use DHCP ARP checking, you have to define LWIP_DHCP=1 and LWIP_ARP=1 in your lwipopts.h" +#endif +#if (!LWIP_ARP && LWIP_AUTOIP) +#error "If you want to use AUTOIP, you have to define LWIP_ARP=1 in your lwipopts.h" +#endif +#if (LWIP_TCP && ((LWIP_EVENT_API && LWIP_CALLBACK_API) || (!LWIP_EVENT_API && !LWIP_CALLBACK_API))) +#error "One and exactly one of LWIP_EVENT_API and LWIP_CALLBACK_API has to be enabled in your lwipopts.h" +#endif +#if (LWIP_ALTCP && LWIP_EVENT_API) +#error "The application layered tcp API does not work with LWIP_EVENT_API" +#endif +#if (MEM_LIBC_MALLOC && MEM_USE_POOLS) +#error "MEM_LIBC_MALLOC and MEM_USE_POOLS may not both be simultaneously enabled in your lwipopts.h" +#endif +#if (MEM_USE_POOLS && !MEMP_USE_CUSTOM_POOLS) +#error "MEM_USE_POOLS requires custom pools (MEMP_USE_CUSTOM_POOLS) to be enabled in your lwipopts.h" +#endif +#if (PBUF_POOL_BUFSIZE <= MEM_ALIGNMENT) +#error "PBUF_POOL_BUFSIZE must be greater than MEM_ALIGNMENT or the offset may take the full first pbuf" +#endif +#if (DNS_LOCAL_HOSTLIST && !DNS_LOCAL_HOSTLIST_IS_DYNAMIC && !(defined(DNS_LOCAL_HOSTLIST_INIT))) +#error "you have to define define DNS_LOCAL_HOSTLIST_INIT {{'host1', 0x123}, {'host2', 0x234}} to initialize DNS_LOCAL_HOSTLIST" +#endif +#if PPP_SUPPORT && !PPPOS_SUPPORT && !PPPOE_SUPPORT && !PPPOL2TP_SUPPORT +#error "PPP_SUPPORT needs at least one of PPPOS_SUPPORT, PPPOE_SUPPORT or PPPOL2TP_SUPPORT turned on" +#endif +#if PPP_SUPPORT && !PPP_IPV4_SUPPORT && !PPP_IPV6_SUPPORT +#error "PPP_SUPPORT needs PPP_IPV4_SUPPORT and/or PPP_IPV6_SUPPORT turned on" +#endif +#if PPP_SUPPORT && PPP_IPV4_SUPPORT && !LWIP_IPV4 +#error "PPP_IPV4_SUPPORT needs LWIP_IPV4 turned on" +#endif +#if PPP_SUPPORT && PPP_IPV6_SUPPORT && !LWIP_IPV6 +#error "PPP_IPV6_SUPPORT needs LWIP_IPV6 turned on" +#endif +#if !LWIP_ETHERNET && (LWIP_ARP || PPPOE_SUPPORT) +#error "LWIP_ETHERNET needs to be turned on for LWIP_ARP or PPPOE_SUPPORT" +#endif +#if LWIP_TCPIP_CORE_LOCKING_INPUT && !LWIP_TCPIP_CORE_LOCKING +#error "When using LWIP_TCPIP_CORE_LOCKING_INPUT, LWIP_TCPIP_CORE_LOCKING must be enabled, too" +#endif +#if LWIP_TCP && LWIP_NETIF_TX_SINGLE_PBUF && !TCP_OVERSIZE +#error "LWIP_NETIF_TX_SINGLE_PBUF needs TCP_OVERSIZE enabled to create single-pbuf TCP packets" +#endif +#if LWIP_NETCONN && LWIP_TCP +#if NETCONN_COPY != TCP_WRITE_FLAG_COPY +#error "NETCONN_COPY != TCP_WRITE_FLAG_COPY" +#endif +#if NETCONN_MORE != TCP_WRITE_FLAG_MORE +#error "NETCONN_MORE != TCP_WRITE_FLAG_MORE" +#endif +#endif /* LWIP_NETCONN && LWIP_TCP */ +#if LWIP_SOCKET +#endif /* LWIP_SOCKET */ + + +/* Compile-time checks for deprecated options. + */ +#ifdef MEMP_NUM_TCPIP_MSG +#error "MEMP_NUM_TCPIP_MSG option is deprecated. Remove it from your lwipopts.h." +#endif +#ifdef TCP_REXMIT_DEBUG +#error "TCP_REXMIT_DEBUG option is deprecated. Remove it from your lwipopts.h." +#endif +#ifdef RAW_STATS +#error "RAW_STATS option is deprecated. Remove it from your lwipopts.h." +#endif +#ifdef ETHARP_QUEUE_FIRST +#error "ETHARP_QUEUE_FIRST option is deprecated. Remove it from your lwipopts.h." +#endif +#ifdef ETHARP_ALWAYS_INSERT +#error "ETHARP_ALWAYS_INSERT option is deprecated. Remove it from your lwipopts.h." +#endif +#if !NO_SYS && LWIP_TCPIP_CORE_LOCKING && LWIP_COMPAT_MUTEX && !defined(LWIP_COMPAT_MUTEX_ALLOWED) +#error "LWIP_COMPAT_MUTEX cannot prevent priority inversion. It is recommended to implement priority-aware mutexes. (Define LWIP_COMPAT_MUTEX_ALLOWED to disable this error.)" +#endif + +#ifndef LWIP_DISABLE_TCP_SANITY_CHECKS +#define LWIP_DISABLE_TCP_SANITY_CHECKS 0 +#endif +#ifndef LWIP_DISABLE_MEMP_SANITY_CHECKS +#define LWIP_DISABLE_MEMP_SANITY_CHECKS 0 +#endif + +/* MEMP sanity checks */ +#if MEMP_MEM_MALLOC +#if !LWIP_DISABLE_MEMP_SANITY_CHECKS +#if LWIP_NETCONN || LWIP_SOCKET +#if !MEMP_NUM_NETCONN && LWIP_SOCKET +#error "lwip_sanity_check: WARNING: MEMP_NUM_NETCONN cannot be 0 when using sockets!" +#endif +#else /* MEMP_MEM_MALLOC */ +#if MEMP_NUM_NETCONN > (MEMP_NUM_TCP_PCB+MEMP_NUM_TCP_PCB_LISTEN+MEMP_NUM_UDP_PCB+MEMP_NUM_RAW_PCB) +#error "lwip_sanity_check: WARNING: MEMP_NUM_NETCONN should be less than the sum of MEMP_NUM_{TCP,RAW,UDP}_PCB+MEMP_NUM_TCP_PCB_LISTEN. If you know what you are doing, define LWIP_DISABLE_MEMP_SANITY_CHECKS to 1 to disable this error." +#endif +#endif /* LWIP_NETCONN || LWIP_SOCKET */ +#endif /* !LWIP_DISABLE_MEMP_SANITY_CHECKS */ +#if MEM_USE_POOLS +#error "MEMP_MEM_MALLOC and MEM_USE_POOLS cannot be enabled at the same time" +#endif +#ifdef LWIP_HOOK_MEMP_AVAILABLE +#error "LWIP_HOOK_MEMP_AVAILABLE doesn't make sense with MEMP_MEM_MALLOC" +#endif +#endif /* MEMP_MEM_MALLOC */ + +/* TCP sanity checks */ +#if !LWIP_DISABLE_TCP_SANITY_CHECKS +#if LWIP_TCP +#if !MEMP_MEM_MALLOC && (MEMP_NUM_TCP_SEG < TCP_SND_QUEUELEN) +#error "lwip_sanity_check: WARNING: MEMP_NUM_TCP_SEG should be at least as big as TCP_SND_QUEUELEN. If you know what you are doing, define LWIP_DISABLE_TCP_SANITY_CHECKS to 1 to disable this error." +#endif +#if TCP_SND_BUF < (2 * TCP_MSS) +#error "lwip_sanity_check: WARNING: TCP_SND_BUF must be at least as much as (2 * TCP_MSS) for things to work smoothly. If you know what you are doing, define LWIP_DISABLE_TCP_SANITY_CHECKS to 1 to disable this error." +#endif +#if TCP_SND_QUEUELEN < (2 * (TCP_SND_BUF / TCP_MSS)) +#error "lwip_sanity_check: WARNING: TCP_SND_QUEUELEN must be at least as much as (2 * TCP_SND_BUF/TCP_MSS) for things to work. If you know what you are doing, define LWIP_DISABLE_TCP_SANITY_CHECKS to 1 to disable this error." +#endif +#if TCP_SNDLOWAT >= TCP_SND_BUF +#error "lwip_sanity_check: WARNING: TCP_SNDLOWAT must be less than TCP_SND_BUF. If you know what you are doing, define LWIP_DISABLE_TCP_SANITY_CHECKS to 1 to disable this error." +#endif +#if TCP_SNDLOWAT >= (0xFFFF - (4 * TCP_MSS)) +#error "lwip_sanity_check: WARNING: TCP_SNDLOWAT must at least be 4*MSS below u16_t overflow!" +#endif +#if TCP_SNDQUEUELOWAT >= TCP_SND_QUEUELEN +#error "lwip_sanity_check: WARNING: TCP_SNDQUEUELOWAT must be less than TCP_SND_QUEUELEN. If you know what you are doing, define LWIP_DISABLE_TCP_SANITY_CHECKS to 1 to disable this error." +#endif +#if !MEMP_MEM_MALLOC && PBUF_POOL_SIZE && (PBUF_POOL_BUFSIZE <= (PBUF_LINK_ENCAPSULATION_HLEN + PBUF_LINK_HLEN + PBUF_IP_HLEN + PBUF_TRANSPORT_HLEN)) +#error "lwip_sanity_check: WARNING: PBUF_POOL_BUFSIZE does not provide enough space for protocol headers. If you know what you are doing, define LWIP_DISABLE_TCP_SANITY_CHECKS to 1 to disable this error." +#endif +#if !MEMP_MEM_MALLOC && PBUF_POOL_SIZE && (TCP_WND > (PBUF_POOL_SIZE * (PBUF_POOL_BUFSIZE - (PBUF_LINK_ENCAPSULATION_HLEN + PBUF_LINK_HLEN + PBUF_IP_HLEN + PBUF_TRANSPORT_HLEN)))) +#error "lwip_sanity_check: WARNING: TCP_WND is larger than space provided by PBUF_POOL_SIZE * (PBUF_POOL_BUFSIZE - protocol headers). If you know what you are doing, define LWIP_DISABLE_TCP_SANITY_CHECKS to 1 to disable this error." +#endif +#if TCP_WND < TCP_MSS +#error "lwip_sanity_check: WARNING: TCP_WND is smaller than MSS. If you know what you are doing, define LWIP_DISABLE_TCP_SANITY_CHECKS to 1 to disable this error." +#endif +#endif /* LWIP_TCP */ +#endif /* !LWIP_DISABLE_TCP_SANITY_CHECKS */ + +/** + * @ingroup lwip_nosys + * Initialize all modules. + * Use this in NO_SYS mode. Use tcpip_init() otherwise. + */ +void +lwip_init(void) +{ +#ifndef LWIP_SKIP_CONST_CHECK + int a = 0; + LWIP_UNUSED_ARG(a); + LWIP_ASSERT("LWIP_CONST_CAST not implemented correctly. Check your lwIP port.", LWIP_CONST_CAST(void *, &a) == &a); +#endif +#ifndef LWIP_SKIP_PACKING_CHECK + LWIP_ASSERT("Struct packing not implemented correctly. Check your lwIP port.", sizeof(struct packed_struct_test) == PACKED_STRUCT_TEST_EXPECTED_SIZE); +#endif + + /* Modules initialization */ + stats_init(); +#if !NO_SYS + sys_init(); +#endif /* !NO_SYS */ + mem_init(); + memp_init(); + pbuf_init(); + netif_init(); +#if LWIP_IPV4 + ip_init(); +#if LWIP_ARP + etharp_init(); +#endif /* LWIP_ARP */ +#endif /* LWIP_IPV4 */ +#if LWIP_RAW + raw_init(); +#endif /* LWIP_RAW */ +#if LWIP_UDP + udp_init(); +#endif /* LWIP_UDP */ +#if LWIP_TCP + tcp_init(); +#endif /* LWIP_TCP */ +#if LWIP_IGMP + igmp_init(); +#endif /* LWIP_IGMP */ +#if LWIP_DNS + dns_init(); +#endif /* LWIP_DNS */ +#if PPP_SUPPORT + ppp_init(); +#endif + +#if LWIP_TIMERS + sys_timeouts_init(); +#endif /* LWIP_TIMERS */ +} diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ip.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ip.c new file mode 100644 index 0000000000000000000000000000000000000000..18514cf32cbaa5df7276cfc54c6c4e090865cec4 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ip.c @@ -0,0 +1,167 @@ +/** + * @file + * Common IPv4 and IPv6 code + * + * @defgroup ip IP + * @ingroup callbackstyle_api + * + * @defgroup ip4 IPv4 + * @ingroup ip + * + * @defgroup ip6 IPv6 + * @ingroup ip + * + * @defgroup ipaddr IP address handling + * @ingroup infrastructure + * + * @defgroup ip4addr IPv4 only + * @ingroup ipaddr + * + * @defgroup ip6addr IPv6 only + * @ingroup ipaddr + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#include "lwip/opt.h" + +#if LWIP_IPV4 || LWIP_IPV6 + +#include "lwip/ip_addr.h" +#include "lwip/ip.h" + +/** Global data for both IPv4 and IPv6 */ +struct ip_globals ip_data; + +#if LWIP_IPV4 && LWIP_IPV6 + +const ip_addr_t ip_addr_any_type = IPADDR_ANY_TYPE_INIT; + +/** + * @ingroup ipaddr + * Convert numeric IP address (both versions) into ASCII representation. + * returns ptr to static buffer; not reentrant! + * + * @param addr ip address in network order to convert + * @return pointer to a global static (!) buffer that holds the ASCII + * representation of addr + */ +char *ipaddr_ntoa(const ip_addr_t *addr) +{ + if (addr == NULL) { + return NULL; + } + if (IP_IS_V6(addr)) { + return ip6addr_ntoa(ip_2_ip6(addr)); + } else { + return ip4addr_ntoa(ip_2_ip4(addr)); + } +} + +/** + * @ingroup ipaddr + * Same as ipaddr_ntoa, but reentrant since a user-supplied buffer is used. + * + * @param addr ip address in network order to convert + * @param buf target buffer where the string is stored + * @param buflen length of buf + * @return either pointer to buf which now holds the ASCII + * representation of addr or NULL if buf was too small + */ +char *ipaddr_ntoa_r(const ip_addr_t *addr, char *buf, int buflen) +{ + if (addr == NULL) { + return NULL; + } + if (IP_IS_V6(addr)) { + return ip6addr_ntoa_r(ip_2_ip6(addr), buf, buflen); + } else { + return ip4addr_ntoa_r(ip_2_ip4(addr), buf, buflen); + } +} + +/** + * @ingroup ipaddr + * Convert IP address string (both versions) to numeric. + * The version is auto-detected from the string. + * + * @param cp IP address string to convert + * @param addr conversion result is stored here + * @return 1 on success, 0 on error + */ +int +ipaddr_aton(const char *cp, ip_addr_t *addr) +{ + if (cp != NULL) { + const char *c; + for (c = cp; *c != 0; c++) { + if (*c == ':') { + /* contains a colon: IPv6 address */ + if (addr) { + IP_SET_TYPE_VAL(*addr, IPADDR_TYPE_V6); + } + return ip6addr_aton(cp, ip_2_ip6(addr)); + } else if (*c == '.') { + /* contains a dot: IPv4 address */ + break; + } + } + /* call ip4addr_aton as fallback or if IPv4 was found */ + if (addr) { + IP_SET_TYPE_VAL(*addr, IPADDR_TYPE_V4); + } + return ip4addr_aton(cp, ip_2_ip4(addr)); + } + return 0; +} + +/** + * @ingroup lwip_nosys + * If both IP versions are enabled, this function can dispatch packets to the correct one. + * Don't call directly, pass to netif_add() and call netif->input(). + */ +err_t +ip_input(struct pbuf *p, struct netif *inp) +{ + if (p != NULL) { + if (IP_HDR_GET_VERSION(p->payload) == 6) { + return ip6_input(p, inp); + } + return ip4_input(p, inp); + } + return ERR_VAL; +} + +#endif /* LWIP_IPV4 && LWIP_IPV6 */ + +#endif /* LWIP_IPV4 || LWIP_IPV6 */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv4/autoip.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv4/autoip.c new file mode 100644 index 0000000000000000000000000000000000000000..9f7139bc6686a9495d4c053912fab407f6410758 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv4/autoip.c @@ -0,0 +1,527 @@ +/** + * @file + * AutoIP Automatic LinkLocal IP Configuration + * + * This is a AutoIP implementation for the lwIP TCP/IP stack. It aims to conform + * with RFC 3927. + * + * @defgroup autoip AUTOIP + * @ingroup ip4 + * AUTOIP related functions + * USAGE: + * + * define @ref LWIP_AUTOIP 1 in your lwipopts.h + * Options: + * AUTOIP_TMR_INTERVAL msecs, + * I recommend a value of 100. The value must divide 1000 with a remainder almost 0. + * Possible values are 1000, 500, 333, 250, 200, 166, 142, 125, 111, 100 .... + * + * Without DHCP: + * - Call autoip_start() after netif_add(). + * + * With DHCP: + * - define @ref LWIP_DHCP_AUTOIP_COOP 1 in your lwipopts.h. + * - Configure your DHCP Client. + * + * @see netifapi_autoip + */ + +/* + * + * Copyright (c) 2007 Dominik Spies + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * Author: Dominik Spies + */ + +#include "lwip/opt.h" + +#if LWIP_IPV4 && LWIP_AUTOIP /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/mem.h" +/* #include "lwip/udp.h" */ +#include "lwip/ip_addr.h" +#include "lwip/netif.h" +#include "lwip/autoip.h" +#include "lwip/etharp.h" +#include "lwip/prot/autoip.h" + +#include + +/** Pseudo random macro based on netif informations. + * You could use "rand()" from the C Library if you define LWIP_AUTOIP_RAND in lwipopts.h */ +#ifndef LWIP_AUTOIP_RAND +#define LWIP_AUTOIP_RAND(netif) ( (((u32_t)((netif->hwaddr[5]) & 0xff) << 24) | \ + ((u32_t)((netif->hwaddr[3]) & 0xff) << 16) | \ + ((u32_t)((netif->hwaddr[2]) & 0xff) << 8) | \ + ((u32_t)((netif->hwaddr[4]) & 0xff))) + \ + (netif_autoip_data(netif)? netif_autoip_data(netif)->tried_llipaddr : 0)) +#endif /* LWIP_AUTOIP_RAND */ + +/** + * Macro that generates the initial IP address to be tried by AUTOIP. + * If you want to override this, define it to something else in lwipopts.h. + */ +#ifndef LWIP_AUTOIP_CREATE_SEED_ADDR +#define LWIP_AUTOIP_CREATE_SEED_ADDR(netif) \ + lwip_htonl(AUTOIP_RANGE_START + ((u32_t)(((u8_t)(netif->hwaddr[4])) | \ + ((u32_t)((u8_t)(netif->hwaddr[5]))) << 8))) +#endif /* LWIP_AUTOIP_CREATE_SEED_ADDR */ + +/* static functions */ +static err_t autoip_arp_announce(struct netif *netif); +static void autoip_start_probing(struct netif *netif); + +/** + * @ingroup autoip + * Set a statically allocated struct autoip to work with. + * Using this prevents autoip_start to allocate it using mem_malloc. + * + * @param netif the netif for which to set the struct autoip + * @param autoip (uninitialised) autoip struct allocated by the application + */ +void +autoip_set_struct(struct netif *netif, struct autoip *autoip) +{ + LWIP_ASSERT_CORE_LOCKED(); + LWIP_ASSERT("netif != NULL", netif != NULL); + LWIP_ASSERT("autoip != NULL", autoip != NULL); + LWIP_ASSERT("netif already has a struct autoip set", + netif_autoip_data(netif) == NULL); + + /* clear data structure */ + memset(autoip, 0, sizeof(struct autoip)); + /* autoip->state = AUTOIP_STATE_OFF; */ + netif_set_client_data(netif, LWIP_NETIF_CLIENT_DATA_INDEX_AUTOIP, autoip); +} + +/** Restart AutoIP client and check the next address (conflict detected) + * + * @param netif The netif under AutoIP control + */ +static void +autoip_restart(struct netif *netif) +{ + struct autoip *autoip = netif_autoip_data(netif); + autoip->tried_llipaddr++; + autoip_start(netif); +} + +/** + * Handle a IP address conflict after an ARP conflict detection + */ +static void +autoip_handle_arp_conflict(struct netif *netif) +{ + struct autoip *autoip = netif_autoip_data(netif); + + /* RFC3927, 2.5 "Conflict Detection and Defense" allows two options where + a) means retreat on the first conflict and + b) allows to keep an already configured address when having only one + conflict in 10 seconds + We use option b) since it helps to improve the chance that one of the two + conflicting hosts may be able to retain its address. */ + + if (autoip->lastconflict > 0) { + /* retreat, there was a conflicting ARP in the last DEFEND_INTERVAL seconds */ + LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, + ("autoip_handle_arp_conflict(): we are defending, but in DEFEND_INTERVAL, retreating\n")); + + /* Active TCP sessions are aborted when removing the ip addresss */ + autoip_restart(netif); + } else { + LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, + ("autoip_handle_arp_conflict(): we are defend, send ARP Announce\n")); + autoip_arp_announce(netif); + autoip->lastconflict = DEFEND_INTERVAL * AUTOIP_TICKS_PER_SECOND; + } +} + +/** + * Create an IP-Address out of range 169.254.1.0 to 169.254.254.255 + * + * @param netif network interface on which create the IP-Address + * @param ipaddr ip address to initialize + */ +static void +autoip_create_addr(struct netif *netif, ip4_addr_t *ipaddr) +{ + struct autoip *autoip = netif_autoip_data(netif); + + /* Here we create an IP-Address out of range 169.254.1.0 to 169.254.254.255 + * compliant to RFC 3927 Section 2.1 + * We have 254 * 256 possibilities */ + + u32_t addr = lwip_ntohl(LWIP_AUTOIP_CREATE_SEED_ADDR(netif)); + addr += autoip->tried_llipaddr; + addr = AUTOIP_NET | (addr & 0xffff); + /* Now, 169.254.0.0 <= addr <= 169.254.255.255 */ + + if (addr < AUTOIP_RANGE_START) { + addr += AUTOIP_RANGE_END - AUTOIP_RANGE_START + 1; + } + if (addr > AUTOIP_RANGE_END) { + addr -= AUTOIP_RANGE_END - AUTOIP_RANGE_START + 1; + } + LWIP_ASSERT("AUTOIP address not in range", (addr >= AUTOIP_RANGE_START) && + (addr <= AUTOIP_RANGE_END)); + ip4_addr_set_u32(ipaddr, lwip_htonl(addr)); + + LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, + ("autoip_create_addr(): tried_llipaddr=%"U16_F", %"U16_F".%"U16_F".%"U16_F".%"U16_F"\n", + (u16_t)(autoip->tried_llipaddr), ip4_addr1_16(ipaddr), ip4_addr2_16(ipaddr), + ip4_addr3_16(ipaddr), ip4_addr4_16(ipaddr))); +} + +/** + * Sends an ARP probe from a network interface + * + * @param netif network interface used to send the probe + */ +static err_t +autoip_arp_probe(struct netif *netif) +{ + struct autoip *autoip = netif_autoip_data(netif); + /* this works because netif->ip_addr is ANY */ + return etharp_request(netif, &autoip->llipaddr); +} + +/** + * Sends an ARP announce from a network interface + * + * @param netif network interface used to send the announce + */ +static err_t +autoip_arp_announce(struct netif *netif) +{ + return etharp_gratuitous(netif); +} + +/** + * Configure interface for use with current LL IP-Address + * + * @param netif network interface to configure with current LL IP-Address + */ +static err_t +autoip_bind(struct netif *netif) +{ + struct autoip *autoip = netif_autoip_data(netif); + ip4_addr_t sn_mask, gw_addr; + + LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE, + ("autoip_bind(netif=%p) %c%c%"U16_F" %"U16_F".%"U16_F".%"U16_F".%"U16_F"\n", + (void *)netif, netif->name[0], netif->name[1], (u16_t)netif->num, + ip4_addr1_16(&autoip->llipaddr), ip4_addr2_16(&autoip->llipaddr), + ip4_addr3_16(&autoip->llipaddr), ip4_addr4_16(&autoip->llipaddr))); + + IP4_ADDR(&sn_mask, 255, 255, 0, 0); + IP4_ADDR(&gw_addr, 0, 0, 0, 0); + + netif_set_addr(netif, &autoip->llipaddr, &sn_mask, &gw_addr); + /* interface is used by routing now that an address is set */ + + return ERR_OK; +} + +/** + * @ingroup autoip + * Start AutoIP client + * + * @param netif network interface on which start the AutoIP client + */ +err_t +autoip_start(struct netif *netif) +{ + struct autoip *autoip = netif_autoip_data(netif); + err_t result = ERR_OK; + + LWIP_ASSERT_CORE_LOCKED(); + LWIP_ERROR("netif is not up, old style port?", netif_is_up(netif), return ERR_ARG;); + + /* Set IP-Address, Netmask and Gateway to 0 to make sure that + * ARP Packets are formed correctly + */ + netif_set_addr(netif, IP4_ADDR_ANY4, IP4_ADDR_ANY4, IP4_ADDR_ANY4); + + LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, + ("autoip_start(netif=%p) %c%c%"U16_F"\n", (void *)netif, netif->name[0], + netif->name[1], (u16_t)netif->num)); + if (autoip == NULL) { + /* no AutoIP client attached yet? */ + LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE, + ("autoip_start(): starting new AUTOIP client\n")); + autoip = (struct autoip *)mem_calloc(1, sizeof(struct autoip)); + if (autoip == NULL) { + LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE, + ("autoip_start(): could not allocate autoip\n")); + return ERR_MEM; + } + /* store this AutoIP client in the netif */ + netif_set_client_data(netif, LWIP_NETIF_CLIENT_DATA_INDEX_AUTOIP, autoip); + LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE, ("autoip_start(): allocated autoip")); + } else { + autoip->state = AUTOIP_STATE_OFF; + autoip->ttw = 0; + autoip->sent_num = 0; + ip4_addr_set_zero(&autoip->llipaddr); + autoip->lastconflict = 0; + } + + autoip_create_addr(netif, &(autoip->llipaddr)); + autoip_start_probing(netif); + + return result; +} + +static void +autoip_start_probing(struct netif *netif) +{ + struct autoip *autoip = netif_autoip_data(netif); + + autoip->state = AUTOIP_STATE_PROBING; + autoip->sent_num = 0; + LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, + ("autoip_start_probing(): changing state to PROBING: %"U16_F".%"U16_F".%"U16_F".%"U16_F"\n", + ip4_addr1_16(&autoip->llipaddr), ip4_addr2_16(&autoip->llipaddr), + ip4_addr3_16(&autoip->llipaddr), ip4_addr4_16(&autoip->llipaddr))); + + /* time to wait to first probe, this is randomly + * chosen out of 0 to PROBE_WAIT seconds. + * compliant to RFC 3927 Section 2.2.1 + */ + autoip->ttw = (u16_t)(LWIP_AUTOIP_RAND(netif) % (PROBE_WAIT * AUTOIP_TICKS_PER_SECOND)); + + /* + * if we tried more then MAX_CONFLICTS we must limit our rate for + * acquiring and probing address + * compliant to RFC 3927 Section 2.2.1 + */ + if (autoip->tried_llipaddr > MAX_CONFLICTS) { + autoip->ttw = RATE_LIMIT_INTERVAL * AUTOIP_TICKS_PER_SECOND; + } +} + +/** + * Handle a possible change in the network configuration. + * + * If there is an AutoIP address configured, take the interface down + * and begin probing with the same address. + */ +void +autoip_network_changed(struct netif *netif) +{ + struct autoip *autoip = netif_autoip_data(netif); + + if (autoip && (autoip->state != AUTOIP_STATE_OFF)) { + autoip_start_probing(netif); + } +} + +/** + * @ingroup autoip + * Stop AutoIP client + * + * @param netif network interface on which stop the AutoIP client + */ +err_t +autoip_stop(struct netif *netif) +{ + struct autoip *autoip = netif_autoip_data(netif); + + LWIP_ASSERT_CORE_LOCKED(); + if (autoip != NULL) { + autoip->state = AUTOIP_STATE_OFF; + if (ip4_addr_islinklocal(netif_ip4_addr(netif))) { + netif_set_addr(netif, IP4_ADDR_ANY4, IP4_ADDR_ANY4, IP4_ADDR_ANY4); + } + } + return ERR_OK; +} + +/** + * Has to be called in loop every AUTOIP_TMR_INTERVAL milliseconds + */ +void +autoip_tmr(void) +{ + struct netif *netif; + /* loop through netif's */ + NETIF_FOREACH(netif) { + struct autoip *autoip = netif_autoip_data(netif); + /* only act on AutoIP configured interfaces */ + if (autoip != NULL) { + if (autoip->lastconflict > 0) { + autoip->lastconflict--; + } + + LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE, + ("autoip_tmr() AutoIP-State: %"U16_F", ttw=%"U16_F"\n", + (u16_t)(autoip->state), autoip->ttw)); + + if (autoip->ttw > 0) { + autoip->ttw--; + } + + switch (autoip->state) { + case AUTOIP_STATE_PROBING: + if (autoip->ttw == 0) { + if (autoip->sent_num >= PROBE_NUM) { + /* Switch to ANNOUNCING: now we can bind to an IP address and use it */ + autoip->state = AUTOIP_STATE_ANNOUNCING; + autoip_bind(netif); + /* autoip_bind() calls netif_set_addr(): this triggers a gratuitous ARP + which counts as an announcement */ + autoip->sent_num = 1; + autoip->ttw = ANNOUNCE_WAIT * AUTOIP_TICKS_PER_SECOND; + LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, + ("autoip_tmr(): changing state to ANNOUNCING: %"U16_F".%"U16_F".%"U16_F".%"U16_F"\n", + ip4_addr1_16(&autoip->llipaddr), ip4_addr2_16(&autoip->llipaddr), + ip4_addr3_16(&autoip->llipaddr), ip4_addr4_16(&autoip->llipaddr))); + } else { + autoip_arp_probe(netif); + LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE, ("autoip_tmr() PROBING Sent Probe\n")); + autoip->sent_num++; + if (autoip->sent_num == PROBE_NUM) { + /* calculate time to wait to for announce */ + autoip->ttw = ANNOUNCE_WAIT * AUTOIP_TICKS_PER_SECOND; + } else { + /* calculate time to wait to next probe */ + autoip->ttw = (u16_t)((LWIP_AUTOIP_RAND(netif) % + ((PROBE_MAX - PROBE_MIN) * AUTOIP_TICKS_PER_SECOND) ) + + PROBE_MIN * AUTOIP_TICKS_PER_SECOND); + } + } + } + break; + + case AUTOIP_STATE_ANNOUNCING: + if (autoip->ttw == 0) { + autoip_arp_announce(netif); + LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE, ("autoip_tmr() ANNOUNCING Sent Announce\n")); + autoip->ttw = ANNOUNCE_INTERVAL * AUTOIP_TICKS_PER_SECOND; + autoip->sent_num++; + + if (autoip->sent_num >= ANNOUNCE_NUM) { + autoip->state = AUTOIP_STATE_BOUND; + autoip->sent_num = 0; + autoip->ttw = 0; + LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, + ("autoip_tmr(): changing state to BOUND: %"U16_F".%"U16_F".%"U16_F".%"U16_F"\n", + ip4_addr1_16(&autoip->llipaddr), ip4_addr2_16(&autoip->llipaddr), + ip4_addr3_16(&autoip->llipaddr), ip4_addr4_16(&autoip->llipaddr))); + } + } + break; + + default: + /* nothing to do in other states */ + break; + } + } + } +} + +/** + * Handles every incoming ARP Packet, called by etharp_input(). + * + * @param netif network interface to use for autoip processing + * @param hdr Incoming ARP packet + */ +void +autoip_arp_reply(struct netif *netif, struct etharp_hdr *hdr) +{ + struct autoip *autoip = netif_autoip_data(netif); + + LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE, ("autoip_arp_reply()\n")); + if ((autoip != NULL) && (autoip->state != AUTOIP_STATE_OFF)) { + /* when ip.src == llipaddr && hw.src != netif->hwaddr + * + * when probing ip.dst == llipaddr && hw.src != netif->hwaddr + * we have a conflict and must solve it + */ + ip4_addr_t sipaddr, dipaddr; + struct eth_addr netifaddr; + SMEMCPY(netifaddr.addr, netif->hwaddr, ETH_HWADDR_LEN); + + /* Copy struct ip4_addr_wordaligned to aligned ip4_addr, to support compilers without + * structure packing (not using structure copy which breaks strict-aliasing rules). + */ + IPADDR_WORDALIGNED_COPY_TO_IP4_ADDR_T(&sipaddr, &hdr->sipaddr); + IPADDR_WORDALIGNED_COPY_TO_IP4_ADDR_T(&dipaddr, &hdr->dipaddr); + + if (autoip->state == AUTOIP_STATE_PROBING) { + /* RFC 3927 Section 2.2.1: + * from beginning to after ANNOUNCE_WAIT + * seconds we have a conflict if + * ip.src == llipaddr OR + * ip.dst == llipaddr && hw.src != own hwaddr + */ + if ((ip4_addr_cmp(&sipaddr, &autoip->llipaddr)) || + (ip4_addr_isany_val(sipaddr) && + ip4_addr_cmp(&dipaddr, &autoip->llipaddr) && + !eth_addr_cmp(&netifaddr, &hdr->shwaddr))) { + LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE | LWIP_DBG_LEVEL_WARNING, + ("autoip_arp_reply(): Probe Conflict detected\n")); + autoip_restart(netif); + } + } else { + /* RFC 3927 Section 2.5: + * in any state we have a conflict if + * ip.src == llipaddr && hw.src != own hwaddr + */ + if (ip4_addr_cmp(&sipaddr, &autoip->llipaddr) && + !eth_addr_cmp(&netifaddr, &hdr->shwaddr)) { + LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE | LWIP_DBG_LEVEL_WARNING, + ("autoip_arp_reply(): Conflicting ARP-Packet detected\n")); + autoip_handle_arp_conflict(netif); + } + } + } +} + +/** check if AutoIP supplied netif->ip_addr + * + * @param netif the netif to check + * @return 1 if AutoIP supplied netif->ip_addr (state BOUND or ANNOUNCING), + * 0 otherwise + */ +u8_t +autoip_supplied_address(const struct netif *netif) +{ + if ((netif != NULL) && (netif_autoip_data(netif) != NULL)) { + struct autoip *autoip = netif_autoip_data(netif); + return (autoip->state == AUTOIP_STATE_BOUND) || (autoip->state == AUTOIP_STATE_ANNOUNCING); + } + return 0; +} + +u8_t +autoip_accept_packet(struct netif *netif, const ip4_addr_t *addr) +{ + struct autoip *autoip = netif_autoip_data(netif); + return (autoip != NULL) && ip4_addr_cmp(addr, &(autoip->llipaddr)); +} + +#endif /* LWIP_IPV4 && LWIP_AUTOIP */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv4/dhcp.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv4/dhcp.c new file mode 100644 index 0000000000000000000000000000000000000000..534574feac865a2ed3197e454e9ceb2b9041156e --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv4/dhcp.c @@ -0,0 +1,1990 @@ +/** + * @file + * Dynamic Host Configuration Protocol client + * + * @defgroup dhcp4 DHCPv4 + * @ingroup ip4 + * DHCP (IPv4) related functions + * This is a DHCP client for the lwIP TCP/IP stack. It aims to conform + * with RFC 2131 and RFC 2132. + * + * @todo: + * - Support for interfaces other than Ethernet (SLIP, PPP, ...) + * + * Options: + * @ref DHCP_COARSE_TIMER_SECS (recommended 60 which is a minute) + * @ref DHCP_FINE_TIMER_MSECS (recommended 500 which equals TCP coarse timer) + * + * dhcp_start() starts a DHCP client instance which + * configures the interface by obtaining an IP address lease and maintaining it. + * + * Use dhcp_release() to end the lease and use dhcp_stop() + * to remove the DHCP client. + * + * @see LWIP_HOOK_DHCP_APPEND_OPTIONS + * @see LWIP_HOOK_DHCP_PARSE_OPTION + * + * @see netifapi_dhcp4 + */ + +/* + * Copyright (c) 2001-2004 Leon Woestenberg + * Copyright (c) 2001-2004 Axon Digital Design B.V., The Netherlands. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * The Swedish Institute of Computer Science and Adam Dunkels + * are specifically granted permission to redistribute this + * source code. + * + * Author: Leon Woestenberg + * + */ + +#include "lwip/opt.h" + +#if LWIP_IPV4 && LWIP_DHCP /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/stats.h" +#include "lwip/mem.h" +#include "lwip/udp.h" +#include "lwip/ip_addr.h" +#include "lwip/netif.h" +#include "lwip/def.h" +#include "lwip/dhcp.h" +#include "lwip/autoip.h" +#include "lwip/dns.h" +#include "lwip/etharp.h" +#include "lwip/prot/dhcp.h" +#include "lwip/prot/iana.h" + +#include + +#ifdef LWIP_HOOK_FILENAME +#include LWIP_HOOK_FILENAME +#endif +#ifndef LWIP_HOOK_DHCP_APPEND_OPTIONS +#define LWIP_HOOK_DHCP_APPEND_OPTIONS(netif, dhcp, state, msg, msg_type, options_len_ptr) +#endif +#ifndef LWIP_HOOK_DHCP_PARSE_OPTION +#define LWIP_HOOK_DHCP_PARSE_OPTION(netif, dhcp, state, msg, msg_type, option, len, pbuf, offset) do { LWIP_UNUSED_ARG(msg); } while(0) +#endif + +/** DHCP_CREATE_RAND_XID: if this is set to 1, the xid is created using + * LWIP_RAND() (this overrides DHCP_GLOBAL_XID) + */ +#ifndef DHCP_CREATE_RAND_XID +#define DHCP_CREATE_RAND_XID 1 +#endif + +/** Default for DHCP_GLOBAL_XID is 0xABCD0000 + * This can be changed by defining DHCP_GLOBAL_XID and DHCP_GLOBAL_XID_HEADER, e.g. + * \#define DHCP_GLOBAL_XID_HEADER "stdlib.h" + * \#define DHCP_GLOBAL_XID rand() + */ +#ifdef DHCP_GLOBAL_XID_HEADER +#include DHCP_GLOBAL_XID_HEADER /* include optional starting XID generation prototypes */ +#endif + +/** DHCP_OPTION_MAX_MSG_SIZE is set to the MTU + * MTU is checked to be big enough in dhcp_start */ +#define DHCP_MAX_MSG_LEN(netif) (netif->mtu) +#define DHCP_MAX_MSG_LEN_MIN_REQUIRED 576 +/** Minimum length for reply before packet is parsed */ +#define DHCP_MIN_REPLY_LEN 44 + +#define REBOOT_TRIES 2 + +#if LWIP_DNS && LWIP_DHCP_MAX_DNS_SERVERS +#if DNS_MAX_SERVERS > LWIP_DHCP_MAX_DNS_SERVERS +#define LWIP_DHCP_PROVIDE_DNS_SERVERS LWIP_DHCP_MAX_DNS_SERVERS +#else +#define LWIP_DHCP_PROVIDE_DNS_SERVERS DNS_MAX_SERVERS +#endif +#else +#define LWIP_DHCP_PROVIDE_DNS_SERVERS 0 +#endif + +/** Option handling: options are parsed in dhcp_parse_reply + * and saved in an array where other functions can load them from. + * This might be moved into the struct dhcp (not necessarily since + * lwIP is single-threaded and the array is only used while in recv + * callback). */ +enum dhcp_option_idx { + DHCP_OPTION_IDX_OVERLOAD = 0, + DHCP_OPTION_IDX_MSG_TYPE, + DHCP_OPTION_IDX_SERVER_ID, + DHCP_OPTION_IDX_LEASE_TIME, + DHCP_OPTION_IDX_T1, + DHCP_OPTION_IDX_T2, + DHCP_OPTION_IDX_SUBNET_MASK, + DHCP_OPTION_IDX_ROUTER, +#if LWIP_DHCP_PROVIDE_DNS_SERVERS + DHCP_OPTION_IDX_DNS_SERVER, + DHCP_OPTION_IDX_DNS_SERVER_LAST = DHCP_OPTION_IDX_DNS_SERVER + LWIP_DHCP_PROVIDE_DNS_SERVERS - 1, +#endif /* LWIP_DHCP_PROVIDE_DNS_SERVERS */ +#if LWIP_DHCP_GET_NTP_SRV + DHCP_OPTION_IDX_NTP_SERVER, + DHCP_OPTION_IDX_NTP_SERVER_LAST = DHCP_OPTION_IDX_NTP_SERVER + LWIP_DHCP_MAX_NTP_SERVERS - 1, +#endif /* LWIP_DHCP_GET_NTP_SRV */ + DHCP_OPTION_IDX_MAX +}; + +/** Holds the decoded option values, only valid while in dhcp_recv. + @todo: move this into struct dhcp? */ +u32_t dhcp_rx_options_val[DHCP_OPTION_IDX_MAX]; +/** Holds a flag which option was received and is contained in dhcp_rx_options_val, + only valid while in dhcp_recv. + @todo: move this into struct dhcp? */ +u8_t dhcp_rx_options_given[DHCP_OPTION_IDX_MAX]; + +static u8_t dhcp_discover_request_options[] = { + DHCP_OPTION_SUBNET_MASK, + DHCP_OPTION_ROUTER, + DHCP_OPTION_BROADCAST +#if LWIP_DHCP_PROVIDE_DNS_SERVERS + , DHCP_OPTION_DNS_SERVER +#endif /* LWIP_DHCP_PROVIDE_DNS_SERVERS */ +#if LWIP_DHCP_GET_NTP_SRV + , DHCP_OPTION_NTP +#endif /* LWIP_DHCP_GET_NTP_SRV */ +}; + +#ifdef DHCP_GLOBAL_XID +static u32_t xid; +static u8_t xid_initialised; +#endif /* DHCP_GLOBAL_XID */ + +#define dhcp_option_given(dhcp, idx) (dhcp_rx_options_given[idx] != 0) +#define dhcp_got_option(dhcp, idx) (dhcp_rx_options_given[idx] = 1) +#define dhcp_clear_option(dhcp, idx) (dhcp_rx_options_given[idx] = 0) +#define dhcp_clear_all_options(dhcp) (memset(dhcp_rx_options_given, 0, sizeof(dhcp_rx_options_given))) +#define dhcp_get_option_value(dhcp, idx) (dhcp_rx_options_val[idx]) +#define dhcp_set_option_value(dhcp, idx, val) (dhcp_rx_options_val[idx] = (val)) + +static struct udp_pcb *dhcp_pcb; +static u8_t dhcp_pcb_refcount; + +/* DHCP client state machine functions */ +static err_t dhcp_discover(struct netif *netif); +static err_t dhcp_select(struct netif *netif); +static void dhcp_bind(struct netif *netif); +#if DHCP_DOES_ARP_CHECK +static err_t dhcp_decline(struct netif *netif); +#endif /* DHCP_DOES_ARP_CHECK */ +static err_t dhcp_rebind(struct netif *netif); +static err_t dhcp_reboot(struct netif *netif); +static void dhcp_set_state(struct dhcp *dhcp, u8_t new_state); + +/* receive, unfold, parse and free incoming messages */ +static void dhcp_recv(void *arg, struct udp_pcb *pcb, struct pbuf *p, const ip_addr_t *addr, u16_t port); + +/* set the DHCP timers */ +static void dhcp_timeout(struct netif *netif); +static void dhcp_t1_timeout(struct netif *netif); +static void dhcp_t2_timeout(struct netif *netif); + +/* build outgoing messages */ +/* create a DHCP message, fill in common headers */ +static struct pbuf *dhcp_create_msg(struct netif *netif, struct dhcp *dhcp, u8_t message_type, u16_t *options_out_len); +/* add a DHCP option (type, then length in bytes) */ +static u16_t dhcp_option(u16_t options_out_len, u8_t *options, u8_t option_type, u8_t option_len); +/* add option values */ +static u16_t dhcp_option_byte(u16_t options_out_len, u8_t *options, u8_t value); +static u16_t dhcp_option_short(u16_t options_out_len, u8_t *options, u16_t value); +static u16_t dhcp_option_long(u16_t options_out_len, u8_t *options, u32_t value); +#if LWIP_NETIF_HOSTNAME +static u16_t dhcp_option_hostname(u16_t options_out_len, u8_t *options, struct netif *netif); +#endif /* LWIP_NETIF_HOSTNAME */ +/* always add the DHCP options trailer to end and pad */ +static void dhcp_option_trailer(u16_t options_out_len, u8_t *options, struct pbuf *p_out); + +/** Ensure DHCP PCB is allocated and bound */ +static err_t +dhcp_inc_pcb_refcount(void) +{ + if (dhcp_pcb_refcount == 0) { + LWIP_ASSERT("dhcp_inc_pcb_refcount(): memory leak", dhcp_pcb == NULL); + + /* allocate UDP PCB */ + dhcp_pcb = udp_new(); + + if (dhcp_pcb == NULL) { + return ERR_MEM; + } + + ip_set_option(dhcp_pcb, SOF_BROADCAST); + + /* set up local and remote port for the pcb -> listen on all interfaces on all src/dest IPs */ + udp_bind(dhcp_pcb, IP4_ADDR_ANY, LWIP_IANA_PORT_DHCP_CLIENT); + udp_connect(dhcp_pcb, IP4_ADDR_ANY, LWIP_IANA_PORT_DHCP_SERVER); + udp_recv(dhcp_pcb, dhcp_recv, NULL); + } + + dhcp_pcb_refcount++; + + return ERR_OK; +} + +/** Free DHCP PCB if the last netif stops using it */ +static void +dhcp_dec_pcb_refcount(void) +{ + LWIP_ASSERT("dhcp_pcb_refcount(): refcount error", (dhcp_pcb_refcount > 0)); + dhcp_pcb_refcount--; + + if (dhcp_pcb_refcount == 0) { + udp_remove(dhcp_pcb); + dhcp_pcb = NULL; + } +} + +/** + * Back-off the DHCP client (because of a received NAK response). + * + * Back-off the DHCP client because of a received NAK. Receiving a + * NAK means the client asked for something non-sensible, for + * example when it tries to renew a lease obtained on another network. + * + * We clear any existing set IP address and restart DHCP negotiation + * afresh (as per RFC2131 3.2.3). + * + * @param netif the netif under DHCP control + */ +static void +dhcp_handle_nak(struct netif *netif) +{ + struct dhcp *dhcp = netif_dhcp_data(netif); + + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_handle_nak(netif=%p) %c%c%"U16_F"\n", + (void *)netif, netif->name[0], netif->name[1], (u16_t)netif->num)); + /* Change to a defined state - set this before assigning the address + to ensure the callback can use dhcp_supplied_address() */ + dhcp_set_state(dhcp, DHCP_STATE_BACKING_OFF); + /* remove IP address from interface (must no longer be used, as per RFC2131) */ + netif_set_addr(netif, IP4_ADDR_ANY4, IP4_ADDR_ANY4, IP4_ADDR_ANY4); + /* We can immediately restart discovery */ + dhcp_discover(netif); +} + +#if DHCP_DOES_ARP_CHECK +/** + * Checks if the offered IP address is already in use. + * + * It does so by sending an ARP request for the offered address and + * entering CHECKING state. If no ARP reply is received within a small + * interval, the address is assumed to be free for use by us. + * + * @param netif the netif under DHCP control + */ +static void +dhcp_check(struct netif *netif) +{ + struct dhcp *dhcp = netif_dhcp_data(netif); + err_t result; + u16_t msecs; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_check(netif=%p) %c%c\n", (void *)netif, (s16_t)netif->name[0], + (s16_t)netif->name[1])); + dhcp_set_state(dhcp, DHCP_STATE_CHECKING); + /* create an ARP query for the offered IP address, expecting that no host + responds, as the IP address should not be in use. */ + result = etharp_query(netif, &dhcp->offered_ip_addr, NULL); + if (result != ERR_OK) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, ("dhcp_check: could not perform ARP query\n")); + } + if (dhcp->tries < 255) { + dhcp->tries++; + } + msecs = 500; + dhcp->request_timeout = (u16_t)((msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_check(): set request timeout %"U16_F" msecs\n", msecs)); +} +#endif /* DHCP_DOES_ARP_CHECK */ + +/** + * Remember the configuration offered by a DHCP server. + * + * @param netif the netif under DHCP control + */ +static void +dhcp_handle_offer(struct netif *netif, struct dhcp_msg *msg_in) +{ + struct dhcp *dhcp = netif_dhcp_data(netif); + + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_handle_offer(netif=%p) %c%c%"U16_F"\n", + (void *)netif, netif->name[0], netif->name[1], (u16_t)netif->num)); + /* obtain the server address */ + if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_SERVER_ID)) { + dhcp->request_timeout = 0; /* stop timer */ + + ip_addr_set_ip4_u32(&dhcp->server_ip_addr, lwip_htonl(dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_SERVER_ID))); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_STATE, ("dhcp_handle_offer(): server 0x%08"X32_F"\n", + ip4_addr_get_u32(ip_2_ip4(&dhcp->server_ip_addr)))); + /* remember offered address */ + ip4_addr_copy(dhcp->offered_ip_addr, msg_in->yiaddr); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_STATE, ("dhcp_handle_offer(): offer for 0x%08"X32_F"\n", + ip4_addr_get_u32(&dhcp->offered_ip_addr))); + + dhcp_select(netif); + } else { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, + ("dhcp_handle_offer(netif=%p) did not get server ID!\n", (void *)netif)); + } +} + +/** + * Select a DHCP server offer out of all offers. + * + * Simply select the first offer received. + * + * @param netif the netif under DHCP control + * @return lwIP specific error (see error.h) + */ +static err_t +dhcp_select(struct netif *netif) +{ + struct dhcp *dhcp; + err_t result; + u16_t msecs; + u8_t i; + struct pbuf *p_out; + u16_t options_out_len; + + LWIP_ERROR("dhcp_select: netif != NULL", (netif != NULL), return ERR_ARG;); + dhcp = netif_dhcp_data(netif); + LWIP_ERROR("dhcp_select: dhcp != NULL", (dhcp != NULL), return ERR_VAL;); + + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_select(netif=%p) %c%c%"U16_F"\n", (void *)netif, netif->name[0], netif->name[1], (u16_t)netif->num)); + dhcp_set_state(dhcp, DHCP_STATE_REQUESTING); + + /* create and initialize the DHCP message header */ + p_out = dhcp_create_msg(netif, dhcp, DHCP_REQUEST, &options_out_len); + if (p_out != NULL) { + struct dhcp_msg *msg_out = (struct dhcp_msg *)p_out->payload; + options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN); + options_out_len = dhcp_option_short(options_out_len, msg_out->options, DHCP_MAX_MSG_LEN(netif)); + + /* MUST request the offered IP address */ + options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_REQUESTED_IP, 4); + options_out_len = dhcp_option_long(options_out_len, msg_out->options, lwip_ntohl(ip4_addr_get_u32(&dhcp->offered_ip_addr))); + + options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_SERVER_ID, 4); + options_out_len = dhcp_option_long(options_out_len, msg_out->options, lwip_ntohl(ip4_addr_get_u32(ip_2_ip4(&dhcp->server_ip_addr)))); + + options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_PARAMETER_REQUEST_LIST, LWIP_ARRAYSIZE(dhcp_discover_request_options)); + for (i = 0; i < LWIP_ARRAYSIZE(dhcp_discover_request_options); i++) { + options_out_len = dhcp_option_byte(options_out_len, msg_out->options, dhcp_discover_request_options[i]); + } + +#if LWIP_NETIF_HOSTNAME + options_out_len = dhcp_option_hostname(options_out_len, msg_out->options, netif); +#endif /* LWIP_NETIF_HOSTNAME */ + + LWIP_HOOK_DHCP_APPEND_OPTIONS(netif, dhcp, DHCP_STATE_REQUESTING, msg_out, DHCP_REQUEST, &options_out_len); + dhcp_option_trailer(options_out_len, msg_out->options, p_out); + + /* send broadcast to any DHCP server */ + result = udp_sendto_if_src(dhcp_pcb, p_out, IP_ADDR_BROADCAST, LWIP_IANA_PORT_DHCP_SERVER, netif, IP4_ADDR_ANY); + pbuf_free(p_out); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_select: REQUESTING\n")); + } else { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, ("dhcp_select: could not allocate DHCP request\n")); + result = ERR_MEM; + } + if (dhcp->tries < 255) { + dhcp->tries++; + } + msecs = (u16_t)((dhcp->tries < 6 ? 1 << dhcp->tries : 60) * 1000); + dhcp->request_timeout = (u16_t)((msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_STATE, ("dhcp_select(): set request timeout %"U16_F" msecs\n", msecs)); + return result; +} + +/** + * The DHCP timer that checks for lease renewal/rebind timeouts. + * Must be called once a minute (see @ref DHCP_COARSE_TIMER_SECS). + */ +void +dhcp_coarse_tmr(void) +{ + struct netif *netif; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_coarse_tmr()\n")); + /* iterate through all network interfaces */ + NETIF_FOREACH(netif) { + /* only act on DHCP configured interfaces */ + struct dhcp *dhcp = netif_dhcp_data(netif); + if ((dhcp != NULL) && (dhcp->state != DHCP_STATE_OFF)) { + /* compare lease time to expire timeout */ + if (dhcp->t0_timeout && (++dhcp->lease_used == dhcp->t0_timeout)) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_coarse_tmr(): t0 timeout\n")); + /* this clients' lease time has expired */ + dhcp_release_and_stop(netif); + dhcp_start(netif); + /* timer is active (non zero), and triggers (zeroes) now? */ + } else if (dhcp->t2_rebind_time && (dhcp->t2_rebind_time-- == 1)) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_coarse_tmr(): t2 timeout\n")); + /* this clients' rebind timeout triggered */ + dhcp_t2_timeout(netif); + /* timer is active (non zero), and triggers (zeroes) now */ + } else if (dhcp->t1_renew_time && (dhcp->t1_renew_time-- == 1)) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_coarse_tmr(): t1 timeout\n")); + /* this clients' renewal timeout triggered */ + dhcp_t1_timeout(netif); + } + } + } +} + +/** + * DHCP transaction timeout handling (this function must be called every 500ms, + * see @ref DHCP_FINE_TIMER_MSECS). + * + * A DHCP server is expected to respond within a short period of time. + * This timer checks whether an outstanding DHCP request is timed out. + */ +void +dhcp_fine_tmr(void) +{ + struct netif *netif; + /* loop through netif's */ + NETIF_FOREACH(netif) { + struct dhcp *dhcp = netif_dhcp_data(netif); + /* only act on DHCP configured interfaces */ + if (dhcp != NULL) { + /* timer is active (non zero), and is about to trigger now */ + if (dhcp->request_timeout > 1) { + dhcp->request_timeout--; + } else if (dhcp->request_timeout == 1) { + dhcp->request_timeout--; + /* { dhcp->request_timeout == 0 } */ + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_fine_tmr(): request timeout\n")); + /* this client's request timeout triggered */ + dhcp_timeout(netif); + } + } + } +} + +/** + * A DHCP negotiation transaction, or ARP request, has timed out. + * + * The timer that was started with the DHCP or ARP request has + * timed out, indicating no response was received in time. + * + * @param netif the netif under DHCP control + */ +static void +dhcp_timeout(struct netif *netif) +{ + struct dhcp *dhcp = netif_dhcp_data(netif); + + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_timeout()\n")); + /* back-off period has passed, or server selection timed out */ + if ((dhcp->state == DHCP_STATE_BACKING_OFF) || (dhcp->state == DHCP_STATE_SELECTING)) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_timeout(): restarting discovery\n")); + dhcp_discover(netif); + /* receiving the requested lease timed out */ + } else if (dhcp->state == DHCP_STATE_REQUESTING) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_timeout(): REQUESTING, DHCP request timed out\n")); + if (dhcp->tries <= 5) { + dhcp_select(netif); + } else { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_timeout(): REQUESTING, releasing, restarting\n")); + dhcp_release_and_stop(netif); + dhcp_start(netif); + } +#if DHCP_DOES_ARP_CHECK + /* received no ARP reply for the offered address (which is good) */ + } else if (dhcp->state == DHCP_STATE_CHECKING) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_timeout(): CHECKING, ARP request timed out\n")); + if (dhcp->tries <= 1) { + dhcp_check(netif); + /* no ARP replies on the offered address, + looks like the IP address is indeed free */ + } else { + /* bind the interface to the offered address */ + dhcp_bind(netif); + } +#endif /* DHCP_DOES_ARP_CHECK */ + } else if (dhcp->state == DHCP_STATE_REBOOTING) { + if (dhcp->tries < REBOOT_TRIES) { + dhcp_reboot(netif); + } else { + dhcp_discover(netif); + } + } +} + +/** + * The renewal period has timed out. + * + * @param netif the netif under DHCP control + */ +static void +dhcp_t1_timeout(struct netif *netif) +{ + struct dhcp *dhcp = netif_dhcp_data(netif); + + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_STATE, ("dhcp_t1_timeout()\n")); + if ((dhcp->state == DHCP_STATE_REQUESTING) || (dhcp->state == DHCP_STATE_BOUND) || + (dhcp->state == DHCP_STATE_RENEWING)) { + /* just retry to renew - note that the rebind timer (t2) will + * eventually time-out if renew tries fail. */ + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, + ("dhcp_t1_timeout(): must renew\n")); + /* This slightly different to RFC2131: DHCPREQUEST will be sent from state + DHCP_STATE_RENEWING, not DHCP_STATE_BOUND */ + dhcp_renew(netif); + /* Calculate next timeout */ + if (((dhcp->t2_timeout - dhcp->lease_used) / 2) >= ((60 + DHCP_COARSE_TIMER_SECS / 2) / DHCP_COARSE_TIMER_SECS)) { + dhcp->t1_renew_time = (u16_t)((dhcp->t2_timeout - dhcp->lease_used) / 2); + } + } +} + +/** + * The rebind period has timed out. + * + * @param netif the netif under DHCP control + */ +static void +dhcp_t2_timeout(struct netif *netif) +{ + struct dhcp *dhcp = netif_dhcp_data(netif); + + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_t2_timeout()\n")); + if ((dhcp->state == DHCP_STATE_REQUESTING) || (dhcp->state == DHCP_STATE_BOUND) || + (dhcp->state == DHCP_STATE_RENEWING) || (dhcp->state == DHCP_STATE_REBINDING)) { + /* just retry to rebind */ + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, + ("dhcp_t2_timeout(): must rebind\n")); + /* This slightly different to RFC2131: DHCPREQUEST will be sent from state + DHCP_STATE_REBINDING, not DHCP_STATE_BOUND */ + dhcp_rebind(netif); + /* Calculate next timeout */ + if (((dhcp->t0_timeout - dhcp->lease_used) / 2) >= ((60 + DHCP_COARSE_TIMER_SECS / 2) / DHCP_COARSE_TIMER_SECS)) { + dhcp->t2_rebind_time = (u16_t)((dhcp->t0_timeout - dhcp->lease_used) / 2); + } + } +} + +/** + * Handle a DHCP ACK packet + * + * @param netif the netif under DHCP control + */ +static void +dhcp_handle_ack(struct netif *netif, struct dhcp_msg *msg_in) +{ + struct dhcp *dhcp = netif_dhcp_data(netif); + +#if LWIP_DHCP_PROVIDE_DNS_SERVERS || LWIP_DHCP_GET_NTP_SRV + u8_t n; +#endif /* LWIP_DHCP_PROVIDE_DNS_SERVERS || LWIP_DHCP_GET_NTP_SRV */ +#if LWIP_DHCP_GET_NTP_SRV + ip4_addr_t ntp_server_addrs[LWIP_DHCP_MAX_NTP_SERVERS]; +#endif + + /* clear options we might not get from the ACK */ + ip4_addr_set_zero(&dhcp->offered_sn_mask); + ip4_addr_set_zero(&dhcp->offered_gw_addr); +#if LWIP_DHCP_BOOTP_FILE + ip4_addr_set_zero(&dhcp->offered_si_addr); +#endif /* LWIP_DHCP_BOOTP_FILE */ + + /* lease time given? */ + if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_LEASE_TIME)) { + /* remember offered lease time */ + dhcp->offered_t0_lease = dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_LEASE_TIME); + } + /* renewal period given? */ + if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_T1)) { + /* remember given renewal period */ + dhcp->offered_t1_renew = dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_T1); + } else { + /* calculate safe periods for renewal */ + dhcp->offered_t1_renew = dhcp->offered_t0_lease / 2; + } + + /* renewal period given? */ + if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_T2)) { + /* remember given rebind period */ + dhcp->offered_t2_rebind = dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_T2); + } else { + /* calculate safe periods for rebinding (offered_t0_lease * 0.875 -> 87.5%)*/ + dhcp->offered_t2_rebind = (dhcp->offered_t0_lease * 7U) / 8U; + } + + /* (y)our internet address */ + ip4_addr_copy(dhcp->offered_ip_addr, msg_in->yiaddr); + +#if LWIP_DHCP_BOOTP_FILE + /* copy boot server address, + boot file name copied in dhcp_parse_reply if not overloaded */ + ip4_addr_copy(dhcp->offered_si_addr, msg_in->siaddr); +#endif /* LWIP_DHCP_BOOTP_FILE */ + + /* subnet mask given? */ + if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_SUBNET_MASK)) { + /* remember given subnet mask */ + ip4_addr_set_u32(&dhcp->offered_sn_mask, lwip_htonl(dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_SUBNET_MASK))); + dhcp->subnet_mask_given = 1; + } else { + dhcp->subnet_mask_given = 0; + } + + /* gateway router */ + if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_ROUTER)) { + ip4_addr_set_u32(&dhcp->offered_gw_addr, lwip_htonl(dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_ROUTER))); + } + +#if LWIP_DHCP_GET_NTP_SRV + /* NTP servers */ + for (n = 0; (n < LWIP_DHCP_MAX_NTP_SERVERS) && dhcp_option_given(dhcp, DHCP_OPTION_IDX_NTP_SERVER + n); n++) { + ip4_addr_set_u32(&ntp_server_addrs[n], lwip_htonl(dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_NTP_SERVER + n))); + } + dhcp_set_ntp_servers(n, ntp_server_addrs); +#endif /* LWIP_DHCP_GET_NTP_SRV */ + +#if LWIP_DHCP_PROVIDE_DNS_SERVERS + /* DNS servers */ + for (n = 0; (n < LWIP_DHCP_PROVIDE_DNS_SERVERS) && dhcp_option_given(dhcp, DHCP_OPTION_IDX_DNS_SERVER + n); n++) { + ip_addr_t dns_addr; + ip_addr_set_ip4_u32_val(dns_addr, lwip_htonl(dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_DNS_SERVER + n))); + dns_setserver(n, &dns_addr); + } +#endif /* LWIP_DHCP_PROVIDE_DNS_SERVERS */ +} + +/** + * @ingroup dhcp4 + * Set a statically allocated struct dhcp to work with. + * Using this prevents dhcp_start to allocate it using mem_malloc. + * + * @param netif the netif for which to set the struct dhcp + * @param dhcp (uninitialised) dhcp struct allocated by the application + */ +void +dhcp_set_struct(struct netif *netif, struct dhcp *dhcp) +{ + LWIP_ASSERT_CORE_LOCKED(); + LWIP_ASSERT("netif != NULL", netif != NULL); + LWIP_ASSERT("dhcp != NULL", dhcp != NULL); + LWIP_ASSERT("netif already has a struct dhcp set", netif_dhcp_data(netif) == NULL); + + /* clear data structure */ + memset(dhcp, 0, sizeof(struct dhcp)); + /* dhcp_set_state(&dhcp, DHCP_STATE_OFF); */ + netif_set_client_data(netif, LWIP_NETIF_CLIENT_DATA_INDEX_DHCP, dhcp); +} + +/** + * @ingroup dhcp4 + * Removes a struct dhcp from a netif. + * + * ATTENTION: Only use this when not using dhcp_set_struct() to allocate the + * struct dhcp since the memory is passed back to the heap. + * + * @param netif the netif from which to remove the struct dhcp + */ +void dhcp_cleanup(struct netif *netif) +{ + LWIP_ASSERT_CORE_LOCKED(); + LWIP_ASSERT("netif != NULL", netif != NULL); + + if (netif_dhcp_data(netif) != NULL) { + mem_free(netif_dhcp_data(netif)); + netif_set_client_data(netif, LWIP_NETIF_CLIENT_DATA_INDEX_DHCP, NULL); + } +} + +/** + * @ingroup dhcp4 + * Start DHCP negotiation for a network interface. + * + * If no DHCP client instance was attached to this interface, + * a new client is created first. If a DHCP client instance + * was already present, it restarts negotiation. + * + * @param netif The lwIP network interface + * @return lwIP error code + * - ERR_OK - No error + * - ERR_MEM - Out of memory + */ +err_t +dhcp_start(struct netif *netif) +{ + struct dhcp *dhcp; + err_t result; + + LWIP_ASSERT_CORE_LOCKED(); + LWIP_ERROR("netif != NULL", (netif != NULL), return ERR_ARG;); + LWIP_ERROR("netif is not up, old style port?", netif_is_up(netif), return ERR_ARG;); + dhcp = netif_dhcp_data(netif); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_start(netif=%p) %c%c%"U16_F"\n", (void *)netif, netif->name[0], netif->name[1], (u16_t)netif->num)); + + /* check MTU of the netif */ + if (netif->mtu < DHCP_MAX_MSG_LEN_MIN_REQUIRED) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_start(): Cannot use this netif with DHCP: MTU is too small\n")); + return ERR_MEM; + } + + /* no DHCP client attached yet? */ + if (dhcp == NULL) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_start(): mallocing new DHCP client\n")); + dhcp = (struct dhcp *)mem_malloc(sizeof(struct dhcp)); + if (dhcp == NULL) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_start(): could not allocate dhcp\n")); + return ERR_MEM; + } + + /* store this dhcp client in the netif */ + netif_set_client_data(netif, LWIP_NETIF_CLIENT_DATA_INDEX_DHCP, dhcp); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_start(): allocated dhcp")); + /* already has DHCP client attached */ + } else { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_start(): restarting DHCP configuration\n")); + + if (dhcp->pcb_allocated != 0) { + dhcp_dec_pcb_refcount(); /* free DHCP PCB if not needed any more */ + } + /* dhcp is cleared below, no need to reset flag*/ + } + + /* clear data structure */ + memset(dhcp, 0, sizeof(struct dhcp)); + /* dhcp_set_state(&dhcp, DHCP_STATE_OFF); */ + + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_start(): starting DHCP configuration\n")); + + if (dhcp_inc_pcb_refcount() != ERR_OK) { /* ensure DHCP PCB is allocated */ + return ERR_MEM; + } + dhcp->pcb_allocated = 1; + + if (!netif_is_link_up(netif)) { + /* set state INIT and wait for dhcp_network_changed() to call dhcp_discover() */ + dhcp_set_state(dhcp, DHCP_STATE_INIT); + return ERR_OK; + } + + /* (re)start the DHCP negotiation */ + result = dhcp_discover(netif); + if (result != ERR_OK) { + /* free resources allocated above */ + dhcp_release_and_stop(netif); + return ERR_MEM; + } + return result; +} + +/** + * @ingroup dhcp4 + * Inform a DHCP server of our manual configuration. + * + * This informs DHCP servers of our fixed IP address configuration + * by sending an INFORM message. It does not involve DHCP address + * configuration, it is just here to be nice to the network. + * + * @param netif The lwIP network interface + */ +void +dhcp_inform(struct netif *netif) +{ + struct dhcp dhcp; + struct pbuf *p_out; + u16_t options_out_len; + + LWIP_ASSERT_CORE_LOCKED(); + LWIP_ERROR("netif != NULL", (netif != NULL), return;); + + if (dhcp_inc_pcb_refcount() != ERR_OK) { /* ensure DHCP PCB is allocated */ + return; + } + + memset(&dhcp, 0, sizeof(struct dhcp)); + dhcp_set_state(&dhcp, DHCP_STATE_INFORMING); + + /* create and initialize the DHCP message header */ + p_out = dhcp_create_msg(netif, &dhcp, DHCP_INFORM, &options_out_len); + if (p_out != NULL) { + struct dhcp_msg *msg_out = (struct dhcp_msg *)p_out->payload; + options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN); + options_out_len = dhcp_option_short(options_out_len, msg_out->options, DHCP_MAX_MSG_LEN(netif)); + + LWIP_HOOK_DHCP_APPEND_OPTIONS(netif, &dhcp, DHCP_STATE_INFORMING, msg_out, DHCP_INFORM, &options_out_len); + dhcp_option_trailer(options_out_len, msg_out->options, p_out); + + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_inform: INFORMING\n")); + + udp_sendto_if(dhcp_pcb, p_out, IP_ADDR_BROADCAST, LWIP_IANA_PORT_DHCP_SERVER, netif); + + pbuf_free(p_out); + } else { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_inform: could not allocate DHCP request\n")); + } + + dhcp_dec_pcb_refcount(); /* delete DHCP PCB if not needed any more */ +} + +/** Handle a possible change in the network configuration. + * + * This enters the REBOOTING state to verify that the currently bound + * address is still valid. + */ +void +dhcp_network_changed(struct netif *netif) +{ + struct dhcp *dhcp = netif_dhcp_data(netif); + + if (!dhcp) { + return; + } + switch (dhcp->state) { + case DHCP_STATE_REBINDING: + case DHCP_STATE_RENEWING: + case DHCP_STATE_BOUND: + case DHCP_STATE_REBOOTING: + dhcp->tries = 0; + dhcp_reboot(netif); + break; + case DHCP_STATE_OFF: + /* stay off */ + break; + default: + LWIP_ASSERT("invalid dhcp->state", dhcp->state <= DHCP_STATE_BACKING_OFF); + /* INIT/REQUESTING/CHECKING/BACKING_OFF restart with new 'rid' because the + state changes, SELECTING: continue with current 'rid' as we stay in the + same state */ +#if LWIP_DHCP_AUTOIP_COOP + if (dhcp->autoip_coop_state == DHCP_AUTOIP_COOP_STATE_ON) { + autoip_stop(netif); + dhcp->autoip_coop_state = DHCP_AUTOIP_COOP_STATE_OFF; + } +#endif /* LWIP_DHCP_AUTOIP_COOP */ + /* ensure we start with short timeouts, even if already discovering */ + dhcp->tries = 0; + dhcp_discover(netif); + break; + } +} + +#if DHCP_DOES_ARP_CHECK +/** + * Match an ARP reply with the offered IP address: + * check whether the offered IP address is not in use using ARP + * + * @param netif the network interface on which the reply was received + * @param addr The IP address we received a reply from + */ +void +dhcp_arp_reply(struct netif *netif, const ip4_addr_t *addr) +{ + struct dhcp *dhcp; + + LWIP_ERROR("netif != NULL", (netif != NULL), return;); + dhcp = netif_dhcp_data(netif); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_arp_reply()\n")); + /* is a DHCP client doing an ARP check? */ + if ((dhcp != NULL) && (dhcp->state == DHCP_STATE_CHECKING)) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_arp_reply(): CHECKING, arp reply for 0x%08"X32_F"\n", + ip4_addr_get_u32(addr))); + /* did a host respond with the address we + were offered by the DHCP server? */ + if (ip4_addr_cmp(addr, &dhcp->offered_ip_addr)) { + /* we will not accept the offered address */ + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE | LWIP_DBG_LEVEL_WARNING, + ("dhcp_arp_reply(): arp reply matched with offered address, declining\n")); + dhcp_decline(netif); + } + } +} + +/** + * Decline an offered lease. + * + * Tell the DHCP server we do not accept the offered address. + * One reason to decline the lease is when we find out the address + * is already in use by another host (through ARP). + * + * @param netif the netif under DHCP control + */ +static err_t +dhcp_decline(struct netif *netif) +{ + struct dhcp *dhcp = netif_dhcp_data(netif); + err_t result; + u16_t msecs; + struct pbuf *p_out; + u16_t options_out_len; + + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_decline()\n")); + dhcp_set_state(dhcp, DHCP_STATE_BACKING_OFF); + /* create and initialize the DHCP message header */ + p_out = dhcp_create_msg(netif, dhcp, DHCP_DECLINE, &options_out_len); + if (p_out != NULL) { + struct dhcp_msg *msg_out = (struct dhcp_msg *)p_out->payload; + options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_REQUESTED_IP, 4); + options_out_len = dhcp_option_long(options_out_len, msg_out->options, lwip_ntohl(ip4_addr_get_u32(&dhcp->offered_ip_addr))); + + LWIP_HOOK_DHCP_APPEND_OPTIONS(netif, dhcp, DHCP_STATE_BACKING_OFF, msg_out, DHCP_DECLINE, &options_out_len); + dhcp_option_trailer(options_out_len, msg_out->options, p_out); + + /* per section 4.4.4, broadcast DECLINE messages */ + result = udp_sendto_if_src(dhcp_pcb, p_out, IP_ADDR_BROADCAST, LWIP_IANA_PORT_DHCP_SERVER, netif, IP4_ADDR_ANY); + pbuf_free(p_out); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_decline: BACKING OFF\n")); + } else { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, + ("dhcp_decline: could not allocate DHCP request\n")); + result = ERR_MEM; + } + if (dhcp->tries < 255) { + dhcp->tries++; + } + msecs = 10 * 1000; + dhcp->request_timeout = (u16_t)((msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_decline(): set request timeout %"U16_F" msecs\n", msecs)); + return result; +} +#endif /* DHCP_DOES_ARP_CHECK */ + + +/** + * Start the DHCP process, discover a DHCP server. + * + * @param netif the netif under DHCP control + */ +static err_t +dhcp_discover(struct netif *netif) +{ + struct dhcp *dhcp = netif_dhcp_data(netif); + err_t result = ERR_OK; + u16_t msecs; + u8_t i; + struct pbuf *p_out; + u16_t options_out_len; + + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_discover()\n")); + + ip4_addr_set_any(&dhcp->offered_ip_addr); + dhcp_set_state(dhcp, DHCP_STATE_SELECTING); + /* create and initialize the DHCP message header */ + p_out = dhcp_create_msg(netif, dhcp, DHCP_DISCOVER, &options_out_len); + if (p_out != NULL) { + struct dhcp_msg *msg_out = (struct dhcp_msg *)p_out->payload; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_discover: making request\n")); + + options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN); + options_out_len = dhcp_option_short(options_out_len, msg_out->options, DHCP_MAX_MSG_LEN(netif)); + + options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_PARAMETER_REQUEST_LIST, LWIP_ARRAYSIZE(dhcp_discover_request_options)); + for (i = 0; i < LWIP_ARRAYSIZE(dhcp_discover_request_options); i++) { + options_out_len = dhcp_option_byte(options_out_len, msg_out->options, dhcp_discover_request_options[i]); + } + LWIP_HOOK_DHCP_APPEND_OPTIONS(netif, dhcp, DHCP_STATE_SELECTING, msg_out, DHCP_DISCOVER, &options_out_len); + dhcp_option_trailer(options_out_len, msg_out->options, p_out); + + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_discover: sendto(DISCOVER, IP_ADDR_BROADCAST, LWIP_IANA_PORT_DHCP_SERVER)\n")); + udp_sendto_if_src(dhcp_pcb, p_out, IP_ADDR_BROADCAST, LWIP_IANA_PORT_DHCP_SERVER, netif, IP4_ADDR_ANY); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_discover: deleting()ing\n")); + pbuf_free(p_out); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_discover: SELECTING\n")); + } else { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_discover: could not allocate DHCP request\n")); + } + if (dhcp->tries < 255) { + dhcp->tries++; + } +#if LWIP_DHCP_AUTOIP_COOP + if (dhcp->tries >= LWIP_DHCP_AUTOIP_COOP_TRIES && dhcp->autoip_coop_state == DHCP_AUTOIP_COOP_STATE_OFF) { + dhcp->autoip_coop_state = DHCP_AUTOIP_COOP_STATE_ON; + autoip_start(netif); + } +#endif /* LWIP_DHCP_AUTOIP_COOP */ + msecs = (u16_t)((dhcp->tries < 6 ? 1 << dhcp->tries : 60) * 1000); + dhcp->request_timeout = (u16_t)((msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_discover(): set request timeout %"U16_F" msecs\n", msecs)); + return result; +} + + +/** + * Bind the interface to the offered IP address. + * + * @param netif network interface to bind to the offered address + */ +static void +dhcp_bind(struct netif *netif) +{ + u32_t timeout; + struct dhcp *dhcp; + ip4_addr_t sn_mask, gw_addr; + LWIP_ERROR("dhcp_bind: netif != NULL", (netif != NULL), return;); + dhcp = netif_dhcp_data(netif); + LWIP_ERROR("dhcp_bind: dhcp != NULL", (dhcp != NULL), return;); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_bind(netif=%p) %c%c%"U16_F"\n", (void *)netif, netif->name[0], netif->name[1], (u16_t)netif->num)); + + /* reset time used of lease */ + dhcp->lease_used = 0; + + if (dhcp->offered_t0_lease != 0xffffffffUL) { + /* set renewal period timer */ + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_bind(): t0 renewal timer %"U32_F" secs\n", dhcp->offered_t0_lease)); + timeout = (dhcp->offered_t0_lease + DHCP_COARSE_TIMER_SECS / 2) / DHCP_COARSE_TIMER_SECS; + if (timeout > 0xffff) { + timeout = 0xffff; + } + dhcp->t0_timeout = (u16_t)timeout; + if (dhcp->t0_timeout == 0) { + dhcp->t0_timeout = 1; + } + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_bind(): set request timeout %"U32_F" msecs\n", dhcp->offered_t0_lease * 1000)); + } + + /* temporary DHCP lease? */ + if (dhcp->offered_t1_renew != 0xffffffffUL) { + /* set renewal period timer */ + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_bind(): t1 renewal timer %"U32_F" secs\n", dhcp->offered_t1_renew)); + timeout = (dhcp->offered_t1_renew + DHCP_COARSE_TIMER_SECS / 2) / DHCP_COARSE_TIMER_SECS; + if (timeout > 0xffff) { + timeout = 0xffff; + } + dhcp->t1_timeout = (u16_t)timeout; + if (dhcp->t1_timeout == 0) { + dhcp->t1_timeout = 1; + } + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_bind(): set request timeout %"U32_F" msecs\n", dhcp->offered_t1_renew * 1000)); + dhcp->t1_renew_time = dhcp->t1_timeout; + } + /* set renewal period timer */ + if (dhcp->offered_t2_rebind != 0xffffffffUL) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_bind(): t2 rebind timer %"U32_F" secs\n", dhcp->offered_t2_rebind)); + timeout = (dhcp->offered_t2_rebind + DHCP_COARSE_TIMER_SECS / 2) / DHCP_COARSE_TIMER_SECS; + if (timeout > 0xffff) { + timeout = 0xffff; + } + dhcp->t2_timeout = (u16_t)timeout; + if (dhcp->t2_timeout == 0) { + dhcp->t2_timeout = 1; + } + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_bind(): set request timeout %"U32_F" msecs\n", dhcp->offered_t2_rebind * 1000)); + dhcp->t2_rebind_time = dhcp->t2_timeout; + } + + /* If we have sub 1 minute lease, t2 and t1 will kick in at the same time. */ + if ((dhcp->t1_timeout >= dhcp->t2_timeout) && (dhcp->t2_timeout > 0)) { + dhcp->t1_timeout = 0; + } + + if (dhcp->subnet_mask_given) { + /* copy offered network mask */ + ip4_addr_copy(sn_mask, dhcp->offered_sn_mask); + } else { + /* subnet mask not given, choose a safe subnet mask given the network class */ + u8_t first_octet = ip4_addr1(&dhcp->offered_ip_addr); + if (first_octet <= 127) { + ip4_addr_set_u32(&sn_mask, PP_HTONL(0xff000000UL)); + } else if (first_octet >= 192) { + ip4_addr_set_u32(&sn_mask, PP_HTONL(0xffffff00UL)); + } else { + ip4_addr_set_u32(&sn_mask, PP_HTONL(0xffff0000UL)); + } + } + + ip4_addr_copy(gw_addr, dhcp->offered_gw_addr); + /* gateway address not given? */ + if (ip4_addr_isany_val(gw_addr)) { + /* copy network address */ + ip4_addr_get_network(&gw_addr, &dhcp->offered_ip_addr, &sn_mask); + /* use first host address on network as gateway */ + ip4_addr_set_u32(&gw_addr, ip4_addr_get_u32(&gw_addr) | PP_HTONL(0x00000001UL)); + } + +#if LWIP_DHCP_AUTOIP_COOP + if (dhcp->autoip_coop_state == DHCP_AUTOIP_COOP_STATE_ON) { + autoip_stop(netif); + dhcp->autoip_coop_state = DHCP_AUTOIP_COOP_STATE_OFF; + } +#endif /* LWIP_DHCP_AUTOIP_COOP */ + + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_STATE, ("dhcp_bind(): IP: 0x%08"X32_F" SN: 0x%08"X32_F" GW: 0x%08"X32_F"\n", + ip4_addr_get_u32(&dhcp->offered_ip_addr), ip4_addr_get_u32(&sn_mask), ip4_addr_get_u32(&gw_addr))); + /* netif is now bound to DHCP leased address - set this before assigning the address + to ensure the callback can use dhcp_supplied_address() */ + dhcp_set_state(dhcp, DHCP_STATE_BOUND); + + netif_set_addr(netif, &dhcp->offered_ip_addr, &sn_mask, &gw_addr); + /* interface is used by routing now that an address is set */ +} + +/** + * @ingroup dhcp4 + * Renew an existing DHCP lease at the involved DHCP server. + * + * @param netif network interface which must renew its lease + */ +err_t +dhcp_renew(struct netif *netif) +{ + struct dhcp *dhcp = netif_dhcp_data(netif); + err_t result; + u16_t msecs; + u8_t i; + struct pbuf *p_out; + u16_t options_out_len; + + LWIP_ASSERT_CORE_LOCKED(); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_renew()\n")); + dhcp_set_state(dhcp, DHCP_STATE_RENEWING); + + /* create and initialize the DHCP message header */ + p_out = dhcp_create_msg(netif, dhcp, DHCP_REQUEST, &options_out_len); + if (p_out != NULL) { + struct dhcp_msg *msg_out = (struct dhcp_msg *)p_out->payload; + options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN); + options_out_len = dhcp_option_short(options_out_len, msg_out->options, DHCP_MAX_MSG_LEN(netif)); + + options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_PARAMETER_REQUEST_LIST, LWIP_ARRAYSIZE(dhcp_discover_request_options)); + for (i = 0; i < LWIP_ARRAYSIZE(dhcp_discover_request_options); i++) { + options_out_len = dhcp_option_byte(options_out_len, msg_out->options, dhcp_discover_request_options[i]); + } + +#if LWIP_NETIF_HOSTNAME + options_out_len = dhcp_option_hostname(options_out_len, msg_out->options, netif); +#endif /* LWIP_NETIF_HOSTNAME */ + + LWIP_HOOK_DHCP_APPEND_OPTIONS(netif, dhcp, DHCP_STATE_RENEWING, msg_out, DHCP_REQUEST, &options_out_len); + dhcp_option_trailer(options_out_len, msg_out->options, p_out); + + result = udp_sendto_if(dhcp_pcb, p_out, &dhcp->server_ip_addr, LWIP_IANA_PORT_DHCP_SERVER, netif); + pbuf_free(p_out); + + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_renew: RENEWING\n")); + } else { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_renew: could not allocate DHCP request\n")); + result = ERR_MEM; + } + if (dhcp->tries < 255) { + dhcp->tries++; + } + /* back-off on retries, but to a maximum of 20 seconds */ + msecs = (u16_t)(dhcp->tries < 10 ? dhcp->tries * 2000 : 20 * 1000); + dhcp->request_timeout = (u16_t)((msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_renew(): set request timeout %"U16_F" msecs\n", msecs)); + return result; +} + +/** + * Rebind with a DHCP server for an existing DHCP lease. + * + * @param netif network interface which must rebind with a DHCP server + */ +static err_t +dhcp_rebind(struct netif *netif) +{ + struct dhcp *dhcp = netif_dhcp_data(netif); + err_t result; + u16_t msecs; + u8_t i; + struct pbuf *p_out; + u16_t options_out_len; + + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_rebind()\n")); + dhcp_set_state(dhcp, DHCP_STATE_REBINDING); + + /* create and initialize the DHCP message header */ + p_out = dhcp_create_msg(netif, dhcp, DHCP_REQUEST, &options_out_len); + if (p_out != NULL) { + struct dhcp_msg *msg_out = (struct dhcp_msg *)p_out->payload; + options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN); + options_out_len = dhcp_option_short(options_out_len, msg_out->options, DHCP_MAX_MSG_LEN(netif)); + + options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_PARAMETER_REQUEST_LIST, LWIP_ARRAYSIZE(dhcp_discover_request_options)); + for (i = 0; i < LWIP_ARRAYSIZE(dhcp_discover_request_options); i++) { + options_out_len = dhcp_option_byte(options_out_len, msg_out->options, dhcp_discover_request_options[i]); + } + +#if LWIP_NETIF_HOSTNAME + options_out_len = dhcp_option_hostname(options_out_len, msg_out->options, netif); +#endif /* LWIP_NETIF_HOSTNAME */ + + LWIP_HOOK_DHCP_APPEND_OPTIONS(netif, dhcp, DHCP_STATE_REBINDING, msg_out, DHCP_DISCOVER, &options_out_len); + dhcp_option_trailer(options_out_len, msg_out->options, p_out); + + /* broadcast to server */ + result = udp_sendto_if(dhcp_pcb, p_out, IP_ADDR_BROADCAST, LWIP_IANA_PORT_DHCP_SERVER, netif); + pbuf_free(p_out); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_rebind: REBINDING\n")); + } else { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_rebind: could not allocate DHCP request\n")); + result = ERR_MEM; + } + if (dhcp->tries < 255) { + dhcp->tries++; + } + msecs = (u16_t)(dhcp->tries < 10 ? dhcp->tries * 1000 : 10 * 1000); + dhcp->request_timeout = (u16_t)((msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_rebind(): set request timeout %"U16_F" msecs\n", msecs)); + return result; +} + +/** + * Enter REBOOTING state to verify an existing lease + * + * @param netif network interface which must reboot + */ +static err_t +dhcp_reboot(struct netif *netif) +{ + struct dhcp *dhcp = netif_dhcp_data(netif); + err_t result; + u16_t msecs; + u8_t i; + struct pbuf *p_out; + u16_t options_out_len; + + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_reboot()\n")); + dhcp_set_state(dhcp, DHCP_STATE_REBOOTING); + + /* create and initialize the DHCP message header */ + p_out = dhcp_create_msg(netif, dhcp, DHCP_REQUEST, &options_out_len); + if (p_out != NULL) { + struct dhcp_msg *msg_out = (struct dhcp_msg *)p_out->payload; + options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN); + options_out_len = dhcp_option_short(options_out_len, msg_out->options, DHCP_MAX_MSG_LEN_MIN_REQUIRED); + + options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_REQUESTED_IP, 4); + options_out_len = dhcp_option_long(options_out_len, msg_out->options, lwip_ntohl(ip4_addr_get_u32(&dhcp->offered_ip_addr))); + + options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_PARAMETER_REQUEST_LIST, LWIP_ARRAYSIZE(dhcp_discover_request_options)); + for (i = 0; i < LWIP_ARRAYSIZE(dhcp_discover_request_options); i++) { + options_out_len = dhcp_option_byte(options_out_len, msg_out->options, dhcp_discover_request_options[i]); + } + +#if LWIP_NETIF_HOSTNAME + options_out_len = dhcp_option_hostname(options_out_len, msg_out->options, netif); +#endif /* LWIP_NETIF_HOSTNAME */ + + LWIP_HOOK_DHCP_APPEND_OPTIONS(netif, dhcp, DHCP_STATE_REBOOTING, msg_out, DHCP_REQUEST, &options_out_len); + dhcp_option_trailer(options_out_len, msg_out->options, p_out); + + /* broadcast to server */ + result = udp_sendto_if(dhcp_pcb, p_out, IP_ADDR_BROADCAST, LWIP_IANA_PORT_DHCP_SERVER, netif); + pbuf_free(p_out); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_reboot: REBOOTING\n")); + } else { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_reboot: could not allocate DHCP request\n")); + result = ERR_MEM; + } + if (dhcp->tries < 255) { + dhcp->tries++; + } + msecs = (u16_t)(dhcp->tries < 10 ? dhcp->tries * 1000 : 10 * 1000); + dhcp->request_timeout = (u16_t)((msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_reboot(): set request timeout %"U16_F" msecs\n", msecs)); + return result; +} + +/** + * @ingroup dhcp4 + * Release a DHCP lease and stop DHCP statemachine (and AUTOIP if LWIP_DHCP_AUTOIP_COOP). + * + * @param netif network interface + */ +void +dhcp_release_and_stop(struct netif *netif) +{ + struct dhcp *dhcp = netif_dhcp_data(netif); + ip_addr_t server_ip_addr; + + LWIP_ASSERT_CORE_LOCKED(); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_release_and_stop()\n")); + if (dhcp == NULL) { + return; + } + + /* already off? -> nothing to do */ + if (dhcp->state == DHCP_STATE_OFF) { + return; + } + + ip_addr_copy(server_ip_addr, dhcp->server_ip_addr); + + /* clean old DHCP offer */ + ip_addr_set_zero_ip4(&dhcp->server_ip_addr); + ip4_addr_set_zero(&dhcp->offered_ip_addr); + ip4_addr_set_zero(&dhcp->offered_sn_mask); + ip4_addr_set_zero(&dhcp->offered_gw_addr); +#if LWIP_DHCP_BOOTP_FILE + ip4_addr_set_zero(&dhcp->offered_si_addr); +#endif /* LWIP_DHCP_BOOTP_FILE */ + dhcp->offered_t0_lease = dhcp->offered_t1_renew = dhcp->offered_t2_rebind = 0; + dhcp->t1_renew_time = dhcp->t2_rebind_time = dhcp->lease_used = dhcp->t0_timeout = 0; + + /* send release message when current IP was assigned via DHCP */ + if (dhcp_supplied_address(netif)) { + /* create and initialize the DHCP message header */ + struct pbuf *p_out; + u16_t options_out_len; + p_out = dhcp_create_msg(netif, dhcp, DHCP_RELEASE, &options_out_len); + if (p_out != NULL) { + struct dhcp_msg *msg_out = (struct dhcp_msg *)p_out->payload; + options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_SERVER_ID, 4); + options_out_len = dhcp_option_long(options_out_len, msg_out->options, lwip_ntohl(ip4_addr_get_u32(ip_2_ip4(&server_ip_addr)))); + + LWIP_HOOK_DHCP_APPEND_OPTIONS(netif, dhcp, dhcp->state, msg_out, DHCP_RELEASE, &options_out_len); + dhcp_option_trailer(options_out_len, msg_out->options, p_out); + + udp_sendto_if(dhcp_pcb, p_out, &server_ip_addr, LWIP_IANA_PORT_DHCP_SERVER, netif); + pbuf_free(p_out); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_release: RELEASED, DHCP_STATE_OFF\n")); + } else { + /* sending release failed, but that's not a problem since the correct behaviour of dhcp does not rely on release */ + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_release: could not allocate DHCP request\n")); + } + } + + /* remove IP address from interface (prevents routing from selecting this interface) */ + netif_set_addr(netif, IP4_ADDR_ANY4, IP4_ADDR_ANY4, IP4_ADDR_ANY4); + +#if LWIP_DHCP_AUTOIP_COOP + if (dhcp->autoip_coop_state == DHCP_AUTOIP_COOP_STATE_ON) { + autoip_stop(netif); + dhcp->autoip_coop_state = DHCP_AUTOIP_COOP_STATE_OFF; + } +#endif /* LWIP_DHCP_AUTOIP_COOP */ + + dhcp_set_state(dhcp, DHCP_STATE_OFF); + + if (dhcp->pcb_allocated != 0) { + dhcp_dec_pcb_refcount(); /* free DHCP PCB if not needed any more */ + dhcp->pcb_allocated = 0; + } +} + +/** + * @ingroup dhcp4 + * This function calls dhcp_release_and_stop() internally. + * @deprecated Use dhcp_release_and_stop() instead. + */ +err_t +dhcp_release(struct netif *netif) +{ + dhcp_release_and_stop(netif); + return ERR_OK; +} + +/** + * @ingroup dhcp4 + * This function calls dhcp_release_and_stop() internally. + * @deprecated Use dhcp_release_and_stop() instead. + */ +void +dhcp_stop(struct netif *netif) +{ + dhcp_release_and_stop(netif); +} + +/* + * Set the DHCP state of a DHCP client. + * + * If the state changed, reset the number of tries. + */ +static void +dhcp_set_state(struct dhcp *dhcp, u8_t new_state) +{ + if (new_state != dhcp->state) { + dhcp->state = new_state; + dhcp->tries = 0; + dhcp->request_timeout = 0; + } +} + +/* + * Concatenate an option type and length field to the outgoing + * DHCP message. + * + */ +static u16_t +dhcp_option(u16_t options_out_len, u8_t *options, u8_t option_type, u8_t option_len) +{ + LWIP_ASSERT("dhcp_option: options_out_len + 2 + option_len <= DHCP_OPTIONS_LEN", options_out_len + 2U + option_len <= DHCP_OPTIONS_LEN); + options[options_out_len++] = option_type; + options[options_out_len++] = option_len; + return options_out_len; +} +/* + * Concatenate a single byte to the outgoing DHCP message. + * + */ +static u16_t +dhcp_option_byte(u16_t options_out_len, u8_t *options, u8_t value) +{ + LWIP_ASSERT("dhcp_option_byte: options_out_len < DHCP_OPTIONS_LEN", options_out_len < DHCP_OPTIONS_LEN); + options[options_out_len++] = value; + return options_out_len; +} + +static u16_t +dhcp_option_short(u16_t options_out_len, u8_t *options, u16_t value) +{ + LWIP_ASSERT("dhcp_option_short: options_out_len + 2 <= DHCP_OPTIONS_LEN", options_out_len + 2U <= DHCP_OPTIONS_LEN); + options[options_out_len++] = (u8_t)((value & 0xff00U) >> 8); + options[options_out_len++] = (u8_t) (value & 0x00ffU); + return options_out_len; +} + +static u16_t +dhcp_option_long(u16_t options_out_len, u8_t *options, u32_t value) +{ + LWIP_ASSERT("dhcp_option_long: options_out_len + 4 <= DHCP_OPTIONS_LEN", options_out_len + 4U <= DHCP_OPTIONS_LEN); + options[options_out_len++] = (u8_t)((value & 0xff000000UL) >> 24); + options[options_out_len++] = (u8_t)((value & 0x00ff0000UL) >> 16); + options[options_out_len++] = (u8_t)((value & 0x0000ff00UL) >> 8); + options[options_out_len++] = (u8_t)((value & 0x000000ffUL)); + return options_out_len; +} + +#if LWIP_NETIF_HOSTNAME +static u16_t +dhcp_option_hostname(u16_t options_out_len, u8_t *options, struct netif *netif) +{ + if (netif->hostname != NULL) { + size_t namelen = strlen(netif->hostname); + if (namelen > 0) { + size_t len; + const char *p = netif->hostname; + /* Shrink len to available bytes (need 2 bytes for OPTION_HOSTNAME + and 1 byte for trailer) */ + size_t available = DHCP_OPTIONS_LEN - options_out_len - 3; + LWIP_ASSERT("DHCP: hostname is too long!", namelen <= available); + len = LWIP_MIN(namelen, available); + LWIP_ASSERT("DHCP: hostname is too long!", len <= 0xFF); + options_out_len = dhcp_option(options_out_len, options, DHCP_OPTION_HOSTNAME, (u8_t)len); + while (len--) { + options_out_len = dhcp_option_byte(options_out_len, options, *p++); + } + } + } + return options_out_len; +} +#endif /* LWIP_NETIF_HOSTNAME */ + +/** + * Extract the DHCP message and the DHCP options. + * + * Extract the DHCP message and the DHCP options, each into a contiguous + * piece of memory. As a DHCP message is variable sized by its options, + * and also allows overriding some fields for options, the easy approach + * is to first unfold the options into a contiguous piece of memory, and + * use that further on. + * + */ +static err_t +dhcp_parse_reply(struct pbuf *p, struct dhcp *dhcp) +{ + u8_t *options; + u16_t offset; + u16_t offset_max; + u16_t options_idx; + u16_t options_idx_max; + struct pbuf *q; + int parse_file_as_options = 0; + int parse_sname_as_options = 0; + struct dhcp_msg *msg_in; +#if LWIP_DHCP_BOOTP_FILE + int file_overloaded = 0; +#endif + + LWIP_UNUSED_ARG(dhcp); + + /* clear received options */ + dhcp_clear_all_options(dhcp); + /* check that beginning of dhcp_msg (up to and including chaddr) is in first pbuf */ + if (p->len < DHCP_SNAME_OFS) { + return ERR_BUF; + } + msg_in = (struct dhcp_msg *)p->payload; +#if LWIP_DHCP_BOOTP_FILE + /* clear boot file name */ + dhcp->boot_file_name[0] = 0; +#endif /* LWIP_DHCP_BOOTP_FILE */ + + /* parse options */ + + /* start with options field */ + options_idx = DHCP_OPTIONS_OFS; + /* parse options to the end of the received packet */ + options_idx_max = p->tot_len; +again: + q = p; + while ((q != NULL) && (options_idx >= q->len)) { + options_idx = (u16_t)(options_idx - q->len); + options_idx_max = (u16_t)(options_idx_max - q->len); + q = q->next; + } + if (q == NULL) { + return ERR_BUF; + } + offset = options_idx; + offset_max = options_idx_max; + options = (u8_t *)q->payload; + /* at least 1 byte to read and no end marker, then at least 3 bytes to read? */ + while ((q != NULL) && (offset < offset_max) && (options[offset] != DHCP_OPTION_END)) { + u8_t op = options[offset]; + u8_t len; + u8_t decode_len = 0; + int decode_idx = -1; + u16_t val_offset = (u16_t)(offset + 2); + if (val_offset < offset) { + /* overflow */ + return ERR_BUF; + } + /* len byte might be in the next pbuf */ + if ((offset + 1) < q->len) { + len = options[offset + 1]; + } else { + len = (q->next != NULL ? ((u8_t *)q->next->payload)[0] : 0); + } + /* LWIP_DEBUGF(DHCP_DEBUG, ("msg_offset=%"U16_F", q->len=%"U16_F, msg_offset, q->len)); */ + decode_len = len; + switch (op) { + /* case(DHCP_OPTION_END): handled above */ + case (DHCP_OPTION_PAD): + /* special option: no len encoded */ + decode_len = len = 0; + /* will be increased below */ + break; + case (DHCP_OPTION_SUBNET_MASK): + LWIP_ERROR("len == 4", len == 4, return ERR_VAL;); + decode_idx = DHCP_OPTION_IDX_SUBNET_MASK; + break; + case (DHCP_OPTION_ROUTER): + decode_len = 4; /* only copy the first given router */ + LWIP_ERROR("len >= decode_len", len >= decode_len, return ERR_VAL;); + decode_idx = DHCP_OPTION_IDX_ROUTER; + break; +#if LWIP_DHCP_PROVIDE_DNS_SERVERS + case (DHCP_OPTION_DNS_SERVER): + /* special case: there might be more than one server */ + LWIP_ERROR("len %% 4 == 0", len % 4 == 0, return ERR_VAL;); + /* limit number of DNS servers */ + decode_len = LWIP_MIN(len, 4 * DNS_MAX_SERVERS); + LWIP_ERROR("len >= decode_len", len >= decode_len, return ERR_VAL;); + decode_idx = DHCP_OPTION_IDX_DNS_SERVER; + break; +#endif /* LWIP_DHCP_PROVIDE_DNS_SERVERS */ + case (DHCP_OPTION_LEASE_TIME): + LWIP_ERROR("len == 4", len == 4, return ERR_VAL;); + decode_idx = DHCP_OPTION_IDX_LEASE_TIME; + break; +#if LWIP_DHCP_GET_NTP_SRV + case (DHCP_OPTION_NTP): + /* special case: there might be more than one server */ + LWIP_ERROR("len %% 4 == 0", len % 4 == 0, return ERR_VAL;); + /* limit number of NTP servers */ + decode_len = LWIP_MIN(len, 4 * LWIP_DHCP_MAX_NTP_SERVERS); + LWIP_ERROR("len >= decode_len", len >= decode_len, return ERR_VAL;); + decode_idx = DHCP_OPTION_IDX_NTP_SERVER; + break; +#endif /* LWIP_DHCP_GET_NTP_SRV*/ + case (DHCP_OPTION_OVERLOAD): + LWIP_ERROR("len == 1", len == 1, return ERR_VAL;); + /* decode overload only in options, not in file/sname: invalid packet */ + LWIP_ERROR("overload in file/sname", options_idx == DHCP_OPTIONS_OFS, return ERR_VAL;); + decode_idx = DHCP_OPTION_IDX_OVERLOAD; + break; + case (DHCP_OPTION_MESSAGE_TYPE): + LWIP_ERROR("len == 1", len == 1, return ERR_VAL;); + decode_idx = DHCP_OPTION_IDX_MSG_TYPE; + break; + case (DHCP_OPTION_SERVER_ID): + LWIP_ERROR("len == 4", len == 4, return ERR_VAL;); + decode_idx = DHCP_OPTION_IDX_SERVER_ID; + break; + case (DHCP_OPTION_T1): + LWIP_ERROR("len == 4", len == 4, return ERR_VAL;); + decode_idx = DHCP_OPTION_IDX_T1; + break; + case (DHCP_OPTION_T2): + LWIP_ERROR("len == 4", len == 4, return ERR_VAL;); + decode_idx = DHCP_OPTION_IDX_T2; + break; + default: + decode_len = 0; + LWIP_DEBUGF(DHCP_DEBUG, ("skipping option %"U16_F" in options\n", (u16_t)op)); + LWIP_HOOK_DHCP_PARSE_OPTION(ip_current_netif(), dhcp, dhcp->state, msg_in, + dhcp_option_given(dhcp, DHCP_OPTION_IDX_MSG_TYPE) ? (u8_t)dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_MSG_TYPE) : 0, + op, len, q, val_offset); + break; + } + if (op == DHCP_OPTION_PAD) { + offset++; + } else { + if (offset + len + 2 > 0xFFFF) { + /* overflow */ + return ERR_BUF; + } + offset = (u16_t)(offset + len + 2); + if (decode_len > 0) { + u32_t value = 0; + u16_t copy_len; +decode_next: + LWIP_ASSERT("check decode_idx", decode_idx >= 0 && decode_idx < DHCP_OPTION_IDX_MAX); + if (!dhcp_option_given(dhcp, decode_idx)) { + copy_len = LWIP_MIN(decode_len, 4); + if (pbuf_copy_partial(q, &value, copy_len, val_offset) != copy_len) { + return ERR_BUF; + } + if (decode_len > 4) { + /* decode more than one u32_t */ + u16_t next_val_offset; + LWIP_ERROR("decode_len %% 4 == 0", decode_len % 4 == 0, return ERR_VAL;); + dhcp_got_option(dhcp, decode_idx); + dhcp_set_option_value(dhcp, decode_idx, lwip_htonl(value)); + decode_len = (u8_t)(decode_len - 4); + next_val_offset = (u16_t)(val_offset + 4); + if (next_val_offset < val_offset) { + /* overflow */ + return ERR_BUF; + } + val_offset = next_val_offset; + decode_idx++; + goto decode_next; + } else if (decode_len == 4) { + value = lwip_ntohl(value); + } else { + LWIP_ERROR("invalid decode_len", decode_len == 1, return ERR_VAL;); + value = ((u8_t *)&value)[0]; + } + dhcp_got_option(dhcp, decode_idx); + dhcp_set_option_value(dhcp, decode_idx, value); + } + } + } + if (offset >= q->len) { + offset = (u16_t)(offset - q->len); + offset_max = (u16_t)(offset_max - q->len); + if (offset < offset_max) { + q = q->next; + LWIP_ERROR("next pbuf was null", q != NULL, return ERR_VAL;); + options = (u8_t *)q->payload; + } else { + /* We've run out of bytes, probably no end marker. Don't proceed. */ + return ERR_BUF; + } + } + } + /* is this an overloaded message? */ + if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_OVERLOAD)) { + u32_t overload = dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_OVERLOAD); + dhcp_clear_option(dhcp, DHCP_OPTION_IDX_OVERLOAD); + if (overload == DHCP_OVERLOAD_FILE) { + parse_file_as_options = 1; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("overloaded file field\n")); + } else if (overload == DHCP_OVERLOAD_SNAME) { + parse_sname_as_options = 1; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("overloaded sname field\n")); + } else if (overload == DHCP_OVERLOAD_SNAME_FILE) { + parse_sname_as_options = 1; + parse_file_as_options = 1; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("overloaded sname and file field\n")); + } else { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("invalid overload option: %d\n", (int)overload)); + } + } + if (parse_file_as_options) { + /* if both are overloaded, parse file first and then sname (RFC 2131 ch. 4.1) */ + parse_file_as_options = 0; + options_idx = DHCP_FILE_OFS; + options_idx_max = DHCP_FILE_OFS + DHCP_FILE_LEN; +#if LWIP_DHCP_BOOTP_FILE + file_overloaded = 1; +#endif + goto again; + } else if (parse_sname_as_options) { + parse_sname_as_options = 0; + options_idx = DHCP_SNAME_OFS; + options_idx_max = DHCP_SNAME_OFS + DHCP_SNAME_LEN; + goto again; + } +#if LWIP_DHCP_BOOTP_FILE + if (!file_overloaded) { + /* only do this for ACK messages */ + if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_MSG_TYPE) && + (dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_MSG_TYPE) == DHCP_ACK)) + /* copy bootp file name, don't care for sname (server hostname) */ + if (pbuf_copy_partial(p, dhcp->boot_file_name, DHCP_FILE_LEN-1, DHCP_FILE_OFS) != (DHCP_FILE_LEN-1)) { + return ERR_BUF; + } + /* make sure the string is really NULL-terminated */ + dhcp->boot_file_name[DHCP_FILE_LEN-1] = 0; + } +#endif /* LWIP_DHCP_BOOTP_FILE */ + return ERR_OK; +} + +/** + * If an incoming DHCP message is in response to us, then trigger the state machine + */ +static void +dhcp_recv(void *arg, struct udp_pcb *pcb, struct pbuf *p, const ip_addr_t *addr, u16_t port) +{ + struct netif *netif = ip_current_input_netif(); + struct dhcp *dhcp = netif_dhcp_data(netif); + struct dhcp_msg *reply_msg = (struct dhcp_msg *)p->payload; + u8_t msg_type; + u8_t i; + struct dhcp_msg *msg_in; + + LWIP_UNUSED_ARG(arg); + + /* Caught DHCP message from netif that does not have DHCP enabled? -> not interested */ + if ((dhcp == NULL) || (dhcp->pcb_allocated == 0)) { + goto free_pbuf_and_return; + } + + LWIP_ASSERT("invalid server address type", IP_IS_V4(addr)); + + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_recv(pbuf = %p) from DHCP server %"U16_F".%"U16_F".%"U16_F".%"U16_F" port %"U16_F"\n", (void *)p, + ip4_addr1_16(ip_2_ip4(addr)), ip4_addr2_16(ip_2_ip4(addr)), ip4_addr3_16(ip_2_ip4(addr)), ip4_addr4_16(ip_2_ip4(addr)), port)); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("pbuf->len = %"U16_F"\n", p->len)); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("pbuf->tot_len = %"U16_F"\n", p->tot_len)); + /* prevent warnings about unused arguments */ + LWIP_UNUSED_ARG(pcb); + LWIP_UNUSED_ARG(addr); + LWIP_UNUSED_ARG(port); + + if (p->len < DHCP_MIN_REPLY_LEN) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, ("DHCP reply message or pbuf too short\n")); + goto free_pbuf_and_return; + } + + if (reply_msg->op != DHCP_BOOTREPLY) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, ("not a DHCP reply message, but type %"U16_F"\n", (u16_t)reply_msg->op)); + goto free_pbuf_and_return; + } + /* iterate through hardware address and match against DHCP message */ + for (i = 0; i < netif->hwaddr_len && i < LWIP_MIN(DHCP_CHADDR_LEN, NETIF_MAX_HWADDR_LEN); i++) { + if (netif->hwaddr[i] != reply_msg->chaddr[i]) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, + ("netif->hwaddr[%"U16_F"]==%02"X16_F" != reply_msg->chaddr[%"U16_F"]==%02"X16_F"\n", + (u16_t)i, (u16_t)netif->hwaddr[i], (u16_t)i, (u16_t)reply_msg->chaddr[i])); + goto free_pbuf_and_return; + } + } + /* match transaction ID against what we expected */ + if (lwip_ntohl(reply_msg->xid) != dhcp->xid) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, + ("transaction id mismatch reply_msg->xid(%"X32_F")!=dhcp->xid(%"X32_F")\n", lwip_ntohl(reply_msg->xid), dhcp->xid)); + goto free_pbuf_and_return; + } + /* option fields could be unfold? */ + if (dhcp_parse_reply(p, dhcp) != ERR_OK) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, + ("problem unfolding DHCP message - too short on memory?\n")); + goto free_pbuf_and_return; + } + + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("searching DHCP_OPTION_MESSAGE_TYPE\n")); + /* obtain pointer to DHCP message type */ + if (!dhcp_option_given(dhcp, DHCP_OPTION_IDX_MSG_TYPE)) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, ("DHCP_OPTION_MESSAGE_TYPE option not found\n")); + goto free_pbuf_and_return; + } + + msg_in = (struct dhcp_msg *)p->payload; + /* read DHCP message type */ + msg_type = (u8_t)dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_MSG_TYPE); + /* message type is DHCP ACK? */ + if (msg_type == DHCP_ACK) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("DHCP_ACK received\n")); + /* in requesting state? */ + if (dhcp->state == DHCP_STATE_REQUESTING) { + dhcp_handle_ack(netif, msg_in); +#if DHCP_DOES_ARP_CHECK + if ((netif->flags & NETIF_FLAG_ETHARP) != 0) { + /* check if the acknowledged lease address is already in use */ + dhcp_check(netif); + } else { + /* bind interface to the acknowledged lease address */ + dhcp_bind(netif); + } +#else + /* bind interface to the acknowledged lease address */ + dhcp_bind(netif); +#endif + } + /* already bound to the given lease address? */ + else if ((dhcp->state == DHCP_STATE_REBOOTING) || (dhcp->state == DHCP_STATE_REBINDING) || + (dhcp->state == DHCP_STATE_RENEWING)) { + dhcp_handle_ack(netif, msg_in); + dhcp_bind(netif); + } + } + /* received a DHCP_NAK in appropriate state? */ + else if ((msg_type == DHCP_NAK) && + ((dhcp->state == DHCP_STATE_REBOOTING) || (dhcp->state == DHCP_STATE_REQUESTING) || + (dhcp->state == DHCP_STATE_REBINDING) || (dhcp->state == DHCP_STATE_RENEWING ))) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("DHCP_NAK received\n")); + dhcp_handle_nak(netif); + } + /* received a DHCP_OFFER in DHCP_STATE_SELECTING state? */ + else if ((msg_type == DHCP_OFFER) && (dhcp->state == DHCP_STATE_SELECTING)) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("DHCP_OFFER received in DHCP_STATE_SELECTING state\n")); + /* remember offered lease */ + dhcp_handle_offer(netif, msg_in); + } + +free_pbuf_and_return: + pbuf_free(p); +} + +/** + * Create a DHCP request, fill in common headers + * + * @param netif the netif under DHCP control + * @param dhcp dhcp control struct + * @param message_type message type of the request + */ +static struct pbuf * +dhcp_create_msg(struct netif *netif, struct dhcp *dhcp, u8_t message_type, u16_t *options_out_len) +{ + u16_t i; + struct pbuf *p_out; + struct dhcp_msg *msg_out; + u16_t options_out_len_loc; + +#ifndef DHCP_GLOBAL_XID + /** default global transaction identifier starting value (easy to match + * with a packet analyser). We simply increment for each new request. + * Predefine DHCP_GLOBAL_XID to a better value or a function call to generate one + * at runtime, any supporting function prototypes can be defined in DHCP_GLOBAL_XID_HEADER */ +#if DHCP_CREATE_RAND_XID && defined(LWIP_RAND) + static u32_t xid; +#else /* DHCP_CREATE_RAND_XID && defined(LWIP_RAND) */ + static u32_t xid = 0xABCD0000; +#endif /* DHCP_CREATE_RAND_XID && defined(LWIP_RAND) */ +#else + if (!xid_initialised) { + xid = DHCP_GLOBAL_XID; + xid_initialised = !xid_initialised; + } +#endif + LWIP_ERROR("dhcp_create_msg: netif != NULL", (netif != NULL), return NULL;); + LWIP_ERROR("dhcp_create_msg: dhcp != NULL", (dhcp != NULL), return NULL;); + p_out = pbuf_alloc(PBUF_TRANSPORT, sizeof(struct dhcp_msg), PBUF_RAM); + if (p_out == NULL) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, + ("dhcp_create_msg(): could not allocate pbuf\n")); + return NULL; + } + LWIP_ASSERT("dhcp_create_msg: check that first pbuf can hold struct dhcp_msg", + (p_out->len >= sizeof(struct dhcp_msg))); + + /* DHCP_REQUEST should reuse 'xid' from DHCPOFFER */ + if ((message_type != DHCP_REQUEST) || (dhcp->state == DHCP_STATE_REBOOTING)) { + /* reuse transaction identifier in retransmissions */ + if (dhcp->tries == 0) { +#if DHCP_CREATE_RAND_XID && defined(LWIP_RAND) + xid = LWIP_RAND(); +#else /* DHCP_CREATE_RAND_XID && defined(LWIP_RAND) */ + xid++; +#endif /* DHCP_CREATE_RAND_XID && defined(LWIP_RAND) */ + } + dhcp->xid = xid; + } + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, + ("transaction id xid(%"X32_F")\n", xid)); + + msg_out = (struct dhcp_msg *)p_out->payload; + memset(msg_out, 0, sizeof(struct dhcp_msg)); + + msg_out->op = DHCP_BOOTREQUEST; + /* @todo: make link layer independent */ + msg_out->htype = LWIP_IANA_HWTYPE_ETHERNET; + msg_out->hlen = netif->hwaddr_len; + msg_out->xid = lwip_htonl(dhcp->xid); + /* we don't need the broadcast flag since we can receive unicast traffic + before being fully configured! */ + /* set ciaddr to netif->ip_addr based on message_type and state */ + if ((message_type == DHCP_INFORM) || (message_type == DHCP_DECLINE) || (message_type == DHCP_RELEASE) || + ((message_type == DHCP_REQUEST) && /* DHCP_STATE_BOUND not used for sending! */ + ((dhcp->state == DHCP_STATE_RENEWING) || dhcp->state == DHCP_STATE_REBINDING))) { + ip4_addr_copy(msg_out->ciaddr, *netif_ip4_addr(netif)); + } + for (i = 0; i < LWIP_MIN(DHCP_CHADDR_LEN, NETIF_MAX_HWADDR_LEN); i++) { + /* copy netif hardware address (padded with zeroes through memset already) */ + msg_out->chaddr[i] = netif->hwaddr[i]; + } + msg_out->cookie = PP_HTONL(DHCP_MAGIC_COOKIE); + /* Add option MESSAGE_TYPE */ + options_out_len_loc = dhcp_option(0, msg_out->options, DHCP_OPTION_MESSAGE_TYPE, DHCP_OPTION_MESSAGE_TYPE_LEN); + options_out_len_loc = dhcp_option_byte(options_out_len_loc, msg_out->options, message_type); + if (options_out_len) { + *options_out_len = options_out_len_loc; + } + return p_out; +} + +/** + * Add a DHCP message trailer + * + * Adds the END option to the DHCP message, and if + * necessary, up to three padding bytes. + */ +static void +dhcp_option_trailer(u16_t options_out_len, u8_t *options, struct pbuf *p_out) +{ + options[options_out_len++] = DHCP_OPTION_END; + /* packet is too small, or not 4 byte aligned? */ + while (((options_out_len < DHCP_MIN_OPTIONS_LEN) || (options_out_len & 3)) && + (options_out_len < DHCP_OPTIONS_LEN)) { + /* add a fill/padding byte */ + options[options_out_len++] = 0; + } + /* shrink the pbuf to the actual content length */ + pbuf_realloc(p_out, (u16_t)(sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN + options_out_len)); +} + +/** check if DHCP supplied netif->ip_addr + * + * @param netif the netif to check + * @return 1 if DHCP supplied netif->ip_addr (states BOUND or RENEWING), + * 0 otherwise + */ +u8_t +dhcp_supplied_address(const struct netif *netif) +{ + if ((netif != NULL) && (netif_dhcp_data(netif) != NULL)) { + struct dhcp *dhcp = netif_dhcp_data(netif); + return (dhcp->state == DHCP_STATE_BOUND) || (dhcp->state == DHCP_STATE_RENEWING) || + (dhcp->state == DHCP_STATE_REBINDING); + } + return 0; +} + +#endif /* LWIP_IPV4 && LWIP_DHCP */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv4/etharp.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv4/etharp.c new file mode 100644 index 0000000000000000000000000000000000000000..442aac08aac7798995fe3818e8ed422e1496285c --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv4/etharp.c @@ -0,0 +1,1204 @@ +/** + * @file + * Address Resolution Protocol module for IP over Ethernet + * + * Functionally, ARP is divided into two parts. The first maps an IP address + * to a physical address when sending a packet, and the second part answers + * requests from other machines for our physical address. + * + * This implementation complies with RFC 826 (Ethernet ARP). It supports + * Gratuitious ARP from RFC3220 (IP Mobility Support for IPv4) section 4.6 + * if an interface calls etharp_gratuitous(our_netif) upon address change. + */ + +/* + * Copyright (c) 2001-2003 Swedish Institute of Computer Science. + * Copyright (c) 2003-2004 Leon Woestenberg + * Copyright (c) 2003-2004 Axon Digital Design B.V., The Netherlands. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + */ + +#include "lwip/opt.h" + +#if LWIP_IPV4 && LWIP_ARP /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/etharp.h" +#include "lwip/stats.h" +#include "lwip/snmp.h" +#include "lwip/dhcp.h" +#include "lwip/autoip.h" +#include "lwip/prot/iana.h" +#include "netif/ethernet.h" + +#include + +#ifdef LWIP_HOOK_FILENAME +#include LWIP_HOOK_FILENAME +#endif + +/** Re-request a used ARP entry 1 minute before it would expire to prevent + * breaking a steadily used connection because the ARP entry timed out. */ +#define ARP_AGE_REREQUEST_USED_UNICAST (ARP_MAXAGE - 30) +#define ARP_AGE_REREQUEST_USED_BROADCAST (ARP_MAXAGE - 15) + +/** the time an ARP entry stays pending after first request, + * for ARP_TMR_INTERVAL = 1000, this is + * 10 seconds. + * + * @internal Keep this number at least 2, otherwise it might + * run out instantly if the timeout occurs directly after a request. + */ +#define ARP_MAXPENDING 5 + +/** ARP states */ +enum etharp_state { + ETHARP_STATE_EMPTY = 0, + ETHARP_STATE_PENDING, + ETHARP_STATE_STABLE, + ETHARP_STATE_STABLE_REREQUESTING_1, + ETHARP_STATE_STABLE_REREQUESTING_2 +#if ETHARP_SUPPORT_STATIC_ENTRIES + , ETHARP_STATE_STATIC +#endif /* ETHARP_SUPPORT_STATIC_ENTRIES */ +}; + +struct etharp_entry { +#if ARP_QUEUEING + /** Pointer to queue of pending outgoing packets on this ARP entry. */ + struct etharp_q_entry *q; +#else /* ARP_QUEUEING */ + /** Pointer to a single pending outgoing packet on this ARP entry. */ + struct pbuf *q; +#endif /* ARP_QUEUEING */ + ip4_addr_t ipaddr; + struct netif *netif; + struct eth_addr ethaddr; + u16_t ctime; + u8_t state; +}; + +static struct etharp_entry arp_table[ARP_TABLE_SIZE]; + +#if !LWIP_NETIF_HWADDRHINT +static netif_addr_idx_t etharp_cached_entry; +#endif /* !LWIP_NETIF_HWADDRHINT */ + +/** Try hard to create a new entry - we want the IP address to appear in + the cache (even if this means removing an active entry or so). */ +#define ETHARP_FLAG_TRY_HARD 1 +#define ETHARP_FLAG_FIND_ONLY 2 +#if ETHARP_SUPPORT_STATIC_ENTRIES +#define ETHARP_FLAG_STATIC_ENTRY 4 +#endif /* ETHARP_SUPPORT_STATIC_ENTRIES */ + +#if LWIP_NETIF_HWADDRHINT +#define ETHARP_SET_ADDRHINT(netif, addrhint) do { if (((netif) != NULL) && ((netif)->hints != NULL)) { \ + (netif)->hints->addr_hint = (addrhint); }} while(0) +#else /* LWIP_NETIF_HWADDRHINT */ +#define ETHARP_SET_ADDRHINT(netif, addrhint) (etharp_cached_entry = (addrhint)) +#endif /* LWIP_NETIF_HWADDRHINT */ + + +/* Check for maximum ARP_TABLE_SIZE */ +#if (ARP_TABLE_SIZE > NETIF_ADDR_IDX_MAX) +#error "ARP_TABLE_SIZE must fit in an s16_t, you have to reduce it in your lwipopts.h" +#endif + + +static err_t etharp_request_dst(struct netif *netif, const ip4_addr_t *ipaddr, const struct eth_addr *hw_dst_addr); +static err_t etharp_raw(struct netif *netif, + const struct eth_addr *ethsrc_addr, const struct eth_addr *ethdst_addr, + const struct eth_addr *hwsrc_addr, const ip4_addr_t *ipsrc_addr, + const struct eth_addr *hwdst_addr, const ip4_addr_t *ipdst_addr, + const u16_t opcode); + +#if ARP_QUEUEING +/** + * Free a complete queue of etharp entries + * + * @param q a qeueue of etharp_q_entry's to free + */ +static void +free_etharp_q(struct etharp_q_entry *q) +{ + struct etharp_q_entry *r; + LWIP_ASSERT("q != NULL", q != NULL); + while (q) { + r = q; + q = q->next; + LWIP_ASSERT("r->p != NULL", (r->p != NULL)); + pbuf_free(r->p); + memp_free(MEMP_ARP_QUEUE, r); + } +} +#else /* ARP_QUEUEING */ + +/** Compatibility define: free the queued pbuf */ +#define free_etharp_q(q) pbuf_free(q) + +#endif /* ARP_QUEUEING */ + +/** Clean up ARP table entries */ +static void +etharp_free_entry(int i) +{ + /* remove from SNMP ARP index tree */ + mib2_remove_arp_entry(arp_table[i].netif, &arp_table[i].ipaddr); + /* and empty packet queue */ + if (arp_table[i].q != NULL) { + /* remove all queued packets */ + LWIP_DEBUGF(ETHARP_DEBUG, ("etharp_free_entry: freeing entry %"U16_F", packet queue %p.\n", (u16_t)i, (void *)(arp_table[i].q))); + free_etharp_q(arp_table[i].q); + arp_table[i].q = NULL; + } + /* recycle entry for re-use */ + arp_table[i].state = ETHARP_STATE_EMPTY; +#ifdef LWIP_DEBUG + /* for debugging, clean out the complete entry */ + arp_table[i].ctime = 0; + arp_table[i].netif = NULL; + ip4_addr_set_zero(&arp_table[i].ipaddr); + arp_table[i].ethaddr = ethzero; +#endif /* LWIP_DEBUG */ +} + +/** + * Clears expired entries in the ARP table. + * + * This function should be called every ARP_TMR_INTERVAL milliseconds (1 second), + * in order to expire entries in the ARP table. + */ +void +etharp_tmr(void) +{ + int i; + + LWIP_DEBUGF(ETHARP_DEBUG, ("etharp_timer\n")); + /* remove expired entries from the ARP table */ + for (i = 0; i < ARP_TABLE_SIZE; ++i) { + u8_t state = arp_table[i].state; + if (state != ETHARP_STATE_EMPTY +#if ETHARP_SUPPORT_STATIC_ENTRIES + && (state != ETHARP_STATE_STATIC) +#endif /* ETHARP_SUPPORT_STATIC_ENTRIES */ + ) { + arp_table[i].ctime++; + if ((arp_table[i].ctime >= ARP_MAXAGE) || + ((arp_table[i].state == ETHARP_STATE_PENDING) && + (arp_table[i].ctime >= ARP_MAXPENDING))) { + /* pending or stable entry has become old! */ + LWIP_DEBUGF(ETHARP_DEBUG, ("etharp_timer: expired %s entry %d.\n", + arp_table[i].state >= ETHARP_STATE_STABLE ? "stable" : "pending", i)); + /* clean up entries that have just been expired */ + etharp_free_entry(i); + } else if (arp_table[i].state == ETHARP_STATE_STABLE_REREQUESTING_1) { + /* Don't send more than one request every 2 seconds. */ + arp_table[i].state = ETHARP_STATE_STABLE_REREQUESTING_2; + } else if (arp_table[i].state == ETHARP_STATE_STABLE_REREQUESTING_2) { + /* Reset state to stable, so that the next transmitted packet will + re-send an ARP request. */ + arp_table[i].state = ETHARP_STATE_STABLE; + } else if (arp_table[i].state == ETHARP_STATE_PENDING) { + /* still pending, resend an ARP query */ + etharp_request(arp_table[i].netif, &arp_table[i].ipaddr); + } + } + } +} + +/** + * Search the ARP table for a matching or new entry. + * + * If an IP address is given, return a pending or stable ARP entry that matches + * the address. If no match is found, create a new entry with this address set, + * but in state ETHARP_EMPTY. The caller must check and possibly change the + * state of the returned entry. + * + * If ipaddr is NULL, return a initialized new entry in state ETHARP_EMPTY. + * + * In all cases, attempt to create new entries from an empty entry. If no + * empty entries are available and ETHARP_FLAG_TRY_HARD flag is set, recycle + * old entries. Heuristic choose the least important entry for recycling. + * + * @param ipaddr IP address to find in ARP cache, or to add if not found. + * @param flags See @ref etharp_state + * @param netif netif related to this address (used for NETIF_HWADDRHINT) + * + * @return The ARP entry index that matched or is created, ERR_MEM if no + * entry is found or could be recycled. + */ +static s16_t +etharp_find_entry(const ip4_addr_t *ipaddr, u8_t flags, struct netif *netif) +{ + s16_t old_pending = ARP_TABLE_SIZE, old_stable = ARP_TABLE_SIZE; + s16_t empty = ARP_TABLE_SIZE; + s16_t i = 0; + /* oldest entry with packets on queue */ + s16_t old_queue = ARP_TABLE_SIZE; + /* its age */ + u16_t age_queue = 0, age_pending = 0, age_stable = 0; + + LWIP_UNUSED_ARG(netif); + + /** + * a) do a search through the cache, remember candidates + * b) select candidate entry + * c) create new entry + */ + + /* a) in a single search sweep, do all of this + * 1) remember the first empty entry (if any) + * 2) remember the oldest stable entry (if any) + * 3) remember the oldest pending entry without queued packets (if any) + * 4) remember the oldest pending entry with queued packets (if any) + * 5) search for a matching IP entry, either pending or stable + * until 5 matches, or all entries are searched for. + */ + + for (i = 0; i < ARP_TABLE_SIZE; ++i) { + u8_t state = arp_table[i].state; + /* no empty entry found yet and now we do find one? */ + if ((empty == ARP_TABLE_SIZE) && (state == ETHARP_STATE_EMPTY)) { + LWIP_DEBUGF(ETHARP_DEBUG, ("etharp_find_entry: found empty entry %d\n", (int)i)); + /* remember first empty entry */ + empty = i; + } else if (state != ETHARP_STATE_EMPTY) { + LWIP_ASSERT("state == ETHARP_STATE_PENDING || state >= ETHARP_STATE_STABLE", + state == ETHARP_STATE_PENDING || state >= ETHARP_STATE_STABLE); + /* if given, does IP address match IP address in ARP entry? */ + if (ipaddr && ip4_addr_cmp(ipaddr, &arp_table[i].ipaddr) +#if ETHARP_TABLE_MATCH_NETIF + && ((netif == NULL) || (netif == arp_table[i].netif)) +#endif /* ETHARP_TABLE_MATCH_NETIF */ + ) { + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_find_entry: found matching entry %d\n", (int)i)); + /* found exact IP address match, simply bail out */ + return i; + } + /* pending entry? */ + if (state == ETHARP_STATE_PENDING) { + /* pending with queued packets? */ + if (arp_table[i].q != NULL) { + if (arp_table[i].ctime >= age_queue) { + old_queue = i; + age_queue = arp_table[i].ctime; + } + } else + /* pending without queued packets? */ + { + if (arp_table[i].ctime >= age_pending) { + old_pending = i; + age_pending = arp_table[i].ctime; + } + } + /* stable entry? */ + } else if (state >= ETHARP_STATE_STABLE) { +#if ETHARP_SUPPORT_STATIC_ENTRIES + /* don't record old_stable for static entries since they never expire */ + if (state < ETHARP_STATE_STATIC) +#endif /* ETHARP_SUPPORT_STATIC_ENTRIES */ + { + /* remember entry with oldest stable entry in oldest, its age in maxtime */ + if (arp_table[i].ctime >= age_stable) { + old_stable = i; + age_stable = arp_table[i].ctime; + } + } + } + } + } + /* { we have no match } => try to create a new entry */ + + /* don't create new entry, only search? */ + if (((flags & ETHARP_FLAG_FIND_ONLY) != 0) || + /* or no empty entry found and not allowed to recycle? */ + ((empty == ARP_TABLE_SIZE) && ((flags & ETHARP_FLAG_TRY_HARD) == 0))) { + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_find_entry: no empty entry found and not allowed to recycle\n")); + return (s16_t)ERR_MEM; + } + + /* b) choose the least destructive entry to recycle: + * 1) empty entry + * 2) oldest stable entry + * 3) oldest pending entry without queued packets + * 4) oldest pending entry with queued packets + * + * { ETHARP_FLAG_TRY_HARD is set at this point } + */ + + /* 1) empty entry available? */ + if (empty < ARP_TABLE_SIZE) { + i = empty; + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_find_entry: selecting empty entry %d\n", (int)i)); + } else { + /* 2) found recyclable stable entry? */ + if (old_stable < ARP_TABLE_SIZE) { + /* recycle oldest stable*/ + i = old_stable; + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_find_entry: selecting oldest stable entry %d\n", (int)i)); + /* no queued packets should exist on stable entries */ + LWIP_ASSERT("arp_table[i].q == NULL", arp_table[i].q == NULL); + /* 3) found recyclable pending entry without queued packets? */ + } else if (old_pending < ARP_TABLE_SIZE) { + /* recycle oldest pending */ + i = old_pending; + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_find_entry: selecting oldest pending entry %d (without queue)\n", (int)i)); + /* 4) found recyclable pending entry with queued packets? */ + } else if (old_queue < ARP_TABLE_SIZE) { + /* recycle oldest pending (queued packets are free in etharp_free_entry) */ + i = old_queue; + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_find_entry: selecting oldest pending entry %d, freeing packet queue %p\n", (int)i, (void *)(arp_table[i].q))); + /* no empty or recyclable entries found */ + } else { + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_find_entry: no empty or recyclable entries found\n")); + return (s16_t)ERR_MEM; + } + + /* { empty or recyclable entry found } */ + LWIP_ASSERT("i < ARP_TABLE_SIZE", i < ARP_TABLE_SIZE); + etharp_free_entry(i); + } + + LWIP_ASSERT("i < ARP_TABLE_SIZE", i < ARP_TABLE_SIZE); + LWIP_ASSERT("arp_table[i].state == ETHARP_STATE_EMPTY", + arp_table[i].state == ETHARP_STATE_EMPTY); + + /* IP address given? */ + if (ipaddr != NULL) { + /* set IP address */ + ip4_addr_copy(arp_table[i].ipaddr, *ipaddr); + } + arp_table[i].ctime = 0; +#if ETHARP_TABLE_MATCH_NETIF + arp_table[i].netif = netif; +#endif /* ETHARP_TABLE_MATCH_NETIF */ + return (s16_t)i; +} + +/** + * Update (or insert) a IP/MAC address pair in the ARP cache. + * + * If a pending entry is resolved, any queued packets will be sent + * at this point. + * + * @param netif netif related to this entry (used for NETIF_ADDRHINT) + * @param ipaddr IP address of the inserted ARP entry. + * @param ethaddr Ethernet address of the inserted ARP entry. + * @param flags See @ref etharp_state + * + * @return + * - ERR_OK Successfully updated ARP cache. + * - ERR_MEM If we could not add a new ARP entry when ETHARP_FLAG_TRY_HARD was set. + * - ERR_ARG Non-unicast address given, those will not appear in ARP cache. + * + * @see pbuf_free() + */ +static err_t +etharp_update_arp_entry(struct netif *netif, const ip4_addr_t *ipaddr, struct eth_addr *ethaddr, u8_t flags) +{ + s16_t i; + LWIP_ASSERT("netif->hwaddr_len == ETH_HWADDR_LEN", netif->hwaddr_len == ETH_HWADDR_LEN); + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_update_arp_entry: %"U16_F".%"U16_F".%"U16_F".%"U16_F" - %02"X16_F":%02"X16_F":%02"X16_F":%02"X16_F":%02"X16_F":%02"X16_F"\n", + ip4_addr1_16(ipaddr), ip4_addr2_16(ipaddr), ip4_addr3_16(ipaddr), ip4_addr4_16(ipaddr), + (u16_t)ethaddr->addr[0], (u16_t)ethaddr->addr[1], (u16_t)ethaddr->addr[2], + (u16_t)ethaddr->addr[3], (u16_t)ethaddr->addr[4], (u16_t)ethaddr->addr[5])); + /* non-unicast address? */ + if (ip4_addr_isany(ipaddr) || + ip4_addr_isbroadcast(ipaddr, netif) || + ip4_addr_ismulticast(ipaddr)) { + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_update_arp_entry: will not add non-unicast IP address to ARP cache\n")); + return ERR_ARG; + } + /* find or create ARP entry */ + i = etharp_find_entry(ipaddr, flags, netif); + /* bail out if no entry could be found */ + if (i < 0) { + return (err_t)i; + } + +#if ETHARP_SUPPORT_STATIC_ENTRIES + if (flags & ETHARP_FLAG_STATIC_ENTRY) { + /* record static type */ + arp_table[i].state = ETHARP_STATE_STATIC; + } else if (arp_table[i].state == ETHARP_STATE_STATIC) { + /* found entry is a static type, don't overwrite it */ + return ERR_VAL; + } else +#endif /* ETHARP_SUPPORT_STATIC_ENTRIES */ + { + /* mark it stable */ + arp_table[i].state = ETHARP_STATE_STABLE; + } + + /* record network interface */ + arp_table[i].netif = netif; + /* insert in SNMP ARP index tree */ + mib2_add_arp_entry(netif, &arp_table[i].ipaddr); + + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_update_arp_entry: updating stable entry %"S16_F"\n", i)); + /* update address */ + SMEMCPY(&arp_table[i].ethaddr, ethaddr, ETH_HWADDR_LEN); + /* reset time stamp */ + arp_table[i].ctime = 0; + /* this is where we will send out queued packets! */ +#if ARP_QUEUEING + while (arp_table[i].q != NULL) { + struct pbuf *p; + /* remember remainder of queue */ + struct etharp_q_entry *q = arp_table[i].q; + /* pop first item off the queue */ + arp_table[i].q = q->next; + /* get the packet pointer */ + p = q->p; + /* now queue entry can be freed */ + memp_free(MEMP_ARP_QUEUE, q); +#else /* ARP_QUEUEING */ + if (arp_table[i].q != NULL) { + struct pbuf *p = arp_table[i].q; + arp_table[i].q = NULL; +#endif /* ARP_QUEUEING */ + /* send the queued IP packet */ + ethernet_output(netif, p, (struct eth_addr *)(netif->hwaddr), ethaddr, ETHTYPE_IP); + /* free the queued IP packet */ + pbuf_free(p); + } + return ERR_OK; +} + +#if ETHARP_SUPPORT_STATIC_ENTRIES +/** Add a new static entry to the ARP table. If an entry exists for the + * specified IP address, this entry is overwritten. + * If packets are queued for the specified IP address, they are sent out. + * + * @param ipaddr IP address for the new static entry + * @param ethaddr ethernet address for the new static entry + * @return See return values of etharp_add_static_entry + */ +err_t +etharp_add_static_entry(const ip4_addr_t *ipaddr, struct eth_addr *ethaddr) +{ + struct netif *netif; + LWIP_ASSERT_CORE_LOCKED(); + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_add_static_entry: %"U16_F".%"U16_F".%"U16_F".%"U16_F" - %02"X16_F":%02"X16_F":%02"X16_F":%02"X16_F":%02"X16_F":%02"X16_F"\n", + ip4_addr1_16(ipaddr), ip4_addr2_16(ipaddr), ip4_addr3_16(ipaddr), ip4_addr4_16(ipaddr), + (u16_t)ethaddr->addr[0], (u16_t)ethaddr->addr[1], (u16_t)ethaddr->addr[2], + (u16_t)ethaddr->addr[3], (u16_t)ethaddr->addr[4], (u16_t)ethaddr->addr[5])); + + netif = ip4_route(ipaddr); + if (netif == NULL) { + return ERR_RTE; + } + + return etharp_update_arp_entry(netif, ipaddr, ethaddr, ETHARP_FLAG_TRY_HARD | ETHARP_FLAG_STATIC_ENTRY); +} + +/** Remove a static entry from the ARP table previously added with a call to + * etharp_add_static_entry. + * + * @param ipaddr IP address of the static entry to remove + * @return ERR_OK: entry removed + * ERR_MEM: entry wasn't found + * ERR_ARG: entry wasn't a static entry but a dynamic one + */ +err_t +etharp_remove_static_entry(const ip4_addr_t *ipaddr) +{ + s16_t i; + LWIP_ASSERT_CORE_LOCKED(); + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_remove_static_entry: %"U16_F".%"U16_F".%"U16_F".%"U16_F"\n", + ip4_addr1_16(ipaddr), ip4_addr2_16(ipaddr), ip4_addr3_16(ipaddr), ip4_addr4_16(ipaddr))); + + /* find or create ARP entry */ + i = etharp_find_entry(ipaddr, ETHARP_FLAG_FIND_ONLY, NULL); + /* bail out if no entry could be found */ + if (i < 0) { + return (err_t)i; + } + + if (arp_table[i].state != ETHARP_STATE_STATIC) { + /* entry wasn't a static entry, cannot remove it */ + return ERR_ARG; + } + /* entry found, free it */ + etharp_free_entry(i); + return ERR_OK; +} +#endif /* ETHARP_SUPPORT_STATIC_ENTRIES */ + +/** + * Remove all ARP table entries of the specified netif. + * + * @param netif points to a network interface + */ +void +etharp_cleanup_netif(struct netif *netif) +{ + int i; + + for (i = 0; i < ARP_TABLE_SIZE; ++i) { + u8_t state = arp_table[i].state; + if ((state != ETHARP_STATE_EMPTY) && (arp_table[i].netif == netif)) { + etharp_free_entry(i); + } + } +} + +/** + * Finds (stable) ethernet/IP address pair from ARP table + * using interface and IP address index. + * @note the addresses in the ARP table are in network order! + * + * @param netif points to interface index + * @param ipaddr points to the (network order) IP address index + * @param eth_ret points to return pointer + * @param ip_ret points to return pointer + * @return table index if found, -1 otherwise + */ +ssize_t +etharp_find_addr(struct netif *netif, const ip4_addr_t *ipaddr, + struct eth_addr **eth_ret, const ip4_addr_t **ip_ret) +{ + s16_t i; + + LWIP_ASSERT("eth_ret != NULL && ip_ret != NULL", + eth_ret != NULL && ip_ret != NULL); + + LWIP_UNUSED_ARG(netif); + + i = etharp_find_entry(ipaddr, ETHARP_FLAG_FIND_ONLY, netif); + if ((i >= 0) && (arp_table[i].state >= ETHARP_STATE_STABLE)) { + *eth_ret = &arp_table[i].ethaddr; + *ip_ret = &arp_table[i].ipaddr; + return i; + } + return -1; +} + +/** + * Possibility to iterate over stable ARP table entries + * + * @param i entry number, 0 to ARP_TABLE_SIZE + * @param ipaddr return value: IP address + * @param netif return value: points to interface + * @param eth_ret return value: ETH address + * @return 1 on valid index, 0 otherwise + */ +int +etharp_get_entry(size_t i, ip4_addr_t **ipaddr, struct netif **netif, struct eth_addr **eth_ret) +{ + LWIP_ASSERT("ipaddr != NULL", ipaddr != NULL); + LWIP_ASSERT("netif != NULL", netif != NULL); + LWIP_ASSERT("eth_ret != NULL", eth_ret != NULL); + + if ((i < ARP_TABLE_SIZE) && (arp_table[i].state >= ETHARP_STATE_STABLE)) { + *ipaddr = &arp_table[i].ipaddr; + *netif = arp_table[i].netif; + *eth_ret = &arp_table[i].ethaddr; + return 1; + } else { + return 0; + } +} + +/** + * Responds to ARP requests to us. Upon ARP replies to us, add entry to cache + * send out queued IP packets. Updates cache with snooped address pairs. + * + * Should be called for incoming ARP packets. The pbuf in the argument + * is freed by this function. + * + * @param p The ARP packet that arrived on netif. Is freed by this function. + * @param netif The lwIP network interface on which the ARP packet pbuf arrived. + * + * @see pbuf_free() + */ +void +etharp_input(struct pbuf *p, struct netif *netif) +{ + struct etharp_hdr *hdr; + /* these are aligned properly, whereas the ARP header fields might not be */ + ip4_addr_t sipaddr, dipaddr; + u8_t for_us; + + LWIP_ASSERT_CORE_LOCKED(); + + LWIP_ERROR("netif != NULL", (netif != NULL), return;); + + hdr = (struct etharp_hdr *)p->payload; + + /* RFC 826 "Packet Reception": */ + if ((hdr->hwtype != PP_HTONS(LWIP_IANA_HWTYPE_ETHERNET)) || + (hdr->hwlen != ETH_HWADDR_LEN) || + (hdr->protolen != sizeof(ip4_addr_t)) || + (hdr->proto != PP_HTONS(ETHTYPE_IP))) { + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, + ("etharp_input: packet dropped, wrong hw type, hwlen, proto, protolen or ethernet type (%"U16_F"/%"U16_F"/%"U16_F"/%"U16_F")\n", + hdr->hwtype, (u16_t)hdr->hwlen, hdr->proto, (u16_t)hdr->protolen)); + ETHARP_STATS_INC(etharp.proterr); + ETHARP_STATS_INC(etharp.drop); + pbuf_free(p); + return; + } + ETHARP_STATS_INC(etharp.recv); + +#if LWIP_AUTOIP + /* We have to check if a host already has configured our random + * created link local address and continuously check if there is + * a host with this IP-address so we can detect collisions */ + autoip_arp_reply(netif, hdr); +#endif /* LWIP_AUTOIP */ + + /* Copy struct ip4_addr_wordaligned to aligned ip4_addr, to support compilers without + * structure packing (not using structure copy which breaks strict-aliasing rules). */ + IPADDR_WORDALIGNED_COPY_TO_IP4_ADDR_T(&sipaddr, &hdr->sipaddr); + IPADDR_WORDALIGNED_COPY_TO_IP4_ADDR_T(&dipaddr, &hdr->dipaddr); + + /* this interface is not configured? */ + if (ip4_addr_isany_val(*netif_ip4_addr(netif))) { + for_us = 0; + } else { + /* ARP packet directed to us? */ + for_us = (u8_t)ip4_addr_cmp(&dipaddr, netif_ip4_addr(netif)); + } + + /* ARP message directed to us? + -> add IP address in ARP cache; assume requester wants to talk to us, + can result in directly sending the queued packets for this host. + ARP message not directed to us? + -> update the source IP address in the cache, if present */ + etharp_update_arp_entry(netif, &sipaddr, &(hdr->shwaddr), + for_us ? ETHARP_FLAG_TRY_HARD : ETHARP_FLAG_FIND_ONLY); + + /* now act on the message itself */ + switch (hdr->opcode) { + /* ARP request? */ + case PP_HTONS(ARP_REQUEST): + /* ARP request. If it asked for our address, we send out a + * reply. In any case, we time-stamp any existing ARP entry, + * and possibly send out an IP packet that was queued on it. */ + + LWIP_DEBUGF (ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_input: incoming ARP request\n")); + /* ARP request for our address? */ + if (for_us) { + /* send ARP response */ + etharp_raw(netif, + (struct eth_addr *)netif->hwaddr, &hdr->shwaddr, + (struct eth_addr *)netif->hwaddr, netif_ip4_addr(netif), + &hdr->shwaddr, &sipaddr, + ARP_REPLY); + /* we are not configured? */ + } else if (ip4_addr_isany_val(*netif_ip4_addr(netif))) { + /* { for_us == 0 and netif->ip_addr.addr == 0 } */ + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_input: we are unconfigured, ARP request ignored.\n")); + /* request was not directed to us */ + } else { + /* { for_us == 0 and netif->ip_addr.addr != 0 } */ + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_input: ARP request was not for us.\n")); + } + break; + case PP_HTONS(ARP_REPLY): + /* ARP reply. We already updated the ARP cache earlier. */ + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_input: incoming ARP reply\n")); +#if (LWIP_DHCP && DHCP_DOES_ARP_CHECK) + /* DHCP wants to know about ARP replies from any host with an + * IP address also offered to us by the DHCP server. We do not + * want to take a duplicate IP address on a single network. + * @todo How should we handle redundant (fail-over) interfaces? */ + dhcp_arp_reply(netif, &sipaddr); +#endif /* (LWIP_DHCP && DHCP_DOES_ARP_CHECK) */ + break; + default: + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_input: ARP unknown opcode type %"S16_F"\n", lwip_htons(hdr->opcode))); + ETHARP_STATS_INC(etharp.err); + break; + } + /* free ARP packet */ + pbuf_free(p); +} + +/** Just a small helper function that sends a pbuf to an ethernet address + * in the arp_table specified by the index 'arp_idx'. + */ +static err_t +etharp_output_to_arp_index(struct netif *netif, struct pbuf *q, netif_addr_idx_t arp_idx) +{ + LWIP_ASSERT("arp_table[arp_idx].state >= ETHARP_STATE_STABLE", + arp_table[arp_idx].state >= ETHARP_STATE_STABLE); + /* if arp table entry is about to expire: re-request it, + but only if its state is ETHARP_STATE_STABLE to prevent flooding the + network with ARP requests if this address is used frequently. */ + if (arp_table[arp_idx].state == ETHARP_STATE_STABLE) { + if (arp_table[arp_idx].ctime >= ARP_AGE_REREQUEST_USED_BROADCAST) { + /* issue a standard request using broadcast */ + if (etharp_request(netif, &arp_table[arp_idx].ipaddr) == ERR_OK) { + arp_table[arp_idx].state = ETHARP_STATE_STABLE_REREQUESTING_1; + } + } else if (arp_table[arp_idx].ctime >= ARP_AGE_REREQUEST_USED_UNICAST) { + /* issue a unicast request (for 15 seconds) to prevent unnecessary broadcast */ + if (etharp_request_dst(netif, &arp_table[arp_idx].ipaddr, &arp_table[arp_idx].ethaddr) == ERR_OK) { + arp_table[arp_idx].state = ETHARP_STATE_STABLE_REREQUESTING_1; + } + } + } + + return ethernet_output(netif, q, (struct eth_addr *)(netif->hwaddr), &arp_table[arp_idx].ethaddr, ETHTYPE_IP); +} + +/** + * Resolve and fill-in Ethernet address header for outgoing IP packet. + * + * For IP multicast and broadcast, corresponding Ethernet addresses + * are selected and the packet is transmitted on the link. + * + * For unicast addresses, the packet is submitted to etharp_query(). In + * case the IP address is outside the local network, the IP address of + * the gateway is used. + * + * @param netif The lwIP network interface which the IP packet will be sent on. + * @param q The pbuf(s) containing the IP packet to be sent. + * @param ipaddr The IP address of the packet destination. + * + * @return + * - ERR_RTE No route to destination (no gateway to external networks), + * or the return type of either etharp_query() or ethernet_output(). + */ +err_t +etharp_output(struct netif *netif, struct pbuf *q, const ip4_addr_t *ipaddr) +{ + const struct eth_addr *dest; + struct eth_addr mcastaddr; + const ip4_addr_t *dst_addr = ipaddr; + + LWIP_ASSERT_CORE_LOCKED(); + LWIP_ASSERT("netif != NULL", netif != NULL); + LWIP_ASSERT("q != NULL", q != NULL); + LWIP_ASSERT("ipaddr != NULL", ipaddr != NULL); + + /* Determine on destination hardware address. Broadcasts and multicasts + * are special, other IP addresses are looked up in the ARP table. */ + + /* broadcast destination IP address? */ + if (ip4_addr_isbroadcast(ipaddr, netif)) { + /* broadcast on Ethernet also */ + dest = (const struct eth_addr *)ðbroadcast; + /* multicast destination IP address? */ + } else if (ip4_addr_ismulticast(ipaddr)) { + /* Hash IP multicast address to MAC address.*/ + mcastaddr.addr[0] = LL_IP4_MULTICAST_ADDR_0; + mcastaddr.addr[1] = LL_IP4_MULTICAST_ADDR_1; + mcastaddr.addr[2] = LL_IP4_MULTICAST_ADDR_2; + mcastaddr.addr[3] = ip4_addr2(ipaddr) & 0x7f; + mcastaddr.addr[4] = ip4_addr3(ipaddr); + mcastaddr.addr[5] = ip4_addr4(ipaddr); + /* destination Ethernet address is multicast */ + dest = &mcastaddr; + /* unicast destination IP address? */ + } else { + netif_addr_idx_t i; + /* outside local network? if so, this can neither be a global broadcast nor + a subnet broadcast. */ + if (!ip4_addr_netcmp(ipaddr, netif_ip4_addr(netif), netif_ip4_netmask(netif)) && + !ip4_addr_islinklocal(ipaddr)) { +#if LWIP_AUTOIP + struct ip_hdr *iphdr = LWIP_ALIGNMENT_CAST(struct ip_hdr *, q->payload); + /* According to RFC 3297, chapter 2.6.2 (Forwarding Rules), a packet with + a link-local source address must always be "directly to its destination + on the same physical link. The host MUST NOT send the packet to any + router for forwarding". */ + if (!ip4_addr_islinklocal(&iphdr->src)) +#endif /* LWIP_AUTOIP */ + { +#ifdef LWIP_HOOK_ETHARP_GET_GW + /* For advanced routing, a single default gateway might not be enough, so get + the IP address of the gateway to handle the current destination address. */ + dst_addr = LWIP_HOOK_ETHARP_GET_GW(netif, ipaddr); + if (dst_addr == NULL) +#endif /* LWIP_HOOK_ETHARP_GET_GW */ + { + /* interface has default gateway? */ + if (!ip4_addr_isany_val(*netif_ip4_gw(netif))) { + /* send to hardware address of default gateway IP address */ + dst_addr = netif_ip4_gw(netif); + /* no default gateway available */ + } else { + /* no route to destination error (default gateway missing) */ + return ERR_RTE; + } + } + } + } +#if LWIP_NETIF_HWADDRHINT + if (netif->hints != NULL) { + /* per-pcb cached entry was given */ + netif_addr_idx_t etharp_cached_entry = netif->hints->addr_hint; + if (etharp_cached_entry < ARP_TABLE_SIZE) { +#endif /* LWIP_NETIF_HWADDRHINT */ + if ((arp_table[etharp_cached_entry].state >= ETHARP_STATE_STABLE) && +#if ETHARP_TABLE_MATCH_NETIF + (arp_table[etharp_cached_entry].netif == netif) && +#endif + (ip4_addr_cmp(dst_addr, &arp_table[etharp_cached_entry].ipaddr))) { + /* the per-pcb-cached entry is stable and the right one! */ + ETHARP_STATS_INC(etharp.cachehit); + return etharp_output_to_arp_index(netif, q, etharp_cached_entry); + } +#if LWIP_NETIF_HWADDRHINT + } + } +#endif /* LWIP_NETIF_HWADDRHINT */ + + /* find stable entry: do this here since this is a critical path for + throughput and etharp_find_entry() is kind of slow */ + for (i = 0; i < ARP_TABLE_SIZE; i++) { + if ((arp_table[i].state >= ETHARP_STATE_STABLE) && +#if ETHARP_TABLE_MATCH_NETIF + (arp_table[i].netif == netif) && +#endif + (ip4_addr_cmp(dst_addr, &arp_table[i].ipaddr))) { + /* found an existing, stable entry */ + ETHARP_SET_ADDRHINT(netif, i); + return etharp_output_to_arp_index(netif, q, i); + } + } + /* no stable entry found, use the (slower) query function: + queue on destination Ethernet address belonging to ipaddr */ + return etharp_query(netif, dst_addr, q); + } + + /* continuation for multicast/broadcast destinations */ + /* obtain source Ethernet address of the given interface */ + /* send packet directly on the link */ + return ethernet_output(netif, q, (struct eth_addr *)(netif->hwaddr), dest, ETHTYPE_IP); +} + +/** + * Send an ARP request for the given IP address and/or queue a packet. + * + * If the IP address was not yet in the cache, a pending ARP cache entry + * is added and an ARP request is sent for the given address. The packet + * is queued on this entry. + * + * If the IP address was already pending in the cache, a new ARP request + * is sent for the given address. The packet is queued on this entry. + * + * If the IP address was already stable in the cache, and a packet is + * given, it is directly sent and no ARP request is sent out. + * + * If the IP address was already stable in the cache, and no packet is + * given, an ARP request is sent out. + * + * @param netif The lwIP network interface on which ipaddr + * must be queried for. + * @param ipaddr The IP address to be resolved. + * @param q If non-NULL, a pbuf that must be delivered to the IP address. + * q is not freed by this function. + * + * @note q must only be ONE packet, not a packet queue! + * + * @return + * - ERR_BUF Could not make room for Ethernet header. + * - ERR_MEM Hardware address unknown, and no more ARP entries available + * to query for address or queue the packet. + * - ERR_MEM Could not queue packet due to memory shortage. + * - ERR_RTE No route to destination (no gateway to external networks). + * - ERR_ARG Non-unicast address given, those will not appear in ARP cache. + * + */ +err_t +etharp_query(struct netif *netif, const ip4_addr_t *ipaddr, struct pbuf *q) +{ + struct eth_addr *srcaddr = (struct eth_addr *)netif->hwaddr; + err_t result = ERR_MEM; + int is_new_entry = 0; + s16_t i_err; + netif_addr_idx_t i; + + /* non-unicast address? */ + if (ip4_addr_isbroadcast(ipaddr, netif) || + ip4_addr_ismulticast(ipaddr) || + ip4_addr_isany(ipaddr)) { + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_query: will not add non-unicast IP address to ARP cache\n")); + return ERR_ARG; + } + + /* find entry in ARP cache, ask to create entry if queueing packet */ + i_err = etharp_find_entry(ipaddr, ETHARP_FLAG_TRY_HARD, netif); + + /* could not find or create entry? */ + if (i_err < 0) { + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_query: could not create ARP entry\n")); + if (q) { + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_query: packet dropped\n")); + ETHARP_STATS_INC(etharp.memerr); + } + return (err_t)i_err; + } + LWIP_ASSERT("type overflow", (size_t)i_err < NETIF_ADDR_IDX_MAX); + i = (netif_addr_idx_t)i_err; + + /* mark a fresh entry as pending (we just sent a request) */ + if (arp_table[i].state == ETHARP_STATE_EMPTY) { + is_new_entry = 1; + arp_table[i].state = ETHARP_STATE_PENDING; + /* record network interface for re-sending arp request in etharp_tmr */ + arp_table[i].netif = netif; + } + + /* { i is either a STABLE or (new or existing) PENDING entry } */ + LWIP_ASSERT("arp_table[i].state == PENDING or STABLE", + ((arp_table[i].state == ETHARP_STATE_PENDING) || + (arp_table[i].state >= ETHARP_STATE_STABLE))); + + /* do we have a new entry? or an implicit query request? */ + if (is_new_entry || (q == NULL)) { + /* try to resolve it; send out ARP request */ + result = etharp_request(netif, ipaddr); + if (result != ERR_OK) { + /* ARP request couldn't be sent */ + /* We don't re-send arp request in etharp_tmr, but we still queue packets, + since this failure could be temporary, and the next packet calling + etharp_query again could lead to sending the queued packets. */ + } + if (q == NULL) { + return result; + } + } + + /* packet given? */ + LWIP_ASSERT("q != NULL", q != NULL); + /* stable entry? */ + if (arp_table[i].state >= ETHARP_STATE_STABLE) { + /* we have a valid IP->Ethernet address mapping */ + ETHARP_SET_ADDRHINT(netif, i); + /* send the packet */ + result = ethernet_output(netif, q, srcaddr, &(arp_table[i].ethaddr), ETHTYPE_IP); + /* pending entry? (either just created or already pending */ + } else if (arp_table[i].state == ETHARP_STATE_PENDING) { + /* entry is still pending, queue the given packet 'q' */ + struct pbuf *p; + int copy_needed = 0; + /* IF q includes a pbuf that must be copied, copy the whole chain into a + * new PBUF_RAM. See the definition of PBUF_NEEDS_COPY for details. */ + p = q; + while (p) { + LWIP_ASSERT("no packet queues allowed!", (p->len != p->tot_len) || (p->next == 0)); + if (PBUF_NEEDS_COPY(p)) { + copy_needed = 1; + break; + } + p = p->next; + } + if (copy_needed) { + /* copy the whole packet into new pbufs */ + p = pbuf_clone(PBUF_LINK, PBUF_RAM, q); + } else { + /* referencing the old pbuf is enough */ + p = q; + pbuf_ref(p); + } + /* packet could be taken over? */ + if (p != NULL) { + /* queue packet ... */ +#if ARP_QUEUEING + struct etharp_q_entry *new_entry; + /* allocate a new arp queue entry */ + new_entry = (struct etharp_q_entry *)memp_malloc(MEMP_ARP_QUEUE); + if (new_entry != NULL) { + unsigned int qlen = 0; + new_entry->next = 0; + new_entry->p = p; + if (arp_table[i].q != NULL) { + /* queue was already existent, append the new entry to the end */ + struct etharp_q_entry *r; + r = arp_table[i].q; + qlen++; + while (r->next != NULL) { + r = r->next; + qlen++; + } + r->next = new_entry; + } else { + /* queue did not exist, first item in queue */ + arp_table[i].q = new_entry; + } +#if ARP_QUEUE_LEN + if (qlen >= ARP_QUEUE_LEN) { + struct etharp_q_entry *old; + old = arp_table[i].q; + arp_table[i].q = arp_table[i].q->next; + pbuf_free(old->p); + memp_free(MEMP_ARP_QUEUE, old); + } +#endif + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_query: queued packet %p on ARP entry %"U16_F"\n", (void *)q, i)); + result = ERR_OK; + } else { + /* the pool MEMP_ARP_QUEUE is empty */ + pbuf_free(p); + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_query: could not queue a copy of PBUF_REF packet %p (out of memory)\n", (void *)q)); + result = ERR_MEM; + } +#else /* ARP_QUEUEING */ + /* always queue one packet per ARP request only, freeing a previously queued packet */ + if (arp_table[i].q != NULL) { + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_query: dropped previously queued packet %p for ARP entry %"U16_F"\n", (void *)q, (u16_t)i)); + pbuf_free(arp_table[i].q); + } + arp_table[i].q = p; + result = ERR_OK; + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_query: queued packet %p on ARP entry %"U16_F"\n", (void *)q, (u16_t)i)); +#endif /* ARP_QUEUEING */ + } else { + ETHARP_STATS_INC(etharp.memerr); + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_query: could not queue a copy of PBUF_REF packet %p (out of memory)\n", (void *)q)); + result = ERR_MEM; + } + } + return result; +} + +/** + * Send a raw ARP packet (opcode and all addresses can be modified) + * + * @param netif the lwip network interface on which to send the ARP packet + * @param ethsrc_addr the source MAC address for the ethernet header + * @param ethdst_addr the destination MAC address for the ethernet header + * @param hwsrc_addr the source MAC address for the ARP protocol header + * @param ipsrc_addr the source IP address for the ARP protocol header + * @param hwdst_addr the destination MAC address for the ARP protocol header + * @param ipdst_addr the destination IP address for the ARP protocol header + * @param opcode the type of the ARP packet + * @return ERR_OK if the ARP packet has been sent + * ERR_MEM if the ARP packet couldn't be allocated + * any other err_t on failure + */ +static err_t +etharp_raw(struct netif *netif, const struct eth_addr *ethsrc_addr, + const struct eth_addr *ethdst_addr, + const struct eth_addr *hwsrc_addr, const ip4_addr_t *ipsrc_addr, + const struct eth_addr *hwdst_addr, const ip4_addr_t *ipdst_addr, + const u16_t opcode) +{ + struct pbuf *p; + err_t result = ERR_OK; + struct etharp_hdr *hdr; + + LWIP_ASSERT("netif != NULL", netif != NULL); + + /* allocate a pbuf for the outgoing ARP request packet */ + p = pbuf_alloc(PBUF_LINK, SIZEOF_ETHARP_HDR, PBUF_RAM); + /* could allocate a pbuf for an ARP request? */ + if (p == NULL) { + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, + ("etharp_raw: could not allocate pbuf for ARP request.\n")); + ETHARP_STATS_INC(etharp.memerr); + return ERR_MEM; + } + LWIP_ASSERT("check that first pbuf can hold struct etharp_hdr", + (p->len >= SIZEOF_ETHARP_HDR)); + + hdr = (struct etharp_hdr *)p->payload; + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_raw: sending raw ARP packet.\n")); + hdr->opcode = lwip_htons(opcode); + + LWIP_ASSERT("netif->hwaddr_len must be the same as ETH_HWADDR_LEN for etharp!", + (netif->hwaddr_len == ETH_HWADDR_LEN)); + + /* Write the ARP MAC-Addresses */ + SMEMCPY(&hdr->shwaddr, hwsrc_addr, ETH_HWADDR_LEN); + SMEMCPY(&hdr->dhwaddr, hwdst_addr, ETH_HWADDR_LEN); + /* Copy struct ip4_addr_wordaligned to aligned ip4_addr, to support compilers without + * structure packing. */ + IPADDR_WORDALIGNED_COPY_FROM_IP4_ADDR_T(&hdr->sipaddr, ipsrc_addr); + IPADDR_WORDALIGNED_COPY_FROM_IP4_ADDR_T(&hdr->dipaddr, ipdst_addr); + + hdr->hwtype = PP_HTONS(LWIP_IANA_HWTYPE_ETHERNET); + hdr->proto = PP_HTONS(ETHTYPE_IP); + /* set hwlen and protolen */ + hdr->hwlen = ETH_HWADDR_LEN; + hdr->protolen = sizeof(ip4_addr_t); + + /* send ARP query */ +#if LWIP_AUTOIP + /* If we are using Link-Local, all ARP packets that contain a Link-Local + * 'sender IP address' MUST be sent using link-layer broadcast instead of + * link-layer unicast. (See RFC3927 Section 2.5, last paragraph) */ + if (ip4_addr_islinklocal(ipsrc_addr)) { + ethernet_output(netif, p, ethsrc_addr, ðbroadcast, ETHTYPE_ARP); + } else +#endif /* LWIP_AUTOIP */ + { + ethernet_output(netif, p, ethsrc_addr, ethdst_addr, ETHTYPE_ARP); + } + + ETHARP_STATS_INC(etharp.xmit); + /* free ARP query packet */ + pbuf_free(p); + p = NULL; + /* could not allocate pbuf for ARP request */ + + return result; +} + +/** + * Send an ARP request packet asking for ipaddr to a specific eth address. + * Used to send unicast request to refresh the ARP table just before an entry + * times out + * + * @param netif the lwip network interface on which to send the request + * @param ipaddr the IP address for which to ask + * @param hw_dst_addr the ethernet address to send this packet to + * @return ERR_OK if the request has been sent + * ERR_MEM if the ARP packet couldn't be allocated + * any other err_t on failure + */ +static err_t +etharp_request_dst(struct netif *netif, const ip4_addr_t *ipaddr, const struct eth_addr *hw_dst_addr) +{ + return etharp_raw(netif, (struct eth_addr *)netif->hwaddr, hw_dst_addr, + (struct eth_addr *)netif->hwaddr, netif_ip4_addr(netif), ðzero, + ipaddr, ARP_REQUEST); +} + +/** + * Send an ARP request packet asking for ipaddr. + * + * @param netif the lwip network interface on which to send the request + * @param ipaddr the IP address for which to ask + * @return ERR_OK if the request has been sent + * ERR_MEM if the ARP packet couldn't be allocated + * any other err_t on failure + */ +err_t +etharp_request(struct netif *netif, const ip4_addr_t *ipaddr) +{ + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_request: sending ARP request.\n")); + return etharp_request_dst(netif, ipaddr, ðbroadcast); +} + +#endif /* LWIP_IPV4 && LWIP_ARP */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv4/icmp.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv4/icmp.c new file mode 100644 index 0000000000000000000000000000000000000000..a462ccd34cd74b0bad461bb90439e0e6dfa3bce6 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv4/icmp.c @@ -0,0 +1,404 @@ +/** + * @file + * ICMP - Internet Control Message Protocol + * + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +/* Some ICMP messages should be passed to the transport protocols. This + is not implemented. */ + +#include "lwip/opt.h" + +#if LWIP_IPV4 && LWIP_ICMP /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/icmp.h" +#include "lwip/inet_chksum.h" +#include "lwip/ip.h" +#include "lwip/def.h" +#include "lwip/stats.h" + +#include + +#ifdef LWIP_HOOK_FILENAME +#include LWIP_HOOK_FILENAME +#endif + +/** Small optimization: set to 0 if incoming PBUF_POOL pbuf always can be + * used to modify and send a response packet (and to 1 if this is not the case, + * e.g. when link header is stripped off when receiving) */ +#ifndef LWIP_ICMP_ECHO_CHECK_INPUT_PBUF_LEN +#define LWIP_ICMP_ECHO_CHECK_INPUT_PBUF_LEN 1 +#endif /* LWIP_ICMP_ECHO_CHECK_INPUT_PBUF_LEN */ + +/* The amount of data from the original packet to return in a dest-unreachable */ +#define ICMP_DEST_UNREACH_DATASIZE 8 + +static void icmp_send_response(struct pbuf *p, u8_t type, u8_t code); + +/** + * Processes ICMP input packets, called from ip_input(). + * + * Currently only processes icmp echo requests and sends + * out the echo response. + * + * @param p the icmp echo request packet, p->payload pointing to the icmp header + * @param inp the netif on which this packet was received + */ +void +icmp_input(struct pbuf *p, struct netif *inp) +{ + u8_t type; +#ifdef LWIP_DEBUG + u8_t code; +#endif /* LWIP_DEBUG */ + struct icmp_echo_hdr *iecho; + const struct ip_hdr *iphdr_in; + u16_t hlen; + const ip4_addr_t *src; + + ICMP_STATS_INC(icmp.recv); + MIB2_STATS_INC(mib2.icmpinmsgs); + + iphdr_in = ip4_current_header(); + hlen = IPH_HL_BYTES(iphdr_in); + if (hlen < IP_HLEN) { + LWIP_DEBUGF(ICMP_DEBUG, ("icmp_input: short IP header (%"S16_F" bytes) received\n", hlen)); + goto lenerr; + } + if (p->len < sizeof(u16_t) * 2) { + LWIP_DEBUGF(ICMP_DEBUG, ("icmp_input: short ICMP (%"U16_F" bytes) received\n", p->tot_len)); + goto lenerr; + } + + type = *((u8_t *)p->payload); +#ifdef LWIP_DEBUG + code = *(((u8_t *)p->payload) + 1); + /* if debug is enabled but debug statement below is somehow disabled: */ + LWIP_UNUSED_ARG(code); +#endif /* LWIP_DEBUG */ + switch (type) { + case ICMP_ER: + /* This is OK, echo reply might have been parsed by a raw PCB + (as obviously, an echo request has been sent, too). */ + MIB2_STATS_INC(mib2.icmpinechoreps); + break; + case ICMP_ECHO: + MIB2_STATS_INC(mib2.icmpinechos); + src = ip4_current_dest_addr(); + /* multicast destination address? */ + if (ip4_addr_ismulticast(ip4_current_dest_addr())) { +#if LWIP_MULTICAST_PING + /* For multicast, use address of receiving interface as source address */ + src = netif_ip4_addr(inp); +#else /* LWIP_MULTICAST_PING */ + LWIP_DEBUGF(ICMP_DEBUG, ("icmp_input: Not echoing to multicast pings\n")); + goto icmperr; +#endif /* LWIP_MULTICAST_PING */ + } + /* broadcast destination address? */ + if (ip4_addr_isbroadcast(ip4_current_dest_addr(), ip_current_netif())) { +#if LWIP_BROADCAST_PING + /* For broadcast, use address of receiving interface as source address */ + src = netif_ip4_addr(inp); +#else /* LWIP_BROADCAST_PING */ + LWIP_DEBUGF(ICMP_DEBUG, ("icmp_input: Not echoing to broadcast pings\n")); + goto icmperr; +#endif /* LWIP_BROADCAST_PING */ + } + LWIP_DEBUGF(ICMP_DEBUG, ("icmp_input: ping\n")); + if (p->tot_len < sizeof(struct icmp_echo_hdr)) { + LWIP_DEBUGF(ICMP_DEBUG, ("icmp_input: bad ICMP echo received\n")); + goto lenerr; + } +#if CHECKSUM_CHECK_ICMP + IF__NETIF_CHECKSUM_ENABLED(inp, NETIF_CHECKSUM_CHECK_ICMP) { + if (inet_chksum_pbuf(p) != 0) { + LWIP_DEBUGF(ICMP_DEBUG, ("icmp_input: checksum failed for received ICMP echo\n")); + pbuf_free(p); + ICMP_STATS_INC(icmp.chkerr); + MIB2_STATS_INC(mib2.icmpinerrors); + return; + } + } +#endif +#if LWIP_ICMP_ECHO_CHECK_INPUT_PBUF_LEN + if (pbuf_add_header(p, hlen + PBUF_LINK_HLEN + PBUF_LINK_ENCAPSULATION_HLEN)) { + /* p is not big enough to contain link headers + * allocate a new one and copy p into it + */ + struct pbuf *r; + u16_t alloc_len = (u16_t)(p->tot_len + hlen); + if (alloc_len < p->tot_len) { + LWIP_DEBUGF(ICMP_DEBUG, ("icmp_input: allocating new pbuf failed (tot_len overflow)\n")); + goto icmperr; + } + /* allocate new packet buffer with space for link headers */ + r = pbuf_alloc(PBUF_LINK, alloc_len, PBUF_RAM); + if (r == NULL) { + LWIP_DEBUGF(ICMP_DEBUG, ("icmp_input: allocating new pbuf failed\n")); + goto icmperr; + } + if (r->len < hlen + sizeof(struct icmp_echo_hdr)) { + LWIP_DEBUGF(ICMP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("first pbuf cannot hold the ICMP header")); + pbuf_free(r); + goto icmperr; + } + /* copy the ip header */ + MEMCPY(r->payload, iphdr_in, hlen); + /* switch r->payload back to icmp header (cannot fail) */ + if (pbuf_remove_header(r, hlen)) { + LWIP_ASSERT("icmp_input: moving r->payload to icmp header failed\n", 0); + pbuf_free(r); + goto icmperr; + } + /* copy the rest of the packet without ip header */ + if (pbuf_copy(r, p) != ERR_OK) { + LWIP_DEBUGF(ICMP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("icmp_input: copying to new pbuf failed")); + pbuf_free(r); + goto icmperr; + } + /* free the original p */ + pbuf_free(p); + /* we now have an identical copy of p that has room for link headers */ + p = r; + } else { + /* restore p->payload to point to icmp header (cannot fail) */ + if (pbuf_remove_header(p, hlen + PBUF_LINK_HLEN + PBUF_LINK_ENCAPSULATION_HLEN)) { + LWIP_ASSERT("icmp_input: restoring original p->payload failed\n", 0); + goto icmperr; + } + } +#endif /* LWIP_ICMP_ECHO_CHECK_INPUT_PBUF_LEN */ + /* At this point, all checks are OK. */ + /* We generate an answer by switching the dest and src ip addresses, + * setting the icmp type to ECHO_RESPONSE and updating the checksum. */ + iecho = (struct icmp_echo_hdr *)p->payload; + if (pbuf_add_header(p, hlen)) { + LWIP_DEBUGF(ICMP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("Can't move over header in packet")); + } else { + err_t ret; + struct ip_hdr *iphdr = (struct ip_hdr *)p->payload; + ip4_addr_copy(iphdr->src, *src); + ip4_addr_copy(iphdr->dest, *ip4_current_src_addr()); + ICMPH_TYPE_SET(iecho, ICMP_ER); +#if CHECKSUM_GEN_ICMP + IF__NETIF_CHECKSUM_ENABLED(inp, NETIF_CHECKSUM_GEN_ICMP) { + /* adjust the checksum */ + if (iecho->chksum > PP_HTONS(0xffffU - (ICMP_ECHO << 8))) { + iecho->chksum = (u16_t)(iecho->chksum + PP_HTONS((u16_t)(ICMP_ECHO << 8)) + 1); + } else { + iecho->chksum = (u16_t)(iecho->chksum + PP_HTONS(ICMP_ECHO << 8)); + } + } +#if LWIP_CHECKSUM_CTRL_PER_NETIF + else { + iecho->chksum = 0; + } +#endif /* LWIP_CHECKSUM_CTRL_PER_NETIF */ +#else /* CHECKSUM_GEN_ICMP */ + iecho->chksum = 0; +#endif /* CHECKSUM_GEN_ICMP */ + + /* Set the correct TTL and recalculate the header checksum. */ + IPH_TTL_SET(iphdr, ICMP_TTL); + IPH_CHKSUM_SET(iphdr, 0); +#if CHECKSUM_GEN_IP + IF__NETIF_CHECKSUM_ENABLED(inp, NETIF_CHECKSUM_GEN_IP) { + IPH_CHKSUM_SET(iphdr, inet_chksum(iphdr, hlen)); + } +#endif /* CHECKSUM_GEN_IP */ + + ICMP_STATS_INC(icmp.xmit); + /* increase number of messages attempted to send */ + MIB2_STATS_INC(mib2.icmpoutmsgs); + /* increase number of echo replies attempted to send */ + MIB2_STATS_INC(mib2.icmpoutechoreps); + + /* send an ICMP packet */ + ret = ip4_output_if(p, src, LWIP_IP_HDRINCL, + ICMP_TTL, 0, IP_PROTO_ICMP, inp); + if (ret != ERR_OK) { + LWIP_DEBUGF(ICMP_DEBUG, ("icmp_input: ip_output_if returned an error: %s\n", lwip_strerr(ret))); + } + } + break; + default: + if (type == ICMP_DUR) { + MIB2_STATS_INC(mib2.icmpindestunreachs); + } else if (type == ICMP_TE) { + MIB2_STATS_INC(mib2.icmpintimeexcds); + } else if (type == ICMP_PP) { + MIB2_STATS_INC(mib2.icmpinparmprobs); + } else if (type == ICMP_SQ) { + MIB2_STATS_INC(mib2.icmpinsrcquenchs); + } else if (type == ICMP_RD) { + MIB2_STATS_INC(mib2.icmpinredirects); + } else if (type == ICMP_TS) { + MIB2_STATS_INC(mib2.icmpintimestamps); + } else if (type == ICMP_TSR) { + MIB2_STATS_INC(mib2.icmpintimestampreps); + } else if (type == ICMP_AM) { + MIB2_STATS_INC(mib2.icmpinaddrmasks); + } else if (type == ICMP_AMR) { + MIB2_STATS_INC(mib2.icmpinaddrmaskreps); + } + LWIP_DEBUGF(ICMP_DEBUG, ("icmp_input: ICMP type %"S16_F" code %"S16_F" not supported.\n", + (s16_t)type, (s16_t)code)); + ICMP_STATS_INC(icmp.proterr); + ICMP_STATS_INC(icmp.drop); + } + pbuf_free(p); + return; +lenerr: + pbuf_free(p); + ICMP_STATS_INC(icmp.lenerr); + MIB2_STATS_INC(mib2.icmpinerrors); + return; +#if LWIP_ICMP_ECHO_CHECK_INPUT_PBUF_LEN || !LWIP_MULTICAST_PING || !LWIP_BROADCAST_PING +icmperr: + pbuf_free(p); + ICMP_STATS_INC(icmp.err); + MIB2_STATS_INC(mib2.icmpinerrors); + return; +#endif /* LWIP_ICMP_ECHO_CHECK_INPUT_PBUF_LEN || !LWIP_MULTICAST_PING || !LWIP_BROADCAST_PING */ +} + +/** + * Send an icmp 'destination unreachable' packet, called from ip_input() if + * the transport layer protocol is unknown and from udp_input() if the local + * port is not bound. + * + * @param p the input packet for which the 'unreachable' should be sent, + * p->payload pointing to the IP header + * @param t type of the 'unreachable' packet + */ +void +icmp_dest_unreach(struct pbuf *p, enum icmp_dur_type t) +{ + MIB2_STATS_INC(mib2.icmpoutdestunreachs); + icmp_send_response(p, ICMP_DUR, t); +} + +#if IP_FORWARD || IP_REASSEMBLY +/** + * Send a 'time exceeded' packet, called from ip_forward() if TTL is 0. + * + * @param p the input packet for which the 'time exceeded' should be sent, + * p->payload pointing to the IP header + * @param t type of the 'time exceeded' packet + */ +void +icmp_time_exceeded(struct pbuf *p, enum icmp_te_type t) +{ + MIB2_STATS_INC(mib2.icmpouttimeexcds); + icmp_send_response(p, ICMP_TE, t); +} + +#endif /* IP_FORWARD || IP_REASSEMBLY */ + +/** + * Send an icmp packet in response to an incoming packet. + * + * @param p the input packet for which the 'unreachable' should be sent, + * p->payload pointing to the IP header + * @param type Type of the ICMP header + * @param code Code of the ICMP header + */ +static void +icmp_send_response(struct pbuf *p, u8_t type, u8_t code) +{ + struct pbuf *q; + struct ip_hdr *iphdr; + /* we can use the echo header here */ + struct icmp_echo_hdr *icmphdr; + ip4_addr_t iphdr_src; + struct netif *netif; + + /* increase number of messages attempted to send */ + MIB2_STATS_INC(mib2.icmpoutmsgs); + + /* ICMP header + IP header + 8 bytes of data */ + q = pbuf_alloc(PBUF_IP, sizeof(struct icmp_echo_hdr) + IP_HLEN + ICMP_DEST_UNREACH_DATASIZE, + PBUF_RAM); + if (q == NULL) { + LWIP_DEBUGF(ICMP_DEBUG, ("icmp_time_exceeded: failed to allocate pbuf for ICMP packet.\n")); + MIB2_STATS_INC(mib2.icmpouterrors); + return; + } + LWIP_ASSERT("check that first pbuf can hold icmp message", + (q->len >= (sizeof(struct icmp_echo_hdr) + IP_HLEN + ICMP_DEST_UNREACH_DATASIZE))); + + iphdr = (struct ip_hdr *)p->payload; + LWIP_DEBUGF(ICMP_DEBUG, ("icmp_time_exceeded from ")); + ip4_addr_debug_print_val(ICMP_DEBUG, iphdr->src); + LWIP_DEBUGF(ICMP_DEBUG, (" to ")); + ip4_addr_debug_print_val(ICMP_DEBUG, iphdr->dest); + LWIP_DEBUGF(ICMP_DEBUG, ("\n")); + + icmphdr = (struct icmp_echo_hdr *)q->payload; + icmphdr->type = type; + icmphdr->code = code; + icmphdr->id = 0; + icmphdr->seqno = 0; + + /* copy fields from original packet */ + SMEMCPY((u8_t *)q->payload + sizeof(struct icmp_echo_hdr), (u8_t *)p->payload, + IP_HLEN + ICMP_DEST_UNREACH_DATASIZE); + + ip4_addr_copy(iphdr_src, iphdr->src); +#ifdef LWIP_HOOK_IP4_ROUTE_SRC + { + ip4_addr_t iphdr_dst; + ip4_addr_copy(iphdr_dst, iphdr->dest); + netif = ip4_route_src(&iphdr_dst, &iphdr_src); + } +#else + netif = ip4_route(&iphdr_src); +#endif + if (netif != NULL) { + /* calculate checksum */ + icmphdr->chksum = 0; +#if CHECKSUM_GEN_ICMP + IF__NETIF_CHECKSUM_ENABLED(netif, NETIF_CHECKSUM_GEN_ICMP) { + icmphdr->chksum = inet_chksum(icmphdr, q->len); + } +#endif + ICMP_STATS_INC(icmp.xmit); + ip4_output_if(q, NULL, &iphdr_src, ICMP_TTL, 0, IP_PROTO_ICMP, netif); + } + pbuf_free(q); +} + +#endif /* LWIP_IPV4 && LWIP_ICMP */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv4/igmp.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv4/igmp.c new file mode 100644 index 0000000000000000000000000000000000000000..b655aa3a4c03ba5de91d865ffd6ccab6b3aa319f --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv4/igmp.c @@ -0,0 +1,801 @@ +/** + * @file + * IGMP - Internet Group Management Protocol + * + * @defgroup igmp IGMP + * @ingroup ip4 + * To be called from TCPIP thread + */ + +/* + * Copyright (c) 2002 CITEL Technologies Ltd. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of CITEL Technologies Ltd nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY CITEL TECHNOLOGIES AND CONTRIBUTORS ``AS IS'' + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL CITEL TECHNOLOGIES OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is a contribution to the lwIP TCP/IP stack. + * The Swedish Institute of Computer Science and Adam Dunkels + * are specifically granted permission to redistribute this + * source code. +*/ + +/*------------------------------------------------------------- +Note 1) +Although the rfc requires V1 AND V2 capability +we will only support v2 since now V1 is very old (August 1989) +V1 can be added if required + +a debug print and statistic have been implemented to +show this up. +------------------------------------------------------------- +------------------------------------------------------------- +Note 2) +A query for a specific group address (as opposed to ALLHOSTS) +has now been implemented as I am unsure if it is required + +a debug print and statistic have been implemented to +show this up. +------------------------------------------------------------- +------------------------------------------------------------- +Note 3) +The router alert rfc 2113 is implemented in outgoing packets +but not checked rigorously incoming +------------------------------------------------------------- +Steve Reynolds +------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------- + * RFC 988 - Host extensions for IP multicasting - V0 + * RFC 1054 - Host extensions for IP multicasting - + * RFC 1112 - Host extensions for IP multicasting - V1 + * RFC 2236 - Internet Group Management Protocol, Version 2 - V2 <- this code is based on this RFC (it's the "de facto" standard) + * RFC 3376 - Internet Group Management Protocol, Version 3 - V3 + * RFC 4604 - Using Internet Group Management Protocol Version 3... - V3+ + * RFC 2113 - IP Router Alert Option - + *----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------- + * Includes + *----------------------------------------------------------------------------*/ + +#include "lwip/opt.h" + +#if LWIP_IPV4 && LWIP_IGMP /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/igmp.h" +#include "lwip/debug.h" +#include "lwip/def.h" +#include "lwip/mem.h" +#include "lwip/ip.h" +#include "lwip/inet_chksum.h" +#include "lwip/netif.h" +#include "lwip/stats.h" +#include "lwip/prot/igmp.h" + +#include + +static struct igmp_group *igmp_lookup_group(struct netif *ifp, const ip4_addr_t *addr); +static err_t igmp_remove_group(struct netif *netif, struct igmp_group *group); +static void igmp_timeout(struct netif *netif, struct igmp_group *group); +static void igmp_start_timer(struct igmp_group *group, u8_t max_time); +static void igmp_delaying_member(struct igmp_group *group, u8_t maxresp); +static err_t igmp_ip_output_if(struct pbuf *p, const ip4_addr_t *src, const ip4_addr_t *dest, struct netif *netif); +static void igmp_send(struct netif *netif, struct igmp_group *group, u8_t type); + +static ip4_addr_t allsystems; +static ip4_addr_t allrouters; + +/** + * Initialize the IGMP module + */ +void +igmp_init(void) +{ + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_init: initializing\n")); + + IP4_ADDR(&allsystems, 224, 0, 0, 1); + IP4_ADDR(&allrouters, 224, 0, 0, 2); +} + +/** + * Start IGMP processing on interface + * + * @param netif network interface on which start IGMP processing + */ +err_t +igmp_start(struct netif *netif) +{ + struct igmp_group *group; + + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_start: starting IGMP processing on if %p\n", (void *)netif)); + + group = igmp_lookup_group(netif, &allsystems); + + if (group != NULL) { + group->group_state = IGMP_GROUP_IDLE_MEMBER; + group->use++; + + /* Allow the igmp messages at the MAC level */ + if (netif->igmp_mac_filter != NULL) { + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_start: igmp_mac_filter(ADD ")); + ip4_addr_debug_print_val(IGMP_DEBUG, allsystems); + LWIP_DEBUGF(IGMP_DEBUG, (") on if %p\n", (void *)netif)); + netif->igmp_mac_filter(netif, &allsystems, NETIF_ADD_MAC_FILTER); + } + + return ERR_OK; + } + + return ERR_MEM; +} + +/** + * Stop IGMP processing on interface + * + * @param netif network interface on which stop IGMP processing + */ +err_t +igmp_stop(struct netif *netif) +{ + struct igmp_group *group = netif_igmp_data(netif); + + netif_set_client_data(netif, LWIP_NETIF_CLIENT_DATA_INDEX_IGMP, NULL); + + while (group != NULL) { + struct igmp_group *next = group->next; /* avoid use-after-free below */ + + /* disable the group at the MAC level */ + if (netif->igmp_mac_filter != NULL) { + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_stop: igmp_mac_filter(DEL ")); + ip4_addr_debug_print_val(IGMP_DEBUG, group->group_address); + LWIP_DEBUGF(IGMP_DEBUG, (") on if %p\n", (void *)netif)); + netif->igmp_mac_filter(netif, &(group->group_address), NETIF_DEL_MAC_FILTER); + } + + /* free group */ + memp_free(MEMP_IGMP_GROUP, group); + + /* move to "next" */ + group = next; + } + return ERR_OK; +} + +/** + * Report IGMP memberships for this interface + * + * @param netif network interface on which report IGMP memberships + */ +void +igmp_report_groups(struct netif *netif) +{ + struct igmp_group *group = netif_igmp_data(netif); + + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_report_groups: sending IGMP reports on if %p\n", (void *)netif)); + + /* Skip the first group in the list, it is always the allsystems group added in igmp_start() */ + if (group != NULL) { + group = group->next; + } + + while (group != NULL) { + igmp_delaying_member(group, IGMP_JOIN_DELAYING_MEMBER_TMR); + group = group->next; + } +} + +/** + * Search for a group in the netif's igmp group list + * + * @param ifp the network interface for which to look + * @param addr the group ip address to search for + * @return a struct igmp_group* if the group has been found, + * NULL if the group wasn't found. + */ +struct igmp_group * +igmp_lookfor_group(struct netif *ifp, const ip4_addr_t *addr) +{ + struct igmp_group *group = netif_igmp_data(ifp); + + while (group != NULL) { + if (ip4_addr_cmp(&(group->group_address), addr)) { + return group; + } + group = group->next; + } + + /* to be clearer, we return NULL here instead of + * 'group' (which is also NULL at this point). + */ + return NULL; +} + +/** + * Search for a specific igmp group and create a new one if not found- + * + * @param ifp the network interface for which to look + * @param addr the group ip address to search + * @return a struct igmp_group*, + * NULL on memory error. + */ +static struct igmp_group * +igmp_lookup_group(struct netif *ifp, const ip4_addr_t *addr) +{ + struct igmp_group *group; + struct igmp_group *list_head = netif_igmp_data(ifp); + + /* Search if the group already exists */ + group = igmp_lookfor_group(ifp, addr); + if (group != NULL) { + /* Group already exists. */ + return group; + } + + /* Group doesn't exist yet, create a new one */ + group = (struct igmp_group *)memp_malloc(MEMP_IGMP_GROUP); + if (group != NULL) { + ip4_addr_set(&(group->group_address), addr); + group->timer = 0; /* Not running */ + group->group_state = IGMP_GROUP_NON_MEMBER; + group->last_reporter_flag = 0; + group->use = 0; + + /* Ensure allsystems group is always first in list */ + if (list_head == NULL) { + /* this is the first entry in linked list */ + LWIP_ASSERT("igmp_lookup_group: first group must be allsystems", + (ip4_addr_cmp(addr, &allsystems) != 0)); + group->next = NULL; + netif_set_client_data(ifp, LWIP_NETIF_CLIENT_DATA_INDEX_IGMP, group); + } else { + /* append _after_ first entry */ + LWIP_ASSERT("igmp_lookup_group: all except first group must not be allsystems", + (ip4_addr_cmp(addr, &allsystems) == 0)); + group->next = list_head->next; + list_head->next = group; + } + } + + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_lookup_group: %sallocated a new group with address ", (group ? "" : "impossible to "))); + ip4_addr_debug_print(IGMP_DEBUG, addr); + LWIP_DEBUGF(IGMP_DEBUG, (" on if %p\n", (void *)ifp)); + + return group; +} + +/** + * Remove a group from netif's igmp group list, but don't free it yet + * + * @param group the group to remove from the netif's igmp group list + * @return ERR_OK if group was removed from the list, an err_t otherwise + */ +static err_t +igmp_remove_group(struct netif *netif, struct igmp_group *group) +{ + err_t err = ERR_OK; + struct igmp_group *tmp_group; + + /* Skip the first group in the list, it is always the allsystems group added in igmp_start() */ + for (tmp_group = netif_igmp_data(netif); tmp_group != NULL; tmp_group = tmp_group->next) { + if (tmp_group->next == group) { + tmp_group->next = group->next; + break; + } + } + /* Group not found in netif's igmp group list */ + if (tmp_group == NULL) { + err = ERR_ARG; + } + + return err; +} + +/** + * Called from ip_input() if a new IGMP packet is received. + * + * @param p received igmp packet, p->payload pointing to the igmp header + * @param inp network interface on which the packet was received + * @param dest destination ip address of the igmp packet + */ +void +igmp_input(struct pbuf *p, struct netif *inp, const ip4_addr_t *dest) +{ + struct igmp_msg *igmp; + struct igmp_group *group; + struct igmp_group *groupref; + + IGMP_STATS_INC(igmp.recv); + + /* Note that the length CAN be greater than 8 but only 8 are used - All are included in the checksum */ + if (p->len < IGMP_MINLEN) { + pbuf_free(p); + IGMP_STATS_INC(igmp.lenerr); + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_input: length error\n")); + return; + } + + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_input: message from ")); + ip4_addr_debug_print_val(IGMP_DEBUG, ip4_current_header()->src); + LWIP_DEBUGF(IGMP_DEBUG, (" to address ")); + ip4_addr_debug_print_val(IGMP_DEBUG, ip4_current_header()->dest); + LWIP_DEBUGF(IGMP_DEBUG, (" on if %p\n", (void *)inp)); + + /* Now calculate and check the checksum */ + igmp = (struct igmp_msg *)p->payload; + if (inet_chksum(igmp, p->len)) { + pbuf_free(p); + IGMP_STATS_INC(igmp.chkerr); + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_input: checksum error\n")); + return; + } + + /* Packet is ok so find an existing group */ + group = igmp_lookfor_group(inp, dest); /* use the destination IP address of incoming packet */ + + /* If group can be found or create... */ + if (!group) { + pbuf_free(p); + IGMP_STATS_INC(igmp.drop); + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_input: IGMP frame not for us\n")); + return; + } + + /* NOW ACT ON THE INCOMING MESSAGE TYPE... */ + switch (igmp->igmp_msgtype) { + case IGMP_MEMB_QUERY: + /* IGMP_MEMB_QUERY to the "all systems" address ? */ + if ((ip4_addr_cmp(dest, &allsystems)) && ip4_addr_isany(&igmp->igmp_group_address)) { + /* THIS IS THE GENERAL QUERY */ + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_input: General IGMP_MEMB_QUERY on \"ALL SYSTEMS\" address (224.0.0.1) [igmp_maxresp=%i]\n", (int)(igmp->igmp_maxresp))); + + if (igmp->igmp_maxresp == 0) { + IGMP_STATS_INC(igmp.rx_v1); + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_input: got an all hosts query with time== 0 - this is V1 and not implemented - treat as v2\n")); + igmp->igmp_maxresp = IGMP_V1_DELAYING_MEMBER_TMR; + } else { + IGMP_STATS_INC(igmp.rx_general); + } + + groupref = netif_igmp_data(inp); + + /* Do not send messages on the all systems group address! */ + /* Skip the first group in the list, it is always the allsystems group added in igmp_start() */ + if (groupref != NULL) { + groupref = groupref->next; + } + + while (groupref) { + igmp_delaying_member(groupref, igmp->igmp_maxresp); + groupref = groupref->next; + } + } else { + /* IGMP_MEMB_QUERY to a specific group ? */ + if (!ip4_addr_isany(&igmp->igmp_group_address)) { + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_input: IGMP_MEMB_QUERY to a specific group ")); + ip4_addr_debug_print_val(IGMP_DEBUG, igmp->igmp_group_address); + if (ip4_addr_cmp(dest, &allsystems)) { + ip4_addr_t groupaddr; + LWIP_DEBUGF(IGMP_DEBUG, (" using \"ALL SYSTEMS\" address (224.0.0.1) [igmp_maxresp=%i]\n", (int)(igmp->igmp_maxresp))); + /* we first need to re-look for the group since we used dest last time */ + ip4_addr_copy(groupaddr, igmp->igmp_group_address); + group = igmp_lookfor_group(inp, &groupaddr); + } else { + LWIP_DEBUGF(IGMP_DEBUG, (" with the group address as destination [igmp_maxresp=%i]\n", (int)(igmp->igmp_maxresp))); + } + + if (group != NULL) { + IGMP_STATS_INC(igmp.rx_group); + igmp_delaying_member(group, igmp->igmp_maxresp); + } else { + IGMP_STATS_INC(igmp.drop); + } + } else { + IGMP_STATS_INC(igmp.proterr); + } + } + break; + case IGMP_V2_MEMB_REPORT: + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_input: IGMP_V2_MEMB_REPORT\n")); + IGMP_STATS_INC(igmp.rx_report); + if (group->group_state == IGMP_GROUP_DELAYING_MEMBER) { + /* This is on a specific group we have already looked up */ + group->timer = 0; /* stopped */ + group->group_state = IGMP_GROUP_IDLE_MEMBER; + group->last_reporter_flag = 0; + } + break; + default: + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_input: unexpected msg %d in state %d on group %p on if %p\n", + igmp->igmp_msgtype, group->group_state, (void *)&group, (void *)inp)); + IGMP_STATS_INC(igmp.proterr); + break; + } + + pbuf_free(p); + return; +} + +/** + * @ingroup igmp + * Join a group on one network interface. + * + * @param ifaddr ip address of the network interface which should join a new group + * @param groupaddr the ip address of the group which to join + * @return ERR_OK if group was joined on the netif(s), an err_t otherwise + */ +err_t +igmp_joingroup(const ip4_addr_t *ifaddr, const ip4_addr_t *groupaddr) +{ + err_t err = ERR_VAL; /* no matching interface */ + struct netif *netif; + + LWIP_ASSERT_CORE_LOCKED(); + + /* make sure it is multicast address */ + LWIP_ERROR("igmp_joingroup: attempt to join non-multicast address", ip4_addr_ismulticast(groupaddr), return ERR_VAL;); + LWIP_ERROR("igmp_joingroup: attempt to join allsystems address", (!ip4_addr_cmp(groupaddr, &allsystems)), return ERR_VAL;); + + /* loop through netif's */ + NETIF_FOREACH(netif) { + /* Should we join this interface ? */ + if ((netif->flags & NETIF_FLAG_IGMP) && ((ip4_addr_isany(ifaddr) || ip4_addr_cmp(netif_ip4_addr(netif), ifaddr)))) { + err = igmp_joingroup_netif(netif, groupaddr); + if (err != ERR_OK) { + /* Return an error even if some network interfaces are joined */ + /** @todo undo any other netif already joined */ + return err; + } + } + } + + return err; +} + +/** + * @ingroup igmp + * Join a group on one network interface. + * + * @param netif the network interface which should join a new group + * @param groupaddr the ip address of the group which to join + * @return ERR_OK if group was joined on the netif, an err_t otherwise + */ +err_t +igmp_joingroup_netif(struct netif *netif, const ip4_addr_t *groupaddr) +{ + struct igmp_group *group; + + LWIP_ASSERT_CORE_LOCKED(); + + /* make sure it is multicast address */ + LWIP_ERROR("igmp_joingroup_netif: attempt to join non-multicast address", ip4_addr_ismulticast(groupaddr), return ERR_VAL;); + LWIP_ERROR("igmp_joingroup_netif: attempt to join allsystems address", (!ip4_addr_cmp(groupaddr, &allsystems)), return ERR_VAL;); + + /* make sure it is an igmp-enabled netif */ + LWIP_ERROR("igmp_joingroup_netif: attempt to join on non-IGMP netif", netif->flags & NETIF_FLAG_IGMP, return ERR_VAL;); + + /* find group or create a new one if not found */ + group = igmp_lookup_group(netif, groupaddr); + + if (group != NULL) { + /* This should create a new group, check the state to make sure */ + if (group->group_state != IGMP_GROUP_NON_MEMBER) { + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_joingroup_netif: join to group not in state IGMP_GROUP_NON_MEMBER\n")); + } else { + /* OK - it was new group */ + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_joingroup_netif: join to new group: ")); + ip4_addr_debug_print(IGMP_DEBUG, groupaddr); + LWIP_DEBUGF(IGMP_DEBUG, ("\n")); + + /* If first use of the group, allow the group at the MAC level */ + if ((group->use == 0) && (netif->igmp_mac_filter != NULL)) { + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_joingroup_netif: igmp_mac_filter(ADD ")); + ip4_addr_debug_print(IGMP_DEBUG, groupaddr); + LWIP_DEBUGF(IGMP_DEBUG, (") on if %p\n", (void *)netif)); + netif->igmp_mac_filter(netif, groupaddr, NETIF_ADD_MAC_FILTER); + } + + IGMP_STATS_INC(igmp.tx_join); + igmp_send(netif, group, IGMP_V2_MEMB_REPORT); + + igmp_start_timer(group, IGMP_JOIN_DELAYING_MEMBER_TMR); + + /* Need to work out where this timer comes from */ + group->group_state = IGMP_GROUP_DELAYING_MEMBER; + } + /* Increment group use */ + group->use++; + /* Join on this interface */ + return ERR_OK; + } else { + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_joingroup_netif: Not enough memory to join to group\n")); + return ERR_MEM; + } +} + +/** + * @ingroup igmp + * Leave a group on one network interface. + * + * @param ifaddr ip address of the network interface which should leave a group + * @param groupaddr the ip address of the group which to leave + * @return ERR_OK if group was left on the netif(s), an err_t otherwise + */ +err_t +igmp_leavegroup(const ip4_addr_t *ifaddr, const ip4_addr_t *groupaddr) +{ + err_t err = ERR_VAL; /* no matching interface */ + struct netif *netif; + + LWIP_ASSERT_CORE_LOCKED(); + + /* make sure it is multicast address */ + LWIP_ERROR("igmp_leavegroup: attempt to leave non-multicast address", ip4_addr_ismulticast(groupaddr), return ERR_VAL;); + LWIP_ERROR("igmp_leavegroup: attempt to leave allsystems address", (!ip4_addr_cmp(groupaddr, &allsystems)), return ERR_VAL;); + + /* loop through netif's */ + NETIF_FOREACH(netif) { + /* Should we leave this interface ? */ + if ((netif->flags & NETIF_FLAG_IGMP) && ((ip4_addr_isany(ifaddr) || ip4_addr_cmp(netif_ip4_addr(netif), ifaddr)))) { + err_t res = igmp_leavegroup_netif(netif, groupaddr); + if (err != ERR_OK) { + /* Store this result if we have not yet gotten a success */ + err = res; + } + } + } + + return err; +} + +/** + * @ingroup igmp + * Leave a group on one network interface. + * + * @param netif the network interface which should leave a group + * @param groupaddr the ip address of the group which to leave + * @return ERR_OK if group was left on the netif, an err_t otherwise + */ +err_t +igmp_leavegroup_netif(struct netif *netif, const ip4_addr_t *groupaddr) +{ + struct igmp_group *group; + + LWIP_ASSERT_CORE_LOCKED(); + + /* make sure it is multicast address */ + LWIP_ERROR("igmp_leavegroup_netif: attempt to leave non-multicast address", ip4_addr_ismulticast(groupaddr), return ERR_VAL;); + LWIP_ERROR("igmp_leavegroup_netif: attempt to leave allsystems address", (!ip4_addr_cmp(groupaddr, &allsystems)), return ERR_VAL;); + + /* make sure it is an igmp-enabled netif */ + LWIP_ERROR("igmp_leavegroup_netif: attempt to leave on non-IGMP netif", netif->flags & NETIF_FLAG_IGMP, return ERR_VAL;); + + /* find group */ + group = igmp_lookfor_group(netif, groupaddr); + + if (group != NULL) { + /* Only send a leave if the flag is set according to the state diagram */ + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_leavegroup_netif: Leaving group: ")); + ip4_addr_debug_print(IGMP_DEBUG, groupaddr); + LWIP_DEBUGF(IGMP_DEBUG, ("\n")); + + /* If there is no other use of the group */ + if (group->use <= 1) { + /* Remove the group from the list */ + igmp_remove_group(netif, group); + + /* If we are the last reporter for this group */ + if (group->last_reporter_flag) { + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_leavegroup_netif: sending leaving group\n")); + IGMP_STATS_INC(igmp.tx_leave); + igmp_send(netif, group, IGMP_LEAVE_GROUP); + } + + /* Disable the group at the MAC level */ + if (netif->igmp_mac_filter != NULL) { + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_leavegroup_netif: igmp_mac_filter(DEL ")); + ip4_addr_debug_print(IGMP_DEBUG, groupaddr); + LWIP_DEBUGF(IGMP_DEBUG, (") on if %p\n", (void *)netif)); + netif->igmp_mac_filter(netif, groupaddr, NETIF_DEL_MAC_FILTER); + } + + /* Free group struct */ + memp_free(MEMP_IGMP_GROUP, group); + } else { + /* Decrement group use */ + group->use--; + } + return ERR_OK; + } else { + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_leavegroup_netif: not member of group\n")); + return ERR_VAL; + } +} + +/** + * The igmp timer function (both for NO_SYS=1 and =0) + * Should be called every IGMP_TMR_INTERVAL milliseconds (100 ms is default). + */ +void +igmp_tmr(void) +{ + struct netif *netif; + + NETIF_FOREACH(netif) { + struct igmp_group *group = netif_igmp_data(netif); + + while (group != NULL) { + if (group->timer > 0) { + group->timer--; + if (group->timer == 0) { + igmp_timeout(netif, group); + } + } + group = group->next; + } + } +} + +/** + * Called if a timeout for one group is reached. + * Sends a report for this group. + * + * @param group an igmp_group for which a timeout is reached + */ +static void +igmp_timeout(struct netif *netif, struct igmp_group *group) +{ + /* If the state is IGMP_GROUP_DELAYING_MEMBER then we send a report for this group + (unless it is the allsystems group) */ + if ((group->group_state == IGMP_GROUP_DELAYING_MEMBER) && + (!(ip4_addr_cmp(&(group->group_address), &allsystems)))) { + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_timeout: report membership for group with address ")); + ip4_addr_debug_print_val(IGMP_DEBUG, group->group_address); + LWIP_DEBUGF(IGMP_DEBUG, (" on if %p\n", (void *)netif)); + + group->group_state = IGMP_GROUP_IDLE_MEMBER; + + IGMP_STATS_INC(igmp.tx_report); + igmp_send(netif, group, IGMP_V2_MEMB_REPORT); + } +} + +/** + * Start a timer for an igmp group + * + * @param group the igmp_group for which to start a timer + * @param max_time the time in multiples of IGMP_TMR_INTERVAL (decrease with + * every call to igmp_tmr()) + */ +static void +igmp_start_timer(struct igmp_group *group, u8_t max_time) +{ +#ifdef LWIP_RAND + group->timer = (u16_t)(max_time > 2 ? (LWIP_RAND() % max_time) : 1); +#else /* LWIP_RAND */ + /* ATTENTION: use this only if absolutely necessary! */ + group->timer = max_time / 2; +#endif /* LWIP_RAND */ + + if (group->timer == 0) { + group->timer = 1; + } +} + +/** + * Delaying membership report for a group if necessary + * + * @param group the igmp_group for which "delaying" membership report + * @param maxresp query delay + */ +static void +igmp_delaying_member(struct igmp_group *group, u8_t maxresp) +{ + if ((group->group_state == IGMP_GROUP_IDLE_MEMBER) || + ((group->group_state == IGMP_GROUP_DELAYING_MEMBER) && + ((group->timer == 0) || (maxresp < group->timer)))) { + igmp_start_timer(group, maxresp); + group->group_state = IGMP_GROUP_DELAYING_MEMBER; + } +} + + +/** + * Sends an IP packet on a network interface. This function constructs the IP header + * and calculates the IP header checksum. If the source IP address is NULL, + * the IP address of the outgoing network interface is filled in as source address. + * + * @param p the packet to send (p->payload points to the data, e.g. next + protocol header; if dest == LWIP_IP_HDRINCL, p already includes an + IP header and p->payload points to that IP header) + * @param src the source IP address to send from (if src == IP4_ADDR_ANY, the + * IP address of the netif used to send is used as source address) + * @param dest the destination IP address to send the packet to + * @param netif the netif on which to send this packet + * @return ERR_OK if the packet was sent OK + * ERR_BUF if p doesn't have enough space for IP/LINK headers + * returns errors returned by netif->output + */ +static err_t +igmp_ip_output_if(struct pbuf *p, const ip4_addr_t *src, const ip4_addr_t *dest, struct netif *netif) +{ + /* This is the "router alert" option */ + u16_t ra[2]; + ra[0] = PP_HTONS(ROUTER_ALERT); + ra[1] = 0x0000; /* Router shall examine packet */ + IGMP_STATS_INC(igmp.xmit); + return ip4_output_if_opt(p, src, dest, IGMP_TTL, 0, IP_PROTO_IGMP, netif, ra, ROUTER_ALERTLEN); +} + +/** + * Send an igmp packet to a specific group. + * + * @param group the group to which to send the packet + * @param type the type of igmp packet to send + */ +static void +igmp_send(struct netif *netif, struct igmp_group *group, u8_t type) +{ + struct pbuf *p = NULL; + struct igmp_msg *igmp = NULL; + ip4_addr_t src = *IP4_ADDR_ANY4; + ip4_addr_t *dest = NULL; + + /* IP header + "router alert" option + IGMP header */ + p = pbuf_alloc(PBUF_TRANSPORT, IGMP_MINLEN, PBUF_RAM); + + if (p) { + igmp = (struct igmp_msg *)p->payload; + LWIP_ASSERT("igmp_send: check that first pbuf can hold struct igmp_msg", + (p->len >= sizeof(struct igmp_msg))); + ip4_addr_copy(src, *netif_ip4_addr(netif)); + + if (type == IGMP_V2_MEMB_REPORT) { + dest = &(group->group_address); + ip4_addr_copy(igmp->igmp_group_address, group->group_address); + group->last_reporter_flag = 1; /* Remember we were the last to report */ + } else { + if (type == IGMP_LEAVE_GROUP) { + dest = &allrouters; + ip4_addr_copy(igmp->igmp_group_address, group->group_address); + } + } + + if ((type == IGMP_V2_MEMB_REPORT) || (type == IGMP_LEAVE_GROUP)) { + igmp->igmp_msgtype = type; + igmp->igmp_maxresp = 0; + igmp->igmp_checksum = 0; + igmp->igmp_checksum = inet_chksum(igmp, IGMP_MINLEN); + + igmp_ip_output_if(p, &src, dest, netif); + } + + pbuf_free(p); + } else { + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_send: not enough memory for igmp_send\n")); + IGMP_STATS_INC(igmp.memerr); + } +} + +#endif /* LWIP_IPV4 && LWIP_IGMP */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv4/ip4.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv4/ip4.c new file mode 100644 index 0000000000000000000000000000000000000000..26c26a91a4607bb0e3b9963837405ed972c5a4e8 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv4/ip4.c @@ -0,0 +1,1132 @@ +/** + * @file + * This is the IPv4 layer implementation for incoming and outgoing IP traffic. + * + * @see ip_frag.c + * + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#include "lwip/opt.h" + +#if LWIP_IPV4 + +#include "lwip/ip.h" +#include "lwip/def.h" +#include "lwip/mem.h" +#include "lwip/ip4_frag.h" +#include "lwip/inet_chksum.h" +#include "lwip/netif.h" +#include "lwip/icmp.h" +#include "lwip/igmp.h" +#include "lwip/priv/raw_priv.h" +#include "lwip/udp.h" +#include "lwip/priv/tcp_priv.h" +#include "lwip/autoip.h" +#include "lwip/stats.h" +#include "lwip/prot/iana.h" + +#include + +#ifdef LWIP_HOOK_FILENAME +#include LWIP_HOOK_FILENAME +#endif + +/** Set this to 0 in the rare case of wanting to call an extra function to + * generate the IP checksum (in contrast to calculating it on-the-fly). */ +#ifndef LWIP_INLINE_IP_CHKSUM +#if LWIP_CHECKSUM_CTRL_PER_NETIF +#define LWIP_INLINE_IP_CHKSUM 0 +#else /* LWIP_CHECKSUM_CTRL_PER_NETIF */ +#define LWIP_INLINE_IP_CHKSUM 1 +#endif /* LWIP_CHECKSUM_CTRL_PER_NETIF */ +#endif + +#if LWIP_INLINE_IP_CHKSUM && CHECKSUM_GEN_IP +#define CHECKSUM_GEN_IP_INLINE 1 +#else +#define CHECKSUM_GEN_IP_INLINE 0 +#endif + +#if LWIP_DHCP || defined(LWIP_IP_ACCEPT_UDP_PORT) +#define IP_ACCEPT_LINK_LAYER_ADDRESSING 1 + +/** Some defines for DHCP to let link-layer-addressed packets through while the + * netif is down. + * To use this in your own application/protocol, define LWIP_IP_ACCEPT_UDP_PORT(port) + * to return 1 if the port is accepted and 0 if the port is not accepted. + */ +#if LWIP_DHCP && defined(LWIP_IP_ACCEPT_UDP_PORT) +/* accept DHCP client port and custom port */ +#define IP_ACCEPT_LINK_LAYER_ADDRESSED_PORT(port) (((port) == PP_NTOHS(LWIP_IANA_PORT_DHCP_CLIENT)) \ + || (LWIP_IP_ACCEPT_UDP_PORT(port))) +#elif defined(LWIP_IP_ACCEPT_UDP_PORT) /* LWIP_DHCP && defined(LWIP_IP_ACCEPT_UDP_PORT) */ +/* accept custom port only */ +#define IP_ACCEPT_LINK_LAYER_ADDRESSED_PORT(port) (LWIP_IP_ACCEPT_UDP_PORT(port)) +#else /* LWIP_DHCP && defined(LWIP_IP_ACCEPT_UDP_PORT) */ +/* accept DHCP client port only */ +#define IP_ACCEPT_LINK_LAYER_ADDRESSED_PORT(port) ((port) == PP_NTOHS(LWIP_IANA_PORT_DHCP_CLIENT)) +#endif /* LWIP_DHCP && defined(LWIP_IP_ACCEPT_UDP_PORT) */ + +#else /* LWIP_DHCP */ +#define IP_ACCEPT_LINK_LAYER_ADDRESSING 0 +#endif /* LWIP_DHCP */ + +/** The IP header ID of the next outgoing IP packet */ +static u16_t ip_id; + +#if LWIP_MULTICAST_TX_OPTIONS +/** The default netif used for multicast */ +static struct netif *ip4_default_multicast_netif; + +/** + * @ingroup ip4 + * Set a default netif for IPv4 multicast. */ +void +ip4_set_default_multicast_netif(struct netif *default_multicast_netif) +{ + ip4_default_multicast_netif = default_multicast_netif; +} +#endif /* LWIP_MULTICAST_TX_OPTIONS */ + +#ifdef LWIP_HOOK_IP4_ROUTE_SRC +/** + * Source based IPv4 routing must be fully implemented in + * LWIP_HOOK_IP4_ROUTE_SRC(). This function only provides the parameters. + */ +struct netif * +ip4_route_src(const ip4_addr_t *src, const ip4_addr_t *dest) +{ + if (src != NULL) { + /* when src==NULL, the hook is called from ip4_route(dest) */ + struct netif *netif = LWIP_HOOK_IP4_ROUTE_SRC(src, dest); + if (netif != NULL) { + return netif; + } + } + return ip4_route(dest); +} +#endif /* LWIP_HOOK_IP4_ROUTE_SRC */ + +/** + * Finds the appropriate network interface for a given IP address. It + * searches the list of network interfaces linearly. A match is found + * if the masked IP address of the network interface equals the masked + * IP address given to the function. + * + * @param dest the destination IP address for which to find the route + * @return the netif on which to send to reach dest + */ +struct netif * +ip4_route(const ip4_addr_t *dest) +{ +#if !LWIP_SINGLE_NETIF + struct netif *netif; + + LWIP_ASSERT_CORE_LOCKED(); + +#if LWIP_MULTICAST_TX_OPTIONS + /* Use administratively selected interface for multicast by default */ + if (ip4_addr_ismulticast(dest) && ip4_default_multicast_netif) { + return ip4_default_multicast_netif; + } +#endif /* LWIP_MULTICAST_TX_OPTIONS */ + + /* bug #54569: in case LWIP_SINGLE_NETIF=1 and LWIP_DEBUGF() disabled, the following loop is optimized away */ + LWIP_UNUSED_ARG(dest); + + /* iterate through netifs */ + NETIF_FOREACH(netif) { + /* is the netif up, does it have a link and a valid address? */ + if (netif_is_up(netif) && netif_is_link_up(netif) && !ip4_addr_isany_val(*netif_ip4_addr(netif))) { + /* network mask matches? */ + if (ip4_addr_netcmp(dest, netif_ip4_addr(netif), netif_ip4_netmask(netif))) { + /* return netif on which to forward IP packet */ + return netif; + } + /* gateway matches on a non broadcast interface? (i.e. peer in a point to point interface) */ + if (((netif->flags & NETIF_FLAG_BROADCAST) == 0) && ip4_addr_cmp(dest, netif_ip4_gw(netif))) { + /* return netif on which to forward IP packet */ + return netif; + } + } + } + +#if LWIP_NETIF_LOOPBACK && !LWIP_HAVE_LOOPIF + /* loopif is disabled, looopback traffic is passed through any netif */ + if (ip4_addr_isloopback(dest)) { + /* don't check for link on loopback traffic */ + if (netif_default != NULL && netif_is_up(netif_default)) { + return netif_default; + } + /* default netif is not up, just use any netif for loopback traffic */ + NETIF_FOREACH(netif) { + if (netif_is_up(netif)) { + return netif; + } + } + return NULL; + } +#endif /* LWIP_NETIF_LOOPBACK && !LWIP_HAVE_LOOPIF */ + +#ifdef LWIP_HOOK_IP4_ROUTE_SRC + netif = LWIP_HOOK_IP4_ROUTE_SRC(NULL, dest); + if (netif != NULL) { + return netif; + } +#elif defined(LWIP_HOOK_IP4_ROUTE) + netif = LWIP_HOOK_IP4_ROUTE(dest); + if (netif != NULL) { + return netif; + } +#endif +#endif /* !LWIP_SINGLE_NETIF */ + + if ((netif_default == NULL) || !netif_is_up(netif_default) || !netif_is_link_up(netif_default) || + ip4_addr_isany_val(*netif_ip4_addr(netif_default)) || ip4_addr_isloopback(dest)) { + /* No matching netif found and default netif is not usable. + If this is not good enough for you, use LWIP_HOOK_IP4_ROUTE() */ + LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("ip4_route: No route to %"U16_F".%"U16_F".%"U16_F".%"U16_F"\n", + ip4_addr1_16(dest), ip4_addr2_16(dest), ip4_addr3_16(dest), ip4_addr4_16(dest))); + IP_STATS_INC(ip.rterr); + MIB2_STATS_INC(mib2.ipoutnoroutes); + return NULL; + } + + return netif_default; +} + +#if IP_FORWARD +/** + * Determine whether an IP address is in a reserved set of addresses + * that may not be forwarded, or whether datagrams to that destination + * may be forwarded. + * @param p the packet to forward + * @return 1: can forward 0: discard + */ +static int +ip4_canforward(struct pbuf *p) +{ + u32_t addr = lwip_htonl(ip4_addr_get_u32(ip4_current_dest_addr())); + +#ifdef LWIP_HOOK_IP4_CANFORWARD + int ret = LWIP_HOOK_IP4_CANFORWARD(p, addr); + if (ret >= 0) { + return ret; + } +#endif /* LWIP_HOOK_IP4_CANFORWARD */ + + if (p->flags & PBUF_FLAG_LLBCAST) { + /* don't route link-layer broadcasts */ + return 0; + } + if ((p->flags & PBUF_FLAG_LLMCAST) || IP_MULTICAST(addr)) { + /* don't route link-layer multicasts (use LWIP_HOOK_IP4_CANFORWARD instead) */ + return 0; + } + if (IP_EXPERIMENTAL(addr)) { + return 0; + } + if (IP_CLASSA(addr)) { + u32_t net = addr & IP_CLASSA_NET; + if ((net == 0) || (net == ((u32_t)IP_LOOPBACKNET << IP_CLASSA_NSHIFT))) { + /* don't route loopback packets */ + return 0; + } + } + return 1; +} + +/** + * Forwards an IP packet. It finds an appropriate route for the + * packet, decrements the TTL value of the packet, adjusts the + * checksum and outputs the packet on the appropriate interface. + * + * @param p the packet to forward (p->payload points to IP header) + * @param iphdr the IP header of the input packet + * @param inp the netif on which this packet was received + */ +static void +ip4_forward(struct pbuf *p, struct ip_hdr *iphdr, struct netif *inp) +{ + struct netif *netif; + + PERF_START; + LWIP_UNUSED_ARG(inp); + + if (!ip4_canforward(p)) { + goto return_noroute; + } + + /* RFC3927 2.7: do not forward link-local addresses */ + if (ip4_addr_islinklocal(ip4_current_dest_addr())) { + LWIP_DEBUGF(IP_DEBUG, ("ip4_forward: not forwarding LLA %"U16_F".%"U16_F".%"U16_F".%"U16_F"\n", + ip4_addr1_16(ip4_current_dest_addr()), ip4_addr2_16(ip4_current_dest_addr()), + ip4_addr3_16(ip4_current_dest_addr()), ip4_addr4_16(ip4_current_dest_addr()))); + goto return_noroute; + } + + /* Find network interface where to forward this IP packet to. */ + netif = ip4_route_src(ip4_current_src_addr(), ip4_current_dest_addr()); + if (netif == NULL) { + LWIP_DEBUGF(IP_DEBUG, ("ip4_forward: no forwarding route for %"U16_F".%"U16_F".%"U16_F".%"U16_F" found\n", + ip4_addr1_16(ip4_current_dest_addr()), ip4_addr2_16(ip4_current_dest_addr()), + ip4_addr3_16(ip4_current_dest_addr()), ip4_addr4_16(ip4_current_dest_addr()))); + /* @todo: send ICMP_DUR_NET? */ + goto return_noroute; + } +#if !IP_FORWARD_ALLOW_TX_ON_RX_NETIF + /* Do not forward packets onto the same network interface on which + * they arrived. */ + if (netif == inp) { + LWIP_DEBUGF(IP_DEBUG, ("ip4_forward: not bouncing packets back on incoming interface.\n")); + goto return_noroute; + } +#endif /* IP_FORWARD_ALLOW_TX_ON_RX_NETIF */ + + /* decrement TTL */ + IPH_TTL_SET(iphdr, IPH_TTL(iphdr) - 1); + /* send ICMP if TTL == 0 */ + if (IPH_TTL(iphdr) == 0) { + MIB2_STATS_INC(mib2.ipinhdrerrors); +#if LWIP_ICMP + /* Don't send ICMP messages in response to ICMP messages */ + if (IPH_PROTO(iphdr) != IP_PROTO_ICMP) { + icmp_time_exceeded(p, ICMP_TE_TTL); + } +#endif /* LWIP_ICMP */ + return; + } + + /* Incrementally update the IP checksum. */ + if (IPH_CHKSUM(iphdr) >= PP_HTONS(0xffffU - 0x100)) { + IPH_CHKSUM_SET(iphdr, (u16_t)(IPH_CHKSUM(iphdr) + PP_HTONS(0x100) + 1)); + } else { + IPH_CHKSUM_SET(iphdr, (u16_t)(IPH_CHKSUM(iphdr) + PP_HTONS(0x100))); + } + + LWIP_DEBUGF(IP_DEBUG, ("ip4_forward: forwarding packet to %"U16_F".%"U16_F".%"U16_F".%"U16_F"\n", + ip4_addr1_16(ip4_current_dest_addr()), ip4_addr2_16(ip4_current_dest_addr()), + ip4_addr3_16(ip4_current_dest_addr()), ip4_addr4_16(ip4_current_dest_addr()))); + + IP_STATS_INC(ip.fw); + MIB2_STATS_INC(mib2.ipforwdatagrams); + IP_STATS_INC(ip.xmit); + + PERF_STOP("ip4_forward"); + /* don't fragment if interface has mtu set to 0 [loopif] */ + if (netif->mtu && (p->tot_len > netif->mtu)) { + if ((IPH_OFFSET(iphdr) & PP_NTOHS(IP_DF)) == 0) { +#if IP_FRAG + ip4_frag(p, netif, ip4_current_dest_addr()); +#else /* IP_FRAG */ + /* @todo: send ICMP Destination Unreachable code 13 "Communication administratively prohibited"? */ +#endif /* IP_FRAG */ + } else { +#if LWIP_ICMP + /* send ICMP Destination Unreachable code 4: "Fragmentation Needed and DF Set" */ + icmp_dest_unreach(p, ICMP_DUR_FRAG); +#endif /* LWIP_ICMP */ + } + return; + } + /* transmit pbuf on chosen interface */ + netif->output(netif, p, ip4_current_dest_addr()); + return; +return_noroute: + MIB2_STATS_INC(mib2.ipoutnoroutes); +} +#endif /* IP_FORWARD */ + +/** Return true if the current input packet should be accepted on this netif */ +static int +ip4_input_accept(struct netif *netif) +{ + LWIP_DEBUGF(IP_DEBUG, ("ip_input: iphdr->dest 0x%"X32_F" netif->ip_addr 0x%"X32_F" (0x%"X32_F", 0x%"X32_F", 0x%"X32_F")\n", + ip4_addr_get_u32(ip4_current_dest_addr()), ip4_addr_get_u32(netif_ip4_addr(netif)), + ip4_addr_get_u32(ip4_current_dest_addr()) & ip4_addr_get_u32(netif_ip4_netmask(netif)), + ip4_addr_get_u32(netif_ip4_addr(netif)) & ip4_addr_get_u32(netif_ip4_netmask(netif)), + ip4_addr_get_u32(ip4_current_dest_addr()) & ~ip4_addr_get_u32(netif_ip4_netmask(netif)))); + + /* interface is up and configured? */ + if ((netif_is_up(netif)) && (!ip4_addr_isany_val(*netif_ip4_addr(netif)))) { + /* unicast to this interface address? */ + if (ip4_addr_cmp(ip4_current_dest_addr(), netif_ip4_addr(netif)) || + /* or broadcast on this interface network address? */ + ip4_addr_isbroadcast(ip4_current_dest_addr(), netif) +#if LWIP_NETIF_LOOPBACK && !LWIP_HAVE_LOOPIF + || (ip4_addr_get_u32(ip4_current_dest_addr()) == PP_HTONL(IPADDR_LOOPBACK)) +#endif /* LWIP_NETIF_LOOPBACK && !LWIP_HAVE_LOOPIF */ + ) { + LWIP_DEBUGF(IP_DEBUG, ("ip4_input: packet accepted on interface %c%c\n", + netif->name[0], netif->name[1])); + /* accept on this netif */ + return 1; + } +#if LWIP_AUTOIP + /* connections to link-local addresses must persist after changing + the netif's address (RFC3927 ch. 1.9) */ + if (autoip_accept_packet(netif, ip4_current_dest_addr())) { + LWIP_DEBUGF(IP_DEBUG, ("ip4_input: LLA packet accepted on interface %c%c\n", + netif->name[0], netif->name[1])); + /* accept on this netif */ + return 1; + } +#endif /* LWIP_AUTOIP */ + } + return 0; +} + +/** + * This function is called by the network interface device driver when + * an IP packet is received. The function does the basic checks of the + * IP header such as packet size being at least larger than the header + * size etc. If the packet was not destined for us, the packet is + * forwarded (using ip_forward). The IP checksum is always checked. + * + * Finally, the packet is sent to the upper layer protocol input function. + * + * @param p the received IP packet (p->payload points to IP header) + * @param inp the netif on which this packet was received + * @return ERR_OK if the packet was processed (could return ERR_* if it wasn't + * processed, but currently always returns ERR_OK) + */ +err_t +ip4_input(struct pbuf *p, struct netif *inp) +{ + const struct ip_hdr *iphdr; + struct netif *netif; + u16_t iphdr_hlen; + u16_t iphdr_len; +#if IP_ACCEPT_LINK_LAYER_ADDRESSING || LWIP_IGMP + int check_ip_src = 1; +#endif /* IP_ACCEPT_LINK_LAYER_ADDRESSING || LWIP_IGMP */ +#if LWIP_RAW + raw_input_state_t raw_status; +#endif /* LWIP_RAW */ + + LWIP_ASSERT_CORE_LOCKED(); + + IP_STATS_INC(ip.recv); + MIB2_STATS_INC(mib2.ipinreceives); + + /* identify the IP header */ + iphdr = (struct ip_hdr *)p->payload; + if (IPH_V(iphdr) != 4) { + LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_WARNING, ("IP packet dropped due to bad version number %"U16_F"\n", (u16_t)IPH_V(iphdr))); + ip4_debug_print(p); + pbuf_free(p); + IP_STATS_INC(ip.err); + IP_STATS_INC(ip.drop); + MIB2_STATS_INC(mib2.ipinhdrerrors); + return ERR_OK; + } + +#ifdef LWIP_HOOK_IP4_INPUT + if (LWIP_HOOK_IP4_INPUT(p, inp)) { + /* the packet has been eaten */ + return ERR_OK; + } +#endif + + /* obtain IP header length in bytes */ + iphdr_hlen = IPH_HL_BYTES(iphdr); + /* obtain ip length in bytes */ + iphdr_len = lwip_ntohs(IPH_LEN(iphdr)); + + /* Trim pbuf. This is especially required for packets < 60 bytes. */ + if (iphdr_len < p->tot_len) { + pbuf_realloc(p, iphdr_len); + } + + /* header length exceeds first pbuf length, or ip length exceeds total pbuf length? */ + if ((iphdr_hlen > p->len) || (iphdr_len > p->tot_len) || (iphdr_hlen < IP_HLEN)) { + if (iphdr_hlen < IP_HLEN) { + LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, + ("ip4_input: short IP header (%"U16_F" bytes) received, IP packet dropped\n", iphdr_hlen)); + } + if (iphdr_hlen > p->len) { + LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, + ("IP header (len %"U16_F") does not fit in first pbuf (len %"U16_F"), IP packet dropped.\n", + iphdr_hlen, p->len)); + } + if (iphdr_len > p->tot_len) { + LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, + ("IP (len %"U16_F") is longer than pbuf (len %"U16_F"), IP packet dropped.\n", + iphdr_len, p->tot_len)); + } + /* free (drop) packet pbufs */ + pbuf_free(p); + IP_STATS_INC(ip.lenerr); + IP_STATS_INC(ip.drop); + MIB2_STATS_INC(mib2.ipindiscards); + return ERR_OK; + } + + /* verify checksum */ +#if CHECKSUM_CHECK_IP + IF__NETIF_CHECKSUM_ENABLED(inp, NETIF_CHECKSUM_CHECK_IP) { + if (inet_chksum(iphdr, iphdr_hlen) != 0) { + + LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, + ("Checksum (0x%"X16_F") failed, IP packet dropped.\n", inet_chksum(iphdr, iphdr_hlen))); + ip4_debug_print(p); + pbuf_free(p); + IP_STATS_INC(ip.chkerr); + IP_STATS_INC(ip.drop); + MIB2_STATS_INC(mib2.ipinhdrerrors); + return ERR_OK; + } + } +#endif + + /* copy IP addresses to aligned ip_addr_t */ + ip_addr_copy_from_ip4(ip_data.current_iphdr_dest, iphdr->dest); + ip_addr_copy_from_ip4(ip_data.current_iphdr_src, iphdr->src); + + /* match packet against an interface, i.e. is this packet for us? */ + if (ip4_addr_ismulticast(ip4_current_dest_addr())) { +#if LWIP_IGMP + if ((inp->flags & NETIF_FLAG_IGMP) && (igmp_lookfor_group(inp, ip4_current_dest_addr()))) { + /* IGMP snooping switches need 0.0.0.0 to be allowed as source address (RFC 4541) */ + ip4_addr_t allsystems; + IP4_ADDR(&allsystems, 224, 0, 0, 1); + if (ip4_addr_cmp(ip4_current_dest_addr(), &allsystems) && + ip4_addr_isany(ip4_current_src_addr())) { + check_ip_src = 0; + } + netif = inp; + } else { + netif = NULL; + } +#else /* LWIP_IGMP */ + if ((netif_is_up(inp)) && (!ip4_addr_isany_val(*netif_ip4_addr(inp)))) { + netif = inp; + } else { + netif = NULL; + } +#endif /* LWIP_IGMP */ + } else { + /* start trying with inp. if that's not acceptable, start walking the + list of configured netifs. */ + if (ip4_input_accept(inp)) { + netif = inp; + } else { + netif = NULL; +#if !LWIP_NETIF_LOOPBACK || LWIP_HAVE_LOOPIF + /* Packets sent to the loopback address must not be accepted on an + * interface that does not have the loopback address assigned to it, + * unless a non-loopback interface is used for loopback traffic. */ + if (!ip4_addr_isloopback(ip4_current_dest_addr())) +#endif /* !LWIP_NETIF_LOOPBACK || LWIP_HAVE_LOOPIF */ + { +#if !LWIP_SINGLE_NETIF + NETIF_FOREACH(netif) { + if (netif == inp) { + /* we checked that before already */ + continue; + } + if (ip4_input_accept(netif)) { + break; + } + } +#endif /* !LWIP_SINGLE_NETIF */ + } + } + } + +#if IP_ACCEPT_LINK_LAYER_ADDRESSING + /* Pass DHCP messages regardless of destination address. DHCP traffic is addressed + * using link layer addressing (such as Ethernet MAC) so we must not filter on IP. + * According to RFC 1542 section 3.1.1, referred by RFC 2131). + * + * If you want to accept private broadcast communication while a netif is down, + * define LWIP_IP_ACCEPT_UDP_PORT(dst_port), e.g.: + * + * #define LWIP_IP_ACCEPT_UDP_PORT(dst_port) ((dst_port) == PP_NTOHS(12345)) + */ + if (netif == NULL) { + /* remote port is DHCP server? */ + if (IPH_PROTO(iphdr) == IP_PROTO_UDP) { + const struct udp_hdr *udphdr = (const struct udp_hdr *)((const u8_t *)iphdr + iphdr_hlen); + LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_TRACE, ("ip4_input: UDP packet to DHCP client port %"U16_F"\n", + lwip_ntohs(udphdr->dest))); + if (IP_ACCEPT_LINK_LAYER_ADDRESSED_PORT(udphdr->dest)) { + LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_TRACE, ("ip4_input: DHCP packet accepted.\n")); + netif = inp; + check_ip_src = 0; + } + } + } +#endif /* IP_ACCEPT_LINK_LAYER_ADDRESSING */ + + /* broadcast or multicast packet source address? Compliant with RFC 1122: 3.2.1.3 */ +#if LWIP_IGMP || IP_ACCEPT_LINK_LAYER_ADDRESSING + if (check_ip_src +#if IP_ACCEPT_LINK_LAYER_ADDRESSING + /* DHCP servers need 0.0.0.0 to be allowed as source address (RFC 1.1.2.2: 3.2.1.3/a) */ + && !ip4_addr_isany_val(*ip4_current_src_addr()) +#endif /* IP_ACCEPT_LINK_LAYER_ADDRESSING */ + ) +#endif /* LWIP_IGMP || IP_ACCEPT_LINK_LAYER_ADDRESSING */ + { + if ((ip4_addr_isbroadcast(ip4_current_src_addr(), inp)) || + (ip4_addr_ismulticast(ip4_current_src_addr()))) { + /* packet source is not valid */ + LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, ("ip4_input: packet source is not valid.\n")); + /* free (drop) packet pbufs */ + pbuf_free(p); + IP_STATS_INC(ip.drop); + MIB2_STATS_INC(mib2.ipinaddrerrors); + MIB2_STATS_INC(mib2.ipindiscards); + return ERR_OK; + } + } + + /* packet not for us? */ + if (netif == NULL) { + /* packet not for us, route or discard */ + LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_TRACE, ("ip4_input: packet not for us.\n")); +#if IP_FORWARD + /* non-broadcast packet? */ + if (!ip4_addr_isbroadcast(ip4_current_dest_addr(), inp)) { + /* try to forward IP packet on (other) interfaces */ + ip4_forward(p, (struct ip_hdr *)p->payload, inp); + } else +#endif /* IP_FORWARD */ + { + IP_STATS_INC(ip.drop); + MIB2_STATS_INC(mib2.ipinaddrerrors); + MIB2_STATS_INC(mib2.ipindiscards); + } + pbuf_free(p); + return ERR_OK; + } + /* packet consists of multiple fragments? */ + if ((IPH_OFFSET(iphdr) & PP_HTONS(IP_OFFMASK | IP_MF)) != 0) { +#if IP_REASSEMBLY /* packet fragment reassembly code present? */ + LWIP_DEBUGF(IP_DEBUG, ("IP packet is a fragment (id=0x%04"X16_F" tot_len=%"U16_F" len=%"U16_F" MF=%"U16_F" offset=%"U16_F"), calling ip4_reass()\n", + lwip_ntohs(IPH_ID(iphdr)), p->tot_len, lwip_ntohs(IPH_LEN(iphdr)), (u16_t)!!(IPH_OFFSET(iphdr) & PP_HTONS(IP_MF)), (u16_t)((lwip_ntohs(IPH_OFFSET(iphdr)) & IP_OFFMASK) * 8))); + /* reassemble the packet*/ + p = ip4_reass(p); + /* packet not fully reassembled yet? */ + if (p == NULL) { + return ERR_OK; + } + iphdr = (const struct ip_hdr *)p->payload; +#else /* IP_REASSEMBLY == 0, no packet fragment reassembly code present */ + pbuf_free(p); + LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("IP packet dropped since it was fragmented (0x%"X16_F") (while IP_REASSEMBLY == 0).\n", + lwip_ntohs(IPH_OFFSET(iphdr)))); + IP_STATS_INC(ip.opterr); + IP_STATS_INC(ip.drop); + /* unsupported protocol feature */ + MIB2_STATS_INC(mib2.ipinunknownprotos); + return ERR_OK; +#endif /* IP_REASSEMBLY */ + } + +#if IP_OPTIONS_ALLOWED == 0 /* no support for IP options in the IP header? */ + +#if LWIP_IGMP + /* there is an extra "router alert" option in IGMP messages which we allow for but do not police */ + if ((iphdr_hlen > IP_HLEN) && (IPH_PROTO(iphdr) != IP_PROTO_IGMP)) { +#else + if (iphdr_hlen > IP_HLEN) { +#endif /* LWIP_IGMP */ + LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("IP packet dropped since there were IP options (while IP_OPTIONS_ALLOWED == 0).\n")); + pbuf_free(p); + IP_STATS_INC(ip.opterr); + IP_STATS_INC(ip.drop); + /* unsupported protocol feature */ + MIB2_STATS_INC(mib2.ipinunknownprotos); + return ERR_OK; + } +#endif /* IP_OPTIONS_ALLOWED == 0 */ + + /* send to upper layers */ + LWIP_DEBUGF(IP_DEBUG, ("ip4_input: \n")); + ip4_debug_print(p); + LWIP_DEBUGF(IP_DEBUG, ("ip4_input: p->len %"U16_F" p->tot_len %"U16_F"\n", p->len, p->tot_len)); + + ip_data.current_netif = netif; + ip_data.current_input_netif = inp; + ip_data.current_ip4_header = iphdr; + ip_data.current_ip_header_tot_len = IPH_HL_BYTES(iphdr); + +#if LWIP_RAW + /* raw input did not eat the packet? */ + raw_status = raw_input(p, inp); + if (raw_status != RAW_INPUT_EATEN) +#endif /* LWIP_RAW */ + { + pbuf_remove_header(p, iphdr_hlen); /* Move to payload, no check necessary. */ + + switch (IPH_PROTO(iphdr)) { +#if LWIP_UDP + case IP_PROTO_UDP: +#if LWIP_UDPLITE + case IP_PROTO_UDPLITE: +#endif /* LWIP_UDPLITE */ + MIB2_STATS_INC(mib2.ipindelivers); + udp_input(p, inp); + break; +#endif /* LWIP_UDP */ +#if LWIP_TCP + case IP_PROTO_TCP: + MIB2_STATS_INC(mib2.ipindelivers); + tcp_input(p, inp); + break; +#endif /* LWIP_TCP */ +#if LWIP_ICMP + case IP_PROTO_ICMP: + MIB2_STATS_INC(mib2.ipindelivers); + icmp_input(p, inp); + break; +#endif /* LWIP_ICMP */ +#if LWIP_IGMP + case IP_PROTO_IGMP: + igmp_input(p, inp, ip4_current_dest_addr()); + break; +#endif /* LWIP_IGMP */ + default: +#if LWIP_RAW + if (raw_status == RAW_INPUT_DELIVERED) { + MIB2_STATS_INC(mib2.ipindelivers); + } else +#endif /* LWIP_RAW */ + { +#if LWIP_ICMP + /* send ICMP destination protocol unreachable unless is was a broadcast */ + if (!ip4_addr_isbroadcast(ip4_current_dest_addr(), netif) && + !ip4_addr_ismulticast(ip4_current_dest_addr())) { + pbuf_header_force(p, (s16_t)iphdr_hlen); /* Move to ip header, no check necessary. */ + icmp_dest_unreach(p, ICMP_DUR_PROTO); + } +#endif /* LWIP_ICMP */ + + LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("Unsupported transport protocol %"U16_F"\n", (u16_t)IPH_PROTO(iphdr))); + + IP_STATS_INC(ip.proterr); + IP_STATS_INC(ip.drop); + MIB2_STATS_INC(mib2.ipinunknownprotos); + } + pbuf_free(p); + break; + } + } + + /* @todo: this is not really necessary... */ + ip_data.current_netif = NULL; + ip_data.current_input_netif = NULL; + ip_data.current_ip4_header = NULL; + ip_data.current_ip_header_tot_len = 0; + ip4_addr_set_any(ip4_current_src_addr()); + ip4_addr_set_any(ip4_current_dest_addr()); + + return ERR_OK; +} + +/** + * Sends an IP packet on a network interface. This function constructs + * the IP header and calculates the IP header checksum. If the source + * IP address is NULL, the IP address of the outgoing network + * interface is filled in as source address. + * If the destination IP address is LWIP_IP_HDRINCL, p is assumed to already + * include an IP header and p->payload points to it instead of the data. + * + * @param p the packet to send (p->payload points to the data, e.g. next + protocol header; if dest == LWIP_IP_HDRINCL, p already includes an + IP header and p->payload points to that IP header) + * @param src the source IP address to send from (if src == IP4_ADDR_ANY, the + * IP address of the netif used to send is used as source address) + * @param dest the destination IP address to send the packet to + * @param ttl the TTL value to be set in the IP header + * @param tos the TOS value to be set in the IP header + * @param proto the PROTOCOL to be set in the IP header + * @param netif the netif on which to send this packet + * @return ERR_OK if the packet was sent OK + * ERR_BUF if p doesn't have enough space for IP/LINK headers + * returns errors returned by netif->output + * + * @note ip_id: RFC791 "some host may be able to simply use + * unique identifiers independent of destination" + */ +err_t +ip4_output_if(struct pbuf *p, const ip4_addr_t *src, const ip4_addr_t *dest, + u8_t ttl, u8_t tos, + u8_t proto, struct netif *netif) +{ +#if IP_OPTIONS_SEND + return ip4_output_if_opt(p, src, dest, ttl, tos, proto, netif, NULL, 0); +} + +/** + * Same as ip_output_if() but with the possibility to include IP options: + * + * @ param ip_options pointer to the IP options, copied into the IP header + * @ param optlen length of ip_options + */ +err_t +ip4_output_if_opt(struct pbuf *p, const ip4_addr_t *src, const ip4_addr_t *dest, + u8_t ttl, u8_t tos, u8_t proto, struct netif *netif, void *ip_options, + u16_t optlen) +{ +#endif /* IP_OPTIONS_SEND */ + const ip4_addr_t *src_used = src; + if (dest != LWIP_IP_HDRINCL) { + if (ip4_addr_isany(src)) { + src_used = netif_ip4_addr(netif); + } + } + +#if IP_OPTIONS_SEND + return ip4_output_if_opt_src(p, src_used, dest, ttl, tos, proto, netif, + ip_options, optlen); +#else /* IP_OPTIONS_SEND */ + return ip4_output_if_src(p, src_used, dest, ttl, tos, proto, netif); +#endif /* IP_OPTIONS_SEND */ +} + +/** + * Same as ip_output_if() but 'src' address is not replaced by netif address + * when it is 'any'. + */ +err_t +ip4_output_if_src(struct pbuf *p, const ip4_addr_t *src, const ip4_addr_t *dest, + u8_t ttl, u8_t tos, + u8_t proto, struct netif *netif) +{ +#if IP_OPTIONS_SEND + return ip4_output_if_opt_src(p, src, dest, ttl, tos, proto, netif, NULL, 0); +} + +/** + * Same as ip_output_if_opt() but 'src' address is not replaced by netif address + * when it is 'any'. + */ +err_t +ip4_output_if_opt_src(struct pbuf *p, const ip4_addr_t *src, const ip4_addr_t *dest, + u8_t ttl, u8_t tos, u8_t proto, struct netif *netif, void *ip_options, + u16_t optlen) +{ +#endif /* IP_OPTIONS_SEND */ + struct ip_hdr *iphdr; + ip4_addr_t dest_addr; +#if CHECKSUM_GEN_IP_INLINE + u32_t chk_sum = 0; +#endif /* CHECKSUM_GEN_IP_INLINE */ + + LWIP_ASSERT_CORE_LOCKED(); + LWIP_IP_CHECK_PBUF_REF_COUNT_FOR_TX(p); + + MIB2_STATS_INC(mib2.ipoutrequests); + + /* Should the IP header be generated or is it already included in p? */ + if (dest != LWIP_IP_HDRINCL) { + u16_t ip_hlen = IP_HLEN; +#if IP_OPTIONS_SEND + u16_t optlen_aligned = 0; + if (optlen != 0) { +#if CHECKSUM_GEN_IP_INLINE + int i; +#endif /* CHECKSUM_GEN_IP_INLINE */ + if (optlen > (IP_HLEN_MAX - IP_HLEN)) { + /* optlen too long */ + LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("ip4_output_if_opt: optlen too long\n")); + IP_STATS_INC(ip.err); + MIB2_STATS_INC(mib2.ipoutdiscards); + return ERR_VAL; + } + /* round up to a multiple of 4 */ + optlen_aligned = (u16_t)((optlen + 3) & ~3); + ip_hlen = (u16_t)(ip_hlen + optlen_aligned); + /* First write in the IP options */ + if (pbuf_add_header(p, optlen_aligned)) { + LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("ip4_output_if_opt: not enough room for IP options in pbuf\n")); + IP_STATS_INC(ip.err); + MIB2_STATS_INC(mib2.ipoutdiscards); + return ERR_BUF; + } + MEMCPY(p->payload, ip_options, optlen); + if (optlen < optlen_aligned) { + /* zero the remaining bytes */ + memset(((char *)p->payload) + optlen, 0, (size_t)(optlen_aligned - optlen)); + } +#if CHECKSUM_GEN_IP_INLINE + for (i = 0; i < optlen_aligned / 2; i++) { + chk_sum += ((u16_t *)p->payload)[i]; + } +#endif /* CHECKSUM_GEN_IP_INLINE */ + } +#endif /* IP_OPTIONS_SEND */ + /* generate IP header */ + if (pbuf_add_header(p, IP_HLEN)) { + LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("ip4_output: not enough room for IP header in pbuf\n")); + + IP_STATS_INC(ip.err); + MIB2_STATS_INC(mib2.ipoutdiscards); + return ERR_BUF; + } + + iphdr = (struct ip_hdr *)p->payload; + LWIP_ASSERT("check that first pbuf can hold struct ip_hdr", + (p->len >= sizeof(struct ip_hdr))); + + IPH_TTL_SET(iphdr, ttl); + IPH_PROTO_SET(iphdr, proto); +#if CHECKSUM_GEN_IP_INLINE + chk_sum += PP_NTOHS(proto | (ttl << 8)); +#endif /* CHECKSUM_GEN_IP_INLINE */ + + /* dest cannot be NULL here */ + ip4_addr_copy(iphdr->dest, *dest); +#if CHECKSUM_GEN_IP_INLINE + chk_sum += ip4_addr_get_u32(&iphdr->dest) & 0xFFFF; + chk_sum += ip4_addr_get_u32(&iphdr->dest) >> 16; +#endif /* CHECKSUM_GEN_IP_INLINE */ + + IPH_VHL_SET(iphdr, 4, ip_hlen / 4); + IPH_TOS_SET(iphdr, tos); +#if CHECKSUM_GEN_IP_INLINE + chk_sum += PP_NTOHS(tos | (iphdr->_v_hl << 8)); +#endif /* CHECKSUM_GEN_IP_INLINE */ + IPH_LEN_SET(iphdr, lwip_htons(p->tot_len)); +#if CHECKSUM_GEN_IP_INLINE + chk_sum += iphdr->_len; +#endif /* CHECKSUM_GEN_IP_INLINE */ + IPH_OFFSET_SET(iphdr, 0); + IPH_ID_SET(iphdr, lwip_htons(ip_id)); +#if CHECKSUM_GEN_IP_INLINE + chk_sum += iphdr->_id; +#endif /* CHECKSUM_GEN_IP_INLINE */ + ++ip_id; + + if (src == NULL) { + ip4_addr_copy(iphdr->src, *IP4_ADDR_ANY4); + } else { + /* src cannot be NULL here */ + ip4_addr_copy(iphdr->src, *src); + } + +#if CHECKSUM_GEN_IP_INLINE + chk_sum += ip4_addr_get_u32(&iphdr->src) & 0xFFFF; + chk_sum += ip4_addr_get_u32(&iphdr->src) >> 16; + chk_sum = (chk_sum >> 16) + (chk_sum & 0xFFFF); + chk_sum = (chk_sum >> 16) + chk_sum; + chk_sum = ~chk_sum; + IF__NETIF_CHECKSUM_ENABLED(netif, NETIF_CHECKSUM_GEN_IP) { + iphdr->_chksum = (u16_t)chk_sum; /* network order */ + } +#if LWIP_CHECKSUM_CTRL_PER_NETIF + else { + IPH_CHKSUM_SET(iphdr, 0); + } +#endif /* LWIP_CHECKSUM_CTRL_PER_NETIF*/ +#else /* CHECKSUM_GEN_IP_INLINE */ + IPH_CHKSUM_SET(iphdr, 0); +#if CHECKSUM_GEN_IP + IF__NETIF_CHECKSUM_ENABLED(netif, NETIF_CHECKSUM_GEN_IP) { + IPH_CHKSUM_SET(iphdr, inet_chksum(iphdr, ip_hlen)); + } +#endif /* CHECKSUM_GEN_IP */ +#endif /* CHECKSUM_GEN_IP_INLINE */ + } else { + /* IP header already included in p */ + if (p->len < IP_HLEN) { + LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("ip4_output: LWIP_IP_HDRINCL but pbuf is too short\n")); + IP_STATS_INC(ip.err); + MIB2_STATS_INC(mib2.ipoutdiscards); + return ERR_BUF; + } + iphdr = (struct ip_hdr *)p->payload; + ip4_addr_copy(dest_addr, iphdr->dest); + dest = &dest_addr; + } + + IP_STATS_INC(ip.xmit); + + LWIP_DEBUGF(IP_DEBUG, ("ip4_output_if: %c%c%"U16_F"\n", netif->name[0], netif->name[1], (u16_t)netif->num)); + ip4_debug_print(p); + +#if ENABLE_LOOPBACK + if (ip4_addr_cmp(dest, netif_ip4_addr(netif)) +#if !LWIP_HAVE_LOOPIF + || ip4_addr_isloopback(dest) +#endif /* !LWIP_HAVE_LOOPIF */ + ) { + /* Packet to self, enqueue it for loopback */ + LWIP_DEBUGF(IP_DEBUG, ("netif_loop_output()")); + return netif_loop_output(netif, p); + } +#if LWIP_MULTICAST_TX_OPTIONS + if ((p->flags & PBUF_FLAG_MCASTLOOP) != 0) { + netif_loop_output(netif, p); + } +#endif /* LWIP_MULTICAST_TX_OPTIONS */ +#endif /* ENABLE_LOOPBACK */ +#if IP_FRAG + /* don't fragment if interface has mtu set to 0 [loopif] */ + if (netif->mtu && (p->tot_len > netif->mtu)) { + return ip4_frag(p, netif, dest); + } +#endif /* IP_FRAG */ + + LWIP_DEBUGF(IP_DEBUG, ("ip4_output_if: call netif->output()\n")); + return netif->output(netif, p, dest); +} + +/** + * Simple interface to ip_output_if. It finds the outgoing network + * interface and calls upon ip_output_if to do the actual work. + * + * @param p the packet to send (p->payload points to the data, e.g. next + protocol header; if dest == LWIP_IP_HDRINCL, p already includes an + IP header and p->payload points to that IP header) + * @param src the source IP address to send from (if src == IP4_ADDR_ANY, the + * IP address of the netif used to send is used as source address) + * @param dest the destination IP address to send the packet to + * @param ttl the TTL value to be set in the IP header + * @param tos the TOS value to be set in the IP header + * @param proto the PROTOCOL to be set in the IP header + * + * @return ERR_RTE if no route is found + * see ip_output_if() for more return values + */ +err_t +ip4_output(struct pbuf *p, const ip4_addr_t *src, const ip4_addr_t *dest, + u8_t ttl, u8_t tos, u8_t proto) +{ + struct netif *netif; + + LWIP_IP_CHECK_PBUF_REF_COUNT_FOR_TX(p); + + if ((netif = ip4_route_src(src, dest)) == NULL) { + LWIP_DEBUGF(IP_DEBUG, ("ip4_output: No route to %"U16_F".%"U16_F".%"U16_F".%"U16_F"\n", + ip4_addr1_16(dest), ip4_addr2_16(dest), ip4_addr3_16(dest), ip4_addr4_16(dest))); + IP_STATS_INC(ip.rterr); + return ERR_RTE; + } + + return ip4_output_if(p, src, dest, ttl, tos, proto, netif); +} + +#if LWIP_NETIF_USE_HINTS +/** Like ip_output, but takes and addr_hint pointer that is passed on to netif->addr_hint + * before calling ip_output_if. + * + * @param p the packet to send (p->payload points to the data, e.g. next + protocol header; if dest == LWIP_IP_HDRINCL, p already includes an + IP header and p->payload points to that IP header) + * @param src the source IP address to send from (if src == IP4_ADDR_ANY, the + * IP address of the netif used to send is used as source address) + * @param dest the destination IP address to send the packet to + * @param ttl the TTL value to be set in the IP header + * @param tos the TOS value to be set in the IP header + * @param proto the PROTOCOL to be set in the IP header + * @param netif_hint netif output hint pointer set to netif->hint before + * calling ip_output_if() + * + * @return ERR_RTE if no route is found + * see ip_output_if() for more return values + */ +err_t +ip4_output_hinted(struct pbuf *p, const ip4_addr_t *src, const ip4_addr_t *dest, + u8_t ttl, u8_t tos, u8_t proto, struct netif_hint *netif_hint) +{ + struct netif *netif; + err_t err; + + LWIP_IP_CHECK_PBUF_REF_COUNT_FOR_TX(p); + + if ((netif = ip4_route_src(src, dest)) == NULL) { + LWIP_DEBUGF(IP_DEBUG, ("ip4_output: No route to %"U16_F".%"U16_F".%"U16_F".%"U16_F"\n", + ip4_addr1_16(dest), ip4_addr2_16(dest), ip4_addr3_16(dest), ip4_addr4_16(dest))); + IP_STATS_INC(ip.rterr); + return ERR_RTE; + } + + NETIF_SET_HINTS(netif, netif_hint); + err = ip4_output_if(p, src, dest, ttl, tos, proto, netif); + NETIF_RESET_HINTS(netif); + + return err; +} +#endif /* LWIP_NETIF_USE_HINTS*/ + +#if IP_DEBUG +/* Print an IP header by using LWIP_DEBUGF + * @param p an IP packet, p->payload pointing to the IP header + */ +void +ip4_debug_print(struct pbuf *p) +{ + struct ip_hdr *iphdr = (struct ip_hdr *)p->payload; + + LWIP_DEBUGF(IP_DEBUG, ("IP header:\n")); + LWIP_DEBUGF(IP_DEBUG, ("+-------------------------------+\n")); + LWIP_DEBUGF(IP_DEBUG, ("|%2"S16_F" |%2"S16_F" | 0x%02"X16_F" | %5"U16_F" | (v, hl, tos, len)\n", + (u16_t)IPH_V(iphdr), + (u16_t)IPH_HL(iphdr), + (u16_t)IPH_TOS(iphdr), + lwip_ntohs(IPH_LEN(iphdr)))); + LWIP_DEBUGF(IP_DEBUG, ("+-------------------------------+\n")); + LWIP_DEBUGF(IP_DEBUG, ("| %5"U16_F" |%"U16_F"%"U16_F"%"U16_F"| %4"U16_F" | (id, flags, offset)\n", + lwip_ntohs(IPH_ID(iphdr)), + (u16_t)(lwip_ntohs(IPH_OFFSET(iphdr)) >> 15 & 1), + (u16_t)(lwip_ntohs(IPH_OFFSET(iphdr)) >> 14 & 1), + (u16_t)(lwip_ntohs(IPH_OFFSET(iphdr)) >> 13 & 1), + (u16_t)(lwip_ntohs(IPH_OFFSET(iphdr)) & IP_OFFMASK))); + LWIP_DEBUGF(IP_DEBUG, ("+-------------------------------+\n")); + LWIP_DEBUGF(IP_DEBUG, ("| %3"U16_F" | %3"U16_F" | 0x%04"X16_F" | (ttl, proto, chksum)\n", + (u16_t)IPH_TTL(iphdr), + (u16_t)IPH_PROTO(iphdr), + lwip_ntohs(IPH_CHKSUM(iphdr)))); + LWIP_DEBUGF(IP_DEBUG, ("+-------------------------------+\n")); + LWIP_DEBUGF(IP_DEBUG, ("| %3"U16_F" | %3"U16_F" | %3"U16_F" | %3"U16_F" | (src)\n", + ip4_addr1_16_val(iphdr->src), + ip4_addr2_16_val(iphdr->src), + ip4_addr3_16_val(iphdr->src), + ip4_addr4_16_val(iphdr->src))); + LWIP_DEBUGF(IP_DEBUG, ("+-------------------------------+\n")); + LWIP_DEBUGF(IP_DEBUG, ("| %3"U16_F" | %3"U16_F" | %3"U16_F" | %3"U16_F" | (dest)\n", + ip4_addr1_16_val(iphdr->dest), + ip4_addr2_16_val(iphdr->dest), + ip4_addr3_16_val(iphdr->dest), + ip4_addr4_16_val(iphdr->dest))); + LWIP_DEBUGF(IP_DEBUG, ("+-------------------------------+\n")); +} +#endif /* IP_DEBUG */ + +#endif /* LWIP_IPV4 */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv4/ip4_addr.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv4/ip4_addr.c new file mode 100644 index 0000000000000000000000000000000000000000..33204d11410a69b14853f7f6e8f67c1e2868328c --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv4/ip4_addr.c @@ -0,0 +1,321 @@ +/** + * @file + * This is the IPv4 address tools implementation. + * + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#include "lwip/opt.h" + +#if LWIP_IPV4 + +#include "lwip/ip_addr.h" +#include "lwip/netif.h" + +/* used by IP4_ADDR_ANY and IP_ADDR_BROADCAST in ip_addr.h */ +const ip_addr_t ip_addr_any = IPADDR4_INIT(IPADDR_ANY); +const ip_addr_t ip_addr_broadcast = IPADDR4_INIT(IPADDR_BROADCAST); + +/** + * Determine if an address is a broadcast address on a network interface + * + * @param addr address to be checked + * @param netif the network interface against which the address is checked + * @return returns non-zero if the address is a broadcast address + */ +u8_t +ip4_addr_isbroadcast_u32(u32_t addr, const struct netif *netif) +{ + ip4_addr_t ipaddr; + ip4_addr_set_u32(&ipaddr, addr); + + /* all ones (broadcast) or all zeroes (old skool broadcast) */ + if ((~addr == IPADDR_ANY) || + (addr == IPADDR_ANY)) { + return 1; + /* no broadcast support on this network interface? */ + } else if ((netif->flags & NETIF_FLAG_BROADCAST) == 0) { + /* the given address cannot be a broadcast address + * nor can we check against any broadcast addresses */ + return 0; + /* address matches network interface address exactly? => no broadcast */ + } else if (addr == ip4_addr_get_u32(netif_ip4_addr(netif))) { + return 0; + /* on the same (sub) network... */ + } else if (ip4_addr_netcmp(&ipaddr, netif_ip4_addr(netif), netif_ip4_netmask(netif)) + /* ...and host identifier bits are all ones? =>... */ + && ((addr & ~ip4_addr_get_u32(netif_ip4_netmask(netif))) == + (IPADDR_BROADCAST & ~ip4_addr_get_u32(netif_ip4_netmask(netif))))) { + /* => network broadcast address */ + return 1; + } else { + return 0; + } +} + +/** Checks if a netmask is valid (starting with ones, then only zeros) + * + * @param netmask the IPv4 netmask to check (in network byte order!) + * @return 1 if the netmask is valid, 0 if it is not + */ +u8_t +ip4_addr_netmask_valid(u32_t netmask) +{ + u32_t mask; + u32_t nm_hostorder = lwip_htonl(netmask); + + /* first, check for the first zero */ + for (mask = 1UL << 31 ; mask != 0; mask >>= 1) { + if ((nm_hostorder & mask) == 0) { + break; + } + } + /* then check that there is no one */ + for (; mask != 0; mask >>= 1) { + if ((nm_hostorder & mask) != 0) { + /* there is a one after the first zero -> invalid */ + return 0; + } + } + /* no one after the first zero -> valid */ + return 1; +} + +/** + * Ascii internet address interpretation routine. + * The value returned is in network order. + * + * @param cp IP address in ascii representation (e.g. "127.0.0.1") + * @return ip address in network order + */ +u32_t +ipaddr_addr(const char *cp) +{ + ip4_addr_t val; + + if (ip4addr_aton(cp, &val)) { + return ip4_addr_get_u32(&val); + } + return (IPADDR_NONE); +} + +/** + * Check whether "cp" is a valid ascii representation + * of an Internet address and convert to a binary address. + * Returns 1 if the address is valid, 0 if not. + * This replaces inet_addr, the return value from which + * cannot distinguish between failure and a local broadcast address. + * + * @param cp IP address in ascii representation (e.g. "127.0.0.1") + * @param addr pointer to which to save the ip address in network order + * @return 1 if cp could be converted to addr, 0 on failure + */ +int +ip4addr_aton(const char *cp, ip4_addr_t *addr) +{ + u32_t val; + u8_t base; + char c; + u32_t parts[4]; + u32_t *pp = parts; + + c = *cp; + for (;;) { + /* + * Collect number up to ``.''. + * Values are specified as for C: + * 0x=hex, 0=octal, 1-9=decimal. + */ + if (!lwip_isdigit(c)) { + return 0; + } + val = 0; + base = 10; + if (c == '0') { + c = *++cp; + if (c == 'x' || c == 'X') { + base = 16; + c = *++cp; + } else { + base = 8; + } + } + for (;;) { + if (lwip_isdigit(c)) { + val = (val * base) + (u32_t)(c - '0'); + c = *++cp; + } else if (base == 16 && lwip_isxdigit(c)) { + val = (val << 4) | (u32_t)(c + 10 - (lwip_islower(c) ? 'a' : 'A')); + c = *++cp; + } else { + break; + } + } + if (c == '.') { + /* + * Internet format: + * a.b.c.d + * a.b.c (with c treated as 16 bits) + * a.b (with b treated as 24 bits) + */ + if (pp >= parts + 3) { + return 0; + } + *pp++ = val; + c = *++cp; + } else { + break; + } + } + /* + * Check for trailing characters. + */ + if (c != '\0' && !lwip_isspace(c)) { + return 0; + } + /* + * Concoct the address according to + * the number of parts specified. + */ + switch (pp - parts + 1) { + + case 0: + return 0; /* initial nondigit */ + + case 1: /* a -- 32 bits */ + break; + + case 2: /* a.b -- 8.24 bits */ + if (val > 0xffffffUL) { + return 0; + } + if (parts[0] > 0xff) { + return 0; + } + val |= parts[0] << 24; + break; + + case 3: /* a.b.c -- 8.8.16 bits */ + if (val > 0xffff) { + return 0; + } + if ((parts[0] > 0xff) || (parts[1] > 0xff)) { + return 0; + } + val |= (parts[0] << 24) | (parts[1] << 16); + break; + + case 4: /* a.b.c.d -- 8.8.8.8 bits */ + if (val > 0xff) { + return 0; + } + if ((parts[0] > 0xff) || (parts[1] > 0xff) || (parts[2] > 0xff)) { + return 0; + } + val |= (parts[0] << 24) | (parts[1] << 16) | (parts[2] << 8); + break; + default: + LWIP_ASSERT("unhandled", 0); + break; + } + if (addr) { + ip4_addr_set_u32(addr, lwip_htonl(val)); + } + return 1; +} + +/** + * Convert numeric IP address into decimal dotted ASCII representation. + * returns ptr to static buffer; not reentrant! + * + * @param addr ip address in network order to convert + * @return pointer to a global static (!) buffer that holds the ASCII + * representation of addr + */ +char * +ip4addr_ntoa(const ip4_addr_t *addr) +{ + static char str[IP4ADDR_STRLEN_MAX]; + return ip4addr_ntoa_r(addr, str, IP4ADDR_STRLEN_MAX); +} + +/** + * Same as ip4addr_ntoa, but reentrant since a user-supplied buffer is used. + * + * @param addr ip address in network order to convert + * @param buf target buffer where the string is stored + * @param buflen length of buf + * @return either pointer to buf which now holds the ASCII + * representation of addr or NULL if buf was too small + */ +char * +ip4addr_ntoa_r(const ip4_addr_t *addr, char *buf, int buflen) +{ + u32_t s_addr; + char inv[3]; + char *rp; + u8_t *ap; + u8_t rem; + u8_t n; + u8_t i; + int len = 0; + + s_addr = ip4_addr_get_u32(addr); + + rp = buf; + ap = (u8_t *)&s_addr; + for (n = 0; n < 4; n++) { + i = 0; + do { + rem = *ap % (u8_t)10; + *ap /= (u8_t)10; + inv[i++] = (char)('0' + rem); + } while (*ap); + while (i--) { + if (len++ >= buflen) { + return NULL; + } + *rp++ = inv[i]; + } + if (len++ >= buflen) { + return NULL; + } + *rp++ = '.'; + ap++; + } + *--rp = 0; + return buf; +} + +#endif /* LWIP_IPV4 */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv4/ip4_frag.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv4/ip4_frag.c new file mode 100644 index 0000000000000000000000000000000000000000..a445530e043c123ced5befef5175e4fbe4e46f48 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv4/ip4_frag.c @@ -0,0 +1,894 @@ +/** + * @file + * This is the IPv4 packet segmentation and reassembly implementation. + * + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Jani Monoses + * Simon Goldschmidt + * original reassembly code by Adam Dunkels + * + */ + +#include "lwip/opt.h" + +#if LWIP_IPV4 + +#include "lwip/ip4_frag.h" +#include "lwip/def.h" +#include "lwip/inet_chksum.h" +#include "lwip/netif.h" +#include "lwip/stats.h" +#include "lwip/icmp.h" + +#include + +#if IP_REASSEMBLY +/** + * The IP reassembly code currently has the following limitations: + * - IP header options are not supported + * - fragments must not overlap (e.g. due to different routes), + * currently, overlapping or duplicate fragments are thrown away + * if IP_REASS_CHECK_OVERLAP=1 (the default)! + * + * @todo: work with IP header options + */ + +/** Setting this to 0, you can turn off checking the fragments for overlapping + * regions. The code gets a little smaller. Only use this if you know that + * overlapping won't occur on your network! */ +#ifndef IP_REASS_CHECK_OVERLAP +#define IP_REASS_CHECK_OVERLAP 1 +#endif /* IP_REASS_CHECK_OVERLAP */ + +/** Set to 0 to prevent freeing the oldest datagram when the reassembly buffer is + * full (IP_REASS_MAX_PBUFS pbufs are enqueued). The code gets a little smaller. + * Datagrams will be freed by timeout only. Especially useful when MEMP_NUM_REASSDATA + * is set to 1, so one datagram can be reassembled at a time, only. */ +#ifndef IP_REASS_FREE_OLDEST +#define IP_REASS_FREE_OLDEST 1 +#endif /* IP_REASS_FREE_OLDEST */ + +#define IP_REASS_FLAG_LASTFRAG 0x01 + +#define IP_REASS_VALIDATE_TELEGRAM_FINISHED 1 +#define IP_REASS_VALIDATE_PBUF_QUEUED 0 +#define IP_REASS_VALIDATE_PBUF_DROPPED -1 + +/** This is a helper struct which holds the starting + * offset and the ending offset of this fragment to + * easily chain the fragments. + * It has the same packing requirements as the IP header, since it replaces + * the IP header in memory in incoming fragments (after copying it) to keep + * track of the various fragments. (-> If the IP header doesn't need packing, + * this struct doesn't need packing, too.) + */ +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct ip_reass_helper { + PACK_STRUCT_FIELD(struct pbuf *next_pbuf); + PACK_STRUCT_FIELD(u16_t start); + PACK_STRUCT_FIELD(u16_t end); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +#define IP_ADDRESSES_AND_ID_MATCH(iphdrA, iphdrB) \ + (ip4_addr_cmp(&(iphdrA)->src, &(iphdrB)->src) && \ + ip4_addr_cmp(&(iphdrA)->dest, &(iphdrB)->dest) && \ + IPH_ID(iphdrA) == IPH_ID(iphdrB)) ? 1 : 0 + +/* global variables */ +static struct ip_reassdata *reassdatagrams; +static u16_t ip_reass_pbufcount; + +/* function prototypes */ +static void ip_reass_dequeue_datagram(struct ip_reassdata *ipr, struct ip_reassdata *prev); +static int ip_reass_free_complete_datagram(struct ip_reassdata *ipr, struct ip_reassdata *prev); + +/** + * Reassembly timer base function + * for both NO_SYS == 0 and 1 (!). + * + * Should be called every 1000 msec (defined by IP_TMR_INTERVAL). + */ +void +ip_reass_tmr(void) +{ + struct ip_reassdata *r, *prev = NULL; + + r = reassdatagrams; + while (r != NULL) { + /* Decrement the timer. Once it reaches 0, + * clean up the incomplete fragment assembly */ + if (r->timer > 0) { + r->timer--; + LWIP_DEBUGF(IP_REASS_DEBUG, ("ip_reass_tmr: timer dec %"U16_F"\n", (u16_t)r->timer)); + prev = r; + r = r->next; + } else { + /* reassembly timed out */ + struct ip_reassdata *tmp; + LWIP_DEBUGF(IP_REASS_DEBUG, ("ip_reass_tmr: timer timed out\n")); + tmp = r; + /* get the next pointer before freeing */ + r = r->next; + /* free the helper struct and all enqueued pbufs */ + ip_reass_free_complete_datagram(tmp, prev); + } + } +} + +/** + * Free a datagram (struct ip_reassdata) and all its pbufs. + * Updates the total count of enqueued pbufs (ip_reass_pbufcount), + * SNMP counters and sends an ICMP time exceeded packet. + * + * @param ipr datagram to free + * @param prev the previous datagram in the linked list + * @return the number of pbufs freed + */ +static int +ip_reass_free_complete_datagram(struct ip_reassdata *ipr, struct ip_reassdata *prev) +{ + u16_t pbufs_freed = 0; + u16_t clen; + struct pbuf *p; + struct ip_reass_helper *iprh; + + LWIP_ASSERT("prev != ipr", prev != ipr); + if (prev != NULL) { + LWIP_ASSERT("prev->next == ipr", prev->next == ipr); + } + + MIB2_STATS_INC(mib2.ipreasmfails); +#if LWIP_ICMP + iprh = (struct ip_reass_helper *)ipr->p->payload; + if (iprh->start == 0) { + /* The first fragment was received, send ICMP time exceeded. */ + /* First, de-queue the first pbuf from r->p. */ + p = ipr->p; + ipr->p = iprh->next_pbuf; + /* Then, copy the original header into it. */ + SMEMCPY(p->payload, &ipr->iphdr, IP_HLEN); + icmp_time_exceeded(p, ICMP_TE_FRAG); + clen = pbuf_clen(p); + LWIP_ASSERT("pbufs_freed + clen <= 0xffff", pbufs_freed + clen <= 0xffff); + pbufs_freed = (u16_t)(pbufs_freed + clen); + pbuf_free(p); + } +#endif /* LWIP_ICMP */ + + /* First, free all received pbufs. The individual pbufs need to be released + separately as they have not yet been chained */ + p = ipr->p; + while (p != NULL) { + struct pbuf *pcur; + iprh = (struct ip_reass_helper *)p->payload; + pcur = p; + /* get the next pointer before freeing */ + p = iprh->next_pbuf; + clen = pbuf_clen(pcur); + LWIP_ASSERT("pbufs_freed + clen <= 0xffff", pbufs_freed + clen <= 0xffff); + pbufs_freed = (u16_t)(pbufs_freed + clen); + pbuf_free(pcur); + } + /* Then, unchain the struct ip_reassdata from the list and free it. */ + ip_reass_dequeue_datagram(ipr, prev); + LWIP_ASSERT("ip_reass_pbufcount >= pbufs_freed", ip_reass_pbufcount >= pbufs_freed); + ip_reass_pbufcount = (u16_t)(ip_reass_pbufcount - pbufs_freed); + + return pbufs_freed; +} + +#if IP_REASS_FREE_OLDEST +/** + * Free the oldest datagram to make room for enqueueing new fragments. + * The datagram 'fraghdr' belongs to is not freed! + * + * @param fraghdr IP header of the current fragment + * @param pbufs_needed number of pbufs needed to enqueue + * (used for freeing other datagrams if not enough space) + * @return the number of pbufs freed + */ +static int +ip_reass_remove_oldest_datagram(struct ip_hdr *fraghdr, int pbufs_needed) +{ + /* @todo Can't we simply remove the last datagram in the + * linked list behind reassdatagrams? + */ + struct ip_reassdata *r, *oldest, *prev, *oldest_prev; + int pbufs_freed = 0, pbufs_freed_current; + int other_datagrams; + + /* Free datagrams until being allowed to enqueue 'pbufs_needed' pbufs, + * but don't free the datagram that 'fraghdr' belongs to! */ + do { + oldest = NULL; + prev = NULL; + oldest_prev = NULL; + other_datagrams = 0; + r = reassdatagrams; + while (r != NULL) { + if (!IP_ADDRESSES_AND_ID_MATCH(&r->iphdr, fraghdr)) { + /* Not the same datagram as fraghdr */ + other_datagrams++; + if (oldest == NULL) { + oldest = r; + oldest_prev = prev; + } else if (r->timer <= oldest->timer) { + /* older than the previous oldest */ + oldest = r; + oldest_prev = prev; + } + } + if (r->next != NULL) { + prev = r; + } + r = r->next; + } + if (oldest != NULL) { + pbufs_freed_current = ip_reass_free_complete_datagram(oldest, oldest_prev); + pbufs_freed += pbufs_freed_current; + } + } while ((pbufs_freed < pbufs_needed) && (other_datagrams > 1)); + return pbufs_freed; +} +#endif /* IP_REASS_FREE_OLDEST */ + +/** + * Enqueues a new fragment into the fragment queue + * @param fraghdr points to the new fragments IP hdr + * @param clen number of pbufs needed to enqueue (used for freeing other datagrams if not enough space) + * @return A pointer to the queue location into which the fragment was enqueued + */ +static struct ip_reassdata * +ip_reass_enqueue_new_datagram(struct ip_hdr *fraghdr, int clen) +{ + struct ip_reassdata *ipr; +#if ! IP_REASS_FREE_OLDEST + LWIP_UNUSED_ARG(clen); +#endif + + /* No matching previous fragment found, allocate a new reassdata struct */ + ipr = (struct ip_reassdata *)memp_malloc(MEMP_REASSDATA); + if (ipr == NULL) { +#if IP_REASS_FREE_OLDEST + if (ip_reass_remove_oldest_datagram(fraghdr, clen) >= clen) { + ipr = (struct ip_reassdata *)memp_malloc(MEMP_REASSDATA); + } + if (ipr == NULL) +#endif /* IP_REASS_FREE_OLDEST */ + { + IPFRAG_STATS_INC(ip_frag.memerr); + LWIP_DEBUGF(IP_REASS_DEBUG, ("Failed to alloc reassdata struct\n")); + return NULL; + } + } + memset(ipr, 0, sizeof(struct ip_reassdata)); + ipr->timer = IP_REASS_MAXAGE; + + /* enqueue the new structure to the front of the list */ + ipr->next = reassdatagrams; + reassdatagrams = ipr; + /* copy the ip header for later tests and input */ + /* @todo: no ip options supported? */ + SMEMCPY(&(ipr->iphdr), fraghdr, IP_HLEN); + return ipr; +} + +/** + * Dequeues a datagram from the datagram queue. Doesn't deallocate the pbufs. + * @param ipr points to the queue entry to dequeue + */ +static void +ip_reass_dequeue_datagram(struct ip_reassdata *ipr, struct ip_reassdata *prev) +{ + /* dequeue the reass struct */ + if (reassdatagrams == ipr) { + /* it was the first in the list */ + reassdatagrams = ipr->next; + } else { + /* it wasn't the first, so it must have a valid 'prev' */ + LWIP_ASSERT("sanity check linked list", prev != NULL); + prev->next = ipr->next; + } + + /* now we can free the ip_reassdata struct */ + memp_free(MEMP_REASSDATA, ipr); +} + +/** + * Chain a new pbuf into the pbuf list that composes the datagram. The pbuf list + * will grow over time as new pbufs are rx. + * Also checks that the datagram passes basic continuity checks (if the last + * fragment was received at least once). + * @param ipr points to the reassembly state + * @param new_p points to the pbuf for the current fragment + * @param is_last is 1 if this pbuf has MF==0 (ipr->flags not updated yet) + * @return see IP_REASS_VALIDATE_* defines + */ +static int +ip_reass_chain_frag_into_datagram_and_validate(struct ip_reassdata *ipr, struct pbuf *new_p, int is_last) +{ + struct ip_reass_helper *iprh, *iprh_tmp, *iprh_prev = NULL; + struct pbuf *q; + u16_t offset, len; + u8_t hlen; + struct ip_hdr *fraghdr; + int valid = 1; + + /* Extract length and fragment offset from current fragment */ + fraghdr = (struct ip_hdr *)new_p->payload; + len = lwip_ntohs(IPH_LEN(fraghdr)); + hlen = IPH_HL_BYTES(fraghdr); + if (hlen > len) { + /* invalid datagram */ + return IP_REASS_VALIDATE_PBUF_DROPPED; + } + len = (u16_t)(len - hlen); + offset = IPH_OFFSET_BYTES(fraghdr); + + /* overwrite the fragment's ip header from the pbuf with our helper struct, + * and setup the embedded helper structure. */ + /* make sure the struct ip_reass_helper fits into the IP header */ + LWIP_ASSERT("sizeof(struct ip_reass_helper) <= IP_HLEN", + sizeof(struct ip_reass_helper) <= IP_HLEN); + iprh = (struct ip_reass_helper *)new_p->payload; + iprh->next_pbuf = NULL; + iprh->start = offset; + iprh->end = (u16_t)(offset + len); + if (iprh->end < offset) { + /* u16_t overflow, cannot handle this */ + return IP_REASS_VALIDATE_PBUF_DROPPED; + } + + /* Iterate through until we either get to the end of the list (append), + * or we find one with a larger offset (insert). */ + for (q = ipr->p; q != NULL;) { + iprh_tmp = (struct ip_reass_helper *)q->payload; + if (iprh->start < iprh_tmp->start) { + /* the new pbuf should be inserted before this */ + iprh->next_pbuf = q; + if (iprh_prev != NULL) { + /* not the fragment with the lowest offset */ +#if IP_REASS_CHECK_OVERLAP + if ((iprh->start < iprh_prev->end) || (iprh->end > iprh_tmp->start)) { + /* fragment overlaps with previous or following, throw away */ + return IP_REASS_VALIDATE_PBUF_DROPPED; + } +#endif /* IP_REASS_CHECK_OVERLAP */ + iprh_prev->next_pbuf = new_p; + if (iprh_prev->end != iprh->start) { + /* There is a fragment missing between the current + * and the previous fragment */ + valid = 0; + } + } else { +#if IP_REASS_CHECK_OVERLAP + if (iprh->end > iprh_tmp->start) { + /* fragment overlaps with following, throw away */ + return IP_REASS_VALIDATE_PBUF_DROPPED; + } +#endif /* IP_REASS_CHECK_OVERLAP */ + /* fragment with the lowest offset */ + ipr->p = new_p; + } + break; + } else if (iprh->start == iprh_tmp->start) { + /* received the same datagram twice: no need to keep the datagram */ + return IP_REASS_VALIDATE_PBUF_DROPPED; +#if IP_REASS_CHECK_OVERLAP + } else if (iprh->start < iprh_tmp->end) { + /* overlap: no need to keep the new datagram */ + return IP_REASS_VALIDATE_PBUF_DROPPED; +#endif /* IP_REASS_CHECK_OVERLAP */ + } else { + /* Check if the fragments received so far have no holes. */ + if (iprh_prev != NULL) { + if (iprh_prev->end != iprh_tmp->start) { + /* There is a fragment missing between the current + * and the previous fragment */ + valid = 0; + } + } + } + q = iprh_tmp->next_pbuf; + iprh_prev = iprh_tmp; + } + + /* If q is NULL, then we made it to the end of the list. Determine what to do now */ + if (q == NULL) { + if (iprh_prev != NULL) { + /* this is (for now), the fragment with the highest offset: + * chain it to the last fragment */ +#if IP_REASS_CHECK_OVERLAP + LWIP_ASSERT("check fragments don't overlap", iprh_prev->end <= iprh->start); +#endif /* IP_REASS_CHECK_OVERLAP */ + iprh_prev->next_pbuf = new_p; + if (iprh_prev->end != iprh->start) { + valid = 0; + } + } else { +#if IP_REASS_CHECK_OVERLAP + LWIP_ASSERT("no previous fragment, this must be the first fragment!", + ipr->p == NULL); +#endif /* IP_REASS_CHECK_OVERLAP */ + /* this is the first fragment we ever received for this ip datagram */ + ipr->p = new_p; + } + } + + /* At this point, the validation part begins: */ + /* If we already received the last fragment */ + if (is_last || ((ipr->flags & IP_REASS_FLAG_LASTFRAG) != 0)) { + /* and had no holes so far */ + if (valid) { + /* then check if the rest of the fragments is here */ + /* Check if the queue starts with the first datagram */ + if ((ipr->p == NULL) || (((struct ip_reass_helper *)ipr->p->payload)->start != 0)) { + valid = 0; + } else { + /* and check that there are no holes after this datagram */ + iprh_prev = iprh; + q = iprh->next_pbuf; + while (q != NULL) { + iprh = (struct ip_reass_helper *)q->payload; + if (iprh_prev->end != iprh->start) { + valid = 0; + break; + } + iprh_prev = iprh; + q = iprh->next_pbuf; + } + /* if still valid, all fragments are received + * (because to the MF==0 already arrived */ + if (valid) { + LWIP_ASSERT("sanity check", ipr->p != NULL); + LWIP_ASSERT("sanity check", + ((struct ip_reass_helper *)ipr->p->payload) != iprh); + LWIP_ASSERT("validate_datagram:next_pbuf!=NULL", + iprh->next_pbuf == NULL); + } + } + } + /* If valid is 0 here, there are some fragments missing in the middle + * (since MF == 0 has already arrived). Such datagrams simply time out if + * no more fragments are received... */ + return valid ? IP_REASS_VALIDATE_TELEGRAM_FINISHED : IP_REASS_VALIDATE_PBUF_QUEUED; + } + /* If we come here, not all fragments were received, yet! */ + return IP_REASS_VALIDATE_PBUF_QUEUED; /* not yet valid! */ +} + +/** + * Reassembles incoming IP fragments into an IP datagram. + * + * @param p points to a pbuf chain of the fragment + * @return NULL if reassembly is incomplete, ? otherwise + */ +struct pbuf * +ip4_reass(struct pbuf *p) +{ + struct pbuf *r; + struct ip_hdr *fraghdr; + struct ip_reassdata *ipr; + struct ip_reass_helper *iprh; + u16_t offset, len, clen; + u8_t hlen; + int valid; + int is_last; + + IPFRAG_STATS_INC(ip_frag.recv); + MIB2_STATS_INC(mib2.ipreasmreqds); + + fraghdr = (struct ip_hdr *)p->payload; + + if (IPH_HL_BYTES(fraghdr) != IP_HLEN) { + LWIP_DEBUGF(IP_REASS_DEBUG, ("ip4_reass: IP options currently not supported!\n")); + IPFRAG_STATS_INC(ip_frag.err); + goto nullreturn; + } + + offset = IPH_OFFSET_BYTES(fraghdr); + len = lwip_ntohs(IPH_LEN(fraghdr)); + hlen = IPH_HL_BYTES(fraghdr); + if (hlen > len) { + /* invalid datagram */ + goto nullreturn; + } + len = (u16_t)(len - hlen); + + /* Check if we are allowed to enqueue more datagrams. */ + clen = pbuf_clen(p); + if ((ip_reass_pbufcount + clen) > IP_REASS_MAX_PBUFS) { +#if IP_REASS_FREE_OLDEST + if (!ip_reass_remove_oldest_datagram(fraghdr, clen) || + ((ip_reass_pbufcount + clen) > IP_REASS_MAX_PBUFS)) +#endif /* IP_REASS_FREE_OLDEST */ + { + /* No datagram could be freed and still too many pbufs enqueued */ + LWIP_DEBUGF(IP_REASS_DEBUG, ("ip4_reass: Overflow condition: pbufct=%d, clen=%d, MAX=%d\n", + ip_reass_pbufcount, clen, IP_REASS_MAX_PBUFS)); + IPFRAG_STATS_INC(ip_frag.memerr); + /* @todo: send ICMP time exceeded here? */ + /* drop this pbuf */ + goto nullreturn; + } + } + + /* Look for the datagram the fragment belongs to in the current datagram queue, + * remembering the previous in the queue for later dequeueing. */ + for (ipr = reassdatagrams; ipr != NULL; ipr = ipr->next) { + /* Check if the incoming fragment matches the one currently present + in the reassembly buffer. If so, we proceed with copying the + fragment into the buffer. */ + if (IP_ADDRESSES_AND_ID_MATCH(&ipr->iphdr, fraghdr)) { + LWIP_DEBUGF(IP_REASS_DEBUG, ("ip4_reass: matching previous fragment ID=%"X16_F"\n", + lwip_ntohs(IPH_ID(fraghdr)))); + IPFRAG_STATS_INC(ip_frag.cachehit); + break; + } + } + + if (ipr == NULL) { + /* Enqueue a new datagram into the datagram queue */ + ipr = ip_reass_enqueue_new_datagram(fraghdr, clen); + /* Bail if unable to enqueue */ + if (ipr == NULL) { + goto nullreturn; + } + } else { + if (((lwip_ntohs(IPH_OFFSET(fraghdr)) & IP_OFFMASK) == 0) && + ((lwip_ntohs(IPH_OFFSET(&ipr->iphdr)) & IP_OFFMASK) != 0)) { + /* ipr->iphdr is not the header from the first fragment, but fraghdr is + * -> copy fraghdr into ipr->iphdr since we want to have the header + * of the first fragment (for ICMP time exceeded and later, for copying + * all options, if supported)*/ + SMEMCPY(&ipr->iphdr, fraghdr, IP_HLEN); + } + } + + /* At this point, we have either created a new entry or pointing + * to an existing one */ + + /* check for 'no more fragments', and update queue entry*/ + is_last = (IPH_OFFSET(fraghdr) & PP_NTOHS(IP_MF)) == 0; + if (is_last) { + u16_t datagram_len = (u16_t)(offset + len); + if ((datagram_len < offset) || (datagram_len > (0xFFFF - IP_HLEN))) { + /* u16_t overflow, cannot handle this */ + goto nullreturn_ipr; + } + } + /* find the right place to insert this pbuf */ + /* @todo: trim pbufs if fragments are overlapping */ + valid = ip_reass_chain_frag_into_datagram_and_validate(ipr, p, is_last); + if (valid == IP_REASS_VALIDATE_PBUF_DROPPED) { + goto nullreturn_ipr; + } + /* if we come here, the pbuf has been enqueued */ + + /* Track the current number of pbufs current 'in-flight', in order to limit + the number of fragments that may be enqueued at any one time + (overflow checked by testing against IP_REASS_MAX_PBUFS) */ + ip_reass_pbufcount = (u16_t)(ip_reass_pbufcount + clen); + if (is_last) { + u16_t datagram_len = (u16_t)(offset + len); + ipr->datagram_len = datagram_len; + ipr->flags |= IP_REASS_FLAG_LASTFRAG; + LWIP_DEBUGF(IP_REASS_DEBUG, + ("ip4_reass: last fragment seen, total len %"S16_F"\n", + ipr->datagram_len)); + } + + if (valid == IP_REASS_VALIDATE_TELEGRAM_FINISHED) { + struct ip_reassdata *ipr_prev; + /* the totally last fragment (flag more fragments = 0) was received at least + * once AND all fragments are received */ + u16_t datagram_len = (u16_t)(ipr->datagram_len + IP_HLEN); + + /* save the second pbuf before copying the header over the pointer */ + r = ((struct ip_reass_helper *)ipr->p->payload)->next_pbuf; + + /* copy the original ip header back to the first pbuf */ + fraghdr = (struct ip_hdr *)(ipr->p->payload); + SMEMCPY(fraghdr, &ipr->iphdr, IP_HLEN); + IPH_LEN_SET(fraghdr, lwip_htons(datagram_len)); + IPH_OFFSET_SET(fraghdr, 0); + IPH_CHKSUM_SET(fraghdr, 0); + /* @todo: do we need to set/calculate the correct checksum? */ +#if CHECKSUM_GEN_IP + IF__NETIF_CHECKSUM_ENABLED(ip_current_input_netif(), NETIF_CHECKSUM_GEN_IP) { + IPH_CHKSUM_SET(fraghdr, inet_chksum(fraghdr, IP_HLEN)); + } +#endif /* CHECKSUM_GEN_IP */ + + p = ipr->p; + + /* chain together the pbufs contained within the reass_data list. */ + while (r != NULL) { + iprh = (struct ip_reass_helper *)r->payload; + + /* hide the ip header for every succeeding fragment */ + pbuf_remove_header(r, IP_HLEN); + pbuf_cat(p, r); + r = iprh->next_pbuf; + } + + /* find the previous entry in the linked list */ + if (ipr == reassdatagrams) { + ipr_prev = NULL; + } else { + for (ipr_prev = reassdatagrams; ipr_prev != NULL; ipr_prev = ipr_prev->next) { + if (ipr_prev->next == ipr) { + break; + } + } + } + + /* release the sources allocate for the fragment queue entry */ + ip_reass_dequeue_datagram(ipr, ipr_prev); + + /* and adjust the number of pbufs currently queued for reassembly. */ + clen = pbuf_clen(p); + LWIP_ASSERT("ip_reass_pbufcount >= clen", ip_reass_pbufcount >= clen); + ip_reass_pbufcount = (u16_t)(ip_reass_pbufcount - clen); + + MIB2_STATS_INC(mib2.ipreasmoks); + + /* Return the pbuf chain */ + return p; + } + /* the datagram is not (yet?) reassembled completely */ + LWIP_DEBUGF(IP_REASS_DEBUG, ("ip_reass_pbufcount: %d out\n", ip_reass_pbufcount)); + return NULL; + +nullreturn_ipr: + LWIP_ASSERT("ipr != NULL", ipr != NULL); + if (ipr->p == NULL) { + /* dropped pbuf after creating a new datagram entry: remove the entry, too */ + LWIP_ASSERT("not firstalthough just enqueued", ipr == reassdatagrams); + ip_reass_dequeue_datagram(ipr, NULL); + } + +nullreturn: + LWIP_DEBUGF(IP_REASS_DEBUG, ("ip4_reass: nullreturn\n")); + IPFRAG_STATS_INC(ip_frag.drop); + pbuf_free(p); + return NULL; +} +#endif /* IP_REASSEMBLY */ + +#if IP_FRAG +#if !LWIP_NETIF_TX_SINGLE_PBUF +/** Allocate a new struct pbuf_custom_ref */ +static struct pbuf_custom_ref * +ip_frag_alloc_pbuf_custom_ref(void) +{ + return (struct pbuf_custom_ref *)memp_malloc(MEMP_FRAG_PBUF); +} + +/** Free a struct pbuf_custom_ref */ +static void +ip_frag_free_pbuf_custom_ref(struct pbuf_custom_ref *p) +{ + LWIP_ASSERT("p != NULL", p != NULL); + memp_free(MEMP_FRAG_PBUF, p); +} + +/** Free-callback function to free a 'struct pbuf_custom_ref', called by + * pbuf_free. */ +static void +ipfrag_free_pbuf_custom(struct pbuf *p) +{ + struct pbuf_custom_ref *pcr = (struct pbuf_custom_ref *)p; + LWIP_ASSERT("pcr != NULL", pcr != NULL); + LWIP_ASSERT("pcr == p", (void *)pcr == (void *)p); + if (pcr->original != NULL) { + pbuf_free(pcr->original); + } + ip_frag_free_pbuf_custom_ref(pcr); +} +#endif /* !LWIP_NETIF_TX_SINGLE_PBUF */ + +/** + * Fragment an IP datagram if too large for the netif. + * + * Chop the datagram in MTU sized chunks and send them in order + * by pointing PBUF_REFs into p. + * + * @param p ip packet to send + * @param netif the netif on which to send + * @param dest destination ip address to which to send + * + * @return ERR_OK if sent successfully, err_t otherwise + */ +err_t +ip4_frag(struct pbuf *p, struct netif *netif, const ip4_addr_t *dest) +{ + struct pbuf *rambuf; +#if !LWIP_NETIF_TX_SINGLE_PBUF + struct pbuf *newpbuf; + u16_t newpbuflen = 0; + u16_t left_to_copy; +#endif + struct ip_hdr *original_iphdr; + struct ip_hdr *iphdr; + const u16_t nfb = (u16_t)((netif->mtu - IP_HLEN) / 8); + u16_t left, fragsize; + u16_t ofo; + int last; + u16_t poff = IP_HLEN; + u16_t tmp; + int mf_set; + + original_iphdr = (struct ip_hdr *)p->payload; + iphdr = original_iphdr; + if (IPH_HL_BYTES(iphdr) != IP_HLEN) { + /* ip4_frag() does not support IP options */ + return ERR_VAL; + } + LWIP_ERROR("ip4_frag(): pbuf too short", p->len >= IP_HLEN, return ERR_VAL); + + /* Save original offset */ + tmp = lwip_ntohs(IPH_OFFSET(iphdr)); + ofo = tmp & IP_OFFMASK; + /* already fragmented? if so, the last fragment we create must have MF, too */ + mf_set = tmp & IP_MF; + + left = (u16_t)(p->tot_len - IP_HLEN); + + while (left) { + /* Fill this fragment */ + fragsize = LWIP_MIN(left, (u16_t)(nfb * 8)); + +#if LWIP_NETIF_TX_SINGLE_PBUF + rambuf = pbuf_alloc(PBUF_IP, fragsize, PBUF_RAM); + if (rambuf == NULL) { + goto memerr; + } + LWIP_ASSERT("this needs a pbuf in one piece!", + (rambuf->len == rambuf->tot_len) && (rambuf->next == NULL)); + poff += pbuf_copy_partial(p, rambuf->payload, fragsize, poff); + /* make room for the IP header */ + if (pbuf_add_header(rambuf, IP_HLEN)) { + pbuf_free(rambuf); + goto memerr; + } + /* fill in the IP header */ + SMEMCPY(rambuf->payload, original_iphdr, IP_HLEN); + iphdr = (struct ip_hdr *)rambuf->payload; +#else /* LWIP_NETIF_TX_SINGLE_PBUF */ + /* When not using a static buffer, create a chain of pbufs. + * The first will be a PBUF_RAM holding the link and IP header. + * The rest will be PBUF_REFs mirroring the pbuf chain to be fragged, + * but limited to the size of an mtu. + */ + rambuf = pbuf_alloc(PBUF_LINK, IP_HLEN, PBUF_RAM); + if (rambuf == NULL) { + goto memerr; + } + LWIP_ASSERT("this needs a pbuf in one piece!", + (rambuf->len >= (IP_HLEN))); + SMEMCPY(rambuf->payload, original_iphdr, IP_HLEN); + iphdr = (struct ip_hdr *)rambuf->payload; + + left_to_copy = fragsize; + while (left_to_copy) { + struct pbuf_custom_ref *pcr; + u16_t plen = (u16_t)(p->len - poff); + LWIP_ASSERT("p->len >= poff", p->len >= poff); + newpbuflen = LWIP_MIN(left_to_copy, plen); + /* Is this pbuf already empty? */ + if (!newpbuflen) { + poff = 0; + p = p->next; + continue; + } + pcr = ip_frag_alloc_pbuf_custom_ref(); + if (pcr == NULL) { + pbuf_free(rambuf); + goto memerr; + } + /* Mirror this pbuf, although we might not need all of it. */ + newpbuf = pbuf_alloced_custom(PBUF_RAW, newpbuflen, PBUF_REF, &pcr->pc, + (u8_t *)p->payload + poff, newpbuflen); + if (newpbuf == NULL) { + ip_frag_free_pbuf_custom_ref(pcr); + pbuf_free(rambuf); + goto memerr; + } + pbuf_ref(p); + pcr->original = p; + pcr->pc.custom_free_function = ipfrag_free_pbuf_custom; + + /* Add it to end of rambuf's chain, but using pbuf_cat, not pbuf_chain + * so that it is removed when pbuf_dechain is later called on rambuf. + */ + pbuf_cat(rambuf, newpbuf); + left_to_copy = (u16_t)(left_to_copy - newpbuflen); + if (left_to_copy) { + poff = 0; + p = p->next; + } + } + poff = (u16_t)(poff + newpbuflen); +#endif /* LWIP_NETIF_TX_SINGLE_PBUF */ + + /* Correct header */ + last = (left <= netif->mtu - IP_HLEN); + + /* Set new offset and MF flag */ + tmp = (IP_OFFMASK & (ofo)); + if (!last || mf_set) { + /* the last fragment has MF set if the input frame had it */ + tmp = tmp | IP_MF; + } + IPH_OFFSET_SET(iphdr, lwip_htons(tmp)); + IPH_LEN_SET(iphdr, lwip_htons((u16_t)(fragsize + IP_HLEN))); + IPH_CHKSUM_SET(iphdr, 0); +#if CHECKSUM_GEN_IP + IF__NETIF_CHECKSUM_ENABLED(netif, NETIF_CHECKSUM_GEN_IP) { + IPH_CHKSUM_SET(iphdr, inet_chksum(iphdr, IP_HLEN)); + } +#endif /* CHECKSUM_GEN_IP */ + + /* No need for separate header pbuf - we allowed room for it in rambuf + * when allocated. + */ + netif->output(netif, rambuf, dest); + IPFRAG_STATS_INC(ip_frag.xmit); + + /* Unfortunately we can't reuse rambuf - the hardware may still be + * using the buffer. Instead we free it (and the ensuing chain) and + * recreate it next time round the loop. If we're lucky the hardware + * will have already sent the packet, the free will really free, and + * there will be zero memory penalty. + */ + + pbuf_free(rambuf); + left = (u16_t)(left - fragsize); + ofo = (u16_t)(ofo + nfb); + } + MIB2_STATS_INC(mib2.ipfragoks); + return ERR_OK; +memerr: + MIB2_STATS_INC(mib2.ipfragfails); + return ERR_MEM; +} +#endif /* IP_FRAG */ + +#endif /* LWIP_IPV4 */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv6/dhcp6.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv6/dhcp6.c new file mode 100644 index 0000000000000000000000000000000000000000..7cf98a521977f1fefe12aa0a0b8bcb962fa104ea --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv6/dhcp6.c @@ -0,0 +1,812 @@ +/** + * @file + * + * @defgroup dhcp6 DHCPv6 + * @ingroup ip6 + * DHCPv6 client: IPv6 address autoconfiguration as per + * RFC 3315 (stateful DHCPv6) and + * RFC 3736 (stateless DHCPv6). + * + * For now, only stateless DHCPv6 is implemented! + * + * TODO: + * - enable/disable API to not always start when RA is received + * - stateful DHCPv6 (for now, only stateless DHCPv6 for DNS and NTP servers works) + * - create Client Identifier? + * - only start requests if a valid local address is available on the netif + * - only start information requests if required (not for every RA) + * + * dhcp6_enable_stateful() enables stateful DHCPv6 for a netif (stateless disabled)\n + * dhcp6_enable_stateless() enables stateless DHCPv6 for a netif (stateful disabled)\n + * dhcp6_disable() disable DHCPv6 for a netif + * + * When enabled, requests are only issued after receipt of RA with the + * corresponding bits set. + */ + +/* + * Copyright (c) 2018 Simon Goldschmidt + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Simon Goldschmidt + */ + +#include "lwip/opt.h" + +#if LWIP_IPV6 && LWIP_IPV6_DHCP6 /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/dhcp6.h" +#include "lwip/prot/dhcp6.h" +#include "lwip/def.h" +#include "lwip/udp.h" +#include "lwip/dns.h" + +#include + +#ifdef LWIP_HOOK_FILENAME +#include LWIP_HOOK_FILENAME +#endif +#ifndef LWIP_HOOK_DHCP6_APPEND_OPTIONS +#define LWIP_HOOK_DHCP6_APPEND_OPTIONS(netif, dhcp6, state, msg, msg_type, options_len_ptr, max_len) +#endif +#ifndef LWIP_HOOK_DHCP6_PARSE_OPTION +#define LWIP_HOOK_DHCP6_PARSE_OPTION(netif, dhcp6, state, msg, msg_type, option, len, pbuf, offset) do { LWIP_UNUSED_ARG(msg); } while(0) +#endif + +#if LWIP_DNS && LWIP_DHCP6_MAX_DNS_SERVERS +#if DNS_MAX_SERVERS > LWIP_DHCP6_MAX_DNS_SERVERS +#define LWIP_DHCP6_PROVIDE_DNS_SERVERS LWIP_DHCP6_MAX_DNS_SERVERS +#else +#define LWIP_DHCP6_PROVIDE_DNS_SERVERS DNS_MAX_SERVERS +#endif +#else +#define LWIP_DHCP6_PROVIDE_DNS_SERVERS 0 +#endif + + +/** Option handling: options are parsed in dhcp6_parse_reply + * and saved in an array where other functions can load them from. + * This might be moved into the struct dhcp6 (not necessarily since + * lwIP is single-threaded and the array is only used while in recv + * callback). */ +enum dhcp6_option_idx { + DHCP6_OPTION_IDX_CLI_ID = 0, + DHCP6_OPTION_IDX_SERVER_ID, +#if LWIP_DHCP6_PROVIDE_DNS_SERVERS + DHCP6_OPTION_IDX_DNS_SERVER, + DHCP6_OPTION_IDX_DOMAIN_LIST, +#endif /* LWIP_DHCP_PROVIDE_DNS_SERVERS */ +#if LWIP_DHCP6_GET_NTP_SRV + DHCP6_OPTION_IDX_NTP_SERVER, +#endif /* LWIP_DHCP_GET_NTP_SRV */ + DHCP6_OPTION_IDX_MAX +}; + +struct dhcp6_option_info { + u8_t option_given; + u16_t val_start; + u16_t val_length; +}; + +/** Holds the decoded option info, only valid while in dhcp6_recv. */ +struct dhcp6_option_info dhcp6_rx_options[DHCP6_OPTION_IDX_MAX]; + +#define dhcp6_option_given(dhcp6, idx) (dhcp6_rx_options[idx].option_given != 0) +#define dhcp6_got_option(dhcp6, idx) (dhcp6_rx_options[idx].option_given = 1) +#define dhcp6_clear_option(dhcp6, idx) (dhcp6_rx_options[idx].option_given = 0) +#define dhcp6_clear_all_options(dhcp6) (memset(dhcp6_rx_options, 0, sizeof(dhcp6_rx_options))) +#define dhcp6_get_option_start(dhcp6, idx) (dhcp6_rx_options[idx].val_start) +#define dhcp6_get_option_length(dhcp6, idx) (dhcp6_rx_options[idx].val_length) +#define dhcp6_set_option(dhcp6, idx, start, len) do { dhcp6_rx_options[idx].val_start = (start); dhcp6_rx_options[idx].val_length = (len); }while(0) + + +const ip_addr_t dhcp6_All_DHCP6_Relay_Agents_and_Servers = IPADDR6_INIT_HOST(0xFF020000, 0, 0, 0x00010002); +const ip_addr_t dhcp6_All_DHCP6_Servers = IPADDR6_INIT_HOST(0xFF020000, 0, 0, 0x00010003); + +static struct udp_pcb *dhcp6_pcb; +static u8_t dhcp6_pcb_refcount; + + +/* receive, unfold, parse and free incoming messages */ +static void dhcp6_recv(void *arg, struct udp_pcb *pcb, struct pbuf *p, const ip_addr_t *addr, u16_t port); + +/** Ensure DHCP PCB is allocated and bound */ +static err_t +dhcp6_inc_pcb_refcount(void) +{ + if (dhcp6_pcb_refcount == 0) { + LWIP_ASSERT("dhcp6_inc_pcb_refcount(): memory leak", dhcp6_pcb == NULL); + + /* allocate UDP PCB */ + dhcp6_pcb = udp_new_ip6(); + + if (dhcp6_pcb == NULL) { + return ERR_MEM; + } + + ip_set_option(dhcp6_pcb, SOF_BROADCAST); + + /* set up local and remote port for the pcb -> listen on all interfaces on all src/dest IPs */ + udp_bind(dhcp6_pcb, IP6_ADDR_ANY, DHCP6_CLIENT_PORT); + udp_recv(dhcp6_pcb, dhcp6_recv, NULL); + } + + dhcp6_pcb_refcount++; + + return ERR_OK; +} + +/** Free DHCP PCB if the last netif stops using it */ +static void +dhcp6_dec_pcb_refcount(void) +{ + LWIP_ASSERT("dhcp6_pcb_refcount(): refcount error", (dhcp6_pcb_refcount > 0)); + dhcp6_pcb_refcount--; + + if (dhcp6_pcb_refcount == 0) { + udp_remove(dhcp6_pcb); + dhcp6_pcb = NULL; + } +} + +/** + * @ingroup dhcp6 + * Set a statically allocated struct dhcp6 to work with. + * Using this prevents dhcp6_start to allocate it using mem_malloc. + * + * @param netif the netif for which to set the struct dhcp + * @param dhcp6 (uninitialised) dhcp6 struct allocated by the application + */ +void +dhcp6_set_struct(struct netif *netif, struct dhcp6 *dhcp6) +{ + LWIP_ASSERT("netif != NULL", netif != NULL); + LWIP_ASSERT("dhcp6 != NULL", dhcp6 != NULL); + LWIP_ASSERT("netif already has a struct dhcp6 set", netif_dhcp6_data(netif) == NULL); + + /* clear data structure */ + memset(dhcp6, 0, sizeof(struct dhcp6)); + /* dhcp6_set_state(&dhcp, DHCP6_STATE_OFF); */ + netif_set_client_data(netif, LWIP_NETIF_CLIENT_DATA_INDEX_DHCP6, dhcp6); +} + +/** + * @ingroup dhcp6 + * Removes a struct dhcp6 from a netif. + * + * ATTENTION: Only use this when not using dhcp6_set_struct() to allocate the + * struct dhcp6 since the memory is passed back to the heap. + * + * @param netif the netif from which to remove the struct dhcp + */ +void dhcp6_cleanup(struct netif *netif) +{ + LWIP_ASSERT("netif != NULL", netif != NULL); + + if (netif_dhcp6_data(netif) != NULL) { + mem_free(netif_dhcp6_data(netif)); + netif_set_client_data(netif, LWIP_NETIF_CLIENT_DATA_INDEX_DHCP6, NULL); + } +} + +static struct dhcp6* +dhcp6_get_struct(struct netif *netif, const char *dbg_requester) +{ + struct dhcp6 *dhcp6 = netif_dhcp6_data(netif); + if (dhcp6 == NULL) { + LWIP_DEBUGF(DHCP6_DEBUG | LWIP_DBG_TRACE, ("%s: mallocing new DHCPv6 client\n", dbg_requester)); + dhcp6 = (struct dhcp6 *)mem_malloc(sizeof(struct dhcp6)); + if (dhcp6 == NULL) { + LWIP_DEBUGF(DHCP6_DEBUG | LWIP_DBG_TRACE, ("%s: could not allocate dhcp6\n", dbg_requester)); + return NULL; + } + + /* clear data structure, this implies DHCP6_STATE_OFF */ + memset(dhcp6, 0, sizeof(struct dhcp6)); + /* store this dhcp6 client in the netif */ + netif_set_client_data(netif, LWIP_NETIF_CLIENT_DATA_INDEX_DHCP6, dhcp6); + } else { + /* already has DHCP6 client attached */ + LWIP_DEBUGF(DHCP6_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("%s: using existing DHCPv6 client\n", dbg_requester)); + } + + if (!dhcp6->pcb_allocated) { + if (dhcp6_inc_pcb_refcount() != ERR_OK) { /* ensure DHCP6 PCB is allocated */ + mem_free(dhcp6); + netif_set_client_data(netif, LWIP_NETIF_CLIENT_DATA_INDEX_DHCP6, NULL); + return NULL; + } + LWIP_DEBUGF(DHCP6_DEBUG | LWIP_DBG_TRACE, ("%s: allocated dhcp6", dbg_requester)); + dhcp6->pcb_allocated = 1; + } + return dhcp6; +} + +/* + * Set the DHCPv6 state + * If the state changed, reset the number of tries. + */ +static void +dhcp6_set_state(struct dhcp6 *dhcp6, u8_t new_state, const char *dbg_caller) +{ + LWIP_DEBUGF(DHCP6_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("DHCPv6 state: %d -> %d (%s)\n", + dhcp6->state, new_state, dbg_caller)); + if (new_state != dhcp6->state) { + dhcp6->state = new_state; + dhcp6->tries = 0; + dhcp6->request_timeout = 0; + } +} + +static int +dhcp6_stateless_enabled(struct dhcp6 *dhcp6) +{ + if ((dhcp6->state == DHCP6_STATE_STATELESS_IDLE) || + (dhcp6->state == DHCP6_STATE_REQUESTING_CONFIG)) { + return 1; + } + return 0; +} + +/*static int +dhcp6_stateful_enabled(struct dhcp6 *dhcp6) +{ + if (dhcp6->state == DHCP6_STATE_OFF) { + return 0; + } + if (dhcp6_stateless_enabled(dhcp6)) { + return 0; + } + return 1; +}*/ + +/** + * @ingroup dhcp6 + * Enable stateful DHCPv6 on this netif + * Requests are sent on receipt of an RA message with the + * ND6_RA_FLAG_MANAGED_ADDR_CONFIG flag set. + * + * A struct dhcp6 will be allocated for this netif if not + * set via @ref dhcp6_set_struct before. + * + * @todo: stateful DHCPv6 not supported, yet + */ +err_t +dhcp6_enable_stateful(struct netif *netif) +{ + LWIP_UNUSED_ARG(netif); + LWIP_DEBUGF(DHCP6_DEBUG | LWIP_DBG_TRACE, ("stateful dhcp6 not implemented yet")); + return ERR_VAL; +} + +/** + * @ingroup dhcp6 + * Enable stateless DHCPv6 on this netif + * Requests are sent on receipt of an RA message with the + * ND6_RA_FLAG_OTHER_CONFIG flag set. + * + * A struct dhcp6 will be allocated for this netif if not + * set via @ref dhcp6_set_struct before. + */ +err_t +dhcp6_enable_stateless(struct netif *netif) +{ + struct dhcp6 *dhcp6; + + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp6_enable_stateless(netif=%p) %c%c%"U16_F"\n", (void *)netif, netif->name[0], netif->name[1], (u16_t)netif->num)); + + dhcp6 = dhcp6_get_struct(netif, "dhcp6_enable_stateless()"); + if (dhcp6 == NULL) { + return ERR_MEM; + } + if (dhcp6_stateless_enabled(dhcp6)) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp6_enable_stateless(): stateless DHCPv6 already enabled")); + return ERR_OK; + } else if (dhcp6->state != DHCP6_STATE_OFF) { + /* stateful running */ + /* @todo: stop stateful once it is implemented */ + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp6_enable_stateless(): switching from stateful to stateless DHCPv6")); + } + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp6_enable_stateless(): stateless DHCPv6 enabled\n")); + dhcp6_set_state(dhcp6, DHCP6_STATE_STATELESS_IDLE, "dhcp6_enable_stateless"); + return ERR_OK; +} + +/** + * @ingroup dhcp6 + * Disable stateful or stateless DHCPv6 on this netif + * Requests are sent on receipt of an RA message with the + * ND6_RA_FLAG_OTHER_CONFIG flag set. + */ +void +dhcp6_disable(struct netif *netif) +{ + struct dhcp6 *dhcp6; + + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp6_disable(netif=%p) %c%c%"U16_F"\n", (void *)netif, netif->name[0], netif->name[1], (u16_t)netif->num)); + + dhcp6 = netif_dhcp6_data(netif); + if (dhcp6 != NULL) { + if (dhcp6->state != DHCP6_STATE_OFF) { + LWIP_DEBUGF(DHCP6_DEBUG | LWIP_DBG_TRACE, ("dhcp6_disable(): DHCPv6 disabled (old state: %s)\n", + (dhcp6_stateless_enabled(dhcp6) ? "stateless" : "stateful"))); + dhcp6_set_state(dhcp6, DHCP6_STATE_OFF, "dhcp6_disable"); + if (dhcp6->pcb_allocated != 0) { + dhcp6_dec_pcb_refcount(); /* free DHCPv6 PCB if not needed any more */ + dhcp6->pcb_allocated = 0; + } + } + } +} + +/** + * Create a DHCPv6 request, fill in common headers + * + * @param netif the netif under DHCPv6 control + * @param dhcp6 dhcp6 control struct + * @param message_type message type of the request + * @param opt_len_alloc option length to allocate + * @param options_out_len option length on exit + * @return a pbuf for the message + */ +static struct pbuf * +dhcp6_create_msg(struct netif *netif, struct dhcp6 *dhcp6, u8_t message_type, + u16_t opt_len_alloc, u16_t *options_out_len) +{ + struct pbuf *p_out; + struct dhcp6_msg *msg_out; + + LWIP_ERROR("dhcp6_create_msg: netif != NULL", (netif != NULL), return NULL;); + LWIP_ERROR("dhcp6_create_msg: dhcp6 != NULL", (dhcp6 != NULL), return NULL;); + p_out = pbuf_alloc(PBUF_TRANSPORT, sizeof(struct dhcp6_msg) + opt_len_alloc, PBUF_RAM); + if (p_out == NULL) { + LWIP_DEBUGF(DHCP6_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, + ("dhcp6_create_msg(): could not allocate pbuf\n")); + return NULL; + } + LWIP_ASSERT("dhcp6_create_msg: check that first pbuf can hold struct dhcp6_msg", + (p_out->len >= sizeof(struct dhcp6_msg) + opt_len_alloc)); + + /* @todo: limit new xid for certain message types? */ + /* reuse transaction identifier in retransmissions */ + if (dhcp6->tries == 0) { + dhcp6->xid = LWIP_RAND() & 0xFFFFFF; + } + + LWIP_DEBUGF(DHCP6_DEBUG | LWIP_DBG_TRACE, + ("transaction id xid(%"X32_F")\n", dhcp6->xid)); + + msg_out = (struct dhcp6_msg *)p_out->payload; + memset(msg_out, 0, sizeof(struct dhcp6_msg) + opt_len_alloc); + + msg_out->msgtype = message_type; + msg_out->transaction_id[0] = (u8_t)(dhcp6->xid >> 16); + msg_out->transaction_id[1] = (u8_t)(dhcp6->xid >> 8); + msg_out->transaction_id[2] = (u8_t)dhcp6->xid; + *options_out_len = 0; + return p_out; +} + +static u16_t +dhcp6_option_short(u16_t options_out_len, u8_t *options, u16_t value) +{ + options[options_out_len++] = (u8_t)((value & 0xff00U) >> 8); + options[options_out_len++] = (u8_t) (value & 0x00ffU); + return options_out_len; +} + +static u16_t +dhcp6_option_optionrequest(u16_t options_out_len, u8_t *options, const u16_t *req_options, + u16_t num_req_options, u16_t max_len) +{ + size_t i; + u16_t ret; + + LWIP_ASSERT("dhcp6_option_optionrequest: options_out_len + sizeof(struct dhcp6_msg) + addlen <= max_len", + sizeof(struct dhcp6_msg) + options_out_len + 4U + (2U * num_req_options) <= max_len); + LWIP_UNUSED_ARG(max_len); + + ret = dhcp6_option_short(options_out_len, options, DHCP6_OPTION_ORO); + ret = dhcp6_option_short(ret, options, 2 * num_req_options); + for (i = 0; i < num_req_options; i++) { + ret = dhcp6_option_short(ret, options, req_options[i]); + } + return ret; +} + +/* All options are added, shrink the pbuf to the required size */ +static void +dhcp6_msg_finalize(u16_t options_out_len, struct pbuf *p_out) +{ + /* shrink the pbuf to the actual content length */ + pbuf_realloc(p_out, (u16_t)(sizeof(struct dhcp6_msg) + options_out_len)); +} + + +#if LWIP_IPV6_DHCP6_STATELESS +static void +dhcp6_information_request(struct netif *netif, struct dhcp6 *dhcp6) +{ + const u16_t requested_options[] = {DHCP6_OPTION_DNS_SERVERS, DHCP6_OPTION_DOMAIN_LIST, DHCP6_OPTION_SNTP_SERVERS}; + u16_t msecs; + struct pbuf *p_out; + u16_t options_out_len; + LWIP_DEBUGF(DHCP6_DEBUG | LWIP_DBG_TRACE, ("dhcp6_information_request()\n")); + /* create and initialize the DHCP message header */ + p_out = dhcp6_create_msg(netif, dhcp6, DHCP6_INFOREQUEST, 4 + sizeof(requested_options), &options_out_len); + if (p_out != NULL) { + err_t err; + struct dhcp6_msg *msg_out = (struct dhcp6_msg *)p_out->payload; + u8_t *options = (u8_t *)(msg_out + 1); + LWIP_DEBUGF(DHCP6_DEBUG | LWIP_DBG_TRACE, ("dhcp6_information_request: making request\n")); + + options_out_len = dhcp6_option_optionrequest(options_out_len, options, requested_options, + LWIP_ARRAYSIZE(requested_options), p_out->len); + LWIP_HOOK_DHCP6_APPEND_OPTIONS(netif, dhcp6, DHCP6_STATE_REQUESTING_CONFIG, msg_out, + DHCP6_INFOREQUEST, options_out_len, p_out->len); + dhcp6_msg_finalize(options_out_len, p_out); + + err = udp_sendto_if(dhcp6_pcb, p_out, &dhcp6_All_DHCP6_Relay_Agents_and_Servers, DHCP6_SERVER_PORT, netif); + pbuf_free(p_out); + LWIP_DEBUGF(DHCP6_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp6_information_request: INFOREQUESTING -> %d\n", (int)err)); + LWIP_UNUSED_ARG(err); + } else { + LWIP_DEBUGF(DHCP6_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp6_information_request: could not allocate DHCP6 request\n")); + } + dhcp6_set_state(dhcp6, DHCP6_STATE_REQUESTING_CONFIG, "dhcp6_information_request"); + if (dhcp6->tries < 255) { + dhcp6->tries++; + } + msecs = (u16_t)((dhcp6->tries < 6 ? 1 << dhcp6->tries : 60) * 1000); + dhcp6->request_timeout = (u16_t)((msecs + DHCP6_TIMER_MSECS - 1) / DHCP6_TIMER_MSECS); + LWIP_DEBUGF(DHCP6_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp6_information_request(): set request timeout %"U16_F" msecs\n", msecs)); +} + +static err_t +dhcp6_request_config(struct netif *netif, struct dhcp6 *dhcp6) +{ + /* stateless mode enabled and no request running? */ + if (dhcp6->state == DHCP6_STATE_STATELESS_IDLE) { + /* send Information-request and wait for answer; setup receive timeout */ + dhcp6_information_request(netif, dhcp6); + } + + return ERR_OK; +} + +static void +dhcp6_abort_config_request(struct dhcp6 *dhcp6) +{ + if (dhcp6->state == DHCP6_STATE_REQUESTING_CONFIG) { + /* abort running request */ + dhcp6_set_state(dhcp6, DHCP6_STATE_STATELESS_IDLE, "dhcp6_abort_config_request"); + } +} + +/* Handle a REPLY to INFOREQUEST + * This parses DNS and NTP server addresses from the reply. + */ +static void +dhcp6_handle_config_reply(struct netif *netif, struct pbuf *p_msg_in) +{ + struct dhcp6 *dhcp6 = netif_dhcp6_data(netif); + + LWIP_UNUSED_ARG(dhcp6); + LWIP_UNUSED_ARG(p_msg_in); + +#if LWIP_DHCP6_PROVIDE_DNS_SERVERS + if (dhcp6_option_given(dhcp6, DHCP6_OPTION_IDX_DNS_SERVER)) { + ip_addr_t dns_addr; + ip6_addr_t *dns_addr6; + u16_t op_start = dhcp6_get_option_start(dhcp6, DHCP6_OPTION_IDX_DNS_SERVER); + u16_t op_len = dhcp6_get_option_length(dhcp6, DHCP6_OPTION_IDX_DNS_SERVER); + u16_t idx; + u8_t n; + + memset(&dns_addr, 0, sizeof(dns_addr)); + dns_addr6 = ip_2_ip6(&dns_addr); + for (n = 0, idx = op_start; (idx < op_start + op_len) && (n < LWIP_DHCP6_PROVIDE_DNS_SERVERS); + n++, idx += sizeof(struct ip6_addr_packed)) { + u16_t copied = pbuf_copy_partial(p_msg_in, dns_addr6, sizeof(struct ip6_addr_packed), idx); + if (copied != sizeof(struct ip6_addr_packed)) { + /* pbuf length mismatch */ + return; + } + ip6_addr_assign_zone(dns_addr6, IP6_UNKNOWN, netif); + /* @todo: do we need a different offset than DHCP(v4)? */ + dns_setserver(n, &dns_addr); + } + } + /* @ todo: parse and set Domain Search List */ +#endif /* LWIP_DHCP6_PROVIDE_DNS_SERVERS */ + +#if LWIP_DHCP6_GET_NTP_SRV + if (dhcp6_option_given(dhcp6, DHCP6_OPTION_IDX_NTP_SERVER)) { + ip_addr_t ntp_server_addrs[LWIP_DHCP6_MAX_NTP_SERVERS]; + u16_t op_start = dhcp6_get_option_start(dhcp6, DHCP6_OPTION_IDX_NTP_SERVER); + u16_t op_len = dhcp6_get_option_length(dhcp6, DHCP6_OPTION_IDX_NTP_SERVER); + u16_t idx; + u8_t n; + + for (n = 0, idx = op_start; (idx < op_start + op_len) && (n < LWIP_DHCP6_MAX_NTP_SERVERS); + n++, idx += sizeof(struct ip6_addr_packed)) { + u16_t copied; + ip6_addr_t *ntp_addr6 = ip_2_ip6(&ntp_server_addrs[n]); + ip_addr_set_zero_ip6(&ntp_server_addrs[n]); + copied = pbuf_copy_partial(p_msg_in, ntp_addr6, sizeof(struct ip6_addr_packed), idx); + if (copied != sizeof(struct ip6_addr_packed)) { + /* pbuf length mismatch */ + return; + } + ip6_addr_assign_zone(ntp_addr6, IP6_UNKNOWN, netif); + } + dhcp6_set_ntp_servers(n, ntp_server_addrs); + } +#endif /* LWIP_DHCP6_GET_NTP_SRV */ +} +#endif /* LWIP_IPV6_DHCP6_STATELESS */ + +/** This function is called from nd6 module when an RA messsage is received + * It triggers DHCPv6 requests (if enabled). + */ +void +dhcp6_nd6_ra_trigger(struct netif *netif, u8_t managed_addr_config, u8_t other_config) +{ + struct dhcp6 *dhcp6; + + LWIP_ASSERT("netif != NULL", netif != NULL); + dhcp6 = netif_dhcp6_data(netif); + + LWIP_UNUSED_ARG(managed_addr_config); + LWIP_UNUSED_ARG(other_config); + LWIP_UNUSED_ARG(dhcp6); + +#if LWIP_IPV6_DHCP6_STATELESS + if (dhcp6 != NULL) { + if (dhcp6_stateless_enabled(dhcp6)) { + if (other_config) { + dhcp6_request_config(netif, dhcp6); + } else { + dhcp6_abort_config_request(dhcp6); + } + } + } +#endif /* LWIP_IPV6_DHCP6_STATELESS */ +} + +/** + * Parse the DHCPv6 message and extract the DHCPv6 options. + * + * Extract the DHCPv6 options (offset + length) so that we can later easily + * check for them or extract the contents. + */ +static err_t +dhcp6_parse_reply(struct pbuf *p, struct dhcp6 *dhcp6) +{ + u16_t offset; + u16_t offset_max; + u16_t options_idx; + struct dhcp6_msg *msg_in; + + LWIP_UNUSED_ARG(dhcp6); + + /* clear received options */ + dhcp6_clear_all_options(dhcp6); + msg_in = (struct dhcp6_msg *)p->payload; + + /* parse options */ + + options_idx = sizeof(struct dhcp6_msg); + /* parse options to the end of the received packet */ + offset_max = p->tot_len; + + offset = options_idx; + /* at least 4 byte to read? */ + while ((offset + 4 <= offset_max)) { + u8_t op_len_buf[4]; + u8_t *op_len; + u16_t op; + u16_t len; + u16_t val_offset = (u16_t)(offset + 4); + if (val_offset < offset) { + /* overflow */ + return ERR_BUF; + } + /* copy option + length, might be split accross pbufs */ + op_len = (u8_t *)pbuf_get_contiguous(p, op_len_buf, 4, 4, offset); + if (op_len == NULL) { + /* failed to get option and length */ + return ERR_VAL; + } + op = (op_len[0] << 8) | op_len[1]; + len = (op_len[2] << 8) | op_len[3]; + offset = val_offset + len; + if (offset < val_offset) { + /* overflow */ + return ERR_BUF; + } + + switch (op) { + case (DHCP6_OPTION_CLIENTID): + dhcp6_got_option(dhcp6, DHCP6_OPTION_IDX_CLI_ID); + dhcp6_set_option(dhcp6, DHCP6_OPTION_IDX_CLI_ID, val_offset, len); + break; + case (DHCP6_OPTION_SERVERID): + dhcp6_got_option(dhcp6, DHCP6_OPTION_IDX_SERVER_ID); + dhcp6_set_option(dhcp6, DHCP6_OPTION_IDX_SERVER_ID, val_offset, len); + break; +#if LWIP_DHCP6_PROVIDE_DNS_SERVERS + case (DHCP6_OPTION_DNS_SERVERS): + dhcp6_got_option(dhcp6, DHCP6_OPTION_IDX_DNS_SERVER); + dhcp6_set_option(dhcp6, DHCP6_OPTION_IDX_DNS_SERVER, val_offset, len); + break; + case (DHCP6_OPTION_DOMAIN_LIST): + dhcp6_got_option(dhcp6, DHCP6_OPTION_IDX_DOMAIN_LIST); + dhcp6_set_option(dhcp6, DHCP6_OPTION_IDX_DOMAIN_LIST, val_offset, len); + break; +#endif /* LWIP_DHCP6_PROVIDE_DNS_SERVERS */ +#if LWIP_DHCP6_GET_NTP_SRV + case (DHCP6_OPTION_SNTP_SERVERS): + dhcp6_got_option(dhcp6, DHCP6_OPTION_IDX_NTP_SERVER); + dhcp6_set_option(dhcp6, DHCP6_OPTION_IDX_NTP_SERVER, val_offset, len); + break; +#endif /* LWIP_DHCP6_GET_NTP_SRV*/ + default: + LWIP_DEBUGF(DHCP6_DEBUG, ("skipping option %"U16_F" in options\n", op)); + LWIP_HOOK_DHCP6_PARSE_OPTION(ip_current_netif(), dhcp6, dhcp6->state, msg_in, + msg_in->msgtype, op, len, q, val_offset); + break; + } + } + return ERR_OK; +} + +static void +dhcp6_recv(void *arg, struct udp_pcb *pcb, struct pbuf *p, const ip_addr_t *addr, u16_t port) +{ + struct netif *netif = ip_current_input_netif(); + struct dhcp6 *dhcp6 = netif_dhcp6_data(netif); + struct dhcp6_msg *reply_msg = (struct dhcp6_msg *)p->payload; + u8_t msg_type; + u32_t xid; + + LWIP_UNUSED_ARG(arg); + + /* Caught DHCPv6 message from netif that does not have DHCPv6 enabled? -> not interested */ + if ((dhcp6 == NULL) || (dhcp6->pcb_allocated == 0)) { + goto free_pbuf_and_return; + } + + LWIP_ERROR("invalid server address type", IP_IS_V6(addr), goto free_pbuf_and_return;); + + LWIP_DEBUGF(DHCP6_DEBUG | LWIP_DBG_TRACE, ("dhcp6_recv(pbuf = %p) from DHCPv6 server %s port %"U16_F"\n", (void *)p, + ipaddr_ntoa(addr), port)); + LWIP_DEBUGF(DHCP6_DEBUG | LWIP_DBG_TRACE, ("pbuf->len = %"U16_F"\n", p->len)); + LWIP_DEBUGF(DHCP6_DEBUG | LWIP_DBG_TRACE, ("pbuf->tot_len = %"U16_F"\n", p->tot_len)); + /* prevent warnings about unused arguments */ + LWIP_UNUSED_ARG(pcb); + LWIP_UNUSED_ARG(addr); + LWIP_UNUSED_ARG(port); + + if (p->len < sizeof(struct dhcp6_msg)) { + LWIP_DEBUGF(DHCP6_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, ("DHCPv6 reply message or pbuf too short\n")); + goto free_pbuf_and_return; + } + + /* match transaction ID against what we expected */ + xid = reply_msg->transaction_id[0] << 16; + xid |= reply_msg->transaction_id[1] << 8; + xid |= reply_msg->transaction_id[2]; + if (xid != dhcp6->xid) { + LWIP_DEBUGF(DHCP6_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, + ("transaction id mismatch reply_msg->xid(%"X32_F")!= dhcp6->xid(%"X32_F")\n", xid, dhcp6->xid)); + goto free_pbuf_and_return; + } + /* option fields could be unfold? */ + if (dhcp6_parse_reply(p, dhcp6) != ERR_OK) { + LWIP_DEBUGF(DHCP6_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, + ("problem unfolding DHCPv6 message - too short on memory?\n")); + goto free_pbuf_and_return; + } + + /* read DHCP message type */ + msg_type = reply_msg->msgtype; + /* message type is DHCP6 REPLY? */ + if (msg_type == DHCP6_REPLY) { + LWIP_DEBUGF(DHCP6_DEBUG | LWIP_DBG_TRACE, ("DHCP6_REPLY received\n")); +#if LWIP_IPV6_DHCP6_STATELESS + /* in info-requesting state? */ + if (dhcp6->state == DHCP6_STATE_REQUESTING_CONFIG) { + dhcp6_set_state(dhcp6, DHCP6_STATE_STATELESS_IDLE, "dhcp6_recv"); + dhcp6_handle_config_reply(netif, p); + } else +#endif /* LWIP_IPV6_DHCP6_STATELESS */ + { + /* @todo: handle reply in other states? */ + } + } else { + /* @todo: handle other message types */ + } + +free_pbuf_and_return: + pbuf_free(p); +} + +/** + * A DHCPv6 request has timed out. + * + * The timer that was started with the DHCPv6 request has + * timed out, indicating no response was received in time. + */ +static void +dhcp6_timeout(struct netif *netif, struct dhcp6 *dhcp6) +{ + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp6_timeout()\n")); + + LWIP_UNUSED_ARG(netif); + LWIP_UNUSED_ARG(dhcp6); + +#if LWIP_IPV6_DHCP6_STATELESS + /* back-off period has passed, or server selection timed out */ + if (dhcp6->state == DHCP6_STATE_REQUESTING_CONFIG) { + LWIP_DEBUGF(DHCP6_DEBUG | LWIP_DBG_TRACE, ("dhcp6_timeout(): retrying information request\n")); + dhcp6_information_request(netif, dhcp6); + } +#endif /* LWIP_IPV6_DHCP6_STATELESS */ +} + +/** + * DHCPv6 timeout handling (this function must be called every 500ms, + * see @ref DHCP6_TIMER_MSECS). + * + * A DHCPv6 server is expected to respond within a short period of time. + * This timer checks whether an outstanding DHCPv6 request is timed out. + */ +void +dhcp6_tmr(void) +{ + struct netif *netif; + /* loop through netif's */ + NETIF_FOREACH(netif) { + struct dhcp6 *dhcp6 = netif_dhcp6_data(netif); + /* only act on DHCPv6 configured interfaces */ + if (dhcp6 != NULL) { + /* timer is active (non zero), and is about to trigger now */ + if (dhcp6->request_timeout > 1) { + dhcp6->request_timeout--; + } else if (dhcp6->request_timeout == 1) { + dhcp6->request_timeout--; + /* { dhcp6->request_timeout == 0 } */ + LWIP_DEBUGF(DHCP6_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp6_tmr(): request timeout\n")); + /* this client's request timeout triggered */ + dhcp6_timeout(netif, dhcp6); + } + } + } +} + +#endif /* LWIP_IPV6 && LWIP_IPV6_DHCP6 */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv6/ethip6.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv6/ethip6.c new file mode 100644 index 0000000000000000000000000000000000000000..fec8b28a9ddd934a9d28c0756962a35fd37ad2bf --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv6/ethip6.c @@ -0,0 +1,123 @@ +/** + * @file + * + * Ethernet output for IPv6. Uses ND tables for link-layer addressing. + */ + +/* + * Copyright (c) 2010 Inico Technologies Ltd. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Ivan Delamer + * + * + * Please coordinate changes and requests with Ivan Delamer + * + */ + +#include "lwip/opt.h" + +#if LWIP_IPV6 && LWIP_ETHERNET + +#include "lwip/ethip6.h" +#include "lwip/nd6.h" +#include "lwip/pbuf.h" +#include "lwip/ip6.h" +#include "lwip/ip6_addr.h" +#include "lwip/inet_chksum.h" +#include "lwip/netif.h" +#include "lwip/icmp6.h" +#include "lwip/prot/ethernet.h" +#include "netif/ethernet.h" + +#include + +/** + * Resolve and fill-in Ethernet address header for outgoing IPv6 packet. + * + * For IPv6 multicast, corresponding Ethernet addresses + * are selected and the packet is transmitted on the link. + * + * For unicast addresses, ask the ND6 module what to do. It will either let us + * send the the packet right away, or queue the packet for later itself, unless + * an error occurs. + * + * @todo anycast addresses + * + * @param netif The lwIP network interface which the IP packet will be sent on. + * @param q The pbuf(s) containing the IP packet to be sent. + * @param ip6addr The IP address of the packet destination. + * + * @return + * - ERR_OK or the return value of @ref nd6_get_next_hop_addr_or_queue. + */ +err_t +ethip6_output(struct netif *netif, struct pbuf *q, const ip6_addr_t *ip6addr) +{ + struct eth_addr dest; + const u8_t *hwaddr; + err_t result; + + LWIP_ASSERT_CORE_LOCKED(); + + /* The destination IP address must be properly zoned from here on down. */ + IP6_ADDR_ZONECHECK_NETIF(ip6addr, netif); + + /* multicast destination IP address? */ + if (ip6_addr_ismulticast(ip6addr)) { + /* Hash IP multicast address to MAC address.*/ + dest.addr[0] = 0x33; + dest.addr[1] = 0x33; + dest.addr[2] = ((const u8_t *)(&(ip6addr->addr[3])))[0]; + dest.addr[3] = ((const u8_t *)(&(ip6addr->addr[3])))[1]; + dest.addr[4] = ((const u8_t *)(&(ip6addr->addr[3])))[2]; + dest.addr[5] = ((const u8_t *)(&(ip6addr->addr[3])))[3]; + + /* Send out. */ + return ethernet_output(netif, q, (const struct eth_addr*)(netif->hwaddr), &dest, ETHTYPE_IPV6); + } + + /* We have a unicast destination IP address */ + /* @todo anycast? */ + + /* Ask ND6 what to do with the packet. */ + result = nd6_get_next_hop_addr_or_queue(netif, q, ip6addr, &hwaddr); + if (result != ERR_OK) { + return result; + } + + /* If no hardware address is returned, nd6 has queued the packet for later. */ + if (hwaddr == NULL) { + return ERR_OK; + } + + /* Send out the packet using the returned hardware address. */ + SMEMCPY(dest.addr, hwaddr, 6); + return ethernet_output(netif, q, (const struct eth_addr*)(netif->hwaddr), &dest, ETHTYPE_IPV6); +} + +#endif /* LWIP_IPV6 && LWIP_ETHERNET */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv6/icmp6.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv6/icmp6.c new file mode 100644 index 0000000000000000000000000000000000000000..167738a051be16808bdab00b5ad4b2bcdd833ab7 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv6/icmp6.c @@ -0,0 +1,425 @@ +/** + * @file + * + * IPv6 version of ICMP, as per RFC 4443. + */ + +/* + * Copyright (c) 2010 Inico Technologies Ltd. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Ivan Delamer + * + * + * Please coordinate changes and requests with Ivan Delamer + * + */ + +#include "lwip/opt.h" + +#if LWIP_ICMP6 && LWIP_IPV6 /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/icmp6.h" +#include "lwip/prot/icmp6.h" +#include "lwip/ip6.h" +#include "lwip/ip6_addr.h" +#include "lwip/inet_chksum.h" +#include "lwip/pbuf.h" +#include "lwip/netif.h" +#include "lwip/nd6.h" +#include "lwip/mld6.h" +#include "lwip/ip.h" +#include "lwip/stats.h" + +#include + +#if LWIP_ICMP6_DATASIZE == 0 +#undef LWIP_ICMP6_DATASIZE +#define LWIP_ICMP6_DATASIZE 8 +#endif + +/* Forward declarations */ +static void icmp6_send_response(struct pbuf *p, u8_t code, u32_t data, u8_t type); +static void icmp6_send_response_with_addrs(struct pbuf *p, u8_t code, u32_t data, + u8_t type, const ip6_addr_t *src_addr, const ip6_addr_t *dest_addr); +static void icmp6_send_response_with_addrs_and_netif(struct pbuf *p, u8_t code, u32_t data, + u8_t type, const ip6_addr_t *src_addr, const ip6_addr_t *dest_addr, struct netif *netif); + + +/** + * Process an input ICMPv6 message. Called by ip6_input. + * + * Will generate a reply for echo requests. Other messages are forwarded + * to nd6_input, or mld6_input. + * + * @param p the mld packet, p->payload pointing to the icmpv6 header + * @param inp the netif on which this packet was received + */ +void +icmp6_input(struct pbuf *p, struct netif *inp) +{ + struct icmp6_hdr *icmp6hdr; + struct pbuf *r; + const ip6_addr_t *reply_src; + + ICMP6_STATS_INC(icmp6.recv); + + /* Check that ICMPv6 header fits in payload */ + if (p->len < sizeof(struct icmp6_hdr)) { + /* drop short packets */ + pbuf_free(p); + ICMP6_STATS_INC(icmp6.lenerr); + ICMP6_STATS_INC(icmp6.drop); + return; + } + + icmp6hdr = (struct icmp6_hdr *)p->payload; + +#if CHECKSUM_CHECK_ICMP6 + IF__NETIF_CHECKSUM_ENABLED(inp, NETIF_CHECKSUM_CHECK_ICMP6) { + if (ip6_chksum_pseudo(p, IP6_NEXTH_ICMP6, p->tot_len, ip6_current_src_addr(), + ip6_current_dest_addr()) != 0) { + /* Checksum failed */ + pbuf_free(p); + ICMP6_STATS_INC(icmp6.chkerr); + ICMP6_STATS_INC(icmp6.drop); + return; + } + } +#endif /* CHECKSUM_CHECK_ICMP6 */ + + switch (icmp6hdr->type) { + case ICMP6_TYPE_NA: /* Neighbor advertisement */ + case ICMP6_TYPE_NS: /* Neighbor solicitation */ + case ICMP6_TYPE_RA: /* Router advertisement */ + case ICMP6_TYPE_RD: /* Redirect */ + case ICMP6_TYPE_PTB: /* Packet too big */ + nd6_input(p, inp); + return; + case ICMP6_TYPE_RS: +#if LWIP_IPV6_FORWARD + /* @todo implement router functionality */ +#endif + break; +#if LWIP_IPV6_MLD + case ICMP6_TYPE_MLQ: + case ICMP6_TYPE_MLR: + case ICMP6_TYPE_MLD: + mld6_input(p, inp); + return; +#endif + case ICMP6_TYPE_EREQ: +#if !LWIP_MULTICAST_PING + /* multicast destination address? */ + if (ip6_addr_ismulticast(ip6_current_dest_addr())) { + /* drop */ + pbuf_free(p); + ICMP6_STATS_INC(icmp6.drop); + return; + } +#endif /* LWIP_MULTICAST_PING */ + + /* Allocate reply. */ + r = pbuf_alloc(PBUF_IP, p->tot_len, PBUF_RAM); + if (r == NULL) { + /* drop */ + pbuf_free(p); + ICMP6_STATS_INC(icmp6.memerr); + return; + } + + /* Copy echo request. */ + if (pbuf_copy(r, p) != ERR_OK) { + /* drop */ + pbuf_free(p); + pbuf_free(r); + ICMP6_STATS_INC(icmp6.err); + return; + } + + /* Determine reply source IPv6 address. */ +#if LWIP_MULTICAST_PING + if (ip6_addr_ismulticast(ip6_current_dest_addr())) { + reply_src = ip_2_ip6(ip6_select_source_address(inp, ip6_current_src_addr())); + if (reply_src == NULL) { + /* drop */ + pbuf_free(p); + pbuf_free(r); + ICMP6_STATS_INC(icmp6.rterr); + return; + } + } + else +#endif /* LWIP_MULTICAST_PING */ + { + reply_src = ip6_current_dest_addr(); + } + + /* Set fields in reply. */ + ((struct icmp6_echo_hdr *)(r->payload))->type = ICMP6_TYPE_EREP; + ((struct icmp6_echo_hdr *)(r->payload))->chksum = 0; +#if CHECKSUM_GEN_ICMP6 + IF__NETIF_CHECKSUM_ENABLED(inp, NETIF_CHECKSUM_GEN_ICMP6) { + ((struct icmp6_echo_hdr *)(r->payload))->chksum = ip6_chksum_pseudo(r, + IP6_NEXTH_ICMP6, r->tot_len, reply_src, ip6_current_src_addr()); + } +#endif /* CHECKSUM_GEN_ICMP6 */ + + /* Send reply. */ + ICMP6_STATS_INC(icmp6.xmit); + ip6_output_if(r, reply_src, ip6_current_src_addr(), + LWIP_ICMP6_HL, 0, IP6_NEXTH_ICMP6, inp); + pbuf_free(r); + + break; + default: + ICMP6_STATS_INC(icmp6.proterr); + ICMP6_STATS_INC(icmp6.drop); + break; + } + + pbuf_free(p); +} + + +/** + * Send an icmpv6 'destination unreachable' packet. + * + * This function must be used only in direct response to a packet that is being + * received right now. Otherwise, address zones would be lost. + * + * @param p the input packet for which the 'unreachable' should be sent, + * p->payload pointing to the IPv6 header + * @param c ICMPv6 code for the unreachable type + */ +void +icmp6_dest_unreach(struct pbuf *p, enum icmp6_dur_code c) +{ + icmp6_send_response(p, c, 0, ICMP6_TYPE_DUR); +} + +/** + * Send an icmpv6 'packet too big' packet. + * + * This function must be used only in direct response to a packet that is being + * received right now. Otherwise, address zones would be lost. + * + * @param p the input packet for which the 'packet too big' should be sent, + * p->payload pointing to the IPv6 header + * @param mtu the maximum mtu that we can accept + */ +void +icmp6_packet_too_big(struct pbuf *p, u32_t mtu) +{ + icmp6_send_response(p, 0, mtu, ICMP6_TYPE_PTB); +} + +/** + * Send an icmpv6 'time exceeded' packet. + * + * This function must be used only in direct response to a packet that is being + * received right now. Otherwise, address zones would be lost. + * + * @param p the input packet for which the 'time exceeded' should be sent, + * p->payload pointing to the IPv6 header + * @param c ICMPv6 code for the time exceeded type + */ +void +icmp6_time_exceeded(struct pbuf *p, enum icmp6_te_code c) +{ + icmp6_send_response(p, c, 0, ICMP6_TYPE_TE); +} + +/** + * Send an icmpv6 'time exceeded' packet, with explicit source and destination + * addresses. + * + * This function may be used to send a response sometime after receiving the + * packet for which this response is meant. The provided source and destination + * addresses are used primarily to retain their zone information. + * + * @param p the input packet for which the 'time exceeded' should be sent, + * p->payload pointing to the IPv6 header + * @param c ICMPv6 code for the time exceeded type + * @param src_addr source address of the original packet, with zone information + * @param dest_addr destination address of the original packet, with zone + * information + */ +void +icmp6_time_exceeded_with_addrs(struct pbuf *p, enum icmp6_te_code c, + const ip6_addr_t *src_addr, const ip6_addr_t *dest_addr) +{ + icmp6_send_response_with_addrs(p, c, 0, ICMP6_TYPE_TE, src_addr, dest_addr); +} + +/** + * Send an icmpv6 'parameter problem' packet. + * + * This function must be used only in direct response to a packet that is being + * received right now. Otherwise, address zones would be lost and the calculated + * offset would be wrong (calculated against ip6_current_header()). + * + * @param p the input packet for which the 'param problem' should be sent, + * p->payload pointing to the IP header + * @param c ICMPv6 code for the param problem type + * @param pointer the pointer to the byte where the parameter is found + */ +void +icmp6_param_problem(struct pbuf *p, enum icmp6_pp_code c, const void *pointer) +{ + u32_t pointer_u32 = (u32_t)((const u8_t *)pointer - (const u8_t *)ip6_current_header()); + icmp6_send_response(p, c, pointer_u32, ICMP6_TYPE_PP); +} + +/** + * Send an ICMPv6 packet in response to an incoming packet. + * The packet is sent *to* ip_current_src_addr() on ip_current_netif(). + * + * @param p the input packet for which the response should be sent, + * p->payload pointing to the IPv6 header + * @param code Code of the ICMPv6 header + * @param data Additional 32-bit parameter in the ICMPv6 header + * @param type Type of the ICMPv6 header + */ +static void +icmp6_send_response(struct pbuf *p, u8_t code, u32_t data, u8_t type) +{ + const struct ip6_addr *reply_src, *reply_dest; + struct netif *netif = ip_current_netif(); + + LWIP_ASSERT("icmpv6 packet not a direct response", netif != NULL); + reply_dest = ip6_current_src_addr(); + + /* Select an address to use as source. */ + reply_src = ip_2_ip6(ip6_select_source_address(netif, reply_dest)); + if (reply_src == NULL) { + ICMP6_STATS_INC(icmp6.rterr); + return; + } + icmp6_send_response_with_addrs_and_netif(p, code, data, type, reply_src, reply_dest, netif); +} + +/** + * Send an ICMPv6 packet in response to an incoming packet. + * + * Call this function if the packet is NOT sent as a direct response to an + * incoming packet, but rather sometime later (e.g. for a fragment reassembly + * timeout). The caller must provide the zoned source and destination addresses + * from the original packet with the src_addr and dest_addr parameters. The + * reason for this approach is that while the addresses themselves are part of + * the original packet, their zone information is not, thus possibly resulting + * in a link-local response being sent over the wrong link. + * + * @param p the input packet for which the response should be sent, + * p->payload pointing to the IPv6 header + * @param code Code of the ICMPv6 header + * @param data Additional 32-bit parameter in the ICMPv6 header + * @param type Type of the ICMPv6 header + * @param src_addr original source address + * @param dest_addr original destination address + */ +static void +icmp6_send_response_with_addrs(struct pbuf *p, u8_t code, u32_t data, u8_t type, + const ip6_addr_t *src_addr, const ip6_addr_t *dest_addr) +{ + const struct ip6_addr *reply_src, *reply_dest; + struct netif *netif; + + /* Get the destination address and netif for this ICMP message. */ + LWIP_ASSERT("must provide both source and destination", src_addr != NULL); + LWIP_ASSERT("must provide both source and destination", dest_addr != NULL); + + /* Special case, as ip6_current_xxx is either NULL, or points + to a different packet than the one that expired. */ + IP6_ADDR_ZONECHECK(src_addr); + IP6_ADDR_ZONECHECK(dest_addr); + /* Swap source and destination for the reply. */ + reply_dest = src_addr; + reply_src = dest_addr; + netif = ip6_route(reply_src, reply_dest); + if (netif == NULL) { + ICMP6_STATS_INC(icmp6.rterr); + return; + } + icmp6_send_response_with_addrs_and_netif(p, code, data, type, reply_src, + reply_dest, netif); +} + +/** + * Send an ICMPv6 packet (with srd/dst address and netif given). + * + * @param p the input packet for which the response should be sent, + * p->payload pointing to the IPv6 header + * @param code Code of the ICMPv6 header + * @param data Additional 32-bit parameter in the ICMPv6 header + * @param type Type of the ICMPv6 header + * @param reply_src source address of the packet to send + * @param reply_dest destination address of the packet to send + * @param netif netif to send the packet + */ +static void +icmp6_send_response_with_addrs_and_netif(struct pbuf *p, u8_t code, u32_t data, u8_t type, + const ip6_addr_t *reply_src, const ip6_addr_t *reply_dest, struct netif *netif) +{ + struct pbuf *q; + struct icmp6_hdr *icmp6hdr; + + /* ICMPv6 header + IPv6 header + data */ + q = pbuf_alloc(PBUF_IP, sizeof(struct icmp6_hdr) + IP6_HLEN + LWIP_ICMP6_DATASIZE, + PBUF_RAM); + if (q == NULL) { + LWIP_DEBUGF(ICMP_DEBUG, ("icmp_time_exceeded: failed to allocate pbuf for ICMPv6 packet.\n")); + ICMP6_STATS_INC(icmp6.memerr); + return; + } + LWIP_ASSERT("check that first pbuf can hold icmp 6message", + (q->len >= (sizeof(struct icmp6_hdr) + IP6_HLEN + LWIP_ICMP6_DATASIZE))); + + icmp6hdr = (struct icmp6_hdr *)q->payload; + icmp6hdr->type = type; + icmp6hdr->code = code; + icmp6hdr->data = lwip_htonl(data); + + /* copy fields from original packet */ + SMEMCPY((u8_t *)q->payload + sizeof(struct icmp6_hdr), (u8_t *)p->payload, + IP6_HLEN + LWIP_ICMP6_DATASIZE); + + /* calculate checksum */ + icmp6hdr->chksum = 0; +#if CHECKSUM_GEN_ICMP6 + IF__NETIF_CHECKSUM_ENABLED(netif, NETIF_CHECKSUM_GEN_ICMP6) { + icmp6hdr->chksum = ip6_chksum_pseudo(q, IP6_NEXTH_ICMP6, q->tot_len, + reply_src, reply_dest); + } +#endif /* CHECKSUM_GEN_ICMP6 */ + + ICMP6_STATS_INC(icmp6.xmit); + ip6_output_if(q, reply_src, reply_dest, LWIP_ICMP6_HL, 0, IP6_NEXTH_ICMP6, netif); + pbuf_free(q); +} + +#endif /* LWIP_ICMP6 && LWIP_IPV6 */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv6/inet6.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv6/inet6.c new file mode 100644 index 0000000000000000000000000000000000000000..d9a992c22ae5d7f51af5cf72b0a7286551a45b85 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv6/inet6.c @@ -0,0 +1,53 @@ +/** + * @file + * + * INET v6 addresses. + */ + +/* + * Copyright (c) 2010 Inico Technologies Ltd. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Ivan Delamer + * + * + * Please coordinate changes and requests with Ivan Delamer + * + */ + +#include "lwip/opt.h" + +#if LWIP_IPV6 && LWIP_SOCKET /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/def.h" +#include "lwip/inet.h" + +/** This variable is initialized by the system to contain the wildcard IPv6 address. + */ +const struct in6_addr in6addr_any = IN6ADDR_ANY_INIT; + +#endif /* LWIP_IPV6 */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv6/ip6.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv6/ip6.c new file mode 100644 index 0000000000000000000000000000000000000000..eda11dc88215fa8a0fa25de9479caa84850214cf --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv6/ip6.c @@ -0,0 +1,1492 @@ +/** + * @file + * + * IPv6 layer. + */ + +/* + * Copyright (c) 2010 Inico Technologies Ltd. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Ivan Delamer + * + * + * Please coordinate changes and requests with Ivan Delamer + * + */ + +#include "lwip/opt.h" + +#if LWIP_IPV6 /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/def.h" +#include "lwip/mem.h" +#include "lwip/netif.h" +#include "lwip/ip.h" +#include "lwip/ip6.h" +#include "lwip/ip6_addr.h" +#include "lwip/ip6_frag.h" +#include "lwip/icmp6.h" +#include "lwip/priv/raw_priv.h" +#include "lwip/udp.h" +#include "lwip/priv/tcp_priv.h" +#include "lwip/dhcp6.h" +#include "lwip/nd6.h" +#include "lwip/mld6.h" +#include "lwip/debug.h" +#include "lwip/stats.h" + +#ifdef LWIP_HOOK_FILENAME +#include LWIP_HOOK_FILENAME +#endif + +/** + * Finds the appropriate network interface for a given IPv6 address. It tries to select + * a netif following a sequence of heuristics: + * 1) if there is only 1 netif, return it + * 2) if the destination is a zoned address, match its zone to a netif + * 3) if the either the source or destination address is a scoped address, + * match the source address's zone (if set) or address (if not) to a netif + * 4) tries to match the destination subnet to a configured address + * 5) tries to find a router-announced route + * 6) tries to match the (unscoped) source address to the netif + * 7) returns the default netif, if configured + * + * Note that each of the two given addresses may or may not be properly zoned. + * + * @param src the source IPv6 address, if known + * @param dest the destination IPv6 address for which to find the route + * @return the netif on which to send to reach dest + */ +struct netif * +ip6_route(const ip6_addr_t *src, const ip6_addr_t *dest) +{ +#if LWIP_SINGLE_NETIF + LWIP_UNUSED_ARG(src); + LWIP_UNUSED_ARG(dest); +#else /* LWIP_SINGLE_NETIF */ + struct netif *netif; + s8_t i; + + LWIP_ASSERT_CORE_LOCKED(); + + /* If single netif configuration, fast return. */ + if ((netif_list != NULL) && (netif_list->next == NULL)) { + if (!netif_is_up(netif_list) || !netif_is_link_up(netif_list) || + (ip6_addr_has_zone(dest) && !ip6_addr_test_zone(dest, netif_list))) { + return NULL; + } + return netif_list; + } + +#if LWIP_IPV6_SCOPES + /* Special processing for zoned destination addresses. This includes link- + * local unicast addresses and interface/link-local multicast addresses. Use + * the zone to find a matching netif. If the address is not zoned, then there + * is technically no "wrong" netif to choose, and we leave routing to other + * rules; in most cases this should be the scoped-source rule below. */ + if (ip6_addr_has_zone(dest)) { + IP6_ADDR_ZONECHECK(dest); + /* Find a netif based on the zone. For custom mappings, one zone may map + * to multiple netifs, so find one that can actually send a packet. */ + NETIF_FOREACH(netif) { + if (ip6_addr_test_zone(dest, netif) && + netif_is_up(netif) && netif_is_link_up(netif)) { + return netif; + } + } + /* No matching netif found. Do no try to route to a different netif, + * as that would be a zone violation, resulting in any packets sent to + * that netif being dropped on output. */ + return NULL; + } +#endif /* LWIP_IPV6_SCOPES */ + + /* Special processing for scoped source and destination addresses. If we get + * here, the destination address does not have a zone, so either way we need + * to look at the source address, which may or may not have a zone. If it + * does, the zone is restrictive: there is (typically) only one matching + * netif for it, and we should avoid routing to any other netif as that would + * result in guaranteed zone violations. For scoped source addresses that do + * not have a zone, use (only) a netif that has that source address locally + * assigned. This case also applies to the loopback source address, which has + * an implied link-local scope. If only the destination address is scoped + * (but, again, not zoned), we still want to use only the source address to + * determine its zone because that's most likely what the user/application + * wants, regardless of whether the source address is scoped. Finally, some + * of this story also applies if scoping is disabled altogether. */ +#if LWIP_IPV6_SCOPES + if (ip6_addr_has_scope(dest, IP6_UNKNOWN) || + ip6_addr_has_scope(src, IP6_UNICAST) || +#else /* LWIP_IPV6_SCOPES */ + if (ip6_addr_islinklocal(dest) || ip6_addr_ismulticast_iflocal(dest) || + ip6_addr_ismulticast_linklocal(dest) || ip6_addr_islinklocal(src) || +#endif /* LWIP_IPV6_SCOPES */ + ip6_addr_isloopback(src)) { +#if LWIP_IPV6_SCOPES + if (ip6_addr_has_zone(src)) { + /* Find a netif matching the source zone (relatively cheap). */ + NETIF_FOREACH(netif) { + if (netif_is_up(netif) && netif_is_link_up(netif) && + ip6_addr_test_zone(src, netif)) { + return netif; + } + } + } else +#endif /* LWIP_IPV6_SCOPES */ + { + /* Find a netif matching the source address (relatively expensive). */ + NETIF_FOREACH(netif) { + if (!netif_is_up(netif) || !netif_is_link_up(netif)) { + continue; + } + for (i = 0; i < LWIP_IPV6_NUM_ADDRESSES; i++) { + if (ip6_addr_isvalid(netif_ip6_addr_state(netif, i)) && + ip6_addr_cmp_zoneless(src, netif_ip6_addr(netif, i))) { + return netif; + } + } + } + } + /* Again, do not use any other netif in this case, as that could result in + * zone boundary violations. */ + return NULL; + } + + /* We come here only if neither source nor destination is scoped. */ + IP6_ADDR_ZONECHECK(src); + +#ifdef LWIP_HOOK_IP6_ROUTE + netif = LWIP_HOOK_IP6_ROUTE(src, dest); + if (netif != NULL) { + return netif; + } +#endif + + /* See if the destination subnet matches a configured address. In accordance + * with RFC 5942, dynamically configured addresses do not have an implied + * local subnet, and thus should be considered /128 assignments. However, as + * such, the destination address may still match a local address, and so we + * still need to check for exact matches here. By (lwIP) policy, statically + * configured addresses do always have an implied local /64 subnet. */ + NETIF_FOREACH(netif) { + if (!netif_is_up(netif) || !netif_is_link_up(netif)) { + continue; + } + for (i = 0; i < LWIP_IPV6_NUM_ADDRESSES; i++) { + if (ip6_addr_isvalid(netif_ip6_addr_state(netif, i)) && + ip6_addr_netcmp(dest, netif_ip6_addr(netif, i)) && + (netif_ip6_addr_isstatic(netif, i) || + ip6_addr_nethostcmp(dest, netif_ip6_addr(netif, i)))) { + return netif; + } + } + } + + /* Get the netif for a suitable router-announced route. */ + netif = nd6_find_route(dest); + if (netif != NULL) { + return netif; + } + + /* Try with the netif that matches the source address. Given the earlier rule + * for scoped source addresses, this applies to unscoped addresses only. */ + if (!ip6_addr_isany(src)) { + NETIF_FOREACH(netif) { + if (!netif_is_up(netif) || !netif_is_link_up(netif)) { + continue; + } + for (i = 0; i < LWIP_IPV6_NUM_ADDRESSES; i++) { + if (ip6_addr_isvalid(netif_ip6_addr_state(netif, i)) && + ip6_addr_cmp(src, netif_ip6_addr(netif, i))) { + return netif; + } + } + } + } + +#if LWIP_NETIF_LOOPBACK && !LWIP_HAVE_LOOPIF + /* loopif is disabled, loopback traffic is passed through any netif */ + if (ip6_addr_isloopback(dest)) { + /* don't check for link on loopback traffic */ + if (netif_default != NULL && netif_is_up(netif_default)) { + return netif_default; + } + /* default netif is not up, just use any netif for loopback traffic */ + NETIF_FOREACH(netif) { + if (netif_is_up(netif)) { + return netif; + } + } + return NULL; + } +#endif /* LWIP_NETIF_LOOPBACK && !LWIP_HAVE_LOOPIF */ +#endif /* !LWIP_SINGLE_NETIF */ + + /* no matching netif found, use default netif, if up */ + if ((netif_default == NULL) || !netif_is_up(netif_default) || !netif_is_link_up(netif_default)) { + return NULL; + } + return netif_default; +} + +/** + * @ingroup ip6 + * Select the best IPv6 source address for a given destination IPv6 address. + * + * This implementation follows RFC 6724 Sec. 5 to the following extent: + * - Rules 1, 2, 3: fully implemented + * - Rules 4, 5, 5.5: not applicable + * - Rule 6: not implemented + * - Rule 7: not applicable + * - Rule 8: limited to "prefer /64 subnet match over non-match" + * + * For Rule 2, we deliberately deviate from RFC 6724 Sec. 3.1 by considering + * ULAs to be of smaller scope than global addresses, to avoid that a preferred + * ULA is picked over a deprecated global address when given a global address + * as destination, as that would likely result in broken two-way communication. + * + * As long as temporary addresses are not supported (as used in Rule 7), a + * proper implementation of Rule 8 would obviate the need to implement Rule 6. + * + * @param netif the netif on which to send a packet + * @param dest the destination we are trying to reach (possibly not properly + * zoned) + * @return the most suitable source address to use, or NULL if no suitable + * source address is found + */ +const ip_addr_t * +ip6_select_source_address(struct netif *netif, const ip6_addr_t *dest) +{ + const ip_addr_t *best_addr; + const ip6_addr_t *cand_addr; + s8_t dest_scope, cand_scope; + s8_t best_scope = IP6_MULTICAST_SCOPE_RESERVED; + u8_t i, cand_pref, cand_bits; + u8_t best_pref = 0; + u8_t best_bits = 0; + + /* Start by determining the scope of the given destination address. These + * tests are hopefully (roughly) in order of likeliness to match. */ + if (ip6_addr_isglobal(dest)) { + dest_scope = IP6_MULTICAST_SCOPE_GLOBAL; + } else if (ip6_addr_islinklocal(dest) || ip6_addr_isloopback(dest)) { + dest_scope = IP6_MULTICAST_SCOPE_LINK_LOCAL; + } else if (ip6_addr_isuniquelocal(dest)) { + dest_scope = IP6_MULTICAST_SCOPE_ORGANIZATION_LOCAL; + } else if (ip6_addr_ismulticast(dest)) { + dest_scope = ip6_addr_multicast_scope(dest); + } else if (ip6_addr_issitelocal(dest)) { + dest_scope = IP6_MULTICAST_SCOPE_SITE_LOCAL; + } else { + /* no match, consider scope global */ + dest_scope = IP6_MULTICAST_SCOPE_GLOBAL; + } + + best_addr = NULL; + + for (i = 0; i < LWIP_IPV6_NUM_ADDRESSES; i++) { + /* Consider only valid (= preferred and deprecated) addresses. */ + if (!ip6_addr_isvalid(netif_ip6_addr_state(netif, i))) { + continue; + } + /* Determine the scope of this candidate address. Same ordering idea. */ + cand_addr = netif_ip6_addr(netif, i); + if (ip6_addr_isglobal(cand_addr)) { + cand_scope = IP6_MULTICAST_SCOPE_GLOBAL; + } else if (ip6_addr_islinklocal(cand_addr)) { + cand_scope = IP6_MULTICAST_SCOPE_LINK_LOCAL; + } else if (ip6_addr_isuniquelocal(cand_addr)) { + cand_scope = IP6_MULTICAST_SCOPE_ORGANIZATION_LOCAL; + } else if (ip6_addr_issitelocal(cand_addr)) { + cand_scope = IP6_MULTICAST_SCOPE_SITE_LOCAL; + } else { + /* no match, treat as low-priority global scope */ + cand_scope = IP6_MULTICAST_SCOPE_RESERVEDF; + } + cand_pref = ip6_addr_ispreferred(netif_ip6_addr_state(netif, i)); + /* @todo compute the actual common bits, for longest matching prefix. */ + /* We cannot count on the destination address having a proper zone + * assignment, so do not compare zones in this case. */ + cand_bits = ip6_addr_netcmp_zoneless(cand_addr, dest); /* just 1 or 0 for now */ + if (cand_bits && ip6_addr_nethostcmp(cand_addr, dest)) { + return netif_ip_addr6(netif, i); /* Rule 1 */ + } + if ((best_addr == NULL) || /* no alternative yet */ + ((cand_scope < best_scope) && (cand_scope >= dest_scope)) || + ((cand_scope > best_scope) && (best_scope < dest_scope)) || /* Rule 2 */ + ((cand_scope == best_scope) && ((cand_pref > best_pref) || /* Rule 3 */ + ((cand_pref == best_pref) && (cand_bits > best_bits))))) { /* Rule 8 */ + /* We found a new "winning" candidate. */ + best_addr = netif_ip_addr6(netif, i); + best_scope = cand_scope; + best_pref = cand_pref; + best_bits = cand_bits; + } + } + + return best_addr; /* may be NULL */ +} + +#if LWIP_IPV6_FORWARD +/** + * Forwards an IPv6 packet. It finds an appropriate route for the + * packet, decrements the HL value of the packet, and outputs + * the packet on the appropriate interface. + * + * @param p the packet to forward (p->payload points to IP header) + * @param iphdr the IPv6 header of the input packet + * @param inp the netif on which this packet was received + */ +static void +ip6_forward(struct pbuf *p, struct ip6_hdr *iphdr, struct netif *inp) +{ + struct netif *netif; + + /* do not forward link-local or loopback addresses */ + if (ip6_addr_islinklocal(ip6_current_dest_addr()) || + ip6_addr_isloopback(ip6_current_dest_addr())) { + LWIP_DEBUGF(IP6_DEBUG, ("ip6_forward: not forwarding link-local address.\n")); + IP6_STATS_INC(ip6.rterr); + IP6_STATS_INC(ip6.drop); + return; + } + + /* Find network interface where to forward this IP packet to. */ + netif = ip6_route(IP6_ADDR_ANY6, ip6_current_dest_addr()); + if (netif == NULL) { + LWIP_DEBUGF(IP6_DEBUG, ("ip6_forward: no route for %"X16_F":%"X16_F":%"X16_F":%"X16_F":%"X16_F":%"X16_F":%"X16_F":%"X16_F"\n", + IP6_ADDR_BLOCK1(ip6_current_dest_addr()), + IP6_ADDR_BLOCK2(ip6_current_dest_addr()), + IP6_ADDR_BLOCK3(ip6_current_dest_addr()), + IP6_ADDR_BLOCK4(ip6_current_dest_addr()), + IP6_ADDR_BLOCK5(ip6_current_dest_addr()), + IP6_ADDR_BLOCK6(ip6_current_dest_addr()), + IP6_ADDR_BLOCK7(ip6_current_dest_addr()), + IP6_ADDR_BLOCK8(ip6_current_dest_addr()))); +#if LWIP_ICMP6 + /* Don't send ICMP messages in response to ICMP messages */ + if (IP6H_NEXTH(iphdr) != IP6_NEXTH_ICMP6) { + icmp6_dest_unreach(p, ICMP6_DUR_NO_ROUTE); + } +#endif /* LWIP_ICMP6 */ + IP6_STATS_INC(ip6.rterr); + IP6_STATS_INC(ip6.drop); + return; + } +#if LWIP_IPV6_SCOPES + /* Do not forward packets with a zoned (e.g., link-local) source address + * outside of their zone. We determined the zone a bit earlier, so we know + * that the address is properly zoned here, so we can safely use has_zone. + * Also skip packets with a loopback source address (link-local implied). */ + if ((ip6_addr_has_zone(ip6_current_src_addr()) && + !ip6_addr_test_zone(ip6_current_src_addr(), netif)) || + ip6_addr_isloopback(ip6_current_src_addr())) { + LWIP_DEBUGF(IP6_DEBUG, ("ip6_forward: not forwarding packet beyond its source address zone.\n")); + IP6_STATS_INC(ip6.rterr); + IP6_STATS_INC(ip6.drop); + return; + } +#endif /* LWIP_IPV6_SCOPES */ + /* Do not forward packets onto the same network interface on which + * they arrived. */ + if (netif == inp) { + LWIP_DEBUGF(IP6_DEBUG, ("ip6_forward: not bouncing packets back on incoming interface.\n")); + IP6_STATS_INC(ip6.rterr); + IP6_STATS_INC(ip6.drop); + return; + } + + /* decrement HL */ + IP6H_HOPLIM_SET(iphdr, IP6H_HOPLIM(iphdr) - 1); + /* send ICMP6 if HL == 0 */ + if (IP6H_HOPLIM(iphdr) == 0) { +#if LWIP_ICMP6 + /* Don't send ICMP messages in response to ICMP messages */ + if (IP6H_NEXTH(iphdr) != IP6_NEXTH_ICMP6) { + icmp6_time_exceeded(p, ICMP6_TE_HL); + } +#endif /* LWIP_ICMP6 */ + IP6_STATS_INC(ip6.drop); + return; + } + + if (netif->mtu && (p->tot_len > netif->mtu)) { +#if LWIP_ICMP6 + /* Don't send ICMP messages in response to ICMP messages */ + if (IP6H_NEXTH(iphdr) != IP6_NEXTH_ICMP6) { + icmp6_packet_too_big(p, netif->mtu); + } +#endif /* LWIP_ICMP6 */ + IP6_STATS_INC(ip6.drop); + return; + } + + LWIP_DEBUGF(IP6_DEBUG, ("ip6_forward: forwarding packet to %"X16_F":%"X16_F":%"X16_F":%"X16_F":%"X16_F":%"X16_F":%"X16_F":%"X16_F"\n", + IP6_ADDR_BLOCK1(ip6_current_dest_addr()), + IP6_ADDR_BLOCK2(ip6_current_dest_addr()), + IP6_ADDR_BLOCK3(ip6_current_dest_addr()), + IP6_ADDR_BLOCK4(ip6_current_dest_addr()), + IP6_ADDR_BLOCK5(ip6_current_dest_addr()), + IP6_ADDR_BLOCK6(ip6_current_dest_addr()), + IP6_ADDR_BLOCK7(ip6_current_dest_addr()), + IP6_ADDR_BLOCK8(ip6_current_dest_addr()))); + + /* transmit pbuf on chosen interface */ + netif->output_ip6(netif, p, ip6_current_dest_addr()); + IP6_STATS_INC(ip6.fw); + IP6_STATS_INC(ip6.xmit); + return; +} +#endif /* LWIP_IPV6_FORWARD */ + +/** Return true if the current input packet should be accepted on this netif */ +static int +ip6_input_accept(struct netif *netif) +{ + /* interface is up? */ + if (netif_is_up(netif)) { + u8_t i; + /* unicast to this interface address? address configured? */ + /* If custom scopes are used, the destination zone will be tested as + * part of the local-address comparison, but we need to test the source + * scope as well (e.g., is this interface on the same link?). */ + for (i = 0; i < LWIP_IPV6_NUM_ADDRESSES; i++) { + if (ip6_addr_isvalid(netif_ip6_addr_state(netif, i)) && + ip6_addr_cmp(ip6_current_dest_addr(), netif_ip6_addr(netif, i)) +#if IPV6_CUSTOM_SCOPES + && (!ip6_addr_has_zone(ip6_current_src_addr()) || + ip6_addr_test_zone(ip6_current_src_addr(), netif)) +#endif /* IPV6_CUSTOM_SCOPES */ + ) { + /* accept on this netif */ + return 1; + } + } + } + return 0; +} + +/** + * This function is called by the network interface device driver when + * an IPv6 packet is received. The function does the basic checks of the + * IP header such as packet size being at least larger than the header + * size etc. If the packet was not destined for us, the packet is + * forwarded (using ip6_forward). + * + * Finally, the packet is sent to the upper layer protocol input function. + * + * @param p the received IPv6 packet (p->payload points to IPv6 header) + * @param inp the netif on which this packet was received + * @return ERR_OK if the packet was processed (could return ERR_* if it wasn't + * processed, but currently always returns ERR_OK) + */ +err_t +ip6_input(struct pbuf *p, struct netif *inp) +{ + struct ip6_hdr *ip6hdr; + struct netif *netif; + const u8_t *nexth; + u16_t hlen, hlen_tot; /* the current header length */ +#if 0 /*IP_ACCEPT_LINK_LAYER_ADDRESSING*/ + @todo + int check_ip_src=1; +#endif /* IP_ACCEPT_LINK_LAYER_ADDRESSING */ +#if LWIP_RAW + raw_input_state_t raw_status; +#endif /* LWIP_RAW */ + + LWIP_ASSERT_CORE_LOCKED(); + + IP6_STATS_INC(ip6.recv); + + /* identify the IP header */ + ip6hdr = (struct ip6_hdr *)p->payload; + if (IP6H_V(ip6hdr) != 6) { + LWIP_DEBUGF(IP6_DEBUG | LWIP_DBG_LEVEL_WARNING, ("IPv6 packet dropped due to bad version number %"U32_F"\n", + IP6H_V(ip6hdr))); + pbuf_free(p); + IP6_STATS_INC(ip6.err); + IP6_STATS_INC(ip6.drop); + return ERR_OK; + } + +#ifdef LWIP_HOOK_IP6_INPUT + if (LWIP_HOOK_IP6_INPUT(p, inp)) { + /* the packet has been eaten */ + return ERR_OK; + } +#endif + + /* header length exceeds first pbuf length, or ip length exceeds total pbuf length? */ + if ((IP6_HLEN > p->len) || (IP6H_PLEN(ip6hdr) > (p->tot_len - IP6_HLEN))) { + if (IP6_HLEN > p->len) { + LWIP_DEBUGF(IP6_DEBUG | LWIP_DBG_LEVEL_SERIOUS, + ("IPv6 header (len %"U16_F") does not fit in first pbuf (len %"U16_F"), IP packet dropped.\n", + (u16_t)IP6_HLEN, p->len)); + } + if ((IP6H_PLEN(ip6hdr) + IP6_HLEN) > p->tot_len) { + LWIP_DEBUGF(IP6_DEBUG | LWIP_DBG_LEVEL_SERIOUS, + ("IPv6 (plen %"U16_F") is longer than pbuf (len %"U16_F"), IP packet dropped.\n", + (u16_t)(IP6H_PLEN(ip6hdr) + IP6_HLEN), p->tot_len)); + } + /* free (drop) packet pbufs */ + pbuf_free(p); + IP6_STATS_INC(ip6.lenerr); + IP6_STATS_INC(ip6.drop); + return ERR_OK; + } + + /* Trim pbuf. This should have been done at the netif layer, + * but we'll do it anyway just to be sure that its done. */ + pbuf_realloc(p, (u16_t)(IP6_HLEN + IP6H_PLEN(ip6hdr))); + + /* copy IP addresses to aligned ip6_addr_t */ + ip_addr_copy_from_ip6_packed(ip_data.current_iphdr_dest, ip6hdr->dest); + ip_addr_copy_from_ip6_packed(ip_data.current_iphdr_src, ip6hdr->src); + + /* Don't accept virtual IPv4 mapped IPv6 addresses. + * Don't accept multicast source addresses. */ + if (ip6_addr_isipv4mappedipv6(ip_2_ip6(&ip_data.current_iphdr_dest)) || + ip6_addr_isipv4mappedipv6(ip_2_ip6(&ip_data.current_iphdr_src)) || + ip6_addr_ismulticast(ip_2_ip6(&ip_data.current_iphdr_src))) { + /* free (drop) packet pbufs */ + pbuf_free(p); + IP6_STATS_INC(ip6.err); + IP6_STATS_INC(ip6.drop); + return ERR_OK; + } + + /* Set the appropriate zone identifier on the addresses. */ + ip6_addr_assign_zone(ip_2_ip6(&ip_data.current_iphdr_dest), IP6_UNKNOWN, inp); + ip6_addr_assign_zone(ip_2_ip6(&ip_data.current_iphdr_src), IP6_UNICAST, inp); + + /* current header pointer. */ + ip_data.current_ip6_header = ip6hdr; + + /* In netif, used in case we need to send ICMPv6 packets back. */ + ip_data.current_netif = inp; + ip_data.current_input_netif = inp; + + /* match packet against an interface, i.e. is this packet for us? */ + if (ip6_addr_ismulticast(ip6_current_dest_addr())) { + /* Always joined to multicast if-local and link-local all-nodes group. */ + if (ip6_addr_isallnodes_iflocal(ip6_current_dest_addr()) || + ip6_addr_isallnodes_linklocal(ip6_current_dest_addr())) { + netif = inp; + } +#if LWIP_IPV6_MLD + else if (mld6_lookfor_group(inp, ip6_current_dest_addr())) { + netif = inp; + } +#else /* LWIP_IPV6_MLD */ + else if (ip6_addr_issolicitednode(ip6_current_dest_addr())) { + u8_t i; + /* Filter solicited node packets when MLD is not enabled + * (for Neighbor discovery). */ + netif = NULL; + for (i = 0; i < LWIP_IPV6_NUM_ADDRESSES; i++) { + if (ip6_addr_isvalid(netif_ip6_addr_state(inp, i)) && + ip6_addr_cmp_solicitednode(ip6_current_dest_addr(), netif_ip6_addr(inp, i))) { + netif = inp; + LWIP_DEBUGF(IP6_DEBUG, ("ip6_input: solicited node packet accepted on interface %c%c\n", + netif->name[0], netif->name[1])); + break; + } + } + } +#endif /* LWIP_IPV6_MLD */ + else { + netif = NULL; + } + } else { + /* start trying with inp. if that's not acceptable, start walking the + list of configured netifs. */ + if (ip6_input_accept(inp)) { + netif = inp; + } else { + netif = NULL; +#if !IPV6_CUSTOM_SCOPES + /* Shortcut: stop looking for other interfaces if either the source or + * the destination has a scope constrained to this interface. Custom + * scopes may break the 1:1 link/interface mapping, however. */ + if (ip6_addr_islinklocal(ip6_current_dest_addr()) || + ip6_addr_islinklocal(ip6_current_src_addr())) { + goto netif_found; + } +#endif /* !IPV6_CUSTOM_SCOPES */ +#if !LWIP_NETIF_LOOPBACK || LWIP_HAVE_LOOPIF + /* The loopback address is to be considered link-local. Packets to it + * should be dropped on other interfaces, as per RFC 4291 Sec. 2.5.3. + * Its implied scope means packets *from* the loopback address should + * not be accepted on other interfaces, either. These requirements + * cannot be implemented in the case that loopback traffic is sent + * across a non-loopback interface, however. */ + if (ip6_addr_isloopback(ip6_current_dest_addr()) || + ip6_addr_isloopback(ip6_current_src_addr())) { + goto netif_found; + } +#endif /* !LWIP_NETIF_LOOPBACK || LWIP_HAVE_LOOPIF */ +#if !LWIP_SINGLE_NETIF + NETIF_FOREACH(netif) { + if (netif == inp) { + /* we checked that before already */ + continue; + } + if (ip6_input_accept(netif)) { + break; + } + } +#endif /* !LWIP_SINGLE_NETIF */ + } +netif_found: + LWIP_DEBUGF(IP6_DEBUG, ("ip6_input: packet accepted on interface %c%c\n", + netif ? netif->name[0] : 'X', netif? netif->name[1] : 'X')); + } + + /* "::" packet source address? (used in duplicate address detection) */ + if (ip6_addr_isany(ip6_current_src_addr()) && + (!ip6_addr_issolicitednode(ip6_current_dest_addr()))) { + /* packet source is not valid */ + /* free (drop) packet pbufs */ + LWIP_DEBUGF(IP6_DEBUG, ("ip6_input: packet with src ANY_ADDRESS dropped\n")); + pbuf_free(p); + IP6_STATS_INC(ip6.drop); + goto ip6_input_cleanup; + } + + /* packet not for us? */ + if (netif == NULL) { + /* packet not for us, route or discard */ + LWIP_DEBUGF(IP6_DEBUG | LWIP_DBG_TRACE, ("ip6_input: packet not for us.\n")); +#if LWIP_IPV6_FORWARD + /* non-multicast packet? */ + if (!ip6_addr_ismulticast(ip6_current_dest_addr())) { + /* try to forward IP packet on (other) interfaces */ + ip6_forward(p, ip6hdr, inp); + } +#endif /* LWIP_IPV6_FORWARD */ + pbuf_free(p); + goto ip6_input_cleanup; + } + + /* current netif pointer. */ + ip_data.current_netif = netif; + + /* Save next header type. */ + nexth = &IP6H_NEXTH(ip6hdr); + + /* Init header length. */ + hlen = hlen_tot = IP6_HLEN; + + /* Move to payload. */ + pbuf_remove_header(p, IP6_HLEN); + + /* Process known option extension headers, if present. */ + while (*nexth != IP6_NEXTH_NONE) + { + switch (*nexth) { + case IP6_NEXTH_HOPBYHOP: + { + s32_t opt_offset; + struct ip6_hbh_hdr *hbh_hdr; + struct ip6_opt_hdr *opt_hdr; + LWIP_DEBUGF(IP6_DEBUG, ("ip6_input: packet with Hop-by-Hop options header\n")); + + /* Get and check the header length, while staying in packet bounds. */ + hbh_hdr = (struct ip6_hbh_hdr *)p->payload; + + /* Get next header type. */ + nexth = &IP6_HBH_NEXTH(hbh_hdr); + + /* Get the header length. */ + hlen = (u16_t)(8 * (1 + hbh_hdr->_hlen)); + + if ((p->len < 8) || (hlen > p->len)) { + LWIP_DEBUGF(IP6_DEBUG | LWIP_DBG_LEVEL_SERIOUS, + ("IPv6 options header (hlen %"U16_F") does not fit in first pbuf (len %"U16_F"), IPv6 packet dropped.\n", + hlen, p->len)); + /* free (drop) packet pbufs */ + pbuf_free(p); + IP6_STATS_INC(ip6.lenerr); + IP6_STATS_INC(ip6.drop); + goto ip6_input_cleanup; + } + + hlen_tot = (u16_t)(hlen_tot + hlen); + + /* The extended option header starts right after Hop-by-Hop header. */ + opt_offset = IP6_HBH_HLEN; + while (opt_offset < hlen) + { + s32_t opt_dlen = 0; + + opt_hdr = (struct ip6_opt_hdr *)((u8_t *)hbh_hdr + opt_offset); + + switch (IP6_OPT_TYPE(opt_hdr)) { + /* @todo: process IPV6 Hop-by-Hop option data */ + case IP6_PAD1_OPTION: + /* PAD1 option doesn't have length and value field */ + opt_dlen = -1; + break; + case IP6_PADN_OPTION: + opt_dlen = IP6_OPT_DLEN(opt_hdr); + break; + case IP6_ROUTER_ALERT_OPTION: + opt_dlen = IP6_OPT_DLEN(opt_hdr); + break; + case IP6_JUMBO_OPTION: + opt_dlen = IP6_OPT_DLEN(opt_hdr); + break; + default: + /* Check 2 MSB of Hop-by-Hop header type. */ + switch (IP6_OPT_TYPE_ACTION(opt_hdr)) { + case 1: + /* Discard the packet. */ + LWIP_DEBUGF(IP6_DEBUG, ("ip6_input: packet with invalid Hop-by-Hop option type dropped.\n")); + pbuf_free(p); + IP6_STATS_INC(ip6.drop); + goto ip6_input_cleanup; + case 2: + /* Send ICMP Parameter Problem */ + icmp6_param_problem(p, ICMP6_PP_OPTION, opt_hdr); + LWIP_DEBUGF(IP6_DEBUG, ("ip6_input: packet with invalid Hop-by-Hop option type dropped.\n")); + pbuf_free(p); + IP6_STATS_INC(ip6.drop); + goto ip6_input_cleanup; + case 3: + /* Send ICMP Parameter Problem if destination address is not a multicast address */ + if (!ip6_addr_ismulticast(ip6_current_dest_addr())) { + icmp6_param_problem(p, ICMP6_PP_OPTION, opt_hdr); + } + LWIP_DEBUGF(IP6_DEBUG, ("ip6_input: packet with invalid Hop-by-Hop option type dropped.\n")); + pbuf_free(p); + IP6_STATS_INC(ip6.drop); + goto ip6_input_cleanup; + default: + /* Skip over this option. */ + opt_dlen = IP6_OPT_DLEN(opt_hdr); + break; + } + break; + } + + /* Adjust the offset to move to the next extended option header */ + opt_offset = opt_offset + IP6_OPT_HLEN + opt_dlen; + } + pbuf_remove_header(p, hlen); + break; + } + case IP6_NEXTH_DESTOPTS: + { + s32_t opt_offset; + struct ip6_dest_hdr *dest_hdr; + struct ip6_opt_hdr *opt_hdr; + LWIP_DEBUGF(IP6_DEBUG, ("ip6_input: packet with Destination options header\n")); + + dest_hdr = (struct ip6_dest_hdr *)p->payload; + + /* Get next header type. */ + nexth = &IP6_DEST_NEXTH(dest_hdr); + + /* Get the header length. */ + hlen = 8 * (1 + dest_hdr->_hlen); + if ((p->len < 8) || (hlen > p->len)) { + LWIP_DEBUGF(IP6_DEBUG | LWIP_DBG_LEVEL_SERIOUS, + ("IPv6 options header (hlen %"U16_F") does not fit in first pbuf (len %"U16_F"), IPv6 packet dropped.\n", + hlen, p->len)); + /* free (drop) packet pbufs */ + pbuf_free(p); + IP6_STATS_INC(ip6.lenerr); + IP6_STATS_INC(ip6.drop); + goto ip6_input_cleanup; + } + + hlen_tot = (u16_t)(hlen_tot + hlen); + + /* The extended option header starts right after Destination header. */ + opt_offset = IP6_DEST_HLEN; + while (opt_offset < hlen) + { + s32_t opt_dlen = 0; + + opt_hdr = (struct ip6_opt_hdr *)((u8_t *)dest_hdr + opt_offset); + + switch (IP6_OPT_TYPE(opt_hdr)) + { + /* @todo: process IPV6 Destination option data */ + case IP6_PAD1_OPTION: + /* PAD1 option deosn't have length and value field */ + opt_dlen = -1; + break; + case IP6_PADN_OPTION: + opt_dlen = IP6_OPT_DLEN(opt_hdr); + break; + case IP6_ROUTER_ALERT_OPTION: + opt_dlen = IP6_OPT_DLEN(opt_hdr); + break; + case IP6_JUMBO_OPTION: + opt_dlen = IP6_OPT_DLEN(opt_hdr); + break; + case IP6_HOME_ADDRESS_OPTION: + opt_dlen = IP6_OPT_DLEN(opt_hdr); + break; + default: + /* Check 2 MSB of Destination header type. */ + switch (IP6_OPT_TYPE_ACTION(opt_hdr)) + { + case 1: + /* Discard the packet. */ + LWIP_DEBUGF(IP6_DEBUG, ("ip6_input: packet with invalid destination option type dropped.\n")); + pbuf_free(p); + IP6_STATS_INC(ip6.drop); + goto ip6_input_cleanup; + case 2: + /* Send ICMP Parameter Problem */ + icmp6_param_problem(p, ICMP6_PP_OPTION, opt_hdr); + LWIP_DEBUGF(IP6_DEBUG, ("ip6_input: packet with invalid destination option type dropped.\n")); + pbuf_free(p); + IP6_STATS_INC(ip6.drop); + goto ip6_input_cleanup; + case 3: + /* Send ICMP Parameter Problem if destination address is not a multicast address */ + if (!ip6_addr_ismulticast(ip6_current_dest_addr())) { + icmp6_param_problem(p, ICMP6_PP_OPTION, opt_hdr); + } + LWIP_DEBUGF(IP6_DEBUG, ("ip6_input: packet with invalid destination option type dropped.\n")); + pbuf_free(p); + IP6_STATS_INC(ip6.drop); + goto ip6_input_cleanup; + default: + /* Skip over this option. */ + opt_dlen = IP6_OPT_DLEN(opt_hdr); + break; + } + break; + } + + /* Adjust the offset to move to the next extended option header */ + opt_offset = opt_offset + IP6_OPT_HLEN + opt_dlen; + } + + pbuf_remove_header(p, hlen); + break; + } + case IP6_NEXTH_ROUTING: + { + struct ip6_rout_hdr *rout_hdr; + LWIP_DEBUGF(IP6_DEBUG, ("ip6_input: packet with Routing header\n")); + + rout_hdr = (struct ip6_rout_hdr *)p->payload; + + /* Get next header type. */ + nexth = &IP6_ROUT_NEXTH(rout_hdr); + + /* Get the header length. */ + hlen = 8 * (1 + rout_hdr->_hlen); + + if ((p->len < 8) || (hlen > p->len)) { + LWIP_DEBUGF(IP6_DEBUG | LWIP_DBG_LEVEL_SERIOUS, + ("IPv6 options header (hlen %"U16_F") does not fit in first pbuf (len %"U16_F"), IPv6 packet dropped.\n", + hlen, p->len)); + /* free (drop) packet pbufs */ + pbuf_free(p); + IP6_STATS_INC(ip6.lenerr); + IP6_STATS_INC(ip6.drop); + goto ip6_input_cleanup; + } + + /* Skip over this header. */ + hlen_tot = (u16_t)(hlen_tot + hlen); + + /* if segment left value is 0 in routing header, ignore the option */ + if (IP6_ROUT_SEG_LEFT(rout_hdr)) { + /* The length field of routing option header must be even */ + if (rout_hdr->_hlen & 0x1) { + /* Discard and send parameter field error */ + icmp6_param_problem(p, ICMP6_PP_FIELD, &rout_hdr->_hlen); + LWIP_DEBUGF(IP6_DEBUG, ("ip6_input: packet with invalid routing type dropped\n")); + pbuf_free(p); + IP6_STATS_INC(ip6.drop); + goto ip6_input_cleanup; + } + + switch (IP6_ROUT_TYPE(rout_hdr)) + { + /* TODO: process routing by the type */ + case IP6_ROUT_TYPE2: + break; + case IP6_ROUT_RPL: + break; + default: + /* Discard unrecognized routing type and send parameter field error */ + icmp6_param_problem(p, ICMP6_PP_FIELD, &IP6_ROUT_TYPE(rout_hdr)); + LWIP_DEBUGF(IP6_DEBUG, ("ip6_input: packet with invalid routing type dropped\n")); + pbuf_free(p); + IP6_STATS_INC(ip6.drop); + goto ip6_input_cleanup; + } + } + + pbuf_remove_header(p, hlen); + break; + } + case IP6_NEXTH_FRAGMENT: + { + struct ip6_frag_hdr *frag_hdr; + LWIP_DEBUGF(IP6_DEBUG, ("ip6_input: packet with Fragment header\n")); + + frag_hdr = (struct ip6_frag_hdr *)p->payload; + + /* Get next header type. */ + nexth = &IP6_FRAG_NEXTH(frag_hdr); + + /* Fragment Header length. */ + hlen = 8; + + /* Make sure this header fits in current pbuf. */ + if (hlen > p->len) { + LWIP_DEBUGF(IP6_DEBUG | LWIP_DBG_LEVEL_SERIOUS, + ("IPv6 options header (hlen %"U16_F") does not fit in first pbuf (len %"U16_F"), IPv6 packet dropped.\n", + hlen, p->len)); + /* free (drop) packet pbufs */ + pbuf_free(p); + IP6_FRAG_STATS_INC(ip6_frag.lenerr); + IP6_FRAG_STATS_INC(ip6_frag.drop); + goto ip6_input_cleanup; + } + + hlen_tot = (u16_t)(hlen_tot + hlen); + + /* check payload length is multiple of 8 octets when mbit is set */ + if (IP6_FRAG_MBIT(frag_hdr) && (IP6H_PLEN(ip6hdr) & 0x7)) { + /* ipv6 payload length is not multiple of 8 octets */ + icmp6_param_problem(p, ICMP6_PP_FIELD, LWIP_PACKED_CAST(const void *, &ip6hdr->_plen)); + LWIP_DEBUGF(IP6_DEBUG, ("ip6_input: packet with invalid payload length dropped\n")); + pbuf_free(p); + IP6_STATS_INC(ip6.drop); + goto ip6_input_cleanup; + } + + /* Offset == 0 and more_fragments == 0? */ + if ((frag_hdr->_fragment_offset & + PP_HTONS(IP6_FRAG_OFFSET_MASK | IP6_FRAG_MORE_FLAG)) == 0) { + /* This is a 1-fragment packet. Skip this header and continue. */ + pbuf_remove_header(p, hlen); + } else { +#if LWIP_IPV6_REASS + /* reassemble the packet */ + ip_data.current_ip_header_tot_len = hlen_tot; + p = ip6_reass(p); + /* packet not fully reassembled yet? */ + if (p == NULL) { + goto ip6_input_cleanup; + } + + /* Returned p point to IPv6 header. + * Update all our variables and pointers and continue. */ + ip6hdr = (struct ip6_hdr *)p->payload; + nexth = &IP6H_NEXTH(ip6hdr); + hlen = hlen_tot = IP6_HLEN; + pbuf_remove_header(p, IP6_HLEN); + +#else /* LWIP_IPV6_REASS */ + /* free (drop) packet pbufs */ + LWIP_DEBUGF(IP6_DEBUG, ("ip6_input: packet with Fragment header dropped (with LWIP_IPV6_REASS==0)\n")); + pbuf_free(p); + IP6_STATS_INC(ip6.opterr); + IP6_STATS_INC(ip6.drop); + goto ip6_input_cleanup; +#endif /* LWIP_IPV6_REASS */ + } + break; + } + default: + goto options_done; + } + + if (*nexth == IP6_NEXTH_HOPBYHOP) { + /* Hop-by-Hop header comes only as a first option */ + icmp6_param_problem(p, ICMP6_PP_HEADER, nexth); + LWIP_DEBUGF(IP6_DEBUG, ("ip6_input: packet with Hop-by-Hop options header dropped (only valid as a first option)\n")); + pbuf_free(p); + IP6_STATS_INC(ip6.drop); + goto ip6_input_cleanup; + } + } + +options_done: + + /* send to upper layers */ + LWIP_DEBUGF(IP6_DEBUG, ("ip6_input: \n")); + ip6_debug_print(p); + LWIP_DEBUGF(IP6_DEBUG, ("ip6_input: p->len %"U16_F" p->tot_len %"U16_F"\n", p->len, p->tot_len)); + + ip_data.current_ip_header_tot_len = hlen_tot; + +#if LWIP_RAW + /* p points to IPv6 header again for raw_input. */ + pbuf_add_header_force(p, hlen_tot); + /* raw input did not eat the packet? */ + raw_status = raw_input(p, inp); + if (raw_status != RAW_INPUT_EATEN) + { + /* Point to payload. */ + pbuf_remove_header(p, hlen_tot); +#else /* LWIP_RAW */ + { +#endif /* LWIP_RAW */ + switch (*nexth) { + case IP6_NEXTH_NONE: + pbuf_free(p); + break; +#if LWIP_UDP + case IP6_NEXTH_UDP: +#if LWIP_UDPLITE + case IP6_NEXTH_UDPLITE: +#endif /* LWIP_UDPLITE */ + udp_input(p, inp); + break; +#endif /* LWIP_UDP */ +#if LWIP_TCP + case IP6_NEXTH_TCP: + tcp_input(p, inp); + break; +#endif /* LWIP_TCP */ +#if LWIP_ICMP6 + case IP6_NEXTH_ICMP6: + icmp6_input(p, inp); + break; +#endif /* LWIP_ICMP */ + default: +#if LWIP_RAW + if (raw_status == RAW_INPUT_DELIVERED) { + /* @todo: ipv6 mib in-delivers? */ + } else +#endif /* LWIP_RAW */ + { +#if LWIP_ICMP6 + /* p points to IPv6 header again for raw_input. */ + pbuf_add_header_force(p, hlen_tot); + /* send ICMP parameter problem unless it was a multicast or ICMPv6 */ + if ((!ip6_addr_ismulticast(ip6_current_dest_addr())) && + (IP6H_NEXTH(ip6hdr) != IP6_NEXTH_ICMP6)) { + icmp6_param_problem(p, ICMP6_PP_HEADER, nexth); + } +#endif /* LWIP_ICMP */ + LWIP_DEBUGF(IP6_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("ip6_input: Unsupported transport protocol %"U16_F"\n", (u16_t)IP6H_NEXTH(ip6hdr))); + IP6_STATS_INC(ip6.proterr); + IP6_STATS_INC(ip6.drop); + } + pbuf_free(p); + break; + } + } + +ip6_input_cleanup: + ip_data.current_netif = NULL; + ip_data.current_input_netif = NULL; + ip_data.current_ip6_header = NULL; + ip_data.current_ip_header_tot_len = 0; + ip6_addr_set_zero(ip6_current_src_addr()); + ip6_addr_set_zero(ip6_current_dest_addr()); + + return ERR_OK; +} + + +/** + * Sends an IPv6 packet on a network interface. This function constructs + * the IPv6 header. If the source IPv6 address is NULL, the IPv6 "ANY" address is + * used as source (usually during network startup). If the source IPv6 address it + * IP6_ADDR_ANY, the most appropriate IPv6 address of the outgoing network + * interface is filled in as source address. If the destination IPv6 address is + * LWIP_IP_HDRINCL, p is assumed to already include an IPv6 header and + * p->payload points to it instead of the data. + * + * @param p the packet to send (p->payload points to the data, e.g. next + protocol header; if dest == LWIP_IP_HDRINCL, p already includes an + IPv6 header and p->payload points to that IPv6 header) + * @param src the source IPv6 address to send from (if src == IP6_ADDR_ANY, an + * IP address of the netif is selected and used as source address. + * if src == NULL, IP6_ADDR_ANY is used as source) (src is possibly not + * properly zoned) + * @param dest the destination IPv6 address to send the packet to (possibly not + * properly zoned) + * @param hl the Hop Limit value to be set in the IPv6 header + * @param tc the Traffic Class value to be set in the IPv6 header + * @param nexth the Next Header to be set in the IPv6 header + * @param netif the netif on which to send this packet + * @return ERR_OK if the packet was sent OK + * ERR_BUF if p doesn't have enough space for IPv6/LINK headers + * returns errors returned by netif->output_ip6 + */ +err_t +ip6_output_if(struct pbuf *p, const ip6_addr_t *src, const ip6_addr_t *dest, + u8_t hl, u8_t tc, + u8_t nexth, struct netif *netif) +{ + const ip6_addr_t *src_used = src; + if (dest != LWIP_IP_HDRINCL) { + if (src != NULL && ip6_addr_isany(src)) { + src_used = ip_2_ip6(ip6_select_source_address(netif, dest)); + if ((src_used == NULL) || ip6_addr_isany(src_used)) { + /* No appropriate source address was found for this packet. */ + LWIP_DEBUGF(IP6_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("ip6_output: No suitable source address for packet.\n")); + IP6_STATS_INC(ip6.rterr); + return ERR_RTE; + } + } + } + return ip6_output_if_src(p, src_used, dest, hl, tc, nexth, netif); +} + +/** + * Same as ip6_output_if() but 'src' address is not replaced by netif address + * when it is 'any'. + */ +err_t +ip6_output_if_src(struct pbuf *p, const ip6_addr_t *src, const ip6_addr_t *dest, + u8_t hl, u8_t tc, + u8_t nexth, struct netif *netif) +{ + struct ip6_hdr *ip6hdr; + ip6_addr_t dest_addr; + + LWIP_ASSERT_CORE_LOCKED(); + LWIP_IP_CHECK_PBUF_REF_COUNT_FOR_TX(p); + + /* Should the IPv6 header be generated or is it already included in p? */ + if (dest != LWIP_IP_HDRINCL) { +#if LWIP_IPV6_SCOPES + /* If the destination address is scoped but lacks a zone, add a zone now, + * based on the outgoing interface. The lower layers (e.g., nd6) absolutely + * require addresses to be properly zoned for correctness. In some cases, + * earlier attempts will have been made to add a zone to the destination, + * but this function is the only one that is called in all (other) cases, + * so we must do this here. */ + if (ip6_addr_lacks_zone(dest, IP6_UNKNOWN)) { + ip6_addr_copy(dest_addr, *dest); + ip6_addr_assign_zone(&dest_addr, IP6_UNKNOWN, netif); + dest = &dest_addr; + } +#endif /* LWIP_IPV6_SCOPES */ + + /* generate IPv6 header */ + if (pbuf_add_header(p, IP6_HLEN)) { + LWIP_DEBUGF(IP6_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("ip6_output: not enough room for IPv6 header in pbuf\n")); + IP6_STATS_INC(ip6.err); + return ERR_BUF; + } + + ip6hdr = (struct ip6_hdr *)p->payload; + LWIP_ASSERT("check that first pbuf can hold struct ip6_hdr", + (p->len >= sizeof(struct ip6_hdr))); + + IP6H_HOPLIM_SET(ip6hdr, hl); + IP6H_NEXTH_SET(ip6hdr, nexth); + + /* dest cannot be NULL here */ + ip6_addr_copy_to_packed(ip6hdr->dest, *dest); + + IP6H_VTCFL_SET(ip6hdr, 6, tc, 0); + IP6H_PLEN_SET(ip6hdr, (u16_t)(p->tot_len - IP6_HLEN)); + + if (src == NULL) { + src = IP6_ADDR_ANY6; + } + /* src cannot be NULL here */ + ip6_addr_copy_to_packed(ip6hdr->src, *src); + + } else { + /* IP header already included in p */ + ip6hdr = (struct ip6_hdr *)p->payload; + ip6_addr_copy_from_packed(dest_addr, ip6hdr->dest); + ip6_addr_assign_zone(&dest_addr, IP6_UNKNOWN, netif); + dest = &dest_addr; + } + + IP6_STATS_INC(ip6.xmit); + + LWIP_DEBUGF(IP6_DEBUG, ("ip6_output_if: %c%c%"U16_F"\n", netif->name[0], netif->name[1], (u16_t)netif->num)); + ip6_debug_print(p); + +#if ENABLE_LOOPBACK + { + int i; +#if !LWIP_HAVE_LOOPIF + if (ip6_addr_isloopback(dest)) { + return netif_loop_output(netif, p); + } +#endif /* !LWIP_HAVE_LOOPIF */ + for (i = 0; i < LWIP_IPV6_NUM_ADDRESSES; i++) { + if (ip6_addr_isvalid(netif_ip6_addr_state(netif, i)) && + ip6_addr_cmp(dest, netif_ip6_addr(netif, i))) { + /* Packet to self, enqueue it for loopback */ + LWIP_DEBUGF(IP6_DEBUG, ("netif_loop_output()\n")); + return netif_loop_output(netif, p); + } + } + } +#if LWIP_MULTICAST_TX_OPTIONS + if ((p->flags & PBUF_FLAG_MCASTLOOP) != 0) { + netif_loop_output(netif, p); + } +#endif /* LWIP_MULTICAST_TX_OPTIONS */ +#endif /* ENABLE_LOOPBACK */ +#if LWIP_IPV6_FRAG + /* don't fragment if interface has mtu set to 0 [loopif] */ + if (netif_mtu6(netif) && (p->tot_len > nd6_get_destination_mtu(dest, netif))) { + return ip6_frag(p, netif, dest); + } +#endif /* LWIP_IPV6_FRAG */ + + LWIP_DEBUGF(IP6_DEBUG, ("netif->output_ip6()\n")); + return netif->output_ip6(netif, p, dest); +} + +/** + * Simple interface to ip6_output_if. It finds the outgoing network + * interface and calls upon ip6_output_if to do the actual work. + * + * @param p the packet to send (p->payload points to the data, e.g. next + protocol header; if dest == LWIP_IP_HDRINCL, p already includes an + IPv6 header and p->payload points to that IPv6 header) + * @param src the source IPv6 address to send from (if src == IP6_ADDR_ANY, an + * IP address of the netif is selected and used as source address. + * if src == NULL, IP6_ADDR_ANY is used as source) + * @param dest the destination IPv6 address to send the packet to + * @param hl the Hop Limit value to be set in the IPv6 header + * @param tc the Traffic Class value to be set in the IPv6 header + * @param nexth the Next Header to be set in the IPv6 header + * + * @return ERR_RTE if no route is found + * see ip_output_if() for more return values + */ +err_t +ip6_output(struct pbuf *p, const ip6_addr_t *src, const ip6_addr_t *dest, + u8_t hl, u8_t tc, u8_t nexth) +{ + struct netif *netif; + struct ip6_hdr *ip6hdr; + ip6_addr_t src_addr, dest_addr; + + LWIP_IP_CHECK_PBUF_REF_COUNT_FOR_TX(p); + + if (dest != LWIP_IP_HDRINCL) { + netif = ip6_route(src, dest); + } else { + /* IP header included in p, read addresses. */ + ip6hdr = (struct ip6_hdr *)p->payload; + ip6_addr_copy_from_packed(src_addr, ip6hdr->src); + ip6_addr_copy_from_packed(dest_addr, ip6hdr->dest); + netif = ip6_route(&src_addr, &dest_addr); + } + + if (netif == NULL) { + LWIP_DEBUGF(IP6_DEBUG, ("ip6_output: no route for %"X16_F":%"X16_F":%"X16_F":%"X16_F":%"X16_F":%"X16_F":%"X16_F":%"X16_F"\n", + IP6_ADDR_BLOCK1(dest), + IP6_ADDR_BLOCK2(dest), + IP6_ADDR_BLOCK3(dest), + IP6_ADDR_BLOCK4(dest), + IP6_ADDR_BLOCK5(dest), + IP6_ADDR_BLOCK6(dest), + IP6_ADDR_BLOCK7(dest), + IP6_ADDR_BLOCK8(dest))); + IP6_STATS_INC(ip6.rterr); + return ERR_RTE; + } + + return ip6_output_if(p, src, dest, hl, tc, nexth, netif); +} + + +#if LWIP_NETIF_USE_HINTS +/** Like ip6_output, but takes and addr_hint pointer that is passed on to netif->addr_hint + * before calling ip6_output_if. + * + * @param p the packet to send (p->payload points to the data, e.g. next + protocol header; if dest == LWIP_IP_HDRINCL, p already includes an + IPv6 header and p->payload points to that IPv6 header) + * @param src the source IPv6 address to send from (if src == IP6_ADDR_ANY, an + * IP address of the netif is selected and used as source address. + * if src == NULL, IP6_ADDR_ANY is used as source) + * @param dest the destination IPv6 address to send the packet to + * @param hl the Hop Limit value to be set in the IPv6 header + * @param tc the Traffic Class value to be set in the IPv6 header + * @param nexth the Next Header to be set in the IPv6 header + * @param netif_hint netif output hint pointer set to netif->hint before + * calling ip_output_if() + * + * @return ERR_RTE if no route is found + * see ip_output_if() for more return values + */ +err_t +ip6_output_hinted(struct pbuf *p, const ip6_addr_t *src, const ip6_addr_t *dest, + u8_t hl, u8_t tc, u8_t nexth, struct netif_hint *netif_hint) +{ + struct netif *netif; + struct ip6_hdr *ip6hdr; + ip6_addr_t src_addr, dest_addr; + err_t err; + + LWIP_IP_CHECK_PBUF_REF_COUNT_FOR_TX(p); + + if (dest != LWIP_IP_HDRINCL) { + netif = ip6_route(src, dest); + } else { + /* IP header included in p, read addresses. */ + ip6hdr = (struct ip6_hdr *)p->payload; + ip6_addr_copy_from_packed(src_addr, ip6hdr->src); + ip6_addr_copy_from_packed(dest_addr, ip6hdr->dest); + netif = ip6_route(&src_addr, &dest_addr); + } + + if (netif == NULL) { + LWIP_DEBUGF(IP6_DEBUG, ("ip6_output: no route for %"X16_F":%"X16_F":%"X16_F":%"X16_F":%"X16_F":%"X16_F":%"X16_F":%"X16_F"\n", + IP6_ADDR_BLOCK1(dest), + IP6_ADDR_BLOCK2(dest), + IP6_ADDR_BLOCK3(dest), + IP6_ADDR_BLOCK4(dest), + IP6_ADDR_BLOCK5(dest), + IP6_ADDR_BLOCK6(dest), + IP6_ADDR_BLOCK7(dest), + IP6_ADDR_BLOCK8(dest))); + IP6_STATS_INC(ip6.rterr); + return ERR_RTE; + } + + NETIF_SET_HINTS(netif, netif_hint); + err = ip6_output_if(p, src, dest, hl, tc, nexth, netif); + NETIF_RESET_HINTS(netif); + + return err; +} +#endif /* LWIP_NETIF_USE_HINTS*/ + +#if LWIP_IPV6_MLD +/** + * Add a hop-by-hop options header with a router alert option and padding. + * + * Used by MLD when sending a Multicast listener report/done message. + * + * @param p the packet to which we will prepend the options header + * @param nexth the next header protocol number (e.g. IP6_NEXTH_ICMP6) + * @param value the value of the router alert option data (e.g. IP6_ROUTER_ALERT_VALUE_MLD) + * @return ERR_OK if hop-by-hop header was added, ERR_* otherwise + */ +err_t +ip6_options_add_hbh_ra(struct pbuf *p, u8_t nexth, u8_t value) +{ + u8_t *opt_data; + u32_t offset = 0; + struct ip6_hbh_hdr *hbh_hdr; + struct ip6_opt_hdr *opt_hdr; + + /* fixed 4 bytes for router alert option and 2 bytes padding */ + const u8_t hlen = (sizeof(struct ip6_opt_hdr) * 2) + IP6_ROUTER_ALERT_DLEN; + /* Move pointer to make room for hop-by-hop options header. */ + if (pbuf_add_header(p, sizeof(struct ip6_hbh_hdr) + hlen)) { + LWIP_DEBUGF(IP6_DEBUG, ("ip6_options: no space for options header\n")); + IP6_STATS_INC(ip6.err); + return ERR_BUF; + } + + /* Set fields of Hop-by-Hop header */ + hbh_hdr = (struct ip6_hbh_hdr *)p->payload; + IP6_HBH_NEXTH(hbh_hdr) = nexth; + hbh_hdr->_hlen = 0; + offset = IP6_HBH_HLEN; + + /* Set router alert options to Hop-by-Hop extended option header */ + opt_hdr = (struct ip6_opt_hdr *)((u8_t *)hbh_hdr + offset); + IP6_OPT_TYPE(opt_hdr) = IP6_ROUTER_ALERT_OPTION; + IP6_OPT_DLEN(opt_hdr) = IP6_ROUTER_ALERT_DLEN; + offset += IP6_OPT_HLEN; + + /* Set router alert option data */ + opt_data = (u8_t *)hbh_hdr + offset; + opt_data[0] = value; + opt_data[1] = 0; + offset += IP6_OPT_DLEN(opt_hdr); + + /* add 2 bytes padding to make 8 bytes Hop-by-Hop header length */ + opt_hdr = (struct ip6_opt_hdr *)((u8_t *)hbh_hdr + offset); + IP6_OPT_TYPE(opt_hdr) = IP6_PADN_OPTION; + IP6_OPT_DLEN(opt_hdr) = 0; + + return ERR_OK; +} +#endif /* LWIP_IPV6_MLD */ + +#if IP6_DEBUG +/* Print an IPv6 header by using LWIP_DEBUGF + * @param p an IPv6 packet, p->payload pointing to the IPv6 header + */ +void +ip6_debug_print(struct pbuf *p) +{ + struct ip6_hdr *ip6hdr = (struct ip6_hdr *)p->payload; + + LWIP_DEBUGF(IP6_DEBUG, ("IPv6 header:\n")); + LWIP_DEBUGF(IP6_DEBUG, ("+-------------------------------+\n")); + LWIP_DEBUGF(IP6_DEBUG, ("| %2"U16_F" | %3"U16_F" | %7"U32_F" | (ver, class, flow)\n", + IP6H_V(ip6hdr), + IP6H_TC(ip6hdr), + IP6H_FL(ip6hdr))); + LWIP_DEBUGF(IP6_DEBUG, ("+-------------------------------+\n")); + LWIP_DEBUGF(IP6_DEBUG, ("| %5"U16_F" | %3"U16_F" | %3"U16_F" | (plen, nexth, hopl)\n", + IP6H_PLEN(ip6hdr), + IP6H_NEXTH(ip6hdr), + IP6H_HOPLIM(ip6hdr))); + LWIP_DEBUGF(IP6_DEBUG, ("+-------------------------------+\n")); + LWIP_DEBUGF(IP6_DEBUG, ("| %4"X32_F" | %4"X32_F" | %4"X32_F" | %4"X32_F" | (src)\n", + IP6_ADDR_BLOCK1(&(ip6hdr->src)), + IP6_ADDR_BLOCK2(&(ip6hdr->src)), + IP6_ADDR_BLOCK3(&(ip6hdr->src)), + IP6_ADDR_BLOCK4(&(ip6hdr->src)))); + LWIP_DEBUGF(IP6_DEBUG, ("| %4"X32_F" | %4"X32_F" | %4"X32_F" | %4"X32_F" |\n", + IP6_ADDR_BLOCK5(&(ip6hdr->src)), + IP6_ADDR_BLOCK6(&(ip6hdr->src)), + IP6_ADDR_BLOCK7(&(ip6hdr->src)), + IP6_ADDR_BLOCK8(&(ip6hdr->src)))); + LWIP_DEBUGF(IP6_DEBUG, ("+-------------------------------+\n")); + LWIP_DEBUGF(IP6_DEBUG, ("| %4"X32_F" | %4"X32_F" | %4"X32_F" | %4"X32_F" | (dest)\n", + IP6_ADDR_BLOCK1(&(ip6hdr->dest)), + IP6_ADDR_BLOCK2(&(ip6hdr->dest)), + IP6_ADDR_BLOCK3(&(ip6hdr->dest)), + IP6_ADDR_BLOCK4(&(ip6hdr->dest)))); + LWIP_DEBUGF(IP6_DEBUG, ("| %4"X32_F" | %4"X32_F" | %4"X32_F" | %4"X32_F" |\n", + IP6_ADDR_BLOCK5(&(ip6hdr->dest)), + IP6_ADDR_BLOCK6(&(ip6hdr->dest)), + IP6_ADDR_BLOCK7(&(ip6hdr->dest)), + IP6_ADDR_BLOCK8(&(ip6hdr->dest)))); + LWIP_DEBUGF(IP6_DEBUG, ("+-------------------------------+\n")); +} +#endif /* IP6_DEBUG */ + +#endif /* LWIP_IPV6 */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv6/ip6_addr.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv6/ip6_addr.c new file mode 100644 index 0000000000000000000000000000000000000000..687c02f76fd5873b7d35d64e08020909189430d4 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv6/ip6_addr.c @@ -0,0 +1,343 @@ +/** + * @file + * + * IPv6 addresses. + */ + +/* + * Copyright (c) 2010 Inico Technologies Ltd. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Ivan Delamer + * + * Functions for handling IPv6 addresses. + * + * Please coordinate changes and requests with Ivan Delamer + * + */ + +#include "lwip/opt.h" + +#if LWIP_IPV6 /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/ip_addr.h" +#include "lwip/def.h" + +#include + +#if LWIP_IPV4 +#include "lwip/ip4_addr.h" /* for ip6addr_aton to handle IPv4-mapped addresses */ +#endif /* LWIP_IPV4 */ + +/* used by IP6_ADDR_ANY(6) in ip6_addr.h */ +const ip_addr_t ip6_addr_any = IPADDR6_INIT(0ul, 0ul, 0ul, 0ul); + +#define lwip_xchar(i) ((char)((i) < 10 ? '0' + (i) : 'A' + (i) - 10)) + +/** + * Check whether "cp" is a valid ascii representation + * of an IPv6 address and convert to a binary address. + * Returns 1 if the address is valid, 0 if not. + * + * @param cp IPv6 address in ascii representation (e.g. "FF01::1") + * @param addr pointer to which to save the ip address in network order + * @return 1 if cp could be converted to addr, 0 on failure + */ +int +ip6addr_aton(const char *cp, ip6_addr_t *addr) +{ + u32_t addr_index, zero_blocks, current_block_index, current_block_value; + const char *s; +#if LWIP_IPV4 + int check_ipv4_mapped = 0; +#endif /* LWIP_IPV4 */ + + /* Count the number of colons, to count the number of blocks in a "::" sequence + zero_blocks may be 1 even if there are no :: sequences */ + zero_blocks = 8; + for (s = cp; *s != 0; s++) { + if (*s == ':') { + zero_blocks--; +#if LWIP_IPV4 + } else if (*s == '.') { + if ((zero_blocks == 5) ||(zero_blocks == 2)) { + check_ipv4_mapped = 1; + /* last block could be the start of an IPv4 address */ + zero_blocks--; + } else { + /* invalid format */ + return 0; + } + break; +#endif /* LWIP_IPV4 */ + } else if (!lwip_isxdigit(*s)) { + break; + } + } + + /* parse each block */ + addr_index = 0; + current_block_index = 0; + current_block_value = 0; + for (s = cp; *s != 0; s++) { + if (*s == ':') { + if (addr) { + if (current_block_index & 0x1) { + addr->addr[addr_index++] |= current_block_value; + } + else { + addr->addr[addr_index] = current_block_value << 16; + } + } + current_block_index++; +#if LWIP_IPV4 + if (check_ipv4_mapped) { + if (current_block_index == 6) { + ip4_addr_t ip4; + int ret = ip4addr_aton(s + 1, &ip4); + if (ret) { + if (addr) { + addr->addr[3] = lwip_htonl(ip4.addr); + current_block_index++; + goto fix_byte_order_and_return; + } + return 1; + } + } + } +#endif /* LWIP_IPV4 */ + current_block_value = 0; + if (current_block_index > 7) { + /* address too long! */ + return 0; + } + if (s[1] == ':') { + if (s[2] == ':') { + /* invalid format: three successive colons */ + return 0; + } + s++; + /* "::" found, set zeros */ + while (zero_blocks > 0) { + zero_blocks--; + if (current_block_index & 0x1) { + addr_index++; + } else { + if (addr) { + addr->addr[addr_index] = 0; + } + } + current_block_index++; + if (current_block_index > 7) { + /* address too long! */ + return 0; + } + } + } + } else if (lwip_isxdigit(*s)) { + /* add current digit */ + current_block_value = (current_block_value << 4) + + (lwip_isdigit(*s) ? (u32_t)(*s - '0') : + (u32_t)(10 + (lwip_islower(*s) ? *s - 'a' : *s - 'A'))); + } else { + /* unexpected digit, space? CRLF? */ + break; + } + } + + if (addr) { + if (current_block_index & 0x1) { + addr->addr[addr_index++] |= current_block_value; + } + else { + addr->addr[addr_index] = current_block_value << 16; + } +#if LWIP_IPV4 +fix_byte_order_and_return: +#endif + /* convert to network byte order. */ + for (addr_index = 0; addr_index < 4; addr_index++) { + addr->addr[addr_index] = lwip_htonl(addr->addr[addr_index]); + } + + ip6_addr_clear_zone(addr); + } + + if (current_block_index != 7) { + return 0; + } + + return 1; +} + +/** + * Convert numeric IPv6 address into ASCII representation. + * returns ptr to static buffer; not reentrant! + * + * @param addr ip6 address in network order to convert + * @return pointer to a global static (!) buffer that holds the ASCII + * representation of addr + */ +char * +ip6addr_ntoa(const ip6_addr_t *addr) +{ + static char str[40]; + return ip6addr_ntoa_r(addr, str, 40); +} + +/** + * Same as ipaddr_ntoa, but reentrant since a user-supplied buffer is used. + * + * @param addr ip6 address in network order to convert + * @param buf target buffer where the string is stored + * @param buflen length of buf + * @return either pointer to buf which now holds the ASCII + * representation of addr or NULL if buf was too small + */ +char * +ip6addr_ntoa_r(const ip6_addr_t *addr, char *buf, int buflen) +{ + u32_t current_block_index, current_block_value, next_block_value; + s32_t i; + u8_t zero_flag, empty_block_flag; + +#if LWIP_IPV4 + if (ip6_addr_isipv4mappedipv6(addr)) { + /* This is an IPv4 mapped address */ + ip4_addr_t addr4; + char *ret; +#define IP4MAPPED_HEADER "::FFFF:" + char *buf_ip4 = buf + sizeof(IP4MAPPED_HEADER) - 1; + int buflen_ip4 = buflen - sizeof(IP4MAPPED_HEADER) + 1; + if (buflen < (int)sizeof(IP4MAPPED_HEADER)) { + return NULL; + } + memcpy(buf, IP4MAPPED_HEADER, sizeof(IP4MAPPED_HEADER)); + addr4.addr = addr->addr[3]; + ret = ip4addr_ntoa_r(&addr4, buf_ip4, buflen_ip4); + if (ret != buf_ip4) { + return NULL; + } + return buf; + } +#endif /* LWIP_IPV4 */ + i = 0; + empty_block_flag = 0; /* used to indicate a zero chain for "::' */ + + for (current_block_index = 0; current_block_index < 8; current_block_index++) { + /* get the current 16-bit block */ + current_block_value = lwip_htonl(addr->addr[current_block_index >> 1]); + if ((current_block_index & 0x1) == 0) { + current_block_value = current_block_value >> 16; + } + current_block_value &= 0xffff; + + /* Check for empty block. */ + if (current_block_value == 0) { + if (current_block_index == 7 && empty_block_flag == 1) { + /* special case, we must render a ':' for the last block. */ + buf[i++] = ':'; + if (i >= buflen) { + return NULL; + } + break; + } + if (empty_block_flag == 0) { + /* generate empty block "::", but only if more than one contiguous zero block, + * according to current formatting suggestions RFC 5952. */ + next_block_value = lwip_htonl(addr->addr[(current_block_index + 1) >> 1]); + if ((current_block_index & 0x1) == 0x01) { + next_block_value = next_block_value >> 16; + } + next_block_value &= 0xffff; + if (next_block_value == 0) { + empty_block_flag = 1; + buf[i++] = ':'; + if (i >= buflen) { + return NULL; + } + continue; /* move on to next block. */ + } + } else if (empty_block_flag == 1) { + /* move on to next block. */ + continue; + } + } else if (empty_block_flag == 1) { + /* Set this flag value so we don't produce multiple empty blocks. */ + empty_block_flag = 2; + } + + if (current_block_index > 0) { + buf[i++] = ':'; + if (i >= buflen) { + return NULL; + } + } + + if ((current_block_value & 0xf000) == 0) { + zero_flag = 1; + } else { + buf[i++] = lwip_xchar(((current_block_value & 0xf000) >> 12)); + zero_flag = 0; + if (i >= buflen) { + return NULL; + } + } + + if (((current_block_value & 0xf00) == 0) && (zero_flag)) { + /* do nothing */ + } else { + buf[i++] = lwip_xchar(((current_block_value & 0xf00) >> 8)); + zero_flag = 0; + if (i >= buflen) { + return NULL; + } + } + + if (((current_block_value & 0xf0) == 0) && (zero_flag)) { + /* do nothing */ + } + else { + buf[i++] = lwip_xchar(((current_block_value & 0xf0) >> 4)); + zero_flag = 0; + if (i >= buflen) { + return NULL; + } + } + + buf[i++] = lwip_xchar((current_block_value & 0xf)); + if (i >= buflen) { + return NULL; + } + } + + buf[i] = 0; + + return buf; +} + +#endif /* LWIP_IPV6 */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv6/ip6_frag.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv6/ip6_frag.c new file mode 100644 index 0000000000000000000000000000000000000000..d6c5d223c834225275f55fc2cc02d913d7150cd7 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv6/ip6_frag.c @@ -0,0 +1,862 @@ +/** + * @file + * + * IPv6 fragmentation and reassembly. + */ + +/* + * Copyright (c) 2010 Inico Technologies Ltd. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Ivan Delamer + * + * + * Please coordinate changes and requests with Ivan Delamer + * + */ + +#include "lwip/opt.h" +#include "lwip/ip6_frag.h" +#include "lwip/ip6.h" +#include "lwip/icmp6.h" +#include "lwip/nd6.h" +#include "lwip/ip.h" + +#include "lwip/pbuf.h" +#include "lwip/memp.h" +#include "lwip/stats.h" + +#include + +#if LWIP_IPV6 && LWIP_IPV6_REASS /* don't build if not configured for use in lwipopts.h */ + + +/** Setting this to 0, you can turn off checking the fragments for overlapping + * regions. The code gets a little smaller. Only use this if you know that + * overlapping won't occur on your network! */ +#ifndef IP_REASS_CHECK_OVERLAP +#define IP_REASS_CHECK_OVERLAP 1 +#endif /* IP_REASS_CHECK_OVERLAP */ + +/** Set to 0 to prevent freeing the oldest datagram when the reassembly buffer is + * full (IP_REASS_MAX_PBUFS pbufs are enqueued). The code gets a little smaller. + * Datagrams will be freed by timeout only. Especially useful when MEMP_NUM_REASSDATA + * is set to 1, so one datagram can be reassembled at a time, only. */ +#ifndef IP_REASS_FREE_OLDEST +#define IP_REASS_FREE_OLDEST 1 +#endif /* IP_REASS_FREE_OLDEST */ + +#if IPV6_FRAG_COPYHEADER +/* The number of bytes we need to "borrow" from (i.e., overwrite in) the header + * that precedes the fragment header for reassembly pruposes. */ +#define IPV6_FRAG_REQROOM ((s16_t)(sizeof(struct ip6_reass_helper) - IP6_FRAG_HLEN)) +#endif + +#define IP_REASS_FLAG_LASTFRAG 0x01 + +/** This is a helper struct which holds the starting + * offset and the ending offset of this fragment to + * easily chain the fragments. + * It has the same packing requirements as the IPv6 header, since it replaces + * the Fragment Header in memory in incoming fragments to keep + * track of the various fragments. + */ +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct ip6_reass_helper { + PACK_STRUCT_FIELD(struct pbuf *next_pbuf); + PACK_STRUCT_FIELD(u16_t start); + PACK_STRUCT_FIELD(u16_t end); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +/* static variables */ +static struct ip6_reassdata *reassdatagrams; +static u16_t ip6_reass_pbufcount; + +/* Forward declarations. */ +static void ip6_reass_free_complete_datagram(struct ip6_reassdata *ipr); +#if IP_REASS_FREE_OLDEST +static void ip6_reass_remove_oldest_datagram(struct ip6_reassdata *ipr, int pbufs_needed); +#endif /* IP_REASS_FREE_OLDEST */ + +void +ip6_reass_tmr(void) +{ + struct ip6_reassdata *r, *tmp; + +#if !IPV6_FRAG_COPYHEADER + LWIP_ASSERT("sizeof(struct ip6_reass_helper) <= IP6_FRAG_HLEN, set IPV6_FRAG_COPYHEADER to 1", + sizeof(struct ip6_reass_helper) <= IP6_FRAG_HLEN); +#endif /* !IPV6_FRAG_COPYHEADER */ + + r = reassdatagrams; + while (r != NULL) { + /* Decrement the timer. Once it reaches 0, + * clean up the incomplete fragment assembly */ + if (r->timer > 0) { + r->timer--; + r = r->next; + } else { + /* reassembly timed out */ + tmp = r; + /* get the next pointer before freeing */ + r = r->next; + /* free the helper struct and all enqueued pbufs */ + ip6_reass_free_complete_datagram(tmp); + } + } +} + +/** + * Free a datagram (struct ip6_reassdata) and all its pbufs. + * Updates the total count of enqueued pbufs (ip6_reass_pbufcount), + * sends an ICMP time exceeded packet. + * + * @param ipr datagram to free + */ +static void +ip6_reass_free_complete_datagram(struct ip6_reassdata *ipr) +{ + struct ip6_reassdata *prev; + u16_t pbufs_freed = 0; + u16_t clen; + struct pbuf *p; + struct ip6_reass_helper *iprh; + +#if LWIP_ICMP6 + iprh = (struct ip6_reass_helper *)ipr->p->payload; + if (iprh->start == 0) { + /* The first fragment was received, send ICMP time exceeded. */ + /* First, de-queue the first pbuf from r->p. */ + p = ipr->p; + ipr->p = iprh->next_pbuf; + /* Restore the part that we've overwritten with our helper structure, or we + * might send garbage (and disclose a pointer) in the ICMPv6 reply. */ + MEMCPY(p->payload, ipr->orig_hdr, sizeof(iprh)); + /* Then, move back to the original ipv6 header (we are now pointing to Fragment header). + This cannot fail since we already checked when receiving this fragment. */ + if (pbuf_header_force(p, (s16_t)((u8_t*)p->payload - (u8_t*)ipr->iphdr))) { + LWIP_ASSERT("ip6_reass_free: moving p->payload to ip6 header failed\n", 0); + } + else { + /* Reconstruct the zoned source and destination addresses, so that we do + * not end up sending the ICMP response over the wrong link. */ + ip6_addr_t src_addr, dest_addr; + ip6_addr_copy_from_packed(src_addr, IPV6_FRAG_SRC(ipr)); + ip6_addr_set_zone(&src_addr, ipr->src_zone); + ip6_addr_copy_from_packed(dest_addr, IPV6_FRAG_DEST(ipr)); + ip6_addr_set_zone(&dest_addr, ipr->dest_zone); + /* Send the actual ICMP response. */ + icmp6_time_exceeded_with_addrs(p, ICMP6_TE_FRAG, &src_addr, &dest_addr); + } + clen = pbuf_clen(p); + LWIP_ASSERT("pbufs_freed + clen <= 0xffff", pbufs_freed + clen <= 0xffff); + pbufs_freed = (u16_t)(pbufs_freed + clen); + pbuf_free(p); + } +#endif /* LWIP_ICMP6 */ + + /* First, free all received pbufs. The individual pbufs need to be released + separately as they have not yet been chained */ + p = ipr->p; + while (p != NULL) { + struct pbuf *pcur; + iprh = (struct ip6_reass_helper *)p->payload; + pcur = p; + /* get the next pointer before freeing */ + p = iprh->next_pbuf; + clen = pbuf_clen(pcur); + LWIP_ASSERT("pbufs_freed + clen <= 0xffff", pbufs_freed + clen <= 0xffff); + pbufs_freed = (u16_t)(pbufs_freed + clen); + pbuf_free(pcur); + } + + /* Then, unchain the struct ip6_reassdata from the list and free it. */ + if (ipr == reassdatagrams) { + reassdatagrams = ipr->next; + } else { + prev = reassdatagrams; + while (prev != NULL) { + if (prev->next == ipr) { + break; + } + prev = prev->next; + } + if (prev != NULL) { + prev->next = ipr->next; + } + } + memp_free(MEMP_IP6_REASSDATA, ipr); + + /* Finally, update number of pbufs in reassembly queue */ + LWIP_ASSERT("ip_reass_pbufcount >= clen", ip6_reass_pbufcount >= pbufs_freed); + ip6_reass_pbufcount = (u16_t)(ip6_reass_pbufcount - pbufs_freed); +} + +#if IP_REASS_FREE_OLDEST +/** + * Free the oldest datagram to make room for enqueueing new fragments. + * The datagram ipr is not freed! + * + * @param ipr ip6_reassdata for the current fragment + * @param pbufs_needed number of pbufs needed to enqueue + * (used for freeing other datagrams if not enough space) + */ +static void +ip6_reass_remove_oldest_datagram(struct ip6_reassdata *ipr, int pbufs_needed) +{ + struct ip6_reassdata *r, *oldest; + + /* Free datagrams until being allowed to enqueue 'pbufs_needed' pbufs, + * but don't free the current datagram! */ + do { + r = oldest = reassdatagrams; + while (r != NULL) { + if (r != ipr) { + if (r->timer <= oldest->timer) { + /* older than the previous oldest */ + oldest = r; + } + } + r = r->next; + } + if (oldest == ipr) { + /* nothing to free, ipr is the only element on the list */ + return; + } + if (oldest != NULL) { + ip6_reass_free_complete_datagram(oldest); + } + } while (((ip6_reass_pbufcount + pbufs_needed) > IP_REASS_MAX_PBUFS) && (reassdatagrams != NULL)); +} +#endif /* IP_REASS_FREE_OLDEST */ + +/** + * Reassembles incoming IPv6 fragments into an IPv6 datagram. + * + * @param p points to the IPv6 Fragment Header + * @return NULL if reassembly is incomplete, pbuf pointing to + * IPv6 Header if reassembly is complete + */ +struct pbuf * +ip6_reass(struct pbuf *p) +{ + struct ip6_reassdata *ipr, *ipr_prev; + struct ip6_reass_helper *iprh, *iprh_tmp, *iprh_prev=NULL; + struct ip6_frag_hdr *frag_hdr; + u16_t offset, len, start, end; + ptrdiff_t hdrdiff; + u16_t clen; + u8_t valid = 1; + struct pbuf *q, *next_pbuf; + + IP6_FRAG_STATS_INC(ip6_frag.recv); + + /* ip6_frag_hdr must be in the first pbuf, not chained. Checked by caller. */ + LWIP_ASSERT("IPv6 fragment header does not fit in first pbuf", + p->len >= sizeof(struct ip6_frag_hdr)); + + frag_hdr = (struct ip6_frag_hdr *) p->payload; + + clen = pbuf_clen(p); + + offset = lwip_ntohs(frag_hdr->_fragment_offset); + + /* Calculate fragment length from IPv6 payload length. + * Adjust for headers before Fragment Header. + * And finally adjust by Fragment Header length. */ + len = lwip_ntohs(ip6_current_header()->_plen); + hdrdiff = (u8_t*)p->payload - (const u8_t*)ip6_current_header(); + LWIP_ASSERT("not a valid pbuf (ip6_input check missing?)", hdrdiff <= 0xFFFF); + LWIP_ASSERT("not a valid pbuf (ip6_input check missing?)", hdrdiff >= IP6_HLEN); + hdrdiff -= IP6_HLEN; + hdrdiff += IP6_FRAG_HLEN; + if (hdrdiff > len) { + IP6_FRAG_STATS_INC(ip6_frag.proterr); + goto nullreturn; + } + len = (u16_t)(len - hdrdiff); + start = (offset & IP6_FRAG_OFFSET_MASK); + if (start > (0xFFFF - len)) { + /* u16_t overflow, cannot handle this */ + IP6_FRAG_STATS_INC(ip6_frag.proterr); + goto nullreturn; + } + + /* Look for the datagram the fragment belongs to in the current datagram queue, + * remembering the previous in the queue for later dequeueing. */ + for (ipr = reassdatagrams, ipr_prev = NULL; ipr != NULL; ipr = ipr->next) { + /* Check if the incoming fragment matches the one currently present + in the reassembly buffer. If so, we proceed with copying the + fragment into the buffer. */ + if ((frag_hdr->_identification == ipr->identification) && + ip6_addr_cmp_packed(ip6_current_src_addr(), &(IPV6_FRAG_SRC(ipr)), ipr->src_zone) && + ip6_addr_cmp_packed(ip6_current_dest_addr(), &(IPV6_FRAG_DEST(ipr)), ipr->dest_zone)) { + IP6_FRAG_STATS_INC(ip6_frag.cachehit); + break; + } + ipr_prev = ipr; + } + + if (ipr == NULL) { + /* Enqueue a new datagram into the datagram queue */ + ipr = (struct ip6_reassdata *)memp_malloc(MEMP_IP6_REASSDATA); + if (ipr == NULL) { +#if IP_REASS_FREE_OLDEST + /* Make room and try again. */ + ip6_reass_remove_oldest_datagram(ipr, clen); + ipr = (struct ip6_reassdata *)memp_malloc(MEMP_IP6_REASSDATA); + if (ipr != NULL) { + /* re-search ipr_prev since it might have been removed */ + for (ipr_prev = reassdatagrams; ipr_prev != NULL; ipr_prev = ipr_prev->next) { + if (ipr_prev->next == ipr) { + break; + } + } + } else +#endif /* IP_REASS_FREE_OLDEST */ + { + IP6_FRAG_STATS_INC(ip6_frag.memerr); + goto nullreturn; + } + } + + memset(ipr, 0, sizeof(struct ip6_reassdata)); + ipr->timer = IPV6_REASS_MAXAGE; + + /* enqueue the new structure to the front of the list */ + ipr->next = reassdatagrams; + reassdatagrams = ipr; + + /* Use the current IPv6 header for src/dest address reference. + * Eventually, we will replace it when we get the first fragment + * (it might be this one, in any case, it is done later). */ + /* need to use the none-const pointer here: */ + ipr->iphdr = ip_data.current_ip6_header; +#if IPV6_FRAG_COPYHEADER + MEMCPY(&ipr->src, &ip6_current_header()->src, sizeof(ipr->src)); + MEMCPY(&ipr->dest, &ip6_current_header()->dest, sizeof(ipr->dest)); +#endif /* IPV6_FRAG_COPYHEADER */ +#if LWIP_IPV6_SCOPES + /* Also store the address zone information. + * @todo It is possible that due to netif destruction and recreation, the + * stored zones end up resolving to a different interface. In that case, we + * risk sending a "time exceeded" ICMP response over the wrong link. + * Ideally, netif destruction would clean up matching pending reassembly + * structures, but custom zone mappings would make that non-trivial. */ + ipr->src_zone = ip6_addr_zone(ip6_current_src_addr()); + ipr->dest_zone = ip6_addr_zone(ip6_current_dest_addr()); +#endif /* LWIP_IPV6_SCOPES */ + /* copy the fragmented packet id. */ + ipr->identification = frag_hdr->_identification; + + /* copy the nexth field */ + ipr->nexth = frag_hdr->_nexth; + } + + /* Check if we are allowed to enqueue more datagrams. */ + if ((ip6_reass_pbufcount + clen) > IP_REASS_MAX_PBUFS) { +#if IP_REASS_FREE_OLDEST + ip6_reass_remove_oldest_datagram(ipr, clen); + if ((ip6_reass_pbufcount + clen) <= IP_REASS_MAX_PBUFS) { + /* re-search ipr_prev since it might have been removed */ + for (ipr_prev = reassdatagrams; ipr_prev != NULL; ipr_prev = ipr_prev->next) { + if (ipr_prev->next == ipr) { + break; + } + } + } else +#endif /* IP_REASS_FREE_OLDEST */ + { + /* @todo: send ICMPv6 time exceeded here? */ + /* drop this pbuf */ + IP6_FRAG_STATS_INC(ip6_frag.memerr); + goto nullreturn; + } + } + + /* Overwrite Fragment Header with our own helper struct. */ +#if IPV6_FRAG_COPYHEADER + if (IPV6_FRAG_REQROOM > 0) { + /* Make room for struct ip6_reass_helper (only required if sizeof(void*) > 4). + This cannot fail since we already checked when receiving this fragment. */ + u8_t hdrerr = pbuf_header_force(p, IPV6_FRAG_REQROOM); + LWIP_UNUSED_ARG(hdrerr); /* in case of LWIP_NOASSERT */ + LWIP_ASSERT("no room for struct ip6_reass_helper", hdrerr == 0); + } +#else /* IPV6_FRAG_COPYHEADER */ + LWIP_ASSERT("sizeof(struct ip6_reass_helper) <= IP6_FRAG_HLEN, set IPV6_FRAG_COPYHEADER to 1", + sizeof(struct ip6_reass_helper) <= IP6_FRAG_HLEN); +#endif /* IPV6_FRAG_COPYHEADER */ + + /* Prepare the pointer to the helper structure, and its initial values. + * Do not yet write to the structure itself, as we still have to make a + * backup of the original data, and we should not do that until we know for + * sure that we are going to add this packet to the list. */ + iprh = (struct ip6_reass_helper *)p->payload; + next_pbuf = NULL; + end = (u16_t)(start + len); + + /* find the right place to insert this pbuf */ + /* Iterate through until we either get to the end of the list (append), + * or we find on with a larger offset (insert). */ + for (q = ipr->p; q != NULL;) { + iprh_tmp = (struct ip6_reass_helper*)q->payload; + if (start < iprh_tmp->start) { +#if IP_REASS_CHECK_OVERLAP + if (end > iprh_tmp->start) { + /* fragment overlaps with following, throw away */ + IP6_FRAG_STATS_INC(ip6_frag.proterr); + goto nullreturn; + } + if (iprh_prev != NULL) { + if (start < iprh_prev->end) { + /* fragment overlaps with previous, throw away */ + IP6_FRAG_STATS_INC(ip6_frag.proterr); + goto nullreturn; + } + } +#endif /* IP_REASS_CHECK_OVERLAP */ + /* the new pbuf should be inserted before this */ + next_pbuf = q; + if (iprh_prev != NULL) { + /* not the fragment with the lowest offset */ + iprh_prev->next_pbuf = p; + } else { + /* fragment with the lowest offset */ + ipr->p = p; + } + break; + } else if (start == iprh_tmp->start) { + /* received the same datagram twice: no need to keep the datagram */ + goto nullreturn; +#if IP_REASS_CHECK_OVERLAP + } else if (start < iprh_tmp->end) { + /* overlap: no need to keep the new datagram */ + IP6_FRAG_STATS_INC(ip6_frag.proterr); + goto nullreturn; +#endif /* IP_REASS_CHECK_OVERLAP */ + } else { + /* Check if the fragments received so far have no gaps. */ + if (iprh_prev != NULL) { + if (iprh_prev->end != iprh_tmp->start) { + /* There is a fragment missing between the current + * and the previous fragment */ + valid = 0; + } + } + } + q = iprh_tmp->next_pbuf; + iprh_prev = iprh_tmp; + } + + /* If q is NULL, then we made it to the end of the list. Determine what to do now */ + if (q == NULL) { + if (iprh_prev != NULL) { + /* this is (for now), the fragment with the highest offset: + * chain it to the last fragment */ +#if IP_REASS_CHECK_OVERLAP + LWIP_ASSERT("check fragments don't overlap", iprh_prev->end <= start); +#endif /* IP_REASS_CHECK_OVERLAP */ + iprh_prev->next_pbuf = p; + if (iprh_prev->end != start) { + valid = 0; + } + } else { +#if IP_REASS_CHECK_OVERLAP + LWIP_ASSERT("no previous fragment, this must be the first fragment!", + ipr->p == NULL); +#endif /* IP_REASS_CHECK_OVERLAP */ + /* this is the first fragment we ever received for this ip datagram */ + ipr->p = p; + } + } + + /* Track the current number of pbufs current 'in-flight', in order to limit + the number of fragments that may be enqueued at any one time */ + ip6_reass_pbufcount = (u16_t)(ip6_reass_pbufcount + clen); + + /* Remember IPv6 header if this is the first fragment. */ + if (start == 0) { + /* need to use the none-const pointer here: */ + ipr->iphdr = ip_data.current_ip6_header; + /* Make a backup of the part of the packet data that we are about to + * overwrite, so that we can restore the original later. */ + MEMCPY(ipr->orig_hdr, p->payload, sizeof(*iprh)); + /* For IPV6_FRAG_COPYHEADER there is no need to copy src/dst again, as they + * will be the same as they were. With LWIP_IPV6_SCOPES, the same applies + * to the source/destination zones. */ + } + /* Only after the backup do we get to fill in the actual helper structure. */ + iprh->next_pbuf = next_pbuf; + iprh->start = start; + iprh->end = end; + + /* If this is the last fragment, calculate total packet length. */ + if ((offset & IP6_FRAG_MORE_FLAG) == 0) { + ipr->datagram_len = iprh->end; + } + + /* Additional validity tests: we have received first and last fragment. */ + iprh_tmp = (struct ip6_reass_helper*)ipr->p->payload; + if (iprh_tmp->start != 0) { + valid = 0; + } + if (ipr->datagram_len == 0) { + valid = 0; + } + + /* Final validity test: no gaps between current and last fragment. */ + iprh_prev = iprh; + q = iprh->next_pbuf; + while ((q != NULL) && valid) { + iprh = (struct ip6_reass_helper*)q->payload; + if (iprh_prev->end != iprh->start) { + valid = 0; + break; + } + iprh_prev = iprh; + q = iprh->next_pbuf; + } + + if (valid) { + /* All fragments have been received */ + struct ip6_hdr* iphdr_ptr; + + /* chain together the pbufs contained within the ip6_reassdata list. */ + iprh = (struct ip6_reass_helper*) ipr->p->payload; + while (iprh != NULL) { + next_pbuf = iprh->next_pbuf; + if (next_pbuf != NULL) { + /* Save next helper struct (will be hidden in next step). */ + iprh_tmp = (struct ip6_reass_helper*)next_pbuf->payload; + + /* hide the fragment header for every succeeding fragment */ + pbuf_remove_header(next_pbuf, IP6_FRAG_HLEN); +#if IPV6_FRAG_COPYHEADER + if (IPV6_FRAG_REQROOM > 0) { + /* hide the extra bytes borrowed from ip6_hdr for struct ip6_reass_helper */ + u8_t hdrerr = pbuf_remove_header(next_pbuf, IPV6_FRAG_REQROOM); + LWIP_UNUSED_ARG(hdrerr); /* in case of LWIP_NOASSERT */ + LWIP_ASSERT("no room for struct ip6_reass_helper", hdrerr == 0); + } +#endif + pbuf_cat(ipr->p, next_pbuf); + } + else { + iprh_tmp = NULL; + } + + iprh = iprh_tmp; + } + + /* Get the first pbuf. */ + p = ipr->p; + +#if IPV6_FRAG_COPYHEADER + if (IPV6_FRAG_REQROOM > 0) { + u8_t hdrerr; + /* Restore (only) the bytes that we overwrote beyond the fragment header. + * Those bytes may belong to either the IPv6 header or an extension + * header placed before the fragment header. */ + MEMCPY(p->payload, ipr->orig_hdr, IPV6_FRAG_REQROOM); + /* get back room for struct ip6_reass_helper (only required if sizeof(void*) > 4) */ + hdrerr = pbuf_remove_header(p, IPV6_FRAG_REQROOM); + LWIP_UNUSED_ARG(hdrerr); /* in case of LWIP_NOASSERT */ + LWIP_ASSERT("no room for struct ip6_reass_helper", hdrerr == 0); + } +#endif + + /* We need to get rid of the fragment header itself, which is somewhere in + * the middle of the packet (but still in the first pbuf of the chain). + * Getting rid of the header is required by RFC 2460 Sec. 4.5 and necessary + * in order to be able to reassemble packets that are close to full size + * (i.e., around 65535 bytes). We simply move up all the headers before the + * fragment header, including the IPv6 header, and adjust the payload start + * accordingly. This works because all these headers are in the first pbuf + * of the chain, and because the caller adjusts all its pointers on + * successful reassembly. */ + MEMMOVE((u8_t*)ipr->iphdr + sizeof(struct ip6_frag_hdr), ipr->iphdr, + (size_t)((u8_t*)p->payload - (u8_t*)ipr->iphdr)); + + /* This is where the IPv6 header is now. */ + iphdr_ptr = (struct ip6_hdr*)((u8_t*)ipr->iphdr + + sizeof(struct ip6_frag_hdr)); + + /* Adjust datagram length by adding header lengths. */ + ipr->datagram_len = (u16_t)(ipr->datagram_len + ((u8_t*)p->payload - (u8_t*)iphdr_ptr) + - IP6_HLEN); + + /* Set payload length in ip header. */ + iphdr_ptr->_plen = lwip_htons(ipr->datagram_len); + + /* With the fragment header gone, we now need to adjust the next-header + * field of whatever header was originally before it. Since the packet made + * it through the original header processing routines at least up to the + * fragment header, we do not need any further sanity checks here. */ + if (IP6H_NEXTH(iphdr_ptr) == IP6_NEXTH_FRAGMENT) { + iphdr_ptr->_nexth = ipr->nexth; + } else { + u8_t *ptr = (u8_t *)iphdr_ptr + IP6_HLEN; + while (*ptr != IP6_NEXTH_FRAGMENT) { + ptr += 8 * (1 + ptr[1]); + } + *ptr = ipr->nexth; + } + + /* release the resources allocated for the fragment queue entry */ + if (reassdatagrams == ipr) { + /* it was the first in the list */ + reassdatagrams = ipr->next; + } else { + /* it wasn't the first, so it must have a valid 'prev' */ + LWIP_ASSERT("sanity check linked list", ipr_prev != NULL); + ipr_prev->next = ipr->next; + } + memp_free(MEMP_IP6_REASSDATA, ipr); + + /* adjust the number of pbufs currently queued for reassembly. */ + clen = pbuf_clen(p); + LWIP_ASSERT("ip6_reass_pbufcount >= clen", ip6_reass_pbufcount >= clen); + ip6_reass_pbufcount = (u16_t)(ip6_reass_pbufcount - clen); + + /* Move pbuf back to IPv6 header. This should never fail. */ + if (pbuf_header_force(p, (s16_t)((u8_t*)p->payload - (u8_t*)iphdr_ptr))) { + LWIP_ASSERT("ip6_reass: moving p->payload to ip6 header failed\n", 0); + pbuf_free(p); + return NULL; + } + + /* Return the pbuf chain */ + return p; + } + /* the datagram is not (yet?) reassembled completely */ + return NULL; + +nullreturn: + IP6_FRAG_STATS_INC(ip6_frag.drop); + pbuf_free(p); + return NULL; +} + +#endif /* LWIP_IPV6 && LWIP_IPV6_REASS */ + +#if LWIP_IPV6 && LWIP_IPV6_FRAG + +#if !LWIP_NETIF_TX_SINGLE_PBUF +/** Allocate a new struct pbuf_custom_ref */ +static struct pbuf_custom_ref* +ip6_frag_alloc_pbuf_custom_ref(void) +{ + return (struct pbuf_custom_ref*)memp_malloc(MEMP_FRAG_PBUF); +} + +/** Free a struct pbuf_custom_ref */ +static void +ip6_frag_free_pbuf_custom_ref(struct pbuf_custom_ref* p) +{ + LWIP_ASSERT("p != NULL", p != NULL); + memp_free(MEMP_FRAG_PBUF, p); +} + +/** Free-callback function to free a 'struct pbuf_custom_ref', called by + * pbuf_free. */ +static void +ip6_frag_free_pbuf_custom(struct pbuf *p) +{ + struct pbuf_custom_ref *pcr = (struct pbuf_custom_ref*)p; + LWIP_ASSERT("pcr != NULL", pcr != NULL); + LWIP_ASSERT("pcr == p", (void*)pcr == (void*)p); + if (pcr->original != NULL) { + pbuf_free(pcr->original); + } + ip6_frag_free_pbuf_custom_ref(pcr); +} +#endif /* !LWIP_NETIF_TX_SINGLE_PBUF */ + +/** + * Fragment an IPv6 datagram if too large for the netif or path MTU. + * + * Chop the datagram in MTU sized chunks and send them in order + * by pointing PBUF_REFs into p + * + * @param p ipv6 packet to send + * @param netif the netif on which to send + * @param dest destination ipv6 address to which to send + * + * @return ERR_OK if sent successfully, err_t otherwise + */ +err_t +ip6_frag(struct pbuf *p, struct netif *netif, const ip6_addr_t *dest) +{ + struct ip6_hdr *original_ip6hdr; + struct ip6_hdr *ip6hdr; + struct ip6_frag_hdr *frag_hdr; + struct pbuf *rambuf; +#if !LWIP_NETIF_TX_SINGLE_PBUF + struct pbuf *newpbuf; + u16_t newpbuflen = 0; + u16_t left_to_copy; +#endif + static u32_t identification; + u16_t left, cop; + const u16_t mtu = nd6_get_destination_mtu(dest, netif); + const u16_t nfb = (u16_t)((mtu - (IP6_HLEN + IP6_FRAG_HLEN)) & IP6_FRAG_OFFSET_MASK); + u16_t fragment_offset = 0; + u16_t last; + u16_t poff = IP6_HLEN; + + identification++; + + original_ip6hdr = (struct ip6_hdr *)p->payload; + + /* @todo we assume there are no options in the unfragmentable part (IPv6 header). */ + LWIP_ASSERT("p->tot_len >= IP6_HLEN", p->tot_len >= IP6_HLEN); + left = (u16_t)(p->tot_len - IP6_HLEN); + + while (left) { + last = (left <= nfb); + + /* Fill this fragment */ + cop = last ? left : nfb; + +#if LWIP_NETIF_TX_SINGLE_PBUF + rambuf = pbuf_alloc(PBUF_IP, cop + IP6_FRAG_HLEN, PBUF_RAM); + if (rambuf == NULL) { + IP6_FRAG_STATS_INC(ip6_frag.memerr); + return ERR_MEM; + } + LWIP_ASSERT("this needs a pbuf in one piece!", + (rambuf->len == rambuf->tot_len) && (rambuf->next == NULL)); + poff += pbuf_copy_partial(p, (u8_t*)rambuf->payload + IP6_FRAG_HLEN, cop, poff); + /* make room for the IP header */ + if (pbuf_add_header(rambuf, IP6_HLEN)) { + pbuf_free(rambuf); + IP6_FRAG_STATS_INC(ip6_frag.memerr); + return ERR_MEM; + } + /* fill in the IP header */ + SMEMCPY(rambuf->payload, original_ip6hdr, IP6_HLEN); + ip6hdr = (struct ip6_hdr *)rambuf->payload; + frag_hdr = (struct ip6_frag_hdr *)((u8_t*)rambuf->payload + IP6_HLEN); +#else + /* When not using a static buffer, create a chain of pbufs. + * The first will be a PBUF_RAM holding the link, IPv6, and Fragment header. + * The rest will be PBUF_REFs mirroring the pbuf chain to be fragged, + * but limited to the size of an mtu. + */ + rambuf = pbuf_alloc(PBUF_LINK, IP6_HLEN + IP6_FRAG_HLEN, PBUF_RAM); + if (rambuf == NULL) { + IP6_FRAG_STATS_INC(ip6_frag.memerr); + return ERR_MEM; + } + LWIP_ASSERT("this needs a pbuf in one piece!", + (p->len >= (IP6_HLEN))); + SMEMCPY(rambuf->payload, original_ip6hdr, IP6_HLEN); + ip6hdr = (struct ip6_hdr *)rambuf->payload; + frag_hdr = (struct ip6_frag_hdr *)((u8_t*)rambuf->payload + IP6_HLEN); + + /* Can just adjust p directly for needed offset. */ + p->payload = (u8_t *)p->payload + poff; + p->len = (u16_t)(p->len - poff); + p->tot_len = (u16_t)(p->tot_len - poff); + + left_to_copy = cop; + while (left_to_copy) { + struct pbuf_custom_ref *pcr; + newpbuflen = (left_to_copy < p->len) ? left_to_copy : p->len; + /* Is this pbuf already empty? */ + if (!newpbuflen) { + p = p->next; + continue; + } + pcr = ip6_frag_alloc_pbuf_custom_ref(); + if (pcr == NULL) { + pbuf_free(rambuf); + IP6_FRAG_STATS_INC(ip6_frag.memerr); + return ERR_MEM; + } + /* Mirror this pbuf, although we might not need all of it. */ + newpbuf = pbuf_alloced_custom(PBUF_RAW, newpbuflen, PBUF_REF, &pcr->pc, p->payload, newpbuflen); + if (newpbuf == NULL) { + ip6_frag_free_pbuf_custom_ref(pcr); + pbuf_free(rambuf); + IP6_FRAG_STATS_INC(ip6_frag.memerr); + return ERR_MEM; + } + pbuf_ref(p); + pcr->original = p; + pcr->pc.custom_free_function = ip6_frag_free_pbuf_custom; + + /* Add it to end of rambuf's chain, but using pbuf_cat, not pbuf_chain + * so that it is removed when pbuf_dechain is later called on rambuf. + */ + pbuf_cat(rambuf, newpbuf); + left_to_copy = (u16_t)(left_to_copy - newpbuflen); + if (left_to_copy) { + p = p->next; + } + } + poff = newpbuflen; +#endif /* LWIP_NETIF_TX_SINGLE_PBUF */ + + /* Set headers */ + frag_hdr->_nexth = original_ip6hdr->_nexth; + frag_hdr->reserved = 0; + frag_hdr->_fragment_offset = lwip_htons((u16_t)((fragment_offset & IP6_FRAG_OFFSET_MASK) | (last ? 0 : IP6_FRAG_MORE_FLAG))); + frag_hdr->_identification = lwip_htonl(identification); + + IP6H_NEXTH_SET(ip6hdr, IP6_NEXTH_FRAGMENT); + IP6H_PLEN_SET(ip6hdr, (u16_t)(cop + IP6_FRAG_HLEN)); + + /* No need for separate header pbuf - we allowed room for it in rambuf + * when allocated. + */ + IP6_FRAG_STATS_INC(ip6_frag.xmit); + netif->output_ip6(netif, rambuf, dest); + + /* Unfortunately we can't reuse rambuf - the hardware may still be + * using the buffer. Instead we free it (and the ensuing chain) and + * recreate it next time round the loop. If we're lucky the hardware + * will have already sent the packet, the free will really free, and + * there will be zero memory penalty. + */ + + pbuf_free(rambuf); + left = (u16_t)(left - cop); + fragment_offset = (u16_t)(fragment_offset + cop); + } + return ERR_OK; +} + +#endif /* LWIP_IPV6 && LWIP_IPV6_FRAG */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv6/mld6.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv6/mld6.c new file mode 100644 index 0000000000000000000000000000000000000000..6387d468ccb9ee9ba67aaaf5bf99e9cadadcb785 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv6/mld6.c @@ -0,0 +1,626 @@ +/** + * @file + * Multicast listener discovery + * + * @defgroup mld6 MLD6 + * @ingroup ip6 + * Multicast listener discovery for IPv6. Aims to be compliant with RFC 2710. + * No support for MLDv2.\n + * Note: The allnodes (ff01::1, ff02::1) group is assumed be received by your + * netif since it must always be received for correct IPv6 operation (e.g. SLAAC). + * Ensure the netif filters are configured accordingly!\n + * The netif flags also need NETIF_FLAG_MLD6 flag set to enable MLD6 on a + * netif ("netif->flags |= NETIF_FLAG_MLD6;").\n + * To be called from TCPIP thread. + */ + +/* + * Copyright (c) 2010 Inico Technologies Ltd. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Ivan Delamer + * + * + * Please coordinate changes and requests with Ivan Delamer + * + */ + +/* Based on igmp.c implementation of igmp v2 protocol */ + +#include "lwip/opt.h" + +#if LWIP_IPV6 && LWIP_IPV6_MLD /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/mld6.h" +#include "lwip/prot/mld6.h" +#include "lwip/icmp6.h" +#include "lwip/ip6.h" +#include "lwip/ip6_addr.h" +#include "lwip/ip.h" +#include "lwip/inet_chksum.h" +#include "lwip/pbuf.h" +#include "lwip/netif.h" +#include "lwip/memp.h" +#include "lwip/stats.h" + +#include + + +/* + * MLD constants + */ +#define MLD6_HL 1 +#define MLD6_JOIN_DELAYING_MEMBER_TMR_MS (500) + +#define MLD6_GROUP_NON_MEMBER 0 +#define MLD6_GROUP_DELAYING_MEMBER 1 +#define MLD6_GROUP_IDLE_MEMBER 2 + +/* Forward declarations. */ +static struct mld_group *mld6_new_group(struct netif *ifp, const ip6_addr_t *addr); +static err_t mld6_remove_group(struct netif *netif, struct mld_group *group); +static void mld6_delayed_report(struct mld_group *group, u16_t maxresp); +static void mld6_send(struct netif *netif, struct mld_group *group, u8_t type); + + +/** + * Stop MLD processing on interface + * + * @param netif network interface on which stop MLD processing + */ +err_t +mld6_stop(struct netif *netif) +{ + struct mld_group *group = netif_mld6_data(netif); + + netif_set_client_data(netif, LWIP_NETIF_CLIENT_DATA_INDEX_MLD6, NULL); + + while (group != NULL) { + struct mld_group *next = group->next; /* avoid use-after-free below */ + + /* disable the group at the MAC level */ + if (netif->mld_mac_filter != NULL) { + netif->mld_mac_filter(netif, &(group->group_address), NETIF_DEL_MAC_FILTER); + } + + /* free group */ + memp_free(MEMP_MLD6_GROUP, group); + + /* move to "next" */ + group = next; + } + return ERR_OK; +} + +/** + * Report MLD memberships for this interface + * + * @param netif network interface on which report MLD memberships + */ +void +mld6_report_groups(struct netif *netif) +{ + struct mld_group *group = netif_mld6_data(netif); + + while (group != NULL) { + mld6_delayed_report(group, MLD6_JOIN_DELAYING_MEMBER_TMR_MS); + group = group->next; + } +} + +/** + * Search for a group that is joined on a netif + * + * @param ifp the network interface for which to look + * @param addr the group ipv6 address to search for + * @return a struct mld_group* if the group has been found, + * NULL if the group wasn't found. + */ +struct mld_group * +mld6_lookfor_group(struct netif *ifp, const ip6_addr_t *addr) +{ + struct mld_group *group = netif_mld6_data(ifp); + + while (group != NULL) { + if (ip6_addr_cmp(&(group->group_address), addr)) { + return group; + } + group = group->next; + } + + return NULL; +} + + +/** + * create a new group + * + * @param ifp the network interface for which to create + * @param addr the new group ipv6 + * @return a struct mld_group*, + * NULL on memory error. + */ +static struct mld_group * +mld6_new_group(struct netif *ifp, const ip6_addr_t *addr) +{ + struct mld_group *group; + + group = (struct mld_group *)memp_malloc(MEMP_MLD6_GROUP); + if (group != NULL) { + ip6_addr_set(&(group->group_address), addr); + group->timer = 0; /* Not running */ + group->group_state = MLD6_GROUP_IDLE_MEMBER; + group->last_reporter_flag = 0; + group->use = 0; + group->next = netif_mld6_data(ifp); + + netif_set_client_data(ifp, LWIP_NETIF_CLIENT_DATA_INDEX_MLD6, group); + } + + return group; +} + +/** + * Remove a group from the mld_group_list, but do not free it yet + * + * @param group the group to remove + * @return ERR_OK if group was removed from the list, an err_t otherwise + */ +static err_t +mld6_remove_group(struct netif *netif, struct mld_group *group) +{ + err_t err = ERR_OK; + + /* Is it the first group? */ + if (netif_mld6_data(netif) == group) { + netif_set_client_data(netif, LWIP_NETIF_CLIENT_DATA_INDEX_MLD6, group->next); + } else { + /* look for group further down the list */ + struct mld_group *tmpGroup; + for (tmpGroup = netif_mld6_data(netif); tmpGroup != NULL; tmpGroup = tmpGroup->next) { + if (tmpGroup->next == group) { + tmpGroup->next = group->next; + break; + } + } + /* Group not find group */ + if (tmpGroup == NULL) { + err = ERR_ARG; + } + } + + return err; +} + + +/** + * Process an input MLD message. Called by icmp6_input. + * + * @param p the mld packet, p->payload pointing to the icmpv6 header + * @param inp the netif on which this packet was received + */ +void +mld6_input(struct pbuf *p, struct netif *inp) +{ + struct mld_header *mld_hdr; + struct mld_group *group; + + MLD6_STATS_INC(mld6.recv); + + /* Check that mld header fits in packet. */ + if (p->len < sizeof(struct mld_header)) { + /* @todo debug message */ + pbuf_free(p); + MLD6_STATS_INC(mld6.lenerr); + MLD6_STATS_INC(mld6.drop); + return; + } + + mld_hdr = (struct mld_header *)p->payload; + + switch (mld_hdr->type) { + case ICMP6_TYPE_MLQ: /* Multicast listener query. */ + /* Is it a general query? */ + if (ip6_addr_isallnodes_linklocal(ip6_current_dest_addr()) && + ip6_addr_isany(&(mld_hdr->multicast_address))) { + MLD6_STATS_INC(mld6.rx_general); + /* Report all groups, except all nodes group, and if-local groups. */ + group = netif_mld6_data(inp); + while (group != NULL) { + if ((!(ip6_addr_ismulticast_iflocal(&(group->group_address)))) && + (!(ip6_addr_isallnodes_linklocal(&(group->group_address))))) { + mld6_delayed_report(group, mld_hdr->max_resp_delay); + } + group = group->next; + } + } else { + /* Have we joined this group? + * We use IP6 destination address to have a memory aligned copy. + * mld_hdr->multicast_address should be the same. */ + MLD6_STATS_INC(mld6.rx_group); + group = mld6_lookfor_group(inp, ip6_current_dest_addr()); + if (group != NULL) { + /* Schedule a report. */ + mld6_delayed_report(group, mld_hdr->max_resp_delay); + } + } + break; /* ICMP6_TYPE_MLQ */ + case ICMP6_TYPE_MLR: /* Multicast listener report. */ + /* Have we joined this group? + * We use IP6 destination address to have a memory aligned copy. + * mld_hdr->multicast_address should be the same. */ + MLD6_STATS_INC(mld6.rx_report); + group = mld6_lookfor_group(inp, ip6_current_dest_addr()); + if (group != NULL) { + /* If we are waiting to report, cancel it. */ + if (group->group_state == MLD6_GROUP_DELAYING_MEMBER) { + group->timer = 0; /* stopped */ + group->group_state = MLD6_GROUP_IDLE_MEMBER; + group->last_reporter_flag = 0; + } + } + break; /* ICMP6_TYPE_MLR */ + case ICMP6_TYPE_MLD: /* Multicast listener done. */ + /* Do nothing, router will query us. */ + break; /* ICMP6_TYPE_MLD */ + default: + MLD6_STATS_INC(mld6.proterr); + MLD6_STATS_INC(mld6.drop); + break; + } + + pbuf_free(p); +} + +/** + * @ingroup mld6 + * Join a group on one or all network interfaces. + * + * If the group is to be joined on all interfaces, the given group address must + * not have a zone set (i.e., it must have its zone index set to IP6_NO_ZONE). + * If the group is to be joined on one particular interface, the given group + * address may or may not have a zone set. + * + * @param srcaddr ipv6 address (zoned) of the network interface which should + * join a new group. If IP6_ADDR_ANY6, join on all netifs + * @param groupaddr the ipv6 address of the group to join (possibly but not + * necessarily zoned) + * @return ERR_OK if group was joined on the netif(s), an err_t otherwise + */ +err_t +mld6_joingroup(const ip6_addr_t *srcaddr, const ip6_addr_t *groupaddr) +{ + err_t err = ERR_VAL; /* no matching interface */ + struct netif *netif; + + LWIP_ASSERT_CORE_LOCKED(); + + /* loop through netif's */ + NETIF_FOREACH(netif) { + /* Should we join this interface ? */ + if (ip6_addr_isany(srcaddr) || + netif_get_ip6_addr_match(netif, srcaddr) >= 0) { + err = mld6_joingroup_netif(netif, groupaddr); + if (err != ERR_OK) { + return err; + } + } + } + + return err; +} + +/** + * @ingroup mld6 + * Join a group on a network interface. + * + * @param netif the network interface which should join a new group. + * @param groupaddr the ipv6 address of the group to join (possibly but not + * necessarily zoned) + * @return ERR_OK if group was joined on the netif, an err_t otherwise + */ +err_t +mld6_joingroup_netif(struct netif *netif, const ip6_addr_t *groupaddr) +{ + struct mld_group *group; +#if LWIP_IPV6_SCOPES + ip6_addr_t ip6addr; + + /* If the address has a particular scope but no zone set, use the netif to + * set one now. Within the mld6 module, all addresses are properly zoned. */ + if (ip6_addr_lacks_zone(groupaddr, IP6_MULTICAST)) { + ip6_addr_set(&ip6addr, groupaddr); + ip6_addr_assign_zone(&ip6addr, IP6_MULTICAST, netif); + groupaddr = &ip6addr; + } + IP6_ADDR_ZONECHECK_NETIF(groupaddr, netif); +#endif /* LWIP_IPV6_SCOPES */ + + LWIP_ASSERT_CORE_LOCKED(); + + /* find group or create a new one if not found */ + group = mld6_lookfor_group(netif, groupaddr); + + if (group == NULL) { + /* Joining a new group. Create a new group entry. */ + group = mld6_new_group(netif, groupaddr); + if (group == NULL) { + return ERR_MEM; + } + + /* Activate this address on the MAC layer. */ + if (netif->mld_mac_filter != NULL) { + netif->mld_mac_filter(netif, groupaddr, NETIF_ADD_MAC_FILTER); + } + + /* Report our membership. */ + MLD6_STATS_INC(mld6.tx_report); + mld6_send(netif, group, ICMP6_TYPE_MLR); + mld6_delayed_report(group, MLD6_JOIN_DELAYING_MEMBER_TMR_MS); + } + + /* Increment group use */ + group->use++; + return ERR_OK; +} + +/** + * @ingroup mld6 + * Leave a group on a network interface. + * + * Zoning of address follows the same rules as @ref mld6_joingroup. + * + * @param srcaddr ipv6 address (zoned) of the network interface which should + * leave the group. If IP6_ADDR_ANY6, leave on all netifs + * @param groupaddr the ipv6 address of the group to leave (possibly, but not + * necessarily zoned) + * @return ERR_OK if group was left on the netif(s), an err_t otherwise + */ +err_t +mld6_leavegroup(const ip6_addr_t *srcaddr, const ip6_addr_t *groupaddr) +{ + err_t err = ERR_VAL; /* no matching interface */ + struct netif *netif; + + LWIP_ASSERT_CORE_LOCKED(); + + /* loop through netif's */ + NETIF_FOREACH(netif) { + /* Should we leave this interface ? */ + if (ip6_addr_isany(srcaddr) || + netif_get_ip6_addr_match(netif, srcaddr) >= 0) { + err_t res = mld6_leavegroup_netif(netif, groupaddr); + if (err != ERR_OK) { + /* Store this result if we have not yet gotten a success */ + err = res; + } + } + } + + return err; +} + +/** + * @ingroup mld6 + * Leave a group on a network interface. + * + * @param netif the network interface which should leave the group. + * @param groupaddr the ipv6 address of the group to leave (possibly, but not + * necessarily zoned) + * @return ERR_OK if group was left on the netif, an err_t otherwise + */ +err_t +mld6_leavegroup_netif(struct netif *netif, const ip6_addr_t *groupaddr) +{ + struct mld_group *group; +#if LWIP_IPV6_SCOPES + ip6_addr_t ip6addr; + + if (ip6_addr_lacks_zone(groupaddr, IP6_MULTICAST)) { + ip6_addr_set(&ip6addr, groupaddr); + ip6_addr_assign_zone(&ip6addr, IP6_MULTICAST, netif); + groupaddr = &ip6addr; + } + IP6_ADDR_ZONECHECK_NETIF(groupaddr, netif); +#endif /* LWIP_IPV6_SCOPES */ + + LWIP_ASSERT_CORE_LOCKED(); + + /* find group */ + group = mld6_lookfor_group(netif, groupaddr); + + if (group != NULL) { + /* Leave if there is no other use of the group */ + if (group->use <= 1) { + /* Remove the group from the list */ + mld6_remove_group(netif, group); + + /* If we are the last reporter for this group */ + if (group->last_reporter_flag) { + MLD6_STATS_INC(mld6.tx_leave); + mld6_send(netif, group, ICMP6_TYPE_MLD); + } + + /* Disable the group at the MAC level */ + if (netif->mld_mac_filter != NULL) { + netif->mld_mac_filter(netif, groupaddr, NETIF_DEL_MAC_FILTER); + } + + /* free group struct */ + memp_free(MEMP_MLD6_GROUP, group); + } else { + /* Decrement group use */ + group->use--; + } + + /* Left group */ + return ERR_OK; + } + + /* Group not found */ + return ERR_VAL; +} + + +/** + * Periodic timer for mld processing. Must be called every + * MLD6_TMR_INTERVAL milliseconds (100). + * + * When a delaying member expires, a membership report is sent. + */ +void +mld6_tmr(void) +{ + struct netif *netif; + + NETIF_FOREACH(netif) { + struct mld_group *group = netif_mld6_data(netif); + + while (group != NULL) { + if (group->timer > 0) { + group->timer--; + if (group->timer == 0) { + /* If the state is MLD6_GROUP_DELAYING_MEMBER then we send a report for this group */ + if (group->group_state == MLD6_GROUP_DELAYING_MEMBER) { + MLD6_STATS_INC(mld6.tx_report); + mld6_send(netif, group, ICMP6_TYPE_MLR); + group->group_state = MLD6_GROUP_IDLE_MEMBER; + } + } + } + group = group->next; + } + } +} + +/** + * Schedule a delayed membership report for a group + * + * @param group the mld_group for which "delaying" membership report + * should be sent + * @param maxresp_in the max resp delay provided in the query + */ +static void +mld6_delayed_report(struct mld_group *group, u16_t maxresp_in) +{ + /* Convert maxresp from milliseconds to tmr ticks */ + u16_t maxresp = maxresp_in / MLD6_TMR_INTERVAL; + if (maxresp == 0) { + maxresp = 1; + } + +#ifdef LWIP_RAND + /* Randomize maxresp. (if LWIP_RAND is supported) */ + maxresp = (u16_t)(LWIP_RAND() % maxresp); + if (maxresp == 0) { + maxresp = 1; + } +#endif /* LWIP_RAND */ + + /* Apply timer value if no report has been scheduled already. */ + if ((group->group_state == MLD6_GROUP_IDLE_MEMBER) || + ((group->group_state == MLD6_GROUP_DELAYING_MEMBER) && + ((group->timer == 0) || (maxresp < group->timer)))) { + group->timer = maxresp; + group->group_state = MLD6_GROUP_DELAYING_MEMBER; + } +} + +/** + * Send a MLD message (report or done). + * + * An IPv6 hop-by-hop options header with a router alert option + * is prepended. + * + * @param group the group to report or quit + * @param type ICMP6_TYPE_MLR (report) or ICMP6_TYPE_MLD (done) + */ +static void +mld6_send(struct netif *netif, struct mld_group *group, u8_t type) +{ + struct mld_header *mld_hdr; + struct pbuf *p; + const ip6_addr_t *src_addr; + + /* Allocate a packet. Size is MLD header + IPv6 Hop-by-hop options header. */ + p = pbuf_alloc(PBUF_IP, sizeof(struct mld_header) + MLD6_HBH_HLEN, PBUF_RAM); + if (p == NULL) { + MLD6_STATS_INC(mld6.memerr); + return; + } + + /* Move to make room for Hop-by-hop options header. */ + if (pbuf_remove_header(p, MLD6_HBH_HLEN)) { + pbuf_free(p); + MLD6_STATS_INC(mld6.lenerr); + return; + } + + /* Select our source address. */ + if (!ip6_addr_isvalid(netif_ip6_addr_state(netif, 0))) { + /* This is a special case, when we are performing duplicate address detection. + * We must join the multicast group, but we don't have a valid address yet. */ + src_addr = IP6_ADDR_ANY6; + } else { + /* Use link-local address as source address. */ + src_addr = netif_ip6_addr(netif, 0); + } + + /* MLD message header pointer. */ + mld_hdr = (struct mld_header *)p->payload; + + /* Set fields. */ + mld_hdr->type = type; + mld_hdr->code = 0; + mld_hdr->chksum = 0; + mld_hdr->max_resp_delay = 0; + mld_hdr->reserved = 0; + ip6_addr_copy_to_packed(mld_hdr->multicast_address, group->group_address); + +#if CHECKSUM_GEN_ICMP6 + IF__NETIF_CHECKSUM_ENABLED(netif, NETIF_CHECKSUM_GEN_ICMP6) { + mld_hdr->chksum = ip6_chksum_pseudo(p, IP6_NEXTH_ICMP6, p->len, + src_addr, &(group->group_address)); + } +#endif /* CHECKSUM_GEN_ICMP6 */ + + /* Add hop-by-hop headers options: router alert with MLD value. */ + ip6_options_add_hbh_ra(p, IP6_NEXTH_ICMP6, IP6_ROUTER_ALERT_VALUE_MLD); + + if (type == ICMP6_TYPE_MLR) { + /* Remember we were the last to report */ + group->last_reporter_flag = 1; + } + + /* Send the packet out. */ + MLD6_STATS_INC(mld6.xmit); + ip6_output_if(p, (ip6_addr_isany(src_addr)) ? NULL : src_addr, &(group->group_address), + MLD6_HL, 0, IP6_NEXTH_HOPBYHOP, netif); + pbuf_free(p); +} + +#endif /* LWIP_IPV6 */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv6/nd6.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv6/nd6.c new file mode 100644 index 0000000000000000000000000000000000000000..db0c132e48d56d2278e8228167923b7ad92d4770 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv6/nd6.c @@ -0,0 +1,2434 @@ +/** + * @file + * + * Neighbor discovery and stateless address autoconfiguration for IPv6. + * Aims to be compliant with RFC 4861 (Neighbor discovery) and RFC 4862 + * (Address autoconfiguration). + */ + +/* + * Copyright (c) 2010 Inico Technologies Ltd. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Ivan Delamer + * + * + * Please coordinate changes and requests with Ivan Delamer + * + */ + +#include "lwip/opt.h" + +#if LWIP_IPV6 /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/nd6.h" +#include "lwip/priv/nd6_priv.h" +#include "lwip/prot/nd6.h" +#include "lwip/prot/icmp6.h" +#include "lwip/pbuf.h" +#include "lwip/mem.h" +#include "lwip/memp.h" +#include "lwip/ip6.h" +#include "lwip/ip6_addr.h" +#include "lwip/inet_chksum.h" +#include "lwip/netif.h" +#include "lwip/icmp6.h" +#include "lwip/mld6.h" +#include "lwip/dhcp6.h" +#include "lwip/ip.h" +#include "lwip/stats.h" +#include "lwip/dns.h" + +#include + +#ifdef LWIP_HOOK_FILENAME +#include LWIP_HOOK_FILENAME +#endif + +#if LWIP_IPV6_DUP_DETECT_ATTEMPTS > IP6_ADDR_TENTATIVE_COUNT_MASK +#error LWIP_IPV6_DUP_DETECT_ATTEMPTS > IP6_ADDR_TENTATIVE_COUNT_MASK +#endif + +/* Router tables. */ +struct nd6_neighbor_cache_entry neighbor_cache[LWIP_ND6_NUM_NEIGHBORS]; +struct nd6_destination_cache_entry destination_cache[LWIP_ND6_NUM_DESTINATIONS]; +struct nd6_prefix_list_entry prefix_list[LWIP_ND6_NUM_PREFIXES]; +struct nd6_router_list_entry default_router_list[LWIP_ND6_NUM_ROUTERS]; + +/* Default values, can be updated by a RA message. */ +u32_t reachable_time = LWIP_ND6_REACHABLE_TIME; +u32_t retrans_timer = LWIP_ND6_RETRANS_TIMER; /* @todo implement this value in timer */ + +/* Index for cache entries. */ +static u8_t nd6_cached_neighbor_index; +static netif_addr_idx_t nd6_cached_destination_index; + +/* Multicast address holder. */ +static ip6_addr_t multicast_address; + +static u8_t nd6_tmr_rs_reduction; + +/* Static buffer to parse RA packet options */ +union ra_options { + struct lladdr_option lladdr; + struct mtu_option mtu; + struct prefix_option prefix; +#if LWIP_ND6_RDNSS_MAX_DNS_SERVERS + struct rdnss_option rdnss; +#endif +}; +static union ra_options nd6_ra_buffer; + +/* Forward declarations. */ +static s8_t nd6_find_neighbor_cache_entry(const ip6_addr_t *ip6addr); +static s8_t nd6_new_neighbor_cache_entry(void); +static void nd6_free_neighbor_cache_entry(s8_t i); +static s16_t nd6_find_destination_cache_entry(const ip6_addr_t *ip6addr); +static s16_t nd6_new_destination_cache_entry(void); +static int nd6_is_prefix_in_netif(const ip6_addr_t *ip6addr, struct netif *netif); +static s8_t nd6_select_router(const ip6_addr_t *ip6addr, struct netif *netif); +static s8_t nd6_get_router(const ip6_addr_t *router_addr, struct netif *netif); +static s8_t nd6_new_router(const ip6_addr_t *router_addr, struct netif *netif); +static s8_t nd6_get_onlink_prefix(const ip6_addr_t *prefix, struct netif *netif); +static s8_t nd6_new_onlink_prefix(const ip6_addr_t *prefix, struct netif *netif); +static s8_t nd6_get_next_hop_entry(const ip6_addr_t *ip6addr, struct netif *netif); +static err_t nd6_queue_packet(s8_t neighbor_index, struct pbuf *q); + +#define ND6_SEND_FLAG_MULTICAST_DEST 0x01 +#define ND6_SEND_FLAG_ALLNODES_DEST 0x02 +#define ND6_SEND_FLAG_ANY_SRC 0x04 +static void nd6_send_ns(struct netif *netif, const ip6_addr_t *target_addr, u8_t flags); +static void nd6_send_na(struct netif *netif, const ip6_addr_t *target_addr, u8_t flags); +static void nd6_send_neighbor_cache_probe(struct nd6_neighbor_cache_entry *entry, u8_t flags); +#if LWIP_IPV6_SEND_ROUTER_SOLICIT +static err_t nd6_send_rs(struct netif *netif); +#endif /* LWIP_IPV6_SEND_ROUTER_SOLICIT */ + +#if LWIP_ND6_QUEUEING +static void nd6_free_q(struct nd6_q_entry *q); +#else /* LWIP_ND6_QUEUEING */ +#define nd6_free_q(q) pbuf_free(q) +#endif /* LWIP_ND6_QUEUEING */ +static void nd6_send_q(s8_t i); + + +/** + * A local address has been determined to be a duplicate. Take the appropriate + * action(s) on the address and the interface as a whole. + * + * @param netif the netif that owns the address + * @param addr_idx the index of the address detected to be a duplicate + */ +static void +nd6_duplicate_addr_detected(struct netif *netif, s8_t addr_idx) +{ + + /* Mark the address as duplicate, but leave its lifetimes alone. If this was + * a manually assigned address, it will remain in existence as duplicate, and + * as such be unusable for any practical purposes until manual intervention. + * If this was an autogenerated address, the address will follow normal + * expiration rules, and thus disappear once its valid lifetime expires. */ + netif_ip6_addr_set_state(netif, addr_idx, IP6_ADDR_DUPLICATED); + +#if LWIP_IPV6_AUTOCONFIG + /* If the affected address was the link-local address that we use to generate + * all other addresses, then we should not continue to use those derived + * addresses either, so mark them as duplicate as well. For autoconfig-only + * setups, this will make the interface effectively unusable, approaching the + * intention of RFC 4862 Sec. 5.4.5. @todo implement the full requirements */ + if (addr_idx == 0) { + s8_t i; + for (i = 1; i < LWIP_IPV6_NUM_ADDRESSES; i++) { + if (!ip6_addr_isinvalid(netif_ip6_addr_state(netif, i)) && + !netif_ip6_addr_isstatic(netif, i)) { + netif_ip6_addr_set_state(netif, i, IP6_ADDR_DUPLICATED); + } + } + } +#endif /* LWIP_IPV6_AUTOCONFIG */ +} + +#if LWIP_IPV6_AUTOCONFIG +/** + * We received a router advertisement that contains a prefix with the + * autoconfiguration flag set. Add or update an associated autogenerated + * address. + * + * @param netif the netif on which the router advertisement arrived + * @param prefix_opt a pointer to the prefix option data + * @param prefix_addr an aligned copy of the prefix address + */ +static void +nd6_process_autoconfig_prefix(struct netif *netif, + struct prefix_option *prefix_opt, const ip6_addr_t *prefix_addr) +{ + ip6_addr_t ip6addr; + u32_t valid_life, pref_life; + u8_t addr_state; + s8_t i, free_idx; + + /* The caller already checks RFC 4862 Sec. 5.5.3 points (a) and (b). We do + * the rest, starting with checks for (c) and (d) here. */ + valid_life = lwip_htonl(prefix_opt->valid_lifetime); + pref_life = lwip_htonl(prefix_opt->preferred_lifetime); + if (pref_life > valid_life || prefix_opt->prefix_length != 64) { + return; /* silently ignore this prefix for autoconfiguration purposes */ + } + + /* If an autogenerated address already exists for this prefix, update its + * lifetimes. An address is considered autogenerated if 1) it is not static + * (i.e., manually assigned), and 2) there is an advertised autoconfiguration + * prefix for it (the one we are processing here). This does not necessarily + * exclude the possibility that the address was actually assigned by, say, + * DHCPv6. If that distinction becomes important in the future, more state + * must be kept. As explained elsewhere we also update lifetimes of tentative + * and duplicate addresses. Skip address slot 0 (the link-local address). */ + for (i = 1; i < LWIP_IPV6_NUM_ADDRESSES; i++) { + addr_state = netif_ip6_addr_state(netif, i); + if (!ip6_addr_isinvalid(addr_state) && !netif_ip6_addr_isstatic(netif, i) && + ip6_addr_netcmp(prefix_addr, netif_ip6_addr(netif, i))) { + /* Update the valid lifetime, as per RFC 4862 Sec. 5.5.3 point (e). + * The valid lifetime will never drop to zero as a result of this. */ + u32_t remaining_life = netif_ip6_addr_valid_life(netif, i); + if (valid_life > ND6_2HRS || valid_life > remaining_life) { + netif_ip6_addr_set_valid_life(netif, i, valid_life); + } else if (remaining_life > ND6_2HRS) { + netif_ip6_addr_set_valid_life(netif, i, ND6_2HRS); + } + LWIP_ASSERT("bad valid lifetime", !netif_ip6_addr_isstatic(netif, i)); + /* Update the preferred lifetime. No bounds checks are needed here. In + * rare cases the advertisement may un-deprecate the address, though. + * Deprecation is left to the timer code where it is handled anyway. */ + if (pref_life > 0 && addr_state == IP6_ADDR_DEPRECATED) { + netif_ip6_addr_set_state(netif, i, IP6_ADDR_PREFERRED); + } + netif_ip6_addr_set_pref_life(netif, i, pref_life); + return; /* there should be at most one matching address */ + } + } + + /* No autogenerated address exists for this prefix yet. See if we can add a + * new one. However, if IPv6 autoconfiguration is administratively disabled, + * do not generate new addresses, but do keep updating lifetimes for existing + * addresses. Also, when adding new addresses, we must protect explicitly + * against a valid lifetime of zero, because again, we use that as a special + * value. The generated address would otherwise expire immediately anyway. + * Finally, the original link-local address must be usable at all. We start + * creating addresses even if the link-local address is still in tentative + * state though, and deal with the fallout of that upon DAD collision. */ + addr_state = netif_ip6_addr_state(netif, 0); + if (!netif->ip6_autoconfig_enabled || valid_life == IP6_ADDR_LIFE_STATIC || + ip6_addr_isinvalid(addr_state) || ip6_addr_isduplicated(addr_state)) { + return; + } + + /* Construct the new address that we intend to use, and then see if that + * address really does not exist. It might have been added manually, after + * all. As a side effect, find a free slot. Note that we cannot use + * netif_add_ip6_address() here, as it would return ERR_OK if the address + * already did exist, resulting in that address being given lifetimes. */ + IP6_ADDR(&ip6addr, prefix_addr->addr[0], prefix_addr->addr[1], + netif_ip6_addr(netif, 0)->addr[2], netif_ip6_addr(netif, 0)->addr[3]); + ip6_addr_assign_zone(&ip6addr, IP6_UNICAST, netif); + + free_idx = 0; + for (i = 1; i < LWIP_IPV6_NUM_ADDRESSES; i++) { + if (!ip6_addr_isinvalid(netif_ip6_addr_state(netif, i))) { + if (ip6_addr_cmp(&ip6addr, netif_ip6_addr(netif, i))) { + return; /* formed address already exists */ + } + } else if (free_idx == 0) { + free_idx = i; + } + } + if (free_idx == 0) { + return; /* no address slots available, try again on next advertisement */ + } + + /* Assign the new address to the interface. */ + ip_addr_copy_from_ip6(netif->ip6_addr[free_idx], ip6addr); + netif_ip6_addr_set_valid_life(netif, free_idx, valid_life); + netif_ip6_addr_set_pref_life(netif, free_idx, pref_life); + netif_ip6_addr_set_state(netif, free_idx, IP6_ADDR_TENTATIVE); +} +#endif /* LWIP_IPV6_AUTOCONFIG */ + +/** + * Process an incoming neighbor discovery message + * + * @param p the nd packet, p->payload pointing to the icmpv6 header + * @param inp the netif on which this packet was received + */ +void +nd6_input(struct pbuf *p, struct netif *inp) +{ + u8_t msg_type; + s8_t i; + s16_t dest_idx; + + ND6_STATS_INC(nd6.recv); + + msg_type = *((u8_t *)p->payload); + switch (msg_type) { + case ICMP6_TYPE_NA: /* Neighbor Advertisement. */ + { + struct na_header *na_hdr; + struct lladdr_option *lladdr_opt; + ip6_addr_t target_address; + + /* Check that na header fits in packet. */ + if (p->len < (sizeof(struct na_header))) { + /* @todo debug message */ + pbuf_free(p); + ND6_STATS_INC(nd6.lenerr); + ND6_STATS_INC(nd6.drop); + return; + } + + na_hdr = (struct na_header *)p->payload; + + /* Create an aligned, zoned copy of the target address. */ + ip6_addr_copy_from_packed(target_address, na_hdr->target_address); + ip6_addr_assign_zone(&target_address, IP6_UNICAST, inp); + + /* Check a subset of the other RFC 4861 Sec. 7.1.2 requirements. */ + if (IP6H_HOPLIM(ip6_current_header()) != ND6_HOPLIM || na_hdr->code != 0 || + ip6_addr_ismulticast(&target_address)) { + pbuf_free(p); + ND6_STATS_INC(nd6.proterr); + ND6_STATS_INC(nd6.drop); + return; + } + + /* @todo RFC MUST: if IP destination is multicast, Solicited flag is zero */ + /* @todo RFC MUST: all included options have a length greater than zero */ + + /* Unsolicited NA?*/ + if (ip6_addr_ismulticast(ip6_current_dest_addr())) { + /* This is an unsolicited NA. + * link-layer changed? + * part of DAD mechanism? */ + +#if LWIP_IPV6_DUP_DETECT_ATTEMPTS + /* If the target address matches this netif, it is a DAD response. */ + for (i = 0; i < LWIP_IPV6_NUM_ADDRESSES; i++) { + if (!ip6_addr_isinvalid(netif_ip6_addr_state(inp, i)) && + !ip6_addr_isduplicated(netif_ip6_addr_state(inp, i)) && + ip6_addr_cmp(&target_address, netif_ip6_addr(inp, i))) { + /* We are using a duplicate address. */ + nd6_duplicate_addr_detected(inp, i); + + pbuf_free(p); + return; + } + } +#endif /* LWIP_IPV6_DUP_DETECT_ATTEMPTS */ + + /* Check that link-layer address option also fits in packet. */ + if (p->len < (sizeof(struct na_header) + 2)) { + /* @todo debug message */ + pbuf_free(p); + ND6_STATS_INC(nd6.lenerr); + ND6_STATS_INC(nd6.drop); + return; + } + + lladdr_opt = (struct lladdr_option *)((u8_t*)p->payload + sizeof(struct na_header)); + + if (p->len < (sizeof(struct na_header) + (lladdr_opt->length << 3))) { + /* @todo debug message */ + pbuf_free(p); + ND6_STATS_INC(nd6.lenerr); + ND6_STATS_INC(nd6.drop); + return; + } + + /* This is an unsolicited NA, most likely there was a LLADDR change. */ + i = nd6_find_neighbor_cache_entry(&target_address); + if (i >= 0) { + if (na_hdr->flags & ND6_FLAG_OVERRIDE) { + MEMCPY(neighbor_cache[i].lladdr, lladdr_opt->addr, inp->hwaddr_len); + } + } + } else { + /* This is a solicited NA. + * neighbor address resolution response? + * neighbor unreachability detection response? */ + + /* Find the cache entry corresponding to this na. */ + i = nd6_find_neighbor_cache_entry(&target_address); + if (i < 0) { + /* We no longer care about this target address. drop it. */ + pbuf_free(p); + return; + } + + /* Update cache entry. */ + if ((na_hdr->flags & ND6_FLAG_OVERRIDE) || + (neighbor_cache[i].state == ND6_INCOMPLETE)) { + /* Check that link-layer address option also fits in packet. */ + if (p->len < (sizeof(struct na_header) + 2)) { + /* @todo debug message */ + pbuf_free(p); + ND6_STATS_INC(nd6.lenerr); + ND6_STATS_INC(nd6.drop); + return; + } + + lladdr_opt = (struct lladdr_option *)((u8_t*)p->payload + sizeof(struct na_header)); + + if (p->len < (sizeof(struct na_header) + (lladdr_opt->length << 3))) { + /* @todo debug message */ + pbuf_free(p); + ND6_STATS_INC(nd6.lenerr); + ND6_STATS_INC(nd6.drop); + return; + } + + MEMCPY(neighbor_cache[i].lladdr, lladdr_opt->addr, inp->hwaddr_len); + } + + neighbor_cache[i].netif = inp; + neighbor_cache[i].state = ND6_REACHABLE; + neighbor_cache[i].counter.reachable_time = reachable_time; + + /* Send queued packets, if any. */ + if (neighbor_cache[i].q != NULL) { + nd6_send_q(i); + } + } + + break; /* ICMP6_TYPE_NA */ + } + case ICMP6_TYPE_NS: /* Neighbor solicitation. */ + { + struct ns_header *ns_hdr; + struct lladdr_option *lladdr_opt; + ip6_addr_t target_address; + u8_t accepted; + + /* Check that ns header fits in packet. */ + if (p->len < sizeof(struct ns_header)) { + /* @todo debug message */ + pbuf_free(p); + ND6_STATS_INC(nd6.lenerr); + ND6_STATS_INC(nd6.drop); + return; + } + + ns_hdr = (struct ns_header *)p->payload; + + /* Create an aligned, zoned copy of the target address. */ + ip6_addr_copy_from_packed(target_address, ns_hdr->target_address); + ip6_addr_assign_zone(&target_address, IP6_UNICAST, inp); + + /* Check a subset of the other RFC 4861 Sec. 7.1.1 requirements. */ + if (IP6H_HOPLIM(ip6_current_header()) != ND6_HOPLIM || ns_hdr->code != 0 || + ip6_addr_ismulticast(&target_address)) { + pbuf_free(p); + ND6_STATS_INC(nd6.proterr); + ND6_STATS_INC(nd6.drop); + return; + } + + /* @todo RFC MUST: all included options have a length greater than zero */ + /* @todo RFC MUST: if IP source is 'any', destination is solicited-node multicast address */ + /* @todo RFC MUST: if IP source is 'any', there is no source LL address option */ + + /* Check if there is a link-layer address provided. Only point to it if in this buffer. */ + if (p->len >= (sizeof(struct ns_header) + 2)) { + lladdr_opt = (struct lladdr_option *)((u8_t*)p->payload + sizeof(struct ns_header)); + if (p->len < (sizeof(struct ns_header) + (lladdr_opt->length << 3))) { + lladdr_opt = NULL; + } + } else { + lladdr_opt = NULL; + } + + /* Check if the target address is configured on the receiving netif. */ + accepted = 0; + for (i = 0; i < LWIP_IPV6_NUM_ADDRESSES; ++i) { + if ((ip6_addr_isvalid(netif_ip6_addr_state(inp, i)) || + (ip6_addr_istentative(netif_ip6_addr_state(inp, i)) && + ip6_addr_isany(ip6_current_src_addr()))) && + ip6_addr_cmp(&target_address, netif_ip6_addr(inp, i))) { + accepted = 1; + break; + } + } + + /* NS not for us? */ + if (!accepted) { + pbuf_free(p); + return; + } + + /* Check for ANY address in src (DAD algorithm). */ + if (ip6_addr_isany(ip6_current_src_addr())) { + /* Sender is validating this address. */ + for (i = 0; i < LWIP_IPV6_NUM_ADDRESSES; ++i) { + if (!ip6_addr_isinvalid(netif_ip6_addr_state(inp, i)) && + ip6_addr_cmp(&target_address, netif_ip6_addr(inp, i))) { + /* Send a NA back so that the sender does not use this address. */ + nd6_send_na(inp, netif_ip6_addr(inp, i), ND6_FLAG_OVERRIDE | ND6_SEND_FLAG_ALLNODES_DEST); + if (ip6_addr_istentative(netif_ip6_addr_state(inp, i))) { + /* We shouldn't use this address either. */ + nd6_duplicate_addr_detected(inp, i); + } + } + } + } else { + /* Sender is trying to resolve our address. */ + /* Verify that they included their own link-layer address. */ + if (lladdr_opt == NULL) { + /* Not a valid message. */ + pbuf_free(p); + ND6_STATS_INC(nd6.proterr); + ND6_STATS_INC(nd6.drop); + return; + } + + i = nd6_find_neighbor_cache_entry(ip6_current_src_addr()); + if (i>= 0) { + /* We already have a record for the solicitor. */ + if (neighbor_cache[i].state == ND6_INCOMPLETE) { + neighbor_cache[i].netif = inp; + MEMCPY(neighbor_cache[i].lladdr, lladdr_opt->addr, inp->hwaddr_len); + + /* Delay probe in case we get confirmation of reachability from upper layer (TCP). */ + neighbor_cache[i].state = ND6_DELAY; + neighbor_cache[i].counter.delay_time = LWIP_ND6_DELAY_FIRST_PROBE_TIME / ND6_TMR_INTERVAL; + } + } else { + /* Add their IPv6 address and link-layer address to neighbor cache. + * We will need it at least to send a unicast NA message, but most + * likely we will also be communicating with this node soon. */ + i = nd6_new_neighbor_cache_entry(); + if (i < 0) { + /* We couldn't assign a cache entry for this neighbor. + * we won't be able to reply. drop it. */ + pbuf_free(p); + ND6_STATS_INC(nd6.memerr); + return; + } + neighbor_cache[i].netif = inp; + MEMCPY(neighbor_cache[i].lladdr, lladdr_opt->addr, inp->hwaddr_len); + ip6_addr_set(&(neighbor_cache[i].next_hop_address), ip6_current_src_addr()); + + /* Receiving a message does not prove reachability: only in one direction. + * Delay probe in case we get confirmation of reachability from upper layer (TCP). */ + neighbor_cache[i].state = ND6_DELAY; + neighbor_cache[i].counter.delay_time = LWIP_ND6_DELAY_FIRST_PROBE_TIME / ND6_TMR_INTERVAL; + } + + /* Send back a NA for us. Allocate the reply pbuf. */ + nd6_send_na(inp, &target_address, ND6_FLAG_SOLICITED | ND6_FLAG_OVERRIDE); + } + + break; /* ICMP6_TYPE_NS */ + } + case ICMP6_TYPE_RA: /* Router Advertisement. */ + { + struct ra_header *ra_hdr; + u8_t *buffer; /* Used to copy options. */ + u16_t offset; +#if LWIP_ND6_RDNSS_MAX_DNS_SERVERS + /* There can be multiple RDNSS options per RA */ + u8_t rdnss_server_idx = 0; +#endif /* LWIP_ND6_RDNSS_MAX_DNS_SERVERS */ + + /* Check that RA header fits in packet. */ + if (p->len < sizeof(struct ra_header)) { + /* @todo debug message */ + pbuf_free(p); + ND6_STATS_INC(nd6.lenerr); + ND6_STATS_INC(nd6.drop); + return; + } + + ra_hdr = (struct ra_header *)p->payload; + + /* Check a subset of the other RFC 4861 Sec. 6.1.2 requirements. */ + if (!ip6_addr_islinklocal(ip6_current_src_addr()) || + IP6H_HOPLIM(ip6_current_header()) != ND6_HOPLIM || ra_hdr->code != 0) { + pbuf_free(p); + ND6_STATS_INC(nd6.proterr); + ND6_STATS_INC(nd6.drop); + return; + } + + /* @todo RFC MUST: all included options have a length greater than zero */ + + /* If we are sending RS messages, stop. */ +#if LWIP_IPV6_SEND_ROUTER_SOLICIT + /* ensure at least one solicitation is sent (see RFC 4861, ch. 6.3.7) */ + if ((inp->rs_count < LWIP_ND6_MAX_MULTICAST_SOLICIT) || + (nd6_send_rs(inp) == ERR_OK)) { + inp->rs_count = 0; + } else { + inp->rs_count = 1; + } +#endif /* LWIP_IPV6_SEND_ROUTER_SOLICIT */ + + /* Get the matching default router entry. */ + i = nd6_get_router(ip6_current_src_addr(), inp); + if (i < 0) { + /* Create a new router entry. */ + i = nd6_new_router(ip6_current_src_addr(), inp); + } + + if (i < 0) { + /* Could not create a new router entry. */ + pbuf_free(p); + ND6_STATS_INC(nd6.memerr); + return; + } + + /* Re-set invalidation timer. */ + default_router_list[i].invalidation_timer = lwip_htons(ra_hdr->router_lifetime); + + /* Re-set default timer values. */ +#if LWIP_ND6_ALLOW_RA_UPDATES + if (ra_hdr->retrans_timer > 0) { + retrans_timer = lwip_htonl(ra_hdr->retrans_timer); + } + if (ra_hdr->reachable_time > 0) { + reachable_time = lwip_htonl(ra_hdr->reachable_time); + } +#endif /* LWIP_ND6_ALLOW_RA_UPDATES */ + + /* @todo set default hop limit... */ + /* ra_hdr->current_hop_limit;*/ + + /* Update flags in local entry (incl. preference). */ + default_router_list[i].flags = ra_hdr->flags; + +#if LWIP_IPV6_DHCP6 + /* Trigger DHCPv6 if enabled */ + dhcp6_nd6_ra_trigger(inp, ra_hdr->flags & ND6_RA_FLAG_MANAGED_ADDR_CONFIG, + ra_hdr->flags & ND6_RA_FLAG_OTHER_CONFIG); +#endif + + /* Offset to options. */ + offset = sizeof(struct ra_header); + + /* Process each option. */ + while ((p->tot_len - offset) >= 2) { + u8_t option_type; + u16_t option_len; + int option_len8 = pbuf_try_get_at(p, offset + 1); + if (option_len8 <= 0) { + /* read beyond end or zero length */ + goto lenerr_drop_free_return; + } + option_len = ((u8_t)option_len8) << 3; + if (option_len > p->tot_len - offset) { + /* short packet (option does not fit in) */ + goto lenerr_drop_free_return; + } + if (p->len == p->tot_len) { + /* no need to copy from contiguous pbuf */ + buffer = &((u8_t*)p->payload)[offset]; + } else { + /* check if this option fits into our buffer */ + if (option_len > sizeof(nd6_ra_buffer)) { + option_type = pbuf_get_at(p, offset); + /* invalid option length */ + if (option_type != ND6_OPTION_TYPE_RDNSS) { + goto lenerr_drop_free_return; + } + /* we allow RDNSS option to be longer - we'll just drop some servers */ + option_len = sizeof(nd6_ra_buffer); + } + buffer = (u8_t*)&nd6_ra_buffer; + option_len = pbuf_copy_partial(p, &nd6_ra_buffer, option_len, offset); + } + option_type = buffer[0]; + switch (option_type) { + case ND6_OPTION_TYPE_SOURCE_LLADDR: + { + struct lladdr_option *lladdr_opt; + if (option_len < sizeof(struct lladdr_option)) { + goto lenerr_drop_free_return; + } + lladdr_opt = (struct lladdr_option *)buffer; + if ((default_router_list[i].neighbor_entry != NULL) && + (default_router_list[i].neighbor_entry->state == ND6_INCOMPLETE)) { + SMEMCPY(default_router_list[i].neighbor_entry->lladdr, lladdr_opt->addr, inp->hwaddr_len); + default_router_list[i].neighbor_entry->state = ND6_REACHABLE; + default_router_list[i].neighbor_entry->counter.reachable_time = reachable_time; + } + break; + } + case ND6_OPTION_TYPE_MTU: + { + struct mtu_option *mtu_opt; + u32_t mtu32; + if (option_len < sizeof(struct mtu_option)) { + goto lenerr_drop_free_return; + } + mtu_opt = (struct mtu_option *)buffer; + mtu32 = lwip_htonl(mtu_opt->mtu); + if ((mtu32 >= 1280) && (mtu32 <= 0xffff)) { +#if LWIP_ND6_ALLOW_RA_UPDATES + if (inp->mtu) { + /* don't set the mtu for IPv6 higher than the netif driver supports */ + inp->mtu6 = LWIP_MIN(inp->mtu, (u16_t)mtu32); + } else { + inp->mtu6 = (u16_t)mtu32; + } +#endif /* LWIP_ND6_ALLOW_RA_UPDATES */ + } + break; + } + case ND6_OPTION_TYPE_PREFIX_INFO: + { + struct prefix_option *prefix_opt; + ip6_addr_t prefix_addr; + if (option_len < sizeof(struct prefix_option)) { + goto lenerr_drop_free_return; + } + + prefix_opt = (struct prefix_option *)buffer; + + /* Get a memory-aligned copy of the prefix. */ + ip6_addr_copy_from_packed(prefix_addr, prefix_opt->prefix); + ip6_addr_assign_zone(&prefix_addr, IP6_UNICAST, inp); + + if (!ip6_addr_islinklocal(&prefix_addr)) { + if ((prefix_opt->flags & ND6_PREFIX_FLAG_ON_LINK) && + (prefix_opt->prefix_length == 64)) { + /* Add to on-link prefix list. */ + u32_t valid_life; + s8_t prefix; + + valid_life = lwip_htonl(prefix_opt->valid_lifetime); + + /* find cache entry for this prefix. */ + prefix = nd6_get_onlink_prefix(&prefix_addr, inp); + if (prefix < 0 && valid_life > 0) { + /* Create a new cache entry. */ + prefix = nd6_new_onlink_prefix(&prefix_addr, inp); + } + if (prefix >= 0) { + prefix_list[prefix].invalidation_timer = valid_life; + } + } +#if LWIP_IPV6_AUTOCONFIG + if (prefix_opt->flags & ND6_PREFIX_FLAG_AUTONOMOUS) { + /* Perform processing for autoconfiguration. */ + nd6_process_autoconfig_prefix(inp, prefix_opt, &prefix_addr); + } +#endif /* LWIP_IPV6_AUTOCONFIG */ + } + + break; + } + case ND6_OPTION_TYPE_ROUTE_INFO: + /* @todo implement preferred routes. + struct route_option * route_opt; + route_opt = (struct route_option *)buffer;*/ + + break; +#if LWIP_ND6_RDNSS_MAX_DNS_SERVERS + case ND6_OPTION_TYPE_RDNSS: + { + u8_t num, n; + u16_t copy_offset = offset + SIZEOF_RDNSS_OPTION_BASE; + struct rdnss_option * rdnss_opt; + if (option_len < SIZEOF_RDNSS_OPTION_BASE) { + goto lenerr_drop_free_return; + } + + rdnss_opt = (struct rdnss_option *)buffer; + num = (rdnss_opt->length - 1) / 2; + for (n = 0; (rdnss_server_idx < DNS_MAX_SERVERS) && (n < num); n++) { + ip_addr_t rdnss_address; + + /* Copy directly from pbuf to get an aligned, zoned copy of the prefix. */ + if (pbuf_copy_partial(p, &rdnss_address, sizeof(ip6_addr_p_t), copy_offset) == sizeof(ip6_addr_p_t)) { + IP_SET_TYPE_VAL(rdnss_address, IPADDR_TYPE_V6); + ip6_addr_assign_zone(ip_2_ip6(&rdnss_address), IP6_UNKNOWN, inp); + + if (htonl(rdnss_opt->lifetime) > 0) { + /* TODO implement Lifetime > 0 */ + dns_setserver(rdnss_server_idx++, &rdnss_address); + } else { + /* TODO implement DNS removal in dns.c */ + u8_t s; + for (s = 0; s < DNS_MAX_SERVERS; s++) { + const ip_addr_t *addr = dns_getserver(s); + if(ip_addr_cmp(addr, &rdnss_address)) { + dns_setserver(s, NULL); + } + } + } + } + } + break; + } +#endif /* LWIP_ND6_RDNSS_MAX_DNS_SERVERS */ + default: + /* Unrecognized option, abort. */ + ND6_STATS_INC(nd6.proterr); + break; + } + /* option length is checked earlier to be non-zero to make sure loop ends */ + offset += 8 * (u8_t)option_len8; + } + + break; /* ICMP6_TYPE_RA */ + } + case ICMP6_TYPE_RD: /* Redirect */ + { + struct redirect_header *redir_hdr; + struct lladdr_option *lladdr_opt; + ip6_addr_t destination_address, target_address; + + /* Check that Redir header fits in packet. */ + if (p->len < sizeof(struct redirect_header)) { + /* @todo debug message */ + pbuf_free(p); + ND6_STATS_INC(nd6.lenerr); + ND6_STATS_INC(nd6.drop); + return; + } + + redir_hdr = (struct redirect_header *)p->payload; + + /* Create an aligned, zoned copy of the destination address. */ + ip6_addr_copy_from_packed(destination_address, redir_hdr->destination_address); + ip6_addr_assign_zone(&destination_address, IP6_UNICAST, inp); + + /* Check a subset of the other RFC 4861 Sec. 8.1 requirements. */ + if (!ip6_addr_islinklocal(ip6_current_src_addr()) || + IP6H_HOPLIM(ip6_current_header()) != ND6_HOPLIM || + redir_hdr->code != 0 || ip6_addr_ismulticast(&destination_address)) { + pbuf_free(p); + ND6_STATS_INC(nd6.proterr); + ND6_STATS_INC(nd6.drop); + return; + } + + /* @todo RFC MUST: IP source address equals first-hop router for destination_address */ + /* @todo RFC MUST: ICMP target address is either link-local address or same as destination_address */ + /* @todo RFC MUST: all included options have a length greater than zero */ + + if (p->len >= (sizeof(struct redirect_header) + 2)) { + lladdr_opt = (struct lladdr_option *)((u8_t*)p->payload + sizeof(struct redirect_header)); + if (p->len < (sizeof(struct redirect_header) + (lladdr_opt->length << 3))) { + lladdr_opt = NULL; + } + } else { + lladdr_opt = NULL; + } + + /* Find dest address in cache */ + dest_idx = nd6_find_destination_cache_entry(&destination_address); + if (dest_idx < 0) { + /* Destination not in cache, drop packet. */ + pbuf_free(p); + return; + } + + /* Create an aligned, zoned copy of the target address. */ + ip6_addr_copy_from_packed(target_address, redir_hdr->target_address); + ip6_addr_assign_zone(&target_address, IP6_UNICAST, inp); + + /* Set the new target address. */ + ip6_addr_copy(destination_cache[dest_idx].next_hop_addr, target_address); + + /* If Link-layer address of other router is given, try to add to neighbor cache. */ + if (lladdr_opt != NULL) { + if (lladdr_opt->type == ND6_OPTION_TYPE_TARGET_LLADDR) { + i = nd6_find_neighbor_cache_entry(&target_address); + if (i < 0) { + i = nd6_new_neighbor_cache_entry(); + if (i >= 0) { + neighbor_cache[i].netif = inp; + MEMCPY(neighbor_cache[i].lladdr, lladdr_opt->addr, inp->hwaddr_len); + ip6_addr_copy(neighbor_cache[i].next_hop_address, target_address); + + /* Receiving a message does not prove reachability: only in one direction. + * Delay probe in case we get confirmation of reachability from upper layer (TCP). */ + neighbor_cache[i].state = ND6_DELAY; + neighbor_cache[i].counter.delay_time = LWIP_ND6_DELAY_FIRST_PROBE_TIME / ND6_TMR_INTERVAL; + } + } + if (i >= 0) { + if (neighbor_cache[i].state == ND6_INCOMPLETE) { + MEMCPY(neighbor_cache[i].lladdr, lladdr_opt->addr, inp->hwaddr_len); + /* Receiving a message does not prove reachability: only in one direction. + * Delay probe in case we get confirmation of reachability from upper layer (TCP). */ + neighbor_cache[i].state = ND6_DELAY; + neighbor_cache[i].counter.delay_time = LWIP_ND6_DELAY_FIRST_PROBE_TIME / ND6_TMR_INTERVAL; + } + } + } + } + break; /* ICMP6_TYPE_RD */ + } + case ICMP6_TYPE_PTB: /* Packet too big */ + { + struct icmp6_hdr *icmp6hdr; /* Packet too big message */ + struct ip6_hdr *ip6hdr; /* IPv6 header of the packet which caused the error */ + u32_t pmtu; + ip6_addr_t destination_address; + + /* Check that ICMPv6 header + IPv6 header fit in payload */ + if (p->len < (sizeof(struct icmp6_hdr) + IP6_HLEN)) { + /* drop short packets */ + pbuf_free(p); + ND6_STATS_INC(nd6.lenerr); + ND6_STATS_INC(nd6.drop); + return; + } + + icmp6hdr = (struct icmp6_hdr *)p->payload; + ip6hdr = (struct ip6_hdr *)((u8_t*)p->payload + sizeof(struct icmp6_hdr)); + + /* Create an aligned, zoned copy of the destination address. */ + ip6_addr_copy_from_packed(destination_address, ip6hdr->dest); + ip6_addr_assign_zone(&destination_address, IP6_UNKNOWN, inp); + + /* Look for entry in destination cache. */ + dest_idx = nd6_find_destination_cache_entry(&destination_address); + if (dest_idx < 0) { + /* Destination not in cache, drop packet. */ + pbuf_free(p); + return; + } + + /* Change the Path MTU. */ + pmtu = lwip_htonl(icmp6hdr->data); + destination_cache[dest_idx].pmtu = (u16_t)LWIP_MIN(pmtu, 0xFFFF); + + break; /* ICMP6_TYPE_PTB */ + } + + default: + ND6_STATS_INC(nd6.proterr); + ND6_STATS_INC(nd6.drop); + break; /* default */ + } + + pbuf_free(p); + return; +lenerr_drop_free_return: + ND6_STATS_INC(nd6.lenerr); + ND6_STATS_INC(nd6.drop); + pbuf_free(p); +} + + +/** + * Periodic timer for Neighbor discovery functions: + * + * - Update neighbor reachability states + * - Update destination cache entries age + * - Update invalidation timers of default routers and on-link prefixes + * - Update lifetimes of our addresses + * - Perform duplicate address detection (DAD) for our addresses + * - Send router solicitations + */ +void +nd6_tmr(void) +{ + s8_t i; + struct netif *netif; + + /* Process neighbor entries. */ + for (i = 0; i < LWIP_ND6_NUM_NEIGHBORS; i++) { + switch (neighbor_cache[i].state) { + case ND6_INCOMPLETE: + if ((neighbor_cache[i].counter.probes_sent >= LWIP_ND6_MAX_MULTICAST_SOLICIT) && + (!neighbor_cache[i].isrouter)) { + /* Retries exceeded. */ + nd6_free_neighbor_cache_entry(i); + } else { + /* Send a NS for this entry. */ + neighbor_cache[i].counter.probes_sent++; + nd6_send_neighbor_cache_probe(&neighbor_cache[i], ND6_SEND_FLAG_MULTICAST_DEST); + } + break; + case ND6_REACHABLE: + /* Send queued packets, if any are left. Should have been sent already. */ + if (neighbor_cache[i].q != NULL) { + nd6_send_q(i); + } + if (neighbor_cache[i].counter.reachable_time <= ND6_TMR_INTERVAL) { + /* Change to stale state. */ + neighbor_cache[i].state = ND6_STALE; + neighbor_cache[i].counter.stale_time = 0; + } else { + neighbor_cache[i].counter.reachable_time -= ND6_TMR_INTERVAL; + } + break; + case ND6_STALE: + neighbor_cache[i].counter.stale_time++; + break; + case ND6_DELAY: + if (neighbor_cache[i].counter.delay_time <= 1) { + /* Change to PROBE state. */ + neighbor_cache[i].state = ND6_PROBE; + neighbor_cache[i].counter.probes_sent = 0; + } else { + neighbor_cache[i].counter.delay_time--; + } + break; + case ND6_PROBE: + if ((neighbor_cache[i].counter.probes_sent >= LWIP_ND6_MAX_MULTICAST_SOLICIT) && + (!neighbor_cache[i].isrouter)) { + /* Retries exceeded. */ + nd6_free_neighbor_cache_entry(i); + } else { + /* Send a NS for this entry. */ + neighbor_cache[i].counter.probes_sent++; + nd6_send_neighbor_cache_probe(&neighbor_cache[i], 0); + } + break; + case ND6_NO_ENTRY: + default: + /* Do nothing. */ + break; + } + } + + /* Process destination entries. */ + for (i = 0; i < LWIP_ND6_NUM_DESTINATIONS; i++) { + destination_cache[i].age++; + } + + /* Process router entries. */ + for (i = 0; i < LWIP_ND6_NUM_ROUTERS; i++) { + if (default_router_list[i].neighbor_entry != NULL) { + /* Active entry. */ + if (default_router_list[i].invalidation_timer <= ND6_TMR_INTERVAL / 1000) { + /* No more than 1 second remaining. Clear this entry. Also clear any of + * its destination cache entries, as per RFC 4861 Sec. 5.3 and 6.3.5. */ + s8_t j; + for (j = 0; j < LWIP_ND6_NUM_DESTINATIONS; j++) { + if (ip6_addr_cmp(&destination_cache[j].next_hop_addr, + &default_router_list[i].neighbor_entry->next_hop_address)) { + ip6_addr_set_any(&destination_cache[j].destination_addr); + } + } + default_router_list[i].neighbor_entry->isrouter = 0; + default_router_list[i].neighbor_entry = NULL; + default_router_list[i].invalidation_timer = 0; + default_router_list[i].flags = 0; + } else { + default_router_list[i].invalidation_timer -= ND6_TMR_INTERVAL / 1000; + } + } + } + + /* Process prefix entries. */ + for (i = 0; i < LWIP_ND6_NUM_PREFIXES; i++) { + if (prefix_list[i].netif != NULL) { + if (prefix_list[i].invalidation_timer <= ND6_TMR_INTERVAL / 1000) { + /* Entry timed out, remove it */ + prefix_list[i].invalidation_timer = 0; + prefix_list[i].netif = NULL; + } else { + prefix_list[i].invalidation_timer -= ND6_TMR_INTERVAL / 1000; + } + } + } + + /* Process our own addresses, updating address lifetimes and/or DAD state. */ + NETIF_FOREACH(netif) { + for (i = 0; i < LWIP_IPV6_NUM_ADDRESSES; ++i) { + u8_t addr_state; +#if LWIP_IPV6_ADDRESS_LIFETIMES + /* Step 1: update address lifetimes (valid and preferred). */ + addr_state = netif_ip6_addr_state(netif, i); + /* RFC 4862 is not entirely clear as to whether address lifetimes affect + * tentative addresses, and is even less clear as to what should happen + * with duplicate addresses. We choose to track and update lifetimes for + * both those types, although for different reasons: + * - for tentative addresses, the line of thought of Sec. 5.7 combined + * with the potentially long period that an address may be in tentative + * state (due to the interface being down) suggests that lifetimes + * should be independent of external factors which would include DAD; + * - for duplicate addresses, retiring them early could result in a new + * but unwanted attempt at marking them as valid, while retiring them + * late/never could clog up address slots on the netif. + * As a result, we may end up expiring addresses of either type here. + */ + if (!ip6_addr_isinvalid(addr_state) && + !netif_ip6_addr_isstatic(netif, i)) { + u32_t life = netif_ip6_addr_valid_life(netif, i); + if (life <= ND6_TMR_INTERVAL / 1000) { + /* The address has expired. */ + netif_ip6_addr_set_valid_life(netif, i, 0); + netif_ip6_addr_set_pref_life(netif, i, 0); + netif_ip6_addr_set_state(netif, i, IP6_ADDR_INVALID); + } else { + if (!ip6_addr_life_isinfinite(life)) { + life -= ND6_TMR_INTERVAL / 1000; + LWIP_ASSERT("bad valid lifetime", life != IP6_ADDR_LIFE_STATIC); + netif_ip6_addr_set_valid_life(netif, i, life); + } + /* The address is still here. Update the preferred lifetime too. */ + life = netif_ip6_addr_pref_life(netif, i); + if (life <= ND6_TMR_INTERVAL / 1000) { + /* This case must also trigger if 'life' was already zero, so as to + * deal correctly with advertised preferred-lifetime reductions. */ + netif_ip6_addr_set_pref_life(netif, i, 0); + if (addr_state == IP6_ADDR_PREFERRED) + netif_ip6_addr_set_state(netif, i, IP6_ADDR_DEPRECATED); + } else if (!ip6_addr_life_isinfinite(life)) { + life -= ND6_TMR_INTERVAL / 1000; + netif_ip6_addr_set_pref_life(netif, i, life); + } + } + } + /* The address state may now have changed, so reobtain it next. */ +#endif /* LWIP_IPV6_ADDRESS_LIFETIMES */ + /* Step 2: update DAD state. */ + addr_state = netif_ip6_addr_state(netif, i); + if (ip6_addr_istentative(addr_state)) { + if ((addr_state & IP6_ADDR_TENTATIVE_COUNT_MASK) >= LWIP_IPV6_DUP_DETECT_ATTEMPTS) { + /* No NA received in response. Mark address as valid. For dynamic + * addresses with an expired preferred lifetime, the state is set to + * deprecated right away. That should almost never happen, though. */ + addr_state = IP6_ADDR_PREFERRED; +#if LWIP_IPV6_ADDRESS_LIFETIMES + if (!netif_ip6_addr_isstatic(netif, i) && + netif_ip6_addr_pref_life(netif, i) == 0) { + addr_state = IP6_ADDR_DEPRECATED; + } +#endif /* LWIP_IPV6_ADDRESS_LIFETIMES */ + netif_ip6_addr_set_state(netif, i, addr_state); + } else if (netif_is_up(netif) && netif_is_link_up(netif)) { + /* tentative: set next state by increasing by one */ + netif_ip6_addr_set_state(netif, i, addr_state + 1); + /* Send a NS for this address. Use the unspecified address as source + * address in all cases (RFC 4862 Sec. 5.4.2), not in the least + * because as it is, we only consider multicast replies for DAD. */ + nd6_send_ns(netif, netif_ip6_addr(netif, i), + ND6_SEND_FLAG_MULTICAST_DEST | ND6_SEND_FLAG_ANY_SRC); + } + } + } + } + +#if LWIP_IPV6_SEND_ROUTER_SOLICIT + /* Send router solicitation messages, if necessary. */ + if (!nd6_tmr_rs_reduction) { + nd6_tmr_rs_reduction = (ND6_RTR_SOLICITATION_INTERVAL / ND6_TMR_INTERVAL) - 1; + NETIF_FOREACH(netif) { + if ((netif->rs_count > 0) && netif_is_up(netif) && + netif_is_link_up(netif) && + !ip6_addr_isinvalid(netif_ip6_addr_state(netif, 0)) && + !ip6_addr_isduplicated(netif_ip6_addr_state(netif, 0))) { + if (nd6_send_rs(netif) == ERR_OK) { + netif->rs_count--; + } + } + } + } else { + nd6_tmr_rs_reduction--; + } +#endif /* LWIP_IPV6_SEND_ROUTER_SOLICIT */ + +} + +/** Send a neighbor solicitation message for a specific neighbor cache entry + * + * @param entry the neightbor cache entry for wich to send the message + * @param flags one of ND6_SEND_FLAG_* + */ +static void +nd6_send_neighbor_cache_probe(struct nd6_neighbor_cache_entry *entry, u8_t flags) +{ + nd6_send_ns(entry->netif, &entry->next_hop_address, flags); +} + +/** + * Send a neighbor solicitation message + * + * @param netif the netif on which to send the message + * @param target_addr the IPv6 target address for the ND message + * @param flags one of ND6_SEND_FLAG_* + */ +static void +nd6_send_ns(struct netif *netif, const ip6_addr_t *target_addr, u8_t flags) +{ + struct ns_header *ns_hdr; + struct pbuf *p; + const ip6_addr_t *src_addr; + u16_t lladdr_opt_len; + + LWIP_ASSERT("target address is required", target_addr != NULL); + + if (!(flags & ND6_SEND_FLAG_ANY_SRC) && + ip6_addr_isvalid(netif_ip6_addr_state(netif,0))) { + /* Use link-local address as source address. */ + src_addr = netif_ip6_addr(netif, 0); + /* calculate option length (in 8-byte-blocks) */ + lladdr_opt_len = ((netif->hwaddr_len + 2) + 7) >> 3; + } else { + src_addr = IP6_ADDR_ANY6; + /* Option "MUST NOT be included when the source IP address is the unspecified address." */ + lladdr_opt_len = 0; + } + + /* Allocate a packet. */ + p = pbuf_alloc(PBUF_IP, sizeof(struct ns_header) + (lladdr_opt_len << 3), PBUF_RAM); + if (p == NULL) { + ND6_STATS_INC(nd6.memerr); + return; + } + + /* Set fields. */ + ns_hdr = (struct ns_header *)p->payload; + + ns_hdr->type = ICMP6_TYPE_NS; + ns_hdr->code = 0; + ns_hdr->chksum = 0; + ns_hdr->reserved = 0; + ip6_addr_copy_to_packed(ns_hdr->target_address, *target_addr); + + if (lladdr_opt_len != 0) { + struct lladdr_option *lladdr_opt = (struct lladdr_option *)((u8_t*)p->payload + sizeof(struct ns_header)); + lladdr_opt->type = ND6_OPTION_TYPE_SOURCE_LLADDR; + lladdr_opt->length = (u8_t)lladdr_opt_len; + SMEMCPY(lladdr_opt->addr, netif->hwaddr, netif->hwaddr_len); + } + + /* Generate the solicited node address for the target address. */ + if (flags & ND6_SEND_FLAG_MULTICAST_DEST) { + ip6_addr_set_solicitednode(&multicast_address, target_addr->addr[3]); + ip6_addr_assign_zone(&multicast_address, IP6_MULTICAST, netif); + target_addr = &multicast_address; + } + +#if CHECKSUM_GEN_ICMP6 + IF__NETIF_CHECKSUM_ENABLED(netif, NETIF_CHECKSUM_GEN_ICMP6) { + ns_hdr->chksum = ip6_chksum_pseudo(p, IP6_NEXTH_ICMP6, p->len, src_addr, + target_addr); + } +#endif /* CHECKSUM_GEN_ICMP6 */ + + /* Send the packet out. */ + ND6_STATS_INC(nd6.xmit); + ip6_output_if(p, (src_addr == IP6_ADDR_ANY6) ? NULL : src_addr, target_addr, + ND6_HOPLIM, 0, IP6_NEXTH_ICMP6, netif); + pbuf_free(p); +} + +/** + * Send a neighbor advertisement message + * + * @param netif the netif on which to send the message + * @param target_addr the IPv6 target address for the ND message + * @param flags one of ND6_SEND_FLAG_* + */ +static void +nd6_send_na(struct netif *netif, const ip6_addr_t *target_addr, u8_t flags) +{ + struct na_header *na_hdr; + struct lladdr_option *lladdr_opt; + struct pbuf *p; + const ip6_addr_t *src_addr; + const ip6_addr_t *dest_addr; + u16_t lladdr_opt_len; + + LWIP_ASSERT("target address is required", target_addr != NULL); + + /* Use link-local address as source address. */ + /* src_addr = netif_ip6_addr(netif, 0); */ + /* Use target address as source address. */ + src_addr = target_addr; + + /* Allocate a packet. */ + lladdr_opt_len = ((netif->hwaddr_len + 2) >> 3) + (((netif->hwaddr_len + 2) & 0x07) ? 1 : 0); + p = pbuf_alloc(PBUF_IP, sizeof(struct na_header) + (lladdr_opt_len << 3), PBUF_RAM); + if (p == NULL) { + ND6_STATS_INC(nd6.memerr); + return; + } + + /* Set fields. */ + na_hdr = (struct na_header *)p->payload; + lladdr_opt = (struct lladdr_option *)((u8_t*)p->payload + sizeof(struct na_header)); + + na_hdr->type = ICMP6_TYPE_NA; + na_hdr->code = 0; + na_hdr->chksum = 0; + na_hdr->flags = flags & 0xf0; + na_hdr->reserved[0] = 0; + na_hdr->reserved[1] = 0; + na_hdr->reserved[2] = 0; + ip6_addr_copy_to_packed(na_hdr->target_address, *target_addr); + + lladdr_opt->type = ND6_OPTION_TYPE_TARGET_LLADDR; + lladdr_opt->length = (u8_t)lladdr_opt_len; + SMEMCPY(lladdr_opt->addr, netif->hwaddr, netif->hwaddr_len); + + /* Generate the solicited node address for the target address. */ + if (flags & ND6_SEND_FLAG_MULTICAST_DEST) { + ip6_addr_set_solicitednode(&multicast_address, target_addr->addr[3]); + ip6_addr_assign_zone(&multicast_address, IP6_MULTICAST, netif); + dest_addr = &multicast_address; + } else if (flags & ND6_SEND_FLAG_ALLNODES_DEST) { + ip6_addr_set_allnodes_linklocal(&multicast_address); + ip6_addr_assign_zone(&multicast_address, IP6_MULTICAST, netif); + dest_addr = &multicast_address; + } else { + dest_addr = ip6_current_src_addr(); + } + +#if CHECKSUM_GEN_ICMP6 + IF__NETIF_CHECKSUM_ENABLED(netif, NETIF_CHECKSUM_GEN_ICMP6) { + na_hdr->chksum = ip6_chksum_pseudo(p, IP6_NEXTH_ICMP6, p->len, src_addr, + dest_addr); + } +#endif /* CHECKSUM_GEN_ICMP6 */ + + /* Send the packet out. */ + ND6_STATS_INC(nd6.xmit); + ip6_output_if(p, src_addr, dest_addr, + ND6_HOPLIM, 0, IP6_NEXTH_ICMP6, netif); + pbuf_free(p); +} + +#if LWIP_IPV6_SEND_ROUTER_SOLICIT +/** + * Send a router solicitation message + * + * @param netif the netif on which to send the message + */ +static err_t +nd6_send_rs(struct netif *netif) +{ + struct rs_header *rs_hdr; + struct lladdr_option *lladdr_opt; + struct pbuf *p; + const ip6_addr_t *src_addr; + err_t err; + u16_t lladdr_opt_len = 0; + + /* Link-local source address, or unspecified address? */ + if (ip6_addr_isvalid(netif_ip6_addr_state(netif, 0))) { + src_addr = netif_ip6_addr(netif, 0); + } else { + src_addr = IP6_ADDR_ANY6; + } + + /* Generate the all routers target address. */ + ip6_addr_set_allrouters_linklocal(&multicast_address); + ip6_addr_assign_zone(&multicast_address, IP6_MULTICAST, netif); + + /* Allocate a packet. */ + if (src_addr != IP6_ADDR_ANY6) { + lladdr_opt_len = ((netif->hwaddr_len + 2) >> 3) + (((netif->hwaddr_len + 2) & 0x07) ? 1 : 0); + } + p = pbuf_alloc(PBUF_IP, sizeof(struct rs_header) + (lladdr_opt_len << 3), PBUF_RAM); + if (p == NULL) { + ND6_STATS_INC(nd6.memerr); + return ERR_BUF; + } + + /* Set fields. */ + rs_hdr = (struct rs_header *)p->payload; + + rs_hdr->type = ICMP6_TYPE_RS; + rs_hdr->code = 0; + rs_hdr->chksum = 0; + rs_hdr->reserved = 0; + + if (src_addr != IP6_ADDR_ANY6) { + /* Include our hw address. */ + lladdr_opt = (struct lladdr_option *)((u8_t*)p->payload + sizeof(struct rs_header)); + lladdr_opt->type = ND6_OPTION_TYPE_SOURCE_LLADDR; + lladdr_opt->length = (u8_t)lladdr_opt_len; + SMEMCPY(lladdr_opt->addr, netif->hwaddr, netif->hwaddr_len); + } + +#if CHECKSUM_GEN_ICMP6 + IF__NETIF_CHECKSUM_ENABLED(netif, NETIF_CHECKSUM_GEN_ICMP6) { + rs_hdr->chksum = ip6_chksum_pseudo(p, IP6_NEXTH_ICMP6, p->len, src_addr, + &multicast_address); + } +#endif /* CHECKSUM_GEN_ICMP6 */ + + /* Send the packet out. */ + ND6_STATS_INC(nd6.xmit); + + err = ip6_output_if(p, (src_addr == IP6_ADDR_ANY6) ? NULL : src_addr, &multicast_address, + ND6_HOPLIM, 0, IP6_NEXTH_ICMP6, netif); + pbuf_free(p); + + return err; +} +#endif /* LWIP_IPV6_SEND_ROUTER_SOLICIT */ + +/** + * Search for a neighbor cache entry + * + * @param ip6addr the IPv6 address of the neighbor + * @return The neighbor cache entry index that matched, -1 if no + * entry is found + */ +static s8_t +nd6_find_neighbor_cache_entry(const ip6_addr_t *ip6addr) +{ + s8_t i; + for (i = 0; i < LWIP_ND6_NUM_NEIGHBORS; i++) { + if (ip6_addr_cmp(ip6addr, &(neighbor_cache[i].next_hop_address))) { + return i; + } + } + return -1; +} + +/** + * Create a new neighbor cache entry. + * + * If no unused entry is found, will try to recycle an old entry + * according to ad-hoc "age" heuristic. + * + * @return The neighbor cache entry index that was created, -1 if no + * entry could be created + */ +static s8_t +nd6_new_neighbor_cache_entry(void) +{ + s8_t i; + s8_t j; + u32_t time; + + + /* First, try to find an empty entry. */ + for (i = 0; i < LWIP_ND6_NUM_NEIGHBORS; i++) { + if (neighbor_cache[i].state == ND6_NO_ENTRY) { + return i; + } + } + + /* We need to recycle an entry. in general, do not recycle if it is a router. */ + + /* Next, try to find a Stale entry. */ + for (i = 0; i < LWIP_ND6_NUM_NEIGHBORS; i++) { + if ((neighbor_cache[i].state == ND6_STALE) && + (!neighbor_cache[i].isrouter)) { + nd6_free_neighbor_cache_entry(i); + return i; + } + } + + /* Next, try to find a Probe entry. */ + for (i = 0; i < LWIP_ND6_NUM_NEIGHBORS; i++) { + if ((neighbor_cache[i].state == ND6_PROBE) && + (!neighbor_cache[i].isrouter)) { + nd6_free_neighbor_cache_entry(i); + return i; + } + } + + /* Next, try to find a Delayed entry. */ + for (i = 0; i < LWIP_ND6_NUM_NEIGHBORS; i++) { + if ((neighbor_cache[i].state == ND6_DELAY) && + (!neighbor_cache[i].isrouter)) { + nd6_free_neighbor_cache_entry(i); + return i; + } + } + + /* Next, try to find the oldest reachable entry. */ + time = 0xfffffffful; + j = -1; + for (i = 0; i < LWIP_ND6_NUM_NEIGHBORS; i++) { + if ((neighbor_cache[i].state == ND6_REACHABLE) && + (!neighbor_cache[i].isrouter)) { + if (neighbor_cache[i].counter.reachable_time < time) { + j = i; + time = neighbor_cache[i].counter.reachable_time; + } + } + } + if (j >= 0) { + nd6_free_neighbor_cache_entry(j); + return j; + } + + /* Next, find oldest incomplete entry without queued packets. */ + time = 0; + j = -1; + for (i = 0; i < LWIP_ND6_NUM_NEIGHBORS; i++) { + if ( + (neighbor_cache[i].q == NULL) && + (neighbor_cache[i].state == ND6_INCOMPLETE) && + (!neighbor_cache[i].isrouter)) { + if (neighbor_cache[i].counter.probes_sent >= time) { + j = i; + time = neighbor_cache[i].counter.probes_sent; + } + } + } + if (j >= 0) { + nd6_free_neighbor_cache_entry(j); + return j; + } + + /* Next, find oldest incomplete entry with queued packets. */ + time = 0; + j = -1; + for (i = 0; i < LWIP_ND6_NUM_NEIGHBORS; i++) { + if ((neighbor_cache[i].state == ND6_INCOMPLETE) && + (!neighbor_cache[i].isrouter)) { + if (neighbor_cache[i].counter.probes_sent >= time) { + j = i; + time = neighbor_cache[i].counter.probes_sent; + } + } + } + if (j >= 0) { + nd6_free_neighbor_cache_entry(j); + return j; + } + + /* No more entries to try. */ + return -1; +} + +/** + * Will free any resources associated with a neighbor cache + * entry, and will mark it as unused. + * + * @param i the neighbor cache entry index to free + */ +static void +nd6_free_neighbor_cache_entry(s8_t i) +{ + if ((i < 0) || (i >= LWIP_ND6_NUM_NEIGHBORS)) { + return; + } + if (neighbor_cache[i].isrouter) { + /* isrouter needs to be cleared before deleting a neighbor cache entry */ + return; + } + + /* Free any queued packets. */ + if (neighbor_cache[i].q != NULL) { + nd6_free_q(neighbor_cache[i].q); + neighbor_cache[i].q = NULL; + } + + neighbor_cache[i].state = ND6_NO_ENTRY; + neighbor_cache[i].isrouter = 0; + neighbor_cache[i].netif = NULL; + neighbor_cache[i].counter.reachable_time = 0; + ip6_addr_set_zero(&(neighbor_cache[i].next_hop_address)); +} + +/** + * Search for a destination cache entry + * + * @param ip6addr the IPv6 address of the destination + * @return The destination cache entry index that matched, -1 if no + * entry is found + */ +static s16_t +nd6_find_destination_cache_entry(const ip6_addr_t *ip6addr) +{ + s16_t i; + + IP6_ADDR_ZONECHECK(ip6addr); + + for (i = 0; i < LWIP_ND6_NUM_DESTINATIONS; i++) { + if (ip6_addr_cmp(ip6addr, &(destination_cache[i].destination_addr))) { + return i; + } + } + return -1; +} + +/** + * Create a new destination cache entry. If no unused entry is found, + * will recycle oldest entry. + * + * @return The destination cache entry index that was created, -1 if no + * entry was created + */ +static s16_t +nd6_new_destination_cache_entry(void) +{ + s16_t i, j; + u32_t age; + + /* Find an empty entry. */ + for (i = 0; i < LWIP_ND6_NUM_DESTINATIONS; i++) { + if (ip6_addr_isany(&(destination_cache[i].destination_addr))) { + return i; + } + } + + /* Find oldest entry. */ + age = 0; + j = LWIP_ND6_NUM_DESTINATIONS - 1; + for (i = 0; i < LWIP_ND6_NUM_DESTINATIONS; i++) { + if (destination_cache[i].age > age) { + j = i; + } + } + + return j; +} + +/** + * Clear the destination cache. + * + * This operation may be necessary for consistency in the light of changing + * local addresses and/or use of the gateway hook. + */ +void +nd6_clear_destination_cache(void) +{ + int i; + + for (i = 0; i < LWIP_ND6_NUM_DESTINATIONS; i++) { + ip6_addr_set_any(&destination_cache[i].destination_addr); + } +} + +/** + * Determine whether an address matches an on-link prefix or the subnet of a + * statically assigned address. + * + * @param ip6addr the IPv6 address to match + * @return 1 if the address is on-link, 0 otherwise + */ +static int +nd6_is_prefix_in_netif(const ip6_addr_t *ip6addr, struct netif *netif) +{ + s8_t i; + + /* Check to see if the address matches an on-link prefix. */ + for (i = 0; i < LWIP_ND6_NUM_PREFIXES; i++) { + if ((prefix_list[i].netif == netif) && + (prefix_list[i].invalidation_timer > 0) && + ip6_addr_netcmp(ip6addr, &(prefix_list[i].prefix))) { + return 1; + } + } + /* Check to see if address prefix matches a manually configured (= static) + * address. Static addresses have an implied /64 subnet assignment. Dynamic + * addresses (from autoconfiguration) have no implied subnet assignment, and + * are thus effectively /128 assignments. See RFC 5942 for more on this. */ + for (i = 0; i < LWIP_IPV6_NUM_ADDRESSES; i++) { + if (ip6_addr_isvalid(netif_ip6_addr_state(netif, i)) && + netif_ip6_addr_isstatic(netif, i) && + ip6_addr_netcmp(ip6addr, netif_ip6_addr(netif, i))) { + return 1; + } + } + return 0; +} + +/** + * Select a default router for a destination. + * + * This function is used both for routing and for finding a next-hop target for + * a packet. In the former case, the given netif is NULL, and the returned + * router entry must be for a netif suitable for sending packets (up, link up). + * In the latter case, the given netif is not NULL and restricts router choice. + * + * @param ip6addr the destination address + * @param netif the netif for the outgoing packet, if known + * @return the default router entry index, or -1 if no suitable + * router is found + */ +static s8_t +nd6_select_router(const ip6_addr_t *ip6addr, struct netif *netif) +{ + struct netif *router_netif; + s8_t i, j, valid_router; + static s8_t last_router; + + LWIP_UNUSED_ARG(ip6addr); /* @todo match preferred routes!! (must implement ND6_OPTION_TYPE_ROUTE_INFO) */ + + /* @todo: implement default router preference */ + + /* Look for valid routers. A reachable router is preferred. */ + valid_router = -1; + for (i = 0; i < LWIP_ND6_NUM_ROUTERS; i++) { + /* Is the router netif both set and apppropriate? */ + if (default_router_list[i].neighbor_entry != NULL) { + router_netif = default_router_list[i].neighbor_entry->netif; + if ((router_netif != NULL) && (netif != NULL ? netif == router_netif : + (netif_is_up(router_netif) && netif_is_link_up(router_netif)))) { + /* Is the router valid, i.e., reachable or probably reachable as per + * RFC 4861 Sec. 6.3.6? Note that we will never return a router that + * has no neighbor cache entry, due to the netif association tests. */ + if (default_router_list[i].neighbor_entry->state != ND6_INCOMPLETE) { + /* Is the router known to be reachable? */ + if (default_router_list[i].neighbor_entry->state == ND6_REACHABLE) { + return i; /* valid and reachable - done! */ + } else if (valid_router < 0) { + valid_router = i; /* valid but not known to be reachable */ + } + } + } + } + } + if (valid_router >= 0) { + return valid_router; + } + + /* Look for any router for which we have any information at all. */ + /* last_router is used for round-robin selection of incomplete routers, as + * recommended in RFC 4861 Sec. 6.3.6 point (2). Advance only when picking a + * route, to select the same router as next-hop target in the common case. */ + if ((netif == NULL) && (++last_router >= LWIP_ND6_NUM_ROUTERS)) { + last_router = 0; + } + i = last_router; + for (j = 0; j < LWIP_ND6_NUM_ROUTERS; j++) { + if (default_router_list[i].neighbor_entry != NULL) { + router_netif = default_router_list[i].neighbor_entry->netif; + if ((router_netif != NULL) && (netif != NULL ? netif == router_netif : + (netif_is_up(router_netif) && netif_is_link_up(router_netif)))) { + return i; + } + } + if (++i >= LWIP_ND6_NUM_ROUTERS) { + i = 0; + } + } + + /* no suitable router found. */ + return -1; +} + +/** + * Find a router-announced route to the given destination. This route may be + * based on an on-link prefix or a default router. + * + * If a suitable route is found, the returned netif is guaranteed to be in a + * suitable state (up, link up) to be used for packet transmission. + * + * @param ip6addr the destination IPv6 address + * @return the netif to use for the destination, or NULL if none found + */ +struct netif * +nd6_find_route(const ip6_addr_t *ip6addr) +{ + struct netif *netif; + s8_t i; + + /* @todo decide if it makes sense to check the destination cache first */ + + /* Check if there is a matching on-link prefix. There may be multiple + * matches. Pick the first one that is associated with a suitable netif. */ + for (i = 0; i < LWIP_ND6_NUM_PREFIXES; ++i) { + netif = prefix_list[i].netif; + if ((netif != NULL) && ip6_addr_netcmp(&prefix_list[i].prefix, ip6addr) && + netif_is_up(netif) && netif_is_link_up(netif)) { + return netif; + } + } + + /* No on-link prefix match. Find a router that can forward the packet. */ + i = nd6_select_router(ip6addr, NULL); + if (i >= 0) { + LWIP_ASSERT("selected router must have a neighbor entry", + default_router_list[i].neighbor_entry != NULL); + return default_router_list[i].neighbor_entry->netif; + } + + return NULL; +} + +/** + * Find an entry for a default router. + * + * @param router_addr the IPv6 address of the router + * @param netif the netif on which the router is found, if known + * @return the index of the router entry, or -1 if not found + */ +static s8_t +nd6_get_router(const ip6_addr_t *router_addr, struct netif *netif) +{ + s8_t i; + + IP6_ADDR_ZONECHECK_NETIF(router_addr, netif); + + /* Look for router. */ + for (i = 0; i < LWIP_ND6_NUM_ROUTERS; i++) { + if ((default_router_list[i].neighbor_entry != NULL) && + ((netif != NULL) ? netif == default_router_list[i].neighbor_entry->netif : 1) && + ip6_addr_cmp(router_addr, &(default_router_list[i].neighbor_entry->next_hop_address))) { + return i; + } + } + + /* router not found. */ + return -1; +} + +/** + * Create a new entry for a default router. + * + * @param router_addr the IPv6 address of the router + * @param netif the netif on which the router is connected, if known + * @return the index on the router table, or -1 if could not be created + */ +static s8_t +nd6_new_router(const ip6_addr_t *router_addr, struct netif *netif) +{ + s8_t router_index; + s8_t free_router_index; + s8_t neighbor_index; + + IP6_ADDR_ZONECHECK_NETIF(router_addr, netif); + + /* Do we have a neighbor entry for this router? */ + neighbor_index = nd6_find_neighbor_cache_entry(router_addr); + if (neighbor_index < 0) { + /* Create a neighbor entry for this router. */ + neighbor_index = nd6_new_neighbor_cache_entry(); + if (neighbor_index < 0) { + /* Could not create neighbor entry for this router. */ + return -1; + } + ip6_addr_set(&(neighbor_cache[neighbor_index].next_hop_address), router_addr); + neighbor_cache[neighbor_index].netif = netif; + neighbor_cache[neighbor_index].q = NULL; + neighbor_cache[neighbor_index].state = ND6_INCOMPLETE; + neighbor_cache[neighbor_index].counter.probes_sent = 1; + nd6_send_neighbor_cache_probe(&neighbor_cache[neighbor_index], ND6_SEND_FLAG_MULTICAST_DEST); + } + + /* Mark neighbor as router. */ + neighbor_cache[neighbor_index].isrouter = 1; + + /* Look for empty entry. */ + free_router_index = LWIP_ND6_NUM_ROUTERS; + for (router_index = LWIP_ND6_NUM_ROUTERS - 1; router_index >= 0; router_index--) { + /* check if router already exists (this is a special case for 2 netifs on the same subnet + - e.g. wifi and cable) */ + if(default_router_list[router_index].neighbor_entry == &(neighbor_cache[neighbor_index])){ + return router_index; + } + if (default_router_list[router_index].neighbor_entry == NULL) { + /* remember lowest free index to create a new entry */ + free_router_index = router_index; + } + } + if (free_router_index < LWIP_ND6_NUM_ROUTERS) { + default_router_list[free_router_index].neighbor_entry = &(neighbor_cache[neighbor_index]); + return free_router_index; + } + + /* Could not create a router entry. */ + + /* Mark neighbor entry as not-router. Entry might be useful as neighbor still. */ + neighbor_cache[neighbor_index].isrouter = 0; + + /* router not found. */ + return -1; +} + +/** + * Find the cached entry for an on-link prefix. + * + * @param prefix the IPv6 prefix that is on-link + * @param netif the netif on which the prefix is on-link + * @return the index on the prefix table, or -1 if not found + */ +static s8_t +nd6_get_onlink_prefix(const ip6_addr_t *prefix, struct netif *netif) +{ + s8_t i; + + /* Look for prefix in list. */ + for (i = 0; i < LWIP_ND6_NUM_PREFIXES; ++i) { + if ((ip6_addr_netcmp(&(prefix_list[i].prefix), prefix)) && + (prefix_list[i].netif == netif)) { + return i; + } + } + + /* Entry not available. */ + return -1; +} + +/** + * Creates a new entry for an on-link prefix. + * + * @param prefix the IPv6 prefix that is on-link + * @param netif the netif on which the prefix is on-link + * @return the index on the prefix table, or -1 if not created + */ +static s8_t +nd6_new_onlink_prefix(const ip6_addr_t *prefix, struct netif *netif) +{ + s8_t i; + + /* Create new entry. */ + for (i = 0; i < LWIP_ND6_NUM_PREFIXES; ++i) { + if ((prefix_list[i].netif == NULL) || + (prefix_list[i].invalidation_timer == 0)) { + /* Found empty prefix entry. */ + prefix_list[i].netif = netif; + ip6_addr_set(&(prefix_list[i].prefix), prefix); + return i; + } + } + + /* Entry not available. */ + return -1; +} + +/** + * Determine the next hop for a destination. Will determine if the + * destination is on-link, else a suitable on-link router is selected. + * + * The last entry index is cached for fast entry search. + * + * @param ip6addr the destination address + * @param netif the netif on which the packet will be sent + * @return the neighbor cache entry for the next hop, ERR_RTE if no + * suitable next hop was found, ERR_MEM if no cache entry + * could be created + */ +static s8_t +nd6_get_next_hop_entry(const ip6_addr_t *ip6addr, struct netif *netif) +{ +#ifdef LWIP_HOOK_ND6_GET_GW + const ip6_addr_t *next_hop_addr; +#endif /* LWIP_HOOK_ND6_GET_GW */ + s8_t i; + s16_t dst_idx; + + IP6_ADDR_ZONECHECK_NETIF(ip6addr, netif); + +#if LWIP_NETIF_HWADDRHINT + if (netif->hints != NULL) { + /* per-pcb cached entry was given */ + netif_addr_idx_t addr_hint = netif->hints->addr_hint; + if (addr_hint < LWIP_ND6_NUM_DESTINATIONS) { + nd6_cached_destination_index = addr_hint; + } + } +#endif /* LWIP_NETIF_HWADDRHINT */ + + /* Look for ip6addr in destination cache. */ + if (ip6_addr_cmp(ip6addr, &(destination_cache[nd6_cached_destination_index].destination_addr))) { + /* the cached entry index is the right one! */ + /* do nothing. */ + ND6_STATS_INC(nd6.cachehit); + } else { + /* Search destination cache. */ + dst_idx = nd6_find_destination_cache_entry(ip6addr); + if (dst_idx >= 0) { + /* found destination entry. make it our new cached index. */ + LWIP_ASSERT("type overflow", (size_t)dst_idx < NETIF_ADDR_IDX_MAX); + nd6_cached_destination_index = (netif_addr_idx_t)dst_idx; + } else { + /* Not found. Create a new destination entry. */ + dst_idx = nd6_new_destination_cache_entry(); + if (dst_idx >= 0) { + /* got new destination entry. make it our new cached index. */ + LWIP_ASSERT("type overflow", (size_t)dst_idx < NETIF_ADDR_IDX_MAX); + nd6_cached_destination_index = (netif_addr_idx_t)dst_idx; + } else { + /* Could not create a destination cache entry. */ + return ERR_MEM; + } + + /* Copy dest address to destination cache. */ + ip6_addr_set(&(destination_cache[nd6_cached_destination_index].destination_addr), ip6addr); + + /* Now find the next hop. is it a neighbor? */ + if (ip6_addr_islinklocal(ip6addr) || + nd6_is_prefix_in_netif(ip6addr, netif)) { + /* Destination in local link. */ + destination_cache[nd6_cached_destination_index].pmtu = netif_mtu6(netif); + ip6_addr_copy(destination_cache[nd6_cached_destination_index].next_hop_addr, destination_cache[nd6_cached_destination_index].destination_addr); +#ifdef LWIP_HOOK_ND6_GET_GW + } else if ((next_hop_addr = LWIP_HOOK_ND6_GET_GW(netif, ip6addr)) != NULL) { + /* Next hop for destination provided by hook function. */ + destination_cache[nd6_cached_destination_index].pmtu = netif->mtu; + ip6_addr_set(&destination_cache[nd6_cached_destination_index].next_hop_addr, next_hop_addr); +#endif /* LWIP_HOOK_ND6_GET_GW */ + } else { + /* We need to select a router. */ + i = nd6_select_router(ip6addr, netif); + if (i < 0) { + /* No router found. */ + ip6_addr_set_any(&(destination_cache[nd6_cached_destination_index].destination_addr)); + return ERR_RTE; + } + destination_cache[nd6_cached_destination_index].pmtu = netif_mtu6(netif); /* Start with netif mtu, correct through ICMPv6 if necessary */ + ip6_addr_copy(destination_cache[nd6_cached_destination_index].next_hop_addr, default_router_list[i].neighbor_entry->next_hop_address); + } + } + } + +#if LWIP_NETIF_HWADDRHINT + if (netif->hints != NULL) { + /* per-pcb cached entry was given */ + netif->hints->addr_hint = nd6_cached_destination_index; + } +#endif /* LWIP_NETIF_HWADDRHINT */ + + /* Look in neighbor cache for the next-hop address. */ + if (ip6_addr_cmp(&(destination_cache[nd6_cached_destination_index].next_hop_addr), + &(neighbor_cache[nd6_cached_neighbor_index].next_hop_address))) { + /* Cache hit. */ + /* Do nothing. */ + ND6_STATS_INC(nd6.cachehit); + } else { + i = nd6_find_neighbor_cache_entry(&(destination_cache[nd6_cached_destination_index].next_hop_addr)); + if (i >= 0) { + /* Found a matching record, make it new cached entry. */ + nd6_cached_neighbor_index = i; + } else { + /* Neighbor not in cache. Make a new entry. */ + i = nd6_new_neighbor_cache_entry(); + if (i >= 0) { + /* got new neighbor entry. make it our new cached index. */ + nd6_cached_neighbor_index = i; + } else { + /* Could not create a neighbor cache entry. */ + return ERR_MEM; + } + + /* Initialize fields. */ + ip6_addr_copy(neighbor_cache[i].next_hop_address, + destination_cache[nd6_cached_destination_index].next_hop_addr); + neighbor_cache[i].isrouter = 0; + neighbor_cache[i].netif = netif; + neighbor_cache[i].state = ND6_INCOMPLETE; + neighbor_cache[i].counter.probes_sent = 1; + nd6_send_neighbor_cache_probe(&neighbor_cache[i], ND6_SEND_FLAG_MULTICAST_DEST); + } + } + + /* Reset this destination's age. */ + destination_cache[nd6_cached_destination_index].age = 0; + + return nd6_cached_neighbor_index; +} + +/** + * Queue a packet for a neighbor. + * + * @param neighbor_index the index in the neighbor cache table + * @param q packet to be queued + * @return ERR_OK if succeeded, ERR_MEM if out of memory + */ +static err_t +nd6_queue_packet(s8_t neighbor_index, struct pbuf *q) +{ + err_t result = ERR_MEM; + struct pbuf *p; + int copy_needed = 0; +#if LWIP_ND6_QUEUEING + struct nd6_q_entry *new_entry, *r; +#endif /* LWIP_ND6_QUEUEING */ + + if ((neighbor_index < 0) || (neighbor_index >= LWIP_ND6_NUM_NEIGHBORS)) { + return ERR_ARG; + } + + /* IF q includes a pbuf that must be copied, we have to copy the whole chain + * into a new PBUF_RAM. See the definition of PBUF_NEEDS_COPY for details. */ + p = q; + while (p) { + if (PBUF_NEEDS_COPY(p)) { + copy_needed = 1; + break; + } + p = p->next; + } + if (copy_needed) { + /* copy the whole packet into new pbufs */ + p = pbuf_clone(PBUF_LINK, PBUF_RAM, q); + while ((p == NULL) && (neighbor_cache[neighbor_index].q != NULL)) { + /* Free oldest packet (as per RFC recommendation) */ +#if LWIP_ND6_QUEUEING + r = neighbor_cache[neighbor_index].q; + neighbor_cache[neighbor_index].q = r->next; + r->next = NULL; + nd6_free_q(r); +#else /* LWIP_ND6_QUEUEING */ + pbuf_free(neighbor_cache[neighbor_index].q); + neighbor_cache[neighbor_index].q = NULL; +#endif /* LWIP_ND6_QUEUEING */ + p = pbuf_clone(PBUF_LINK, PBUF_RAM, q); + } + } else { + /* referencing the old pbuf is enough */ + p = q; + pbuf_ref(p); + } + /* packet was copied/ref'd? */ + if (p != NULL) { + /* queue packet ... */ +#if LWIP_ND6_QUEUEING + /* allocate a new nd6 queue entry */ + new_entry = (struct nd6_q_entry *)memp_malloc(MEMP_ND6_QUEUE); + if ((new_entry == NULL) && (neighbor_cache[neighbor_index].q != NULL)) { + /* Free oldest packet (as per RFC recommendation) */ + r = neighbor_cache[neighbor_index].q; + neighbor_cache[neighbor_index].q = r->next; + r->next = NULL; + nd6_free_q(r); + new_entry = (struct nd6_q_entry *)memp_malloc(MEMP_ND6_QUEUE); + } + if (new_entry != NULL) { + new_entry->next = NULL; + new_entry->p = p; + if (neighbor_cache[neighbor_index].q != NULL) { + /* queue was already existent, append the new entry to the end */ + r = neighbor_cache[neighbor_index].q; + while (r->next != NULL) { + r = r->next; + } + r->next = new_entry; + } else { + /* queue did not exist, first item in queue */ + neighbor_cache[neighbor_index].q = new_entry; + } + LWIP_DEBUGF(LWIP_DBG_TRACE, ("ipv6: queued packet %p on neighbor entry %"S16_F"\n", (void *)p, (s16_t)neighbor_index)); + result = ERR_OK; + } else { + /* the pool MEMP_ND6_QUEUE is empty */ + pbuf_free(p); + LWIP_DEBUGF(LWIP_DBG_TRACE, ("ipv6: could not queue a copy of packet %p (out of memory)\n", (void *)p)); + /* { result == ERR_MEM } through initialization */ + } +#else /* LWIP_ND6_QUEUEING */ + /* Queue a single packet. If an older packet is already queued, free it as per RFC. */ + if (neighbor_cache[neighbor_index].q != NULL) { + pbuf_free(neighbor_cache[neighbor_index].q); + } + neighbor_cache[neighbor_index].q = p; + LWIP_DEBUGF(LWIP_DBG_TRACE, ("ipv6: queued packet %p on neighbor entry %"S16_F"\n", (void *)p, (s16_t)neighbor_index)); + result = ERR_OK; +#endif /* LWIP_ND6_QUEUEING */ + } else { + LWIP_DEBUGF(LWIP_DBG_TRACE, ("ipv6: could not queue a copy of packet %p (out of memory)\n", (void *)q)); + /* { result == ERR_MEM } through initialization */ + } + + return result; +} + +#if LWIP_ND6_QUEUEING +/** + * Free a complete queue of nd6 q entries + * + * @param q a queue of nd6_q_entry to free + */ +static void +nd6_free_q(struct nd6_q_entry *q) +{ + struct nd6_q_entry *r; + LWIP_ASSERT("q != NULL", q != NULL); + LWIP_ASSERT("q->p != NULL", q->p != NULL); + while (q) { + r = q; + q = q->next; + LWIP_ASSERT("r->p != NULL", (r->p != NULL)); + pbuf_free(r->p); + memp_free(MEMP_ND6_QUEUE, r); + } +} +#endif /* LWIP_ND6_QUEUEING */ + +/** + * Send queued packets for a neighbor + * + * @param i the neighbor to send packets to + */ +static void +nd6_send_q(s8_t i) +{ + struct ip6_hdr *ip6hdr; + ip6_addr_t dest; +#if LWIP_ND6_QUEUEING + struct nd6_q_entry *q; +#endif /* LWIP_ND6_QUEUEING */ + + if ((i < 0) || (i >= LWIP_ND6_NUM_NEIGHBORS)) { + return; + } + +#if LWIP_ND6_QUEUEING + while (neighbor_cache[i].q != NULL) { + /* remember first in queue */ + q = neighbor_cache[i].q; + /* pop first item off the queue */ + neighbor_cache[i].q = q->next; + /* Get ipv6 header. */ + ip6hdr = (struct ip6_hdr *)(q->p->payload); + /* Create an aligned copy. */ + ip6_addr_copy_from_packed(dest, ip6hdr->dest); + /* Restore the zone, if applicable. */ + ip6_addr_assign_zone(&dest, IP6_UNKNOWN, neighbor_cache[i].netif); + /* send the queued IPv6 packet */ + (neighbor_cache[i].netif)->output_ip6(neighbor_cache[i].netif, q->p, &dest); + /* free the queued IP packet */ + pbuf_free(q->p); + /* now queue entry can be freed */ + memp_free(MEMP_ND6_QUEUE, q); + } +#else /* LWIP_ND6_QUEUEING */ + if (neighbor_cache[i].q != NULL) { + /* Get ipv6 header. */ + ip6hdr = (struct ip6_hdr *)(neighbor_cache[i].q->payload); + /* Create an aligned copy. */ + ip6_addr_copy_from_packed(dest, ip6hdr->dest); + /* Restore the zone, if applicable. */ + ip6_addr_assign_zone(&dest, IP6_UNKNOWN, neighbor_cache[i].netif); + /* send the queued IPv6 packet */ + (neighbor_cache[i].netif)->output_ip6(neighbor_cache[i].netif, neighbor_cache[i].q, &dest); + /* free the queued IP packet */ + pbuf_free(neighbor_cache[i].q); + neighbor_cache[i].q = NULL; + } +#endif /* LWIP_ND6_QUEUEING */ +} + +/** + * A packet is to be transmitted to a specific IPv6 destination on a specific + * interface. Check if we can find the hardware address of the next hop to use + * for the packet. If so, give the hardware address to the caller, which should + * use it to send the packet right away. Otherwise, enqueue the packet for + * later transmission while looking up the hardware address, if possible. + * + * As such, this function returns one of three different possible results: + * + * - ERR_OK with a non-NULL 'hwaddrp': the caller should send the packet now. + * - ERR_OK with a NULL 'hwaddrp': the packet has been enqueued for later. + * - not ERR_OK: something went wrong; forward the error upward in the stack. + * + * @param netif The lwIP network interface on which the IP packet will be sent. + * @param q The pbuf(s) containing the IP packet to be sent. + * @param ip6addr The destination IPv6 address of the packet. + * @param hwaddrp On success, filled with a pointer to a HW address or NULL (meaning + * the packet has been queued). + * @return + * - ERR_OK on success, ERR_RTE if no route was found for the packet, + * or ERR_MEM if low memory conditions prohibit sending the packet at all. + */ +err_t +nd6_get_next_hop_addr_or_queue(struct netif *netif, struct pbuf *q, const ip6_addr_t *ip6addr, const u8_t **hwaddrp) +{ + s8_t i; + + /* Get next hop record. */ + i = nd6_get_next_hop_entry(ip6addr, netif); + if (i < 0) { + /* failed to get a next hop neighbor record. */ + return i; + } + + /* Now that we have a destination record, send or queue the packet. */ + if (neighbor_cache[i].state == ND6_STALE) { + /* Switch to delay state. */ + neighbor_cache[i].state = ND6_DELAY; + neighbor_cache[i].counter.delay_time = LWIP_ND6_DELAY_FIRST_PROBE_TIME / ND6_TMR_INTERVAL; + } + /* @todo should we send or queue if PROBE? send for now, to let unicast NS pass. */ + if ((neighbor_cache[i].state == ND6_REACHABLE) || + (neighbor_cache[i].state == ND6_DELAY) || + (neighbor_cache[i].state == ND6_PROBE)) { + + /* Tell the caller to send out the packet now. */ + *hwaddrp = neighbor_cache[i].lladdr; + return ERR_OK; + } + + /* We should queue packet on this interface. */ + *hwaddrp = NULL; + return nd6_queue_packet(i, q); +} + + +/** + * Get the Path MTU for a destination. + * + * @param ip6addr the destination address + * @param netif the netif on which the packet will be sent + * @return the Path MTU, if known, or the netif default MTU + */ +u16_t +nd6_get_destination_mtu(const ip6_addr_t *ip6addr, struct netif *netif) +{ + s16_t i; + + i = nd6_find_destination_cache_entry(ip6addr); + if (i >= 0) { + if (destination_cache[i].pmtu > 0) { + return destination_cache[i].pmtu; + } + } + + if (netif != NULL) { + return netif_mtu6(netif); + } + + return 1280; /* Minimum MTU */ +} + + +#if LWIP_ND6_TCP_REACHABILITY_HINTS +/** + * Provide the Neighbor discovery process with a hint that a + * destination is reachable. Called by tcp_receive when ACKs are + * received or sent (as per RFC). This is useful to avoid sending + * NS messages every 30 seconds. + * + * @param ip6addr the destination address which is know to be reachable + * by an upper layer protocol (TCP) + */ +void +nd6_reachability_hint(const ip6_addr_t *ip6addr) +{ + s8_t i; + s16_t dst_idx; + + /* Find destination in cache. */ + if (ip6_addr_cmp(ip6addr, &(destination_cache[nd6_cached_destination_index].destination_addr))) { + dst_idx = nd6_cached_destination_index; + ND6_STATS_INC(nd6.cachehit); + } else { + dst_idx = nd6_find_destination_cache_entry(ip6addr); + } + if (dst_idx < 0) { + return; + } + + /* Find next hop neighbor in cache. */ + if (ip6_addr_cmp(&(destination_cache[dst_idx].next_hop_addr), &(neighbor_cache[nd6_cached_neighbor_index].next_hop_address))) { + i = nd6_cached_neighbor_index; + ND6_STATS_INC(nd6.cachehit); + } else { + i = nd6_find_neighbor_cache_entry(&(destination_cache[dst_idx].next_hop_addr)); + } + if (i < 0) { + return; + } + + /* For safety: don't set as reachable if we don't have a LL address yet. Misuse protection. */ + if (neighbor_cache[i].state == ND6_INCOMPLETE || neighbor_cache[i].state == ND6_NO_ENTRY) { + return; + } + + /* Set reachability state. */ + neighbor_cache[i].state = ND6_REACHABLE; + neighbor_cache[i].counter.reachable_time = reachable_time; +} +#endif /* LWIP_ND6_TCP_REACHABILITY_HINTS */ + +/** + * Remove all prefix, neighbor_cache and router entries of the specified netif. + * + * @param netif points to a network interface + */ +void +nd6_cleanup_netif(struct netif *netif) +{ + u8_t i; + s8_t router_index; + for (i = 0; i < LWIP_ND6_NUM_PREFIXES; i++) { + if (prefix_list[i].netif == netif) { + prefix_list[i].netif = NULL; + } + } + for (i = 0; i < LWIP_ND6_NUM_NEIGHBORS; i++) { + if (neighbor_cache[i].netif == netif) { + for (router_index = 0; router_index < LWIP_ND6_NUM_ROUTERS; router_index++) { + if (default_router_list[router_index].neighbor_entry == &neighbor_cache[i]) { + default_router_list[router_index].neighbor_entry = NULL; + default_router_list[router_index].flags = 0; + } + } + neighbor_cache[i].isrouter = 0; + nd6_free_neighbor_cache_entry(i); + } + } + /* Clear the destination cache, since many entries may now have become + * invalid for one of several reasons. As destination cache entries have no + * netif association, use a sledgehammer approach (this can be improved). */ + nd6_clear_destination_cache(); +} + +#if LWIP_IPV6_MLD +/** + * The state of a local IPv6 address entry is about to change. If needed, join + * or leave the solicited-node multicast group for the address. + * + * @param netif The netif that owns the address. + * @param addr_idx The index of the address. + * @param new_state The new (IP6_ADDR_) state for the address. + */ +void +nd6_adjust_mld_membership(struct netif *netif, s8_t addr_idx, u8_t new_state) +{ + u8_t old_state, old_member, new_member; + + old_state = netif_ip6_addr_state(netif, addr_idx); + + /* Determine whether we were, and should be, a member of the solicited-node + * multicast group for this address. For tentative addresses, the group is + * not joined until the address enters the TENTATIVE_1 (or VALID) state. */ + old_member = (old_state != IP6_ADDR_INVALID && old_state != IP6_ADDR_DUPLICATED && old_state != IP6_ADDR_TENTATIVE); + new_member = (new_state != IP6_ADDR_INVALID && new_state != IP6_ADDR_DUPLICATED && new_state != IP6_ADDR_TENTATIVE); + + if (old_member != new_member) { + ip6_addr_set_solicitednode(&multicast_address, netif_ip6_addr(netif, addr_idx)->addr[3]); + ip6_addr_assign_zone(&multicast_address, IP6_MULTICAST, netif); + + if (new_member) { + mld6_joingroup_netif(netif, &multicast_address); + } else { + mld6_leavegroup_netif(netif, &multicast_address); + } + } +} +#endif /* LWIP_IPV6_MLD */ + +/** Netif was added, set up, or reconnected (link up) */ +void +nd6_restart_netif(struct netif *netif) +{ +#if LWIP_IPV6_SEND_ROUTER_SOLICIT + /* Send Router Solicitation messages (see RFC 4861, ch. 6.3.7). */ + netif->rs_count = LWIP_ND6_MAX_MULTICAST_SOLICIT; +#endif /* LWIP_IPV6_SEND_ROUTER_SOLICIT */ +} + +#endif /* LWIP_IPV6 */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/mem.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/mem.c new file mode 100644 index 0000000000000000000000000000000000000000..315fb3c5d5fe443cf8247a0b6f2ada19583aa8a5 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/mem.c @@ -0,0 +1,1017 @@ +/** + * @file + * Dynamic memory manager + * + * This is a lightweight replacement for the standard C library malloc(). + * + * If you want to use the standard C library malloc() instead, define + * MEM_LIBC_MALLOC to 1 in your lwipopts.h + * + * To let mem_malloc() use pools (prevents fragmentation and is much faster than + * a heap but might waste some memory), define MEM_USE_POOLS to 1, define + * MEMP_USE_CUSTOM_POOLS to 1 and create a file "lwippools.h" that includes a list + * of pools like this (more pools can be added between _START and _END): + * + * Define three pools with sizes 256, 512, and 1512 bytes + * LWIP_MALLOC_MEMPOOL_START + * LWIP_MALLOC_MEMPOOL(20, 256) + * LWIP_MALLOC_MEMPOOL(10, 512) + * LWIP_MALLOC_MEMPOOL(5, 1512) + * LWIP_MALLOC_MEMPOOL_END + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * Simon Goldschmidt + * + */ + +#include "lwip/opt.h" +#include "lwip/mem.h" +#include "lwip/def.h" +#include "lwip/sys.h" +#include "lwip/stats.h" +#include "lwip/err.h" + +#include + +#if MEM_LIBC_MALLOC +#include /* for malloc()/free() */ +#endif + +/* This is overridable for tests only... */ +#ifndef LWIP_MEM_ILLEGAL_FREE +#define LWIP_MEM_ILLEGAL_FREE(msg) LWIP_ASSERT(msg, 0) +#endif + +#define MEM_STATS_INC_LOCKED(x) SYS_ARCH_LOCKED(MEM_STATS_INC(x)) +#define MEM_STATS_INC_USED_LOCKED(x, y) SYS_ARCH_LOCKED(MEM_STATS_INC_USED(x, y)) +#define MEM_STATS_DEC_USED_LOCKED(x, y) SYS_ARCH_LOCKED(MEM_STATS_DEC_USED(x, y)) + +#if MEM_OVERFLOW_CHECK +#define MEM_SANITY_OFFSET MEM_SANITY_REGION_BEFORE_ALIGNED +#define MEM_SANITY_OVERHEAD (MEM_SANITY_REGION_BEFORE_ALIGNED + MEM_SANITY_REGION_AFTER_ALIGNED) +#else +#define MEM_SANITY_OFFSET 0 +#define MEM_SANITY_OVERHEAD 0 +#endif + +#if MEM_OVERFLOW_CHECK || MEMP_OVERFLOW_CHECK +/** + * Check if a mep element was victim of an overflow or underflow + * (e.g. the restricted area after/before it has been altered) + * + * @param p the mem element to check + * @param size allocated size of the element + * @param descr1 description of the element source shown on error + * @param descr2 description of the element source shown on error + */ +void +mem_overflow_check_raw(void *p, size_t size, const char *descr1, const char *descr2) +{ +#if MEM_SANITY_REGION_AFTER_ALIGNED || MEM_SANITY_REGION_BEFORE_ALIGNED + u16_t k; + u8_t *m; + +#if MEM_SANITY_REGION_AFTER_ALIGNED > 0 + m = (u8_t *)p + size; + for (k = 0; k < MEM_SANITY_REGION_AFTER_ALIGNED; k++) { + if (m[k] != 0xcd) { + char errstr[128]; + snprintf(errstr, sizeof(errstr), "detected mem overflow in %s%s", descr1, descr2); + LWIP_ASSERT(errstr, 0); + } + } +#endif /* MEM_SANITY_REGION_AFTER_ALIGNED > 0 */ + +#if MEM_SANITY_REGION_BEFORE_ALIGNED > 0 + m = (u8_t *)p - MEM_SANITY_REGION_BEFORE_ALIGNED; + for (k = 0; k < MEM_SANITY_REGION_BEFORE_ALIGNED; k++) { + if (m[k] != 0xcd) { + char errstr[128]; + snprintf(errstr, sizeof(errstr), "detected mem underflow in %s%s", descr1, descr2); + LWIP_ASSERT(errstr, 0); + } + } +#endif /* MEM_SANITY_REGION_BEFORE_ALIGNED > 0 */ +#else + LWIP_UNUSED_ARG(p); + LWIP_UNUSED_ARG(desc); + LWIP_UNUSED_ARG(descr); +#endif +} + +/** + * Initialize the restricted area of a mem element. + */ +void +mem_overflow_init_raw(void *p, size_t size) +{ +#if MEM_SANITY_REGION_BEFORE_ALIGNED > 0 || MEM_SANITY_REGION_AFTER_ALIGNED > 0 + u8_t *m; +#if MEM_SANITY_REGION_BEFORE_ALIGNED > 0 + m = (u8_t *)p - MEM_SANITY_REGION_BEFORE_ALIGNED; + memset(m, 0xcd, MEM_SANITY_REGION_BEFORE_ALIGNED); +#endif +#if MEM_SANITY_REGION_AFTER_ALIGNED > 0 + m = (u8_t *)p + size; + memset(m, 0xcd, MEM_SANITY_REGION_AFTER_ALIGNED); +#endif +#else /* MEM_SANITY_REGION_BEFORE_ALIGNED > 0 || MEM_SANITY_REGION_AFTER_ALIGNED > 0 */ + LWIP_UNUSED_ARG(p); + LWIP_UNUSED_ARG(desc); +#endif /* MEM_SANITY_REGION_BEFORE_ALIGNED > 0 || MEM_SANITY_REGION_AFTER_ALIGNED > 0 */ +} +#endif /* MEM_OVERFLOW_CHECK || MEMP_OVERFLOW_CHECK */ + +#if MEM_LIBC_MALLOC || MEM_USE_POOLS + +/** mem_init is not used when using pools instead of a heap or using + * C library malloc(). + */ +void +mem_init(void) +{ +} + +/** mem_trim is not used when using pools instead of a heap or using + * C library malloc(): we can't free part of a pool element and the stack + * support mem_trim() to return a different pointer + */ +void * +mem_trim(void *mem, mem_size_t size) +{ + LWIP_UNUSED_ARG(size); + return mem; +} +#endif /* MEM_LIBC_MALLOC || MEM_USE_POOLS */ + +#if MEM_LIBC_MALLOC +/* lwIP heap implemented using C library malloc() */ + +/* in case C library malloc() needs extra protection, + * allow these defines to be overridden. + */ +#ifndef mem_clib_free +#define mem_clib_free free +#endif +#ifndef mem_clib_malloc +#define mem_clib_malloc malloc +#endif +#ifndef mem_clib_calloc +#define mem_clib_calloc calloc +#endif + +#if LWIP_STATS && MEM_STATS +#define MEM_LIBC_STATSHELPER_SIZE LWIP_MEM_ALIGN_SIZE(sizeof(mem_size_t)) +#else +#define MEM_LIBC_STATSHELPER_SIZE 0 +#endif + +/** + * Allocate a block of memory with a minimum of 'size' bytes. + * + * @param size is the minimum size of the requested block in bytes. + * @return pointer to allocated memory or NULL if no free memory was found. + * + * Note that the returned value must always be aligned (as defined by MEM_ALIGNMENT). + */ +void * +mem_malloc(mem_size_t size) +{ + void *ret = mem_clib_malloc(size + MEM_LIBC_STATSHELPER_SIZE); + if (ret == NULL) { + MEM_STATS_INC_LOCKED(err); + } else { + LWIP_ASSERT("malloc() must return aligned memory", LWIP_MEM_ALIGN(ret) == ret); +#if LWIP_STATS && MEM_STATS + *(mem_size_t *)ret = size; + ret = (u8_t *)ret + MEM_LIBC_STATSHELPER_SIZE; + MEM_STATS_INC_USED_LOCKED(used, size); +#endif + } + return ret; +} + +/** Put memory back on the heap + * + * @param rmem is the pointer as returned by a previous call to mem_malloc() + */ +void +mem_free(void *rmem) +{ + LWIP_ASSERT("rmem != NULL", (rmem != NULL)); + LWIP_ASSERT("rmem == MEM_ALIGN(rmem)", (rmem == LWIP_MEM_ALIGN(rmem))); +#if LWIP_STATS && MEM_STATS + rmem = (u8_t *)rmem - MEM_LIBC_STATSHELPER_SIZE; + MEM_STATS_DEC_USED_LOCKED(used, *(mem_size_t *)rmem); +#endif + mem_clib_free(rmem); +} + +#elif MEM_USE_POOLS + +/* lwIP heap implemented with different sized pools */ + +/** + * Allocate memory: determine the smallest pool that is big enough + * to contain an element of 'size' and get an element from that pool. + * + * @param size the size in bytes of the memory needed + * @return a pointer to the allocated memory or NULL if the pool is empty + */ +void * +mem_malloc(mem_size_t size) +{ + void *ret; + struct memp_malloc_helper *element = NULL; + memp_t poolnr; + mem_size_t required_size = size + LWIP_MEM_ALIGN_SIZE(sizeof(struct memp_malloc_helper)); + + for (poolnr = MEMP_POOL_FIRST; poolnr <= MEMP_POOL_LAST; poolnr = (memp_t)(poolnr + 1)) { + /* is this pool big enough to hold an element of the required size + plus a struct memp_malloc_helper that saves the pool this element came from? */ + if (required_size <= memp_pools[poolnr]->size) { + element = (struct memp_malloc_helper *)memp_malloc(poolnr); + if (element == NULL) { + /* No need to DEBUGF or ASSERT: This error is already taken care of in memp.c */ +#if MEM_USE_POOLS_TRY_BIGGER_POOL + /** Try a bigger pool if this one is empty! */ + if (poolnr < MEMP_POOL_LAST) { + continue; + } +#endif /* MEM_USE_POOLS_TRY_BIGGER_POOL */ + MEM_STATS_INC_LOCKED(err); + return NULL; + } + break; + } + } + if (poolnr > MEMP_POOL_LAST) { + LWIP_ASSERT("mem_malloc(): no pool is that big!", 0); + MEM_STATS_INC_LOCKED(err); + return NULL; + } + + /* save the pool number this element came from */ + element->poolnr = poolnr; + /* and return a pointer to the memory directly after the struct memp_malloc_helper */ + ret = (u8_t *)element + LWIP_MEM_ALIGN_SIZE(sizeof(struct memp_malloc_helper)); + +#if MEMP_OVERFLOW_CHECK || (LWIP_STATS && MEM_STATS) + /* truncating to u16_t is safe because struct memp_desc::size is u16_t */ + element->size = (u16_t)size; + MEM_STATS_INC_USED_LOCKED(used, element->size); +#endif /* MEMP_OVERFLOW_CHECK || (LWIP_STATS && MEM_STATS) */ +#if MEMP_OVERFLOW_CHECK + /* initialize unused memory (diff between requested size and selected pool's size) */ + memset((u8_t *)ret + size, 0xcd, memp_pools[poolnr]->size - size); +#endif /* MEMP_OVERFLOW_CHECK */ + return ret; +} + +/** + * Free memory previously allocated by mem_malloc. Loads the pool number + * and calls memp_free with that pool number to put the element back into + * its pool + * + * @param rmem the memory element to free + */ +void +mem_free(void *rmem) +{ + struct memp_malloc_helper *hmem; + + LWIP_ASSERT("rmem != NULL", (rmem != NULL)); + LWIP_ASSERT("rmem == MEM_ALIGN(rmem)", (rmem == LWIP_MEM_ALIGN(rmem))); + + /* get the original struct memp_malloc_helper */ + /* cast through void* to get rid of alignment warnings */ + hmem = (struct memp_malloc_helper *)(void *)((u8_t *)rmem - LWIP_MEM_ALIGN_SIZE(sizeof(struct memp_malloc_helper))); + + LWIP_ASSERT("hmem != NULL", (hmem != NULL)); + LWIP_ASSERT("hmem == MEM_ALIGN(hmem)", (hmem == LWIP_MEM_ALIGN(hmem))); + LWIP_ASSERT("hmem->poolnr < MEMP_MAX", (hmem->poolnr < MEMP_MAX)); + + MEM_STATS_DEC_USED_LOCKED(used, hmem->size); +#if MEMP_OVERFLOW_CHECK + { + u16_t i; + LWIP_ASSERT("MEM_USE_POOLS: invalid chunk size", + hmem->size <= memp_pools[hmem->poolnr]->size); + /* check that unused memory remained untouched (diff between requested size and selected pool's size) */ + for (i = hmem->size; i < memp_pools[hmem->poolnr]->size; i++) { + u8_t data = *((u8_t *)rmem + i); + LWIP_ASSERT("MEM_USE_POOLS: mem overflow detected", data == 0xcd); + } + } +#endif /* MEMP_OVERFLOW_CHECK */ + + /* and put it in the pool we saved earlier */ + memp_free(hmem->poolnr, hmem); +} + +#else /* MEM_USE_POOLS */ +/* lwIP replacement for your libc malloc() */ + +/** + * The heap is made up as a list of structs of this type. + * This does not have to be aligned since for getting its size, + * we only use the macro SIZEOF_STRUCT_MEM, which automatically aligns. + */ +struct mem { + /** index (-> ram[next]) of the next struct */ + mem_size_t next; + /** index (-> ram[prev]) of the previous struct */ + mem_size_t prev; + /** 1: this area is used; 0: this area is unused */ + u8_t used; +#if MEM_OVERFLOW_CHECK + /** this keeps track of the user allocation size for guard checks */ + mem_size_t user_size; +#endif +}; + +/** All allocated blocks will be MIN_SIZE bytes big, at least! + * MIN_SIZE can be overridden to suit your needs. Smaller values save space, + * larger values could prevent too small blocks to fragment the RAM too much. */ +#ifndef MIN_SIZE +#define MIN_SIZE 12 +#endif /* MIN_SIZE */ +/* some alignment macros: we define them here for better source code layout */ +#define MIN_SIZE_ALIGNED LWIP_MEM_ALIGN_SIZE(MIN_SIZE) +#define SIZEOF_STRUCT_MEM LWIP_MEM_ALIGN_SIZE(sizeof(struct mem)) +#define MEM_SIZE_ALIGNED LWIP_MEM_ALIGN_SIZE(MEM_SIZE) + +/** If you want to relocate the heap to external memory, simply define + * LWIP_RAM_HEAP_POINTER as a void-pointer to that location. + * If so, make sure the memory at that location is big enough (see below on + * how that space is calculated). */ +#ifndef LWIP_RAM_HEAP_POINTER +/** the heap. we need one struct mem at the end and some room for alignment */ +LWIP_DECLARE_MEMORY_ALIGNED(ram_heap, MEM_SIZE_ALIGNED + (2U * SIZEOF_STRUCT_MEM)); +#define LWIP_RAM_HEAP_POINTER ram_heap +#endif /* LWIP_RAM_HEAP_POINTER */ + +/** pointer to the heap (ram_heap): for alignment, ram is now a pointer instead of an array */ +static u8_t *ram; +/** the last entry, always unused! */ +static struct mem *ram_end; + +/** concurrent access protection */ +#if !NO_SYS +static sys_mutex_t mem_mutex; +#endif + +#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT + +static volatile u8_t mem_free_count; + +/* Allow mem_free from other (e.g. interrupt) context */ +#define LWIP_MEM_FREE_DECL_PROTECT() SYS_ARCH_DECL_PROTECT(lev_free) +#define LWIP_MEM_FREE_PROTECT() SYS_ARCH_PROTECT(lev_free) +#define LWIP_MEM_FREE_UNPROTECT() SYS_ARCH_UNPROTECT(lev_free) +#define LWIP_MEM_ALLOC_DECL_PROTECT() SYS_ARCH_DECL_PROTECT(lev_alloc) +#define LWIP_MEM_ALLOC_PROTECT() SYS_ARCH_PROTECT(lev_alloc) +#define LWIP_MEM_ALLOC_UNPROTECT() SYS_ARCH_UNPROTECT(lev_alloc) +#define LWIP_MEM_LFREE_VOLATILE volatile + +#else /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */ + +/* Protect the heap only by using a mutex */ +#define LWIP_MEM_FREE_DECL_PROTECT() +#define LWIP_MEM_FREE_PROTECT() sys_mutex_lock(&mem_mutex) +#define LWIP_MEM_FREE_UNPROTECT() sys_mutex_unlock(&mem_mutex) +/* mem_malloc is protected using mutex AND LWIP_MEM_ALLOC_PROTECT */ +#define LWIP_MEM_ALLOC_DECL_PROTECT() +#define LWIP_MEM_ALLOC_PROTECT() +#define LWIP_MEM_ALLOC_UNPROTECT() +#define LWIP_MEM_LFREE_VOLATILE + +#endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */ + +/** pointer to the lowest free block, this is used for faster search */ +static struct mem * LWIP_MEM_LFREE_VOLATILE lfree; + +#if MEM_SANITY_CHECK +static void mem_sanity(void); +#define MEM_SANITY() mem_sanity() +#else +#define MEM_SANITY() +#endif + +#if MEM_OVERFLOW_CHECK +static void +mem_overflow_init_element(struct mem *mem, mem_size_t user_size) +{ + void *p = (u8_t *)mem + SIZEOF_STRUCT_MEM + MEM_SANITY_OFFSET; + mem->user_size = user_size; + mem_overflow_init_raw(p, user_size); +} + +static void +mem_overflow_check_element(struct mem *mem) +{ + void *p = (u8_t *)mem + SIZEOF_STRUCT_MEM + MEM_SANITY_OFFSET; + mem_overflow_check_raw(p, mem->user_size, "heap", ""); +} +#else /* MEM_OVERFLOW_CHECK */ +#define mem_overflow_init_element(mem, size) +#define mem_overflow_check_element(mem) +#endif /* MEM_OVERFLOW_CHECK */ + +static struct mem * +ptr_to_mem(mem_size_t ptr) +{ + return (struct mem *)(void *)&ram[ptr]; +} + +static mem_size_t +mem_to_ptr(void *mem) +{ + return (mem_size_t)((u8_t *)mem - ram); +} + +/** + * "Plug holes" by combining adjacent empty struct mems. + * After this function is through, there should not exist + * one empty struct mem pointing to another empty struct mem. + * + * @param mem this points to a struct mem which just has been freed + * @internal this function is only called by mem_free() and mem_trim() + * + * This assumes access to the heap is protected by the calling function + * already. + */ +static void +plug_holes(struct mem *mem) +{ + struct mem *nmem; + struct mem *pmem; + + LWIP_ASSERT("plug_holes: mem >= ram", (u8_t *)mem >= ram); + LWIP_ASSERT("plug_holes: mem < ram_end", (u8_t *)mem < (u8_t *)ram_end); + LWIP_ASSERT("plug_holes: mem->used == 0", mem->used == 0); + + /* plug hole forward */ + LWIP_ASSERT("plug_holes: mem->next <= MEM_SIZE_ALIGNED", mem->next <= MEM_SIZE_ALIGNED); + + nmem = ptr_to_mem(mem->next); + if (mem != nmem && nmem->used == 0 && (u8_t *)nmem != (u8_t *)ram_end) { + /* if mem->next is unused and not end of ram, combine mem and mem->next */ + if (lfree == nmem) { + lfree = mem; + } + mem->next = nmem->next; + if (nmem->next != MEM_SIZE_ALIGNED) { + ptr_to_mem(nmem->next)->prev = mem_to_ptr(mem); + } + } + + /* plug hole backward */ + pmem = ptr_to_mem(mem->prev); + if (pmem != mem && pmem->used == 0) { + /* if mem->prev is unused, combine mem and mem->prev */ + if (lfree == mem) { + lfree = pmem; + } + pmem->next = mem->next; + if (mem->next != MEM_SIZE_ALIGNED) { + ptr_to_mem(mem->next)->prev = mem_to_ptr(pmem); + } + } +} + +/** + * Zero the heap and initialize start, end and lowest-free + */ +void +mem_init(void) +{ + struct mem *mem; + + LWIP_ASSERT("Sanity check alignment", + (SIZEOF_STRUCT_MEM & (MEM_ALIGNMENT - 1)) == 0); + + /* align the heap */ + ram = (u8_t *)LWIP_MEM_ALIGN(LWIP_RAM_HEAP_POINTER); + /* initialize the start of the heap */ + mem = (struct mem *)(void *)ram; + mem->next = MEM_SIZE_ALIGNED; + mem->prev = 0; + mem->used = 0; + /* initialize the end of the heap */ + ram_end = ptr_to_mem(MEM_SIZE_ALIGNED); + ram_end->used = 1; + ram_end->next = MEM_SIZE_ALIGNED; + ram_end->prev = MEM_SIZE_ALIGNED; + MEM_SANITY(); + + /* initialize the lowest-free pointer to the start of the heap */ + lfree = (struct mem *)(void *)ram; + + MEM_STATS_AVAIL(avail, MEM_SIZE_ALIGNED); + + if (sys_mutex_new(&mem_mutex) != ERR_OK) { + LWIP_ASSERT("failed to create mem_mutex", 0); + } +} + +/* Check if a struct mem is correctly linked. + * If not, double-free is a possible reason. + */ +static int +mem_link_valid(struct mem *mem) +{ + struct mem *nmem, *pmem; + mem_size_t rmem_idx; + rmem_idx = mem_to_ptr(mem); + nmem = ptr_to_mem(mem->next); + pmem = ptr_to_mem(mem->prev); + if ((mem->next > MEM_SIZE_ALIGNED) || (mem->prev > MEM_SIZE_ALIGNED) || + ((mem->prev != rmem_idx) && (pmem->next != rmem_idx)) || + ((nmem != ram_end) && (nmem->prev != rmem_idx))) { + return 0; + } + return 1; +} + +#if MEM_SANITY_CHECK +static void +mem_sanity(void) +{ + struct mem *mem; + u8_t last_used; + + /* begin with first element here */ + mem = (struct mem *)ram; + LWIP_ASSERT("heap element used valid", (mem->used == 0) || (mem->used == 1)); + last_used = mem->used; + LWIP_ASSERT("heap element prev ptr valid", mem->prev == 0); + LWIP_ASSERT("heap element next ptr valid", mem->next <= MEM_SIZE_ALIGNED); + LWIP_ASSERT("heap element next ptr aligned", LWIP_MEM_ALIGN(ptr_to_mem(mem->next) == ptr_to_mem(mem->next))); + + /* check all elements before the end of the heap */ + for (mem = ptr_to_mem(mem->next); + ((u8_t *)mem > ram) && (mem < ram_end); + mem = ptr_to_mem(mem->next)) { + LWIP_ASSERT("heap element aligned", LWIP_MEM_ALIGN(mem) == mem); + LWIP_ASSERT("heap element prev ptr valid", mem->prev <= MEM_SIZE_ALIGNED); + LWIP_ASSERT("heap element next ptr valid", mem->next <= MEM_SIZE_ALIGNED); + LWIP_ASSERT("heap element prev ptr aligned", LWIP_MEM_ALIGN(ptr_to_mem(mem->prev) == ptr_to_mem(mem->prev))); + LWIP_ASSERT("heap element next ptr aligned", LWIP_MEM_ALIGN(ptr_to_mem(mem->next) == ptr_to_mem(mem->next))); + + if (last_used == 0) { + /* 2 unused elements in a row? */ + LWIP_ASSERT("heap element unused?", mem->used == 1); + } else { + LWIP_ASSERT("heap element unused member", (mem->used == 0) || (mem->used == 1)); + } + + LWIP_ASSERT("heap element link valid", mem_link_valid(mem)); + + /* used/unused altering */ + last_used = mem->used; + } + LWIP_ASSERT("heap end ptr sanity", mem == ptr_to_mem(MEM_SIZE_ALIGNED)); + LWIP_ASSERT("heap element used valid", mem->used == 1); + LWIP_ASSERT("heap element prev ptr valid", mem->prev == MEM_SIZE_ALIGNED); + LWIP_ASSERT("heap element next ptr valid", mem->next == MEM_SIZE_ALIGNED); +} +#endif /* MEM_SANITY_CHECK */ + +/** + * Put a struct mem back on the heap + * + * @param rmem is the data portion of a struct mem as returned by a previous + * call to mem_malloc() + */ +void +mem_free(void *rmem) +{ + struct mem *mem; + LWIP_MEM_FREE_DECL_PROTECT(); + + if (rmem == NULL) { + LWIP_DEBUGF(MEM_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("mem_free(p == NULL) was called.\n")); + return; + } + if ((((mem_ptr_t)rmem) & (MEM_ALIGNMENT - 1)) != 0) { + LWIP_MEM_ILLEGAL_FREE("mem_free: sanity check alignment"); + LWIP_DEBUGF(MEM_DEBUG | LWIP_DBG_LEVEL_SEVERE, ("mem_free: sanity check alignment\n")); + /* protect mem stats from concurrent access */ + MEM_STATS_INC_LOCKED(illegal); + return; + } + + /* Get the corresponding struct mem: */ + /* cast through void* to get rid of alignment warnings */ + mem = (struct mem *)(void *)((u8_t *)rmem - (SIZEOF_STRUCT_MEM + MEM_SANITY_OFFSET)); + + if ((u8_t *)mem < ram || (u8_t *)rmem + MIN_SIZE_ALIGNED > (u8_t *)ram_end) { + LWIP_MEM_ILLEGAL_FREE("mem_free: illegal memory"); + LWIP_DEBUGF(MEM_DEBUG | LWIP_DBG_LEVEL_SEVERE, ("mem_free: illegal memory\n")); + /* protect mem stats from concurrent access */ + MEM_STATS_INC_LOCKED(illegal); + return; + } +#if MEM_OVERFLOW_CHECK + mem_overflow_check_element(mem); +#endif + /* protect the heap from concurrent access */ + LWIP_MEM_FREE_PROTECT(); + /* mem has to be in a used state */ + if (!mem->used) { + LWIP_MEM_ILLEGAL_FREE("mem_free: illegal memory: double free"); + LWIP_MEM_FREE_UNPROTECT(); + LWIP_DEBUGF(MEM_DEBUG | LWIP_DBG_LEVEL_SEVERE, ("mem_free: illegal memory: double free?\n")); + /* protect mem stats from concurrent access */ + MEM_STATS_INC_LOCKED(illegal); + return; + } + + if (!mem_link_valid(mem)) { + LWIP_MEM_ILLEGAL_FREE("mem_free: illegal memory: non-linked: double free"); + LWIP_MEM_FREE_UNPROTECT(); + LWIP_DEBUGF(MEM_DEBUG | LWIP_DBG_LEVEL_SEVERE, ("mem_free: illegal memory: non-linked: double free?\n")); + /* protect mem stats from concurrent access */ + MEM_STATS_INC_LOCKED(illegal); + return; + } + + /* mem is now unused. */ + mem->used = 0; + + if (mem < lfree) { + /* the newly freed struct is now the lowest */ + lfree = mem; + } + + MEM_STATS_DEC_USED(used, mem->next - (mem_size_t)(((u8_t *)mem - ram))); + + /* finally, see if prev or next are free also */ + plug_holes(mem); + MEM_SANITY(); +#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT + mem_free_count = 1; +#endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */ + LWIP_MEM_FREE_UNPROTECT(); +} + +/** + * Shrink memory returned by mem_malloc(). + * + * @param rmem pointer to memory allocated by mem_malloc the is to be shrinked + * @param new_size required size after shrinking (needs to be smaller than or + * equal to the previous size) + * @return for compatibility reasons: is always == rmem, at the moment + * or NULL if newsize is > old size, in which case rmem is NOT touched + * or freed! + */ +void * +mem_trim(void *rmem, mem_size_t new_size) +{ + mem_size_t size, newsize; + mem_size_t ptr, ptr2; + struct mem *mem, *mem2; + /* use the FREE_PROTECT here: it protects with sem OR SYS_ARCH_PROTECT */ + LWIP_MEM_FREE_DECL_PROTECT(); + + /* Expand the size of the allocated memory region so that we can + adjust for alignment. */ + newsize = (mem_size_t)LWIP_MEM_ALIGN_SIZE(new_size); + if (newsize < MIN_SIZE_ALIGNED) { + /* every data block must be at least MIN_SIZE_ALIGNED long */ + newsize = MIN_SIZE_ALIGNED; + } +#if MEM_OVERFLOW_CHECK + newsize += MEM_SANITY_REGION_BEFORE_ALIGNED + MEM_SANITY_REGION_AFTER_ALIGNED; +#endif + if ((newsize > MEM_SIZE_ALIGNED) || (newsize < new_size)) { + return NULL; + } + + LWIP_ASSERT("mem_trim: legal memory", (u8_t *)rmem >= (u8_t *)ram && + (u8_t *)rmem < (u8_t *)ram_end); + + if ((u8_t *)rmem < (u8_t *)ram || (u8_t *)rmem >= (u8_t *)ram_end) { + LWIP_DEBUGF(MEM_DEBUG | LWIP_DBG_LEVEL_SEVERE, ("mem_trim: illegal memory\n")); + /* protect mem stats from concurrent access */ + MEM_STATS_INC_LOCKED(illegal); + return rmem; + } + /* Get the corresponding struct mem ... */ + /* cast through void* to get rid of alignment warnings */ + mem = (struct mem *)(void *)((u8_t *)rmem - (SIZEOF_STRUCT_MEM + MEM_SANITY_OFFSET)); +#if MEM_OVERFLOW_CHECK + mem_overflow_check_element(mem); +#endif + /* ... and its offset pointer */ + ptr = mem_to_ptr(mem); + + size = (mem_size_t)((mem_size_t)(mem->next - ptr) - (SIZEOF_STRUCT_MEM + MEM_SANITY_OVERHEAD)); + LWIP_ASSERT("mem_trim can only shrink memory", newsize <= size); + if (newsize > size) { + /* not supported */ + return NULL; + } + if (newsize == size) { + /* No change in size, simply return */ + return rmem; + } + + /* protect the heap from concurrent access */ + LWIP_MEM_FREE_PROTECT(); + + mem2 = ptr_to_mem(mem->next); + if (mem2->used == 0) { + /* The next struct is unused, we can simply move it at little */ + mem_size_t next; + LWIP_ASSERT("invalid next ptr", mem->next != MEM_SIZE_ALIGNED); + /* remember the old next pointer */ + next = mem2->next; + /* create new struct mem which is moved directly after the shrinked mem */ + ptr2 = (mem_size_t)(ptr + SIZEOF_STRUCT_MEM + newsize); + if (lfree == mem2) { + lfree = ptr_to_mem(ptr2); + } + mem2 = ptr_to_mem(ptr2); + mem2->used = 0; + /* restore the next pointer */ + mem2->next = next; + /* link it back to mem */ + mem2->prev = ptr; + /* link mem to it */ + mem->next = ptr2; + /* last thing to restore linked list: as we have moved mem2, + * let 'mem2->next->prev' point to mem2 again. but only if mem2->next is not + * the end of the heap */ + if (mem2->next != MEM_SIZE_ALIGNED) { + ptr_to_mem(mem2->next)->prev = ptr2; + } + MEM_STATS_DEC_USED(used, (size - newsize)); + /* no need to plug holes, we've already done that */ + } else if (newsize + SIZEOF_STRUCT_MEM + MIN_SIZE_ALIGNED <= size) { + /* Next struct is used but there's room for another struct mem with + * at least MIN_SIZE_ALIGNED of data. + * Old size ('size') must be big enough to contain at least 'newsize' plus a struct mem + * ('SIZEOF_STRUCT_MEM') with some data ('MIN_SIZE_ALIGNED'). + * @todo we could leave out MIN_SIZE_ALIGNED. We would create an empty + * region that couldn't hold data, but when mem->next gets freed, + * the 2 regions would be combined, resulting in more free memory */ + ptr2 = (mem_size_t)(ptr + SIZEOF_STRUCT_MEM + newsize); + LWIP_ASSERT("invalid next ptr", mem->next != MEM_SIZE_ALIGNED); + mem2 = ptr_to_mem(ptr2); + if (mem2 < lfree) { + lfree = mem2; + } + mem2->used = 0; + mem2->next = mem->next; + mem2->prev = ptr; + mem->next = ptr2; + if (mem2->next != MEM_SIZE_ALIGNED) { + ptr_to_mem(mem2->next)->prev = ptr2; + } + MEM_STATS_DEC_USED(used, (size - newsize)); + /* the original mem->next is used, so no need to plug holes! */ + } + /* else { + next struct mem is used but size between mem and mem2 is not big enough + to create another struct mem + -> don't do anyhting. + -> the remaining space stays unused since it is too small + } */ +#if MEM_OVERFLOW_CHECK + mem_overflow_init_element(mem, new_size); +#endif + MEM_SANITY(); +#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT + mem_free_count = 1; +#endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */ + LWIP_MEM_FREE_UNPROTECT(); + return rmem; +} + +/** + * Allocate a block of memory with a minimum of 'size' bytes. + * + * @param size_in is the minimum size of the requested block in bytes. + * @return pointer to allocated memory or NULL if no free memory was found. + * + * Note that the returned value will always be aligned (as defined by MEM_ALIGNMENT). + */ +void * +mem_malloc(mem_size_t size_in) +{ + mem_size_t ptr, ptr2, size; + struct mem *mem, *mem2; +#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT + u8_t local_mem_free_count = 0; +#endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */ + LWIP_MEM_ALLOC_DECL_PROTECT(); + + if (size_in == 0) { + return NULL; + } + + /* Expand the size of the allocated memory region so that we can + adjust for alignment. */ + size = (mem_size_t)LWIP_MEM_ALIGN_SIZE(size_in); + if (size < MIN_SIZE_ALIGNED) { + /* every data block must be at least MIN_SIZE_ALIGNED long */ + size = MIN_SIZE_ALIGNED; + } +#if MEM_OVERFLOW_CHECK + size += MEM_SANITY_REGION_BEFORE_ALIGNED + MEM_SANITY_REGION_AFTER_ALIGNED; +#endif + if ((size > MEM_SIZE_ALIGNED) || (size < size_in)) { + return NULL; + } + + /* protect the heap from concurrent access */ + sys_mutex_lock(&mem_mutex); + LWIP_MEM_ALLOC_PROTECT(); +#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT + /* run as long as a mem_free disturbed mem_malloc or mem_trim */ + do { + local_mem_free_count = 0; +#endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */ + + /* Scan through the heap searching for a free block that is big enough, + * beginning with the lowest free block. + */ + for (ptr = mem_to_ptr(lfree); ptr < MEM_SIZE_ALIGNED - size; + ptr = ptr_to_mem(ptr)->next) { + mem = ptr_to_mem(ptr); +#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT + mem_free_count = 0; + LWIP_MEM_ALLOC_UNPROTECT(); + /* allow mem_free or mem_trim to run */ + LWIP_MEM_ALLOC_PROTECT(); + if (mem_free_count != 0) { + /* If mem_free or mem_trim have run, we have to restart since they + could have altered our current struct mem. */ + local_mem_free_count = 1; + break; + } +#endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */ + + if ((!mem->used) && + (mem->next - (ptr + SIZEOF_STRUCT_MEM)) >= size) { + /* mem is not used and at least perfect fit is possible: + * mem->next - (ptr + SIZEOF_STRUCT_MEM) gives us the 'user data size' of mem */ + + if (mem->next - (ptr + SIZEOF_STRUCT_MEM) >= (size + SIZEOF_STRUCT_MEM + MIN_SIZE_ALIGNED)) { + /* (in addition to the above, we test if another struct mem (SIZEOF_STRUCT_MEM) containing + * at least MIN_SIZE_ALIGNED of data also fits in the 'user data space' of 'mem') + * -> split large block, create empty remainder, + * remainder must be large enough to contain MIN_SIZE_ALIGNED data: if + * mem->next - (ptr + (2*SIZEOF_STRUCT_MEM)) == size, + * struct mem would fit in but no data between mem2 and mem2->next + * @todo we could leave out MIN_SIZE_ALIGNED. We would create an empty + * region that couldn't hold data, but when mem->next gets freed, + * the 2 regions would be combined, resulting in more free memory + */ + ptr2 = (mem_size_t)(ptr + SIZEOF_STRUCT_MEM + size); + LWIP_ASSERT("invalid next ptr",ptr2 != MEM_SIZE_ALIGNED); + /* create mem2 struct */ + mem2 = ptr_to_mem(ptr2); + mem2->used = 0; + mem2->next = mem->next; + mem2->prev = ptr; + /* and insert it between mem and mem->next */ + mem->next = ptr2; + mem->used = 1; + + if (mem2->next != MEM_SIZE_ALIGNED) { + ptr_to_mem(mem2->next)->prev = ptr2; + } + MEM_STATS_INC_USED(used, (size + SIZEOF_STRUCT_MEM)); + } else { + /* (a mem2 struct does no fit into the user data space of mem and mem->next will always + * be used at this point: if not we have 2 unused structs in a row, plug_holes should have + * take care of this). + * -> near fit or exact fit: do not split, no mem2 creation + * also can't move mem->next directly behind mem, since mem->next + * will always be used at this point! + */ + mem->used = 1; + MEM_STATS_INC_USED(used, mem->next - mem_to_ptr(mem)); + } +#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT +mem_malloc_adjust_lfree: +#endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */ + if (mem == lfree) { + struct mem *cur = lfree; + /* Find next free block after mem and update lowest free pointer */ + while (cur->used && cur != ram_end) { +#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT + mem_free_count = 0; + LWIP_MEM_ALLOC_UNPROTECT(); + /* prevent high interrupt latency... */ + LWIP_MEM_ALLOC_PROTECT(); + if (mem_free_count != 0) { + /* If mem_free or mem_trim have run, we have to restart since they + could have altered our current struct mem or lfree. */ + goto mem_malloc_adjust_lfree; + } +#endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */ + cur = ptr_to_mem(cur->next); + } + lfree = cur; + LWIP_ASSERT("mem_malloc: !lfree->used", ((lfree == ram_end) || (!lfree->used))); + } + LWIP_MEM_ALLOC_UNPROTECT(); + sys_mutex_unlock(&mem_mutex); + LWIP_ASSERT("mem_malloc: allocated memory not above ram_end.", + (mem_ptr_t)mem + SIZEOF_STRUCT_MEM + size <= (mem_ptr_t)ram_end); + LWIP_ASSERT("mem_malloc: allocated memory properly aligned.", + ((mem_ptr_t)mem + SIZEOF_STRUCT_MEM) % MEM_ALIGNMENT == 0); + LWIP_ASSERT("mem_malloc: sanity check alignment", + (((mem_ptr_t)mem) & (MEM_ALIGNMENT - 1)) == 0); + +#if MEM_OVERFLOW_CHECK + mem_overflow_init_element(mem, size_in); +#endif + MEM_SANITY(); + return (u8_t *)mem + SIZEOF_STRUCT_MEM + MEM_SANITY_OFFSET; + } + } +#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT + /* if we got interrupted by a mem_free, try again */ + } while (local_mem_free_count != 0); +#endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */ + MEM_STATS_INC(err); + LWIP_MEM_ALLOC_UNPROTECT(); + sys_mutex_unlock(&mem_mutex); + LWIP_DEBUGF(MEM_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("mem_malloc: could not allocate %"S16_F" bytes\n", (s16_t)size)); + return NULL; +} + +#endif /* MEM_USE_POOLS */ + +#if MEM_LIBC_MALLOC && (!LWIP_STATS || !MEM_STATS) +void * +mem_calloc(mem_size_t count, mem_size_t size) +{ + return mem_clib_calloc(count, size); +} + +#else /* MEM_LIBC_MALLOC && (!LWIP_STATS || !MEM_STATS) */ +/** + * Contiguously allocates enough space for count objects that are size bytes + * of memory each and returns a pointer to the allocated memory. + * + * The allocated memory is filled with bytes of value zero. + * + * @param count number of objects to allocate + * @param size size of the objects to allocate + * @return pointer to allocated memory / NULL pointer if there is an error + */ +void * +mem_calloc(mem_size_t count, mem_size_t size) +{ + void *p; + size_t alloc_size = (size_t)count * (size_t)size; + + if ((size_t)(mem_size_t)alloc_size != alloc_size) { + LWIP_DEBUGF(MEM_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("mem_calloc: could not allocate %"SZT_F" bytes\n", alloc_size)); + return NULL; + } + + /* allocate 'count' objects of size 'size' */ + p = mem_malloc((mem_size_t)alloc_size); + if (p) { + /* zero the memory */ + memset(p, 0, alloc_size); + } + return p; +} +#endif /* MEM_LIBC_MALLOC && (!LWIP_STATS || !MEM_STATS) */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/memp.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/memp.c new file mode 100644 index 0000000000000000000000000000000000000000..352ce5a55127a658b6b3c9d8541298c42df332ff --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/memp.c @@ -0,0 +1,447 @@ +/** + * @file + * Dynamic pool memory manager + * + * lwIP has dedicated pools for many structures (netconn, protocol control blocks, + * packet buffers, ...). All these pools are managed here. + * + * @defgroup mempool Memory pools + * @ingroup infrastructure + * Custom memory pools + + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#include "lwip/opt.h" + +#include "lwip/memp.h" +#include "lwip/sys.h" +#include "lwip/stats.h" + +#include + +/* Make sure we include everything we need for size calculation required by memp_std.h */ +#include "lwip/pbuf.h" +#include "lwip/raw.h" +#include "lwip/udp.h" +#include "lwip/tcp.h" +#include "lwip/priv/tcp_priv.h" +#include "lwip/altcp.h" +#include "lwip/ip4_frag.h" +#include "lwip/netbuf.h" +#include "lwip/api.h" +#include "lwip/priv/tcpip_priv.h" +#include "lwip/priv/api_msg.h" +#include "lwip/priv/sockets_priv.h" +#include "lwip/etharp.h" +#include "lwip/igmp.h" +#include "lwip/timeouts.h" +/* needed by default MEMP_NUM_SYS_TIMEOUT */ +#include "netif/ppp/ppp_opts.h" +#include "lwip/netdb.h" +#include "lwip/dns.h" +#include "lwip/priv/nd6_priv.h" +#include "lwip/ip6_frag.h" +#include "lwip/mld6.h" + +#define LWIP_MEMPOOL(name,num,size,desc) LWIP_MEMPOOL_DECLARE(name,num,size,desc) +#include "lwip/priv/memp_std.h" + +const struct memp_desc *const memp_pools[MEMP_MAX] = { +#define LWIP_MEMPOOL(name,num,size,desc) &memp_ ## name, +#include "lwip/priv/memp_std.h" +}; + +#ifdef LWIP_HOOK_FILENAME +#include LWIP_HOOK_FILENAME +#endif + +#if MEMP_MEM_MALLOC && MEMP_OVERFLOW_CHECK >= 2 +#undef MEMP_OVERFLOW_CHECK +/* MEMP_OVERFLOW_CHECK >= 2 does not work with MEMP_MEM_MALLOC, use 1 instead */ +#define MEMP_OVERFLOW_CHECK 1 +#endif + +#if MEMP_SANITY_CHECK && !MEMP_MEM_MALLOC +/** + * Check that memp-lists don't form a circle, using "Floyd's cycle-finding algorithm". + */ +static int +memp_sanity(const struct memp_desc *desc) +{ + struct memp *t, *h; + + t = *desc->tab; + if (t != NULL) { + for (h = t->next; (t != NULL) && (h != NULL); t = t->next, + h = ((h->next != NULL) ? h->next->next : NULL)) { + if (t == h) { + return 0; + } + } + } + + return 1; +} +#endif /* MEMP_SANITY_CHECK && !MEMP_MEM_MALLOC */ + +#if MEMP_OVERFLOW_CHECK +/** + * Check if a memp element was victim of an overflow or underflow + * (e.g. the restricted area after/before it has been altered) + * + * @param p the memp element to check + * @param desc the pool p comes from + */ +static void +memp_overflow_check_element(struct memp *p, const struct memp_desc *desc) +{ + mem_overflow_check_raw((u8_t *)p + MEMP_SIZE, desc->size, "pool ", desc->desc); +} + +/** + * Initialize the restricted area of on memp element. + */ +static void +memp_overflow_init_element(struct memp *p, const struct memp_desc *desc) +{ + mem_overflow_init_raw((u8_t *)p + MEMP_SIZE, desc->size); +} + +#if MEMP_OVERFLOW_CHECK >= 2 +/** + * Do an overflow check for all elements in every pool. + * + * @see memp_overflow_check_element for a description of the check + */ +static void +memp_overflow_check_all(void) +{ + u16_t i, j; + struct memp *p; + SYS_ARCH_DECL_PROTECT(old_level); + SYS_ARCH_PROTECT(old_level); + + for (i = 0; i < MEMP_MAX; ++i) { + p = (struct memp *)LWIP_MEM_ALIGN(memp_pools[i]->base); + for (j = 0; j < memp_pools[i]->num; ++j) { + memp_overflow_check_element(p, memp_pools[i]); + p = LWIP_ALIGNMENT_CAST(struct memp *, ((u8_t *)p + MEMP_SIZE + memp_pools[i]->size + MEM_SANITY_REGION_AFTER_ALIGNED)); + } + } + SYS_ARCH_UNPROTECT(old_level); +} +#endif /* MEMP_OVERFLOW_CHECK >= 2 */ +#endif /* MEMP_OVERFLOW_CHECK */ + +/** + * Initialize custom memory pool. + * Related functions: memp_malloc_pool, memp_free_pool + * + * @param desc pool to initialize + */ +void +memp_init_pool(const struct memp_desc *desc) +{ +#if MEMP_MEM_MALLOC + LWIP_UNUSED_ARG(desc); +#else + int i; + struct memp *memp; + + *desc->tab = NULL; + memp = (struct memp *)LWIP_MEM_ALIGN(desc->base); +#if MEMP_MEM_INIT + /* force memset on pool memory */ + memset(memp, 0, (size_t)desc->num * (MEMP_SIZE + desc->size +#if MEMP_OVERFLOW_CHECK + + MEM_SANITY_REGION_AFTER_ALIGNED +#endif + )); +#endif + /* create a linked list of memp elements */ + for (i = 0; i < desc->num; ++i) { + memp->next = *desc->tab; + *desc->tab = memp; +#if MEMP_OVERFLOW_CHECK + memp_overflow_init_element(memp, desc); +#endif /* MEMP_OVERFLOW_CHECK */ + /* cast through void* to get rid of alignment warnings */ + memp = (struct memp *)(void *)((u8_t *)memp + MEMP_SIZE + desc->size +#if MEMP_OVERFLOW_CHECK + + MEM_SANITY_REGION_AFTER_ALIGNED +#endif + ); + } +#if MEMP_STATS + desc->stats->avail = desc->num; +#endif /* MEMP_STATS */ +#endif /* !MEMP_MEM_MALLOC */ + +#if MEMP_STATS && (defined(LWIP_DEBUG) || LWIP_STATS_DISPLAY) + desc->stats->name = desc->desc; +#endif /* MEMP_STATS && (defined(LWIP_DEBUG) || LWIP_STATS_DISPLAY) */ +} + +/** + * Initializes lwIP built-in pools. + * Related functions: memp_malloc, memp_free + * + * Carves out memp_memory into linked lists for each pool-type. + */ +void +memp_init(void) +{ + u16_t i; + + /* for every pool: */ + for (i = 0; i < LWIP_ARRAYSIZE(memp_pools); i++) { + memp_init_pool(memp_pools[i]); + +#if LWIP_STATS && MEMP_STATS + lwip_stats.memp[i] = memp_pools[i]->stats; +#endif + } + +#if MEMP_OVERFLOW_CHECK >= 2 + /* check everything a first time to see if it worked */ + memp_overflow_check_all(); +#endif /* MEMP_OVERFLOW_CHECK >= 2 */ +} + +static void * +#if !MEMP_OVERFLOW_CHECK +do_memp_malloc_pool(const struct memp_desc *desc) +#else +do_memp_malloc_pool_fn(const struct memp_desc *desc, const char *file, const int line) +#endif +{ + struct memp *memp; + SYS_ARCH_DECL_PROTECT(old_level); + +#if MEMP_MEM_MALLOC + memp = (struct memp *)mem_malloc(MEMP_SIZE + MEMP_ALIGN_SIZE(desc->size)); + SYS_ARCH_PROTECT(old_level); +#else /* MEMP_MEM_MALLOC */ + SYS_ARCH_PROTECT(old_level); + + memp = *desc->tab; +#endif /* MEMP_MEM_MALLOC */ + + if (memp != NULL) { +#if !MEMP_MEM_MALLOC +#if MEMP_OVERFLOW_CHECK == 1 + memp_overflow_check_element(memp, desc); +#endif /* MEMP_OVERFLOW_CHECK */ + + *desc->tab = memp->next; +#if MEMP_OVERFLOW_CHECK + memp->next = NULL; +#endif /* MEMP_OVERFLOW_CHECK */ +#endif /* !MEMP_MEM_MALLOC */ +#if MEMP_OVERFLOW_CHECK + memp->file = file; + memp->line = line; +#if MEMP_MEM_MALLOC + memp_overflow_init_element(memp, desc); +#endif /* MEMP_MEM_MALLOC */ +#endif /* MEMP_OVERFLOW_CHECK */ + LWIP_ASSERT("memp_malloc: memp properly aligned", + ((mem_ptr_t)memp % MEM_ALIGNMENT) == 0); +#if MEMP_STATS + desc->stats->used++; + if (desc->stats->used > desc->stats->max) { + desc->stats->max = desc->stats->used; + } +#endif + SYS_ARCH_UNPROTECT(old_level); + /* cast through u8_t* to get rid of alignment warnings */ + return ((u8_t *)memp + MEMP_SIZE); + } else { +#if MEMP_STATS + desc->stats->err++; +#endif + SYS_ARCH_UNPROTECT(old_level); + LWIP_DEBUGF(MEMP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("memp_malloc: out of memory in pool %s\n", desc->desc)); + } + + return NULL; +} + +/** + * Get an element from a custom pool. + * + * @param desc the pool to get an element from + * + * @return a pointer to the allocated memory or a NULL pointer on error + */ +void * +#if !MEMP_OVERFLOW_CHECK +memp_malloc_pool(const struct memp_desc *desc) +#else +memp_malloc_pool_fn(const struct memp_desc *desc, const char *file, const int line) +#endif +{ + LWIP_ASSERT("invalid pool desc", desc != NULL); + if (desc == NULL) { + return NULL; + } + +#if !MEMP_OVERFLOW_CHECK + return do_memp_malloc_pool(desc); +#else + return do_memp_malloc_pool_fn(desc, file, line); +#endif +} + +/** + * Get an element from a specific pool. + * + * @param type the pool to get an element from + * + * @return a pointer to the allocated memory or a NULL pointer on error + */ +void * +#if !MEMP_OVERFLOW_CHECK +memp_malloc(memp_t type) +#else +memp_malloc_fn(memp_t type, const char *file, const int line) +#endif +{ + void *memp; + LWIP_ERROR("memp_malloc: type < MEMP_MAX", (type < MEMP_MAX), return NULL;); + +#if MEMP_OVERFLOW_CHECK >= 2 + memp_overflow_check_all(); +#endif /* MEMP_OVERFLOW_CHECK >= 2 */ + +#if !MEMP_OVERFLOW_CHECK + memp = do_memp_malloc_pool(memp_pools[type]); +#else + memp = do_memp_malloc_pool_fn(memp_pools[type], file, line); +#endif + + return memp; +} + +static void +do_memp_free_pool(const struct memp_desc *desc, void *mem) +{ + struct memp *memp; + SYS_ARCH_DECL_PROTECT(old_level); + + LWIP_ASSERT("memp_free: mem properly aligned", + ((mem_ptr_t)mem % MEM_ALIGNMENT) == 0); + + /* cast through void* to get rid of alignment warnings */ + memp = (struct memp *)(void *)((u8_t *)mem - MEMP_SIZE); + + SYS_ARCH_PROTECT(old_level); + +#if MEMP_OVERFLOW_CHECK == 1 + memp_overflow_check_element(memp, desc); +#endif /* MEMP_OVERFLOW_CHECK */ + +#if MEMP_STATS + desc->stats->used--; +#endif + +#if MEMP_MEM_MALLOC + LWIP_UNUSED_ARG(desc); + SYS_ARCH_UNPROTECT(old_level); + mem_free(memp); +#else /* MEMP_MEM_MALLOC */ + memp->next = *desc->tab; + *desc->tab = memp; + +#if MEMP_SANITY_CHECK + LWIP_ASSERT("memp sanity", memp_sanity(desc)); +#endif /* MEMP_SANITY_CHECK */ + + SYS_ARCH_UNPROTECT(old_level); +#endif /* !MEMP_MEM_MALLOC */ +} + +/** + * Put a custom pool element back into its pool. + * + * @param desc the pool where to put mem + * @param mem the memp element to free + */ +void +memp_free_pool(const struct memp_desc *desc, void *mem) +{ + LWIP_ASSERT("invalid pool desc", desc != NULL); + if ((desc == NULL) || (mem == NULL)) { + return; + } + + do_memp_free_pool(desc, mem); +} + +/** + * Put an element back into its pool. + * + * @param type the pool where to put mem + * @param mem the memp element to free + */ +void +memp_free(memp_t type, void *mem) +{ +#ifdef LWIP_HOOK_MEMP_AVAILABLE + struct memp *old_first; +#endif + + LWIP_ERROR("memp_free: type < MEMP_MAX", (type < MEMP_MAX), return;); + + if (mem == NULL) { + return; + } + +#if MEMP_OVERFLOW_CHECK >= 2 + memp_overflow_check_all(); +#endif /* MEMP_OVERFLOW_CHECK >= 2 */ + +#ifdef LWIP_HOOK_MEMP_AVAILABLE + old_first = *memp_pools[type]->tab; +#endif + + do_memp_free_pool(memp_pools[type], mem); + +#ifdef LWIP_HOOK_MEMP_AVAILABLE + if (old_first == NULL) { + LWIP_HOOK_MEMP_AVAILABLE(type); + } +#endif +} diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/netif.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/netif.c new file mode 100644 index 0000000000000000000000000000000000000000..15200a27409df70f6018fbb6f792cecfcf18b279 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/netif.c @@ -0,0 +1,1795 @@ +/** + * @file + * lwIP network interface abstraction + * + * @defgroup netif Network interface (NETIF) + * @ingroup callbackstyle_api + * + * @defgroup netif_ip4 IPv4 address handling + * @ingroup netif + * + * @defgroup netif_ip6 IPv6 address handling + * @ingroup netif + * + * @defgroup netif_cd Client data handling + * Store data (void*) on a netif for application usage. + * @see @ref LWIP_NUM_NETIF_CLIENT_DATA + * @ingroup netif + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + */ + +#include "lwip/opt.h" + +#include /* memset */ +#include /* atoi */ + +#include "lwip/def.h" +#include "lwip/ip_addr.h" +#include "lwip/ip6_addr.h" +#include "lwip/netif.h" +#include "lwip/priv/tcp_priv.h" +#include "lwip/udp.h" +#include "lwip/priv/raw_priv.h" +#include "lwip/snmp.h" +#include "lwip/igmp.h" +#include "lwip/etharp.h" +#include "lwip/stats.h" +#include "lwip/sys.h" +#include "lwip/ip.h" +#if ENABLE_LOOPBACK +#if LWIP_NETIF_LOOPBACK_MULTITHREADING +#include "lwip/tcpip.h" +#endif /* LWIP_NETIF_LOOPBACK_MULTITHREADING */ +#endif /* ENABLE_LOOPBACK */ + +#include "netif/ethernet.h" + +#if LWIP_AUTOIP +#include "lwip/autoip.h" +#endif /* LWIP_AUTOIP */ +#if LWIP_DHCP +#include "lwip/dhcp.h" +#endif /* LWIP_DHCP */ +#if LWIP_IPV6_DHCP6 +#include "lwip/dhcp6.h" +#endif /* LWIP_IPV6_DHCP6 */ +#if LWIP_IPV6_MLD +#include "lwip/mld6.h" +#endif /* LWIP_IPV6_MLD */ +#if LWIP_IPV6 +#include "lwip/nd6.h" +#endif + +#if LWIP_NETIF_STATUS_CALLBACK +#define NETIF_STATUS_CALLBACK(n) do{ if (n->status_callback) { (n->status_callback)(n); }}while(0) +#else +#define NETIF_STATUS_CALLBACK(n) +#endif /* LWIP_NETIF_STATUS_CALLBACK */ + +#if LWIP_NETIF_LINK_CALLBACK +#define NETIF_LINK_CALLBACK(n) do{ if (n->link_callback) { (n->link_callback)(n); }}while(0) +#else +#define NETIF_LINK_CALLBACK(n) +#endif /* LWIP_NETIF_LINK_CALLBACK */ + +#if LWIP_NETIF_EXT_STATUS_CALLBACK +static netif_ext_callback_t *ext_callback; +#endif + +#if !LWIP_SINGLE_NETIF +struct netif *netif_list; +#endif /* !LWIP_SINGLE_NETIF */ +struct netif *netif_default; + +#define netif_index_to_num(index) ((index) - 1) +static u8_t netif_num; + +#if LWIP_NUM_NETIF_CLIENT_DATA > 0 +static u8_t netif_client_id; +#endif + +#define NETIF_REPORT_TYPE_IPV4 0x01 +#define NETIF_REPORT_TYPE_IPV6 0x02 +static void netif_issue_reports(struct netif *netif, u8_t report_type); + +#if LWIP_IPV6 +static err_t netif_null_output_ip6(struct netif *netif, struct pbuf *p, const ip6_addr_t *ipaddr); +#endif /* LWIP_IPV6 */ +#if LWIP_IPV4 +static err_t netif_null_output_ip4(struct netif *netif, struct pbuf *p, const ip4_addr_t *ipaddr); +#endif /* LWIP_IPV4 */ + +#if LWIP_HAVE_LOOPIF +#if LWIP_IPV4 +static err_t netif_loop_output_ipv4(struct netif *netif, struct pbuf *p, const ip4_addr_t *addr); +#endif +#if LWIP_IPV6 +static err_t netif_loop_output_ipv6(struct netif *netif, struct pbuf *p, const ip6_addr_t *addr); +#endif + + +static struct netif loop_netif; + +/** + * Initialize a lwip network interface structure for a loopback interface + * + * @param netif the lwip network interface structure for this loopif + * @return ERR_OK if the loopif is initialized + * ERR_MEM if private data couldn't be allocated + */ +static err_t +netif_loopif_init(struct netif *netif) +{ + LWIP_ASSERT("netif_loopif_init: invalid netif", netif != NULL); + + /* initialize the snmp variables and counters inside the struct netif + * ifSpeed: no assumption can be made! + */ + MIB2_INIT_NETIF(netif, snmp_ifType_softwareLoopback, 0); + + netif->name[0] = 'l'; + netif->name[1] = 'o'; +#if LWIP_IPV4 + netif->output = netif_loop_output_ipv4; +#endif +#if LWIP_IPV6 + netif->output_ip6 = netif_loop_output_ipv6; +#endif +#if LWIP_LOOPIF_MULTICAST + netif_set_flags(netif, NETIF_FLAG_IGMP); +#endif + NETIF_SET_CHECKSUM_CTRL(netif, NETIF_CHECKSUM_DISABLE_ALL); + return ERR_OK; +} +#endif /* LWIP_HAVE_LOOPIF */ + +void +netif_init(void) +{ +#if LWIP_HAVE_LOOPIF +#if LWIP_IPV4 +#define LOOPIF_ADDRINIT &loop_ipaddr, &loop_netmask, &loop_gw, + ip4_addr_t loop_ipaddr, loop_netmask, loop_gw; + IP4_ADDR(&loop_gw, 127, 0, 0, 1); + IP4_ADDR(&loop_ipaddr, 127, 0, 0, 1); + IP4_ADDR(&loop_netmask, 255, 0, 0, 0); +#else /* LWIP_IPV4 */ +#define LOOPIF_ADDRINIT +#endif /* LWIP_IPV4 */ + +#if NO_SYS + netif_add(&loop_netif, LOOPIF_ADDRINIT NULL, netif_loopif_init, ip_input); +#else /* NO_SYS */ + netif_add(&loop_netif, LOOPIF_ADDRINIT NULL, netif_loopif_init, tcpip_input); +#endif /* NO_SYS */ + +#if LWIP_IPV6 + IP_ADDR6_HOST(loop_netif.ip6_addr, 0, 0, 0, 0x00000001UL); + loop_netif.ip6_addr_state[0] = IP6_ADDR_VALID; +#endif /* LWIP_IPV6 */ + + netif_set_link_up(&loop_netif); + netif_set_up(&loop_netif); + +#endif /* LWIP_HAVE_LOOPIF */ +} + +/** + * @ingroup lwip_nosys + * Forwards a received packet for input processing with + * ethernet_input() or ip_input() depending on netif flags. + * Don't call directly, pass to netif_add() and call + * netif->input(). + * Only works if the netif driver correctly sets + * NETIF_FLAG_ETHARP and/or NETIF_FLAG_ETHERNET flag! + */ +err_t +netif_input(struct pbuf *p, struct netif *inp) +{ + LWIP_ASSERT_CORE_LOCKED(); + + LWIP_ASSERT("netif_input: invalid pbuf", p != NULL); + LWIP_ASSERT("netif_input: invalid netif", inp != NULL); + +#if LWIP_ETHERNET + if (inp->flags & (NETIF_FLAG_ETHARP | NETIF_FLAG_ETHERNET)) { + return ethernet_input(p, inp); + } else +#endif /* LWIP_ETHERNET */ + return ip_input(p, inp); +} + +/** + * @ingroup netif + * Add a network interface to the list of lwIP netifs. + * + * Same as @ref netif_add but without IPv4 addresses + */ +struct netif * +netif_add_noaddr(struct netif *netif, void *state, netif_init_fn init, netif_input_fn input) +{ + return netif_add(netif, +#if LWIP_IPV4 + NULL, NULL, NULL, +#endif /* LWIP_IPV4*/ + state, init, input); +} + +/** + * @ingroup netif + * Add a network interface to the list of lwIP netifs. + * + * @param netif a pre-allocated netif structure + * @param ipaddr IP address for the new netif + * @param netmask network mask for the new netif + * @param gw default gateway IP address for the new netif + * @param state opaque data passed to the new netif + * @param init callback function that initializes the interface + * @param input callback function that is called to pass + * ingress packets up in the protocol layer stack.\n + * It is recommended to use a function that passes the input directly + * to the stack (netif_input(), NO_SYS=1 mode) or via sending a + * message to TCPIP thread (tcpip_input(), NO_SYS=0 mode).\n + * These functions use netif flags NETIF_FLAG_ETHARP and NETIF_FLAG_ETHERNET + * to decide whether to forward to ethernet_input() or ip_input(). + * In other words, the functions only work when the netif + * driver is implemented correctly!\n + * Most members of struct netif should be be initialized by the + * netif init function = netif driver (init parameter of this function).\n + * IPv6: Don't forget to call netif_create_ip6_linklocal_address() after + * setting the MAC address in struct netif.hwaddr + * (IPv6 requires a link-local address). + * + * @return netif, or NULL if failed. + */ +struct netif * +netif_add(struct netif *netif, +#if LWIP_IPV4 + const ip4_addr_t *ipaddr, const ip4_addr_t *netmask, const ip4_addr_t *gw, +#endif /* LWIP_IPV4 */ + void *state, netif_init_fn init, netif_input_fn input) +{ +#if LWIP_IPV6 + s8_t i; +#endif + + LWIP_ASSERT_CORE_LOCKED(); + +#if LWIP_SINGLE_NETIF + if (netif_default != NULL) { + LWIP_ASSERT("single netif already set", 0); + return NULL; + } +#endif + + LWIP_ERROR("netif_add: invalid netif", netif != NULL, return NULL); + LWIP_ERROR("netif_add: No init function given", init != NULL, return NULL); + +#if LWIP_IPV4 + if (ipaddr == NULL) { + ipaddr = ip_2_ip4(IP4_ADDR_ANY); + } + if (netmask == NULL) { + netmask = ip_2_ip4(IP4_ADDR_ANY); + } + if (gw == NULL) { + gw = ip_2_ip4(IP4_ADDR_ANY); + } + + /* reset new interface configuration state */ + ip_addr_set_zero_ip4(&netif->ip_addr); + ip_addr_set_zero_ip4(&netif->netmask); + ip_addr_set_zero_ip4(&netif->gw); + netif->output = netif_null_output_ip4; +#endif /* LWIP_IPV4 */ +#if LWIP_IPV6 + for (i = 0; i < LWIP_IPV6_NUM_ADDRESSES; i++) { + ip_addr_set_zero_ip6(&netif->ip6_addr[i]); + netif->ip6_addr_state[i] = IP6_ADDR_INVALID; +#if LWIP_IPV6_ADDRESS_LIFETIMES + netif->ip6_addr_valid_life[i] = IP6_ADDR_LIFE_STATIC; + netif->ip6_addr_pref_life[i] = IP6_ADDR_LIFE_STATIC; +#endif /* LWIP_IPV6_ADDRESS_LIFETIMES */ + } + netif->output_ip6 = netif_null_output_ip6; +#endif /* LWIP_IPV6 */ + NETIF_SET_CHECKSUM_CTRL(netif, NETIF_CHECKSUM_ENABLE_ALL); + netif->mtu = 0; + netif->flags = 0; +#ifdef netif_get_client_data + memset(netif->client_data, 0, sizeof(netif->client_data)); +#endif /* LWIP_NUM_NETIF_CLIENT_DATA */ +#if LWIP_IPV6 +#if LWIP_IPV6_AUTOCONFIG + /* IPv6 address autoconfiguration not enabled by default */ + netif->ip6_autoconfig_enabled = 0; +#endif /* LWIP_IPV6_AUTOCONFIG */ + nd6_restart_netif(netif); +#endif /* LWIP_IPV6 */ +#if LWIP_NETIF_STATUS_CALLBACK + netif->status_callback = NULL; +#endif /* LWIP_NETIF_STATUS_CALLBACK */ +#if LWIP_NETIF_LINK_CALLBACK + netif->link_callback = NULL; +#endif /* LWIP_NETIF_LINK_CALLBACK */ +#if LWIP_IGMP + netif->igmp_mac_filter = NULL; +#endif /* LWIP_IGMP */ +#if LWIP_IPV6 && LWIP_IPV6_MLD + netif->mld_mac_filter = NULL; +#endif /* LWIP_IPV6 && LWIP_IPV6_MLD */ +#if ENABLE_LOOPBACK + netif->loop_first = NULL; + netif->loop_last = NULL; +#endif /* ENABLE_LOOPBACK */ + + /* remember netif specific state information data */ + netif->state = state; + netif->num = netif_num; + netif->input = input; + + NETIF_RESET_HINTS(netif); +#if ENABLE_LOOPBACK && LWIP_LOOPBACK_MAX_PBUFS + netif->loop_cnt_current = 0; +#endif /* ENABLE_LOOPBACK && LWIP_LOOPBACK_MAX_PBUFS */ + +#if LWIP_IPV4 + netif_set_addr(netif, ipaddr, netmask, gw); +#endif /* LWIP_IPV4 */ + + /* call user specified initialization function for netif */ + if (init(netif) != ERR_OK) { + return NULL; + } +#if LWIP_IPV6 && LWIP_ND6_ALLOW_RA_UPDATES + /* Initialize the MTU for IPv6 to the one set by the netif driver. + This can be updated later by RA. */ + netif->mtu6 = netif->mtu; +#endif /* LWIP_IPV6 && LWIP_ND6_ALLOW_RA_UPDATES */ + +#if !LWIP_SINGLE_NETIF + /* Assign a unique netif number in the range [0..254], so that (num+1) can + serve as an interface index that fits in a u8_t. + We assume that the new netif has not yet been added to the list here. + This algorithm is O(n^2), but that should be OK for lwIP. + */ + { + struct netif *netif2; + int num_netifs; + do { + if (netif->num == 255) { + netif->num = 0; + } + num_netifs = 0; + for (netif2 = netif_list; netif2 != NULL; netif2 = netif2->next) { + LWIP_ASSERT("netif already added", netif2 != netif); + num_netifs++; + LWIP_ASSERT("too many netifs, max. supported number is 255", num_netifs <= 255); + if (netif2->num == netif->num) { + netif->num++; + break; + } + } + } while (netif2 != NULL); + } + if (netif->num == 254) { + netif_num = 0; + } else { + netif_num = (u8_t)(netif->num + 1); + } + + /* add this netif to the list */ + netif->next = netif_list; + netif_list = netif; +#endif /* "LWIP_SINGLE_NETIF */ + mib2_netif_added(netif); + +#if LWIP_IGMP + /* start IGMP processing */ + if (netif->flags & NETIF_FLAG_IGMP) { + igmp_start(netif); + } +#endif /* LWIP_IGMP */ + + LWIP_DEBUGF(NETIF_DEBUG, ("netif: added interface %c%c IP", + netif->name[0], netif->name[1])); +#if LWIP_IPV4 + LWIP_DEBUGF(NETIF_DEBUG, (" addr ")); + ip4_addr_debug_print(NETIF_DEBUG, ipaddr); + LWIP_DEBUGF(NETIF_DEBUG, (" netmask ")); + ip4_addr_debug_print(NETIF_DEBUG, netmask); + LWIP_DEBUGF(NETIF_DEBUG, (" gw ")); + ip4_addr_debug_print(NETIF_DEBUG, gw); +#endif /* LWIP_IPV4 */ + LWIP_DEBUGF(NETIF_DEBUG, ("\n")); + + netif_invoke_ext_callback(netif, LWIP_NSC_NETIF_ADDED, NULL); + + return netif; +} + +static void +netif_do_ip_addr_changed(const ip_addr_t *old_addr, const ip_addr_t *new_addr) +{ +#if LWIP_TCP + tcp_netif_ip_addr_changed(old_addr, new_addr); +#endif /* LWIP_TCP */ +#if LWIP_UDP + udp_netif_ip_addr_changed(old_addr, new_addr); +#endif /* LWIP_UDP */ +#if LWIP_RAW + raw_netif_ip_addr_changed(old_addr, new_addr); +#endif /* LWIP_RAW */ +} + +#if LWIP_IPV4 +static int +netif_do_set_ipaddr(struct netif *netif, const ip4_addr_t *ipaddr, ip_addr_t *old_addr) +{ + LWIP_ASSERT("invalid pointer", ipaddr != NULL); + LWIP_ASSERT("invalid pointer", old_addr != NULL); + + /* address is actually being changed? */ + if (ip4_addr_cmp(ipaddr, netif_ip4_addr(netif)) == 0) { + ip_addr_t new_addr; + *ip_2_ip4(&new_addr) = *ipaddr; + IP_SET_TYPE_VAL(new_addr, IPADDR_TYPE_V4); + + ip_addr_copy(*old_addr, *netif_ip_addr4(netif)); + + LWIP_DEBUGF(NETIF_DEBUG | LWIP_DBG_STATE, ("netif_set_ipaddr: netif address being changed\n")); + netif_do_ip_addr_changed(old_addr, &new_addr); + + mib2_remove_ip4(netif); + mib2_remove_route_ip4(0, netif); + /* set new IP address to netif */ + ip4_addr_set(ip_2_ip4(&netif->ip_addr), ipaddr); + IP_SET_TYPE_VAL(netif->ip_addr, IPADDR_TYPE_V4); + mib2_add_ip4(netif); + mib2_add_route_ip4(0, netif); + + netif_issue_reports(netif, NETIF_REPORT_TYPE_IPV4); + + NETIF_STATUS_CALLBACK(netif); + return 1; /* address changed */ + } + return 0; /* address unchanged */ +} + +/** + * @ingroup netif_ip4 + * Change the IP address of a network interface + * + * @param netif the network interface to change + * @param ipaddr the new IP address + * + * @note call netif_set_addr() if you also want to change netmask and + * default gateway + */ +void +netif_set_ipaddr(struct netif *netif, const ip4_addr_t *ipaddr) +{ + ip_addr_t old_addr; + + LWIP_ERROR("netif_set_ipaddr: invalid netif", netif != NULL, return); + + /* Don't propagate NULL pointer (IPv4 ANY) to subsequent functions */ + if (ipaddr == NULL) { + ipaddr = IP4_ADDR_ANY4; + } + + LWIP_ASSERT_CORE_LOCKED(); + + if (netif_do_set_ipaddr(netif, ipaddr, &old_addr)) { +#if LWIP_NETIF_EXT_STATUS_CALLBACK + netif_ext_callback_args_t args; + args.ipv4_changed.old_address = &old_addr; + netif_invoke_ext_callback(netif, LWIP_NSC_IPV4_ADDRESS_CHANGED, &args); +#endif + } +} + +static int +netif_do_set_netmask(struct netif *netif, const ip4_addr_t *netmask, ip_addr_t *old_nm) +{ + /* address is actually being changed? */ + if (ip4_addr_cmp(netmask, netif_ip4_netmask(netif)) == 0) { +#if LWIP_NETIF_EXT_STATUS_CALLBACK + LWIP_ASSERT("invalid pointer", old_nm != NULL); + ip_addr_copy(*old_nm, *netif_ip_netmask4(netif)); +#else + LWIP_UNUSED_ARG(old_nm); +#endif + mib2_remove_route_ip4(0, netif); + /* set new netmask to netif */ + ip4_addr_set(ip_2_ip4(&netif->netmask), netmask); + IP_SET_TYPE_VAL(netif->netmask, IPADDR_TYPE_V4); + mib2_add_route_ip4(0, netif); + LWIP_DEBUGF(NETIF_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("netif: netmask of interface %c%c set to %"U16_F".%"U16_F".%"U16_F".%"U16_F"\n", + netif->name[0], netif->name[1], + ip4_addr1_16(netif_ip4_netmask(netif)), + ip4_addr2_16(netif_ip4_netmask(netif)), + ip4_addr3_16(netif_ip4_netmask(netif)), + ip4_addr4_16(netif_ip4_netmask(netif)))); + return 1; /* netmask changed */ + } + return 0; /* netmask unchanged */ +} + +/** + * @ingroup netif_ip4 + * Change the netmask of a network interface + * + * @param netif the network interface to change + * @param netmask the new netmask + * + * @note call netif_set_addr() if you also want to change ip address and + * default gateway + */ +void +netif_set_netmask(struct netif *netif, const ip4_addr_t *netmask) +{ +#if LWIP_NETIF_EXT_STATUS_CALLBACK + ip_addr_t old_nm_val; + ip_addr_t *old_nm = &old_nm_val; +#else + ip_addr_t *old_nm = NULL; +#endif + LWIP_ASSERT_CORE_LOCKED(); + + LWIP_ERROR("netif_set_netmask: invalid netif", netif != NULL, return); + + /* Don't propagate NULL pointer (IPv4 ANY) to subsequent functions */ + if (netmask == NULL) { + netmask = IP4_ADDR_ANY4; + } + + if (netif_do_set_netmask(netif, netmask, old_nm)) { +#if LWIP_NETIF_EXT_STATUS_CALLBACK + netif_ext_callback_args_t args; + args.ipv4_changed.old_netmask = old_nm; + netif_invoke_ext_callback(netif, LWIP_NSC_IPV4_NETMASK_CHANGED, &args); +#endif + } +} + +static int +netif_do_set_gw(struct netif *netif, const ip4_addr_t *gw, ip_addr_t *old_gw) +{ + /* address is actually being changed? */ + if (ip4_addr_cmp(gw, netif_ip4_gw(netif)) == 0) { +#if LWIP_NETIF_EXT_STATUS_CALLBACK + LWIP_ASSERT("invalid pointer", old_gw != NULL); + ip_addr_copy(*old_gw, *netif_ip_gw4(netif)); +#else + LWIP_UNUSED_ARG(old_gw); +#endif + + ip4_addr_set(ip_2_ip4(&netif->gw), gw); + IP_SET_TYPE_VAL(netif->gw, IPADDR_TYPE_V4); + LWIP_DEBUGF(NETIF_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("netif: GW address of interface %c%c set to %"U16_F".%"U16_F".%"U16_F".%"U16_F"\n", + netif->name[0], netif->name[1], + ip4_addr1_16(netif_ip4_gw(netif)), + ip4_addr2_16(netif_ip4_gw(netif)), + ip4_addr3_16(netif_ip4_gw(netif)), + ip4_addr4_16(netif_ip4_gw(netif)))); + return 1; /* gateway changed */ + } + return 0; /* gateway unchanged */ +} + +/** + * @ingroup netif_ip4 + * Change the default gateway for a network interface + * + * @param netif the network interface to change + * @param gw the new default gateway + * + * @note call netif_set_addr() if you also want to change ip address and netmask + */ +void +netif_set_gw(struct netif *netif, const ip4_addr_t *gw) +{ +#if LWIP_NETIF_EXT_STATUS_CALLBACK + ip_addr_t old_gw_val; + ip_addr_t *old_gw = &old_gw_val; +#else + ip_addr_t *old_gw = NULL; +#endif + LWIP_ASSERT_CORE_LOCKED(); + + LWIP_ERROR("netif_set_gw: invalid netif", netif != NULL, return); + + /* Don't propagate NULL pointer (IPv4 ANY) to subsequent functions */ + if (gw == NULL) { + gw = IP4_ADDR_ANY4; + } + + if (netif_do_set_gw(netif, gw, old_gw)) { +#if LWIP_NETIF_EXT_STATUS_CALLBACK + netif_ext_callback_args_t args; + args.ipv4_changed.old_gw = old_gw; + netif_invoke_ext_callback(netif, LWIP_NSC_IPV4_GATEWAY_CHANGED, &args); +#endif + } +} + +/** + * @ingroup netif_ip4 + * Change IP address configuration for a network interface (including netmask + * and default gateway). + * + * @param netif the network interface to change + * @param ipaddr the new IP address + * @param netmask the new netmask + * @param gw the new default gateway + */ +void +netif_set_addr(struct netif *netif, const ip4_addr_t *ipaddr, const ip4_addr_t *netmask, + const ip4_addr_t *gw) +{ +#if LWIP_NETIF_EXT_STATUS_CALLBACK + netif_nsc_reason_t change_reason = LWIP_NSC_NONE; + netif_ext_callback_args_t cb_args; + ip_addr_t old_nm_val; + ip_addr_t old_gw_val; + ip_addr_t *old_nm = &old_nm_val; + ip_addr_t *old_gw = &old_gw_val; +#else + ip_addr_t *old_nm = NULL; + ip_addr_t *old_gw = NULL; +#endif + ip_addr_t old_addr; + int remove; + + LWIP_ASSERT_CORE_LOCKED(); + + /* Don't propagate NULL pointer (IPv4 ANY) to subsequent functions */ + if (ipaddr == NULL) { + ipaddr = IP4_ADDR_ANY4; + } + if (netmask == NULL) { + netmask = IP4_ADDR_ANY4; + } + if (gw == NULL) { + gw = IP4_ADDR_ANY4; + } + + remove = ip4_addr_isany(ipaddr); + if (remove) { + /* when removing an address, we have to remove it *before* changing netmask/gw + to ensure that tcp RST segment can be sent correctly */ + if (netif_do_set_ipaddr(netif, ipaddr, &old_addr)) { +#if LWIP_NETIF_EXT_STATUS_CALLBACK + change_reason |= LWIP_NSC_IPV4_ADDRESS_CHANGED; + cb_args.ipv4_changed.old_address = &old_addr; +#endif + } + } + if (netif_do_set_netmask(netif, netmask, old_nm)) { +#if LWIP_NETIF_EXT_STATUS_CALLBACK + change_reason |= LWIP_NSC_IPV4_NETMASK_CHANGED; + cb_args.ipv4_changed.old_netmask = old_nm; +#endif + } + if (netif_do_set_gw(netif, gw, old_gw)) { +#if LWIP_NETIF_EXT_STATUS_CALLBACK + change_reason |= LWIP_NSC_IPV4_GATEWAY_CHANGED; + cb_args.ipv4_changed.old_gw = old_gw; +#endif + } + if (!remove) { + /* set ipaddr last to ensure netmask/gw have been set when status callback is called */ + if (netif_do_set_ipaddr(netif, ipaddr, &old_addr)) { +#if LWIP_NETIF_EXT_STATUS_CALLBACK + change_reason |= LWIP_NSC_IPV4_ADDRESS_CHANGED; + cb_args.ipv4_changed.old_address = &old_addr; +#endif + } + } + +#if LWIP_NETIF_EXT_STATUS_CALLBACK + if (change_reason != LWIP_NSC_NONE) { + change_reason |= LWIP_NSC_IPV4_SETTINGS_CHANGED; + netif_invoke_ext_callback(netif, change_reason, &cb_args); + } +#endif +} +#endif /* LWIP_IPV4*/ + +/** + * @ingroup netif + * Remove a network interface from the list of lwIP netifs. + * + * @param netif the network interface to remove + */ +void +netif_remove(struct netif *netif) +{ +#if LWIP_IPV6 + int i; +#endif + + LWIP_ASSERT_CORE_LOCKED(); + + if (netif == NULL) { + return; + } + + netif_invoke_ext_callback(netif, LWIP_NSC_NETIF_REMOVED, NULL); + +#if LWIP_IPV4 + if (!ip4_addr_isany_val(*netif_ip4_addr(netif))) { + netif_do_ip_addr_changed(netif_ip_addr4(netif), NULL); + } + +#if LWIP_IGMP + /* stop IGMP processing */ + if (netif->flags & NETIF_FLAG_IGMP) { + igmp_stop(netif); + } +#endif /* LWIP_IGMP */ +#endif /* LWIP_IPV4*/ + +#if LWIP_IPV6 + for (i = 0; i < LWIP_IPV6_NUM_ADDRESSES; i++) { + if (ip6_addr_isvalid(netif_ip6_addr_state(netif, i))) { + netif_do_ip_addr_changed(netif_ip_addr6(netif, i), NULL); + } + } +#if LWIP_IPV6_MLD + /* stop MLD processing */ + mld6_stop(netif); +#endif /* LWIP_IPV6_MLD */ +#endif /* LWIP_IPV6 */ + if (netif_is_up(netif)) { + /* set netif down before removing (call callback function) */ + netif_set_down(netif); + } + + mib2_remove_ip4(netif); + + /* this netif is default? */ + if (netif_default == netif) { + /* reset default netif */ + netif_set_default(NULL); + } +#if !LWIP_SINGLE_NETIF + /* is it the first netif? */ + if (netif_list == netif) { + netif_list = netif->next; + } else { + /* look for netif further down the list */ + struct netif *tmp_netif; + NETIF_FOREACH(tmp_netif) { + if (tmp_netif->next == netif) { + tmp_netif->next = netif->next; + break; + } + } + if (tmp_netif == NULL) { + return; /* netif is not on the list */ + } + } +#endif /* !LWIP_SINGLE_NETIF */ + mib2_netif_removed(netif); +#if LWIP_NETIF_REMOVE_CALLBACK + if (netif->remove_callback) { + netif->remove_callback(netif); + } +#endif /* LWIP_NETIF_REMOVE_CALLBACK */ + LWIP_DEBUGF( NETIF_DEBUG, ("netif_remove: removed netif\n") ); +} + +/** + * @ingroup netif + * Set a network interface as the default network interface + * (used to output all packets for which no specific route is found) + * + * @param netif the default network interface + */ +void +netif_set_default(struct netif *netif) +{ + LWIP_ASSERT_CORE_LOCKED(); + + if (netif == NULL) { + /* remove default route */ + mib2_remove_route_ip4(1, netif); + } else { + /* install default route */ + mib2_add_route_ip4(1, netif); + } + netif_default = netif; + LWIP_DEBUGF(NETIF_DEBUG, ("netif: setting default interface %c%c\n", + netif ? netif->name[0] : '\'', netif ? netif->name[1] : '\'')); +} + +/** + * @ingroup netif + * Bring an interface up, available for processing + * traffic. + */ +void +netif_set_up(struct netif *netif) +{ + LWIP_ASSERT_CORE_LOCKED(); + + LWIP_ERROR("netif_set_up: invalid netif", netif != NULL, return); + + if (!(netif->flags & NETIF_FLAG_UP)) { + netif_set_flags(netif, NETIF_FLAG_UP); + + MIB2_COPY_SYSUPTIME_TO(&netif->ts); + + NETIF_STATUS_CALLBACK(netif); + +#if LWIP_NETIF_EXT_STATUS_CALLBACK + { + netif_ext_callback_args_t args; + args.status_changed.state = 1; + netif_invoke_ext_callback(netif, LWIP_NSC_STATUS_CHANGED, &args); + } +#endif + + netif_issue_reports(netif, NETIF_REPORT_TYPE_IPV4 | NETIF_REPORT_TYPE_IPV6); +#if LWIP_IPV6 + nd6_restart_netif(netif); +#endif /* LWIP_IPV6 */ + } +} + +/** Send ARP/IGMP/MLD/RS events, e.g. on link-up/netif-up or addr-change + */ +static void +netif_issue_reports(struct netif *netif, u8_t report_type) +{ + LWIP_ASSERT("netif_issue_reports: invalid netif", netif != NULL); + + /* Only send reports when both link and admin states are up */ + if (!(netif->flags & NETIF_FLAG_LINK_UP) || + !(netif->flags & NETIF_FLAG_UP)) { + return; + } + +#if LWIP_IPV4 + if ((report_type & NETIF_REPORT_TYPE_IPV4) && + !ip4_addr_isany_val(*netif_ip4_addr(netif))) { +#if LWIP_ARP + /* For Ethernet network interfaces, we would like to send a "gratuitous ARP" */ + if (netif->flags & (NETIF_FLAG_ETHARP)) { + etharp_gratuitous(netif); + } +#endif /* LWIP_ARP */ + +#if LWIP_IGMP + /* resend IGMP memberships */ + if (netif->flags & NETIF_FLAG_IGMP) { + igmp_report_groups(netif); + } +#endif /* LWIP_IGMP */ + } +#endif /* LWIP_IPV4 */ + +#if LWIP_IPV6 + if (report_type & NETIF_REPORT_TYPE_IPV6) { +#if LWIP_IPV6_MLD + /* send mld memberships */ + mld6_report_groups(netif); +#endif /* LWIP_IPV6_MLD */ + } +#endif /* LWIP_IPV6 */ +} + +/** + * @ingroup netif + * Bring an interface down, disabling any traffic processing. + */ +void +netif_set_down(struct netif *netif) +{ + LWIP_ASSERT_CORE_LOCKED(); + + LWIP_ERROR("netif_set_down: invalid netif", netif != NULL, return); + + if (netif->flags & NETIF_FLAG_UP) { +#if LWIP_NETIF_EXT_STATUS_CALLBACK + { + netif_ext_callback_args_t args; + args.status_changed.state = 0; + netif_invoke_ext_callback(netif, LWIP_NSC_STATUS_CHANGED, &args); + } +#endif + + netif_clear_flags(netif, NETIF_FLAG_UP); + MIB2_COPY_SYSUPTIME_TO(&netif->ts); + +#if LWIP_IPV4 && LWIP_ARP + if (netif->flags & NETIF_FLAG_ETHARP) { + etharp_cleanup_netif(netif); + } +#endif /* LWIP_IPV4 && LWIP_ARP */ + +#if LWIP_IPV6 + nd6_cleanup_netif(netif); +#endif /* LWIP_IPV6 */ + + NETIF_STATUS_CALLBACK(netif); + } +} + +#if LWIP_NETIF_STATUS_CALLBACK +/** + * @ingroup netif + * Set callback to be called when interface is brought up/down or address is changed while up + */ +void +netif_set_status_callback(struct netif *netif, netif_status_callback_fn status_callback) +{ + LWIP_ASSERT_CORE_LOCKED(); + + if (netif) { + netif->status_callback = status_callback; + } +} +#endif /* LWIP_NETIF_STATUS_CALLBACK */ + +#if LWIP_NETIF_REMOVE_CALLBACK +/** + * @ingroup netif + * Set callback to be called when the interface has been removed + */ +void +netif_set_remove_callback(struct netif *netif, netif_status_callback_fn remove_callback) +{ + LWIP_ASSERT_CORE_LOCKED(); + + if (netif) { + netif->remove_callback = remove_callback; + } +} +#endif /* LWIP_NETIF_REMOVE_CALLBACK */ + +/** + * @ingroup netif + * Called by a driver when its link goes up + */ +void +netif_set_link_up(struct netif *netif) +{ + LWIP_ASSERT_CORE_LOCKED(); + + LWIP_ERROR("netif_set_link_up: invalid netif", netif != NULL, return); + + if (!(netif->flags & NETIF_FLAG_LINK_UP)) { + netif_set_flags(netif, NETIF_FLAG_LINK_UP); + +#if LWIP_DHCP + dhcp_network_changed(netif); +#endif /* LWIP_DHCP */ + +#if LWIP_AUTOIP + autoip_network_changed(netif); +#endif /* LWIP_AUTOIP */ + + netif_issue_reports(netif, NETIF_REPORT_TYPE_IPV4 | NETIF_REPORT_TYPE_IPV6); +#if LWIP_IPV6 + nd6_restart_netif(netif); +#endif /* LWIP_IPV6 */ + + NETIF_LINK_CALLBACK(netif); +#if LWIP_NETIF_EXT_STATUS_CALLBACK + { + netif_ext_callback_args_t args; + args.link_changed.state = 1; + netif_invoke_ext_callback(netif, LWIP_NSC_LINK_CHANGED, &args); + } +#endif + } +} + +/** + * @ingroup netif + * Called by a driver when its link goes down + */ +void +netif_set_link_down(struct netif *netif) +{ + LWIP_ASSERT_CORE_LOCKED(); + + LWIP_ERROR("netif_set_link_down: invalid netif", netif != NULL, return); + + if (netif->flags & NETIF_FLAG_LINK_UP) { + netif_clear_flags(netif, NETIF_FLAG_LINK_UP); + NETIF_LINK_CALLBACK(netif); +#if LWIP_NETIF_EXT_STATUS_CALLBACK + { + netif_ext_callback_args_t args; + args.link_changed.state = 0; + netif_invoke_ext_callback(netif, LWIP_NSC_LINK_CHANGED, &args); + } +#endif + } +} + +#if LWIP_NETIF_LINK_CALLBACK +/** + * @ingroup netif + * Set callback to be called when link is brought up/down + */ +void +netif_set_link_callback(struct netif *netif, netif_status_callback_fn link_callback) +{ + LWIP_ASSERT_CORE_LOCKED(); + + if (netif) { + netif->link_callback = link_callback; + } +} +#endif /* LWIP_NETIF_LINK_CALLBACK */ + +#if ENABLE_LOOPBACK +/** + * @ingroup netif + * Send an IP packet to be received on the same netif (loopif-like). + * The pbuf is simply copied and handed back to netif->input. + * In multithreaded mode, this is done directly since netif->input must put + * the packet on a queue. + * In callback mode, the packet is put on an internal queue and is fed to + * netif->input by netif_poll(). + * + * @param netif the lwip network interface structure + * @param p the (IP) packet to 'send' + * @return ERR_OK if the packet has been sent + * ERR_MEM if the pbuf used to copy the packet couldn't be allocated + */ +err_t +netif_loop_output(struct netif *netif, struct pbuf *p) +{ + struct pbuf *r; + err_t err; + struct pbuf *last; +#if LWIP_LOOPBACK_MAX_PBUFS + u16_t clen = 0; +#endif /* LWIP_LOOPBACK_MAX_PBUFS */ + /* If we have a loopif, SNMP counters are adjusted for it, + * if not they are adjusted for 'netif'. */ +#if MIB2_STATS +#if LWIP_HAVE_LOOPIF + struct netif *stats_if = &loop_netif; +#else /* LWIP_HAVE_LOOPIF */ + struct netif *stats_if = netif; +#endif /* LWIP_HAVE_LOOPIF */ +#endif /* MIB2_STATS */ +#if LWIP_NETIF_LOOPBACK_MULTITHREADING + u8_t schedule_poll = 0; +#endif /* LWIP_NETIF_LOOPBACK_MULTITHREADING */ + SYS_ARCH_DECL_PROTECT(lev); + + LWIP_ASSERT("netif_loop_output: invalid netif", netif != NULL); + LWIP_ASSERT("netif_loop_output: invalid pbuf", p != NULL); + + /* Allocate a new pbuf */ + r = pbuf_alloc(PBUF_LINK, p->tot_len, PBUF_RAM); + if (r == NULL) { + LINK_STATS_INC(link.memerr); + LINK_STATS_INC(link.drop); + MIB2_STATS_NETIF_INC(stats_if, ifoutdiscards); + return ERR_MEM; + } +#if LWIP_LOOPBACK_MAX_PBUFS + clen = pbuf_clen(r); + /* check for overflow or too many pbuf on queue */ + if (((netif->loop_cnt_current + clen) < netif->loop_cnt_current) || + ((netif->loop_cnt_current + clen) > LWIP_MIN(LWIP_LOOPBACK_MAX_PBUFS, 0xFFFF))) { + pbuf_free(r); + LINK_STATS_INC(link.memerr); + LINK_STATS_INC(link.drop); + MIB2_STATS_NETIF_INC(stats_if, ifoutdiscards); + return ERR_MEM; + } + netif->loop_cnt_current = (u16_t)(netif->loop_cnt_current + clen); +#endif /* LWIP_LOOPBACK_MAX_PBUFS */ + + /* Copy the whole pbuf queue p into the single pbuf r */ + if ((err = pbuf_copy(r, p)) != ERR_OK) { + pbuf_free(r); + LINK_STATS_INC(link.memerr); + LINK_STATS_INC(link.drop); + MIB2_STATS_NETIF_INC(stats_if, ifoutdiscards); + return err; + } + + /* Put the packet on a linked list which gets emptied through calling + netif_poll(). */ + + /* let last point to the last pbuf in chain r */ + for (last = r; last->next != NULL; last = last->next) { + /* nothing to do here, just get to the last pbuf */ + } + + SYS_ARCH_PROTECT(lev); + if (netif->loop_first != NULL) { + LWIP_ASSERT("if first != NULL, last must also be != NULL", netif->loop_last != NULL); + netif->loop_last->next = r; + netif->loop_last = last; + } else { + netif->loop_first = r; + netif->loop_last = last; +#if LWIP_NETIF_LOOPBACK_MULTITHREADING + /* No existing packets queued, schedule poll */ + schedule_poll = 1; +#endif /* LWIP_NETIF_LOOPBACK_MULTITHREADING */ + } + SYS_ARCH_UNPROTECT(lev); + + LINK_STATS_INC(link.xmit); + MIB2_STATS_NETIF_ADD(stats_if, ifoutoctets, p->tot_len); + MIB2_STATS_NETIF_INC(stats_if, ifoutucastpkts); + +#if LWIP_NETIF_LOOPBACK_MULTITHREADING + /* For multithreading environment, schedule a call to netif_poll */ + if (schedule_poll) { + tcpip_try_callback((tcpip_callback_fn)netif_poll, netif); + } +#endif /* LWIP_NETIF_LOOPBACK_MULTITHREADING */ + + return ERR_OK; +} + +#if LWIP_HAVE_LOOPIF +#if LWIP_IPV4 +static err_t +netif_loop_output_ipv4(struct netif *netif, struct pbuf *p, const ip4_addr_t *addr) +{ + LWIP_UNUSED_ARG(addr); + return netif_loop_output(netif, p); +} +#endif /* LWIP_IPV4 */ + +#if LWIP_IPV6 +static err_t +netif_loop_output_ipv6(struct netif *netif, struct pbuf *p, const ip6_addr_t *addr) +{ + LWIP_UNUSED_ARG(addr); + return netif_loop_output(netif, p); +} +#endif /* LWIP_IPV6 */ +#endif /* LWIP_HAVE_LOOPIF */ + + +/** + * Call netif_poll() in the main loop of your application. This is to prevent + * reentering non-reentrant functions like tcp_input(). Packets passed to + * netif_loop_output() are put on a list that is passed to netif->input() by + * netif_poll(). + */ +void +netif_poll(struct netif *netif) +{ + /* If we have a loopif, SNMP counters are adjusted for it, + * if not they are adjusted for 'netif'. */ +#if MIB2_STATS +#if LWIP_HAVE_LOOPIF + struct netif *stats_if = &loop_netif; +#else /* LWIP_HAVE_LOOPIF */ + struct netif *stats_if = netif; +#endif /* LWIP_HAVE_LOOPIF */ +#endif /* MIB2_STATS */ + SYS_ARCH_DECL_PROTECT(lev); + + LWIP_ASSERT("netif_poll: invalid netif", netif != NULL); + + /* Get a packet from the list. With SYS_LIGHTWEIGHT_PROT=1, this is protected */ + SYS_ARCH_PROTECT(lev); + while (netif->loop_first != NULL) { + struct pbuf *in, *in_end; +#if LWIP_LOOPBACK_MAX_PBUFS + u8_t clen = 1; +#endif /* LWIP_LOOPBACK_MAX_PBUFS */ + + in = in_end = netif->loop_first; + while (in_end->len != in_end->tot_len) { + LWIP_ASSERT("bogus pbuf: len != tot_len but next == NULL!", in_end->next != NULL); + in_end = in_end->next; +#if LWIP_LOOPBACK_MAX_PBUFS + clen++; +#endif /* LWIP_LOOPBACK_MAX_PBUFS */ + } +#if LWIP_LOOPBACK_MAX_PBUFS + /* adjust the number of pbufs on queue */ + LWIP_ASSERT("netif->loop_cnt_current underflow", + ((netif->loop_cnt_current - clen) < netif->loop_cnt_current)); + netif->loop_cnt_current = (u16_t)(netif->loop_cnt_current - clen); +#endif /* LWIP_LOOPBACK_MAX_PBUFS */ + + /* 'in_end' now points to the last pbuf from 'in' */ + if (in_end == netif->loop_last) { + /* this was the last pbuf in the list */ + netif->loop_first = netif->loop_last = NULL; + } else { + /* pop the pbuf off the list */ + netif->loop_first = in_end->next; + LWIP_ASSERT("should not be null since first != last!", netif->loop_first != NULL); + } + /* De-queue the pbuf from its successors on the 'loop_' list. */ + in_end->next = NULL; + SYS_ARCH_UNPROTECT(lev); + + in->if_idx = netif_get_index(netif); + + LINK_STATS_INC(link.recv); + MIB2_STATS_NETIF_ADD(stats_if, ifinoctets, in->tot_len); + MIB2_STATS_NETIF_INC(stats_if, ifinucastpkts); + /* loopback packets are always IP packets! */ + if (ip_input(in, netif) != ERR_OK) { + pbuf_free(in); + } + SYS_ARCH_PROTECT(lev); + } + SYS_ARCH_UNPROTECT(lev); +} + +#if !LWIP_NETIF_LOOPBACK_MULTITHREADING +/** + * Calls netif_poll() for every netif on the netif_list. + */ +void +netif_poll_all(void) +{ + struct netif *netif; + /* loop through netifs */ + NETIF_FOREACH(netif) { + netif_poll(netif); + } +} +#endif /* !LWIP_NETIF_LOOPBACK_MULTITHREADING */ +#endif /* ENABLE_LOOPBACK */ + +#if LWIP_NUM_NETIF_CLIENT_DATA > 0 +/** + * @ingroup netif_cd + * Allocate an index to store data in client_data member of struct netif. + * Returned value is an index in mentioned array. + * @see LWIP_NUM_NETIF_CLIENT_DATA + */ +u8_t +netif_alloc_client_data_id(void) +{ + u8_t result = netif_client_id; + netif_client_id++; + + LWIP_ASSERT_CORE_LOCKED(); + +#if LWIP_NUM_NETIF_CLIENT_DATA > 256 +#error LWIP_NUM_NETIF_CLIENT_DATA must be <= 256 +#endif + LWIP_ASSERT("Increase LWIP_NUM_NETIF_CLIENT_DATA in lwipopts.h", result < LWIP_NUM_NETIF_CLIENT_DATA); + return (u8_t)(result + LWIP_NETIF_CLIENT_DATA_INDEX_MAX); +} +#endif + +#if LWIP_IPV6 +/** + * @ingroup netif_ip6 + * Change an IPv6 address of a network interface + * + * @param netif the network interface to change + * @param addr_idx index of the IPv6 address + * @param addr6 the new IPv6 address + * + * @note call netif_ip6_addr_set_state() to set the address valid/temptative + */ +void +netif_ip6_addr_set(struct netif *netif, s8_t addr_idx, const ip6_addr_t *addr6) +{ + LWIP_ASSERT_CORE_LOCKED(); + + LWIP_ASSERT("netif_ip6_addr_set: invalid netif", netif != NULL); + LWIP_ASSERT("netif_ip6_addr_set: invalid addr6", addr6 != NULL); + + netif_ip6_addr_set_parts(netif, addr_idx, addr6->addr[0], addr6->addr[1], + addr6->addr[2], addr6->addr[3]); +} + +/* + * Change an IPv6 address of a network interface (internal version taking 4 * u32_t) + * + * @param netif the network interface to change + * @param addr_idx index of the IPv6 address + * @param i0 word0 of the new IPv6 address + * @param i1 word1 of the new IPv6 address + * @param i2 word2 of the new IPv6 address + * @param i3 word3 of the new IPv6 address + */ +void +netif_ip6_addr_set_parts(struct netif *netif, s8_t addr_idx, u32_t i0, u32_t i1, u32_t i2, u32_t i3) +{ + ip_addr_t old_addr; + ip_addr_t new_ipaddr; + LWIP_ASSERT_CORE_LOCKED(); + LWIP_ASSERT("netif != NULL", netif != NULL); + LWIP_ASSERT("invalid index", addr_idx < LWIP_IPV6_NUM_ADDRESSES); + + ip6_addr_copy(*ip_2_ip6(&old_addr), *netif_ip6_addr(netif, addr_idx)); + IP_SET_TYPE_VAL(old_addr, IPADDR_TYPE_V6); + + /* address is actually being changed? */ + if ((ip_2_ip6(&old_addr)->addr[0] != i0) || (ip_2_ip6(&old_addr)->addr[1] != i1) || + (ip_2_ip6(&old_addr)->addr[2] != i2) || (ip_2_ip6(&old_addr)->addr[3] != i3)) { + LWIP_DEBUGF(NETIF_DEBUG | LWIP_DBG_STATE, ("netif_ip6_addr_set: netif address being changed\n")); + + IP_ADDR6(&new_ipaddr, i0, i1, i2, i3); + ip6_addr_assign_zone(ip_2_ip6(&new_ipaddr), IP6_UNICAST, netif); + + if (ip6_addr_isvalid(netif_ip6_addr_state(netif, addr_idx))) { + netif_do_ip_addr_changed(netif_ip_addr6(netif, addr_idx), &new_ipaddr); + } + /* @todo: remove/readd mib2 ip6 entries? */ + + ip_addr_copy(netif->ip6_addr[addr_idx], new_ipaddr); + + if (ip6_addr_isvalid(netif_ip6_addr_state(netif, addr_idx))) { + netif_issue_reports(netif, NETIF_REPORT_TYPE_IPV6); + NETIF_STATUS_CALLBACK(netif); + } + +#if LWIP_NETIF_EXT_STATUS_CALLBACK + { + netif_ext_callback_args_t args; + args.ipv6_set.addr_index = addr_idx; + args.ipv6_set.old_address = &old_addr; + netif_invoke_ext_callback(netif, LWIP_NSC_IPV6_SET, &args); + } +#endif + } + + LWIP_DEBUGF(NETIF_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("netif: IPv6 address %d of interface %c%c set to %s/0x%"X8_F"\n", + addr_idx, netif->name[0], netif->name[1], ip6addr_ntoa(netif_ip6_addr(netif, addr_idx)), + netif_ip6_addr_state(netif, addr_idx))); +} + +/** + * @ingroup netif_ip6 + * Change the state of an IPv6 address of a network interface + * (INVALID, TEMPTATIVE, PREFERRED, DEPRECATED, where TEMPTATIVE + * includes the number of checks done, see ip6_addr.h) + * + * @param netif the network interface to change + * @param addr_idx index of the IPv6 address + * @param state the new IPv6 address state + */ +void +netif_ip6_addr_set_state(struct netif *netif, s8_t addr_idx, u8_t state) +{ + u8_t old_state; + LWIP_ASSERT_CORE_LOCKED(); + LWIP_ASSERT("netif != NULL", netif != NULL); + LWIP_ASSERT("invalid index", addr_idx < LWIP_IPV6_NUM_ADDRESSES); + + old_state = netif_ip6_addr_state(netif, addr_idx); + /* state is actually being changed? */ + if (old_state != state) { + u8_t old_valid = old_state & IP6_ADDR_VALID; + u8_t new_valid = state & IP6_ADDR_VALID; + LWIP_DEBUGF(NETIF_DEBUG | LWIP_DBG_STATE, ("netif_ip6_addr_set_state: netif address state being changed\n")); + +#if LWIP_IPV6_MLD + /* Reevaluate solicited-node multicast group membership. */ + if (netif->flags & NETIF_FLAG_MLD6) { + nd6_adjust_mld_membership(netif, addr_idx, state); + } +#endif /* LWIP_IPV6_MLD */ + + if (old_valid && !new_valid) { + /* address about to be removed by setting invalid */ + netif_do_ip_addr_changed(netif_ip_addr6(netif, addr_idx), NULL); + /* @todo: remove mib2 ip6 entries? */ + } + netif->ip6_addr_state[addr_idx] = state; + + if (!old_valid && new_valid) { + /* address added by setting valid */ + /* This is a good moment to check that the address is properly zoned. */ + IP6_ADDR_ZONECHECK_NETIF(netif_ip6_addr(netif, addr_idx), netif); + /* @todo: add mib2 ip6 entries? */ + netif_issue_reports(netif, NETIF_REPORT_TYPE_IPV6); + } + if ((old_state & ~IP6_ADDR_TENTATIVE_COUNT_MASK) != + (state & ~IP6_ADDR_TENTATIVE_COUNT_MASK)) { + /* address state has changed -> call the callback function */ + NETIF_STATUS_CALLBACK(netif); + } + +#if LWIP_NETIF_EXT_STATUS_CALLBACK + { + netif_ext_callback_args_t args; + args.ipv6_addr_state_changed.addr_index = addr_idx; + args.ipv6_addr_state_changed.old_state = old_state; + args.ipv6_addr_state_changed.address = netif_ip_addr6(netif, addr_idx); + netif_invoke_ext_callback(netif, LWIP_NSC_IPV6_ADDR_STATE_CHANGED, &args); + } +#endif + } + LWIP_DEBUGF(NETIF_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("netif: IPv6 address %d of interface %c%c set to %s/0x%"X8_F"\n", + addr_idx, netif->name[0], netif->name[1], ip6addr_ntoa(netif_ip6_addr(netif, addr_idx)), + netif_ip6_addr_state(netif, addr_idx))); +} + +/** + * Checks if a specific local address is present on the netif and returns its + * index. Depending on its state, it may or may not be assigned to the + * interface (as per RFC terminology). + * + * The given address may or may not be zoned (i.e., have a zone index other + * than IP6_NO_ZONE). If the address is zoned, it must have the correct zone + * for the given netif, or no match will be found. + * + * @param netif the netif to check + * @param ip6addr the IPv6 address to find + * @return >= 0: address found, this is its index + * -1: address not found on this netif + */ +s8_t +netif_get_ip6_addr_match(struct netif *netif, const ip6_addr_t *ip6addr) +{ + s8_t i; + + LWIP_ASSERT_CORE_LOCKED(); + + LWIP_ASSERT("netif_get_ip6_addr_match: invalid netif", netif != NULL); + LWIP_ASSERT("netif_get_ip6_addr_match: invalid ip6addr", ip6addr != NULL); + +#if LWIP_IPV6_SCOPES + if (ip6_addr_has_zone(ip6addr) && !ip6_addr_test_zone(ip6addr, netif)) { + return -1; /* wrong zone, no match */ + } +#endif /* LWIP_IPV6_SCOPES */ + + for (i = 0; i < LWIP_IPV6_NUM_ADDRESSES; i++) { + if (!ip6_addr_isinvalid(netif_ip6_addr_state(netif, i)) && + ip6_addr_cmp_zoneless(netif_ip6_addr(netif, i), ip6addr)) { + return i; + } + } + return -1; +} + +/** + * @ingroup netif_ip6 + * Create a link-local IPv6 address on a netif (stored in slot 0) + * + * @param netif the netif to create the address on + * @param from_mac_48bit if != 0, assume hwadr is a 48-bit MAC address (std conversion) + * if == 0, use hwaddr directly as interface ID + */ +void +netif_create_ip6_linklocal_address(struct netif *netif, u8_t from_mac_48bit) +{ + u8_t i, addr_index; + + LWIP_ASSERT_CORE_LOCKED(); + + LWIP_ASSERT("netif_create_ip6_linklocal_address: invalid netif", netif != NULL); + + /* Link-local prefix. */ + ip_2_ip6(&netif->ip6_addr[0])->addr[0] = PP_HTONL(0xfe800000ul); + ip_2_ip6(&netif->ip6_addr[0])->addr[1] = 0; + + /* Generate interface ID. */ + if (from_mac_48bit) { + /* Assume hwaddr is a 48-bit IEEE 802 MAC. Convert to EUI-64 address. Complement Group bit. */ + ip_2_ip6(&netif->ip6_addr[0])->addr[2] = lwip_htonl((((u32_t)(netif->hwaddr[0] ^ 0x02)) << 24) | + ((u32_t)(netif->hwaddr[1]) << 16) | + ((u32_t)(netif->hwaddr[2]) << 8) | + (0xff)); + ip_2_ip6(&netif->ip6_addr[0])->addr[3] = lwip_htonl((u32_t)(0xfeul << 24) | + ((u32_t)(netif->hwaddr[3]) << 16) | + ((u32_t)(netif->hwaddr[4]) << 8) | + (netif->hwaddr[5])); + } else { + /* Use hwaddr directly as interface ID. */ + ip_2_ip6(&netif->ip6_addr[0])->addr[2] = 0; + ip_2_ip6(&netif->ip6_addr[0])->addr[3] = 0; + + addr_index = 3; + for (i = 0; (i < 8) && (i < netif->hwaddr_len); i++) { + if (i == 4) { + addr_index--; + } + ip_2_ip6(&netif->ip6_addr[0])->addr[addr_index] |= lwip_htonl(((u32_t)(netif->hwaddr[netif->hwaddr_len - i - 1])) << (8 * (i & 0x03))); + } + } + + /* Set a link-local zone. Even though the zone is implied by the owning + * netif, setting the zone anyway has two important conceptual advantages: + * 1) it avoids the need for a ton of exceptions in internal code, allowing + * e.g. ip6_addr_cmp() to be used on local addresses; + * 2) the properly zoned address is visible externally, e.g. when any outside + * code enumerates available addresses or uses one to bind a socket. + * Any external code unaware of address scoping is likely to just ignore the + * zone field, so this should not create any compatibility problems. */ + ip6_addr_assign_zone(ip_2_ip6(&netif->ip6_addr[0]), IP6_UNICAST, netif); + + /* Set address state. */ +#if LWIP_IPV6_DUP_DETECT_ATTEMPTS + /* Will perform duplicate address detection (DAD). */ + netif_ip6_addr_set_state(netif, 0, IP6_ADDR_TENTATIVE); +#else + /* Consider address valid. */ + netif_ip6_addr_set_state(netif, 0, IP6_ADDR_PREFERRED); +#endif /* LWIP_IPV6_AUTOCONFIG */ +} + +/** + * @ingroup netif_ip6 + * This function allows for the easy addition of a new IPv6 address to an interface. + * It takes care of finding an empty slot and then sets the address tentative + * (to make sure that all the subsequent processing happens). + * + * @param netif netif to add the address on + * @param ip6addr address to add + * @param chosen_idx if != NULL, the chosen IPv6 address index will be stored here + */ +err_t +netif_add_ip6_address(struct netif *netif, const ip6_addr_t *ip6addr, s8_t *chosen_idx) +{ + s8_t i; + + LWIP_ASSERT_CORE_LOCKED(); + + LWIP_ASSERT("netif_add_ip6_address: invalid netif", netif != NULL); + LWIP_ASSERT("netif_add_ip6_address: invalid ip6addr", ip6addr != NULL); + + i = netif_get_ip6_addr_match(netif, ip6addr); + if (i >= 0) { + /* Address already added */ + if (chosen_idx != NULL) { + *chosen_idx = i; + } + return ERR_OK; + } + + /* Find a free slot. The first one is reserved for link-local addresses. */ + for (i = ip6_addr_islinklocal(ip6addr) ? 0 : 1; i < LWIP_IPV6_NUM_ADDRESSES; i++) { + if (ip6_addr_isinvalid(netif_ip6_addr_state(netif, i))) { + ip_addr_copy_from_ip6(netif->ip6_addr[i], *ip6addr); + ip6_addr_assign_zone(ip_2_ip6(&netif->ip6_addr[i]), IP6_UNICAST, netif); + netif_ip6_addr_set_state(netif, i, IP6_ADDR_TENTATIVE); + if (chosen_idx != NULL) { + *chosen_idx = i; + } + return ERR_OK; + } + } + + if (chosen_idx != NULL) { + *chosen_idx = -1; + } + return ERR_VAL; +} + +/** Dummy IPv6 output function for netifs not supporting IPv6 + */ +static err_t +netif_null_output_ip6(struct netif *netif, struct pbuf *p, const ip6_addr_t *ipaddr) +{ + LWIP_UNUSED_ARG(netif); + LWIP_UNUSED_ARG(p); + LWIP_UNUSED_ARG(ipaddr); + + return ERR_IF; +} +#endif /* LWIP_IPV6 */ + +#if LWIP_IPV4 +/** Dummy IPv4 output function for netifs not supporting IPv4 + */ +static err_t +netif_null_output_ip4(struct netif *netif, struct pbuf *p, const ip4_addr_t *ipaddr) +{ + LWIP_UNUSED_ARG(netif); + LWIP_UNUSED_ARG(p); + LWIP_UNUSED_ARG(ipaddr); + + return ERR_IF; +} +#endif /* LWIP_IPV4 */ + +/** +* @ingroup netif +* Return the interface index for the netif with name +* or NETIF_NO_INDEX if not found/on error +* +* @param name the name of the netif +*/ +u8_t +netif_name_to_index(const char *name) +{ + struct netif *netif = netif_find(name); + if (netif != NULL) { + return netif_get_index(netif); + } + /* No name found, return invalid index */ + return NETIF_NO_INDEX; +} + +/** +* @ingroup netif +* Return the interface name for the netif matching index +* or NULL if not found/on error +* +* @param idx the interface index of the netif +* @param name char buffer of at least NETIF_NAMESIZE bytes +*/ +char * +netif_index_to_name(u8_t idx, char *name) +{ + struct netif *netif = netif_get_by_index(idx); + + if (netif != NULL) { + name[0] = netif->name[0]; + name[1] = netif->name[1]; + lwip_itoa(&name[2], NETIF_NAMESIZE - 2, netif_index_to_num(idx)); + return name; + } + return NULL; +} + +/** +* @ingroup netif +* Return the interface for the netif index +* +* @param idx index of netif to find +*/ +struct netif * +netif_get_by_index(u8_t idx) +{ + struct netif *netif; + + LWIP_ASSERT_CORE_LOCKED(); + + if (idx != NETIF_NO_INDEX) { + NETIF_FOREACH(netif) { + if (idx == netif_get_index(netif)) { + return netif; /* found! */ + } + } + } + + return NULL; +} + +/** + * @ingroup netif + * Find a network interface by searching for its name + * + * @param name the name of the netif (like netif->name) plus concatenated number + * in ascii representation (e.g. 'en0') + */ +struct netif * +netif_find(const char *name) +{ + struct netif *netif; + u8_t num; + + LWIP_ASSERT_CORE_LOCKED(); + + if (name == NULL) { + return NULL; + } + + num = (u8_t)atoi(&name[2]); + + NETIF_FOREACH(netif) { + if (num == netif->num && + name[0] == netif->name[0] && + name[1] == netif->name[1]) { + LWIP_DEBUGF(NETIF_DEBUG, ("netif_find: found %c%c\n", name[0], name[1])); + return netif; + } + } + LWIP_DEBUGF(NETIF_DEBUG, ("netif_find: didn't find %c%c\n", name[0], name[1])); + return NULL; +} + +#if LWIP_NETIF_EXT_STATUS_CALLBACK +/** + * @ingroup netif + * Add extended netif events listener + * @param callback pointer to listener structure + * @param fn callback function + */ +void +netif_add_ext_callback(netif_ext_callback_t *callback, netif_ext_callback_fn fn) +{ + LWIP_ASSERT_CORE_LOCKED(); + LWIP_ASSERT("callback must be != NULL", callback != NULL); + LWIP_ASSERT("fn must be != NULL", fn != NULL); + + callback->callback_fn = fn; + callback->next = ext_callback; + ext_callback = callback; +} + +/** + * @ingroup netif + * Remove extended netif events listener + * @param callback pointer to listener structure + */ +void +netif_remove_ext_callback(netif_ext_callback_t* callback) +{ + netif_ext_callback_t *last, *iter; + + LWIP_ASSERT_CORE_LOCKED(); + LWIP_ASSERT("callback must be != NULL", callback != NULL); + + if (ext_callback == NULL) { + return; + } + + if (callback == ext_callback) { + ext_callback = ext_callback->next; + } else { + last = ext_callback; + for (iter = ext_callback->next; iter != NULL; last = iter, iter = iter->next) { + if (iter == callback) { + LWIP_ASSERT("last != NULL", last != NULL); + last->next = callback->next; + callback->next = NULL; + return; + } + } + } +} + +/** + * Invoke extended netif status event + * @param netif netif that is affected by change + * @param reason change reason + * @param args depends on reason, see reason description + */ +void +netif_invoke_ext_callback(struct netif *netif, netif_nsc_reason_t reason, const netif_ext_callback_args_t *args) +{ + netif_ext_callback_t *callback = ext_callback; + + LWIP_ASSERT("netif must be != NULL", netif != NULL); + + while (callback != NULL) { + callback->callback_fn(netif, reason, args); + callback = callback->next; + } +} +#endif /* LWIP_NETIF_EXT_STATUS_CALLBACK */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/pbuf.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/pbuf.c new file mode 100644 index 0000000000000000000000000000000000000000..a209e0ca8fce45940c981897f1b919ef910306b7 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/pbuf.c @@ -0,0 +1,1514 @@ +/** + * @file + * Packet buffer management + */ + +/** + * @defgroup pbuf Packet buffers (PBUF) + * @ingroup infrastructure + * + * Packets are built from the pbuf data structure. It supports dynamic + * memory allocation for packet contents or can reference externally + * managed packet contents both in RAM and ROM. Quick allocation for + * incoming packets is provided through pools with fixed sized pbufs. + * + * A packet may span over multiple pbufs, chained as a singly linked + * list. This is called a "pbuf chain". + * + * Multiple packets may be queued, also using this singly linked list. + * This is called a "packet queue". + * + * So, a packet queue consists of one or more pbuf chains, each of + * which consist of one or more pbufs. CURRENTLY, PACKET QUEUES ARE + * NOT SUPPORTED!!! Use helper structs to queue multiple packets. + * + * The differences between a pbuf chain and a packet queue are very + * precise but subtle. + * + * The last pbuf of a packet has a ->tot_len field that equals the + * ->len field. It can be found by traversing the list. If the last + * pbuf of a packet has a ->next field other than NULL, more packets + * are on the queue. + * + * Therefore, looping through a pbuf of a single packet, has an + * loop end condition (tot_len == p->len), NOT (next == NULL). + * + * Example of custom pbuf usage: @ref zerocopyrx + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#include "lwip/opt.h" + +#include "lwip/pbuf.h" +#include "lwip/stats.h" +#include "lwip/def.h" +#include "lwip/mem.h" +#include "lwip/memp.h" +#include "lwip/sys.h" +#include "lwip/netif.h" +#if LWIP_TCP && TCP_QUEUE_OOSEQ +#include "lwip/priv/tcp_priv.h" +#endif +#if LWIP_CHECKSUM_ON_COPY +#include "lwip/inet_chksum.h" +#endif + +#include + +#define SIZEOF_STRUCT_PBUF LWIP_MEM_ALIGN_SIZE(sizeof(struct pbuf)) +/* Since the pool is created in memp, PBUF_POOL_BUFSIZE will be automatically + aligned there. Therefore, PBUF_POOL_BUFSIZE_ALIGNED can be used here. */ +#define PBUF_POOL_BUFSIZE_ALIGNED LWIP_MEM_ALIGN_SIZE(PBUF_POOL_BUFSIZE) + +static const struct pbuf * +pbuf_skip_const(const struct pbuf *in, u16_t in_offset, u16_t *out_offset); + +#if !LWIP_TCP || !TCP_QUEUE_OOSEQ || !PBUF_POOL_FREE_OOSEQ +#define PBUF_POOL_IS_EMPTY() +#else /* !LWIP_TCP || !TCP_QUEUE_OOSEQ || !PBUF_POOL_FREE_OOSEQ */ + +#if !NO_SYS +#ifndef PBUF_POOL_FREE_OOSEQ_QUEUE_CALL +#include "lwip/tcpip.h" +#define PBUF_POOL_FREE_OOSEQ_QUEUE_CALL() do { \ + if (tcpip_try_callback(pbuf_free_ooseq_callback, NULL) != ERR_OK) { \ + SYS_ARCH_PROTECT(old_level); \ + pbuf_free_ooseq_pending = 0; \ + SYS_ARCH_UNPROTECT(old_level); \ + } } while(0) +#endif /* PBUF_POOL_FREE_OOSEQ_QUEUE_CALL */ +#endif /* !NO_SYS */ + +volatile u8_t pbuf_free_ooseq_pending; +#define PBUF_POOL_IS_EMPTY() pbuf_pool_is_empty() + +/** + * Attempt to reclaim some memory from queued out-of-sequence TCP segments + * if we run out of pool pbufs. It's better to give priority to new packets + * if we're running out. + * + * This must be done in the correct thread context therefore this function + * can only be used with NO_SYS=0 and through tcpip_callback. + */ +#if !NO_SYS +static +#endif /* !NO_SYS */ +void +pbuf_free_ooseq(void) +{ + struct tcp_pcb *pcb; + SYS_ARCH_SET(pbuf_free_ooseq_pending, 0); + + for (pcb = tcp_active_pcbs; NULL != pcb; pcb = pcb->next) { + if (pcb->ooseq != NULL) { + /** Free the ooseq pbufs of one PCB only */ + LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_free_ooseq: freeing out-of-sequence pbufs\n")); + tcp_free_ooseq(pcb); + return; + } + } +} + +#if !NO_SYS +/** + * Just a callback function for tcpip_callback() that calls pbuf_free_ooseq(). + */ +static void +pbuf_free_ooseq_callback(void *arg) +{ + LWIP_UNUSED_ARG(arg); + pbuf_free_ooseq(); +} +#endif /* !NO_SYS */ + +/** Queue a call to pbuf_free_ooseq if not already queued. */ +static void +pbuf_pool_is_empty(void) +{ +#ifndef PBUF_POOL_FREE_OOSEQ_QUEUE_CALL + SYS_ARCH_SET(pbuf_free_ooseq_pending, 1); +#else /* PBUF_POOL_FREE_OOSEQ_QUEUE_CALL */ + u8_t queued; + SYS_ARCH_DECL_PROTECT(old_level); + SYS_ARCH_PROTECT(old_level); + queued = pbuf_free_ooseq_pending; + pbuf_free_ooseq_pending = 1; + SYS_ARCH_UNPROTECT(old_level); + + if (!queued) { + /* queue a call to pbuf_free_ooseq if not already queued */ + PBUF_POOL_FREE_OOSEQ_QUEUE_CALL(); + } +#endif /* PBUF_POOL_FREE_OOSEQ_QUEUE_CALL */ +} +#endif /* !LWIP_TCP || !TCP_QUEUE_OOSEQ || !PBUF_POOL_FREE_OOSEQ */ + +/* Initialize members of struct pbuf after allocation */ +static void +pbuf_init_alloced_pbuf(struct pbuf *p, void *payload, u16_t tot_len, u16_t len, pbuf_type type, u8_t flags) +{ + p->next = NULL; + p->payload = payload; + p->tot_len = tot_len; + p->len = len; + p->type_internal = (u8_t)type; + p->flags = flags; + p->ref = 1; + p->if_idx = NETIF_NO_INDEX; +} + +/** + * @ingroup pbuf + * Allocates a pbuf of the given type (possibly a chain for PBUF_POOL type). + * + * The actual memory allocated for the pbuf is determined by the + * layer at which the pbuf is allocated and the requested size + * (from the size parameter). + * + * @param layer header size + * @param length size of the pbuf's payload + * @param type this parameter decides how and where the pbuf + * should be allocated as follows: + * + * - PBUF_RAM: buffer memory for pbuf is allocated as one large + * chunk. This includes protocol headers as well. + * - PBUF_ROM: no buffer memory is allocated for the pbuf, even for + * protocol headers. Additional headers must be prepended + * by allocating another pbuf and chain in to the front of + * the ROM pbuf. It is assumed that the memory used is really + * similar to ROM in that it is immutable and will not be + * changed. Memory which is dynamic should generally not + * be attached to PBUF_ROM pbufs. Use PBUF_REF instead. + * - PBUF_REF: no buffer memory is allocated for the pbuf, even for + * protocol headers. It is assumed that the pbuf is only + * being used in a single thread. If the pbuf gets queued, + * then pbuf_take should be called to copy the buffer. + * - PBUF_POOL: the pbuf is allocated as a pbuf chain, with pbufs from + * the pbuf pool that is allocated during pbuf_init(). + * + * @return the allocated pbuf. If multiple pbufs where allocated, this + * is the first pbuf of a pbuf chain. + */ +struct pbuf * +pbuf_alloc(pbuf_layer layer, u16_t length, pbuf_type type) +{ + struct pbuf *p; + u16_t offset = (u16_t)layer; + LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_alloc(length=%"U16_F")\n", length)); + + switch (type) { + case PBUF_REF: /* fall through */ + case PBUF_ROM: + p = pbuf_alloc_reference(NULL, length, type); + break; + case PBUF_POOL: { + struct pbuf *q, *last; + u16_t rem_len; /* remaining length */ + p = NULL; + last = NULL; + rem_len = length; + do { + u16_t qlen; + q = (struct pbuf *)memp_malloc(MEMP_PBUF_POOL); + if (q == NULL) { + PBUF_POOL_IS_EMPTY(); + /* free chain so far allocated */ + if (p) { + pbuf_free(p); + } + /* bail out unsuccessfully */ + return NULL; + } + qlen = LWIP_MIN(rem_len, (u16_t)(PBUF_POOL_BUFSIZE_ALIGNED - LWIP_MEM_ALIGN_SIZE(offset))); + pbuf_init_alloced_pbuf(q, LWIP_MEM_ALIGN((void *)((u8_t *)q + SIZEOF_STRUCT_PBUF + offset)), + rem_len, qlen, type, 0); + LWIP_ASSERT("pbuf_alloc: pbuf q->payload properly aligned", + ((mem_ptr_t)q->payload % MEM_ALIGNMENT) == 0); + LWIP_ASSERT("PBUF_POOL_BUFSIZE must be bigger than MEM_ALIGNMENT", + (PBUF_POOL_BUFSIZE_ALIGNED - LWIP_MEM_ALIGN_SIZE(offset)) > 0 ); + if (p == NULL) { + /* allocated head of pbuf chain (into p) */ + p = q; + } else { + /* make previous pbuf point to this pbuf */ + last->next = q; + } + last = q; + rem_len = (u16_t)(rem_len - qlen); + offset = 0; + } while (rem_len > 0); + break; + } + case PBUF_RAM: { + u16_t payload_len = (u16_t)(LWIP_MEM_ALIGN_SIZE(offset) + LWIP_MEM_ALIGN_SIZE(length)); + mem_size_t alloc_len = (mem_size_t)(LWIP_MEM_ALIGN_SIZE(SIZEOF_STRUCT_PBUF) + payload_len); + + /* bug #50040: Check for integer overflow when calculating alloc_len */ + if ((payload_len < LWIP_MEM_ALIGN_SIZE(length)) || + (alloc_len < LWIP_MEM_ALIGN_SIZE(length))) { + return NULL; + } + + /* If pbuf is to be allocated in RAM, allocate memory for it. */ + p = (struct pbuf *)mem_malloc(alloc_len); + if (p == NULL) { + return NULL; + } + pbuf_init_alloced_pbuf(p, LWIP_MEM_ALIGN((void *)((u8_t *)p + SIZEOF_STRUCT_PBUF + offset)), + length, length, type, 0); + LWIP_ASSERT("pbuf_alloc: pbuf->payload properly aligned", + ((mem_ptr_t)p->payload % MEM_ALIGNMENT) == 0); + break; + } + default: + LWIP_ASSERT("pbuf_alloc: erroneous type", 0); + return NULL; + } + LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_alloc(length=%"U16_F") == %p\n", length, (void *)p)); + return p; +} + +/** + * @ingroup pbuf + * Allocates a pbuf for referenced data. + * Referenced data can be volatile (PBUF_REF) or long-lived (PBUF_ROM). + * + * The actual memory allocated for the pbuf is determined by the + * layer at which the pbuf is allocated and the requested size + * (from the size parameter). + * + * @param payload referenced payload + * @param length size of the pbuf's payload + * @param type this parameter decides how and where the pbuf + * should be allocated as follows: + * + * - PBUF_ROM: It is assumed that the memory used is really + * similar to ROM in that it is immutable and will not be + * changed. Memory which is dynamic should generally not + * be attached to PBUF_ROM pbufs. Use PBUF_REF instead. + * - PBUF_REF: It is assumed that the pbuf is only + * being used in a single thread. If the pbuf gets queued, + * then pbuf_take should be called to copy the buffer. + * + * @return the allocated pbuf. + */ +struct pbuf * +pbuf_alloc_reference(void *payload, u16_t length, pbuf_type type) +{ + struct pbuf *p; + LWIP_ASSERT("invalid pbuf_type", (type == PBUF_REF) || (type == PBUF_ROM)); + /* only allocate memory for the pbuf structure */ + p = (struct pbuf *)memp_malloc(MEMP_PBUF); + if (p == NULL) { + LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_LEVEL_SERIOUS, + ("pbuf_alloc_reference: Could not allocate MEMP_PBUF for PBUF_%s.\n", + (type == PBUF_ROM) ? "ROM" : "REF")); + return NULL; + } + pbuf_init_alloced_pbuf(p, payload, length, length, type, 0); + return p; +} + + +#if LWIP_SUPPORT_CUSTOM_PBUF +/** + * @ingroup pbuf + * Initialize a custom pbuf (already allocated). + * Example of custom pbuf usage: @ref zerocopyrx + * + * @param l header size + * @param length size of the pbuf's payload + * @param type type of the pbuf (only used to treat the pbuf accordingly, as + * this function allocates no memory) + * @param p pointer to the custom pbuf to initialize (already allocated) + * @param payload_mem pointer to the buffer that is used for payload and headers, + * must be at least big enough to hold 'length' plus the header size, + * may be NULL if set later. + * ATTENTION: The caller is responsible for correct alignment of this buffer!! + * @param payload_mem_len the size of the 'payload_mem' buffer, must be at least + * big enough to hold 'length' plus the header size + */ +struct pbuf * +pbuf_alloced_custom(pbuf_layer l, u16_t length, pbuf_type type, struct pbuf_custom *p, + void *payload_mem, u16_t payload_mem_len) +{ + u16_t offset = (u16_t)l; + void *payload; + LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_alloced_custom(length=%"U16_F")\n", length)); + + if (LWIP_MEM_ALIGN_SIZE(offset) + length > payload_mem_len) { + LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_LEVEL_WARNING, ("pbuf_alloced_custom(length=%"U16_F") buffer too short\n", length)); + return NULL; + } + + if (payload_mem != NULL) { + payload = (u8_t *)payload_mem + LWIP_MEM_ALIGN_SIZE(offset); + } else { + payload = NULL; + } + pbuf_init_alloced_pbuf(&p->pbuf, payload, length, length, type, PBUF_FLAG_IS_CUSTOM); + return &p->pbuf; +} +#endif /* LWIP_SUPPORT_CUSTOM_PBUF */ + +/** + * @ingroup pbuf + * Shrink a pbuf chain to a desired length. + * + * @param p pbuf to shrink. + * @param new_len desired new length of pbuf chain + * + * Depending on the desired length, the first few pbufs in a chain might + * be skipped and left unchanged. The new last pbuf in the chain will be + * resized, and any remaining pbufs will be freed. + * + * @note If the pbuf is ROM/REF, only the ->tot_len and ->len fields are adjusted. + * @note May not be called on a packet queue. + * + * @note Despite its name, pbuf_realloc cannot grow the size of a pbuf (chain). + */ +void +pbuf_realloc(struct pbuf *p, u16_t new_len) +{ + struct pbuf *q; + u16_t rem_len; /* remaining length */ + u16_t shrink; + + LWIP_ASSERT("pbuf_realloc: p != NULL", p != NULL); + + /* desired length larger than current length? */ + if (new_len >= p->tot_len) { + /* enlarging not yet supported */ + return; + } + + /* the pbuf chain grows by (new_len - p->tot_len) bytes + * (which may be negative in case of shrinking) */ + shrink = (u16_t)(p->tot_len - new_len); + + /* first, step over any pbufs that should remain in the chain */ + rem_len = new_len; + q = p; + /* should this pbuf be kept? */ + while (rem_len > q->len) { + /* decrease remaining length by pbuf length */ + rem_len = (u16_t)(rem_len - q->len); + /* decrease total length indicator */ + q->tot_len = (u16_t)(q->tot_len - shrink); + /* proceed to next pbuf in chain */ + q = q->next; + LWIP_ASSERT("pbuf_realloc: q != NULL", q != NULL); + } + /* we have now reached the new last pbuf (in q) */ + /* rem_len == desired length for pbuf q */ + + /* shrink allocated memory for PBUF_RAM */ + /* (other types merely adjust their length fields */ + if (pbuf_match_allocsrc(q, PBUF_TYPE_ALLOC_SRC_MASK_STD_HEAP) && (rem_len != q->len) +#if LWIP_SUPPORT_CUSTOM_PBUF + && ((q->flags & PBUF_FLAG_IS_CUSTOM) == 0) +#endif /* LWIP_SUPPORT_CUSTOM_PBUF */ + ) { + /* reallocate and adjust the length of the pbuf that will be split */ + q = (struct pbuf *)mem_trim(q, (mem_size_t)(((u8_t *)q->payload - (u8_t *)q) + rem_len)); + LWIP_ASSERT("mem_trim returned q == NULL", q != NULL); + } + /* adjust length fields for new last pbuf */ + q->len = rem_len; + q->tot_len = q->len; + + /* any remaining pbufs in chain? */ + if (q->next != NULL) { + /* free remaining pbufs in chain */ + pbuf_free(q->next); + } + /* q is last packet in chain */ + q->next = NULL; + +} + +/** + * Adjusts the payload pointer to reveal headers in the payload. + * @see pbuf_add_header. + * + * @param p pbuf to change the header size. + * @param header_size_increment Number of bytes to increment header size. + * @param force Allow 'header_size_increment > 0' for PBUF_REF/PBUF_ROM types + * + * @return non-zero on failure, zero on success. + * + */ +static u8_t +pbuf_add_header_impl(struct pbuf *p, size_t header_size_increment, u8_t force) +{ + u16_t type_internal; + void *payload; + u16_t increment_magnitude; + + LWIP_ASSERT("p != NULL", p != NULL); + if ((p == NULL) || (header_size_increment > 0xFFFF)) { + return 1; + } + if (header_size_increment == 0) { + return 0; + } + + increment_magnitude = (u16_t)header_size_increment; + /* Do not allow tot_len to wrap as a result. */ + if ((u16_t)(increment_magnitude + p->tot_len) < increment_magnitude) { + return 1; + } + + type_internal = p->type_internal; + + /* pbuf types containing payloads? */ + if (type_internal & PBUF_TYPE_FLAG_STRUCT_DATA_CONTIGUOUS) { + /* set new payload pointer */ + payload = (u8_t *)p->payload - header_size_increment; + /* boundary check fails? */ + if ((u8_t *)payload < (u8_t *)p + SIZEOF_STRUCT_PBUF) { + LWIP_DEBUGF( PBUF_DEBUG | LWIP_DBG_TRACE, + ("pbuf_add_header: failed as %p < %p (not enough space for new header size)\n", + (void *)payload, (void *)((u8_t *)p + SIZEOF_STRUCT_PBUF))); + /* bail out unsuccessfully */ + return 1; + } + /* pbuf types referring to external payloads? */ + } else { + /* hide a header in the payload? */ + if (force) { + payload = (u8_t *)p->payload - header_size_increment; + } else { + /* cannot expand payload to front (yet!) + * bail out unsuccessfully */ + return 1; + } + } + LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_add_header: old %p new %p (%"U16_F")\n", + (void *)p->payload, (void *)payload, increment_magnitude)); + + /* modify pbuf fields */ + p->payload = payload; + p->len = (u16_t)(p->len + increment_magnitude); + p->tot_len = (u16_t)(p->tot_len + increment_magnitude); + + + return 0; +} + +/** + * Adjusts the payload pointer to reveal headers in the payload. + * + * Adjusts the ->payload pointer so that space for a header + * appears in the pbuf payload. + * + * The ->payload, ->tot_len and ->len fields are adjusted. + * + * @param p pbuf to change the header size. + * @param header_size_increment Number of bytes to increment header size which + * increases the size of the pbuf. New space is on the front. + * If header_size_increment is 0, this function does nothing and returns successful. + * + * PBUF_ROM and PBUF_REF type buffers cannot have their sizes increased, so + * the call will fail. A check is made that the increase in header size does + * not move the payload pointer in front of the start of the buffer. + * + * @return non-zero on failure, zero on success. + * + */ +u8_t +pbuf_add_header(struct pbuf *p, size_t header_size_increment) +{ + return pbuf_add_header_impl(p, header_size_increment, 0); +} + +/** + * Same as @ref pbuf_add_header but does not check if 'header_size > 0' is allowed. + * This is used internally only, to allow PBUF_REF for RX. + */ +u8_t +pbuf_add_header_force(struct pbuf *p, size_t header_size_increment) +{ + return pbuf_add_header_impl(p, header_size_increment, 1); +} + +/** + * Adjusts the payload pointer to hide headers in the payload. + * + * Adjusts the ->payload pointer so that space for a header + * disappears in the pbuf payload. + * + * The ->payload, ->tot_len and ->len fields are adjusted. + * + * @param p pbuf to change the header size. + * @param header_size_decrement Number of bytes to decrement header size which + * decreases the size of the pbuf. + * If header_size_decrement is 0, this function does nothing and returns successful. + * @return non-zero on failure, zero on success. + * + */ +u8_t +pbuf_remove_header(struct pbuf *p, size_t header_size_decrement) +{ + void *payload; + u16_t increment_magnitude; + + LWIP_ASSERT("p != NULL", p != NULL); + if ((p == NULL) || (header_size_decrement > 0xFFFF)) { + return 1; + } + if (header_size_decrement == 0) { + return 0; + } + + increment_magnitude = (u16_t)header_size_decrement; + /* Check that we aren't going to move off the end of the pbuf */ + LWIP_ERROR("increment_magnitude <= p->len", (increment_magnitude <= p->len), return 1;); + + /* remember current payload pointer */ + payload = p->payload; + LWIP_UNUSED_ARG(payload); /* only used in LWIP_DEBUGF below */ + + /* increase payload pointer (guarded by length check above) */ + p->payload = (u8_t *)p->payload + header_size_decrement; + /* modify pbuf length fields */ + p->len = (u16_t)(p->len - increment_magnitude); + p->tot_len = (u16_t)(p->tot_len - increment_magnitude); + + LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_remove_header: old %p new %p (%"U16_F")\n", + (void *)payload, (void *)p->payload, increment_magnitude)); + + return 0; +} + +static u8_t +pbuf_header_impl(struct pbuf *p, s16_t header_size_increment, u8_t force) +{ + if (header_size_increment < 0) { + return pbuf_remove_header(p, (size_t) - header_size_increment); + } else { + return pbuf_add_header_impl(p, (size_t)header_size_increment, force); + } +} + +/** + * Adjusts the payload pointer to hide or reveal headers in the payload. + * + * Adjusts the ->payload pointer so that space for a header + * (dis)appears in the pbuf payload. + * + * The ->payload, ->tot_len and ->len fields are adjusted. + * + * @param p pbuf to change the header size. + * @param header_size_increment Number of bytes to increment header size which + * increases the size of the pbuf. New space is on the front. + * (Using a negative value decreases the header size.) + * If header_size_increment is 0, this function does nothing and returns successful. + * + * PBUF_ROM and PBUF_REF type buffers cannot have their sizes increased, so + * the call will fail. A check is made that the increase in header size does + * not move the payload pointer in front of the start of the buffer. + * @return non-zero on failure, zero on success. + * + */ +u8_t +pbuf_header(struct pbuf *p, s16_t header_size_increment) +{ + return pbuf_header_impl(p, header_size_increment, 0); +} + +/** + * Same as pbuf_header but does not check if 'header_size > 0' is allowed. + * This is used internally only, to allow PBUF_REF for RX. + */ +u8_t +pbuf_header_force(struct pbuf *p, s16_t header_size_increment) +{ + return pbuf_header_impl(p, header_size_increment, 1); +} + +/** Similar to pbuf_header(-size) but de-refs header pbufs for (size >= p->len) + * + * @param q pbufs to operate on + * @param size The number of bytes to remove from the beginning of the pbuf list. + * While size >= p->len, pbufs are freed. + * ATTENTION: this is the opposite direction as @ref pbuf_header, but + * takes an u16_t not s16_t! + * @return the new head pbuf + */ +struct pbuf * +pbuf_free_header(struct pbuf *q, u16_t size) +{ + struct pbuf *p = q; + u16_t free_left = size; + while (free_left && p) { + if (free_left >= p->len) { + struct pbuf *f = p; + free_left = (u16_t)(free_left - p->len); + p = p->next; + f->next = 0; + pbuf_free(f); + } else { + pbuf_remove_header(p, free_left); + free_left = 0; + } + } + return p; +} + +/** + * @ingroup pbuf + * Dereference a pbuf chain or queue and deallocate any no-longer-used + * pbufs at the head of this chain or queue. + * + * Decrements the pbuf reference count. If it reaches zero, the pbuf is + * deallocated. + * + * For a pbuf chain, this is repeated for each pbuf in the chain, + * up to the first pbuf which has a non-zero reference count after + * decrementing. So, when all reference counts are one, the whole + * chain is free'd. + * + * @param p The pbuf (chain) to be dereferenced. + * + * @return the number of pbufs that were de-allocated + * from the head of the chain. + * + * @note MUST NOT be called on a packet queue (Not verified to work yet). + * @note the reference counter of a pbuf equals the number of pointers + * that refer to the pbuf (or into the pbuf). + * + * @internal examples: + * + * Assuming existing chains a->b->c with the following reference + * counts, calling pbuf_free(a) results in: + * + * 1->2->3 becomes ...1->3 + * 3->3->3 becomes 2->3->3 + * 1->1->2 becomes ......1 + * 2->1->1 becomes 1->1->1 + * 1->1->1 becomes ....... + * + */ +u8_t +pbuf_free(struct pbuf *p) +{ + u8_t alloc_src; + struct pbuf *q; + u8_t count; + + if (p == NULL) { + LWIP_ASSERT("p != NULL", p != NULL); + /* if assertions are disabled, proceed with debug output */ + LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_LEVEL_SERIOUS, + ("pbuf_free(p == NULL) was called.\n")); + return 0; + } + LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_free(%p)\n", (void *)p)); + + PERF_START; + + count = 0; + /* de-allocate all consecutive pbufs from the head of the chain that + * obtain a zero reference count after decrementing*/ + while (p != NULL) { + LWIP_PBUF_REF_T ref; + SYS_ARCH_DECL_PROTECT(old_level); + /* Since decrementing ref cannot be guaranteed to be a single machine operation + * we must protect it. We put the new ref into a local variable to prevent + * further protection. */ + SYS_ARCH_PROTECT(old_level); + /* all pbufs in a chain are referenced at least once */ + LWIP_ASSERT("pbuf_free: p->ref > 0", p->ref > 0); + /* decrease reference count (number of pointers to pbuf) */ + ref = --(p->ref); + SYS_ARCH_UNPROTECT(old_level); + /* this pbuf is no longer referenced to? */ + if (ref == 0) { + /* remember next pbuf in chain for next iteration */ + q = p->next; + LWIP_DEBUGF( PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_free: deallocating %p\n", (void *)p)); + alloc_src = pbuf_get_allocsrc(p); +#if LWIP_SUPPORT_CUSTOM_PBUF + /* is this a custom pbuf? */ + if ((p->flags & PBUF_FLAG_IS_CUSTOM) != 0) { + struct pbuf_custom *pc = (struct pbuf_custom *)p; + LWIP_ASSERT("pc->custom_free_function != NULL", pc->custom_free_function != NULL); + pc->custom_free_function(p); + } else +#endif /* LWIP_SUPPORT_CUSTOM_PBUF */ + { + /* is this a pbuf from the pool? */ + if (alloc_src == PBUF_TYPE_ALLOC_SRC_MASK_STD_MEMP_PBUF_POOL) { + memp_free(MEMP_PBUF_POOL, p); + /* is this a ROM or RAM referencing pbuf? */ + } else if (alloc_src == PBUF_TYPE_ALLOC_SRC_MASK_STD_MEMP_PBUF) { + memp_free(MEMP_PBUF, p); + /* type == PBUF_RAM */ + } else if (alloc_src == PBUF_TYPE_ALLOC_SRC_MASK_STD_HEAP) { + mem_free(p); + } else { + /* @todo: support freeing other types */ + LWIP_ASSERT("invalid pbuf type", 0); + } + } + count++; + /* proceed to next pbuf */ + p = q; + /* p->ref > 0, this pbuf is still referenced to */ + /* (and so the remaining pbufs in chain as well) */ + } else { + LWIP_DEBUGF( PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_free: %p has ref %"U16_F", ending here.\n", (void *)p, (u16_t)ref)); + /* stop walking through the chain */ + p = NULL; + } + } + PERF_STOP("pbuf_free"); + /* return number of de-allocated pbufs */ + return count; +} + +/** + * Count number of pbufs in a chain + * + * @param p first pbuf of chain + * @return the number of pbufs in a chain + */ +u16_t +pbuf_clen(const struct pbuf *p) +{ + u16_t len; + + len = 0; + while (p != NULL) { + ++len; + p = p->next; + } + return len; +} + +/** + * @ingroup pbuf + * Increment the reference count of the pbuf. + * + * @param p pbuf to increase reference counter of + * + */ +void +pbuf_ref(struct pbuf *p) +{ + /* pbuf given? */ + if (p != NULL) { + SYS_ARCH_SET(p->ref, (LWIP_PBUF_REF_T)(p->ref + 1)); + LWIP_ASSERT("pbuf ref overflow", p->ref > 0); + } +} + +/** + * @ingroup pbuf + * Concatenate two pbufs (each may be a pbuf chain) and take over + * the caller's reference of the tail pbuf. + * + * @note The caller MAY NOT reference the tail pbuf afterwards. + * Use pbuf_chain() for that purpose. + * + * This function explicitly does not check for tot_len overflow to prevent + * failing to queue too long pbufs. This can produce invalid pbufs, so + * handle with care! + * + * @see pbuf_chain() + */ +void +pbuf_cat(struct pbuf *h, struct pbuf *t) +{ + struct pbuf *p; + + LWIP_ERROR("(h != NULL) && (t != NULL) (programmer violates API)", + ((h != NULL) && (t != NULL)), return;); + + /* proceed to last pbuf of chain */ + for (p = h; p->next != NULL; p = p->next) { + /* add total length of second chain to all totals of first chain */ + p->tot_len = (u16_t)(p->tot_len + t->tot_len); + } + /* { p is last pbuf of first h chain, p->next == NULL } */ + LWIP_ASSERT("p->tot_len == p->len (of last pbuf in chain)", p->tot_len == p->len); + LWIP_ASSERT("p->next == NULL", p->next == NULL); + /* add total length of second chain to last pbuf total of first chain */ + p->tot_len = (u16_t)(p->tot_len + t->tot_len); + /* chain last pbuf of head (p) with first of tail (t) */ + p->next = t; + /* p->next now references t, but the caller will drop its reference to t, + * so netto there is no change to the reference count of t. + */ +} + +/** + * @ingroup pbuf + * Chain two pbufs (or pbuf chains) together. + * + * The caller MUST call pbuf_free(t) once it has stopped + * using it. Use pbuf_cat() instead if you no longer use t. + * + * @param h head pbuf (chain) + * @param t tail pbuf (chain) + * @note The pbufs MUST belong to the same packet. + * @note MAY NOT be called on a packet queue. + * + * The ->tot_len fields of all pbufs of the head chain are adjusted. + * The ->next field of the last pbuf of the head chain is adjusted. + * The ->ref field of the first pbuf of the tail chain is adjusted. + * + */ +void +pbuf_chain(struct pbuf *h, struct pbuf *t) +{ + pbuf_cat(h, t); + /* t is now referenced by h */ + pbuf_ref(t); + LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_chain: %p references %p\n", (void *)h, (void *)t)); +} + +/** + * Dechains the first pbuf from its succeeding pbufs in the chain. + * + * Makes p->tot_len field equal to p->len. + * @param p pbuf to dechain + * @return remainder of the pbuf chain, or NULL if it was de-allocated. + * @note May not be called on a packet queue. + */ +struct pbuf * +pbuf_dechain(struct pbuf *p) +{ + struct pbuf *q; + u8_t tail_gone = 1; + /* tail */ + q = p->next; + /* pbuf has successor in chain? */ + if (q != NULL) { + /* assert tot_len invariant: (p->tot_len == p->len + (p->next? p->next->tot_len: 0) */ + LWIP_ASSERT("p->tot_len == p->len + q->tot_len", q->tot_len == p->tot_len - p->len); + /* enforce invariant if assertion is disabled */ + q->tot_len = (u16_t)(p->tot_len - p->len); + /* decouple pbuf from remainder */ + p->next = NULL; + /* total length of pbuf p is its own length only */ + p->tot_len = p->len; + /* q is no longer referenced by p, free it */ + LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_dechain: unreferencing %p\n", (void *)q)); + tail_gone = pbuf_free(q); + if (tail_gone > 0) { + LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, + ("pbuf_dechain: deallocated %p (as it is no longer referenced)\n", (void *)q)); + } + /* return remaining tail or NULL if deallocated */ + } + /* assert tot_len invariant: (p->tot_len == p->len + (p->next? p->next->tot_len: 0) */ + LWIP_ASSERT("p->tot_len == p->len", p->tot_len == p->len); + return ((tail_gone > 0) ? NULL : q); +} + +/** + * @ingroup pbuf + * Create PBUF_RAM copies of pbufs. + * + * Used to queue packets on behalf of the lwIP stack, such as + * ARP based queueing. + * + * @note You MUST explicitly use p = pbuf_take(p); + * + * @note Only one packet is copied, no packet queue! + * + * @param p_to pbuf destination of the copy + * @param p_from pbuf source of the copy + * + * @return ERR_OK if pbuf was copied + * ERR_ARG if one of the pbufs is NULL or p_to is not big + * enough to hold p_from + */ +err_t +pbuf_copy(struct pbuf *p_to, const struct pbuf *p_from) +{ + size_t offset_to = 0, offset_from = 0, len; + + LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_copy(%p, %p)\n", + (const void *)p_to, (const void *)p_from)); + + /* is the target big enough to hold the source? */ + LWIP_ERROR("pbuf_copy: target not big enough to hold source", ((p_to != NULL) && + (p_from != NULL) && (p_to->tot_len >= p_from->tot_len)), return ERR_ARG;); + + /* iterate through pbuf chain */ + do { + /* copy one part of the original chain */ + if ((p_to->len - offset_to) >= (p_from->len - offset_from)) { + /* complete current p_from fits into current p_to */ + len = p_from->len - offset_from; + } else { + /* current p_from does not fit into current p_to */ + len = p_to->len - offset_to; + } + MEMCPY((u8_t *)p_to->payload + offset_to, (u8_t *)p_from->payload + offset_from, len); + offset_to += len; + offset_from += len; + LWIP_ASSERT("offset_to <= p_to->len", offset_to <= p_to->len); + LWIP_ASSERT("offset_from <= p_from->len", offset_from <= p_from->len); + if (offset_from >= p_from->len) { + /* on to next p_from (if any) */ + offset_from = 0; + p_from = p_from->next; + } + if (offset_to == p_to->len) { + /* on to next p_to (if any) */ + offset_to = 0; + p_to = p_to->next; + LWIP_ERROR("p_to != NULL", (p_to != NULL) || (p_from == NULL), return ERR_ARG;); + } + + if ((p_from != NULL) && (p_from->len == p_from->tot_len)) { + /* don't copy more than one packet! */ + LWIP_ERROR("pbuf_copy() does not allow packet queues!", + (p_from->next == NULL), return ERR_VAL;); + } + if ((p_to != NULL) && (p_to->len == p_to->tot_len)) { + /* don't copy more than one packet! */ + LWIP_ERROR("pbuf_copy() does not allow packet queues!", + (p_to->next == NULL), return ERR_VAL;); + } + } while (p_from); + LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_copy: end of chain reached.\n")); + return ERR_OK; +} + +/** + * @ingroup pbuf + * Copy (part of) the contents of a packet buffer + * to an application supplied buffer. + * + * @param buf the pbuf from which to copy data + * @param dataptr the application supplied buffer + * @param len length of data to copy (dataptr must be big enough). No more + * than buf->tot_len will be copied, irrespective of len + * @param offset offset into the packet buffer from where to begin copying len bytes + * @return the number of bytes copied, or 0 on failure + */ +u16_t +pbuf_copy_partial(const struct pbuf *buf, void *dataptr, u16_t len, u16_t offset) +{ + const struct pbuf *p; + u16_t left = 0; + u16_t buf_copy_len; + u16_t copied_total = 0; + + LWIP_ERROR("pbuf_copy_partial: invalid buf", (buf != NULL), return 0;); + LWIP_ERROR("pbuf_copy_partial: invalid dataptr", (dataptr != NULL), return 0;); + + /* Note some systems use byte copy if dataptr or one of the pbuf payload pointers are unaligned. */ + for (p = buf; len != 0 && p != NULL; p = p->next) { + if ((offset != 0) && (offset >= p->len)) { + /* don't copy from this buffer -> on to the next */ + offset = (u16_t)(offset - p->len); + } else { + /* copy from this buffer. maybe only partially. */ + buf_copy_len = (u16_t)(p->len - offset); + if (buf_copy_len > len) { + buf_copy_len = len; + } + /* copy the necessary parts of the buffer */ + MEMCPY(&((char *)dataptr)[left], &((char *)p->payload)[offset], buf_copy_len); + copied_total = (u16_t)(copied_total + buf_copy_len); + left = (u16_t)(left + buf_copy_len); + len = (u16_t)(len - buf_copy_len); + offset = 0; + } + } + return copied_total; +} + +/** + * @ingroup pbuf + * Get part of a pbuf's payload as contiguous memory. The returned memory is + * either a pointer into the pbuf's payload or, if split over multiple pbufs, + * a copy into the user-supplied buffer. + * + * @param p the pbuf from which to copy data + * @param buffer the application supplied buffer + * @param bufsize size of the application supplied buffer + * @param len length of data to copy (dataptr must be big enough). No more + * than buf->tot_len will be copied, irrespective of len + * @param offset offset into the packet buffer from where to begin copying len bytes + * @return the number of bytes copied, or 0 on failure + */ +void * +pbuf_get_contiguous(const struct pbuf *p, void *buffer, size_t bufsize, u16_t len, u16_t offset) +{ + const struct pbuf *q; + u16_t out_offset; + + LWIP_ERROR("pbuf_get_contiguous: invalid buf", (p != NULL), return NULL;); + LWIP_ERROR("pbuf_get_contiguous: invalid dataptr", (buffer != NULL), return NULL;); + LWIP_ERROR("pbuf_get_contiguous: invalid dataptr", (bufsize >= len), return NULL;); + + q = pbuf_skip_const(p, offset, &out_offset); + if (q != NULL) { + if (q->len >= (out_offset + len)) { + /* all data in this pbuf, return zero-copy */ + return (u8_t *)q->payload + out_offset; + } + /* need to copy */ + if (pbuf_copy_partial(q, buffer, len, out_offset) != len) { + /* copying failed: pbuf is too short */ + return NULL; + } + return buffer; + } + /* pbuf is too short (offset does not fit in) */ + return NULL; +} + +#if LWIP_TCP && TCP_QUEUE_OOSEQ && LWIP_WND_SCALE +/** + * This method modifies a 'pbuf chain', so that its total length is + * smaller than 64K. The remainder of the original pbuf chain is stored + * in *rest. + * This function never creates new pbufs, but splits an existing chain + * in two parts. The tot_len of the modified packet queue will likely be + * smaller than 64K. + * 'packet queues' are not supported by this function. + * + * @param p the pbuf queue to be split + * @param rest pointer to store the remainder (after the first 64K) + */ +void pbuf_split_64k(struct pbuf *p, struct pbuf **rest) +{ + *rest = NULL; + if ((p != NULL) && (p->next != NULL)) { + u16_t tot_len_front = p->len; + struct pbuf *i = p; + struct pbuf *r = p->next; + + /* continue until the total length (summed up as u16_t) overflows */ + while ((r != NULL) && ((u16_t)(tot_len_front + r->len) >= tot_len_front)) { + tot_len_front = (u16_t)(tot_len_front + r->len); + i = r; + r = r->next; + } + /* i now points to last packet of the first segment. Set next + pointer to NULL */ + i->next = NULL; + + if (r != NULL) { + /* Update the tot_len field in the first part */ + for (i = p; i != NULL; i = i->next) { + i->tot_len = (u16_t)(i->tot_len - r->tot_len); + LWIP_ASSERT("tot_len/len mismatch in last pbuf", + (i->next != NULL) || (i->tot_len == i->len)); + } + if (p->flags & PBUF_FLAG_TCP_FIN) { + r->flags |= PBUF_FLAG_TCP_FIN; + } + + /* tot_len field in rest does not need modifications */ + /* reference counters do not need modifications */ + *rest = r; + } + } +} +#endif /* LWIP_TCP && TCP_QUEUE_OOSEQ && LWIP_WND_SCALE */ + +/* Actual implementation of pbuf_skip() but returning const pointer... */ +static const struct pbuf * +pbuf_skip_const(const struct pbuf *in, u16_t in_offset, u16_t *out_offset) +{ + u16_t offset_left = in_offset; + const struct pbuf *q = in; + + /* get the correct pbuf */ + while ((q != NULL) && (q->len <= offset_left)) { + offset_left = (u16_t)(offset_left - q->len); + q = q->next; + } + if (out_offset != NULL) { + *out_offset = offset_left; + } + return q; +} + +/** + * @ingroup pbuf + * Skip a number of bytes at the start of a pbuf + * + * @param in input pbuf + * @param in_offset offset to skip + * @param out_offset resulting offset in the returned pbuf + * @return the pbuf in the queue where the offset is + */ +struct pbuf * +pbuf_skip(struct pbuf *in, u16_t in_offset, u16_t *out_offset) +{ + const struct pbuf *out = pbuf_skip_const(in, in_offset, out_offset); + return LWIP_CONST_CAST(struct pbuf *, out); +} + +/** + * @ingroup pbuf + * Copy application supplied data into a pbuf. + * This function can only be used to copy the equivalent of buf->tot_len data. + * + * @param buf pbuf to fill with data + * @param dataptr application supplied data buffer + * @param len length of the application supplied data buffer + * + * @return ERR_OK if successful, ERR_MEM if the pbuf is not big enough + */ +err_t +pbuf_take(struct pbuf *buf, const void *dataptr, u16_t len) +{ + struct pbuf *p; + size_t buf_copy_len; + size_t total_copy_len = len; + size_t copied_total = 0; + + LWIP_ERROR("pbuf_take: invalid buf", (buf != NULL), return ERR_ARG;); + LWIP_ERROR("pbuf_take: invalid dataptr", (dataptr != NULL), return ERR_ARG;); + LWIP_ERROR("pbuf_take: buf not large enough", (buf->tot_len >= len), return ERR_MEM;); + + if ((buf == NULL) || (dataptr == NULL) || (buf->tot_len < len)) { + return ERR_ARG; + } + + /* Note some systems use byte copy if dataptr or one of the pbuf payload pointers are unaligned. */ + for (p = buf; total_copy_len != 0; p = p->next) { + LWIP_ASSERT("pbuf_take: invalid pbuf", p != NULL); + buf_copy_len = total_copy_len; + if (buf_copy_len > p->len) { + /* this pbuf cannot hold all remaining data */ + buf_copy_len = p->len; + } + /* copy the necessary parts of the buffer */ + MEMCPY(p->payload, &((const char *)dataptr)[copied_total], buf_copy_len); + total_copy_len -= buf_copy_len; + copied_total += buf_copy_len; + } + LWIP_ASSERT("did not copy all data", total_copy_len == 0 && copied_total == len); + return ERR_OK; +} + +/** + * @ingroup pbuf + * Same as pbuf_take() but puts data at an offset + * + * @param buf pbuf to fill with data + * @param dataptr application supplied data buffer + * @param len length of the application supplied data buffer + * @param offset offset in pbuf where to copy dataptr to + * + * @return ERR_OK if successful, ERR_MEM if the pbuf is not big enough + */ +err_t +pbuf_take_at(struct pbuf *buf, const void *dataptr, u16_t len, u16_t offset) +{ + u16_t target_offset; + struct pbuf *q = pbuf_skip(buf, offset, &target_offset); + + /* return requested data if pbuf is OK */ + if ((q != NULL) && (q->tot_len >= target_offset + len)) { + u16_t remaining_len = len; + const u8_t *src_ptr = (const u8_t *)dataptr; + /* copy the part that goes into the first pbuf */ + u16_t first_copy_len; + LWIP_ASSERT("check pbuf_skip result", target_offset < q->len); + first_copy_len = (u16_t)LWIP_MIN(q->len - target_offset, len); + MEMCPY(((u8_t *)q->payload) + target_offset, dataptr, first_copy_len); + remaining_len = (u16_t)(remaining_len - first_copy_len); + src_ptr += first_copy_len; + if (remaining_len > 0) { + return pbuf_take(q->next, src_ptr, remaining_len); + } + return ERR_OK; + } + return ERR_MEM; +} + +/** + * @ingroup pbuf + * Creates a single pbuf out of a queue of pbufs. + * + * @remark: Either the source pbuf 'p' is freed by this function or the original + * pbuf 'p' is returned, therefore the caller has to check the result! + * + * @param p the source pbuf + * @param layer pbuf_layer of the new pbuf + * + * @return a new, single pbuf (p->next is NULL) + * or the old pbuf if allocation fails + */ +struct pbuf * +pbuf_coalesce(struct pbuf *p, pbuf_layer layer) +{ + struct pbuf *q; + if (p->next == NULL) { + return p; + } + q = pbuf_clone(layer, PBUF_RAM, p); + if (q == NULL) { + /* @todo: what do we do now? */ + return p; + } + pbuf_free(p); + return q; +} + +/** + * @ingroup pbuf + * Allocates a new pbuf of same length (via pbuf_alloc()) and copies the source + * pbuf into this new pbuf (using pbuf_copy()). + * + * @param layer pbuf_layer of the new pbuf + * @param type this parameter decides how and where the pbuf should be allocated + * (@see pbuf_alloc()) + * @param p the source pbuf + * + * @return a new pbuf or NULL if allocation fails + */ +struct pbuf * +pbuf_clone(pbuf_layer layer, pbuf_type type, struct pbuf *p) +{ + struct pbuf *q; + err_t err; + q = pbuf_alloc(layer, p->tot_len, type); + if (q == NULL) { + return NULL; + } + err = pbuf_copy(q, p); + LWIP_UNUSED_ARG(err); /* in case of LWIP_NOASSERT */ + LWIP_ASSERT("pbuf_copy failed", err == ERR_OK); + return q; +} + +#if LWIP_CHECKSUM_ON_COPY +/** + * Copies data into a single pbuf (*not* into a pbuf queue!) and updates + * the checksum while copying + * + * @param p the pbuf to copy data into + * @param start_offset offset of p->payload where to copy the data to + * @param dataptr data to copy into the pbuf + * @param len length of data to copy into the pbuf + * @param chksum pointer to the checksum which is updated + * @return ERR_OK if successful, another error if the data does not fit + * within the (first) pbuf (no pbuf queues!) + */ +err_t +pbuf_fill_chksum(struct pbuf *p, u16_t start_offset, const void *dataptr, + u16_t len, u16_t *chksum) +{ + u32_t acc; + u16_t copy_chksum; + char *dst_ptr; + LWIP_ASSERT("p != NULL", p != NULL); + LWIP_ASSERT("dataptr != NULL", dataptr != NULL); + LWIP_ASSERT("chksum != NULL", chksum != NULL); + LWIP_ASSERT("len != 0", len != 0); + + if ((start_offset >= p->len) || (start_offset + len > p->len)) { + return ERR_ARG; + } + + dst_ptr = ((char *)p->payload) + start_offset; + copy_chksum = LWIP_CHKSUM_COPY(dst_ptr, dataptr, len); + if ((start_offset & 1) != 0) { + copy_chksum = SWAP_BYTES_IN_WORD(copy_chksum); + } + acc = *chksum; + acc += copy_chksum; + *chksum = FOLD_U32T(acc); + return ERR_OK; +} +#endif /* LWIP_CHECKSUM_ON_COPY */ + +/** + * @ingroup pbuf + * Get one byte from the specified position in a pbuf + * WARNING: returns zero for offset >= p->tot_len + * + * @param p pbuf to parse + * @param offset offset into p of the byte to return + * @return byte at an offset into p OR ZERO IF 'offset' >= p->tot_len + */ +u8_t +pbuf_get_at(const struct pbuf *p, u16_t offset) +{ + int ret = pbuf_try_get_at(p, offset); + if (ret >= 0) { + return (u8_t)ret; + } + return 0; +} + +/** + * @ingroup pbuf + * Get one byte from the specified position in a pbuf + * + * @param p pbuf to parse + * @param offset offset into p of the byte to return + * @return byte at an offset into p [0..0xFF] OR negative if 'offset' >= p->tot_len + */ +int +pbuf_try_get_at(const struct pbuf *p, u16_t offset) +{ + u16_t q_idx; + const struct pbuf *q = pbuf_skip_const(p, offset, &q_idx); + + /* return requested data if pbuf is OK */ + if ((q != NULL) && (q->len > q_idx)) { + return ((u8_t *)q->payload)[q_idx]; + } + return -1; +} + +/** + * @ingroup pbuf + * Put one byte to the specified position in a pbuf + * WARNING: silently ignores offset >= p->tot_len + * + * @param p pbuf to fill + * @param offset offset into p of the byte to write + * @param data byte to write at an offset into p + */ +void +pbuf_put_at(struct pbuf *p, u16_t offset, u8_t data) +{ + u16_t q_idx; + struct pbuf *q = pbuf_skip(p, offset, &q_idx); + + /* write requested data if pbuf is OK */ + if ((q != NULL) && (q->len > q_idx)) { + ((u8_t *)q->payload)[q_idx] = data; + } +} + +/** + * @ingroup pbuf + * Compare pbuf contents at specified offset with memory s2, both of length n + * + * @param p pbuf to compare + * @param offset offset into p at which to start comparing + * @param s2 buffer to compare + * @param n length of buffer to compare + * @return zero if equal, nonzero otherwise + * (0xffff if p is too short, diffoffset+1 otherwise) + */ +u16_t +pbuf_memcmp(const struct pbuf *p, u16_t offset, const void *s2, u16_t n) +{ + u16_t start = offset; + const struct pbuf *q = p; + u16_t i; + + /* pbuf long enough to perform check? */ + if (p->tot_len < (offset + n)) { + return 0xffff; + } + + /* get the correct pbuf from chain. We know it succeeds because of p->tot_len check above. */ + while ((q != NULL) && (q->len <= start)) { + start = (u16_t)(start - q->len); + q = q->next; + } + + /* return requested data if pbuf is OK */ + for (i = 0; i < n; i++) { + /* We know pbuf_get_at() succeeds because of p->tot_len check above. */ + u8_t a = pbuf_get_at(q, (u16_t)(start + i)); + u8_t b = ((const u8_t *)s2)[i]; + if (a != b) { + return (u16_t)LWIP_MIN(i + 1, 0xFFFF); + } + } + return 0; +} + +/** + * @ingroup pbuf + * Find occurrence of mem (with length mem_len) in pbuf p, starting at offset + * start_offset. + * + * @param p pbuf to search, maximum length is 0xFFFE since 0xFFFF is used as + * return value 'not found' + * @param mem search for the contents of this buffer + * @param mem_len length of 'mem' + * @param start_offset offset into p at which to start searching + * @return 0xFFFF if substr was not found in p or the index where it was found + */ +u16_t +pbuf_memfind(const struct pbuf *p, const void *mem, u16_t mem_len, u16_t start_offset) +{ + u16_t i; + u16_t max_cmp_start = (u16_t)(p->tot_len - mem_len); + if (p->tot_len >= mem_len + start_offset) { + for (i = start_offset; i <= max_cmp_start; i++) { + u16_t plus = pbuf_memcmp(p, i, mem, mem_len); + if (plus == 0) { + return i; + } + } + } + return 0xFFFF; +} + +/** + * Find occurrence of substr with length substr_len in pbuf p, start at offset + * start_offset + * WARNING: in contrast to strstr(), this one does not stop at the first \0 in + * the pbuf/source string! + * + * @param p pbuf to search, maximum length is 0xFFFE since 0xFFFF is used as + * return value 'not found' + * @param substr string to search for in p, maximum length is 0xFFFE + * @return 0xFFFF if substr was not found in p or the index where it was found + */ +u16_t +pbuf_strstr(const struct pbuf *p, const char *substr) +{ + size_t substr_len; + if ((substr == NULL) || (substr[0] == 0) || (p->tot_len == 0xFFFF)) { + return 0xFFFF; + } + substr_len = strlen(substr); + if (substr_len >= 0xFFFF) { + return 0xFFFF; + } + return pbuf_memfind(p, substr, (u16_t)substr_len, 0); +} diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/raw.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/raw.c new file mode 100644 index 0000000000000000000000000000000000000000..3b34544b0450a2f7687f21d7eedf94d6bee3dd7b --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/raw.c @@ -0,0 +1,671 @@ +/** + * @file + * Implementation of raw protocol PCBs for low-level handling of + * different types of protocols besides (or overriding) those + * already available in lwIP.\n + * See also @ref raw_raw + * + * @defgroup raw_raw RAW + * @ingroup callbackstyle_api + * Implementation of raw protocol PCBs for low-level handling of + * different types of protocols besides (or overriding) those + * already available in lwIP.\n + * @see @ref api + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#include "lwip/opt.h" + +#if LWIP_RAW /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/def.h" +#include "lwip/memp.h" +#include "lwip/ip_addr.h" +#include "lwip/netif.h" +#include "lwip/raw.h" +#include "lwip/priv/raw_priv.h" +#include "lwip/stats.h" +#include "lwip/ip6.h" +#include "lwip/ip6_addr.h" +#include "lwip/inet_chksum.h" + +#include + +/** The list of RAW PCBs */ +static struct raw_pcb *raw_pcbs; + +static u8_t +raw_input_local_match(struct raw_pcb *pcb, u8_t broadcast) +{ + LWIP_UNUSED_ARG(broadcast); /* in IPv6 only case */ + + /* check if PCB is bound to specific netif */ + if ((pcb->netif_idx != NETIF_NO_INDEX) && + (pcb->netif_idx != netif_get_index(ip_data.current_input_netif))) { + return 0; + } + +#if LWIP_IPV4 && LWIP_IPV6 + /* Dual-stack: PCBs listening to any IP type also listen to any IP address */ + if (IP_IS_ANY_TYPE_VAL(pcb->local_ip)) { +#if IP_SOF_BROADCAST_RECV + if ((broadcast != 0) && !ip_get_option(pcb, SOF_BROADCAST)) { + return 0; + } +#endif /* IP_SOF_BROADCAST_RECV */ + return 1; + } +#endif /* LWIP_IPV4 && LWIP_IPV6 */ + + /* Only need to check PCB if incoming IP version matches PCB IP version */ + if (IP_ADDR_PCB_VERSION_MATCH_EXACT(pcb, ip_current_dest_addr())) { +#if LWIP_IPV4 + /* Special case: IPv4 broadcast: receive all broadcasts + * Note: broadcast variable can only be 1 if it is an IPv4 broadcast */ + if (broadcast != 0) { +#if IP_SOF_BROADCAST_RECV + if (ip_get_option(pcb, SOF_BROADCAST)) +#endif /* IP_SOF_BROADCAST_RECV */ + { + if (ip4_addr_isany(ip_2_ip4(&pcb->local_ip))) { + return 1; + } + } + } else +#endif /* LWIP_IPV4 */ + /* Handle IPv4 and IPv6: catch all or exact match */ + if (ip_addr_isany(&pcb->local_ip) || + ip_addr_cmp(&pcb->local_ip, ip_current_dest_addr())) { + return 1; + } + } + + return 0; +} + +/** + * Determine if in incoming IP packet is covered by a RAW PCB + * and if so, pass it to a user-provided receive callback function. + * + * Given an incoming IP datagram (as a chain of pbufs) this function + * finds a corresponding RAW PCB and calls the corresponding receive + * callback function. + * + * @param p pbuf to be demultiplexed to a RAW PCB. + * @param inp network interface on which the datagram was received. + * @return - 1 if the packet has been eaten by a RAW PCB receive + * callback function. The caller MAY NOT not reference the + * packet any longer, and MAY NOT call pbuf_free(). + * @return - 0 if packet is not eaten (pbuf is still referenced by the + * caller). + * + */ +raw_input_state_t +raw_input(struct pbuf *p, struct netif *inp) +{ + struct raw_pcb *pcb, *prev; + s16_t proto; + raw_input_state_t ret = RAW_INPUT_NONE; + u8_t broadcast = ip_addr_isbroadcast(ip_current_dest_addr(), ip_current_netif()); + + LWIP_UNUSED_ARG(inp); + +#if LWIP_IPV6 +#if LWIP_IPV4 + if (IP_HDR_GET_VERSION(p->payload) == 6) +#endif /* LWIP_IPV4 */ + { + struct ip6_hdr *ip6hdr = (struct ip6_hdr *)p->payload; + proto = IP6H_NEXTH(ip6hdr); + } +#if LWIP_IPV4 + else +#endif /* LWIP_IPV4 */ +#endif /* LWIP_IPV6 */ +#if LWIP_IPV4 + { + proto = IPH_PROTO((struct ip_hdr *)p->payload); + } +#endif /* LWIP_IPV4 */ + + prev = NULL; + pcb = raw_pcbs; + /* loop through all raw pcbs until the packet is eaten by one */ + /* this allows multiple pcbs to match against the packet by design */ + while (pcb != NULL) { + if ((pcb->protocol == proto) && raw_input_local_match(pcb, broadcast) && + (((pcb->flags & RAW_FLAGS_CONNECTED) == 0) || + ip_addr_cmp(&pcb->remote_ip, ip_current_src_addr()))) { + /* receive callback function available? */ + if (pcb->recv != NULL) { + u8_t eaten; +#ifndef LWIP_NOASSERT + void *old_payload = p->payload; +#endif + ret = RAW_INPUT_DELIVERED; + /* the receive callback function did not eat the packet? */ + eaten = pcb->recv(pcb->recv_arg, pcb, p, ip_current_src_addr()); + if (eaten != 0) { + /* receive function ate the packet */ + p = NULL; + if (prev != NULL) { + /* move the pcb to the front of raw_pcbs so that is + found faster next time */ + prev->next = pcb->next; + pcb->next = raw_pcbs; + raw_pcbs = pcb; + } + return RAW_INPUT_EATEN; + } else { + /* sanity-check that the receive callback did not alter the pbuf */ + LWIP_ASSERT("raw pcb recv callback altered pbuf payload pointer without eating packet", + p->payload == old_payload); + } + } + /* no receive callback function was set for this raw PCB */ + } + /* drop the packet */ + prev = pcb; + pcb = pcb->next; + } + return ret; +} + +/** + * @ingroup raw_raw + * Bind a RAW PCB. + * + * @param pcb RAW PCB to be bound with a local address ipaddr. + * @param ipaddr local IP address to bind with. Use IP4_ADDR_ANY to + * bind to all local interfaces. + * + * @return lwIP error code. + * - ERR_OK. Successful. No error occurred. + * - ERR_USE. The specified IP address is already bound to by + * another RAW PCB. + * + * @see raw_disconnect() + */ +err_t +raw_bind(struct raw_pcb *pcb, const ip_addr_t *ipaddr) +{ + LWIP_ASSERT_CORE_LOCKED(); + if ((pcb == NULL) || (ipaddr == NULL)) { + return ERR_VAL; + } + ip_addr_set_ipaddr(&pcb->local_ip, ipaddr); +#if LWIP_IPV6 && LWIP_IPV6_SCOPES + /* If the given IP address should have a zone but doesn't, assign one now. + * This is legacy support: scope-aware callers should always provide properly + * zoned source addresses. */ + if (IP_IS_V6(&pcb->local_ip) && + ip6_addr_lacks_zone(ip_2_ip6(&pcb->local_ip), IP6_UNKNOWN)) { + ip6_addr_select_zone(ip_2_ip6(&pcb->local_ip), ip_2_ip6(&pcb->local_ip)); + } +#endif /* LWIP_IPV6 && LWIP_IPV6_SCOPES */ + return ERR_OK; +} + +/** + * @ingroup raw_raw + * Bind an RAW PCB to a specific netif. + * After calling this function, all packets received via this PCB + * are guaranteed to have come in via the specified netif, and all + * outgoing packets will go out via the specified netif. + * + * @param pcb RAW PCB to be bound with netif. + * @param netif netif to bind to. Can be NULL. + * + * @see raw_disconnect() + */ +void +raw_bind_netif(struct raw_pcb *pcb, const struct netif *netif) +{ + LWIP_ASSERT_CORE_LOCKED(); + if (netif != NULL) { + pcb->netif_idx = netif_get_index(netif); + } else { + pcb->netif_idx = NETIF_NO_INDEX; + } +} + +/** + * @ingroup raw_raw + * Connect an RAW PCB. This function is required by upper layers + * of lwip. Using the raw api you could use raw_sendto() instead + * + * This will associate the RAW PCB with the remote address. + * + * @param pcb RAW PCB to be connected with remote address ipaddr and port. + * @param ipaddr remote IP address to connect with. + * + * @return lwIP error code + * + * @see raw_disconnect() and raw_sendto() + */ +err_t +raw_connect(struct raw_pcb *pcb, const ip_addr_t *ipaddr) +{ + LWIP_ASSERT_CORE_LOCKED(); + if ((pcb == NULL) || (ipaddr == NULL)) { + return ERR_VAL; + } + ip_addr_set_ipaddr(&pcb->remote_ip, ipaddr); +#if LWIP_IPV6 && LWIP_IPV6_SCOPES + /* If the given IP address should have a zone but doesn't, assign one now, + * using the bound address to make a more informed decision when possible. */ + if (IP_IS_V6(&pcb->remote_ip) && + ip6_addr_lacks_zone(ip_2_ip6(&pcb->remote_ip), IP6_UNKNOWN)) { + ip6_addr_select_zone(ip_2_ip6(&pcb->remote_ip), ip_2_ip6(&pcb->local_ip)); + } +#endif /* LWIP_IPV6 && LWIP_IPV6_SCOPES */ + raw_set_flags(pcb, RAW_FLAGS_CONNECTED); + return ERR_OK; +} + +/** + * @ingroup raw_raw + * Disconnect a RAW PCB. + * + * @param pcb the raw pcb to disconnect. + */ +void +raw_disconnect(struct raw_pcb *pcb) +{ + LWIP_ASSERT_CORE_LOCKED(); + /* reset remote address association */ +#if LWIP_IPV4 && LWIP_IPV6 + if (IP_IS_ANY_TYPE_VAL(pcb->local_ip)) { + ip_addr_copy(pcb->remote_ip, *IP_ANY_TYPE); + } else { +#endif + ip_addr_set_any(IP_IS_V6_VAL(pcb->remote_ip), &pcb->remote_ip); +#if LWIP_IPV4 && LWIP_IPV6 + } +#endif + pcb->netif_idx = NETIF_NO_INDEX; + /* mark PCB as unconnected */ + raw_clear_flags(pcb, RAW_FLAGS_CONNECTED); +} + +/** + * @ingroup raw_raw + * Set the callback function for received packets that match the + * raw PCB's protocol and binding. + * + * The callback function MUST either + * - eat the packet by calling pbuf_free() and returning non-zero. The + * packet will not be passed to other raw PCBs or other protocol layers. + * - not free the packet, and return zero. The packet will be matched + * against further PCBs and/or forwarded to another protocol layers. + */ +void +raw_recv(struct raw_pcb *pcb, raw_recv_fn recv, void *recv_arg) +{ + LWIP_ASSERT_CORE_LOCKED(); + /* remember recv() callback and user data */ + pcb->recv = recv; + pcb->recv_arg = recv_arg; +} + +/** + * @ingroup raw_raw + * Send the raw IP packet to the given address. An IP header will be prepended + * to the packet, unless the RAW_FLAGS_HDRINCL flag is set on the PCB. In that + * case, the packet must include an IP header, which will then be sent as is. + * + * @param pcb the raw pcb which to send + * @param p the IP payload to send + * @param ipaddr the destination address of the IP packet + * + */ +err_t +raw_sendto(struct raw_pcb *pcb, struct pbuf *p, const ip_addr_t *ipaddr) +{ + struct netif *netif; + const ip_addr_t *src_ip; + + if ((pcb == NULL) || (ipaddr == NULL) || !IP_ADDR_PCB_VERSION_MATCH(pcb, ipaddr)) { + return ERR_VAL; + } + + LWIP_DEBUGF(RAW_DEBUG | LWIP_DBG_TRACE, ("raw_sendto\n")); + + if (pcb->netif_idx != NETIF_NO_INDEX) { + netif = netif_get_by_index(pcb->netif_idx); + } else { +#if LWIP_MULTICAST_TX_OPTIONS + netif = NULL; + if (ip_addr_ismulticast(ipaddr)) { + /* For multicast-destined packets, use the user-provided interface index to + * determine the outgoing interface, if an interface index is set and a + * matching netif can be found. Otherwise, fall back to regular routing. */ + netif = netif_get_by_index(pcb->mcast_ifindex); + } + + if (netif == NULL) +#endif /* LWIP_MULTICAST_TX_OPTIONS */ + { + netif = ip_route(&pcb->local_ip, ipaddr); + } + } + + if (netif == NULL) { + LWIP_DEBUGF(RAW_DEBUG | LWIP_DBG_LEVEL_WARNING, ("raw_sendto: No route to ")); + ip_addr_debug_print(RAW_DEBUG | LWIP_DBG_LEVEL_WARNING, ipaddr); + return ERR_RTE; + } + + if (ip_addr_isany(&pcb->local_ip) || ip_addr_ismulticast(&pcb->local_ip)) { + /* use outgoing network interface IP address as source address */ + src_ip = ip_netif_get_local_ip(netif, ipaddr); +#if LWIP_IPV6 + if (src_ip == NULL) { + return ERR_RTE; + } +#endif /* LWIP_IPV6 */ + } else { + /* use RAW PCB local IP address as source address */ + src_ip = &pcb->local_ip; + } + + return raw_sendto_if_src(pcb, p, ipaddr, netif, src_ip); +} + +/** + * @ingroup raw_raw + * Send the raw IP packet to the given address, using a particular outgoing + * netif and source IP address. An IP header will be prepended to the packet, + * unless the RAW_FLAGS_HDRINCL flag is set on the PCB. In that case, the + * packet must include an IP header, which will then be sent as is. + * + * @param pcb RAW PCB used to send the data + * @param p chain of pbufs to be sent + * @param dst_ip destination IP address + * @param netif the netif used for sending + * @param src_ip source IP address + */ +err_t +raw_sendto_if_src(struct raw_pcb *pcb, struct pbuf *p, const ip_addr_t *dst_ip, + struct netif *netif, const ip_addr_t *src_ip) +{ + err_t err; + struct pbuf *q; /* q will be sent down the stack */ + u16_t header_size; + u8_t ttl; + + LWIP_ASSERT_CORE_LOCKED(); + + if ((pcb == NULL) || (dst_ip == NULL) || (netif == NULL) || (src_ip == NULL) || + !IP_ADDR_PCB_VERSION_MATCH(pcb, src_ip) || !IP_ADDR_PCB_VERSION_MATCH(pcb, dst_ip)) { + return ERR_VAL; + } + + header_size = ( +#if LWIP_IPV4 && LWIP_IPV6 + IP_IS_V6(dst_ip) ? IP6_HLEN : IP_HLEN); +#elif LWIP_IPV4 + IP_HLEN); +#else + IP6_HLEN); +#endif + + /* Handle the HDRINCL option as an exception: none of the code below applies + * to this case, and sending the packet needs to be done differently too. */ + if (pcb->flags & RAW_FLAGS_HDRINCL) { + /* A full header *must* be present in the first pbuf of the chain, as the + * output routines may access its fields directly. */ + if (p->len < header_size) { + return ERR_VAL; + } + /* @todo multicast loop support, if at all desired for this scenario.. */ + NETIF_SET_HINTS(netif, &pcb->netif_hints); + err = ip_output_if_hdrincl(p, src_ip, dst_ip, netif); + NETIF_RESET_HINTS(netif); + return err; + } + + /* packet too large to add an IP header without causing an overflow? */ + if ((u16_t)(p->tot_len + header_size) < p->tot_len) { + return ERR_MEM; + } + /* not enough space to add an IP header to first pbuf in given p chain? */ + if (pbuf_add_header(p, header_size)) { + /* allocate header in new pbuf */ + q = pbuf_alloc(PBUF_IP, 0, PBUF_RAM); + /* new header pbuf could not be allocated? */ + if (q == NULL) { + LWIP_DEBUGF(RAW_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("raw_sendto: could not allocate header\n")); + return ERR_MEM; + } + if (p->tot_len != 0) { + /* chain header q in front of given pbuf p */ + pbuf_chain(q, p); + } + /* { first pbuf q points to header pbuf } */ + LWIP_DEBUGF(RAW_DEBUG, ("raw_sendto: added header pbuf %p before given pbuf %p\n", (void *)q, (void *)p)); + } else { + /* first pbuf q equals given pbuf */ + q = p; + if (pbuf_remove_header(q, header_size)) { + LWIP_ASSERT("Can't restore header we just removed!", 0); + return ERR_MEM; + } + } + +#if IP_SOF_BROADCAST + if (IP_IS_V4(dst_ip)) { + /* broadcast filter? */ + if (!ip_get_option(pcb, SOF_BROADCAST) && ip_addr_isbroadcast(dst_ip, netif)) { + LWIP_DEBUGF(RAW_DEBUG | LWIP_DBG_LEVEL_WARNING, ("raw_sendto: SOF_BROADCAST not enabled on pcb %p\n", (void *)pcb)); + /* free any temporary header pbuf allocated by pbuf_header() */ + if (q != p) { + pbuf_free(q); + } + return ERR_VAL; + } + } +#endif /* IP_SOF_BROADCAST */ + + /* Multicast Loop? */ +#if LWIP_MULTICAST_TX_OPTIONS + if (((pcb->flags & RAW_FLAGS_MULTICAST_LOOP) != 0) && ip_addr_ismulticast(dst_ip)) { + q->flags |= PBUF_FLAG_MCASTLOOP; + } +#endif /* LWIP_MULTICAST_TX_OPTIONS */ + +#if LWIP_IPV6 + /* If requested, based on the IPV6_CHECKSUM socket option per RFC3542, + compute the checksum and update the checksum in the payload. */ + if (IP_IS_V6(dst_ip) && pcb->chksum_reqd) { + u16_t chksum = ip6_chksum_pseudo(p, pcb->protocol, p->tot_len, ip_2_ip6(src_ip), ip_2_ip6(dst_ip)); + LWIP_ASSERT("Checksum must fit into first pbuf", p->len >= (pcb->chksum_offset + 2)); + SMEMCPY(((u8_t *)p->payload) + pcb->chksum_offset, &chksum, sizeof(u16_t)); + } +#endif + + /* Determine TTL to use */ +#if LWIP_MULTICAST_TX_OPTIONS + ttl = (ip_addr_ismulticast(dst_ip) ? raw_get_multicast_ttl(pcb) : pcb->ttl); +#else /* LWIP_MULTICAST_TX_OPTIONS */ + ttl = pcb->ttl; +#endif /* LWIP_MULTICAST_TX_OPTIONS */ + + NETIF_SET_HINTS(netif, &pcb->netif_hints); + err = ip_output_if(q, src_ip, dst_ip, ttl, pcb->tos, pcb->protocol, netif); + NETIF_RESET_HINTS(netif); + + /* did we chain a header earlier? */ + if (q != p) { + /* free the header */ + pbuf_free(q); + } + return err; +} + +/** + * @ingroup raw_raw + * Send the raw IP packet to the address given by raw_connect() + * + * @param pcb the raw pcb which to send + * @param p the IP payload to send + * + */ +err_t +raw_send(struct raw_pcb *pcb, struct pbuf *p) +{ + return raw_sendto(pcb, p, &pcb->remote_ip); +} + +/** + * @ingroup raw_raw + * Remove an RAW PCB. + * + * @param pcb RAW PCB to be removed. The PCB is removed from the list of + * RAW PCB's and the data structure is freed from memory. + * + * @see raw_new() + */ +void +raw_remove(struct raw_pcb *pcb) +{ + struct raw_pcb *pcb2; + LWIP_ASSERT_CORE_LOCKED(); + /* pcb to be removed is first in list? */ + if (raw_pcbs == pcb) { + /* make list start at 2nd pcb */ + raw_pcbs = raw_pcbs->next; + /* pcb not 1st in list */ + } else { + for (pcb2 = raw_pcbs; pcb2 != NULL; pcb2 = pcb2->next) { + /* find pcb in raw_pcbs list */ + if (pcb2->next != NULL && pcb2->next == pcb) { + /* remove pcb from list */ + pcb2->next = pcb->next; + break; + } + } + } + memp_free(MEMP_RAW_PCB, pcb); +} + +/** + * @ingroup raw_raw + * Create a RAW PCB. + * + * @return The RAW PCB which was created. NULL if the PCB data structure + * could not be allocated. + * + * @param proto the protocol number of the IPs payload (e.g. IP_PROTO_ICMP) + * + * @see raw_remove() + */ +struct raw_pcb * +raw_new(u8_t proto) +{ + struct raw_pcb *pcb; + + LWIP_DEBUGF(RAW_DEBUG | LWIP_DBG_TRACE, ("raw_new\n")); + LWIP_ASSERT_CORE_LOCKED(); + + pcb = (struct raw_pcb *)memp_malloc(MEMP_RAW_PCB); + /* could allocate RAW PCB? */ + if (pcb != NULL) { + /* initialize PCB to all zeroes */ + memset(pcb, 0, sizeof(struct raw_pcb)); + pcb->protocol = proto; + pcb->ttl = RAW_TTL; +#if LWIP_MULTICAST_TX_OPTIONS + raw_set_multicast_ttl(pcb, RAW_TTL); +#endif /* LWIP_MULTICAST_TX_OPTIONS */ + pcb->next = raw_pcbs; + raw_pcbs = pcb; + } + return pcb; +} + +/** + * @ingroup raw_raw + * Create a RAW PCB for specific IP type. + * + * @return The RAW PCB which was created. NULL if the PCB data structure + * could not be allocated. + * + * @param type IP address type, see @ref lwip_ip_addr_type definitions. + * If you want to listen to IPv4 and IPv6 (dual-stack) packets, + * supply @ref IPADDR_TYPE_ANY as argument and bind to @ref IP_ANY_TYPE. + * @param proto the protocol number (next header) of the IPv6 packet payload + * (e.g. IP6_NEXTH_ICMP6) + * + * @see raw_remove() + */ +struct raw_pcb * +raw_new_ip_type(u8_t type, u8_t proto) +{ + struct raw_pcb *pcb; + LWIP_ASSERT_CORE_LOCKED(); + pcb = raw_new(proto); +#if LWIP_IPV4 && LWIP_IPV6 + if (pcb != NULL) { + IP_SET_TYPE_VAL(pcb->local_ip, type); + IP_SET_TYPE_VAL(pcb->remote_ip, type); + } +#else /* LWIP_IPV4 && LWIP_IPV6 */ + LWIP_UNUSED_ARG(type); +#endif /* LWIP_IPV4 && LWIP_IPV6 */ + return pcb; +} + +/** This function is called from netif.c when address is changed + * + * @param old_addr IP address of the netif before change + * @param new_addr IP address of the netif after change + */ +void raw_netif_ip_addr_changed(const ip_addr_t *old_addr, const ip_addr_t *new_addr) +{ + struct raw_pcb *rpcb; + + if (!ip_addr_isany(old_addr) && !ip_addr_isany(new_addr)) { + for (rpcb = raw_pcbs; rpcb != NULL; rpcb = rpcb->next) { + /* PCB bound to current local interface address? */ + if (ip_addr_cmp(&rpcb->local_ip, old_addr)) { + /* The PCB is bound to the old ipaddr and + * is set to bound to the new one instead */ + ip_addr_copy(rpcb->local_ip, *new_addr); + } + } + } +} + +#endif /* LWIP_RAW */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/stats.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/stats.c new file mode 100644 index 0000000000000000000000000000000000000000..34e9b2709de732c60955c4e65b61f1d30efb9705 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/stats.c @@ -0,0 +1,169 @@ +/** + * @file + * Statistics module + * + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#include "lwip/opt.h" + +#if LWIP_STATS /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/def.h" +#include "lwip/stats.h" +#include "lwip/mem.h" +#include "lwip/debug.h" + +#include + +struct stats_ lwip_stats; + +void +stats_init(void) +{ +#ifdef LWIP_DEBUG +#if MEM_STATS + lwip_stats.mem.name = "MEM"; +#endif /* MEM_STATS */ +#endif /* LWIP_DEBUG */ +} + +#if LWIP_STATS_DISPLAY +void +stats_display_proto(struct stats_proto *proto, const char *name) +{ + LWIP_PLATFORM_DIAG(("\n%s\n\t", name)); + LWIP_PLATFORM_DIAG(("xmit: %"STAT_COUNTER_F"\n\t", proto->xmit)); + LWIP_PLATFORM_DIAG(("recv: %"STAT_COUNTER_F"\n\t", proto->recv)); + LWIP_PLATFORM_DIAG(("fw: %"STAT_COUNTER_F"\n\t", proto->fw)); + LWIP_PLATFORM_DIAG(("drop: %"STAT_COUNTER_F"\n\t", proto->drop)); + LWIP_PLATFORM_DIAG(("chkerr: %"STAT_COUNTER_F"\n\t", proto->chkerr)); + LWIP_PLATFORM_DIAG(("lenerr: %"STAT_COUNTER_F"\n\t", proto->lenerr)); + LWIP_PLATFORM_DIAG(("memerr: %"STAT_COUNTER_F"\n\t", proto->memerr)); + LWIP_PLATFORM_DIAG(("rterr: %"STAT_COUNTER_F"\n\t", proto->rterr)); + LWIP_PLATFORM_DIAG(("proterr: %"STAT_COUNTER_F"\n\t", proto->proterr)); + LWIP_PLATFORM_DIAG(("opterr: %"STAT_COUNTER_F"\n\t", proto->opterr)); + LWIP_PLATFORM_DIAG(("err: %"STAT_COUNTER_F"\n\t", proto->err)); + LWIP_PLATFORM_DIAG(("cachehit: %"STAT_COUNTER_F"\n", proto->cachehit)); +} + +#if IGMP_STATS || MLD6_STATS +void +stats_display_igmp(struct stats_igmp *igmp, const char *name) +{ + LWIP_PLATFORM_DIAG(("\n%s\n\t", name)); + LWIP_PLATFORM_DIAG(("xmit: %"STAT_COUNTER_F"\n\t", igmp->xmit)); + LWIP_PLATFORM_DIAG(("recv: %"STAT_COUNTER_F"\n\t", igmp->recv)); + LWIP_PLATFORM_DIAG(("drop: %"STAT_COUNTER_F"\n\t", igmp->drop)); + LWIP_PLATFORM_DIAG(("chkerr: %"STAT_COUNTER_F"\n\t", igmp->chkerr)); + LWIP_PLATFORM_DIAG(("lenerr: %"STAT_COUNTER_F"\n\t", igmp->lenerr)); + LWIP_PLATFORM_DIAG(("memerr: %"STAT_COUNTER_F"\n\t", igmp->memerr)); + LWIP_PLATFORM_DIAG(("proterr: %"STAT_COUNTER_F"\n\t", igmp->proterr)); + LWIP_PLATFORM_DIAG(("rx_v1: %"STAT_COUNTER_F"\n\t", igmp->rx_v1)); + LWIP_PLATFORM_DIAG(("rx_group: %"STAT_COUNTER_F"\n\t", igmp->rx_group)); + LWIP_PLATFORM_DIAG(("rx_general: %"STAT_COUNTER_F"\n\t", igmp->rx_general)); + LWIP_PLATFORM_DIAG(("rx_report: %"STAT_COUNTER_F"\n\t", igmp->rx_report)); + LWIP_PLATFORM_DIAG(("tx_join: %"STAT_COUNTER_F"\n\t", igmp->tx_join)); + LWIP_PLATFORM_DIAG(("tx_leave: %"STAT_COUNTER_F"\n\t", igmp->tx_leave)); + LWIP_PLATFORM_DIAG(("tx_report: %"STAT_COUNTER_F"\n", igmp->tx_report)); +} +#endif /* IGMP_STATS || MLD6_STATS */ + +#if MEM_STATS || MEMP_STATS +void +stats_display_mem(struct stats_mem *mem, const char *name) +{ + LWIP_PLATFORM_DIAG(("\nMEM %s\n\t", name)); + LWIP_PLATFORM_DIAG(("avail: %"MEM_SIZE_F"\n\t", mem->avail)); + LWIP_PLATFORM_DIAG(("used: %"MEM_SIZE_F"\n\t", mem->used)); + LWIP_PLATFORM_DIAG(("max: %"MEM_SIZE_F"\n\t", mem->max)); + LWIP_PLATFORM_DIAG(("err: %"STAT_COUNTER_F"\n", mem->err)); +} + +#if MEMP_STATS +void +stats_display_memp(struct stats_mem *mem, int idx) +{ + if (idx < MEMP_MAX) { + stats_display_mem(mem, mem->name); + } +} +#endif /* MEMP_STATS */ +#endif /* MEM_STATS || MEMP_STATS */ + +#if SYS_STATS +void +stats_display_sys(struct stats_sys *sys) +{ + LWIP_PLATFORM_DIAG(("\nSYS\n\t")); + LWIP_PLATFORM_DIAG(("sem.used: %"STAT_COUNTER_F"\n\t", sys->sem.used)); + LWIP_PLATFORM_DIAG(("sem.max: %"STAT_COUNTER_F"\n\t", sys->sem.max)); + LWIP_PLATFORM_DIAG(("sem.err: %"STAT_COUNTER_F"\n\t", sys->sem.err)); + LWIP_PLATFORM_DIAG(("mutex.used: %"STAT_COUNTER_F"\n\t", sys->mutex.used)); + LWIP_PLATFORM_DIAG(("mutex.max: %"STAT_COUNTER_F"\n\t", sys->mutex.max)); + LWIP_PLATFORM_DIAG(("mutex.err: %"STAT_COUNTER_F"\n\t", sys->mutex.err)); + LWIP_PLATFORM_DIAG(("mbox.used: %"STAT_COUNTER_F"\n\t", sys->mbox.used)); + LWIP_PLATFORM_DIAG(("mbox.max: %"STAT_COUNTER_F"\n\t", sys->mbox.max)); + LWIP_PLATFORM_DIAG(("mbox.err: %"STAT_COUNTER_F"\n", sys->mbox.err)); +} +#endif /* SYS_STATS */ + +void +stats_display(void) +{ + s16_t i; + + LINK_STATS_DISPLAY(); + ETHARP_STATS_DISPLAY(); + IPFRAG_STATS_DISPLAY(); + IP6_FRAG_STATS_DISPLAY(); + IP_STATS_DISPLAY(); + ND6_STATS_DISPLAY(); + IP6_STATS_DISPLAY(); + IGMP_STATS_DISPLAY(); + MLD6_STATS_DISPLAY(); + ICMP_STATS_DISPLAY(); + ICMP6_STATS_DISPLAY(); + UDP_STATS_DISPLAY(); + TCP_STATS_DISPLAY(); + MEM_STATS_DISPLAY(); + for (i = 0; i < MEMP_MAX; i++) { + MEMP_STATS_DISPLAY(i); + } + SYS_STATS_DISPLAY(); +} +#endif /* LWIP_STATS_DISPLAY */ + +#endif /* LWIP_STATS */ + diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/sys.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/sys.c new file mode 100644 index 0000000000000000000000000000000000000000..5f08352bfb81b3ebf8320c80a3ab5a01f752f2d1 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/sys.c @@ -0,0 +1,148 @@ +/** + * @file + * lwIP Operating System abstraction + * + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +/** + * @defgroup sys_layer Porting (system abstraction layer) + * @ingroup lwip + * + * @defgroup sys_os OS abstraction layer + * @ingroup sys_layer + * No need to implement functions in this section in NO_SYS mode. + * The OS-specific code should be implemented in arch/sys_arch.h + * and sys_arch.c of your port. + * + * The operating system emulation layer provides a common interface + * between the lwIP code and the underlying operating system kernel. The + * general idea is that porting lwIP to new architectures requires only + * small changes to a few header files and a new sys_arch + * implementation. It is also possible to do a sys_arch implementation + * that does not rely on any underlying operating system. + * + * The sys_arch provides semaphores, mailboxes and mutexes to lwIP. For the full + * lwIP functionality, multiple threads support can be implemented in the + * sys_arch, but this is not required for the basic lwIP + * functionality. Timer scheduling is implemented in lwIP, but can be implemented + * by the sys_arch port (LWIP_TIMERS_CUSTOM==1). + * + * In addition to the source file providing the functionality of sys_arch, + * the OS emulation layer must provide several header files defining + * macros used throughout lwip. The files required and the macros they + * must define are listed below the sys_arch description. + * + * Since lwIP 1.4.0, semaphore, mutexes and mailbox functions are prototyped in a way that + * allows both using pointers or actual OS structures to be used. This way, memory + * required for such types can be either allocated in place (globally or on the + * stack) or on the heap (allocated internally in the "*_new()" functions). + * + * Note: + * ----- + * Be careful with using mem_malloc() in sys_arch. When malloc() refers to + * mem_malloc() you can run into a circular function call problem. In mem.c + * mem_init() tries to allocate a semaphore using mem_malloc, which of course + * can't be performed when sys_arch uses mem_malloc. + * + * @defgroup sys_sem Semaphores + * @ingroup sys_os + * Semaphores can be either counting or binary - lwIP works with both + * kinds. + * Semaphores are represented by the type "sys_sem_t" which is typedef'd + * in the sys_arch.h file. Mailboxes are equivalently represented by the + * type "sys_mbox_t". Mutexes are represented by the type "sys_mutex_t". + * lwIP does not place any restrictions on how these types are represented + * internally. + * + * @defgroup sys_mutex Mutexes + * @ingroup sys_os + * Mutexes are recommended to correctly handle priority inversion, + * especially if you use LWIP_CORE_LOCKING . + * + * @defgroup sys_mbox Mailboxes + * @ingroup sys_os + * Mailboxes should be implemented as a queue which allows multiple messages + * to be posted (implementing as a rendez-vous point where only one message can be + * posted at a time can have a highly negative impact on performance). A message + * in a mailbox is just a pointer, nothing more. + * + * @defgroup sys_time Time + * @ingroup sys_layer + * + * @defgroup sys_prot Critical sections + * @ingroup sys_layer + * Used to protect short regions of code against concurrent access. + * - Your system is a bare-metal system (probably with an RTOS) + * and interrupts are under your control: + * Implement this as LockInterrupts() / UnlockInterrupts() + * - Your system uses an RTOS with deferred interrupt handling from a + * worker thread: Implement as a global mutex or lock/unlock scheduler + * - Your system uses a high-level OS with e.g. POSIX signals: + * Implement as a global mutex + * + * @defgroup sys_misc Misc + * @ingroup sys_os + */ + +#include "lwip/opt.h" + +#include "lwip/sys.h" + +/* Most of the functions defined in sys.h must be implemented in the + * architecture-dependent file sys_arch.c */ + +#if !NO_SYS + +#ifndef sys_msleep +/** + * Sleep for some ms. Timeouts are NOT processed while sleeping. + * + * @param ms number of milliseconds to sleep + */ +void +sys_msleep(u32_t ms) +{ + if (ms > 0) { + sys_sem_t delaysem; + err_t err = sys_sem_new(&delaysem, 0); + if (err == ERR_OK) { + sys_arch_sem_wait(&delaysem, ms); + sys_sem_free(&delaysem); + } + } +} +#endif /* sys_msleep */ + +#endif /* !NO_SYS */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/tcp.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/tcp.c new file mode 100644 index 0000000000000000000000000000000000000000..bd7d64ec393978e2799c5886826d6b23a9cac2fe --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/tcp.c @@ -0,0 +1,2686 @@ +/** + * @file + * Transmission Control Protocol for IP + * See also @ref tcp_raw + * + * @defgroup tcp_raw TCP + * @ingroup callbackstyle_api + * Transmission Control Protocol for IP\n + * @see @ref api + * + * Common functions for the TCP implementation, such as functions + * for manipulating the data structures and the TCP timer functions. TCP functions + * related to input and output is found in tcp_in.c and tcp_out.c respectively.\n + * + * TCP connection setup + * -------------------- + * The functions used for setting up connections is similar to that of + * the sequential API and of the BSD socket API. A new TCP connection + * identifier (i.e., a protocol control block - PCB) is created with the + * tcp_new() function. This PCB can then be either set to listen for new + * incoming connections or be explicitly connected to another host. + * - tcp_new() + * - tcp_bind() + * - tcp_listen() and tcp_listen_with_backlog() + * - tcp_accept() + * - tcp_connect() + * + * Sending TCP data + * ---------------- + * TCP data is sent by enqueueing the data with a call to tcp_write() and + * triggering to send by calling tcp_output(). When the data is successfully + * transmitted to the remote host, the application will be notified with a + * call to a specified callback function. + * - tcp_write() + * - tcp_output() + * - tcp_sent() + * + * Receiving TCP data + * ------------------ + * TCP data reception is callback based - an application specified + * callback function is called when new data arrives. When the + * application has taken the data, it has to call the tcp_recved() + * function to indicate that TCP can advertise increase the receive + * window. + * - tcp_recv() + * - tcp_recved() + * + * Application polling + * ------------------- + * When a connection is idle (i.e., no data is either transmitted or + * received), lwIP will repeatedly poll the application by calling a + * specified callback function. This can be used either as a watchdog + * timer for killing connections that have stayed idle for too long, or + * as a method of waiting for memory to become available. For instance, + * if a call to tcp_write() has failed because memory wasn't available, + * the application may use the polling functionality to call tcp_write() + * again when the connection has been idle for a while. + * - tcp_poll() + * + * Closing and aborting connections + * -------------------------------- + * - tcp_close() + * - tcp_abort() + * - tcp_err() + * + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#include "lwip/opt.h" + +#if LWIP_TCP /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/def.h" +#include "lwip/mem.h" +#include "lwip/memp.h" +#include "lwip/tcp.h" +#include "lwip/priv/tcp_priv.h" +#include "lwip/debug.h" +#include "lwip/stats.h" +#include "lwip/ip6.h" +#include "lwip/ip6_addr.h" +#include "lwip/nd6.h" + +#include + +#ifdef LWIP_HOOK_FILENAME +#include LWIP_HOOK_FILENAME +#endif + +#ifndef TCP_LOCAL_PORT_RANGE_START +/* From http://www.iana.org/assignments/port-numbers: + "The Dynamic and/or Private Ports are those from 49152 through 65535" */ +#define TCP_LOCAL_PORT_RANGE_START 0xc000 +#define TCP_LOCAL_PORT_RANGE_END 0xffff +#define TCP_ENSURE_LOCAL_PORT_RANGE(port) ((u16_t)(((port) & (u16_t)~TCP_LOCAL_PORT_RANGE_START) + TCP_LOCAL_PORT_RANGE_START)) +#endif + +#if LWIP_TCP_KEEPALIVE +#define TCP_KEEP_DUR(pcb) ((pcb)->keep_cnt * (pcb)->keep_intvl) +#define TCP_KEEP_INTVL(pcb) ((pcb)->keep_intvl) +#else /* LWIP_TCP_KEEPALIVE */ +#define TCP_KEEP_DUR(pcb) TCP_MAXIDLE +#define TCP_KEEP_INTVL(pcb) TCP_KEEPINTVL_DEFAULT +#endif /* LWIP_TCP_KEEPALIVE */ + +/* As initial send MSS, we use TCP_MSS but limit it to 536. */ +#if TCP_MSS > 536 +#define INITIAL_MSS 536 +#else +#define INITIAL_MSS TCP_MSS +#endif + +static const char *const tcp_state_str[] = { + "CLOSED", + "LISTEN", + "SYN_SENT", + "SYN_RCVD", + "ESTABLISHED", + "FIN_WAIT_1", + "FIN_WAIT_2", + "CLOSE_WAIT", + "CLOSING", + "LAST_ACK", + "TIME_WAIT" +}; + +/* last local TCP port */ +static u16_t tcp_port = TCP_LOCAL_PORT_RANGE_START; + +/* Incremented every coarse grained timer shot (typically every 500 ms). */ +u32_t tcp_ticks; +static const u8_t tcp_backoff[13] = +{ 1, 2, 3, 4, 5, 6, 7, 7, 7, 7, 7, 7, 7}; +/* Times per slowtmr hits */ +static const u8_t tcp_persist_backoff[7] = { 3, 6, 12, 24, 48, 96, 120 }; + +/* The TCP PCB lists. */ + +/** List of all TCP PCBs bound but not yet (connected || listening) */ +struct tcp_pcb *tcp_bound_pcbs; +/** List of all TCP PCBs in LISTEN state */ +union tcp_listen_pcbs_t tcp_listen_pcbs; +/** List of all TCP PCBs that are in a state in which + * they accept or send data. */ +struct tcp_pcb *tcp_active_pcbs; +/** List of all TCP PCBs in TIME-WAIT state */ +struct tcp_pcb *tcp_tw_pcbs; + +/** An array with all (non-temporary) PCB lists, mainly used for smaller code size */ +struct tcp_pcb **const tcp_pcb_lists[] = {&tcp_listen_pcbs.pcbs, &tcp_bound_pcbs, + &tcp_active_pcbs, &tcp_tw_pcbs +}; + +u8_t tcp_active_pcbs_changed; + +/** Timer counter to handle calling slow-timer from tcp_tmr() */ +static u8_t tcp_timer; +static u8_t tcp_timer_ctr; +static u16_t tcp_new_port(void); + +static err_t tcp_close_shutdown_fin(struct tcp_pcb *pcb); +#if LWIP_TCP_PCB_NUM_EXT_ARGS +static void tcp_ext_arg_invoke_callbacks_destroyed(struct tcp_pcb_ext_args *ext_args); +#endif + +/** + * Initialize this module. + */ +void +tcp_init(void) +{ +#ifdef LWIP_RAND + tcp_port = TCP_ENSURE_LOCAL_PORT_RANGE(LWIP_RAND()); +#endif /* LWIP_RAND */ +} + +/** Free a tcp pcb */ +void +tcp_free(struct tcp_pcb *pcb) +{ + LWIP_ASSERT("tcp_free: LISTEN", pcb->state != LISTEN); +#if LWIP_TCP_PCB_NUM_EXT_ARGS + tcp_ext_arg_invoke_callbacks_destroyed(pcb->ext_args); +#endif + memp_free(MEMP_TCP_PCB, pcb); +} + +/** Free a tcp listen pcb */ +static void +tcp_free_listen(struct tcp_pcb *pcb) +{ + LWIP_ASSERT("tcp_free_listen: !LISTEN", pcb->state != LISTEN); +#if LWIP_TCP_PCB_NUM_EXT_ARGS + tcp_ext_arg_invoke_callbacks_destroyed(pcb->ext_args); +#endif + memp_free(MEMP_TCP_PCB_LISTEN, pcb); +} + +/** + * Called periodically to dispatch TCP timers. + */ +void +tcp_tmr(void) +{ + /* Call tcp_fasttmr() every 250 ms */ + tcp_fasttmr(); + + if (++tcp_timer & 1) { + /* Call tcp_slowtmr() every 500 ms, i.e., every other timer + tcp_tmr() is called. */ + tcp_slowtmr(); + } +} + +#if LWIP_CALLBACK_API || TCP_LISTEN_BACKLOG +/** Called when a listen pcb is closed. Iterates one pcb list and removes the + * closed listener pcb from pcb->listener if matching. + */ +static void +tcp_remove_listener(struct tcp_pcb *list, struct tcp_pcb_listen *lpcb) +{ + struct tcp_pcb *pcb; + + LWIP_ASSERT("tcp_remove_listener: invalid listener", lpcb != NULL); + + for (pcb = list; pcb != NULL; pcb = pcb->next) { + if (pcb->listener == lpcb) { + pcb->listener = NULL; + } + } +} +#endif + +/** Called when a listen pcb is closed. Iterates all pcb lists and removes the + * closed listener pcb from pcb->listener if matching. + */ +static void +tcp_listen_closed(struct tcp_pcb *pcb) +{ +#if LWIP_CALLBACK_API || TCP_LISTEN_BACKLOG + size_t i; + LWIP_ASSERT("pcb != NULL", pcb != NULL); + LWIP_ASSERT("pcb->state == LISTEN", pcb->state == LISTEN); + for (i = 1; i < LWIP_ARRAYSIZE(tcp_pcb_lists); i++) { + tcp_remove_listener(*tcp_pcb_lists[i], (struct tcp_pcb_listen *)pcb); + } +#endif + LWIP_UNUSED_ARG(pcb); +} + +#if TCP_LISTEN_BACKLOG +/** @ingroup tcp_raw + * Delay accepting a connection in respect to the listen backlog: + * the number of outstanding connections is increased until + * tcp_backlog_accepted() is called. + * + * ATTENTION: the caller is responsible for calling tcp_backlog_accepted() + * or else the backlog feature will get out of sync! + * + * @param pcb the connection pcb which is not fully accepted yet + */ +void +tcp_backlog_delayed(struct tcp_pcb *pcb) +{ + LWIP_ASSERT("pcb != NULL", pcb != NULL); + LWIP_ASSERT_CORE_LOCKED(); + if ((pcb->flags & TF_BACKLOGPEND) == 0) { + if (pcb->listener != NULL) { + pcb->listener->accepts_pending++; + LWIP_ASSERT("accepts_pending != 0", pcb->listener->accepts_pending != 0); + tcp_set_flags(pcb, TF_BACKLOGPEND); + } + } +} + +/** @ingroup tcp_raw + * A delayed-accept a connection is accepted (or closed/aborted): decreases + * the number of outstanding connections after calling tcp_backlog_delayed(). + * + * ATTENTION: the caller is responsible for calling tcp_backlog_accepted() + * or else the backlog feature will get out of sync! + * + * @param pcb the connection pcb which is now fully accepted (or closed/aborted) + */ +void +tcp_backlog_accepted(struct tcp_pcb *pcb) +{ + LWIP_ASSERT("pcb != NULL", pcb != NULL); + LWIP_ASSERT_CORE_LOCKED(); + if ((pcb->flags & TF_BACKLOGPEND) != 0) { + if (pcb->listener != NULL) { + LWIP_ASSERT("accepts_pending != 0", pcb->listener->accepts_pending != 0); + pcb->listener->accepts_pending--; + tcp_clear_flags(pcb, TF_BACKLOGPEND); + } + } +} +#endif /* TCP_LISTEN_BACKLOG */ + +/** + * Closes the TX side of a connection held by the PCB. + * For tcp_close(), a RST is sent if the application didn't receive all data + * (tcp_recved() not called for all data passed to recv callback). + * + * Listening pcbs are freed and may not be referenced any more. + * Connection pcbs are freed if not yet connected and may not be referenced + * any more. If a connection is established (at least SYN received or in + * a closing state), the connection is closed, and put in a closing state. + * The pcb is then automatically freed in tcp_slowtmr(). It is therefore + * unsafe to reference it. + * + * @param pcb the tcp_pcb to close + * @return ERR_OK if connection has been closed + * another err_t if closing failed and pcb is not freed + */ +static err_t +tcp_close_shutdown(struct tcp_pcb *pcb, u8_t rst_on_unacked_data) +{ + LWIP_ASSERT("tcp_close_shutdown: invalid pcb", pcb != NULL); + + if (rst_on_unacked_data && ((pcb->state == ESTABLISHED) || (pcb->state == CLOSE_WAIT))) { + if ((pcb->refused_data != NULL) || (pcb->rcv_wnd != TCP_WND_MAX(pcb))) { + /* Not all data received by application, send RST to tell the remote + side about this. */ + LWIP_ASSERT("pcb->flags & TF_RXCLOSED", pcb->flags & TF_RXCLOSED); + + /* don't call tcp_abort here: we must not deallocate the pcb since + that might not be expected when calling tcp_close */ + tcp_rst(pcb, pcb->snd_nxt, pcb->rcv_nxt, &pcb->local_ip, &pcb->remote_ip, + pcb->local_port, pcb->remote_port); + + tcp_pcb_purge(pcb); + TCP_RMV_ACTIVE(pcb); + /* Deallocate the pcb since we already sent a RST for it */ + if (tcp_input_pcb == pcb) { + /* prevent using a deallocated pcb: free it from tcp_input later */ + tcp_trigger_input_pcb_close(); + } else { + tcp_free(pcb); + } + return ERR_OK; + } + } + + /* - states which free the pcb are handled here, + - states which send FIN and change state are handled in tcp_close_shutdown_fin() */ + switch (pcb->state) { + case CLOSED: + /* Closing a pcb in the CLOSED state might seem erroneous, + * however, it is in this state once allocated and as yet unused + * and the user needs some way to free it should the need arise. + * Calling tcp_close() with a pcb that has already been closed, (i.e. twice) + * or for a pcb that has been used and then entered the CLOSED state + * is erroneous, but this should never happen as the pcb has in those cases + * been freed, and so any remaining handles are bogus. */ + if (pcb->local_port != 0) { + TCP_RMV(&tcp_bound_pcbs, pcb); + } + tcp_free(pcb); + break; + case LISTEN: + tcp_listen_closed(pcb); + tcp_pcb_remove(&tcp_listen_pcbs.pcbs, pcb); + tcp_free_listen(pcb); + break; + case SYN_SENT: + TCP_PCB_REMOVE_ACTIVE(pcb); + tcp_free(pcb); + MIB2_STATS_INC(mib2.tcpattemptfails); + break; + default: + return tcp_close_shutdown_fin(pcb); + } + return ERR_OK; +} + +static err_t +tcp_close_shutdown_fin(struct tcp_pcb *pcb) +{ + err_t err; + LWIP_ASSERT("pcb != NULL", pcb != NULL); + + switch (pcb->state) { + case SYN_RCVD: + err = tcp_send_fin(pcb); + if (err == ERR_OK) { + tcp_backlog_accepted(pcb); + MIB2_STATS_INC(mib2.tcpattemptfails); + pcb->state = FIN_WAIT_1; + } + break; + case ESTABLISHED: + err = tcp_send_fin(pcb); + if (err == ERR_OK) { + MIB2_STATS_INC(mib2.tcpestabresets); + pcb->state = FIN_WAIT_1; + } + break; + case CLOSE_WAIT: + err = tcp_send_fin(pcb); + if (err == ERR_OK) { + MIB2_STATS_INC(mib2.tcpestabresets); + pcb->state = LAST_ACK; + } + break; + default: + /* Has already been closed, do nothing. */ + return ERR_OK; + } + + if (err == ERR_OK) { + /* To ensure all data has been sent when tcp_close returns, we have + to make sure tcp_output doesn't fail. + Since we don't really have to ensure all data has been sent when tcp_close + returns (unsent data is sent from tcp timer functions, also), we don't care + for the return value of tcp_output for now. */ + tcp_output(pcb); + } else if (err == ERR_MEM) { + /* Mark this pcb for closing. Closing is retried from tcp_tmr. */ + tcp_set_flags(pcb, TF_CLOSEPEND); + /* We have to return ERR_OK from here to indicate to the callers that this + pcb should not be used any more as it will be freed soon via tcp_tmr. + This is OK here since sending FIN does not guarantee a time frime for + actually freeing the pcb, either (it is left in closure states for + remote ACK or timeout) */ + return ERR_OK; + } + return err; +} + +/** + * @ingroup tcp_raw + * Closes the connection held by the PCB. + * + * Listening pcbs are freed and may not be referenced any more. + * Connection pcbs are freed if not yet connected and may not be referenced + * any more. If a connection is established (at least SYN received or in + * a closing state), the connection is closed, and put in a closing state. + * The pcb is then automatically freed in tcp_slowtmr(). It is therefore + * unsafe to reference it (unless an error is returned). + * + * The function may return ERR_MEM if no memory + * was available for closing the connection. If so, the application + * should wait and try again either by using the acknowledgment + * callback or the polling functionality. If the close succeeds, the + * function returns ERR_OK. + * + * @param pcb the tcp_pcb to close + * @return ERR_OK if connection has been closed + * another err_t if closing failed and pcb is not freed + */ +err_t +tcp_close(struct tcp_pcb *pcb) +{ + LWIP_ASSERT_CORE_LOCKED(); + + LWIP_ERROR("tcp_close: invalid pcb", pcb != NULL, return ERR_ARG); + LWIP_DEBUGF(TCP_DEBUG, ("tcp_close: closing in ")); + + tcp_debug_print_state(pcb->state); + + if (pcb->state != LISTEN) { + /* Set a flag not to receive any more data... */ + tcp_set_flags(pcb, TF_RXCLOSED); + } + /* ... and close */ + return tcp_close_shutdown(pcb, 1); +} + +/** + * @ingroup tcp_raw + * Causes all or part of a full-duplex connection of this PCB to be shut down. + * This doesn't deallocate the PCB unless shutting down both sides! + * Shutting down both sides is the same as calling tcp_close, so if it succeds + * (i.e. returns ER_OK), the PCB must not be referenced any more! + * + * @param pcb PCB to shutdown + * @param shut_rx shut down receive side if this is != 0 + * @param shut_tx shut down send side if this is != 0 + * @return ERR_OK if shutdown succeeded (or the PCB has already been shut down) + * another err_t on error. + */ +err_t +tcp_shutdown(struct tcp_pcb *pcb, int shut_rx, int shut_tx) +{ + LWIP_ASSERT_CORE_LOCKED(); + + LWIP_ERROR("tcp_shutdown: invalid pcb", pcb != NULL, return ERR_ARG); + + if (pcb->state == LISTEN) { + return ERR_CONN; + } + if (shut_rx) { + /* shut down the receive side: set a flag not to receive any more data... */ + tcp_set_flags(pcb, TF_RXCLOSED); + if (shut_tx) { + /* shutting down the tx AND rx side is the same as closing for the raw API */ + return tcp_close_shutdown(pcb, 1); + } + /* ... and free buffered data */ + if (pcb->refused_data != NULL) { + pbuf_free(pcb->refused_data); + pcb->refused_data = NULL; + } + } + if (shut_tx) { + /* This can't happen twice since if it succeeds, the pcb's state is changed. + Only close in these states as the others directly deallocate the PCB */ + switch (pcb->state) { + case SYN_RCVD: + case ESTABLISHED: + case CLOSE_WAIT: + return tcp_close_shutdown(pcb, (u8_t)shut_rx); + default: + /* Not (yet?) connected, cannot shutdown the TX side as that would bring us + into CLOSED state, where the PCB is deallocated. */ + return ERR_CONN; + } + } + return ERR_OK; +} + +/** + * Abandons a connection and optionally sends a RST to the remote + * host. Deletes the local protocol control block. This is done when + * a connection is killed because of shortage of memory. + * + * @param pcb the tcp_pcb to abort + * @param reset boolean to indicate whether a reset should be sent + */ +void +tcp_abandon(struct tcp_pcb *pcb, int reset) +{ + u32_t seqno, ackno; +#if LWIP_CALLBACK_API + tcp_err_fn errf; +#endif /* LWIP_CALLBACK_API */ + void *errf_arg; + + LWIP_ASSERT_CORE_LOCKED(); + + LWIP_ERROR("tcp_abandon: invalid pcb", pcb != NULL, return); + + /* pcb->state LISTEN not allowed here */ + LWIP_ASSERT("don't call tcp_abort/tcp_abandon for listen-pcbs", + pcb->state != LISTEN); + /* Figure out on which TCP PCB list we are, and remove us. If we + are in an active state, call the receive function associated with + the PCB with a NULL argument, and send an RST to the remote end. */ + if (pcb->state == TIME_WAIT) { + tcp_pcb_remove(&tcp_tw_pcbs, pcb); + tcp_free(pcb); + } else { + int send_rst = 0; + u16_t local_port = 0; + enum tcp_state last_state; + seqno = pcb->snd_nxt; + ackno = pcb->rcv_nxt; +#if LWIP_CALLBACK_API + errf = pcb->errf; +#endif /* LWIP_CALLBACK_API */ + errf_arg = pcb->callback_arg; + if (pcb->state == CLOSED) { + if (pcb->local_port != 0) { + /* bound, not yet opened */ + TCP_RMV(&tcp_bound_pcbs, pcb); + } + } else { + send_rst = reset; + local_port = pcb->local_port; + TCP_PCB_REMOVE_ACTIVE(pcb); + } + if (pcb->unacked != NULL) { + tcp_segs_free(pcb->unacked); + } + if (pcb->unsent != NULL) { + tcp_segs_free(pcb->unsent); + } +#if TCP_QUEUE_OOSEQ + if (pcb->ooseq != NULL) { + tcp_segs_free(pcb->ooseq); + } +#endif /* TCP_QUEUE_OOSEQ */ + tcp_backlog_accepted(pcb); + if (send_rst) { + LWIP_DEBUGF(TCP_RST_DEBUG, ("tcp_abandon: sending RST\n")); + tcp_rst(pcb, seqno, ackno, &pcb->local_ip, &pcb->remote_ip, local_port, pcb->remote_port); + } + last_state = pcb->state; + tcp_free(pcb); + TCP_EVENT_ERR(last_state, errf, errf_arg, ERR_ABRT); + } +} + +/** + * @ingroup tcp_raw + * Aborts the connection by sending a RST (reset) segment to the remote + * host. The pcb is deallocated. This function never fails. + * + * ATTENTION: When calling this from one of the TCP callbacks, make + * sure you always return ERR_ABRT (and never return ERR_ABRT otherwise + * or you will risk accessing deallocated memory or memory leaks! + * + * @param pcb the tcp pcb to abort + */ +void +tcp_abort(struct tcp_pcb *pcb) +{ + tcp_abandon(pcb, 1); +} + +/** + * @ingroup tcp_raw + * Binds the connection to a local port number and IP address. If the + * IP address is not given (i.e., ipaddr == IP_ANY_TYPE), the connection is + * bound to all local IP addresses. + * If another connection is bound to the same port, the function will + * return ERR_USE, otherwise ERR_OK is returned. + * + * @param pcb the tcp_pcb to bind (no check is done whether this pcb is + * already bound!) + * @param ipaddr the local ip address to bind to (use IPx_ADDR_ANY to bind + * to any local address + * @param port the local port to bind to + * @return ERR_USE if the port is already in use + * ERR_VAL if bind failed because the PCB is not in a valid state + * ERR_OK if bound + */ +err_t +tcp_bind(struct tcp_pcb *pcb, const ip_addr_t *ipaddr, u16_t port) +{ + int i; + int max_pcb_list = NUM_TCP_PCB_LISTS; + struct tcp_pcb *cpcb; +#if LWIP_IPV6 && LWIP_IPV6_SCOPES + ip_addr_t zoned_ipaddr; +#endif /* LWIP_IPV6 && LWIP_IPV6_SCOPES */ + + LWIP_ASSERT_CORE_LOCKED(); + +#if LWIP_IPV4 + /* Don't propagate NULL pointer (IPv4 ANY) to subsequent functions */ + if (ipaddr == NULL) { + ipaddr = IP4_ADDR_ANY; + } +#else /* LWIP_IPV4 */ + LWIP_ERROR("tcp_bind: invalid ipaddr", ipaddr != NULL, return ERR_ARG); +#endif /* LWIP_IPV4 */ + + LWIP_ERROR("tcp_bind: invalid pcb", pcb != NULL, return ERR_ARG); + + LWIP_ERROR("tcp_bind: can only bind in state CLOSED", pcb->state == CLOSED, return ERR_VAL); + +#if SO_REUSE + /* Unless the REUSEADDR flag is set, + we have to check the pcbs in TIME-WAIT state, also. + We do not dump TIME_WAIT pcb's; they can still be matched by incoming + packets using both local and remote IP addresses and ports to distinguish. + */ + if (ip_get_option(pcb, SOF_REUSEADDR)) { + max_pcb_list = NUM_TCP_PCB_LISTS_NO_TIME_WAIT; + } +#endif /* SO_REUSE */ + +#if LWIP_IPV6 && LWIP_IPV6_SCOPES + /* If the given IP address should have a zone but doesn't, assign one now. + * This is legacy support: scope-aware callers should always provide properly + * zoned source addresses. Do the zone selection before the address-in-use + * check below; as such we have to make a temporary copy of the address. */ + if (IP_IS_V6(ipaddr) && ip6_addr_lacks_zone(ip_2_ip6(ipaddr), IP6_UNICAST)) { + ip_addr_copy(zoned_ipaddr, *ipaddr); + ip6_addr_select_zone(ip_2_ip6(&zoned_ipaddr), ip_2_ip6(&zoned_ipaddr)); + ipaddr = &zoned_ipaddr; + } +#endif /* LWIP_IPV6 && LWIP_IPV6_SCOPES */ + + if (port == 0) { + port = tcp_new_port(); + if (port == 0) { + return ERR_BUF; + } + } else { + /* Check if the address already is in use (on all lists) */ + for (i = 0; i < max_pcb_list; i++) { + for (cpcb = *tcp_pcb_lists[i]; cpcb != NULL; cpcb = cpcb->next) { + if (cpcb->local_port == port) { +#if SO_REUSE + /* Omit checking for the same port if both pcbs have REUSEADDR set. + For SO_REUSEADDR, the duplicate-check for a 5-tuple is done in + tcp_connect. */ + if (!ip_get_option(pcb, SOF_REUSEADDR) || + !ip_get_option(cpcb, SOF_REUSEADDR)) +#endif /* SO_REUSE */ + { + /* @todo: check accept_any_ip_version */ + if ((IP_IS_V6(ipaddr) == IP_IS_V6_VAL(cpcb->local_ip)) && + (ip_addr_isany(&cpcb->local_ip) || + ip_addr_isany(ipaddr) || + ip_addr_cmp(&cpcb->local_ip, ipaddr))) { + return ERR_USE; + } + } + } + } + } + } + + if (!ip_addr_isany(ipaddr) +#if LWIP_IPV4 && LWIP_IPV6 + || (IP_GET_TYPE(ipaddr) != IP_GET_TYPE(&pcb->local_ip)) +#endif /* LWIP_IPV4 && LWIP_IPV6 */ + ) { + ip_addr_set(&pcb->local_ip, ipaddr); + } + pcb->local_port = port; + TCP_REG(&tcp_bound_pcbs, pcb); + LWIP_DEBUGF(TCP_DEBUG, ("tcp_bind: bind to port %"U16_F"\n", port)); + return ERR_OK; +} + +/** + * @ingroup tcp_raw + * Binds the connection to a netif and IP address. + * After calling this function, all packets received via this PCB + * are guaranteed to have come in via the specified netif, and all + * outgoing packets will go out via the specified netif. + * + * @param pcb the tcp_pcb to bind. + * @param netif the netif to bind to. Can be NULL. + */ +void +tcp_bind_netif(struct tcp_pcb *pcb, const struct netif *netif) +{ + LWIP_ASSERT_CORE_LOCKED(); + if (netif != NULL) { + pcb->netif_idx = netif_get_index(netif); + } else { + pcb->netif_idx = NETIF_NO_INDEX; + } +} + +#if LWIP_CALLBACK_API +/** + * Default accept callback if no accept callback is specified by the user. + */ +static err_t +tcp_accept_null(void *arg, struct tcp_pcb *pcb, err_t err) +{ + LWIP_UNUSED_ARG(arg); + LWIP_UNUSED_ARG(err); + + LWIP_ASSERT("tcp_accept_null: invalid pcb", pcb != NULL); + + tcp_abort(pcb); + + return ERR_ABRT; +} +#endif /* LWIP_CALLBACK_API */ + +/** + * @ingroup tcp_raw + * Set the state of the connection to be LISTEN, which means that it + * is able to accept incoming connections. The protocol control block + * is reallocated in order to consume less memory. Setting the + * connection to LISTEN is an irreversible process. + * When an incoming connection is accepted, the function specified with + * the tcp_accept() function will be called. The pcb has to be bound + * to a local port with the tcp_bind() function. + * + * The tcp_listen() function returns a new connection identifier, and + * the one passed as an argument to the function will be + * deallocated. The reason for this behavior is that less memory is + * needed for a connection that is listening, so tcp_listen() will + * reclaim the memory needed for the original connection and allocate a + * new smaller memory block for the listening connection. + * + * tcp_listen() may return NULL if no memory was available for the + * listening connection. If so, the memory associated with the pcb + * passed as an argument to tcp_listen() will not be deallocated. + * + * The backlog limits the number of outstanding connections + * in the listen queue to the value specified by the backlog argument. + * To use it, your need to set TCP_LISTEN_BACKLOG=1 in your lwipopts.h. + * + * @param pcb the original tcp_pcb + * @param backlog the incoming connections queue limit + * @return tcp_pcb used for listening, consumes less memory. + * + * @note The original tcp_pcb is freed. This function therefore has to be + * called like this: + * tpcb = tcp_listen_with_backlog(tpcb, backlog); + */ +struct tcp_pcb * +tcp_listen_with_backlog(struct tcp_pcb *pcb, u8_t backlog) +{ + LWIP_ASSERT_CORE_LOCKED(); + return tcp_listen_with_backlog_and_err(pcb, backlog, NULL); +} + +/** + * @ingroup tcp_raw + * Set the state of the connection to be LISTEN, which means that it + * is able to accept incoming connections. The protocol control block + * is reallocated in order to consume less memory. Setting the + * connection to LISTEN is an irreversible process. + * + * @param pcb the original tcp_pcb + * @param backlog the incoming connections queue limit + * @param err when NULL is returned, this contains the error reason + * @return tcp_pcb used for listening, consumes less memory. + * + * @note The original tcp_pcb is freed. This function therefore has to be + * called like this: + * tpcb = tcp_listen_with_backlog_and_err(tpcb, backlog, &err); + */ +struct tcp_pcb * +tcp_listen_with_backlog_and_err(struct tcp_pcb *pcb, u8_t backlog, err_t *err) +{ + struct tcp_pcb_listen *lpcb = NULL; + err_t res; + + LWIP_UNUSED_ARG(backlog); + + LWIP_ASSERT_CORE_LOCKED(); + + LWIP_ERROR("tcp_listen_with_backlog_and_err: invalid pcb", pcb != NULL, res = ERR_ARG; goto done); + LWIP_ERROR("tcp_listen_with_backlog_and_err: pcb already connected", pcb->state == CLOSED, res = ERR_CLSD; goto done); + + /* already listening? */ + if (pcb->state == LISTEN) { + lpcb = (struct tcp_pcb_listen *)pcb; + res = ERR_ALREADY; + goto done; + } +#if SO_REUSE + if (ip_get_option(pcb, SOF_REUSEADDR)) { + /* Since SOF_REUSEADDR allows reusing a local address before the pcb's usage + is declared (listen-/connection-pcb), we have to make sure now that + this port is only used once for every local IP. */ + for (lpcb = tcp_listen_pcbs.listen_pcbs; lpcb != NULL; lpcb = lpcb->next) { + if ((lpcb->local_port == pcb->local_port) && + ip_addr_cmp(&lpcb->local_ip, &pcb->local_ip)) { + /* this address/port is already used */ + lpcb = NULL; + res = ERR_USE; + goto done; + } + } + } +#endif /* SO_REUSE */ + lpcb = (struct tcp_pcb_listen *)memp_malloc(MEMP_TCP_PCB_LISTEN); + if (lpcb == NULL) { + res = ERR_MEM; + goto done; + } + lpcb->callback_arg = pcb->callback_arg; + lpcb->local_port = pcb->local_port; + lpcb->state = LISTEN; + lpcb->prio = pcb->prio; + lpcb->so_options = pcb->so_options; + lpcb->netif_idx = NETIF_NO_INDEX; + lpcb->ttl = pcb->ttl; + lpcb->tos = pcb->tos; +#if LWIP_IPV4 && LWIP_IPV6 + IP_SET_TYPE_VAL(lpcb->remote_ip, pcb->local_ip.type); +#endif /* LWIP_IPV4 && LWIP_IPV6 */ + ip_addr_copy(lpcb->local_ip, pcb->local_ip); + if (pcb->local_port != 0) { + TCP_RMV(&tcp_bound_pcbs, pcb); + } +#if LWIP_TCP_PCB_NUM_EXT_ARGS + /* copy over ext_args to listening pcb */ + memcpy(&lpcb->ext_args, &pcb->ext_args, sizeof(pcb->ext_args)); +#endif + tcp_free(pcb); +#if LWIP_CALLBACK_API + lpcb->accept = tcp_accept_null; +#endif /* LWIP_CALLBACK_API */ +#if TCP_LISTEN_BACKLOG + lpcb->accepts_pending = 0; + tcp_backlog_set(lpcb, backlog); +#endif /* TCP_LISTEN_BACKLOG */ + TCP_REG(&tcp_listen_pcbs.pcbs, (struct tcp_pcb *)lpcb); + res = ERR_OK; +done: + if (err != NULL) { + *err = res; + } + return (struct tcp_pcb *)lpcb; +} + +/** + * Update the state that tracks the available window space to advertise. + * + * Returns how much extra window would be advertised if we sent an + * update now. + */ +u32_t +tcp_update_rcv_ann_wnd(struct tcp_pcb *pcb) +{ + u32_t new_right_edge; + + LWIP_ASSERT("tcp_update_rcv_ann_wnd: invalid pcb", pcb != NULL); + new_right_edge = pcb->rcv_nxt + pcb->rcv_wnd; + + if (TCP_SEQ_GEQ(new_right_edge, pcb->rcv_ann_right_edge + LWIP_MIN((TCP_WND / 2), pcb->mss))) { + /* we can advertise more window */ + pcb->rcv_ann_wnd = pcb->rcv_wnd; + return new_right_edge - pcb->rcv_ann_right_edge; + } else { + if (TCP_SEQ_GT(pcb->rcv_nxt, pcb->rcv_ann_right_edge)) { + /* Can happen due to other end sending out of advertised window, + * but within actual available (but not yet advertised) window */ + pcb->rcv_ann_wnd = 0; + } else { + /* keep the right edge of window constant */ + u32_t new_rcv_ann_wnd = pcb->rcv_ann_right_edge - pcb->rcv_nxt; +#if !LWIP_WND_SCALE + LWIP_ASSERT("new_rcv_ann_wnd <= 0xffff", new_rcv_ann_wnd <= 0xffff); +#endif + pcb->rcv_ann_wnd = (tcpwnd_size_t)new_rcv_ann_wnd; + } + return 0; + } +} + +/** + * @ingroup tcp_raw + * This function should be called by the application when it has + * processed the data. The purpose is to advertise a larger window + * when the data has been processed. + * + * @param pcb the tcp_pcb for which data is read + * @param len the amount of bytes that have been read by the application + */ +void +tcp_recved(struct tcp_pcb *pcb, u16_t len) +{ + u32_t wnd_inflation; + tcpwnd_size_t rcv_wnd; + + LWIP_ASSERT_CORE_LOCKED(); + + LWIP_ERROR("tcp_recved: invalid pcb", pcb != NULL, return); + + /* pcb->state LISTEN not allowed here */ + LWIP_ASSERT("don't call tcp_recved for listen-pcbs", + pcb->state != LISTEN); + + rcv_wnd = (tcpwnd_size_t)(pcb->rcv_wnd + len); + if ((rcv_wnd > TCP_WND_MAX(pcb)) || (rcv_wnd < pcb->rcv_wnd)) { + /* window got too big or tcpwnd_size_t overflow */ + LWIP_DEBUGF(TCP_DEBUG, ("tcp_recved: window got too big or tcpwnd_size_t overflow\n")); + pcb->rcv_wnd = TCP_WND_MAX(pcb); + } else { + pcb->rcv_wnd = rcv_wnd; + } + + wnd_inflation = tcp_update_rcv_ann_wnd(pcb); + + /* If the change in the right edge of window is significant (default + * watermark is TCP_WND/4), then send an explicit update now. + * Otherwise wait for a packet to be sent in the normal course of + * events (or more window to be available later) */ + if (wnd_inflation >= TCP_WND_UPDATE_THRESHOLD) { + tcp_ack_now(pcb); + tcp_output(pcb); + } + + LWIP_DEBUGF(TCP_DEBUG, ("tcp_recved: received %"U16_F" bytes, wnd %"TCPWNDSIZE_F" (%"TCPWNDSIZE_F").\n", + len, pcb->rcv_wnd, (u16_t)(TCP_WND_MAX(pcb) - pcb->rcv_wnd))); +} + +/** + * Allocate a new local TCP port. + * + * @return a new (free) local TCP port number + */ +static u16_t +tcp_new_port(void) +{ + u8_t i; + u16_t n = 0; + struct tcp_pcb *pcb; + +again: + tcp_port++; + if (tcp_port == TCP_LOCAL_PORT_RANGE_END) { + tcp_port = TCP_LOCAL_PORT_RANGE_START; + } + /* Check all PCB lists. */ + for (i = 0; i < NUM_TCP_PCB_LISTS; i++) { + for (pcb = *tcp_pcb_lists[i]; pcb != NULL; pcb = pcb->next) { + if (pcb->local_port == tcp_port) { + n++; + if (n > (TCP_LOCAL_PORT_RANGE_END - TCP_LOCAL_PORT_RANGE_START)) { + return 0; + } + goto again; + } + } + } + return tcp_port; +} + +/** + * @ingroup tcp_raw + * Connects to another host. The function given as the "connected" + * argument will be called when the connection has been established. + * Sets up the pcb to connect to the remote host and sends the + * initial SYN segment which opens the connection. + * + * The tcp_connect() function returns immediately; it does not wait for + * the connection to be properly setup. Instead, it will call the + * function specified as the fourth argument (the "connected" argument) + * when the connection is established. If the connection could not be + * properly established, either because the other host refused the + * connection or because the other host didn't answer, the "err" + * callback function of this pcb (registered with tcp_err, see below) + * will be called. + * + * The tcp_connect() function can return ERR_MEM if no memory is + * available for enqueueing the SYN segment. If the SYN indeed was + * enqueued successfully, the tcp_connect() function returns ERR_OK. + * + * @param pcb the tcp_pcb used to establish the connection + * @param ipaddr the remote ip address to connect to + * @param port the remote tcp port to connect to + * @param connected callback function to call when connected (on error, + the err calback will be called) + * @return ERR_VAL if invalid arguments are given + * ERR_OK if connect request has been sent + * other err_t values if connect request couldn't be sent + */ +err_t +tcp_connect(struct tcp_pcb *pcb, const ip_addr_t *ipaddr, u16_t port, + tcp_connected_fn connected) +{ + struct netif *netif = NULL; + err_t ret; + u32_t iss; + u16_t old_local_port; + + LWIP_ASSERT_CORE_LOCKED(); + + LWIP_ERROR("tcp_connect: invalid pcb", pcb != NULL, return ERR_ARG); + LWIP_ERROR("tcp_connect: invalid ipaddr", ipaddr != NULL, return ERR_ARG); + + LWIP_ERROR("tcp_connect: can only connect from state CLOSED", pcb->state == CLOSED, return ERR_ISCONN); + + LWIP_DEBUGF(TCP_DEBUG, ("tcp_connect to port %"U16_F"\n", port)); + ip_addr_set(&pcb->remote_ip, ipaddr); + pcb->remote_port = port; + + if (pcb->netif_idx != NETIF_NO_INDEX) { + netif = netif_get_by_index(pcb->netif_idx); + } else { + /* check if we have a route to the remote host */ + netif = ip_route(&pcb->local_ip, &pcb->remote_ip); + } + if (netif == NULL) { + /* Don't even try to send a SYN packet if we have no route since that will fail. */ + return ERR_RTE; + } + + /* check if local IP has been assigned to pcb, if not, get one */ + if (ip_addr_isany(&pcb->local_ip)) { + const ip_addr_t *local_ip = ip_netif_get_local_ip(netif, ipaddr); + if (local_ip == NULL) { + return ERR_RTE; + } + ip_addr_copy(pcb->local_ip, *local_ip); + } + +#if LWIP_IPV6 && LWIP_IPV6_SCOPES + /* If the given IP address should have a zone but doesn't, assign one now. + * Given that we already have the target netif, this is easy and cheap. */ + if (IP_IS_V6(&pcb->remote_ip) && + ip6_addr_lacks_zone(ip_2_ip6(&pcb->remote_ip), IP6_UNICAST)) { + ip6_addr_assign_zone(ip_2_ip6(&pcb->remote_ip), IP6_UNICAST, netif); + } +#endif /* LWIP_IPV6 && LWIP_IPV6_SCOPES */ + + old_local_port = pcb->local_port; + if (pcb->local_port == 0) { + pcb->local_port = tcp_new_port(); + if (pcb->local_port == 0) { + return ERR_BUF; + } + } else { +#if SO_REUSE + if (ip_get_option(pcb, SOF_REUSEADDR)) { + /* Since SOF_REUSEADDR allows reusing a local address, we have to make sure + now that the 5-tuple is unique. */ + struct tcp_pcb *cpcb; + int i; + /* Don't check listen- and bound-PCBs, check active- and TIME-WAIT PCBs. */ + for (i = 2; i < NUM_TCP_PCB_LISTS; i++) { + for (cpcb = *tcp_pcb_lists[i]; cpcb != NULL; cpcb = cpcb->next) { + if ((cpcb->local_port == pcb->local_port) && + (cpcb->remote_port == port) && + ip_addr_cmp(&cpcb->local_ip, &pcb->local_ip) && + ip_addr_cmp(&cpcb->remote_ip, ipaddr)) { + /* linux returns EISCONN here, but ERR_USE should be OK for us */ + return ERR_USE; + } + } + } + } +#endif /* SO_REUSE */ + } + + iss = tcp_next_iss(pcb); + pcb->rcv_nxt = 0; + pcb->snd_nxt = iss; + pcb->lastack = iss - 1; + pcb->snd_wl2 = iss - 1; + pcb->snd_lbb = iss - 1; + /* Start with a window that does not need scaling. When window scaling is + enabled and used, the window is enlarged when both sides agree on scaling. */ + pcb->rcv_wnd = pcb->rcv_ann_wnd = TCPWND_MIN16(TCP_WND); + pcb->rcv_ann_right_edge = pcb->rcv_nxt; + pcb->snd_wnd = TCP_WND; + /* As initial send MSS, we use TCP_MSS but limit it to 536. + The send MSS is updated when an MSS option is received. */ + pcb->mss = INITIAL_MSS; +#if TCP_CALCULATE_EFF_SEND_MSS + pcb->mss = tcp_eff_send_mss_netif(pcb->mss, netif, &pcb->remote_ip); +#endif /* TCP_CALCULATE_EFF_SEND_MSS */ + pcb->cwnd = 1; +#if LWIP_CALLBACK_API + pcb->connected = connected; +#else /* LWIP_CALLBACK_API */ + LWIP_UNUSED_ARG(connected); +#endif /* LWIP_CALLBACK_API */ + + /* Send a SYN together with the MSS option. */ + ret = tcp_enqueue_flags(pcb, TCP_SYN); + if (ret == ERR_OK) { + /* SYN segment was enqueued, changed the pcbs state now */ + pcb->state = SYN_SENT; + if (old_local_port != 0) { + TCP_RMV(&tcp_bound_pcbs, pcb); + } + TCP_REG_ACTIVE(pcb); + MIB2_STATS_INC(mib2.tcpactiveopens); + + tcp_output(pcb); + } + return ret; +} + +/** + * Called every 500 ms and implements the retransmission timer and the timer that + * removes PCBs that have been in TIME-WAIT for enough time. It also increments + * various timers such as the inactivity timer in each PCB. + * + * Automatically called from tcp_tmr(). + */ +void +tcp_slowtmr(void) +{ + struct tcp_pcb *pcb, *prev; + tcpwnd_size_t eff_wnd; + u8_t pcb_remove; /* flag if a PCB should be removed */ + u8_t pcb_reset; /* flag if a RST should be sent when removing */ + err_t err; + + err = ERR_OK; + + ++tcp_ticks; + ++tcp_timer_ctr; + +tcp_slowtmr_start: + /* Steps through all of the active PCBs. */ + prev = NULL; + pcb = tcp_active_pcbs; + if (pcb == NULL) { + LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: no active pcbs\n")); + } + while (pcb != NULL) { + LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: processing active pcb\n")); + LWIP_ASSERT("tcp_slowtmr: active pcb->state != CLOSED\n", pcb->state != CLOSED); + LWIP_ASSERT("tcp_slowtmr: active pcb->state != LISTEN\n", pcb->state != LISTEN); + LWIP_ASSERT("tcp_slowtmr: active pcb->state != TIME-WAIT\n", pcb->state != TIME_WAIT); + if (pcb->last_timer == tcp_timer_ctr) { + /* skip this pcb, we have already processed it */ + prev = pcb; + pcb = pcb->next; + continue; + } + pcb->last_timer = tcp_timer_ctr; + + pcb_remove = 0; + pcb_reset = 0; + + if (pcb->state == SYN_SENT && pcb->nrtx >= TCP_SYNMAXRTX) { + ++pcb_remove; + LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: max SYN retries reached\n")); + } else if (pcb->nrtx >= TCP_MAXRTX) { + ++pcb_remove; + LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: max DATA retries reached\n")); + } else { + if (pcb->persist_backoff > 0) { + LWIP_ASSERT("tcp_slowtimr: persist ticking with in-flight data", pcb->unacked == NULL); + LWIP_ASSERT("tcp_slowtimr: persist ticking with empty send buffer", pcb->unsent != NULL); + if (pcb->persist_probe >= TCP_MAXRTX) { + ++pcb_remove; /* max probes reached */ + } else { + u8_t backoff_cnt = tcp_persist_backoff[pcb->persist_backoff - 1]; + if (pcb->persist_cnt < backoff_cnt) { + pcb->persist_cnt++; + } + if (pcb->persist_cnt >= backoff_cnt) { + int next_slot = 1; /* increment timer to next slot */ + /* If snd_wnd is zero, send 1 byte probes */ + if (pcb->snd_wnd == 0) { + if (tcp_zero_window_probe(pcb) != ERR_OK) { + next_slot = 0; /* try probe again with current slot */ + } + /* snd_wnd not fully closed, split unsent head and fill window */ + } else { + if (tcp_split_unsent_seg(pcb, (u16_t)pcb->snd_wnd) == ERR_OK) { + if (tcp_output(pcb) == ERR_OK) { + /* sending will cancel persist timer, else retry with current slot */ + next_slot = 0; + } + } + } + if (next_slot) { + pcb->persist_cnt = 0; + if (pcb->persist_backoff < sizeof(tcp_persist_backoff)) { + pcb->persist_backoff++; + } + } + } + } + } else { + /* Increase the retransmission timer if it is running */ + if ((pcb->rtime >= 0) && (pcb->rtime < 0x7FFF)) { + ++pcb->rtime; + } + + if (pcb->rtime >= pcb->rto) { + /* Time for a retransmission. */ + LWIP_DEBUGF(TCP_RTO_DEBUG, ("tcp_slowtmr: rtime %"S16_F + " pcb->rto %"S16_F"\n", + pcb->rtime, pcb->rto)); + /* If prepare phase fails but we have unsent data but no unacked data, + still execute the backoff calculations below, as this means we somehow + failed to send segment. */ + if ((tcp_rexmit_rto_prepare(pcb) == ERR_OK) || ((pcb->unacked == NULL) && (pcb->unsent != NULL))) { + /* Double retransmission time-out unless we are trying to + * connect to somebody (i.e., we are in SYN_SENT). */ + if (pcb->state != SYN_SENT) { + u8_t backoff_idx = LWIP_MIN(pcb->nrtx, sizeof(tcp_backoff) - 1); + int calc_rto = ((pcb->sa >> 3) + pcb->sv) << tcp_backoff[backoff_idx]; + pcb->rto = (s16_t)LWIP_MIN(calc_rto, 0x7FFF); + } + + /* Reset the retransmission timer. */ + pcb->rtime = 0; + + /* Reduce congestion window and ssthresh. */ + eff_wnd = LWIP_MIN(pcb->cwnd, pcb->snd_wnd); + pcb->ssthresh = eff_wnd >> 1; + if (pcb->ssthresh < (tcpwnd_size_t)(pcb->mss << 1)) { + pcb->ssthresh = (tcpwnd_size_t)(pcb->mss << 1); + } + pcb->cwnd = pcb->mss; + LWIP_DEBUGF(TCP_CWND_DEBUG, ("tcp_slowtmr: cwnd %"TCPWNDSIZE_F + " ssthresh %"TCPWNDSIZE_F"\n", + pcb->cwnd, pcb->ssthresh)); + pcb->bytes_acked = 0; + + /* The following needs to be called AFTER cwnd is set to one + mss - STJ */ + tcp_rexmit_rto_commit(pcb); + } + } + } + } + /* Check if this PCB has stayed too long in FIN-WAIT-2 */ + if (pcb->state == FIN_WAIT_2) { + /* If this PCB is in FIN_WAIT_2 because of SHUT_WR don't let it time out. */ + if (pcb->flags & TF_RXCLOSED) { + /* PCB was fully closed (either through close() or SHUT_RDWR): + normal FIN-WAIT timeout handling. */ + if ((u32_t)(tcp_ticks - pcb->tmr) > + TCP_FIN_WAIT_TIMEOUT / TCP_SLOW_INTERVAL) { + ++pcb_remove; + LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: removing pcb stuck in FIN-WAIT-2\n")); + } + } + } + + /* Check if KEEPALIVE should be sent */ + if (ip_get_option(pcb, SOF_KEEPALIVE) && + ((pcb->state == ESTABLISHED) || + (pcb->state == CLOSE_WAIT))) { + if ((u32_t)(tcp_ticks - pcb->tmr) > + (pcb->keep_idle + TCP_KEEP_DUR(pcb)) / TCP_SLOW_INTERVAL) { + LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: KEEPALIVE timeout. Aborting connection to ")); + ip_addr_debug_print_val(TCP_DEBUG, pcb->remote_ip); + LWIP_DEBUGF(TCP_DEBUG, ("\n")); + + ++pcb_remove; + ++pcb_reset; + } else if ((u32_t)(tcp_ticks - pcb->tmr) > + (pcb->keep_idle + pcb->keep_cnt_sent * TCP_KEEP_INTVL(pcb)) + / TCP_SLOW_INTERVAL) { + err = tcp_keepalive(pcb); + if (err == ERR_OK) { + pcb->keep_cnt_sent++; + } + } + } + + /* If this PCB has queued out of sequence data, but has been + inactive for too long, will drop the data (it will eventually + be retransmitted). */ +#if TCP_QUEUE_OOSEQ + if (pcb->ooseq != NULL && + (tcp_ticks - pcb->tmr >= (u32_t)pcb->rto * TCP_OOSEQ_TIMEOUT)) { + LWIP_DEBUGF(TCP_CWND_DEBUG, ("tcp_slowtmr: dropping OOSEQ queued data\n")); + tcp_free_ooseq(pcb); + } +#endif /* TCP_QUEUE_OOSEQ */ + + /* Check if this PCB has stayed too long in SYN-RCVD */ + if (pcb->state == SYN_RCVD) { + if ((u32_t)(tcp_ticks - pcb->tmr) > + TCP_SYN_RCVD_TIMEOUT / TCP_SLOW_INTERVAL) { + ++pcb_remove; + LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: removing pcb stuck in SYN-RCVD\n")); + } + } + + /* Check if this PCB has stayed too long in LAST-ACK */ + if (pcb->state == LAST_ACK) { + if ((u32_t)(tcp_ticks - pcb->tmr) > 2 * TCP_MSL / TCP_SLOW_INTERVAL) { + ++pcb_remove; + LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: removing pcb stuck in LAST-ACK\n")); + } + } + + /* If the PCB should be removed, do it. */ + if (pcb_remove) { + struct tcp_pcb *pcb2; +#if LWIP_CALLBACK_API + tcp_err_fn err_fn = pcb->errf; +#endif /* LWIP_CALLBACK_API */ + void *err_arg; + enum tcp_state last_state; + tcp_pcb_purge(pcb); + /* Remove PCB from tcp_active_pcbs list. */ + if (prev != NULL) { + LWIP_ASSERT("tcp_slowtmr: middle tcp != tcp_active_pcbs", pcb != tcp_active_pcbs); + prev->next = pcb->next; + } else { + /* This PCB was the first. */ + LWIP_ASSERT("tcp_slowtmr: first pcb == tcp_active_pcbs", tcp_active_pcbs == pcb); + tcp_active_pcbs = pcb->next; + } + + if (pcb_reset) { + tcp_rst(pcb, pcb->snd_nxt, pcb->rcv_nxt, &pcb->local_ip, &pcb->remote_ip, + pcb->local_port, pcb->remote_port); + } + + err_arg = pcb->callback_arg; + last_state = pcb->state; + pcb2 = pcb; + pcb = pcb->next; + tcp_free(pcb2); + + tcp_active_pcbs_changed = 0; + TCP_EVENT_ERR(last_state, err_fn, err_arg, ERR_ABRT); + if (tcp_active_pcbs_changed) { + goto tcp_slowtmr_start; + } + } else { + /* get the 'next' element now and work with 'prev' below (in case of abort) */ + prev = pcb; + pcb = pcb->next; + + /* We check if we should poll the connection. */ + ++prev->polltmr; + if (prev->polltmr >= prev->pollinterval) { + prev->polltmr = 0; + LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: polling application\n")); + tcp_active_pcbs_changed = 0; + TCP_EVENT_POLL(prev, err); + if (tcp_active_pcbs_changed) { + goto tcp_slowtmr_start; + } + /* if err == ERR_ABRT, 'prev' is already deallocated */ + if (err == ERR_OK) { + tcp_output(prev); + } + } + } + } + + + /* Steps through all of the TIME-WAIT PCBs. */ + prev = NULL; + pcb = tcp_tw_pcbs; + while (pcb != NULL) { + LWIP_ASSERT("tcp_slowtmr: TIME-WAIT pcb->state == TIME-WAIT", pcb->state == TIME_WAIT); + pcb_remove = 0; + + /* Check if this PCB has stayed long enough in TIME-WAIT */ + if ((u32_t)(tcp_ticks - pcb->tmr) > 2 * TCP_MSL / TCP_SLOW_INTERVAL) { + ++pcb_remove; + } + + /* If the PCB should be removed, do it. */ + if (pcb_remove) { + struct tcp_pcb *pcb2; + tcp_pcb_purge(pcb); + /* Remove PCB from tcp_tw_pcbs list. */ + if (prev != NULL) { + LWIP_ASSERT("tcp_slowtmr: middle tcp != tcp_tw_pcbs", pcb != tcp_tw_pcbs); + prev->next = pcb->next; + } else { + /* This PCB was the first. */ + LWIP_ASSERT("tcp_slowtmr: first pcb == tcp_tw_pcbs", tcp_tw_pcbs == pcb); + tcp_tw_pcbs = pcb->next; + } + pcb2 = pcb; + pcb = pcb->next; + tcp_free(pcb2); + } else { + prev = pcb; + pcb = pcb->next; + } + } +} + +/** + * Is called every TCP_FAST_INTERVAL (250 ms) and process data previously + * "refused" by upper layer (application) and sends delayed ACKs or pending FINs. + * + * Automatically called from tcp_tmr(). + */ +void +tcp_fasttmr(void) +{ + struct tcp_pcb *pcb; + + ++tcp_timer_ctr; + +tcp_fasttmr_start: + pcb = tcp_active_pcbs; + + while (pcb != NULL) { + if (pcb->last_timer != tcp_timer_ctr) { + struct tcp_pcb *next; + pcb->last_timer = tcp_timer_ctr; + /* send delayed ACKs */ + if (pcb->flags & TF_ACK_DELAY) { + LWIP_DEBUGF(TCP_DEBUG, ("tcp_fasttmr: delayed ACK\n")); + tcp_ack_now(pcb); + tcp_output(pcb); + tcp_clear_flags(pcb, TF_ACK_DELAY | TF_ACK_NOW); + } + /* send pending FIN */ + if (pcb->flags & TF_CLOSEPEND) { + LWIP_DEBUGF(TCP_DEBUG, ("tcp_fasttmr: pending FIN\n")); + tcp_clear_flags(pcb, TF_CLOSEPEND); + tcp_close_shutdown_fin(pcb); + } + + next = pcb->next; + + /* If there is data which was previously "refused" by upper layer */ + if (pcb->refused_data != NULL) { + tcp_active_pcbs_changed = 0; + tcp_process_refused_data(pcb); + if (tcp_active_pcbs_changed) { + /* application callback has changed the pcb list: restart the loop */ + goto tcp_fasttmr_start; + } + } + pcb = next; + } else { + pcb = pcb->next; + } + } +} + +/** Call tcp_output for all active pcbs that have TF_NAGLEMEMERR set */ +void +tcp_txnow(void) +{ + struct tcp_pcb *pcb; + + for (pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) { + if (pcb->flags & TF_NAGLEMEMERR) { + tcp_output(pcb); + } + } +} + +/** Pass pcb->refused_data to the recv callback */ +err_t +tcp_process_refused_data(struct tcp_pcb *pcb) +{ +#if TCP_QUEUE_OOSEQ && LWIP_WND_SCALE + struct pbuf *rest; +#endif /* TCP_QUEUE_OOSEQ && LWIP_WND_SCALE */ + + LWIP_ERROR("tcp_process_refused_data: invalid pcb", pcb != NULL, return ERR_ARG); + +#if TCP_QUEUE_OOSEQ && LWIP_WND_SCALE + while (pcb->refused_data != NULL) +#endif /* TCP_QUEUE_OOSEQ && LWIP_WND_SCALE */ + { + err_t err; + u8_t refused_flags = pcb->refused_data->flags; + /* set pcb->refused_data to NULL in case the callback frees it and then + closes the pcb */ + struct pbuf *refused_data = pcb->refused_data; +#if TCP_QUEUE_OOSEQ && LWIP_WND_SCALE + pbuf_split_64k(refused_data, &rest); + pcb->refused_data = rest; +#else /* TCP_QUEUE_OOSEQ && LWIP_WND_SCALE */ + pcb->refused_data = NULL; +#endif /* TCP_QUEUE_OOSEQ && LWIP_WND_SCALE */ + /* Notify again application with data previously received. */ + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_input: notify kept packet\n")); + TCP_EVENT_RECV(pcb, refused_data, ERR_OK, err); + if (err == ERR_OK) { + /* did refused_data include a FIN? */ + if ((refused_flags & PBUF_FLAG_TCP_FIN) +#if TCP_QUEUE_OOSEQ && LWIP_WND_SCALE + && (rest == NULL) +#endif /* TCP_QUEUE_OOSEQ && LWIP_WND_SCALE */ + ) { + /* correct rcv_wnd as the application won't call tcp_recved() + for the FIN's seqno */ + if (pcb->rcv_wnd != TCP_WND_MAX(pcb)) { + pcb->rcv_wnd++; + } + TCP_EVENT_CLOSED(pcb, err); + if (err == ERR_ABRT) { + return ERR_ABRT; + } + } + } else if (err == ERR_ABRT) { + /* if err == ERR_ABRT, 'pcb' is already deallocated */ + /* Drop incoming packets because pcb is "full" (only if the incoming + segment contains data). */ + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_input: drop incoming packets, because pcb is \"full\"\n")); + return ERR_ABRT; + } else { + /* data is still refused, pbuf is still valid (go on for ACK-only packets) */ +#if TCP_QUEUE_OOSEQ && LWIP_WND_SCALE + if (rest != NULL) { + pbuf_cat(refused_data, rest); + } +#endif /* TCP_QUEUE_OOSEQ && LWIP_WND_SCALE */ + pcb->refused_data = refused_data; + return ERR_INPROGRESS; + } + } + return ERR_OK; +} + +/** + * Deallocates a list of TCP segments (tcp_seg structures). + * + * @param seg tcp_seg list of TCP segments to free + */ +void +tcp_segs_free(struct tcp_seg *seg) +{ + while (seg != NULL) { + struct tcp_seg *next = seg->next; + tcp_seg_free(seg); + seg = next; + } +} + +/** + * Frees a TCP segment (tcp_seg structure). + * + * @param seg single tcp_seg to free + */ +void +tcp_seg_free(struct tcp_seg *seg) +{ + if (seg != NULL) { + if (seg->p != NULL) { + pbuf_free(seg->p); +#if TCP_DEBUG + seg->p = NULL; +#endif /* TCP_DEBUG */ + } + memp_free(MEMP_TCP_SEG, seg); + } +} + +/** + * @ingroup tcp + * Sets the priority of a connection. + * + * @param pcb the tcp_pcb to manipulate + * @param prio new priority + */ +void +tcp_setprio(struct tcp_pcb *pcb, u8_t prio) +{ + LWIP_ASSERT_CORE_LOCKED(); + + LWIP_ERROR("tcp_setprio: invalid pcb", pcb != NULL, return); + + pcb->prio = prio; +} + +#if TCP_QUEUE_OOSEQ +/** + * Returns a copy of the given TCP segment. + * The pbuf and data are not copied, only the pointers + * + * @param seg the old tcp_seg + * @return a copy of seg + */ +struct tcp_seg * +tcp_seg_copy(struct tcp_seg *seg) +{ + struct tcp_seg *cseg; + + LWIP_ASSERT("tcp_seg_copy: invalid seg", seg != NULL); + + cseg = (struct tcp_seg *)memp_malloc(MEMP_TCP_SEG); + if (cseg == NULL) { + return NULL; + } + SMEMCPY((u8_t *)cseg, (const u8_t *)seg, sizeof(struct tcp_seg)); + pbuf_ref(cseg->p); + return cseg; +} +#endif /* TCP_QUEUE_OOSEQ */ + +#if LWIP_CALLBACK_API +/** + * Default receive callback that is called if the user didn't register + * a recv callback for the pcb. + */ +err_t +tcp_recv_null(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err) +{ + LWIP_UNUSED_ARG(arg); + + LWIP_ERROR("tcp_recv_null: invalid pcb", pcb != NULL, return ERR_ARG); + + if (p != NULL) { + tcp_recved(pcb, p->tot_len); + pbuf_free(p); + } else if (err == ERR_OK) { + return tcp_close(pcb); + } + return ERR_OK; +} +#endif /* LWIP_CALLBACK_API */ + +/** + * Kills the oldest active connection that has a lower priority than 'prio'. + * + * @param prio minimum priority + */ +static void +tcp_kill_prio(u8_t prio) +{ + struct tcp_pcb *pcb, *inactive; + u32_t inactivity; + u8_t mprio; + + mprio = LWIP_MIN(TCP_PRIO_MAX, prio); + + /* We want to kill connections with a lower prio, so bail out if + * supplied prio is 0 - there can never be a lower prio + */ + if (mprio == 0) { + return; + } + + /* We only want kill connections with a lower prio, so decrement prio by one + * and start searching for oldest connection with same or lower priority than mprio. + * We want to find the connections with the lowest possible prio, and among + * these the one with the longest inactivity time. + */ + mprio--; + + inactivity = 0; + inactive = NULL; + for (pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) { + /* lower prio is always a kill candidate */ + if ((pcb->prio < mprio) || + /* longer inactivity is also a kill candidate */ + ((pcb->prio == mprio) && ((u32_t)(tcp_ticks - pcb->tmr) >= inactivity))) { + inactivity = tcp_ticks - pcb->tmr; + inactive = pcb; + mprio = pcb->prio; + } + } + if (inactive != NULL) { + LWIP_DEBUGF(TCP_DEBUG, ("tcp_kill_prio: killing oldest PCB %p (%"S32_F")\n", + (void *)inactive, inactivity)); + tcp_abort(inactive); + } +} + +/** + * Kills the oldest connection that is in specific state. + * Called from tcp_alloc() for LAST_ACK and CLOSING if no more connections are available. + */ +static void +tcp_kill_state(enum tcp_state state) +{ + struct tcp_pcb *pcb, *inactive; + u32_t inactivity; + + LWIP_ASSERT("invalid state", (state == CLOSING) || (state == LAST_ACK)); + + inactivity = 0; + inactive = NULL; + /* Go through the list of active pcbs and get the oldest pcb that is in state + CLOSING/LAST_ACK. */ + for (pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) { + if (pcb->state == state) { + if ((u32_t)(tcp_ticks - pcb->tmr) >= inactivity) { + inactivity = tcp_ticks - pcb->tmr; + inactive = pcb; + } + } + } + if (inactive != NULL) { + LWIP_DEBUGF(TCP_DEBUG, ("tcp_kill_closing: killing oldest %s PCB %p (%"S32_F")\n", + tcp_state_str[state], (void *)inactive, inactivity)); + /* Don't send a RST, since no data is lost. */ + tcp_abandon(inactive, 0); + } +} + +/** + * Kills the oldest connection that is in TIME_WAIT state. + * Called from tcp_alloc() if no more connections are available. + */ +static void +tcp_kill_timewait(void) +{ + struct tcp_pcb *pcb, *inactive; + u32_t inactivity; + + inactivity = 0; + inactive = NULL; + /* Go through the list of TIME_WAIT pcbs and get the oldest pcb. */ + for (pcb = tcp_tw_pcbs; pcb != NULL; pcb = pcb->next) { + if ((u32_t)(tcp_ticks - pcb->tmr) >= inactivity) { + inactivity = tcp_ticks - pcb->tmr; + inactive = pcb; + } + } + if (inactive != NULL) { + LWIP_DEBUGF(TCP_DEBUG, ("tcp_kill_timewait: killing oldest TIME-WAIT PCB %p (%"S32_F")\n", + (void *)inactive, inactivity)); + tcp_abort(inactive); + } +} + +/* Called when allocating a pcb fails. + * In this case, we want to handle all pcbs that want to close first: if we can + * now send the FIN (which failed before), the pcb might be in a state that is + * OK for us to now free it. + */ +static void +tcp_handle_closepend(void) +{ + struct tcp_pcb *pcb = tcp_active_pcbs; + + while (pcb != NULL) { + struct tcp_pcb *next = pcb->next; + /* send pending FIN */ + if (pcb->flags & TF_CLOSEPEND) { + LWIP_DEBUGF(TCP_DEBUG, ("tcp_handle_closepend: pending FIN\n")); + tcp_clear_flags(pcb, TF_CLOSEPEND); + tcp_close_shutdown_fin(pcb); + } + pcb = next; + } +} + +/** + * Allocate a new tcp_pcb structure. + * + * @param prio priority for the new pcb + * @return a new tcp_pcb that initially is in state CLOSED + */ +struct tcp_pcb * +tcp_alloc(u8_t prio) +{ + struct tcp_pcb *pcb; + + LWIP_ASSERT_CORE_LOCKED(); + + pcb = (struct tcp_pcb *)memp_malloc(MEMP_TCP_PCB); + if (pcb == NULL) { + /* Try to send FIN for all pcbs stuck in TF_CLOSEPEND first */ + tcp_handle_closepend(); + + /* Try killing oldest connection in TIME-WAIT. */ + LWIP_DEBUGF(TCP_DEBUG, ("tcp_alloc: killing off oldest TIME-WAIT connection\n")); + tcp_kill_timewait(); + /* Try to allocate a tcp_pcb again. */ + pcb = (struct tcp_pcb *)memp_malloc(MEMP_TCP_PCB); + if (pcb == NULL) { + /* Try killing oldest connection in LAST-ACK (these wouldn't go to TIME-WAIT). */ + LWIP_DEBUGF(TCP_DEBUG, ("tcp_alloc: killing off oldest LAST-ACK connection\n")); + tcp_kill_state(LAST_ACK); + /* Try to allocate a tcp_pcb again. */ + pcb = (struct tcp_pcb *)memp_malloc(MEMP_TCP_PCB); + if (pcb == NULL) { + /* Try killing oldest connection in CLOSING. */ + LWIP_DEBUGF(TCP_DEBUG, ("tcp_alloc: killing off oldest CLOSING connection\n")); + tcp_kill_state(CLOSING); + /* Try to allocate a tcp_pcb again. */ + pcb = (struct tcp_pcb *)memp_malloc(MEMP_TCP_PCB); + if (pcb == NULL) { + /* Try killing oldest active connection with lower priority than the new one. */ + LWIP_DEBUGF(TCP_DEBUG, ("tcp_alloc: killing oldest connection with prio lower than %d\n", prio)); + tcp_kill_prio(prio); + /* Try to allocate a tcp_pcb again. */ + pcb = (struct tcp_pcb *)memp_malloc(MEMP_TCP_PCB); + if (pcb != NULL) { + /* adjust err stats: memp_malloc failed multiple times before */ + MEMP_STATS_DEC(err, MEMP_TCP_PCB); + } + } + if (pcb != NULL) { + /* adjust err stats: memp_malloc failed multiple times before */ + MEMP_STATS_DEC(err, MEMP_TCP_PCB); + } + } + if (pcb != NULL) { + /* adjust err stats: memp_malloc failed multiple times before */ + MEMP_STATS_DEC(err, MEMP_TCP_PCB); + } + } + if (pcb != NULL) { + /* adjust err stats: memp_malloc failed above */ + MEMP_STATS_DEC(err, MEMP_TCP_PCB); + } + } + if (pcb != NULL) { + /* zero out the whole pcb, so there is no need to initialize members to zero */ + memset(pcb, 0, sizeof(struct tcp_pcb)); + pcb->prio = prio; + pcb->snd_buf = TCP_SND_BUF; + /* Start with a window that does not need scaling. When window scaling is + enabled and used, the window is enlarged when both sides agree on scaling. */ + pcb->rcv_wnd = pcb->rcv_ann_wnd = TCPWND_MIN16(TCP_WND); + pcb->ttl = TCP_TTL; + /* As initial send MSS, we use TCP_MSS but limit it to 536. + The send MSS is updated when an MSS option is received. */ + pcb->mss = INITIAL_MSS; + pcb->rto = 3000 / TCP_SLOW_INTERVAL; + pcb->sv = 3000 / TCP_SLOW_INTERVAL; + pcb->rtime = -1; + pcb->cwnd = 1; + pcb->tmr = tcp_ticks; + pcb->last_timer = tcp_timer_ctr; + + /* RFC 5681 recommends setting ssthresh abritrarily high and gives an example + of using the largest advertised receive window. We've seen complications with + receiving TCPs that use window scaling and/or window auto-tuning where the + initial advertised window is very small and then grows rapidly once the + connection is established. To avoid these complications, we set ssthresh to the + largest effective cwnd (amount of in-flight data) that the sender can have. */ + pcb->ssthresh = TCP_SND_BUF; + +#if LWIP_CALLBACK_API + pcb->recv = tcp_recv_null; +#endif /* LWIP_CALLBACK_API */ + + /* Init KEEPALIVE timer */ + pcb->keep_idle = TCP_KEEPIDLE_DEFAULT; + +#if LWIP_TCP_KEEPALIVE + pcb->keep_intvl = TCP_KEEPINTVL_DEFAULT; + pcb->keep_cnt = TCP_KEEPCNT_DEFAULT; +#endif /* LWIP_TCP_KEEPALIVE */ + } + return pcb; +} + +/** + * @ingroup tcp_raw + * Creates a new TCP protocol control block but doesn't place it on + * any of the TCP PCB lists. + * The pcb is not put on any list until binding using tcp_bind(). + * If memory is not available for creating the new pcb, NULL is returned. + * + * @internal: Maybe there should be a idle TCP PCB list where these + * PCBs are put on. Port reservation using tcp_bind() is implemented but + * allocated pcbs that are not bound can't be killed automatically if wanting + * to allocate a pcb with higher prio (@see tcp_kill_prio()) + * + * @return a new tcp_pcb that initially is in state CLOSED + */ +struct tcp_pcb * +tcp_new(void) +{ + return tcp_alloc(TCP_PRIO_NORMAL); +} + +/** + * @ingroup tcp_raw + * Creates a new TCP protocol control block but doesn't + * place it on any of the TCP PCB lists. + * The pcb is not put on any list until binding using tcp_bind(). + * + * @param type IP address type, see @ref lwip_ip_addr_type definitions. + * If you want to listen to IPv4 and IPv6 (dual-stack) connections, + * supply @ref IPADDR_TYPE_ANY as argument and bind to @ref IP_ANY_TYPE. + * @return a new tcp_pcb that initially is in state CLOSED + */ +struct tcp_pcb * +tcp_new_ip_type(u8_t type) +{ + struct tcp_pcb *pcb; + pcb = tcp_alloc(TCP_PRIO_NORMAL); +#if LWIP_IPV4 && LWIP_IPV6 + if (pcb != NULL) { + IP_SET_TYPE_VAL(pcb->local_ip, type); + IP_SET_TYPE_VAL(pcb->remote_ip, type); + } +#else + LWIP_UNUSED_ARG(type); +#endif /* LWIP_IPV4 && LWIP_IPV6 */ + return pcb; +} + +/** + * @ingroup tcp_raw + * Specifies the program specific state that should be passed to all + * other callback functions. The "pcb" argument is the current TCP + * connection control block, and the "arg" argument is the argument + * that will be passed to the callbacks. + * + * @param pcb tcp_pcb to set the callback argument + * @param arg void pointer argument to pass to callback functions + */ +void +tcp_arg(struct tcp_pcb *pcb, void *arg) +{ + LWIP_ASSERT_CORE_LOCKED(); + /* This function is allowed to be called for both listen pcbs and + connection pcbs. */ + if (pcb != NULL) { + pcb->callback_arg = arg; + } +} +#if LWIP_CALLBACK_API + +/** + * @ingroup tcp_raw + * Sets the callback function that will be called when new data + * arrives. The callback function will be passed a NULL pbuf to + * indicate that the remote host has closed the connection. If the + * callback function returns ERR_OK or ERR_ABRT it must have + * freed the pbuf, otherwise it must not have freed it. + * + * @param pcb tcp_pcb to set the recv callback + * @param recv callback function to call for this pcb when data is received + */ +void +tcp_recv(struct tcp_pcb *pcb, tcp_recv_fn recv) +{ + LWIP_ASSERT_CORE_LOCKED(); + if (pcb != NULL) { + LWIP_ASSERT("invalid socket state for recv callback", pcb->state != LISTEN); + pcb->recv = recv; + } +} + +/** + * @ingroup tcp_raw + * Specifies the callback function that should be called when data has + * successfully been received (i.e., acknowledged) by the remote + * host. The len argument passed to the callback function gives the + * amount bytes that was acknowledged by the last acknowledgment. + * + * @param pcb tcp_pcb to set the sent callback + * @param sent callback function to call for this pcb when data is successfully sent + */ +void +tcp_sent(struct tcp_pcb *pcb, tcp_sent_fn sent) +{ + LWIP_ASSERT_CORE_LOCKED(); + if (pcb != NULL) { + LWIP_ASSERT("invalid socket state for sent callback", pcb->state != LISTEN); + pcb->sent = sent; + } +} + +/** + * @ingroup tcp_raw + * Used to specify the function that should be called when a fatal error + * has occurred on the connection. + * + * If a connection is aborted because of an error, the application is + * alerted of this event by the err callback. Errors that might abort a + * connection are when there is a shortage of memory. The callback + * function to be called is set using the tcp_err() function. + * + * @note The corresponding pcb is already freed when this callback is called! + * + * @param pcb tcp_pcb to set the err callback + * @param err callback function to call for this pcb when a fatal error + * has occurred on the connection + */ +void +tcp_err(struct tcp_pcb *pcb, tcp_err_fn err) +{ + LWIP_ASSERT_CORE_LOCKED(); + if (pcb != NULL) { + LWIP_ASSERT("invalid socket state for err callback", pcb->state != LISTEN); + pcb->errf = err; + } +} + +/** + * @ingroup tcp_raw + * Used for specifying the function that should be called when a + * LISTENing connection has been connected to another host. + * + * @param pcb tcp_pcb to set the accept callback + * @param accept callback function to call for this pcb when LISTENing + * connection has been connected to another host + */ +void +tcp_accept(struct tcp_pcb *pcb, tcp_accept_fn accept) +{ + LWIP_ASSERT_CORE_LOCKED(); + if ((pcb != NULL) && (pcb->state == LISTEN)) { + struct tcp_pcb_listen *lpcb = (struct tcp_pcb_listen *)pcb; + lpcb->accept = accept; + } +} +#endif /* LWIP_CALLBACK_API */ + + +/** + * @ingroup tcp_raw + * Specifies the polling interval and the callback function that should + * be called to poll the application. The interval is specified in + * number of TCP coarse grained timer shots, which typically occurs + * twice a second. An interval of 10 means that the application would + * be polled every 5 seconds. + * + * When a connection is idle (i.e., no data is either transmitted or + * received), lwIP will repeatedly poll the application by calling a + * specified callback function. This can be used either as a watchdog + * timer for killing connections that have stayed idle for too long, or + * as a method of waiting for memory to become available. For instance, + * if a call to tcp_write() has failed because memory wasn't available, + * the application may use the polling functionality to call tcp_write() + * again when the connection has been idle for a while. + */ +void +tcp_poll(struct tcp_pcb *pcb, tcp_poll_fn poll, u8_t interval) +{ + LWIP_ASSERT_CORE_LOCKED(); + + LWIP_ERROR("tcp_poll: invalid pcb", pcb != NULL, return); + LWIP_ASSERT("invalid socket state for poll", pcb->state != LISTEN); + +#if LWIP_CALLBACK_API + pcb->poll = poll; +#else /* LWIP_CALLBACK_API */ + LWIP_UNUSED_ARG(poll); +#endif /* LWIP_CALLBACK_API */ + pcb->pollinterval = interval; +} + +/** + * Purges a TCP PCB. Removes any buffered data and frees the buffer memory + * (pcb->ooseq, pcb->unsent and pcb->unacked are freed). + * + * @param pcb tcp_pcb to purge. The pcb itself is not deallocated! + */ +void +tcp_pcb_purge(struct tcp_pcb *pcb) +{ + LWIP_ERROR("tcp_pcb_purge: invalid pcb", pcb != NULL, return); + + if (pcb->state != CLOSED && + pcb->state != TIME_WAIT && + pcb->state != LISTEN) { + + LWIP_DEBUGF(TCP_DEBUG, ("tcp_pcb_purge\n")); + + tcp_backlog_accepted(pcb); + + if (pcb->refused_data != NULL) { + LWIP_DEBUGF(TCP_DEBUG, ("tcp_pcb_purge: data left on ->refused_data\n")); + pbuf_free(pcb->refused_data); + pcb->refused_data = NULL; + } + if (pcb->unsent != NULL) { + LWIP_DEBUGF(TCP_DEBUG, ("tcp_pcb_purge: not all data sent\n")); + } + if (pcb->unacked != NULL) { + LWIP_DEBUGF(TCP_DEBUG, ("tcp_pcb_purge: data left on ->unacked\n")); + } +#if TCP_QUEUE_OOSEQ + if (pcb->ooseq != NULL) { + LWIP_DEBUGF(TCP_DEBUG, ("tcp_pcb_purge: data left on ->ooseq\n")); + tcp_free_ooseq(pcb); + } +#endif /* TCP_QUEUE_OOSEQ */ + + /* Stop the retransmission timer as it will expect data on unacked + queue if it fires */ + pcb->rtime = -1; + + tcp_segs_free(pcb->unsent); + tcp_segs_free(pcb->unacked); + pcb->unacked = pcb->unsent = NULL; +#if TCP_OVERSIZE + pcb->unsent_oversize = 0; +#endif /* TCP_OVERSIZE */ + } +} + +/** + * Purges the PCB and removes it from a PCB list. Any delayed ACKs are sent first. + * + * @param pcblist PCB list to purge. + * @param pcb tcp_pcb to purge. The pcb itself is NOT deallocated! + */ +void +tcp_pcb_remove(struct tcp_pcb **pcblist, struct tcp_pcb *pcb) +{ + LWIP_ASSERT("tcp_pcb_remove: invalid pcb", pcb != NULL); + LWIP_ASSERT("tcp_pcb_remove: invalid pcblist", pcblist != NULL); + + TCP_RMV(pcblist, pcb); + + tcp_pcb_purge(pcb); + + /* if there is an outstanding delayed ACKs, send it */ + if ((pcb->state != TIME_WAIT) && + (pcb->state != LISTEN) && + (pcb->flags & TF_ACK_DELAY)) { + tcp_ack_now(pcb); + tcp_output(pcb); + } + + if (pcb->state != LISTEN) { + LWIP_ASSERT("unsent segments leaking", pcb->unsent == NULL); + LWIP_ASSERT("unacked segments leaking", pcb->unacked == NULL); +#if TCP_QUEUE_OOSEQ + LWIP_ASSERT("ooseq segments leaking", pcb->ooseq == NULL); +#endif /* TCP_QUEUE_OOSEQ */ + } + + pcb->state = CLOSED; + /* reset the local port to prevent the pcb from being 'bound' */ + pcb->local_port = 0; + + LWIP_ASSERT("tcp_pcb_remove: tcp_pcbs_sane()", tcp_pcbs_sane()); +} + +/** + * Calculates a new initial sequence number for new connections. + * + * @return u32_t pseudo random sequence number + */ +u32_t +tcp_next_iss(struct tcp_pcb *pcb) +{ +#ifdef LWIP_HOOK_TCP_ISN + LWIP_ASSERT("tcp_next_iss: invalid pcb", pcb != NULL); + return LWIP_HOOK_TCP_ISN(&pcb->local_ip, pcb->local_port, &pcb->remote_ip, pcb->remote_port); +#else /* LWIP_HOOK_TCP_ISN */ + static u32_t iss = 6510; + + LWIP_ASSERT("tcp_next_iss: invalid pcb", pcb != NULL); + LWIP_UNUSED_ARG(pcb); + + iss += tcp_ticks; /* XXX */ + return iss; +#endif /* LWIP_HOOK_TCP_ISN */ +} + +#if TCP_CALCULATE_EFF_SEND_MSS +/** + * Calculates the effective send mss that can be used for a specific IP address + * by calculating the minimum of TCP_MSS and the mtu (if set) of the target + * netif (if not NULL). + */ +u16_t +tcp_eff_send_mss_netif(u16_t sendmss, struct netif *outif, const ip_addr_t *dest) +{ + u16_t mss_s; + u16_t mtu; + + LWIP_UNUSED_ARG(dest); /* in case IPv6 is disabled */ + + LWIP_ASSERT("tcp_eff_send_mss_netif: invalid dst_ip", dest != NULL); + +#if LWIP_IPV6 +#if LWIP_IPV4 + if (IP_IS_V6(dest)) +#endif /* LWIP_IPV4 */ + { + /* First look in destination cache, to see if there is a Path MTU. */ + mtu = nd6_get_destination_mtu(ip_2_ip6(dest), outif); + } +#if LWIP_IPV4 + else +#endif /* LWIP_IPV4 */ +#endif /* LWIP_IPV6 */ +#if LWIP_IPV4 + { + if (outif == NULL) { + return sendmss; + } + mtu = outif->mtu; + } +#endif /* LWIP_IPV4 */ + + if (mtu != 0) { + u16_t offset; +#if LWIP_IPV6 +#if LWIP_IPV4 + if (IP_IS_V6(dest)) +#endif /* LWIP_IPV4 */ + { + offset = IP6_HLEN + TCP_HLEN; + } +#if LWIP_IPV4 + else +#endif /* LWIP_IPV4 */ +#endif /* LWIP_IPV6 */ +#if LWIP_IPV4 + { + offset = IP_HLEN + TCP_HLEN; + } +#endif /* LWIP_IPV4 */ + mss_s = (mtu > offset) ? (u16_t)(mtu - offset) : 0; + /* RFC 1122, chap 4.2.2.6: + * Eff.snd.MSS = min(SendMSS+20, MMS_S) - TCPhdrsize - IPoptionsize + * We correct for TCP options in tcp_write(), and don't support IP options. + */ + sendmss = LWIP_MIN(sendmss, mss_s); + } + return sendmss; +} +#endif /* TCP_CALCULATE_EFF_SEND_MSS */ + +/** Helper function for tcp_netif_ip_addr_changed() that iterates a pcb list */ +static void +tcp_netif_ip_addr_changed_pcblist(const ip_addr_t *old_addr, struct tcp_pcb *pcb_list) +{ + struct tcp_pcb *pcb; + pcb = pcb_list; + + LWIP_ASSERT("tcp_netif_ip_addr_changed_pcblist: invalid old_addr", old_addr != NULL); + + while (pcb != NULL) { + /* PCB bound to current local interface address? */ + if (ip_addr_cmp(&pcb->local_ip, old_addr) +#if LWIP_AUTOIP + /* connections to link-local addresses must persist (RFC3927 ch. 1.9) */ + && (!IP_IS_V4_VAL(pcb->local_ip) || !ip4_addr_islinklocal(ip_2_ip4(&pcb->local_ip))) +#endif /* LWIP_AUTOIP */ + ) { + /* this connection must be aborted */ + struct tcp_pcb *next = pcb->next; + LWIP_DEBUGF(NETIF_DEBUG | LWIP_DBG_STATE, ("netif_set_ipaddr: aborting TCP pcb %p\n", (void *)pcb)); + tcp_abort(pcb); + pcb = next; + } else { + pcb = pcb->next; + } + } +} + +/** This function is called from netif.c when address is changed or netif is removed + * + * @param old_addr IP address of the netif before change + * @param new_addr IP address of the netif after change or NULL if netif has been removed + */ +void +tcp_netif_ip_addr_changed(const ip_addr_t *old_addr, const ip_addr_t *new_addr) +{ + struct tcp_pcb_listen *lpcb; + + if (!ip_addr_isany(old_addr)) { + tcp_netif_ip_addr_changed_pcblist(old_addr, tcp_active_pcbs); + tcp_netif_ip_addr_changed_pcblist(old_addr, tcp_bound_pcbs); + + if (!ip_addr_isany(new_addr)) { + /* PCB bound to current local interface address? */ + for (lpcb = tcp_listen_pcbs.listen_pcbs; lpcb != NULL; lpcb = lpcb->next) { + /* PCB bound to current local interface address? */ + if (ip_addr_cmp(&lpcb->local_ip, old_addr)) { + /* The PCB is listening to the old ipaddr and + * is set to listen to the new one instead */ + ip_addr_copy(lpcb->local_ip, *new_addr); + } + } + } + } +} + +const char * +tcp_debug_state_str(enum tcp_state s) +{ + return tcp_state_str[s]; +} + +err_t +tcp_tcp_get_tcp_addrinfo(struct tcp_pcb *pcb, int local, ip_addr_t *addr, u16_t *port) +{ + if (pcb) { + if (local) { + if (addr) { + *addr = pcb->local_ip; + } + if (port) { + *port = pcb->local_port; + } + } else { + if (addr) { + *addr = pcb->remote_ip; + } + if (port) { + *port = pcb->remote_port; + } + } + return ERR_OK; + } + return ERR_VAL; +} + +#if TCP_QUEUE_OOSEQ +/* Free all ooseq pbufs (and possibly reset SACK state) */ +void +tcp_free_ooseq(struct tcp_pcb *pcb) +{ + if (pcb->ooseq) { + tcp_segs_free(pcb->ooseq); + pcb->ooseq = NULL; +#if LWIP_TCP_SACK_OUT + memset(pcb->rcv_sacks, 0, sizeof(pcb->rcv_sacks)); +#endif /* LWIP_TCP_SACK_OUT */ + } +} +#endif /* TCP_QUEUE_OOSEQ */ + +#if TCP_DEBUG || TCP_INPUT_DEBUG || TCP_OUTPUT_DEBUG +/** + * Print a tcp header for debugging purposes. + * + * @param tcphdr pointer to a struct tcp_hdr + */ +void +tcp_debug_print(struct tcp_hdr *tcphdr) +{ + LWIP_DEBUGF(TCP_DEBUG, ("TCP header:\n")); + LWIP_DEBUGF(TCP_DEBUG, ("+-------------------------------+\n")); + LWIP_DEBUGF(TCP_DEBUG, ("| %5"U16_F" | %5"U16_F" | (src port, dest port)\n", + lwip_ntohs(tcphdr->src), lwip_ntohs(tcphdr->dest))); + LWIP_DEBUGF(TCP_DEBUG, ("+-------------------------------+\n")); + LWIP_DEBUGF(TCP_DEBUG, ("| %010"U32_F" | (seq no)\n", + lwip_ntohl(tcphdr->seqno))); + LWIP_DEBUGF(TCP_DEBUG, ("+-------------------------------+\n")); + LWIP_DEBUGF(TCP_DEBUG, ("| %010"U32_F" | (ack no)\n", + lwip_ntohl(tcphdr->ackno))); + LWIP_DEBUGF(TCP_DEBUG, ("+-------------------------------+\n")); + LWIP_DEBUGF(TCP_DEBUG, ("| %2"U16_F" | |%"U16_F"%"U16_F"%"U16_F"%"U16_F"%"U16_F"%"U16_F"| %5"U16_F" | (hdrlen, flags (", + TCPH_HDRLEN(tcphdr), + (u16_t)(TCPH_FLAGS(tcphdr) >> 5 & 1), + (u16_t)(TCPH_FLAGS(tcphdr) >> 4 & 1), + (u16_t)(TCPH_FLAGS(tcphdr) >> 3 & 1), + (u16_t)(TCPH_FLAGS(tcphdr) >> 2 & 1), + (u16_t)(TCPH_FLAGS(tcphdr) >> 1 & 1), + (u16_t)(TCPH_FLAGS(tcphdr) & 1), + lwip_ntohs(tcphdr->wnd))); + tcp_debug_print_flags(TCPH_FLAGS(tcphdr)); + LWIP_DEBUGF(TCP_DEBUG, ("), win)\n")); + LWIP_DEBUGF(TCP_DEBUG, ("+-------------------------------+\n")); + LWIP_DEBUGF(TCP_DEBUG, ("| 0x%04"X16_F" | %5"U16_F" | (chksum, urgp)\n", + lwip_ntohs(tcphdr->chksum), lwip_ntohs(tcphdr->urgp))); + LWIP_DEBUGF(TCP_DEBUG, ("+-------------------------------+\n")); +} + +/** + * Print a tcp state for debugging purposes. + * + * @param s enum tcp_state to print + */ +void +tcp_debug_print_state(enum tcp_state s) +{ + LWIP_DEBUGF(TCP_DEBUG, ("State: %s\n", tcp_state_str[s])); +} + +/** + * Print tcp flags for debugging purposes. + * + * @param flags tcp flags, all active flags are printed + */ +void +tcp_debug_print_flags(u8_t flags) +{ + if (flags & TCP_FIN) { + LWIP_DEBUGF(TCP_DEBUG, ("FIN ")); + } + if (flags & TCP_SYN) { + LWIP_DEBUGF(TCP_DEBUG, ("SYN ")); + } + if (flags & TCP_RST) { + LWIP_DEBUGF(TCP_DEBUG, ("RST ")); + } + if (flags & TCP_PSH) { + LWIP_DEBUGF(TCP_DEBUG, ("PSH ")); + } + if (flags & TCP_ACK) { + LWIP_DEBUGF(TCP_DEBUG, ("ACK ")); + } + if (flags & TCP_URG) { + LWIP_DEBUGF(TCP_DEBUG, ("URG ")); + } + if (flags & TCP_ECE) { + LWIP_DEBUGF(TCP_DEBUG, ("ECE ")); + } + if (flags & TCP_CWR) { + LWIP_DEBUGF(TCP_DEBUG, ("CWR ")); + } + LWIP_DEBUGF(TCP_DEBUG, ("\n")); +} + +/** + * Print all tcp_pcbs in every list for debugging purposes. + */ +void +tcp_debug_print_pcbs(void) +{ + struct tcp_pcb *pcb; + struct tcp_pcb_listen *pcbl; + + LWIP_DEBUGF(TCP_DEBUG, ("Active PCB states:\n")); + for (pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) { + LWIP_DEBUGF(TCP_DEBUG, ("Local port %"U16_F", foreign port %"U16_F" snd_nxt %"U32_F" rcv_nxt %"U32_F" ", + pcb->local_port, pcb->remote_port, + pcb->snd_nxt, pcb->rcv_nxt)); + tcp_debug_print_state(pcb->state); + } + + LWIP_DEBUGF(TCP_DEBUG, ("Listen PCB states:\n")); + for (pcbl = tcp_listen_pcbs.listen_pcbs; pcbl != NULL; pcbl = pcbl->next) { + LWIP_DEBUGF(TCP_DEBUG, ("Local port %"U16_F" ", pcbl->local_port)); + tcp_debug_print_state(pcbl->state); + } + + LWIP_DEBUGF(TCP_DEBUG, ("TIME-WAIT PCB states:\n")); + for (pcb = tcp_tw_pcbs; pcb != NULL; pcb = pcb->next) { + LWIP_DEBUGF(TCP_DEBUG, ("Local port %"U16_F", foreign port %"U16_F" snd_nxt %"U32_F" rcv_nxt %"U32_F" ", + pcb->local_port, pcb->remote_port, + pcb->snd_nxt, pcb->rcv_nxt)); + tcp_debug_print_state(pcb->state); + } +} + +/** + * Check state consistency of the tcp_pcb lists. + */ +s16_t +tcp_pcbs_sane(void) +{ + struct tcp_pcb *pcb; + for (pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) { + LWIP_ASSERT("tcp_pcbs_sane: active pcb->state != CLOSED", pcb->state != CLOSED); + LWIP_ASSERT("tcp_pcbs_sane: active pcb->state != LISTEN", pcb->state != LISTEN); + LWIP_ASSERT("tcp_pcbs_sane: active pcb->state != TIME-WAIT", pcb->state != TIME_WAIT); + } + for (pcb = tcp_tw_pcbs; pcb != NULL; pcb = pcb->next) { + LWIP_ASSERT("tcp_pcbs_sane: tw pcb->state == TIME-WAIT", pcb->state == TIME_WAIT); + } + return 1; +} +#endif /* TCP_DEBUG */ + +#if LWIP_TCP_PCB_NUM_EXT_ARGS +/** + * @defgroup tcp_raw_extargs ext arguments + * @ingroup tcp_raw + * Additional data storage per tcp pcb\n + * @see @ref tcp_raw + * + * When LWIP_TCP_PCB_NUM_EXT_ARGS is > 0, every tcp pcb (including listen pcb) + * includes a number of additional argument entries in an array. + * + * To support memory management, in addition to a 'void *', callbacks can be + * provided to manage transition from listening pcbs to connections and to + * deallocate memory when a pcb is deallocated (see struct @ref tcp_ext_arg_callbacks). + * + * After allocating this index, use @ref tcp_ext_arg_set and @ref tcp_ext_arg_get + * to store and load arguments from this index for a given pcb. + */ + +static u8_t tcp_ext_arg_id; + +/** + * @ingroup tcp_raw_extargs + * Allocate an index to store data in ext_args member of struct tcp_pcb. + * Returned value is an index in mentioned array. + * The index is *global* over all pcbs! + * + * When @ref LWIP_TCP_PCB_NUM_EXT_ARGS is > 0, every tcp pcb (including listen pcb) + * includes a number of additional argument entries in an array. + * + * To support memory management, in addition to a 'void *', callbacks can be + * provided to manage transition from listening pcbs to connections and to + * deallocate memory when a pcb is deallocated (see struct @ref tcp_ext_arg_callbacks). + * + * After allocating this index, use @ref tcp_ext_arg_set and @ref tcp_ext_arg_get + * to store and load arguments from this index for a given pcb. + * + * @return a unique index into struct tcp_pcb.ext_args + */ +u8_t +tcp_ext_arg_alloc_id(void) +{ + u8_t result = tcp_ext_arg_id; + tcp_ext_arg_id++; + + LWIP_ASSERT_CORE_LOCKED(); + +#if LWIP_TCP_PCB_NUM_EXT_ARGS >= 255 +#error LWIP_TCP_PCB_NUM_EXT_ARGS +#endif + LWIP_ASSERT("Increase LWIP_TCP_PCB_NUM_EXT_ARGS in lwipopts.h", result < LWIP_TCP_PCB_NUM_EXT_ARGS); + return result; +} + +/** + * @ingroup tcp_raw_extargs + * Set callbacks for a given index of ext_args on the specified pcb. + * + * @param pcb tcp_pcb for which to set the callback + * @param id ext_args index to set (allocated via @ref tcp_ext_arg_alloc_id) + * @param callbacks callback table (const since it is referenced, not copied!) + */ +void +tcp_ext_arg_set_callbacks(struct tcp_pcb *pcb, uint8_t id, const struct tcp_ext_arg_callbacks * const callbacks) +{ + LWIP_ASSERT("pcb != NULL", pcb != NULL); + LWIP_ASSERT("id < LWIP_TCP_PCB_NUM_EXT_ARGS", id < LWIP_TCP_PCB_NUM_EXT_ARGS); + LWIP_ASSERT("callbacks != NULL", callbacks != NULL); + + LWIP_ASSERT_CORE_LOCKED(); + + pcb->ext_args[id].callbacks = callbacks; +} + +/** + * @ingroup tcp_raw_extargs + * Set data for a given index of ext_args on the specified pcb. + * + * @param pcb tcp_pcb for which to set the data + * @param id ext_args index to set (allocated via @ref tcp_ext_arg_alloc_id) + * @param arg data pointer to set + */ +void tcp_ext_arg_set(struct tcp_pcb *pcb, uint8_t id, void *arg) +{ + LWIP_ASSERT("pcb != NULL", pcb != NULL); + LWIP_ASSERT("id < LWIP_TCP_PCB_NUM_EXT_ARGS", id < LWIP_TCP_PCB_NUM_EXT_ARGS); + + LWIP_ASSERT_CORE_LOCKED(); + + pcb->ext_args[id].data = arg; +} + +/** + * @ingroup tcp_raw_extargs + * Set data for a given index of ext_args on the specified pcb. + * + * @param pcb tcp_pcb for which to set the data + * @param id ext_args index to set (allocated via @ref tcp_ext_arg_alloc_id) + * @return data pointer at the given index + */ +void *tcp_ext_arg_get(const struct tcp_pcb *pcb, uint8_t id) +{ + LWIP_ASSERT("pcb != NULL", pcb != NULL); + LWIP_ASSERT("id < LWIP_TCP_PCB_NUM_EXT_ARGS", id < LWIP_TCP_PCB_NUM_EXT_ARGS); + + LWIP_ASSERT_CORE_LOCKED(); + + return pcb->ext_args[id].data; +} + +/** This function calls the "destroy" callback for all ext_args once a pcb is + * freed. + */ +static void +tcp_ext_arg_invoke_callbacks_destroyed(struct tcp_pcb_ext_args *ext_args) +{ + int i; + LWIP_ASSERT("ext_args != NULL", ext_args != NULL); + + for (i = 0; i < LWIP_TCP_PCB_NUM_EXT_ARGS; i++) { + if (ext_args[i].callbacks != NULL) { + if (ext_args[i].callbacks->destroy != NULL) { + ext_args[i].callbacks->destroy((u8_t)i, ext_args[i].data); + } + } + } +} + +/** This function calls the "passive_open" callback for all ext_args if a connection + * is in the process of being accepted. This is called just after the SYN is + * received and before a SYN/ACK is sent, to allow to modify the very first + * segment sent even on passive open. Naturally, the "accepted" callback of the + * pcb has not been called yet! + */ +err_t +tcp_ext_arg_invoke_callbacks_passive_open(struct tcp_pcb_listen *lpcb, struct tcp_pcb *cpcb) +{ + int i; + LWIP_ASSERT("lpcb != NULL", lpcb != NULL); + LWIP_ASSERT("cpcb != NULL", cpcb != NULL); + + for (i = 0; i < LWIP_TCP_PCB_NUM_EXT_ARGS; i++) { + if (lpcb->ext_args[i].callbacks != NULL) { + if (lpcb->ext_args[i].callbacks->passive_open != NULL) { + err_t err = lpcb->ext_args[i].callbacks->passive_open((u8_t)i, lpcb, cpcb); + if (err != ERR_OK) { + return err; + } + } + } + } + return ERR_OK; +} +#endif /* LWIP_TCP_PCB_NUM_EXT_ARGS */ + +#endif /* LWIP_TCP */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/tcp_in.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/tcp_in.c new file mode 100644 index 0000000000000000000000000000000000000000..428a6f48da78aa4afcf54287ccf5c512e52cd779 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/tcp_in.c @@ -0,0 +1,2178 @@ +/** + * @file + * Transmission Control Protocol, incoming traffic + * + * The input processing functions of the TCP layer. + * + * These functions are generally called in the order (ip_input() ->) + * tcp_input() -> * tcp_process() -> tcp_receive() (-> application). + * + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#include "lwip/opt.h" + +#if LWIP_TCP /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/priv/tcp_priv.h" +#include "lwip/def.h" +#include "lwip/ip_addr.h" +#include "lwip/netif.h" +#include "lwip/mem.h" +#include "lwip/memp.h" +#include "lwip/inet_chksum.h" +#include "lwip/stats.h" +#include "lwip/ip6.h" +#include "lwip/ip6_addr.h" +#if LWIP_ND6_TCP_REACHABILITY_HINTS +#include "lwip/nd6.h" +#endif /* LWIP_ND6_TCP_REACHABILITY_HINTS */ + +#include + +#ifdef LWIP_HOOK_FILENAME +#include LWIP_HOOK_FILENAME +#endif + +/** Initial CWND calculation as defined RFC 2581 */ +#define LWIP_TCP_CALC_INITIAL_CWND(mss) ((tcpwnd_size_t)LWIP_MIN((4U * (mss)), LWIP_MAX((2U * (mss)), 4380U))) + +/* These variables are global to all functions involved in the input + processing of TCP segments. They are set by the tcp_input() + function. */ +static struct tcp_seg inseg; +static struct tcp_hdr *tcphdr; +static u16_t tcphdr_optlen; +static u16_t tcphdr_opt1len; +static u8_t *tcphdr_opt2; +static u16_t tcp_optidx; +static u32_t seqno, ackno; +static tcpwnd_size_t recv_acked; +static u16_t tcplen; +static u8_t flags; + +static u8_t recv_flags; +static struct pbuf *recv_data; + +struct tcp_pcb *tcp_input_pcb; + +/* Forward declarations. */ +static err_t tcp_process(struct tcp_pcb *pcb); +static void tcp_receive(struct tcp_pcb *pcb); +static void tcp_parseopt(struct tcp_pcb *pcb); + +static void tcp_listen_input(struct tcp_pcb_listen *pcb); +static void tcp_timewait_input(struct tcp_pcb *pcb); + +static int tcp_input_delayed_close(struct tcp_pcb *pcb); + +#if LWIP_TCP_SACK_OUT +static void tcp_add_sack(struct tcp_pcb *pcb, u32_t left, u32_t right); +static void tcp_remove_sacks_lt(struct tcp_pcb *pcb, u32_t seq); +#if defined(TCP_OOSEQ_BYTES_LIMIT) || defined(TCP_OOSEQ_PBUFS_LIMIT) +static void tcp_remove_sacks_gt(struct tcp_pcb *pcb, u32_t seq); +#endif /* TCP_OOSEQ_BYTES_LIMIT || TCP_OOSEQ_PBUFS_LIMIT */ +#endif /* LWIP_TCP_SACK_OUT */ + +/** + * The initial input processing of TCP. It verifies the TCP header, demultiplexes + * the segment between the PCBs and passes it on to tcp_process(), which implements + * the TCP finite state machine. This function is called by the IP layer (in + * ip_input()). + * + * @param p received TCP segment to process (p->payload pointing to the TCP header) + * @param inp network interface on which this segment was received + */ +void +tcp_input(struct pbuf *p, struct netif *inp) +{ + struct tcp_pcb *pcb, *prev; + struct tcp_pcb_listen *lpcb; +#if SO_REUSE + struct tcp_pcb *lpcb_prev = NULL; + struct tcp_pcb_listen *lpcb_any = NULL; +#endif /* SO_REUSE */ + u8_t hdrlen_bytes; + err_t err; + + LWIP_UNUSED_ARG(inp); + LWIP_ASSERT_CORE_LOCKED(); + LWIP_ASSERT("tcp_input: invalid pbuf", p != NULL); + + PERF_START; + + TCP_STATS_INC(tcp.recv); + MIB2_STATS_INC(mib2.tcpinsegs); + + tcphdr = (struct tcp_hdr *)p->payload; + +#if TCP_INPUT_DEBUG + tcp_debug_print(tcphdr); +#endif + + /* Check that TCP header fits in payload */ + if (p->len < TCP_HLEN) { + /* drop short packets */ + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_input: short packet (%"U16_F" bytes) discarded\n", p->tot_len)); + TCP_STATS_INC(tcp.lenerr); + goto dropped; + } + + /* Don't even process incoming broadcasts/multicasts. */ + if (ip_addr_isbroadcast(ip_current_dest_addr(), ip_current_netif()) || + ip_addr_ismulticast(ip_current_dest_addr())) { + TCP_STATS_INC(tcp.proterr); + goto dropped; + } + +#if CHECKSUM_CHECK_TCP + IF__NETIF_CHECKSUM_ENABLED(inp, NETIF_CHECKSUM_CHECK_TCP) { + /* Verify TCP checksum. */ + u16_t chksum = ip_chksum_pseudo(p, IP_PROTO_TCP, p->tot_len, + ip_current_src_addr(), ip_current_dest_addr()); + if (chksum != 0) { + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_input: packet discarded due to failing checksum 0x%04"X16_F"\n", + chksum)); + tcp_debug_print(tcphdr); + TCP_STATS_INC(tcp.chkerr); + goto dropped; + } + } +#endif /* CHECKSUM_CHECK_TCP */ + + /* sanity-check header length */ + hdrlen_bytes = TCPH_HDRLEN_BYTES(tcphdr); + if ((hdrlen_bytes < TCP_HLEN) || (hdrlen_bytes > p->tot_len)) { + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_input: invalid header length (%"U16_F")\n", (u16_t)hdrlen_bytes)); + TCP_STATS_INC(tcp.lenerr); + goto dropped; + } + + /* Move the payload pointer in the pbuf so that it points to the + TCP data instead of the TCP header. */ + tcphdr_optlen = (u16_t)(hdrlen_bytes - TCP_HLEN); + tcphdr_opt2 = NULL; + if (p->len >= hdrlen_bytes) { + /* all options are in the first pbuf */ + tcphdr_opt1len = tcphdr_optlen; + pbuf_remove_header(p, hdrlen_bytes); /* cannot fail */ + } else { + u16_t opt2len; + /* TCP header fits into first pbuf, options don't - data is in the next pbuf */ + /* there must be a next pbuf, due to hdrlen_bytes sanity check above */ + LWIP_ASSERT("p->next != NULL", p->next != NULL); + + /* advance over the TCP header (cannot fail) */ + pbuf_remove_header(p, TCP_HLEN); + + /* determine how long the first and second parts of the options are */ + tcphdr_opt1len = p->len; + opt2len = (u16_t)(tcphdr_optlen - tcphdr_opt1len); + + /* options continue in the next pbuf: set p to zero length and hide the + options in the next pbuf (adjusting p->tot_len) */ + pbuf_remove_header(p, tcphdr_opt1len); + + /* check that the options fit in the second pbuf */ + if (opt2len > p->next->len) { + /* drop short packets */ + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_input: options overflow second pbuf (%"U16_F" bytes)\n", p->next->len)); + TCP_STATS_INC(tcp.lenerr); + goto dropped; + } + + /* remember the pointer to the second part of the options */ + tcphdr_opt2 = (u8_t *)p->next->payload; + + /* advance p->next to point after the options, and manually + adjust p->tot_len to keep it consistent with the changed p->next */ + pbuf_remove_header(p->next, opt2len); + p->tot_len = (u16_t)(p->tot_len - opt2len); + + LWIP_ASSERT("p->len == 0", p->len == 0); + LWIP_ASSERT("p->tot_len == p->next->tot_len", p->tot_len == p->next->tot_len); + } + + /* Convert fields in TCP header to host byte order. */ + tcphdr->src = lwip_ntohs(tcphdr->src); + tcphdr->dest = lwip_ntohs(tcphdr->dest); + seqno = tcphdr->seqno = lwip_ntohl(tcphdr->seqno); + ackno = tcphdr->ackno = lwip_ntohl(tcphdr->ackno); + tcphdr->wnd = lwip_ntohs(tcphdr->wnd); + + flags = TCPH_FLAGS(tcphdr); + tcplen = p->tot_len; + if (flags & (TCP_FIN | TCP_SYN)) { + tcplen++; + if (tcplen < p->tot_len) { + /* u16_t overflow, cannot handle this */ + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_input: length u16_t overflow, cannot handle this\n")); + TCP_STATS_INC(tcp.lenerr); + goto dropped; + } + } + + /* Demultiplex an incoming segment. First, we check if it is destined + for an active connection. */ + prev = NULL; + + for (pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) { + LWIP_ASSERT("tcp_input: active pcb->state != CLOSED", pcb->state != CLOSED); + LWIP_ASSERT("tcp_input: active pcb->state != TIME-WAIT", pcb->state != TIME_WAIT); + LWIP_ASSERT("tcp_input: active pcb->state != LISTEN", pcb->state != LISTEN); + + /* check if PCB is bound to specific netif */ + if ((pcb->netif_idx != NETIF_NO_INDEX) && + (pcb->netif_idx != netif_get_index(ip_data.current_input_netif))) { + prev = pcb; + continue; + } + + if (pcb->remote_port == tcphdr->src && + pcb->local_port == tcphdr->dest && + ip_addr_cmp(&pcb->remote_ip, ip_current_src_addr()) && + ip_addr_cmp(&pcb->local_ip, ip_current_dest_addr())) { + /* Move this PCB to the front of the list so that subsequent + lookups will be faster (we exploit locality in TCP segment + arrivals). */ + LWIP_ASSERT("tcp_input: pcb->next != pcb (before cache)", pcb->next != pcb); + if (prev != NULL) { + prev->next = pcb->next; + pcb->next = tcp_active_pcbs; + tcp_active_pcbs = pcb; + } else { + TCP_STATS_INC(tcp.cachehit); + } + LWIP_ASSERT("tcp_input: pcb->next != pcb (after cache)", pcb->next != pcb); + break; + } + prev = pcb; + } + + if (pcb == NULL) { + /* If it did not go to an active connection, we check the connections + in the TIME-WAIT state. */ + for (pcb = tcp_tw_pcbs; pcb != NULL; pcb = pcb->next) { + LWIP_ASSERT("tcp_input: TIME-WAIT pcb->state == TIME-WAIT", pcb->state == TIME_WAIT); + + /* check if PCB is bound to specific netif */ + if ((pcb->netif_idx != NETIF_NO_INDEX) && + (pcb->netif_idx != netif_get_index(ip_data.current_input_netif))) { + continue; + } + + if (pcb->remote_port == tcphdr->src && + pcb->local_port == tcphdr->dest && + ip_addr_cmp(&pcb->remote_ip, ip_current_src_addr()) && + ip_addr_cmp(&pcb->local_ip, ip_current_dest_addr())) { + /* We don't really care enough to move this PCB to the front + of the list since we are not very likely to receive that + many segments for connections in TIME-WAIT. */ + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_input: packed for TIME_WAITing connection.\n")); +#ifdef LWIP_HOOK_TCP_INPACKET_PCB + if (LWIP_HOOK_TCP_INPACKET_PCB(pcb, tcphdr, tcphdr_optlen, tcphdr_opt1len, + tcphdr_opt2, p) == ERR_OK) +#endif + { + tcp_timewait_input(pcb); + } + pbuf_free(p); + return; + } + } + + /* Finally, if we still did not get a match, we check all PCBs that + are LISTENing for incoming connections. */ + prev = NULL; + for (lpcb = tcp_listen_pcbs.listen_pcbs; lpcb != NULL; lpcb = lpcb->next) { + /* check if PCB is bound to specific netif */ + if ((lpcb->netif_idx != NETIF_NO_INDEX) && + (lpcb->netif_idx != netif_get_index(ip_data.current_input_netif))) { + prev = (struct tcp_pcb *)lpcb; + continue; + } + + if (lpcb->local_port == tcphdr->dest) { + if (IP_IS_ANY_TYPE_VAL(lpcb->local_ip)) { + /* found an ANY TYPE (IPv4/IPv6) match */ +#if SO_REUSE + lpcb_any = lpcb; + lpcb_prev = prev; +#else /* SO_REUSE */ + break; +#endif /* SO_REUSE */ + } else if (IP_ADDR_PCB_VERSION_MATCH_EXACT(lpcb, ip_current_dest_addr())) { + if (ip_addr_cmp(&lpcb->local_ip, ip_current_dest_addr())) { + /* found an exact match */ + break; + } else if (ip_addr_isany(&lpcb->local_ip)) { + /* found an ANY-match */ +#if SO_REUSE + lpcb_any = lpcb; + lpcb_prev = prev; +#else /* SO_REUSE */ + break; +#endif /* SO_REUSE */ + } + } + } + prev = (struct tcp_pcb *)lpcb; + } +#if SO_REUSE + /* first try specific local IP */ + if (lpcb == NULL) { + /* only pass to ANY if no specific local IP has been found */ + lpcb = lpcb_any; + prev = lpcb_prev; + } +#endif /* SO_REUSE */ + if (lpcb != NULL) { + /* Move this PCB to the front of the list so that subsequent + lookups will be faster (we exploit locality in TCP segment + arrivals). */ + if (prev != NULL) { + ((struct tcp_pcb_listen *)prev)->next = lpcb->next; + /* our successor is the remainder of the listening list */ + lpcb->next = tcp_listen_pcbs.listen_pcbs; + /* put this listening pcb at the head of the listening list */ + tcp_listen_pcbs.listen_pcbs = lpcb; + } else { + TCP_STATS_INC(tcp.cachehit); + } + + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_input: packed for LISTENing connection.\n")); +#ifdef LWIP_HOOK_TCP_INPACKET_PCB + if (LWIP_HOOK_TCP_INPACKET_PCB((struct tcp_pcb *)lpcb, tcphdr, tcphdr_optlen, + tcphdr_opt1len, tcphdr_opt2, p) == ERR_OK) +#endif + { + tcp_listen_input(lpcb); + } + pbuf_free(p); + return; + } + } + +#if TCP_INPUT_DEBUG + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("+-+-+-+-+-+-+-+-+-+-+-+-+-+- tcp_input: flags ")); + tcp_debug_print_flags(TCPH_FLAGS(tcphdr)); + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n")); +#endif /* TCP_INPUT_DEBUG */ + + +#ifdef LWIP_HOOK_TCP_INPACKET_PCB + if ((pcb != NULL) && LWIP_HOOK_TCP_INPACKET_PCB(pcb, tcphdr, tcphdr_optlen, + tcphdr_opt1len, tcphdr_opt2, p) != ERR_OK) { + pbuf_free(p); + return; + } +#endif + if (pcb != NULL) { + /* The incoming segment belongs to a connection. */ +#if TCP_INPUT_DEBUG + tcp_debug_print_state(pcb->state); +#endif /* TCP_INPUT_DEBUG */ + + /* Set up a tcp_seg structure. */ + inseg.next = NULL; + inseg.len = p->tot_len; + inseg.p = p; + inseg.tcphdr = tcphdr; + + recv_data = NULL; + recv_flags = 0; + recv_acked = 0; + + if (flags & TCP_PSH) { + p->flags |= PBUF_FLAG_PUSH; + } + + /* If there is data which was previously "refused" by upper layer */ + if (pcb->refused_data != NULL) { + if ((tcp_process_refused_data(pcb) == ERR_ABRT) || + ((pcb->refused_data != NULL) && (tcplen > 0))) { + /* pcb has been aborted or refused data is still refused and the new + segment contains data */ + if (pcb->rcv_ann_wnd == 0) { + /* this is a zero-window probe, we respond to it with current RCV.NXT + and drop the data segment */ + tcp_send_empty_ack(pcb); + } + TCP_STATS_INC(tcp.drop); + MIB2_STATS_INC(mib2.tcpinerrs); + goto aborted; + } + } + tcp_input_pcb = pcb; + err = tcp_process(pcb); + /* A return value of ERR_ABRT means that tcp_abort() was called + and that the pcb has been freed. If so, we don't do anything. */ + if (err != ERR_ABRT) { + if (recv_flags & TF_RESET) { + /* TF_RESET means that the connection was reset by the other + end. We then call the error callback to inform the + application that the connection is dead before we + deallocate the PCB. */ + TCP_EVENT_ERR(pcb->state, pcb->errf, pcb->callback_arg, ERR_RST); + tcp_pcb_remove(&tcp_active_pcbs, pcb); + tcp_free(pcb); + } else { + err = ERR_OK; + /* If the application has registered a "sent" function to be + called when new send buffer space is available, we call it + now. */ + if (recv_acked > 0) { + u16_t acked16; +#if LWIP_WND_SCALE + /* recv_acked is u32_t but the sent callback only takes a u16_t, + so we might have to call it multiple times. */ + u32_t acked = recv_acked; + while (acked > 0) { + acked16 = (u16_t)LWIP_MIN(acked, 0xffffu); + acked -= acked16; +#else + { + acked16 = recv_acked; +#endif + TCP_EVENT_SENT(pcb, (u16_t)acked16, err); + if (err == ERR_ABRT) { + goto aborted; + } + } + recv_acked = 0; + } + if (tcp_input_delayed_close(pcb)) { + goto aborted; + } +#if TCP_QUEUE_OOSEQ && LWIP_WND_SCALE + while (recv_data != NULL) { + struct pbuf *rest = NULL; + pbuf_split_64k(recv_data, &rest); +#else /* TCP_QUEUE_OOSEQ && LWIP_WND_SCALE */ + if (recv_data != NULL) { +#endif /* TCP_QUEUE_OOSEQ && LWIP_WND_SCALE */ + + LWIP_ASSERT("pcb->refused_data == NULL", pcb->refused_data == NULL); + if (pcb->flags & TF_RXCLOSED) { + /* received data although already closed -> abort (send RST) to + notify the remote host that not all data has been processed */ + pbuf_free(recv_data); +#if TCP_QUEUE_OOSEQ && LWIP_WND_SCALE + if (rest != NULL) { + pbuf_free(rest); + } +#endif /* TCP_QUEUE_OOSEQ && LWIP_WND_SCALE */ + tcp_abort(pcb); + goto aborted; + } + + /* Notify application that data has been received. */ + TCP_EVENT_RECV(pcb, recv_data, ERR_OK, err); + if (err == ERR_ABRT) { +#if TCP_QUEUE_OOSEQ && LWIP_WND_SCALE + if (rest != NULL) { + pbuf_free(rest); + } +#endif /* TCP_QUEUE_OOSEQ && LWIP_WND_SCALE */ + goto aborted; + } + + /* If the upper layer can't receive this data, store it */ + if (err != ERR_OK) { +#if TCP_QUEUE_OOSEQ && LWIP_WND_SCALE + if (rest != NULL) { + pbuf_cat(recv_data, rest); + } +#endif /* TCP_QUEUE_OOSEQ && LWIP_WND_SCALE */ + pcb->refused_data = recv_data; + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_input: keep incoming packet, because pcb is \"full\"\n")); +#if TCP_QUEUE_OOSEQ && LWIP_WND_SCALE + break; + } else { + /* Upper layer received the data, go on with the rest if > 64K */ + recv_data = rest; +#endif /* TCP_QUEUE_OOSEQ && LWIP_WND_SCALE */ + } + } + + /* If a FIN segment was received, we call the callback + function with a NULL buffer to indicate EOF. */ + if (recv_flags & TF_GOT_FIN) { + if (pcb->refused_data != NULL) { + /* Delay this if we have refused data. */ + pcb->refused_data->flags |= PBUF_FLAG_TCP_FIN; + } else { + /* correct rcv_wnd as the application won't call tcp_recved() + for the FIN's seqno */ + if (pcb->rcv_wnd != TCP_WND_MAX(pcb)) { + pcb->rcv_wnd++; + } + TCP_EVENT_CLOSED(pcb, err); + if (err == ERR_ABRT) { + goto aborted; + } + } + } + + tcp_input_pcb = NULL; + if (tcp_input_delayed_close(pcb)) { + goto aborted; + } + /* Try to send something out. */ + tcp_output(pcb); +#if TCP_INPUT_DEBUG +#if TCP_DEBUG + tcp_debug_print_state(pcb->state); +#endif /* TCP_DEBUG */ +#endif /* TCP_INPUT_DEBUG */ + } + } + /* Jump target if pcb has been aborted in a callback (by calling tcp_abort()). + Below this line, 'pcb' may not be dereferenced! */ +aborted: + tcp_input_pcb = NULL; + recv_data = NULL; + + /* give up our reference to inseg.p */ + if (inseg.p != NULL) { + pbuf_free(inseg.p); + inseg.p = NULL; + } + } else { + /* If no matching PCB was found, send a TCP RST (reset) to the + sender. */ + LWIP_DEBUGF(TCP_RST_DEBUG, ("tcp_input: no PCB match found, resetting.\n")); + if (!(TCPH_FLAGS(tcphdr) & TCP_RST)) { + TCP_STATS_INC(tcp.proterr); + TCP_STATS_INC(tcp.drop); + tcp_rst(NULL, ackno, seqno + tcplen, ip_current_dest_addr(), + ip_current_src_addr(), tcphdr->dest, tcphdr->src); + } + pbuf_free(p); + } + + LWIP_ASSERT("tcp_input: tcp_pcbs_sane()", tcp_pcbs_sane()); + PERF_STOP("tcp_input"); + return; +dropped: + TCP_STATS_INC(tcp.drop); + MIB2_STATS_INC(mib2.tcpinerrs); + pbuf_free(p); +} + +/** Called from tcp_input to check for TF_CLOSED flag. This results in closing + * and deallocating a pcb at the correct place to ensure noone references it + * any more. + * @returns 1 if the pcb has been closed and deallocated, 0 otherwise + */ +static int +tcp_input_delayed_close(struct tcp_pcb *pcb) +{ + LWIP_ASSERT("tcp_input_delayed_close: invalid pcb", pcb != NULL); + + if (recv_flags & TF_CLOSED) { + /* The connection has been closed and we will deallocate the + PCB. */ + if (!(pcb->flags & TF_RXCLOSED)) { + /* Connection closed although the application has only shut down the + tx side: call the PCB's err callback and indicate the closure to + ensure the application doesn't continue using the PCB. */ + TCP_EVENT_ERR(pcb->state, pcb->errf, pcb->callback_arg, ERR_CLSD); + } + tcp_pcb_remove(&tcp_active_pcbs, pcb); + tcp_free(pcb); + return 1; + } + return 0; +} + +/** + * Called by tcp_input() when a segment arrives for a listening + * connection (from tcp_input()). + * + * @param pcb the tcp_pcb_listen for which a segment arrived + * + * @note the segment which arrived is saved in global variables, therefore only the pcb + * involved is passed as a parameter to this function + */ +static void +tcp_listen_input(struct tcp_pcb_listen *pcb) +{ + struct tcp_pcb *npcb; + u32_t iss; + err_t rc; + + if (flags & TCP_RST) { + /* An incoming RST should be ignored. Return. */ + return; + } + + LWIP_ASSERT("tcp_listen_input: invalid pcb", pcb != NULL); + + /* In the LISTEN state, we check for incoming SYN segments, + creates a new PCB, and responds with a SYN|ACK. */ + if (flags & TCP_ACK) { + /* For incoming segments with the ACK flag set, respond with a + RST. */ + LWIP_DEBUGF(TCP_RST_DEBUG, ("tcp_listen_input: ACK in LISTEN, sending reset\n")); + tcp_rst((const struct tcp_pcb *)pcb, ackno, seqno + tcplen, ip_current_dest_addr(), + ip_current_src_addr(), tcphdr->dest, tcphdr->src); + } else if (flags & TCP_SYN) { + LWIP_DEBUGF(TCP_DEBUG, ("TCP connection request %"U16_F" -> %"U16_F".\n", tcphdr->src, tcphdr->dest)); +#if TCP_LISTEN_BACKLOG + if (pcb->accepts_pending >= pcb->backlog) { + LWIP_DEBUGF(TCP_DEBUG, ("tcp_listen_input: listen backlog exceeded for port %"U16_F"\n", tcphdr->dest)); + return; + } +#endif /* TCP_LISTEN_BACKLOG */ + npcb = tcp_alloc(pcb->prio); + /* If a new PCB could not be created (probably due to lack of memory), + we don't do anything, but rely on the sender will retransmit the + SYN at a time when we have more memory available. */ + if (npcb == NULL) { + err_t err; + LWIP_DEBUGF(TCP_DEBUG, ("tcp_listen_input: could not allocate PCB\n")); + TCP_STATS_INC(tcp.memerr); + TCP_EVENT_ACCEPT(pcb, NULL, pcb->callback_arg, ERR_MEM, err); + LWIP_UNUSED_ARG(err); /* err not useful here */ + return; + } +#if TCP_LISTEN_BACKLOG + pcb->accepts_pending++; + tcp_set_flags(npcb, TF_BACKLOGPEND); +#endif /* TCP_LISTEN_BACKLOG */ + /* Set up the new PCB. */ + ip_addr_copy(npcb->local_ip, *ip_current_dest_addr()); + ip_addr_copy(npcb->remote_ip, *ip_current_src_addr()); + npcb->local_port = pcb->local_port; + npcb->remote_port = tcphdr->src; + npcb->state = SYN_RCVD; + npcb->rcv_nxt = seqno + 1; + npcb->rcv_ann_right_edge = npcb->rcv_nxt; + iss = tcp_next_iss(npcb); + npcb->snd_wl2 = iss; + npcb->snd_nxt = iss; + npcb->lastack = iss; + npcb->snd_lbb = iss; + npcb->snd_wl1 = seqno - 1;/* initialise to seqno-1 to force window update */ + npcb->callback_arg = pcb->callback_arg; +#if LWIP_CALLBACK_API || TCP_LISTEN_BACKLOG + npcb->listener = pcb; +#endif /* LWIP_CALLBACK_API || TCP_LISTEN_BACKLOG */ + /* inherit socket options */ + npcb->so_options = pcb->so_options & SOF_INHERITED; + npcb->netif_idx = pcb->netif_idx; + /* Register the new PCB so that we can begin receiving segments + for it. */ + TCP_REG_ACTIVE(npcb); + + /* Parse any options in the SYN. */ + tcp_parseopt(npcb); + npcb->snd_wnd = tcphdr->wnd; + npcb->snd_wnd_max = npcb->snd_wnd; + +#if TCP_CALCULATE_EFF_SEND_MSS + npcb->mss = tcp_eff_send_mss(npcb->mss, &npcb->local_ip, &npcb->remote_ip); +#endif /* TCP_CALCULATE_EFF_SEND_MSS */ + + MIB2_STATS_INC(mib2.tcppassiveopens); + +#if LWIP_TCP_PCB_NUM_EXT_ARGS + if (tcp_ext_arg_invoke_callbacks_passive_open(pcb, npcb) != ERR_OK) { + tcp_abandon(npcb, 0); + return; + } +#endif + + /* Send a SYN|ACK together with the MSS option. */ + rc = tcp_enqueue_flags(npcb, TCP_SYN | TCP_ACK); + if (rc != ERR_OK) { + tcp_abandon(npcb, 0); + return; + } + tcp_output(npcb); + } + return; +} + +/** + * Called by tcp_input() when a segment arrives for a connection in + * TIME_WAIT. + * + * @param pcb the tcp_pcb for which a segment arrived + * + * @note the segment which arrived is saved in global variables, therefore only the pcb + * involved is passed as a parameter to this function + */ +static void +tcp_timewait_input(struct tcp_pcb *pcb) +{ + /* RFC 1337: in TIME_WAIT, ignore RST and ACK FINs + any 'acceptable' segments */ + /* RFC 793 3.9 Event Processing - Segment Arrives: + * - first check sequence number - we skip that one in TIME_WAIT (always + * acceptable since we only send ACKs) + * - second check the RST bit (... return) */ + if (flags & TCP_RST) { + return; + } + + LWIP_ASSERT("tcp_timewait_input: invalid pcb", pcb != NULL); + + /* - fourth, check the SYN bit, */ + if (flags & TCP_SYN) { + /* If an incoming segment is not acceptable, an acknowledgment + should be sent in reply */ + if (TCP_SEQ_BETWEEN(seqno, pcb->rcv_nxt, pcb->rcv_nxt + pcb->rcv_wnd)) { + /* If the SYN is in the window it is an error, send a reset */ + tcp_rst(pcb, ackno, seqno + tcplen, ip_current_dest_addr(), + ip_current_src_addr(), tcphdr->dest, tcphdr->src); + return; + } + } else if (flags & TCP_FIN) { + /* - eighth, check the FIN bit: Remain in the TIME-WAIT state. + Restart the 2 MSL time-wait timeout.*/ + pcb->tmr = tcp_ticks; + } + + if ((tcplen > 0)) { + /* Acknowledge data, FIN or out-of-window SYN */ + tcp_ack_now(pcb); + tcp_output(pcb); + } + return; +} + +/** + * Implements the TCP state machine. Called by tcp_input. In some + * states tcp_receive() is called to receive data. The tcp_seg + * argument will be freed by the caller (tcp_input()) unless the + * recv_data pointer in the pcb is set. + * + * @param pcb the tcp_pcb for which a segment arrived + * + * @note the segment which arrived is saved in global variables, therefore only the pcb + * involved is passed as a parameter to this function + */ +static err_t +tcp_process(struct tcp_pcb *pcb) +{ + struct tcp_seg *rseg; + u8_t acceptable = 0; + err_t err; + + err = ERR_OK; + + LWIP_ASSERT("tcp_process: invalid pcb", pcb != NULL); + + /* Process incoming RST segments. */ + if (flags & TCP_RST) { + /* First, determine if the reset is acceptable. */ + if (pcb->state == SYN_SENT) { + /* "In the SYN-SENT state (a RST received in response to an initial SYN), + the RST is acceptable if the ACK field acknowledges the SYN." */ + if (ackno == pcb->snd_nxt) { + acceptable = 1; + } + } else { + /* "In all states except SYN-SENT, all reset (RST) segments are validated + by checking their SEQ-fields." */ + if (seqno == pcb->rcv_nxt) { + acceptable = 1; + } else if (TCP_SEQ_BETWEEN(seqno, pcb->rcv_nxt, + pcb->rcv_nxt + pcb->rcv_wnd)) { + /* If the sequence number is inside the window, we send a challenge ACK + and wait for a re-send with matching sequence number. + This follows RFC 5961 section 3.2 and addresses CVE-2004-0230 + (RST spoofing attack), which is present in RFC 793 RST handling. */ + tcp_ack_now(pcb); + } + } + + if (acceptable) { + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_process: Connection RESET\n")); + LWIP_ASSERT("tcp_input: pcb->state != CLOSED", pcb->state != CLOSED); + recv_flags |= TF_RESET; + tcp_clear_flags(pcb, TF_ACK_DELAY); + return ERR_RST; + } else { + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_process: unacceptable reset seqno %"U32_F" rcv_nxt %"U32_F"\n", + seqno, pcb->rcv_nxt)); + LWIP_DEBUGF(TCP_DEBUG, ("tcp_process: unacceptable reset seqno %"U32_F" rcv_nxt %"U32_F"\n", + seqno, pcb->rcv_nxt)); + return ERR_OK; + } + } + + if ((flags & TCP_SYN) && (pcb->state != SYN_SENT && pcb->state != SYN_RCVD)) { + /* Cope with new connection attempt after remote end crashed */ + tcp_ack_now(pcb); + return ERR_OK; + } + + if ((pcb->flags & TF_RXCLOSED) == 0) { + /* Update the PCB (in)activity timer unless rx is closed (see tcp_shutdown) */ + pcb->tmr = tcp_ticks; + } + pcb->keep_cnt_sent = 0; + pcb->persist_probe = 0; + + tcp_parseopt(pcb); + + /* Do different things depending on the TCP state. */ + switch (pcb->state) { + case SYN_SENT: + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("SYN-SENT: ackno %"U32_F" pcb->snd_nxt %"U32_F" unacked %"U32_F"\n", ackno, + pcb->snd_nxt, lwip_ntohl(pcb->unacked->tcphdr->seqno))); + /* received SYN ACK with expected sequence number? */ + if ((flags & TCP_ACK) && (flags & TCP_SYN) + && (ackno == pcb->lastack + 1)) { + pcb->rcv_nxt = seqno + 1; + pcb->rcv_ann_right_edge = pcb->rcv_nxt; + pcb->lastack = ackno; + pcb->snd_wnd = tcphdr->wnd; + pcb->snd_wnd_max = pcb->snd_wnd; + pcb->snd_wl1 = seqno - 1; /* initialise to seqno - 1 to force window update */ + pcb->state = ESTABLISHED; + +#if TCP_CALCULATE_EFF_SEND_MSS + pcb->mss = tcp_eff_send_mss(pcb->mss, &pcb->local_ip, &pcb->remote_ip); +#endif /* TCP_CALCULATE_EFF_SEND_MSS */ + + pcb->cwnd = LWIP_TCP_CALC_INITIAL_CWND(pcb->mss); + LWIP_DEBUGF(TCP_CWND_DEBUG, ("tcp_process (SENT): cwnd %"TCPWNDSIZE_F + " ssthresh %"TCPWNDSIZE_F"\n", + pcb->cwnd, pcb->ssthresh)); + LWIP_ASSERT("pcb->snd_queuelen > 0", (pcb->snd_queuelen > 0)); + --pcb->snd_queuelen; + LWIP_DEBUGF(TCP_QLEN_DEBUG, ("tcp_process: SYN-SENT --queuelen %"TCPWNDSIZE_F"\n", (tcpwnd_size_t)pcb->snd_queuelen)); + rseg = pcb->unacked; + if (rseg == NULL) { + /* might happen if tcp_output fails in tcp_rexmit_rto() + in which case the segment is on the unsent list */ + rseg = pcb->unsent; + LWIP_ASSERT("no segment to free", rseg != NULL); + pcb->unsent = rseg->next; + } else { + pcb->unacked = rseg->next; + } + tcp_seg_free(rseg); + + /* If there's nothing left to acknowledge, stop the retransmit + timer, otherwise reset it to start again */ + if (pcb->unacked == NULL) { + pcb->rtime = -1; + } else { + pcb->rtime = 0; + pcb->nrtx = 0; + } + + /* Call the user specified function to call when successfully + * connected. */ + TCP_EVENT_CONNECTED(pcb, ERR_OK, err); + if (err == ERR_ABRT) { + return ERR_ABRT; + } + tcp_ack_now(pcb); + } + /* received ACK? possibly a half-open connection */ + else if (flags & TCP_ACK) { + /* send a RST to bring the other side in a non-synchronized state. */ + tcp_rst(pcb, ackno, seqno + tcplen, ip_current_dest_addr(), + ip_current_src_addr(), tcphdr->dest, tcphdr->src); + /* Resend SYN immediately (don't wait for rto timeout) to establish + connection faster, but do not send more SYNs than we otherwise would + have, or we might get caught in a loop on loopback interfaces. */ + if (pcb->nrtx < TCP_SYNMAXRTX) { + pcb->rtime = 0; + tcp_rexmit_rto(pcb); + } + } + break; + case SYN_RCVD: + if (flags & TCP_ACK) { + /* expected ACK number? */ + if (TCP_SEQ_BETWEEN(ackno, pcb->lastack + 1, pcb->snd_nxt)) { + pcb->state = ESTABLISHED; + LWIP_DEBUGF(TCP_DEBUG, ("TCP connection established %"U16_F" -> %"U16_F".\n", inseg.tcphdr->src, inseg.tcphdr->dest)); +#if LWIP_CALLBACK_API || TCP_LISTEN_BACKLOG + if (pcb->listener == NULL) { + /* listen pcb might be closed by now */ + err = ERR_VAL; + } else +#endif /* LWIP_CALLBACK_API || TCP_LISTEN_BACKLOG */ + { +#if LWIP_CALLBACK_API + LWIP_ASSERT("pcb->listener->accept != NULL", pcb->listener->accept != NULL); +#endif + tcp_backlog_accepted(pcb); + /* Call the accept function. */ + TCP_EVENT_ACCEPT(pcb->listener, pcb, pcb->callback_arg, ERR_OK, err); + } + if (err != ERR_OK) { + /* If the accept function returns with an error, we abort + * the connection. */ + /* Already aborted? */ + if (err != ERR_ABRT) { + tcp_abort(pcb); + } + return ERR_ABRT; + } + /* If there was any data contained within this ACK, + * we'd better pass it on to the application as well. */ + tcp_receive(pcb); + + /* Prevent ACK for SYN to generate a sent event */ + if (recv_acked != 0) { + recv_acked--; + } + + pcb->cwnd = LWIP_TCP_CALC_INITIAL_CWND(pcb->mss); + LWIP_DEBUGF(TCP_CWND_DEBUG, ("tcp_process (SYN_RCVD): cwnd %"TCPWNDSIZE_F + " ssthresh %"TCPWNDSIZE_F"\n", + pcb->cwnd, pcb->ssthresh)); + + if (recv_flags & TF_GOT_FIN) { + tcp_ack_now(pcb); + pcb->state = CLOSE_WAIT; + } + } else { + /* incorrect ACK number, send RST */ + tcp_rst(pcb, ackno, seqno + tcplen, ip_current_dest_addr(), + ip_current_src_addr(), tcphdr->dest, tcphdr->src); + } + } else if ((flags & TCP_SYN) && (seqno == pcb->rcv_nxt - 1)) { + /* Looks like another copy of the SYN - retransmit our SYN-ACK */ + tcp_rexmit(pcb); + } + break; + case CLOSE_WAIT: + /* FALLTHROUGH */ + case ESTABLISHED: + tcp_receive(pcb); + if (recv_flags & TF_GOT_FIN) { /* passive close */ + tcp_ack_now(pcb); + pcb->state = CLOSE_WAIT; + } + break; + case FIN_WAIT_1: + tcp_receive(pcb); + if (recv_flags & TF_GOT_FIN) { + if ((flags & TCP_ACK) && (ackno == pcb->snd_nxt) && + pcb->unsent == NULL) { + LWIP_DEBUGF(TCP_DEBUG, + ("TCP connection closed: FIN_WAIT_1 %"U16_F" -> %"U16_F".\n", inseg.tcphdr->src, inseg.tcphdr->dest)); + tcp_ack_now(pcb); + tcp_pcb_purge(pcb); + TCP_RMV_ACTIVE(pcb); + pcb->state = TIME_WAIT; + TCP_REG(&tcp_tw_pcbs, pcb); + } else { + tcp_ack_now(pcb); + pcb->state = CLOSING; + } + } else if ((flags & TCP_ACK) && (ackno == pcb->snd_nxt) && + pcb->unsent == NULL) { + pcb->state = FIN_WAIT_2; + } + break; + case FIN_WAIT_2: + tcp_receive(pcb); + if (recv_flags & TF_GOT_FIN) { + LWIP_DEBUGF(TCP_DEBUG, ("TCP connection closed: FIN_WAIT_2 %"U16_F" -> %"U16_F".\n", inseg.tcphdr->src, inseg.tcphdr->dest)); + tcp_ack_now(pcb); + tcp_pcb_purge(pcb); + TCP_RMV_ACTIVE(pcb); + pcb->state = TIME_WAIT; + TCP_REG(&tcp_tw_pcbs, pcb); + } + break; + case CLOSING: + tcp_receive(pcb); + if ((flags & TCP_ACK) && ackno == pcb->snd_nxt && pcb->unsent == NULL) { + LWIP_DEBUGF(TCP_DEBUG, ("TCP connection closed: CLOSING %"U16_F" -> %"U16_F".\n", inseg.tcphdr->src, inseg.tcphdr->dest)); + tcp_pcb_purge(pcb); + TCP_RMV_ACTIVE(pcb); + pcb->state = TIME_WAIT; + TCP_REG(&tcp_tw_pcbs, pcb); + } + break; + case LAST_ACK: + tcp_receive(pcb); + if ((flags & TCP_ACK) && ackno == pcb->snd_nxt && pcb->unsent == NULL) { + LWIP_DEBUGF(TCP_DEBUG, ("TCP connection closed: LAST_ACK %"U16_F" -> %"U16_F".\n", inseg.tcphdr->src, inseg.tcphdr->dest)); + /* bugfix #21699: don't set pcb->state to CLOSED here or we risk leaking segments */ + recv_flags |= TF_CLOSED; + } + break; + default: + break; + } + return ERR_OK; +} + +#if TCP_QUEUE_OOSEQ +/** + * Insert segment into the list (segments covered with new one will be deleted) + * + * Called from tcp_receive() + */ +static void +tcp_oos_insert_segment(struct tcp_seg *cseg, struct tcp_seg *next) +{ + struct tcp_seg *old_seg; + + LWIP_ASSERT("tcp_oos_insert_segment: invalid cseg", cseg != NULL); + + if (TCPH_FLAGS(cseg->tcphdr) & TCP_FIN) { + /* received segment overlaps all following segments */ + tcp_segs_free(next); + next = NULL; + } else { + /* delete some following segments + oos queue may have segments with FIN flag */ + while (next && + TCP_SEQ_GEQ((seqno + cseg->len), + (next->tcphdr->seqno + next->len))) { + /* cseg with FIN already processed */ + if (TCPH_FLAGS(next->tcphdr) & TCP_FIN) { + TCPH_SET_FLAG(cseg->tcphdr, TCP_FIN); + } + old_seg = next; + next = next->next; + tcp_seg_free(old_seg); + } + if (next && + TCP_SEQ_GT(seqno + cseg->len, next->tcphdr->seqno)) { + /* We need to trim the incoming segment. */ + cseg->len = (u16_t)(next->tcphdr->seqno - seqno); + pbuf_realloc(cseg->p, cseg->len); + } + } + cseg->next = next; +} +#endif /* TCP_QUEUE_OOSEQ */ + +/** Remove segments from a list if the incoming ACK acknowledges them */ +static struct tcp_seg * +tcp_free_acked_segments(struct tcp_pcb *pcb, struct tcp_seg *seg_list, const char *dbg_list_name, + struct tcp_seg *dbg_other_seg_list) +{ + struct tcp_seg *next; + u16_t clen; + + LWIP_UNUSED_ARG(dbg_list_name); + LWIP_UNUSED_ARG(dbg_other_seg_list); + + while (seg_list != NULL && + TCP_SEQ_LEQ(lwip_ntohl(seg_list->tcphdr->seqno) + + TCP_TCPLEN(seg_list), ackno)) { + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_receive: removing %"U32_F":%"U32_F" from pcb->%s\n", + lwip_ntohl(seg_list->tcphdr->seqno), + lwip_ntohl(seg_list->tcphdr->seqno) + TCP_TCPLEN(seg_list), + dbg_list_name)); + + next = seg_list; + seg_list = seg_list->next; + + clen = pbuf_clen(next->p); + LWIP_DEBUGF(TCP_QLEN_DEBUG, ("tcp_receive: queuelen %"TCPWNDSIZE_F" ... ", + (tcpwnd_size_t)pcb->snd_queuelen)); + LWIP_ASSERT("pcb->snd_queuelen >= pbuf_clen(next->p)", (pcb->snd_queuelen >= clen)); + + pcb->snd_queuelen = (u16_t)(pcb->snd_queuelen - clen); + recv_acked = (tcpwnd_size_t)(recv_acked + next->len); + tcp_seg_free(next); + + LWIP_DEBUGF(TCP_QLEN_DEBUG, ("%"TCPWNDSIZE_F" (after freeing %s)\n", + (tcpwnd_size_t)pcb->snd_queuelen, + dbg_list_name)); + if (pcb->snd_queuelen != 0) { + LWIP_ASSERT("tcp_receive: valid queue length", + seg_list != NULL || dbg_other_seg_list != NULL); + } + } + return seg_list; +} + +/** + * Called by tcp_process. Checks if the given segment is an ACK for outstanding + * data, and if so frees the memory of the buffered data. Next, it places the + * segment on any of the receive queues (pcb->recved or pcb->ooseq). If the segment + * is buffered, the pbuf is referenced by pbuf_ref so that it will not be freed until + * it has been removed from the buffer. + * + * If the incoming segment constitutes an ACK for a segment that was used for RTT + * estimation, the RTT is estimated here as well. + * + * Called from tcp_process(). + */ +static void +tcp_receive(struct tcp_pcb *pcb) +{ + s16_t m; + u32_t right_wnd_edge; + int found_dupack = 0; + + LWIP_ASSERT("tcp_receive: invalid pcb", pcb != NULL); + LWIP_ASSERT("tcp_receive: wrong state", pcb->state >= ESTABLISHED); + + if (flags & TCP_ACK) { + right_wnd_edge = pcb->snd_wnd + pcb->snd_wl2; + + /* Update window. */ + if (TCP_SEQ_LT(pcb->snd_wl1, seqno) || + (pcb->snd_wl1 == seqno && TCP_SEQ_LT(pcb->snd_wl2, ackno)) || + (pcb->snd_wl2 == ackno && (u32_t)SND_WND_SCALE(pcb, tcphdr->wnd) > pcb->snd_wnd)) { + pcb->snd_wnd = SND_WND_SCALE(pcb, tcphdr->wnd); + /* keep track of the biggest window announced by the remote host to calculate + the maximum segment size */ + if (pcb->snd_wnd_max < pcb->snd_wnd) { + pcb->snd_wnd_max = pcb->snd_wnd; + } + pcb->snd_wl1 = seqno; + pcb->snd_wl2 = ackno; + LWIP_DEBUGF(TCP_WND_DEBUG, ("tcp_receive: window update %"TCPWNDSIZE_F"\n", pcb->snd_wnd)); +#if TCP_WND_DEBUG + } else { + if (pcb->snd_wnd != (tcpwnd_size_t)SND_WND_SCALE(pcb, tcphdr->wnd)) { + LWIP_DEBUGF(TCP_WND_DEBUG, + ("tcp_receive: no window update lastack %"U32_F" ackno %" + U32_F" wl1 %"U32_F" seqno %"U32_F" wl2 %"U32_F"\n", + pcb->lastack, ackno, pcb->snd_wl1, seqno, pcb->snd_wl2)); + } +#endif /* TCP_WND_DEBUG */ + } + + /* (From Stevens TCP/IP Illustrated Vol II, p970.) Its only a + * duplicate ack if: + * 1) It doesn't ACK new data + * 2) length of received packet is zero (i.e. no payload) + * 3) the advertised window hasn't changed + * 4) There is outstanding unacknowledged data (retransmission timer running) + * 5) The ACK is == biggest ACK sequence number so far seen (snd_una) + * + * If it passes all five, should process as a dupack: + * a) dupacks < 3: do nothing + * b) dupacks == 3: fast retransmit + * c) dupacks > 3: increase cwnd + * + * If it only passes 1-3, should reset dupack counter (and add to + * stats, which we don't do in lwIP) + * + * If it only passes 1, should reset dupack counter + * + */ + + /* Clause 1 */ + if (TCP_SEQ_LEQ(ackno, pcb->lastack)) { + /* Clause 2 */ + if (tcplen == 0) { + /* Clause 3 */ + if (pcb->snd_wl2 + pcb->snd_wnd == right_wnd_edge) { + /* Clause 4 */ + if (pcb->rtime >= 0) { + /* Clause 5 */ + if (pcb->lastack == ackno) { + found_dupack = 1; + if ((u8_t)(pcb->dupacks + 1) > pcb->dupacks) { + ++pcb->dupacks; + } + if (pcb->dupacks > 3) { + /* Inflate the congestion window */ + TCP_WND_INC(pcb->cwnd, pcb->mss); + } + if (pcb->dupacks >= 3) { + /* Do fast retransmit (checked via TF_INFR, not via dupacks count) */ + tcp_rexmit_fast(pcb); + } + } + } + } + } + /* If Clause (1) or more is true, but not a duplicate ack, reset + * count of consecutive duplicate acks */ + if (!found_dupack) { + pcb->dupacks = 0; + } + } else if (TCP_SEQ_BETWEEN(ackno, pcb->lastack + 1, pcb->snd_nxt)) { + /* We come here when the ACK acknowledges new data. */ + tcpwnd_size_t acked; + + /* Reset the "IN Fast Retransmit" flag, since we are no longer + in fast retransmit. Also reset the congestion window to the + slow start threshold. */ + if (pcb->flags & TF_INFR) { + tcp_clear_flags(pcb, TF_INFR); + pcb->cwnd = pcb->ssthresh; + pcb->bytes_acked = 0; + } + + /* Reset the number of retransmissions. */ + pcb->nrtx = 0; + + /* Reset the retransmission time-out. */ + pcb->rto = (s16_t)((pcb->sa >> 3) + pcb->sv); + + /* Record how much data this ACK acks */ + acked = (tcpwnd_size_t)(ackno - pcb->lastack); + + /* Reset the fast retransmit variables. */ + pcb->dupacks = 0; + pcb->lastack = ackno; + + /* Update the congestion control variables (cwnd and + ssthresh). */ + if (pcb->state >= ESTABLISHED) { + if (pcb->cwnd < pcb->ssthresh) { + tcpwnd_size_t increase; + /* limit to 1 SMSS segment during period following RTO */ + u8_t num_seg = (pcb->flags & TF_RTO) ? 1 : 2; + /* RFC 3465, section 2.2 Slow Start */ + increase = LWIP_MIN(acked, (tcpwnd_size_t)(num_seg * pcb->mss)); + TCP_WND_INC(pcb->cwnd, increase); + LWIP_DEBUGF(TCP_CWND_DEBUG, ("tcp_receive: slow start cwnd %"TCPWNDSIZE_F"\n", pcb->cwnd)); + } else { + /* RFC 3465, section 2.1 Congestion Avoidance */ + TCP_WND_INC(pcb->bytes_acked, acked); + if (pcb->bytes_acked >= pcb->cwnd) { + pcb->bytes_acked = (tcpwnd_size_t)(pcb->bytes_acked - pcb->cwnd); + TCP_WND_INC(pcb->cwnd, pcb->mss); + } + LWIP_DEBUGF(TCP_CWND_DEBUG, ("tcp_receive: congestion avoidance cwnd %"TCPWNDSIZE_F"\n", pcb->cwnd)); + } + } + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_receive: ACK for %"U32_F", unacked->seqno %"U32_F":%"U32_F"\n", + ackno, + pcb->unacked != NULL ? + lwip_ntohl(pcb->unacked->tcphdr->seqno) : 0, + pcb->unacked != NULL ? + lwip_ntohl(pcb->unacked->tcphdr->seqno) + TCP_TCPLEN(pcb->unacked) : 0)); + + /* Remove segment from the unacknowledged list if the incoming + ACK acknowledges them. */ + pcb->unacked = tcp_free_acked_segments(pcb, pcb->unacked, "unacked", pcb->unsent); + /* We go through the ->unsent list to see if any of the segments + on the list are acknowledged by the ACK. This may seem + strange since an "unsent" segment shouldn't be acked. The + rationale is that lwIP puts all outstanding segments on the + ->unsent list after a retransmission, so these segments may + in fact have been sent once. */ + pcb->unsent = tcp_free_acked_segments(pcb, pcb->unsent, "unsent", pcb->unacked); + + /* If there's nothing left to acknowledge, stop the retransmit + timer, otherwise reset it to start again */ + if (pcb->unacked == NULL) { + pcb->rtime = -1; + } else { + pcb->rtime = 0; + } + + pcb->polltmr = 0; + +#if TCP_OVERSIZE + if (pcb->unsent == NULL) { + pcb->unsent_oversize = 0; + } +#endif /* TCP_OVERSIZE */ + +#if LWIP_IPV6 && LWIP_ND6_TCP_REACHABILITY_HINTS + if (ip_current_is_v6()) { + /* Inform neighbor reachability of forward progress. */ + nd6_reachability_hint(ip6_current_src_addr()); + } +#endif /* LWIP_IPV6 && LWIP_ND6_TCP_REACHABILITY_HINTS*/ + + pcb->snd_buf = (tcpwnd_size_t)(pcb->snd_buf + recv_acked); + /* check if this ACK ends our retransmission of in-flight data */ + if (pcb->flags & TF_RTO) { + /* RTO is done if + 1) both queues are empty or + 2) unacked is empty and unsent head contains data not part of RTO or + 3) unacked head contains data not part of RTO */ + if (pcb->unacked == NULL) { + if ((pcb->unsent == NULL) || + (TCP_SEQ_LEQ(pcb->rto_end, lwip_ntohl(pcb->unsent->tcphdr->seqno)))) { + tcp_clear_flags(pcb, TF_RTO); + } + } else if (TCP_SEQ_LEQ(pcb->rto_end, lwip_ntohl(pcb->unacked->tcphdr->seqno))) { + tcp_clear_flags(pcb, TF_RTO); + } + } + /* End of ACK for new data processing. */ + } else { + /* Out of sequence ACK, didn't really ack anything */ + tcp_send_empty_ack(pcb); + } + + LWIP_DEBUGF(TCP_RTO_DEBUG, ("tcp_receive: pcb->rttest %"U32_F" rtseq %"U32_F" ackno %"U32_F"\n", + pcb->rttest, pcb->rtseq, ackno)); + + /* RTT estimation calculations. This is done by checking if the + incoming segment acknowledges the segment we use to take a + round-trip time measurement. */ + if (pcb->rttest && TCP_SEQ_LT(pcb->rtseq, ackno)) { + /* diff between this shouldn't exceed 32K since this are tcp timer ticks + and a round-trip shouldn't be that long... */ + m = (s16_t)(tcp_ticks - pcb->rttest); + + LWIP_DEBUGF(TCP_RTO_DEBUG, ("tcp_receive: experienced rtt %"U16_F" ticks (%"U16_F" msec).\n", + m, (u16_t)(m * TCP_SLOW_INTERVAL))); + + /* This is taken directly from VJs original code in his paper */ + m = (s16_t)(m - (pcb->sa >> 3)); + pcb->sa = (s16_t)(pcb->sa + m); + if (m < 0) { + m = (s16_t) - m; + } + m = (s16_t)(m - (pcb->sv >> 2)); + pcb->sv = (s16_t)(pcb->sv + m); + pcb->rto = (s16_t)((pcb->sa >> 3) + pcb->sv); + + LWIP_DEBUGF(TCP_RTO_DEBUG, ("tcp_receive: RTO %"U16_F" (%"U16_F" milliseconds)\n", + pcb->rto, (u16_t)(pcb->rto * TCP_SLOW_INTERVAL))); + + pcb->rttest = 0; + } + } + + /* If the incoming segment contains data, we must process it + further unless the pcb already received a FIN. + (RFC 793, chapter 3.9, "SEGMENT ARRIVES" in states CLOSE-WAIT, CLOSING, + LAST-ACK and TIME-WAIT: "Ignore the segment text.") */ + if ((tcplen > 0) && (pcb->state < CLOSE_WAIT)) { + /* This code basically does three things: + + +) If the incoming segment contains data that is the next + in-sequence data, this data is passed to the application. This + might involve trimming the first edge of the data. The rcv_nxt + variable and the advertised window are adjusted. + + +) If the incoming segment has data that is above the next + sequence number expected (->rcv_nxt), the segment is placed on + the ->ooseq queue. This is done by finding the appropriate + place in the ->ooseq queue (which is ordered by sequence + number) and trim the segment in both ends if needed. An + immediate ACK is sent to indicate that we received an + out-of-sequence segment. + + +) Finally, we check if the first segment on the ->ooseq queue + now is in sequence (i.e., if rcv_nxt >= ooseq->seqno). If + rcv_nxt > ooseq->seqno, we must trim the first edge of the + segment on ->ooseq before we adjust rcv_nxt. The data in the + segments that are now on sequence are chained onto the + incoming segment so that we only need to call the application + once. + */ + + /* First, we check if we must trim the first edge. We have to do + this if the sequence number of the incoming segment is less + than rcv_nxt, and the sequence number plus the length of the + segment is larger than rcv_nxt. */ + /* if (TCP_SEQ_LT(seqno, pcb->rcv_nxt)) { + if (TCP_SEQ_LT(pcb->rcv_nxt, seqno + tcplen)) {*/ + if (TCP_SEQ_BETWEEN(pcb->rcv_nxt, seqno + 1, seqno + tcplen - 1)) { + /* Trimming the first edge is done by pushing the payload + pointer in the pbuf downwards. This is somewhat tricky since + we do not want to discard the full contents of the pbuf up to + the new starting point of the data since we have to keep the + TCP header which is present in the first pbuf in the chain. + + What is done is really quite a nasty hack: the first pbuf in + the pbuf chain is pointed to by inseg.p. Since we need to be + able to deallocate the whole pbuf, we cannot change this + inseg.p pointer to point to any of the later pbufs in the + chain. Instead, we point the ->payload pointer in the first + pbuf to data in one of the later pbufs. We also set the + inseg.data pointer to point to the right place. This way, the + ->p pointer will still point to the first pbuf, but the + ->p->payload pointer will point to data in another pbuf. + + After we are done with adjusting the pbuf pointers we must + adjust the ->data pointer in the seg and the segment + length.*/ + + struct pbuf *p = inseg.p; + u32_t off32 = pcb->rcv_nxt - seqno; + u16_t new_tot_len, off; + LWIP_ASSERT("inseg.p != NULL", inseg.p); + LWIP_ASSERT("insane offset!", (off32 < 0xffff)); + off = (u16_t)off32; + LWIP_ASSERT("pbuf too short!", (((s32_t)inseg.p->tot_len) >= off)); + inseg.len -= off; + new_tot_len = (u16_t)(inseg.p->tot_len - off); + while (p->len < off) { + off -= p->len; + /* all pbufs up to and including this one have len==0, so tot_len is equal */ + p->tot_len = new_tot_len; + p->len = 0; + p = p->next; + } + /* cannot fail... */ + pbuf_remove_header(p, off); + inseg.tcphdr->seqno = seqno = pcb->rcv_nxt; + } else { + if (TCP_SEQ_LT(seqno, pcb->rcv_nxt)) { + /* the whole segment is < rcv_nxt */ + /* must be a duplicate of a packet that has already been correctly handled */ + + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_receive: duplicate seqno %"U32_F"\n", seqno)); + tcp_ack_now(pcb); + } + } + + /* The sequence number must be within the window (above rcv_nxt + and below rcv_nxt + rcv_wnd) in order to be further + processed. */ + if (TCP_SEQ_BETWEEN(seqno, pcb->rcv_nxt, + pcb->rcv_nxt + pcb->rcv_wnd - 1)) { + if (pcb->rcv_nxt == seqno) { + /* The incoming segment is the next in sequence. We check if + we have to trim the end of the segment and update rcv_nxt + and pass the data to the application. */ + tcplen = TCP_TCPLEN(&inseg); + + if (tcplen > pcb->rcv_wnd) { + LWIP_DEBUGF(TCP_INPUT_DEBUG, + ("tcp_receive: other end overran receive window" + "seqno %"U32_F" len %"U16_F" right edge %"U32_F"\n", + seqno, tcplen, pcb->rcv_nxt + pcb->rcv_wnd)); + if (TCPH_FLAGS(inseg.tcphdr) & TCP_FIN) { + /* Must remove the FIN from the header as we're trimming + * that byte of sequence-space from the packet */ + TCPH_FLAGS_SET(inseg.tcphdr, TCPH_FLAGS(inseg.tcphdr) & ~(unsigned int)TCP_FIN); + } + /* Adjust length of segment to fit in the window. */ + TCPWND_CHECK16(pcb->rcv_wnd); + inseg.len = (u16_t)pcb->rcv_wnd; + if (TCPH_FLAGS(inseg.tcphdr) & TCP_SYN) { + inseg.len -= 1; + } + pbuf_realloc(inseg.p, inseg.len); + tcplen = TCP_TCPLEN(&inseg); + LWIP_ASSERT("tcp_receive: segment not trimmed correctly to rcv_wnd\n", + (seqno + tcplen) == (pcb->rcv_nxt + pcb->rcv_wnd)); + } +#if TCP_QUEUE_OOSEQ + /* Received in-sequence data, adjust ooseq data if: + - FIN has been received or + - inseq overlaps with ooseq */ + if (pcb->ooseq != NULL) { + if (TCPH_FLAGS(inseg.tcphdr) & TCP_FIN) { + LWIP_DEBUGF(TCP_INPUT_DEBUG, + ("tcp_receive: received in-order FIN, binning ooseq queue\n")); + /* Received in-order FIN means anything that was received + * out of order must now have been received in-order, so + * bin the ooseq queue */ + while (pcb->ooseq != NULL) { + struct tcp_seg *old_ooseq = pcb->ooseq; + pcb->ooseq = pcb->ooseq->next; + tcp_seg_free(old_ooseq); + } + } else { + struct tcp_seg *next = pcb->ooseq; + /* Remove all segments on ooseq that are covered by inseg already. + * FIN is copied from ooseq to inseg if present. */ + while (next && + TCP_SEQ_GEQ(seqno + tcplen, + next->tcphdr->seqno + next->len)) { + struct tcp_seg *tmp; + /* inseg cannot have FIN here (already processed above) */ + if ((TCPH_FLAGS(next->tcphdr) & TCP_FIN) != 0 && + (TCPH_FLAGS(inseg.tcphdr) & TCP_SYN) == 0) { + TCPH_SET_FLAG(inseg.tcphdr, TCP_FIN); + tcplen = TCP_TCPLEN(&inseg); + } + tmp = next; + next = next->next; + tcp_seg_free(tmp); + } + /* Now trim right side of inseg if it overlaps with the first + * segment on ooseq */ + if (next && + TCP_SEQ_GT(seqno + tcplen, + next->tcphdr->seqno)) { + /* inseg cannot have FIN here (already processed above) */ + inseg.len = (u16_t)(next->tcphdr->seqno - seqno); + if (TCPH_FLAGS(inseg.tcphdr) & TCP_SYN) { + inseg.len -= 1; + } + pbuf_realloc(inseg.p, inseg.len); + tcplen = TCP_TCPLEN(&inseg); + LWIP_ASSERT("tcp_receive: segment not trimmed correctly to ooseq queue\n", + (seqno + tcplen) == next->tcphdr->seqno); + } + pcb->ooseq = next; + } + } +#endif /* TCP_QUEUE_OOSEQ */ + + pcb->rcv_nxt = seqno + tcplen; + + /* Update the receiver's (our) window. */ + LWIP_ASSERT("tcp_receive: tcplen > rcv_wnd\n", pcb->rcv_wnd >= tcplen); + pcb->rcv_wnd -= tcplen; + + tcp_update_rcv_ann_wnd(pcb); + + /* If there is data in the segment, we make preparations to + pass this up to the application. The ->recv_data variable + is used for holding the pbuf that goes to the + application. The code for reassembling out-of-sequence data + chains its data on this pbuf as well. + + If the segment was a FIN, we set the TF_GOT_FIN flag that will + be used to indicate to the application that the remote side has + closed its end of the connection. */ + if (inseg.p->tot_len > 0) { + recv_data = inseg.p; + /* Since this pbuf now is the responsibility of the + application, we delete our reference to it so that we won't + (mistakingly) deallocate it. */ + inseg.p = NULL; + } + if (TCPH_FLAGS(inseg.tcphdr) & TCP_FIN) { + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_receive: received FIN.\n")); + recv_flags |= TF_GOT_FIN; + } + +#if TCP_QUEUE_OOSEQ + /* We now check if we have segments on the ->ooseq queue that + are now in sequence. */ + while (pcb->ooseq != NULL && + pcb->ooseq->tcphdr->seqno == pcb->rcv_nxt) { + + struct tcp_seg *cseg = pcb->ooseq; + seqno = pcb->ooseq->tcphdr->seqno; + + pcb->rcv_nxt += TCP_TCPLEN(cseg); + LWIP_ASSERT("tcp_receive: ooseq tcplen > rcv_wnd\n", + pcb->rcv_wnd >= TCP_TCPLEN(cseg)); + pcb->rcv_wnd -= TCP_TCPLEN(cseg); + + tcp_update_rcv_ann_wnd(pcb); + + if (cseg->p->tot_len > 0) { + /* Chain this pbuf onto the pbuf that we will pass to + the application. */ + /* With window scaling, this can overflow recv_data->tot_len, but + that's not a problem since we explicitly fix that before passing + recv_data to the application. */ + if (recv_data) { + pbuf_cat(recv_data, cseg->p); + } else { + recv_data = cseg->p; + } + cseg->p = NULL; + } + if (TCPH_FLAGS(cseg->tcphdr) & TCP_FIN) { + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_receive: dequeued FIN.\n")); + recv_flags |= TF_GOT_FIN; + if (pcb->state == ESTABLISHED) { /* force passive close or we can move to active close */ + pcb->state = CLOSE_WAIT; + } + } + + pcb->ooseq = cseg->next; + tcp_seg_free(cseg); + } +#if LWIP_TCP_SACK_OUT + if (pcb->flags & TF_SACK) { + if (pcb->ooseq != NULL) { + /* Some segments may have been removed from ooseq, let's remove all SACKs that + describe anything before the new beginning of that list. */ + tcp_remove_sacks_lt(pcb, pcb->ooseq->tcphdr->seqno); + } else if (LWIP_TCP_SACK_VALID(pcb, 0)) { + /* ooseq has been cleared. Nothing to SACK */ + memset(pcb->rcv_sacks, 0, sizeof(pcb->rcv_sacks)); + } + } +#endif /* LWIP_TCP_SACK_OUT */ +#endif /* TCP_QUEUE_OOSEQ */ + + + /* Acknowledge the segment(s). */ + tcp_ack(pcb); + +#if LWIP_TCP_SACK_OUT + if (LWIP_TCP_SACK_VALID(pcb, 0)) { + /* Normally the ACK for the data received could be piggy-backed on a data packet, + but lwIP currently does not support including SACKs in data packets. So we force + it to respond with an empty ACK packet (only if there is at least one SACK to be sent). + NOTE: tcp_send_empty_ack() on success clears the ACK flags (set by tcp_ack()) */ + tcp_send_empty_ack(pcb); + } +#endif /* LWIP_TCP_SACK_OUT */ + +#if LWIP_IPV6 && LWIP_ND6_TCP_REACHABILITY_HINTS + if (ip_current_is_v6()) { + /* Inform neighbor reachability of forward progress. */ + nd6_reachability_hint(ip6_current_src_addr()); + } +#endif /* LWIP_IPV6 && LWIP_ND6_TCP_REACHABILITY_HINTS*/ + + } else { + /* We get here if the incoming segment is out-of-sequence. */ + +#if TCP_QUEUE_OOSEQ + /* We queue the segment on the ->ooseq queue. */ + if (pcb->ooseq == NULL) { + pcb->ooseq = tcp_seg_copy(&inseg); +#if LWIP_TCP_SACK_OUT + if (pcb->flags & TF_SACK) { + /* All the SACKs should be invalid, so we can simply store the most recent one: */ + pcb->rcv_sacks[0].left = seqno; + pcb->rcv_sacks[0].right = seqno + inseg.len; + } +#endif /* LWIP_TCP_SACK_OUT */ + } else { + /* If the queue is not empty, we walk through the queue and + try to find a place where the sequence number of the + incoming segment is between the sequence numbers of the + previous and the next segment on the ->ooseq queue. That is + the place where we put the incoming segment. If needed, we + trim the second edges of the previous and the incoming + segment so that it will fit into the sequence. + + If the incoming segment has the same sequence number as a + segment on the ->ooseq queue, we discard the segment that + contains less data. */ + +#if LWIP_TCP_SACK_OUT + /* This is the left edge of the lowest possible SACK range. + It may start before the newly received segment (possibly adjusted below). */ + u32_t sackbeg = TCP_SEQ_LT(seqno, pcb->ooseq->tcphdr->seqno) ? seqno : pcb->ooseq->tcphdr->seqno; +#endif /* LWIP_TCP_SACK_OUT */ + struct tcp_seg *next, *prev = NULL; + for (next = pcb->ooseq; next != NULL; next = next->next) { + if (seqno == next->tcphdr->seqno) { + /* The sequence number of the incoming segment is the + same as the sequence number of the segment on + ->ooseq. We check the lengths to see which one to + discard. */ + if (inseg.len > next->len) { + /* The incoming segment is larger than the old + segment. We replace some segments with the new + one. */ + struct tcp_seg *cseg = tcp_seg_copy(&inseg); + if (cseg != NULL) { + if (prev != NULL) { + prev->next = cseg; + } else { + pcb->ooseq = cseg; + } + tcp_oos_insert_segment(cseg, next); + } + break; + } else { + /* Either the lengths are the same or the incoming + segment was smaller than the old one; in either + case, we ditch the incoming segment. */ + break; + } + } else { + if (prev == NULL) { + if (TCP_SEQ_LT(seqno, next->tcphdr->seqno)) { + /* The sequence number of the incoming segment is lower + than the sequence number of the first segment on the + queue. We put the incoming segment first on the + queue. */ + struct tcp_seg *cseg = tcp_seg_copy(&inseg); + if (cseg != NULL) { + pcb->ooseq = cseg; + tcp_oos_insert_segment(cseg, next); + } + break; + } + } else { + /*if (TCP_SEQ_LT(prev->tcphdr->seqno, seqno) && + TCP_SEQ_LT(seqno, next->tcphdr->seqno)) {*/ + if (TCP_SEQ_BETWEEN(seqno, prev->tcphdr->seqno + 1, next->tcphdr->seqno - 1)) { + /* The sequence number of the incoming segment is in + between the sequence numbers of the previous and + the next segment on ->ooseq. We trim trim the previous + segment, delete next segments that included in received segment + and trim received, if needed. */ + struct tcp_seg *cseg = tcp_seg_copy(&inseg); + if (cseg != NULL) { + if (TCP_SEQ_GT(prev->tcphdr->seqno + prev->len, seqno)) { + /* We need to trim the prev segment. */ + prev->len = (u16_t)(seqno - prev->tcphdr->seqno); + pbuf_realloc(prev->p, prev->len); + } + prev->next = cseg; + tcp_oos_insert_segment(cseg, next); + } + break; + } + } + +#if LWIP_TCP_SACK_OUT + /* The new segment goes after the 'next' one. If there is a "hole" in sequence numbers + between 'prev' and the beginning of 'next', we want to move sackbeg. */ + if (prev != NULL && prev->tcphdr->seqno + prev->len != next->tcphdr->seqno) { + sackbeg = next->tcphdr->seqno; + } +#endif /* LWIP_TCP_SACK_OUT */ + + /* We don't use 'prev' below, so let's set it to current 'next'. + This way even if we break the loop below, 'prev' will be pointing + at the segment right in front of the newly added one. */ + prev = next; + + /* If the "next" segment is the last segment on the + ooseq queue, we add the incoming segment to the end + of the list. */ + if (next->next == NULL && + TCP_SEQ_GT(seqno, next->tcphdr->seqno)) { + if (TCPH_FLAGS(next->tcphdr) & TCP_FIN) { + /* segment "next" already contains all data */ + break; + } + next->next = tcp_seg_copy(&inseg); + if (next->next != NULL) { + if (TCP_SEQ_GT(next->tcphdr->seqno + next->len, seqno)) { + /* We need to trim the last segment. */ + next->len = (u16_t)(seqno - next->tcphdr->seqno); + pbuf_realloc(next->p, next->len); + } + /* check if the remote side overruns our receive window */ + if (TCP_SEQ_GT((u32_t)tcplen + seqno, pcb->rcv_nxt + (u32_t)pcb->rcv_wnd)) { + LWIP_DEBUGF(TCP_INPUT_DEBUG, + ("tcp_receive: other end overran receive window" + "seqno %"U32_F" len %"U16_F" right edge %"U32_F"\n", + seqno, tcplen, pcb->rcv_nxt + pcb->rcv_wnd)); + if (TCPH_FLAGS(next->next->tcphdr) & TCP_FIN) { + /* Must remove the FIN from the header as we're trimming + * that byte of sequence-space from the packet */ + TCPH_FLAGS_SET(next->next->tcphdr, TCPH_FLAGS(next->next->tcphdr) & ~TCP_FIN); + } + /* Adjust length of segment to fit in the window. */ + next->next->len = (u16_t)(pcb->rcv_nxt + pcb->rcv_wnd - seqno); + pbuf_realloc(next->next->p, next->next->len); + tcplen = TCP_TCPLEN(next->next); + LWIP_ASSERT("tcp_receive: segment not trimmed correctly to rcv_wnd\n", + (seqno + tcplen) == (pcb->rcv_nxt + pcb->rcv_wnd)); + } + } + break; + } + } + } + +#if LWIP_TCP_SACK_OUT + if (pcb->flags & TF_SACK) { + if (prev == NULL) { + /* The new segment is at the beginning. sackbeg should already be set properly. + We need to find the right edge. */ + next = pcb->ooseq; + } else if (prev->next != NULL) { + /* The new segment was added after 'prev'. If there is a "hole" between 'prev' and 'prev->next', + we need to move sackbeg. After that we should find the right edge. */ + next = prev->next; + if (prev->tcphdr->seqno + prev->len != next->tcphdr->seqno) { + sackbeg = next->tcphdr->seqno; + } + } else { + next = NULL; + } + if (next != NULL) { + u32_t sackend = next->tcphdr->seqno; + for ( ; (next != NULL) && (sackend == next->tcphdr->seqno); next = next->next) { + sackend += next->len; + } + tcp_add_sack(pcb, sackbeg, sackend); + } + } +#endif /* LWIP_TCP_SACK_OUT */ + } +#if defined(TCP_OOSEQ_BYTES_LIMIT) || defined(TCP_OOSEQ_PBUFS_LIMIT) + { + /* Check that the data on ooseq doesn't exceed one of the limits + and throw away everything above that limit. */ +#ifdef TCP_OOSEQ_BYTES_LIMIT + const u32_t ooseq_max_blen = TCP_OOSEQ_BYTES_LIMIT(pcb); + u32_t ooseq_blen = 0; +#endif +#ifdef TCP_OOSEQ_PBUFS_LIMIT + const u16_t ooseq_max_qlen = TCP_OOSEQ_PBUFS_LIMIT(pcb); + u16_t ooseq_qlen = 0; +#endif + struct tcp_seg *next, *prev = NULL; + for (next = pcb->ooseq; next != NULL; prev = next, next = next->next) { + struct pbuf *p = next->p; + int stop_here = 0; +#ifdef TCP_OOSEQ_BYTES_LIMIT + ooseq_blen += p->tot_len; + if (ooseq_blen > ooseq_max_blen) { + stop_here = 1; + } +#endif +#ifdef TCP_OOSEQ_PBUFS_LIMIT + ooseq_qlen += pbuf_clen(p); + if (ooseq_qlen > ooseq_max_qlen) { + stop_here = 1; + } +#endif + if (stop_here) { +#if LWIP_TCP_SACK_OUT + if (pcb->flags & TF_SACK) { + /* Let's remove all SACKs from next's seqno up. */ + tcp_remove_sacks_gt(pcb, next->tcphdr->seqno); + } +#endif /* LWIP_TCP_SACK_OUT */ + /* too much ooseq data, dump this and everything after it */ + tcp_segs_free(next); + if (prev == NULL) { + /* first ooseq segment is too much, dump the whole queue */ + pcb->ooseq = NULL; + } else { + /* just dump 'next' and everything after it */ + prev->next = NULL; + } + break; + } + } + } +#endif /* TCP_OOSEQ_BYTES_LIMIT || TCP_OOSEQ_PBUFS_LIMIT */ +#endif /* TCP_QUEUE_OOSEQ */ + + /* We send the ACK packet after we've (potentially) dealt with SACKs, + so they can be included in the acknowledgment. */ + tcp_send_empty_ack(pcb); + } + } else { + /* The incoming segment is not within the window. */ + tcp_send_empty_ack(pcb); + } + } else { + /* Segments with length 0 is taken care of here. Segments that + fall out of the window are ACKed. */ + if (!TCP_SEQ_BETWEEN(seqno, pcb->rcv_nxt, pcb->rcv_nxt + pcb->rcv_wnd - 1)) { + tcp_ack_now(pcb); + } + } +} + +static u8_t +tcp_get_next_optbyte(void) +{ + u16_t optidx = tcp_optidx++; + if ((tcphdr_opt2 == NULL) || (optidx < tcphdr_opt1len)) { + u8_t *opts = (u8_t *)tcphdr + TCP_HLEN; + return opts[optidx]; + } else { + u8_t idx = (u8_t)(optidx - tcphdr_opt1len); + return tcphdr_opt2[idx]; + } +} + +/** + * Parses the options contained in the incoming segment. + * + * Called from tcp_listen_input() and tcp_process(). + * Currently, only the MSS option is supported! + * + * @param pcb the tcp_pcb for which a segment arrived + */ +static void +tcp_parseopt(struct tcp_pcb *pcb) +{ + u8_t data; + u16_t mss; +#if LWIP_TCP_TIMESTAMPS + u32_t tsval; +#endif + + LWIP_ASSERT("tcp_parseopt: invalid pcb", pcb != NULL); + + /* Parse the TCP MSS option, if present. */ + if (tcphdr_optlen != 0) { + for (tcp_optidx = 0; tcp_optidx < tcphdr_optlen; ) { + u8_t opt = tcp_get_next_optbyte(); + switch (opt) { + case LWIP_TCP_OPT_EOL: + /* End of options. */ + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_parseopt: EOL\n")); + return; + case LWIP_TCP_OPT_NOP: + /* NOP option. */ + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_parseopt: NOP\n")); + break; + case LWIP_TCP_OPT_MSS: + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_parseopt: MSS\n")); + if (tcp_get_next_optbyte() != LWIP_TCP_OPT_LEN_MSS || (tcp_optidx - 2 + LWIP_TCP_OPT_LEN_MSS) > tcphdr_optlen) { + /* Bad length */ + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_parseopt: bad length\n")); + return; + } + /* An MSS option with the right option length. */ + mss = (u16_t)(tcp_get_next_optbyte() << 8); + mss |= tcp_get_next_optbyte(); + /* Limit the mss to the configured TCP_MSS and prevent division by zero */ + pcb->mss = ((mss > TCP_MSS) || (mss == 0)) ? TCP_MSS : mss; + break; +#if LWIP_WND_SCALE + case LWIP_TCP_OPT_WS: + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_parseopt: WND_SCALE\n")); + if (tcp_get_next_optbyte() != LWIP_TCP_OPT_LEN_WS || (tcp_optidx - 2 + LWIP_TCP_OPT_LEN_WS) > tcphdr_optlen) { + /* Bad length */ + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_parseopt: bad length\n")); + return; + } + /* An WND_SCALE option with the right option length. */ + data = tcp_get_next_optbyte(); + /* If syn was received with wnd scale option, + activate wnd scale opt, but only if this is not a retransmission */ + if ((flags & TCP_SYN) && !(pcb->flags & TF_WND_SCALE)) { + pcb->snd_scale = data; + if (pcb->snd_scale > 14U) { + pcb->snd_scale = 14U; + } + pcb->rcv_scale = TCP_RCV_SCALE; + tcp_set_flags(pcb, TF_WND_SCALE); + /* window scaling is enabled, we can use the full receive window */ + LWIP_ASSERT("window not at default value", pcb->rcv_wnd == TCPWND_MIN16(TCP_WND)); + LWIP_ASSERT("window not at default value", pcb->rcv_ann_wnd == TCPWND_MIN16(TCP_WND)); + pcb->rcv_wnd = pcb->rcv_ann_wnd = TCP_WND; + } + break; +#endif /* LWIP_WND_SCALE */ +#if LWIP_TCP_TIMESTAMPS + case LWIP_TCP_OPT_TS: + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_parseopt: TS\n")); + if (tcp_get_next_optbyte() != LWIP_TCP_OPT_LEN_TS || (tcp_optidx - 2 + LWIP_TCP_OPT_LEN_TS) > tcphdr_optlen) { + /* Bad length */ + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_parseopt: bad length\n")); + return; + } + /* TCP timestamp option with valid length */ + tsval = tcp_get_next_optbyte(); + tsval |= (tcp_get_next_optbyte() << 8); + tsval |= (tcp_get_next_optbyte() << 16); + tsval |= (tcp_get_next_optbyte() << 24); + if (flags & TCP_SYN) { + pcb->ts_recent = lwip_ntohl(tsval); + /* Enable sending timestamps in every segment now that we know + the remote host supports it. */ + tcp_set_flags(pcb, TF_TIMESTAMP); + } else if (TCP_SEQ_BETWEEN(pcb->ts_lastacksent, seqno, seqno + tcplen)) { + pcb->ts_recent = lwip_ntohl(tsval); + } + /* Advance to next option (6 bytes already read) */ + tcp_optidx += LWIP_TCP_OPT_LEN_TS - 6; + break; +#endif /* LWIP_TCP_TIMESTAMPS */ +#if LWIP_TCP_SACK_OUT + case LWIP_TCP_OPT_SACK_PERM: + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_parseopt: SACK_PERM\n")); + if (tcp_get_next_optbyte() != LWIP_TCP_OPT_LEN_SACK_PERM || (tcp_optidx - 2 + LWIP_TCP_OPT_LEN_SACK_PERM) > tcphdr_optlen) { + /* Bad length */ + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_parseopt: bad length\n")); + return; + } + /* TCP SACK_PERM option with valid length */ + if (flags & TCP_SYN) { + /* We only set it if we receive it in a SYN (or SYN+ACK) packet */ + tcp_set_flags(pcb, TF_SACK); + } + break; +#endif /* LWIP_TCP_SACK_OUT */ + default: + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_parseopt: other\n")); + data = tcp_get_next_optbyte(); + if (data < 2) { + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_parseopt: bad length\n")); + /* If the length field is zero, the options are malformed + and we don't process them further. */ + return; + } + /* All other options have a length field, so that we easily + can skip past them. */ + tcp_optidx += data - 2; + } + } + } +} + +void +tcp_trigger_input_pcb_close(void) +{ + recv_flags |= TF_CLOSED; +} + +#if LWIP_TCP_SACK_OUT +/** + * Called by tcp_receive() to add new SACK entry. + * + * The new SACK entry will be placed at the beginning of rcv_sacks[], as the newest one. + * Existing SACK entries will be "pushed back", to preserve their order. + * This is the behavior described in RFC 2018, section 4. + * + * @param pcb the tcp_pcb for which a segment arrived + * @param left the left side of the SACK (the first sequence number) + * @param right the right side of the SACK (the first sequence number past this SACK) + */ +static void +tcp_add_sack(struct tcp_pcb *pcb, u32_t left, u32_t right) +{ + u8_t i; + u8_t unused_idx; + + if ((pcb->flags & TF_SACK) == 0 || !TCP_SEQ_LT(left, right)) { + return; + } + + /* First, let's remove all SACKs that are no longer needed (because they overlap with the newest one), + while moving all other SACKs forward. + We run this loop for all entries, until we find the first invalid one. + There is no point checking after that. */ + for (i = unused_idx = 0; (i < LWIP_TCP_MAX_SACK_NUM) && LWIP_TCP_SACK_VALID(pcb, i); ++i) { + /* We only want to use SACK at [i] if it doesn't overlap with left:right range. + It does not overlap if its right side is before the newly added SACK, + or if its left side is after the newly added SACK. + NOTE: The equality should not really happen, but it doesn't hurt. */ + if (TCP_SEQ_LEQ(pcb->rcv_sacks[i].right, left) || TCP_SEQ_LEQ(right, pcb->rcv_sacks[i].left)) { + if (unused_idx != i) { + /* We don't need to copy if it's already in the right spot */ + pcb->rcv_sacks[unused_idx] = pcb->rcv_sacks[i]; + } + ++unused_idx; + } + } + + /* Now 'unused_idx' is the index of the first invalid SACK entry, + anywhere between 0 (no valid entries) and LWIP_TCP_MAX_SACK_NUM (all entries are valid). + We want to clear this and all following SACKs. + However, we will be adding another one in the front (and shifting everything else back). + So let's just iterate from the back, and set each entry to the one to the left if it's valid, + or to 0 if it is not. */ + for (i = LWIP_TCP_MAX_SACK_NUM - 1; i > 0; --i) { + /* [i] is the index we are setting, and the value should be at index [i-1], + or 0 if that index is unused (>= unused_idx). */ + if (i - 1 >= unused_idx) { + /* [i-1] is unused. Let's clear [i]. */ + pcb->rcv_sacks[i].left = pcb->rcv_sacks[i].right = 0; + } else { + pcb->rcv_sacks[i] = pcb->rcv_sacks[i - 1]; + } + } + + /* And now we can store the newest SACK */ + pcb->rcv_sacks[0].left = left; + pcb->rcv_sacks[0].right = right; +} + +/** + * Called to remove a range of SACKs. + * + * SACK entries will be removed or adjusted to not acknowledge any sequence + * numbers that are less than 'seq' passed. It not only invalidates entries, + * but also moves all entries that are still valid to the beginning. + * + * @param pcb the tcp_pcb to modify + * @param seq the lowest sequence number to keep in SACK entries + */ +static void +tcp_remove_sacks_lt(struct tcp_pcb *pcb, u32_t seq) +{ + u8_t i; + u8_t unused_idx; + + /* We run this loop for all entries, until we find the first invalid one. + There is no point checking after that. */ + for (i = unused_idx = 0; (i < LWIP_TCP_MAX_SACK_NUM) && LWIP_TCP_SACK_VALID(pcb, i); ++i) { + /* We only want to use SACK at index [i] if its right side is > 'seq'. */ + if (TCP_SEQ_GT(pcb->rcv_sacks[i].right, seq)) { + if (unused_idx != i) { + /* We only copy it if it's not in the right spot already. */ + pcb->rcv_sacks[unused_idx] = pcb->rcv_sacks[i]; + } + /* NOTE: It is possible that its left side is < 'seq', in which case we should adjust it. */ + if (TCP_SEQ_LT(pcb->rcv_sacks[unused_idx].left, seq)) { + pcb->rcv_sacks[unused_idx].left = seq; + } + ++unused_idx; + } + } + + /* We also need to invalidate everything from 'unused_idx' till the end */ + for (i = unused_idx; i < LWIP_TCP_MAX_SACK_NUM; ++i) { + pcb->rcv_sacks[i].left = pcb->rcv_sacks[i].right = 0; + } +} + +#if defined(TCP_OOSEQ_BYTES_LIMIT) || defined(TCP_OOSEQ_PBUFS_LIMIT) +/** + * Called to remove a range of SACKs. + * + * SACK entries will be removed or adjusted to not acknowledge any sequence + * numbers that are greater than (or equal to) 'seq' passed. It not only invalidates entries, + * but also moves all entries that are still valid to the beginning. + * + * @param pcb the tcp_pcb to modify + * @param seq the highest sequence number to keep in SACK entries + */ +static void +tcp_remove_sacks_gt(struct tcp_pcb *pcb, u32_t seq) +{ + u8_t i; + u8_t unused_idx; + + /* We run this loop for all entries, until we find the first invalid one. + There is no point checking after that. */ + for (i = unused_idx = 0; (i < LWIP_TCP_MAX_SACK_NUM) && LWIP_TCP_SACK_VALID(pcb, i); ++i) { + /* We only want to use SACK at index [i] if its left side is < 'seq'. */ + if (TCP_SEQ_LT(pcb->rcv_sacks[i].left, seq)) { + if (unused_idx != i) { + /* We only copy it if it's not in the right spot already. */ + pcb->rcv_sacks[unused_idx] = pcb->rcv_sacks[i]; + } + /* NOTE: It is possible that its right side is > 'seq', in which case we should adjust it. */ + if (TCP_SEQ_GT(pcb->rcv_sacks[unused_idx].right, seq)) { + pcb->rcv_sacks[unused_idx].right = seq; + } + ++unused_idx; + } + } + + /* We also need to invalidate everything from 'unused_idx' till the end */ + for (i = unused_idx; i < LWIP_TCP_MAX_SACK_NUM; ++i) { + pcb->rcv_sacks[i].left = pcb->rcv_sacks[i].right = 0; + } +} +#endif /* TCP_OOSEQ_BYTES_LIMIT || TCP_OOSEQ_PBUFS_LIMIT */ + +#endif /* LWIP_TCP_SACK_OUT */ + +#endif /* LWIP_TCP */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/tcp_out.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/tcp_out.c new file mode 100644 index 0000000000000000000000000000000000000000..724df1097ca42f794253f49788188cd8b1871612 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/tcp_out.c @@ -0,0 +1,2190 @@ +/** + * @file + * Transmission Control Protocol, outgoing traffic + * + * The output functions of TCP. + * + * There are two distinct ways for TCP segments to get sent: + * - queued data: these are segments transferring data or segments containing + * SYN or FIN (which both count as one sequence number). They are created as + * struct @ref pbuf together with a struct tcp_seg and enqueue to the + * unsent list of the pcb. They are sent by tcp_output: + * - @ref tcp_write : creates data segments + * - @ref tcp_split_unsent_seg : splits a data segment + * - @ref tcp_enqueue_flags : creates SYN-only or FIN-only segments + * - @ref tcp_output / tcp_output_segment : finalize the tcp header + * (e.g. sequence numbers, options, checksum) and output to IP + * - the various tcp_rexmit functions shuffle around segments between the + * unsent an unacked lists to retransmit them + * - tcp_create_segment and tcp_pbuf_prealloc allocate pbuf and + * segment for these functions + * - direct send: these segments don't contain data but control the connection + * behaviour. They are created as pbuf only and sent directly without + * enqueueing them: + * - @ref tcp_send_empty_ack sends an ACK-only segment + * - @ref tcp_rst sends a RST segment + * - @ref tcp_keepalive sends a keepalive segment + * - @ref tcp_zero_window_probe sends a window probe segment + * - tcp_output_alloc_header allocates a header-only pbuf for these functions + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#include "lwip/opt.h" + +#if LWIP_TCP /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/priv/tcp_priv.h" +#include "lwip/def.h" +#include "lwip/mem.h" +#include "lwip/memp.h" +#include "lwip/ip_addr.h" +#include "lwip/netif.h" +#include "lwip/inet_chksum.h" +#include "lwip/stats.h" +#include "lwip/ip6.h" +#include "lwip/ip6_addr.h" +#if LWIP_TCP_TIMESTAMPS +#include "lwip/sys.h" +#endif + +#include + +#ifdef LWIP_HOOK_FILENAME +#include LWIP_HOOK_FILENAME +#endif + +/* Allow to add custom TCP header options by defining this hook */ +#ifdef LWIP_HOOK_TCP_OUT_TCPOPT_LENGTH +#define LWIP_TCP_OPT_LENGTH_SEGMENT(flags, pcb) LWIP_HOOK_TCP_OUT_TCPOPT_LENGTH(pcb, LWIP_TCP_OPT_LENGTH(flags)) +#else +#define LWIP_TCP_OPT_LENGTH_SEGMENT(flags, pcb) LWIP_TCP_OPT_LENGTH(flags) +#endif + +/* Define some copy-macros for checksum-on-copy so that the code looks + nicer by preventing too many ifdef's. */ +#if TCP_CHECKSUM_ON_COPY +#define TCP_DATA_COPY(dst, src, len, seg) do { \ + tcp_seg_add_chksum(LWIP_CHKSUM_COPY(dst, src, len), \ + len, &seg->chksum, &seg->chksum_swapped); \ + seg->flags |= TF_SEG_DATA_CHECKSUMMED; } while(0) +#define TCP_DATA_COPY2(dst, src, len, chksum, chksum_swapped) \ + tcp_seg_add_chksum(LWIP_CHKSUM_COPY(dst, src, len), len, chksum, chksum_swapped); +#else /* TCP_CHECKSUM_ON_COPY*/ +#define TCP_DATA_COPY(dst, src, len, seg) MEMCPY(dst, src, len) +#define TCP_DATA_COPY2(dst, src, len, chksum, chksum_swapped) MEMCPY(dst, src, len) +#endif /* TCP_CHECKSUM_ON_COPY*/ + +/** Define this to 1 for an extra check that the output checksum is valid + * (usefule when the checksum is generated by the application, not the stack) */ +#ifndef TCP_CHECKSUM_ON_COPY_SANITY_CHECK +#define TCP_CHECKSUM_ON_COPY_SANITY_CHECK 0 +#endif +/* Allow to override the failure of sanity check from warning to e.g. hard failure */ +#if TCP_CHECKSUM_ON_COPY_SANITY_CHECK +#ifndef TCP_CHECKSUM_ON_COPY_SANITY_CHECK_FAIL +#define TCP_CHECKSUM_ON_COPY_SANITY_CHECK_FAIL(msg) LWIP_DEBUGF(TCP_DEBUG | LWIP_DBG_LEVEL_WARNING, msg) +#endif +#endif + +#if TCP_OVERSIZE +/** The size of segment pbufs created when TCP_OVERSIZE is enabled */ +#ifndef TCP_OVERSIZE_CALC_LENGTH +#define TCP_OVERSIZE_CALC_LENGTH(length) ((length) + TCP_OVERSIZE) +#endif +#endif + +/* Forward declarations.*/ +static err_t tcp_output_segment(struct tcp_seg *seg, struct tcp_pcb *pcb, struct netif *netif); + +/* tcp_route: common code that returns a fixed bound netif or calls ip_route */ +static struct netif * +tcp_route(const struct tcp_pcb *pcb, const ip_addr_t *src, const ip_addr_t *dst) +{ + LWIP_UNUSED_ARG(src); /* in case IPv4-only and source-based routing is disabled */ + + if ((pcb != NULL) && (pcb->netif_idx != NETIF_NO_INDEX)) { + return netif_get_by_index(pcb->netif_idx); + } else { + return ip_route(src, dst); + } +} + +/** + * Create a TCP segment with prefilled header. + * + * Called by @ref tcp_write, @ref tcp_enqueue_flags and @ref tcp_split_unsent_seg + * + * @param pcb Protocol control block for the TCP connection. + * @param p pbuf that is used to hold the TCP header. + * @param hdrflags TCP flags for header. + * @param seqno TCP sequence number of this packet + * @param optflags options to include in TCP header + * @return a new tcp_seg pointing to p, or NULL. + * The TCP header is filled in except ackno and wnd. + * p is freed on failure. + */ +static struct tcp_seg * +tcp_create_segment(const struct tcp_pcb *pcb, struct pbuf *p, u8_t hdrflags, u32_t seqno, u8_t optflags) +{ + struct tcp_seg *seg; + u8_t optlen; + + LWIP_ASSERT("tcp_create_segment: invalid pcb", pcb != NULL); + LWIP_ASSERT("tcp_create_segment: invalid pbuf", p != NULL); + + optlen = LWIP_TCP_OPT_LENGTH_SEGMENT(optflags, pcb); + + if ((seg = (struct tcp_seg *)memp_malloc(MEMP_TCP_SEG)) == NULL) { + LWIP_DEBUGF(TCP_OUTPUT_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("tcp_create_segment: no memory.\n")); + pbuf_free(p); + return NULL; + } + seg->flags = optflags; + seg->next = NULL; + seg->p = p; + LWIP_ASSERT("p->tot_len >= optlen", p->tot_len >= optlen); + seg->len = p->tot_len - optlen; +#if TCP_OVERSIZE_DBGCHECK + seg->oversize_left = 0; +#endif /* TCP_OVERSIZE_DBGCHECK */ +#if TCP_CHECKSUM_ON_COPY + seg->chksum = 0; + seg->chksum_swapped = 0; + /* check optflags */ + LWIP_ASSERT("invalid optflags passed: TF_SEG_DATA_CHECKSUMMED", + (optflags & TF_SEG_DATA_CHECKSUMMED) == 0); +#endif /* TCP_CHECKSUM_ON_COPY */ + + /* build TCP header */ + if (pbuf_add_header(p, TCP_HLEN)) { + LWIP_DEBUGF(TCP_OUTPUT_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("tcp_create_segment: no room for TCP header in pbuf.\n")); + TCP_STATS_INC(tcp.err); + tcp_seg_free(seg); + return NULL; + } + seg->tcphdr = (struct tcp_hdr *)seg->p->payload; + seg->tcphdr->src = lwip_htons(pcb->local_port); + seg->tcphdr->dest = lwip_htons(pcb->remote_port); + seg->tcphdr->seqno = lwip_htonl(seqno); + /* ackno is set in tcp_output */ + TCPH_HDRLEN_FLAGS_SET(seg->tcphdr, (5 + optlen / 4), hdrflags); + /* wnd and chksum are set in tcp_output */ + seg->tcphdr->urgp = 0; + return seg; +} + +/** + * Allocate a PBUF_RAM pbuf, perhaps with extra space at the end. + * + * This function is like pbuf_alloc(layer, length, PBUF_RAM) except + * there may be extra bytes available at the end. + * + * Called by @ref tcp_write + * + * @param layer flag to define header size. + * @param length size of the pbuf's payload. + * @param max_length maximum usable size of payload+oversize. + * @param oversize pointer to a u16_t that will receive the number of usable tail bytes. + * @param pcb The TCP connection that will enqueue the pbuf. + * @param apiflags API flags given to tcp_write. + * @param first_seg true when this pbuf will be used in the first enqueued segment. + */ +#if TCP_OVERSIZE +static struct pbuf * +tcp_pbuf_prealloc(pbuf_layer layer, u16_t length, u16_t max_length, + u16_t *oversize, const struct tcp_pcb *pcb, u8_t apiflags, + u8_t first_seg) +{ + struct pbuf *p; + u16_t alloc = length; + + LWIP_ASSERT("tcp_pbuf_prealloc: invalid oversize", oversize != NULL); + LWIP_ASSERT("tcp_pbuf_prealloc: invalid pcb", pcb != NULL); + +#if LWIP_NETIF_TX_SINGLE_PBUF + LWIP_UNUSED_ARG(max_length); + LWIP_UNUSED_ARG(pcb); + LWIP_UNUSED_ARG(apiflags); + LWIP_UNUSED_ARG(first_seg); + alloc = max_length; +#else /* LWIP_NETIF_TX_SINGLE_PBUF */ + if (length < max_length) { + /* Should we allocate an oversized pbuf, or just the minimum + * length required? If tcp_write is going to be called again + * before this segment is transmitted, we want the oversized + * buffer. If the segment will be transmitted immediately, we can + * save memory by allocating only length. We use a simple + * heuristic based on the following information: + * + * Did the user set TCP_WRITE_FLAG_MORE? + * + * Will the Nagle algorithm defer transmission of this segment? + */ + if ((apiflags & TCP_WRITE_FLAG_MORE) || + (!(pcb->flags & TF_NODELAY) && + (!first_seg || + pcb->unsent != NULL || + pcb->unacked != NULL))) { + alloc = LWIP_MIN(max_length, LWIP_MEM_ALIGN_SIZE(TCP_OVERSIZE_CALC_LENGTH(length))); + } + } +#endif /* LWIP_NETIF_TX_SINGLE_PBUF */ + p = pbuf_alloc(layer, alloc, PBUF_RAM); + if (p == NULL) { + return NULL; + } + LWIP_ASSERT("need unchained pbuf", p->next == NULL); + *oversize = p->len - length; + /* trim p->len to the currently used size */ + p->len = p->tot_len = length; + return p; +} +#else /* TCP_OVERSIZE */ +#define tcp_pbuf_prealloc(layer, length, mx, os, pcb, api, fst) pbuf_alloc((layer), (length), PBUF_RAM) +#endif /* TCP_OVERSIZE */ + +#if TCP_CHECKSUM_ON_COPY +/** Add a checksum of newly added data to the segment. + * + * Called by tcp_write and tcp_split_unsent_seg. + */ +static void +tcp_seg_add_chksum(u16_t chksum, u16_t len, u16_t *seg_chksum, + u8_t *seg_chksum_swapped) +{ + u32_t helper; + /* add chksum to old chksum and fold to u16_t */ + helper = chksum + *seg_chksum; + chksum = FOLD_U32T(helper); + if ((len & 1) != 0) { + *seg_chksum_swapped = 1 - *seg_chksum_swapped; + chksum = SWAP_BYTES_IN_WORD(chksum); + } + *seg_chksum = chksum; +} +#endif /* TCP_CHECKSUM_ON_COPY */ + +/** Checks if tcp_write is allowed or not (checks state, snd_buf and snd_queuelen). + * + * @param pcb the tcp pcb to check for + * @param len length of data to send (checked agains snd_buf) + * @return ERR_OK if tcp_write is allowed to proceed, another err_t otherwise + */ +static err_t +tcp_write_checks(struct tcp_pcb *pcb, u16_t len) +{ + LWIP_ASSERT("tcp_write_checks: invalid pcb", pcb != NULL); + + /* connection is in invalid state for data transmission? */ + if ((pcb->state != ESTABLISHED) && + (pcb->state != CLOSE_WAIT) && + (pcb->state != SYN_SENT) && + (pcb->state != SYN_RCVD)) { + LWIP_DEBUGF(TCP_OUTPUT_DEBUG | LWIP_DBG_STATE | LWIP_DBG_LEVEL_SEVERE, ("tcp_write() called in invalid state\n")); + return ERR_CONN; + } else if (len == 0) { + return ERR_OK; + } + + /* fail on too much data */ + if (len > pcb->snd_buf) { + LWIP_DEBUGF(TCP_OUTPUT_DEBUG | LWIP_DBG_LEVEL_SEVERE, ("tcp_write: too much data (len=%"U16_F" > snd_buf=%"TCPWNDSIZE_F")\n", + len, pcb->snd_buf)); + tcp_set_flags(pcb, TF_NAGLEMEMERR); + return ERR_MEM; + } + + LWIP_DEBUGF(TCP_QLEN_DEBUG, ("tcp_write: queuelen: %"TCPWNDSIZE_F"\n", (tcpwnd_size_t)pcb->snd_queuelen)); + + /* If total number of pbufs on the unsent/unacked queues exceeds the + * configured maximum, return an error */ + /* check for configured max queuelen and possible overflow */ + if (pcb->snd_queuelen >= LWIP_MIN(TCP_SND_QUEUELEN, (TCP_SNDQUEUELEN_OVERFLOW + 1))) { + LWIP_DEBUGF(TCP_OUTPUT_DEBUG | LWIP_DBG_LEVEL_SEVERE, ("tcp_write: too long queue %"U16_F" (max %"U16_F")\n", + pcb->snd_queuelen, (u16_t)TCP_SND_QUEUELEN)); + TCP_STATS_INC(tcp.memerr); + tcp_set_flags(pcb, TF_NAGLEMEMERR); + return ERR_MEM; + } + if (pcb->snd_queuelen != 0) { + LWIP_ASSERT("tcp_write: pbufs on queue => at least one queue non-empty", + pcb->unacked != NULL || pcb->unsent != NULL); + } else { + LWIP_ASSERT("tcp_write: no pbufs on queue => both queues empty", + pcb->unacked == NULL && pcb->unsent == NULL); + } + return ERR_OK; +} + +/** + * @ingroup tcp_raw + * Write data for sending (but does not send it immediately). + * + * It waits in the expectation of more data being sent soon (as + * it can send them more efficiently by combining them together). + * To prompt the system to send data now, call tcp_output() after + * calling tcp_write(). + * + * This function enqueues the data pointed to by the argument dataptr. The length of + * the data is passed as the len parameter. The apiflags can be one or more of: + * - TCP_WRITE_FLAG_COPY: indicates whether the new memory should be allocated + * for the data to be copied into. If this flag is not given, no new memory + * should be allocated and the data should only be referenced by pointer. This + * also means that the memory behind dataptr must not change until the data is + * ACKed by the remote host + * - TCP_WRITE_FLAG_MORE: indicates that more data follows. If this is omitted, + * the PSH flag is set in the last segment created by this call to tcp_write. + * If this flag is given, the PSH flag is not set. + * + * The tcp_write() function will fail and return ERR_MEM if the length + * of the data exceeds the current send buffer size or if the length of + * the queue of outgoing segment is larger than the upper limit defined + * in lwipopts.h. The number of bytes available in the output queue can + * be retrieved with the tcp_sndbuf() function. + * + * The proper way to use this function is to call the function with at + * most tcp_sndbuf() bytes of data. If the function returns ERR_MEM, + * the application should wait until some of the currently enqueued + * data has been successfully received by the other host and try again. + * + * @param pcb Protocol control block for the TCP connection to enqueue data for. + * @param arg Pointer to the data to be enqueued for sending. + * @param len Data length in bytes + * @param apiflags combination of following flags : + * - TCP_WRITE_FLAG_COPY (0x01) data will be copied into memory belonging to the stack + * - TCP_WRITE_FLAG_MORE (0x02) for TCP connection, PSH flag will not be set on last segment sent, + * @return ERR_OK if enqueued, another err_t on error + */ +err_t +tcp_write(struct tcp_pcb *pcb, const void *arg, u16_t len, u8_t apiflags) +{ + struct pbuf *concat_p = NULL; + struct tcp_seg *last_unsent = NULL, *seg = NULL, *prev_seg = NULL, *queue = NULL; + u16_t pos = 0; /* position in 'arg' data */ + u16_t queuelen; + u8_t optlen; + u8_t optflags = 0; +#if TCP_OVERSIZE + u16_t oversize = 0; + u16_t oversize_used = 0; +#if TCP_OVERSIZE_DBGCHECK + u16_t oversize_add = 0; +#endif /* TCP_OVERSIZE_DBGCHECK*/ +#endif /* TCP_OVERSIZE */ + u16_t extendlen = 0; +#if TCP_CHECKSUM_ON_COPY + u16_t concat_chksum = 0; + u8_t concat_chksum_swapped = 0; + u16_t concat_chksummed = 0; +#endif /* TCP_CHECKSUM_ON_COPY */ + err_t err; + u16_t mss_local; + + LWIP_ERROR("tcp_write: invalid pcb", pcb != NULL, return ERR_ARG); + + /* don't allocate segments bigger than half the maximum window we ever received */ + mss_local = LWIP_MIN(pcb->mss, TCPWND_MIN16(pcb->snd_wnd_max / 2)); + mss_local = mss_local ? mss_local : pcb->mss; + + LWIP_ASSERT_CORE_LOCKED(); + +#if LWIP_NETIF_TX_SINGLE_PBUF + /* Always copy to try to create single pbufs for TX */ + apiflags |= TCP_WRITE_FLAG_COPY; +#endif /* LWIP_NETIF_TX_SINGLE_PBUF */ + + LWIP_DEBUGF(TCP_OUTPUT_DEBUG, ("tcp_write(pcb=%p, data=%p, len=%"U16_F", apiflags=%"U16_F")\n", + (void *)pcb, arg, len, (u16_t)apiflags)); + LWIP_ERROR("tcp_write: arg == NULL (programmer violates API)", + arg != NULL, return ERR_ARG;); + + err = tcp_write_checks(pcb, len); + if (err != ERR_OK) { + return err; + } + queuelen = pcb->snd_queuelen; + +#if LWIP_TCP_TIMESTAMPS + if ((pcb->flags & TF_TIMESTAMP)) { + /* Make sure the timestamp option is only included in data segments if we + agreed about it with the remote host. */ + optflags = TF_SEG_OPTS_TS; + optlen = LWIP_TCP_OPT_LENGTH_SEGMENT(TF_SEG_OPTS_TS, pcb); + /* ensure that segments can hold at least one data byte... */ + mss_local = LWIP_MAX(mss_local, LWIP_TCP_OPT_LEN_TS + 1); + } else +#endif /* LWIP_TCP_TIMESTAMPS */ + { + optlen = LWIP_TCP_OPT_LENGTH_SEGMENT(0, pcb); + } + + + /* + * TCP segmentation is done in three phases with increasing complexity: + * + * 1. Copy data directly into an oversized pbuf. + * 2. Chain a new pbuf to the end of pcb->unsent. + * 3. Create new segments. + * + * We may run out of memory at any point. In that case we must + * return ERR_MEM and not change anything in pcb. Therefore, all + * changes are recorded in local variables and committed at the end + * of the function. Some pcb fields are maintained in local copies: + * + * queuelen = pcb->snd_queuelen + * oversize = pcb->unsent_oversize + * + * These variables are set consistently by the phases: + * + * seg points to the last segment tampered with. + * + * pos records progress as data is segmented. + */ + + /* Find the tail of the unsent queue. */ + if (pcb->unsent != NULL) { + u16_t space; + u16_t unsent_optlen; + + /* @todo: this could be sped up by keeping last_unsent in the pcb */ + for (last_unsent = pcb->unsent; last_unsent->next != NULL; + last_unsent = last_unsent->next); + + /* Usable space at the end of the last unsent segment */ + unsent_optlen = LWIP_TCP_OPT_LENGTH_SEGMENT(last_unsent->flags, pcb); + LWIP_ASSERT("mss_local is too small", mss_local >= last_unsent->len + unsent_optlen); + space = mss_local - (last_unsent->len + unsent_optlen); + + /* + * Phase 1: Copy data directly into an oversized pbuf. + * + * The number of bytes copied is recorded in the oversize_used + * variable. The actual copying is done at the bottom of the + * function. + */ +#if TCP_OVERSIZE +#if TCP_OVERSIZE_DBGCHECK + /* check that pcb->unsent_oversize matches last_unsent->oversize_left */ + LWIP_ASSERT("unsent_oversize mismatch (pcb vs. last_unsent)", + pcb->unsent_oversize == last_unsent->oversize_left); +#endif /* TCP_OVERSIZE_DBGCHECK */ + oversize = pcb->unsent_oversize; + if (oversize > 0) { + LWIP_ASSERT("inconsistent oversize vs. space", oversize <= space); + seg = last_unsent; + oversize_used = LWIP_MIN(space, LWIP_MIN(oversize, len)); + pos += oversize_used; + oversize -= oversize_used; + space -= oversize_used; + } + /* now we are either finished or oversize is zero */ + LWIP_ASSERT("inconsistent oversize vs. len", (oversize == 0) || (pos == len)); +#endif /* TCP_OVERSIZE */ + +#if !LWIP_NETIF_TX_SINGLE_PBUF + /* + * Phase 2: Chain a new pbuf to the end of pcb->unsent. + * + * As an exception when NOT copying the data, if the given data buffer + * directly follows the last unsent data buffer in memory, extend the last + * ROM pbuf reference to the buffer, thus saving a ROM pbuf allocation. + * + * We don't extend segments containing SYN/FIN flags or options + * (len==0). The new pbuf is kept in concat_p and pbuf_cat'ed at + * the end. + * + * This phase is skipped for LWIP_NETIF_TX_SINGLE_PBUF as we could only execute + * it after rexmit puts a segment from unacked to unsent and at this point, + * oversize info is lost. + */ + if ((pos < len) && (space > 0) && (last_unsent->len > 0)) { + u16_t seglen = LWIP_MIN(space, len - pos); + seg = last_unsent; + + /* Create a pbuf with a copy or reference to seglen bytes. We + * can use PBUF_RAW here since the data appears in the middle of + * a segment. A header will never be prepended. */ + if (apiflags & TCP_WRITE_FLAG_COPY) { + /* Data is copied */ + if ((concat_p = tcp_pbuf_prealloc(PBUF_RAW, seglen, space, &oversize, pcb, apiflags, 1)) == NULL) { + LWIP_DEBUGF(TCP_OUTPUT_DEBUG | LWIP_DBG_LEVEL_SERIOUS, + ("tcp_write : could not allocate memory for pbuf copy size %"U16_F"\n", + seglen)); + goto memerr; + } +#if TCP_OVERSIZE_DBGCHECK + oversize_add = oversize; +#endif /* TCP_OVERSIZE_DBGCHECK */ + TCP_DATA_COPY2(concat_p->payload, (const u8_t *)arg + pos, seglen, &concat_chksum, &concat_chksum_swapped); +#if TCP_CHECKSUM_ON_COPY + concat_chksummed += seglen; +#endif /* TCP_CHECKSUM_ON_COPY */ + queuelen += pbuf_clen(concat_p); + } else { + /* Data is not copied */ + /* If the last unsent pbuf is of type PBUF_ROM, try to extend it. */ + struct pbuf *p; + for (p = last_unsent->p; p->next != NULL; p = p->next); + if (((p->type_internal & (PBUF_TYPE_FLAG_STRUCT_DATA_CONTIGUOUS | PBUF_TYPE_FLAG_DATA_VOLATILE)) == 0) && + (const u8_t *)p->payload + p->len == (const u8_t *)arg) { + LWIP_ASSERT("tcp_write: ROM pbufs cannot be oversized", pos == 0); + extendlen = seglen; + } else { + if ((concat_p = pbuf_alloc(PBUF_RAW, seglen, PBUF_ROM)) == NULL) { + LWIP_DEBUGF(TCP_OUTPUT_DEBUG | LWIP_DBG_LEVEL_SERIOUS, + ("tcp_write: could not allocate memory for zero-copy pbuf\n")); + goto memerr; + } + /* reference the non-volatile payload data */ + ((struct pbuf_rom *)concat_p)->payload = (const u8_t *)arg + pos; + queuelen += pbuf_clen(concat_p); + } +#if TCP_CHECKSUM_ON_COPY + /* calculate the checksum of nocopy-data */ + tcp_seg_add_chksum(~inet_chksum((const u8_t *)arg + pos, seglen), seglen, + &concat_chksum, &concat_chksum_swapped); + concat_chksummed += seglen; +#endif /* TCP_CHECKSUM_ON_COPY */ + } + + pos += seglen; + } +#endif /* !LWIP_NETIF_TX_SINGLE_PBUF */ + } else { +#if TCP_OVERSIZE + LWIP_ASSERT("unsent_oversize mismatch (pcb->unsent is NULL)", + pcb->unsent_oversize == 0); +#endif /* TCP_OVERSIZE */ + } + + /* + * Phase 3: Create new segments. + * + * The new segments are chained together in the local 'queue' + * variable, ready to be appended to pcb->unsent. + */ + while (pos < len) { + struct pbuf *p; + u16_t left = len - pos; + u16_t max_len = mss_local - optlen; + u16_t seglen = LWIP_MIN(left, max_len); +#if TCP_CHECKSUM_ON_COPY + u16_t chksum = 0; + u8_t chksum_swapped = 0; +#endif /* TCP_CHECKSUM_ON_COPY */ + + if (apiflags & TCP_WRITE_FLAG_COPY) { + /* If copy is set, memory should be allocated and data copied + * into pbuf */ + if ((p = tcp_pbuf_prealloc(PBUF_TRANSPORT, seglen + optlen, mss_local, &oversize, pcb, apiflags, queue == NULL)) == NULL) { + LWIP_DEBUGF(TCP_OUTPUT_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("tcp_write : could not allocate memory for pbuf copy size %"U16_F"\n", seglen)); + goto memerr; + } + LWIP_ASSERT("tcp_write: check that first pbuf can hold the complete seglen", + (p->len >= seglen)); + TCP_DATA_COPY2((char *)p->payload + optlen, (const u8_t *)arg + pos, seglen, &chksum, &chksum_swapped); + } else { + /* Copy is not set: First allocate a pbuf for holding the data. + * Since the referenced data is available at least until it is + * sent out on the link (as it has to be ACKed by the remote + * party) we can safely use PBUF_ROM instead of PBUF_REF here. + */ + struct pbuf *p2; +#if TCP_OVERSIZE + LWIP_ASSERT("oversize == 0", oversize == 0); +#endif /* TCP_OVERSIZE */ + if ((p2 = pbuf_alloc(PBUF_TRANSPORT, seglen, PBUF_ROM)) == NULL) { + LWIP_DEBUGF(TCP_OUTPUT_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("tcp_write: could not allocate memory for zero-copy pbuf\n")); + goto memerr; + } +#if TCP_CHECKSUM_ON_COPY + /* calculate the checksum of nocopy-data */ + chksum = ~inet_chksum((const u8_t *)arg + pos, seglen); + if (seglen & 1) { + chksum_swapped = 1; + chksum = SWAP_BYTES_IN_WORD(chksum); + } +#endif /* TCP_CHECKSUM_ON_COPY */ + /* reference the non-volatile payload data */ + ((struct pbuf_rom *)p2)->payload = (const u8_t *)arg + pos; + + /* Second, allocate a pbuf for the headers. */ + if ((p = pbuf_alloc(PBUF_TRANSPORT, optlen, PBUF_RAM)) == NULL) { + /* If allocation fails, we have to deallocate the data pbuf as + * well. */ + pbuf_free(p2); + LWIP_DEBUGF(TCP_OUTPUT_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("tcp_write: could not allocate memory for header pbuf\n")); + goto memerr; + } + /* Concatenate the headers and data pbufs together. */ + pbuf_cat(p/*header*/, p2/*data*/); + } + + queuelen += pbuf_clen(p); + + /* Now that there are more segments queued, we check again if the + * length of the queue exceeds the configured maximum or + * overflows. */ + if (queuelen > LWIP_MIN(TCP_SND_QUEUELEN, TCP_SNDQUEUELEN_OVERFLOW)) { + LWIP_DEBUGF(TCP_OUTPUT_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("tcp_write: queue too long %"U16_F" (%d)\n", + queuelen, (int)TCP_SND_QUEUELEN)); + pbuf_free(p); + goto memerr; + } + + if ((seg = tcp_create_segment(pcb, p, 0, pcb->snd_lbb + pos, optflags)) == NULL) { + goto memerr; + } +#if TCP_OVERSIZE_DBGCHECK + seg->oversize_left = oversize; +#endif /* TCP_OVERSIZE_DBGCHECK */ +#if TCP_CHECKSUM_ON_COPY + seg->chksum = chksum; + seg->chksum_swapped = chksum_swapped; + seg->flags |= TF_SEG_DATA_CHECKSUMMED; +#endif /* TCP_CHECKSUM_ON_COPY */ + + /* first segment of to-be-queued data? */ + if (queue == NULL) { + queue = seg; + } else { + /* Attach the segment to the end of the queued segments */ + LWIP_ASSERT("prev_seg != NULL", prev_seg != NULL); + prev_seg->next = seg; + } + /* remember last segment of to-be-queued data for next iteration */ + prev_seg = seg; + + LWIP_DEBUGF(TCP_OUTPUT_DEBUG | LWIP_DBG_TRACE, ("tcp_write: queueing %"U32_F":%"U32_F"\n", + lwip_ntohl(seg->tcphdr->seqno), + lwip_ntohl(seg->tcphdr->seqno) + TCP_TCPLEN(seg))); + + pos += seglen; + } + + /* + * All three segmentation phases were successful. We can commit the + * transaction. + */ +#if TCP_OVERSIZE_DBGCHECK + if ((last_unsent != NULL) && (oversize_add != 0)) { + last_unsent->oversize_left += oversize_add; + } +#endif /* TCP_OVERSIZE_DBGCHECK */ + + /* + * Phase 1: If data has been added to the preallocated tail of + * last_unsent, we update the length fields of the pbuf chain. + */ +#if TCP_OVERSIZE + if (oversize_used > 0) { + struct pbuf *p; + /* Bump tot_len of whole chain, len of tail */ + for (p = last_unsent->p; p; p = p->next) { + p->tot_len += oversize_used; + if (p->next == NULL) { + TCP_DATA_COPY((char *)p->payload + p->len, arg, oversize_used, last_unsent); + p->len += oversize_used; + } + } + last_unsent->len += oversize_used; +#if TCP_OVERSIZE_DBGCHECK + LWIP_ASSERT("last_unsent->oversize_left >= oversize_used", + last_unsent->oversize_left >= oversize_used); + last_unsent->oversize_left -= oversize_used; +#endif /* TCP_OVERSIZE_DBGCHECK */ + } + pcb->unsent_oversize = oversize; +#endif /* TCP_OVERSIZE */ + + /* + * Phase 2: concat_p can be concatenated onto last_unsent->p, unless we + * determined that the last ROM pbuf can be extended to include the new data. + */ + if (concat_p != NULL) { + LWIP_ASSERT("tcp_write: cannot concatenate when pcb->unsent is empty", + (last_unsent != NULL)); + pbuf_cat(last_unsent->p, concat_p); + last_unsent->len += concat_p->tot_len; + } else if (extendlen > 0) { + struct pbuf *p; + LWIP_ASSERT("tcp_write: extension of reference requires reference", + last_unsent != NULL && last_unsent->p != NULL); + for (p = last_unsent->p; p->next != NULL; p = p->next) { + p->tot_len += extendlen; + } + p->tot_len += extendlen; + p->len += extendlen; + last_unsent->len += extendlen; + } + +#if TCP_CHECKSUM_ON_COPY + if (concat_chksummed) { + LWIP_ASSERT("tcp_write: concat checksum needs concatenated data", + concat_p != NULL || extendlen > 0); + /*if concat checksumm swapped - swap it back */ + if (concat_chksum_swapped) { + concat_chksum = SWAP_BYTES_IN_WORD(concat_chksum); + } + tcp_seg_add_chksum(concat_chksum, concat_chksummed, &last_unsent->chksum, + &last_unsent->chksum_swapped); + last_unsent->flags |= TF_SEG_DATA_CHECKSUMMED; + } +#endif /* TCP_CHECKSUM_ON_COPY */ + + /* + * Phase 3: Append queue to pcb->unsent. Queue may be NULL, but that + * is harmless + */ + if (last_unsent == NULL) { + pcb->unsent = queue; + } else { + last_unsent->next = queue; + } + + /* + * Finally update the pcb state. + */ + pcb->snd_lbb += len; + pcb->snd_buf -= len; + pcb->snd_queuelen = queuelen; + + LWIP_DEBUGF(TCP_QLEN_DEBUG, ("tcp_write: %"S16_F" (after enqueued)\n", + pcb->snd_queuelen)); + if (pcb->snd_queuelen != 0) { + LWIP_ASSERT("tcp_write: valid queue length", + pcb->unacked != NULL || pcb->unsent != NULL); + } + + /* Set the PSH flag in the last segment that we enqueued. */ + if (seg != NULL && seg->tcphdr != NULL && ((apiflags & TCP_WRITE_FLAG_MORE) == 0)) { + TCPH_SET_FLAG(seg->tcphdr, TCP_PSH); + } + + return ERR_OK; +memerr: + tcp_set_flags(pcb, TF_NAGLEMEMERR); + TCP_STATS_INC(tcp.memerr); + + if (concat_p != NULL) { + pbuf_free(concat_p); + } + if (queue != NULL) { + tcp_segs_free(queue); + } + if (pcb->snd_queuelen != 0) { + LWIP_ASSERT("tcp_write: valid queue length", pcb->unacked != NULL || + pcb->unsent != NULL); + } + LWIP_DEBUGF(TCP_QLEN_DEBUG | LWIP_DBG_STATE, ("tcp_write: %"S16_F" (with mem err)\n", pcb->snd_queuelen)); + return ERR_MEM; +} + +/** + * Split segment on the head of the unsent queue. If return is not + * ERR_OK, existing head remains intact + * + * The split is accomplished by creating a new TCP segment and pbuf + * which holds the remainder payload after the split. The original + * pbuf is trimmed to new length. This allows splitting of read-only + * pbufs + * + * @param pcb the tcp_pcb for which to split the unsent head + * @param split the amount of payload to remain in the head + */ +err_t +tcp_split_unsent_seg(struct tcp_pcb *pcb, u16_t split) +{ + struct tcp_seg *seg = NULL, *useg = NULL; + struct pbuf *p = NULL; + u8_t optlen; + u8_t optflags; + u8_t split_flags; + u8_t remainder_flags; + u16_t remainder; + u16_t offset; +#if TCP_CHECKSUM_ON_COPY + u16_t chksum = 0; + u8_t chksum_swapped = 0; + struct pbuf *q; +#endif /* TCP_CHECKSUM_ON_COPY */ + + LWIP_ASSERT("tcp_split_unsent_seg: invalid pcb", pcb != NULL); + + useg = pcb->unsent; + if (useg == NULL) { + return ERR_MEM; + } + + if (split == 0) { + LWIP_ASSERT("Can't split segment into length 0", 0); + return ERR_VAL; + } + + if (useg->len <= split) { + return ERR_OK; + } + + LWIP_ASSERT("split <= mss", split <= pcb->mss); + LWIP_ASSERT("useg->len > 0", useg->len > 0); + + /* We should check that we don't exceed TCP_SND_QUEUELEN but we need + * to split this packet so we may actually exceed the max value by + * one! + */ + LWIP_DEBUGF(TCP_QLEN_DEBUG, ("tcp_enqueue: split_unsent_seg: %u\n", (unsigned int)pcb->snd_queuelen)); + + optflags = useg->flags; +#if TCP_CHECKSUM_ON_COPY + /* Remove since checksum is not stored until after tcp_create_segment() */ + optflags &= ~TF_SEG_DATA_CHECKSUMMED; +#endif /* TCP_CHECKSUM_ON_COPY */ + optlen = LWIP_TCP_OPT_LENGTH(optflags); + remainder = useg->len - split; + + /* Create new pbuf for the remainder of the split */ + p = pbuf_alloc(PBUF_TRANSPORT, remainder + optlen, PBUF_RAM); + if (p == NULL) { + LWIP_DEBUGF(TCP_OUTPUT_DEBUG | LWIP_DBG_LEVEL_SERIOUS, + ("tcp_split_unsent_seg: could not allocate memory for pbuf remainder %u\n", remainder)); + goto memerr; + } + + /* Offset into the original pbuf is past TCP/IP headers, options, and split amount */ + offset = useg->p->tot_len - useg->len + split; + /* Copy remainder into new pbuf, headers and options will not be filled out */ + if (pbuf_copy_partial(useg->p, (u8_t *)p->payload + optlen, remainder, offset ) != remainder) { + LWIP_DEBUGF(TCP_OUTPUT_DEBUG | LWIP_DBG_LEVEL_SERIOUS, + ("tcp_split_unsent_seg: could not copy pbuf remainder %u\n", remainder)); + goto memerr; + } +#if TCP_CHECKSUM_ON_COPY + /* calculate the checksum on remainder data */ + tcp_seg_add_chksum(~inet_chksum((const u8_t *)p->payload + optlen, remainder), remainder, + &chksum, &chksum_swapped); +#endif /* TCP_CHECKSUM_ON_COPY */ + + /* Options are created when calling tcp_output() */ + + /* Migrate flags from original segment */ + split_flags = TCPH_FLAGS(useg->tcphdr); + remainder_flags = 0; /* ACK added in tcp_output() */ + + if (split_flags & TCP_PSH) { + split_flags &= ~TCP_PSH; + remainder_flags |= TCP_PSH; + } + if (split_flags & TCP_FIN) { + split_flags &= ~TCP_FIN; + remainder_flags |= TCP_FIN; + } + /* SYN should be left on split, RST should not be present with data */ + + seg = tcp_create_segment(pcb, p, remainder_flags, lwip_ntohl(useg->tcphdr->seqno) + split, optflags); + if (seg == NULL) { + LWIP_DEBUGF(TCP_OUTPUT_DEBUG | LWIP_DBG_LEVEL_SERIOUS, + ("tcp_split_unsent_seg: could not create new TCP segment\n")); + goto memerr; + } + +#if TCP_CHECKSUM_ON_COPY + seg->chksum = chksum; + seg->chksum_swapped = chksum_swapped; + seg->flags |= TF_SEG_DATA_CHECKSUMMED; +#endif /* TCP_CHECKSUM_ON_COPY */ + + /* Remove this segment from the queue since trimming it may free pbufs */ + pcb->snd_queuelen -= pbuf_clen(useg->p); + + /* Trim the original pbuf into our split size. At this point our remainder segment must be setup + successfully because we are modifying the original segment */ + pbuf_realloc(useg->p, useg->p->tot_len - remainder); + useg->len -= remainder; + TCPH_SET_FLAG(useg->tcphdr, split_flags); +#if TCP_OVERSIZE_DBGCHECK + /* By trimming, realloc may have actually shrunk the pbuf, so clear oversize_left */ + useg->oversize_left = 0; +#endif /* TCP_OVERSIZE_DBGCHECK */ + + /* Add back to the queue with new trimmed pbuf */ + pcb->snd_queuelen += pbuf_clen(useg->p); + +#if TCP_CHECKSUM_ON_COPY + /* The checksum on the split segment is now incorrect. We need to re-run it over the split */ + useg->chksum = 0; + useg->chksum_swapped = 0; + q = useg->p; + offset = q->tot_len - useg->len; /* Offset due to exposed headers */ + + /* Advance to the pbuf where the offset ends */ + while (q != NULL && offset > q->len) { + offset -= q->len; + q = q->next; + } + LWIP_ASSERT("Found start of payload pbuf", q != NULL); + /* Checksum the first payload pbuf accounting for offset, then other pbufs are all payload */ + for (; q != NULL; offset = 0, q = q->next) { + tcp_seg_add_chksum(~inet_chksum((const u8_t *)q->payload + offset, q->len - offset), q->len - offset, + &useg->chksum, &useg->chksum_swapped); + } +#endif /* TCP_CHECKSUM_ON_COPY */ + + /* Update number of segments on the queues. Note that length now may + * exceed TCP_SND_QUEUELEN! We don't have to touch pcb->snd_buf + * because the total amount of data is constant when packet is split */ + pcb->snd_queuelen += pbuf_clen(seg->p); + + /* Finally insert remainder into queue after split (which stays head) */ + seg->next = useg->next; + useg->next = seg; + +#if TCP_OVERSIZE + /* If remainder is last segment on the unsent, ensure we clear the oversize amount + * because the remainder is always sized to the exact remaining amount */ + if (seg->next == NULL) { + pcb->unsent_oversize = 0; + } +#endif /* TCP_OVERSIZE */ + + return ERR_OK; +memerr: + TCP_STATS_INC(tcp.memerr); + + LWIP_ASSERT("seg == NULL", seg == NULL); + if (p != NULL) { + pbuf_free(p); + } + + return ERR_MEM; +} + +/** + * Called by tcp_close() to send a segment including FIN flag but not data. + * This FIN may be added to an existing segment or a new, otherwise empty + * segment is enqueued. + * + * @param pcb the tcp_pcb over which to send a segment + * @return ERR_OK if sent, another err_t otherwise + */ +err_t +tcp_send_fin(struct tcp_pcb *pcb) +{ + LWIP_ASSERT("tcp_send_fin: invalid pcb", pcb != NULL); + + /* first, try to add the fin to the last unsent segment */ + if (pcb->unsent != NULL) { + struct tcp_seg *last_unsent; + for (last_unsent = pcb->unsent; last_unsent->next != NULL; + last_unsent = last_unsent->next); + + if ((TCPH_FLAGS(last_unsent->tcphdr) & (TCP_SYN | TCP_FIN | TCP_RST)) == 0) { + /* no SYN/FIN/RST flag in the header, we can add the FIN flag */ + TCPH_SET_FLAG(last_unsent->tcphdr, TCP_FIN); + tcp_set_flags(pcb, TF_FIN); + return ERR_OK; + } + } + /* no data, no length, flags, copy=1, no optdata */ + return tcp_enqueue_flags(pcb, TCP_FIN); +} + +/** + * Enqueue SYN or FIN for transmission. + * + * Called by @ref tcp_connect, tcp_listen_input, and @ref tcp_close + * (via @ref tcp_send_fin) + * + * @param pcb Protocol control block for the TCP connection. + * @param flags TCP header flags to set in the outgoing segment. + */ +err_t +tcp_enqueue_flags(struct tcp_pcb *pcb, u8_t flags) +{ + struct pbuf *p; + struct tcp_seg *seg; + u8_t optflags = 0; + u8_t optlen = 0; + + LWIP_DEBUGF(TCP_QLEN_DEBUG, ("tcp_enqueue_flags: queuelen: %"U16_F"\n", (u16_t)pcb->snd_queuelen)); + + LWIP_ASSERT("tcp_enqueue_flags: need either TCP_SYN or TCP_FIN in flags (programmer violates API)", + (flags & (TCP_SYN | TCP_FIN)) != 0); + LWIP_ASSERT("tcp_enqueue_flags: invalid pcb", pcb != NULL); + + /* No need to check pcb->snd_queuelen if only SYN or FIN are allowed! */ + + /* Get options for this segment. This is a special case since this is the + only place where a SYN can be sent. */ + if (flags & TCP_SYN) { + optflags = TF_SEG_OPTS_MSS; +#if LWIP_WND_SCALE + if ((pcb->state != SYN_RCVD) || (pcb->flags & TF_WND_SCALE)) { + /* In a (sent in state SYN_RCVD), the window scale option may only + be sent if we received a window scale option from the remote host. */ + optflags |= TF_SEG_OPTS_WND_SCALE; + } +#endif /* LWIP_WND_SCALE */ +#if LWIP_TCP_SACK_OUT + if ((pcb->state != SYN_RCVD) || (pcb->flags & TF_SACK)) { + /* In a (sent in state SYN_RCVD), the SACK_PERM option may only + be sent if we received a SACK_PERM option from the remote host. */ + optflags |= TF_SEG_OPTS_SACK_PERM; + } +#endif /* LWIP_TCP_SACK_OUT */ + } +#if LWIP_TCP_TIMESTAMPS + if ((pcb->flags & TF_TIMESTAMP) || ((flags & TCP_SYN) && (pcb->state != SYN_RCVD))) { + /* Make sure the timestamp option is only included in data segments if we + agreed about it with the remote host (and in active open SYN segments). */ + optflags |= TF_SEG_OPTS_TS; + } +#endif /* LWIP_TCP_TIMESTAMPS */ + optlen = LWIP_TCP_OPT_LENGTH_SEGMENT(optflags, pcb); + + /* Allocate pbuf with room for TCP header + options */ + if ((p = pbuf_alloc(PBUF_TRANSPORT, optlen, PBUF_RAM)) == NULL) { + tcp_set_flags(pcb, TF_NAGLEMEMERR); + TCP_STATS_INC(tcp.memerr); + return ERR_MEM; + } + LWIP_ASSERT("tcp_enqueue_flags: check that first pbuf can hold optlen", + (p->len >= optlen)); + + /* Allocate memory for tcp_seg, and fill in fields. */ + if ((seg = tcp_create_segment(pcb, p, flags, pcb->snd_lbb, optflags)) == NULL) { + tcp_set_flags(pcb, TF_NAGLEMEMERR); + TCP_STATS_INC(tcp.memerr); + return ERR_MEM; + } + LWIP_ASSERT("seg->tcphdr not aligned", ((mem_ptr_t)seg->tcphdr % LWIP_MIN(MEM_ALIGNMENT, 4)) == 0); + LWIP_ASSERT("tcp_enqueue_flags: invalid segment length", seg->len == 0); + + LWIP_DEBUGF(TCP_OUTPUT_DEBUG | LWIP_DBG_TRACE, + ("tcp_enqueue_flags: queueing %"U32_F":%"U32_F" (0x%"X16_F")\n", + lwip_ntohl(seg->tcphdr->seqno), + lwip_ntohl(seg->tcphdr->seqno) + TCP_TCPLEN(seg), + (u16_t)flags)); + + /* Now append seg to pcb->unsent queue */ + if (pcb->unsent == NULL) { + pcb->unsent = seg; + } else { + struct tcp_seg *useg; + for (useg = pcb->unsent; useg->next != NULL; useg = useg->next); + useg->next = seg; + } +#if TCP_OVERSIZE + /* The new unsent tail has no space */ + pcb->unsent_oversize = 0; +#endif /* TCP_OVERSIZE */ + + /* SYN and FIN bump the sequence number */ + if ((flags & TCP_SYN) || (flags & TCP_FIN)) { + pcb->snd_lbb++; + /* optlen does not influence snd_buf */ + } + if (flags & TCP_FIN) { + tcp_set_flags(pcb, TF_FIN); + } + + /* update number of segments on the queues */ + pcb->snd_queuelen += pbuf_clen(seg->p); + LWIP_DEBUGF(TCP_QLEN_DEBUG, ("tcp_enqueue_flags: %"S16_F" (after enqueued)\n", pcb->snd_queuelen)); + if (pcb->snd_queuelen != 0) { + LWIP_ASSERT("tcp_enqueue_flags: invalid queue length", + pcb->unacked != NULL || pcb->unsent != NULL); + } + + return ERR_OK; +} + +#if LWIP_TCP_TIMESTAMPS +/* Build a timestamp option (12 bytes long) at the specified options pointer) + * + * @param pcb tcp_pcb + * @param opts option pointer where to store the timestamp option + */ +static void +tcp_build_timestamp_option(const struct tcp_pcb *pcb, u32_t *opts) +{ + LWIP_ASSERT("tcp_build_timestamp_option: invalid pcb", pcb != NULL); + + /* Pad with two NOP options to make everything nicely aligned */ + opts[0] = PP_HTONL(0x0101080A); + opts[1] = lwip_htonl(sys_now()); + opts[2] = lwip_htonl(pcb->ts_recent); +} +#endif + +#if LWIP_TCP_SACK_OUT +/** + * Calculates the number of SACK entries that should be generated. + * It takes into account whether TF_SACK flag is set, + * the number of SACK entries in tcp_pcb that are valid, + * as well as the available options size. + * + * @param pcb tcp_pcb + * @param optlen the length of other TCP options (in bytes) + * @return the number of SACK ranges that can be used + */ +static u8_t +tcp_get_num_sacks(const struct tcp_pcb *pcb, u8_t optlen) +{ + u8_t num_sacks = 0; + + LWIP_ASSERT("tcp_get_num_sacks: invalid pcb", pcb != NULL); + + if (pcb->flags & TF_SACK) { + u8_t i; + + /* The first SACK takes up 12 bytes (it includes SACK header and two NOP options), + each additional one - 8 bytes. */ + optlen += 12; + + /* Max options size = 40, number of SACK array entries = LWIP_TCP_MAX_SACK_NUM */ + for (i = 0; (i < LWIP_TCP_MAX_SACK_NUM) && (optlen <= TCP_MAX_OPTION_BYTES) && + LWIP_TCP_SACK_VALID(pcb, i); ++i) { + ++num_sacks; + optlen += 8; + } + } + + return num_sacks; +} + +/** Build a SACK option (12 or more bytes long) at the specified options pointer) + * + * @param pcb tcp_pcb + * @param opts option pointer where to store the SACK option + * @param num_sacks the number of SACKs to store + */ +static void +tcp_build_sack_option(const struct tcp_pcb *pcb, u32_t *opts, u8_t num_sacks) +{ + u8_t i; + + LWIP_ASSERT("tcp_build_sack_option: invalid pcb", pcb != NULL); + LWIP_ASSERT("tcp_build_sack_option: invalid opts", opts != NULL); + + /* Pad with two NOP options to make everything nicely aligned. + We add the length (of just the SACK option, not the NOPs in front of it), + which is 2B of header, plus 8B for each SACK. */ + *(opts++) = PP_HTONL(0x01010500 + 2 + num_sacks * 8); + + for (i = 0; i < num_sacks; ++i) { + *(opts++) = lwip_htonl(pcb->rcv_sacks[i].left); + *(opts++) = lwip_htonl(pcb->rcv_sacks[i].right); + } +} + +#endif + +#if LWIP_WND_SCALE +/** Build a window scale option (3 bytes long) at the specified options pointer) + * + * @param opts option pointer where to store the window scale option + */ +static void +tcp_build_wnd_scale_option(u32_t *opts) +{ + LWIP_ASSERT("tcp_build_wnd_scale_option: invalid opts", opts != NULL); + + /* Pad with one NOP option to make everything nicely aligned */ + opts[0] = PP_HTONL(0x01030300 | TCP_RCV_SCALE); +} +#endif + +/** + * @ingroup tcp_raw + * Find out what we can send and send it + * + * @param pcb Protocol control block for the TCP connection to send data + * @return ERR_OK if data has been sent or nothing to send + * another err_t on error + */ +err_t +tcp_output(struct tcp_pcb *pcb) +{ + struct tcp_seg *seg, *useg; + u32_t wnd, snd_nxt; + err_t err; + struct netif *netif; +#if TCP_CWND_DEBUG + s16_t i = 0; +#endif /* TCP_CWND_DEBUG */ + + LWIP_ASSERT_CORE_LOCKED(); + + LWIP_ASSERT("tcp_output: invalid pcb", pcb != NULL); + /* pcb->state LISTEN not allowed here */ + LWIP_ASSERT("don't call tcp_output for listen-pcbs", + pcb->state != LISTEN); + + /* First, check if we are invoked by the TCP input processing + code. If so, we do not output anything. Instead, we rely on the + input processing code to call us when input processing is done + with. */ + if (tcp_input_pcb == pcb) { + return ERR_OK; + } + + wnd = LWIP_MIN(pcb->snd_wnd, pcb->cwnd); + + seg = pcb->unsent; + + if (seg == NULL) { + LWIP_DEBUGF(TCP_OUTPUT_DEBUG, ("tcp_output: nothing to send (%p)\n", + (void *)pcb->unsent)); + LWIP_DEBUGF(TCP_CWND_DEBUG, ("tcp_output: snd_wnd %"TCPWNDSIZE_F + ", cwnd %"TCPWNDSIZE_F", wnd %"U32_F + ", seg == NULL, ack %"U32_F"\n", + pcb->snd_wnd, pcb->cwnd, wnd, pcb->lastack)); + + /* If the TF_ACK_NOW flag is set and the ->unsent queue is empty, construct + * an empty ACK segment and send it. */ + if (pcb->flags & TF_ACK_NOW) { + return tcp_send_empty_ack(pcb); + } + /* nothing to send: shortcut out of here */ + goto output_done; + } else { + LWIP_DEBUGF(TCP_CWND_DEBUG, + ("tcp_output: snd_wnd %"TCPWNDSIZE_F", cwnd %"TCPWNDSIZE_F", wnd %"U32_F + ", effwnd %"U32_F", seq %"U32_F", ack %"U32_F"\n", + pcb->snd_wnd, pcb->cwnd, wnd, + lwip_ntohl(seg->tcphdr->seqno) - pcb->lastack + seg->len, + lwip_ntohl(seg->tcphdr->seqno), pcb->lastack)); + } + + netif = tcp_route(pcb, &pcb->local_ip, &pcb->remote_ip); + if (netif == NULL) { + return ERR_RTE; + } + + /* If we don't have a local IP address, we get one from netif */ + if (ip_addr_isany(&pcb->local_ip)) { + const ip_addr_t *local_ip = ip_netif_get_local_ip(netif, &pcb->remote_ip); + if (local_ip == NULL) { + return ERR_RTE; + } + ip_addr_copy(pcb->local_ip, *local_ip); + } + + /* Handle the current segment not fitting within the window */ + if (lwip_ntohl(seg->tcphdr->seqno) - pcb->lastack + seg->len > wnd) { + /* We need to start the persistent timer when the next unsent segment does not fit + * within the remaining (could be 0) send window and RTO timer is not running (we + * have no in-flight data). If window is still too small after persist timer fires, + * then we split the segment. We don't consider the congestion window since a cwnd + * smaller than 1 SMSS implies in-flight data + */ + if (wnd == pcb->snd_wnd && pcb->unacked == NULL && pcb->persist_backoff == 0) { + pcb->persist_cnt = 0; + pcb->persist_backoff = 1; + pcb->persist_probe = 0; + } + /* We need an ACK, but can't send data now, so send an empty ACK */ + if (pcb->flags & TF_ACK_NOW) { + return tcp_send_empty_ack(pcb); + } + goto output_done; + } + /* Stop persist timer, above conditions are not active */ + pcb->persist_backoff = 0; + + /* useg should point to last segment on unacked queue */ + useg = pcb->unacked; + if (useg != NULL) { + for (; useg->next != NULL; useg = useg->next); + } + /* data available and window allows it to be sent? */ + while (seg != NULL && + lwip_ntohl(seg->tcphdr->seqno) - pcb->lastack + seg->len <= wnd) { + LWIP_ASSERT("RST not expected here!", + (TCPH_FLAGS(seg->tcphdr) & TCP_RST) == 0); + /* Stop sending if the nagle algorithm would prevent it + * Don't stop: + * - if tcp_write had a memory error before (prevent delayed ACK timeout) or + * - if FIN was already enqueued for this PCB (SYN is always alone in a segment - + * either seg->next != NULL or pcb->unacked == NULL; + * RST is no sent using tcp_write/tcp_output. + */ + if ((tcp_do_output_nagle(pcb) == 0) && + ((pcb->flags & (TF_NAGLEMEMERR | TF_FIN)) == 0)) { + break; + } +#if TCP_CWND_DEBUG + LWIP_DEBUGF(TCP_CWND_DEBUG, ("tcp_output: snd_wnd %"TCPWNDSIZE_F", cwnd %"TCPWNDSIZE_F", wnd %"U32_F", effwnd %"U32_F", seq %"U32_F", ack %"U32_F", i %"S16_F"\n", + pcb->snd_wnd, pcb->cwnd, wnd, + lwip_ntohl(seg->tcphdr->seqno) + seg->len - + pcb->lastack, + lwip_ntohl(seg->tcphdr->seqno), pcb->lastack, i)); + ++i; +#endif /* TCP_CWND_DEBUG */ + + if (pcb->state != SYN_SENT) { + TCPH_SET_FLAG(seg->tcphdr, TCP_ACK); + } + + err = tcp_output_segment(seg, pcb, netif); + if (err != ERR_OK) { + /* segment could not be sent, for whatever reason */ + tcp_set_flags(pcb, TF_NAGLEMEMERR); + return err; + } +#if TCP_OVERSIZE_DBGCHECK + seg->oversize_left = 0; +#endif /* TCP_OVERSIZE_DBGCHECK */ + pcb->unsent = seg->next; + if (pcb->state != SYN_SENT) { + tcp_clear_flags(pcb, TF_ACK_DELAY | TF_ACK_NOW); + } + snd_nxt = lwip_ntohl(seg->tcphdr->seqno) + TCP_TCPLEN(seg); + if (TCP_SEQ_LT(pcb->snd_nxt, snd_nxt)) { + pcb->snd_nxt = snd_nxt; + } + /* put segment on unacknowledged list if length > 0 */ + if (TCP_TCPLEN(seg) > 0) { + seg->next = NULL; + /* unacked list is empty? */ + if (pcb->unacked == NULL) { + pcb->unacked = seg; + useg = seg; + /* unacked list is not empty? */ + } else { + /* In the case of fast retransmit, the packet should not go to the tail + * of the unacked queue, but rather somewhere before it. We need to check for + * this case. -STJ Jul 27, 2004 */ + if (TCP_SEQ_LT(lwip_ntohl(seg->tcphdr->seqno), lwip_ntohl(useg->tcphdr->seqno))) { + /* add segment to before tail of unacked list, keeping the list sorted */ + struct tcp_seg **cur_seg = &(pcb->unacked); + while (*cur_seg && + TCP_SEQ_LT(lwip_ntohl((*cur_seg)->tcphdr->seqno), lwip_ntohl(seg->tcphdr->seqno))) { + cur_seg = &((*cur_seg)->next ); + } + seg->next = (*cur_seg); + (*cur_seg) = seg; + } else { + /* add segment to tail of unacked list */ + useg->next = seg; + useg = useg->next; + } + } + /* do not queue empty segments on the unacked list */ + } else { + tcp_seg_free(seg); + } + seg = pcb->unsent; + } +#if TCP_OVERSIZE + if (pcb->unsent == NULL) { + /* last unsent has been removed, reset unsent_oversize */ + pcb->unsent_oversize = 0; + } +#endif /* TCP_OVERSIZE */ + +output_done: + tcp_clear_flags(pcb, TF_NAGLEMEMERR); + return ERR_OK; +} + +/** Check if a segment's pbufs are used by someone else than TCP. + * This can happen on retransmission if the pbuf of this segment is still + * referenced by the netif driver due to deferred transmission. + * This is the case (only!) if someone down the TX call path called + * pbuf_ref() on one of the pbufs! + * + * @arg seg the tcp segment to check + * @return 1 if ref != 1, 0 if ref == 1 + */ +static int +tcp_output_segment_busy(const struct tcp_seg *seg) +{ + LWIP_ASSERT("tcp_output_segment_busy: invalid seg", seg != NULL); + + /* We only need to check the first pbuf here: + If a pbuf is queued for transmission, a driver calls pbuf_ref(), + which only changes the ref count of the first pbuf */ + if (seg->p->ref != 1) { + /* other reference found */ + return 1; + } + /* no other references found */ + return 0; +} + +/** + * Called by tcp_output() to actually send a TCP segment over IP. + * + * @param seg the tcp_seg to send + * @param pcb the tcp_pcb for the TCP connection used to send the segment + * @param netif the netif used to send the segment + */ +static err_t +tcp_output_segment(struct tcp_seg *seg, struct tcp_pcb *pcb, struct netif *netif) +{ + err_t err; + u16_t len; + u32_t *opts; +#if TCP_CHECKSUM_ON_COPY + int seg_chksum_was_swapped = 0; +#endif + + LWIP_ASSERT("tcp_output_segment: invalid seg", seg != NULL); + LWIP_ASSERT("tcp_output_segment: invalid pcb", pcb != NULL); + LWIP_ASSERT("tcp_output_segment: invalid netif", netif != NULL); + + if (tcp_output_segment_busy(seg)) { + /* This should not happen: rexmit functions should have checked this. + However, since this function modifies p->len, we must not continue in this case. */ + LWIP_DEBUGF(TCP_RTO_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("tcp_output_segment: segment busy\n")); + return ERR_OK; + } + + /* The TCP header has already been constructed, but the ackno and + wnd fields remain. */ + seg->tcphdr->ackno = lwip_htonl(pcb->rcv_nxt); + + /* advertise our receive window size in this TCP segment */ +#if LWIP_WND_SCALE + if (seg->flags & TF_SEG_OPTS_WND_SCALE) { + /* The Window field in a SYN segment itself (the only type where we send + the window scale option) is never scaled. */ + seg->tcphdr->wnd = lwip_htons(TCPWND_MIN16(pcb->rcv_ann_wnd)); + } else +#endif /* LWIP_WND_SCALE */ + { + seg->tcphdr->wnd = lwip_htons(TCPWND_MIN16(RCV_WND_SCALE(pcb, pcb->rcv_ann_wnd))); + } + + pcb->rcv_ann_right_edge = pcb->rcv_nxt + pcb->rcv_ann_wnd; + + /* Add any requested options. NB MSS option is only set on SYN + packets, so ignore it here */ + /* cast through void* to get rid of alignment warnings */ + opts = (u32_t *)(void *)(seg->tcphdr + 1); + if (seg->flags & TF_SEG_OPTS_MSS) { + u16_t mss; +#if TCP_CALCULATE_EFF_SEND_MSS + mss = tcp_eff_send_mss_netif(TCP_MSS, netif, &pcb->remote_ip); +#else /* TCP_CALCULATE_EFF_SEND_MSS */ + mss = TCP_MSS; +#endif /* TCP_CALCULATE_EFF_SEND_MSS */ + *opts = TCP_BUILD_MSS_OPTION(mss); + opts += 1; + } +#if LWIP_TCP_TIMESTAMPS + pcb->ts_lastacksent = pcb->rcv_nxt; + + if (seg->flags & TF_SEG_OPTS_TS) { + tcp_build_timestamp_option(pcb, opts); + opts += 3; + } +#endif +#if LWIP_WND_SCALE + if (seg->flags & TF_SEG_OPTS_WND_SCALE) { + tcp_build_wnd_scale_option(opts); + opts += 1; + } +#endif +#if LWIP_TCP_SACK_OUT + if (seg->flags & TF_SEG_OPTS_SACK_PERM) { + /* Pad with two NOP options to make everything nicely aligned + * NOTE: When we send both timestamp and SACK_PERM options, + * we could use the first two NOPs before the timestamp to store SACK_PERM option, + * but that would complicate the code. + */ + *(opts++) = PP_HTONL(0x01010402); + } +#endif + + /* Set retransmission timer running if it is not currently enabled + This must be set before checking the route. */ + if (pcb->rtime < 0) { + pcb->rtime = 0; + } + + if (pcb->rttest == 0) { + pcb->rttest = tcp_ticks; + pcb->rtseq = lwip_ntohl(seg->tcphdr->seqno); + + LWIP_DEBUGF(TCP_RTO_DEBUG, ("tcp_output_segment: rtseq %"U32_F"\n", pcb->rtseq)); + } + LWIP_DEBUGF(TCP_OUTPUT_DEBUG, ("tcp_output_segment: %"U32_F":%"U32_F"\n", + lwip_htonl(seg->tcphdr->seqno), lwip_htonl(seg->tcphdr->seqno) + + seg->len)); + + len = (u16_t)((u8_t *)seg->tcphdr - (u8_t *)seg->p->payload); + if (len == 0) { + /** Exclude retransmitted segments from this count. */ + MIB2_STATS_INC(mib2.tcpoutsegs); + } + + seg->p->len -= len; + seg->p->tot_len -= len; + + seg->p->payload = seg->tcphdr; + + seg->tcphdr->chksum = 0; + +#ifdef LWIP_HOOK_TCP_OUT_ADD_TCPOPTS + opts = LWIP_HOOK_TCP_OUT_ADD_TCPOPTS(seg->p, seg->tcphdr, pcb, opts); +#endif + LWIP_ASSERT("options not filled", (u8_t *)opts == ((u8_t *)(seg->tcphdr + 1)) + LWIP_TCP_OPT_LENGTH_SEGMENT(seg->flags, pcb)); + +#if CHECKSUM_GEN_TCP + IF__NETIF_CHECKSUM_ENABLED(netif, NETIF_CHECKSUM_GEN_TCP) { +#if TCP_CHECKSUM_ON_COPY + u32_t acc; +#if TCP_CHECKSUM_ON_COPY_SANITY_CHECK + u16_t chksum_slow = ip_chksum_pseudo(seg->p, IP_PROTO_TCP, + seg->p->tot_len, &pcb->local_ip, &pcb->remote_ip); +#endif /* TCP_CHECKSUM_ON_COPY_SANITY_CHECK */ + if ((seg->flags & TF_SEG_DATA_CHECKSUMMED) == 0) { + LWIP_ASSERT("data included but not checksummed", + seg->p->tot_len == TCPH_HDRLEN_BYTES(seg->tcphdr)); + } + + /* rebuild TCP header checksum (TCP header changes for retransmissions!) */ + acc = ip_chksum_pseudo_partial(seg->p, IP_PROTO_TCP, + seg->p->tot_len, TCPH_HDRLEN_BYTES(seg->tcphdr), &pcb->local_ip, &pcb->remote_ip); + /* add payload checksum */ + if (seg->chksum_swapped) { + seg_chksum_was_swapped = 1; + seg->chksum = SWAP_BYTES_IN_WORD(seg->chksum); + seg->chksum_swapped = 0; + } + acc = (u16_t)~acc + seg->chksum; + seg->tcphdr->chksum = (u16_t)~FOLD_U32T(acc); +#if TCP_CHECKSUM_ON_COPY_SANITY_CHECK + if (chksum_slow != seg->tcphdr->chksum) { + TCP_CHECKSUM_ON_COPY_SANITY_CHECK_FAIL( + ("tcp_output_segment: calculated checksum is %"X16_F" instead of %"X16_F"\n", + seg->tcphdr->chksum, chksum_slow)); + seg->tcphdr->chksum = chksum_slow; + } +#endif /* TCP_CHECKSUM_ON_COPY_SANITY_CHECK */ +#else /* TCP_CHECKSUM_ON_COPY */ + seg->tcphdr->chksum = ip_chksum_pseudo(seg->p, IP_PROTO_TCP, + seg->p->tot_len, &pcb->local_ip, &pcb->remote_ip); +#endif /* TCP_CHECKSUM_ON_COPY */ + } +#endif /* CHECKSUM_GEN_TCP */ + TCP_STATS_INC(tcp.xmit); + + NETIF_SET_HINTS(netif, &(pcb->netif_hints)); + err = ip_output_if(seg->p, &pcb->local_ip, &pcb->remote_ip, pcb->ttl, + pcb->tos, IP_PROTO_TCP, netif); + NETIF_RESET_HINTS(netif); + +#if TCP_CHECKSUM_ON_COPY + if (seg_chksum_was_swapped) { + /* if data is added to this segment later, chksum needs to be swapped, + so restore this now */ + seg->chksum = SWAP_BYTES_IN_WORD(seg->chksum); + seg->chksum_swapped = 1; + } +#endif + + return err; +} + +/** + * Requeue all unacked segments for retransmission + * + * Called by tcp_slowtmr() for slow retransmission. + * + * @param pcb the tcp_pcb for which to re-enqueue all unacked segments + */ +err_t +tcp_rexmit_rto_prepare(struct tcp_pcb *pcb) +{ + struct tcp_seg *seg; + + LWIP_ASSERT("tcp_rexmit_rto_prepare: invalid pcb", pcb != NULL); + + if (pcb->unacked == NULL) { + return ERR_VAL; + } + + /* Move all unacked segments to the head of the unsent queue. + However, give up if any of the unsent pbufs are still referenced by the + netif driver due to deferred transmission. No point loading the link further + if it is struggling to flush its buffered writes. */ + for (seg = pcb->unacked; seg->next != NULL; seg = seg->next) { + if (tcp_output_segment_busy(seg)) { + LWIP_DEBUGF(TCP_RTO_DEBUG, ("tcp_rexmit_rto: segment busy\n")); + return ERR_VAL; + } + } + if (tcp_output_segment_busy(seg)) { + LWIP_DEBUGF(TCP_RTO_DEBUG, ("tcp_rexmit_rto: segment busy\n")); + return ERR_VAL; + } + /* concatenate unsent queue after unacked queue */ + seg->next = pcb->unsent; +#if TCP_OVERSIZE_DBGCHECK + /* if last unsent changed, we need to update unsent_oversize */ + if (pcb->unsent == NULL) { + pcb->unsent_oversize = seg->oversize_left; + } +#endif /* TCP_OVERSIZE_DBGCHECK */ + /* unsent queue is the concatenated queue (of unacked, unsent) */ + pcb->unsent = pcb->unacked; + /* unacked queue is now empty */ + pcb->unacked = NULL; + + /* Mark RTO in-progress */ + tcp_set_flags(pcb, TF_RTO); + /* Record the next byte following retransmit */ + pcb->rto_end = lwip_ntohl(seg->tcphdr->seqno) + TCP_TCPLEN(seg); + /* Don't take any RTT measurements after retransmitting. */ + pcb->rttest = 0; + + return ERR_OK; +} + +/** + * Requeue all unacked segments for retransmission + * + * Called by tcp_slowtmr() for slow retransmission. + * + * @param pcb the tcp_pcb for which to re-enqueue all unacked segments + */ +void +tcp_rexmit_rto_commit(struct tcp_pcb *pcb) +{ + LWIP_ASSERT("tcp_rexmit_rto_commit: invalid pcb", pcb != NULL); + + /* increment number of retransmissions */ + if (pcb->nrtx < 0xFF) { + ++pcb->nrtx; + } + /* Do the actual retransmission */ + tcp_output(pcb); +} + +/** + * Requeue all unacked segments for retransmission + * + * Called by tcp_process() only, tcp_slowtmr() needs to do some things between + * "prepare" and "commit". + * + * @param pcb the tcp_pcb for which to re-enqueue all unacked segments + */ +void +tcp_rexmit_rto(struct tcp_pcb *pcb) +{ + LWIP_ASSERT("tcp_rexmit_rto: invalid pcb", pcb != NULL); + + if (tcp_rexmit_rto_prepare(pcb) == ERR_OK) { + tcp_rexmit_rto_commit(pcb); + } +} + +/** + * Requeue the first unacked segment for retransmission + * + * Called by tcp_receive() for fast retransmit. + * + * @param pcb the tcp_pcb for which to retransmit the first unacked segment + */ +err_t +tcp_rexmit(struct tcp_pcb *pcb) +{ + struct tcp_seg *seg; + struct tcp_seg **cur_seg; + + LWIP_ASSERT("tcp_rexmit: invalid pcb", pcb != NULL); + + if (pcb->unacked == NULL) { + return ERR_VAL; + } + + seg = pcb->unacked; + + /* Give up if the segment is still referenced by the netif driver + due to deferred transmission. */ + if (tcp_output_segment_busy(seg)) { + LWIP_DEBUGF(TCP_RTO_DEBUG, ("tcp_rexmit busy\n")); + return ERR_VAL; + } + + /* Move the first unacked segment to the unsent queue */ + /* Keep the unsent queue sorted. */ + pcb->unacked = seg->next; + + cur_seg = &(pcb->unsent); + while (*cur_seg && + TCP_SEQ_LT(lwip_ntohl((*cur_seg)->tcphdr->seqno), lwip_ntohl(seg->tcphdr->seqno))) { + cur_seg = &((*cur_seg)->next ); + } + seg->next = *cur_seg; + *cur_seg = seg; +#if TCP_OVERSIZE + if (seg->next == NULL) { + /* the retransmitted segment is last in unsent, so reset unsent_oversize */ + pcb->unsent_oversize = 0; + } +#endif /* TCP_OVERSIZE */ + + if (pcb->nrtx < 0xFF) { + ++pcb->nrtx; + } + + /* Don't take any rtt measurements after retransmitting. */ + pcb->rttest = 0; + + /* Do the actual retransmission. */ + MIB2_STATS_INC(mib2.tcpretranssegs); + /* No need to call tcp_output: we are always called from tcp_input() + and thus tcp_output directly returns. */ + return ERR_OK; +} + + +/** + * Handle retransmission after three dupacks received + * + * @param pcb the tcp_pcb for which to retransmit the first unacked segment + */ +void +tcp_rexmit_fast(struct tcp_pcb *pcb) +{ + LWIP_ASSERT("tcp_rexmit_fast: invalid pcb", pcb != NULL); + + if (pcb->unacked != NULL && !(pcb->flags & TF_INFR)) { + /* This is fast retransmit. Retransmit the first unacked segment. */ + LWIP_DEBUGF(TCP_FR_DEBUG, + ("tcp_receive: dupacks %"U16_F" (%"U32_F + "), fast retransmit %"U32_F"\n", + (u16_t)pcb->dupacks, pcb->lastack, + lwip_ntohl(pcb->unacked->tcphdr->seqno))); + if (tcp_rexmit(pcb) == ERR_OK) { + /* Set ssthresh to half of the minimum of the current + * cwnd and the advertised window */ + pcb->ssthresh = LWIP_MIN(pcb->cwnd, pcb->snd_wnd) / 2; + + /* The minimum value for ssthresh should be 2 MSS */ + if (pcb->ssthresh < (2U * pcb->mss)) { + LWIP_DEBUGF(TCP_FR_DEBUG, + ("tcp_receive: The minimum value for ssthresh %"TCPWNDSIZE_F + " should be min 2 mss %"U16_F"...\n", + pcb->ssthresh, (u16_t)(2 * pcb->mss))); + pcb->ssthresh = 2 * pcb->mss; + } + + pcb->cwnd = pcb->ssthresh + 3 * pcb->mss; + tcp_set_flags(pcb, TF_INFR); + + /* Reset the retransmission timer to prevent immediate rto retransmissions */ + pcb->rtime = 0; + } + } +} + +static struct pbuf * +tcp_output_alloc_header_common(u32_t ackno, u16_t optlen, u16_t datalen, + u32_t seqno_be /* already in network byte order */, + u16_t src_port, u16_t dst_port, u8_t flags, u16_t wnd) +{ + struct tcp_hdr *tcphdr; + struct pbuf *p; + + p = pbuf_alloc(PBUF_IP, TCP_HLEN + optlen + datalen, PBUF_RAM); + if (p != NULL) { + LWIP_ASSERT("check that first pbuf can hold struct tcp_hdr", + (p->len >= TCP_HLEN + optlen)); + tcphdr = (struct tcp_hdr *)p->payload; + tcphdr->src = lwip_htons(src_port); + tcphdr->dest = lwip_htons(dst_port); + tcphdr->seqno = seqno_be; + tcphdr->ackno = lwip_htonl(ackno); + TCPH_HDRLEN_FLAGS_SET(tcphdr, (5 + optlen / 4), flags); + tcphdr->wnd = lwip_htons(wnd); + tcphdr->chksum = 0; + tcphdr->urgp = 0; + } + return p; +} + +/** Allocate a pbuf and create a tcphdr at p->payload, used for output + * functions other than the default tcp_output -> tcp_output_segment + * (e.g. tcp_send_empty_ack, etc.) + * + * @param pcb tcp pcb for which to send a packet (used to initialize tcp_hdr) + * @param optlen length of header-options + * @param datalen length of tcp data to reserve in pbuf + * @param seqno_be seqno in network byte order (big-endian) + * @return pbuf with p->payload being the tcp_hdr + */ +static struct pbuf * +tcp_output_alloc_header(struct tcp_pcb *pcb, u16_t optlen, u16_t datalen, + u32_t seqno_be /* already in network byte order */) +{ + struct pbuf *p; + + LWIP_ASSERT("tcp_output_alloc_header: invalid pcb", pcb != NULL); + + p = tcp_output_alloc_header_common(pcb->rcv_nxt, optlen, datalen, + seqno_be, pcb->local_port, pcb->remote_port, TCP_ACK, + TCPWND_MIN16(RCV_WND_SCALE(pcb, pcb->rcv_ann_wnd))); + if (p != NULL) { + /* If we're sending a packet, update the announced right window edge */ + pcb->rcv_ann_right_edge = pcb->rcv_nxt + pcb->rcv_ann_wnd; + } + return p; +} + +/* Fill in options for control segments */ +static void +tcp_output_fill_options(const struct tcp_pcb *pcb, struct pbuf *p, u8_t optflags, u8_t num_sacks) +{ + struct tcp_hdr *tcphdr; + u32_t *opts; + u16_t sacks_len = 0; + + LWIP_ASSERT("tcp_output_fill_options: invalid pbuf", p != NULL); + + tcphdr = (struct tcp_hdr *)p->payload; + opts = (u32_t *)(void *)(tcphdr + 1); + + /* NB. MSS and window scale options are only sent on SYNs, so ignore them here */ + +#if LWIP_TCP_TIMESTAMPS + if (optflags & TF_SEG_OPTS_TS) { + tcp_build_timestamp_option(pcb, opts); + opts += 3; + } +#endif + +#if LWIP_TCP_SACK_OUT + if (pcb && (num_sacks > 0)) { + tcp_build_sack_option(pcb, opts, num_sacks); + /* 1 word for SACKs header (including 2xNOP), and 2 words for each SACK */ + sacks_len = 1 + num_sacks * 2; + opts += sacks_len; + } +#else + LWIP_UNUSED_ARG(num_sacks); +#endif + +#ifdef LWIP_HOOK_TCP_OUT_ADD_TCPOPTS + opts = LWIP_HOOK_TCP_OUT_ADD_TCPOPTS(p, tcphdr, pcb, opts); +#endif + + LWIP_UNUSED_ARG(pcb); + LWIP_UNUSED_ARG(sacks_len); + LWIP_ASSERT("options not filled", (u8_t *)opts == ((u8_t *)(tcphdr + 1)) + sacks_len * 4 + LWIP_TCP_OPT_LENGTH_SEGMENT(optflags, pcb)); + LWIP_UNUSED_ARG(optflags); /* for LWIP_NOASSERT */ + LWIP_UNUSED_ARG(opts); /* for LWIP_NOASSERT */ +} + +/** Output a control segment pbuf to IP. + * + * Called from tcp_rst, tcp_send_empty_ack, tcp_keepalive and tcp_zero_window_probe, + * this function combines selecting a netif for transmission, generating the tcp + * header checksum and calling ip_output_if while handling netif hints and stats. + */ +static err_t +tcp_output_control_segment(const struct tcp_pcb *pcb, struct pbuf *p, + const ip_addr_t *src, const ip_addr_t *dst) +{ + err_t err; + struct netif *netif; + + LWIP_ASSERT("tcp_output_control_segment: invalid pbuf", p != NULL); + + netif = tcp_route(pcb, src, dst); + if (netif == NULL) { + err = ERR_RTE; + } else { + u8_t ttl, tos; +#if CHECKSUM_GEN_TCP + IF__NETIF_CHECKSUM_ENABLED(netif, NETIF_CHECKSUM_GEN_TCP) { + struct tcp_hdr *tcphdr = (struct tcp_hdr *)p->payload; + tcphdr->chksum = ip_chksum_pseudo(p, IP_PROTO_TCP, p->tot_len, + src, dst); + } +#endif + if (pcb != NULL) { + NETIF_SET_HINTS(netif, LWIP_CONST_CAST(struct netif_hint*, &(pcb->netif_hints))); + ttl = pcb->ttl; + tos = pcb->tos; + } else { + /* Send output with hardcoded TTL/HL since we have no access to the pcb */ + ttl = TCP_TTL; + tos = 0; + } + TCP_STATS_INC(tcp.xmit); + err = ip_output_if(p, src, dst, ttl, tos, IP_PROTO_TCP, netif); + NETIF_RESET_HINTS(netif); + } + pbuf_free(p); + return err; +} + +/** + * Send a TCP RESET packet (empty segment with RST flag set) either to + * abort a connection or to show that there is no matching local connection + * for a received segment. + * + * Called by tcp_abort() (to abort a local connection), tcp_input() (if no + * matching local pcb was found), tcp_listen_input() (if incoming segment + * has ACK flag set) and tcp_process() (received segment in the wrong state) + * + * Since a RST segment is in most cases not sent for an active connection, + * tcp_rst() has a number of arguments that are taken from a tcp_pcb for + * most other segment output functions. + * + * @param pcb TCP pcb (may be NULL if no pcb is available) + * @param seqno the sequence number to use for the outgoing segment + * @param ackno the acknowledge number to use for the outgoing segment + * @param local_ip the local IP address to send the segment from + * @param remote_ip the remote IP address to send the segment to + * @param local_port the local TCP port to send the segment from + * @param remote_port the remote TCP port to send the segment to + */ +void +tcp_rst(const struct tcp_pcb *pcb, u32_t seqno, u32_t ackno, + const ip_addr_t *local_ip, const ip_addr_t *remote_ip, + u16_t local_port, u16_t remote_port) +{ + struct pbuf *p; + u16_t wnd; + u8_t optlen; + + LWIP_ASSERT("tcp_rst: invalid local_ip", local_ip != NULL); + LWIP_ASSERT("tcp_rst: invalid remote_ip", remote_ip != NULL); + + optlen = LWIP_TCP_OPT_LENGTH_SEGMENT(0, pcb); + +#if LWIP_WND_SCALE + wnd = PP_HTONS(((TCP_WND >> TCP_RCV_SCALE) & 0xFFFF)); +#else + wnd = PP_HTONS(TCP_WND); +#endif + + p = tcp_output_alloc_header_common(ackno, optlen, 0, lwip_htonl(seqno), local_port, + remote_port, TCP_RST | TCP_ACK, wnd); + if (p == NULL) { + LWIP_DEBUGF(TCP_DEBUG, ("tcp_rst: could not allocate memory for pbuf\n")); + return; + } + tcp_output_fill_options(pcb, p, 0, optlen); + + MIB2_STATS_INC(mib2.tcpoutrsts); + + tcp_output_control_segment(pcb, p, local_ip, remote_ip); + LWIP_DEBUGF(TCP_RST_DEBUG, ("tcp_rst: seqno %"U32_F" ackno %"U32_F".\n", seqno, ackno)); +} + +/** + * Send an ACK without data. + * + * @param pcb Protocol control block for the TCP connection to send the ACK + */ +err_t +tcp_send_empty_ack(struct tcp_pcb *pcb) +{ + err_t err; + struct pbuf *p; + u8_t optlen, optflags = 0; + u8_t num_sacks = 0; + + LWIP_ASSERT("tcp_send_empty_ack: invalid pcb", pcb != NULL); + +#if LWIP_TCP_TIMESTAMPS + if (pcb->flags & TF_TIMESTAMP) { + optflags = TF_SEG_OPTS_TS; + } +#endif + optlen = LWIP_TCP_OPT_LENGTH_SEGMENT(optflags, pcb); + +#if LWIP_TCP_SACK_OUT + /* For now, SACKs are only sent with empty ACKs */ + if ((num_sacks = tcp_get_num_sacks(pcb, optlen)) > 0) { + optlen += 4 + num_sacks * 8; /* 4 bytes for header (including 2*NOP), plus 8B for each SACK */ + } +#endif + + p = tcp_output_alloc_header(pcb, optlen, 0, lwip_htonl(pcb->snd_nxt)); + if (p == NULL) { + /* let tcp_fasttmr retry sending this ACK */ + tcp_set_flags(pcb, TF_ACK_DELAY | TF_ACK_NOW); + LWIP_DEBUGF(TCP_OUTPUT_DEBUG, ("tcp_output: (ACK) could not allocate pbuf\n")); + return ERR_BUF; + } + tcp_output_fill_options(pcb, p, optflags, num_sacks); + +#if LWIP_TCP_TIMESTAMPS + pcb->ts_lastacksent = pcb->rcv_nxt; +#endif + + LWIP_DEBUGF(TCP_OUTPUT_DEBUG, + ("tcp_output: sending ACK for %"U32_F"\n", pcb->rcv_nxt)); + err = tcp_output_control_segment(pcb, p, &pcb->local_ip, &pcb->remote_ip); + if (err != ERR_OK) { + /* let tcp_fasttmr retry sending this ACK */ + tcp_set_flags(pcb, TF_ACK_DELAY | TF_ACK_NOW); + } else { + /* remove ACK flags from the PCB, as we sent an empty ACK now */ + tcp_clear_flags(pcb, TF_ACK_DELAY | TF_ACK_NOW); + } + + return err; +} + +/** + * Send keepalive packets to keep a connection active although + * no data is sent over it. + * + * Called by tcp_slowtmr() + * + * @param pcb the tcp_pcb for which to send a keepalive packet + */ +err_t +tcp_keepalive(struct tcp_pcb *pcb) +{ + err_t err; + struct pbuf *p; + u8_t optlen = LWIP_TCP_OPT_LENGTH_SEGMENT(0, pcb); + + LWIP_ASSERT("tcp_keepalive: invalid pcb", pcb != NULL); + + LWIP_DEBUGF(TCP_DEBUG, ("tcp_keepalive: sending KEEPALIVE probe to ")); + ip_addr_debug_print_val(TCP_DEBUG, pcb->remote_ip); + LWIP_DEBUGF(TCP_DEBUG, ("\n")); + + LWIP_DEBUGF(TCP_DEBUG, ("tcp_keepalive: tcp_ticks %"U32_F" pcb->tmr %"U32_F" pcb->keep_cnt_sent %"U16_F"\n", + tcp_ticks, pcb->tmr, (u16_t)pcb->keep_cnt_sent)); + + p = tcp_output_alloc_header(pcb, optlen, 0, lwip_htonl(pcb->snd_nxt - 1)); + if (p == NULL) { + LWIP_DEBUGF(TCP_DEBUG, + ("tcp_keepalive: could not allocate memory for pbuf\n")); + return ERR_MEM; + } + tcp_output_fill_options(pcb, p, 0, optlen); + err = tcp_output_control_segment(pcb, p, &pcb->local_ip, &pcb->remote_ip); + + LWIP_DEBUGF(TCP_DEBUG, ("tcp_keepalive: seqno %"U32_F" ackno %"U32_F" err %d.\n", + pcb->snd_nxt - 1, pcb->rcv_nxt, (int)err)); + return err; +} + +/** + * Send persist timer zero-window probes to keep a connection active + * when a window update is lost. + * + * Called by tcp_slowtmr() + * + * @param pcb the tcp_pcb for which to send a zero-window probe packet + */ +err_t +tcp_zero_window_probe(struct tcp_pcb *pcb) +{ + err_t err; + struct pbuf *p; + struct tcp_hdr *tcphdr; + struct tcp_seg *seg; + u16_t len; + u8_t is_fin; + u32_t snd_nxt; + u8_t optlen = LWIP_TCP_OPT_LENGTH_SEGMENT(0, pcb); + + LWIP_ASSERT("tcp_zero_window_probe: invalid pcb", pcb != NULL); + + LWIP_DEBUGF(TCP_DEBUG, ("tcp_zero_window_probe: sending ZERO WINDOW probe to ")); + ip_addr_debug_print_val(TCP_DEBUG, pcb->remote_ip); + LWIP_DEBUGF(TCP_DEBUG, ("\n")); + + LWIP_DEBUGF(TCP_DEBUG, + ("tcp_zero_window_probe: tcp_ticks %"U32_F + " pcb->tmr %"U32_F" pcb->keep_cnt_sent %"U16_F"\n", + tcp_ticks, pcb->tmr, (u16_t)pcb->keep_cnt_sent)); + + /* Only consider unsent, persist timer should be off when there is data in-flight */ + seg = pcb->unsent; + if (seg == NULL) { + /* Not expected, persist timer should be off when the send buffer is empty */ + return ERR_OK; + } + + /* increment probe count. NOTE: we record probe even if it fails + to actually transmit due to an error. This ensures memory exhaustion/ + routing problem doesn't leave a zero-window pcb as an indefinite zombie. + RTO mechanism has similar behavior, see pcb->nrtx */ + if (pcb->persist_probe < 0xFF) { + ++pcb->persist_probe; + } + + is_fin = ((TCPH_FLAGS(seg->tcphdr) & TCP_FIN) != 0) && (seg->len == 0); + /* we want to send one seqno: either FIN or data (no options) */ + len = is_fin ? 0 : 1; + + p = tcp_output_alloc_header(pcb, optlen, len, seg->tcphdr->seqno); + if (p == NULL) { + LWIP_DEBUGF(TCP_DEBUG, ("tcp_zero_window_probe: no memory for pbuf\n")); + return ERR_MEM; + } + tcphdr = (struct tcp_hdr *)p->payload; + + if (is_fin) { + /* FIN segment, no data */ + TCPH_FLAGS_SET(tcphdr, TCP_ACK | TCP_FIN); + } else { + /* Data segment, copy in one byte from the head of the unacked queue */ + char *d = ((char *)p->payload + TCP_HLEN); + /* Depending on whether the segment has already been sent (unacked) or not + (unsent), seg->p->payload points to the IP header or TCP header. + Ensure we copy the first TCP data byte: */ + pbuf_copy_partial(seg->p, d, 1, seg->p->tot_len - seg->len); + } + + /* The byte may be acknowledged without the window being opened. */ + snd_nxt = lwip_ntohl(seg->tcphdr->seqno) + 1; + if (TCP_SEQ_LT(pcb->snd_nxt, snd_nxt)) { + pcb->snd_nxt = snd_nxt; + } + tcp_output_fill_options(pcb, p, 0, optlen); + + err = tcp_output_control_segment(pcb, p, &pcb->local_ip, &pcb->remote_ip); + + LWIP_DEBUGF(TCP_DEBUG, ("tcp_zero_window_probe: seqno %"U32_F + " ackno %"U32_F" err %d.\n", + pcb->snd_nxt - 1, pcb->rcv_nxt, (int)err)); + return err; +} +#endif /* LWIP_TCP */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/timeouts.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/timeouts.c new file mode 100644 index 0000000000000000000000000000000000000000..f37acfec9959c7cc8c88a5ffc7e264ddd27da955 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/timeouts.c @@ -0,0 +1,451 @@ +/** + * @file + * Stack-internal timers implementation. + * This file includes timer callbacks for stack-internal timers as well as + * functions to set up or stop timers and check for expired timers. + * + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * Simon Goldschmidt + * + */ + +#include "lwip/opt.h" + +#include "lwip/timeouts.h" +#include "lwip/priv/tcp_priv.h" + +#include "lwip/def.h" +#include "lwip/memp.h" +#include "lwip/priv/tcpip_priv.h" + +#include "lwip/ip4_frag.h" +#include "lwip/etharp.h" +#include "lwip/dhcp.h" +#include "lwip/autoip.h" +#include "lwip/igmp.h" +#include "lwip/dns.h" +#include "lwip/nd6.h" +#include "lwip/ip6_frag.h" +#include "lwip/mld6.h" +#include "lwip/dhcp6.h" +#include "lwip/sys.h" +#include "lwip/pbuf.h" + +#if LWIP_DEBUG_TIMERNAMES +#define HANDLER(x) x, #x +#else /* LWIP_DEBUG_TIMERNAMES */ +#define HANDLER(x) x +#endif /* LWIP_DEBUG_TIMERNAMES */ + +#define LWIP_MAX_TIMEOUT 0x7fffffff + +/* Check if timer's expiry time is greater than time and care about u32_t wraparounds */ +#define TIME_LESS_THAN(t, compare_to) ( (((u32_t)((t)-(compare_to))) > LWIP_MAX_TIMEOUT) ? 1 : 0 ) + +/** This array contains all stack-internal cyclic timers. To get the number of + * timers, use LWIP_ARRAYSIZE() */ +const struct lwip_cyclic_timer lwip_cyclic_timers[] = { +#if LWIP_TCP + /* The TCP timer is a special case: it does not have to run always and + is triggered to start from TCP using tcp_timer_needed() */ + {TCP_TMR_INTERVAL, HANDLER(tcp_tmr)}, +#endif /* LWIP_TCP */ +#if LWIP_IPV4 +#if IP_REASSEMBLY + {IP_TMR_INTERVAL, HANDLER(ip_reass_tmr)}, +#endif /* IP_REASSEMBLY */ +#if LWIP_ARP + {ARP_TMR_INTERVAL, HANDLER(etharp_tmr)}, +#endif /* LWIP_ARP */ +#if LWIP_DHCP + {DHCP_COARSE_TIMER_MSECS, HANDLER(dhcp_coarse_tmr)}, + {DHCP_FINE_TIMER_MSECS, HANDLER(dhcp_fine_tmr)}, +#endif /* LWIP_DHCP */ +#if LWIP_AUTOIP + {AUTOIP_TMR_INTERVAL, HANDLER(autoip_tmr)}, +#endif /* LWIP_AUTOIP */ +#if LWIP_IGMP + {IGMP_TMR_INTERVAL, HANDLER(igmp_tmr)}, +#endif /* LWIP_IGMP */ +#endif /* LWIP_IPV4 */ +#if LWIP_DNS + {DNS_TMR_INTERVAL, HANDLER(dns_tmr)}, +#endif /* LWIP_DNS */ +#if LWIP_IPV6 + {ND6_TMR_INTERVAL, HANDLER(nd6_tmr)}, +#if LWIP_IPV6_REASS + {IP6_REASS_TMR_INTERVAL, HANDLER(ip6_reass_tmr)}, +#endif /* LWIP_IPV6_REASS */ +#if LWIP_IPV6_MLD + {MLD6_TMR_INTERVAL, HANDLER(mld6_tmr)}, +#endif /* LWIP_IPV6_MLD */ +#if LWIP_IPV6_DHCP6 + {DHCP6_TIMER_MSECS, HANDLER(dhcp6_tmr)}, +#endif /* LWIP_IPV6_DHCP6 */ +#endif /* LWIP_IPV6 */ +}; +const int lwip_num_cyclic_timers = LWIP_ARRAYSIZE(lwip_cyclic_timers); + +#if LWIP_TIMERS && !LWIP_TIMERS_CUSTOM + +/** The one and only timeout list */ +static struct sys_timeo *next_timeout; + +static u32_t current_timeout_due_time; + +#if LWIP_TESTMODE +struct sys_timeo** +sys_timeouts_get_next_timeout(void) +{ + return &next_timeout; +} +#endif + +#if LWIP_TCP +/** global variable that shows if the tcp timer is currently scheduled or not */ +static int tcpip_tcp_timer_active; + +/** + * Timer callback function that calls tcp_tmr() and reschedules itself. + * + * @param arg unused argument + */ +static void +tcpip_tcp_timer(void *arg) +{ + LWIP_UNUSED_ARG(arg); + + /* call TCP timer handler */ + tcp_tmr(); + /* timer still needed? */ + if (tcp_active_pcbs || tcp_tw_pcbs) { + /* restart timer */ + sys_timeout(TCP_TMR_INTERVAL, tcpip_tcp_timer, NULL); + } else { + /* disable timer */ + tcpip_tcp_timer_active = 0; + } +} + +/** + * Called from TCP_REG when registering a new PCB: + * the reason is to have the TCP timer only running when + * there are active (or time-wait) PCBs. + */ +void +tcp_timer_needed(void) +{ + LWIP_ASSERT_CORE_LOCKED(); + + /* timer is off but needed again? */ + if (!tcpip_tcp_timer_active && (tcp_active_pcbs || tcp_tw_pcbs)) { + /* enable and start timer */ + tcpip_tcp_timer_active = 1; + sys_timeout(TCP_TMR_INTERVAL, tcpip_tcp_timer, NULL); + } +} +#endif /* LWIP_TCP */ + +static void +#if LWIP_DEBUG_TIMERNAMES +sys_timeout_abs(u32_t abs_time, sys_timeout_handler handler, void *arg, const char *handler_name) +#else /* LWIP_DEBUG_TIMERNAMES */ +sys_timeout_abs(u32_t abs_time, sys_timeout_handler handler, void *arg) +#endif +{ + struct sys_timeo *timeout, *t; + + timeout = (struct sys_timeo *)memp_malloc(MEMP_SYS_TIMEOUT); + if (timeout == NULL) { + LWIP_ASSERT("sys_timeout: timeout != NULL, pool MEMP_SYS_TIMEOUT is empty", timeout != NULL); + return; + } + + timeout->next = NULL; + timeout->h = handler; + timeout->arg = arg; + timeout->time = abs_time; + +#if LWIP_DEBUG_TIMERNAMES + timeout->handler_name = handler_name; + LWIP_DEBUGF(TIMERS_DEBUG, ("sys_timeout: %p abs_time=%"U32_F" handler=%s arg=%p\n", + (void *)timeout, abs_time, handler_name, (void *)arg)); +#endif /* LWIP_DEBUG_TIMERNAMES */ + + if (next_timeout == NULL) { + next_timeout = timeout; + return; + } + if (TIME_LESS_THAN(timeout->time, next_timeout->time)) { + timeout->next = next_timeout; + next_timeout = timeout; + } else { + for (t = next_timeout; t != NULL; t = t->next) { + if ((t->next == NULL) || TIME_LESS_THAN(timeout->time, t->next->time)) { + timeout->next = t->next; + t->next = timeout; + break; + } + } + } +} + +/** + * Timer callback function that calls cyclic->handler() and reschedules itself. + * + * @param arg unused argument + */ +#if !LWIP_TESTMODE +static +#endif +void +lwip_cyclic_timer(void *arg) +{ + u32_t now; + u32_t next_timeout_time; + const struct lwip_cyclic_timer *cyclic = (const struct lwip_cyclic_timer *)arg; + +#if LWIP_DEBUG_TIMERNAMES + LWIP_DEBUGF(TIMERS_DEBUG, ("tcpip: %s()\n", cyclic->handler_name)); +#endif + cyclic->handler(); + + now = sys_now(); + next_timeout_time = (u32_t)(current_timeout_due_time + cyclic->interval_ms); /* overflow handled by TIME_LESS_THAN macro */ + if (TIME_LESS_THAN(next_timeout_time, now)) { + /* timer would immediately expire again -> "overload" -> restart without any correction */ +#if LWIP_DEBUG_TIMERNAMES + sys_timeout_abs((u32_t)(now + cyclic->interval_ms), lwip_cyclic_timer, arg, cyclic->handler_name); +#else + sys_timeout_abs((u32_t)(now + cyclic->interval_ms), lwip_cyclic_timer, arg); +#endif + + } else { + /* correct cyclic interval with handler execution delay and sys_check_timeouts jitter */ +#if LWIP_DEBUG_TIMERNAMES + sys_timeout_abs(next_timeout_time, lwip_cyclic_timer, arg, cyclic->handler_name); +#else + sys_timeout_abs(next_timeout_time, lwip_cyclic_timer, arg); +#endif + } +} + +/** Initialize this module */ +void sys_timeouts_init(void) +{ + size_t i; + /* tcp_tmr() at index 0 is started on demand */ + for (i = (LWIP_TCP ? 1 : 0); i < LWIP_ARRAYSIZE(lwip_cyclic_timers); i++) { + /* we have to cast via size_t to get rid of const warning + (this is OK as cyclic_timer() casts back to const* */ + sys_timeout(lwip_cyclic_timers[i].interval_ms, lwip_cyclic_timer, LWIP_CONST_CAST(void *, &lwip_cyclic_timers[i])); + } +} + +/** + * Create a one-shot timer (aka timeout). Timeouts are processed in the + * following cases: + * - while waiting for a message using sys_timeouts_mbox_fetch() + * - by calling sys_check_timeouts() (NO_SYS==1 only) + * + * @param msecs time in milliseconds after that the timer should expire + * @param handler callback function to call when msecs have elapsed + * @param arg argument to pass to the callback function + */ +#if LWIP_DEBUG_TIMERNAMES +void +sys_timeout_debug(u32_t msecs, sys_timeout_handler handler, void *arg, const char *handler_name) +#else /* LWIP_DEBUG_TIMERNAMES */ +void +sys_timeout(u32_t msecs, sys_timeout_handler handler, void *arg) +#endif /* LWIP_DEBUG_TIMERNAMES */ +{ + u32_t next_timeout_time; + + LWIP_ASSERT_CORE_LOCKED(); + + LWIP_ASSERT("Timeout time too long, max is LWIP_UINT32_MAX/4 msecs", msecs <= (LWIP_UINT32_MAX / 4)); + + next_timeout_time = (u32_t)(sys_now() + msecs); /* overflow handled by TIME_LESS_THAN macro */ + +#if LWIP_DEBUG_TIMERNAMES + sys_timeout_abs(next_timeout_time, handler, arg, handler_name); +#else + sys_timeout_abs(next_timeout_time, handler, arg); +#endif +} + +/** + * Go through timeout list (for this task only) and remove the first matching + * entry (subsequent entries remain untouched), even though the timeout has not + * triggered yet. + * + * @param handler callback function that would be called by the timeout + * @param arg callback argument that would be passed to handler +*/ +void +sys_untimeout(sys_timeout_handler handler, void *arg) +{ + struct sys_timeo *prev_t, *t; + + LWIP_ASSERT_CORE_LOCKED(); + + if (next_timeout == NULL) { + return; + } + + for (t = next_timeout, prev_t = NULL; t != NULL; prev_t = t, t = t->next) { + if ((t->h == handler) && (t->arg == arg)) { + /* We have a match */ + /* Unlink from previous in list */ + if (prev_t == NULL) { + next_timeout = t->next; + } else { + prev_t->next = t->next; + } + memp_free(MEMP_SYS_TIMEOUT, t); + return; + } + } + return; +} + +/** + * @ingroup lwip_nosys + * Handle timeouts for NO_SYS==1 (i.e. without using + * tcpip_thread/sys_timeouts_mbox_fetch(). Uses sys_now() to call timeout + * handler functions when timeouts expire. + * + * Must be called periodically from your main loop. + */ +void +sys_check_timeouts(void) +{ + u32_t now; + + LWIP_ASSERT_CORE_LOCKED(); + + /* Process only timers expired at the start of the function. */ + now = sys_now(); + + do { + struct sys_timeo *tmptimeout; + sys_timeout_handler handler; + void *arg; + + PBUF_CHECK_FREE_OOSEQ(); + + tmptimeout = next_timeout; + if (tmptimeout == NULL) { + return; + } + + if (TIME_LESS_THAN(now, tmptimeout->time)) { + return; + } + + /* Timeout has expired */ + next_timeout = tmptimeout->next; + handler = tmptimeout->h; + arg = tmptimeout->arg; + current_timeout_due_time = tmptimeout->time; +#if LWIP_DEBUG_TIMERNAMES + if (handler != NULL) { + LWIP_DEBUGF(TIMERS_DEBUG, ("sct calling h=%s t=%"U32_F" arg=%p\n", + tmptimeout->handler_name, sys_now() - tmptimeout->time, arg)); + } +#endif /* LWIP_DEBUG_TIMERNAMES */ + memp_free(MEMP_SYS_TIMEOUT, tmptimeout); + if (handler != NULL) { + handler(arg); + } + LWIP_TCPIP_THREAD_ALIVE(); + + /* Repeat until all expired timers have been called */ + } while (1); +} + +/** Rebase the timeout times to the current time. + * This is necessary if sys_check_timeouts() hasn't been called for a long + * time (e.g. while saving energy) to prevent all timer functions of that + * period being called. + */ +void +sys_restart_timeouts(void) +{ + u32_t now; + u32_t base; + struct sys_timeo *t; + + if (next_timeout == NULL) { + return; + } + + now = sys_now(); + base = next_timeout->time; + + for (t = next_timeout; t != NULL; t = t->next) { + t->time = (t->time - base) + now; + } +} + +/** Return the time left before the next timeout is due. If no timeouts are + * enqueued, returns 0xffffffff + */ +u32_t +sys_timeouts_sleeptime(void) +{ + u32_t now; + + LWIP_ASSERT_CORE_LOCKED(); + + if (next_timeout == NULL) { + return SYS_TIMEOUTS_SLEEPTIME_INFINITE; + } + now = sys_now(); + if (TIME_LESS_THAN(next_timeout->time, now)) { + return 0; + } else { + u32_t ret = (u32_t)(next_timeout->time - now); + LWIP_ASSERT("invalid sleeptime", ret <= LWIP_MAX_TIMEOUT); + return ret; + } +} + +#else /* LWIP_TIMERS && !LWIP_TIMERS_CUSTOM */ +/* Satisfy the TCP code which calls this function */ +void +tcp_timer_needed(void) +{ +} +#endif /* LWIP_TIMERS && !LWIP_TIMERS_CUSTOM */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/udp.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/udp.c new file mode 100644 index 0000000000000000000000000000000000000000..9d2cb4af7f47104f58443c023e161d235d00f592 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/udp.c @@ -0,0 +1,1314 @@ +/** + * @file + * User Datagram Protocol module\n + * The code for the User Datagram Protocol UDP & UDPLite (RFC 3828).\n + * See also @ref udp_raw + * + * @defgroup udp_raw UDP + * @ingroup callbackstyle_api + * User Datagram Protocol module\n + * @see @ref api + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +/* @todo Check the use of '(struct udp_pcb).chksum_len_rx'! + */ + +#include "lwip/opt.h" + +#if LWIP_UDP /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/udp.h" +#include "lwip/def.h" +#include "lwip/memp.h" +#include "lwip/inet_chksum.h" +#include "lwip/ip_addr.h" +#include "lwip/ip6.h" +#include "lwip/ip6_addr.h" +#include "lwip/netif.h" +#include "lwip/icmp.h" +#include "lwip/icmp6.h" +#include "lwip/stats.h" +#include "lwip/snmp.h" +#include "lwip/dhcp.h" + +#include + +#ifndef UDP_LOCAL_PORT_RANGE_START +/* From http://www.iana.org/assignments/port-numbers: + "The Dynamic and/or Private Ports are those from 49152 through 65535" */ +#define UDP_LOCAL_PORT_RANGE_START 0xc000 +#define UDP_LOCAL_PORT_RANGE_END 0xffff +#define UDP_ENSURE_LOCAL_PORT_RANGE(port) ((u16_t)(((port) & (u16_t)~UDP_LOCAL_PORT_RANGE_START) + UDP_LOCAL_PORT_RANGE_START)) +#endif + +/* last local UDP port */ +static u16_t udp_port = UDP_LOCAL_PORT_RANGE_START; + +/* The list of UDP PCBs */ +/* exported in udp.h (was static) */ +struct udp_pcb *udp_pcbs; + +/** + * Initialize this module. + */ +void +udp_init(void) +{ +#ifdef LWIP_RAND + udp_port = UDP_ENSURE_LOCAL_PORT_RANGE(LWIP_RAND()); +#endif /* LWIP_RAND */ +} + +/** + * Allocate a new local UDP port. + * + * @return a new (free) local UDP port number + */ +static u16_t +udp_new_port(void) +{ + u16_t n = 0; + struct udp_pcb *pcb; + +again: + if (udp_port++ == UDP_LOCAL_PORT_RANGE_END) { + udp_port = UDP_LOCAL_PORT_RANGE_START; + } + /* Check all PCBs. */ + for (pcb = udp_pcbs; pcb != NULL; pcb = pcb->next) { + if (pcb->local_port == udp_port) { + if (++n > (UDP_LOCAL_PORT_RANGE_END - UDP_LOCAL_PORT_RANGE_START)) { + return 0; + } + goto again; + } + } + return udp_port; +} + +/** Common code to see if the current input packet matches the pcb + * (current input packet is accessed via ip(4/6)_current_* macros) + * + * @param pcb pcb to check + * @param inp network interface on which the datagram was received (only used for IPv4) + * @param broadcast 1 if his is an IPv4 broadcast (global or subnet-only), 0 otherwise (only used for IPv4) + * @return 1 on match, 0 otherwise + */ +static u8_t +udp_input_local_match(struct udp_pcb *pcb, struct netif *inp, u8_t broadcast) +{ + LWIP_UNUSED_ARG(inp); /* in IPv6 only case */ + LWIP_UNUSED_ARG(broadcast); /* in IPv6 only case */ + + LWIP_ASSERT("udp_input_local_match: invalid pcb", pcb != NULL); + LWIP_ASSERT("udp_input_local_match: invalid netif", inp != NULL); + + /* check if PCB is bound to specific netif */ + if ((pcb->netif_idx != NETIF_NO_INDEX) && + (pcb->netif_idx != netif_get_index(ip_data.current_input_netif))) { + return 0; + } + + /* Dual-stack: PCBs listening to any IP type also listen to any IP address */ + if (IP_IS_ANY_TYPE_VAL(pcb->local_ip)) { +#if LWIP_IPV4 && IP_SOF_BROADCAST_RECV + if ((broadcast != 0) && !ip_get_option(pcb, SOF_BROADCAST)) { + return 0; + } +#endif /* LWIP_IPV4 && IP_SOF_BROADCAST_RECV */ + return 1; + } + + /* Only need to check PCB if incoming IP version matches PCB IP version */ + if (IP_ADDR_PCB_VERSION_MATCH_EXACT(pcb, ip_current_dest_addr())) { +#if LWIP_IPV4 + /* Special case: IPv4 broadcast: all or broadcasts in my subnet + * Note: broadcast variable can only be 1 if it is an IPv4 broadcast */ + if (broadcast != 0) { +#if IP_SOF_BROADCAST_RECV + if (ip_get_option(pcb, SOF_BROADCAST)) +#endif /* IP_SOF_BROADCAST_RECV */ + { + if (ip4_addr_isany(ip_2_ip4(&pcb->local_ip)) || + ((ip4_current_dest_addr()->addr == IPADDR_BROADCAST)) || + ip4_addr_netcmp(ip_2_ip4(&pcb->local_ip), ip4_current_dest_addr(), netif_ip4_netmask(inp))) { + return 1; + } + } + } else +#endif /* LWIP_IPV4 */ + /* Handle IPv4 and IPv6: all or exact match */ + if (ip_addr_isany(&pcb->local_ip) || ip_addr_cmp(&pcb->local_ip, ip_current_dest_addr())) { + return 1; + } + } + + return 0; +} + +/** + * Process an incoming UDP datagram. + * + * Given an incoming UDP datagram (as a chain of pbufs) this function + * finds a corresponding UDP PCB and hands over the pbuf to the pcbs + * recv function. If no pcb is found or the datagram is incorrect, the + * pbuf is freed. + * + * @param p pbuf to be demultiplexed to a UDP PCB (p->payload pointing to the UDP header) + * @param inp network interface on which the datagram was received. + * + */ +void +udp_input(struct pbuf *p, struct netif *inp) +{ + struct udp_hdr *udphdr; + struct udp_pcb *pcb, *prev; + struct udp_pcb *uncon_pcb; + u16_t src, dest; + u8_t broadcast; + u8_t for_us = 0; + + LWIP_UNUSED_ARG(inp); + + LWIP_ASSERT_CORE_LOCKED(); + + LWIP_ASSERT("udp_input: invalid pbuf", p != NULL); + LWIP_ASSERT("udp_input: invalid netif", inp != NULL); + + PERF_START; + + UDP_STATS_INC(udp.recv); + + /* Check minimum length (UDP header) */ + if (p->len < UDP_HLEN) { + /* drop short packets */ + LWIP_DEBUGF(UDP_DEBUG, + ("udp_input: short UDP datagram (%"U16_F" bytes) discarded\n", p->tot_len)); + UDP_STATS_INC(udp.lenerr); + UDP_STATS_INC(udp.drop); + MIB2_STATS_INC(mib2.udpinerrors); + pbuf_free(p); + goto end; + } + + udphdr = (struct udp_hdr *)p->payload; + + /* is broadcast packet ? */ + broadcast = ip_addr_isbroadcast(ip_current_dest_addr(), ip_current_netif()); + + LWIP_DEBUGF(UDP_DEBUG, ("udp_input: received datagram of length %"U16_F"\n", p->tot_len)); + + /* convert src and dest ports to host byte order */ + src = lwip_ntohs(udphdr->src); + dest = lwip_ntohs(udphdr->dest); + + udp_debug_print(udphdr); + + /* print the UDP source and destination */ + LWIP_DEBUGF(UDP_DEBUG, ("udp (")); + ip_addr_debug_print_val(UDP_DEBUG, *ip_current_dest_addr()); + LWIP_DEBUGF(UDP_DEBUG, (", %"U16_F") <-- (", lwip_ntohs(udphdr->dest))); + ip_addr_debug_print_val(UDP_DEBUG, *ip_current_src_addr()); + LWIP_DEBUGF(UDP_DEBUG, (", %"U16_F")\n", lwip_ntohs(udphdr->src))); + + pcb = NULL; + prev = NULL; + uncon_pcb = NULL; + /* Iterate through the UDP pcb list for a matching pcb. + * 'Perfect match' pcbs (connected to the remote port & ip address) are + * preferred. If no perfect match is found, the first unconnected pcb that + * matches the local port and ip address gets the datagram. */ + for (pcb = udp_pcbs; pcb != NULL; pcb = pcb->next) { + /* print the PCB local and remote address */ + LWIP_DEBUGF(UDP_DEBUG, ("pcb (")); + ip_addr_debug_print_val(UDP_DEBUG, pcb->local_ip); + LWIP_DEBUGF(UDP_DEBUG, (", %"U16_F") <-- (", pcb->local_port)); + ip_addr_debug_print_val(UDP_DEBUG, pcb->remote_ip); + LWIP_DEBUGF(UDP_DEBUG, (", %"U16_F")\n", pcb->remote_port)); + + /* compare PCB local addr+port to UDP destination addr+port */ + if ((pcb->local_port == dest) && + (udp_input_local_match(pcb, inp, broadcast) != 0)) { + if ((pcb->flags & UDP_FLAGS_CONNECTED) == 0) { + if (uncon_pcb == NULL) { + /* the first unconnected matching PCB */ + uncon_pcb = pcb; +#if LWIP_IPV4 + } else if (broadcast && ip4_current_dest_addr()->addr == IPADDR_BROADCAST) { + /* global broadcast address (only valid for IPv4; match was checked before) */ + if (!IP_IS_V4_VAL(uncon_pcb->local_ip) || !ip4_addr_cmp(ip_2_ip4(&uncon_pcb->local_ip), netif_ip4_addr(inp))) { + /* uncon_pcb does not match the input netif, check this pcb */ + if (IP_IS_V4_VAL(pcb->local_ip) && ip4_addr_cmp(ip_2_ip4(&pcb->local_ip), netif_ip4_addr(inp))) { + /* better match */ + uncon_pcb = pcb; + } + } +#endif /* LWIP_IPV4 */ + } +#if SO_REUSE + else if (!ip_addr_isany(&pcb->local_ip)) { + /* prefer specific IPs over catch-all */ + uncon_pcb = pcb; + } +#endif /* SO_REUSE */ + } + + /* compare PCB remote addr+port to UDP source addr+port */ + if ((pcb->remote_port == src) && + (ip_addr_isany_val(pcb->remote_ip) || + ip_addr_cmp(&pcb->remote_ip, ip_current_src_addr()))) { + /* the first fully matching PCB */ + if (prev != NULL) { + /* move the pcb to the front of udp_pcbs so that is + found faster next time */ + prev->next = pcb->next; + pcb->next = udp_pcbs; + udp_pcbs = pcb; + } else { + UDP_STATS_INC(udp.cachehit); + } + break; + } + } + + prev = pcb; + } + /* no fully matching pcb found? then look for an unconnected pcb */ + if (pcb == NULL) { + pcb = uncon_pcb; + } + + /* Check checksum if this is a match or if it was directed at us. */ + if (pcb != NULL) { + for_us = 1; + } else { +#if LWIP_IPV6 + if (ip_current_is_v6()) { + for_us = netif_get_ip6_addr_match(inp, ip6_current_dest_addr()) >= 0; + } +#endif /* LWIP_IPV6 */ +#if LWIP_IPV4 + if (!ip_current_is_v6()) { + for_us = ip4_addr_cmp(netif_ip4_addr(inp), ip4_current_dest_addr()); + } +#endif /* LWIP_IPV4 */ + } + + if (for_us) { + LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE, ("udp_input: calculating checksum\n")); +#if CHECKSUM_CHECK_UDP + IF__NETIF_CHECKSUM_ENABLED(inp, NETIF_CHECKSUM_CHECK_UDP) { +#if LWIP_UDPLITE + if (ip_current_header_proto() == IP_PROTO_UDPLITE) { + /* Do the UDP Lite checksum */ + u16_t chklen = lwip_ntohs(udphdr->len); + if (chklen < sizeof(struct udp_hdr)) { + if (chklen == 0) { + /* For UDP-Lite, checksum length of 0 means checksum + over the complete packet (See RFC 3828 chap. 3.1) */ + chklen = p->tot_len; + } else { + /* At least the UDP-Lite header must be covered by the + checksum! (Again, see RFC 3828 chap. 3.1) */ + goto chkerr; + } + } + if (ip_chksum_pseudo_partial(p, IP_PROTO_UDPLITE, + p->tot_len, chklen, + ip_current_src_addr(), ip_current_dest_addr()) != 0) { + goto chkerr; + } + } else +#endif /* LWIP_UDPLITE */ + { + if (udphdr->chksum != 0) { + if (ip_chksum_pseudo(p, IP_PROTO_UDP, p->tot_len, + ip_current_src_addr(), + ip_current_dest_addr()) != 0) { + goto chkerr; + } + } + } + } +#endif /* CHECKSUM_CHECK_UDP */ + if (pbuf_remove_header(p, UDP_HLEN)) { + /* Can we cope with this failing? Just assert for now */ + LWIP_ASSERT("pbuf_remove_header failed\n", 0); + UDP_STATS_INC(udp.drop); + MIB2_STATS_INC(mib2.udpinerrors); + pbuf_free(p); + goto end; + } + + if (pcb != NULL) { + MIB2_STATS_INC(mib2.udpindatagrams); +#if SO_REUSE && SO_REUSE_RXTOALL + if (ip_get_option(pcb, SOF_REUSEADDR) && + (broadcast || ip_addr_ismulticast(ip_current_dest_addr()))) { + /* pass broadcast- or multicast packets to all multicast pcbs + if SOF_REUSEADDR is set on the first match */ + struct udp_pcb *mpcb; + for (mpcb = udp_pcbs; mpcb != NULL; mpcb = mpcb->next) { + if (mpcb != pcb) { + /* compare PCB local addr+port to UDP destination addr+port */ + if ((mpcb->local_port == dest) && + (udp_input_local_match(mpcb, inp, broadcast) != 0)) { + /* pass a copy of the packet to all local matches */ + if (mpcb->recv != NULL) { + struct pbuf *q; + q = pbuf_clone(PBUF_RAW, PBUF_POOL, p); + if (q != NULL) { + mpcb->recv(mpcb->recv_arg, mpcb, q, ip_current_src_addr(), src); + } + } + } + } + } + } +#endif /* SO_REUSE && SO_REUSE_RXTOALL */ + /* callback */ + if (pcb->recv != NULL) { + /* now the recv function is responsible for freeing p */ + pcb->recv(pcb->recv_arg, pcb, p, ip_current_src_addr(), src); + } else { + /* no recv function registered? then we have to free the pbuf! */ + pbuf_free(p); + goto end; + } + } else { + LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE, ("udp_input: not for us.\n")); + +#if LWIP_ICMP || LWIP_ICMP6 + /* No match was found, send ICMP destination port unreachable unless + destination address was broadcast/multicast. */ + if (!broadcast && !ip_addr_ismulticast(ip_current_dest_addr())) { + /* move payload pointer back to ip header */ + pbuf_header_force(p, (s16_t)(ip_current_header_tot_len() + UDP_HLEN)); + icmp_port_unreach(ip_current_is_v6(), p); + } +#endif /* LWIP_ICMP || LWIP_ICMP6 */ + UDP_STATS_INC(udp.proterr); + UDP_STATS_INC(udp.drop); + MIB2_STATS_INC(mib2.udpnoports); + pbuf_free(p); + } + } else { + pbuf_free(p); + } +end: + PERF_STOP("udp_input"); + return; +#if CHECKSUM_CHECK_UDP +chkerr: + LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, + ("udp_input: UDP (or UDP Lite) datagram discarded due to failing checksum\n")); + UDP_STATS_INC(udp.chkerr); + UDP_STATS_INC(udp.drop); + MIB2_STATS_INC(mib2.udpinerrors); + pbuf_free(p); + PERF_STOP("udp_input"); +#endif /* CHECKSUM_CHECK_UDP */ +} + +/** + * @ingroup udp_raw + * Sends the pbuf p using UDP. The pbuf is not deallocated. + * + * + * @param pcb UDP PCB used to send the data. + * @param p chain of pbuf's to be sent. + * + * The datagram will be sent to the current remote_ip & remote_port + * stored in pcb. If the pcb is not bound to a port, it will + * automatically be bound to a random port. + * + * @return lwIP error code. + * - ERR_OK. Successful. No error occurred. + * - ERR_MEM. Out of memory. + * - ERR_RTE. Could not find route to destination address. + * - ERR_VAL. No PCB or PCB is dual-stack + * - More errors could be returned by lower protocol layers. + * + * @see udp_disconnect() udp_sendto() + */ +err_t +udp_send(struct udp_pcb *pcb, struct pbuf *p) +{ + LWIP_ERROR("udp_send: invalid pcb", pcb != NULL, return ERR_ARG); + LWIP_ERROR("udp_send: invalid pbuf", p != NULL, return ERR_ARG); + + if (IP_IS_ANY_TYPE_VAL(pcb->remote_ip)) { + return ERR_VAL; + } + + /* send to the packet using remote ip and port stored in the pcb */ + return udp_sendto(pcb, p, &pcb->remote_ip, pcb->remote_port); +} + +#if LWIP_CHECKSUM_ON_COPY && CHECKSUM_GEN_UDP +/** @ingroup udp_raw + * Same as udp_send() but with checksum + */ +err_t +udp_send_chksum(struct udp_pcb *pcb, struct pbuf *p, + u8_t have_chksum, u16_t chksum) +{ + LWIP_ERROR("udp_send_chksum: invalid pcb", pcb != NULL, return ERR_ARG); + LWIP_ERROR("udp_send_chksum: invalid pbuf", p != NULL, return ERR_ARG); + + if (IP_IS_ANY_TYPE_VAL(pcb->remote_ip)) { + return ERR_VAL; + } + + /* send to the packet using remote ip and port stored in the pcb */ + return udp_sendto_chksum(pcb, p, &pcb->remote_ip, pcb->remote_port, + have_chksum, chksum); +} +#endif /* LWIP_CHECKSUM_ON_COPY && CHECKSUM_GEN_UDP */ + +/** + * @ingroup udp_raw + * Send data to a specified address using UDP. + * + * @param pcb UDP PCB used to send the data. + * @param p chain of pbuf's to be sent. + * @param dst_ip Destination IP address. + * @param dst_port Destination UDP port. + * + * dst_ip & dst_port are expected to be in the same byte order as in the pcb. + * + * If the PCB already has a remote address association, it will + * be restored after the data is sent. + * + * @return lwIP error code (@see udp_send for possible error codes) + * + * @see udp_disconnect() udp_send() + */ +err_t +udp_sendto(struct udp_pcb *pcb, struct pbuf *p, + const ip_addr_t *dst_ip, u16_t dst_port) +{ +#if LWIP_CHECKSUM_ON_COPY && CHECKSUM_GEN_UDP + return udp_sendto_chksum(pcb, p, dst_ip, dst_port, 0, 0); +} + +/** @ingroup udp_raw + * Same as udp_sendto(), but with checksum */ +err_t +udp_sendto_chksum(struct udp_pcb *pcb, struct pbuf *p, const ip_addr_t *dst_ip, + u16_t dst_port, u8_t have_chksum, u16_t chksum) +{ +#endif /* LWIP_CHECKSUM_ON_COPY && CHECKSUM_GEN_UDP */ + struct netif *netif; + + LWIP_ERROR("udp_sendto: invalid pcb", pcb != NULL, return ERR_ARG); + LWIP_ERROR("udp_sendto: invalid pbuf", p != NULL, return ERR_ARG); + LWIP_ERROR("udp_sendto: invalid dst_ip", dst_ip != NULL, return ERR_ARG); + + if (!IP_ADDR_PCB_VERSION_MATCH(pcb, dst_ip)) { + return ERR_VAL; + } + + LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE, ("udp_send\n")); + + if (pcb->netif_idx != NETIF_NO_INDEX) { + netif = netif_get_by_index(pcb->netif_idx); + } else { +#if LWIP_MULTICAST_TX_OPTIONS + netif = NULL; + if (ip_addr_ismulticast(dst_ip)) { + /* For IPv6, the interface to use for packets with a multicast destination + * is specified using an interface index. The same approach may be used for + * IPv4 as well, in which case it overrides the IPv4 multicast override + * address below. Here we have to look up the netif by going through the + * list, but by doing so we skip a route lookup. If the interface index has + * gone stale, we fall through and do the regular route lookup after all. */ + if (pcb->mcast_ifindex != NETIF_NO_INDEX) { + netif = netif_get_by_index(pcb->mcast_ifindex); + } +#if LWIP_IPV4 + else +#if LWIP_IPV6 + if (IP_IS_V4(dst_ip)) +#endif /* LWIP_IPV6 */ + { + /* IPv4 does not use source-based routing by default, so we use an + administratively selected interface for multicast by default. + However, this can be overridden by setting an interface address + in pcb->mcast_ip4 that is used for routing. If this routing lookup + fails, we try regular routing as though no override was set. */ + if (!ip4_addr_isany_val(pcb->mcast_ip4) && + !ip4_addr_cmp(&pcb->mcast_ip4, IP4_ADDR_BROADCAST)) { + netif = ip4_route_src(ip_2_ip4(&pcb->local_ip), &pcb->mcast_ip4); + } + } +#endif /* LWIP_IPV4 */ + } + + if (netif == NULL) +#endif /* LWIP_MULTICAST_TX_OPTIONS */ + { + /* find the outgoing network interface for this packet */ + netif = ip_route(&pcb->local_ip, dst_ip); + } + } + + /* no outgoing network interface could be found? */ + if (netif == NULL) { + LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("udp_send: No route to ")); + ip_addr_debug_print(UDP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, dst_ip); + LWIP_DEBUGF(UDP_DEBUG, ("\n")); + UDP_STATS_INC(udp.rterr); + return ERR_RTE; + } +#if LWIP_CHECKSUM_ON_COPY && CHECKSUM_GEN_UDP + return udp_sendto_if_chksum(pcb, p, dst_ip, dst_port, netif, have_chksum, chksum); +#else /* LWIP_CHECKSUM_ON_COPY && CHECKSUM_GEN_UDP */ + return udp_sendto_if(pcb, p, dst_ip, dst_port, netif); +#endif /* LWIP_CHECKSUM_ON_COPY && CHECKSUM_GEN_UDP */ +} + +/** + * @ingroup udp_raw + * Send data to a specified address using UDP. + * The netif used for sending can be specified. + * + * This function exists mainly for DHCP, to be able to send UDP packets + * on a netif that is still down. + * + * @param pcb UDP PCB used to send the data. + * @param p chain of pbuf's to be sent. + * @param dst_ip Destination IP address. + * @param dst_port Destination UDP port. + * @param netif the netif used for sending. + * + * dst_ip & dst_port are expected to be in the same byte order as in the pcb. + * + * @return lwIP error code (@see udp_send for possible error codes) + * + * @see udp_disconnect() udp_send() + */ +err_t +udp_sendto_if(struct udp_pcb *pcb, struct pbuf *p, + const ip_addr_t *dst_ip, u16_t dst_port, struct netif *netif) +{ +#if LWIP_CHECKSUM_ON_COPY && CHECKSUM_GEN_UDP + return udp_sendto_if_chksum(pcb, p, dst_ip, dst_port, netif, 0, 0); +} + +/** Same as udp_sendto_if(), but with checksum */ +err_t +udp_sendto_if_chksum(struct udp_pcb *pcb, struct pbuf *p, const ip_addr_t *dst_ip, + u16_t dst_port, struct netif *netif, u8_t have_chksum, + u16_t chksum) +{ +#endif /* LWIP_CHECKSUM_ON_COPY && CHECKSUM_GEN_UDP */ + const ip_addr_t *src_ip; + + LWIP_ERROR("udp_sendto_if: invalid pcb", pcb != NULL, return ERR_ARG); + LWIP_ERROR("udp_sendto_if: invalid pbuf", p != NULL, return ERR_ARG); + LWIP_ERROR("udp_sendto_if: invalid dst_ip", dst_ip != NULL, return ERR_ARG); + LWIP_ERROR("udp_sendto_if: invalid netif", netif != NULL, return ERR_ARG); + + if (!IP_ADDR_PCB_VERSION_MATCH(pcb, dst_ip)) { + return ERR_VAL; + } + + /* PCB local address is IP_ANY_ADDR or multicast? */ +#if LWIP_IPV6 + if (IP_IS_V6(dst_ip)) { + if (ip6_addr_isany(ip_2_ip6(&pcb->local_ip)) || + ip6_addr_ismulticast(ip_2_ip6(&pcb->local_ip))) { + src_ip = ip6_select_source_address(netif, ip_2_ip6(dst_ip)); + if (src_ip == NULL) { + /* No suitable source address was found. */ + return ERR_RTE; + } + } else { + /* use UDP PCB local IPv6 address as source address, if still valid. */ + if (netif_get_ip6_addr_match(netif, ip_2_ip6(&pcb->local_ip)) < 0) { + /* Address isn't valid anymore. */ + return ERR_RTE; + } + src_ip = &pcb->local_ip; + } + } +#endif /* LWIP_IPV6 */ +#if LWIP_IPV4 && LWIP_IPV6 + else +#endif /* LWIP_IPV4 && LWIP_IPV6 */ +#if LWIP_IPV4 + if (ip4_addr_isany(ip_2_ip4(&pcb->local_ip)) || + ip4_addr_ismulticast(ip_2_ip4(&pcb->local_ip))) { + /* if the local_ip is any or multicast + * use the outgoing network interface IP address as source address */ + src_ip = netif_ip_addr4(netif); + } else { + /* check if UDP PCB local IP address is correct + * this could be an old address if netif->ip_addr has changed */ + if (!ip4_addr_cmp(ip_2_ip4(&(pcb->local_ip)), netif_ip4_addr(netif))) { + /* local_ip doesn't match, drop the packet */ + return ERR_RTE; + } + /* use UDP PCB local IP address as source address */ + src_ip = &pcb->local_ip; + } +#endif /* LWIP_IPV4 */ +#if LWIP_CHECKSUM_ON_COPY && CHECKSUM_GEN_UDP + return udp_sendto_if_src_chksum(pcb, p, dst_ip, dst_port, netif, have_chksum, chksum, src_ip); +#else /* LWIP_CHECKSUM_ON_COPY && CHECKSUM_GEN_UDP */ + return udp_sendto_if_src(pcb, p, dst_ip, dst_port, netif, src_ip); +#endif /* LWIP_CHECKSUM_ON_COPY && CHECKSUM_GEN_UDP */ +} + +/** @ingroup udp_raw + * Same as @ref udp_sendto_if, but with source address */ +err_t +udp_sendto_if_src(struct udp_pcb *pcb, struct pbuf *p, + const ip_addr_t *dst_ip, u16_t dst_port, struct netif *netif, const ip_addr_t *src_ip) +{ +#if LWIP_CHECKSUM_ON_COPY && CHECKSUM_GEN_UDP + return udp_sendto_if_src_chksum(pcb, p, dst_ip, dst_port, netif, 0, 0, src_ip); +} + +/** Same as udp_sendto_if_src(), but with checksum */ +err_t +udp_sendto_if_src_chksum(struct udp_pcb *pcb, struct pbuf *p, const ip_addr_t *dst_ip, + u16_t dst_port, struct netif *netif, u8_t have_chksum, + u16_t chksum, const ip_addr_t *src_ip) +{ +#endif /* LWIP_CHECKSUM_ON_COPY && CHECKSUM_GEN_UDP */ + struct udp_hdr *udphdr; + err_t err; + struct pbuf *q; /* q will be sent down the stack */ + u8_t ip_proto; + u8_t ttl; + + LWIP_ASSERT_CORE_LOCKED(); + + LWIP_ERROR("udp_sendto_if_src: invalid pcb", pcb != NULL, return ERR_ARG); + LWIP_ERROR("udp_sendto_if_src: invalid pbuf", p != NULL, return ERR_ARG); + LWIP_ERROR("udp_sendto_if_src: invalid dst_ip", dst_ip != NULL, return ERR_ARG); + LWIP_ERROR("udp_sendto_if_src: invalid src_ip", src_ip != NULL, return ERR_ARG); + LWIP_ERROR("udp_sendto_if_src: invalid netif", netif != NULL, return ERR_ARG); + + if (!IP_ADDR_PCB_VERSION_MATCH(pcb, src_ip) || + !IP_ADDR_PCB_VERSION_MATCH(pcb, dst_ip)) { + return ERR_VAL; + } + +#if LWIP_IPV4 && IP_SOF_BROADCAST + /* broadcast filter? */ + if (!ip_get_option(pcb, SOF_BROADCAST) && +#if LWIP_IPV6 + IP_IS_V4(dst_ip) && +#endif /* LWIP_IPV6 */ + ip_addr_isbroadcast(dst_ip, netif)) { + LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, + ("udp_sendto_if: SOF_BROADCAST not enabled on pcb %p\n", (void *)pcb)); + return ERR_VAL; + } +#endif /* LWIP_IPV4 && IP_SOF_BROADCAST */ + + /* if the PCB is not yet bound to a port, bind it here */ + if (pcb->local_port == 0) { + LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE, ("udp_send: not yet bound to a port, binding now\n")); + err = udp_bind(pcb, &pcb->local_ip, pcb->local_port); + if (err != ERR_OK) { + LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("udp_send: forced port bind failed\n")); + return err; + } + } + + /* packet too large to add a UDP header without causing an overflow? */ + if ((u16_t)(p->tot_len + UDP_HLEN) < p->tot_len) { + return ERR_MEM; + } + /* not enough space to add an UDP header to first pbuf in given p chain? */ + if (pbuf_add_header(p, UDP_HLEN)) { + /* allocate header in a separate new pbuf */ + q = pbuf_alloc(PBUF_IP, UDP_HLEN, PBUF_RAM); + /* new header pbuf could not be allocated? */ + if (q == NULL) { + LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("udp_send: could not allocate header\n")); + return ERR_MEM; + } + if (p->tot_len != 0) { + /* chain header q in front of given pbuf p (only if p contains data) */ + pbuf_chain(q, p); + } + /* first pbuf q points to header pbuf */ + LWIP_DEBUGF(UDP_DEBUG, + ("udp_send: added header pbuf %p before given pbuf %p\n", (void *)q, (void *)p)); + } else { + /* adding space for header within p succeeded */ + /* first pbuf q equals given pbuf */ + q = p; + LWIP_DEBUGF(UDP_DEBUG, ("udp_send: added header in given pbuf %p\n", (void *)p)); + } + LWIP_ASSERT("check that first pbuf can hold struct udp_hdr", + (q->len >= sizeof(struct udp_hdr))); + /* q now represents the packet to be sent */ + udphdr = (struct udp_hdr *)q->payload; + udphdr->src = lwip_htons(pcb->local_port); + udphdr->dest = lwip_htons(dst_port); + /* in UDP, 0 checksum means 'no checksum' */ + udphdr->chksum = 0x0000; + + /* Multicast Loop? */ +#if LWIP_MULTICAST_TX_OPTIONS + if (((pcb->flags & UDP_FLAGS_MULTICAST_LOOP) != 0) && ip_addr_ismulticast(dst_ip)) { + q->flags |= PBUF_FLAG_MCASTLOOP; + } +#endif /* LWIP_MULTICAST_TX_OPTIONS */ + + LWIP_DEBUGF(UDP_DEBUG, ("udp_send: sending datagram of length %"U16_F"\n", q->tot_len)); + +#if LWIP_UDPLITE + /* UDP Lite protocol? */ + if (pcb->flags & UDP_FLAGS_UDPLITE) { + u16_t chklen, chklen_hdr; + LWIP_DEBUGF(UDP_DEBUG, ("udp_send: UDP LITE packet length %"U16_F"\n", q->tot_len)); + /* set UDP message length in UDP header */ + chklen_hdr = chklen = pcb->chksum_len_tx; + if ((chklen < sizeof(struct udp_hdr)) || (chklen > q->tot_len)) { + if (chklen != 0) { + LWIP_DEBUGF(UDP_DEBUG, ("udp_send: UDP LITE pcb->chksum_len is illegal: %"U16_F"\n", chklen)); + } + /* For UDP-Lite, checksum length of 0 means checksum + over the complete packet. (See RFC 3828 chap. 3.1) + At least the UDP-Lite header must be covered by the + checksum, therefore, if chksum_len has an illegal + value, we generate the checksum over the complete + packet to be safe. */ + chklen_hdr = 0; + chklen = q->tot_len; + } + udphdr->len = lwip_htons(chklen_hdr); + /* calculate checksum */ +#if CHECKSUM_GEN_UDP + IF__NETIF_CHECKSUM_ENABLED(netif, NETIF_CHECKSUM_GEN_UDP) { +#if LWIP_CHECKSUM_ON_COPY + if (have_chksum) { + chklen = UDP_HLEN; + } +#endif /* LWIP_CHECKSUM_ON_COPY */ + udphdr->chksum = ip_chksum_pseudo_partial(q, IP_PROTO_UDPLITE, + q->tot_len, chklen, src_ip, dst_ip); +#if LWIP_CHECKSUM_ON_COPY + if (have_chksum) { + u32_t acc; + acc = udphdr->chksum + (u16_t)~(chksum); + udphdr->chksum = FOLD_U32T(acc); + } +#endif /* LWIP_CHECKSUM_ON_COPY */ + + /* chksum zero must become 0xffff, as zero means 'no checksum' */ + if (udphdr->chksum == 0x0000) { + udphdr->chksum = 0xffff; + } + } +#endif /* CHECKSUM_GEN_UDP */ + + ip_proto = IP_PROTO_UDPLITE; + } else +#endif /* LWIP_UDPLITE */ + { /* UDP */ + LWIP_DEBUGF(UDP_DEBUG, ("udp_send: UDP packet length %"U16_F"\n", q->tot_len)); + udphdr->len = lwip_htons(q->tot_len); + /* calculate checksum */ +#if CHECKSUM_GEN_UDP + IF__NETIF_CHECKSUM_ENABLED(netif, NETIF_CHECKSUM_GEN_UDP) { + /* Checksum is mandatory over IPv6. */ + if (IP_IS_V6(dst_ip) || (pcb->flags & UDP_FLAGS_NOCHKSUM) == 0) { + u16_t udpchksum; +#if LWIP_CHECKSUM_ON_COPY + if (have_chksum) { + u32_t acc; + udpchksum = ip_chksum_pseudo_partial(q, IP_PROTO_UDP, + q->tot_len, UDP_HLEN, src_ip, dst_ip); + acc = udpchksum + (u16_t)~(chksum); + udpchksum = FOLD_U32T(acc); + } else +#endif /* LWIP_CHECKSUM_ON_COPY */ + { + udpchksum = ip_chksum_pseudo(q, IP_PROTO_UDP, q->tot_len, + src_ip, dst_ip); + } + + /* chksum zero must become 0xffff, as zero means 'no checksum' */ + if (udpchksum == 0x0000) { + udpchksum = 0xffff; + } + udphdr->chksum = udpchksum; + } + } +#endif /* CHECKSUM_GEN_UDP */ + ip_proto = IP_PROTO_UDP; + } + + /* Determine TTL to use */ +#if LWIP_MULTICAST_TX_OPTIONS + ttl = (ip_addr_ismulticast(dst_ip) ? udp_get_multicast_ttl(pcb) : pcb->ttl); +#else /* LWIP_MULTICAST_TX_OPTIONS */ + ttl = pcb->ttl; +#endif /* LWIP_MULTICAST_TX_OPTIONS */ + + LWIP_DEBUGF(UDP_DEBUG, ("udp_send: UDP checksum 0x%04"X16_F"\n", udphdr->chksum)); + LWIP_DEBUGF(UDP_DEBUG, ("udp_send: ip_output_if (,,,,0x%02"X16_F",)\n", (u16_t)ip_proto)); + /* output to IP */ + NETIF_SET_HINTS(netif, &(pcb->netif_hints)); + err = ip_output_if_src(q, src_ip, dst_ip, ttl, pcb->tos, ip_proto, netif); + NETIF_RESET_HINTS(netif); + + /* @todo: must this be increased even if error occurred? */ + MIB2_STATS_INC(mib2.udpoutdatagrams); + + /* did we chain a separate header pbuf earlier? */ + if (q != p) { + /* free the header pbuf */ + pbuf_free(q); + q = NULL; + /* p is still referenced by the caller, and will live on */ + } + + UDP_STATS_INC(udp.xmit); + return err; +} + +/** + * @ingroup udp_raw + * Bind an UDP PCB. + * + * @param pcb UDP PCB to be bound with a local address ipaddr and port. + * @param ipaddr local IP address to bind with. Use IP_ANY_TYPE to + * bind to all local interfaces. + * @param port local UDP port to bind with. Use 0 to automatically bind + * to a random port between UDP_LOCAL_PORT_RANGE_START and + * UDP_LOCAL_PORT_RANGE_END. + * + * ipaddr & port are expected to be in the same byte order as in the pcb. + * + * @return lwIP error code. + * - ERR_OK. Successful. No error occurred. + * - ERR_USE. The specified ipaddr and port are already bound to by + * another UDP PCB. + * + * @see udp_disconnect() + */ +err_t +udp_bind(struct udp_pcb *pcb, const ip_addr_t *ipaddr, u16_t port) +{ + struct udp_pcb *ipcb; + u8_t rebind; +#if LWIP_IPV6 && LWIP_IPV6_SCOPES + ip_addr_t zoned_ipaddr; +#endif /* LWIP_IPV6 && LWIP_IPV6_SCOPES */ + + LWIP_ASSERT_CORE_LOCKED(); + +#if LWIP_IPV4 + /* Don't propagate NULL pointer (IPv4 ANY) to subsequent functions */ + if (ipaddr == NULL) { + ipaddr = IP4_ADDR_ANY; + } +#else /* LWIP_IPV4 */ + LWIP_ERROR("udp_bind: invalid ipaddr", ipaddr != NULL, return ERR_ARG); +#endif /* LWIP_IPV4 */ + + LWIP_ERROR("udp_bind: invalid pcb", pcb != NULL, return ERR_ARG); + + LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE, ("udp_bind(ipaddr = ")); + ip_addr_debug_print(UDP_DEBUG | LWIP_DBG_TRACE, ipaddr); + LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE, (", port = %"U16_F")\n", port)); + + rebind = 0; + /* Check for double bind and rebind of the same pcb */ + for (ipcb = udp_pcbs; ipcb != NULL; ipcb = ipcb->next) { + /* is this UDP PCB already on active list? */ + if (pcb == ipcb) { + rebind = 1; + break; + } + } + +#if LWIP_IPV6 && LWIP_IPV6_SCOPES + /* If the given IP address should have a zone but doesn't, assign one now. + * This is legacy support: scope-aware callers should always provide properly + * zoned source addresses. Do the zone selection before the address-in-use + * check below; as such we have to make a temporary copy of the address. */ + if (IP_IS_V6(ipaddr) && ip6_addr_lacks_zone(ip_2_ip6(ipaddr), IP6_UNKNOWN)) { + ip_addr_copy(zoned_ipaddr, *ipaddr); + ip6_addr_select_zone(ip_2_ip6(&zoned_ipaddr), ip_2_ip6(&zoned_ipaddr)); + ipaddr = &zoned_ipaddr; + } +#endif /* LWIP_IPV6 && LWIP_IPV6_SCOPES */ + + /* no port specified? */ + if (port == 0) { + port = udp_new_port(); + if (port == 0) { + /* no more ports available in local range */ + LWIP_DEBUGF(UDP_DEBUG, ("udp_bind: out of free UDP ports\n")); + return ERR_USE; + } + } else { + for (ipcb = udp_pcbs; ipcb != NULL; ipcb = ipcb->next) { + if (pcb != ipcb) { + /* By default, we don't allow to bind to a port that any other udp + PCB is already bound to, unless *all* PCBs with that port have tha + REUSEADDR flag set. */ +#if SO_REUSE + if (!ip_get_option(pcb, SOF_REUSEADDR) || + !ip_get_option(ipcb, SOF_REUSEADDR)) +#endif /* SO_REUSE */ + { + /* port matches that of PCB in list and REUSEADDR not set -> reject */ + if ((ipcb->local_port == port) && + /* IP address matches or any IP used? */ + (ip_addr_cmp(&ipcb->local_ip, ipaddr) || ip_addr_isany(ipaddr) || + ip_addr_isany(&ipcb->local_ip))) { + /* other PCB already binds to this local IP and port */ + LWIP_DEBUGF(UDP_DEBUG, + ("udp_bind: local port %"U16_F" already bound by another pcb\n", port)); + return ERR_USE; + } + } + } + } + } + + ip_addr_set_ipaddr(&pcb->local_ip, ipaddr); + + pcb->local_port = port; + mib2_udp_bind(pcb); + /* pcb not active yet? */ + if (rebind == 0) { + /* place the PCB on the active list if not already there */ + pcb->next = udp_pcbs; + udp_pcbs = pcb; + } + LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("udp_bind: bound to ")); + ip_addr_debug_print_val(UDP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, pcb->local_ip); + LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, (", port %"U16_F")\n", pcb->local_port)); + return ERR_OK; +} + +/** + * @ingroup udp_raw + * Bind an UDP PCB to a specific netif. + * After calling this function, all packets received via this PCB + * are guaranteed to have come in via the specified netif, and all + * outgoing packets will go out via the specified netif. + * + * @param pcb UDP PCB to be bound. + * @param netif netif to bind udp pcb to. Can be NULL. + * + * @see udp_disconnect() + */ +void +udp_bind_netif(struct udp_pcb *pcb, const struct netif *netif) +{ + LWIP_ASSERT_CORE_LOCKED(); + + if (netif != NULL) { + pcb->netif_idx = netif_get_index(netif); + } else { + pcb->netif_idx = NETIF_NO_INDEX; + } +} + +/** + * @ingroup udp_raw + * Sets the remote end of the pcb. This function does not generate any + * network traffic, but only sets the remote address of the pcb. + * + * @param pcb UDP PCB to be connected with remote address ipaddr and port. + * @param ipaddr remote IP address to connect with. + * @param port remote UDP port to connect with. + * + * @return lwIP error code + * + * ipaddr & port are expected to be in the same byte order as in the pcb. + * + * The udp pcb is bound to a random local port if not already bound. + * + * @see udp_disconnect() + */ +err_t +udp_connect(struct udp_pcb *pcb, const ip_addr_t *ipaddr, u16_t port) +{ + struct udp_pcb *ipcb; + + LWIP_ASSERT_CORE_LOCKED(); + + LWIP_ERROR("udp_connect: invalid pcb", pcb != NULL, return ERR_ARG); + LWIP_ERROR("udp_connect: invalid ipaddr", ipaddr != NULL, return ERR_ARG); + + if (pcb->local_port == 0) { + err_t err = udp_bind(pcb, &pcb->local_ip, pcb->local_port); + if (err != ERR_OK) { + return err; + } + } + + ip_addr_set_ipaddr(&pcb->remote_ip, ipaddr); +#if LWIP_IPV6 && LWIP_IPV6_SCOPES + /* If the given IP address should have a zone but doesn't, assign one now, + * using the bound address to make a more informed decision when possible. */ + if (IP_IS_V6(&pcb->remote_ip) && + ip6_addr_lacks_zone(ip_2_ip6(&pcb->remote_ip), IP6_UNKNOWN)) { + ip6_addr_select_zone(ip_2_ip6(&pcb->remote_ip), ip_2_ip6(&pcb->local_ip)); + } +#endif /* LWIP_IPV6 && LWIP_IPV6_SCOPES */ + + pcb->remote_port = port; + pcb->flags |= UDP_FLAGS_CONNECTED; + + LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("udp_connect: connected to ")); + ip_addr_debug_print_val(UDP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, + pcb->remote_ip); + LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, (", port %"U16_F")\n", pcb->remote_port)); + + /* Insert UDP PCB into the list of active UDP PCBs. */ + for (ipcb = udp_pcbs; ipcb != NULL; ipcb = ipcb->next) { + if (pcb == ipcb) { + /* already on the list, just return */ + return ERR_OK; + } + } + /* PCB not yet on the list, add PCB now */ + pcb->next = udp_pcbs; + udp_pcbs = pcb; + return ERR_OK; +} + +/** + * @ingroup udp_raw + * Remove the remote end of the pcb. This function does not generate + * any network traffic, but only removes the remote address of the pcb. + * + * @param pcb the udp pcb to disconnect. + */ +void +udp_disconnect(struct udp_pcb *pcb) +{ + LWIP_ASSERT_CORE_LOCKED(); + + LWIP_ERROR("udp_disconnect: invalid pcb", pcb != NULL, return); + + /* reset remote address association */ +#if LWIP_IPV4 && LWIP_IPV6 + if (IP_IS_ANY_TYPE_VAL(pcb->local_ip)) { + ip_addr_copy(pcb->remote_ip, *IP_ANY_TYPE); + } else { +#endif + ip_addr_set_any(IP_IS_V6_VAL(pcb->remote_ip), &pcb->remote_ip); +#if LWIP_IPV4 && LWIP_IPV6 + } +#endif + pcb->remote_port = 0; + pcb->netif_idx = NETIF_NO_INDEX; + /* mark PCB as unconnected */ + udp_clear_flags(pcb, UDP_FLAGS_CONNECTED); +} + +/** + * @ingroup udp_raw + * Set a receive callback for a UDP PCB. + * This callback will be called when receiving a datagram for the pcb. + * + * @param pcb the pcb for which to set the recv callback + * @param recv function pointer of the callback function + * @param recv_arg additional argument to pass to the callback function + */ +void +udp_recv(struct udp_pcb *pcb, udp_recv_fn recv, void *recv_arg) +{ + LWIP_ASSERT_CORE_LOCKED(); + + LWIP_ERROR("udp_recv: invalid pcb", pcb != NULL, return); + + /* remember recv() callback and user data */ + pcb->recv = recv; + pcb->recv_arg = recv_arg; +} + +/** + * @ingroup udp_raw + * Removes and deallocates the pcb. + * + * @param pcb UDP PCB to be removed. The PCB is removed from the list of + * UDP PCB's and the data structure is freed from memory. + * + * @see udp_new() + */ +void +udp_remove(struct udp_pcb *pcb) +{ + struct udp_pcb *pcb2; + + LWIP_ASSERT_CORE_LOCKED(); + + LWIP_ERROR("udp_remove: invalid pcb", pcb != NULL, return); + + mib2_udp_unbind(pcb); + /* pcb to be removed is first in list? */ + if (udp_pcbs == pcb) { + /* make list start at 2nd pcb */ + udp_pcbs = udp_pcbs->next; + /* pcb not 1st in list */ + } else { + for (pcb2 = udp_pcbs; pcb2 != NULL; pcb2 = pcb2->next) { + /* find pcb in udp_pcbs list */ + if (pcb2->next != NULL && pcb2->next == pcb) { + /* remove pcb from list */ + pcb2->next = pcb->next; + break; + } + } + } + memp_free(MEMP_UDP_PCB, pcb); +} + +/** + * @ingroup udp_raw + * Creates a new UDP pcb which can be used for UDP communication. The + * pcb is not active until it has either been bound to a local address + * or connected to a remote address. + * + * @return The UDP PCB which was created. NULL if the PCB data structure + * could not be allocated. + * + * @see udp_remove() + */ +struct udp_pcb * +udp_new(void) +{ + struct udp_pcb *pcb; + + LWIP_ASSERT_CORE_LOCKED(); + + pcb = (struct udp_pcb *)memp_malloc(MEMP_UDP_PCB); + /* could allocate UDP PCB? */ + if (pcb != NULL) { + /* UDP Lite: by initializing to all zeroes, chksum_len is set to 0 + * which means checksum is generated over the whole datagram per default + * (recommended as default by RFC 3828). */ + /* initialize PCB to all zeroes */ + memset(pcb, 0, sizeof(struct udp_pcb)); + pcb->ttl = UDP_TTL; +#if LWIP_MULTICAST_TX_OPTIONS + udp_set_multicast_ttl(pcb, UDP_TTL); +#endif /* LWIP_MULTICAST_TX_OPTIONS */ + } + return pcb; +} + +/** + * @ingroup udp_raw + * Create a UDP PCB for specific IP type. + * The pcb is not active until it has either been bound to a local address + * or connected to a remote address. + * + * @param type IP address type, see @ref lwip_ip_addr_type definitions. + * If you want to listen to IPv4 and IPv6 (dual-stack) packets, + * supply @ref IPADDR_TYPE_ANY as argument and bind to @ref IP_ANY_TYPE. + * @return The UDP PCB which was created. NULL if the PCB data structure + * could not be allocated. + * + * @see udp_remove() + */ +struct udp_pcb * +udp_new_ip_type(u8_t type) +{ + struct udp_pcb *pcb; + + LWIP_ASSERT_CORE_LOCKED(); + + pcb = udp_new(); +#if LWIP_IPV4 && LWIP_IPV6 + if (pcb != NULL) { + IP_SET_TYPE_VAL(pcb->local_ip, type); + IP_SET_TYPE_VAL(pcb->remote_ip, type); + } +#else + LWIP_UNUSED_ARG(type); +#endif /* LWIP_IPV4 && LWIP_IPV6 */ + return pcb; +} + +/** This function is called from netif.c when address is changed + * + * @param old_addr IP address of the netif before change + * @param new_addr IP address of the netif after change + */ +void udp_netif_ip_addr_changed(const ip_addr_t *old_addr, const ip_addr_t *new_addr) +{ + struct udp_pcb *upcb; + + if (!ip_addr_isany(old_addr) && !ip_addr_isany(new_addr)) { + for (upcb = udp_pcbs; upcb != NULL; upcb = upcb->next) { + /* PCB bound to current local interface address? */ + if (ip_addr_cmp(&upcb->local_ip, old_addr)) { + /* The PCB is bound to the old ipaddr and + * is set to bound to the new one instead */ + ip_addr_copy(upcb->local_ip, *new_addr); + } + } + } +} + +#if UDP_DEBUG +/** + * Print UDP header information for debug purposes. + * + * @param udphdr pointer to the udp header in memory. + */ +void +udp_debug_print(struct udp_hdr *udphdr) +{ + LWIP_DEBUGF(UDP_DEBUG, ("UDP header:\n")); + LWIP_DEBUGF(UDP_DEBUG, ("+-------------------------------+\n")); + LWIP_DEBUGF(UDP_DEBUG, ("| %5"U16_F" | %5"U16_F" | (src port, dest port)\n", + lwip_ntohs(udphdr->src), lwip_ntohs(udphdr->dest))); + LWIP_DEBUGF(UDP_DEBUG, ("+-------------------------------+\n")); + LWIP_DEBUGF(UDP_DEBUG, ("| %5"U16_F" | 0x%04"X16_F" | (len, chksum)\n", + lwip_ntohs(udphdr->len), lwip_ntohs(udphdr->chksum))); + LWIP_DEBUGF(UDP_DEBUG, ("+-------------------------------+\n")); +} +#endif /* UDP_DEBUG */ + +#endif /* LWIP_UDP */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa/inet.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa/inet.h new file mode 100644 index 0000000000000000000000000000000000000000..0ed9baf3d9f2e514fdfc043a3c7cb85fa0e2f3d6 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa/inet.h @@ -0,0 +1,33 @@ +/** + * @file + * This file is a posix wrapper for lwip/sockets.h. + */ + +/* + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + */ + +#include "lwip/sockets.h" diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/compat/posix/net/if.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/compat/posix/net/if.h new file mode 100644 index 0000000000000000000000000000000000000000..6b8e63a5277d3a2f53efa5e9b8831abe09b1ec2c --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/compat/posix/net/if.h @@ -0,0 +1,36 @@ +/** + * @file + * This file is a posix wrapper for lwip/if_api.h. + */ + +/* + * Copyright (c) 2017 Joel Cunningham, Garmin International, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + */ + +#include "lwip/if_api.h" diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/compat/posix/netdb.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/compat/posix/netdb.h new file mode 100644 index 0000000000000000000000000000000000000000..12d4c7f566c77fc4ded1aaf30a67072cd3f7d81c --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/compat/posix/netdb.h @@ -0,0 +1,33 @@ +/** + * @file + * This file is a posix wrapper for lwip/netdb.h. + */ + +/* + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + */ + +#include "lwip/netdb.h" diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/compat/posix/sys/socket.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/compat/posix/sys/socket.h new file mode 100644 index 0000000000000000000000000000000000000000..0ed9baf3d9f2e514fdfc043a3c7cb85fa0e2f3d6 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/compat/posix/sys/socket.h @@ -0,0 +1,33 @@ +/** + * @file + * This file is a posix wrapper for lwip/sockets.h. + */ + +/* + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + */ + +#include "lwip/sockets.h" diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/compat/stdc/errno.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/compat/stdc/errno.h new file mode 100644 index 0000000000000000000000000000000000000000..98a9aec996921d5be92ae8c10ad33bf42eae424f --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/compat/stdc/errno.h @@ -0,0 +1,33 @@ +/** + * @file + * This file is a posix/stdc wrapper for lwip/errno.h. + */ + +/* + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + */ + +#include "lwip/errno.h" diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/altcp.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/altcp.h new file mode 100644 index 0000000000000000000000000000000000000000..97abc54d05c186801ade43b5eed39fdeed94061c --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/altcp.h @@ -0,0 +1,201 @@ +/** + * @file + * Application layered TCP connection API (to be used from TCPIP thread)\n + * + * This file contains the generic API. + * For more details see @ref altcp_api. + */ + +/* + * Copyright (c) 2017 Simon Goldschmidt + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Simon Goldschmidt + * + */ +#ifndef LWIP_HDR_ALTCP_H +#define LWIP_HDR_ALTCP_H + +#include "lwip/opt.h" + +#if LWIP_ALTCP /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/tcpbase.h" +#include "lwip/err.h" +#include "lwip/pbuf.h" +#include "lwip/ip_addr.h" + +#ifdef __cplusplus +extern "C" { +#endif + +struct altcp_pcb; +struct altcp_functions; + +typedef err_t (*altcp_accept_fn)(void *arg, struct altcp_pcb *new_conn, err_t err); +typedef err_t (*altcp_connected_fn)(void *arg, struct altcp_pcb *conn, err_t err); +typedef err_t (*altcp_recv_fn)(void *arg, struct altcp_pcb *conn, struct pbuf *p, err_t err); +typedef err_t (*altcp_sent_fn)(void *arg, struct altcp_pcb *conn, u16_t len); +typedef err_t (*altcp_poll_fn)(void *arg, struct altcp_pcb *conn); +typedef void (*altcp_err_fn)(void *arg, err_t err); + +typedef struct altcp_pcb* (*altcp_new_fn)(void *arg, u8_t ip_type); + +struct altcp_pcb { + const struct altcp_functions *fns; + struct altcp_pcb *inner_conn; + void *arg; + void *state; + /* application callbacks */ + altcp_accept_fn accept; + altcp_connected_fn connected; + altcp_recv_fn recv; + altcp_sent_fn sent; + altcp_poll_fn poll; + altcp_err_fn err; + u8_t pollinterval; +}; + +/** @ingroup altcp */ +typedef struct altcp_allocator_s { + /** Allocator function */ + altcp_new_fn alloc; + /** Argument to allocator function */ + void *arg; +} altcp_allocator_t; + +struct altcp_pcb *altcp_new(altcp_allocator_t *allocator); +struct altcp_pcb *altcp_new_ip6(altcp_allocator_t *allocator); +struct altcp_pcb *altcp_new_ip_type(altcp_allocator_t *allocator, u8_t ip_type); + +void altcp_arg(struct altcp_pcb *conn, void *arg); +void altcp_accept(struct altcp_pcb *conn, altcp_accept_fn accept); +void altcp_recv(struct altcp_pcb *conn, altcp_recv_fn recv); +void altcp_sent(struct altcp_pcb *conn, altcp_sent_fn sent); +void altcp_poll(struct altcp_pcb *conn, altcp_poll_fn poll, u8_t interval); +void altcp_err(struct altcp_pcb *conn, altcp_err_fn err); + +void altcp_recved(struct altcp_pcb *conn, u16_t len); +err_t altcp_bind(struct altcp_pcb *conn, const ip_addr_t *ipaddr, u16_t port); +err_t altcp_connect(struct altcp_pcb *conn, const ip_addr_t *ipaddr, u16_t port, altcp_connected_fn connected); + +/* return conn for source code compatibility to tcp callback API only */ +struct altcp_pcb *altcp_listen_with_backlog_and_err(struct altcp_pcb *conn, u8_t backlog, err_t *err); +#define altcp_listen_with_backlog(conn, backlog) altcp_listen_with_backlog_and_err(conn, backlog, NULL) +/** @ingroup altcp */ +#define altcp_listen(conn) altcp_listen_with_backlog_and_err(conn, TCP_DEFAULT_LISTEN_BACKLOG, NULL) + +void altcp_abort(struct altcp_pcb *conn); +err_t altcp_close(struct altcp_pcb *conn); +err_t altcp_shutdown(struct altcp_pcb *conn, int shut_rx, int shut_tx); + +err_t altcp_write(struct altcp_pcb *conn, const void *dataptr, u16_t len, u8_t apiflags); +err_t altcp_output(struct altcp_pcb *conn); + +u16_t altcp_mss(struct altcp_pcb *conn); +u16_t altcp_sndbuf(struct altcp_pcb *conn); +u16_t altcp_sndqueuelen(struct altcp_pcb *conn); +void altcp_nagle_disable(struct altcp_pcb *conn); +void altcp_nagle_enable(struct altcp_pcb *conn); +int altcp_nagle_disabled(struct altcp_pcb *conn); + +void altcp_setprio(struct altcp_pcb *conn, u8_t prio); + +err_t altcp_get_tcp_addrinfo(struct altcp_pcb *conn, int local, ip_addr_t *addr, u16_t *port); +ip_addr_t *altcp_get_ip(struct altcp_pcb *conn, int local); +u16_t altcp_get_port(struct altcp_pcb *conn, int local); + +#ifdef LWIP_DEBUG +enum tcp_state altcp_dbg_get_tcp_state(struct altcp_pcb *conn); +#endif + +#ifdef __cplusplus +} +#endif + +#else /* LWIP_ALTCP */ + +/* ALTCP disabled, define everything to link against tcp callback API (e.g. to get a small non-ssl httpd) */ + +#include "lwip/tcp.h" + +#define altcp_accept_fn tcp_accept_fn +#define altcp_connected_fn tcp_connected_fn +#define altcp_recv_fn tcp_recv_fn +#define altcp_sent_fn tcp_sent_fn +#define altcp_poll_fn tcp_poll_fn +#define altcp_err_fn tcp_err_fn + +#define altcp_pcb tcp_pcb +#define altcp_tcp_new_ip_type tcp_new_ip_type +#define altcp_tcp_new tcp_new +#define altcp_tcp_new_ip6 tcp_new_ip6 + +#define altcp_new(allocator) tcp_new() +#define altcp_new_ip6(allocator) tcp_new_ip6() +#define altcp_new_ip_type(allocator, ip_type) tcp_new_ip_type(ip_type) + +#define altcp_arg tcp_arg +#define altcp_accept tcp_accept +#define altcp_recv tcp_recv +#define altcp_sent tcp_sent +#define altcp_poll tcp_poll +#define altcp_err tcp_err + +#define altcp_recved tcp_recved +#define altcp_bind tcp_bind +#define altcp_connect tcp_connect + +#define altcp_listen_with_backlog_and_err tcp_listen_with_backlog_and_err +#define altcp_listen_with_backlog tcp_listen_with_backlog +#define altcp_listen tcp_listen + +#define altcp_abort tcp_abort +#define altcp_close tcp_close +#define altcp_shutdown tcp_shutdown + +#define altcp_write tcp_write +#define altcp_output tcp_output + +#define altcp_mss tcp_mss +#define altcp_sndbuf tcp_sndbuf +#define altcp_sndqueuelen tcp_sndqueuelen +#define altcp_nagle_disable tcp_nagle_disable +#define altcp_nagle_enable tcp_nagle_enable +#define altcp_nagle_disabled tcp_nagle_disabled +#define altcp_setprio tcp_setprio + +#define altcp_get_tcp_addrinfo tcp_get_tcp_addrinfo +#define altcp_get_ip(pcb, local) ((local) ? (&(pcb)->local_ip) : (&(pcb)->remote_ip)) + +#ifdef LWIP_DEBUG +#define altcp_dbg_get_tcp_state tcp_dbg_get_tcp_state +#endif + +#endif /* LWIP_ALTCP */ + +#endif /* LWIP_HDR_ALTCP_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/altcp_tcp.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/altcp_tcp.h new file mode 100644 index 0000000000000000000000000000000000000000..dbde584683a9c82eb05bc0061c8e2d0f6c08580d --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/altcp_tcp.h @@ -0,0 +1,72 @@ +/** + * @file + * Application layered TCP connection API (to be used from TCPIP thread)\n + * This interface mimics the tcp callback API to the application while preventing + * direct linking (much like virtual functions). + * This way, an application can make use of other application layer protocols + * on top of TCP without knowing the details (e.g. TLS, proxy connection). + * + * This file contains the base implementation calling into tcp. + */ + +/* + * Copyright (c) 2017 Simon Goldschmidt + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Simon Goldschmidt + * + */ +#ifndef LWIP_HDR_ALTCP_TCP_H +#define LWIP_HDR_ALTCP_TCP_H + +#include "lwip/opt.h" + +#if LWIP_ALTCP /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/altcp.h" + +#ifdef __cplusplus +extern "C" { +#endif + +struct altcp_pcb *altcp_tcp_new_ip_type(u8_t ip_type); + +#define altcp_tcp_new() altcp_tcp_new_ip_type(IPADDR_TYPE_V4) +#define altcp_tcp_new_ip6() altcp_tcp_new_ip_type(IPADDR_TYPE_V6) + +struct altcp_pcb *altcp_tcp_alloc(void *arg, u8_t ip_type); + +struct tcp_pcb; +struct altcp_pcb *altcp_tcp_wrap(struct tcp_pcb *tpcb); + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_ALTCP */ + +#endif /* LWIP_HDR_ALTCP_TCP_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/altcp_tls.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/altcp_tls.h new file mode 100644 index 0000000000000000000000000000000000000000..7b17c60803c4c2fa65670e183bfb0c3320038b8f --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/altcp_tls.h @@ -0,0 +1,117 @@ +/** + * @file + * Application layered TCP/TLS connection API (to be used from TCPIP thread) + * + * @defgroup altcp_tls TLS layer + * @ingroup altcp + * This file contains function prototypes for a TLS layer. + * A port to ARM mbedtls is provided in the apps/ tree + * (LWIP_ALTCP_TLS_MBEDTLS option). + */ + +/* + * Copyright (c) 2017 Simon Goldschmidt + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Simon Goldschmidt + * + */ +#ifndef LWIP_HDR_ALTCP_TLS_H +#define LWIP_HDR_ALTCP_TLS_H + +#include "lwip/opt.h" + +#if LWIP_ALTCP /* don't build if not configured for use in lwipopts.h */ + +#if LWIP_ALTCP_TLS + +#include "lwip/altcp.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** @ingroup altcp_tls + * ALTCP_TLS configuration handle, content depends on port (e.g. mbedtls) + */ +struct altcp_tls_config; + +/** @ingroup altcp_tls + * Create an ALTCP_TLS server configuration handle + */ +struct altcp_tls_config *altcp_tls_create_config_server_privkey_cert(const u8_t *privkey, size_t privkey_len, + const u8_t *privkey_pass, size_t privkey_pass_len, + const u8_t *cert, size_t cert_len); + +/** @ingroup altcp_tls + * Create an ALTCP_TLS client configuration handle + */ +struct altcp_tls_config *altcp_tls_create_config_client(const u8_t *cert, size_t cert_len); + +/** @ingroup altcp_tls + * Create an ALTCP_TLS client configuration handle with two-way server/client authentication + */ +struct altcp_tls_config *altcp_tls_create_config_client_2wayauth(const u8_t *ca, size_t ca_len, const u8_t *privkey, size_t privkey_len, + const u8_t *privkey_pass, size_t privkey_pass_len, + const u8_t *cert, size_t cert_len); + +/** @ingroup altcp_tls + * Free an ALTCP_TLS configuration handle + */ +void altcp_tls_free_config(struct altcp_tls_config *conf); + +/** @ingroup altcp_tls + * Create new ALTCP_TLS layer wrapping an existing pcb as inner connection (e.g. TLS over TCP) + */ +struct altcp_pcb *altcp_tls_wrap(struct altcp_tls_config *config, struct altcp_pcb *inner_pcb); + +/** @ingroup altcp_tls + * Create new ALTCP_TLS pcb and its inner tcp pcb + */ +struct altcp_pcb *altcp_tls_new(struct altcp_tls_config *config, u8_t ip_type); + +/** @ingroup altcp_tls + * Create new ALTCP_TLS layer pcb and its inner tcp pcb. + * Same as @ref altcp_tls_new but this allocator function fits to + * @ref altcp_allocator_t / @ref altcp_new.\n + 'arg' must contain a struct altcp_tls_config *. + */ +struct altcp_pcb *altcp_tls_alloc(void *arg, u8_t ip_type); + +/** @ingroup altcp_tls + * Return pointer to internal TLS context so application can tweak it. + * Real type depends on port (e.g. mbedtls) + */ +void *altcp_tls_context(struct altcp_pcb *conn); + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_ALTCP_TLS */ +#endif /* LWIP_ALTCP */ +#endif /* LWIP_HDR_ALTCP_TLS_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/api.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/api.h new file mode 100644 index 0000000000000000000000000000000000000000..c2afaf26d310eb7638d93a5ce5f9fd750062a250 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/api.h @@ -0,0 +1,431 @@ +/** + * @file + * netconn API (to be used from non-TCPIP threads) + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef LWIP_HDR_API_H +#define LWIP_HDR_API_H + +#include "lwip/opt.h" + +#if LWIP_NETCONN || LWIP_SOCKET /* don't build if not configured for use in lwipopts.h */ +/* Note: Netconn API is always available when sockets are enabled - + * sockets are implemented on top of them */ + +#include "lwip/arch.h" +#include "lwip/netbuf.h" +#include "lwip/sys.h" +#include "lwip/ip_addr.h" +#include "lwip/err.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Throughout this file, IP addresses and port numbers are expected to be in + * the same byte order as in the corresponding pcb. + */ + +/* Flags for netconn_write (u8_t) */ +#define NETCONN_NOFLAG 0x00 +#define NETCONN_NOCOPY 0x00 /* Only for source code compatibility */ +#define NETCONN_COPY 0x01 +#define NETCONN_MORE 0x02 +#define NETCONN_DONTBLOCK 0x04 +#define NETCONN_NOAUTORCVD 0x08 /* prevent netconn_recv_data_tcp() from updating the tcp window - must be done manually via netconn_tcp_recvd() */ +#define NETCONN_NOFIN 0x10 /* upper layer already received data, leave FIN in queue until called again */ + +/* Flags for struct netconn.flags (u8_t) */ +/** This netconn had an error, don't block on recvmbox/acceptmbox any more */ +#define NETCONN_FLAG_MBOXCLOSED 0x01 +/** Should this netconn avoid blocking? */ +#define NETCONN_FLAG_NON_BLOCKING 0x02 +/** Was the last connect action a non-blocking one? */ +#define NETCONN_FLAG_IN_NONBLOCKING_CONNECT 0x04 +#if LWIP_NETCONN_FULLDUPLEX + /** The mbox of this netconn is being deallocated, don't use it anymore */ +#define NETCONN_FLAG_MBOXINVALID 0x08 +#endif /* LWIP_NETCONN_FULLDUPLEX */ +/** If a nonblocking write has been rejected before, poll_tcp needs to + check if the netconn is writable again */ +#define NETCONN_FLAG_CHECK_WRITESPACE 0x10 +#if LWIP_IPV6 +/** If this flag is set then only IPv6 communication is allowed on the + netconn. As per RFC#3493 this features defaults to OFF allowing + dual-stack usage by default. */ +#define NETCONN_FLAG_IPV6_V6ONLY 0x20 +#endif /* LWIP_IPV6 */ +#if LWIP_NETBUF_RECVINFO +/** Received packet info will be recorded for this netconn */ +#define NETCONN_FLAG_PKTINFO 0x40 +#endif /* LWIP_NETBUF_RECVINFO */ +/** A FIN has been received but not passed to the application yet */ +#define NETCONN_FIN_RX_PENDING 0x80 + +/* Helpers to process several netconn_types by the same code */ +#define NETCONNTYPE_GROUP(t) ((t)&0xF0) +#define NETCONNTYPE_DATAGRAM(t) ((t)&0xE0) +#if LWIP_IPV6 +#define NETCONN_TYPE_IPV6 0x08 +#define NETCONNTYPE_ISIPV6(t) (((t)&NETCONN_TYPE_IPV6) != 0) +#define NETCONNTYPE_ISUDPLITE(t) (((t)&0xF3) == NETCONN_UDPLITE) +#define NETCONNTYPE_ISUDPNOCHKSUM(t) (((t)&0xF3) == NETCONN_UDPNOCHKSUM) +#else /* LWIP_IPV6 */ +#define NETCONNTYPE_ISIPV6(t) (0) +#define NETCONNTYPE_ISUDPLITE(t) ((t) == NETCONN_UDPLITE) +#define NETCONNTYPE_ISUDPNOCHKSUM(t) ((t) == NETCONN_UDPNOCHKSUM) +#endif /* LWIP_IPV6 */ + +/** @ingroup netconn_common + * Protocol family and type of the netconn + */ +enum netconn_type { + NETCONN_INVALID = 0, + /** TCP IPv4 */ + NETCONN_TCP = 0x10, +#if LWIP_IPV6 + /** TCP IPv6 */ + NETCONN_TCP_IPV6 = NETCONN_TCP | NETCONN_TYPE_IPV6 /* 0x18 */, +#endif /* LWIP_IPV6 */ + /** UDP IPv4 */ + NETCONN_UDP = 0x20, + /** UDP IPv4 lite */ + NETCONN_UDPLITE = 0x21, + /** UDP IPv4 no checksum */ + NETCONN_UDPNOCHKSUM = 0x22, + +#if LWIP_IPV6 + /** UDP IPv6 (dual-stack by default, unless you call @ref netconn_set_ipv6only) */ + NETCONN_UDP_IPV6 = NETCONN_UDP | NETCONN_TYPE_IPV6 /* 0x28 */, + /** UDP IPv6 lite (dual-stack by default, unless you call @ref netconn_set_ipv6only) */ + NETCONN_UDPLITE_IPV6 = NETCONN_UDPLITE | NETCONN_TYPE_IPV6 /* 0x29 */, + /** UDP IPv6 no checksum (dual-stack by default, unless you call @ref netconn_set_ipv6only) */ + NETCONN_UDPNOCHKSUM_IPV6 = NETCONN_UDPNOCHKSUM | NETCONN_TYPE_IPV6 /* 0x2a */, +#endif /* LWIP_IPV6 */ + + /** Raw connection IPv4 */ + NETCONN_RAW = 0x40 +#if LWIP_IPV6 + /** Raw connection IPv6 (dual-stack by default, unless you call @ref netconn_set_ipv6only) */ + , NETCONN_RAW_IPV6 = NETCONN_RAW | NETCONN_TYPE_IPV6 /* 0x48 */ +#endif /* LWIP_IPV6 */ +}; + +/** Current state of the netconn. Non-TCP netconns are always + * in state NETCONN_NONE! */ +enum netconn_state { + NETCONN_NONE, + NETCONN_WRITE, + NETCONN_LISTEN, + NETCONN_CONNECT, + NETCONN_CLOSE +}; + +/** Used to inform the callback function about changes + * + * Event explanation: + * + * In the netconn implementation, there are three ways to block a client: + * + * - accept mbox (sys_arch_mbox_fetch(&conn->acceptmbox, &accept_ptr, 0); in netconn_accept()) + * - receive mbox (sys_arch_mbox_fetch(&conn->recvmbox, &buf, 0); in netconn_recv_data()) + * - send queue is full (sys_arch_sem_wait(LWIP_API_MSG_SEM(msg), 0); in lwip_netconn_do_write()) + * + * The events have to be seen as events signaling the state of these mboxes/semaphores. For non-blocking + * connections, you need to know in advance whether a call to a netconn function call would block or not, + * and these events tell you about that. + * + * RCVPLUS events say: Safe to perform a potentially blocking call call once more. + * They are counted in sockets - three RCVPLUS events for accept mbox means you are safe + * to call netconn_accept 3 times without being blocked. + * Same thing for receive mbox. + * + * RCVMINUS events say: Your call to to a possibly blocking function is "acknowledged". + * Socket implementation decrements the counter. + * + * For TX, there is no need to count, its merely a flag. SENDPLUS means you may send something. + * SENDPLUS occurs when enough data was delivered to peer so netconn_send() can be called again. + * A SENDMINUS event occurs when the next call to a netconn_send() would be blocking. + */ +enum netconn_evt { + NETCONN_EVT_RCVPLUS, + NETCONN_EVT_RCVMINUS, + NETCONN_EVT_SENDPLUS, + NETCONN_EVT_SENDMINUS, + NETCONN_EVT_ERROR +}; + +#if LWIP_IGMP || (LWIP_IPV6 && LWIP_IPV6_MLD) +/** Used for netconn_join_leave_group() */ +enum netconn_igmp { + NETCONN_JOIN, + NETCONN_LEAVE +}; +#endif /* LWIP_IGMP || (LWIP_IPV6 && LWIP_IPV6_MLD) */ + +#if LWIP_DNS +/* Used for netconn_gethostbyname_addrtype(), these should match the DNS_ADDRTYPE defines in dns.h */ +#define NETCONN_DNS_DEFAULT NETCONN_DNS_IPV4_IPV6 +#define NETCONN_DNS_IPV4 0 +#define NETCONN_DNS_IPV6 1 +#define NETCONN_DNS_IPV4_IPV6 2 /* try to resolve IPv4 first, try IPv6 if IPv4 fails only */ +#define NETCONN_DNS_IPV6_IPV4 3 /* try to resolve IPv6 first, try IPv4 if IPv6 fails only */ +#endif /* LWIP_DNS */ + +/* forward-declare some structs to avoid to include their headers */ +struct ip_pcb; +struct tcp_pcb; +struct udp_pcb; +struct raw_pcb; +struct netconn; +struct api_msg; + +/** A callback prototype to inform about events for a netconn */ +typedef void (* netconn_callback)(struct netconn *, enum netconn_evt, u16_t len); + +/** A netconn descriptor */ +struct netconn { + /** type of the netconn (TCP, UDP or RAW) */ + enum netconn_type type; + /** current state of the netconn */ + enum netconn_state state; + /** the lwIP internal protocol control block */ + union { + struct ip_pcb *ip; + struct tcp_pcb *tcp; + struct udp_pcb *udp; + struct raw_pcb *raw; + } pcb; + /** the last asynchronous unreported error this netconn had */ + err_t pending_err; +#if !LWIP_NETCONN_SEM_PER_THREAD + /** sem that is used to synchronously execute functions in the core context */ + sys_sem_t op_completed; +#endif + /** mbox where received packets are stored until they are fetched + by the netconn application thread (can grow quite big) */ + sys_mbox_t recvmbox; +#if LWIP_TCP + /** mbox where new connections are stored until processed + by the application thread */ + sys_mbox_t acceptmbox; +#endif /* LWIP_TCP */ +#if LWIP_NETCONN_FULLDUPLEX + /** number of threads waiting on an mbox. This is required to unblock + all threads when closing while threads are waiting. */ + int mbox_threads_waiting; +#endif + /** only used for socket layer */ +#if LWIP_SOCKET + int socket; +#endif /* LWIP_SOCKET */ +#if LWIP_SO_SNDTIMEO + /** timeout to wait for sending data (which means enqueueing data for sending + in internal buffers) in milliseconds */ + s32_t send_timeout; +#endif /* LWIP_SO_RCVTIMEO */ +#if LWIP_SO_RCVTIMEO + /** timeout in milliseconds to wait for new data to be received + (or connections to arrive for listening netconns) */ + u32_t recv_timeout; +#endif /* LWIP_SO_RCVTIMEO */ +#if LWIP_SO_RCVBUF + /** maximum amount of bytes queued in recvmbox + not used for TCP: adjust TCP_WND instead! */ + int recv_bufsize; + /** number of bytes currently in recvmbox to be received, + tested against recv_bufsize to limit bytes on recvmbox + for UDP and RAW, used for FIONREAD */ + int recv_avail; +#endif /* LWIP_SO_RCVBUF */ +#if LWIP_SO_LINGER + /** values <0 mean linger is disabled, values > 0 are seconds to linger */ + s16_t linger; +#endif /* LWIP_SO_LINGER */ + /** flags holding more netconn-internal state, see NETCONN_FLAG_* defines */ + u8_t flags; +#if LWIP_TCP + /** TCP: when data passed to netconn_write doesn't fit into the send buffer, + this temporarily stores the message. + Also used during connect and close. */ + struct api_msg *current_msg; +#endif /* LWIP_TCP */ + /** A callback function that is informed about events for this netconn */ + netconn_callback callback; +}; + +/** This vector type is passed to @ref netconn_write_vectors_partly to send + * multiple buffers at once. + * ATTENTION: This type has to directly map struct iovec since one is casted + * into the other! + */ +struct netvector { + /** pointer to the application buffer that contains the data to send */ + const void *ptr; + /** size of the application data to send */ + size_t len; +}; + +/** Register an Network connection event */ +#define API_EVENT(c,e,l) if (c->callback) { \ + (*c->callback)(c, e, l); \ + } + +/* Network connection functions: */ + +/** @ingroup netconn_common + * Create new netconn connection + * @param t @ref netconn_type */ +#define netconn_new(t) netconn_new_with_proto_and_callback(t, 0, NULL) +#define netconn_new_with_callback(t, c) netconn_new_with_proto_and_callback(t, 0, c) +struct netconn *netconn_new_with_proto_and_callback(enum netconn_type t, u8_t proto, + netconn_callback callback); +err_t netconn_prepare_delete(struct netconn *conn); +err_t netconn_delete(struct netconn *conn); +/** Get the type of a netconn (as enum netconn_type). */ +#define netconn_type(conn) (conn->type) + +err_t netconn_getaddr(struct netconn *conn, ip_addr_t *addr, + u16_t *port, u8_t local); +/** @ingroup netconn_common */ +#define netconn_peer(c,i,p) netconn_getaddr(c,i,p,0) +/** @ingroup netconn_common */ +#define netconn_addr(c,i,p) netconn_getaddr(c,i,p,1) + +err_t netconn_bind(struct netconn *conn, const ip_addr_t *addr, u16_t port); +err_t netconn_bind_if(struct netconn *conn, u8_t if_idx); +err_t netconn_connect(struct netconn *conn, const ip_addr_t *addr, u16_t port); +err_t netconn_disconnect (struct netconn *conn); +err_t netconn_listen_with_backlog(struct netconn *conn, u8_t backlog); +/** @ingroup netconn_tcp */ +#define netconn_listen(conn) netconn_listen_with_backlog(conn, TCP_DEFAULT_LISTEN_BACKLOG) +err_t netconn_accept(struct netconn *conn, struct netconn **new_conn); +err_t netconn_recv(struct netconn *conn, struct netbuf **new_buf); +err_t netconn_recv_udp_raw_netbuf(struct netconn *conn, struct netbuf **new_buf); +err_t netconn_recv_udp_raw_netbuf_flags(struct netconn *conn, struct netbuf **new_buf, u8_t apiflags); +err_t netconn_recv_tcp_pbuf(struct netconn *conn, struct pbuf **new_buf); +err_t netconn_recv_tcp_pbuf_flags(struct netconn *conn, struct pbuf **new_buf, u8_t apiflags); +err_t netconn_tcp_recvd(struct netconn *conn, size_t len); +err_t netconn_sendto(struct netconn *conn, struct netbuf *buf, + const ip_addr_t *addr, u16_t port); +err_t netconn_send(struct netconn *conn, struct netbuf *buf); +err_t netconn_write_partly(struct netconn *conn, const void *dataptr, size_t size, + u8_t apiflags, size_t *bytes_written); +err_t netconn_write_vectors_partly(struct netconn *conn, struct netvector *vectors, u16_t vectorcnt, + u8_t apiflags, size_t *bytes_written); +/** @ingroup netconn_tcp */ +#define netconn_write(conn, dataptr, size, apiflags) \ + netconn_write_partly(conn, dataptr, size, apiflags, NULL) +err_t netconn_close(struct netconn *conn); +err_t netconn_shutdown(struct netconn *conn, u8_t shut_rx, u8_t shut_tx); + +#if LWIP_IGMP || (LWIP_IPV6 && LWIP_IPV6_MLD) +err_t netconn_join_leave_group(struct netconn *conn, const ip_addr_t *multiaddr, + const ip_addr_t *netif_addr, enum netconn_igmp join_or_leave); +err_t netconn_join_leave_group_netif(struct netconn *conn, const ip_addr_t *multiaddr, + u8_t if_idx, enum netconn_igmp join_or_leave); +#endif /* LWIP_IGMP || (LWIP_IPV6 && LWIP_IPV6_MLD) */ +#if LWIP_DNS +#if LWIP_IPV4 && LWIP_IPV6 +err_t netconn_gethostbyname_addrtype(const char *name, ip_addr_t *addr, u8_t dns_addrtype); +#define netconn_gethostbyname(name, addr) netconn_gethostbyname_addrtype(name, addr, NETCONN_DNS_DEFAULT) +#else /* LWIP_IPV4 && LWIP_IPV6 */ +err_t netconn_gethostbyname(const char *name, ip_addr_t *addr); +#define netconn_gethostbyname_addrtype(name, addr, dns_addrtype) netconn_gethostbyname(name, addr) +#endif /* LWIP_IPV4 && LWIP_IPV6 */ +#endif /* LWIP_DNS */ + +err_t netconn_err(struct netconn *conn); +#define netconn_recv_bufsize(conn) ((conn)->recv_bufsize) + +#define netconn_set_flags(conn, set_flags) do { (conn)->flags = (u8_t)((conn)->flags | (set_flags)); } while(0) +#define netconn_clear_flags(conn, clr_flags) do { (conn)->flags = (u8_t)((conn)->flags & (u8_t)(~(clr_flags) & 0xff)); } while(0) +#define netconn_is_flag_set(conn, flag) (((conn)->flags & (flag)) != 0) + +/** Set the blocking status of netconn calls (@todo: write/send is missing) */ +#define netconn_set_nonblocking(conn, val) do { if(val) { \ + netconn_set_flags(conn, NETCONN_FLAG_NON_BLOCKING); \ +} else { \ + netconn_clear_flags(conn, NETCONN_FLAG_NON_BLOCKING); }} while(0) +/** Get the blocking status of netconn calls (@todo: write/send is missing) */ +#define netconn_is_nonblocking(conn) (((conn)->flags & NETCONN_FLAG_NON_BLOCKING) != 0) + +#if LWIP_IPV6 +/** @ingroup netconn_common + * TCP: Set the IPv6 ONLY status of netconn calls (see NETCONN_FLAG_IPV6_V6ONLY) + */ +#define netconn_set_ipv6only(conn, val) do { if(val) { \ + netconn_set_flags(conn, NETCONN_FLAG_IPV6_V6ONLY); \ +} else { \ + netconn_clear_flags(conn, NETCONN_FLAG_IPV6_V6ONLY); }} while(0) +/** @ingroup netconn_common + * TCP: Get the IPv6 ONLY status of netconn calls (see NETCONN_FLAG_IPV6_V6ONLY) + */ +#define netconn_get_ipv6only(conn) (((conn)->flags & NETCONN_FLAG_IPV6_V6ONLY) != 0) +#endif /* LWIP_IPV6 */ + +#if LWIP_SO_SNDTIMEO +/** Set the send timeout in milliseconds */ +#define netconn_set_sendtimeout(conn, timeout) ((conn)->send_timeout = (timeout)) +/** Get the send timeout in milliseconds */ +#define netconn_get_sendtimeout(conn) ((conn)->send_timeout) +#endif /* LWIP_SO_SNDTIMEO */ +#if LWIP_SO_RCVTIMEO +/** Set the receive timeout in milliseconds */ +#define netconn_set_recvtimeout(conn, timeout) ((conn)->recv_timeout = (timeout)) +/** Get the receive timeout in milliseconds */ +#define netconn_get_recvtimeout(conn) ((conn)->recv_timeout) +#endif /* LWIP_SO_RCVTIMEO */ +#if LWIP_SO_RCVBUF +/** Set the receive buffer in bytes */ +#define netconn_set_recvbufsize(conn, recvbufsize) ((conn)->recv_bufsize = (recvbufsize)) +/** Get the receive buffer in bytes */ +#define netconn_get_recvbufsize(conn) ((conn)->recv_bufsize) +#endif /* LWIP_SO_RCVBUF*/ + +#if LWIP_NETCONN_SEM_PER_THREAD +void netconn_thread_init(void); +void netconn_thread_cleanup(void); +#else /* LWIP_NETCONN_SEM_PER_THREAD */ +#define netconn_thread_init() +#define netconn_thread_cleanup() +#endif /* LWIP_NETCONN_SEM_PER_THREAD */ + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_NETCONN || LWIP_SOCKET */ + +#endif /* LWIP_HDR_API_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/altcp_proxyconnect.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/altcp_proxyconnect.h new file mode 100644 index 0000000000000000000000000000000000000000..65d31279de69475bfb64f3a9f5f79899f124e33a --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/altcp_proxyconnect.h @@ -0,0 +1,79 @@ +/** + * @file + * Application layered TCP connection API that executes a proxy-connect. + * + * This file provides a starting layer that executes a proxy-connect e.g. to + * set up TLS connections through a http proxy. + */ + +/* + * Copyright (c) 2018 Simon Goldschmidt + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Simon Goldschmidt + * + */ + +#ifndef LWIP_HDR_APPS_ALTCP_PROXYCONNECT_H +#define LWIP_HDR_APPS_ALTCP_PROXYCONNECT_H + +#include "lwip/opt.h" + +#if LWIP_ALTCP /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/ip_addr.h" + +#ifdef __cplusplus +extern "C" { +#endif + +struct altcp_proxyconnect_config { + ip_addr_t proxy_addr; + u16_t proxy_port; +}; + + +struct altcp_pcb *altcp_proxyconnect_new(struct altcp_proxyconnect_config *config, struct altcp_pcb *inner_pcb); +struct altcp_pcb *altcp_proxyconnect_new_tcp(struct altcp_proxyconnect_config *config, u8_t ip_type); + +struct altcp_pcb *altcp_proxyconnect_alloc(void *arg, u8_t ip_type); + +#if LWIP_ALTCP_TLS +struct altcp_proxyconnect_tls_config { + struct altcp_proxyconnect_config proxy; + struct altcp_tls_config *tls_config; +}; + +struct altcp_pcb *altcp_proxyconnect_tls_alloc(void *arg, u8_t ip_type); +#endif /* LWIP_ALTCP_TLS */ + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_ALTCP */ +#endif /* LWIP_HDR_APPS_ALTCP_PROXYCONNECT_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/altcp_tls_mbedtls_opts.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/altcp_tls_mbedtls_opts.h new file mode 100644 index 0000000000000000000000000000000000000000..36cddd93fe524871bcdb6d5fa983a14363e9cd52 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/altcp_tls_mbedtls_opts.h @@ -0,0 +1,67 @@ +/** + * @file + * Application layered TCP/TLS connection API (to be used from TCPIP thread) + * + * This file contains options for an mbedtls port of the TLS layer. + */ + +/* + * Copyright (c) 2017 Simon Goldschmidt + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Simon Goldschmidt + * + */ +#ifndef LWIP_HDR_ALTCP_TLS_OPTS_H +#define LWIP_HDR_ALTCP_TLS_OPTS_H + +#include "lwip/opt.h" + +#if LWIP_ALTCP /* don't build if not configured for use in lwipopts.h */ + +/** LWIP_ALTCP_TLS_MBEDTLS==1: use mbedTLS for TLS support for altcp API + * mbedtls include directory must be reachable via include search path + */ +#ifndef LWIP_ALTCP_TLS_MBEDTLS +#define LWIP_ALTCP_TLS_MBEDTLS 0 +#endif + +/** Configure debug level of this file */ +#ifndef ALTCP_MBEDTLS_DEBUG +#define ALTCP_MBEDTLS_DEBUG LWIP_DBG_OFF +#endif + +/** Set a session timeout in seconds for the basic session cache + * ATTENTION: Using a session cache can lower security by reusing keys! + */ +#ifndef ALTCP_MBEDTLS_SESSION_CACHE_TIMEOUT_SECONDS +#define ALTCP_MBEDTLS_SESSION_CACHE_TIMEOUT_SECONDS 0 +#endif + +#endif /* LWIP_ALTCP */ + +#endif /* LWIP_HDR_ALTCP_TLS_OPTS_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/fs.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/fs.h new file mode 100644 index 0000000000000000000000000000000000000000..67b9a60a9c3abef1e428f03b46c68ca8738dbb8f --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/fs.h @@ -0,0 +1,126 @@ +/* + * Copyright (c) 2001-2003 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef LWIP_HDR_APPS_FS_H +#define LWIP_HDR_APPS_FS_H + +#include "httpd_opts.h" +#include "lwip/err.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define FS_READ_EOF -1 +#define FS_READ_DELAYED -2 + +#if HTTPD_PRECALCULATED_CHECKSUM +struct fsdata_chksum { + u32_t offset; + u16_t chksum; + u16_t len; +}; +#endif /* HTTPD_PRECALCULATED_CHECKSUM */ + +#define FS_FILE_FLAGS_HEADER_INCLUDED 0x01 +#define FS_FILE_FLAGS_HEADER_PERSISTENT 0x02 +#define FS_FILE_FLAGS_HEADER_HTTPVER_1_1 0x04 +#define FS_FILE_FLAGS_SSI 0x08 + +/** Define FS_FILE_EXTENSION_T_DEFINED if you have typedef'ed to your private + * pointer type (defaults to 'void' so the default usage is 'void*') + */ +#ifndef FS_FILE_EXTENSION_T_DEFINED +typedef void fs_file_extension; +#endif + +struct fs_file { + const char *data; + int len; + int index; + /* pextension is free for implementations to hold private (extensional) + arbitrary data, e.g. holding some file state or file system handle */ + fs_file_extension *pextension; +#if HTTPD_PRECALCULATED_CHECKSUM + const struct fsdata_chksum *chksum; + u16_t chksum_count; +#endif /* HTTPD_PRECALCULATED_CHECKSUM */ + u8_t flags; +#if LWIP_HTTPD_CUSTOM_FILES + u8_t is_custom_file; +#endif /* LWIP_HTTPD_CUSTOM_FILES */ +#if LWIP_HTTPD_FILE_STATE + void *state; +#endif /* LWIP_HTTPD_FILE_STATE */ +}; + +#if LWIP_HTTPD_FS_ASYNC_READ +typedef void (*fs_wait_cb)(void *arg); +#endif /* LWIP_HTTPD_FS_ASYNC_READ */ + +err_t fs_open(struct fs_file *file, const char *name); +void fs_close(struct fs_file *file); +#if LWIP_HTTPD_DYNAMIC_FILE_READ +#if LWIP_HTTPD_FS_ASYNC_READ +int fs_read_async(struct fs_file *file, char *buffer, int count, fs_wait_cb callback_fn, void *callback_arg); +#else /* LWIP_HTTPD_FS_ASYNC_READ */ +int fs_read(struct fs_file *file, char *buffer, int count); +#endif /* LWIP_HTTPD_FS_ASYNC_READ */ +#endif /* LWIP_HTTPD_DYNAMIC_FILE_READ */ +#if LWIP_HTTPD_FS_ASYNC_READ +int fs_is_file_ready(struct fs_file *file, fs_wait_cb callback_fn, void *callback_arg); +#endif /* LWIP_HTTPD_FS_ASYNC_READ */ +int fs_bytes_left(struct fs_file *file); + +#if LWIP_HTTPD_FILE_STATE +/** This user-defined function is called when a file is opened. */ +void *fs_state_init(struct fs_file *file, const char *name); +/** This user-defined function is called when a file is closed. */ +void fs_state_free(struct fs_file *file, void *state); +#endif /* #if LWIP_HTTPD_FILE_STATE */ + +struct fsdata_file { + const struct fsdata_file *next; + const unsigned char *name; + const unsigned char *data; + int len; + u8_t flags; +#if HTTPD_PRECALCULATED_CHECKSUM + u16_t chksum_count; + const struct fsdata_chksum *chksum; +#endif /* HTTPD_PRECALCULATED_CHECKSUM */ +}; + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_APPS_FS_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/http_client.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/http_client.h new file mode 100644 index 0000000000000000000000000000000000000000..8a0630833f95392f30f6172eb4cf95b02ca277f5 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/http_client.h @@ -0,0 +1,160 @@ +/** + * @file + * HTTP client + */ + +/* + * Copyright (c) 2018 Simon Goldschmidt + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Simon Goldschmidt + * + */ + +#ifndef LWIP_HDR_APPS_HTTP_CLIENT_H +#define LWIP_HDR_APPS_HTTP_CLIENT_H + +#include "lwip/opt.h" +#include "lwip/ip_addr.h" +#include "lwip/err.h" +#include "lwip/altcp.h" +#include "lwip/prot/iana.h" +#include "lwip/pbuf.h" + +#if LWIP_TCP && LWIP_CALLBACK_API + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @ingroup httpc + * HTTPC_HAVE_FILE_IO: define this to 1 to have functions dowloading directly + * to disk via fopen/fwrite. + * These functions are example implementations of the interface only. + */ +#ifndef LWIP_HTTPC_HAVE_FILE_IO +#define LWIP_HTTPC_HAVE_FILE_IO 0 +#endif + +/** + * @ingroup httpc + * The default TCP port used for HTTP + */ +#define HTTP_DEFAULT_PORT LWIP_IANA_PORT_HTTP + +/** + * @ingroup httpc + * HTTP client result codes + */ +typedef enum ehttpc_result { + /** File successfully received */ + HTTPC_RESULT_OK = 0, + /** Unknown error */ + HTTPC_RESULT_ERR_UNKNOWN = 1, + /** Connection to server failed */ + HTTPC_RESULT_ERR_CONNECT = 2, + /** Failed to resolve server hostname */ + HTTPC_RESULT_ERR_HOSTNAME = 3, + /** Connection unexpectedly closed by remote server */ + HTTPC_RESULT_ERR_CLOSED = 4, + /** Connection timed out (server didn't respond in time) */ + HTTPC_RESULT_ERR_TIMEOUT = 5, + /** Server responded with an error code */ + HTTPC_RESULT_ERR_SVR_RESP = 6, + /** Local memory error */ + HTTPC_RESULT_ERR_MEM = 7, + /** Local abort */ + HTTPC_RESULT_LOCAL_ABORT = 8, + /** Content length mismatch */ + HTTPC_RESULT_ERR_CONTENT_LEN = 9 +} httpc_result_t; + +typedef struct _httpc_state httpc_state_t; + +/** + * @ingroup httpc + * Prototype of a http client callback function + * + * @param arg argument specified when initiating the request + * @param httpc_result result of the http transfer (see enum httpc_result_t) + * @param rx_content_len number of bytes received (without headers) + * @param srv_res this contains the http status code received (if any) + * @param err an error returned by internal lwip functions, can help to specify + * the source of the error but must not necessarily be != ERR_OK + */ +typedef void (*httpc_result_fn)(void *arg, httpc_result_t httpc_result, u32_t rx_content_len, u32_t srv_res, err_t err); + +/** + * @ingroup httpc + * Prototype of http client callback: called when the headers are received + * + * @param connection http client connection + * @param arg argument specified when initiating the request + * @param hdr header pbuf(s) (may contain data also) + * @param hdr_len length of the heders in 'hdr' + * @param content_len content length as received in the headers (-1 if not received) + * @return if != ERR_OK is returned, the connection is aborted + */ +typedef err_t (*httpc_headers_done_fn)(httpc_state_t *connection, void *arg, struct pbuf *hdr, u16_t hdr_len, u32_t content_len); + +typedef struct _httpc_connection { + ip_addr_t proxy_addr; + u16_t proxy_port; + u8_t use_proxy; + /* @todo: add username:pass? */ + +#if LWIP_ALTCP + altcp_allocator_t *altcp_allocator; +#endif + + /* this callback is called when the transfer is finished (or aborted) */ + httpc_result_fn result_fn; + /* this callback is called after receiving the http headers + It can abort the connection by returning != ERR_OK */ + httpc_headers_done_fn headers_done_fn; +} httpc_connection_t; + +err_t httpc_get_file(const ip_addr_t* server_addr, u16_t port, const char* uri, const httpc_connection_t *settings, + altcp_recv_fn recv_fn, void* callback_arg, httpc_state_t **connection); +err_t httpc_get_file_dns(const char* server_name, u16_t port, const char* uri, const httpc_connection_t *settings, + altcp_recv_fn recv_fn, void* callback_arg, httpc_state_t **connection); + +#if LWIP_HTTPC_HAVE_FILE_IO +err_t httpc_get_file_to_disk(const ip_addr_t* server_addr, u16_t port, const char* uri, const httpc_connection_t *settings, + void* callback_arg, const char* local_file_name, httpc_state_t **connection); +err_t httpc_get_file_dns_to_disk(const char* server_name, u16_t port, const char* uri, const httpc_connection_t *settings, + void* callback_arg, const char* local_file_name, httpc_state_t **connection); +#endif /* LWIP_HTTPC_HAVE_FILE_IO */ + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_TCP && LWIP_CALLBACK_API */ + +#endif /* LWIP_HDR_APPS_HTTP_CLIENT_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/httpd.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/httpd.h new file mode 100644 index 0000000000000000000000000000000000000000..e872429f2ee49251005956990c1c95de3df40577 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/httpd.h @@ -0,0 +1,255 @@ +/** + * @file + * HTTP server + */ + +/* + * Copyright (c) 2001-2003 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + * This version of the file has been modified by Texas Instruments to offer + * simple server-side-include (SSI) and Common Gateway Interface (CGI) + * capability. + */ + +#ifndef LWIP_HDR_APPS_HTTPD_H +#define LWIP_HDR_APPS_HTTPD_H + +#include "httpd_opts.h" +#include "lwip/err.h" +#include "lwip/pbuf.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#if LWIP_HTTPD_CGI + +/** + * @ingroup httpd + * Function pointer for a CGI script handler. + * + * This function is called each time the HTTPD server is asked for a file + * whose name was previously registered as a CGI function using a call to + * http_set_cgi_handlers. The iIndex parameter provides the index of the + * CGI within the cgis array passed to http_set_cgi_handlers. Parameters + * pcParam and pcValue provide access to the parameters provided along with + * the URI. iNumParams provides a count of the entries in the pcParam and + * pcValue arrays. Each entry in the pcParam array contains the name of a + * parameter with the corresponding entry in the pcValue array containing the + * value for that parameter. Note that pcParam may contain multiple elements + * with the same name if, for example, a multi-selection list control is used + * in the form generating the data. + * + * The function should return a pointer to a character string which is the + * path and filename of the response that is to be sent to the connected + * browser, for example "/thanks.htm" or "/response/error.ssi". + * + * The maximum number of parameters that will be passed to this function via + * iNumParams is defined by LWIP_HTTPD_MAX_CGI_PARAMETERS. Any parameters in + * the incoming HTTP request above this number will be discarded. + * + * Requests intended for use by this CGI mechanism must be sent using the GET + * method (which encodes all parameters within the URI rather than in a block + * later in the request). Attempts to use the POST method will result in the + * request being ignored. + * + */ +typedef const char *(*tCGIHandler)(int iIndex, int iNumParams, char *pcParam[], + char *pcValue[]); + +/** + * @ingroup httpd + * Structure defining the base filename (URL) of a CGI and the associated + * function which is to be called when that URL is requested. + */ +typedef struct +{ + const char *pcCGIName; + tCGIHandler pfnCGIHandler; +} tCGI; + +void http_set_cgi_handlers(const tCGI *pCGIs, int iNumHandlers); + +#endif /* LWIP_HTTPD_CGI */ + +#if LWIP_HTTPD_CGI || LWIP_HTTPD_CGI_SSI + +#if LWIP_HTTPD_CGI_SSI +/* we have to prototype this struct here to make it available for the handler */ +struct fs_file; + +/** Define this generic CGI handler in your application. + * It is called once for every URI with parameters. + * The parameters can be stored to the object passed as connection_state, which + * is allocated to file->state via fs_state_init() from fs_open() or fs_open_custom(). + * Content creation via SSI or complete dynamic files can retrieve the CGI params from there. + */ +extern void httpd_cgi_handler(struct fs_file *file, const char* uri, int iNumParams, + char **pcParam, char **pcValue +#if defined(LWIP_HTTPD_FILE_STATE) && LWIP_HTTPD_FILE_STATE + , void *connection_state +#endif /* LWIP_HTTPD_FILE_STATE */ + ); +#endif /* LWIP_HTTPD_CGI_SSI */ + +#endif /* LWIP_HTTPD_CGI || LWIP_HTTPD_CGI_SSI */ + +#if LWIP_HTTPD_SSI + +/** + * @ingroup httpd + * Function pointer for the SSI tag handler callback. + * + * This function will be called each time the HTTPD server detects a tag of the + * form in files with extensions mentioned in the g_pcSSIExtensions + * array (currently .shtml, .shtm, .ssi, .xml, .json) where "name" appears as + * one of the tags supplied to http_set_ssi_handler in the tags array. The + * returned insert string, which will be appended after the the string + * "" in file sent back to the client, should be written to pointer + * pcInsert. iInsertLen contains the size of the buffer pointed to by + * pcInsert. The iIndex parameter provides the zero-based index of the tag as + * found in the tags array and identifies the tag that is to be processed. + * + * The handler returns the number of characters written to pcInsert excluding + * any terminating NULL or HTTPD_SSI_TAG_UNKNOWN when tag is not recognized. + * + * Note that the behavior of this SSI mechanism is somewhat different from the + * "normal" SSI processing as found in, for example, the Apache web server. In + * this case, the inserted text is appended following the SSI tag rather than + * replacing the tag entirely. This allows for an implementation that does not + * require significant additional buffering of output data yet which will still + * offer usable SSI functionality. One downside to this approach is when + * attempting to use SSI within JavaScript. The SSI tag is structured to + * resemble an HTML comment but this syntax does not constitute a comment + * within JavaScript and, hence, leaving the tag in place will result in + * problems in these cases. In order to avoid these problems, define + * LWIP_HTTPD_SSI_INCLUDE_TAG as zero in your lwip options file, or use JavaScript + * style block comments in the form / * # name * / (without the spaces). + */ +typedef u16_t (*tSSIHandler)( +#if LWIP_HTTPD_SSI_RAW + const char* ssi_tag_name, +#else /* LWIP_HTTPD_SSI_RAW */ + int iIndex, +#endif /* LWIP_HTTPD_SSI_RAW */ + char *pcInsert, int iInsertLen +#if LWIP_HTTPD_SSI_MULTIPART + , u16_t current_tag_part, u16_t *next_tag_part +#endif /* LWIP_HTTPD_SSI_MULTIPART */ +#if defined(LWIP_HTTPD_FILE_STATE) && LWIP_HTTPD_FILE_STATE + , void *connection_state +#endif /* LWIP_HTTPD_FILE_STATE */ + ); + +/** Set the SSI handler function + * (if LWIP_HTTPD_SSI_RAW==1, only the first argument is used) + */ +void http_set_ssi_handler(tSSIHandler pfnSSIHandler, + const char **ppcTags, int iNumTags); + +/** For LWIP_HTTPD_SSI_RAW==1, return this to indicate the tag is unknown. + * In this case, the webserver writes a warning into the page. + * You can also just return 0 to write nothing for unknown tags. + */ +#define HTTPD_SSI_TAG_UNKNOWN 0xFFFF + +#endif /* LWIP_HTTPD_SSI */ + +#if LWIP_HTTPD_SUPPORT_POST + +/* These functions must be implemented by the application */ + +/** + * @ingroup httpd + * Called when a POST request has been received. The application can decide + * whether to accept it or not. + * + * @param connection Unique connection identifier, valid until httpd_post_end + * is called. + * @param uri The HTTP header URI receiving the POST request. + * @param http_request The raw HTTP request (the first packet, normally). + * @param http_request_len Size of 'http_request'. + * @param content_len Content-Length from HTTP header. + * @param response_uri Filename of response file, to be filled when denying the + * request + * @param response_uri_len Size of the 'response_uri' buffer. + * @param post_auto_wnd Set this to 0 to let the callback code handle window + * updates by calling 'httpd_post_data_recved' (to throttle rx speed) + * default is 1 (httpd handles window updates automatically) + * @return ERR_OK: Accept the POST request, data may be passed in + * another err_t: Deny the POST request, send back 'bad request'. + */ +err_t httpd_post_begin(void *connection, const char *uri, const char *http_request, + u16_t http_request_len, int content_len, char *response_uri, + u16_t response_uri_len, u8_t *post_auto_wnd); + +/** + * @ingroup httpd + * Called for each pbuf of data that has been received for a POST. + * ATTENTION: The application is responsible for freeing the pbufs passed in! + * + * @param connection Unique connection identifier. + * @param p Received data. + * @return ERR_OK: Data accepted. + * another err_t: Data denied, http_post_get_response_uri will be called. + */ +err_t httpd_post_receive_data(void *connection, struct pbuf *p); + +/** + * @ingroup httpd + * Called when all data is received or when the connection is closed. + * The application must return the filename/URI of a file to send in response + * to this POST request. If the response_uri buffer is untouched, a 404 + * response is returned. + * + * @param connection Unique connection identifier. + * @param response_uri Filename of response file, to be filled when denying the request + * @param response_uri_len Size of the 'response_uri' buffer. + */ +void httpd_post_finished(void *connection, char *response_uri, u16_t response_uri_len); + +#if LWIP_HTTPD_POST_MANUAL_WND +void httpd_post_data_recved(void *connection, u16_t recved_len); +#endif /* LWIP_HTTPD_POST_MANUAL_WND */ + +#endif /* LWIP_HTTPD_SUPPORT_POST */ + +void httpd_init(void); + +#if HTTPD_ENABLE_HTTPS +struct altcp_tls_config; +void httpd_inits(struct altcp_tls_config *conf); +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_APPS_HTTPD_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/httpd_opts.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/httpd_opts.h new file mode 100644 index 0000000000000000000000000000000000000000..8723961fd4b521b85320a692d1ba9ed0f47f607b --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/httpd_opts.h @@ -0,0 +1,396 @@ +/** + * @file + * HTTP server options list + */ + +/* + * Copyright (c) 2001-2003 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + * This version of the file has been modified by Texas Instruments to offer + * simple server-side-include (SSI) and Common Gateway Interface (CGI) + * capability. + */ + +#ifndef LWIP_HDR_APPS_HTTPD_OPTS_H +#define LWIP_HDR_APPS_HTTPD_OPTS_H + +#include "lwip/opt.h" +#include "lwip/prot/iana.h" + +/** + * @defgroup httpd_opts Options + * @ingroup httpd + * @{ + */ + +/** Set this to 1 to support CGI (old style). + * + * This old style CGI support works by registering an array of URLs and + * associated CGI handler functions (@ref http_set_cgi_handlers). + * This list is scanned just before fs_open is called from request handling. + * The handler can return a new URL that is used internally by the httpd to + * load the returned page (passed to fs_open). + * + * Use this CGI type e.g. to execute specific actions and return a page that + * does not depend on the CGI parameters. + */ +#if !defined LWIP_HTTPD_CGI || defined __DOXYGEN__ +#define LWIP_HTTPD_CGI 0 +#endif + +/** Set this to 1 to support CGI (new style). + * + * This new style CGI support works by calling a global function + * (@ref tCGIHandler) for all URLs that are found. fs_open is called first + * and the URL can not be written by the CGI handler. Instead, this handler gets + * passed the http file state, an object where it can store information derived + * from the CGI URL or parameters. This file state is later passed to SSI, so + * the SSI code can return data depending on CGI input. + * + * Use this CGI handler if you want CGI information passed on to SSI. + */ +#if !defined LWIP_HTTPD_CGI_SSI || defined __DOXYGEN__ +#define LWIP_HTTPD_CGI_SSI 0 +#endif + +/** Set this to 1 to support SSI (Server-Side-Includes) + * + * In contrast to other http servers, this only calls a preregistered callback + * function (@see http_set_ssi_handler) for each tag (in the format of + * ) encountered in SSI-enabled pages. + * SSI-enabled pages must have one of the predefined SSI-enabled file extensions. + * All files with one of these extensions are parsed when sent. + * + * A downside of the current SSI implementation is that persistent connections + * don't work, as the file length is not known in advance (and httpd currently + * relies on the Content-Length header for persistent connections). + * + * To save memory, the maximum tag length is limited (@see LWIP_HTTPD_MAX_TAG_NAME_LEN). + * To save memory, the maximum insertion string length is limited (@see + * LWIP_HTTPD_MAX_TAG_INSERT_LEN). If this is not enought, @ref LWIP_HTTPD_SSI_MULTIPART + * can be used. + */ +#if !defined LWIP_HTTPD_SSI || defined __DOXYGEN__ +#define LWIP_HTTPD_SSI 0 +#endif + +/** Set this to 1 to implement an SSI tag handler callback that gets a const char* + * to the tag (instead of an index into a pre-registered array of known tags) + * If this is 0, the SSI handler callback function is only called pre-registered tags. + */ +#if !defined LWIP_HTTPD_SSI_RAW || defined __DOXYGEN__ +#define LWIP_HTTPD_SSI_RAW 0 +#endif + +/** Set this to 0 to prevent parsing the file extension at runtime to decide + * if a file should be scanned for SSI tags or not. + * Default is 1 (file extensions are checked using the g_pcSSIExtensions array) + * Set to 2 to override this runtime test function. + * + * This is enabled by default, but if you only use a newer version of makefsdata + * supporting the "-ssi" option, this info is already present in + */ +#if !defined LWIP_HTTPD_SSI_BY_FILE_EXTENSION || defined __DOXYGEN__ +#define LWIP_HTTPD_SSI_BY_FILE_EXTENSION 1 +#endif + +/** Set this to 1 to support HTTP POST */ +#if !defined LWIP_HTTPD_SUPPORT_POST || defined __DOXYGEN__ +#define LWIP_HTTPD_SUPPORT_POST 0 +#endif + +/* The maximum number of parameters that the CGI handler can be sent. */ +#if !defined LWIP_HTTPD_MAX_CGI_PARAMETERS || defined __DOXYGEN__ +#define LWIP_HTTPD_MAX_CGI_PARAMETERS 16 +#endif + +/** LWIP_HTTPD_SSI_MULTIPART==1: SSI handler function is called with 2 more + * arguments indicating a counter for insert string that are too long to be + * inserted at once: the SSI handler function must then set 'next_tag_part' + * which will be passed back to it in the next call. */ +#if !defined LWIP_HTTPD_SSI_MULTIPART || defined __DOXYGEN__ +#define LWIP_HTTPD_SSI_MULTIPART 0 +#endif + +/* The maximum length of the string comprising the SSI tag name + * ATTENTION: tags longer than this are ignored, not truncated! + */ +#if !defined LWIP_HTTPD_MAX_TAG_NAME_LEN || defined __DOXYGEN__ +#define LWIP_HTTPD_MAX_TAG_NAME_LEN 8 +#endif + +/* The maximum length of string that can be returned to replace any given tag + * If this buffer is not long enough, use LWIP_HTTPD_SSI_MULTIPART. + */ +#if !defined LWIP_HTTPD_MAX_TAG_INSERT_LEN || defined __DOXYGEN__ +#define LWIP_HTTPD_MAX_TAG_INSERT_LEN 192 +#endif + +#if !defined LWIP_HTTPD_POST_MANUAL_WND || defined __DOXYGEN__ +#define LWIP_HTTPD_POST_MANUAL_WND 0 +#endif + +/** This string is passed in the HTTP header as "Server: " */ +#if !defined HTTPD_SERVER_AGENT || defined __DOXYGEN__ +#define HTTPD_SERVER_AGENT "lwIP/" LWIP_VERSION_STRING " (http://savannah.nongnu.org/projects/lwip)" +#endif + +/** Set this to 1 if you want to include code that creates HTTP headers + * at runtime. Default is off: HTTP headers are then created statically + * by the makefsdata tool. Static headers mean smaller code size, but + * the (readonly) fsdata will grow a bit as every file includes the HTTP + * header. */ +#if !defined LWIP_HTTPD_DYNAMIC_HEADERS || defined __DOXYGEN__ +#define LWIP_HTTPD_DYNAMIC_HEADERS 0 +#endif + +#if !defined HTTPD_DEBUG || defined __DOXYGEN__ +#define HTTPD_DEBUG LWIP_DBG_OFF +#endif + +/** Set this to 1 to use a memp pool for allocating + * struct http_state instead of the heap. + * If enabled, you'll need to define MEMP_NUM_PARALLEL_HTTPD_CONNS + * (and MEMP_NUM_PARALLEL_HTTPD_SSI_CONNS for SSI) to set the size of + * the pool(s). + */ +#if !defined HTTPD_USE_MEM_POOL || defined __DOXYGEN__ +#define HTTPD_USE_MEM_POOL 0 +#endif + +/** The server port for HTTPD to use */ +#if !defined HTTPD_SERVER_PORT || defined __DOXYGEN__ +#define HTTPD_SERVER_PORT LWIP_IANA_PORT_HTTP +#endif + +/** The https server port for HTTPD to use */ +#if !defined HTTPD_SERVER_PORT_HTTPS || defined __DOXYGEN__ +#define HTTPD_SERVER_PORT_HTTPS LWIP_IANA_PORT_HTTPS +#endif + +/** Enable https support? */ +#if !defined HTTPD_ENABLE_HTTPS || defined __DOXYGEN__ +#define HTTPD_ENABLE_HTTPS 0 +#endif + +/** Maximum retries before the connection is aborted/closed. + * - number of times pcb->poll is called -> default is 4*500ms = 2s; + * - reset when pcb->sent is called + */ +#if !defined HTTPD_MAX_RETRIES || defined __DOXYGEN__ +#define HTTPD_MAX_RETRIES 4 +#endif + +/** The poll delay is X*500ms */ +#if !defined HTTPD_POLL_INTERVAL || defined __DOXYGEN__ +#define HTTPD_POLL_INTERVAL 4 +#endif + +/** Priority for tcp pcbs created by HTTPD (very low by default). + * Lower priorities get killed first when running out of memory. + */ +#if !defined HTTPD_TCP_PRIO || defined __DOXYGEN__ +#define HTTPD_TCP_PRIO TCP_PRIO_MIN +#endif + +/** Set this to 1 to enable timing each file sent */ +#if !defined LWIP_HTTPD_TIMING || defined __DOXYGEN__ +#define LWIP_HTTPD_TIMING 0 +#endif +/** Set this to 1 to enable timing each file sent */ +#if !defined HTTPD_DEBUG_TIMING || defined __DOXYGEN__ +#define HTTPD_DEBUG_TIMING LWIP_DBG_OFF +#endif + +/** Set this to one to show error pages when parsing a request fails instead + of simply closing the connection. */ +#if !defined LWIP_HTTPD_SUPPORT_EXTSTATUS || defined __DOXYGEN__ +#define LWIP_HTTPD_SUPPORT_EXTSTATUS 0 +#endif + +/** Set this to 0 to drop support for HTTP/0.9 clients (to save some bytes) */ +#if !defined LWIP_HTTPD_SUPPORT_V09 || defined __DOXYGEN__ +#define LWIP_HTTPD_SUPPORT_V09 1 +#endif + +/** Set this to 1 to enable HTTP/1.1 persistent connections. + * ATTENTION: If the generated file system includes HTTP headers, these must + * include the "Connection: keep-alive" header (pass argument "-11" to makefsdata). + */ +#if !defined LWIP_HTTPD_SUPPORT_11_KEEPALIVE || defined __DOXYGEN__ +#define LWIP_HTTPD_SUPPORT_11_KEEPALIVE 0 +#endif + +/** Set this to 1 to support HTTP request coming in in multiple packets/pbufs */ +#if !defined LWIP_HTTPD_SUPPORT_REQUESTLIST || defined __DOXYGEN__ +#define LWIP_HTTPD_SUPPORT_REQUESTLIST 1 +#endif + +#if LWIP_HTTPD_SUPPORT_REQUESTLIST +/** Number of rx pbufs to enqueue to parse an incoming request (up to the first + newline) */ +#if !defined LWIP_HTTPD_REQ_QUEUELEN || defined __DOXYGEN__ +#define LWIP_HTTPD_REQ_QUEUELEN 5 +#endif + +/** Number of (TCP payload-) bytes (in pbufs) to enqueue to parse and incoming + request (up to the first double-newline) */ +#if !defined LWIP_HTTPD_REQ_BUFSIZE || defined __DOXYGEN__ +#define LWIP_HTTPD_REQ_BUFSIZE LWIP_HTTPD_MAX_REQ_LENGTH +#endif + +/** Defines the maximum length of a HTTP request line (up to the first CRLF, + copied from pbuf into this a global buffer when pbuf- or packet-queues + are received - otherwise the input pbuf is used directly) */ +#if !defined LWIP_HTTPD_MAX_REQ_LENGTH || defined __DOXYGEN__ +#define LWIP_HTTPD_MAX_REQ_LENGTH LWIP_MIN(1023, (LWIP_HTTPD_REQ_QUEUELEN * PBUF_POOL_BUFSIZE)) +#endif +#endif /* LWIP_HTTPD_SUPPORT_REQUESTLIST */ + +/** This is the size of a static buffer used when URIs end with '/'. + * In this buffer, the directory requested is concatenated with all the + * configured default file names. + * Set to 0 to disable checking default filenames on non-root directories. + */ +#if !defined LWIP_HTTPD_MAX_REQUEST_URI_LEN || defined __DOXYGEN__ +#define LWIP_HTTPD_MAX_REQUEST_URI_LEN 63 +#endif + +/** Maximum length of the filename to send as response to a POST request, + * filled in by the application when a POST is finished. + */ +#if !defined LWIP_HTTPD_POST_MAX_RESPONSE_URI_LEN || defined __DOXYGEN__ +#define LWIP_HTTPD_POST_MAX_RESPONSE_URI_LEN 63 +#endif + +/** Set this to 0 to not send the SSI tag (default is on, so the tag will + * be sent in the HTML page */ +#if !defined LWIP_HTTPD_SSI_INCLUDE_TAG || defined __DOXYGEN__ +#define LWIP_HTTPD_SSI_INCLUDE_TAG 1 +#endif + +/** Set this to 1 to call tcp_abort when tcp_close fails with memory error. + * This can be used to prevent consuming all memory in situations where the + * HTTP server has low priority compared to other communication. */ +#if !defined LWIP_HTTPD_ABORT_ON_CLOSE_MEM_ERROR || defined __DOXYGEN__ +#define LWIP_HTTPD_ABORT_ON_CLOSE_MEM_ERROR 0 +#endif + +/** Set this to 1 to kill the oldest connection when running out of + * memory for 'struct http_state' or 'struct http_ssi_state'. + * ATTENTION: This puts all connections on a linked list, so may be kind of slow. + */ +#if !defined LWIP_HTTPD_KILL_OLD_ON_CONNECTIONS_EXCEEDED || defined __DOXYGEN__ +#define LWIP_HTTPD_KILL_OLD_ON_CONNECTIONS_EXCEEDED 0 +#endif + +/** Set this to 1 to send URIs without extension without headers + * (who uses this at all??) */ +#if !defined LWIP_HTTPD_OMIT_HEADER_FOR_EXTENSIONLESS_URI || defined __DOXYGEN__ +#define LWIP_HTTPD_OMIT_HEADER_FOR_EXTENSIONLESS_URI 0 +#endif + +/** Default: Tags are sent from struct http_state and are therefore volatile */ +#if !defined HTTP_IS_TAG_VOLATILE || defined __DOXYGEN__ +#define HTTP_IS_TAG_VOLATILE(ptr) TCP_WRITE_FLAG_COPY +#endif + +/* By default, the httpd is limited to send 2*pcb->mss to keep resource usage low + when http is not an important protocol in the device. */ +#if !defined HTTPD_LIMIT_SENDING_TO_2MSS || defined __DOXYGEN__ +#define HTTPD_LIMIT_SENDING_TO_2MSS 1 +#endif + +/* Define this to a function that returns the maximum amount of data to enqueue. + The function have this signature: u16_t fn(struct altcp_pcb* pcb); + The best place to define this is the hooks file (@see LWIP_HOOK_FILENAME) */ +#if !defined HTTPD_MAX_WRITE_LEN || defined __DOXYGEN__ +#if HTTPD_LIMIT_SENDING_TO_2MSS +#define HTTPD_MAX_WRITE_LEN(pcb) ((u16_t)(2 * altcp_mss(pcb))) +#endif +#endif + +/*------------------- FS OPTIONS -------------------*/ + +/** Set this to 1 and provide the functions: + * - "int fs_open_custom(struct fs_file *file, const char *name)" + * Called first for every opened file to allow opening files + * that are not included in fsdata(_custom).c + * - "void fs_close_custom(struct fs_file *file)" + * Called to free resources allocated by fs_open_custom(). + */ +#if !defined LWIP_HTTPD_CUSTOM_FILES || defined __DOXYGEN__ +#define LWIP_HTTPD_CUSTOM_FILES 0 +#endif + +/** Set this to 1 to support fs_read() to dynamically read file data. + * Without this (default=off), only one-block files are supported, + * and the contents must be ready after fs_open(). + */ +#if !defined LWIP_HTTPD_DYNAMIC_FILE_READ || defined __DOXYGEN__ +#define LWIP_HTTPD_DYNAMIC_FILE_READ 0 +#endif + +/** Set this to 1 to include an application state argument per file + * that is opened. This allows to keep a state per connection/file. + */ +#if !defined LWIP_HTTPD_FILE_STATE || defined __DOXYGEN__ +#define LWIP_HTTPD_FILE_STATE 0 +#endif + +/** HTTPD_PRECALCULATED_CHECKSUM==1: include precompiled checksums for + * predefined (MSS-sized) chunks of the files to prevent having to calculate + * the checksums at runtime. */ +#if !defined HTTPD_PRECALCULATED_CHECKSUM || defined __DOXYGEN__ +#define HTTPD_PRECALCULATED_CHECKSUM 0 +#endif + +/** LWIP_HTTPD_FS_ASYNC_READ==1: support asynchronous read operations + * (fs_read_async returns FS_READ_DELAYED and calls a callback when finished). + */ +#if !defined LWIP_HTTPD_FS_ASYNC_READ || defined __DOXYGEN__ +#define LWIP_HTTPD_FS_ASYNC_READ 0 +#endif + +/** Filename (including path) to use as FS data file */ +#if !defined HTTPD_FSDATA_FILE || defined __DOXYGEN__ +/* HTTPD_USE_CUSTOM_FSDATA: Compatibility with deprecated lwIP option */ +#if defined(HTTPD_USE_CUSTOM_FSDATA) && (HTTPD_USE_CUSTOM_FSDATA != 0) +#define HTTPD_FSDATA_FILE "fsdata_custom.c" +#else +#define HTTPD_FSDATA_FILE "fsdata.c" +#endif +#endif + +/** + * @} + */ + +#endif /* LWIP_HDR_APPS_HTTPD_OPTS_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/lwiperf.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/lwiperf.h new file mode 100644 index 0000000000000000000000000000000000000000..cc86e7f87812e61f4da87753ca30d725a21ca1cf --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/lwiperf.h @@ -0,0 +1,100 @@ +/** + * @file + * lwIP iPerf server implementation + */ + +/* + * Copyright (c) 2014 Simon Goldschmidt + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Simon Goldschmidt + * + */ +#ifndef LWIP_HDR_APPS_LWIPERF_H +#define LWIP_HDR_APPS_LWIPERF_H + +#include "lwip/opt.h" +#include "lwip/ip_addr.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define LWIPERF_TCP_PORT_DEFAULT 5001 + +/** lwIPerf test results */ +enum lwiperf_report_type +{ + /** The server side test is done */ + LWIPERF_TCP_DONE_SERVER, + /** The client side test is done */ + LWIPERF_TCP_DONE_CLIENT, + /** Local error lead to test abort */ + LWIPERF_TCP_ABORTED_LOCAL, + /** Data check error lead to test abort */ + LWIPERF_TCP_ABORTED_LOCAL_DATAERROR, + /** Transmit error lead to test abort */ + LWIPERF_TCP_ABORTED_LOCAL_TXERROR, + /** Remote side aborted the test */ + LWIPERF_TCP_ABORTED_REMOTE +}; + +/** Control */ +enum lwiperf_client_type +{ + /** Unidirectional tx only test */ + LWIPERF_CLIENT, + /** Do a bidirectional test simultaneously */ + LWIPERF_DUAL, + /** Do a bidirectional test individually */ + LWIPERF_TRADEOFF +}; + +/** Prototype of a report function that is called when a session is finished. + This report function can show the test results. + @param report_type contains the test result */ +typedef void (*lwiperf_report_fn)(void *arg, enum lwiperf_report_type report_type, + const ip_addr_t* local_addr, u16_t local_port, const ip_addr_t* remote_addr, u16_t remote_port, + u32_t bytes_transferred, u32_t ms_duration, u32_t bandwidth_kbitpsec); + +void* lwiperf_start_tcp_server(const ip_addr_t* local_addr, u16_t local_port, + lwiperf_report_fn report_fn, void* report_arg); +void* lwiperf_start_tcp_server_default(lwiperf_report_fn report_fn, void* report_arg); +void* lwiperf_start_tcp_client(const ip_addr_t* remote_addr, u16_t remote_port, + enum lwiperf_client_type type, + lwiperf_report_fn report_fn, void* report_arg); +void* lwiperf_start_tcp_client_default(const ip_addr_t* remote_addr, + lwiperf_report_fn report_fn, void* report_arg); + +void lwiperf_abort(void* lwiperf_session); + + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_APPS_LWIPERF_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/mdns.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/mdns.h new file mode 100644 index 0000000000000000000000000000000000000000..20d7ee2a26109e918d1c821efe42589c8d1ed7a6 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/mdns.h @@ -0,0 +1,105 @@ +/** + * @file + * MDNS responder + */ + + /* + * Copyright (c) 2015 Verisure Innovation AB + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Erik Ekman + * + */ + +#ifndef LWIP_HDR_APPS_MDNS_H +#define LWIP_HDR_APPS_MDNS_H + +#include "lwip/apps/mdns_opts.h" +#include "lwip/netif.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#if LWIP_MDNS_RESPONDER + +enum mdns_sd_proto { + DNSSD_PROTO_UDP = 0, + DNSSD_PROTO_TCP = 1 +}; + +#define MDNS_PROBING_CONFLICT 0 +#define MDNS_PROBING_SUCCESSFUL 1 + +#define MDNS_LABEL_MAXLEN 63 + +struct mdns_host; +struct mdns_service; + +/** Callback function to add text to a reply, called when generating the reply */ +typedef void (*service_get_txt_fn_t)(struct mdns_service *service, void *txt_userdata); + +/** Callback function to let application know the result of probing network for name + * uniqueness, called with result MDNS_PROBING_SUCCESSFUL if no other node claimed + * use for the name for the netif or a service and is safe to use, or MDNS_PROBING_CONFLICT + * if another node is already using it and mdns is disabled on this interface */ +typedef void (*mdns_name_result_cb_t)(struct netif* netif, u8_t result); + +void mdns_resp_init(void); + +void mdns_resp_register_name_result_cb(mdns_name_result_cb_t cb); + +err_t mdns_resp_add_netif(struct netif *netif, const char *hostname, u32_t dns_ttl); +err_t mdns_resp_remove_netif(struct netif *netif); +err_t mdns_resp_rename_netif(struct netif *netif, const char *hostname); + +s8_t mdns_resp_add_service(struct netif *netif, const char *name, const char *service, enum mdns_sd_proto proto, u16_t port, u32_t dns_ttl, service_get_txt_fn_t txt_fn, void *txt_userdata); +err_t mdns_resp_del_service(struct netif *netif, s8_t slot); +err_t mdns_resp_rename_service(struct netif *netif, s8_t slot, const char *name); + +err_t mdns_resp_add_service_txtitem(struct mdns_service *service, const char *txt, u8_t txt_len); + +void mdns_resp_restart(struct netif *netif); +void mdns_resp_announce(struct netif *netif); + +/** + * @ingroup mdns + * Announce IP settings have changed on netif. + * Call this in your callback registered by netif_set_status_callback(). + * No need to call this function when LWIP_NETIF_EXT_STATUS_CALLBACK==1, + * this handled automatically for you. + * @param netif The network interface where settings have changed. + */ +#define mdns_resp_netif_settings_changed(netif) mdns_resp_announce(netif) + +#endif /* LWIP_MDNS_RESPONDER */ + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_APPS_MDNS_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/mdns_opts.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/mdns_opts.h new file mode 100644 index 0000000000000000000000000000000000000000..45f2c50cac8f189aa9910e39434f490b9d0f292e --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/mdns_opts.h @@ -0,0 +1,81 @@ +/** + * @file + * MDNS responder + */ + + /* + * Copyright (c) 2015 Verisure Innovation AB + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Erik Ekman + * + */ + +#ifndef LWIP_HDR_APPS_MDNS_OPTS_H +#define LWIP_HDR_APPS_MDNS_OPTS_H + +#include "lwip/opt.h" + +/** + * @defgroup mdns_opts Options + * @ingroup mdns + * @{ + */ + +/** + * LWIP_MDNS_RESPONDER==1: Turn on multicast DNS module. UDP must be available for MDNS + * transport. IGMP is needed for IPv4 multicast. + */ +#ifndef LWIP_MDNS_RESPONDER +#define LWIP_MDNS_RESPONDER 0 +#endif /* LWIP_MDNS_RESPONDER */ + +/** The maximum number of services per netif */ +#ifndef MDNS_MAX_SERVICES +#define MDNS_MAX_SERVICES 1 +#endif + +/** MDNS_RESP_USENETIF_EXTCALLBACK==1: register an ext_callback on the netif + * to automatically restart probing/announcing on status or address change. + */ +#ifndef MDNS_RESP_USENETIF_EXTCALLBACK +#define MDNS_RESP_USENETIF_EXTCALLBACK LWIP_NETIF_EXT_STATUS_CALLBACK +#endif + +/** + * MDNS_DEBUG: Enable debugging for multicast DNS. + */ +#ifndef MDNS_DEBUG +#define MDNS_DEBUG LWIP_DBG_OFF +#endif + +/** + * @} + */ + +#endif /* LWIP_HDR_APPS_MDNS_OPTS_H */ + diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/mdns_priv.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/mdns_priv.h new file mode 100644 index 0000000000000000000000000000000000000000..9635b5b106cc3c3359a118d318d18427deadba42 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/mdns_priv.h @@ -0,0 +1,74 @@ +/** + * @file + * MDNS responder private definitions + */ + + /* + * Copyright (c) 2015 Verisure Innovation AB + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Erik Ekman + * + */ +#ifndef LWIP_HDR_MDNS_PRIV_H +#define LWIP_HDR_MDNS_PRIV_H + +#include "lwip/apps/mdns_opts.h" +#include "lwip/pbuf.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#if LWIP_MDNS_RESPONDER + +/* Domain struct and methods - visible for unit tests */ + +#define MDNS_DOMAIN_MAXLEN 256 +#define MDNS_READNAME_ERROR 0xFFFF + +struct mdns_domain { + /* Encoded domain name */ + u8_t name[MDNS_DOMAIN_MAXLEN]; + /* Total length of domain name, including zero */ + u16_t length; + /* Set if compression of this domain is not allowed */ + u8_t skip_compression; +}; + +err_t mdns_domain_add_label(struct mdns_domain *domain, const char *label, u8_t len); +u16_t mdns_readname(struct pbuf *p, u16_t offset, struct mdns_domain *domain); +int mdns_domain_eq(struct mdns_domain *a, struct mdns_domain *b); +u16_t mdns_compress_domain(struct pbuf *pbuf, u16_t *offset, struct mdns_domain *domain); + +#endif /* LWIP_MDNS_RESPONDER */ + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_MDNS_PRIV_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/mqtt.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/mqtt.h new file mode 100644 index 0000000000000000000000000000000000000000..c2bb2288f4df00ae41ce24deefe3ce92ce728b7e --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/mqtt.h @@ -0,0 +1,205 @@ +/** + * @file + * MQTT client + */ + +/* + * Copyright (c) 2016 Erik Andersson + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Erik Andersson + * + */ +#ifndef LWIP_HDR_APPS_MQTT_CLIENT_H +#define LWIP_HDR_APPS_MQTT_CLIENT_H + +#include "lwip/apps/mqtt_opts.h" +#include "lwip/err.h" +#include "lwip/ip_addr.h" +#include "lwip/prot/iana.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct mqtt_client_s mqtt_client_t; + +#if LWIP_ALTCP && LWIP_ALTCP_TLS +struct altcp_tls_config; +#endif + +/** @ingroup mqtt + * Default MQTT port (non-TLS) */ +#define MQTT_PORT LWIP_IANA_PORT_MQTT +/** @ingroup mqtt + * Default MQTT TLS port */ +#define MQTT_TLS_PORT LWIP_IANA_PORT_SECURE_MQTT + +/*---------------------------------------------------------------------------------------------- */ +/* Connection with server */ + +/** + * @ingroup mqtt + * Client information and connection parameters */ +struct mqtt_connect_client_info_t { + /** Client identifier, must be set by caller */ + const char *client_id; + /** User name, set to NULL if not used */ + const char* client_user; + /** Password, set to NULL if not used */ + const char* client_pass; + /** keep alive time in seconds, 0 to disable keep alive functionality*/ + u16_t keep_alive; + /** will topic, set to NULL if will is not to be used, + will_msg, will_qos and will retain are then ignored */ + const char* will_topic; + /** will_msg, see will_topic */ + const char* will_msg; + /** will_qos, see will_topic */ + u8_t will_qos; + /** will_retain, see will_topic */ + u8_t will_retain; +#if LWIP_ALTCP && LWIP_ALTCP_TLS + /** TLS configuration for secure connections */ + struct altcp_tls_config *tls_config; +#endif +}; + +/** + * @ingroup mqtt + * Connection status codes */ +typedef enum +{ + /** Accepted */ + MQTT_CONNECT_ACCEPTED = 0, + /** Refused protocol version */ + MQTT_CONNECT_REFUSED_PROTOCOL_VERSION = 1, + /** Refused identifier */ + MQTT_CONNECT_REFUSED_IDENTIFIER = 2, + /** Refused server */ + MQTT_CONNECT_REFUSED_SERVER = 3, + /** Refused user credentials */ + MQTT_CONNECT_REFUSED_USERNAME_PASS = 4, + /** Refused not authorized */ + MQTT_CONNECT_REFUSED_NOT_AUTHORIZED_ = 5, + /** Disconnected */ + MQTT_CONNECT_DISCONNECTED = 256, + /** Timeout */ + MQTT_CONNECT_TIMEOUT = 257 +} mqtt_connection_status_t; + +/** + * @ingroup mqtt + * Function prototype for mqtt connection status callback. Called when + * client has connected to the server after initiating a mqtt connection attempt by + * calling mqtt_client_connect() or when connection is closed by server or an error + * + * @param client MQTT client itself + * @param arg Additional argument to pass to the callback function + * @param status Connect result code or disconnection notification @see mqtt_connection_status_t + * + */ +typedef void (*mqtt_connection_cb_t)(mqtt_client_t *client, void *arg, mqtt_connection_status_t status); + + +/** + * @ingroup mqtt + * Data callback flags */ +enum { + /** Flag set when last fragment of data arrives in data callback */ + MQTT_DATA_FLAG_LAST = 1 +}; + +/** + * @ingroup mqtt + * Function prototype for MQTT incoming publish data callback function. Called when data + * arrives to a subscribed topic @see mqtt_subscribe + * + * @param arg Additional argument to pass to the callback function + * @param data User data, pointed object, data may not be referenced after callback return, + NULL is passed when all publish data are delivered + * @param len Length of publish data fragment + * @param flags MQTT_DATA_FLAG_LAST set when this call contains the last part of data from publish message + * + */ +typedef void (*mqtt_incoming_data_cb_t)(void *arg, const u8_t *data, u16_t len, u8_t flags); + + +/** + * @ingroup mqtt + * Function prototype for MQTT incoming publish function. Called when an incoming publish + * arrives to a subscribed topic @see mqtt_subscribe + * + * @param arg Additional argument to pass to the callback function + * @param topic Zero terminated Topic text string, topic may not be referenced after callback return + * @param tot_len Total length of publish data, if set to 0 (no publish payload) data callback will not be invoked + */ +typedef void (*mqtt_incoming_publish_cb_t)(void *arg, const char *topic, u32_t tot_len); + + +/** + * @ingroup mqtt + * Function prototype for mqtt request callback. Called when a subscribe, unsubscribe + * or publish request has completed + * @param arg Pointer to user data supplied when invoking request + * @param err ERR_OK on success + * ERR_TIMEOUT if no response was received within timeout, + * ERR_ABRT if (un)subscribe was denied + */ +typedef void (*mqtt_request_cb_t)(void *arg, err_t err); + + +err_t mqtt_client_connect(mqtt_client_t *client, const ip_addr_t *ipaddr, u16_t port, mqtt_connection_cb_t cb, void *arg, + const struct mqtt_connect_client_info_t *client_info); + +void mqtt_disconnect(mqtt_client_t *client); + +mqtt_client_t *mqtt_client_new(void); +void mqtt_client_free(mqtt_client_t* client); + +u8_t mqtt_client_is_connected(mqtt_client_t *client); + +void mqtt_set_inpub_callback(mqtt_client_t *client, mqtt_incoming_publish_cb_t, + mqtt_incoming_data_cb_t data_cb, void *arg); + +err_t mqtt_sub_unsub(mqtt_client_t *client, const char *topic, u8_t qos, mqtt_request_cb_t cb, void *arg, u8_t sub); + +/** @ingroup mqtt + *Subscribe to topic */ +#define mqtt_subscribe(client, topic, qos, cb, arg) mqtt_sub_unsub(client, topic, qos, cb, arg, 1) +/** @ingroup mqtt + * Unsubscribe to topic */ +#define mqtt_unsubscribe(client, topic, cb, arg) mqtt_sub_unsub(client, topic, 0, cb, arg, 0) + +err_t mqtt_publish(mqtt_client_t *client, const char *topic, const void *payload, u16_t payload_length, u8_t qos, u8_t retain, + mqtt_request_cb_t cb, void *arg); + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_APPS_MQTT_CLIENT_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/mqtt_opts.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/mqtt_opts.h new file mode 100644 index 0000000000000000000000000000000000000000..4226d21e84168494df76481eb7f48cc8b7603027 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/mqtt_opts.h @@ -0,0 +1,103 @@ +/** + * @file + * MQTT client options + */ + +/* + * Copyright (c) 2016 Erik Andersson + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Erik Andersson + * + */ +#ifndef LWIP_HDR_APPS_MQTT_OPTS_H +#define LWIP_HDR_APPS_MQTT_OPTS_H + +#include "lwip/opt.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @defgroup mqtt_opts Options + * @ingroup mqtt + * @{ + */ + +/** + * Output ring-buffer size, must be able to fit largest outgoing publish message topic+payloads + */ +#ifndef MQTT_OUTPUT_RINGBUF_SIZE +#define MQTT_OUTPUT_RINGBUF_SIZE 256 +#endif + +/** + * Number of bytes in receive buffer, must be at least the size of the longest incoming topic + 8 + * If one wants to avoid fragmented incoming publish, set length to max incoming topic length + max payload length + 8 + */ +#ifndef MQTT_VAR_HEADER_BUFFER_LEN +#define MQTT_VAR_HEADER_BUFFER_LEN 128 +#endif + +/** + * Maximum number of pending subscribe, unsubscribe and publish requests to server . + */ +#ifndef MQTT_REQ_MAX_IN_FLIGHT +#define MQTT_REQ_MAX_IN_FLIGHT 4 +#endif + +/** + * Seconds between each cyclic timer call. + */ +#ifndef MQTT_CYCLIC_TIMER_INTERVAL +#define MQTT_CYCLIC_TIMER_INTERVAL 5 +#endif + +/** + * Publish, subscribe and unsubscribe request timeout in seconds. + */ +#ifndef MQTT_REQ_TIMEOUT +#define MQTT_REQ_TIMEOUT 30 +#endif + +/** + * Seconds for MQTT connect response timeout after sending connect request + */ +#ifndef MQTT_CONNECT_TIMOUT +#define MQTT_CONNECT_TIMOUT 100 +#endif + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_APPS_MQTT_OPTS_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/mqtt_priv.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/mqtt_priv.h new file mode 100644 index 0000000000000000000000000000000000000000..b775913cac8e0527ead70a34363f0111649b660c --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/mqtt_priv.h @@ -0,0 +1,104 @@ +/** + * @file + * MQTT client (private interface) + */ + +/* + * Copyright (c) 2016 Erik Andersson + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Erik Andersson + * + */ +#ifndef LWIP_HDR_APPS_MQTT_PRIV_H +#define LWIP_HDR_APPS_MQTT_PRIV_H + +#include "lwip/apps/mqtt.h" +#include "lwip/altcp.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** Pending request item, binds application callback to pending server requests */ +struct mqtt_request_t +{ + /** Next item in list, NULL means this is the last in chain, + next pointing at itself means request is unallocated */ + struct mqtt_request_t *next; + /** Callback to upper layer */ + mqtt_request_cb_t cb; + void *arg; + /** MQTT packet identifier */ + u16_t pkt_id; + /** Expire time relative to element before this */ + u16_t timeout_diff; +}; + +/** Ring buffer */ +struct mqtt_ringbuf_t { + u16_t put; + u16_t get; + u8_t buf[MQTT_OUTPUT_RINGBUF_SIZE]; +}; + +/** MQTT client */ +struct mqtt_client_s +{ + /** Timers and timeouts */ + u16_t cyclic_tick; + u16_t keep_alive; + u16_t server_watchdog; + /** Packet identifier generator*/ + u16_t pkt_id_seq; + /** Packet identifier of pending incoming publish */ + u16_t inpub_pkt_id; + /** Connection state */ + u8_t conn_state; + struct altcp_pcb *conn; + /** Connection callback */ + void *connect_arg; + mqtt_connection_cb_t connect_cb; + /** Pending requests to server */ + struct mqtt_request_t *pend_req_queue; + struct mqtt_request_t req_list[MQTT_REQ_MAX_IN_FLIGHT]; + void *inpub_arg; + /** Incoming data callback */ + mqtt_incoming_data_cb_t data_cb; + mqtt_incoming_publish_cb_t pub_cb; + /** Input */ + u32_t msg_idx; + u8_t rx_buffer[MQTT_VAR_HEADER_BUFFER_LEN]; + /** Output ring-buffer */ + struct mqtt_ringbuf_t output; +}; + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_APPS_MQTT_PRIV_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/netbiosns.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/netbiosns.h new file mode 100644 index 0000000000000000000000000000000000000000..a326d33b118f8ee20c3fd26c3af6b74bef9be1f4 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/netbiosns.h @@ -0,0 +1,51 @@ +/** + * @file + * NETBIOS name service responder + */ + +/* + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + */ +#ifndef LWIP_HDR_APPS_NETBIOS_H +#define LWIP_HDR_APPS_NETBIOS_H + +#include "lwip/apps/netbiosns_opts.h" + +#ifdef __cplusplus +extern "C" { +#endif + +void netbiosns_init(void); +#ifndef NETBIOS_LWIP_NAME +void netbiosns_set_name(const char* hostname); +#endif +void netbiosns_stop(void); + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_APPS_NETBIOS_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/netbiosns_opts.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/netbiosns_opts.h new file mode 100644 index 0000000000000000000000000000000000000000..1f51ab02a087b2b89913306b7edae8c640d388e8 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/netbiosns_opts.h @@ -0,0 +1,66 @@ +/** + * @file + * NETBIOS name service responder options + */ + +/* + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + */ +#ifndef LWIP_HDR_APPS_NETBIOS_OPTS_H +#define LWIP_HDR_APPS_NETBIOS_OPTS_H + +#include "lwip/opt.h" + +/** + * @defgroup netbiosns_opts Options + * @ingroup netbiosns + * @{ + */ + +/** NetBIOS name of lwip device + * This must be uppercase until NETBIOS_STRCMP() is defined to a string + * comparision function that is case insensitive. + * If you want to use the netif's hostname, use this (with LWIP_NETIF_HOSTNAME): + * (ip_current_netif() != NULL ? ip_current_netif()->hostname != NULL ? ip_current_netif()->hostname : "" : "") + * + * If this is not defined, netbiosns_set_name() can be called at runtime to change the name. + */ +#ifdef __DOXYGEN__ +#define NETBIOS_LWIP_NAME "NETBIOSLWIPDEV" +#endif + +/** Respond to NetBIOS name queries + * Default is disabled + */ +#if !defined LWIP_NETBIOS_RESPOND_NAME_QUERY || defined __DOXYGEN__ +#define LWIP_NETBIOS_RESPOND_NAME_QUERY 0 +#endif + +/** + * @} + */ + +#endif /* LWIP_HDR_APPS_NETBIOS_OPTS_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/smtp.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/smtp.h new file mode 100644 index 0000000000000000000000000000000000000000..fb4a4a7cca6b4ac8d2c15d233b9006d4c3617115 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/smtp.h @@ -0,0 +1,128 @@ +#ifndef LWIP_HDR_APPS_SMTP_H +#define LWIP_HDR_APPS_SMTP_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "lwip/apps/smtp_opts.h" +#include "lwip/err.h" +#include "lwip/prot/iana.h" + +/** The default TCP port used for SMTP */ +#define SMTP_DEFAULT_PORT LWIP_IANA_PORT_SMTP +/** The default TCP port used for SMTPS */ +#define SMTPS_DEFAULT_PORT LWIP_IANA_PORT_SMTPS + +/** Email successfully sent */ +#define SMTP_RESULT_OK 0 +/** Unknown error */ +#define SMTP_RESULT_ERR_UNKNOWN 1 +/** Connection to server failed */ +#define SMTP_RESULT_ERR_CONNECT 2 +/** Failed to resolve server hostname */ +#define SMTP_RESULT_ERR_HOSTNAME 3 +/** Connection unexpectedly closed by remote server */ +#define SMTP_RESULT_ERR_CLOSED 4 +/** Connection timed out (server didn't respond in time) */ +#define SMTP_RESULT_ERR_TIMEOUT 5 +/** Server responded with an unknown response code */ +#define SMTP_RESULT_ERR_SVR_RESP 6 +/** Out of resources locally */ +#define SMTP_RESULT_ERR_MEM 7 + +/** Prototype of an smtp callback function + * + * @param arg argument specified when initiating the email + * @param smtp_result result of the mail transfer (see defines SMTP_RESULT_*) + * @param srv_err if aborted by the server, this contains the error code received + * @param err an error returned by internal lwip functions, can help to specify + * the source of the error but must not necessarily be != ERR_OK + */ +typedef void (*smtp_result_fn)(void *arg, u8_t smtp_result, u16_t srv_err, err_t err); + +/** This structure is used as argument for smtp_send_mail_int(), + * which in turn can be used with tcpip_callback() to send mail + * from interrupt context, e.g. like this: + * struct smtp_send_request *req; (to be filled) + * tcpip_try_callback(smtp_send_mail_int, (void*)req); + * + * For member description, see parameter description of smtp_send_mail(). + * When using with tcpip_callback, this structure has to stay allocated + * (e.g. using mem_malloc/mem_free) until its 'callback_fn' is called. + */ +struct smtp_send_request { + const char *from; + const char* to; + const char* subject; + const char* body; + smtp_result_fn callback_fn; + void* callback_arg; + /** If this is != 0, data is *not* copied into an extra buffer + * but used from the pointers supplied in this struct. + * This means less memory usage, but data must stay untouched until + * the callback function is called. */ + u8_t static_data; +}; + + +#if SMTP_BODYDH + +#ifndef SMTP_BODYDH_BUFFER_SIZE +#define SMTP_BODYDH_BUFFER_SIZE 256 +#endif /* SMTP_BODYDH_BUFFER_SIZE */ + +struct smtp_bodydh { + u16_t state; + u16_t length; /* Length of content in buffer */ + char buffer[SMTP_BODYDH_BUFFER_SIZE]; /* buffer for generated content */ +#ifdef SMTP_BODYDH_USER_SIZE + u8_t user[SMTP_BODYDH_USER_SIZE]; +#endif /* SMTP_BODYDH_USER_SIZE */ +}; + +enum bdh_retvals_e { + BDH_DONE = 0, + BDH_WORKING +}; + +/** Prototype of an smtp body callback function + * It receives a struct smtp_bodydh, and a buffer to write data, + * must return BDH_WORKING to be called again and BDH_DONE when + * it has finished processing. This one tries to fill one TCP buffer with + * data, your function will be repeatedly called until that happens; so if you + * know you'll be taking too long to serve your request, pause once in a while + * by writing length=0 to avoid hogging system resources + * + * @param arg argument specified when initiating the email + * @param smtp_bodydh state handling + buffer structure + */ +typedef int (*smtp_bodycback_fn)(void *arg, struct smtp_bodydh *bodydh); + +err_t smtp_send_mail_bodycback(const char *from, const char* to, const char* subject, + smtp_bodycback_fn bodycback_fn, smtp_result_fn callback_fn, void* callback_arg); + +#endif /* SMTP_BODYDH */ + + +err_t smtp_set_server_addr(const char* server); +void smtp_set_server_port(u16_t port); +#if LWIP_ALTCP && LWIP_ALTCP_TLS +struct altcp_tls_config; +void smtp_set_tls_config(struct altcp_tls_config *tls_config); +#endif +err_t smtp_set_auth(const char* username, const char* pass); +err_t smtp_send_mail(const char *from, const char* to, const char* subject, const char* body, + smtp_result_fn callback_fn, void* callback_arg); +err_t smtp_send_mail_static(const char *from, const char* to, const char* subject, const char* body, + smtp_result_fn callback_fn, void* callback_arg); +void smtp_send_mail_int(void *arg); +#ifdef LWIP_DEBUG +const char* smtp_result_str(u8_t smtp_result); +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_APPS_SMTP_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/smtp_opts.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/smtp_opts.h new file mode 100644 index 0000000000000000000000000000000000000000..bc743f679e005232e8e540afdea010ed1da6e224 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/smtp_opts.h @@ -0,0 +1,81 @@ +#ifndef LWIP_HDR_APPS_SMTP_OPTS_H +#define LWIP_HDR_APPS_SMTP_OPTS_H + +#include "lwip/opt.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @defgroup smtp_opts Options + * @ingroup smtp + * + * @{ + */ + +/** Set this to 1 to enable data handler callback on BODY */ +#ifndef SMTP_BODYDH +#define SMTP_BODYDH 0 +#endif + +/** SMTP_DEBUG: Enable debugging for SNTP. */ +#ifndef SMTP_DEBUG +#define SMTP_DEBUG LWIP_DBG_OFF +#endif + +/** Maximum length reserved for server name including terminating 0 byte */ +#ifndef SMTP_MAX_SERVERNAME_LEN +#define SMTP_MAX_SERVERNAME_LEN 256 +#endif + +/** Maximum length reserved for username */ +#ifndef SMTP_MAX_USERNAME_LEN +#define SMTP_MAX_USERNAME_LEN 32 +#endif + +/** Maximum length reserved for password */ +#ifndef SMTP_MAX_PASS_LEN +#define SMTP_MAX_PASS_LEN 32 +#endif + +/** Set this to 0 if you know the authentication data will not change + * during the smtp session, which saves some heap space. */ +#ifndef SMTP_COPY_AUTHDATA +#define SMTP_COPY_AUTHDATA 1 +#endif + +/** Set this to 0 to save some code space if you know for sure that all data + * passed to this module conforms to the requirements in the SMTP RFC. + * WARNING: use this with care! + */ +#ifndef SMTP_CHECK_DATA +#define SMTP_CHECK_DATA 1 +#endif + +/** Set this to 1 to enable AUTH PLAIN support */ +#ifndef SMTP_SUPPORT_AUTH_PLAIN +#define SMTP_SUPPORT_AUTH_PLAIN 1 +#endif + +/** Set this to 1 to enable AUTH LOGIN support */ +#ifndef SMTP_SUPPORT_AUTH_LOGIN +#define SMTP_SUPPORT_AUTH_LOGIN 1 +#endif + +/* Memory allocation/deallocation can be overridden... */ +#ifndef SMTP_STATE_MALLOC +#define SMTP_STATE_MALLOC(size) mem_malloc(size) +#define SMTP_STATE_FREE(ptr) mem_free(ptr) +#endif + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* SMTP_OPTS_H */ + diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/snmp.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/snmp.h new file mode 100644 index 0000000000000000000000000000000000000000..a3f8eb150806af2214f6c471d27557fd97a6447c --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/snmp.h @@ -0,0 +1,135 @@ +/** + * @file + * SNMP server main API - start and basic configuration + */ + +/* + * Copyright (c) 2001, 2002 Leon Woestenberg + * Copyright (c) 2001, 2002 Axon Digital Design B.V., The Netherlands. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Leon Woestenberg + * Martin Hentschel + * + */ +#ifndef LWIP_HDR_APPS_SNMP_H +#define LWIP_HDR_APPS_SNMP_H + +#include "lwip/apps/snmp_opts.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#if LWIP_SNMP /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/err.h" +#include "lwip/apps/snmp_core.h" + +/** SNMP variable binding descriptor (publically needed for traps) */ +struct snmp_varbind +{ + /** pointer to next varbind, NULL for last in list */ + struct snmp_varbind *next; + /** pointer to previous varbind, NULL for first in list */ + struct snmp_varbind *prev; + + /** object identifier */ + struct snmp_obj_id oid; + + /** value ASN1 type */ + u8_t type; + /** object value length */ + u16_t value_len; + /** object value */ + void *value; +}; + +/** + * @ingroup snmp_core + * Agent setup, start listening to port 161. + */ +void snmp_init(void); +void snmp_set_mibs(const struct snmp_mib **mibs, u8_t num_mibs); + +void snmp_set_device_enterprise_oid(const struct snmp_obj_id* device_enterprise_oid); +const struct snmp_obj_id* snmp_get_device_enterprise_oid(void); + +void snmp_trap_dst_enable(u8_t dst_idx, u8_t enable); +void snmp_trap_dst_ip_set(u8_t dst_idx, const ip_addr_t *dst); + +/** Generic trap: cold start */ +#define SNMP_GENTRAP_COLDSTART 0 +/** Generic trap: warm start */ +#define SNMP_GENTRAP_WARMSTART 1 +/** Generic trap: link down */ +#define SNMP_GENTRAP_LINKDOWN 2 +/** Generic trap: link up */ +#define SNMP_GENTRAP_LINKUP 3 +/** Generic trap: authentication failure */ +#define SNMP_GENTRAP_AUTH_FAILURE 4 +/** Generic trap: EGP neighbor lost */ +#define SNMP_GENTRAP_EGP_NEIGHBOR_LOSS 5 +/** Generic trap: enterprise specific */ +#define SNMP_GENTRAP_ENTERPRISE_SPECIFIC 6 + +err_t snmp_send_trap_generic(s32_t generic_trap); +err_t snmp_send_trap_specific(s32_t specific_trap, struct snmp_varbind *varbinds); +err_t snmp_send_trap(const struct snmp_obj_id* oid, s32_t generic_trap, s32_t specific_trap, struct snmp_varbind *varbinds); + +#define SNMP_AUTH_TRAPS_DISABLED 0 +#define SNMP_AUTH_TRAPS_ENABLED 1 +void snmp_set_auth_traps_enabled(u8_t enable); +u8_t snmp_get_auth_traps_enabled(void); + +u8_t snmp_v1_enabled(void); +u8_t snmp_v2c_enabled(void); +u8_t snmp_v3_enabled(void); +void snmp_v1_enable(u8_t enable); +void snmp_v2c_enable(u8_t enable); +void snmp_v3_enable(u8_t enable); + +const char * snmp_get_community(void); +const char * snmp_get_community_write(void); +const char * snmp_get_community_trap(void); +void snmp_set_community(const char * const community); +void snmp_set_community_write(const char * const community); +void snmp_set_community_trap(const char * const community); + +void snmp_coldstart_trap(void); +void snmp_authfail_trap(void); + +typedef void (*snmp_write_callback_fct)(const u32_t* oid, u8_t oid_len, void* callback_arg); +void snmp_set_write_callback(snmp_write_callback_fct write_callback, void* callback_arg); + +#endif /* LWIP_SNMP */ + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_APPS_SNMP_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/snmp_core.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/snmp_core.h new file mode 100644 index 0000000000000000000000000000000000000000..6021c722200be03bcff8c9c7bce38d6c0d976a16 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/snmp_core.h @@ -0,0 +1,377 @@ +/** + * @file + * SNMP core API for implementing MIBs + */ + +/* + * Copyright (c) 2006 Axon Digital Design B.V., The Netherlands. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * Author: Christiaan Simons + * Martin Hentschel + */ + +#ifndef LWIP_HDR_APPS_SNMP_CORE_H +#define LWIP_HDR_APPS_SNMP_CORE_H + +#include "lwip/apps/snmp_opts.h" + +#if LWIP_SNMP /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/ip_addr.h" +#include "lwip/err.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* basic ASN1 defines */ +#define SNMP_ASN1_CLASS_UNIVERSAL 0x00 +#define SNMP_ASN1_CLASS_APPLICATION 0x40 +#define SNMP_ASN1_CLASS_CONTEXT 0x80 +#define SNMP_ASN1_CLASS_PRIVATE 0xC0 + +#define SNMP_ASN1_CONTENTTYPE_PRIMITIVE 0x00 +#define SNMP_ASN1_CONTENTTYPE_CONSTRUCTED 0x20 + +/* universal tags (from ASN.1 spec.) */ +#define SNMP_ASN1_UNIVERSAL_END_OF_CONTENT 0 +#define SNMP_ASN1_UNIVERSAL_INTEGER 2 +#define SNMP_ASN1_UNIVERSAL_OCTET_STRING 4 +#define SNMP_ASN1_UNIVERSAL_NULL 5 +#define SNMP_ASN1_UNIVERSAL_OBJECT_ID 6 +#define SNMP_ASN1_UNIVERSAL_SEQUENCE_OF 16 + +/* application specific (SNMP) tags (from SNMPv2-SMI) */ +#define SNMP_ASN1_APPLICATION_IPADDR 0 /* [APPLICATION 0] IMPLICIT OCTET STRING (SIZE (4)) */ +#define SNMP_ASN1_APPLICATION_COUNTER 1 /* [APPLICATION 1] IMPLICIT INTEGER (0..4294967295) => u32_t */ +#define SNMP_ASN1_APPLICATION_GAUGE 2 /* [APPLICATION 2] IMPLICIT INTEGER (0..4294967295) => u32_t */ +#define SNMP_ASN1_APPLICATION_TIMETICKS 3 /* [APPLICATION 3] IMPLICIT INTEGER (0..4294967295) => u32_t */ +#define SNMP_ASN1_APPLICATION_OPAQUE 4 /* [APPLICATION 4] IMPLICIT OCTET STRING */ +#define SNMP_ASN1_APPLICATION_COUNTER64 6 /* [APPLICATION 6] IMPLICIT INTEGER (0..18446744073709551615) */ + +/* context specific (SNMP) tags (from RFC 1905) */ +#define SNMP_ASN1_CONTEXT_VARBIND_NO_SUCH_INSTANCE 1 + +/* full ASN1 type defines */ +#define SNMP_ASN1_TYPE_END_OF_CONTENT (SNMP_ASN1_CLASS_UNIVERSAL | SNMP_ASN1_CONTENTTYPE_PRIMITIVE | SNMP_ASN1_UNIVERSAL_END_OF_CONTENT) +#define SNMP_ASN1_TYPE_INTEGER (SNMP_ASN1_CLASS_UNIVERSAL | SNMP_ASN1_CONTENTTYPE_PRIMITIVE | SNMP_ASN1_UNIVERSAL_INTEGER) +#define SNMP_ASN1_TYPE_OCTET_STRING (SNMP_ASN1_CLASS_UNIVERSAL | SNMP_ASN1_CONTENTTYPE_PRIMITIVE | SNMP_ASN1_UNIVERSAL_OCTET_STRING) +#define SNMP_ASN1_TYPE_NULL (SNMP_ASN1_CLASS_UNIVERSAL | SNMP_ASN1_CONTENTTYPE_PRIMITIVE | SNMP_ASN1_UNIVERSAL_NULL) +#define SNMP_ASN1_TYPE_OBJECT_ID (SNMP_ASN1_CLASS_UNIVERSAL | SNMP_ASN1_CONTENTTYPE_PRIMITIVE | SNMP_ASN1_UNIVERSAL_OBJECT_ID) +#define SNMP_ASN1_TYPE_SEQUENCE (SNMP_ASN1_CLASS_UNIVERSAL | SNMP_ASN1_CONTENTTYPE_CONSTRUCTED | SNMP_ASN1_UNIVERSAL_SEQUENCE_OF) +#define SNMP_ASN1_TYPE_IPADDR (SNMP_ASN1_CLASS_APPLICATION | SNMP_ASN1_CONTENTTYPE_PRIMITIVE | SNMP_ASN1_APPLICATION_IPADDR) +#define SNMP_ASN1_TYPE_IPADDRESS SNMP_ASN1_TYPE_IPADDR +#define SNMP_ASN1_TYPE_COUNTER (SNMP_ASN1_CLASS_APPLICATION | SNMP_ASN1_CONTENTTYPE_PRIMITIVE | SNMP_ASN1_APPLICATION_COUNTER) +#define SNMP_ASN1_TYPE_COUNTER32 SNMP_ASN1_TYPE_COUNTER +#define SNMP_ASN1_TYPE_GAUGE (SNMP_ASN1_CLASS_APPLICATION | SNMP_ASN1_CONTENTTYPE_PRIMITIVE | SNMP_ASN1_APPLICATION_GAUGE) +#define SNMP_ASN1_TYPE_GAUGE32 SNMP_ASN1_TYPE_GAUGE +#define SNMP_ASN1_TYPE_UNSIGNED32 SNMP_ASN1_TYPE_GAUGE +#define SNMP_ASN1_TYPE_TIMETICKS (SNMP_ASN1_CLASS_APPLICATION | SNMP_ASN1_CONTENTTYPE_PRIMITIVE | SNMP_ASN1_APPLICATION_TIMETICKS) +#define SNMP_ASN1_TYPE_OPAQUE (SNMP_ASN1_CLASS_APPLICATION | SNMP_ASN1_CONTENTTYPE_PRIMITIVE | SNMP_ASN1_APPLICATION_OPAQUE) +#if LWIP_HAVE_INT64 +#define SNMP_ASN1_TYPE_COUNTER64 (SNMP_ASN1_CLASS_APPLICATION | SNMP_ASN1_CONTENTTYPE_PRIMITIVE | SNMP_ASN1_APPLICATION_COUNTER64) +#endif + +#define SNMP_VARBIND_EXCEPTION_OFFSET 0xF0 +#define SNMP_VARBIND_EXCEPTION_MASK 0x0F + +/** error codes predefined by SNMP prot. */ +typedef enum { + SNMP_ERR_NOERROR = 0, +/* +outdated v1 error codes. do not use anmore! +#define SNMP_ERR_NOSUCHNAME 2 use SNMP_ERR_NOSUCHINSTANCE instead +#define SNMP_ERR_BADVALUE 3 use SNMP_ERR_WRONGTYPE,SNMP_ERR_WRONGLENGTH,SNMP_ERR_WRONGENCODING or SNMP_ERR_WRONGVALUE instead +#define SNMP_ERR_READONLY 4 use SNMP_ERR_NOTWRITABLE instead +*/ + SNMP_ERR_GENERROR = 5, + SNMP_ERR_NOACCESS = 6, + SNMP_ERR_WRONGTYPE = 7, + SNMP_ERR_WRONGLENGTH = 8, + SNMP_ERR_WRONGENCODING = 9, + SNMP_ERR_WRONGVALUE = 10, + SNMP_ERR_NOCREATION = 11, + SNMP_ERR_INCONSISTENTVALUE = 12, + SNMP_ERR_RESOURCEUNAVAILABLE = 13, + SNMP_ERR_COMMITFAILED = 14, + SNMP_ERR_UNDOFAILED = 15, + SNMP_ERR_NOTWRITABLE = 17, + SNMP_ERR_INCONSISTENTNAME = 18, + + SNMP_ERR_NOSUCHINSTANCE = SNMP_VARBIND_EXCEPTION_OFFSET + SNMP_ASN1_CONTEXT_VARBIND_NO_SUCH_INSTANCE +} snmp_err_t; + +/** internal object identifier representation */ +struct snmp_obj_id +{ + u8_t len; + u32_t id[SNMP_MAX_OBJ_ID_LEN]; +}; + +struct snmp_obj_id_const_ref +{ + u8_t len; + const u32_t* id; +}; + +extern const struct snmp_obj_id_const_ref snmp_zero_dot_zero; /* administrative identifier from SNMPv2-SMI */ + +/** SNMP variant value, used as reference in struct snmp_node_instance and table implementation */ +union snmp_variant_value +{ + void* ptr; + const void* const_ptr; + u32_t u32; + s32_t s32; +#if LWIP_HAVE_INT64 + u64_t u64; +#endif +}; + + +/** +SNMP MIB node types + tree node is the only node the stack can process in order to walk the tree, + all other nodes are assumed to be leaf nodes. + This cannot be an enum because users may want to define their own node types. +*/ +#define SNMP_NODE_TREE 0x00 +/* predefined leaf node types */ +#define SNMP_NODE_SCALAR 0x01 +#define SNMP_NODE_SCALAR_ARRAY 0x02 +#define SNMP_NODE_TABLE 0x03 +#define SNMP_NODE_THREADSYNC 0x04 + +/** node "base class" layout, the mandatory fields for a node */ +struct snmp_node +{ + /** one out of SNMP_NODE_TREE or any leaf node type (like SNMP_NODE_SCALAR) */ + u8_t node_type; + /** the number assigned to this node which used as part of the full OID */ + u32_t oid; +}; + +/** SNMP node instance access types */ +typedef enum { + SNMP_NODE_INSTANCE_ACCESS_READ = 1, + SNMP_NODE_INSTANCE_ACCESS_WRITE = 2, + SNMP_NODE_INSTANCE_READ_ONLY = SNMP_NODE_INSTANCE_ACCESS_READ, + SNMP_NODE_INSTANCE_READ_WRITE = (SNMP_NODE_INSTANCE_ACCESS_READ | SNMP_NODE_INSTANCE_ACCESS_WRITE), + SNMP_NODE_INSTANCE_WRITE_ONLY = SNMP_NODE_INSTANCE_ACCESS_WRITE, + SNMP_NODE_INSTANCE_NOT_ACCESSIBLE = 0 +} snmp_access_t; + +struct snmp_node_instance; + +typedef s16_t (*node_instance_get_value_method)(struct snmp_node_instance*, void*); +typedef snmp_err_t (*node_instance_set_test_method)(struct snmp_node_instance*, u16_t, void*); +typedef snmp_err_t (*node_instance_set_value_method)(struct snmp_node_instance*, u16_t, void*); +typedef void (*node_instance_release_method)(struct snmp_node_instance*); + +#define SNMP_GET_VALUE_RAW_DATA 0x4000 /* do not use 0x8000 because return value of node_instance_get_value_method is signed16 and 0x8000 would be the signed bit */ + +/** SNMP node instance */ +struct snmp_node_instance +{ + /** prefilled with the node, get_instance() is called on; may be changed by user to any value to pass an arbitrary node between calls to get_instance() and get_value/test_value/set_value */ + const struct snmp_node* node; + /** prefilled with the instance id requested; for get_instance() this is the exact oid requested; for get_next_instance() this is the relative starting point, stack expects relative oid of next node here */ + struct snmp_obj_id instance_oid; + + /** ASN type for this object (see snmp_asn1.h for definitions) */ + u8_t asn1_type; + /** one out of instance access types defined above (SNMP_NODE_INSTANCE_READ_ONLY,...) */ + snmp_access_t access; + + /** returns object value for the given object identifier. Return values <0 to indicate an error */ + node_instance_get_value_method get_value; + /** tests length and/or range BEFORE setting */ + node_instance_set_test_method set_test; + /** sets object value, only called when set_test() was successful */ + node_instance_set_value_method set_value; + /** called in any case when the instance is not required anymore by stack (useful for freeing memory allocated in get_instance/get_next_instance methods) */ + node_instance_release_method release_instance; + + /** reference to pass arbitrary value between calls to get_instance() and get_value/test_value/set_value */ + union snmp_variant_value reference; + /** see reference (if reference is a pointer, the length of underlying data may be stored here or anything else) */ + u32_t reference_len; +}; + + +/** SNMP tree node */ +struct snmp_tree_node +{ + /** inherited "base class" members */ + struct snmp_node node; + u16_t subnode_count; + const struct snmp_node* const *subnodes; +}; + +#define SNMP_CREATE_TREE_NODE(oid, subnodes) \ + {{ SNMP_NODE_TREE, (oid) }, \ + (u16_t)LWIP_ARRAYSIZE(subnodes), (subnodes) } + +#define SNMP_CREATE_EMPTY_TREE_NODE(oid) \ + {{ SNMP_NODE_TREE, (oid) }, \ + 0, NULL } + +/** SNMP leaf node */ +struct snmp_leaf_node +{ + /** inherited "base class" members */ + struct snmp_node node; + snmp_err_t (*get_instance)(const u32_t *root_oid, u8_t root_oid_len, struct snmp_node_instance* instance); + snmp_err_t (*get_next_instance)(const u32_t *root_oid, u8_t root_oid_len, struct snmp_node_instance* instance); +}; + +/** represents a single mib with its base oid and root node */ +struct snmp_mib +{ + const u32_t *base_oid; + u8_t base_oid_len; + const struct snmp_node *root_node; +}; + +#define SNMP_MIB_CREATE(oid_list, root_node) { (oid_list), (u8_t)LWIP_ARRAYSIZE(oid_list), root_node } + +/** OID range structure */ +struct snmp_oid_range +{ + u32_t min; + u32_t max; +}; + +/** checks if incoming OID length and values are in allowed ranges */ +u8_t snmp_oid_in_range(const u32_t *oid_in, u8_t oid_len, const struct snmp_oid_range *oid_ranges, u8_t oid_ranges_len); + +typedef enum { + SNMP_NEXT_OID_STATUS_SUCCESS, + SNMP_NEXT_OID_STATUS_NO_MATCH, + SNMP_NEXT_OID_STATUS_BUF_TO_SMALL +} snmp_next_oid_status_t; + +/** state for next_oid_init / next_oid_check functions */ +struct snmp_next_oid_state +{ + const u32_t* start_oid; + u8_t start_oid_len; + + u32_t* next_oid; + u8_t next_oid_len; + u8_t next_oid_max_len; + + snmp_next_oid_status_t status; + void* reference; +}; + +void snmp_next_oid_init(struct snmp_next_oid_state *state, + const u32_t *start_oid, u8_t start_oid_len, + u32_t *next_oid_buf, u8_t next_oid_max_len); +u8_t snmp_next_oid_precheck(struct snmp_next_oid_state *state, const u32_t *oid, u8_t oid_len); +u8_t snmp_next_oid_check(struct snmp_next_oid_state *state, const u32_t *oid, u8_t oid_len, void* reference); + +void snmp_oid_assign(struct snmp_obj_id* target, const u32_t *oid, u8_t oid_len); +void snmp_oid_combine(struct snmp_obj_id* target, const u32_t *oid1, u8_t oid1_len, const u32_t *oid2, u8_t oid2_len); +void snmp_oid_prefix(struct snmp_obj_id* target, const u32_t *oid, u8_t oid_len); +void snmp_oid_append(struct snmp_obj_id* target, const u32_t *oid, u8_t oid_len); +u8_t snmp_oid_equal(const u32_t *oid1, u8_t oid1_len, const u32_t *oid2, u8_t oid2_len); +s8_t snmp_oid_compare(const u32_t *oid1, u8_t oid1_len, const u32_t *oid2, u8_t oid2_len); + +#if LWIP_IPV4 +u8_t snmp_oid_to_ip4(const u32_t *oid, ip4_addr_t *ip); +void snmp_ip4_to_oid(const ip4_addr_t *ip, u32_t *oid); +#endif /* LWIP_IPV4 */ +#if LWIP_IPV6 +u8_t snmp_oid_to_ip6(const u32_t *oid, ip6_addr_t *ip); +void snmp_ip6_to_oid(const ip6_addr_t *ip, u32_t *oid); +#endif /* LWIP_IPV6 */ +#if LWIP_IPV4 || LWIP_IPV6 +u8_t snmp_ip_to_oid(const ip_addr_t *ip, u32_t *oid); +u8_t snmp_ip_port_to_oid(const ip_addr_t *ip, u16_t port, u32_t *oid); + +u8_t snmp_oid_to_ip(const u32_t *oid, u8_t oid_len, ip_addr_t *ip); +u8_t snmp_oid_to_ip_port(const u32_t *oid, u8_t oid_len, ip_addr_t *ip, u16_t *port); +#endif /* LWIP_IPV4 || LWIP_IPV6 */ + +struct netif; +u8_t netif_to_num(const struct netif *netif); + +snmp_err_t snmp_set_test_ok(struct snmp_node_instance* instance, u16_t value_len, void* value); /* generic function which can be used if test is always successful */ + +err_t snmp_decode_bits(const u8_t *buf, u32_t buf_len, u32_t *bit_value); +err_t snmp_decode_truthvalue(const s32_t *asn1_value, u8_t *bool_value); +u8_t snmp_encode_bits(u8_t *buf, u32_t buf_len, u32_t bit_value, u8_t bit_count); +u8_t snmp_encode_truthvalue(s32_t *asn1_value, u32_t bool_value); + +struct snmp_statistics +{ + u32_t inpkts; + u32_t outpkts; + u32_t inbadversions; + u32_t inbadcommunitynames; + u32_t inbadcommunityuses; + u32_t inasnparseerrs; + u32_t intoobigs; + u32_t innosuchnames; + u32_t inbadvalues; + u32_t inreadonlys; + u32_t ingenerrs; + u32_t intotalreqvars; + u32_t intotalsetvars; + u32_t ingetrequests; + u32_t ingetnexts; + u32_t insetrequests; + u32_t ingetresponses; + u32_t intraps; + u32_t outtoobigs; + u32_t outnosuchnames; + u32_t outbadvalues; + u32_t outgenerrs; + u32_t outgetrequests; + u32_t outgetnexts; + u32_t outsetrequests; + u32_t outgetresponses; + u32_t outtraps; +#if LWIP_SNMP_V3 + u32_t unsupportedseclevels; + u32_t notintimewindows; + u32_t unknownusernames; + u32_t unknownengineids; + u32_t wrongdigests; + u32_t decryptionerrors; +#endif +}; + +extern struct snmp_statistics snmp_stats; + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_SNMP */ + +#endif /* LWIP_HDR_APPS_SNMP_CORE_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/snmp_mib2.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/snmp_mib2.h new file mode 100644 index 0000000000000000000000000000000000000000..2f4a68935e2a78d927f1956fad3fad71546784c5 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/snmp_mib2.h @@ -0,0 +1,78 @@ +/** + * @file + * SNMP MIB2 API + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Dirk Ziegelmeier + * + */ +#ifndef LWIP_HDR_APPS_SNMP_MIB2_H +#define LWIP_HDR_APPS_SNMP_MIB2_H + +#include "lwip/apps/snmp_opts.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#if LWIP_SNMP /* don't build if not configured for use in lwipopts.h */ +#if SNMP_LWIP_MIB2 + +#include "lwip/apps/snmp_core.h" + +extern const struct snmp_mib mib2; + +#if SNMP_USE_NETCONN +#include "lwip/apps/snmp_threadsync.h" +void snmp_mib2_lwip_synchronizer(snmp_threadsync_called_fn fn, void* arg); +extern struct snmp_threadsync_instance snmp_mib2_lwip_locks; +#endif + +#ifndef SNMP_SYSSERVICES +#define SNMP_SYSSERVICES ((1 << 6) | (1 << 3) | ((IP_FORWARD) << 2)) +#endif + +void snmp_mib2_set_sysdescr(const u8_t* str, const u16_t* len); /* read-only be defintion */ +void snmp_mib2_set_syscontact(u8_t *ocstr, u16_t *ocstrlen, u16_t bufsize); +void snmp_mib2_set_syscontact_readonly(const u8_t *ocstr, const u16_t *ocstrlen); +void snmp_mib2_set_sysname(u8_t *ocstr, u16_t *ocstrlen, u16_t bufsize); +void snmp_mib2_set_sysname_readonly(const u8_t *ocstr, const u16_t *ocstrlen); +void snmp_mib2_set_syslocation(u8_t *ocstr, u16_t *ocstrlen, u16_t bufsize); +void snmp_mib2_set_syslocation_readonly(const u8_t *ocstr, const u16_t *ocstrlen); + +#endif /* SNMP_LWIP_MIB2 */ +#endif /* LWIP_SNMP */ + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_APPS_SNMP_MIB2_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/snmp_opts.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/snmp_opts.h new file mode 100644 index 0000000000000000000000000000000000000000..c892d22afa5bb0c65e8dbd773f1c30af99d8fa76 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/snmp_opts.h @@ -0,0 +1,297 @@ +/** + * @file + * SNMP server options list + */ + +/* + * Copyright (c) 2015 Dirk Ziegelmeier + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Dirk Ziegelmeier + * + */ +#ifndef LWIP_HDR_SNMP_OPTS_H +#define LWIP_HDR_SNMP_OPTS_H + +#include "lwip/opt.h" + +/** + * @defgroup snmp_opts Options + * @ingroup snmp + * @{ + */ + +/** + * LWIP_SNMP==1: This enables the lwIP SNMP agent. UDP must be available + * for SNMP transport. + * If you want to use your own SNMP agent, leave this disabled. + * To integrate MIB2 of an external agent, you need to enable + * LWIP_MIB2_CALLBACKS and MIB2_STATS. This will give you the callbacks + * and statistics counters you need to get MIB2 working. + */ +#if !defined LWIP_SNMP || defined __DOXYGEN__ +#define LWIP_SNMP 0 +#endif + +/** + * SNMP_USE_NETCONN: Use netconn API instead of raw API. + * Makes SNMP agent run in a worker thread, so blocking operations + * can be done in MIB calls. + */ +#if !defined SNMP_USE_NETCONN || defined __DOXYGEN__ +#define SNMP_USE_NETCONN 0 +#endif + +/** + * SNMP_USE_RAW: Use raw API. + * SNMP agent does not run in a worker thread, so blocking operations + * should not be done in MIB calls. + */ +#if !defined SNMP_USE_RAW || defined __DOXYGEN__ +#define SNMP_USE_RAW 1 +#endif + +#if SNMP_USE_NETCONN && SNMP_USE_RAW +#error SNMP stack can use only one of the APIs {raw, netconn} +#endif + +#if LWIP_SNMP && !SNMP_USE_NETCONN && !SNMP_USE_RAW +#error SNMP stack needs a receive API and UDP {raw, netconn} +#endif + +#if SNMP_USE_NETCONN +/** + * SNMP_STACK_SIZE: Stack size of SNMP netconn worker thread + */ +#if !defined SNMP_STACK_SIZE || defined __DOXYGEN__ +#define SNMP_STACK_SIZE DEFAULT_THREAD_STACKSIZE +#endif + +/** + * SNMP_THREAD_PRIO: SNMP netconn worker thread priority + */ +#if !defined SNMP_THREAD_PRIO || defined __DOXYGEN__ +#define SNMP_THREAD_PRIO DEFAULT_THREAD_PRIO +#endif +#endif /* SNMP_USE_NETCONN */ + +/** + * SNMP_TRAP_DESTINATIONS: Number of trap destinations. At least one trap + * destination is required + */ +#if !defined SNMP_TRAP_DESTINATIONS || defined __DOXYGEN__ +#define SNMP_TRAP_DESTINATIONS 1 +#endif + +/** + * Only allow SNMP write actions that are 'safe' (e.g. disabling netifs is not + * a safe action and disabled when SNMP_SAFE_REQUESTS = 1). + * Unsafe requests are disabled by default! + */ +#if !defined SNMP_SAFE_REQUESTS || defined __DOXYGEN__ +#define SNMP_SAFE_REQUESTS 1 +#endif + +/** + * The maximum length of strings used. + */ +#if !defined SNMP_MAX_OCTET_STRING_LEN || defined __DOXYGEN__ +#define SNMP_MAX_OCTET_STRING_LEN 127 +#endif + +/** + * The maximum number of Sub ID's inside an object identifier. + * Indirectly this also limits the maximum depth of SNMP tree. + */ +#if !defined SNMP_MAX_OBJ_ID_LEN || defined __DOXYGEN__ +#define SNMP_MAX_OBJ_ID_LEN 50 +#endif + +#if !defined SNMP_MAX_VALUE_SIZE || defined __DOXYGEN__ +/** + * The minimum size of a value. + */ +#define SNMP_MIN_VALUE_SIZE (2 * sizeof(u32_t*)) /* size required to store the basic types (8 bytes for counter64) */ +/** + * The maximum size of a value. + */ +#define SNMP_MAX_VALUE_SIZE LWIP_MAX(LWIP_MAX((SNMP_MAX_OCTET_STRING_LEN), sizeof(u32_t)*(SNMP_MAX_OBJ_ID_LEN)), SNMP_MIN_VALUE_SIZE) +#endif + +/** + * The snmp read-access community. Used for write-access and traps, too + * unless SNMP_COMMUNITY_WRITE or SNMP_COMMUNITY_TRAP are enabled, respectively. + */ +#if !defined SNMP_COMMUNITY || defined __DOXYGEN__ +#define SNMP_COMMUNITY "public" +#endif + +/** + * The snmp write-access community. + * Set this community to "" in order to disallow any write access. + */ +#if !defined SNMP_COMMUNITY_WRITE || defined __DOXYGEN__ +#define SNMP_COMMUNITY_WRITE "private" +#endif + +/** + * The snmp community used for sending traps. + */ +#if !defined SNMP_COMMUNITY_TRAP || defined __DOXYGEN__ +#define SNMP_COMMUNITY_TRAP "public" +#endif + +/** + * The maximum length of community string. + * If community names shall be adjusted at runtime via snmp_set_community() calls, + * enter here the possible maximum length (+1 for terminating null character). + */ +#if !defined SNMP_MAX_COMMUNITY_STR_LEN || defined __DOXYGEN__ +#define SNMP_MAX_COMMUNITY_STR_LEN LWIP_MAX(LWIP_MAX(sizeof(SNMP_COMMUNITY), sizeof(SNMP_COMMUNITY_WRITE)), sizeof(SNMP_COMMUNITY_TRAP)) +#endif + +/** + * The OID identifiying the device. This may be the enterprise OID itself or any OID located below it in tree. + */ +#if !defined SNMP_DEVICE_ENTERPRISE_OID || defined __DOXYGEN__ +#define SNMP_LWIP_ENTERPRISE_OID 26381 +/** + * IANA assigned enterprise ID for lwIP is 26381 + * @see http://www.iana.org/assignments/enterprise-numbers + * + * @note this enterprise ID is assigned to the lwIP project, + * all object identifiers living under this ID are assigned + * by the lwIP maintainers! + * @note don't change this define, use snmp_set_device_enterprise_oid() + * + * If you need to create your own private MIB you'll need + * to apply for your own enterprise ID with IANA: + * http://www.iana.org/numbers.html + */ +#define SNMP_DEVICE_ENTERPRISE_OID {1, 3, 6, 1, 4, 1, SNMP_LWIP_ENTERPRISE_OID} +/** + * Length of SNMP_DEVICE_ENTERPRISE_OID + */ +#define SNMP_DEVICE_ENTERPRISE_OID_LEN 7 +#endif + +/** + * SNMP_DEBUG: Enable debugging for SNMP messages. + */ +#if !defined SNMP_DEBUG || defined __DOXYGEN__ +#define SNMP_DEBUG LWIP_DBG_OFF +#endif + +/** + * SNMP_MIB_DEBUG: Enable debugging for SNMP MIBs. + */ +#if !defined SNMP_MIB_DEBUG || defined __DOXYGEN__ +#define SNMP_MIB_DEBUG LWIP_DBG_OFF +#endif + +/** + * Indicates if the MIB2 implementation of LWIP SNMP stack is used. + */ +#if !defined SNMP_LWIP_MIB2 || defined __DOXYGEN__ +#define SNMP_LWIP_MIB2 LWIP_SNMP +#endif + +/** + * Value return for sysDesc field of MIB2. + */ +#if !defined SNMP_LWIP_MIB2_SYSDESC || defined __DOXYGEN__ +#define SNMP_LWIP_MIB2_SYSDESC "lwIP" +#endif + +/** + * Value return for sysName field of MIB2. + * To make sysName field settable, call snmp_mib2_set_sysname() to provide the necessary buffers. + */ +#if !defined SNMP_LWIP_MIB2_SYSNAME || defined __DOXYGEN__ +#define SNMP_LWIP_MIB2_SYSNAME "FQDN-unk" +#endif + +/** + * Value return for sysContact field of MIB2. + * To make sysContact field settable, call snmp_mib2_set_syscontact() to provide the necessary buffers. + */ +#if !defined SNMP_LWIP_MIB2_SYSCONTACT || defined __DOXYGEN__ +#define SNMP_LWIP_MIB2_SYSCONTACT "" +#endif + +/** + * Value return for sysLocation field of MIB2. + * To make sysLocation field settable, call snmp_mib2_set_syslocation() to provide the necessary buffers. + */ +#if !defined SNMP_LWIP_MIB2_SYSLOCATION || defined __DOXYGEN__ +#define SNMP_LWIP_MIB2_SYSLOCATION "" +#endif + +/** + * This value is used to limit the repetitions processed in GetBulk requests (value == 0 means no limitation). + * This may be useful to limit the load for a single request. + * According to SNMP RFC 1905 it is allowed to not return all requested variables from a GetBulk request if system load would be too high. + * so the effect is that the client will do more requests to gather all data. + * For the stack this could be useful in case that SNMP processing is done in TCP/IP thread. In this situation a request with many + * repetitions could block the thread for a longer time. Setting limit here will keep the stack more responsive. + */ +#if !defined SNMP_LWIP_GETBULK_MAX_REPETITIONS || defined __DOXYGEN__ +#define SNMP_LWIP_GETBULK_MAX_REPETITIONS 0 +#endif + +/** + * @} + */ + +/* + ------------------------------------ + ---------- SNMPv3 options ---------- + ------------------------------------ +*/ + +/** + * LWIP_SNMP_V3==1: This enables EXPERIMENTAL SNMPv3 support. LWIP_SNMP must + * also be enabled. + * THIS IS UNDER DEVELOPMENT AND SHOULD NOT BE ENABLED IN PRODUCTS. + */ +#ifndef LWIP_SNMP_V3 +#define LWIP_SNMP_V3 0 +#endif + +#ifndef LWIP_SNMP_V3_MBEDTLS +#define LWIP_SNMP_V3_MBEDTLS LWIP_SNMP_V3 +#endif + +#ifndef LWIP_SNMP_V3_CRYPTO +#define LWIP_SNMP_V3_CRYPTO LWIP_SNMP_V3_MBEDTLS +#endif + +#ifndef LWIP_SNMP_CONFIGURE_VERSIONS +#define LWIP_SNMP_CONFIGURE_VERSIONS 0 +#endif + +#endif /* LWIP_HDR_SNMP_OPTS_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/snmp_scalar.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/snmp_scalar.h new file mode 100644 index 0000000000000000000000000000000000000000..40a060c640483ac0bdf2063f84076a866c333e0b --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/snmp_scalar.h @@ -0,0 +1,113 @@ +/** + * @file + * SNMP server MIB API to implement scalar nodes + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Martin Hentschel + * + */ + +#ifndef LWIP_HDR_APPS_SNMP_SCALAR_H +#define LWIP_HDR_APPS_SNMP_SCALAR_H + +#include "lwip/apps/snmp_opts.h" +#include "lwip/apps/snmp_core.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#if LWIP_SNMP /* don't build if not configured for use in lwipopts.h */ + +/** basic scalar node */ +struct snmp_scalar_node +{ + /** inherited "base class" members */ + struct snmp_leaf_node node; + u8_t asn1_type; + snmp_access_t access; + node_instance_get_value_method get_value; + node_instance_set_test_method set_test; + node_instance_set_value_method set_value; +}; + + +snmp_err_t snmp_scalar_get_instance(const u32_t *root_oid, u8_t root_oid_len, struct snmp_node_instance* instance); +snmp_err_t snmp_scalar_get_next_instance(const u32_t *root_oid, u8_t root_oid_len, struct snmp_node_instance* instance); + +#define SNMP_SCALAR_CREATE_NODE(oid, access, asn1_type, get_value_method, set_test_method, set_value_method) \ + {{{ SNMP_NODE_SCALAR, (oid) }, \ + snmp_scalar_get_instance, \ + snmp_scalar_get_next_instance }, \ + (asn1_type), (access), (get_value_method), (set_test_method), (set_value_method) } + +#define SNMP_SCALAR_CREATE_NODE_READONLY(oid, asn1_type, get_value_method) SNMP_SCALAR_CREATE_NODE(oid, SNMP_NODE_INSTANCE_READ_ONLY, asn1_type, get_value_method, NULL, NULL) + +/** scalar array node - a tree node which contains scalars only as children */ +struct snmp_scalar_array_node_def +{ + u32_t oid; + u8_t asn1_type; + snmp_access_t access; +}; + +typedef s16_t (*snmp_scalar_array_get_value_method)(const struct snmp_scalar_array_node_def*, void*); +typedef snmp_err_t (*snmp_scalar_array_set_test_method)(const struct snmp_scalar_array_node_def*, u16_t, void*); +typedef snmp_err_t (*snmp_scalar_array_set_value_method)(const struct snmp_scalar_array_node_def*, u16_t, void*); + +/** basic scalar array node */ +struct snmp_scalar_array_node +{ + /** inherited "base class" members */ + struct snmp_leaf_node node; + u16_t array_node_count; + const struct snmp_scalar_array_node_def* array_nodes; + snmp_scalar_array_get_value_method get_value; + snmp_scalar_array_set_test_method set_test; + snmp_scalar_array_set_value_method set_value; +}; + +snmp_err_t snmp_scalar_array_get_instance(const u32_t *root_oid, u8_t root_oid_len, struct snmp_node_instance* instance); +snmp_err_t snmp_scalar_array_get_next_instance(const u32_t *root_oid, u8_t root_oid_len, struct snmp_node_instance* instance); + +#define SNMP_SCALAR_CREATE_ARRAY_NODE(oid, array_nodes, get_value_method, set_test_method, set_value_method) \ + {{{ SNMP_NODE_SCALAR_ARRAY, (oid) }, \ + snmp_scalar_array_get_instance, \ + snmp_scalar_array_get_next_instance }, \ + (u16_t)LWIP_ARRAYSIZE(array_nodes), (array_nodes), (get_value_method), (set_test_method), (set_value_method) } + +#endif /* LWIP_SNMP */ + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_APPS_SNMP_SCALAR_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/snmp_snmpv2_framework.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/snmp_snmpv2_framework.h new file mode 100644 index 0000000000000000000000000000000000000000..47409cc201022094fa24c5ac004d27ce75a3840c --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/snmp_snmpv2_framework.h @@ -0,0 +1,32 @@ +/* +Generated by LwipMibCompiler +*/ + +#ifndef LWIP_HDR_APPS_SNMP_FRAMEWORK_MIB_H +#define LWIP_HDR_APPS_SNMP_FRAMEWORK_MIB_H + +#include "lwip/apps/snmp_opts.h" +#if LWIP_SNMP + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +#include "lwip/apps/snmp_core.h" + +extern const struct snmp_obj_id usmNoAuthProtocol; +extern const struct snmp_obj_id usmHMACMD5AuthProtocol; +extern const struct snmp_obj_id usmHMACSHAAuthProtocol; + +extern const struct snmp_obj_id usmNoPrivProtocol; +extern const struct snmp_obj_id usmDESPrivProtocol; +extern const struct snmp_obj_id usmAESPrivProtocol; + +extern const struct snmp_mib snmpframeworkmib; + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* LWIP_SNMP */ +#endif /* LWIP_HDR_APPS_SNMP_FRAMEWORK_MIB_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/snmp_snmpv2_usm.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/snmp_snmpv2_usm.h new file mode 100644 index 0000000000000000000000000000000000000000..88cfcd8ebed705608560af54bd1c55c8ba9bab0f --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/snmp_snmpv2_usm.h @@ -0,0 +1,24 @@ +/* +Generated by LwipMibCompiler +*/ + +#ifndef LWIP_HDR_APPS_SNMP_USER_BASED_SM_MIB_H +#define LWIP_HDR_APPS_SNMP_USER_BASED_SM_MIB_H + +#include "lwip/apps/snmp_opts.h" +#if LWIP_SNMP + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +#include "lwip/apps/snmp_core.h" + +extern const struct snmp_mib snmpusmmib; + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* LWIP_SNMP */ +#endif /* LWIP_HDR_APPS_SNMP_USER_BASED_SM_MIB_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/snmp_table.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/snmp_table.h new file mode 100644 index 0000000000000000000000000000000000000000..4988b51c2502ea7cf2212f22c8970b08959776cb --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/snmp_table.h @@ -0,0 +1,134 @@ +/** + * @file + * SNMP server MIB API to implement table nodes + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Martin Hentschel + * + */ + +#ifndef LWIP_HDR_APPS_SNMP_TABLE_H +#define LWIP_HDR_APPS_SNMP_TABLE_H + +#include "lwip/apps/snmp_opts.h" +#include "lwip/apps/snmp_core.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#if LWIP_SNMP /* don't build if not configured for use in lwipopts.h */ + +/** default (customizable) read/write table */ +struct snmp_table_col_def +{ + u32_t index; + u8_t asn1_type; + snmp_access_t access; +}; + +/** table node */ +struct snmp_table_node +{ + /** inherited "base class" members */ + struct snmp_leaf_node node; + u16_t column_count; + const struct snmp_table_col_def* columns; + snmp_err_t (*get_cell_instance)(const u32_t* column, const u32_t* row_oid, u8_t row_oid_len, struct snmp_node_instance* cell_instance); + snmp_err_t (*get_next_cell_instance)(const u32_t* column, struct snmp_obj_id* row_oid, struct snmp_node_instance* cell_instance); + /** returns object value for the given object identifier */ + node_instance_get_value_method get_value; + /** tests length and/or range BEFORE setting */ + node_instance_set_test_method set_test; + /** sets object value, only called when set_test() was successful */ + node_instance_set_value_method set_value; +}; + +snmp_err_t snmp_table_get_instance(const u32_t *root_oid, u8_t root_oid_len, struct snmp_node_instance* instance); +snmp_err_t snmp_table_get_next_instance(const u32_t *root_oid, u8_t root_oid_len, struct snmp_node_instance* instance); + +#define SNMP_TABLE_CREATE(oid, columns, get_cell_instance_method, get_next_cell_instance_method, get_value_method, set_test_method, set_value_method) \ + {{{ SNMP_NODE_TABLE, (oid) }, \ + snmp_table_get_instance, \ + snmp_table_get_next_instance }, \ + (u16_t)LWIP_ARRAYSIZE(columns), (columns), \ + (get_cell_instance_method), (get_next_cell_instance_method), \ + (get_value_method), (set_test_method), (set_value_method)} + +#define SNMP_TABLE_GET_COLUMN_FROM_OID(oid) ((oid)[1]) /* first array value is (fixed) row entry (fixed to 1) and 2nd value is column, follow3ed by instance */ + + +/** simple read-only table */ +typedef enum { + SNMP_VARIANT_VALUE_TYPE_U32, + SNMP_VARIANT_VALUE_TYPE_S32, + SNMP_VARIANT_VALUE_TYPE_PTR, + SNMP_VARIANT_VALUE_TYPE_CONST_PTR +} snmp_table_column_data_type_t; + +struct snmp_table_simple_col_def +{ + u32_t index; + u8_t asn1_type; + snmp_table_column_data_type_t data_type; /* depending of what union member is used to store the value*/ +}; + +/** simple read-only table node */ +struct snmp_table_simple_node +{ + /* inherited "base class" members */ + struct snmp_leaf_node node; + u16_t column_count; + const struct snmp_table_simple_col_def* columns; + snmp_err_t (*get_cell_value)(const u32_t* column, const u32_t* row_oid, u8_t row_oid_len, union snmp_variant_value* value, u32_t* value_len); + snmp_err_t (*get_next_cell_instance_and_value)(const u32_t* column, struct snmp_obj_id* row_oid, union snmp_variant_value* value, u32_t* value_len); +}; + +snmp_err_t snmp_table_simple_get_instance(const u32_t *root_oid, u8_t root_oid_len, struct snmp_node_instance* instance); +snmp_err_t snmp_table_simple_get_next_instance(const u32_t *root_oid, u8_t root_oid_len, struct snmp_node_instance* instance); + +#define SNMP_TABLE_CREATE_SIMPLE(oid, columns, get_cell_value_method, get_next_cell_instance_and_value_method) \ + {{{ SNMP_NODE_TABLE, (oid) }, \ + snmp_table_simple_get_instance, \ + snmp_table_simple_get_next_instance }, \ + (u16_t)LWIP_ARRAYSIZE(columns), (columns), (get_cell_value_method), (get_next_cell_instance_and_value_method) } + +s16_t snmp_table_extract_value_from_s32ref(struct snmp_node_instance* instance, void* value); +s16_t snmp_table_extract_value_from_u32ref(struct snmp_node_instance* instance, void* value); +s16_t snmp_table_extract_value_from_refconstptr(struct snmp_node_instance* instance, void* value); + +#endif /* LWIP_SNMP */ + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_APPS_SNMP_TABLE_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/snmp_threadsync.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/snmp_threadsync.h new file mode 100644 index 0000000000000000000000000000000000000000..a25dbf2d0f05cea9d70b109a3a2c3ff0f690f00f --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/snmp_threadsync.h @@ -0,0 +1,114 @@ +/** + * @file + * SNMP server MIB API to implement thread synchronization + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Dirk Ziegelmeier + * + */ + +#ifndef LWIP_HDR_APPS_SNMP_THREADSYNC_H +#define LWIP_HDR_APPS_SNMP_THREADSYNC_H + +#include "lwip/apps/snmp_opts.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#if LWIP_SNMP /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/apps/snmp_core.h" +#include "lwip/sys.h" + +typedef void (*snmp_threadsync_called_fn)(void* arg); +typedef void (*snmp_threadsync_synchronizer_fn)(snmp_threadsync_called_fn fn, void* arg); + + +/** Thread sync runtime data. For internal usage only. */ +struct threadsync_data +{ + union { + snmp_err_t err; + s16_t s16; + } retval; + union { + const u32_t *root_oid; + void *value; + } arg1; + union { + u8_t root_oid_len; + u16_t len; + } arg2; + const struct snmp_threadsync_node *threadsync_node; + struct snmp_node_instance proxy_instance; +}; + +/** Thread sync instance. Needed EXCATLY once for every thread to be synced into. */ +struct snmp_threadsync_instance +{ + sys_sem_t sem; + sys_mutex_t sem_usage_mutex; + snmp_threadsync_synchronizer_fn sync_fn; + struct threadsync_data data; +}; + +/** SNMP thread sync proxy leaf node */ +struct snmp_threadsync_node +{ + /* inherited "base class" members */ + struct snmp_leaf_node node; + + const struct snmp_leaf_node *target; + struct snmp_threadsync_instance *instance; +}; + +snmp_err_t snmp_threadsync_get_instance(const u32_t *root_oid, u8_t root_oid_len, struct snmp_node_instance* instance); +snmp_err_t snmp_threadsync_get_next_instance(const u32_t *root_oid, u8_t root_oid_len, struct snmp_node_instance* instance); + +/** Create thread sync proxy node */ +#define SNMP_CREATE_THREAD_SYNC_NODE(oid, target_leaf_node, threadsync_instance) \ + {{{ SNMP_NODE_THREADSYNC, (oid) }, \ + snmp_threadsync_get_instance, \ + snmp_threadsync_get_next_instance }, \ + (target_leaf_node), \ + (threadsync_instance) } + +/** Create thread sync instance data */ +void snmp_threadsync_init(struct snmp_threadsync_instance *instance, snmp_threadsync_synchronizer_fn sync_fn); + +#endif /* LWIP_SNMP */ + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_APPS_SNMP_THREADSYNC_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/snmpv3.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/snmpv3.h new file mode 100644 index 0000000000000000000000000000000000000000..e0dda6499b6483664c0233d80156ee1c04a1732e --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/snmpv3.h @@ -0,0 +1,114 @@ +/** + * @file + * Additional SNMPv3 functionality RFC3414 and RFC3826. + */ + +/* + * Copyright (c) 2016 Elias Oenal. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * Author: Elias Oenal + */ + +#ifndef LWIP_HDR_APPS_SNMP_V3_H +#define LWIP_HDR_APPS_SNMP_V3_H + +#include "lwip/apps/snmp_opts.h" +#include "lwip/err.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#if LWIP_SNMP && LWIP_SNMP_V3 + +typedef enum +{ + SNMP_V3_AUTH_ALGO_INVAL = 0, + SNMP_V3_AUTH_ALGO_MD5 = 1, + SNMP_V3_AUTH_ALGO_SHA = 2 +} snmpv3_auth_algo_t; + +typedef enum +{ + SNMP_V3_PRIV_ALGO_INVAL = 0, + SNMP_V3_PRIV_ALGO_DES = 1, + SNMP_V3_PRIV_ALGO_AES = 2 +} snmpv3_priv_algo_t; + +typedef enum +{ + SNMP_V3_USER_STORAGETYPE_OTHER = 1, + SNMP_V3_USER_STORAGETYPE_VOLATILE = 2, + SNMP_V3_USER_STORAGETYPE_NONVOLATILE = 3, + SNMP_V3_USER_STORAGETYPE_PERMANENT = 4, + SNMP_V3_USER_STORAGETYPE_READONLY = 5 +} snmpv3_user_storagetype_t; + +/* + * The following callback functions must be implemented by the application. + * There is a dummy implementation in snmpv3_dummy.c. + */ + +void snmpv3_get_engine_id(const char **id, u8_t *len); +err_t snmpv3_set_engine_id(const char* id, u8_t len); + +u32_t snmpv3_get_engine_boots(void); +void snmpv3_set_engine_boots(u32_t boots); + +u32_t snmpv3_get_engine_time(void); +void snmpv3_reset_engine_time(void); + +err_t snmpv3_get_user(const char* username, snmpv3_auth_algo_t *auth_algo, u8_t *auth_key, snmpv3_priv_algo_t *priv_algo, u8_t *priv_key); +u8_t snmpv3_get_amount_of_users(void); +err_t snmpv3_get_user_storagetype(const char *username, snmpv3_user_storagetype_t *storagetype); +err_t snmpv3_get_username(char *username, u8_t index); + +/* The following functions are provided by the SNMPv3 agent */ + +void snmpv3_engine_id_changed(void); +s32_t snmpv3_get_engine_time_internal(void); + +void snmpv3_password_to_key_md5( + const u8_t *password, /* IN */ + size_t passwordlen, /* IN */ + const u8_t *engineID, /* IN - pointer to snmpEngineID */ + u8_t engineLength, /* IN - length of snmpEngineID */ + u8_t *key); /* OUT - pointer to caller 16-octet buffer */ + +void snmpv3_password_to_key_sha( + const u8_t *password, /* IN */ + size_t passwordlen, /* IN */ + const u8_t *engineID, /* IN - pointer to snmpEngineID */ + u8_t engineLength, /* IN - length of snmpEngineID */ + u8_t *key); /* OUT - pointer to caller 20-octet buffer */ + +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_APPS_SNMP_V3_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/sntp.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/sntp.h new file mode 100644 index 0000000000000000000000000000000000000000..3c0f95f728742d9ce0e7af0a410d2f862abdac07 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/sntp.h @@ -0,0 +1,80 @@ +/** + * @file + * SNTP client API + */ + +/* + * Copyright (c) 2007-2009 Frédéric Bernon, Simon Goldschmidt + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Frédéric Bernon, Simon Goldschmidt + * + */ +#ifndef LWIP_HDR_APPS_SNTP_H +#define LWIP_HDR_APPS_SNTP_H + +#include "lwip/apps/sntp_opts.h" +#include "lwip/ip_addr.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* SNTP operating modes: default is to poll using unicast. + The mode has to be set before calling sntp_init(). */ +#define SNTP_OPMODE_POLL 0 +#define SNTP_OPMODE_LISTENONLY 1 +void sntp_setoperatingmode(u8_t operating_mode); +u8_t sntp_getoperatingmode(void); + +void sntp_init(void); +void sntp_stop(void); +u8_t sntp_enabled(void); + +void sntp_setserver(u8_t idx, const ip_addr_t *addr); +const ip_addr_t* sntp_getserver(u8_t idx); + +#if SNTP_MONITOR_SERVER_REACHABILITY +u8_t sntp_getreachability(u8_t idx); +#endif /* SNTP_MONITOR_SERVER_REACHABILITY */ + +#if SNTP_SERVER_DNS +void sntp_setservername(u8_t idx, const char *server); +const char *sntp_getservername(u8_t idx); +#endif /* SNTP_SERVER_DNS */ + +#if SNTP_GET_SERVERS_FROM_DHCP +void sntp_servermode_dhcp(int set_servers_from_dhcp); +#else /* SNTP_GET_SERVERS_FROM_DHCP */ +#define sntp_servermode_dhcp(x) +#endif /* SNTP_GET_SERVERS_FROM_DHCP */ + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_APPS_SNTP_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/sntp_opts.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/sntp_opts.h new file mode 100644 index 0000000000000000000000000000000000000000..ed98040fea82b326b50e73ea7cebb2d15d579563 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/sntp_opts.h @@ -0,0 +1,209 @@ +/** + * @file + * SNTP client options list + */ + +/* + * Copyright (c) 2007-2009 Frédéric Bernon, Simon Goldschmidt + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Frédéric Bernon, Simon Goldschmidt + * + */ +#ifndef LWIP_HDR_APPS_SNTP_OPTS_H +#define LWIP_HDR_APPS_SNTP_OPTS_H + +#include "lwip/opt.h" +#include "lwip/prot/iana.h" + +/** + * @defgroup sntp_opts Options + * @ingroup sntp + * @{ + */ + +/** SNTP macro to change system time in seconds + * Define SNTP_SET_SYSTEM_TIME_US(sec, us) to set the time in microseconds + * instead of this one if you need the additional precision. Alternatively, + * define SNTP_SET_SYSTEM_TIME_NTP(sec, frac) in order to work with native + * NTP timestamps instead. + */ +#if !defined SNTP_SET_SYSTEM_TIME || defined __DOXYGEN__ +#define SNTP_SET_SYSTEM_TIME(sec) LWIP_UNUSED_ARG(sec) +#endif + +/** The maximum number of SNTP servers that can be set */ +#if !defined SNTP_MAX_SERVERS || defined __DOXYGEN__ +#define SNTP_MAX_SERVERS LWIP_DHCP_MAX_NTP_SERVERS +#endif + +/** Set this to 1 to implement the callback function called by dhcp when + * NTP servers are received. */ +#if !defined SNTP_GET_SERVERS_FROM_DHCP || defined __DOXYGEN__ +#define SNTP_GET_SERVERS_FROM_DHCP LWIP_DHCP_GET_NTP_SRV +#endif + +/** Set this to 1 to support DNS names (or IP address strings) to set sntp servers + * One server address/name can be defined as default if SNTP_SERVER_DNS == 1: + * \#define SNTP_SERVER_ADDRESS "pool.ntp.org" + */ +#if !defined SNTP_SERVER_DNS || defined __DOXYGEN__ +#define SNTP_SERVER_DNS 0 +#endif + +/** + * SNTP_DEBUG: Enable debugging for SNTP. + */ +#if !defined SNTP_DEBUG || defined __DOXYGEN__ +#define SNTP_DEBUG LWIP_DBG_OFF +#endif + +/** SNTP server port */ +#if !defined SNTP_PORT || defined __DOXYGEN__ +#define SNTP_PORT LWIP_IANA_PORT_SNTP +#endif + +/** Sanity check: + * Define this to + * - 0 to turn off sanity checks (default; smaller code) + * - >= 1 to check address and port of the response packet to ensure the + * response comes from the server we sent the request to. + * - >= 2 to check returned Originate Timestamp against Transmit Timestamp + * sent to the server (to ensure response to older request). + * - >= 3 @todo: discard reply if any of the VN, Stratum, or Transmit Timestamp + * fields is 0 or the Mode field is not 4 (unicast) or 5 (broadcast). + * - >= 4 @todo: to check that the Root Delay and Root Dispersion fields are each + * greater than or equal to 0 and less than infinity, where infinity is + * currently a cozy number like one second. This check avoids using a + * server whose synchronization source has expired for a very long time. + */ +#if !defined SNTP_CHECK_RESPONSE || defined __DOXYGEN__ +#define SNTP_CHECK_RESPONSE 0 +#endif + +/** Enable round-trip delay compensation. + * Compensate for the round-trip delay by calculating the clock offset from + * the originate, receive, transmit and destination timestamps, as per RFC. + * + * The calculation requires compiler support for 64-bit integers. Also, either + * SNTP_SET_SYSTEM_TIME_US or SNTP_SET_SYSTEM_TIME_NTP has to be implemented + * for setting the system clock with sub-second precision. Likewise, either + * SNTP_GET_SYSTEM_TIME or SNTP_GET_SYSTEM_TIME_NTP needs to be implemented + * with sub-second precision. + * + * Although not strictly required, it makes sense to combine this option with + * SNTP_CHECK_RESPONSE >= 2 for sanity-checking of the received timestamps. + * Also, in order for the round-trip calculation to work, the difference + * between the local clock and the NTP server clock must not be larger than + * about 34 years. If that limit is exceeded, the implementation will fall back + * to setting the clock without compensation. In order to ensure that the local + * clock is always within the permitted range for compensation, even at first + * try, it may be necessary to store at least the current year in non-volatile + * memory. + */ +#if !defined SNTP_COMP_ROUNDTRIP || defined __DOXYGEN__ +#define SNTP_COMP_ROUNDTRIP 0 +#endif + +/** According to the RFC, this shall be a random delay + * between 1 and 5 minutes (in milliseconds) to prevent load peaks. + * This can be defined to a random generation function, + * which must return the delay in milliseconds as u32_t. + * Turned off by default. + */ +#if !defined SNTP_STARTUP_DELAY || defined __DOXYGEN__ +#ifdef LWIP_RAND +#define SNTP_STARTUP_DELAY 1 +#else +#define SNTP_STARTUP_DELAY 0 +#endif +#endif + +/** If you want the startup delay to be a function, define this + * to a function (including the brackets) and define SNTP_STARTUP_DELAY to 1. + */ +#if !defined SNTP_STARTUP_DELAY_FUNC || defined __DOXYGEN__ +#define SNTP_STARTUP_DELAY_FUNC (LWIP_RAND() % 5000) +#endif + +/** SNTP receive timeout - in milliseconds + * Also used as retry timeout - this shouldn't be too low. + * Default is 15 seconds. Must not be beolw 15 seconds by specification (i.e. 15000) + */ +#if !defined SNTP_RECV_TIMEOUT || defined __DOXYGEN__ +#define SNTP_RECV_TIMEOUT 15000 +#endif + +/** SNTP update delay - in milliseconds + * Default is 1 hour. Must not be beolw 60 seconds by specification (i.e. 60000) + */ +#if !defined SNTP_UPDATE_DELAY || defined __DOXYGEN__ +#define SNTP_UPDATE_DELAY 3600000 +#endif + +/** SNTP macro to get system time, used with SNTP_CHECK_RESPONSE >= 2 + * to send in request and compare in response. Also used for round-trip + * delay compensation if SNTP_COMP_ROUNDTRIP != 0. + * Alternatively, define SNTP_GET_SYSTEM_TIME_NTP(sec, frac) in order to + * work with native NTP timestamps instead. + */ +#if !defined SNTP_GET_SYSTEM_TIME || defined __DOXYGEN__ +#define SNTP_GET_SYSTEM_TIME(sec, us) do { (sec) = 0; (us) = 0; } while(0) +#endif + +/** Default retry timeout (in milliseconds) if the response + * received is invalid. + * This is doubled with each retry until SNTP_RETRY_TIMEOUT_MAX is reached. + */ +#if !defined SNTP_RETRY_TIMEOUT || defined __DOXYGEN__ +#define SNTP_RETRY_TIMEOUT SNTP_RECV_TIMEOUT +#endif + +/** Maximum retry timeout (in milliseconds). */ +#if !defined SNTP_RETRY_TIMEOUT_MAX || defined __DOXYGEN__ +#define SNTP_RETRY_TIMEOUT_MAX (SNTP_RETRY_TIMEOUT * 10) +#endif + +/** Increase retry timeout with every retry sent + * Default is on to conform to RFC. + */ +#if !defined SNTP_RETRY_TIMEOUT_EXP || defined __DOXYGEN__ +#define SNTP_RETRY_TIMEOUT_EXP 1 +#endif + +/** Keep a reachability shift register per server + * Default is on to conform to RFC. + */ +#if !defined SNTP_MONITOR_SERVER_REACHABILITY || defined __DOXYGEN__ +#define SNTP_MONITOR_SERVER_REACHABILITY 1 +#endif + +/** + * @} + */ + +#endif /* LWIP_HDR_APPS_SNTP_OPTS_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/tftp_opts.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/tftp_opts.h new file mode 100644 index 0000000000000000000000000000000000000000..198f632b68ee3d61315205b69a9d4a78f2b33a86 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/tftp_opts.h @@ -0,0 +1,106 @@ +/** + * + * @file tftp_opts.h + * + * @author Logan Gunthorpe + * + * @brief Trivial File Transfer Protocol (RFC 1350) implementation options + * + * Copyright (c) Deltatee Enterprises Ltd. 2013 + * All rights reserved. + * + */ + +/* + * Redistribution and use in source and binary forms, with or without + * modification,are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * Author: Logan Gunthorpe + * + */ + +#ifndef LWIP_HDR_APPS_TFTP_OPTS_H +#define LWIP_HDR_APPS_TFTP_OPTS_H + +#include "lwip/opt.h" +#include "lwip/prot/iana.h" + +/** + * @defgroup tftp_opts Options + * @ingroup tftp + * @{ + */ + +/** + * Enable TFTP debug messages + */ +#if !defined TFTP_DEBUG || defined __DOXYGEN__ +#define TFTP_DEBUG LWIP_DBG_OFF +#endif + +/** + * TFTP server port + */ +#if !defined TFTP_PORT || defined __DOXYGEN__ +#define TFTP_PORT LWIP_IANA_PORT_TFTP +#endif + +/** + * TFTP timeout + */ +#if !defined TFTP_TIMEOUT_MSECS || defined __DOXYGEN__ +#define TFTP_TIMEOUT_MSECS 10000 +#endif + +/** + * Max. number of retries when a file is read from server + */ +#if !defined TFTP_MAX_RETRIES || defined __DOXYGEN__ +#define TFTP_MAX_RETRIES 5 +#endif + +/** + * TFTP timer cyclic interval + */ +#if !defined TFTP_TIMER_MSECS || defined __DOXYGEN__ +#define TFTP_TIMER_MSECS (TFTP_TIMEOUT_MSECS / 10) +#endif + +/** + * Max. length of TFTP filename + */ +#if !defined TFTP_MAX_FILENAME_LEN || defined __DOXYGEN__ +#define TFTP_MAX_FILENAME_LEN 20 +#endif + +/** + * Max. length of TFTP mode + */ +#if !defined TFTP_MAX_MODE_LEN || defined __DOXYGEN__ +#define TFTP_MAX_MODE_LEN 7 +#endif + +/** + * @} + */ + +#endif /* LWIP_HDR_APPS_TFTP_OPTS_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/tftp_server.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/tftp_server.h new file mode 100644 index 0000000000000000000000000000000000000000..0a7fbee02aeb47779a17a42afd007ee61e1c4247 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/apps/tftp_server.h @@ -0,0 +1,95 @@ +/** + * + * @file tftp_server.h + * + * @author Logan Gunthorpe + * + * @brief Trivial File Transfer Protocol (RFC 1350) + * + * Copyright (c) Deltatee Enterprises Ltd. 2013 + * All rights reserved. + * + */ + +/* + * Redistribution and use in source and binary forms, with or without + * modification,are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * Author: Logan Gunthorpe + * + */ + +#ifndef LWIP_HDR_APPS_TFTP_SERVER_H +#define LWIP_HDR_APPS_TFTP_SERVER_H + +#include "lwip/apps/tftp_opts.h" +#include "lwip/err.h" +#include "lwip/pbuf.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** @ingroup tftp + * TFTP context containing callback functions for TFTP transfers + */ +struct tftp_context { + /** + * Open file for read/write. + * @param fname Filename + * @param mode Mode string from TFTP RFC 1350 (netascii, octet, mail) + * @param write Flag indicating read (0) or write (!= 0) access + * @returns File handle supplied to other functions + */ + void* (*open)(const char* fname, const char* mode, u8_t write); + /** + * Close file handle + * @param handle File handle returned by open() + */ + void (*close)(void* handle); + /** + * Read from file + * @param handle File handle returned by open() + * @param buf Target buffer to copy read data to + * @param bytes Number of bytes to copy to buf + * @returns >= 0: Success; < 0: Error + */ + int (*read)(void* handle, void* buf, int bytes); + /** + * Write to file + * @param handle File handle returned by open() + * @param pbuf PBUF adjusted such that payload pointer points + * to the beginning of write data. In other words, + * TFTP headers are stripped off. + * @returns >= 0: Success; < 0: Error + */ + int (*write)(void* handle, struct pbuf* p); +}; + +err_t tftp_init(const struct tftp_context* ctx); +void tftp_cleanup(void); + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_APPS_TFTP_SERVER_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/arch.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/arch.h new file mode 100644 index 0000000000000000000000000000000000000000..58dae33aa1e680f444418ace1e8de6e3415538be --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/arch.h @@ -0,0 +1,393 @@ +/** + * @file + * Support for different processor and compiler architectures + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef LWIP_HDR_ARCH_H +#define LWIP_HDR_ARCH_H + +#ifndef LITTLE_ENDIAN +#define LITTLE_ENDIAN 1234 +#endif + +#ifndef BIG_ENDIAN +#define BIG_ENDIAN 4321 +#endif + +#include "arch/cc.h" + +/** + * @defgroup compiler_abstraction Compiler/platform abstraction + * @ingroup sys_layer + * All defines related to this section must not be placed in lwipopts.h, + * but in arch/cc.h! + * If the compiler does not provide memset() this file must include a + * definition of it, or include a file which defines it. + * These options cannot be \#defined in lwipopts.h since they are not options + * of lwIP itself, but options of the lwIP port to your system. + * @{ + */ + +/** Define the byte order of the system. + * Needed for conversion of network data to host byte order. + * Allowed values: LITTLE_ENDIAN and BIG_ENDIAN + */ +#ifndef BYTE_ORDER +#define BYTE_ORDER LITTLE_ENDIAN +#endif + +/** Define random number generator function of your system */ +#ifdef __DOXYGEN__ +#define LWIP_RAND() ((u32_t)rand()) +#endif + +/** Platform specific diagnostic output.\n + * Note the default implementation pulls in printf, which may + * in turn pull in a lot of standard libary code. In resource-constrained + * systems, this should be defined to something less resource-consuming. + */ +#ifndef LWIP_PLATFORM_DIAG +#define LWIP_PLATFORM_DIAG(x) do {printf x;} while(0) +#include +#include +#endif + +/** Platform specific assertion handling.\n + * Note the default implementation pulls in printf, fflush and abort, which may + * in turn pull in a lot of standard libary code. In resource-constrained + * systems, this should be defined to something less resource-consuming. + */ +#ifndef LWIP_PLATFORM_ASSERT +#define LWIP_PLATFORM_ASSERT(x) do {printf("Assertion \"%s\" failed at line %d in %s\n", \ + x, __LINE__, __FILE__); fflush(NULL); abort();} while(0) +#include +#include +#endif + +/** Define this to 1 in arch/cc.h of your port if you do not want to + * include stddef.h header to get size_t. You need to typedef size_t + * by yourself in this case. + */ +#ifndef LWIP_NO_STDDEF_H +#define LWIP_NO_STDDEF_H 0 +#endif + +#if !LWIP_NO_STDDEF_H +#include /* for size_t */ +#endif + +/** Define this to 1 in arch/cc.h of your port if your compiler does not provide + * the stdint.h header. You need to typedef the generic types listed in + * lwip/arch.h yourself in this case (u8_t, u16_t...). + */ +#ifndef LWIP_NO_STDINT_H +#define LWIP_NO_STDINT_H 0 +#endif + +/* Define generic types used in lwIP */ +#if !LWIP_NO_STDINT_H +#include +/* stdint.h is C99 which should also provide support for 64-bit integers */ +#if !defined(LWIP_HAVE_INT64) && defined(UINT64_MAX) +#define LWIP_HAVE_INT64 1 +#endif +typedef uint8_t u8_t; +typedef int8_t s8_t; +typedef uint16_t u16_t; +typedef int16_t s16_t; +typedef uint32_t u32_t; +typedef int32_t s32_t; +#if LWIP_HAVE_INT64 +typedef uint64_t u64_t; +typedef int64_t s64_t; +#endif +typedef uintptr_t mem_ptr_t; +#endif + +/** Define this to 1 in arch/cc.h of your port if your compiler does not provide + * the inttypes.h header. You need to define the format strings listed in + * lwip/arch.h yourself in this case (X8_F, U16_F...). + */ +#ifndef LWIP_NO_INTTYPES_H +#define LWIP_NO_INTTYPES_H 0 +#endif + +/* Define (sn)printf formatters for these lwIP types */ +#if !LWIP_NO_INTTYPES_H +#include +#ifndef X8_F +#define X8_F "02" PRIx8 +#endif +#ifndef U16_F +#define U16_F PRIu16 +#endif +#ifndef S16_F +#define S16_F PRId16 +#endif +#ifndef X16_F +#define X16_F PRIx16 +#endif +#ifndef U32_F +#define U32_F PRIu32 +#endif +#ifndef S32_F +#define S32_F PRId32 +#endif +#ifndef X32_F +#define X32_F PRIx32 +#endif +#ifndef SZT_F +#define SZT_F PRIuPTR +#endif +#endif + +/** Define this to 1 in arch/cc.h of your port if your compiler does not provide + * the limits.h header. You need to define the type limits yourself in this case + * (e.g. INT_MAX, SSIZE_MAX). + */ +#ifndef LWIP_NO_LIMITS_H +#define LWIP_NO_LIMITS_H 0 +#endif + +/* Include limits.h? */ +#if !LWIP_NO_LIMITS_H +#include +#endif + +/* Do we need to define ssize_t? This is a compatibility hack: + * Unfortunately, this type seems to be unavailable on some systems (even if + * sys/types or unistd.h are available). + * Being like that, we define it to 'int' if SSIZE_MAX is not defined. + */ +#ifdef SSIZE_MAX +/* If SSIZE_MAX is defined, unistd.h should provide the type as well */ +#ifndef LWIP_NO_UNISTD_H +#define LWIP_NO_UNISTD_H 0 +#endif +#if !LWIP_NO_UNISTD_H +#include +#endif +#else /* SSIZE_MAX */ +typedef int ssize_t; +#define SSIZE_MAX INT_MAX +#endif /* SSIZE_MAX */ + +/* some maximum values needed in lwip code */ +#define LWIP_UINT32_MAX 0xffffffff + +/** Define this to 1 in arch/cc.h of your port if your compiler does not provide + * the ctype.h header. If ctype.h is available, a few character functions + * are mapped to the appropriate functions (lwip_islower, lwip_isdigit...), if + * not, a private implementation is provided. + */ +#ifndef LWIP_NO_CTYPE_H +#define LWIP_NO_CTYPE_H 0 +#endif + +#if LWIP_NO_CTYPE_H +#define lwip_in_range(c, lo, up) ((u8_t)(c) >= (lo) && (u8_t)(c) <= (up)) +#define lwip_isdigit(c) lwip_in_range((c), '0', '9') +#define lwip_isxdigit(c) (lwip_isdigit(c) || lwip_in_range((c), 'a', 'f') || lwip_in_range((c), 'A', 'F')) +#define lwip_islower(c) lwip_in_range((c), 'a', 'z') +#define lwip_isspace(c) ((c) == ' ' || (c) == '\f' || (c) == '\n' || (c) == '\r' || (c) == '\t' || (c) == '\v') +#define lwip_isupper(c) lwip_in_range((c), 'A', 'Z') +#define lwip_tolower(c) (lwip_isupper(c) ? (c) - 'A' + 'a' : c) +#define lwip_toupper(c) (lwip_islower(c) ? (c) - 'a' + 'A' : c) +#else +#include +#define lwip_isdigit(c) isdigit((unsigned char)(c)) +#define lwip_isxdigit(c) isxdigit((unsigned char)(c)) +#define lwip_islower(c) islower((unsigned char)(c)) +#define lwip_isspace(c) isspace((unsigned char)(c)) +#define lwip_isupper(c) isupper((unsigned char)(c)) +#define lwip_tolower(c) tolower((unsigned char)(c)) +#define lwip_toupper(c) toupper((unsigned char)(c)) +#endif + +/** C++ const_cast(val) equivalent to remove constness from a value (GCC -Wcast-qual) */ +#ifndef LWIP_CONST_CAST +#define LWIP_CONST_CAST(target_type, val) ((target_type)((ptrdiff_t)val)) +#endif + +/** Get rid of alignment cast warnings (GCC -Wcast-align) */ +#ifndef LWIP_ALIGNMENT_CAST +#define LWIP_ALIGNMENT_CAST(target_type, val) LWIP_CONST_CAST(target_type, val) +#endif + +/** Get rid of warnings related to pointer-to-numeric and vice-versa casts, + * e.g. "conversion from 'u8_t' to 'void *' of greater size" + */ +#ifndef LWIP_PTR_NUMERIC_CAST +#define LWIP_PTR_NUMERIC_CAST(target_type, val) LWIP_CONST_CAST(target_type, val) +#endif + +/** Avoid warnings/errors related to implicitly casting away packed attributes by doing a explicit cast */ +#ifndef LWIP_PACKED_CAST +#define LWIP_PACKED_CAST(target_type, val) LWIP_CONST_CAST(target_type, val) +#endif + +/** Allocates a memory buffer of specified size that is of sufficient size to align + * its start address using LWIP_MEM_ALIGN. + * You can declare your own version here e.g. to enforce alignment without adding + * trailing padding bytes (see LWIP_MEM_ALIGN_BUFFER) or your own section placement + * requirements.\n + * e.g. if you use gcc and need 32 bit alignment:\n + * \#define LWIP_DECLARE_MEMORY_ALIGNED(variable_name, size) u8_t variable_name[size] \_\_attribute\_\_((aligned(4)))\n + * or more portable:\n + * \#define LWIP_DECLARE_MEMORY_ALIGNED(variable_name, size) u32_t variable_name[(size + sizeof(u32_t) - 1) / sizeof(u32_t)] + */ +#ifndef LWIP_DECLARE_MEMORY_ALIGNED +#define LWIP_DECLARE_MEMORY_ALIGNED(variable_name, size) u8_t variable_name[LWIP_MEM_ALIGN_BUFFER(size)] +#endif + +/** Calculate memory size for an aligned buffer - returns the next highest + * multiple of MEM_ALIGNMENT (e.g. LWIP_MEM_ALIGN_SIZE(3) and + * LWIP_MEM_ALIGN_SIZE(4) will both yield 4 for MEM_ALIGNMENT == 4). + */ +#ifndef LWIP_MEM_ALIGN_SIZE +#define LWIP_MEM_ALIGN_SIZE(size) (((size) + MEM_ALIGNMENT - 1U) & ~(MEM_ALIGNMENT-1U)) +#endif + +/** Calculate safe memory size for an aligned buffer when using an unaligned + * type as storage. This includes a safety-margin on (MEM_ALIGNMENT - 1) at the + * start (e.g. if buffer is u8_t[] and actual data will be u32_t*) + */ +#ifndef LWIP_MEM_ALIGN_BUFFER +#define LWIP_MEM_ALIGN_BUFFER(size) (((size) + MEM_ALIGNMENT - 1U)) +#endif + +/** Align a memory pointer to the alignment defined by MEM_ALIGNMENT + * so that ADDR % MEM_ALIGNMENT == 0 + */ +#ifndef LWIP_MEM_ALIGN +#define LWIP_MEM_ALIGN(addr) ((void *)(((mem_ptr_t)(addr) + MEM_ALIGNMENT - 1) & ~(mem_ptr_t)(MEM_ALIGNMENT-1))) +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/** Packed structs support. + * Placed BEFORE declaration of a packed struct.\n + * For examples of packed struct declarations, see include/lwip/prot/ subfolder.\n + * A port to GCC/clang is included in lwIP, if you use these compilers there is nothing to do here. + */ +#ifndef PACK_STRUCT_BEGIN +#define PACK_STRUCT_BEGIN +#endif /* PACK_STRUCT_BEGIN */ + +/** Packed structs support. + * Placed AFTER declaration of a packed struct.\n + * For examples of packed struct declarations, see include/lwip/prot/ subfolder.\n + * A port to GCC/clang is included in lwIP, if you use these compilers there is nothing to do here. + */ +#ifndef PACK_STRUCT_END +#define PACK_STRUCT_END +#endif /* PACK_STRUCT_END */ + +/** Packed structs support. + * Placed between end of declaration of a packed struct and trailing semicolon.\n + * For examples of packed struct declarations, see include/lwip/prot/ subfolder.\n + * A port to GCC/clang is included in lwIP, if you use these compilers there is nothing to do here. + */ +#ifndef PACK_STRUCT_STRUCT +#if defined(__GNUC__) || defined(__clang__) +#define PACK_STRUCT_STRUCT __attribute__((packed)) +#else +#define PACK_STRUCT_STRUCT +#endif +#endif /* PACK_STRUCT_STRUCT */ + +/** Packed structs support. + * Wraps u32_t and u16_t members.\n + * For examples of packed struct declarations, see include/lwip/prot/ subfolder.\n + * A port to GCC/clang is included in lwIP, if you use these compilers there is nothing to do here. + */ +#ifndef PACK_STRUCT_FIELD +#define PACK_STRUCT_FIELD(x) x +#endif /* PACK_STRUCT_FIELD */ + +/** Packed structs support. + * Wraps u8_t members, where some compilers warn that packing is not necessary.\n + * For examples of packed struct declarations, see include/lwip/prot/ subfolder.\n + * A port to GCC/clang is included in lwIP, if you use these compilers there is nothing to do here. + */ +#ifndef PACK_STRUCT_FLD_8 +#define PACK_STRUCT_FLD_8(x) PACK_STRUCT_FIELD(x) +#endif /* PACK_STRUCT_FLD_8 */ + +/** Packed structs support. + * Wraps members that are packed structs themselves, where some compilers warn that packing is not necessary.\n + * For examples of packed struct declarations, see include/lwip/prot/ subfolder.\n + * A port to GCC/clang is included in lwIP, if you use these compilers there is nothing to do here. + */ +#ifndef PACK_STRUCT_FLD_S +#define PACK_STRUCT_FLD_S(x) PACK_STRUCT_FIELD(x) +#endif /* PACK_STRUCT_FLD_S */ + +/** PACK_STRUCT_USE_INCLUDES==1: Packed structs support using \#include files before and after struct to be packed.\n + * The file included BEFORE the struct is "arch/bpstruct.h".\n + * The file included AFTER the struct is "arch/epstruct.h".\n + * This can be used to implement struct packing on MS Visual C compilers, see + * the Win32 port in the lwIP contrib repository for reference. + * For examples of packed struct declarations, see include/lwip/prot/ subfolder.\n + * A port to GCC/clang is included in lwIP, if you use these compilers there is nothing to do here. + */ +#ifdef __DOXYGEN__ +#define PACK_STRUCT_USE_INCLUDES +#endif + +/** Eliminates compiler warning about unused arguments (GCC -Wextra -Wunused). */ +#ifndef LWIP_UNUSED_ARG +#define LWIP_UNUSED_ARG(x) (void)x +#endif /* LWIP_UNUSED_ARG */ + +/** LWIP_PROVIDE_ERRNO==1: Let lwIP provide ERRNO values and the 'errno' variable. + * If this is disabled, cc.h must either define 'errno', include , + * define LWIP_ERRNO_STDINCLUDE to get included or + * define LWIP_ERRNO_INCLUDE to or equivalent. + */ +#if defined __DOXYGEN__ +#define LWIP_PROVIDE_ERRNO +#endif + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_ARCH_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/autoip.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/autoip.h new file mode 100644 index 0000000000000000000000000000000000000000..1d85bccff8bca5ae9adf463a5fbb1fffc23638cf --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/autoip.h @@ -0,0 +1,99 @@ +/** + * @file + * + * AutoIP Automatic LinkLocal IP Configuration + */ + +/* + * + * Copyright (c) 2007 Dominik Spies + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * Author: Dominik Spies + * + * This is a AutoIP implementation for the lwIP TCP/IP stack. It aims to conform + * with RFC 3927. + * + */ + +#ifndef LWIP_HDR_AUTOIP_H +#define LWIP_HDR_AUTOIP_H + +#include "lwip/opt.h" + +#if LWIP_IPV4 && LWIP_AUTOIP /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/netif.h" +/* #include "lwip/udp.h" */ +#include "lwip/etharp.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** AutoIP Timing */ +#define AUTOIP_TMR_INTERVAL 100 +#define AUTOIP_TICKS_PER_SECOND (1000 / AUTOIP_TMR_INTERVAL) + +/** AutoIP state information per netif */ +struct autoip +{ + /** the currently selected, probed, announced or used LL IP-Address */ + ip4_addr_t llipaddr; + /** current AutoIP state machine state */ + u8_t state; + /** sent number of probes or announces, dependent on state */ + u8_t sent_num; + /** ticks to wait, tick is AUTOIP_TMR_INTERVAL long */ + u16_t ttw; + /** ticks until a conflict can be solved by defending */ + u8_t lastconflict; + /** total number of probed/used Link Local IP-Addresses */ + u8_t tried_llipaddr; +}; + + +void autoip_set_struct(struct netif *netif, struct autoip *autoip); +/** Remove a struct autoip previously set to the netif using autoip_set_struct() */ +#define autoip_remove_struct(netif) do { (netif)->autoip = NULL; } while (0) +err_t autoip_start(struct netif *netif); +err_t autoip_stop(struct netif *netif); +void autoip_arp_reply(struct netif *netif, struct etharp_hdr *hdr); +void autoip_tmr(void); +void autoip_network_changed(struct netif *netif); +u8_t autoip_supplied_address(const struct netif *netif); + +/* for lwIP internal use by ip4.c */ +u8_t autoip_accept_packet(struct netif *netif, const ip4_addr_t *addr); + +#define netif_autoip_data(netif) ((struct autoip*)netif_get_client_data(netif, LWIP_NETIF_CLIENT_DATA_INDEX_AUTOIP)) + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_IPV4 && LWIP_AUTOIP */ + +#endif /* LWIP_HDR_AUTOIP_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/debug.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/debug.h new file mode 100644 index 0000000000000000000000000000000000000000..baa6a40901bcbdcc26f60cba16e4687501060563 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/debug.h @@ -0,0 +1,161 @@ +/** + * @file + * Debug messages infrastructure + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef LWIP_HDR_DEBUG_H +#define LWIP_HDR_DEBUG_H + +#include "lwip/arch.h" +#include "lwip/opt.h" + +/** + * @defgroup debugging_levels LWIP_DBG_MIN_LEVEL and LWIP_DBG_TYPES_ON values + * @ingroup lwip_opts_debugmsg + * @{ + */ + +/** @name Debug level (LWIP_DBG_MIN_LEVEL) + * @{ + */ +/** Debug level: ALL messages*/ +#define LWIP_DBG_LEVEL_ALL 0x00 +/** Debug level: Warnings. bad checksums, dropped packets, ... */ +#define LWIP_DBG_LEVEL_WARNING 0x01 +/** Debug level: Serious. memory allocation failures, ... */ +#define LWIP_DBG_LEVEL_SERIOUS 0x02 +/** Debug level: Severe */ +#define LWIP_DBG_LEVEL_SEVERE 0x03 +/** + * @} + */ + +#define LWIP_DBG_MASK_LEVEL 0x03 +/* compatibility define only */ +#define LWIP_DBG_LEVEL_OFF LWIP_DBG_LEVEL_ALL + +/** @name Enable/disable debug messages completely (LWIP_DBG_TYPES_ON) + * @{ + */ +/** flag for LWIP_DEBUGF to enable that debug message */ +#define LWIP_DBG_ON 0x80U +/** flag for LWIP_DEBUGF to disable that debug message */ +#define LWIP_DBG_OFF 0x00U +/** + * @} + */ + +/** @name Debug message types (LWIP_DBG_TYPES_ON) + * @{ + */ +/** flag for LWIP_DEBUGF indicating a tracing message (to follow program flow) */ +#define LWIP_DBG_TRACE 0x40U +/** flag for LWIP_DEBUGF indicating a state debug message (to follow module states) */ +#define LWIP_DBG_STATE 0x20U +/** flag for LWIP_DEBUGF indicating newly added code, not thoroughly tested yet */ +#define LWIP_DBG_FRESH 0x10U +/** flag for LWIP_DEBUGF to halt after printing this debug message */ +#define LWIP_DBG_HALT 0x08U +/** + * @} + */ + +/** + * @} + */ + +/** + * @defgroup lwip_assertions Assertion handling + * @ingroup lwip_opts_debug + * @{ + */ +/** + * LWIP_NOASSERT: Disable LWIP_ASSERT checks: + * To disable assertions define LWIP_NOASSERT in arch/cc.h. + */ +#ifdef __DOXYGEN__ +#define LWIP_NOASSERT +#undef LWIP_NOASSERT +#endif +/** + * @} + */ + +#ifndef LWIP_NOASSERT +#define LWIP_ASSERT(message, assertion) do { if (!(assertion)) { \ + LWIP_PLATFORM_ASSERT(message); }} while(0) +#else /* LWIP_NOASSERT */ +#define LWIP_ASSERT(message, assertion) +#endif /* LWIP_NOASSERT */ + +#ifndef LWIP_ERROR +#ifndef LWIP_NOASSERT +#define LWIP_PLATFORM_ERROR(message) LWIP_PLATFORM_ASSERT(message) +#elif defined LWIP_DEBUG +#define LWIP_PLATFORM_ERROR(message) LWIP_PLATFORM_DIAG((message)) +#else +#define LWIP_PLATFORM_ERROR(message) +#endif + +/* if "expression" isn't true, then print "message" and execute "handler" expression */ +#define LWIP_ERROR(message, expression, handler) do { if (!(expression)) { \ + LWIP_PLATFORM_ERROR(message); handler;}} while(0) +#endif /* LWIP_ERROR */ + +/** Enable debug message printing, but only if debug message type is enabled + * AND is of correct type AND is at least LWIP_DBG_LEVEL. + */ +#ifdef __DOXYGEN__ +#define LWIP_DEBUG +#undef LWIP_DEBUG +#endif + +#ifdef LWIP_DEBUG +#define LWIP_DEBUGF(debug, message) do { \ + if ( \ + ((debug) & LWIP_DBG_ON) && \ + ((debug) & LWIP_DBG_TYPES_ON) && \ + ((s16_t)((debug) & LWIP_DBG_MASK_LEVEL) >= LWIP_DBG_MIN_LEVEL)) { \ + LWIP_PLATFORM_DIAG(message); \ + if ((debug) & LWIP_DBG_HALT) { \ + while(1); \ + } \ + } \ + } while(0) + +#else /* LWIP_DEBUG */ +#define LWIP_DEBUGF(debug, message) +#endif /* LWIP_DEBUG */ + +#endif /* LWIP_HDR_DEBUG_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/def.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/def.h new file mode 100644 index 0000000000000000000000000000000000000000..dfb266d181b4215ea735235f10f2184f4cee4645 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/def.h @@ -0,0 +1,152 @@ +/** + * @file + * various utility macros + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +/** + * @defgroup perf Performance measurement + * @ingroup sys_layer + * All defines related to this section must not be placed in lwipopts.h, + * but in arch/perf.h! + * Measurement calls made throughout lwip, these can be defined to nothing. + * - PERF_START: start measuring something. + * - PERF_STOP(x): stop measuring something, and record the result. + */ + +#ifndef LWIP_HDR_DEF_H +#define LWIP_HDR_DEF_H + +/* arch.h might define NULL already */ +#include "lwip/arch.h" +#include "lwip/opt.h" +#if LWIP_PERF +#include "arch/perf.h" +#else /* LWIP_PERF */ +#define PERF_START /* null definition */ +#define PERF_STOP(x) /* null definition */ +#endif /* LWIP_PERF */ + +#ifdef __cplusplus +extern "C" { +#endif + +#define LWIP_MAX(x , y) (((x) > (y)) ? (x) : (y)) +#define LWIP_MIN(x , y) (((x) < (y)) ? (x) : (y)) + +/* Get the number of entries in an array ('x' must NOT be a pointer!) */ +#define LWIP_ARRAYSIZE(x) (sizeof(x)/sizeof((x)[0])) + +/** Create u32_t value from bytes */ +#define LWIP_MAKEU32(a,b,c,d) (((u32_t)((a) & 0xff) << 24) | \ + ((u32_t)((b) & 0xff) << 16) | \ + ((u32_t)((c) & 0xff) << 8) | \ + (u32_t)((d) & 0xff)) + +#ifndef NULL +#ifdef __cplusplus +#define NULL 0 +#else +#define NULL ((void *)0) +#endif +#endif + +#if BYTE_ORDER == BIG_ENDIAN +#define lwip_htons(x) ((u16_t)(x)) +#define lwip_ntohs(x) ((u16_t)(x)) +#define lwip_htonl(x) ((u32_t)(x)) +#define lwip_ntohl(x) ((u32_t)(x)) +#define PP_HTONS(x) ((u16_t)(x)) +#define PP_NTOHS(x) ((u16_t)(x)) +#define PP_HTONL(x) ((u32_t)(x)) +#define PP_NTOHL(x) ((u32_t)(x)) +#else /* BYTE_ORDER != BIG_ENDIAN */ +#ifndef lwip_htons +u16_t lwip_htons(u16_t x); +#endif +#define lwip_ntohs(x) lwip_htons(x) + +#ifndef lwip_htonl +u32_t lwip_htonl(u32_t x); +#endif +#define lwip_ntohl(x) lwip_htonl(x) + +/* These macros should be calculated by the preprocessor and are used + with compile-time constants only (so that there is no little-endian + overhead at runtime). */ +#define PP_HTONS(x) ((u16_t)((((x) & (u16_t)0x00ffU) << 8) | (((x) & (u16_t)0xff00U) >> 8))) +#define PP_NTOHS(x) PP_HTONS(x) +#define PP_HTONL(x) ((((x) & (u32_t)0x000000ffUL) << 24) | \ + (((x) & (u32_t)0x0000ff00UL) << 8) | \ + (((x) & (u32_t)0x00ff0000UL) >> 8) | \ + (((x) & (u32_t)0xff000000UL) >> 24)) +#define PP_NTOHL(x) PP_HTONL(x) +#endif /* BYTE_ORDER == BIG_ENDIAN */ + +/* Provide usual function names as macros for users, but this can be turned off */ +#ifndef LWIP_DONT_PROVIDE_BYTEORDER_FUNCTIONS +#define htons(x) lwip_htons(x) +#define ntohs(x) lwip_ntohs(x) +#define htonl(x) lwip_htonl(x) +#define ntohl(x) lwip_ntohl(x) +#endif + +/* Functions that are not available as standard implementations. + * In cc.h, you can #define these to implementations available on + * your platform to save some code bytes if you use these functions + * in your application, too. + */ + +#ifndef lwip_itoa +/* This can be #defined to itoa() or snprintf(result, bufsize, "%d", number) depending on your platform */ +void lwip_itoa(char* result, size_t bufsize, int number); +#endif +#ifndef lwip_strnicmp +/* This can be #defined to strnicmp() or strncasecmp() depending on your platform */ +int lwip_strnicmp(const char* str1, const char* str2, size_t len); +#endif +#ifndef lwip_stricmp +/* This can be #defined to stricmp() or strcasecmp() depending on your platform */ +int lwip_stricmp(const char* str1, const char* str2); +#endif +#ifndef lwip_strnstr +/* This can be #defined to strnstr() depending on your platform */ +char* lwip_strnstr(const char* buffer, const char* token, size_t n); +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_DEF_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/dhcp.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/dhcp.h new file mode 100644 index 0000000000000000000000000000000000000000..c78aa0bafae273dcc8ee15c02d21dc0c1ebff2c5 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/dhcp.h @@ -0,0 +1,139 @@ +/** + * @file + * DHCP client API + */ + +/* + * Copyright (c) 2001-2004 Leon Woestenberg + * Copyright (c) 2001-2004 Axon Digital Design B.V., The Netherlands. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Leon Woestenberg + * + */ +#ifndef LWIP_HDR_DHCP_H +#define LWIP_HDR_DHCP_H + +#include "lwip/opt.h" + +#if LWIP_DHCP /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/netif.h" +#include "lwip/udp.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** period (in seconds) of the application calling dhcp_coarse_tmr() */ +#define DHCP_COARSE_TIMER_SECS 60 +/** period (in milliseconds) of the application calling dhcp_coarse_tmr() */ +#define DHCP_COARSE_TIMER_MSECS (DHCP_COARSE_TIMER_SECS * 1000UL) +/** period (in milliseconds) of the application calling dhcp_fine_tmr() */ +#define DHCP_FINE_TIMER_MSECS 500 + +#define DHCP_BOOT_FILE_LEN 128U + +/* AutoIP cooperation flags (struct dhcp.autoip_coop_state) */ +typedef enum { + DHCP_AUTOIP_COOP_STATE_OFF = 0, + DHCP_AUTOIP_COOP_STATE_ON = 1 +} dhcp_autoip_coop_state_enum_t; + +struct dhcp +{ + /** transaction identifier of last sent request */ + u32_t xid; + /** track PCB allocation state */ + u8_t pcb_allocated; + /** current DHCP state machine state */ + u8_t state; + /** retries of current request */ + u8_t tries; +#if LWIP_DHCP_AUTOIP_COOP + u8_t autoip_coop_state; +#endif + u8_t subnet_mask_given; + + u16_t request_timeout; /* #ticks with period DHCP_FINE_TIMER_SECS for request timeout */ + u16_t t1_timeout; /* #ticks with period DHCP_COARSE_TIMER_SECS for renewal time */ + u16_t t2_timeout; /* #ticks with period DHCP_COARSE_TIMER_SECS for rebind time */ + u16_t t1_renew_time; /* #ticks with period DHCP_COARSE_TIMER_SECS until next renew try */ + u16_t t2_rebind_time; /* #ticks with period DHCP_COARSE_TIMER_SECS until next rebind try */ + u16_t lease_used; /* #ticks with period DHCP_COARSE_TIMER_SECS since last received DHCP ack */ + u16_t t0_timeout; /* #ticks with period DHCP_COARSE_TIMER_SECS for lease time */ + ip_addr_t server_ip_addr; /* dhcp server address that offered this lease (ip_addr_t because passed to UDP) */ + ip4_addr_t offered_ip_addr; + ip4_addr_t offered_sn_mask; + ip4_addr_t offered_gw_addr; + + u32_t offered_t0_lease; /* lease period (in seconds) */ + u32_t offered_t1_renew; /* recommended renew time (usually 50% of lease period) */ + u32_t offered_t2_rebind; /* recommended rebind time (usually 87.5 of lease period) */ +#if LWIP_DHCP_BOOTP_FILE + ip4_addr_t offered_si_addr; + char boot_file_name[DHCP_BOOT_FILE_LEN]; +#endif /* LWIP_DHCP_BOOTPFILE */ +}; + + +void dhcp_set_struct(struct netif *netif, struct dhcp *dhcp); +/** Remove a struct dhcp previously set to the netif using dhcp_set_struct() */ +#define dhcp_remove_struct(netif) netif_set_client_data(netif, LWIP_NETIF_CLIENT_DATA_INDEX_DHCP, NULL) +void dhcp_cleanup(struct netif *netif); +err_t dhcp_start(struct netif *netif); +err_t dhcp_renew(struct netif *netif); +err_t dhcp_release(struct netif *netif); +void dhcp_stop(struct netif *netif); +void dhcp_release_and_stop(struct netif *netif); +void dhcp_inform(struct netif *netif); +void dhcp_network_changed(struct netif *netif); +#if DHCP_DOES_ARP_CHECK +void dhcp_arp_reply(struct netif *netif, const ip4_addr_t *addr); +#endif +u8_t dhcp_supplied_address(const struct netif *netif); +/* to be called every minute */ +void dhcp_coarse_tmr(void); +/* to be called every half second */ +void dhcp_fine_tmr(void); + +#if LWIP_DHCP_GET_NTP_SRV +/** This function must exist, in other to add offered NTP servers to + * the NTP (or SNTP) engine. + * See LWIP_DHCP_MAX_NTP_SERVERS */ +extern void dhcp_set_ntp_servers(u8_t num_ntp_servers, const ip4_addr_t* ntp_server_addrs); +#endif /* LWIP_DHCP_GET_NTP_SRV */ + +#define netif_dhcp_data(netif) ((struct dhcp*)netif_get_client_data(netif, LWIP_NETIF_CLIENT_DATA_INDEX_DHCP)) + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_DHCP */ + +#endif /*LWIP_HDR_DHCP_H*/ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/dhcp6.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/dhcp6.h new file mode 100644 index 0000000000000000000000000000000000000000..5cc4a01591845840de3c696f46bc6ec4188b848e --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/dhcp6.h @@ -0,0 +1,104 @@ +/** + * @file + * + * DHCPv6 client: IPv6 address autoconfiguration as per + * RFC 3315 (stateful DHCPv6) and + * RFC 3736 (stateless DHCPv6). + */ + +/* + * Copyright (c) 2018 Simon Goldschmidt + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Simon Goldschmidt + */ + +#ifndef LWIP_HDR_IP6_DHCP6_H +#define LWIP_HDR_IP6_DHCP6_H + +#include "lwip/opt.h" + +#if LWIP_IPV6_DHCP6 /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/err.h" +#include "lwip/netif.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** period (in milliseconds) of the application calling dhcp6_tmr() */ +#define DHCP6_TIMER_MSECS 500 + +struct dhcp6 +{ + /** transaction identifier of last sent request */ + u32_t xid; + /** track PCB allocation state */ + u8_t pcb_allocated; + /** current DHCPv6 state machine state */ + u8_t state; + /** retries of current request */ + u8_t tries; + /** if request config is triggered while another action is active, this keeps track of it */ + u8_t request_config_pending; + /** #ticks with period DHCP6_TIMER_MSECS for request timeout */ + u16_t request_timeout; +#if LWIP_IPV6_DHCP6_STATEFUL + /* @todo: add more members here to keep track of stateful DHCPv6 data, like lease times */ +#endif /* LWIP_IPV6_DHCP6_STATEFUL */ +}; + +void dhcp6_set_struct(struct netif *netif, struct dhcp6 *dhcp6); +/** Remove a struct dhcp6 previously set to the netif using dhcp6_set_struct() */ +#define dhcp6_remove_struct(netif) netif_set_client_data(netif, LWIP_NETIF_CLIENT_DATA_INDEX_DHCP6, NULL) +void dhcp6_cleanup(struct netif *netif); + +err_t dhcp6_enable_stateful(struct netif *netif); +err_t dhcp6_enable_stateless(struct netif *netif); +void dhcp6_disable(struct netif *netif); + +void dhcp6_tmr(void); + +void dhcp6_nd6_ra_trigger(struct netif *netif, u8_t managed_addr_config, u8_t other_config); + +#if LWIP_DHCP6_GET_NTP_SRV +/** This function must exist, in other to add offered NTP servers to + * the NTP (or SNTP) engine. + * See LWIP_DHCP6_MAX_NTP_SERVERS */ +extern void dhcp6_set_ntp_servers(u8_t num_ntp_servers, const ip_addr_t* ntp_server_addrs); +#endif /* LWIP_DHCP6_GET_NTP_SRV */ + +#define netif_dhcp6_data(netif) ((struct dhcp6*)netif_get_client_data(netif, LWIP_NETIF_CLIENT_DATA_INDEX_DHCP6)) + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_IPV6_DHCP6 */ + +#endif /* LWIP_HDR_IP6_DHCP6_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/dns.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/dns.h new file mode 100644 index 0000000000000000000000000000000000000000..091341544f3f5616684a2055dcd54737d6fd2ae8 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/dns.h @@ -0,0 +1,131 @@ +/** + * @file + * DNS API + */ + +/** + * lwip DNS resolver header file. + + * Author: Jim Pettinato + * April 2007 + + * ported from uIP resolv.c Copyright (c) 2002-2003, Adam Dunkels. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef LWIP_HDR_DNS_H +#define LWIP_HDR_DNS_H + +#include "lwip/opt.h" + +#if LWIP_DNS + +#include "lwip/ip_addr.h" +#include "lwip/err.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** DNS timer period */ +#define DNS_TMR_INTERVAL 1000 + +/* DNS resolve types: */ +#define LWIP_DNS_ADDRTYPE_IPV4 0 +#define LWIP_DNS_ADDRTYPE_IPV6 1 +#define LWIP_DNS_ADDRTYPE_IPV4_IPV6 2 /* try to resolve IPv4 first, try IPv6 if IPv4 fails only */ +#define LWIP_DNS_ADDRTYPE_IPV6_IPV4 3 /* try to resolve IPv6 first, try IPv4 if IPv6 fails only */ +#if LWIP_IPV4 && LWIP_IPV6 +#ifndef LWIP_DNS_ADDRTYPE_DEFAULT +#define LWIP_DNS_ADDRTYPE_DEFAULT LWIP_DNS_ADDRTYPE_IPV4_IPV6 +#endif +#elif LWIP_IPV4 +#define LWIP_DNS_ADDRTYPE_DEFAULT LWIP_DNS_ADDRTYPE_IPV4 +#else +#define LWIP_DNS_ADDRTYPE_DEFAULT LWIP_DNS_ADDRTYPE_IPV6 +#endif + +#if DNS_LOCAL_HOSTLIST +/** struct used for local host-list */ +struct local_hostlist_entry { + /** static hostname */ + const char *name; + /** static host address in network byteorder */ + ip_addr_t addr; + struct local_hostlist_entry *next; +}; +#define DNS_LOCAL_HOSTLIST_ELEM(name, addr_init) {name, addr_init, NULL} +#if DNS_LOCAL_HOSTLIST_IS_DYNAMIC +#ifndef DNS_LOCAL_HOSTLIST_MAX_NAMELEN +#define DNS_LOCAL_HOSTLIST_MAX_NAMELEN DNS_MAX_NAME_LENGTH +#endif +#define LOCALHOSTLIST_ELEM_SIZE ((sizeof(struct local_hostlist_entry) + DNS_LOCAL_HOSTLIST_MAX_NAMELEN + 1)) +#endif /* DNS_LOCAL_HOSTLIST_IS_DYNAMIC */ +#endif /* DNS_LOCAL_HOSTLIST */ + +#if LWIP_IPV4 +extern const ip_addr_t dns_mquery_v4group; +#endif /* LWIP_IPV4 */ +#if LWIP_IPV6 +extern const ip_addr_t dns_mquery_v6group; +#endif /* LWIP_IPV6 */ + +/** Callback which is invoked when a hostname is found. + * A function of this type must be implemented by the application using the DNS resolver. + * @param name pointer to the name that was looked up. + * @param ipaddr pointer to an ip_addr_t containing the IP address of the hostname, + * or NULL if the name could not be found (or on any other error). + * @param callback_arg a user-specified callback argument passed to dns_gethostbyname +*/ +typedef void (*dns_found_callback)(const char *name, const ip_addr_t *ipaddr, void *callback_arg); + +void dns_init(void); +void dns_tmr(void); +void dns_setserver(u8_t numdns, const ip_addr_t *dnsserver); +const ip_addr_t* dns_getserver(u8_t numdns); +err_t dns_gethostbyname(const char *hostname, ip_addr_t *addr, + dns_found_callback found, void *callback_arg); +err_t dns_gethostbyname_addrtype(const char *hostname, ip_addr_t *addr, + dns_found_callback found, void *callback_arg, + u8_t dns_addrtype); + + +#if DNS_LOCAL_HOSTLIST +size_t dns_local_iterate(dns_found_callback iterator_fn, void *iterator_arg); +err_t dns_local_lookup(const char *hostname, ip_addr_t *addr, u8_t dns_addrtype); +#if DNS_LOCAL_HOSTLIST_IS_DYNAMIC +int dns_local_removehost(const char *hostname, const ip_addr_t *addr); +err_t dns_local_addhost(const char *hostname, const ip_addr_t *addr); +#endif /* DNS_LOCAL_HOSTLIST_IS_DYNAMIC */ +#endif /* DNS_LOCAL_HOSTLIST */ + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_DNS */ + +#endif /* LWIP_HDR_DNS_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/err.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/err.h new file mode 100644 index 0000000000000000000000000000000000000000..887d9b3fd812508e03fac3acde643100d7f0a56b --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/err.h @@ -0,0 +1,117 @@ +/** + * @file + * lwIP Error codes + */ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef LWIP_HDR_ERR_H +#define LWIP_HDR_ERR_H + +#include "lwip/opt.h" +#include "lwip/arch.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @defgroup infrastructure_errors Error codes + * @ingroup infrastructure + * @{ + */ + +/** Definitions for error constants. */ +typedef enum { +/** No error, everything OK. */ + ERR_OK = 0, +/** Out of memory error. */ + ERR_MEM = -1, +/** Buffer error. */ + ERR_BUF = -2, +/** Timeout. */ + ERR_TIMEOUT = -3, +/** Routing problem. */ + ERR_RTE = -4, +/** Operation in progress */ + ERR_INPROGRESS = -5, +/** Illegal value. */ + ERR_VAL = -6, +/** Operation would block. */ + ERR_WOULDBLOCK = -7, +/** Address in use. */ + ERR_USE = -8, +/** Already connecting. */ + ERR_ALREADY = -9, +/** Conn already established.*/ + ERR_ISCONN = -10, +/** Not connected. */ + ERR_CONN = -11, +/** Low-level netif error */ + ERR_IF = -12, + +/** Connection aborted. */ + ERR_ABRT = -13, +/** Connection reset. */ + ERR_RST = -14, +/** Connection closed. */ + ERR_CLSD = -15, +/** Illegal argument. */ + ERR_ARG = -16 +} err_enum_t; + +/** Define LWIP_ERR_T in cc.h if you want to use + * a different type for your platform (must be signed). */ +#ifdef LWIP_ERR_T +typedef LWIP_ERR_T err_t; +#else /* LWIP_ERR_T */ +typedef s8_t err_t; +#endif /* LWIP_ERR_T*/ + +/** + * @} + */ + +#ifdef LWIP_DEBUG +extern const char *lwip_strerr(err_t err); +#else +#define lwip_strerr(x) "" +#endif /* LWIP_DEBUG */ + +#if !NO_SYS +int err_to_errno(err_t err); +#endif /* !NO_SYS */ + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_ERR_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/errno.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/errno.h new file mode 100644 index 0000000000000000000000000000000000000000..48d6b539d82773c6c781082857814afd9e88f93e --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/errno.h @@ -0,0 +1,198 @@ +/** + * @file + * Posix Errno defines + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef LWIP_HDR_ERRNO_H +#define LWIP_HDR_ERRNO_H + +#include "lwip/opt.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef LWIP_PROVIDE_ERRNO + +#define EPERM 1 /* Operation not permitted */ +#define ENOENT 2 /* No such file or directory */ +#define ESRCH 3 /* No such process */ +#define EINTR 4 /* Interrupted system call */ +#define EIO 5 /* I/O error */ +#define ENXIO 6 /* No such device or address */ +#define E2BIG 7 /* Arg list too long */ +#define ENOEXEC 8 /* Exec format error */ +#define EBADF 9 /* Bad file number */ +#define ECHILD 10 /* No child processes */ +#define EAGAIN 11 /* Try again */ +#define ENOMEM 12 /* Out of memory */ +#define EACCES 13 /* Permission denied */ +#define EFAULT 14 /* Bad address */ +#define ENOTBLK 15 /* Block device required */ +#define EBUSY 16 /* Device or resource busy */ +#define EEXIST 17 /* File exists */ +#define EXDEV 18 /* Cross-device link */ +#define ENODEV 19 /* No such device */ +#define ENOTDIR 20 /* Not a directory */ +#define EISDIR 21 /* Is a directory */ +#define EINVAL 22 /* Invalid argument */ +#define ENFILE 23 /* File table overflow */ +#define EMFILE 24 /* Too many open files */ +#define ENOTTY 25 /* Not a typewriter */ +#define ETXTBSY 26 /* Text file busy */ +#define EFBIG 27 /* File too large */ +#define ENOSPC 28 /* No space left on device */ +#define ESPIPE 29 /* Illegal seek */ +#define EROFS 30 /* Read-only file system */ +#define EMLINK 31 /* Too many links */ +#define EPIPE 32 /* Broken pipe */ +#define EDOM 33 /* Math argument out of domain of func */ +#define ERANGE 34 /* Math result not representable */ +#define EDEADLK 35 /* Resource deadlock would occur */ +#define ENAMETOOLONG 36 /* File name too long */ +#define ENOLCK 37 /* No record locks available */ +#define ENOSYS 38 /* Function not implemented */ +#define ENOTEMPTY 39 /* Directory not empty */ +#define ELOOP 40 /* Too many symbolic links encountered */ +#define EWOULDBLOCK EAGAIN /* Operation would block */ +#define ENOMSG 42 /* No message of desired type */ +#define EIDRM 43 /* Identifier removed */ +#define ECHRNG 44 /* Channel number out of range */ +#define EL2NSYNC 45 /* Level 2 not synchronized */ +#define EL3HLT 46 /* Level 3 halted */ +#define EL3RST 47 /* Level 3 reset */ +#define ELNRNG 48 /* Link number out of range */ +#define EUNATCH 49 /* Protocol driver not attached */ +#define ENOCSI 50 /* No CSI structure available */ +#define EL2HLT 51 /* Level 2 halted */ +#define EBADE 52 /* Invalid exchange */ +#define EBADR 53 /* Invalid request descriptor */ +#define EXFULL 54 /* Exchange full */ +#define ENOANO 55 /* No anode */ +#define EBADRQC 56 /* Invalid request code */ +#define EBADSLT 57 /* Invalid slot */ + +#define EDEADLOCK EDEADLK + +#define EBFONT 59 /* Bad font file format */ +#define ENOSTR 60 /* Device not a stream */ +#define ENODATA 61 /* No data available */ +#define ETIME 62 /* Timer expired */ +#define ENOSR 63 /* Out of streams resources */ +#define ENONET 64 /* Machine is not on the network */ +#define ENOPKG 65 /* Package not installed */ +#define EREMOTE 66 /* Object is remote */ +#define ENOLINK 67 /* Link has been severed */ +#define EADV 68 /* Advertise error */ +#define ESRMNT 69 /* Srmount error */ +#define ECOMM 70 /* Communication error on send */ +#define EPROTO 71 /* Protocol error */ +#define EMULTIHOP 72 /* Multihop attempted */ +#define EDOTDOT 73 /* RFS specific error */ +#define EBADMSG 74 /* Not a data message */ +#define EOVERFLOW 75 /* Value too large for defined data type */ +#define ENOTUNIQ 76 /* Name not unique on network */ +#define EBADFD 77 /* File descriptor in bad state */ +#define EREMCHG 78 /* Remote address changed */ +#define ELIBACC 79 /* Can not access a needed shared library */ +#define ELIBBAD 80 /* Accessing a corrupted shared library */ +#define ELIBSCN 81 /* .lib section in a.out corrupted */ +#define ELIBMAX 82 /* Attempting to link in too many shared libraries */ +#define ELIBEXEC 83 /* Cannot exec a shared library directly */ +#define EILSEQ 84 /* Illegal byte sequence */ +#define ERESTART 85 /* Interrupted system call should be restarted */ +#define ESTRPIPE 86 /* Streams pipe error */ +#define EUSERS 87 /* Too many users */ +#define ENOTSOCK 88 /* Socket operation on non-socket */ +#define EDESTADDRREQ 89 /* Destination address required */ +#define EMSGSIZE 90 /* Message too long */ +#define EPROTOTYPE 91 /* Protocol wrong type for socket */ +#define ENOPROTOOPT 92 /* Protocol not available */ +#define EPROTONOSUPPORT 93 /* Protocol not supported */ +#define ESOCKTNOSUPPORT 94 /* Socket type not supported */ +#define EOPNOTSUPP 95 /* Operation not supported on transport endpoint */ +#define EPFNOSUPPORT 96 /* Protocol family not supported */ +#define EAFNOSUPPORT 97 /* Address family not supported by protocol */ +#define EADDRINUSE 98 /* Address already in use */ +#define EADDRNOTAVAIL 99 /* Cannot assign requested address */ +#define ENETDOWN 100 /* Network is down */ +#define ENETUNREACH 101 /* Network is unreachable */ +#define ENETRESET 102 /* Network dropped connection because of reset */ +#define ECONNABORTED 103 /* Software caused connection abort */ +#define ECONNRESET 104 /* Connection reset by peer */ +#define ENOBUFS 105 /* No buffer space available */ +#define EISCONN 106 /* Transport endpoint is already connected */ +#define ENOTCONN 107 /* Transport endpoint is not connected */ +#define ESHUTDOWN 108 /* Cannot send after transport endpoint shutdown */ +#define ETOOMANYREFS 109 /* Too many references: cannot splice */ +#define ETIMEDOUT 110 /* Connection timed out */ +#define ECONNREFUSED 111 /* Connection refused */ +#define EHOSTDOWN 112 /* Host is down */ +#define EHOSTUNREACH 113 /* No route to host */ +#define EALREADY 114 /* Operation already in progress */ +#define EINPROGRESS 115 /* Operation now in progress */ +#define ESTALE 116 /* Stale NFS file handle */ +#define EUCLEAN 117 /* Structure needs cleaning */ +#define ENOTNAM 118 /* Not a XENIX named type file */ +#define ENAVAIL 119 /* No XENIX semaphores available */ +#define EISNAM 120 /* Is a named type file */ +#define EREMOTEIO 121 /* Remote I/O error */ +#define EDQUOT 122 /* Quota exceeded */ + +#define ENOMEDIUM 123 /* No medium found */ +#define EMEDIUMTYPE 124 /* Wrong medium type */ + +#ifndef errno +extern int errno; +#endif + +#else /* LWIP_PROVIDE_ERRNO */ + +/* Define LWIP_ERRNO_STDINCLUDE if you want to include here */ +#ifdef LWIP_ERRNO_STDINCLUDE +#include +#else /* LWIP_ERRNO_STDINCLUDE */ +/* Define LWIP_ERRNO_INCLUDE to an equivalent of to include the error defines here */ +#ifdef LWIP_ERRNO_INCLUDE +#include LWIP_ERRNO_INCLUDE +#endif /* LWIP_ERRNO_INCLUDE */ +#endif /* LWIP_ERRNO_STDINCLUDE */ + +#endif /* LWIP_PROVIDE_ERRNO */ + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_ERRNO_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/etharp.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/etharp.h new file mode 100644 index 0000000000000000000000000000000000000000..2036b2464a1cb530f3e221aff290c77e7149f096 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/etharp.h @@ -0,0 +1,105 @@ +/** + * @file + * Ethernet output function - handles OUTGOING ethernet level traffic, implements + * ARP resolving. + * To be used in most low-level netif implementations + */ + +/* + * Copyright (c) 2001-2003 Swedish Institute of Computer Science. + * Copyright (c) 2003-2004 Leon Woestenberg + * Copyright (c) 2003-2004 Axon Digital Design B.V., The Netherlands. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#ifndef LWIP_HDR_NETIF_ETHARP_H +#define LWIP_HDR_NETIF_ETHARP_H + +#include "lwip/opt.h" + +#if LWIP_ARP || LWIP_ETHERNET /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/pbuf.h" +#include "lwip/ip4_addr.h" +#include "lwip/netif.h" +#include "lwip/ip4.h" +#include "lwip/prot/ethernet.h" + +#if LWIP_IPV4 && LWIP_ARP /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/prot/etharp.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** 1 seconds period */ +#define ARP_TMR_INTERVAL 1000 + +#if ARP_QUEUEING +/** struct for queueing outgoing packets for unknown address + * defined here to be accessed by memp.h + */ +struct etharp_q_entry { + struct etharp_q_entry *next; + struct pbuf *p; +}; +#endif /* ARP_QUEUEING */ + +#define etharp_init() /* Compatibility define, no init needed. */ +void etharp_tmr(void); +ssize_t etharp_find_addr(struct netif *netif, const ip4_addr_t *ipaddr, + struct eth_addr **eth_ret, const ip4_addr_t **ip_ret); +int etharp_get_entry(size_t i, ip4_addr_t **ipaddr, struct netif **netif, struct eth_addr **eth_ret); +err_t etharp_output(struct netif *netif, struct pbuf *q, const ip4_addr_t *ipaddr); +err_t etharp_query(struct netif *netif, const ip4_addr_t *ipaddr, struct pbuf *q); +err_t etharp_request(struct netif *netif, const ip4_addr_t *ipaddr); +/** For Ethernet network interfaces, we might want to send "gratuitous ARP"; + * this is an ARP packet sent by a node in order to spontaneously cause other + * nodes to update an entry in their ARP cache. + * From RFC 3220 "IP Mobility Support for IPv4" section 4.6. */ +#define etharp_gratuitous(netif) etharp_request((netif), netif_ip4_addr(netif)) +void etharp_cleanup_netif(struct netif *netif); + +#if ETHARP_SUPPORT_STATIC_ENTRIES +err_t etharp_add_static_entry(const ip4_addr_t *ipaddr, struct eth_addr *ethaddr); +err_t etharp_remove_static_entry(const ip4_addr_t *ipaddr); +#endif /* ETHARP_SUPPORT_STATIC_ENTRIES */ + +void etharp_input(struct pbuf *p, struct netif *netif); + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_IPV4 && LWIP_ARP */ +#endif /* LWIP_ARP || LWIP_ETHERNET */ + +#endif /* LWIP_HDR_NETIF_ETHARP_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/ethip6.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/ethip6.h new file mode 100644 index 0000000000000000000000000000000000000000..5e88dffd05f1b102402d7244932b0b3589f9cf3e --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/ethip6.h @@ -0,0 +1,68 @@ +/** + * @file + * + * Ethernet output for IPv6. Uses ND tables for link-layer addressing. + */ + +/* + * Copyright (c) 2010 Inico Technologies Ltd. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Ivan Delamer + * + * + * Please coordinate changes and requests with Ivan Delamer + * + */ + +#ifndef LWIP_HDR_ETHIP6_H +#define LWIP_HDR_ETHIP6_H + +#include "lwip/opt.h" + +#if LWIP_IPV6 && LWIP_ETHERNET /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/pbuf.h" +#include "lwip/ip6.h" +#include "lwip/ip6_addr.h" +#include "lwip/netif.h" + + +#ifdef __cplusplus +extern "C" { +#endif + + +err_t ethip6_output(struct netif *netif, struct pbuf *q, const ip6_addr_t *ip6addr); + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_IPV6 && LWIP_ETHERNET */ + +#endif /* LWIP_HDR_ETHIP6_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/icmp.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/icmp.h new file mode 100644 index 0000000000000000000000000000000000000000..f5a31fd4c070982638b38ee525f26ec35d3ca377 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/icmp.h @@ -0,0 +1,110 @@ +/** + * @file + * ICMP API + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef LWIP_HDR_ICMP_H +#define LWIP_HDR_ICMP_H + +#include "lwip/opt.h" +#include "lwip/pbuf.h" +#include "lwip/ip_addr.h" +#include "lwip/netif.h" +#include "lwip/prot/icmp.h" + +#if LWIP_IPV6 && LWIP_ICMP6 +#include "lwip/icmp6.h" +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/** ICMP destination unreachable codes */ +enum icmp_dur_type { + /** net unreachable */ + ICMP_DUR_NET = 0, + /** host unreachable */ + ICMP_DUR_HOST = 1, + /** protocol unreachable */ + ICMP_DUR_PROTO = 2, + /** port unreachable */ + ICMP_DUR_PORT = 3, + /** fragmentation needed and DF set */ + ICMP_DUR_FRAG = 4, + /** source route failed */ + ICMP_DUR_SR = 5 +}; + +/** ICMP time exceeded codes */ +enum icmp_te_type { + /** time to live exceeded in transit */ + ICMP_TE_TTL = 0, + /** fragment reassembly time exceeded */ + ICMP_TE_FRAG = 1 +}; + +#if LWIP_IPV4 && LWIP_ICMP /* don't build if not configured for use in lwipopts.h */ + +void icmp_input(struct pbuf *p, struct netif *inp); +void icmp_dest_unreach(struct pbuf *p, enum icmp_dur_type t); +void icmp_time_exceeded(struct pbuf *p, enum icmp_te_type t); + +#endif /* LWIP_IPV4 && LWIP_ICMP */ + +#if LWIP_IPV4 && LWIP_IPV6 +#if LWIP_ICMP && LWIP_ICMP6 +#define icmp_port_unreach(isipv6, pbuf) ((isipv6) ? \ + icmp6_dest_unreach(pbuf, ICMP6_DUR_PORT) : \ + icmp_dest_unreach(pbuf, ICMP_DUR_PORT)) +#elif LWIP_ICMP +#define icmp_port_unreach(isipv6, pbuf) do{ if(!(isipv6)) { icmp_dest_unreach(pbuf, ICMP_DUR_PORT);}}while(0) +#elif LWIP_ICMP6 +#define icmp_port_unreach(isipv6, pbuf) do{ if(isipv6) { icmp6_dest_unreach(pbuf, ICMP6_DUR_PORT);}}while(0) +#else +#define icmp_port_unreach(isipv6, pbuf) +#endif +#elif LWIP_IPV6 && LWIP_ICMP6 +#define icmp_port_unreach(isipv6, pbuf) icmp6_dest_unreach(pbuf, ICMP6_DUR_PORT) +#elif LWIP_IPV4 && LWIP_ICMP +#define icmp_port_unreach(isipv6, pbuf) icmp_dest_unreach(pbuf, ICMP_DUR_PORT) +#else /* (LWIP_IPV6 && LWIP_ICMP6) || (LWIP_IPV4 && LWIP_ICMP) */ +#define icmp_port_unreach(isipv6, pbuf) +#endif /* (LWIP_IPV6 && LWIP_ICMP6) || (LWIP_IPV4 && LWIP_ICMP) LWIP_IPV4*/ + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_ICMP_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/icmp6.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/icmp6.h new file mode 100644 index 0000000000000000000000000000000000000000..0ccb78994d4f2cd8f6dc1557c8dd735f5cec142f --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/icmp6.h @@ -0,0 +1,72 @@ +/** + * @file + * + * IPv6 version of ICMP, as per RFC 4443. + */ + +/* + * Copyright (c) 2010 Inico Technologies Ltd. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Ivan Delamer + * + * + * Please coordinate changes and requests with Ivan Delamer + * + */ +#ifndef LWIP_HDR_ICMP6_H +#define LWIP_HDR_ICMP6_H + +#include "lwip/opt.h" +#include "lwip/pbuf.h" +#include "lwip/ip6_addr.h" +#include "lwip/netif.h" +#include "lwip/prot/icmp6.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#if LWIP_ICMP6 && LWIP_IPV6 /* don't build if not configured for use in lwipopts.h */ + +void icmp6_input(struct pbuf *p, struct netif *inp); +void icmp6_dest_unreach(struct pbuf *p, enum icmp6_dur_code c); +void icmp6_packet_too_big(struct pbuf *p, u32_t mtu); +void icmp6_time_exceeded(struct pbuf *p, enum icmp6_te_code c); +void icmp6_time_exceeded_with_addrs(struct pbuf *p, enum icmp6_te_code c, + const ip6_addr_t *src_addr, const ip6_addr_t *dest_addr); +void icmp6_param_problem(struct pbuf *p, enum icmp6_pp_code c, const void *pointer); + +#endif /* LWIP_ICMP6 && LWIP_IPV6 */ + + +#ifdef __cplusplus +} +#endif + + +#endif /* LWIP_HDR_ICMP6_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/if_api.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/if_api.h new file mode 100644 index 0000000000000000000000000000000000000000..39017abd325e515d2a4833b64ef3b65366a33d61 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/if_api.h @@ -0,0 +1,68 @@ +/** + * @file + * Interface Identification APIs from: + * RFC 3493: Basic Socket Interface Extensions for IPv6 + * Section 4: Interface Identification + */ + +/* + * Copyright (c) 2017 Joel Cunningham, Garmin International, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Joel Cunningham + * + */ +#ifndef LWIP_HDR_IF_H +#define LWIP_HDR_IF_H + +#include "lwip/opt.h" + +#if LWIP_SOCKET /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/netif.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define IF_NAMESIZE NETIF_NAMESIZE + +char * lwip_if_indextoname(unsigned int ifindex, char *ifname); +unsigned int lwip_if_nametoindex(const char *ifname); + +#if LWIP_COMPAT_SOCKETS +#define if_indextoname(ifindex, ifname) lwip_if_indextoname(ifindex,ifname) +#define if_nametoindex(ifname) lwip_if_nametoindex(ifname) +#endif /* LWIP_COMPAT_SOCKETS */ + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_SOCKET */ + +#endif /* LWIP_HDR_IF_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/igmp.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/igmp.h new file mode 100644 index 0000000000000000000000000000000000000000..ffd80e680c328061cdbab6916556ad2bf610a720 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/igmp.h @@ -0,0 +1,115 @@ +/** + * @file + * IGMP API + */ + +/* + * Copyright (c) 2002 CITEL Technologies Ltd. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of CITEL Technologies Ltd nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY CITEL TECHNOLOGIES AND CONTRIBUTORS ``AS IS'' + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL CITEL TECHNOLOGIES OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is a contribution to the lwIP TCP/IP stack. + * The Swedish Institute of Computer Science and Adam Dunkels + * are specifically granted permission to redistribute this + * source code. +*/ + +#ifndef LWIP_HDR_IGMP_H +#define LWIP_HDR_IGMP_H + +#include "lwip/opt.h" +#include "lwip/ip_addr.h" +#include "lwip/netif.h" +#include "lwip/pbuf.h" + +#if LWIP_IPV4 && LWIP_IGMP /* don't build if not configured for use in lwipopts.h */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* IGMP timer */ +#define IGMP_TMR_INTERVAL 100 /* Milliseconds */ +#define IGMP_V1_DELAYING_MEMBER_TMR (1000/IGMP_TMR_INTERVAL) +#define IGMP_JOIN_DELAYING_MEMBER_TMR (500 /IGMP_TMR_INTERVAL) + +/* Compatibility defines (don't use for new code) */ +#define IGMP_DEL_MAC_FILTER NETIF_DEL_MAC_FILTER +#define IGMP_ADD_MAC_FILTER NETIF_ADD_MAC_FILTER + +/** + * igmp group structure - there is + * a list of groups for each interface + * these should really be linked from the interface, but + * if we keep them separate we will not affect the lwip original code + * too much + * + * There will be a group for the all systems group address but this + * will not run the state machine as it is used to kick off reports + * from all the other groups + */ +struct igmp_group { + /** next link */ + struct igmp_group *next; + /** multicast address */ + ip4_addr_t group_address; + /** signifies we were the last person to report */ + u8_t last_reporter_flag; + /** current state of the group */ + u8_t group_state; + /** timer for reporting, negative is OFF */ + u16_t timer; + /** counter of simultaneous uses */ + u8_t use; +}; + +/* Prototypes */ +void igmp_init(void); +err_t igmp_start(struct netif *netif); +err_t igmp_stop(struct netif *netif); +void igmp_report_groups(struct netif *netif); +struct igmp_group *igmp_lookfor_group(struct netif *ifp, const ip4_addr_t *addr); +void igmp_input(struct pbuf *p, struct netif *inp, const ip4_addr_t *dest); +err_t igmp_joingroup(const ip4_addr_t *ifaddr, const ip4_addr_t *groupaddr); +err_t igmp_joingroup_netif(struct netif *netif, const ip4_addr_t *groupaddr); +err_t igmp_leavegroup(const ip4_addr_t *ifaddr, const ip4_addr_t *groupaddr); +err_t igmp_leavegroup_netif(struct netif *netif, const ip4_addr_t *groupaddr); +void igmp_tmr(void); + +/** @ingroup igmp + * Get list head of IGMP groups for netif. + * Note: The allsystems group IP is contained in the list as first entry. + * @see @ref netif_set_igmp_mac_filter() + */ +#define netif_igmp_data(netif) ((struct igmp_group *)netif_get_client_data(netif, LWIP_NETIF_CLIENT_DATA_INDEX_IGMP)) + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_IPV4 && LWIP_IGMP */ + +#endif /* LWIP_HDR_IGMP_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/inet.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/inet.h new file mode 100644 index 0000000000000000000000000000000000000000..2982a0f4b1abbde83f020fee6e97d96f53a6f02d --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/inet.h @@ -0,0 +1,169 @@ +/** + * @file + * This file (together with sockets.h) aims to provide structs and functions from + * - arpa/inet.h + * - netinet/in.h + * + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef LWIP_HDR_INET_H +#define LWIP_HDR_INET_H + +#include "lwip/opt.h" +#include "lwip/def.h" +#include "lwip/ip_addr.h" +#include "lwip/ip6_addr.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* If your port already typedef's in_addr_t, define IN_ADDR_T_DEFINED + to prevent this code from redefining it. */ +#if !defined(in_addr_t) && !defined(IN_ADDR_T_DEFINED) +typedef u32_t in_addr_t; +#endif + +struct in_addr { + in_addr_t s_addr; +}; + +struct in6_addr { + union { + u32_t u32_addr[4]; + u8_t u8_addr[16]; + } un; +#define s6_addr un.u8_addr +}; + +/** 255.255.255.255 */ +#define INADDR_NONE IPADDR_NONE +/** 127.0.0.1 */ +#define INADDR_LOOPBACK IPADDR_LOOPBACK +/** 0.0.0.0 */ +#define INADDR_ANY IPADDR_ANY +/** 255.255.255.255 */ +#define INADDR_BROADCAST IPADDR_BROADCAST + +/** This macro can be used to initialize a variable of type struct in6_addr + to the IPv6 wildcard address. */ +#define IN6ADDR_ANY_INIT {{{0,0,0,0}}} +/** This macro can be used to initialize a variable of type struct in6_addr + to the IPv6 loopback address. */ +#define IN6ADDR_LOOPBACK_INIT {{{0,0,0,PP_HTONL(1)}}} +/** This variable is initialized by the system to contain the wildcard IPv6 address. */ +extern const struct in6_addr in6addr_any; + +/* Definitions of the bits in an (IPv4) Internet address integer. + + On subnets, host and network parts are found according to + the subnet mask, not these masks. */ +#define IN_CLASSA(a) IP_CLASSA(a) +#define IN_CLASSA_NET IP_CLASSA_NET +#define IN_CLASSA_NSHIFT IP_CLASSA_NSHIFT +#define IN_CLASSA_HOST IP_CLASSA_HOST +#define IN_CLASSA_MAX IP_CLASSA_MAX + +#define IN_CLASSB(b) IP_CLASSB(b) +#define IN_CLASSB_NET IP_CLASSB_NET +#define IN_CLASSB_NSHIFT IP_CLASSB_NSHIFT +#define IN_CLASSB_HOST IP_CLASSB_HOST +#define IN_CLASSB_MAX IP_CLASSB_MAX + +#define IN_CLASSC(c) IP_CLASSC(c) +#define IN_CLASSC_NET IP_CLASSC_NET +#define IN_CLASSC_NSHIFT IP_CLASSC_NSHIFT +#define IN_CLASSC_HOST IP_CLASSC_HOST +#define IN_CLASSC_MAX IP_CLASSC_MAX + +#define IN_CLASSD(d) IP_CLASSD(d) +#define IN_CLASSD_NET IP_CLASSD_NET /* These ones aren't really */ +#define IN_CLASSD_NSHIFT IP_CLASSD_NSHIFT /* net and host fields, but */ +#define IN_CLASSD_HOST IP_CLASSD_HOST /* routing needn't know. */ +#define IN_CLASSD_MAX IP_CLASSD_MAX + +#define IN_MULTICAST(a) IP_MULTICAST(a) + +#define IN_EXPERIMENTAL(a) IP_EXPERIMENTAL(a) +#define IN_BADCLASS(a) IP_BADCLASS(a) + +#define IN_LOOPBACKNET IP_LOOPBACKNET + + +#ifndef INET_ADDRSTRLEN +#define INET_ADDRSTRLEN IP4ADDR_STRLEN_MAX +#endif +#if LWIP_IPV6 +#ifndef INET6_ADDRSTRLEN +#define INET6_ADDRSTRLEN IP6ADDR_STRLEN_MAX +#endif +#endif + +#if LWIP_IPV4 + +#define inet_addr_from_ip4addr(target_inaddr, source_ipaddr) ((target_inaddr)->s_addr = ip4_addr_get_u32(source_ipaddr)) +#define inet_addr_to_ip4addr(target_ipaddr, source_inaddr) (ip4_addr_set_u32(target_ipaddr, (source_inaddr)->s_addr)) + +/* directly map this to the lwip internal functions */ +#define inet_addr(cp) ipaddr_addr(cp) +#define inet_aton(cp, addr) ip4addr_aton(cp, (ip4_addr_t*)addr) +#define inet_ntoa(addr) ip4addr_ntoa((const ip4_addr_t*)&(addr)) +#define inet_ntoa_r(addr, buf, buflen) ip4addr_ntoa_r((const ip4_addr_t*)&(addr), buf, buflen) + +#endif /* LWIP_IPV4 */ + +#if LWIP_IPV6 +#define inet6_addr_from_ip6addr(target_in6addr, source_ip6addr) {(target_in6addr)->un.u32_addr[0] = (source_ip6addr)->addr[0]; \ + (target_in6addr)->un.u32_addr[1] = (source_ip6addr)->addr[1]; \ + (target_in6addr)->un.u32_addr[2] = (source_ip6addr)->addr[2]; \ + (target_in6addr)->un.u32_addr[3] = (source_ip6addr)->addr[3];} +#define inet6_addr_to_ip6addr(target_ip6addr, source_in6addr) {(target_ip6addr)->addr[0] = (source_in6addr)->un.u32_addr[0]; \ + (target_ip6addr)->addr[1] = (source_in6addr)->un.u32_addr[1]; \ + (target_ip6addr)->addr[2] = (source_in6addr)->un.u32_addr[2]; \ + (target_ip6addr)->addr[3] = (source_in6addr)->un.u32_addr[3]; \ + ip6_addr_clear_zone(target_ip6addr);} + +/* directly map this to the lwip internal functions */ +#define inet6_aton(cp, addr) ip6addr_aton(cp, (ip6_addr_t*)addr) +#define inet6_ntoa(addr) ip6addr_ntoa((const ip6_addr_t*)&(addr)) +#define inet6_ntoa_r(addr, buf, buflen) ip6addr_ntoa_r((const ip6_addr_t*)&(addr), buf, buflen) + +#endif /* LWIP_IPV6 */ + + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_INET_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/inet_chksum.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/inet_chksum.h new file mode 100644 index 0000000000000000000000000000000000000000..76893ef52f9db24d55c52c42e7906418aaeb7306 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/inet_chksum.h @@ -0,0 +1,105 @@ +/** + * @file + * IP checksum calculation functions + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef LWIP_HDR_INET_CHKSUM_H +#define LWIP_HDR_INET_CHKSUM_H + +#include "lwip/opt.h" + +#include "lwip/pbuf.h" +#include "lwip/ip_addr.h" + +/** Swap the bytes in an u16_t: much like lwip_htons() for little-endian */ +#ifndef SWAP_BYTES_IN_WORD +#define SWAP_BYTES_IN_WORD(w) (((w) & 0xff) << 8) | (((w) & 0xff00) >> 8) +#endif /* SWAP_BYTES_IN_WORD */ + +/** Split an u32_t in two u16_ts and add them up */ +#ifndef FOLD_U32T +#define FOLD_U32T(u) ((u32_t)(((u) >> 16) + ((u) & 0x0000ffffUL))) +#endif + +#if LWIP_CHECKSUM_ON_COPY +/** Function-like macro: same as MEMCPY but returns the checksum of copied data + as u16_t */ +# ifndef LWIP_CHKSUM_COPY +# define LWIP_CHKSUM_COPY(dst, src, len) lwip_chksum_copy(dst, src, len) +# ifndef LWIP_CHKSUM_COPY_ALGORITHM +# define LWIP_CHKSUM_COPY_ALGORITHM 1 +# endif /* LWIP_CHKSUM_COPY_ALGORITHM */ +# else /* LWIP_CHKSUM_COPY */ +# define LWIP_CHKSUM_COPY_ALGORITHM 0 +# endif /* LWIP_CHKSUM_COPY */ +#else /* LWIP_CHECKSUM_ON_COPY */ +# define LWIP_CHKSUM_COPY_ALGORITHM 0 +#endif /* LWIP_CHECKSUM_ON_COPY */ + +#ifdef __cplusplus +extern "C" { +#endif + +u16_t inet_chksum(const void *dataptr, u16_t len); +u16_t inet_chksum_pbuf(struct pbuf *p); +#if LWIP_CHKSUM_COPY_ALGORITHM +u16_t lwip_chksum_copy(void *dst, const void *src, u16_t len); +#endif /* LWIP_CHKSUM_COPY_ALGORITHM */ + +#if LWIP_IPV4 +u16_t inet_chksum_pseudo(struct pbuf *p, u8_t proto, u16_t proto_len, + const ip4_addr_t *src, const ip4_addr_t *dest); +u16_t inet_chksum_pseudo_partial(struct pbuf *p, u8_t proto, + u16_t proto_len, u16_t chksum_len, const ip4_addr_t *src, const ip4_addr_t *dest); +#endif /* LWIP_IPV4 */ + +#if LWIP_IPV6 +u16_t ip6_chksum_pseudo(struct pbuf *p, u8_t proto, u16_t proto_len, + const ip6_addr_t *src, const ip6_addr_t *dest); +u16_t ip6_chksum_pseudo_partial(struct pbuf *p, u8_t proto, u16_t proto_len, + u16_t chksum_len, const ip6_addr_t *src, const ip6_addr_t *dest); +#endif /* LWIP_IPV6 */ + + +u16_t ip_chksum_pseudo(struct pbuf *p, u8_t proto, u16_t proto_len, + const ip_addr_t *src, const ip_addr_t *dest); +u16_t ip_chksum_pseudo_partial(struct pbuf *p, u8_t proto, u16_t proto_len, + u16_t chksum_len, const ip_addr_t *src, const ip_addr_t *dest); + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_INET_H */ + diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/init.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/init.h new file mode 100644 index 0000000000000000000000000000000000000000..a149be1848881d25c5a09d07bb719c7a44eab300 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/init.h @@ -0,0 +1,100 @@ +/** + * @file + * lwIP initialization API + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef LWIP_HDR_INIT_H +#define LWIP_HDR_INIT_H + +#include "lwip/opt.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @defgroup lwip_version Version + * @ingroup lwip + * @{ + */ + +/** X.x.x: Major version of the stack */ +#define LWIP_VERSION_MAJOR 2 +/** x.X.x: Minor version of the stack */ +#define LWIP_VERSION_MINOR 1 +/** x.x.X: Revision of the stack */ +#define LWIP_VERSION_REVISION 2 +/** For release candidates, this is set to 1..254 + * For official releases, this is set to 255 (LWIP_RC_RELEASE) + * For development versions (Git), this is set to 0 (LWIP_RC_DEVELOPMENT) */ +#define LWIP_VERSION_RC LWIP_RC_RELEASE + +/** LWIP_VERSION_RC is set to LWIP_RC_RELEASE for official releases */ +#define LWIP_RC_RELEASE 255 +/** LWIP_VERSION_RC is set to LWIP_RC_DEVELOPMENT for Git versions */ +#define LWIP_RC_DEVELOPMENT 0 + +#define LWIP_VERSION_IS_RELEASE (LWIP_VERSION_RC == LWIP_RC_RELEASE) +#define LWIP_VERSION_IS_DEVELOPMENT (LWIP_VERSION_RC == LWIP_RC_DEVELOPMENT) +#define LWIP_VERSION_IS_RC ((LWIP_VERSION_RC != LWIP_RC_RELEASE) && (LWIP_VERSION_RC != LWIP_RC_DEVELOPMENT)) + +/* Some helper defines to get a version string */ +#define LWIP_VERSTR2(x) #x +#define LWIP_VERSTR(x) LWIP_VERSTR2(x) +#if LWIP_VERSION_IS_RELEASE +#define LWIP_VERSION_STRING_SUFFIX "" +#elif LWIP_VERSION_IS_DEVELOPMENT +#define LWIP_VERSION_STRING_SUFFIX "d" +#else +#define LWIP_VERSION_STRING_SUFFIX "rc" LWIP_VERSTR(LWIP_VERSION_RC) +#endif + +/** Provides the version of the stack */ +#define LWIP_VERSION ((LWIP_VERSION_MAJOR) << 24 | (LWIP_VERSION_MINOR) << 16 | \ + (LWIP_VERSION_REVISION) << 8 | (LWIP_VERSION_RC)) +/** Provides the version of the stack as string */ +#define LWIP_VERSION_STRING LWIP_VERSTR(LWIP_VERSION_MAJOR) "." LWIP_VERSTR(LWIP_VERSION_MINOR) "." LWIP_VERSTR(LWIP_VERSION_REVISION) LWIP_VERSION_STRING_SUFFIX + +/** + * @} + */ + +/* Modules initialization */ +void lwip_init(void); + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_INIT_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/ip.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/ip.h new file mode 100644 index 0000000000000000000000000000000000000000..653c3b2f4feea145a20151372f57cf3acc9a58bf --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/ip.h @@ -0,0 +1,330 @@ +/** + * @file + * IP API + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef LWIP_HDR_IP_H +#define LWIP_HDR_IP_H + +#include "lwip/opt.h" + +#include "lwip/def.h" +#include "lwip/pbuf.h" +#include "lwip/ip_addr.h" +#include "lwip/err.h" +#include "lwip/netif.h" +#include "lwip/ip4.h" +#include "lwip/ip6.h" +#include "lwip/prot/ip.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* This is passed as the destination address to ip_output_if (not + to ip_output), meaning that an IP header already is constructed + in the pbuf. This is used when TCP retransmits. */ +#define LWIP_IP_HDRINCL NULL + +/** pbufs passed to IP must have a ref-count of 1 as their payload pointer + gets altered as the packet is passed down the stack */ +#ifndef LWIP_IP_CHECK_PBUF_REF_COUNT_FOR_TX +#define LWIP_IP_CHECK_PBUF_REF_COUNT_FOR_TX(p) LWIP_ASSERT("p->ref == 1", (p)->ref == 1) +#endif + +#if LWIP_NETIF_USE_HINTS +#define IP_PCB_NETIFHINT ;struct netif_hint netif_hints +#else /* LWIP_NETIF_USE_HINTS */ +#define IP_PCB_NETIFHINT +#endif /* LWIP_NETIF_USE_HINTS */ + +/** This is the common part of all PCB types. It needs to be at the + beginning of a PCB type definition. It is located here so that + changes to this common part are made in one location instead of + having to change all PCB structs. */ +#define IP_PCB \ + /* ip addresses in network byte order */ \ + ip_addr_t local_ip; \ + ip_addr_t remote_ip; \ + /* Bound netif index */ \ + u8_t netif_idx; \ + /* Socket options */ \ + u8_t so_options; \ + /* Type Of Service */ \ + u8_t tos; \ + /* Time To Live */ \ + u8_t ttl \ + /* link layer address resolution hint */ \ + IP_PCB_NETIFHINT + +struct ip_pcb { + /* Common members of all PCB types */ + IP_PCB; +}; + +/* + * Option flags per-socket. These are the same like SO_XXX in sockets.h + */ +#define SOF_REUSEADDR 0x04U /* allow local address reuse */ +#define SOF_KEEPALIVE 0x08U /* keep connections alive */ +#define SOF_BROADCAST 0x20U /* permit to send and to receive broadcast messages (see IP_SOF_BROADCAST option) */ + +/* These flags are inherited (e.g. from a listen-pcb to a connection-pcb): */ +#define SOF_INHERITED (SOF_REUSEADDR|SOF_KEEPALIVE) + +/** Global variables of this module, kept in a struct for efficient access using base+index. */ +struct ip_globals +{ + /** The interface that accepted the packet for the current callback invocation. */ + struct netif *current_netif; + /** The interface that received the packet for the current callback invocation. */ + struct netif *current_input_netif; +#if LWIP_IPV4 + /** Header of the input packet currently being processed. */ + const struct ip_hdr *current_ip4_header; +#endif /* LWIP_IPV4 */ +#if LWIP_IPV6 + /** Header of the input IPv6 packet currently being processed. */ + struct ip6_hdr *current_ip6_header; +#endif /* LWIP_IPV6 */ + /** Total header length of current_ip4/6_header (i.e. after this, the UDP/TCP header starts) */ + u16_t current_ip_header_tot_len; + /** Source IP address of current_header */ + ip_addr_t current_iphdr_src; + /** Destination IP address of current_header */ + ip_addr_t current_iphdr_dest; +}; +extern struct ip_globals ip_data; + + +/** Get the interface that accepted the current packet. + * This may or may not be the receiving netif, depending on your netif/network setup. + * This function must only be called from a receive callback (udp_recv, + * raw_recv, tcp_accept). It will return NULL otherwise. */ +#define ip_current_netif() (ip_data.current_netif) +/** Get the interface that received the current packet. + * This function must only be called from a receive callback (udp_recv, + * raw_recv, tcp_accept). It will return NULL otherwise. */ +#define ip_current_input_netif() (ip_data.current_input_netif) +/** Total header length of ip(6)_current_header() (i.e. after this, the UDP/TCP header starts) */ +#define ip_current_header_tot_len() (ip_data.current_ip_header_tot_len) +/** Source IP address of current_header */ +#define ip_current_src_addr() (&ip_data.current_iphdr_src) +/** Destination IP address of current_header */ +#define ip_current_dest_addr() (&ip_data.current_iphdr_dest) + +#if LWIP_IPV4 && LWIP_IPV6 +/** Get the IPv4 header of the current packet. + * This function must only be called from a receive callback (udp_recv, + * raw_recv, tcp_accept). It will return NULL otherwise. */ +#define ip4_current_header() ip_data.current_ip4_header +/** Get the IPv6 header of the current packet. + * This function must only be called from a receive callback (udp_recv, + * raw_recv, tcp_accept). It will return NULL otherwise. */ +#define ip6_current_header() ((const struct ip6_hdr*)(ip_data.current_ip6_header)) +/** Returns TRUE if the current IP input packet is IPv6, FALSE if it is IPv4 */ +#define ip_current_is_v6() (ip6_current_header() != NULL) +/** Source IPv6 address of current_header */ +#define ip6_current_src_addr() (ip_2_ip6(&ip_data.current_iphdr_src)) +/** Destination IPv6 address of current_header */ +#define ip6_current_dest_addr() (ip_2_ip6(&ip_data.current_iphdr_dest)) +/** Get the transport layer protocol */ +#define ip_current_header_proto() (ip_current_is_v6() ? \ + IP6H_NEXTH(ip6_current_header()) :\ + IPH_PROTO(ip4_current_header())) +/** Get the transport layer header */ +#define ip_next_header_ptr() ((const void*)((ip_current_is_v6() ? \ + (const u8_t*)ip6_current_header() : (const u8_t*)ip4_current_header()) + ip_current_header_tot_len())) + +/** Source IP4 address of current_header */ +#define ip4_current_src_addr() (ip_2_ip4(&ip_data.current_iphdr_src)) +/** Destination IP4 address of current_header */ +#define ip4_current_dest_addr() (ip_2_ip4(&ip_data.current_iphdr_dest)) + +#elif LWIP_IPV4 /* LWIP_IPV4 && LWIP_IPV6 */ + +/** Get the IPv4 header of the current packet. + * This function must only be called from a receive callback (udp_recv, + * raw_recv, tcp_accept). It will return NULL otherwise. */ +#define ip4_current_header() ip_data.current_ip4_header +/** Always returns FALSE when only supporting IPv4 only */ +#define ip_current_is_v6() 0 +/** Get the transport layer protocol */ +#define ip_current_header_proto() IPH_PROTO(ip4_current_header()) +/** Get the transport layer header */ +#define ip_next_header_ptr() ((const void*)((const u8_t*)ip4_current_header() + ip_current_header_tot_len())) +/** Source IP4 address of current_header */ +#define ip4_current_src_addr() (&ip_data.current_iphdr_src) +/** Destination IP4 address of current_header */ +#define ip4_current_dest_addr() (&ip_data.current_iphdr_dest) + +#elif LWIP_IPV6 /* LWIP_IPV4 && LWIP_IPV6 */ + +/** Get the IPv6 header of the current packet. + * This function must only be called from a receive callback (udp_recv, + * raw_recv, tcp_accept). It will return NULL otherwise. */ +#define ip6_current_header() ((const struct ip6_hdr*)(ip_data.current_ip6_header)) +/** Always returns TRUE when only supporting IPv6 only */ +#define ip_current_is_v6() 1 +/** Get the transport layer protocol */ +#define ip_current_header_proto() IP6H_NEXTH(ip6_current_header()) +/** Get the transport layer header */ +#define ip_next_header_ptr() ((const void*)(((const u8_t*)ip6_current_header()) + ip_current_header_tot_len())) +/** Source IP6 address of current_header */ +#define ip6_current_src_addr() (&ip_data.current_iphdr_src) +/** Destination IP6 address of current_header */ +#define ip6_current_dest_addr() (&ip_data.current_iphdr_dest) + +#endif /* LWIP_IPV6 */ + +/** Union source address of current_header */ +#define ip_current_src_addr() (&ip_data.current_iphdr_src) +/** Union destination address of current_header */ +#define ip_current_dest_addr() (&ip_data.current_iphdr_dest) + +/** Gets an IP pcb option (SOF_* flags) */ +#define ip_get_option(pcb, opt) ((pcb)->so_options & (opt)) +/** Sets an IP pcb option (SOF_* flags) */ +#define ip_set_option(pcb, opt) ((pcb)->so_options = (u8_t)((pcb)->so_options | (opt))) +/** Resets an IP pcb option (SOF_* flags) */ +#define ip_reset_option(pcb, opt) ((pcb)->so_options = (u8_t)((pcb)->so_options & ~(opt))) + +#if LWIP_IPV4 && LWIP_IPV6 +/** + * @ingroup ip + * Output IP packet, netif is selected by source address + */ +#define ip_output(p, src, dest, ttl, tos, proto) \ + (IP_IS_V6(dest) ? \ + ip6_output(p, ip_2_ip6(src), ip_2_ip6(dest), ttl, tos, proto) : \ + ip4_output(p, ip_2_ip4(src), ip_2_ip4(dest), ttl, tos, proto)) +/** + * @ingroup ip + * Output IP packet to specified interface + */ +#define ip_output_if(p, src, dest, ttl, tos, proto, netif) \ + (IP_IS_V6(dest) ? \ + ip6_output_if(p, ip_2_ip6(src), ip_2_ip6(dest), ttl, tos, proto, netif) : \ + ip4_output_if(p, ip_2_ip4(src), ip_2_ip4(dest), ttl, tos, proto, netif)) +/** + * @ingroup ip + * Output IP packet to interface specifying source address + */ +#define ip_output_if_src(p, src, dest, ttl, tos, proto, netif) \ + (IP_IS_V6(dest) ? \ + ip6_output_if_src(p, ip_2_ip6(src), ip_2_ip6(dest), ttl, tos, proto, netif) : \ + ip4_output_if_src(p, ip_2_ip4(src), ip_2_ip4(dest), ttl, tos, proto, netif)) +/** Output IP packet that already includes an IP header. */ +#define ip_output_if_hdrincl(p, src, dest, netif) \ + (IP_IS_V6(dest) ? \ + ip6_output_if(p, ip_2_ip6(src), LWIP_IP_HDRINCL, 0, 0, 0, netif) : \ + ip4_output_if(p, ip_2_ip4(src), LWIP_IP_HDRINCL, 0, 0, 0, netif)) +/** Output IP packet with netif_hint */ +#define ip_output_hinted(p, src, dest, ttl, tos, proto, netif_hint) \ + (IP_IS_V6(dest) ? \ + ip6_output_hinted(p, ip_2_ip6(src), ip_2_ip6(dest), ttl, tos, proto, netif_hint) : \ + ip4_output_hinted(p, ip_2_ip4(src), ip_2_ip4(dest), ttl, tos, proto, netif_hint)) +/** + * @ingroup ip + * Get netif for address combination. See \ref ip6_route and \ref ip4_route + */ +#define ip_route(src, dest) \ + (IP_IS_V6(dest) ? \ + ip6_route(ip_2_ip6(src), ip_2_ip6(dest)) : \ + ip4_route_src(ip_2_ip4(src), ip_2_ip4(dest))) +/** + * @ingroup ip + * Get netif for IP. + */ +#define ip_netif_get_local_ip(netif, dest) (IP_IS_V6(dest) ? \ + ip6_netif_get_local_ip(netif, ip_2_ip6(dest)) : \ + ip4_netif_get_local_ip(netif)) +#define ip_debug_print(is_ipv6, p) ((is_ipv6) ? ip6_debug_print(p) : ip4_debug_print(p)) + +err_t ip_input(struct pbuf *p, struct netif *inp); + +#elif LWIP_IPV4 /* LWIP_IPV4 && LWIP_IPV6 */ + +#define ip_output(p, src, dest, ttl, tos, proto) \ + ip4_output(p, src, dest, ttl, tos, proto) +#define ip_output_if(p, src, dest, ttl, tos, proto, netif) \ + ip4_output_if(p, src, dest, ttl, tos, proto, netif) +#define ip_output_if_src(p, src, dest, ttl, tos, proto, netif) \ + ip4_output_if_src(p, src, dest, ttl, tos, proto, netif) +#define ip_output_hinted(p, src, dest, ttl, tos, proto, netif_hint) \ + ip4_output_hinted(p, src, dest, ttl, tos, proto, netif_hint) +#define ip_output_if_hdrincl(p, src, dest, netif) \ + ip4_output_if(p, src, LWIP_IP_HDRINCL, 0, 0, 0, netif) +#define ip_route(src, dest) \ + ip4_route_src(src, dest) +#define ip_netif_get_local_ip(netif, dest) \ + ip4_netif_get_local_ip(netif) +#define ip_debug_print(is_ipv6, p) ip4_debug_print(p) + +#define ip_input ip4_input + +#elif LWIP_IPV6 /* LWIP_IPV4 && LWIP_IPV6 */ + +#define ip_output(p, src, dest, ttl, tos, proto) \ + ip6_output(p, src, dest, ttl, tos, proto) +#define ip_output_if(p, src, dest, ttl, tos, proto, netif) \ + ip6_output_if(p, src, dest, ttl, tos, proto, netif) +#define ip_output_if_src(p, src, dest, ttl, tos, proto, netif) \ + ip6_output_if_src(p, src, dest, ttl, tos, proto, netif) +#define ip_output_hinted(p, src, dest, ttl, tos, proto, netif_hint) \ + ip6_output_hinted(p, src, dest, ttl, tos, proto, netif_hint) +#define ip_output_if_hdrincl(p, src, dest, netif) \ + ip6_output_if(p, src, LWIP_IP_HDRINCL, 0, 0, 0, netif) +#define ip_route(src, dest) \ + ip6_route(src, dest) +#define ip_netif_get_local_ip(netif, dest) \ + ip6_netif_get_local_ip(netif, dest) +#define ip_debug_print(is_ipv6, p) ip6_debug_print(p) + +#define ip_input ip6_input + +#endif /* LWIP_IPV6 */ + +#define ip_route_get_local_ip(src, dest, netif, ipaddr) do { \ + (netif) = ip_route(src, dest); \ + (ipaddr) = ip_netif_get_local_ip(netif, dest); \ +}while(0) + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_IP_H */ + + diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/ip4.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/ip4.h new file mode 100644 index 0000000000000000000000000000000000000000..fd35a33692f9da81f5af60c799b0658be8a6a232 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/ip4.h @@ -0,0 +1,111 @@ +/** + * @file + * IPv4 API + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef LWIP_HDR_IP4_H +#define LWIP_HDR_IP4_H + +#include "lwip/opt.h" + +#if LWIP_IPV4 + +#include "lwip/def.h" +#include "lwip/pbuf.h" +#include "lwip/ip4_addr.h" +#include "lwip/err.h" +#include "lwip/netif.h" +#include "lwip/prot/ip4.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef LWIP_HOOK_IP4_ROUTE_SRC +#define LWIP_IPV4_SRC_ROUTING 1 +#else +#define LWIP_IPV4_SRC_ROUTING 0 +#endif + +/** Currently, the function ip_output_if_opt() is only used with IGMP */ +#define IP_OPTIONS_SEND (LWIP_IPV4 && LWIP_IGMP) + +#define ip_init() /* Compatibility define, no init needed. */ +struct netif *ip4_route(const ip4_addr_t *dest); +#if LWIP_IPV4_SRC_ROUTING +struct netif *ip4_route_src(const ip4_addr_t *src, const ip4_addr_t *dest); +#else /* LWIP_IPV4_SRC_ROUTING */ +#define ip4_route_src(src, dest) ip4_route(dest) +#endif /* LWIP_IPV4_SRC_ROUTING */ +err_t ip4_input(struct pbuf *p, struct netif *inp); +err_t ip4_output(struct pbuf *p, const ip4_addr_t *src, const ip4_addr_t *dest, + u8_t ttl, u8_t tos, u8_t proto); +err_t ip4_output_if(struct pbuf *p, const ip4_addr_t *src, const ip4_addr_t *dest, + u8_t ttl, u8_t tos, u8_t proto, struct netif *netif); +err_t ip4_output_if_src(struct pbuf *p, const ip4_addr_t *src, const ip4_addr_t *dest, + u8_t ttl, u8_t tos, u8_t proto, struct netif *netif); +#if LWIP_NETIF_USE_HINTS +err_t ip4_output_hinted(struct pbuf *p, const ip4_addr_t *src, const ip4_addr_t *dest, + u8_t ttl, u8_t tos, u8_t proto, struct netif_hint *netif_hint); +#endif /* LWIP_NETIF_USE_HINTS */ +#if IP_OPTIONS_SEND +err_t ip4_output_if_opt(struct pbuf *p, const ip4_addr_t *src, const ip4_addr_t *dest, + u8_t ttl, u8_t tos, u8_t proto, struct netif *netif, void *ip_options, + u16_t optlen); +err_t ip4_output_if_opt_src(struct pbuf *p, const ip4_addr_t *src, const ip4_addr_t *dest, + u8_t ttl, u8_t tos, u8_t proto, struct netif *netif, void *ip_options, + u16_t optlen); +#endif /* IP_OPTIONS_SEND */ + +#if LWIP_MULTICAST_TX_OPTIONS +void ip4_set_default_multicast_netif(struct netif* default_multicast_netif); +#endif /* LWIP_MULTICAST_TX_OPTIONS */ + +#define ip4_netif_get_local_ip(netif) (((netif) != NULL) ? netif_ip_addr4(netif) : NULL) + +#if IP_DEBUG +void ip4_debug_print(struct pbuf *p); +#else +#define ip4_debug_print(p) +#endif /* IP_DEBUG */ + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_IPV4 */ + +#endif /* LWIP_HDR_IP_H */ + + diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/ip4_addr.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/ip4_addr.h new file mode 100644 index 0000000000000000000000000000000000000000..f244c4f54f2540304e8fa7ed529f3f0d10eae1ea --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/ip4_addr.h @@ -0,0 +1,216 @@ +/** + * @file + * IPv4 address API + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef LWIP_HDR_IP4_ADDR_H +#define LWIP_HDR_IP4_ADDR_H + +#include "lwip/opt.h" +#include "lwip/def.h" + +#if LWIP_IPV4 + +#ifdef __cplusplus +extern "C" { +#endif + +/** This is the aligned version of ip4_addr_t, + used as local variable, on the stack, etc. */ +struct ip4_addr { + u32_t addr; +}; + +/** ip4_addr_t uses a struct for convenience only, so that the same defines can + * operate both on ip4_addr_t as well as on ip4_addr_p_t. */ +typedef struct ip4_addr ip4_addr_t; + +/* Forward declaration to not include netif.h */ +struct netif; + +/** 255.255.255.255 */ +#define IPADDR_NONE ((u32_t)0xffffffffUL) +/** 127.0.0.1 */ +#define IPADDR_LOOPBACK ((u32_t)0x7f000001UL) +/** 0.0.0.0 */ +#define IPADDR_ANY ((u32_t)0x00000000UL) +/** 255.255.255.255 */ +#define IPADDR_BROADCAST ((u32_t)0xffffffffUL) + +/* Definitions of the bits in an Internet address integer. + + On subnets, host and network parts are found according to + the subnet mask, not these masks. */ +#define IP_CLASSA(a) ((((u32_t)(a)) & 0x80000000UL) == 0) +#define IP_CLASSA_NET 0xff000000 +#define IP_CLASSA_NSHIFT 24 +#define IP_CLASSA_HOST (0xffffffff & ~IP_CLASSA_NET) +#define IP_CLASSA_MAX 128 + +#define IP_CLASSB(a) ((((u32_t)(a)) & 0xc0000000UL) == 0x80000000UL) +#define IP_CLASSB_NET 0xffff0000 +#define IP_CLASSB_NSHIFT 16 +#define IP_CLASSB_HOST (0xffffffff & ~IP_CLASSB_NET) +#define IP_CLASSB_MAX 65536 + +#define IP_CLASSC(a) ((((u32_t)(a)) & 0xe0000000UL) == 0xc0000000UL) +#define IP_CLASSC_NET 0xffffff00 +#define IP_CLASSC_NSHIFT 8 +#define IP_CLASSC_HOST (0xffffffff & ~IP_CLASSC_NET) + +#define IP_CLASSD(a) (((u32_t)(a) & 0xf0000000UL) == 0xe0000000UL) +#define IP_CLASSD_NET 0xf0000000 /* These ones aren't really */ +#define IP_CLASSD_NSHIFT 28 /* net and host fields, but */ +#define IP_CLASSD_HOST 0x0fffffff /* routing needn't know. */ +#define IP_MULTICAST(a) IP_CLASSD(a) + +#define IP_EXPERIMENTAL(a) (((u32_t)(a) & 0xf0000000UL) == 0xf0000000UL) +#define IP_BADCLASS(a) (((u32_t)(a) & 0xf0000000UL) == 0xf0000000UL) + +#define IP_LOOPBACKNET 127 /* official! */ + +/** Set an IP address given by the four byte-parts */ +#define IP4_ADDR(ipaddr, a,b,c,d) (ipaddr)->addr = PP_HTONL(LWIP_MAKEU32(a,b,c,d)) + +/** Copy IP address - faster than ip4_addr_set: no NULL check */ +#define ip4_addr_copy(dest, src) ((dest).addr = (src).addr) +/** Safely copy one IP address to another (src may be NULL) */ +#define ip4_addr_set(dest, src) ((dest)->addr = \ + ((src) == NULL ? 0 : \ + (src)->addr)) +/** Set complete address to zero */ +#define ip4_addr_set_zero(ipaddr) ((ipaddr)->addr = 0) +/** Set address to IPADDR_ANY (no need for lwip_htonl()) */ +#define ip4_addr_set_any(ipaddr) ((ipaddr)->addr = IPADDR_ANY) +/** Set address to loopback address */ +#define ip4_addr_set_loopback(ipaddr) ((ipaddr)->addr = PP_HTONL(IPADDR_LOOPBACK)) +/** Check if an address is in the loopback region */ +#define ip4_addr_isloopback(ipaddr) (((ipaddr)->addr & PP_HTONL(IP_CLASSA_NET)) == PP_HTONL(((u32_t)IP_LOOPBACKNET) << 24)) +/** Safely copy one IP address to another and change byte order + * from host- to network-order. */ +#define ip4_addr_set_hton(dest, src) ((dest)->addr = \ + ((src) == NULL ? 0:\ + lwip_htonl((src)->addr))) +/** IPv4 only: set the IP address given as an u32_t */ +#define ip4_addr_set_u32(dest_ipaddr, src_u32) ((dest_ipaddr)->addr = (src_u32)) +/** IPv4 only: get the IP address as an u32_t */ +#define ip4_addr_get_u32(src_ipaddr) ((src_ipaddr)->addr) + +/** Get the network address by combining host address with netmask */ +#define ip4_addr_get_network(target, host, netmask) do { ((target)->addr = ((host)->addr) & ((netmask)->addr)); } while(0) + +/** + * Determine if two address are on the same network. + * + * @arg addr1 IP address 1 + * @arg addr2 IP address 2 + * @arg mask network identifier mask + * @return !0 if the network identifiers of both address match + */ +#define ip4_addr_netcmp(addr1, addr2, mask) (((addr1)->addr & \ + (mask)->addr) == \ + ((addr2)->addr & \ + (mask)->addr)) +#define ip4_addr_cmp(addr1, addr2) ((addr1)->addr == (addr2)->addr) + +#define ip4_addr_isany_val(addr1) ((addr1).addr == IPADDR_ANY) +#define ip4_addr_isany(addr1) ((addr1) == NULL || ip4_addr_isany_val(*(addr1))) + +#define ip4_addr_isbroadcast(addr1, netif) ip4_addr_isbroadcast_u32((addr1)->addr, netif) +u8_t ip4_addr_isbroadcast_u32(u32_t addr, const struct netif *netif); + +#define ip_addr_netmask_valid(netmask) ip4_addr_netmask_valid((netmask)->addr) +u8_t ip4_addr_netmask_valid(u32_t netmask); + +#define ip4_addr_ismulticast(addr1) (((addr1)->addr & PP_HTONL(0xf0000000UL)) == PP_HTONL(0xe0000000UL)) + +#define ip4_addr_islinklocal(addr1) (((addr1)->addr & PP_HTONL(0xffff0000UL)) == PP_HTONL(0xa9fe0000UL)) + +#define ip4_addr_debug_print_parts(debug, a, b, c, d) \ + LWIP_DEBUGF(debug, ("%" U16_F ".%" U16_F ".%" U16_F ".%" U16_F, a, b, c, d)) +#define ip4_addr_debug_print(debug, ipaddr) \ + ip4_addr_debug_print_parts(debug, \ + (u16_t)((ipaddr) != NULL ? ip4_addr1_16(ipaddr) : 0), \ + (u16_t)((ipaddr) != NULL ? ip4_addr2_16(ipaddr) : 0), \ + (u16_t)((ipaddr) != NULL ? ip4_addr3_16(ipaddr) : 0), \ + (u16_t)((ipaddr) != NULL ? ip4_addr4_16(ipaddr) : 0)) +#define ip4_addr_debug_print_val(debug, ipaddr) \ + ip4_addr_debug_print_parts(debug, \ + ip4_addr1_16_val(ipaddr), \ + ip4_addr2_16_val(ipaddr), \ + ip4_addr3_16_val(ipaddr), \ + ip4_addr4_16_val(ipaddr)) + +/* Get one byte from the 4-byte address */ +#define ip4_addr_get_byte(ipaddr, idx) (((const u8_t*)(&(ipaddr)->addr))[idx]) +#define ip4_addr1(ipaddr) ip4_addr_get_byte(ipaddr, 0) +#define ip4_addr2(ipaddr) ip4_addr_get_byte(ipaddr, 1) +#define ip4_addr3(ipaddr) ip4_addr_get_byte(ipaddr, 2) +#define ip4_addr4(ipaddr) ip4_addr_get_byte(ipaddr, 3) +/* Get one byte from the 4-byte address, but argument is 'ip4_addr_t', + * not a pointer */ +#define ip4_addr_get_byte_val(ipaddr, idx) ((u8_t)(((ipaddr).addr >> (idx * 8)) & 0xff)) +#define ip4_addr1_val(ipaddr) ip4_addr_get_byte_val(ipaddr, 0) +#define ip4_addr2_val(ipaddr) ip4_addr_get_byte_val(ipaddr, 1) +#define ip4_addr3_val(ipaddr) ip4_addr_get_byte_val(ipaddr, 2) +#define ip4_addr4_val(ipaddr) ip4_addr_get_byte_val(ipaddr, 3) +/* These are cast to u16_t, with the intent that they are often arguments + * to printf using the U16_F format from cc.h. */ +#define ip4_addr1_16(ipaddr) ((u16_t)ip4_addr1(ipaddr)) +#define ip4_addr2_16(ipaddr) ((u16_t)ip4_addr2(ipaddr)) +#define ip4_addr3_16(ipaddr) ((u16_t)ip4_addr3(ipaddr)) +#define ip4_addr4_16(ipaddr) ((u16_t)ip4_addr4(ipaddr)) +#define ip4_addr1_16_val(ipaddr) ((u16_t)ip4_addr1_val(ipaddr)) +#define ip4_addr2_16_val(ipaddr) ((u16_t)ip4_addr2_val(ipaddr)) +#define ip4_addr3_16_val(ipaddr) ((u16_t)ip4_addr3_val(ipaddr)) +#define ip4_addr4_16_val(ipaddr) ((u16_t)ip4_addr4_val(ipaddr)) + +#define IP4ADDR_STRLEN_MAX 16 + +/** For backwards compatibility */ +#define ip_ntoa(ipaddr) ipaddr_ntoa(ipaddr) + +u32_t ipaddr_addr(const char *cp); +int ip4addr_aton(const char *cp, ip4_addr_t *addr); +/** returns ptr to static buffer; not reentrant! */ +char *ip4addr_ntoa(const ip4_addr_t *addr); +char *ip4addr_ntoa_r(const ip4_addr_t *addr, char *buf, int buflen); + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_IPV4 */ + +#endif /* LWIP_HDR_IP_ADDR_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/ip4_frag.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/ip4_frag.h new file mode 100644 index 0000000000000000000000000000000000000000..ed5bf14a31c3381bc3f2398f08d332d5d1af19ae --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/ip4_frag.h @@ -0,0 +1,100 @@ +/** + * @file + * IP fragmentation/reassembly + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Jani Monoses + * + */ + +#ifndef LWIP_HDR_IP4_FRAG_H +#define LWIP_HDR_IP4_FRAG_H + +#include "lwip/opt.h" +#include "lwip/err.h" +#include "lwip/pbuf.h" +#include "lwip/netif.h" +#include "lwip/ip_addr.h" +#include "lwip/ip.h" + +#if LWIP_IPV4 + +#ifdef __cplusplus +extern "C" { +#endif + +#if IP_REASSEMBLY +/* The IP reassembly timer interval in milliseconds. */ +#define IP_TMR_INTERVAL 1000 + +/** IP reassembly helper struct. + * This is exported because memp needs to know the size. + */ +struct ip_reassdata { + struct ip_reassdata *next; + struct pbuf *p; + struct ip_hdr iphdr; + u16_t datagram_len; + u8_t flags; + u8_t timer; +}; + +void ip_reass_init(void); +void ip_reass_tmr(void); +struct pbuf * ip4_reass(struct pbuf *p); +#endif /* IP_REASSEMBLY */ + +#if IP_FRAG +#if !LWIP_NETIF_TX_SINGLE_PBUF +#ifndef LWIP_PBUF_CUSTOM_REF_DEFINED +#define LWIP_PBUF_CUSTOM_REF_DEFINED +/** A custom pbuf that holds a reference to another pbuf, which is freed + * when this custom pbuf is freed. This is used to create a custom PBUF_REF + * that points into the original pbuf. */ +struct pbuf_custom_ref { + /** 'base class' */ + struct pbuf_custom pc; + /** pointer to the original pbuf that is referenced */ + struct pbuf *original; +}; +#endif /* LWIP_PBUF_CUSTOM_REF_DEFINED */ +#endif /* !LWIP_NETIF_TX_SINGLE_PBUF */ + +err_t ip4_frag(struct pbuf *p, struct netif *netif, const ip4_addr_t *dest); +#endif /* IP_FRAG */ + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_IPV4 */ + +#endif /* LWIP_HDR_IP4_FRAG_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/ip6.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/ip6.h new file mode 100644 index 0000000000000000000000000000000000000000..f894e063efb93bbcc29ee10e4a4fbcccd8f4e550 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/ip6.h @@ -0,0 +1,93 @@ +/** + * @file + * + * IPv6 layer. + */ + +/* + * Copyright (c) 2010 Inico Technologies Ltd. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Ivan Delamer + * + * + * Please coordinate changes and requests with Ivan Delamer + * + */ +#ifndef LWIP_HDR_IP6_H +#define LWIP_HDR_IP6_H + +#include "lwip/opt.h" + +#if LWIP_IPV6 /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/ip6_addr.h" +#include "lwip/prot/ip6.h" +#include "lwip/def.h" +#include "lwip/pbuf.h" +#include "lwip/netif.h" + +#include "lwip/err.h" + +#ifdef __cplusplus +extern "C" { +#endif + +struct netif *ip6_route(const ip6_addr_t *src, const ip6_addr_t *dest); +const ip_addr_t *ip6_select_source_address(struct netif *netif, const ip6_addr_t * dest); +err_t ip6_input(struct pbuf *p, struct netif *inp); +err_t ip6_output(struct pbuf *p, const ip6_addr_t *src, const ip6_addr_t *dest, + u8_t hl, u8_t tc, u8_t nexth); +err_t ip6_output_if(struct pbuf *p, const ip6_addr_t *src, const ip6_addr_t *dest, + u8_t hl, u8_t tc, u8_t nexth, struct netif *netif); +err_t ip6_output_if_src(struct pbuf *p, const ip6_addr_t *src, const ip6_addr_t *dest, + u8_t hl, u8_t tc, u8_t nexth, struct netif *netif); +#if LWIP_NETIF_USE_HINTS +err_t ip6_output_hinted(struct pbuf *p, const ip6_addr_t *src, const ip6_addr_t *dest, + u8_t hl, u8_t tc, u8_t nexth, struct netif_hint *netif_hint); +#endif /* LWIP_NETIF_USE_HINTS */ +#if LWIP_IPV6_MLD +err_t ip6_options_add_hbh_ra(struct pbuf * p, u8_t nexth, u8_t value); +#endif /* LWIP_IPV6_MLD */ + +#define ip6_netif_get_local_ip(netif, dest) (((netif) != NULL) ? \ + ip6_select_source_address(netif, dest) : NULL) + +#if IP6_DEBUG +void ip6_debug_print(struct pbuf *p); +#else +#define ip6_debug_print(p) +#endif /* IP6_DEBUG */ + + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_IPV6 */ + +#endif /* LWIP_HDR_IP6_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/ip6_addr.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/ip6_addr.h new file mode 100644 index 0000000000000000000000000000000000000000..29c2a34d9e9e7f130939e61cf027cec1daab9d0d --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/ip6_addr.h @@ -0,0 +1,352 @@ +/** + * @file + * + * IPv6 addresses. + */ + +/* + * Copyright (c) 2010 Inico Technologies Ltd. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Ivan Delamer + * + * Structs and macros for handling IPv6 addresses. + * + * Please coordinate changes and requests with Ivan Delamer + * + */ +#ifndef LWIP_HDR_IP6_ADDR_H +#define LWIP_HDR_IP6_ADDR_H + +#include "lwip/opt.h" +#include "def.h" + +#if LWIP_IPV6 /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/ip6_zone.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +/** This is the aligned version of ip6_addr_t, + used as local variable, on the stack, etc. */ +struct ip6_addr { + u32_t addr[4]; +#if LWIP_IPV6_SCOPES + u8_t zone; +#endif /* LWIP_IPV6_SCOPES */ +}; + +/** IPv6 address */ +typedef struct ip6_addr ip6_addr_t; + +/** Set an IPv6 partial address given by byte-parts */ +#define IP6_ADDR_PART(ip6addr, index, a,b,c,d) \ + (ip6addr)->addr[index] = PP_HTONL(LWIP_MAKEU32(a,b,c,d)) + +/** Set a full IPv6 address by passing the 4 u32_t indices in network byte order + (use PP_HTONL() for constants) */ +#define IP6_ADDR(ip6addr, idx0, idx1, idx2, idx3) do { \ + (ip6addr)->addr[0] = idx0; \ + (ip6addr)->addr[1] = idx1; \ + (ip6addr)->addr[2] = idx2; \ + (ip6addr)->addr[3] = idx3; \ + ip6_addr_clear_zone(ip6addr); } while(0) + +/** Access address in 16-bit block */ +#define IP6_ADDR_BLOCK1(ip6addr) ((u16_t)((lwip_htonl((ip6addr)->addr[0]) >> 16) & 0xffff)) +/** Access address in 16-bit block */ +#define IP6_ADDR_BLOCK2(ip6addr) ((u16_t)((lwip_htonl((ip6addr)->addr[0])) & 0xffff)) +/** Access address in 16-bit block */ +#define IP6_ADDR_BLOCK3(ip6addr) ((u16_t)((lwip_htonl((ip6addr)->addr[1]) >> 16) & 0xffff)) +/** Access address in 16-bit block */ +#define IP6_ADDR_BLOCK4(ip6addr) ((u16_t)((lwip_htonl((ip6addr)->addr[1])) & 0xffff)) +/** Access address in 16-bit block */ +#define IP6_ADDR_BLOCK5(ip6addr) ((u16_t)((lwip_htonl((ip6addr)->addr[2]) >> 16) & 0xffff)) +/** Access address in 16-bit block */ +#define IP6_ADDR_BLOCK6(ip6addr) ((u16_t)((lwip_htonl((ip6addr)->addr[2])) & 0xffff)) +/** Access address in 16-bit block */ +#define IP6_ADDR_BLOCK7(ip6addr) ((u16_t)((lwip_htonl((ip6addr)->addr[3]) >> 16) & 0xffff)) +/** Access address in 16-bit block */ +#define IP6_ADDR_BLOCK8(ip6addr) ((u16_t)((lwip_htonl((ip6addr)->addr[3])) & 0xffff)) + +/** Copy IPv6 address - faster than ip6_addr_set: no NULL check */ +#define ip6_addr_copy(dest, src) do{(dest).addr[0] = (src).addr[0]; \ + (dest).addr[1] = (src).addr[1]; \ + (dest).addr[2] = (src).addr[2]; \ + (dest).addr[3] = (src).addr[3]; \ + ip6_addr_copy_zone((dest), (src)); }while(0) +/** Safely copy one IPv6 address to another (src may be NULL) */ +#define ip6_addr_set(dest, src) do{(dest)->addr[0] = (src) == NULL ? 0 : (src)->addr[0]; \ + (dest)->addr[1] = (src) == NULL ? 0 : (src)->addr[1]; \ + (dest)->addr[2] = (src) == NULL ? 0 : (src)->addr[2]; \ + (dest)->addr[3] = (src) == NULL ? 0 : (src)->addr[3]; \ + ip6_addr_set_zone((dest), (src) == NULL ? IP6_NO_ZONE : ip6_addr_zone(src)); }while(0) + +/** Copy packed IPv6 address to unpacked IPv6 address; zone is not set */ +#define ip6_addr_copy_from_packed(dest, src) do{(dest).addr[0] = (src).addr[0]; \ + (dest).addr[1] = (src).addr[1]; \ + (dest).addr[2] = (src).addr[2]; \ + (dest).addr[3] = (src).addr[3]; \ + ip6_addr_clear_zone(&dest); }while(0) + +/** Copy unpacked IPv6 address to packed IPv6 address; zone is lost */ +#define ip6_addr_copy_to_packed(dest, src) do{(dest).addr[0] = (src).addr[0]; \ + (dest).addr[1] = (src).addr[1]; \ + (dest).addr[2] = (src).addr[2]; \ + (dest).addr[3] = (src).addr[3]; }while(0) + +/** Set complete address to zero */ +#define ip6_addr_set_zero(ip6addr) do{(ip6addr)->addr[0] = 0; \ + (ip6addr)->addr[1] = 0; \ + (ip6addr)->addr[2] = 0; \ + (ip6addr)->addr[3] = 0; \ + ip6_addr_clear_zone(ip6addr);}while(0) + +/** Set address to ipv6 'any' (no need for lwip_htonl()) */ +#define ip6_addr_set_any(ip6addr) ip6_addr_set_zero(ip6addr) +/** Set address to ipv6 loopback address */ +#define ip6_addr_set_loopback(ip6addr) do{(ip6addr)->addr[0] = 0; \ + (ip6addr)->addr[1] = 0; \ + (ip6addr)->addr[2] = 0; \ + (ip6addr)->addr[3] = PP_HTONL(0x00000001UL); \ + ip6_addr_clear_zone(ip6addr);}while(0) +/** Safely copy one IPv6 address to another and change byte order + * from host- to network-order. */ +#define ip6_addr_set_hton(dest, src) do{(dest)->addr[0] = (src) == NULL ? 0 : lwip_htonl((src)->addr[0]); \ + (dest)->addr[1] = (src) == NULL ? 0 : lwip_htonl((src)->addr[1]); \ + (dest)->addr[2] = (src) == NULL ? 0 : lwip_htonl((src)->addr[2]); \ + (dest)->addr[3] = (src) == NULL ? 0 : lwip_htonl((src)->addr[3]); \ + ip6_addr_set_zone((dest), (src) == NULL ? IP6_NO_ZONE : ip6_addr_zone(src));}while(0) + + +/** Compare IPv6 networks, ignoring zone information. To be used sparingly! */ +#define ip6_addr_netcmp_zoneless(addr1, addr2) (((addr1)->addr[0] == (addr2)->addr[0]) && \ + ((addr1)->addr[1] == (addr2)->addr[1])) + +/** + * Determine if two IPv6 address are on the same network. + * + * @param addr1 IPv6 address 1 + * @param addr2 IPv6 address 2 + * @return 1 if the network identifiers of both address match, 0 if not + */ +#define ip6_addr_netcmp(addr1, addr2) (ip6_addr_netcmp_zoneless((addr1), (addr2)) && \ + ip6_addr_cmp_zone((addr1), (addr2))) + +/* Exact-host comparison *after* ip6_addr_netcmp() succeeded, for efficiency. */ +#define ip6_addr_nethostcmp(addr1, addr2) (((addr1)->addr[2] == (addr2)->addr[2]) && \ + ((addr1)->addr[3] == (addr2)->addr[3])) + +/** Compare IPv6 addresses, ignoring zone information. To be used sparingly! */ +#define ip6_addr_cmp_zoneless(addr1, addr2) (((addr1)->addr[0] == (addr2)->addr[0]) && \ + ((addr1)->addr[1] == (addr2)->addr[1]) && \ + ((addr1)->addr[2] == (addr2)->addr[2]) && \ + ((addr1)->addr[3] == (addr2)->addr[3])) +/** + * Determine if two IPv6 addresses are the same. In particular, the address + * part of both must be the same, and the zone must be compatible. + * + * @param addr1 IPv6 address 1 + * @param addr2 IPv6 address 2 + * @return 1 if the addresses are considered equal, 0 if not + */ +#define ip6_addr_cmp(addr1, addr2) (ip6_addr_cmp_zoneless((addr1), (addr2)) && \ + ip6_addr_cmp_zone((addr1), (addr2))) + +/** Compare IPv6 address to packed address and zone */ +#define ip6_addr_cmp_packed(ip6addr, paddr, zone_idx) (((ip6addr)->addr[0] == (paddr)->addr[0]) && \ + ((ip6addr)->addr[1] == (paddr)->addr[1]) && \ + ((ip6addr)->addr[2] == (paddr)->addr[2]) && \ + ((ip6addr)->addr[3] == (paddr)->addr[3]) && \ + ip6_addr_equals_zone((ip6addr), (zone_idx))) + +#define ip6_get_subnet_id(ip6addr) (lwip_htonl((ip6addr)->addr[2]) & 0x0000ffffUL) + +#define ip6_addr_isany_val(ip6addr) (((ip6addr).addr[0] == 0) && \ + ((ip6addr).addr[1] == 0) && \ + ((ip6addr).addr[2] == 0) && \ + ((ip6addr).addr[3] == 0)) +#define ip6_addr_isany(ip6addr) (((ip6addr) == NULL) || ip6_addr_isany_val(*(ip6addr))) + +#define ip6_addr_isloopback(ip6addr) (((ip6addr)->addr[0] == 0UL) && \ + ((ip6addr)->addr[1] == 0UL) && \ + ((ip6addr)->addr[2] == 0UL) && \ + ((ip6addr)->addr[3] == PP_HTONL(0x00000001UL))) + +#define ip6_addr_isglobal(ip6addr) (((ip6addr)->addr[0] & PP_HTONL(0xe0000000UL)) == PP_HTONL(0x20000000UL)) + +#define ip6_addr_islinklocal(ip6addr) (((ip6addr)->addr[0] & PP_HTONL(0xffc00000UL)) == PP_HTONL(0xfe800000UL)) + +#define ip6_addr_issitelocal(ip6addr) (((ip6addr)->addr[0] & PP_HTONL(0xffc00000UL)) == PP_HTONL(0xfec00000UL)) + +#define ip6_addr_isuniquelocal(ip6addr) (((ip6addr)->addr[0] & PP_HTONL(0xfe000000UL)) == PP_HTONL(0xfc000000UL)) + +#define ip6_addr_isipv4mappedipv6(ip6addr) (((ip6addr)->addr[0] == 0) && ((ip6addr)->addr[1] == 0) && (((ip6addr)->addr[2]) == PP_HTONL(0x0000FFFFUL))) + +#define ip6_addr_ismulticast(ip6addr) (((ip6addr)->addr[0] & PP_HTONL(0xff000000UL)) == PP_HTONL(0xff000000UL)) +#define ip6_addr_multicast_transient_flag(ip6addr) ((ip6addr)->addr[0] & PP_HTONL(0x00100000UL)) +#define ip6_addr_multicast_prefix_flag(ip6addr) ((ip6addr)->addr[0] & PP_HTONL(0x00200000UL)) +#define ip6_addr_multicast_rendezvous_flag(ip6addr) ((ip6addr)->addr[0] & PP_HTONL(0x00400000UL)) +#define ip6_addr_multicast_scope(ip6addr) ((lwip_htonl((ip6addr)->addr[0]) >> 16) & 0xf) +#define IP6_MULTICAST_SCOPE_RESERVED 0x0 +#define IP6_MULTICAST_SCOPE_RESERVED0 0x0 +#define IP6_MULTICAST_SCOPE_INTERFACE_LOCAL 0x1 +#define IP6_MULTICAST_SCOPE_LINK_LOCAL 0x2 +#define IP6_MULTICAST_SCOPE_RESERVED3 0x3 +#define IP6_MULTICAST_SCOPE_ADMIN_LOCAL 0x4 +#define IP6_MULTICAST_SCOPE_SITE_LOCAL 0x5 +#define IP6_MULTICAST_SCOPE_ORGANIZATION_LOCAL 0x8 +#define IP6_MULTICAST_SCOPE_GLOBAL 0xe +#define IP6_MULTICAST_SCOPE_RESERVEDF 0xf +#define ip6_addr_ismulticast_iflocal(ip6addr) (((ip6addr)->addr[0] & PP_HTONL(0xff8f0000UL)) == PP_HTONL(0xff010000UL)) +#define ip6_addr_ismulticast_linklocal(ip6addr) (((ip6addr)->addr[0] & PP_HTONL(0xff8f0000UL)) == PP_HTONL(0xff020000UL)) +#define ip6_addr_ismulticast_adminlocal(ip6addr) (((ip6addr)->addr[0] & PP_HTONL(0xff8f0000UL)) == PP_HTONL(0xff040000UL)) +#define ip6_addr_ismulticast_sitelocal(ip6addr) (((ip6addr)->addr[0] & PP_HTONL(0xff8f0000UL)) == PP_HTONL(0xff050000UL)) +#define ip6_addr_ismulticast_orglocal(ip6addr) (((ip6addr)->addr[0] & PP_HTONL(0xff8f0000UL)) == PP_HTONL(0xff080000UL)) +#define ip6_addr_ismulticast_global(ip6addr) (((ip6addr)->addr[0] & PP_HTONL(0xff8f0000UL)) == PP_HTONL(0xff0e0000UL)) + +/* Scoping note: while interface-local and link-local multicast addresses do + * have a scope (i.e., they are meaningful only in the context of a particular + * interface), the following functions are not assigning or comparing zone + * indices. The reason for this is backward compatibility. Any call site that + * produces a non-global multicast address must assign a multicast address as + * appropriate itself. */ + +#define ip6_addr_isallnodes_iflocal(ip6addr) (((ip6addr)->addr[0] == PP_HTONL(0xff010000UL)) && \ + ((ip6addr)->addr[1] == 0UL) && \ + ((ip6addr)->addr[2] == 0UL) && \ + ((ip6addr)->addr[3] == PP_HTONL(0x00000001UL))) + +#define ip6_addr_isallnodes_linklocal(ip6addr) (((ip6addr)->addr[0] == PP_HTONL(0xff020000UL)) && \ + ((ip6addr)->addr[1] == 0UL) && \ + ((ip6addr)->addr[2] == 0UL) && \ + ((ip6addr)->addr[3] == PP_HTONL(0x00000001UL))) +#define ip6_addr_set_allnodes_linklocal(ip6addr) do{(ip6addr)->addr[0] = PP_HTONL(0xff020000UL); \ + (ip6addr)->addr[1] = 0; \ + (ip6addr)->addr[2] = 0; \ + (ip6addr)->addr[3] = PP_HTONL(0x00000001UL); \ + ip6_addr_clear_zone(ip6addr); }while(0) + +#define ip6_addr_isallrouters_linklocal(ip6addr) (((ip6addr)->addr[0] == PP_HTONL(0xff020000UL)) && \ + ((ip6addr)->addr[1] == 0UL) && \ + ((ip6addr)->addr[2] == 0UL) && \ + ((ip6addr)->addr[3] == PP_HTONL(0x00000002UL))) +#define ip6_addr_set_allrouters_linklocal(ip6addr) do{(ip6addr)->addr[0] = PP_HTONL(0xff020000UL); \ + (ip6addr)->addr[1] = 0; \ + (ip6addr)->addr[2] = 0; \ + (ip6addr)->addr[3] = PP_HTONL(0x00000002UL); \ + ip6_addr_clear_zone(ip6addr); }while(0) + +#define ip6_addr_issolicitednode(ip6addr) ( ((ip6addr)->addr[0] == PP_HTONL(0xff020000UL)) && \ + ((ip6addr)->addr[2] == PP_HTONL(0x00000001UL)) && \ + (((ip6addr)->addr[3] & PP_HTONL(0xff000000UL)) == PP_HTONL(0xff000000UL)) ) + +#define ip6_addr_set_solicitednode(ip6addr, if_id) do{(ip6addr)->addr[0] = PP_HTONL(0xff020000UL); \ + (ip6addr)->addr[1] = 0; \ + (ip6addr)->addr[2] = PP_HTONL(0x00000001UL); \ + (ip6addr)->addr[3] = (PP_HTONL(0xff000000UL) | (if_id)); \ + ip6_addr_clear_zone(ip6addr); }while(0) + +#define ip6_addr_cmp_solicitednode(ip6addr, sn_addr) (((ip6addr)->addr[0] == PP_HTONL(0xff020000UL)) && \ + ((ip6addr)->addr[1] == 0) && \ + ((ip6addr)->addr[2] == PP_HTONL(0x00000001UL)) && \ + ((ip6addr)->addr[3] == (PP_HTONL(0xff000000UL) | (sn_addr)->addr[3]))) + +/* IPv6 address states. */ +#define IP6_ADDR_INVALID 0x00 +#define IP6_ADDR_TENTATIVE 0x08 +#define IP6_ADDR_TENTATIVE_1 0x09 /* 1 probe sent */ +#define IP6_ADDR_TENTATIVE_2 0x0a /* 2 probes sent */ +#define IP6_ADDR_TENTATIVE_3 0x0b /* 3 probes sent */ +#define IP6_ADDR_TENTATIVE_4 0x0c /* 4 probes sent */ +#define IP6_ADDR_TENTATIVE_5 0x0d /* 5 probes sent */ +#define IP6_ADDR_TENTATIVE_6 0x0e /* 6 probes sent */ +#define IP6_ADDR_TENTATIVE_7 0x0f /* 7 probes sent */ +#define IP6_ADDR_VALID 0x10 /* This bit marks an address as valid (preferred or deprecated) */ +#define IP6_ADDR_PREFERRED 0x30 +#define IP6_ADDR_DEPRECATED 0x10 /* Same as VALID (valid but not preferred) */ +#define IP6_ADDR_DUPLICATED 0x40 /* Failed DAD test, not valid */ + +#define IP6_ADDR_TENTATIVE_COUNT_MASK 0x07 /* 1-7 probes sent */ + +#define ip6_addr_isinvalid(addr_state) (addr_state == IP6_ADDR_INVALID) +#define ip6_addr_istentative(addr_state) (addr_state & IP6_ADDR_TENTATIVE) +#define ip6_addr_isvalid(addr_state) (addr_state & IP6_ADDR_VALID) /* Include valid, preferred, and deprecated. */ +#define ip6_addr_ispreferred(addr_state) (addr_state == IP6_ADDR_PREFERRED) +#define ip6_addr_isdeprecated(addr_state) (addr_state == IP6_ADDR_DEPRECATED) +#define ip6_addr_isduplicated(addr_state) (addr_state == IP6_ADDR_DUPLICATED) + +#if LWIP_IPV6_ADDRESS_LIFETIMES +#define IP6_ADDR_LIFE_STATIC (0) +#define IP6_ADDR_LIFE_INFINITE (0xffffffffUL) +#define ip6_addr_life_isstatic(addr_life) ((addr_life) == IP6_ADDR_LIFE_STATIC) +#define ip6_addr_life_isinfinite(addr_life) ((addr_life) == IP6_ADDR_LIFE_INFINITE) +#endif /* LWIP_IPV6_ADDRESS_LIFETIMES */ + +#define ip6_addr_debug_print_parts(debug, a, b, c, d, e, f, g, h) \ + LWIP_DEBUGF(debug, ("%" X16_F ":%" X16_F ":%" X16_F ":%" X16_F ":%" X16_F ":%" X16_F ":%" X16_F ":%" X16_F, \ + a, b, c, d, e, f, g, h)) +#define ip6_addr_debug_print(debug, ipaddr) \ + ip6_addr_debug_print_parts(debug, \ + (u16_t)((ipaddr) != NULL ? IP6_ADDR_BLOCK1(ipaddr) : 0), \ + (u16_t)((ipaddr) != NULL ? IP6_ADDR_BLOCK2(ipaddr) : 0), \ + (u16_t)((ipaddr) != NULL ? IP6_ADDR_BLOCK3(ipaddr) : 0), \ + (u16_t)((ipaddr) != NULL ? IP6_ADDR_BLOCK4(ipaddr) : 0), \ + (u16_t)((ipaddr) != NULL ? IP6_ADDR_BLOCK5(ipaddr) : 0), \ + (u16_t)((ipaddr) != NULL ? IP6_ADDR_BLOCK6(ipaddr) : 0), \ + (u16_t)((ipaddr) != NULL ? IP6_ADDR_BLOCK7(ipaddr) : 0), \ + (u16_t)((ipaddr) != NULL ? IP6_ADDR_BLOCK8(ipaddr) : 0)) +#define ip6_addr_debug_print_val(debug, ipaddr) \ + ip6_addr_debug_print_parts(debug, \ + IP6_ADDR_BLOCK1(&(ipaddr)), \ + IP6_ADDR_BLOCK2(&(ipaddr)), \ + IP6_ADDR_BLOCK3(&(ipaddr)), \ + IP6_ADDR_BLOCK4(&(ipaddr)), \ + IP6_ADDR_BLOCK5(&(ipaddr)), \ + IP6_ADDR_BLOCK6(&(ipaddr)), \ + IP6_ADDR_BLOCK7(&(ipaddr)), \ + IP6_ADDR_BLOCK8(&(ipaddr))) + +#define IP6ADDR_STRLEN_MAX 46 + +int ip6addr_aton(const char *cp, ip6_addr_t *addr); +/** returns ptr to static buffer; not reentrant! */ +char *ip6addr_ntoa(const ip6_addr_t *addr); +char *ip6addr_ntoa_r(const ip6_addr_t *addr, char *buf, int buflen); + + + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_IPV6 */ + +#endif /* LWIP_HDR_IP6_ADDR_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/ip6_frag.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/ip6_frag.h new file mode 100644 index 0000000000000000000000000000000000000000..87e0e86a67dc81236e2d8dd574620fc467169808 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/ip6_frag.h @@ -0,0 +1,144 @@ +/** + * @file + * + * IPv6 fragmentation and reassembly. + */ + +/* + * Copyright (c) 2010 Inico Technologies Ltd. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Ivan Delamer + * + * + * Please coordinate changes and requests with Ivan Delamer + * + */ +#ifndef LWIP_HDR_IP6_FRAG_H +#define LWIP_HDR_IP6_FRAG_H + +#include "lwip/opt.h" +#include "lwip/pbuf.h" +#include "lwip/ip6_addr.h" +#include "lwip/ip6.h" +#include "lwip/netif.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +#if LWIP_IPV6 && LWIP_IPV6_REASS /* don't build if not configured for use in lwipopts.h */ + +/** The IPv6 reassembly timer interval in milliseconds. */ +#define IP6_REASS_TMR_INTERVAL 1000 + +/** IP6_FRAG_COPYHEADER==1: for platforms where sizeof(void*) > 4, "struct + * ip6_reass_helper" is too large to be stored in the IPv6 fragment header, and + * will bleed into the header before it, which may be the IPv6 header or an + * extension header. This means that for each first fragment packet, we need to + * 1) make a copy of some IPv6 header fields (src+dest) that we need later on, + * just in case we do overwrite part of the IPv6 header, and 2) make a copy of + * the header data that we overwrote, so that we can restore it before either + * completing reassembly or sending an ICMPv6 reply. The last part is true even + * if this setting is disabled, but if it is enabled, we need to save a bit + * more data (up to the size of a pointer) because we overwrite more. */ +#ifndef IPV6_FRAG_COPYHEADER +#define IPV6_FRAG_COPYHEADER 0 +#endif + +/* With IPV6_FRAG_COPYHEADER==1, a helper structure may (or, depending on the + * presence of extensions, may not) overwrite part of the IP header. Therefore, + * we copy the fields that we need from the IP header for as long as the helper + * structure may still be in place. This is easier than temporarily restoring + * those fields in the IP header each time we need to perform checks on them. */ +#if IPV6_FRAG_COPYHEADER +#define IPV6_FRAG_SRC(ipr) ((ipr)->src) +#define IPV6_FRAG_DEST(ipr) ((ipr)->dest) +#else /* IPV6_FRAG_COPYHEADER */ +#define IPV6_FRAG_SRC(ipr) ((ipr)->iphdr->src) +#define IPV6_FRAG_DEST(ipr) ((ipr)->iphdr->dest) +#endif /* IPV6_FRAG_COPYHEADER */ + +/** IPv6 reassembly helper struct. + * This is exported because memp needs to know the size. + */ +struct ip6_reassdata { + struct ip6_reassdata *next; + struct pbuf *p; + struct ip6_hdr *iphdr; /* pointer to the first (original) IPv6 header */ +#if IPV6_FRAG_COPYHEADER + ip6_addr_p_t src; /* copy of the source address in the IP header */ + ip6_addr_p_t dest; /* copy of the destination address in the IP header */ + /* This buffer (for the part of the original header that we overwrite) will + * be slightly oversized, but we cannot compute the exact size from here. */ + u8_t orig_hdr[sizeof(struct ip6_frag_hdr) + sizeof(void*)]; +#else /* IPV6_FRAG_COPYHEADER */ + /* In this case we still need the buffer, for sending ICMPv6 replies. */ + u8_t orig_hdr[sizeof(struct ip6_frag_hdr)]; +#endif /* IPV6_FRAG_COPYHEADER */ + u32_t identification; + u16_t datagram_len; + u8_t nexth; + u8_t timer; +#if LWIP_IPV6_SCOPES + u8_t src_zone; /* zone of original packet's source address */ + u8_t dest_zone; /* zone of original packet's destination address */ +#endif /* LWIP_IPV6_SCOPES */ +}; + +#define ip6_reass_init() /* Compatibility define */ +void ip6_reass_tmr(void); +struct pbuf *ip6_reass(struct pbuf *p); + +#endif /* LWIP_IPV6 && LWIP_IPV6_REASS */ + +#if LWIP_IPV6 && LWIP_IPV6_FRAG /* don't build if not configured for use in lwipopts.h */ + +#ifndef LWIP_PBUF_CUSTOM_REF_DEFINED +#define LWIP_PBUF_CUSTOM_REF_DEFINED +/** A custom pbuf that holds a reference to another pbuf, which is freed + * when this custom pbuf is freed. This is used to create a custom PBUF_REF + * that points into the original pbuf. */ +struct pbuf_custom_ref { + /** 'base class' */ + struct pbuf_custom pc; + /** pointer to the original pbuf that is referenced */ + struct pbuf *original; +}; +#endif /* LWIP_PBUF_CUSTOM_REF_DEFINED */ + +err_t ip6_frag(struct pbuf *p, struct netif *netif, const ip6_addr_t *dest); + +#endif /* LWIP_IPV6 && LWIP_IPV6_FRAG */ + + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_IP6_FRAG_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/ip6_zone.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/ip6_zone.h new file mode 100644 index 0000000000000000000000000000000000000000..525790e67d1742902be5aa85bfe6abf5bbe0af74 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/ip6_zone.h @@ -0,0 +1,304 @@ +/** + * @file + * + * IPv6 address scopes, zones, and scoping policy. + * + * This header provides the means to implement support for IPv6 address scopes, + * as per RFC 4007. An address scope can be either global or more constrained. + * In lwIP, we say that an address "has a scope" or "is scoped" when its scope + * is constrained, in which case the address is meaningful only in a specific + * "zone." For unicast addresses, only link-local addresses have a scope; in + * that case, the scope is the link. For multicast addresses, there are various + * scopes defined by RFC 4007 and others. For any constrained scope, a system + * must establish a (potentially one-to-many) mapping between zones and local + * interfaces. For example, a link-local address is valid on only one link (its + * zone). That link may be attached to one or more local interfaces. The + * decisions on which scopes are constrained and the mapping between zones and + * interfaces is together what we refer to as the "scoping policy" - more on + * this in a bit. + * + * In lwIP, each IPv6 address has an associated zone index. This zone index may + * be set to "no zone" (IP6_NO_ZONE, 0) or an actual zone. We say that an + * address "has a zone" or "is zoned" when its zone index is *not* set to "no + * zone." In lwIP, in principle, each address should be "properly zoned," which + * means that if the address has a zone if and only if has a scope. As such, it + * is a rule that an unscoped (e.g., global) address must never have a zone. + * Even though one could argue that there is always one zone even for global + * scopes, this rule exists for implementation simplicity. Violation of the + * rule will trigger assertions or otherwise result in undesired behavior. + * + * Backward compatibility prevents us from requiring that applications always + * provide properly zoned addresses. We do enforce the rule that the in the + * lwIP link layer (everything below netif->output_ip6() and in particular ND6) + * *all* addresses are properly zoned. Thus, on the output paths down the + * stack, various places deal with the case of addresses that lack a zone. + * Some of them are best-effort for efficiency (e.g. the PCB bind and connect + * API calls' attempts to add missing zones); ultimately the IPv6 output + * handler (@ref ip6_output_if_src) will set a zone if necessary. + * + * Aside from dealing with scoped addresses lacking a zone, a proper IPv6 + * implementation must also ensure that a packet with a scoped source and/or + * destination address does not leave its zone. This is currently implemented + * in the input and forward functions. However, for output, these checks are + * deliberately omitted in order to keep the implementation lightweight. The + * routing algorithm in @ref ip6_route will take decisions such that it will + * not cause zone violations unless the application sets bad addresses, though. + * + * In terms of scoping policy, lwIP implements the default policy from RFC 4007 + * using macros in this file. This policy considers link-local unicast + * addresses and (only) interface-local and link-local multicast addresses as + * having a scope. For all these addresses, the zone is equal to the interface. + * As shown below in this file, it is possible to implement a custom policy. + */ + +/* + * Copyright (c) 2017 The MINIX 3 Project. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: David van Moolenbroek + * + */ +#ifndef LWIP_HDR_IP6_ZONE_H +#define LWIP_HDR_IP6_ZONE_H + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @defgroup ip6_zones IPv6 Zones + * @ingroup ip6 + * @{ + */ + +#if LWIP_IPV6 /* don't build if not configured for use in lwipopts.h */ + +/** Identifier for "no zone". */ +#define IP6_NO_ZONE 0 + +#if LWIP_IPV6_SCOPES + +/** Zone initializer for static IPv6 address initialization, including comma. */ +#define IPADDR6_ZONE_INIT , IP6_NO_ZONE + +/** Return the zone index of the given IPv6 address; possibly "no zone". */ +#define ip6_addr_zone(ip6addr) ((ip6addr)->zone) + +/** Does the given IPv6 address have a zone set? (0/1) */ +#define ip6_addr_has_zone(ip6addr) (ip6_addr_zone(ip6addr) != IP6_NO_ZONE) + +/** Set the zone field of an IPv6 address to a particular value. */ +#define ip6_addr_set_zone(ip6addr, zone_idx) ((ip6addr)->zone = (zone_idx)) + +/** Clear the zone field of an IPv6 address, setting it to "no zone". */ +#define ip6_addr_clear_zone(ip6addr) ((ip6addr)->zone = IP6_NO_ZONE) + +/** Copy the zone field from the second IPv6 address to the first one. */ +#define ip6_addr_copy_zone(ip6addr1, ip6addr2) ((ip6addr1).zone = (ip6addr2).zone) + +/** Is the zone field of the given IPv6 address equal to the given zone index? (0/1) */ +#define ip6_addr_equals_zone(ip6addr, zone_idx) ((ip6addr)->zone == (zone_idx)) + +/** Are the zone fields of the given IPv6 addresses equal? (0/1) + * This macro must only be used on IPv6 addresses of the same scope. */ +#define ip6_addr_cmp_zone(ip6addr1, ip6addr2) ((ip6addr1)->zone == (ip6addr2)->zone) + +/** Symbolic constants for the 'type' parameters in some of the macros. + * These exist for efficiency only, allowing the macros to avoid certain tests + * when the address is known not to be of a certain type. Dead code elimination + * will do the rest. IP6_MULTICAST is supported but currently not optimized. + * @see ip6_addr_has_scope, ip6_addr_assign_zone, ip6_addr_lacks_zone. + */ +enum lwip_ipv6_scope_type +{ + /** Unknown */ + IP6_UNKNOWN = 0, + /** Unicast */ + IP6_UNICAST = 1, + /** Multicast */ + IP6_MULTICAST = 2 +}; + +/** IPV6_CUSTOM_SCOPES: together, the following three macro definitions, + * @ref ip6_addr_has_scope, @ref ip6_addr_assign_zone, and + * @ref ip6_addr_test_zone, completely define the lwIP scoping policy. + * The definitions below implement the default policy from RFC 4007 Sec. 6. + * Should an implementation desire to implement a different policy, it can + * define IPV6_CUSTOM_SCOPES to 1 and supply its own definitions for the three + * macros instead. + */ +#ifndef IPV6_CUSTOM_SCOPES +#define IPV6_CUSTOM_SCOPES 0 +#endif /* !IPV6_CUSTOM_SCOPES */ + +#if !IPV6_CUSTOM_SCOPES + +/** + * Determine whether an IPv6 address has a constrained scope, and as such is + * meaningful only if accompanied by a zone index to identify the scope's zone. + * The given address type may be used to eliminate at compile time certain + * checks that will evaluate to false at run time anyway. + * + * This default implementation follows the default model of RFC 4007, where + * only interface-local and link-local scopes are defined. + * + * Even though the unicast loopback address does have an implied link-local + * scope, in this implementation it does not have an explicitly assigned zone + * index. As such it should not be tested for in this macro. + * + * @param ip6addr the IPv6 address (const); only its address part is examined. + * @param type address type; see @ref lwip_ipv6_scope_type. + * @return 1 if the address has a constrained scope, 0 if it does not. + */ +#define ip6_addr_has_scope(ip6addr, type) \ + (ip6_addr_islinklocal(ip6addr) || (((type) != IP6_UNICAST) && \ + (ip6_addr_ismulticast_iflocal(ip6addr) || \ + ip6_addr_ismulticast_linklocal(ip6addr)))) + +/** + * Assign a zone index to an IPv6 address, based on a network interface. If the + * given address has a scope, the assigned zone index is that scope's zone of + * the given netif; otherwise, the assigned zone index is "no zone". + * + * This default implementation follows the default model of RFC 4007, where + * only interface-local and link-local scopes are defined, and the zone index + * of both of those scopes always equals the index of the network interface. + * As such, this default implementation need not distinguish between different + * constrained scopes when assigning the zone. + * + * @param ip6addr the IPv6 address; its address part is examined, and its zone + * index is assigned. + * @param type address type; see @ref lwip_ipv6_scope_type. + * @param netif the network interface (const). + */ +#define ip6_addr_assign_zone(ip6addr, type, netif) \ + (ip6_addr_set_zone((ip6addr), \ + ip6_addr_has_scope((ip6addr), (type)) ? netif_get_index(netif) : 0)) + +/** + * Test whether an IPv6 address is "zone-compatible" with a network interface. + * That is, test whether the network interface is part of the zone associated + * with the address. For efficiency, this macro is only ever called if the + * given address is either scoped or zoned, and thus, it need not test this. + * If an address is scoped but not zoned, or zoned and not scoped, it is + * considered not zone-compatible with any netif. + * + * This default implementation follows the default model of RFC 4007, where + * only interface-local and link-local scopes are defined, and the zone index + * of both of those scopes always equals the index of the network interface. + * As such, there is always only one matching netif for a specific zone index, + * but all call sites of this macro currently support multiple matching netifs + * as well (at no additional expense in the common case). + * + * @param ip6addr the IPv6 address (const). + * @param netif the network interface (const). + * @return 1 if the address is scope-compatible with the netif, 0 if not. + */ +#define ip6_addr_test_zone(ip6addr, netif) \ + (ip6_addr_equals_zone((ip6addr), netif_get_index(netif))) + +#endif /* !IPV6_CUSTOM_SCOPES */ + +/** Does the given IPv6 address have a scope, and as such should also have a + * zone to be meaningful, but does not actually have a zone? (0/1) */ +#define ip6_addr_lacks_zone(ip6addr, type) \ + (!ip6_addr_has_zone(ip6addr) && ip6_addr_has_scope((ip6addr), (type))) + +/** + * Try to select a zone for a scoped address that does not yet have a zone. + * Called from PCB bind and connect routines, for two reasons: 1) to save on + * this (relatively expensive) selection for every individual packet route + * operation and 2) to allow the application to obtain the selected zone from + * the PCB as is customary for e.g. getsockname/getpeername BSD socket calls. + * + * Ideally, callers would always supply a properly zoned address, in which case + * this function would not be needed. It exists both for compatibility with the + * BSD socket API (which accepts zoneless destination addresses) and for + * backward compatibility with pre-scoping lwIP code. + * + * It may be impossible to select a zone, e.g. if there are no netifs. In that + * case, the address's zone field will be left as is. + * + * @param dest the IPv6 address for which to select and set a zone. + * @param src source IPv6 address (const); may be equal to dest. + */ +#define ip6_addr_select_zone(dest, src) do { struct netif *selected_netif; \ + selected_netif = ip6_route((src), (dest)); \ + if (selected_netif != NULL) { \ + ip6_addr_assign_zone((dest), IP6_UNKNOWN, selected_netif); \ + } } while (0) + +/** + * @} + */ + +#else /* LWIP_IPV6_SCOPES */ + +#define IPADDR6_ZONE_INIT +#define ip6_addr_zone(ip6addr) (IP6_NO_ZONE) +#define ip6_addr_has_zone(ip6addr) (0) +#define ip6_addr_set_zone(ip6addr, zone_idx) +#define ip6_addr_clear_zone(ip6addr) +#define ip6_addr_copy_zone(ip6addr1, ip6addr2) +#define ip6_addr_equals_zone(ip6addr, zone_idx) (1) +#define ip6_addr_cmp_zone(ip6addr1, ip6addr2) (1) +#define IPV6_CUSTOM_SCOPES 0 +#define ip6_addr_has_scope(ip6addr, type) (0) +#define ip6_addr_assign_zone(ip6addr, type, netif) +#define ip6_addr_test_zone(ip6addr, netif) (1) +#define ip6_addr_lacks_zone(ip6addr, type) (0) +#define ip6_addr_select_zone(ip6addr, src) + +#endif /* LWIP_IPV6_SCOPES */ + +#if LWIP_IPV6_SCOPES && LWIP_IPV6_SCOPES_DEBUG + +/** Verify that the given IPv6 address is properly zoned. */ +#define IP6_ADDR_ZONECHECK(ip6addr) LWIP_ASSERT("IPv6 zone check failed", \ + ip6_addr_has_scope(ip6addr, IP6_UNKNOWN) == ip6_addr_has_zone(ip6addr)) + +/** Verify that the given IPv6 address is properly zoned for the given netif. */ +#define IP6_ADDR_ZONECHECK_NETIF(ip6addr, netif) LWIP_ASSERT("IPv6 netif zone check failed", \ + ip6_addr_has_scope(ip6addr, IP6_UNKNOWN) ? \ + (ip6_addr_has_zone(ip6addr) && \ + (((netif) == NULL) || ip6_addr_test_zone((ip6addr), (netif)))) : \ + !ip6_addr_has_zone(ip6addr)) + +#else /* LWIP_IPV6_SCOPES && LWIP_IPV6_SCOPES_DEBUG */ + +#define IP6_ADDR_ZONECHECK(ip6addr) +#define IP6_ADDR_ZONECHECK_NETIF(ip6addr, netif) + +#endif /* LWIP_IPV6_SCOPES && LWIP_IPV6_SCOPES_DEBUG */ + +#endif /* LWIP_IPV6 */ + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_IP6_ZONE_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/ip_addr.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/ip_addr.h new file mode 100644 index 0000000000000000000000000000000000000000..2f977709d12f56c98bed1a8535bc7083933d0968 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/ip_addr.h @@ -0,0 +1,438 @@ +/** + * @file + * IP address API (common IPv4 and IPv6) + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef LWIP_HDR_IP_ADDR_H +#define LWIP_HDR_IP_ADDR_H + +#include "lwip/opt.h" +#include "lwip/def.h" + +#include "lwip/ip4_addr.h" +#include "lwip/ip6_addr.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** @ingroup ipaddr + * IP address types for use in ip_addr_t.type member. + * @see tcp_new_ip_type(), udp_new_ip_type(), raw_new_ip_type(). + */ +enum lwip_ip_addr_type { + /** IPv4 */ + IPADDR_TYPE_V4 = 0U, + /** IPv6 */ + IPADDR_TYPE_V6 = 6U, + /** IPv4+IPv6 ("dual-stack") */ + IPADDR_TYPE_ANY = 46U +}; + +#if LWIP_IPV4 && LWIP_IPV6 +/** + * @ingroup ipaddr + * A union struct for both IP version's addresses. + * ATTENTION: watch out for its size when adding IPv6 address scope! + */ +typedef struct ip_addr { + union { + ip6_addr_t ip6; + ip4_addr_t ip4; + } u_addr; + /** @ref lwip_ip_addr_type */ + u8_t type; +} ip_addr_t; + +extern const ip_addr_t ip_addr_any_type; + +/** @ingroup ip4addr */ +#define IPADDR4_INIT(u32val) { { { { u32val, 0ul, 0ul, 0ul } IPADDR6_ZONE_INIT } }, IPADDR_TYPE_V4 } +/** @ingroup ip4addr */ +#define IPADDR4_INIT_BYTES(a,b,c,d) IPADDR4_INIT(PP_HTONL(LWIP_MAKEU32(a,b,c,d))) + +/** @ingroup ip6addr */ +#define IPADDR6_INIT(a, b, c, d) { { { { a, b, c, d } IPADDR6_ZONE_INIT } }, IPADDR_TYPE_V6 } +/** @ingroup ip6addr */ +#define IPADDR6_INIT_HOST(a, b, c, d) { { { { PP_HTONL(a), PP_HTONL(b), PP_HTONL(c), PP_HTONL(d) } IPADDR6_ZONE_INIT } }, IPADDR_TYPE_V6 } + +/** @ingroup ipaddr */ +#define IP_IS_ANY_TYPE_VAL(ipaddr) (IP_GET_TYPE(&ipaddr) == IPADDR_TYPE_ANY) +/** @ingroup ipaddr */ +#define IPADDR_ANY_TYPE_INIT { { { { 0ul, 0ul, 0ul, 0ul } IPADDR6_ZONE_INIT } }, IPADDR_TYPE_ANY } + +/** @ingroup ip4addr */ +#define IP_IS_V4_VAL(ipaddr) (IP_GET_TYPE(&ipaddr) == IPADDR_TYPE_V4) +/** @ingroup ip6addr */ +#define IP_IS_V6_VAL(ipaddr) (IP_GET_TYPE(&ipaddr) == IPADDR_TYPE_V6) +/** @ingroup ip4addr */ +#define IP_IS_V4(ipaddr) (((ipaddr) == NULL) || IP_IS_V4_VAL(*(ipaddr))) +/** @ingroup ip6addr */ +#define IP_IS_V6(ipaddr) (((ipaddr) != NULL) && IP_IS_V6_VAL(*(ipaddr))) + +#define IP_SET_TYPE_VAL(ipaddr, iptype) do { (ipaddr).type = (iptype); }while(0) +#define IP_SET_TYPE(ipaddr, iptype) do { if((ipaddr) != NULL) { IP_SET_TYPE_VAL(*(ipaddr), iptype); }}while(0) +#define IP_GET_TYPE(ipaddr) ((ipaddr)->type) + +#define IP_ADDR_RAW_SIZE(ipaddr) (IP_GET_TYPE(&ipaddr) == IPADDR_TYPE_V4 ? sizeof(ip4_addr_t) : sizeof(ip6_addr_t)) + +#define IP_ADDR_PCB_VERSION_MATCH_EXACT(pcb, ipaddr) (IP_GET_TYPE(&pcb->local_ip) == IP_GET_TYPE(ipaddr)) +#define IP_ADDR_PCB_VERSION_MATCH(pcb, ipaddr) (IP_IS_ANY_TYPE_VAL(pcb->local_ip) || IP_ADDR_PCB_VERSION_MATCH_EXACT(pcb, ipaddr)) + +/** @ingroup ip6addr + * Convert generic ip address to specific protocol version + */ +#define ip_2_ip6(ipaddr) (&((ipaddr)->u_addr.ip6)) +/** @ingroup ip4addr + * Convert generic ip address to specific protocol version + */ +#define ip_2_ip4(ipaddr) (&((ipaddr)->u_addr.ip4)) + +/** @ingroup ip4addr */ +#define IP_ADDR4(ipaddr,a,b,c,d) do { IP4_ADDR(ip_2_ip4(ipaddr),a,b,c,d); \ + IP_SET_TYPE_VAL(*(ipaddr), IPADDR_TYPE_V4); } while(0) +/** @ingroup ip6addr */ +#define IP_ADDR6(ipaddr,i0,i1,i2,i3) do { IP6_ADDR(ip_2_ip6(ipaddr),i0,i1,i2,i3); \ + IP_SET_TYPE_VAL(*(ipaddr), IPADDR_TYPE_V6); } while(0) +/** @ingroup ip6addr */ +#define IP_ADDR6_HOST(ipaddr,i0,i1,i2,i3) IP_ADDR6(ipaddr,PP_HTONL(i0),PP_HTONL(i1),PP_HTONL(i2),PP_HTONL(i3)) + +#define ip_clear_no4(ipaddr) do { ip_2_ip6(ipaddr)->addr[1] = \ + ip_2_ip6(ipaddr)->addr[2] = \ + ip_2_ip6(ipaddr)->addr[3] = 0; \ + ip6_addr_clear_zone(ip_2_ip6(ipaddr)); }while(0) + +/** @ingroup ipaddr */ +#define ip_addr_copy(dest, src) do{ IP_SET_TYPE_VAL(dest, IP_GET_TYPE(&src)); if(IP_IS_V6_VAL(src)){ \ + ip6_addr_copy(*ip_2_ip6(&(dest)), *ip_2_ip6(&(src))); }else{ \ + ip4_addr_copy(*ip_2_ip4(&(dest)), *ip_2_ip4(&(src))); ip_clear_no4(&dest); }}while(0) +/** @ingroup ip6addr */ +#define ip_addr_copy_from_ip6(dest, src) do{ \ + ip6_addr_copy(*ip_2_ip6(&(dest)), src); IP_SET_TYPE_VAL(dest, IPADDR_TYPE_V6); }while(0) +/** @ingroup ip6addr */ +#define ip_addr_copy_from_ip6_packed(dest, src) do{ \ + ip6_addr_copy_from_packed(*ip_2_ip6(&(dest)), src); IP_SET_TYPE_VAL(dest, IPADDR_TYPE_V6); }while(0) +/** @ingroup ip4addr */ +#define ip_addr_copy_from_ip4(dest, src) do{ \ + ip4_addr_copy(*ip_2_ip4(&(dest)), src); IP_SET_TYPE_VAL(dest, IPADDR_TYPE_V4); ip_clear_no4(&dest); }while(0) +/** @ingroup ip4addr */ +#define ip_addr_set_ip4_u32(ipaddr, val) do{if(ipaddr){ip4_addr_set_u32(ip_2_ip4(ipaddr), val); \ + IP_SET_TYPE(ipaddr, IPADDR_TYPE_V4); ip_clear_no4(ipaddr); }}while(0) +/** @ingroup ip4addr */ +#define ip_addr_set_ip4_u32_val(ipaddr, val) do{ ip4_addr_set_u32(ip_2_ip4(&(ipaddr)), val); \ + IP_SET_TYPE_VAL(ipaddr, IPADDR_TYPE_V4); ip_clear_no4(&ipaddr); }while(0) +/** @ingroup ip4addr */ +#define ip_addr_get_ip4_u32(ipaddr) (((ipaddr) && IP_IS_V4(ipaddr)) ? \ + ip4_addr_get_u32(ip_2_ip4(ipaddr)) : 0) +/** @ingroup ipaddr */ +#define ip_addr_set(dest, src) do{ IP_SET_TYPE(dest, IP_GET_TYPE(src)); if(IP_IS_V6(src)){ \ + ip6_addr_set(ip_2_ip6(dest), ip_2_ip6(src)); }else{ \ + ip4_addr_set(ip_2_ip4(dest), ip_2_ip4(src)); ip_clear_no4(dest); }}while(0) +/** @ingroup ipaddr */ +#define ip_addr_set_ipaddr(dest, src) ip_addr_set(dest, src) +/** @ingroup ipaddr */ +#define ip_addr_set_zero(ipaddr) do{ \ + ip6_addr_set_zero(ip_2_ip6(ipaddr)); IP_SET_TYPE(ipaddr, 0); }while(0) +/** @ingroup ip5addr */ +#define ip_addr_set_zero_ip4(ipaddr) do{ \ + ip6_addr_set_zero(ip_2_ip6(ipaddr)); IP_SET_TYPE(ipaddr, IPADDR_TYPE_V4); }while(0) +/** @ingroup ip6addr */ +#define ip_addr_set_zero_ip6(ipaddr) do{ \ + ip6_addr_set_zero(ip_2_ip6(ipaddr)); IP_SET_TYPE(ipaddr, IPADDR_TYPE_V6); }while(0) +/** @ingroup ipaddr */ +#define ip_addr_set_any(is_ipv6, ipaddr) do{if(is_ipv6){ \ + ip6_addr_set_any(ip_2_ip6(ipaddr)); IP_SET_TYPE(ipaddr, IPADDR_TYPE_V6); }else{ \ + ip4_addr_set_any(ip_2_ip4(ipaddr)); IP_SET_TYPE(ipaddr, IPADDR_TYPE_V4); ip_clear_no4(ipaddr); }}while(0) +/** @ingroup ipaddr */ +#define ip_addr_set_any_val(is_ipv6, ipaddr) do{if(is_ipv6){ \ + ip6_addr_set_any(ip_2_ip6(&(ipaddr))); IP_SET_TYPE_VAL(ipaddr, IPADDR_TYPE_V6); }else{ \ + ip4_addr_set_any(ip_2_ip4(&(ipaddr))); IP_SET_TYPE_VAL(ipaddr, IPADDR_TYPE_V4); ip_clear_no4(&ipaddr); }}while(0) +/** @ingroup ipaddr */ +#define ip_addr_set_loopback(is_ipv6, ipaddr) do{if(is_ipv6){ \ + ip6_addr_set_loopback(ip_2_ip6(ipaddr)); IP_SET_TYPE(ipaddr, IPADDR_TYPE_V6); }else{ \ + ip4_addr_set_loopback(ip_2_ip4(ipaddr)); IP_SET_TYPE(ipaddr, IPADDR_TYPE_V4); ip_clear_no4(ipaddr); }}while(0) +/** @ingroup ipaddr */ +#define ip_addr_set_loopback_val(is_ipv6, ipaddr) do{if(is_ipv6){ \ + ip6_addr_set_loopback(ip_2_ip6(&(ipaddr))); IP_SET_TYPE_VAL(ipaddr, IPADDR_TYPE_V6); }else{ \ + ip4_addr_set_loopback(ip_2_ip4(&(ipaddr))); IP_SET_TYPE_VAL(ipaddr, IPADDR_TYPE_V4); ip_clear_no4(&ipaddr); }}while(0) +/** @ingroup ipaddr */ +#define ip_addr_set_hton(dest, src) do{if(IP_IS_V6(src)){ \ + ip6_addr_set_hton(ip_2_ip6(dest), ip_2_ip6(src)); IP_SET_TYPE(dest, IPADDR_TYPE_V6); }else{ \ + ip4_addr_set_hton(ip_2_ip4(dest), ip_2_ip4(src)); IP_SET_TYPE(dest, IPADDR_TYPE_V4); ip_clear_no4(ipaddr); }}while(0) +/** @ingroup ipaddr */ +#define ip_addr_get_network(target, host, netmask) do{if(IP_IS_V6(host)){ \ + ip4_addr_set_zero(ip_2_ip4(target)); IP_SET_TYPE(target, IPADDR_TYPE_V6); } else { \ + ip4_addr_get_network(ip_2_ip4(target), ip_2_ip4(host), ip_2_ip4(netmask)); IP_SET_TYPE(target, IPADDR_TYPE_V4); }}while(0) +/** @ingroup ipaddr */ +#define ip_addr_netcmp(addr1, addr2, mask) ((IP_IS_V6(addr1) && IP_IS_V6(addr2)) ? \ + 0 : \ + ip4_addr_netcmp(ip_2_ip4(addr1), ip_2_ip4(addr2), mask)) +/** @ingroup ipaddr */ +#define ip_addr_cmp(addr1, addr2) ((IP_GET_TYPE(addr1) != IP_GET_TYPE(addr2)) ? 0 : (IP_IS_V6_VAL(*(addr1)) ? \ + ip6_addr_cmp(ip_2_ip6(addr1), ip_2_ip6(addr2)) : \ + ip4_addr_cmp(ip_2_ip4(addr1), ip_2_ip4(addr2)))) +/** @ingroup ipaddr */ +#define ip_addr_cmp_zoneless(addr1, addr2) ((IP_GET_TYPE(addr1) != IP_GET_TYPE(addr2)) ? 0 : (IP_IS_V6_VAL(*(addr1)) ? \ + ip6_addr_cmp_zoneless(ip_2_ip6(addr1), ip_2_ip6(addr2)) : \ + ip4_addr_cmp(ip_2_ip4(addr1), ip_2_ip4(addr2)))) +/** @ingroup ipaddr */ +#define ip_addr_isany(ipaddr) (((ipaddr) == NULL) ? 1 : ((IP_IS_V6(ipaddr)) ? \ + ip6_addr_isany(ip_2_ip6(ipaddr)) : \ + ip4_addr_isany(ip_2_ip4(ipaddr)))) +/** @ingroup ipaddr */ +#define ip_addr_isany_val(ipaddr) ((IP_IS_V6_VAL(ipaddr)) ? \ + ip6_addr_isany_val(*ip_2_ip6(&(ipaddr))) : \ + ip4_addr_isany_val(*ip_2_ip4(&(ipaddr)))) +/** @ingroup ipaddr */ +#define ip_addr_isbroadcast(ipaddr, netif) ((IP_IS_V6(ipaddr)) ? \ + 0 : \ + ip4_addr_isbroadcast(ip_2_ip4(ipaddr), netif)) +/** @ingroup ipaddr */ +#define ip_addr_ismulticast(ipaddr) ((IP_IS_V6(ipaddr)) ? \ + ip6_addr_ismulticast(ip_2_ip6(ipaddr)) : \ + ip4_addr_ismulticast(ip_2_ip4(ipaddr))) +/** @ingroup ipaddr */ +#define ip_addr_isloopback(ipaddr) ((IP_IS_V6(ipaddr)) ? \ + ip6_addr_isloopback(ip_2_ip6(ipaddr)) : \ + ip4_addr_isloopback(ip_2_ip4(ipaddr))) +/** @ingroup ipaddr */ +#define ip_addr_islinklocal(ipaddr) ((IP_IS_V6(ipaddr)) ? \ + ip6_addr_islinklocal(ip_2_ip6(ipaddr)) : \ + ip4_addr_islinklocal(ip_2_ip4(ipaddr))) +#define ip_addr_debug_print(debug, ipaddr) do { if(IP_IS_V6(ipaddr)) { \ + ip6_addr_debug_print(debug, ip_2_ip6(ipaddr)); } else { \ + ip4_addr_debug_print(debug, ip_2_ip4(ipaddr)); }}while(0) +#define ip_addr_debug_print_val(debug, ipaddr) do { if(IP_IS_V6_VAL(ipaddr)) { \ + ip6_addr_debug_print_val(debug, *ip_2_ip6(&(ipaddr))); } else { \ + ip4_addr_debug_print_val(debug, *ip_2_ip4(&(ipaddr))); }}while(0) +char *ipaddr_ntoa(const ip_addr_t *addr); +char *ipaddr_ntoa_r(const ip_addr_t *addr, char *buf, int buflen); +int ipaddr_aton(const char *cp, ip_addr_t *addr); + +/** @ingroup ipaddr */ +#define IPADDR_STRLEN_MAX IP6ADDR_STRLEN_MAX + +/** @ingroup ipaddr */ +#define ip4_2_ipv4_mapped_ipv6(ip6addr, ip4addr) do { \ + (ip6addr)->addr[3] = (ip4addr)->addr; \ + (ip6addr)->addr[2] = PP_HTONL(0x0000FFFFUL); \ + (ip6addr)->addr[1] = 0; \ + (ip6addr)->addr[0] = 0; \ + ip6_addr_clear_zone(ip6addr); } while(0); + +/** @ingroup ipaddr */ +#define unmap_ipv4_mapped_ipv6(ip4addr, ip6addr) \ + (ip4addr)->addr = (ip6addr)->addr[3]; + +#define IP46_ADDR_ANY(type) (((type) == IPADDR_TYPE_V6)? IP6_ADDR_ANY : IP4_ADDR_ANY) + +#else /* LWIP_IPV4 && LWIP_IPV6 */ + +#define IP_ADDR_PCB_VERSION_MATCH(addr, pcb) 1 +#define IP_ADDR_PCB_VERSION_MATCH_EXACT(pcb, ipaddr) 1 + +#define ip_addr_set_any_val(is_ipv6, ipaddr) ip_addr_set_any(is_ipv6, &(ipaddr)) +#define ip_addr_set_loopback_val(is_ipv6, ipaddr) ip_addr_set_loopback(is_ipv6, &(ipaddr)) + +#if LWIP_IPV4 + +typedef ip4_addr_t ip_addr_t; +#define IPADDR4_INIT(u32val) { u32val } +#define IPADDR4_INIT_BYTES(a,b,c,d) IPADDR4_INIT(PP_HTONL(LWIP_MAKEU32(a,b,c,d))) +#define IP_IS_V4_VAL(ipaddr) 1 +#define IP_IS_V6_VAL(ipaddr) 0 +#define IP_IS_V4(ipaddr) 1 +#define IP_IS_V6(ipaddr) 0 +#define IP_IS_ANY_TYPE_VAL(ipaddr) 0 +#define IP_SET_TYPE_VAL(ipaddr, iptype) +#define IP_SET_TYPE(ipaddr, iptype) +#define IP_GET_TYPE(ipaddr) IPADDR_TYPE_V4 +#define IP_ADDR_RAW_SIZE(ipaddr) sizeof(ip4_addr_t) +#define ip_2_ip4(ipaddr) (ipaddr) +#define IP_ADDR4(ipaddr,a,b,c,d) IP4_ADDR(ipaddr,a,b,c,d) + +#define ip_addr_copy(dest, src) ip4_addr_copy(dest, src) +#define ip_addr_copy_from_ip4(dest, src) ip4_addr_copy(dest, src) +#define ip_addr_set_ip4_u32(ipaddr, val) ip4_addr_set_u32(ip_2_ip4(ipaddr), val) +#define ip_addr_set_ip4_u32_val(ipaddr, val) ip_addr_set_ip4_u32(&(ipaddr), val) +#define ip_addr_get_ip4_u32(ipaddr) ip4_addr_get_u32(ip_2_ip4(ipaddr)) +#define ip_addr_set(dest, src) ip4_addr_set(dest, src) +#define ip_addr_set_ipaddr(dest, src) ip4_addr_set(dest, src) +#define ip_addr_set_zero(ipaddr) ip4_addr_set_zero(ipaddr) +#define ip_addr_set_zero_ip4(ipaddr) ip4_addr_set_zero(ipaddr) +#define ip_addr_set_any(is_ipv6, ipaddr) ip4_addr_set_any(ipaddr) +#define ip_addr_set_loopback(is_ipv6, ipaddr) ip4_addr_set_loopback(ipaddr) +#define ip_addr_set_hton(dest, src) ip4_addr_set_hton(dest, src) +#define ip_addr_get_network(target, host, mask) ip4_addr_get_network(target, host, mask) +#define ip_addr_netcmp(addr1, addr2, mask) ip4_addr_netcmp(addr1, addr2, mask) +#define ip_addr_cmp(addr1, addr2) ip4_addr_cmp(addr1, addr2) +#define ip_addr_isany(ipaddr) ip4_addr_isany(ipaddr) +#define ip_addr_isany_val(ipaddr) ip4_addr_isany_val(ipaddr) +#define ip_addr_isloopback(ipaddr) ip4_addr_isloopback(ipaddr) +#define ip_addr_islinklocal(ipaddr) ip4_addr_islinklocal(ipaddr) +#define ip_addr_isbroadcast(addr, netif) ip4_addr_isbroadcast(addr, netif) +#define ip_addr_ismulticast(ipaddr) ip4_addr_ismulticast(ipaddr) +#define ip_addr_debug_print(debug, ipaddr) ip4_addr_debug_print(debug, ipaddr) +#define ip_addr_debug_print_val(debug, ipaddr) ip4_addr_debug_print_val(debug, ipaddr) +#define ipaddr_ntoa(ipaddr) ip4addr_ntoa(ipaddr) +#define ipaddr_ntoa_r(ipaddr, buf, buflen) ip4addr_ntoa_r(ipaddr, buf, buflen) +#define ipaddr_aton(cp, addr) ip4addr_aton(cp, addr) + +#define IPADDR_STRLEN_MAX IP4ADDR_STRLEN_MAX + +#define IP46_ADDR_ANY(type) (IP4_ADDR_ANY) + +#else /* LWIP_IPV4 */ + +typedef ip6_addr_t ip_addr_t; +#define IPADDR6_INIT(a, b, c, d) { { a, b, c, d } IPADDR6_ZONE_INIT } +#define IPADDR6_INIT_HOST(a, b, c, d) { { PP_HTONL(a), PP_HTONL(b), PP_HTONL(c), PP_HTONL(d) } IPADDR6_ZONE_INIT } +#define IP_IS_V4_VAL(ipaddr) 0 +#define IP_IS_V6_VAL(ipaddr) 1 +#define IP_IS_V4(ipaddr) 0 +#define IP_IS_V6(ipaddr) 1 +#define IP_IS_ANY_TYPE_VAL(ipaddr) 0 +#define IP_SET_TYPE_VAL(ipaddr, iptype) +#define IP_SET_TYPE(ipaddr, iptype) +#define IP_GET_TYPE(ipaddr) IPADDR_TYPE_V6 +#define IP_ADDR_RAW_SIZE(ipaddr) sizeof(ip6_addr_t) +#define ip_2_ip6(ipaddr) (ipaddr) +#define IP_ADDR6(ipaddr,i0,i1,i2,i3) IP6_ADDR(ipaddr,i0,i1,i2,i3) +#define IP_ADDR6_HOST(ipaddr,i0,i1,i2,i3) IP_ADDR6(ipaddr,PP_HTONL(i0),PP_HTONL(i1),PP_HTONL(i2),PP_HTONL(i3)) + +#define ip_addr_copy(dest, src) ip6_addr_copy(dest, src) +#define ip_addr_copy_from_ip6(dest, src) ip6_addr_copy(dest, src) +#define ip_addr_copy_from_ip6_packed(dest, src) ip6_addr_copy_from_packed(dest, src) +#define ip_addr_set(dest, src) ip6_addr_set(dest, src) +#define ip_addr_set_ipaddr(dest, src) ip6_addr_set(dest, src) +#define ip_addr_set_zero(ipaddr) ip6_addr_set_zero(ipaddr) +#define ip_addr_set_zero_ip6(ipaddr) ip6_addr_set_zero(ipaddr) +#define ip_addr_set_any(is_ipv6, ipaddr) ip6_addr_set_any(ipaddr) +#define ip_addr_set_loopback(is_ipv6, ipaddr) ip6_addr_set_loopback(ipaddr) +#define ip_addr_set_hton(dest, src) ip6_addr_set_hton(dest, src) +#define ip_addr_get_network(target, host, mask) ip6_addr_set_zero(target) +#define ip_addr_netcmp(addr1, addr2, mask) 0 +#define ip_addr_cmp(addr1, addr2) ip6_addr_cmp(addr1, addr2) +#define ip_addr_cmp_zoneless(addr1, addr2) ip6_addr_cmp_zoneless(addr1, addr2) +#define ip_addr_isany(ipaddr) ip6_addr_isany(ipaddr) +#define ip_addr_isany_val(ipaddr) ip6_addr_isany_val(ipaddr) +#define ip_addr_isloopback(ipaddr) ip6_addr_isloopback(ipaddr) +#define ip_addr_islinklocal(ipaddr) ip6_addr_islinklocal(ipaddr) +#define ip_addr_isbroadcast(addr, netif) 0 +#define ip_addr_ismulticast(ipaddr) ip6_addr_ismulticast(ipaddr) +#define ip_addr_debug_print(debug, ipaddr) ip6_addr_debug_print(debug, ipaddr) +#define ip_addr_debug_print_val(debug, ipaddr) ip6_addr_debug_print_val(debug, ipaddr) +#define ipaddr_ntoa(ipaddr) ip6addr_ntoa(ipaddr) +#define ipaddr_ntoa_r(ipaddr, buf, buflen) ip6addr_ntoa_r(ipaddr, buf, buflen) +#define ipaddr_aton(cp, addr) ip6addr_aton(cp, addr) + +#define IPADDR_STRLEN_MAX IP6ADDR_STRLEN_MAX + +#define IP46_ADDR_ANY(type) (IP6_ADDR_ANY) + +#endif /* LWIP_IPV4 */ +#endif /* LWIP_IPV4 && LWIP_IPV6 */ + +#if LWIP_IPV4 + +extern const ip_addr_t ip_addr_any; +extern const ip_addr_t ip_addr_broadcast; + +/** + * @ingroup ip4addr + * Can be used as a fixed/const ip_addr_t + * for the IP wildcard. + * Defined to @ref IP4_ADDR_ANY when IPv4 is enabled. + * Defined to @ref IP6_ADDR_ANY in IPv6 only systems. + * Use this if you can handle IPv4 _AND_ IPv6 addresses. + * Use @ref IP4_ADDR_ANY or @ref IP6_ADDR_ANY when the IP + * type matters. + */ +#define IP_ADDR_ANY IP4_ADDR_ANY +/** + * @ingroup ip4addr + * Can be used as a fixed/const ip_addr_t + * for the IPv4 wildcard and the broadcast address + */ +#define IP4_ADDR_ANY (&ip_addr_any) +/** + * @ingroup ip4addr + * Can be used as a fixed/const ip4_addr_t + * for the wildcard and the broadcast address + */ +#define IP4_ADDR_ANY4 (ip_2_ip4(&ip_addr_any)) + +/** @ingroup ip4addr */ +#define IP_ADDR_BROADCAST (&ip_addr_broadcast) +/** @ingroup ip4addr */ +#define IP4_ADDR_BROADCAST (ip_2_ip4(&ip_addr_broadcast)) + +#endif /* LWIP_IPV4*/ + +#if LWIP_IPV6 + +extern const ip_addr_t ip6_addr_any; + +/** + * @ingroup ip6addr + * IP6_ADDR_ANY can be used as a fixed ip_addr_t + * for the IPv6 wildcard address + */ +#define IP6_ADDR_ANY (&ip6_addr_any) +/** + * @ingroup ip6addr + * IP6_ADDR_ANY6 can be used as a fixed ip6_addr_t + * for the IPv6 wildcard address + */ +#define IP6_ADDR_ANY6 (ip_2_ip6(&ip6_addr_any)) + +#if !LWIP_IPV4 +/** IPv6-only configurations */ +#define IP_ADDR_ANY IP6_ADDR_ANY +#endif /* !LWIP_IPV4 */ + +#endif + +#if LWIP_IPV4 && LWIP_IPV6 +/** @ingroup ipaddr */ +#define IP_ANY_TYPE (&ip_addr_any_type) +#else +#define IP_ANY_TYPE IP_ADDR_ANY +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_IP_ADDR_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/mem.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/mem.h new file mode 100644 index 0000000000000000000000000000000000000000..ff208d25c327f758f7e4bde952fb667cde3f2e60 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/mem.h @@ -0,0 +1,82 @@ +/** + * @file + * Heap API + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef LWIP_HDR_MEM_H +#define LWIP_HDR_MEM_H + +#include "lwip/opt.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#if MEM_LIBC_MALLOC + +#include "lwip/arch.h" + +typedef size_t mem_size_t; +#define MEM_SIZE_F SZT_F + +#elif MEM_USE_POOLS + +typedef u16_t mem_size_t; +#define MEM_SIZE_F U16_F + +#else + +/* MEM_SIZE would have to be aligned, but using 64000 here instead of + * 65535 leaves some room for alignment... + */ +#if MEM_SIZE > 64000L +typedef u32_t mem_size_t; +#define MEM_SIZE_F U32_F +#else +typedef u16_t mem_size_t; +#define MEM_SIZE_F U16_F +#endif /* MEM_SIZE > 64000 */ +#endif + +void mem_init(void); +void *mem_trim(void *mem, mem_size_t size); +void *mem_malloc(mem_size_t size); +void *mem_calloc(mem_size_t count, mem_size_t size); +void mem_free(void *mem); + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_MEM_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/memp.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/memp.h new file mode 100644 index 0000000000000000000000000000000000000000..1630b26c2ce3c04f965748964afae131521b6384 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/memp.h @@ -0,0 +1,155 @@ +/** + * @file + * Memory pool API + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#ifndef LWIP_HDR_MEMP_H +#define LWIP_HDR_MEMP_H + +#include "lwip/opt.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* run once with empty definition to handle all custom includes in lwippools.h */ +#define LWIP_MEMPOOL(name,num,size,desc) +#include "lwip/priv/memp_std.h" + +/** Create the list of all memory pools managed by memp. MEMP_MAX represents a NULL pool at the end */ +typedef enum { +#define LWIP_MEMPOOL(name,num,size,desc) MEMP_##name, +#include "lwip/priv/memp_std.h" + MEMP_MAX +} memp_t; + +#include "lwip/priv/memp_priv.h" +#include "lwip/stats.h" + +extern const struct memp_desc* const memp_pools[MEMP_MAX]; + +/** + * @ingroup mempool + * Declare prototype for private memory pool if it is used in multiple files + */ +#define LWIP_MEMPOOL_PROTOTYPE(name) extern const struct memp_desc memp_ ## name + +#if MEMP_MEM_MALLOC + +#define LWIP_MEMPOOL_DECLARE(name,num,size,desc) \ + LWIP_MEMPOOL_DECLARE_STATS_INSTANCE(memp_stats_ ## name) \ + const struct memp_desc memp_ ## name = { \ + DECLARE_LWIP_MEMPOOL_DESC(desc) \ + LWIP_MEMPOOL_DECLARE_STATS_REFERENCE(memp_stats_ ## name) \ + LWIP_MEM_ALIGN_SIZE(size) \ + }; + +#else /* MEMP_MEM_MALLOC */ + +/** + * @ingroup mempool + * Declare a private memory pool + * Private mempools example: + * .h: only when pool is used in multiple .c files: LWIP_MEMPOOL_PROTOTYPE(my_private_pool); + * .c: + * - in global variables section: LWIP_MEMPOOL_DECLARE(my_private_pool, 10, sizeof(foo), "Some description") + * - call ONCE before using pool (e.g. in some init() function): LWIP_MEMPOOL_INIT(my_private_pool); + * - allocate: void* my_new_mem = LWIP_MEMPOOL_ALLOC(my_private_pool); + * - free: LWIP_MEMPOOL_FREE(my_private_pool, my_new_mem); + * + * To relocate a pool, declare it as extern in cc.h. Example for GCC: + * extern u8_t \_\_attribute\_\_((section(".onchip_mem"))) memp_memory_my_private_pool_base[]; + */ +#define LWIP_MEMPOOL_DECLARE(name,num,size,desc) \ + LWIP_DECLARE_MEMORY_ALIGNED(memp_memory_ ## name ## _base, ((num) * (MEMP_SIZE + MEMP_ALIGN_SIZE(size)))); \ + \ + LWIP_MEMPOOL_DECLARE_STATS_INSTANCE(memp_stats_ ## name) \ + \ + static struct memp *memp_tab_ ## name; \ + \ + const struct memp_desc memp_ ## name = { \ + DECLARE_LWIP_MEMPOOL_DESC(desc) \ + LWIP_MEMPOOL_DECLARE_STATS_REFERENCE(memp_stats_ ## name) \ + LWIP_MEM_ALIGN_SIZE(size), \ + (num), \ + memp_memory_ ## name ## _base, \ + &memp_tab_ ## name \ + }; + +#endif /* MEMP_MEM_MALLOC */ + +/** + * @ingroup mempool + * Initialize a private memory pool + */ +#define LWIP_MEMPOOL_INIT(name) memp_init_pool(&memp_ ## name) +/** + * @ingroup mempool + * Allocate from a private memory pool + */ +#define LWIP_MEMPOOL_ALLOC(name) memp_malloc_pool(&memp_ ## name) +/** + * @ingroup mempool + * Free element from a private memory pool + */ +#define LWIP_MEMPOOL_FREE(name, x) memp_free_pool(&memp_ ## name, (x)) + +#if MEM_USE_POOLS +/** This structure is used to save the pool one element came from. + * This has to be defined here as it is required for pool size calculation. */ +struct memp_malloc_helper +{ + memp_t poolnr; +#if MEMP_OVERFLOW_CHECK || (LWIP_STATS && MEM_STATS) + u16_t size; +#endif /* MEMP_OVERFLOW_CHECK || (LWIP_STATS && MEM_STATS) */ +}; +#endif /* MEM_USE_POOLS */ + +void memp_init(void); + +#if MEMP_OVERFLOW_CHECK +void *memp_malloc_fn(memp_t type, const char* file, const int line); +#define memp_malloc(t) memp_malloc_fn((t), __FILE__, __LINE__) +#else +void *memp_malloc(memp_t type); +#endif +void memp_free(memp_t type, void *mem); + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_MEMP_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/mld6.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/mld6.h new file mode 100644 index 0000000000000000000000000000000000000000..7fa0797f272c93bbeb0ff051b82c3001aacd9600 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/mld6.h @@ -0,0 +1,99 @@ +/** + * @file + * + * Multicast listener discovery for IPv6. Aims to be compliant with RFC 2710. + * No support for MLDv2. + */ + +/* + * Copyright (c) 2010 Inico Technologies Ltd. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Ivan Delamer + * + * + * Please coordinate changes and requests with Ivan Delamer + * + */ + +#ifndef LWIP_HDR_MLD6_H +#define LWIP_HDR_MLD6_H + +#include "lwip/opt.h" + +#if LWIP_IPV6_MLD && LWIP_IPV6 /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/pbuf.h" +#include "lwip/netif.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** MLD group */ +struct mld_group { + /** next link */ + struct mld_group *next; + /** multicast address */ + ip6_addr_t group_address; + /** signifies we were the last person to report */ + u8_t last_reporter_flag; + /** current state of the group */ + u8_t group_state; + /** timer for reporting */ + u16_t timer; + /** counter of simultaneous uses */ + u8_t use; +}; + +#define MLD6_TMR_INTERVAL 100 /* Milliseconds */ + +err_t mld6_stop(struct netif *netif); +void mld6_report_groups(struct netif *netif); +void mld6_tmr(void); +struct mld_group *mld6_lookfor_group(struct netif *ifp, const ip6_addr_t *addr); +void mld6_input(struct pbuf *p, struct netif *inp); +err_t mld6_joingroup(const ip6_addr_t *srcaddr, const ip6_addr_t *groupaddr); +err_t mld6_joingroup_netif(struct netif *netif, const ip6_addr_t *groupaddr); +err_t mld6_leavegroup(const ip6_addr_t *srcaddr, const ip6_addr_t *groupaddr); +err_t mld6_leavegroup_netif(struct netif *netif, const ip6_addr_t *groupaddr); + +/** @ingroup mld6 + * Get list head of MLD6 groups for netif. + * Note: The allnodes group IP is NOT in the list, since it must always + * be received for correct IPv6 operation. + * @see @ref netif_set_mld_mac_filter() + */ +#define netif_mld6_data(netif) ((struct mld_group *)netif_get_client_data(netif, LWIP_NETIF_CLIENT_DATA_INDEX_MLD6)) + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_IPV6_MLD && LWIP_IPV6 */ + +#endif /* LWIP_HDR_MLD6_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/nd6.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/nd6.h new file mode 100644 index 0000000000000000000000000000000000000000..c30e624f02aa658169f09b34e81c280a448ab370 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/nd6.h @@ -0,0 +1,90 @@ +/** + * @file + * + * Neighbor discovery and stateless address autoconfiguration for IPv6. + * Aims to be compliant with RFC 4861 (Neighbor discovery) and RFC 4862 + * (Address autoconfiguration). + */ + +/* + * Copyright (c) 2010 Inico Technologies Ltd. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Ivan Delamer + * + * + * Please coordinate changes and requests with Ivan Delamer + * + */ + +#ifndef LWIP_HDR_ND6_H +#define LWIP_HDR_ND6_H + +#include "lwip/opt.h" + +#if LWIP_IPV6 /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/ip6_addr.h" +#include "lwip/err.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** 1 second period */ +#define ND6_TMR_INTERVAL 1000 + +/** Router solicitations are sent in 4 second intervals (see RFC 4861, ch. 6.3.7) */ +#ifndef ND6_RTR_SOLICITATION_INTERVAL +#define ND6_RTR_SOLICITATION_INTERVAL 4000 +#endif + +struct pbuf; +struct netif; + +void nd6_tmr(void); +void nd6_input(struct pbuf *p, struct netif *inp); +void nd6_clear_destination_cache(void); +struct netif *nd6_find_route(const ip6_addr_t *ip6addr); +err_t nd6_get_next_hop_addr_or_queue(struct netif *netif, struct pbuf *q, const ip6_addr_t *ip6addr, const u8_t **hwaddrp); +u16_t nd6_get_destination_mtu(const ip6_addr_t *ip6addr, struct netif *netif); +#if LWIP_ND6_TCP_REACHABILITY_HINTS +void nd6_reachability_hint(const ip6_addr_t *ip6addr); +#endif /* LWIP_ND6_TCP_REACHABILITY_HINTS */ +void nd6_cleanup_netif(struct netif *netif); +#if LWIP_IPV6_MLD +void nd6_adjust_mld_membership(struct netif *netif, s8_t addr_idx, u8_t new_state); +#endif /* LWIP_IPV6_MLD */ +void nd6_restart_netif(struct netif *netif); + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_IPV6 */ + +#endif /* LWIP_HDR_ND6_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/netbuf.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/netbuf.h new file mode 100644 index 0000000000000000000000000000000000000000..42a911bca38c49d4a204cdcab6b00903c4baaa33 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/netbuf.h @@ -0,0 +1,116 @@ +/** + * @file + * netbuf API (for netconn API) + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef LWIP_HDR_NETBUF_H +#define LWIP_HDR_NETBUF_H + +#include "lwip/opt.h" + +#if LWIP_NETCONN || LWIP_SOCKET /* don't build if not configured for use in lwipopts.h */ +/* Note: Netconn API is always available when sockets are enabled - + * sockets are implemented on top of them */ + +#include "lwip/pbuf.h" +#include "lwip/ip_addr.h" +#include "lwip/ip6_addr.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** This netbuf has dest-addr/port set */ +#define NETBUF_FLAG_DESTADDR 0x01 +/** This netbuf includes a checksum */ +#define NETBUF_FLAG_CHKSUM 0x02 + +/** "Network buffer" - contains data and addressing info */ +struct netbuf { + struct pbuf *p, *ptr; + ip_addr_t addr; + u16_t port; +#if LWIP_NETBUF_RECVINFO || LWIP_CHECKSUM_ON_COPY + u8_t flags; + u16_t toport_chksum; +#if LWIP_NETBUF_RECVINFO + ip_addr_t toaddr; +#endif /* LWIP_NETBUF_RECVINFO */ +#endif /* LWIP_NETBUF_RECVINFO || LWIP_CHECKSUM_ON_COPY */ +}; + +/* Network buffer functions: */ +struct netbuf * netbuf_new (void); +void netbuf_delete (struct netbuf *buf); +void * netbuf_alloc (struct netbuf *buf, u16_t size); +void netbuf_free (struct netbuf *buf); +err_t netbuf_ref (struct netbuf *buf, + const void *dataptr, u16_t size); +void netbuf_chain (struct netbuf *head, struct netbuf *tail); + +err_t netbuf_data (struct netbuf *buf, + void **dataptr, u16_t *len); +s8_t netbuf_next (struct netbuf *buf); +void netbuf_first (struct netbuf *buf); + + +#define netbuf_copy_partial(buf, dataptr, len, offset) \ + pbuf_copy_partial((buf)->p, (dataptr), (len), (offset)) +#define netbuf_copy(buf,dataptr,len) netbuf_copy_partial(buf, dataptr, len, 0) +#define netbuf_take(buf, dataptr, len) pbuf_take((buf)->p, dataptr, len) +#define netbuf_len(buf) ((buf)->p->tot_len) +#define netbuf_fromaddr(buf) (&((buf)->addr)) +#define netbuf_set_fromaddr(buf, fromaddr) ip_addr_set(&((buf)->addr), fromaddr) +#define netbuf_fromport(buf) ((buf)->port) +#if LWIP_NETBUF_RECVINFO +#define netbuf_destaddr(buf) (&((buf)->toaddr)) +#define netbuf_set_destaddr(buf, destaddr) ip_addr_set(&((buf)->toaddr), destaddr) +#if LWIP_CHECKSUM_ON_COPY +#define netbuf_destport(buf) (((buf)->flags & NETBUF_FLAG_DESTADDR) ? (buf)->toport_chksum : 0) +#else /* LWIP_CHECKSUM_ON_COPY */ +#define netbuf_destport(buf) ((buf)->toport_chksum) +#endif /* LWIP_CHECKSUM_ON_COPY */ +#endif /* LWIP_NETBUF_RECVINFO */ +#if LWIP_CHECKSUM_ON_COPY +#define netbuf_set_chksum(buf, chksum) do { (buf)->flags = NETBUF_FLAG_CHKSUM; \ + (buf)->toport_chksum = chksum; } while(0) +#endif /* LWIP_CHECKSUM_ON_COPY */ + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_NETCONN || LWIP_SOCKET */ + +#endif /* LWIP_HDR_NETBUF_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/netdb.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/netdb.h new file mode 100644 index 0000000000000000000000000000000000000000..d3d15dfac5ad0b1eb44ba3aa7043cd9fe84831ab --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/netdb.h @@ -0,0 +1,150 @@ +/** + * @file + * NETDB API (sockets) + */ + +/* + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Simon Goldschmidt + * + */ +#ifndef LWIP_HDR_NETDB_H +#define LWIP_HDR_NETDB_H + +#include "lwip/opt.h" + +#if LWIP_DNS && LWIP_SOCKET + +#include "lwip/arch.h" +#include "lwip/inet.h" +#include "lwip/sockets.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* some rarely used options */ +#ifndef LWIP_DNS_API_DECLARE_H_ERRNO +#define LWIP_DNS_API_DECLARE_H_ERRNO 1 +#endif + +#ifndef LWIP_DNS_API_DEFINE_ERRORS +#define LWIP_DNS_API_DEFINE_ERRORS 1 +#endif + +#ifndef LWIP_DNS_API_DEFINE_FLAGS +#define LWIP_DNS_API_DEFINE_FLAGS 1 +#endif + +#ifndef LWIP_DNS_API_DECLARE_STRUCTS +#define LWIP_DNS_API_DECLARE_STRUCTS 1 +#endif + +#if LWIP_DNS_API_DEFINE_ERRORS +/** Errors used by the DNS API functions, h_errno can be one of them */ +#define EAI_NONAME 200 +#define EAI_SERVICE 201 +#define EAI_FAIL 202 +#define EAI_MEMORY 203 +#define EAI_FAMILY 204 + +#define HOST_NOT_FOUND 210 +#define NO_DATA 211 +#define NO_RECOVERY 212 +#define TRY_AGAIN 213 +#endif /* LWIP_DNS_API_DEFINE_ERRORS */ + +#if LWIP_DNS_API_DEFINE_FLAGS +/* input flags for struct addrinfo */ +#define AI_PASSIVE 0x01 +#define AI_CANONNAME 0x02 +#define AI_NUMERICHOST 0x04 +#define AI_NUMERICSERV 0x08 +#define AI_V4MAPPED 0x10 +#define AI_ALL 0x20 +#define AI_ADDRCONFIG 0x40 +#endif /* LWIP_DNS_API_DEFINE_FLAGS */ + +#if LWIP_DNS_API_DECLARE_STRUCTS +struct hostent { + char *h_name; /* Official name of the host. */ + char **h_aliases; /* A pointer to an array of pointers to alternative host names, + terminated by a null pointer. */ + int h_addrtype; /* Address type. */ + int h_length; /* The length, in bytes, of the address. */ + char **h_addr_list; /* A pointer to an array of pointers to network addresses (in + network byte order) for the host, terminated by a null pointer. */ +#define h_addr h_addr_list[0] /* for backward compatibility */ +}; + +struct addrinfo { + int ai_flags; /* Input flags. */ + int ai_family; /* Address family of socket. */ + int ai_socktype; /* Socket type. */ + int ai_protocol; /* Protocol of socket. */ + socklen_t ai_addrlen; /* Length of socket address. */ + struct sockaddr *ai_addr; /* Socket address of socket. */ + char *ai_canonname; /* Canonical name of service location. */ + struct addrinfo *ai_next; /* Pointer to next in list. */ +}; +#endif /* LWIP_DNS_API_DECLARE_STRUCTS */ + +#define NETDB_ELEM_SIZE (sizeof(struct addrinfo) + sizeof(struct sockaddr_storage) + DNS_MAX_NAME_LENGTH + 1) + +#if LWIP_DNS_API_DECLARE_H_ERRNO +/* application accessible error code set by the DNS API functions */ +extern int h_errno; +#endif /* LWIP_DNS_API_DECLARE_H_ERRNO*/ + +struct hostent *lwip_gethostbyname(const char *name); +int lwip_gethostbyname_r(const char *name, struct hostent *ret, char *buf, + size_t buflen, struct hostent **result, int *h_errnop); +void lwip_freeaddrinfo(struct addrinfo *ai); +int lwip_getaddrinfo(const char *nodename, + const char *servname, + const struct addrinfo *hints, + struct addrinfo **res); + +#if LWIP_COMPAT_SOCKETS +/** @ingroup netdbapi */ +#define gethostbyname(name) lwip_gethostbyname(name) +/** @ingroup netdbapi */ +#define gethostbyname_r(name, ret, buf, buflen, result, h_errnop) \ + lwip_gethostbyname_r(name, ret, buf, buflen, result, h_errnop) +/** @ingroup netdbapi */ +#define freeaddrinfo(addrinfo) lwip_freeaddrinfo(addrinfo) +/** @ingroup netdbapi */ +#define getaddrinfo(nodname, servname, hints, res) \ + lwip_getaddrinfo(nodname, servname, hints, res) +#endif /* LWIP_COMPAT_SOCKETS */ + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_DNS && LWIP_SOCKET */ + +#endif /* LWIP_HDR_NETDB_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/netif.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/netif.h new file mode 100644 index 0000000000000000000000000000000000000000..911196ab3d02f8eddbb8237ff090aa4ba794d4f2 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/netif.h @@ -0,0 +1,669 @@ +/** + * @file + * netif API (to be used from TCPIP thread) + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef LWIP_HDR_NETIF_H +#define LWIP_HDR_NETIF_H + +#include "lwip/opt.h" + +#define ENABLE_LOOPBACK (LWIP_NETIF_LOOPBACK || LWIP_HAVE_LOOPIF) + +#include "lwip/err.h" + +#include "lwip/ip_addr.h" + +#include "lwip/def.h" +#include "lwip/pbuf.h" +#include "lwip/stats.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Throughout this file, IP addresses are expected to be in + * the same byte order as in IP_PCB. */ + +/** Must be the maximum of all used hardware address lengths + across all types of interfaces in use. + This does not have to be changed, normally. */ +#ifndef NETIF_MAX_HWADDR_LEN +#define NETIF_MAX_HWADDR_LEN 6U +#endif + +/** The size of a fully constructed netif name which the + * netif can be identified by in APIs. Composed of + * 2 chars, 3 (max) digits, and 1 \0 + */ +#define NETIF_NAMESIZE 6 + +/** + * @defgroup netif_flags Flags + * @ingroup netif + * @{ + */ + +/** Whether the network interface is 'up'. This is + * a software flag used to control whether this network + * interface is enabled and processes traffic. + * It must be set by the startup code before this netif can be used + * (also for dhcp/autoip). + */ +#define NETIF_FLAG_UP 0x01U +/** If set, the netif has broadcast capability. + * Set by the netif driver in its init function. */ +#define NETIF_FLAG_BROADCAST 0x02U +/** If set, the interface has an active link + * (set by the network interface driver). + * Either set by the netif driver in its init function (if the link + * is up at that time) or at a later point once the link comes up + * (if link detection is supported by the hardware). */ +#define NETIF_FLAG_LINK_UP 0x04U +/** If set, the netif is an ethernet device using ARP. + * Set by the netif driver in its init function. + * Used to check input packet types and use of DHCP. */ +#define NETIF_FLAG_ETHARP 0x08U +/** If set, the netif is an ethernet device. It might not use + * ARP or TCP/IP if it is used for PPPoE only. + */ +#define NETIF_FLAG_ETHERNET 0x10U +/** If set, the netif has IGMP capability. + * Set by the netif driver in its init function. */ +#define NETIF_FLAG_IGMP 0x20U +/** If set, the netif has MLD6 capability. + * Set by the netif driver in its init function. */ +#define NETIF_FLAG_MLD6 0x40U + +/** + * @} + */ + +enum lwip_internal_netif_client_data_index +{ +#if LWIP_IPV4 +#if LWIP_DHCP + LWIP_NETIF_CLIENT_DATA_INDEX_DHCP, +#endif +#if LWIP_AUTOIP + LWIP_NETIF_CLIENT_DATA_INDEX_AUTOIP, +#endif +#if LWIP_IGMP + LWIP_NETIF_CLIENT_DATA_INDEX_IGMP, +#endif +#endif /* LWIP_IPV4 */ +#if LWIP_IPV6 +#if LWIP_IPV6_DHCP6 + LWIP_NETIF_CLIENT_DATA_INDEX_DHCP6, +#endif +#if LWIP_IPV6_MLD + LWIP_NETIF_CLIENT_DATA_INDEX_MLD6, +#endif +#endif /* LWIP_IPV6 */ + LWIP_NETIF_CLIENT_DATA_INDEX_MAX +}; + +#if LWIP_CHECKSUM_CTRL_PER_NETIF +#define NETIF_CHECKSUM_GEN_IP 0x0001 +#define NETIF_CHECKSUM_GEN_UDP 0x0002 +#define NETIF_CHECKSUM_GEN_TCP 0x0004 +#define NETIF_CHECKSUM_GEN_ICMP 0x0008 +#define NETIF_CHECKSUM_GEN_ICMP6 0x0010 +#define NETIF_CHECKSUM_CHECK_IP 0x0100 +#define NETIF_CHECKSUM_CHECK_UDP 0x0200 +#define NETIF_CHECKSUM_CHECK_TCP 0x0400 +#define NETIF_CHECKSUM_CHECK_ICMP 0x0800 +#define NETIF_CHECKSUM_CHECK_ICMP6 0x1000 +#define NETIF_CHECKSUM_ENABLE_ALL 0xFFFF +#define NETIF_CHECKSUM_DISABLE_ALL 0x0000 +#endif /* LWIP_CHECKSUM_CTRL_PER_NETIF */ + +struct netif; + +/** MAC Filter Actions, these are passed to a netif's igmp_mac_filter or + * mld_mac_filter callback function. */ +enum netif_mac_filter_action { + /** Delete a filter entry */ + NETIF_DEL_MAC_FILTER = 0, + /** Add a filter entry */ + NETIF_ADD_MAC_FILTER = 1 +}; + +/** Function prototype for netif init functions. Set up flags and output/linkoutput + * callback functions in this function. + * + * @param netif The netif to initialize + */ +typedef err_t (*netif_init_fn)(struct netif *netif); +/** Function prototype for netif->input functions. This function is saved as 'input' + * callback function in the netif struct. Call it when a packet has been received. + * + * @param p The received packet, copied into a pbuf + * @param inp The netif which received the packet + * @return ERR_OK if the packet was handled + * != ERR_OK is the packet was NOT handled, in this case, the caller has + * to free the pbuf + */ +typedef err_t (*netif_input_fn)(struct pbuf *p, struct netif *inp); + +#if LWIP_IPV4 +/** Function prototype for netif->output functions. Called by lwIP when a packet + * shall be sent. For ethernet netif, set this to 'etharp_output' and set + * 'linkoutput'. + * + * @param netif The netif which shall send a packet + * @param p The packet to send (p->payload points to IP header) + * @param ipaddr The IP address to which the packet shall be sent + */ +typedef err_t (*netif_output_fn)(struct netif *netif, struct pbuf *p, + const ip4_addr_t *ipaddr); +#endif /* LWIP_IPV4*/ + +#if LWIP_IPV6 +/** Function prototype for netif->output_ip6 functions. Called by lwIP when a packet + * shall be sent. For ethernet netif, set this to 'ethip6_output' and set + * 'linkoutput'. + * + * @param netif The netif which shall send a packet + * @param p The packet to send (p->payload points to IP header) + * @param ipaddr The IPv6 address to which the packet shall be sent + */ +typedef err_t (*netif_output_ip6_fn)(struct netif *netif, struct pbuf *p, + const ip6_addr_t *ipaddr); +#endif /* LWIP_IPV6 */ + +/** Function prototype for netif->linkoutput functions. Only used for ethernet + * netifs. This function is called by ARP when a packet shall be sent. + * + * @param netif The netif which shall send a packet + * @param p The packet to send (raw ethernet packet) + */ +typedef err_t (*netif_linkoutput_fn)(struct netif *netif, struct pbuf *p); +/** Function prototype for netif status- or link-callback functions. */ +typedef void (*netif_status_callback_fn)(struct netif *netif); +#if LWIP_IPV4 && LWIP_IGMP +/** Function prototype for netif igmp_mac_filter functions */ +typedef err_t (*netif_igmp_mac_filter_fn)(struct netif *netif, + const ip4_addr_t *group, enum netif_mac_filter_action action); +#endif /* LWIP_IPV4 && LWIP_IGMP */ +#if LWIP_IPV6 && LWIP_IPV6_MLD +/** Function prototype for netif mld_mac_filter functions */ +typedef err_t (*netif_mld_mac_filter_fn)(struct netif *netif, + const ip6_addr_t *group, enum netif_mac_filter_action action); +#endif /* LWIP_IPV6 && LWIP_IPV6_MLD */ + +#if LWIP_DHCP || LWIP_AUTOIP || LWIP_IGMP || LWIP_IPV6_MLD || LWIP_IPV6_DHCP6 || (LWIP_NUM_NETIF_CLIENT_DATA > 0) +#if LWIP_NUM_NETIF_CLIENT_DATA > 0 +u8_t netif_alloc_client_data_id(void); +#endif +/** @ingroup netif_cd + * Set client data. Obtain ID from netif_alloc_client_data_id(). + */ +#define netif_set_client_data(netif, id, data) netif_get_client_data(netif, id) = (data) +/** @ingroup netif_cd + * Get client data. Obtain ID from netif_alloc_client_data_id(). + */ +#define netif_get_client_data(netif, id) (netif)->client_data[(id)] +#endif + +#if (LWIP_IPV4 && LWIP_ARP && (ARP_TABLE_SIZE > 0x7f)) || (LWIP_IPV6 && (LWIP_ND6_NUM_DESTINATIONS > 0x7f)) +typedef u16_t netif_addr_idx_t; +#define NETIF_ADDR_IDX_MAX 0x7FFF +#else +typedef u8_t netif_addr_idx_t; +#define NETIF_ADDR_IDX_MAX 0x7F +#endif + +#if LWIP_NETIF_HWADDRHINT +#define LWIP_NETIF_USE_HINTS 1 +struct netif_hint { + netif_addr_idx_t addr_hint; +}; +#else /* LWIP_NETIF_HWADDRHINT */ +#define LWIP_NETIF_USE_HINTS 0 +#endif /* LWIP_NETIF_HWADDRHINT */ + +/** Generic data structure used for all lwIP network interfaces. + * The following fields should be filled in by the initialization + * function for the device driver: hwaddr_len, hwaddr[], mtu, flags */ +struct netif { +#if !LWIP_SINGLE_NETIF + /** pointer to next in linked list */ + struct netif *next; +#endif + +#if LWIP_IPV4 + /** IP address configuration in network byte order */ + ip_addr_t ip_addr; + ip_addr_t netmask; + ip_addr_t gw; +#endif /* LWIP_IPV4 */ +#if LWIP_IPV6 + /** Array of IPv6 addresses for this netif. */ + ip_addr_t ip6_addr[LWIP_IPV6_NUM_ADDRESSES]; + /** The state of each IPv6 address (Tentative, Preferred, etc). + * @see ip6_addr.h */ + u8_t ip6_addr_state[LWIP_IPV6_NUM_ADDRESSES]; +#if LWIP_IPV6_ADDRESS_LIFETIMES + /** Remaining valid and preferred lifetime of each IPv6 address, in seconds. + * For valid lifetimes, the special value of IP6_ADDR_LIFE_STATIC (0) + * indicates the address is static and has no lifetimes. */ + u32_t ip6_addr_valid_life[LWIP_IPV6_NUM_ADDRESSES]; + u32_t ip6_addr_pref_life[LWIP_IPV6_NUM_ADDRESSES]; +#endif /* LWIP_IPV6_ADDRESS_LIFETIMES */ +#endif /* LWIP_IPV6 */ + /** This function is called by the network device driver + * to pass a packet up the TCP/IP stack. */ + netif_input_fn input; +#if LWIP_IPV4 + /** This function is called by the IP module when it wants + * to send a packet on the interface. This function typically + * first resolves the hardware address, then sends the packet. + * For ethernet physical layer, this is usually etharp_output() */ + netif_output_fn output; +#endif /* LWIP_IPV4 */ + /** This function is called by ethernet_output() when it wants + * to send a packet on the interface. This function outputs + * the pbuf as-is on the link medium. */ + netif_linkoutput_fn linkoutput; +#if LWIP_IPV6 + /** This function is called by the IPv6 module when it wants + * to send a packet on the interface. This function typically + * first resolves the hardware address, then sends the packet. + * For ethernet physical layer, this is usually ethip6_output() */ + netif_output_ip6_fn output_ip6; +#endif /* LWIP_IPV6 */ +#if LWIP_NETIF_STATUS_CALLBACK + /** This function is called when the netif state is set to up or down + */ + netif_status_callback_fn status_callback; +#endif /* LWIP_NETIF_STATUS_CALLBACK */ +#if LWIP_NETIF_LINK_CALLBACK + /** This function is called when the netif link is set to up or down + */ + netif_status_callback_fn link_callback; +#endif /* LWIP_NETIF_LINK_CALLBACK */ +#if LWIP_NETIF_REMOVE_CALLBACK + /** This function is called when the netif has been removed */ + netif_status_callback_fn remove_callback; +#endif /* LWIP_NETIF_REMOVE_CALLBACK */ + /** This field can be set by the device driver and could point + * to state information for the device. */ + void *state; +#ifdef netif_get_client_data + void* client_data[LWIP_NETIF_CLIENT_DATA_INDEX_MAX + LWIP_NUM_NETIF_CLIENT_DATA]; +#endif +#if LWIP_NETIF_HOSTNAME + /* the hostname for this netif, NULL is a valid value */ + const char* hostname; +#endif /* LWIP_NETIF_HOSTNAME */ +#if LWIP_CHECKSUM_CTRL_PER_NETIF + u16_t chksum_flags; +#endif /* LWIP_CHECKSUM_CTRL_PER_NETIF*/ + /** maximum transfer unit (in bytes) */ + u16_t mtu; +#if LWIP_IPV6 && LWIP_ND6_ALLOW_RA_UPDATES + /** maximum transfer unit (in bytes), updated by RA */ + u16_t mtu6; +#endif /* LWIP_IPV6 && LWIP_ND6_ALLOW_RA_UPDATES */ + /** link level hardware address of this interface */ + u8_t hwaddr[NETIF_MAX_HWADDR_LEN]; + /** number of bytes used in hwaddr */ + u8_t hwaddr_len; + /** flags (@see @ref netif_flags) */ + u8_t flags; + /** descriptive abbreviation */ + char name[2]; + /** number of this interface. Used for @ref if_api and @ref netifapi_netif, + * as well as for IPv6 zones */ + u8_t num; +#if LWIP_IPV6_AUTOCONFIG + /** is this netif enabled for IPv6 autoconfiguration */ + u8_t ip6_autoconfig_enabled; +#endif /* LWIP_IPV6_AUTOCONFIG */ +#if LWIP_IPV6_SEND_ROUTER_SOLICIT + /** Number of Router Solicitation messages that remain to be sent. */ + u8_t rs_count; +#endif /* LWIP_IPV6_SEND_ROUTER_SOLICIT */ +#if MIB2_STATS + /** link type (from "snmp_ifType" enum from snmp_mib2.h) */ + u8_t link_type; + /** (estimate) link speed */ + u32_t link_speed; + /** timestamp at last change made (up/down) */ + u32_t ts; + /** counters */ + struct stats_mib2_netif_ctrs mib2_counters; +#endif /* MIB2_STATS */ +#if LWIP_IPV4 && LWIP_IGMP + /** This function could be called to add or delete an entry in the multicast + filter table of the ethernet MAC.*/ + netif_igmp_mac_filter_fn igmp_mac_filter; +#endif /* LWIP_IPV4 && LWIP_IGMP */ +#if LWIP_IPV6 && LWIP_IPV6_MLD + /** This function could be called to add or delete an entry in the IPv6 multicast + filter table of the ethernet MAC. */ + netif_mld_mac_filter_fn mld_mac_filter; +#endif /* LWIP_IPV6 && LWIP_IPV6_MLD */ +#if LWIP_NETIF_USE_HINTS + struct netif_hint *hints; +#endif /* LWIP_NETIF_USE_HINTS */ +#if ENABLE_LOOPBACK + /* List of packets to be queued for ourselves. */ + struct pbuf *loop_first; + struct pbuf *loop_last; +#if LWIP_LOOPBACK_MAX_PBUFS + u16_t loop_cnt_current; +#endif /* LWIP_LOOPBACK_MAX_PBUFS */ +#endif /* ENABLE_LOOPBACK */ +}; + +#if LWIP_CHECKSUM_CTRL_PER_NETIF +#define NETIF_SET_CHECKSUM_CTRL(netif, chksumflags) do { \ + (netif)->chksum_flags = chksumflags; } while(0) +#define IF__NETIF_CHECKSUM_ENABLED(netif, chksumflag) if (((netif) == NULL) || (((netif)->chksum_flags & (chksumflag)) != 0)) +#else /* LWIP_CHECKSUM_CTRL_PER_NETIF */ +#define NETIF_SET_CHECKSUM_CTRL(netif, chksumflags) +#define IF__NETIF_CHECKSUM_ENABLED(netif, chksumflag) +#endif /* LWIP_CHECKSUM_CTRL_PER_NETIF */ + +#if LWIP_SINGLE_NETIF +#define NETIF_FOREACH(netif) if (((netif) = netif_default) != NULL) +#else /* LWIP_SINGLE_NETIF */ +/** The list of network interfaces. */ +extern struct netif *netif_list; +#define NETIF_FOREACH(netif) for ((netif) = netif_list; (netif) != NULL; (netif) = (netif)->next) +#endif /* LWIP_SINGLE_NETIF */ +/** The default network interface. */ +extern struct netif *netif_default; + +void netif_init(void); + +struct netif *netif_add_noaddr(struct netif *netif, void *state, netif_init_fn init, netif_input_fn input); + +#if LWIP_IPV4 +struct netif *netif_add(struct netif *netif, + const ip4_addr_t *ipaddr, const ip4_addr_t *netmask, const ip4_addr_t *gw, + void *state, netif_init_fn init, netif_input_fn input); +void netif_set_addr(struct netif *netif, const ip4_addr_t *ipaddr, const ip4_addr_t *netmask, + const ip4_addr_t *gw); +#else /* LWIP_IPV4 */ +struct netif *netif_add(struct netif *netif, void *state, netif_init_fn init, netif_input_fn input); +#endif /* LWIP_IPV4 */ +void netif_remove(struct netif * netif); + +/* Returns a network interface given its name. The name is of the form + "et0", where the first two letters are the "name" field in the + netif structure, and the digit is in the num field in the same + structure. */ +struct netif *netif_find(const char *name); + +void netif_set_default(struct netif *netif); + +#if LWIP_IPV4 +void netif_set_ipaddr(struct netif *netif, const ip4_addr_t *ipaddr); +void netif_set_netmask(struct netif *netif, const ip4_addr_t *netmask); +void netif_set_gw(struct netif *netif, const ip4_addr_t *gw); +/** @ingroup netif_ip4 */ +#define netif_ip4_addr(netif) ((const ip4_addr_t*)ip_2_ip4(&((netif)->ip_addr))) +/** @ingroup netif_ip4 */ +#define netif_ip4_netmask(netif) ((const ip4_addr_t*)ip_2_ip4(&((netif)->netmask))) +/** @ingroup netif_ip4 */ +#define netif_ip4_gw(netif) ((const ip4_addr_t*)ip_2_ip4(&((netif)->gw))) +/** @ingroup netif_ip4 */ +#define netif_ip_addr4(netif) ((const ip_addr_t*)&((netif)->ip_addr)) +/** @ingroup netif_ip4 */ +#define netif_ip_netmask4(netif) ((const ip_addr_t*)&((netif)->netmask)) +/** @ingroup netif_ip4 */ +#define netif_ip_gw4(netif) ((const ip_addr_t*)&((netif)->gw)) +#endif /* LWIP_IPV4 */ + +#define netif_set_flags(netif, set_flags) do { (netif)->flags = (u8_t)((netif)->flags | (set_flags)); } while(0) +#define netif_clear_flags(netif, clr_flags) do { (netif)->flags = (u8_t)((netif)->flags & (u8_t)(~(clr_flags) & 0xff)); } while(0) +#define netif_is_flag_set(nefif, flag) (((netif)->flags & (flag)) != 0) + +void netif_set_up(struct netif *netif); +void netif_set_down(struct netif *netif); +/** @ingroup netif + * Ask if an interface is up + */ +#define netif_is_up(netif) (((netif)->flags & NETIF_FLAG_UP) ? (u8_t)1 : (u8_t)0) + +#if LWIP_NETIF_STATUS_CALLBACK +void netif_set_status_callback(struct netif *netif, netif_status_callback_fn status_callback); +#endif /* LWIP_NETIF_STATUS_CALLBACK */ +#if LWIP_NETIF_REMOVE_CALLBACK +void netif_set_remove_callback(struct netif *netif, netif_status_callback_fn remove_callback); +#endif /* LWIP_NETIF_REMOVE_CALLBACK */ + +void netif_set_link_up(struct netif *netif); +void netif_set_link_down(struct netif *netif); +/** Ask if a link is up */ +#define netif_is_link_up(netif) (((netif)->flags & NETIF_FLAG_LINK_UP) ? (u8_t)1 : (u8_t)0) + +#if LWIP_NETIF_LINK_CALLBACK +void netif_set_link_callback(struct netif *netif, netif_status_callback_fn link_callback); +#endif /* LWIP_NETIF_LINK_CALLBACK */ + +#if LWIP_NETIF_HOSTNAME +/** @ingroup netif */ +#define netif_set_hostname(netif, name) do { if((netif) != NULL) { (netif)->hostname = name; }}while(0) +/** @ingroup netif */ +#define netif_get_hostname(netif) (((netif) != NULL) ? ((netif)->hostname) : NULL) +#endif /* LWIP_NETIF_HOSTNAME */ + +#if LWIP_IGMP +/** @ingroup netif */ +#define netif_set_igmp_mac_filter(netif, function) do { if((netif) != NULL) { (netif)->igmp_mac_filter = function; }}while(0) +#define netif_get_igmp_mac_filter(netif) (((netif) != NULL) ? ((netif)->igmp_mac_filter) : NULL) +#endif /* LWIP_IGMP */ + +#if LWIP_IPV6 && LWIP_IPV6_MLD +/** @ingroup netif */ +#define netif_set_mld_mac_filter(netif, function) do { if((netif) != NULL) { (netif)->mld_mac_filter = function; }}while(0) +#define netif_get_mld_mac_filter(netif) (((netif) != NULL) ? ((netif)->mld_mac_filter) : NULL) +#define netif_mld_mac_filter(netif, addr, action) do { if((netif) && (netif)->mld_mac_filter) { (netif)->mld_mac_filter((netif), (addr), (action)); }}while(0) +#endif /* LWIP_IPV6 && LWIP_IPV6_MLD */ + +#if ENABLE_LOOPBACK +err_t netif_loop_output(struct netif *netif, struct pbuf *p); +void netif_poll(struct netif *netif); +#if !LWIP_NETIF_LOOPBACK_MULTITHREADING +void netif_poll_all(void); +#endif /* !LWIP_NETIF_LOOPBACK_MULTITHREADING */ +#endif /* ENABLE_LOOPBACK */ + +err_t netif_input(struct pbuf *p, struct netif *inp); + +#if LWIP_IPV6 +/** @ingroup netif_ip6 */ +#define netif_ip_addr6(netif, i) ((const ip_addr_t*)(&((netif)->ip6_addr[i]))) +/** @ingroup netif_ip6 */ +#define netif_ip6_addr(netif, i) ((const ip6_addr_t*)ip_2_ip6(&((netif)->ip6_addr[i]))) +void netif_ip6_addr_set(struct netif *netif, s8_t addr_idx, const ip6_addr_t *addr6); +void netif_ip6_addr_set_parts(struct netif *netif, s8_t addr_idx, u32_t i0, u32_t i1, u32_t i2, u32_t i3); +#define netif_ip6_addr_state(netif, i) ((netif)->ip6_addr_state[i]) +void netif_ip6_addr_set_state(struct netif* netif, s8_t addr_idx, u8_t state); +s8_t netif_get_ip6_addr_match(struct netif *netif, const ip6_addr_t *ip6addr); +void netif_create_ip6_linklocal_address(struct netif *netif, u8_t from_mac_48bit); +err_t netif_add_ip6_address(struct netif *netif, const ip6_addr_t *ip6addr, s8_t *chosen_idx); +#define netif_set_ip6_autoconfig_enabled(netif, action) do { if(netif) { (netif)->ip6_autoconfig_enabled = (action); }}while(0) +#if LWIP_IPV6_ADDRESS_LIFETIMES +#define netif_ip6_addr_valid_life(netif, i) \ + (((netif) != NULL) ? ((netif)->ip6_addr_valid_life[i]) : IP6_ADDR_LIFE_STATIC) +#define netif_ip6_addr_set_valid_life(netif, i, secs) \ + do { if (netif != NULL) { (netif)->ip6_addr_valid_life[i] = (secs); }} while (0) +#define netif_ip6_addr_pref_life(netif, i) \ + (((netif) != NULL) ? ((netif)->ip6_addr_pref_life[i]) : IP6_ADDR_LIFE_STATIC) +#define netif_ip6_addr_set_pref_life(netif, i, secs) \ + do { if (netif != NULL) { (netif)->ip6_addr_pref_life[i] = (secs); }} while (0) +#define netif_ip6_addr_isstatic(netif, i) \ + (netif_ip6_addr_valid_life((netif), (i)) == IP6_ADDR_LIFE_STATIC) +#else /* !LWIP_IPV6_ADDRESS_LIFETIMES */ +#define netif_ip6_addr_isstatic(netif, i) (1) /* all addresses are static */ +#endif /* !LWIP_IPV6_ADDRESS_LIFETIMES */ +#if LWIP_ND6_ALLOW_RA_UPDATES +#define netif_mtu6(netif) ((netif)->mtu6) +#else /* LWIP_ND6_ALLOW_RA_UPDATES */ +#define netif_mtu6(netif) ((netif)->mtu) +#endif /* LWIP_ND6_ALLOW_RA_UPDATES */ +#endif /* LWIP_IPV6 */ + +#if LWIP_NETIF_USE_HINTS +#define NETIF_SET_HINTS(netif, netifhint) (netif)->hints = (netifhint) +#define NETIF_RESET_HINTS(netif) (netif)->hints = NULL +#else /* LWIP_NETIF_USE_HINTS */ +#define NETIF_SET_HINTS(netif, netifhint) +#define NETIF_RESET_HINTS(netif) +#endif /* LWIP_NETIF_USE_HINTS */ + +u8_t netif_name_to_index(const char *name); +char * netif_index_to_name(u8_t idx, char *name); +struct netif* netif_get_by_index(u8_t idx); + +/* Interface indexes always start at 1 per RFC 3493, section 4, num starts at 0 (internal index is 0..254)*/ +#define netif_get_index(netif) ((u8_t)((netif)->num + 1)) +#define NETIF_NO_INDEX (0) + +/** + * @ingroup netif + * Extended netif status callback (NSC) reasons flags. + * May be extended in the future! + */ +typedef u16_t netif_nsc_reason_t; + +/* used for initialization only */ +#define LWIP_NSC_NONE 0x0000 +/** netif was added. arg: NULL. Called AFTER netif was added. */ +#define LWIP_NSC_NETIF_ADDED 0x0001 +/** netif was removed. arg: NULL. Called BEFORE netif is removed. */ +#define LWIP_NSC_NETIF_REMOVED 0x0002 +/** link changed */ +#define LWIP_NSC_LINK_CHANGED 0x0004 +/** netif administrative status changed.\n + * up is called AFTER netif is set up.\n + * down is called BEFORE the netif is actually set down. */ +#define LWIP_NSC_STATUS_CHANGED 0x0008 +/** IPv4 address has changed */ +#define LWIP_NSC_IPV4_ADDRESS_CHANGED 0x0010 +/** IPv4 gateway has changed */ +#define LWIP_NSC_IPV4_GATEWAY_CHANGED 0x0020 +/** IPv4 netmask has changed */ +#define LWIP_NSC_IPV4_NETMASK_CHANGED 0x0040 +/** called AFTER IPv4 address/gateway/netmask changes have been applied */ +#define LWIP_NSC_IPV4_SETTINGS_CHANGED 0x0080 +/** IPv6 address was added */ +#define LWIP_NSC_IPV6_SET 0x0100 +/** IPv6 address state has changed */ +#define LWIP_NSC_IPV6_ADDR_STATE_CHANGED 0x0200 + +/** @ingroup netif + * Argument supplied to netif_ext_callback_fn. + */ +typedef union +{ + /** Args to LWIP_NSC_LINK_CHANGED callback */ + struct link_changed_s + { + /** 1: up; 0: down */ + u8_t state; + } link_changed; + /** Args to LWIP_NSC_STATUS_CHANGED callback */ + struct status_changed_s + { + /** 1: up; 0: down */ + u8_t state; + } status_changed; + /** Args to LWIP_NSC_IPV4_ADDRESS_CHANGED|LWIP_NSC_IPV4_GATEWAY_CHANGED|LWIP_NSC_IPV4_NETMASK_CHANGED|LWIP_NSC_IPV4_SETTINGS_CHANGED callback */ + struct ipv4_changed_s + { + /** Old IPv4 address */ + const ip_addr_t* old_address; + const ip_addr_t* old_netmask; + const ip_addr_t* old_gw; + } ipv4_changed; + /** Args to LWIP_NSC_IPV6_SET callback */ + struct ipv6_set_s + { + /** Index of changed IPv6 address */ + s8_t addr_index; + /** Old IPv6 address */ + const ip_addr_t* old_address; + } ipv6_set; + /** Args to LWIP_NSC_IPV6_ADDR_STATE_CHANGED callback */ + struct ipv6_addr_state_changed_s + { + /** Index of affected IPv6 address */ + s8_t addr_index; + /** Old IPv6 address state */ + u8_t old_state; + /** Affected IPv6 address */ + const ip_addr_t* address; + } ipv6_addr_state_changed; +} netif_ext_callback_args_t; + +/** + * @ingroup netif + * Function used for extended netif status callbacks + * Note: When parsing reason argument, keep in mind that more reasons may be added in the future! + * @param netif netif that is affected by change + * @param reason change reason + * @param args depends on reason, see reason description + */ +typedef void (*netif_ext_callback_fn)(struct netif* netif, netif_nsc_reason_t reason, const netif_ext_callback_args_t* args); + +#if LWIP_NETIF_EXT_STATUS_CALLBACK +struct netif_ext_callback; +typedef struct netif_ext_callback +{ + netif_ext_callback_fn callback_fn; + struct netif_ext_callback* next; +} netif_ext_callback_t; + +#define NETIF_DECLARE_EXT_CALLBACK(name) static netif_ext_callback_t name; +void netif_add_ext_callback(netif_ext_callback_t* callback, netif_ext_callback_fn fn); +void netif_remove_ext_callback(netif_ext_callback_t* callback); +void netif_invoke_ext_callback(struct netif* netif, netif_nsc_reason_t reason, const netif_ext_callback_args_t* args); +#else +#define NETIF_DECLARE_EXT_CALLBACK(name) +#define netif_add_ext_callback(callback, fn) +#define netif_remove_ext_callback(callback) +#define netif_invoke_ext_callback(netif, reason, args) +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_NETIF_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/netifapi.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/netifapi.h new file mode 100644 index 0000000000000000000000000000000000000000..e0631791b9ddc7cb6a977ff69aa8155bb42f873e --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/netifapi.h @@ -0,0 +1,161 @@ +/** + * @file + * netif API (to be used from non-TCPIP threads) + */ + +/* + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + */ +#ifndef LWIP_HDR_NETIFAPI_H +#define LWIP_HDR_NETIFAPI_H + +#include "lwip/opt.h" + +#if LWIP_NETIF_API /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/sys.h" +#include "lwip/netif.h" +#include "lwip/dhcp.h" +#include "lwip/autoip.h" +#include "lwip/priv/tcpip_priv.h" +#include "lwip/priv/api_msg.h" +#include "lwip/prot/ethernet.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* API for application */ +#if LWIP_ARP && LWIP_IPV4 +/* Used for netfiapi_arp_* APIs */ +enum netifapi_arp_entry { + NETIFAPI_ARP_PERM /* Permanent entry */ + /* Other entry types can be added here */ +}; + +/** @ingroup netifapi_arp */ +err_t netifapi_arp_add(const ip4_addr_t *ipaddr, struct eth_addr *ethaddr, enum netifapi_arp_entry type); +/** @ingroup netifapi_arp */ +err_t netifapi_arp_remove(const ip4_addr_t *ipaddr, enum netifapi_arp_entry type); +#endif /* LWIP_ARP && LWIP_IPV4 */ + +err_t netifapi_netif_add(struct netif *netif, +#if LWIP_IPV4 + const ip4_addr_t *ipaddr, const ip4_addr_t *netmask, const ip4_addr_t *gw, +#endif /* LWIP_IPV4 */ + void *state, netif_init_fn init, netif_input_fn input); + +#if LWIP_IPV4 +err_t netifapi_netif_set_addr(struct netif *netif, const ip4_addr_t *ipaddr, + const ip4_addr_t *netmask, const ip4_addr_t *gw); +#endif /* LWIP_IPV4*/ + +err_t netifapi_netif_common(struct netif *netif, netifapi_void_fn voidfunc, + netifapi_errt_fn errtfunc); + +/** @ingroup netifapi_netif */ +err_t netifapi_netif_name_to_index(const char *name, u8_t *index); +/** @ingroup netifapi_netif */ +err_t netifapi_netif_index_to_name(u8_t index, char *name); + +/** @ingroup netifapi_netif + * @see netif_remove() + */ +#define netifapi_netif_remove(n) netifapi_netif_common(n, netif_remove, NULL) +/** @ingroup netifapi_netif + * @see netif_set_up() + */ +#define netifapi_netif_set_up(n) netifapi_netif_common(n, netif_set_up, NULL) +/** @ingroup netifapi_netif + * @see netif_set_down() + */ +#define netifapi_netif_set_down(n) netifapi_netif_common(n, netif_set_down, NULL) +/** @ingroup netifapi_netif + * @see netif_set_default() + */ +#define netifapi_netif_set_default(n) netifapi_netif_common(n, netif_set_default, NULL) +/** @ingroup netifapi_netif + * @see netif_set_link_up() + */ +#define netifapi_netif_set_link_up(n) netifapi_netif_common(n, netif_set_link_up, NULL) +/** @ingroup netifapi_netif + * @see netif_set_link_down() + */ +#define netifapi_netif_set_link_down(n) netifapi_netif_common(n, netif_set_link_down, NULL) + +/** + * @defgroup netifapi_dhcp4 DHCPv4 + * @ingroup netifapi + * To be called from non-TCPIP threads + */ +/** @ingroup netifapi_dhcp4 + * @see dhcp_start() + */ +#define netifapi_dhcp_start(n) netifapi_netif_common(n, NULL, dhcp_start) +/** + * @ingroup netifapi_dhcp4 + * @deprecated Use netifapi_dhcp_release_and_stop() instead. + */ +#define netifapi_dhcp_stop(n) netifapi_netif_common(n, dhcp_stop, NULL) +/** @ingroup netifapi_dhcp4 + * @see dhcp_inform() + */ +#define netifapi_dhcp_inform(n) netifapi_netif_common(n, dhcp_inform, NULL) +/** @ingroup netifapi_dhcp4 + * @see dhcp_renew() + */ +#define netifapi_dhcp_renew(n) netifapi_netif_common(n, NULL, dhcp_renew) +/** + * @ingroup netifapi_dhcp4 + * @deprecated Use netifapi_dhcp_release_and_stop() instead. + */ +#define netifapi_dhcp_release(n) netifapi_netif_common(n, NULL, dhcp_release) +/** @ingroup netifapi_dhcp4 + * @see dhcp_release_and_stop() + */ +#define netifapi_dhcp_release_and_stop(n) netifapi_netif_common(n, dhcp_release_and_stop, NULL) + +/** + * @defgroup netifapi_autoip AUTOIP + * @ingroup netifapi + * To be called from non-TCPIP threads + */ +/** @ingroup netifapi_autoip + * @see autoip_start() + */ +#define netifapi_autoip_start(n) netifapi_netif_common(n, NULL, autoip_start) +/** @ingroup netifapi_autoip + * @see autoip_stop() + */ +#define netifapi_autoip_stop(n) netifapi_netif_common(n, NULL, autoip_stop) + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_NETIF_API */ + +#endif /* LWIP_HDR_NETIFAPI_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/opt.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/opt.h new file mode 100644 index 0000000000000000000000000000000000000000..82c420c16721db6f58f3ad679d144eebb799152f --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/opt.h @@ -0,0 +1,3519 @@ +/** + * @file + * + * lwIP Options Configuration + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +/* + * NOTE: || defined __DOXYGEN__ is a workaround for doxygen bug - + * without this, doxygen does not see the actual #define + */ + +#if !defined LWIP_HDR_OPT_H +#define LWIP_HDR_OPT_H + +/* + * Include user defined options first. Anything not defined in these files + * will be set to standard values. Override anything you don't like! + */ +#include "lwipopts.h" +#include "lwip/debug.h" + +/** + * @defgroup lwip_opts Options (lwipopts.h) + * @ingroup lwip + * + * @defgroup lwip_opts_debug Debugging + * @ingroup lwip_opts + * + * @defgroup lwip_opts_infrastructure Infrastructure + * @ingroup lwip_opts + * + * @defgroup lwip_opts_callback Callback-style APIs + * @ingroup lwip_opts + * + * @defgroup lwip_opts_threadsafe_apis Thread-safe APIs + * @ingroup lwip_opts + */ + + /* + ------------------------------------ + -------------- NO SYS -------------- + ------------------------------------ +*/ +/** + * @defgroup lwip_opts_nosys NO_SYS + * @ingroup lwip_opts_infrastructure + * @{ + */ +/** + * NO_SYS==1: Use lwIP without OS-awareness (no thread, semaphores, mutexes or + * mboxes). This means threaded APIs cannot be used (socket, netconn, + * i.e. everything in the 'api' folder), only the callback-style raw API is + * available (and you have to watch out for yourself that you don't access + * lwIP functions/structures from more than one context at a time!) + */ +#if !defined NO_SYS || defined __DOXYGEN__ +#define NO_SYS 0 +#endif +/** + * @} + */ + +/** + * @defgroup lwip_opts_timers Timers + * @ingroup lwip_opts_infrastructure + * @{ + */ +/** + * LWIP_TIMERS==0: Drop support for sys_timeout and lwip-internal cyclic timers. + * (the array of lwip-internal cyclic timers is still provided) + * (check NO_SYS_NO_TIMERS for compatibility to old versions) + */ +#if !defined LWIP_TIMERS || defined __DOXYGEN__ +#ifdef NO_SYS_NO_TIMERS +#define LWIP_TIMERS (!NO_SYS || (NO_SYS && !NO_SYS_NO_TIMERS)) +#else +#define LWIP_TIMERS 1 +#endif +#endif + +/** + * LWIP_TIMERS_CUSTOM==1: Provide your own timer implementation. + * Function prototypes in timeouts.h and the array of lwip-internal cyclic timers + * are still included, but the implementation is not. The following functions + * will be required: sys_timeouts_init(), sys_timeout(), sys_untimeout(), + * sys_timeouts_mbox_fetch() + */ +#if !defined LWIP_TIMERS_CUSTOM || defined __DOXYGEN__ +#define LWIP_TIMERS_CUSTOM 0 +#endif +/** + * @} + */ + +/** + * @defgroup lwip_opts_memcpy memcpy + * @ingroup lwip_opts_infrastructure + * @{ + */ +/** + * MEMCPY: override this if you have a faster implementation at hand than the + * one included in your C library + */ +#if !defined MEMCPY || defined __DOXYGEN__ +#define MEMCPY(dst,src,len) memcpy(dst,src,len) +#endif + +/** + * SMEMCPY: override this with care! Some compilers (e.g. gcc) can inline a + * call to memcpy() if the length is known at compile time and is small. + */ +#if !defined SMEMCPY || defined __DOXYGEN__ +#define SMEMCPY(dst,src,len) memcpy(dst,src,len) +#endif + +/** + * MEMMOVE: override this if you have a faster implementation at hand than the + * one included in your C library. lwIP currently uses MEMMOVE only when IPv6 + * fragmentation support is enabled. + */ +#if !defined MEMMOVE || defined __DOXYGEN__ +#define MEMMOVE(dst,src,len) memmove(dst,src,len) +#endif +/** + * @} + */ + +/* + ------------------------------------ + ----------- Core locking ----------- + ------------------------------------ +*/ +/** + * @defgroup lwip_opts_lock Core locking and MPU + * @ingroup lwip_opts_infrastructure + * @{ + */ +/** + * LWIP_MPU_COMPATIBLE: enables special memory management mechanism + * which makes lwip able to work on MPU (Memory Protection Unit) system + * by not passing stack-pointers to other threads + * (this decreases performance as memory is allocated from pools instead + * of keeping it on the stack) + */ +#if !defined LWIP_MPU_COMPATIBLE || defined __DOXYGEN__ +#define LWIP_MPU_COMPATIBLE 0 +#endif + +/** + * LWIP_TCPIP_CORE_LOCKING + * Creates a global mutex that is held during TCPIP thread operations. + * Can be locked by client code to perform lwIP operations without changing + * into TCPIP thread using callbacks. See LOCK_TCPIP_CORE() and + * UNLOCK_TCPIP_CORE(). + * Your system should provide mutexes supporting priority inversion to use this. + */ +#if !defined LWIP_TCPIP_CORE_LOCKING || defined __DOXYGEN__ +#define LWIP_TCPIP_CORE_LOCKING 1 +#endif + +/** + * LWIP_TCPIP_CORE_LOCKING_INPUT: when LWIP_TCPIP_CORE_LOCKING is enabled, + * this lets tcpip_input() grab the mutex for input packets as well, + * instead of allocating a message and passing it to tcpip_thread. + * + * ATTENTION: this does not work when tcpip_input() is called from + * interrupt context! + */ +#if !defined LWIP_TCPIP_CORE_LOCKING_INPUT || defined __DOXYGEN__ +#define LWIP_TCPIP_CORE_LOCKING_INPUT 0 +#endif + +/** + * SYS_LIGHTWEIGHT_PROT==1: enable inter-task protection (and task-vs-interrupt + * protection) for certain critical regions during buffer allocation, deallocation + * and memory allocation and deallocation. + * ATTENTION: This is required when using lwIP from more than one context! If + * you disable this, you must be sure what you are doing! + */ +#if !defined SYS_LIGHTWEIGHT_PROT || defined __DOXYGEN__ +#define SYS_LIGHTWEIGHT_PROT 1 +#endif + +/** + * Macro/function to check whether lwIP's threading/locking + * requirements are satisfied during current function call. + * This macro usually calls a function that is implemented in the OS-dependent + * sys layer and performs the following checks: + * - Not in ISR (this should be checked for NO_SYS==1, too!) + * - If @ref LWIP_TCPIP_CORE_LOCKING = 1: TCPIP core lock is held + * - If @ref LWIP_TCPIP_CORE_LOCKING = 0: function is called from TCPIP thread + * @see @ref multithreading + */ +#if !defined LWIP_ASSERT_CORE_LOCKED || defined __DOXYGEN__ +#define LWIP_ASSERT_CORE_LOCKED() +#endif + +/** + * Called as first thing in the lwIP TCPIP thread. Can be used in conjunction + * with @ref LWIP_ASSERT_CORE_LOCKED to check core locking. + * @see @ref multithreading + */ +#if !defined LWIP_MARK_TCPIP_THREAD || defined __DOXYGEN__ +#define LWIP_MARK_TCPIP_THREAD() +#endif +/** + * @} + */ + +/* + ------------------------------------ + ---------- Memory options ---------- + ------------------------------------ +*/ +/** + * @defgroup lwip_opts_mem Heap and memory pools + * @ingroup lwip_opts_infrastructure + * @{ + */ +/** + * MEM_LIBC_MALLOC==1: Use malloc/free/realloc provided by your C-library + * instead of the lwip internal allocator. Can save code size if you + * already use it. + */ +#if !defined MEM_LIBC_MALLOC || defined __DOXYGEN__ +#define MEM_LIBC_MALLOC 0 +#endif + +/** + * MEMP_MEM_MALLOC==1: Use mem_malloc/mem_free instead of the lwip pool allocator. + * Especially useful with MEM_LIBC_MALLOC but handle with care regarding execution + * speed (heap alloc can be much slower than pool alloc) and usage from interrupts + * (especially if your netif driver allocates PBUF_POOL pbufs for received frames + * from interrupt)! + * ATTENTION: Currently, this uses the heap for ALL pools (also for private pools, + * not only for internal pools defined in memp_std.h)! + */ +#if !defined MEMP_MEM_MALLOC || defined __DOXYGEN__ +#define MEMP_MEM_MALLOC 0 +#endif + +/** + * MEMP_MEM_INIT==1: Force use of memset to initialize pool memory. + * Useful if pool are moved in uninitialized section of memory. This will ensure + * default values in pcbs struct are well initialized in all conditions. + */ +#if !defined MEMP_MEM_INIT || defined __DOXYGEN__ +#define MEMP_MEM_INIT 0 +#endif + +/** + * MEM_ALIGNMENT: should be set to the alignment of the CPU + * 4 byte alignment -> \#define MEM_ALIGNMENT 4 + * 2 byte alignment -> \#define MEM_ALIGNMENT 2 + */ +#if !defined MEM_ALIGNMENT || defined __DOXYGEN__ +#define MEM_ALIGNMENT 1 +#endif + +/** + * MEM_SIZE: the size of the heap memory. If the application will send + * a lot of data that needs to be copied, this should be set high. + */ +#if !defined MEM_SIZE || defined __DOXYGEN__ +#define MEM_SIZE 1600 +#endif + +/** + * MEMP_OVERFLOW_CHECK: memp overflow protection reserves a configurable + * amount of bytes before and after each memp element in every pool and fills + * it with a prominent default value. + * MEMP_OVERFLOW_CHECK == 0 no checking + * MEMP_OVERFLOW_CHECK == 1 checks each element when it is freed + * MEMP_OVERFLOW_CHECK >= 2 checks each element in every pool every time + * memp_malloc() or memp_free() is called (useful but slow!) + */ +#if !defined MEMP_OVERFLOW_CHECK || defined __DOXYGEN__ +#define MEMP_OVERFLOW_CHECK 0 +#endif + +/** + * MEMP_SANITY_CHECK==1: run a sanity check after each memp_free() to make + * sure that there are no cycles in the linked lists. + */ +#if !defined MEMP_SANITY_CHECK || defined __DOXYGEN__ +#define MEMP_SANITY_CHECK 0 +#endif + +/** + * MEM_OVERFLOW_CHECK: mem overflow protection reserves a configurable + * amount of bytes before and after each heap allocation chunk and fills + * it with a prominent default value. + * MEM_OVERFLOW_CHECK == 0 no checking + * MEM_OVERFLOW_CHECK == 1 checks each element when it is freed + * MEM_OVERFLOW_CHECK >= 2 checks all heap elements every time + * mem_malloc() or mem_free() is called (useful but slow!) + */ +#if !defined MEM_OVERFLOW_CHECK || defined __DOXYGEN__ +#define MEM_OVERFLOW_CHECK 0 +#endif + +/** + * MEM_SANITY_CHECK==1: run a sanity check after each mem_free() to make + * sure that the linked list of heap elements is not corrupted. + */ +#if !defined MEM_SANITY_CHECK || defined __DOXYGEN__ +#define MEM_SANITY_CHECK 0 +#endif + +/** + * MEM_USE_POOLS==1: Use an alternative to malloc() by allocating from a set + * of memory pools of various sizes. When mem_malloc is called, an element of + * the smallest pool that can provide the length needed is returned. + * To use this, MEMP_USE_CUSTOM_POOLS also has to be enabled. + */ +#if !defined MEM_USE_POOLS || defined __DOXYGEN__ +#define MEM_USE_POOLS 0 +#endif + +/** + * MEM_USE_POOLS_TRY_BIGGER_POOL==1: if one malloc-pool is empty, try the next + * bigger pool - WARNING: THIS MIGHT WASTE MEMORY but it can make a system more + * reliable. */ +#if !defined MEM_USE_POOLS_TRY_BIGGER_POOL || defined __DOXYGEN__ +#define MEM_USE_POOLS_TRY_BIGGER_POOL 0 +#endif + +/** + * MEMP_USE_CUSTOM_POOLS==1: whether to include a user file lwippools.h + * that defines additional pools beyond the "standard" ones required + * by lwIP. If you set this to 1, you must have lwippools.h in your + * include path somewhere. + */ +#if !defined MEMP_USE_CUSTOM_POOLS || defined __DOXYGEN__ +#define MEMP_USE_CUSTOM_POOLS 0 +#endif + +/** + * Set this to 1 if you want to free PBUF_RAM pbufs (or call mem_free()) from + * interrupt context (or another context that doesn't allow waiting for a + * semaphore). + * If set to 1, mem_malloc will be protected by a semaphore and SYS_ARCH_PROTECT, + * while mem_free will only use SYS_ARCH_PROTECT. mem_malloc SYS_ARCH_UNPROTECTs + * with each loop so that mem_free can run. + * + * ATTENTION: As you can see from the above description, this leads to dis-/ + * enabling interrupts often, which can be slow! Also, on low memory, mem_malloc + * can need longer. + * + * If you don't want that, at least for NO_SYS=0, you can still use the following + * functions to enqueue a deallocation call which then runs in the tcpip_thread + * context: + * - pbuf_free_callback(p); + * - mem_free_callback(m); + */ +#if !defined LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT || defined __DOXYGEN__ +#define LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT 0 +#endif +/** + * @} + */ + +/* + ------------------------------------------------ + ---------- Internal Memory Pool Sizes ---------- + ------------------------------------------------ +*/ +/** + * @defgroup lwip_opts_memp Internal memory pools + * @ingroup lwip_opts_infrastructure + * @{ + */ +/** + * MEMP_NUM_PBUF: the number of memp struct pbufs (used for PBUF_ROM and PBUF_REF). + * If the application sends a lot of data out of ROM (or other static memory), + * this should be set high. + */ +#if !defined MEMP_NUM_PBUF || defined __DOXYGEN__ +#define MEMP_NUM_PBUF 16 +#endif + +/** + * MEMP_NUM_RAW_PCB: Number of raw connection PCBs + * (requires the LWIP_RAW option) + */ +#if !defined MEMP_NUM_RAW_PCB || defined __DOXYGEN__ +#define MEMP_NUM_RAW_PCB 4 +#endif + +/** + * MEMP_NUM_UDP_PCB: the number of UDP protocol control blocks. One + * per active UDP "connection". + * (requires the LWIP_UDP option) + */ +#if !defined MEMP_NUM_UDP_PCB || defined __DOXYGEN__ +#define MEMP_NUM_UDP_PCB 4 +#endif + +/** + * MEMP_NUM_TCP_PCB: the number of simultaneously active TCP connections. + * (requires the LWIP_TCP option) + */ +#if !defined MEMP_NUM_TCP_PCB || defined __DOXYGEN__ +#define MEMP_NUM_TCP_PCB 5 +#endif + +/** + * MEMP_NUM_TCP_PCB_LISTEN: the number of listening TCP connections. + * (requires the LWIP_TCP option) + */ +#if !defined MEMP_NUM_TCP_PCB_LISTEN || defined __DOXYGEN__ +#define MEMP_NUM_TCP_PCB_LISTEN 8 +#endif + +/** + * MEMP_NUM_TCP_SEG: the number of simultaneously queued TCP segments. + * (requires the LWIP_TCP option) + */ +#if !defined MEMP_NUM_TCP_SEG || defined __DOXYGEN__ +#define MEMP_NUM_TCP_SEG 16 +#endif + +/** + * MEMP_NUM_ALTCP_PCB: the number of simultaneously active altcp layer pcbs. + * (requires the LWIP_ALTCP option) + * Connections with multiple layers require more than one altcp_pcb (e.g. TLS + * over TCP requires 2 altcp_pcbs, one for TLS and one for TCP). + */ +#if !defined MEMP_NUM_ALTCP_PCB || defined __DOXYGEN__ +#define MEMP_NUM_ALTCP_PCB MEMP_NUM_TCP_PCB +#endif + +/** + * MEMP_NUM_REASSDATA: the number of IP packets simultaneously queued for + * reassembly (whole packets, not fragments!) + */ +#if !defined MEMP_NUM_REASSDATA || defined __DOXYGEN__ +#define MEMP_NUM_REASSDATA 5 +#endif + +/** + * MEMP_NUM_FRAG_PBUF: the number of IP fragments simultaneously sent + * (fragments, not whole packets!). + * This is only used with LWIP_NETIF_TX_SINGLE_PBUF==0 and only has to be > 1 + * with DMA-enabled MACs where the packet is not yet sent when netif->output + * returns. + */ +#if !defined MEMP_NUM_FRAG_PBUF || defined __DOXYGEN__ +#define MEMP_NUM_FRAG_PBUF 15 +#endif + +/** + * MEMP_NUM_ARP_QUEUE: the number of simultaneously queued outgoing + * packets (pbufs) that are waiting for an ARP request (to resolve + * their destination address) to finish. + * (requires the ARP_QUEUEING option) + */ +#if !defined MEMP_NUM_ARP_QUEUE || defined __DOXYGEN__ +#define MEMP_NUM_ARP_QUEUE 30 +#endif + +/** + * MEMP_NUM_IGMP_GROUP: The number of multicast groups whose network interfaces + * can be members at the same time (one per netif - allsystems group -, plus one + * per netif membership). + * (requires the LWIP_IGMP option) + */ +#if !defined MEMP_NUM_IGMP_GROUP || defined __DOXYGEN__ +#define MEMP_NUM_IGMP_GROUP 8 +#endif + +/** + * The number of sys timeouts used by the core stack (not apps) + * The default number of timeouts is calculated here for all enabled modules. + */ +#define LWIP_NUM_SYS_TIMEOUT_INTERNAL (LWIP_TCP + IP_REASSEMBLY + LWIP_ARP + (2*LWIP_DHCP) + LWIP_AUTOIP + LWIP_IGMP + LWIP_DNS + PPP_NUM_TIMEOUTS + (LWIP_IPV6 * (1 + LWIP_IPV6_REASS + LWIP_IPV6_MLD))) + +/** + * MEMP_NUM_SYS_TIMEOUT: the number of simultaneously active timeouts. + * The default number of timeouts is calculated here for all enabled modules. + * The formula expects settings to be either '0' or '1'. + */ +#if !defined MEMP_NUM_SYS_TIMEOUT || defined __DOXYGEN__ +#define MEMP_NUM_SYS_TIMEOUT LWIP_NUM_SYS_TIMEOUT_INTERNAL +#endif + +/** + * MEMP_NUM_NETBUF: the number of struct netbufs. + * (only needed if you use the sequential API, like api_lib.c) + */ +#if !defined MEMP_NUM_NETBUF || defined __DOXYGEN__ +#define MEMP_NUM_NETBUF 2 +#endif + +/** + * MEMP_NUM_NETCONN: the number of struct netconns. + * (only needed if you use the sequential API, like api_lib.c) + */ +#if !defined MEMP_NUM_NETCONN || defined __DOXYGEN__ +#define MEMP_NUM_NETCONN 4 +#endif + +/** + * MEMP_NUM_SELECT_CB: the number of struct lwip_select_cb. + * (Only needed if you have LWIP_MPU_COMPATIBLE==1 and use the socket API. + * In that case, you need one per thread calling lwip_select.) + */ +#if !defined MEMP_NUM_SELECT_CB || defined __DOXYGEN__ +#define MEMP_NUM_SELECT_CB 4 +#endif + +/** + * MEMP_NUM_TCPIP_MSG_API: the number of struct tcpip_msg, which are used + * for callback/timeout API communication. + * (only needed if you use tcpip.c) + */ +#if !defined MEMP_NUM_TCPIP_MSG_API || defined __DOXYGEN__ +#define MEMP_NUM_TCPIP_MSG_API 8 +#endif + +/** + * MEMP_NUM_TCPIP_MSG_INPKT: the number of struct tcpip_msg, which are used + * for incoming packets. + * (only needed if you use tcpip.c) + */ +#if !defined MEMP_NUM_TCPIP_MSG_INPKT || defined __DOXYGEN__ +#define MEMP_NUM_TCPIP_MSG_INPKT 8 +#endif + +/** + * MEMP_NUM_NETDB: the number of concurrently running lwip_addrinfo() calls + * (before freeing the corresponding memory using lwip_freeaddrinfo()). + */ +#if !defined MEMP_NUM_NETDB || defined __DOXYGEN__ +#define MEMP_NUM_NETDB 1 +#endif + +/** + * MEMP_NUM_LOCALHOSTLIST: the number of host entries in the local host list + * if DNS_LOCAL_HOSTLIST_IS_DYNAMIC==1. + */ +#if !defined MEMP_NUM_LOCALHOSTLIST || defined __DOXYGEN__ +#define MEMP_NUM_LOCALHOSTLIST 1 +#endif + +/** + * PBUF_POOL_SIZE: the number of buffers in the pbuf pool. + */ +#if !defined PBUF_POOL_SIZE || defined __DOXYGEN__ +#define PBUF_POOL_SIZE 16 +#endif + +/** MEMP_NUM_API_MSG: the number of concurrently active calls to various + * socket, netconn, and tcpip functions + */ +#if !defined MEMP_NUM_API_MSG || defined __DOXYGEN__ +#define MEMP_NUM_API_MSG MEMP_NUM_TCPIP_MSG_API +#endif + +/** MEMP_NUM_DNS_API_MSG: the number of concurrently active calls to netconn_gethostbyname + */ +#if !defined MEMP_NUM_DNS_API_MSG || defined __DOXYGEN__ +#define MEMP_NUM_DNS_API_MSG MEMP_NUM_TCPIP_MSG_API +#endif + +/** MEMP_NUM_SOCKET_SETGETSOCKOPT_DATA: the number of concurrently active calls + * to getsockopt/setsockopt + */ +#if !defined MEMP_NUM_SOCKET_SETGETSOCKOPT_DATA || defined __DOXYGEN__ +#define MEMP_NUM_SOCKET_SETGETSOCKOPT_DATA MEMP_NUM_TCPIP_MSG_API +#endif + +/** MEMP_NUM_NETIFAPI_MSG: the number of concurrently active calls to the + * netifapi functions + */ +#if !defined MEMP_NUM_NETIFAPI_MSG || defined __DOXYGEN__ +#define MEMP_NUM_NETIFAPI_MSG MEMP_NUM_TCPIP_MSG_API +#endif +/** + * @} + */ + +/* + --------------------------------- + ---------- ARP options ---------- + --------------------------------- +*/ +/** + * @defgroup lwip_opts_arp ARP + * @ingroup lwip_opts_ipv4 + * @{ + */ +/** + * LWIP_ARP==1: Enable ARP functionality. + */ +#if !defined LWIP_ARP || defined __DOXYGEN__ +#define LWIP_ARP 1 +#endif + +/** + * ARP_TABLE_SIZE: Number of active MAC-IP address pairs cached. + */ +#if !defined ARP_TABLE_SIZE || defined __DOXYGEN__ +#define ARP_TABLE_SIZE 10 +#endif + +/** the time an ARP entry stays valid after its last update, + * for ARP_TMR_INTERVAL = 1000, this is + * (60 * 5) seconds = 5 minutes. + */ +#if !defined ARP_MAXAGE || defined __DOXYGEN__ +#define ARP_MAXAGE 300 +#endif + +/** + * ARP_QUEUEING==1: Multiple outgoing packets are queued during hardware address + * resolution. By default, only the most recent packet is queued per IP address. + * This is sufficient for most protocols and mainly reduces TCP connection + * startup time. Set this to 1 if you know your application sends more than one + * packet in a row to an IP address that is not in the ARP cache. + */ +#if !defined ARP_QUEUEING || defined __DOXYGEN__ +#define ARP_QUEUEING 0 +#endif + +/** The maximum number of packets which may be queued for each + * unresolved address by other network layers. Defaults to 3, 0 means disabled. + * Old packets are dropped, new packets are queued. + */ +#if !defined ARP_QUEUE_LEN || defined __DOXYGEN__ +#define ARP_QUEUE_LEN 3 +#endif + +/** + * ETHARP_SUPPORT_VLAN==1: support receiving and sending ethernet packets with + * VLAN header. See the description of LWIP_HOOK_VLAN_CHECK and + * LWIP_HOOK_VLAN_SET hooks to check/set VLAN headers. + * Additionally, you can define ETHARP_VLAN_CHECK to an u16_t VLAN ID to check. + * If ETHARP_VLAN_CHECK is defined, only VLAN-traffic for this VLAN is accepted. + * If ETHARP_VLAN_CHECK is not defined, all traffic is accepted. + * Alternatively, define a function/define ETHARP_VLAN_CHECK_FN(eth_hdr, vlan) + * that returns 1 to accept a packet or 0 to drop a packet. + */ +#if !defined ETHARP_SUPPORT_VLAN || defined __DOXYGEN__ +#define ETHARP_SUPPORT_VLAN 0 +#endif + +/** LWIP_ETHERNET==1: enable ethernet support even though ARP might be disabled + */ +#if !defined LWIP_ETHERNET || defined __DOXYGEN__ +#define LWIP_ETHERNET LWIP_ARP +#endif + +/** ETH_PAD_SIZE: number of bytes added before the ethernet header to ensure + * alignment of payload after that header. Since the header is 14 bytes long, + * without this padding e.g. addresses in the IP header will not be aligned + * on a 32-bit boundary, so setting this to 2 can speed up 32-bit-platforms. + */ +#if !defined ETH_PAD_SIZE || defined __DOXYGEN__ +#define ETH_PAD_SIZE 0 +#endif + +/** ETHARP_SUPPORT_STATIC_ENTRIES==1: enable code to support static ARP table + * entries (using etharp_add_static_entry/etharp_remove_static_entry). + */ +#if !defined ETHARP_SUPPORT_STATIC_ENTRIES || defined __DOXYGEN__ +#define ETHARP_SUPPORT_STATIC_ENTRIES 0 +#endif + +/** ETHARP_TABLE_MATCH_NETIF==1: Match netif for ARP table entries. + * If disabled, duplicate IP address on multiple netifs are not supported + * (but this should only occur for AutoIP). + */ +#if !defined ETHARP_TABLE_MATCH_NETIF || defined __DOXYGEN__ +#define ETHARP_TABLE_MATCH_NETIF !LWIP_SINGLE_NETIF +#endif +/** + * @} + */ + +/* + -------------------------------- + ---------- IP options ---------- + -------------------------------- +*/ +/** + * @defgroup lwip_opts_ipv4 IPv4 + * @ingroup lwip_opts + * @{ + */ +/** + * LWIP_IPV4==1: Enable IPv4 + */ +#if !defined LWIP_IPV4 || defined __DOXYGEN__ +#define LWIP_IPV4 1 +#endif + +/** + * IP_FORWARD==1: Enables the ability to forward IP packets across network + * interfaces. If you are going to run lwIP on a device with only one network + * interface, define this to 0. + */ +#if !defined IP_FORWARD || defined __DOXYGEN__ +#define IP_FORWARD 0 +#endif + +/** + * IP_REASSEMBLY==1: Reassemble incoming fragmented IP packets. Note that + * this option does not affect outgoing packet sizes, which can be controlled + * via IP_FRAG. + */ +#if !defined IP_REASSEMBLY || defined __DOXYGEN__ +#define IP_REASSEMBLY 1 +#endif + +/** + * IP_FRAG==1: Fragment outgoing IP packets if their size exceeds MTU. Note + * that this option does not affect incoming packet sizes, which can be + * controlled via IP_REASSEMBLY. + */ +#if !defined IP_FRAG || defined __DOXYGEN__ +#define IP_FRAG 1 +#endif + +#if !LWIP_IPV4 +/* disable IPv4 extensions when IPv4 is disabled */ +#undef IP_FORWARD +#define IP_FORWARD 0 +#undef IP_REASSEMBLY +#define IP_REASSEMBLY 0 +#undef IP_FRAG +#define IP_FRAG 0 +#endif /* !LWIP_IPV4 */ + +/** + * IP_OPTIONS_ALLOWED: Defines the behavior for IP options. + * IP_OPTIONS_ALLOWED==0: All packets with IP options are dropped. + * IP_OPTIONS_ALLOWED==1: IP options are allowed (but not parsed). + */ +#if !defined IP_OPTIONS_ALLOWED || defined __DOXYGEN__ +#define IP_OPTIONS_ALLOWED 1 +#endif + +/** + * IP_REASS_MAXAGE: Maximum time (in multiples of IP_TMR_INTERVAL - so seconds, normally) + * a fragmented IP packet waits for all fragments to arrive. If not all fragments arrived + * in this time, the whole packet is discarded. + */ +#if !defined IP_REASS_MAXAGE || defined __DOXYGEN__ +#define IP_REASS_MAXAGE 15 +#endif + +/** + * IP_REASS_MAX_PBUFS: Total maximum amount of pbufs waiting to be reassembled. + * Since the received pbufs are enqueued, be sure to configure + * PBUF_POOL_SIZE > IP_REASS_MAX_PBUFS so that the stack is still able to receive + * packets even if the maximum amount of fragments is enqueued for reassembly! + * When IPv4 *and* IPv6 are enabled, this even changes to + * (PBUF_POOL_SIZE > 2 * IP_REASS_MAX_PBUFS)! + */ +#if !defined IP_REASS_MAX_PBUFS || defined __DOXYGEN__ +#define IP_REASS_MAX_PBUFS 10 +#endif + +/** + * IP_DEFAULT_TTL: Default value for Time-To-Live used by transport layers. + */ +#if !defined IP_DEFAULT_TTL || defined __DOXYGEN__ +#define IP_DEFAULT_TTL 255 +#endif + +/** + * IP_SOF_BROADCAST=1: Use the SOF_BROADCAST field to enable broadcast + * filter per pcb on udp and raw send operations. To enable broadcast filter + * on recv operations, you also have to set IP_SOF_BROADCAST_RECV=1. + */ +#if !defined IP_SOF_BROADCAST || defined __DOXYGEN__ +#define IP_SOF_BROADCAST 0 +#endif + +/** + * IP_SOF_BROADCAST_RECV (requires IP_SOF_BROADCAST=1) enable the broadcast + * filter on recv operations. + */ +#if !defined IP_SOF_BROADCAST_RECV || defined __DOXYGEN__ +#define IP_SOF_BROADCAST_RECV 0 +#endif + +/** + * IP_FORWARD_ALLOW_TX_ON_RX_NETIF==1: allow ip_forward() to send packets back + * out on the netif where it was received. This should only be used for + * wireless networks. + * ATTENTION: When this is 1, make sure your netif driver correctly marks incoming + * link-layer-broadcast/multicast packets as such using the corresponding pbuf flags! + */ +#if !defined IP_FORWARD_ALLOW_TX_ON_RX_NETIF || defined __DOXYGEN__ +#define IP_FORWARD_ALLOW_TX_ON_RX_NETIF 0 +#endif +/** + * @} + */ + +/* + ---------------------------------- + ---------- ICMP options ---------- + ---------------------------------- +*/ +/** + * @defgroup lwip_opts_icmp ICMP + * @ingroup lwip_opts_ipv4 + * @{ + */ +/** + * LWIP_ICMP==1: Enable ICMP module inside the IP stack. + * Be careful, disable that make your product non-compliant to RFC1122 + */ +#if !defined LWIP_ICMP || defined __DOXYGEN__ +#define LWIP_ICMP 1 +#endif + +/** + * ICMP_TTL: Default value for Time-To-Live used by ICMP packets. + */ +#if !defined ICMP_TTL || defined __DOXYGEN__ +#define ICMP_TTL IP_DEFAULT_TTL +#endif + +/** + * LWIP_BROADCAST_PING==1: respond to broadcast pings (default is unicast only) + */ +#if !defined LWIP_BROADCAST_PING || defined __DOXYGEN__ +#define LWIP_BROADCAST_PING 0 +#endif + +/** + * LWIP_MULTICAST_PING==1: respond to multicast pings (default is unicast only) + */ +#if !defined LWIP_MULTICAST_PING || defined __DOXYGEN__ +#define LWIP_MULTICAST_PING 0 +#endif +/** + * @} + */ + +/* + --------------------------------- + ---------- RAW options ---------- + --------------------------------- +*/ +/** + * @defgroup lwip_opts_raw RAW + * @ingroup lwip_opts_callback + * @{ + */ +/** + * LWIP_RAW==1: Enable application layer to hook into the IP layer itself. + */ +#if !defined LWIP_RAW || defined __DOXYGEN__ +#define LWIP_RAW 0 +#endif + +/** + * LWIP_RAW==1: Enable application layer to hook into the IP layer itself. + */ +#if !defined RAW_TTL || defined __DOXYGEN__ +#define RAW_TTL IP_DEFAULT_TTL +#endif +/** + * @} + */ + +/* + ---------------------------------- + ---------- DHCP options ---------- + ---------------------------------- +*/ +/** + * @defgroup lwip_opts_dhcp DHCP + * @ingroup lwip_opts_ipv4 + * @{ + */ +/** + * LWIP_DHCP==1: Enable DHCP module. + */ +#if !defined LWIP_DHCP || defined __DOXYGEN__ +#define LWIP_DHCP 0 +#endif +#if !LWIP_IPV4 +/* disable DHCP when IPv4 is disabled */ +#undef LWIP_DHCP +#define LWIP_DHCP 0 +#endif /* !LWIP_IPV4 */ + +/** + * DHCP_DOES_ARP_CHECK==1: Do an ARP check on the offered address. + */ +#if !defined DHCP_DOES_ARP_CHECK || defined __DOXYGEN__ +#define DHCP_DOES_ARP_CHECK (LWIP_DHCP && LWIP_ARP) +#endif + +/** + * LWIP_DHCP_BOOTP_FILE==1: Store offered_si_addr and boot_file_name. + */ +#if !defined LWIP_DHCP_BOOTP_FILE || defined __DOXYGEN__ +#define LWIP_DHCP_BOOTP_FILE 0 +#endif + +/** + * LWIP_DHCP_GETS_NTP==1: Request NTP servers with discover/select. For each + * response packet, an callback is called, which has to be provided by the port: + * void dhcp_set_ntp_servers(u8_t num_ntp_servers, ip_addr_t* ntp_server_addrs); +*/ +#if !defined LWIP_DHCP_GET_NTP_SRV || defined __DOXYGEN__ +#define LWIP_DHCP_GET_NTP_SRV 0 +#endif + +/** + * The maximum of NTP servers requested + */ +#if !defined LWIP_DHCP_MAX_NTP_SERVERS || defined __DOXYGEN__ +#define LWIP_DHCP_MAX_NTP_SERVERS 1 +#endif + +/** + * LWIP_DHCP_MAX_DNS_SERVERS > 0: Request DNS servers with discover/select. + * DNS servers received in the response are passed to DNS via @ref dns_setserver() + * (up to the maximum limit defined here). + */ +#if !defined LWIP_DHCP_MAX_DNS_SERVERS || defined __DOXYGEN__ +#define LWIP_DHCP_MAX_DNS_SERVERS DNS_MAX_SERVERS +#endif +/** + * @} + */ + +/* + ------------------------------------ + ---------- AUTOIP options ---------- + ------------------------------------ +*/ +/** + * @defgroup lwip_opts_autoip AUTOIP + * @ingroup lwip_opts_ipv4 + * @{ + */ +/** + * LWIP_AUTOIP==1: Enable AUTOIP module. + */ +#if !defined LWIP_AUTOIP || defined __DOXYGEN__ +#define LWIP_AUTOIP 0 +#endif +#if !LWIP_IPV4 +/* disable AUTOIP when IPv4 is disabled */ +#undef LWIP_AUTOIP +#define LWIP_AUTOIP 0 +#endif /* !LWIP_IPV4 */ + +/** + * LWIP_DHCP_AUTOIP_COOP==1: Allow DHCP and AUTOIP to be both enabled on + * the same interface at the same time. + */ +#if !defined LWIP_DHCP_AUTOIP_COOP || defined __DOXYGEN__ +#define LWIP_DHCP_AUTOIP_COOP 0 +#endif + +/** + * LWIP_DHCP_AUTOIP_COOP_TRIES: Set to the number of DHCP DISCOVER probes + * that should be sent before falling back on AUTOIP (the DHCP client keeps + * running in this case). This can be set as low as 1 to get an AutoIP address + * very quickly, but you should be prepared to handle a changing IP address + * when DHCP overrides AutoIP. + */ +#if !defined LWIP_DHCP_AUTOIP_COOP_TRIES || defined __DOXYGEN__ +#define LWIP_DHCP_AUTOIP_COOP_TRIES 9 +#endif +/** + * @} + */ + +/* + ---------------------------------- + ----- SNMP MIB2 support ----- + ---------------------------------- +*/ +/** + * @defgroup lwip_opts_mib2 SNMP MIB2 callbacks + * @ingroup lwip_opts_infrastructure + * @{ + */ +/** + * LWIP_MIB2_CALLBACKS==1: Turn on SNMP MIB2 callbacks. + * Turn this on to get callbacks needed to implement MIB2. + * Usually MIB2_STATS should be enabled, too. + */ +#if !defined LWIP_MIB2_CALLBACKS || defined __DOXYGEN__ +#define LWIP_MIB2_CALLBACKS 0 +#endif +/** + * @} + */ + +/* + ---------------------------------- + -------- Multicast options ------- + ---------------------------------- +*/ +/** + * @defgroup lwip_opts_multicast Multicast + * @ingroup lwip_opts_infrastructure + * @{ + */ +/** + * LWIP_MULTICAST_TX_OPTIONS==1: Enable multicast TX support like the socket options + * IP_MULTICAST_TTL/IP_MULTICAST_IF/IP_MULTICAST_LOOP, as well as (currently only) + * core support for the corresponding IPv6 options. + */ +#if !defined LWIP_MULTICAST_TX_OPTIONS || defined __DOXYGEN__ +#define LWIP_MULTICAST_TX_OPTIONS ((LWIP_IGMP || LWIP_IPV6_MLD) && (LWIP_UDP || LWIP_RAW)) +#endif +/** + * @} + */ + +/* + ---------------------------------- + ---------- IGMP options ---------- + ---------------------------------- +*/ +/** + * @defgroup lwip_opts_igmp IGMP + * @ingroup lwip_opts_ipv4 + * @{ + */ +/** + * LWIP_IGMP==1: Turn on IGMP module. + */ +#if !defined LWIP_IGMP || defined __DOXYGEN__ +#define LWIP_IGMP 0 +#endif +#if !LWIP_IPV4 +#undef LWIP_IGMP +#define LWIP_IGMP 0 +#endif +/** + * @} + */ + +/* + ---------------------------------- + ---------- DNS options ----------- + ---------------------------------- +*/ +/** + * @defgroup lwip_opts_dns DNS + * @ingroup lwip_opts_callback + * @{ + */ +/** + * LWIP_DNS==1: Turn on DNS module. UDP must be available for DNS + * transport. + */ +#if !defined LWIP_DNS || defined __DOXYGEN__ +#define LWIP_DNS 0 +#endif + +/** DNS maximum number of entries to maintain locally. */ +#if !defined DNS_TABLE_SIZE || defined __DOXYGEN__ +#define DNS_TABLE_SIZE 4 +#endif + +/** DNS maximum host name length supported in the name table. */ +#if !defined DNS_MAX_NAME_LENGTH || defined __DOXYGEN__ +#define DNS_MAX_NAME_LENGTH 256 +#endif + +/** The maximum of DNS servers + * The first server can be initialized automatically by defining + * DNS_SERVER_ADDRESS(ipaddr), where 'ipaddr' is an 'ip_addr_t*' + */ +#if !defined DNS_MAX_SERVERS || defined __DOXYGEN__ +#define DNS_MAX_SERVERS 2 +#endif + +/** DNS maximum number of retries when asking for a name, before "timeout". */ +#if !defined DNS_MAX_RETRIES || defined __DOXYGEN__ +#define DNS_MAX_RETRIES 4 +#endif + +/** DNS do a name checking between the query and the response. */ +#if !defined DNS_DOES_NAME_CHECK || defined __DOXYGEN__ +#define DNS_DOES_NAME_CHECK 1 +#endif + +/** LWIP_DNS_SECURE: controls the security level of the DNS implementation + * Use all DNS security features by default. + * This is overridable but should only be needed by very small targets + * or when using against non standard DNS servers. */ +#if !defined LWIP_DNS_SECURE || defined __DOXYGEN__ +#define LWIP_DNS_SECURE (LWIP_DNS_SECURE_RAND_XID | LWIP_DNS_SECURE_NO_MULTIPLE_OUTSTANDING | LWIP_DNS_SECURE_RAND_SRC_PORT) +#endif + +/* A list of DNS security features follows */ +#define LWIP_DNS_SECURE_RAND_XID 1 +#define LWIP_DNS_SECURE_NO_MULTIPLE_OUTSTANDING 2 +#define LWIP_DNS_SECURE_RAND_SRC_PORT 4 + +/** DNS_LOCAL_HOSTLIST: Implements a local host-to-address list. If enabled, you have to define an initializer: + * \#define DNS_LOCAL_HOSTLIST_INIT {DNS_LOCAL_HOSTLIST_ELEM("host_ip4", IPADDR4_INIT_BYTES(1,2,3,4)), \ + * DNS_LOCAL_HOSTLIST_ELEM("host_ip6", IPADDR6_INIT_HOST(123, 234, 345, 456)} + * + * Instead, you can also use an external function: + * \#define DNS_LOOKUP_LOCAL_EXTERN(x) extern err_t my_lookup_function(const char *name, ip_addr_t *addr, u8_t dns_addrtype) + * that looks up the IP address and returns ERR_OK if found (LWIP_DNS_ADDRTYPE_xxx is passed in dns_addrtype). + */ +#if !defined DNS_LOCAL_HOSTLIST || defined __DOXYGEN__ +#define DNS_LOCAL_HOSTLIST 0 +#endif /* DNS_LOCAL_HOSTLIST */ + +/** If this is turned on, the local host-list can be dynamically changed + * at runtime. */ +#if !defined DNS_LOCAL_HOSTLIST_IS_DYNAMIC || defined __DOXYGEN__ +#define DNS_LOCAL_HOSTLIST_IS_DYNAMIC 0 +#endif /* DNS_LOCAL_HOSTLIST_IS_DYNAMIC */ + +/** Set this to 1 to enable querying ".local" names via mDNS + * using a One-Shot Multicast DNS Query */ +#if !defined LWIP_DNS_SUPPORT_MDNS_QUERIES || defined __DOXYGEN__ +#define LWIP_DNS_SUPPORT_MDNS_QUERIES 0 +#endif +/** + * @} + */ + +/* + --------------------------------- + ---------- UDP options ---------- + --------------------------------- +*/ +/** + * @defgroup lwip_opts_udp UDP + * @ingroup lwip_opts_callback + * @{ + */ +/** + * LWIP_UDP==1: Turn on UDP. + */ +#if !defined LWIP_UDP || defined __DOXYGEN__ +#define LWIP_UDP 1 +#endif + +/** + * LWIP_UDPLITE==1: Turn on UDP-Lite. (Requires LWIP_UDP) + */ +#if !defined LWIP_UDPLITE || defined __DOXYGEN__ +#define LWIP_UDPLITE 0 +#endif + +/** + * UDP_TTL: Default Time-To-Live value. + */ +#if !defined UDP_TTL || defined __DOXYGEN__ +#define UDP_TTL IP_DEFAULT_TTL +#endif + +/** + * LWIP_NETBUF_RECVINFO==1: append destination addr and port to every netbuf. + */ +#if !defined LWIP_NETBUF_RECVINFO || defined __DOXYGEN__ +#define LWIP_NETBUF_RECVINFO 0 +#endif +/** + * @} + */ + +/* + --------------------------------- + ---------- TCP options ---------- + --------------------------------- +*/ +/** + * @defgroup lwip_opts_tcp TCP + * @ingroup lwip_opts_callback + * @{ + */ +/** + * LWIP_TCP==1: Turn on TCP. + */ +#if !defined LWIP_TCP || defined __DOXYGEN__ +#define LWIP_TCP 1 +#endif + +/** + * TCP_TTL: Default Time-To-Live value. + */ +#if !defined TCP_TTL || defined __DOXYGEN__ +#define TCP_TTL IP_DEFAULT_TTL +#endif + +/** + * TCP_WND: The size of a TCP window. This must be at least + * (2 * TCP_MSS) for things to work well. + * ATTENTION: when using TCP_RCV_SCALE, TCP_WND is the total size + * with scaling applied. Maximum window value in the TCP header + * will be TCP_WND >> TCP_RCV_SCALE + */ +#if !defined TCP_WND || defined __DOXYGEN__ +#define TCP_WND (4 * TCP_MSS) +#endif + +/** + * TCP_MAXRTX: Maximum number of retransmissions of data segments. + */ +#if !defined TCP_MAXRTX || defined __DOXYGEN__ +#define TCP_MAXRTX 12 +#endif + +/** + * TCP_SYNMAXRTX: Maximum number of retransmissions of SYN segments. + */ +#if !defined TCP_SYNMAXRTX || defined __DOXYGEN__ +#define TCP_SYNMAXRTX 6 +#endif + +/** + * TCP_QUEUE_OOSEQ==1: TCP will queue segments that arrive out of order. + * Define to 0 if your device is low on memory. + */ +#if !defined TCP_QUEUE_OOSEQ || defined __DOXYGEN__ +#define TCP_QUEUE_OOSEQ LWIP_TCP +#endif + +/** + * LWIP_TCP_SACK_OUT==1: TCP will support sending selective acknowledgements (SACKs). + */ +#if !defined LWIP_TCP_SACK_OUT || defined __DOXYGEN__ +#define LWIP_TCP_SACK_OUT 0 +#endif + +/** + * LWIP_TCP_MAX_SACK_NUM: The maximum number of SACK values to include in TCP segments. + * Must be at least 1, but is only used if LWIP_TCP_SACK_OUT is enabled. + * NOTE: Even though we never send more than 3 or 4 SACK ranges in a single segment + * (depending on other options), setting this option to values greater than 4 is not pointless. + * This is basically the max number of SACK ranges we want to keep track of. + * As new data is delivered, some of the SACK ranges may be removed or merged. + * In that case some of those older SACK ranges may be used again. + * The amount of memory used to store SACK ranges is LWIP_TCP_MAX_SACK_NUM * 8 bytes for each TCP PCB. + */ +#if !defined LWIP_TCP_MAX_SACK_NUM || defined __DOXYGEN__ +#define LWIP_TCP_MAX_SACK_NUM 4 +#endif + +/** + * TCP_MSS: TCP Maximum segment size. (default is 536, a conservative default, + * you might want to increase this.) + * For the receive side, this MSS is advertised to the remote side + * when opening a connection. For the transmit size, this MSS sets + * an upper limit on the MSS advertised by the remote host. + */ +#if !defined TCP_MSS || defined __DOXYGEN__ +#define TCP_MSS 536 +#endif + +/** + * TCP_CALCULATE_EFF_SEND_MSS: "The maximum size of a segment that TCP really + * sends, the 'effective send MSS,' MUST be the smaller of the send MSS (which + * reflects the available reassembly buffer size at the remote host) and the + * largest size permitted by the IP layer" (RFC 1122) + * Setting this to 1 enables code that checks TCP_MSS against the MTU of the + * netif used for a connection and limits the MSS if it would be too big otherwise. + */ +#if !defined TCP_CALCULATE_EFF_SEND_MSS || defined __DOXYGEN__ +#define TCP_CALCULATE_EFF_SEND_MSS 1 +#endif + + +/** + * TCP_SND_BUF: TCP sender buffer space (bytes). + * To achieve good performance, this should be at least 2 * TCP_MSS. + */ +#if !defined TCP_SND_BUF || defined __DOXYGEN__ +#define TCP_SND_BUF (2 * TCP_MSS) +#endif + +/** + * TCP_SND_QUEUELEN: TCP sender buffer space (pbufs). This must be at least + * as much as (2 * TCP_SND_BUF/TCP_MSS) for things to work. + */ +#if !defined TCP_SND_QUEUELEN || defined __DOXYGEN__ +#define TCP_SND_QUEUELEN ((4 * (TCP_SND_BUF) + (TCP_MSS - 1))/(TCP_MSS)) +#endif + +/** + * TCP_SNDLOWAT: TCP writable space (bytes). This must be less than + * TCP_SND_BUF. It is the amount of space which must be available in the + * TCP snd_buf for select to return writable (combined with TCP_SNDQUEUELOWAT). + */ +#if !defined TCP_SNDLOWAT || defined __DOXYGEN__ +#define TCP_SNDLOWAT LWIP_MIN(LWIP_MAX(((TCP_SND_BUF)/2), (2 * TCP_MSS) + 1), (TCP_SND_BUF) - 1) +#endif + +/** + * TCP_SNDQUEUELOWAT: TCP writable bufs (pbuf count). This must be less + * than TCP_SND_QUEUELEN. If the number of pbufs queued on a pcb drops below + * this number, select returns writable (combined with TCP_SNDLOWAT). + */ +#if !defined TCP_SNDQUEUELOWAT || defined __DOXYGEN__ +#define TCP_SNDQUEUELOWAT LWIP_MAX(((TCP_SND_QUEUELEN)/2), 5) +#endif + +/** + * TCP_OOSEQ_MAX_BYTES: The default maximum number of bytes queued on ooseq per + * pcb if TCP_OOSEQ_BYTES_LIMIT is not defined. Default is 0 (no limit). + * Only valid for TCP_QUEUE_OOSEQ==1. + */ +#if !defined TCP_OOSEQ_MAX_BYTES || defined __DOXYGEN__ +#define TCP_OOSEQ_MAX_BYTES 0 +#endif + +/** + * TCP_OOSEQ_BYTES_LIMIT(pcb): Return the maximum number of bytes to be queued + * on ooseq per pcb, given the pcb. Only valid for TCP_QUEUE_OOSEQ==1 && + * TCP_OOSEQ_MAX_BYTES==1. + * Use this to override TCP_OOSEQ_MAX_BYTES to a dynamic value per pcb. + */ +#if !defined TCP_OOSEQ_BYTES_LIMIT +#if TCP_OOSEQ_MAX_BYTES +#define TCP_OOSEQ_BYTES_LIMIT(pcb) TCP_OOSEQ_MAX_BYTES +#elif defined __DOXYGEN__ +#define TCP_OOSEQ_BYTES_LIMIT(pcb) +#endif +#endif + +/** + * TCP_OOSEQ_MAX_PBUFS: The default maximum number of pbufs queued on ooseq per + * pcb if TCP_OOSEQ_BYTES_LIMIT is not defined. Default is 0 (no limit). + * Only valid for TCP_QUEUE_OOSEQ==1. + */ +#if !defined TCP_OOSEQ_MAX_PBUFS || defined __DOXYGEN__ +#define TCP_OOSEQ_MAX_PBUFS 0 +#endif + +/** + * TCP_OOSEQ_PBUFS_LIMIT(pcb): Return the maximum number of pbufs to be queued + * on ooseq per pcb, given the pcb. Only valid for TCP_QUEUE_OOSEQ==1 && + * TCP_OOSEQ_MAX_PBUFS==1. + * Use this to override TCP_OOSEQ_MAX_PBUFS to a dynamic value per pcb. + */ +#if !defined TCP_OOSEQ_PBUFS_LIMIT +#if TCP_OOSEQ_MAX_PBUFS +#define TCP_OOSEQ_PBUFS_LIMIT(pcb) TCP_OOSEQ_MAX_PBUFS +#elif defined __DOXYGEN__ +#define TCP_OOSEQ_PBUFS_LIMIT(pcb) +#endif +#endif + +/** + * TCP_LISTEN_BACKLOG: Enable the backlog option for tcp listen pcb. + */ +#if !defined TCP_LISTEN_BACKLOG || defined __DOXYGEN__ +#define TCP_LISTEN_BACKLOG 0 +#endif + +/** + * The maximum allowed backlog for TCP listen netconns. + * This backlog is used unless another is explicitly specified. + * 0xff is the maximum (u8_t). + */ +#if !defined TCP_DEFAULT_LISTEN_BACKLOG || defined __DOXYGEN__ +#define TCP_DEFAULT_LISTEN_BACKLOG 0xff +#endif + +/** + * TCP_OVERSIZE: The maximum number of bytes that tcp_write may + * allocate ahead of time in an attempt to create shorter pbuf chains + * for transmission. The meaningful range is 0 to TCP_MSS. Some + * suggested values are: + * + * 0: Disable oversized allocation. Each tcp_write() allocates a new + pbuf (old behaviour). + * 1: Allocate size-aligned pbufs with minimal excess. Use this if your + * scatter-gather DMA requires aligned fragments. + * 128: Limit the pbuf/memory overhead to 20%. + * TCP_MSS: Try to create unfragmented TCP packets. + * TCP_MSS/4: Try to create 4 fragments or less per TCP packet. + */ +#if !defined TCP_OVERSIZE || defined __DOXYGEN__ +#define TCP_OVERSIZE TCP_MSS +#endif + +/** + * LWIP_TCP_TIMESTAMPS==1: support the TCP timestamp option. + * The timestamp option is currently only used to help remote hosts, it is not + * really used locally. Therefore, it is only enabled when a TS option is + * received in the initial SYN packet from a remote host. + */ +#if !defined LWIP_TCP_TIMESTAMPS || defined __DOXYGEN__ +#define LWIP_TCP_TIMESTAMPS 0 +#endif + +/** + * TCP_WND_UPDATE_THRESHOLD: difference in window to trigger an + * explicit window update + */ +#if !defined TCP_WND_UPDATE_THRESHOLD || defined __DOXYGEN__ +#define TCP_WND_UPDATE_THRESHOLD LWIP_MIN((TCP_WND / 4), (TCP_MSS * 4)) +#endif + +/** + * LWIP_EVENT_API and LWIP_CALLBACK_API: Only one of these should be set to 1. + * LWIP_EVENT_API==1: The user defines lwip_tcp_event() to receive all + * events (accept, sent, etc) that happen in the system. + * LWIP_CALLBACK_API==1: The PCB callback function is called directly + * for the event. This is the default. + */ +#if !defined(LWIP_EVENT_API) && !defined(LWIP_CALLBACK_API) || defined __DOXYGEN__ +#define LWIP_EVENT_API 0 +#define LWIP_CALLBACK_API 1 +#else +#ifndef LWIP_EVENT_API +#define LWIP_EVENT_API 0 +#endif +#ifndef LWIP_CALLBACK_API +#define LWIP_CALLBACK_API 0 +#endif +#endif + +/** + * LWIP_WND_SCALE and TCP_RCV_SCALE: + * Set LWIP_WND_SCALE to 1 to enable window scaling. + * Set TCP_RCV_SCALE to the desired scaling factor (shift count in the + * range of [0..14]). + * When LWIP_WND_SCALE is enabled but TCP_RCV_SCALE is 0, we can use a large + * send window while having a small receive window only. + */ +#if !defined LWIP_WND_SCALE || defined __DOXYGEN__ +#define LWIP_WND_SCALE 0 +#define TCP_RCV_SCALE 0 +#endif + +/** + * LWIP_TCP_PCB_NUM_EXT_ARGS: + * When this is > 0, every tcp pcb (including listen pcb) includes a number of + * additional argument entries in an array (see tcp_ext_arg_alloc_id) + */ +#if !defined LWIP_TCP_PCB_NUM_EXT_ARGS || defined __DOXYGEN__ +#define LWIP_TCP_PCB_NUM_EXT_ARGS 0 +#endif + +/** LWIP_ALTCP==1: enable the altcp API. + * altcp is an abstraction layer that prevents applications linking against the + * tcp.h functions but provides the same functionality. It is used to e.g. add + * SSL/TLS or proxy-connect support to an application written for the tcp callback + * API without that application knowing the protocol details. + * + * With LWIP_ALTCP==0, applications written against the altcp API can still be + * compiled but are directly linked against the tcp.h callback API and then + * cannot use layered protocols. + * + * See @ref altcp_api + */ +#if !defined LWIP_ALTCP || defined __DOXYGEN__ +#define LWIP_ALTCP 0 +#endif + +/** LWIP_ALTCP_TLS==1: enable TLS support for altcp API. + * This needs a port of the functions in altcp_tls.h to a TLS library. + * A port to ARM mbedtls is provided with lwIP, see apps/altcp_tls/ directory + * and LWIP_ALTCP_TLS_MBEDTLS option. + */ +#if !defined LWIP_ALTCP_TLS || defined __DOXYGEN__ +#define LWIP_ALTCP_TLS 0 +#endif + +/** + * @} + */ + +/* + ---------------------------------- + ---------- Pbuf options ---------- + ---------------------------------- +*/ +/** + * @defgroup lwip_opts_pbuf PBUF + * @ingroup lwip_opts + * @{ + */ +/** + * PBUF_LINK_HLEN: the number of bytes that should be allocated for a + * link level header. The default is 14, the standard value for + * Ethernet. + */ +#if !defined PBUF_LINK_HLEN || defined __DOXYGEN__ +#if defined LWIP_HOOK_VLAN_SET && !defined __DOXYGEN__ +#define PBUF_LINK_HLEN (18 + ETH_PAD_SIZE) +#else /* LWIP_HOOK_VLAN_SET */ +#define PBUF_LINK_HLEN (14 + ETH_PAD_SIZE) +#endif /* LWIP_HOOK_VLAN_SET */ +#endif + +/** + * PBUF_LINK_ENCAPSULATION_HLEN: the number of bytes that should be allocated + * for an additional encapsulation header before ethernet headers (e.g. 802.11) + */ +#if !defined PBUF_LINK_ENCAPSULATION_HLEN || defined __DOXYGEN__ +#define PBUF_LINK_ENCAPSULATION_HLEN 0 +#endif + +/** + * PBUF_POOL_BUFSIZE: the size of each pbuf in the pbuf pool. The default is + * designed to accommodate single full size TCP frame in one pbuf, including + * TCP_MSS, IP header, and link header. + */ +#if !defined PBUF_POOL_BUFSIZE || defined __DOXYGEN__ +#define PBUF_POOL_BUFSIZE LWIP_MEM_ALIGN_SIZE(TCP_MSS+40+PBUF_LINK_ENCAPSULATION_HLEN+PBUF_LINK_HLEN) +#endif + +/** + * LWIP_PBUF_REF_T: Refcount type in pbuf. + * Default width of u8_t can be increased if 255 refs are not enough for you. + */ +#if !defined LWIP_PBUF_REF_T || defined __DOXYGEN__ +#define LWIP_PBUF_REF_T u8_t +#endif +/** + * @} + */ + +/* + ------------------------------------------------ + ---------- Network Interfaces options ---------- + ------------------------------------------------ +*/ +/** + * @defgroup lwip_opts_netif NETIF + * @ingroup lwip_opts + * @{ + */ +/** + * LWIP_SINGLE_NETIF==1: use a single netif only. This is the common case for + * small real-life targets. Some code like routing etc. can be left out. + */ +#if !defined LWIP_SINGLE_NETIF || defined __DOXYGEN__ +#define LWIP_SINGLE_NETIF 0 +#endif + +/** + * LWIP_NETIF_HOSTNAME==1: use DHCP_OPTION_HOSTNAME with netif's hostname + * field. + */ +#if !defined LWIP_NETIF_HOSTNAME || defined __DOXYGEN__ +#define LWIP_NETIF_HOSTNAME 0 +#endif + +/** + * LWIP_NETIF_API==1: Support netif api (in netifapi.c) + */ +#if !defined LWIP_NETIF_API || defined __DOXYGEN__ +#define LWIP_NETIF_API 0 +#endif + +/** + * LWIP_NETIF_STATUS_CALLBACK==1: Support a callback function whenever an interface + * changes its up/down status (i.e., due to DHCP IP acquisition) + */ +#if !defined LWIP_NETIF_STATUS_CALLBACK || defined __DOXYGEN__ +#define LWIP_NETIF_STATUS_CALLBACK 0 +#endif + +/** + * LWIP_NETIF_EXT_STATUS_CALLBACK==1: Support an extended callback function + * for several netif related event that supports multiple subscribers. + * @see netif_ext_status_callback + */ +#if !defined LWIP_NETIF_EXT_STATUS_CALLBACK || defined __DOXYGEN__ +#define LWIP_NETIF_EXT_STATUS_CALLBACK 0 +#endif + +/** + * LWIP_NETIF_LINK_CALLBACK==1: Support a callback function from an interface + * whenever the link changes (i.e., link down) + */ +#if !defined LWIP_NETIF_LINK_CALLBACK || defined __DOXYGEN__ +#define LWIP_NETIF_LINK_CALLBACK 0 +#endif + +/** + * LWIP_NETIF_REMOVE_CALLBACK==1: Support a callback function that is called + * when a netif has been removed + */ +#if !defined LWIP_NETIF_REMOVE_CALLBACK || defined __DOXYGEN__ +#define LWIP_NETIF_REMOVE_CALLBACK 0 +#endif + +/** + * LWIP_NETIF_HWADDRHINT==1: Cache link-layer-address hints (e.g. table + * indices) in struct netif. TCP and UDP can make use of this to prevent + * scanning the ARP table for every sent packet. While this is faster for big + * ARP tables or many concurrent connections, it might be counterproductive + * if you have a tiny ARP table or if there never are concurrent connections. + */ +#if !defined LWIP_NETIF_HWADDRHINT || defined __DOXYGEN__ +#define LWIP_NETIF_HWADDRHINT 0 +#endif + +/** + * LWIP_NETIF_TX_SINGLE_PBUF: if this is set to 1, lwIP *tries* to put all data + * to be sent into one single pbuf. This is for compatibility with DMA-enabled + * MACs that do not support scatter-gather. + * Beware that this might involve CPU-memcpy before transmitting that would not + * be needed without this flag! Use this only if you need to! + * + * ATTENTION: a driver should *NOT* rely on getting single pbufs but check TX + * pbufs for being in one piece. If not, @ref pbuf_clone can be used to get + * a single pbuf: + * if (p->next != NULL) { + * struct pbuf *q = pbuf_clone(PBUF_RAW, PBUF_RAM, p); + * if (q == NULL) { + * return ERR_MEM; + * } + * p = q; ATTENTION: do NOT free the old 'p' as the ref belongs to the caller! + * } + */ +#if !defined LWIP_NETIF_TX_SINGLE_PBUF || defined __DOXYGEN__ +#define LWIP_NETIF_TX_SINGLE_PBUF 0 +#endif /* LWIP_NETIF_TX_SINGLE_PBUF */ + +/** + * LWIP_NUM_NETIF_CLIENT_DATA: Number of clients that may store + * data in client_data member array of struct netif (max. 256). + */ +#if !defined LWIP_NUM_NETIF_CLIENT_DATA || defined __DOXYGEN__ +#define LWIP_NUM_NETIF_CLIENT_DATA 0 +#endif +/** + * @} + */ + +/* + ------------------------------------ + ---------- LOOPIF options ---------- + ------------------------------------ +*/ +/** + * @defgroup lwip_opts_loop Loopback interface + * @ingroup lwip_opts_netif + * @{ + */ +/** + * LWIP_HAVE_LOOPIF==1: Support loop interface (127.0.0.1). + * This is only needed when no real netifs are available. If at least one other + * netif is available, loopback traffic uses this netif. + */ +#if !defined LWIP_HAVE_LOOPIF || defined __DOXYGEN__ +#define LWIP_HAVE_LOOPIF (LWIP_NETIF_LOOPBACK && !LWIP_SINGLE_NETIF) +#endif + +/** + * LWIP_LOOPIF_MULTICAST==1: Support multicast/IGMP on loop interface (127.0.0.1). + */ +#if !defined LWIP_LOOPIF_MULTICAST || defined __DOXYGEN__ +#define LWIP_LOOPIF_MULTICAST 0 +#endif + +/** + * LWIP_NETIF_LOOPBACK==1: Support sending packets with a destination IP + * address equal to the netif IP address, looping them back up the stack. + */ +#if !defined LWIP_NETIF_LOOPBACK || defined __DOXYGEN__ +#define LWIP_NETIF_LOOPBACK 0 +#endif + +/** + * LWIP_LOOPBACK_MAX_PBUFS: Maximum number of pbufs on queue for loopback + * sending for each netif (0 = disabled) + */ +#if !defined LWIP_LOOPBACK_MAX_PBUFS || defined __DOXYGEN__ +#define LWIP_LOOPBACK_MAX_PBUFS 0 +#endif + +/** + * LWIP_NETIF_LOOPBACK_MULTITHREADING: Indicates whether threading is enabled in + * the system, as netifs must change how they behave depending on this setting + * for the LWIP_NETIF_LOOPBACK option to work. + * Setting this is needed to avoid reentering non-reentrant functions like + * tcp_input(). + * LWIP_NETIF_LOOPBACK_MULTITHREADING==1: Indicates that the user is using a + * multithreaded environment like tcpip.c. In this case, netif->input() + * is called directly. + * LWIP_NETIF_LOOPBACK_MULTITHREADING==0: Indicates a polling (or NO_SYS) setup. + * The packets are put on a list and netif_poll() must be called in + * the main application loop. + */ +#if !defined LWIP_NETIF_LOOPBACK_MULTITHREADING || defined __DOXYGEN__ +#define LWIP_NETIF_LOOPBACK_MULTITHREADING (!NO_SYS) +#endif +/** + * @} + */ + +/* + ------------------------------------ + ---------- Thread options ---------- + ------------------------------------ +*/ +/** + * @defgroup lwip_opts_thread Threading + * @ingroup lwip_opts_infrastructure + * @{ + */ +/** + * TCPIP_THREAD_NAME: The name assigned to the main tcpip thread. + */ +#if !defined TCPIP_THREAD_NAME || defined __DOXYGEN__ +#define TCPIP_THREAD_NAME "tcpip_thread" +#endif + +/** + * TCPIP_THREAD_STACKSIZE: The stack size used by the main tcpip thread. + * The stack size value itself is platform-dependent, but is passed to + * sys_thread_new() when the thread is created. + */ +#if !defined TCPIP_THREAD_STACKSIZE || defined __DOXYGEN__ +#define TCPIP_THREAD_STACKSIZE 0 +#endif + +/** + * TCPIP_THREAD_PRIO: The priority assigned to the main tcpip thread. + * The priority value itself is platform-dependent, but is passed to + * sys_thread_new() when the thread is created. + */ +#if !defined TCPIP_THREAD_PRIO || defined __DOXYGEN__ +#define TCPIP_THREAD_PRIO 1 +#endif + +/** + * TCPIP_MBOX_SIZE: The mailbox size for the tcpip thread messages + * The queue size value itself is platform-dependent, but is passed to + * sys_mbox_new() when tcpip_init is called. + */ +#if !defined TCPIP_MBOX_SIZE || defined __DOXYGEN__ +#define TCPIP_MBOX_SIZE 0 +#endif + +/** + * Define this to something that triggers a watchdog. This is called from + * tcpip_thread after processing a message. + */ +#if !defined LWIP_TCPIP_THREAD_ALIVE || defined __DOXYGEN__ +#define LWIP_TCPIP_THREAD_ALIVE() +#endif + +/** + * SLIPIF_THREAD_NAME: The name assigned to the slipif_loop thread. + */ +#if !defined SLIPIF_THREAD_NAME || defined __DOXYGEN__ +#define SLIPIF_THREAD_NAME "slipif_loop" +#endif + +/** + * SLIP_THREAD_STACKSIZE: The stack size used by the slipif_loop thread. + * The stack size value itself is platform-dependent, but is passed to + * sys_thread_new() when the thread is created. + */ +#if !defined SLIPIF_THREAD_STACKSIZE || defined __DOXYGEN__ +#define SLIPIF_THREAD_STACKSIZE 0 +#endif + +/** + * SLIPIF_THREAD_PRIO: The priority assigned to the slipif_loop thread. + * The priority value itself is platform-dependent, but is passed to + * sys_thread_new() when the thread is created. + */ +#if !defined SLIPIF_THREAD_PRIO || defined __DOXYGEN__ +#define SLIPIF_THREAD_PRIO 1 +#endif + +/** + * DEFAULT_THREAD_NAME: The name assigned to any other lwIP thread. + */ +#if !defined DEFAULT_THREAD_NAME || defined __DOXYGEN__ +#define DEFAULT_THREAD_NAME "lwIP" +#endif + +/** + * DEFAULT_THREAD_STACKSIZE: The stack size used by any other lwIP thread. + * The stack size value itself is platform-dependent, but is passed to + * sys_thread_new() when the thread is created. + */ +#if !defined DEFAULT_THREAD_STACKSIZE || defined __DOXYGEN__ +#define DEFAULT_THREAD_STACKSIZE 0 +#endif + +/** + * DEFAULT_THREAD_PRIO: The priority assigned to any other lwIP thread. + * The priority value itself is platform-dependent, but is passed to + * sys_thread_new() when the thread is created. + */ +#if !defined DEFAULT_THREAD_PRIO || defined __DOXYGEN__ +#define DEFAULT_THREAD_PRIO 1 +#endif + +/** + * DEFAULT_RAW_RECVMBOX_SIZE: The mailbox size for the incoming packets on a + * NETCONN_RAW. The queue size value itself is platform-dependent, but is passed + * to sys_mbox_new() when the recvmbox is created. + */ +#if !defined DEFAULT_RAW_RECVMBOX_SIZE || defined __DOXYGEN__ +#define DEFAULT_RAW_RECVMBOX_SIZE 0 +#endif + +/** + * DEFAULT_UDP_RECVMBOX_SIZE: The mailbox size for the incoming packets on a + * NETCONN_UDP. The queue size value itself is platform-dependent, but is passed + * to sys_mbox_new() when the recvmbox is created. + */ +#if !defined DEFAULT_UDP_RECVMBOX_SIZE || defined __DOXYGEN__ +#define DEFAULT_UDP_RECVMBOX_SIZE 0 +#endif + +/** + * DEFAULT_TCP_RECVMBOX_SIZE: The mailbox size for the incoming packets on a + * NETCONN_TCP. The queue size value itself is platform-dependent, but is passed + * to sys_mbox_new() when the recvmbox is created. + */ +#if !defined DEFAULT_TCP_RECVMBOX_SIZE || defined __DOXYGEN__ +#define DEFAULT_TCP_RECVMBOX_SIZE 0 +#endif + +/** + * DEFAULT_ACCEPTMBOX_SIZE: The mailbox size for the incoming connections. + * The queue size value itself is platform-dependent, but is passed to + * sys_mbox_new() when the acceptmbox is created. + */ +#if !defined DEFAULT_ACCEPTMBOX_SIZE || defined __DOXYGEN__ +#define DEFAULT_ACCEPTMBOX_SIZE 0 +#endif +/** + * @} + */ + +/* + ---------------------------------------------- + ---------- Sequential layer options ---------- + ---------------------------------------------- +*/ +/** + * @defgroup lwip_opts_netconn Netconn + * @ingroup lwip_opts_threadsafe_apis + * @{ + */ +/** + * LWIP_NETCONN==1: Enable Netconn API (require to use api_lib.c) + */ +#if !defined LWIP_NETCONN || defined __DOXYGEN__ +#define LWIP_NETCONN 1 +#endif + +/** LWIP_TCPIP_TIMEOUT==1: Enable tcpip_timeout/tcpip_untimeout to create + * timers running in tcpip_thread from another thread. + */ +#if !defined LWIP_TCPIP_TIMEOUT || defined __DOXYGEN__ +#define LWIP_TCPIP_TIMEOUT 0 +#endif + +/** LWIP_NETCONN_SEM_PER_THREAD==1: Use one (thread-local) semaphore per + * thread calling socket/netconn functions instead of allocating one + * semaphore per netconn (and per select etc.) + * ATTENTION: a thread-local semaphore for API calls is needed: + * - LWIP_NETCONN_THREAD_SEM_GET() returning a sys_sem_t* + * - LWIP_NETCONN_THREAD_SEM_ALLOC() creating the semaphore + * - LWIP_NETCONN_THREAD_SEM_FREE() freeing the semaphore + * The latter 2 can be invoked up by calling netconn_thread_init()/netconn_thread_cleanup(). + * Ports may call these for threads created with sys_thread_new(). + */ +#if !defined LWIP_NETCONN_SEM_PER_THREAD || defined __DOXYGEN__ +#define LWIP_NETCONN_SEM_PER_THREAD 0 +#endif + +/** LWIP_NETCONN_FULLDUPLEX==1: Enable code that allows reading from one thread, + * writing from a 2nd thread and closing from a 3rd thread at the same time. + * ATTENTION: This is currently really alpha! Some requirements: + * - LWIP_NETCONN_SEM_PER_THREAD==1 is required to use one socket/netconn from + * multiple threads at once + * - sys_mbox_free() has to unblock receive tasks waiting on recvmbox/acceptmbox + * and prevent a task pending on this during/after deletion + */ +#if !defined LWIP_NETCONN_FULLDUPLEX || defined __DOXYGEN__ +#define LWIP_NETCONN_FULLDUPLEX 0 +#endif +/** + * @} + */ + +/* + ------------------------------------ + ---------- Socket options ---------- + ------------------------------------ +*/ +/** + * @defgroup lwip_opts_socket Sockets + * @ingroup lwip_opts_threadsafe_apis + * @{ + */ +/** + * LWIP_SOCKET==1: Enable Socket API (require to use sockets.c) + */ +#if !defined LWIP_SOCKET || defined __DOXYGEN__ +#define LWIP_SOCKET 1 +#endif + +/** + * LWIP_COMPAT_SOCKETS==1: Enable BSD-style sockets functions names through defines. + * LWIP_COMPAT_SOCKETS==2: Same as ==1 but correctly named functions are created. + * While this helps code completion, it might conflict with existing libraries. + * (only used if you use sockets.c) + */ +#if !defined LWIP_COMPAT_SOCKETS || defined __DOXYGEN__ +#define LWIP_COMPAT_SOCKETS 1 +#endif + +/** + * LWIP_POSIX_SOCKETS_IO_NAMES==1: Enable POSIX-style sockets functions names. + * Disable this option if you use a POSIX operating system that uses the same + * names (read, write & close). (only used if you use sockets.c) + */ +#if !defined LWIP_POSIX_SOCKETS_IO_NAMES || defined __DOXYGEN__ +#define LWIP_POSIX_SOCKETS_IO_NAMES 1 +#endif + +/** + * LWIP_SOCKET_OFFSET==n: Increases the file descriptor number created by LwIP with n. + * This can be useful when there are multiple APIs which create file descriptors. + * When they all start with a different offset and you won't make them overlap you can + * re implement read/write/close/ioctl/fnctl to send the requested action to the right + * library (sharing select will need more work though). + */ +#if !defined LWIP_SOCKET_OFFSET || defined __DOXYGEN__ +#define LWIP_SOCKET_OFFSET 0 +#endif + +/** + * LWIP_TCP_KEEPALIVE==1: Enable TCP_KEEPIDLE, TCP_KEEPINTVL and TCP_KEEPCNT + * options processing. Note that TCP_KEEPIDLE and TCP_KEEPINTVL have to be set + * in seconds. (does not require sockets.c, and will affect tcp.c) + */ +#if !defined LWIP_TCP_KEEPALIVE || defined __DOXYGEN__ +#define LWIP_TCP_KEEPALIVE 0 +#endif + +/** + * LWIP_SO_SNDTIMEO==1: Enable send timeout for sockets/netconns and + * SO_SNDTIMEO processing. + */ +#if !defined LWIP_SO_SNDTIMEO || defined __DOXYGEN__ +#define LWIP_SO_SNDTIMEO 0 +#endif + +/** + * LWIP_SO_RCVTIMEO==1: Enable receive timeout for sockets/netconns and + * SO_RCVTIMEO processing. + */ +#if !defined LWIP_SO_RCVTIMEO || defined __DOXYGEN__ +#define LWIP_SO_RCVTIMEO 0 +#endif + +/** + * LWIP_SO_SNDRCVTIMEO_NONSTANDARD==1: SO_RCVTIMEO/SO_SNDTIMEO take an int + * (milliseconds, much like winsock does) instead of a struct timeval (default). + */ +#if !defined LWIP_SO_SNDRCVTIMEO_NONSTANDARD || defined __DOXYGEN__ +#define LWIP_SO_SNDRCVTIMEO_NONSTANDARD 0 +#endif + +/** + * LWIP_SO_RCVBUF==1: Enable SO_RCVBUF processing. + */ +#if !defined LWIP_SO_RCVBUF || defined __DOXYGEN__ +#define LWIP_SO_RCVBUF 0 +#endif + +/** + * LWIP_SO_LINGER==1: Enable SO_LINGER processing. + */ +#if !defined LWIP_SO_LINGER || defined __DOXYGEN__ +#define LWIP_SO_LINGER 0 +#endif + +/** + * If LWIP_SO_RCVBUF is used, this is the default value for recv_bufsize. + */ +#if !defined RECV_BUFSIZE_DEFAULT || defined __DOXYGEN__ +#define RECV_BUFSIZE_DEFAULT INT_MAX +#endif + +/** + * By default, TCP socket/netconn close waits 20 seconds max to send the FIN + */ +#if !defined LWIP_TCP_CLOSE_TIMEOUT_MS_DEFAULT || defined __DOXYGEN__ +#define LWIP_TCP_CLOSE_TIMEOUT_MS_DEFAULT 20000 +#endif + +/** + * SO_REUSE==1: Enable SO_REUSEADDR option. + */ +#if !defined SO_REUSE || defined __DOXYGEN__ +#define SO_REUSE 0 +#endif + +/** + * SO_REUSE_RXTOALL==1: Pass a copy of incoming broadcast/multicast packets + * to all local matches if SO_REUSEADDR is turned on. + * WARNING: Adds a memcpy for every packet if passing to more than one pcb! + */ +#if !defined SO_REUSE_RXTOALL || defined __DOXYGEN__ +#define SO_REUSE_RXTOALL 0 +#endif + +/** + * LWIP_FIONREAD_LINUXMODE==0 (default): ioctl/FIONREAD returns the amount of + * pending data in the network buffer. This is the way windows does it. It's + * the default for lwIP since it is smaller. + * LWIP_FIONREAD_LINUXMODE==1: ioctl/FIONREAD returns the size of the next + * pending datagram in bytes. This is the way linux does it. This code is only + * here for compatibility. + */ +#if !defined LWIP_FIONREAD_LINUXMODE || defined __DOXYGEN__ +#define LWIP_FIONREAD_LINUXMODE 0 +#endif + +/** + * LWIP_SOCKET_SELECT==1 (default): enable select() for sockets (uses a netconn + * callback to keep track of events). + * This saves RAM (counters per socket) and code (netconn event callback), which + * should improve performance a bit). + */ +#if !defined LWIP_SOCKET_SELECT || defined __DOXYGEN__ +#define LWIP_SOCKET_SELECT 1 +#endif + +/** + * LWIP_SOCKET_POLL==1 (default): enable poll() for sockets (including + * struct pollfd, nfds_t, and constants) + */ +#if !defined LWIP_SOCKET_POLL || defined __DOXYGEN__ +#define LWIP_SOCKET_POLL 1 +#endif +/** + * @} + */ + +/* + ---------------------------------------- + ---------- Statistics options ---------- + ---------------------------------------- +*/ +/** + * @defgroup lwip_opts_stats Statistics + * @ingroup lwip_opts_debug + * @{ + */ +/** + * LWIP_STATS==1: Enable statistics collection in lwip_stats. + */ +#if !defined LWIP_STATS || defined __DOXYGEN__ +#define LWIP_STATS 1 +#endif + +#if LWIP_STATS + +/** + * LWIP_STATS_DISPLAY==1: Compile in the statistics output functions. + */ +#if !defined LWIP_STATS_DISPLAY || defined __DOXYGEN__ +#define LWIP_STATS_DISPLAY 0 +#endif + +/** + * LINK_STATS==1: Enable link stats. + */ +#if !defined LINK_STATS || defined __DOXYGEN__ +#define LINK_STATS 1 +#endif + +/** + * ETHARP_STATS==1: Enable etharp stats. + */ +#if !defined ETHARP_STATS || defined __DOXYGEN__ +#define ETHARP_STATS (LWIP_ARP) +#endif + +/** + * IP_STATS==1: Enable IP stats. + */ +#if !defined IP_STATS || defined __DOXYGEN__ +#define IP_STATS 1 +#endif + +/** + * IPFRAG_STATS==1: Enable IP fragmentation stats. Default is + * on if using either frag or reass. + */ +#if !defined IPFRAG_STATS || defined __DOXYGEN__ +#define IPFRAG_STATS (IP_REASSEMBLY || IP_FRAG) +#endif + +/** + * ICMP_STATS==1: Enable ICMP stats. + */ +#if !defined ICMP_STATS || defined __DOXYGEN__ +#define ICMP_STATS 1 +#endif + +/** + * IGMP_STATS==1: Enable IGMP stats. + */ +#if !defined IGMP_STATS || defined __DOXYGEN__ +#define IGMP_STATS (LWIP_IGMP) +#endif + +/** + * UDP_STATS==1: Enable UDP stats. Default is on if + * UDP enabled, otherwise off. + */ +#if !defined UDP_STATS || defined __DOXYGEN__ +#define UDP_STATS (LWIP_UDP) +#endif + +/** + * TCP_STATS==1: Enable TCP stats. Default is on if TCP + * enabled, otherwise off. + */ +#if !defined TCP_STATS || defined __DOXYGEN__ +#define TCP_STATS (LWIP_TCP) +#endif + +/** + * MEM_STATS==1: Enable mem.c stats. + */ +#if !defined MEM_STATS || defined __DOXYGEN__ +#define MEM_STATS ((MEM_LIBC_MALLOC == 0) && (MEM_USE_POOLS == 0)) +#endif + +/** + * MEMP_STATS==1: Enable memp.c pool stats. + */ +#if !defined MEMP_STATS || defined __DOXYGEN__ +#define MEMP_STATS (MEMP_MEM_MALLOC == 0) +#endif + +/** + * SYS_STATS==1: Enable system stats (sem and mbox counts, etc). + */ +#if !defined SYS_STATS || defined __DOXYGEN__ +#define SYS_STATS (NO_SYS == 0) +#endif + +/** + * IP6_STATS==1: Enable IPv6 stats. + */ +#if !defined IP6_STATS || defined __DOXYGEN__ +#define IP6_STATS (LWIP_IPV6) +#endif + +/** + * ICMP6_STATS==1: Enable ICMP for IPv6 stats. + */ +#if !defined ICMP6_STATS || defined __DOXYGEN__ +#define ICMP6_STATS (LWIP_IPV6 && LWIP_ICMP6) +#endif + +/** + * IP6_FRAG_STATS==1: Enable IPv6 fragmentation stats. + */ +#if !defined IP6_FRAG_STATS || defined __DOXYGEN__ +#define IP6_FRAG_STATS (LWIP_IPV6 && (LWIP_IPV6_FRAG || LWIP_IPV6_REASS)) +#endif + +/** + * MLD6_STATS==1: Enable MLD for IPv6 stats. + */ +#if !defined MLD6_STATS || defined __DOXYGEN__ +#define MLD6_STATS (LWIP_IPV6 && LWIP_IPV6_MLD) +#endif + +/** + * ND6_STATS==1: Enable Neighbor discovery for IPv6 stats. + */ +#if !defined ND6_STATS || defined __DOXYGEN__ +#define ND6_STATS (LWIP_IPV6) +#endif + +/** + * MIB2_STATS==1: Stats for SNMP MIB2. + */ +#if !defined MIB2_STATS || defined __DOXYGEN__ +#define MIB2_STATS 0 +#endif + +#else + +#define LINK_STATS 0 +#define ETHARP_STATS 0 +#define IP_STATS 0 +#define IPFRAG_STATS 0 +#define ICMP_STATS 0 +#define IGMP_STATS 0 +#define UDP_STATS 0 +#define TCP_STATS 0 +#define MEM_STATS 0 +#define MEMP_STATS 0 +#define SYS_STATS 0 +#define LWIP_STATS_DISPLAY 0 +#define IP6_STATS 0 +#define ICMP6_STATS 0 +#define IP6_FRAG_STATS 0 +#define MLD6_STATS 0 +#define ND6_STATS 0 +#define MIB2_STATS 0 + +#endif /* LWIP_STATS */ +/** + * @} + */ + +/* + -------------------------------------- + ---------- Checksum options ---------- + -------------------------------------- +*/ +/** + * @defgroup lwip_opts_checksum Checksum + * @ingroup lwip_opts_infrastructure + * @{ + */ +/** + * LWIP_CHECKSUM_CTRL_PER_NETIF==1: Checksum generation/check can be enabled/disabled + * per netif. + * ATTENTION: if enabled, the CHECKSUM_GEN_* and CHECKSUM_CHECK_* defines must be enabled! + */ +#if !defined LWIP_CHECKSUM_CTRL_PER_NETIF || defined __DOXYGEN__ +#define LWIP_CHECKSUM_CTRL_PER_NETIF 0 +#endif + +/** + * CHECKSUM_GEN_IP==1: Generate checksums in software for outgoing IP packets. + */ +#if !defined CHECKSUM_GEN_IP || defined __DOXYGEN__ +#define CHECKSUM_GEN_IP 1 +#endif + +/** + * CHECKSUM_GEN_UDP==1: Generate checksums in software for outgoing UDP packets. + */ +#if !defined CHECKSUM_GEN_UDP || defined __DOXYGEN__ +#define CHECKSUM_GEN_UDP 1 +#endif + +/** + * CHECKSUM_GEN_TCP==1: Generate checksums in software for outgoing TCP packets. + */ +#if !defined CHECKSUM_GEN_TCP || defined __DOXYGEN__ +#define CHECKSUM_GEN_TCP 1 +#endif + +/** + * CHECKSUM_GEN_ICMP==1: Generate checksums in software for outgoing ICMP packets. + */ +#if !defined CHECKSUM_GEN_ICMP || defined __DOXYGEN__ +#define CHECKSUM_GEN_ICMP 1 +#endif + +/** + * CHECKSUM_GEN_ICMP6==1: Generate checksums in software for outgoing ICMP6 packets. + */ +#if !defined CHECKSUM_GEN_ICMP6 || defined __DOXYGEN__ +#define CHECKSUM_GEN_ICMP6 1 +#endif + +/** + * CHECKSUM_CHECK_IP==1: Check checksums in software for incoming IP packets. + */ +#if !defined CHECKSUM_CHECK_IP || defined __DOXYGEN__ +#define CHECKSUM_CHECK_IP 1 +#endif + +/** + * CHECKSUM_CHECK_UDP==1: Check checksums in software for incoming UDP packets. + */ +#if !defined CHECKSUM_CHECK_UDP || defined __DOXYGEN__ +#define CHECKSUM_CHECK_UDP 1 +#endif + +/** + * CHECKSUM_CHECK_TCP==1: Check checksums in software for incoming TCP packets. + */ +#if !defined CHECKSUM_CHECK_TCP || defined __DOXYGEN__ +#define CHECKSUM_CHECK_TCP 1 +#endif + +/** + * CHECKSUM_CHECK_ICMP==1: Check checksums in software for incoming ICMP packets. + */ +#if !defined CHECKSUM_CHECK_ICMP || defined __DOXYGEN__ +#define CHECKSUM_CHECK_ICMP 1 +#endif + +/** + * CHECKSUM_CHECK_ICMP6==1: Check checksums in software for incoming ICMPv6 packets + */ +#if !defined CHECKSUM_CHECK_ICMP6 || defined __DOXYGEN__ +#define CHECKSUM_CHECK_ICMP6 1 +#endif + +/** + * LWIP_CHECKSUM_ON_COPY==1: Calculate checksum when copying data from + * application buffers to pbufs. + */ +#if !defined LWIP_CHECKSUM_ON_COPY || defined __DOXYGEN__ +#define LWIP_CHECKSUM_ON_COPY 0 +#endif +/** + * @} + */ + +/* + --------------------------------------- + ---------- IPv6 options --------------- + --------------------------------------- +*/ +/** + * @defgroup lwip_opts_ipv6 IPv6 + * @ingroup lwip_opts + * @{ + */ +/** + * LWIP_IPV6==1: Enable IPv6 + */ +#if !defined LWIP_IPV6 || defined __DOXYGEN__ +#define LWIP_IPV6 0 +#endif + +/** + * IPV6_REASS_MAXAGE: Maximum time (in multiples of IP6_REASS_TMR_INTERVAL - so seconds, normally) + * a fragmented IP packet waits for all fragments to arrive. If not all fragments arrived + * in this time, the whole packet is discarded. + */ +#if !defined IPV6_REASS_MAXAGE || defined __DOXYGEN__ +#define IPV6_REASS_MAXAGE 60 +#endif + +/** + * LWIP_IPV6_SCOPES==1: Enable support for IPv6 address scopes, ensuring that + * e.g. link-local addresses are really treated as link-local. Disable this + * setting only for single-interface configurations. + * All addresses that have a scope according to the default policy (link-local + * unicast addresses, interface-local and link-local multicast addresses) should + * now have a zone set on them before being passed to the core API, although + * lwIP will currently attempt to select a zone on the caller's behalf when + * necessary. Applications that directly assign IPv6 addresses to interfaces + * (which is NOT recommended) must now ensure that link-local addresses carry + * the netif's zone. See the new ip6_zone.h header file for more information and + * relevant macros. For now it is still possible to turn off scopes support + * through the new LWIP_IPV6_SCOPES option. When upgrading an implementation that + * uses the core API directly, it is highly recommended to enable + * LWIP_IPV6_SCOPES_DEBUG at least for a while, to ensure e.g. proper address + * initialization. + */ +#if !defined LWIP_IPV6_SCOPES || defined __DOXYGEN__ +#define LWIP_IPV6_SCOPES (LWIP_IPV6 && !LWIP_SINGLE_NETIF) +#endif + +/** + * LWIP_IPV6_SCOPES_DEBUG==1: Perform run-time checks to verify that addresses + * are properly zoned (see ip6_zone.h on what that means) where it matters. + * Enabling this setting is highly recommended when upgrading from an existing + * installation that is not yet scope-aware; otherwise it may be too expensive. + */ +#if !defined LWIP_IPV6_SCOPES_DEBUG || defined __DOXYGEN__ +#define LWIP_IPV6_SCOPES_DEBUG 0 +#endif + +/** + * LWIP_IPV6_NUM_ADDRESSES: Number of IPv6 addresses per netif. + */ +#if !defined LWIP_IPV6_NUM_ADDRESSES || defined __DOXYGEN__ +#define LWIP_IPV6_NUM_ADDRESSES 3 +#endif + +/** + * LWIP_IPV6_FORWARD==1: Forward IPv6 packets across netifs + */ +#if !defined LWIP_IPV6_FORWARD || defined __DOXYGEN__ +#define LWIP_IPV6_FORWARD 0 +#endif + +/** + * LWIP_IPV6_FRAG==1: Fragment outgoing IPv6 packets that are too big. + */ +#if !defined LWIP_IPV6_FRAG || defined __DOXYGEN__ +#define LWIP_IPV6_FRAG 1 +#endif + +/** + * LWIP_IPV6_REASS==1: reassemble incoming IPv6 packets that fragmented + */ +#if !defined LWIP_IPV6_REASS || defined __DOXYGEN__ +#define LWIP_IPV6_REASS LWIP_IPV6 +#endif + +/** + * LWIP_IPV6_SEND_ROUTER_SOLICIT==1: Send router solicitation messages during + * network startup. + */ +#if !defined LWIP_IPV6_SEND_ROUTER_SOLICIT || defined __DOXYGEN__ +#define LWIP_IPV6_SEND_ROUTER_SOLICIT 1 +#endif + +/** + * LWIP_IPV6_AUTOCONFIG==1: Enable stateless address autoconfiguration as per RFC 4862. + */ +#if !defined LWIP_IPV6_AUTOCONFIG || defined __DOXYGEN__ +#define LWIP_IPV6_AUTOCONFIG LWIP_IPV6 +#endif + +/** + * LWIP_IPV6_ADDRESS_LIFETIMES==1: Keep valid and preferred lifetimes for each + * IPv6 address. Required for LWIP_IPV6_AUTOCONFIG. May still be enabled + * otherwise, in which case the application may assign address lifetimes with + * the appropriate macros. Addresses with no lifetime are assumed to be static. + * If this option is disabled, all addresses are assumed to be static. + */ +#if !defined LWIP_IPV6_ADDRESS_LIFETIMES || defined __DOXYGEN__ +#define LWIP_IPV6_ADDRESS_LIFETIMES LWIP_IPV6_AUTOCONFIG +#endif + +/** + * LWIP_IPV6_DUP_DETECT_ATTEMPTS=[0..7]: Number of duplicate address detection attempts. + */ +#if !defined LWIP_IPV6_DUP_DETECT_ATTEMPTS || defined __DOXYGEN__ +#define LWIP_IPV6_DUP_DETECT_ATTEMPTS 1 +#endif +/** + * @} + */ + +/** + * @defgroup lwip_opts_icmp6 ICMP6 + * @ingroup lwip_opts_ipv6 + * @{ + */ +/** + * LWIP_ICMP6==1: Enable ICMPv6 (mandatory per RFC) + */ +#if !defined LWIP_ICMP6 || defined __DOXYGEN__ +#define LWIP_ICMP6 LWIP_IPV6 +#endif + +/** + * LWIP_ICMP6_DATASIZE: bytes from original packet to send back in + * ICMPv6 error messages. + */ +#if !defined LWIP_ICMP6_DATASIZE || defined __DOXYGEN__ +#define LWIP_ICMP6_DATASIZE 8 +#endif + +/** + * LWIP_ICMP6_HL: default hop limit for ICMPv6 messages + */ +#if !defined LWIP_ICMP6_HL || defined __DOXYGEN__ +#define LWIP_ICMP6_HL 255 +#endif +/** + * @} + */ + +/** + * @defgroup lwip_opts_mld6 Multicast listener discovery + * @ingroup lwip_opts_ipv6 + * @{ + */ +/** + * LWIP_IPV6_MLD==1: Enable multicast listener discovery protocol. + * If LWIP_IPV6 is enabled but this setting is disabled, the MAC layer must + * indiscriminately pass all inbound IPv6 multicast traffic to lwIP. + */ +#if !defined LWIP_IPV6_MLD || defined __DOXYGEN__ +#define LWIP_IPV6_MLD LWIP_IPV6 +#endif + +/** + * MEMP_NUM_MLD6_GROUP: Max number of IPv6 multicast groups that can be joined. + * There must be enough groups so that each netif can join the solicited-node + * multicast group for each of its local addresses, plus one for MDNS if + * applicable, plus any number of groups to be joined on UDP sockets. + */ +#if !defined MEMP_NUM_MLD6_GROUP || defined __DOXYGEN__ +#define MEMP_NUM_MLD6_GROUP 4 +#endif +/** + * @} + */ + +/** + * @defgroup lwip_opts_nd6 Neighbor discovery + * @ingroup lwip_opts_ipv6 + * @{ + */ +/** + * LWIP_ND6_QUEUEING==1: queue outgoing IPv6 packets while MAC address + * is being resolved. + */ +#if !defined LWIP_ND6_QUEUEING || defined __DOXYGEN__ +#define LWIP_ND6_QUEUEING LWIP_IPV6 +#endif + +/** + * MEMP_NUM_ND6_QUEUE: Max number of IPv6 packets to queue during MAC resolution. + */ +#if !defined MEMP_NUM_ND6_QUEUE || defined __DOXYGEN__ +#define MEMP_NUM_ND6_QUEUE 20 +#endif + +/** + * LWIP_ND6_NUM_NEIGHBORS: Number of entries in IPv6 neighbor cache + */ +#if !defined LWIP_ND6_NUM_NEIGHBORS || defined __DOXYGEN__ +#define LWIP_ND6_NUM_NEIGHBORS 10 +#endif + +/** + * LWIP_ND6_NUM_DESTINATIONS: number of entries in IPv6 destination cache + */ +#if !defined LWIP_ND6_NUM_DESTINATIONS || defined __DOXYGEN__ +#define LWIP_ND6_NUM_DESTINATIONS 10 +#endif + +/** + * LWIP_ND6_NUM_PREFIXES: number of entries in IPv6 on-link prefixes cache + */ +#if !defined LWIP_ND6_NUM_PREFIXES || defined __DOXYGEN__ +#define LWIP_ND6_NUM_PREFIXES 5 +#endif + +/** + * LWIP_ND6_NUM_ROUTERS: number of entries in IPv6 default router cache + */ +#if !defined LWIP_ND6_NUM_ROUTERS || defined __DOXYGEN__ +#define LWIP_ND6_NUM_ROUTERS 3 +#endif + +/** + * LWIP_ND6_MAX_MULTICAST_SOLICIT: max number of multicast solicit messages to send + * (neighbor solicit and router solicit) + */ +#if !defined LWIP_ND6_MAX_MULTICAST_SOLICIT || defined __DOXYGEN__ +#define LWIP_ND6_MAX_MULTICAST_SOLICIT 3 +#endif + +/** + * LWIP_ND6_MAX_UNICAST_SOLICIT: max number of unicast neighbor solicitation messages + * to send during neighbor reachability detection. + */ +#if !defined LWIP_ND6_MAX_UNICAST_SOLICIT || defined __DOXYGEN__ +#define LWIP_ND6_MAX_UNICAST_SOLICIT 3 +#endif + +/** + * Unused: See ND RFC (time in milliseconds). + */ +#if !defined LWIP_ND6_MAX_ANYCAST_DELAY_TIME || defined __DOXYGEN__ +#define LWIP_ND6_MAX_ANYCAST_DELAY_TIME 1000 +#endif + +/** + * Unused: See ND RFC + */ +#if !defined LWIP_ND6_MAX_NEIGHBOR_ADVERTISEMENT || defined __DOXYGEN__ +#define LWIP_ND6_MAX_NEIGHBOR_ADVERTISEMENT 3 +#endif + +/** + * LWIP_ND6_REACHABLE_TIME: default neighbor reachable time (in milliseconds). + * May be updated by router advertisement messages. + */ +#if !defined LWIP_ND6_REACHABLE_TIME || defined __DOXYGEN__ +#define LWIP_ND6_REACHABLE_TIME 30000 +#endif + +/** + * LWIP_ND6_RETRANS_TIMER: default retransmission timer for solicitation messages + */ +#if !defined LWIP_ND6_RETRANS_TIMER || defined __DOXYGEN__ +#define LWIP_ND6_RETRANS_TIMER 1000 +#endif + +/** + * LWIP_ND6_DELAY_FIRST_PROBE_TIME: Delay before first unicast neighbor solicitation + * message is sent, during neighbor reachability detection. + */ +#if !defined LWIP_ND6_DELAY_FIRST_PROBE_TIME || defined __DOXYGEN__ +#define LWIP_ND6_DELAY_FIRST_PROBE_TIME 5000 +#endif + +/** + * LWIP_ND6_ALLOW_RA_UPDATES==1: Allow Router Advertisement messages to update + * Reachable time and retransmission timers, and netif MTU. + */ +#if !defined LWIP_ND6_ALLOW_RA_UPDATES || defined __DOXYGEN__ +#define LWIP_ND6_ALLOW_RA_UPDATES 1 +#endif + +/** + * LWIP_ND6_TCP_REACHABILITY_HINTS==1: Allow TCP to provide Neighbor Discovery + * with reachability hints for connected destinations. This helps avoid sending + * unicast neighbor solicitation messages. + */ +#if !defined LWIP_ND6_TCP_REACHABILITY_HINTS || defined __DOXYGEN__ +#define LWIP_ND6_TCP_REACHABILITY_HINTS 1 +#endif + +/** + * LWIP_ND6_RDNSS_MAX_DNS_SERVERS > 0: Use IPv6 Router Advertisement Recursive + * DNS Server Option (as per RFC 6106) to copy a defined maximum number of DNS + * servers to the DNS module. + */ +#if !defined LWIP_ND6_RDNSS_MAX_DNS_SERVERS || defined __DOXYGEN__ +#define LWIP_ND6_RDNSS_MAX_DNS_SERVERS 0 +#endif +/** + * @} + */ + +/** + * @defgroup lwip_opts_dhcpv6 DHCPv6 + * @ingroup lwip_opts_ipv6 + * @{ + */ +/** + * LWIP_IPV6_DHCP6==1: enable DHCPv6 stateful/stateless address autoconfiguration. + */ +#if !defined LWIP_IPV6_DHCP6 || defined __DOXYGEN__ +#define LWIP_IPV6_DHCP6 0 +#endif + +/** + * LWIP_IPV6_DHCP6_STATEFUL==1: enable DHCPv6 stateful address autoconfiguration. + * (not supported, yet!) + */ +#if !defined LWIP_IPV6_DHCP6_STATEFUL || defined __DOXYGEN__ +#define LWIP_IPV6_DHCP6_STATEFUL 0 +#endif + +/** + * LWIP_IPV6_DHCP6_STATELESS==1: enable DHCPv6 stateless address autoconfiguration. + */ +#if !defined LWIP_IPV6_DHCP6_STATELESS || defined __DOXYGEN__ +#define LWIP_IPV6_DHCP6_STATELESS LWIP_IPV6_DHCP6 +#endif + +/** + * LWIP_DHCP6_GETS_NTP==1: Request NTP servers via DHCPv6. For each + * response packet, a callback is called, which has to be provided by the port: + * void dhcp6_set_ntp_servers(u8_t num_ntp_servers, ip_addr_t* ntp_server_addrs); +*/ +#if !defined LWIP_DHCP6_GET_NTP_SRV || defined __DOXYGEN__ +#define LWIP_DHCP6_GET_NTP_SRV 0 +#endif + +/** + * The maximum of NTP servers requested + */ +#if !defined LWIP_DHCP6_MAX_NTP_SERVERS || defined __DOXYGEN__ +#define LWIP_DHCP6_MAX_NTP_SERVERS 1 +#endif + +/** + * LWIP_DHCP6_MAX_DNS_SERVERS > 0: Request DNS servers via DHCPv6. + * DNS servers received in the response are passed to DNS via @ref dns_setserver() + * (up to the maximum limit defined here). + */ +#if !defined LWIP_DHCP6_MAX_DNS_SERVERS || defined __DOXYGEN__ +#define LWIP_DHCP6_MAX_DNS_SERVERS DNS_MAX_SERVERS +#endif +/** + * @} + */ + +/* + --------------------------------------- + ---------- Hook options --------------- + --------------------------------------- +*/ + +/** + * @defgroup lwip_opts_hooks Hooks + * @ingroup lwip_opts_infrastructure + * Hooks are undefined by default, define them to a function if you need them. + * @{ + */ + +/** + * LWIP_HOOK_FILENAME: Custom filename to \#include in files that provide hooks. + * Declare your hook function prototypes in there, you may also \#include all headers + * providing data types that are need in this file. + */ +#ifdef __DOXYGEN__ +#define LWIP_HOOK_FILENAME "path/to/my/lwip_hooks.h" +#endif + +/** + * LWIP_HOOK_TCP_ISN: + * Hook for generation of the Initial Sequence Number (ISN) for a new TCP + * connection. The default lwIP ISN generation algorithm is very basic and may + * allow for TCP spoofing attacks. This hook provides the means to implement + * the standardized ISN generation algorithm from RFC 6528 (see contrib/adons/tcp_isn), + * or any other desired algorithm as a replacement. + * Called from tcp_connect() and tcp_listen_input() when an ISN is needed for + * a new TCP connection, if TCP support (@ref LWIP_TCP) is enabled.\n + * Signature:\code{.c} + * u32_t my_hook_tcp_isn(const ip_addr_t* local_ip, u16_t local_port, const ip_addr_t* remote_ip, u16_t remote_port); + * \endcode + * - it may be necessary to use "struct ip_addr" (ip4_addr, ip6_addr) instead of "ip_addr_t" in function declarations\n + * Arguments: + * - local_ip: pointer to the local IP address of the connection + * - local_port: local port number of the connection (host-byte order) + * - remote_ip: pointer to the remote IP address of the connection + * - remote_port: remote port number of the connection (host-byte order)\n + * Return value: + * - the 32-bit Initial Sequence Number to use for the new TCP connection. + */ +#ifdef __DOXYGEN__ +#define LWIP_HOOK_TCP_ISN(local_ip, local_port, remote_ip, remote_port) +#endif + +/** + * LWIP_HOOK_TCP_INPACKET_PCB: + * Hook for intercepting incoming packets before they are passed to a pcb. This + * allows updating some state or even dropping a packet. + * Signature:\code{.c} + * err_t my_hook_tcp_inpkt(struct tcp_pcb *pcb, struct tcp_hdr *hdr, u16_t optlen, u16_t opt1len, u8_t *opt2, struct pbuf *p); + * \endcode + * Arguments: + * - pcb: tcp_pcb selected for input of this packet (ATTENTION: this may be + * struct tcp_pcb_listen if pcb->state == LISTEN) + * - hdr: pointer to tcp header (ATTENTION: tcp options may not be in one piece!) + * - optlen: tcp option length + * - opt1len: tcp option length 1st part + * - opt2: if this is != NULL, tcp options are split among 2 pbufs. In that case, + * options start at right after the tcp header ('(u8_t*)(hdr + 1)') for + * the first 'opt1len' bytes and the rest starts at 'opt2'. opt2len can + * be simply calculated: 'opt2len = optlen - opt1len;' + * - p: input packet, p->payload points to application data (that's why tcp hdr + * and options are passed in seperately) + * Return value: + * - ERR_OK: continue input of this packet as normal + * - != ERR_OK: drop this packet for input (don't continue input processing) + * + * ATTENTION: don't call any tcp api functions that might change tcp state (pcb + * state or any pcb lists) from this callback! + */ +#ifdef __DOXYGEN__ +#define LWIP_HOOK_TCP_INPACKET_PCB(pcb, hdr, optlen, opt1len, opt2, p) +#endif + +/** + * LWIP_HOOK_TCP_OUT_TCPOPT_LENGTH: + * Hook for increasing the size of the options allocated with a tcp header. + * Together with LWIP_HOOK_TCP_OUT_ADD_TCPOPTS, this can be used to add custom + * options to outgoing tcp segments. + * Signature:\code{.c} + * u8_t my_hook_tcp_out_tcpopt_length(const struct tcp_pcb *pcb, u8_t internal_option_length); + * \endcode + * Arguments: + * - pcb: tcp_pcb that transmits (ATTENTION: this may be NULL or + * struct tcp_pcb_listen if pcb->state == LISTEN) + * - internal_option_length: tcp option length used by the stack internally + * Return value: + * - a number of bytes to allocate for tcp options (internal_option_length <= ret <= 40) + * + * ATTENTION: don't call any tcp api functions that might change tcp state (pcb + * state or any pcb lists) from this callback! + */ +#ifdef __DOXYGEN__ +#define LWIP_HOOK_TCP_OUT_TCPOPT_LENGTH(pcb, internal_len) +#endif + +/** + * LWIP_HOOK_TCP_OUT_ADD_TCPOPTS: + * Hook for adding custom options to outgoing tcp segments. + * Space for these custom options has to be reserved via LWIP_HOOK_TCP_OUT_TCPOPT_LENGTH. + * Signature:\code{.c} + * u32_t *my_hook_tcp_out_add_tcpopts(struct pbuf *p, struct tcp_hdr *hdr, const struct tcp_pcb *pcb, u32_t *opts); + * \endcode + * Arguments: + * - p: output packet, p->payload pointing to tcp header, data follows + * - hdr: tcp header + * - pcb: tcp_pcb that transmits (ATTENTION: this may be NULL or + * struct tcp_pcb_listen if pcb->state == LISTEN) + * - opts: pointer where to add the custom options (there may already be options + * between the header and these) + * Return value: + * - pointer pointing directly after the inserted options + * + * ATTENTION: don't call any tcp api functions that might change tcp state (pcb + * state or any pcb lists) from this callback! + */ +#ifdef __DOXYGEN__ +#define LWIP_HOOK_TCP_OUT_ADD_TCPOPTS(p, hdr, pcb, opts) +#endif + +/** + * LWIP_HOOK_IP4_INPUT(pbuf, input_netif): + * Called from ip_input() (IPv4) + * Signature:\code{.c} + * int my_hook(struct pbuf *pbuf, struct netif *input_netif); + * \endcode + * Arguments: + * - pbuf: received struct pbuf passed to ip_input() + * - input_netif: struct netif on which the packet has been received + * Return values: + * - 0: Hook has not consumed the packet, packet is processed as normal + * - != 0: Hook has consumed the packet. + * If the hook consumed the packet, 'pbuf' is in the responsibility of the hook + * (i.e. free it when done). + */ +#ifdef __DOXYGEN__ +#define LWIP_HOOK_IP4_INPUT(pbuf, input_netif) +#endif + +/** + * LWIP_HOOK_IP4_ROUTE(dest): + * Called from ip_route() (IPv4) + * Signature:\code{.c} + * struct netif *my_hook(const ip4_addr_t *dest); + * \endcode + * Arguments: + * - dest: destination IPv4 address + * Returns values: + * - the destination netif + * - NULL if no destination netif is found. In that case, ip_route() continues as normal. + */ +#ifdef __DOXYGEN__ +#define LWIP_HOOK_IP4_ROUTE() +#endif + +/** + * LWIP_HOOK_IP4_ROUTE_SRC(src, dest): + * Source-based routing for IPv4 - called from ip_route() (IPv4) + * Signature:\code{.c} + * struct netif *my_hook(const ip4_addr_t *src, const ip4_addr_t *dest); + * \endcode + * Arguments: + * - src: local/source IPv4 address + * - dest: destination IPv4 address + * Returns values: + * - the destination netif + * - NULL if no destination netif is found. In that case, ip_route() continues as normal. + */ +#ifdef __DOXYGEN__ +#define LWIP_HOOK_IP4_ROUTE_SRC(src, dest) +#endif + +/** + * LWIP_HOOK_IP4_CANFORWARD(src, dest): + * Check if an IPv4 can be forwarded - called from: + * ip4_input() -> ip4_forward() -> ip4_canforward() (IPv4) + * - source address is available via ip4_current_src_addr() + * - calling an output function in this context (e.g. multicast router) is allowed + * Signature:\code{.c} + * int my_hook(struct pbuf *p, u32_t dest_addr_hostorder); + * \endcode + * Arguments: + * - p: packet to forward + * - dest: destination IPv4 address + * Returns values: + * - 1: forward + * - 0: don't forward + * - -1: no decision. In that case, ip4_canforward() continues as normal. + */ +#ifdef __DOXYGEN__ +#define LWIP_HOOK_IP4_CANFORWARD(src, dest) +#endif + +/** + * LWIP_HOOK_ETHARP_GET_GW(netif, dest): + * Called from etharp_output() (IPv4) + * Signature:\code{.c} + * const ip4_addr_t *my_hook(struct netif *netif, const ip4_addr_t *dest); + * \endcode + * Arguments: + * - netif: the netif used for sending + * - dest: the destination IPv4 address + * Return values: + * - the IPv4 address of the gateway to handle the specified destination IPv4 address + * - NULL, in which case the netif's default gateway is used + * + * The returned address MUST be directly reachable on the specified netif! + * This function is meant to implement advanced IPv4 routing together with + * LWIP_HOOK_IP4_ROUTE(). The actual routing/gateway table implementation is + * not part of lwIP but can e.g. be hidden in the netif's state argument. +*/ +#ifdef __DOXYGEN__ +#define LWIP_HOOK_ETHARP_GET_GW(netif, dest) +#endif + +/** + * LWIP_HOOK_IP6_INPUT(pbuf, input_netif): + * Called from ip6_input() (IPv6) + * Signature:\code{.c} + * int my_hook(struct pbuf *pbuf, struct netif *input_netif); + * \endcode + * Arguments: + * - pbuf: received struct pbuf passed to ip6_input() + * - input_netif: struct netif on which the packet has been received + * Return values: + * - 0: Hook has not consumed the packet, packet is processed as normal + * - != 0: Hook has consumed the packet. + * If the hook consumed the packet, 'pbuf' is in the responsibility of the hook + * (i.e. free it when done). + */ +#ifdef __DOXYGEN__ +#define LWIP_HOOK_IP6_INPUT(pbuf, input_netif) +#endif + +/** + * LWIP_HOOK_IP6_ROUTE(src, dest): + * Called from ip_route() (IPv6) + * Signature:\code{.c} + * struct netif *my_hook(const ip6_addr_t *dest, const ip6_addr_t *src); + * \endcode + * Arguments: + * - src: source IPv6 address + * - dest: destination IPv6 address + * Return values: + * - the destination netif + * - NULL if no destination netif is found. In that case, ip6_route() continues as normal. + */ +#ifdef __DOXYGEN__ +#define LWIP_HOOK_IP6_ROUTE(src, dest) +#endif + +/** + * LWIP_HOOK_ND6_GET_GW(netif, dest): + * Called from nd6_get_next_hop_entry() (IPv6) + * Signature:\code{.c} + * const ip6_addr_t *my_hook(struct netif *netif, const ip6_addr_t *dest); + * \endcode + * Arguments: + * - netif: the netif used for sending + * - dest: the destination IPv6 address + * Return values: + * - the IPv6 address of the next hop to handle the specified destination IPv6 address + * - NULL, in which case a NDP-discovered router is used instead + * + * The returned address MUST be directly reachable on the specified netif! + * This function is meant to implement advanced IPv6 routing together with + * LWIP_HOOK_IP6_ROUTE(). The actual routing/gateway table implementation is + * not part of lwIP but can e.g. be hidden in the netif's state argument. +*/ +#ifdef __DOXYGEN__ +#define LWIP_HOOK_ND6_GET_GW(netif, dest) +#endif + +/** + * LWIP_HOOK_VLAN_CHECK(netif, eth_hdr, vlan_hdr): + * Called from ethernet_input() if VLAN support is enabled + * Signature:\code{.c} + * int my_hook(struct netif *netif, struct eth_hdr *eth_hdr, struct eth_vlan_hdr *vlan_hdr); + * \endcode + * Arguments: + * - netif: struct netif on which the packet has been received + * - eth_hdr: struct eth_hdr of the packet + * - vlan_hdr: struct eth_vlan_hdr of the packet + * Return values: + * - 0: Packet must be dropped. + * - != 0: Packet must be accepted. + */ +#ifdef __DOXYGEN__ +#define LWIP_HOOK_VLAN_CHECK(netif, eth_hdr, vlan_hdr) +#endif + +/** + * LWIP_HOOK_VLAN_SET: + * Hook can be used to set prio_vid field of vlan_hdr. If you need to store data + * on per-netif basis to implement this callback, see @ref netif_cd. + * Called from ethernet_output() if VLAN support (@ref ETHARP_SUPPORT_VLAN) is enabled.\n + * Signature:\code{.c} + * s32_t my_hook_vlan_set(struct netif* netif, struct pbuf* pbuf, const struct eth_addr* src, const struct eth_addr* dst, u16_t eth_type);\n + * \endcode + * Arguments: + * - netif: struct netif that the packet will be sent through + * - p: struct pbuf packet to be sent + * - src: source eth address + * - dst: destination eth address + * - eth_type: ethernet type to packet to be sent\n + * + * + * Return values: + * - <0: Packet shall not contain VLAN header. + * - 0 <= return value <= 0xFFFF: Packet shall contain VLAN header. Return value is prio_vid in host byte order. + */ +#ifdef __DOXYGEN__ +#define LWIP_HOOK_VLAN_SET(netif, p, src, dst, eth_type) +#endif + +/** + * LWIP_HOOK_MEMP_AVAILABLE(memp_t_type): + * Called from memp_free() when a memp pool was empty and an item is now available + * Signature:\code{.c} + * void my_hook(memp_t type); + * \endcode + */ +#ifdef __DOXYGEN__ +#define LWIP_HOOK_MEMP_AVAILABLE(memp_t_type) +#endif + +/** + * LWIP_HOOK_UNKNOWN_ETH_PROTOCOL(pbuf, netif): + * Called from ethernet_input() when an unknown eth type is encountered. + * Signature:\code{.c} + * err_t my_hook(struct pbuf* pbuf, struct netif* netif); + * \endcode + * Arguments: + * - p: rx packet with unknown eth type + * - netif: netif on which the packet has been received + * Return values: + * - ERR_OK if packet is accepted (hook function now owns the pbuf) + * - any error code otherwise (pbuf is freed) + * + * Payload points to ethernet header! + */ +#ifdef __DOXYGEN__ +#define LWIP_HOOK_UNKNOWN_ETH_PROTOCOL(pbuf, netif) +#endif + +/** + * LWIP_HOOK_DHCP_APPEND_OPTIONS(netif, dhcp, state, msg, msg_type, options_len_ptr): + * Called from various dhcp functions when sending a DHCP message. + * This hook is called just before the DHCP message trailer is added, so the + * options are at the end of a DHCP message. + * Signature:\code{.c} + * void my_hook(struct netif *netif, struct dhcp *dhcp, u8_t state, struct dhcp_msg *msg, + * u8_t msg_type, u16_t *options_len_ptr); + * \endcode + * Arguments: + * - netif: struct netif that the packet will be sent through + * - dhcp: struct dhcp on that netif + * - state: current dhcp state (dhcp_state_enum_t as an u8_t) + * - msg: struct dhcp_msg that will be sent + * - msg_type: dhcp message type to be sent (u8_t) + * - options_len_ptr: pointer to the current length of options in the dhcp_msg "msg" + * (must be increased when options are added!) + * + * Options need to appended like this: + * LWIP_ASSERT("dhcp option overflow", *options_len_ptr + option_len + 2 <= DHCP_OPTIONS_LEN); + * msg->options[(*options_len_ptr)++] = <option_number>; + * msg->options[(*options_len_ptr)++] = <option_len>; + * msg->options[(*options_len_ptr)++] = <option_bytes>; + * [...] + */ +#ifdef __DOXYGEN__ +#define LWIP_HOOK_DHCP_APPEND_OPTIONS(netif, dhcp, state, msg, msg_type, options_len_ptr) +#endif + +/** + * LWIP_HOOK_DHCP_PARSE_OPTION(netif, dhcp, state, msg, msg_type, option, len, pbuf, option_value_offset): + * Called from dhcp_parse_reply when receiving a DHCP message. + * This hook is called for every option in the received message that is not handled internally. + * Signature:\code{.c} + * void my_hook(struct netif *netif, struct dhcp *dhcp, u8_t state, struct dhcp_msg *msg, + * u8_t msg_type, u8_t option, u8_t option_len, struct pbuf *pbuf, u16_t option_value_offset); + * \endcode + * Arguments: + * - netif: struct netif that the packet will be sent through + * - dhcp: struct dhcp on that netif + * - state: current dhcp state (dhcp_state_enum_t as an u8_t) + * - msg: struct dhcp_msg that was received + * - msg_type: dhcp message type received (u8_t, ATTENTION: only valid after + * the message type option has been parsed!) + * - option: option value (u8_t) + * - len: option data length (u8_t) + * - pbuf: pbuf where option data is contained + * - option_value_offset: offset in pbuf where option data begins + * + * A nice way to get the option contents is pbuf_get_contiguous(): + * u8_t buf[32]; + * u8_t *ptr = (u8_t*)pbuf_get_contiguous(p, buf, sizeof(buf), LWIP_MIN(option_len, sizeof(buf)), offset); + */ +#ifdef __DOXYGEN__ +#define LWIP_HOOK_DHCP_PARSE_OPTION(netif, dhcp, state, msg, msg_type, option, len, pbuf, offset) +#endif + +/** + * LWIP_HOOK_DHCP6_APPEND_OPTIONS(netif, dhcp6, state, msg, msg_type, options_len_ptr, max_len): + * Called from various dhcp6 functions when sending a DHCP6 message. + * This hook is called just before the DHCP6 message is sent, so the + * options are at the end of a DHCP6 message. + * Signature:\code{.c} + * void my_hook(struct netif *netif, struct dhcp6 *dhcp, u8_t state, struct dhcp6_msg *msg, + * u8_t msg_type, u16_t *options_len_ptr); + * \endcode + * Arguments: + * - netif: struct netif that the packet will be sent through + * - dhcp6: struct dhcp6 on that netif + * - state: current dhcp6 state (dhcp6_state_enum_t as an u8_t) + * - msg: struct dhcp6_msg that will be sent + * - msg_type: dhcp6 message type to be sent (u8_t) + * - options_len_ptr: pointer to the current length of options in the dhcp6_msg "msg" + * (must be increased when options are added!) + * + * Options need to appended like this: + * u8_t *options = (u8_t *)(msg + 1); + * LWIP_ASSERT("dhcp option overflow", sizeof(struct dhcp6_msg) + *options_len_ptr + newoptlen <= max_len); + * options[(*options_len_ptr)++] = <option_data>; + * [...] + */ +#ifdef __DOXYGEN__ +#define LWIP_HOOK_DHCP6_APPEND_OPTIONS(netif, dhcp6, state, msg, msg_type, options_len_ptr, max_len) +#endif + +/** + * LWIP_HOOK_SOCKETS_SETSOCKOPT(s, sock, level, optname, optval, optlen, err) + * Called from socket API to implement setsockopt() for options not provided by lwIP. + * Core lock is held when this hook is called. + * Signature:\code{.c} + * int my_hook(int s, struct lwip_sock *sock, int level, int optname, const void *optval, socklen_t optlen, int *err) + * \endcode + * Arguments: + * - s: socket file descriptor + * - sock: internal socket descriptor (see lwip/priv/sockets_priv.h) + * - level: protocol level at which the option resides + * - optname: option to set + * - optval: value to set + * - optlen: size of optval + * - err: output error + * Return values: + * - 0: Hook has not consumed the option, code continues as normal (to internal options) + * - != 0: Hook has consumed the option, 'err' is returned + */ +#ifdef __DOXYGEN__ +#define LWIP_HOOK_SOCKETS_SETSOCKOPT(s, sock, level, optname, optval, optlen, err) +#endif + +/** + * LWIP_HOOK_SOCKETS_GETSOCKOPT(s, sock, level, optname, optval, optlen, err) + * Called from socket API to implement getsockopt() for options not provided by lwIP. + * Core lock is held when this hook is called. + * Signature:\code{.c} + * int my_hook(int s, struct lwip_sock *sock, int level, int optname, void *optval, socklen_t *optlen, int *err) + * \endcode + * Arguments: + * - s: socket file descriptor + * - sock: internal socket descriptor (see lwip/priv/sockets_priv.h) + * - level: protocol level at which the option resides + * - optname: option to get + * - optval: value to get + * - optlen: size of optval + * - err: output error + * Return values: + * - 0: Hook has not consumed the option, code continues as normal (to internal options) + * - != 0: Hook has consumed the option, 'err' is returned + */ +#ifdef __DOXYGEN__ +#define LWIP_HOOK_SOCKETS_GETSOCKOPT(s, sock, level, optname, optval, optlen, err) +#endif + +/** + * LWIP_HOOK_NETCONN_EXTERNAL_RESOLVE(name, addr, addrtype, err) + * Called from netconn APIs (not usable with callback apps) allowing an + * external DNS resolver (which uses sequential API) to handle the query. + * Signature:\code{.c} + * int my_hook(const char *name, ip_addr_t *addr, u8_t addrtype, err_t *err) + * \endcode + * Arguments: + * - name: hostname to resolve + * - addr: output host address + * - addrtype: type of address to query + * - err: output error + * Return values: + * - 0: Hook has not consumed hostname query, query continues into DNS module + * - != 0: Hook has consumed the query + * + * err must also be checked to determine if the hook consumed the query, but + * the query failed + */ +#ifdef __DOXYGEN__ +#define LWIP_HOOK_NETCONN_EXTERNAL_RESOLVE(name, addr, addrtype, err) +#endif +/** + * @} + */ + +/* + --------------------------------------- + ---------- Debugging options ---------- + --------------------------------------- +*/ +/** + * @defgroup lwip_opts_debugmsg Debug messages + * @ingroup lwip_opts_debug + * @{ + */ +/** + * LWIP_DBG_MIN_LEVEL: After masking, the value of the debug is + * compared against this value. If it is smaller, then debugging + * messages are written. + * @see debugging_levels + */ +#if !defined LWIP_DBG_MIN_LEVEL || defined __DOXYGEN__ +#define LWIP_DBG_MIN_LEVEL LWIP_DBG_LEVEL_ALL +#endif + +/** + * LWIP_DBG_TYPES_ON: A mask that can be used to globally enable/disable + * debug messages of certain types. + * @see debugging_levels + */ +#if !defined LWIP_DBG_TYPES_ON || defined __DOXYGEN__ +#define LWIP_DBG_TYPES_ON LWIP_DBG_ON +#endif + +/** + * ETHARP_DEBUG: Enable debugging in etharp.c. + */ +#if !defined ETHARP_DEBUG || defined __DOXYGEN__ +#define ETHARP_DEBUG LWIP_DBG_OFF +#endif + +/** + * NETIF_DEBUG: Enable debugging in netif.c. + */ +#if !defined NETIF_DEBUG || defined __DOXYGEN__ +#define NETIF_DEBUG LWIP_DBG_OFF +#endif + +/** + * PBUF_DEBUG: Enable debugging in pbuf.c. + */ +#if !defined PBUF_DEBUG || defined __DOXYGEN__ +#define PBUF_DEBUG LWIP_DBG_OFF +#endif + +/** + * API_LIB_DEBUG: Enable debugging in api_lib.c. + */ +#if !defined API_LIB_DEBUG || defined __DOXYGEN__ +#define API_LIB_DEBUG LWIP_DBG_OFF +#endif + +/** + * API_MSG_DEBUG: Enable debugging in api_msg.c. + */ +#if !defined API_MSG_DEBUG || defined __DOXYGEN__ +#define API_MSG_DEBUG LWIP_DBG_OFF +#endif + +/** + * SOCKETS_DEBUG: Enable debugging in sockets.c. + */ +#if !defined SOCKETS_DEBUG || defined __DOXYGEN__ +#define SOCKETS_DEBUG LWIP_DBG_OFF +#endif + +/** + * ICMP_DEBUG: Enable debugging in icmp.c. + */ +#if !defined ICMP_DEBUG || defined __DOXYGEN__ +#define ICMP_DEBUG LWIP_DBG_OFF +#endif + +/** + * IGMP_DEBUG: Enable debugging in igmp.c. + */ +#if !defined IGMP_DEBUG || defined __DOXYGEN__ +#define IGMP_DEBUG LWIP_DBG_OFF +#endif + +/** + * INET_DEBUG: Enable debugging in inet.c. + */ +#if !defined INET_DEBUG || defined __DOXYGEN__ +#define INET_DEBUG LWIP_DBG_OFF +#endif + +/** + * IP_DEBUG: Enable debugging for IP. + */ +#if !defined IP_DEBUG || defined __DOXYGEN__ +#define IP_DEBUG LWIP_DBG_OFF +#endif + +/** + * IP_REASS_DEBUG: Enable debugging in ip_frag.c for both frag & reass. + */ +#if !defined IP_REASS_DEBUG || defined __DOXYGEN__ +#define IP_REASS_DEBUG LWIP_DBG_OFF +#endif + +/** + * RAW_DEBUG: Enable debugging in raw.c. + */ +#if !defined RAW_DEBUG || defined __DOXYGEN__ +#define RAW_DEBUG LWIP_DBG_OFF +#endif + +/** + * MEM_DEBUG: Enable debugging in mem.c. + */ +#if !defined MEM_DEBUG || defined __DOXYGEN__ +#define MEM_DEBUG LWIP_DBG_OFF +#endif + +/** + * MEMP_DEBUG: Enable debugging in memp.c. + */ +#if !defined MEMP_DEBUG || defined __DOXYGEN__ +#define MEMP_DEBUG LWIP_DBG_OFF +#endif + +/** + * SYS_DEBUG: Enable debugging in sys.c. + */ +#if !defined SYS_DEBUG || defined __DOXYGEN__ +#define SYS_DEBUG LWIP_DBG_OFF +#endif + +/** + * TIMERS_DEBUG: Enable debugging in timers.c. + */ +#if !defined TIMERS_DEBUG || defined __DOXYGEN__ +#define TIMERS_DEBUG LWIP_DBG_OFF +#endif + +/** + * TCP_DEBUG: Enable debugging for TCP. + */ +#if !defined TCP_DEBUG || defined __DOXYGEN__ +#define TCP_DEBUG LWIP_DBG_OFF +#endif + +/** + * TCP_INPUT_DEBUG: Enable debugging in tcp_in.c for incoming debug. + */ +#if !defined TCP_INPUT_DEBUG || defined __DOXYGEN__ +#define TCP_INPUT_DEBUG LWIP_DBG_OFF +#endif + +/** + * TCP_FR_DEBUG: Enable debugging in tcp_in.c for fast retransmit. + */ +#if !defined TCP_FR_DEBUG || defined __DOXYGEN__ +#define TCP_FR_DEBUG LWIP_DBG_OFF +#endif + +/** + * TCP_RTO_DEBUG: Enable debugging in TCP for retransmit + * timeout. + */ +#if !defined TCP_RTO_DEBUG || defined __DOXYGEN__ +#define TCP_RTO_DEBUG LWIP_DBG_OFF +#endif + +/** + * TCP_CWND_DEBUG: Enable debugging for TCP congestion window. + */ +#if !defined TCP_CWND_DEBUG || defined __DOXYGEN__ +#define TCP_CWND_DEBUG LWIP_DBG_OFF +#endif + +/** + * TCP_WND_DEBUG: Enable debugging in tcp_in.c for window updating. + */ +#if !defined TCP_WND_DEBUG || defined __DOXYGEN__ +#define TCP_WND_DEBUG LWIP_DBG_OFF +#endif + +/** + * TCP_OUTPUT_DEBUG: Enable debugging in tcp_out.c output functions. + */ +#if !defined TCP_OUTPUT_DEBUG || defined __DOXYGEN__ +#define TCP_OUTPUT_DEBUG LWIP_DBG_OFF +#endif + +/** + * TCP_RST_DEBUG: Enable debugging for TCP with the RST message. + */ +#if !defined TCP_RST_DEBUG || defined __DOXYGEN__ +#define TCP_RST_DEBUG LWIP_DBG_OFF +#endif + +/** + * TCP_QLEN_DEBUG: Enable debugging for TCP queue lengths. + */ +#if !defined TCP_QLEN_DEBUG || defined __DOXYGEN__ +#define TCP_QLEN_DEBUG LWIP_DBG_OFF +#endif + +/** + * UDP_DEBUG: Enable debugging in UDP. + */ +#if !defined UDP_DEBUG || defined __DOXYGEN__ +#define UDP_DEBUG LWIP_DBG_OFF +#endif + +/** + * TCPIP_DEBUG: Enable debugging in tcpip.c. + */ +#if !defined TCPIP_DEBUG || defined __DOXYGEN__ +#define TCPIP_DEBUG LWIP_DBG_OFF +#endif + +/** + * SLIP_DEBUG: Enable debugging in slipif.c. + */ +#if !defined SLIP_DEBUG || defined __DOXYGEN__ +#define SLIP_DEBUG LWIP_DBG_OFF +#endif + +/** + * DHCP_DEBUG: Enable debugging in dhcp.c. + */ +#if !defined DHCP_DEBUG || defined __DOXYGEN__ +#define DHCP_DEBUG LWIP_DBG_OFF +#endif + +/** + * AUTOIP_DEBUG: Enable debugging in autoip.c. + */ +#if !defined AUTOIP_DEBUG || defined __DOXYGEN__ +#define AUTOIP_DEBUG LWIP_DBG_OFF +#endif + +/** + * DNS_DEBUG: Enable debugging for DNS. + */ +#if !defined DNS_DEBUG || defined __DOXYGEN__ +#define DNS_DEBUG LWIP_DBG_OFF +#endif + +/** + * IP6_DEBUG: Enable debugging for IPv6. + */ +#if !defined IP6_DEBUG || defined __DOXYGEN__ +#define IP6_DEBUG LWIP_DBG_OFF +#endif + +/** + * DHCP6_DEBUG: Enable debugging in dhcp6.c. + */ +#if !defined DHCP6_DEBUG || defined __DOXYGEN__ +#define DHCP6_DEBUG LWIP_DBG_OFF +#endif +/** + * @} + */ + +/** + * LWIP_TESTMODE: Changes to make unit test possible + */ +#if !defined LWIP_TESTMODE +#define LWIP_TESTMODE 0 +#endif + +/* + -------------------------------------------------- + ---------- Performance tracking options ---------- + -------------------------------------------------- +*/ +/** + * @defgroup lwip_opts_perf Performance + * @ingroup lwip_opts_debug + * @{ + */ +/** + * LWIP_PERF: Enable performance testing for lwIP + * (if enabled, arch/perf.h is included) + */ +#if !defined LWIP_PERF || defined __DOXYGEN__ +#define LWIP_PERF 0 +#endif +/** + * @} + */ + +#endif /* LWIP_HDR_OPT_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/pbuf.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/pbuf.h new file mode 100644 index 0000000000000000000000000000000000000000..82902a4e9812c42f9f92feb11986f2b36c20bd5a --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/pbuf.h @@ -0,0 +1,322 @@ +/** + * @file + * pbuf API + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#ifndef LWIP_HDR_PBUF_H +#define LWIP_HDR_PBUF_H + +#include "lwip/opt.h" +#include "lwip/err.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** LWIP_SUPPORT_CUSTOM_PBUF==1: Custom pbufs behave much like their pbuf type + * but they are allocated by external code (initialised by calling + * pbuf_alloced_custom()) and when pbuf_free gives up their last reference, they + * are freed by calling pbuf_custom->custom_free_function(). + * Currently, the pbuf_custom code is only needed for one specific configuration + * of IP_FRAG, unless required by external driver/application code. */ +#ifndef LWIP_SUPPORT_CUSTOM_PBUF +#define LWIP_SUPPORT_CUSTOM_PBUF ((IP_FRAG && !LWIP_NETIF_TX_SINGLE_PBUF) || (LWIP_IPV6 && LWIP_IPV6_FRAG)) +#endif + +/** @ingroup pbuf + * PBUF_NEEDS_COPY(p): return a boolean value indicating whether the given + * pbuf needs to be copied in order to be kept around beyond the current call + * stack without risking being corrupted. The default setting provides safety: + * it will make a copy iof any pbuf chain that does not consist entirely of + * PBUF_ROM type pbufs. For setups with zero-copy support, it may be redefined + * to evaluate to true in all cases, for example. However, doing so also has an + * effect on the application side: any buffers that are *not* copied must also + * *not* be reused by the application after passing them to lwIP. For example, + * when setting PBUF_NEEDS_COPY to (0), after using udp_send() with a PBUF_RAM + * pbuf, the application must free the pbuf immediately, rather than reusing it + * for other purposes. For more background information on this, see tasks #6735 + * and #7896, and bugs #11400 and #49914. */ +#ifndef PBUF_NEEDS_COPY +#define PBUF_NEEDS_COPY(p) ((p)->type_internal & PBUF_TYPE_FLAG_DATA_VOLATILE) +#endif /* PBUF_NEEDS_COPY */ + +/* @todo: We need a mechanism to prevent wasting memory in every pbuf + (TCP vs. UDP, IPv4 vs. IPv6: UDP/IPv4 packets may waste up to 28 bytes) */ + +#define PBUF_TRANSPORT_HLEN 20 +#if LWIP_IPV6 +#define PBUF_IP_HLEN 40 +#else +#define PBUF_IP_HLEN 20 +#endif + +/** + * @ingroup pbuf + * Enumeration of pbuf layers + */ +typedef enum { + /** Includes spare room for transport layer header, e.g. UDP header. + * Use this if you intend to pass the pbuf to functions like udp_send(). + */ + PBUF_TRANSPORT = PBUF_LINK_ENCAPSULATION_HLEN + PBUF_LINK_HLEN + PBUF_IP_HLEN + PBUF_TRANSPORT_HLEN, + /** Includes spare room for IP header. + * Use this if you intend to pass the pbuf to functions like raw_send(). + */ + PBUF_IP = PBUF_LINK_ENCAPSULATION_HLEN + PBUF_LINK_HLEN + PBUF_IP_HLEN, + /** Includes spare room for link layer header (ethernet header). + * Use this if you intend to pass the pbuf to functions like ethernet_output(). + * @see PBUF_LINK_HLEN + */ + PBUF_LINK = PBUF_LINK_ENCAPSULATION_HLEN + PBUF_LINK_HLEN, + /** Includes spare room for additional encapsulation header before ethernet + * headers (e.g. 802.11). + * Use this if you intend to pass the pbuf to functions like netif->linkoutput(). + * @see PBUF_LINK_ENCAPSULATION_HLEN + */ + PBUF_RAW_TX = PBUF_LINK_ENCAPSULATION_HLEN, + /** Use this for input packets in a netif driver when calling netif->input() + * in the most common case - ethernet-layer netif driver. */ + PBUF_RAW = 0 +} pbuf_layer; + + +/* Base flags for pbuf_type definitions: */ + +/** Indicates that the payload directly follows the struct pbuf. + * This makes @ref pbuf_header work in both directions. */ +#define PBUF_TYPE_FLAG_STRUCT_DATA_CONTIGUOUS 0x80 +/** Indicates the data stored in this pbuf can change. If this pbuf needs + * to be queued, it must be copied/duplicated. */ +#define PBUF_TYPE_FLAG_DATA_VOLATILE 0x40 +/** 4 bits are reserved for 16 allocation sources (e.g. heap, pool1, pool2, etc) + * Internally, we use: 0=heap, 1=MEMP_PBUF, 2=MEMP_PBUF_POOL -> 13 types free*/ +#define PBUF_TYPE_ALLOC_SRC_MASK 0x0F +/** Indicates this pbuf is used for RX (if not set, indicates use for TX). + * This information can be used to keep some spare RX buffers e.g. for + * receiving TCP ACKs to unblock a connection) */ +#define PBUF_ALLOC_FLAG_RX 0x0100 +/** Indicates the application needs the pbuf payload to be in one piece */ +#define PBUF_ALLOC_FLAG_DATA_CONTIGUOUS 0x0200 + +#define PBUF_TYPE_ALLOC_SRC_MASK_STD_HEAP 0x00 +#define PBUF_TYPE_ALLOC_SRC_MASK_STD_MEMP_PBUF 0x01 +#define PBUF_TYPE_ALLOC_SRC_MASK_STD_MEMP_PBUF_POOL 0x02 +/** First pbuf allocation type for applications */ +#define PBUF_TYPE_ALLOC_SRC_MASK_APP_MIN 0x03 +/** Last pbuf allocation type for applications */ +#define PBUF_TYPE_ALLOC_SRC_MASK_APP_MAX PBUF_TYPE_ALLOC_SRC_MASK + +/** + * @ingroup pbuf + * Enumeration of pbuf types + */ +typedef enum { + /** pbuf data is stored in RAM, used for TX mostly, struct pbuf and its payload + are allocated in one piece of contiguous memory (so the first payload byte + can be calculated from struct pbuf). + pbuf_alloc() allocates PBUF_RAM pbufs as unchained pbufs (although that might + change in future versions). + This should be used for all OUTGOING packets (TX).*/ + PBUF_RAM = (PBUF_ALLOC_FLAG_DATA_CONTIGUOUS | PBUF_TYPE_FLAG_STRUCT_DATA_CONTIGUOUS | PBUF_TYPE_ALLOC_SRC_MASK_STD_HEAP), + /** pbuf data is stored in ROM, i.e. struct pbuf and its payload are located in + totally different memory areas. Since it points to ROM, payload does not + have to be copied when queued for transmission. */ + PBUF_ROM = PBUF_TYPE_ALLOC_SRC_MASK_STD_MEMP_PBUF, + /** pbuf comes from the pbuf pool. Much like PBUF_ROM but payload might change + so it has to be duplicated when queued before transmitting, depending on + who has a 'ref' to it. */ + PBUF_REF = (PBUF_TYPE_FLAG_DATA_VOLATILE | PBUF_TYPE_ALLOC_SRC_MASK_STD_MEMP_PBUF), + /** pbuf payload refers to RAM. This one comes from a pool and should be used + for RX. Payload can be chained (scatter-gather RX) but like PBUF_RAM, struct + pbuf and its payload are allocated in one piece of contiguous memory (so + the first payload byte can be calculated from struct pbuf). + Don't use this for TX, if the pool becomes empty e.g. because of TCP queuing, + you are unable to receive TCP acks! */ + PBUF_POOL = (PBUF_ALLOC_FLAG_RX | PBUF_TYPE_FLAG_STRUCT_DATA_CONTIGUOUS | PBUF_TYPE_ALLOC_SRC_MASK_STD_MEMP_PBUF_POOL) +} pbuf_type; + + +/** indicates this packet's data should be immediately passed to the application */ +#define PBUF_FLAG_PUSH 0x01U +/** indicates this is a custom pbuf: pbuf_free calls pbuf_custom->custom_free_function() + when the last reference is released (plus custom PBUF_RAM cannot be trimmed) */ +#define PBUF_FLAG_IS_CUSTOM 0x02U +/** indicates this pbuf is UDP multicast to be looped back */ +#define PBUF_FLAG_MCASTLOOP 0x04U +/** indicates this pbuf was received as link-level broadcast */ +#define PBUF_FLAG_LLBCAST 0x08U +/** indicates this pbuf was received as link-level multicast */ +#define PBUF_FLAG_LLMCAST 0x10U +/** indicates this pbuf includes a TCP FIN flag */ +#define PBUF_FLAG_TCP_FIN 0x20U + +/** Main packet buffer struct */ +struct pbuf { + /** next pbuf in singly linked pbuf chain */ + struct pbuf *next; + + /** pointer to the actual data in the buffer */ + void *payload; + + /** + * total length of this buffer and all next buffers in chain + * belonging to the same packet. + * + * For non-queue packet chains this is the invariant: + * p->tot_len == p->len + (p->next? p->next->tot_len: 0) + */ + u16_t tot_len; + + /** length of this buffer */ + u16_t len; + + /** a bit field indicating pbuf type and allocation sources + (see PBUF_TYPE_FLAG_*, PBUF_ALLOC_FLAG_* and PBUF_TYPE_ALLOC_SRC_MASK) + */ + u8_t type_internal; + + /** misc flags */ + u8_t flags; + + /** + * the reference count always equals the number of pointers + * that refer to this pbuf. This can be pointers from an application, + * the stack itself, or pbuf->next pointers from a chain. + */ + LWIP_PBUF_REF_T ref; + + /** For incoming packets, this contains the input netif's index */ + u8_t if_idx; +}; + + +/** Helper struct for const-correctness only. + * The only meaning of this one is to provide a const payload pointer + * for PBUF_ROM type. + */ +struct pbuf_rom { + /** next pbuf in singly linked pbuf chain */ + struct pbuf *next; + + /** pointer to the actual data in the buffer */ + const void *payload; +}; + +#if LWIP_SUPPORT_CUSTOM_PBUF +/** Prototype for a function to free a custom pbuf */ +typedef void (*pbuf_free_custom_fn)(struct pbuf *p); + +/** A custom pbuf: like a pbuf, but following a function pointer to free it. */ +struct pbuf_custom { + /** The actual pbuf */ + struct pbuf pbuf; + /** This function is called when pbuf_free deallocates this pbuf(_custom) */ + pbuf_free_custom_fn custom_free_function; +}; +#endif /* LWIP_SUPPORT_CUSTOM_PBUF */ + +/** Define this to 0 to prevent freeing ooseq pbufs when the PBUF_POOL is empty */ +#ifndef PBUF_POOL_FREE_OOSEQ +#define PBUF_POOL_FREE_OOSEQ 1 +#endif /* PBUF_POOL_FREE_OOSEQ */ +#if LWIP_TCP && TCP_QUEUE_OOSEQ && NO_SYS && PBUF_POOL_FREE_OOSEQ +extern volatile u8_t pbuf_free_ooseq_pending; +void pbuf_free_ooseq(void); +/** When not using sys_check_timeouts(), call PBUF_CHECK_FREE_OOSEQ() + at regular intervals from main level to check if ooseq pbufs need to be + freed! */ +#define PBUF_CHECK_FREE_OOSEQ() do { if(pbuf_free_ooseq_pending) { \ + /* pbuf_alloc() reported PBUF_POOL to be empty -> try to free some \ + ooseq queued pbufs now */ \ + pbuf_free_ooseq(); }}while(0) +#else /* LWIP_TCP && TCP_QUEUE_OOSEQ && NO_SYS && PBUF_POOL_FREE_OOSEQ */ + /* Otherwise declare an empty PBUF_CHECK_FREE_OOSEQ */ + #define PBUF_CHECK_FREE_OOSEQ() +#endif /* LWIP_TCP && TCP_QUEUE_OOSEQ && NO_SYS && PBUF_POOL_FREE_OOSEQ*/ + +/* Initializes the pbuf module. This call is empty for now, but may not be in future. */ +#define pbuf_init() + +struct pbuf *pbuf_alloc(pbuf_layer l, u16_t length, pbuf_type type); +struct pbuf *pbuf_alloc_reference(void *payload, u16_t length, pbuf_type type); +#if LWIP_SUPPORT_CUSTOM_PBUF +struct pbuf *pbuf_alloced_custom(pbuf_layer l, u16_t length, pbuf_type type, + struct pbuf_custom *p, void *payload_mem, + u16_t payload_mem_len); +#endif /* LWIP_SUPPORT_CUSTOM_PBUF */ +void pbuf_realloc(struct pbuf *p, u16_t size); +#define pbuf_get_allocsrc(p) ((p)->type_internal & PBUF_TYPE_ALLOC_SRC_MASK) +#define pbuf_match_allocsrc(p, type) (pbuf_get_allocsrc(p) == ((type) & PBUF_TYPE_ALLOC_SRC_MASK)) +#define pbuf_match_type(p, type) pbuf_match_allocsrc(p, type) +u8_t pbuf_header(struct pbuf *p, s16_t header_size); +u8_t pbuf_header_force(struct pbuf *p, s16_t header_size); +u8_t pbuf_add_header(struct pbuf *p, size_t header_size_increment); +u8_t pbuf_add_header_force(struct pbuf *p, size_t header_size_increment); +u8_t pbuf_remove_header(struct pbuf *p, size_t header_size); +struct pbuf *pbuf_free_header(struct pbuf *q, u16_t size); +void pbuf_ref(struct pbuf *p); +u8_t pbuf_free(struct pbuf *p); +u16_t pbuf_clen(const struct pbuf *p); +void pbuf_cat(struct pbuf *head, struct pbuf *tail); +void pbuf_chain(struct pbuf *head, struct pbuf *tail); +struct pbuf *pbuf_dechain(struct pbuf *p); +err_t pbuf_copy(struct pbuf *p_to, const struct pbuf *p_from); +u16_t pbuf_copy_partial(const struct pbuf *p, void *dataptr, u16_t len, u16_t offset); +void *pbuf_get_contiguous(const struct pbuf *p, void *buffer, size_t bufsize, u16_t len, u16_t offset); +err_t pbuf_take(struct pbuf *buf, const void *dataptr, u16_t len); +err_t pbuf_take_at(struct pbuf *buf, const void *dataptr, u16_t len, u16_t offset); +struct pbuf *pbuf_skip(struct pbuf* in, u16_t in_offset, u16_t* out_offset); +struct pbuf *pbuf_coalesce(struct pbuf *p, pbuf_layer layer); +struct pbuf *pbuf_clone(pbuf_layer l, pbuf_type type, struct pbuf *p); +#if LWIP_CHECKSUM_ON_COPY +err_t pbuf_fill_chksum(struct pbuf *p, u16_t start_offset, const void *dataptr, + u16_t len, u16_t *chksum); +#endif /* LWIP_CHECKSUM_ON_COPY */ +#if LWIP_TCP && TCP_QUEUE_OOSEQ && LWIP_WND_SCALE +void pbuf_split_64k(struct pbuf *p, struct pbuf **rest); +#endif /* LWIP_TCP && TCP_QUEUE_OOSEQ && LWIP_WND_SCALE */ + +u8_t pbuf_get_at(const struct pbuf* p, u16_t offset); +int pbuf_try_get_at(const struct pbuf* p, u16_t offset); +void pbuf_put_at(struct pbuf* p, u16_t offset, u8_t data); +u16_t pbuf_memcmp(const struct pbuf* p, u16_t offset, const void* s2, u16_t n); +u16_t pbuf_memfind(const struct pbuf* p, const void* mem, u16_t mem_len, u16_t start_offset); +u16_t pbuf_strstr(const struct pbuf* p, const char* substr); + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_PBUF_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/priv/altcp_priv.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/priv/altcp_priv.h new file mode 100644 index 0000000000000000000000000000000000000000..2d3b2fdbceac03a8b224e1e5793fa1772eb3c471 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/priv/altcp_priv.h @@ -0,0 +1,146 @@ +/** + * @file + * Application layered TCP connection API (to be used from TCPIP thread)\n + * This interface mimics the tcp callback API to the application while preventing + * direct linking (much like virtual functions). + * This way, an application can make use of other application layer protocols + * on top of TCP without knowing the details (e.g. TLS, proxy connection). + */ + +/* + * Copyright (c) 2017 Simon Goldschmidt + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Simon Goldschmidt + * + */ +#ifndef LWIP_HDR_ALTCP_PRIV_H +#define LWIP_HDR_ALTCP_PRIV_H + +#include "lwip/opt.h" + +#if LWIP_ALTCP /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/altcp.h" +#include "lwip/ip_addr.h" + +#ifdef __cplusplus +extern "C" { +#endif + +struct altcp_pcb *altcp_alloc(void); +void altcp_free(struct altcp_pcb *conn); + +/* Function prototypes for application layers */ +typedef void (*altcp_set_poll_fn)(struct altcp_pcb *conn, u8_t interval); +typedef void (*altcp_recved_fn)(struct altcp_pcb *conn, u16_t len); +typedef err_t (*altcp_bind_fn)(struct altcp_pcb *conn, const ip_addr_t *ipaddr, u16_t port); +typedef err_t (*altcp_connect_fn)(struct altcp_pcb *conn, const ip_addr_t *ipaddr, u16_t port, altcp_connected_fn connected); + +typedef struct altcp_pcb *(*altcp_listen_fn)(struct altcp_pcb *conn, u8_t backlog, err_t *err); + +typedef void (*altcp_abort_fn)(struct altcp_pcb *conn); +typedef err_t (*altcp_close_fn)(struct altcp_pcb *conn); +typedef err_t (*altcp_shutdown_fn)(struct altcp_pcb *conn, int shut_rx, int shut_tx); + +typedef err_t (*altcp_write_fn)(struct altcp_pcb *conn, const void *dataptr, u16_t len, u8_t apiflags); +typedef err_t (*altcp_output_fn)(struct altcp_pcb *conn); + +typedef u16_t (*altcp_mss_fn)(struct altcp_pcb *conn); +typedef u16_t (*altcp_sndbuf_fn)(struct altcp_pcb *conn); +typedef u16_t (*altcp_sndqueuelen_fn)(struct altcp_pcb *conn); +typedef void (*altcp_nagle_disable_fn)(struct altcp_pcb *conn); +typedef void (*altcp_nagle_enable_fn)(struct altcp_pcb *conn); +typedef int (*altcp_nagle_disabled_fn)(struct altcp_pcb *conn); + +typedef void (*altcp_setprio_fn)(struct altcp_pcb *conn, u8_t prio); + +typedef void (*altcp_dealloc_fn)(struct altcp_pcb *conn); + +typedef err_t (*altcp_get_tcp_addrinfo_fn)(struct altcp_pcb *conn, int local, ip_addr_t *addr, u16_t *port); +typedef ip_addr_t *(*altcp_get_ip_fn)(struct altcp_pcb *conn, int local); +typedef u16_t (*altcp_get_port_fn)(struct altcp_pcb *conn, int local); + +#ifdef LWIP_DEBUG +typedef enum tcp_state (*altcp_dbg_get_tcp_state_fn)(struct altcp_pcb *conn); +#endif + +struct altcp_functions { + altcp_set_poll_fn set_poll; + altcp_recved_fn recved; + altcp_bind_fn bind; + altcp_connect_fn connect; + altcp_listen_fn listen; + altcp_abort_fn abort; + altcp_close_fn close; + altcp_shutdown_fn shutdown; + altcp_write_fn write; + altcp_output_fn output; + altcp_mss_fn mss; + altcp_sndbuf_fn sndbuf; + altcp_sndqueuelen_fn sndqueuelen; + altcp_nagle_disable_fn nagle_disable; + altcp_nagle_enable_fn nagle_enable; + altcp_nagle_disabled_fn nagle_disabled; + altcp_setprio_fn setprio; + altcp_dealloc_fn dealloc; + altcp_get_tcp_addrinfo_fn addrinfo; + altcp_get_ip_fn getip; + altcp_get_port_fn getport; +#ifdef LWIP_DEBUG + altcp_dbg_get_tcp_state_fn dbg_get_tcp_state; +#endif +}; + +void altcp_default_set_poll(struct altcp_pcb *conn, u8_t interval); +void altcp_default_recved(struct altcp_pcb *conn, u16_t len); +err_t altcp_default_bind(struct altcp_pcb *conn, const ip_addr_t *ipaddr, u16_t port); +err_t altcp_default_shutdown(struct altcp_pcb *conn, int shut_rx, int shut_tx); +err_t altcp_default_write(struct altcp_pcb *conn, const void *dataptr, u16_t len, u8_t apiflags); +err_t altcp_default_output(struct altcp_pcb *conn); +u16_t altcp_default_mss(struct altcp_pcb *conn); +u16_t altcp_default_sndbuf(struct altcp_pcb *conn); +u16_t altcp_default_sndqueuelen(struct altcp_pcb *conn); +void altcp_default_nagle_disable(struct altcp_pcb *conn); +void altcp_default_nagle_enable(struct altcp_pcb *conn); +int altcp_default_nagle_disabled(struct altcp_pcb *conn); +void altcp_default_setprio(struct altcp_pcb *conn, u8_t prio); +void altcp_default_dealloc(struct altcp_pcb *conn); +err_t altcp_default_get_tcp_addrinfo(struct altcp_pcb *conn, int local, ip_addr_t *addr, u16_t *port); +ip_addr_t *altcp_default_get_ip(struct altcp_pcb *conn, int local); +u16_t altcp_default_get_port(struct altcp_pcb *conn, int local); +#ifdef LWIP_DEBUG +enum tcp_state altcp_default_dbg_get_tcp_state(struct altcp_pcb *conn); +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_ALTCP */ + +#endif /* LWIP_HDR_ALTCP_PRIV_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/priv/api_msg.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/priv/api_msg.h new file mode 100644 index 0000000000000000000000000000000000000000..9e8ffc9ea640a787d47d0c5cae3d854bae27d116 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/priv/api_msg.h @@ -0,0 +1,272 @@ +/** + * @file + * netconn API lwIP internal implementations (do not use in application code) + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef LWIP_HDR_API_MSG_H +#define LWIP_HDR_API_MSG_H + +#include "lwip/opt.h" + +#include "lwip/arch.h" +#include "lwip/ip_addr.h" +#include "lwip/err.h" +#include "lwip/sys.h" +#include "lwip/igmp.h" +#include "lwip/api.h" +#include "lwip/priv/tcpip_priv.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#if LWIP_NETCONN || LWIP_SOCKET /* don't build if not configured for use in lwipopts.h */ +/* Note: Netconn API is always available when sockets are enabled - + * sockets are implemented on top of them */ + +#if LWIP_MPU_COMPATIBLE +#if LWIP_NETCONN_SEM_PER_THREAD +#define API_MSG_M_DEF_SEM(m) *m +#else +#define API_MSG_M_DEF_SEM(m) API_MSG_M_DEF(m) +#endif +#else /* LWIP_MPU_COMPATIBLE */ +#define API_MSG_M_DEF_SEM(m) API_MSG_M_DEF(m) +#endif /* LWIP_MPU_COMPATIBLE */ + +/* For the netconn API, these values are use as a bitmask! */ +#define NETCONN_SHUT_RD 1 +#define NETCONN_SHUT_WR 2 +#define NETCONN_SHUT_RDWR (NETCONN_SHUT_RD | NETCONN_SHUT_WR) + +/* IP addresses and port numbers are expected to be in + * the same byte order as in the corresponding pcb. + */ +/** This struct includes everything that is necessary to execute a function + for a netconn in another thread context (mainly used to process netconns + in the tcpip_thread context to be thread safe). */ +struct api_msg { + /** The netconn which to process - always needed: it includes the semaphore + which is used to block the application thread until the function finished. */ + struct netconn *conn; + /** The return value of the function executed in tcpip_thread. */ + err_t err; + /** Depending on the executed function, one of these union members is used */ + union { + /** used for lwip_netconn_do_send */ + struct netbuf *b; + /** used for lwip_netconn_do_newconn */ + struct { + u8_t proto; + } n; + /** used for lwip_netconn_do_bind and lwip_netconn_do_connect */ + struct { + API_MSG_M_DEF_C(ip_addr_t, ipaddr); + u16_t port; + u8_t if_idx; + } bc; + /** used for lwip_netconn_do_getaddr */ + struct { + ip_addr_t API_MSG_M_DEF(ipaddr); + u16_t API_MSG_M_DEF(port); + u8_t local; + } ad; + /** used for lwip_netconn_do_write */ + struct { + /** current vector to write */ + const struct netvector *vector; + /** number of unwritten vectors */ + u16_t vector_cnt; + /** offset into current vector */ + size_t vector_off; + /** total length across vectors */ + size_t len; + /** offset into total length/output of bytes written when err == ERR_OK */ + size_t offset; + u8_t apiflags; +#if LWIP_SO_SNDTIMEO + u32_t time_started; +#endif /* LWIP_SO_SNDTIMEO */ + } w; + /** used for lwip_netconn_do_recv */ + struct { + size_t len; + } r; +#if LWIP_TCP + /** used for lwip_netconn_do_close (/shutdown) */ + struct { + u8_t shut; +#if LWIP_SO_SNDTIMEO || LWIP_SO_LINGER + u32_t time_started; +#else /* LWIP_SO_SNDTIMEO || LWIP_SO_LINGER */ + u8_t polls_left; +#endif /* LWIP_SO_SNDTIMEO || LWIP_SO_LINGER */ + } sd; +#endif /* LWIP_TCP */ +#if LWIP_IGMP || (LWIP_IPV6 && LWIP_IPV6_MLD) + /** used for lwip_netconn_do_join_leave_group */ + struct { + API_MSG_M_DEF_C(ip_addr_t, multiaddr); + API_MSG_M_DEF_C(ip_addr_t, netif_addr); + u8_t if_idx; + enum netconn_igmp join_or_leave; + } jl; +#endif /* LWIP_IGMP || (LWIP_IPV6 && LWIP_IPV6_MLD) */ +#if TCP_LISTEN_BACKLOG + struct { + u8_t backlog; + } lb; +#endif /* TCP_LISTEN_BACKLOG */ + } msg; +#if LWIP_NETCONN_SEM_PER_THREAD + sys_sem_t* op_completed_sem; +#endif /* LWIP_NETCONN_SEM_PER_THREAD */ +}; + +#if LWIP_NETCONN_SEM_PER_THREAD +#define LWIP_API_MSG_SEM(msg) ((msg)->op_completed_sem) +#else /* LWIP_NETCONN_SEM_PER_THREAD */ +#define LWIP_API_MSG_SEM(msg) (&(msg)->conn->op_completed) +#endif /* LWIP_NETCONN_SEM_PER_THREAD */ + + +#if LWIP_DNS +/** As lwip_netconn_do_gethostbyname requires more arguments but doesn't require a netconn, + it has its own struct (to avoid struct api_msg getting bigger than necessary). + lwip_netconn_do_gethostbyname must be called using tcpip_callback instead of tcpip_apimsg + (see netconn_gethostbyname). */ +struct dns_api_msg { + /** Hostname to query or dotted IP address string */ +#if LWIP_MPU_COMPATIBLE + char name[DNS_MAX_NAME_LENGTH]; +#else /* LWIP_MPU_COMPATIBLE */ + const char *name; +#endif /* LWIP_MPU_COMPATIBLE */ + /** The resolved address is stored here */ + ip_addr_t API_MSG_M_DEF(addr); +#if LWIP_IPV4 && LWIP_IPV6 + /** Type of resolve call */ + u8_t dns_addrtype; +#endif /* LWIP_IPV4 && LWIP_IPV6 */ + /** This semaphore is posted when the name is resolved, the application thread + should wait on it. */ + sys_sem_t API_MSG_M_DEF_SEM(sem); + /** Errors are given back here */ + err_t API_MSG_M_DEF(err); +}; +#endif /* LWIP_DNS */ + +#if LWIP_NETCONN_FULLDUPLEX +int lwip_netconn_is_deallocated_msg(void *msg); +#endif +int lwip_netconn_is_err_msg(void *msg, err_t *err); +void lwip_netconn_do_newconn (void *m); +void lwip_netconn_do_delconn (void *m); +void lwip_netconn_do_bind (void *m); +void lwip_netconn_do_bind_if (void *m); +void lwip_netconn_do_connect (void *m); +void lwip_netconn_do_disconnect (void *m); +void lwip_netconn_do_listen (void *m); +void lwip_netconn_do_send (void *m); +void lwip_netconn_do_recv (void *m); +#if TCP_LISTEN_BACKLOG +void lwip_netconn_do_accepted (void *m); +#endif /* TCP_LISTEN_BACKLOG */ +void lwip_netconn_do_write (void *m); +void lwip_netconn_do_getaddr (void *m); +void lwip_netconn_do_close (void *m); +void lwip_netconn_do_shutdown (void *m); +#if LWIP_IGMP || (LWIP_IPV6 && LWIP_IPV6_MLD) +void lwip_netconn_do_join_leave_group(void *m); +void lwip_netconn_do_join_leave_group_netif(void *m); +#endif /* LWIP_IGMP || (LWIP_IPV6 && LWIP_IPV6_MLD) */ + +#if LWIP_DNS +void lwip_netconn_do_gethostbyname(void *arg); +#endif /* LWIP_DNS */ + +struct netconn* netconn_alloc(enum netconn_type t, netconn_callback callback); +void netconn_free(struct netconn *conn); + +#endif /* LWIP_NETCONN || LWIP_SOCKET */ + +#if LWIP_NETIF_API /* don't build if not configured for use in lwipopts.h */ + +/* netifapi related lwIP internal definitions */ + +#if LWIP_MPU_COMPATIBLE +#define NETIFAPI_IPADDR_DEF(type, m) type m +#else /* LWIP_MPU_COMPATIBLE */ +#define NETIFAPI_IPADDR_DEF(type, m) const type * m +#endif /* LWIP_MPU_COMPATIBLE */ + +typedef void (*netifapi_void_fn)(struct netif *netif); +typedef err_t (*netifapi_errt_fn)(struct netif *netif); + +struct netifapi_msg { + struct tcpip_api_call_data call; + struct netif *netif; + union { + struct { +#if LWIP_IPV4 + NETIFAPI_IPADDR_DEF(ip4_addr_t, ipaddr); + NETIFAPI_IPADDR_DEF(ip4_addr_t, netmask); + NETIFAPI_IPADDR_DEF(ip4_addr_t, gw); +#endif /* LWIP_IPV4 */ + void *state; + netif_init_fn init; + netif_input_fn input; + } add; + struct { + netifapi_void_fn voidfunc; + netifapi_errt_fn errtfunc; + } common; + struct { +#if LWIP_MPU_COMPATIBLE + char name[NETIF_NAMESIZE]; +#else /* LWIP_MPU_COMPATIBLE */ + char *name; +#endif /* LWIP_MPU_COMPATIBLE */ + u8_t index; + } ifs; + } msg; +}; + +#endif /* LWIP_NETIF_API */ + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_API_MSG_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/priv/mem_priv.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/priv/mem_priv.h new file mode 100644 index 0000000000000000000000000000000000000000..8630d75419036990158290615ca095f983d1d7a8 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/priv/mem_priv.h @@ -0,0 +1,84 @@ +/** + * @file + * lwIP internal memory implementations (do not use in application code) + */ + +/* + * Copyright (c) 2018 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Simon Goldschmidt + * + */ + +#ifndef LWIP_HDR_MEM_PRIV_H +#define LWIP_HDR_MEM_PRIV_H + +#include "lwip/opt.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#include "lwip/mem.h" + +#if MEM_OVERFLOW_CHECK || MEMP_OVERFLOW_CHECK +/* if MEM_OVERFLOW_CHECK or MEMP_OVERFLOW_CHECK is turned on, we reserve some + * bytes at the beginning and at the end of each element, initialize them as + * 0xcd and check them later. + * If MEM(P)_OVERFLOW_CHECK is >= 2, on every call to mem(p)_malloc or mem(p)_free, + * every single element in each pool/heap is checked! + * This is VERY SLOW but also very helpful. + * MEM_SANITY_REGION_BEFORE and MEM_SANITY_REGION_AFTER can be overridden in + * lwipopts.h to change the amount reserved for checking. */ +#ifndef MEM_SANITY_REGION_BEFORE +#define MEM_SANITY_REGION_BEFORE 16 +#endif /* MEM_SANITY_REGION_BEFORE*/ +#if MEM_SANITY_REGION_BEFORE > 0 +#define MEM_SANITY_REGION_BEFORE_ALIGNED LWIP_MEM_ALIGN_SIZE(MEM_SANITY_REGION_BEFORE) +#else +#define MEM_SANITY_REGION_BEFORE_ALIGNED 0 +#endif /* MEM_SANITY_REGION_BEFORE*/ +#ifndef MEM_SANITY_REGION_AFTER +#define MEM_SANITY_REGION_AFTER 16 +#endif /* MEM_SANITY_REGION_AFTER*/ +#if MEM_SANITY_REGION_AFTER > 0 +#define MEM_SANITY_REGION_AFTER_ALIGNED LWIP_MEM_ALIGN_SIZE(MEM_SANITY_REGION_AFTER) +#else +#define MEM_SANITY_REGION_AFTER_ALIGNED 0 +#endif /* MEM_SANITY_REGION_AFTER*/ + +void mem_overflow_init_raw(void *p, size_t size); +void mem_overflow_check_raw(void *p, size_t size, const char *descr1, const char *descr2); + +#endif /* MEM_OVERFLOW_CHECK || MEMP_OVERFLOW_CHECK */ + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_MEMP_PRIV_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/priv/memp_priv.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/priv/memp_priv.h new file mode 100644 index 0000000000000000000000000000000000000000..1f14cb162bec3fc5dced80897982499c04322b24 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/priv/memp_priv.h @@ -0,0 +1,161 @@ +/** + * @file + * memory pools lwIP internal implementations (do not use in application code) + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#ifndef LWIP_HDR_MEMP_PRIV_H +#define LWIP_HDR_MEMP_PRIV_H + +#include "lwip/opt.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#include "lwip/mem.h" +#include "lwip/priv/mem_priv.h" + +#if MEMP_OVERFLOW_CHECK + + +/* MEMP_SIZE: save space for struct memp and for sanity check */ +#define MEMP_SIZE (LWIP_MEM_ALIGN_SIZE(sizeof(struct memp)) + MEM_SANITY_REGION_BEFORE_ALIGNED) +#define MEMP_ALIGN_SIZE(x) (LWIP_MEM_ALIGN_SIZE(x) + MEM_SANITY_REGION_AFTER_ALIGNED) + +#else /* MEMP_OVERFLOW_CHECK */ + +/* No sanity checks + * We don't need to preserve the struct memp while not allocated, so we + * can save a little space and set MEMP_SIZE to 0. + */ +#define MEMP_SIZE 0 +#define MEMP_ALIGN_SIZE(x) (LWIP_MEM_ALIGN_SIZE(x)) + +#endif /* MEMP_OVERFLOW_CHECK */ + +#if !MEMP_MEM_MALLOC || MEMP_OVERFLOW_CHECK +struct memp { + struct memp *next; +#if MEMP_OVERFLOW_CHECK + const char *file; + int line; +#endif /* MEMP_OVERFLOW_CHECK */ +}; +#endif /* !MEMP_MEM_MALLOC || MEMP_OVERFLOW_CHECK */ + +#if MEM_USE_POOLS && MEMP_USE_CUSTOM_POOLS +/* Use a helper type to get the start and end of the user "memory pools" for mem_malloc */ +typedef enum { + /* Get the first (via: + MEMP_POOL_HELPER_START = ((u8_t) 1*MEMP_POOL_A + 0*MEMP_POOL_B + 0*MEMP_POOL_C + 0)*/ + MEMP_POOL_HELPER_FIRST = ((u8_t) +#define LWIP_MEMPOOL(name,num,size,desc) +#define LWIP_MALLOC_MEMPOOL_START 1 +#define LWIP_MALLOC_MEMPOOL(num, size) * MEMP_POOL_##size + 0 +#define LWIP_MALLOC_MEMPOOL_END +#include "lwip/priv/memp_std.h" + ) , + /* Get the last (via: + MEMP_POOL_HELPER_END = ((u8_t) 0 + MEMP_POOL_A*0 + MEMP_POOL_B*0 + MEMP_POOL_C*1) */ + MEMP_POOL_HELPER_LAST = ((u8_t) +#define LWIP_MEMPOOL(name,num,size,desc) +#define LWIP_MALLOC_MEMPOOL_START +#define LWIP_MALLOC_MEMPOOL(num, size) 0 + MEMP_POOL_##size * +#define LWIP_MALLOC_MEMPOOL_END 1 +#include "lwip/priv/memp_std.h" + ) +} memp_pool_helper_t; + +/* The actual start and stop values are here (cast them over) + We use this helper type and these defines so we can avoid using const memp_t values */ +#define MEMP_POOL_FIRST ((memp_t) MEMP_POOL_HELPER_FIRST) +#define MEMP_POOL_LAST ((memp_t) MEMP_POOL_HELPER_LAST) +#endif /* MEM_USE_POOLS && MEMP_USE_CUSTOM_POOLS */ + +/** Memory pool descriptor */ +struct memp_desc { +#if defined(LWIP_DEBUG) || MEMP_OVERFLOW_CHECK || LWIP_STATS_DISPLAY + /** Textual description */ + const char *desc; +#endif /* LWIP_DEBUG || MEMP_OVERFLOW_CHECK || LWIP_STATS_DISPLAY */ +#if MEMP_STATS + /** Statistics */ + struct stats_mem *stats; +#endif + + /** Element size */ + u16_t size; + +#if !MEMP_MEM_MALLOC + /** Number of elements */ + u16_t num; + + /** Base address */ + u8_t *base; + + /** First free element of each pool. Elements form a linked list. */ + struct memp **tab; +#endif /* MEMP_MEM_MALLOC */ +}; + +#if defined(LWIP_DEBUG) || MEMP_OVERFLOW_CHECK || LWIP_STATS_DISPLAY +#define DECLARE_LWIP_MEMPOOL_DESC(desc) (desc), +#else +#define DECLARE_LWIP_MEMPOOL_DESC(desc) +#endif + +#if MEMP_STATS +#define LWIP_MEMPOOL_DECLARE_STATS_INSTANCE(name) static struct stats_mem name; +#define LWIP_MEMPOOL_DECLARE_STATS_REFERENCE(name) &name, +#else +#define LWIP_MEMPOOL_DECLARE_STATS_INSTANCE(name) +#define LWIP_MEMPOOL_DECLARE_STATS_REFERENCE(name) +#endif + +void memp_init_pool(const struct memp_desc *desc); + +#if MEMP_OVERFLOW_CHECK +void *memp_malloc_pool_fn(const struct memp_desc* desc, const char* file, const int line); +#define memp_malloc_pool(d) memp_malloc_pool_fn((d), __FILE__, __LINE__) +#else +void *memp_malloc_pool(const struct memp_desc *desc); +#endif +void memp_free_pool(const struct memp_desc* desc, void *mem); + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_MEMP_PRIV_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/priv/memp_std.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/priv/memp_std.h new file mode 100644 index 0000000000000000000000000000000000000000..669ad4d7e6b026562cfede599bec697003161982 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/priv/memp_std.h @@ -0,0 +1,153 @@ +/** + * @file + * lwIP internal memory pools (do not use in application code) + * This file is deliberately included multiple times: once with empty + * definition of LWIP_MEMPOOL() to handle all includes and multiple times + * to build up various lists of mem pools. + */ + +/* + * SETUP: Make sure we define everything we will need. + * + * We have create three types of pools: + * 1) MEMPOOL - standard pools + * 2) MALLOC_MEMPOOL - to be used by mem_malloc in mem.c + * 3) PBUF_MEMPOOL - a mempool of pbuf's, so include space for the pbuf struct + * + * If the include'r doesn't require any special treatment of each of the types + * above, then will declare #2 & #3 to be just standard mempools. + */ +#ifndef LWIP_MALLOC_MEMPOOL +/* This treats "malloc pools" just like any other pool. + The pools are a little bigger to provide 'size' as the amount of user data. */ +#define LWIP_MALLOC_MEMPOOL(num, size) LWIP_MEMPOOL(POOL_##size, num, (size + LWIP_MEM_ALIGN_SIZE(sizeof(struct memp_malloc_helper))), "MALLOC_"#size) +#define LWIP_MALLOC_MEMPOOL_START +#define LWIP_MALLOC_MEMPOOL_END +#endif /* LWIP_MALLOC_MEMPOOL */ + +#ifndef LWIP_PBUF_MEMPOOL +/* This treats "pbuf pools" just like any other pool. + * Allocates buffers for a pbuf struct AND a payload size */ +#define LWIP_PBUF_MEMPOOL(name, num, payload, desc) LWIP_MEMPOOL(name, num, (LWIP_MEM_ALIGN_SIZE(sizeof(struct pbuf)) + LWIP_MEM_ALIGN_SIZE(payload)), desc) +#endif /* LWIP_PBUF_MEMPOOL */ + + +/* + * A list of internal pools used by LWIP. + * + * LWIP_MEMPOOL(pool_name, number_elements, element_size, pool_description) + * creates a pool name MEMP_pool_name. description is used in stats.c + */ +#if LWIP_RAW +LWIP_MEMPOOL(RAW_PCB, MEMP_NUM_RAW_PCB, sizeof(struct raw_pcb), "RAW_PCB") +#endif /* LWIP_RAW */ + +#if LWIP_UDP +LWIP_MEMPOOL(UDP_PCB, MEMP_NUM_UDP_PCB, sizeof(struct udp_pcb), "UDP_PCB") +#endif /* LWIP_UDP */ + +#if LWIP_TCP +LWIP_MEMPOOL(TCP_PCB, MEMP_NUM_TCP_PCB, sizeof(struct tcp_pcb), "TCP_PCB") +LWIP_MEMPOOL(TCP_PCB_LISTEN, MEMP_NUM_TCP_PCB_LISTEN, sizeof(struct tcp_pcb_listen), "TCP_PCB_LISTEN") +LWIP_MEMPOOL(TCP_SEG, MEMP_NUM_TCP_SEG, sizeof(struct tcp_seg), "TCP_SEG") +#endif /* LWIP_TCP */ + +#if LWIP_ALTCP && LWIP_TCP +LWIP_MEMPOOL(ALTCP_PCB, MEMP_NUM_ALTCP_PCB, sizeof(struct altcp_pcb), "ALTCP_PCB") +#endif /* LWIP_ALTCP && LWIP_TCP */ + +#if LWIP_IPV4 && IP_REASSEMBLY +LWIP_MEMPOOL(REASSDATA, MEMP_NUM_REASSDATA, sizeof(struct ip_reassdata), "REASSDATA") +#endif /* LWIP_IPV4 && IP_REASSEMBLY */ +#if (IP_FRAG && !LWIP_NETIF_TX_SINGLE_PBUF) || (LWIP_IPV6 && LWIP_IPV6_FRAG) +LWIP_MEMPOOL(FRAG_PBUF, MEMP_NUM_FRAG_PBUF, sizeof(struct pbuf_custom_ref),"FRAG_PBUF") +#endif /* IP_FRAG && !LWIP_NETIF_TX_SINGLE_PBUF || (LWIP_IPV6 && LWIP_IPV6_FRAG) */ + +#if LWIP_NETCONN || LWIP_SOCKET +LWIP_MEMPOOL(NETBUF, MEMP_NUM_NETBUF, sizeof(struct netbuf), "NETBUF") +LWIP_MEMPOOL(NETCONN, MEMP_NUM_NETCONN, sizeof(struct netconn), "NETCONN") +#endif /* LWIP_NETCONN || LWIP_SOCKET */ + +#if NO_SYS==0 +LWIP_MEMPOOL(TCPIP_MSG_API, MEMP_NUM_TCPIP_MSG_API, sizeof(struct tcpip_msg), "TCPIP_MSG_API") +#if LWIP_MPU_COMPATIBLE +LWIP_MEMPOOL(API_MSG, MEMP_NUM_API_MSG, sizeof(struct api_msg), "API_MSG") +#if LWIP_DNS +LWIP_MEMPOOL(DNS_API_MSG, MEMP_NUM_DNS_API_MSG, sizeof(struct dns_api_msg), "DNS_API_MSG") +#endif +#if LWIP_SOCKET && !LWIP_TCPIP_CORE_LOCKING +LWIP_MEMPOOL(SOCKET_SETGETSOCKOPT_DATA, MEMP_NUM_SOCKET_SETGETSOCKOPT_DATA, sizeof(struct lwip_setgetsockopt_data), "SOCKET_SETGETSOCKOPT_DATA") +#endif +#if LWIP_SOCKET && (LWIP_SOCKET_SELECT || LWIP_SOCKET_POLL) +LWIP_MEMPOOL(SELECT_CB, MEMP_NUM_SELECT_CB, sizeof(struct lwip_select_cb), "SELECT_CB") +#endif /* LWIP_SOCKET && (LWIP_SOCKET_SELECT || LWIP_SOCKET_POLL) */ +#if LWIP_NETIF_API +LWIP_MEMPOOL(NETIFAPI_MSG, MEMP_NUM_NETIFAPI_MSG, sizeof(struct netifapi_msg), "NETIFAPI_MSG") +#endif +#endif /* LWIP_MPU_COMPATIBLE */ +#if !LWIP_TCPIP_CORE_LOCKING_INPUT +LWIP_MEMPOOL(TCPIP_MSG_INPKT,MEMP_NUM_TCPIP_MSG_INPKT, sizeof(struct tcpip_msg), "TCPIP_MSG_INPKT") +#endif /* !LWIP_TCPIP_CORE_LOCKING_INPUT */ +#endif /* NO_SYS==0 */ + +#if LWIP_IPV4 && LWIP_ARP && ARP_QUEUEING +LWIP_MEMPOOL(ARP_QUEUE, MEMP_NUM_ARP_QUEUE, sizeof(struct etharp_q_entry), "ARP_QUEUE") +#endif /* LWIP_IPV4 && LWIP_ARP && ARP_QUEUEING */ + +#if LWIP_IGMP +LWIP_MEMPOOL(IGMP_GROUP, MEMP_NUM_IGMP_GROUP, sizeof(struct igmp_group), "IGMP_GROUP") +#endif /* LWIP_IGMP */ + +#if LWIP_TIMERS && !LWIP_TIMERS_CUSTOM +LWIP_MEMPOOL(SYS_TIMEOUT, MEMP_NUM_SYS_TIMEOUT, sizeof(struct sys_timeo), "SYS_TIMEOUT") +#endif /* LWIP_TIMERS && !LWIP_TIMERS_CUSTOM */ + +#if LWIP_DNS && LWIP_SOCKET +LWIP_MEMPOOL(NETDB, MEMP_NUM_NETDB, NETDB_ELEM_SIZE, "NETDB") +#endif /* LWIP_DNS && LWIP_SOCKET */ +#if LWIP_DNS && DNS_LOCAL_HOSTLIST && DNS_LOCAL_HOSTLIST_IS_DYNAMIC +LWIP_MEMPOOL(LOCALHOSTLIST, MEMP_NUM_LOCALHOSTLIST, LOCALHOSTLIST_ELEM_SIZE, "LOCALHOSTLIST") +#endif /* LWIP_DNS && DNS_LOCAL_HOSTLIST && DNS_LOCAL_HOSTLIST_IS_DYNAMIC */ + +#if LWIP_IPV6 && LWIP_ND6_QUEUEING +LWIP_MEMPOOL(ND6_QUEUE, MEMP_NUM_ND6_QUEUE, sizeof(struct nd6_q_entry), "ND6_QUEUE") +#endif /* LWIP_IPV6 && LWIP_ND6_QUEUEING */ + +#if LWIP_IPV6 && LWIP_IPV6_REASS +LWIP_MEMPOOL(IP6_REASSDATA, MEMP_NUM_REASSDATA, sizeof(struct ip6_reassdata), "IP6_REASSDATA") +#endif /* LWIP_IPV6 && LWIP_IPV6_REASS */ + +#if LWIP_IPV6 && LWIP_IPV6_MLD +LWIP_MEMPOOL(MLD6_GROUP, MEMP_NUM_MLD6_GROUP, sizeof(struct mld_group), "MLD6_GROUP") +#endif /* LWIP_IPV6 && LWIP_IPV6_MLD */ + + +/* + * A list of pools of pbuf's used by LWIP. + * + * LWIP_PBUF_MEMPOOL(pool_name, number_elements, pbuf_payload_size, pool_description) + * creates a pool name MEMP_pool_name. description is used in stats.c + * This allocates enough space for the pbuf struct and a payload. + * (Example: pbuf_payload_size=0 allocates only size for the struct) + */ +LWIP_MEMPOOL(PBUF, MEMP_NUM_PBUF, sizeof(struct pbuf), "PBUF_REF/ROM") +LWIP_PBUF_MEMPOOL(PBUF_POOL, PBUF_POOL_SIZE, PBUF_POOL_BUFSIZE, "PBUF_POOL") + + +/* + * Allow for user-defined pools; this must be explicitly set in lwipopts.h + * since the default is to NOT look for lwippools.h + */ +#if MEMP_USE_CUSTOM_POOLS +#include "lwippools.h" +#endif /* MEMP_USE_CUSTOM_POOLS */ + +/* + * REQUIRED CLEANUP: Clear up so we don't get "multiply defined" error later + * (#undef is ignored for something that is not defined) + */ +#undef LWIP_MEMPOOL +#undef LWIP_MALLOC_MEMPOOL +#undef LWIP_MALLOC_MEMPOOL_START +#undef LWIP_MALLOC_MEMPOOL_END +#undef LWIP_PBUF_MEMPOOL diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/priv/nd6_priv.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/priv/nd6_priv.h new file mode 100644 index 0000000000000000000000000000000000000000..cc3007d9728857c6043670a39e690a1b4db4396e --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/priv/nd6_priv.h @@ -0,0 +1,142 @@ +/** + * @file + * + * Neighbor discovery and stateless address autoconfiguration for IPv6. + * Aims to be compliant with RFC 4861 (Neighbor discovery) and RFC 4862 + * (Address autoconfiguration). + */ + +/* + * Copyright (c) 2010 Inico Technologies Ltd. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Ivan Delamer + * + * + * Please coordinate changes and requests with Ivan Delamer + * + */ + +#ifndef LWIP_HDR_ND6_PRIV_H +#define LWIP_HDR_ND6_PRIV_H + +#include "lwip/opt.h" + +#if LWIP_IPV6 /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/pbuf.h" +#include "lwip/ip6_addr.h" +#include "lwip/netif.h" + + +#ifdef __cplusplus +extern "C" { +#endif + +#if LWIP_ND6_QUEUEING +/** struct for queueing outgoing packets for unknown address + * defined here to be accessed by memp.h + */ +struct nd6_q_entry { + struct nd6_q_entry *next; + struct pbuf *p; +}; +#endif /* LWIP_ND6_QUEUEING */ + +/** Struct for tables. */ +struct nd6_neighbor_cache_entry { + ip6_addr_t next_hop_address; + struct netif *netif; + u8_t lladdr[NETIF_MAX_HWADDR_LEN]; + /*u32_t pmtu;*/ +#if LWIP_ND6_QUEUEING + /** Pointer to queue of pending outgoing packets on this entry. */ + struct nd6_q_entry *q; +#else /* LWIP_ND6_QUEUEING */ + /** Pointer to a single pending outgoing packet on this entry. */ + struct pbuf *q; +#endif /* LWIP_ND6_QUEUEING */ + u8_t state; + u8_t isrouter; + union { + u32_t reachable_time; /* in seconds */ + u32_t delay_time; /* ticks (ND6_TMR_INTERVAL) */ + u32_t probes_sent; + u32_t stale_time; /* ticks (ND6_TMR_INTERVAL) */ + } counter; +}; + +struct nd6_destination_cache_entry { + ip6_addr_t destination_addr; + ip6_addr_t next_hop_addr; + u16_t pmtu; + u32_t age; +}; + +struct nd6_prefix_list_entry { + ip6_addr_t prefix; + struct netif *netif; + u32_t invalidation_timer; /* in seconds */ +}; + +struct nd6_router_list_entry { + struct nd6_neighbor_cache_entry *neighbor_entry; + u32_t invalidation_timer; /* in seconds */ + u8_t flags; +}; + +enum nd6_neighbor_cache_entry_state { + ND6_NO_ENTRY = 0, + ND6_INCOMPLETE, + ND6_REACHABLE, + ND6_STALE, + ND6_DELAY, + ND6_PROBE +}; + +#define ND6_HOPLIM 255 /* maximum hop limit, required in all ND packets */ + +#define ND6_2HRS 7200 /* two hours, expressed in number of seconds */ + +/* Router tables. */ +/* @todo make these static? and entries accessible through API? */ +extern struct nd6_neighbor_cache_entry neighbor_cache[]; +extern struct nd6_destination_cache_entry destination_cache[]; +extern struct nd6_prefix_list_entry prefix_list[]; +extern struct nd6_router_list_entry default_router_list[]; + +/* Default values, can be updated by a RA message. */ +extern u32_t reachable_time; +extern u32_t retrans_timer; + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_IPV6 */ + +#endif /* LWIP_HDR_ND6_PRIV_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/priv/raw_priv.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/priv/raw_priv.h new file mode 100644 index 0000000000000000000000000000000000000000..d4561d4f3295d46bf16890e71ea51ca56fe0483f --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/priv/raw_priv.h @@ -0,0 +1,69 @@ +/** + * @file + * raw API internal implementations (do not use in application code) + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef LWIP_HDR_RAW_PRIV_H +#define LWIP_HDR_RAW_PRIV_H + +#include "lwip/opt.h" + +#if LWIP_RAW /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/raw.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** return codes for raw_input */ +typedef enum raw_input_state +{ + RAW_INPUT_NONE = 0, /* pbuf did not match any pcbs */ + RAW_INPUT_EATEN, /* pbuf handed off and delivered to pcb */ + RAW_INPUT_DELIVERED /* pbuf only delivered to pcb (pbuf can still be referenced) */ +} raw_input_state_t; + +/* The following functions are the lower layer interface to RAW. */ +raw_input_state_t raw_input(struct pbuf *p, struct netif *inp); + +void raw_netif_ip_addr_changed(const ip_addr_t* old_addr, const ip_addr_t* new_addr); + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_RAW */ + +#endif /* LWIP_HDR_RAW_PRIV_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/priv/sockets_priv.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/priv/sockets_priv.h new file mode 100644 index 0000000000000000000000000000000000000000..d8f9904dcf812b1ba74a12002a81b6efd4558573 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/priv/sockets_priv.h @@ -0,0 +1,175 @@ +/** + * @file + * Sockets API internal implementations (do not use in application code) + */ + +/* + * Copyright (c) 2017 Joel Cunningham, Garmin International, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Joel Cunningham + * + */ +#ifndef LWIP_HDR_SOCKETS_PRIV_H +#define LWIP_HDR_SOCKETS_PRIV_H + +#include "lwip/opt.h" + +#if LWIP_SOCKET /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/err.h" +#include "lwip/sockets.h" +#include "lwip/sys.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define NUM_SOCKETS MEMP_NUM_NETCONN + +/** This is overridable for the rare case where more than 255 threads + * select on the same socket... + */ +#ifndef SELWAIT_T +#define SELWAIT_T u8_t +#endif + +union lwip_sock_lastdata { + struct netbuf *netbuf; + struct pbuf *pbuf; +}; + +/** Contains all internal pointers and states used for a socket */ +struct lwip_sock { + /** sockets currently are built on netconns, each socket has one netconn */ + struct netconn *conn; + /** data that was left from the previous read */ + union lwip_sock_lastdata lastdata; +#if LWIP_SOCKET_SELECT || LWIP_SOCKET_POLL + /** number of times data was received, set by event_callback(), + tested by the receive and select functions */ + s16_t rcvevent; + /** number of times data was ACKed (free send buffer), set by event_callback(), + tested by select */ + u16_t sendevent; + /** error happened for this socket, set by event_callback(), tested by select */ + u16_t errevent; + /** counter of how many threads are waiting for this socket using select */ + SELWAIT_T select_waiting; +#endif /* LWIP_SOCKET_SELECT || LWIP_SOCKET_POLL */ +#if LWIP_NETCONN_FULLDUPLEX + /* counter of how many threads are using a struct lwip_sock (not the 'int') */ + u8_t fd_used; + /* status of pending close/delete actions */ + u8_t fd_free_pending; +#define LWIP_SOCK_FD_FREE_TCP 1 +#define LWIP_SOCK_FD_FREE_FREE 2 +#endif +}; + +#ifndef set_errno +#define set_errno(err) do { if (err) { errno = (err); } } while(0) +#endif + +#if !LWIP_TCPIP_CORE_LOCKING +/** Maximum optlen used by setsockopt/getsockopt */ +#define LWIP_SETGETSOCKOPT_MAXOPTLEN LWIP_MAX(16, sizeof(struct ifreq)) + +/** This struct is used to pass data to the set/getsockopt_internal + * functions running in tcpip_thread context (only a void* is allowed) */ +struct lwip_setgetsockopt_data { + /** socket index for which to change options */ + int s; + /** level of the option to process */ + int level; + /** name of the option to process */ + int optname; + /** set: value to set the option to + * get: value of the option is stored here */ +#if LWIP_MPU_COMPATIBLE + u8_t optval[LWIP_SETGETSOCKOPT_MAXOPTLEN]; +#else + union { + void *p; + const void *pc; + } optval; +#endif + /** size of *optval */ + socklen_t optlen; + /** if an error occurs, it is temporarily stored here */ + int err; + /** semaphore to wake up the calling task */ + void* completed_sem; +}; +#endif /* !LWIP_TCPIP_CORE_LOCKING */ + +#ifdef __cplusplus +} +#endif + +struct lwip_sock* lwip_socket_dbg_get_socket(int fd); + +#if LWIP_SOCKET_SELECT || LWIP_SOCKET_POLL + +#if LWIP_NETCONN_SEM_PER_THREAD +#define SELECT_SEM_T sys_sem_t* +#define SELECT_SEM_PTR(sem) (sem) +#else /* LWIP_NETCONN_SEM_PER_THREAD */ +#define SELECT_SEM_T sys_sem_t +#define SELECT_SEM_PTR(sem) (&(sem)) +#endif /* LWIP_NETCONN_SEM_PER_THREAD */ + +/** Description for a task waiting in select */ +struct lwip_select_cb { + /** Pointer to the next waiting task */ + struct lwip_select_cb *next; + /** Pointer to the previous waiting task */ + struct lwip_select_cb *prev; +#if LWIP_SOCKET_SELECT + /** readset passed to select */ + fd_set *readset; + /** writeset passed to select */ + fd_set *writeset; + /** unimplemented: exceptset passed to select */ + fd_set *exceptset; +#endif /* LWIP_SOCKET_SELECT */ +#if LWIP_SOCKET_POLL + /** fds passed to poll; NULL if select */ + struct pollfd *poll_fds; + /** nfds passed to poll; 0 if select */ + nfds_t poll_nfds; +#endif /* LWIP_SOCKET_POLL */ + /** don't signal the same semaphore twice: set to 1 when signalled */ + int sem_signalled; + /** semaphore to wake up a task waiting for select */ + SELECT_SEM_T sem; +}; +#endif /* LWIP_SOCKET_SELECT || LWIP_SOCKET_POLL */ + +#endif /* LWIP_SOCKET */ + +#endif /* LWIP_HDR_SOCKETS_PRIV_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/priv/tcp_priv.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/priv/tcp_priv.h new file mode 100644 index 0000000000000000000000000000000000000000..72f9126d46585ea11f71a53cc9866c9a7d252195 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/priv/tcp_priv.h @@ -0,0 +1,523 @@ +/** + * @file + * TCP internal implementations (do not use in application code) + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef LWIP_HDR_TCP_PRIV_H +#define LWIP_HDR_TCP_PRIV_H + +#include "lwip/opt.h" + +#if LWIP_TCP /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/tcp.h" +#include "lwip/mem.h" +#include "lwip/pbuf.h" +#include "lwip/ip.h" +#include "lwip/icmp.h" +#include "lwip/err.h" +#include "lwip/ip6.h" +#include "lwip/ip6_addr.h" +#include "lwip/prot/tcp.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Functions for interfacing with TCP: */ + +/* Lower layer interface to TCP: */ +void tcp_init (void); /* Initialize this module. */ +void tcp_tmr (void); /* Must be called every + TCP_TMR_INTERVAL + ms. (Typically 250 ms). */ +/* It is also possible to call these two functions at the right + intervals (instead of calling tcp_tmr()). */ +void tcp_slowtmr (void); +void tcp_fasttmr (void); + +/* Call this from a netif driver (watch out for threading issues!) that has + returned a memory error on transmit and now has free buffers to send more. + This iterates all active pcbs that had an error and tries to call + tcp_output, so use this with care as it might slow down the system. */ +void tcp_txnow (void); + +/* Only used by IP to pass a TCP segment to TCP: */ +void tcp_input (struct pbuf *p, struct netif *inp); +/* Used within the TCP code only: */ +struct tcp_pcb * tcp_alloc (u8_t prio); +void tcp_free (struct tcp_pcb *pcb); +void tcp_abandon (struct tcp_pcb *pcb, int reset); +err_t tcp_send_empty_ack(struct tcp_pcb *pcb); +err_t tcp_rexmit (struct tcp_pcb *pcb); +err_t tcp_rexmit_rto_prepare(struct tcp_pcb *pcb); +void tcp_rexmit_rto_commit(struct tcp_pcb *pcb); +void tcp_rexmit_rto (struct tcp_pcb *pcb); +void tcp_rexmit_fast (struct tcp_pcb *pcb); +u32_t tcp_update_rcv_ann_wnd(struct tcp_pcb *pcb); +err_t tcp_process_refused_data(struct tcp_pcb *pcb); + +/** + * This is the Nagle algorithm: try to combine user data to send as few TCP + * segments as possible. Only send if + * - no previously transmitted data on the connection remains unacknowledged or + * - the TF_NODELAY flag is set (nagle algorithm turned off for this pcb) or + * - the only unsent segment is at least pcb->mss bytes long (or there is more + * than one unsent segment - with lwIP, this can happen although unsent->len < mss) + * - or if we are in fast-retransmit (TF_INFR) + */ +#define tcp_do_output_nagle(tpcb) ((((tpcb)->unacked == NULL) || \ + ((tpcb)->flags & (TF_NODELAY | TF_INFR)) || \ + (((tpcb)->unsent != NULL) && (((tpcb)->unsent->next != NULL) || \ + ((tpcb)->unsent->len >= (tpcb)->mss))) || \ + ((tcp_sndbuf(tpcb) == 0) || (tcp_sndqueuelen(tpcb) >= TCP_SND_QUEUELEN)) \ + ) ? 1 : 0) +#define tcp_output_nagle(tpcb) (tcp_do_output_nagle(tpcb) ? tcp_output(tpcb) : ERR_OK) + + +#define TCP_SEQ_LT(a,b) ((s32_t)((u32_t)(a) - (u32_t)(b)) < 0) +#define TCP_SEQ_LEQ(a,b) ((s32_t)((u32_t)(a) - (u32_t)(b)) <= 0) +#define TCP_SEQ_GT(a,b) ((s32_t)((u32_t)(a) - (u32_t)(b)) > 0) +#define TCP_SEQ_GEQ(a,b) ((s32_t)((u32_t)(a) - (u32_t)(b)) >= 0) +/* is b<=a<=c? */ +#if 0 /* see bug #10548 */ +#define TCP_SEQ_BETWEEN(a,b,c) ((c)-(b) >= (a)-(b)) +#endif +#define TCP_SEQ_BETWEEN(a,b,c) (TCP_SEQ_GEQ(a,b) && TCP_SEQ_LEQ(a,c)) + +#ifndef TCP_TMR_INTERVAL +#define TCP_TMR_INTERVAL 250 /* The TCP timer interval in milliseconds. */ +#endif /* TCP_TMR_INTERVAL */ + +#ifndef TCP_FAST_INTERVAL +#define TCP_FAST_INTERVAL TCP_TMR_INTERVAL /* the fine grained timeout in milliseconds */ +#endif /* TCP_FAST_INTERVAL */ + +#ifndef TCP_SLOW_INTERVAL +#define TCP_SLOW_INTERVAL (2*TCP_TMR_INTERVAL) /* the coarse grained timeout in milliseconds */ +#endif /* TCP_SLOW_INTERVAL */ + +#define TCP_FIN_WAIT_TIMEOUT 20000 /* milliseconds */ +#define TCP_SYN_RCVD_TIMEOUT 20000 /* milliseconds */ + +#define TCP_OOSEQ_TIMEOUT 6U /* x RTO */ + +#ifndef TCP_MSL +#define TCP_MSL 60000UL /* The maximum segment lifetime in milliseconds */ +#endif + +/* Keepalive values, compliant with RFC 1122. Don't change this unless you know what you're doing */ +#ifndef TCP_KEEPIDLE_DEFAULT +#define TCP_KEEPIDLE_DEFAULT 7200000UL /* Default KEEPALIVE timer in milliseconds */ +#endif + +#ifndef TCP_KEEPINTVL_DEFAULT +#define TCP_KEEPINTVL_DEFAULT 75000UL /* Default Time between KEEPALIVE probes in milliseconds */ +#endif + +#ifndef TCP_KEEPCNT_DEFAULT +#define TCP_KEEPCNT_DEFAULT 9U /* Default Counter for KEEPALIVE probes */ +#endif + +#define TCP_MAXIDLE TCP_KEEPCNT_DEFAULT * TCP_KEEPINTVL_DEFAULT /* Maximum KEEPALIVE probe time */ + +#define TCP_TCPLEN(seg) ((seg)->len + (((TCPH_FLAGS((seg)->tcphdr) & (TCP_FIN | TCP_SYN)) != 0) ? 1U : 0U)) + +/** Flags used on input processing, not on pcb->flags +*/ +#define TF_RESET (u8_t)0x08U /* Connection was reset. */ +#define TF_CLOSED (u8_t)0x10U /* Connection was successfully closed. */ +#define TF_GOT_FIN (u8_t)0x20U /* Connection was closed by the remote end. */ + + +#if LWIP_EVENT_API + +#define TCP_EVENT_ACCEPT(lpcb,pcb,arg,err,ret) ret = lwip_tcp_event(arg, (pcb),\ + LWIP_EVENT_ACCEPT, NULL, 0, err) +#define TCP_EVENT_SENT(pcb,space,ret) ret = lwip_tcp_event((pcb)->callback_arg, (pcb),\ + LWIP_EVENT_SENT, NULL, space, ERR_OK) +#define TCP_EVENT_RECV(pcb,p,err,ret) ret = lwip_tcp_event((pcb)->callback_arg, (pcb),\ + LWIP_EVENT_RECV, (p), 0, (err)) +#define TCP_EVENT_CLOSED(pcb,ret) ret = lwip_tcp_event((pcb)->callback_arg, (pcb),\ + LWIP_EVENT_RECV, NULL, 0, ERR_OK) +#define TCP_EVENT_CONNECTED(pcb,err,ret) ret = lwip_tcp_event((pcb)->callback_arg, (pcb),\ + LWIP_EVENT_CONNECTED, NULL, 0, (err)) +#define TCP_EVENT_POLL(pcb,ret) do { if ((pcb)->state != SYN_RCVD) { \ + ret = lwip_tcp_event((pcb)->callback_arg, (pcb), LWIP_EVENT_POLL, NULL, 0, ERR_OK); \ + } else { \ + ret = ERR_ARG; } } while(0) +/* For event API, last state SYN_RCVD must be excluded here: the application + has not seen this pcb, yet! */ +#define TCP_EVENT_ERR(last_state,errf,arg,err) do { if (last_state != SYN_RCVD) { \ + lwip_tcp_event((arg), NULL, LWIP_EVENT_ERR, NULL, 0, (err)); } } while(0) + +#else /* LWIP_EVENT_API */ + +#define TCP_EVENT_ACCEPT(lpcb,pcb,arg,err,ret) \ + do { \ + if((lpcb)->accept != NULL) \ + (ret) = (lpcb)->accept((arg),(pcb),(err)); \ + else (ret) = ERR_ARG; \ + } while (0) + +#define TCP_EVENT_SENT(pcb,space,ret) \ + do { \ + if((pcb)->sent != NULL) \ + (ret) = (pcb)->sent((pcb)->callback_arg,(pcb),(space)); \ + else (ret) = ERR_OK; \ + } while (0) + +#define TCP_EVENT_RECV(pcb,p,err,ret) \ + do { \ + if((pcb)->recv != NULL) { \ + (ret) = (pcb)->recv((pcb)->callback_arg,(pcb),(p),(err));\ + } else { \ + (ret) = tcp_recv_null(NULL, (pcb), (p), (err)); \ + } \ + } while (0) + +#define TCP_EVENT_CLOSED(pcb,ret) \ + do { \ + if(((pcb)->recv != NULL)) { \ + (ret) = (pcb)->recv((pcb)->callback_arg,(pcb),NULL,ERR_OK);\ + } else { \ + (ret) = ERR_OK; \ + } \ + } while (0) + +#define TCP_EVENT_CONNECTED(pcb,err,ret) \ + do { \ + if((pcb)->connected != NULL) \ + (ret) = (pcb)->connected((pcb)->callback_arg,(pcb),(err)); \ + else (ret) = ERR_OK; \ + } while (0) + +#define TCP_EVENT_POLL(pcb,ret) \ + do { \ + if((pcb)->poll != NULL) \ + (ret) = (pcb)->poll((pcb)->callback_arg,(pcb)); \ + else (ret) = ERR_OK; \ + } while (0) + +#define TCP_EVENT_ERR(last_state,errf,arg,err) \ + do { \ + LWIP_UNUSED_ARG(last_state); \ + if((errf) != NULL) \ + (errf)((arg),(err)); \ + } while (0) + +#endif /* LWIP_EVENT_API */ + +/** Enabled extra-check for TCP_OVERSIZE if LWIP_DEBUG is enabled */ +#if TCP_OVERSIZE && defined(LWIP_DEBUG) +#define TCP_OVERSIZE_DBGCHECK 1 +#else +#define TCP_OVERSIZE_DBGCHECK 0 +#endif + +/** Don't generate checksum on copy if CHECKSUM_GEN_TCP is disabled */ +#define TCP_CHECKSUM_ON_COPY (LWIP_CHECKSUM_ON_COPY && CHECKSUM_GEN_TCP) + +/* This structure represents a TCP segment on the unsent, unacked and ooseq queues */ +struct tcp_seg { + struct tcp_seg *next; /* used when putting segments on a queue */ + struct pbuf *p; /* buffer containing data + TCP header */ + u16_t len; /* the TCP length of this segment */ +#if TCP_OVERSIZE_DBGCHECK + u16_t oversize_left; /* Extra bytes available at the end of the last + pbuf in unsent (used for asserting vs. + tcp_pcb.unsent_oversize only) */ +#endif /* TCP_OVERSIZE_DBGCHECK */ +#if TCP_CHECKSUM_ON_COPY + u16_t chksum; + u8_t chksum_swapped; +#endif /* TCP_CHECKSUM_ON_COPY */ + u8_t flags; +#define TF_SEG_OPTS_MSS (u8_t)0x01U /* Include MSS option (only used in SYN segments) */ +#define TF_SEG_OPTS_TS (u8_t)0x02U /* Include timestamp option. */ +#define TF_SEG_DATA_CHECKSUMMED (u8_t)0x04U /* ALL data (not the header) is + checksummed into 'chksum' */ +#define TF_SEG_OPTS_WND_SCALE (u8_t)0x08U /* Include WND SCALE option (only used in SYN segments) */ +#define TF_SEG_OPTS_SACK_PERM (u8_t)0x10U /* Include SACK Permitted option (only used in SYN segments) */ + struct tcp_hdr *tcphdr; /* the TCP header */ +}; + +#define LWIP_TCP_OPT_EOL 0 +#define LWIP_TCP_OPT_NOP 1 +#define LWIP_TCP_OPT_MSS 2 +#define LWIP_TCP_OPT_WS 3 +#define LWIP_TCP_OPT_SACK_PERM 4 +#define LWIP_TCP_OPT_TS 8 + +#define LWIP_TCP_OPT_LEN_MSS 4 +#if LWIP_TCP_TIMESTAMPS +#define LWIP_TCP_OPT_LEN_TS 10 +#define LWIP_TCP_OPT_LEN_TS_OUT 12 /* aligned for output (includes NOP padding) */ +#else +#define LWIP_TCP_OPT_LEN_TS_OUT 0 +#endif +#if LWIP_WND_SCALE +#define LWIP_TCP_OPT_LEN_WS 3 +#define LWIP_TCP_OPT_LEN_WS_OUT 4 /* aligned for output (includes NOP padding) */ +#else +#define LWIP_TCP_OPT_LEN_WS_OUT 0 +#endif + +#if LWIP_TCP_SACK_OUT +#define LWIP_TCP_OPT_LEN_SACK_PERM 2 +#define LWIP_TCP_OPT_LEN_SACK_PERM_OUT 4 /* aligned for output (includes NOP padding) */ +#else +#define LWIP_TCP_OPT_LEN_SACK_PERM_OUT 0 +#endif + +#define LWIP_TCP_OPT_LENGTH(flags) \ + ((flags) & TF_SEG_OPTS_MSS ? LWIP_TCP_OPT_LEN_MSS : 0) + \ + ((flags) & TF_SEG_OPTS_TS ? LWIP_TCP_OPT_LEN_TS_OUT : 0) + \ + ((flags) & TF_SEG_OPTS_WND_SCALE ? LWIP_TCP_OPT_LEN_WS_OUT : 0) + \ + ((flags) & TF_SEG_OPTS_SACK_PERM ? LWIP_TCP_OPT_LEN_SACK_PERM_OUT : 0) + +/** This returns a TCP header option for MSS in an u32_t */ +#define TCP_BUILD_MSS_OPTION(mss) lwip_htonl(0x02040000 | ((mss) & 0xFFFF)) + +#if LWIP_WND_SCALE +#define TCPWNDSIZE_F U32_F +#define TCPWND_MAX 0xFFFFFFFFU +#define TCPWND_CHECK16(x) LWIP_ASSERT("window size > 0xFFFF", (x) <= 0xFFFF) +#define TCPWND_MIN16(x) ((u16_t)LWIP_MIN((x), 0xFFFF)) +#else /* LWIP_WND_SCALE */ +#define TCPWNDSIZE_F U16_F +#define TCPWND_MAX 0xFFFFU +#define TCPWND_CHECK16(x) +#define TCPWND_MIN16(x) x +#endif /* LWIP_WND_SCALE */ + +/* Global variables: */ +extern struct tcp_pcb *tcp_input_pcb; +extern u32_t tcp_ticks; +extern u8_t tcp_active_pcbs_changed; + +/* The TCP PCB lists. */ +union tcp_listen_pcbs_t { /* List of all TCP PCBs in LISTEN state. */ + struct tcp_pcb_listen *listen_pcbs; + struct tcp_pcb *pcbs; +}; +extern struct tcp_pcb *tcp_bound_pcbs; +extern union tcp_listen_pcbs_t tcp_listen_pcbs; +extern struct tcp_pcb *tcp_active_pcbs; /* List of all TCP PCBs that are in a + state in which they accept or send + data. */ +extern struct tcp_pcb *tcp_tw_pcbs; /* List of all TCP PCBs in TIME-WAIT. */ + +#define NUM_TCP_PCB_LISTS_NO_TIME_WAIT 3 +#define NUM_TCP_PCB_LISTS 4 +extern struct tcp_pcb ** const tcp_pcb_lists[NUM_TCP_PCB_LISTS]; + +/* Axioms about the above lists: + 1) Every TCP PCB that is not CLOSED is in one of the lists. + 2) A PCB is only in one of the lists. + 3) All PCBs in the tcp_listen_pcbs list is in LISTEN state. + 4) All PCBs in the tcp_tw_pcbs list is in TIME-WAIT state. +*/ +/* Define two macros, TCP_REG and TCP_RMV that registers a TCP PCB + with a PCB list or removes a PCB from a list, respectively. */ +#ifndef TCP_DEBUG_PCB_LISTS +#define TCP_DEBUG_PCB_LISTS 0 +#endif +#if TCP_DEBUG_PCB_LISTS +#define TCP_REG(pcbs, npcb) do {\ + struct tcp_pcb *tcp_tmp_pcb; \ + LWIP_DEBUGF(TCP_DEBUG, ("TCP_REG %p local port %"U16_F"\n", (void *)(npcb), (npcb)->local_port)); \ + for (tcp_tmp_pcb = *(pcbs); \ + tcp_tmp_pcb != NULL; \ + tcp_tmp_pcb = tcp_tmp_pcb->next) { \ + LWIP_ASSERT("TCP_REG: already registered\n", tcp_tmp_pcb != (npcb)); \ + } \ + LWIP_ASSERT("TCP_REG: pcb->state != CLOSED", ((pcbs) == &tcp_bound_pcbs) || ((npcb)->state != CLOSED)); \ + (npcb)->next = *(pcbs); \ + LWIP_ASSERT("TCP_REG: npcb->next != npcb", (npcb)->next != (npcb)); \ + *(pcbs) = (npcb); \ + LWIP_ASSERT("TCP_REG: tcp_pcbs sane", tcp_pcbs_sane()); \ + tcp_timer_needed(); \ + } while(0) +#define TCP_RMV(pcbs, npcb) do { \ + struct tcp_pcb *tcp_tmp_pcb; \ + LWIP_ASSERT("TCP_RMV: pcbs != NULL", *(pcbs) != NULL); \ + LWIP_DEBUGF(TCP_DEBUG, ("TCP_RMV: removing %p from %p\n", (void *)(npcb), (void *)(*(pcbs)))); \ + if(*(pcbs) == (npcb)) { \ + *(pcbs) = (*pcbs)->next; \ + } else for (tcp_tmp_pcb = *(pcbs); tcp_tmp_pcb != NULL; tcp_tmp_pcb = tcp_tmp_pcb->next) { \ + if(tcp_tmp_pcb->next == (npcb)) { \ + tcp_tmp_pcb->next = (npcb)->next; \ + break; \ + } \ + } \ + (npcb)->next = NULL; \ + LWIP_ASSERT("TCP_RMV: tcp_pcbs sane", tcp_pcbs_sane()); \ + LWIP_DEBUGF(TCP_DEBUG, ("TCP_RMV: removed %p from %p\n", (void *)(npcb), (void *)(*(pcbs)))); \ + } while(0) + +#else /* LWIP_DEBUG */ + +#define TCP_REG(pcbs, npcb) \ + do { \ + (npcb)->next = *pcbs; \ + *(pcbs) = (npcb); \ + tcp_timer_needed(); \ + } while (0) + +#define TCP_RMV(pcbs, npcb) \ + do { \ + if(*(pcbs) == (npcb)) { \ + (*(pcbs)) = (*pcbs)->next; \ + } \ + else { \ + struct tcp_pcb *tcp_tmp_pcb; \ + for (tcp_tmp_pcb = *pcbs; \ + tcp_tmp_pcb != NULL; \ + tcp_tmp_pcb = tcp_tmp_pcb->next) { \ + if(tcp_tmp_pcb->next == (npcb)) { \ + tcp_tmp_pcb->next = (npcb)->next; \ + break; \ + } \ + } \ + } \ + (npcb)->next = NULL; \ + } while(0) + +#endif /* LWIP_DEBUG */ + +#define TCP_REG_ACTIVE(npcb) \ + do { \ + TCP_REG(&tcp_active_pcbs, npcb); \ + tcp_active_pcbs_changed = 1; \ + } while (0) + +#define TCP_RMV_ACTIVE(npcb) \ + do { \ + TCP_RMV(&tcp_active_pcbs, npcb); \ + tcp_active_pcbs_changed = 1; \ + } while (0) + +#define TCP_PCB_REMOVE_ACTIVE(pcb) \ + do { \ + tcp_pcb_remove(&tcp_active_pcbs, pcb); \ + tcp_active_pcbs_changed = 1; \ + } while (0) + + +/* Internal functions: */ +struct tcp_pcb *tcp_pcb_copy(struct tcp_pcb *pcb); +void tcp_pcb_purge(struct tcp_pcb *pcb); +void tcp_pcb_remove(struct tcp_pcb **pcblist, struct tcp_pcb *pcb); + +void tcp_segs_free(struct tcp_seg *seg); +void tcp_seg_free(struct tcp_seg *seg); +struct tcp_seg *tcp_seg_copy(struct tcp_seg *seg); + +#define tcp_ack(pcb) \ + do { \ + if((pcb)->flags & TF_ACK_DELAY) { \ + tcp_clear_flags(pcb, TF_ACK_DELAY); \ + tcp_ack_now(pcb); \ + } \ + else { \ + tcp_set_flags(pcb, TF_ACK_DELAY); \ + } \ + } while (0) + +#define tcp_ack_now(pcb) \ + tcp_set_flags(pcb, TF_ACK_NOW) + +err_t tcp_send_fin(struct tcp_pcb *pcb); +err_t tcp_enqueue_flags(struct tcp_pcb *pcb, u8_t flags); + +void tcp_rexmit_seg(struct tcp_pcb *pcb, struct tcp_seg *seg); + +void tcp_rst(const struct tcp_pcb* pcb, u32_t seqno, u32_t ackno, + const ip_addr_t *local_ip, const ip_addr_t *remote_ip, + u16_t local_port, u16_t remote_port); + +u32_t tcp_next_iss(struct tcp_pcb *pcb); + +err_t tcp_keepalive(struct tcp_pcb *pcb); +err_t tcp_split_unsent_seg(struct tcp_pcb *pcb, u16_t split); +err_t tcp_zero_window_probe(struct tcp_pcb *pcb); +void tcp_trigger_input_pcb_close(void); + +#if TCP_CALCULATE_EFF_SEND_MSS +u16_t tcp_eff_send_mss_netif(u16_t sendmss, struct netif *outif, + const ip_addr_t *dest); +#define tcp_eff_send_mss(sendmss, src, dest) \ + tcp_eff_send_mss_netif(sendmss, ip_route(src, dest), dest) +#endif /* TCP_CALCULATE_EFF_SEND_MSS */ + +#if LWIP_CALLBACK_API +err_t tcp_recv_null(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err); +#endif /* LWIP_CALLBACK_API */ + +#if TCP_DEBUG || TCP_INPUT_DEBUG || TCP_OUTPUT_DEBUG +void tcp_debug_print(struct tcp_hdr *tcphdr); +void tcp_debug_print_flags(u8_t flags); +void tcp_debug_print_state(enum tcp_state s); +void tcp_debug_print_pcbs(void); +s16_t tcp_pcbs_sane(void); +#else +# define tcp_debug_print(tcphdr) +# define tcp_debug_print_flags(flags) +# define tcp_debug_print_state(s) +# define tcp_debug_print_pcbs() +# define tcp_pcbs_sane() 1 +#endif /* TCP_DEBUG */ + +/** External function (implemented in timers.c), called when TCP detects + * that a timer is needed (i.e. active- or time-wait-pcb found). */ +void tcp_timer_needed(void); + +void tcp_netif_ip_addr_changed(const ip_addr_t* old_addr, const ip_addr_t* new_addr); + +#if TCP_QUEUE_OOSEQ +void tcp_free_ooseq(struct tcp_pcb *pcb); +#endif + +#if LWIP_TCP_PCB_NUM_EXT_ARGS +err_t tcp_ext_arg_invoke_callbacks_passive_open(struct tcp_pcb_listen *lpcb, struct tcp_pcb *cpcb); +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_TCP */ + +#endif /* LWIP_HDR_TCP_PRIV_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/priv/tcpip_priv.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/priv/tcpip_priv.h new file mode 100644 index 0000000000000000000000000000000000000000..74be634be0540a898a790eac89ac7c5d6e1524a7 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/priv/tcpip_priv.h @@ -0,0 +1,170 @@ +/** + * @file + * TCPIP API internal implementations (do not use in application code) + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef LWIP_HDR_TCPIP_PRIV_H +#define LWIP_HDR_TCPIP_PRIV_H + +#include "lwip/opt.h" + +#if !NO_SYS /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/tcpip.h" +#include "lwip/sys.h" +#include "lwip/timeouts.h" + +#ifdef __cplusplus +extern "C" { +#endif + +struct pbuf; +struct netif; + +#if LWIP_MPU_COMPATIBLE +#define API_VAR_REF(name) (*(name)) +#define API_VAR_DECLARE(type, name) type * name +#define API_VAR_ALLOC_EXT(type, pool, name, errorblock) do { \ + name = (type *)memp_malloc(pool); \ + if (name == NULL) { \ + errorblock; \ + } \ + } while(0) +#define API_VAR_ALLOC(type, pool, name, errorval) API_VAR_ALLOC_EXT(type, pool, name, return errorval) +#define API_VAR_ALLOC_POOL(type, pool, name, errorval) do { \ + name = (type *)LWIP_MEMPOOL_ALLOC(pool); \ + if (name == NULL) { \ + return errorval; \ + } \ + } while(0) +#define API_VAR_FREE(pool, name) memp_free(pool, name) +#define API_VAR_FREE_POOL(pool, name) LWIP_MEMPOOL_FREE(pool, name) +#define API_EXPR_REF(expr) (&(expr)) +#if LWIP_NETCONN_SEM_PER_THREAD +#define API_EXPR_REF_SEM(expr) (expr) +#else +#define API_EXPR_REF_SEM(expr) API_EXPR_REF(expr) +#endif +#define API_EXPR_DEREF(expr) expr +#define API_MSG_M_DEF(m) m +#define API_MSG_M_DEF_C(t, m) t m +#else /* LWIP_MPU_COMPATIBLE */ +#define API_VAR_REF(name) name +#define API_VAR_DECLARE(type, name) type name +#define API_VAR_ALLOC_EXT(type, pool, name, errorblock) +#define API_VAR_ALLOC(type, pool, name, errorval) +#define API_VAR_ALLOC_POOL(type, pool, name, errorval) +#define API_VAR_FREE(pool, name) +#define API_VAR_FREE_POOL(pool, name) +#define API_EXPR_REF(expr) expr +#define API_EXPR_REF_SEM(expr) API_EXPR_REF(expr) +#define API_EXPR_DEREF(expr) (*(expr)) +#define API_MSG_M_DEF(m) *m +#define API_MSG_M_DEF_C(t, m) const t * m +#endif /* LWIP_MPU_COMPATIBLE */ + +err_t tcpip_send_msg_wait_sem(tcpip_callback_fn fn, void *apimsg, sys_sem_t* sem); + +struct tcpip_api_call_data +{ +#if !LWIP_TCPIP_CORE_LOCKING + err_t err; +#if !LWIP_NETCONN_SEM_PER_THREAD + sys_sem_t sem; +#endif /* LWIP_NETCONN_SEM_PER_THREAD */ +#else /* !LWIP_TCPIP_CORE_LOCKING */ + u8_t dummy; /* avoid empty struct :-( */ +#endif /* !LWIP_TCPIP_CORE_LOCKING */ +}; +typedef err_t (*tcpip_api_call_fn)(struct tcpip_api_call_data* call); +err_t tcpip_api_call(tcpip_api_call_fn fn, struct tcpip_api_call_data *call); + +enum tcpip_msg_type { +#if !LWIP_TCPIP_CORE_LOCKING + TCPIP_MSG_API, + TCPIP_MSG_API_CALL, +#endif /* !LWIP_TCPIP_CORE_LOCKING */ +#if !LWIP_TCPIP_CORE_LOCKING_INPUT + TCPIP_MSG_INPKT, +#endif /* !LWIP_TCPIP_CORE_LOCKING_INPUT */ +#if LWIP_TCPIP_TIMEOUT && LWIP_TIMERS + TCPIP_MSG_TIMEOUT, + TCPIP_MSG_UNTIMEOUT, +#endif /* LWIP_TCPIP_TIMEOUT && LWIP_TIMERS */ + TCPIP_MSG_CALLBACK, + TCPIP_MSG_CALLBACK_STATIC +}; + +struct tcpip_msg { + enum tcpip_msg_type type; + union { +#if !LWIP_TCPIP_CORE_LOCKING + struct { + tcpip_callback_fn function; + void* msg; + } api_msg; + struct { + tcpip_api_call_fn function; + struct tcpip_api_call_data *arg; + sys_sem_t *sem; + } api_call; +#endif /* LWIP_TCPIP_CORE_LOCKING */ +#if !LWIP_TCPIP_CORE_LOCKING_INPUT + struct { + struct pbuf *p; + struct netif *netif; + netif_input_fn input_fn; + } inp; +#endif /* !LWIP_TCPIP_CORE_LOCKING_INPUT */ + struct { + tcpip_callback_fn function; + void *ctx; + } cb; +#if LWIP_TCPIP_TIMEOUT && LWIP_TIMERS + struct { + u32_t msecs; + sys_timeout_handler h; + void *arg; + } tmo; +#endif /* LWIP_TCPIP_TIMEOUT && LWIP_TIMERS */ + } msg; +}; + +#ifdef __cplusplus +} +#endif + +#endif /* !NO_SYS */ + +#endif /* LWIP_HDR_TCPIP_PRIV_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/prot/autoip.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/prot/autoip.h new file mode 100644 index 0000000000000000000000000000000000000000..fd3af8a9fc5f0de8ee179a2e49cdb1bc82c3d140 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/prot/autoip.h @@ -0,0 +1,78 @@ +/** + * @file + * AutoIP protocol definitions + */ + +/* + * + * Copyright (c) 2007 Dominik Spies + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * Author: Dominik Spies + * + * This is a AutoIP implementation for the lwIP TCP/IP stack. It aims to conform + * with RFC 3927. + * + */ + +#ifndef LWIP_HDR_PROT_AUTOIP_H +#define LWIP_HDR_PROT_AUTOIP_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* 169.254.0.0 */ +#define AUTOIP_NET 0xA9FE0000 +/* 169.254.1.0 */ +#define AUTOIP_RANGE_START (AUTOIP_NET | 0x0100) +/* 169.254.254.255 */ +#define AUTOIP_RANGE_END (AUTOIP_NET | 0xFEFF) + +/* RFC 3927 Constants */ +#define PROBE_WAIT 1 /* second (initial random delay) */ +#define PROBE_MIN 1 /* second (minimum delay till repeated probe) */ +#define PROBE_MAX 2 /* seconds (maximum delay till repeated probe) */ +#define PROBE_NUM 3 /* (number of probe packets) */ +#define ANNOUNCE_NUM 2 /* (number of announcement packets) */ +#define ANNOUNCE_INTERVAL 2 /* seconds (time between announcement packets) */ +#define ANNOUNCE_WAIT 2 /* seconds (delay before announcing) */ +#define MAX_CONFLICTS 10 /* (max conflicts before rate limiting) */ +#define RATE_LIMIT_INTERVAL 60 /* seconds (delay between successive attempts) */ +#define DEFEND_INTERVAL 10 /* seconds (min. wait between defensive ARPs) */ + +/* AutoIP client states */ +typedef enum { + AUTOIP_STATE_OFF = 0, + AUTOIP_STATE_PROBING = 1, + AUTOIP_STATE_ANNOUNCING = 2, + AUTOIP_STATE_BOUND = 3 +} autoip_state_enum_t; + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_PROT_AUTOIP_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/prot/dhcp.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/prot/dhcp.h new file mode 100644 index 0000000000000000000000000000000000000000..ab18dca31399b724197a625471eff41e28eefd9a --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/prot/dhcp.h @@ -0,0 +1,178 @@ +/** + * @file + * DHCP protocol definitions + */ + +/* + * Copyright (c) 2001-2004 Leon Woestenberg + * Copyright (c) 2001-2004 Axon Digital Design B.V., The Netherlands. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Leon Woestenberg + * + */ +#ifndef LWIP_HDR_PROT_DHCP_H +#define LWIP_HDR_PROT_DHCP_H + +#include "lwip/opt.h" +#include "lwip/arch.h" +#include "lwip/prot/ip4.h" + +#ifdef __cplusplus +extern "C" { +#endif + + /* DHCP message item offsets and length */ +#define DHCP_CHADDR_LEN 16U +#define DHCP_SNAME_OFS 44U +#define DHCP_SNAME_LEN 64U +#define DHCP_FILE_OFS 108U +#define DHCP_FILE_LEN 128U +#define DHCP_MSG_LEN 236U +#define DHCP_OPTIONS_OFS (DHCP_MSG_LEN + 4U) /* 4 byte: cookie */ + +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +/** minimum set of fields of any DHCP message */ +struct dhcp_msg +{ + PACK_STRUCT_FLD_8(u8_t op); + PACK_STRUCT_FLD_8(u8_t htype); + PACK_STRUCT_FLD_8(u8_t hlen); + PACK_STRUCT_FLD_8(u8_t hops); + PACK_STRUCT_FIELD(u32_t xid); + PACK_STRUCT_FIELD(u16_t secs); + PACK_STRUCT_FIELD(u16_t flags); + PACK_STRUCT_FLD_S(ip4_addr_p_t ciaddr); + PACK_STRUCT_FLD_S(ip4_addr_p_t yiaddr); + PACK_STRUCT_FLD_S(ip4_addr_p_t siaddr); + PACK_STRUCT_FLD_S(ip4_addr_p_t giaddr); + PACK_STRUCT_FLD_8(u8_t chaddr[DHCP_CHADDR_LEN]); + PACK_STRUCT_FLD_8(u8_t sname[DHCP_SNAME_LEN]); + PACK_STRUCT_FLD_8(u8_t file[DHCP_FILE_LEN]); + PACK_STRUCT_FIELD(u32_t cookie); +#define DHCP_MIN_OPTIONS_LEN 68U +/** make sure user does not configure this too small */ +#if ((defined(DHCP_OPTIONS_LEN)) && (DHCP_OPTIONS_LEN < DHCP_MIN_OPTIONS_LEN)) +# undef DHCP_OPTIONS_LEN +#endif +/** allow this to be configured in lwipopts.h, but not too small */ +#if (!defined(DHCP_OPTIONS_LEN)) +/** set this to be sufficient for your options in outgoing DHCP msgs */ +# define DHCP_OPTIONS_LEN DHCP_MIN_OPTIONS_LEN +#endif + PACK_STRUCT_FLD_8(u8_t options[DHCP_OPTIONS_LEN]); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + + +/* DHCP client states */ +typedef enum { + DHCP_STATE_OFF = 0, + DHCP_STATE_REQUESTING = 1, + DHCP_STATE_INIT = 2, + DHCP_STATE_REBOOTING = 3, + DHCP_STATE_REBINDING = 4, + DHCP_STATE_RENEWING = 5, + DHCP_STATE_SELECTING = 6, + DHCP_STATE_INFORMING = 7, + DHCP_STATE_CHECKING = 8, + DHCP_STATE_PERMANENT = 9, /* not yet implemented */ + DHCP_STATE_BOUND = 10, + DHCP_STATE_RELEASING = 11, /* not yet implemented */ + DHCP_STATE_BACKING_OFF = 12 +} dhcp_state_enum_t; + +/* DHCP op codes */ +#define DHCP_BOOTREQUEST 1 +#define DHCP_BOOTREPLY 2 + +/* DHCP message types */ +#define DHCP_DISCOVER 1 +#define DHCP_OFFER 2 +#define DHCP_REQUEST 3 +#define DHCP_DECLINE 4 +#define DHCP_ACK 5 +#define DHCP_NAK 6 +#define DHCP_RELEASE 7 +#define DHCP_INFORM 8 + +#define DHCP_MAGIC_COOKIE 0x63825363UL + +/* This is a list of options for BOOTP and DHCP, see RFC 2132 for descriptions */ + +/* BootP options */ +#define DHCP_OPTION_PAD 0 +#define DHCP_OPTION_SUBNET_MASK 1 /* RFC 2132 3.3 */ +#define DHCP_OPTION_ROUTER 3 +#define DHCP_OPTION_DNS_SERVER 6 +#define DHCP_OPTION_HOSTNAME 12 +#define DHCP_OPTION_IP_TTL 23 +#define DHCP_OPTION_MTU 26 +#define DHCP_OPTION_BROADCAST 28 +#define DHCP_OPTION_TCP_TTL 37 +#define DHCP_OPTION_NTP 42 +#define DHCP_OPTION_END 255 + +/* DHCP options */ +#define DHCP_OPTION_REQUESTED_IP 50 /* RFC 2132 9.1, requested IP address */ +#define DHCP_OPTION_LEASE_TIME 51 /* RFC 2132 9.2, time in seconds, in 4 bytes */ +#define DHCP_OPTION_OVERLOAD 52 /* RFC2132 9.3, use file and/or sname field for options */ + +#define DHCP_OPTION_MESSAGE_TYPE 53 /* RFC 2132 9.6, important for DHCP */ +#define DHCP_OPTION_MESSAGE_TYPE_LEN 1 + +#define DHCP_OPTION_SERVER_ID 54 /* RFC 2132 9.7, server IP address */ +#define DHCP_OPTION_PARAMETER_REQUEST_LIST 55 /* RFC 2132 9.8, requested option types */ + +#define DHCP_OPTION_MAX_MSG_SIZE 57 /* RFC 2132 9.10, message size accepted >= 576 */ +#define DHCP_OPTION_MAX_MSG_SIZE_LEN 2 + +#define DHCP_OPTION_T1 58 /* T1 renewal time */ +#define DHCP_OPTION_T2 59 /* T2 rebinding time */ +#define DHCP_OPTION_US 60 +#define DHCP_OPTION_CLIENT_ID 61 +#define DHCP_OPTION_TFTP_SERVERNAME 66 +#define DHCP_OPTION_BOOTFILE 67 + +/* possible combinations of overloading the file and sname fields with options */ +#define DHCP_OVERLOAD_NONE 0 +#define DHCP_OVERLOAD_FILE 1 +#define DHCP_OVERLOAD_SNAME 2 +#define DHCP_OVERLOAD_SNAME_FILE 3 + + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_PROT_DHCP_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/prot/dhcp6.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/prot/dhcp6.h new file mode 100644 index 0000000000000000000000000000000000000000..0754c91b9b86d434d5262cfb070b61cb4ef0faf3 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/prot/dhcp6.h @@ -0,0 +1,138 @@ +/** + * @file + * DHCPv6 protocol definitions + */ + +/* + * Copyright (c) 2017 Simon Goldschmidt + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Simon Goldschmidt + * + */ +#ifndef LWIP_HDR_PROT_DHCP6_H +#define LWIP_HDR_PROT_DHCP6_H + +#include "lwip/opt.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define DHCP6_CLIENT_PORT 546 +#define DHCP6_SERVER_PORT 547 + + + /* DHCPv6 message item offsets and length */ +#define DHCP6_TRANSACTION_ID_LEN 3 + +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +/** minimum set of fields of any DHCPv6 message */ +struct dhcp6_msg +{ + PACK_STRUCT_FLD_8(u8_t msgtype); + PACK_STRUCT_FLD_8(u8_t transaction_id[DHCP6_TRANSACTION_ID_LEN]); + /* options follow */ +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + + +/* DHCP6 client states */ +typedef enum { + DHCP6_STATE_OFF = 0, + DHCP6_STATE_STATELESS_IDLE = 1, + DHCP6_STATE_REQUESTING_CONFIG = 2 +} dhcp6_state_enum_t; + +/* DHCPv6 message types */ +#define DHCP6_SOLICIT 1 +#define DHCP6_ADVERTISE 2 +#define DHCP6_REQUEST 3 +#define DHCP6_CONFIRM 4 +#define DHCP6_RENEW 5 +#define DHCP6_REBIND 6 +#define DHCP6_REPLY 7 +#define DHCP6_RELEASE 8 +#define DHCP6_DECLINE 9 +#define DHCP6_RECONFIGURE 10 +#define DHCP6_INFOREQUEST 11 +#define DHCP6_RELAYFORW 12 +#define DHCP6_RELAYREPL 13 +/* More message types see https://www.iana.org/assignments/dhcpv6-parameters/dhcpv6-parameters.xhtml */ + +/** DHCPv6 status codes */ +#define DHCP6_STATUS_SUCCESS 0 /* Success. */ +#define DHCP6_STATUS_UNSPECFAIL 1 /* Failure, reason unspecified; this status code is sent by either a client or a server to indicate a failure not explicitly specified in this document. */ +#define DHCP6_STATUS_NOADDRSAVAIL 2 /* Server has no addresses available to assign to the IA(s). */ +#define DHCP6_STATUS_NOBINDING 3 /* Client record (binding) unavailable. */ +#define DHCP6_STATUS_NOTONLINK 4 /* The prefix for the address is not appropriate for the link to which the client is attached. */ +#define DHCP6_STATUS_USEMULTICAST 5 /* Sent by a server to a client to force the client to send messages to the server using the All_DHCP_Relay_Agents_and_Servers address. */ +/* More status codes see https://www.iana.org/assignments/dhcpv6-parameters/dhcpv6-parameters.xhtml */ + +/** DHCPv6 DUID types */ +#define DHCP6_DUID_LLT 1 /* LLT: Link-layer Address Plus Time */ +#define DHCP6_DUID_EN 2 /* EN: Enterprise number */ +#define DHCP6_DUID_LL 3 /* LL: Link-layer Address */ +#define DHCP6_DUID_UUID 4 /* UUID (RFC 6355) */ + +/* DHCPv6 options */ +#define DHCP6_OPTION_CLIENTID 1 +#define DHCP6_OPTION_SERVERID 2 +#define DHCP6_OPTION_IA_NA 3 +#define DHCP6_OPTION_IA_TA 4 +#define DHCP6_OPTION_IAADDR 5 +#define DHCP6_OPTION_ORO 6 +#define DHCP6_OPTION_PREFERENCE 7 +#define DHCP6_OPTION_ELAPSED_TIME 8 +#define DHCP6_OPTION_RELAY_MSG 9 +#define DHCP6_OPTION_AUTH 11 +#define DHCP6_OPTION_UNICAST 12 +#define DHCP6_OPTION_STATUS_CODE 13 +#define DHCP6_OPTION_RAPID_COMMIT 14 +#define DHCP6_OPTION_USER_CLASS 15 +#define DHCP6_OPTION_VENDOR_CLASS 16 +#define DHCP6_OPTION_VENDOR_OPTS 17 +#define DHCP6_OPTION_INTERFACE_ID 18 +#define DHCP6_OPTION_RECONF_MSG 19 +#define DHCP6_OPTION_RECONF_ACCEPT 20 +/* More options see https://www.iana.org/assignments/dhcpv6-parameters/dhcpv6-parameters.xhtml */ +#define DHCP6_OPTION_DNS_SERVERS 23 /* RFC 3646 */ +#define DHCP6_OPTION_DOMAIN_LIST 24 /* RFC 3646 */ +#define DHCP6_OPTION_SNTP_SERVERS 31 /* RFC 4075 */ + + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_PROT_DHCP6_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/prot/dns.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/prot/dns.h new file mode 100644 index 0000000000000000000000000000000000000000..94782d6e9c1e2c330174d14456a360e32c6c3e85 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/prot/dns.h @@ -0,0 +1,140 @@ +/** + * @file + * DNS - host name to IP address resolver. + */ + +/* + * Port to lwIP from uIP + * by Jim Pettinato April 2007 + * + * security fixes and more by Simon Goldschmidt + * + * uIP version Copyright (c) 2002-2003, Adam Dunkels. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef LWIP_HDR_PROT_DNS_H +#define LWIP_HDR_PROT_DNS_H + +#include "lwip/arch.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** DNS server port address */ +#ifndef DNS_SERVER_PORT +#define DNS_SERVER_PORT 53 +#endif + +/* DNS field TYPE used for "Resource Records" */ +#define DNS_RRTYPE_A 1 /* a host address */ +#define DNS_RRTYPE_NS 2 /* an authoritative name server */ +#define DNS_RRTYPE_MD 3 /* a mail destination (Obsolete - use MX) */ +#define DNS_RRTYPE_MF 4 /* a mail forwarder (Obsolete - use MX) */ +#define DNS_RRTYPE_CNAME 5 /* the canonical name for an alias */ +#define DNS_RRTYPE_SOA 6 /* marks the start of a zone of authority */ +#define DNS_RRTYPE_MB 7 /* a mailbox domain name (EXPERIMENTAL) */ +#define DNS_RRTYPE_MG 8 /* a mail group member (EXPERIMENTAL) */ +#define DNS_RRTYPE_MR 9 /* a mail rename domain name (EXPERIMENTAL) */ +#define DNS_RRTYPE_NULL 10 /* a null RR (EXPERIMENTAL) */ +#define DNS_RRTYPE_WKS 11 /* a well known service description */ +#define DNS_RRTYPE_PTR 12 /* a domain name pointer */ +#define DNS_RRTYPE_HINFO 13 /* host information */ +#define DNS_RRTYPE_MINFO 14 /* mailbox or mail list information */ +#define DNS_RRTYPE_MX 15 /* mail exchange */ +#define DNS_RRTYPE_TXT 16 /* text strings */ +#define DNS_RRTYPE_AAAA 28 /* IPv6 address */ +#define DNS_RRTYPE_SRV 33 /* service location */ +#define DNS_RRTYPE_ANY 255 /* any type */ + +/* DNS field CLASS used for "Resource Records" */ +#define DNS_RRCLASS_IN 1 /* the Internet */ +#define DNS_RRCLASS_CS 2 /* the CSNET class (Obsolete - used only for examples in some obsolete RFCs) */ +#define DNS_RRCLASS_CH 3 /* the CHAOS class */ +#define DNS_RRCLASS_HS 4 /* Hesiod [Dyer 87] */ +#define DNS_RRCLASS_ANY 255 /* any class */ +#define DNS_RRCLASS_FLUSH 0x800 /* Flush bit */ + +/* DNS protocol flags */ +#define DNS_FLAG1_RESPONSE 0x80 +#define DNS_FLAG1_OPCODE_STATUS 0x10 +#define DNS_FLAG1_OPCODE_INVERSE 0x08 +#define DNS_FLAG1_OPCODE_STANDARD 0x00 +#define DNS_FLAG1_AUTHORATIVE 0x04 +#define DNS_FLAG1_TRUNC 0x02 +#define DNS_FLAG1_RD 0x01 +#define DNS_FLAG2_RA 0x80 +#define DNS_FLAG2_ERR_MASK 0x0f +#define DNS_FLAG2_ERR_NONE 0x00 +#define DNS_FLAG2_ERR_NAME 0x03 + +#define DNS_HDR_GET_OPCODE(hdr) ((((hdr)->flags1) >> 3) & 0xF) + +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +/** DNS message header */ +struct dns_hdr { + PACK_STRUCT_FIELD(u16_t id); + PACK_STRUCT_FLD_8(u8_t flags1); + PACK_STRUCT_FLD_8(u8_t flags2); + PACK_STRUCT_FIELD(u16_t numquestions); + PACK_STRUCT_FIELD(u16_t numanswers); + PACK_STRUCT_FIELD(u16_t numauthrr); + PACK_STRUCT_FIELD(u16_t numextrarr); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif +#define SIZEOF_DNS_HDR 12 + + +/* Multicast DNS definitions */ + +/** UDP port for multicast DNS queries */ +#ifndef DNS_MQUERY_PORT +#define DNS_MQUERY_PORT 5353 +#endif + +/* IPv4 group for multicast DNS queries: 224.0.0.251 */ +#ifndef DNS_MQUERY_IPV4_GROUP_INIT +#define DNS_MQUERY_IPV4_GROUP_INIT IPADDR4_INIT_BYTES(224,0,0,251) +#endif + +/* IPv6 group for multicast DNS queries: FF02::FB */ +#ifndef DNS_MQUERY_IPV6_GROUP_INIT +#define DNS_MQUERY_IPV6_GROUP_INIT IPADDR6_INIT_HOST(0xFF020000,0,0,0xFB) +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_PROT_DNS_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/prot/etharp.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/prot/etharp.h new file mode 100644 index 0000000000000000000000000000000000000000..811c2284171176c8905f67ea37b22f4ae3c8cd1c --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/prot/etharp.h @@ -0,0 +1,114 @@ +/** + * @file + * ARP protocol definitions + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef LWIP_HDR_PROT_ETHARP_H +#define LWIP_HDR_PROT_ETHARP_H + +#include "lwip/arch.h" +#include "lwip/prot/ethernet.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef ETHARP_HWADDR_LEN +#define ETHARP_HWADDR_LEN ETH_HWADDR_LEN +#endif + +/** + * struct ip4_addr_wordaligned is used in the definition of the ARP packet format in + * order to support compilers that don't have structure packing. + */ +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct ip4_addr_wordaligned { + PACK_STRUCT_FIELD(u16_t addrw[2]); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +/** MEMCPY-like copying of IP addresses where addresses are known to be + * 16-bit-aligned if the port is correctly configured (so a port could define + * this to copying 2 u16_t's) - no NULL-pointer-checking needed. */ +#ifndef IPADDR_WORDALIGNED_COPY_TO_IP4_ADDR_T +#define IPADDR_WORDALIGNED_COPY_TO_IP4_ADDR_T(dest, src) SMEMCPY(dest, src, sizeof(ip4_addr_t)) +#endif + + /** MEMCPY-like copying of IP addresses where addresses are known to be + * 16-bit-aligned if the port is correctly configured (so a port could define + * this to copying 2 u16_t's) - no NULL-pointer-checking needed. */ +#ifndef IPADDR_WORDALIGNED_COPY_FROM_IP4_ADDR_T +#define IPADDR_WORDALIGNED_COPY_FROM_IP4_ADDR_T(dest, src) SMEMCPY(dest, src, sizeof(ip4_addr_t)) +#endif + +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +/** the ARP message, see RFC 826 ("Packet format") */ +struct etharp_hdr { + PACK_STRUCT_FIELD(u16_t hwtype); + PACK_STRUCT_FIELD(u16_t proto); + PACK_STRUCT_FLD_8(u8_t hwlen); + PACK_STRUCT_FLD_8(u8_t protolen); + PACK_STRUCT_FIELD(u16_t opcode); + PACK_STRUCT_FLD_S(struct eth_addr shwaddr); + PACK_STRUCT_FLD_S(struct ip4_addr_wordaligned sipaddr); + PACK_STRUCT_FLD_S(struct eth_addr dhwaddr); + PACK_STRUCT_FLD_S(struct ip4_addr_wordaligned dipaddr); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +#define SIZEOF_ETHARP_HDR 28 + +/* ARP message types (opcodes) */ +enum etharp_opcode { + ARP_REQUEST = 1, + ARP_REPLY = 2 +}; + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_PROT_ETHARP_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/prot/ethernet.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/prot/ethernet.h new file mode 100644 index 0000000000000000000000000000000000000000..309e57465d4733b40616c4b5e09f82c9a4ddfb11 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/prot/ethernet.h @@ -0,0 +1,125 @@ +/** + * @file + * Ethernet protocol definitions + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef LWIP_HDR_PROT_ETHERNET_H +#define LWIP_HDR_PROT_ETHERNET_H + +#include "lwip/arch.h" +#include "lwip/prot/ieee.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef ETH_HWADDR_LEN +#ifdef ETHARP_HWADDR_LEN +#define ETH_HWADDR_LEN ETHARP_HWADDR_LEN /* compatibility mode */ +#else +#define ETH_HWADDR_LEN 6 +#endif +#endif + +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +/** An Ethernet MAC address */ +struct eth_addr { + PACK_STRUCT_FLD_8(u8_t addr[ETH_HWADDR_LEN]); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +/** Initialize a struct eth_addr with its 6 bytes (takes care of correct braces) */ +#define ETH_ADDR(b0, b1, b2, b3, b4, b5) {{b0, b1, b2, b3, b4, b5}} + +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +/** Ethernet header */ +struct eth_hdr { +#if ETH_PAD_SIZE + PACK_STRUCT_FLD_8(u8_t padding[ETH_PAD_SIZE]); +#endif + PACK_STRUCT_FLD_S(struct eth_addr dest); + PACK_STRUCT_FLD_S(struct eth_addr src); + PACK_STRUCT_FIELD(u16_t type); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +#define SIZEOF_ETH_HDR (14 + ETH_PAD_SIZE) + +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +/** VLAN header inserted between ethernet header and payload + * if 'type' in ethernet header is ETHTYPE_VLAN. + * See IEEE802.Q */ +struct eth_vlan_hdr { + PACK_STRUCT_FIELD(u16_t prio_vid); + PACK_STRUCT_FIELD(u16_t tpid); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +#define SIZEOF_VLAN_HDR 4 +#define VLAN_ID(vlan_hdr) (lwip_htons((vlan_hdr)->prio_vid) & 0xFFF) + +/** The 24-bit IANA IPv4-multicast OUI is 01-00-5e: */ +#define LL_IP4_MULTICAST_ADDR_0 0x01 +#define LL_IP4_MULTICAST_ADDR_1 0x00 +#define LL_IP4_MULTICAST_ADDR_2 0x5e + +/** IPv6 multicast uses this prefix */ +#define LL_IP6_MULTICAST_ADDR_0 0x33 +#define LL_IP6_MULTICAST_ADDR_1 0x33 + +#define eth_addr_cmp(addr1, addr2) (memcmp((addr1)->addr, (addr2)->addr, ETH_HWADDR_LEN) == 0) + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_PROT_ETHERNET_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/prot/iana.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/prot/iana.h new file mode 100644 index 0000000000000000000000000000000000000000..32890cccd3f1d687316af647ce5683dbcdc377f1 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/prot/iana.h @@ -0,0 +1,97 @@ +/** + * @file + * IANA assigned numbers (RFC 1700 and successors) + * + * @defgroup iana IANA assigned numbers + * @ingroup infrastructure + */ + +/* + * Copyright (c) 2017 Dirk Ziegelmeier. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Dirk Ziegelmeier + * + */ + +#ifndef LWIP_HDR_PROT_IANA_H +#define LWIP_HDR_PROT_IANA_H + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @ingroup iana + * Hardware types + */ +enum lwip_iana_hwtype { + /** Ethernet */ + LWIP_IANA_HWTYPE_ETHERNET = 1 +}; + +/** + * @ingroup iana + * Port numbers + * https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.txt + */ +enum lwip_iana_port_number { + /** SMTP */ + LWIP_IANA_PORT_SMTP = 25, + /** DHCP server */ + LWIP_IANA_PORT_DHCP_SERVER = 67, + /** DHCP client */ + LWIP_IANA_PORT_DHCP_CLIENT = 68, + /** TFTP */ + LWIP_IANA_PORT_TFTP = 69, + /** HTTP */ + LWIP_IANA_PORT_HTTP = 80, + /** SNTP */ + LWIP_IANA_PORT_SNTP = 123, + /** NETBIOS */ + LWIP_IANA_PORT_NETBIOS = 137, + /** SNMP */ + LWIP_IANA_PORT_SNMP = 161, + /** SNMP traps */ + LWIP_IANA_PORT_SNMP_TRAP = 162, + /** HTTPS */ + LWIP_IANA_PORT_HTTPS = 443, + /** SMTPS */ + LWIP_IANA_PORT_SMTPS = 465, + /** MQTT */ + LWIP_IANA_PORT_MQTT = 1883, + /** MDNS */ + LWIP_IANA_PORT_MDNS = 5353, + /** Secure MQTT */ + LWIP_IANA_PORT_SECURE_MQTT = 8883 +}; + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_PROT_IANA_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/prot/icmp.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/prot/icmp.h new file mode 100644 index 0000000000000000000000000000000000000000..7d19385c7296eb86e3957ff851372ad60b90e8d8 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/prot/icmp.h @@ -0,0 +1,91 @@ +/** + * @file + * ICMP protocol definitions + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef LWIP_HDR_PROT_ICMP_H +#define LWIP_HDR_PROT_ICMP_H + +#include "lwip/arch.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define ICMP_ER 0 /* echo reply */ +#define ICMP_DUR 3 /* destination unreachable */ +#define ICMP_SQ 4 /* source quench */ +#define ICMP_RD 5 /* redirect */ +#define ICMP_ECHO 8 /* echo */ +#define ICMP_TE 11 /* time exceeded */ +#define ICMP_PP 12 /* parameter problem */ +#define ICMP_TS 13 /* timestamp */ +#define ICMP_TSR 14 /* timestamp reply */ +#define ICMP_IRQ 15 /* information request */ +#define ICMP_IR 16 /* information reply */ +#define ICMP_AM 17 /* address mask request */ +#define ICMP_AMR 18 /* address mask reply */ + +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +/** This is the standard ICMP header only that the u32_t data + * is split to two u16_t like ICMP echo needs it. + * This header is also used for other ICMP types that do not + * use the data part. + */ +PACK_STRUCT_BEGIN +struct icmp_echo_hdr { + PACK_STRUCT_FLD_8(u8_t type); + PACK_STRUCT_FLD_8(u8_t code); + PACK_STRUCT_FIELD(u16_t chksum); + PACK_STRUCT_FIELD(u16_t id); + PACK_STRUCT_FIELD(u16_t seqno); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +/* Compatibility defines, old versions used to combine type and code to an u16_t */ +#define ICMPH_TYPE(hdr) ((hdr)->type) +#define ICMPH_CODE(hdr) ((hdr)->code) +#define ICMPH_TYPE_SET(hdr, t) ((hdr)->type = (t)) +#define ICMPH_CODE_SET(hdr, c) ((hdr)->code = (c)) + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_PROT_ICMP_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/prot/icmp6.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/prot/icmp6.h new file mode 100644 index 0000000000000000000000000000000000000000..3461120421e44a4c8906c7c28d457d31eb53b44a --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/prot/icmp6.h @@ -0,0 +1,170 @@ +/** + * @file + * ICMP6 protocol definitions + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef LWIP_HDR_PROT_ICMP6_H +#define LWIP_HDR_PROT_ICMP6_H + +#include "lwip/arch.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** ICMP type */ +enum icmp6_type { + /** Destination unreachable */ + ICMP6_TYPE_DUR = 1, + /** Packet too big */ + ICMP6_TYPE_PTB = 2, + /** Time exceeded */ + ICMP6_TYPE_TE = 3, + /** Parameter problem */ + ICMP6_TYPE_PP = 4, + /** Private experimentation */ + ICMP6_TYPE_PE1 = 100, + /** Private experimentation */ + ICMP6_TYPE_PE2 = 101, + /** Reserved for expansion of error messages */ + ICMP6_TYPE_RSV_ERR = 127, + + /** Echo request */ + ICMP6_TYPE_EREQ = 128, + /** Echo reply */ + ICMP6_TYPE_EREP = 129, + /** Multicast listener query */ + ICMP6_TYPE_MLQ = 130, + /** Multicast listener report */ + ICMP6_TYPE_MLR = 131, + /** Multicast listener done */ + ICMP6_TYPE_MLD = 132, + /** Router solicitation */ + ICMP6_TYPE_RS = 133, + /** Router advertisement */ + ICMP6_TYPE_RA = 134, + /** Neighbor solicitation */ + ICMP6_TYPE_NS = 135, + /** Neighbor advertisement */ + ICMP6_TYPE_NA = 136, + /** Redirect */ + ICMP6_TYPE_RD = 137, + /** Multicast router advertisement */ + ICMP6_TYPE_MRA = 151, + /** Multicast router solicitation */ + ICMP6_TYPE_MRS = 152, + /** Multicast router termination */ + ICMP6_TYPE_MRT = 153, + /** Private experimentation */ + ICMP6_TYPE_PE3 = 200, + /** Private experimentation */ + ICMP6_TYPE_PE4 = 201, + /** Reserved for expansion of informational messages */ + ICMP6_TYPE_RSV_INF = 255 +}; + +/** ICMP destination unreachable codes */ +enum icmp6_dur_code { + /** No route to destination */ + ICMP6_DUR_NO_ROUTE = 0, + /** Communication with destination administratively prohibited */ + ICMP6_DUR_PROHIBITED = 1, + /** Beyond scope of source address */ + ICMP6_DUR_SCOPE = 2, + /** Address unreachable */ + ICMP6_DUR_ADDRESS = 3, + /** Port unreachable */ + ICMP6_DUR_PORT = 4, + /** Source address failed ingress/egress policy */ + ICMP6_DUR_POLICY = 5, + /** Reject route to destination */ + ICMP6_DUR_REJECT_ROUTE = 6 +}; + +/** ICMP time exceeded codes */ +enum icmp6_te_code { + /** Hop limit exceeded in transit */ + ICMP6_TE_HL = 0, + /** Fragment reassembly time exceeded */ + ICMP6_TE_FRAG = 1 +}; + +/** ICMP parameter code */ +enum icmp6_pp_code { + /** Erroneous header field encountered */ + ICMP6_PP_FIELD = 0, + /** Unrecognized next header type encountered */ + ICMP6_PP_HEADER = 1, + /** Unrecognized IPv6 option encountered */ + ICMP6_PP_OPTION = 2 +}; + +/** This is the standard ICMP6 header. */ +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct icmp6_hdr { + PACK_STRUCT_FLD_8(u8_t type); + PACK_STRUCT_FLD_8(u8_t code); + PACK_STRUCT_FIELD(u16_t chksum); + PACK_STRUCT_FIELD(u32_t data); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +/** This is the ICMP6 header adapted for echo req/resp. */ +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct icmp6_echo_hdr { + PACK_STRUCT_FLD_8(u8_t type); + PACK_STRUCT_FLD_8(u8_t code); + PACK_STRUCT_FIELD(u16_t chksum); + PACK_STRUCT_FIELD(u16_t id); + PACK_STRUCT_FIELD(u16_t seqno); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_PROT_ICMP6_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/prot/ieee.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/prot/ieee.h new file mode 100644 index 0000000000000000000000000000000000000000..abbb9e31d1b0c8a0442a33a4eeb5c16100354df7 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/prot/ieee.h @@ -0,0 +1,91 @@ +/** + * @file + * IEEE assigned numbers + * + * @defgroup ieee IEEE assigned numbers + * @ingroup infrastructure + */ + +/* + * Copyright (c) 2017 Dirk Ziegelmeier. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Dirk Ziegelmeier + * + */ + +#ifndef LWIP_HDR_PROT_IEEE_H +#define LWIP_HDR_PROT_IEEE_H + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @ingroup ieee + * A list of often ethtypes (although lwIP does not use all of them). + */ +enum lwip_ieee_eth_type { + /** Internet protocol v4 */ + ETHTYPE_IP = 0x0800U, + /** Address resolution protocol */ + ETHTYPE_ARP = 0x0806U, + /** Wake on lan */ + ETHTYPE_WOL = 0x0842U, + /** RARP */ + ETHTYPE_RARP = 0x8035U, + /** Virtual local area network */ + ETHTYPE_VLAN = 0x8100U, + /** Internet protocol v6 */ + ETHTYPE_IPV6 = 0x86DDU, + /** PPP Over Ethernet Discovery Stage */ + ETHTYPE_PPPOEDISC = 0x8863U, + /** PPP Over Ethernet Session Stage */ + ETHTYPE_PPPOE = 0x8864U, + /** Jumbo Frames */ + ETHTYPE_JUMBO = 0x8870U, + /** Process field network */ + ETHTYPE_PROFINET = 0x8892U, + /** Ethernet for control automation technology */ + ETHTYPE_ETHERCAT = 0x88A4U, + /** Link layer discovery protocol */ + ETHTYPE_LLDP = 0x88CCU, + /** Serial real-time communication system */ + ETHTYPE_SERCOS = 0x88CDU, + /** Media redundancy protocol */ + ETHTYPE_MRP = 0x88E3U, + /** Precision time protocol */ + ETHTYPE_PTP = 0x88F7U, + /** Q-in-Q, 802.1ad */ + ETHTYPE_QINQ = 0x9100U +}; + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_PROT_IEEE_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/prot/igmp.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/prot/igmp.h new file mode 100644 index 0000000000000000000000000000000000000000..46b81a9dd37ccac59009d4c0e4b8c5c8ff8390a3 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/prot/igmp.h @@ -0,0 +1,90 @@ +/** + * @file + * IGMP protocol definitions + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef LWIP_HDR_PROT_IGMP_H +#define LWIP_HDR_PROT_IGMP_H + +#include "lwip/arch.h" +#include "lwip/prot/ip4.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * IGMP constants + */ +#define IGMP_TTL 1 +#define IGMP_MINLEN 8 +#define ROUTER_ALERT 0x9404U +#define ROUTER_ALERTLEN 4 + +/* + * IGMP message types, including version number. + */ +#define IGMP_MEMB_QUERY 0x11 /* Membership query */ +#define IGMP_V1_MEMB_REPORT 0x12 /* Ver. 1 membership report */ +#define IGMP_V2_MEMB_REPORT 0x16 /* Ver. 2 membership report */ +#define IGMP_LEAVE_GROUP 0x17 /* Leave-group message */ + +/* Group membership states */ +#define IGMP_GROUP_NON_MEMBER 0 +#define IGMP_GROUP_DELAYING_MEMBER 1 +#define IGMP_GROUP_IDLE_MEMBER 2 + +/** + * IGMP packet format. + */ +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct igmp_msg { + PACK_STRUCT_FLD_8(u8_t igmp_msgtype); + PACK_STRUCT_FLD_8(u8_t igmp_maxresp); + PACK_STRUCT_FIELD(u16_t igmp_checksum); + PACK_STRUCT_FLD_S(ip4_addr_p_t igmp_group_address); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_PROT_IGMP_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/prot/ip.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/prot/ip.h new file mode 100644 index 0000000000000000000000000000000000000000..223158f5ace4a3e6a909703e3035b17bf059d9b3 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/prot/ip.h @@ -0,0 +1,59 @@ +/** + * @file + * IP protocol definitions + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef LWIP_HDR_PROT_IP_H +#define LWIP_HDR_PROT_IP_H + +#include "lwip/arch.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define IP_PROTO_ICMP 1 +#define IP_PROTO_IGMP 2 +#define IP_PROTO_UDP 17 +#define IP_PROTO_UDPLITE 136 +#define IP_PROTO_TCP 6 + +/** This operates on a void* by loading the first byte */ +#define IP_HDR_GET_VERSION(ptr) ((*(u8_t*)(ptr)) >> 4) + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_PROT_IP_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/prot/ip4.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/prot/ip4.h new file mode 100644 index 0000000000000000000000000000000000000000..93474611549b50f39c1cea240ab05a8543db156d --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/prot/ip4.h @@ -0,0 +1,131 @@ +/** + * @file + * IPv4 protocol definitions + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef LWIP_HDR_PROT_IP4_H +#define LWIP_HDR_PROT_IP4_H + +#include "lwip/arch.h" +#include "lwip/ip4_addr.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** This is the packed version of ip4_addr_t, + used in network headers that are itself packed */ +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct ip4_addr_packed { + PACK_STRUCT_FIELD(u32_t addr); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +typedef struct ip4_addr_packed ip4_addr_p_t; + +/* Size of the IPv4 header. Same as 'sizeof(struct ip_hdr)'. */ +#define IP_HLEN 20 +/* Maximum size of the IPv4 header with options. */ +#define IP_HLEN_MAX 60 + +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +/* The IPv4 header */ +struct ip_hdr { + /* version / header length */ + PACK_STRUCT_FLD_8(u8_t _v_hl); + /* type of service */ + PACK_STRUCT_FLD_8(u8_t _tos); + /* total length */ + PACK_STRUCT_FIELD(u16_t _len); + /* identification */ + PACK_STRUCT_FIELD(u16_t _id); + /* fragment offset field */ + PACK_STRUCT_FIELD(u16_t _offset); +#define IP_RF 0x8000U /* reserved fragment flag */ +#define IP_DF 0x4000U /* don't fragment flag */ +#define IP_MF 0x2000U /* more fragments flag */ +#define IP_OFFMASK 0x1fffU /* mask for fragmenting bits */ + /* time to live */ + PACK_STRUCT_FLD_8(u8_t _ttl); + /* protocol*/ + PACK_STRUCT_FLD_8(u8_t _proto); + /* checksum */ + PACK_STRUCT_FIELD(u16_t _chksum); + /* source and destination IP addresses */ + PACK_STRUCT_FLD_S(ip4_addr_p_t src); + PACK_STRUCT_FLD_S(ip4_addr_p_t dest); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +/* Macros to get struct ip_hdr fields: */ +#define IPH_V(hdr) ((hdr)->_v_hl >> 4) +#define IPH_HL(hdr) ((hdr)->_v_hl & 0x0f) +#define IPH_HL_BYTES(hdr) ((u8_t)(IPH_HL(hdr) * 4)) +#define IPH_TOS(hdr) ((hdr)->_tos) +#define IPH_LEN(hdr) ((hdr)->_len) +#define IPH_ID(hdr) ((hdr)->_id) +#define IPH_OFFSET(hdr) ((hdr)->_offset) +#define IPH_OFFSET_BYTES(hdr) ((u16_t)((lwip_ntohs(IPH_OFFSET(hdr)) & IP_OFFMASK) * 8U)) +#define IPH_TTL(hdr) ((hdr)->_ttl) +#define IPH_PROTO(hdr) ((hdr)->_proto) +#define IPH_CHKSUM(hdr) ((hdr)->_chksum) + +/* Macros to set struct ip_hdr fields: */ +#define IPH_VHL_SET(hdr, v, hl) (hdr)->_v_hl = (u8_t)((((v) << 4) | (hl))) +#define IPH_TOS_SET(hdr, tos) (hdr)->_tos = (tos) +#define IPH_LEN_SET(hdr, len) (hdr)->_len = (len) +#define IPH_ID_SET(hdr, id) (hdr)->_id = (id) +#define IPH_OFFSET_SET(hdr, off) (hdr)->_offset = (off) +#define IPH_TTL_SET(hdr, ttl) (hdr)->_ttl = (u8_t)(ttl) +#define IPH_PROTO_SET(hdr, proto) (hdr)->_proto = (u8_t)(proto) +#define IPH_CHKSUM_SET(hdr, chksum) (hdr)->_chksum = (chksum) + + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_PROT_IP4_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/prot/ip6.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/prot/ip6.h new file mode 100644 index 0000000000000000000000000000000000000000..0f6de455932bea18f3ccbc64a7968f01fc785abb --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/prot/ip6.h @@ -0,0 +1,233 @@ +/** + * @file + * IPv6 protocol definitions + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef LWIP_HDR_PROT_IP6_H +#define LWIP_HDR_PROT_IP6_H + +#include "lwip/arch.h" +#include "lwip/ip6_addr.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** This is the packed version of ip6_addr_t, + used in network headers that are itself packed */ +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct ip6_addr_packed { + PACK_STRUCT_FIELD(u32_t addr[4]); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif +typedef struct ip6_addr_packed ip6_addr_p_t; + +#define IP6_HLEN 40 + +#define IP6_NEXTH_HOPBYHOP 0 +#define IP6_NEXTH_TCP 6 +#define IP6_NEXTH_UDP 17 +#define IP6_NEXTH_ENCAPS 41 +#define IP6_NEXTH_ROUTING 43 +#define IP6_NEXTH_FRAGMENT 44 +#define IP6_NEXTH_ICMP6 58 +#define IP6_NEXTH_NONE 59 +#define IP6_NEXTH_DESTOPTS 60 +#define IP6_NEXTH_UDPLITE 136 + +/** The IPv6 header. */ +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct ip6_hdr { + /** version / traffic class / flow label */ + PACK_STRUCT_FIELD(u32_t _v_tc_fl); + /** payload length */ + PACK_STRUCT_FIELD(u16_t _plen); + /** next header */ + PACK_STRUCT_FLD_8(u8_t _nexth); + /** hop limit */ + PACK_STRUCT_FLD_8(u8_t _hoplim); + /** source and destination IP addresses */ + PACK_STRUCT_FLD_S(ip6_addr_p_t src); + PACK_STRUCT_FLD_S(ip6_addr_p_t dest); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif +#define IP6H_V(hdr) ((lwip_ntohl((hdr)->_v_tc_fl) >> 28) & 0x0f) +#define IP6H_TC(hdr) ((lwip_ntohl((hdr)->_v_tc_fl) >> 20) & 0xff) +#define IP6H_FL(hdr) (lwip_ntohl((hdr)->_v_tc_fl) & 0x000fffff) +#define IP6H_PLEN(hdr) (lwip_ntohs((hdr)->_plen)) +#define IP6H_NEXTH(hdr) ((hdr)->_nexth) +#define IP6H_NEXTH_P(hdr) ((u8_t *)(hdr) + 6) +#define IP6H_HOPLIM(hdr) ((hdr)->_hoplim) +#define IP6H_VTCFL_SET(hdr, v, tc, fl) (hdr)->_v_tc_fl = (lwip_htonl((((u32_t)(v)) << 28) | (((u32_t)(tc)) << 20) | (fl))) +#define IP6H_PLEN_SET(hdr, plen) (hdr)->_plen = lwip_htons(plen) +#define IP6H_NEXTH_SET(hdr, nexth) (hdr)->_nexth = (nexth) +#define IP6H_HOPLIM_SET(hdr, hl) (hdr)->_hoplim = (u8_t)(hl) + +/* ipv6 extended options header */ +#define IP6_PAD1_OPTION 0 +#define IP6_PADN_OPTION 1 +#define IP6_ROUTER_ALERT_OPTION 5 +#define IP6_JUMBO_OPTION 194 +#define IP6_HOME_ADDRESS_OPTION 201 +#define IP6_ROUTER_ALERT_DLEN 2 +#define IP6_ROUTER_ALERT_VALUE_MLD 0 + +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct ip6_opt_hdr { + /* router alert option type */ + PACK_STRUCT_FLD_8(u8_t _opt_type); + /* router alert option data len */ + PACK_STRUCT_FLD_8(u8_t _opt_dlen); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif +#define IP6_OPT_HLEN 2 +#define IP6_OPT_TYPE_ACTION(hdr) ((((hdr)->_opt_type) >> 6) & 0x3) +#define IP6_OPT_TYPE_CHANGE(hdr) ((((hdr)->_opt_type) >> 5) & 0x1) +#define IP6_OPT_TYPE(hdr) ((hdr)->_opt_type) +#define IP6_OPT_DLEN(hdr) ((hdr)->_opt_dlen) + +/* Hop-by-Hop header. */ +#define IP6_HBH_HLEN 2 + +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct ip6_hbh_hdr { + /* next header */ + PACK_STRUCT_FLD_8(u8_t _nexth); + /* header length in 8-octet units */ + PACK_STRUCT_FLD_8(u8_t _hlen); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif +#define IP6_HBH_NEXTH(hdr) ((hdr)->_nexth) + +/* Destination header. */ +#define IP6_DEST_HLEN 2 + +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct ip6_dest_hdr { + /* next header */ + PACK_STRUCT_FLD_8(u8_t _nexth); + /* header length in 8-octet units */ + PACK_STRUCT_FLD_8(u8_t _hlen); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif +#define IP6_DEST_NEXTH(hdr) ((hdr)->_nexth) + +/* Routing header */ +#define IP6_ROUT_TYPE2 2 +#define IP6_ROUT_RPL 3 + +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct ip6_rout_hdr { + /* next header */ + PACK_STRUCT_FLD_8(u8_t _nexth); + /* reserved */ + PACK_STRUCT_FLD_8(u8_t _hlen); + /* fragment offset */ + PACK_STRUCT_FIELD(u8_t _routing_type); + /* fragmented packet identification */ + PACK_STRUCT_FIELD(u8_t _segments_left); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif +#define IP6_ROUT_NEXTH(hdr) ((hdr)->_nexth) +#define IP6_ROUT_TYPE(hdr) ((hdr)->_routing_type) +#define IP6_ROUT_SEG_LEFT(hdr) ((hdr)->_segments_left) + +/* Fragment header. */ +#define IP6_FRAG_HLEN 8 +#define IP6_FRAG_OFFSET_MASK 0xfff8 +#define IP6_FRAG_MORE_FLAG 0x0001 + +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct ip6_frag_hdr { + /* next header */ + PACK_STRUCT_FLD_8(u8_t _nexth); + /* reserved */ + PACK_STRUCT_FLD_8(u8_t reserved); + /* fragment offset */ + PACK_STRUCT_FIELD(u16_t _fragment_offset); + /* fragmented packet identification */ + PACK_STRUCT_FIELD(u32_t _identification); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif +#define IP6_FRAG_NEXTH(hdr) ((hdr)->_nexth) +#define IP6_FRAG_MBIT(hdr) (lwip_ntohs((hdr)->_fragment_offset) & 0x1) +#define IP6_FRAG_ID(hdr) (lwip_ntohl((hdr)->_identification)) + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_PROT_IP6_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/prot/mld6.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/prot/mld6.h new file mode 100644 index 0000000000000000000000000000000000000000..71f1dcbdc5ba14f66dfab50cecf171ff4ed3f547 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/prot/mld6.h @@ -0,0 +1,71 @@ +/** + * @file + * MLD6 protocol definitions + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef LWIP_HDR_PROT_MLD6_H +#define LWIP_HDR_PROT_MLD6_H + +#include "lwip/arch.h" +#include "lwip/prot/ip6.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define MLD6_HBH_HLEN 8 +/** Multicast listener report/query/done message header. */ +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct mld_header { + PACK_STRUCT_FLD_8(u8_t type); + PACK_STRUCT_FLD_8(u8_t code); + PACK_STRUCT_FIELD(u16_t chksum); + PACK_STRUCT_FIELD(u16_t max_resp_delay); + PACK_STRUCT_FIELD(u16_t reserved); + PACK_STRUCT_FLD_S(ip6_addr_p_t multicast_address); + /* Options follow. */ +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_PROT_MLD6_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/prot/nd6.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/prot/nd6.h new file mode 100644 index 0000000000000000000000000000000000000000..c270d07c1385c1c6ab5c2275b0308d39d7465ec5 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/prot/nd6.h @@ -0,0 +1,274 @@ +/** + * @file + * ND6 protocol definitions + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef LWIP_HDR_PROT_ND6_H +#define LWIP_HDR_PROT_ND6_H + +#include "lwip/arch.h" +#include "lwip/ip6_addr.h" +#include "lwip/prot/ip6.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** Neighbor solicitation message header. */ +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct ns_header { + PACK_STRUCT_FLD_8(u8_t type); + PACK_STRUCT_FLD_8(u8_t code); + PACK_STRUCT_FIELD(u16_t chksum); + PACK_STRUCT_FIELD(u32_t reserved); + PACK_STRUCT_FLD_S(ip6_addr_p_t target_address); + /* Options follow. */ +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +/** Neighbor advertisement message header. */ +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct na_header { + PACK_STRUCT_FLD_8(u8_t type); + PACK_STRUCT_FLD_8(u8_t code); + PACK_STRUCT_FIELD(u16_t chksum); + PACK_STRUCT_FLD_8(u8_t flags); + PACK_STRUCT_FLD_8(u8_t reserved[3]); + PACK_STRUCT_FLD_S(ip6_addr_p_t target_address); + /* Options follow. */ +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif +#define ND6_FLAG_ROUTER (0x80) +#define ND6_FLAG_SOLICITED (0x40) +#define ND6_FLAG_OVERRIDE (0x20) + +/** Router solicitation message header. */ +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct rs_header { + PACK_STRUCT_FLD_8(u8_t type); + PACK_STRUCT_FLD_8(u8_t code); + PACK_STRUCT_FIELD(u16_t chksum); + PACK_STRUCT_FIELD(u32_t reserved); + /* Options follow. */ +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +/** Router advertisement message header. */ +#define ND6_RA_FLAG_MANAGED_ADDR_CONFIG (0x80) +#define ND6_RA_FLAG_OTHER_CONFIG (0x40) +#define ND6_RA_FLAG_HOME_AGENT (0x20) +#define ND6_RA_PREFERENCE_MASK (0x18) +#define ND6_RA_PREFERENCE_HIGH (0x08) +#define ND6_RA_PREFERENCE_MEDIUM (0x00) +#define ND6_RA_PREFERENCE_LOW (0x18) +#define ND6_RA_PREFERENCE_DISABLED (0x10) +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct ra_header { + PACK_STRUCT_FLD_8(u8_t type); + PACK_STRUCT_FLD_8(u8_t code); + PACK_STRUCT_FIELD(u16_t chksum); + PACK_STRUCT_FLD_8(u8_t current_hop_limit); + PACK_STRUCT_FLD_8(u8_t flags); + PACK_STRUCT_FIELD(u16_t router_lifetime); + PACK_STRUCT_FIELD(u32_t reachable_time); + PACK_STRUCT_FIELD(u32_t retrans_timer); + /* Options follow. */ +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +/** Redirect message header. */ +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct redirect_header { + PACK_STRUCT_FLD_8(u8_t type); + PACK_STRUCT_FLD_8(u8_t code); + PACK_STRUCT_FIELD(u16_t chksum); + PACK_STRUCT_FIELD(u32_t reserved); + PACK_STRUCT_FLD_S(ip6_addr_p_t target_address); + PACK_STRUCT_FLD_S(ip6_addr_p_t destination_address); + /* Options follow. */ +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +/** Link-layer address option. */ +#define ND6_OPTION_TYPE_SOURCE_LLADDR (0x01) +#define ND6_OPTION_TYPE_TARGET_LLADDR (0x02) +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct lladdr_option { + PACK_STRUCT_FLD_8(u8_t type); + PACK_STRUCT_FLD_8(u8_t length); + PACK_STRUCT_FLD_8(u8_t addr[NETIF_MAX_HWADDR_LEN]); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +/** Prefix information option. */ +#define ND6_OPTION_TYPE_PREFIX_INFO (0x03) +#define ND6_PREFIX_FLAG_ON_LINK (0x80) +#define ND6_PREFIX_FLAG_AUTONOMOUS (0x40) +#define ND6_PREFIX_FLAG_ROUTER_ADDRESS (0x20) +#define ND6_PREFIX_FLAG_SITE_PREFIX (0x10) +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct prefix_option { + PACK_STRUCT_FLD_8(u8_t type); + PACK_STRUCT_FLD_8(u8_t length); + PACK_STRUCT_FLD_8(u8_t prefix_length); + PACK_STRUCT_FLD_8(u8_t flags); + PACK_STRUCT_FIELD(u32_t valid_lifetime); + PACK_STRUCT_FIELD(u32_t preferred_lifetime); + PACK_STRUCT_FLD_8(u8_t reserved2[3]); + PACK_STRUCT_FLD_8(u8_t site_prefix_length); + PACK_STRUCT_FLD_S(ip6_addr_p_t prefix); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +/** Redirected header option. */ +#define ND6_OPTION_TYPE_REDIR_HDR (0x04) +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct redirected_header_option { + PACK_STRUCT_FLD_8(u8_t type); + PACK_STRUCT_FLD_8(u8_t length); + PACK_STRUCT_FLD_8(u8_t reserved[6]); + /* Portion of redirected packet follows. */ + /* PACK_STRUCT_FLD_8(u8_t redirected[8]); */ +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +/** MTU option. */ +#define ND6_OPTION_TYPE_MTU (0x05) +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct mtu_option { + PACK_STRUCT_FLD_8(u8_t type); + PACK_STRUCT_FLD_8(u8_t length); + PACK_STRUCT_FIELD(u16_t reserved); + PACK_STRUCT_FIELD(u32_t mtu); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +/** Route information option. */ +#define ND6_OPTION_TYPE_ROUTE_INFO (24) +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct route_option { + PACK_STRUCT_FLD_8(u8_t type); + PACK_STRUCT_FLD_8(u8_t length); + PACK_STRUCT_FLD_8(u8_t prefix_length); + PACK_STRUCT_FLD_8(u8_t preference); + PACK_STRUCT_FIELD(u32_t route_lifetime); + PACK_STRUCT_FLD_S(ip6_addr_p_t prefix); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +/** Recursive DNS Server Option. */ +#define ND6_OPTION_TYPE_RDNSS (25) +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct rdnss_option { + PACK_STRUCT_FLD_8(u8_t type); + PACK_STRUCT_FLD_8(u8_t length); + PACK_STRUCT_FIELD(u16_t reserved); + PACK_STRUCT_FIELD(u32_t lifetime); + PACK_STRUCT_FLD_S(ip6_addr_p_t rdnss_address[1]); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +#define SIZEOF_RDNSS_OPTION_BASE 8 /* size without addresses */ + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_PROT_ND6_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/prot/tcp.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/prot/tcp.h new file mode 100644 index 0000000000000000000000000000000000000000..c1d7de1faf36e09cc2c438e7950db6c5a5260e68 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/prot/tcp.h @@ -0,0 +1,100 @@ +/** + * @file + * TCP protocol definitions + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef LWIP_HDR_PROT_TCP_H +#define LWIP_HDR_PROT_TCP_H + +#include "lwip/arch.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Length of the TCP header, excluding options. */ +#define TCP_HLEN 20 + +/* Fields are (of course) in network byte order. + * Some fields are converted to host byte order in tcp_input(). + */ +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct tcp_hdr { + PACK_STRUCT_FIELD(u16_t src); + PACK_STRUCT_FIELD(u16_t dest); + PACK_STRUCT_FIELD(u32_t seqno); + PACK_STRUCT_FIELD(u32_t ackno); + PACK_STRUCT_FIELD(u16_t _hdrlen_rsvd_flags); + PACK_STRUCT_FIELD(u16_t wnd); + PACK_STRUCT_FIELD(u16_t chksum); + PACK_STRUCT_FIELD(u16_t urgp); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +/* TCP header flags bits */ +#define TCP_FIN 0x01U +#define TCP_SYN 0x02U +#define TCP_RST 0x04U +#define TCP_PSH 0x08U +#define TCP_ACK 0x10U +#define TCP_URG 0x20U +#define TCP_ECE 0x40U +#define TCP_CWR 0x80U +/* Valid TCP header flags */ +#define TCP_FLAGS 0x3fU + +#define TCP_MAX_OPTION_BYTES 40 + +#define TCPH_HDRLEN(phdr) ((u16_t)(lwip_ntohs((phdr)->_hdrlen_rsvd_flags) >> 12)) +#define TCPH_HDRLEN_BYTES(phdr) ((u8_t)(TCPH_HDRLEN(phdr) << 2)) +#define TCPH_FLAGS(phdr) ((u8_t)((lwip_ntohs((phdr)->_hdrlen_rsvd_flags) & TCP_FLAGS))) + +#define TCPH_HDRLEN_SET(phdr, len) (phdr)->_hdrlen_rsvd_flags = lwip_htons(((len) << 12) | TCPH_FLAGS(phdr)) +#define TCPH_FLAGS_SET(phdr, flags) (phdr)->_hdrlen_rsvd_flags = (((phdr)->_hdrlen_rsvd_flags & PP_HTONS(~TCP_FLAGS)) | lwip_htons(flags)) +#define TCPH_HDRLEN_FLAGS_SET(phdr, len, flags) (phdr)->_hdrlen_rsvd_flags = (u16_t)(lwip_htons((u16_t)((len) << 12) | (flags))) + +#define TCPH_SET_FLAG(phdr, flags ) (phdr)->_hdrlen_rsvd_flags = ((phdr)->_hdrlen_rsvd_flags | lwip_htons(flags)) +#define TCPH_UNSET_FLAG(phdr, flags) (phdr)->_hdrlen_rsvd_flags = ((phdr)->_hdrlen_rsvd_flags & ~lwip_htons(flags)) + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_PROT_TCP_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/prot/udp.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/prot/udp.h new file mode 100644 index 0000000000000000000000000000000000000000..664f19a3e7bd7bdc7b994dd022b6450066a5a836 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/prot/udp.h @@ -0,0 +1,68 @@ +/** + * @file + * UDP protocol definitions + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef LWIP_HDR_PROT_UDP_H +#define LWIP_HDR_PROT_UDP_H + +#include "lwip/arch.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define UDP_HLEN 8 + +/* Fields are (of course) in network byte order. */ +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct udp_hdr { + PACK_STRUCT_FIELD(u16_t src); + PACK_STRUCT_FIELD(u16_t dest); /* src/dest UDP ports */ + PACK_STRUCT_FIELD(u16_t len); + PACK_STRUCT_FIELD(u16_t chksum); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_PROT_UDP_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/raw.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/raw.h new file mode 100644 index 0000000000000000000000000000000000000000..b129bd3b993f552b45d132657a8bdf58bf35f5c4 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/raw.h @@ -0,0 +1,143 @@ +/** + * @file + * raw API (to be used from TCPIP thread)\n + * See also @ref raw_raw + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef LWIP_HDR_RAW_H +#define LWIP_HDR_RAW_H + +#include "lwip/opt.h" + +#if LWIP_RAW /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/pbuf.h" +#include "lwip/def.h" +#include "lwip/ip.h" +#include "lwip/ip_addr.h" +#include "lwip/ip6_addr.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define RAW_FLAGS_CONNECTED 0x01U +#define RAW_FLAGS_HDRINCL 0x02U +#define RAW_FLAGS_MULTICAST_LOOP 0x04U + +struct raw_pcb; + +/** Function prototype for raw pcb receive callback functions. + * @param arg user supplied argument (raw_pcb.recv_arg) + * @param pcb the raw_pcb which received data + * @param p the packet buffer that was received + * @param addr the remote IP address from which the packet was received + * @return 1 if the packet was 'eaten' (aka. deleted), + * 0 if the packet lives on + * If returning 1, the callback is responsible for freeing the pbuf + * if it's not used any more. + */ +typedef u8_t (*raw_recv_fn)(void *arg, struct raw_pcb *pcb, struct pbuf *p, + const ip_addr_t *addr); + +/** the RAW protocol control block */ +struct raw_pcb { + /* Common members of all PCB types */ + IP_PCB; + + struct raw_pcb *next; + + u8_t protocol; + u8_t flags; + +#if LWIP_MULTICAST_TX_OPTIONS + /** outgoing network interface for multicast packets, by interface index (if nonzero) */ + u8_t mcast_ifindex; + /** TTL for outgoing multicast packets */ + u8_t mcast_ttl; +#endif /* LWIP_MULTICAST_TX_OPTIONS */ + + /** receive callback function */ + raw_recv_fn recv; + /* user-supplied argument for the recv callback */ + void *recv_arg; +#if LWIP_IPV6 + /* fields for handling checksum computations as per RFC3542. */ + u16_t chksum_offset; + u8_t chksum_reqd; +#endif +}; + +/* The following functions is the application layer interface to the + RAW code. */ +struct raw_pcb * raw_new (u8_t proto); +struct raw_pcb * raw_new_ip_type(u8_t type, u8_t proto); +void raw_remove (struct raw_pcb *pcb); +err_t raw_bind (struct raw_pcb *pcb, const ip_addr_t *ipaddr); +void raw_bind_netif (struct raw_pcb *pcb, const struct netif *netif); +err_t raw_connect (struct raw_pcb *pcb, const ip_addr_t *ipaddr); +void raw_disconnect (struct raw_pcb *pcb); + +err_t raw_sendto (struct raw_pcb *pcb, struct pbuf *p, const ip_addr_t *ipaddr); +err_t raw_sendto_if_src(struct raw_pcb *pcb, struct pbuf *p, const ip_addr_t *dst_ip, struct netif *netif, const ip_addr_t *src_ip); +err_t raw_send (struct raw_pcb *pcb, struct pbuf *p); + +void raw_recv (struct raw_pcb *pcb, raw_recv_fn recv, void *recv_arg); + +#define raw_flags(pcb) ((pcb)->flags) +#define raw_setflags(pcb,f) ((pcb)->flags = (f)) + +#define raw_set_flags(pcb, set_flags) do { (pcb)->flags = (u8_t)((pcb)->flags | (set_flags)); } while(0) +#define raw_clear_flags(pcb, clr_flags) do { (pcb)->flags = (u8_t)((pcb)->flags & (u8_t)(~(clr_flags) & 0xff)); } while(0) +#define raw_is_flag_set(pcb, flag) (((pcb)->flags & (flag)) != 0) + +#define raw_init() /* Compatibility define, no init needed. */ + +/* for compatibility with older implementation */ +#define raw_new_ip6(proto) raw_new_ip_type(IPADDR_TYPE_V6, proto) + +#if LWIP_MULTICAST_TX_OPTIONS +#define raw_set_multicast_netif_index(pcb, idx) ((pcb)->mcast_ifindex = (idx)) +#define raw_get_multicast_netif_index(pcb) ((pcb)->mcast_ifindex) +#define raw_set_multicast_ttl(pcb, value) ((pcb)->mcast_ttl = (value)) +#define raw_get_multicast_ttl(pcb) ((pcb)->mcast_ttl) +#endif /* LWIP_MULTICAST_TX_OPTIONS */ + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_RAW */ + +#endif /* LWIP_HDR_RAW_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/sio.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/sio.h new file mode 100644 index 0000000000000000000000000000000000000000..7643e195697e2c212ac8de4df1f24d94677eb331 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/sio.h @@ -0,0 +1,142 @@ +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + */ + +/* + * This is the interface to the platform specific serial IO module + * It needs to be implemented by those platforms which need SLIP or PPP + */ + +#ifndef SIO_H +#define SIO_H + +#include "lwip/arch.h" +#include "lwip/opt.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* If you want to define sio_fd_t elsewhere or differently, + define this in your cc.h file. */ +#ifndef __sio_fd_t_defined +typedef void * sio_fd_t; +#endif + +/* The following functions can be defined to something else in your cc.h file + or be implemented in your custom sio.c file. */ + +#ifndef sio_open +/** + * Opens a serial device for communication. + * + * @param devnum device number + * @return handle to serial device if successful, NULL otherwise + */ +sio_fd_t sio_open(u8_t devnum); +#endif + +#ifndef sio_send +/** + * Sends a single character to the serial device. + * + * @param c character to send + * @param fd serial device handle + * + * @note This function will block until the character can be sent. + */ +void sio_send(u8_t c, sio_fd_t fd); +#endif + +#ifndef sio_recv +/** + * Receives a single character from the serial device. + * + * @param fd serial device handle + * + * @note This function will block until a character is received. + */ +u8_t sio_recv(sio_fd_t fd); +#endif + +#ifndef sio_read +/** + * Reads from the serial device. + * + * @param fd serial device handle + * @param data pointer to data buffer for receiving + * @param len maximum length (in bytes) of data to receive + * @return number of bytes actually received - may be 0 if aborted by sio_read_abort + * + * @note This function will block until data can be received. The blocking + * can be cancelled by calling sio_read_abort(). + */ +u32_t sio_read(sio_fd_t fd, u8_t *data, u32_t len); +#endif + +#ifndef sio_tryread +/** + * Tries to read from the serial device. Same as sio_read but returns + * immediately if no data is available and never blocks. + * + * @param fd serial device handle + * @param data pointer to data buffer for receiving + * @param len maximum length (in bytes) of data to receive + * @return number of bytes actually received + */ +u32_t sio_tryread(sio_fd_t fd, u8_t *data, u32_t len); +#endif + +#ifndef sio_write +/** + * Writes to the serial device. + * + * @param fd serial device handle + * @param data pointer to data to send + * @param len length (in bytes) of data to send + * @return number of bytes actually sent + * + * @note This function will block until all data can be sent. + */ +u32_t sio_write(sio_fd_t fd, u8_t *data, u32_t len); +#endif + +#ifndef sio_read_abort +/** + * Aborts a blocking sio_read() call. + * + * @param fd serial device handle + */ +void sio_read_abort(sio_fd_t fd); +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* SIO_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/snmp.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/snmp.h new file mode 100644 index 0000000000000000000000000000000000000000..8704d0b4d2955b9ac0d69c695b4ae9b1cce92a30 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/snmp.h @@ -0,0 +1,213 @@ +/** + * @file + * SNMP support API for implementing netifs and statitics for MIB2 + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Dirk Ziegelmeier + * + */ +#ifndef LWIP_HDR_SNMP_H +#define LWIP_HDR_SNMP_H + +#include "lwip/opt.h" +#include "lwip/ip_addr.h" + +#ifdef __cplusplus +extern "C" { +#endif + +struct udp_pcb; +struct netif; + +/** + * @defgroup netif_mib2 MIB2 statistics + * @ingroup netif + */ + +/* MIB2 statistics functions */ +#if MIB2_STATS /* don't build if not configured for use in lwipopts.h */ +/** + * @ingroup netif_mib2 + * @see RFC1213, "MIB-II, 6. Definitions" + */ +enum snmp_ifType { + snmp_ifType_other=1, /* none of the following */ + snmp_ifType_regular1822, + snmp_ifType_hdh1822, + snmp_ifType_ddn_x25, + snmp_ifType_rfc877_x25, + snmp_ifType_ethernet_csmacd, + snmp_ifType_iso88023_csmacd, + snmp_ifType_iso88024_tokenBus, + snmp_ifType_iso88025_tokenRing, + snmp_ifType_iso88026_man, + snmp_ifType_starLan, + snmp_ifType_proteon_10Mbit, + snmp_ifType_proteon_80Mbit, + snmp_ifType_hyperchannel, + snmp_ifType_fddi, + snmp_ifType_lapb, + snmp_ifType_sdlc, + snmp_ifType_ds1, /* T-1 */ + snmp_ifType_e1, /* european equiv. of T-1 */ + snmp_ifType_basicISDN, + snmp_ifType_primaryISDN, /* proprietary serial */ + snmp_ifType_propPointToPointSerial, + snmp_ifType_ppp, + snmp_ifType_softwareLoopback, + snmp_ifType_eon, /* CLNP over IP [11] */ + snmp_ifType_ethernet_3Mbit, + snmp_ifType_nsip, /* XNS over IP */ + snmp_ifType_slip, /* generic SLIP */ + snmp_ifType_ultra, /* ULTRA technologies */ + snmp_ifType_ds3, /* T-3 */ + snmp_ifType_sip, /* SMDS */ + snmp_ifType_frame_relay +}; + +/** This macro has a precision of ~49 days because sys_now returns u32_t. \#define your own if you want ~490 days. */ +#ifndef MIB2_COPY_SYSUPTIME_TO +#define MIB2_COPY_SYSUPTIME_TO(ptrToVal) (*(ptrToVal) = (sys_now() / 10)) +#endif + +/** + * @ingroup netif_mib2 + * Increment stats member for SNMP MIB2 stats (struct stats_mib2_netif_ctrs) + */ +#define MIB2_STATS_NETIF_INC(n, x) do { ++(n)->mib2_counters.x; } while(0) +/** + * @ingroup netif_mib2 + * Add value to stats member for SNMP MIB2 stats (struct stats_mib2_netif_ctrs) + */ +#define MIB2_STATS_NETIF_ADD(n, x, val) do { (n)->mib2_counters.x += (val); } while(0) + +/** + * @ingroup netif_mib2 + * Init MIB2 statistic counters in netif + * @param netif Netif to init + * @param type one of enum @ref snmp_ifType + * @param speed your link speed here (units: bits per second) + */ +#define MIB2_INIT_NETIF(netif, type, speed) do { \ + (netif)->link_type = (type); \ + (netif)->link_speed = (speed);\ + (netif)->ts = 0; \ + (netif)->mib2_counters.ifinoctets = 0; \ + (netif)->mib2_counters.ifinucastpkts = 0; \ + (netif)->mib2_counters.ifinnucastpkts = 0; \ + (netif)->mib2_counters.ifindiscards = 0; \ + (netif)->mib2_counters.ifinerrors = 0; \ + (netif)->mib2_counters.ifinunknownprotos = 0; \ + (netif)->mib2_counters.ifoutoctets = 0; \ + (netif)->mib2_counters.ifoutucastpkts = 0; \ + (netif)->mib2_counters.ifoutnucastpkts = 0; \ + (netif)->mib2_counters.ifoutdiscards = 0; \ + (netif)->mib2_counters.ifouterrors = 0; } while(0) +#else /* MIB2_STATS */ +#ifndef MIB2_COPY_SYSUPTIME_TO +#define MIB2_COPY_SYSUPTIME_TO(ptrToVal) +#endif +#define MIB2_INIT_NETIF(netif, type, speed) +#define MIB2_STATS_NETIF_INC(n, x) +#define MIB2_STATS_NETIF_ADD(n, x, val) +#endif /* MIB2_STATS */ + +/* LWIP MIB2 callbacks */ +#if LWIP_MIB2_CALLBACKS /* don't build if not configured for use in lwipopts.h */ +/* network interface */ +void mib2_netif_added(struct netif *ni); +void mib2_netif_removed(struct netif *ni); + +#if LWIP_IPV4 && LWIP_ARP +/* ARP (for atTable and ipNetToMediaTable) */ +void mib2_add_arp_entry(struct netif *ni, ip4_addr_t *ip); +void mib2_remove_arp_entry(struct netif *ni, ip4_addr_t *ip); +#else /* LWIP_IPV4 && LWIP_ARP */ +#define mib2_add_arp_entry(ni,ip) +#define mib2_remove_arp_entry(ni,ip) +#endif /* LWIP_IPV4 && LWIP_ARP */ + +/* IP */ +#if LWIP_IPV4 +void mib2_add_ip4(struct netif *ni); +void mib2_remove_ip4(struct netif *ni); +void mib2_add_route_ip4(u8_t dflt, struct netif *ni); +void mib2_remove_route_ip4(u8_t dflt, struct netif *ni); +#endif /* LWIP_IPV4 */ + +/* UDP */ +#if LWIP_UDP +void mib2_udp_bind(struct udp_pcb *pcb); +void mib2_udp_unbind(struct udp_pcb *pcb); +#endif /* LWIP_UDP */ + +#else /* LWIP_MIB2_CALLBACKS */ +/* LWIP_MIB2_CALLBACKS support not available */ +/* define everything to be empty */ + +/* network interface */ +#define mib2_netif_added(ni) +#define mib2_netif_removed(ni) + +/* ARP */ +#define mib2_add_arp_entry(ni,ip) +#define mib2_remove_arp_entry(ni,ip) + +/* IP */ +#define mib2_add_ip4(ni) +#define mib2_remove_ip4(ni) +#define mib2_add_route_ip4(dflt, ni) +#define mib2_remove_route_ip4(dflt, ni) + +/* UDP */ +#define mib2_udp_bind(pcb) +#define mib2_udp_unbind(pcb) +#endif /* LWIP_MIB2_CALLBACKS */ + +/* for source-code compatibility reasons only, can be removed (not used internally) */ +#define NETIF_INIT_SNMP MIB2_INIT_NETIF +#define snmp_add_ifinoctets(ni,value) MIB2_STATS_NETIF_ADD(ni, ifinoctets, value) +#define snmp_inc_ifinucastpkts(ni) MIB2_STATS_NETIF_INC(ni, ifinucastpkts) +#define snmp_inc_ifinnucastpkts(ni) MIB2_STATS_NETIF_INC(ni, ifinnucastpkts) +#define snmp_inc_ifindiscards(ni) MIB2_STATS_NETIF_INC(ni, ifindiscards) +#define snmp_inc_ifinerrors(ni) MIB2_STATS_NETIF_INC(ni, ifinerrors) +#define snmp_inc_ifinunknownprotos(ni) MIB2_STATS_NETIF_INC(ni, ifinunknownprotos) +#define snmp_add_ifoutoctets(ni,value) MIB2_STATS_NETIF_ADD(ni, ifoutoctets, value) +#define snmp_inc_ifoutucastpkts(ni) MIB2_STATS_NETIF_INC(ni, ifoutucastpkts) +#define snmp_inc_ifoutnucastpkts(ni) MIB2_STATS_NETIF_INC(ni, ifoutnucastpkts) +#define snmp_inc_ifoutdiscards(ni) MIB2_STATS_NETIF_INC(ni, ifoutdiscards) +#define snmp_inc_ifouterrors(ni) MIB2_STATS_NETIF_INC(ni, ifouterrors) + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_SNMP_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/sockets.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/sockets.h new file mode 100644 index 0000000000000000000000000000000000000000..d70d36c4d2f140d25d490fe9e94bf904082ac8e3 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/sockets.h @@ -0,0 +1,688 @@ +/** + * @file + * Socket API (to be used from non-TCPIP threads) + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + + +#ifndef LWIP_HDR_SOCKETS_H +#define LWIP_HDR_SOCKETS_H + +#include "lwip/opt.h" + +#if LWIP_SOCKET /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/ip_addr.h" +#include "lwip/netif.h" +#include "lwip/err.h" +#include "lwip/inet.h" +#include "lwip/errno.h" + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* If your port already typedef's sa_family_t, define SA_FAMILY_T_DEFINED + to prevent this code from redefining it. */ +#if !defined(sa_family_t) && !defined(SA_FAMILY_T_DEFINED) +typedef u8_t sa_family_t; +#endif +/* If your port already typedef's in_port_t, define IN_PORT_T_DEFINED + to prevent this code from redefining it. */ +#if !defined(in_port_t) && !defined(IN_PORT_T_DEFINED) +typedef u16_t in_port_t; +#endif + +#if LWIP_IPV4 +/* members are in network byte order */ +struct sockaddr_in { + u8_t sin_len; + sa_family_t sin_family; + in_port_t sin_port; + struct in_addr sin_addr; +#define SIN_ZERO_LEN 8 + char sin_zero[SIN_ZERO_LEN]; +}; +#endif /* LWIP_IPV4 */ + +#if LWIP_IPV6 +struct sockaddr_in6 { + u8_t sin6_len; /* length of this structure */ + sa_family_t sin6_family; /* AF_INET6 */ + in_port_t sin6_port; /* Transport layer port # */ + u32_t sin6_flowinfo; /* IPv6 flow information */ + struct in6_addr sin6_addr; /* IPv6 address */ + u32_t sin6_scope_id; /* Set of interfaces for scope */ +}; +#endif /* LWIP_IPV6 */ + +struct sockaddr { + u8_t sa_len; + sa_family_t sa_family; + char sa_data[14]; +}; + +struct sockaddr_storage { + u8_t s2_len; + sa_family_t ss_family; + char s2_data1[2]; + u32_t s2_data2[3]; +#if LWIP_IPV6 + u32_t s2_data3[3]; +#endif /* LWIP_IPV6 */ +}; + +/* If your port already typedef's socklen_t, define SOCKLEN_T_DEFINED + to prevent this code from redefining it. */ +#if !defined(socklen_t) && !defined(SOCKLEN_T_DEFINED) +typedef u32_t socklen_t; +#endif + +#if !defined IOV_MAX +#define IOV_MAX 0xFFFF +#elif IOV_MAX > 0xFFFF +#error "IOV_MAX larger than supported by LwIP" +#endif /* IOV_MAX */ + +#if !defined(iovec) +struct iovec { + void *iov_base; + size_t iov_len; +}; +#endif + +struct msghdr { + void *msg_name; + socklen_t msg_namelen; + struct iovec *msg_iov; + int msg_iovlen; + void *msg_control; + socklen_t msg_controllen; + int msg_flags; +}; + +/* struct msghdr->msg_flags bit field values */ +#define MSG_TRUNC 0x04 +#define MSG_CTRUNC 0x08 + +/* RFC 3542, Section 20: Ancillary Data */ +struct cmsghdr { + socklen_t cmsg_len; /* number of bytes, including header */ + int cmsg_level; /* originating protocol */ + int cmsg_type; /* protocol-specific type */ +}; +/* Data section follows header and possible padding, typically referred to as + unsigned char cmsg_data[]; */ + +/* cmsg header/data alignment. NOTE: we align to native word size (double word +size on 16-bit arch) so structures are not placed at an unaligned address. +16-bit arch needs double word to ensure 32-bit alignment because socklen_t +could be 32 bits. If we ever have cmsg data with a 64-bit variable, alignment +will need to increase long long */ +#define ALIGN_H(size) (((size) + sizeof(long) - 1U) & ~(sizeof(long)-1U)) +#define ALIGN_D(size) ALIGN_H(size) + +#define CMSG_FIRSTHDR(mhdr) \ + ((mhdr)->msg_controllen >= sizeof(struct cmsghdr) ? \ + (struct cmsghdr *)(mhdr)->msg_control : \ + (struct cmsghdr *)NULL) + +#define CMSG_NXTHDR(mhdr, cmsg) \ + (((cmsg) == NULL) ? CMSG_FIRSTHDR(mhdr) : \ + (((u8_t *)(cmsg) + ALIGN_H((cmsg)->cmsg_len) \ + + ALIGN_D(sizeof(struct cmsghdr)) > \ + (u8_t *)((mhdr)->msg_control) + (mhdr)->msg_controllen) ? \ + (struct cmsghdr *)NULL : \ + (struct cmsghdr *)((void*)((u8_t *)(cmsg) + \ + ALIGN_H((cmsg)->cmsg_len))))) + +#define CMSG_DATA(cmsg) ((void*)((u8_t *)(cmsg) + \ + ALIGN_D(sizeof(struct cmsghdr)))) + +#define CMSG_SPACE(length) (ALIGN_D(sizeof(struct cmsghdr)) + \ + ALIGN_H(length)) + +#define CMSG_LEN(length) (ALIGN_D(sizeof(struct cmsghdr)) + \ + length) + +/* Set socket options argument */ +#define IFNAMSIZ NETIF_NAMESIZE +struct ifreq { + char ifr_name[IFNAMSIZ]; /* Interface name */ +}; + +/* Socket protocol types (TCP/UDP/RAW) */ +#define SOCK_STREAM 1 +#define SOCK_DGRAM 2 +#define SOCK_RAW 3 + +/* + * Option flags per-socket. These must match the SOF_ flags in ip.h (checked in init.c) + */ +#define SO_REUSEADDR 0x0004 /* Allow local address reuse */ +#define SO_KEEPALIVE 0x0008 /* keep connections alive */ +#define SO_BROADCAST 0x0020 /* permit to send and to receive broadcast messages (see IP_SOF_BROADCAST option) */ + + +/* + * Additional options, not kept in so_options. + */ +#define SO_DEBUG 0x0001 /* Unimplemented: turn on debugging info recording */ +#define SO_ACCEPTCONN 0x0002 /* socket has had listen() */ +#define SO_DONTROUTE 0x0010 /* Unimplemented: just use interface addresses */ +#define SO_USELOOPBACK 0x0040 /* Unimplemented: bypass hardware when possible */ +#define SO_LINGER 0x0080 /* linger on close if data present */ +#define SO_DONTLINGER ((int)(~SO_LINGER)) +#define SO_OOBINLINE 0x0100 /* Unimplemented: leave received OOB data in line */ +#define SO_REUSEPORT 0x0200 /* Unimplemented: allow local address & port reuse */ +#define SO_SNDBUF 0x1001 /* Unimplemented: send buffer size */ +#define SO_RCVBUF 0x1002 /* receive buffer size */ +#define SO_SNDLOWAT 0x1003 /* Unimplemented: send low-water mark */ +#define SO_RCVLOWAT 0x1004 /* Unimplemented: receive low-water mark */ +#define SO_SNDTIMEO 0x1005 /* send timeout */ +#define SO_RCVTIMEO 0x1006 /* receive timeout */ +#define SO_ERROR 0x1007 /* get error status and clear */ +#define SO_TYPE 0x1008 /* get socket type */ +#define SO_CONTIMEO 0x1009 /* Unimplemented: connect timeout */ +#define SO_NO_CHECK 0x100a /* don't create UDP checksum */ +#define SO_BINDTODEVICE 0x100b /* bind to device */ + +/* + * Structure used for manipulating linger option. + */ +struct linger { + int l_onoff; /* option on/off */ + int l_linger; /* linger time in seconds */ +}; + +/* + * Level number for (get/set)sockopt() to apply to socket itself. + */ +#define SOL_SOCKET 0xfff /* options for socket level */ + + +#define AF_UNSPEC 0 +#define AF_INET 2 +#if LWIP_IPV6 +#define AF_INET6 10 +#else /* LWIP_IPV6 */ +#define AF_INET6 AF_UNSPEC +#endif /* LWIP_IPV6 */ +#define PF_INET AF_INET +#define PF_INET6 AF_INET6 +#define PF_UNSPEC AF_UNSPEC + +#define IPPROTO_IP 0 +#define IPPROTO_ICMP 1 +#define IPPROTO_TCP 6 +#define IPPROTO_UDP 17 +#if LWIP_IPV6 +#define IPPROTO_IPV6 41 +#define IPPROTO_ICMPV6 58 +#endif /* LWIP_IPV6 */ +#define IPPROTO_UDPLITE 136 +#define IPPROTO_RAW 255 + +/* Flags we can use with send and recv. */ +#define MSG_PEEK 0x01 /* Peeks at an incoming message */ +#define MSG_WAITALL 0x02 /* Unimplemented: Requests that the function block until the full amount of data requested can be returned */ +#define MSG_OOB 0x04 /* Unimplemented: Requests out-of-band data. The significance and semantics of out-of-band data are protocol-specific */ +#define MSG_DONTWAIT 0x08 /* Nonblocking i/o for this operation only */ +#define MSG_MORE 0x10 /* Sender will send more */ +#define MSG_NOSIGNAL 0x20 /* Uninmplemented: Requests not to send the SIGPIPE signal if an attempt to send is made on a stream-oriented socket that is no longer connected. */ + + +/* + * Options for level IPPROTO_IP + */ +#define IP_TOS 1 +#define IP_TTL 2 +#define IP_PKTINFO 8 + +#if LWIP_TCP +/* + * Options for level IPPROTO_TCP + */ +#define TCP_NODELAY 0x01 /* don't delay send to coalesce packets */ +#define TCP_KEEPALIVE 0x02 /* send KEEPALIVE probes when idle for pcb->keep_idle milliseconds */ +#define TCP_KEEPIDLE 0x03 /* set pcb->keep_idle - Same as TCP_KEEPALIVE, but use seconds for get/setsockopt */ +#define TCP_KEEPINTVL 0x04 /* set pcb->keep_intvl - Use seconds for get/setsockopt */ +#define TCP_KEEPCNT 0x05 /* set pcb->keep_cnt - Use number of probes sent for get/setsockopt */ +#endif /* LWIP_TCP */ + +#if LWIP_IPV6 +/* + * Options for level IPPROTO_IPV6 + */ +#define IPV6_CHECKSUM 7 /* RFC3542: calculate and insert the ICMPv6 checksum for raw sockets. */ +#define IPV6_V6ONLY 27 /* RFC3493: boolean control to restrict AF_INET6 sockets to IPv6 communications only. */ +#endif /* LWIP_IPV6 */ + +#if LWIP_UDP && LWIP_UDPLITE +/* + * Options for level IPPROTO_UDPLITE + */ +#define UDPLITE_SEND_CSCOV 0x01 /* sender checksum coverage */ +#define UDPLITE_RECV_CSCOV 0x02 /* minimal receiver checksum coverage */ +#endif /* LWIP_UDP && LWIP_UDPLITE*/ + + +#if LWIP_MULTICAST_TX_OPTIONS +/* + * Options and types for UDP multicast traffic handling + */ +#define IP_MULTICAST_TTL 5 +#define IP_MULTICAST_IF 6 +#define IP_MULTICAST_LOOP 7 +#endif /* LWIP_MULTICAST_TX_OPTIONS */ + +#if LWIP_IGMP +/* + * Options and types related to multicast membership + */ +#define IP_ADD_MEMBERSHIP 3 +#define IP_DROP_MEMBERSHIP 4 + +typedef struct ip_mreq { + struct in_addr imr_multiaddr; /* IP multicast address of group */ + struct in_addr imr_interface; /* local IP address of interface */ +} ip_mreq; +#endif /* LWIP_IGMP */ + +#if LWIP_IPV4 +struct in_pktinfo { + unsigned int ipi_ifindex; /* Interface index */ + struct in_addr ipi_addr; /* Destination (from header) address */ +}; +#endif /* LWIP_IPV4 */ + +#if LWIP_IPV6_MLD +/* + * Options and types related to IPv6 multicast membership + */ +#define IPV6_JOIN_GROUP 12 +#define IPV6_ADD_MEMBERSHIP IPV6_JOIN_GROUP +#define IPV6_LEAVE_GROUP 13 +#define IPV6_DROP_MEMBERSHIP IPV6_LEAVE_GROUP + +typedef struct ipv6_mreq { + struct in6_addr ipv6mr_multiaddr; /* IPv6 multicast addr */ + unsigned int ipv6mr_interface; /* interface index, or 0 */ +} ipv6_mreq; +#endif /* LWIP_IPV6_MLD */ + +/* + * The Type of Service provides an indication of the abstract + * parameters of the quality of service desired. These parameters are + * to be used to guide the selection of the actual service parameters + * when transmitting a datagram through a particular network. Several + * networks offer service precedence, which somehow treats high + * precedence traffic as more important than other traffic (generally + * by accepting only traffic above a certain precedence at time of high + * load). The major choice is a three way tradeoff between low-delay, + * high-reliability, and high-throughput. + * The use of the Delay, Throughput, and Reliability indications may + * increase the cost (in some sense) of the service. In many networks + * better performance for one of these parameters is coupled with worse + * performance on another. Except for very unusual cases at most two + * of these three indications should be set. + */ +#define IPTOS_TOS_MASK 0x1E +#define IPTOS_TOS(tos) ((tos) & IPTOS_TOS_MASK) +#define IPTOS_LOWDELAY 0x10 +#define IPTOS_THROUGHPUT 0x08 +#define IPTOS_RELIABILITY 0x04 +#define IPTOS_LOWCOST 0x02 +#define IPTOS_MINCOST IPTOS_LOWCOST + +/* + * The Network Control precedence designation is intended to be used + * within a network only. The actual use and control of that + * designation is up to each network. The Internetwork Control + * designation is intended for use by gateway control originators only. + * If the actual use of these precedence designations is of concern to + * a particular network, it is the responsibility of that network to + * control the access to, and use of, those precedence designations. + */ +#define IPTOS_PREC_MASK 0xe0 +#define IPTOS_PREC(tos) ((tos) & IPTOS_PREC_MASK) +#define IPTOS_PREC_NETCONTROL 0xe0 +#define IPTOS_PREC_INTERNETCONTROL 0xc0 +#define IPTOS_PREC_CRITIC_ECP 0xa0 +#define IPTOS_PREC_FLASHOVERRIDE 0x80 +#define IPTOS_PREC_FLASH 0x60 +#define IPTOS_PREC_IMMEDIATE 0x40 +#define IPTOS_PREC_PRIORITY 0x20 +#define IPTOS_PREC_ROUTINE 0x00 + + +/* + * Commands for ioctlsocket(), taken from the BSD file fcntl.h. + * lwip_ioctl only supports FIONREAD and FIONBIO, for now + * + * Ioctl's have the command encoded in the lower word, + * and the size of any in or out parameters in the upper + * word. The high 2 bits of the upper word are used + * to encode the in/out status of the parameter; for now + * we restrict parameters to at most 128 bytes. + */ +#if !defined(FIONREAD) || !defined(FIONBIO) +#define IOCPARM_MASK 0x7fU /* parameters must be < 128 bytes */ +#define IOC_VOID 0x20000000UL /* no parameters */ +#define IOC_OUT 0x40000000UL /* copy out parameters */ +#define IOC_IN 0x80000000UL /* copy in parameters */ +#define IOC_INOUT (IOC_IN|IOC_OUT) + /* 0x20000000 distinguishes new & + old ioctl's */ +#define _IO(x,y) ((long)(IOC_VOID|((x)<<8)|(y))) + +#define _IOR(x,y,t) ((long)(IOC_OUT|((sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y))) + +#define _IOW(x,y,t) ((long)(IOC_IN|((sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y))) +#endif /* !defined(FIONREAD) || !defined(FIONBIO) */ + +#ifndef FIONREAD +#define FIONREAD _IOR('f', 127, unsigned long) /* get # bytes to read */ +#endif +#ifndef FIONBIO +#define FIONBIO _IOW('f', 126, unsigned long) /* set/clear non-blocking i/o */ +#endif + +/* Socket I/O Controls: unimplemented */ +#ifndef SIOCSHIWAT +#define SIOCSHIWAT _IOW('s', 0, unsigned long) /* set high watermark */ +#define SIOCGHIWAT _IOR('s', 1, unsigned long) /* get high watermark */ +#define SIOCSLOWAT _IOW('s', 2, unsigned long) /* set low watermark */ +#define SIOCGLOWAT _IOR('s', 3, unsigned long) /* get low watermark */ +#define SIOCATMARK _IOR('s', 7, unsigned long) /* at oob mark? */ +#endif + +/* commands for fnctl */ +#ifndef F_GETFL +#define F_GETFL 3 +#endif +#ifndef F_SETFL +#define F_SETFL 4 +#endif + +/* File status flags and file access modes for fnctl, + these are bits in an int. */ +#ifndef O_NONBLOCK +#define O_NONBLOCK 1 /* nonblocking I/O */ +#endif +#ifndef O_NDELAY +#define O_NDELAY O_NONBLOCK /* same as O_NONBLOCK, for compatibility */ +#endif +#ifndef O_RDONLY +#define O_RDONLY 2 +#endif +#ifndef O_WRONLY +#define O_WRONLY 4 +#endif +#ifndef O_RDWR +#define O_RDWR (O_RDONLY|O_WRONLY) +#endif + +#ifndef SHUT_RD + #define SHUT_RD 0 + #define SHUT_WR 1 + #define SHUT_RDWR 2 +#endif + +/* FD_SET used for lwip_select */ +#ifndef FD_SET +#undef FD_SETSIZE +/* Make FD_SETSIZE match NUM_SOCKETS in socket.c */ +#define FD_SETSIZE MEMP_NUM_NETCONN +#define LWIP_SELECT_MAXNFDS (FD_SETSIZE + LWIP_SOCKET_OFFSET) +#define FDSETSAFESET(n, code) do { \ + if (((n) - LWIP_SOCKET_OFFSET < MEMP_NUM_NETCONN) && (((int)(n) - LWIP_SOCKET_OFFSET) >= 0)) { \ + code; }} while(0) +#define FDSETSAFEGET(n, code) (((n) - LWIP_SOCKET_OFFSET < MEMP_NUM_NETCONN) && (((int)(n) - LWIP_SOCKET_OFFSET) >= 0) ?\ + (code) : 0) +#define FD_SET(n, p) FDSETSAFESET(n, (p)->fd_bits[((n)-LWIP_SOCKET_OFFSET)/8] = (u8_t)((p)->fd_bits[((n)-LWIP_SOCKET_OFFSET)/8] | (1 << (((n)-LWIP_SOCKET_OFFSET) & 7)))) +#define FD_CLR(n, p) FDSETSAFESET(n, (p)->fd_bits[((n)-LWIP_SOCKET_OFFSET)/8] = (u8_t)((p)->fd_bits[((n)-LWIP_SOCKET_OFFSET)/8] & ~(1 << (((n)-LWIP_SOCKET_OFFSET) & 7)))) +#define FD_ISSET(n,p) FDSETSAFEGET(n, (p)->fd_bits[((n)-LWIP_SOCKET_OFFSET)/8] & (1 << (((n)-LWIP_SOCKET_OFFSET) & 7))) +#define FD_ZERO(p) memset((void*)(p), 0, sizeof(*(p))) + +typedef struct fd_set +{ + unsigned char fd_bits [(FD_SETSIZE+7)/8]; +} fd_set; + +#elif FD_SETSIZE < (LWIP_SOCKET_OFFSET + MEMP_NUM_NETCONN) +#error "external FD_SETSIZE too small for number of sockets" +#else +#define LWIP_SELECT_MAXNFDS FD_SETSIZE +#endif /* FD_SET */ + +/* poll-related defines and types */ +/* @todo: find a better way to guard the definition of these defines and types if already defined */ +#if !defined(POLLIN) && !defined(POLLOUT) +#define POLLIN 0x1 +#define POLLOUT 0x2 +#define POLLERR 0x4 +#define POLLNVAL 0x8 +/* Below values are unimplemented */ +#define POLLRDNORM 0x10 +#define POLLRDBAND 0x20 +#define POLLPRI 0x40 +#define POLLWRNORM 0x80 +#define POLLWRBAND 0x100 +#define POLLHUP 0x200 +typedef unsigned int nfds_t; +struct pollfd +{ + int fd; + short events; + short revents; +}; +#endif + +/** LWIP_TIMEVAL_PRIVATE: if you want to use the struct timeval provided + * by your system, set this to 0 and include in cc.h */ +#ifndef LWIP_TIMEVAL_PRIVATE +#define LWIP_TIMEVAL_PRIVATE 1 +#endif + +#if LWIP_TIMEVAL_PRIVATE +struct timeval { + long tv_sec; /* seconds */ + long tv_usec; /* and microseconds */ +}; +#endif /* LWIP_TIMEVAL_PRIVATE */ + +#define lwip_socket_init() /* Compatibility define, no init needed. */ +void lwip_socket_thread_init(void); /* LWIP_NETCONN_SEM_PER_THREAD==1: initialize thread-local semaphore */ +void lwip_socket_thread_cleanup(void); /* LWIP_NETCONN_SEM_PER_THREAD==1: destroy thread-local semaphore */ + +#if LWIP_COMPAT_SOCKETS == 2 +/* This helps code parsers/code completion by not having the COMPAT functions as defines */ +#define lwip_accept accept +#define lwip_bind bind +#define lwip_shutdown shutdown +#define lwip_getpeername getpeername +#define lwip_getsockname getsockname +#define lwip_setsockopt setsockopt +#define lwip_getsockopt getsockopt +#define lwip_close closesocket +#define lwip_connect connect +#define lwip_listen listen +#define lwip_recv recv +#define lwip_recvmsg recvmsg +#define lwip_recvfrom recvfrom +#define lwip_send send +#define lwip_sendmsg sendmsg +#define lwip_sendto sendto +#define lwip_socket socket +#if LWIP_SOCKET_SELECT +#define lwip_select select +#endif +#if LWIP_SOCKET_POLL +#define lwip_poll poll +#endif +#define lwip_ioctl ioctlsocket +#define lwip_inet_ntop inet_ntop +#define lwip_inet_pton inet_pton + +#if LWIP_POSIX_SOCKETS_IO_NAMES +#define lwip_read read +#define lwip_readv readv +#define lwip_write write +#define lwip_writev writev +#undef lwip_close +#define lwip_close close +#define closesocket(s) close(s) +int fcntl(int s, int cmd, ...); +#undef lwip_ioctl +#define lwip_ioctl ioctl +#define ioctlsocket ioctl +#endif /* LWIP_POSIX_SOCKETS_IO_NAMES */ +#endif /* LWIP_COMPAT_SOCKETS == 2 */ + +int lwip_accept(int s, struct sockaddr *addr, socklen_t *addrlen); +int lwip_bind(int s, const struct sockaddr *name, socklen_t namelen); +int lwip_shutdown(int s, int how); +int lwip_getpeername (int s, struct sockaddr *name, socklen_t *namelen); +int lwip_getsockname (int s, struct sockaddr *name, socklen_t *namelen); +int lwip_getsockopt (int s, int level, int optname, void *optval, socklen_t *optlen); +int lwip_setsockopt (int s, int level, int optname, const void *optval, socklen_t optlen); + int lwip_close(int s); +int lwip_connect(int s, const struct sockaddr *name, socklen_t namelen); +int lwip_listen(int s, int backlog); +ssize_t lwip_recv(int s, void *mem, size_t len, int flags); +ssize_t lwip_read(int s, void *mem, size_t len); +ssize_t lwip_readv(int s, const struct iovec *iov, int iovcnt); +ssize_t lwip_recvfrom(int s, void *mem, size_t len, int flags, + struct sockaddr *from, socklen_t *fromlen); +ssize_t lwip_recvmsg(int s, struct msghdr *message, int flags); +ssize_t lwip_send(int s, const void *dataptr, size_t size, int flags); +ssize_t lwip_sendmsg(int s, const struct msghdr *message, int flags); +ssize_t lwip_sendto(int s, const void *dataptr, size_t size, int flags, + const struct sockaddr *to, socklen_t tolen); +int lwip_socket(int domain, int type, int protocol); +ssize_t lwip_write(int s, const void *dataptr, size_t size); +ssize_t lwip_writev(int s, const struct iovec *iov, int iovcnt); +#if LWIP_SOCKET_SELECT +int lwip_select(int maxfdp1, fd_set *readset, fd_set *writeset, fd_set *exceptset, + struct timeval *timeout); +#endif +#if LWIP_SOCKET_POLL +int lwip_poll(struct pollfd *fds, nfds_t nfds, int timeout); +#endif +int lwip_ioctl(int s, long cmd, void *argp); +int lwip_fcntl(int s, int cmd, int val); +const char *lwip_inet_ntop(int af, const void *src, char *dst, socklen_t size); +int lwip_inet_pton(int af, const char *src, void *dst); + +#if LWIP_COMPAT_SOCKETS +#if LWIP_COMPAT_SOCKETS != 2 +/** @ingroup socket */ +#define accept(s,addr,addrlen) lwip_accept(s,addr,addrlen) +/** @ingroup socket */ +#define bind(s,name,namelen) lwip_bind(s,name,namelen) +/** @ingroup socket */ +#define shutdown(s,how) lwip_shutdown(s,how) +/** @ingroup socket */ +#define getpeername(s,name,namelen) lwip_getpeername(s,name,namelen) +/** @ingroup socket */ +#define getsockname(s,name,namelen) lwip_getsockname(s,name,namelen) +/** @ingroup socket */ +#define setsockopt(s,level,optname,opval,optlen) lwip_setsockopt(s,level,optname,opval,optlen) +/** @ingroup socket */ +#define getsockopt(s,level,optname,opval,optlen) lwip_getsockopt(s,level,optname,opval,optlen) +/** @ingroup socket */ +#define closesocket(s) lwip_close(s) +/** @ingroup socket */ +#define connect(s,name,namelen) lwip_connect(s,name,namelen) +/** @ingroup socket */ +#define listen(s,backlog) lwip_listen(s,backlog) +/** @ingroup socket */ +#define recv(s,mem,len,flags) lwip_recv(s,mem,len,flags) +/** @ingroup socket */ +#define recvmsg(s,message,flags) lwip_recvmsg(s,message,flags) +/** @ingroup socket */ +#define recvfrom(s,mem,len,flags,from,fromlen) lwip_recvfrom(s,mem,len,flags,from,fromlen) +/** @ingroup socket */ +#define send(s,dataptr,size,flags) lwip_send(s,dataptr,size,flags) +/** @ingroup socket */ +#define sendmsg(s,message,flags) lwip_sendmsg(s,message,flags) +/** @ingroup socket */ +#define sendto(s,dataptr,size,flags,to,tolen) lwip_sendto(s,dataptr,size,flags,to,tolen) +/** @ingroup socket */ +#define socket(domain,type,protocol) lwip_socket(domain,type,protocol) +#if LWIP_SOCKET_SELECT +/** @ingroup socket */ +#define select(maxfdp1,readset,writeset,exceptset,timeout) lwip_select(maxfdp1,readset,writeset,exceptset,timeout) +#endif +#if LWIP_SOCKET_POLL +/** @ingroup socket */ +#define poll(fds,nfds,timeout) lwip_poll(fds,nfds,timeout) +#endif +/** @ingroup socket */ +#define ioctlsocket(s,cmd,argp) lwip_ioctl(s,cmd,argp) +/** @ingroup socket */ +#define inet_ntop(af,src,dst,size) lwip_inet_ntop(af,src,dst,size) +/** @ingroup socket */ +#define inet_pton(af,src,dst) lwip_inet_pton(af,src,dst) + +#if LWIP_POSIX_SOCKETS_IO_NAMES +/** @ingroup socket */ +#define read(s,mem,len) lwip_read(s,mem,len) +/** @ingroup socket */ +#define readv(s,iov,iovcnt) lwip_readv(s,iov,iovcnt) +/** @ingroup socket */ +#define write(s,dataptr,len) lwip_write(s,dataptr,len) +/** @ingroup socket */ +#define writev(s,iov,iovcnt) lwip_writev(s,iov,iovcnt) +/** @ingroup socket */ +#define close(s) lwip_close(s) +/** @ingroup socket */ +#define fcntl(s,cmd,val) lwip_fcntl(s,cmd,val) +/** @ingroup socket */ +#define ioctl(s,cmd,argp) lwip_ioctl(s,cmd,argp) +#endif /* LWIP_POSIX_SOCKETS_IO_NAMES */ +#endif /* LWIP_COMPAT_SOCKETS != 2 */ + +#endif /* LWIP_COMPAT_SOCKETS */ + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_SOCKET */ + +#endif /* LWIP_HDR_SOCKETS_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/stats.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/stats.h new file mode 100644 index 0000000000000000000000000000000000000000..b570dbacf589d013379a61e3495dd7d4c5df0bbd --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/stats.h @@ -0,0 +1,491 @@ +/** + * @file + * Statistics API (to be used from TCPIP thread) + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef LWIP_HDR_STATS_H +#define LWIP_HDR_STATS_H + +#include "lwip/opt.h" + +#include "lwip/mem.h" +#include "lwip/memp.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#if LWIP_STATS + +#ifndef LWIP_STATS_LARGE +#define LWIP_STATS_LARGE 0 +#endif + +#if LWIP_STATS_LARGE +#define STAT_COUNTER u32_t +#define STAT_COUNTER_F U32_F +#else +#define STAT_COUNTER u16_t +#define STAT_COUNTER_F U16_F +#endif + +/** Protocol related stats */ +struct stats_proto { + STAT_COUNTER xmit; /* Transmitted packets. */ + STAT_COUNTER recv; /* Received packets. */ + STAT_COUNTER fw; /* Forwarded packets. */ + STAT_COUNTER drop; /* Dropped packets. */ + STAT_COUNTER chkerr; /* Checksum error. */ + STAT_COUNTER lenerr; /* Invalid length error. */ + STAT_COUNTER memerr; /* Out of memory error. */ + STAT_COUNTER rterr; /* Routing error. */ + STAT_COUNTER proterr; /* Protocol error. */ + STAT_COUNTER opterr; /* Error in options. */ + STAT_COUNTER err; /* Misc error. */ + STAT_COUNTER cachehit; +}; + +/** IGMP stats */ +struct stats_igmp { + STAT_COUNTER xmit; /* Transmitted packets. */ + STAT_COUNTER recv; /* Received packets. */ + STAT_COUNTER drop; /* Dropped packets. */ + STAT_COUNTER chkerr; /* Checksum error. */ + STAT_COUNTER lenerr; /* Invalid length error. */ + STAT_COUNTER memerr; /* Out of memory error. */ + STAT_COUNTER proterr; /* Protocol error. */ + STAT_COUNTER rx_v1; /* Received v1 frames. */ + STAT_COUNTER rx_group; /* Received group-specific queries. */ + STAT_COUNTER rx_general; /* Received general queries. */ + STAT_COUNTER rx_report; /* Received reports. */ + STAT_COUNTER tx_join; /* Sent joins. */ + STAT_COUNTER tx_leave; /* Sent leaves. */ + STAT_COUNTER tx_report; /* Sent reports. */ +}; + +/** Memory stats */ +struct stats_mem { +#if defined(LWIP_DEBUG) || LWIP_STATS_DISPLAY + const char *name; +#endif /* defined(LWIP_DEBUG) || LWIP_STATS_DISPLAY */ + STAT_COUNTER err; + mem_size_t avail; + mem_size_t used; + mem_size_t max; + STAT_COUNTER illegal; +}; + +/** System element stats */ +struct stats_syselem { + STAT_COUNTER used; + STAT_COUNTER max; + STAT_COUNTER err; +}; + +/** System stats */ +struct stats_sys { + struct stats_syselem sem; + struct stats_syselem mutex; + struct stats_syselem mbox; +}; + +/** SNMP MIB2 stats */ +struct stats_mib2 { + /* IP */ + u32_t ipinhdrerrors; + u32_t ipinaddrerrors; + u32_t ipinunknownprotos; + u32_t ipindiscards; + u32_t ipindelivers; + u32_t ipoutrequests; + u32_t ipoutdiscards; + u32_t ipoutnoroutes; + u32_t ipreasmoks; + u32_t ipreasmfails; + u32_t ipfragoks; + u32_t ipfragfails; + u32_t ipfragcreates; + u32_t ipreasmreqds; + u32_t ipforwdatagrams; + u32_t ipinreceives; + + /* TCP */ + u32_t tcpactiveopens; + u32_t tcppassiveopens; + u32_t tcpattemptfails; + u32_t tcpestabresets; + u32_t tcpoutsegs; + u32_t tcpretranssegs; + u32_t tcpinsegs; + u32_t tcpinerrs; + u32_t tcpoutrsts; + + /* UDP */ + u32_t udpindatagrams; + u32_t udpnoports; + u32_t udpinerrors; + u32_t udpoutdatagrams; + + /* ICMP */ + u32_t icmpinmsgs; + u32_t icmpinerrors; + u32_t icmpindestunreachs; + u32_t icmpintimeexcds; + u32_t icmpinparmprobs; + u32_t icmpinsrcquenchs; + u32_t icmpinredirects; + u32_t icmpinechos; + u32_t icmpinechoreps; + u32_t icmpintimestamps; + u32_t icmpintimestampreps; + u32_t icmpinaddrmasks; + u32_t icmpinaddrmaskreps; + u32_t icmpoutmsgs; + u32_t icmpouterrors; + u32_t icmpoutdestunreachs; + u32_t icmpouttimeexcds; + u32_t icmpoutechos; /* can be incremented by user application ('ping') */ + u32_t icmpoutechoreps; +}; + +/** + * @ingroup netif_mib2 + * SNMP MIB2 interface stats + */ +struct stats_mib2_netif_ctrs { + /** The total number of octets received on the interface, including framing characters */ + u32_t ifinoctets; + /** The number of packets, delivered by this sub-layer to a higher (sub-)layer, which were + * not addressed to a multicast or broadcast address at this sub-layer */ + u32_t ifinucastpkts; + /** The number of packets, delivered by this sub-layer to a higher (sub-)layer, which were + * addressed to a multicast or broadcast address at this sub-layer */ + u32_t ifinnucastpkts; + /** The number of inbound packets which were chosen to be discarded even though no errors had + * been detected to prevent their being deliverable to a higher-layer protocol. One possible + * reason for discarding such a packet could be to free up buffer space */ + u32_t ifindiscards; + /** For packet-oriented interfaces, the number of inbound packets that contained errors + * preventing them from being deliverable to a higher-layer protocol. For character- + * oriented or fixed-length interfaces, the number of inbound transmission units that + * contained errors preventing them from being deliverable to a higher-layer protocol. */ + u32_t ifinerrors; + /** For packet-oriented interfaces, the number of packets received via the interface which + * were discarded because of an unknown or unsupported protocol. For character-oriented + * or fixed-length interfaces that support protocol multiplexing the number of transmission + * units received via the interface which were discarded because of an unknown or unsupported + * protocol. For any interface that does not support protocol multiplexing, this counter will + * always be 0 */ + u32_t ifinunknownprotos; + /** The total number of octets transmitted out of the interface, including framing characters. */ + u32_t ifoutoctets; + /** The total number of packets that higher-level protocols requested be transmitted, and + * which were not addressed to a multicast or broadcast address at this sub-layer, including + * those that were discarded or not sent. */ + u32_t ifoutucastpkts; + /** The total number of packets that higher-level protocols requested be transmitted, and which + * were addressed to a multicast or broadcast address at this sub-layer, including + * those that were discarded or not sent. */ + u32_t ifoutnucastpkts; + /** The number of outbound packets which were chosen to be discarded even though no errors had + * been detected to prevent their being transmitted. One possible reason for discarding + * such a packet could be to free up buffer space. */ + u32_t ifoutdiscards; + /** For packet-oriented interfaces, the number of outbound packets that could not be transmitted + * because of errors. For character-oriented or fixed-length interfaces, the number of outbound + * transmission units that could not be transmitted because of errors. */ + u32_t ifouterrors; +}; + +/** lwIP stats container */ +struct stats_ { +#if LINK_STATS + /** Link level */ + struct stats_proto link; +#endif +#if ETHARP_STATS + /** ARP */ + struct stats_proto etharp; +#endif +#if IPFRAG_STATS + /** Fragmentation */ + struct stats_proto ip_frag; +#endif +#if IP_STATS + /** IP */ + struct stats_proto ip; +#endif +#if ICMP_STATS + /** ICMP */ + struct stats_proto icmp; +#endif +#if IGMP_STATS + /** IGMP */ + struct stats_igmp igmp; +#endif +#if UDP_STATS + /** UDP */ + struct stats_proto udp; +#endif +#if TCP_STATS + /** TCP */ + struct stats_proto tcp; +#endif +#if MEM_STATS + /** Heap */ + struct stats_mem mem; +#endif +#if MEMP_STATS + /** Internal memory pools */ + struct stats_mem *memp[MEMP_MAX]; +#endif +#if SYS_STATS + /** System */ + struct stats_sys sys; +#endif +#if IP6_STATS + /** IPv6 */ + struct stats_proto ip6; +#endif +#if ICMP6_STATS + /** ICMP6 */ + struct stats_proto icmp6; +#endif +#if IP6_FRAG_STATS + /** IPv6 fragmentation */ + struct stats_proto ip6_frag; +#endif +#if MLD6_STATS + /** Multicast listener discovery */ + struct stats_igmp mld6; +#endif +#if ND6_STATS + /** Neighbor discovery */ + struct stats_proto nd6; +#endif +#if MIB2_STATS + /** SNMP MIB2 */ + struct stats_mib2 mib2; +#endif +}; + +/** Global variable containing lwIP internal statistics. Add this to your debugger's watchlist. */ +extern struct stats_ lwip_stats; + +/** Init statistics */ +void stats_init(void); + +#define STATS_INC(x) ++lwip_stats.x +#define STATS_DEC(x) --lwip_stats.x +#define STATS_INC_USED(x, y, type) do { lwip_stats.x.used = (type)(lwip_stats.x.used + y); \ + if (lwip_stats.x.max < lwip_stats.x.used) { \ + lwip_stats.x.max = lwip_stats.x.used; \ + } \ + } while(0) +#define STATS_GET(x) lwip_stats.x +#else /* LWIP_STATS */ +#define stats_init() +#define STATS_INC(x) +#define STATS_DEC(x) +#define STATS_INC_USED(x, y, type) +#endif /* LWIP_STATS */ + +#if TCP_STATS +#define TCP_STATS_INC(x) STATS_INC(x) +#define TCP_STATS_DISPLAY() stats_display_proto(&lwip_stats.tcp, "TCP") +#else +#define TCP_STATS_INC(x) +#define TCP_STATS_DISPLAY() +#endif + +#if UDP_STATS +#define UDP_STATS_INC(x) STATS_INC(x) +#define UDP_STATS_DISPLAY() stats_display_proto(&lwip_stats.udp, "UDP") +#else +#define UDP_STATS_INC(x) +#define UDP_STATS_DISPLAY() +#endif + +#if ICMP_STATS +#define ICMP_STATS_INC(x) STATS_INC(x) +#define ICMP_STATS_DISPLAY() stats_display_proto(&lwip_stats.icmp, "ICMP") +#else +#define ICMP_STATS_INC(x) +#define ICMP_STATS_DISPLAY() +#endif + +#if IGMP_STATS +#define IGMP_STATS_INC(x) STATS_INC(x) +#define IGMP_STATS_DISPLAY() stats_display_igmp(&lwip_stats.igmp, "IGMP") +#else +#define IGMP_STATS_INC(x) +#define IGMP_STATS_DISPLAY() +#endif + +#if IP_STATS +#define IP_STATS_INC(x) STATS_INC(x) +#define IP_STATS_DISPLAY() stats_display_proto(&lwip_stats.ip, "IP") +#else +#define IP_STATS_INC(x) +#define IP_STATS_DISPLAY() +#endif + +#if IPFRAG_STATS +#define IPFRAG_STATS_INC(x) STATS_INC(x) +#define IPFRAG_STATS_DISPLAY() stats_display_proto(&lwip_stats.ip_frag, "IP_FRAG") +#else +#define IPFRAG_STATS_INC(x) +#define IPFRAG_STATS_DISPLAY() +#endif + +#if ETHARP_STATS +#define ETHARP_STATS_INC(x) STATS_INC(x) +#define ETHARP_STATS_DISPLAY() stats_display_proto(&lwip_stats.etharp, "ETHARP") +#else +#define ETHARP_STATS_INC(x) +#define ETHARP_STATS_DISPLAY() +#endif + +#if LINK_STATS +#define LINK_STATS_INC(x) STATS_INC(x) +#define LINK_STATS_DISPLAY() stats_display_proto(&lwip_stats.link, "LINK") +#else +#define LINK_STATS_INC(x) +#define LINK_STATS_DISPLAY() +#endif + +#if MEM_STATS +#define MEM_STATS_AVAIL(x, y) lwip_stats.mem.x = y +#define MEM_STATS_INC(x) STATS_INC(mem.x) +#define MEM_STATS_INC_USED(x, y) STATS_INC_USED(mem, y, mem_size_t) +#define MEM_STATS_DEC_USED(x, y) lwip_stats.mem.x = (mem_size_t)((lwip_stats.mem.x) - (y)) +#define MEM_STATS_DISPLAY() stats_display_mem(&lwip_stats.mem, "HEAP") +#else +#define MEM_STATS_AVAIL(x, y) +#define MEM_STATS_INC(x) +#define MEM_STATS_INC_USED(x, y) +#define MEM_STATS_DEC_USED(x, y) +#define MEM_STATS_DISPLAY() +#endif + + #if MEMP_STATS +#define MEMP_STATS_DEC(x, i) STATS_DEC(memp[i]->x) +#define MEMP_STATS_DISPLAY(i) stats_display_memp(lwip_stats.memp[i], i) +#define MEMP_STATS_GET(x, i) STATS_GET(memp[i]->x) + #else +#define MEMP_STATS_DEC(x, i) +#define MEMP_STATS_DISPLAY(i) +#define MEMP_STATS_GET(x, i) 0 +#endif + +#if SYS_STATS +#define SYS_STATS_INC(x) STATS_INC(sys.x) +#define SYS_STATS_DEC(x) STATS_DEC(sys.x) +#define SYS_STATS_INC_USED(x) STATS_INC_USED(sys.x, 1, STAT_COUNTER) +#define SYS_STATS_DISPLAY() stats_display_sys(&lwip_stats.sys) +#else +#define SYS_STATS_INC(x) +#define SYS_STATS_DEC(x) +#define SYS_STATS_INC_USED(x) +#define SYS_STATS_DISPLAY() +#endif + +#if IP6_STATS +#define IP6_STATS_INC(x) STATS_INC(x) +#define IP6_STATS_DISPLAY() stats_display_proto(&lwip_stats.ip6, "IPv6") +#else +#define IP6_STATS_INC(x) +#define IP6_STATS_DISPLAY() +#endif + +#if ICMP6_STATS +#define ICMP6_STATS_INC(x) STATS_INC(x) +#define ICMP6_STATS_DISPLAY() stats_display_proto(&lwip_stats.icmp6, "ICMPv6") +#else +#define ICMP6_STATS_INC(x) +#define ICMP6_STATS_DISPLAY() +#endif + +#if IP6_FRAG_STATS +#define IP6_FRAG_STATS_INC(x) STATS_INC(x) +#define IP6_FRAG_STATS_DISPLAY() stats_display_proto(&lwip_stats.ip6_frag, "IPv6 FRAG") +#else +#define IP6_FRAG_STATS_INC(x) +#define IP6_FRAG_STATS_DISPLAY() +#endif + +#if MLD6_STATS +#define MLD6_STATS_INC(x) STATS_INC(x) +#define MLD6_STATS_DISPLAY() stats_display_igmp(&lwip_stats.mld6, "MLDv1") +#else +#define MLD6_STATS_INC(x) +#define MLD6_STATS_DISPLAY() +#endif + +#if ND6_STATS +#define ND6_STATS_INC(x) STATS_INC(x) +#define ND6_STATS_DISPLAY() stats_display_proto(&lwip_stats.nd6, "ND") +#else +#define ND6_STATS_INC(x) +#define ND6_STATS_DISPLAY() +#endif + +#if MIB2_STATS +#define MIB2_STATS_INC(x) STATS_INC(x) +#else +#define MIB2_STATS_INC(x) +#endif + +/* Display of statistics */ +#if LWIP_STATS_DISPLAY +void stats_display(void); +void stats_display_proto(struct stats_proto *proto, const char *name); +void stats_display_igmp(struct stats_igmp *igmp, const char *name); +void stats_display_mem(struct stats_mem *mem, const char *name); +void stats_display_memp(struct stats_mem *mem, int index); +void stats_display_sys(struct stats_sys *sys); +#else /* LWIP_STATS_DISPLAY */ +#define stats_display() +#define stats_display_proto(proto, name) +#define stats_display_igmp(igmp, name) +#define stats_display_mem(mem, name) +#define stats_display_memp(mem, index) +#define stats_display_sys(sys) +#endif /* LWIP_STATS_DISPLAY */ + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_STATS_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/sys.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/sys.h new file mode 100644 index 0000000000000000000000000000000000000000..168e465baa7383f42e47e4ad7c6b0ace6e659020 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/sys.h @@ -0,0 +1,560 @@ +/** + * @file + * OS abstraction layer + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + */ + +#ifndef LWIP_HDR_SYS_H +#define LWIP_HDR_SYS_H + +#include "lwip/opt.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#if NO_SYS + +/* For a totally minimal and standalone system, we provide null + definitions of the sys_ functions. */ +typedef u8_t sys_sem_t; +typedef u8_t sys_mutex_t; +typedef u8_t sys_mbox_t; + +#define sys_sem_new(s, c) ERR_OK +#define sys_sem_signal(s) +#define sys_sem_wait(s) +#define sys_arch_sem_wait(s,t) +#define sys_sem_free(s) +#define sys_sem_valid(s) 0 +#define sys_sem_valid_val(s) 0 +#define sys_sem_set_invalid(s) +#define sys_sem_set_invalid_val(s) +#define sys_mutex_new(mu) ERR_OK +#define sys_mutex_lock(mu) +#define sys_mutex_unlock(mu) +#define sys_mutex_free(mu) +#define sys_mutex_valid(mu) 0 +#define sys_mutex_set_invalid(mu) +#define sys_mbox_new(m, s) ERR_OK +#define sys_mbox_fetch(m,d) +#define sys_mbox_tryfetch(m,d) +#define sys_mbox_post(m,d) +#define sys_mbox_trypost(m,d) +#define sys_mbox_free(m) +#define sys_mbox_valid(m) +#define sys_mbox_valid_val(m) +#define sys_mbox_set_invalid(m) +#define sys_mbox_set_invalid_val(m) + +#define sys_thread_new(n,t,a,s,p) + +#define sys_msleep(t) + +#else /* NO_SYS */ + +/** Return code for timeouts from sys_arch_mbox_fetch and sys_arch_sem_wait */ +#define SYS_ARCH_TIMEOUT 0xffffffffUL + +/** sys_mbox_tryfetch() returns SYS_MBOX_EMPTY if appropriate. + * For now we use the same magic value, but we allow this to change in future. + */ +#define SYS_MBOX_EMPTY SYS_ARCH_TIMEOUT + +#include "lwip/err.h" +#include "arch/sys_arch.h" + +/** Function prototype for thread functions */ +typedef void (*lwip_thread_fn)(void *arg); + +/* Function prototypes for functions to be implemented by platform ports + (in sys_arch.c) */ + +/* Mutex functions: */ + +/** Define LWIP_COMPAT_MUTEX if the port has no mutexes and binary semaphores + should be used instead */ +#ifndef LWIP_COMPAT_MUTEX +#define LWIP_COMPAT_MUTEX 0 +#endif + +#if LWIP_COMPAT_MUTEX +/* for old ports that don't have mutexes: define them to binary semaphores */ +#define sys_mutex_t sys_sem_t +#define sys_mutex_new(mutex) sys_sem_new(mutex, 1) +#define sys_mutex_lock(mutex) sys_sem_wait(mutex) +#define sys_mutex_unlock(mutex) sys_sem_signal(mutex) +#define sys_mutex_free(mutex) sys_sem_free(mutex) +#define sys_mutex_valid(mutex) sys_sem_valid(mutex) +#define sys_mutex_set_invalid(mutex) sys_sem_set_invalid(mutex) + +#else /* LWIP_COMPAT_MUTEX */ + +/** + * @ingroup sys_mutex + * Create a new mutex. + * Note that mutexes are expected to not be taken recursively by the lwIP code, + * so both implementation types (recursive or non-recursive) should work. + * The mutex is allocated to the memory that 'mutex' + * points to (which can be both a pointer or the actual OS structure). + * If the mutex has been created, ERR_OK should be returned. Returning any + * other error will provide a hint what went wrong, but except for assertions, + * no real error handling is implemented. + * + * @param mutex pointer to the mutex to create + * @return ERR_OK if successful, another err_t otherwise + */ +err_t sys_mutex_new(sys_mutex_t *mutex); +/** + * @ingroup sys_mutex + * Blocks the thread until the mutex can be grabbed. + * @param mutex the mutex to lock + */ +void sys_mutex_lock(sys_mutex_t *mutex); +/** + * @ingroup sys_mutex + * Releases the mutex previously locked through 'sys_mutex_lock()'. + * @param mutex the mutex to unlock + */ +void sys_mutex_unlock(sys_mutex_t *mutex); +/** + * @ingroup sys_mutex + * Deallocates a mutex. + * @param mutex the mutex to delete + */ +void sys_mutex_free(sys_mutex_t *mutex); +#ifndef sys_mutex_valid +/** + * @ingroup sys_mutex + * Returns 1 if the mutes is valid, 0 if it is not valid. + * When using pointers, a simple way is to check the pointer for != NULL. + * When directly using OS structures, implementing this may be more complex. + * This may also be a define, in which case the function is not prototyped. + */ +int sys_mutex_valid(sys_mutex_t *mutex); +#endif +#ifndef sys_mutex_set_invalid +/** + * @ingroup sys_mutex + * Invalidate a mutex so that sys_mutex_valid() returns 0. + * ATTENTION: This does NOT mean that the mutex shall be deallocated: + * sys_mutex_free() is always called before calling this function! + * This may also be a define, in which case the function is not prototyped. + */ +void sys_mutex_set_invalid(sys_mutex_t *mutex); +#endif +#endif /* LWIP_COMPAT_MUTEX */ + +/* Semaphore functions: */ + +/** + * @ingroup sys_sem + * Create a new semaphore + * Creates a new semaphore. The semaphore is allocated to the memory that 'sem' + * points to (which can be both a pointer or the actual OS structure). + * The "count" argument specifies the initial state of the semaphore (which is + * either 0 or 1). + * If the semaphore has been created, ERR_OK should be returned. Returning any + * other error will provide a hint what went wrong, but except for assertions, + * no real error handling is implemented. + * + * @param sem pointer to the semaphore to create + * @param count initial count of the semaphore + * @return ERR_OK if successful, another err_t otherwise + */ +err_t sys_sem_new(sys_sem_t *sem, u8_t count); +/** + * @ingroup sys_sem + * Signals a semaphore + * @param sem the semaphore to signal + */ +void sys_sem_signal(sys_sem_t *sem); +/** + * @ingroup sys_sem + * Blocks the thread while waiting for the semaphore to be signaled. If the + * "timeout" argument is non-zero, the thread should only be blocked for the + * specified time (measured in milliseconds). If the "timeout" argument is zero, + * the thread should be blocked until the semaphore is signalled. + * + * The return value is SYS_ARCH_TIMEOUT if the semaphore wasn't signaled within + * the specified time or any other value if it was signaled (with or without + * waiting). + * Notice that lwIP implements a function with a similar name, + * sys_sem_wait(), that uses the sys_arch_sem_wait() function. + * + * @param sem the semaphore to wait for + * @param timeout timeout in milliseconds to wait (0 = wait forever) + * @return SYS_ARCH_TIMEOUT on timeout, any other value on success + */ +u32_t sys_arch_sem_wait(sys_sem_t *sem, u32_t timeout); +/** + * @ingroup sys_sem + * Deallocates a semaphore. + * @param sem semaphore to delete + */ +void sys_sem_free(sys_sem_t *sem); +/** Wait for a semaphore - forever/no timeout */ +#define sys_sem_wait(sem) sys_arch_sem_wait(sem, 0) +#ifndef sys_sem_valid +/** + * @ingroup sys_sem + * Returns 1 if the semaphore is valid, 0 if it is not valid. + * When using pointers, a simple way is to check the pointer for != NULL. + * When directly using OS structures, implementing this may be more complex. + * This may also be a define, in which case the function is not prototyped. + */ +int sys_sem_valid(sys_sem_t *sem); +#endif +#ifndef sys_sem_set_invalid +/** + * @ingroup sys_sem + * Invalidate a semaphore so that sys_sem_valid() returns 0. + * ATTENTION: This does NOT mean that the semaphore shall be deallocated: + * sys_sem_free() is always called before calling this function! + * This may also be a define, in which case the function is not prototyped. + */ +void sys_sem_set_invalid(sys_sem_t *sem); +#endif +#ifndef sys_sem_valid_val +/** + * Same as sys_sem_valid() but taking a value, not a pointer + */ +#define sys_sem_valid_val(sem) sys_sem_valid(&(sem)) +#endif +#ifndef sys_sem_set_invalid_val +/** + * Same as sys_sem_set_invalid() but taking a value, not a pointer + */ +#define sys_sem_set_invalid_val(sem) sys_sem_set_invalid(&(sem)) +#endif + +#ifndef sys_msleep +/** + * @ingroup sys_misc + * Sleep for specified number of ms + */ +void sys_msleep(u32_t ms); /* only has a (close to) 1 ms resolution. */ +#endif + +/* Mailbox functions. */ + +/** + * @ingroup sys_mbox + * Creates an empty mailbox for maximum "size" elements. Elements stored + * in mailboxes are pointers. You have to define macros "_MBOX_SIZE" + * in your lwipopts.h, or ignore this parameter in your implementation + * and use a default size. + * If the mailbox has been created, ERR_OK should be returned. Returning any + * other error will provide a hint what went wrong, but except for assertions, + * no real error handling is implemented. + * + * @param mbox pointer to the mbox to create + * @param size (minimum) number of messages in this mbox + * @return ERR_OK if successful, another err_t otherwise + */ +err_t sys_mbox_new(sys_mbox_t *mbox, int size); +/** + * @ingroup sys_mbox + * Post a message to an mbox - may not fail + * -> blocks if full, only to be used from tasks NOT from ISR! + * + * @param mbox mbox to posts the message + * @param msg message to post (ATTENTION: can be NULL) + */ +void sys_mbox_post(sys_mbox_t *mbox, void *msg); +/** + * @ingroup sys_mbox + * Try to post a message to an mbox - may fail if full. + * Can be used from ISR (if the sys arch layer allows this). + * Returns ERR_MEM if it is full, else, ERR_OK if the "msg" is posted. + * + * @param mbox mbox to posts the message + * @param msg message to post (ATTENTION: can be NULL) + */ +err_t sys_mbox_trypost(sys_mbox_t *mbox, void *msg); +/** + * @ingroup sys_mbox + * Try to post a message to an mbox - may fail if full. + * To be be used from ISR. + * Returns ERR_MEM if it is full, else, ERR_OK if the "msg" is posted. + * + * @param mbox mbox to posts the message + * @param msg message to post (ATTENTION: can be NULL) + */ +err_t sys_mbox_trypost_fromisr(sys_mbox_t *mbox, void *msg); +/** + * @ingroup sys_mbox + * Blocks the thread until a message arrives in the mailbox, but does + * not block the thread longer than "timeout" milliseconds (similar to + * the sys_arch_sem_wait() function). If "timeout" is 0, the thread should + * be blocked until a message arrives. The "msg" argument is a result + * parameter that is set by the function (i.e., by doing "*msg = + * ptr"). The "msg" parameter maybe NULL to indicate that the message + * should be dropped. + * The return values are the same as for the sys_arch_sem_wait() function: + * SYS_ARCH_TIMEOUT if there was a timeout, any other value if a messages + * is received. + * + * Note that a function with a similar name, sys_mbox_fetch(), is + * implemented by lwIP. + * + * @param mbox mbox to get a message from + * @param msg pointer where the message is stored + * @param timeout maximum time (in milliseconds) to wait for a message (0 = wait forever) + * @return SYS_ARCH_TIMEOUT on timeout, any other value if a message has been received + */ +u32_t sys_arch_mbox_fetch(sys_mbox_t *mbox, void **msg, u32_t timeout); +/* Allow port to override with a macro, e.g. special timeout for sys_arch_mbox_fetch() */ +#ifndef sys_arch_mbox_tryfetch +/** + * @ingroup sys_mbox + * This is similar to sys_arch_mbox_fetch, however if a message is not + * present in the mailbox, it immediately returns with the code + * SYS_MBOX_EMPTY. On success 0 is returned. + * To allow for efficient implementations, this can be defined as a + * function-like macro in sys_arch.h instead of a normal function. For + * example, a naive implementation could be: + * \#define sys_arch_mbox_tryfetch(mbox,msg) sys_arch_mbox_fetch(mbox,msg,1) + * although this would introduce unnecessary delays. + * + * @param mbox mbox to get a message from + * @param msg pointer where the message is stored + * @return 0 (milliseconds) if a message has been received + * or SYS_MBOX_EMPTY if the mailbox is empty + */ +u32_t sys_arch_mbox_tryfetch(sys_mbox_t *mbox, void **msg); +#endif +/** + * For now, we map straight to sys_arch implementation. + */ +#define sys_mbox_tryfetch(mbox, msg) sys_arch_mbox_tryfetch(mbox, msg) +/** + * @ingroup sys_mbox + * Deallocates a mailbox. If there are messages still present in the + * mailbox when the mailbox is deallocated, it is an indication of a + * programming error in lwIP and the developer should be notified. + * + * @param mbox mbox to delete + */ +void sys_mbox_free(sys_mbox_t *mbox); +#define sys_mbox_fetch(mbox, msg) sys_arch_mbox_fetch(mbox, msg, 0) +#ifndef sys_mbox_valid +/** + * @ingroup sys_mbox + * Returns 1 if the mailbox is valid, 0 if it is not valid. + * When using pointers, a simple way is to check the pointer for != NULL. + * When directly using OS structures, implementing this may be more complex. + * This may also be a define, in which case the function is not prototyped. + */ +int sys_mbox_valid(sys_mbox_t *mbox); +#endif +#ifndef sys_mbox_set_invalid +/** + * @ingroup sys_mbox + * Invalidate a mailbox so that sys_mbox_valid() returns 0. + * ATTENTION: This does NOT mean that the mailbox shall be deallocated: + * sys_mbox_free() is always called before calling this function! + * This may also be a define, in which case the function is not prototyped. + */ +void sys_mbox_set_invalid(sys_mbox_t *mbox); +#endif +#ifndef sys_mbox_valid_val +/** + * Same as sys_mbox_valid() but taking a value, not a pointer + */ +#define sys_mbox_valid_val(mbox) sys_mbox_valid(&(mbox)) +#endif +#ifndef sys_mbox_set_invalid_val +/** + * Same as sys_mbox_set_invalid() but taking a value, not a pointer + */ +#define sys_mbox_set_invalid_val(mbox) sys_mbox_set_invalid(&(mbox)) +#endif + + +/** + * @ingroup sys_misc + * The only thread function: + * Starts a new thread named "name" with priority "prio" that will begin its + * execution in the function "thread()". The "arg" argument will be passed as an + * argument to the thread() function. The stack size to used for this thread is + * the "stacksize" parameter. The id of the new thread is returned. Both the id + * and the priority are system dependent. + * ATTENTION: although this function returns a value, it MUST NOT FAIL (ports have to assert this!) + * + * @param name human-readable name for the thread (used for debugging purposes) + * @param thread thread-function + * @param arg parameter passed to 'thread' + * @param stacksize stack size in bytes for the new thread (may be ignored by ports) + * @param prio priority of the new thread (may be ignored by ports) */ +sys_thread_t sys_thread_new(const char *name, lwip_thread_fn thread, void *arg, int stacksize, int prio); + +#endif /* NO_SYS */ + +/** + * @ingroup sys_misc + * sys_init() must be called before anything else. + * Initialize the sys_arch layer. + */ +void sys_init(void); + +#ifndef sys_jiffies +/** + * Ticks/jiffies since power up. + */ +u32_t sys_jiffies(void); +#endif + +/** + * @ingroup sys_time + * Returns the current time in milliseconds, + * may be the same as sys_jiffies or at least based on it. + * Don't care for wraparound, this is only used for time diffs. + * Not implementing this function means you cannot use some modules (e.g. TCP + * timestamps, internal timeouts for NO_SYS==1). + */ +u32_t sys_now(void); + +/* Critical Region Protection */ +/* These functions must be implemented in the sys_arch.c file. + In some implementations they can provide a more light-weight protection + mechanism than using semaphores. Otherwise semaphores can be used for + implementation */ +#ifndef SYS_ARCH_PROTECT +/** SYS_LIGHTWEIGHT_PROT + * define SYS_LIGHTWEIGHT_PROT in lwipopts.h if you want inter-task protection + * for certain critical regions during buffer allocation, deallocation and memory + * allocation and deallocation. + */ +#if SYS_LIGHTWEIGHT_PROT + +/** + * @ingroup sys_prot + * SYS_ARCH_DECL_PROTECT + * declare a protection variable. This macro will default to defining a variable of + * type sys_prot_t. If a particular port needs a different implementation, then + * this macro may be defined in sys_arch.h. + */ +#define SYS_ARCH_DECL_PROTECT(lev) sys_prot_t lev +/** + * @ingroup sys_prot + * SYS_ARCH_PROTECT + * Perform a "fast" protect. This could be implemented by + * disabling interrupts for an embedded system or by using a semaphore or + * mutex. The implementation should allow calling SYS_ARCH_PROTECT when + * already protected. The old protection level is returned in the variable + * "lev". This macro will default to calling the sys_arch_protect() function + * which should be implemented in sys_arch.c. If a particular port needs a + * different implementation, then this macro may be defined in sys_arch.h + */ +#define SYS_ARCH_PROTECT(lev) lev = sys_arch_protect() +/** + * @ingroup sys_prot + * SYS_ARCH_UNPROTECT + * Perform a "fast" set of the protection level to "lev". This could be + * implemented by setting the interrupt level to "lev" within the MACRO or by + * using a semaphore or mutex. This macro will default to calling the + * sys_arch_unprotect() function which should be implemented in + * sys_arch.c. If a particular port needs a different implementation, then + * this macro may be defined in sys_arch.h + */ +#define SYS_ARCH_UNPROTECT(lev) sys_arch_unprotect(lev) +sys_prot_t sys_arch_protect(void); +void sys_arch_unprotect(sys_prot_t pval); + +#else + +#define SYS_ARCH_DECL_PROTECT(lev) +#define SYS_ARCH_PROTECT(lev) +#define SYS_ARCH_UNPROTECT(lev) + +#endif /* SYS_LIGHTWEIGHT_PROT */ + +#endif /* SYS_ARCH_PROTECT */ + +/* + * Macros to set/get and increase/decrease variables in a thread-safe way. + * Use these for accessing variable that are used from more than one thread. + */ + +#ifndef SYS_ARCH_INC +#define SYS_ARCH_INC(var, val) do { \ + SYS_ARCH_DECL_PROTECT(old_level); \ + SYS_ARCH_PROTECT(old_level); \ + var += val; \ + SYS_ARCH_UNPROTECT(old_level); \ + } while(0) +#endif /* SYS_ARCH_INC */ + +#ifndef SYS_ARCH_DEC +#define SYS_ARCH_DEC(var, val) do { \ + SYS_ARCH_DECL_PROTECT(old_level); \ + SYS_ARCH_PROTECT(old_level); \ + var -= val; \ + SYS_ARCH_UNPROTECT(old_level); \ + } while(0) +#endif /* SYS_ARCH_DEC */ + +#ifndef SYS_ARCH_GET +#define SYS_ARCH_GET(var, ret) do { \ + SYS_ARCH_DECL_PROTECT(old_level); \ + SYS_ARCH_PROTECT(old_level); \ + ret = var; \ + SYS_ARCH_UNPROTECT(old_level); \ + } while(0) +#endif /* SYS_ARCH_GET */ + +#ifndef SYS_ARCH_SET +#define SYS_ARCH_SET(var, val) do { \ + SYS_ARCH_DECL_PROTECT(old_level); \ + SYS_ARCH_PROTECT(old_level); \ + var = val; \ + SYS_ARCH_UNPROTECT(old_level); \ + } while(0) +#endif /* SYS_ARCH_SET */ + +#ifndef SYS_ARCH_LOCKED +#define SYS_ARCH_LOCKED(code) do { \ + SYS_ARCH_DECL_PROTECT(old_level); \ + SYS_ARCH_PROTECT(old_level); \ + code; \ + SYS_ARCH_UNPROTECT(old_level); \ + } while(0) +#endif /* SYS_ARCH_LOCKED */ + + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_SYS_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/tcp.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/tcp.h new file mode 100644 index 0000000000000000000000000000000000000000..daf759946068095ea578f4776c369a44ba05dffa --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/tcp.h @@ -0,0 +1,500 @@ +/** + * @file + * TCP API (to be used from TCPIP thread)\n + * See also @ref tcp_raw + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef LWIP_HDR_TCP_H +#define LWIP_HDR_TCP_H + +#include "lwip/opt.h" + +#if LWIP_TCP /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/tcpbase.h" +#include "lwip/mem.h" +#include "lwip/pbuf.h" +#include "lwip/ip.h" +#include "lwip/icmp.h" +#include "lwip/err.h" +#include "lwip/ip6.h" +#include "lwip/ip6_addr.h" + +#ifdef __cplusplus +extern "C" { +#endif + +struct tcp_pcb; +struct tcp_pcb_listen; + +/** Function prototype for tcp accept callback functions. Called when a new + * connection can be accepted on a listening pcb. + * + * @param arg Additional argument to pass to the callback function (@see tcp_arg()) + * @param newpcb The new connection pcb + * @param err An error code if there has been an error accepting. + * Only return ERR_ABRT if you have called tcp_abort from within the + * callback function! + */ +typedef err_t (*tcp_accept_fn)(void *arg, struct tcp_pcb *newpcb, err_t err); + +/** Function prototype for tcp receive callback functions. Called when data has + * been received. + * + * @param arg Additional argument to pass to the callback function (@see tcp_arg()) + * @param tpcb The connection pcb which received data + * @param p The received data (or NULL when the connection has been closed!) + * @param err An error code if there has been an error receiving + * Only return ERR_ABRT if you have called tcp_abort from within the + * callback function! + */ +typedef err_t (*tcp_recv_fn)(void *arg, struct tcp_pcb *tpcb, + struct pbuf *p, err_t err); + +/** Function prototype for tcp sent callback functions. Called when sent data has + * been acknowledged by the remote side. Use it to free corresponding resources. + * This also means that the pcb has now space available to send new data. + * + * @param arg Additional argument to pass to the callback function (@see tcp_arg()) + * @param tpcb The connection pcb for which data has been acknowledged + * @param len The amount of bytes acknowledged + * @return ERR_OK: try to send some data by calling tcp_output + * Only return ERR_ABRT if you have called tcp_abort from within the + * callback function! + */ +typedef err_t (*tcp_sent_fn)(void *arg, struct tcp_pcb *tpcb, + u16_t len); + +/** Function prototype for tcp poll callback functions. Called periodically as + * specified by @see tcp_poll. + * + * @param arg Additional argument to pass to the callback function (@see tcp_arg()) + * @param tpcb tcp pcb + * @return ERR_OK: try to send some data by calling tcp_output + * Only return ERR_ABRT if you have called tcp_abort from within the + * callback function! + */ +typedef err_t (*tcp_poll_fn)(void *arg, struct tcp_pcb *tpcb); + +/** Function prototype for tcp error callback functions. Called when the pcb + * receives a RST or is unexpectedly closed for any other reason. + * + * @note The corresponding pcb is already freed when this callback is called! + * + * @param arg Additional argument to pass to the callback function (@see tcp_arg()) + * @param err Error code to indicate why the pcb has been closed + * ERR_ABRT: aborted through tcp_abort or by a TCP timer + * ERR_RST: the connection was reset by the remote host + */ +typedef void (*tcp_err_fn)(void *arg, err_t err); + +/** Function prototype for tcp connected callback functions. Called when a pcb + * is connected to the remote side after initiating a connection attempt by + * calling tcp_connect(). + * + * @param arg Additional argument to pass to the callback function (@see tcp_arg()) + * @param tpcb The connection pcb which is connected + * @param err An unused error code, always ERR_OK currently ;-) @todo! + * Only return ERR_ABRT if you have called tcp_abort from within the + * callback function! + * + * @note When a connection attempt fails, the error callback is currently called! + */ +typedef err_t (*tcp_connected_fn)(void *arg, struct tcp_pcb *tpcb, err_t err); + +#if LWIP_WND_SCALE +#define RCV_WND_SCALE(pcb, wnd) (((wnd) >> (pcb)->rcv_scale)) +#define SND_WND_SCALE(pcb, wnd) (((wnd) << (pcb)->snd_scale)) +#define TCPWND16(x) ((u16_t)LWIP_MIN((x), 0xFFFF)) +#define TCP_WND_MAX(pcb) ((tcpwnd_size_t)(((pcb)->flags & TF_WND_SCALE) ? TCP_WND : TCPWND16(TCP_WND))) +#else +#define RCV_WND_SCALE(pcb, wnd) (wnd) +#define SND_WND_SCALE(pcb, wnd) (wnd) +#define TCPWND16(x) (x) +#define TCP_WND_MAX(pcb) TCP_WND +#endif +/* Increments a tcpwnd_size_t and holds at max value rather than rollover */ +#define TCP_WND_INC(wnd, inc) do { \ + if ((tcpwnd_size_t)(wnd + inc) >= wnd) { \ + wnd = (tcpwnd_size_t)(wnd + inc); \ + } else { \ + wnd = (tcpwnd_size_t)-1; \ + } \ + } while(0) + +#if LWIP_TCP_SACK_OUT +/** SACK ranges to include in ACK packets. + * SACK entry is invalid if left==right. */ +struct tcp_sack_range { + /** Left edge of the SACK: the first acknowledged sequence number. */ + u32_t left; + /** Right edge of the SACK: the last acknowledged sequence number +1 (so first NOT acknowledged). */ + u32_t right; +}; +#endif /* LWIP_TCP_SACK_OUT */ + +/** Function prototype for deallocation of arguments. Called *just before* the + * pcb is freed, so don't expect to be able to do anything with this pcb! + * + * @param id ext arg id (allocated via @ref tcp_ext_arg_alloc_id) + * @param data pointer to the data (set via @ref tcp_ext_arg_set before) + */ +typedef void (*tcp_extarg_callback_pcb_destroyed_fn)(u8_t id, void *data); + +/** Function prototype to transition arguments from a listening pcb to an accepted pcb + * + * @param id ext arg id (allocated via @ref tcp_ext_arg_alloc_id) + * @param lpcb the listening pcb accepting a connection + * @param cpcb the newly allocated connection pcb + * @return ERR_OK if OK, any error if connection should be dropped + */ +typedef err_t (*tcp_extarg_callback_passive_open_fn)(u8_t id, struct tcp_pcb_listen *lpcb, struct tcp_pcb *cpcb); + +/** A table of callback functions that is invoked for ext arguments */ +struct tcp_ext_arg_callbacks { + /** @ref tcp_extarg_callback_pcb_destroyed_fn */ + tcp_extarg_callback_pcb_destroyed_fn destroy; + /** @ref tcp_extarg_callback_passive_open_fn */ + tcp_extarg_callback_passive_open_fn passive_open; +}; + +#define LWIP_TCP_PCB_NUM_EXT_ARG_ID_INVALID 0xFF + +#if LWIP_TCP_PCB_NUM_EXT_ARGS +/* This is the structure for ext args in tcp pcbs (used as array) */ +struct tcp_pcb_ext_args { + const struct tcp_ext_arg_callbacks *callbacks; + void *data; +}; +/* This is a helper define to prevent zero size arrays if disabled */ +#define TCP_PCB_EXTARGS struct tcp_pcb_ext_args ext_args[LWIP_TCP_PCB_NUM_EXT_ARGS]; +#else +#define TCP_PCB_EXTARGS +#endif + +typedef u16_t tcpflags_t; +#define TCP_ALLFLAGS 0xffffU + +/** + * members common to struct tcp_pcb and struct tcp_listen_pcb + */ +#define TCP_PCB_COMMON(type) \ + type *next; /* for the linked list */ \ + void *callback_arg; \ + TCP_PCB_EXTARGS \ + enum tcp_state state; /* TCP state */ \ + u8_t prio; \ + /* ports are in host byte order */ \ + u16_t local_port + + +/** the TCP protocol control block for listening pcbs */ +struct tcp_pcb_listen { +/** Common members of all PCB types */ + IP_PCB; +/** Protocol specific PCB members */ + TCP_PCB_COMMON(struct tcp_pcb_listen); + +#if LWIP_CALLBACK_API + /* Function to call when a listener has been connected. */ + tcp_accept_fn accept; +#endif /* LWIP_CALLBACK_API */ + +#if TCP_LISTEN_BACKLOG + u8_t backlog; + u8_t accepts_pending; +#endif /* TCP_LISTEN_BACKLOG */ +}; + + +/** the TCP protocol control block */ +struct tcp_pcb { +/** common PCB members */ + IP_PCB; +/** protocol specific PCB members */ + TCP_PCB_COMMON(struct tcp_pcb); + + /* ports are in host byte order */ + u16_t remote_port; + + tcpflags_t flags; +#define TF_ACK_DELAY 0x01U /* Delayed ACK. */ +#define TF_ACK_NOW 0x02U /* Immediate ACK. */ +#define TF_INFR 0x04U /* In fast recovery. */ +#define TF_CLOSEPEND 0x08U /* If this is set, tcp_close failed to enqueue the FIN (retried in tcp_tmr) */ +#define TF_RXCLOSED 0x10U /* rx closed by tcp_shutdown */ +#define TF_FIN 0x20U /* Connection was closed locally (FIN segment enqueued). */ +#define TF_NODELAY 0x40U /* Disable Nagle algorithm */ +#define TF_NAGLEMEMERR 0x80U /* nagle enabled, memerr, try to output to prevent delayed ACK to happen */ +#if LWIP_WND_SCALE +#define TF_WND_SCALE 0x0100U /* Window Scale option enabled */ +#endif +#if TCP_LISTEN_BACKLOG +#define TF_BACKLOGPEND 0x0200U /* If this is set, a connection pcb has increased the backlog on its listener */ +#endif +#if LWIP_TCP_TIMESTAMPS +#define TF_TIMESTAMP 0x0400U /* Timestamp option enabled */ +#endif +#define TF_RTO 0x0800U /* RTO timer has fired, in-flight data moved to unsent and being retransmitted */ +#if LWIP_TCP_SACK_OUT +#define TF_SACK 0x1000U /* Selective ACKs enabled */ +#endif + + /* the rest of the fields are in host byte order + as we have to do some math with them */ + + /* Timers */ + u8_t polltmr, pollinterval; + u8_t last_timer; + u32_t tmr; + + /* receiver variables */ + u32_t rcv_nxt; /* next seqno expected */ + tcpwnd_size_t rcv_wnd; /* receiver window available */ + tcpwnd_size_t rcv_ann_wnd; /* receiver window to announce */ + u32_t rcv_ann_right_edge; /* announced right edge of window */ + +#if LWIP_TCP_SACK_OUT + /* SACK ranges to include in ACK packets (entry is invalid if left==right) */ + struct tcp_sack_range rcv_sacks[LWIP_TCP_MAX_SACK_NUM]; +#define LWIP_TCP_SACK_VALID(pcb, idx) ((pcb)->rcv_sacks[idx].left != (pcb)->rcv_sacks[idx].right) +#endif /* LWIP_TCP_SACK_OUT */ + + /* Retransmission timer. */ + s16_t rtime; + + u16_t mss; /* maximum segment size */ + + /* RTT (round trip time) estimation variables */ + u32_t rttest; /* RTT estimate in 500ms ticks */ + u32_t rtseq; /* sequence number being timed */ + s16_t sa, sv; /* @see "Congestion Avoidance and Control" by Van Jacobson and Karels */ + + s16_t rto; /* retransmission time-out (in ticks of TCP_SLOW_INTERVAL) */ + u8_t nrtx; /* number of retransmissions */ + + /* fast retransmit/recovery */ + u8_t dupacks; + u32_t lastack; /* Highest acknowledged seqno. */ + + /* congestion avoidance/control variables */ + tcpwnd_size_t cwnd; + tcpwnd_size_t ssthresh; + + /* first byte following last rto byte */ + u32_t rto_end; + + /* sender variables */ + u32_t snd_nxt; /* next new seqno to be sent */ + u32_t snd_wl1, snd_wl2; /* Sequence and acknowledgement numbers of last + window update. */ + u32_t snd_lbb; /* Sequence number of next byte to be buffered. */ + tcpwnd_size_t snd_wnd; /* sender window */ + tcpwnd_size_t snd_wnd_max; /* the maximum sender window announced by the remote host */ + + tcpwnd_size_t snd_buf; /* Available buffer space for sending (in bytes). */ +#define TCP_SNDQUEUELEN_OVERFLOW (0xffffU-3) + u16_t snd_queuelen; /* Number of pbufs currently in the send buffer. */ + +#if TCP_OVERSIZE + /* Extra bytes available at the end of the last pbuf in unsent. */ + u16_t unsent_oversize; +#endif /* TCP_OVERSIZE */ + + tcpwnd_size_t bytes_acked; + + /* These are ordered by sequence number: */ + struct tcp_seg *unsent; /* Unsent (queued) segments. */ + struct tcp_seg *unacked; /* Sent but unacknowledged segments. */ +#if TCP_QUEUE_OOSEQ + struct tcp_seg *ooseq; /* Received out of sequence segments. */ +#endif /* TCP_QUEUE_OOSEQ */ + + struct pbuf *refused_data; /* Data previously received but not yet taken by upper layer */ + +#if LWIP_CALLBACK_API || TCP_LISTEN_BACKLOG + struct tcp_pcb_listen* listener; +#endif /* LWIP_CALLBACK_API || TCP_LISTEN_BACKLOG */ + +#if LWIP_CALLBACK_API + /* Function to be called when more send buffer space is available. */ + tcp_sent_fn sent; + /* Function to be called when (in-sequence) data has arrived. */ + tcp_recv_fn recv; + /* Function to be called when a connection has been set up. */ + tcp_connected_fn connected; + /* Function which is called periodically. */ + tcp_poll_fn poll; + /* Function to be called whenever a fatal error occurs. */ + tcp_err_fn errf; +#endif /* LWIP_CALLBACK_API */ + +#if LWIP_TCP_TIMESTAMPS + u32_t ts_lastacksent; + u32_t ts_recent; +#endif /* LWIP_TCP_TIMESTAMPS */ + + /* idle time before KEEPALIVE is sent */ + u32_t keep_idle; +#if LWIP_TCP_KEEPALIVE + u32_t keep_intvl; + u32_t keep_cnt; +#endif /* LWIP_TCP_KEEPALIVE */ + + /* Persist timer counter */ + u8_t persist_cnt; + /* Persist timer back-off */ + u8_t persist_backoff; + /* Number of persist probes */ + u8_t persist_probe; + + /* KEEPALIVE counter */ + u8_t keep_cnt_sent; + +#if LWIP_WND_SCALE + u8_t snd_scale; + u8_t rcv_scale; +#endif +}; + +#if LWIP_EVENT_API + +enum lwip_event { + LWIP_EVENT_ACCEPT, + LWIP_EVENT_SENT, + LWIP_EVENT_RECV, + LWIP_EVENT_CONNECTED, + LWIP_EVENT_POLL, + LWIP_EVENT_ERR +}; + +err_t lwip_tcp_event(void *arg, struct tcp_pcb *pcb, + enum lwip_event, + struct pbuf *p, + u16_t size, + err_t err); + +#endif /* LWIP_EVENT_API */ + +/* Application program's interface: */ +struct tcp_pcb * tcp_new (void); +struct tcp_pcb * tcp_new_ip_type (u8_t type); + +void tcp_arg (struct tcp_pcb *pcb, void *arg); +#if LWIP_CALLBACK_API +void tcp_recv (struct tcp_pcb *pcb, tcp_recv_fn recv); +void tcp_sent (struct tcp_pcb *pcb, tcp_sent_fn sent); +void tcp_err (struct tcp_pcb *pcb, tcp_err_fn err); +void tcp_accept (struct tcp_pcb *pcb, tcp_accept_fn accept); +#endif /* LWIP_CALLBACK_API */ +void tcp_poll (struct tcp_pcb *pcb, tcp_poll_fn poll, u8_t interval); + +#define tcp_set_flags(pcb, set_flags) do { (pcb)->flags = (tcpflags_t)((pcb)->flags | (set_flags)); } while(0) +#define tcp_clear_flags(pcb, clr_flags) do { (pcb)->flags = (tcpflags_t)((pcb)->flags & (tcpflags_t)(~(clr_flags) & TCP_ALLFLAGS)); } while(0) +#define tcp_is_flag_set(pcb, flag) (((pcb)->flags & (flag)) != 0) + +#if LWIP_TCP_TIMESTAMPS +#define tcp_mss(pcb) (((pcb)->flags & TF_TIMESTAMP) ? ((pcb)->mss - 12) : (pcb)->mss) +#else /* LWIP_TCP_TIMESTAMPS */ +/** @ingroup tcp_raw */ +#define tcp_mss(pcb) ((pcb)->mss) +#endif /* LWIP_TCP_TIMESTAMPS */ +/** @ingroup tcp_raw */ +#define tcp_sndbuf(pcb) (TCPWND16((pcb)->snd_buf)) +/** @ingroup tcp_raw */ +#define tcp_sndqueuelen(pcb) ((pcb)->snd_queuelen) +/** @ingroup tcp_raw */ +#define tcp_nagle_disable(pcb) tcp_set_flags(pcb, TF_NODELAY) +/** @ingroup tcp_raw */ +#define tcp_nagle_enable(pcb) tcp_clear_flags(pcb, TF_NODELAY) +/** @ingroup tcp_raw */ +#define tcp_nagle_disabled(pcb) tcp_is_flag_set(pcb, TF_NODELAY) + +#if TCP_LISTEN_BACKLOG +#define tcp_backlog_set(pcb, new_backlog) do { \ + LWIP_ASSERT("pcb->state == LISTEN (called for wrong pcb?)", (pcb)->state == LISTEN); \ + ((struct tcp_pcb_listen *)(pcb))->backlog = ((new_backlog) ? (new_backlog) : 1); } while(0) +void tcp_backlog_delayed(struct tcp_pcb* pcb); +void tcp_backlog_accepted(struct tcp_pcb* pcb); +#else /* TCP_LISTEN_BACKLOG */ +#define tcp_backlog_set(pcb, new_backlog) +#define tcp_backlog_delayed(pcb) +#define tcp_backlog_accepted(pcb) +#endif /* TCP_LISTEN_BACKLOG */ +#define tcp_accepted(pcb) do { LWIP_UNUSED_ARG(pcb); } while(0) /* compatibility define, not needed any more */ + +void tcp_recved (struct tcp_pcb *pcb, u16_t len); +err_t tcp_bind (struct tcp_pcb *pcb, const ip_addr_t *ipaddr, + u16_t port); +void tcp_bind_netif(struct tcp_pcb *pcb, const struct netif *netif); +err_t tcp_connect (struct tcp_pcb *pcb, const ip_addr_t *ipaddr, + u16_t port, tcp_connected_fn connected); + +struct tcp_pcb * tcp_listen_with_backlog_and_err(struct tcp_pcb *pcb, u8_t backlog, err_t *err); +struct tcp_pcb * tcp_listen_with_backlog(struct tcp_pcb *pcb, u8_t backlog); +/** @ingroup tcp_raw */ +#define tcp_listen(pcb) tcp_listen_with_backlog(pcb, TCP_DEFAULT_LISTEN_BACKLOG) + +void tcp_abort (struct tcp_pcb *pcb); +err_t tcp_close (struct tcp_pcb *pcb); +err_t tcp_shutdown(struct tcp_pcb *pcb, int shut_rx, int shut_tx); + +err_t tcp_write (struct tcp_pcb *pcb, const void *dataptr, u16_t len, + u8_t apiflags); + +void tcp_setprio (struct tcp_pcb *pcb, u8_t prio); + +err_t tcp_output (struct tcp_pcb *pcb); + +err_t tcp_tcp_get_tcp_addrinfo(struct tcp_pcb *pcb, int local, ip_addr_t *addr, u16_t *port); + +#define tcp_dbg_get_tcp_state(pcb) ((pcb)->state) + +/* for compatibility with older implementation */ +#define tcp_new_ip6() tcp_new_ip_type(IPADDR_TYPE_V6) + +#if LWIP_TCP_PCB_NUM_EXT_ARGS +u8_t tcp_ext_arg_alloc_id(void); +void tcp_ext_arg_set_callbacks(struct tcp_pcb *pcb, uint8_t id, const struct tcp_ext_arg_callbacks * const callbacks); +void tcp_ext_arg_set(struct tcp_pcb *pcb, uint8_t id, void *arg); +void *tcp_ext_arg_get(const struct tcp_pcb *pcb, uint8_t id); +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_TCP */ + +#endif /* LWIP_HDR_TCP_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/tcpbase.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/tcpbase.h new file mode 100644 index 0000000000000000000000000000000000000000..002307465530aee80b5de54eb67fa34ddeba7405 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/tcpbase.h @@ -0,0 +1,88 @@ +/** + * @file + * Base TCP API definitions shared by TCP and ALTCP\n + * See also @ref tcp_raw + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef LWIP_HDR_TCPBASE_H +#define LWIP_HDR_TCPBASE_H + +#include "lwip/opt.h" + +#if LWIP_TCP /* don't build if not configured for use in lwipopts.h */ + +#ifdef __cplusplus +extern "C" { +#endif + + +#if LWIP_WND_SCALE +typedef u32_t tcpwnd_size_t; +#else +typedef u16_t tcpwnd_size_t; +#endif + +enum tcp_state { + CLOSED = 0, + LISTEN = 1, + SYN_SENT = 2, + SYN_RCVD = 3, + ESTABLISHED = 4, + FIN_WAIT_1 = 5, + FIN_WAIT_2 = 6, + CLOSE_WAIT = 7, + CLOSING = 8, + LAST_ACK = 9, + TIME_WAIT = 10 +}; +/* ATTENTION: this depends on state number ordering! */ +#define TCP_STATE_IS_CLOSING(state) ((state) >= FIN_WAIT_1) + +/* Flags for "apiflags" parameter in tcp_write */ +#define TCP_WRITE_FLAG_COPY 0x01 +#define TCP_WRITE_FLAG_MORE 0x02 + +#define TCP_PRIO_MIN 1 +#define TCP_PRIO_NORMAL 64 +#define TCP_PRIO_MAX 127 + +const char* tcp_debug_state_str(enum tcp_state s); + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_TCP */ + +#endif /* LWIP_HDR_TCPBASE_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/tcpip.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/tcpip.h new file mode 100644 index 0000000000000000000000000000000000000000..0b8880a9fc66d1ed2dd49d05dccf7906767b6752 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/tcpip.h @@ -0,0 +1,113 @@ +/** + * @file + * Functions to sync with TCPIP thread + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef LWIP_HDR_TCPIP_H +#define LWIP_HDR_TCPIP_H + +#include "lwip/opt.h" + +#if !NO_SYS /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/err.h" +#include "lwip/timeouts.h" +#include "lwip/netif.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#if LWIP_TCPIP_CORE_LOCKING +/** The global semaphore to lock the stack. */ +extern sys_mutex_t lock_tcpip_core; +#if !defined LOCK_TCPIP_CORE || defined __DOXYGEN__ +/** Lock lwIP core mutex (needs @ref LWIP_TCPIP_CORE_LOCKING 1) */ +#define LOCK_TCPIP_CORE() sys_mutex_lock(&lock_tcpip_core) +/** Unlock lwIP core mutex (needs @ref LWIP_TCPIP_CORE_LOCKING 1) */ +#define UNLOCK_TCPIP_CORE() sys_mutex_unlock(&lock_tcpip_core) +#endif /* LOCK_TCPIP_CORE */ +#else /* LWIP_TCPIP_CORE_LOCKING */ +#define LOCK_TCPIP_CORE() +#define UNLOCK_TCPIP_CORE() +#endif /* LWIP_TCPIP_CORE_LOCKING */ + +struct pbuf; +struct netif; + +/** Function prototype for the init_done function passed to tcpip_init */ +typedef void (*tcpip_init_done_fn)(void *arg); +/** Function prototype for functions passed to tcpip_callback() */ +typedef void (*tcpip_callback_fn)(void *ctx); + +/* Forward declarations */ +struct tcpip_callback_msg; + +void tcpip_init(tcpip_init_done_fn tcpip_init_done, void *arg); + +err_t tcpip_inpkt(struct pbuf *p, struct netif *inp, netif_input_fn input_fn); +err_t tcpip_input(struct pbuf *p, struct netif *inp); + +err_t tcpip_try_callback(tcpip_callback_fn function, void *ctx); +err_t tcpip_callback(tcpip_callback_fn function, void *ctx); +/** @ingroup lwip_os + * @deprecated use tcpip_try_callback() or tcpip_callback() instead + */ +#define tcpip_callback_with_block(function, ctx, block) ((block != 0)? tcpip_callback(function, ctx) : tcpip_try_callback(function, ctx)) + +struct tcpip_callback_msg* tcpip_callbackmsg_new(tcpip_callback_fn function, void *ctx); +void tcpip_callbackmsg_delete(struct tcpip_callback_msg* msg); +err_t tcpip_callbackmsg_trycallback(struct tcpip_callback_msg* msg); +err_t tcpip_callbackmsg_trycallback_fromisr(struct tcpip_callback_msg* msg); + +/* free pbufs or heap memory from another context without blocking */ +err_t pbuf_free_callback(struct pbuf *p); +err_t mem_free_callback(void *m); + +#if LWIP_TCPIP_TIMEOUT && LWIP_TIMERS +err_t tcpip_timeout(u32_t msecs, sys_timeout_handler h, void *arg); +err_t tcpip_untimeout(sys_timeout_handler h, void *arg); +#endif /* LWIP_TCPIP_TIMEOUT && LWIP_TIMERS */ + +#ifdef TCPIP_THREAD_TEST +int tcpip_thread_poll_one(void); +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* !NO_SYS */ + +#endif /* LWIP_HDR_TCPIP_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/timeouts.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/timeouts.h new file mode 100644 index 0000000000000000000000000000000000000000..b601f9eb340d76f0c415905fe2a1aa2424ddd2ab --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/timeouts.h @@ -0,0 +1,128 @@ +/** + * @file + * Timer implementations + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * Simon Goldschmidt + * + */ +#ifndef LWIP_HDR_TIMEOUTS_H +#define LWIP_HDR_TIMEOUTS_H + +#include "lwip/opt.h" +#include "lwip/err.h" +#if !NO_SYS +#include "lwip/sys.h" +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef LWIP_DEBUG_TIMERNAMES +#ifdef LWIP_DEBUG +#define LWIP_DEBUG_TIMERNAMES SYS_DEBUG +#else /* LWIP_DEBUG */ +#define LWIP_DEBUG_TIMERNAMES 0 +#endif /* LWIP_DEBUG*/ +#endif + +/** Returned by sys_timeouts_sleeptime() to indicate there is no timer, so we + * can sleep forever. + */ +#define SYS_TIMEOUTS_SLEEPTIME_INFINITE 0xFFFFFFFF + +/** Function prototype for a stack-internal timer function that has to be + * called at a defined interval */ +typedef void (* lwip_cyclic_timer_handler)(void); + +/** This struct contains information about a stack-internal timer function + that has to be called at a defined interval */ +struct lwip_cyclic_timer { + u32_t interval_ms; + lwip_cyclic_timer_handler handler; +#if LWIP_DEBUG_TIMERNAMES + const char* handler_name; +#endif /* LWIP_DEBUG_TIMERNAMES */ +}; + +/** This array contains all stack-internal cyclic timers. To get the number of + * timers, use lwip_num_cyclic_timers */ +extern const struct lwip_cyclic_timer lwip_cyclic_timers[]; +/** Array size of lwip_cyclic_timers[] */ +extern const int lwip_num_cyclic_timers; + +#if LWIP_TIMERS + +/** Function prototype for a timeout callback function. Register such a function + * using sys_timeout(). + * + * @param arg Additional argument to pass to the function - set up by sys_timeout() + */ +typedef void (* sys_timeout_handler)(void *arg); + +struct sys_timeo { + struct sys_timeo *next; + u32_t time; + sys_timeout_handler h; + void *arg; +#if LWIP_DEBUG_TIMERNAMES + const char* handler_name; +#endif /* LWIP_DEBUG_TIMERNAMES */ +}; + +void sys_timeouts_init(void); + +#if LWIP_DEBUG_TIMERNAMES +void sys_timeout_debug(u32_t msecs, sys_timeout_handler handler, void *arg, const char* handler_name); +#define sys_timeout(msecs, handler, arg) sys_timeout_debug(msecs, handler, arg, #handler) +#else /* LWIP_DEBUG_TIMERNAMES */ +void sys_timeout(u32_t msecs, sys_timeout_handler handler, void *arg); +#endif /* LWIP_DEBUG_TIMERNAMES */ + +void sys_untimeout(sys_timeout_handler handler, void *arg); +void sys_restart_timeouts(void); +void sys_check_timeouts(void); +u32_t sys_timeouts_sleeptime(void); + +#if LWIP_TESTMODE +struct sys_timeo** sys_timeouts_get_next_timeout(void); +void lwip_cyclic_timer(void *arg); +#endif + +#endif /* LWIP_TIMERS */ + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_TIMEOUTS_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/udp.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/udp.h new file mode 100644 index 0000000000000000000000000000000000000000..b1c78e58d33571de3616e84d7c12b7004446ea30 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/lwip/udp.h @@ -0,0 +1,195 @@ +/** + * @file + * UDP API (to be used from TCPIP thread)\n + * See also @ref udp_raw + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef LWIP_HDR_UDP_H +#define LWIP_HDR_UDP_H + +#include "lwip/opt.h" + +#if LWIP_UDP /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/pbuf.h" +#include "lwip/netif.h" +#include "lwip/ip_addr.h" +#include "lwip/ip.h" +#include "lwip/ip6_addr.h" +#include "lwip/prot/udp.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define UDP_FLAGS_NOCHKSUM 0x01U +#define UDP_FLAGS_UDPLITE 0x02U +#define UDP_FLAGS_CONNECTED 0x04U +#define UDP_FLAGS_MULTICAST_LOOP 0x08U + +struct udp_pcb; + +/** Function prototype for udp pcb receive callback functions + * addr and port are in same byte order as in the pcb + * The callback is responsible for freeing the pbuf + * if it's not used any more. + * + * ATTENTION: Be aware that 'addr' might point into the pbuf 'p' so freeing this pbuf + * can make 'addr' invalid, too. + * + * @param arg user supplied argument (udp_pcb.recv_arg) + * @param pcb the udp_pcb which received data + * @param p the packet buffer that was received + * @param addr the remote IP address from which the packet was received + * @param port the remote port from which the packet was received + */ +typedef void (*udp_recv_fn)(void *arg, struct udp_pcb *pcb, struct pbuf *p, + const ip_addr_t *addr, u16_t port); + +/** the UDP protocol control block */ +struct udp_pcb { +/** Common members of all PCB types */ + IP_PCB; + +/* Protocol specific PCB members */ + + struct udp_pcb *next; + + u8_t flags; + /** ports are in host byte order */ + u16_t local_port, remote_port; + +#if LWIP_MULTICAST_TX_OPTIONS +#if LWIP_IPV4 + /** outgoing network interface for multicast packets, by IPv4 address (if not 'any') */ + ip4_addr_t mcast_ip4; +#endif /* LWIP_IPV4 */ + /** outgoing network interface for multicast packets, by interface index (if nonzero) */ + u8_t mcast_ifindex; + /** TTL for outgoing multicast packets */ + u8_t mcast_ttl; +#endif /* LWIP_MULTICAST_TX_OPTIONS */ + +#if LWIP_UDPLITE + /** used for UDP_LITE only */ + u16_t chksum_len_rx, chksum_len_tx; +#endif /* LWIP_UDPLITE */ + + /** receive callback function */ + udp_recv_fn recv; + /** user-supplied argument for the recv callback */ + void *recv_arg; +}; +/* udp_pcbs export for external reference (e.g. SNMP agent) */ +extern struct udp_pcb *udp_pcbs; + +/* The following functions is the application layer interface to the + UDP code. */ +struct udp_pcb * udp_new (void); +struct udp_pcb * udp_new_ip_type(u8_t type); +void udp_remove (struct udp_pcb *pcb); +err_t udp_bind (struct udp_pcb *pcb, const ip_addr_t *ipaddr, + u16_t port); +void udp_bind_netif (struct udp_pcb *pcb, const struct netif* netif); +err_t udp_connect (struct udp_pcb *pcb, const ip_addr_t *ipaddr, + u16_t port); +void udp_disconnect (struct udp_pcb *pcb); +void udp_recv (struct udp_pcb *pcb, udp_recv_fn recv, + void *recv_arg); +err_t udp_sendto_if (struct udp_pcb *pcb, struct pbuf *p, + const ip_addr_t *dst_ip, u16_t dst_port, + struct netif *netif); +err_t udp_sendto_if_src(struct udp_pcb *pcb, struct pbuf *p, + const ip_addr_t *dst_ip, u16_t dst_port, + struct netif *netif, const ip_addr_t *src_ip); +err_t udp_sendto (struct udp_pcb *pcb, struct pbuf *p, + const ip_addr_t *dst_ip, u16_t dst_port); +err_t udp_send (struct udp_pcb *pcb, struct pbuf *p); + +#if LWIP_CHECKSUM_ON_COPY && CHECKSUM_GEN_UDP +err_t udp_sendto_if_chksum(struct udp_pcb *pcb, struct pbuf *p, + const ip_addr_t *dst_ip, u16_t dst_port, + struct netif *netif, u8_t have_chksum, + u16_t chksum); +err_t udp_sendto_chksum(struct udp_pcb *pcb, struct pbuf *p, + const ip_addr_t *dst_ip, u16_t dst_port, + u8_t have_chksum, u16_t chksum); +err_t udp_send_chksum(struct udp_pcb *pcb, struct pbuf *p, + u8_t have_chksum, u16_t chksum); +err_t udp_sendto_if_src_chksum(struct udp_pcb *pcb, struct pbuf *p, + const ip_addr_t *dst_ip, u16_t dst_port, struct netif *netif, + u8_t have_chksum, u16_t chksum, const ip_addr_t *src_ip); +#endif /* LWIP_CHECKSUM_ON_COPY && CHECKSUM_GEN_UDP */ + +#define udp_flags(pcb) ((pcb)->flags) +#define udp_setflags(pcb, f) ((pcb)->flags = (f)) + +#define udp_set_flags(pcb, set_flags) do { (pcb)->flags = (u8_t)((pcb)->flags | (set_flags)); } while(0) +#define udp_clear_flags(pcb, clr_flags) do { (pcb)->flags = (u8_t)((pcb)->flags & (u8_t)(~(clr_flags) & 0xff)); } while(0) +#define udp_is_flag_set(pcb, flag) (((pcb)->flags & (flag)) != 0) + +/* The following functions are the lower layer interface to UDP. */ +void udp_input (struct pbuf *p, struct netif *inp); + +void udp_init (void); + +/* for compatibility with older implementation */ +#define udp_new_ip6() udp_new_ip_type(IPADDR_TYPE_V6) + +#if LWIP_MULTICAST_TX_OPTIONS +#if LWIP_IPV4 +#define udp_set_multicast_netif_addr(pcb, ip4addr) ip4_addr_copy((pcb)->mcast_ip4, *(ip4addr)) +#define udp_get_multicast_netif_addr(pcb) (&(pcb)->mcast_ip4) +#endif /* LWIP_IPV4 */ +#define udp_set_multicast_netif_index(pcb, idx) ((pcb)->mcast_ifindex = (idx)) +#define udp_get_multicast_netif_index(pcb) ((pcb)->mcast_ifindex) +#define udp_set_multicast_ttl(pcb, value) ((pcb)->mcast_ttl = (value)) +#define udp_get_multicast_ttl(pcb) ((pcb)->mcast_ttl) +#endif /* LWIP_MULTICAST_TX_OPTIONS */ + +#if UDP_DEBUG +void udp_debug_print(struct udp_hdr *udphdr); +#else +#define udp_debug_print(udphdr) +#endif + +void udp_netif_ip_addr_changed(const ip_addr_t* old_addr, const ip_addr_t* new_addr); + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_UDP */ + +#endif /* LWIP_HDR_UDP_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/bridgeif.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/bridgeif.h new file mode 100644 index 0000000000000000000000000000000000000000..f4f8cf14400bb44fec8f812ebce2fbe927895bc0 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/bridgeif.h @@ -0,0 +1,127 @@ +/** + * @file + * lwIP netif implementing an IEEE 802.1D MAC Bridge + */ + +/* + * Copyright (c) 2017 Simon Goldschmidt. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Simon Goldschmidt + * + */ +#ifndef LWIP_HDR_NETIF_BRIDGEIF_H +#define LWIP_HDR_NETIF_BRIDGEIF_H + +#include "netif/bridgeif_opts.h" + +#include "lwip/err.h" +#include "lwip/prot/ethernet.h" + +#ifdef __cplusplus +extern "C" { +#endif + +struct netif; + +#if (BRIDGEIF_MAX_PORTS < 0) || (BRIDGEIF_MAX_PORTS >= 64) +#error BRIDGEIF_MAX_PORTS must be [1..63] +#elif BRIDGEIF_MAX_PORTS < 8 +typedef u8_t bridgeif_portmask_t; +#elif BRIDGEIF_MAX_PORTS < 16 +typedef u16_t bridgeif_portmask_t; +#elif BRIDGEIF_MAX_PORTS < 32 +typedef u32_t bridgeif_portmask_t; +#elif BRIDGEIF_MAX_PORTS < 64 +typedef u64_t bridgeif_portmask_t; +#endif + +#define BR_FLOOD ((bridgeif_portmask_t)-1) + +/** @ingroup bridgeif + * Initialisation data for @ref bridgeif_init. + * An instance of this type must be passed as parameter 'state' to @ref netif_add + * when the bridge is added. + */ +typedef struct bridgeif_initdata_s { + /** MAC address of the bridge (cannot use the netif's addresses) */ + struct eth_addr ethaddr; + /** Maximum number of ports in the bridge (ports are stored in an array, this + influences memory allocated for netif->state of the bridge netif). */ + u8_t max_ports; + /** Maximum number of dynamic/learning entries in the bridge's forwarding database. + In the default implementation, this controls memory consumption only. */ + u16_t max_fdb_dynamic_entries; + /** Maximum number of static forwarding entries. Influences memory consumption! */ + u16_t max_fdb_static_entries; +} bridgeif_initdata_t; + +/** @ingroup bridgeif + * Use this for constant initialization of a bridgeif_initdat_t + * (ethaddr must be passed as ETH_ADDR()) + */ +#define BRIDGEIF_INITDATA1(max_ports, max_fdb_dynamic_entries, max_fdb_static_entries, ethaddr) {ethaddr, max_ports, max_fdb_dynamic_entries, max_fdb_static_entries} +/** @ingroup bridgeif + * Use this for constant initialization of a bridgeif_initdat_t + * (each byte of ethaddr must be passed) + */ +#define BRIDGEIF_INITDATA2(max_ports, max_fdb_dynamic_entries, max_fdb_static_entries, e0, e1, e2, e3, e4, e5) {{e0, e1, e2, e3, e4, e5}, max_ports, max_fdb_dynamic_entries, max_fdb_static_entries} + +err_t bridgeif_init(struct netif *netif); +err_t bridgeif_add_port(struct netif *bridgeif, struct netif *portif); +err_t bridgeif_fdb_add(struct netif *bridgeif, const struct eth_addr *addr, bridgeif_portmask_t ports); +err_t bridgeif_fdb_remove(struct netif *bridgeif, const struct eth_addr *addr); + +/* FDB interface, can be replaced by own implementation */ +void bridgeif_fdb_update_src(void *fdb_ptr, struct eth_addr *src_addr, u8_t port_idx); +bridgeif_portmask_t bridgeif_fdb_get_dst_ports(void *fdb_ptr, struct eth_addr *dst_addr); +void* bridgeif_fdb_init(u16_t max_fdb_entries); + +#if BRIDGEIF_PORT_NETIFS_OUTPUT_DIRECT +#ifndef BRIDGEIF_DECL_PROTECT +/* define bridgeif protection to sys_arch_protect... */ +#include "lwip/sys.h" +#define BRIDGEIF_DECL_PROTECT(lev) SYS_ARCH_DECL_PROTECT(lev) +#define BRIDGEIF_READ_PROTECT(lev) SYS_ARCH_PROTECT(lev) +#define BRIDGEIF_READ_UNPROTECT(lev) SYS_ARCH_UNPROTECT(lev) +#define BRIDGEIF_WRITE_PROTECT(lev) +#define BRIDGEIF_WRITE_UNPROTECT(lev) +#endif +#else /* BRIDGEIF_PORT_NETIFS_OUTPUT_DIRECT */ +#include "lwip/tcpip.h" +#define BRIDGEIF_DECL_PROTECT(lev) +#define BRIDGEIF_READ_PROTECT(lev) +#define BRIDGEIF_READ_UNPROTECT(lev) +#define BRIDGEIF_WRITE_PROTECT(lev) +#define BRIDGEIF_WRITE_UNPROTECT(lev) +#endif /* BRIDGEIF_PORT_NETIFS_OUTPUT_DIRECT */ + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_NETIF_BRIDGEIF_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/bridgeif_opts.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/bridgeif_opts.h new file mode 100644 index 0000000000000000000000000000000000000000..b85c3017494921b39dca3a305eb520ace84ee637 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/bridgeif_opts.h @@ -0,0 +1,90 @@ +/** + * @file + * lwIP netif implementing an IEEE 802.1D MAC Bridge + */ + +/* + * Copyright (c) 2017 Simon Goldschmidt. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Simon Goldschmidt + * + */ + +#ifndef LWIP_HDR_NETIF_BRIDGEIF_OPTS_H +#define LWIP_HDR_NETIF_BRIDGEIF_OPTS_H + +#include "lwip/opt.h" + +/** + * @defgroup bridgeif_opts Options + * @ingroup bridgeif + * @{ + */ + +/** BRIDGEIF_PORT_NETIFS_OUTPUT_DIRECT==1: set port netif's 'input' function + * to call directly into bridgeif code and on top of that, directly call into + * the selected forwarding port's 'linkoutput' function. + * This means that the bridgeif input/output path is protected from concurrent access + * but as well, *all* bridge port netif's drivers must correctly handle concurrent access! + * == 0: get into tcpip_thread for every input packet (no multithreading) + * ATTENTION: as ==0 relies on tcpip.h, the default depends on NO_SYS setting + */ +#ifndef BRIDGEIF_PORT_NETIFS_OUTPUT_DIRECT +#define BRIDGEIF_PORT_NETIFS_OUTPUT_DIRECT NO_SYS +#endif + +/** BRIDGEIF_MAX_PORTS: this is used to create a typedef used for forwarding + * bit-fields: the number of bits required is this + 1 (for the internal/cpu port) + * (63 is the maximum, resulting in an u64_t for the bit mask) + * ATTENTION: this controls the maximum number of the implementation only! + * The max. number of ports per bridge must still be passed via netif_add parameter! + */ +#ifndef BRIDGEIF_MAX_PORTS +#define BRIDGEIF_MAX_PORTS 7 +#endif + +/** BRIDGEIF_DEBUG: Enable generic debugging in bridgeif.c. */ +#ifndef BRIDGEIF_DEBUG +#define BRIDGEIF_DEBUG LWIP_DBG_OFF +#endif + +/** BRIDGEIF_DEBUG: Enable FDB debugging in bridgeif.c. */ +#ifndef BRIDGEIF_FDB_DEBUG +#define BRIDGEIF_FDB_DEBUG LWIP_DBG_OFF +#endif + +/** BRIDGEIF_DEBUG: Enable forwarding debugging in bridgeif.c. */ +#ifndef BRIDGEIF_FW_DEBUG +#define BRIDGEIF_FW_DEBUG LWIP_DBG_OFF +#endif + +/** + * @} + */ + +#endif /* LWIP_HDR_NETIF_BRIDGEIF_OPTS_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/etharp.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/etharp.h new file mode 100644 index 0000000000000000000000000000000000000000..b536fd280faca7f48627d2df651326bc41646c48 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/etharp.h @@ -0,0 +1,3 @@ +/* ARP has been moved to core/ipv4, provide this #include for compatibility only */ +#include "lwip/etharp.h" +#include "netif/ethernet.h" diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ethernet.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ethernet.h new file mode 100644 index 0000000000000000000000000000000000000000..49649cbf8b2a712b547ab40e736f3c6bb42f74b8 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ethernet.h @@ -0,0 +1,77 @@ +/** + * @file + * Ethernet input function - handles INCOMING ethernet level traffic + * To be used in most low-level netif implementations + */ + +/* + * Copyright (c) 2001-2003 Swedish Institute of Computer Science. + * Copyright (c) 2003-2004 Leon Woestenberg + * Copyright (c) 2003-2004 Axon Digital Design B.V., The Netherlands. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#ifndef LWIP_HDR_NETIF_ETHERNET_H +#define LWIP_HDR_NETIF_ETHERNET_H + +#include "lwip/opt.h" + +#include "lwip/pbuf.h" +#include "lwip/netif.h" +#include "lwip/prot/ethernet.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#if LWIP_ARP || LWIP_ETHERNET + +/** Define this to 1 and define LWIP_ARP_FILTER_NETIF_FN(pbuf, netif, type) + * to a filter function that returns the correct netif when using multiple + * netifs on one hardware interface where the netif's low-level receive + * routine cannot decide for the correct netif (e.g. when mapping multiple + * IP addresses to one hardware interface). + */ +#ifndef LWIP_ARP_FILTER_NETIF +#define LWIP_ARP_FILTER_NETIF 0 +#endif + +err_t ethernet_input(struct pbuf *p, struct netif *netif); +err_t ethernet_output(struct netif* netif, struct pbuf* p, const struct eth_addr* src, const struct eth_addr* dst, u16_t eth_type); + +extern const struct eth_addr ethbroadcast, ethzero; + +#endif /* LWIP_ARP || LWIP_ETHERNET */ + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_NETIF_ETHERNET_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ieee802154.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ieee802154.h new file mode 100644 index 0000000000000000000000000000000000000000..54e019fd0ac2fa406c6b6eb70c5b14428725f785 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ieee802154.h @@ -0,0 +1,112 @@ +/** + * @file + * Definitions for IEEE 802.15.4 MAC frames + */ + +/* + * Copyright (c) 2018 Simon Goldschmidt. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Simon Goldschmidt + * + */ +#ifndef LWIP_HDR_NETIF_IEEE802154_H +#define LWIP_HDR_NETIF_IEEE802154_H + +#include "lwip/opt.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +/** General MAC frame format + * This shows the full featured header, mainly for documentation. + * Some fields are omitted or shortened to achieve frame compression. + */ +struct ieee_802154_hdr { + /** See IEEE_802154_FC_* defines */ + PACK_STRUCT_FIELD(u16_t frame_control); + /** Sequence number is omitted if IEEE_802154_FC_SEQNO_SUPPR is set in frame_control */ + PACK_STRUCT_FLD_8(u8_t sequence_number); + /** Destination PAN ID is omitted if Destination Addressing Mode is 0 */ + PACK_STRUCT_FIELD(u16_t destination_pan_id); + /** Destination Address is omitted if Destination Addressing Mode is 0 */ + PACK_STRUCT_FLD_8(u8_t destination_address[8]); + /** Source PAN ID is omitted if Source Addressing Mode is 0 + or if IEEE_802154_FC_PANID_COMPR is set in frame control*/ + PACK_STRUCT_FIELD(u16_t source_pan_id); + /** Source Address is omitted if Source Addressing Mode is 0 */ + PACK_STRUCT_FLD_8(u8_t source_address[8]); + /* The rest is variable */ +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +/* Addressing modes (2 bits) */ +#define IEEE_802154_ADDR_MODE_NO_ADDR 0x00 /* PAN ID and address fields are not present */ +#define IEEE_802154_ADDR_MODE_RESERVED 0x01 /* Reserved */ +#define IEEE_802154_ADDR_MODE_SHORT 0x02 /* Address field contains a short address (16 bit) */ +#define IEEE_802154_ADDR_MODE_EXT 0x03 /* Address field contains an extended address (64 bit) */ + +/* IEEE 802.15.4 Frame Control definitions (2 bytes; see IEEE 802.15.4-2015 ch. 7.2.1) */ +#define IEEE_802154_FC_FT_MASK 0x0007 /* bits 0..2: Frame Type */ +#define IEEE_802154_FC_FT_BEACON 0x00 +#define IEEE_802154_FC_FT_DATA 0x01 +#define IEEE_802154_FC_FT_ACK 0x02 +#define IEEE_802154_FC_FT_MAC_CMD 0x03 +#define IEEE_802154_FC_FT_RESERVED 0x04 +#define IEEE_802154_FC_FT_MULTIPURPOSE 0x05 +#define IEEE_802154_FC_FT_FRAG 0x06 +#define IEEE_802154_FC_FT_EXT 0x07 +#define IEEE_802154_FC_SEC_EN 0x0008 /* bit 3: Security Enabled */ +#define IEEE_802154_FC_FRAME_PEND 0x0010 /* bit 4: Frame Pending */ +#define IEEE_802154_FC_ACK_REQ 0x0020 /* bit 5: AR (ACK required) */ +#define IEEE_802154_FC_PANID_COMPR 0x0040 /* bit 6: PAN ID Compression (src and dst are equal, src PAN ID omitted) */ +#define IEEE_802154_FC_RESERVED 0x0080 +#define IEEE_802154_FC_SEQNO_SUPPR 0x0100 /* bit 8: Sequence Number Suppression */ +#define IEEE_802154_FC_IE_PRESENT 0x0200 /* bit 9: IE Present */ +#define IEEE_802154_FC_DST_ADDR_MODE_MASK 0x0c00 /* bits 10..11: Destination Addressing Mode */ +#define IEEE_802154_FC_DST_ADDR_MODE_NO_ADDR (IEEE_802154_ADDR_MODE_NO_ADDR << 10) +#define IEEE_802154_FC_DST_ADDR_MODE_SHORT (IEEE_802154_ADDR_MODE_SHORT << 10) +#define IEEE_802154_FC_DST_ADDR_MODE_EXT (IEEE_802154_ADDR_MODE_EXT << 10) +#define IEEE_802154_FC_FRAME_VERSION_MASK 0x3000 /* bits 12..13: Frame Version */ +#define IEEE_802154_FC_FRAME_VERSION_GET(x) (((x) & IEEE_802154_FC_FRAME_VERSION_MASK) >> 12) +#define IEEE_802154_FC_SRC_ADDR_MODE_MASK 0xc000 /* bits 14..15: Source Addressing Mode */ +#define IEEE_802154_FC_SRC_ADDR_MODE_SHORT (IEEE_802154_ADDR_MODE_SHORT << 14) +#define IEEE_802154_FC_SRC_ADDR_MODE_EXT (IEEE_802154_ADDR_MODE_EXT << 14) + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_NETIF_IEEE802154_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/lowpan6.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/lowpan6.h new file mode 100644 index 0000000000000000000000000000000000000000..ecff24ba667e4ade513c76ead342eccb3f779d03 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/lowpan6.h @@ -0,0 +1,89 @@ +/** + * @file + * + * 6LowPAN output for IPv6. Uses ND tables for link-layer addressing. Fragments packets to 6LowPAN units. + */ + +/* + * Copyright (c) 2015 Inico Technologies Ltd. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Ivan Delamer + * + * + * Please coordinate changes and requests with Ivan Delamer + * + */ + +#ifndef LWIP_HDR_LOWPAN6_H +#define LWIP_HDR_LOWPAN6_H + +#include "netif/lowpan6_opts.h" + +#if LWIP_IPV6 + +#include "netif/lowpan6_common.h" +#include "lwip/pbuf.h" +#include "lwip/ip.h" +#include "lwip/ip_addr.h" +#include "lwip/netif.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** 1 second period for reassembly */ +#define LOWPAN6_TMR_INTERVAL 1000 + +void lowpan6_tmr(void); + +err_t lowpan6_set_context(u8_t idx, const ip6_addr_t * context); +err_t lowpan6_set_short_addr(u8_t addr_high, u8_t addr_low); + +#if LWIP_IPV4 +err_t lowpan4_output(struct netif *netif, struct pbuf *q, const ip4_addr_t *ipaddr); +#endif /* LWIP_IPV4 */ +err_t lowpan6_output(struct netif *netif, struct pbuf *q, const ip6_addr_t *ip6addr); +err_t lowpan6_input(struct pbuf * p, struct netif *netif); +err_t lowpan6_if_init(struct netif *netif); + +/* pan_id in network byte order. */ +err_t lowpan6_set_pan_id(u16_t pan_id); + +u16_t lowpan6_calc_crc(const void *buf, u16_t len); + +#if !NO_SYS +err_t tcpip_6lowpan_input(struct pbuf *p, struct netif *inp); +#endif /* !NO_SYS */ + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_IPV6 */ + +#endif /* LWIP_HDR_LOWPAN6_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/lowpan6_ble.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/lowpan6_ble.h new file mode 100644 index 0000000000000000000000000000000000000000..01896a7ff674fc7d86b4bfcaf2b5214351affed4 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/lowpan6_ble.h @@ -0,0 +1,78 @@ +/** + * @file + * 6LowPAN over BLE for IPv6 (RFC7668). + */ + +/* + * Copyright (c) 2017 Benjamin Aigner + * Copyright (c) 2015 Inico Technologies Ltd. , Author: Ivan Delamer + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * Author: Benjamin Aigner + * + * Based on the original 6lowpan implementation of lwIP ( @see 6lowpan.c) + */ + +#ifndef LWIP_HDR_LOWPAN6_BLE_H +#define LWIP_HDR_LOWPAN6_BLE_H + +#include "netif/lowpan6_opts.h" + +#if LWIP_IPV6 /* don't build if not configured for use in lwipopts.h */ + +#include "netif/lowpan6_common.h" +#include "lwip/pbuf.h" +#include "lwip/ip.h" +#include "lwip/ip_addr.h" +#include "lwip/netif.h" + +#ifdef __cplusplus +extern "C" { +#endif + +err_t rfc7668_output(struct netif *netif, struct pbuf *q, const ip6_addr_t *ip6addr); +err_t rfc7668_input(struct pbuf * p, struct netif *netif); +err_t rfc7668_set_local_addr_eui64(struct netif *netif, const u8_t *local_addr, size_t local_addr_len); +err_t rfc7668_set_local_addr_mac48(struct netif *netif, const u8_t *local_addr, size_t local_addr_len, int is_public_addr); +err_t rfc7668_set_peer_addr_eui64(struct netif *netif, const u8_t *peer_addr, size_t peer_addr_len); +err_t rfc7668_set_peer_addr_mac48(struct netif *netif, const u8_t *peer_addr, size_t peer_addr_len, int is_public_addr); +err_t rfc7668_set_context(u8_t index, const ip6_addr_t * context); +err_t rfc7668_if_init(struct netif *netif); + +#if !NO_SYS +err_t tcpip_rfc7668_input(struct pbuf *p, struct netif *inp); +#endif + +void ble_addr_to_eui64(uint8_t *dst, const uint8_t *src, int public_addr); +void eui64_to_ble_addr(uint8_t *dst, const uint8_t *src); + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_IPV6 */ + +#endif /* LWIP_HDR_LOWPAN6_BLE_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/lowpan6_common.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/lowpan6_common.h new file mode 100644 index 0000000000000000000000000000000000000000..0dc13ab5bfdec362f0cc769949808f08a1a7682a --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/lowpan6_common.h @@ -0,0 +1,82 @@ +/** + * @file + * + * Common 6LowPAN routines for IPv6. Uses ND tables for link-layer addressing. Fragments packets to 6LowPAN units. + */ + +/* + * Copyright (c) 2015 Inico Technologies Ltd. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Ivan Delamer + * + * + * Please coordinate changes and requests with Ivan Delamer + * + */ + +#ifndef LWIP_HDR_LOWPAN6_COMMON_H +#define LWIP_HDR_LOWPAN6_COMMON_H + +#include "netif/lowpan6_opts.h" + +#if LWIP_IPV6 /* don't build if IPv6 is disabled in lwipopts.h */ + +#include "lwip/pbuf.h" +#include "lwip/ip.h" +#include "lwip/ip6_addr.h" +#include "lwip/netif.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** Helper define for a link layer address, which can be encoded as 0, 2 or 8 bytes */ +struct lowpan6_link_addr { + /* encoded length of the address */ + u8_t addr_len; + /* address bytes */ + u8_t addr[8]; +}; + +s8_t lowpan6_get_address_mode(const ip6_addr_t *ip6addr, const struct lowpan6_link_addr *mac_addr); + +#if LWIP_6LOWPAN_IPHC +err_t lowpan6_compress_headers(struct netif *netif, u8_t *inbuf, size_t inbuf_size, u8_t *outbuf, size_t outbuf_size, + u8_t *lowpan6_header_len_out, u8_t *hidden_header_len_out, ip6_addr_t *lowpan6_contexts, + const struct lowpan6_link_addr *src, const struct lowpan6_link_addr *dst); +struct pbuf *lowpan6_decompress(struct pbuf *p, u16_t datagram_size, ip6_addr_t *lowpan6_contexts, + struct lowpan6_link_addr *src, struct lowpan6_link_addr *dest); +#endif /* LWIP_6LOWPAN_IPHC */ + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_IPV6 */ + +#endif /* LWIP_HDR_LOWPAN6_COMMON_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/lowpan6_opts.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/lowpan6_opts.h new file mode 100644 index 0000000000000000000000000000000000000000..17d46cdcc55956787f5c265bc5fa9df143985add --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/lowpan6_opts.h @@ -0,0 +1,122 @@ +/** + * @file + * 6LowPAN options list + */ + +/* + * Copyright (c) 2015 Inico Technologies Ltd. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Ivan Delamer + * + * + * Please coordinate changes and requests with Ivan Delamer + * + */ + +#ifndef LWIP_HDR_LOWPAN6_OPTS_H +#define LWIP_HDR_LOWPAN6_OPTS_H + +#include "lwip/opt.h" + +/** LWIP_6LOWPAN_NUM_CONTEXTS: define the number of compression + * contexts per netif type + */ +#ifndef LWIP_6LOWPAN_NUM_CONTEXTS +#define LWIP_6LOWPAN_NUM_CONTEXTS 10 +#endif + +/** LWIP_6LOWPAN_INFER_SHORT_ADDRESS: set this to 0 to disable creating + * short addresses for matching addresses (debug only) + */ +#ifndef LWIP_6LOWPAN_INFER_SHORT_ADDRESS +#define LWIP_6LOWPAN_INFER_SHORT_ADDRESS 1 +#endif + +/** LWIP_6LOWPAN_IPHC: set this to 0 to disable IP header compression as per + * RFC 6282 (which is mandatory for BLE) + */ +#ifndef LWIP_6LOWPAN_IPHC +#define LWIP_6LOWPAN_IPHC 1 +#endif + +/** Set this to 1 if your IEEE 802.15.4 interface can calculate and check the + * CRC in hardware. This means TX packets get 2 zero bytes added on transmission + * which are to be filled with the CRC. + */ +#ifndef LWIP_6LOWPAN_802154_HW_CRC +#define LWIP_6LOWPAN_802154_HW_CRC 0 +#endif + +/** If LWIP_6LOWPAN_802154_HW_CRC==0, this can override the default slow + * implementation of the CRC used for 6LoWPAN over IEEE 802.15.4 (which uses + * a shift register). + */ +#ifndef LWIP_6LOWPAN_CALC_CRC +#define LWIP_6LOWPAN_CALC_CRC(buf, len) lowpan6_calc_crc(buf, len) +#endif + +/** Debug level for 6LoWPAN in general */ +#ifndef LWIP_LOWPAN6_DEBUG +#define LWIP_LOWPAN6_DEBUG LWIP_DBG_OFF +#endif + +/** Debug level for 6LoWPAN over IEEE 802.15.4 */ +#ifndef LWIP_LOWPAN6_802154_DEBUG +#define LWIP_LOWPAN6_802154_DEBUG LWIP_DBG_OFF +#endif + +/** LWIP_LOWPAN6_IP_COMPRESSED_DEBUG: enable compressed IP frame + * output debugging + */ +#ifndef LWIP_LOWPAN6_IP_COMPRESSED_DEBUG +#define LWIP_LOWPAN6_IP_COMPRESSED_DEBUG LWIP_DBG_OFF +#endif + +/** LWIP_LOWPAN6_DECOMPRESSION_DEBUG: enable decompression debug output + */ +#ifndef LWIP_LOWPAN6_DECOMPRESSION_DEBUG +#define LWIP_LOWPAN6_DECOMPRESSION_DEBUG LWIP_DBG_OFF +#endif + +/** LWIP_RFC7668_IP_UNCOMPRESSED_DEBUG: enable decompressed IP frame + * output debugging */ +#ifndef LWIP_RFC7668_IP_UNCOMPRESSED_DEBUG +#define LWIP_RFC7668_IP_UNCOMPRESSED_DEBUG LWIP_DBG_OFF +#endif + +/** LWIP_RFC7668_LINUX_WORKAROUND_PUBLIC_ADDRESS: + * Currently, the linux kernel driver for 6lowpan sets/clears a bit in + * the address, depending on the BD address (either public or not). + * Might not be RFC7668 conform, so you may select to do that (=1) or + * not (=0) */ +#ifndef LWIP_RFC7668_LINUX_WORKAROUND_PUBLIC_ADDRESS +#define LWIP_RFC7668_LINUX_WORKAROUND_PUBLIC_ADDRESS 1 +#endif + + +#endif /* LWIP_HDR_LOWPAN6_OPTS_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/ccp.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/ccp.h new file mode 100644 index 0000000000000000000000000000000000000000..b2285228b8d32d9321dff76522ad832f9d09da6f --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/ccp.h @@ -0,0 +1,164 @@ +/* + * ccp.h - Definitions for PPP Compression Control Protocol. + * + * Copyright (c) 1994-2002 Paul Mackerras. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. The name(s) of the authors of this software must not be used to + * endorse or promote products derived from this software without + * prior written permission. + * + * 3. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by Paul Mackerras + * ". + * + * THE AUTHORS OF THIS SOFTWARE DISCLAIM ALL WARRANTIES WITH REGARD TO + * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY + * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * $Id: ccp.h,v 1.12 2004/11/04 10:02:26 paulus Exp $ + */ + +#include "netif/ppp/ppp_opts.h" +#if PPP_SUPPORT && CCP_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +#ifndef CCP_H +#define CCP_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * CCP codes. + */ + +#define CCP_CONFREQ 1 +#define CCP_CONFACK 2 +#define CCP_TERMREQ 5 +#define CCP_TERMACK 6 +#define CCP_RESETREQ 14 +#define CCP_RESETACK 15 + +/* + * Max # bytes for a CCP option + */ + +#define CCP_MAX_OPTION_LENGTH 32 + +/* + * Parts of a CCP packet. + */ + +#define CCP_CODE(dp) ((dp)[0]) +#define CCP_ID(dp) ((dp)[1]) +#define CCP_LENGTH(dp) (((dp)[2] << 8) + (dp)[3]) +#define CCP_HDRLEN 4 + +#define CCP_OPT_CODE(dp) ((dp)[0]) +#define CCP_OPT_LENGTH(dp) ((dp)[1]) +#define CCP_OPT_MINLEN 2 + +#if BSDCOMPRESS_SUPPORT +/* + * Definitions for BSD-Compress. + */ + +#define CI_BSD_COMPRESS 21 /* config. option for BSD-Compress */ +#define CILEN_BSD_COMPRESS 3 /* length of config. option */ + +/* Macros for handling the 3rd byte of the BSD-Compress config option. */ +#define BSD_NBITS(x) ((x) & 0x1F) /* number of bits requested */ +#define BSD_VERSION(x) ((x) >> 5) /* version of option format */ +#define BSD_CURRENT_VERSION 1 /* current version number */ +#define BSD_MAKE_OPT(v, n) (((v) << 5) | (n)) + +#define BSD_MIN_BITS 9 /* smallest code size supported */ +#define BSD_MAX_BITS 15 /* largest code size supported */ +#endif /* BSDCOMPRESS_SUPPORT */ + +#if DEFLATE_SUPPORT +/* + * Definitions for Deflate. + */ + +#define CI_DEFLATE 26 /* config option for Deflate */ +#define CI_DEFLATE_DRAFT 24 /* value used in original draft RFC */ +#define CILEN_DEFLATE 4 /* length of its config option */ + +#define DEFLATE_MIN_SIZE 9 +#define DEFLATE_MAX_SIZE 15 +#define DEFLATE_METHOD_VAL 8 +#define DEFLATE_SIZE(x) (((x) >> 4) + 8) +#define DEFLATE_METHOD(x) ((x) & 0x0F) +#define DEFLATE_MAKE_OPT(w) ((((w) - 8) << 4) + DEFLATE_METHOD_VAL) +#define DEFLATE_CHK_SEQUENCE 0 +#endif /* DEFLATE_SUPPORT */ + +#if MPPE_SUPPORT +/* + * Definitions for MPPE. + */ + +#define CI_MPPE 18 /* config option for MPPE */ +#define CILEN_MPPE 6 /* length of config option */ +#endif /* MPPE_SUPPORT */ + +#if PREDICTOR_SUPPORT +/* + * Definitions for other, as yet unsupported, compression methods. + */ + +#define CI_PREDICTOR_1 1 /* config option for Predictor-1 */ +#define CILEN_PREDICTOR_1 2 /* length of its config option */ +#define CI_PREDICTOR_2 2 /* config option for Predictor-2 */ +#define CILEN_PREDICTOR_2 2 /* length of its config option */ +#endif /* PREDICTOR_SUPPORT */ + +typedef struct ccp_options { +#if DEFLATE_SUPPORT + unsigned int deflate :1; /* do Deflate? */ + unsigned int deflate_correct :1; /* use correct code for deflate? */ + unsigned int deflate_draft :1; /* use draft RFC code for deflate? */ +#endif /* DEFLATE_SUPPORT */ +#if BSDCOMPRESS_SUPPORT + unsigned int bsd_compress :1; /* do BSD Compress? */ +#endif /* BSDCOMPRESS_SUPPORT */ +#if PREDICTOR_SUPPORT + unsigned int predictor_1 :1; /* do Predictor-1? */ + unsigned int predictor_2 :1; /* do Predictor-2? */ +#endif /* PREDICTOR_SUPPORT */ + +#if MPPE_SUPPORT + u8_t mppe; /* MPPE bitfield */ +#endif /* MPPE_SUPPORT */ +#if BSDCOMPRESS_SUPPORT + u_short bsd_bits; /* # bits/code for BSD Compress */ +#endif /* BSDCOMPRESS_SUPPORT */ +#if DEFLATE_SUPPORT + u_short deflate_size; /* lg(window size) for Deflate */ +#endif /* DEFLATE_SUPPORT */ + u8_t method; /* code for chosen compression method */ +} ccp_options; + +extern const struct protent ccp_protent; + +void ccp_resetrequest(ppp_pcb *pcb); /* Issue a reset-request. */ + +#ifdef __cplusplus +} +#endif + +#endif /* CCP_H */ +#endif /* PPP_SUPPORT && CCP_SUPPORT */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/chap-md5.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/chap-md5.h new file mode 100644 index 0000000000000000000000000000000000000000..eb0269fe5086dc998b1aafb66d9ad87cdd33ad92 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/chap-md5.h @@ -0,0 +1,36 @@ +/* + * chap-md5.h - New CHAP/MD5 implementation. + * + * Copyright (c) 2003 Paul Mackerras. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. The name(s) of the authors of this software must not be used to + * endorse or promote products derived from this software without + * prior written permission. + * + * 3. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by Paul Mackerras + * ". + * + * THE AUTHORS OF THIS SOFTWARE DISCLAIM ALL WARRANTIES WITH REGARD TO + * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY + * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include "netif/ppp/ppp_opts.h" +#if PPP_SUPPORT && CHAP_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +extern const struct chap_digest_type md5_digest; + +#endif /* PPP_SUPPORT && CHAP_SUPPORT */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/chap-new.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/chap-new.h new file mode 100644 index 0000000000000000000000000000000000000000..2d8cd9ca9902ab7e02022f6e68812dc9c2fe283d --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/chap-new.h @@ -0,0 +1,200 @@ +/* + * chap-new.c - New CHAP implementation. + * + * Copyright (c) 2003 Paul Mackerras. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. The name(s) of the authors of this software must not be used to + * endorse or promote products derived from this software without + * prior written permission. + * + * 3. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by Paul Mackerras + * ". + * + * THE AUTHORS OF THIS SOFTWARE DISCLAIM ALL WARRANTIES WITH REGARD TO + * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY + * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include "netif/ppp/ppp_opts.h" +#if PPP_SUPPORT && CHAP_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +#ifndef CHAP_H +#define CHAP_H + +#include "ppp.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * CHAP packets begin with a standard header with code, id, len (2 bytes). + */ +#define CHAP_HDRLEN 4 + +/* + * Values for the code field. + */ +#define CHAP_CHALLENGE 1 +#define CHAP_RESPONSE 2 +#define CHAP_SUCCESS 3 +#define CHAP_FAILURE 4 + +/* + * CHAP digest codes. + */ +#define CHAP_MD5 5 +#if MSCHAP_SUPPORT +#define CHAP_MICROSOFT 0x80 +#define CHAP_MICROSOFT_V2 0x81 +#endif /* MSCHAP_SUPPORT */ + +/* + * Semi-arbitrary limits on challenge and response fields. + */ +#define MAX_CHALLENGE_LEN 64 +#define MAX_RESPONSE_LEN 64 + +/* + * These limits apply to challenge and response packets we send. + * The +4 is the +1 that we actually need rounded up. + */ +#define CHAL_MAX_PKTLEN (PPP_HDRLEN + CHAP_HDRLEN + 4 + MAX_CHALLENGE_LEN + MAXNAMELEN) +#define RESP_MAX_PKTLEN (PPP_HDRLEN + CHAP_HDRLEN + 4 + MAX_RESPONSE_LEN + MAXNAMELEN) + +/* bitmask of supported algorithms */ +#if MSCHAP_SUPPORT +#define MDTYPE_MICROSOFT_V2 0x1 +#define MDTYPE_MICROSOFT 0x2 +#endif /* MSCHAP_SUPPORT */ +#define MDTYPE_MD5 0x4 +#define MDTYPE_NONE 0 + +#if MSCHAP_SUPPORT +/* Return the digest alg. ID for the most preferred digest type. */ +#define CHAP_DIGEST(mdtype) \ + ((mdtype) & MDTYPE_MD5)? CHAP_MD5: \ + ((mdtype) & MDTYPE_MICROSOFT_V2)? CHAP_MICROSOFT_V2: \ + ((mdtype) & MDTYPE_MICROSOFT)? CHAP_MICROSOFT: \ + 0 +#else /* !MSCHAP_SUPPORT */ +#define CHAP_DIGEST(mdtype) \ + ((mdtype) & MDTYPE_MD5)? CHAP_MD5: \ + 0 +#endif /* MSCHAP_SUPPORT */ + +/* Return the bit flag (lsb set) for our most preferred digest type. */ +#define CHAP_MDTYPE(mdtype) ((mdtype) ^ ((mdtype) - 1)) & (mdtype) + +/* Return the bit flag for a given digest algorithm ID. */ +#if MSCHAP_SUPPORT +#define CHAP_MDTYPE_D(digest) \ + ((digest) == CHAP_MICROSOFT_V2)? MDTYPE_MICROSOFT_V2: \ + ((digest) == CHAP_MICROSOFT)? MDTYPE_MICROSOFT: \ + ((digest) == CHAP_MD5)? MDTYPE_MD5: \ + 0 +#else /* !MSCHAP_SUPPORT */ +#define CHAP_MDTYPE_D(digest) \ + ((digest) == CHAP_MD5)? MDTYPE_MD5: \ + 0 +#endif /* MSCHAP_SUPPORT */ + +/* Can we do the requested digest? */ +#if MSCHAP_SUPPORT +#define CHAP_CANDIGEST(mdtype, digest) \ + ((digest) == CHAP_MICROSOFT_V2)? (mdtype) & MDTYPE_MICROSOFT_V2: \ + ((digest) == CHAP_MICROSOFT)? (mdtype) & MDTYPE_MICROSOFT: \ + ((digest) == CHAP_MD5)? (mdtype) & MDTYPE_MD5: \ + 0 +#else /* !MSCHAP_SUPPORT */ +#define CHAP_CANDIGEST(mdtype, digest) \ + ((digest) == CHAP_MD5)? (mdtype) & MDTYPE_MD5: \ + 0 +#endif /* MSCHAP_SUPPORT */ + +/* + * The code for each digest type has to supply one of these. + */ +struct chap_digest_type { + int code; + +#if PPP_SERVER + /* + * Note: challenge and response arguments below are formatted as + * a length byte followed by the actual challenge/response data. + */ + void (*generate_challenge)(ppp_pcb *pcb, unsigned char *challenge); + int (*verify_response)(ppp_pcb *pcb, int id, const char *name, + const unsigned char *secret, int secret_len, + const unsigned char *challenge, const unsigned char *response, + char *message, int message_space); +#endif /* PPP_SERVER */ + void (*make_response)(ppp_pcb *pcb, unsigned char *response, int id, const char *our_name, + const unsigned char *challenge, const char *secret, int secret_len, + unsigned char *priv); + int (*check_success)(ppp_pcb *pcb, unsigned char *pkt, int len, unsigned char *priv); + void (*handle_failure)(ppp_pcb *pcb, unsigned char *pkt, int len); +}; + +/* + * Each interface is described by chap structure. + */ +#if CHAP_SUPPORT +typedef struct chap_client_state { + u8_t flags; + const char *name; + const struct chap_digest_type *digest; + unsigned char priv[64]; /* private area for digest's use */ +} chap_client_state; + +#if PPP_SERVER +typedef struct chap_server_state { + u8_t flags; + u8_t id; + const char *name; + const struct chap_digest_type *digest; + int challenge_xmits; + int challenge_pktlen; + unsigned char challenge[CHAL_MAX_PKTLEN]; +} chap_server_state; +#endif /* PPP_SERVER */ +#endif /* CHAP_SUPPORT */ + +#if 0 /* UNUSED */ +/* Hook for a plugin to validate CHAP challenge */ +extern int (*chap_verify_hook)(char *name, char *ourname, int id, + const struct chap_digest_type *digest, + unsigned char *challenge, unsigned char *response, + char *message, int message_space); +#endif /* UNUSED */ + +#if PPP_SERVER +/* Called by authentication code to start authenticating the peer. */ +extern void chap_auth_peer(ppp_pcb *pcb, const char *our_name, int digest_code); +#endif /* PPP_SERVER */ + +/* Called by auth. code to start authenticating us to the peer. */ +extern void chap_auth_with_peer(ppp_pcb *pcb, const char *our_name, int digest_code); + +/* Represents the CHAP protocol to the main pppd code */ +extern const struct protent chap_protent; + +#ifdef __cplusplus +} +#endif + +#endif /* CHAP_H */ +#endif /* PPP_SUPPORT && CHAP_SUPPORT */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/chap_ms.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/chap_ms.h new file mode 100644 index 0000000000000000000000000000000000000000..0795291158fd9bdc85e3a73b379c45e08f2ba278 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/chap_ms.h @@ -0,0 +1,44 @@ +/* + * chap_ms.h - Challenge Handshake Authentication Protocol definitions. + * + * Copyright (c) 1995 Eric Rosenquist. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The name(s) of the authors of this software must not be used to + * endorse or promote products derived from this software without + * prior written permission. + * + * THE AUTHORS OF THIS SOFTWARE DISCLAIM ALL WARRANTIES WITH REGARD TO + * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY + * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * $Id: chap_ms.h,v 1.13 2004/11/15 22:13:26 paulus Exp $ + */ + +#include "netif/ppp/ppp_opts.h" +#if PPP_SUPPORT && MSCHAP_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +#ifndef CHAPMS_INCLUDE +#define CHAPMS_INCLUDE + +extern const struct chap_digest_type chapms_digest; +extern const struct chap_digest_type chapms2_digest; + +#endif /* CHAPMS_INCLUDE */ + +#endif /* PPP_SUPPORT && MSCHAP_SUPPORT */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/eap.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/eap.h new file mode 100644 index 0000000000000000000000000000000000000000..3ee9aaf81ae66029819ef7818449ae61b307a5e2 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/eap.h @@ -0,0 +1,169 @@ +/* + * eap.h - Extensible Authentication Protocol for PPP (RFC 2284) + * + * Copyright (c) 2001 by Sun Microsystems, Inc. + * All rights reserved. + * + * Non-exclusive rights to redistribute, modify, translate, and use + * this software in source and binary forms, in whole or in part, is + * hereby granted, provided that the above copyright notice is + * duplicated in any source form, and that neither the name of the + * copyright holder nor the author is used to endorse or promote + * products derived from this software. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. + * + * Original version by James Carlson + * + * $Id: eap.h,v 1.2 2003/06/11 23:56:26 paulus Exp $ + */ + +#include "netif/ppp/ppp_opts.h" +#if PPP_SUPPORT && EAP_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +#ifndef PPP_EAP_H +#define PPP_EAP_H + +#include "ppp.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Packet header = Code, id, length. + */ +#define EAP_HEADERLEN 4 + + +/* EAP message codes. */ +#define EAP_REQUEST 1 +#define EAP_RESPONSE 2 +#define EAP_SUCCESS 3 +#define EAP_FAILURE 4 + +/* EAP types */ +#define EAPT_IDENTITY 1 +#define EAPT_NOTIFICATION 2 +#define EAPT_NAK 3 /* (response only) */ +#define EAPT_MD5CHAP 4 +#define EAPT_OTP 5 /* One-Time Password; RFC 1938 */ +#define EAPT_TOKEN 6 /* Generic Token Card */ +/* 7 and 8 are unassigned. */ +#define EAPT_RSA 9 /* RSA Public Key Authentication */ +#define EAPT_DSS 10 /* DSS Unilateral */ +#define EAPT_KEA 11 /* KEA */ +#define EAPT_KEA_VALIDATE 12 /* KEA-VALIDATE */ +#define EAPT_TLS 13 /* EAP-TLS */ +#define EAPT_DEFENDER 14 /* Defender Token (AXENT) */ +#define EAPT_W2K 15 /* Windows 2000 EAP */ +#define EAPT_ARCOT 16 /* Arcot Systems */ +#define EAPT_CISCOWIRELESS 17 /* Cisco Wireless */ +#define EAPT_NOKIACARD 18 /* Nokia IP smart card */ +#define EAPT_SRP 19 /* Secure Remote Password */ +/* 20 is deprecated */ + +/* EAP SRP-SHA1 Subtypes */ +#define EAPSRP_CHALLENGE 1 /* Request 1 - Challenge */ +#define EAPSRP_CKEY 1 /* Response 1 - Client Key */ +#define EAPSRP_SKEY 2 /* Request 2 - Server Key */ +#define EAPSRP_CVALIDATOR 2 /* Response 2 - Client Validator */ +#define EAPSRP_SVALIDATOR 3 /* Request 3 - Server Validator */ +#define EAPSRP_ACK 3 /* Response 3 - final ack */ +#define EAPSRP_LWRECHALLENGE 4 /* Req/resp 4 - Lightweight rechal */ + +#define SRPVAL_EBIT 0x00000001 /* Use shared key for ECP */ + +#define SRP_PSEUDO_ID "pseudo_" +#define SRP_PSEUDO_LEN 7 + +#define MD5_SIGNATURE_SIZE 16 +#define EAP_MIN_CHALLENGE_LENGTH 17 +#define EAP_MAX_CHALLENGE_LENGTH 24 +#define EAP_MIN_MAX_POWER_OF_TWO_CHALLENGE_LENGTH 3 /* 2^3-1 = 7, 17+7 = 24 */ + +#define EAP_STATES \ + "Initial", "Pending", "Closed", "Listen", "Identify", \ + "SRP1", "SRP2", "SRP3", "MD5Chall", "Open", "SRP4", "BadAuth" + +#define eap_client_active(pcb) ((pcb)->eap.es_client.ea_state == eapListen) +#if PPP_SERVER +#define eap_server_active(pcb) \ + ((pcb)->eap.es_server.ea_state >= eapIdentify && \ + (pcb)->eap.es_server.ea_state <= eapMD5Chall) +#endif /* PPP_SERVER */ + +/* + * Complete EAP state for one PPP session. + */ +enum eap_state_code { + eapInitial = 0, /* No EAP authentication yet requested */ + eapPending, /* Waiting for LCP (no timer) */ + eapClosed, /* Authentication not in use */ + eapListen, /* Client ready (and timer running) */ + eapIdentify, /* EAP Identify sent */ + eapSRP1, /* Sent EAP SRP-SHA1 Subtype 1 */ + eapSRP2, /* Sent EAP SRP-SHA1 Subtype 2 */ + eapSRP3, /* Sent EAP SRP-SHA1 Subtype 3 */ + eapMD5Chall, /* Sent MD5-Challenge */ + eapOpen, /* Completed authentication */ + eapSRP4, /* Sent EAP SRP-SHA1 Subtype 4 */ + eapBadAuth /* Failed authentication */ +}; + +struct eap_auth { + const char *ea_name; /* Our name */ + char ea_peer[MAXNAMELEN +1]; /* Peer's name */ + void *ea_session; /* Authentication library linkage */ + u_char *ea_skey; /* Shared encryption key */ + u_short ea_namelen; /* Length of our name */ + u_short ea_peerlen; /* Length of peer's name */ + enum eap_state_code ea_state; + u_char ea_id; /* Current id */ + u_char ea_requests; /* Number of Requests sent/received */ + u_char ea_responses; /* Number of Responses */ + u_char ea_type; /* One of EAPT_* */ + u32_t ea_keyflags; /* SRP shared key usage flags */ +}; + +#ifndef EAP_MAX_CHALLENGE_LENGTH +#define EAP_MAX_CHALLENGE_LENGTH 24 +#endif +typedef struct eap_state { + struct eap_auth es_client; /* Client (authenticatee) data */ +#if PPP_SERVER + struct eap_auth es_server; /* Server (authenticator) data */ +#endif /* PPP_SERVER */ + int es_savedtime; /* Saved timeout */ + int es_rechallenge; /* EAP rechallenge interval */ + int es_lwrechallenge; /* SRP lightweight rechallenge inter */ + u8_t es_usepseudo; /* Use SRP Pseudonym if offered one */ + int es_usedpseudo; /* Set if we already sent PN */ + int es_challen; /* Length of challenge string */ + u_char es_challenge[EAP_MAX_CHALLENGE_LENGTH]; +} eap_state; + +/* + * Timeouts. + */ +#if 0 /* moved to ppp_opts.h */ +#define EAP_DEFTIMEOUT 3 /* Timeout (seconds) for rexmit */ +#define EAP_DEFTRANSMITS 10 /* max # times to transmit */ +#define EAP_DEFREQTIME 20 /* Time to wait for peer request */ +#define EAP_DEFALLOWREQ 20 /* max # times to accept requests */ +#endif /* moved to ppp_opts.h */ + +void eap_authwithpeer(ppp_pcb *pcb, const char *localname); +void eap_authpeer(ppp_pcb *pcb, const char *localname); + +extern const struct protent eap_protent; + +#ifdef __cplusplus +} +#endif + +#endif /* PPP_EAP_H */ + +#endif /* PPP_SUPPORT && EAP_SUPPORT */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/ecp.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/ecp.h new file mode 100644 index 0000000000000000000000000000000000000000..d8808c3ab24c94df06af99ff0bdae6d2d10317bd --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/ecp.h @@ -0,0 +1,62 @@ +/* + * ecp.h - Definitions for PPP Encryption Control Protocol. + * + * Copyright (c) 2002 Google, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The name(s) of the authors of this software must not be used to + * endorse or promote products derived from this software without + * prior written permission. + * + * THE AUTHORS OF THIS SOFTWARE DISCLAIM ALL WARRANTIES WITH REGARD TO + * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY + * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * $Id: ecp.h,v 1.2 2003/01/10 07:12:36 fcusack Exp $ + */ + +#include "netif/ppp/ppp_opts.h" +#if PPP_SUPPORT && ECP_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +#ifndef ECP_H +#define ECP_H + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct ecp_options { + bool required; /* Is ECP required? */ + unsigned enctype; /* Encryption type */ +} ecp_options; + +extern fsm ecp_fsm[]; +extern ecp_options ecp_wantoptions[]; +extern ecp_options ecp_gotoptions[]; +extern ecp_options ecp_allowoptions[]; +extern ecp_options ecp_hisoptions[]; + +extern const struct protent ecp_protent; + +#ifdef __cplusplus +} +#endif + +#endif /* ECP_H */ +#endif /* PPP_SUPPORT && ECP_SUPPORT */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/eui64.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/eui64.h new file mode 100644 index 0000000000000000000000000000000000000000..5adeb482a8f036e16d73d69740307ae1dbb4c6ed --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/eui64.h @@ -0,0 +1,102 @@ +/* + * eui64.h - EUI64 routines for IPv6CP. + * + * Copyright (c) 1999 Tommi Komulainen. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The name(s) of the authors of this software must not be used to + * endorse or promote products derived from this software without + * prior written permission. + * + * 4. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by Tommi Komulainen + * ". + * + * THE AUTHORS OF THIS SOFTWARE DISCLAIM ALL WARRANTIES WITH REGARD TO + * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY + * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * $Id: eui64.h,v 1.6 2002/12/04 23:03:32 paulus Exp $ +*/ + +#include "netif/ppp/ppp_opts.h" +#if PPP_SUPPORT && PPP_IPV6_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +#ifndef EUI64_H +#define EUI64_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * @todo: + * + * Maybe this should be done by processing struct in6_addr directly... + */ +typedef union +{ + u8_t e8[8]; + u16_t e16[4]; + u32_t e32[2]; +} eui64_t; + +#define eui64_iszero(e) (((e).e32[0] | (e).e32[1]) == 0) +#define eui64_equals(e, o) (((e).e32[0] == (o).e32[0]) && \ + ((e).e32[1] == (o).e32[1])) +#define eui64_zero(e) (e).e32[0] = (e).e32[1] = 0; + +#define eui64_copy(s, d) memcpy(&(d), &(s), sizeof(eui64_t)) + +#define eui64_magic(e) do { \ + (e).e32[0] = magic(); \ + (e).e32[1] = magic(); \ + (e).e8[0] &= ~2; \ + } while (0) +#define eui64_magic_nz(x) do { \ + eui64_magic(x); \ + } while (eui64_iszero(x)) +#define eui64_magic_ne(x, y) do { \ + eui64_magic(x); \ + } while (eui64_equals(x, y)) + +#define eui64_get(ll, cp) do { \ + eui64_copy((*cp), (ll)); \ + (cp) += sizeof(eui64_t); \ + } while (0) + +#define eui64_put(ll, cp) do { \ + eui64_copy((ll), (*cp)); \ + (cp) += sizeof(eui64_t); \ + } while (0) + +#define eui64_set32(e, l) do { \ + (e).e32[0] = 0; \ + (e).e32[1] = lwip_htonl(l); \ + } while (0) +#define eui64_setlo32(e, l) eui64_set32(e, l) + +char *eui64_ntoa(eui64_t); /* Returns ascii representation of id */ + +#ifdef __cplusplus +} +#endif + +#endif /* EUI64_H */ +#endif /* PPP_SUPPORT && PPP_IPV6_SUPPORT */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/fsm.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/fsm.h new file mode 100644 index 0000000000000000000000000000000000000000..8dec700e07ff0e720aeea685bef1df69d2b7b6ca --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/fsm.h @@ -0,0 +1,182 @@ +/* + * fsm.h - {Link, IP} Control Protocol Finite State Machine definitions. + * + * Copyright (c) 1984-2000 Carnegie Mellon University. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The name "Carnegie Mellon University" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For permission or any legal + * details, please contact + * Office of Technology Transfer + * Carnegie Mellon University + * 5000 Forbes Avenue + * Pittsburgh, PA 15213-3890 + * (412) 268-4387, fax: (412) 268-7395 + * tech-transfer@andrew.cmu.edu + * + * 4. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by Computing Services + * at Carnegie Mellon University (http://www.cmu.edu/computing/)." + * + * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO + * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE + * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * $Id: fsm.h,v 1.10 2004/11/13 02:28:15 paulus Exp $ + */ + +#include "netif/ppp/ppp_opts.h" +#if PPP_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +#ifndef FSM_H +#define FSM_H + +#include "ppp.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Packet header = Code, id, length. + */ +#define HEADERLEN 4 + + +/* + * CP (LCP, IPCP, etc.) codes. + */ +#define CONFREQ 1 /* Configuration Request */ +#define CONFACK 2 /* Configuration Ack */ +#define CONFNAK 3 /* Configuration Nak */ +#define CONFREJ 4 /* Configuration Reject */ +#define TERMREQ 5 /* Termination Request */ +#define TERMACK 6 /* Termination Ack */ +#define CODEREJ 7 /* Code Reject */ + + +/* + * Each FSM is described by an fsm structure and fsm callbacks. + */ +typedef struct fsm { + ppp_pcb *pcb; /* PPP Interface */ + const struct fsm_callbacks *callbacks; /* Callback routines */ + const char *term_reason; /* Reason for closing protocol */ + u8_t seen_ack; /* Have received valid Ack/Nak/Rej to Req */ + /* -- This is our only flag, we might use u_int :1 if we have more flags */ + u16_t protocol; /* Data Link Layer Protocol field value */ + u8_t state; /* State */ + u8_t flags; /* Contains option bits */ + u8_t id; /* Current id */ + u8_t reqid; /* Current request id */ + u8_t retransmits; /* Number of retransmissions left */ + u8_t nakloops; /* Number of nak loops since last ack */ + u8_t rnakloops; /* Number of naks received */ + u8_t maxnakloops; /* Maximum number of nak loops tolerated + (necessary because IPCP require a custom large max nak loops value) */ + u8_t term_reason_len; /* Length of term_reason */ +} fsm; + + +typedef struct fsm_callbacks { + void (*resetci) /* Reset our Configuration Information */ + (fsm *); + int (*cilen) /* Length of our Configuration Information */ + (fsm *); + void (*addci) /* Add our Configuration Information */ + (fsm *, u_char *, int *); + int (*ackci) /* ACK our Configuration Information */ + (fsm *, u_char *, int); + int (*nakci) /* NAK our Configuration Information */ + (fsm *, u_char *, int, int); + int (*rejci) /* Reject our Configuration Information */ + (fsm *, u_char *, int); + int (*reqci) /* Request peer's Configuration Information */ + (fsm *, u_char *, int *, int); + void (*up) /* Called when fsm reaches PPP_FSM_OPENED state */ + (fsm *); + void (*down) /* Called when fsm leaves PPP_FSM_OPENED state */ + (fsm *); + void (*starting) /* Called when we want the lower layer */ + (fsm *); + void (*finished) /* Called when we don't want the lower layer */ + (fsm *); + void (*protreject) /* Called when Protocol-Reject received */ + (int); + void (*retransmit) /* Retransmission is necessary */ + (fsm *); + int (*extcode) /* Called when unknown code received */ + (fsm *, int, int, u_char *, int); + const char *proto_name; /* String name for protocol (for messages) */ +} fsm_callbacks; + + +/* + * Link states. + */ +#define PPP_FSM_INITIAL 0 /* Down, hasn't been opened */ +#define PPP_FSM_STARTING 1 /* Down, been opened */ +#define PPP_FSM_CLOSED 2 /* Up, hasn't been opened */ +#define PPP_FSM_STOPPED 3 /* Open, waiting for down event */ +#define PPP_FSM_CLOSING 4 /* Terminating the connection, not open */ +#define PPP_FSM_STOPPING 5 /* Terminating, but open */ +#define PPP_FSM_REQSENT 6 /* We've sent a Config Request */ +#define PPP_FSM_ACKRCVD 7 /* We've received a Config Ack */ +#define PPP_FSM_ACKSENT 8 /* We've sent a Config Ack */ +#define PPP_FSM_OPENED 9 /* Connection available */ + + +/* + * Flags - indicate options controlling FSM operation + */ +#define OPT_PASSIVE 1 /* Don't die if we don't get a response */ +#define OPT_RESTART 2 /* Treat 2nd OPEN as DOWN, UP */ +#define OPT_SILENT 4 /* Wait for peer to speak first */ + + +/* + * Timeouts. + */ +#if 0 /* moved to ppp_opts.h */ +#define DEFTIMEOUT 3 /* Timeout time in seconds */ +#define DEFMAXTERMREQS 2 /* Maximum Terminate-Request transmissions */ +#define DEFMAXCONFREQS 10 /* Maximum Configure-Request transmissions */ +#define DEFMAXNAKLOOPS 5 /* Maximum number of nak loops */ +#endif /* moved to ppp_opts.h */ + + +/* + * Prototypes + */ +void fsm_init(fsm *f); +void fsm_lowerup(fsm *f); +void fsm_lowerdown(fsm *f); +void fsm_open(fsm *f); +void fsm_close(fsm *f, const char *reason); +void fsm_input(fsm *f, u_char *inpacket, int l); +void fsm_protreject(fsm *f); +void fsm_sdata(fsm *f, u_char code, u_char id, const u_char *data, int datalen); + +#ifdef __cplusplus +} +#endif + +#endif /* FSM_H */ +#endif /* PPP_SUPPORT */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/ipcp.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/ipcp.h new file mode 100644 index 0000000000000000000000000000000000000000..32fdd1c641ea6b61d1cd553fdb1f85d958ab7b92 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/ipcp.h @@ -0,0 +1,134 @@ +/* + * ipcp.h - IP Control Protocol definitions. + * + * Copyright (c) 1984-2000 Carnegie Mellon University. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The name "Carnegie Mellon University" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For permission or any legal + * details, please contact + * Office of Technology Transfer + * Carnegie Mellon University + * 5000 Forbes Avenue + * Pittsburgh, PA 15213-3890 + * (412) 268-4387, fax: (412) 268-7395 + * tech-transfer@andrew.cmu.edu + * + * 4. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by Computing Services + * at Carnegie Mellon University (http://www.cmu.edu/computing/)." + * + * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO + * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE + * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * $Id: ipcp.h,v 1.14 2002/12/04 23:03:32 paulus Exp $ + */ + +#include "netif/ppp/ppp_opts.h" +#if PPP_SUPPORT && PPP_IPV4_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +#ifndef IPCP_H +#define IPCP_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Options. + */ +#define CI_ADDRS 1 /* IP Addresses */ +#if VJ_SUPPORT +#define CI_COMPRESSTYPE 2 /* Compression Type */ +#endif /* VJ_SUPPORT */ +#define CI_ADDR 3 + +#if LWIP_DNS +#define CI_MS_DNS1 129 /* Primary DNS value */ +#define CI_MS_DNS2 131 /* Secondary DNS value */ +#endif /* LWIP_DNS */ +#if 0 /* UNUSED - WINS */ +#define CI_MS_WINS1 130 /* Primary WINS value */ +#define CI_MS_WINS2 132 /* Secondary WINS value */ +#endif /* UNUSED - WINS */ + +#if VJ_SUPPORT +#define MAX_STATES 16 /* from slcompress.h */ + +#define IPCP_VJMODE_OLD 1 /* "old" mode (option # = 0x0037) */ +#define IPCP_VJMODE_RFC1172 2 /* "old-rfc"mode (option # = 0x002d) */ +#define IPCP_VJMODE_RFC1332 3 /* "new-rfc"mode (option # = 0x002d, */ + /* maxslot and slot number compression) */ + +#define IPCP_VJ_COMP 0x002d /* current value for VJ compression option*/ +#define IPCP_VJ_COMP_OLD 0x0037 /* "old" (i.e, broken) value for VJ */ + /* compression option*/ +#endif /* VJ_SUPPORT */ + +typedef struct ipcp_options { + unsigned int neg_addr :1; /* Negotiate IP Address? */ + unsigned int old_addrs :1; /* Use old (IP-Addresses) option? */ + unsigned int req_addr :1; /* Ask peer to send IP address? */ +#if 0 /* UNUSED */ + unsigned int default_route :1; /* Assign default route through interface? */ + unsigned int replace_default_route :1; /* Replace default route through interface? */ +#endif /* UNUSED */ +#if 0 /* UNUSED - PROXY ARP */ + unsigned int proxy_arp :1; /* Make proxy ARP entry for peer? */ +#endif /* UNUSED - PROXY ARP */ +#if VJ_SUPPORT + unsigned int neg_vj :1; /* Van Jacobson Compression? */ + unsigned int old_vj :1; /* use old (short) form of VJ option? */ + unsigned int cflag :1; +#endif /* VJ_SUPPORT */ + unsigned int accept_local :1; /* accept peer's value for ouraddr */ + unsigned int accept_remote :1; /* accept peer's value for hisaddr */ +#if LWIP_DNS + unsigned int req_dns1 :1; /* Ask peer to send primary DNS address? */ + unsigned int req_dns2 :1; /* Ask peer to send secondary DNS address? */ +#endif /* LWIP_DNS */ + + u32_t ouraddr, hisaddr; /* Addresses in NETWORK BYTE ORDER */ +#if LWIP_DNS + u32_t dnsaddr[2]; /* Primary and secondary MS DNS entries */ +#endif /* LWIP_DNS */ +#if 0 /* UNUSED - WINS */ + u32_t winsaddr[2]; /* Primary and secondary MS WINS entries */ +#endif /* UNUSED - WINS */ + +#if VJ_SUPPORT + u16_t vj_protocol; /* protocol value to use in VJ option */ + u8_t maxslotindex; /* values for RFC1332 VJ compression neg. */ +#endif /* VJ_SUPPORT */ +} ipcp_options; + +#if 0 /* UNUSED, already defined by lwIP */ +char *ip_ntoa (u32_t); +#endif /* UNUSED, already defined by lwIP */ + +extern const struct protent ipcp_protent; + +#ifdef __cplusplus +} +#endif + +#endif /* IPCP_H */ +#endif /* PPP_SUPPORT && PPP_IPV4_SUPPORT */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/ipv6cp.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/ipv6cp.h new file mode 100644 index 0000000000000000000000000000000000000000..9099973869691e95c79b60f7b7e967e9f81a39a0 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/ipv6cp.h @@ -0,0 +1,191 @@ +/* + * ipv6cp.h - PPP IPV6 Control Protocol. + * + * Copyright (c) 1999 Tommi Komulainen. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The name(s) of the authors of this software must not be used to + * endorse or promote products derived from this software without + * prior written permission. + * + * 4. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by Tommi Komulainen + * ". + * + * THE AUTHORS OF THIS SOFTWARE DISCLAIM ALL WARRANTIES WITH REGARD TO + * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY + * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ + +/* Original version, based on RFC2023 : + + Copyright (c) 1995, 1996, 1997 Francis.Dupont@inria.fr, INRIA Rocquencourt, + Alain.Durand@imag.fr, IMAG, + Jean-Luc.Richier@imag.fr, IMAG-LSR. + + Copyright (c) 1998, 1999 Francis.Dupont@inria.fr, GIE DYADE, + Alain.Durand@imag.fr, IMAG, + Jean-Luc.Richier@imag.fr, IMAG-LSR. + + Ce travail a été fait au sein du GIE DYADE (Groupement d'Intérêt + Économique ayant pour membres BULL S.A. et l'INRIA). + + Ce logiciel informatique est disponible aux conditions + usuelles dans la recherche, c'est-à-dire qu'il peut + être utilisé, copié, modifié, distribué à l'unique + condition que ce texte soit conservé afin que + l'origine de ce logiciel soit reconnue. + + Le nom de l'Institut National de Recherche en Informatique + et en Automatique (INRIA), de l'IMAG, ou d'une personne morale + ou physique ayant participé à l'élaboration de ce logiciel ne peut + être utilisé sans son accord préalable explicite. + + Ce logiciel est fourni tel quel sans aucune garantie, + support ou responsabilité d'aucune sorte. + Ce logiciel est dérivé de sources d'origine + "University of California at Berkeley" et + "Digital Equipment Corporation" couvertes par des copyrights. + + L'Institut d'Informatique et de Mathématiques Appliquées de Grenoble (IMAG) + est une fédération d'unités mixtes de recherche du CNRS, de l'Institut National + Polytechnique de Grenoble et de l'Université Joseph Fourier regroupant + sept laboratoires dont le laboratoire Logiciels, Systèmes, Réseaux (LSR). + + This work has been done in the context of GIE DYADE (joint R & D venture + between BULL S.A. and INRIA). + + This software is available with usual "research" terms + with the aim of retain credits of the software. + Permission to use, copy, modify and distribute this software for any + purpose and without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies, + and the name of INRIA, IMAG, or any contributor not be used in advertising + or publicity pertaining to this material without the prior explicit + permission. The software is provided "as is" without any + warranties, support or liabilities of any kind. + This software is derived from source code from + "University of California at Berkeley" and + "Digital Equipment Corporation" protected by copyrights. + + Grenoble's Institute of Computer Science and Applied Mathematics (IMAG) + is a federation of seven research units funded by the CNRS, National + Polytechnic Institute of Grenoble and University Joseph Fourier. + The research unit in Software, Systems, Networks (LSR) is member of IMAG. +*/ + +/* + * Derived from : + * + * + * ipcp.h - IP Control Protocol definitions. + * + * Copyright (c) 1984-2000 Carnegie Mellon University. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The name "Carnegie Mellon University" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For permission or any legal + * details, please contact + * Office of Technology Transfer + * Carnegie Mellon University + * 5000 Forbes Avenue + * Pittsburgh, PA 15213-3890 + * (412) 268-4387, fax: (412) 268-7395 + * tech-transfer@andrew.cmu.edu + * + * 4. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by Computing Services + * at Carnegie Mellon University (http://www.cmu.edu/computing/)." + * + * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO + * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE + * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * $Id: ipv6cp.h,v 1.7 2002/12/04 23:03:32 paulus Exp $ + */ + +#include "netif/ppp/ppp_opts.h" +#if PPP_SUPPORT && PPP_IPV6_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +#ifndef IPV6CP_H +#define IPV6CP_H + +#include "eui64.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Options. + */ +#define CI_IFACEID 1 /* Interface Identifier */ +#ifdef IPV6CP_COMP +#define CI_COMPRESSTYPE 2 /* Compression Type */ +#endif /* IPV6CP_COMP */ + +/* No compression types yet defined. + *#define IPV6CP_COMP 0x004f + */ +typedef struct ipv6cp_options { + unsigned int neg_ifaceid :1; /* Negotiate interface identifier? */ + unsigned int req_ifaceid :1; /* Ask peer to send interface identifier? */ + unsigned int accept_local :1; /* accept peer's value for iface id? */ + unsigned int opt_local :1; /* ourtoken set by option */ + unsigned int opt_remote :1; /* histoken set by option */ + unsigned int use_ip :1; /* use IP as interface identifier */ +#if 0 + unsigned int use_persistent :1; /* use uniquely persistent value for address */ +#endif +#ifdef IPV6CP_COMP + unsigned int neg_vj :1; /* Van Jacobson Compression? */ +#endif /* IPV6CP_COMP */ + +#ifdef IPV6CP_COMP + u_short vj_protocol; /* protocol value to use in VJ option */ +#endif /* IPV6CP_COMP */ + eui64_t ourid, hisid; /* Interface identifiers */ +} ipv6cp_options; + +extern const struct protent ipv6cp_protent; + +#ifdef __cplusplus +} +#endif + +#endif /* IPV6CP_H */ +#endif /* PPP_SUPPORT && PPP_IPV6_SUPPORT */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/lcp.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/lcp.h new file mode 100644 index 0000000000000000000000000000000000000000..18ad1cb23bdc1314eaa10258ef8b83723a433aef --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/lcp.h @@ -0,0 +1,179 @@ +/* + * lcp.h - Link Control Protocol definitions. + * + * Copyright (c) 1984-2000 Carnegie Mellon University. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The name "Carnegie Mellon University" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For permission or any legal + * details, please contact + * Office of Technology Transfer + * Carnegie Mellon University + * 5000 Forbes Avenue + * Pittsburgh, PA 15213-3890 + * (412) 268-4387, fax: (412) 268-7395 + * tech-transfer@andrew.cmu.edu + * + * 4. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by Computing Services + * at Carnegie Mellon University (http://www.cmu.edu/computing/)." + * + * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO + * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE + * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * $Id: lcp.h,v 1.20 2004/11/14 22:53:42 carlsonj Exp $ + */ + +#include "netif/ppp/ppp_opts.h" +#if PPP_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +#ifndef LCP_H +#define LCP_H + +#include "ppp.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Options. + */ +#define CI_VENDOR 0 /* Vendor Specific */ +#define CI_MRU 1 /* Maximum Receive Unit */ +#define CI_ASYNCMAP 2 /* Async Control Character Map */ +#define CI_AUTHTYPE 3 /* Authentication Type */ +#define CI_QUALITY 4 /* Quality Protocol */ +#define CI_MAGICNUMBER 5 /* Magic Number */ +#define CI_PCOMPRESSION 7 /* Protocol Field Compression */ +#define CI_ACCOMPRESSION 8 /* Address/Control Field Compression */ +#define CI_FCSALTERN 9 /* FCS-Alternatives */ +#define CI_SDP 10 /* Self-Describing-Pad */ +#define CI_NUMBERED 11 /* Numbered-Mode */ +#define CI_CALLBACK 13 /* callback */ +#define CI_MRRU 17 /* max reconstructed receive unit; multilink */ +#define CI_SSNHF 18 /* short sequence numbers for multilink */ +#define CI_EPDISC 19 /* endpoint discriminator */ +#define CI_MPPLUS 22 /* Multi-Link-Plus-Procedure */ +#define CI_LDISC 23 /* Link-Discriminator */ +#define CI_LCPAUTH 24 /* LCP Authentication */ +#define CI_COBS 25 /* Consistent Overhead Byte Stuffing */ +#define CI_PREFELIS 26 /* Prefix Elision */ +#define CI_MPHDRFMT 27 /* MP Header Format */ +#define CI_I18N 28 /* Internationalization */ +#define CI_SDL 29 /* Simple Data Link */ + +/* + * LCP-specific packet types (code numbers). + */ +#define PROTREJ 8 /* Protocol Reject */ +#define ECHOREQ 9 /* Echo Request */ +#define ECHOREP 10 /* Echo Reply */ +#define DISCREQ 11 /* Discard Request */ +#define IDENTIF 12 /* Identification */ +#define TIMEREM 13 /* Time Remaining */ + +/* Value used as data for CI_CALLBACK option */ +#define CBCP_OPT 6 /* Use callback control protocol */ + +#if 0 /* moved to ppp_opts.h */ +#define DEFMRU 1500 /* Try for this */ +#define MINMRU 128 /* No MRUs below this */ +#define MAXMRU 16384 /* Normally limit MRU to this */ +#endif /* moved to ppp_opts.h */ + +/* An endpoint discriminator, used with multilink. */ +#define MAX_ENDP_LEN 20 /* maximum length of discriminator value */ +struct epdisc { + unsigned char class_; /* -- The word "class" is reserved in C++. */ + unsigned char length; + unsigned char value[MAX_ENDP_LEN]; +}; + +/* + * The state of options is described by an lcp_options structure. + */ +typedef struct lcp_options { + unsigned int passive :1; /* Don't die if we don't get a response */ + unsigned int silent :1; /* Wait for the other end to start first */ +#if 0 /* UNUSED */ + unsigned int restart :1; /* Restart vs. exit after close */ +#endif /* UNUSED */ + unsigned int neg_mru :1; /* Negotiate the MRU? */ + unsigned int neg_asyncmap :1; /* Negotiate the async map? */ +#if PAP_SUPPORT + unsigned int neg_upap :1; /* Ask for UPAP authentication? */ +#endif /* PAP_SUPPORT */ +#if CHAP_SUPPORT + unsigned int neg_chap :1; /* Ask for CHAP authentication? */ +#endif /* CHAP_SUPPORT */ +#if EAP_SUPPORT + unsigned int neg_eap :1; /* Ask for EAP authentication? */ +#endif /* EAP_SUPPORT */ + unsigned int neg_magicnumber :1; /* Ask for magic number? */ + unsigned int neg_pcompression :1; /* HDLC Protocol Field Compression? */ + unsigned int neg_accompression :1; /* HDLC Address/Control Field Compression? */ +#if LQR_SUPPORT + unsigned int neg_lqr :1; /* Negotiate use of Link Quality Reports */ +#endif /* LQR_SUPPORT */ + unsigned int neg_cbcp :1; /* Negotiate use of CBCP */ +#ifdef HAVE_MULTILINK + unsigned int neg_mrru :1; /* negotiate multilink MRRU */ +#endif /* HAVE_MULTILINK */ + unsigned int neg_ssnhf :1; /* negotiate short sequence numbers */ + unsigned int neg_endpoint :1; /* negotiate endpoint discriminator */ + + u16_t mru; /* Value of MRU */ +#ifdef HAVE_MULTILINK + u16_t mrru; /* Value of MRRU, and multilink enable */ +#endif /* MULTILINK */ +#if CHAP_SUPPORT + u8_t chap_mdtype; /* which MD types (hashing algorithm) */ +#endif /* CHAP_SUPPORT */ + u32_t asyncmap; /* Value of async map */ + u32_t magicnumber; + u8_t numloops; /* Number of loops during magic number neg. */ +#if LQR_SUPPORT + u32_t lqr_period; /* Reporting period for LQR 1/100ths second */ +#endif /* LQR_SUPPORT */ + struct epdisc endpoint; /* endpoint discriminator */ +} lcp_options; + +void lcp_open(ppp_pcb *pcb); +void lcp_close(ppp_pcb *pcb, const char *reason); +void lcp_lowerup(ppp_pcb *pcb); +void lcp_lowerdown(ppp_pcb *pcb); +void lcp_sprotrej(ppp_pcb *pcb, u_char *p, int len); /* send protocol reject */ + +extern const struct protent lcp_protent; + +#if 0 /* moved to ppp_opts.h */ +/* Default number of times we receive our magic number from the peer + before deciding the link is looped-back. */ +#define DEFLOOPBACKFAIL 10 +#endif /* moved to ppp_opts.h */ + +#ifdef __cplusplus +} +#endif + +#endif /* LCP_H */ +#endif /* PPP_SUPPORT */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/magic.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/magic.h new file mode 100644 index 0000000000000000000000000000000000000000..a165e18fa681fb7cf0c6f8742c49cff93c21b3f9 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/magic.h @@ -0,0 +1,130 @@ +/* + * magic.h - PPP Magic Number definitions. + * + * Copyright (c) 1984-2000 Carnegie Mellon University. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The name "Carnegie Mellon University" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For permission or any legal + * details, please contact + * Office of Technology Transfer + * Carnegie Mellon University + * 5000 Forbes Avenue + * Pittsburgh, PA 15213-3890 + * (412) 268-4387, fax: (412) 268-7395 + * tech-transfer@andrew.cmu.edu + * + * 4. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by Computing Services + * at Carnegie Mellon University (http://www.cmu.edu/computing/)." + * + * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO + * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE + * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * $Id: magic.h,v 1.5 2003/06/11 23:56:26 paulus Exp $ + */ +/***************************************************************************** +* randm.h - Random number generator header file. +* +* Copyright (c) 2003 by Marc Boucher, Services Informatiques (MBSI) inc. +* Copyright (c) 1998 Global Election Systems Inc. +* +* The authors hereby grant permission to use, copy, modify, distribute, +* and license this software and its documentation for any purpose, provided +* that existing copyright notices are retained in all copies and that this +* notice and the following disclaimer are included verbatim in any +* distributions. No written agreement, license, or royalty fee is required +* for any of the authorized uses. +* +* THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS *AS IS* AND ANY EXPRESS OR +* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +* IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +****************************************************************************** +* REVISION HISTORY +* +* 03-01-01 Marc Boucher +* Ported to lwIP. +* 98-05-29 Guy Lancaster , Global Election Systems Inc. +* Extracted from avos. +*****************************************************************************/ + +#include "netif/ppp/ppp_opts.h" +#if PPP_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +#ifndef MAGIC_H +#define MAGIC_H + +#ifdef __cplusplus +extern "C" { +#endif + +/*********************** +*** PUBLIC FUNCTIONS *** +***********************/ + +/* + * Initialize the random number generator. + */ +void magic_init(void); + +/* + * Randomize our random seed value. To be called for truely random events + * such as user operations and network traffic. + */ +void magic_randomize(void); + +/* + * Return a new random number. + */ +u32_t magic(void); /* Returns the next magic number */ + +/* + * Fill buffer with random bytes + * + * Use the random pool to generate random data. This degrades to pseudo + * random when used faster than randomness is supplied using magic_churnrand(). + * Thus it's important to make sure that the results of this are not + * published directly because one could predict the next result to at + * least some degree. Also, it's important to get a good seed before + * the first use. + */ +void magic_random_bytes(unsigned char *buf, u32_t buf_len); + +/* + * Return a new random number between 0 and (2^pow)-1 included. + */ +u32_t magic_pow(u8_t pow); + +#ifdef __cplusplus +} +#endif + +#endif /* MAGIC_H */ + +#endif /* PPP_SUPPORT */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/mppe.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/mppe.h new file mode 100644 index 0000000000000000000000000000000000000000..5de1128479b527f08df39c4fe6f16368115ff64d --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/mppe.h @@ -0,0 +1,181 @@ +/* + * mppe.h - Definitions for MPPE + * + * Copyright (c) 2008 Paul Mackerras. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The name(s) of the authors of this software must not be used to + * endorse or promote products derived from this software without + * prior written permission. + * + * 4. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by Paul Mackerras + * ". + * + * THE AUTHORS OF THIS SOFTWARE DISCLAIM ALL WARRANTIES WITH REGARD TO + * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY + * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include "netif/ppp/ppp_opts.h" +#if PPP_SUPPORT && MPPE_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +#ifndef MPPE_H +#define MPPE_H + +#include "netif/ppp/pppcrypt.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define MPPE_PAD 4 /* MPPE growth per frame */ +#define MPPE_MAX_KEY_LEN 16 /* largest key length (128-bit) */ + +/* option bits for ccp_options.mppe */ +#define MPPE_OPT_40 0x01 /* 40 bit */ +#define MPPE_OPT_128 0x02 /* 128 bit */ +#define MPPE_OPT_STATEFUL 0x04 /* stateful mode */ +/* unsupported opts */ +#define MPPE_OPT_56 0x08 /* 56 bit */ +#define MPPE_OPT_MPPC 0x10 /* MPPC compression */ +#define MPPE_OPT_D 0x20 /* Unknown */ +#define MPPE_OPT_UNSUPPORTED (MPPE_OPT_56|MPPE_OPT_MPPC|MPPE_OPT_D) +#define MPPE_OPT_UNKNOWN 0x40 /* Bits !defined in RFC 3078 were set */ + +/* + * This is not nice ... the alternative is a bitfield struct though. + * And unfortunately, we cannot share the same bits for the option + * names above since C and H are the same bit. We could do a u_int32 + * but then we have to do a lwip_htonl() all the time and/or we still need + * to know which octet is which. + */ +#define MPPE_C_BIT 0x01 /* MPPC */ +#define MPPE_D_BIT 0x10 /* Obsolete, usage unknown */ +#define MPPE_L_BIT 0x20 /* 40-bit */ +#define MPPE_S_BIT 0x40 /* 128-bit */ +#define MPPE_M_BIT 0x80 /* 56-bit, not supported */ +#define MPPE_H_BIT 0x01 /* Stateless (in a different byte) */ + +/* Does not include H bit; used for least significant octet only. */ +#define MPPE_ALL_BITS (MPPE_D_BIT|MPPE_L_BIT|MPPE_S_BIT|MPPE_M_BIT|MPPE_H_BIT) + +/* Build a CI from mppe opts (see RFC 3078) */ +#define MPPE_OPTS_TO_CI(opts, ci) \ + do { \ + u_char *ptr = ci; /* u_char[4] */ \ + \ + /* H bit */ \ + if (opts & MPPE_OPT_STATEFUL) \ + *ptr++ = 0x0; \ + else \ + *ptr++ = MPPE_H_BIT; \ + *ptr++ = 0; \ + *ptr++ = 0; \ + \ + /* S,L bits */ \ + *ptr = 0; \ + if (opts & MPPE_OPT_128) \ + *ptr |= MPPE_S_BIT; \ + if (opts & MPPE_OPT_40) \ + *ptr |= MPPE_L_BIT; \ + /* M,D,C bits not supported */ \ + } while (/* CONSTCOND */ 0) + +/* The reverse of the above */ +#define MPPE_CI_TO_OPTS(ci, opts) \ + do { \ + const u_char *ptr = ci; /* u_char[4] */ \ + \ + opts = 0; \ + \ + /* H bit */ \ + if (!(ptr[0] & MPPE_H_BIT)) \ + opts |= MPPE_OPT_STATEFUL; \ + \ + /* S,L bits */ \ + if (ptr[3] & MPPE_S_BIT) \ + opts |= MPPE_OPT_128; \ + if (ptr[3] & MPPE_L_BIT) \ + opts |= MPPE_OPT_40; \ + \ + /* M,D,C bits */ \ + if (ptr[3] & MPPE_M_BIT) \ + opts |= MPPE_OPT_56; \ + if (ptr[3] & MPPE_D_BIT) \ + opts |= MPPE_OPT_D; \ + if (ptr[3] & MPPE_C_BIT) \ + opts |= MPPE_OPT_MPPC; \ + \ + /* Other bits */ \ + if (ptr[0] & ~MPPE_H_BIT) \ + opts |= MPPE_OPT_UNKNOWN; \ + if (ptr[1] || ptr[2]) \ + opts |= MPPE_OPT_UNKNOWN; \ + if (ptr[3] & ~MPPE_ALL_BITS) \ + opts |= MPPE_OPT_UNKNOWN; \ + } while (/* CONSTCOND */ 0) + +/* Shared MPPE padding between MSCHAP and MPPE */ +#define SHA1_PAD_SIZE 40 + +static const u8_t mppe_sha1_pad1[SHA1_PAD_SIZE] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; +static const u8_t mppe_sha1_pad2[SHA1_PAD_SIZE] = { + 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, + 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, + 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, + 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2 +}; + +/* + * State for an MPPE (de)compressor. + */ +typedef struct ppp_mppe_state { + lwip_arc4_context arc4; + u8_t master_key[MPPE_MAX_KEY_LEN]; + u8_t session_key[MPPE_MAX_KEY_LEN]; + u8_t keylen; /* key length in bytes */ + /* NB: 128-bit == 16, 40-bit == 8! + * If we want to support 56-bit, the unit has to change to bits + */ + u8_t bits; /* MPPE control bits */ + u16_t ccount; /* 12-bit coherency count (seqno) */ + u16_t sanity_errors; /* take down LCP if too many */ + unsigned int stateful :1; /* stateful mode flag */ + unsigned int discard :1; /* stateful mode packet loss flag */ +} ppp_mppe_state; + +void mppe_set_key(ppp_pcb *pcb, ppp_mppe_state *state, u8_t *key); +void mppe_init(ppp_pcb *pcb, ppp_mppe_state *state, u8_t options); +void mppe_comp_reset(ppp_pcb *pcb, ppp_mppe_state *state); +err_t mppe_compress(ppp_pcb *pcb, ppp_mppe_state *state, struct pbuf **pb, u16_t protocol); +void mppe_decomp_reset(ppp_pcb *pcb, ppp_mppe_state *state); +err_t mppe_decompress(ppp_pcb *pcb, ppp_mppe_state *state, struct pbuf **pb); + +#ifdef __cplusplus +} +#endif + +#endif /* MPPE_H */ +#endif /* PPP_SUPPORT && MPPE_SUPPORT */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/ppp.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/ppp.h new file mode 100644 index 0000000000000000000000000000000000000000..3d73c3657086cb1aa23a4781a0a01d0c6033933e --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/ppp.h @@ -0,0 +1,698 @@ +/***************************************************************************** +* ppp.h - Network Point to Point Protocol header file. +* +* Copyright (c) 2003 by Marc Boucher, Services Informatiques (MBSI) inc. +* portions Copyright (c) 1997 Global Election Systems Inc. +* +* The authors hereby grant permission to use, copy, modify, distribute, +* and license this software and its documentation for any purpose, provided +* that existing copyright notices are retained in all copies and that this +* notice and the following disclaimer are included verbatim in any +* distributions. No written agreement, license, or royalty fee is required +* for any of the authorized uses. +* +* THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS *AS IS* AND ANY EXPRESS OR +* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +* IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +****************************************************************************** +* REVISION HISTORY +* +* 03-01-01 Marc Boucher +* Ported to lwIP. +* 97-11-05 Guy Lancaster , Global Election Systems Inc. +* Original derived from BSD codes. +*****************************************************************************/ + +#include "netif/ppp/ppp_opts.h" +#if PPP_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +#ifndef PPP_H +#define PPP_H + +#include "lwip/def.h" +#include "lwip/stats.h" +#include "lwip/mem.h" +#include "lwip/netif.h" +#include "lwip/sys.h" +#include "lwip/timeouts.h" +#if PPP_IPV6_SUPPORT +#include "lwip/ip6_addr.h" +#endif /* PPP_IPV6_SUPPORT */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* Disable non-working or rarely used PPP feature, so rarely that we don't want to bloat ppp_opts.h with them */ +#ifndef PPP_OPTIONS +#define PPP_OPTIONS 0 +#endif + +#ifndef PPP_NOTIFY +#define PPP_NOTIFY 0 +#endif + +#ifndef PPP_REMOTENAME +#define PPP_REMOTENAME 0 +#endif + +#ifndef PPP_IDLETIMELIMIT +#define PPP_IDLETIMELIMIT 0 +#endif + +#ifndef PPP_LCP_ADAPTIVE +#define PPP_LCP_ADAPTIVE 0 +#endif + +#ifndef PPP_MAXCONNECT +#define PPP_MAXCONNECT 0 +#endif + +#ifndef PPP_ALLOWED_ADDRS +#define PPP_ALLOWED_ADDRS 0 +#endif + +#ifndef PPP_PROTOCOLNAME +#define PPP_PROTOCOLNAME 0 +#endif + +#ifndef PPP_STATS_SUPPORT +#define PPP_STATS_SUPPORT 0 +#endif + +#ifndef DEFLATE_SUPPORT +#define DEFLATE_SUPPORT 0 +#endif + +#ifndef BSDCOMPRESS_SUPPORT +#define BSDCOMPRESS_SUPPORT 0 +#endif + +#ifndef PREDICTOR_SUPPORT +#define PREDICTOR_SUPPORT 0 +#endif + +/************************* +*** PUBLIC DEFINITIONS *** +*************************/ + +/* + * The basic PPP frame. + */ +#define PPP_HDRLEN 4 /* octets for standard ppp header */ +#define PPP_FCSLEN 2 /* octets for FCS */ + +/* + * Values for phase. + */ +#define PPP_PHASE_DEAD 0 +#define PPP_PHASE_MASTER 1 +#define PPP_PHASE_HOLDOFF 2 +#define PPP_PHASE_INITIALIZE 3 +#define PPP_PHASE_SERIALCONN 4 +#define PPP_PHASE_DORMANT 5 +#define PPP_PHASE_ESTABLISH 6 +#define PPP_PHASE_AUTHENTICATE 7 +#define PPP_PHASE_CALLBACK 8 +#define PPP_PHASE_NETWORK 9 +#define PPP_PHASE_RUNNING 10 +#define PPP_PHASE_TERMINATE 11 +#define PPP_PHASE_DISCONNECT 12 + +/* Error codes. */ +#define PPPERR_NONE 0 /* No error. */ +#define PPPERR_PARAM 1 /* Invalid parameter. */ +#define PPPERR_OPEN 2 /* Unable to open PPP session. */ +#define PPPERR_DEVICE 3 /* Invalid I/O device for PPP. */ +#define PPPERR_ALLOC 4 /* Unable to allocate resources. */ +#define PPPERR_USER 5 /* User interrupt. */ +#define PPPERR_CONNECT 6 /* Connection lost. */ +#define PPPERR_AUTHFAIL 7 /* Failed authentication challenge. */ +#define PPPERR_PROTOCOL 8 /* Failed to meet protocol. */ +#define PPPERR_PEERDEAD 9 /* Connection timeout */ +#define PPPERR_IDLETIMEOUT 10 /* Idle Timeout */ +#define PPPERR_CONNECTTIME 11 /* Max connect time reached */ +#define PPPERR_LOOPBACK 12 /* Loopback detected */ + +/* Whether auth support is enabled at all */ +#define PPP_AUTH_SUPPORT (PAP_SUPPORT || CHAP_SUPPORT || EAP_SUPPORT) + +/************************ +*** PUBLIC DATA TYPES *** +************************/ + +/* + * Other headers require ppp_pcb definition for prototypes, but ppp_pcb + * require some structure definition from other headers as well, we are + * fixing the dependency loop here by declaring the ppp_pcb type then + * by including headers containing necessary struct definition for ppp_pcb + */ +typedef struct ppp_pcb_s ppp_pcb; + +/* Type definitions for BSD code. */ +#ifndef __u_char_defined +typedef unsigned long u_long; +typedef unsigned int u_int; +typedef unsigned short u_short; +typedef unsigned char u_char; +#endif + +#include "fsm.h" +#include "lcp.h" +#if CCP_SUPPORT +#include "ccp.h" +#endif /* CCP_SUPPORT */ +#if MPPE_SUPPORT +#include "mppe.h" +#endif /* MPPE_SUPPORT */ +#if PPP_IPV4_SUPPORT +#include "ipcp.h" +#endif /* PPP_IPV4_SUPPORT */ +#if PPP_IPV6_SUPPORT +#include "ipv6cp.h" +#endif /* PPP_IPV6_SUPPORT */ +#if PAP_SUPPORT +#include "upap.h" +#endif /* PAP_SUPPORT */ +#if CHAP_SUPPORT +#include "chap-new.h" +#endif /* CHAP_SUPPORT */ +#if EAP_SUPPORT +#include "eap.h" +#endif /* EAP_SUPPORT */ +#if VJ_SUPPORT +#include "vj.h" +#endif /* VJ_SUPPORT */ + +/* Link status callback function prototype */ +typedef void (*ppp_link_status_cb_fn)(ppp_pcb *pcb, int err_code, void *ctx); + +/* + * PPP configuration. + */ +typedef struct ppp_settings_s { + +#if PPP_SERVER && PPP_AUTH_SUPPORT + unsigned int auth_required :1; /* Peer is required to authenticate */ + unsigned int null_login :1; /* Username of "" and a password of "" are acceptable */ +#endif /* PPP_SERVER && PPP_AUTH_SUPPORT */ +#if PPP_REMOTENAME + unsigned int explicit_remote :1; /* remote_name specified with remotename opt */ +#endif /* PPP_REMOTENAME */ +#if PAP_SUPPORT + unsigned int refuse_pap :1; /* Don't proceed auth. with PAP */ +#endif /* PAP_SUPPORT */ +#if CHAP_SUPPORT + unsigned int refuse_chap :1; /* Don't proceed auth. with CHAP */ +#endif /* CHAP_SUPPORT */ +#if MSCHAP_SUPPORT + unsigned int refuse_mschap :1; /* Don't proceed auth. with MS-CHAP */ + unsigned int refuse_mschap_v2 :1; /* Don't proceed auth. with MS-CHAPv2 */ +#endif /* MSCHAP_SUPPORT */ +#if EAP_SUPPORT + unsigned int refuse_eap :1; /* Don't proceed auth. with EAP */ +#endif /* EAP_SUPPORT */ +#if LWIP_DNS + unsigned int usepeerdns :1; /* Ask peer for DNS adds */ +#endif /* LWIP_DNS */ + unsigned int persist :1; /* Persist mode, always try to open the connection */ +#if PRINTPKT_SUPPORT + unsigned int hide_password :1; /* Hide password in dumped packets */ +#endif /* PRINTPKT_SUPPORT */ + unsigned int noremoteip :1; /* Let him have no IP address */ + unsigned int lax_recv :1; /* accept control chars in asyncmap */ + unsigned int noendpoint :1; /* don't send/accept endpoint discriminator */ +#if PPP_LCP_ADAPTIVE + unsigned int lcp_echo_adaptive :1; /* request echo only if the link was idle */ +#endif /* PPP_LCP_ADAPTIVE */ +#if MPPE_SUPPORT + unsigned int require_mppe :1; /* Require MPPE (Microsoft Point to Point Encryption) */ + unsigned int refuse_mppe_40 :1; /* Allow MPPE 40-bit mode? */ + unsigned int refuse_mppe_128 :1; /* Allow MPPE 128-bit mode? */ + unsigned int refuse_mppe_stateful :1; /* Allow MPPE stateful mode? */ +#endif /* MPPE_SUPPORT */ + + u16_t listen_time; /* time to listen first (ms), waiting for peer to send LCP packet */ + +#if PPP_IDLETIMELIMIT + u16_t idle_time_limit; /* Disconnect if idle for this many seconds */ +#endif /* PPP_IDLETIMELIMIT */ +#if PPP_MAXCONNECT + u32_t maxconnect; /* Maximum connect time (seconds) */ +#endif /* PPP_MAXCONNECT */ + +#if PPP_AUTH_SUPPORT + /* auth data */ + const char *user; /* Username for PAP */ + const char *passwd; /* Password for PAP, secret for CHAP */ +#if PPP_REMOTENAME + char remote_name[MAXNAMELEN + 1]; /* Peer's name for authentication */ +#endif /* PPP_REMOTENAME */ + +#if PAP_SUPPORT + u8_t pap_timeout_time; /* Timeout (seconds) for auth-req retrans. */ + u8_t pap_max_transmits; /* Number of auth-reqs sent */ +#if PPP_SERVER + u8_t pap_req_timeout; /* Time to wait for auth-req from peer */ +#endif /* PPP_SERVER */ +#endif /* PAP_SUPPPORT */ + +#if CHAP_SUPPORT + u8_t chap_timeout_time; /* Timeout (seconds) for retransmitting req */ + u8_t chap_max_transmits; /* max # times to send challenge */ +#if PPP_SERVER + u8_t chap_rechallenge_time; /* Time to wait for auth-req from peer */ +#endif /* PPP_SERVER */ +#endif /* CHAP_SUPPPORT */ + +#if EAP_SUPPORT + u8_t eap_req_time; /* Time to wait (for retransmit/fail) */ + u8_t eap_allow_req; /* Max Requests allowed */ +#if PPP_SERVER + u8_t eap_timeout_time; /* Time to wait (for retransmit/fail) */ + u8_t eap_max_transmits; /* Max Requests allowed */ +#endif /* PPP_SERVER */ +#endif /* EAP_SUPPORT */ + +#endif /* PPP_AUTH_SUPPORT */ + + u8_t fsm_timeout_time; /* Timeout time in seconds */ + u8_t fsm_max_conf_req_transmits; /* Maximum Configure-Request transmissions */ + u8_t fsm_max_term_transmits; /* Maximum Terminate-Request transmissions */ + u8_t fsm_max_nak_loops; /* Maximum number of nak loops tolerated */ + + u8_t lcp_loopbackfail; /* Number of times we receive our magic number from the peer + before deciding the link is looped-back. */ + u8_t lcp_echo_interval; /* Interval between LCP echo-requests */ + u8_t lcp_echo_fails; /* Tolerance to unanswered echo-requests */ + +} ppp_settings; + +#if PPP_SERVER +struct ppp_addrs { +#if PPP_IPV4_SUPPORT + ip4_addr_t our_ipaddr, his_ipaddr, netmask; +#if LWIP_DNS + ip4_addr_t dns1, dns2; +#endif /* LWIP_DNS */ +#endif /* PPP_IPV4_SUPPORT */ +#if PPP_IPV6_SUPPORT + ip6_addr_t our6_ipaddr, his6_ipaddr; +#endif /* PPP_IPV6_SUPPORT */ +}; +#endif /* PPP_SERVER */ + +/* + * PPP interface control block. + */ +struct ppp_pcb_s { + ppp_settings settings; + const struct link_callbacks *link_cb; + void *link_ctx_cb; + void (*link_status_cb)(ppp_pcb *pcb, int err_code, void *ctx); /* Status change callback */ +#if PPP_NOTIFY_PHASE + void (*notify_phase_cb)(ppp_pcb *pcb, u8_t phase, void *ctx); /* Notify phase callback */ +#endif /* PPP_NOTIFY_PHASE */ + void *ctx_cb; /* Callbacks optional pointer */ + struct netif *netif; /* PPP interface */ + u8_t phase; /* where the link is at */ + u8_t err_code; /* Code indicating why interface is down. */ + + /* flags */ +#if PPP_IPV4_SUPPORT + unsigned int ask_for_local :1; /* request our address from peer */ + unsigned int ipcp_is_open :1; /* haven't called np_finished() */ + unsigned int ipcp_is_up :1; /* have called ipcp_up() */ + unsigned int if4_up :1; /* True when the IPv4 interface is up. */ +#if 0 /* UNUSED - PROXY ARP */ + unsigned int proxy_arp_set :1; /* Have created proxy arp entry */ +#endif /* UNUSED - PROXY ARP */ +#endif /* PPP_IPV4_SUPPORT */ +#if PPP_IPV6_SUPPORT + unsigned int ipv6cp_is_up :1; /* have called ip6cp_up() */ + unsigned int if6_up :1; /* True when the IPv6 interface is up. */ +#endif /* PPP_IPV6_SUPPORT */ + unsigned int lcp_echo_timer_running :1; /* set if a timer is running */ +#if VJ_SUPPORT + unsigned int vj_enabled :1; /* Flag indicating VJ compression enabled. */ +#endif /* VJ_SUPPORT */ +#if CCP_SUPPORT + unsigned int ccp_all_rejected :1; /* we rejected all peer's options */ +#endif /* CCP_SUPPORT */ +#if MPPE_SUPPORT + unsigned int mppe_keys_set :1; /* Have the MPPE keys been set? */ +#endif /* MPPE_SUPPORT */ + +#if PPP_AUTH_SUPPORT + /* auth data */ +#if PPP_SERVER && defined(HAVE_MULTILINK) + char peer_authname[MAXNAMELEN + 1]; /* The name by which the peer authenticated itself to us. */ +#endif /* PPP_SERVER && defined(HAVE_MULTILINK) */ + u16_t auth_pending; /* Records which authentication operations haven't completed yet. */ + u16_t auth_done; /* Records which authentication operations have been completed. */ + +#if PAP_SUPPORT + upap_state upap; /* PAP data */ +#endif /* PAP_SUPPORT */ + +#if CHAP_SUPPORT + chap_client_state chap_client; /* CHAP client data */ +#if PPP_SERVER + chap_server_state chap_server; /* CHAP server data */ +#endif /* PPP_SERVER */ +#endif /* CHAP_SUPPORT */ + +#if EAP_SUPPORT + eap_state eap; /* EAP data */ +#endif /* EAP_SUPPORT */ +#endif /* PPP_AUTH_SUPPORT */ + + fsm lcp_fsm; /* LCP fsm structure */ + lcp_options lcp_wantoptions; /* Options that we want to request */ + lcp_options lcp_gotoptions; /* Options that peer ack'd */ + lcp_options lcp_allowoptions; /* Options we allow peer to request */ + lcp_options lcp_hisoptions; /* Options that we ack'd */ + u16_t peer_mru; /* currently negotiated peer MRU */ + u8_t lcp_echos_pending; /* Number of outstanding echo msgs */ + u8_t lcp_echo_number; /* ID number of next echo frame */ + + u8_t num_np_open; /* Number of network protocols which we have opened. */ + u8_t num_np_up; /* Number of network protocols which have come up. */ + +#if VJ_SUPPORT + struct vjcompress vj_comp; /* Van Jacobson compression header. */ +#endif /* VJ_SUPPORT */ + +#if CCP_SUPPORT + fsm ccp_fsm; /* CCP fsm structure */ + ccp_options ccp_wantoptions; /* what to request the peer to use */ + ccp_options ccp_gotoptions; /* what the peer agreed to do */ + ccp_options ccp_allowoptions; /* what we'll agree to do */ + ccp_options ccp_hisoptions; /* what we agreed to do */ + u8_t ccp_localstate; /* Local state (mainly for handling reset-reqs and reset-acks). */ + u8_t ccp_receive_method; /* Method chosen on receive path */ + u8_t ccp_transmit_method; /* Method chosen on transmit path */ +#if MPPE_SUPPORT + ppp_mppe_state mppe_comp; /* MPPE "compressor" structure */ + ppp_mppe_state mppe_decomp; /* MPPE "decompressor" structure */ +#endif /* MPPE_SUPPORT */ +#endif /* CCP_SUPPORT */ + +#if PPP_IPV4_SUPPORT + fsm ipcp_fsm; /* IPCP fsm structure */ + ipcp_options ipcp_wantoptions; /* Options that we want to request */ + ipcp_options ipcp_gotoptions; /* Options that peer ack'd */ + ipcp_options ipcp_allowoptions; /* Options we allow peer to request */ + ipcp_options ipcp_hisoptions; /* Options that we ack'd */ +#endif /* PPP_IPV4_SUPPORT */ + +#if PPP_IPV6_SUPPORT + fsm ipv6cp_fsm; /* IPV6CP fsm structure */ + ipv6cp_options ipv6cp_wantoptions; /* Options that we want to request */ + ipv6cp_options ipv6cp_gotoptions; /* Options that peer ack'd */ + ipv6cp_options ipv6cp_allowoptions; /* Options we allow peer to request */ + ipv6cp_options ipv6cp_hisoptions; /* Options that we ack'd */ +#endif /* PPP_IPV6_SUPPORT */ +}; + +/************************ + *** PUBLIC FUNCTIONS *** + ************************/ + +/* + * WARNING: For multi-threads environment, all ppp_set_* functions most + * only be called while the PPP is in the dead phase (i.e. disconnected). + */ + +#if PPP_AUTH_SUPPORT +/* + * Set PPP authentication. + * + * Warning: Using PPPAUTHTYPE_ANY might have security consequences. + * RFC 1994 says: + * + * In practice, within or associated with each PPP server, there is a + * database which associates "user" names with authentication + * information ("secrets"). It is not anticipated that a particular + * named user would be authenticated by multiple methods. This would + * make the user vulnerable to attacks which negotiate the least secure + * method from among a set (such as PAP rather than CHAP). If the same + * secret was used, PAP would reveal the secret to be used later with + * CHAP. + * + * Instead, for each user name there should be an indication of exactly + * one method used to authenticate that user name. If a user needs to + * make use of different authentication methods under different + * circumstances, then distinct user names SHOULD be employed, each of + * which identifies exactly one authentication method. + * + * Default is none auth type, unset (NULL) user and passwd. + */ +#define PPPAUTHTYPE_NONE 0x00 +#define PPPAUTHTYPE_PAP 0x01 +#define PPPAUTHTYPE_CHAP 0x02 +#define PPPAUTHTYPE_MSCHAP 0x04 +#define PPPAUTHTYPE_MSCHAP_V2 0x08 +#define PPPAUTHTYPE_EAP 0x10 +#define PPPAUTHTYPE_ANY 0xff +void ppp_set_auth(ppp_pcb *pcb, u8_t authtype, const char *user, const char *passwd); + +/* + * If set, peer is required to authenticate. This is mostly necessary for PPP server support. + * + * Default is false. + */ +#define ppp_set_auth_required(ppp, boolval) (ppp->settings.auth_required = boolval) +#endif /* PPP_AUTH_SUPPORT */ + +#if PPP_IPV4_SUPPORT +/* + * Set PPP interface "our" and "his" IPv4 addresses. This is mostly necessary for PPP server + * support but it can also be used on a PPP link where each side choose its own IP address. + * + * Default is unset (0.0.0.0). + */ +#define ppp_set_ipcp_ouraddr(ppp, addr) do { ppp->ipcp_wantoptions.ouraddr = ip4_addr_get_u32(addr); \ + ppp->ask_for_local = ppp->ipcp_wantoptions.ouraddr != 0; } while(0) +#define ppp_set_ipcp_hisaddr(ppp, addr) (ppp->ipcp_wantoptions.hisaddr = ip4_addr_get_u32(addr)) +#if LWIP_DNS +/* + * Set DNS server addresses that are sent if the peer asks for them. This is mostly necessary + * for PPP server support. + * + * Default is unset (0.0.0.0). + */ +#define ppp_set_ipcp_dnsaddr(ppp, index, addr) (ppp->ipcp_allowoptions.dnsaddr[index] = ip4_addr_get_u32(addr)) + +/* + * If set, we ask the peer for up to 2 DNS server addresses. Received DNS server addresses are + * registered using the dns_setserver() function. + * + * Default is false. + */ +#define ppp_set_usepeerdns(ppp, boolval) (ppp->settings.usepeerdns = boolval) +#endif /* LWIP_DNS */ +#endif /* PPP_IPV4_SUPPORT */ + +#if MPPE_SUPPORT +/* Disable MPPE (Microsoft Point to Point Encryption). This parameter is exclusive. */ +#define PPP_MPPE_DISABLE 0x00 +/* Require the use of MPPE (Microsoft Point to Point Encryption). */ +#define PPP_MPPE_ENABLE 0x01 +/* Allow MPPE to use stateful mode. Stateless mode is still attempted first. */ +#define PPP_MPPE_ALLOW_STATEFUL 0x02 +/* Refuse the use of MPPE with 40-bit encryption. Conflict with PPP_MPPE_REFUSE_128. */ +#define PPP_MPPE_REFUSE_40 0x04 +/* Refuse the use of MPPE with 128-bit encryption. Conflict with PPP_MPPE_REFUSE_40. */ +#define PPP_MPPE_REFUSE_128 0x08 +/* + * Set MPPE configuration + * + * Default is disabled. + */ +void ppp_set_mppe(ppp_pcb *pcb, u8_t flags); +#endif /* MPPE_SUPPORT */ + +/* + * Wait for up to intval milliseconds for a valid PPP packet from the peer. + * At the end of this time, or when a valid PPP packet is received from the + * peer, we commence negotiation by sending our first LCP packet. + * + * Default is 0. + */ +#define ppp_set_listen_time(ppp, intval) (ppp->settings.listen_time = intval) + +/* + * If set, we will attempt to initiate a connection but if no reply is received from + * the peer, we will then just wait passively for a valid LCP packet from the peer. + * + * Default is false. + */ +#define ppp_set_passive(ppp, boolval) (ppp->lcp_wantoptions.passive = boolval) + +/* + * If set, we will not transmit LCP packets to initiate a connection until a valid + * LCP packet is received from the peer. This is what we usually call the server mode. + * + * Default is false. + */ +#define ppp_set_silent(ppp, boolval) (ppp->lcp_wantoptions.silent = boolval) + +/* + * If set, enable protocol field compression negotiation in both the receive and + * the transmit direction. + * + * Default is true. + */ +#define ppp_set_neg_pcomp(ppp, boolval) (ppp->lcp_wantoptions.neg_pcompression = \ + ppp->lcp_allowoptions.neg_pcompression = boolval) + +/* + * If set, enable Address/Control compression in both the receive and the transmit + * direction. + * + * Default is true. + */ +#define ppp_set_neg_accomp(ppp, boolval) (ppp->lcp_wantoptions.neg_accompression = \ + ppp->lcp_allowoptions.neg_accompression = boolval) + +/* + * If set, enable asyncmap negotiation. Otherwise forcing all control characters to + * be escaped for both the transmit and the receive direction. + * + * Default is true. + */ +#define ppp_set_neg_asyncmap(ppp, boolval) (ppp->lcp_wantoptions.neg_asyncmap = \ + ppp->lcp_allowoptions.neg_asyncmap = boolval) + +/* + * This option sets the Async-Control-Character-Map (ACCM) for this end of the link. + * The ACCM is a set of 32 bits, one for each of the ASCII control characters with + * values from 0 to 31, where a 1 bit indicates that the corresponding control + * character should not be used in PPP packets sent to this system. The map is + * an unsigned 32 bits integer where the least significant bit (00000001) represents + * character 0 and the most significant bit (80000000) represents character 31. + * We will then ask the peer to send these characters as a 2-byte escape sequence. + * + * Default is 0. + */ +#define ppp_set_asyncmap(ppp, intval) (ppp->lcp_wantoptions.asyncmap = intval) + +/* + * Set a PPP interface as the default network interface + * (used to output all packets for which no specific route is found). + */ +#define ppp_set_default(ppp) netif_set_default(ppp->netif) + +#if PPP_NOTIFY_PHASE +/* + * Set a PPP notify phase callback. + * + * This can be used for example to set a LED pattern depending on the + * current phase of the PPP session. + */ +typedef void (*ppp_notify_phase_cb_fn)(ppp_pcb *pcb, u8_t phase, void *ctx); +void ppp_set_notify_phase_callback(ppp_pcb *pcb, ppp_notify_phase_cb_fn notify_phase_cb); +#endif /* PPP_NOTIFY_PHASE */ + +/* + * Initiate a PPP connection. + * + * This can only be called if PPP is in the dead phase. + * + * Holdoff is the time to wait (in seconds) before initiating + * the connection. + * + * If this port connects to a modem, the modem connection must be + * established before calling this. + */ +err_t ppp_connect(ppp_pcb *pcb, u16_t holdoff); + +#if PPP_SERVER +/* + * Listen for an incoming PPP connection. + * + * This can only be called if PPP is in the dead phase. + * + * If this port connects to a modem, the modem connection must be + * established before calling this. + */ +err_t ppp_listen(ppp_pcb *pcb); +#endif /* PPP_SERVER */ + +/* + * Initiate the end of a PPP connection. + * Any outstanding packets in the queues are dropped. + * + * Setting nocarrier to 1 close the PPP connection without initiating the + * shutdown procedure. Always using nocarrier = 0 is still recommended, + * this is going to take a little longer time if your link is down, but + * is a safer choice for the PPP state machine. + * + * Return 0 on success, an error code on failure. + */ +err_t ppp_close(ppp_pcb *pcb, u8_t nocarrier); + +/* + * Release the control block. + * + * This can only be called if PPP is in the dead phase. + * + * You must use ppp_close() before if you wish to terminate + * an established PPP session. + * + * Return 0 on success, an error code on failure. + */ +err_t ppp_free(ppp_pcb *pcb); + +/* + * PPP IOCTL commands. + * + * Get the up status - 0 for down, non-zero for up. The argument must + * point to an int. + */ +#define PPPCTLG_UPSTATUS 0 + +/* + * Get the PPP error code. The argument must point to an int. + * Returns a PPPERR_* value. + */ +#define PPPCTLG_ERRCODE 1 + +/* + * Get the fd associated with a PPP over serial + */ +#define PPPCTLG_FD 2 + +/* + * Get and set parameters for the given connection. + * Return 0 on success, an error code on failure. + */ +err_t ppp_ioctl(ppp_pcb *pcb, u8_t cmd, void *arg); + +/* Get the PPP netif interface */ +#define ppp_netif(ppp) (ppp->netif) + +/* Set an lwIP-style status-callback for the selected PPP device */ +#define ppp_set_netif_statuscallback(ppp, status_cb) \ + netif_set_status_callback(ppp->netif, status_cb); + +/* Set an lwIP-style link-callback for the selected PPP device */ +#define ppp_set_netif_linkcallback(ppp, link_cb) \ + netif_set_link_callback(ppp->netif, link_cb); + +#ifdef __cplusplus +} +#endif + +#endif /* PPP_H */ + +#endif /* PPP_SUPPORT */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/ppp_impl.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/ppp_impl.h new file mode 100644 index 0000000000000000000000000000000000000000..40843d5a0ac6ca9111652f8cf6ce8eb3e0c63c3c --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/ppp_impl.h @@ -0,0 +1,722 @@ +/***************************************************************************** +* ppp.h - Network Point to Point Protocol header file. +* +* Copyright (c) 2003 by Marc Boucher, Services Informatiques (MBSI) inc. +* portions Copyright (c) 1997 Global Election Systems Inc. +* +* The authors hereby grant permission to use, copy, modify, distribute, +* and license this software and its documentation for any purpose, provided +* that existing copyright notices are retained in all copies and that this +* notice and the following disclaimer are included verbatim in any +* distributions. No written agreement, license, or royalty fee is required +* for any of the authorized uses. +* +* THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS *AS IS* AND ANY EXPRESS OR +* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +* IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +****************************************************************************** +* REVISION HISTORY +* +* 03-01-01 Marc Boucher +* Ported to lwIP. +* 97-11-05 Guy Lancaster , Global Election Systems Inc. +* Original derived from BSD codes. +*****************************************************************************/ +#ifndef LWIP_HDR_PPP_IMPL_H +#define LWIP_HDR_PPP_IMPL_H + +#include "netif/ppp/ppp_opts.h" + +#if PPP_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +#ifdef PPP_INCLUDE_SETTINGS_HEADER +#include "ppp_settings.h" +#endif + +#include /* formats */ +#include +#include +#include /* strtol() */ + +#include "lwip/netif.h" +#include "lwip/def.h" +#include "lwip/timeouts.h" + +#include "ppp.h" +#include "pppdebug.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Memory used for control packets. + * + * PPP_CTRL_PBUF_MAX_SIZE is the amount of memory we allocate when we + * cannot figure out how much we are going to use before filling the buffer. + */ +#if PPP_USE_PBUF_RAM +#define PPP_CTRL_PBUF_TYPE PBUF_RAM +#define PPP_CTRL_PBUF_MAX_SIZE 512 +#else /* PPP_USE_PBUF_RAM */ +#define PPP_CTRL_PBUF_TYPE PBUF_POOL +#define PPP_CTRL_PBUF_MAX_SIZE PBUF_POOL_BUFSIZE +#endif /* PPP_USE_PBUF_RAM */ + +/* + * The basic PPP frame. + */ +#define PPP_ADDRESS(p) (((u_char *)(p))[0]) +#define PPP_CONTROL(p) (((u_char *)(p))[1]) +#define PPP_PROTOCOL(p) ((((u_char *)(p))[2] << 8) + ((u_char *)(p))[3]) + +/* + * Significant octet values. + */ +#define PPP_ALLSTATIONS 0xff /* All-Stations broadcast address */ +#define PPP_UI 0x03 /* Unnumbered Information */ +#define PPP_FLAG 0x7e /* Flag Sequence */ +#define PPP_ESCAPE 0x7d /* Asynchronous Control Escape */ +#define PPP_TRANS 0x20 /* Asynchronous transparency modifier */ + +/* + * Protocol field values. + */ +#define PPP_IP 0x21 /* Internet Protocol */ +#if 0 /* UNUSED */ +#define PPP_AT 0x29 /* AppleTalk Protocol */ +#define PPP_IPX 0x2b /* IPX protocol */ +#endif /* UNUSED */ +#if VJ_SUPPORT +#define PPP_VJC_COMP 0x2d /* VJ compressed TCP */ +#define PPP_VJC_UNCOMP 0x2f /* VJ uncompressed TCP */ +#endif /* VJ_SUPPORT */ +#if PPP_IPV6_SUPPORT +#define PPP_IPV6 0x57 /* Internet Protocol Version 6 */ +#endif /* PPP_IPV6_SUPPORT */ +#if CCP_SUPPORT +#define PPP_COMP 0xfd /* compressed packet */ +#endif /* CCP_SUPPORT */ +#define PPP_IPCP 0x8021 /* IP Control Protocol */ +#if 0 /* UNUSED */ +#define PPP_ATCP 0x8029 /* AppleTalk Control Protocol */ +#define PPP_IPXCP 0x802b /* IPX Control Protocol */ +#endif /* UNUSED */ +#if PPP_IPV6_SUPPORT +#define PPP_IPV6CP 0x8057 /* IPv6 Control Protocol */ +#endif /* PPP_IPV6_SUPPORT */ +#if CCP_SUPPORT +#define PPP_CCP 0x80fd /* Compression Control Protocol */ +#endif /* CCP_SUPPORT */ +#if ECP_SUPPORT +#define PPP_ECP 0x8053 /* Encryption Control Protocol */ +#endif /* ECP_SUPPORT */ +#define PPP_LCP 0xc021 /* Link Control Protocol */ +#if PAP_SUPPORT +#define PPP_PAP 0xc023 /* Password Authentication Protocol */ +#endif /* PAP_SUPPORT */ +#if LQR_SUPPORT +#define PPP_LQR 0xc025 /* Link Quality Report protocol */ +#endif /* LQR_SUPPORT */ +#if CHAP_SUPPORT +#define PPP_CHAP 0xc223 /* Cryptographic Handshake Auth. Protocol */ +#endif /* CHAP_SUPPORT */ +#if CBCP_SUPPORT +#define PPP_CBCP 0xc029 /* Callback Control Protocol */ +#endif /* CBCP_SUPPORT */ +#if EAP_SUPPORT +#define PPP_EAP 0xc227 /* Extensible Authentication Protocol */ +#endif /* EAP_SUPPORT */ + +/* + * The following struct gives the addresses of procedures to call + * for a particular lower link level protocol. + */ +struct link_callbacks { + /* Start a connection (e.g. Initiate discovery phase) */ + void (*connect) (ppp_pcb *pcb, void *ctx); +#if PPP_SERVER + /* Listen for an incoming connection (Passive mode) */ + void (*listen) (ppp_pcb *pcb, void *ctx); +#endif /* PPP_SERVER */ + /* End a connection (i.e. initiate disconnect phase) */ + void (*disconnect) (ppp_pcb *pcb, void *ctx); + /* Free lower protocol control block */ + err_t (*free) (ppp_pcb *pcb, void *ctx); + /* Write a pbuf to a ppp link, only used from PPP functions to send PPP packets. */ + err_t (*write)(ppp_pcb *pcb, void *ctx, struct pbuf *p); + /* Send a packet from lwIP core (IPv4 or IPv6) */ + err_t (*netif_output)(ppp_pcb *pcb, void *ctx, struct pbuf *p, u_short protocol); + /* configure the transmit-side characteristics of the PPP interface */ + void (*send_config)(ppp_pcb *pcb, void *ctx, u32_t accm, int pcomp, int accomp); + /* confire the receive-side characteristics of the PPP interface */ + void (*recv_config)(ppp_pcb *pcb, void *ctx, u32_t accm, int pcomp, int accomp); +}; + +/* + * What to do with network protocol (NP) packets. + */ +enum NPmode { + NPMODE_PASS, /* pass the packet through */ + NPMODE_DROP, /* silently drop the packet */ + NPMODE_ERROR, /* return an error */ + NPMODE_QUEUE /* save it up for later. */ +}; + +/* + * Statistics. + */ +#if PPP_STATS_SUPPORT +struct pppstat { + unsigned int ppp_ibytes; /* bytes received */ + unsigned int ppp_ipackets; /* packets received */ + unsigned int ppp_ierrors; /* receive errors */ + unsigned int ppp_obytes; /* bytes sent */ + unsigned int ppp_opackets; /* packets sent */ + unsigned int ppp_oerrors; /* transmit errors */ +}; + +#if VJ_SUPPORT +struct vjstat { + unsigned int vjs_packets; /* outbound packets */ + unsigned int vjs_compressed; /* outbound compressed packets */ + unsigned int vjs_searches; /* searches for connection state */ + unsigned int vjs_misses; /* times couldn't find conn. state */ + unsigned int vjs_uncompressedin; /* inbound uncompressed packets */ + unsigned int vjs_compressedin; /* inbound compressed packets */ + unsigned int vjs_errorin; /* inbound unknown type packets */ + unsigned int vjs_tossed; /* inbound packets tossed because of error */ +}; +#endif /* VJ_SUPPORT */ + +struct ppp_stats { + struct pppstat p; /* basic PPP statistics */ +#if VJ_SUPPORT + struct vjstat vj; /* VJ header compression statistics */ +#endif /* VJ_SUPPORT */ +}; + +#if CCP_SUPPORT +struct compstat { + unsigned int unc_bytes; /* total uncompressed bytes */ + unsigned int unc_packets; /* total uncompressed packets */ + unsigned int comp_bytes; /* compressed bytes */ + unsigned int comp_packets; /* compressed packets */ + unsigned int inc_bytes; /* incompressible bytes */ + unsigned int inc_packets; /* incompressible packets */ + unsigned int ratio; /* recent compression ratio << 8 */ +}; + +struct ppp_comp_stats { + struct compstat c; /* packet compression statistics */ + struct compstat d; /* packet decompression statistics */ +}; +#endif /* CCP_SUPPORT */ + +#endif /* PPP_STATS_SUPPORT */ + +#if PPP_IDLETIMELIMIT +/* + * The following structure records the time in seconds since + * the last NP packet was sent or received. + */ +struct ppp_idle { + time_t xmit_idle; /* time since last NP packet sent */ + time_t recv_idle; /* time since last NP packet received */ +}; +#endif /* PPP_IDLETIMELIMIT */ + +/* values for epdisc.class */ +#define EPD_NULL 0 /* null discriminator, no data */ +#define EPD_LOCAL 1 +#define EPD_IP 2 +#define EPD_MAC 3 +#define EPD_MAGIC 4 +#define EPD_PHONENUM 5 + +/* + * Global variables. + */ +#ifdef HAVE_MULTILINK +extern u8_t multilink; /* enable multilink operation */ +extern u8_t doing_multilink; +extern u8_t multilink_master; +extern u8_t bundle_eof; +extern u8_t bundle_terminating; +#endif + +#ifdef MAXOCTETS +extern unsigned int maxoctets; /* Maximum octetes per session (in bytes) */ +extern int maxoctets_dir; /* Direction : + 0 - in+out (default) + 1 - in + 2 - out + 3 - max(in,out) */ +extern int maxoctets_timeout; /* Timeout for check of octets limit */ +#define PPP_OCTETS_DIRECTION_SUM 0 +#define PPP_OCTETS_DIRECTION_IN 1 +#define PPP_OCTETS_DIRECTION_OUT 2 +#define PPP_OCTETS_DIRECTION_MAXOVERAL 3 +/* same as previos, but little different on RADIUS side */ +#define PPP_OCTETS_DIRECTION_MAXSESSION 4 +#endif + +/* Data input may be used by CCP and ECP, remove this entry + * from struct protent to save some flash + */ +#define PPP_DATAINPUT 0 + +/* + * The following struct gives the addresses of procedures to call + * for a particular protocol. + */ +struct protent { + u_short protocol; /* PPP protocol number */ + /* Initialization procedure */ + void (*init) (ppp_pcb *pcb); + /* Process a received packet */ + void (*input) (ppp_pcb *pcb, u_char *pkt, int len); + /* Process a received protocol-reject */ + void (*protrej) (ppp_pcb *pcb); + /* Lower layer has come up */ + void (*lowerup) (ppp_pcb *pcb); + /* Lower layer has gone down */ + void (*lowerdown) (ppp_pcb *pcb); + /* Open the protocol */ + void (*open) (ppp_pcb *pcb); + /* Close the protocol */ + void (*close) (ppp_pcb *pcb, const char *reason); +#if PRINTPKT_SUPPORT + /* Print a packet in readable form */ + int (*printpkt) (const u_char *pkt, int len, + void (*printer) (void *, const char *, ...), + void *arg); +#endif /* PRINTPKT_SUPPORT */ +#if PPP_DATAINPUT + /* Process a received data packet */ + void (*datainput) (ppp_pcb *pcb, u_char *pkt, int len); +#endif /* PPP_DATAINPUT */ +#if PRINTPKT_SUPPORT + const char *name; /* Text name of protocol */ + const char *data_name; /* Text name of corresponding data protocol */ +#endif /* PRINTPKT_SUPPORT */ +#if PPP_OPTIONS + option_t *options; /* List of command-line options */ + /* Check requested options, assign defaults */ + void (*check_options) (void); +#endif /* PPP_OPTIONS */ +#if DEMAND_SUPPORT + /* Configure interface for demand-dial */ + int (*demand_conf) (int unit); + /* Say whether to bring up link for this pkt */ + int (*active_pkt) (u_char *pkt, int len); +#endif /* DEMAND_SUPPORT */ +}; + +/* Table of pointers to supported protocols */ +extern const struct protent* const protocols[]; + + +/* Values for auth_pending, auth_done */ +#if PAP_SUPPORT +#define PAP_WITHPEER 0x1 +#define PAP_PEER 0x2 +#endif /* PAP_SUPPORT */ +#if CHAP_SUPPORT +#define CHAP_WITHPEER 0x4 +#define CHAP_PEER 0x8 +#endif /* CHAP_SUPPORT */ +#if EAP_SUPPORT +#define EAP_WITHPEER 0x10 +#define EAP_PEER 0x20 +#endif /* EAP_SUPPORT */ + +/* Values for auth_done only */ +#if CHAP_SUPPORT +#define CHAP_MD5_WITHPEER 0x40 +#define CHAP_MD5_PEER 0x80 +#if MSCHAP_SUPPORT +#define CHAP_MS_SHIFT 8 /* LSB position for MS auths */ +#define CHAP_MS_WITHPEER 0x100 +#define CHAP_MS_PEER 0x200 +#define CHAP_MS2_WITHPEER 0x400 +#define CHAP_MS2_PEER 0x800 +#endif /* MSCHAP_SUPPORT */ +#endif /* CHAP_SUPPORT */ + +/* Supported CHAP protocols */ +#if CHAP_SUPPORT + +#if MSCHAP_SUPPORT +#define CHAP_MDTYPE_SUPPORTED (MDTYPE_MICROSOFT_V2 | MDTYPE_MICROSOFT | MDTYPE_MD5) +#else /* MSCHAP_SUPPORT */ +#define CHAP_MDTYPE_SUPPORTED (MDTYPE_MD5) +#endif /* MSCHAP_SUPPORT */ + +#else /* CHAP_SUPPORT */ +#define CHAP_MDTYPE_SUPPORTED (MDTYPE_NONE) +#endif /* CHAP_SUPPORT */ + +#if PPP_STATS_SUPPORT +/* + * PPP statistics structure + */ +struct pppd_stats { + unsigned int bytes_in; + unsigned int bytes_out; + unsigned int pkts_in; + unsigned int pkts_out; +}; +#endif /* PPP_STATS_SUPPORT */ + + +/* + * PPP private functions + */ + + +/* + * Functions called from lwIP core. + */ + +/* initialize the PPP subsystem */ +int ppp_init(void); + +/* + * Functions called from PPP link protocols. + */ + +/* Create a new PPP control block */ +ppp_pcb *ppp_new(struct netif *pppif, const struct link_callbacks *callbacks, void *link_ctx_cb, + ppp_link_status_cb_fn link_status_cb, void *ctx_cb); + +/* Initiate LCP open request */ +void ppp_start(ppp_pcb *pcb); + +/* Called when link failed to setup */ +void ppp_link_failed(ppp_pcb *pcb); + +/* Called when link is normally down (i.e. it was asked to end) */ +void ppp_link_end(ppp_pcb *pcb); + +/* function called to process input packet */ +void ppp_input(ppp_pcb *pcb, struct pbuf *pb); + + +/* + * Functions called by PPP protocols. + */ + +/* function called by all PPP subsystems to send packets */ +err_t ppp_write(ppp_pcb *pcb, struct pbuf *p); + +/* functions called by auth.c link_terminated() */ +void ppp_link_terminated(ppp_pcb *pcb); + +void new_phase(ppp_pcb *pcb, int p); + +int ppp_send_config(ppp_pcb *pcb, int mtu, u32_t accm, int pcomp, int accomp); +int ppp_recv_config(ppp_pcb *pcb, int mru, u32_t accm, int pcomp, int accomp); + +#if PPP_IPV4_SUPPORT +int sifaddr(ppp_pcb *pcb, u32_t our_adr, u32_t his_adr, u32_t netmask); +int cifaddr(ppp_pcb *pcb, u32_t our_adr, u32_t his_adr); +#if 0 /* UNUSED - PROXY ARP */ +int sifproxyarp(ppp_pcb *pcb, u32_t his_adr); +int cifproxyarp(ppp_pcb *pcb, u32_t his_adr); +#endif /* UNUSED - PROXY ARP */ +#if LWIP_DNS +int sdns(ppp_pcb *pcb, u32_t ns1, u32_t ns2); +int cdns(ppp_pcb *pcb, u32_t ns1, u32_t ns2); +#endif /* LWIP_DNS */ +#if VJ_SUPPORT +int sifvjcomp(ppp_pcb *pcb, int vjcomp, int cidcomp, int maxcid); +#endif /* VJ_SUPPORT */ +int sifup(ppp_pcb *pcb); +int sifdown (ppp_pcb *pcb); +u32_t get_mask(u32_t addr); +#endif /* PPP_IPV4_SUPPORT */ + +#if PPP_IPV6_SUPPORT +int sif6addr(ppp_pcb *pcb, eui64_t our_eui64, eui64_t his_eui64); +int cif6addr(ppp_pcb *pcb, eui64_t our_eui64, eui64_t his_eui64); +int sif6up(ppp_pcb *pcb); +int sif6down (ppp_pcb *pcb); +#endif /* PPP_IPV6_SUPPORT */ + +#if DEMAND_SUPPORT +int sifnpmode(ppp_pcb *pcb, int proto, enum NPmode mode); +#endif /* DEMAND_SUPPORt */ + +void netif_set_mtu(ppp_pcb *pcb, int mtu); +int netif_get_mtu(ppp_pcb *pcb); + +#if CCP_SUPPORT +#if 0 /* unused */ +int ccp_test(ppp_pcb *pcb, u_char *opt_ptr, int opt_len, int for_transmit); +#endif /* unused */ +void ccp_set(ppp_pcb *pcb, u8_t isopen, u8_t isup, u8_t receive_method, u8_t transmit_method); +void ccp_reset_comp(ppp_pcb *pcb); +void ccp_reset_decomp(ppp_pcb *pcb); +#if 0 /* unused */ +int ccp_fatal_error(ppp_pcb *pcb); +#endif /* unused */ +#endif /* CCP_SUPPORT */ + +#if PPP_IDLETIMELIMIT +int get_idle_time(ppp_pcb *pcb, struct ppp_idle *ip); +#endif /* PPP_IDLETIMELIMIT */ + +#if DEMAND_SUPPORT +int get_loop_output(void); +#endif /* DEMAND_SUPPORT */ + +/* Optional protocol names list, to make our messages a little more informative. */ +#if PPP_PROTOCOLNAME +const char * protocol_name(int proto); +#endif /* PPP_PROTOCOLNAME */ + +/* Optional stats support, to get some statistics on the PPP interface */ +#if PPP_STATS_SUPPORT +void print_link_stats(void); /* Print stats, if available */ +void reset_link_stats(int u); /* Reset (init) stats when link goes up */ +void update_link_stats(int u); /* Get stats at link termination */ +#endif /* PPP_STATS_SUPPORT */ + + + +/* + * Inline versions of get/put char/short/long. + * Pointer is advanced; we assume that both arguments + * are lvalues and will already be in registers. + * cp MUST be u_char *. + */ +#define GETCHAR(c, cp) { \ + (c) = *(cp)++; \ +} +#define PUTCHAR(c, cp) { \ + *(cp)++ = (u_char) (c); \ +} +#define GETSHORT(s, cp) { \ + (s) = *(cp)++ << 8; \ + (s) |= *(cp)++; \ +} +#define PUTSHORT(s, cp) { \ + *(cp)++ = (u_char) ((s) >> 8); \ + *(cp)++ = (u_char) (s); \ +} +#define GETLONG(l, cp) { \ + (l) = *(cp)++ << 8; \ + (l) |= *(cp)++; (l) <<= 8; \ + (l) |= *(cp)++; (l) <<= 8; \ + (l) |= *(cp)++; \ +} +#define PUTLONG(l, cp) { \ + *(cp)++ = (u_char) ((l) >> 24); \ + *(cp)++ = (u_char) ((l) >> 16); \ + *(cp)++ = (u_char) ((l) >> 8); \ + *(cp)++ = (u_char) (l); \ +} + +#define INCPTR(n, cp) ((cp) += (n)) +#define DECPTR(n, cp) ((cp) -= (n)) + +/* + * System dependent definitions for user-level 4.3BSD UNIX implementation. + */ +#define TIMEOUT(f, a, t) do { sys_untimeout((f), (a)); sys_timeout((t)*1000, (f), (a)); } while(0) +#define TIMEOUTMS(f, a, t) do { sys_untimeout((f), (a)); sys_timeout((t), (f), (a)); } while(0) +#define UNTIMEOUT(f, a) sys_untimeout((f), (a)) + +#define BZERO(s, n) memset(s, 0, n) +#define BCMP(s1, s2, l) memcmp(s1, s2, l) + +#define PRINTMSG(m, l) { ppp_info("Remote message: %0.*v", l, m); } + +/* + * MAKEHEADER - Add Header fields to a packet. + */ +#define MAKEHEADER(p, t) { \ + PUTCHAR(PPP_ALLSTATIONS, p); \ + PUTCHAR(PPP_UI, p); \ + PUTSHORT(t, p); } + +/* Procedures exported from auth.c */ +void link_required(ppp_pcb *pcb); /* we are starting to use the link */ +void link_terminated(ppp_pcb *pcb); /* we are finished with the link */ +void link_down(ppp_pcb *pcb); /* the LCP layer has left the Opened state */ +void upper_layers_down(ppp_pcb *pcb); /* take all NCPs down */ +void link_established(ppp_pcb *pcb); /* the link is up; authenticate now */ +void start_networks(ppp_pcb *pcb); /* start all the network control protos */ +void continue_networks(ppp_pcb *pcb); /* start network [ip, etc] control protos */ +#if PPP_AUTH_SUPPORT +#if PPP_SERVER +int auth_check_passwd(ppp_pcb *pcb, char *auser, int userlen, char *apasswd, int passwdlen, const char **msg, int *msglen); + /* check the user name and passwd against configuration */ +void auth_peer_fail(ppp_pcb *pcb, int protocol); + /* peer failed to authenticate itself */ +void auth_peer_success(ppp_pcb *pcb, int protocol, int prot_flavor, const char *name, int namelen); + /* peer successfully authenticated itself */ +#endif /* PPP_SERVER */ +void auth_withpeer_fail(ppp_pcb *pcb, int protocol); + /* we failed to authenticate ourselves */ +void auth_withpeer_success(ppp_pcb *pcb, int protocol, int prot_flavor); + /* we successfully authenticated ourselves */ +#endif /* PPP_AUTH_SUPPORT */ +void np_up(ppp_pcb *pcb, int proto); /* a network protocol has come up */ +void np_down(ppp_pcb *pcb, int proto); /* a network protocol has gone down */ +void np_finished(ppp_pcb *pcb, int proto); /* a network protocol no longer needs link */ +#if PPP_AUTH_SUPPORT +int get_secret(ppp_pcb *pcb, const char *client, const char *server, char *secret, int *secret_len, int am_server); + /* get "secret" for chap */ +#endif /* PPP_AUTH_SUPPORT */ + +/* Procedures exported from ipcp.c */ +/* int parse_dotted_ip (char *, u32_t *); */ + +/* Procedures exported from demand.c */ +#if DEMAND_SUPPORT +void demand_conf (void); /* config interface(s) for demand-dial */ +void demand_block (void); /* set all NPs to queue up packets */ +void demand_unblock (void); /* set all NPs to pass packets */ +void demand_discard (void); /* set all NPs to discard packets */ +void demand_rexmit (int, u32_t); /* retransmit saved frames for an NP*/ +int loop_chars (unsigned char *, int); /* process chars from loopback */ +int loop_frame (unsigned char *, int); /* should we bring link up? */ +#endif /* DEMAND_SUPPORT */ + +/* Procedures exported from multilink.c */ +#ifdef HAVE_MULTILINK +void mp_check_options (void); /* Check multilink-related options */ +int mp_join_bundle (void); /* join our link to an appropriate bundle */ +void mp_exit_bundle (void); /* have disconnected our link from bundle */ +void mp_bundle_terminated (void); +char *epdisc_to_str (struct epdisc *); /* string from endpoint discrim. */ +int str_to_epdisc (struct epdisc *, char *); /* endpt disc. from str */ +#else +#define mp_bundle_terminated() /* nothing */ +#define mp_exit_bundle() /* nothing */ +#define doing_multilink 0 +#define multilink_master 0 +#endif + +/* Procedures exported from utils.c. */ +void ppp_print_string(const u_char *p, int len, void (*printer) (void *, const char *, ...), void *arg); /* Format a string for output */ +int ppp_slprintf(char *buf, int buflen, const char *fmt, ...); /* sprintf++ */ +int ppp_vslprintf(char *buf, int buflen, const char *fmt, va_list args); /* vsprintf++ */ +size_t ppp_strlcpy(char *dest, const char *src, size_t len); /* safe strcpy */ +size_t ppp_strlcat(char *dest, const char *src, size_t len); /* safe strncpy */ +void ppp_dbglog(const char *fmt, ...); /* log a debug message */ +void ppp_info(const char *fmt, ...); /* log an informational message */ +void ppp_notice(const char *fmt, ...); /* log a notice-level message */ +void ppp_warn(const char *fmt, ...); /* log a warning message */ +void ppp_error(const char *fmt, ...); /* log an error message */ +void ppp_fatal(const char *fmt, ...); /* log an error message and die(1) */ +#if PRINTPKT_SUPPORT +void ppp_dump_packet(ppp_pcb *pcb, const char *tag, unsigned char *p, int len); + /* dump packet to debug log if interesting */ +#endif /* PRINTPKT_SUPPORT */ + +/* + * Number of necessary timers analysis. + * + * PPP use at least one timer per each of its protocol, but not all protocols are + * active at the same time, thus the number of necessary timeouts is actually + * lower than enabled protocols. Here is the actual necessary timeouts based + * on code analysis. + * + * Note that many features analysed here are not working at all and are only + * there for a comprehensive analysis of necessary timers in order to prevent + * having to redo that each time we add a feature. + * + * Timer list + * + * | holdoff timeout + * | low level protocol timeout (PPPoE or PPPoL2P) + * | LCP delayed UP + * | LCP retransmit (FSM) + * | LCP Echo timer + * .| PAP or CHAP or EAP authentication + * . | ECP retransmit (FSM) + * . | CCP retransmit (FSM) when MPPE is enabled + * . | CCP retransmit (FSM) when MPPE is NOT enabled + * . | IPCP retransmit (FSM) + * . .| IP6CP retransmit (FSM) + * . . | Idle time limit + * . . | Max connect time + * . . | Max octets + * . . | CCP RACK timeout + * . . . + * PPP_PHASE_DEAD + * PPP_PHASE_HOLDOFF + * | . . . + * PPP_PHASE_INITIALIZE + * | . . . + * PPP_PHASE_ESTABLISH + * | . . . + * |. . . + * | . . + * PPP_PHASE_AUTHENTICATE + * | . . + * || . . + * PPP_PHASE_NETWORK + * | || . . + * | ||| . + * PPP_PHASE_RUNNING + * | .||||| + * | . |||| + * PPP_PHASE_TERMINATE + * | . |||| + * PPP_PHASE_NETWORK + * |. . + * PPP_PHASE_ESTABLISH + * PPP_PHASE_DISCONNECT + * PPP_PHASE_DEAD + * + * Alright, PPP basic retransmission and LCP Echo consume one timer. + * 1 + * + * If authentication is enabled one timer is necessary during authentication. + * 1 + PPP_AUTH_SUPPORT + * + * If ECP is enabled one timer is necessary before IPCP and/or IP6CP, one more + * is necessary if CCP is enabled (only with MPPE support but we don't care much + * up to this detail level). + * 1 + ECP_SUPPORT + CCP_SUPPORT + * + * If CCP is enabled it might consume a timer during IPCP or IP6CP, thus + * we might use IPCP, IP6CP and CCP timers simultaneously. + * 1 + PPP_IPV4_SUPPORT + PPP_IPV6_SUPPORT + CCP_SUPPORT + * + * When entering running phase, IPCP or IP6CP is still running. If idle time limit + * is enabled one more timer is necessary. Same for max connect time and max + * octets features. Furthermore CCP RACK might be used past this point. + * 1 + PPP_IPV4_SUPPORT + PPP_IPV6_SUPPORT -1 + PPP_IDLETIMELIMIT + PPP_MAXCONNECT + MAXOCTETS + CCP_SUPPORT + * + * IPv4 or IPv6 must be enabled, therefore we don't need to take care the authentication + * and the CCP + ECP case, thus reducing overall complexity. + * 1 + LWIP_MAX(PPP_IPV4_SUPPORT + PPP_IPV6_SUPPORT + CCP_SUPPORT, PPP_IPV4_SUPPORT + PPP_IPV6_SUPPORT -1 + PPP_IDLETIMELIMIT + PPP_MAXCONNECT + MAXOCTETS + CCP_SUPPORT) + * + * We don't support PPP_IDLETIMELIMIT + PPP_MAXCONNECT + MAXOCTETS features + * and adding those defines to ppp_opts.h just for having the value always + * defined to 0 isn't worth it. + * 1 + LWIP_MAX(PPP_IPV4_SUPPORT + PPP_IPV6_SUPPORT + CCP_SUPPORT, PPP_IPV4_SUPPORT + PPP_IPV6_SUPPORT -1 + CCP_SUPPORT) + * + * Thus, the following is enough for now. + * 1 + PPP_IPV4_SUPPORT + PPP_IPV6_SUPPORT + CCP_SUPPORT + */ + +#ifdef __cplusplus +} +#endif + +#endif /* PPP_SUPPORT */ +#endif /* LWIP_HDR_PPP_IMPL_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/ppp_opts.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/ppp_opts.h new file mode 100644 index 0000000000000000000000000000000000000000..6702bec618e942b5e04bde46c43016b7d8c446f9 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/ppp_opts.h @@ -0,0 +1,610 @@ +/* + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + */ + +#ifndef LWIP_PPP_OPTS_H +#define LWIP_PPP_OPTS_H + +#include "lwip/opt.h" + +/** + * PPP_SUPPORT==1: Enable PPP. + */ +#ifndef PPP_SUPPORT +#define PPP_SUPPORT 0 +#endif + +/** + * PPPOE_SUPPORT==1: Enable PPP Over Ethernet + */ +#ifndef PPPOE_SUPPORT +#define PPPOE_SUPPORT 0 +#endif + +/** + * PPPOL2TP_SUPPORT==1: Enable PPP Over L2TP + */ +#ifndef PPPOL2TP_SUPPORT +#define PPPOL2TP_SUPPORT 0 +#endif + +/** + * PPPOL2TP_AUTH_SUPPORT==1: Enable PPP Over L2TP Auth (enable MD5 support) + */ +#ifndef PPPOL2TP_AUTH_SUPPORT +#define PPPOL2TP_AUTH_SUPPORT PPPOL2TP_SUPPORT +#endif + +/** + * PPPOS_SUPPORT==1: Enable PPP Over Serial + */ +#ifndef PPPOS_SUPPORT +#define PPPOS_SUPPORT PPP_SUPPORT +#endif + +/** + * LWIP_PPP_API==1: Enable PPP API (in pppapi.c) + */ +#ifndef LWIP_PPP_API +#define LWIP_PPP_API (PPP_SUPPORT && (NO_SYS == 0)) +#endif + +#if PPP_SUPPORT + +/** + * MEMP_NUM_PPP_PCB: the number of simultaneously active PPP + * connections (requires the PPP_SUPPORT option) + */ +#ifndef MEMP_NUM_PPP_PCB +#define MEMP_NUM_PPP_PCB 1 +#endif + +/** + * PPP_NUM_TIMEOUTS_PER_PCB: the number of sys_timeouts running in parallel per + * ppp_pcb. See the detailed explanation at the end of ppp_impl.h about simultaneous + * timers analysis. + */ +#ifndef PPP_NUM_TIMEOUTS_PER_PCB +#define PPP_NUM_TIMEOUTS_PER_PCB (1 + PPP_IPV4_SUPPORT + PPP_IPV6_SUPPORT + CCP_SUPPORT) +#endif + +/* The number of sys_timeouts required for the PPP module */ +#define PPP_NUM_TIMEOUTS (PPP_SUPPORT * PPP_NUM_TIMEOUTS_PER_PCB * MEMP_NUM_PPP_PCB) + +/** + * MEMP_NUM_PPPOS_INTERFACES: the number of concurrently active PPPoS + * interfaces (only used with PPPOS_SUPPORT==1) + */ +#ifndef MEMP_NUM_PPPOS_INTERFACES +#define MEMP_NUM_PPPOS_INTERFACES MEMP_NUM_PPP_PCB +#endif + +/** + * MEMP_NUM_PPPOE_INTERFACES: the number of concurrently active PPPoE + * interfaces (only used with PPPOE_SUPPORT==1) + */ +#ifndef MEMP_NUM_PPPOE_INTERFACES +#define MEMP_NUM_PPPOE_INTERFACES 1 +#endif + +/** + * MEMP_NUM_PPPOL2TP_INTERFACES: the number of concurrently active PPPoL2TP + * interfaces (only used with PPPOL2TP_SUPPORT==1) + */ +#ifndef MEMP_NUM_PPPOL2TP_INTERFACES +#define MEMP_NUM_PPPOL2TP_INTERFACES 1 +#endif + +/** + * MEMP_NUM_PPP_API_MSG: Number of concurrent PPP API messages (in pppapi.c) + */ +#ifndef MEMP_NUM_PPP_API_MSG +#define MEMP_NUM_PPP_API_MSG 5 +#endif + +/** + * PPP_DEBUG: Enable debugging for PPP. + */ +#ifndef PPP_DEBUG +#define PPP_DEBUG LWIP_DBG_OFF +#endif + +/** + * PPP_INPROC_IRQ_SAFE==1 call pppos_input() using tcpip_callback(). + * + * Please read the "PPPoS input path" chapter in the PPP documentation about this option. + */ +#ifndef PPP_INPROC_IRQ_SAFE +#define PPP_INPROC_IRQ_SAFE 0 +#endif + +/** + * PRINTPKT_SUPPORT==1: Enable PPP print packet support + * + * Mandatory for debugging, it displays exchanged packet content in debug trace. + */ +#ifndef PRINTPKT_SUPPORT +#define PRINTPKT_SUPPORT 0 +#endif + +/** + * PPP_IPV4_SUPPORT==1: Enable PPP IPv4 support + */ +#ifndef PPP_IPV4_SUPPORT +#define PPP_IPV4_SUPPORT (LWIP_IPV4) +#endif + +/** + * PPP_IPV6_SUPPORT==1: Enable PPP IPv6 support + */ +#ifndef PPP_IPV6_SUPPORT +#define PPP_IPV6_SUPPORT (LWIP_IPV6) +#endif + +/** + * PPP_NOTIFY_PHASE==1: Support PPP notify phase support + * + * PPP notify phase support allows you to set a callback which is + * called on change of the internal PPP state machine. + * + * This can be used for example to set a LED pattern depending on the + * current phase of the PPP session. + */ +#ifndef PPP_NOTIFY_PHASE +#define PPP_NOTIFY_PHASE 0 +#endif + +/** + * pbuf_type PPP is using for LCP, PAP, CHAP, EAP, CCP, IPCP and IP6CP packets. + * + * Memory allocated must be single buffered for PPP to works, it requires pbuf + * that are not going to be chained when allocated. This requires setting + * PBUF_POOL_BUFSIZE to at least 512 bytes, which is quite huge for small systems. + * + * Setting PPP_USE_PBUF_RAM to 1 makes PPP use memory from heap where continuous + * buffers are required, allowing you to use a smaller PBUF_POOL_BUFSIZE. + */ +#ifndef PPP_USE_PBUF_RAM +#define PPP_USE_PBUF_RAM 0 +#endif + +/** + * PPP_FCS_TABLE: Keep a 256*2 byte table to speed up FCS calculation for PPPoS + */ +#ifndef PPP_FCS_TABLE +#define PPP_FCS_TABLE 1 +#endif + +/** + * PAP_SUPPORT==1: Support PAP. + */ +#ifndef PAP_SUPPORT +#define PAP_SUPPORT 0 +#endif + +/** + * CHAP_SUPPORT==1: Support CHAP. + */ +#ifndef CHAP_SUPPORT +#define CHAP_SUPPORT 0 +#endif + +/** + * MSCHAP_SUPPORT==1: Support MSCHAP. + */ +#ifndef MSCHAP_SUPPORT +#define MSCHAP_SUPPORT 0 +#endif +#if MSCHAP_SUPPORT +/* MSCHAP requires CHAP support */ +#undef CHAP_SUPPORT +#define CHAP_SUPPORT 1 +#endif /* MSCHAP_SUPPORT */ + +/** + * EAP_SUPPORT==1: Support EAP. + */ +#ifndef EAP_SUPPORT +#define EAP_SUPPORT 0 +#endif + +/** + * CCP_SUPPORT==1: Support CCP. + */ +#ifndef CCP_SUPPORT +#define CCP_SUPPORT 0 +#endif + +/** + * MPPE_SUPPORT==1: Support MPPE. + */ +#ifndef MPPE_SUPPORT +#define MPPE_SUPPORT 0 +#endif +#if MPPE_SUPPORT +/* MPPE requires CCP support */ +#undef CCP_SUPPORT +#define CCP_SUPPORT 1 +/* MPPE requires MSCHAP support */ +#undef MSCHAP_SUPPORT +#define MSCHAP_SUPPORT 1 +/* MSCHAP requires CHAP support */ +#undef CHAP_SUPPORT +#define CHAP_SUPPORT 1 +#endif /* MPPE_SUPPORT */ + +/** + * CBCP_SUPPORT==1: Support CBCP. CURRENTLY NOT SUPPORTED! DO NOT SET! + */ +#ifndef CBCP_SUPPORT +#define CBCP_SUPPORT 0 +#endif + +/** + * ECP_SUPPORT==1: Support ECP. CURRENTLY NOT SUPPORTED! DO NOT SET! + */ +#ifndef ECP_SUPPORT +#define ECP_SUPPORT 0 +#endif + +/** + * DEMAND_SUPPORT==1: Support dial on demand. CURRENTLY NOT SUPPORTED! DO NOT SET! + */ +#ifndef DEMAND_SUPPORT +#define DEMAND_SUPPORT 0 +#endif + +/** + * LQR_SUPPORT==1: Support Link Quality Report. Do nothing except exchanging some LCP packets. + */ +#ifndef LQR_SUPPORT +#define LQR_SUPPORT 0 +#endif + +/** + * PPP_SERVER==1: Enable PPP server support (waiting for incoming PPP session). + * + * Currently only supported for PPPoS. + */ +#ifndef PPP_SERVER +#define PPP_SERVER 0 +#endif + +#if PPP_SERVER +/* + * PPP_OUR_NAME: Our name for authentication purposes + */ +#ifndef PPP_OUR_NAME +#define PPP_OUR_NAME "lwIP" +#endif +#endif /* PPP_SERVER */ + +/** + * VJ_SUPPORT==1: Support VJ header compression. + */ +#ifndef VJ_SUPPORT +#define VJ_SUPPORT 1 +#endif +/* VJ compression is only supported for TCP over IPv4 over PPPoS. */ +#if !PPPOS_SUPPORT || !PPP_IPV4_SUPPORT || !LWIP_TCP +#undef VJ_SUPPORT +#define VJ_SUPPORT 0 +#endif /* !PPPOS_SUPPORT */ + +/** + * PPP_MD5_RANDM==1: Use MD5 for better randomness. + * Enabled by default if CHAP, EAP, or L2TP AUTH support is enabled. + */ +#ifndef PPP_MD5_RANDM +#define PPP_MD5_RANDM (CHAP_SUPPORT || EAP_SUPPORT || PPPOL2TP_AUTH_SUPPORT) +#endif + +/** + * PolarSSL embedded library + * + * + * lwIP contains some files fetched from the latest BSD release of + * the PolarSSL project (PolarSSL 0.10.1-bsd) for ciphers and encryption + * methods we need for lwIP PPP support. + * + * The PolarSSL files were cleaned to contain only the necessary struct + * fields and functions needed for lwIP. + * + * The PolarSSL API was not changed at all, so if you are already using + * PolarSSL you can choose to skip the compilation of the included PolarSSL + * library into lwIP. + * + * If you are not using the embedded copy you must include external + * libraries into your arch/cc.h port file. + * + * Beware of the stack requirements which can be a lot larger if you are not + * using our cleaned PolarSSL library. + */ + +/** + * LWIP_USE_EXTERNAL_POLARSSL: Use external PolarSSL library + */ +#ifndef LWIP_USE_EXTERNAL_POLARSSL +#define LWIP_USE_EXTERNAL_POLARSSL 0 +#endif + +/** + * LWIP_USE_EXTERNAL_MBEDTLS: Use external mbed TLS library + */ +#ifndef LWIP_USE_EXTERNAL_MBEDTLS +#define LWIP_USE_EXTERNAL_MBEDTLS 0 +#endif + +/* + * PPP Timeouts + */ + +/** + * FSM_DEFTIMEOUT: Timeout time in seconds + */ +#ifndef FSM_DEFTIMEOUT +#define FSM_DEFTIMEOUT 6 +#endif + +/** + * FSM_DEFMAXTERMREQS: Maximum Terminate-Request transmissions + */ +#ifndef FSM_DEFMAXTERMREQS +#define FSM_DEFMAXTERMREQS 2 +#endif + +/** + * FSM_DEFMAXCONFREQS: Maximum Configure-Request transmissions + */ +#ifndef FSM_DEFMAXCONFREQS +#define FSM_DEFMAXCONFREQS 10 +#endif + +/** + * FSM_DEFMAXNAKLOOPS: Maximum number of nak loops + */ +#ifndef FSM_DEFMAXNAKLOOPS +#define FSM_DEFMAXNAKLOOPS 5 +#endif + +/** + * UPAP_DEFTIMEOUT: Timeout (seconds) for retransmitting req + */ +#ifndef UPAP_DEFTIMEOUT +#define UPAP_DEFTIMEOUT 6 +#endif + +/** + * UPAP_DEFTRANSMITS: Maximum number of auth-reqs to send + */ +#ifndef UPAP_DEFTRANSMITS +#define UPAP_DEFTRANSMITS 10 +#endif + +#if PPP_SERVER +/** + * UPAP_DEFREQTIME: Time to wait for auth-req from peer + */ +#ifndef UPAP_DEFREQTIME +#define UPAP_DEFREQTIME 30 +#endif +#endif /* PPP_SERVER */ + +/** + * CHAP_DEFTIMEOUT: Timeout (seconds) for retransmitting req + */ +#ifndef CHAP_DEFTIMEOUT +#define CHAP_DEFTIMEOUT 6 +#endif + +/** + * CHAP_DEFTRANSMITS: max # times to send challenge + */ +#ifndef CHAP_DEFTRANSMITS +#define CHAP_DEFTRANSMITS 10 +#endif + +#if PPP_SERVER +/** + * CHAP_DEFRECHALLENGETIME: If this option is > 0, rechallenge the peer every n seconds + */ +#ifndef CHAP_DEFRECHALLENGETIME +#define CHAP_DEFRECHALLENGETIME 0 +#endif +#endif /* PPP_SERVER */ + +/** + * EAP_DEFREQTIME: Time to wait for peer request + */ +#ifndef EAP_DEFREQTIME +#define EAP_DEFREQTIME 6 +#endif + +/** + * EAP_DEFALLOWREQ: max # times to accept requests + */ +#ifndef EAP_DEFALLOWREQ +#define EAP_DEFALLOWREQ 10 +#endif + +#if PPP_SERVER +/** + * EAP_DEFTIMEOUT: Timeout (seconds) for rexmit + */ +#ifndef EAP_DEFTIMEOUT +#define EAP_DEFTIMEOUT 6 +#endif + +/** + * EAP_DEFTRANSMITS: max # times to transmit + */ +#ifndef EAP_DEFTRANSMITS +#define EAP_DEFTRANSMITS 10 +#endif +#endif /* PPP_SERVER */ + +/** + * LCP_DEFLOOPBACKFAIL: Default number of times we receive our magic number from the peer + * before deciding the link is looped-back. + */ +#ifndef LCP_DEFLOOPBACKFAIL +#define LCP_DEFLOOPBACKFAIL 10 +#endif + +/** + * LCP_ECHOINTERVAL: Interval in seconds between keepalive echo requests, 0 to disable. + */ +#ifndef LCP_ECHOINTERVAL +#define LCP_ECHOINTERVAL 0 +#endif + +/** + * LCP_MAXECHOFAILS: Number of unanswered echo requests before failure. + */ +#ifndef LCP_MAXECHOFAILS +#define LCP_MAXECHOFAILS 3 +#endif + +/** + * PPP_MAXIDLEFLAG: Max Xmit idle time (in ms) before resend flag char. + */ +#ifndef PPP_MAXIDLEFLAG +#define PPP_MAXIDLEFLAG 100 +#endif + +/** + * PPP Packet sizes + */ + +/** + * PPP_MRU: Default MRU + */ +#ifndef PPP_MRU +#define PPP_MRU 1500 +#endif + +/** + * PPP_DEFMRU: Default MRU to try + */ +#ifndef PPP_DEFMRU +#define PPP_DEFMRU 1500 +#endif + +/** + * PPP_MAXMRU: Normally limit MRU to this (pppd default = 16384) + */ +#ifndef PPP_MAXMRU +#define PPP_MAXMRU 1500 +#endif + +/** + * PPP_MINMRU: No MRUs below this + */ +#ifndef PPP_MINMRU +#define PPP_MINMRU 128 +#endif + +/** + * PPPOL2TP_DEFMRU: Default MTU and MRU for L2TP + * Default = 1500 - PPPoE(6) - PPP Protocol(2) - IPv4 header(20) - UDP Header(8) + * - L2TP Header(6) - HDLC Header(2) - PPP Protocol(2) - MPPE Header(2) - PPP Protocol(2) + */ +#if PPPOL2TP_SUPPORT +#ifndef PPPOL2TP_DEFMRU +#define PPPOL2TP_DEFMRU 1450 +#endif +#endif /* PPPOL2TP_SUPPORT */ + +/** + * MAXNAMELEN: max length of hostname or name for auth + */ +#ifndef MAXNAMELEN +#define MAXNAMELEN 256 +#endif + +/** + * MAXSECRETLEN: max length of password or secret + */ +#ifndef MAXSECRETLEN +#define MAXSECRETLEN 256 +#endif + +/* ------------------------------------------------------------------------- */ + +/* + * Build triggers for embedded PolarSSL + */ +#if !LWIP_USE_EXTERNAL_POLARSSL && !LWIP_USE_EXTERNAL_MBEDTLS + +/* CHAP, EAP, L2TP AUTH and MD5 Random require MD5 support */ +#if CHAP_SUPPORT || EAP_SUPPORT || PPPOL2TP_AUTH_SUPPORT || PPP_MD5_RANDM +#define LWIP_INCLUDED_POLARSSL_MD5 1 +#endif /* CHAP_SUPPORT || EAP_SUPPORT || PPPOL2TP_AUTH_SUPPORT || PPP_MD5_RANDM */ + +#if MSCHAP_SUPPORT + +/* MSCHAP require MD4 support */ +#define LWIP_INCLUDED_POLARSSL_MD4 1 +/* MSCHAP require SHA1 support */ +#define LWIP_INCLUDED_POLARSSL_SHA1 1 +/* MSCHAP require DES support */ +#define LWIP_INCLUDED_POLARSSL_DES 1 + +/* MS-CHAP support is required for MPPE */ +#if MPPE_SUPPORT +/* MPPE require ARC4 support */ +#define LWIP_INCLUDED_POLARSSL_ARC4 1 +#endif /* MPPE_SUPPORT */ + +#endif /* MSCHAP_SUPPORT */ + +#endif /* !LWIP_USE_EXTERNAL_POLARSSL && !LWIP_USE_EXTERNAL_MBEDTLS */ + +/* Default value if unset */ +#ifndef LWIP_INCLUDED_POLARSSL_MD4 +#define LWIP_INCLUDED_POLARSSL_MD4 0 +#endif /* LWIP_INCLUDED_POLARSSL_MD4 */ +#ifndef LWIP_INCLUDED_POLARSSL_MD5 +#define LWIP_INCLUDED_POLARSSL_MD5 0 +#endif /* LWIP_INCLUDED_POLARSSL_MD5 */ +#ifndef LWIP_INCLUDED_POLARSSL_SHA1 +#define LWIP_INCLUDED_POLARSSL_SHA1 0 +#endif /* LWIP_INCLUDED_POLARSSL_SHA1 */ +#ifndef LWIP_INCLUDED_POLARSSL_DES +#define LWIP_INCLUDED_POLARSSL_DES 0 +#endif /* LWIP_INCLUDED_POLARSSL_DES */ +#ifndef LWIP_INCLUDED_POLARSSL_ARC4 +#define LWIP_INCLUDED_POLARSSL_ARC4 0 +#endif /* LWIP_INCLUDED_POLARSSL_ARC4 */ + +#endif /* PPP_SUPPORT */ + +/* Default value if unset */ +#ifndef PPP_NUM_TIMEOUTS +#define PPP_NUM_TIMEOUTS 0 +#endif /* PPP_NUM_TIMEOUTS */ + +#endif /* LWIP_PPP_OPTS_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/pppapi.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/pppapi.h new file mode 100644 index 0000000000000000000000000000000000000000..913d93f749501d2f9248d3ca6dee18522c310b29 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/pppapi.h @@ -0,0 +1,137 @@ +/* + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + */ + +#ifndef LWIP_PPPAPI_H +#define LWIP_PPPAPI_H + +#include "netif/ppp/ppp_opts.h" + +#if LWIP_PPP_API /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/sys.h" +#include "lwip/netif.h" +#include "lwip/priv/tcpip_priv.h" +#include "netif/ppp/ppp.h" +#if PPPOS_SUPPORT +#include "netif/ppp/pppos.h" +#endif /* PPPOS_SUPPORT */ + +#ifdef __cplusplus +extern "C" { +#endif + +struct pppapi_msg_msg { + ppp_pcb *ppp; + union { +#if PPP_NOTIFY_PHASE + struct { + ppp_notify_phase_cb_fn notify_phase_cb; + } setnotifyphasecb; +#endif /* PPP_NOTIFY_PHASE */ +#if PPPOS_SUPPORT + struct { + struct netif *pppif; + pppos_output_cb_fn output_cb; + ppp_link_status_cb_fn link_status_cb; + void *ctx_cb; + } serialcreate; +#endif /* PPPOS_SUPPORT */ +#if PPPOE_SUPPORT + struct { + struct netif *pppif; + struct netif *ethif; + const char *service_name; + const char *concentrator_name; + ppp_link_status_cb_fn link_status_cb; + void *ctx_cb; + } ethernetcreate; +#endif /* PPPOE_SUPPORT */ +#if PPPOL2TP_SUPPORT + struct { + struct netif *pppif; + struct netif *netif; + API_MSG_M_DEF_C(ip_addr_t, ipaddr); + u16_t port; +#if PPPOL2TP_AUTH_SUPPORT + const u8_t *secret; + u8_t secret_len; +#endif /* PPPOL2TP_AUTH_SUPPORT */ + ppp_link_status_cb_fn link_status_cb; + void *ctx_cb; + } l2tpcreate; +#endif /* PPPOL2TP_SUPPORT */ + struct { + u16_t holdoff; + } connect; + struct { + u8_t nocarrier; + } close; + struct { + u8_t cmd; + void *arg; + } ioctl; + } msg; +}; + +struct pppapi_msg { + struct tcpip_api_call_data call; + struct pppapi_msg_msg msg; +}; + +/* API for application */ +err_t pppapi_set_default(ppp_pcb *pcb); +#if PPP_NOTIFY_PHASE +err_t pppapi_set_notify_phase_callback(ppp_pcb *pcb, ppp_notify_phase_cb_fn notify_phase_cb); +#endif /* PPP_NOTIFY_PHASE */ +#if PPPOS_SUPPORT +ppp_pcb *pppapi_pppos_create(struct netif *pppif, pppos_output_cb_fn output_cb, ppp_link_status_cb_fn link_status_cb, void *ctx_cb); +#endif /* PPPOS_SUPPORT */ +#if PPPOE_SUPPORT +ppp_pcb *pppapi_pppoe_create(struct netif *pppif, struct netif *ethif, const char *service_name, + const char *concentrator_name, ppp_link_status_cb_fn link_status_cb, + void *ctx_cb); +#endif /* PPPOE_SUPPORT */ +#if PPPOL2TP_SUPPORT +ppp_pcb *pppapi_pppol2tp_create(struct netif *pppif, struct netif *netif, ip_addr_t *ipaddr, u16_t port, + const u8_t *secret, u8_t secret_len, + ppp_link_status_cb_fn link_status_cb, void *ctx_cb); +#endif /* PPPOL2TP_SUPPORT */ +err_t pppapi_connect(ppp_pcb *pcb, u16_t holdoff); +#if PPP_SERVER +err_t pppapi_listen(ppp_pcb *pcb); +#endif /* PPP_SERVER */ +err_t pppapi_close(ppp_pcb *pcb, u8_t nocarrier); +err_t pppapi_free(ppp_pcb *pcb); +err_t pppapi_ioctl(ppp_pcb *pcb, u8_t cmd, void *arg); + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_PPP_API */ + +#endif /* LWIP_PPPAPI_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/pppcrypt.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/pppcrypt.h new file mode 100644 index 0000000000000000000000000000000000000000..c0230bbcb7f57d9a3aed2447ff8feff92c64002c --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/pppcrypt.h @@ -0,0 +1,144 @@ +/* + * pppcrypt.c - PPP/DES linkage for MS-CHAP and EAP SRP-SHA1 + * + * Extracted from chap_ms.c by James Carlson. + * + * Copyright (c) 1995 Eric Rosenquist. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The name(s) of the authors of this software must not be used to + * endorse or promote products derived from this software without + * prior written permission. + * + * THE AUTHORS OF THIS SOFTWARE DISCLAIM ALL WARRANTIES WITH REGARD TO + * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY + * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include "netif/ppp/ppp_opts.h" +#if PPP_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +/* This header file is included in all PPP modules needing hashes and/or ciphers */ + +#ifndef PPPCRYPT_H +#define PPPCRYPT_H + +/* + * If included PolarSSL copy is not used, user is expected to include + * external libraries in arch/cc.h (which is included by lwip/arch.h). + */ +#include "lwip/arch.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Map hashes and ciphers functions to PolarSSL + */ +#if !LWIP_USE_EXTERNAL_MBEDTLS + +#include "netif/ppp/polarssl/md4.h" +#define lwip_md4_context md4_context +#define lwip_md4_init(context) +#define lwip_md4_starts md4_starts +#define lwip_md4_update md4_update +#define lwip_md4_finish md4_finish +#define lwip_md4_free(context) + +#include "netif/ppp/polarssl/md5.h" +#define lwip_md5_context md5_context +#define lwip_md5_init(context) +#define lwip_md5_starts md5_starts +#define lwip_md5_update md5_update +#define lwip_md5_finish md5_finish +#define lwip_md5_free(context) + +#include "netif/ppp/polarssl/sha1.h" +#define lwip_sha1_context sha1_context +#define lwip_sha1_init(context) +#define lwip_sha1_starts sha1_starts +#define lwip_sha1_update sha1_update +#define lwip_sha1_finish sha1_finish +#define lwip_sha1_free(context) + +#include "netif/ppp/polarssl/des.h" +#define lwip_des_context des_context +#define lwip_des_init(context) +#define lwip_des_setkey_enc des_setkey_enc +#define lwip_des_crypt_ecb des_crypt_ecb +#define lwip_des_free(context) + +#include "netif/ppp/polarssl/arc4.h" +#define lwip_arc4_context arc4_context +#define lwip_arc4_init(context) +#define lwip_arc4_setup arc4_setup +#define lwip_arc4_crypt arc4_crypt +#define lwip_arc4_free(context) + +#endif /* !LWIP_USE_EXTERNAL_MBEDTLS */ + +/* + * Map hashes and ciphers functions to mbed TLS + */ +#if LWIP_USE_EXTERNAL_MBEDTLS + +#define lwip_md4_context mbedtls_md4_context +#define lwip_md4_init mbedtls_md4_init +#define lwip_md4_starts mbedtls_md4_starts +#define lwip_md4_update mbedtls_md4_update +#define lwip_md4_finish mbedtls_md4_finish +#define lwip_md4_free mbedtls_md4_free + +#define lwip_md5_context mbedtls_md5_context +#define lwip_md5_init mbedtls_md5_init +#define lwip_md5_starts mbedtls_md5_starts +#define lwip_md5_update mbedtls_md5_update +#define lwip_md5_finish mbedtls_md5_finish +#define lwip_md5_free mbedtls_md5_free + +#define lwip_sha1_context mbedtls_sha1_context +#define lwip_sha1_init mbedtls_sha1_init +#define lwip_sha1_starts mbedtls_sha1_starts +#define lwip_sha1_update mbedtls_sha1_update +#define lwip_sha1_finish mbedtls_sha1_finish +#define lwip_sha1_free mbedtls_sha1_free + +#define lwip_des_context mbedtls_des_context +#define lwip_des_init mbedtls_des_init +#define lwip_des_setkey_enc mbedtls_des_setkey_enc +#define lwip_des_crypt_ecb mbedtls_des_crypt_ecb +#define lwip_des_free mbedtls_des_free + +#define lwip_arc4_context mbedtls_arc4_context +#define lwip_arc4_init mbedtls_arc4_init +#define lwip_arc4_setup mbedtls_arc4_setup +#define lwip_arc4_crypt(context, buffer, length) mbedtls_arc4_crypt(context, length, buffer, buffer) +#define lwip_arc4_free mbedtls_arc4_free + +#endif /* LWIP_USE_EXTERNAL_MBEDTLS */ + +void pppcrypt_56_to_64_bit_key(u_char *key, u_char *des_key); + +#ifdef __cplusplus +} +#endif + +#endif /* PPPCRYPT_H */ + +#endif /* PPP_SUPPORT */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/pppdebug.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/pppdebug.h new file mode 100644 index 0000000000000000000000000000000000000000..36ee4f9bf9afb3c2a9202a9f033e5402a706c448 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/pppdebug.h @@ -0,0 +1,88 @@ +/***************************************************************************** +* pppdebug.h - System debugging utilities. +* +* Copyright (c) 2003 by Marc Boucher, Services Informatiques (MBSI) inc. +* portions Copyright (c) 1998 Global Election Systems Inc. +* portions Copyright (c) 2001 by Cognizant Pty Ltd. +* +* The authors hereby grant permission to use, copy, modify, distribute, +* and license this software and its documentation for any purpose, provided +* that existing copyright notices are retained in all copies and that this +* notice and the following disclaimer are included verbatim in any +* distributions. No written agreement, license, or royalty fee is required +* for any of the authorized uses. +* +* THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS *AS IS* AND ANY EXPRESS OR +* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +* IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +****************************************************************************** +* REVISION HISTORY (please don't use tabs!) +* +* 03-01-01 Marc Boucher +* Ported to lwIP. +* 98-07-29 Guy Lancaster , Global Election Systems Inc. +* Original. +* +***************************************************************************** +*/ + +#include "netif/ppp/ppp_opts.h" +#if PPP_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +#ifndef PPPDEBUG_H +#define PPPDEBUG_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Trace levels. */ +#define LOG_CRITICAL (PPP_DEBUG | LWIP_DBG_LEVEL_SEVERE) +#define LOG_ERR (PPP_DEBUG | LWIP_DBG_LEVEL_SEVERE) +#define LOG_NOTICE (PPP_DEBUG | LWIP_DBG_LEVEL_WARNING) +#define LOG_WARNING (PPP_DEBUG | LWIP_DBG_LEVEL_WARNING) +#define LOG_INFO (PPP_DEBUG) +#define LOG_DETAIL (PPP_DEBUG) +#define LOG_DEBUG (PPP_DEBUG) + +#if PPP_DEBUG + +#define MAINDEBUG(a) LWIP_DEBUGF(LWIP_DBG_LEVEL_WARNING, a) +#define SYSDEBUG(a) LWIP_DEBUGF(LWIP_DBG_LEVEL_WARNING, a) +#define FSMDEBUG(a) LWIP_DEBUGF(LWIP_DBG_LEVEL_WARNING, a) +#define LCPDEBUG(a) LWIP_DEBUGF(LWIP_DBG_LEVEL_WARNING, a) +#define IPCPDEBUG(a) LWIP_DEBUGF(LWIP_DBG_LEVEL_WARNING, a) +#define IPV6CPDEBUG(a) LWIP_DEBUGF(LWIP_DBG_LEVEL_WARNING, a) +#define UPAPDEBUG(a) LWIP_DEBUGF(LWIP_DBG_LEVEL_WARNING, a) +#define CHAPDEBUG(a) LWIP_DEBUGF(LWIP_DBG_LEVEL_WARNING, a) +#define PPPDEBUG(a, b) LWIP_DEBUGF(a, b) + +#else /* PPP_DEBUG */ + +#define MAINDEBUG(a) +#define SYSDEBUG(a) +#define FSMDEBUG(a) +#define LCPDEBUG(a) +#define IPCPDEBUG(a) +#define IPV6CPDEBUG(a) +#define UPAPDEBUG(a) +#define CHAPDEBUG(a) +#define PPPDEBUG(a, b) + +#endif /* PPP_DEBUG */ + +#ifdef __cplusplus +} +#endif + +#endif /* PPPDEBUG_H */ + +#endif /* PPP_SUPPORT */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/pppoe.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/pppoe.h new file mode 100644 index 0000000000000000000000000000000000000000..08ab7ab54e62f7f9d302ab2dbb1dbf69ff93eedd --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/pppoe.h @@ -0,0 +1,187 @@ +/***************************************************************************** +* pppoe.h - PPP Over Ethernet implementation for lwIP. +* +* Copyright (c) 2006 by Marc Boucher, Services Informatiques (MBSI) inc. +* +* The authors hereby grant permission to use, copy, modify, distribute, +* and license this software and its documentation for any purpose, provided +* that existing copyright notices are retained in all copies and that this +* notice and the following disclaimer are included verbatim in any +* distributions. No written agreement, license, or royalty fee is required +* for any of the authorized uses. +* +* THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS *AS IS* AND ANY EXPRESS OR +* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +* IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +****************************************************************************** +* REVISION HISTORY +* +* 06-01-01 Marc Boucher +* Ported to lwIP. +*****************************************************************************/ + + + +/* based on NetBSD: if_pppoe.c,v 1.64 2006/01/31 23:50:15 martin Exp */ + +/*- + * Copyright (c) 2002 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Martin Husemann . + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the NetBSD + * Foundation, Inc. and its contributors. + * 4. Neither the name of The NetBSD Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ +#include "netif/ppp/ppp_opts.h" +#if PPP_SUPPORT && PPPOE_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +#ifndef PPP_OE_H +#define PPP_OE_H + +#include "ppp.h" +#include "lwip/etharp.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct pppoehdr { + PACK_STRUCT_FLD_8(u8_t vertype); + PACK_STRUCT_FLD_8(u8_t code); + PACK_STRUCT_FIELD(u16_t session); + PACK_STRUCT_FIELD(u16_t plen); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct pppoetag { + PACK_STRUCT_FIELD(u16_t tag); + PACK_STRUCT_FIELD(u16_t len); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + + +#define PPPOE_STATE_INITIAL 0 +#define PPPOE_STATE_PADI_SENT 1 +#define PPPOE_STATE_PADR_SENT 2 +#define PPPOE_STATE_SESSION 3 +/* passive */ +#define PPPOE_STATE_PADO_SENT 1 + +#define PPPOE_HEADERLEN sizeof(struct pppoehdr) +#define PPPOE_VERTYPE 0x11 /* VER=1, TYPE = 1 */ + +#define PPPOE_TAG_EOL 0x0000 /* end of list */ +#define PPPOE_TAG_SNAME 0x0101 /* service name */ +#define PPPOE_TAG_ACNAME 0x0102 /* access concentrator name */ +#define PPPOE_TAG_HUNIQUE 0x0103 /* host unique */ +#define PPPOE_TAG_ACCOOKIE 0x0104 /* AC cookie */ +#define PPPOE_TAG_VENDOR 0x0105 /* vendor specific */ +#define PPPOE_TAG_RELAYSID 0x0110 /* relay session id */ +#define PPPOE_TAG_SNAME_ERR 0x0201 /* service name error */ +#define PPPOE_TAG_ACSYS_ERR 0x0202 /* AC system error */ +#define PPPOE_TAG_GENERIC_ERR 0x0203 /* gerneric error */ + +#define PPPOE_CODE_PADI 0x09 /* Active Discovery Initiation */ +#define PPPOE_CODE_PADO 0x07 /* Active Discovery Offer */ +#define PPPOE_CODE_PADR 0x19 /* Active Discovery Request */ +#define PPPOE_CODE_PADS 0x65 /* Active Discovery Session confirmation */ +#define PPPOE_CODE_PADT 0xA7 /* Active Discovery Terminate */ + +#ifndef PPPOE_MAX_AC_COOKIE_LEN +#define PPPOE_MAX_AC_COOKIE_LEN 64 +#endif + +struct pppoe_softc { + struct pppoe_softc *next; + struct netif *sc_ethif; /* ethernet interface we are using */ + ppp_pcb *pcb; /* PPP PCB */ + + struct eth_addr sc_dest; /* hardware address of concentrator */ + u16_t sc_session; /* PPPoE session id */ + u8_t sc_state; /* discovery phase or session connected */ + +#ifdef PPPOE_TODO + u8_t *sc_service_name; /* if != NULL: requested name of service */ + u8_t *sc_concentrator_name; /* if != NULL: requested concentrator id */ +#endif /* PPPOE_TODO */ + u8_t sc_ac_cookie[PPPOE_MAX_AC_COOKIE_LEN]; /* content of AC cookie we must echo back */ + u8_t sc_ac_cookie_len; /* length of cookie data */ +#ifdef PPPOE_SERVER + u8_t *sc_hunique; /* content of host unique we must echo back */ + u8_t sc_hunique_len; /* length of host unique */ +#endif + u8_t sc_padi_retried; /* number of PADI retries already done */ + u8_t sc_padr_retried; /* number of PADR retries already done */ +}; + + +#define pppoe_init() /* compatibility define, no initialization needed */ + +ppp_pcb *pppoe_create(struct netif *pppif, + struct netif *ethif, + const char *service_name, const char *concentrator_name, + ppp_link_status_cb_fn link_status_cb, void *ctx_cb); + +/* + * Functions called from lwIP + * DO NOT CALL FROM lwIP USER APPLICATION. + */ +void pppoe_disc_input(struct netif *netif, struct pbuf *p); +void pppoe_data_input(struct netif *netif, struct pbuf *p); + +#ifdef __cplusplus +} +#endif + +#endif /* PPP_OE_H */ + +#endif /* PPP_SUPPORT && PPPOE_SUPPORT */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/pppol2tp.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/pppol2tp.h new file mode 100644 index 0000000000000000000000000000000000000000..1221ca15b7edc41e55bbb51eb50296706c6a2d49 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/pppol2tp.h @@ -0,0 +1,209 @@ +/** + * @file + * Network Point to Point Protocol over Layer 2 Tunneling Protocol header file. + * + */ + +/* + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + */ + +#include "netif/ppp/ppp_opts.h" +#if PPP_SUPPORT && PPPOL2TP_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +#ifndef PPPOL2TP_H +#define PPPOL2TP_H + +#include "ppp.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Timeout */ +#define PPPOL2TP_CONTROL_TIMEOUT (5*1000) /* base for quick timeout calculation */ +#define PPPOL2TP_SLOW_RETRY (60*1000) /* persistent retry interval */ + +#define PPPOL2TP_MAXSCCRQ 4 /* retry SCCRQ four times (quickly) */ +#define PPPOL2TP_MAXICRQ 4 /* retry IRCQ four times */ +#define PPPOL2TP_MAXICCN 4 /* retry ICCN four times */ + +/* L2TP header flags */ +#define PPPOL2TP_HEADERFLAG_CONTROL 0x8000 +#define PPPOL2TP_HEADERFLAG_LENGTH 0x4000 +#define PPPOL2TP_HEADERFLAG_SEQUENCE 0x0800 +#define PPPOL2TP_HEADERFLAG_OFFSET 0x0200 +#define PPPOL2TP_HEADERFLAG_PRIORITY 0x0100 +#define PPPOL2TP_HEADERFLAG_VERSION 0x0002 + +/* Mandatory bits for control: Control, Length, Sequence, Version 2 */ +#define PPPOL2TP_HEADERFLAG_CONTROL_MANDATORY (PPPOL2TP_HEADERFLAG_CONTROL|PPPOL2TP_HEADERFLAG_LENGTH|PPPOL2TP_HEADERFLAG_SEQUENCE|PPPOL2TP_HEADERFLAG_VERSION) +/* Forbidden bits for control: Offset, Priority */ +#define PPPOL2TP_HEADERFLAG_CONTROL_FORBIDDEN (PPPOL2TP_HEADERFLAG_OFFSET|PPPOL2TP_HEADERFLAG_PRIORITY) + +/* Mandatory bits for data: Version 2 */ +#define PPPOL2TP_HEADERFLAG_DATA_MANDATORY (PPPOL2TP_HEADERFLAG_VERSION) + +/* AVP (Attribute Value Pair) header */ +#define PPPOL2TP_AVPHEADERFLAG_MANDATORY 0x8000 +#define PPPOL2TP_AVPHEADERFLAG_HIDDEN 0x4000 +#define PPPOL2TP_AVPHEADERFLAG_LENGTHMASK 0x03ff + +/* -- AVP - Message type */ +#define PPPOL2TP_AVPTYPE_MESSAGE 0 /* Message type */ + +/* Control Connection Management */ +#define PPPOL2TP_MESSAGETYPE_SCCRQ 1 /* Start Control Connection Request */ +#define PPPOL2TP_MESSAGETYPE_SCCRP 2 /* Start Control Connection Reply */ +#define PPPOL2TP_MESSAGETYPE_SCCCN 3 /* Start Control Connection Connected */ +#define PPPOL2TP_MESSAGETYPE_STOPCCN 4 /* Stop Control Connection Notification */ +#define PPPOL2TP_MESSAGETYPE_HELLO 6 /* Hello */ +/* Call Management */ +#define PPPOL2TP_MESSAGETYPE_OCRQ 7 /* Outgoing Call Request */ +#define PPPOL2TP_MESSAGETYPE_OCRP 8 /* Outgoing Call Reply */ +#define PPPOL2TP_MESSAGETYPE_OCCN 9 /* Outgoing Call Connected */ +#define PPPOL2TP_MESSAGETYPE_ICRQ 10 /* Incoming Call Request */ +#define PPPOL2TP_MESSAGETYPE_ICRP 11 /* Incoming Call Reply */ +#define PPPOL2TP_MESSAGETYPE_ICCN 12 /* Incoming Call Connected */ +#define PPPOL2TP_MESSAGETYPE_CDN 14 /* Call Disconnect Notify */ +/* Error reporting */ +#define PPPOL2TP_MESSAGETYPE_WEN 15 /* WAN Error Notify */ +/* PPP Session Control */ +#define PPPOL2TP_MESSAGETYPE_SLI 16 /* Set Link Info */ + +/* -- AVP - Result code */ +#define PPPOL2TP_AVPTYPE_RESULTCODE 1 /* Result code */ +#define PPPOL2TP_RESULTCODE 1 /* General request to clear control connection */ + +/* -- AVP - Protocol version (!= L2TP Header version) */ +#define PPPOL2TP_AVPTYPE_VERSION 2 +#define PPPOL2TP_VERSION 0x0100 /* L2TP Protocol version 1, revision 0 */ + +/* -- AVP - Framing capabilities */ +#define PPPOL2TP_AVPTYPE_FRAMINGCAPABILITIES 3 /* Bearer capabilities */ +#define PPPOL2TP_FRAMINGCAPABILITIES 0x00000003 /* Async + Sync framing */ + +/* -- AVP - Bearer capabilities */ +#define PPPOL2TP_AVPTYPE_BEARERCAPABILITIES 4 /* Bearer capabilities */ +#define PPPOL2TP_BEARERCAPABILITIES 0x00000003 /* Analog + Digital Access */ + +/* -- AVP - Tie breaker */ +#define PPPOL2TP_AVPTYPE_TIEBREAKER 5 + +/* -- AVP - Host name */ +#define PPPOL2TP_AVPTYPE_HOSTNAME 7 /* Host name */ +#define PPPOL2TP_HOSTNAME "lwIP" /* FIXME: make it configurable */ + +/* -- AVP - Vendor name */ +#define PPPOL2TP_AVPTYPE_VENDORNAME 8 /* Vendor name */ +#define PPPOL2TP_VENDORNAME "lwIP" /* FIXME: make it configurable */ + +/* -- AVP - Assign tunnel ID */ +#define PPPOL2TP_AVPTYPE_TUNNELID 9 /* Assign Tunnel ID */ + +/* -- AVP - Receive window size */ +#define PPPOL2TP_AVPTYPE_RECEIVEWINDOWSIZE 10 /* Receive window size */ +#define PPPOL2TP_RECEIVEWINDOWSIZE 8 /* FIXME: make it configurable */ + +/* -- AVP - Challenge */ +#define PPPOL2TP_AVPTYPE_CHALLENGE 11 /* Challenge */ + +/* -- AVP - Cause code */ +#define PPPOL2TP_AVPTYPE_CAUSECODE 12 /* Cause code*/ + +/* -- AVP - Challenge response */ +#define PPPOL2TP_AVPTYPE_CHALLENGERESPONSE 13 /* Challenge response */ +#define PPPOL2TP_AVPTYPE_CHALLENGERESPONSE_SIZE 16 + +/* -- AVP - Assign session ID */ +#define PPPOL2TP_AVPTYPE_SESSIONID 14 /* Assign Session ID */ + +/* -- AVP - Call serial number */ +#define PPPOL2TP_AVPTYPE_CALLSERIALNUMBER 15 /* Call Serial Number */ + +/* -- AVP - Framing type */ +#define PPPOL2TP_AVPTYPE_FRAMINGTYPE 19 /* Framing Type */ +#define PPPOL2TP_FRAMINGTYPE 0x00000001 /* Sync framing */ + +/* -- AVP - TX Connect Speed */ +#define PPPOL2TP_AVPTYPE_TXCONNECTSPEED 24 /* TX Connect Speed */ +#define PPPOL2TP_TXCONNECTSPEED 100000000 /* Connect speed: 100 Mbits/s */ + +/* L2TP Session state */ +#define PPPOL2TP_STATE_INITIAL 0 +#define PPPOL2TP_STATE_SCCRQ_SENT 1 +#define PPPOL2TP_STATE_ICRQ_SENT 2 +#define PPPOL2TP_STATE_ICCN_SENT 3 +#define PPPOL2TP_STATE_DATA 4 + +#define PPPOL2TP_OUTPUT_DATA_HEADER_LEN 6 /* Our data header len */ + +/* + * PPPoL2TP interface control block. + */ +typedef struct pppol2tp_pcb_s pppol2tp_pcb; +struct pppol2tp_pcb_s { + ppp_pcb *ppp; /* PPP PCB */ + u8_t phase; /* L2TP phase */ + struct udp_pcb *udp; /* UDP L2TP Socket */ + struct netif *netif; /* Output interface, used as a default route */ + ip_addr_t remote_ip; /* LNS IP Address */ + u16_t remote_port; /* LNS port */ +#if PPPOL2TP_AUTH_SUPPORT + const u8_t *secret; /* Secret string */ + u8_t secret_len; /* Secret string length */ + u8_t secret_rv[16]; /* Random vector */ + u8_t challenge_hash[16]; /* Challenge response */ + u8_t send_challenge; /* Boolean whether the next sent packet should contains a challenge response */ +#endif /* PPPOL2TP_AUTH_SUPPORT */ + + u16_t tunnel_port; /* Tunnel port */ + u16_t our_ns; /* NS to peer */ + u16_t peer_nr; /* NR from peer */ + u16_t peer_ns; /* Expected NS from peer */ + u16_t source_tunnel_id; /* Tunnel ID assigned by peer */ + u16_t remote_tunnel_id; /* Tunnel ID assigned to peer */ + u16_t source_session_id; /* Session ID assigned by peer */ + u16_t remote_session_id; /* Session ID assigned to peer */ + + u8_t sccrq_retried; /* number of SCCRQ retries already done */ + u8_t icrq_retried; /* number of ICRQ retries already done */ + u8_t iccn_retried; /* number of ICCN retries already done */ +}; + + +/* Create a new L2TP session. */ +ppp_pcb *pppol2tp_create(struct netif *pppif, + struct netif *netif, const ip_addr_t *ipaddr, u16_t port, + const u8_t *secret, u8_t secret_len, + ppp_link_status_cb_fn link_status_cb, void *ctx_cb); + +#ifdef __cplusplus +} +#endif + +#endif /* PPPOL2TP_H */ +#endif /* PPP_SUPPORT && PPPOL2TP_SUPPORT */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/pppos.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/pppos.h new file mode 100644 index 0000000000000000000000000000000000000000..380a965ce6a000bac49cc761f7834c18ce91f329 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/pppos.h @@ -0,0 +1,126 @@ +/** + * @file + * Network Point to Point Protocol over Serial header file. + * + */ + +/* + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + */ + +#include "netif/ppp/ppp_opts.h" +#if PPP_SUPPORT && PPPOS_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +#ifndef PPPOS_H +#define PPPOS_H + +#include "lwip/sys.h" + +#include "ppp.h" +#include "vj.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* PPP packet parser states. Current state indicates operation yet to be + * completed. */ +enum { + PDIDLE = 0, /* Idle state - waiting. */ + PDSTART, /* Process start flag. */ + PDADDRESS, /* Process address field. */ + PDCONTROL, /* Process control field. */ + PDPROTOCOL1, /* Process protocol field 1. */ + PDPROTOCOL2, /* Process protocol field 2. */ + PDDATA /* Process data byte. */ +}; + +/* PPPoS serial output callback function prototype */ +typedef u32_t (*pppos_output_cb_fn)(ppp_pcb *pcb, u8_t *data, u32_t len, void *ctx); + +/* + * Extended asyncmap - allows any character to be escaped. + */ +typedef u8_t ext_accm[32]; + +/* + * PPPoS interface control block. + */ +typedef struct pppos_pcb_s pppos_pcb; +struct pppos_pcb_s { + /* -- below are data that will NOT be cleared between two sessions */ + ppp_pcb *ppp; /* PPP PCB */ + pppos_output_cb_fn output_cb; /* PPP serial output callback */ + + /* -- below are data that will be cleared between two sessions + * + * last_xmit must be the first member of cleared members, because it is + * used to know which part must not be cleared. + */ + u32_t last_xmit; /* Time of last transmission. */ + ext_accm out_accm; /* Async-Ctl-Char-Map for output. */ + + /* flags */ + unsigned int open :1; /* Set if PPPoS is open */ + unsigned int pcomp :1; /* Does peer accept protocol compression? */ + unsigned int accomp :1; /* Does peer accept addr/ctl compression? */ + + /* PPPoS rx */ + ext_accm in_accm; /* Async-Ctl-Char-Map for input. */ + struct pbuf *in_head, *in_tail; /* The input packet. */ + u16_t in_protocol; /* The input protocol code. */ + u16_t in_fcs; /* Input Frame Check Sequence value. */ + u8_t in_state; /* The input process state. */ + u8_t in_escaped; /* Escape next character. */ +}; + +/* Create a new PPPoS session. */ +ppp_pcb *pppos_create(struct netif *pppif, pppos_output_cb_fn output_cb, + ppp_link_status_cb_fn link_status_cb, void *ctx_cb); + +#if !NO_SYS && !PPP_INPROC_IRQ_SAFE +/* Pass received raw characters to PPPoS to be decoded through lwIP TCPIP thread. */ +err_t pppos_input_tcpip(ppp_pcb *ppp, u8_t *s, int l); +#endif /* !NO_SYS && !PPP_INPROC_IRQ_SAFE */ + +/* PPP over Serial: this is the input function to be called for received data. */ +void pppos_input(ppp_pcb *ppp, u8_t* data, int len); + + +/* + * Functions called from lwIP + * DO NOT CALL FROM lwIP USER APPLICATION. + */ +#if !NO_SYS && !PPP_INPROC_IRQ_SAFE +err_t pppos_input_sys(struct pbuf *p, struct netif *inp); +#endif /* !NO_SYS && !PPP_INPROC_IRQ_SAFE */ + +#ifdef __cplusplus +} +#endif + +#endif /* PPPOS_H */ +#endif /* PPP_SUPPORT && PPPOL2TP_SUPPORT */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/upap.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/upap.h new file mode 100644 index 0000000000000000000000000000000000000000..540d981492c60decdd2b190d3c09e4e88c445592 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/upap.h @@ -0,0 +1,131 @@ +/* + * upap.h - User/Password Authentication Protocol definitions. + * + * Copyright (c) 1984-2000 Carnegie Mellon University. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The name "Carnegie Mellon University" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For permission or any legal + * details, please contact + * Office of Technology Transfer + * Carnegie Mellon University + * 5000 Forbes Avenue + * Pittsburgh, PA 15213-3890 + * (412) 268-4387, fax: (412) 268-7395 + * tech-transfer@andrew.cmu.edu + * + * 4. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by Computing Services + * at Carnegie Mellon University (http://www.cmu.edu/computing/)." + * + * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO + * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE + * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * $Id: upap.h,v 1.8 2002/12/04 23:03:33 paulus Exp $ + */ + +#include "netif/ppp/ppp_opts.h" +#if PPP_SUPPORT && PAP_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +#ifndef UPAP_H +#define UPAP_H + +#include "ppp.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Packet header = Code, id, length. + */ +#define UPAP_HEADERLEN 4 + + +/* + * UPAP codes. + */ +#define UPAP_AUTHREQ 1 /* Authenticate-Request */ +#define UPAP_AUTHACK 2 /* Authenticate-Ack */ +#define UPAP_AUTHNAK 3 /* Authenticate-Nak */ + + +/* + * Client states. + */ +#define UPAPCS_INITIAL 0 /* Connection down */ +#define UPAPCS_CLOSED 1 /* Connection up, haven't requested auth */ +#define UPAPCS_PENDING 2 /* Connection down, have requested auth */ +#define UPAPCS_AUTHREQ 3 /* We've sent an Authenticate-Request */ +#define UPAPCS_OPEN 4 /* We've received an Ack */ +#define UPAPCS_BADAUTH 5 /* We've received a Nak */ + +/* + * Server states. + */ +#define UPAPSS_INITIAL 0 /* Connection down */ +#define UPAPSS_CLOSED 1 /* Connection up, haven't requested auth */ +#define UPAPSS_PENDING 2 /* Connection down, have requested auth */ +#define UPAPSS_LISTEN 3 /* Listening for an Authenticate */ +#define UPAPSS_OPEN 4 /* We've sent an Ack */ +#define UPAPSS_BADAUTH 5 /* We've sent a Nak */ + + +/* + * Timeouts. + */ +#if 0 /* moved to ppp_opts.h */ +#define UPAP_DEFTIMEOUT 3 /* Timeout (seconds) for retransmitting req */ +#define UPAP_DEFREQTIME 30 /* Time to wait for auth-req from peer */ +#endif /* moved to ppp_opts.h */ + +/* + * Each interface is described by upap structure. + */ +#if PAP_SUPPORT +typedef struct upap_state { + const char *us_user; /* User */ + u8_t us_userlen; /* User length */ + const char *us_passwd; /* Password */ + u8_t us_passwdlen; /* Password length */ + u8_t us_clientstate; /* Client state */ +#if PPP_SERVER + u8_t us_serverstate; /* Server state */ +#endif /* PPP_SERVER */ + u8_t us_id; /* Current id */ + u8_t us_transmits; /* Number of auth-reqs sent */ +} upap_state; +#endif /* PAP_SUPPORT */ + + +void upap_authwithpeer(ppp_pcb *pcb, const char *user, const char *password); +#if PPP_SERVER +void upap_authpeer(ppp_pcb *pcb); +#endif /* PPP_SERVER */ + +extern const struct protent pap_protent; + +#ifdef __cplusplus +} +#endif + +#endif /* UPAP_H */ +#endif /* PPP_SUPPORT && PAP_SUPPORT */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/vj.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/vj.h new file mode 100644 index 0000000000000000000000000000000000000000..77d9976c52d05706d788bc5263f149baed5933c9 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/ppp/vj.h @@ -0,0 +1,169 @@ +/* + * Definitions for tcp compression routines. + * + * $Id: vj.h,v 1.7 2010/02/22 17:52:09 goldsimon Exp $ + * + * Copyright (c) 1989 Regents of the University of California. + * All rights reserved. + * + * Redistribution and use in source and binary forms are permitted + * provided that the above copyright notice and this paragraph are + * duplicated in all such forms and that any documentation, + * advertising materials, and other materials related to such + * distribution and use acknowledge that the software was developed + * by the University of California, Berkeley. The name of the + * University may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. + * + * Van Jacobson (van@helios.ee.lbl.gov), Dec 31, 1989: + * - Initial distribution. + */ + +#include "netif/ppp/ppp_opts.h" +#if PPP_SUPPORT && VJ_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +#ifndef VJ_H +#define VJ_H + +#include "lwip/ip.h" +#include "lwip/priv/tcp_priv.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define MAX_SLOTS 16 /* must be > 2 and < 256 */ +#define MAX_HDR 128 + +/* + * Compressed packet format: + * + * The first octet contains the packet type (top 3 bits), TCP + * 'push' bit, and flags that indicate which of the 4 TCP sequence + * numbers have changed (bottom 5 bits). The next octet is a + * conversation number that associates a saved IP/TCP header with + * the compressed packet. The next two octets are the TCP checksum + * from the original datagram. The next 0 to 15 octets are + * sequence number changes, one change per bit set in the header + * (there may be no changes and there are two special cases where + * the receiver implicitly knows what changed -- see below). + * + * There are 5 numbers which can change (they are always inserted + * in the following order): TCP urgent pointer, window, + * acknowlegement, sequence number and IP ID. (The urgent pointer + * is different from the others in that its value is sent, not the + * change in value.) Since typical use of SLIP links is biased + * toward small packets (see comments on MTU/MSS below), changes + * use a variable length coding with one octet for numbers in the + * range 1 - 255 and 3 octets (0, MSB, LSB) for numbers in the + * range 256 - 65535 or 0. (If the change in sequence number or + * ack is more than 65535, an uncompressed packet is sent.) + */ + +/* + * Packet types (must not conflict with IP protocol version) + * + * The top nibble of the first octet is the packet type. There are + * three possible types: IP (not proto TCP or tcp with one of the + * control flags set); uncompressed TCP (a normal IP/TCP packet but + * with the 8-bit protocol field replaced by an 8-bit connection id -- + * this type of packet syncs the sender & receiver); and compressed + * TCP (described above). + * + * LSB of 4-bit field is TCP "PUSH" bit (a worthless anachronism) and + * is logically part of the 4-bit "changes" field that follows. Top + * three bits are actual packet type. For backward compatibility + * and in the interest of conserving bits, numbers are chosen so the + * IP protocol version number (4) which normally appears in this nibble + * means "IP packet". + */ + +/* packet types */ +#define TYPE_IP 0x40 +#define TYPE_UNCOMPRESSED_TCP 0x70 +#define TYPE_COMPRESSED_TCP 0x80 +#define TYPE_ERROR 0x00 + +/* Bits in first octet of compressed packet */ +#define NEW_C 0x40 /* flag bits for what changed in a packet */ +#define NEW_I 0x20 +#define NEW_S 0x08 +#define NEW_A 0x04 +#define NEW_W 0x02 +#define NEW_U 0x01 + +/* reserved, special-case values of above */ +#define SPECIAL_I (NEW_S|NEW_W|NEW_U) /* echoed interactive traffic */ +#define SPECIAL_D (NEW_S|NEW_A|NEW_W|NEW_U) /* unidirectional data */ +#define SPECIALS_MASK (NEW_S|NEW_A|NEW_W|NEW_U) + +#define TCP_PUSH_BIT 0x10 + + +/* + * "state" data for each active tcp conversation on the wire. This is + * basically a copy of the entire IP/TCP header from the last packet + * we saw from the conversation together with a small identifier + * the transmit & receive ends of the line use to locate saved header. + */ +struct cstate { + struct cstate *cs_next; /* next most recently used state (xmit only) */ + u16_t cs_hlen; /* size of hdr (receive only) */ + u8_t cs_id; /* connection # associated with this state */ + u8_t cs_filler; + union { + char csu_hdr[MAX_HDR]; + struct ip_hdr csu_ip; /* ip/tcp hdr from most recent packet */ + } vjcs_u; +}; +#define cs_ip vjcs_u.csu_ip +#define cs_hdr vjcs_u.csu_hdr + + +struct vjstat { + u32_t vjs_packets; /* outbound packets */ + u32_t vjs_compressed; /* outbound compressed packets */ + u32_t vjs_searches; /* searches for connection state */ + u32_t vjs_misses; /* times couldn't find conn. state */ + u32_t vjs_uncompressedin; /* inbound uncompressed packets */ + u32_t vjs_compressedin; /* inbound compressed packets */ + u32_t vjs_errorin; /* inbound unknown type packets */ + u32_t vjs_tossed; /* inbound packets tossed because of error */ +}; + +/* + * all the state data for one serial line (we need one of these per line). + */ +struct vjcompress { + struct cstate *last_cs; /* most recently used tstate */ + u8_t last_recv; /* last rcvd conn. id */ + u8_t last_xmit; /* last sent conn. id */ + u16_t flags; + u8_t maxSlotIndex; + u8_t compressSlot; /* Flag indicating OK to compress slot ID. */ +#if LINK_STATS + struct vjstat stats; +#endif + struct cstate tstate[MAX_SLOTS]; /* xmit connection states */ + struct cstate rstate[MAX_SLOTS]; /* receive connection states */ +}; + +/* flag values */ +#define VJF_TOSS 1U /* tossing rcvd frames because of input err */ + +extern void vj_compress_init (struct vjcompress *comp); +extern u8_t vj_compress_tcp (struct vjcompress *comp, struct pbuf **pb); +extern void vj_uncompress_err (struct vjcompress *comp); +extern int vj_uncompress_uncomp(struct pbuf *nb, struct vjcompress *comp); +extern int vj_uncompress_tcp (struct pbuf **nb, struct vjcompress *comp); + +#ifdef __cplusplus +} +#endif + +#endif /* VJ_H */ + +#endif /* PPP_SUPPORT && VJ_SUPPORT */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/slipif.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/slipif.h new file mode 100644 index 0000000000000000000000000000000000000000..65ba31f835b577c934eb495947a77f3d86edaa84 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/slipif.h @@ -0,0 +1,87 @@ +/** + * @file + * + * SLIP netif API + */ + +/* + * Copyright (c) 2001, Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef LWIP_HDR_NETIF_SLIPIF_H +#define LWIP_HDR_NETIF_SLIPIF_H + +#include "lwip/opt.h" +#include "lwip/netif.h" + +/** Set this to 1 to start a thread that blocks reading on the serial line + * (using sio_read()). + */ +#ifndef SLIP_USE_RX_THREAD +#define SLIP_USE_RX_THREAD !NO_SYS +#endif + +/** Set this to 1 to enable functions to pass in RX bytes from ISR context. + * If enabled, slipif_received_byte[s]() process incoming bytes and put assembled + * packets on a queue, which is fed into lwIP from slipif_poll(). + * If disabled, slipif_poll() polls the serial line (using sio_tryread()). + */ +#ifndef SLIP_RX_FROM_ISR +#define SLIP_RX_FROM_ISR 0 +#endif + +/** Set this to 1 (default for SLIP_RX_FROM_ISR) to queue incoming packets + * received by slipif_received_byte[s]() as long as PBUF_POOL pbufs are available. + * If disabled, packets will be dropped if more than one packet is received. + */ +#ifndef SLIP_RX_QUEUE +#define SLIP_RX_QUEUE SLIP_RX_FROM_ISR +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +err_t slipif_init(struct netif * netif); +void slipif_poll(struct netif *netif); +#if SLIP_RX_FROM_ISR +void slipif_process_rxqueue(struct netif *netif); +void slipif_received_byte(struct netif *netif, u8_t data); +void slipif_received_bytes(struct netif *netif, u8_t *data, u8_t len); +#endif /* SLIP_RX_FROM_ISR */ + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_HDR_NETIF_SLIPIF_H */ + diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/zepif.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/zepif.h new file mode 100644 index 0000000000000000000000000000000000000000..2a801b4c407f9c8477faa31fca3108829f75cad5 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/include/netif/zepif.h @@ -0,0 +1,81 @@ +/** + * @file + * + * A netif implementing the ZigBee Eencapsulation Protocol (ZEP). + * This is used to tunnel 6LowPAN over UDP. + */ + +/* + * Copyright (c) 2018 Simon Goldschmidt + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Simon Goldschmidt + * + */ + +#ifndef LWIP_HDR_ZEPIF_H +#define LWIP_HDR_ZEPIF_H + +#include "lwip/opt.h" +#include "netif/lowpan6.h" + +#if LWIP_IPV6 && LWIP_UDP /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/netif.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define ZEPIF_DEFAULT_UDP_PORT 17754 + +/** Pass this struct as 'state' to netif_add to control the behaviour + * of this netif. If NULL is passed, default behaviour is chosen */ +struct zepif_init { + /** The UDP port used to ZEP frames from (0 = default) */ + u16_t zep_src_udp_port; + /** The UDP port used to ZEP frames to (0 = default) */ + u16_t zep_dst_udp_port; + /** The IP address to sed ZEP frames from (NULL = ANY) */ + const ip_addr_t *zep_src_ip_addr; + /** The IP address to sed ZEP frames to (NULL = BROADCAST) */ + const ip_addr_t *zep_dst_ip_addr; + /** If != NULL, the udp pcb is bound to this netif */ + const struct netif *zep_netif; + /** MAC address of the 6LowPAN device */ + u8_t addr[6]; +}; + +err_t zepif_init(struct netif *netif); + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_IPV6 && LWIP_UDP */ + +#endif /* LWIP_HDR_ZEPIF_H */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/bridgeif.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/bridgeif.c new file mode 100644 index 0000000000000000000000000000000000000000..8a97bce39d8d257ef11cf684fcdc1b69c89e455d --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/bridgeif.c @@ -0,0 +1,563 @@ +/** + * @file + * lwIP netif implementing an IEEE 802.1D MAC Bridge + */ + +/* + * Copyright (c) 2017 Simon Goldschmidt. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Simon Goldschmidt + * + */ + +/** + * @defgroup bridgeif IEEE 802.1D bridge + * @ingroup netifs + * This file implements an IEEE 802.1D bridge by using a multilayer netif approach + * (one hardware-independent netif for the bridge that uses hardware netifs for its ports). + * On transmit, the bridge selects the outgoing port(s). + * On receive, the port netif calls into the bridge (via its netif->input function) and + * the bridge selects the port(s) (and/or its netif->input function) to pass the received pbuf to. + * + * Usage: + * - add the port netifs just like you would when using them as dedicated netif without a bridge + * - only NETIF_FLAG_ETHARP/NETIF_FLAG_ETHERNET netifs are supported as bridge ports + * - add the bridge port netifs without IPv4 addresses (i.e. pass 'NULL, NULL, NULL') + * - don't add IPv6 addresses to the port netifs! + * - set up the bridge configuration in a global variable of type 'bridgeif_initdata_t' that contains + * - the MAC address of the bridge + * - some configuration options controlling the memory consumption (maximum number of ports + * and FDB entries) + * - e.g. for a bridge MAC address 00-01-02-03-04-05, 2 bridge ports, 1024 FDB entries + 16 static MAC entries: + * bridgeif_initdata_t mybridge_initdata = BRIDGEIF_INITDATA1(2, 1024, 16, ETH_ADDR(0, 1, 2, 3, 4, 5)); + * - add the bridge netif (with IPv4 config): + * struct netif bridge_netif; + * netif_add(&bridge_netif, &my_ip, &my_netmask, &my_gw, &mybridge_initdata, bridgeif_init, tcpip_input); + * NOTE: the passed 'input' function depends on BRIDGEIF_PORT_NETIFS_OUTPUT_DIRECT setting, + * which controls where the forwarding is done (netif low level input context vs. tcpip_thread) + * - set up all ports netifs and the bridge netif + * + * - When adding a port netif, NETIF_FLAG_ETHARP flag will be removed from a port + * to prevent ETHARP working on that port netif (we only want one IP per bridge not per port). + * - When adding a port netif, its input function is changed to call into the bridge. + * + * + * @todo: + * - compact static FDB entries (instead of walking the whole array) + * - add FDB query/read access + * - add FDB change callback (when learning or dropping auto-learned entries) + * - prefill FDB with MAC classes that should never be forwarded + * - multicast snooping? (and only forward group addresses to interested ports) + * - support removing ports + * - check SNMP integration + * - VLAN handling / trunk ports + * - priority handling? (although that largely depends on TX queue limitations and lwIP doesn't provide tx-done handling) + */ + +#include "netif/bridgeif.h" +#include "lwip/netif.h" +#include "lwip/sys.h" +#include "lwip/etharp.h" +#include "lwip/ethip6.h" +#include "lwip/snmp.h" +#include "lwip/timeouts.h" +#include + +#if LWIP_NUM_NETIF_CLIENT_DATA + +/* Define those to better describe your network interface. */ +#define IFNAME0 'b' +#define IFNAME1 'r' + +struct bridgeif_private_s; +typedef struct bridgeif_port_private_s { + struct bridgeif_private_s *bridge; + struct netif *port_netif; + u8_t port_num; +} bridgeif_port_t; + +typedef struct bridgeif_fdb_static_entry_s { + u8_t used; + bridgeif_portmask_t dst_ports; + struct eth_addr addr; +} bridgeif_fdb_static_entry_t; + +typedef struct bridgeif_private_s { + struct netif *netif; + struct eth_addr ethaddr; + u8_t max_ports; + u8_t num_ports; + bridgeif_port_t *ports; + u16_t max_fdbs_entries; + bridgeif_fdb_static_entry_t *fdbs; + u16_t max_fdbd_entries; + void *fdbd; +} bridgeif_private_t; + +/* netif data index to get the bridge on input */ +u8_t bridgeif_netif_client_id = 0xff; + +/** + * @ingroup bridgeif + * Add a static entry to the forwarding database. + * A static entry marks where frames to a specific eth address (unicast or group address) are + * forwarded. + * bits [0..(BRIDGEIF_MAX_PORTS-1)]: hw ports + * bit [BRIDGEIF_MAX_PORTS]: cpu port + * 0: drop + */ +err_t +bridgeif_fdb_add(struct netif *bridgeif, const struct eth_addr *addr, bridgeif_portmask_t ports) +{ + int i; + bridgeif_private_t *br; + BRIDGEIF_DECL_PROTECT(lev); + LWIP_ASSERT("invalid netif", bridgeif != NULL); + br = (bridgeif_private_t *)bridgeif->state; + LWIP_ASSERT("invalid state", br != NULL); + + BRIDGEIF_READ_PROTECT(lev); + for (i = 0; i < br->max_fdbs_entries; i++) { + if (!br->fdbs[i].used) { + BRIDGEIF_WRITE_PROTECT(lev); + if (!br->fdbs[i].used) { + br->fdbs[i].used = 1; + br->fdbs[i].dst_ports = ports; + memcpy(&br->fdbs[i].addr, addr, sizeof(struct eth_addr)); + BRIDGEIF_WRITE_UNPROTECT(lev); + BRIDGEIF_READ_UNPROTECT(lev); + return ERR_OK; + } + BRIDGEIF_WRITE_UNPROTECT(lev); + } + } + BRIDGEIF_READ_UNPROTECT(lev); + return ERR_MEM; +} + +/** + * @ingroup bridgeif + * Remove a static entry from the forwarding database + */ +err_t +bridgeif_fdb_remove(struct netif *bridgeif, const struct eth_addr *addr) +{ + int i; + bridgeif_private_t *br; + BRIDGEIF_DECL_PROTECT(lev); + LWIP_ASSERT("invalid netif", bridgeif != NULL); + br = (bridgeif_private_t *)bridgeif->state; + LWIP_ASSERT("invalid state", br != NULL); + + BRIDGEIF_READ_PROTECT(lev); + for (i = 0; i < br->max_fdbs_entries; i++) { + if (br->fdbs[i].used && !memcmp(&br->fdbs[i].addr, addr, sizeof(struct eth_addr))) { + BRIDGEIF_WRITE_PROTECT(lev); + if (br->fdbs[i].used && !memcmp(&br->fdbs[i].addr, addr, sizeof(struct eth_addr))) { + memset(&br->fdbs[i], 0, sizeof(bridgeif_fdb_static_entry_t)); + BRIDGEIF_WRITE_UNPROTECT(lev); + BRIDGEIF_READ_UNPROTECT(lev); + return ERR_OK; + } + BRIDGEIF_WRITE_UNPROTECT(lev); + } + } + BRIDGEIF_READ_UNPROTECT(lev); + return ERR_VAL; +} + +/** Get the forwarding port(s) (as bit mask) for the specified destination mac address */ +static bridgeif_portmask_t +bridgeif_find_dst_ports(bridgeif_private_t *br, struct eth_addr *dst_addr) +{ + int i; + BRIDGEIF_DECL_PROTECT(lev); + BRIDGEIF_READ_PROTECT(lev); + /* first check for static entries */ + for (i = 0; i < br->max_fdbs_entries; i++) { + if (br->fdbs[i].used) { + if (!memcmp(&br->fdbs[i].addr, dst_addr, sizeof(struct eth_addr))) { + bridgeif_portmask_t ret = br->fdbs[i].dst_ports; + BRIDGEIF_READ_UNPROTECT(lev); + return ret; + } + } + } + if (dst_addr->addr[0] & 1) { + /* no match found: flood remaining group address */ + BRIDGEIF_READ_UNPROTECT(lev); + return BR_FLOOD; + } + BRIDGEIF_READ_UNPROTECT(lev); + /* no match found: check dynamic fdb for port or fall back to flooding */ + return bridgeif_fdb_get_dst_ports(br->fdbd, dst_addr); +} + +/** Helper function to see if a destination mac belongs to the bridge + * (bridge netif or one of the port netifs), in which case the frame + * is sent to the cpu only. + */ +static int +bridgeif_is_local_mac(bridgeif_private_t *br, struct eth_addr *addr) +{ + int i; + BRIDGEIF_DECL_PROTECT(lev); + if (!memcmp(br->netif->hwaddr, addr, sizeof(struct eth_addr))) { + return 1; + } + BRIDGEIF_READ_PROTECT(lev); + for (i = 0; i < br->num_ports; i++) { + struct netif *portif = br->ports[i].port_netif; + if (portif != NULL) { + if (!memcmp(portif->hwaddr, addr, sizeof(struct eth_addr))) { + BRIDGEIF_READ_UNPROTECT(lev); + return 1; + } + } + } + BRIDGEIF_READ_UNPROTECT(lev); + return 0; +} + +/* Output helper function */ +static err_t +bridgeif_send_to_port(bridgeif_private_t *br, struct pbuf *p, u8_t dstport_idx) +{ + if (dstport_idx < BRIDGEIF_MAX_PORTS) { + /* possibly an external port */ + if (dstport_idx < br->max_ports) { + struct netif *portif = br->ports[dstport_idx].port_netif; + if ((portif != NULL) && (portif->linkoutput != NULL)) { + /* prevent sending out to rx port */ + if (netif_get_index(portif) != p->if_idx) { + if (netif_is_link_up(portif)) { + LWIP_DEBUGF(BRIDGEIF_FW_DEBUG, ("br -> flood(%p:%d) -> %d\n", (void *)p, p->if_idx, netif_get_index(portif))); + return portif->linkoutput(portif, p); + } + } + } + } + } else { + LWIP_ASSERT("invalid port index", dstport_idx == BRIDGEIF_MAX_PORTS); + } + return ERR_OK; +} + +/** Helper function to pass a pbuf to all ports marked in 'dstports' + */ +static err_t +bridgeif_send_to_ports(bridgeif_private_t *br, struct pbuf *p, bridgeif_portmask_t dstports) +{ + err_t err, ret_err = ERR_OK; + u8_t i; + bridgeif_portmask_t mask = 1; + BRIDGEIF_DECL_PROTECT(lev); + BRIDGEIF_READ_PROTECT(lev); + for (i = 0; i < BRIDGEIF_MAX_PORTS; i++, mask = (bridgeif_portmask_t)(mask << 1)) { + if (dstports & mask) { + err = bridgeif_send_to_port(br, p, i); + if (err != ERR_OK) { + ret_err = err; + } + } + } + BRIDGEIF_READ_UNPROTECT(lev); + return ret_err; +} + +/** Output function of the application port of the bridge (the one with an ip address). + * The forwarding port(s) where this pbuf is sent on is/are automatically selected + * from the FDB. + */ +static err_t +bridgeif_output(struct netif *netif, struct pbuf *p) +{ + err_t err; + bridgeif_private_t *br = (bridgeif_private_t *)netif->state; + struct eth_addr *dst = (struct eth_addr *)(p->payload); + + bridgeif_portmask_t dstports = bridgeif_find_dst_ports(br, dst); + err = bridgeif_send_to_ports(br, p, dstports); + + MIB2_STATS_NETIF_ADD(netif, ifoutoctets, p->tot_len); + if (((u8_t *)p->payload)[0] & 1) { + /* broadcast or multicast packet*/ + MIB2_STATS_NETIF_INC(netif, ifoutnucastpkts); + } else { + /* unicast packet */ + MIB2_STATS_NETIF_INC(netif, ifoutucastpkts); + } + /* increase ifoutdiscards or ifouterrors on error */ + + LINK_STATS_INC(link.xmit); + + return err; +} + +/** The actual bridge input function. Port netif's input is changed to call + * here. This function decides where the frame is forwarded. + */ +static err_t +bridgeif_input(struct pbuf *p, struct netif *netif) +{ + u8_t rx_idx; + bridgeif_portmask_t dstports; + struct eth_addr *src, *dst; + bridgeif_private_t *br; + bridgeif_port_t *port; + if (p == NULL || netif == NULL) { + return ERR_VAL; + } + port = (bridgeif_port_t *)netif_get_client_data(netif, bridgeif_netif_client_id); + LWIP_ASSERT("port data not set", port != NULL); + if (port == NULL || port->bridge == NULL) { + return ERR_VAL; + } + br = (bridgeif_private_t *)port->bridge; + rx_idx = netif_get_index(netif); + /* store receive index in pbuf */ + p->if_idx = rx_idx; + + dst = (struct eth_addr *)p->payload; + src = (struct eth_addr *)(((u8_t *)p->payload) + sizeof(struct eth_addr)); + + if ((src->addr[0] & 1) == 0) { + /* update src for all non-group addresses */ + bridgeif_fdb_update_src(br->fdbd, src, port->port_num); + } + + if (dst->addr[0] & 1) { + /* group address -> flood + cpu? */ + dstports = bridgeif_find_dst_ports(br, dst); + bridgeif_send_to_ports(br, p, dstports); + if (dstports & (1 << BRIDGEIF_MAX_PORTS)) { + /* we pass the reference to ->input or have to free it */ + LWIP_DEBUGF(BRIDGEIF_FW_DEBUG, ("br -> input(%p)\n", (void *)p)); + if (br->netif->input(p, br->netif) != ERR_OK) { + pbuf_free(p); + } + } else { + /* all references done */ + pbuf_free(p); + } + /* always return ERR_OK here to prevent the caller freeing the pbuf */ + return ERR_OK; + } else { + /* is this for one of the local ports? */ + if (bridgeif_is_local_mac(br, dst)) { + /* yes, send to cpu port only */ + LWIP_DEBUGF(BRIDGEIF_FW_DEBUG, ("br -> input(%p)\n", (void *)p)); + return br->netif->input(p, br->netif); + } + + /* get dst port */ + dstports = bridgeif_find_dst_ports(br, dst); + bridgeif_send_to_ports(br, p, dstports); + /* no need to send to cpu, flooding is for external ports only */ + /* by this, we consumed the pbuf */ + pbuf_free(p); + /* always return ERR_OK here to prevent the caller freeing the pbuf */ + return ERR_OK; + } +} + +#if !BRIDGEIF_PORT_NETIFS_OUTPUT_DIRECT +/** Input function for port netifs used to synchronize into tcpip_thread. + */ +static err_t +bridgeif_tcpip_input(struct pbuf *p, struct netif *netif) +{ + return tcpip_inpkt(p, netif, bridgeif_input); +} +#endif /* BRIDGEIF_PORT_NETIFS_OUTPUT_DIRECT */ + +/** + * @ingroup bridgeif + * Initialization function passed to netif_add(). + * + * ATTENTION: A pointer to a @ref bridgeif_initdata_t must be passed as 'state' + * to @ref netif_add when adding the bridge. I supplies MAC address + * and controls memory allocation (number of ports, FDB size). + * + * @param netif the lwip network interface structure for this ethernetif + * @return ERR_OK if the loopif is initialized + * ERR_MEM if private data couldn't be allocated + * any other err_t on error + */ +err_t +bridgeif_init(struct netif *netif) +{ + bridgeif_initdata_t *init_data; + bridgeif_private_t *br; + size_t alloc_len_sizet; + mem_size_t alloc_len; + + LWIP_ASSERT("netif != NULL", (netif != NULL)); + LWIP_ASSERT("bridgeif needs an input callback", (netif->input != NULL)); +#if !BRIDGEIF_PORT_NETIFS_OUTPUT_DIRECT + if (netif->input == tcpip_input) { + LWIP_DEBUGF(BRIDGEIF_DEBUG | LWIP_DBG_ON, ("bridgeif does not need tcpip_input, use netif_input/ethernet_input instead")); + } +#endif + + if (bridgeif_netif_client_id == 0xFF) { + bridgeif_netif_client_id = netif_alloc_client_data_id(); + } + + init_data = (bridgeif_initdata_t *)netif->state; + LWIP_ASSERT("init_data != NULL", (init_data != NULL)); + LWIP_ASSERT("init_data->max_ports <= BRIDGEIF_MAX_PORTS", + init_data->max_ports <= BRIDGEIF_MAX_PORTS); + + alloc_len_sizet = sizeof(bridgeif_private_t) + (init_data->max_ports * sizeof(bridgeif_port_t) + (init_data->max_fdb_static_entries * sizeof(bridgeif_fdb_static_entry_t))); + alloc_len = (mem_size_t)alloc_len_sizet; + LWIP_ASSERT("alloc_len == alloc_len_sizet", alloc_len == alloc_len_sizet); + LWIP_DEBUGF(BRIDGEIF_DEBUG, ("bridgeif_init: allocating %d bytes for private data\n", (int)alloc_len)); + br = (bridgeif_private_t *)mem_calloc(1, alloc_len); + if (br == NULL) { + LWIP_DEBUGF(NETIF_DEBUG, ("bridgeif_init: out of memory\n")); + return ERR_MEM; + } + memcpy(&br->ethaddr, &init_data->ethaddr, sizeof(br->ethaddr)); + br->netif = netif; + + br->max_ports = init_data->max_ports; + br->ports = (bridgeif_port_t *)(br + 1); + + br->max_fdbs_entries = init_data->max_fdb_static_entries; + br->fdbs = (bridgeif_fdb_static_entry_t *)(((u8_t *)(br + 1)) + (init_data->max_ports * sizeof(bridgeif_port_t))); + + br->max_fdbd_entries = init_data->max_fdb_dynamic_entries; + br->fdbd = bridgeif_fdb_init(init_data->max_fdb_dynamic_entries); + if (br->fdbd == NULL) { + LWIP_DEBUGF(NETIF_DEBUG, ("bridgeif_init: out of memory in fdb_init\n")); + mem_free(br); + return ERR_MEM; + } + +#if LWIP_NETIF_HOSTNAME + /* Initialize interface hostname */ + netif->hostname = "lwip"; +#endif /* LWIP_NETIF_HOSTNAME */ + + /* + * Initialize the snmp variables and counters inside the struct netif. + * The last argument should be replaced with your link speed, in units + * of bits per second. + */ + MIB2_INIT_NETIF(netif, snmp_ifType_ethernet_csmacd, 0); + + netif->state = br; + netif->name[0] = IFNAME0; + netif->name[1] = IFNAME1; + /* We directly use etharp_output() here to save a function call. + * You can instead declare your own function an call etharp_output() + * from it if you have to do some checks before sending (e.g. if link + * is available...) */ +#if LWIP_IPV4 + netif->output = etharp_output; +#endif /* LWIP_IPV4 */ +#if LWIP_IPV6 + netif->output_ip6 = ethip6_output; +#endif /* LWIP_IPV6 */ + netif->linkoutput = bridgeif_output; + + /* set MAC hardware address length */ + netif->hwaddr_len = ETH_HWADDR_LEN; + + /* set MAC hardware address */ + memcpy(netif->hwaddr, &br->ethaddr, ETH_HWADDR_LEN); + + /* maximum transfer unit */ + netif->mtu = 1500; + + /* device capabilities */ + /* don't set NETIF_FLAG_ETHARP if this device is not an ethernet one */ + netif->flags = NETIF_FLAG_BROADCAST | NETIF_FLAG_ETHARP | NETIF_FLAG_ETHERNET | NETIF_FLAG_IGMP | NETIF_FLAG_MLD6 | NETIF_FLAG_LINK_UP; + +#if LWIP_IPV6 && LWIP_IPV6_MLD + /* + * For hardware/netifs that implement MAC filtering. + * All-nodes link-local is handled by default, so we must let the hardware know + * to allow multicast packets in. + * Should set mld_mac_filter previously. */ + if (netif->mld_mac_filter != NULL) { + ip6_addr_t ip6_allnodes_ll; + ip6_addr_set_allnodes_linklocal(&ip6_allnodes_ll); + netif->mld_mac_filter(netif, &ip6_allnodes_ll, NETIF_ADD_MAC_FILTER); + } +#endif /* LWIP_IPV6 && LWIP_IPV6_MLD */ + + return ERR_OK; +} + +/** + * @ingroup bridgeif + * Add a port to the bridge + */ +err_t +bridgeif_add_port(struct netif *bridgeif, struct netif *portif) +{ + bridgeif_private_t *br; + bridgeif_port_t *port; + + LWIP_ASSERT("bridgeif != NULL", bridgeif != NULL); + LWIP_ASSERT("bridgeif->state != NULL", bridgeif->state != NULL); + LWIP_ASSERT("portif != NULL", portif != NULL); + + if (!(portif->flags & NETIF_FLAG_ETHARP) || !(portif->flags & NETIF_FLAG_ETHERNET)) { + /* can only add ETHERNET/ETHARP interfaces */ + return ERR_VAL; + } + + br = (bridgeif_private_t *)bridgeif->state; + + if (br->num_ports >= br->max_ports) { + return ERR_VAL; + } + port = &br->ports[br->num_ports]; + port->port_netif = portif; + port->port_num = br->num_ports; + port->bridge = br; + br->num_ports++; + + /* let the port call us on input */ +#if BRIDGEIF_PORT_NETIFS_OUTPUT_DIRECT + portif->input = bridgeif_input; +#else + portif->input = bridgeif_tcpip_input; +#endif + /* store pointer to bridge in netif */ + netif_set_client_data(portif, bridgeif_netif_client_id, port); + /* remove ETHARP flag to prevent sending report events on netif-up */ + netif_clear_flags(portif, NETIF_FLAG_ETHARP); + + return ERR_OK; +} + +#endif /* LWIP_NUM_NETIF_CLIENT_DATA */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/bridgeif_fdb.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/bridgeif_fdb.c new file mode 100644 index 0000000000000000000000000000000000000000..6739fc247c14db3517564631f32309309d58631d --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/bridgeif_fdb.c @@ -0,0 +1,212 @@ +/** + * @file + * lwIP netif implementing an FDB for IEEE 802.1D MAC Bridge + */ + +/* + * Copyright (c) 2017 Simon Goldschmidt. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Simon Goldschmidt + * + */ + +/** + * @defgroup bridgeif_fdb FDB example code + * @ingroup bridgeif + * This file implements an example for an FDB (Forwarding DataBase) + */ + +#include "netif/bridgeif.h" +#include "lwip/sys.h" +#include "lwip/mem.h" +#include "lwip/timeouts.h" +#include + +#define BRIDGEIF_AGE_TIMER_MS 1000 + +#define BR_FDB_TIMEOUT_SEC (60*5) /* 5 minutes FDB timeout */ + +typedef struct bridgeif_dfdb_entry_s { + u8_t used; + u8_t port; + u32_t ts; + struct eth_addr addr; +} bridgeif_dfdb_entry_t; + +typedef struct bridgeif_dfdb_s { + u16_t max_fdb_entries; + bridgeif_dfdb_entry_t *fdb; +} bridgeif_dfdb_t; + +/** + * @ingroup bridgeif_fdb + * A real simple and slow implementation of an auto-learning forwarding database that + * remembers known src mac addresses to know which port to send frames destined for that + * mac address. + * + * ATTENTION: This is meant as an example only, in real-world use, you should + * provide a better implementation :-) + */ +void +bridgeif_fdb_update_src(void *fdb_ptr, struct eth_addr *src_addr, u8_t port_idx) +{ + int i; + bridgeif_dfdb_t *fdb = (bridgeif_dfdb_t *)fdb_ptr; + BRIDGEIF_DECL_PROTECT(lev); + BRIDGEIF_READ_PROTECT(lev); + for (i = 0; i < fdb->max_fdb_entries; i++) { + bridgeif_dfdb_entry_t *e = &fdb->fdb[i]; + if (e->used && e->ts) { + if (!memcmp(&e->addr, src_addr, sizeof(struct eth_addr))) { + LWIP_DEBUGF(BRIDGEIF_FDB_DEBUG, ("br: update src %02x:%02x:%02x:%02x:%02x:%02x (from %d) @ idx %d\n", + src_addr->addr[0], src_addr->addr[1], src_addr->addr[2], src_addr->addr[3], src_addr->addr[4], src_addr->addr[5], + port_idx, i)); + BRIDGEIF_WRITE_PROTECT(lev); + e->ts = BR_FDB_TIMEOUT_SEC; + e->port = port_idx; + BRIDGEIF_WRITE_UNPROTECT(lev); + BRIDGEIF_READ_UNPROTECT(lev); + return; + } + } + } + /* not found, allocate new entry from free */ + for (i = 0; i < fdb->max_fdb_entries; i++) { + bridgeif_dfdb_entry_t *e = &fdb->fdb[i]; + if (!e->used || !e->ts) { + BRIDGEIF_WRITE_PROTECT(lev); + /* check again when protected */ + if (!e->used || !e->ts) { + LWIP_DEBUGF(BRIDGEIF_FDB_DEBUG, ("br: create src %02x:%02x:%02x:%02x:%02x:%02x (from %d) @ idx %d\n", + src_addr->addr[0], src_addr->addr[1], src_addr->addr[2], src_addr->addr[3], src_addr->addr[4], src_addr->addr[5], + port_idx, i)); + memcpy(&e->addr, src_addr, sizeof(struct eth_addr)); + e->ts = BR_FDB_TIMEOUT_SEC; + e->port = port_idx; + e->used = 1; + BRIDGEIF_WRITE_UNPROTECT(lev); + BRIDGEIF_READ_UNPROTECT(lev); + return; + } + BRIDGEIF_WRITE_UNPROTECT(lev); + } + } + BRIDGEIF_READ_UNPROTECT(lev); + /* not found, no free entry -> flood */ +} + +/** + * @ingroup bridgeif_fdb + * Walk our list of auto-learnt fdb entries and return a port to forward or BR_FLOOD if unknown + */ +bridgeif_portmask_t +bridgeif_fdb_get_dst_ports(void *fdb_ptr, struct eth_addr *dst_addr) +{ + int i; + bridgeif_dfdb_t *fdb = (bridgeif_dfdb_t *)fdb_ptr; + BRIDGEIF_DECL_PROTECT(lev); + BRIDGEIF_READ_PROTECT(lev); + for (i = 0; i < fdb->max_fdb_entries; i++) { + bridgeif_dfdb_entry_t *e = &fdb->fdb[i]; + if (e->used && e->ts) { + if (!memcmp(&e->addr, dst_addr, sizeof(struct eth_addr))) { + bridgeif_portmask_t ret = (bridgeif_portmask_t)(1 << e->port); + BRIDGEIF_READ_UNPROTECT(lev); + return ret; + } + } + } + BRIDGEIF_READ_UNPROTECT(lev); + return BR_FLOOD; +} + +/** + * @ingroup bridgeif_fdb + * Aging implementation of our simple fdb + */ +static void +bridgeif_fdb_age_one_second(void *fdb_ptr) +{ + int i; + bridgeif_dfdb_t *fdb; + BRIDGEIF_DECL_PROTECT(lev); + + fdb = (bridgeif_dfdb_t *)fdb_ptr; + BRIDGEIF_READ_PROTECT(lev); + + for (i = 0; i < fdb->max_fdb_entries; i++) { + bridgeif_dfdb_entry_t *e = &fdb->fdb[i]; + if (e->used && e->ts) { + BRIDGEIF_WRITE_PROTECT(lev); + /* check again when protected */ + if (e->used && e->ts) { + if (--e->ts == 0) { + e->used = 0; + } + } + BRIDGEIF_WRITE_UNPROTECT(lev); + } + } + BRIDGEIF_READ_UNPROTECT(lev); +} + +/** Timer callback for fdb aging, called once per second */ +static void +bridgeif_age_tmr(void *arg) +{ + bridgeif_dfdb_t *fdb = (bridgeif_dfdb_t *)arg; + + LWIP_ASSERT("invalid arg", arg != NULL); + + bridgeif_fdb_age_one_second(fdb); + sys_timeout(BRIDGEIF_AGE_TIMER_MS, bridgeif_age_tmr, arg); +} + +/** + * @ingroup bridgeif_fdb + * Init our simple fdb list + */ +void * +bridgeif_fdb_init(u16_t max_fdb_entries) +{ + bridgeif_dfdb_t *fdb; + size_t alloc_len_sizet = sizeof(bridgeif_dfdb_t) + (max_fdb_entries * sizeof(bridgeif_dfdb_entry_t)); + mem_size_t alloc_len = (mem_size_t)alloc_len_sizet; + LWIP_ASSERT("alloc_len == alloc_len_sizet", alloc_len == alloc_len_sizet); + LWIP_DEBUGF(BRIDGEIF_DEBUG, ("bridgeif_fdb_init: allocating %d bytes for private FDB data\n", (int)alloc_len)); + fdb = (bridgeif_dfdb_t *)mem_calloc(1, alloc_len); + if (fdb == NULL) { + return NULL; + } + fdb->max_fdb_entries = max_fdb_entries; + fdb->fdb = (bridgeif_dfdb_entry_t *)(fdb + 1); + + sys_timeout(BRIDGEIF_AGE_TIMER_MS, bridgeif_age_tmr, fdb); + + return fdb; +} diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ethernet.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ethernet.c new file mode 100644 index 0000000000000000000000000000000000000000..dd171e2806ff4399881dd322b7bb2e16b42b7eeb --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ethernet.c @@ -0,0 +1,321 @@ +/** + * @file + * Ethernet common functions + * + * @defgroup ethernet Ethernet + * @ingroup callbackstyle_api + */ + +/* + * Copyright (c) 2001-2003 Swedish Institute of Computer Science. + * Copyright (c) 2003-2004 Leon Woestenberg + * Copyright (c) 2003-2004 Axon Digital Design B.V., The Netherlands. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + */ + +#include "lwip/opt.h" + +#if LWIP_ARP || LWIP_ETHERNET + +#include "netif/ethernet.h" +#include "lwip/def.h" +#include "lwip/stats.h" +#include "lwip/etharp.h" +#include "lwip/ip.h" +#include "lwip/snmp.h" + +#include + +#include "netif/ppp/ppp_opts.h" +#if PPPOE_SUPPORT +#include "netif/ppp/pppoe.h" +#endif /* PPPOE_SUPPORT */ + +#ifdef LWIP_HOOK_FILENAME +#include LWIP_HOOK_FILENAME +#endif + +const struct eth_addr ethbroadcast = {{0xff, 0xff, 0xff, 0xff, 0xff, 0xff}}; +const struct eth_addr ethzero = {{0, 0, 0, 0, 0, 0}}; + +/** + * @ingroup lwip_nosys + * Process received ethernet frames. Using this function instead of directly + * calling ip_input and passing ARP frames through etharp in ethernetif_input, + * the ARP cache is protected from concurrent access.\n + * Don't call directly, pass to netif_add() and call netif->input(). + * + * @param p the received packet, p->payload pointing to the ethernet header + * @param netif the network interface on which the packet was received + * + * @see LWIP_HOOK_UNKNOWN_ETH_PROTOCOL + * @see ETHARP_SUPPORT_VLAN + * @see LWIP_HOOK_VLAN_CHECK + */ +err_t +ethernet_input(struct pbuf *p, struct netif *netif) +{ + struct eth_hdr *ethhdr; + u16_t type; +#if LWIP_ARP || ETHARP_SUPPORT_VLAN || LWIP_IPV6 + u16_t next_hdr_offset = SIZEOF_ETH_HDR; +#endif /* LWIP_ARP || ETHARP_SUPPORT_VLAN */ + + LWIP_ASSERT_CORE_LOCKED(); + + if (p->len <= SIZEOF_ETH_HDR) { + /* a packet with only an ethernet header (or less) is not valid for us */ + ETHARP_STATS_INC(etharp.proterr); + ETHARP_STATS_INC(etharp.drop); + MIB2_STATS_NETIF_INC(netif, ifinerrors); + goto free_and_return; + } + + if (p->if_idx == NETIF_NO_INDEX) { + p->if_idx = netif_get_index(netif); + } + + /* points to packet payload, which starts with an Ethernet header */ + ethhdr = (struct eth_hdr *)p->payload; + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, + ("ethernet_input: dest:%"X8_F":%"X8_F":%"X8_F":%"X8_F":%"X8_F":%"X8_F", src:%"X8_F":%"X8_F":%"X8_F":%"X8_F":%"X8_F":%"X8_F", type:%"X16_F"\n", + (unsigned char)ethhdr->dest.addr[0], (unsigned char)ethhdr->dest.addr[1], (unsigned char)ethhdr->dest.addr[2], + (unsigned char)ethhdr->dest.addr[3], (unsigned char)ethhdr->dest.addr[4], (unsigned char)ethhdr->dest.addr[5], + (unsigned char)ethhdr->src.addr[0], (unsigned char)ethhdr->src.addr[1], (unsigned char)ethhdr->src.addr[2], + (unsigned char)ethhdr->src.addr[3], (unsigned char)ethhdr->src.addr[4], (unsigned char)ethhdr->src.addr[5], + lwip_htons(ethhdr->type))); + + type = ethhdr->type; +#if ETHARP_SUPPORT_VLAN + if (type == PP_HTONS(ETHTYPE_VLAN)) { + struct eth_vlan_hdr *vlan = (struct eth_vlan_hdr *)(((char *)ethhdr) + SIZEOF_ETH_HDR); + next_hdr_offset = SIZEOF_ETH_HDR + SIZEOF_VLAN_HDR; + if (p->len <= SIZEOF_ETH_HDR + SIZEOF_VLAN_HDR) { + /* a packet with only an ethernet/vlan header (or less) is not valid for us */ + ETHARP_STATS_INC(etharp.proterr); + ETHARP_STATS_INC(etharp.drop); + MIB2_STATS_NETIF_INC(netif, ifinerrors); + goto free_and_return; + } +#if defined(LWIP_HOOK_VLAN_CHECK) || defined(ETHARP_VLAN_CHECK) || defined(ETHARP_VLAN_CHECK_FN) /* if not, allow all VLANs */ +#ifdef LWIP_HOOK_VLAN_CHECK + if (!LWIP_HOOK_VLAN_CHECK(netif, ethhdr, vlan)) { +#elif defined(ETHARP_VLAN_CHECK_FN) + if (!ETHARP_VLAN_CHECK_FN(ethhdr, vlan)) { +#elif defined(ETHARP_VLAN_CHECK) + if (VLAN_ID(vlan) != ETHARP_VLAN_CHECK) { +#endif + /* silently ignore this packet: not for our VLAN */ + pbuf_free(p); + return ERR_OK; + } +#endif /* defined(LWIP_HOOK_VLAN_CHECK) || defined(ETHARP_VLAN_CHECK) || defined(ETHARP_VLAN_CHECK_FN) */ + type = vlan->tpid; + } +#endif /* ETHARP_SUPPORT_VLAN */ + +#if LWIP_ARP_FILTER_NETIF + netif = LWIP_ARP_FILTER_NETIF_FN(p, netif, lwip_htons(type)); +#endif /* LWIP_ARP_FILTER_NETIF*/ + + if (ethhdr->dest.addr[0] & 1) { + /* this might be a multicast or broadcast packet */ + if (ethhdr->dest.addr[0] == LL_IP4_MULTICAST_ADDR_0) { +#if LWIP_IPV4 + if ((ethhdr->dest.addr[1] == LL_IP4_MULTICAST_ADDR_1) && + (ethhdr->dest.addr[2] == LL_IP4_MULTICAST_ADDR_2)) { + /* mark the pbuf as link-layer multicast */ + p->flags |= PBUF_FLAG_LLMCAST; + } +#endif /* LWIP_IPV4 */ + } +#if LWIP_IPV6 + else if ((ethhdr->dest.addr[0] == LL_IP6_MULTICAST_ADDR_0) && + (ethhdr->dest.addr[1] == LL_IP6_MULTICAST_ADDR_1)) { + /* mark the pbuf as link-layer multicast */ + p->flags |= PBUF_FLAG_LLMCAST; + } +#endif /* LWIP_IPV6 */ + else if (eth_addr_cmp(ðhdr->dest, ðbroadcast)) { + /* mark the pbuf as link-layer broadcast */ + p->flags |= PBUF_FLAG_LLBCAST; + } + } + + switch (type) { +#if LWIP_IPV4 && LWIP_ARP + /* IP packet? */ + case PP_HTONS(ETHTYPE_IP): + if (!(netif->flags & NETIF_FLAG_ETHARP)) { + goto free_and_return; + } + /* skip Ethernet header (min. size checked above) */ + if (pbuf_remove_header(p, next_hdr_offset)) { + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, + ("ethernet_input: IPv4 packet dropped, too short (%"U16_F"/%"U16_F")\n", + p->tot_len, next_hdr_offset)); + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("Can't move over header in packet")); + goto free_and_return; + } else { + /* pass to IP layer */ + ip4_input(p, netif); + } + break; + + case PP_HTONS(ETHTYPE_ARP): + if (!(netif->flags & NETIF_FLAG_ETHARP)) { + goto free_and_return; + } + /* skip Ethernet header (min. size checked above) */ + if (pbuf_remove_header(p, next_hdr_offset)) { + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, + ("ethernet_input: ARP response packet dropped, too short (%"U16_F"/%"U16_F")\n", + p->tot_len, next_hdr_offset)); + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("Can't move over header in packet")); + ETHARP_STATS_INC(etharp.lenerr); + ETHARP_STATS_INC(etharp.drop); + goto free_and_return; + } else { + /* pass p to ARP module */ + etharp_input(p, netif); + } + break; +#endif /* LWIP_IPV4 && LWIP_ARP */ +#if PPPOE_SUPPORT + case PP_HTONS(ETHTYPE_PPPOEDISC): /* PPP Over Ethernet Discovery Stage */ + pppoe_disc_input(netif, p); + break; + + case PP_HTONS(ETHTYPE_PPPOE): /* PPP Over Ethernet Session Stage */ + pppoe_data_input(netif, p); + break; +#endif /* PPPOE_SUPPORT */ + +#if LWIP_IPV6 + case PP_HTONS(ETHTYPE_IPV6): /* IPv6 */ + /* skip Ethernet header */ + if ((p->len < next_hdr_offset) || pbuf_remove_header(p, next_hdr_offset)) { + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, + ("ethernet_input: IPv6 packet dropped, too short (%"U16_F"/%"U16_F")\n", + p->tot_len, next_hdr_offset)); + goto free_and_return; + } else { + /* pass to IPv6 layer */ + ip6_input(p, netif); + } + break; +#endif /* LWIP_IPV6 */ + + default: +#ifdef LWIP_HOOK_UNKNOWN_ETH_PROTOCOL + if (LWIP_HOOK_UNKNOWN_ETH_PROTOCOL(p, netif) == ERR_OK) { + break; + } +#endif + ETHARP_STATS_INC(etharp.proterr); + ETHARP_STATS_INC(etharp.drop); + MIB2_STATS_NETIF_INC(netif, ifinunknownprotos); + goto free_and_return; + } + + /* This means the pbuf is freed or consumed, + so the caller doesn't have to free it again */ + return ERR_OK; + +free_and_return: + pbuf_free(p); + return ERR_OK; +} + +/** + * @ingroup ethernet + * Send an ethernet packet on the network using netif->linkoutput(). + * The ethernet header is filled in before sending. + * + * @see LWIP_HOOK_VLAN_SET + * + * @param netif the lwIP network interface on which to send the packet + * @param p the packet to send. pbuf layer must be @ref PBUF_LINK. + * @param src the source MAC address to be copied into the ethernet header + * @param dst the destination MAC address to be copied into the ethernet header + * @param eth_type ethernet type (@ref lwip_ieee_eth_type) + * @return ERR_OK if the packet was sent, any other err_t on failure + */ +err_t +ethernet_output(struct netif * netif, struct pbuf * p, + const struct eth_addr * src, const struct eth_addr * dst, + u16_t eth_type) { + struct eth_hdr *ethhdr; + u16_t eth_type_be = lwip_htons(eth_type); + +#if ETHARP_SUPPORT_VLAN && defined(LWIP_HOOK_VLAN_SET) + s32_t vlan_prio_vid = LWIP_HOOK_VLAN_SET(netif, p, src, dst, eth_type); + if (vlan_prio_vid >= 0) { + struct eth_vlan_hdr *vlanhdr; + + LWIP_ASSERT("prio_vid must be <= 0xFFFF", vlan_prio_vid <= 0xFFFF); + + if (pbuf_add_header(p, SIZEOF_ETH_HDR + SIZEOF_VLAN_HDR) != 0) { + goto pbuf_header_failed; + } + vlanhdr = (struct eth_vlan_hdr *)(((u8_t *)p->payload) + SIZEOF_ETH_HDR); + vlanhdr->tpid = eth_type_be; + vlanhdr->prio_vid = lwip_htons((u16_t)vlan_prio_vid); + + eth_type_be = PP_HTONS(ETHTYPE_VLAN); + } else +#endif /* ETHARP_SUPPORT_VLAN && defined(LWIP_HOOK_VLAN_SET) */ + { + if (pbuf_add_header(p, SIZEOF_ETH_HDR) != 0) { + goto pbuf_header_failed; + } + } + + LWIP_ASSERT_CORE_LOCKED(); + + ethhdr = (struct eth_hdr *)p->payload; + ethhdr->type = eth_type_be; + SMEMCPY(ðhdr->dest, dst, ETH_HWADDR_LEN); + SMEMCPY(ðhdr->src, src, ETH_HWADDR_LEN); + + LWIP_ASSERT("netif->hwaddr_len must be 6 for ethernet_output!", + (netif->hwaddr_len == ETH_HWADDR_LEN)); + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, + ("ethernet_output: sending packet %p\n", (void *)p)); + + /* send the packet */ + return netif->linkoutput(netif, p); + +pbuf_header_failed: + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, + ("ethernet_output: could not allocate room for header.\n")); + LINK_STATS_INC(link.lenerr); + return ERR_BUF; +} + +#endif /* LWIP_ARP || LWIP_ETHERNET */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/lowpan6.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/lowpan6.c new file mode 100644 index 0000000000000000000000000000000000000000..7f0d276766c4bddf9a4f961f720be3e89ae197d3 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/lowpan6.c @@ -0,0 +1,920 @@ +/** + * @file + * + * 6LowPAN output for IPv6. Uses ND tables for link-layer addressing. Fragments packets to 6LowPAN units. + * + * This implementation aims to conform to IEEE 802.15.4(-2015), RFC 4944 and RFC 6282. + * @todo: RFC 6775. + */ + +/* + * Copyright (c) 2015 Inico Technologies Ltd. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Ivan Delamer + * + * + * Please coordinate changes and requests with Ivan Delamer + * + */ + +/** + * @defgroup sixlowpan 6LoWPAN (RFC4944) + * @ingroup netifs + * 6LowPAN netif implementation + */ + +#include "netif/lowpan6.h" + +#if LWIP_IPV6 + +#include "lwip/ip.h" +#include "lwip/pbuf.h" +#include "lwip/ip_addr.h" +#include "lwip/netif.h" +#include "lwip/nd6.h" +#include "lwip/mem.h" +#include "lwip/udp.h" +#include "lwip/tcpip.h" +#include "lwip/snmp.h" +#include "netif/ieee802154.h" + +#include + +#if LWIP_6LOWPAN_802154_HW_CRC +#define LWIP_6LOWPAN_DO_CALC_CRC(buf, len) 0 +#else +#define LWIP_6LOWPAN_DO_CALC_CRC(buf, len) LWIP_6LOWPAN_CALC_CRC(buf, len) +#endif + +/** This is a helper struct for reassembly of fragments + * (IEEE 802.15.4 limits to 127 bytes) + */ +struct lowpan6_reass_helper { + struct lowpan6_reass_helper *next_packet; + struct pbuf *reass; + struct pbuf *frags; + u8_t timer; + struct lowpan6_link_addr sender_addr; + u16_t datagram_size; + u16_t datagram_tag; +}; + +/** This struct keeps track of per-netif state */ +struct lowpan6_ieee802154_data { + /** fragment reassembly list */ + struct lowpan6_reass_helper *reass_list; +#if LWIP_6LOWPAN_NUM_CONTEXTS > 0 + /** address context for compression */ + ip6_addr_t lowpan6_context[LWIP_6LOWPAN_NUM_CONTEXTS]; +#endif + /** Datagram Tag for fragmentation */ + u16_t tx_datagram_tag; + /** local PAN ID for IEEE 802.15.4 header */ + u16_t ieee_802154_pan_id; + /** Sequence Number for IEEE 802.15.4 transmission */ + u8_t tx_frame_seq_num; +}; + +/* Maximum frame size is 127 bytes minus CRC size */ +#define LOWPAN6_MAX_PAYLOAD (127 - 2) + +/** Currently, this state is global, since there's only one 6LoWPAN netif */ +static struct lowpan6_ieee802154_data lowpan6_data; + +#if LWIP_6LOWPAN_NUM_CONTEXTS > 0 +#define LWIP_6LOWPAN_CONTEXTS(netif) lowpan6_data.lowpan6_context +#else +#define LWIP_6LOWPAN_CONTEXTS(netif) NULL +#endif + +static const struct lowpan6_link_addr ieee_802154_broadcast = {2, {0xff, 0xff}}; + +#if LWIP_6LOWPAN_INFER_SHORT_ADDRESS +static struct lowpan6_link_addr short_mac_addr = {2, {0, 0}}; +#endif /* LWIP_6LOWPAN_INFER_SHORT_ADDRESS */ + +/* IEEE 802.15.4 specific functions: */ + +/** Write the IEEE 802.15.4 header that encapsulates the 6LoWPAN frame. + * Src and dst PAN IDs are filled with the ID set by @ref lowpan6_set_pan_id. + * + * Since the length is variable: + * @returns the header length + */ +static u8_t +lowpan6_write_iee802154_header(struct ieee_802154_hdr *hdr, const struct lowpan6_link_addr *src, + const struct lowpan6_link_addr *dst) +{ + u8_t ieee_header_len; + u8_t *buffer; + u8_t i; + u16_t fc; + + fc = IEEE_802154_FC_FT_DATA; /* send data packet (2003 frame version) */ + fc |= IEEE_802154_FC_PANID_COMPR; /* set PAN ID compression, for now src and dst PANs are equal */ + if (dst != &ieee_802154_broadcast) { + fc |= IEEE_802154_FC_ACK_REQ; /* data packet, no broadcast: ack required. */ + } + if (dst->addr_len == 2) { + fc |= IEEE_802154_FC_DST_ADDR_MODE_SHORT; + } else { + LWIP_ASSERT("invalid dst address length", dst->addr_len == 8); + fc |= IEEE_802154_FC_DST_ADDR_MODE_EXT; + } + if (src->addr_len == 2) { + fc |= IEEE_802154_FC_SRC_ADDR_MODE_SHORT; + } else { + LWIP_ASSERT("invalid src address length", src->addr_len == 8); + fc |= IEEE_802154_FC_SRC_ADDR_MODE_EXT; + } + hdr->frame_control = fc; + hdr->sequence_number = lowpan6_data.tx_frame_seq_num++; + hdr->destination_pan_id = lowpan6_data.ieee_802154_pan_id; /* pan id */ + + buffer = (u8_t *)hdr; + ieee_header_len = 5; + i = dst->addr_len; + /* reverse memcpy of dst addr */ + while (i-- > 0) { + buffer[ieee_header_len++] = dst->addr[i]; + } + /* Source PAN ID skipped due to PAN ID Compression */ + i = src->addr_len; + /* reverse memcpy of src addr */ + while (i-- > 0) { + buffer[ieee_header_len++] = src->addr[i]; + } + return ieee_header_len; +} + +/** Parse the IEEE 802.15.4 header from a pbuf. + * If successful, the header is hidden from the pbuf. + * + * PAN IDs and seuqence number are not checked + * + * @param p input pbuf, p->payload pointing at the IEEE 802.15.4 header + * @param src pointer to source address filled from the header + * @param dest pointer to destination address filled from the header + * @returns ERR_OK if successful + */ +static err_t +lowpan6_parse_iee802154_header(struct pbuf *p, struct lowpan6_link_addr *src, + struct lowpan6_link_addr *dest) +{ + u8_t *puc; + s8_t i; + u16_t frame_control, addr_mode; + u16_t datagram_offset; + + /* Parse IEEE 802.15.4 header */ + puc = (u8_t *)p->payload; + frame_control = puc[0] | (puc[1] << 8); + datagram_offset = 2; + if (frame_control & IEEE_802154_FC_SEQNO_SUPPR) { + if (IEEE_802154_FC_FRAME_VERSION_GET(frame_control) <= 1) { + /* sequence number suppressed, this is not valid for versions 0/1 */ + return ERR_VAL; + } + } else { + datagram_offset++; + } + datagram_offset += 2; /* Skip destination PAN ID */ + addr_mode = frame_control & IEEE_802154_FC_DST_ADDR_MODE_MASK; + if (addr_mode == IEEE_802154_FC_DST_ADDR_MODE_EXT) { + /* extended address (64 bit) */ + dest->addr_len = 8; + /* reverse memcpy: */ + for (i = 0; i < 8; i++) { + dest->addr[i] = puc[datagram_offset + 7 - i]; + } + datagram_offset += 8; + } else if (addr_mode == IEEE_802154_FC_DST_ADDR_MODE_SHORT) { + /* short address (16 bit) */ + dest->addr_len = 2; + /* reverse memcpy: */ + dest->addr[0] = puc[datagram_offset + 1]; + dest->addr[1] = puc[datagram_offset]; + datagram_offset += 2; + } else { + /* unsupported address mode (do we need "no address"?) */ + return ERR_VAL; + } + + if (!(frame_control & IEEE_802154_FC_PANID_COMPR)) { + /* No PAN ID compression, skip source PAN ID */ + datagram_offset += 2; + } + + addr_mode = frame_control & IEEE_802154_FC_SRC_ADDR_MODE_MASK; + if (addr_mode == IEEE_802154_FC_SRC_ADDR_MODE_EXT) { + /* extended address (64 bit) */ + src->addr_len = 8; + /* reverse memcpy: */ + for (i = 0; i < 8; i++) { + src->addr[i] = puc[datagram_offset + 7 - i]; + } + datagram_offset += 8; + } else if (addr_mode == IEEE_802154_FC_DST_ADDR_MODE_SHORT) { + /* short address (16 bit) */ + src->addr_len = 2; + src->addr[0] = puc[datagram_offset + 1]; + src->addr[1] = puc[datagram_offset]; + datagram_offset += 2; + } else { + /* unsupported address mode (do we need "no address"?) */ + return ERR_VAL; + } + + /* hide IEEE802.15.4 header. */ + if (pbuf_remove_header(p, datagram_offset)) { + return ERR_VAL; + } + return ERR_OK; +} + +/** Calculate the 16-bit CRC as required by IEEE 802.15.4 */ +u16_t +lowpan6_calc_crc(const void* buf, u16_t len) +{ +#define CCITT_POLY_16 0x8408U + u16_t i; + u8_t b; + u16_t crc = 0; + const u8_t* p = (const u8_t*)buf; + + for (i = 0; i < len; i++) { + u8_t data = *p; + for (b = 0U; b < 8U; b++) { + if (((data ^ crc) & 1) != 0) { + crc = (u16_t)((crc >> 1) ^ CCITT_POLY_16); + } else { + crc = (u16_t)(crc >> 1); + } + data = (u8_t)(data >> 1); + } + p++; + } + return crc; +} + +/* Fragmentation specific functions: */ + +static void +free_reass_datagram(struct lowpan6_reass_helper *lrh) +{ + if (lrh->reass) { + pbuf_free(lrh->reass); + } + if (lrh->frags) { + pbuf_free(lrh->frags); + } + mem_free(lrh); +} + +/** + * Removes a datagram from the reassembly queue. + **/ +static void +dequeue_datagram(struct lowpan6_reass_helper *lrh, struct lowpan6_reass_helper *prev) +{ + if (lowpan6_data.reass_list == lrh) { + lowpan6_data.reass_list = lowpan6_data.reass_list->next_packet; + } else { + /* it wasn't the first, so it must have a valid 'prev' */ + LWIP_ASSERT("sanity check linked list", prev != NULL); + prev->next_packet = lrh->next_packet; + } +} + +/** + * Periodic timer for 6LowPAN functions: + * + * - Remove incomplete/old packets + */ +void +lowpan6_tmr(void) +{ + struct lowpan6_reass_helper *lrh, *lrh_next, *lrh_prev = NULL; + + lrh = lowpan6_data.reass_list; + while (lrh != NULL) { + lrh_next = lrh->next_packet; + if ((--lrh->timer) == 0) { + dequeue_datagram(lrh, lrh_prev); + free_reass_datagram(lrh); + } else { + lrh_prev = lrh; + } + lrh = lrh_next; + } +} + +/* + * Encapsulates data into IEEE 802.15.4 frames. + * Fragments an IPv6 datagram into 6LowPAN units, which fit into IEEE 802.15.4 frames. + * If configured, will compress IPv6 and or UDP headers. + * */ +static err_t +lowpan6_frag(struct netif *netif, struct pbuf *p, const struct lowpan6_link_addr *src, const struct lowpan6_link_addr *dst) +{ + struct pbuf *p_frag; + u16_t frag_len, remaining_len, max_data_len; + u8_t *buffer; + u8_t ieee_header_len; + u8_t lowpan6_header_len; + u8_t hidden_header_len; + u16_t crc; + u16_t datagram_offset; + err_t err = ERR_IF; + + LWIP_ASSERT("lowpan6_frag: netif->linkoutput not set", netif->linkoutput != NULL); + + /* We'll use a dedicated pbuf for building 6LowPAN fragments. */ + p_frag = pbuf_alloc(PBUF_RAW, 127, PBUF_RAM); + if (p_frag == NULL) { + MIB2_STATS_NETIF_INC(netif, ifoutdiscards); + return ERR_MEM; + } + LWIP_ASSERT("this needs a pbuf in one piece", p_frag->len == p_frag->tot_len); + + /* Write IEEE 802.15.4 header. */ + buffer = (u8_t *)p_frag->payload; + ieee_header_len = lowpan6_write_iee802154_header((struct ieee_802154_hdr *)buffer, src, dst); + LWIP_ASSERT("ieee_header_len < p_frag->len", ieee_header_len < p_frag->len); + +#if LWIP_6LOWPAN_IPHC + /* Perform 6LowPAN IPv6 header compression according to RFC 6282 */ + /* do the header compression (this does NOT copy any non-compressed data) */ + err = lowpan6_compress_headers(netif, (u8_t *)p->payload, p->len, + &buffer[ieee_header_len], p_frag->len - ieee_header_len, &lowpan6_header_len, + &hidden_header_len, LWIP_6LOWPAN_CONTEXTS(netif), src, dst); + if (err != ERR_OK) { + MIB2_STATS_NETIF_INC(netif, ifoutdiscards); + pbuf_free(p_frag); + return err; + } + pbuf_remove_header(p, hidden_header_len); + +#else /* LWIP_6LOWPAN_IPHC */ + /* Send uncompressed IPv6 header with appropriate dispatch byte. */ + lowpan6_header_len = 1; + buffer[ieee_header_len] = 0x41; /* IPv6 dispatch */ +#endif /* LWIP_6LOWPAN_IPHC */ + + /* Calculate remaining packet length */ + remaining_len = p->tot_len; + + if (remaining_len > 0x7FF) { + MIB2_STATS_NETIF_INC(netif, ifoutdiscards); + /* datagram_size must fit into 11 bit */ + pbuf_free(p_frag); + return ERR_VAL; + } + + /* Fragment, or 1 packet? */ + max_data_len = LOWPAN6_MAX_PAYLOAD - ieee_header_len - lowpan6_header_len; + if (remaining_len > max_data_len) { + u16_t data_len; + /* We must move the 6LowPAN header to make room for the FRAG header. */ + memmove(&buffer[ieee_header_len + 4], &buffer[ieee_header_len], lowpan6_header_len); + + /* Now we need to fragment the packet. FRAG1 header first */ + buffer[ieee_header_len] = 0xc0 | (((p->tot_len + hidden_header_len) >> 8) & 0x7); + buffer[ieee_header_len + 1] = (p->tot_len + hidden_header_len) & 0xff; + + lowpan6_data.tx_datagram_tag++; + buffer[ieee_header_len + 2] = (lowpan6_data.tx_datagram_tag >> 8) & 0xff; + buffer[ieee_header_len + 3] = lowpan6_data.tx_datagram_tag & 0xff; + + /* Fragment follows. */ + data_len = (max_data_len - 4) & 0xf8; + frag_len = data_len + lowpan6_header_len; + + pbuf_copy_partial(p, buffer + ieee_header_len + lowpan6_header_len + 4, frag_len - lowpan6_header_len, 0); + remaining_len -= frag_len - lowpan6_header_len; + /* datagram offset holds the offset before compression */ + datagram_offset = frag_len - lowpan6_header_len + hidden_header_len; + LWIP_ASSERT("datagram offset must be a multiple of 8", (datagram_offset & 7) == 0); + + /* Calculate frame length */ + p_frag->len = p_frag->tot_len = ieee_header_len + 4 + frag_len + 2; /* add 2 bytes for crc*/ + + /* 2 bytes CRC */ + crc = LWIP_6LOWPAN_DO_CALC_CRC(p_frag->payload, p_frag->len - 2); + pbuf_take_at(p_frag, &crc, 2, p_frag->len - 2); + + /* send the packet */ + MIB2_STATS_NETIF_ADD(netif, ifoutoctets, p_frag->tot_len); + LWIP_DEBUGF(LWIP_LOWPAN6_DEBUG | LWIP_DBG_TRACE, ("lowpan6_send: sending packet %p\n", (void *)p)); + err = netif->linkoutput(netif, p_frag); + + while ((remaining_len > 0) && (err == ERR_OK)) { + struct ieee_802154_hdr *hdr = (struct ieee_802154_hdr *)buffer; + /* new frame, new seq num for ACK */ + hdr->sequence_number = lowpan6_data.tx_frame_seq_num++; + + buffer[ieee_header_len] |= 0x20; /* Change FRAG1 to FRAGN */ + + LWIP_ASSERT("datagram offset must be a multiple of 8", (datagram_offset & 7) == 0); + buffer[ieee_header_len + 4] = (u8_t)(datagram_offset >> 3); /* datagram offset in FRAGN header (datagram_offset is max. 11 bit) */ + + frag_len = (127 - ieee_header_len - 5 - 2) & 0xf8; + if (frag_len > remaining_len) { + frag_len = remaining_len; + } + + pbuf_copy_partial(p, buffer + ieee_header_len + 5, frag_len, p->tot_len - remaining_len); + remaining_len -= frag_len; + datagram_offset += frag_len; + + /* Calculate frame length */ + p_frag->len = p_frag->tot_len = frag_len + 5 + ieee_header_len + 2; + + /* 2 bytes CRC */ + crc = LWIP_6LOWPAN_DO_CALC_CRC(p_frag->payload, p_frag->len - 2); + pbuf_take_at(p_frag, &crc, 2, p_frag->len - 2); + + /* send the packet */ + MIB2_STATS_NETIF_ADD(netif, ifoutoctets, p_frag->tot_len); + LWIP_DEBUGF(LWIP_LOWPAN6_DEBUG | LWIP_DBG_TRACE, ("lowpan6_send: sending packet %p\n", (void *)p)); + err = netif->linkoutput(netif, p_frag); + } + } else { + /* It fits in one frame. */ + frag_len = remaining_len; + + /* Copy IPv6 packet */ + pbuf_copy_partial(p, buffer + ieee_header_len + lowpan6_header_len, frag_len, 0); + remaining_len = 0; + + /* Calculate frame length */ + p_frag->len = p_frag->tot_len = frag_len + lowpan6_header_len + ieee_header_len + 2; + LWIP_ASSERT("", p_frag->len <= 127); + + /* 2 bytes CRC */ + crc = LWIP_6LOWPAN_DO_CALC_CRC(p_frag->payload, p_frag->len - 2); + pbuf_take_at(p_frag, &crc, 2, p_frag->len - 2); + + /* send the packet */ + MIB2_STATS_NETIF_ADD(netif, ifoutoctets, p_frag->tot_len); + LWIP_DEBUGF(LWIP_LOWPAN6_DEBUG | LWIP_DBG_TRACE, ("lowpan6_send: sending packet %p\n", (void *)p)); + err = netif->linkoutput(netif, p_frag); + } + + pbuf_free(p_frag); + + return err; +} + +/** + * @ingroup sixlowpan + * Set context + */ +err_t +lowpan6_set_context(u8_t idx, const ip6_addr_t *context) +{ +#if LWIP_6LOWPAN_NUM_CONTEXTS > 0 + if (idx >= LWIP_6LOWPAN_NUM_CONTEXTS) { + return ERR_ARG; + } + + IP6_ADDR_ZONECHECK(context); + + ip6_addr_set(&lowpan6_data.lowpan6_context[idx], context); + + return ERR_OK; +#else + LWIP_UNUSED_ARG(idx); + LWIP_UNUSED_ARG(context); + return ERR_ARG; +#endif +} + +#if LWIP_6LOWPAN_INFER_SHORT_ADDRESS +/** + * @ingroup sixlowpan + * Set short address + */ +err_t +lowpan6_set_short_addr(u8_t addr_high, u8_t addr_low) +{ + short_mac_addr.addr[0] = addr_high; + short_mac_addr.addr[1] = addr_low; + + return ERR_OK; +} +#endif /* LWIP_6LOWPAN_INFER_SHORT_ADDRESS */ + +/* Create IEEE 802.15.4 address from netif address */ +static err_t +lowpan6_hwaddr_to_addr(struct netif *netif, struct lowpan6_link_addr *addr) +{ + addr->addr_len = 8; + if (netif->hwaddr_len == 8) { + LWIP_ERROR("NETIF_MAX_HWADDR_LEN >= 8 required", sizeof(netif->hwaddr) >= 8, return ERR_VAL;); + SMEMCPY(addr->addr, netif->hwaddr, 8); + } else if (netif->hwaddr_len == 6) { + /* Copy from MAC-48 */ + SMEMCPY(addr->addr, netif->hwaddr, 3); + addr->addr[3] = addr->addr[4] = 0xff; + SMEMCPY(&addr->addr[5], &netif->hwaddr[3], 3); + } else { + /* Invalid address length, don't know how to convert this */ + return ERR_VAL; + } + return ERR_OK; +} + +/** + * @ingroup sixlowpan + * Resolve and fill-in IEEE 802.15.4 address header for outgoing IPv6 packet. + * + * Perform Header Compression and fragment if necessary. + * + * @param netif The lwIP network interface which the IP packet will be sent on. + * @param q The pbuf(s) containing the IP packet to be sent. + * @param ip6addr The IP address of the packet destination. + * + * @return err_t + */ +err_t +lowpan6_output(struct netif *netif, struct pbuf *q, const ip6_addr_t *ip6addr) +{ + err_t result; + const u8_t *hwaddr; + struct lowpan6_link_addr src, dest; +#if LWIP_6LOWPAN_INFER_SHORT_ADDRESS + ip6_addr_t ip6_src; + struct ip6_hdr *ip6_hdr; +#endif /* LWIP_6LOWPAN_INFER_SHORT_ADDRESS */ + +#if LWIP_6LOWPAN_INFER_SHORT_ADDRESS + /* Check if we can compress source address (use aligned copy) */ + ip6_hdr = (struct ip6_hdr *)q->payload; + ip6_addr_copy_from_packed(ip6_src, ip6_hdr->src); + ip6_addr_assign_zone(&ip6_src, IP6_UNICAST, netif); + if (lowpan6_get_address_mode(&ip6_src, &short_mac_addr) == 3) { + src.addr_len = 2; + src.addr[0] = short_mac_addr.addr[0]; + src.addr[1] = short_mac_addr.addr[1]; + } else +#endif /* LWIP_6LOWPAN_INFER_SHORT_ADDRESS */ + { + result = lowpan6_hwaddr_to_addr(netif, &src); + if (result != ERR_OK) { + MIB2_STATS_NETIF_INC(netif, ifoutdiscards); + return result; + } + } + + /* multicast destination IP address? */ + if (ip6_addr_ismulticast(ip6addr)) { + MIB2_STATS_NETIF_INC(netif, ifoutnucastpkts); + /* We need to send to the broadcast address.*/ + return lowpan6_frag(netif, q, &src, &ieee_802154_broadcast); + } + + /* We have a unicast destination IP address */ + /* @todo anycast? */ + +#if LWIP_6LOWPAN_INFER_SHORT_ADDRESS + if (src.addr_len == 2) { + /* If source address was compressable to short_mac_addr, and dest has same subnet and + * is also compressable to 2-bytes, assume we can infer dest as a short address too. */ + dest.addr_len = 2; + dest.addr[0] = ((u8_t *)q->payload)[38]; + dest.addr[1] = ((u8_t *)q->payload)[39]; + if ((src.addr_len == 2) && (ip6_addr_netcmp_zoneless(&ip6_hdr->src, &ip6_hdr->dest)) && + (lowpan6_get_address_mode(ip6addr, &dest) == 3)) { + MIB2_STATS_NETIF_INC(netif, ifoutucastpkts); + return lowpan6_frag(netif, q, &src, &dest); + } + } +#endif /* LWIP_6LOWPAN_INFER_SHORT_ADDRESS */ + + /* Ask ND6 what to do with the packet. */ + result = nd6_get_next_hop_addr_or_queue(netif, q, ip6addr, &hwaddr); + if (result != ERR_OK) { + MIB2_STATS_NETIF_INC(netif, ifoutdiscards); + return result; + } + + /* If no hardware address is returned, nd6 has queued the packet for later. */ + if (hwaddr == NULL) { + return ERR_OK; + } + + /* Send out the packet using the returned hardware address. */ + dest.addr_len = netif->hwaddr_len; + /* XXX: Inferring the length of the source address from the destination address + * is not correct for IEEE 802.15.4, but currently we don't get this information + * from the neighbor cache */ + SMEMCPY(dest.addr, hwaddr, netif->hwaddr_len); + MIB2_STATS_NETIF_INC(netif, ifoutucastpkts); + return lowpan6_frag(netif, q, &src, &dest); +} +/** + * @ingroup sixlowpan + * NETIF input function: don't free the input pbuf when returning != ERR_OK! + */ +err_t +lowpan6_input(struct pbuf *p, struct netif *netif) +{ + u8_t *puc, b; + s8_t i; + struct lowpan6_link_addr src, dest; + u16_t datagram_size = 0; + u16_t datagram_offset, datagram_tag; + struct lowpan6_reass_helper *lrh, *lrh_next, *lrh_prev = NULL; + + if (p == NULL) { + return ERR_OK; + } + + MIB2_STATS_NETIF_ADD(netif, ifinoctets, p->tot_len); + + if (p->len != p->tot_len) { + /* for now, this needs a pbuf in one piece */ + goto lowpan6_input_discard; + } + + if (lowpan6_parse_iee802154_header(p, &src, &dest) != ERR_OK) { + goto lowpan6_input_discard; + } + + /* Check dispatch. */ + puc = (u8_t *)p->payload; + + b = *puc; + if ((b & 0xf8) == 0xc0) { + /* FRAG1 dispatch. add this packet to reassembly list. */ + datagram_size = ((u16_t)(puc[0] & 0x07) << 8) | (u16_t)puc[1]; + datagram_tag = ((u16_t)puc[2] << 8) | (u16_t)puc[3]; + + /* check for duplicate */ + lrh = lowpan6_data.reass_list; + while (lrh != NULL) { + uint8_t discard = 0; + lrh_next = lrh->next_packet; + if ((lrh->sender_addr.addr_len == src.addr_len) && + (memcmp(lrh->sender_addr.addr, src.addr, src.addr_len) == 0)) { + /* address match with packet in reassembly. */ + if ((datagram_tag == lrh->datagram_tag) && (datagram_size == lrh->datagram_size)) { + /* duplicate fragment. */ + goto lowpan6_input_discard; + } else { + /* We are receiving the start of a new datagram. Discard old one (incomplete). */ + discard = 1; + } + } + if (discard) { + dequeue_datagram(lrh, lrh_prev); + free_reass_datagram(lrh); + } else { + lrh_prev = lrh; + } + /* Check next datagram in queue. */ + lrh = lrh_next; + } + + pbuf_remove_header(p, 4); /* hide frag1 dispatch */ + + lrh = (struct lowpan6_reass_helper *) mem_malloc(sizeof(struct lowpan6_reass_helper)); + if (lrh == NULL) { + goto lowpan6_input_discard; + } + + lrh->sender_addr.addr_len = src.addr_len; + for (i = 0; i < src.addr_len; i++) { + lrh->sender_addr.addr[i] = src.addr[i]; + } + lrh->datagram_size = datagram_size; + lrh->datagram_tag = datagram_tag; + lrh->frags = NULL; + if (*(u8_t *)p->payload == 0x41) { + /* This is a complete IPv6 packet, just skip dispatch byte. */ + pbuf_remove_header(p, 1); /* hide dispatch byte. */ + lrh->reass = p; + } else if ((*(u8_t *)p->payload & 0xe0 ) == 0x60) { + lrh->reass = lowpan6_decompress(p, datagram_size, LWIP_6LOWPAN_CONTEXTS(netif), &src, &dest); + if (lrh->reass == NULL) { + /* decompression failed */ + mem_free(lrh); + goto lowpan6_input_discard; + } + } + /* TODO: handle the case where we already have FRAGN received */ + lrh->next_packet = lowpan6_data.reass_list; + lrh->timer = 2; + lowpan6_data.reass_list = lrh; + + return ERR_OK; + } else if ((b & 0xf8) == 0xe0) { + /* FRAGN dispatch, find packet being reassembled. */ + datagram_size = ((u16_t)(puc[0] & 0x07) << 8) | (u16_t)puc[1]; + datagram_tag = ((u16_t)puc[2] << 8) | (u16_t)puc[3]; + datagram_offset = (u16_t)puc[4] << 3; + pbuf_remove_header(p, 4); /* hide frag1 dispatch but keep datagram offset for reassembly */ + + for (lrh = lowpan6_data.reass_list; lrh != NULL; lrh_prev = lrh, lrh = lrh->next_packet) { + if ((lrh->sender_addr.addr_len == src.addr_len) && + (memcmp(lrh->sender_addr.addr, src.addr, src.addr_len) == 0) && + (datagram_tag == lrh->datagram_tag) && + (datagram_size == lrh->datagram_size)) { + break; + } + } + if (lrh == NULL) { + /* rogue fragment */ + goto lowpan6_input_discard; + } + /* Insert new pbuf into list of fragments. Each fragment is a pbuf, + this only works for unchained pbufs. */ + LWIP_ASSERT("p->next == NULL", p->next == NULL); + if (lrh->reass != NULL) { + /* FRAG1 already received, check this offset against first len */ + if (datagram_offset < lrh->reass->len) { + /* fragment overlap, discard old fragments */ + dequeue_datagram(lrh, lrh_prev); + free_reass_datagram(lrh); + goto lowpan6_input_discard; + } + } + if (lrh->frags == NULL) { + /* first FRAGN */ + lrh->frags = p; + } else { + /* find the correct place to insert */ + struct pbuf *q, *last; + u16_t new_frag_len = p->len - 1; /* p->len includes datagram_offset byte */ + for (q = lrh->frags, last = NULL; q != NULL; last = q, q = q->next) { + u16_t q_datagram_offset = ((u8_t *)q->payload)[0] << 3; + u16_t q_frag_len = q->len - 1; + if (datagram_offset < q_datagram_offset) { + if (datagram_offset + new_frag_len > q_datagram_offset) { + /* overlap, discard old fragments */ + dequeue_datagram(lrh, lrh_prev); + free_reass_datagram(lrh); + goto lowpan6_input_discard; + } + /* insert here */ + break; + } else if (datagram_offset == q_datagram_offset) { + if (q_frag_len != new_frag_len) { + /* fragment mismatch, discard old fragments */ + dequeue_datagram(lrh, lrh_prev); + free_reass_datagram(lrh); + goto lowpan6_input_discard; + } + /* duplicate, ignore */ + pbuf_free(p); + return ERR_OK; + } + } + /* insert fragment */ + if (last == NULL) { + lrh->frags = p; + } else { + last->next = p; + p->next = q; + } + } + /* check if all fragments were received */ + if (lrh->reass) { + u16_t offset = lrh->reass->len; + struct pbuf *q; + for (q = lrh->frags; q != NULL; q = q->next) { + u16_t q_datagram_offset = ((u8_t *)q->payload)[0] << 3; + if (q_datagram_offset != offset) { + /* not complete, wait for more fragments */ + return ERR_OK; + } + offset += q->len - 1; + } + if (offset == datagram_size) { + /* all fragments received, combine pbufs */ + u16_t datagram_left = datagram_size - lrh->reass->len; + for (q = lrh->frags; q != NULL; q = q->next) { + /* hide datagram_offset byte now */ + pbuf_remove_header(q, 1); + q->tot_len = datagram_left; + datagram_left -= q->len; + } + LWIP_ASSERT("datagram_left == 0", datagram_left == 0); + q = lrh->reass; + q->tot_len = datagram_size; + q->next = lrh->frags; + lrh->frags = NULL; + lrh->reass = NULL; + dequeue_datagram(lrh, lrh_prev); + mem_free(lrh); + + /* @todo: distinguish unicast/multicast */ + MIB2_STATS_NETIF_INC(netif, ifinucastpkts); + return ip6_input(q, netif); + } + } + /* pbuf enqueued, waiting for more fragments */ + return ERR_OK; + } else { + if (b == 0x41) { + /* This is a complete IPv6 packet, just skip dispatch byte. */ + pbuf_remove_header(p, 1); /* hide dispatch byte. */ + } else if ((b & 0xe0 ) == 0x60) { + /* IPv6 headers are compressed using IPHC. */ + p = lowpan6_decompress(p, datagram_size, LWIP_6LOWPAN_CONTEXTS(netif), &src, &dest); + if (p == NULL) { + MIB2_STATS_NETIF_INC(netif, ifindiscards); + return ERR_OK; + } + } else { + goto lowpan6_input_discard; + } + + /* @todo: distinguish unicast/multicast */ + MIB2_STATS_NETIF_INC(netif, ifinucastpkts); + + return ip6_input(p, netif); + } +lowpan6_input_discard: + MIB2_STATS_NETIF_INC(netif, ifindiscards); + pbuf_free(p); + /* always return ERR_OK here to prevent the caller freeing the pbuf */ + return ERR_OK; +} + +/** + * @ingroup sixlowpan + */ +err_t +lowpan6_if_init(struct netif *netif) +{ + netif->name[0] = 'L'; + netif->name[1] = '6'; + netif->output_ip6 = lowpan6_output; + + MIB2_INIT_NETIF(netif, snmp_ifType_other, 0); + + /* maximum transfer unit */ + netif->mtu = 1280; + + /* broadcast capability */ + netif->flags = NETIF_FLAG_BROADCAST /* | NETIF_FLAG_LOWPAN6 */; + + return ERR_OK; +} + +/** + * @ingroup sixlowpan + * Set PAN ID + */ +err_t +lowpan6_set_pan_id(u16_t pan_id) +{ + lowpan6_data.ieee_802154_pan_id = pan_id; + + return ERR_OK; +} + +#if !NO_SYS +/** + * @ingroup sixlowpan + * Pass a received packet to tcpip_thread for input processing + * + * @param p the received packet, p->payload pointing to the + * IEEE 802.15.4 header. + * @param inp the network interface on which the packet was received + */ +err_t +tcpip_6lowpan_input(struct pbuf *p, struct netif *inp) +{ + return tcpip_inpkt(p, inp, lowpan6_input); +} +#endif /* !NO_SYS */ + +#endif /* LWIP_IPV6 */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/lowpan6_ble.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/lowpan6_ble.c new file mode 100644 index 0000000000000000000000000000000000000000..d89816d3b049c58ea7057f83065ac47e5752e3da --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/lowpan6_ble.c @@ -0,0 +1,447 @@ +/** + * @file + * 6LowPAN over BLE output for IPv6 (RFC7668). +*/ + +/* + * Copyright (c) 2017 Benjamin Aigner + * Copyright (c) 2015 Inico Technologies Ltd. , Author: Ivan Delamer + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * Author: Benjamin Aigner + * + * Based on the original 6lowpan implementation of lwIP ( @see 6lowpan.c) + */ + + +/** + * @defgroup rfc7668if 6LoWPAN over BLE (RFC7668) + * @ingroup netifs + * This file implements a RFC7668 implementation for 6LoWPAN over + * Bluetooth Low Energy. The specification is very similar to 6LoWPAN, + * so most of the code is re-used. + * Compared to 6LoWPAN, much functionality is already implemented in + * lower BLE layers (fragmenting, session management,...). + * + * Usage: + * - add this netif + * - don't add IPv4 addresses (no IPv4 support in RFC7668), pass 'NULL','NULL','NULL' + * - use the BLE to EUI64 conversation util to create an IPv6 link-local address from the BLE MAC (@ref ble_addr_to_eui64) + * - input function: @ref rfc7668_input + * - set the link output function, which transmits output data to an established L2CAP channel + * - If data arrives (HCI event "L2CAP_DATA_PACKET"): + * - allocate a @ref PBUF_RAW buffer + * - let the pbuf struct point to the incoming data or copy it to the buffer + * - call netif->input + * + * @todo: + * - further testing + * - support compression contexts + * - support multiple addresses + * - support multicast + * - support neighbor discovery + */ + + +#include "netif/lowpan6_ble.h" + +#if LWIP_IPV6 + +#include "lwip/ip.h" +#include "lwip/pbuf.h" +#include "lwip/ip_addr.h" +#include "lwip/netif.h" +#include "lwip/nd6.h" +#include "lwip/mem.h" +#include "lwip/udp.h" +#include "lwip/tcpip.h" +#include "lwip/snmp.h" + +#include + +#if LWIP_6LOWPAN_NUM_CONTEXTS > 0 +/** context memory, containing IPv6 addresses */ +static ip6_addr_t rfc7668_context[LWIP_6LOWPAN_NUM_CONTEXTS]; +#else +#define rfc7668_context NULL +#endif + +static struct lowpan6_link_addr rfc7668_local_addr; +static struct lowpan6_link_addr rfc7668_peer_addr; + +/** + * @ingroup rfc7668if + * convert BT address to EUI64 addr + * + * This method converts a Bluetooth MAC address to an EUI64 address, + * which is used within IPv6 communication + * + * @param dst IPv6 destination space + * @param src BLE MAC address source + * @param public_addr If the LWIP_RFC7668_LINUX_WORKAROUND_PUBLIC_ADDRESS + * option is set, bit 0x02 will be set if param=0 (no public addr); cleared otherwise + * + * @see LWIP_RFC7668_LINUX_WORKAROUND_PUBLIC_ADDRESS + */ +void +ble_addr_to_eui64(uint8_t *dst, const uint8_t *src, int public_addr) +{ + /* according to RFC7668 ch 3.2.2. */ + memcpy(dst, src, 3); + dst[3] = 0xFF; + dst[4] = 0xFE; + memcpy(&dst[5], &src[3], 3); +#if LWIP_RFC7668_LINUX_WORKAROUND_PUBLIC_ADDRESS + if(public_addr) { + dst[0] &= ~0x02; + } else { + dst[0] |= 0x02; + } +#else + LWIP_UNUSED_ARG(public_addr); +#endif +} + +/** + * @ingroup rfc7668if + * convert EUI64 address to Bluetooth MAC addr + * + * This method converts an EUI64 address to a Bluetooth MAC address, + * + * @param dst BLE MAC address destination + * @param src IPv6 source + * + */ +void +eui64_to_ble_addr(uint8_t *dst, const uint8_t *src) +{ + /* according to RFC7668 ch 3.2.2. */ + memcpy(dst,src,3); + memcpy(&dst[3],&src[5],3); +} + +/** Set an address used for stateful compression. + * This expects an address of 6 or 8 bytes. + */ +static err_t +rfc7668_set_addr(struct lowpan6_link_addr *addr, const u8_t *in_addr, size_t in_addr_len, int is_mac_48, int is_public_addr) +{ + if ((in_addr == NULL) || (addr == NULL)) { + return ERR_VAL; + } + if (is_mac_48) { + if (in_addr_len != 6) { + return ERR_VAL; + } + addr->addr_len = 8; + ble_addr_to_eui64(addr->addr, in_addr, is_public_addr); + } else { + if (in_addr_len != 8) { + return ERR_VAL; + } + addr->addr_len = 8; + memcpy(addr->addr, in_addr, 8); + } + return ERR_OK; +} + + +/** Set the local address used for stateful compression. + * This expects an address of 8 bytes. + */ +err_t +rfc7668_set_local_addr_eui64(struct netif *netif, const u8_t *local_addr, size_t local_addr_len) +{ + /* netif not used for now, the address is stored globally... */ + LWIP_UNUSED_ARG(netif); + return rfc7668_set_addr(&rfc7668_local_addr, local_addr, local_addr_len, 0, 0); +} + +/** Set the local address used for stateful compression. + * This expects an address of 6 bytes. + */ +err_t +rfc7668_set_local_addr_mac48(struct netif *netif, const u8_t *local_addr, size_t local_addr_len, int is_public_addr) +{ + /* netif not used for now, the address is stored globally... */ + LWIP_UNUSED_ARG(netif); + return rfc7668_set_addr(&rfc7668_local_addr, local_addr, local_addr_len, 1, is_public_addr); +} + +/** Set the peer address used for stateful compression. + * This expects an address of 8 bytes. + */ +err_t +rfc7668_set_peer_addr_eui64(struct netif *netif, const u8_t *peer_addr, size_t peer_addr_len) +{ + /* netif not used for now, the address is stored globally... */ + LWIP_UNUSED_ARG(netif); + return rfc7668_set_addr(&rfc7668_peer_addr, peer_addr, peer_addr_len, 0, 0); +} + +/** Set the peer address used for stateful compression. + * This expects an address of 6 bytes. + */ +err_t +rfc7668_set_peer_addr_mac48(struct netif *netif, const u8_t *peer_addr, size_t peer_addr_len, int is_public_addr) +{ + /* netif not used for now, the address is stored globally... */ + LWIP_UNUSED_ARG(netif); + return rfc7668_set_addr(&rfc7668_peer_addr, peer_addr, peer_addr_len, 1, is_public_addr); +} + +/** Encapsulate IPv6 frames for BLE transmission + * + * This method implements the IPv6 header compression: + * *) According to RFC6282 + * *) See Figure 2, contains base format of bit positions + * *) Fragmentation not necessary (done at L2CAP layer of BLE) + * @note Currently the pbuf allocation uses 256 bytes. If longer packets are used (possible due to MTU=1480Bytes), increase it here! + * + * @param p Pbuf struct, containing the payload data + * @param netif Output network interface. Should be of RFC7668 type + * + * @return Same as netif->output. + */ +static err_t +rfc7668_compress(struct netif *netif, struct pbuf *p) +{ + struct pbuf *p_frag; + u16_t remaining_len; + u8_t *buffer; + u8_t lowpan6_header_len; + u8_t hidden_header_len; + err_t err; + + LWIP_ASSERT("lowpan6_frag: netif->linkoutput not set", netif->linkoutput != NULL); + +#if LWIP_6LOWPAN_IPHC + + /* We'll use a dedicated pbuf for building BLE fragments. + * We'll over-allocate it by the bytes saved for header compression. + */ + p_frag = pbuf_alloc(PBUF_RAW, p->tot_len, PBUF_RAM); + if (p_frag == NULL) { + MIB2_STATS_NETIF_INC(netif, ifoutdiscards); + return ERR_MEM; + } + LWIP_ASSERT("this needs a pbuf in one piece", p_frag->len == p_frag->tot_len); + + /* Write IP6 header (with IPHC). */ + buffer = (u8_t*)p_frag->payload; + + err = lowpan6_compress_headers(netif, (u8_t *)p->payload, p->len, buffer, p_frag->len, + &lowpan6_header_len, &hidden_header_len, rfc7668_context, &rfc7668_local_addr, &rfc7668_peer_addr); + if (err != ERR_OK) { + MIB2_STATS_NETIF_INC(netif, ifoutdiscards); + pbuf_free(p_frag); + return err; + } + pbuf_remove_header(p, hidden_header_len); + + /* Calculate remaining packet length */ + remaining_len = p->tot_len; + + /* Copy IPv6 packet */ + pbuf_copy_partial(p, buffer + lowpan6_header_len, remaining_len, 0); + + /* Calculate frame length */ + p_frag->len = p_frag->tot_len = remaining_len + lowpan6_header_len; + + /* send the packet */ + MIB2_STATS_NETIF_ADD(netif, ifoutoctets, p_frag->tot_len); + LWIP_DEBUGF(LWIP_LOWPAN6_DEBUG|LWIP_DBG_TRACE, ("rfc7668_output: sending packet %p\n", (void *)p)); + err = netif->linkoutput(netif, p_frag); + + pbuf_free(p_frag); + + return err; +#else /* LWIP_6LOWPAN_IPHC */ + /* 6LoWPAN over BLE requires IPHC! */ + return ERR_IF; +#endif/* LWIP_6LOWPAN_IPHC */ +} + +/** + * @ingroup rfc7668if + * Set context id IPv6 address + * + * Store one IPv6 address to a given context id. + * + * @param idx Context id + * @param context IPv6 addr for this context + * + * @return ERR_OK (if everything is fine), ERR_ARG (if the context id is out of range), ERR_VAL (if contexts disabled) + */ +err_t +rfc7668_set_context(u8_t idx, const ip6_addr_t *context) +{ +#if LWIP_6LOWPAN_NUM_CONTEXTS > 0 + /* check if the ID is possible */ + if (idx >= LWIP_6LOWPAN_NUM_CONTEXTS) { + return ERR_ARG; + } + /* copy IPv6 address to context storage */ + ip6_addr_set(&rfc7668_context[idx], context); + return ERR_OK; +#else + LWIP_UNUSED_ARG(idx); + LWIP_UNUSED_ARG(context); + return ERR_VAL; +#endif +} + +/** + * @ingroup rfc7668if + * Compress outgoing IPv6 packet and pass it on to netif->linkoutput + * + * @param netif The lwIP network interface which the IP packet will be sent on. + * @param q The pbuf(s) containing the IP packet to be sent. + * @param ip6addr The IP address of the packet destination. + * + * @return See rfc7668_compress + */ +err_t +rfc7668_output(struct netif *netif, struct pbuf *q, const ip6_addr_t *ip6addr) +{ + /* dst ip6addr is not used here, we only have one peer */ + LWIP_UNUSED_ARG(ip6addr); + + return rfc7668_compress(netif, q); +} + +/** + * @ingroup rfc7668if + * Process a received raw payload from an L2CAP channel + * + * @param p the received packet, p->payload pointing to the + * IPv6 header (maybe compressed) + * @param netif the network interface on which the packet was received + * + * @return ERR_OK if everything was fine + */ +err_t +rfc7668_input(struct pbuf * p, struct netif *netif) +{ + u8_t * puc; + + MIB2_STATS_NETIF_ADD(netif, ifinoctets, p->tot_len); + + /* Load first header byte */ + puc = (u8_t*)p->payload; + + /* no IP header compression */ + if (*puc == 0x41) { + LWIP_DEBUGF(LWIP_LOWPAN6_DECOMPRESSION_DEBUG, ("Completed packet, removing dispatch: 0x%2x \n", *puc)); + /* This is a complete IPv6 packet, just skip header byte. */ + pbuf_remove_header(p, 1); + /* IPHC header compression */ + } else if ((*puc & 0xe0 )== 0x60) { + LWIP_DEBUGF(LWIP_LOWPAN6_DECOMPRESSION_DEBUG, ("Completed packet, decompress dispatch: 0x%2x \n", *puc)); + /* IPv6 headers are compressed using IPHC. */ + p = lowpan6_decompress(p, 0, rfc7668_context, &rfc7668_peer_addr, &rfc7668_local_addr); + /* if no pbuf is returned, handle as discarded packet */ + if (p == NULL) { + MIB2_STATS_NETIF_INC(netif, ifindiscards); + return ERR_OK; + } + /* invalid header byte, discard */ + } else { + LWIP_DEBUGF(LWIP_LOWPAN6_DECOMPRESSION_DEBUG, ("Completed packet, discarding: 0x%2x \n", *puc)); + MIB2_STATS_NETIF_INC(netif, ifindiscards); + pbuf_free(p); + return ERR_OK; + } + /* @todo: distinguish unicast/multicast */ + MIB2_STATS_NETIF_INC(netif, ifinucastpkts); + +#if LWIP_RFC7668_IP_UNCOMPRESSED_DEBUG + { + u16_t i; + LWIP_DEBUGF(LWIP_RFC7668_IP_UNCOMPRESSED_DEBUG, ("IPv6 payload:\n")); + for (i = 0; i < p->len; i++) { + if ((i%4)==0) { + LWIP_DEBUGF(LWIP_RFC7668_IP_UNCOMPRESSED_DEBUG, ("\n")); + } + LWIP_DEBUGF(LWIP_RFC7668_IP_UNCOMPRESSED_DEBUG, ("%2X ", *((uint8_t *)p->payload+i))); + } + LWIP_DEBUGF(LWIP_RFC7668_IP_UNCOMPRESSED_DEBUG, ("\np->len: %d\n", p->len)); + } +#endif + /* pass data to ip6_input */ + return ip6_input(p, netif); +} + +/** + * @ingroup rfc7668if + * Initialize the netif + * + * No flags are used (broadcast not possible, not ethernet, ...) + * The shortname for this netif is "BT" + * + * @param netif the network interface to be initialized as RFC7668 netif + * + * @return ERR_OK if everything went fine + */ +err_t +rfc7668_if_init(struct netif *netif) +{ + netif->name[0] = 'b'; + netif->name[1] = 't'; + /* local function as IPv6 output */ + netif->output_ip6 = rfc7668_output; + + MIB2_INIT_NETIF(netif, snmp_ifType_other, 0); + + /* maximum transfer unit, set according to RFC7668 ch2.4 */ + netif->mtu = 1280; + + /* no flags set (no broadcast, ethernet,...)*/ + netif->flags = 0; + + /* everything fine */ + return ERR_OK; +} + +#if !NO_SYS +/** + * Pass a received packet to tcpip_thread for input processing + * + * @param p the received packet, p->payload pointing to the + * IEEE 802.15.4 header. + * @param inp the network interface on which the packet was received + * + * @return see @ref tcpip_inpkt, same return values + */ +err_t +tcpip_rfc7668_input(struct pbuf *p, struct netif *inp) +{ + /* send data to upper layer, return the result */ + return tcpip_inpkt(p, inp, rfc7668_input); +} +#endif /* !NO_SYS */ + +#endif /* LWIP_IPV6 */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/lowpan6_common.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/lowpan6_common.c new file mode 100644 index 0000000000000000000000000000000000000000..baea206a7135b13580ff99ab8e0ed90b4144d8e9 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/lowpan6_common.c @@ -0,0 +1,841 @@ +/** + * @file + * + * Common 6LowPAN routines for IPv6. Uses ND tables for link-layer addressing. Fragments packets to 6LowPAN units. + * + * This implementation aims to conform to IEEE 802.15.4(-2015), RFC 4944 and RFC 6282. + * @todo: RFC 6775. + */ + +/* + * Copyright (c) 2015 Inico Technologies Ltd. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Ivan Delamer + * + * + * Please coordinate changes and requests with Ivan Delamer + * + */ + +/** + * @defgroup sixlowpan 6LoWPAN (RFC4944) + * @ingroup netifs + * 6LowPAN netif implementation + */ + +#include "netif/lowpan6_common.h" + +#if LWIP_IPV6 + +#include "lwip/ip.h" +#include "lwip/pbuf.h" +#include "lwip/ip_addr.h" +#include "lwip/netif.h" +#include "lwip/udp.h" + +#include + +/* Determine compression mode for unicast address. */ +s8_t +lowpan6_get_address_mode(const ip6_addr_t *ip6addr, const struct lowpan6_link_addr *mac_addr) +{ + if (mac_addr->addr_len == 2) { + if ((ip6addr->addr[2] == (u32_t)PP_HTONL(0x000000ff)) && + ((ip6addr->addr[3] & PP_HTONL(0xffff0000)) == PP_NTOHL(0xfe000000))) { + if ((ip6addr->addr[3] & PP_HTONL(0x0000ffff)) == lwip_ntohl((mac_addr->addr[0] << 8) | mac_addr->addr[1])) { + return 3; + } + } + } else if (mac_addr->addr_len == 8) { + if ((ip6addr->addr[2] == lwip_ntohl(((mac_addr->addr[0] ^ 2) << 24) | (mac_addr->addr[1] << 16) | mac_addr->addr[2] << 8 | mac_addr->addr[3])) && + (ip6addr->addr[3] == lwip_ntohl((mac_addr->addr[4] << 24) | (mac_addr->addr[5] << 16) | mac_addr->addr[6] << 8 | mac_addr->addr[7]))) { + return 3; + } + } + + if ((ip6addr->addr[2] == PP_HTONL(0x000000ffUL)) && + ((ip6addr->addr[3] & PP_HTONL(0xffff0000)) == PP_NTOHL(0xfe000000UL))) { + return 2; + } + + return 1; +} + +#if LWIP_6LOWPAN_IPHC + +/* Determine compression mode for multicast address. */ +static s8_t +lowpan6_get_address_mode_mc(const ip6_addr_t *ip6addr) +{ + if ((ip6addr->addr[0] == PP_HTONL(0xff020000)) && + (ip6addr->addr[1] == 0) && + (ip6addr->addr[2] == 0) && + ((ip6addr->addr[3] & PP_HTONL(0xffffff00)) == 0)) { + return 3; + } else if (((ip6addr->addr[0] & PP_HTONL(0xff00ffff)) == PP_HTONL(0xff000000)) && + (ip6addr->addr[1] == 0)) { + if ((ip6addr->addr[2] == 0) && + ((ip6addr->addr[3] & PP_HTONL(0xff000000)) == 0)) { + return 2; + } else if ((ip6addr->addr[2] & PP_HTONL(0xffffff00)) == 0) { + return 1; + } + } + + return 0; +} + +#if LWIP_6LOWPAN_NUM_CONTEXTS > 0 +static s8_t +lowpan6_context_lookup(const ip6_addr_t *lowpan6_contexts, const ip6_addr_t *ip6addr) +{ + s8_t i; + + for (i = 0; i < LWIP_6LOWPAN_NUM_CONTEXTS; i++) { + if (ip6_addr_netcmp(&lowpan6_contexts[i], ip6addr)) { + return i; + } + } + return -1; +} +#endif /* LWIP_6LOWPAN_NUM_CONTEXTS > 0 */ + +/* + * Compress IPv6 and/or UDP headers. + * */ +err_t +lowpan6_compress_headers(struct netif *netif, u8_t *inbuf, size_t inbuf_size, u8_t *outbuf, size_t outbuf_size, + u8_t *lowpan6_header_len_out, u8_t *hidden_header_len_out, ip6_addr_t *lowpan6_contexts, + const struct lowpan6_link_addr *src, const struct lowpan6_link_addr *dst) +{ + u8_t *buffer, *inptr; + u8_t lowpan6_header_len; + u8_t hidden_header_len = 0; + s8_t i; + struct ip6_hdr *ip6hdr; + ip_addr_t ip6src, ip6dst; + + LWIP_ASSERT("netif != NULL", netif != NULL); + LWIP_ASSERT("inbuf != NULL", inbuf != NULL); + LWIP_ASSERT("outbuf != NULL", outbuf != NULL); + LWIP_ASSERT("lowpan6_header_len_out != NULL", lowpan6_header_len_out != NULL); + LWIP_ASSERT("hidden_header_len_out != NULL", hidden_header_len_out != NULL); + + /* Perform 6LowPAN IPv6 header compression according to RFC 6282 */ + buffer = outbuf; + inptr = inbuf; + + if (inbuf_size < IP6_HLEN) { + /* input buffer too short */ + return ERR_VAL; + } + if (outbuf_size < IP6_HLEN) { + /* output buffer too short for worst case */ + return ERR_MEM; + } + + /* Point to ip6 header and align copies of src/dest addresses. */ + ip6hdr = (struct ip6_hdr *)inptr; + ip_addr_copy_from_ip6_packed(ip6dst, ip6hdr->dest); + ip6_addr_assign_zone(ip_2_ip6(&ip6dst), IP6_UNKNOWN, netif); + ip_addr_copy_from_ip6_packed(ip6src, ip6hdr->src); + ip6_addr_assign_zone(ip_2_ip6(&ip6src), IP6_UNKNOWN, netif); + + /* Basic length of 6LowPAN header, set dispatch and clear fields. */ + lowpan6_header_len = 2; + buffer[0] = 0x60; + buffer[1] = 0; + + /* Determine whether there will be a Context Identifier Extension byte or not. + * If so, set it already. */ +#if LWIP_6LOWPAN_NUM_CONTEXTS > 0 + buffer[2] = 0; + + i = lowpan6_context_lookup(lowpan6_contexts, ip_2_ip6(&ip6src)); + if (i >= 0) { + /* Stateful source address compression. */ + buffer[1] |= 0x40; + buffer[2] |= (i & 0x0f) << 4; + } + + i = lowpan6_context_lookup(lowpan6_contexts, ip_2_ip6(&ip6dst)); + if (i >= 0) { + /* Stateful destination address compression. */ + buffer[1] |= 0x04; + buffer[2] |= i & 0x0f; + } + + if (buffer[2] != 0x00) { + /* Context identifier extension byte is appended. */ + buffer[1] |= 0x80; + lowpan6_header_len++; + } +#else /* LWIP_6LOWPAN_NUM_CONTEXTS > 0 */ + LWIP_UNUSED_ARG(lowpan6_contexts); +#endif /* LWIP_6LOWPAN_NUM_CONTEXTS > 0 */ + + /* Determine TF field: Traffic Class, Flow Label */ + if (IP6H_FL(ip6hdr) == 0) { + /* Flow label is elided. */ + buffer[0] |= 0x10; + if (IP6H_TC(ip6hdr) == 0) { + /* Traffic class (ECN+DSCP) elided too. */ + buffer[0] |= 0x08; + } else { + /* Traffic class (ECN+DSCP) appended. */ + buffer[lowpan6_header_len++] = IP6H_TC(ip6hdr); + } + } else { + if (((IP6H_TC(ip6hdr) & 0x3f) == 0)) { + /* DSCP portion of Traffic Class is elided, ECN and FL are appended (3 bytes) */ + buffer[0] |= 0x08; + + buffer[lowpan6_header_len] = IP6H_TC(ip6hdr) & 0xc0; + buffer[lowpan6_header_len++] |= (IP6H_FL(ip6hdr) >> 16) & 0x0f; + buffer[lowpan6_header_len++] = (IP6H_FL(ip6hdr) >> 8) & 0xff; + buffer[lowpan6_header_len++] = IP6H_FL(ip6hdr) & 0xff; + } else { + /* Traffic class and flow label are appended (4 bytes) */ + buffer[lowpan6_header_len++] = IP6H_TC(ip6hdr); + buffer[lowpan6_header_len++] = (IP6H_FL(ip6hdr) >> 16) & 0x0f; + buffer[lowpan6_header_len++] = (IP6H_FL(ip6hdr) >> 8) & 0xff; + buffer[lowpan6_header_len++] = IP6H_FL(ip6hdr) & 0xff; + } + } + + /* Compress NH? + * Only if UDP for now. @todo support other NH compression. */ + if (IP6H_NEXTH(ip6hdr) == IP6_NEXTH_UDP) { + buffer[0] |= 0x04; + } else { + /* append nexth. */ + buffer[lowpan6_header_len++] = IP6H_NEXTH(ip6hdr); + } + + /* Compress hop limit? */ + if (IP6H_HOPLIM(ip6hdr) == 255) { + buffer[0] |= 0x03; + } else if (IP6H_HOPLIM(ip6hdr) == 64) { + buffer[0] |= 0x02; + } else if (IP6H_HOPLIM(ip6hdr) == 1) { + buffer[0] |= 0x01; + } else { + /* append hop limit */ + buffer[lowpan6_header_len++] = IP6H_HOPLIM(ip6hdr); + } + + /* Compress source address */ + if (((buffer[1] & 0x40) != 0) || + (ip6_addr_islinklocal(ip_2_ip6(&ip6src)))) { + /* Context-based or link-local source address compression. */ + i = lowpan6_get_address_mode(ip_2_ip6(&ip6src), src); + buffer[1] |= (i & 0x03) << 4; + if (i == 1) { + MEMCPY(buffer + lowpan6_header_len, inptr + 16, 8); + lowpan6_header_len += 8; + } else if (i == 2) { + MEMCPY(buffer + lowpan6_header_len, inptr + 22, 2); + lowpan6_header_len += 2; + } + } else if (ip6_addr_isany(ip_2_ip6(&ip6src))) { + /* Special case: mark SAC and leave SAM=0 */ + buffer[1] |= 0x40; + } else { + /* Append full address. */ + MEMCPY(buffer + lowpan6_header_len, inptr + 8, 16); + lowpan6_header_len += 16; + } + + /* Compress destination address */ + if (ip6_addr_ismulticast(ip_2_ip6(&ip6dst))) { + /* @todo support stateful multicast address compression */ + + buffer[1] |= 0x08; + + i = lowpan6_get_address_mode_mc(ip_2_ip6(&ip6dst)); + buffer[1] |= i & 0x03; + if (i == 0) { + MEMCPY(buffer + lowpan6_header_len, inptr + 24, 16); + lowpan6_header_len += 16; + } else if (i == 1) { + buffer[lowpan6_header_len++] = inptr[25]; + MEMCPY(buffer + lowpan6_header_len, inptr + 35, 5); + lowpan6_header_len += 5; + } else if (i == 2) { + buffer[lowpan6_header_len++] = inptr[25]; + MEMCPY(buffer + lowpan6_header_len, inptr + 37, 3); + lowpan6_header_len += 3; + } else if (i == 3) { + buffer[lowpan6_header_len++] = (inptr)[39]; + } + } else if (((buffer[1] & 0x04) != 0) || + (ip6_addr_islinklocal(ip_2_ip6(&ip6dst)))) { + /* Context-based or link-local destination address compression. */ + i = lowpan6_get_address_mode(ip_2_ip6(&ip6dst), dst); + buffer[1] |= i & 0x03; + if (i == 1) { + MEMCPY(buffer + lowpan6_header_len, inptr + 32, 8); + lowpan6_header_len += 8; + } else if (i == 2) { + MEMCPY(buffer + lowpan6_header_len, inptr + 38, 2); + lowpan6_header_len += 2; + } + } else { + /* Append full address. */ + MEMCPY(buffer + lowpan6_header_len, inptr + 24, 16); + lowpan6_header_len += 16; + } + + /* Move to payload. */ + inptr += IP6_HLEN; + hidden_header_len += IP6_HLEN; + +#if LWIP_UDP + /* Compress UDP header? */ + if (IP6H_NEXTH(ip6hdr) == IP6_NEXTH_UDP) { + /* @todo support optional checksum compression */ + + if (inbuf_size < IP6_HLEN + UDP_HLEN) { + /* input buffer too short */ + return ERR_VAL; + } + if (outbuf_size < (size_t)(hidden_header_len + 7)) { + /* output buffer too short for worst case */ + return ERR_MEM; + } + + buffer[lowpan6_header_len] = 0xf0; + + /* determine port compression mode. */ + if ((inptr[0] == 0xf0) && ((inptr[1] & 0xf0) == 0xb0) && + (inptr[2] == 0xf0) && ((inptr[3] & 0xf0) == 0xb0)) { + /* Compress source and dest ports. */ + buffer[lowpan6_header_len++] |= 0x03; + buffer[lowpan6_header_len++] = ((inptr[1] & 0x0f) << 4) | (inptr[3] & 0x0f); + } else if (inptr[0] == 0xf0) { + /* Compress source port. */ + buffer[lowpan6_header_len++] |= 0x02; + buffer[lowpan6_header_len++] = inptr[1]; + buffer[lowpan6_header_len++] = inptr[2]; + buffer[lowpan6_header_len++] = inptr[3]; + } else if (inptr[2] == 0xf0) { + /* Compress dest port. */ + buffer[lowpan6_header_len++] |= 0x01; + buffer[lowpan6_header_len++] = inptr[0]; + buffer[lowpan6_header_len++] = inptr[1]; + buffer[lowpan6_header_len++] = inptr[3]; + } else { + /* append full ports. */ + lowpan6_header_len++; + buffer[lowpan6_header_len++] = inptr[0]; + buffer[lowpan6_header_len++] = inptr[1]; + buffer[lowpan6_header_len++] = inptr[2]; + buffer[lowpan6_header_len++] = inptr[3]; + } + + /* elide length and copy checksum */ + buffer[lowpan6_header_len++] = inptr[6]; + buffer[lowpan6_header_len++] = inptr[7]; + + hidden_header_len += UDP_HLEN; + } +#endif /* LWIP_UDP */ + + *lowpan6_header_len_out = lowpan6_header_len; + *hidden_header_len_out = hidden_header_len; + + return ERR_OK; +} + +/** Decompress IPv6 and UDP headers compressed according to RFC 6282 + * + * @param lowpan6_buffer compressed headers, first byte is the dispatch byte + * @param lowpan6_bufsize size of lowpan6_buffer (may include data after headers) + * @param decomp_buffer buffer where the decompressed headers are stored + * @param decomp_bufsize size of decomp_buffer + * @param hdr_size_comp returns the size of the compressed headers (skip to get to data) + * @param hdr_size_decomp returns the size of the decompressed headers (IPv6 + UDP) + * @param datagram_size datagram size from fragments or 0 if unfragmented + * @param compressed_size compressed datagram size (for unfragmented rx) + * @param lowpan6_contexts context addresses + * @param src source address of the outer layer, used for address compression + * @param dest destination address of the outer layer, used for address compression + * @return ERR_OK if decompression succeeded, an error otherwise + */ +static err_t +lowpan6_decompress_hdr(u8_t *lowpan6_buffer, size_t lowpan6_bufsize, + u8_t *decomp_buffer, size_t decomp_bufsize, + u16_t *hdr_size_comp, u16_t *hdr_size_decomp, + u16_t datagram_size, u16_t compressed_size, + ip6_addr_t *lowpan6_contexts, + struct lowpan6_link_addr *src, struct lowpan6_link_addr *dest) +{ + u16_t lowpan6_offset; + struct ip6_hdr *ip6hdr; + s8_t i; + u32_t header_temp; + u16_t ip6_offset = IP6_HLEN; + + LWIP_ASSERT("lowpan6_buffer != NULL", lowpan6_buffer != NULL); + LWIP_ASSERT("decomp_buffer != NULL", decomp_buffer != NULL); + LWIP_ASSERT("src != NULL", src != NULL); + LWIP_ASSERT("dest != NULL", dest != NULL); + LWIP_ASSERT("hdr_size_comp != NULL", hdr_size_comp != NULL); + LWIP_ASSERT("dehdr_size_decompst != NULL", hdr_size_decomp != NULL); + + ip6hdr = (struct ip6_hdr *)decomp_buffer; + if (decomp_bufsize < IP6_HLEN) { + return ERR_MEM; + } + + /* output the full compressed packet, if set in @see lowpan6_opts.h */ +#if LWIP_LOWPAN6_IP_COMPRESSED_DEBUG + { + u16_t j; + LWIP_DEBUGF(LWIP_LOWPAN6_IP_COMPRESSED_DEBUG, ("lowpan6_decompress_hdr: IP6 payload (compressed): \n")); + for (j = 0; j < lowpan6_bufsize; j++) { + if ((j % 4) == 0) { + LWIP_DEBUGF(LWIP_LOWPAN6_IP_COMPRESSED_DEBUG, ("\n")); + } + LWIP_DEBUGF(LWIP_LOWPAN6_IP_COMPRESSED_DEBUG, ("%2X ", lowpan6_buffer[j])); + } + LWIP_DEBUGF(LWIP_LOWPAN6_IP_COMPRESSED_DEBUG, ("\np->len: %d", lowpan6_bufsize)); + } +#endif + + /* offset for inline IP headers (RFC 6282 ch3)*/ + lowpan6_offset = 2; + /* if CID is set (context identifier), the context byte + * follows immediately after the header, so other IPHC fields are @+3 */ + if (lowpan6_buffer[1] & 0x80) { + lowpan6_offset++; + } + + /* Set IPv6 version, traffic class and flow label. (RFC6282, ch 3.1.1.)*/ + if ((lowpan6_buffer[0] & 0x18) == 0x00) { + header_temp = ((lowpan6_buffer[lowpan6_offset+1] & 0x0f) << 16) | \ + (lowpan6_buffer[lowpan6_offset + 2] << 8) | lowpan6_buffer[lowpan6_offset+3]; + LWIP_DEBUGF(LWIP_LOWPAN6_DECOMPRESSION_DEBUG, ("TF: 00, ECN: 0x%2x, Flowlabel+DSCP: 0x%8X\n", \ + lowpan6_buffer[lowpan6_offset],header_temp)); + IP6H_VTCFL_SET(ip6hdr, 6, lowpan6_buffer[lowpan6_offset], header_temp); + /* increase offset, processed 4 bytes here: + * TF=00: ECN + DSCP + 4-bit Pad + Flow Label (4 bytes)*/ + lowpan6_offset += 4; + } else if ((lowpan6_buffer[0] & 0x18) == 0x08) { + header_temp = ((lowpan6_buffer[lowpan6_offset] & 0x0f) << 16) | (lowpan6_buffer[lowpan6_offset + 1] << 8) | lowpan6_buffer[lowpan6_offset+2]; + LWIP_DEBUGF(LWIP_LOWPAN6_DECOMPRESSION_DEBUG, ("TF: 01, ECN: 0x%2x, Flowlabel: 0x%2X, DSCP ignored\n", \ + lowpan6_buffer[lowpan6_offset] & 0xc0,header_temp)); + IP6H_VTCFL_SET(ip6hdr, 6, lowpan6_buffer[lowpan6_offset] & 0xc0, header_temp); + /* increase offset, processed 3 bytes here: + * TF=01: ECN + 2-bit Pad + Flow Label (3 bytes), DSCP is elided.*/ + lowpan6_offset += 3; + } else if ((lowpan6_buffer[0] & 0x18) == 0x10) { + LWIP_DEBUGF(LWIP_LOWPAN6_DECOMPRESSION_DEBUG, ("TF: 10, DCSP+ECN: 0x%2x, Flowlabel ignored\n", lowpan6_buffer[lowpan6_offset])); + IP6H_VTCFL_SET(ip6hdr, 6, lowpan6_buffer[lowpan6_offset],0); + /* increase offset, processed 1 byte here: + * ECN + DSCP (1 byte), Flow Label is elided.*/ + lowpan6_offset += 1; + } else if ((lowpan6_buffer[0] & 0x18) == 0x18) { + LWIP_DEBUGF(LWIP_LOWPAN6_DECOMPRESSION_DEBUG, ("TF: 11, DCSP/ECN & Flowlabel ignored\n")); + /* don't increase offset, no bytes processed here */ + IP6H_VTCFL_SET(ip6hdr, 6, 0, 0); + } + + /* Set Next Header (NH) */ + if ((lowpan6_buffer[0] & 0x04) == 0x00) { + /* 0: full next header byte carried inline (increase offset)*/ + LWIP_DEBUGF(LWIP_LOWPAN6_DECOMPRESSION_DEBUG, ("NH: 0x%2X\n", lowpan6_buffer[lowpan6_offset+1])); + IP6H_NEXTH_SET(ip6hdr, lowpan6_buffer[lowpan6_offset++]); + } else { + /* 1: NH compression, LOWPAN_NHC (RFC6282, ch 4.1) */ + /* We should fill this later with NHC decoding */ + LWIP_DEBUGF(LWIP_LOWPAN6_DECOMPRESSION_DEBUG, ("NH: skipped, later done with NHC\n")); + IP6H_NEXTH_SET(ip6hdr, 0); + } + + /* Set Hop Limit, either carried inline or 3 different hops (1,64,255) */ + if ((lowpan6_buffer[0] & 0x03) == 0x00) { + LWIP_DEBUGF(LWIP_LOWPAN6_DECOMPRESSION_DEBUG, ("Hops: full value: %d\n", lowpan6_buffer[lowpan6_offset+1])); + IP6H_HOPLIM_SET(ip6hdr, lowpan6_buffer[lowpan6_offset++]); + } else if ((lowpan6_buffer[0] & 0x03) == 0x01) { + LWIP_DEBUGF(LWIP_LOWPAN6_DECOMPRESSION_DEBUG, ("Hops: compressed: 1\n")); + IP6H_HOPLIM_SET(ip6hdr, 1); + } else if ((lowpan6_buffer[0] & 0x03) == 0x02) { + LWIP_DEBUGF(LWIP_LOWPAN6_DECOMPRESSION_DEBUG, ("Hops: compressed: 64\n")); + IP6H_HOPLIM_SET(ip6hdr, 64); + } else if ((lowpan6_buffer[0] & 0x03) == 0x03) { + LWIP_DEBUGF(LWIP_LOWPAN6_DECOMPRESSION_DEBUG, ("Hops: compressed: 255\n")); + IP6H_HOPLIM_SET(ip6hdr, 255); + } + + /* Source address decoding. */ + if ((lowpan6_buffer[1] & 0x40) == 0x00) { + /* Source address compression (SAC) = 0 -> stateless compression */ + LWIP_DEBUGF(LWIP_LOWPAN6_DECOMPRESSION_DEBUG, ("SAC == 0, no context byte\n")); + /* Stateless compression */ + if ((lowpan6_buffer[1] & 0x30) == 0x00) { + LWIP_DEBUGF(LWIP_LOWPAN6_DECOMPRESSION_DEBUG, ("SAM == 00, no src compression, fetching 128bits inline\n")); + /* copy full address, increase offset by 16 Bytes */ + MEMCPY(&ip6hdr->src.addr[0], lowpan6_buffer + lowpan6_offset, 16); + lowpan6_offset += 16; + } else if ((lowpan6_buffer[1] & 0x30) == 0x10) { + LWIP_DEBUGF(LWIP_LOWPAN6_DECOMPRESSION_DEBUG, ("SAM == 01, src compression, 64bits inline\n")); + /* set 64 bits to link local */ + ip6hdr->src.addr[0] = PP_HTONL(0xfe800000UL); + ip6hdr->src.addr[1] = 0; + /* copy 8 Bytes, increase offset */ + MEMCPY(&ip6hdr->src.addr[2], lowpan6_buffer + lowpan6_offset, 8); + lowpan6_offset += 8; + } else if ((lowpan6_buffer[1] & 0x30) == 0x20) { + LWIP_DEBUGF(LWIP_LOWPAN6_DECOMPRESSION_DEBUG, ("SAM == 10, src compression, 16bits inline\n")); + /* set 96 bits to link local */ + ip6hdr->src.addr[0] = PP_HTONL(0xfe800000UL); + ip6hdr->src.addr[1] = 0; + ip6hdr->src.addr[2] = PP_HTONL(0x000000ffUL); + /* extract remaining 16bits from inline bytes, increase offset */ + ip6hdr->src.addr[3] = lwip_htonl(0xfe000000UL | (lowpan6_buffer[lowpan6_offset] << 8) | + lowpan6_buffer[lowpan6_offset + 1]); + lowpan6_offset += 2; + } else if ((lowpan6_buffer[1] & 0x30) == 0x30) { + LWIP_DEBUGF(LWIP_LOWPAN6_DECOMPRESSION_DEBUG, ("SAM == 11, src compression, 0bits inline, using other headers\n")); + /* no information avalaible, using other layers, see RFC6282 ch 3.2.2 */ + ip6hdr->src.addr[0] = PP_HTONL(0xfe800000UL); + ip6hdr->src.addr[1] = 0; + if (src->addr_len == 2) { + ip6hdr->src.addr[2] = PP_HTONL(0x000000ffUL); + ip6hdr->src.addr[3] = lwip_htonl(0xfe000000UL | (src->addr[0] << 8) | src->addr[1]); + } else if (src->addr_len == 8) { + ip6hdr->src.addr[2] = lwip_htonl(((src->addr[0] ^ 2) << 24) | (src->addr[1] << 16) | + (src->addr[2] << 8) | src->addr[3]); + ip6hdr->src.addr[3] = lwip_htonl((src->addr[4] << 24) | (src->addr[5] << 16) | + (src->addr[6] << 8) | src->addr[7]); + } else { + /* invalid source address length */ + LWIP_DEBUGF(LWIP_LOWPAN6_DECOMPRESSION_DEBUG, ("Invalid source address length\n")); + return ERR_VAL; + } + } + } else { + /* Source address compression (SAC) = 1 -> stateful/context-based compression */ + LWIP_DEBUGF(LWIP_LOWPAN6_DECOMPRESSION_DEBUG, ("SAC == 1, additional context byte\n")); + if ((lowpan6_buffer[1] & 0x30) == 0x00) { + /* SAM=00, address=> :: (ANY) */ + ip6hdr->src.addr[0] = 0; + ip6hdr->src.addr[1] = 0; + ip6hdr->src.addr[2] = 0; + ip6hdr->src.addr[3] = 0; + LWIP_DEBUGF(LWIP_LOWPAN6_DECOMPRESSION_DEBUG, ("SAM == 00, context compression, ANY (::)\n")); + } else { + /* Set prefix from context info */ + if (lowpan6_buffer[1] & 0x80) { + i = (lowpan6_buffer[2] >> 4) & 0x0f; + } else { + i = 0; + } + if (i >= LWIP_6LOWPAN_NUM_CONTEXTS) { + /* Error */ + return ERR_VAL; + } +#if LWIP_6LOWPAN_NUM_CONTEXTS > 0 + ip6hdr->src.addr[0] = lowpan6_contexts[i].addr[0]; + ip6hdr->src.addr[1] = lowpan6_contexts[i].addr[1]; + LWIP_DEBUGF(LWIP_LOWPAN6_DECOMPRESSION_DEBUG, ("SAM == xx, context compression found @%d: %8X, %8X\n", (int)i, ip6hdr->src.addr[0], ip6hdr->src.addr[1])); +#else + LWIP_UNUSED_ARG(lowpan6_contexts); +#endif + } + + /* determine further address bits */ + if ((lowpan6_buffer[1] & 0x30) == 0x10) { + /* SAM=01, load additional 64bits */ + MEMCPY(&ip6hdr->src.addr[2], lowpan6_buffer + lowpan6_offset, 8); + LWIP_DEBUGF(LWIP_LOWPAN6_DECOMPRESSION_DEBUG, ("SAM == 01, context compression, 64bits inline\n")); + lowpan6_offset += 8; + } else if ((lowpan6_buffer[1] & 0x30) == 0x20) { + /* SAM=01, load additional 16bits */ + ip6hdr->src.addr[2] = PP_HTONL(0x000000ffUL); + ip6hdr->src.addr[3] = lwip_htonl(0xfe000000UL | (lowpan6_buffer[lowpan6_offset] << 8) | lowpan6_buffer[lowpan6_offset + 1]); + LWIP_DEBUGF(LWIP_LOWPAN6_DECOMPRESSION_DEBUG, ("SAM == 10, context compression, 16bits inline\n")); + lowpan6_offset += 2; + } else if ((lowpan6_buffer[1] & 0x30) == 0x30) { + /* SAM=11, address is fully elided, load from other layers */ + LWIP_DEBUGF(LWIP_LOWPAN6_DECOMPRESSION_DEBUG, ("SAM == 11, context compression, 0bits inline, using other headers\n")); + if (src->addr_len == 2) { + ip6hdr->src.addr[2] = PP_HTONL(0x000000ffUL); + ip6hdr->src.addr[3] = lwip_htonl(0xfe000000UL | (src->addr[0] << 8) | src->addr[1]); + } else if (src->addr_len == 8) { + ip6hdr->src.addr[2] = lwip_htonl(((src->addr[0] ^ 2) << 24) | (src->addr[1] << 16) | (src->addr[2] << 8) | src->addr[3]); + ip6hdr->src.addr[3] = lwip_htonl((src->addr[4] << 24) | (src->addr[5] << 16) | (src->addr[6] << 8) | src->addr[7]); + } else { + /* invalid source address length */ + LWIP_DEBUGF(LWIP_LOWPAN6_DECOMPRESSION_DEBUG, ("Invalid source address length\n")); + return ERR_VAL; + } + } + } + + /* Destination address decoding. */ + if (lowpan6_buffer[1] & 0x08) { + LWIP_DEBUGF(LWIP_LOWPAN6_DECOMPRESSION_DEBUG, ("M=1: multicast\n")); + /* Multicast destination */ + if (lowpan6_buffer[1] & 0x04) { + LWIP_DEBUGF(LWIP_DBG_ON,("DAC == 1, context multicast: unsupported!!!\n")); + /* @todo support stateful multicast addressing */ + return ERR_VAL; + } + + if ((lowpan6_buffer[1] & 0x03) == 0x00) { + /* DAM = 00, copy full address (128bits) */ + LWIP_DEBUGF(LWIP_LOWPAN6_DECOMPRESSION_DEBUG, ("DAM == 00, no dst compression, fetching 128bits inline\n")); + MEMCPY(&ip6hdr->dest.addr[0], lowpan6_buffer + lowpan6_offset, 16); + lowpan6_offset += 16; + } else if ((lowpan6_buffer[1] & 0x03) == 0x01) { + /* DAM = 01, copy 4 bytes (32bits) */ + LWIP_DEBUGF(LWIP_LOWPAN6_DECOMPRESSION_DEBUG, ("DAM == 01, dst address form (48bits): ffXX::00XX:XXXX:XXXX\n")); + ip6hdr->dest.addr[0] = lwip_htonl(0xff000000UL | (lowpan6_buffer[lowpan6_offset++] << 16)); + ip6hdr->dest.addr[1] = 0; + ip6hdr->dest.addr[2] = lwip_htonl(lowpan6_buffer[lowpan6_offset++]); + ip6hdr->dest.addr[3] = lwip_htonl((lowpan6_buffer[lowpan6_offset] << 24) | (lowpan6_buffer[lowpan6_offset + 1] << 16) | (lowpan6_buffer[lowpan6_offset + 2] << 8) | lowpan6_buffer[lowpan6_offset + 3]); + lowpan6_offset += 4; + } else if ((lowpan6_buffer[1] & 0x03) == 0x02) { + /* DAM = 10, copy 3 bytes (24bits) */ + LWIP_DEBUGF(LWIP_LOWPAN6_DECOMPRESSION_DEBUG, ("DAM == 10, dst address form (32bits): ffXX::00XX:XXXX\n")); + ip6hdr->dest.addr[0] = lwip_htonl(0xff000000UL | (lowpan6_buffer[lowpan6_offset++] << 16)); + ip6hdr->dest.addr[1] = 0; + ip6hdr->dest.addr[2] = 0; + ip6hdr->dest.addr[3] = lwip_htonl((lowpan6_buffer[lowpan6_offset] << 16) | (lowpan6_buffer[lowpan6_offset + 1] << 8) | lowpan6_buffer[lowpan6_offset + 2]); + lowpan6_offset += 3; + } else if ((lowpan6_buffer[1] & 0x03) == 0x03) { + /* DAM = 11, copy 1 byte (8bits) */ + LWIP_DEBUGF(LWIP_LOWPAN6_DECOMPRESSION_DEBUG, ("DAM == 11, dst address form (8bits): ff02::00XX\n")); + ip6hdr->dest.addr[0] = PP_HTONL(0xff020000UL); + ip6hdr->dest.addr[1] = 0; + ip6hdr->dest.addr[2] = 0; + ip6hdr->dest.addr[3] = lwip_htonl(lowpan6_buffer[lowpan6_offset++]); + } + + } else { + /* no Multicast (M=0) */ + if (lowpan6_buffer[1] & 0x04) { + LWIP_DEBUGF(LWIP_LOWPAN6_DECOMPRESSION_DEBUG, ("DAC == 1, stateful compression\n")); + /* Stateful destination compression */ + /* Set prefix from context info */ + if (lowpan6_buffer[1] & 0x80) { + i = lowpan6_buffer[2] & 0x0f; + } else { + i = 0; + } + if (i >= LWIP_6LOWPAN_NUM_CONTEXTS) { + /* Error */ + return ERR_VAL; + } +#if LWIP_6LOWPAN_NUM_CONTEXTS > 0 + ip6hdr->dest.addr[0] = lowpan6_contexts[i].addr[0]; + ip6hdr->dest.addr[1] = lowpan6_contexts[i].addr[1]; +#endif + } else { + LWIP_DEBUGF(LWIP_LOWPAN6_DECOMPRESSION_DEBUG, ("DAC == 0, stateless compression, setting link local prefix\n")); + /* Link local address compression */ + ip6hdr->dest.addr[0] = PP_HTONL(0xfe800000UL); + ip6hdr->dest.addr[1] = 0; + } + + /* M=0, DAC=0, determining destination address length via DAM=xx */ + if ((lowpan6_buffer[1] & 0x03) == 0x00) { + LWIP_DEBUGF(LWIP_LOWPAN6_DECOMPRESSION_DEBUG, ("DAM == 00, no dst compression, fetching 128bits inline")); + /* DAM=00, copy full address */ + MEMCPY(&ip6hdr->dest.addr[0], lowpan6_buffer + lowpan6_offset, 16); + lowpan6_offset += 16; + } else if ((lowpan6_buffer[1] & 0x03) == 0x01) { + LWIP_DEBUGF(LWIP_LOWPAN6_DECOMPRESSION_DEBUG, ("DAM == 01, dst compression, 64bits inline\n")); + /* DAM=01, copy 64 inline bits, increase offset */ + MEMCPY(&ip6hdr->dest.addr[2], lowpan6_buffer + lowpan6_offset, 8); + lowpan6_offset += 8; + } else if ((lowpan6_buffer[1] & 0x03) == 0x02) { + LWIP_DEBUGF(LWIP_LOWPAN6_DECOMPRESSION_DEBUG, ("DAM == 01, dst compression, 16bits inline\n")); + /* DAM=10, copy 16 inline bits, increase offset */ + ip6hdr->dest.addr[2] = PP_HTONL(0x000000ffUL); + ip6hdr->dest.addr[3] = lwip_htonl(0xfe000000UL | (lowpan6_buffer[lowpan6_offset] << 8) | lowpan6_buffer[lowpan6_offset + 1]); + lowpan6_offset += 2; + } else if ((lowpan6_buffer[1] & 0x03) == 0x03) { + /* DAM=11, no bits available, use other headers (not done here) */ + LWIP_DEBUGF(LWIP_LOWPAN6_DECOMPRESSION_DEBUG,("DAM == 01, dst compression, 0bits inline, using other headers\n")); + if (dest->addr_len == 2) { + ip6hdr->dest.addr[2] = PP_HTONL(0x000000ffUL); + ip6hdr->dest.addr[3] = lwip_htonl(0xfe000000UL | (dest->addr[0] << 8) | dest->addr[1]); + } else if (dest->addr_len == 8) { + ip6hdr->dest.addr[2] = lwip_htonl(((dest->addr[0] ^ 2) << 24) | (dest->addr[1] << 16) | dest->addr[2] << 8 | dest->addr[3]); + ip6hdr->dest.addr[3] = lwip_htonl((dest->addr[4] << 24) | (dest->addr[5] << 16) | dest->addr[6] << 8 | dest->addr[7]); + } else { + /* invalid destination address length */ + LWIP_DEBUGF(LWIP_LOWPAN6_DECOMPRESSION_DEBUG, ("Invalid destination address length\n")); + return ERR_VAL; + } + } + } + + + /* Next Header Compression (NHC) decoding? */ + if (lowpan6_buffer[0] & 0x04) { + LWIP_DEBUGF(LWIP_LOWPAN6_DECOMPRESSION_DEBUG, ("NHC decoding\n")); +#if LWIP_UDP + if ((lowpan6_buffer[lowpan6_offset] & 0xf8) == 0xf0) { + /* NHC: UDP */ + struct udp_hdr *udphdr; + LWIP_DEBUGF(LWIP_LOWPAN6_DECOMPRESSION_DEBUG, ("NHC: UDP\n")); + + /* UDP compression */ + IP6H_NEXTH_SET(ip6hdr, IP6_NEXTH_UDP); + udphdr = (struct udp_hdr *)((u8_t *)decomp_buffer + ip6_offset); + if (decomp_bufsize < IP6_HLEN + UDP_HLEN) { + return ERR_MEM; + } + + /* Checksum decompression */ + if (lowpan6_buffer[lowpan6_offset] & 0x04) { + /* @todo support checksum decompress */ + LWIP_DEBUGF(LWIP_DBG_ON, ("NHC: UDP chechsum decompression UNSUPPORTED\n")); + return ERR_VAL; + } + + /* Decompress ports, according to RFC4944 */ + i = lowpan6_buffer[lowpan6_offset++] & 0x03; + if (i == 0) { + udphdr->src = lwip_htons(lowpan6_buffer[lowpan6_offset] << 8 | lowpan6_buffer[lowpan6_offset + 1]); + udphdr->dest = lwip_htons(lowpan6_buffer[lowpan6_offset + 2] << 8 | lowpan6_buffer[lowpan6_offset + 3]); + lowpan6_offset += 4; + } else if (i == 0x01) { + udphdr->src = lwip_htons(lowpan6_buffer[lowpan6_offset] << 8 | lowpan6_buffer[lowpan6_offset + 1]); + udphdr->dest = lwip_htons(0xf000 | lowpan6_buffer[lowpan6_offset + 2]); + lowpan6_offset += 3; + } else if (i == 0x02) { + udphdr->src = lwip_htons(0xf000 | lowpan6_buffer[lowpan6_offset]); + udphdr->dest = lwip_htons(lowpan6_buffer[lowpan6_offset + 1] << 8 | lowpan6_buffer[lowpan6_offset + 2]); + lowpan6_offset += 3; + } else if (i == 0x03) { + udphdr->src = lwip_htons(0xf0b0 | ((lowpan6_buffer[lowpan6_offset] >> 4) & 0x0f)); + udphdr->dest = lwip_htons(0xf0b0 | (lowpan6_buffer[lowpan6_offset] & 0x0f)); + lowpan6_offset += 1; + } + + udphdr->chksum = lwip_htons(lowpan6_buffer[lowpan6_offset] << 8 | lowpan6_buffer[lowpan6_offset + 1]); + lowpan6_offset += 2; + ip6_offset += UDP_HLEN; + if (datagram_size == 0) { + datagram_size = compressed_size - lowpan6_offset + ip6_offset; + } + udphdr->len = lwip_htons(datagram_size - IP6_HLEN); + + } else +#endif /* LWIP_UDP */ + { + LWIP_DEBUGF(LWIP_DBG_ON,("NHC: unsupported protocol!\n")); + /* @todo support NHC other than UDP */ + return ERR_VAL; + } + } + if (datagram_size == 0) { + datagram_size = compressed_size - lowpan6_offset + ip6_offset; + } + /* Infer IPv6 payload length for header */ + IP6H_PLEN_SET(ip6hdr, datagram_size - IP6_HLEN); + + if (lowpan6_offset > lowpan6_bufsize) { + /* input buffer overflow */ + return ERR_VAL; + } + *hdr_size_comp = lowpan6_offset; + *hdr_size_decomp = ip6_offset; + + return ERR_OK; +} + +struct pbuf * +lowpan6_decompress(struct pbuf *p, u16_t datagram_size, ip6_addr_t *lowpan6_contexts, + struct lowpan6_link_addr *src, struct lowpan6_link_addr *dest) +{ + struct pbuf *q; + u16_t lowpan6_offset, ip6_offset; + err_t err; + +#if LWIP_UDP +#define UDP_HLEN_ALLOC UDP_HLEN +#else +#define UDP_HLEN_ALLOC 0 +#endif + + /* Allocate a buffer for decompression. This buffer will be too big and will be + trimmed once the final size is known. */ + q = pbuf_alloc(PBUF_IP, p->len + IP6_HLEN + UDP_HLEN_ALLOC, PBUF_POOL); + if (q == NULL) { + pbuf_free(p); + return NULL; + } + if (q->len < IP6_HLEN + UDP_HLEN_ALLOC) { + /* The headers need to fit into the first pbuf */ + pbuf_free(p); + pbuf_free(q); + return NULL; + } + + /* Decompress the IPv6 (and possibly UDP) header(s) into the new pbuf */ + err = lowpan6_decompress_hdr((u8_t *)p->payload, p->len, (u8_t *)q->payload, q->len, + &lowpan6_offset, &ip6_offset, datagram_size, p->tot_len, lowpan6_contexts, src, dest); + if (err != ERR_OK) { + pbuf_free(p); + pbuf_free(q); + return NULL; + } + + /* Now we copy leftover contents from p to q, so we have all L2 and L3 headers + (and L4?) in a single pbuf: */ + + /* Hide the compressed headers in p */ + pbuf_remove_header(p, lowpan6_offset); + /* Temporarily hide the headers in q... */ + pbuf_remove_header(q, ip6_offset); + /* ... copy the rest of p into q... */ + pbuf_copy(q, p); + /* ... and reveal the headers again... */ + pbuf_add_header_force(q, ip6_offset); + /* ... trim the pbuf to its correct size... */ + pbuf_realloc(q, ip6_offset + p->len); + /* ... and cat possibly remaining (data-only) pbufs */ + if (p->next != NULL) { + pbuf_cat(q, p->next); + } + /* the original (first) pbuf can now be freed */ + p->next = NULL; + pbuf_free(p); + + /* all done */ + return q; +} + +#endif /* LWIP_6LOWPAN_IPHC */ +#endif /* LWIP_IPV6 */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/auth.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/auth.c new file mode 100644 index 0000000000000000000000000000000000000000..c8673ad0fb7cdc0f139074daffd7bd70ec899680 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/auth.c @@ -0,0 +1,2510 @@ +/* + * auth.c - PPP authentication and phase control. + * + * Copyright (c) 1993-2002 Paul Mackerras. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. The name(s) of the authors of this software must not be used to + * endorse or promote products derived from this software without + * prior written permission. + * + * 3. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by Paul Mackerras + * ". + * + * THE AUTHORS OF THIS SOFTWARE DISCLAIM ALL WARRANTIES WITH REGARD TO + * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY + * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * Derived from main.c, which is: + * + * Copyright (c) 1984-2000 Carnegie Mellon University. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The name "Carnegie Mellon University" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For permission or any legal + * details, please contact + * Office of Technology Transfer + * Carnegie Mellon University + * 5000 Forbes Avenue + * Pittsburgh, PA 15213-3890 + * (412) 268-4387, fax: (412) 268-7395 + * tech-transfer@andrew.cmu.edu + * + * 4. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by Computing Services + * at Carnegie Mellon University (http://www.cmu.edu/computing/)." + * + * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO + * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE + * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include "netif/ppp/ppp_opts.h" +#if PPP_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +#if 0 /* UNUSED */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#if defined(_PATH_LASTLOG) && defined(__linux__) +#include +#endif + +#include +#include +#include + +#ifdef HAS_SHADOW +#include +#ifndef PW_PPP +#define PW_PPP PW_LOGIN +#endif +#endif + +#include +#endif /* UNUSED */ + +#include "netif/ppp/ppp_impl.h" + +#include "netif/ppp/fsm.h" +#include "netif/ppp/lcp.h" +#if CCP_SUPPORT +#include "netif/ppp/ccp.h" +#endif /* CCP_SUPPORT */ +#if ECP_SUPPORT +#include "netif/ppp/ecp.h" +#endif /* ECP_SUPPORT */ +#include "netif/ppp/ipcp.h" +#if PAP_SUPPORT +#include "netif/ppp/upap.h" +#endif /* PAP_SUPPORT */ +#if CHAP_SUPPORT +#include "netif/ppp/chap-new.h" +#endif /* CHAP_SUPPORT */ +#if EAP_SUPPORT +#include "netif/ppp/eap.h" +#endif /* EAP_SUPPORT */ +#if CBCP_SUPPORT +#include "netif/ppp/cbcp.h" +#endif + +#if 0 /* UNUSED */ +#include "session.h" +#endif /* UNUSED */ + +#if 0 /* UNUSED */ +/* Bits in scan_authfile return value */ +#define NONWILD_SERVER 1 +#define NONWILD_CLIENT 2 + +#define ISWILD(word) (word[0] == '*' && word[1] == 0) +#endif /* UNUSED */ + +#if 0 /* UNUSED */ +/* List of addresses which the peer may use. */ +static struct permitted_ip *addresses[NUM_PPP]; + +/* Wordlist giving addresses which the peer may use + without authenticating itself. */ +static struct wordlist *noauth_addrs; + +/* Remote telephone number, if available */ +char remote_number[MAXNAMELEN]; + +/* Wordlist giving remote telephone numbers which may connect. */ +static struct wordlist *permitted_numbers; + +/* Extra options to apply, from the secrets file entry for the peer. */ +static struct wordlist *extra_options; +#endif /* UNUSED */ + +#if 0 /* UNUSED */ +/* Set if we require authentication only because we have a default route. */ +static bool default_auth; + +/* Hook to enable a plugin to control the idle time limit */ +int (*idle_time_hook) (struct ppp_idle *) = NULL; + +/* Hook for a plugin to say whether we can possibly authenticate any peer */ +int (*pap_check_hook) (void) = NULL; + +/* Hook for a plugin to check the PAP user and password */ +int (*pap_auth_hook) (char *user, char *passwd, char **msgp, + struct wordlist **paddrs, + struct wordlist **popts) = NULL; + +/* Hook for a plugin to know about the PAP user logout */ +void (*pap_logout_hook) (void) = NULL; + +/* Hook for a plugin to get the PAP password for authenticating us */ +int (*pap_passwd_hook) (char *user, char *passwd) = NULL; + +/* Hook for a plugin to say if we can possibly authenticate a peer using CHAP */ +int (*chap_check_hook) (void) = NULL; + +/* Hook for a plugin to get the CHAP password for authenticating us */ +int (*chap_passwd_hook) (char *user, char *passwd) = NULL; + +/* Hook for a plugin to say whether it is OK if the peer + refuses to authenticate. */ +int (*null_auth_hook) (struct wordlist **paddrs, + struct wordlist **popts) = NULL; + +int (*allowed_address_hook) (u32_t addr) = NULL; +#endif /* UNUSED */ + +#ifdef HAVE_MULTILINK +/* Hook for plugin to hear when an interface joins a multilink bundle */ +void (*multilink_join_hook) (void) = NULL; +#endif + +#if PPP_NOTIFY +/* A notifier for when the peer has authenticated itself, + and we are proceeding to the network phase. */ +struct notifier *auth_up_notifier = NULL; + +/* A notifier for when the link goes down. */ +struct notifier *link_down_notifier = NULL; +#endif /* PPP_NOTIFY */ + +/* + * Option variables. + */ +#if 0 /* MOVED TO ppp_settings */ +bool uselogin = 0; /* Use /etc/passwd for checking PAP */ +bool session_mgmt = 0; /* Do session management (login records) */ +bool cryptpap = 0; /* Passwords in pap-secrets are encrypted */ +bool refuse_pap = 0; /* Don't wanna auth. ourselves with PAP */ +bool refuse_chap = 0; /* Don't wanna auth. ourselves with CHAP */ +bool refuse_eap = 0; /* Don't wanna auth. ourselves with EAP */ +#if MSCHAP_SUPPORT +bool refuse_mschap = 0; /* Don't wanna auth. ourselves with MS-CHAP */ +bool refuse_mschap_v2 = 0; /* Don't wanna auth. ourselves with MS-CHAPv2 */ +#else /* MSCHAP_SUPPORT */ +bool refuse_mschap = 1; /* Don't wanna auth. ourselves with MS-CHAP */ +bool refuse_mschap_v2 = 1; /* Don't wanna auth. ourselves with MS-CHAPv2 */ +#endif /* MSCHAP_SUPPORT */ +bool usehostname = 0; /* Use hostname for our_name */ +bool auth_required = 0; /* Always require authentication from peer */ +bool allow_any_ip = 0; /* Allow peer to use any IP address */ +bool explicit_remote = 0; /* User specified explicit remote name */ +bool explicit_user = 0; /* Set if "user" option supplied */ +bool explicit_passwd = 0; /* Set if "password" option supplied */ +char remote_name[MAXNAMELEN]; /* Peer's name for authentication */ +static char *uafname; /* name of most recent +ua file */ + +extern char *crypt (const char *, const char *); +#endif /* UNUSED */ +/* Prototypes for procedures local to this file. */ + +static void network_phase(ppp_pcb *pcb); +#if PPP_IDLETIMELIMIT +static void check_idle(void *arg); +#endif /* PPP_IDLETIMELIMIT */ +#if PPP_MAXCONNECT +static void connect_time_expired(void *arg); +#endif /* PPP_MAXCONNECT */ +#if 0 /* UNUSED */ +static int null_login (int); +/* static int get_pap_passwd (char *); */ +static int have_pap_secret (int *); +static int have_chap_secret (char *, char *, int, int *); +static int have_srp_secret (char *client, char *server, int need_ip, + int *lacks_ipp); +static int ip_addr_check (u32_t, struct permitted_ip *); +static int scan_authfile (FILE *, char *, char *, char *, + struct wordlist **, struct wordlist **, + char *, int); +static void free_wordlist (struct wordlist *); +static void set_allowed_addrs (int, struct wordlist *, struct wordlist *); +static int some_ip_ok (struct wordlist *); +static int setupapfile (char **); +static int privgroup (char **); +static int set_noauth_addr (char **); +static int set_permitted_number (char **); +static void check_access (FILE *, char *); +static int wordlist_count (struct wordlist *); +#endif /* UNUSED */ + +#ifdef MAXOCTETS +static void check_maxoctets (void *); +#endif + +#if PPP_OPTIONS +/* + * Authentication-related options. + */ +option_t auth_options[] = { + { "auth", o_bool, &auth_required, + "Require authentication from peer", OPT_PRIO | 1 }, + { "noauth", o_bool, &auth_required, + "Don't require peer to authenticate", OPT_PRIOSUB | OPT_PRIV, + &allow_any_ip }, + { "require-pap", o_bool, &lcp_wantoptions[0].neg_upap, + "Require PAP authentication from peer", + OPT_PRIOSUB | 1, &auth_required }, + { "+pap", o_bool, &lcp_wantoptions[0].neg_upap, + "Require PAP authentication from peer", + OPT_ALIAS | OPT_PRIOSUB | 1, &auth_required }, + { "require-chap", o_bool, &auth_required, + "Require CHAP authentication from peer", + OPT_PRIOSUB | OPT_A2OR | MDTYPE_MD5, + &lcp_wantoptions[0].chap_mdtype }, + { "+chap", o_bool, &auth_required, + "Require CHAP authentication from peer", + OPT_ALIAS | OPT_PRIOSUB | OPT_A2OR | MDTYPE_MD5, + &lcp_wantoptions[0].chap_mdtype }, +#if MSCHAP_SUPPORT + { "require-mschap", o_bool, &auth_required, + "Require MS-CHAP authentication from peer", + OPT_PRIOSUB | OPT_A2OR | MDTYPE_MICROSOFT, + &lcp_wantoptions[0].chap_mdtype }, + { "+mschap", o_bool, &auth_required, + "Require MS-CHAP authentication from peer", + OPT_ALIAS | OPT_PRIOSUB | OPT_A2OR | MDTYPE_MICROSOFT, + &lcp_wantoptions[0].chap_mdtype }, + { "require-mschap-v2", o_bool, &auth_required, + "Require MS-CHAPv2 authentication from peer", + OPT_PRIOSUB | OPT_A2OR | MDTYPE_MICROSOFT_V2, + &lcp_wantoptions[0].chap_mdtype }, + { "+mschap-v2", o_bool, &auth_required, + "Require MS-CHAPv2 authentication from peer", + OPT_ALIAS | OPT_PRIOSUB | OPT_A2OR | MDTYPE_MICROSOFT_V2, + &lcp_wantoptions[0].chap_mdtype }, +#endif /* MSCHAP_SUPPORT */ +#if 0 + { "refuse-pap", o_bool, &refuse_pap, + "Don't agree to auth to peer with PAP", 1 }, + { "-pap", o_bool, &refuse_pap, + "Don't allow PAP authentication with peer", OPT_ALIAS | 1 }, + { "refuse-chap", o_bool, &refuse_chap, + "Don't agree to auth to peer with CHAP", + OPT_A2CLRB | MDTYPE_MD5, + &lcp_allowoptions[0].chap_mdtype }, + { "-chap", o_bool, &refuse_chap, + "Don't allow CHAP authentication with peer", + OPT_ALIAS | OPT_A2CLRB | MDTYPE_MD5, + &lcp_allowoptions[0].chap_mdtype }, +#endif +#if MSCHAP_SUPPORT +#if 0 + { "refuse-mschap", o_bool, &refuse_mschap, + "Don't agree to auth to peer with MS-CHAP", + OPT_A2CLRB | MDTYPE_MICROSOFT, + &lcp_allowoptions[0].chap_mdtype }, + { "-mschap", o_bool, &refuse_mschap, + "Don't allow MS-CHAP authentication with peer", + OPT_ALIAS | OPT_A2CLRB | MDTYPE_MICROSOFT, + &lcp_allowoptions[0].chap_mdtype }, + { "refuse-mschap-v2", o_bool, &refuse_mschap_v2, + "Don't agree to auth to peer with MS-CHAPv2", + OPT_A2CLRB | MDTYPE_MICROSOFT_V2, + &lcp_allowoptions[0].chap_mdtype }, + { "-mschap-v2", o_bool, &refuse_mschap_v2, + "Don't allow MS-CHAPv2 authentication with peer", + OPT_ALIAS | OPT_A2CLRB | MDTYPE_MICROSOFT_V2, + &lcp_allowoptions[0].chap_mdtype }, +#endif +#endif /* MSCHAP_SUPPORT*/ +#if EAP_SUPPORT + { "require-eap", o_bool, &lcp_wantoptions[0].neg_eap, + "Require EAP authentication from peer", OPT_PRIOSUB | 1, + &auth_required }, +#if 0 + { "refuse-eap", o_bool, &refuse_eap, + "Don't agree to authenticate to peer with EAP", 1 }, +#endif +#endif /* EAP_SUPPORT */ + { "name", o_string, our_name, + "Set local name for authentication", + OPT_PRIO | OPT_PRIV | OPT_STATIC, NULL, MAXNAMELEN }, + + { "+ua", o_special, (void *)setupapfile, + "Get PAP user and password from file", + OPT_PRIO | OPT_A2STRVAL, &uafname }, + +#if 0 + { "user", o_string, user, + "Set name for auth with peer", OPT_PRIO | OPT_STATIC, + &explicit_user, MAXNAMELEN }, + + { "password", o_string, passwd, + "Password for authenticating us to the peer", + OPT_PRIO | OPT_STATIC | OPT_HIDE, + &explicit_passwd, MAXSECRETLEN }, +#endif + + { "usehostname", o_bool, &usehostname, + "Must use hostname for authentication", 1 }, + + { "remotename", o_string, remote_name, + "Set remote name for authentication", OPT_PRIO | OPT_STATIC, + &explicit_remote, MAXNAMELEN }, + + { "login", o_bool, &uselogin, + "Use system password database for PAP", OPT_A2COPY | 1 , + &session_mgmt }, + { "enable-session", o_bool, &session_mgmt, + "Enable session accounting for remote peers", OPT_PRIV | 1 }, + + { "papcrypt", o_bool, &cryptpap, + "PAP passwords are encrypted", 1 }, + + { "privgroup", o_special, (void *)privgroup, + "Allow group members to use privileged options", OPT_PRIV | OPT_A2LIST }, + + { "allow-ip", o_special, (void *)set_noauth_addr, + "Set IP address(es) which can be used without authentication", + OPT_PRIV | OPT_A2LIST }, + + { "remotenumber", o_string, remote_number, + "Set remote telephone number for authentication", OPT_PRIO | OPT_STATIC, + NULL, MAXNAMELEN }, + + { "allow-number", o_special, (void *)set_permitted_number, + "Set telephone number(s) which are allowed to connect", + OPT_PRIV | OPT_A2LIST }, + + { NULL } +}; +#endif /* PPP_OPTIONS */ + +#if 0 /* UNUSED */ +/* + * setupapfile - specifies UPAP info for authenticating with peer. + */ +static int +setupapfile(argv) + char **argv; +{ + FILE *ufile; + int l; + uid_t euid; + char u[MAXNAMELEN], p[MAXSECRETLEN]; + char *fname; + + lcp_allowoptions[0].neg_upap = 1; + + /* open user info file */ + fname = strdup(*argv); + if (fname == NULL) + novm("+ua file name"); + euid = geteuid(); + if (seteuid(getuid()) == -1) { + option_error("unable to reset uid before opening %s: %m", fname); + return 0; + } + ufile = fopen(fname, "r"); + if (seteuid(euid) == -1) + fatal("unable to regain privileges: %m"); + if (ufile == NULL) { + option_error("unable to open user login data file %s", fname); + return 0; + } + check_access(ufile, fname); + uafname = fname; + + /* get username */ + if (fgets(u, MAXNAMELEN - 1, ufile) == NULL + || fgets(p, MAXSECRETLEN - 1, ufile) == NULL) { + fclose(ufile); + option_error("unable to read user login data file %s", fname); + return 0; + } + fclose(ufile); + + /* get rid of newlines */ + l = strlen(u); + if (l > 0 && u[l-1] == '\n') + u[l-1] = 0; + l = strlen(p); + if (l > 0 && p[l-1] == '\n') + p[l-1] = 0; + + if (override_value("user", option_priority, fname)) { + strlcpy(ppp_settings.user, u, sizeof(ppp_settings.user)); + explicit_user = 1; + } + if (override_value("passwd", option_priority, fname)) { + strlcpy(ppp_settings.passwd, p, sizeof(ppp_settings.passwd)); + explicit_passwd = 1; + } + + return (1); +} + +/* + * privgroup - allow members of the group to have privileged access. + */ +static int +privgroup(argv) + char **argv; +{ + struct group *g; + int i; + + g = getgrnam(*argv); + if (g == 0) { + option_error("group %s is unknown", *argv); + return 0; + } + for (i = 0; i < ngroups; ++i) { + if (groups[i] == g->gr_gid) { + privileged = 1; + break; + } + } + return 1; +} + + +/* + * set_noauth_addr - set address(es) that can be used without authentication. + * Equivalent to specifying an entry like `"" * "" addr' in pap-secrets. + */ +static int +set_noauth_addr(argv) + char **argv; +{ + char *addr = *argv; + int l = strlen(addr) + 1; + struct wordlist *wp; + + wp = (struct wordlist *) malloc(sizeof(struct wordlist) + l); + if (wp == NULL) + novm("allow-ip argument"); + wp->word = (char *) (wp + 1); + wp->next = noauth_addrs; + MEMCPY(wp->word, addr, l); + noauth_addrs = wp; + return 1; +} + + +/* + * set_permitted_number - set remote telephone number(s) that may connect. + */ +static int +set_permitted_number(argv) + char **argv; +{ + char *number = *argv; + int l = strlen(number) + 1; + struct wordlist *wp; + + wp = (struct wordlist *) malloc(sizeof(struct wordlist) + l); + if (wp == NULL) + novm("allow-number argument"); + wp->word = (char *) (wp + 1); + wp->next = permitted_numbers; + MEMCPY(wp->word, number, l); + permitted_numbers = wp; + return 1; +} +#endif + +/* + * An Open on LCP has requested a change from Dead to Establish phase. + */ +void link_required(ppp_pcb *pcb) { + LWIP_UNUSED_ARG(pcb); +} + +#if 0 +/* + * Bring the link up to the point of being able to do ppp. + */ +void start_link(unit) + int unit; +{ + ppp_pcb *pcb = &ppp_pcb_list[unit]; + char *msg; + + status = EXIT_NEGOTIATION_FAILED; + new_phase(pcb, PPP_PHASE_SERIALCONN); + + hungup = 0; + devfd = the_channel->connect(); + msg = "Connect script failed"; + if (devfd < 0) + goto fail; + + /* set up the serial device as a ppp interface */ + /* + * N.B. we used to do tdb_writelock/tdb_writeunlock around this + * (from establish_ppp to set_ifunit). However, we won't be + * doing the set_ifunit in multilink mode, which is the only time + * we need the atomicity that the tdb_writelock/tdb_writeunlock + * gives us. Thus we don't need the tdb_writelock/tdb_writeunlock. + */ + fd_ppp = the_channel->establish_ppp(devfd); + msg = "ppp establishment failed"; + if (fd_ppp < 0) { + status = EXIT_FATAL_ERROR; + goto disconnect; + } + + if (!demand && ifunit >= 0) + set_ifunit(1); + + /* + * Start opening the connection and wait for + * incoming events (reply, timeout, etc.). + */ + if (ifunit >= 0) + ppp_notice("Connect: %s <--> %s", ifname, ppp_devnam); + else + ppp_notice("Starting negotiation on %s", ppp_devnam); + add_fd(fd_ppp); + + new_phase(pcb, PPP_PHASE_ESTABLISH); + + lcp_lowerup(pcb); + return; + + disconnect: + new_phase(pcb, PPP_PHASE_DISCONNECT); + if (the_channel->disconnect) + the_channel->disconnect(); + + fail: + new_phase(pcb, PPP_PHASE_DEAD); + if (the_channel->cleanup) + (*the_channel->cleanup)(); +} +#endif + +/* + * LCP has terminated the link; go to the Dead phase and take the + * physical layer down. + */ +void link_terminated(ppp_pcb *pcb) { + if (pcb->phase == PPP_PHASE_DEAD +#ifdef HAVE_MULTILINK + || pcb->phase == PPP_PHASE_MASTER +#endif /* HAVE_MULTILINK */ + ) + return; + new_phase(pcb, PPP_PHASE_DISCONNECT); + +#if 0 /* UNUSED */ + if (pap_logout_hook) { + pap_logout_hook(); + } + session_end(devnam); +#endif /* UNUSED */ + + if (!doing_multilink) { + ppp_notice("Connection terminated."); +#if PPP_STATS_SUPPORT + print_link_stats(); +#endif /* PPP_STATS_SUPPORT */ + } else + ppp_notice("Link terminated."); + + lcp_lowerdown(pcb); + + ppp_link_terminated(pcb); +#if 0 + /* + * Delete pid files before disestablishing ppp. Otherwise it + * can happen that another pppd gets the same unit and then + * we delete its pid file. + */ + if (!doing_multilink && !demand) + remove_pidfiles(); + + /* + * If we may want to bring the link up again, transfer + * the ppp unit back to the loopback. Set the + * real serial device back to its normal mode of operation. + */ + if (fd_ppp >= 0) { + remove_fd(fd_ppp); + clean_check(); + the_channel->disestablish_ppp(devfd); + if (doing_multilink) + mp_exit_bundle(); + fd_ppp = -1; + } + if (!hungup) + lcp_lowerdown(pcb); + if (!doing_multilink && !demand) + script_unsetenv("IFNAME"); + + /* + * Run disconnector script, if requested. + * XXX we may not be able to do this if the line has hung up! + */ + if (devfd >= 0 && the_channel->disconnect) { + the_channel->disconnect(); + devfd = -1; + } + if (the_channel->cleanup) + (*the_channel->cleanup)(); + + if (doing_multilink && multilink_master) { + if (!bundle_terminating) + new_phase(pcb, PPP_PHASE_MASTER); + else + mp_bundle_terminated(); + } else + new_phase(pcb, PPP_PHASE_DEAD); +#endif +} + +/* + * LCP has gone down; it will either die or try to re-establish. + */ +void link_down(ppp_pcb *pcb) { +#if PPP_NOTIFY + notify(link_down_notifier, 0); +#endif /* PPP_NOTIFY */ + + if (!doing_multilink) { + upper_layers_down(pcb); + if (pcb->phase != PPP_PHASE_DEAD +#ifdef HAVE_MULTILINK + && pcb->phase != PPP_PHASE_MASTER +#endif /* HAVE_MULTILINK */ + ) + new_phase(pcb, PPP_PHASE_ESTABLISH); + } + /* XXX if doing_multilink, should do something to stop + network-layer traffic on the link */ +} + +void upper_layers_down(ppp_pcb *pcb) { + int i; + const struct protent *protp; + + for (i = 0; (protp = protocols[i]) != NULL; ++i) { + if (protp->protocol != PPP_LCP && protp->lowerdown != NULL) + (*protp->lowerdown)(pcb); + if (protp->protocol < 0xC000 && protp->close != NULL) + (*protp->close)(pcb, "LCP down"); + } + pcb->num_np_open = 0; + pcb->num_np_up = 0; +} + +/* + * The link is established. + * Proceed to the Dead, Authenticate or Network phase as appropriate. + */ +void link_established(ppp_pcb *pcb) { +#if PPP_AUTH_SUPPORT + int auth; +#if PPP_SERVER +#if PAP_SUPPORT + lcp_options *wo = &pcb->lcp_wantoptions; +#endif /* PAP_SUPPORT */ + lcp_options *go = &pcb->lcp_gotoptions; +#endif /* PPP_SERVER */ + lcp_options *ho = &pcb->lcp_hisoptions; +#endif /* PPP_AUTH_SUPPORT */ + int i; + const struct protent *protp; + + /* + * Tell higher-level protocols that LCP is up. + */ + if (!doing_multilink) { + for (i = 0; (protp = protocols[i]) != NULL; ++i) + if (protp->protocol != PPP_LCP + && protp->lowerup != NULL) + (*protp->lowerup)(pcb); + } + +#if PPP_AUTH_SUPPORT +#if PPP_SERVER +#if PPP_ALLOWED_ADDRS + if (!auth_required && noauth_addrs != NULL) + set_allowed_addrs(unit, NULL, NULL); +#endif /* PPP_ALLOWED_ADDRS */ + + if (pcb->settings.auth_required && !(0 +#if PAP_SUPPORT + || go->neg_upap +#endif /* PAP_SUPPORT */ +#if CHAP_SUPPORT + || go->neg_chap +#endif /* CHAP_SUPPORT */ +#if EAP_SUPPORT + || go->neg_eap +#endif /* EAP_SUPPORT */ + )) { + +#if PPP_ALLOWED_ADDRS + /* + * We wanted the peer to authenticate itself, and it refused: + * if we have some address(es) it can use without auth, fine, + * otherwise treat it as though it authenticated with PAP using + * a username of "" and a password of "". If that's not OK, + * boot it out. + */ + if (noauth_addrs != NULL) { + set_allowed_addrs(unit, NULL, NULL); + } else +#endif /* PPP_ALLOWED_ADDRS */ + if (!pcb->settings.null_login +#if PAP_SUPPORT + || !wo->neg_upap +#endif /* PAP_SUPPORT */ + ) { + ppp_warn("peer refused to authenticate: terminating link"); +#if 0 /* UNUSED */ + status = EXIT_PEER_AUTH_FAILED; +#endif /* UNUSED */ + pcb->err_code = PPPERR_AUTHFAIL; + lcp_close(pcb, "peer refused to authenticate"); + return; + } + } +#endif /* PPP_SERVER */ + + new_phase(pcb, PPP_PHASE_AUTHENTICATE); + auth = 0; +#if PPP_SERVER +#if EAP_SUPPORT + if (go->neg_eap) { + eap_authpeer(pcb, PPP_OUR_NAME); + auth |= EAP_PEER; + } else +#endif /* EAP_SUPPORT */ +#if CHAP_SUPPORT + if (go->neg_chap) { + chap_auth_peer(pcb, PPP_OUR_NAME, CHAP_DIGEST(go->chap_mdtype)); + auth |= CHAP_PEER; + } else +#endif /* CHAP_SUPPORT */ +#if PAP_SUPPORT + if (go->neg_upap) { + upap_authpeer(pcb); + auth |= PAP_PEER; + } else +#endif /* PAP_SUPPORT */ + {} +#endif /* PPP_SERVER */ + +#if EAP_SUPPORT + if (ho->neg_eap) { + eap_authwithpeer(pcb, pcb->settings.user); + auth |= EAP_WITHPEER; + } else +#endif /* EAP_SUPPORT */ +#if CHAP_SUPPORT + if (ho->neg_chap) { + chap_auth_with_peer(pcb, pcb->settings.user, CHAP_DIGEST(ho->chap_mdtype)); + auth |= CHAP_WITHPEER; + } else +#endif /* CHAP_SUPPORT */ +#if PAP_SUPPORT + if (ho->neg_upap) { + upap_authwithpeer(pcb, pcb->settings.user, pcb->settings.passwd); + auth |= PAP_WITHPEER; + } else +#endif /* PAP_SUPPORT */ + {} + + pcb->auth_pending = auth; + pcb->auth_done = 0; + + if (!auth) +#endif /* PPP_AUTH_SUPPORT */ + network_phase(pcb); +} + +/* + * Proceed to the network phase. + */ +static void network_phase(ppp_pcb *pcb) { +#if CBCP_SUPPORT + ppp_pcb *pcb = &ppp_pcb_list[unit]; +#endif +#if 0 /* UNUSED */ + lcp_options *go = &lcp_gotoptions[unit]; +#endif /* UNUSED */ + +#if 0 /* UNUSED */ + /* Log calling number. */ + if (*remote_number) + ppp_notice("peer from calling number %q authorized", remote_number); +#endif /* UNUSED */ + +#if PPP_NOTIFY + /* + * If the peer had to authenticate, notify it now. + */ + if (0 +#if CHAP_SUPPORT + || go->neg_chap +#endif /* CHAP_SUPPORT */ +#if PAP_SUPPORT + || go->neg_upap +#endif /* PAP_SUPPORT */ +#if EAP_SUPPORT + || go->neg_eap +#endif /* EAP_SUPPORT */ + ) { + notify(auth_up_notifier, 0); + } +#endif /* PPP_NOTIFY */ + +#if CBCP_SUPPORT + /* + * If we negotiated callback, do it now. + */ + if (go->neg_cbcp) { + new_phase(pcb, PPP_PHASE_CALLBACK); + (*cbcp_protent.open)(pcb); + return; + } +#endif + +#if PPP_OPTIONS + /* + * Process extra options from the secrets file + */ + if (extra_options) { + options_from_list(extra_options, 1); + free_wordlist(extra_options); + extra_options = 0; + } +#endif /* PPP_OPTIONS */ + start_networks(pcb); +} + +void start_networks(ppp_pcb *pcb) { +#if CCP_SUPPORT || ECP_SUPPORT + int i; + const struct protent *protp; +#endif /* CCP_SUPPORT || ECP_SUPPORT */ + + new_phase(pcb, PPP_PHASE_NETWORK); + +#ifdef HAVE_MULTILINK + if (multilink) { + if (mp_join_bundle()) { + if (multilink_join_hook) + (*multilink_join_hook)(); + if (updetach && !nodetach) + detach(); + return; + } + } +#endif /* HAVE_MULTILINK */ + +#ifdef PPP_FILTER + if (!demand) + set_filters(&pass_filter, &active_filter); +#endif +#if CCP_SUPPORT || ECP_SUPPORT + /* Start CCP and ECP */ + for (i = 0; (protp = protocols[i]) != NULL; ++i) + if ( + (0 +#if ECP_SUPPORT + || protp->protocol == PPP_ECP +#endif /* ECP_SUPPORT */ +#if CCP_SUPPORT + || protp->protocol == PPP_CCP +#endif /* CCP_SUPPORT */ + ) + && protp->open != NULL) + (*protp->open)(pcb); +#endif /* CCP_SUPPORT || ECP_SUPPORT */ + + /* + * Bring up other network protocols iff encryption is not required. + */ + if (1 +#if ECP_SUPPORT + && !ecp_gotoptions[unit].required +#endif /* ECP_SUPPORT */ +#if MPPE_SUPPORT + && !pcb->ccp_gotoptions.mppe +#endif /* MPPE_SUPPORT */ + ) + continue_networks(pcb); +} + +void continue_networks(ppp_pcb *pcb) { + int i; + const struct protent *protp; + + /* + * Start the "real" network protocols. + */ + for (i = 0; (protp = protocols[i]) != NULL; ++i) + if (protp->protocol < 0xC000 +#if CCP_SUPPORT + && protp->protocol != PPP_CCP +#endif /* CCP_SUPPORT */ +#if ECP_SUPPORT + && protp->protocol != PPP_ECP +#endif /* ECP_SUPPORT */ + && protp->open != NULL) { + (*protp->open)(pcb); + ++pcb->num_np_open; + } + + if (pcb->num_np_open == 0) + /* nothing to do */ + lcp_close(pcb, "No network protocols running"); +} + +#if PPP_AUTH_SUPPORT +#if PPP_SERVER +/* + * auth_check_passwd - Check the user name and passwd against configuration. + * + * returns: + * 0: Authentication failed. + * 1: Authentication succeeded. + * In either case, msg points to an appropriate message and msglen to the message len. + */ +int auth_check_passwd(ppp_pcb *pcb, char *auser, int userlen, char *apasswd, int passwdlen, const char **msg, int *msglen) { + int secretuserlen; + int secretpasswdlen; + + if (pcb->settings.user && pcb->settings.passwd) { + secretuserlen = (int)strlen(pcb->settings.user); + secretpasswdlen = (int)strlen(pcb->settings.passwd); + if (secretuserlen == userlen + && secretpasswdlen == passwdlen + && !memcmp(auser, pcb->settings.user, userlen) + && !memcmp(apasswd, pcb->settings.passwd, passwdlen) ) { + *msg = "Login ok"; + *msglen = sizeof("Login ok")-1; + return 1; + } + } + + *msg = "Login incorrect"; + *msglen = sizeof("Login incorrect")-1; + return 0; +} + +/* + * The peer has failed to authenticate himself using `protocol'. + */ +void auth_peer_fail(ppp_pcb *pcb, int protocol) { + LWIP_UNUSED_ARG(protocol); + /* + * Authentication failure: take the link down + */ +#if 0 /* UNUSED */ + status = EXIT_PEER_AUTH_FAILED; +#endif /* UNUSED */ + pcb->err_code = PPPERR_AUTHFAIL; + lcp_close(pcb, "Authentication failed"); +} + +/* + * The peer has been successfully authenticated using `protocol'. + */ +void auth_peer_success(ppp_pcb *pcb, int protocol, int prot_flavor, const char *name, int namelen) { + int bit; +#ifndef HAVE_MULTILINK + LWIP_UNUSED_ARG(name); + LWIP_UNUSED_ARG(namelen); +#endif /* HAVE_MULTILINK */ + + switch (protocol) { +#if CHAP_SUPPORT + case PPP_CHAP: + bit = CHAP_PEER; + switch (prot_flavor) { + case CHAP_MD5: + bit |= CHAP_MD5_PEER; + break; +#if MSCHAP_SUPPORT + case CHAP_MICROSOFT: + bit |= CHAP_MS_PEER; + break; + case CHAP_MICROSOFT_V2: + bit |= CHAP_MS2_PEER; + break; +#endif /* MSCHAP_SUPPORT */ + default: + break; + } + break; +#endif /* CHAP_SUPPORT */ +#if PAP_SUPPORT + case PPP_PAP: + bit = PAP_PEER; + break; +#endif /* PAP_SUPPORT */ +#if EAP_SUPPORT + case PPP_EAP: + bit = EAP_PEER; + break; +#endif /* EAP_SUPPORT */ + default: + ppp_warn("auth_peer_success: unknown protocol %x", protocol); + return; + } + +#ifdef HAVE_MULTILINK + /* + * Save the authenticated name of the peer for later. + */ + if (namelen > (int)sizeof(pcb->peer_authname) - 1) + namelen = (int)sizeof(pcb->peer_authname) - 1; + MEMCPY(pcb->peer_authname, name, namelen); + pcb->peer_authname[namelen] = 0; +#endif /* HAVE_MULTILINK */ +#if 0 /* UNUSED */ + script_setenv("PEERNAME", , 0); +#endif /* UNUSED */ + + /* Save the authentication method for later. */ + pcb->auth_done |= bit; + + /* + * If there is no more authentication still to be done, + * proceed to the network (or callback) phase. + */ + if ((pcb->auth_pending &= ~bit) == 0) + network_phase(pcb); +} +#endif /* PPP_SERVER */ + +/* + * We have failed to authenticate ourselves to the peer using `protocol'. + */ +void auth_withpeer_fail(ppp_pcb *pcb, int protocol) { + LWIP_UNUSED_ARG(protocol); + /* + * We've failed to authenticate ourselves to our peer. + * + * Some servers keep sending CHAP challenges, but there + * is no point in persisting without any way to get updated + * authentication secrets. + * + * He'll probably take the link down, and there's not much + * we can do except wait for that. + */ + pcb->err_code = PPPERR_AUTHFAIL; + lcp_close(pcb, "Failed to authenticate ourselves to peer"); +} + +/* + * We have successfully authenticated ourselves with the peer using `protocol'. + */ +void auth_withpeer_success(ppp_pcb *pcb, int protocol, int prot_flavor) { + int bit; + const char *prot = ""; + + switch (protocol) { +#if CHAP_SUPPORT + case PPP_CHAP: + bit = CHAP_WITHPEER; + prot = "CHAP"; + switch (prot_flavor) { + case CHAP_MD5: + bit |= CHAP_MD5_WITHPEER; + break; +#if MSCHAP_SUPPORT + case CHAP_MICROSOFT: + bit |= CHAP_MS_WITHPEER; + break; + case CHAP_MICROSOFT_V2: + bit |= CHAP_MS2_WITHPEER; + break; +#endif /* MSCHAP_SUPPORT */ + default: + break; + } + break; +#endif /* CHAP_SUPPORT */ +#if PAP_SUPPORT + case PPP_PAP: + bit = PAP_WITHPEER; + prot = "PAP"; + break; +#endif /* PAP_SUPPORT */ +#if EAP_SUPPORT + case PPP_EAP: + bit = EAP_WITHPEER; + prot = "EAP"; + break; +#endif /* EAP_SUPPORT */ + default: + ppp_warn("auth_withpeer_success: unknown protocol %x", protocol); + bit = 0; + /* no break */ + } + + ppp_notice("%s authentication succeeded", prot); + + /* Save the authentication method for later. */ + pcb->auth_done |= bit; + + /* + * If there is no more authentication still being done, + * proceed to the network (or callback) phase. + */ + if ((pcb->auth_pending &= ~bit) == 0) + network_phase(pcb); +} +#endif /* PPP_AUTH_SUPPORT */ + + +/* + * np_up - a network protocol has come up. + */ +void np_up(ppp_pcb *pcb, int proto) { +#if PPP_IDLETIMELIMIT + int tlim; +#endif /* PPP_IDLETIMELIMIT */ + LWIP_UNUSED_ARG(proto); + + if (pcb->num_np_up == 0) { + /* + * At this point we consider that the link has come up successfully. + */ + new_phase(pcb, PPP_PHASE_RUNNING); + +#if PPP_IDLETIMELIMIT +#if 0 /* UNUSED */ + if (idle_time_hook != 0) + tlim = (*idle_time_hook)(NULL); + else +#endif /* UNUSED */ + tlim = pcb->settings.idle_time_limit; + if (tlim > 0) + TIMEOUT(check_idle, (void*)pcb, tlim); +#endif /* PPP_IDLETIMELIMIT */ + +#if PPP_MAXCONNECT + /* + * Set a timeout to close the connection once the maximum + * connect time has expired. + */ + if (pcb->settings.maxconnect > 0) + TIMEOUT(connect_time_expired, (void*)pcb, pcb->settings.maxconnect); +#endif /* PPP_MAXCONNECT */ + +#ifdef MAXOCTETS + if (maxoctets > 0) + TIMEOUT(check_maxoctets, NULL, maxoctets_timeout); +#endif + +#if 0 /* Unused */ + /* + * Detach now, if the updetach option was given. + */ + if (updetach && !nodetach) + detach(); +#endif /* Unused */ + } + ++pcb->num_np_up; +} + +/* + * np_down - a network protocol has gone down. + */ +void np_down(ppp_pcb *pcb, int proto) { + LWIP_UNUSED_ARG(proto); + if (--pcb->num_np_up == 0) { +#if PPP_IDLETIMELIMIT + UNTIMEOUT(check_idle, (void*)pcb); +#endif /* PPP_IDLETIMELIMIT */ +#if PPP_MAXCONNECT + UNTIMEOUT(connect_time_expired, NULL); +#endif /* PPP_MAXCONNECT */ +#ifdef MAXOCTETS + UNTIMEOUT(check_maxoctets, NULL); +#endif + new_phase(pcb, PPP_PHASE_NETWORK); + } +} + +/* + * np_finished - a network protocol has finished using the link. + */ +void np_finished(ppp_pcb *pcb, int proto) { + LWIP_UNUSED_ARG(proto); + if (--pcb->num_np_open <= 0) { + /* no further use for the link: shut up shop. */ + lcp_close(pcb, "No network protocols running"); + } +} + +#ifdef MAXOCTETS +static void +check_maxoctets(arg) + void *arg; +{ +#if PPP_STATS_SUPPORT + unsigned int used; + + update_link_stats(ifunit); + link_stats_valid=0; + + switch(maxoctets_dir) { + case PPP_OCTETS_DIRECTION_IN: + used = link_stats.bytes_in; + break; + case PPP_OCTETS_DIRECTION_OUT: + used = link_stats.bytes_out; + break; + case PPP_OCTETS_DIRECTION_MAXOVERAL: + case PPP_OCTETS_DIRECTION_MAXSESSION: + used = (link_stats.bytes_in > link_stats.bytes_out) ? link_stats.bytes_in : link_stats.bytes_out; + break; + default: + used = link_stats.bytes_in+link_stats.bytes_out; + break; + } + if (used > maxoctets) { + ppp_notice("Traffic limit reached. Limit: %u Used: %u", maxoctets, used); + status = EXIT_TRAFFIC_LIMIT; + lcp_close(pcb, "Traffic limit"); +#if 0 /* UNUSED */ + need_holdoff = 0; +#endif /* UNUSED */ + } else { + TIMEOUT(check_maxoctets, NULL, maxoctets_timeout); + } +#endif /* PPP_STATS_SUPPORT */ +} +#endif /* MAXOCTETS */ + +#if PPP_IDLETIMELIMIT +/* + * check_idle - check whether the link has been idle for long + * enough that we can shut it down. + */ +static void check_idle(void *arg) { + ppp_pcb *pcb = (ppp_pcb*)arg; + struct ppp_idle idle; + time_t itime; + int tlim; + + if (!get_idle_time(pcb, &idle)) + return; +#if 0 /* UNUSED */ + if (idle_time_hook != 0) { + tlim = idle_time_hook(&idle); + } else { +#endif /* UNUSED */ + itime = LWIP_MIN(idle.xmit_idle, idle.recv_idle); + tlim = pcb->settings.idle_time_limit - itime; +#if 0 /* UNUSED */ + } +#endif /* UNUSED */ + if (tlim <= 0) { + /* link is idle: shut it down. */ + ppp_notice("Terminating connection due to lack of activity."); + pcb->err_code = PPPERR_IDLETIMEOUT; + lcp_close(pcb, "Link inactive"); +#if 0 /* UNUSED */ + need_holdoff = 0; +#endif /* UNUSED */ + } else { + TIMEOUT(check_idle, (void*)pcb, tlim); + } +} +#endif /* PPP_IDLETIMELIMIT */ + +#if PPP_MAXCONNECT +/* + * connect_time_expired - log a message and close the connection. + */ +static void connect_time_expired(void *arg) { + ppp_pcb *pcb = (ppp_pcb*)arg; + ppp_info("Connect time expired"); + pcb->err_code = PPPERR_CONNECTTIME; + lcp_close(pcb, "Connect time expired"); /* Close connection */ +} +#endif /* PPP_MAXCONNECT */ + +#if PPP_OPTIONS +/* + * auth_check_options - called to check authentication options. + */ +void +auth_check_options() +{ + lcp_options *wo = &lcp_wantoptions[0]; + int can_auth; + int lacks_ip; + + /* Default our_name to hostname, and user to our_name */ + if (our_name[0] == 0 || usehostname) + strlcpy(our_name, hostname, sizeof(our_name)); + /* If a blank username was explicitly given as an option, trust + the user and don't use our_name */ + if (ppp_settings.user[0] == 0 && !explicit_user) + strlcpy(ppp_settings.user, our_name, sizeof(ppp_settings.user)); + + /* + * If we have a default route, require the peer to authenticate + * unless the noauth option was given or the real user is root. + */ + if (!auth_required && !allow_any_ip && have_route_to(0) && !privileged) { + auth_required = 1; + default_auth = 1; + } + +#if CHAP_SUPPORT + /* If we selected any CHAP flavors, we should probably negotiate it. :-) */ + if (wo->chap_mdtype) + wo->neg_chap = 1; +#endif /* CHAP_SUPPORT */ + + /* If authentication is required, ask peer for CHAP, PAP, or EAP. */ + if (auth_required) { + allow_any_ip = 0; + if (1 +#if CHAP_SUPPORT + && !wo->neg_chap +#endif /* CHAP_SUPPORT */ +#if PAP_SUPPORT + && !wo->neg_upap +#endif /* PAP_SUPPORT */ +#if EAP_SUPPORT + && !wo->neg_eap +#endif /* EAP_SUPPORT */ + ) { +#if CHAP_SUPPORT + wo->neg_chap = CHAP_MDTYPE_SUPPORTED != MDTYPE_NONE; + wo->chap_mdtype = CHAP_MDTYPE_SUPPORTED; +#endif /* CHAP_SUPPORT */ +#if PAP_SUPPORT + wo->neg_upap = 1; +#endif /* PAP_SUPPORT */ +#if EAP_SUPPORT + wo->neg_eap = 1; +#endif /* EAP_SUPPORT */ + } + } else { +#if CHAP_SUPPORT + wo->neg_chap = 0; + wo->chap_mdtype = MDTYPE_NONE; +#endif /* CHAP_SUPPORT */ +#if PAP_SUPPORT + wo->neg_upap = 0; +#endif /* PAP_SUPPORT */ +#if EAP_SUPPORT + wo->neg_eap = 0; +#endif /* EAP_SUPPORT */ + } + + /* + * Check whether we have appropriate secrets to use + * to authenticate the peer. Note that EAP can authenticate by way + * of a CHAP-like exchanges as well as SRP. + */ + lacks_ip = 0; +#if PAP_SUPPORT + can_auth = wo->neg_upap && (uselogin || have_pap_secret(&lacks_ip)); +#else + can_auth = 0; +#endif /* PAP_SUPPORT */ + if (!can_auth && (0 +#if CHAP_SUPPORT + || wo->neg_chap +#endif /* CHAP_SUPPORT */ +#if EAP_SUPPORT + || wo->neg_eap +#endif /* EAP_SUPPORT */ + )) { +#if CHAP_SUPPORT + can_auth = have_chap_secret((explicit_remote? remote_name: NULL), + our_name, 1, &lacks_ip); +#else + can_auth = 0; +#endif + } + if (!can_auth +#if EAP_SUPPORT + && wo->neg_eap +#endif /* EAP_SUPPORT */ + ) { + can_auth = have_srp_secret((explicit_remote? remote_name: NULL), + our_name, 1, &lacks_ip); + } + + if (auth_required && !can_auth && noauth_addrs == NULL) { + if (default_auth) { + option_error( +"By default the remote system is required to authenticate itself"); + option_error( +"(because this system has a default route to the internet)"); + } else if (explicit_remote) + option_error( +"The remote system (%s) is required to authenticate itself", + remote_name); + else + option_error( +"The remote system is required to authenticate itself"); + option_error( +"but I couldn't find any suitable secret (password) for it to use to do so."); + if (lacks_ip) + option_error( +"(None of the available passwords would let it use an IP address.)"); + + exit(1); + } + + /* + * Early check for remote number authorization. + */ + if (!auth_number()) { + ppp_warn("calling number %q is not authorized", remote_number); + exit(EXIT_CNID_AUTH_FAILED); + } +} +#endif /* PPP_OPTIONS */ + +#if 0 /* UNUSED */ +/* + * auth_reset - called when LCP is starting negotiations to recheck + * authentication options, i.e. whether we have appropriate secrets + * to use for authenticating ourselves and/or the peer. + */ +void +auth_reset(unit) + int unit; +{ + lcp_options *go = &lcp_gotoptions[unit]; + lcp_options *ao = &lcp_allowoptions[unit]; + int hadchap; + + hadchap = -1; + ao->neg_upap = !refuse_pap && (passwd[0] != 0 || get_pap_passwd(NULL)); + ao->neg_chap = (!refuse_chap || !refuse_mschap || !refuse_mschap_v2) + && (passwd[0] != 0 || + (hadchap = have_chap_secret(user, (explicit_remote? remote_name: + NULL), 0, NULL))); + ao->neg_eap = !refuse_eap && ( + passwd[0] != 0 || + (hadchap == 1 || (hadchap == -1 && have_chap_secret(user, + (explicit_remote? remote_name: NULL), 0, NULL))) || + have_srp_secret(user, (explicit_remote? remote_name: NULL), 0, NULL)); + + hadchap = -1; + if (go->neg_upap && !uselogin && !have_pap_secret(NULL)) + go->neg_upap = 0; + if (go->neg_chap) { + if (!(hadchap = have_chap_secret((explicit_remote? remote_name: NULL), + our_name, 1, NULL))) + go->neg_chap = 0; + } + if (go->neg_eap && + (hadchap == 0 || (hadchap == -1 && + !have_chap_secret((explicit_remote? remote_name: NULL), our_name, + 1, NULL))) && + !have_srp_secret((explicit_remote? remote_name: NULL), our_name, 1, + NULL)) + go->neg_eap = 0; +} + +/* + * check_passwd - Check the user name and passwd against the PAP secrets + * file. If requested, also check against the system password database, + * and login the user if OK. + * + * returns: + * UPAP_AUTHNAK: Authentication failed. + * UPAP_AUTHACK: Authentication succeeded. + * In either case, msg points to an appropriate message. + */ +int +check_passwd(unit, auser, userlen, apasswd, passwdlen, msg) + int unit; + char *auser; + int userlen; + char *apasswd; + int passwdlen; + char **msg; +{ + return UPAP_AUTHNAK; + int ret; + char *filename; + FILE *f; + struct wordlist *addrs = NULL, *opts = NULL; + char passwd[256], user[256]; + char secret[MAXWORDLEN]; + static int attempts = 0; + + /* + * Make copies of apasswd and auser, then null-terminate them. + * If there are unprintable characters in the password, make + * them visible. + */ + slprintf(ppp_settings.passwd, sizeof(ppp_settings.passwd), "%.*v", passwdlen, apasswd); + slprintf(ppp_settings.user, sizeof(ppp_settings.user), "%.*v", userlen, auser); + *msg = ""; + + /* + * Check if a plugin wants to handle this. + */ + if (pap_auth_hook) { + ret = (*pap_auth_hook)(ppp_settings.user, ppp_settings.passwd, msg, &addrs, &opts); + if (ret >= 0) { + /* note: set_allowed_addrs() saves opts (but not addrs): + don't free it! */ + if (ret) + set_allowed_addrs(unit, addrs, opts); + else if (opts != 0) + free_wordlist(opts); + if (addrs != 0) + free_wordlist(addrs); + BZERO(ppp_settings.passwd, sizeof(ppp_settings.passwd)); + return ret? UPAP_AUTHACK: UPAP_AUTHNAK; + } + } + + /* + * Open the file of pap secrets and scan for a suitable secret + * for authenticating this user. + */ + filename = _PATH_UPAPFILE; + addrs = opts = NULL; + ret = UPAP_AUTHNAK; + f = fopen(filename, "r"); + if (f == NULL) { + ppp_error("Can't open PAP password file %s: %m", filename); + + } else { + check_access(f, filename); + if (scan_authfile(f, ppp_settings.user, our_name, secret, &addrs, &opts, filename, 0) < 0) { + ppp_warn("no PAP secret found for %s", user); + } else { + /* + * If the secret is "@login", it means to check + * the password against the login database. + */ + int login_secret = strcmp(secret, "@login") == 0; + ret = UPAP_AUTHACK; + if (uselogin || login_secret) { + /* login option or secret is @login */ + if (session_full(ppp_settings.user, ppp_settings.passwd, devnam, msg) == 0) { + ret = UPAP_AUTHNAK; + } + } else if (session_mgmt) { + if (session_check(ppp_settings.user, NULL, devnam, NULL) == 0) { + ppp_warn("Peer %q failed PAP Session verification", user); + ret = UPAP_AUTHNAK; + } + } + if (secret[0] != 0 && !login_secret) { + /* password given in pap-secrets - must match */ + if ((cryptpap || strcmp(ppp_settings.passwd, secret) != 0) + && strcmp(crypt(ppp_settings.passwd, secret), secret) != 0) + ret = UPAP_AUTHNAK; + } + } + fclose(f); + } + + if (ret == UPAP_AUTHNAK) { + if (**msg == 0) + *msg = "Login incorrect"; + /* + * XXX can we ever get here more than once?? + * Frustrate passwd stealer programs. + * Allow 10 tries, but start backing off after 3 (stolen from login). + * On 10'th, drop the connection. + */ + if (attempts++ >= 10) { + ppp_warn("%d LOGIN FAILURES ON %s, %s", attempts, devnam, user); + lcp_close(pcb, "login failed"); + } + if (attempts > 3) + sleep((u_int) (attempts - 3) * 5); + if (opts != NULL) + free_wordlist(opts); + + } else { + attempts = 0; /* Reset count */ + if (**msg == 0) + *msg = "Login ok"; + set_allowed_addrs(unit, addrs, opts); + } + + if (addrs != NULL) + free_wordlist(addrs); + BZERO(ppp_settings.passwd, sizeof(ppp_settings.passwd)); + BZERO(secret, sizeof(secret)); + + return ret; +} + +/* + * null_login - Check if a username of "" and a password of "" are + * acceptable, and iff so, set the list of acceptable IP addresses + * and return 1. + */ +static int +null_login(unit) + int unit; +{ + char *filename; + FILE *f; + int i, ret; + struct wordlist *addrs, *opts; + char secret[MAXWORDLEN]; + + /* + * Check if a plugin wants to handle this. + */ + ret = -1; + if (null_auth_hook) + ret = (*null_auth_hook)(&addrs, &opts); + + /* + * Open the file of pap secrets and scan for a suitable secret. + */ + if (ret <= 0) { + filename = _PATH_UPAPFILE; + addrs = NULL; + f = fopen(filename, "r"); + if (f == NULL) + return 0; + check_access(f, filename); + + i = scan_authfile(f, "", our_name, secret, &addrs, &opts, filename, 0); + ret = i >= 0 && secret[0] == 0; + BZERO(secret, sizeof(secret)); + fclose(f); + } + + if (ret) + set_allowed_addrs(unit, addrs, opts); + else if (opts != 0) + free_wordlist(opts); + if (addrs != 0) + free_wordlist(addrs); + + return ret; +} + +/* + * get_pap_passwd - get a password for authenticating ourselves with + * our peer using PAP. Returns 1 on success, 0 if no suitable password + * could be found. + * Assumes passwd points to MAXSECRETLEN bytes of space (if non-null). + */ +static int +get_pap_passwd(passwd) + char *passwd; +{ + char *filename; + FILE *f; + int ret; + char secret[MAXWORDLEN]; + + /* + * Check whether a plugin wants to supply this. + */ + if (pap_passwd_hook) { + ret = (*pap_passwd_hook)(ppp_settings,user, ppp_settings.passwd); + if (ret >= 0) + return ret; + } + + filename = _PATH_UPAPFILE; + f = fopen(filename, "r"); + if (f == NULL) + return 0; + check_access(f, filename); + ret = scan_authfile(f, user, + (remote_name[0]? remote_name: NULL), + secret, NULL, NULL, filename, 0); + fclose(f); + if (ret < 0) + return 0; + if (passwd != NULL) + strlcpy(passwd, secret, MAXSECRETLEN); + BZERO(secret, sizeof(secret)); + return 1; +} + +/* + * have_pap_secret - check whether we have a PAP file with any + * secrets that we could possibly use for authenticating the peer. + */ +static int +have_pap_secret(lacks_ipp) + int *lacks_ipp; +{ + FILE *f; + int ret; + char *filename; + struct wordlist *addrs; + + /* let the plugin decide, if there is one */ + if (pap_check_hook) { + ret = (*pap_check_hook)(); + if (ret >= 0) + return ret; + } + + filename = _PATH_UPAPFILE; + f = fopen(filename, "r"); + if (f == NULL) + return 0; + + ret = scan_authfile(f, (explicit_remote? remote_name: NULL), our_name, + NULL, &addrs, NULL, filename, 0); + fclose(f); + if (ret >= 0 && !some_ip_ok(addrs)) { + if (lacks_ipp != 0) + *lacks_ipp = 1; + ret = -1; + } + if (addrs != 0) + free_wordlist(addrs); + + return ret >= 0; +} + +/* + * have_chap_secret - check whether we have a CHAP file with a + * secret that we could possibly use for authenticating `client' + * on `server'. Either can be the null string, meaning we don't + * know the identity yet. + */ +static int +have_chap_secret(client, server, need_ip, lacks_ipp) + char *client; + char *server; + int need_ip; + int *lacks_ipp; +{ + FILE *f; + int ret; + char *filename; + struct wordlist *addrs; + + if (chap_check_hook) { + ret = (*chap_check_hook)(); + if (ret >= 0) { + return ret; + } + } + + filename = _PATH_CHAPFILE; + f = fopen(filename, "r"); + if (f == NULL) + return 0; + + if (client != NULL && client[0] == 0) + client = NULL; + else if (server != NULL && server[0] == 0) + server = NULL; + + ret = scan_authfile(f, client, server, NULL, &addrs, NULL, filename, 0); + fclose(f); + if (ret >= 0 && need_ip && !some_ip_ok(addrs)) { + if (lacks_ipp != 0) + *lacks_ipp = 1; + ret = -1; + } + if (addrs != 0) + free_wordlist(addrs); + + return ret >= 0; +} + +/* + * have_srp_secret - check whether we have a SRP file with a + * secret that we could possibly use for authenticating `client' + * on `server'. Either can be the null string, meaning we don't + * know the identity yet. + */ +static int +have_srp_secret(client, server, need_ip, lacks_ipp) + char *client; + char *server; + int need_ip; + int *lacks_ipp; +{ + FILE *f; + int ret; + char *filename; + struct wordlist *addrs; + + filename = _PATH_SRPFILE; + f = fopen(filename, "r"); + if (f == NULL) + return 0; + + if (client != NULL && client[0] == 0) + client = NULL; + else if (server != NULL && server[0] == 0) + server = NULL; + + ret = scan_authfile(f, client, server, NULL, &addrs, NULL, filename, 0); + fclose(f); + if (ret >= 0 && need_ip && !some_ip_ok(addrs)) { + if (lacks_ipp != 0) + *lacks_ipp = 1; + ret = -1; + } + if (addrs != 0) + free_wordlist(addrs); + + return ret >= 0; +} +#endif /* UNUSED */ + +#if PPP_AUTH_SUPPORT +/* + * get_secret - open the CHAP secret file and return the secret + * for authenticating the given client on the given server. + * (We could be either client or server). + */ +int get_secret(ppp_pcb *pcb, const char *client, const char *server, char *secret, int *secret_len, int am_server) { + int len; + LWIP_UNUSED_ARG(server); + LWIP_UNUSED_ARG(am_server); + + if (!client || !client[0] || !pcb->settings.user || !pcb->settings.passwd || strcmp(client, pcb->settings.user)) { + return 0; + } + + len = (int)strlen(pcb->settings.passwd); + if (len > MAXSECRETLEN) { + ppp_error("Secret for %s on %s is too long", client, server); + len = MAXSECRETLEN; + } + + MEMCPY(secret, pcb->settings.passwd, len); + *secret_len = len; + return 1; + +#if 0 /* UNUSED */ + FILE *f; + int ret, len; + char *filename; + struct wordlist *addrs, *opts; + char secbuf[MAXWORDLEN]; + struct wordlist *addrs; + addrs = NULL; + + if (!am_server && ppp_settings.passwd[0] != 0) { + strlcpy(secbuf, ppp_settings.passwd, sizeof(secbuf)); + } else if (!am_server && chap_passwd_hook) { + if ( (*chap_passwd_hook)(client, secbuf) < 0) { + ppp_error("Unable to obtain CHAP password for %s on %s from plugin", + client, server); + return 0; + } + } else { + filename = _PATH_CHAPFILE; + addrs = NULL; + secbuf[0] = 0; + + f = fopen(filename, "r"); + if (f == NULL) { + ppp_error("Can't open chap secret file %s: %m", filename); + return 0; + } + check_access(f, filename); + + ret = scan_authfile(f, client, server, secbuf, &addrs, &opts, filename, 0); + fclose(f); + if (ret < 0) + return 0; + + if (am_server) + set_allowed_addrs(unit, addrs, opts); + else if (opts != 0) + free_wordlist(opts); + if (addrs != 0) + free_wordlist(addrs); + } + + len = strlen(secbuf); + if (len > MAXSECRETLEN) { + ppp_error("Secret for %s on %s is too long", client, server); + len = MAXSECRETLEN; + } + MEMCPY(secret, secbuf, len); + BZERO(secbuf, sizeof(secbuf)); + *secret_len = len; + + return 1; +#endif /* UNUSED */ +} +#endif /* PPP_AUTH_SUPPORT */ + + +#if 0 /* UNUSED */ +/* + * get_srp_secret - open the SRP secret file and return the secret + * for authenticating the given client on the given server. + * (We could be either client or server). + */ +int +get_srp_secret(unit, client, server, secret, am_server) + int unit; + char *client; + char *server; + char *secret; + int am_server; +{ + FILE *fp; + int ret; + char *filename; + struct wordlist *addrs, *opts; + + if (!am_server && ppp_settings.passwd[0] != '\0') { + strlcpy(secret, ppp_settings.passwd, MAXWORDLEN); + } else { + filename = _PATH_SRPFILE; + addrs = NULL; + + fp = fopen(filename, "r"); + if (fp == NULL) { + ppp_error("Can't open srp secret file %s: %m", filename); + return 0; + } + check_access(fp, filename); + + secret[0] = '\0'; + ret = scan_authfile(fp, client, server, secret, &addrs, &opts, + filename, am_server); + fclose(fp); + if (ret < 0) + return 0; + + if (am_server) + set_allowed_addrs(unit, addrs, opts); + else if (opts != NULL) + free_wordlist(opts); + if (addrs != NULL) + free_wordlist(addrs); + } + + return 1; +} + +/* + * set_allowed_addrs() - set the list of allowed addresses. + * Also looks for `--' indicating options to apply for this peer + * and leaves the following words in extra_options. + */ +static void +set_allowed_addrs(unit, addrs, opts) + int unit; + struct wordlist *addrs; + struct wordlist *opts; +{ + int n; + struct wordlist *ap, **plink; + struct permitted_ip *ip; + char *ptr_word, *ptr_mask; + struct hostent *hp; + struct netent *np; + u32_t a, mask, ah, offset; + struct ipcp_options *wo = &ipcp_wantoptions[unit]; + u32_t suggested_ip = 0; + + if (addresses[unit] != NULL) + free(addresses[unit]); + addresses[unit] = NULL; + if (extra_options != NULL) + free_wordlist(extra_options); + extra_options = opts; + + /* + * Count the number of IP addresses given. + */ + n = wordlist_count(addrs) + wordlist_count(noauth_addrs); + if (n == 0) + return; + ip = (struct permitted_ip *) malloc((n + 1) * sizeof(struct permitted_ip)); + if (ip == 0) + return; + + /* temporarily append the noauth_addrs list to addrs */ + for (plink = &addrs; *plink != NULL; plink = &(*plink)->next) + ; + *plink = noauth_addrs; + + n = 0; + for (ap = addrs; ap != NULL; ap = ap->next) { + /* "-" means no addresses authorized, "*" means any address allowed */ + ptr_word = ap->word; + if (strcmp(ptr_word, "-") == 0) + break; + if (strcmp(ptr_word, "*") == 0) { + ip[n].permit = 1; + ip[n].base = ip[n].mask = 0; + ++n; + break; + } + + ip[n].permit = 1; + if (*ptr_word == '!') { + ip[n].permit = 0; + ++ptr_word; + } + + mask = ~ (u32_t) 0; + offset = 0; + ptr_mask = strchr (ptr_word, '/'); + if (ptr_mask != NULL) { + int bit_count; + char *endp; + + bit_count = (int) strtol (ptr_mask+1, &endp, 10); + if (bit_count <= 0 || bit_count > 32) { + ppp_warn("invalid address length %v in auth. address list", + ptr_mask+1); + continue; + } + bit_count = 32 - bit_count; /* # bits in host part */ + if (*endp == '+') { + offset = ifunit + 1; + ++endp; + } + if (*endp != 0) { + ppp_warn("invalid address length syntax: %v", ptr_mask+1); + continue; + } + *ptr_mask = '\0'; + mask <<= bit_count; + } + + hp = gethostbyname(ptr_word); + if (hp != NULL && hp->h_addrtype == AF_INET) { + a = *(u32_t *)hp->h_addr; + } else { + np = getnetbyname (ptr_word); + if (np != NULL && np->n_addrtype == AF_INET) { + a = lwip_htonl ((u32_t)np->n_net); + if (ptr_mask == NULL) { + /* calculate appropriate mask for net */ + ah = lwip_ntohl(a); + if (IN_CLASSA(ah)) + mask = IN_CLASSA_NET; + else if (IN_CLASSB(ah)) + mask = IN_CLASSB_NET; + else if (IN_CLASSC(ah)) + mask = IN_CLASSC_NET; + } + } else { + a = inet_addr (ptr_word); + } + } + + if (ptr_mask != NULL) + *ptr_mask = '/'; + + if (a == (u32_t)-1L) { + ppp_warn("unknown host %s in auth. address list", ap->word); + continue; + } + if (offset != 0) { + if (offset >= ~mask) { + ppp_warn("interface unit %d too large for subnet %v", + ifunit, ptr_word); + continue; + } + a = lwip_htonl((lwip_ntohl(a) & mask) + offset); + mask = ~(u32_t)0; + } + ip[n].mask = lwip_htonl(mask); + ip[n].base = a & ip[n].mask; + ++n; + if (~mask == 0 && suggested_ip == 0) + suggested_ip = a; + } + *plink = NULL; + + ip[n].permit = 0; /* make the last entry forbid all addresses */ + ip[n].base = 0; /* to terminate the list */ + ip[n].mask = 0; + + addresses[unit] = ip; + + /* + * If the address given for the peer isn't authorized, or if + * the user hasn't given one, AND there is an authorized address + * which is a single host, then use that if we find one. + */ + if (suggested_ip != 0 + && (wo->hisaddr == 0 || !auth_ip_addr(unit, wo->hisaddr))) { + wo->hisaddr = suggested_ip; + /* + * Do we insist on this address? No, if there are other + * addresses authorized than the suggested one. + */ + if (n > 1) + wo->accept_remote = 1; + } +} + +/* + * auth_ip_addr - check whether the peer is authorized to use + * a given IP address. Returns 1 if authorized, 0 otherwise. + */ +int +auth_ip_addr(unit, addr) + int unit; + u32_t addr; +{ + int ok; + + /* don't allow loopback or multicast address */ + if (bad_ip_adrs(addr)) + return 0; + + if (allowed_address_hook) { + ok = allowed_address_hook(addr); + if (ok >= 0) return ok; + } + + if (addresses[unit] != NULL) { + ok = ip_addr_check(addr, addresses[unit]); + if (ok >= 0) + return ok; + } + + if (auth_required) + return 0; /* no addresses authorized */ + return allow_any_ip || privileged || !have_route_to(addr); +} + +static int +ip_addr_check(addr, addrs) + u32_t addr; + struct permitted_ip *addrs; +{ + for (; ; ++addrs) + if ((addr & addrs->mask) == addrs->base) + return addrs->permit; +} + +/* + * bad_ip_adrs - return 1 if the IP address is one we don't want + * to use, such as an address in the loopback net or a multicast address. + * addr is in network byte order. + */ +int +bad_ip_adrs(addr) + u32_t addr; +{ + addr = lwip_ntohl(addr); + return (addr >> IN_CLASSA_NSHIFT) == IN_LOOPBACKNET + || IN_MULTICAST(addr) || IN_BADCLASS(addr); +} + +/* + * some_ip_ok - check a wordlist to see if it authorizes any + * IP address(es). + */ +static int +some_ip_ok(addrs) + struct wordlist *addrs; +{ + for (; addrs != 0; addrs = addrs->next) { + if (addrs->word[0] == '-') + break; + if (addrs->word[0] != '!') + return 1; /* some IP address is allowed */ + } + return 0; +} + +/* + * auth_number - check whether the remote number is allowed to connect. + * Returns 1 if authorized, 0 otherwise. + */ +int +auth_number() +{ + struct wordlist *wp = permitted_numbers; + int l; + + /* Allow all if no authorization list. */ + if (!wp) + return 1; + + /* Allow if we have a match in the authorization list. */ + while (wp) { + /* trailing '*' wildcard */ + l = strlen(wp->word); + if ((wp->word)[l - 1] == '*') + l--; + if (!strncasecmp(wp->word, remote_number, l)) + return 1; + wp = wp->next; + } + + return 0; +} + +/* + * check_access - complain if a secret file has too-liberal permissions. + */ +static void +check_access(f, filename) + FILE *f; + char *filename; +{ + struct stat sbuf; + + if (fstat(fileno(f), &sbuf) < 0) { + ppp_warn("cannot stat secret file %s: %m", filename); + } else if ((sbuf.st_mode & (S_IRWXG | S_IRWXO)) != 0) { + ppp_warn("Warning - secret file %s has world and/or group access", + filename); + } +} + +/* + * scan_authfile - Scan an authorization file for a secret suitable + * for authenticating `client' on `server'. The return value is -1 + * if no secret is found, otherwise >= 0. The return value has + * NONWILD_CLIENT set if the secret didn't have "*" for the client, and + * NONWILD_SERVER set if the secret didn't have "*" for the server. + * Any following words on the line up to a "--" (i.e. address authorization + * info) are placed in a wordlist and returned in *addrs. Any + * following words (extra options) are placed in a wordlist and + * returned in *opts. + * We assume secret is NULL or points to MAXWORDLEN bytes of space. + * Flags are non-zero if we need two colons in the secret in order to + * match. + */ +static int +scan_authfile(f, client, server, secret, addrs, opts, filename, flags) + FILE *f; + char *client; + char *server; + char *secret; + struct wordlist **addrs; + struct wordlist **opts; + char *filename; + int flags; +{ + int newline, xxx; + int got_flag, best_flag; + FILE *sf; + struct wordlist *ap, *addr_list, *alist, **app; + char word[MAXWORDLEN]; + char atfile[MAXWORDLEN]; + char lsecret[MAXWORDLEN]; + char *cp; + + if (addrs != NULL) + *addrs = NULL; + if (opts != NULL) + *opts = NULL; + addr_list = NULL; + if (!getword(f, word, &newline, filename)) + return -1; /* file is empty??? */ + newline = 1; + best_flag = -1; + for (;;) { + /* + * Skip until we find a word at the start of a line. + */ + while (!newline && getword(f, word, &newline, filename)) + ; + if (!newline) + break; /* got to end of file */ + + /* + * Got a client - check if it's a match or a wildcard. + */ + got_flag = 0; + if (client != NULL && strcmp(word, client) != 0 && !ISWILD(word)) { + newline = 0; + continue; + } + if (!ISWILD(word)) + got_flag = NONWILD_CLIENT; + + /* + * Now get a server and check if it matches. + */ + if (!getword(f, word, &newline, filename)) + break; + if (newline) + continue; + if (!ISWILD(word)) { + if (server != NULL && strcmp(word, server) != 0) + continue; + got_flag |= NONWILD_SERVER; + } + + /* + * Got some sort of a match - see if it's better than what + * we have already. + */ + if (got_flag <= best_flag) + continue; + + /* + * Get the secret. + */ + if (!getword(f, word, &newline, filename)) + break; + if (newline) + continue; + + /* + * SRP-SHA1 authenticator should never be reading secrets from + * a file. (Authenticatee may, though.) + */ + if (flags && ((cp = strchr(word, ':')) == NULL || + strchr(cp + 1, ':') == NULL)) + continue; + + if (secret != NULL) { + /* + * Special syntax: @/pathname means read secret from file. + */ + if (word[0] == '@' && word[1] == '/') { + strlcpy(atfile, word+1, sizeof(atfile)); + if ((sf = fopen(atfile, "r")) == NULL) { + ppp_warn("can't open indirect secret file %s", atfile); + continue; + } + check_access(sf, atfile); + if (!getword(sf, word, &xxx, atfile)) { + ppp_warn("no secret in indirect secret file %s", atfile); + fclose(sf); + continue; + } + fclose(sf); + } + strlcpy(lsecret, word, sizeof(lsecret)); + } + + /* + * Now read address authorization info and make a wordlist. + */ + app = &alist; + for (;;) { + if (!getword(f, word, &newline, filename) || newline) + break; + ap = (struct wordlist *) + malloc(sizeof(struct wordlist) + strlen(word) + 1); + if (ap == NULL) + novm("authorized addresses"); + ap->word = (char *) (ap + 1); + strcpy(ap->word, word); + *app = ap; + app = &ap->next; + } + *app = NULL; + + /* + * This is the best so far; remember it. + */ + best_flag = got_flag; + if (addr_list) + free_wordlist(addr_list); + addr_list = alist; + if (secret != NULL) + strlcpy(secret, lsecret, MAXWORDLEN); + + if (!newline) + break; + } + + /* scan for a -- word indicating the start of options */ + for (app = &addr_list; (ap = *app) != NULL; app = &ap->next) + if (strcmp(ap->word, "--") == 0) + break; + /* ap = start of options */ + if (ap != NULL) { + ap = ap->next; /* first option */ + free(*app); /* free the "--" word */ + *app = NULL; /* terminate addr list */ + } + if (opts != NULL) + *opts = ap; + else if (ap != NULL) + free_wordlist(ap); + if (addrs != NULL) + *addrs = addr_list; + else if (addr_list != NULL) + free_wordlist(addr_list); + + return best_flag; +} + +/* + * wordlist_count - return the number of items in a wordlist + */ +static int +wordlist_count(wp) + struct wordlist *wp; +{ + int n; + + for (n = 0; wp != NULL; wp = wp->next) + ++n; + return n; +} + +/* + * free_wordlist - release memory allocated for a wordlist. + */ +static void +free_wordlist(wp) + struct wordlist *wp; +{ + struct wordlist *next; + + while (wp != NULL) { + next = wp->next; + free(wp); + wp = next; + } +} +#endif /* UNUSED */ + +#endif /* PPP_SUPPORT */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/ccp.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/ccp.c new file mode 100644 index 0000000000000000000000000000000000000000..f8519ebece7b101395e29d6972bb69021b9e06b4 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/ccp.c @@ -0,0 +1,1740 @@ +/* + * ccp.c - PPP Compression Control Protocol. + * + * Copyright (c) 1994-2002 Paul Mackerras. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. The name(s) of the authors of this software must not be used to + * endorse or promote products derived from this software without + * prior written permission. + * + * 3. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by Paul Mackerras + * ". + * + * THE AUTHORS OF THIS SOFTWARE DISCLAIM ALL WARRANTIES WITH REGARD TO + * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY + * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include "netif/ppp/ppp_opts.h" +#if PPP_SUPPORT && CCP_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +#include +#include + +#include "netif/ppp/ppp_impl.h" + +#include "netif/ppp/fsm.h" +#include "netif/ppp/ccp.h" + +#if MPPE_SUPPORT +#include "netif/ppp/lcp.h" /* lcp_close(), lcp_fsm */ +#include "netif/ppp/mppe.h" /* mppe_init() */ +#endif /* MPPE_SUPPORT */ + +/* + * Unfortunately there is a bug in zlib which means that using a + * size of 8 (window size = 256) for Deflate compression will cause + * buffer overruns and kernel crashes in the deflate module. + * Until this is fixed we only accept sizes in the range 9 .. 15. + * Thanks to James Carlson for pointing this out. + */ +#define DEFLATE_MIN_WORKS 9 + +/* + * Command-line options. + */ +#if PPP_OPTIONS +static int setbsdcomp (char **); +static int setdeflate (char **); +static char bsd_value[8]; +static char deflate_value[8]; + +/* + * Option variables. + */ +#if MPPE_SUPPORT +bool refuse_mppe_stateful = 1; /* Allow stateful mode? */ +#endif /* MPPE_SUPPORT */ + +static option_t ccp_option_list[] = { + { "noccp", o_bool, &ccp_protent.enabled_flag, + "Disable CCP negotiation" }, + { "-ccp", o_bool, &ccp_protent.enabled_flag, + "Disable CCP negotiation", OPT_ALIAS }, + + { "bsdcomp", o_special, (void *)setbsdcomp, + "Request BSD-Compress packet compression", + OPT_PRIO | OPT_A2STRVAL | OPT_STATIC, bsd_value }, + { "nobsdcomp", o_bool, &ccp_wantoptions[0].bsd_compress, + "don't allow BSD-Compress", OPT_PRIOSUB | OPT_A2CLR, + &ccp_allowoptions[0].bsd_compress }, + { "-bsdcomp", o_bool, &ccp_wantoptions[0].bsd_compress, + "don't allow BSD-Compress", OPT_ALIAS | OPT_PRIOSUB | OPT_A2CLR, + &ccp_allowoptions[0].bsd_compress }, + + { "deflate", o_special, (void *)setdeflate, + "request Deflate compression", + OPT_PRIO | OPT_A2STRVAL | OPT_STATIC, deflate_value }, + { "nodeflate", o_bool, &ccp_wantoptions[0].deflate, + "don't allow Deflate compression", OPT_PRIOSUB | OPT_A2CLR, + &ccp_allowoptions[0].deflate }, + { "-deflate", o_bool, &ccp_wantoptions[0].deflate, + "don't allow Deflate compression", OPT_ALIAS | OPT_PRIOSUB | OPT_A2CLR, + &ccp_allowoptions[0].deflate }, + + { "nodeflatedraft", o_bool, &ccp_wantoptions[0].deflate_draft, + "don't use draft deflate #", OPT_A2COPY, + &ccp_allowoptions[0].deflate_draft }, + + { "predictor1", o_bool, &ccp_wantoptions[0].predictor_1, + "request Predictor-1", OPT_PRIO | 1 }, + { "nopredictor1", o_bool, &ccp_wantoptions[0].predictor_1, + "don't allow Predictor-1", OPT_PRIOSUB | OPT_A2CLR, + &ccp_allowoptions[0].predictor_1 }, + { "-predictor1", o_bool, &ccp_wantoptions[0].predictor_1, + "don't allow Predictor-1", OPT_ALIAS | OPT_PRIOSUB | OPT_A2CLR, + &ccp_allowoptions[0].predictor_1 }, + +#if MPPE_SUPPORT + /* MPPE options are symmetrical ... we only set wantoptions here */ + { "require-mppe", o_bool, &ccp_wantoptions[0].mppe, + "require MPPE encryption", + OPT_PRIO | MPPE_OPT_40 | MPPE_OPT_128 }, + { "+mppe", o_bool, &ccp_wantoptions[0].mppe, + "require MPPE encryption", + OPT_ALIAS | OPT_PRIO | MPPE_OPT_40 | MPPE_OPT_128 }, + { "nomppe", o_bool, &ccp_wantoptions[0].mppe, + "don't allow MPPE encryption", OPT_PRIO }, + { "-mppe", o_bool, &ccp_wantoptions[0].mppe, + "don't allow MPPE encryption", OPT_ALIAS | OPT_PRIO }, + + /* We use ccp_allowoptions[0].mppe as a junk var ... it is reset later */ + { "require-mppe-40", o_bool, &ccp_allowoptions[0].mppe, + "require MPPE 40-bit encryption", OPT_PRIO | OPT_A2OR | MPPE_OPT_40, + &ccp_wantoptions[0].mppe }, + { "+mppe-40", o_bool, &ccp_allowoptions[0].mppe, + "require MPPE 40-bit encryption", OPT_PRIO | OPT_A2OR | MPPE_OPT_40, + &ccp_wantoptions[0].mppe }, + { "nomppe-40", o_bool, &ccp_allowoptions[0].mppe, + "don't allow MPPE 40-bit encryption", + OPT_PRIOSUB | OPT_A2CLRB | MPPE_OPT_40, &ccp_wantoptions[0].mppe }, + { "-mppe-40", o_bool, &ccp_allowoptions[0].mppe, + "don't allow MPPE 40-bit encryption", + OPT_ALIAS | OPT_PRIOSUB | OPT_A2CLRB | MPPE_OPT_40, + &ccp_wantoptions[0].mppe }, + + { "require-mppe-128", o_bool, &ccp_allowoptions[0].mppe, + "require MPPE 128-bit encryption", OPT_PRIO | OPT_A2OR | MPPE_OPT_128, + &ccp_wantoptions[0].mppe }, + { "+mppe-128", o_bool, &ccp_allowoptions[0].mppe, + "require MPPE 128-bit encryption", + OPT_ALIAS | OPT_PRIO | OPT_A2OR | MPPE_OPT_128, + &ccp_wantoptions[0].mppe }, + { "nomppe-128", o_bool, &ccp_allowoptions[0].mppe, + "don't allow MPPE 128-bit encryption", + OPT_PRIOSUB | OPT_A2CLRB | MPPE_OPT_128, &ccp_wantoptions[0].mppe }, + { "-mppe-128", o_bool, &ccp_allowoptions[0].mppe, + "don't allow MPPE 128-bit encryption", + OPT_ALIAS | OPT_PRIOSUB | OPT_A2CLRB | MPPE_OPT_128, + &ccp_wantoptions[0].mppe }, + + /* strange one; we always request stateless, but will we allow stateful? */ + { "mppe-stateful", o_bool, &refuse_mppe_stateful, + "allow MPPE stateful mode", OPT_PRIO }, + { "nomppe-stateful", o_bool, &refuse_mppe_stateful, + "disallow MPPE stateful mode", OPT_PRIO | 1 }, +#endif /* MPPE_SUPPORT */ + + { NULL } +}; +#endif /* PPP_OPTIONS */ + +/* + * Protocol entry points from main code. + */ +static void ccp_init(ppp_pcb *pcb); +static void ccp_open(ppp_pcb *pcb); +static void ccp_close(ppp_pcb *pcb, const char *reason); +static void ccp_lowerup(ppp_pcb *pcb); +static void ccp_lowerdown(ppp_pcb *pcb); +static void ccp_input(ppp_pcb *pcb, u_char *pkt, int len); +static void ccp_protrej(ppp_pcb *pcb); +#if PRINTPKT_SUPPORT +static int ccp_printpkt(const u_char *p, int plen, void (*printer) (void *, const char *, ...), void *arg); +#endif /* PRINTPKT_SUPPORT */ +#if PPP_DATAINPUT +static void ccp_datainput(ppp_pcb *pcb, u_char *pkt, int len); +#endif /* PPP_DATAINPUT */ + +const struct protent ccp_protent = { + PPP_CCP, + ccp_init, + ccp_input, + ccp_protrej, + ccp_lowerup, + ccp_lowerdown, + ccp_open, + ccp_close, +#if PRINTPKT_SUPPORT + ccp_printpkt, +#endif /* PRINTPKT_SUPPORT */ +#if PPP_DATAINPUT + ccp_datainput, +#endif /* PPP_DATAINPUT */ +#if PRINTPKT_SUPPORT + "CCP", + "Compressed", +#endif /* PRINTPKT_SUPPORT */ +#if PPP_OPTIONS + ccp_option_list, + NULL, +#endif /* PPP_OPTIONS */ +#if DEMAND_SUPPORT + NULL, + NULL +#endif /* DEMAND_SUPPORT */ +}; + +/* + * Callbacks for fsm code. + */ +static void ccp_resetci (fsm *); +static int ccp_cilen (fsm *); +static void ccp_addci (fsm *, u_char *, int *); +static int ccp_ackci (fsm *, u_char *, int); +static int ccp_nakci (fsm *, u_char *, int, int); +static int ccp_rejci (fsm *, u_char *, int); +static int ccp_reqci (fsm *, u_char *, int *, int); +static void ccp_up (fsm *); +static void ccp_down (fsm *); +static int ccp_extcode (fsm *, int, int, u_char *, int); +static void ccp_rack_timeout (void *); +static const char *method_name (ccp_options *, ccp_options *); + +static const fsm_callbacks ccp_callbacks = { + ccp_resetci, + ccp_cilen, + ccp_addci, + ccp_ackci, + ccp_nakci, + ccp_rejci, + ccp_reqci, + ccp_up, + ccp_down, + NULL, + NULL, + NULL, + NULL, + ccp_extcode, + "CCP" +}; + +/* + * Do we want / did we get any compression? + */ +static int ccp_anycompress(ccp_options *opt) { + return (0 +#if DEFLATE_SUPPORT + || (opt)->deflate +#endif /* DEFLATE_SUPPORT */ +#if BSDCOMPRESS_SUPPORT + || (opt)->bsd_compress +#endif /* BSDCOMPRESS_SUPPORT */ +#if PREDICTOR_SUPPORT + || (opt)->predictor_1 || (opt)->predictor_2 +#endif /* PREDICTOR_SUPPORT */ +#if MPPE_SUPPORT + || (opt)->mppe +#endif /* MPPE_SUPPORT */ + ); +} + +/* + * Local state (mainly for handling reset-reqs and reset-acks). + */ +#define RACK_PENDING 1 /* waiting for reset-ack */ +#define RREQ_REPEAT 2 /* send another reset-req if no reset-ack */ + +#define RACKTIMEOUT 1 /* second */ + +#if PPP_OPTIONS +/* + * Option parsing + */ +static int +setbsdcomp(argv) + char **argv; +{ + int rbits, abits; + char *str, *endp; + + str = *argv; + abits = rbits = strtol(str, &endp, 0); + if (endp != str && *endp == ',') { + str = endp + 1; + abits = strtol(str, &endp, 0); + } + if (*endp != 0 || endp == str) { + option_error("invalid parameter '%s' for bsdcomp option", *argv); + return 0; + } + if ((rbits != 0 && (rbits < BSD_MIN_BITS || rbits > BSD_MAX_BITS)) + || (abits != 0 && (abits < BSD_MIN_BITS || abits > BSD_MAX_BITS))) { + option_error("bsdcomp option values must be 0 or %d .. %d", + BSD_MIN_BITS, BSD_MAX_BITS); + return 0; + } + if (rbits > 0) { + ccp_wantoptions[0].bsd_compress = 1; + ccp_wantoptions[0].bsd_bits = rbits; + } else + ccp_wantoptions[0].bsd_compress = 0; + if (abits > 0) { + ccp_allowoptions[0].bsd_compress = 1; + ccp_allowoptions[0].bsd_bits = abits; + } else + ccp_allowoptions[0].bsd_compress = 0; + ppp_slprintf(bsd_value, sizeof(bsd_value), + rbits == abits? "%d": "%d,%d", rbits, abits); + + return 1; +} + +static int +setdeflate(argv) + char **argv; +{ + int rbits, abits; + char *str, *endp; + + str = *argv; + abits = rbits = strtol(str, &endp, 0); + if (endp != str && *endp == ',') { + str = endp + 1; + abits = strtol(str, &endp, 0); + } + if (*endp != 0 || endp == str) { + option_error("invalid parameter '%s' for deflate option", *argv); + return 0; + } + if ((rbits != 0 && (rbits < DEFLATE_MIN_SIZE || rbits > DEFLATE_MAX_SIZE)) + || (abits != 0 && (abits < DEFLATE_MIN_SIZE + || abits > DEFLATE_MAX_SIZE))) { + option_error("deflate option values must be 0 or %d .. %d", + DEFLATE_MIN_SIZE, DEFLATE_MAX_SIZE); + return 0; + } + if (rbits == DEFLATE_MIN_SIZE || abits == DEFLATE_MIN_SIZE) { + if (rbits == DEFLATE_MIN_SIZE) + rbits = DEFLATE_MIN_WORKS; + if (abits == DEFLATE_MIN_SIZE) + abits = DEFLATE_MIN_WORKS; + warn("deflate option value of %d changed to %d to avoid zlib bug", + DEFLATE_MIN_SIZE, DEFLATE_MIN_WORKS); + } + if (rbits > 0) { + ccp_wantoptions[0].deflate = 1; + ccp_wantoptions[0].deflate_size = rbits; + } else + ccp_wantoptions[0].deflate = 0; + if (abits > 0) { + ccp_allowoptions[0].deflate = 1; + ccp_allowoptions[0].deflate_size = abits; + } else + ccp_allowoptions[0].deflate = 0; + ppp_slprintf(deflate_value, sizeof(deflate_value), + rbits == abits? "%d": "%d,%d", rbits, abits); + + return 1; +} +#endif /* PPP_OPTIONS */ + +/* + * ccp_init - initialize CCP. + */ +static void ccp_init(ppp_pcb *pcb) { + fsm *f = &pcb->ccp_fsm; + + f->pcb = pcb; + f->protocol = PPP_CCP; + f->callbacks = &ccp_callbacks; + fsm_init(f); + +#if 0 /* Not necessary, everything is cleared in ppp_new() */ + memset(wo, 0, sizeof(*wo)); + memset(go, 0, sizeof(*go)); + memset(ao, 0, sizeof(*ao)); + memset(ho, 0, sizeof(*ho)); +#endif /* 0 */ + +#if DEFLATE_SUPPORT + wo->deflate = 1; + wo->deflate_size = DEFLATE_MAX_SIZE; + wo->deflate_correct = 1; + wo->deflate_draft = 1; + ao->deflate = 1; + ao->deflate_size = DEFLATE_MAX_SIZE; + ao->deflate_correct = 1; + ao->deflate_draft = 1; +#endif /* DEFLATE_SUPPORT */ + +#if BSDCOMPRESS_SUPPORT + wo->bsd_compress = 1; + wo->bsd_bits = BSD_MAX_BITS; + ao->bsd_compress = 1; + ao->bsd_bits = BSD_MAX_BITS; +#endif /* BSDCOMPRESS_SUPPORT */ + +#if PREDICTOR_SUPPORT + ao->predictor_1 = 1; +#endif /* PREDICTOR_SUPPORT */ +} + +/* + * ccp_open - CCP is allowed to come up. + */ +static void ccp_open(ppp_pcb *pcb) { + fsm *f = &pcb->ccp_fsm; + ccp_options *go = &pcb->ccp_gotoptions; + + if (f->state != PPP_FSM_OPENED) + ccp_set(pcb, 1, 0, 0, 0); + + /* + * Find out which compressors the kernel supports before + * deciding whether to open in silent mode. + */ + ccp_resetci(f); + if (!ccp_anycompress(go)) + f->flags |= OPT_SILENT; + + fsm_open(f); +} + +/* + * ccp_close - Terminate CCP. + */ +static void ccp_close(ppp_pcb *pcb, const char *reason) { + fsm *f = &pcb->ccp_fsm; + ccp_set(pcb, 0, 0, 0, 0); + fsm_close(f, reason); +} + +/* + * ccp_lowerup - we may now transmit CCP packets. + */ +static void ccp_lowerup(ppp_pcb *pcb) { + fsm *f = &pcb->ccp_fsm; + fsm_lowerup(f); +} + +/* + * ccp_lowerdown - we may not transmit CCP packets. + */ +static void ccp_lowerdown(ppp_pcb *pcb) { + fsm *f = &pcb->ccp_fsm; + fsm_lowerdown(f); +} + +/* + * ccp_input - process a received CCP packet. + */ +static void ccp_input(ppp_pcb *pcb, u_char *p, int len) { + fsm *f = &pcb->ccp_fsm; + ccp_options *go = &pcb->ccp_gotoptions; + int oldstate; + + /* + * Check for a terminate-request so we can print a message. + */ + oldstate = f->state; + fsm_input(f, p, len); + if (oldstate == PPP_FSM_OPENED && p[0] == TERMREQ && f->state != PPP_FSM_OPENED) { + ppp_notice("Compression disabled by peer."); +#if MPPE_SUPPORT + if (go->mppe) { + ppp_error("MPPE disabled, closing LCP"); + lcp_close(pcb, "MPPE disabled by peer"); + } +#endif /* MPPE_SUPPORT */ + } + + /* + * If we get a terminate-ack and we're not asking for compression, + * close CCP. + */ + if (oldstate == PPP_FSM_REQSENT && p[0] == TERMACK + && !ccp_anycompress(go)) + ccp_close(pcb, "No compression negotiated"); +} + +/* + * Handle a CCP-specific code. + */ +static int ccp_extcode(fsm *f, int code, int id, u_char *p, int len) { + ppp_pcb *pcb = f->pcb; + LWIP_UNUSED_ARG(p); + LWIP_UNUSED_ARG(len); + + switch (code) { + case CCP_RESETREQ: + if (f->state != PPP_FSM_OPENED) + break; + ccp_reset_comp(pcb); + /* send a reset-ack, which the transmitter will see and + reset its compression state. */ + fsm_sdata(f, CCP_RESETACK, id, NULL, 0); + break; + + case CCP_RESETACK: + if ((pcb->ccp_localstate & RACK_PENDING) && id == f->reqid) { + pcb->ccp_localstate &= ~(RACK_PENDING | RREQ_REPEAT); + UNTIMEOUT(ccp_rack_timeout, f); + ccp_reset_decomp(pcb); + } + break; + + default: + return 0; + } + + return 1; +} + +/* + * ccp_protrej - peer doesn't talk CCP. + */ +static void ccp_protrej(ppp_pcb *pcb) { + fsm *f = &pcb->ccp_fsm; +#if MPPE_SUPPORT + ccp_options *go = &pcb->ccp_gotoptions; +#endif /* MPPE_SUPPORT */ + + ccp_set(pcb, 0, 0, 0, 0); + fsm_lowerdown(f); + +#if MPPE_SUPPORT + if (go->mppe) { + ppp_error("MPPE required but peer negotiation failed"); + lcp_close(pcb, "MPPE required but peer negotiation failed"); + } +#endif /* MPPE_SUPPORT */ + +} + +/* + * ccp_resetci - initialize at start of negotiation. + */ +static void ccp_resetci(fsm *f) { + ppp_pcb *pcb = f->pcb; + ccp_options *go = &pcb->ccp_gotoptions; + ccp_options *wo = &pcb->ccp_wantoptions; +#if MPPE_SUPPORT + ccp_options *ao = &pcb->ccp_allowoptions; +#endif /* MPPE_SUPPORT */ +#if DEFLATE_SUPPORT || BSDCOMPRESS_SUPPORT || PREDICTOR_SUPPORT + u_char opt_buf[CCP_MAX_OPTION_LENGTH]; +#endif /* DEFLATE_SUPPORT || BSDCOMPRESS_SUPPORT || PREDICTOR_SUPPORT */ +#if DEFLATE_SUPPORT || BSDCOMPRESS_SUPPORT + int res; +#endif /* DEFLATE_SUPPORT || BSDCOMPRESS_SUPPORT */ + +#if MPPE_SUPPORT + if (pcb->settings.require_mppe) { + wo->mppe = ao->mppe = + (pcb->settings.refuse_mppe_40 ? 0 : MPPE_OPT_40) + | (pcb->settings.refuse_mppe_128 ? 0 : MPPE_OPT_128); + } +#endif /* MPPE_SUPPORT */ + + *go = *wo; + pcb->ccp_all_rejected = 0; + +#if MPPE_SUPPORT + if (go->mppe) { + int auth_mschap_bits = pcb->auth_done; + int numbits; + + /* + * Start with a basic sanity check: mschap[v2] auth must be in + * exactly one direction. RFC 3079 says that the keys are + * 'derived from the credentials of the peer that initiated the call', + * however the PPP protocol doesn't have such a concept, and pppd + * cannot get this info externally. Instead we do the best we can. + * NB: If MPPE is required, all other compression opts are invalid. + * So, we return right away if we can't do it. + */ + + /* Leave only the mschap auth bits set */ + auth_mschap_bits &= (CHAP_MS_WITHPEER | CHAP_MS_PEER | + CHAP_MS2_WITHPEER | CHAP_MS2_PEER); + /* Count the mschap auths */ + auth_mschap_bits >>= CHAP_MS_SHIFT; + numbits = 0; + do { + numbits += auth_mschap_bits & 1; + auth_mschap_bits >>= 1; + } while (auth_mschap_bits); + if (numbits > 1) { + ppp_error("MPPE required, but auth done in both directions."); + lcp_close(pcb, "MPPE required but not available"); + return; + } + if (!numbits) { + ppp_error("MPPE required, but MS-CHAP[v2] auth not performed."); + lcp_close(pcb, "MPPE required but not available"); + return; + } + + /* A plugin (eg radius) may not have obtained key material. */ + if (!pcb->mppe_keys_set) { + ppp_error("MPPE required, but keys are not available. " + "Possible plugin problem?"); + lcp_close(pcb, "MPPE required but not available"); + return; + } + + /* LM auth not supported for MPPE */ + if (pcb->auth_done & (CHAP_MS_WITHPEER | CHAP_MS_PEER)) { + /* This might be noise */ + if (go->mppe & MPPE_OPT_40) { + ppp_notice("Disabling 40-bit MPPE; MS-CHAP LM not supported"); + go->mppe &= ~MPPE_OPT_40; + wo->mppe &= ~MPPE_OPT_40; + } + } + + /* Last check: can we actually negotiate something? */ + if (!(go->mppe & (MPPE_OPT_40 | MPPE_OPT_128))) { + /* Could be misconfig, could be 40-bit disabled above. */ + ppp_error("MPPE required, but both 40-bit and 128-bit disabled."); + lcp_close(pcb, "MPPE required but not available"); + return; + } + + /* sync options */ + ao->mppe = go->mppe; + /* MPPE is not compatible with other compression types */ +#if BSDCOMPRESS_SUPPORT + ao->bsd_compress = go->bsd_compress = 0; +#endif /* BSDCOMPRESS_SUPPORT */ +#if PREDICTOR_SUPPORT + ao->predictor_1 = go->predictor_1 = 0; + ao->predictor_2 = go->predictor_2 = 0; +#endif /* PREDICTOR_SUPPORT */ +#if DEFLATE_SUPPORT + ao->deflate = go->deflate = 0; +#endif /* DEFLATE_SUPPORT */ + } +#endif /* MPPE_SUPPORT */ + + /* + * Check whether the kernel knows about the various + * compression methods we might request. + */ +#if BSDCOMPRESS_SUPPORT + /* FIXME: we don't need to test if BSD compress is available + * if BSDCOMPRESS_SUPPORT is set, it is. + */ + if (go->bsd_compress) { + opt_buf[0] = CI_BSD_COMPRESS; + opt_buf[1] = CILEN_BSD_COMPRESS; + for (;;) { + if (go->bsd_bits < BSD_MIN_BITS) { + go->bsd_compress = 0; + break; + } + opt_buf[2] = BSD_MAKE_OPT(BSD_CURRENT_VERSION, go->bsd_bits); + res = ccp_test(pcb, opt_buf, CILEN_BSD_COMPRESS, 0); + if (res > 0) { + break; + } else if (res < 0) { + go->bsd_compress = 0; + break; + } + go->bsd_bits--; + } + } +#endif /* BSDCOMPRESS_SUPPORT */ +#if DEFLATE_SUPPORT + /* FIXME: we don't need to test if deflate is available + * if DEFLATE_SUPPORT is set, it is. + */ + if (go->deflate) { + if (go->deflate_correct) { + opt_buf[0] = CI_DEFLATE; + opt_buf[1] = CILEN_DEFLATE; + opt_buf[3] = DEFLATE_CHK_SEQUENCE; + for (;;) { + if (go->deflate_size < DEFLATE_MIN_WORKS) { + go->deflate_correct = 0; + break; + } + opt_buf[2] = DEFLATE_MAKE_OPT(go->deflate_size); + res = ccp_test(pcb, opt_buf, CILEN_DEFLATE, 0); + if (res > 0) { + break; + } else if (res < 0) { + go->deflate_correct = 0; + break; + } + go->deflate_size--; + } + } + if (go->deflate_draft) { + opt_buf[0] = CI_DEFLATE_DRAFT; + opt_buf[1] = CILEN_DEFLATE; + opt_buf[3] = DEFLATE_CHK_SEQUENCE; + for (;;) { + if (go->deflate_size < DEFLATE_MIN_WORKS) { + go->deflate_draft = 0; + break; + } + opt_buf[2] = DEFLATE_MAKE_OPT(go->deflate_size); + res = ccp_test(pcb, opt_buf, CILEN_DEFLATE, 0); + if (res > 0) { + break; + } else if (res < 0) { + go->deflate_draft = 0; + break; + } + go->deflate_size--; + } + } + if (!go->deflate_correct && !go->deflate_draft) + go->deflate = 0; + } +#endif /* DEFLATE_SUPPORT */ +#if PREDICTOR_SUPPORT + /* FIXME: we don't need to test if predictor is available, + * if PREDICTOR_SUPPORT is set, it is. + */ + if (go->predictor_1) { + opt_buf[0] = CI_PREDICTOR_1; + opt_buf[1] = CILEN_PREDICTOR_1; + if (ccp_test(pcb, opt_buf, CILEN_PREDICTOR_1, 0) <= 0) + go->predictor_1 = 0; + } + if (go->predictor_2) { + opt_buf[0] = CI_PREDICTOR_2; + opt_buf[1] = CILEN_PREDICTOR_2; + if (ccp_test(pcb, opt_buf, CILEN_PREDICTOR_2, 0) <= 0) + go->predictor_2 = 0; + } +#endif /* PREDICTOR_SUPPORT */ +} + +/* + * ccp_cilen - Return total length of our configuration info. + */ +static int ccp_cilen(fsm *f) { + ppp_pcb *pcb = f->pcb; + ccp_options *go = &pcb->ccp_gotoptions; + + return 0 +#if BSDCOMPRESS_SUPPORT + + (go->bsd_compress? CILEN_BSD_COMPRESS: 0) +#endif /* BSDCOMPRESS_SUPPORT */ +#if DEFLATE_SUPPORT + + (go->deflate && go->deflate_correct? CILEN_DEFLATE: 0) + + (go->deflate && go->deflate_draft? CILEN_DEFLATE: 0) +#endif /* DEFLATE_SUPPORT */ +#if PREDICTOR_SUPPORT + + (go->predictor_1? CILEN_PREDICTOR_1: 0) + + (go->predictor_2? CILEN_PREDICTOR_2: 0) +#endif /* PREDICTOR_SUPPORT */ +#if MPPE_SUPPORT + + (go->mppe? CILEN_MPPE: 0) +#endif /* MPPE_SUPPORT */ + ; +} + +/* + * ccp_addci - put our requests in a packet. + */ +static void ccp_addci(fsm *f, u_char *p, int *lenp) { + ppp_pcb *pcb = f->pcb; + ccp_options *go = &pcb->ccp_gotoptions; + u_char *p0 = p; + + /* + * Add the compression types that we can receive, in decreasing + * preference order. + */ +#if MPPE_SUPPORT + if (go->mppe) { + p[0] = CI_MPPE; + p[1] = CILEN_MPPE; + MPPE_OPTS_TO_CI(go->mppe, &p[2]); + mppe_init(pcb, &pcb->mppe_decomp, go->mppe); + p += CILEN_MPPE; + } +#endif /* MPPE_SUPPORT */ +#if DEFLATE_SUPPORT + if (go->deflate) { + if (go->deflate_correct) { + p[0] = CI_DEFLATE; + p[1] = CILEN_DEFLATE; + p[2] = DEFLATE_MAKE_OPT(go->deflate_size); + p[3] = DEFLATE_CHK_SEQUENCE; + p += CILEN_DEFLATE; + } + if (go->deflate_draft) { + p[0] = CI_DEFLATE_DRAFT; + p[1] = CILEN_DEFLATE; + p[2] = p[2 - CILEN_DEFLATE]; + p[3] = DEFLATE_CHK_SEQUENCE; + p += CILEN_DEFLATE; + } + } +#endif /* DEFLATE_SUPPORT */ +#if BSDCOMPRESS_SUPPORT + if (go->bsd_compress) { + p[0] = CI_BSD_COMPRESS; + p[1] = CILEN_BSD_COMPRESS; + p[2] = BSD_MAKE_OPT(BSD_CURRENT_VERSION, go->bsd_bits); + p += CILEN_BSD_COMPRESS; + } +#endif /* BSDCOMPRESS_SUPPORT */ +#if PREDICTOR_SUPPORT + /* XXX Should Predictor 2 be preferable to Predictor 1? */ + if (go->predictor_1) { + p[0] = CI_PREDICTOR_1; + p[1] = CILEN_PREDICTOR_1; + p += CILEN_PREDICTOR_1; + } + if (go->predictor_2) { + p[0] = CI_PREDICTOR_2; + p[1] = CILEN_PREDICTOR_2; + p += CILEN_PREDICTOR_2; + } +#endif /* PREDICTOR_SUPPORT */ + + go->method = (p > p0)? p0[0]: 0; + + *lenp = p - p0; +} + +/* + * ccp_ackci - process a received configure-ack, and return + * 1 iff the packet was OK. + */ +static int ccp_ackci(fsm *f, u_char *p, int len) { + ppp_pcb *pcb = f->pcb; + ccp_options *go = &pcb->ccp_gotoptions; +#if BSDCOMPRESS_SUPPORT || PREDICTOR_SUPPORT + u_char *p0 = p; +#endif /* BSDCOMPRESS_SUPPORT || PREDICTOR_SUPPORT */ + +#if MPPE_SUPPORT + if (go->mppe) { + u_char opt_buf[CILEN_MPPE]; + + opt_buf[0] = CI_MPPE; + opt_buf[1] = CILEN_MPPE; + MPPE_OPTS_TO_CI(go->mppe, &opt_buf[2]); + if (len < CILEN_MPPE || memcmp(opt_buf, p, CILEN_MPPE)) + return 0; + p += CILEN_MPPE; + len -= CILEN_MPPE; + /* XXX Cope with first/fast ack */ + if (len == 0) + return 1; + } +#endif /* MPPE_SUPPORT */ +#if DEFLATE_SUPPORT + if (go->deflate) { + if (len < CILEN_DEFLATE + || p[0] != (go->deflate_correct? CI_DEFLATE: CI_DEFLATE_DRAFT) + || p[1] != CILEN_DEFLATE + || p[2] != DEFLATE_MAKE_OPT(go->deflate_size) + || p[3] != DEFLATE_CHK_SEQUENCE) + return 0; + p += CILEN_DEFLATE; + len -= CILEN_DEFLATE; + /* XXX Cope with first/fast ack */ + if (len == 0) + return 1; + if (go->deflate_correct && go->deflate_draft) { + if (len < CILEN_DEFLATE + || p[0] != CI_DEFLATE_DRAFT + || p[1] != CILEN_DEFLATE + || p[2] != DEFLATE_MAKE_OPT(go->deflate_size) + || p[3] != DEFLATE_CHK_SEQUENCE) + return 0; + p += CILEN_DEFLATE; + len -= CILEN_DEFLATE; + } + } +#endif /* DEFLATE_SUPPORT */ +#if BSDCOMPRESS_SUPPORT + if (go->bsd_compress) { + if (len < CILEN_BSD_COMPRESS + || p[0] != CI_BSD_COMPRESS || p[1] != CILEN_BSD_COMPRESS + || p[2] != BSD_MAKE_OPT(BSD_CURRENT_VERSION, go->bsd_bits)) + return 0; + p += CILEN_BSD_COMPRESS; + len -= CILEN_BSD_COMPRESS; + /* XXX Cope with first/fast ack */ + if (p == p0 && len == 0) + return 1; + } +#endif /* BSDCOMPRESS_SUPPORT */ +#if PREDICTOR_SUPPORT + if (go->predictor_1) { + if (len < CILEN_PREDICTOR_1 + || p[0] != CI_PREDICTOR_1 || p[1] != CILEN_PREDICTOR_1) + return 0; + p += CILEN_PREDICTOR_1; + len -= CILEN_PREDICTOR_1; + /* XXX Cope with first/fast ack */ + if (p == p0 && len == 0) + return 1; + } + if (go->predictor_2) { + if (len < CILEN_PREDICTOR_2 + || p[0] != CI_PREDICTOR_2 || p[1] != CILEN_PREDICTOR_2) + return 0; + p += CILEN_PREDICTOR_2; + len -= CILEN_PREDICTOR_2; + /* XXX Cope with first/fast ack */ + if (p == p0 && len == 0) + return 1; + } +#endif /* PREDICTOR_SUPPORT */ + + if (len != 0) + return 0; + return 1; +} + +/* + * ccp_nakci - process received configure-nak. + * Returns 1 iff the nak was OK. + */ +static int ccp_nakci(fsm *f, u_char *p, int len, int treat_as_reject) { + ppp_pcb *pcb = f->pcb; + ccp_options *go = &pcb->ccp_gotoptions; + ccp_options no; /* options we've seen already */ + ccp_options try_; /* options to ask for next time */ + LWIP_UNUSED_ARG(treat_as_reject); +#if !MPPE_SUPPORT && !DEFLATE_SUPPORT && !BSDCOMPRESS_SUPPORT + LWIP_UNUSED_ARG(p); + LWIP_UNUSED_ARG(len); +#endif /* !MPPE_SUPPORT && !DEFLATE_SUPPORT && !BSDCOMPRESS_SUPPORT */ + + memset(&no, 0, sizeof(no)); + try_ = *go; + +#if MPPE_SUPPORT + if (go->mppe && len >= CILEN_MPPE + && p[0] == CI_MPPE && p[1] == CILEN_MPPE) { + no.mppe = 1; + /* + * Peer wants us to use a different strength or other setting. + * Fail if we aren't willing to use his suggestion. + */ + MPPE_CI_TO_OPTS(&p[2], try_.mppe); + if ((try_.mppe & MPPE_OPT_STATEFUL) && pcb->settings.refuse_mppe_stateful) { + ppp_error("Refusing MPPE stateful mode offered by peer"); + try_.mppe = 0; + } else if (((go->mppe | MPPE_OPT_STATEFUL) & try_.mppe) != try_.mppe) { + /* Peer must have set options we didn't request (suggest) */ + try_.mppe = 0; + } + + if (!try_.mppe) { + ppp_error("MPPE required but peer negotiation failed"); + lcp_close(pcb, "MPPE required but peer negotiation failed"); + } + } +#endif /* MPPE_SUPPORT */ +#if DEFLATE_SUPPORT + if (go->deflate && len >= CILEN_DEFLATE + && p[0] == (go->deflate_correct? CI_DEFLATE: CI_DEFLATE_DRAFT) + && p[1] == CILEN_DEFLATE) { + no.deflate = 1; + /* + * Peer wants us to use a different code size or something. + * Stop asking for Deflate if we don't understand his suggestion. + */ + if (DEFLATE_METHOD(p[2]) != DEFLATE_METHOD_VAL + || DEFLATE_SIZE(p[2]) < DEFLATE_MIN_WORKS + || p[3] != DEFLATE_CHK_SEQUENCE) + try_.deflate = 0; + else if (DEFLATE_SIZE(p[2]) < go->deflate_size) + try_.deflate_size = DEFLATE_SIZE(p[2]); + p += CILEN_DEFLATE; + len -= CILEN_DEFLATE; + if (go->deflate_correct && go->deflate_draft + && len >= CILEN_DEFLATE && p[0] == CI_DEFLATE_DRAFT + && p[1] == CILEN_DEFLATE) { + p += CILEN_DEFLATE; + len -= CILEN_DEFLATE; + } + } +#endif /* DEFLATE_SUPPORT */ +#if BSDCOMPRESS_SUPPORT + if (go->bsd_compress && len >= CILEN_BSD_COMPRESS + && p[0] == CI_BSD_COMPRESS && p[1] == CILEN_BSD_COMPRESS) { + no.bsd_compress = 1; + /* + * Peer wants us to use a different number of bits + * or a different version. + */ + if (BSD_VERSION(p[2]) != BSD_CURRENT_VERSION) + try_.bsd_compress = 0; + else if (BSD_NBITS(p[2]) < go->bsd_bits) + try_.bsd_bits = BSD_NBITS(p[2]); + p += CILEN_BSD_COMPRESS; + len -= CILEN_BSD_COMPRESS; + } +#endif /* BSDCOMPRESS_SUPPORT */ + + /* + * Predictor-1 and 2 have no options, so they can't be Naked. + * + * There may be remaining options but we ignore them. + */ + + if (f->state != PPP_FSM_OPENED) + *go = try_; + return 1; +} + +/* + * ccp_rejci - reject some of our suggested compression methods. + */ +static int ccp_rejci(fsm *f, u_char *p, int len) { + ppp_pcb *pcb = f->pcb; + ccp_options *go = &pcb->ccp_gotoptions; + ccp_options try_; /* options to request next time */ + + try_ = *go; + + /* + * Cope with empty configure-rejects by ceasing to send + * configure-requests. + */ + if (len == 0 && pcb->ccp_all_rejected) + return -1; + +#if MPPE_SUPPORT + if (go->mppe && len >= CILEN_MPPE + && p[0] == CI_MPPE && p[1] == CILEN_MPPE) { + ppp_error("MPPE required but peer refused"); + lcp_close(pcb, "MPPE required but peer refused"); + p += CILEN_MPPE; + len -= CILEN_MPPE; + } +#endif /* MPPE_SUPPORT */ +#if DEFLATE_SUPPORT + if (go->deflate_correct && len >= CILEN_DEFLATE + && p[0] == CI_DEFLATE && p[1] == CILEN_DEFLATE) { + if (p[2] != DEFLATE_MAKE_OPT(go->deflate_size) + || p[3] != DEFLATE_CHK_SEQUENCE) + return 0; /* Rej is bad */ + try_.deflate_correct = 0; + p += CILEN_DEFLATE; + len -= CILEN_DEFLATE; + } + if (go->deflate_draft && len >= CILEN_DEFLATE + && p[0] == CI_DEFLATE_DRAFT && p[1] == CILEN_DEFLATE) { + if (p[2] != DEFLATE_MAKE_OPT(go->deflate_size) + || p[3] != DEFLATE_CHK_SEQUENCE) + return 0; /* Rej is bad */ + try_.deflate_draft = 0; + p += CILEN_DEFLATE; + len -= CILEN_DEFLATE; + } + if (!try_.deflate_correct && !try_.deflate_draft) + try_.deflate = 0; +#endif /* DEFLATE_SUPPORT */ +#if BSDCOMPRESS_SUPPORT + if (go->bsd_compress && len >= CILEN_BSD_COMPRESS + && p[0] == CI_BSD_COMPRESS && p[1] == CILEN_BSD_COMPRESS) { + if (p[2] != BSD_MAKE_OPT(BSD_CURRENT_VERSION, go->bsd_bits)) + return 0; + try_.bsd_compress = 0; + p += CILEN_BSD_COMPRESS; + len -= CILEN_BSD_COMPRESS; + } +#endif /* BSDCOMPRESS_SUPPORT */ +#if PREDICTOR_SUPPORT + if (go->predictor_1 && len >= CILEN_PREDICTOR_1 + && p[0] == CI_PREDICTOR_1 && p[1] == CILEN_PREDICTOR_1) { + try_.predictor_1 = 0; + p += CILEN_PREDICTOR_1; + len -= CILEN_PREDICTOR_1; + } + if (go->predictor_2 && len >= CILEN_PREDICTOR_2 + && p[0] == CI_PREDICTOR_2 && p[1] == CILEN_PREDICTOR_2) { + try_.predictor_2 = 0; + p += CILEN_PREDICTOR_2; + len -= CILEN_PREDICTOR_2; + } +#endif /* PREDICTOR_SUPPORT */ + + if (len != 0) + return 0; + + if (f->state != PPP_FSM_OPENED) + *go = try_; + + return 1; +} + +/* + * ccp_reqci - processed a received configure-request. + * Returns CONFACK, CONFNAK or CONFREJ and the packet modified + * appropriately. + */ +static int ccp_reqci(fsm *f, u_char *p, int *lenp, int dont_nak) { + ppp_pcb *pcb = f->pcb; + ccp_options *ho = &pcb->ccp_hisoptions; + ccp_options *ao = &pcb->ccp_allowoptions; + int ret, newret; +#if DEFLATE_SUPPORT || BSDCOMPRESS_SUPPORT + int res; + int nb; +#endif /* DEFLATE_SUPPORT || BSDCOMPRESS_SUPPORT */ + u_char *p0, *retp; + int len, clen, type; +#if MPPE_SUPPORT + u8_t rej_for_ci_mppe = 1; /* Are we rejecting based on a bad/missing */ + /* CI_MPPE, or due to other options? */ +#endif /* MPPE_SUPPORT */ + + ret = CONFACK; + retp = p0 = p; + len = *lenp; + + memset(ho, 0, sizeof(ccp_options)); + ho->method = (len > 0)? p[0]: 0; + + while (len > 0) { + newret = CONFACK; + if (len < 2 || p[1] < 2 || p[1] > len) { + /* length is bad */ + clen = len; + newret = CONFREJ; + + } else { + type = p[0]; + clen = p[1]; + + switch (type) { +#if MPPE_SUPPORT + case CI_MPPE: + if (!ao->mppe || clen != CILEN_MPPE) { + newret = CONFREJ; + break; + } + MPPE_CI_TO_OPTS(&p[2], ho->mppe); + + /* Nak if anything unsupported or unknown are set. */ + if (ho->mppe & MPPE_OPT_UNSUPPORTED) { + newret = CONFNAK; + ho->mppe &= ~MPPE_OPT_UNSUPPORTED; + } + if (ho->mppe & MPPE_OPT_UNKNOWN) { + newret = CONFNAK; + ho->mppe &= ~MPPE_OPT_UNKNOWN; + } + + /* Check state opt */ + if (ho->mppe & MPPE_OPT_STATEFUL) { + /* + * We can Nak and request stateless, but it's a + * lot easier to just assume the peer will request + * it if he can do it; stateful mode is bad over + * the Internet -- which is where we expect MPPE. + */ + if (pcb->settings.refuse_mppe_stateful) { + ppp_error("Refusing MPPE stateful mode offered by peer"); + newret = CONFREJ; + break; + } + } + + /* Find out which of {S,L} are set. */ + if ((ho->mppe & MPPE_OPT_128) + && (ho->mppe & MPPE_OPT_40)) { + /* Both are set, negotiate the strongest. */ + newret = CONFNAK; + if (ao->mppe & MPPE_OPT_128) + ho->mppe &= ~MPPE_OPT_40; + else if (ao->mppe & MPPE_OPT_40) + ho->mppe &= ~MPPE_OPT_128; + else { + newret = CONFREJ; + break; + } + } else if (ho->mppe & MPPE_OPT_128) { + if (!(ao->mppe & MPPE_OPT_128)) { + newret = CONFREJ; + break; + } + } else if (ho->mppe & MPPE_OPT_40) { + if (!(ao->mppe & MPPE_OPT_40)) { + newret = CONFREJ; + break; + } + } else { + /* Neither are set. */ + /* We cannot accept this. */ + newret = CONFNAK; + /* Give the peer our idea of what can be used, + so it can choose and confirm */ + ho->mppe = ao->mppe; + } + + /* rebuild the opts */ + MPPE_OPTS_TO_CI(ho->mppe, &p[2]); + if (newret == CONFACK) { + int mtu; + + mppe_init(pcb, &pcb->mppe_comp, ho->mppe); + /* + * We need to decrease the interface MTU by MPPE_PAD + * because MPPE frames **grow**. The kernel [must] + * allocate MPPE_PAD extra bytes in xmit buffers. + */ + mtu = netif_get_mtu(pcb); + if (mtu) + netif_set_mtu(pcb, mtu - MPPE_PAD); + else + newret = CONFREJ; + } + + /* + * We have accepted MPPE or are willing to negotiate + * MPPE parameters. A CONFREJ is due to subsequent + * (non-MPPE) processing. + */ + rej_for_ci_mppe = 0; + break; +#endif /* MPPE_SUPPORT */ +#if DEFLATE_SUPPORT + case CI_DEFLATE: + case CI_DEFLATE_DRAFT: + if (!ao->deflate || clen != CILEN_DEFLATE + || (!ao->deflate_correct && type == CI_DEFLATE) + || (!ao->deflate_draft && type == CI_DEFLATE_DRAFT)) { + newret = CONFREJ; + break; + } + + ho->deflate = 1; + ho->deflate_size = nb = DEFLATE_SIZE(p[2]); + if (DEFLATE_METHOD(p[2]) != DEFLATE_METHOD_VAL + || p[3] != DEFLATE_CHK_SEQUENCE + || nb > ao->deflate_size || nb < DEFLATE_MIN_WORKS) { + newret = CONFNAK; + if (!dont_nak) { + p[2] = DEFLATE_MAKE_OPT(ao->deflate_size); + p[3] = DEFLATE_CHK_SEQUENCE; + /* fall through to test this #bits below */ + } else + break; + } + + /* + * Check whether we can do Deflate with the window + * size they want. If the window is too big, reduce + * it until the kernel can cope and nak with that. + * We only check this for the first option. + */ + if (p == p0) { + for (;;) { + res = ccp_test(pcb, p, CILEN_DEFLATE, 1); + if (res > 0) + break; /* it's OK now */ + if (res < 0 || nb == DEFLATE_MIN_WORKS || dont_nak) { + newret = CONFREJ; + p[2] = DEFLATE_MAKE_OPT(ho->deflate_size); + break; + } + newret = CONFNAK; + --nb; + p[2] = DEFLATE_MAKE_OPT(nb); + } + } + break; +#endif /* DEFLATE_SUPPORT */ +#if BSDCOMPRESS_SUPPORT + case CI_BSD_COMPRESS: + if (!ao->bsd_compress || clen != CILEN_BSD_COMPRESS) { + newret = CONFREJ; + break; + } + + ho->bsd_compress = 1; + ho->bsd_bits = nb = BSD_NBITS(p[2]); + if (BSD_VERSION(p[2]) != BSD_CURRENT_VERSION + || nb > ao->bsd_bits || nb < BSD_MIN_BITS) { + newret = CONFNAK; + if (!dont_nak) { + p[2] = BSD_MAKE_OPT(BSD_CURRENT_VERSION, ao->bsd_bits); + /* fall through to test this #bits below */ + } else + break; + } + + /* + * Check whether we can do BSD-Compress with the code + * size they want. If the code size is too big, reduce + * it until the kernel can cope and nak with that. + * We only check this for the first option. + */ + if (p == p0) { + for (;;) { + res = ccp_test(pcb, p, CILEN_BSD_COMPRESS, 1); + if (res > 0) + break; + if (res < 0 || nb == BSD_MIN_BITS || dont_nak) { + newret = CONFREJ; + p[2] = BSD_MAKE_OPT(BSD_CURRENT_VERSION, + ho->bsd_bits); + break; + } + newret = CONFNAK; + --nb; + p[2] = BSD_MAKE_OPT(BSD_CURRENT_VERSION, nb); + } + } + break; +#endif /* BSDCOMPRESS_SUPPORT */ +#if PREDICTOR_SUPPORT + case CI_PREDICTOR_1: + if (!ao->predictor_1 || clen != CILEN_PREDICTOR_1) { + newret = CONFREJ; + break; + } + + ho->predictor_1 = 1; + if (p == p0 + && ccp_test(pcb, p, CILEN_PREDICTOR_1, 1) <= 0) { + newret = CONFREJ; + } + break; + + case CI_PREDICTOR_2: + if (!ao->predictor_2 || clen != CILEN_PREDICTOR_2) { + newret = CONFREJ; + break; + } + + ho->predictor_2 = 1; + if (p == p0 + && ccp_test(pcb, p, CILEN_PREDICTOR_2, 1) <= 0) { + newret = CONFREJ; + } + break; +#endif /* PREDICTOR_SUPPORT */ + + default: + newret = CONFREJ; + } + } + + if (newret == CONFNAK && dont_nak) + newret = CONFREJ; + if (!(newret == CONFACK || (newret == CONFNAK && ret == CONFREJ))) { + /* we're returning this option */ + if (newret == CONFREJ && ret == CONFNAK) + retp = p0; + ret = newret; + if (p != retp) + MEMCPY(retp, p, clen); + retp += clen; + } + + p += clen; + len -= clen; + } + + if (ret != CONFACK) { + if (ret == CONFREJ && *lenp == retp - p0) + pcb->ccp_all_rejected = 1; + else + *lenp = retp - p0; + } +#if MPPE_SUPPORT + if (ret == CONFREJ && ao->mppe && rej_for_ci_mppe) { + ppp_error("MPPE required but peer negotiation failed"); + lcp_close(pcb, "MPPE required but peer negotiation failed"); + } +#endif /* MPPE_SUPPORT */ + return ret; +} + +/* + * Make a string name for a compression method (or 2). + */ +static const char *method_name(ccp_options *opt, ccp_options *opt2) { + static char result[64]; +#if !DEFLATE_SUPPORT && !BSDCOMPRESS_SUPPORT + LWIP_UNUSED_ARG(opt2); +#endif /* !DEFLATE_SUPPORT && !BSDCOMPRESS_SUPPORT */ + + if (!ccp_anycompress(opt)) + return "(none)"; + switch (opt->method) { +#if MPPE_SUPPORT + case CI_MPPE: + { + char *p = result; + char *q = result + sizeof(result); /* 1 past result */ + + ppp_slprintf(p, q - p, "MPPE "); + p += 5; + if (opt->mppe & MPPE_OPT_128) { + ppp_slprintf(p, q - p, "128-bit "); + p += 8; + } + if (opt->mppe & MPPE_OPT_40) { + ppp_slprintf(p, q - p, "40-bit "); + p += 7; + } + if (opt->mppe & MPPE_OPT_STATEFUL) + ppp_slprintf(p, q - p, "stateful"); + else + ppp_slprintf(p, q - p, "stateless"); + + break; + } +#endif /* MPPE_SUPPORT */ +#if DEFLATE_SUPPORT + case CI_DEFLATE: + case CI_DEFLATE_DRAFT: + if (opt2 != NULL && opt2->deflate_size != opt->deflate_size) + ppp_slprintf(result, sizeof(result), "Deflate%s (%d/%d)", + (opt->method == CI_DEFLATE_DRAFT? "(old#)": ""), + opt->deflate_size, opt2->deflate_size); + else + ppp_slprintf(result, sizeof(result), "Deflate%s (%d)", + (opt->method == CI_DEFLATE_DRAFT? "(old#)": ""), + opt->deflate_size); + break; +#endif /* DEFLATE_SUPPORT */ +#if BSDCOMPRESS_SUPPORT + case CI_BSD_COMPRESS: + if (opt2 != NULL && opt2->bsd_bits != opt->bsd_bits) + ppp_slprintf(result, sizeof(result), "BSD-Compress (%d/%d)", + opt->bsd_bits, opt2->bsd_bits); + else + ppp_slprintf(result, sizeof(result), "BSD-Compress (%d)", + opt->bsd_bits); + break; +#endif /* BSDCOMPRESS_SUPPORT */ +#if PREDICTOR_SUPPORT + case CI_PREDICTOR_1: + return "Predictor 1"; + case CI_PREDICTOR_2: + return "Predictor 2"; +#endif /* PREDICTOR_SUPPORT */ + default: + ppp_slprintf(result, sizeof(result), "Method %d", opt->method); + } + return result; +} + +/* + * CCP has come up - inform the kernel driver and log a message. + */ +static void ccp_up(fsm *f) { + ppp_pcb *pcb = f->pcb; + ccp_options *go = &pcb->ccp_gotoptions; + ccp_options *ho = &pcb->ccp_hisoptions; + char method1[64]; + + ccp_set(pcb, 1, 1, go->method, ho->method); + if (ccp_anycompress(go)) { + if (ccp_anycompress(ho)) { + if (go->method == ho->method) { + ppp_notice("%s compression enabled", method_name(go, ho)); + } else { + ppp_strlcpy(method1, method_name(go, NULL), sizeof(method1)); + ppp_notice("%s / %s compression enabled", + method1, method_name(ho, NULL)); + } + } else + ppp_notice("%s receive compression enabled", method_name(go, NULL)); + } else if (ccp_anycompress(ho)) + ppp_notice("%s transmit compression enabled", method_name(ho, NULL)); +#if MPPE_SUPPORT + if (go->mppe) { + continue_networks(pcb); /* Bring up IP et al */ + } +#endif /* MPPE_SUPPORT */ +} + +/* + * CCP has gone down - inform the kernel driver. + */ +static void ccp_down(fsm *f) { + ppp_pcb *pcb = f->pcb; +#if MPPE_SUPPORT + ccp_options *go = &pcb->ccp_gotoptions; +#endif /* MPPE_SUPPORT */ + + if (pcb->ccp_localstate & RACK_PENDING) + UNTIMEOUT(ccp_rack_timeout, f); + pcb->ccp_localstate = 0; + ccp_set(pcb, 1, 0, 0, 0); +#if MPPE_SUPPORT + if (go->mppe) { + go->mppe = 0; + if (pcb->lcp_fsm.state == PPP_FSM_OPENED) { + /* If LCP is not already going down, make sure it does. */ + ppp_error("MPPE disabled"); + lcp_close(pcb, "MPPE disabled"); + } + } +#endif /* MPPE_SUPPORT */ +} + +#if PRINTPKT_SUPPORT +/* + * Print the contents of a CCP packet. + */ +static const char* const ccp_codenames[] = { + "ConfReq", "ConfAck", "ConfNak", "ConfRej", + "TermReq", "TermAck", "CodeRej", + NULL, NULL, NULL, NULL, NULL, NULL, + "ResetReq", "ResetAck", +}; + +static int ccp_printpkt(const u_char *p, int plen, void (*printer) (void *, const char *, ...), void *arg) { + const u_char *p0, *optend; + int code, id, len; + int optlen; + + p0 = p; + if (plen < HEADERLEN) + return 0; + code = p[0]; + id = p[1]; + len = (p[2] << 8) + p[3]; + if (len < HEADERLEN || len > plen) + return 0; + + if (code >= 1 && code <= (int)LWIP_ARRAYSIZE(ccp_codenames) && ccp_codenames[code-1] != NULL) + printer(arg, " %s", ccp_codenames[code-1]); + else + printer(arg, " code=0x%x", code); + printer(arg, " id=0x%x", id); + len -= HEADERLEN; + p += HEADERLEN; + + switch (code) { + case CONFREQ: + case CONFACK: + case CONFNAK: + case CONFREJ: + /* print list of possible compression methods */ + while (len >= 2) { + code = p[0]; + optlen = p[1]; + if (optlen < 2 || optlen > len) + break; + printer(arg, " <"); + len -= optlen; + optend = p + optlen; + switch (code) { +#if MPPE_SUPPORT + case CI_MPPE: + if (optlen >= CILEN_MPPE) { + u_char mppe_opts; + + MPPE_CI_TO_OPTS(&p[2], mppe_opts); + printer(arg, "mppe %s %s %s %s %s %s%s", + (p[2] & MPPE_H_BIT)? "+H": "-H", + (p[5] & MPPE_M_BIT)? "+M": "-M", + (p[5] & MPPE_S_BIT)? "+S": "-S", + (p[5] & MPPE_L_BIT)? "+L": "-L", + (p[5] & MPPE_D_BIT)? "+D": "-D", + (p[5] & MPPE_C_BIT)? "+C": "-C", + (mppe_opts & MPPE_OPT_UNKNOWN)? " +U": ""); + if (mppe_opts & MPPE_OPT_UNKNOWN) + printer(arg, " (%.2x %.2x %.2x %.2x)", + p[2], p[3], p[4], p[5]); + p += CILEN_MPPE; + } + break; +#endif /* MPPE_SUPPORT */ +#if DEFLATE_SUPPORT + case CI_DEFLATE: + case CI_DEFLATE_DRAFT: + if (optlen >= CILEN_DEFLATE) { + printer(arg, "deflate%s %d", + (code == CI_DEFLATE_DRAFT? "(old#)": ""), + DEFLATE_SIZE(p[2])); + if (DEFLATE_METHOD(p[2]) != DEFLATE_METHOD_VAL) + printer(arg, " method %d", DEFLATE_METHOD(p[2])); + if (p[3] != DEFLATE_CHK_SEQUENCE) + printer(arg, " check %d", p[3]); + p += CILEN_DEFLATE; + } + break; +#endif /* DEFLATE_SUPPORT */ +#if BSDCOMPRESS_SUPPORT + case CI_BSD_COMPRESS: + if (optlen >= CILEN_BSD_COMPRESS) { + printer(arg, "bsd v%d %d", BSD_VERSION(p[2]), + BSD_NBITS(p[2])); + p += CILEN_BSD_COMPRESS; + } + break; +#endif /* BSDCOMPRESS_SUPPORT */ +#if PREDICTOR_SUPPORT + case CI_PREDICTOR_1: + if (optlen >= CILEN_PREDICTOR_1) { + printer(arg, "predictor 1"); + p += CILEN_PREDICTOR_1; + } + break; + case CI_PREDICTOR_2: + if (optlen >= CILEN_PREDICTOR_2) { + printer(arg, "predictor 2"); + p += CILEN_PREDICTOR_2; + } + break; +#endif /* PREDICTOR_SUPPORT */ + default: + break; + } + while (p < optend) + printer(arg, " %.2x", *p++); + printer(arg, ">"); + } + break; + + case TERMACK: + case TERMREQ: + if (len > 0 && *p >= ' ' && *p < 0x7f) { + ppp_print_string(p, len, printer, arg); + p += len; + len = 0; + } + break; + default: + break; + } + + /* dump out the rest of the packet in hex */ + while (--len >= 0) + printer(arg, " %.2x", *p++); + + return p - p0; +} +#endif /* PRINTPKT_SUPPORT */ + +#if PPP_DATAINPUT +/* + * We have received a packet that the decompressor failed to + * decompress. Here we would expect to issue a reset-request, but + * Motorola has a patent on resetting the compressor as a result of + * detecting an error in the decompressed data after decompression. + * (See US patent 5,130,993; international patent publication number + * WO 91/10289; Australian patent 73296/91.) + * + * So we ask the kernel whether the error was detected after + * decompression; if it was, we take CCP down, thus disabling + * compression :-(, otherwise we issue the reset-request. + */ +static void ccp_datainput(ppp_pcb *pcb, u_char *pkt, int len) { + fsm *f; +#if MPPE_SUPPORT + ccp_options *go = &pcb->ccp_gotoptions; +#endif /* MPPE_SUPPORT */ + LWIP_UNUSED_ARG(pkt); + LWIP_UNUSED_ARG(len); + + f = &pcb->ccp_fsm; + if (f->state == PPP_FSM_OPENED) { + if (ccp_fatal_error(pcb)) { + /* + * Disable compression by taking CCP down. + */ + ppp_error("Lost compression sync: disabling compression"); + ccp_close(pcb, "Lost compression sync"); +#if MPPE_SUPPORT + /* + * If we were doing MPPE, we must also take the link down. + */ + if (go->mppe) { + ppp_error("Too many MPPE errors, closing LCP"); + lcp_close(pcb, "Too many MPPE errors"); + } +#endif /* MPPE_SUPPORT */ + } else { + /* + * Send a reset-request to reset the peer's compressor. + * We don't do that if we are still waiting for an + * acknowledgement to a previous reset-request. + */ + if (!(pcb->ccp_localstate & RACK_PENDING)) { + fsm_sdata(f, CCP_RESETREQ, f->reqid = ++f->id, NULL, 0); + TIMEOUT(ccp_rack_timeout, f, RACKTIMEOUT); + pcb->ccp_localstate |= RACK_PENDING; + } else + pcb->ccp_localstate |= RREQ_REPEAT; + } + } +} +#endif /* PPP_DATAINPUT */ + +/* + * We have received a packet that the decompressor failed to + * decompress. Issue a reset-request. + */ +void ccp_resetrequest(ppp_pcb *pcb) { + fsm *f = &pcb->ccp_fsm; + + if (f->state != PPP_FSM_OPENED) + return; + + /* + * Send a reset-request to reset the peer's compressor. + * We don't do that if we are still waiting for an + * acknowledgement to a previous reset-request. + */ + if (!(pcb->ccp_localstate & RACK_PENDING)) { + fsm_sdata(f, CCP_RESETREQ, f->reqid = ++f->id, NULL, 0); + TIMEOUT(ccp_rack_timeout, f, RACKTIMEOUT); + pcb->ccp_localstate |= RACK_PENDING; + } else + pcb->ccp_localstate |= RREQ_REPEAT; +} + +/* + * Timeout waiting for reset-ack. + */ +static void ccp_rack_timeout(void *arg) { + fsm *f = (fsm*)arg; + ppp_pcb *pcb = f->pcb; + + if (f->state == PPP_FSM_OPENED && (pcb->ccp_localstate & RREQ_REPEAT)) { + fsm_sdata(f, CCP_RESETREQ, f->reqid, NULL, 0); + TIMEOUT(ccp_rack_timeout, f, RACKTIMEOUT); + pcb->ccp_localstate &= ~RREQ_REPEAT; + } else + pcb->ccp_localstate &= ~RACK_PENDING; +} + +#endif /* PPP_SUPPORT && CCP_SUPPORT */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/chap-md5.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/chap-md5.c new file mode 100644 index 0000000000000000000000000000000000000000..88f069f032cd5b232067a0e1e9f2b4c1bbc02b11 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/chap-md5.c @@ -0,0 +1,126 @@ +/* + * chap-md5.c - New CHAP/MD5 implementation. + * + * Copyright (c) 2003 Paul Mackerras. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. The name(s) of the authors of this software must not be used to + * endorse or promote products derived from this software without + * prior written permission. + * + * 3. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by Paul Mackerras + * ". + * + * THE AUTHORS OF THIS SOFTWARE DISCLAIM ALL WARRANTIES WITH REGARD TO + * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY + * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include "netif/ppp/ppp_opts.h" +#if PPP_SUPPORT && CHAP_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +#if 0 /* UNUSED */ +#include +#include +#endif /* UNUSED */ + +#include "netif/ppp/ppp_impl.h" + +#include "netif/ppp/chap-new.h" +#include "netif/ppp/chap-md5.h" +#include "netif/ppp/magic.h" +#include "netif/ppp/pppcrypt.h" + +#define MD5_HASH_SIZE 16 +#define MD5_MIN_CHALLENGE 17 +#define MD5_MAX_CHALLENGE 24 +#define MD5_MIN_MAX_POWER_OF_TWO_CHALLENGE 3 /* 2^3-1 = 7, 17+7 = 24 */ + +#if PPP_SERVER +static void chap_md5_generate_challenge(ppp_pcb *pcb, unsigned char *cp) { + int clen; + LWIP_UNUSED_ARG(pcb); + + clen = MD5_MIN_CHALLENGE + magic_pow(MD5_MIN_MAX_POWER_OF_TWO_CHALLENGE); + *cp++ = clen; + magic_random_bytes(cp, clen); +} + +static int chap_md5_verify_response(ppp_pcb *pcb, int id, const char *name, + const unsigned char *secret, int secret_len, + const unsigned char *challenge, const unsigned char *response, + char *message, int message_space) { + lwip_md5_context ctx; + unsigned char idbyte = id; + unsigned char hash[MD5_HASH_SIZE]; + int challenge_len, response_len; + LWIP_UNUSED_ARG(name); + LWIP_UNUSED_ARG(pcb); + + challenge_len = *challenge++; + response_len = *response++; + if (response_len == MD5_HASH_SIZE) { + /* Generate hash of ID, secret, challenge */ + lwip_md5_init(&ctx); + lwip_md5_starts(&ctx); + lwip_md5_update(&ctx, &idbyte, 1); + lwip_md5_update(&ctx, secret, secret_len); + lwip_md5_update(&ctx, challenge, challenge_len); + lwip_md5_finish(&ctx, hash); + lwip_md5_free(&ctx); + + /* Test if our hash matches the peer's response */ + if (memcmp(hash, response, MD5_HASH_SIZE) == 0) { + ppp_slprintf(message, message_space, "Access granted"); + return 1; + } + } + ppp_slprintf(message, message_space, "Access denied"); + return 0; +} +#endif /* PPP_SERVER */ + +static void chap_md5_make_response(ppp_pcb *pcb, unsigned char *response, int id, const char *our_name, + const unsigned char *challenge, const char *secret, int secret_len, + unsigned char *private_) { + lwip_md5_context ctx; + unsigned char idbyte = id; + int challenge_len = *challenge++; + LWIP_UNUSED_ARG(our_name); + LWIP_UNUSED_ARG(private_); + LWIP_UNUSED_ARG(pcb); + + lwip_md5_init(&ctx); + lwip_md5_starts(&ctx); + lwip_md5_update(&ctx, &idbyte, 1); + lwip_md5_update(&ctx, (const u_char *)secret, secret_len); + lwip_md5_update(&ctx, challenge, challenge_len); + lwip_md5_finish(&ctx, &response[1]); + lwip_md5_free(&ctx); + response[0] = MD5_HASH_SIZE; +} + +const struct chap_digest_type md5_digest = { + CHAP_MD5, /* code */ +#if PPP_SERVER + chap_md5_generate_challenge, + chap_md5_verify_response, +#endif /* PPP_SERVER */ + chap_md5_make_response, + NULL, /* check_success */ + NULL, /* handle_failure */ +}; + +#endif /* PPP_SUPPORT && CHAP_SUPPORT */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/chap-new.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/chap-new.c new file mode 100644 index 0000000000000000000000000000000000000000..485122d272aad4230ba1fceb6615b667653fab0c --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/chap-new.c @@ -0,0 +1,677 @@ +/* + * chap-new.c - New CHAP implementation. + * + * Copyright (c) 2003 Paul Mackerras. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. The name(s) of the authors of this software must not be used to + * endorse or promote products derived from this software without + * prior written permission. + * + * 3. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by Paul Mackerras + * ". + * + * THE AUTHORS OF THIS SOFTWARE DISCLAIM ALL WARRANTIES WITH REGARD TO + * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY + * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include "netif/ppp/ppp_opts.h" +#if PPP_SUPPORT && CHAP_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +#if 0 /* UNUSED */ +#include +#include +#endif /* UNUSED */ + +#include "netif/ppp/ppp_impl.h" + +#if 0 /* UNUSED */ +#include "session.h" +#endif /* UNUSED */ + +#include "netif/ppp/chap-new.h" +#include "netif/ppp/chap-md5.h" +#if MSCHAP_SUPPORT +#include "netif/ppp/chap_ms.h" +#endif +#include "netif/ppp/magic.h" + +#if 0 /* UNUSED */ +/* Hook for a plugin to validate CHAP challenge */ +int (*chap_verify_hook)(const char *name, const char *ourname, int id, + const struct chap_digest_type *digest, + const unsigned char *challenge, const unsigned char *response, + char *message, int message_space) = NULL; +#endif /* UNUSED */ + +#if PPP_OPTIONS +/* + * Command-line options. + */ +static option_t chap_option_list[] = { + { "chap-restart", o_int, &chap_timeout_time, + "Set timeout for CHAP", OPT_PRIO }, + { "chap-max-challenge", o_int, &pcb->settings.chap_max_transmits, + "Set max #xmits for challenge", OPT_PRIO }, + { "chap-interval", o_int, &pcb->settings.chap_rechallenge_time, + "Set interval for rechallenge", OPT_PRIO }, + { NULL } +}; +#endif /* PPP_OPTIONS */ + + +/* Values for flags in chap_client_state and chap_server_state */ +#define LOWERUP 1 +#define AUTH_STARTED 2 +#define AUTH_DONE 4 +#define AUTH_FAILED 8 +#define TIMEOUT_PENDING 0x10 +#define CHALLENGE_VALID 0x20 + +/* + * Prototypes. + */ +static void chap_init(ppp_pcb *pcb); +static void chap_lowerup(ppp_pcb *pcb); +static void chap_lowerdown(ppp_pcb *pcb); +#if PPP_SERVER +static void chap_timeout(void *arg); +static void chap_generate_challenge(ppp_pcb *pcb); +static void chap_handle_response(ppp_pcb *pcb, int code, + unsigned char *pkt, int len); +static int chap_verify_response(ppp_pcb *pcb, const char *name, const char *ourname, int id, + const struct chap_digest_type *digest, + const unsigned char *challenge, const unsigned char *response, + char *message, int message_space); +#endif /* PPP_SERVER */ +static void chap_respond(ppp_pcb *pcb, int id, + unsigned char *pkt, int len); +static void chap_handle_status(ppp_pcb *pcb, int code, int id, + unsigned char *pkt, int len); +static void chap_protrej(ppp_pcb *pcb); +static void chap_input(ppp_pcb *pcb, unsigned char *pkt, int pktlen); +#if PRINTPKT_SUPPORT +static int chap_print_pkt(const unsigned char *p, int plen, + void (*printer) (void *, const char *, ...), void *arg); +#endif /* PRINTPKT_SUPPORT */ + +/* List of digest types that we know about */ +static const struct chap_digest_type* const chap_digests[] = { + &md5_digest, +#if MSCHAP_SUPPORT + &chapms_digest, + &chapms2_digest, +#endif /* MSCHAP_SUPPORT */ + NULL +}; + +/* + * chap_init - reset to initial state. + */ +static void chap_init(ppp_pcb *pcb) { + LWIP_UNUSED_ARG(pcb); + +#if 0 /* Not necessary, everything is cleared in ppp_new() */ + memset(&pcb->chap_client, 0, sizeof(chap_client_state)); +#if PPP_SERVER + memset(&pcb->chap_server, 0, sizeof(chap_server_state)); +#endif /* PPP_SERVER */ +#endif /* 0 */ +} + +/* + * chap_lowerup - we can start doing stuff now. + */ +static void chap_lowerup(ppp_pcb *pcb) { + + pcb->chap_client.flags |= LOWERUP; +#if PPP_SERVER + pcb->chap_server.flags |= LOWERUP; + if (pcb->chap_server.flags & AUTH_STARTED) + chap_timeout(pcb); +#endif /* PPP_SERVER */ +} + +static void chap_lowerdown(ppp_pcb *pcb) { + + pcb->chap_client.flags = 0; +#if PPP_SERVER + if (pcb->chap_server.flags & TIMEOUT_PENDING) + UNTIMEOUT(chap_timeout, pcb); + pcb->chap_server.flags = 0; +#endif /* PPP_SERVER */ +} + +#if PPP_SERVER +/* + * chap_auth_peer - Start authenticating the peer. + * If the lower layer is already up, we start sending challenges, + * otherwise we wait for the lower layer to come up. + */ +void chap_auth_peer(ppp_pcb *pcb, const char *our_name, int digest_code) { + const struct chap_digest_type *dp; + int i; + + if (pcb->chap_server.flags & AUTH_STARTED) { + ppp_error("CHAP: peer authentication already started!"); + return; + } + for (i = 0; (dp = chap_digests[i]) != NULL; ++i) + if (dp->code == digest_code) + break; + if (dp == NULL) + ppp_fatal("CHAP digest 0x%x requested but not available", + digest_code); + + pcb->chap_server.digest = dp; + pcb->chap_server.name = our_name; + /* Start with a random ID value */ + pcb->chap_server.id = magic(); + pcb->chap_server.flags |= AUTH_STARTED; + if (pcb->chap_server.flags & LOWERUP) + chap_timeout(pcb); +} +#endif /* PPP_SERVER */ + +/* + * chap_auth_with_peer - Prepare to authenticate ourselves to the peer. + * There isn't much to do until we receive a challenge. + */ +void chap_auth_with_peer(ppp_pcb *pcb, const char *our_name, int digest_code) { + const struct chap_digest_type *dp; + int i; + + if(NULL == our_name) + return; + + if (pcb->chap_client.flags & AUTH_STARTED) { + ppp_error("CHAP: authentication with peer already started!"); + return; + } + for (i = 0; (dp = chap_digests[i]) != NULL; ++i) + if (dp->code == digest_code) + break; + + if (dp == NULL) + ppp_fatal("CHAP digest 0x%x requested but not available", + digest_code); + + pcb->chap_client.digest = dp; + pcb->chap_client.name = our_name; + pcb->chap_client.flags |= AUTH_STARTED; +} + +#if PPP_SERVER +/* + * chap_timeout - It's time to send another challenge to the peer. + * This could be either a retransmission of a previous challenge, + * or a new challenge to start re-authentication. + */ +static void chap_timeout(void *arg) { + ppp_pcb *pcb = (ppp_pcb*)arg; + struct pbuf *p; + + pcb->chap_server.flags &= ~TIMEOUT_PENDING; + if ((pcb->chap_server.flags & CHALLENGE_VALID) == 0) { + pcb->chap_server.challenge_xmits = 0; + chap_generate_challenge(pcb); + pcb->chap_server.flags |= CHALLENGE_VALID; + } else if (pcb->chap_server.challenge_xmits >= pcb->settings.chap_max_transmits) { + pcb->chap_server.flags &= ~CHALLENGE_VALID; + pcb->chap_server.flags |= AUTH_DONE | AUTH_FAILED; + auth_peer_fail(pcb, PPP_CHAP); + return; + } + + p = pbuf_alloc(PBUF_RAW, (u16_t)(pcb->chap_server.challenge_pktlen), PPP_CTRL_PBUF_TYPE); + if(NULL == p) + return; + if(p->tot_len != p->len) { + pbuf_free(p); + return; + } + MEMCPY(p->payload, pcb->chap_server.challenge, pcb->chap_server.challenge_pktlen); + ppp_write(pcb, p); + ++pcb->chap_server.challenge_xmits; + pcb->chap_server.flags |= TIMEOUT_PENDING; + TIMEOUT(chap_timeout, arg, pcb->settings.chap_timeout_time); +} + +/* + * chap_generate_challenge - generate a challenge string and format + * the challenge packet in pcb->chap_server.challenge_pkt. + */ +static void chap_generate_challenge(ppp_pcb *pcb) { + int clen = 1, nlen, len; + unsigned char *p; + + p = pcb->chap_server.challenge; + MAKEHEADER(p, PPP_CHAP); + p += CHAP_HDRLEN; + pcb->chap_server.digest->generate_challenge(pcb, p); + clen = *p; + nlen = strlen(pcb->chap_server.name); + memcpy(p + 1 + clen, pcb->chap_server.name, nlen); + + len = CHAP_HDRLEN + 1 + clen + nlen; + pcb->chap_server.challenge_pktlen = PPP_HDRLEN + len; + + p = pcb->chap_server.challenge + PPP_HDRLEN; + p[0] = CHAP_CHALLENGE; + p[1] = ++pcb->chap_server.id; + p[2] = len >> 8; + p[3] = len; +} + +/* + * chap_handle_response - check the response to our challenge. + */ +static void chap_handle_response(ppp_pcb *pcb, int id, + unsigned char *pkt, int len) { + int response_len, ok, mlen; + const unsigned char *response; + unsigned char *outp; + struct pbuf *p; + const char *name = NULL; /* initialized to shut gcc up */ +#if 0 /* UNUSED */ + int (*verifier)(const char *, const char *, int, const struct chap_digest_type *, + const unsigned char *, const unsigned char *, char *, int); +#endif /* UNUSED */ + char rname[MAXNAMELEN+1]; + char message[256]; + + if ((pcb->chap_server.flags & LOWERUP) == 0) + return; + if (id != pcb->chap_server.challenge[PPP_HDRLEN+1] || len < 2) + return; + if (pcb->chap_server.flags & CHALLENGE_VALID) { + response = pkt; + GETCHAR(response_len, pkt); + len -= response_len + 1; /* length of name */ + name = (char *)pkt + response_len; + if (len < 0) + return; + + if (pcb->chap_server.flags & TIMEOUT_PENDING) { + pcb->chap_server.flags &= ~TIMEOUT_PENDING; + UNTIMEOUT(chap_timeout, pcb); + } +#if PPP_REMOTENAME + if (pcb->settings.explicit_remote) { + name = pcb->remote_name; + } else +#endif /* PPP_REMOTENAME */ + { + /* Null terminate and clean remote name. */ + ppp_slprintf(rname, sizeof(rname), "%.*v", len, name); + name = rname; + } + +#if 0 /* UNUSED */ + if (chap_verify_hook) + verifier = chap_verify_hook; + else + verifier = chap_verify_response; + ok = (*verifier)(name, pcb->chap_server.name, id, pcb->chap_server.digest, + pcb->chap_server.challenge + PPP_HDRLEN + CHAP_HDRLEN, + response, pcb->chap_server.message, sizeof(pcb->chap_server.message)); +#endif /* UNUSED */ + ok = chap_verify_response(pcb, name, pcb->chap_server.name, id, pcb->chap_server.digest, + pcb->chap_server.challenge + PPP_HDRLEN + CHAP_HDRLEN, + response, message, sizeof(message)); +#if 0 /* UNUSED */ + if (!ok || !auth_number()) { +#endif /* UNUSED */ + if (!ok) { + pcb->chap_server.flags |= AUTH_FAILED; + ppp_warn("Peer %q failed CHAP authentication", name); + } + } else if ((pcb->chap_server.flags & AUTH_DONE) == 0) + return; + + /* send the response */ + mlen = strlen(message); + len = CHAP_HDRLEN + mlen; + p = pbuf_alloc(PBUF_RAW, (u16_t)(PPP_HDRLEN +len), PPP_CTRL_PBUF_TYPE); + if(NULL == p) + return; + if(p->tot_len != p->len) { + pbuf_free(p); + return; + } + + outp = (unsigned char *)p->payload; + MAKEHEADER(outp, PPP_CHAP); + + outp[0] = (pcb->chap_server.flags & AUTH_FAILED)? CHAP_FAILURE: CHAP_SUCCESS; + outp[1] = id; + outp[2] = len >> 8; + outp[3] = len; + if (mlen > 0) + memcpy(outp + CHAP_HDRLEN, message, mlen); + ppp_write(pcb, p); + + if (pcb->chap_server.flags & CHALLENGE_VALID) { + pcb->chap_server.flags &= ~CHALLENGE_VALID; + if (!(pcb->chap_server.flags & AUTH_DONE) && !(pcb->chap_server.flags & AUTH_FAILED)) { + +#if 0 /* UNUSED */ + /* + * Auth is OK, so now we need to check session restrictions + * to ensure everything is OK, but only if we used a + * plugin, and only if we're configured to check. This + * allows us to do PAM checks on PPP servers that + * authenticate against ActiveDirectory, and use AD for + * account info (like when using Winbind integrated with + * PAM). + */ + if (session_mgmt && + session_check(name, NULL, devnam, NULL) == 0) { + pcb->chap_server.flags |= AUTH_FAILED; + ppp_warn("Peer %q failed CHAP Session verification", name); + } +#endif /* UNUSED */ + + } + if (pcb->chap_server.flags & AUTH_FAILED) { + auth_peer_fail(pcb, PPP_CHAP); + } else { + if ((pcb->chap_server.flags & AUTH_DONE) == 0) + auth_peer_success(pcb, PPP_CHAP, + pcb->chap_server.digest->code, + name, strlen(name)); + if (pcb->settings.chap_rechallenge_time) { + pcb->chap_server.flags |= TIMEOUT_PENDING; + TIMEOUT(chap_timeout, pcb, + pcb->settings.chap_rechallenge_time); + } + } + pcb->chap_server.flags |= AUTH_DONE; + } +} + +/* + * chap_verify_response - check whether the peer's response matches + * what we think it should be. Returns 1 if it does (authentication + * succeeded), or 0 if it doesn't. + */ +static int chap_verify_response(ppp_pcb *pcb, const char *name, const char *ourname, int id, + const struct chap_digest_type *digest, + const unsigned char *challenge, const unsigned char *response, + char *message, int message_space) { + int ok; + unsigned char secret[MAXSECRETLEN]; + int secret_len; + + /* Get the secret that the peer is supposed to know */ + if (!get_secret(pcb, name, ourname, (char *)secret, &secret_len, 1)) { + ppp_error("No CHAP secret found for authenticating %q", name); + return 0; + } + ok = digest->verify_response(pcb, id, name, secret, secret_len, challenge, + response, message, message_space); + memset(secret, 0, sizeof(secret)); + + return ok; +} +#endif /* PPP_SERVER */ + +/* + * chap_respond - Generate and send a response to a challenge. + */ +static void chap_respond(ppp_pcb *pcb, int id, + unsigned char *pkt, int len) { + int clen, nlen; + int secret_len; + struct pbuf *p; + u_char *outp; + char rname[MAXNAMELEN+1]; + char secret[MAXSECRETLEN+1]; + + p = pbuf_alloc(PBUF_RAW, (u16_t)(RESP_MAX_PKTLEN), PPP_CTRL_PBUF_TYPE); + if(NULL == p) + return; + if(p->tot_len != p->len) { + pbuf_free(p); + return; + } + + if ((pcb->chap_client.flags & (LOWERUP | AUTH_STARTED)) != (LOWERUP | AUTH_STARTED)) + return; /* not ready */ + if (len < 2 || len < pkt[0] + 1) + return; /* too short */ + clen = pkt[0]; + nlen = len - (clen + 1); + + /* Null terminate and clean remote name. */ + ppp_slprintf(rname, sizeof(rname), "%.*v", nlen, pkt + clen + 1); + +#if PPP_REMOTENAME + /* Microsoft doesn't send their name back in the PPP packet */ + if (pcb->settings.explicit_remote || (pcb->settings.remote_name[0] != 0 && rname[0] == 0)) + strlcpy(rname, pcb->settings.remote_name, sizeof(rname)); +#endif /* PPP_REMOTENAME */ + + /* get secret for authenticating ourselves with the specified host */ + if (!get_secret(pcb, pcb->chap_client.name, rname, secret, &secret_len, 0)) { + secret_len = 0; /* assume null secret if can't find one */ + ppp_warn("No CHAP secret found for authenticating us to %q", rname); + } + + outp = (u_char*)p->payload; + MAKEHEADER(outp, PPP_CHAP); + outp += CHAP_HDRLEN; + + pcb->chap_client.digest->make_response(pcb, outp, id, pcb->chap_client.name, pkt, + secret, secret_len, pcb->chap_client.priv); + memset(secret, 0, secret_len); + + clen = *outp; + nlen = strlen(pcb->chap_client.name); + memcpy(outp + clen + 1, pcb->chap_client.name, nlen); + + outp = (u_char*)p->payload + PPP_HDRLEN; + len = CHAP_HDRLEN + clen + 1 + nlen; + outp[0] = CHAP_RESPONSE; + outp[1] = id; + outp[2] = len >> 8; + outp[3] = len; + + pbuf_realloc(p, PPP_HDRLEN + len); + ppp_write(pcb, p); +} + +static void chap_handle_status(ppp_pcb *pcb, int code, int id, + unsigned char *pkt, int len) { + const char *msg = NULL; + LWIP_UNUSED_ARG(id); + + if ((pcb->chap_client.flags & (AUTH_DONE|AUTH_STARTED|LOWERUP)) + != (AUTH_STARTED|LOWERUP)) + return; + pcb->chap_client.flags |= AUTH_DONE; + + if (code == CHAP_SUCCESS) { + /* used for MS-CHAP v2 mutual auth, yuck */ + if (pcb->chap_client.digest->check_success != NULL) { + if (!(*pcb->chap_client.digest->check_success)(pcb, pkt, len, pcb->chap_client.priv)) + code = CHAP_FAILURE; + } else + msg = "CHAP authentication succeeded"; + } else { + if (pcb->chap_client.digest->handle_failure != NULL) + (*pcb->chap_client.digest->handle_failure)(pcb, pkt, len); + else + msg = "CHAP authentication failed"; + } + if (msg) { + if (len > 0) + ppp_info("%s: %.*v", msg, len, pkt); + else + ppp_info("%s", msg); + } + if (code == CHAP_SUCCESS) + auth_withpeer_success(pcb, PPP_CHAP, pcb->chap_client.digest->code); + else { + pcb->chap_client.flags |= AUTH_FAILED; + ppp_error("CHAP authentication failed"); + auth_withpeer_fail(pcb, PPP_CHAP); + } +} + +static void chap_input(ppp_pcb *pcb, unsigned char *pkt, int pktlen) { + unsigned char code, id; + int len; + + if (pktlen < CHAP_HDRLEN) + return; + GETCHAR(code, pkt); + GETCHAR(id, pkt); + GETSHORT(len, pkt); + if (len < CHAP_HDRLEN || len > pktlen) + return; + len -= CHAP_HDRLEN; + + switch (code) { + case CHAP_CHALLENGE: + chap_respond(pcb, id, pkt, len); + break; +#if PPP_SERVER + case CHAP_RESPONSE: + chap_handle_response(pcb, id, pkt, len); + break; +#endif /* PPP_SERVER */ + case CHAP_FAILURE: + case CHAP_SUCCESS: + chap_handle_status(pcb, code, id, pkt, len); + break; + default: + break; + } +} + +static void chap_protrej(ppp_pcb *pcb) { + +#if PPP_SERVER + if (pcb->chap_server.flags & TIMEOUT_PENDING) { + pcb->chap_server.flags &= ~TIMEOUT_PENDING; + UNTIMEOUT(chap_timeout, pcb); + } + if (pcb->chap_server.flags & AUTH_STARTED) { + pcb->chap_server.flags = 0; + auth_peer_fail(pcb, PPP_CHAP); + } +#endif /* PPP_SERVER */ + if ((pcb->chap_client.flags & (AUTH_STARTED|AUTH_DONE)) == AUTH_STARTED) { + pcb->chap_client.flags &= ~AUTH_STARTED; + ppp_error("CHAP authentication failed due to protocol-reject"); + auth_withpeer_fail(pcb, PPP_CHAP); + } +} + +#if PRINTPKT_SUPPORT +/* + * chap_print_pkt - print the contents of a CHAP packet. + */ +static const char* const chap_code_names[] = { + "Challenge", "Response", "Success", "Failure" +}; + +static int chap_print_pkt(const unsigned char *p, int plen, + void (*printer) (void *, const char *, ...), void *arg) { + int code, id, len; + int clen, nlen; + unsigned char x; + + if (plen < CHAP_HDRLEN) + return 0; + GETCHAR(code, p); + GETCHAR(id, p); + GETSHORT(len, p); + if (len < CHAP_HDRLEN || len > plen) + return 0; + + if (code >= 1 && code <= (int)LWIP_ARRAYSIZE(chap_code_names)) + printer(arg, " %s", chap_code_names[code-1]); + else + printer(arg, " code=0x%x", code); + printer(arg, " id=0x%x", id); + len -= CHAP_HDRLEN; + switch (code) { + case CHAP_CHALLENGE: + case CHAP_RESPONSE: + if (len < 1) + break; + clen = p[0]; + if (len < clen + 1) + break; + ++p; + nlen = len - clen - 1; + printer(arg, " <"); + for (; clen > 0; --clen) { + GETCHAR(x, p); + printer(arg, "%.2x", x); + } + printer(arg, ">, name = "); + ppp_print_string(p, nlen, printer, arg); + break; + case CHAP_FAILURE: + case CHAP_SUCCESS: + printer(arg, " "); + ppp_print_string(p, len, printer, arg); + break; + default: + for (clen = len; clen > 0; --clen) { + GETCHAR(x, p); + printer(arg, " %.2x", x); + } + /* no break */ + } + + return len + CHAP_HDRLEN; +} +#endif /* PRINTPKT_SUPPORT */ + +const struct protent chap_protent = { + PPP_CHAP, + chap_init, + chap_input, + chap_protrej, + chap_lowerup, + chap_lowerdown, + NULL, /* open */ + NULL, /* close */ +#if PRINTPKT_SUPPORT + chap_print_pkt, +#endif /* PRINTPKT_SUPPORT */ +#if PPP_DATAINPUT + NULL, /* datainput */ +#endif /* PPP_DATAINPUT */ +#if PRINTPKT_SUPPORT + "CHAP", /* name */ + NULL, /* data_name */ +#endif /* PRINTPKT_SUPPORT */ +#if PPP_OPTIONS + chap_option_list, + NULL, /* check_options */ +#endif /* PPP_OPTIONS */ +#if DEMAND_SUPPORT + NULL, + NULL +#endif /* DEMAND_SUPPORT */ +}; + +#endif /* PPP_SUPPORT && CHAP_SUPPORT */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/chap_ms.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/chap_ms.c new file mode 100644 index 0000000000000000000000000000000000000000..5a989c9b7eb4fd246d92eead45761ff86b654614 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/chap_ms.c @@ -0,0 +1,962 @@ +/* + * chap_ms.c - Microsoft MS-CHAP compatible implementation. + * + * Copyright (c) 1995 Eric Rosenquist. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The name(s) of the authors of this software must not be used to + * endorse or promote products derived from this software without + * prior written permission. + * + * THE AUTHORS OF THIS SOFTWARE DISCLAIM ALL WARRANTIES WITH REGARD TO + * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY + * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +/* + * Modifications by Lauri Pesonen / lpesonen@clinet.fi, april 1997 + * + * Implemented LANManager type password response to MS-CHAP challenges. + * Now pppd provides both NT style and LANMan style blocks, and the + * prefered is set by option "ms-lanman". Default is to use NT. + * The hash text (StdText) was taken from Win95 RASAPI32.DLL. + * + * You should also use DOMAIN\\USERNAME as described in README.MSCHAP80 + */ + +/* + * Modifications by Frank Cusack, frank@google.com, March 2002. + * + * Implemented MS-CHAPv2 functionality, heavily based on sample + * implementation in RFC 2759. Implemented MPPE functionality, + * heavily based on sample implementation in RFC 3079. + * + * Copyright (c) 2002 Google, Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The name(s) of the authors of this software must not be used to + * endorse or promote products derived from this software without + * prior written permission. + * + * THE AUTHORS OF THIS SOFTWARE DISCLAIM ALL WARRANTIES WITH REGARD TO + * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY + * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ + +#include "netif/ppp/ppp_opts.h" +#if PPP_SUPPORT && MSCHAP_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +#if 0 /* UNUSED */ +#include +#include +#include +#include +#include +#include +#include +#endif /* UNUSED */ + +#include "netif/ppp/ppp_impl.h" + +#include "netif/ppp/chap-new.h" +#include "netif/ppp/chap_ms.h" +#include "netif/ppp/pppcrypt.h" +#include "netif/ppp/magic.h" +#if MPPE_SUPPORT +#include "netif/ppp/mppe.h" /* For mppe_sha1_pad*, mppe_set_key() */ +#endif /* MPPE_SUPPORT */ + +#define SHA1_SIGNATURE_SIZE 20 +#define MD4_SIGNATURE_SIZE 16 /* 16 bytes in a MD4 message digest */ +#define MAX_NT_PASSWORD 256 /* Max (Unicode) chars in an NT pass */ + +#define MS_CHAP_RESPONSE_LEN 49 /* Response length for MS-CHAP */ +#define MS_CHAP2_RESPONSE_LEN 49 /* Response length for MS-CHAPv2 */ +#define MS_AUTH_RESPONSE_LENGTH 40 /* MS-CHAPv2 authenticator response, */ + /* as ASCII */ + +/* Error codes for MS-CHAP failure messages. */ +#define MS_CHAP_ERROR_RESTRICTED_LOGON_HOURS 646 +#define MS_CHAP_ERROR_ACCT_DISABLED 647 +#define MS_CHAP_ERROR_PASSWD_EXPIRED 648 +#define MS_CHAP_ERROR_NO_DIALIN_PERMISSION 649 +#define MS_CHAP_ERROR_AUTHENTICATION_FAILURE 691 +#define MS_CHAP_ERROR_CHANGING_PASSWORD 709 + +/* + * Offsets within the response field for MS-CHAP + */ +#define MS_CHAP_LANMANRESP 0 +#define MS_CHAP_LANMANRESP_LEN 24 +#define MS_CHAP_NTRESP 24 +#define MS_CHAP_NTRESP_LEN 24 +#define MS_CHAP_USENT 48 + +/* + * Offsets within the response field for MS-CHAP2 + */ +#define MS_CHAP2_PEER_CHALLENGE 0 +#define MS_CHAP2_PEER_CHAL_LEN 16 +#define MS_CHAP2_RESERVED_LEN 8 +#define MS_CHAP2_NTRESP 24 +#define MS_CHAP2_NTRESP_LEN 24 +#define MS_CHAP2_FLAGS 48 + +#if MPPE_SUPPORT +#if 0 /* UNUSED */ +/* These values are the RADIUS attribute values--see RFC 2548. */ +#define MPPE_ENC_POL_ENC_ALLOWED 1 +#define MPPE_ENC_POL_ENC_REQUIRED 2 +#define MPPE_ENC_TYPES_RC4_40 2 +#define MPPE_ENC_TYPES_RC4_128 4 + +/* used by plugins (using above values) */ +extern void set_mppe_enc_types(int, int); +#endif /* UNUSED */ +#endif /* MPPE_SUPPORT */ + +/* Are we the authenticator or authenticatee? For MS-CHAPv2 key derivation. */ +#define MS_CHAP2_AUTHENTICATEE 0 +#define MS_CHAP2_AUTHENTICATOR 1 + +static void ascii2unicode (const char[], int, u_char[]); +static void NTPasswordHash (u_char *, int, u_char[MD4_SIGNATURE_SIZE]); +static void ChallengeResponse (const u_char *, const u_char *, u_char[24]); +static void ChallengeHash (const u_char[16], const u_char *, const char *, u_char[8]); +static void ChapMS_NT (const u_char *, const char *, int, u_char[24]); +static void ChapMS2_NT (const u_char *, const u_char[16], const char *, const char *, int, + u_char[24]); +static void GenerateAuthenticatorResponsePlain + (const char*, int, u_char[24], const u_char[16], const u_char *, + const char *, u_char[41]); +#ifdef MSLANMAN +static void ChapMS_LANMan (u_char *, char *, int, u_char *); +#endif + +static void GenerateAuthenticatorResponse(const u_char PasswordHashHash[MD4_SIGNATURE_SIZE], + u_char NTResponse[24], const u_char PeerChallenge[16], + const u_char *rchallenge, const char *username, + u_char authResponse[MS_AUTH_RESPONSE_LENGTH+1]); + +#if MPPE_SUPPORT +static void Set_Start_Key (ppp_pcb *pcb, const u_char *, const char *, int); +static void SetMasterKeys (ppp_pcb *pcb, const char *, int, u_char[24], int); +#endif /* MPPE_SUPPORT */ + +static void ChapMS (ppp_pcb *pcb, const u_char *, const char *, int, u_char *); +static void ChapMS2 (ppp_pcb *pcb, const u_char *, const u_char *, const char *, const char *, int, + u_char *, u_char[MS_AUTH_RESPONSE_LENGTH+1], int); + +#ifdef MSLANMAN +bool ms_lanman = 0; /* Use LanMan password instead of NT */ + /* Has meaning only with MS-CHAP challenges */ +#endif + +#if MPPE_SUPPORT +#ifdef DEBUGMPPEKEY +/* For MPPE debug */ +/* Use "[]|}{?/><,`!2&&(" (sans quotes) for RFC 3079 MS-CHAPv2 test value */ +static char *mschap_challenge = NULL; +/* Use "!@\#$%^&*()_+:3|~" (sans quotes, backslash is to escape #) for ... */ +static char *mschap2_peer_challenge = NULL; +#endif + +#include "netif/ppp/fsm.h" /* Need to poke MPPE options */ +#include "netif/ppp/ccp.h" +#endif /* MPPE_SUPPORT */ + +#if PPP_OPTIONS +/* + * Command-line options. + */ +static option_t chapms_option_list[] = { +#ifdef MSLANMAN + { "ms-lanman", o_bool, &ms_lanman, + "Use LanMan passwd when using MS-CHAP", 1 }, +#endif +#ifdef DEBUGMPPEKEY + { "mschap-challenge", o_string, &mschap_challenge, + "specify CHAP challenge" }, + { "mschap2-peer-challenge", o_string, &mschap2_peer_challenge, + "specify CHAP peer challenge" }, +#endif + { NULL } +}; +#endif /* PPP_OPTIONS */ + +#if PPP_SERVER +/* + * chapms_generate_challenge - generate a challenge for MS-CHAP. + * For MS-CHAP the challenge length is fixed at 8 bytes. + * The length goes in challenge[0] and the actual challenge starts + * at challenge[1]. + */ +static void chapms_generate_challenge(ppp_pcb *pcb, unsigned char *challenge) { + LWIP_UNUSED_ARG(pcb); + + *challenge++ = 8; +#ifdef DEBUGMPPEKEY + if (mschap_challenge && strlen(mschap_challenge) == 8) + memcpy(challenge, mschap_challenge, 8); + else +#endif + magic_random_bytes(challenge, 8); +} + +static void chapms2_generate_challenge(ppp_pcb *pcb, unsigned char *challenge) { + LWIP_UNUSED_ARG(pcb); + + *challenge++ = 16; +#ifdef DEBUGMPPEKEY + if (mschap_challenge && strlen(mschap_challenge) == 16) + memcpy(challenge, mschap_challenge, 16); + else +#endif + magic_random_bytes(challenge, 16); +} + +static int chapms_verify_response(ppp_pcb *pcb, int id, const char *name, + const unsigned char *secret, int secret_len, + const unsigned char *challenge, const unsigned char *response, + char *message, int message_space) { + unsigned char md[MS_CHAP_RESPONSE_LEN]; + int diff; + int challenge_len, response_len; + LWIP_UNUSED_ARG(id); + LWIP_UNUSED_ARG(name); + + challenge_len = *challenge++; /* skip length, is 8 */ + response_len = *response++; + if (response_len != MS_CHAP_RESPONSE_LEN) + goto bad; + +#ifndef MSLANMAN + if (!response[MS_CHAP_USENT]) { + /* Should really propagate this into the error packet. */ + ppp_notice("Peer request for LANMAN auth not supported"); + goto bad; + } +#endif + + /* Generate the expected response. */ + ChapMS(pcb, (const u_char *)challenge, (const char *)secret, secret_len, md); + +#ifdef MSLANMAN + /* Determine which part of response to verify against */ + if (!response[MS_CHAP_USENT]) + diff = memcmp(&response[MS_CHAP_LANMANRESP], + &md[MS_CHAP_LANMANRESP], MS_CHAP_LANMANRESP_LEN); + else +#endif + diff = memcmp(&response[MS_CHAP_NTRESP], &md[MS_CHAP_NTRESP], + MS_CHAP_NTRESP_LEN); + + if (diff == 0) { + ppp_slprintf(message, message_space, "Access granted"); + return 1; + } + + bad: + /* See comments below for MS-CHAP V2 */ + ppp_slprintf(message, message_space, "E=691 R=1 C=%0.*B V=0", + challenge_len, challenge); + return 0; +} + +static int chapms2_verify_response(ppp_pcb *pcb, int id, const char *name, + const unsigned char *secret, int secret_len, + const unsigned char *challenge, const unsigned char *response, + char *message, int message_space) { + unsigned char md[MS_CHAP2_RESPONSE_LEN]; + char saresponse[MS_AUTH_RESPONSE_LENGTH+1]; + int challenge_len, response_len; + LWIP_UNUSED_ARG(id); + + challenge_len = *challenge++; /* skip length, is 16 */ + response_len = *response++; + if (response_len != MS_CHAP2_RESPONSE_LEN) + goto bad; /* not even the right length */ + + /* Generate the expected response and our mutual auth. */ + ChapMS2(pcb, (const u_char*)challenge, (const u_char*)&response[MS_CHAP2_PEER_CHALLENGE], name, + (const char *)secret, secret_len, md, + (unsigned char *)saresponse, MS_CHAP2_AUTHENTICATOR); + + /* compare MDs and send the appropriate status */ + /* + * Per RFC 2759, success message must be formatted as + * "S= M=" + * where + * is the Authenticator Response (mutual auth) + * is a text message + * + * However, some versions of Windows (win98 tested) do not know + * about the M= part (required per RFC 2759) and flag + * it as an error (reported incorrectly as an encryption error + * to the user). Since the RFC requires it, and it can be + * useful information, we supply it if the peer is a conforming + * system. Luckily (?), win98 sets the Flags field to 0x04 + * (contrary to RFC requirements) so we can use that to + * distinguish between conforming and non-conforming systems. + * + * Special thanks to Alex Swiridov for + * help debugging this. + */ + if (memcmp(&md[MS_CHAP2_NTRESP], &response[MS_CHAP2_NTRESP], + MS_CHAP2_NTRESP_LEN) == 0) { + if (response[MS_CHAP2_FLAGS]) + ppp_slprintf(message, message_space, "S=%s", saresponse); + else + ppp_slprintf(message, message_space, "S=%s M=%s", + saresponse, "Access granted"); + return 1; + } + + bad: + /* + * Failure message must be formatted as + * "E=e R=r C=c V=v M=m" + * where + * e = error code (we use 691, ERROR_AUTHENTICATION_FAILURE) + * r = retry (we use 1, ok to retry) + * c = challenge to use for next response, we reuse previous + * v = Change Password version supported, we use 0 + * m = text message + * + * The M=m part is only for MS-CHAPv2. Neither win2k nor + * win98 (others untested) display the message to the user anyway. + * They also both ignore the E=e code. + * + * Note that it's safe to reuse the same challenge as we don't + * actually accept another response based on the error message + * (and no clients try to resend a response anyway). + * + * Basically, this whole bit is useless code, even the small + * implementation here is only because of overspecification. + */ + ppp_slprintf(message, message_space, "E=691 R=1 C=%0.*B V=0 M=%s", + challenge_len, challenge, "Access denied"); + return 0; +} +#endif /* PPP_SERVER */ + +static void chapms_make_response(ppp_pcb *pcb, unsigned char *response, int id, const char *our_name, + const unsigned char *challenge, const char *secret, int secret_len, + unsigned char *private_) { + LWIP_UNUSED_ARG(id); + LWIP_UNUSED_ARG(our_name); + LWIP_UNUSED_ARG(private_); + challenge++; /* skip length, should be 8 */ + *response++ = MS_CHAP_RESPONSE_LEN; + ChapMS(pcb, challenge, secret, secret_len, response); +} + +static void chapms2_make_response(ppp_pcb *pcb, unsigned char *response, int id, const char *our_name, + const unsigned char *challenge, const char *secret, int secret_len, + unsigned char *private_) { + LWIP_UNUSED_ARG(id); + challenge++; /* skip length, should be 16 */ + *response++ = MS_CHAP2_RESPONSE_LEN; + ChapMS2(pcb, challenge, +#ifdef DEBUGMPPEKEY + mschap2_peer_challenge, +#else + NULL, +#endif + our_name, secret, secret_len, response, private_, + MS_CHAP2_AUTHENTICATEE); +} + +static int chapms2_check_success(ppp_pcb *pcb, unsigned char *msg, int len, unsigned char *private_) { + LWIP_UNUSED_ARG(pcb); + + if ((len < MS_AUTH_RESPONSE_LENGTH + 2) || + strncmp((char *)msg, "S=", 2) != 0) { + /* Packet does not start with "S=" */ + ppp_error("MS-CHAPv2 Success packet is badly formed."); + return 0; + } + msg += 2; + len -= 2; + if (len < MS_AUTH_RESPONSE_LENGTH + || memcmp(msg, private_, MS_AUTH_RESPONSE_LENGTH)) { + /* Authenticator Response did not match expected. */ + ppp_error("MS-CHAPv2 mutual authentication failed."); + return 0; + } + /* Authenticator Response matches. */ + msg += MS_AUTH_RESPONSE_LENGTH; /* Eat it */ + len -= MS_AUTH_RESPONSE_LENGTH; + if ((len >= 3) && !strncmp((char *)msg, " M=", 3)) { + msg += 3; /* Eat the delimiter */ + } else if (len) { + /* Packet has extra text which does not begin " M=" */ + ppp_error("MS-CHAPv2 Success packet is badly formed."); + return 0; + } + return 1; +} + +static void chapms_handle_failure(ppp_pcb *pcb, unsigned char *inp, int len) { + int err; + const char *p; + char msg[64]; + LWIP_UNUSED_ARG(pcb); + + /* We want a null-terminated string for strxxx(). */ + len = LWIP_MIN(len, 63); + MEMCPY(msg, inp, len); + msg[len] = 0; + p = msg; + + /* + * Deal with MS-CHAP formatted failure messages; just print the + * M= part (if any). For MS-CHAP we're not really supposed + * to use M=, but it shouldn't hurt. See + * chapms[2]_verify_response. + */ + if (!strncmp(p, "E=", 2)) + err = strtol(p+2, NULL, 10); /* Remember the error code. */ + else + goto print_msg; /* Message is badly formatted. */ + + if (len && ((p = strstr(p, " M=")) != NULL)) { + /* M= field found. */ + p += 3; + } else { + /* No M=; use the error code. */ + switch (err) { + case MS_CHAP_ERROR_RESTRICTED_LOGON_HOURS: + p = "E=646 Restricted logon hours"; + break; + + case MS_CHAP_ERROR_ACCT_DISABLED: + p = "E=647 Account disabled"; + break; + + case MS_CHAP_ERROR_PASSWD_EXPIRED: + p = "E=648 Password expired"; + break; + + case MS_CHAP_ERROR_NO_DIALIN_PERMISSION: + p = "E=649 No dialin permission"; + break; + + case MS_CHAP_ERROR_AUTHENTICATION_FAILURE: + p = "E=691 Authentication failure"; + break; + + case MS_CHAP_ERROR_CHANGING_PASSWORD: + /* Should never see this, we don't support Change Password. */ + p = "E=709 Error changing password"; + break; + + default: + ppp_error("Unknown MS-CHAP authentication failure: %.*v", + len, inp); + return; + } + } +print_msg: + if (p != NULL) + ppp_error("MS-CHAP authentication failed: %v", p); +} + +static void ChallengeResponse(const u_char *challenge, + const u_char PasswordHash[MD4_SIGNATURE_SIZE], + u_char response[24]) { + u_char ZPasswordHash[21]; + lwip_des_context des; + u_char des_key[8]; + + BZERO(ZPasswordHash, sizeof(ZPasswordHash)); + MEMCPY(ZPasswordHash, PasswordHash, MD4_SIGNATURE_SIZE); + +#if 0 + dbglog("ChallengeResponse - ZPasswordHash %.*B", + sizeof(ZPasswordHash), ZPasswordHash); +#endif + + pppcrypt_56_to_64_bit_key(ZPasswordHash + 0, des_key); + lwip_des_init(&des); + lwip_des_setkey_enc(&des, des_key); + lwip_des_crypt_ecb(&des, challenge, response +0); + lwip_des_free(&des); + + pppcrypt_56_to_64_bit_key(ZPasswordHash + 7, des_key); + lwip_des_init(&des); + lwip_des_setkey_enc(&des, des_key); + lwip_des_crypt_ecb(&des, challenge, response +8); + lwip_des_free(&des); + + pppcrypt_56_to_64_bit_key(ZPasswordHash + 14, des_key); + lwip_des_init(&des); + lwip_des_setkey_enc(&des, des_key); + lwip_des_crypt_ecb(&des, challenge, response +16); + lwip_des_free(&des); + +#if 0 + dbglog("ChallengeResponse - response %.24B", response); +#endif +} + +static void ChallengeHash(const u_char PeerChallenge[16], const u_char *rchallenge, + const char *username, u_char Challenge[8]) { + lwip_sha1_context sha1Context; + u_char sha1Hash[SHA1_SIGNATURE_SIZE]; + const char *user; + + /* remove domain from "domain\username" */ + if ((user = strrchr(username, '\\')) != NULL) + ++user; + else + user = username; + + lwip_sha1_init(&sha1Context); + lwip_sha1_starts(&sha1Context); + lwip_sha1_update(&sha1Context, PeerChallenge, 16); + lwip_sha1_update(&sha1Context, rchallenge, 16); + lwip_sha1_update(&sha1Context, (const unsigned char*)user, strlen(user)); + lwip_sha1_finish(&sha1Context, sha1Hash); + lwip_sha1_free(&sha1Context); + + MEMCPY(Challenge, sha1Hash, 8); +} + +/* + * Convert the ASCII version of the password to Unicode. + * This implicitly supports 8-bit ISO8859/1 characters. + * This gives us the little-endian representation, which + * is assumed by all M$ CHAP RFCs. (Unicode byte ordering + * is machine-dependent.) + */ +static void ascii2unicode(const char ascii[], int ascii_len, u_char unicode[]) { + int i; + + BZERO(unicode, ascii_len * 2); + for (i = 0; i < ascii_len; i++) + unicode[i * 2] = (u_char) ascii[i]; +} + +static void NTPasswordHash(u_char *secret, int secret_len, u_char hash[MD4_SIGNATURE_SIZE]) { + lwip_md4_context md4Context; + + lwip_md4_init(&md4Context); + lwip_md4_starts(&md4Context); + lwip_md4_update(&md4Context, secret, secret_len); + lwip_md4_finish(&md4Context, hash); + lwip_md4_free(&md4Context); +} + +static void ChapMS_NT(const u_char *rchallenge, const char *secret, int secret_len, + u_char NTResponse[24]) { + u_char unicodePassword[MAX_NT_PASSWORD * 2]; + u_char PasswordHash[MD4_SIGNATURE_SIZE]; + + /* Hash the Unicode version of the secret (== password). */ + ascii2unicode(secret, secret_len, unicodePassword); + NTPasswordHash(unicodePassword, secret_len * 2, PasswordHash); + + ChallengeResponse(rchallenge, PasswordHash, NTResponse); +} + +static void ChapMS2_NT(const u_char *rchallenge, const u_char PeerChallenge[16], const char *username, + const char *secret, int secret_len, u_char NTResponse[24]) { + u_char unicodePassword[MAX_NT_PASSWORD * 2]; + u_char PasswordHash[MD4_SIGNATURE_SIZE]; + u_char Challenge[8]; + + ChallengeHash(PeerChallenge, rchallenge, username, Challenge); + + /* Hash the Unicode version of the secret (== password). */ + ascii2unicode(secret, secret_len, unicodePassword); + NTPasswordHash(unicodePassword, secret_len * 2, PasswordHash); + + ChallengeResponse(Challenge, PasswordHash, NTResponse); +} + +#ifdef MSLANMAN +static u_char *StdText = (u_char *)"KGS!@#$%"; /* key from rasapi32.dll */ + +static void ChapMS_LANMan(u_char *rchallenge, char *secret, int secret_len, + unsigned char *response) { + int i; + u_char UcasePassword[MAX_NT_PASSWORD]; /* max is actually 14 */ + u_char PasswordHash[MD4_SIGNATURE_SIZE]; + lwip_des_context des; + u_char des_key[8]; + + /* LANMan password is case insensitive */ + BZERO(UcasePassword, sizeof(UcasePassword)); + for (i = 0; i < secret_len; i++) + UcasePassword[i] = (u_char)toupper(secret[i]); + + pppcrypt_56_to_64_bit_key(UcasePassword +0, des_key); + lwip_des_init(&des); + lwip_des_setkey_enc(&des, des_key); + lwip_des_crypt_ecb(&des, StdText, PasswordHash +0); + lwip_des_free(&des); + + pppcrypt_56_to_64_bit_key(UcasePassword +7, des_key); + lwip_des_init(&des); + lwip_des_setkey_enc(&des, des_key); + lwip_des_crypt_ecb(&des, StdText, PasswordHash +8); + lwip_des_free(&des); + + ChallengeResponse(rchallenge, PasswordHash, &response[MS_CHAP_LANMANRESP]); +} +#endif + + +static void GenerateAuthenticatorResponse(const u_char PasswordHashHash[MD4_SIGNATURE_SIZE], + u_char NTResponse[24], const u_char PeerChallenge[16], + const u_char *rchallenge, const char *username, + u_char authResponse[MS_AUTH_RESPONSE_LENGTH+1]) { + /* + * "Magic" constants used in response generation, from RFC 2759. + */ + static const u_char Magic1[39] = /* "Magic server to client signing constant" */ + { 0x4D, 0x61, 0x67, 0x69, 0x63, 0x20, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x20, 0x74, 0x6F, 0x20, 0x63, 0x6C, 0x69, 0x65, + 0x6E, 0x74, 0x20, 0x73, 0x69, 0x67, 0x6E, 0x69, 0x6E, 0x67, + 0x20, 0x63, 0x6F, 0x6E, 0x73, 0x74, 0x61, 0x6E, 0x74 }; + static const u_char Magic2[41] = /* "Pad to make it do more than one iteration" */ + { 0x50, 0x61, 0x64, 0x20, 0x74, 0x6F, 0x20, 0x6D, 0x61, 0x6B, + 0x65, 0x20, 0x69, 0x74, 0x20, 0x64, 0x6F, 0x20, 0x6D, 0x6F, + 0x72, 0x65, 0x20, 0x74, 0x68, 0x61, 0x6E, 0x20, 0x6F, 0x6E, + 0x65, 0x20, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6F, + 0x6E }; + + int i; + lwip_sha1_context sha1Context; + u_char Digest[SHA1_SIGNATURE_SIZE]; + u_char Challenge[8]; + + lwip_sha1_init(&sha1Context); + lwip_sha1_starts(&sha1Context); + lwip_sha1_update(&sha1Context, PasswordHashHash, MD4_SIGNATURE_SIZE); + lwip_sha1_update(&sha1Context, NTResponse, 24); + lwip_sha1_update(&sha1Context, Magic1, sizeof(Magic1)); + lwip_sha1_finish(&sha1Context, Digest); + lwip_sha1_free(&sha1Context); + + ChallengeHash(PeerChallenge, rchallenge, username, Challenge); + + lwip_sha1_init(&sha1Context); + lwip_sha1_starts(&sha1Context); + lwip_sha1_update(&sha1Context, Digest, sizeof(Digest)); + lwip_sha1_update(&sha1Context, Challenge, sizeof(Challenge)); + lwip_sha1_update(&sha1Context, Magic2, sizeof(Magic2)); + lwip_sha1_finish(&sha1Context, Digest); + lwip_sha1_free(&sha1Context); + + /* Convert to ASCII hex string. */ + for (i = 0; i < LWIP_MAX((MS_AUTH_RESPONSE_LENGTH / 2), (int)sizeof(Digest)); i++) + sprintf((char *)&authResponse[i * 2], "%02X", Digest[i]); +} + + +static void GenerateAuthenticatorResponsePlain( + const char *secret, int secret_len, + u_char NTResponse[24], const u_char PeerChallenge[16], + const u_char *rchallenge, const char *username, + u_char authResponse[MS_AUTH_RESPONSE_LENGTH+1]) { + u_char unicodePassword[MAX_NT_PASSWORD * 2]; + u_char PasswordHash[MD4_SIGNATURE_SIZE]; + u_char PasswordHashHash[MD4_SIGNATURE_SIZE]; + + /* Hash (x2) the Unicode version of the secret (== password). */ + ascii2unicode(secret, secret_len, unicodePassword); + NTPasswordHash(unicodePassword, secret_len * 2, PasswordHash); + NTPasswordHash(PasswordHash, sizeof(PasswordHash), + PasswordHashHash); + + GenerateAuthenticatorResponse(PasswordHashHash, NTResponse, PeerChallenge, + rchallenge, username, authResponse); +} + + +#if MPPE_SUPPORT +/* + * Set mppe_xxxx_key from MS-CHAP credentials. (see RFC 3079) + */ +static void Set_Start_Key(ppp_pcb *pcb, const u_char *rchallenge, const char *secret, int secret_len) { + u_char unicodePassword[MAX_NT_PASSWORD * 2]; + u_char PasswordHash[MD4_SIGNATURE_SIZE]; + u_char PasswordHashHash[MD4_SIGNATURE_SIZE]; + lwip_sha1_context sha1Context; + u_char Digest[SHA1_SIGNATURE_SIZE]; /* >= MPPE_MAX_KEY_LEN */ + + /* Hash (x2) the Unicode version of the secret (== password). */ + ascii2unicode(secret, secret_len, unicodePassword); + NTPasswordHash(unicodePassword, secret_len * 2, PasswordHash); + NTPasswordHash(PasswordHash, sizeof(PasswordHash), PasswordHashHash); + + lwip_sha1_init(&sha1Context); + lwip_sha1_starts(&sha1Context); + lwip_sha1_update(&sha1Context, PasswordHashHash, MD4_SIGNATURE_SIZE); + lwip_sha1_update(&sha1Context, PasswordHashHash, MD4_SIGNATURE_SIZE); + lwip_sha1_update(&sha1Context, rchallenge, 8); + lwip_sha1_finish(&sha1Context, Digest); + lwip_sha1_free(&sha1Context); + + /* Same key in both directions. */ + mppe_set_key(pcb, &pcb->mppe_comp, Digest); + mppe_set_key(pcb, &pcb->mppe_decomp, Digest); + + pcb->mppe_keys_set = 1; +} + +/* + * Set mppe_xxxx_key from MS-CHAPv2 credentials. (see RFC 3079) + */ +static void SetMasterKeys(ppp_pcb *pcb, const char *secret, int secret_len, u_char NTResponse[24], int IsServer) { + u_char unicodePassword[MAX_NT_PASSWORD * 2]; + u_char PasswordHash[MD4_SIGNATURE_SIZE]; + u_char PasswordHashHash[MD4_SIGNATURE_SIZE]; + lwip_sha1_context sha1Context; + u_char MasterKey[SHA1_SIGNATURE_SIZE]; /* >= MPPE_MAX_KEY_LEN */ + u_char Digest[SHA1_SIGNATURE_SIZE]; /* >= MPPE_MAX_KEY_LEN */ + const u_char *s; + + /* "This is the MPPE Master Key" */ + static const u_char Magic1[27] = + { 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x4d, 0x50, 0x50, 0x45, 0x20, 0x4d, + 0x61, 0x73, 0x74, 0x65, 0x72, 0x20, 0x4b, 0x65, 0x79 }; + /* "On the client side, this is the send key; " + "on the server side, it is the receive key." */ + static const u_char Magic2[84] = + { 0x4f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x20, 0x73, 0x69, 0x64, 0x65, 0x2c, 0x20, + 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, + 0x65, 0x20, 0x73, 0x65, 0x6e, 0x64, 0x20, 0x6b, 0x65, 0x79, + 0x3b, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x73, 0x69, 0x64, 0x65, + 0x2c, 0x20, 0x69, 0x74, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, + 0x65, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x20, + 0x6b, 0x65, 0x79, 0x2e }; + /* "On the client side, this is the receive key; " + "on the server side, it is the send key." */ + static const u_char Magic3[84] = + { 0x4f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x20, 0x73, 0x69, 0x64, 0x65, 0x2c, 0x20, + 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, + 0x65, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x20, + 0x6b, 0x65, 0x79, 0x3b, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, + 0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x73, + 0x69, 0x64, 0x65, 0x2c, 0x20, 0x69, 0x74, 0x20, 0x69, 0x73, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x6e, 0x64, 0x20, + 0x6b, 0x65, 0x79, 0x2e }; + + /* Hash (x2) the Unicode version of the secret (== password). */ + ascii2unicode(secret, secret_len, unicodePassword); + NTPasswordHash(unicodePassword, secret_len * 2, PasswordHash); + NTPasswordHash(PasswordHash, sizeof(PasswordHash), PasswordHashHash); + + lwip_sha1_init(&sha1Context); + lwip_sha1_starts(&sha1Context); + lwip_sha1_update(&sha1Context, PasswordHashHash, MD4_SIGNATURE_SIZE); + lwip_sha1_update(&sha1Context, NTResponse, 24); + lwip_sha1_update(&sha1Context, Magic1, sizeof(Magic1)); + lwip_sha1_finish(&sha1Context, MasterKey); + lwip_sha1_free(&sha1Context); + + /* + * generate send key + */ + if (IsServer) + s = Magic3; + else + s = Magic2; + lwip_sha1_init(&sha1Context); + lwip_sha1_starts(&sha1Context); + lwip_sha1_update(&sha1Context, MasterKey, 16); + lwip_sha1_update(&sha1Context, mppe_sha1_pad1, SHA1_PAD_SIZE); + lwip_sha1_update(&sha1Context, s, 84); + lwip_sha1_update(&sha1Context, mppe_sha1_pad2, SHA1_PAD_SIZE); + lwip_sha1_finish(&sha1Context, Digest); + lwip_sha1_free(&sha1Context); + + mppe_set_key(pcb, &pcb->mppe_comp, Digest); + + /* + * generate recv key + */ + if (IsServer) + s = Magic2; + else + s = Magic3; + lwip_sha1_init(&sha1Context); + lwip_sha1_starts(&sha1Context); + lwip_sha1_update(&sha1Context, MasterKey, 16); + lwip_sha1_update(&sha1Context, mppe_sha1_pad1, SHA1_PAD_SIZE); + lwip_sha1_update(&sha1Context, s, 84); + lwip_sha1_update(&sha1Context, mppe_sha1_pad2, SHA1_PAD_SIZE); + lwip_sha1_finish(&sha1Context, Digest); + lwip_sha1_free(&sha1Context); + + mppe_set_key(pcb, &pcb->mppe_decomp, Digest); + + pcb->mppe_keys_set = 1; +} + +#endif /* MPPE_SUPPORT */ + + +static void ChapMS(ppp_pcb *pcb, const u_char *rchallenge, const char *secret, int secret_len, + unsigned char *response) { +#if !MPPE_SUPPORT + LWIP_UNUSED_ARG(pcb); +#endif /* !MPPE_SUPPORT */ + BZERO(response, MS_CHAP_RESPONSE_LEN); + + ChapMS_NT(rchallenge, secret, secret_len, &response[MS_CHAP_NTRESP]); + +#ifdef MSLANMAN + ChapMS_LANMan(rchallenge, secret, secret_len, + &response[MS_CHAP_LANMANRESP]); + + /* preferred method is set by option */ + response[MS_CHAP_USENT] = !ms_lanman; +#else + response[MS_CHAP_USENT] = 1; +#endif + +#if MPPE_SUPPORT + Set_Start_Key(pcb, rchallenge, secret, secret_len); +#endif /* MPPE_SUPPORT */ +} + + +/* + * If PeerChallenge is NULL, one is generated and the PeerChallenge + * field of response is filled in. Call this way when generating a response. + * If PeerChallenge is supplied, it is copied into the PeerChallenge field. + * Call this way when verifying a response (or debugging). + * Do not call with PeerChallenge = response. + * + * The PeerChallenge field of response is then used for calculation of the + * Authenticator Response. + */ +static void ChapMS2(ppp_pcb *pcb, const u_char *rchallenge, const u_char *PeerChallenge, + const char *user, const char *secret, int secret_len, unsigned char *response, + u_char authResponse[], int authenticator) { + /* ARGSUSED */ + LWIP_UNUSED_ARG(authenticator); +#if !MPPE_SUPPORT + LWIP_UNUSED_ARG(pcb); +#endif /* !MPPE_SUPPORT */ + + BZERO(response, MS_CHAP2_RESPONSE_LEN); + + /* Generate the Peer-Challenge if requested, or copy it if supplied. */ + if (!PeerChallenge) + magic_random_bytes(&response[MS_CHAP2_PEER_CHALLENGE], MS_CHAP2_PEER_CHAL_LEN); + else + MEMCPY(&response[MS_CHAP2_PEER_CHALLENGE], PeerChallenge, + MS_CHAP2_PEER_CHAL_LEN); + + /* Generate the NT-Response */ + ChapMS2_NT(rchallenge, &response[MS_CHAP2_PEER_CHALLENGE], user, + secret, secret_len, &response[MS_CHAP2_NTRESP]); + + /* Generate the Authenticator Response. */ + GenerateAuthenticatorResponsePlain(secret, secret_len, + &response[MS_CHAP2_NTRESP], + &response[MS_CHAP2_PEER_CHALLENGE], + rchallenge, user, authResponse); + +#if MPPE_SUPPORT + SetMasterKeys(pcb, secret, secret_len, + &response[MS_CHAP2_NTRESP], authenticator); +#endif /* MPPE_SUPPORT */ +} + +#if 0 /* UNUSED */ +#if MPPE_SUPPORT +/* + * Set MPPE options from plugins. + */ +void set_mppe_enc_types(int policy, int types) { + /* Early exit for unknown policies. */ + if (policy != MPPE_ENC_POL_ENC_ALLOWED || + policy != MPPE_ENC_POL_ENC_REQUIRED) + return; + + /* Don't modify MPPE if it's optional and wasn't already configured. */ + if (policy == MPPE_ENC_POL_ENC_ALLOWED && !ccp_wantoptions[0].mppe) + return; + + /* + * Disable undesirable encryption types. Note that we don't ENABLE + * any encryption types, to avoid overriding manual configuration. + */ + switch(types) { + case MPPE_ENC_TYPES_RC4_40: + ccp_wantoptions[0].mppe &= ~MPPE_OPT_128; /* disable 128-bit */ + break; + case MPPE_ENC_TYPES_RC4_128: + ccp_wantoptions[0].mppe &= ~MPPE_OPT_40; /* disable 40-bit */ + break; + default: + break; + } +} +#endif /* MPPE_SUPPORT */ +#endif /* UNUSED */ + +const struct chap_digest_type chapms_digest = { + CHAP_MICROSOFT, /* code */ +#if PPP_SERVER + chapms_generate_challenge, + chapms_verify_response, +#endif /* PPP_SERVER */ + chapms_make_response, + NULL, /* check_success */ + chapms_handle_failure, +}; + +const struct chap_digest_type chapms2_digest = { + CHAP_MICROSOFT_V2, /* code */ +#if PPP_SERVER + chapms2_generate_challenge, + chapms2_verify_response, +#endif /* PPP_SERVER */ + chapms2_make_response, + chapms2_check_success, + chapms_handle_failure, +}; + +#endif /* PPP_SUPPORT && MSCHAP_SUPPORT */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/demand.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/demand.c new file mode 100644 index 0000000000000000000000000000000000000000..26c6c30db1a1a63c64c9a23aa41013aef4a443bd --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/demand.c @@ -0,0 +1,465 @@ +/* + * demand.c - Support routines for demand-dialling. + * + * Copyright (c) 1996-2002 Paul Mackerras. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. The name(s) of the authors of this software must not be used to + * endorse or promote products derived from this software without + * prior written permission. + * + * 3. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by Paul Mackerras + * ". + * + * THE AUTHORS OF THIS SOFTWARE DISCLAIM ALL WARRANTIES WITH REGARD TO + * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY + * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include "netif/ppp/ppp_opts.h" +#if PPP_SUPPORT && DEMAND_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifdef PPP_FILTER +#include +#endif + +#include "netif/ppp/ppp_impl.h" + +#include "netif/ppp/fsm.h" +#include "netif/ppp/ipcp.h" +#include "netif/ppp/lcp.h" + +char *frame; +int framelen; +int framemax; +int escape_flag; +int flush_flag; +int fcs; + +struct packet { + int length; + struct packet *next; + unsigned char data[1]; +}; + +struct packet *pend_q; +struct packet *pend_qtail; + +static int active_packet (unsigned char *, int); + +/* + * demand_conf - configure the interface for doing dial-on-demand. + */ +void +demand_conf() +{ + int i; + const struct protent *protp; + +/* framemax = lcp_allowoptions[0].mru; + if (framemax < PPP_MRU) */ + framemax = PPP_MRU; + framemax += PPP_HDRLEN + PPP_FCSLEN; + frame = malloc(framemax); + if (frame == NULL) + novm("demand frame"); + framelen = 0; + pend_q = NULL; + escape_flag = 0; + flush_flag = 0; + fcs = PPP_INITFCS; + + netif_set_mtu(pcb, LWIP_MIN(lcp_allowoptions[0].mru, PPP_MRU)); + if (ppp_send_config(pcb, PPP_MRU, (u32_t) 0, 0, 0) < 0 + || ppp_recv_config(pcb, PPP_MRU, (u32_t) 0, 0, 0) < 0) + fatal("Couldn't set up demand-dialled PPP interface: %m"); + +#ifdef PPP_FILTER + set_filters(&pass_filter, &active_filter); +#endif + + /* + * Call the demand_conf procedure for each protocol that's got one. + */ + for (i = 0; (protp = protocols[i]) != NULL; ++i) + if (protp->demand_conf != NULL) + ((*protp->demand_conf)(pcb)); +/* FIXME: find a way to die() here */ +#if 0 + if (!((*protp->demand_conf)(pcb))) + die(1); +#endif +} + + +/* + * demand_block - set each network protocol to block further packets. + */ +void +demand_block() +{ + int i; + const struct protent *protp; + + for (i = 0; (protp = protocols[i]) != NULL; ++i) + if (protp->demand_conf != NULL) + sifnpmode(pcb, protp->protocol & ~0x8000, NPMODE_QUEUE); + get_loop_output(); +} + +/* + * demand_discard - set each network protocol to discard packets + * with an error. + */ +void +demand_discard() +{ + struct packet *pkt, *nextpkt; + int i; + const struct protent *protp; + + for (i = 0; (protp = protocols[i]) != NULL; ++i) + if (protp->demand_conf != NULL) + sifnpmode(pcb, protp->protocol & ~0x8000, NPMODE_ERROR); + get_loop_output(); + + /* discard all saved packets */ + for (pkt = pend_q; pkt != NULL; pkt = nextpkt) { + nextpkt = pkt->next; + free(pkt); + } + pend_q = NULL; + framelen = 0; + flush_flag = 0; + escape_flag = 0; + fcs = PPP_INITFCS; +} + +/* + * demand_unblock - set each enabled network protocol to pass packets. + */ +void +demand_unblock() +{ + int i; + const struct protent *protp; + + for (i = 0; (protp = protocols[i]) != NULL; ++i) + if (protp->demand_conf != NULL) + sifnpmode(pcb, protp->protocol & ~0x8000, NPMODE_PASS); +} + +/* + * FCS lookup table as calculated by genfcstab. + */ +static u_short fcstab[256] = { + 0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf, + 0x8c48, 0x9dc1, 0xaf5a, 0xbed3, 0xca6c, 0xdbe5, 0xe97e, 0xf8f7, + 0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, 0x472c, 0x75b7, 0x643e, + 0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, 0xcb64, 0xf9ff, 0xe876, + 0x2102, 0x308b, 0x0210, 0x1399, 0x6726, 0x76af, 0x4434, 0x55bd, + 0xad4a, 0xbcc3, 0x8e58, 0x9fd1, 0xeb6e, 0xfae7, 0xc87c, 0xd9f5, + 0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, 0x662e, 0x54b5, 0x453c, + 0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef, 0xea66, 0xd8fd, 0xc974, + 0x4204, 0x538d, 0x6116, 0x709f, 0x0420, 0x15a9, 0x2732, 0x36bb, + 0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868, 0x99e1, 0xab7a, 0xbaf3, + 0x5285, 0x430c, 0x7197, 0x601e, 0x14a1, 0x0528, 0x37b3, 0x263a, + 0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, 0x8960, 0xbbfb, 0xaa72, + 0x6306, 0x728f, 0x4014, 0x519d, 0x2522, 0x34ab, 0x0630, 0x17b9, + 0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, 0xb8e3, 0x8a78, 0x9bf1, + 0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, 0x242a, 0x16b1, 0x0738, + 0xffcf, 0xee46, 0xdcdd, 0xcd54, 0xb9eb, 0xa862, 0x9af9, 0x8b70, + 0x8408, 0x9581, 0xa71a, 0xb693, 0xc22c, 0xd3a5, 0xe13e, 0xf0b7, + 0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64, 0x5fed, 0x6d76, 0x7cff, + 0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, 0xc324, 0xf1bf, 0xe036, + 0x18c1, 0x0948, 0x3bd3, 0x2a5a, 0x5ee5, 0x4f6c, 0x7df7, 0x6c7e, + 0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e, 0xf2a7, 0xc03c, 0xd1b5, + 0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, 0x7eef, 0x4c74, 0x5dfd, + 0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, 0xe226, 0xd0bd, 0xc134, + 0x39c3, 0x284a, 0x1ad1, 0x0b58, 0x7fe7, 0x6e6e, 0x5cf5, 0x4d7c, + 0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, 0x91a1, 0xa33a, 0xb2b3, + 0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60, 0x1de9, 0x2f72, 0x3efb, + 0xd68d, 0xc704, 0xf59f, 0xe416, 0x90a9, 0x8120, 0xb3bb, 0xa232, + 0x5ac5, 0x4b4c, 0x79d7, 0x685e, 0x1ce1, 0x0d68, 0x3ff3, 0x2e7a, + 0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, 0xb0a3, 0x8238, 0x93b1, + 0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, 0x3ceb, 0x0e70, 0x1ff9, + 0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, 0x8330, + 0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3, 0x2c6a, 0x1ef1, 0x0f78 +}; + +/* + * loop_chars - process characters received from the loopback. + * Calls loop_frame when a complete frame has been accumulated. + * Return value is 1 if we need to bring up the link, 0 otherwise. + */ +int +loop_chars(p, n) + unsigned char *p; + int n; +{ + int c, rv; + + rv = 0; + +/* check for synchronous connection... */ + + if ( (p[0] == 0xFF) && (p[1] == 0x03) ) { + rv = loop_frame(p,n); + return rv; + } + + for (; n > 0; --n) { + c = *p++; + if (c == PPP_FLAG) { + if (!escape_flag && !flush_flag + && framelen > 2 && fcs == PPP_GOODFCS) { + framelen -= 2; + if (loop_frame((unsigned char *)frame, framelen)) + rv = 1; + } + framelen = 0; + flush_flag = 0; + escape_flag = 0; + fcs = PPP_INITFCS; + continue; + } + if (flush_flag) + continue; + if (escape_flag) { + c ^= PPP_TRANS; + escape_flag = 0; + } else if (c == PPP_ESCAPE) { + escape_flag = 1; + continue; + } + if (framelen >= framemax) { + flush_flag = 1; + continue; + } + frame[framelen++] = c; + fcs = PPP_FCS(fcs, c); + } + return rv; +} + +/* + * loop_frame - given a frame obtained from the loopback, + * decide whether to bring up the link or not, and, if we want + * to transmit this frame later, put it on the pending queue. + * Return value is 1 if we need to bring up the link, 0 otherwise. + * We assume that the kernel driver has already applied the + * pass_filter, so we won't get packets it rejected. + * We apply the active_filter to see if we want this packet to + * bring up the link. + */ +int +loop_frame(frame, len) + unsigned char *frame; + int len; +{ + struct packet *pkt; + + /* dbglog("from loop: %P", frame, len); */ + if (len < PPP_HDRLEN) + return 0; + if ((PPP_PROTOCOL(frame) & 0x8000) != 0) + return 0; /* shouldn't get any of these anyway */ + if (!active_packet(frame, len)) + return 0; + + pkt = (struct packet *) malloc(sizeof(struct packet) + len); + if (pkt != NULL) { + pkt->length = len; + pkt->next = NULL; + memcpy(pkt->data, frame, len); + if (pend_q == NULL) + pend_q = pkt; + else + pend_qtail->next = pkt; + pend_qtail = pkt; + } + return 1; +} + +/* + * demand_rexmit - Resend all those frames which we got via the + * loopback, now that the real serial link is up. + */ +void +demand_rexmit(proto, newip) + int proto; + u32_t newip; +{ + struct packet *pkt, *prev, *nextpkt; + unsigned short checksum; + unsigned short pkt_checksum = 0; + unsigned iphdr; + struct timeval tv; + char cv = 0; + char ipstr[16]; + + prev = NULL; + pkt = pend_q; + pend_q = NULL; + tv.tv_sec = 1; + tv.tv_usec = 0; + select(0,NULL,NULL,NULL,&tv); /* Sleep for 1 Seconds */ + for (; pkt != NULL; pkt = nextpkt) { + nextpkt = pkt->next; + if (PPP_PROTOCOL(pkt->data) == proto) { + if ( (proto == PPP_IP) && newip ) { + /* Get old checksum */ + + iphdr = (pkt->data[4] & 15) << 2; + checksum = *((unsigned short *) (pkt->data+14)); + if (checksum == 0xFFFF) { + checksum = 0; + } + + + if (pkt->data[13] == 17) { + pkt_checksum = *((unsigned short *) (pkt->data+10+iphdr)); + if (pkt_checksum) { + cv = 1; + if (pkt_checksum == 0xFFFF) { + pkt_checksum = 0; + } + } + else { + cv = 0; + } + } + + if (pkt->data[13] == 6) { + pkt_checksum = *((unsigned short *) (pkt->data+20+iphdr)); + cv = 1; + if (pkt_checksum == 0xFFFF) { + pkt_checksum = 0; + } + } + + /* Delete old Source-IP-Address */ + checksum -= *((unsigned short *) (pkt->data+16)) ^ 0xFFFF; + checksum -= *((unsigned short *) (pkt->data+18)) ^ 0xFFFF; + + pkt_checksum -= *((unsigned short *) (pkt->data+16)) ^ 0xFFFF; + pkt_checksum -= *((unsigned short *) (pkt->data+18)) ^ 0xFFFF; + + /* Change Source-IP-Address */ + * ((u32_t *) (pkt->data + 16)) = newip; + + /* Add new Source-IP-Address */ + checksum += *((unsigned short *) (pkt->data+16)) ^ 0xFFFF; + checksum += *((unsigned short *) (pkt->data+18)) ^ 0xFFFF; + + pkt_checksum += *((unsigned short *) (pkt->data+16)) ^ 0xFFFF; + pkt_checksum += *((unsigned short *) (pkt->data+18)) ^ 0xFFFF; + + /* Write new checksum */ + if (!checksum) { + checksum = 0xFFFF; + } + *((unsigned short *) (pkt->data+14)) = checksum; + if (pkt->data[13] == 6) { + *((unsigned short *) (pkt->data+20+iphdr)) = pkt_checksum; + } + if (cv && (pkt->data[13] == 17) ) { + *((unsigned short *) (pkt->data+10+iphdr)) = pkt_checksum; + } + + /* Log Packet */ + strcpy(ipstr,inet_ntoa(*( (struct in_addr *) (pkt->data+16)))); + if (pkt->data[13] == 1) { + syslog(LOG_INFO,"Open ICMP %s -> %s\n", + ipstr, + inet_ntoa(*( (struct in_addr *) (pkt->data+20)))); + } else { + syslog(LOG_INFO,"Open %s %s:%d -> %s:%d\n", + pkt->data[13] == 6 ? "TCP" : "UDP", + ipstr, + ntohs(*( (short *) (pkt->data+iphdr+4))), + inet_ntoa(*( (struct in_addr *) (pkt->data+20))), + ntohs(*( (short *) (pkt->data+iphdr+6)))); + } + } + output(pcb, pkt->data, pkt->length); + free(pkt); + } else { + if (prev == NULL) + pend_q = pkt; + else + prev->next = pkt; + prev = pkt; + } + } + pend_qtail = prev; + if (prev != NULL) + prev->next = NULL; +} + +/* + * Scan a packet to decide whether it is an "active" packet, + * that is, whether it is worth bringing up the link for. + */ +static int +active_packet(p, len) + unsigned char *p; + int len; +{ + int proto, i; + const struct protent *protp; + + if (len < PPP_HDRLEN) + return 0; + proto = PPP_PROTOCOL(p); +#ifdef PPP_FILTER + p[0] = 1; /* outbound packet indicator */ + if ((pass_filter.bf_len != 0 + && bpf_filter(pass_filter.bf_insns, p, len, len) == 0) + || (active_filter.bf_len != 0 + && bpf_filter(active_filter.bf_insns, p, len, len) == 0)) { + p[0] = 0xff; + return 0; + } + p[0] = 0xff; +#endif + for (i = 0; (protp = protocols[i]) != NULL; ++i) { + if (protp->protocol < 0xC000 && (protp->protocol & ~0x8000) == proto) { + if (protp->active_pkt == NULL) + return 1; + return (*protp->active_pkt)(p, len); + } + } + return 0; /* not a supported protocol !!?? */ +} + +#endif /* PPP_SUPPORT && DEMAND_SUPPORT */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/eap.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/eap.c new file mode 100644 index 0000000000000000000000000000000000000000..8fb56368e7178f30944c59681a3aeaf8acd48e39 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/eap.c @@ -0,0 +1,2423 @@ +/* + * eap.c - Extensible Authentication Protocol for PPP (RFC 2284) + * + * Copyright (c) 2001 by Sun Microsystems, Inc. + * All rights reserved. + * + * Non-exclusive rights to redistribute, modify, translate, and use + * this software in source and binary forms, in whole or in part, is + * hereby granted, provided that the above copyright notice is + * duplicated in any source form, and that neither the name of the + * copyright holder nor the author is used to endorse or promote + * products derived from this software. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. + * + * Original version by James Carlson + * + * This implementation of EAP supports MD5-Challenge and SRP-SHA1 + * authentication styles. Note that support of MD5-Challenge is a + * requirement of RFC 2284, and that it's essentially just a + * reimplementation of regular RFC 1994 CHAP using EAP messages. + * + * As an authenticator ("server"), there are multiple phases for each + * style. In the first phase of each style, the unauthenticated peer + * name is queried using the EAP Identity request type. If the + * "remotename" option is used, then this phase is skipped, because + * the peer's name is presumed to be known. + * + * For MD5-Challenge, there are two phases, and the second phase + * consists of sending the challenge itself and handling the + * associated response. + * + * For SRP-SHA1, there are four phases. The second sends 's', 'N', + * and 'g'. The reply contains 'A'. The third sends 'B', and the + * reply contains 'M1'. The forth sends the 'M2' value. + * + * As an authenticatee ("client"), there's just a single phase -- + * responding to the queries generated by the peer. EAP is an + * authenticator-driven protocol. + * + * Based on draft-ietf-pppext-eap-srp-03.txt. + */ + +#include "netif/ppp/ppp_opts.h" +#if PPP_SUPPORT && EAP_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +#include "netif/ppp/ppp_impl.h" +#include "netif/ppp/eap.h" +#include "netif/ppp/magic.h" +#include "netif/ppp/pppcrypt.h" + +#ifdef USE_SRP +#include +#include +#include +#endif /* USE_SRP */ + +#ifndef SHA_DIGESTSIZE +#define SHA_DIGESTSIZE 20 +#endif + +#ifdef USE_SRP +static char *pn_secret = NULL; /* Pseudonym generating secret */ +#endif + +#if PPP_OPTIONS +/* + * Command-line options. + */ +static option_t eap_option_list[] = { + { "eap-restart", o_int, &eap_states[0].es_server.ea_timeout, + "Set retransmit timeout for EAP Requests (server)" }, + { "eap-max-sreq", o_int, &eap_states[0].es_server.ea_maxrequests, + "Set max number of EAP Requests sent (server)" }, + { "eap-timeout", o_int, &eap_states[0].es_client.ea_timeout, + "Set time limit for peer EAP authentication" }, + { "eap-max-rreq", o_int, &eap_states[0].es_client.ea_maxrequests, + "Set max number of EAP Requests allows (client)" }, + { "eap-interval", o_int, &eap_states[0].es_rechallenge, + "Set interval for EAP rechallenge" }, +#ifdef USE_SRP + { "srp-interval", o_int, &eap_states[0].es_lwrechallenge, + "Set interval for SRP lightweight rechallenge" }, + { "srp-pn-secret", o_string, &pn_secret, + "Long term pseudonym generation secret" }, + { "srp-use-pseudonym", o_bool, &eap_states[0].es_usepseudo, + "Use pseudonym if offered one by server", 1 }, +#endif + { NULL } +}; +#endif /* PPP_OPTIONS */ + +/* + * Protocol entry points. + */ +static void eap_init(ppp_pcb *pcb); +static void eap_input(ppp_pcb *pcb, u_char *inp, int inlen); +static void eap_protrej(ppp_pcb *pcb); +static void eap_lowerup(ppp_pcb *pcb); +static void eap_lowerdown(ppp_pcb *pcb); +#if PRINTPKT_SUPPORT +static int eap_printpkt(const u_char *inp, int inlen, + void (*)(void *arg, const char *fmt, ...), void *arg); +#endif /* PRINTPKT_SUPPORT */ + +const struct protent eap_protent = { + PPP_EAP, /* protocol number */ + eap_init, /* initialization procedure */ + eap_input, /* process a received packet */ + eap_protrej, /* process a received protocol-reject */ + eap_lowerup, /* lower layer has gone up */ + eap_lowerdown, /* lower layer has gone down */ + NULL, /* open the protocol */ + NULL, /* close the protocol */ +#if PRINTPKT_SUPPORT + eap_printpkt, /* print a packet in readable form */ +#endif /* PRINTPKT_SUPPORT */ +#if PPP_DATAINPUT + NULL, /* process a received data packet */ +#endif /* PPP_DATAINPUT */ +#if PRINTPKT_SUPPORT + "EAP", /* text name of protocol */ + NULL, /* text name of corresponding data protocol */ +#endif /* PRINTPKT_SUPPORT */ +#if PPP_OPTIONS + eap_option_list, /* list of command-line options */ + NULL, /* check requested options; assign defaults */ +#endif /* PPP_OPTIONS */ +#if DEMAND_SUPPORT + NULL, /* configure interface for demand-dial */ + NULL /* say whether to bring up link for this pkt */ +#endif /* DEMAND_SUPPORT */ +}; + +#ifdef USE_SRP +/* + * A well-known 2048 bit modulus. + */ +static const u_char wkmodulus[] = { + 0xAC, 0x6B, 0xDB, 0x41, 0x32, 0x4A, 0x9A, 0x9B, + 0xF1, 0x66, 0xDE, 0x5E, 0x13, 0x89, 0x58, 0x2F, + 0xAF, 0x72, 0xB6, 0x65, 0x19, 0x87, 0xEE, 0x07, + 0xFC, 0x31, 0x92, 0x94, 0x3D, 0xB5, 0x60, 0x50, + 0xA3, 0x73, 0x29, 0xCB, 0xB4, 0xA0, 0x99, 0xED, + 0x81, 0x93, 0xE0, 0x75, 0x77, 0x67, 0xA1, 0x3D, + 0xD5, 0x23, 0x12, 0xAB, 0x4B, 0x03, 0x31, 0x0D, + 0xCD, 0x7F, 0x48, 0xA9, 0xDA, 0x04, 0xFD, 0x50, + 0xE8, 0x08, 0x39, 0x69, 0xED, 0xB7, 0x67, 0xB0, + 0xCF, 0x60, 0x95, 0x17, 0x9A, 0x16, 0x3A, 0xB3, + 0x66, 0x1A, 0x05, 0xFB, 0xD5, 0xFA, 0xAA, 0xE8, + 0x29, 0x18, 0xA9, 0x96, 0x2F, 0x0B, 0x93, 0xB8, + 0x55, 0xF9, 0x79, 0x93, 0xEC, 0x97, 0x5E, 0xEA, + 0xA8, 0x0D, 0x74, 0x0A, 0xDB, 0xF4, 0xFF, 0x74, + 0x73, 0x59, 0xD0, 0x41, 0xD5, 0xC3, 0x3E, 0xA7, + 0x1D, 0x28, 0x1E, 0x44, 0x6B, 0x14, 0x77, 0x3B, + 0xCA, 0x97, 0xB4, 0x3A, 0x23, 0xFB, 0x80, 0x16, + 0x76, 0xBD, 0x20, 0x7A, 0x43, 0x6C, 0x64, 0x81, + 0xF1, 0xD2, 0xB9, 0x07, 0x87, 0x17, 0x46, 0x1A, + 0x5B, 0x9D, 0x32, 0xE6, 0x88, 0xF8, 0x77, 0x48, + 0x54, 0x45, 0x23, 0xB5, 0x24, 0xB0, 0xD5, 0x7D, + 0x5E, 0xA7, 0x7A, 0x27, 0x75, 0xD2, 0xEC, 0xFA, + 0x03, 0x2C, 0xFB, 0xDB, 0xF5, 0x2F, 0xB3, 0x78, + 0x61, 0x60, 0x27, 0x90, 0x04, 0xE5, 0x7A, 0xE6, + 0xAF, 0x87, 0x4E, 0x73, 0x03, 0xCE, 0x53, 0x29, + 0x9C, 0xCC, 0x04, 0x1C, 0x7B, 0xC3, 0x08, 0xD8, + 0x2A, 0x56, 0x98, 0xF3, 0xA8, 0xD0, 0xC3, 0x82, + 0x71, 0xAE, 0x35, 0xF8, 0xE9, 0xDB, 0xFB, 0xB6, + 0x94, 0xB5, 0xC8, 0x03, 0xD8, 0x9F, 0x7A, 0xE4, + 0x35, 0xDE, 0x23, 0x6D, 0x52, 0x5F, 0x54, 0x75, + 0x9B, 0x65, 0xE3, 0x72, 0xFC, 0xD6, 0x8E, 0xF2, + 0x0F, 0xA7, 0x11, 0x1F, 0x9E, 0x4A, 0xFF, 0x73 +}; +#endif + +#if PPP_SERVER +/* Local forward declarations. */ +static void eap_server_timeout(void *arg); +#endif /* PPP_SERVER */ + +/* + * Convert EAP state code to printable string for debug. + */ +static const char * eap_state_name(enum eap_state_code esc) +{ + static const char *state_names[] = { EAP_STATES }; + + return (state_names[(int)esc]); +} + +/* + * eap_init - Initialize state for an EAP user. This is currently + * called once by main() during start-up. + */ +static void eap_init(ppp_pcb *pcb) { + + BZERO(&pcb->eap, sizeof(eap_state)); +#if PPP_SERVER + pcb->eap.es_server.ea_id = magic(); +#endif /* PPP_SERVER */ +} + +/* + * eap_client_timeout - Give up waiting for the peer to send any + * Request messages. + */ +static void eap_client_timeout(void *arg) { + ppp_pcb *pcb = (ppp_pcb*)arg; + + if (!eap_client_active(pcb)) + return; + + ppp_error("EAP: timeout waiting for Request from peer"); + auth_withpeer_fail(pcb, PPP_EAP); + pcb->eap.es_client.ea_state = eapBadAuth; +} + +/* + * eap_authwithpeer - Authenticate to our peer (behave as client). + * + * Start client state and wait for requests. This is called only + * after eap_lowerup. + */ +void eap_authwithpeer(ppp_pcb *pcb, const char *localname) { + + if(NULL == localname) + return; + + /* Save the peer name we're given */ + pcb->eap.es_client.ea_name = localname; + pcb->eap.es_client.ea_namelen = strlen(localname); + + pcb->eap.es_client.ea_state = eapListen; + + /* + * Start a timer so that if the other end just goes + * silent, we don't sit here waiting forever. + */ + if (pcb->settings.eap_req_time > 0) + TIMEOUT(eap_client_timeout, pcb, + pcb->settings.eap_req_time); +} + +#if PPP_SERVER +/* + * Format a standard EAP Failure message and send it to the peer. + * (Server operation) + */ +static void eap_send_failure(ppp_pcb *pcb) { + struct pbuf *p; + u_char *outp; + + p = pbuf_alloc(PBUF_RAW, (u16_t)(PPP_HDRLEN + EAP_HEADERLEN), PPP_CTRL_PBUF_TYPE); + if(NULL == p) + return; + if(p->tot_len != p->len) { + pbuf_free(p); + return; + } + + outp = (u_char*)p->payload; + + MAKEHEADER(outp, PPP_EAP); + + PUTCHAR(EAP_FAILURE, outp); + pcb->eap.es_server.ea_id++; + PUTCHAR(pcb->eap.es_server.ea_id, outp); + PUTSHORT(EAP_HEADERLEN, outp); + + ppp_write(pcb, p); + + pcb->eap.es_server.ea_state = eapBadAuth; + auth_peer_fail(pcb, PPP_EAP); +} + +/* + * Format a standard EAP Success message and send it to the peer. + * (Server operation) + */ +static void eap_send_success(ppp_pcb *pcb) { + struct pbuf *p; + u_char *outp; + + p = pbuf_alloc(PBUF_RAW, (u16_t)(PPP_HDRLEN + EAP_HEADERLEN), PPP_CTRL_PBUF_TYPE); + if(NULL == p) + return; + if(p->tot_len != p->len) { + pbuf_free(p); + return; + } + + outp = (u_char*)p->payload; + + MAKEHEADER(outp, PPP_EAP); + + PUTCHAR(EAP_SUCCESS, outp); + pcb->eap.es_server.ea_id++; + PUTCHAR(pcb->eap.es_server.ea_id, outp); + PUTSHORT(EAP_HEADERLEN, outp); + + ppp_write(pcb, p); + + auth_peer_success(pcb, PPP_EAP, 0, + pcb->eap.es_server.ea_peer, pcb->eap.es_server.ea_peerlen); +} +#endif /* PPP_SERVER */ + +#ifdef USE_SRP +/* + * Set DES key according to pseudonym-generating secret and current + * date. + */ +static bool +pncrypt_setkey(int timeoffs) +{ + struct tm *tp; + char tbuf[9]; + SHA1_CTX ctxt; + u_char dig[SHA_DIGESTSIZE]; + time_t reftime; + + if (pn_secret == NULL) + return (0); + reftime = time(NULL) + timeoffs; + tp = localtime(&reftime); + SHA1Init(&ctxt); + SHA1Update(&ctxt, pn_secret, strlen(pn_secret)); + strftime(tbuf, sizeof (tbuf), "%Y%m%d", tp); + SHA1Update(&ctxt, tbuf, strlen(tbuf)); + SHA1Final(dig, &ctxt); + /* FIXME: if we want to do SRP, we need to find a way to pass the PolarSSL des_context instead of using static memory */ + return (DesSetkey(dig)); +} + +static char base64[] = +"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + +struct b64state { + u32_t bs_bits; + int bs_offs; +}; + +static int +b64enc(bs, inp, inlen, outp) +struct b64state *bs; +u_char *inp; +int inlen; +u_char *outp; +{ + int outlen = 0; + + while (inlen > 0) { + bs->bs_bits = (bs->bs_bits << 8) | *inp++; + inlen--; + bs->bs_offs += 8; + if (bs->bs_offs >= 24) { + *outp++ = base64[(bs->bs_bits >> 18) & 0x3F]; + *outp++ = base64[(bs->bs_bits >> 12) & 0x3F]; + *outp++ = base64[(bs->bs_bits >> 6) & 0x3F]; + *outp++ = base64[bs->bs_bits & 0x3F]; + outlen += 4; + bs->bs_offs = 0; + bs->bs_bits = 0; + } + } + return (outlen); +} + +static int +b64flush(bs, outp) +struct b64state *bs; +u_char *outp; +{ + int outlen = 0; + + if (bs->bs_offs == 8) { + *outp++ = base64[(bs->bs_bits >> 2) & 0x3F]; + *outp++ = base64[(bs->bs_bits << 4) & 0x3F]; + outlen = 2; + } else if (bs->bs_offs == 16) { + *outp++ = base64[(bs->bs_bits >> 10) & 0x3F]; + *outp++ = base64[(bs->bs_bits >> 4) & 0x3F]; + *outp++ = base64[(bs->bs_bits << 2) & 0x3F]; + outlen = 3; + } + bs->bs_offs = 0; + bs->bs_bits = 0; + return (outlen); +} + +static int +b64dec(bs, inp, inlen, outp) +struct b64state *bs; +u_char *inp; +int inlen; +u_char *outp; +{ + int outlen = 0; + char *cp; + + while (inlen > 0) { + if ((cp = strchr(base64, *inp++)) == NULL) + break; + bs->bs_bits = (bs->bs_bits << 6) | (cp - base64); + inlen--; + bs->bs_offs += 6; + if (bs->bs_offs >= 8) { + *outp++ = bs->bs_bits >> (bs->bs_offs - 8); + outlen++; + bs->bs_offs -= 8; + } + } + return (outlen); +} +#endif /* USE_SRP */ + +#if PPP_SERVER +/* + * Assume that current waiting server state is complete and figure + * next state to use based on available authentication data. 'status' + * indicates if there was an error in handling the last query. It is + * 0 for success and non-zero for failure. + */ +static void eap_figure_next_state(ppp_pcb *pcb, int status) { +#ifdef USE_SRP + unsigned char secbuf[MAXSECRETLEN], clear[8], *sp, *dp; + struct t_pw tpw; + struct t_confent *tce, mytce; + char *cp, *cp2; + struct t_server *ts; + int id, i, plen, toffs; + u_char vals[2]; + struct b64state bs; +#endif /* USE_SRP */ + + pcb->settings.eap_timeout_time = pcb->eap.es_savedtime; + switch (pcb->eap.es_server.ea_state) { + case eapBadAuth: + return; + + case eapIdentify: +#ifdef USE_SRP + /* Discard any previous session. */ + ts = (struct t_server *)pcb->eap.es_server.ea_session; + if (ts != NULL) { + t_serverclose(ts); + pcb->eap.es_server.ea_session = NULL; + pcb->eap.es_server.ea_skey = NULL; + } +#endif /* USE_SRP */ + if (status != 0) { + pcb->eap.es_server.ea_state = eapBadAuth; + break; + } +#ifdef USE_SRP + /* If we've got a pseudonym, try to decode to real name. */ + if (pcb->eap.es_server.ea_peerlen > SRP_PSEUDO_LEN && + strncmp(pcb->eap.es_server.ea_peer, SRP_PSEUDO_ID, + SRP_PSEUDO_LEN) == 0 && + (pcb->eap.es_server.ea_peerlen - SRP_PSEUDO_LEN) * 3 / 4 < + sizeof (secbuf)) { + BZERO(&bs, sizeof (bs)); + plen = b64dec(&bs, + pcb->eap.es_server.ea_peer + SRP_PSEUDO_LEN, + pcb->eap.es_server.ea_peerlen - SRP_PSEUDO_LEN, + secbuf); + toffs = 0; + for (i = 0; i < 5; i++) { + pncrypt_setkey(toffs); + toffs -= 86400; + /* FIXME: if we want to do SRP, we need to find a way to pass the PolarSSL des_context instead of using static memory */ + if (!DesDecrypt(secbuf, clear)) { + ppp_dbglog("no DES here; cannot decode " + "pseudonym"); + return; + } + id = *(unsigned char *)clear; + if (id + 1 <= plen && id + 9 > plen) + break; + } + if (plen % 8 == 0 && i < 5) { + /* + * Note that this is always shorter than the + * original stored string, so there's no need + * to realloc. + */ + if ((i = plen = *(unsigned char *)clear) > 7) + i = 7; + pcb->eap.es_server.ea_peerlen = plen; + dp = (unsigned char *)pcb->eap.es_server.ea_peer; + MEMCPY(dp, clear + 1, i); + plen -= i; + dp += i; + sp = secbuf + 8; + while (plen > 0) { + /* FIXME: if we want to do SRP, we need to find a way to pass the PolarSSL des_context instead of using static memory */ + (void) DesDecrypt(sp, dp); + sp += 8; + dp += 8; + plen -= 8; + } + pcb->eap.es_server.ea_peer[ + pcb->eap.es_server.ea_peerlen] = '\0'; + ppp_dbglog("decoded pseudonym to \"%.*q\"", + pcb->eap.es_server.ea_peerlen, + pcb->eap.es_server.ea_peer); + } else { + ppp_dbglog("failed to decode real name"); + /* Stay in eapIdentfy state; requery */ + break; + } + } + /* Look up user in secrets database. */ + if (get_srp_secret(pcb->eap.es_unit, pcb->eap.es_server.ea_peer, + pcb->eap.es_server.ea_name, (char *)secbuf, 1) != 0) { + /* Set up default in case SRP entry is bad */ + pcb->eap.es_server.ea_state = eapMD5Chall; + /* Get t_confent based on index in srp-secrets */ + id = strtol((char *)secbuf, &cp, 10); + if (*cp++ != ':' || id < 0) + break; + if (id == 0) { + mytce.index = 0; + mytce.modulus.data = (u_char *)wkmodulus; + mytce.modulus.len = sizeof (wkmodulus); + mytce.generator.data = (u_char *)"\002"; + mytce.generator.len = 1; + tce = &mytce; + } else if ((tce = gettcid(id)) != NULL) { + /* + * Client will have to verify this modulus/ + * generator combination, and that will take + * a while. Lengthen the timeout here. + */ + if (pcb->settings.eap_timeout_time > 0 && + pcb->settings.eap_timeout_time < 30) + pcb->settings.eap_timeout_time = 30; + } else { + break; + } + if ((cp2 = strchr(cp, ':')) == NULL) + break; + *cp2++ = '\0'; + tpw.pebuf.name = pcb->eap.es_server.ea_peer; + tpw.pebuf.password.len = t_fromb64((char *)tpw.pwbuf, + cp); + tpw.pebuf.password.data = tpw.pwbuf; + tpw.pebuf.salt.len = t_fromb64((char *)tpw.saltbuf, + cp2); + tpw.pebuf.salt.data = tpw.saltbuf; + if ((ts = t_serveropenraw(&tpw.pebuf, tce)) == NULL) + break; + pcb->eap.es_server.ea_session = (void *)ts; + pcb->eap.es_server.ea_state = eapSRP1; + vals[0] = pcb->eap.es_server.ea_id + 1; + vals[1] = EAPT_SRP; + t_serveraddexdata(ts, vals, 2); + /* Generate B; must call before t_servergetkey() */ + t_servergenexp(ts); + break; + } +#endif /* USE_SRP */ + pcb->eap.es_server.ea_state = eapMD5Chall; + break; + + case eapSRP1: +#ifdef USE_SRP + ts = (struct t_server *)pcb->eap.es_server.ea_session; + if (ts != NULL && status != 0) { + t_serverclose(ts); + pcb->eap.es_server.ea_session = NULL; + pcb->eap.es_server.ea_skey = NULL; + } +#endif /* USE_SRP */ + if (status == 1) { + pcb->eap.es_server.ea_state = eapMD5Chall; + } else if (status != 0 || pcb->eap.es_server.ea_session == NULL) { + pcb->eap.es_server.ea_state = eapBadAuth; + } else { + pcb->eap.es_server.ea_state = eapSRP2; + } + break; + + case eapSRP2: +#ifdef USE_SRP + ts = (struct t_server *)pcb->eap.es_server.ea_session; + if (ts != NULL && status != 0) { + t_serverclose(ts); + pcb->eap.es_server.ea_session = NULL; + pcb->eap.es_server.ea_skey = NULL; + } +#endif /* USE_SRP */ + if (status != 0 || pcb->eap.es_server.ea_session == NULL) { + pcb->eap.es_server.ea_state = eapBadAuth; + } else { + pcb->eap.es_server.ea_state = eapSRP3; + } + break; + + case eapSRP3: + case eapSRP4: +#ifdef USE_SRP + ts = (struct t_server *)pcb->eap.es_server.ea_session; + if (ts != NULL && status != 0) { + t_serverclose(ts); + pcb->eap.es_server.ea_session = NULL; + pcb->eap.es_server.ea_skey = NULL; + } +#endif /* USE_SRP */ + if (status != 0 || pcb->eap.es_server.ea_session == NULL) { + pcb->eap.es_server.ea_state = eapBadAuth; + } else { + pcb->eap.es_server.ea_state = eapOpen; + } + break; + + case eapMD5Chall: + if (status != 0) { + pcb->eap.es_server.ea_state = eapBadAuth; + } else { + pcb->eap.es_server.ea_state = eapOpen; + } + break; + + default: + pcb->eap.es_server.ea_state = eapBadAuth; + break; + } + if (pcb->eap.es_server.ea_state == eapBadAuth) + eap_send_failure(pcb); +} + +/* + * Format an EAP Request message and send it to the peer. Message + * type depends on current state. (Server operation) + */ +static void eap_send_request(ppp_pcb *pcb) { + struct pbuf *p; + u_char *outp; + u_char *lenloc; + int outlen; + int len; + const char *str; +#ifdef USE_SRP + struct t_server *ts; + u_char clear[8], cipher[8], dig[SHA_DIGESTSIZE], *optr, *cp; + int i, j; + struct b64state b64; + SHA1_CTX ctxt; +#endif /* USE_SRP */ + + /* Handle both initial auth and restart */ + if (pcb->eap.es_server.ea_state < eapIdentify && + pcb->eap.es_server.ea_state != eapInitial) { + pcb->eap.es_server.ea_state = eapIdentify; +#if PPP_REMOTENAME + if (pcb->settings.explicit_remote && pcb->remote_name) { + /* + * If we already know the peer's + * unauthenticated name, then there's no + * reason to ask. Go to next state instead. + */ + int len = (int)strlen(pcb->remote_name); + if (len > MAXNAMELEN) { + len = MAXNAMELEN; + } + MEMCPY(pcb->eap.es_server.ea_peer, pcb->remote_name, len); + pcb->eap.es_server.ea_peer[len] = '\0'; + pcb->eap.es_server.ea_peerlen = len; + eap_figure_next_state(pcb, 0); + } +#endif /* PPP_REMOTENAME */ + } + + if (pcb->settings.eap_max_transmits > 0 && + pcb->eap.es_server.ea_requests >= pcb->settings.eap_max_transmits) { + if (pcb->eap.es_server.ea_responses > 0) + ppp_error("EAP: too many Requests sent"); + else + ppp_error("EAP: no response to Requests"); + eap_send_failure(pcb); + return; + } + + p = pbuf_alloc(PBUF_RAW, (u16_t)(PPP_CTRL_PBUF_MAX_SIZE), PPP_CTRL_PBUF_TYPE); + if(NULL == p) + return; + if(p->tot_len != p->len) { + pbuf_free(p); + return; + } + + outp = (u_char*)p->payload; + + MAKEHEADER(outp, PPP_EAP); + + PUTCHAR(EAP_REQUEST, outp); + PUTCHAR(pcb->eap.es_server.ea_id, outp); + lenloc = outp; + INCPTR(2, outp); + + switch (pcb->eap.es_server.ea_state) { + case eapIdentify: + PUTCHAR(EAPT_IDENTITY, outp); + str = "Name"; + len = strlen(str); + MEMCPY(outp, str, len); + INCPTR(len, outp); + break; + + case eapMD5Chall: + PUTCHAR(EAPT_MD5CHAP, outp); + /* + * pick a random challenge length between + * EAP_MIN_CHALLENGE_LENGTH and EAP_MAX_CHALLENGE_LENGTH + */ + pcb->eap.es_challen = EAP_MIN_CHALLENGE_LENGTH + + magic_pow(EAP_MIN_MAX_POWER_OF_TWO_CHALLENGE_LENGTH); + PUTCHAR(pcb->eap.es_challen, outp); + magic_random_bytes(pcb->eap.es_challenge, pcb->eap.es_challen); + MEMCPY(outp, pcb->eap.es_challenge, pcb->eap.es_challen); + INCPTR(pcb->eap.es_challen, outp); + MEMCPY(outp, pcb->eap.es_server.ea_name, pcb->eap.es_server.ea_namelen); + INCPTR(pcb->eap.es_server.ea_namelen, outp); + break; + +#ifdef USE_SRP + case eapSRP1: + PUTCHAR(EAPT_SRP, outp); + PUTCHAR(EAPSRP_CHALLENGE, outp); + + PUTCHAR(pcb->eap.es_server.ea_namelen, outp); + MEMCPY(outp, pcb->eap.es_server.ea_name, pcb->eap.es_server.ea_namelen); + INCPTR(pcb->eap.es_server.ea_namelen, outp); + + ts = (struct t_server *)pcb->eap.es_server.ea_session; + assert(ts != NULL); + PUTCHAR(ts->s.len, outp); + MEMCPY(outp, ts->s.data, ts->s.len); + INCPTR(ts->s.len, outp); + + if (ts->g.len == 1 && ts->g.data[0] == 2) { + PUTCHAR(0, outp); + } else { + PUTCHAR(ts->g.len, outp); + MEMCPY(outp, ts->g.data, ts->g.len); + INCPTR(ts->g.len, outp); + } + + if (ts->n.len != sizeof (wkmodulus) || + BCMP(ts->n.data, wkmodulus, sizeof (wkmodulus)) != 0) { + MEMCPY(outp, ts->n.data, ts->n.len); + INCPTR(ts->n.len, outp); + } + break; + + case eapSRP2: + PUTCHAR(EAPT_SRP, outp); + PUTCHAR(EAPSRP_SKEY, outp); + + ts = (struct t_server *)pcb->eap.es_server.ea_session; + assert(ts != NULL); + MEMCPY(outp, ts->B.data, ts->B.len); + INCPTR(ts->B.len, outp); + break; + + case eapSRP3: + PUTCHAR(EAPT_SRP, outp); + PUTCHAR(EAPSRP_SVALIDATOR, outp); + PUTLONG(SRPVAL_EBIT, outp); + ts = (struct t_server *)pcb->eap.es_server.ea_session; + assert(ts != NULL); + MEMCPY(outp, t_serverresponse(ts), SHA_DIGESTSIZE); + INCPTR(SHA_DIGESTSIZE, outp); + + if (pncrypt_setkey(0)) { + /* Generate pseudonym */ + optr = outp; + cp = (unsigned char *)pcb->eap.es_server.ea_peer; + if ((j = i = pcb->eap.es_server.ea_peerlen) > 7) + j = 7; + clear[0] = i; + MEMCPY(clear + 1, cp, j); + i -= j; + cp += j; + /* FIXME: if we want to do SRP, we need to find a way to pass the PolarSSL des_context instead of using static memory */ + if (!DesEncrypt(clear, cipher)) { + ppp_dbglog("no DES here; not generating pseudonym"); + break; + } + BZERO(&b64, sizeof (b64)); + outp++; /* space for pseudonym length */ + outp += b64enc(&b64, cipher, 8, outp); + while (i >= 8) { + /* FIXME: if we want to do SRP, we need to find a way to pass the PolarSSL des_context instead of using static memory */ + (void) DesEncrypt(cp, cipher); + outp += b64enc(&b64, cipher, 8, outp); + cp += 8; + i -= 8; + } + if (i > 0) { + MEMCPY(clear, cp, i); + cp += i; + magic_random_bytes(cp, 8-i); + /* FIXME: if we want to do SRP, we need to find a way to pass the PolarSSL des_context instead of using static memory */ + (void) DesEncrypt(clear, cipher); + outp += b64enc(&b64, cipher, 8, outp); + } + outp += b64flush(&b64, outp); + + /* Set length and pad out to next 20 octet boundary */ + i = outp - optr - 1; + *optr = i; + i %= SHA_DIGESTSIZE; + if (i != 0) { + magic_random_bytes(outp, SHA_DIGESTSIZE-i); + INCPTR(SHA_DIGESTSIZE-i, outp); + } + + /* Obscure the pseudonym with SHA1 hash */ + SHA1Init(&ctxt); + SHA1Update(&ctxt, &pcb->eap.es_server.ea_id, 1); + SHA1Update(&ctxt, pcb->eap.es_server.ea_skey, + SESSION_KEY_LEN); + SHA1Update(&ctxt, pcb->eap.es_server.ea_peer, + pcb->eap.es_server.ea_peerlen); + while (optr < outp) { + SHA1Final(dig, &ctxt); + cp = dig; + while (cp < dig + SHA_DIGESTSIZE) + *optr++ ^= *cp++; + SHA1Init(&ctxt); + SHA1Update(&ctxt, &pcb->eap.es_server.ea_id, 1); + SHA1Update(&ctxt, pcb->eap.es_server.ea_skey, + SESSION_KEY_LEN); + SHA1Update(&ctxt, optr - SHA_DIGESTSIZE, + SHA_DIGESTSIZE); + } + } + break; + + case eapSRP4: + PUTCHAR(EAPT_SRP, outp); + PUTCHAR(EAPSRP_LWRECHALLENGE, outp); + pcb->eap.es_challen = EAP_MIN_CHALLENGE_LENGTH + + magic_pow(EAP_MIN_MAX_POWER_OF_TWO_CHALLENGE_LENGTH); + magic_random_bytes(pcb->eap.es_challenge, pcb->eap.es_challen); + MEMCPY(outp, pcb->eap.es_challenge, pcb->eap.es_challen); + INCPTR(pcb->eap.es_challen, outp); + break; +#endif /* USE_SRP */ + + default: + return; + } + + outlen = (outp - (unsigned char*)p->payload) - PPP_HDRLEN; + PUTSHORT(outlen, lenloc); + + pbuf_realloc(p, outlen + PPP_HDRLEN); + ppp_write(pcb, p); + + pcb->eap.es_server.ea_requests++; + + if (pcb->settings.eap_timeout_time > 0) + TIMEOUT(eap_server_timeout, pcb, pcb->settings.eap_timeout_time); +} + +/* + * eap_authpeer - Authenticate our peer (behave as server). + * + * Start server state and send first request. This is called only + * after eap_lowerup. + */ +void eap_authpeer(ppp_pcb *pcb, const char *localname) { + + /* Save the name we're given. */ + pcb->eap.es_server.ea_name = localname; + pcb->eap.es_server.ea_namelen = strlen(localname); + + pcb->eap.es_savedtime = pcb->settings.eap_timeout_time; + + /* Lower layer up yet? */ + if (pcb->eap.es_server.ea_state == eapInitial || + pcb->eap.es_server.ea_state == eapPending) { + pcb->eap.es_server.ea_state = eapPending; + return; + } + + pcb->eap.es_server.ea_state = eapPending; + + /* ID number not updated here intentionally; hashed into M1 */ + eap_send_request(pcb); +} + +/* + * eap_server_timeout - Retransmission timer for sending Requests + * expired. + */ +static void eap_server_timeout(void *arg) { + ppp_pcb *pcb = (ppp_pcb*)arg; + + if (!eap_server_active(pcb)) + return; + + /* EAP ID number must not change on timeout. */ + eap_send_request(pcb); +} + +/* + * When it's time to send rechallenge the peer, this timeout is + * called. Once the rechallenge is successful, the response handler + * will restart the timer. If it fails, then the link is dropped. + */ +static void eap_rechallenge(void *arg) { + ppp_pcb *pcb = (ppp_pcb*)arg; + + if (pcb->eap.es_server.ea_state != eapOpen && + pcb->eap.es_server.ea_state != eapSRP4) + return; + + pcb->eap.es_server.ea_requests = 0; + pcb->eap.es_server.ea_state = eapIdentify; + eap_figure_next_state(pcb, 0); + pcb->eap.es_server.ea_id++; + eap_send_request(pcb); +} + +static void srp_lwrechallenge(void *arg) { + ppp_pcb *pcb = (ppp_pcb*)arg; + + if (pcb->eap.es_server.ea_state != eapOpen || + pcb->eap.es_server.ea_type != EAPT_SRP) + return; + + pcb->eap.es_server.ea_requests = 0; + pcb->eap.es_server.ea_state = eapSRP4; + pcb->eap.es_server.ea_id++; + eap_send_request(pcb); +} +#endif /* PPP_SERVER */ + +/* + * eap_lowerup - The lower layer is now up. + * + * This is called before either eap_authpeer or eap_authwithpeer. See + * link_established() in auth.c. All that's necessary here is to + * return to closed state so that those two routines will do the right + * thing. + */ +static void eap_lowerup(ppp_pcb *pcb) { + pcb->eap.es_client.ea_state = eapClosed; +#if PPP_SERVER + pcb->eap.es_server.ea_state = eapClosed; +#endif /* PPP_SERVER */ +} + +/* + * eap_lowerdown - The lower layer is now down. + * + * Cancel all timeouts and return to initial state. + */ +static void eap_lowerdown(ppp_pcb *pcb) { + + if (eap_client_active(pcb) && pcb->settings.eap_req_time > 0) { + UNTIMEOUT(eap_client_timeout, pcb); + } +#if PPP_SERVER + if (eap_server_active(pcb)) { + if (pcb->settings.eap_timeout_time > 0) { + UNTIMEOUT(eap_server_timeout, pcb); + } + } else { + if ((pcb->eap.es_server.ea_state == eapOpen || + pcb->eap.es_server.ea_state == eapSRP4) && + pcb->eap.es_rechallenge > 0) { + UNTIMEOUT(eap_rechallenge, (void *)pcb); + } + if (pcb->eap.es_server.ea_state == eapOpen && + pcb->eap.es_lwrechallenge > 0) { + UNTIMEOUT(srp_lwrechallenge, (void *)pcb); + } + } + + pcb->eap.es_client.ea_state = pcb->eap.es_server.ea_state = eapInitial; + pcb->eap.es_client.ea_requests = pcb->eap.es_server.ea_requests = 0; +#endif /* PPP_SERVER */ +} + +/* + * eap_protrej - Peer doesn't speak this protocol. + * + * This shouldn't happen. If it does, it represents authentication + * failure. + */ +static void eap_protrej(ppp_pcb *pcb) { + + if (eap_client_active(pcb)) { + ppp_error("EAP authentication failed due to Protocol-Reject"); + auth_withpeer_fail(pcb, PPP_EAP); + } +#if PPP_SERVER + if (eap_server_active(pcb)) { + ppp_error("EAP authentication of peer failed on Protocol-Reject"); + auth_peer_fail(pcb, PPP_EAP); + } +#endif /* PPP_SERVER */ + eap_lowerdown(pcb); +} + +/* + * Format and send a regular EAP Response message. + */ +static void eap_send_response(ppp_pcb *pcb, u_char id, u_char typenum, const u_char *str, int lenstr) { + struct pbuf *p; + u_char *outp; + int msglen; + + msglen = EAP_HEADERLEN + sizeof (u_char) + lenstr; + p = pbuf_alloc(PBUF_RAW, (u16_t)(PPP_HDRLEN + msglen), PPP_CTRL_PBUF_TYPE); + if(NULL == p) + return; + if(p->tot_len != p->len) { + pbuf_free(p); + return; + } + + outp = (u_char*)p->payload; + + MAKEHEADER(outp, PPP_EAP); + + PUTCHAR(EAP_RESPONSE, outp); + PUTCHAR(id, outp); + pcb->eap.es_client.ea_id = id; + PUTSHORT(msglen, outp); + PUTCHAR(typenum, outp); + if (lenstr > 0) { + MEMCPY(outp, str, lenstr); + } + + ppp_write(pcb, p); +} + +/* + * Format and send an MD5-Challenge EAP Response message. + */ +static void eap_chap_response(ppp_pcb *pcb, u_char id, u_char *hash, const char *name, int namelen) { + struct pbuf *p; + u_char *outp; + int msglen; + + msglen = EAP_HEADERLEN + 2 * sizeof (u_char) + MD5_SIGNATURE_SIZE + + namelen; + p = pbuf_alloc(PBUF_RAW, (u16_t)(PPP_HDRLEN + msglen), PPP_CTRL_PBUF_TYPE); + if(NULL == p) + return; + if(p->tot_len != p->len) { + pbuf_free(p); + return; + } + + outp = (u_char*)p->payload; + + MAKEHEADER(outp, PPP_EAP); + + PUTCHAR(EAP_RESPONSE, outp); + PUTCHAR(id, outp); + pcb->eap.es_client.ea_id = id; + PUTSHORT(msglen, outp); + PUTCHAR(EAPT_MD5CHAP, outp); + PUTCHAR(MD5_SIGNATURE_SIZE, outp); + MEMCPY(outp, hash, MD5_SIGNATURE_SIZE); + INCPTR(MD5_SIGNATURE_SIZE, outp); + if (namelen > 0) { + MEMCPY(outp, name, namelen); + } + + ppp_write(pcb, p); +} + +#ifdef USE_SRP +/* + * Format and send a SRP EAP Response message. + */ +static void +eap_srp_response(esp, id, subtypenum, str, lenstr) +eap_state *esp; +u_char id; +u_char subtypenum; +u_char *str; +int lenstr; +{ + ppp_pcb *pcb = &ppp_pcb_list[pcb->eap.es_unit]; + struct pbuf *p; + u_char *outp; + int msglen; + + msglen = EAP_HEADERLEN + 2 * sizeof (u_char) + lenstr; + p = pbuf_alloc(PBUF_RAW, (u16_t)(PPP_HDRLEN + msglen), PPP_CTRL_PBUF_TYPE); + if(NULL == p) + return; + if(p->tot_len != p->len) { + pbuf_free(p); + return; + } + + outp = p->payload; + + MAKEHEADER(outp, PPP_EAP); + + PUTCHAR(EAP_RESPONSE, outp); + PUTCHAR(id, outp); + pcb->eap.es_client.ea_id = id; + PUTSHORT(msglen, outp); + PUTCHAR(EAPT_SRP, outp); + PUTCHAR(subtypenum, outp); + if (lenstr > 0) { + MEMCPY(outp, str, lenstr); + } + + ppp_write(pcb, p); +} + +/* + * Format and send a SRP EAP Client Validator Response message. + */ +static void +eap_srpval_response(esp, id, flags, str) +eap_state *esp; +u_char id; +u32_t flags; +u_char *str; +{ + ppp_pcb *pcb = &ppp_pcb_list[pcb->eap.es_unit]; + struct pbuf *p; + u_char *outp; + int msglen; + + msglen = EAP_HEADERLEN + 2 * sizeof (u_char) + sizeof (u32_t) + + SHA_DIGESTSIZE; + p = pbuf_alloc(PBUF_RAW, (u16_t)(PPP_HDRLEN + msglen), PPP_CTRL_PBUF_TYPE); + if(NULL == p) + return; + if(p->tot_len != p->len) { + pbuf_free(p); + return; + } + + outp = p->payload; + + MAKEHEADER(outp, PPP_EAP); + + PUTCHAR(EAP_RESPONSE, outp); + PUTCHAR(id, outp); + pcb->eap.es_client.ea_id = id; + PUTSHORT(msglen, outp); + PUTCHAR(EAPT_SRP, outp); + PUTCHAR(EAPSRP_CVALIDATOR, outp); + PUTLONG(flags, outp); + MEMCPY(outp, str, SHA_DIGESTSIZE); + + ppp_write(pcb, p); +} +#endif /* USE_SRP */ + +static void eap_send_nak(ppp_pcb *pcb, u_char id, u_char type) { + struct pbuf *p; + u_char *outp; + int msglen; + + msglen = EAP_HEADERLEN + 2 * sizeof (u_char); + p = pbuf_alloc(PBUF_RAW, (u16_t)(PPP_HDRLEN + msglen), PPP_CTRL_PBUF_TYPE); + if(NULL == p) + return; + if(p->tot_len != p->len) { + pbuf_free(p); + return; + } + + outp = (u_char*)p->payload; + + MAKEHEADER(outp, PPP_EAP); + + PUTCHAR(EAP_RESPONSE, outp); + PUTCHAR(id, outp); + pcb->eap.es_client.ea_id = id; + PUTSHORT(msglen, outp); + PUTCHAR(EAPT_NAK, outp); + PUTCHAR(type, outp); + + ppp_write(pcb, p); +} + +#ifdef USE_SRP +static char * +name_of_pn_file() +{ + char *user, *path, *file; + struct passwd *pw; + size_t pl; + static bool pnlogged = 0; + + pw = getpwuid(getuid()); + if (pw == NULL || (user = pw->pw_dir) == NULL || user[0] == 0) { + errno = EINVAL; + return (NULL); + } + file = _PATH_PSEUDONYM; + pl = strlen(user) + strlen(file) + 2; + path = malloc(pl); + if (path == NULL) + return (NULL); + (void) slprintf(path, pl, "%s/%s", user, file); + if (!pnlogged) { + ppp_dbglog("pseudonym file: %s", path); + pnlogged = 1; + } + return (path); +} + +static int +open_pn_file(modebits) +mode_t modebits; +{ + char *path; + int fd, err; + + if ((path = name_of_pn_file()) == NULL) + return (-1); + fd = open(path, modebits, S_IRUSR | S_IWUSR); + err = errno; + free(path); + errno = err; + return (fd); +} + +static void +remove_pn_file() +{ + char *path; + + if ((path = name_of_pn_file()) != NULL) { + (void) unlink(path); + (void) free(path); + } +} + +static void +write_pseudonym(esp, inp, len, id) +eap_state *esp; +u_char *inp; +int len, id; +{ + u_char val; + u_char *datp, *digp; + SHA1_CTX ctxt; + u_char dig[SHA_DIGESTSIZE]; + int dsize, fd, olen = len; + + /* + * Do the decoding by working backwards. This eliminates the need + * to save the decoded output in a separate buffer. + */ + val = id; + while (len > 0) { + if ((dsize = len % SHA_DIGESTSIZE) == 0) + dsize = SHA_DIGESTSIZE; + len -= dsize; + datp = inp + len; + SHA1Init(&ctxt); + SHA1Update(&ctxt, &val, 1); + SHA1Update(&ctxt, pcb->eap.es_client.ea_skey, SESSION_KEY_LEN); + if (len > 0) { + SHA1Update(&ctxt, datp, SHA_DIGESTSIZE); + } else { + SHA1Update(&ctxt, pcb->eap.es_client.ea_name, + pcb->eap.es_client.ea_namelen); + } + SHA1Final(dig, &ctxt); + for (digp = dig; digp < dig + SHA_DIGESTSIZE; digp++) + *datp++ ^= *digp; + } + + /* Now check that the result is sane */ + if (olen <= 0 || *inp + 1 > olen) { + ppp_dbglog("EAP: decoded pseudonym is unusable <%.*B>", olen, inp); + return; + } + + /* Save it away */ + fd = open_pn_file(O_WRONLY | O_CREAT | O_TRUNC); + if (fd < 0) { + ppp_dbglog("EAP: error saving pseudonym: %m"); + return; + } + len = write(fd, inp + 1, *inp); + if (close(fd) != -1 && len == *inp) { + ppp_dbglog("EAP: saved pseudonym"); + pcb->eap.es_usedpseudo = 0; + } else { + ppp_dbglog("EAP: failed to save pseudonym"); + remove_pn_file(); + } +} +#endif /* USE_SRP */ + +/* + * eap_request - Receive EAP Request message (client mode). + */ +static void eap_request(ppp_pcb *pcb, u_char *inp, int id, int len) { + u_char typenum; + u_char vallen; + int secret_len; + char secret[MAXSECRETLEN]; + char rhostname[MAXNAMELEN]; + lwip_md5_context mdContext; + u_char hash[MD5_SIGNATURE_SIZE]; +#ifdef USE_SRP + struct t_client *tc; + struct t_num sval, gval, Nval, *Ap, Bval; + u_char vals[2]; + SHA1_CTX ctxt; + u_char dig[SHA_DIGESTSIZE]; + int fd; +#endif /* USE_SRP */ + + /* + * Note: we update es_client.ea_id *only if* a Response + * message is being generated. Otherwise, we leave it the + * same for duplicate detection purposes. + */ + + pcb->eap.es_client.ea_requests++; + if (pcb->settings.eap_allow_req != 0 && + pcb->eap.es_client.ea_requests > pcb->settings.eap_allow_req) { + ppp_info("EAP: received too many Request messages"); + if (pcb->settings.eap_req_time > 0) { + UNTIMEOUT(eap_client_timeout, pcb); + } + auth_withpeer_fail(pcb, PPP_EAP); + return; + } + + if (len <= 0) { + ppp_error("EAP: empty Request message discarded"); + return; + } + + GETCHAR(typenum, inp); + len--; + + switch (typenum) { + case EAPT_IDENTITY: + if (len > 0) + ppp_info("EAP: Identity prompt \"%.*q\"", len, inp); +#ifdef USE_SRP + if (pcb->eap.es_usepseudo && + (pcb->eap.es_usedpseudo == 0 || + (pcb->eap.es_usedpseudo == 1 && + id == pcb->eap.es_client.ea_id))) { + pcb->eap.es_usedpseudo = 1; + /* Try to get a pseudonym */ + if ((fd = open_pn_file(O_RDONLY)) >= 0) { + strcpy(rhostname, SRP_PSEUDO_ID); + len = read(fd, rhostname + SRP_PSEUDO_LEN, + sizeof (rhostname) - SRP_PSEUDO_LEN); + /* XXX NAI unsupported */ + if (len > 0) { + eap_send_response(pcb, id, typenum, + rhostname, len + SRP_PSEUDO_LEN); + } + (void) close(fd); + if (len > 0) + break; + } + } + /* Stop using pseudonym now. */ + if (pcb->eap.es_usepseudo && pcb->eap.es_usedpseudo != 2) { + remove_pn_file(); + pcb->eap.es_usedpseudo = 2; + } +#endif /* USE_SRP */ + eap_send_response(pcb, id, typenum, (const u_char*)pcb->eap.es_client.ea_name, + pcb->eap.es_client.ea_namelen); + break; + + case EAPT_NOTIFICATION: + if (len > 0) + ppp_info("EAP: Notification \"%.*q\"", len, inp); + eap_send_response(pcb, id, typenum, NULL, 0); + break; + + case EAPT_NAK: + /* + * Avoid the temptation to send Response Nak in reply + * to Request Nak here. It can only lead to trouble. + */ + ppp_warn("EAP: unexpected Nak in Request; ignored"); + /* Return because we're waiting for something real. */ + return; + + case EAPT_MD5CHAP: + if (len < 1) { + ppp_error("EAP: received MD5-Challenge with no data"); + /* Bogus request; wait for something real. */ + return; + } + GETCHAR(vallen, inp); + len--; + if (vallen < 8 || vallen > len) { + ppp_error("EAP: MD5-Challenge with bad length %d (8..%d)", + vallen, len); + /* Try something better. */ + eap_send_nak(pcb, id, EAPT_SRP); + break; + } + + /* Not so likely to happen. */ + if (vallen >= len + sizeof (rhostname)) { + ppp_dbglog("EAP: trimming really long peer name down"); + MEMCPY(rhostname, inp + vallen, sizeof (rhostname) - 1); + rhostname[sizeof (rhostname) - 1] = '\0'; + } else { + MEMCPY(rhostname, inp + vallen, len - vallen); + rhostname[len - vallen] = '\0'; + } + +#if PPP_REMOTENAME + /* In case the remote doesn't give us his name. */ + if (pcb->settings.explicit_remote || + (pcb->settings.remote_name[0] != '\0' && vallen == len)) + strlcpy(rhostname, pcb->settings.remote_name, sizeof (rhostname)); +#endif /* PPP_REMOTENAME */ + + /* + * Get the secret for authenticating ourselves with + * the specified host. + */ + if (!get_secret(pcb, pcb->eap.es_client.ea_name, + rhostname, secret, &secret_len, 0)) { + ppp_dbglog("EAP: no MD5 secret for auth to %q", rhostname); + eap_send_nak(pcb, id, EAPT_SRP); + break; + } + lwip_md5_init(&mdContext); + lwip_md5_starts(&mdContext); + typenum = id; + lwip_md5_update(&mdContext, &typenum, 1); + lwip_md5_update(&mdContext, (u_char *)secret, secret_len); + BZERO(secret, sizeof (secret)); + lwip_md5_update(&mdContext, inp, vallen); + lwip_md5_finish(&mdContext, hash); + lwip_md5_free(&mdContext); + eap_chap_response(pcb, id, hash, pcb->eap.es_client.ea_name, + pcb->eap.es_client.ea_namelen); + break; + +#ifdef USE_SRP + case EAPT_SRP: + if (len < 1) { + ppp_error("EAP: received empty SRP Request"); + /* Bogus request; wait for something real. */ + return; + } + + /* Get subtype */ + GETCHAR(vallen, inp); + len--; + switch (vallen) { + case EAPSRP_CHALLENGE: + tc = NULL; + if (pcb->eap.es_client.ea_session != NULL) { + tc = (struct t_client *)pcb->eap.es_client. + ea_session; + /* + * If this is a new challenge, then start + * over with a new client session context. + * Otherwise, just resend last response. + */ + if (id != pcb->eap.es_client.ea_id) { + t_clientclose(tc); + pcb->eap.es_client.ea_session = NULL; + tc = NULL; + } + } + /* No session key just yet */ + pcb->eap.es_client.ea_skey = NULL; + if (tc == NULL) { + int rhostnamelen; + + GETCHAR(vallen, inp); + len--; + if (vallen >= len) { + ppp_error("EAP: badly-formed SRP Challenge" + " (name)"); + /* Ignore badly-formed messages */ + return; + } + MEMCPY(rhostname, inp, vallen); + rhostname[vallen] = '\0'; + INCPTR(vallen, inp); + len -= vallen; + + /* + * In case the remote doesn't give us his name, + * use configured name. + */ + if (explicit_remote || + (remote_name[0] != '\0' && vallen == 0)) { + strlcpy(rhostname, remote_name, + sizeof (rhostname)); + } + + rhostnamelen = (int)strlen(rhostname); + if (rhostnamelen > MAXNAMELEN) { + rhostnamelen = MAXNAMELEN; + } + MEMCPY(pcb->eap.es_client.ea_peer, rhostname, rhostnamelen); + pcb->eap.es_client.ea_peer[rhostnamelen] = '\0'; + pcb->eap.es_client.ea_peerlen = rhostnamelen; + + GETCHAR(vallen, inp); + len--; + if (vallen >= len) { + ppp_error("EAP: badly-formed SRP Challenge" + " (s)"); + /* Ignore badly-formed messages */ + return; + } + sval.data = inp; + sval.len = vallen; + INCPTR(vallen, inp); + len -= vallen; + + GETCHAR(vallen, inp); + len--; + if (vallen > len) { + ppp_error("EAP: badly-formed SRP Challenge" + " (g)"); + /* Ignore badly-formed messages */ + return; + } + /* If no generator present, then use value 2 */ + if (vallen == 0) { + gval.data = (u_char *)"\002"; + gval.len = 1; + } else { + gval.data = inp; + gval.len = vallen; + } + INCPTR(vallen, inp); + len -= vallen; + + /* + * If no modulus present, then use well-known + * value. + */ + if (len == 0) { + Nval.data = (u_char *)wkmodulus; + Nval.len = sizeof (wkmodulus); + } else { + Nval.data = inp; + Nval.len = len; + } + tc = t_clientopen(pcb->eap.es_client.ea_name, + &Nval, &gval, &sval); + if (tc == NULL) { + eap_send_nak(pcb, id, EAPT_MD5CHAP); + break; + } + pcb->eap.es_client.ea_session = (void *)tc; + + /* Add Challenge ID & type to verifier */ + vals[0] = id; + vals[1] = EAPT_SRP; + t_clientaddexdata(tc, vals, 2); + } + Ap = t_clientgenexp(tc); + eap_srp_response(esp, id, EAPSRP_CKEY, Ap->data, + Ap->len); + break; + + case EAPSRP_SKEY: + tc = (struct t_client *)pcb->eap.es_client.ea_session; + if (tc == NULL) { + ppp_warn("EAP: peer sent Subtype 2 without 1"); + eap_send_nak(pcb, id, EAPT_MD5CHAP); + break; + } + if (pcb->eap.es_client.ea_skey != NULL) { + /* + * ID number should not change here. Warn + * if it does (but otherwise ignore). + */ + if (id != pcb->eap.es_client.ea_id) { + ppp_warn("EAP: ID changed from %d to %d " + "in SRP Subtype 2 rexmit", + pcb->eap.es_client.ea_id, id); + } + } else { + if (get_srp_secret(pcb->eap.es_unit, + pcb->eap.es_client.ea_name, + pcb->eap.es_client.ea_peer, secret, 0) == 0) { + /* + * Can't work with this peer because + * the secret is missing. Just give + * up. + */ + eap_send_nak(pcb, id, EAPT_MD5CHAP); + break; + } + Bval.data = inp; + Bval.len = len; + t_clientpasswd(tc, secret); + BZERO(secret, sizeof (secret)); + pcb->eap.es_client.ea_skey = + t_clientgetkey(tc, &Bval); + if (pcb->eap.es_client.ea_skey == NULL) { + /* Server is rogue; stop now */ + ppp_error("EAP: SRP server is rogue"); + goto client_failure; + } + } + eap_srpval_response(esp, id, SRPVAL_EBIT, + t_clientresponse(tc)); + break; + + case EAPSRP_SVALIDATOR: + tc = (struct t_client *)pcb->eap.es_client.ea_session; + if (tc == NULL || pcb->eap.es_client.ea_skey == NULL) { + ppp_warn("EAP: peer sent Subtype 3 without 1/2"); + eap_send_nak(pcb, id, EAPT_MD5CHAP); + break; + } + /* + * If we're already open, then this ought to be a + * duplicate. Otherwise, check that the server is + * who we think it is. + */ + if (pcb->eap.es_client.ea_state == eapOpen) { + if (id != pcb->eap.es_client.ea_id) { + ppp_warn("EAP: ID changed from %d to %d " + "in SRP Subtype 3 rexmit", + pcb->eap.es_client.ea_id, id); + } + } else { + len -= sizeof (u32_t) + SHA_DIGESTSIZE; + if (len < 0 || t_clientverify(tc, inp + + sizeof (u32_t)) != 0) { + ppp_error("EAP: SRP server verification " + "failed"); + goto client_failure; + } + GETLONG(pcb->eap.es_client.ea_keyflags, inp); + /* Save pseudonym if user wants it. */ + if (len > 0 && pcb->eap.es_usepseudo) { + INCPTR(SHA_DIGESTSIZE, inp); + write_pseudonym(esp, inp, len, id); + } + } + /* + * We've verified our peer. We're now mostly done, + * except for waiting on the regular EAP Success + * message. + */ + eap_srp_response(esp, id, EAPSRP_ACK, NULL, 0); + break; + + case EAPSRP_LWRECHALLENGE: + if (len < 4) { + ppp_warn("EAP: malformed Lightweight rechallenge"); + return; + } + SHA1Init(&ctxt); + vals[0] = id; + SHA1Update(&ctxt, vals, 1); + SHA1Update(&ctxt, pcb->eap.es_client.ea_skey, + SESSION_KEY_LEN); + SHA1Update(&ctxt, inp, len); + SHA1Update(&ctxt, pcb->eap.es_client.ea_name, + pcb->eap.es_client.ea_namelen); + SHA1Final(dig, &ctxt); + eap_srp_response(esp, id, EAPSRP_LWRECHALLENGE, dig, + SHA_DIGESTSIZE); + break; + + default: + ppp_error("EAP: unknown SRP Subtype %d", vallen); + eap_send_nak(pcb, id, EAPT_MD5CHAP); + break; + } + break; +#endif /* USE_SRP */ + + default: + ppp_info("EAP: unknown authentication type %d; Naking", typenum); + eap_send_nak(pcb, id, EAPT_SRP); + break; + } + + if (pcb->settings.eap_req_time > 0) { + UNTIMEOUT(eap_client_timeout, pcb); + TIMEOUT(eap_client_timeout, pcb, + pcb->settings.eap_req_time); + } + return; + +#ifdef USE_SRP +client_failure: + pcb->eap.es_client.ea_state = eapBadAuth; + if (pcb->settings.eap_req_time > 0) { + UNTIMEOUT(eap_client_timeout, (void *)esp); + } + pcb->eap.es_client.ea_session = NULL; + t_clientclose(tc); + auth_withpeer_fail(pcb, PPP_EAP); +#endif /* USE_SRP */ +} + +#if PPP_SERVER +/* + * eap_response - Receive EAP Response message (server mode). + */ +static void eap_response(ppp_pcb *pcb, u_char *inp, int id, int len) { + u_char typenum; + u_char vallen; + int secret_len; + char secret[MAXSECRETLEN]; + char rhostname[MAXNAMELEN]; + lwip_md5_context mdContext; + u_char hash[MD5_SIGNATURE_SIZE]; +#ifdef USE_SRP + struct t_server *ts; + struct t_num A; + SHA1_CTX ctxt; + u_char dig[SHA_DIGESTSIZE]; +#endif /* USE_SRP */ + + if (pcb->eap.es_server.ea_id != id) { + ppp_dbglog("EAP: discarding Response %d; expected ID %d", id, + pcb->eap.es_server.ea_id); + return; + } + + pcb->eap.es_server.ea_responses++; + + if (len <= 0) { + ppp_error("EAP: empty Response message discarded"); + return; + } + + GETCHAR(typenum, inp); + len--; + + switch (typenum) { + case EAPT_IDENTITY: + if (pcb->eap.es_server.ea_state != eapIdentify) { + ppp_dbglog("EAP discarding unwanted Identify \"%.q\"", len, + inp); + break; + } + ppp_info("EAP: unauthenticated peer name \"%.*q\"", len, inp); + if (len > MAXNAMELEN) { + len = MAXNAMELEN; + } + MEMCPY(pcb->eap.es_server.ea_peer, inp, len); + pcb->eap.es_server.ea_peer[len] = '\0'; + pcb->eap.es_server.ea_peerlen = len; + eap_figure_next_state(pcb, 0); + break; + + case EAPT_NOTIFICATION: + ppp_dbglog("EAP unexpected Notification; response discarded"); + break; + + case EAPT_NAK: + if (len < 1) { + ppp_info("EAP: Nak Response with no suggested protocol"); + eap_figure_next_state(pcb, 1); + break; + } + + GETCHAR(vallen, inp); + len--; + + if ( +#if PPP_REMOTENAME + !pcb->explicit_remote && +#endif /* PPP_REMOTENAME */ + pcb->eap.es_server.ea_state == eapIdentify){ + /* Peer cannot Nak Identify Request */ + eap_figure_next_state(pcb, 1); + break; + } + + switch (vallen) { + case EAPT_SRP: + /* Run through SRP validator selection again. */ + pcb->eap.es_server.ea_state = eapIdentify; + eap_figure_next_state(pcb, 0); + break; + + case EAPT_MD5CHAP: + pcb->eap.es_server.ea_state = eapMD5Chall; + break; + + default: + ppp_dbglog("EAP: peer requesting unknown Type %d", vallen); + switch (pcb->eap.es_server.ea_state) { + case eapSRP1: + case eapSRP2: + case eapSRP3: + pcb->eap.es_server.ea_state = eapMD5Chall; + break; + case eapMD5Chall: + case eapSRP4: + pcb->eap.es_server.ea_state = eapIdentify; + eap_figure_next_state(pcb, 0); + break; + default: + break; + } + break; + } + break; + + case EAPT_MD5CHAP: + if (pcb->eap.es_server.ea_state != eapMD5Chall) { + ppp_error("EAP: unexpected MD5-Response"); + eap_figure_next_state(pcb, 1); + break; + } + if (len < 1) { + ppp_error("EAP: received MD5-Response with no data"); + eap_figure_next_state(pcb, 1); + break; + } + GETCHAR(vallen, inp); + len--; + if (vallen != 16 || vallen > len) { + ppp_error("EAP: MD5-Response with bad length %d", vallen); + eap_figure_next_state(pcb, 1); + break; + } + + /* Not so likely to happen. */ + if (vallen >= len + sizeof (rhostname)) { + ppp_dbglog("EAP: trimming really long peer name down"); + MEMCPY(rhostname, inp + vallen, sizeof (rhostname) - 1); + rhostname[sizeof (rhostname) - 1] = '\0'; + } else { + MEMCPY(rhostname, inp + vallen, len - vallen); + rhostname[len - vallen] = '\0'; + } + +#if PPP_REMOTENAME + /* In case the remote doesn't give us his name. */ + if (explicit_remote || + (remote_name[0] != '\0' && vallen == len)) + strlcpy(rhostname, remote_name, sizeof (rhostname)); +#endif /* PPP_REMOTENAME */ + + /* + * Get the secret for authenticating the specified + * host. + */ + if (!get_secret(pcb, rhostname, + pcb->eap.es_server.ea_name, secret, &secret_len, 1)) { + ppp_dbglog("EAP: no MD5 secret for auth of %q", rhostname); + eap_send_failure(pcb); + break; + } + lwip_md5_init(&mdContext); + lwip_md5_starts(&mdContext); + lwip_md5_update(&mdContext, &pcb->eap.es_server.ea_id, 1); + lwip_md5_update(&mdContext, (u_char *)secret, secret_len); + BZERO(secret, sizeof (secret)); + lwip_md5_update(&mdContext, pcb->eap.es_challenge, pcb->eap.es_challen); + lwip_md5_finish(&mdContext, hash); + lwip_md5_free(&mdContext); + if (BCMP(hash, inp, MD5_SIGNATURE_SIZE) != 0) { + eap_send_failure(pcb); + break; + } + pcb->eap.es_server.ea_type = EAPT_MD5CHAP; + eap_send_success(pcb); + eap_figure_next_state(pcb, 0); + if (pcb->eap.es_rechallenge != 0) + TIMEOUT(eap_rechallenge, pcb, pcb->eap.es_rechallenge); + break; + +#ifdef USE_SRP + case EAPT_SRP: + if (len < 1) { + ppp_error("EAP: empty SRP Response"); + eap_figure_next_state(pcb, 1); + break; + } + GETCHAR(typenum, inp); + len--; + switch (typenum) { + case EAPSRP_CKEY: + if (pcb->eap.es_server.ea_state != eapSRP1) { + ppp_error("EAP: unexpected SRP Subtype 1 Response"); + eap_figure_next_state(pcb, 1); + break; + } + A.data = inp; + A.len = len; + ts = (struct t_server *)pcb->eap.es_server.ea_session; + assert(ts != NULL); + pcb->eap.es_server.ea_skey = t_servergetkey(ts, &A); + if (pcb->eap.es_server.ea_skey == NULL) { + /* Client's A value is bogus; terminate now */ + ppp_error("EAP: bogus A value from client"); + eap_send_failure(pcb); + } else { + eap_figure_next_state(pcb, 0); + } + break; + + case EAPSRP_CVALIDATOR: + if (pcb->eap.es_server.ea_state != eapSRP2) { + ppp_error("EAP: unexpected SRP Subtype 2 Response"); + eap_figure_next_state(pcb, 1); + break; + } + if (len < sizeof (u32_t) + SHA_DIGESTSIZE) { + ppp_error("EAP: M1 length %d < %d", len, + sizeof (u32_t) + SHA_DIGESTSIZE); + eap_figure_next_state(pcb, 1); + break; + } + GETLONG(pcb->eap.es_server.ea_keyflags, inp); + ts = (struct t_server *)pcb->eap.es_server.ea_session; + assert(ts != NULL); + if (t_serververify(ts, inp)) { + ppp_info("EAP: unable to validate client identity"); + eap_send_failure(pcb); + break; + } + eap_figure_next_state(pcb, 0); + break; + + case EAPSRP_ACK: + if (pcb->eap.es_server.ea_state != eapSRP3) { + ppp_error("EAP: unexpected SRP Subtype 3 Response"); + eap_send_failure(esp); + break; + } + pcb->eap.es_server.ea_type = EAPT_SRP; + eap_send_success(pcb, esp); + eap_figure_next_state(pcb, 0); + if (pcb->eap.es_rechallenge != 0) + TIMEOUT(eap_rechallenge, pcb, + pcb->eap.es_rechallenge); + if (pcb->eap.es_lwrechallenge != 0) + TIMEOUT(srp_lwrechallenge, pcb, + pcb->eap.es_lwrechallenge); + break; + + case EAPSRP_LWRECHALLENGE: + if (pcb->eap.es_server.ea_state != eapSRP4) { + ppp_info("EAP: unexpected SRP Subtype 4 Response"); + return; + } + if (len != SHA_DIGESTSIZE) { + ppp_error("EAP: bad Lightweight rechallenge " + "response"); + return; + } + SHA1Init(&ctxt); + vallen = id; + SHA1Update(&ctxt, &vallen, 1); + SHA1Update(&ctxt, pcb->eap.es_server.ea_skey, + SESSION_KEY_LEN); + SHA1Update(&ctxt, pcb->eap.es_challenge, pcb->eap.es_challen); + SHA1Update(&ctxt, pcb->eap.es_server.ea_peer, + pcb->eap.es_server.ea_peerlen); + SHA1Final(dig, &ctxt); + if (BCMP(dig, inp, SHA_DIGESTSIZE) != 0) { + ppp_error("EAP: failed Lightweight rechallenge"); + eap_send_failure(pcb); + break; + } + pcb->eap.es_server.ea_state = eapOpen; + if (pcb->eap.es_lwrechallenge != 0) + TIMEOUT(srp_lwrechallenge, esp, + pcb->eap.es_lwrechallenge); + break; + } + break; +#endif /* USE_SRP */ + + default: + /* This can't happen. */ + ppp_error("EAP: unknown Response type %d; ignored", typenum); + return; + } + + if (pcb->settings.eap_timeout_time > 0) { + UNTIMEOUT(eap_server_timeout, pcb); + } + + if (pcb->eap.es_server.ea_state != eapBadAuth && + pcb->eap.es_server.ea_state != eapOpen) { + pcb->eap.es_server.ea_id++; + eap_send_request(pcb); + } +} +#endif /* PPP_SERVER */ + +/* + * eap_success - Receive EAP Success message (client mode). + */ +static void eap_success(ppp_pcb *pcb, u_char *inp, int id, int len) { + LWIP_UNUSED_ARG(id); + + if (pcb->eap.es_client.ea_state != eapOpen && !eap_client_active(pcb)) { + ppp_dbglog("EAP unexpected success message in state %s (%d)", + eap_state_name(pcb->eap.es_client.ea_state), + pcb->eap.es_client.ea_state); + return; + } + + if (pcb->settings.eap_req_time > 0) { + UNTIMEOUT(eap_client_timeout, pcb); + } + + if (len > 0) { + /* This is odd. The spec doesn't allow for this. */ + PRINTMSG(inp, len); + } + + pcb->eap.es_client.ea_state = eapOpen; + auth_withpeer_success(pcb, PPP_EAP, 0); +} + +/* + * eap_failure - Receive EAP Failure message (client mode). + */ +static void eap_failure(ppp_pcb *pcb, u_char *inp, int id, int len) { + LWIP_UNUSED_ARG(id); + + if (!eap_client_active(pcb)) { + ppp_dbglog("EAP unexpected failure message in state %s (%d)", + eap_state_name(pcb->eap.es_client.ea_state), + pcb->eap.es_client.ea_state); + } + + if (pcb->settings.eap_req_time > 0) { + UNTIMEOUT(eap_client_timeout, pcb); + } + + if (len > 0) { + /* This is odd. The spec doesn't allow for this. */ + PRINTMSG(inp, len); + } + + pcb->eap.es_client.ea_state = eapBadAuth; + + ppp_error("EAP: peer reports authentication failure"); + auth_withpeer_fail(pcb, PPP_EAP); +} + +/* + * eap_input - Handle received EAP message. + */ +static void eap_input(ppp_pcb *pcb, u_char *inp, int inlen) { + u_char code, id; + int len; + + /* + * Parse header (code, id and length). If packet too short, + * drop it. + */ + if (inlen < EAP_HEADERLEN) { + ppp_error("EAP: packet too short: %d < %d", inlen, EAP_HEADERLEN); + return; + } + GETCHAR(code, inp); + GETCHAR(id, inp); + GETSHORT(len, inp); + if (len < EAP_HEADERLEN || len > inlen) { + ppp_error("EAP: packet has illegal length field %d (%d..%d)", len, + EAP_HEADERLEN, inlen); + return; + } + len -= EAP_HEADERLEN; + + /* Dispatch based on message code */ + switch (code) { + case EAP_REQUEST: + eap_request(pcb, inp, id, len); + break; + +#if PPP_SERVER + case EAP_RESPONSE: + eap_response(pcb, inp, id, len); + break; +#endif /* PPP_SERVER */ + + case EAP_SUCCESS: + eap_success(pcb, inp, id, len); + break; + + case EAP_FAILURE: + eap_failure(pcb, inp, id, len); + break; + + default: /* XXX Need code reject */ + /* Note: it's not legal to send EAP Nak here. */ + ppp_warn("EAP: unknown code %d received", code); + break; + } +} + +#if PRINTPKT_SUPPORT +/* + * eap_printpkt - print the contents of an EAP packet. + */ +static const char* const eap_codenames[] = { + "Request", "Response", "Success", "Failure" +}; + +static const char* const eap_typenames[] = { + "Identity", "Notification", "Nak", "MD5-Challenge", + "OTP", "Generic-Token", NULL, NULL, + "RSA", "DSS", "KEA", "KEA-Validate", + "TLS", "Defender", "Windows 2000", "Arcot", + "Cisco", "Nokia", "SRP" +}; + +static int eap_printpkt(const u_char *inp, int inlen, void (*printer) (void *, const char *, ...), void *arg) { + int code, id, len, rtype, vallen; + const u_char *pstart; + u32_t uval; + + if (inlen < EAP_HEADERLEN) + return (0); + pstart = inp; + GETCHAR(code, inp); + GETCHAR(id, inp); + GETSHORT(len, inp); + if (len < EAP_HEADERLEN || len > inlen) + return (0); + + if (code >= 1 && code <= (int)LWIP_ARRAYSIZE(eap_codenames)) + printer(arg, " %s", eap_codenames[code-1]); + else + printer(arg, " code=0x%x", code); + printer(arg, " id=0x%x", id); + len -= EAP_HEADERLEN; + switch (code) { + case EAP_REQUEST: + if (len < 1) { + printer(arg, " "); + break; + } + GETCHAR(rtype, inp); + len--; + if (rtype >= 1 && rtype <= (int)LWIP_ARRAYSIZE(eap_typenames)) + printer(arg, " %s", eap_typenames[rtype-1]); + else + printer(arg, " type=0x%x", rtype); + switch (rtype) { + case EAPT_IDENTITY: + case EAPT_NOTIFICATION: + if (len > 0) { + printer(arg, " "); + INCPTR(len, inp); + len = 0; + } else { + printer(arg, " "); + } + break; + + case EAPT_MD5CHAP: + if (len <= 0) + break; + GETCHAR(vallen, inp); + len--; + if (vallen > len) + goto truncated; + printer(arg, " ", vallen, inp); + INCPTR(vallen, inp); + len -= vallen; + if (len > 0) { + printer(arg, " "); + INCPTR(len, inp); + len = 0; + } else { + printer(arg, " "); + } + break; + + case EAPT_SRP: + if (len < 3) + goto truncated; + GETCHAR(vallen, inp); + len--; + printer(arg, "-%d", vallen); + switch (vallen) { + case EAPSRP_CHALLENGE: + GETCHAR(vallen, inp); + len--; + if (vallen >= len) + goto truncated; + if (vallen > 0) { + printer(arg, " "); + } else { + printer(arg, " "); + } + INCPTR(vallen, inp); + len -= vallen; + GETCHAR(vallen, inp); + len--; + if (vallen >= len) + goto truncated; + printer(arg, " ", vallen, inp); + INCPTR(vallen, inp); + len -= vallen; + GETCHAR(vallen, inp); + len--; + if (vallen > len) + goto truncated; + if (vallen == 0) { + printer(arg, " "); + } else { + printer(arg, " ", vallen, inp); + } + INCPTR(vallen, inp); + len -= vallen; + if (len == 0) { + printer(arg, " "); + } else { + printer(arg, " ", len, inp); + INCPTR(len, inp); + len = 0; + } + break; + + case EAPSRP_SKEY: + printer(arg, " ", len, inp); + INCPTR(len, inp); + len = 0; + break; + + case EAPSRP_SVALIDATOR: + if (len < (int)sizeof (u32_t)) + break; + GETLONG(uval, inp); + len -= sizeof (u32_t); + if (uval & SRPVAL_EBIT) { + printer(arg, " E"); + uval &= ~SRPVAL_EBIT; + } + if (uval != 0) { + printer(arg, " f<%X>", uval); + } + if ((vallen = len) > SHA_DIGESTSIZE) + vallen = SHA_DIGESTSIZE; + printer(arg, " ", len, inp, + len < SHA_DIGESTSIZE ? "?" : ""); + INCPTR(vallen, inp); + len -= vallen; + if (len > 0) { + printer(arg, " ", len, inp); + INCPTR(len, inp); + len = 0; + } + break; + + case EAPSRP_LWRECHALLENGE: + printer(arg, " ", len, inp); + INCPTR(len, inp); + len = 0; + break; + default: + break; + } + break; + default: + break; + } + break; + + case EAP_RESPONSE: + if (len < 1) + break; + GETCHAR(rtype, inp); + len--; + if (rtype >= 1 && rtype <= (int)LWIP_ARRAYSIZE(eap_typenames)) + printer(arg, " %s", eap_typenames[rtype-1]); + else + printer(arg, " type=0x%x", rtype); + switch (rtype) { + case EAPT_IDENTITY: + if (len > 0) { + printer(arg, " "); + INCPTR(len, inp); + len = 0; + } + break; + + case EAPT_NAK: + if (len <= 0) { + printer(arg, " "); + break; + } + GETCHAR(rtype, inp); + len--; + printer(arg, " = 1 && rtype < (int)LWIP_ARRAYSIZE(eap_typenames)) + printer(arg, " (%s)", eap_typenames[rtype-1]); + printer(arg, ">"); + break; + + case EAPT_MD5CHAP: + if (len <= 0) { + printer(arg, " "); + break; + } + GETCHAR(vallen, inp); + len--; + if (vallen > len) + goto truncated; + printer(arg, " ", vallen, inp); + INCPTR(vallen, inp); + len -= vallen; + if (len > 0) { + printer(arg, " "); + INCPTR(len, inp); + len = 0; + } else { + printer(arg, " "); + } + break; + + case EAPT_SRP: + if (len < 1) + goto truncated; + GETCHAR(vallen, inp); + len--; + printer(arg, "-%d", vallen); + switch (vallen) { + case EAPSRP_CKEY: + printer(arg, " ", len, inp); + INCPTR(len, inp); + len = 0; + break; + + case EAPSRP_CVALIDATOR: + if (len < (int)sizeof (u32_t)) + break; + GETLONG(uval, inp); + len -= sizeof (u32_t); + if (uval & SRPVAL_EBIT) { + printer(arg, " E"); + uval &= ~SRPVAL_EBIT; + } + if (uval != 0) { + printer(arg, " f<%X>", uval); + } + printer(arg, " ", len, inp, + len == SHA_DIGESTSIZE ? "" : "?"); + INCPTR(len, inp); + len = 0; + break; + + case EAPSRP_ACK: + break; + + case EAPSRP_LWRECHALLENGE: + printer(arg, " ", len, inp, + len == SHA_DIGESTSIZE ? "" : "?"); + if ((vallen = len) > SHA_DIGESTSIZE) + vallen = SHA_DIGESTSIZE; + INCPTR(vallen, inp); + len -= vallen; + break; + default: + break; + } + break; + default: + break; + } + break; + + case EAP_SUCCESS: /* No payload expected for these! */ + case EAP_FAILURE: + default: + break; + + truncated: + printer(arg, " "); + break; + } + + if (len > 8) + printer(arg, "%8B...", inp); + else if (len > 0) + printer(arg, "%.*B", len, inp); + INCPTR(len, inp); + + return (inp - pstart); +} +#endif /* PRINTPKT_SUPPORT */ + +#endif /* PPP_SUPPORT && EAP_SUPPORT */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/ecp.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/ecp.c new file mode 100644 index 0000000000000000000000000000000000000000..4d84f609311c6588821e72200c8e218a136d3fcc --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/ecp.c @@ -0,0 +1,191 @@ +/* + * ecp.c - PPP Encryption Control Protocol. + * + * Copyright (c) 2002 Google, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The name(s) of the authors of this software must not be used to + * endorse or promote products derived from this software without + * prior written permission. + * + * THE AUTHORS OF THIS SOFTWARE DISCLAIM ALL WARRANTIES WITH REGARD TO + * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY + * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * Derived from ccp.c, which is: + * + * Copyright (c) 1994-2002 Paul Mackerras. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. The name(s) of the authors of this software must not be used to + * endorse or promote products derived from this software without + * prior written permission. + * + * 3. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by Paul Mackerras + * ". + * + * THE AUTHORS OF THIS SOFTWARE DISCLAIM ALL WARRANTIES WITH REGARD TO + * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY + * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include "netif/ppp/ppp_opts.h" +#if PPP_SUPPORT && ECP_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +#include + +#include "netif/ppp/ppp_impl.h" + +#include "netif/ppp/fsm.h" +#include "netif/ppp/ecp.h" + +#if PPP_OPTIONS +static option_t ecp_option_list[] = { + { "noecp", o_bool, &ecp_protent.enabled_flag, + "Disable ECP negotiation" }, + { "-ecp", o_bool, &ecp_protent.enabled_flag, + "Disable ECP negotiation", OPT_ALIAS }, + + { NULL } +}; +#endif /* PPP_OPTIONS */ + +/* + * Protocol entry points from main code. + */ +static void ecp_init (int unit); +/* +static void ecp_open (int unit); +static void ecp_close (int unit, char *); +static void ecp_lowerup (int unit); +static void ecp_lowerdown (int); +static void ecp_input (int unit, u_char *pkt, int len); +static void ecp_protrej (int unit); +*/ +#if PRINTPKT_SUPPORT +static int ecp_printpkt (const u_char *pkt, int len, + void (*printer) (void *, char *, ...), + void *arg); +#endif /* PRINTPKT_SUPPORT */ +/* +static void ecp_datainput (int unit, u_char *pkt, int len); +*/ + +const struct protent ecp_protent = { + PPP_ECP, + ecp_init, + NULL, /* ecp_input, */ + NULL, /* ecp_protrej, */ + NULL, /* ecp_lowerup, */ + NULL, /* ecp_lowerdown, */ + NULL, /* ecp_open, */ + NULL, /* ecp_close, */ +#if PRINTPKT_SUPPORT + ecp_printpkt, +#endif /* PRINTPKT_SUPPORT */ +#if PPP_DATAINPUT + NULL, /* ecp_datainput, */ +#endif /* PPP_DATAINPUT */ +#if PRINTPKT_SUPPORT + "ECP", + "Encrypted", +#endif /* PRINTPKT_SUPPORT */ +#if PPP_OPTIONS + ecp_option_list, + NULL, +#endif /* PPP_OPTIONS */ +#if DEMAND_SUPPORT + NULL, + NULL +#endif /* DEMAND_SUPPORT */ +}; + +fsm ecp_fsm[NUM_PPP]; +ecp_options ecp_wantoptions[NUM_PPP]; /* what to request the peer to use */ +ecp_options ecp_gotoptions[NUM_PPP]; /* what the peer agreed to do */ +ecp_options ecp_allowoptions[NUM_PPP]; /* what we'll agree to do */ +ecp_options ecp_hisoptions[NUM_PPP]; /* what we agreed to do */ + +static const fsm_callbacks ecp_callbacks = { + NULL, /* ecp_resetci, */ + NULL, /* ecp_cilen, */ + NULL, /* ecp_addci, */ + NULL, /* ecp_ackci, */ + NULL, /* ecp_nakci, */ + NULL, /* ecp_rejci, */ + NULL, /* ecp_reqci, */ + NULL, /* ecp_up, */ + NULL, /* ecp_down, */ + NULL, + NULL, + NULL, + NULL, + NULL, /* ecp_extcode, */ + "ECP" +}; + +/* + * ecp_init - initialize ECP. + */ +static void +ecp_init(unit) + int unit; +{ + fsm *f = &ecp_fsm[unit]; + + f->unit = unit; + f->protocol = PPP_ECP; + f->callbacks = &ecp_callbacks; + fsm_init(f); + +#if 0 /* Not necessary, everything is cleared in ppp_new() */ + memset(&ecp_wantoptions[unit], 0, sizeof(ecp_options)); + memset(&ecp_gotoptions[unit], 0, sizeof(ecp_options)); + memset(&ecp_allowoptions[unit], 0, sizeof(ecp_options)); + memset(&ecp_hisoptions[unit], 0, sizeof(ecp_options)); +#endif /* 0 */ + +} + + +#if PRINTPKT_SUPPORT +static int +ecp_printpkt(p, plen, printer, arg) + const u_char *p; + int plen; + void (*printer) (void *, char *, ...); + void *arg; +{ + return 0; +} +#endif /* PRINTPKT_SUPPORT */ + +#endif /* PPP_SUPPORT && ECP_SUPPORT */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/eui64.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/eui64.c new file mode 100644 index 0000000000000000000000000000000000000000..01493bc1f800d78838b331122d408f013a4c1438 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/eui64.c @@ -0,0 +1,56 @@ +/* + * eui64.c - EUI64 routines for IPv6CP. + * + * Copyright (c) 1999 Tommi Komulainen. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The name(s) of the authors of this software must not be used to + * endorse or promote products derived from this software without + * prior written permission. + * + * 4. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by Tommi Komulainen + * ". + * + * THE AUTHORS OF THIS SOFTWARE DISCLAIM ALL WARRANTIES WITH REGARD TO + * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY + * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * $Id: eui64.c,v 1.6 2002/12/04 23:03:32 paulus Exp $ + */ + +#include "netif/ppp/ppp_opts.h" +#if PPP_SUPPORT && PPP_IPV6_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +#include "netif/ppp/ppp_impl.h" +#include "netif/ppp/eui64.h" + +/* + * eui64_ntoa - Make an ascii representation of an interface identifier + */ +char *eui64_ntoa(eui64_t e) { + static char buf[20]; + + sprintf(buf, "%02x%02x:%02x%02x:%02x%02x:%02x%02x", + e.e8[0], e.e8[1], e.e8[2], e.e8[3], + e.e8[4], e.e8[5], e.e8[6], e.e8[7]); + return buf; +} + +#endif /* PPP_SUPPORT && PPP_IPV6_SUPPORT */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/fsm.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/fsm.c new file mode 100644 index 0000000000000000000000000000000000000000..b1f08affff8c0d9d8fda7789f8ddc7e0f28ade49 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/fsm.c @@ -0,0 +1,799 @@ +/* + * fsm.c - {Link, IP} Control Protocol Finite State Machine. + * + * Copyright (c) 1984-2000 Carnegie Mellon University. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The name "Carnegie Mellon University" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For permission or any legal + * details, please contact + * Office of Technology Transfer + * Carnegie Mellon University + * 5000 Forbes Avenue + * Pittsburgh, PA 15213-3890 + * (412) 268-4387, fax: (412) 268-7395 + * tech-transfer@andrew.cmu.edu + * + * 4. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by Computing Services + * at Carnegie Mellon University (http://www.cmu.edu/computing/)." + * + * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO + * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE + * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include "netif/ppp/ppp_opts.h" +#if PPP_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +/* + * @todo: + * Randomize fsm id on link/init. + * Deal with variable outgoing MTU. + */ + +#if 0 /* UNUSED */ +#include +#include +#include +#endif /* UNUSED */ + +#include "netif/ppp/ppp_impl.h" + +#include "netif/ppp/fsm.h" + +static void fsm_timeout (void *); +static void fsm_rconfreq(fsm *f, u_char id, u_char *inp, int len); +static void fsm_rconfack(fsm *f, int id, u_char *inp, int len); +static void fsm_rconfnakrej(fsm *f, int code, int id, u_char *inp, int len); +static void fsm_rtermreq(fsm *f, int id, u_char *p, int len); +static void fsm_rtermack(fsm *f); +static void fsm_rcoderej(fsm *f, u_char *inp, int len); +static void fsm_sconfreq(fsm *f, int retransmit); + +#define PROTO_NAME(f) ((f)->callbacks->proto_name) + +/* + * fsm_init - Initialize fsm. + * + * Initialize fsm state. + */ +void fsm_init(fsm *f) { + ppp_pcb *pcb = f->pcb; + f->state = PPP_FSM_INITIAL; + f->flags = 0; + f->id = 0; /* XXX Start with random id? */ + f->maxnakloops = pcb->settings.fsm_max_nak_loops; + f->term_reason_len = 0; +} + + +/* + * fsm_lowerup - The lower layer is up. + */ +void fsm_lowerup(fsm *f) { + switch( f->state ){ + case PPP_FSM_INITIAL: + f->state = PPP_FSM_CLOSED; + break; + + case PPP_FSM_STARTING: + if( f->flags & OPT_SILENT ) + f->state = PPP_FSM_STOPPED; + else { + /* Send an initial configure-request */ + fsm_sconfreq(f, 0); + f->state = PPP_FSM_REQSENT; + } + break; + + default: + FSMDEBUG(("%s: Up event in state %d!", PROTO_NAME(f), f->state)); + /* no break */ + } +} + + +/* + * fsm_lowerdown - The lower layer is down. + * + * Cancel all timeouts and inform upper layers. + */ +void fsm_lowerdown(fsm *f) { + switch( f->state ){ + case PPP_FSM_CLOSED: + f->state = PPP_FSM_INITIAL; + break; + + case PPP_FSM_STOPPED: + f->state = PPP_FSM_STARTING; + if( f->callbacks->starting ) + (*f->callbacks->starting)(f); + break; + + case PPP_FSM_CLOSING: + f->state = PPP_FSM_INITIAL; + UNTIMEOUT(fsm_timeout, f); /* Cancel timeout */ + break; + + case PPP_FSM_STOPPING: + case PPP_FSM_REQSENT: + case PPP_FSM_ACKRCVD: + case PPP_FSM_ACKSENT: + f->state = PPP_FSM_STARTING; + UNTIMEOUT(fsm_timeout, f); /* Cancel timeout */ + break; + + case PPP_FSM_OPENED: + if( f->callbacks->down ) + (*f->callbacks->down)(f); + f->state = PPP_FSM_STARTING; + break; + + default: + FSMDEBUG(("%s: Down event in state %d!", PROTO_NAME(f), f->state)); + /* no break */ + } +} + + +/* + * fsm_open - Link is allowed to come up. + */ +void fsm_open(fsm *f) { + switch( f->state ){ + case PPP_FSM_INITIAL: + f->state = PPP_FSM_STARTING; + if( f->callbacks->starting ) + (*f->callbacks->starting)(f); + break; + + case PPP_FSM_CLOSED: + if( f->flags & OPT_SILENT ) + f->state = PPP_FSM_STOPPED; + else { + /* Send an initial configure-request */ + fsm_sconfreq(f, 0); + f->state = PPP_FSM_REQSENT; + } + break; + + case PPP_FSM_CLOSING: + f->state = PPP_FSM_STOPPING; + /* fall through */ + /* no break */ + case PPP_FSM_STOPPED: + case PPP_FSM_OPENED: + if( f->flags & OPT_RESTART ){ + fsm_lowerdown(f); + fsm_lowerup(f); + } + break; + default: + break; + } +} + +/* + * terminate_layer - Start process of shutting down the FSM + * + * Cancel any timeout running, notify upper layers we're done, and + * send a terminate-request message as configured. + */ +static void terminate_layer(fsm *f, int nextstate) { + ppp_pcb *pcb = f->pcb; + + if( f->state != PPP_FSM_OPENED ) + UNTIMEOUT(fsm_timeout, f); /* Cancel timeout */ + else if( f->callbacks->down ) + (*f->callbacks->down)(f); /* Inform upper layers we're down */ + + /* Init restart counter and send Terminate-Request */ + f->retransmits = pcb->settings.fsm_max_term_transmits; + fsm_sdata(f, TERMREQ, f->reqid = ++f->id, + (const u_char *) f->term_reason, f->term_reason_len); + + if (f->retransmits == 0) { + /* + * User asked for no terminate requests at all; just close it. + * We've already fired off one Terminate-Request just to be nice + * to the peer, but we're not going to wait for a reply. + */ + f->state = nextstate == PPP_FSM_CLOSING ? PPP_FSM_CLOSED : PPP_FSM_STOPPED; + if( f->callbacks->finished ) + (*f->callbacks->finished)(f); + return; + } + + TIMEOUT(fsm_timeout, f, pcb->settings.fsm_timeout_time); + --f->retransmits; + + f->state = nextstate; +} + +/* + * fsm_close - Start closing connection. + * + * Cancel timeouts and either initiate close or possibly go directly to + * the PPP_FSM_CLOSED state. + */ +void fsm_close(fsm *f, const char *reason) { + f->term_reason = reason; + f->term_reason_len = (reason == NULL? 0: (u8_t)LWIP_MIN(strlen(reason), 0xFF) ); + switch( f->state ){ + case PPP_FSM_STARTING: + f->state = PPP_FSM_INITIAL; + break; + case PPP_FSM_STOPPED: + f->state = PPP_FSM_CLOSED; + break; + case PPP_FSM_STOPPING: + f->state = PPP_FSM_CLOSING; + break; + + case PPP_FSM_REQSENT: + case PPP_FSM_ACKRCVD: + case PPP_FSM_ACKSENT: + case PPP_FSM_OPENED: + terminate_layer(f, PPP_FSM_CLOSING); + break; + default: + break; + } +} + + +/* + * fsm_timeout - Timeout expired. + */ +static void fsm_timeout(void *arg) { + fsm *f = (fsm *) arg; + ppp_pcb *pcb = f->pcb; + + switch (f->state) { + case PPP_FSM_CLOSING: + case PPP_FSM_STOPPING: + if( f->retransmits <= 0 ){ + /* + * We've waited for an ack long enough. Peer probably heard us. + */ + f->state = (f->state == PPP_FSM_CLOSING)? PPP_FSM_CLOSED: PPP_FSM_STOPPED; + if( f->callbacks->finished ) + (*f->callbacks->finished)(f); + } else { + /* Send Terminate-Request */ + fsm_sdata(f, TERMREQ, f->reqid = ++f->id, + (const u_char *) f->term_reason, f->term_reason_len); + TIMEOUT(fsm_timeout, f, pcb->settings.fsm_timeout_time); + --f->retransmits; + } + break; + + case PPP_FSM_REQSENT: + case PPP_FSM_ACKRCVD: + case PPP_FSM_ACKSENT: + if (f->retransmits <= 0) { + ppp_warn("%s: timeout sending Config-Requests", PROTO_NAME(f)); + f->state = PPP_FSM_STOPPED; + if( (f->flags & OPT_PASSIVE) == 0 && f->callbacks->finished ) + (*f->callbacks->finished)(f); + + } else { + /* Retransmit the configure-request */ + if (f->callbacks->retransmit) + (*f->callbacks->retransmit)(f); + fsm_sconfreq(f, 1); /* Re-send Configure-Request */ + if( f->state == PPP_FSM_ACKRCVD ) + f->state = PPP_FSM_REQSENT; + } + break; + + default: + FSMDEBUG(("%s: Timeout event in state %d!", PROTO_NAME(f), f->state)); + /* no break */ + } +} + + +/* + * fsm_input - Input packet. + */ +void fsm_input(fsm *f, u_char *inpacket, int l) { + u_char *inp; + u_char code, id; + int len; + + /* + * Parse header (code, id and length). + * If packet too short, drop it. + */ + inp = inpacket; + if (l < HEADERLEN) { + FSMDEBUG(("fsm_input(%x): Rcvd short header.", f->protocol)); + return; + } + GETCHAR(code, inp); + GETCHAR(id, inp); + GETSHORT(len, inp); + if (len < HEADERLEN) { + FSMDEBUG(("fsm_input(%x): Rcvd illegal length.", f->protocol)); + return; + } + if (len > l) { + FSMDEBUG(("fsm_input(%x): Rcvd short packet.", f->protocol)); + return; + } + len -= HEADERLEN; /* subtract header length */ + + if( f->state == PPP_FSM_INITIAL || f->state == PPP_FSM_STARTING ){ + FSMDEBUG(("fsm_input(%x): Rcvd packet in state %d.", + f->protocol, f->state)); + return; + } + + /* + * Action depends on code. + */ + switch (code) { + case CONFREQ: + fsm_rconfreq(f, id, inp, len); + break; + + case CONFACK: + fsm_rconfack(f, id, inp, len); + break; + + case CONFNAK: + case CONFREJ: + fsm_rconfnakrej(f, code, id, inp, len); + break; + + case TERMREQ: + fsm_rtermreq(f, id, inp, len); + break; + + case TERMACK: + fsm_rtermack(f); + break; + + case CODEREJ: + fsm_rcoderej(f, inp, len); + break; + + default: + if( !f->callbacks->extcode + || !(*f->callbacks->extcode)(f, code, id, inp, len) ) + fsm_sdata(f, CODEREJ, ++f->id, inpacket, len + HEADERLEN); + break; + } +} + + +/* + * fsm_rconfreq - Receive Configure-Request. + */ +static void fsm_rconfreq(fsm *f, u_char id, u_char *inp, int len) { + int code, reject_if_disagree; + + switch( f->state ){ + case PPP_FSM_CLOSED: + /* Go away, we're closed */ + fsm_sdata(f, TERMACK, id, NULL, 0); + return; + case PPP_FSM_CLOSING: + case PPP_FSM_STOPPING: + return; + + case PPP_FSM_OPENED: + /* Go down and restart negotiation */ + if( f->callbacks->down ) + (*f->callbacks->down)(f); /* Inform upper layers */ + fsm_sconfreq(f, 0); /* Send initial Configure-Request */ + f->state = PPP_FSM_REQSENT; + break; + + case PPP_FSM_STOPPED: + /* Negotiation started by our peer */ + fsm_sconfreq(f, 0); /* Send initial Configure-Request */ + f->state = PPP_FSM_REQSENT; + break; + default: + break; + } + + /* + * Pass the requested configuration options + * to protocol-specific code for checking. + */ + if (f->callbacks->reqci){ /* Check CI */ + reject_if_disagree = (f->nakloops >= f->maxnakloops); + code = (*f->callbacks->reqci)(f, inp, &len, reject_if_disagree); + } else if (len) + code = CONFREJ; /* Reject all CI */ + else + code = CONFACK; + + /* send the Ack, Nak or Rej to the peer */ + fsm_sdata(f, code, id, inp, len); + + if (code == CONFACK) { + if (f->state == PPP_FSM_ACKRCVD) { + UNTIMEOUT(fsm_timeout, f); /* Cancel timeout */ + f->state = PPP_FSM_OPENED; + if (f->callbacks->up) + (*f->callbacks->up)(f); /* Inform upper layers */ + } else + f->state = PPP_FSM_ACKSENT; + f->nakloops = 0; + + } else { + /* we sent CONFACK or CONFREJ */ + if (f->state != PPP_FSM_ACKRCVD) + f->state = PPP_FSM_REQSENT; + if( code == CONFNAK ) + ++f->nakloops; + } +} + + +/* + * fsm_rconfack - Receive Configure-Ack. + */ +static void fsm_rconfack(fsm *f, int id, u_char *inp, int len) { + ppp_pcb *pcb = f->pcb; + + if (id != f->reqid || f->seen_ack) /* Expected id? */ + return; /* Nope, toss... */ + if( !(f->callbacks->ackci? (*f->callbacks->ackci)(f, inp, len): + (len == 0)) ){ + /* Ack is bad - ignore it */ + ppp_error("Received bad configure-ack: %P", inp, len); + return; + } + f->seen_ack = 1; + f->rnakloops = 0; + + switch (f->state) { + case PPP_FSM_CLOSED: + case PPP_FSM_STOPPED: + fsm_sdata(f, TERMACK, id, NULL, 0); + break; + + case PPP_FSM_REQSENT: + f->state = PPP_FSM_ACKRCVD; + f->retransmits = pcb->settings.fsm_max_conf_req_transmits; + break; + + case PPP_FSM_ACKRCVD: + /* Huh? an extra valid Ack? oh well... */ + UNTIMEOUT(fsm_timeout, f); /* Cancel timeout */ + fsm_sconfreq(f, 0); + f->state = PPP_FSM_REQSENT; + break; + + case PPP_FSM_ACKSENT: + UNTIMEOUT(fsm_timeout, f); /* Cancel timeout */ + f->state = PPP_FSM_OPENED; + f->retransmits = pcb->settings.fsm_max_conf_req_transmits; + if (f->callbacks->up) + (*f->callbacks->up)(f); /* Inform upper layers */ + break; + + case PPP_FSM_OPENED: + /* Go down and restart negotiation */ + if (f->callbacks->down) + (*f->callbacks->down)(f); /* Inform upper layers */ + fsm_sconfreq(f, 0); /* Send initial Configure-Request */ + f->state = PPP_FSM_REQSENT; + break; + default: + break; + } +} + + +/* + * fsm_rconfnakrej - Receive Configure-Nak or Configure-Reject. + */ +static void fsm_rconfnakrej(fsm *f, int code, int id, u_char *inp, int len) { + int ret; + int treat_as_reject; + + if (id != f->reqid || f->seen_ack) /* Expected id? */ + return; /* Nope, toss... */ + + if (code == CONFNAK) { + ++f->rnakloops; + treat_as_reject = (f->rnakloops >= f->maxnakloops); + if (f->callbacks->nakci == NULL + || !(ret = f->callbacks->nakci(f, inp, len, treat_as_reject))) { + ppp_error("Received bad configure-nak: %P", inp, len); + return; + } + } else { + f->rnakloops = 0; + if (f->callbacks->rejci == NULL + || !(ret = f->callbacks->rejci(f, inp, len))) { + ppp_error("Received bad configure-rej: %P", inp, len); + return; + } + } + + f->seen_ack = 1; + + switch (f->state) { + case PPP_FSM_CLOSED: + case PPP_FSM_STOPPED: + fsm_sdata(f, TERMACK, id, NULL, 0); + break; + + case PPP_FSM_REQSENT: + case PPP_FSM_ACKSENT: + /* They didn't agree to what we wanted - try another request */ + UNTIMEOUT(fsm_timeout, f); /* Cancel timeout */ + if (ret < 0) + f->state = PPP_FSM_STOPPED; /* kludge for stopping CCP */ + else + fsm_sconfreq(f, 0); /* Send Configure-Request */ + break; + + case PPP_FSM_ACKRCVD: + /* Got a Nak/reject when we had already had an Ack?? oh well... */ + UNTIMEOUT(fsm_timeout, f); /* Cancel timeout */ + fsm_sconfreq(f, 0); + f->state = PPP_FSM_REQSENT; + break; + + case PPP_FSM_OPENED: + /* Go down and restart negotiation */ + if (f->callbacks->down) + (*f->callbacks->down)(f); /* Inform upper layers */ + fsm_sconfreq(f, 0); /* Send initial Configure-Request */ + f->state = PPP_FSM_REQSENT; + break; + default: + break; + } +} + + +/* + * fsm_rtermreq - Receive Terminate-Req. + */ +static void fsm_rtermreq(fsm *f, int id, u_char *p, int len) { + ppp_pcb *pcb = f->pcb; + + switch (f->state) { + case PPP_FSM_ACKRCVD: + case PPP_FSM_ACKSENT: + f->state = PPP_FSM_REQSENT; /* Start over but keep trying */ + break; + + case PPP_FSM_OPENED: + if (len > 0) { + ppp_info("%s terminated by peer (%0.*v)", PROTO_NAME(f), len, p); + } else + ppp_info("%s terminated by peer", PROTO_NAME(f)); + f->retransmits = 0; + f->state = PPP_FSM_STOPPING; + if (f->callbacks->down) + (*f->callbacks->down)(f); /* Inform upper layers */ + TIMEOUT(fsm_timeout, f, pcb->settings.fsm_timeout_time); + break; + default: + break; + } + + fsm_sdata(f, TERMACK, id, NULL, 0); +} + + +/* + * fsm_rtermack - Receive Terminate-Ack. + */ +static void fsm_rtermack(fsm *f) { + switch (f->state) { + case PPP_FSM_CLOSING: + UNTIMEOUT(fsm_timeout, f); + f->state = PPP_FSM_CLOSED; + if( f->callbacks->finished ) + (*f->callbacks->finished)(f); + break; + case PPP_FSM_STOPPING: + UNTIMEOUT(fsm_timeout, f); + f->state = PPP_FSM_STOPPED; + if( f->callbacks->finished ) + (*f->callbacks->finished)(f); + break; + + case PPP_FSM_ACKRCVD: + f->state = PPP_FSM_REQSENT; + break; + + case PPP_FSM_OPENED: + if (f->callbacks->down) + (*f->callbacks->down)(f); /* Inform upper layers */ + fsm_sconfreq(f, 0); + f->state = PPP_FSM_REQSENT; + break; + default: + break; + } +} + + +/* + * fsm_rcoderej - Receive an Code-Reject. + */ +static void fsm_rcoderej(fsm *f, u_char *inp, int len) { + u_char code, id; + + if (len < HEADERLEN) { + FSMDEBUG(("fsm_rcoderej: Rcvd short Code-Reject packet!")); + return; + } + GETCHAR(code, inp); + GETCHAR(id, inp); + ppp_warn("%s: Rcvd Code-Reject for code %d, id %d", PROTO_NAME(f), code, id); + + if( f->state == PPP_FSM_ACKRCVD ) + f->state = PPP_FSM_REQSENT; +} + + +/* + * fsm_protreject - Peer doesn't speak this protocol. + * + * Treat this as a catastrophic error (RXJ-). + */ +void fsm_protreject(fsm *f) { + switch( f->state ){ + case PPP_FSM_CLOSING: + UNTIMEOUT(fsm_timeout, f); /* Cancel timeout */ + /* fall through */ + /* no break */ + case PPP_FSM_CLOSED: + f->state = PPP_FSM_CLOSED; + if( f->callbacks->finished ) + (*f->callbacks->finished)(f); + break; + + case PPP_FSM_STOPPING: + case PPP_FSM_REQSENT: + case PPP_FSM_ACKRCVD: + case PPP_FSM_ACKSENT: + UNTIMEOUT(fsm_timeout, f); /* Cancel timeout */ + /* fall through */ + /* no break */ + case PPP_FSM_STOPPED: + f->state = PPP_FSM_STOPPED; + if( f->callbacks->finished ) + (*f->callbacks->finished)(f); + break; + + case PPP_FSM_OPENED: + terminate_layer(f, PPP_FSM_STOPPING); + break; + + default: + FSMDEBUG(("%s: Protocol-reject event in state %d!", + PROTO_NAME(f), f->state)); + /* no break */ + } +} + + +/* + * fsm_sconfreq - Send a Configure-Request. + */ +static void fsm_sconfreq(fsm *f, int retransmit) { + ppp_pcb *pcb = f->pcb; + struct pbuf *p; + u_char *outp; + int cilen; + + if( f->state != PPP_FSM_REQSENT && f->state != PPP_FSM_ACKRCVD && f->state != PPP_FSM_ACKSENT ){ + /* Not currently negotiating - reset options */ + if( f->callbacks->resetci ) + (*f->callbacks->resetci)(f); + f->nakloops = 0; + f->rnakloops = 0; + } + + if( !retransmit ){ + /* New request - reset retransmission counter, use new ID */ + f->retransmits = pcb->settings.fsm_max_conf_req_transmits; + f->reqid = ++f->id; + } + + f->seen_ack = 0; + + /* + * Make up the request packet + */ + if( f->callbacks->cilen && f->callbacks->addci ){ + cilen = (*f->callbacks->cilen)(f); + if( cilen > pcb->peer_mru - HEADERLEN ) + cilen = pcb->peer_mru - HEADERLEN; + } else + cilen = 0; + + p = pbuf_alloc(PBUF_RAW, (u16_t)(cilen + HEADERLEN + PPP_HDRLEN), PPP_CTRL_PBUF_TYPE); + if(NULL == p) + return; + if(p->tot_len != p->len) { + pbuf_free(p); + return; + } + + /* send the request to our peer */ + outp = (u_char*)p->payload; + MAKEHEADER(outp, f->protocol); + PUTCHAR(CONFREQ, outp); + PUTCHAR(f->reqid, outp); + PUTSHORT(cilen + HEADERLEN, outp); + if (cilen != 0) { + (*f->callbacks->addci)(f, outp, &cilen); + LWIP_ASSERT("cilen == p->len - HEADERLEN - PPP_HDRLEN", cilen == p->len - HEADERLEN - PPP_HDRLEN); + } + + ppp_write(pcb, p); + + /* start the retransmit timer */ + --f->retransmits; + TIMEOUT(fsm_timeout, f, pcb->settings.fsm_timeout_time); +} + + +/* + * fsm_sdata - Send some data. + * + * Used for all packets sent to our peer by this module. + */ +void fsm_sdata(fsm *f, u_char code, u_char id, const u_char *data, int datalen) { + ppp_pcb *pcb = f->pcb; + struct pbuf *p; + u_char *outp; + int outlen; + + /* Adjust length to be smaller than MTU */ + if (datalen > pcb->peer_mru - HEADERLEN) + datalen = pcb->peer_mru - HEADERLEN; + outlen = datalen + HEADERLEN; + + p = pbuf_alloc(PBUF_RAW, (u16_t)(outlen + PPP_HDRLEN), PPP_CTRL_PBUF_TYPE); + if(NULL == p) + return; + if(p->tot_len != p->len) { + pbuf_free(p); + return; + } + + outp = (u_char*)p->payload; + if (datalen) /* && data != outp + PPP_HDRLEN + HEADERLEN) -- was only for fsm_sconfreq() */ + MEMCPY(outp + PPP_HDRLEN + HEADERLEN, data, datalen); + MAKEHEADER(outp, f->protocol); + PUTCHAR(code, outp); + PUTCHAR(id, outp); + PUTSHORT(outlen, outp); + ppp_write(pcb, p); +} + +#endif /* PPP_SUPPORT */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/ipcp.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/ipcp.c new file mode 100644 index 0000000000000000000000000000000000000000..b7c766eb0b224eec28d933d68c5f03f5ac1d8be2 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/ipcp.c @@ -0,0 +1,2418 @@ +/* + * ipcp.c - PPP IP Control Protocol. + * + * Copyright (c) 1984-2000 Carnegie Mellon University. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The name "Carnegie Mellon University" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For permission or any legal + * details, please contact + * Office of Technology Transfer + * Carnegie Mellon University + * 5000 Forbes Avenue + * Pittsburgh, PA 15213-3890 + * (412) 268-4387, fax: (412) 268-7395 + * tech-transfer@andrew.cmu.edu + * + * 4. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by Computing Services + * at Carnegie Mellon University (http://www.cmu.edu/computing/)." + * + * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO + * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE + * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include "netif/ppp/ppp_opts.h" +#if PPP_SUPPORT && PPP_IPV4_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +/* + * @todo: + */ + +#if 0 /* UNUSED */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#endif /* UNUSED */ + +#include "netif/ppp/ppp_impl.h" + +#include "netif/ppp/fsm.h" +#include "netif/ppp/ipcp.h" + +#if 0 /* UNUSED */ +/* global vars */ +u32_t netmask = 0; /* IP netmask to set on interface */ +#endif /* UNUSED */ + +#if 0 /* UNUSED */ +bool disable_defaultip = 0; /* Don't use hostname for default IP adrs */ +#endif /* UNUSED */ + +#if 0 /* moved to ppp_settings */ +bool noremoteip = 0; /* Let him have no IP address */ +#endif /* moved to ppp_setting */ + +#if 0 /* UNUSED */ +/* Hook for a plugin to know when IP protocol has come up */ +void (*ip_up_hook) (void) = NULL; + +/* Hook for a plugin to know when IP protocol has come down */ +void (*ip_down_hook) (void) = NULL; + +/* Hook for a plugin to choose the remote IP address */ +void (*ip_choose_hook) (u32_t *) = NULL; +#endif /* UNUSED */ + +#if PPP_NOTIFY +/* Notifiers for when IPCP goes up and down */ +struct notifier *ip_up_notifier = NULL; +struct notifier *ip_down_notifier = NULL; +#endif /* PPP_NOTIFY */ + +/* local vars */ +#if 0 /* moved to ppp_pcb */ +static int default_route_set[NUM_PPP]; /* Have set up a default route */ +static int proxy_arp_set[NUM_PPP]; /* Have created proxy arp entry */ +static int ipcp_is_up; /* have called np_up() */ +static int ipcp_is_open; /* haven't called np_finished() */ +static bool ask_for_local; /* request our address from peer */ +#endif /* moved to ppp_pcb */ +#if 0 /* UNUSED */ +static char vj_value[8]; /* string form of vj option value */ +static char netmask_str[20]; /* string form of netmask value */ +#endif /* UNUSED */ + +/* + * Callbacks for fsm code. (CI = Configuration Information) + */ +static void ipcp_resetci(fsm *f); /* Reset our CI */ +static int ipcp_cilen(fsm *f); /* Return length of our CI */ +static void ipcp_addci(fsm *f, u_char *ucp, int *lenp); /* Add our CI */ +static int ipcp_ackci(fsm *f, u_char *p, int len); /* Peer ack'd our CI */ +static int ipcp_nakci(fsm *f, u_char *p, int len, int treat_as_reject);/* Peer nak'd our CI */ +static int ipcp_rejci(fsm *f, u_char *p, int len); /* Peer rej'd our CI */ +static int ipcp_reqci(fsm *f, u_char *inp, int *len, int reject_if_disagree); /* Rcv CI */ +static void ipcp_up(fsm *f); /* We're UP */ +static void ipcp_down(fsm *f); /* We're DOWN */ +static void ipcp_finished(fsm *f); /* Don't need lower layer */ + +static const fsm_callbacks ipcp_callbacks = { /* IPCP callback routines */ + ipcp_resetci, /* Reset our Configuration Information */ + ipcp_cilen, /* Length of our Configuration Information */ + ipcp_addci, /* Add our Configuration Information */ + ipcp_ackci, /* ACK our Configuration Information */ + ipcp_nakci, /* NAK our Configuration Information */ + ipcp_rejci, /* Reject our Configuration Information */ + ipcp_reqci, /* Request peer's Configuration Information */ + ipcp_up, /* Called when fsm reaches OPENED state */ + ipcp_down, /* Called when fsm leaves OPENED state */ + NULL, /* Called when we want the lower layer up */ + ipcp_finished, /* Called when we want the lower layer down */ + NULL, /* Called when Protocol-Reject received */ + NULL, /* Retransmission is necessary */ + NULL, /* Called to handle protocol-specific codes */ + "IPCP" /* String name of protocol */ +}; + +/* + * Command-line options. + */ +#if PPP_OPTIONS +static int setvjslots (char **); +static int setdnsaddr (char **); +static int setwinsaddr (char **); +static int setnetmask (char **); +int setipaddr (char *, char **, int); + +static void printipaddr (option_t *, void (*)(void *, char *,...),void *); + +static option_t ipcp_option_list[] = { + { "noip", o_bool, &ipcp_protent.enabled_flag, + "Disable IP and IPCP" }, + { "-ip", o_bool, &ipcp_protent.enabled_flag, + "Disable IP and IPCP", OPT_ALIAS }, + + { "novj", o_bool, &ipcp_wantoptions[0].neg_vj, + "Disable VJ compression", OPT_A2CLR, &ipcp_allowoptions[0].neg_vj }, + { "-vj", o_bool, &ipcp_wantoptions[0].neg_vj, + "Disable VJ compression", OPT_ALIAS | OPT_A2CLR, + &ipcp_allowoptions[0].neg_vj }, + + { "novjccomp", o_bool, &ipcp_wantoptions[0].cflag, + "Disable VJ connection-ID compression", OPT_A2CLR, + &ipcp_allowoptions[0].cflag }, + { "-vjccomp", o_bool, &ipcp_wantoptions[0].cflag, + "Disable VJ connection-ID compression", OPT_ALIAS | OPT_A2CLR, + &ipcp_allowoptions[0].cflag }, + + { "vj-max-slots", o_special, (void *)setvjslots, + "Set maximum VJ header slots", + OPT_PRIO | OPT_A2STRVAL | OPT_STATIC, vj_value }, + + { "ipcp-accept-local", o_bool, &ipcp_wantoptions[0].accept_local, + "Accept peer's address for us", 1 }, + { "ipcp-accept-remote", o_bool, &ipcp_wantoptions[0].accept_remote, + "Accept peer's address for it", 1 }, + + { "ipparam", o_string, &ipparam, + "Set ip script parameter", OPT_PRIO }, + + { "noipdefault", o_bool, &disable_defaultip, + "Don't use name for default IP adrs", 1 }, + + { "ms-dns", 1, (void *)setdnsaddr, + "DNS address for the peer's use" }, + { "ms-wins", 1, (void *)setwinsaddr, + "Nameserver for SMB over TCP/IP for peer" }, + + { "ipcp-restart", o_int, &ipcp_fsm[0].timeouttime, + "Set timeout for IPCP", OPT_PRIO }, + { "ipcp-max-terminate", o_int, &ipcp_fsm[0].maxtermtransmits, + "Set max #xmits for term-reqs", OPT_PRIO }, + { "ipcp-max-configure", o_int, &ipcp_fsm[0].maxconfreqtransmits, + "Set max #xmits for conf-reqs", OPT_PRIO }, + { "ipcp-max-failure", o_int, &ipcp_fsm[0].maxnakloops, + "Set max #conf-naks for IPCP", OPT_PRIO }, + + { "defaultroute", o_bool, &ipcp_wantoptions[0].default_route, + "Add default route", OPT_ENABLE|1, &ipcp_allowoptions[0].default_route }, + { "nodefaultroute", o_bool, &ipcp_allowoptions[0].default_route, + "disable defaultroute option", OPT_A2CLR, + &ipcp_wantoptions[0].default_route }, + { "-defaultroute", o_bool, &ipcp_allowoptions[0].default_route, + "disable defaultroute option", OPT_ALIAS | OPT_A2CLR, + &ipcp_wantoptions[0].default_route }, + + { "replacedefaultroute", o_bool, + &ipcp_wantoptions[0].replace_default_route, + "Replace default route", 1 + }, + { "noreplacedefaultroute", o_bool, + &ipcp_allowoptions[0].replace_default_route, + "Never replace default route", OPT_A2COPY, + &ipcp_wantoptions[0].replace_default_route }, + { "proxyarp", o_bool, &ipcp_wantoptions[0].proxy_arp, + "Add proxy ARP entry", OPT_ENABLE|1, &ipcp_allowoptions[0].proxy_arp }, + { "noproxyarp", o_bool, &ipcp_allowoptions[0].proxy_arp, + "disable proxyarp option", OPT_A2CLR, + &ipcp_wantoptions[0].proxy_arp }, + { "-proxyarp", o_bool, &ipcp_allowoptions[0].proxy_arp, + "disable proxyarp option", OPT_ALIAS | OPT_A2CLR, + &ipcp_wantoptions[0].proxy_arp }, + + { "usepeerdns", o_bool, &usepeerdns, + "Ask peer for DNS address(es)", 1 }, + + { "netmask", o_special, (void *)setnetmask, + "set netmask", OPT_PRIO | OPT_A2STRVAL | OPT_STATIC, netmask_str }, + + { "ipcp-no-addresses", o_bool, &ipcp_wantoptions[0].old_addrs, + "Disable old-style IP-Addresses usage", OPT_A2CLR, + &ipcp_allowoptions[0].old_addrs }, + { "ipcp-no-address", o_bool, &ipcp_wantoptions[0].neg_addr, + "Disable IP-Address usage", OPT_A2CLR, + &ipcp_allowoptions[0].neg_addr }, + + { "noremoteip", o_bool, &noremoteip, + "Allow peer to have no IP address", 1 }, + + { "nosendip", o_bool, &ipcp_wantoptions[0].neg_addr, + "Don't send our IP address to peer", OPT_A2CLR, + &ipcp_wantoptions[0].old_addrs}, + + { "IP addresses", o_wild, (void *) &setipaddr, + "set local and remote IP addresses", + OPT_NOARG | OPT_A2PRINTER, (void *) &printipaddr }, + + { NULL } +}; +#endif /* PPP_OPTIONS */ + +/* + * Protocol entry points from main code. + */ +static void ipcp_init(ppp_pcb *pcb); +static void ipcp_open(ppp_pcb *pcb); +static void ipcp_close(ppp_pcb *pcb, const char *reason); +static void ipcp_lowerup(ppp_pcb *pcb); +static void ipcp_lowerdown(ppp_pcb *pcb); +static void ipcp_input(ppp_pcb *pcb, u_char *p, int len); +static void ipcp_protrej(ppp_pcb *pcb); +#if PRINTPKT_SUPPORT +static int ipcp_printpkt(const u_char *p, int plen, + void (*printer) (void *, const char *, ...), void *arg); +#endif /* PRINTPKT_SUPPORT */ +#if PPP_OPTIONS +static void ip_check_options (void); +#endif /* PPP_OPTIONS */ +#if DEMAND_SUPPORT +static int ip_demand_conf (int); +static int ip_active_pkt (u_char *, int); +#endif /* DEMAND_SUPPORT */ +#if 0 /* UNUSED */ +static void create_resolv (u32_t, u32_t); +#endif /* UNUSED */ + +const struct protent ipcp_protent = { + PPP_IPCP, + ipcp_init, + ipcp_input, + ipcp_protrej, + ipcp_lowerup, + ipcp_lowerdown, + ipcp_open, + ipcp_close, +#if PRINTPKT_SUPPORT + ipcp_printpkt, +#endif /* PRINTPKT_SUPPORT */ +#if PPP_DATAINPUT + NULL, +#endif /* PPP_DATAINPUT */ +#if PRINTPKT_SUPPORT + "IPCP", + "IP", +#endif /* PRINTPKT_SUPPORT */ +#if PPP_OPTIONS + ipcp_option_list, + ip_check_options, +#endif /* PPP_OPTIONS */ +#if DEMAND_SUPPORT + ip_demand_conf, + ip_active_pkt +#endif /* DEMAND_SUPPORT */ +}; + +static void ipcp_clear_addrs(ppp_pcb *pcb, u32_t ouraddr, u32_t hisaddr, u8_t replacedefaultroute); + +/* + * Lengths of configuration options. + */ +#define CILEN_VOID 2 +#define CILEN_COMPRESS 4 /* min length for compression protocol opt. */ +#define CILEN_VJ 6 /* length for RFC1332 Van-Jacobson opt. */ +#define CILEN_ADDR 6 /* new-style single address option */ +#define CILEN_ADDRS 10 /* old-style dual address option */ + + +#define CODENAME(x) ((x) == CONFACK ? "ACK" : \ + (x) == CONFNAK ? "NAK" : "REJ") + +#if 0 /* UNUSED, already defined by lwIP */ +/* + * Make a string representation of a network IP address. + */ +char * +ip_ntoa(ipaddr) +u32_t ipaddr; +{ + static char b[64]; + + slprintf(b, sizeof(b), "%I", ipaddr); + return b; +} +#endif /* UNUSED, already defined by lwIP */ + +/* + * Option parsing. + */ +#if PPP_OPTIONS +/* + * setvjslots - set maximum number of connection slots for VJ compression + */ +static int +setvjslots(argv) + char **argv; +{ + int value; + + if (!int_option(*argv, &value)) + return 0; + + if (value < 2 || value > 16) { + option_error("vj-max-slots value must be between 2 and 16"); + return 0; + } + ipcp_wantoptions [0].maxslotindex = + ipcp_allowoptions[0].maxslotindex = value - 1; + slprintf(vj_value, sizeof(vj_value), "%d", value); + return 1; +} + +/* + * setdnsaddr - set the dns address(es) + */ +static int +setdnsaddr(argv) + char **argv; +{ + u32_t dns; + struct hostent *hp; + + dns = inet_addr(*argv); + if (dns == (u32_t) -1) { + if ((hp = gethostbyname(*argv)) == NULL) { + option_error("invalid address parameter '%s' for ms-dns option", + *argv); + return 0; + } + dns = *(u32_t *)hp->h_addr; + } + + /* We take the last 2 values given, the 2nd-last as the primary + and the last as the secondary. If only one is given it + becomes both primary and secondary. */ + if (ipcp_allowoptions[0].dnsaddr[1] == 0) + ipcp_allowoptions[0].dnsaddr[0] = dns; + else + ipcp_allowoptions[0].dnsaddr[0] = ipcp_allowoptions[0].dnsaddr[1]; + + /* always set the secondary address value. */ + ipcp_allowoptions[0].dnsaddr[1] = dns; + + return (1); +} + +/* + * setwinsaddr - set the wins address(es) + * This is primrarly used with the Samba package under UNIX or for pointing + * the caller to the existing WINS server on a Windows NT platform. + */ +static int +setwinsaddr(argv) + char **argv; +{ + u32_t wins; + struct hostent *hp; + + wins = inet_addr(*argv); + if (wins == (u32_t) -1) { + if ((hp = gethostbyname(*argv)) == NULL) { + option_error("invalid address parameter '%s' for ms-wins option", + *argv); + return 0; + } + wins = *(u32_t *)hp->h_addr; + } + + /* We take the last 2 values given, the 2nd-last as the primary + and the last as the secondary. If only one is given it + becomes both primary and secondary. */ + if (ipcp_allowoptions[0].winsaddr[1] == 0) + ipcp_allowoptions[0].winsaddr[0] = wins; + else + ipcp_allowoptions[0].winsaddr[0] = ipcp_allowoptions[0].winsaddr[1]; + + /* always set the secondary address value. */ + ipcp_allowoptions[0].winsaddr[1] = wins; + + return (1); +} + +/* + * setipaddr - Set the IP address + * If doit is 0, the call is to check whether this option is + * potentially an IP address specification. + * Not static so that plugins can call it to set the addresses + */ +int +setipaddr(arg, argv, doit) + char *arg; + char **argv; + int doit; +{ + struct hostent *hp; + char *colon; + u32_t local, remote; + ipcp_options *wo = &ipcp_wantoptions[0]; + static int prio_local = 0, prio_remote = 0; + + /* + * IP address pair separated by ":". + */ + if ((colon = strchr(arg, ':')) == NULL) + return 0; + if (!doit) + return 1; + + /* + * If colon first character, then no local addr. + */ + if (colon != arg && option_priority >= prio_local) { + *colon = '\0'; + if ((local = inet_addr(arg)) == (u32_t) -1) { + if ((hp = gethostbyname(arg)) == NULL) { + option_error("unknown host: %s", arg); + return 0; + } + local = *(u32_t *)hp->h_addr; + } + if (bad_ip_adrs(local)) { + option_error("bad local IP address %s", ip_ntoa(local)); + return 0; + } + if (local != 0) + wo->ouraddr = local; + *colon = ':'; + prio_local = option_priority; + } + + /* + * If colon last character, then no remote addr. + */ + if (*++colon != '\0' && option_priority >= prio_remote) { + if ((remote = inet_addr(colon)) == (u32_t) -1) { + if ((hp = gethostbyname(colon)) == NULL) { + option_error("unknown host: %s", colon); + return 0; + } + remote = *(u32_t *)hp->h_addr; + if (remote_name[0] == 0) + strlcpy(remote_name, colon, sizeof(remote_name)); + } + if (bad_ip_adrs(remote)) { + option_error("bad remote IP address %s", ip_ntoa(remote)); + return 0; + } + if (remote != 0) + wo->hisaddr = remote; + prio_remote = option_priority; + } + + return 1; +} + +static void +printipaddr(opt, printer, arg) + option_t *opt; + void (*printer) (void *, char *, ...); + void *arg; +{ + ipcp_options *wo = &ipcp_wantoptions[0]; + + if (wo->ouraddr != 0) + printer(arg, "%I", wo->ouraddr); + printer(arg, ":"); + if (wo->hisaddr != 0) + printer(arg, "%I", wo->hisaddr); +} + +/* + * setnetmask - set the netmask to be used on the interface. + */ +static int +setnetmask(argv) + char **argv; +{ + u32_t mask; + int n; + char *p; + + /* + * Unfortunately, if we use inet_addr, we can't tell whether + * a result of all 1s is an error or a valid 255.255.255.255. + */ + p = *argv; + n = parse_dotted_ip(p, &mask); + + mask = lwip_htonl(mask); + + if (n == 0 || p[n] != 0 || (netmask & ~mask) != 0) { + option_error("invalid netmask value '%s'", *argv); + return 0; + } + + netmask = mask; + slprintf(netmask_str, sizeof(netmask_str), "%I", mask); + + return (1); +} + +int +parse_dotted_ip(p, vp) + char *p; + u32_t *vp; +{ + int n; + u32_t v, b; + char *endp, *p0 = p; + + v = 0; + for (n = 3;; --n) { + b = strtoul(p, &endp, 0); + if (endp == p) + return 0; + if (b > 255) { + if (n < 3) + return 0; + /* accept e.g. 0xffffff00 */ + *vp = b; + return endp - p0; + } + v |= b << (n * 8); + p = endp; + if (n == 0) + break; + if (*p != '.') + return 0; + ++p; + } + *vp = v; + return p - p0; +} +#endif /* PPP_OPTIONS */ + +/* + * ipcp_init - Initialize IPCP. + */ +static void ipcp_init(ppp_pcb *pcb) { + fsm *f = &pcb->ipcp_fsm; + + ipcp_options *wo = &pcb->ipcp_wantoptions; + ipcp_options *ao = &pcb->ipcp_allowoptions; + + f->pcb = pcb; + f->protocol = PPP_IPCP; + f->callbacks = &ipcp_callbacks; + fsm_init(f); + + /* + * Some 3G modems use repeated IPCP NAKs as a way of stalling + * until they can contact a server on the network, so we increase + * the default number of NAKs we accept before we start treating + * them as rejects. + */ + f->maxnakloops = 100; + +#if 0 /* Not necessary, everything is cleared in ppp_new() */ + memset(wo, 0, sizeof(*wo)); + memset(ao, 0, sizeof(*ao)); +#endif /* 0 */ + + wo->neg_addr = wo->old_addrs = 1; +#if VJ_SUPPORT + wo->neg_vj = 1; + wo->vj_protocol = IPCP_VJ_COMP; + wo->maxslotindex = MAX_STATES - 1; /* really max index */ + wo->cflag = 1; +#endif /* VJ_SUPPORT */ + +#if 0 /* UNUSED */ + /* wanting default route by default */ + wo->default_route = 1; +#endif /* UNUSED */ + + ao->neg_addr = ao->old_addrs = 1; +#if VJ_SUPPORT + /* max slots and slot-id compression are currently hardwired in */ + /* ppp_if.c to 16 and 1, this needs to be changed (among other */ + /* things) gmc */ + + ao->neg_vj = 1; + ao->maxslotindex = MAX_STATES - 1; + ao->cflag = 1; +#endif /* #if VJ_SUPPORT */ + +#if 0 /* UNUSED */ + /* + * XXX These control whether the user may use the proxyarp + * and defaultroute options. + */ + ao->proxy_arp = 1; + ao->default_route = 1; +#endif /* UNUSED */ +} + + +/* + * ipcp_open - IPCP is allowed to come up. + */ +static void ipcp_open(ppp_pcb *pcb) { + fsm *f = &pcb->ipcp_fsm; + fsm_open(f); + pcb->ipcp_is_open = 1; +} + + +/* + * ipcp_close - Take IPCP down. + */ +static void ipcp_close(ppp_pcb *pcb, const char *reason) { + fsm *f = &pcb->ipcp_fsm; + fsm_close(f, reason); +} + + +/* + * ipcp_lowerup - The lower layer is up. + */ +static void ipcp_lowerup(ppp_pcb *pcb) { + fsm *f = &pcb->ipcp_fsm; + fsm_lowerup(f); +} + + +/* + * ipcp_lowerdown - The lower layer is down. + */ +static void ipcp_lowerdown(ppp_pcb *pcb) { + fsm *f = &pcb->ipcp_fsm; + fsm_lowerdown(f); +} + + +/* + * ipcp_input - Input IPCP packet. + */ +static void ipcp_input(ppp_pcb *pcb, u_char *p, int len) { + fsm *f = &pcb->ipcp_fsm; + fsm_input(f, p, len); +} + + +/* + * ipcp_protrej - A Protocol-Reject was received for IPCP. + * + * Pretend the lower layer went down, so we shut up. + */ +static void ipcp_protrej(ppp_pcb *pcb) { + fsm *f = &pcb->ipcp_fsm; + fsm_lowerdown(f); +} + + +/* + * ipcp_resetci - Reset our CI. + * Called by fsm_sconfreq, Send Configure Request. + */ +static void ipcp_resetci(fsm *f) { + ppp_pcb *pcb = f->pcb; + ipcp_options *wo = &pcb->ipcp_wantoptions; + ipcp_options *go = &pcb->ipcp_gotoptions; + ipcp_options *ao = &pcb->ipcp_allowoptions; + + wo->req_addr = (wo->neg_addr || wo->old_addrs) && + (ao->neg_addr || ao->old_addrs); + if (wo->ouraddr == 0) + wo->accept_local = 1; + if (wo->hisaddr == 0) + wo->accept_remote = 1; +#if LWIP_DNS + wo->req_dns1 = wo->req_dns2 = pcb->settings.usepeerdns; /* Request DNS addresses from the peer */ +#endif /* LWIP_DNS */ + *go = *wo; + if (!pcb->ask_for_local) + go->ouraddr = 0; +#if 0 /* UNUSED */ + if (ip_choose_hook) { + ip_choose_hook(&wo->hisaddr); + if (wo->hisaddr) { + wo->accept_remote = 0; + } + } +#endif /* UNUSED */ + BZERO(&pcb->ipcp_hisoptions, sizeof(ipcp_options)); +} + + +/* + * ipcp_cilen - Return length of our CI. + * Called by fsm_sconfreq, Send Configure Request. + */ +static int ipcp_cilen(fsm *f) { + ppp_pcb *pcb = f->pcb; + ipcp_options *go = &pcb->ipcp_gotoptions; +#if VJ_SUPPORT + ipcp_options *wo = &pcb->ipcp_wantoptions; +#endif /* VJ_SUPPORT */ + ipcp_options *ho = &pcb->ipcp_hisoptions; + +#define LENCIADDRS(neg) (neg ? CILEN_ADDRS : 0) +#if VJ_SUPPORT +#define LENCIVJ(neg, old) (neg ? (old? CILEN_COMPRESS : CILEN_VJ) : 0) +#endif /* VJ_SUPPORT */ +#define LENCIADDR(neg) (neg ? CILEN_ADDR : 0) +#if LWIP_DNS +#define LENCIDNS(neg) LENCIADDR(neg) +#endif /* LWIP_DNS */ +#if 0 /* UNUSED - WINS */ +#define LENCIWINS(neg) LENCIADDR(neg) +#endif /* UNUSED - WINS */ + + /* + * First see if we want to change our options to the old + * forms because we have received old forms from the peer. + */ + if (go->neg_addr && go->old_addrs && !ho->neg_addr && ho->old_addrs) + go->neg_addr = 0; + +#if VJ_SUPPORT + if (wo->neg_vj && !go->neg_vj && !go->old_vj) { + /* try an older style of VJ negotiation */ + /* use the old style only if the peer did */ + if (ho->neg_vj && ho->old_vj) { + go->neg_vj = 1; + go->old_vj = 1; + go->vj_protocol = ho->vj_protocol; + } + } +#endif /* VJ_SUPPORT */ + + return (LENCIADDRS(!go->neg_addr && go->old_addrs) + +#if VJ_SUPPORT + LENCIVJ(go->neg_vj, go->old_vj) + +#endif /* VJ_SUPPORT */ + LENCIADDR(go->neg_addr) + +#if LWIP_DNS + LENCIDNS(go->req_dns1) + + LENCIDNS(go->req_dns2) + +#endif /* LWIP_DNS */ +#if 0 /* UNUSED - WINS */ + LENCIWINS(go->winsaddr[0]) + + LENCIWINS(go->winsaddr[1]) + +#endif /* UNUSED - WINS */ + 0); +} + + +/* + * ipcp_addci - Add our desired CIs to a packet. + * Called by fsm_sconfreq, Send Configure Request. + */ +static void ipcp_addci(fsm *f, u_char *ucp, int *lenp) { + ppp_pcb *pcb = f->pcb; + ipcp_options *go = &pcb->ipcp_gotoptions; + int len = *lenp; + +#define ADDCIADDRS(opt, neg, val1, val2) \ + if (neg) { \ + if (len >= CILEN_ADDRS) { \ + u32_t l; \ + PUTCHAR(opt, ucp); \ + PUTCHAR(CILEN_ADDRS, ucp); \ + l = lwip_ntohl(val1); \ + PUTLONG(l, ucp); \ + l = lwip_ntohl(val2); \ + PUTLONG(l, ucp); \ + len -= CILEN_ADDRS; \ + } else \ + go->old_addrs = 0; \ + } + +#if VJ_SUPPORT +#define ADDCIVJ(opt, neg, val, old, maxslotindex, cflag) \ + if (neg) { \ + int vjlen = old? CILEN_COMPRESS : CILEN_VJ; \ + if (len >= vjlen) { \ + PUTCHAR(opt, ucp); \ + PUTCHAR(vjlen, ucp); \ + PUTSHORT(val, ucp); \ + if (!old) { \ + PUTCHAR(maxslotindex, ucp); \ + PUTCHAR(cflag, ucp); \ + } \ + len -= vjlen; \ + } else \ + neg = 0; \ + } +#endif /* VJ_SUPPORT */ + +#define ADDCIADDR(opt, neg, val) \ + if (neg) { \ + if (len >= CILEN_ADDR) { \ + u32_t l; \ + PUTCHAR(opt, ucp); \ + PUTCHAR(CILEN_ADDR, ucp); \ + l = lwip_ntohl(val); \ + PUTLONG(l, ucp); \ + len -= CILEN_ADDR; \ + } else \ + neg = 0; \ + } + +#if LWIP_DNS +#define ADDCIDNS(opt, neg, addr) \ + if (neg) { \ + if (len >= CILEN_ADDR) { \ + u32_t l; \ + PUTCHAR(opt, ucp); \ + PUTCHAR(CILEN_ADDR, ucp); \ + l = lwip_ntohl(addr); \ + PUTLONG(l, ucp); \ + len -= CILEN_ADDR; \ + } else \ + neg = 0; \ + } +#endif /* LWIP_DNS */ + +#if 0 /* UNUSED - WINS */ +#define ADDCIWINS(opt, addr) \ + if (addr) { \ + if (len >= CILEN_ADDR) { \ + u32_t l; \ + PUTCHAR(opt, ucp); \ + PUTCHAR(CILEN_ADDR, ucp); \ + l = lwip_ntohl(addr); \ + PUTLONG(l, ucp); \ + len -= CILEN_ADDR; \ + } else \ + addr = 0; \ + } +#endif /* UNUSED - WINS */ + + ADDCIADDRS(CI_ADDRS, !go->neg_addr && go->old_addrs, go->ouraddr, + go->hisaddr); + +#if VJ_SUPPORT + ADDCIVJ(CI_COMPRESSTYPE, go->neg_vj, go->vj_protocol, go->old_vj, + go->maxslotindex, go->cflag); +#endif /* VJ_SUPPORT */ + + ADDCIADDR(CI_ADDR, go->neg_addr, go->ouraddr); + +#if LWIP_DNS + ADDCIDNS(CI_MS_DNS1, go->req_dns1, go->dnsaddr[0]); + + ADDCIDNS(CI_MS_DNS2, go->req_dns2, go->dnsaddr[1]); +#endif /* LWIP_DNS */ + +#if 0 /* UNUSED - WINS */ + ADDCIWINS(CI_MS_WINS1, go->winsaddr[0]); + + ADDCIWINS(CI_MS_WINS2, go->winsaddr[1]); +#endif /* UNUSED - WINS */ + + *lenp -= len; +} + + +/* + * ipcp_ackci - Ack our CIs. + * Called by fsm_rconfack, Receive Configure ACK. + * + * Returns: + * 0 - Ack was bad. + * 1 - Ack was good. + */ +static int ipcp_ackci(fsm *f, u_char *p, int len) { + ppp_pcb *pcb = f->pcb; + ipcp_options *go = &pcb->ipcp_gotoptions; + u_short cilen, citype; + u32_t cilong; +#if VJ_SUPPORT + u_short cishort; + u_char cimaxslotindex, cicflag; +#endif /* VJ_SUPPORT */ + + /* + * CIs must be in exactly the same order that we sent... + * Check packet length and CI length at each step. + * If we find any deviations, then this packet is bad. + */ + +#define ACKCIADDRS(opt, neg, val1, val2) \ + if (neg) { \ + u32_t l; \ + if ((len -= CILEN_ADDRS) < 0) \ + goto bad; \ + GETCHAR(citype, p); \ + GETCHAR(cilen, p); \ + if (cilen != CILEN_ADDRS || \ + citype != opt) \ + goto bad; \ + GETLONG(l, p); \ + cilong = lwip_htonl(l); \ + if (val1 != cilong) \ + goto bad; \ + GETLONG(l, p); \ + cilong = lwip_htonl(l); \ + if (val2 != cilong) \ + goto bad; \ + } + +#if VJ_SUPPORT +#define ACKCIVJ(opt, neg, val, old, maxslotindex, cflag) \ + if (neg) { \ + int vjlen = old? CILEN_COMPRESS : CILEN_VJ; \ + if ((len -= vjlen) < 0) \ + goto bad; \ + GETCHAR(citype, p); \ + GETCHAR(cilen, p); \ + if (cilen != vjlen || \ + citype != opt) \ + goto bad; \ + GETSHORT(cishort, p); \ + if (cishort != val) \ + goto bad; \ + if (!old) { \ + GETCHAR(cimaxslotindex, p); \ + if (cimaxslotindex != maxslotindex) \ + goto bad; \ + GETCHAR(cicflag, p); \ + if (cicflag != cflag) \ + goto bad; \ + } \ + } +#endif /* VJ_SUPPORT */ + +#define ACKCIADDR(opt, neg, val) \ + if (neg) { \ + u32_t l; \ + if ((len -= CILEN_ADDR) < 0) \ + goto bad; \ + GETCHAR(citype, p); \ + GETCHAR(cilen, p); \ + if (cilen != CILEN_ADDR || \ + citype != opt) \ + goto bad; \ + GETLONG(l, p); \ + cilong = lwip_htonl(l); \ + if (val != cilong) \ + goto bad; \ + } + +#if LWIP_DNS +#define ACKCIDNS(opt, neg, addr) \ + if (neg) { \ + u32_t l; \ + if ((len -= CILEN_ADDR) < 0) \ + goto bad; \ + GETCHAR(citype, p); \ + GETCHAR(cilen, p); \ + if (cilen != CILEN_ADDR || citype != opt) \ + goto bad; \ + GETLONG(l, p); \ + cilong = lwip_htonl(l); \ + if (addr != cilong) \ + goto bad; \ + } +#endif /* LWIP_DNS */ + +#if 0 /* UNUSED - WINS */ +#define ACKCIWINS(opt, addr) \ + if (addr) { \ + u32_t l; \ + if ((len -= CILEN_ADDR) < 0) \ + goto bad; \ + GETCHAR(citype, p); \ + GETCHAR(cilen, p); \ + if (cilen != CILEN_ADDR || citype != opt) \ + goto bad; \ + GETLONG(l, p); \ + cilong = lwip_htonl(l); \ + if (addr != cilong) \ + goto bad; \ + } +#endif /* UNUSED - WINS */ + + ACKCIADDRS(CI_ADDRS, !go->neg_addr && go->old_addrs, go->ouraddr, + go->hisaddr); + +#if VJ_SUPPORT + ACKCIVJ(CI_COMPRESSTYPE, go->neg_vj, go->vj_protocol, go->old_vj, + go->maxslotindex, go->cflag); +#endif /* VJ_SUPPORT */ + + ACKCIADDR(CI_ADDR, go->neg_addr, go->ouraddr); + +#if LWIP_DNS + ACKCIDNS(CI_MS_DNS1, go->req_dns1, go->dnsaddr[0]); + + ACKCIDNS(CI_MS_DNS2, go->req_dns2, go->dnsaddr[1]); +#endif /* LWIP_DNS */ + +#if 0 /* UNUSED - WINS */ + ACKCIWINS(CI_MS_WINS1, go->winsaddr[0]); + + ACKCIWINS(CI_MS_WINS2, go->winsaddr[1]); +#endif /* UNUSED - WINS */ + + /* + * If there are any remaining CIs, then this packet is bad. + */ + if (len != 0) + goto bad; + return (1); + +bad: + IPCPDEBUG(("ipcp_ackci: received bad Ack!")); + return (0); +} + +/* + * ipcp_nakci - Peer has sent a NAK for some of our CIs. + * This should not modify any state if the Nak is bad + * or if IPCP is in the OPENED state. + * Calback from fsm_rconfnakrej - Receive Configure-Nak or Configure-Reject. + * + * Returns: + * 0 - Nak was bad. + * 1 - Nak was good. + */ +static int ipcp_nakci(fsm *f, u_char *p, int len, int treat_as_reject) { + ppp_pcb *pcb = f->pcb; + ipcp_options *go = &pcb->ipcp_gotoptions; + u_char citype, cilen, *next; +#if VJ_SUPPORT + u_char cimaxslotindex, cicflag; + u_short cishort; +#endif /* VJ_SUPPORT */ + u32_t ciaddr1, ciaddr2, l; +#if LWIP_DNS + u32_t cidnsaddr; +#endif /* LWIP_DNS */ + ipcp_options no; /* options we've seen Naks for */ + ipcp_options try_; /* options to request next time */ + + BZERO(&no, sizeof(no)); + try_ = *go; + + /* + * Any Nak'd CIs must be in exactly the same order that we sent. + * Check packet length and CI length at each step. + * If we find any deviations, then this packet is bad. + */ +#define NAKCIADDRS(opt, neg, code) \ + if ((neg) && \ + (cilen = p[1]) == CILEN_ADDRS && \ + len >= cilen && \ + p[0] == opt) { \ + len -= cilen; \ + INCPTR(2, p); \ + GETLONG(l, p); \ + ciaddr1 = lwip_htonl(l); \ + GETLONG(l, p); \ + ciaddr2 = lwip_htonl(l); \ + no.old_addrs = 1; \ + code \ + } + +#if VJ_SUPPORT +#define NAKCIVJ(opt, neg, code) \ + if (go->neg && \ + ((cilen = p[1]) == CILEN_COMPRESS || cilen == CILEN_VJ) && \ + len >= cilen && \ + p[0] == opt) { \ + len -= cilen; \ + INCPTR(2, p); \ + GETSHORT(cishort, p); \ + no.neg = 1; \ + code \ + } +#endif /* VJ_SUPPORT */ + +#define NAKCIADDR(opt, neg, code) \ + if (go->neg && \ + (cilen = p[1]) == CILEN_ADDR && \ + len >= cilen && \ + p[0] == opt) { \ + len -= cilen; \ + INCPTR(2, p); \ + GETLONG(l, p); \ + ciaddr1 = lwip_htonl(l); \ + no.neg = 1; \ + code \ + } + +#if LWIP_DNS +#define NAKCIDNS(opt, neg, code) \ + if (go->neg && \ + ((cilen = p[1]) == CILEN_ADDR) && \ + len >= cilen && \ + p[0] == opt) { \ + len -= cilen; \ + INCPTR(2, p); \ + GETLONG(l, p); \ + cidnsaddr = lwip_htonl(l); \ + no.neg = 1; \ + code \ + } +#endif /* LWIP_DNS */ + + /* + * Accept the peer's idea of {our,his} address, if different + * from our idea, only if the accept_{local,remote} flag is set. + */ + NAKCIADDRS(CI_ADDRS, !go->neg_addr && go->old_addrs, + if (treat_as_reject) { + try_.old_addrs = 0; + } else { + if (go->accept_local && ciaddr1) { + /* take his idea of our address */ + try_.ouraddr = ciaddr1; + } + if (go->accept_remote && ciaddr2) { + /* take his idea of his address */ + try_.hisaddr = ciaddr2; + } + } + ); + +#if VJ_SUPPORT + /* + * Accept the peer's value of maxslotindex provided that it + * is less than what we asked for. Turn off slot-ID compression + * if the peer wants. Send old-style compress-type option if + * the peer wants. + */ + NAKCIVJ(CI_COMPRESSTYPE, neg_vj, + if (treat_as_reject) { + try_.neg_vj = 0; + } else if (cilen == CILEN_VJ) { + GETCHAR(cimaxslotindex, p); + GETCHAR(cicflag, p); + if (cishort == IPCP_VJ_COMP) { + try_.old_vj = 0; + if (cimaxslotindex < go->maxslotindex) + try_.maxslotindex = cimaxslotindex; + if (!cicflag) + try_.cflag = 0; + } else { + try_.neg_vj = 0; + } + } else { + if (cishort == IPCP_VJ_COMP || cishort == IPCP_VJ_COMP_OLD) { + try_.old_vj = 1; + try_.vj_protocol = cishort; + } else { + try_.neg_vj = 0; + } + } + ); +#endif /* VJ_SUPPORT */ + + NAKCIADDR(CI_ADDR, neg_addr, + if (treat_as_reject) { + try_.neg_addr = 0; + try_.old_addrs = 0; + } else if (go->accept_local && ciaddr1) { + /* take his idea of our address */ + try_.ouraddr = ciaddr1; + } + ); + +#if LWIP_DNS + NAKCIDNS(CI_MS_DNS1, req_dns1, + if (treat_as_reject) { + try_.req_dns1 = 0; + } else { + try_.dnsaddr[0] = cidnsaddr; + } + ); + + NAKCIDNS(CI_MS_DNS2, req_dns2, + if (treat_as_reject) { + try_.req_dns2 = 0; + } else { + try_.dnsaddr[1] = cidnsaddr; + } + ); +#endif /* #if LWIP_DNS */ + + /* + * There may be remaining CIs, if the peer is requesting negotiation + * on an option that we didn't include in our request packet. + * If they want to negotiate about IP addresses, we comply. + * If they want us to ask for compression, we refuse. + * If they want us to ask for ms-dns, we do that, since some + * peers get huffy if we don't. + */ + while (len >= CILEN_VOID) { + GETCHAR(citype, p); + GETCHAR(cilen, p); + if ( cilen < CILEN_VOID || (len -= cilen) < 0 ) + goto bad; + next = p + cilen - 2; + + switch (citype) { +#if VJ_SUPPORT + case CI_COMPRESSTYPE: + if (go->neg_vj || no.neg_vj || + (cilen != CILEN_VJ && cilen != CILEN_COMPRESS)) + goto bad; + no.neg_vj = 1; + break; +#endif /* VJ_SUPPORT */ + case CI_ADDRS: + if ((!go->neg_addr && go->old_addrs) || no.old_addrs + || cilen != CILEN_ADDRS) + goto bad; + try_.neg_addr = 0; + GETLONG(l, p); + ciaddr1 = lwip_htonl(l); + if (ciaddr1 && go->accept_local) + try_.ouraddr = ciaddr1; + GETLONG(l, p); + ciaddr2 = lwip_htonl(l); + if (ciaddr2 && go->accept_remote) + try_.hisaddr = ciaddr2; + no.old_addrs = 1; + break; + case CI_ADDR: + if (go->neg_addr || no.neg_addr || cilen != CILEN_ADDR) + goto bad; + try_.old_addrs = 0; + GETLONG(l, p); + ciaddr1 = lwip_htonl(l); + if (ciaddr1 && go->accept_local) + try_.ouraddr = ciaddr1; + if (try_.ouraddr != 0) + try_.neg_addr = 1; + no.neg_addr = 1; + break; +#if LWIP_DNS + case CI_MS_DNS1: + if (go->req_dns1 || no.req_dns1 || cilen != CILEN_ADDR) + goto bad; + GETLONG(l, p); + try_.dnsaddr[0] = lwip_htonl(l); + try_.req_dns1 = 1; + no.req_dns1 = 1; + break; + case CI_MS_DNS2: + if (go->req_dns2 || no.req_dns2 || cilen != CILEN_ADDR) + goto bad; + GETLONG(l, p); + try_.dnsaddr[1] = lwip_htonl(l); + try_.req_dns2 = 1; + no.req_dns2 = 1; + break; +#endif /* LWIP_DNS */ +#if 0 /* UNUSED - WINS */ + case CI_MS_WINS1: + case CI_MS_WINS2: + if (cilen != CILEN_ADDR) + goto bad; + GETLONG(l, p); + ciaddr1 = lwip_htonl(l); + if (ciaddr1) + try_.winsaddr[citype == CI_MS_WINS2] = ciaddr1; + break; +#endif /* UNUSED - WINS */ + default: + break; + } + p = next; + } + + /* + * OK, the Nak is good. Now we can update state. + * If there are any remaining options, we ignore them. + */ + if (f->state != PPP_FSM_OPENED) + *go = try_; + + return 1; + +bad: + IPCPDEBUG(("ipcp_nakci: received bad Nak!")); + return 0; +} + + +/* + * ipcp_rejci - Reject some of our CIs. + * Callback from fsm_rconfnakrej. + */ +static int ipcp_rejci(fsm *f, u_char *p, int len) { + ppp_pcb *pcb = f->pcb; + ipcp_options *go = &pcb->ipcp_gotoptions; + u_char cilen; +#if VJ_SUPPORT + u_char cimaxslotindex, ciflag; + u_short cishort; +#endif /* VJ_SUPPORT */ + u32_t cilong; + ipcp_options try_; /* options to request next time */ + + try_ = *go; + /* + * Any Rejected CIs must be in exactly the same order that we sent. + * Check packet length and CI length at each step. + * If we find any deviations, then this packet is bad. + */ +#define REJCIADDRS(opt, neg, val1, val2) \ + if ((neg) && \ + (cilen = p[1]) == CILEN_ADDRS && \ + len >= cilen && \ + p[0] == opt) { \ + u32_t l; \ + len -= cilen; \ + INCPTR(2, p); \ + GETLONG(l, p); \ + cilong = lwip_htonl(l); \ + /* Check rejected value. */ \ + if (cilong != val1) \ + goto bad; \ + GETLONG(l, p); \ + cilong = lwip_htonl(l); \ + /* Check rejected value. */ \ + if (cilong != val2) \ + goto bad; \ + try_.old_addrs = 0; \ + } + +#if VJ_SUPPORT +#define REJCIVJ(opt, neg, val, old, maxslot, cflag) \ + if (go->neg && \ + p[1] == (old? CILEN_COMPRESS : CILEN_VJ) && \ + len >= p[1] && \ + p[0] == opt) { \ + len -= p[1]; \ + INCPTR(2, p); \ + GETSHORT(cishort, p); \ + /* Check rejected value. */ \ + if (cishort != val) \ + goto bad; \ + if (!old) { \ + GETCHAR(cimaxslotindex, p); \ + if (cimaxslotindex != maxslot) \ + goto bad; \ + GETCHAR(ciflag, p); \ + if (ciflag != cflag) \ + goto bad; \ + } \ + try_.neg = 0; \ + } +#endif /* VJ_SUPPORT */ + +#define REJCIADDR(opt, neg, val) \ + if (go->neg && \ + (cilen = p[1]) == CILEN_ADDR && \ + len >= cilen && \ + p[0] == opt) { \ + u32_t l; \ + len -= cilen; \ + INCPTR(2, p); \ + GETLONG(l, p); \ + cilong = lwip_htonl(l); \ + /* Check rejected value. */ \ + if (cilong != val) \ + goto bad; \ + try_.neg = 0; \ + } + +#if LWIP_DNS +#define REJCIDNS(opt, neg, dnsaddr) \ + if (go->neg && \ + ((cilen = p[1]) == CILEN_ADDR) && \ + len >= cilen && \ + p[0] == opt) { \ + u32_t l; \ + len -= cilen; \ + INCPTR(2, p); \ + GETLONG(l, p); \ + cilong = lwip_htonl(l); \ + /* Check rejected value. */ \ + if (cilong != dnsaddr) \ + goto bad; \ + try_.neg = 0; \ + } +#endif /* LWIP_DNS */ + +#if 0 /* UNUSED - WINS */ +#define REJCIWINS(opt, addr) \ + if (addr && \ + ((cilen = p[1]) == CILEN_ADDR) && \ + len >= cilen && \ + p[0] == opt) { \ + u32_t l; \ + len -= cilen; \ + INCPTR(2, p); \ + GETLONG(l, p); \ + cilong = lwip_htonl(l); \ + /* Check rejected value. */ \ + if (cilong != addr) \ + goto bad; \ + try_.winsaddr[opt == CI_MS_WINS2] = 0; \ + } +#endif /* UNUSED - WINS */ + + REJCIADDRS(CI_ADDRS, !go->neg_addr && go->old_addrs, + go->ouraddr, go->hisaddr); + +#if VJ_SUPPORT + REJCIVJ(CI_COMPRESSTYPE, neg_vj, go->vj_protocol, go->old_vj, + go->maxslotindex, go->cflag); +#endif /* VJ_SUPPORT */ + + REJCIADDR(CI_ADDR, neg_addr, go->ouraddr); + +#if LWIP_DNS + REJCIDNS(CI_MS_DNS1, req_dns1, go->dnsaddr[0]); + + REJCIDNS(CI_MS_DNS2, req_dns2, go->dnsaddr[1]); +#endif /* LWIP_DNS */ + +#if 0 /* UNUSED - WINS */ + REJCIWINS(CI_MS_WINS1, go->winsaddr[0]); + + REJCIWINS(CI_MS_WINS2, go->winsaddr[1]); +#endif /* UNUSED - WINS */ + + /* + * If there are any remaining CIs, then this packet is bad. + */ + if (len != 0) + goto bad; + /* + * Now we can update state. + */ + if (f->state != PPP_FSM_OPENED) + *go = try_; + return 1; + +bad: + IPCPDEBUG(("ipcp_rejci: received bad Reject!")); + return 0; +} + + +/* + * ipcp_reqci - Check the peer's requested CIs and send appropriate response. + * Callback from fsm_rconfreq, Receive Configure Request + * + * Returns: CONFACK, CONFNAK or CONFREJ and input packet modified + * appropriately. If reject_if_disagree is non-zero, doesn't return + * CONFNAK; returns CONFREJ if it can't return CONFACK. + * + * inp = Requested CIs + * len = Length of requested CIs + */ +static int ipcp_reqci(fsm *f, u_char *inp, int *len, int reject_if_disagree) { + ppp_pcb *pcb = f->pcb; + ipcp_options *wo = &pcb->ipcp_wantoptions; + ipcp_options *ho = &pcb->ipcp_hisoptions; + ipcp_options *ao = &pcb->ipcp_allowoptions; + u_char *cip, *next; /* Pointer to current and next CIs */ + u_short cilen, citype; /* Parsed len, type */ +#if VJ_SUPPORT + u_short cishort; /* Parsed short value */ +#endif /* VJ_SUPPORT */ + u32_t tl, ciaddr1, ciaddr2;/* Parsed address values */ + int rc = CONFACK; /* Final packet return code */ + int orc; /* Individual option return code */ + u_char *p; /* Pointer to next char to parse */ + u_char *ucp = inp; /* Pointer to current output char */ + int l = *len; /* Length left */ +#if VJ_SUPPORT + u_char maxslotindex, cflag; +#endif /* VJ_SUPPORT */ +#if LWIP_DNS + int d; +#endif /* LWIP_DNS */ + + /* + * Reset all his options. + */ + BZERO(ho, sizeof(*ho)); + + /* + * Process all his options. + */ + next = inp; + while (l) { + orc = CONFACK; /* Assume success */ + cip = p = next; /* Remember begining of CI */ + if (l < 2 || /* Not enough data for CI header or */ + p[1] < 2 || /* CI length too small or */ + p[1] > l) { /* CI length too big? */ + IPCPDEBUG(("ipcp_reqci: bad CI length!")); + orc = CONFREJ; /* Reject bad CI */ + cilen = l; /* Reject till end of packet */ + l = 0; /* Don't loop again */ + goto endswitch; + } + GETCHAR(citype, p); /* Parse CI type */ + GETCHAR(cilen, p); /* Parse CI length */ + l -= cilen; /* Adjust remaining length */ + next += cilen; /* Step to next CI */ + + switch (citype) { /* Check CI type */ + case CI_ADDRS: + if (!ao->old_addrs || ho->neg_addr || + cilen != CILEN_ADDRS) { /* Check CI length */ + orc = CONFREJ; /* Reject CI */ + break; + } + + /* + * If he has no address, or if we both have his address but + * disagree about it, then NAK it with our idea. + * In particular, if we don't know his address, but he does, + * then accept it. + */ + GETLONG(tl, p); /* Parse source address (his) */ + ciaddr1 = lwip_htonl(tl); + if (ciaddr1 != wo->hisaddr + && (ciaddr1 == 0 || !wo->accept_remote)) { + orc = CONFNAK; + if (!reject_if_disagree) { + DECPTR(sizeof(u32_t), p); + tl = lwip_ntohl(wo->hisaddr); + PUTLONG(tl, p); + } + } else if (ciaddr1 == 0 && wo->hisaddr == 0) { + /* + * If neither we nor he knows his address, reject the option. + */ + orc = CONFREJ; + wo->req_addr = 0; /* don't NAK with 0.0.0.0 later */ + break; + } + + /* + * If he doesn't know our address, or if we both have our address + * but disagree about it, then NAK it with our idea. + */ + GETLONG(tl, p); /* Parse desination address (ours) */ + ciaddr2 = lwip_htonl(tl); + if (ciaddr2 != wo->ouraddr) { + if (ciaddr2 == 0 || !wo->accept_local) { + orc = CONFNAK; + if (!reject_if_disagree) { + DECPTR(sizeof(u32_t), p); + tl = lwip_ntohl(wo->ouraddr); + PUTLONG(tl, p); + } + } else { + wo->ouraddr = ciaddr2; /* accept peer's idea */ + } + } + + ho->old_addrs = 1; + ho->hisaddr = ciaddr1; + ho->ouraddr = ciaddr2; + break; + + case CI_ADDR: + if (!ao->neg_addr || ho->old_addrs || + cilen != CILEN_ADDR) { /* Check CI length */ + orc = CONFREJ; /* Reject CI */ + break; + } + + /* + * If he has no address, or if we both have his address but + * disagree about it, then NAK it with our idea. + * In particular, if we don't know his address, but he does, + * then accept it. + */ + GETLONG(tl, p); /* Parse source address (his) */ + ciaddr1 = lwip_htonl(tl); + if (ciaddr1 != wo->hisaddr + && (ciaddr1 == 0 || !wo->accept_remote)) { + orc = CONFNAK; + if (!reject_if_disagree) { + DECPTR(sizeof(u32_t), p); + tl = lwip_ntohl(wo->hisaddr); + PUTLONG(tl, p); + } + } else if (ciaddr1 == 0 && wo->hisaddr == 0) { + /* + * Don't ACK an address of 0.0.0.0 - reject it instead. + */ + orc = CONFREJ; + wo->req_addr = 0; /* don't NAK with 0.0.0.0 later */ + break; + } + + ho->neg_addr = 1; + ho->hisaddr = ciaddr1; + break; + +#if LWIP_DNS + case CI_MS_DNS1: + case CI_MS_DNS2: + /* Microsoft primary or secondary DNS request */ + d = citype == CI_MS_DNS2; + + /* If we do not have a DNS address then we cannot send it */ + if (ao->dnsaddr[d] == 0 || + cilen != CILEN_ADDR) { /* Check CI length */ + orc = CONFREJ; /* Reject CI */ + break; + } + GETLONG(tl, p); + if (lwip_htonl(tl) != ao->dnsaddr[d]) { + DECPTR(sizeof(u32_t), p); + tl = lwip_ntohl(ao->dnsaddr[d]); + PUTLONG(tl, p); + orc = CONFNAK; + } + break; +#endif /* LWIP_DNS */ + +#if 0 /* UNUSED - WINS */ + case CI_MS_WINS1: + case CI_MS_WINS2: + /* Microsoft primary or secondary WINS request */ + d = citype == CI_MS_WINS2; + + /* If we do not have a DNS address then we cannot send it */ + if (ao->winsaddr[d] == 0 || + cilen != CILEN_ADDR) { /* Check CI length */ + orc = CONFREJ; /* Reject CI */ + break; + } + GETLONG(tl, p); + if (lwip_htonl(tl) != ao->winsaddr[d]) { + DECPTR(sizeof(u32_t), p); + tl = lwip_ntohl(ao->winsaddr[d]); + PUTLONG(tl, p); + orc = CONFNAK; + } + break; +#endif /* UNUSED - WINS */ + +#if VJ_SUPPORT + case CI_COMPRESSTYPE: + if (!ao->neg_vj || + (cilen != CILEN_VJ && cilen != CILEN_COMPRESS)) { + orc = CONFREJ; + break; + } + GETSHORT(cishort, p); + + if (!(cishort == IPCP_VJ_COMP || + (cishort == IPCP_VJ_COMP_OLD && cilen == CILEN_COMPRESS))) { + orc = CONFREJ; + break; + } + + ho->neg_vj = 1; + ho->vj_protocol = cishort; + if (cilen == CILEN_VJ) { + GETCHAR(maxslotindex, p); + if (maxslotindex > ao->maxslotindex) { + orc = CONFNAK; + if (!reject_if_disagree){ + DECPTR(1, p); + PUTCHAR(ao->maxslotindex, p); + } + } + GETCHAR(cflag, p); + if (cflag && !ao->cflag) { + orc = CONFNAK; + if (!reject_if_disagree){ + DECPTR(1, p); + PUTCHAR(wo->cflag, p); + } + } + ho->maxslotindex = maxslotindex; + ho->cflag = cflag; + } else { + ho->old_vj = 1; + ho->maxslotindex = MAX_STATES - 1; + ho->cflag = 1; + } + break; +#endif /* VJ_SUPPORT */ + + default: + orc = CONFREJ; + break; + } +endswitch: + if (orc == CONFACK && /* Good CI */ + rc != CONFACK) /* but prior CI wasnt? */ + continue; /* Don't send this one */ + + if (orc == CONFNAK) { /* Nak this CI? */ + if (reject_if_disagree) /* Getting fed up with sending NAKs? */ + orc = CONFREJ; /* Get tough if so */ + else { + if (rc == CONFREJ) /* Rejecting prior CI? */ + continue; /* Don't send this one */ + if (rc == CONFACK) { /* Ack'd all prior CIs? */ + rc = CONFNAK; /* Not anymore... */ + ucp = inp; /* Backup */ + } + } + } + + if (orc == CONFREJ && /* Reject this CI */ + rc != CONFREJ) { /* but no prior ones? */ + rc = CONFREJ; + ucp = inp; /* Backup */ + } + + /* Need to move CI? */ + if (ucp != cip) + MEMCPY(ucp, cip, cilen); /* Move it */ + + /* Update output pointer */ + INCPTR(cilen, ucp); + } + + /* + * If we aren't rejecting this packet, and we want to negotiate + * their address, and they didn't send their address, then we + * send a NAK with a CI_ADDR option appended. We assume the + * input buffer is long enough that we can append the extra + * option safely. + */ + if (rc != CONFREJ && !ho->neg_addr && !ho->old_addrs && + wo->req_addr && !reject_if_disagree && !pcb->settings.noremoteip) { + if (rc == CONFACK) { + rc = CONFNAK; + ucp = inp; /* reset pointer */ + wo->req_addr = 0; /* don't ask again */ + } + PUTCHAR(CI_ADDR, ucp); + PUTCHAR(CILEN_ADDR, ucp); + tl = lwip_ntohl(wo->hisaddr); + PUTLONG(tl, ucp); + } + + *len = ucp - inp; /* Compute output length */ + IPCPDEBUG(("ipcp: returning Configure-%s", CODENAME(rc))); + return (rc); /* Return final code */ +} + + +#if 0 /* UNUSED */ +/* + * ip_check_options - check that any IP-related options are OK, + * and assign appropriate defaults. + */ +static void +ip_check_options() +{ + struct hostent *hp; + u32_t local; + ipcp_options *wo = &ipcp_wantoptions[0]; + + /* + * Default our local IP address based on our hostname. + * If local IP address already given, don't bother. + */ + if (wo->ouraddr == 0 && !disable_defaultip) { + /* + * Look up our hostname (possibly with domain name appended) + * and take the first IP address as our local IP address. + * If there isn't an IP address for our hostname, too bad. + */ + wo->accept_local = 1; /* don't insist on this default value */ + if ((hp = gethostbyname(hostname)) != NULL) { + local = *(u32_t *)hp->h_addr; + if (local != 0 && !bad_ip_adrs(local)) + wo->ouraddr = local; + } + } + ask_for_local = wo->ouraddr != 0 || !disable_defaultip; +} +#endif /* UNUSED */ + +#if DEMAND_SUPPORT +/* + * ip_demand_conf - configure the interface as though + * IPCP were up, for use with dial-on-demand. + */ +static int +ip_demand_conf(u) + int u; +{ + ppp_pcb *pcb = &ppp_pcb_list[u]; + ipcp_options *wo = &ipcp_wantoptions[u]; + + if (wo->hisaddr == 0 && !pcb->settings.noremoteip) { + /* make up an arbitrary address for the peer */ + wo->hisaddr = lwip_htonl(0x0a707070 + ifunit); + wo->accept_remote = 1; + } + if (wo->ouraddr == 0) { + /* make up an arbitrary address for us */ + wo->ouraddr = lwip_htonl(0x0a404040 + ifunit); + wo->accept_local = 1; + ask_for_local = 0; /* don't tell the peer this address */ + } + if (!sifaddr(pcb, wo->ouraddr, wo->hisaddr, get_mask(wo->ouraddr))) + return 0; + if (!sifup(pcb)) + return 0; + if (!sifnpmode(pcb, PPP_IP, NPMODE_QUEUE)) + return 0; +#if 0 /* UNUSED */ + if (wo->default_route) + if (sifdefaultroute(pcb, wo->ouraddr, wo->hisaddr, + wo->replace_default_route)) + default_route_set[u] = 1; +#endif /* UNUSED */ +#if 0 /* UNUSED - PROXY ARP */ + if (wo->proxy_arp) + if (sifproxyarp(pcb, wo->hisaddr)) + proxy_arp_set[u] = 1; +#endif /* UNUSED - PROXY ARP */ + + ppp_notice("local IP address %I", wo->ouraddr); + if (wo->hisaddr) + ppp_notice("remote IP address %I", wo->hisaddr); + + return 1; +} +#endif /* DEMAND_SUPPORT */ + +/* + * ipcp_up - IPCP has come UP. + * + * Configure the IP network interface appropriately and bring it up. + */ +static void ipcp_up(fsm *f) { + ppp_pcb *pcb = f->pcb; + u32_t mask; + ipcp_options *ho = &pcb->ipcp_hisoptions; + ipcp_options *go = &pcb->ipcp_gotoptions; + ipcp_options *wo = &pcb->ipcp_wantoptions; + + IPCPDEBUG(("ipcp: up")); + + /* + * We must have a non-zero IP address for both ends of the link. + */ + if (!ho->neg_addr && !ho->old_addrs) + ho->hisaddr = wo->hisaddr; + + if (!(go->neg_addr || go->old_addrs) && (wo->neg_addr || wo->old_addrs) + && wo->ouraddr != 0) { + ppp_error("Peer refused to agree to our IP address"); + ipcp_close(f->pcb, "Refused our IP address"); + return; + } + if (go->ouraddr == 0) { + ppp_error("Could not determine local IP address"); + ipcp_close(f->pcb, "Could not determine local IP address"); + return; + } + if (ho->hisaddr == 0 && !pcb->settings.noremoteip) { + ho->hisaddr = lwip_htonl(0x0a404040); + ppp_warn("Could not determine remote IP address: defaulting to %I", + ho->hisaddr); + } +#if 0 /* UNUSED */ + script_setenv("IPLOCAL", ip_ntoa(go->ouraddr), 0); + if (ho->hisaddr != 0) + script_setenv("IPREMOTE", ip_ntoa(ho->hisaddr), 1); +#endif /* UNUSED */ + +#if LWIP_DNS + if (!go->req_dns1) + go->dnsaddr[0] = 0; + if (!go->req_dns2) + go->dnsaddr[1] = 0; +#if 0 /* UNUSED */ + if (go->dnsaddr[0]) + script_setenv("DNS1", ip_ntoa(go->dnsaddr[0]), 0); + if (go->dnsaddr[1]) + script_setenv("DNS2", ip_ntoa(go->dnsaddr[1]), 0); +#endif /* UNUSED */ + if (pcb->settings.usepeerdns && (go->dnsaddr[0] || go->dnsaddr[1])) { + sdns(pcb, go->dnsaddr[0], go->dnsaddr[1]); +#if 0 /* UNUSED */ + script_setenv("USEPEERDNS", "1", 0); + create_resolv(go->dnsaddr[0], go->dnsaddr[1]); +#endif /* UNUSED */ + } +#endif /* LWIP_DNS */ + + /* + * Check that the peer is allowed to use the IP address it wants. + */ + if (ho->hisaddr != 0) { + u32_t addr = lwip_ntohl(ho->hisaddr); + if ((addr >> IP_CLASSA_NSHIFT) == IP_LOOPBACKNET + || IP_MULTICAST(addr) || IP_BADCLASS(addr) + /* + * For now, consider that PPP in server mode with peer required + * to authenticate must provide the peer IP address, reject any + * IP address wanted by peer different than the one we wanted. + */ +#if PPP_SERVER && PPP_AUTH_SUPPORT + || (pcb->settings.auth_required && wo->hisaddr != ho->hisaddr) +#endif /* PPP_SERVER && PPP_AUTH_SUPPORT */ + ) { + ppp_error("Peer is not authorized to use remote address %I", ho->hisaddr); + ipcp_close(pcb, "Unauthorized remote IP address"); + return; + } + } +#if 0 /* Unused */ + /* Upstream checking code */ + if (ho->hisaddr != 0 && !auth_ip_addr(f->unit, ho->hisaddr)) { + ppp_error("Peer is not authorized to use remote address %I", ho->hisaddr); + ipcp_close(f->unit, "Unauthorized remote IP address"); + return; + } +#endif /* Unused */ + +#if VJ_SUPPORT + /* set tcp compression */ + sifvjcomp(pcb, ho->neg_vj, ho->cflag, ho->maxslotindex); +#endif /* VJ_SUPPORT */ + +#if DEMAND_SUPPORT + /* + * If we are doing dial-on-demand, the interface is already + * configured, so we put out any saved-up packets, then set the + * interface to pass IP packets. + */ + if (demand) { + if (go->ouraddr != wo->ouraddr || ho->hisaddr != wo->hisaddr) { + ipcp_clear_addrs(f->unit, wo->ouraddr, wo->hisaddr, + wo->replace_default_route); + if (go->ouraddr != wo->ouraddr) { + ppp_warn("Local IP address changed to %I", go->ouraddr); + script_setenv("OLDIPLOCAL", ip_ntoa(wo->ouraddr), 0); + wo->ouraddr = go->ouraddr; + } else + script_unsetenv("OLDIPLOCAL"); + if (ho->hisaddr != wo->hisaddr && wo->hisaddr != 0) { + ppp_warn("Remote IP address changed to %I", ho->hisaddr); + script_setenv("OLDIPREMOTE", ip_ntoa(wo->hisaddr), 0); + wo->hisaddr = ho->hisaddr; + } else + script_unsetenv("OLDIPREMOTE"); + + /* Set the interface to the new addresses */ + mask = get_mask(go->ouraddr); + if (!sifaddr(pcb, go->ouraddr, ho->hisaddr, mask)) { +#if PPP_DEBUG + ppp_warn("Interface configuration failed"); +#endif /* PPP_DEBUG */ + ipcp_close(f->unit, "Interface configuration failed"); + return; + } + + /* assign a default route through the interface if required */ + if (ipcp_wantoptions[f->unit].default_route) + if (sifdefaultroute(pcb, go->ouraddr, ho->hisaddr, + wo->replace_default_route)) + default_route_set[f->unit] = 1; + +#if 0 /* UNUSED - PROXY ARP */ + /* Make a proxy ARP entry if requested. */ + if (ho->hisaddr != 0 && ipcp_wantoptions[f->unit].proxy_arp) + if (sifproxyarp(pcb, ho->hisaddr)) + proxy_arp_set[f->unit] = 1; +#endif /* UNUSED - PROXY ARP */ + + } + demand_rexmit(PPP_IP,go->ouraddr); + sifnpmode(pcb, PPP_IP, NPMODE_PASS); + + } else +#endif /* DEMAND_SUPPORT */ + { + /* + * Set IP addresses and (if specified) netmask. + */ + mask = get_mask(go->ouraddr); + +#if !(defined(SVR4) && (defined(SNI) || defined(__USLC__))) + if (!sifaddr(pcb, go->ouraddr, ho->hisaddr, mask)) { +#if PPP_DEBUG + ppp_warn("Interface configuration failed"); +#endif /* PPP_DEBUG */ + ipcp_close(f->pcb, "Interface configuration failed"); + return; + } +#endif + + /* bring the interface up for IP */ + if (!sifup(pcb)) { +#if PPP_DEBUG + ppp_warn("Interface failed to come up"); +#endif /* PPP_DEBUG */ + ipcp_close(f->pcb, "Interface configuration failed"); + return; + } + +#if (defined(SVR4) && (defined(SNI) || defined(__USLC__))) + if (!sifaddr(pcb, go->ouraddr, ho->hisaddr, mask)) { +#if PPP_DEBUG + ppp_warn("Interface configuration failed"); +#endif /* PPP_DEBUG */ + ipcp_close(f->unit, "Interface configuration failed"); + return; + } +#endif +#if DEMAND_SUPPORT + sifnpmode(pcb, PPP_IP, NPMODE_PASS); +#endif /* DEMAND_SUPPORT */ + +#if 0 /* UNUSED */ + /* assign a default route through the interface if required */ + if (wo->default_route) + if (sifdefaultroute(pcb, go->ouraddr, ho->hisaddr, + wo->replace_default_route)) + pcb->default_route_set = 1; +#endif /* UNUSED */ + +#if 0 /* UNUSED - PROXY ARP */ + /* Make a proxy ARP entry if requested. */ + if (ho->hisaddr != 0 && wo->proxy_arp) + if (sifproxyarp(pcb, ho->hisaddr)) + pcb->proxy_arp_set = 1; +#endif /* UNUSED - PROXY ARP */ + + wo->ouraddr = go->ouraddr; + + ppp_notice("local IP address %I", go->ouraddr); + if (ho->hisaddr != 0) + ppp_notice("remote IP address %I", ho->hisaddr); +#if LWIP_DNS + if (go->dnsaddr[0]) + ppp_notice("primary DNS address %I", go->dnsaddr[0]); + if (go->dnsaddr[1]) + ppp_notice("secondary DNS address %I", go->dnsaddr[1]); +#endif /* LWIP_DNS */ + } + +#if PPP_STATS_SUPPORT + reset_link_stats(f->unit); +#endif /* PPP_STATS_SUPPORT */ + + np_up(pcb, PPP_IP); + pcb->ipcp_is_up = 1; + +#if PPP_NOTIFY + notify(ip_up_notifier, 0); +#endif /* PPP_NOTIFY */ +#if 0 /* UNUSED */ + if (ip_up_hook) + ip_up_hook(); +#endif /* UNUSED */ +} + + +/* + * ipcp_down - IPCP has gone DOWN. + * + * Take the IP network interface down, clear its addresses + * and delete routes through it. + */ +static void ipcp_down(fsm *f) { + ppp_pcb *pcb = f->pcb; + ipcp_options *ho = &pcb->ipcp_hisoptions; + ipcp_options *go = &pcb->ipcp_gotoptions; + + IPCPDEBUG(("ipcp: down")); +#if PPP_STATS_SUPPORT + /* XXX a bit IPv4-centric here, we only need to get the stats + * before the interface is marked down. */ + /* XXX more correct: we must get the stats before running the notifiers, + * at least for the radius plugin */ + update_link_stats(f->unit); +#endif /* PPP_STATS_SUPPORT */ +#if PPP_NOTIFY + notify(ip_down_notifier, 0); +#endif /* PPP_NOTIFY */ +#if 0 /* UNUSED */ + if (ip_down_hook) + ip_down_hook(); +#endif /* UNUSED */ + if (pcb->ipcp_is_up) { + pcb->ipcp_is_up = 0; + np_down(pcb, PPP_IP); + } +#if VJ_SUPPORT + sifvjcomp(pcb, 0, 0, 0); +#endif /* VJ_SUPPORT */ + +#if PPP_STATS_SUPPORT + print_link_stats(); /* _after_ running the notifiers and ip_down_hook(), + * because print_link_stats() sets link_stats_valid + * to 0 (zero) */ +#endif /* PPP_STATS_SUPPORT */ + +#if DEMAND_SUPPORT + /* + * If we are doing dial-on-demand, set the interface + * to queue up outgoing packets (for now). + */ + if (demand) { + sifnpmode(pcb, PPP_IP, NPMODE_QUEUE); + } else +#endif /* DEMAND_SUPPORT */ + { +#if DEMAND_SUPPORT + sifnpmode(pcb, PPP_IP, NPMODE_DROP); +#endif /* DEMAND_SUPPORT */ + sifdown(pcb); + ipcp_clear_addrs(pcb, go->ouraddr, + ho->hisaddr, 0); +#if LWIP_DNS + cdns(pcb, go->dnsaddr[0], go->dnsaddr[1]); +#endif /* LWIP_DNS */ + } +} + + +/* + * ipcp_clear_addrs() - clear the interface addresses, routes, + * proxy arp entries, etc. + */ +static void ipcp_clear_addrs(ppp_pcb *pcb, u32_t ouraddr, u32_t hisaddr, u8_t replacedefaultroute) { + LWIP_UNUSED_ARG(replacedefaultroute); + +#if 0 /* UNUSED - PROXY ARP */ + if (pcb->proxy_arp_set) { + cifproxyarp(pcb, hisaddr); + pcb->proxy_arp_set = 0; + } +#endif /* UNUSED - PROXY ARP */ +#if 0 /* UNUSED */ + /* If replacedefaultroute, sifdefaultroute will be called soon + * with replacedefaultroute set and that will overwrite the current + * default route. This is the case only when doing demand, otherwise + * during demand, this cifdefaultroute would restore the old default + * route which is not what we want in this case. In the non-demand + * case, we'll delete the default route and restore the old if there + * is one saved by an sifdefaultroute with replacedefaultroute. + */ + if (!replacedefaultroute && pcb->default_route_set) { + cifdefaultroute(pcb, ouraddr, hisaddr); + pcb->default_route_set = 0; + } +#endif /* UNUSED */ + cifaddr(pcb, ouraddr, hisaddr); +} + + +/* + * ipcp_finished - possibly shut down the lower layers. + */ +static void ipcp_finished(fsm *f) { + ppp_pcb *pcb = f->pcb; + if (pcb->ipcp_is_open) { + pcb->ipcp_is_open = 0; + np_finished(pcb, PPP_IP); + } +} + + +#if 0 /* UNUSED */ +/* + * create_resolv - create the replacement resolv.conf file + */ +static void +create_resolv(peerdns1, peerdns2) + u32_t peerdns1, peerdns2; +{ + +} +#endif /* UNUSED */ + +#if PRINTPKT_SUPPORT +/* + * ipcp_printpkt - print the contents of an IPCP packet. + */ +static const char* const ipcp_codenames[] = { + "ConfReq", "ConfAck", "ConfNak", "ConfRej", + "TermReq", "TermAck", "CodeRej" +}; + +static int ipcp_printpkt(const u_char *p, int plen, + void (*printer) (void *, const char *, ...), void *arg) { + int code, id, len, olen; + const u_char *pstart, *optend; +#if VJ_SUPPORT + u_short cishort; +#endif /* VJ_SUPPORT */ + u32_t cilong; + + if (plen < HEADERLEN) + return 0; + pstart = p; + GETCHAR(code, p); + GETCHAR(id, p); + GETSHORT(len, p); + if (len < HEADERLEN || len > plen) + return 0; + + if (code >= 1 && code <= (int)LWIP_ARRAYSIZE(ipcp_codenames)) + printer(arg, " %s", ipcp_codenames[code-1]); + else + printer(arg, " code=0x%x", code); + printer(arg, " id=0x%x", id); + len -= HEADERLEN; + switch (code) { + case CONFREQ: + case CONFACK: + case CONFNAK: + case CONFREJ: + /* print option list */ + while (len >= 2) { + GETCHAR(code, p); + GETCHAR(olen, p); + p -= 2; + if (olen < 2 || olen > len) { + break; + } + printer(arg, " <"); + len -= olen; + optend = p + olen; + switch (code) { + case CI_ADDRS: + if (olen == CILEN_ADDRS) { + p += 2; + GETLONG(cilong, p); + printer(arg, "addrs %I", lwip_htonl(cilong)); + GETLONG(cilong, p); + printer(arg, " %I", lwip_htonl(cilong)); + } + break; +#if VJ_SUPPORT + case CI_COMPRESSTYPE: + if (olen >= CILEN_COMPRESS) { + p += 2; + GETSHORT(cishort, p); + printer(arg, "compress "); + switch (cishort) { + case IPCP_VJ_COMP: + printer(arg, "VJ"); + break; + case IPCP_VJ_COMP_OLD: + printer(arg, "old-VJ"); + break; + default: + printer(arg, "0x%x", cishort); + } + } + break; +#endif /* VJ_SUPPORT */ + case CI_ADDR: + if (olen == CILEN_ADDR) { + p += 2; + GETLONG(cilong, p); + printer(arg, "addr %I", lwip_htonl(cilong)); + } + break; +#if LWIP_DNS + case CI_MS_DNS1: + case CI_MS_DNS2: + p += 2; + GETLONG(cilong, p); + printer(arg, "ms-dns%d %I", (code == CI_MS_DNS1? 1: 2), + htonl(cilong)); + break; +#endif /* LWIP_DNS */ +#if 0 /* UNUSED - WINS */ + case CI_MS_WINS1: + case CI_MS_WINS2: + p += 2; + GETLONG(cilong, p); + printer(arg, "ms-wins %I", lwip_htonl(cilong)); + break; +#endif /* UNUSED - WINS */ + default: + break; + } + while (p < optend) { + GETCHAR(code, p); + printer(arg, " %.2x", code); + } + printer(arg, ">"); + } + break; + + case TERMACK: + case TERMREQ: + if (len > 0 && *p >= ' ' && *p < 0x7f) { + printer(arg, " "); + ppp_print_string(p, len, printer, arg); + p += len; + len = 0; + } + break; + default: + break; + } + + /* print the rest of the bytes in the packet */ + for (; len > 0; --len) { + GETCHAR(code, p); + printer(arg, " %.2x", code); + } + + return p - pstart; +} +#endif /* PRINTPKT_SUPPORT */ + +#if DEMAND_SUPPORT +/* + * ip_active_pkt - see if this IP packet is worth bringing the link up for. + * We don't bring the link up for IP fragments or for TCP FIN packets + * with no data. + */ +#define IP_HDRLEN 20 /* bytes */ +#define IP_OFFMASK 0x1fff +#ifndef IPPROTO_TCP +#define IPPROTO_TCP 6 +#endif +#define TCP_HDRLEN 20 +#define TH_FIN 0x01 + +/* + * We use these macros because the IP header may be at an odd address, + * and some compilers might use word loads to get th_off or ip_hl. + */ + +#define net_short(x) (((x)[0] << 8) + (x)[1]) +#define get_iphl(x) (((unsigned char *)(x))[0] & 0xF) +#define get_ipoff(x) net_short((unsigned char *)(x) + 6) +#define get_ipproto(x) (((unsigned char *)(x))[9]) +#define get_tcpoff(x) (((unsigned char *)(x))[12] >> 4) +#define get_tcpflags(x) (((unsigned char *)(x))[13]) + +static int +ip_active_pkt(pkt, len) + u_char *pkt; + int len; +{ + u_char *tcp; + int hlen; + + len -= PPP_HDRLEN; + pkt += PPP_HDRLEN; + if (len < IP_HDRLEN) + return 0; + if ((get_ipoff(pkt) & IP_OFFMASK) != 0) + return 0; + if (get_ipproto(pkt) != IPPROTO_TCP) + return 1; + hlen = get_iphl(pkt) * 4; + if (len < hlen + TCP_HDRLEN) + return 0; + tcp = pkt + hlen; + if ((get_tcpflags(tcp) & TH_FIN) != 0 && len == hlen + get_tcpoff(tcp) * 4) + return 0; + return 1; +} +#endif /* DEMAND_SUPPORT */ + +#endif /* PPP_SUPPORT && PPP_IPV4_SUPPORT */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/ipv6cp.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/ipv6cp.c new file mode 100644 index 0000000000000000000000000000000000000000..11c18df743b790c89889ff9704c875d4003ca2f3 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/ipv6cp.c @@ -0,0 +1,1533 @@ +/* + * ipv6cp.c - PPP IPV6 Control Protocol. + * + * Copyright (c) 1999 Tommi Komulainen. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The name(s) of the authors of this software must not be used to + * endorse or promote products derived from this software without + * prior written permission. + * + * 4. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by Tommi Komulainen + * ". + * + * THE AUTHORS OF THIS SOFTWARE DISCLAIM ALL WARRANTIES WITH REGARD TO + * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY + * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ + +/* Original version, based on RFC2023 : + + Copyright (c) 1995, 1996, 1997 Francis.Dupont@inria.fr, INRIA Rocquencourt, + Alain.Durand@imag.fr, IMAG, + Jean-Luc.Richier@imag.fr, IMAG-LSR. + + Copyright (c) 1998, 1999 Francis.Dupont@inria.fr, GIE DYADE, + Alain.Durand@imag.fr, IMAG, + Jean-Luc.Richier@imag.fr, IMAG-LSR. + + Ce travail a été fait au sein du GIE DYADE (Groupement d'Intérêt + Économique ayant pour membres BULL S.A. et l'INRIA). + + Ce logiciel informatique est disponible aux conditions + usuelles dans la recherche, c'est-à-dire qu'il peut + être utilisé, copié, modifié, distribué à l'unique + condition que ce texte soit conservé afin que + l'origine de ce logiciel soit reconnue. + + Le nom de l'Institut National de Recherche en Informatique + et en Automatique (INRIA), de l'IMAG, ou d'une personne morale + ou physique ayant participé à l'élaboration de ce logiciel ne peut + être utilisé sans son accord préalable explicite. + + Ce logiciel est fourni tel quel sans aucune garantie, + support ou responsabilité d'aucune sorte. + Ce logiciel est dérivé de sources d'origine + "University of California at Berkeley" et + "Digital Equipment Corporation" couvertes par des copyrights. + + L'Institut d'Informatique et de Mathématiques Appliquées de Grenoble (IMAG) + est une fédération d'unités mixtes de recherche du CNRS, de l'Institut National + Polytechnique de Grenoble et de l'Université Joseph Fourier regroupant + sept laboratoires dont le laboratoire Logiciels, Systèmes, Réseaux (LSR). + + This work has been done in the context of GIE DYADE (joint R & D venture + between BULL S.A. and INRIA). + + This software is available with usual "research" terms + with the aim of retain credits of the software. + Permission to use, copy, modify and distribute this software for any + purpose and without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies, + and the name of INRIA, IMAG, or any contributor not be used in advertising + or publicity pertaining to this material without the prior explicit + permission. The software is provided "as is" without any + warranties, support or liabilities of any kind. + This software is derived from source code from + "University of California at Berkeley" and + "Digital Equipment Corporation" protected by copyrights. + + Grenoble's Institute of Computer Science and Applied Mathematics (IMAG) + is a federation of seven research units funded by the CNRS, National + Polytechnic Institute of Grenoble and University Joseph Fourier. + The research unit in Software, Systems, Networks (LSR) is member of IMAG. +*/ + +/* + * Derived from : + * + * + * ipcp.c - PPP IP Control Protocol. + * + * Copyright (c) 1984-2000 Carnegie Mellon University. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The name "Carnegie Mellon University" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For permission or any legal + * details, please contact + * Office of Technology Transfer + * Carnegie Mellon University + * 5000 Forbes Avenue + * Pittsburgh, PA 15213-3890 + * (412) 268-4387, fax: (412) 268-7395 + * tech-transfer@andrew.cmu.edu + * + * 4. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by Computing Services + * at Carnegie Mellon University (http://www.cmu.edu/computing/)." + * + * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO + * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE + * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * $Id: ipv6cp.c,v 1.21 2005/08/25 23:59:34 paulus Exp $ + */ + +/* + * @todo: + * + * Proxy Neighbour Discovery. + * + * Better defines for selecting the ordering of + * interface up / set address. + */ + +#include "netif/ppp/ppp_opts.h" +#if PPP_SUPPORT && PPP_IPV6_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +#if 0 /* UNUSED */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#endif /* UNUSED */ + +#include "netif/ppp/ppp_impl.h" +#include "netif/ppp/fsm.h" +#include "netif/ppp/ipcp.h" +#include "netif/ppp/ipv6cp.h" +#include "netif/ppp/magic.h" + +/* global vars */ +#if 0 /* UNUSED */ +int no_ifaceid_neg = 0; +#endif /* UNUSED */ + +/* + * Callbacks for fsm code. (CI = Configuration Information) + */ +static void ipv6cp_resetci(fsm *f); /* Reset our CI */ +static int ipv6cp_cilen(fsm *f); /* Return length of our CI */ +static void ipv6cp_addci(fsm *f, u_char *ucp, int *lenp); /* Add our CI */ +static int ipv6cp_ackci(fsm *f, u_char *p, int len); /* Peer ack'd our CI */ +static int ipv6cp_nakci(fsm *f, u_char *p, int len, int treat_as_reject); /* Peer nak'd our CI */ +static int ipv6cp_rejci(fsm *f, u_char *p, int len); /* Peer rej'd our CI */ +static int ipv6cp_reqci(fsm *f, u_char *inp, int *len, int reject_if_disagree); /* Rcv CI */ +static void ipv6cp_up(fsm *f); /* We're UP */ +static void ipv6cp_down(fsm *f); /* We're DOWN */ +static void ipv6cp_finished(fsm *f); /* Don't need lower layer */ + +static const fsm_callbacks ipv6cp_callbacks = { /* IPV6CP callback routines */ + ipv6cp_resetci, /* Reset our Configuration Information */ + ipv6cp_cilen, /* Length of our Configuration Information */ + ipv6cp_addci, /* Add our Configuration Information */ + ipv6cp_ackci, /* ACK our Configuration Information */ + ipv6cp_nakci, /* NAK our Configuration Information */ + ipv6cp_rejci, /* Reject our Configuration Information */ + ipv6cp_reqci, /* Request peer's Configuration Information */ + ipv6cp_up, /* Called when fsm reaches OPENED state */ + ipv6cp_down, /* Called when fsm leaves OPENED state */ + NULL, /* Called when we want the lower layer up */ + ipv6cp_finished, /* Called when we want the lower layer down */ + NULL, /* Called when Protocol-Reject received */ + NULL, /* Retransmission is necessary */ + NULL, /* Called to handle protocol-specific codes */ + "IPV6CP" /* String name of protocol */ +}; + +#if PPP_OPTIONS +/* + * Command-line options. + */ +static int setifaceid(char **arg)); +static void printifaceid(option_t *, + void (*)(void *, char *, ...), void *)); + +static option_t ipv6cp_option_list[] = { + { "ipv6", o_special, (void *)setifaceid, + "Set interface identifiers for IPV6", + OPT_A2PRINTER, (void *)printifaceid }, + + { "+ipv6", o_bool, &ipv6cp_protent.enabled_flag, + "Enable IPv6 and IPv6CP", OPT_PRIO | 1 }, + { "noipv6", o_bool, &ipv6cp_protent.enabled_flag, + "Disable IPv6 and IPv6CP", OPT_PRIOSUB }, + { "-ipv6", o_bool, &ipv6cp_protent.enabled_flag, + "Disable IPv6 and IPv6CP", OPT_PRIOSUB | OPT_ALIAS }, + + { "ipv6cp-accept-local", o_bool, &ipv6cp_allowoptions[0].accept_local, + "Accept peer's interface identifier for us", 1 }, + + { "ipv6cp-use-ipaddr", o_bool, &ipv6cp_allowoptions[0].use_ip, + "Use (default) IPv4 address as interface identifier", 1 }, + + { "ipv6cp-use-persistent", o_bool, &ipv6cp_wantoptions[0].use_persistent, + "Use uniquely-available persistent value for link local address", 1 }, + + { "ipv6cp-restart", o_int, &ipv6cp_fsm[0].timeouttime, + "Set timeout for IPv6CP", OPT_PRIO }, + { "ipv6cp-max-terminate", o_int, &ipv6cp_fsm[0].maxtermtransmits, + "Set max #xmits for term-reqs", OPT_PRIO }, + { "ipv6cp-max-configure", o_int, &ipv6cp_fsm[0].maxconfreqtransmits, + "Set max #xmits for conf-reqs", OPT_PRIO }, + { "ipv6cp-max-failure", o_int, &ipv6cp_fsm[0].maxnakloops, + "Set max #conf-naks for IPv6CP", OPT_PRIO }, + + { NULL } +}; +#endif /* PPP_OPTIONS */ + +/* + * Protocol entry points from main code. + */ +static void ipv6cp_init(ppp_pcb *pcb); +static void ipv6cp_open(ppp_pcb *pcb); +static void ipv6cp_close(ppp_pcb *pcb, const char *reason); +static void ipv6cp_lowerup(ppp_pcb *pcb); +static void ipv6cp_lowerdown(ppp_pcb *pcb); +static void ipv6cp_input(ppp_pcb *pcb, u_char *p, int len); +static void ipv6cp_protrej(ppp_pcb *pcb); +#if PPP_OPTIONS +static void ipv6_check_options(void); +#endif /* PPP_OPTIONS */ +#if DEMAND_SUPPORT +static int ipv6_demand_conf(int u); +#endif /* DEMAND_SUPPORT */ +#if PRINTPKT_SUPPORT +static int ipv6cp_printpkt(const u_char *p, int plen, + void (*printer)(void *, const char *, ...), void *arg); +#endif /* PRINTPKT_SUPPORT */ +#if DEMAND_SUPPORT +static int ipv6_active_pkt(u_char *pkt, int len); +#endif /* DEMAND_SUPPORT */ + +const struct protent ipv6cp_protent = { + PPP_IPV6CP, + ipv6cp_init, + ipv6cp_input, + ipv6cp_protrej, + ipv6cp_lowerup, + ipv6cp_lowerdown, + ipv6cp_open, + ipv6cp_close, +#if PRINTPKT_SUPPORT + ipv6cp_printpkt, +#endif /* PRINTPKT_SUPPORT */ +#if PPP_DATAINPUT + NULL, +#endif /* PPP_DATAINPUT */ +#if PRINTPKT_SUPPORT + "IPV6CP", + "IPV6", +#endif /* PRINTPKT_SUPPORT */ +#if PPP_OPTIONS + ipv6cp_option_list, + ipv6_check_options, +#endif /* PPP_OPTIONS */ +#if DEMAND_SUPPORT + ipv6_demand_conf, + ipv6_active_pkt +#endif /* DEMAND_SUPPORT */ +}; + +static void ipv6cp_clear_addrs(ppp_pcb *pcb, eui64_t ourid, eui64_t hisid); +#if 0 /* UNUSED */ +static void ipv6cp_script(char *)); +static void ipv6cp_script_done(void *)); +#endif /* UNUSED */ + +/* + * Lengths of configuration options. + */ +#define CILEN_VOID 2 +#define CILEN_COMPRESS 4 /* length for RFC2023 compress opt. */ +#define CILEN_IFACEID 10 /* RFC2472, interface identifier */ + +#define CODENAME(x) ((x) == CONFACK ? "ACK" : \ + (x) == CONFNAK ? "NAK" : "REJ") + +#if 0 /* UNUSED */ +/* + * This state variable is used to ensure that we don't + * run an ipcp-up/down script while one is already running. + */ +static enum script_state { + s_down, + s_up, +} ipv6cp_script_state; +static pid_t ipv6cp_script_pid; +#endif /* UNUSED */ + +static char *llv6_ntoa(eui64_t ifaceid); + +#if PPP_OPTIONS +/* + * setifaceid - set the interface identifiers manually + */ +static int +setifaceid(argv) + char **argv; +{ + char *comma, *arg, c; + ipv6cp_options *wo = &ipv6cp_wantoptions[0]; + struct in6_addr addr; + static int prio_local, prio_remote; + +#define VALIDID(a) ( (((a).s6_addr32[0] == 0) && ((a).s6_addr32[1] == 0)) && \ + (((a).s6_addr32[2] != 0) || ((a).s6_addr32[3] != 0)) ) + + arg = *argv; + if ((comma = strchr(arg, ',')) == NULL) + comma = arg + strlen(arg); + + /* + * If comma first character, then no local identifier + */ + if (comma != arg) { + c = *comma; + *comma = '\0'; + + if (inet_pton(AF_INET6, arg, &addr) == 0 || !VALIDID(addr)) { + option_error("Illegal interface identifier (local): %s", arg); + return 0; + } + + if (option_priority >= prio_local) { + eui64_copy(addr.s6_addr32[2], wo->ourid); + wo->opt_local = 1; + prio_local = option_priority; + } + *comma = c; + } + + /* + * If comma last character, the no remote identifier + */ + if (*comma != 0 && *++comma != '\0') { + if (inet_pton(AF_INET6, comma, &addr) == 0 || !VALIDID(addr)) { + option_error("Illegal interface identifier (remote): %s", comma); + return 0; + } + if (option_priority >= prio_remote) { + eui64_copy(addr.s6_addr32[2], wo->hisid); + wo->opt_remote = 1; + prio_remote = option_priority; + } + } + + if (override_value("+ipv6", option_priority, option_source)) + ipv6cp_protent.enabled_flag = 1; + return 1; +} + +static void +printifaceid(opt, printer, arg) + option_t *opt; + void (*printer)(void *, char *, ...)); + void *arg; +{ + ipv6cp_options *wo = &ipv6cp_wantoptions[0]; + + if (wo->opt_local) + printer(arg, "%s", llv6_ntoa(wo->ourid)); + printer(arg, ","); + if (wo->opt_remote) + printer(arg, "%s", llv6_ntoa(wo->hisid)); +} +#endif /* PPP_OPTIONS */ + +/* + * Make a string representation of a network address. + */ +static char * +llv6_ntoa(eui64_t ifaceid) +{ + static char b[26]; + + sprintf(b, "fe80::%02x%02x:%02x%02x:%02x%02x:%02x%02x", + ifaceid.e8[0], ifaceid.e8[1], ifaceid.e8[2], ifaceid.e8[3], + ifaceid.e8[4], ifaceid.e8[5], ifaceid.e8[6], ifaceid.e8[7]); + + return b; +} + + +/* + * ipv6cp_init - Initialize IPV6CP. + */ +static void ipv6cp_init(ppp_pcb *pcb) { + fsm *f = &pcb->ipv6cp_fsm; + ipv6cp_options *wo = &pcb->ipv6cp_wantoptions; + ipv6cp_options *ao = &pcb->ipv6cp_allowoptions; + + f->pcb = pcb; + f->protocol = PPP_IPV6CP; + f->callbacks = &ipv6cp_callbacks; + fsm_init(f); + +#if 0 /* Not necessary, everything is cleared in ppp_new() */ + memset(wo, 0, sizeof(*wo)); + memset(ao, 0, sizeof(*ao)); +#endif /* 0 */ + + wo->accept_local = 1; + wo->neg_ifaceid = 1; + ao->neg_ifaceid = 1; + +#ifdef IPV6CP_COMP + wo->neg_vj = 1; + ao->neg_vj = 1; + wo->vj_protocol = IPV6CP_COMP; +#endif + +} + + +/* + * ipv6cp_open - IPV6CP is allowed to come up. + */ +static void ipv6cp_open(ppp_pcb *pcb) { + fsm_open(&pcb->ipv6cp_fsm); +} + + +/* + * ipv6cp_close - Take IPV6CP down. + */ +static void ipv6cp_close(ppp_pcb *pcb, const char *reason) { + fsm_close(&pcb->ipv6cp_fsm, reason); +} + + +/* + * ipv6cp_lowerup - The lower layer is up. + */ +static void ipv6cp_lowerup(ppp_pcb *pcb) { + fsm_lowerup(&pcb->ipv6cp_fsm); +} + + +/* + * ipv6cp_lowerdown - The lower layer is down. + */ +static void ipv6cp_lowerdown(ppp_pcb *pcb) { + fsm_lowerdown(&pcb->ipv6cp_fsm); +} + + +/* + * ipv6cp_input - Input IPV6CP packet. + */ +static void ipv6cp_input(ppp_pcb *pcb, u_char *p, int len) { + fsm_input(&pcb->ipv6cp_fsm, p, len); +} + + +/* + * ipv6cp_protrej - A Protocol-Reject was received for IPV6CP. + * + * Pretend the lower layer went down, so we shut up. + */ +static void ipv6cp_protrej(ppp_pcb *pcb) { + fsm_lowerdown(&pcb->ipv6cp_fsm); +} + + +/* + * ipv6cp_resetci - Reset our CI. + */ +static void ipv6cp_resetci(fsm *f) { + ppp_pcb *pcb = f->pcb; + ipv6cp_options *wo = &pcb->ipv6cp_wantoptions; + ipv6cp_options *go = &pcb->ipv6cp_gotoptions; + ipv6cp_options *ao = &pcb->ipv6cp_allowoptions; + + wo->req_ifaceid = wo->neg_ifaceid && ao->neg_ifaceid; + + if (!wo->opt_local) { + eui64_magic_nz(wo->ourid); + } + + *go = *wo; + eui64_zero(go->hisid); /* last proposed interface identifier */ +} + + +/* + * ipv6cp_cilen - Return length of our CI. + */ +static int ipv6cp_cilen(fsm *f) { + ppp_pcb *pcb = f->pcb; + ipv6cp_options *go = &pcb->ipv6cp_gotoptions; + +#ifdef IPV6CP_COMP +#define LENCIVJ(neg) (neg ? CILEN_COMPRESS : 0) +#endif /* IPV6CP_COMP */ +#define LENCIIFACEID(neg) (neg ? CILEN_IFACEID : 0) + + return (LENCIIFACEID(go->neg_ifaceid) + +#ifdef IPV6CP_COMP + LENCIVJ(go->neg_vj) + +#endif /* IPV6CP_COMP */ + 0); +} + + +/* + * ipv6cp_addci - Add our desired CIs to a packet. + */ +static void ipv6cp_addci(fsm *f, u_char *ucp, int *lenp) { + ppp_pcb *pcb = f->pcb; + ipv6cp_options *go = &pcb->ipv6cp_gotoptions; + int len = *lenp; + +#ifdef IPV6CP_COMP +#define ADDCIVJ(opt, neg, val) \ + if (neg) { \ + int vjlen = CILEN_COMPRESS; \ + if (len >= vjlen) { \ + PUTCHAR(opt, ucp); \ + PUTCHAR(vjlen, ucp); \ + PUTSHORT(val, ucp); \ + len -= vjlen; \ + } else \ + neg = 0; \ + } +#endif /* IPV6CP_COMP */ + +#define ADDCIIFACEID(opt, neg, val1) \ + if (neg) { \ + int idlen = CILEN_IFACEID; \ + if (len >= idlen) { \ + PUTCHAR(opt, ucp); \ + PUTCHAR(idlen, ucp); \ + eui64_put(val1, ucp); \ + len -= idlen; \ + } else \ + neg = 0; \ + } + + ADDCIIFACEID(CI_IFACEID, go->neg_ifaceid, go->ourid); + +#ifdef IPV6CP_COMP + ADDCIVJ(CI_COMPRESSTYPE, go->neg_vj, go->vj_protocol); +#endif /* IPV6CP_COMP */ + + *lenp -= len; +} + + +/* + * ipv6cp_ackci - Ack our CIs. + * + * Returns: + * 0 - Ack was bad. + * 1 - Ack was good. + */ +static int ipv6cp_ackci(fsm *f, u_char *p, int len) { + ppp_pcb *pcb = f->pcb; + ipv6cp_options *go = &pcb->ipv6cp_gotoptions; + u_short cilen, citype; +#ifdef IPV6CP_COMP + u_short cishort; +#endif /* IPV6CP_COMP */ + eui64_t ifaceid; + + /* + * CIs must be in exactly the same order that we sent... + * Check packet length and CI length at each step. + * If we find any deviations, then this packet is bad. + */ + +#ifdef IPV6CP_COMP +#define ACKCIVJ(opt, neg, val) \ + if (neg) { \ + int vjlen = CILEN_COMPRESS; \ + if ((len -= vjlen) < 0) \ + goto bad; \ + GETCHAR(citype, p); \ + GETCHAR(cilen, p); \ + if (cilen != vjlen || \ + citype != opt) \ + goto bad; \ + GETSHORT(cishort, p); \ + if (cishort != val) \ + goto bad; \ + } +#endif /* IPV6CP_COMP */ + +#define ACKCIIFACEID(opt, neg, val1) \ + if (neg) { \ + int idlen = CILEN_IFACEID; \ + if ((len -= idlen) < 0) \ + goto bad; \ + GETCHAR(citype, p); \ + GETCHAR(cilen, p); \ + if (cilen != idlen || \ + citype != opt) \ + goto bad; \ + eui64_get(ifaceid, p); \ + if (! eui64_equals(val1, ifaceid)) \ + goto bad; \ + } + + ACKCIIFACEID(CI_IFACEID, go->neg_ifaceid, go->ourid); + +#ifdef IPV6CP_COMP + ACKCIVJ(CI_COMPRESSTYPE, go->neg_vj, go->vj_protocol); +#endif /* IPV6CP_COMP */ + + /* + * If there are any remaining CIs, then this packet is bad. + */ + if (len != 0) + goto bad; + return (1); + +bad: + IPV6CPDEBUG(("ipv6cp_ackci: received bad Ack!")); + return (0); +} + +/* + * ipv6cp_nakci - Peer has sent a NAK for some of our CIs. + * This should not modify any state if the Nak is bad + * or if IPV6CP is in the OPENED state. + * + * Returns: + * 0 - Nak was bad. + * 1 - Nak was good. + */ +static int ipv6cp_nakci(fsm *f, u_char *p, int len, int treat_as_reject) { + ppp_pcb *pcb = f->pcb; + ipv6cp_options *go = &pcb->ipv6cp_gotoptions; + u_char citype, cilen, *next; +#ifdef IPV6CP_COMP + u_short cishort; +#endif /* IPV6CP_COMP */ + eui64_t ifaceid; + ipv6cp_options no; /* options we've seen Naks for */ + ipv6cp_options try_; /* options to request next time */ + + BZERO(&no, sizeof(no)); + try_ = *go; + + /* + * Any Nak'd CIs must be in exactly the same order that we sent. + * Check packet length and CI length at each step. + * If we find any deviations, then this packet is bad. + */ +#define NAKCIIFACEID(opt, neg, code) \ + if (go->neg && \ + len >= (cilen = CILEN_IFACEID) && \ + p[1] == cilen && \ + p[0] == opt) { \ + len -= cilen; \ + INCPTR(2, p); \ + eui64_get(ifaceid, p); \ + no.neg = 1; \ + code \ + } + +#ifdef IPV6CP_COMP +#define NAKCIVJ(opt, neg, code) \ + if (go->neg && \ + ((cilen = p[1]) == CILEN_COMPRESS) && \ + len >= cilen && \ + p[0] == opt) { \ + len -= cilen; \ + INCPTR(2, p); \ + GETSHORT(cishort, p); \ + no.neg = 1; \ + code \ + } +#endif /* IPV6CP_COMP */ + + /* + * Accept the peer's idea of {our,his} interface identifier, if different + * from our idea, only if the accept_{local,remote} flag is set. + */ + NAKCIIFACEID(CI_IFACEID, neg_ifaceid, + if (treat_as_reject) { + try_.neg_ifaceid = 0; + } else if (go->accept_local) { + while (eui64_iszero(ifaceid) || + eui64_equals(ifaceid, go->hisid)) /* bad luck */ + eui64_magic(ifaceid); + try_.ourid = ifaceid; + IPV6CPDEBUG(("local LL address %s", llv6_ntoa(ifaceid))); + } + ); + +#ifdef IPV6CP_COMP + NAKCIVJ(CI_COMPRESSTYPE, neg_vj, + { + if (cishort == IPV6CP_COMP && !treat_as_reject) { + try_.vj_protocol = cishort; + } else { + try_.neg_vj = 0; + } + } + ); +#endif /* IPV6CP_COMP */ + + /* + * There may be remaining CIs, if the peer is requesting negotiation + * on an option that we didn't include in our request packet. + * If they want to negotiate about interface identifier, we comply. + * If they want us to ask for compression, we refuse. + */ + while (len >= CILEN_VOID) { + GETCHAR(citype, p); + GETCHAR(cilen, p); + if ( cilen < CILEN_VOID || (len -= cilen) < 0 ) + goto bad; + next = p + cilen - 2; + + switch (citype) { +#ifdef IPV6CP_COMP + case CI_COMPRESSTYPE: + if (go->neg_vj || no.neg_vj || + (cilen != CILEN_COMPRESS)) + goto bad; + no.neg_vj = 1; + break; +#endif /* IPV6CP_COMP */ + case CI_IFACEID: + if (go->neg_ifaceid || no.neg_ifaceid || cilen != CILEN_IFACEID) + goto bad; + try_.neg_ifaceid = 1; + eui64_get(ifaceid, p); + if (go->accept_local) { + while (eui64_iszero(ifaceid) || + eui64_equals(ifaceid, go->hisid)) /* bad luck */ + eui64_magic(ifaceid); + try_.ourid = ifaceid; + } + no.neg_ifaceid = 1; + break; + default: + break; + } + p = next; + } + + /* If there is still anything left, this packet is bad. */ + if (len != 0) + goto bad; + + /* + * OK, the Nak is good. Now we can update state. + */ + if (f->state != PPP_FSM_OPENED) + *go = try_; + + return 1; + +bad: + IPV6CPDEBUG(("ipv6cp_nakci: received bad Nak!")); + return 0; +} + + +/* + * ipv6cp_rejci - Reject some of our CIs. + */ +static int ipv6cp_rejci(fsm *f, u_char *p, int len) { + ppp_pcb *pcb = f->pcb; + ipv6cp_options *go = &pcb->ipv6cp_gotoptions; + u_char cilen; +#ifdef IPV6CP_COMP + u_short cishort; +#endif /* IPV6CP_COMP */ + eui64_t ifaceid; + ipv6cp_options try_; /* options to request next time */ + + try_ = *go; + /* + * Any Rejected CIs must be in exactly the same order that we sent. + * Check packet length and CI length at each step. + * If we find any deviations, then this packet is bad. + */ +#define REJCIIFACEID(opt, neg, val1) \ + if (go->neg && \ + len >= (cilen = CILEN_IFACEID) && \ + p[1] == cilen && \ + p[0] == opt) { \ + len -= cilen; \ + INCPTR(2, p); \ + eui64_get(ifaceid, p); \ + /* Check rejected value. */ \ + if (! eui64_equals(ifaceid, val1)) \ + goto bad; \ + try_.neg = 0; \ + } + +#ifdef IPV6CP_COMP +#define REJCIVJ(opt, neg, val) \ + if (go->neg && \ + p[1] == CILEN_COMPRESS && \ + len >= p[1] && \ + p[0] == opt) { \ + len -= p[1]; \ + INCPTR(2, p); \ + GETSHORT(cishort, p); \ + /* Check rejected value. */ \ + if (cishort != val) \ + goto bad; \ + try_.neg = 0; \ + } +#endif /* IPV6CP_COMP */ + + REJCIIFACEID(CI_IFACEID, neg_ifaceid, go->ourid); + +#ifdef IPV6CP_COMP + REJCIVJ(CI_COMPRESSTYPE, neg_vj, go->vj_protocol); +#endif /* IPV6CP_COMP */ + + /* + * If there are any remaining CIs, then this packet is bad. + */ + if (len != 0) + goto bad; + /* + * Now we can update state. + */ + if (f->state != PPP_FSM_OPENED) + *go = try_; + return 1; + +bad: + IPV6CPDEBUG(("ipv6cp_rejci: received bad Reject!")); + return 0; +} + + +/* + * ipv6cp_reqci - Check the peer's requested CIs and send appropriate response. + * + * Returns: CONFACK, CONFNAK or CONFREJ and input packet modified + * appropriately. If reject_if_disagree is non-zero, doesn't return + * CONFNAK; returns CONFREJ if it can't return CONFACK. + * + * inp = Requested CIs + * len = Length of requested CIs + * + */ +static int ipv6cp_reqci(fsm *f, u_char *inp, int *len, int reject_if_disagree) { + ppp_pcb *pcb = f->pcb; + ipv6cp_options *wo = &pcb->ipv6cp_wantoptions; + ipv6cp_options *ho = &pcb->ipv6cp_hisoptions; + ipv6cp_options *ao = &pcb->ipv6cp_allowoptions; + ipv6cp_options *go = &pcb->ipv6cp_gotoptions; + u_char *cip, *next; /* Pointer to current and next CIs */ + u_short cilen, citype; /* Parsed len, type */ +#ifdef IPV6CP_COMP + u_short cishort; /* Parsed short value */ +#endif /* IPV6CP_COMP */ + eui64_t ifaceid; /* Parsed interface identifier */ + int rc = CONFACK; /* Final packet return code */ + int orc; /* Individual option return code */ + u_char *p; /* Pointer to next char to parse */ + u_char *ucp = inp; /* Pointer to current output char */ + int l = *len; /* Length left */ + + /* + * Reset all his options. + */ + BZERO(ho, sizeof(*ho)); + + /* + * Process all his options. + */ + next = inp; + while (l) { + orc = CONFACK; /* Assume success */ + cip = p = next; /* Remember begining of CI */ + if (l < 2 || /* Not enough data for CI header or */ + p[1] < 2 || /* CI length too small or */ + p[1] > l) { /* CI length too big? */ + IPV6CPDEBUG(("ipv6cp_reqci: bad CI length!")); + orc = CONFREJ; /* Reject bad CI */ + cilen = l; /* Reject till end of packet */ + l = 0; /* Don't loop again */ + goto endswitch; + } + GETCHAR(citype, p); /* Parse CI type */ + GETCHAR(cilen, p); /* Parse CI length */ + l -= cilen; /* Adjust remaining length */ + next += cilen; /* Step to next CI */ + + switch (citype) { /* Check CI type */ + case CI_IFACEID: + IPV6CPDEBUG(("ipv6cp: received interface identifier ")); + + if (!ao->neg_ifaceid || + cilen != CILEN_IFACEID) { /* Check CI length */ + orc = CONFREJ; /* Reject CI */ + break; + } + + /* + * If he has no interface identifier, or if we both have same + * identifier then NAK it with new idea. + * In particular, if we don't know his identifier, but he does, + * then accept it. + */ + eui64_get(ifaceid, p); + IPV6CPDEBUG(("(%s)", llv6_ntoa(ifaceid))); + if (eui64_iszero(ifaceid) && eui64_iszero(go->ourid)) { + orc = CONFREJ; /* Reject CI */ + break; + } + if (!eui64_iszero(wo->hisid) && + !eui64_equals(ifaceid, wo->hisid) && + eui64_iszero(go->hisid)) { + + orc = CONFNAK; + ifaceid = wo->hisid; + go->hisid = ifaceid; + DECPTR(sizeof(ifaceid), p); + eui64_put(ifaceid, p); + } else + if (eui64_iszero(ifaceid) || eui64_equals(ifaceid, go->ourid)) { + orc = CONFNAK; + if (eui64_iszero(go->hisid)) /* first time, try option */ + ifaceid = wo->hisid; + while (eui64_iszero(ifaceid) || + eui64_equals(ifaceid, go->ourid)) /* bad luck */ + eui64_magic(ifaceid); + go->hisid = ifaceid; + DECPTR(sizeof(ifaceid), p); + eui64_put(ifaceid, p); + } + + ho->neg_ifaceid = 1; + ho->hisid = ifaceid; + break; + +#ifdef IPV6CP_COMP + case CI_COMPRESSTYPE: + IPV6CPDEBUG(("ipv6cp: received COMPRESSTYPE ")); + if (!ao->neg_vj || + (cilen != CILEN_COMPRESS)) { + orc = CONFREJ; + break; + } + GETSHORT(cishort, p); + IPV6CPDEBUG(("(%d)", cishort)); + + if (!(cishort == IPV6CP_COMP)) { + orc = CONFREJ; + break; + } + + ho->neg_vj = 1; + ho->vj_protocol = cishort; + break; +#endif /* IPV6CP_COMP */ + + default: + orc = CONFREJ; + break; + } + +endswitch: + IPV6CPDEBUG((" (%s)\n", CODENAME(orc))); + + if (orc == CONFACK && /* Good CI */ + rc != CONFACK) /* but prior CI wasnt? */ + continue; /* Don't send this one */ + + if (orc == CONFNAK) { /* Nak this CI? */ + if (reject_if_disagree) /* Getting fed up with sending NAKs? */ + orc = CONFREJ; /* Get tough if so */ + else { + if (rc == CONFREJ) /* Rejecting prior CI? */ + continue; /* Don't send this one */ + if (rc == CONFACK) { /* Ack'd all prior CIs? */ + rc = CONFNAK; /* Not anymore... */ + ucp = inp; /* Backup */ + } + } + } + + if (orc == CONFREJ && /* Reject this CI */ + rc != CONFREJ) { /* but no prior ones? */ + rc = CONFREJ; + ucp = inp; /* Backup */ + } + + /* Need to move CI? */ + if (ucp != cip) + MEMCPY(ucp, cip, cilen); /* Move it */ + + /* Update output pointer */ + INCPTR(cilen, ucp); + } + + /* + * If we aren't rejecting this packet, and we want to negotiate + * their identifier and they didn't send their identifier, then we + * send a NAK with a CI_IFACEID option appended. We assume the + * input buffer is long enough that we can append the extra + * option safely. + */ + if (rc != CONFREJ && !ho->neg_ifaceid && + wo->req_ifaceid && !reject_if_disagree) { + if (rc == CONFACK) { + rc = CONFNAK; + ucp = inp; /* reset pointer */ + wo->req_ifaceid = 0; /* don't ask again */ + } + PUTCHAR(CI_IFACEID, ucp); + PUTCHAR(CILEN_IFACEID, ucp); + eui64_put(wo->hisid, ucp); + } + + *len = ucp - inp; /* Compute output length */ + IPV6CPDEBUG(("ipv6cp: returning Configure-%s", CODENAME(rc))); + return (rc); /* Return final code */ +} + +#if PPP_OPTIONS +/* + * ipv6_check_options - check that any IP-related options are OK, + * and assign appropriate defaults. + */ +static void ipv6_check_options() { + ipv6cp_options *wo = &ipv6cp_wantoptions[0]; + + if (!ipv6cp_protent.enabled_flag) + return; + + /* + * Persistent link-local id is only used when user has not explicitly + * configure/hard-code the id + */ + if ((wo->use_persistent) && (!wo->opt_local) && (!wo->opt_remote)) { + + /* + * On systems where there are no Ethernet interfaces used, there + * may be other ways to obtain a persistent id. Right now, it + * will fall back to using magic [see eui64_magic] below when + * an EUI-48 from MAC address can't be obtained. Other possibilities + * include obtaining EEPROM serial numbers, or some other unique + * yet persistent number. On Sparc platforms, this is possible, + * but too bad there's no standards yet for x86 machines. + */ + if (ether_to_eui64(&wo->ourid)) { + wo->opt_local = 1; + } + } + + if (!wo->opt_local) { /* init interface identifier */ + if (wo->use_ip && eui64_iszero(wo->ourid)) { + eui64_setlo32(wo->ourid, lwip_ntohl(ipcp_wantoptions[0].ouraddr)); + if (!eui64_iszero(wo->ourid)) + wo->opt_local = 1; + } + + while (eui64_iszero(wo->ourid)) + eui64_magic(wo->ourid); + } + + if (!wo->opt_remote) { + if (wo->use_ip && eui64_iszero(wo->hisid)) { + eui64_setlo32(wo->hisid, lwip_ntohl(ipcp_wantoptions[0].hisaddr)); + if (!eui64_iszero(wo->hisid)) + wo->opt_remote = 1; + } + } + + if (demand && (eui64_iszero(wo->ourid) || eui64_iszero(wo->hisid))) { + option_error("local/remote LL address required for demand-dialling\n"); + exit(1); + } +} +#endif /* PPP_OPTIONS */ + +#if DEMAND_SUPPORT +/* + * ipv6_demand_conf - configure the interface as though + * IPV6CP were up, for use with dial-on-demand. + */ +static int ipv6_demand_conf(int u) { + ipv6cp_options *wo = &ipv6cp_wantoptions[u]; + + if (!sif6up(u)) + return 0; + + if (!sif6addr(u, wo->ourid, wo->hisid)) + return 0; + + if (!sifnpmode(u, PPP_IPV6, NPMODE_QUEUE)) + return 0; + + ppp_notice("ipv6_demand_conf"); + ppp_notice("local LL address %s", llv6_ntoa(wo->ourid)); + ppp_notice("remote LL address %s", llv6_ntoa(wo->hisid)); + + return 1; +} +#endif /* DEMAND_SUPPORT */ + + +/* + * ipv6cp_up - IPV6CP has come UP. + * + * Configure the IPv6 network interface appropriately and bring it up. + */ +static void ipv6cp_up(fsm *f) { + ppp_pcb *pcb = f->pcb; + ipv6cp_options *wo = &pcb->ipv6cp_wantoptions; + ipv6cp_options *ho = &pcb->ipv6cp_hisoptions; + ipv6cp_options *go = &pcb->ipv6cp_gotoptions; + + IPV6CPDEBUG(("ipv6cp: up")); + + /* + * We must have a non-zero LL address for both ends of the link. + */ + if (!ho->neg_ifaceid) + ho->hisid = wo->hisid; + +#if 0 /* UNUSED */ + if(!no_ifaceid_neg) { +#endif /* UNUSED */ + if (eui64_iszero(ho->hisid)) { + ppp_error("Could not determine remote LL address"); + ipv6cp_close(f->pcb, "Could not determine remote LL address"); + return; + } + if (eui64_iszero(go->ourid)) { + ppp_error("Could not determine local LL address"); + ipv6cp_close(f->pcb, "Could not determine local LL address"); + return; + } + if (eui64_equals(go->ourid, ho->hisid)) { + ppp_error("local and remote LL addresses are equal"); + ipv6cp_close(f->pcb, "local and remote LL addresses are equal"); + return; + } +#if 0 /* UNUSED */ + } +#endif /* UNUSED */ +#if 0 /* UNUSED */ + script_setenv("LLLOCAL", llv6_ntoa(go->ourid), 0); + script_setenv("LLREMOTE", llv6_ntoa(ho->hisid), 0); +#endif /* UNUSED */ + +#ifdef IPV6CP_COMP + /* set tcp compression */ + sif6comp(f->unit, ho->neg_vj); +#endif + +#if DEMAND_SUPPORT + /* + * If we are doing dial-on-demand, the interface is already + * configured, so we put out any saved-up packets, then set the + * interface to pass IPv6 packets. + */ + if (demand) { + if (! eui64_equals(go->ourid, wo->ourid) || + ! eui64_equals(ho->hisid, wo->hisid)) { + if (! eui64_equals(go->ourid, wo->ourid)) + warn("Local LL address changed to %s", + llv6_ntoa(go->ourid)); + if (! eui64_equals(ho->hisid, wo->hisid)) + warn("Remote LL address changed to %s", + llv6_ntoa(ho->hisid)); + ipv6cp_clear_addrs(f->pcb, go->ourid, ho->hisid); + + /* Set the interface to the new addresses */ + if (!sif6addr(f->pcb, go->ourid, ho->hisid)) { + if (debug) + warn("sif6addr failed"); + ipv6cp_close(f->unit, "Interface configuration failed"); + return; + } + + } + demand_rexmit(PPP_IPV6); + sifnpmode(f->unit, PPP_IPV6, NPMODE_PASS); + + } else +#endif /* DEMAND_SUPPORT */ + { + /* + * Set LL addresses + */ + if (!sif6addr(f->pcb, go->ourid, ho->hisid)) { + PPPDEBUG(LOG_DEBUG, ("sif6addr failed")); + ipv6cp_close(f->pcb, "Interface configuration failed"); + return; + } + + /* bring the interface up for IPv6 */ + if (!sif6up(f->pcb)) { + PPPDEBUG(LOG_DEBUG, ("sif6up failed (IPV6)")); + ipv6cp_close(f->pcb, "Interface configuration failed"); + return; + } +#if DEMAND_SUPPORT + sifnpmode(f->pcb, PPP_IPV6, NPMODE_PASS); +#endif /* DEMAND_SUPPORT */ + + ppp_notice("local LL address %s", llv6_ntoa(go->ourid)); + ppp_notice("remote LL address %s", llv6_ntoa(ho->hisid)); + } + + np_up(f->pcb, PPP_IPV6); + pcb->ipv6cp_is_up = 1; + +#if 0 /* UNUSED */ + /* + * Execute the ipv6-up script, like this: + * /etc/ppp/ipv6-up interface tty speed local-LL remote-LL + */ + if (ipv6cp_script_state == s_down && ipv6cp_script_pid == 0) { + ipv6cp_script_state = s_up; + ipv6cp_script(_PATH_IPV6UP); + } +#endif /* UNUSED */ +} + + +/* + * ipv6cp_down - IPV6CP has gone DOWN. + * + * Take the IPv6 network interface down, clear its addresses + * and delete routes through it. + */ +static void ipv6cp_down(fsm *f) { + ppp_pcb *pcb = f->pcb; + ipv6cp_options *go = &pcb->ipv6cp_gotoptions; + ipv6cp_options *ho = &pcb->ipv6cp_hisoptions; + + IPV6CPDEBUG(("ipv6cp: down")); +#if PPP_STATS_SUPPORT + update_link_stats(f->unit); +#endif /* PPP_STATS_SUPPORT */ + if (pcb->ipv6cp_is_up) { + pcb->ipv6cp_is_up = 0; + np_down(f->pcb, PPP_IPV6); + } +#ifdef IPV6CP_COMP + sif6comp(f->unit, 0); +#endif + +#if DEMAND_SUPPORT + /* + * If we are doing dial-on-demand, set the interface + * to queue up outgoing packets (for now). + */ + if (demand) { + sifnpmode(f->pcb, PPP_IPV6, NPMODE_QUEUE); + } else +#endif /* DEMAND_SUPPORT */ + { +#if DEMAND_SUPPORT + sifnpmode(f->pcb, PPP_IPV6, NPMODE_DROP); +#endif /* DEMAND_SUPPORT */ + ipv6cp_clear_addrs(f->pcb, + go->ourid, + ho->hisid); + sif6down(f->pcb); + } + +#if 0 /* UNUSED */ + /* Execute the ipv6-down script */ + if (ipv6cp_script_state == s_up && ipv6cp_script_pid == 0) { + ipv6cp_script_state = s_down; + ipv6cp_script(_PATH_IPV6DOWN); + } +#endif /* UNUSED */ +} + + +/* + * ipv6cp_clear_addrs() - clear the interface addresses, routes, + * proxy neighbour discovery entries, etc. + */ +static void ipv6cp_clear_addrs(ppp_pcb *pcb, eui64_t ourid, eui64_t hisid) { + cif6addr(pcb, ourid, hisid); +} + + +/* + * ipv6cp_finished - possibly shut down the lower layers. + */ +static void ipv6cp_finished(fsm *f) { + np_finished(f->pcb, PPP_IPV6); +} + + +#if 0 /* UNUSED */ +/* + * ipv6cp_script_done - called when the ipv6-up or ipv6-down script + * has finished. + */ +static void +ipv6cp_script_done(arg) + void *arg; +{ + ipv6cp_script_pid = 0; + switch (ipv6cp_script_state) { + case s_up: + if (ipv6cp_fsm[0].state != PPP_FSM_OPENED) { + ipv6cp_script_state = s_down; + ipv6cp_script(_PATH_IPV6DOWN); + } + break; + case s_down: + if (ipv6cp_fsm[0].state == PPP_FSM_OPENED) { + ipv6cp_script_state = s_up; + ipv6cp_script(_PATH_IPV6UP); + } + break; + } +} + + +/* + * ipv6cp_script - Execute a script with arguments + * interface-name tty-name speed local-LL remote-LL. + */ +static void +ipv6cp_script(script) + char *script; +{ + char strspeed[32], strlocal[32], strremote[32]; + char *argv[8]; + + sprintf(strspeed, "%d", baud_rate); + strcpy(strlocal, llv6_ntoa(ipv6cp_gotoptions[0].ourid)); + strcpy(strremote, llv6_ntoa(ipv6cp_hisoptions[0].hisid)); + + argv[0] = script; + argv[1] = ifname; + argv[2] = devnam; + argv[3] = strspeed; + argv[4] = strlocal; + argv[5] = strremote; + argv[6] = ipparam; + argv[7] = NULL; + + ipv6cp_script_pid = run_program(script, argv, 0, ipv6cp_script_done, + NULL, 0); +} +#endif /* UNUSED */ + +#if PRINTPKT_SUPPORT +/* + * ipv6cp_printpkt - print the contents of an IPV6CP packet. + */ +static const char* const ipv6cp_codenames[] = { + "ConfReq", "ConfAck", "ConfNak", "ConfRej", + "TermReq", "TermAck", "CodeRej" +}; + +static int ipv6cp_printpkt(const u_char *p, int plen, + void (*printer)(void *, const char *, ...), void *arg) { + int code, id, len, olen; + const u_char *pstart, *optend; +#ifdef IPV6CP_COMP + u_short cishort; +#endif /* IPV6CP_COMP */ + eui64_t ifaceid; + + if (plen < HEADERLEN) + return 0; + pstart = p; + GETCHAR(code, p); + GETCHAR(id, p); + GETSHORT(len, p); + if (len < HEADERLEN || len > plen) + return 0; + + if (code >= 1 && code <= (int)LWIP_ARRAYSIZE(ipv6cp_codenames)) + printer(arg, " %s", ipv6cp_codenames[code-1]); + else + printer(arg, " code=0x%x", code); + printer(arg, " id=0x%x", id); + len -= HEADERLEN; + switch (code) { + case CONFREQ: + case CONFACK: + case CONFNAK: + case CONFREJ: + /* print option list */ + while (len >= 2) { + GETCHAR(code, p); + GETCHAR(olen, p); + p -= 2; + if (olen < 2 || olen > len) { + break; + } + printer(arg, " <"); + len -= olen; + optend = p + olen; + switch (code) { +#ifdef IPV6CP_COMP + case CI_COMPRESSTYPE: + if (olen >= CILEN_COMPRESS) { + p += 2; + GETSHORT(cishort, p); + printer(arg, "compress "); + printer(arg, "0x%x", cishort); + } + break; +#endif /* IPV6CP_COMP */ + case CI_IFACEID: + if (olen == CILEN_IFACEID) { + p += 2; + eui64_get(ifaceid, p); + printer(arg, "addr %s", llv6_ntoa(ifaceid)); + } + break; + default: + break; + } + while (p < optend) { + GETCHAR(code, p); + printer(arg, " %.2x", code); + } + printer(arg, ">"); + } + break; + + case TERMACK: + case TERMREQ: + if (len > 0 && *p >= ' ' && *p < 0x7f) { + printer(arg, " "); + ppp_print_string(p, len, printer, arg); + p += len; + len = 0; + } + break; + default: + break; + } + + /* print the rest of the bytes in the packet */ + for (; len > 0; --len) { + GETCHAR(code, p); + printer(arg, " %.2x", code); + } + + return p - pstart; +} +#endif /* PRINTPKT_SUPPORT */ + +#if DEMAND_SUPPORT +/* + * ipv6_active_pkt - see if this IP packet is worth bringing the link up for. + * We don't bring the link up for IP fragments or for TCP FIN packets + * with no data. + */ +#define IP6_HDRLEN 40 /* bytes */ +#define IP6_NHDR_FRAG 44 /* fragment IPv6 header */ +#define TCP_HDRLEN 20 +#define TH_FIN 0x01 + +/* + * We use these macros because the IP header may be at an odd address, + * and some compilers might use word loads to get th_off or ip_hl. + */ + +#define get_ip6nh(x) (((unsigned char *)(x))[6]) +#define get_tcpoff(x) (((unsigned char *)(x))[12] >> 4) +#define get_tcpflags(x) (((unsigned char *)(x))[13]) + +static int ipv6_active_pkt(u_char *pkt, int len) { + u_char *tcp; + + len -= PPP_HDRLEN; + pkt += PPP_HDRLEN; + if (len < IP6_HDRLEN) + return 0; + if (get_ip6nh(pkt) == IP6_NHDR_FRAG) + return 0; + if (get_ip6nh(pkt) != IPPROTO_TCP) + return 1; + if (len < IP6_HDRLEN + TCP_HDRLEN) + return 0; + tcp = pkt + IP6_HDRLEN; + if ((get_tcpflags(tcp) & TH_FIN) != 0 && len == IP6_HDRLEN + get_tcpoff(tcp) * 4) + return 0; + return 1; +} +#endif /* DEMAND_SUPPORT */ + +#endif /* PPP_SUPPORT && PPP_IPV6_SUPPORT */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/lcp.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/lcp.c new file mode 100644 index 0000000000000000000000000000000000000000..90ed183b758ea7accc3be097788b271ef2a099ba --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/lcp.c @@ -0,0 +1,2790 @@ +/* + * lcp.c - PPP Link Control Protocol. + * + * Copyright (c) 1984-2000 Carnegie Mellon University. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The name "Carnegie Mellon University" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For permission or any legal + * details, please contact + * Office of Technology Transfer + * Carnegie Mellon University + * 5000 Forbes Avenue + * Pittsburgh, PA 15213-3890 + * (412) 268-4387, fax: (412) 268-7395 + * tech-transfer@andrew.cmu.edu + * + * 4. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by Computing Services + * at Carnegie Mellon University (http://www.cmu.edu/computing/)." + * + * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO + * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE + * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include "netif/ppp/ppp_opts.h" +#if PPP_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +/* + * @todo: + */ + +#if 0 /* UNUSED */ +#include +#include +#include +#endif /* UNUSED */ + +#include "netif/ppp/ppp_impl.h" + +#include "netif/ppp/fsm.h" +#include "netif/ppp/lcp.h" +#if CHAP_SUPPORT +#include "netif/ppp/chap-new.h" +#endif /* CHAP_SUPPORT */ +#include "netif/ppp/magic.h" + +/* + * When the link comes up we want to be able to wait for a short while, + * or until seeing some input from the peer, before starting to send + * configure-requests. We do this by delaying the fsm_lowerup call. + */ +/* steal a bit in fsm flags word */ +#define DELAYED_UP 0x80 + +static void lcp_delayed_up(void *arg); + +/* + * LCP-related command-line options. + */ +#if 0 /* UNUSED */ +int lcp_echo_interval = 0; /* Interval between LCP echo-requests */ +int lcp_echo_fails = 0; /* Tolerance to unanswered echo-requests */ +#endif /* UNUSED */ + +#if 0 /* UNUSED */ +/* options */ +static u_int lcp_echo_interval = LCP_ECHOINTERVAL; /* Interval between LCP echo-requests */ +static u_int lcp_echo_fails = LCP_MAXECHOFAILS; /* Tolerance to unanswered echo-requests */ +#endif /* UNUSED */ + +#if 0 /* UNUSED */ +#if PPP_LCP_ADAPTIVE +bool lcp_echo_adaptive = 0; /* request echo only if the link was idle */ +#endif +bool lax_recv = 0; /* accept control chars in asyncmap */ +bool noendpoint = 0; /* don't send/accept endpoint discriminator */ +#endif /* UNUSED */ + +#if PPP_OPTIONS +static int noopt (char **); +#endif /* PPP_OPTIONS */ + +#ifdef HAVE_MULTILINK +static int setendpoint (char **); +static void printendpoint (option_t *, void (*)(void *, char *, ...), + void *); +#endif /* HAVE_MULTILINK */ + +#if PPP_OPTIONS +static option_t lcp_option_list[] = { + /* LCP options */ + { "-all", o_special_noarg, (void *)noopt, + "Don't request/allow any LCP options" }, + + { "noaccomp", o_bool, &lcp_wantoptions[0].neg_accompression, + "Disable address/control compression", + OPT_A2CLR, &lcp_allowoptions[0].neg_accompression }, + { "-ac", o_bool, &lcp_wantoptions[0].neg_accompression, + "Disable address/control compression", + OPT_ALIAS | OPT_A2CLR, &lcp_allowoptions[0].neg_accompression }, + + { "asyncmap", o_uint32, &lcp_wantoptions[0].asyncmap, + "Set asyncmap (for received packets)", + OPT_OR, &lcp_wantoptions[0].neg_asyncmap }, + { "-as", o_uint32, &lcp_wantoptions[0].asyncmap, + "Set asyncmap (for received packets)", + OPT_ALIAS | OPT_OR, &lcp_wantoptions[0].neg_asyncmap }, + { "default-asyncmap", o_uint32, &lcp_wantoptions[0].asyncmap, + "Disable asyncmap negotiation", + OPT_OR | OPT_NOARG | OPT_VAL(~0U) | OPT_A2CLR, + &lcp_allowoptions[0].neg_asyncmap }, + { "-am", o_uint32, &lcp_wantoptions[0].asyncmap, + "Disable asyncmap negotiation", + OPT_ALIAS | OPT_OR | OPT_NOARG | OPT_VAL(~0U) | OPT_A2CLR, + &lcp_allowoptions[0].neg_asyncmap }, + + { "nomagic", o_bool, &lcp_wantoptions[0].neg_magicnumber, + "Disable magic number negotiation (looped-back line detection)", + OPT_A2CLR, &lcp_allowoptions[0].neg_magicnumber }, + { "-mn", o_bool, &lcp_wantoptions[0].neg_magicnumber, + "Disable magic number negotiation (looped-back line detection)", + OPT_ALIAS | OPT_A2CLR, &lcp_allowoptions[0].neg_magicnumber }, + + { "mru", o_int, &lcp_wantoptions[0].mru, + "Set MRU (maximum received packet size) for negotiation", + OPT_PRIO, &lcp_wantoptions[0].neg_mru }, + { "default-mru", o_bool, &lcp_wantoptions[0].neg_mru, + "Disable MRU negotiation (use default 1500)", + OPT_PRIOSUB | OPT_A2CLR, &lcp_allowoptions[0].neg_mru }, + { "-mru", o_bool, &lcp_wantoptions[0].neg_mru, + "Disable MRU negotiation (use default 1500)", + OPT_ALIAS | OPT_PRIOSUB | OPT_A2CLR, &lcp_allowoptions[0].neg_mru }, + + { "mtu", o_int, &lcp_allowoptions[0].mru, + "Set our MTU", OPT_LIMITS, NULL, MAXMRU, MINMRU }, + + { "nopcomp", o_bool, &lcp_wantoptions[0].neg_pcompression, + "Disable protocol field compression", + OPT_A2CLR, &lcp_allowoptions[0].neg_pcompression }, + { "-pc", o_bool, &lcp_wantoptions[0].neg_pcompression, + "Disable protocol field compression", + OPT_ALIAS | OPT_A2CLR, &lcp_allowoptions[0].neg_pcompression }, + + { "passive", o_bool, &lcp_wantoptions[0].passive, + "Set passive mode", 1 }, + { "-p", o_bool, &lcp_wantoptions[0].passive, + "Set passive mode", OPT_ALIAS | 1 }, + + { "silent", o_bool, &lcp_wantoptions[0].silent, + "Set silent mode", 1 }, + + { "lcp-echo-failure", o_int, &lcp_echo_fails, + "Set number of consecutive echo failures to indicate link failure", + OPT_PRIO }, + { "lcp-echo-interval", o_int, &lcp_echo_interval, + "Set time in seconds between LCP echo requests", OPT_PRIO }, +#if PPP_LCP_ADAPTIVE + { "lcp-echo-adaptive", o_bool, &lcp_echo_adaptive, + "Suppress LCP echo requests if traffic was received", 1 }, +#endif + { "lcp-restart", o_int, &lcp_fsm[0].timeouttime, + "Set time in seconds between LCP retransmissions", OPT_PRIO }, + { "lcp-max-terminate", o_int, &lcp_fsm[0].maxtermtransmits, + "Set maximum number of LCP terminate-request transmissions", OPT_PRIO }, + { "lcp-max-configure", o_int, &lcp_fsm[0].maxconfreqtransmits, + "Set maximum number of LCP configure-request transmissions", OPT_PRIO }, + { "lcp-max-failure", o_int, &lcp_fsm[0].maxnakloops, + "Set limit on number of LCP configure-naks", OPT_PRIO }, + + { "receive-all", o_bool, &lax_recv, + "Accept all received control characters", 1 }, + +#ifdef HAVE_MULTILINK + { "mrru", o_int, &lcp_wantoptions[0].mrru, + "Maximum received packet size for multilink bundle", + OPT_PRIO, &lcp_wantoptions[0].neg_mrru }, + + { "mpshortseq", o_bool, &lcp_wantoptions[0].neg_ssnhf, + "Use short sequence numbers in multilink headers", + OPT_PRIO | 1, &lcp_allowoptions[0].neg_ssnhf }, + { "nompshortseq", o_bool, &lcp_wantoptions[0].neg_ssnhf, + "Don't use short sequence numbers in multilink headers", + OPT_PRIOSUB | OPT_A2CLR, &lcp_allowoptions[0].neg_ssnhf }, + + { "endpoint", o_special, (void *) setendpoint, + "Endpoint discriminator for multilink", + OPT_PRIO | OPT_A2PRINTER, (void *) printendpoint }, +#endif /* HAVE_MULTILINK */ + + { "noendpoint", o_bool, &noendpoint, + "Don't send or accept multilink endpoint discriminator", 1 }, + + {NULL} +}; +#endif /* PPP_OPTIONS */ + +/* + * Callbacks for fsm code. (CI = Configuration Information) + */ +static void lcp_resetci(fsm *f); /* Reset our CI */ +static int lcp_cilen(fsm *f); /* Return length of our CI */ +static void lcp_addci(fsm *f, u_char *ucp, int *lenp); /* Add our CI to pkt */ +static int lcp_ackci(fsm *f, u_char *p, int len); /* Peer ack'd our CI */ +static int lcp_nakci(fsm *f, u_char *p, int len, int treat_as_reject); /* Peer nak'd our CI */ +static int lcp_rejci(fsm *f, u_char *p, int len); /* Peer rej'd our CI */ +static int lcp_reqci(fsm *f, u_char *inp, int *lenp, int reject_if_disagree); /* Rcv peer CI */ +static void lcp_up(fsm *f); /* We're UP */ +static void lcp_down(fsm *f); /* We're DOWN */ +static void lcp_starting (fsm *); /* We need lower layer up */ +static void lcp_finished (fsm *); /* We need lower layer down */ +static int lcp_extcode(fsm *f, int code, int id, u_char *inp, int len); +static void lcp_rprotrej(fsm *f, u_char *inp, int len); + +/* + * routines to send LCP echos to peer + */ + +static void lcp_echo_lowerup(ppp_pcb *pcb); +static void lcp_echo_lowerdown(ppp_pcb *pcb); +static void LcpEchoTimeout(void *arg); +static void lcp_received_echo_reply(fsm *f, int id, u_char *inp, int len); +static void LcpSendEchoRequest(fsm *f); +static void LcpLinkFailure(fsm *f); +static void LcpEchoCheck(fsm *f); + +static const fsm_callbacks lcp_callbacks = { /* LCP callback routines */ + lcp_resetci, /* Reset our Configuration Information */ + lcp_cilen, /* Length of our Configuration Information */ + lcp_addci, /* Add our Configuration Information */ + lcp_ackci, /* ACK our Configuration Information */ + lcp_nakci, /* NAK our Configuration Information */ + lcp_rejci, /* Reject our Configuration Information */ + lcp_reqci, /* Request peer's Configuration Information */ + lcp_up, /* Called when fsm reaches OPENED state */ + lcp_down, /* Called when fsm leaves OPENED state */ + lcp_starting, /* Called when we want the lower layer up */ + lcp_finished, /* Called when we want the lower layer down */ + NULL, /* Called when Protocol-Reject received */ + NULL, /* Retransmission is necessary */ + lcp_extcode, /* Called to handle LCP-specific codes */ + "LCP" /* String name of protocol */ +}; + +/* + * Protocol entry points. + * Some of these are called directly. + */ + +static void lcp_init(ppp_pcb *pcb); +static void lcp_input(ppp_pcb *pcb, u_char *p, int len); +static void lcp_protrej(ppp_pcb *pcb); +#if PRINTPKT_SUPPORT +static int lcp_printpkt(const u_char *p, int plen, + void (*printer) (void *, const char *, ...), void *arg); +#endif /* PRINTPKT_SUPPORT */ + +const struct protent lcp_protent = { + PPP_LCP, + lcp_init, + lcp_input, + lcp_protrej, + lcp_lowerup, + lcp_lowerdown, + lcp_open, + lcp_close, +#if PRINTPKT_SUPPORT + lcp_printpkt, +#endif /* PRINTPKT_SUPPORT */ +#if PPP_DATAINPUT + NULL, +#endif /* PPP_DATAINPUT */ +#if PRINTPKT_SUPPORT + "LCP", + NULL, +#endif /* PRINTPKT_SUPPORT */ +#if PPP_OPTIONS + lcp_option_list, + NULL, +#endif /* PPP_OPTIONS */ +#if DEMAND_SUPPORT + NULL, + NULL +#endif /* DEMAND_SUPPORT */ +}; + +/* + * Length of each type of configuration option (in octets) + */ +#define CILEN_VOID 2 +#define CILEN_CHAR 3 +#define CILEN_SHORT 4 /* CILEN_VOID + 2 */ +#if CHAP_SUPPORT +#define CILEN_CHAP 5 /* CILEN_VOID + 2 + 1 */ +#endif /* CHAP_SUPPORT */ +#define CILEN_LONG 6 /* CILEN_VOID + 4 */ +#if LQR_SUPPORT +#define CILEN_LQR 8 /* CILEN_VOID + 2 + 4 */ +#endif /* LQR_SUPPORT */ +#define CILEN_CBCP 3 + +#define CODENAME(x) ((x) == CONFACK ? "ACK" : \ + (x) == CONFNAK ? "NAK" : "REJ") + +#if PPP_OPTIONS +/* + * noopt - Disable all options (why?). + */ +static int +noopt(argv) + char **argv; +{ + BZERO((char *) &lcp_wantoptions[0], sizeof (struct lcp_options)); + BZERO((char *) &lcp_allowoptions[0], sizeof (struct lcp_options)); + + return (1); +} +#endif /* PPP_OPTIONS */ + +#ifdef HAVE_MULTILINK +static int +setendpoint(argv) + char **argv; +{ + if (str_to_epdisc(&lcp_wantoptions[0].endpoint, *argv)) { + lcp_wantoptions[0].neg_endpoint = 1; + return 1; + } + option_error("Can't parse '%s' as an endpoint discriminator", *argv); + return 0; +} + +static void +printendpoint(opt, printer, arg) + option_t *opt; + void (*printer) (void *, char *, ...); + void *arg; +{ + printer(arg, "%s", epdisc_to_str(&lcp_wantoptions[0].endpoint)); +} +#endif /* HAVE_MULTILINK */ + +/* + * lcp_init - Initialize LCP. + */ +static void lcp_init(ppp_pcb *pcb) { + fsm *f = &pcb->lcp_fsm; + lcp_options *wo = &pcb->lcp_wantoptions; + lcp_options *ao = &pcb->lcp_allowoptions; + + f->pcb = pcb; + f->protocol = PPP_LCP; + f->callbacks = &lcp_callbacks; + + fsm_init(f); + + BZERO(wo, sizeof(*wo)); + wo->neg_mru = 1; + wo->mru = PPP_DEFMRU; + wo->neg_asyncmap = 1; + wo->neg_magicnumber = 1; + wo->neg_pcompression = 1; + wo->neg_accompression = 1; + + BZERO(ao, sizeof(*ao)); + ao->neg_mru = 1; + ao->mru = PPP_MAXMRU; + ao->neg_asyncmap = 1; +#if CHAP_SUPPORT + ao->neg_chap = 1; + ao->chap_mdtype = CHAP_MDTYPE_SUPPORTED; +#endif /* CHAP_SUPPORT */ +#if PAP_SUPPORT + ao->neg_upap = 1; +#endif /* PAP_SUPPORT */ +#if EAP_SUPPORT + ao->neg_eap = 1; +#endif /* EAP_SUPPORT */ + ao->neg_magicnumber = 1; + ao->neg_pcompression = 1; + ao->neg_accompression = 1; + ao->neg_endpoint = 1; +} + + +/* + * lcp_open - LCP is allowed to come up. + */ +void lcp_open(ppp_pcb *pcb) { + fsm *f = &pcb->lcp_fsm; + lcp_options *wo = &pcb->lcp_wantoptions; + + f->flags &= ~(OPT_PASSIVE | OPT_SILENT); + if (wo->passive) + f->flags |= OPT_PASSIVE; + if (wo->silent) + f->flags |= OPT_SILENT; + fsm_open(f); +} + + +/* + * lcp_close - Take LCP down. + */ +void lcp_close(ppp_pcb *pcb, const char *reason) { + fsm *f = &pcb->lcp_fsm; + int oldstate; + + if (pcb->phase != PPP_PHASE_DEAD +#ifdef HAVE_MULTILINK + && pcb->phase != PPP_PHASE_MASTER +#endif /* HAVE_MULTILINK */ + ) + new_phase(pcb, PPP_PHASE_TERMINATE); + + if (f->flags & DELAYED_UP) { + UNTIMEOUT(lcp_delayed_up, f); + f->state = PPP_FSM_STOPPED; + } + oldstate = f->state; + + fsm_close(f, reason); + if (oldstate == PPP_FSM_STOPPED && (f->flags & (OPT_PASSIVE|OPT_SILENT|DELAYED_UP))) { + /* + * This action is not strictly according to the FSM in RFC1548, + * but it does mean that the program terminates if you do a + * lcp_close() when a connection hasn't been established + * because we are in passive/silent mode or because we have + * delayed the fsm_lowerup() call and it hasn't happened yet. + */ + f->flags &= ~DELAYED_UP; + lcp_finished(f); + } +} + + +/* + * lcp_lowerup - The lower layer is up. + */ +void lcp_lowerup(ppp_pcb *pcb) { + lcp_options *wo = &pcb->lcp_wantoptions; + fsm *f = &pcb->lcp_fsm; + /* + * Don't use A/C or protocol compression on transmission, + * but accept A/C and protocol compressed packets + * if we are going to ask for A/C and protocol compression. + */ + if (ppp_send_config(pcb, PPP_MRU, 0xffffffff, 0, 0) < 0 + || ppp_recv_config(pcb, PPP_MRU, (pcb->settings.lax_recv? 0: 0xffffffff), + wo->neg_pcompression, wo->neg_accompression) < 0) + return; + pcb->peer_mru = PPP_MRU; + + if (pcb->settings.listen_time != 0) { + f->flags |= DELAYED_UP; + TIMEOUTMS(lcp_delayed_up, f, pcb->settings.listen_time); + } else + fsm_lowerup(f); +} + + +/* + * lcp_lowerdown - The lower layer is down. + */ +void lcp_lowerdown(ppp_pcb *pcb) { + fsm *f = &pcb->lcp_fsm; + + if (f->flags & DELAYED_UP) { + f->flags &= ~DELAYED_UP; + UNTIMEOUT(lcp_delayed_up, f); + } else + fsm_lowerdown(f); +} + + +/* + * lcp_delayed_up - Bring the lower layer up now. + */ +static void lcp_delayed_up(void *arg) { + fsm *f = (fsm*)arg; + + if (f->flags & DELAYED_UP) { + f->flags &= ~DELAYED_UP; + fsm_lowerup(f); + } +} + + +/* + * lcp_input - Input LCP packet. + */ +static void lcp_input(ppp_pcb *pcb, u_char *p, int len) { + fsm *f = &pcb->lcp_fsm; + + if (f->flags & DELAYED_UP) { + f->flags &= ~DELAYED_UP; + UNTIMEOUT(lcp_delayed_up, f); + fsm_lowerup(f); + } + fsm_input(f, p, len); +} + +/* + * lcp_extcode - Handle a LCP-specific code. + */ +static int lcp_extcode(fsm *f, int code, int id, u_char *inp, int len) { + ppp_pcb *pcb = f->pcb; + lcp_options *go = &pcb->lcp_gotoptions; + u_char *magp; + + switch( code ){ + case PROTREJ: + lcp_rprotrej(f, inp, len); + break; + + case ECHOREQ: + if (f->state != PPP_FSM_OPENED) + break; + magp = inp; + PUTLONG(go->magicnumber, magp); + fsm_sdata(f, ECHOREP, id, inp, len); + break; + + case ECHOREP: + lcp_received_echo_reply(f, id, inp, len); + break; + + case DISCREQ: + case IDENTIF: + case TIMEREM: + break; + + default: + return 0; + } + return 1; +} + + +/* + * lcp_rprotrej - Receive an Protocol-Reject. + * + * Figure out which protocol is rejected and inform it. + */ +static void lcp_rprotrej(fsm *f, u_char *inp, int len) { + int i; + const struct protent *protp; + u_short prot; +#if PPP_PROTOCOLNAME + const char *pname; +#endif /* PPP_PROTOCOLNAME */ + + if (len < 2) { + LCPDEBUG(("lcp_rprotrej: Rcvd short Protocol-Reject packet!")); + return; + } + + GETSHORT(prot, inp); + + /* + * Protocol-Reject packets received in any state other than the LCP + * OPENED state SHOULD be silently discarded. + */ + if( f->state != PPP_FSM_OPENED ){ + LCPDEBUG(("Protocol-Reject discarded: LCP in state %d", f->state)); + return; + } + +#if PPP_PROTOCOLNAME + pname = protocol_name(prot); +#endif /* PPP_PROTOCOLNAME */ + + /* + * Upcall the proper Protocol-Reject routine. + */ + for (i = 0; (protp = protocols[i]) != NULL; ++i) + if (protp->protocol == prot) { +#if PPP_PROTOCOLNAME + if (pname != NULL) + ppp_dbglog("Protocol-Reject for '%s' (0x%x) received", pname, + prot); + else +#endif /* PPP_PROTOCOLNAME */ + ppp_dbglog("Protocol-Reject for 0x%x received", prot); + (*protp->protrej)(f->pcb); + return; + } + +#if PPP_PROTOCOLNAME + if (pname != NULL) + ppp_warn("Protocol-Reject for unsupported protocol '%s' (0x%x)", pname, + prot); + else +#endif /* #if PPP_PROTOCOLNAME */ + ppp_warn("Protocol-Reject for unsupported protocol 0x%x", prot); +} + + +/* + * lcp_protrej - A Protocol-Reject was received. + */ +/*ARGSUSED*/ +static void lcp_protrej(ppp_pcb *pcb) { + /* + * Can't reject LCP! + */ + ppp_error("Received Protocol-Reject for LCP!"); + fsm_protreject(&pcb->lcp_fsm); +} + + +/* + * lcp_sprotrej - Send a Protocol-Reject for some protocol. + */ +void lcp_sprotrej(ppp_pcb *pcb, u_char *p, int len) { + fsm *f = &pcb->lcp_fsm; + /* + * Send back the protocol and the information field of the + * rejected packet. We only get here if LCP is in the OPENED state. + */ +#if 0 + p += 2; + len -= 2; +#endif + + fsm_sdata(f, PROTREJ, ++f->id, + p, len); +} + + +/* + * lcp_resetci - Reset our CI. + */ +static void lcp_resetci(fsm *f) { + ppp_pcb *pcb = f->pcb; + lcp_options *wo = &pcb->lcp_wantoptions; + lcp_options *go = &pcb->lcp_gotoptions; + lcp_options *ao = &pcb->lcp_allowoptions; + +#if PPP_AUTH_SUPPORT + + /* note: default value is true for allow options */ + if (pcb->settings.user && pcb->settings.passwd) { +#if PAP_SUPPORT + if (pcb->settings.refuse_pap) { + ao->neg_upap = 0; + } +#endif /* PAP_SUPPORT */ +#if CHAP_SUPPORT + if (pcb->settings.refuse_chap) { + ao->chap_mdtype &= ~MDTYPE_MD5; + } +#if MSCHAP_SUPPORT + if (pcb->settings.refuse_mschap) { + ao->chap_mdtype &= ~MDTYPE_MICROSOFT; + } + if (pcb->settings.refuse_mschap_v2) { + ao->chap_mdtype &= ~MDTYPE_MICROSOFT_V2; + } +#endif /* MSCHAP_SUPPORT */ + ao->neg_chap = (ao->chap_mdtype != MDTYPE_NONE); +#endif /* CHAP_SUPPORT */ +#if EAP_SUPPORT + if (pcb->settings.refuse_eap) { + ao->neg_eap = 0; + } +#endif /* EAP_SUPPORT */ + +#if PPP_SERVER + /* note: default value is false for wanted options */ + if (pcb->settings.auth_required) { +#if PAP_SUPPORT + if (!pcb->settings.refuse_pap) { + wo->neg_upap = 1; + } +#endif /* PAP_SUPPORT */ +#if CHAP_SUPPORT + if (!pcb->settings.refuse_chap) { + wo->chap_mdtype |= MDTYPE_MD5; + } +#if MSCHAP_SUPPORT + if (!pcb->settings.refuse_mschap) { + wo->chap_mdtype |= MDTYPE_MICROSOFT; + } + if (!pcb->settings.refuse_mschap_v2) { + wo->chap_mdtype |= MDTYPE_MICROSOFT_V2; + } +#endif /* MSCHAP_SUPPORT */ + wo->neg_chap = (wo->chap_mdtype != MDTYPE_NONE); +#endif /* CHAP_SUPPORT */ +#if EAP_SUPPORT + if (!pcb->settings.refuse_eap) { + wo->neg_eap = 1; + } +#endif /* EAP_SUPPORT */ + } +#endif /* PPP_SERVER */ + + } else { +#if PAP_SUPPORT + ao->neg_upap = 0; +#endif /* PAP_SUPPORT */ +#if CHAP_SUPPORT + ao->neg_chap = 0; + ao->chap_mdtype = MDTYPE_NONE; +#endif /* CHAP_SUPPORT */ +#if EAP_SUPPORT + ao->neg_eap = 0; +#endif /* EAP_SUPPORT */ + } + + PPPDEBUG(LOG_DEBUG, ("ppp: auth protocols:")); +#if PAP_SUPPORT + PPPDEBUG(LOG_DEBUG, (" PAP=%d", ao->neg_upap)); +#endif /* PAP_SUPPORT */ +#if CHAP_SUPPORT + PPPDEBUG(LOG_DEBUG, (" CHAP=%d CHAP_MD5=%d", ao->neg_chap, !!(ao->chap_mdtype&MDTYPE_MD5))); +#if MSCHAP_SUPPORT + PPPDEBUG(LOG_DEBUG, (" CHAP_MS=%d CHAP_MS2=%d", !!(ao->chap_mdtype&MDTYPE_MICROSOFT), !!(ao->chap_mdtype&MDTYPE_MICROSOFT_V2))); +#endif /* MSCHAP_SUPPORT */ +#endif /* CHAP_SUPPORT */ +#if EAP_SUPPORT + PPPDEBUG(LOG_DEBUG, (" EAP=%d", ao->neg_eap)); +#endif /* EAP_SUPPORT */ + PPPDEBUG(LOG_DEBUG, ("\n")); + +#endif /* PPP_AUTH_SUPPORT */ + + wo->magicnumber = magic(); + wo->numloops = 0; + *go = *wo; +#ifdef HAVE_MULTILINK + if (!multilink) { + go->neg_mrru = 0; +#endif /* HAVE_MULTILINK */ + go->neg_ssnhf = 0; + go->neg_endpoint = 0; +#ifdef HAVE_MULTILINK + } +#endif /* HAVE_MULTILINK */ + if (pcb->settings.noendpoint) + ao->neg_endpoint = 0; + pcb->peer_mru = PPP_MRU; +#if 0 /* UNUSED */ + auth_reset(pcb); +#endif /* UNUSED */ +} + + +/* + * lcp_cilen - Return length of our CI. + */ +static int lcp_cilen(fsm *f) { + ppp_pcb *pcb = f->pcb; + lcp_options *go = &pcb->lcp_gotoptions; + +#define LENCIVOID(neg) ((neg) ? CILEN_VOID : 0) +#if CHAP_SUPPORT +#define LENCICHAP(neg) ((neg) ? CILEN_CHAP : 0) +#endif /* CHAP_SUPPORT */ +#define LENCISHORT(neg) ((neg) ? CILEN_SHORT : 0) +#define LENCILONG(neg) ((neg) ? CILEN_LONG : 0) +#if LQR_SUPPORT +#define LENCILQR(neg) ((neg) ? CILEN_LQR: 0) +#endif /* LQR_SUPPORT */ +#define LENCICBCP(neg) ((neg) ? CILEN_CBCP: 0) + /* + * NB: we only ask for one of CHAP, UPAP, or EAP, even if we will + * accept more than one. We prefer EAP first, then CHAP, then + * PAP. + */ + return (LENCISHORT(go->neg_mru && go->mru != PPP_DEFMRU) + + LENCILONG(go->neg_asyncmap && go->asyncmap != 0xFFFFFFFF) + +#if EAP_SUPPORT + LENCISHORT(go->neg_eap) + +#endif /* EAP_SUPPORT */ +#if CHAP_SUPPORT /* cannot be improved, embedding a directive within macro arguments is not portable */ +#if EAP_SUPPORT + LENCICHAP(!go->neg_eap && go->neg_chap) + +#endif /* EAP_SUPPORT */ +#if !EAP_SUPPORT + LENCICHAP(go->neg_chap) + +#endif /* !EAP_SUPPORT */ +#endif /* CHAP_SUPPORT */ +#if PAP_SUPPORT /* cannot be improved, embedding a directive within macro arguments is not portable */ +#if EAP_SUPPORT && CHAP_SUPPORT + LENCISHORT(!go->neg_eap && !go->neg_chap && go->neg_upap) + +#endif /* EAP_SUPPORT && CHAP_SUPPORT */ +#if EAP_SUPPORT && !CHAP_SUPPORT + LENCISHORT(!go->neg_eap && go->neg_upap) + +#endif /* EAP_SUPPORT && !CHAP_SUPPORT */ +#if !EAP_SUPPORT && CHAP_SUPPORT + LENCISHORT(!go->neg_chap && go->neg_upap) + +#endif /* !EAP_SUPPORT && CHAP_SUPPORT */ +#if !EAP_SUPPORT && !CHAP_SUPPORT + LENCISHORT(go->neg_upap) + +#endif /* !EAP_SUPPORT && !CHAP_SUPPORT */ +#endif /* PAP_SUPPORT */ +#if LQR_SUPPORT + LENCILQR(go->neg_lqr) + +#endif /* LQR_SUPPORT */ + LENCICBCP(go->neg_cbcp) + + LENCILONG(go->neg_magicnumber) + + LENCIVOID(go->neg_pcompression) + + LENCIVOID(go->neg_accompression) + +#ifdef HAVE_MULTILINK + LENCISHORT(go->neg_mrru) + +#endif /* HAVE_MULTILINK */ + LENCIVOID(go->neg_ssnhf) + + (go->neg_endpoint? CILEN_CHAR + go->endpoint.length: 0)); +} + + +/* + * lcp_addci - Add our desired CIs to a packet. + */ +static void lcp_addci(fsm *f, u_char *ucp, int *lenp) { + ppp_pcb *pcb = f->pcb; + lcp_options *go = &pcb->lcp_gotoptions; + u_char *start_ucp = ucp; + +#define ADDCIVOID(opt, neg) \ + if (neg) { \ + PUTCHAR(opt, ucp); \ + PUTCHAR(CILEN_VOID, ucp); \ + } +#define ADDCISHORT(opt, neg, val) \ + if (neg) { \ + PUTCHAR(opt, ucp); \ + PUTCHAR(CILEN_SHORT, ucp); \ + PUTSHORT(val, ucp); \ + } +#if CHAP_SUPPORT +#define ADDCICHAP(opt, neg, val) \ + if (neg) { \ + PUTCHAR((opt), ucp); \ + PUTCHAR(CILEN_CHAP, ucp); \ + PUTSHORT(PPP_CHAP, ucp); \ + PUTCHAR((CHAP_DIGEST(val)), ucp); \ + } +#endif /* CHAP_SUPPORT */ +#define ADDCILONG(opt, neg, val) \ + if (neg) { \ + PUTCHAR(opt, ucp); \ + PUTCHAR(CILEN_LONG, ucp); \ + PUTLONG(val, ucp); \ + } +#if LQR_SUPPORT +#define ADDCILQR(opt, neg, val) \ + if (neg) { \ + PUTCHAR(opt, ucp); \ + PUTCHAR(CILEN_LQR, ucp); \ + PUTSHORT(PPP_LQR, ucp); \ + PUTLONG(val, ucp); \ + } +#endif /* LQR_SUPPORT */ +#define ADDCICHAR(opt, neg, val) \ + if (neg) { \ + PUTCHAR(opt, ucp); \ + PUTCHAR(CILEN_CHAR, ucp); \ + PUTCHAR(val, ucp); \ + } +#define ADDCIENDP(opt, neg, class, val, len) \ + if (neg) { \ + int i; \ + PUTCHAR(opt, ucp); \ + PUTCHAR(CILEN_CHAR + len, ucp); \ + PUTCHAR(class, ucp); \ + for (i = 0; i < len; ++i) \ + PUTCHAR(val[i], ucp); \ + } + + ADDCISHORT(CI_MRU, go->neg_mru && go->mru != PPP_DEFMRU, go->mru); + ADDCILONG(CI_ASYNCMAP, go->neg_asyncmap && go->asyncmap != 0xFFFFFFFF, + go->asyncmap); +#if EAP_SUPPORT + ADDCISHORT(CI_AUTHTYPE, go->neg_eap, PPP_EAP); +#endif /* EAP_SUPPORT */ +#if CHAP_SUPPORT /* cannot be improved, embedding a directive within macro arguments is not portable */ +#if EAP_SUPPORT + ADDCICHAP(CI_AUTHTYPE, !go->neg_eap && go->neg_chap, go->chap_mdtype); +#endif /* EAP_SUPPORT */ +#if !EAP_SUPPORT + ADDCICHAP(CI_AUTHTYPE, go->neg_chap, go->chap_mdtype); +#endif /* !EAP_SUPPORT */ +#endif /* CHAP_SUPPORT */ +#if PAP_SUPPORT /* cannot be improved, embedding a directive within macro arguments is not portable */ +#if EAP_SUPPORT && CHAP_SUPPORT + ADDCISHORT(CI_AUTHTYPE, !go->neg_eap && !go->neg_chap && go->neg_upap, PPP_PAP); +#endif /* EAP_SUPPORT && CHAP_SUPPORT */ +#if EAP_SUPPORT && !CHAP_SUPPORT + ADDCISHORT(CI_AUTHTYPE, !go->neg_eap && go->neg_upap, PPP_PAP); +#endif /* EAP_SUPPORT && !CHAP_SUPPORT */ +#if !EAP_SUPPORT && CHAP_SUPPORT + ADDCISHORT(CI_AUTHTYPE, !go->neg_chap && go->neg_upap, PPP_PAP); +#endif /* !EAP_SUPPORT && CHAP_SUPPORT */ +#if !EAP_SUPPORT && !CHAP_SUPPORT + ADDCISHORT(CI_AUTHTYPE, go->neg_upap, PPP_PAP); +#endif /* !EAP_SUPPORT && !CHAP_SUPPORT */ +#endif /* PAP_SUPPORT */ +#if LQR_SUPPORT + ADDCILQR(CI_QUALITY, go->neg_lqr, go->lqr_period); +#endif /* LQR_SUPPORT */ + ADDCICHAR(CI_CALLBACK, go->neg_cbcp, CBCP_OPT); + ADDCILONG(CI_MAGICNUMBER, go->neg_magicnumber, go->magicnumber); + ADDCIVOID(CI_PCOMPRESSION, go->neg_pcompression); + ADDCIVOID(CI_ACCOMPRESSION, go->neg_accompression); +#ifdef HAVE_MULTILINK + ADDCISHORT(CI_MRRU, go->neg_mrru, go->mrru); +#endif + ADDCIVOID(CI_SSNHF, go->neg_ssnhf); + ADDCIENDP(CI_EPDISC, go->neg_endpoint, go->endpoint.class_, + go->endpoint.value, go->endpoint.length); + + if (ucp - start_ucp != *lenp) { + /* this should never happen, because peer_mtu should be 1500 */ + ppp_error("Bug in lcp_addci: wrong length"); + } +} + + +/* + * lcp_ackci - Ack our CIs. + * This should not modify any state if the Ack is bad. + * + * Returns: + * 0 - Ack was bad. + * 1 - Ack was good. + */ +static int lcp_ackci(fsm *f, u_char *p, int len) { + ppp_pcb *pcb = f->pcb; + lcp_options *go = &pcb->lcp_gotoptions; + u_char cilen, citype, cichar; + u_short cishort; + u32_t cilong; + + /* + * CIs must be in exactly the same order that we sent. + * Check packet length and CI length at each step. + * If we find any deviations, then this packet is bad. + */ +#define ACKCIVOID(opt, neg) \ + if (neg) { \ + if ((len -= CILEN_VOID) < 0) \ + goto bad; \ + GETCHAR(citype, p); \ + GETCHAR(cilen, p); \ + if (cilen != CILEN_VOID || \ + citype != opt) \ + goto bad; \ + } +#define ACKCISHORT(opt, neg, val) \ + if (neg) { \ + if ((len -= CILEN_SHORT) < 0) \ + goto bad; \ + GETCHAR(citype, p); \ + GETCHAR(cilen, p); \ + if (cilen != CILEN_SHORT || \ + citype != opt) \ + goto bad; \ + GETSHORT(cishort, p); \ + if (cishort != val) \ + goto bad; \ + } +#define ACKCICHAR(opt, neg, val) \ + if (neg) { \ + if ((len -= CILEN_CHAR) < 0) \ + goto bad; \ + GETCHAR(citype, p); \ + GETCHAR(cilen, p); \ + if (cilen != CILEN_CHAR || \ + citype != opt) \ + goto bad; \ + GETCHAR(cichar, p); \ + if (cichar != val) \ + goto bad; \ + } +#if CHAP_SUPPORT +#define ACKCICHAP(opt, neg, val) \ + if (neg) { \ + if ((len -= CILEN_CHAP) < 0) \ + goto bad; \ + GETCHAR(citype, p); \ + GETCHAR(cilen, p); \ + if (cilen != CILEN_CHAP || \ + citype != (opt)) \ + goto bad; \ + GETSHORT(cishort, p); \ + if (cishort != PPP_CHAP) \ + goto bad; \ + GETCHAR(cichar, p); \ + if (cichar != (CHAP_DIGEST(val))) \ + goto bad; \ + } +#endif /* CHAP_SUPPORT */ +#define ACKCILONG(opt, neg, val) \ + if (neg) { \ + if ((len -= CILEN_LONG) < 0) \ + goto bad; \ + GETCHAR(citype, p); \ + GETCHAR(cilen, p); \ + if (cilen != CILEN_LONG || \ + citype != opt) \ + goto bad; \ + GETLONG(cilong, p); \ + if (cilong != val) \ + goto bad; \ + } +#if LQR_SUPPORT +#define ACKCILQR(opt, neg, val) \ + if (neg) { \ + if ((len -= CILEN_LQR) < 0) \ + goto bad; \ + GETCHAR(citype, p); \ + GETCHAR(cilen, p); \ + if (cilen != CILEN_LQR || \ + citype != opt) \ + goto bad; \ + GETSHORT(cishort, p); \ + if (cishort != PPP_LQR) \ + goto bad; \ + GETLONG(cilong, p); \ + if (cilong != val) \ + goto bad; \ + } +#endif /* LQR_SUPPORT */ +#define ACKCIENDP(opt, neg, class, val, vlen) \ + if (neg) { \ + int i; \ + if ((len -= CILEN_CHAR + vlen) < 0) \ + goto bad; \ + GETCHAR(citype, p); \ + GETCHAR(cilen, p); \ + if (cilen != CILEN_CHAR + vlen || \ + citype != opt) \ + goto bad; \ + GETCHAR(cichar, p); \ + if (cichar != class) \ + goto bad; \ + for (i = 0; i < vlen; ++i) { \ + GETCHAR(cichar, p); \ + if (cichar != val[i]) \ + goto bad; \ + } \ + } + + ACKCISHORT(CI_MRU, go->neg_mru && go->mru != PPP_DEFMRU, go->mru); + ACKCILONG(CI_ASYNCMAP, go->neg_asyncmap && go->asyncmap != 0xFFFFFFFF, + go->asyncmap); +#if EAP_SUPPORT + ACKCISHORT(CI_AUTHTYPE, go->neg_eap, PPP_EAP); +#endif /* EAP_SUPPORT */ +#if CHAP_SUPPORT /* cannot be improved, embedding a directive within macro arguments is not portable */ +#if EAP_SUPPORT + ACKCICHAP(CI_AUTHTYPE, !go->neg_eap && go->neg_chap, go->chap_mdtype); +#endif /* EAP_SUPPORT */ +#if !EAP_SUPPORT + ACKCICHAP(CI_AUTHTYPE, go->neg_chap, go->chap_mdtype); +#endif /* !EAP_SUPPORT */ +#endif /* CHAP_SUPPORT */ +#if PAP_SUPPORT /* cannot be improved, embedding a directive within macro arguments is not portable */ +#if EAP_SUPPORT && CHAP_SUPPORT + ACKCISHORT(CI_AUTHTYPE, !go->neg_eap && !go->neg_chap && go->neg_upap, PPP_PAP); +#endif /* EAP_SUPPORT && CHAP_SUPPORT */ +#if EAP_SUPPORT && !CHAP_SUPPORT + ACKCISHORT(CI_AUTHTYPE, !go->neg_eap && go->neg_upap, PPP_PAP); +#endif /* EAP_SUPPORT && !CHAP_SUPPORT */ +#if !EAP_SUPPORT && CHAP_SUPPORT + ACKCISHORT(CI_AUTHTYPE, !go->neg_chap && go->neg_upap, PPP_PAP); +#endif /* !EAP_SUPPORT && CHAP_SUPPORT */ +#if !EAP_SUPPORT && !CHAP_SUPPORT + ACKCISHORT(CI_AUTHTYPE, go->neg_upap, PPP_PAP); +#endif /* !EAP_SUPPORT && !CHAP_SUPPORT */ +#endif /* PAP_SUPPORT */ +#if LQR_SUPPORT + ACKCILQR(CI_QUALITY, go->neg_lqr, go->lqr_period); +#endif /* LQR_SUPPORT */ + ACKCICHAR(CI_CALLBACK, go->neg_cbcp, CBCP_OPT); + ACKCILONG(CI_MAGICNUMBER, go->neg_magicnumber, go->magicnumber); + ACKCIVOID(CI_PCOMPRESSION, go->neg_pcompression); + ACKCIVOID(CI_ACCOMPRESSION, go->neg_accompression); +#ifdef HAVE_MULTILINK + ACKCISHORT(CI_MRRU, go->neg_mrru, go->mrru); +#endif /* HAVE_MULTILINK */ + ACKCIVOID(CI_SSNHF, go->neg_ssnhf); + ACKCIENDP(CI_EPDISC, go->neg_endpoint, go->endpoint.class_, + go->endpoint.value, go->endpoint.length); + + /* + * If there are any remaining CIs, then this packet is bad. + */ + if (len != 0) + goto bad; + return (1); +bad: + LCPDEBUG(("lcp_acki: received bad Ack!")); + return (0); +} + + +/* + * lcp_nakci - Peer has sent a NAK for some of our CIs. + * This should not modify any state if the Nak is bad + * or if LCP is in the OPENED state. + * + * Returns: + * 0 - Nak was bad. + * 1 - Nak was good. + */ +static int lcp_nakci(fsm *f, u_char *p, int len, int treat_as_reject) { + ppp_pcb *pcb = f->pcb; + lcp_options *go = &pcb->lcp_gotoptions; + lcp_options *wo = &pcb->lcp_wantoptions; + u_char citype, cichar, *next; + u_short cishort; + u32_t cilong; + lcp_options no; /* options we've seen Naks for */ + lcp_options try_; /* options to request next time */ + int looped_back = 0; + int cilen; + + BZERO(&no, sizeof(no)); + try_ = *go; + + /* + * Any Nak'd CIs must be in exactly the same order that we sent. + * Check packet length and CI length at each step. + * If we find any deviations, then this packet is bad. + */ +#define NAKCIVOID(opt, neg) \ + if (go->neg && \ + len >= CILEN_VOID && \ + p[1] == CILEN_VOID && \ + p[0] == opt) { \ + len -= CILEN_VOID; \ + INCPTR(CILEN_VOID, p); \ + no.neg = 1; \ + try_.neg = 0; \ + } +#if CHAP_SUPPORT +#define NAKCICHAP(opt, neg, code) \ + if (go->neg && \ + len >= CILEN_CHAP && \ + p[1] == CILEN_CHAP && \ + p[0] == opt) { \ + len -= CILEN_CHAP; \ + INCPTR(2, p); \ + GETSHORT(cishort, p); \ + GETCHAR(cichar, p); \ + no.neg = 1; \ + code \ + } +#endif /* CHAP_SUPPORT */ +#define NAKCICHAR(opt, neg, code) \ + if (go->neg && \ + len >= CILEN_CHAR && \ + p[1] == CILEN_CHAR && \ + p[0] == opt) { \ + len -= CILEN_CHAR; \ + INCPTR(2, p); \ + GETCHAR(cichar, p); \ + no.neg = 1; \ + code \ + } +#define NAKCISHORT(opt, neg, code) \ + if (go->neg && \ + len >= CILEN_SHORT && \ + p[1] == CILEN_SHORT && \ + p[0] == opt) { \ + len -= CILEN_SHORT; \ + INCPTR(2, p); \ + GETSHORT(cishort, p); \ + no.neg = 1; \ + code \ + } +#define NAKCILONG(opt, neg, code) \ + if (go->neg && \ + len >= CILEN_LONG && \ + p[1] == CILEN_LONG && \ + p[0] == opt) { \ + len -= CILEN_LONG; \ + INCPTR(2, p); \ + GETLONG(cilong, p); \ + no.neg = 1; \ + code \ + } +#if LQR_SUPPORT +#define NAKCILQR(opt, neg, code) \ + if (go->neg && \ + len >= CILEN_LQR && \ + p[1] == CILEN_LQR && \ + p[0] == opt) { \ + len -= CILEN_LQR; \ + INCPTR(2, p); \ + GETSHORT(cishort, p); \ + GETLONG(cilong, p); \ + no.neg = 1; \ + code \ + } +#endif /* LQR_SUPPORT */ +#define NAKCIENDP(opt, neg) \ + if (go->neg && \ + len >= CILEN_CHAR && \ + p[0] == opt && \ + p[1] >= CILEN_CHAR && \ + p[1] <= len) { \ + len -= p[1]; \ + INCPTR(p[1], p); \ + no.neg = 1; \ + try_.neg = 0; \ + } + + /* + * NOTE! There must be no assignments to individual fields of *go in + * the code below. Any such assignment is a BUG! + */ + /* + * We don't care if they want to send us smaller packets than + * we want. Therefore, accept any MRU less than what we asked for, + * but then ignore the new value when setting the MRU in the kernel. + * If they send us a bigger MRU than what we asked, accept it, up to + * the limit of the default MRU we'd get if we didn't negotiate. + */ + if (go->neg_mru && go->mru != PPP_DEFMRU) { + NAKCISHORT(CI_MRU, neg_mru, + if (cishort <= wo->mru || cishort <= PPP_DEFMRU) + try_.mru = cishort; + ); + } + + /* + * Add any characters they want to our (receive-side) asyncmap. + */ + if (go->neg_asyncmap && go->asyncmap != 0xFFFFFFFF) { + NAKCILONG(CI_ASYNCMAP, neg_asyncmap, + try_.asyncmap = go->asyncmap | cilong; + ); + } + + /* + * If they've nak'd our authentication-protocol, check whether + * they are proposing a different protocol, or a different + * hash algorithm for CHAP. + */ + if ((0 +#if CHAP_SUPPORT + || go->neg_chap +#endif /* CHAP_SUPPORT */ +#if PAP_SUPPORT + || go->neg_upap +#endif /* PAP_SUPPORT */ +#if EAP_SUPPORT + || go->neg_eap +#endif /* EAP_SUPPORT */ + ) + && len >= CILEN_SHORT + && p[0] == CI_AUTHTYPE && p[1] >= CILEN_SHORT && p[1] <= len) { + cilen = p[1]; + len -= cilen; +#if CHAP_SUPPORT + no.neg_chap = go->neg_chap; +#endif /* CHAP_SUPPORT */ +#if PAP_SUPPORT + no.neg_upap = go->neg_upap; +#endif /* PAP_SUPPORT */ +#if EAP_SUPPORT + no.neg_eap = go->neg_eap; +#endif /* EAP_SUPPORT */ + INCPTR(2, p); + GETSHORT(cishort, p); + +#if PAP_SUPPORT + if (cishort == PPP_PAP && cilen == CILEN_SHORT) { +#if EAP_SUPPORT + /* If we were asking for EAP, then we need to stop that. */ + if (go->neg_eap) + try_.neg_eap = 0; + else +#endif /* EAP_SUPPORT */ + +#if CHAP_SUPPORT + /* If we were asking for CHAP, then we need to stop that. */ + if (go->neg_chap) + try_.neg_chap = 0; + else +#endif /* CHAP_SUPPORT */ + + /* + * If we weren't asking for CHAP or EAP, then we were asking for + * PAP, in which case this Nak is bad. + */ + goto bad; + } else +#endif /* PAP_SUPPORT */ + +#if CHAP_SUPPORT + if (cishort == PPP_CHAP && cilen == CILEN_CHAP) { + GETCHAR(cichar, p); +#if EAP_SUPPORT + /* Stop asking for EAP, if we were. */ + if (go->neg_eap) { + try_.neg_eap = 0; + /* Try to set up to use their suggestion, if possible */ + if (CHAP_CANDIGEST(go->chap_mdtype, cichar)) + try_.chap_mdtype = CHAP_MDTYPE_D(cichar); + } else +#endif /* EAP_SUPPORT */ + if (go->neg_chap) { + /* + * We were asking for our preferred algorithm, they must + * want something different. + */ + if (cichar != CHAP_DIGEST(go->chap_mdtype)) { + if (CHAP_CANDIGEST(go->chap_mdtype, cichar)) { + /* Use their suggestion if we support it ... */ + try_.chap_mdtype = CHAP_MDTYPE_D(cichar); + } else { + /* ... otherwise, try our next-preferred algorithm. */ + try_.chap_mdtype &= ~(CHAP_MDTYPE(try_.chap_mdtype)); + if (try_.chap_mdtype == MDTYPE_NONE) /* out of algos */ + try_.neg_chap = 0; + } + } else { + /* + * Whoops, they Nak'd our algorithm of choice + * but then suggested it back to us. + */ + goto bad; + } + } else { + /* + * Stop asking for PAP if we were asking for it. + */ +#if PAP_SUPPORT + try_.neg_upap = 0; +#endif /* PAP_SUPPORT */ + } + + } else +#endif /* CHAP_SUPPORT */ + { + +#if EAP_SUPPORT + /* + * If we were asking for EAP, and they're Conf-Naking EAP, + * well, that's just strange. Nobody should do that. + */ + if (cishort == PPP_EAP && cilen == CILEN_SHORT && go->neg_eap) + ppp_dbglog("Unexpected Conf-Nak for EAP"); + + /* + * We don't recognize what they're suggesting. + * Stop asking for what we were asking for. + */ + if (go->neg_eap) + try_.neg_eap = 0; + else +#endif /* EAP_SUPPORT */ + +#if CHAP_SUPPORT + if (go->neg_chap) + try_.neg_chap = 0; + else +#endif /* CHAP_SUPPORT */ + +#if PAP_SUPPORT + if(1) + try_.neg_upap = 0; + else +#endif /* PAP_SUPPORT */ + {} + + p += cilen - CILEN_SHORT; + } + } + +#if LQR_SUPPORT + /* + * If they can't cope with our link quality protocol, we'll have + * to stop asking for LQR. We haven't got any other protocol. + * If they Nak the reporting period, take their value XXX ? + */ + NAKCILQR(CI_QUALITY, neg_lqr, + if (cishort != PPP_LQR) + try_.neg_lqr = 0; + else + try_.lqr_period = cilong; + ); +#endif /* LQR_SUPPORT */ + + /* + * Only implementing CBCP...not the rest of the callback options + */ + NAKCICHAR(CI_CALLBACK, neg_cbcp, + try_.neg_cbcp = 0; + (void)cichar; /* if CHAP support is not compiled, cichar is set but not used, which makes some compilers complaining */ + ); + + /* + * Check for a looped-back line. + */ + NAKCILONG(CI_MAGICNUMBER, neg_magicnumber, + try_.magicnumber = magic(); + looped_back = 1; + ); + + /* + * Peer shouldn't send Nak for protocol compression or + * address/control compression requests; they should send + * a Reject instead. If they send a Nak, treat it as a Reject. + */ + NAKCIVOID(CI_PCOMPRESSION, neg_pcompression); + NAKCIVOID(CI_ACCOMPRESSION, neg_accompression); + +#ifdef HAVE_MULTILINK + /* + * Nak for MRRU option - accept their value if it is smaller + * than the one we want. + */ + if (go->neg_mrru) { + NAKCISHORT(CI_MRRU, neg_mrru, + if (treat_as_reject) + try_.neg_mrru = 0; + else if (cishort <= wo->mrru) + try_.mrru = cishort; + ); + } +#else /* HAVE_MULTILINK */ + LWIP_UNUSED_ARG(treat_as_reject); +#endif /* HAVE_MULTILINK */ + + /* + * Nak for short sequence numbers shouldn't be sent, treat it + * like a reject. + */ + NAKCIVOID(CI_SSNHF, neg_ssnhf); + + /* + * Nak of the endpoint discriminator option is not permitted, + * treat it like a reject. + */ + NAKCIENDP(CI_EPDISC, neg_endpoint); + + /* + * There may be remaining CIs, if the peer is requesting negotiation + * on an option that we didn't include in our request packet. + * If we see an option that we requested, or one we've already seen + * in this packet, then this packet is bad. + * If we wanted to respond by starting to negotiate on the requested + * option(s), we could, but we don't, because except for the + * authentication type and quality protocol, if we are not negotiating + * an option, it is because we were told not to. + * For the authentication type, the Nak from the peer means + * `let me authenticate myself with you' which is a bit pointless. + * For the quality protocol, the Nak means `ask me to send you quality + * reports', but if we didn't ask for them, we don't want them. + * An option we don't recognize represents the peer asking to + * negotiate some option we don't support, so ignore it. + */ + while (len >= CILEN_VOID) { + GETCHAR(citype, p); + GETCHAR(cilen, p); + if (cilen < CILEN_VOID || (len -= cilen) < 0) + goto bad; + next = p + cilen - 2; + + switch (citype) { + case CI_MRU: + if ((go->neg_mru && go->mru != PPP_DEFMRU) + || no.neg_mru || cilen != CILEN_SHORT) + goto bad; + GETSHORT(cishort, p); + if (cishort < PPP_DEFMRU) { + try_.neg_mru = 1; + try_.mru = cishort; + } + break; + case CI_ASYNCMAP: + if ((go->neg_asyncmap && go->asyncmap != 0xFFFFFFFF) + || no.neg_asyncmap || cilen != CILEN_LONG) + goto bad; + break; + case CI_AUTHTYPE: + if (0 +#if CHAP_SUPPORT + || go->neg_chap || no.neg_chap +#endif /* CHAP_SUPPORT */ +#if PAP_SUPPORT + || go->neg_upap || no.neg_upap +#endif /* PAP_SUPPORT */ +#if EAP_SUPPORT + || go->neg_eap || no.neg_eap +#endif /* EAP_SUPPORT */ + ) + goto bad; + break; + case CI_MAGICNUMBER: + if (go->neg_magicnumber || no.neg_magicnumber || + cilen != CILEN_LONG) + goto bad; + break; + case CI_PCOMPRESSION: + if (go->neg_pcompression || no.neg_pcompression + || cilen != CILEN_VOID) + goto bad; + break; + case CI_ACCOMPRESSION: + if (go->neg_accompression || no.neg_accompression + || cilen != CILEN_VOID) + goto bad; + break; +#if LQR_SUPPORT + case CI_QUALITY: + if (go->neg_lqr || no.neg_lqr || cilen != CILEN_LQR) + goto bad; + break; +#endif /* LQR_SUPPORT */ +#ifdef HAVE_MULTILINK + case CI_MRRU: + if (go->neg_mrru || no.neg_mrru || cilen != CILEN_SHORT) + goto bad; + break; +#endif /* HAVE_MULTILINK */ + case CI_SSNHF: + if (go->neg_ssnhf || no.neg_ssnhf || cilen != CILEN_VOID) + goto bad; + try_.neg_ssnhf = 1; + break; + case CI_EPDISC: + if (go->neg_endpoint || no.neg_endpoint || cilen < CILEN_CHAR) + goto bad; + break; + default: + break; + } + p = next; + } + + /* + * OK, the Nak is good. Now we can update state. + * If there are any options left we ignore them. + */ + if (f->state != PPP_FSM_OPENED) { + if (looped_back) { + if (++try_.numloops >= pcb->settings.lcp_loopbackfail) { + ppp_notice("Serial line is looped back."); + pcb->err_code = PPPERR_LOOPBACK; + lcp_close(f->pcb, "Loopback detected"); + } + } else + try_.numloops = 0; + *go = try_; + } + + return 1; + +bad: + LCPDEBUG(("lcp_nakci: received bad Nak!")); + return 0; +} + + +/* + * lcp_rejci - Peer has Rejected some of our CIs. + * This should not modify any state if the Reject is bad + * or if LCP is in the OPENED state. + * + * Returns: + * 0 - Reject was bad. + * 1 - Reject was good. + */ +static int lcp_rejci(fsm *f, u_char *p, int len) { + ppp_pcb *pcb = f->pcb; + lcp_options *go = &pcb->lcp_gotoptions; + u_char cichar; + u_short cishort; + u32_t cilong; + lcp_options try_; /* options to request next time */ + + try_ = *go; + + /* + * Any Rejected CIs must be in exactly the same order that we sent. + * Check packet length and CI length at each step. + * If we find any deviations, then this packet is bad. + */ +#define REJCIVOID(opt, neg) \ + if (go->neg && \ + len >= CILEN_VOID && \ + p[1] == CILEN_VOID && \ + p[0] == opt) { \ + len -= CILEN_VOID; \ + INCPTR(CILEN_VOID, p); \ + try_.neg = 0; \ + } +#define REJCISHORT(opt, neg, val) \ + if (go->neg && \ + len >= CILEN_SHORT && \ + p[1] == CILEN_SHORT && \ + p[0] == opt) { \ + len -= CILEN_SHORT; \ + INCPTR(2, p); \ + GETSHORT(cishort, p); \ + /* Check rejected value. */ \ + if (cishort != val) \ + goto bad; \ + try_.neg = 0; \ + } + +#if CHAP_SUPPORT && EAP_SUPPORT && PAP_SUPPORT +#define REJCICHAP(opt, neg, val) \ + if (go->neg && \ + len >= CILEN_CHAP && \ + p[1] == CILEN_CHAP && \ + p[0] == opt) { \ + len -= CILEN_CHAP; \ + INCPTR(2, p); \ + GETSHORT(cishort, p); \ + GETCHAR(cichar, p); \ + /* Check rejected value. */ \ + if ((cishort != PPP_CHAP) || (cichar != (CHAP_DIGEST(val)))) \ + goto bad; \ + try_.neg = 0; \ + try_.neg_eap = try_.neg_upap = 0; \ + } +#endif /* CHAP_SUPPORT && EAP_SUPPORT && PAP_SUPPORT */ + +#if CHAP_SUPPORT && !EAP_SUPPORT && PAP_SUPPORT +#define REJCICHAP(opt, neg, val) \ + if (go->neg && \ + len >= CILEN_CHAP && \ + p[1] == CILEN_CHAP && \ + p[0] == opt) { \ + len -= CILEN_CHAP; \ + INCPTR(2, p); \ + GETSHORT(cishort, p); \ + GETCHAR(cichar, p); \ + /* Check rejected value. */ \ + if ((cishort != PPP_CHAP) || (cichar != (CHAP_DIGEST(val)))) \ + goto bad; \ + try_.neg = 0; \ + try_.neg_upap = 0; \ + } +#endif /* CHAP_SUPPORT && !EAP_SUPPORT && PAP_SUPPORT */ + +#if CHAP_SUPPORT && EAP_SUPPORT && !PAP_SUPPORT +#define REJCICHAP(opt, neg, val) \ + if (go->neg && \ + len >= CILEN_CHAP && \ + p[1] == CILEN_CHAP && \ + p[0] == opt) { \ + len -= CILEN_CHAP; \ + INCPTR(2, p); \ + GETSHORT(cishort, p); \ + GETCHAR(cichar, p); \ + /* Check rejected value. */ \ + if ((cishort != PPP_CHAP) || (cichar != (CHAP_DIGEST(val)))) \ + goto bad; \ + try_.neg = 0; \ + try_.neg_eap = 0; \ + } +#endif /* CHAP_SUPPORT && EAP_SUPPORT && !PAP_SUPPORT */ + +#if CHAP_SUPPORT && !EAP_SUPPORT && !PAP_SUPPORT +#define REJCICHAP(opt, neg, val) \ + if (go->neg && \ + len >= CILEN_CHAP && \ + p[1] == CILEN_CHAP && \ + p[0] == opt) { \ + len -= CILEN_CHAP; \ + INCPTR(2, p); \ + GETSHORT(cishort, p); \ + GETCHAR(cichar, p); \ + /* Check rejected value. */ \ + if ((cishort != PPP_CHAP) || (cichar != (CHAP_DIGEST(val)))) \ + goto bad; \ + try_.neg = 0; \ + } +#endif /* CHAP_SUPPORT && !EAP_SUPPORT && !PAP_SUPPORT */ + +#define REJCILONG(opt, neg, val) \ + if (go->neg && \ + len >= CILEN_LONG && \ + p[1] == CILEN_LONG && \ + p[0] == opt) { \ + len -= CILEN_LONG; \ + INCPTR(2, p); \ + GETLONG(cilong, p); \ + /* Check rejected value. */ \ + if (cilong != val) \ + goto bad; \ + try_.neg = 0; \ + } +#if LQR_SUPPORT +#define REJCILQR(opt, neg, val) \ + if (go->neg && \ + len >= CILEN_LQR && \ + p[1] == CILEN_LQR && \ + p[0] == opt) { \ + len -= CILEN_LQR; \ + INCPTR(2, p); \ + GETSHORT(cishort, p); \ + GETLONG(cilong, p); \ + /* Check rejected value. */ \ + if (cishort != PPP_LQR || cilong != val) \ + goto bad; \ + try_.neg = 0; \ + } +#endif /* LQR_SUPPORT */ +#define REJCICBCP(opt, neg, val) \ + if (go->neg && \ + len >= CILEN_CBCP && \ + p[1] == CILEN_CBCP && \ + p[0] == opt) { \ + len -= CILEN_CBCP; \ + INCPTR(2, p); \ + GETCHAR(cichar, p); \ + /* Check rejected value. */ \ + if (cichar != val) \ + goto bad; \ + try_.neg = 0; \ + } +#define REJCIENDP(opt, neg, class, val, vlen) \ + if (go->neg && \ + len >= CILEN_CHAR + vlen && \ + p[0] == opt && \ + p[1] == CILEN_CHAR + vlen) { \ + int i; \ + len -= CILEN_CHAR + vlen; \ + INCPTR(2, p); \ + GETCHAR(cichar, p); \ + if (cichar != class) \ + goto bad; \ + for (i = 0; i < vlen; ++i) { \ + GETCHAR(cichar, p); \ + if (cichar != val[i]) \ + goto bad; \ + } \ + try_.neg = 0; \ + } + + REJCISHORT(CI_MRU, neg_mru, go->mru); + REJCILONG(CI_ASYNCMAP, neg_asyncmap, go->asyncmap); +#if EAP_SUPPORT + REJCISHORT(CI_AUTHTYPE, neg_eap, PPP_EAP); + if (!go->neg_eap) { +#endif /* EAP_SUPPORT */ +#if CHAP_SUPPORT + REJCICHAP(CI_AUTHTYPE, neg_chap, go->chap_mdtype); + if (!go->neg_chap) { +#endif /* CHAP_SUPPORT */ +#if PAP_SUPPORT + REJCISHORT(CI_AUTHTYPE, neg_upap, PPP_PAP); +#endif /* PAP_SUPPORT */ +#if CHAP_SUPPORT + } +#endif /* CHAP_SUPPORT */ +#if EAP_SUPPORT + } +#endif /* EAP_SUPPORT */ +#if LQR_SUPPORT + REJCILQR(CI_QUALITY, neg_lqr, go->lqr_period); +#endif /* LQR_SUPPORT */ + REJCICBCP(CI_CALLBACK, neg_cbcp, CBCP_OPT); + REJCILONG(CI_MAGICNUMBER, neg_magicnumber, go->magicnumber); + REJCIVOID(CI_PCOMPRESSION, neg_pcompression); + REJCIVOID(CI_ACCOMPRESSION, neg_accompression); +#ifdef HAVE_MULTILINK + REJCISHORT(CI_MRRU, neg_mrru, go->mrru); +#endif /* HAVE_MULTILINK */ + REJCIVOID(CI_SSNHF, neg_ssnhf); + REJCIENDP(CI_EPDISC, neg_endpoint, go->endpoint.class_, + go->endpoint.value, go->endpoint.length); + + /* + * If there are any remaining CIs, then this packet is bad. + */ + if (len != 0) + goto bad; + /* + * Now we can update state. + */ + if (f->state != PPP_FSM_OPENED) + *go = try_; + return 1; + +bad: + LCPDEBUG(("lcp_rejci: received bad Reject!")); + return 0; +} + + +/* + * lcp_reqci - Check the peer's requested CIs and send appropriate response. + * + * Returns: CONFACK, CONFNAK or CONFREJ and input packet modified + * appropriately. If reject_if_disagree is non-zero, doesn't return + * CONFNAK; returns CONFREJ if it can't return CONFACK. + * + * inp = Requested CIs + * lenp = Length of requested CIs + */ +static int lcp_reqci(fsm *f, u_char *inp, int *lenp, int reject_if_disagree) { + ppp_pcb *pcb = f->pcb; + lcp_options *go = &pcb->lcp_gotoptions; + lcp_options *ho = &pcb->lcp_hisoptions; + lcp_options *ao = &pcb->lcp_allowoptions; + u_char *cip, *next; /* Pointer to current and next CIs */ + int cilen, citype, cichar; /* Parsed len, type, char value */ + u_short cishort; /* Parsed short value */ + u32_t cilong; /* Parse long value */ + int rc = CONFACK; /* Final packet return code */ + int orc; /* Individual option return code */ + u_char *p; /* Pointer to next char to parse */ + u_char *rejp; /* Pointer to next char in reject frame */ + struct pbuf *nakp; /* Nak buffer */ + u_char *nakoutp; /* Pointer to next char in Nak frame */ + int l = *lenp; /* Length left */ + + /* + * Reset all his options. + */ + BZERO(ho, sizeof(*ho)); + + /* + * Process all his options. + */ + next = inp; + nakp = pbuf_alloc(PBUF_RAW, (u16_t)(PPP_CTRL_PBUF_MAX_SIZE), PPP_CTRL_PBUF_TYPE); + if(NULL == nakp) + return 0; + if(nakp->tot_len != nakp->len) { + pbuf_free(nakp); + return 0; + } + + nakoutp = (u_char*)nakp->payload; + rejp = inp; + while (l) { + orc = CONFACK; /* Assume success */ + cip = p = next; /* Remember begining of CI */ + if (l < 2 || /* Not enough data for CI header or */ + p[1] < 2 || /* CI length too small or */ + p[1] > l) { /* CI length too big? */ + LCPDEBUG(("lcp_reqci: bad CI length!")); + orc = CONFREJ; /* Reject bad CI */ + cilen = l; /* Reject till end of packet */ + l = 0; /* Don't loop again */ + citype = 0; + goto endswitch; + } + GETCHAR(citype, p); /* Parse CI type */ + GETCHAR(cilen, p); /* Parse CI length */ + l -= cilen; /* Adjust remaining length */ + next += cilen; /* Step to next CI */ + + switch (citype) { /* Check CI type */ + case CI_MRU: + if (!ao->neg_mru || /* Allow option? */ + cilen != CILEN_SHORT) { /* Check CI length */ + orc = CONFREJ; /* Reject CI */ + break; + } + GETSHORT(cishort, p); /* Parse MRU */ + + /* + * He must be able to receive at least our minimum. + * No need to check a maximum. If he sends a large number, + * we'll just ignore it. + */ + if (cishort < PPP_MINMRU) { + orc = CONFNAK; /* Nak CI */ + PUTCHAR(CI_MRU, nakoutp); + PUTCHAR(CILEN_SHORT, nakoutp); + PUTSHORT(PPP_MINMRU, nakoutp); /* Give him a hint */ + break; + } + ho->neg_mru = 1; /* Remember he sent MRU */ + ho->mru = cishort; /* And remember value */ + break; + + case CI_ASYNCMAP: + if (!ao->neg_asyncmap || + cilen != CILEN_LONG) { + orc = CONFREJ; + break; + } + GETLONG(cilong, p); + + /* + * Asyncmap must have set at least the bits + * which are set in lcp_allowoptions[unit].asyncmap. + */ + if ((ao->asyncmap & ~cilong) != 0) { + orc = CONFNAK; + PUTCHAR(CI_ASYNCMAP, nakoutp); + PUTCHAR(CILEN_LONG, nakoutp); + PUTLONG(ao->asyncmap | cilong, nakoutp); + break; + } + ho->neg_asyncmap = 1; + ho->asyncmap = cilong; + break; + + case CI_AUTHTYPE: + if (cilen < CILEN_SHORT || + !(0 +#if PAP_SUPPORT + || ao->neg_upap +#endif /* PAP_SUPPORT */ +#if CHAP_SUPPORT + || ao->neg_chap +#endif /* CHAP_SUPPORT */ +#if EAP_SUPPORT + || ao->neg_eap +#endif /* EAP_SUPPORT */ + )) { + /* + * Reject the option if we're not willing to authenticate. + */ + ppp_dbglog("No auth is possible"); + orc = CONFREJ; + break; + } + GETSHORT(cishort, p); + + /* + * Authtype must be PAP, CHAP, or EAP. + * + * Note: if more than one of ao->neg_upap, ao->neg_chap, and + * ao->neg_eap are set, and the peer sends a Configure-Request + * with two or more authenticate-protocol requests, then we will + * reject the second request. + * Whether we end up doing CHAP, UPAP, or EAP depends then on + * the ordering of the CIs in the peer's Configure-Request. + */ + +#if PAP_SUPPORT + if (cishort == PPP_PAP) { + /* we've already accepted CHAP or EAP */ + if (0 +#if CHAP_SUPPORT + || ho->neg_chap +#endif /* CHAP_SUPPORT */ +#if EAP_SUPPORT + || ho->neg_eap +#endif /* EAP_SUPPORT */ + || cilen != CILEN_SHORT) { + LCPDEBUG(("lcp_reqci: rcvd AUTHTYPE PAP, rejecting...")); + orc = CONFREJ; + break; + } + if (!ao->neg_upap) { /* we don't want to do PAP */ + orc = CONFNAK; /* NAK it and suggest CHAP or EAP */ + PUTCHAR(CI_AUTHTYPE, nakoutp); +#if EAP_SUPPORT + if (ao->neg_eap) { + PUTCHAR(CILEN_SHORT, nakoutp); + PUTSHORT(PPP_EAP, nakoutp); + } else { +#endif /* EAP_SUPPORT */ +#if CHAP_SUPPORT + PUTCHAR(CILEN_CHAP, nakoutp); + PUTSHORT(PPP_CHAP, nakoutp); + PUTCHAR(CHAP_DIGEST(ao->chap_mdtype), nakoutp); +#endif /* CHAP_SUPPORT */ +#if EAP_SUPPORT + } +#endif /* EAP_SUPPORT */ + break; + } + ho->neg_upap = 1; + break; + } +#endif /* PAP_SUPPORT */ +#if CHAP_SUPPORT + if (cishort == PPP_CHAP) { + /* we've already accepted PAP or EAP */ + if ( +#if PAP_SUPPORT + ho->neg_upap || +#endif /* PAP_SUPPORT */ +#if EAP_SUPPORT + ho->neg_eap || +#endif /* EAP_SUPPORT */ + cilen != CILEN_CHAP) { + LCPDEBUG(("lcp_reqci: rcvd AUTHTYPE CHAP, rejecting...")); + orc = CONFREJ; + break; + } + if (!ao->neg_chap) { /* we don't want to do CHAP */ + orc = CONFNAK; /* NAK it and suggest EAP or PAP */ + PUTCHAR(CI_AUTHTYPE, nakoutp); + PUTCHAR(CILEN_SHORT, nakoutp); +#if EAP_SUPPORT + if (ao->neg_eap) { + PUTSHORT(PPP_EAP, nakoutp); + } else +#endif /* EAP_SUPPORT */ +#if PAP_SUPPORT + if(1) { + PUTSHORT(PPP_PAP, nakoutp); + } + else +#endif /* PAP_SUPPORT */ + {} + break; + } + GETCHAR(cichar, p); /* get digest type */ + if (!(CHAP_CANDIGEST(ao->chap_mdtype, cichar))) { + /* + * We can't/won't do the requested type, + * suggest something else. + */ + orc = CONFNAK; + PUTCHAR(CI_AUTHTYPE, nakoutp); + PUTCHAR(CILEN_CHAP, nakoutp); + PUTSHORT(PPP_CHAP, nakoutp); + PUTCHAR(CHAP_DIGEST(ao->chap_mdtype), nakoutp); + break; + } + ho->chap_mdtype = CHAP_MDTYPE_D(cichar); /* save md type */ + ho->neg_chap = 1; + break; + } +#endif /* CHAP_SUPPORT */ +#if EAP_SUPPORT + if (cishort == PPP_EAP) { + /* we've already accepted CHAP or PAP */ + if ( +#if CHAP_SUPPORT + ho->neg_chap || +#endif /* CHAP_SUPPORT */ +#if PAP_SUPPORT + ho->neg_upap || +#endif /* PAP_SUPPORT */ + cilen != CILEN_SHORT) { + LCPDEBUG(("lcp_reqci: rcvd AUTHTYPE EAP, rejecting...")); + orc = CONFREJ; + break; + } + if (!ao->neg_eap) { /* we don't want to do EAP */ + orc = CONFNAK; /* NAK it and suggest CHAP or PAP */ + PUTCHAR(CI_AUTHTYPE, nakoutp); +#if CHAP_SUPPORT + if (ao->neg_chap) { + PUTCHAR(CILEN_CHAP, nakoutp); + PUTSHORT(PPP_CHAP, nakoutp); + PUTCHAR(CHAP_DIGEST(ao->chap_mdtype), nakoutp); + } else +#endif /* CHAP_SUPPORT */ +#if PAP_SUPPORT + if(1) { + PUTCHAR(CILEN_SHORT, nakoutp); + PUTSHORT(PPP_PAP, nakoutp); + } else +#endif /* PAP_SUPPORT */ + {} + break; + } + ho->neg_eap = 1; + break; + } +#endif /* EAP_SUPPORT */ + + /* + * We don't recognize the protocol they're asking for. + * Nak it with something we're willing to do. + * (At this point we know ao->neg_upap || ao->neg_chap || + * ao->neg_eap.) + */ + orc = CONFNAK; + PUTCHAR(CI_AUTHTYPE, nakoutp); + +#if EAP_SUPPORT + if (ao->neg_eap) { + PUTCHAR(CILEN_SHORT, nakoutp); + PUTSHORT(PPP_EAP, nakoutp); + } else +#endif /* EAP_SUPPORT */ +#if CHAP_SUPPORT + if (ao->neg_chap) { + PUTCHAR(CILEN_CHAP, nakoutp); + PUTSHORT(PPP_CHAP, nakoutp); + PUTCHAR(CHAP_DIGEST(ao->chap_mdtype), nakoutp); + } else +#endif /* CHAP_SUPPORT */ +#if PAP_SUPPORT + if(1) { + PUTCHAR(CILEN_SHORT, nakoutp); + PUTSHORT(PPP_PAP, nakoutp); + } else +#endif /* PAP_SUPPORT */ + {} + break; + +#if LQR_SUPPORT + case CI_QUALITY: + if (!ao->neg_lqr || + cilen != CILEN_LQR) { + orc = CONFREJ; + break; + } + + GETSHORT(cishort, p); + GETLONG(cilong, p); + + /* + * Check the protocol and the reporting period. + * XXX When should we Nak this, and what with? + */ + if (cishort != PPP_LQR) { + orc = CONFNAK; + PUTCHAR(CI_QUALITY, nakoutp); + PUTCHAR(CILEN_LQR, nakoutp); + PUTSHORT(PPP_LQR, nakoutp); + PUTLONG(ao->lqr_period, nakoutp); + break; + } + break; +#endif /* LQR_SUPPORT */ + + case CI_MAGICNUMBER: + if (!(ao->neg_magicnumber || go->neg_magicnumber) || + cilen != CILEN_LONG) { + orc = CONFREJ; + break; + } + GETLONG(cilong, p); + + /* + * He must have a different magic number. + */ + if (go->neg_magicnumber && + cilong == go->magicnumber) { + cilong = magic(); /* Don't put magic() inside macro! */ + orc = CONFNAK; + PUTCHAR(CI_MAGICNUMBER, nakoutp); + PUTCHAR(CILEN_LONG, nakoutp); + PUTLONG(cilong, nakoutp); + break; + } + ho->neg_magicnumber = 1; + ho->magicnumber = cilong; + break; + + + case CI_PCOMPRESSION: + if (!ao->neg_pcompression || + cilen != CILEN_VOID) { + orc = CONFREJ; + break; + } + ho->neg_pcompression = 1; + break; + + case CI_ACCOMPRESSION: + if (!ao->neg_accompression || + cilen != CILEN_VOID) { + orc = CONFREJ; + break; + } + ho->neg_accompression = 1; + break; + +#ifdef HAVE_MULTILINK + case CI_MRRU: + if (!ao->neg_mrru + || !multilink + || cilen != CILEN_SHORT) { + orc = CONFREJ; + break; + } + + GETSHORT(cishort, p); + /* possibly should insist on a minimum/maximum MRRU here */ + ho->neg_mrru = 1; + ho->mrru = cishort; + break; +#endif /* HAVE_MULTILINK */ + + case CI_SSNHF: + if (!ao->neg_ssnhf +#ifdef HAVE_MULTILINK + || !multilink +#endif /* HAVE_MULTILINK */ + || cilen != CILEN_VOID) { + orc = CONFREJ; + break; + } + ho->neg_ssnhf = 1; + break; + + case CI_EPDISC: + if (!ao->neg_endpoint || + cilen < CILEN_CHAR || + cilen > CILEN_CHAR + MAX_ENDP_LEN) { + orc = CONFREJ; + break; + } + GETCHAR(cichar, p); + cilen -= CILEN_CHAR; + ho->neg_endpoint = 1; + ho->endpoint.class_ = cichar; + ho->endpoint.length = cilen; + MEMCPY(ho->endpoint.value, p, cilen); + INCPTR(cilen, p); + break; + + default: + LCPDEBUG(("lcp_reqci: rcvd unknown option %d", citype)); + orc = CONFREJ; + break; + } + +endswitch: + if (orc == CONFACK && /* Good CI */ + rc != CONFACK) /* but prior CI wasnt? */ + continue; /* Don't send this one */ + + if (orc == CONFNAK) { /* Nak this CI? */ + if (reject_if_disagree /* Getting fed up with sending NAKs? */ + && citype != CI_MAGICNUMBER) { + orc = CONFREJ; /* Get tough if so */ + } else { + if (rc == CONFREJ) /* Rejecting prior CI? */ + continue; /* Don't send this one */ + rc = CONFNAK; + } + } + if (orc == CONFREJ) { /* Reject this CI */ + rc = CONFREJ; + if (cip != rejp) /* Need to move rejected CI? */ + MEMCPY(rejp, cip, cilen); /* Move it */ + INCPTR(cilen, rejp); /* Update output pointer */ + } + } + + /* + * If we wanted to send additional NAKs (for unsent CIs), the + * code would go here. The extra NAKs would go at *nakoutp. + * At present there are no cases where we want to ask the + * peer to negotiate an option. + */ + + switch (rc) { + case CONFACK: + *lenp = next - inp; + break; + case CONFNAK: + /* + * Copy the Nak'd options from the nak buffer to the caller's buffer. + */ + *lenp = nakoutp - (u_char*)nakp->payload; + MEMCPY(inp, nakp->payload, *lenp); + break; + case CONFREJ: + *lenp = rejp - inp; + break; + default: + break; + } + + pbuf_free(nakp); + LCPDEBUG(("lcp_reqci: returning CONF%s.", CODENAME(rc))); + return (rc); /* Return final code */ +} + + +/* + * lcp_up - LCP has come UP. + */ +static void lcp_up(fsm *f) { + ppp_pcb *pcb = f->pcb; + lcp_options *wo = &pcb->lcp_wantoptions; + lcp_options *ho = &pcb->lcp_hisoptions; + lcp_options *go = &pcb->lcp_gotoptions; + lcp_options *ao = &pcb->lcp_allowoptions; + int mtu, mru; + + if (!go->neg_magicnumber) + go->magicnumber = 0; + if (!ho->neg_magicnumber) + ho->magicnumber = 0; + + /* + * Set our MTU to the smaller of the MTU we wanted and + * the MRU our peer wanted. If we negotiated an MRU, + * set our MRU to the larger of value we wanted and + * the value we got in the negotiation. + * Note on the MTU: the link MTU can be the MRU the peer wanted, + * the interface MTU is set to the lowest of that, the + * MTU we want to use, and our link MRU. + */ + mtu = ho->neg_mru? ho->mru: PPP_MRU; + mru = go->neg_mru? LWIP_MAX(wo->mru, go->mru): PPP_MRU; +#ifdef HAVE_MULTILINK + if (!(multilink && go->neg_mrru && ho->neg_mrru)) +#endif /* HAVE_MULTILINK */ + netif_set_mtu(pcb, LWIP_MIN(LWIP_MIN(mtu, mru), ao->mru)); + ppp_send_config(pcb, mtu, + (ho->neg_asyncmap? ho->asyncmap: 0xffffffff), + ho->neg_pcompression, ho->neg_accompression); + ppp_recv_config(pcb, mru, + (pcb->settings.lax_recv? 0: go->neg_asyncmap? go->asyncmap: 0xffffffff), + go->neg_pcompression, go->neg_accompression); + + if (ho->neg_mru) + pcb->peer_mru = ho->mru; + + lcp_echo_lowerup(f->pcb); /* Enable echo messages */ + + link_established(pcb); +} + + +/* + * lcp_down - LCP has gone DOWN. + * + * Alert other protocols. + */ +static void lcp_down(fsm *f) { + ppp_pcb *pcb = f->pcb; + lcp_options *go = &pcb->lcp_gotoptions; + + lcp_echo_lowerdown(f->pcb); + + link_down(pcb); + + ppp_send_config(pcb, PPP_MRU, 0xffffffff, 0, 0); + ppp_recv_config(pcb, PPP_MRU, + (go->neg_asyncmap? go->asyncmap: 0xffffffff), + go->neg_pcompression, go->neg_accompression); + pcb->peer_mru = PPP_MRU; +} + + +/* + * lcp_starting - LCP needs the lower layer up. + */ +static void lcp_starting(fsm *f) { + ppp_pcb *pcb = f->pcb; + link_required(pcb); +} + + +/* + * lcp_finished - LCP has finished with the lower layer. + */ +static void lcp_finished(fsm *f) { + ppp_pcb *pcb = f->pcb; + link_terminated(pcb); +} + + +#if PRINTPKT_SUPPORT +/* + * lcp_printpkt - print the contents of an LCP packet. + */ +static const char* const lcp_codenames[] = { + "ConfReq", "ConfAck", "ConfNak", "ConfRej", + "TermReq", "TermAck", "CodeRej", "ProtRej", + "EchoReq", "EchoRep", "DiscReq", "Ident", + "TimeRem" +}; + +static int lcp_printpkt(const u_char *p, int plen, + void (*printer) (void *, const char *, ...), void *arg) { + int code, id, len, olen, i; + const u_char *pstart, *optend; + u_short cishort; + u32_t cilong; + + if (plen < HEADERLEN) + return 0; + pstart = p; + GETCHAR(code, p); + GETCHAR(id, p); + GETSHORT(len, p); + if (len < HEADERLEN || len > plen) + return 0; + + if (code >= 1 && code <= (int)LWIP_ARRAYSIZE(lcp_codenames)) + printer(arg, " %s", lcp_codenames[code-1]); + else + printer(arg, " code=0x%x", code); + printer(arg, " id=0x%x", id); + len -= HEADERLEN; + switch (code) { + case CONFREQ: + case CONFACK: + case CONFNAK: + case CONFREJ: + /* print option list */ + while (len >= 2) { + GETCHAR(code, p); + GETCHAR(olen, p); + p -= 2; + if (olen < 2 || olen > len) { + break; + } + printer(arg, " <"); + len -= olen; + optend = p + olen; + switch (code) { + case CI_MRU: + if (olen == CILEN_SHORT) { + p += 2; + GETSHORT(cishort, p); + printer(arg, "mru %d", cishort); + } + break; + case CI_ASYNCMAP: + if (olen == CILEN_LONG) { + p += 2; + GETLONG(cilong, p); + printer(arg, "asyncmap 0x%x", cilong); + } + break; + case CI_AUTHTYPE: + if (olen >= CILEN_SHORT) { + p += 2; + printer(arg, "auth "); + GETSHORT(cishort, p); + switch (cishort) { +#if PAP_SUPPORT + case PPP_PAP: + printer(arg, "pap"); + break; +#endif /* PAP_SUPPORT */ +#if CHAP_SUPPORT + case PPP_CHAP: + printer(arg, "chap"); + if (p < optend) { + switch (*p) { + case CHAP_MD5: + printer(arg, " MD5"); + ++p; + break; +#if MSCHAP_SUPPORT + case CHAP_MICROSOFT: + printer(arg, " MS"); + ++p; + break; + + case CHAP_MICROSOFT_V2: + printer(arg, " MS-v2"); + ++p; + break; +#endif /* MSCHAP_SUPPORT */ + default: + break; + } + } + break; +#endif /* CHAP_SUPPORT */ +#if EAP_SUPPORT + case PPP_EAP: + printer(arg, "eap"); + break; +#endif /* EAP_SUPPORT */ + default: + printer(arg, "0x%x", cishort); + } + } + break; +#if LQR_SUPPORT + case CI_QUALITY: + if (olen >= CILEN_SHORT) { + p += 2; + printer(arg, "quality "); + GETSHORT(cishort, p); + switch (cishort) { + case PPP_LQR: + printer(arg, "lqr"); + break; + default: + printer(arg, "0x%x", cishort); + } + } + break; +#endif /* LQR_SUPPORT */ + case CI_CALLBACK: + if (olen >= CILEN_CHAR) { + p += 2; + printer(arg, "callback "); + GETCHAR(cishort, p); + switch (cishort) { + case CBCP_OPT: + printer(arg, "CBCP"); + break; + default: + printer(arg, "0x%x", cishort); + } + } + break; + case CI_MAGICNUMBER: + if (olen == CILEN_LONG) { + p += 2; + GETLONG(cilong, p); + printer(arg, "magic 0x%x", cilong); + } + break; + case CI_PCOMPRESSION: + if (olen == CILEN_VOID) { + p += 2; + printer(arg, "pcomp"); + } + break; + case CI_ACCOMPRESSION: + if (olen == CILEN_VOID) { + p += 2; + printer(arg, "accomp"); + } + break; + case CI_MRRU: + if (olen == CILEN_SHORT) { + p += 2; + GETSHORT(cishort, p); + printer(arg, "mrru %d", cishort); + } + break; + case CI_SSNHF: + if (olen == CILEN_VOID) { + p += 2; + printer(arg, "ssnhf"); + } + break; + case CI_EPDISC: +#ifdef HAVE_MULTILINK + if (olen >= CILEN_CHAR) { + struct epdisc epd; + p += 2; + GETCHAR(epd.class, p); + epd.length = olen - CILEN_CHAR; + if (epd.length > MAX_ENDP_LEN) + epd.length = MAX_ENDP_LEN; + if (epd.length > 0) { + MEMCPY(epd.value, p, epd.length); + p += epd.length; + } + printer(arg, "endpoint [%s]", epdisc_to_str(&epd)); + } +#else + printer(arg, "endpoint"); +#endif + break; + default: + break; + } + while (p < optend) { + GETCHAR(code, p); + printer(arg, " %.2x", code); + } + printer(arg, ">"); + } + break; + + case TERMACK: + case TERMREQ: + if (len > 0 && *p >= ' ' && *p < 0x7f) { + printer(arg, " "); + ppp_print_string(p, len, printer, arg); + p += len; + len = 0; + } + break; + + case ECHOREQ: + case ECHOREP: + case DISCREQ: + if (len >= 4) { + GETLONG(cilong, p); + printer(arg, " magic=0x%x", cilong); + len -= 4; + } + break; + + case IDENTIF: + case TIMEREM: + if (len >= 4) { + GETLONG(cilong, p); + printer(arg, " magic=0x%x", cilong); + len -= 4; + } + if (code == TIMEREM) { + if (len < 4) + break; + GETLONG(cilong, p); + printer(arg, " seconds=%u", cilong); + len -= 4; + } + if (len > 0) { + printer(arg, " "); + ppp_print_string(p, len, printer, arg); + p += len; + len = 0; + } + break; + default: + break; + } + + /* print the rest of the bytes in the packet */ + for (i = 0; i < len && i < 32; ++i) { + GETCHAR(code, p); + printer(arg, " %.2x", code); + } + if (i < len) { + printer(arg, " ..."); + p += len - i; + } + + return p - pstart; +} +#endif /* PRINTPKT_SUPPORT */ + +/* + * Time to shut down the link because there is nothing out there. + */ + +static void LcpLinkFailure(fsm *f) { + ppp_pcb *pcb = f->pcb; + if (f->state == PPP_FSM_OPENED) { + ppp_info("No response to %d echo-requests", pcb->lcp_echos_pending); + ppp_notice("Serial link appears to be disconnected."); + pcb->err_code = PPPERR_PEERDEAD; + lcp_close(pcb, "Peer not responding"); + } +} + +/* + * Timer expired for the LCP echo requests from this process. + */ + +static void LcpEchoCheck(fsm *f) { + ppp_pcb *pcb = f->pcb; + + LcpSendEchoRequest (f); + if (f->state != PPP_FSM_OPENED) + return; + + /* + * Start the timer for the next interval. + */ + if (pcb->lcp_echo_timer_running) + ppp_warn("assertion lcp_echo_timer_running==0 failed"); + TIMEOUT (LcpEchoTimeout, f, pcb->settings.lcp_echo_interval); + pcb->lcp_echo_timer_running = 1; +} + +/* + * LcpEchoTimeout - Timer expired on the LCP echo + */ + +static void LcpEchoTimeout(void *arg) { + fsm *f = (fsm*)arg; + ppp_pcb *pcb = f->pcb; + if (pcb->lcp_echo_timer_running != 0) { + pcb->lcp_echo_timer_running = 0; + LcpEchoCheck ((fsm *) arg); + } +} + +/* + * LcpEchoReply - LCP has received a reply to the echo + */ + +static void lcp_received_echo_reply(fsm *f, int id, u_char *inp, int len) { + ppp_pcb *pcb = f->pcb; + lcp_options *go = &pcb->lcp_gotoptions; + u32_t magic_val; + LWIP_UNUSED_ARG(id); + + /* Check the magic number - don't count replies from ourselves. */ + if (len < 4) { + ppp_dbglog("lcp: received short Echo-Reply, length %d", len); + return; + } + GETLONG(magic_val, inp); + if (go->neg_magicnumber + && magic_val == go->magicnumber) { + ppp_warn("appear to have received our own echo-reply!"); + return; + } + + /* Reset the number of outstanding echo frames */ + pcb->lcp_echos_pending = 0; +} + +/* + * LcpSendEchoRequest - Send an echo request frame to the peer + */ + +static void LcpSendEchoRequest(fsm *f) { + ppp_pcb *pcb = f->pcb; + lcp_options *go = &pcb->lcp_gotoptions; + u32_t lcp_magic; + u_char pkt[4], *pktp; + + /* + * Detect the failure of the peer at this point. + */ + if (pcb->settings.lcp_echo_fails != 0) { + if (pcb->lcp_echos_pending >= pcb->settings.lcp_echo_fails) { + LcpLinkFailure(f); + pcb->lcp_echos_pending = 0; + } + } + +#if PPP_LCP_ADAPTIVE + /* + * If adaptive echos have been enabled, only send the echo request if + * no traffic was received since the last one. + */ + if (pcb->settings.lcp_echo_adaptive) { + static unsigned int last_pkts_in = 0; + +#if PPP_STATS_SUPPORT + update_link_stats(f->unit); + link_stats_valid = 0; +#endif /* PPP_STATS_SUPPORT */ + + if (link_stats.pkts_in != last_pkts_in) { + last_pkts_in = link_stats.pkts_in; + return; + } + } +#endif + + /* + * Make and send the echo request frame. + */ + if (f->state == PPP_FSM_OPENED) { + lcp_magic = go->magicnumber; + pktp = pkt; + PUTLONG(lcp_magic, pktp); + fsm_sdata(f, ECHOREQ, pcb->lcp_echo_number++, pkt, pktp - pkt); + ++pcb->lcp_echos_pending; + } +} + +/* + * lcp_echo_lowerup - Start the timer for the LCP frame + */ + +static void lcp_echo_lowerup(ppp_pcb *pcb) { + fsm *f = &pcb->lcp_fsm; + + /* Clear the parameters for generating echo frames */ + pcb->lcp_echos_pending = 0; + pcb->lcp_echo_number = 0; + pcb->lcp_echo_timer_running = 0; + + /* If a timeout interval is specified then start the timer */ + if (pcb->settings.lcp_echo_interval != 0) + LcpEchoCheck (f); +} + +/* + * lcp_echo_lowerdown - Stop the timer for the LCP frame + */ + +static void lcp_echo_lowerdown(ppp_pcb *pcb) { + fsm *f = &pcb->lcp_fsm; + + if (pcb->lcp_echo_timer_running != 0) { + UNTIMEOUT (LcpEchoTimeout, f); + pcb->lcp_echo_timer_running = 0; + } +} + +#endif /* PPP_SUPPORT */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/magic.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/magic.c new file mode 100644 index 0000000000000000000000000000000000000000..d0d87c5e55df84198cdc23060e77f279eb4a256b --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/magic.c @@ -0,0 +1,294 @@ +/* + * magic.c - PPP Magic Number routines. + * + * Copyright (c) 1984-2000 Carnegie Mellon University. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The name "Carnegie Mellon University" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For permission or any legal + * details, please contact + * Office of Technology Transfer + * Carnegie Mellon University + * 5000 Forbes Avenue + * Pittsburgh, PA 15213-3890 + * (412) 268-4387, fax: (412) 268-7395 + * tech-transfer@andrew.cmu.edu + * + * 4. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by Computing Services + * at Carnegie Mellon University (http://www.cmu.edu/computing/)." + * + * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO + * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE + * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ +/***************************************************************************** +* randm.c - Random number generator program file. +* +* Copyright (c) 2003 by Marc Boucher, Services Informatiques (MBSI) inc. +* Copyright (c) 1998 by Global Election Systems Inc. +* +* The authors hereby grant permission to use, copy, modify, distribute, +* and license this software and its documentation for any purpose, provided +* that existing copyright notices are retained in all copies and that this +* notice and the following disclaimer are included verbatim in any +* distributions. No written agreement, license, or royalty fee is required +* for any of the authorized uses. +* +* THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS *AS IS* AND ANY EXPRESS OR +* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +* IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +****************************************************************************** +* REVISION HISTORY +* +* 03-01-01 Marc Boucher +* Ported to lwIP. +* 98-06-03 Guy Lancaster , Global Election Systems Inc. +* Extracted from avos. +*****************************************************************************/ + +#include "netif/ppp/ppp_opts.h" +#if PPP_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +#include "netif/ppp/ppp_impl.h" +#include "netif/ppp/magic.h" + +#if PPP_MD5_RANDM /* Using MD5 for better randomness if enabled */ + +#include "netif/ppp/pppcrypt.h" + +#define MD5_HASH_SIZE 16 +static char magic_randpool[MD5_HASH_SIZE]; /* Pool of randomness. */ +static long magic_randcount; /* Pseudo-random incrementer */ +static u32_t magic_randomseed; /* Seed used for random number generation. */ + +/* + * Churn the randomness pool on a random event. Call this early and often + * on random and semi-random system events to build randomness in time for + * usage. For randomly timed events, pass a null pointer and a zero length + * and this will use the system timer and other sources to add randomness. + * If new random data is available, pass a pointer to that and it will be + * included. + * + * Ref: Applied Cryptography 2nd Ed. by Bruce Schneier p. 427 + */ +static void magic_churnrand(char *rand_data, u32_t rand_len) { + lwip_md5_context md5_ctx; + + /* LWIP_DEBUGF(LOG_INFO, ("magic_churnrand: %u@%P\n", rand_len, rand_data)); */ + lwip_md5_init(&md5_ctx); + lwip_md5_starts(&md5_ctx); + lwip_md5_update(&md5_ctx, (u_char *)magic_randpool, sizeof(magic_randpool)); + if (rand_data) { + lwip_md5_update(&md5_ctx, (u_char *)rand_data, rand_len); + } else { + struct { + /* INCLUDE fields for any system sources of randomness */ + u32_t jiffies; +#ifdef LWIP_RAND + u32_t rand; +#endif /* LWIP_RAND */ + } sys_data; + magic_randomseed += sys_jiffies(); + sys_data.jiffies = magic_randomseed; +#ifdef LWIP_RAND + sys_data.rand = LWIP_RAND(); +#endif /* LWIP_RAND */ + /* Load sys_data fields here. */ + lwip_md5_update(&md5_ctx, (u_char *)&sys_data, sizeof(sys_data)); + } + lwip_md5_finish(&md5_ctx, (u_char *)magic_randpool); + lwip_md5_free(&md5_ctx); +/* LWIP_DEBUGF(LOG_INFO, ("magic_churnrand: -> 0\n")); */ +} + +/* + * Initialize the random number generator. + */ +void magic_init(void) { + magic_churnrand(NULL, 0); +} + +/* + * Randomize our random seed value. + */ +void magic_randomize(void) { + magic_churnrand(NULL, 0); +} + +/* + * magic_random_bytes - Fill a buffer with random bytes. + * + * Use the random pool to generate random data. This degrades to pseudo + * random when used faster than randomness is supplied using magic_churnrand(). + * Note: It's important that there be sufficient randomness in magic_randpool + * before this is called for otherwise the range of the result may be + * narrow enough to make a search feasible. + * + * Ref: Applied Cryptography 2nd Ed. by Bruce Schneier p. 427 + * + * XXX Why does he not just call magic_churnrand() for each block? Probably + * so that you don't ever publish the seed which could possibly help + * predict future values. + * XXX Why don't we preserve md5 between blocks and just update it with + * magic_randcount each time? Probably there is a weakness but I wish that + * it was documented. + */ +void magic_random_bytes(unsigned char *buf, u32_t buf_len) { + lwip_md5_context md5_ctx; + u_char tmp[MD5_HASH_SIZE]; + u32_t n; + + while (buf_len > 0) { + lwip_md5_init(&md5_ctx); + lwip_md5_starts(&md5_ctx); + lwip_md5_update(&md5_ctx, (u_char *)magic_randpool, sizeof(magic_randpool)); + lwip_md5_update(&md5_ctx, (u_char *)&magic_randcount, sizeof(magic_randcount)); + lwip_md5_finish(&md5_ctx, tmp); + lwip_md5_free(&md5_ctx); + magic_randcount++; + n = LWIP_MIN(buf_len, MD5_HASH_SIZE); + MEMCPY(buf, tmp, n); + buf += n; + buf_len -= n; + } +} + +/* + * Return a new random number. + */ +u32_t magic(void) { + u32_t new_rand; + + magic_random_bytes((unsigned char *)&new_rand, sizeof(new_rand)); + + return new_rand; +} + +#else /* PPP_MD5_RANDM */ + +/*****************************/ +/*** LOCAL DATA STRUCTURES ***/ +/*****************************/ +#ifndef LWIP_RAND +static int magic_randomized; /* Set when truely randomized. */ +#endif /* LWIP_RAND */ +static u32_t magic_randomseed; /* Seed used for random number generation. */ + + +/***********************************/ +/*** PUBLIC FUNCTION DEFINITIONS ***/ +/***********************************/ + +/* + * Initialize the random number generator. + * + * Here we attempt to compute a random number seed but even if + * it isn't random, we'll randomize it later. + * + * The current method uses the fields from the real time clock, + * the idle process counter, the millisecond counter, and the + * hardware timer tick counter. When this is invoked + * in startup(), then the idle counter and timer values may + * repeat after each boot and the real time clock may not be + * operational. Thus we call it again on the first random + * event. + */ +void magic_init(void) { + magic_randomseed += sys_jiffies(); +#ifndef LWIP_RAND + /* Initialize the Borland random number generator. */ + srand((unsigned)magic_randomseed); +#endif /* LWIP_RAND */ +} + +/* + * magic_init - Initialize the magic number generator. + * + * Randomize our random seed value. Here we use the fact that + * this function is called at *truely random* times by the polling + * and network functions. Here we only get 16 bits of new random + * value but we use the previous value to randomize the other 16 + * bits. + */ +void magic_randomize(void) { +#ifndef LWIP_RAND + if (!magic_randomized) { + magic_randomized = !0; + magic_init(); + /* The initialization function also updates the seed. */ + } else { +#endif /* LWIP_RAND */ + magic_randomseed += sys_jiffies(); +#ifndef LWIP_RAND + } +#endif /* LWIP_RAND */ +} + +/* + * Return a new random number. + * + * Here we use the Borland rand() function to supply a pseudo random + * number which we make truely random by combining it with our own + * seed which is randomized by truely random events. + * Thus the numbers will be truely random unless there have been no + * operator or network events in which case it will be pseudo random + * seeded by the real time clock. + */ +u32_t magic(void) { +#ifdef LWIP_RAND + return LWIP_RAND() + magic_randomseed; +#else /* LWIP_RAND */ + return ((u32_t)rand() << 16) + (u32_t)rand() + magic_randomseed; +#endif /* LWIP_RAND */ +} + +/* + * magic_random_bytes - Fill a buffer with random bytes. + */ +void magic_random_bytes(unsigned char *buf, u32_t buf_len) { + u32_t new_rand, n; + + while (buf_len > 0) { + new_rand = magic(); + n = LWIP_MIN(buf_len, sizeof(new_rand)); + MEMCPY(buf, &new_rand, n); + buf += n; + buf_len -= n; + } +} +#endif /* PPP_MD5_RANDM */ + +/* + * Return a new random number between 0 and (2^pow)-1 included. + */ +u32_t magic_pow(u8_t pow) { + return magic() & ~(~0UL<. + * Copyright (c) 2002,2003,2004 Google, Inc. + * All rights reserved. + * + * License: + * Permission to use, copy, modify, and distribute this software and its + * documentation is hereby granted, provided that the above copyright + * notice appears in all copies. This software is provided without any + * warranty, express or implied. + * + * Changelog: + * 08/12/05 - Matt Domsch + * Only need extra skb padding on transmit, not receive. + * 06/18/04 - Matt Domsch , Oleg Makarenko + * Use Linux kernel 2.6 arc4 and sha1 routines rather than + * providing our own. + * 2/15/04 - TS: added #include and testing for Kernel + * version before using + * MOD_DEC_USAGE_COUNT/MOD_INC_USAGE_COUNT which are + * deprecated in 2.6 + */ + +#include "netif/ppp/ppp_opts.h" +#if PPP_SUPPORT && MPPE_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +#include + +#include "lwip/err.h" + +#include "netif/ppp/ppp_impl.h" +#include "netif/ppp/ccp.h" +#include "netif/ppp/mppe.h" +#include "netif/ppp/pppdebug.h" +#include "netif/ppp/pppcrypt.h" + +#define SHA1_SIGNATURE_SIZE 20 + +/* ppp_mppe_state.bits definitions */ +#define MPPE_BIT_A 0x80 /* Encryption table were (re)inititalized */ +#define MPPE_BIT_B 0x40 /* MPPC only (not implemented) */ +#define MPPE_BIT_C 0x20 /* MPPC only (not implemented) */ +#define MPPE_BIT_D 0x10 /* This is an encrypted frame */ + +#define MPPE_BIT_FLUSHED MPPE_BIT_A +#define MPPE_BIT_ENCRYPTED MPPE_BIT_D + +#define MPPE_BITS(p) ((p)[0] & 0xf0) +#define MPPE_CCOUNT(p) ((((p)[0] & 0x0f) << 8) + (p)[1]) +#define MPPE_CCOUNT_SPACE 0x1000 /* The size of the ccount space */ + +#define MPPE_OVHD 2 /* MPPE overhead/packet */ +#define SANITY_MAX 1600 /* Max bogon factor we will tolerate */ + +/* + * Perform the MPPE rekey algorithm, from RFC 3078, sec. 7.3. + * Well, not what's written there, but rather what they meant. + */ +static void mppe_rekey(ppp_mppe_state * state, int initial_key) +{ + lwip_sha1_context sha1_ctx; + u8_t sha1_digest[SHA1_SIGNATURE_SIZE]; + + /* + * Key Derivation, from RFC 3078, RFC 3079. + * Equivalent to Get_Key() for MS-CHAP as described in RFC 3079. + */ + lwip_sha1_init(&sha1_ctx); + lwip_sha1_starts(&sha1_ctx); + lwip_sha1_update(&sha1_ctx, state->master_key, state->keylen); + lwip_sha1_update(&sha1_ctx, mppe_sha1_pad1, SHA1_PAD_SIZE); + lwip_sha1_update(&sha1_ctx, state->session_key, state->keylen); + lwip_sha1_update(&sha1_ctx, mppe_sha1_pad2, SHA1_PAD_SIZE); + lwip_sha1_finish(&sha1_ctx, sha1_digest); + lwip_sha1_free(&sha1_ctx); + MEMCPY(state->session_key, sha1_digest, state->keylen); + + if (!initial_key) { + lwip_arc4_init(&state->arc4); + lwip_arc4_setup(&state->arc4, sha1_digest, state->keylen); + lwip_arc4_crypt(&state->arc4, state->session_key, state->keylen); + lwip_arc4_free(&state->arc4); + } + if (state->keylen == 8) { + /* See RFC 3078 */ + state->session_key[0] = 0xd1; + state->session_key[1] = 0x26; + state->session_key[2] = 0x9e; + } + lwip_arc4_init(&state->arc4); + lwip_arc4_setup(&state->arc4, state->session_key, state->keylen); +} + +/* + * Set key, used by MSCHAP before mppe_init() is actually called by CCP so we + * don't have to keep multiple copies of keys. + */ +void mppe_set_key(ppp_pcb *pcb, ppp_mppe_state *state, u8_t *key) { + LWIP_UNUSED_ARG(pcb); + MEMCPY(state->master_key, key, MPPE_MAX_KEY_LEN); +} + +/* + * Initialize (de)compressor state. + */ +void +mppe_init(ppp_pcb *pcb, ppp_mppe_state *state, u8_t options) +{ +#if PPP_DEBUG + const u8_t *debugstr = (const u8_t*)"mppe_comp_init"; + if (&pcb->mppe_decomp == state) { + debugstr = (const u8_t*)"mppe_decomp_init"; + } +#endif /* PPP_DEBUG */ + + /* Save keys. */ + MEMCPY(state->session_key, state->master_key, sizeof(state->master_key)); + + if (options & MPPE_OPT_128) + state->keylen = 16; + else if (options & MPPE_OPT_40) + state->keylen = 8; + else { + PPPDEBUG(LOG_DEBUG, ("%s[%d]: unknown key length\n", debugstr, + pcb->netif->num)); + lcp_close(pcb, "MPPE required but peer negotiation failed"); + return; + } + if (options & MPPE_OPT_STATEFUL) + state->stateful = 1; + + /* Generate the initial session key. */ + mppe_rekey(state, 1); + +#if PPP_DEBUG + { + int i; + char mkey[sizeof(state->master_key) * 2 + 1]; + char skey[sizeof(state->session_key) * 2 + 1]; + + PPPDEBUG(LOG_DEBUG, ("%s[%d]: initialized with %d-bit %s mode\n", + debugstr, pcb->netif->num, (state->keylen == 16) ? 128 : 40, + (state->stateful) ? "stateful" : "stateless")); + + for (i = 0; i < (int)sizeof(state->master_key); i++) + sprintf(mkey + i * 2, "%02x", state->master_key[i]); + for (i = 0; i < (int)sizeof(state->session_key); i++) + sprintf(skey + i * 2, "%02x", state->session_key[i]); + PPPDEBUG(LOG_DEBUG, + ("%s[%d]: keys: master: %s initial session: %s\n", + debugstr, pcb->netif->num, mkey, skey)); + } +#endif /* PPP_DEBUG */ + + /* + * Initialize the coherency count. The initial value is not specified + * in RFC 3078, but we can make a reasonable assumption that it will + * start at 0. Setting it to the max here makes the comp/decomp code + * do the right thing (determined through experiment). + */ + state->ccount = MPPE_CCOUNT_SPACE - 1; + + /* + * Note that even though we have initialized the key table, we don't + * set the FLUSHED bit. This is contrary to RFC 3078, sec. 3.1. + */ + state->bits = MPPE_BIT_ENCRYPTED; +} + +/* + * We received a CCP Reset-Request (actually, we are sending a Reset-Ack), + * tell the compressor to rekey. Note that we MUST NOT rekey for + * every CCP Reset-Request; we only rekey on the next xmit packet. + * We might get multiple CCP Reset-Requests if our CCP Reset-Ack is lost. + * So, rekeying for every CCP Reset-Request is broken as the peer will not + * know how many times we've rekeyed. (If we rekey and THEN get another + * CCP Reset-Request, we must rekey again.) + */ +void mppe_comp_reset(ppp_pcb *pcb, ppp_mppe_state *state) +{ + LWIP_UNUSED_ARG(pcb); + state->bits |= MPPE_BIT_FLUSHED; +} + +/* + * Compress (encrypt) a packet. + * It's strange to call this a compressor, since the output is always + * MPPE_OVHD + 2 bytes larger than the input. + */ +err_t +mppe_compress(ppp_pcb *pcb, ppp_mppe_state *state, struct pbuf **pb, u16_t protocol) +{ + struct pbuf *n, *np; + u8_t *pl; + err_t err; + + LWIP_UNUSED_ARG(pcb); + + /* TCP stack requires that we don't change the packet payload, therefore we copy + * the whole packet before encryption. + */ + np = pbuf_alloc(PBUF_RAW, MPPE_OVHD + sizeof(protocol) + (*pb)->tot_len, PBUF_RAM); + if (!np) { + return ERR_MEM; + } + + /* Hide MPPE header + protocol */ + pbuf_remove_header(np, MPPE_OVHD + sizeof(protocol)); + + if ((err = pbuf_copy(np, *pb)) != ERR_OK) { + pbuf_free(np); + return err; + } + + /* Reveal MPPE header + protocol */ + pbuf_add_header(np, MPPE_OVHD + sizeof(protocol)); + + *pb = np; + pl = (u8_t*)np->payload; + + state->ccount = (state->ccount + 1) % MPPE_CCOUNT_SPACE; + PPPDEBUG(LOG_DEBUG, ("mppe_compress[%d]: ccount %d\n", pcb->netif->num, state->ccount)); + /* FIXME: use PUT* macros */ + pl[0] = state->ccount>>8; + pl[1] = state->ccount; + + if (!state->stateful || /* stateless mode */ + ((state->ccount & 0xff) == 0xff) || /* "flag" packet */ + (state->bits & MPPE_BIT_FLUSHED)) { /* CCP Reset-Request */ + /* We must rekey */ + if (state->stateful) { + PPPDEBUG(LOG_DEBUG, ("mppe_compress[%d]: rekeying\n", pcb->netif->num)); + } + mppe_rekey(state, 0); + state->bits |= MPPE_BIT_FLUSHED; + } + pl[0] |= state->bits; + state->bits &= ~MPPE_BIT_FLUSHED; /* reset for next xmit */ + pl += MPPE_OVHD; + + /* Add protocol */ + /* FIXME: add PFC support */ + pl[0] = protocol >> 8; + pl[1] = protocol; + + /* Hide MPPE header */ + pbuf_remove_header(np, MPPE_OVHD); + + /* Encrypt packet */ + for (n = np; n != NULL; n = n->next) { + lwip_arc4_crypt(&state->arc4, (u8_t*)n->payload, n->len); + if (n->tot_len == n->len) { + break; + } + } + + /* Reveal MPPE header */ + pbuf_add_header(np, MPPE_OVHD); + + return ERR_OK; +} + +/* + * We received a CCP Reset-Ack. Just ignore it. + */ +void mppe_decomp_reset(ppp_pcb *pcb, ppp_mppe_state *state) +{ + LWIP_UNUSED_ARG(pcb); + LWIP_UNUSED_ARG(state); + return; +} + +/* + * Decompress (decrypt) an MPPE packet. + */ +err_t +mppe_decompress(ppp_pcb *pcb, ppp_mppe_state *state, struct pbuf **pb) +{ + struct pbuf *n0 = *pb, *n; + u8_t *pl; + u16_t ccount; + u8_t flushed; + + /* MPPE Header */ + if (n0->len < MPPE_OVHD) { + PPPDEBUG(LOG_DEBUG, + ("mppe_decompress[%d]: short pkt (%d)\n", + pcb->netif->num, n0->len)); + state->sanity_errors += 100; + goto sanity_error; + } + + pl = (u8_t*)n0->payload; + flushed = MPPE_BITS(pl) & MPPE_BIT_FLUSHED; + ccount = MPPE_CCOUNT(pl); + PPPDEBUG(LOG_DEBUG, ("mppe_decompress[%d]: ccount %d\n", + pcb->netif->num, ccount)); + + /* sanity checks -- terminate with extreme prejudice */ + if (!(MPPE_BITS(pl) & MPPE_BIT_ENCRYPTED)) { + PPPDEBUG(LOG_DEBUG, + ("mppe_decompress[%d]: ENCRYPTED bit not set!\n", + pcb->netif->num)); + state->sanity_errors += 100; + goto sanity_error; + } + if (!state->stateful && !flushed) { + PPPDEBUG(LOG_DEBUG, ("mppe_decompress[%d]: FLUSHED bit not set in " + "stateless mode!\n", pcb->netif->num)); + state->sanity_errors += 100; + goto sanity_error; + } + if (state->stateful && ((ccount & 0xff) == 0xff) && !flushed) { + PPPDEBUG(LOG_DEBUG, ("mppe_decompress[%d]: FLUSHED bit not set on " + "flag packet!\n", pcb->netif->num)); + state->sanity_errors += 100; + goto sanity_error; + } + + /* + * Check the coherency count. + */ + + if (!state->stateful) { + /* Discard late packet */ + if ((ccount - state->ccount) % MPPE_CCOUNT_SPACE > MPPE_CCOUNT_SPACE / 2) { + state->sanity_errors++; + goto sanity_error; + } + + /* RFC 3078, sec 8.1. Rekey for every packet. */ + while (state->ccount != ccount) { + mppe_rekey(state, 0); + state->ccount = (state->ccount + 1) % MPPE_CCOUNT_SPACE; + } + } else { + /* RFC 3078, sec 8.2. */ + if (!state->discard) { + /* normal state */ + state->ccount = (state->ccount + 1) % MPPE_CCOUNT_SPACE; + if (ccount != state->ccount) { + /* + * (ccount > state->ccount) + * Packet loss detected, enter the discard state. + * Signal the peer to rekey (by sending a CCP Reset-Request). + */ + state->discard = 1; + ccp_resetrequest(pcb); + return ERR_BUF; + } + } else { + /* discard state */ + if (!flushed) { + /* ccp.c will be silent (no additional CCP Reset-Requests). */ + return ERR_BUF; + } else { + /* Rekey for every missed "flag" packet. */ + while ((ccount & ~0xff) != + (state->ccount & ~0xff)) { + mppe_rekey(state, 0); + state->ccount = + (state->ccount + + 256) % MPPE_CCOUNT_SPACE; + } + + /* reset */ + state->discard = 0; + state->ccount = ccount; + /* + * Another problem with RFC 3078 here. It implies that the + * peer need not send a Reset-Ack packet. But RFC 1962 + * requires it. Hopefully, M$ does send a Reset-Ack; even + * though it isn't required for MPPE synchronization, it is + * required to reset CCP state. + */ + } + } + if (flushed) + mppe_rekey(state, 0); + } + + /* Hide MPPE header */ + pbuf_remove_header(n0, MPPE_OVHD); + + /* Decrypt the packet. */ + for (n = n0; n != NULL; n = n->next) { + lwip_arc4_crypt(&state->arc4, (u8_t*)n->payload, n->len); + if (n->tot_len == n->len) { + break; + } + } + + /* good packet credit */ + state->sanity_errors >>= 1; + + return ERR_OK; + +sanity_error: + if (state->sanity_errors >= SANITY_MAX) { + /* + * Take LCP down if the peer is sending too many bogons. + * We don't want to do this for a single or just a few + * instances since it could just be due to packet corruption. + */ + lcp_close(pcb, "Too many MPPE errors"); + } + return ERR_BUF; +} + +#endif /* PPP_SUPPORT && MPPE_SUPPORT */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/multilink.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/multilink.c new file mode 100644 index 0000000000000000000000000000000000000000..62014e8c87c3bd075e5ead8c76e3481bbf782bf7 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/multilink.c @@ -0,0 +1,609 @@ +/* + * multilink.c - support routines for multilink. + * + * Copyright (c) 2000-2002 Paul Mackerras. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. The name(s) of the authors of this software must not be used to + * endorse or promote products derived from this software without + * prior written permission. + * + * 3. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by Paul Mackerras + * ". + * + * THE AUTHORS OF THIS SOFTWARE DISCLAIM ALL WARRANTIES WITH REGARD TO + * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY + * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include "netif/ppp/ppp_opts.h" +#if PPP_SUPPORT && defined(HAVE_MULTILINK) /* don't build if not configured for use in lwipopts.h */ + +/* Multilink support + * + * Multilink uses Samba TDB (Trivial Database Library), which + * we cannot port, because it needs a filesystem. + * + * We have to choose between doing a memory-shared TDB-clone, + * or dropping multilink support at all. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "netif/ppp/ppp_impl.h" + +#include "netif/ppp/fsm.h" +#include "netif/ppp/lcp.h" +#include "netif/ppp/tdb.h" + +bool endpoint_specified; /* user gave explicit endpoint discriminator */ +char *bundle_id; /* identifier for our bundle */ +char *blinks_id; /* key for the list of links */ +bool doing_multilink; /* multilink was enabled and agreed to */ +bool multilink_master; /* we own the multilink bundle */ + +extern TDB_CONTEXT *pppdb; +extern char db_key[]; + +static void make_bundle_links (int append); +static void remove_bundle_link (void); +static void iterate_bundle_links (void (*func) (char *)); + +static int get_default_epdisc (struct epdisc *); +static int parse_num (char *str, const char *key, int *valp); +static int owns_unit (TDB_DATA pid, int unit); + +#define set_ip_epdisc(ep, addr) do { \ + ep->length = 4; \ + ep->value[0] = addr >> 24; \ + ep->value[1] = addr >> 16; \ + ep->value[2] = addr >> 8; \ + ep->value[3] = addr; \ +} while (0) + +#define LOCAL_IP_ADDR(addr) \ + (((addr) & 0xff000000) == 0x0a000000 /* 10.x.x.x */ \ + || ((addr) & 0xfff00000) == 0xac100000 /* 172.16.x.x */ \ + || ((addr) & 0xffff0000) == 0xc0a80000) /* 192.168.x.x */ + +#define process_exists(n) (kill((n), 0) == 0 || errno != ESRCH) + +void +mp_check_options() +{ + lcp_options *wo = &lcp_wantoptions[0]; + lcp_options *ao = &lcp_allowoptions[0]; + + doing_multilink = 0; + if (!multilink) + return; + /* if we're doing multilink, we have to negotiate MRRU */ + if (!wo->neg_mrru) { + /* mrru not specified, default to mru */ + wo->mrru = wo->mru; + wo->neg_mrru = 1; + } + ao->mrru = ao->mru; + ao->neg_mrru = 1; + + if (!wo->neg_endpoint && !noendpoint) { + /* get a default endpoint value */ + wo->neg_endpoint = get_default_epdisc(&wo->endpoint); + } +} + +/* + * Make a new bundle or join us to an existing bundle + * if we are doing multilink. + */ +int +mp_join_bundle() +{ + lcp_options *go = &lcp_gotoptions[0]; + lcp_options *ho = &lcp_hisoptions[0]; + lcp_options *ao = &lcp_allowoptions[0]; + int unit, pppd_pid; + int l, mtu; + char *p; + TDB_DATA key, pid, rec; + + if (doing_multilink) { + /* have previously joined a bundle */ + if (!go->neg_mrru || !ho->neg_mrru) { + notice("oops, didn't get multilink on renegotiation"); + lcp_close(pcb, "multilink required"); + return 0; + } + /* XXX should check the peer_authname and ho->endpoint + are the same as previously */ + return 0; + } + + if (!go->neg_mrru || !ho->neg_mrru) { + /* not doing multilink */ + if (go->neg_mrru) + notice("oops, multilink negotiated only for receive"); + mtu = ho->neg_mru? ho->mru: PPP_MRU; + if (mtu > ao->mru) + mtu = ao->mru; + if (demand) { + /* already have a bundle */ + cfg_bundle(0, 0, 0, 0); + netif_set_mtu(pcb, mtu); + return 0; + } + make_new_bundle(0, 0, 0, 0); + set_ifunit(1); + netif_set_mtu(pcb, mtu); + return 0; + } + + doing_multilink = 1; + + /* + * Find the appropriate bundle or join a new one. + * First we make up a name for the bundle. + * The length estimate is worst-case assuming every + * character has to be quoted. + */ + l = 4 * strlen(peer_authname) + 10; + if (ho->neg_endpoint) + l += 3 * ho->endpoint.length + 8; + if (bundle_name) + l += 3 * strlen(bundle_name) + 2; + bundle_id = malloc(l); + if (bundle_id == 0) + novm("bundle identifier"); + + p = bundle_id; + p += slprintf(p, l-1, "BUNDLE=\"%q\"", peer_authname); + if (ho->neg_endpoint || bundle_name) + *p++ = '/'; + if (ho->neg_endpoint) + p += slprintf(p, bundle_id+l-p, "%s", + epdisc_to_str(&ho->endpoint)); + if (bundle_name) + p += slprintf(p, bundle_id+l-p, "/%v", bundle_name); + + /* Make the key for the list of links belonging to the bundle */ + l = p - bundle_id; + blinks_id = malloc(l + 7); + if (blinks_id == NULL) + novm("bundle links key"); + slprintf(blinks_id, l + 7, "BUNDLE_LINKS=%s", bundle_id + 7); + + /* + * For demand mode, we only need to configure the bundle + * and attach the link. + */ + mtu = LWIP_MIN(ho->mrru, ao->mru); + if (demand) { + cfg_bundle(go->mrru, ho->mrru, go->neg_ssnhf, ho->neg_ssnhf); + netif_set_mtu(pcb, mtu); + script_setenv("BUNDLE", bundle_id + 7, 1); + return 0; + } + + /* + * Check if the bundle ID is already in the database. + */ + unit = -1; + lock_db(); + key.dptr = bundle_id; + key.dsize = p - bundle_id; + pid = tdb_fetch(pppdb, key); + if (pid.dptr != NULL) { + /* bundle ID exists, see if the pppd record exists */ + rec = tdb_fetch(pppdb, pid); + if (rec.dptr != NULL && rec.dsize > 0) { + /* make sure the string is null-terminated */ + rec.dptr[rec.dsize-1] = 0; + /* parse the interface number */ + parse_num(rec.dptr, "IFNAME=ppp", &unit); + /* check the pid value */ + if (!parse_num(rec.dptr, "PPPD_PID=", &pppd_pid) + || !process_exists(pppd_pid) + || !owns_unit(pid, unit)) + unit = -1; + free(rec.dptr); + } + free(pid.dptr); + } + + if (unit >= 0) { + /* attach to existing unit */ + if (bundle_attach(unit)) { + set_ifunit(0); + script_setenv("BUNDLE", bundle_id + 7, 0); + make_bundle_links(1); + unlock_db(); + info("Link attached to %s", ifname); + return 1; + } + /* attach failed because bundle doesn't exist */ + } + + /* we have to make a new bundle */ + make_new_bundle(go->mrru, ho->mrru, go->neg_ssnhf, ho->neg_ssnhf); + set_ifunit(1); + netif_set_mtu(pcb, mtu); + script_setenv("BUNDLE", bundle_id + 7, 1); + make_bundle_links(pcb); + unlock_db(); + info("New bundle %s created", ifname); + multilink_master = 1; + return 0; +} + +void mp_exit_bundle() +{ + lock_db(); + remove_bundle_link(); + unlock_db(); +} + +static void sendhup(char *str) +{ + int pid; + + if (parse_num(str, "PPPD_PID=", &pid) && pid != getpid()) { + if (debug) + dbglog("sending SIGHUP to process %d", pid); + kill(pid, SIGHUP); + } +} + +void mp_bundle_terminated() +{ + TDB_DATA key; + + bundle_terminating = 1; + upper_layers_down(pcb); + notice("Connection terminated."); +#if PPP_STATS_SUPPORT + print_link_stats(); +#endif /* PPP_STATS_SUPPORT */ + if (!demand) { + remove_pidfiles(); + script_unsetenv("IFNAME"); + } + + lock_db(); + destroy_bundle(); + iterate_bundle_links(sendhup); + key.dptr = blinks_id; + key.dsize = strlen(blinks_id); + tdb_delete(pppdb, key); + unlock_db(); + + new_phase(PPP_PHASE_DEAD); + + doing_multilink = 0; + multilink_master = 0; +} + +static void make_bundle_links(int append) +{ + TDB_DATA key, rec; + char *p; + char entry[32]; + int l; + + key.dptr = blinks_id; + key.dsize = strlen(blinks_id); + slprintf(entry, sizeof(entry), "%s;", db_key); + p = entry; + if (append) { + rec = tdb_fetch(pppdb, key); + if (rec.dptr != NULL && rec.dsize > 0) { + rec.dptr[rec.dsize-1] = 0; + if (strstr(rec.dptr, db_key) != NULL) { + /* already in there? strange */ + warn("link entry already exists in tdb"); + return; + } + l = rec.dsize + strlen(entry); + p = malloc(l); + if (p == NULL) + novm("bundle link list"); + slprintf(p, l, "%s%s", rec.dptr, entry); + } else { + warn("bundle link list not found"); + } + if (rec.dptr != NULL) + free(rec.dptr); + } + rec.dptr = p; + rec.dsize = strlen(p) + 1; + if (tdb_store(pppdb, key, rec, TDB_REPLACE)) + error("couldn't %s bundle link list", + append? "update": "create"); + if (p != entry) + free(p); +} + +static void remove_bundle_link() +{ + TDB_DATA key, rec; + char entry[32]; + char *p, *q; + int l; + + key.dptr = blinks_id; + key.dsize = strlen(blinks_id); + slprintf(entry, sizeof(entry), "%s;", db_key); + + rec = tdb_fetch(pppdb, key); + if (rec.dptr == NULL || rec.dsize <= 0) { + if (rec.dptr != NULL) + free(rec.dptr); + return; + } + rec.dptr[rec.dsize-1] = 0; + p = strstr(rec.dptr, entry); + if (p != NULL) { + q = p + strlen(entry); + l = strlen(q) + 1; + memmove(p, q, l); + rec.dsize = p - rec.dptr + l; + if (tdb_store(pppdb, key, rec, TDB_REPLACE)) + error("couldn't update bundle link list (removal)"); + } + free(rec.dptr); +} + +static void iterate_bundle_links(void (*func)(char *)) +{ + TDB_DATA key, rec, pp; + char *p, *q; + + key.dptr = blinks_id; + key.dsize = strlen(blinks_id); + rec = tdb_fetch(pppdb, key); + if (rec.dptr == NULL || rec.dsize <= 0) { + error("bundle link list not found (iterating list)"); + if (rec.dptr != NULL) + free(rec.dptr); + return; + } + p = rec.dptr; + p[rec.dsize-1] = 0; + while ((q = strchr(p, ';')) != NULL) { + *q = 0; + key.dptr = p; + key.dsize = q - p; + pp = tdb_fetch(pppdb, key); + if (pp.dptr != NULL && pp.dsize > 0) { + pp.dptr[pp.dsize-1] = 0; + func(pp.dptr); + } + if (pp.dptr != NULL) + free(pp.dptr); + p = q + 1; + } + free(rec.dptr); +} + +static int +parse_num(str, key, valp) + char *str; + const char *key; + int *valp; +{ + char *p, *endp; + int i; + + p = strstr(str, key); + if (p != 0) { + p += strlen(key); + i = strtol(p, &endp, 10); + if (endp != p && (*endp == 0 || *endp == ';')) { + *valp = i; + return 1; + } + } + return 0; +} + +/* + * Check whether the pppd identified by `key' still owns ppp unit `unit'. + */ +static int +owns_unit(key, unit) + TDB_DATA key; + int unit; +{ + char ifkey[32]; + TDB_DATA kd, vd; + int ret = 0; + + slprintf(ifkey, sizeof(ifkey), "IFNAME=ppp%d", unit); + kd.dptr = ifkey; + kd.dsize = strlen(ifkey); + vd = tdb_fetch(pppdb, kd); + if (vd.dptr != NULL) { + ret = vd.dsize == key.dsize + && memcmp(vd.dptr, key.dptr, vd.dsize) == 0; + free(vd.dptr); + } + return ret; +} + +static int +get_default_epdisc(ep) + struct epdisc *ep; +{ + char *p; + struct hostent *hp; + u32_t addr; + + /* First try for an ethernet MAC address */ + p = get_first_ethernet(); + if (p != 0 && get_if_hwaddr(ep->value, p) >= 0) { + ep->class = EPD_MAC; + ep->length = 6; + return 1; + } + + /* see if our hostname corresponds to a reasonable IP address */ + hp = gethostbyname(hostname); + if (hp != NULL) { + addr = *(u32_t *)hp->h_addr; + if (!bad_ip_adrs(addr)) { + addr = lwip_ntohl(addr); + if (!LOCAL_IP_ADDR(addr)) { + ep->class = EPD_IP; + set_ip_epdisc(ep, addr); + return 1; + } + } + } + + return 0; +} + +/* + * epdisc_to_str - make a printable string from an endpoint discriminator. + */ + +static char *endp_class_names[] = { + "null", "local", "IP", "MAC", "magic", "phone" +}; + +char * +epdisc_to_str(ep) + struct epdisc *ep; +{ + static char str[MAX_ENDP_LEN*3+8]; + u_char *p = ep->value; + int i, mask = 0; + char *q, c, c2; + + if (ep->class == EPD_NULL && ep->length == 0) + return "null"; + if (ep->class == EPD_IP && ep->length == 4) { + u32_t addr; + + GETLONG(addr, p); + slprintf(str, sizeof(str), "IP:%I", lwip_htonl(addr)); + return str; + } + + c = ':'; + c2 = '.'; + if (ep->class == EPD_MAC && ep->length == 6) + c2 = ':'; + else if (ep->class == EPD_MAGIC && (ep->length % 4) == 0) + mask = 3; + q = str; + if (ep->class <= EPD_PHONENUM) + q += slprintf(q, sizeof(str)-1, "%s", + endp_class_names[ep->class]); + else + q += slprintf(q, sizeof(str)-1, "%d", ep->class); + c = ':'; + for (i = 0; i < ep->length && i < MAX_ENDP_LEN; ++i) { + if ((i & mask) == 0) { + *q++ = c; + c = c2; + } + q += slprintf(q, str + sizeof(str) - q, "%.2x", ep->value[i]); + } + return str; +} + +static int hexc_val(int c) +{ + if (c >= 'a') + return c - 'a' + 10; + if (c >= 'A') + return c - 'A' + 10; + return c - '0'; +} + +int +str_to_epdisc(ep, str) + struct epdisc *ep; + char *str; +{ + int i, l; + char *p, *endp; + + for (i = EPD_NULL; i <= EPD_PHONENUM; ++i) { + int sl = strlen(endp_class_names[i]); + if (strncasecmp(str, endp_class_names[i], sl) == 0) { + str += sl; + break; + } + } + if (i > EPD_PHONENUM) { + /* not a class name, try a decimal class number */ + i = strtol(str, &endp, 10); + if (endp == str) + return 0; /* can't parse class number */ + str = endp; + } + ep->class = i; + if (*str == 0) { + ep->length = 0; + return 1; + } + if (*str != ':' && *str != '.') + return 0; + ++str; + + if (i == EPD_IP) { + u32_t addr; + i = parse_dotted_ip(str, &addr); + if (i == 0 || str[i] != 0) + return 0; + set_ip_epdisc(ep, addr); + return 1; + } + if (i == EPD_MAC && get_if_hwaddr(ep->value, str) >= 0) { + ep->length = 6; + return 1; + } + + p = str; + for (l = 0; l < MAX_ENDP_LEN; ++l) { + if (*str == 0) + break; + if (p <= str) + for (p = str; isxdigit(*p); ++p) + ; + i = p - str; + if (i == 0) + return 0; + ep->value[l] = hexc_val(*str++); + if ((i & 1) == 0) + ep->value[l] = (ep->value[l] << 4) + hexc_val(*str++); + if (*str == ':' || *str == '.') + ++str; + } + if (*str != 0 || (ep->class == EPD_MAC && l != 6)) + return 0; + ep->length = l; + return 1; +} + +#endif /* PPP_SUPPORT && HAVE_MULTILINK */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/ppp.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/ppp.c new file mode 100644 index 0000000000000000000000000000000000000000..a9c18e304fc8825a595dfbb4ecb03165d9b86231 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/ppp.c @@ -0,0 +1,1628 @@ +/***************************************************************************** +* ppp.c - Network Point to Point Protocol program file. +* +* Copyright (c) 2003 by Marc Boucher, Services Informatiques (MBSI) inc. +* portions Copyright (c) 1997 by Global Election Systems Inc. +* +* The authors hereby grant permission to use, copy, modify, distribute, +* and license this software and its documentation for any purpose, provided +* that existing copyright notices are retained in all copies and that this +* notice and the following disclaimer are included verbatim in any +* distributions. No written agreement, license, or royalty fee is required +* for any of the authorized uses. +* +* THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS *AS IS* AND ANY EXPRESS OR +* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +* IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +****************************************************************************** +* REVISION HISTORY +* +* 03-01-01 Marc Boucher +* Ported to lwIP. +* 97-11-05 Guy Lancaster , Global Election Systems Inc. +* Original. +*****************************************************************************/ + +/* + * ppp_defs.h - PPP definitions. + * + * if_pppvar.h - private structures and declarations for PPP. + * + * Copyright (c) 1994 The Australian National University. + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation is hereby granted, provided that the above copyright + * notice appears in all copies. This software is provided without any + * warranty, express or implied. The Australian National University + * makes no representations about the suitability of this software for + * any purpose. + * + * IN NO EVENT SHALL THE AUSTRALIAN NATIONAL UNIVERSITY BE LIABLE TO ANY + * PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF + * THE AUSTRALIAN NATIONAL UNIVERSITY HAVE BEEN ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * THE AUSTRALIAN NATIONAL UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE AUSTRALIAN NATIONAL UNIVERSITY HAS NO + * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, + * OR MODIFICATIONS. + */ + +/* + * if_ppp.h - Point-to-Point Protocol definitions. + * + * Copyright (c) 1989 Carnegie Mellon University. + * All rights reserved. + * + * Redistribution and use in source and binary forms are permitted + * provided that the above copyright notice and this paragraph are + * duplicated in all such forms and that any documentation, + * advertising materials, and other materials related to such + * distribution and use acknowledge that the software was developed + * by Carnegie Mellon University. The name of the + * University may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + */ + +/** + * @defgroup ppp PPP + * @ingroup netifs + * @verbinclude "ppp.txt" + */ + +#include "netif/ppp/ppp_opts.h" +#if PPP_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/pbuf.h" +#include "lwip/stats.h" +#include "lwip/sys.h" +#include "lwip/tcpip.h" +#include "lwip/api.h" +#include "lwip/snmp.h" +#include "lwip/ip4.h" /* for ip4_input() */ +#if PPP_IPV6_SUPPORT +#include "lwip/ip6.h" /* for ip6_input() */ +#endif /* PPP_IPV6_SUPPORT */ +#include "lwip/dns.h" + +#include "netif/ppp/ppp_impl.h" +#include "netif/ppp/pppos.h" + +#include "netif/ppp/fsm.h" +#include "netif/ppp/lcp.h" +#include "netif/ppp/magic.h" + +#if PAP_SUPPORT +#include "netif/ppp/upap.h" +#endif /* PAP_SUPPORT */ +#if CHAP_SUPPORT +#include "netif/ppp/chap-new.h" +#endif /* CHAP_SUPPORT */ +#if EAP_SUPPORT +#include "netif/ppp/eap.h" +#endif /* EAP_SUPPORT */ +#if CCP_SUPPORT +#include "netif/ppp/ccp.h" +#endif /* CCP_SUPPORT */ +#if MPPE_SUPPORT +#include "netif/ppp/mppe.h" +#endif /* MPPE_SUPPORT */ +#if ECP_SUPPORT +#include "netif/ppp/ecp.h" +#endif /* EAP_SUPPORT */ +#if VJ_SUPPORT +#include "netif/ppp/vj.h" +#endif /* VJ_SUPPORT */ +#if PPP_IPV4_SUPPORT +#include "netif/ppp/ipcp.h" +#endif /* PPP_IPV4_SUPPORT */ +#if PPP_IPV6_SUPPORT +#include "netif/ppp/ipv6cp.h" +#endif /* PPP_IPV6_SUPPORT */ + +/*************************/ +/*** LOCAL DEFINITIONS ***/ +/*************************/ + +/* Memory pools */ +#if PPPOS_SUPPORT +LWIP_MEMPOOL_PROTOTYPE(PPPOS_PCB); +#endif +#if PPPOE_SUPPORT +LWIP_MEMPOOL_PROTOTYPE(PPPOE_IF); +#endif +#if PPPOL2TP_SUPPORT +LWIP_MEMPOOL_PROTOTYPE(PPPOL2TP_PCB); +#endif +#if LWIP_PPP_API && LWIP_MPU_COMPATIBLE +LWIP_MEMPOOL_PROTOTYPE(PPPAPI_MSG); +#endif +LWIP_MEMPOOL_DECLARE(PPP_PCB, MEMP_NUM_PPP_PCB, sizeof(ppp_pcb), "PPP_PCB") + +/* FIXME: add stats per PPP session */ +#if PPP_STATS_SUPPORT +static struct timeval start_time; /* Time when link was started. */ +static struct pppd_stats old_link_stats; +struct pppd_stats link_stats; +unsigned link_connect_time; +int link_stats_valid; +#endif /* PPP_STATS_SUPPORT */ + +/* + * PPP Data Link Layer "protocol" table. + * One entry per supported protocol. + * The last entry must be NULL. + */ +const struct protent* const protocols[] = { + &lcp_protent, +#if PAP_SUPPORT + &pap_protent, +#endif /* PAP_SUPPORT */ +#if CHAP_SUPPORT + &chap_protent, +#endif /* CHAP_SUPPORT */ +#if CBCP_SUPPORT + &cbcp_protent, +#endif /* CBCP_SUPPORT */ +#if PPP_IPV4_SUPPORT + &ipcp_protent, +#endif /* PPP_IPV4_SUPPORT */ +#if PPP_IPV6_SUPPORT + &ipv6cp_protent, +#endif /* PPP_IPV6_SUPPORT */ +#if CCP_SUPPORT + &ccp_protent, +#endif /* CCP_SUPPORT */ +#if ECP_SUPPORT + &ecp_protent, +#endif /* ECP_SUPPORT */ +#ifdef AT_CHANGE + &atcp_protent, +#endif /* AT_CHANGE */ +#if EAP_SUPPORT + &eap_protent, +#endif /* EAP_SUPPORT */ + NULL +}; + +/* Prototypes for procedures local to this file. */ +static void ppp_do_connect(void *arg); +static err_t ppp_netif_init_cb(struct netif *netif); +#if PPP_IPV4_SUPPORT +static err_t ppp_netif_output_ip4(struct netif *netif, struct pbuf *pb, const ip4_addr_t *ipaddr); +#endif /* PPP_IPV4_SUPPORT */ +#if PPP_IPV6_SUPPORT +static err_t ppp_netif_output_ip6(struct netif *netif, struct pbuf *pb, const ip6_addr_t *ipaddr); +#endif /* PPP_IPV6_SUPPORT */ +static err_t ppp_netif_output(struct netif *netif, struct pbuf *pb, u16_t protocol); + +/***********************************/ +/*** PUBLIC FUNCTION DEFINITIONS ***/ +/***********************************/ +#if PPP_AUTH_SUPPORT +void ppp_set_auth(ppp_pcb *pcb, u8_t authtype, const char *user, const char *passwd) { + LWIP_ASSERT_CORE_LOCKED(); +#if PAP_SUPPORT + pcb->settings.refuse_pap = !(authtype & PPPAUTHTYPE_PAP); +#endif /* PAP_SUPPORT */ +#if CHAP_SUPPORT + pcb->settings.refuse_chap = !(authtype & PPPAUTHTYPE_CHAP); +#if MSCHAP_SUPPORT + pcb->settings.refuse_mschap = !(authtype & PPPAUTHTYPE_MSCHAP); + pcb->settings.refuse_mschap_v2 = !(authtype & PPPAUTHTYPE_MSCHAP_V2); +#endif /* MSCHAP_SUPPORT */ +#endif /* CHAP_SUPPORT */ +#if EAP_SUPPORT + pcb->settings.refuse_eap = !(authtype & PPPAUTHTYPE_EAP); +#endif /* EAP_SUPPORT */ + pcb->settings.user = user; + pcb->settings.passwd = passwd; +} +#endif /* PPP_AUTH_SUPPORT */ + +#if MPPE_SUPPORT +/* Set MPPE configuration */ +void ppp_set_mppe(ppp_pcb *pcb, u8_t flags) { + if (flags == PPP_MPPE_DISABLE) { + pcb->settings.require_mppe = 0; + return; + } + + pcb->settings.require_mppe = 1; + pcb->settings.refuse_mppe_stateful = !(flags & PPP_MPPE_ALLOW_STATEFUL); + pcb->settings.refuse_mppe_40 = !!(flags & PPP_MPPE_REFUSE_40); + pcb->settings.refuse_mppe_128 = !!(flags & PPP_MPPE_REFUSE_128); +} +#endif /* MPPE_SUPPORT */ + +#if PPP_NOTIFY_PHASE +void ppp_set_notify_phase_callback(ppp_pcb *pcb, ppp_notify_phase_cb_fn notify_phase_cb) { + pcb->notify_phase_cb = notify_phase_cb; + notify_phase_cb(pcb, pcb->phase, pcb->ctx_cb); +} +#endif /* PPP_NOTIFY_PHASE */ + +/* + * Initiate a PPP connection. + * + * This can only be called if PPP is in the dead phase. + * + * Holdoff is the time to wait (in seconds) before initiating + * the connection. + * + * If this port connects to a modem, the modem connection must be + * established before calling this. + */ +err_t ppp_connect(ppp_pcb *pcb, u16_t holdoff) { + LWIP_ASSERT_CORE_LOCKED(); + if (pcb->phase != PPP_PHASE_DEAD) { + return ERR_ALREADY; + } + + PPPDEBUG(LOG_DEBUG, ("ppp_connect[%d]: holdoff=%d\n", pcb->netif->num, holdoff)); + + magic_randomize(); + + if (holdoff == 0) { + ppp_do_connect(pcb); + return ERR_OK; + } + + new_phase(pcb, PPP_PHASE_HOLDOFF); + sys_timeout((u32_t)(holdoff*1000), ppp_do_connect, pcb); + return ERR_OK; +} + +#if PPP_SERVER +/* + * Listen for an incoming PPP connection. + * + * This can only be called if PPP is in the dead phase. + * + * If this port connects to a modem, the modem connection must be + * established before calling this. + */ +err_t ppp_listen(ppp_pcb *pcb) { + LWIP_ASSERT_CORE_LOCKED(); + if (pcb->phase != PPP_PHASE_DEAD) { + return ERR_ALREADY; + } + + PPPDEBUG(LOG_DEBUG, ("ppp_listen[%d]\n", pcb->netif->num)); + + magic_randomize(); + + if (pcb->link_cb->listen) { + new_phase(pcb, PPP_PHASE_INITIALIZE); + pcb->link_cb->listen(pcb, pcb->link_ctx_cb); + return ERR_OK; + } + return ERR_IF; +} +#endif /* PPP_SERVER */ + +/* + * Initiate the end of a PPP connection. + * Any outstanding packets in the queues are dropped. + * + * Setting nocarrier to 1 close the PPP connection without initiating the + * shutdown procedure. Always using nocarrier = 0 is still recommended, + * this is going to take a little longer time if your link is down, but + * is a safer choice for the PPP state machine. + * + * Return 0 on success, an error code on failure. + */ +err_t +ppp_close(ppp_pcb *pcb, u8_t nocarrier) +{ + LWIP_ASSERT_CORE_LOCKED(); + + pcb->err_code = PPPERR_USER; + + /* holdoff phase, cancel the reconnection */ + if (pcb->phase == PPP_PHASE_HOLDOFF) { + sys_untimeout(ppp_do_connect, pcb); + new_phase(pcb, PPP_PHASE_DEAD); + } + + /* dead phase, nothing to do, call the status callback to be consistent */ + if (pcb->phase == PPP_PHASE_DEAD) { + pcb->link_status_cb(pcb, pcb->err_code, pcb->ctx_cb); + return ERR_OK; + } + + /* Already terminating, nothing to do */ + if (pcb->phase >= PPP_PHASE_TERMINATE) { + return ERR_INPROGRESS; + } + + /* LCP not open, close link protocol */ + if (pcb->phase < PPP_PHASE_ESTABLISH) { + new_phase(pcb, PPP_PHASE_DISCONNECT); + ppp_link_terminated(pcb); + return ERR_OK; + } + + /* + * Only accept carrier lost signal on the stable running phase in order + * to prevent changing the PPP phase FSM in transition phases. + * + * Always using nocarrier = 0 is still recommended, this is going to + * take a little longer time, but is a safer choice from FSM point of view. + */ + if (nocarrier && pcb->phase == PPP_PHASE_RUNNING) { + PPPDEBUG(LOG_DEBUG, ("ppp_close[%d]: carrier lost -> lcp_lowerdown\n", pcb->netif->num)); + lcp_lowerdown(pcb); + /* forced link termination, this will force link protocol to disconnect. */ + link_terminated(pcb); + return ERR_OK; + } + + /* Disconnect */ + PPPDEBUG(LOG_DEBUG, ("ppp_close[%d]: kill_link -> lcp_close\n", pcb->netif->num)); + /* LCP soft close request. */ + lcp_close(pcb, "User request"); + return ERR_OK; +} + +/* + * Release the control block. + * + * This can only be called if PPP is in the dead phase. + * + * You must use ppp_close() before if you wish to terminate + * an established PPP session. + * + * Return 0 on success, an error code on failure. + */ +err_t ppp_free(ppp_pcb *pcb) { + err_t err; + LWIP_ASSERT_CORE_LOCKED(); + if (pcb->phase != PPP_PHASE_DEAD) { + return ERR_CONN; + } + + PPPDEBUG(LOG_DEBUG, ("ppp_free[%d]\n", pcb->netif->num)); + + netif_remove(pcb->netif); + + err = pcb->link_cb->free(pcb, pcb->link_ctx_cb); + + LWIP_MEMPOOL_FREE(PPP_PCB, pcb); + return err; +} + +/* Get and set parameters for the given connection. + * Return 0 on success, an error code on failure. */ +err_t +ppp_ioctl(ppp_pcb *pcb, u8_t cmd, void *arg) +{ + LWIP_ASSERT_CORE_LOCKED(); + if (pcb == NULL) { + return ERR_VAL; + } + + switch(cmd) { + case PPPCTLG_UPSTATUS: /* Get the PPP up status. */ + if (!arg) { + goto fail; + } + *(int *)arg = (int)(0 +#if PPP_IPV4_SUPPORT + || pcb->if4_up +#endif /* PPP_IPV4_SUPPORT */ +#if PPP_IPV6_SUPPORT + || pcb->if6_up +#endif /* PPP_IPV6_SUPPORT */ + ); + return ERR_OK; + + case PPPCTLG_ERRCODE: /* Get the PPP error code. */ + if (!arg) { + goto fail; + } + *(int *)arg = (int)(pcb->err_code); + return ERR_OK; + + default: + goto fail; + } + +fail: + return ERR_VAL; +} + + +/**********************************/ +/*** LOCAL FUNCTION DEFINITIONS ***/ +/**********************************/ + +static void ppp_do_connect(void *arg) { + ppp_pcb *pcb = (ppp_pcb*)arg; + + LWIP_ASSERT("pcb->phase == PPP_PHASE_DEAD || pcb->phase == PPP_PHASE_HOLDOFF", pcb->phase == PPP_PHASE_DEAD || pcb->phase == PPP_PHASE_HOLDOFF); + + new_phase(pcb, PPP_PHASE_INITIALIZE); + pcb->link_cb->connect(pcb, pcb->link_ctx_cb); +} + +/* + * ppp_netif_init_cb - netif init callback + */ +static err_t ppp_netif_init_cb(struct netif *netif) { + netif->name[0] = 'p'; + netif->name[1] = 'p'; +#if PPP_IPV4_SUPPORT + netif->output = ppp_netif_output_ip4; +#endif /* PPP_IPV4_SUPPORT */ +#if PPP_IPV6_SUPPORT + netif->output_ip6 = ppp_netif_output_ip6; +#endif /* PPP_IPV6_SUPPORT */ + netif->flags = NETIF_FLAG_UP; +#if LWIP_NETIF_HOSTNAME + /* @todo: Initialize interface hostname */ + /* netif_set_hostname(netif, "lwip"); */ +#endif /* LWIP_NETIF_HOSTNAME */ + return ERR_OK; +} + +#if PPP_IPV4_SUPPORT +/* + * Send an IPv4 packet on the given connection. + */ +static err_t ppp_netif_output_ip4(struct netif *netif, struct pbuf *pb, const ip4_addr_t *ipaddr) { + LWIP_UNUSED_ARG(ipaddr); + return ppp_netif_output(netif, pb, PPP_IP); +} +#endif /* PPP_IPV4_SUPPORT */ + +#if PPP_IPV6_SUPPORT +/* + * Send an IPv6 packet on the given connection. + */ +static err_t ppp_netif_output_ip6(struct netif *netif, struct pbuf *pb, const ip6_addr_t *ipaddr) { + LWIP_UNUSED_ARG(ipaddr); + return ppp_netif_output(netif, pb, PPP_IPV6); +} +#endif /* PPP_IPV6_SUPPORT */ + +static err_t ppp_netif_output(struct netif *netif, struct pbuf *pb, u16_t protocol) { + ppp_pcb *pcb = (ppp_pcb*)netif->state; + err_t err; + struct pbuf *fpb = NULL; + + /* Check that the link is up. */ + if (0 +#if PPP_IPV4_SUPPORT + || (protocol == PPP_IP && !pcb->if4_up) +#endif /* PPP_IPV4_SUPPORT */ +#if PPP_IPV6_SUPPORT + || (protocol == PPP_IPV6 && !pcb->if6_up) +#endif /* PPP_IPV6_SUPPORT */ + ) { + PPPDEBUG(LOG_ERR, ("ppp_netif_output[%d]: link not up\n", pcb->netif->num)); + goto err_rte_drop; + } + +#if MPPE_SUPPORT + /* If MPPE is required, refuse any IP packet until we are able to crypt them. */ + if (pcb->settings.require_mppe && pcb->ccp_transmit_method != CI_MPPE) { + PPPDEBUG(LOG_ERR, ("ppp_netif_output[%d]: MPPE required, not up\n", pcb->netif->num)); + goto err_rte_drop; + } +#endif /* MPPE_SUPPORT */ + +#if VJ_SUPPORT + /* + * Attempt Van Jacobson header compression if VJ is configured and + * this is an IP packet. + */ + if (protocol == PPP_IP && pcb->vj_enabled) { + switch (vj_compress_tcp(&pcb->vj_comp, &pb)) { + case TYPE_IP: + /* No change... + protocol = PPP_IP; */ + break; + case TYPE_COMPRESSED_TCP: + /* vj_compress_tcp() returns a new allocated pbuf, indicate we should free + * our duplicated pbuf later */ + fpb = pb; + protocol = PPP_VJC_COMP; + break; + case TYPE_UNCOMPRESSED_TCP: + /* vj_compress_tcp() returns a new allocated pbuf, indicate we should free + * our duplicated pbuf later */ + fpb = pb; + protocol = PPP_VJC_UNCOMP; + break; + default: + PPPDEBUG(LOG_WARNING, ("ppp_netif_output[%d]: bad IP packet\n", pcb->netif->num)); + LINK_STATS_INC(link.proterr); + LINK_STATS_INC(link.drop); + MIB2_STATS_NETIF_INC(pcb->netif, ifoutdiscards); + return ERR_VAL; + } + } +#endif /* VJ_SUPPORT */ + +#if CCP_SUPPORT + switch (pcb->ccp_transmit_method) { + case 0: + break; /* Don't compress */ +#if MPPE_SUPPORT + case CI_MPPE: + if ((err = mppe_compress(pcb, &pcb->mppe_comp, &pb, protocol)) != ERR_OK) { + LINK_STATS_INC(link.memerr); + LINK_STATS_INC(link.drop); + MIB2_STATS_NETIF_INC(netif, ifoutdiscards); + goto err; + } + /* if VJ compressor returned a new allocated pbuf, free it */ + if (fpb) { + pbuf_free(fpb); + } + /* mppe_compress() returns a new allocated pbuf, indicate we should free + * our duplicated pbuf later */ + fpb = pb; + protocol = PPP_COMP; + break; +#endif /* MPPE_SUPPORT */ + default: + PPPDEBUG(LOG_ERR, ("ppp_netif_output[%d]: bad CCP transmit method\n", pcb->netif->num)); + goto err_rte_drop; /* Cannot really happen, we only negotiate what we are able to do */ + } +#endif /* CCP_SUPPORT */ + + err = pcb->link_cb->netif_output(pcb, pcb->link_ctx_cb, pb, protocol); + goto err; + +err_rte_drop: + err = ERR_RTE; + LINK_STATS_INC(link.rterr); + LINK_STATS_INC(link.drop); + MIB2_STATS_NETIF_INC(netif, ifoutdiscards); +err: + if (fpb) { + pbuf_free(fpb); + } + return err; +} + +/************************************/ +/*** PRIVATE FUNCTION DEFINITIONS ***/ +/************************************/ + +/* Initialize the PPP subsystem. */ +int ppp_init(void) +{ +#if PPPOS_SUPPORT + LWIP_MEMPOOL_INIT(PPPOS_PCB); +#endif +#if PPPOE_SUPPORT + LWIP_MEMPOOL_INIT(PPPOE_IF); +#endif +#if PPPOL2TP_SUPPORT + LWIP_MEMPOOL_INIT(PPPOL2TP_PCB); +#endif +#if LWIP_PPP_API && LWIP_MPU_COMPATIBLE + LWIP_MEMPOOL_INIT(PPPAPI_MSG); +#endif + + LWIP_MEMPOOL_INIT(PPP_PCB); + + /* + * Initialize magic number generator now so that protocols may + * use magic numbers in initialization. + */ + magic_init(); + + return 0; +} + +/* + * Create a new PPP control block. + * + * This initializes the PPP control block but does not + * attempt to negotiate the LCP session. + * + * Return a new PPP connection control block pointer + * on success or a null pointer on failure. + */ +ppp_pcb *ppp_new(struct netif *pppif, const struct link_callbacks *callbacks, void *link_ctx_cb, ppp_link_status_cb_fn link_status_cb, void *ctx_cb) { + ppp_pcb *pcb; + const struct protent *protp; + int i; + + /* PPP is single-threaded: without a callback, + * there is no way to know when the link is up. */ + if (link_status_cb == NULL) { + return NULL; + } + + pcb = (ppp_pcb*)LWIP_MEMPOOL_ALLOC(PPP_PCB); + if (pcb == NULL) { + return NULL; + } + + memset(pcb, 0, sizeof(ppp_pcb)); + + /* default configuration */ +#if PAP_SUPPORT + pcb->settings.pap_timeout_time = UPAP_DEFTIMEOUT; + pcb->settings.pap_max_transmits = UPAP_DEFTRANSMITS; +#if PPP_SERVER + pcb->settings.pap_req_timeout = UPAP_DEFREQTIME; +#endif /* PPP_SERVER */ +#endif /* PAP_SUPPORT */ + +#if CHAP_SUPPORT + pcb->settings.chap_timeout_time = CHAP_DEFTIMEOUT; + pcb->settings.chap_max_transmits = CHAP_DEFTRANSMITS; +#if PPP_SERVER + pcb->settings.chap_rechallenge_time = CHAP_DEFRECHALLENGETIME; +#endif /* PPP_SERVER */ +#endif /* CHAP_SUPPPORT */ + +#if EAP_SUPPORT + pcb->settings.eap_req_time = EAP_DEFREQTIME; + pcb->settings.eap_allow_req = EAP_DEFALLOWREQ; +#if PPP_SERVER + pcb->settings.eap_timeout_time = EAP_DEFTIMEOUT; + pcb->settings.eap_max_transmits = EAP_DEFTRANSMITS; +#endif /* PPP_SERVER */ +#endif /* EAP_SUPPORT */ + + pcb->settings.lcp_loopbackfail = LCP_DEFLOOPBACKFAIL; + pcb->settings.lcp_echo_interval = LCP_ECHOINTERVAL; + pcb->settings.lcp_echo_fails = LCP_MAXECHOFAILS; + + pcb->settings.fsm_timeout_time = FSM_DEFTIMEOUT; + pcb->settings.fsm_max_conf_req_transmits = FSM_DEFMAXCONFREQS; + pcb->settings.fsm_max_term_transmits = FSM_DEFMAXTERMREQS; + pcb->settings.fsm_max_nak_loops = FSM_DEFMAXNAKLOOPS; + + pcb->netif = pppif; + MIB2_INIT_NETIF(pppif, snmp_ifType_ppp, 0); + if (!netif_add(pcb->netif, +#if LWIP_IPV4 + IP4_ADDR_ANY4, IP4_ADDR_BROADCAST, IP4_ADDR_ANY4, +#endif /* LWIP_IPV4 */ + (void *)pcb, ppp_netif_init_cb, NULL)) { + LWIP_MEMPOOL_FREE(PPP_PCB, pcb); + PPPDEBUG(LOG_ERR, ("ppp_new: netif_add failed\n")); + return NULL; + } + + pcb->link_cb = callbacks; + pcb->link_ctx_cb = link_ctx_cb; + pcb->link_status_cb = link_status_cb; + pcb->ctx_cb = ctx_cb; + + /* + * Initialize each protocol. + */ + for (i = 0; (protp = protocols[i]) != NULL; ++i) { + (*protp->init)(pcb); + } + + new_phase(pcb, PPP_PHASE_DEAD); + return pcb; +} + +/** Initiate LCP open request */ +void ppp_start(ppp_pcb *pcb) { + PPPDEBUG(LOG_DEBUG, ("ppp_start[%d]\n", pcb->netif->num)); + + /* Clean data not taken care by anything else, mostly shared data. */ +#if PPP_STATS_SUPPORT + link_stats_valid = 0; +#endif /* PPP_STATS_SUPPORT */ +#if MPPE_SUPPORT + pcb->mppe_keys_set = 0; + memset(&pcb->mppe_comp, 0, sizeof(pcb->mppe_comp)); + memset(&pcb->mppe_decomp, 0, sizeof(pcb->mppe_decomp)); +#endif /* MPPE_SUPPORT */ +#if VJ_SUPPORT + vj_compress_init(&pcb->vj_comp); +#endif /* VJ_SUPPORT */ + + /* Start protocol */ + new_phase(pcb, PPP_PHASE_ESTABLISH); + lcp_open(pcb); + lcp_lowerup(pcb); + PPPDEBUG(LOG_DEBUG, ("ppp_start[%d]: finished\n", pcb->netif->num)); +} + +/** Called when link failed to setup */ +void ppp_link_failed(ppp_pcb *pcb) { + PPPDEBUG(LOG_DEBUG, ("ppp_link_failed[%d]\n", pcb->netif->num)); + new_phase(pcb, PPP_PHASE_DEAD); + pcb->err_code = PPPERR_OPEN; + pcb->link_status_cb(pcb, pcb->err_code, pcb->ctx_cb); +} + +/** Called when link is normally down (i.e. it was asked to end) */ +void ppp_link_end(ppp_pcb *pcb) { + PPPDEBUG(LOG_DEBUG, ("ppp_link_end[%d]\n", pcb->netif->num)); + new_phase(pcb, PPP_PHASE_DEAD); + if (pcb->err_code == PPPERR_NONE) { + pcb->err_code = PPPERR_CONNECT; + } + pcb->link_status_cb(pcb, pcb->err_code, pcb->ctx_cb); +} + +/* + * Pass the processed input packet to the appropriate handler. + * This function and all handlers run in the context of the tcpip_thread + */ +void ppp_input(ppp_pcb *pcb, struct pbuf *pb) { + u16_t protocol; +#if PPP_DEBUG && PPP_PROTOCOLNAME + const char *pname; +#endif /* PPP_DEBUG && PPP_PROTOCOLNAME */ + + magic_randomize(); + + if (pb->len < 2) { + PPPDEBUG(LOG_ERR, ("ppp_input[%d]: packet too short\n", pcb->netif->num)); + goto drop; + } + protocol = (((u8_t *)pb->payload)[0] << 8) | ((u8_t*)pb->payload)[1]; + +#if PRINTPKT_SUPPORT + ppp_dump_packet(pcb, "rcvd", (unsigned char *)pb->payload, pb->len); +#endif /* PRINTPKT_SUPPORT */ + + pbuf_remove_header(pb, sizeof(protocol)); + + LINK_STATS_INC(link.recv); + MIB2_STATS_NETIF_INC(pcb->netif, ifinucastpkts); + MIB2_STATS_NETIF_ADD(pcb->netif, ifinoctets, pb->tot_len); + + /* + * Toss all non-LCP packets unless LCP is OPEN. + */ + if (protocol != PPP_LCP && pcb->lcp_fsm.state != PPP_FSM_OPENED) { + ppp_dbglog("Discarded non-LCP packet when LCP not open"); + goto drop; + } + + /* + * Until we get past the authentication phase, toss all packets + * except LCP, LQR and authentication packets. + */ + if (pcb->phase <= PPP_PHASE_AUTHENTICATE + && !(protocol == PPP_LCP +#if LQR_SUPPORT + || protocol == PPP_LQR +#endif /* LQR_SUPPORT */ +#if PAP_SUPPORT + || protocol == PPP_PAP +#endif /* PAP_SUPPORT */ +#if CHAP_SUPPORT + || protocol == PPP_CHAP +#endif /* CHAP_SUPPORT */ +#if EAP_SUPPORT + || protocol == PPP_EAP +#endif /* EAP_SUPPORT */ + )) { + ppp_dbglog("discarding proto 0x%x in phase %d", protocol, pcb->phase); + goto drop; + } + +#if CCP_SUPPORT +#if MPPE_SUPPORT + /* + * MPPE is required and unencrypted data has arrived (this + * should never happen!). We should probably drop the link if + * the protocol is in the range of what should be encrypted. + * At the least, we drop this packet. + */ + if (pcb->settings.require_mppe && protocol != PPP_COMP && protocol < 0x8000) { + PPPDEBUG(LOG_ERR, ("ppp_input[%d]: MPPE required, received unencrypted data!\n", pcb->netif->num)); + goto drop; + } +#endif /* MPPE_SUPPORT */ + + if (protocol == PPP_COMP) { + u8_t *pl; + + switch (pcb->ccp_receive_method) { +#if MPPE_SUPPORT + case CI_MPPE: + if (mppe_decompress(pcb, &pcb->mppe_decomp, &pb) != ERR_OK) { + goto drop; + } + break; +#endif /* MPPE_SUPPORT */ + default: + PPPDEBUG(LOG_ERR, ("ppp_input[%d]: bad CCP receive method\n", pcb->netif->num)); + goto drop; /* Cannot really happen, we only negotiate what we are able to do */ + } + + /* Assume no PFC */ + if (pb->len < 2) { + goto drop; + } + + /* Extract and hide protocol (do PFC decompression if necessary) */ + pl = (u8_t*)pb->payload; + if (pl[0] & 0x01) { + protocol = pl[0]; + pbuf_remove_header(pb, 1); + } else { + protocol = (pl[0] << 8) | pl[1]; + pbuf_remove_header(pb, 2); + } + } +#endif /* CCP_SUPPORT */ + + switch(protocol) { + +#if PPP_IPV4_SUPPORT + case PPP_IP: /* Internet Protocol */ + PPPDEBUG(LOG_INFO, ("ppp_input[%d]: ip in pbuf len=%d\n", pcb->netif->num, pb->tot_len)); + ip4_input(pb, pcb->netif); + return; +#endif /* PPP_IPV4_SUPPORT */ + +#if PPP_IPV6_SUPPORT + case PPP_IPV6: /* Internet Protocol Version 6 */ + PPPDEBUG(LOG_INFO, ("ppp_input[%d]: ip6 in pbuf len=%d\n", pcb->netif->num, pb->tot_len)); + ip6_input(pb, pcb->netif); + return; +#endif /* PPP_IPV6_SUPPORT */ + +#if VJ_SUPPORT + case PPP_VJC_COMP: /* VJ compressed TCP */ + /* + * Clip off the VJ header and prepend the rebuilt TCP/IP header and + * pass the result to IP. + */ + PPPDEBUG(LOG_INFO, ("ppp_input[%d]: vj_comp in pbuf len=%d\n", pcb->netif->num, pb->tot_len)); + if (pcb->vj_enabled && vj_uncompress_tcp(&pb, &pcb->vj_comp) >= 0) { + ip4_input(pb, pcb->netif); + return; + } + /* Something's wrong so drop it. */ + PPPDEBUG(LOG_WARNING, ("ppp_input[%d]: Dropping VJ compressed\n", pcb->netif->num)); + break; + + case PPP_VJC_UNCOMP: /* VJ uncompressed TCP */ + /* + * Process the TCP/IP header for VJ header compression and then pass + * the packet to IP. + */ + PPPDEBUG(LOG_INFO, ("ppp_input[%d]: vj_un in pbuf len=%d\n", pcb->netif->num, pb->tot_len)); + if (pcb->vj_enabled && vj_uncompress_uncomp(pb, &pcb->vj_comp) >= 0) { + ip4_input(pb, pcb->netif); + return; + } + /* Something's wrong so drop it. */ + PPPDEBUG(LOG_WARNING, ("ppp_input[%d]: Dropping VJ uncompressed\n", pcb->netif->num)); + break; +#endif /* VJ_SUPPORT */ + + default: { + int i; + const struct protent *protp; + + /* + * Upcall the proper protocol input routine. + */ + for (i = 0; (protp = protocols[i]) != NULL; ++i) { + if (protp->protocol == protocol) { + pb = pbuf_coalesce(pb, PBUF_RAW); + (*protp->input)(pcb, (u8_t*)pb->payload, pb->len); + goto out; + } +#if 0 /* UNUSED + * + * This is actually a (hacked?) way for the Linux kernel to pass a data + * packet to pppd. pppd in normal condition only do signaling + * (LCP, PAP, CHAP, IPCP, ...) and does not handle any data packet at all. + * + * We don't even need this interface, which is only there because of PPP + * interface limitation between Linux kernel and pppd. For MPPE, which uses + * CCP to negotiate although it is not really a (de)compressor, we added + * ccp_resetrequest() in CCP and MPPE input data flow is calling either + * ccp_resetrequest() or lcp_close() if the issue is, respectively, non-fatal + * or fatal, this is what ccp_datainput() really do. + */ + if (protocol == (protp->protocol & ~0x8000) + && protp->datainput != NULL) { + (*protp->datainput)(pcb, pb->payload, pb->len); + goto out; + } +#endif /* UNUSED */ + } + +#if PPP_DEBUG +#if PPP_PROTOCOLNAME + pname = protocol_name(protocol); + if (pname != NULL) { + ppp_warn("Unsupported protocol '%s' (0x%x) received", pname, protocol); + } else +#endif /* PPP_PROTOCOLNAME */ + ppp_warn("Unsupported protocol 0x%x received", protocol); +#endif /* PPP_DEBUG */ + if (pbuf_add_header(pb, sizeof(protocol))) { + PPPDEBUG(LOG_WARNING, ("ppp_input[%d]: Dropping (pbuf_add_header failed)\n", pcb->netif->num)); + goto drop; + } + lcp_sprotrej(pcb, (u8_t*)pb->payload, pb->len); + } + break; + } + +drop: + LINK_STATS_INC(link.drop); + MIB2_STATS_NETIF_INC(pcb->netif, ifindiscards); + +out: + pbuf_free(pb); +} + +/* + * Write a pbuf to a ppp link, only used from PPP functions + * to send PPP packets. + * + * IPv4 and IPv6 packets from lwIP are sent, respectively, + * with ppp_netif_output_ip4() and ppp_netif_output_ip6() + * functions (which are callbacks of the netif PPP interface). + */ +err_t ppp_write(ppp_pcb *pcb, struct pbuf *p) { +#if PRINTPKT_SUPPORT + ppp_dump_packet(pcb, "sent", (unsigned char *)p->payload+2, p->len-2); +#endif /* PRINTPKT_SUPPORT */ + return pcb->link_cb->write(pcb, pcb->link_ctx_cb, p); +} + +void ppp_link_terminated(ppp_pcb *pcb) { + PPPDEBUG(LOG_DEBUG, ("ppp_link_terminated[%d]\n", pcb->netif->num)); + pcb->link_cb->disconnect(pcb, pcb->link_ctx_cb); + PPPDEBUG(LOG_DEBUG, ("ppp_link_terminated[%d]: finished.\n", pcb->netif->num)); +} + + +/************************************************************************ + * Functions called by various PPP subsystems to configure + * the PPP interface or change the PPP phase. + */ + +/* + * new_phase - signal the start of a new phase of pppd's operation. + */ +void new_phase(ppp_pcb *pcb, int p) { + pcb->phase = p; + PPPDEBUG(LOG_DEBUG, ("ppp phase changed[%d]: phase=%d\n", pcb->netif->num, pcb->phase)); +#if PPP_NOTIFY_PHASE + if (pcb->notify_phase_cb != NULL) { + pcb->notify_phase_cb(pcb, p, pcb->ctx_cb); + } +#endif /* PPP_NOTIFY_PHASE */ +} + +/* + * ppp_send_config - configure the transmit-side characteristics of + * the ppp interface. + */ +int ppp_send_config(ppp_pcb *pcb, int mtu, u32_t accm, int pcomp, int accomp) { + LWIP_UNUSED_ARG(mtu); + /* pcb->mtu = mtu; -- set correctly with netif_set_mtu */ + + if (pcb->link_cb->send_config) { + pcb->link_cb->send_config(pcb, pcb->link_ctx_cb, accm, pcomp, accomp); + } + + PPPDEBUG(LOG_INFO, ("ppp_send_config[%d]\n", pcb->netif->num) ); + return 0; +} + +/* + * ppp_recv_config - configure the receive-side characteristics of + * the ppp interface. + */ +int ppp_recv_config(ppp_pcb *pcb, int mru, u32_t accm, int pcomp, int accomp) { + LWIP_UNUSED_ARG(mru); + + if (pcb->link_cb->recv_config) { + pcb->link_cb->recv_config(pcb, pcb->link_ctx_cb, accm, pcomp, accomp); + } + + PPPDEBUG(LOG_INFO, ("ppp_recv_config[%d]\n", pcb->netif->num)); + return 0; +} + +#if PPP_IPV4_SUPPORT +/* + * sifaddr - Config the interface IP addresses and netmask. + */ +int sifaddr(ppp_pcb *pcb, u32_t our_adr, u32_t his_adr, u32_t netmask) { + ip4_addr_t ip, nm, gw; + + ip4_addr_set_u32(&ip, our_adr); + ip4_addr_set_u32(&nm, netmask); + ip4_addr_set_u32(&gw, his_adr); + netif_set_addr(pcb->netif, &ip, &nm, &gw); + return 1; +} + +/******************************************************************** + * + * cifaddr - Clear the interface IP addresses, and delete routes + * through the interface if possible. + */ +int cifaddr(ppp_pcb *pcb, u32_t our_adr, u32_t his_adr) { + LWIP_UNUSED_ARG(our_adr); + LWIP_UNUSED_ARG(his_adr); + + netif_set_addr(pcb->netif, IP4_ADDR_ANY4, IP4_ADDR_BROADCAST, IP4_ADDR_ANY4); + return 1; +} + +#if 0 /* UNUSED - PROXY ARP */ +/******************************************************************** + * + * sifproxyarp - Make a proxy ARP entry for the peer. + */ + +int sifproxyarp(ppp_pcb *pcb, u32_t his_adr) { + LWIP_UNUSED_ARG(pcb); + LWIP_UNUSED_ARG(his_adr); + return 0; +} + +/******************************************************************** + * + * cifproxyarp - Delete the proxy ARP entry for the peer. + */ + +int cifproxyarp(ppp_pcb *pcb, u32_t his_adr) { + LWIP_UNUSED_ARG(pcb); + LWIP_UNUSED_ARG(his_adr); + return 0; +} +#endif /* UNUSED - PROXY ARP */ + +#if LWIP_DNS +/* + * sdns - Config the DNS servers + */ +int sdns(ppp_pcb *pcb, u32_t ns1, u32_t ns2) { + ip_addr_t ns; + LWIP_UNUSED_ARG(pcb); + + ip_addr_set_ip4_u32_val(ns, ns1); + dns_setserver(0, &ns); + ip_addr_set_ip4_u32_val(ns, ns2); + dns_setserver(1, &ns); + return 1; +} + +/******************************************************************** + * + * cdns - Clear the DNS servers + */ +int cdns(ppp_pcb *pcb, u32_t ns1, u32_t ns2) { + const ip_addr_t *nsa; + ip_addr_t nsb; + LWIP_UNUSED_ARG(pcb); + + nsa = dns_getserver(0); + ip_addr_set_ip4_u32_val(nsb, ns1); + if (ip_addr_cmp(nsa, &nsb)) { + dns_setserver(0, IP_ADDR_ANY); + } + nsa = dns_getserver(1); + ip_addr_set_ip4_u32_val(nsb, ns2); + if (ip_addr_cmp(nsa, &nsb)) { + dns_setserver(1, IP_ADDR_ANY); + } + return 1; +} +#endif /* LWIP_DNS */ + +#if VJ_SUPPORT +/******************************************************************** + * + * sifvjcomp - config tcp header compression + */ +int sifvjcomp(ppp_pcb *pcb, int vjcomp, int cidcomp, int maxcid) { + pcb->vj_enabled = vjcomp; + pcb->vj_comp.compressSlot = cidcomp; + pcb->vj_comp.maxSlotIndex = maxcid; + PPPDEBUG(LOG_INFO, ("sifvjcomp[%d]: VJ compress enable=%d slot=%d max slot=%d\n", + pcb->netif->num, vjcomp, cidcomp, maxcid)); + return 0; +} +#endif /* VJ_SUPPORT */ + +/* + * sifup - Config the interface up and enable IP packets to pass. + */ +int sifup(ppp_pcb *pcb) { + pcb->if4_up = 1; + pcb->err_code = PPPERR_NONE; + netif_set_link_up(pcb->netif); + + PPPDEBUG(LOG_DEBUG, ("sifup[%d]: err_code=%d\n", pcb->netif->num, pcb->err_code)); + pcb->link_status_cb(pcb, pcb->err_code, pcb->ctx_cb); + return 1; +} + +/******************************************************************** + * + * sifdown - Disable the indicated protocol and config the interface + * down if there are no remaining protocols. + */ +int sifdown(ppp_pcb *pcb) { + + pcb->if4_up = 0; + + if (1 +#if PPP_IPV6_SUPPORT + /* set the interface down if IPv6 is down as well */ + && !pcb->if6_up +#endif /* PPP_IPV6_SUPPORT */ + ) { + /* make sure the netif link callback is called */ + netif_set_link_down(pcb->netif); + } + PPPDEBUG(LOG_DEBUG, ("sifdown[%d]: err_code=%d\n", pcb->netif->num, pcb->err_code)); + return 1; +} + +/******************************************************************** + * + * Return user specified netmask, modified by any mask we might determine + * for address `addr' (in network byte order). + * Here we scan through the system's list of interfaces, looking for + * any non-point-to-point interfaces which might appear to be on the same + * network as `addr'. If we find any, we OR in their netmask to the + * user-specified netmask. + */ +u32_t get_mask(u32_t addr) { +#if 0 + u32_t mask, nmask; + + addr = lwip_htonl(addr); + if (IP_CLASSA(addr)) { /* determine network mask for address class */ + nmask = IP_CLASSA_NET; + } else if (IP_CLASSB(addr)) { + nmask = IP_CLASSB_NET; + } else { + nmask = IP_CLASSC_NET; + } + + /* class D nets are disallowed by bad_ip_adrs */ + mask = PP_HTONL(0xffffff00UL) | lwip_htonl(nmask); + + /* XXX + * Scan through the system's network interfaces. + * Get each netmask and OR them into our mask. + */ + /* return mask; */ + return mask; +#endif /* 0 */ + LWIP_UNUSED_ARG(addr); + return IPADDR_BROADCAST; +} +#endif /* PPP_IPV4_SUPPORT */ + +#if PPP_IPV6_SUPPORT +#define IN6_LLADDR_FROM_EUI64(ip6, eui64) do { \ + ip6.addr[0] = PP_HTONL(0xfe800000); \ + ip6.addr[1] = 0; \ + eui64_copy(eui64, ip6.addr[2]); \ + } while (0) + +/******************************************************************** + * + * sif6addr - Config the interface with an IPv6 link-local address + */ +int sif6addr(ppp_pcb *pcb, eui64_t our_eui64, eui64_t his_eui64) { + ip6_addr_t ip6; + LWIP_UNUSED_ARG(his_eui64); + + IN6_LLADDR_FROM_EUI64(ip6, our_eui64); + netif_ip6_addr_set(pcb->netif, 0, &ip6); + netif_ip6_addr_set_state(pcb->netif, 0, IP6_ADDR_PREFERRED); + /* FIXME: should we add an IPv6 static neighbor using his_eui64 ? */ + return 1; +} + +/******************************************************************** + * + * cif6addr - Remove IPv6 address from interface + */ +int cif6addr(ppp_pcb *pcb, eui64_t our_eui64, eui64_t his_eui64) { + LWIP_UNUSED_ARG(our_eui64); + LWIP_UNUSED_ARG(his_eui64); + + netif_ip6_addr_set_state(pcb->netif, 0, IP6_ADDR_INVALID); + netif_ip6_addr_set(pcb->netif, 0, IP6_ADDR_ANY6); + return 1; +} + +/* + * sif6up - Config the interface up and enable IPv6 packets to pass. + */ +int sif6up(ppp_pcb *pcb) { + + pcb->if6_up = 1; + pcb->err_code = PPPERR_NONE; + netif_set_link_up(pcb->netif); + + PPPDEBUG(LOG_DEBUG, ("sif6up[%d]: err_code=%d\n", pcb->netif->num, pcb->err_code)); + pcb->link_status_cb(pcb, pcb->err_code, pcb->ctx_cb); + return 1; +} + +/******************************************************************** + * + * sif6down - Disable the indicated protocol and config the interface + * down if there are no remaining protocols. + */ +int sif6down(ppp_pcb *pcb) { + + pcb->if6_up = 0; + + if (1 +#if PPP_IPV4_SUPPORT + /* set the interface down if IPv4 is down as well */ + && !pcb->if4_up +#endif /* PPP_IPV4_SUPPORT */ + ) { + /* make sure the netif link callback is called */ + netif_set_link_down(pcb->netif); + } + PPPDEBUG(LOG_DEBUG, ("sif6down[%d]: err_code=%d\n", pcb->netif->num, pcb->err_code)); + return 1; +} +#endif /* PPP_IPV6_SUPPORT */ + +#if DEMAND_SUPPORT +/* + * sifnpmode - Set the mode for handling packets for a given NP. + */ +int sifnpmode(ppp_pcb *pcb, int proto, enum NPmode mode) { + LWIP_UNUSED_ARG(pcb); + LWIP_UNUSED_ARG(proto); + LWIP_UNUSED_ARG(mode); + return 0; +} +#endif /* DEMAND_SUPPORT */ + +/* + * netif_set_mtu - set the MTU on the PPP network interface. + */ +void netif_set_mtu(ppp_pcb *pcb, int mtu) { + + pcb->netif->mtu = mtu; + PPPDEBUG(LOG_INFO, ("netif_set_mtu[%d]: mtu=%d\n", pcb->netif->num, mtu)); +} + +/* + * netif_get_mtu - get PPP interface MTU + */ +int netif_get_mtu(ppp_pcb *pcb) { + + return pcb->netif->mtu; +} + +#if CCP_SUPPORT +#if 0 /* unused */ +/* + * ccp_test - whether a given compression method is acceptable for use. + */ +int +ccp_test(ppp_pcb *pcb, u_char *opt_ptr, int opt_len, int for_transmit) +{ + LWIP_UNUSED_ARG(pcb); + LWIP_UNUSED_ARG(opt_ptr); + LWIP_UNUSED_ARG(opt_len); + LWIP_UNUSED_ARG(for_transmit); + return -1; +} +#endif /* unused */ + +/* + * ccp_set - inform about the current state of CCP. + */ +void +ccp_set(ppp_pcb *pcb, u8_t isopen, u8_t isup, u8_t receive_method, u8_t transmit_method) +{ + LWIP_UNUSED_ARG(isopen); + LWIP_UNUSED_ARG(isup); + pcb->ccp_receive_method = receive_method; + pcb->ccp_transmit_method = transmit_method; + PPPDEBUG(LOG_DEBUG, ("ccp_set[%d]: is_open=%d, is_up=%d, receive_method=%u, transmit_method=%u\n", + pcb->netif->num, isopen, isup, receive_method, transmit_method)); +} + +void +ccp_reset_comp(ppp_pcb *pcb) +{ + switch (pcb->ccp_transmit_method) { +#if MPPE_SUPPORT + case CI_MPPE: + mppe_comp_reset(pcb, &pcb->mppe_comp); + break; +#endif /* MPPE_SUPPORT */ + default: + break; + } +} + +void +ccp_reset_decomp(ppp_pcb *pcb) +{ + switch (pcb->ccp_receive_method) { +#if MPPE_SUPPORT + case CI_MPPE: + mppe_decomp_reset(pcb, &pcb->mppe_decomp); + break; +#endif /* MPPE_SUPPORT */ + default: + break; + } +} + +#if 0 /* unused */ +/* + * ccp_fatal_error - returns 1 if decompression was disabled as a + * result of an error detected after decompression of a packet, + * 0 otherwise. This is necessary because of patent nonsense. + */ +int +ccp_fatal_error(ppp_pcb *pcb) +{ + LWIP_UNUSED_ARG(pcb); + return 1; +} +#endif /* unused */ +#endif /* CCP_SUPPORT */ + +#if PPP_IDLETIMELIMIT +/******************************************************************** + * + * get_idle_time - return how long the link has been idle. + */ +int get_idle_time(ppp_pcb *pcb, struct ppp_idle *ip) { + /* FIXME: add idle time support and make it optional */ + LWIP_UNUSED_ARG(pcb); + LWIP_UNUSED_ARG(ip); + return 1; +} +#endif /* PPP_IDLETIMELIMIT */ + +#if DEMAND_SUPPORT +/******************************************************************** + * + * get_loop_output - get outgoing packets from the ppp device, + * and detect when we want to bring the real link up. + * Return value is 1 if we need to bring up the link, 0 otherwise. + */ +int get_loop_output(void) { + return 0; +} +#endif /* DEMAND_SUPPORT */ + +#if PPP_PROTOCOLNAME +/* List of protocol names, to make our messages a little more informative. */ +struct protocol_list { + u_short proto; + const char *name; +} const protocol_list[] = { + { 0x21, "IP" }, + { 0x23, "OSI Network Layer" }, + { 0x25, "Xerox NS IDP" }, + { 0x27, "DECnet Phase IV" }, + { 0x29, "Appletalk" }, + { 0x2b, "Novell IPX" }, + { 0x2d, "VJ compressed TCP/IP" }, + { 0x2f, "VJ uncompressed TCP/IP" }, + { 0x31, "Bridging PDU" }, + { 0x33, "Stream Protocol ST-II" }, + { 0x35, "Banyan Vines" }, + { 0x39, "AppleTalk EDDP" }, + { 0x3b, "AppleTalk SmartBuffered" }, + { 0x3d, "Multi-Link" }, + { 0x3f, "NETBIOS Framing" }, + { 0x41, "Cisco Systems" }, + { 0x43, "Ascom Timeplex" }, + { 0x45, "Fujitsu Link Backup and Load Balancing (LBLB)" }, + { 0x47, "DCA Remote Lan" }, + { 0x49, "Serial Data Transport Protocol (PPP-SDTP)" }, + { 0x4b, "SNA over 802.2" }, + { 0x4d, "SNA" }, + { 0x4f, "IP6 Header Compression" }, + { 0x51, "KNX Bridging Data" }, + { 0x53, "Encryption" }, + { 0x55, "Individual Link Encryption" }, + { 0x57, "IPv6" }, + { 0x59, "PPP Muxing" }, + { 0x5b, "Vendor-Specific Network Protocol" }, + { 0x61, "RTP IPHC Full Header" }, + { 0x63, "RTP IPHC Compressed TCP" }, + { 0x65, "RTP IPHC Compressed non-TCP" }, + { 0x67, "RTP IPHC Compressed UDP 8" }, + { 0x69, "RTP IPHC Compressed RTP 8" }, + { 0x6f, "Stampede Bridging" }, + { 0x73, "MP+" }, + { 0xc1, "NTCITS IPI" }, + { 0xfb, "single-link compression" }, + { 0xfd, "Compressed Datagram" }, + { 0x0201, "802.1d Hello Packets" }, + { 0x0203, "IBM Source Routing BPDU" }, + { 0x0205, "DEC LANBridge100 Spanning Tree" }, + { 0x0207, "Cisco Discovery Protocol" }, + { 0x0209, "Netcs Twin Routing" }, + { 0x020b, "STP - Scheduled Transfer Protocol" }, + { 0x020d, "EDP - Extreme Discovery Protocol" }, + { 0x0211, "Optical Supervisory Channel Protocol" }, + { 0x0213, "Optical Supervisory Channel Protocol" }, + { 0x0231, "Luxcom" }, + { 0x0233, "Sigma Network Systems" }, + { 0x0235, "Apple Client Server Protocol" }, + { 0x0281, "MPLS Unicast" }, + { 0x0283, "MPLS Multicast" }, + { 0x0285, "IEEE p1284.4 standard - data packets" }, + { 0x0287, "ETSI TETRA Network Protocol Type 1" }, + { 0x0289, "Multichannel Flow Treatment Protocol" }, + { 0x2063, "RTP IPHC Compressed TCP No Delta" }, + { 0x2065, "RTP IPHC Context State" }, + { 0x2067, "RTP IPHC Compressed UDP 16" }, + { 0x2069, "RTP IPHC Compressed RTP 16" }, + { 0x4001, "Cray Communications Control Protocol" }, + { 0x4003, "CDPD Mobile Network Registration Protocol" }, + { 0x4005, "Expand accelerator protocol" }, + { 0x4007, "ODSICP NCP" }, + { 0x4009, "DOCSIS DLL" }, + { 0x400B, "Cetacean Network Detection Protocol" }, + { 0x4021, "Stacker LZS" }, + { 0x4023, "RefTek Protocol" }, + { 0x4025, "Fibre Channel" }, + { 0x4027, "EMIT Protocols" }, + { 0x405b, "Vendor-Specific Protocol (VSP)" }, + { 0x8021, "Internet Protocol Control Protocol" }, + { 0x8023, "OSI Network Layer Control Protocol" }, + { 0x8025, "Xerox NS IDP Control Protocol" }, + { 0x8027, "DECnet Phase IV Control Protocol" }, + { 0x8029, "Appletalk Control Protocol" }, + { 0x802b, "Novell IPX Control Protocol" }, + { 0x8031, "Bridging NCP" }, + { 0x8033, "Stream Protocol Control Protocol" }, + { 0x8035, "Banyan Vines Control Protocol" }, + { 0x803d, "Multi-Link Control Protocol" }, + { 0x803f, "NETBIOS Framing Control Protocol" }, + { 0x8041, "Cisco Systems Control Protocol" }, + { 0x8043, "Ascom Timeplex" }, + { 0x8045, "Fujitsu LBLB Control Protocol" }, + { 0x8047, "DCA Remote Lan Network Control Protocol (RLNCP)" }, + { 0x8049, "Serial Data Control Protocol (PPP-SDCP)" }, + { 0x804b, "SNA over 802.2 Control Protocol" }, + { 0x804d, "SNA Control Protocol" }, + { 0x804f, "IP6 Header Compression Control Protocol" }, + { 0x8051, "KNX Bridging Control Protocol" }, + { 0x8053, "Encryption Control Protocol" }, + { 0x8055, "Individual Link Encryption Control Protocol" }, + { 0x8057, "IPv6 Control Protocol" }, + { 0x8059, "PPP Muxing Control Protocol" }, + { 0x805b, "Vendor-Specific Network Control Protocol (VSNCP)" }, + { 0x806f, "Stampede Bridging Control Protocol" }, + { 0x8073, "MP+ Control Protocol" }, + { 0x80c1, "NTCITS IPI Control Protocol" }, + { 0x80fb, "Single Link Compression Control Protocol" }, + { 0x80fd, "Compression Control Protocol" }, + { 0x8207, "Cisco Discovery Protocol Control" }, + { 0x8209, "Netcs Twin Routing" }, + { 0x820b, "STP - Control Protocol" }, + { 0x820d, "EDPCP - Extreme Discovery Protocol Ctrl Prtcl" }, + { 0x8235, "Apple Client Server Protocol Control" }, + { 0x8281, "MPLSCP" }, + { 0x8285, "IEEE p1284.4 standard - Protocol Control" }, + { 0x8287, "ETSI TETRA TNP1 Control Protocol" }, + { 0x8289, "Multichannel Flow Treatment Protocol" }, + { 0xc021, "Link Control Protocol" }, + { 0xc023, "Password Authentication Protocol" }, + { 0xc025, "Link Quality Report" }, + { 0xc027, "Shiva Password Authentication Protocol" }, + { 0xc029, "CallBack Control Protocol (CBCP)" }, + { 0xc02b, "BACP Bandwidth Allocation Control Protocol" }, + { 0xc02d, "BAP" }, + { 0xc05b, "Vendor-Specific Authentication Protocol (VSAP)" }, + { 0xc081, "Container Control Protocol" }, + { 0xc223, "Challenge Handshake Authentication Protocol" }, + { 0xc225, "RSA Authentication Protocol" }, + { 0xc227, "Extensible Authentication Protocol" }, + { 0xc229, "Mitsubishi Security Info Exch Ptcl (SIEP)" }, + { 0xc26f, "Stampede Bridging Authorization Protocol" }, + { 0xc281, "Proprietary Authentication Protocol" }, + { 0xc283, "Proprietary Authentication Protocol" }, + { 0xc481, "Proprietary Node ID Authentication Protocol" }, + { 0, NULL }, +}; + +/* + * protocol_name - find a name for a PPP protocol. + */ +const char * protocol_name(int proto) { + const struct protocol_list *lp; + + for (lp = protocol_list; lp->proto != 0; ++lp) { + if (proto == lp->proto) { + return lp->name; + } + } + return NULL; +} +#endif /* PPP_PROTOCOLNAME */ + +#if PPP_STATS_SUPPORT + +/* ---- Note on PPP Stats support ---- + * + * The one willing link stats support should add the get_ppp_stats() + * to fetch statistics from lwIP. + */ + +/* + * reset_link_stats - "reset" stats when link goes up. + */ +void reset_link_stats(int u) { + if (!get_ppp_stats(u, &old_link_stats)) { + return; + } + gettimeofday(&start_time, NULL); +} + +/* + * update_link_stats - get stats at link termination. + */ +void update_link_stats(int u) { + struct timeval now; + char numbuf[32]; + + if (!get_ppp_stats(u, &link_stats) || gettimeofday(&now, NULL) < 0) { + return; + } + link_connect_time = now.tv_sec - start_time.tv_sec; + link_stats_valid = 1; + + link_stats.bytes_in -= old_link_stats.bytes_in; + link_stats.bytes_out -= old_link_stats.bytes_out; + link_stats.pkts_in -= old_link_stats.pkts_in; + link_stats.pkts_out -= old_link_stats.pkts_out; +} + +void print_link_stats() { + /* + * Print connect time and statistics. + */ + if (link_stats_valid) { + int t = (link_connect_time + 5) / 6; /* 1/10ths of minutes */ + info("Connect time %d.%d minutes.", t/10, t%10); + info("Sent %u bytes, received %u bytes.", link_stats.bytes_out, link_stats.bytes_in); + link_stats_valid = 0; + } +} +#endif /* PPP_STATS_SUPPORT */ + +#endif /* PPP_SUPPORT */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/pppapi.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/pppapi.c new file mode 100644 index 0000000000000000000000000000000000000000..947f7ba8c14f98c1ef59f88c5446459721e223e1 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/pppapi.c @@ -0,0 +1,427 @@ +/** + * @file + * Point To Point Protocol Sequential API module + * + */ + +/* + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + */ + +#include "netif/ppp/ppp_opts.h" + +#if LWIP_PPP_API /* don't build if not configured for use in lwipopts.h */ + +#include "netif/ppp/pppapi.h" +#include "lwip/priv/tcpip_priv.h" +#include "netif/ppp/pppoe.h" +#include "netif/ppp/pppol2tp.h" +#include "netif/ppp/pppos.h" + +#if LWIP_MPU_COMPATIBLE +LWIP_MEMPOOL_DECLARE(PPPAPI_MSG, MEMP_NUM_PPP_API_MSG, sizeof(struct pppapi_msg), "PPPAPI_MSG") +#endif + +#define PPPAPI_VAR_REF(name) API_VAR_REF(name) +#define PPPAPI_VAR_DECLARE(name) API_VAR_DECLARE(struct pppapi_msg, name) +#define PPPAPI_VAR_ALLOC(name) API_VAR_ALLOC_POOL(struct pppapi_msg, PPPAPI_MSG, name, ERR_MEM) +#define PPPAPI_VAR_ALLOC_RETURN_NULL(name) API_VAR_ALLOC_POOL(struct pppapi_msg, PPPAPI_MSG, name, NULL) +#define PPPAPI_VAR_FREE(name) API_VAR_FREE_POOL(PPPAPI_MSG, name) + +/** + * Call ppp_set_default() inside the tcpip_thread context. + */ +static err_t +pppapi_do_ppp_set_default(struct tcpip_api_call_data *m) +{ + /* cast through void* to silence alignment warnings. + * We know it works because the structs have been instantiated as struct pppapi_msg */ + struct pppapi_msg *msg = (struct pppapi_msg *)(void*)m; + + ppp_set_default(msg->msg.ppp); + return ERR_OK; +} + +/** + * Call ppp_set_default() in a thread-safe way by running that function inside the + * tcpip_thread context. + */ +err_t +pppapi_set_default(ppp_pcb *pcb) +{ + err_t err; + PPPAPI_VAR_DECLARE(msg); + PPPAPI_VAR_ALLOC(msg); + + PPPAPI_VAR_REF(msg).msg.ppp = pcb; + err = tcpip_api_call(pppapi_do_ppp_set_default, &PPPAPI_VAR_REF(msg).call); + PPPAPI_VAR_FREE(msg); + return err; +} + + +#if PPP_NOTIFY_PHASE +/** + * Call ppp_set_notify_phase_callback() inside the tcpip_thread context. + */ +static err_t +pppapi_do_ppp_set_notify_phase_callback(struct tcpip_api_call_data *m) +{ + /* cast through void* to silence alignment warnings. + * We know it works because the structs have been instantiated as struct pppapi_msg */ + struct pppapi_msg *msg = (struct pppapi_msg *)(void*)m; + + ppp_set_notify_phase_callback(msg->msg.ppp, msg->msg.msg.setnotifyphasecb.notify_phase_cb); + return ERR_OK; +} + +/** + * Call ppp_set_notify_phase_callback() in a thread-safe way by running that function inside the + * tcpip_thread context. + */ +err_t +pppapi_set_notify_phase_callback(ppp_pcb *pcb, ppp_notify_phase_cb_fn notify_phase_cb) +{ + err_t err; + PPPAPI_VAR_DECLARE(msg); + PPPAPI_VAR_ALLOC(msg); + + PPPAPI_VAR_REF(msg).msg.ppp = pcb; + PPPAPI_VAR_REF(msg).msg.msg.setnotifyphasecb.notify_phase_cb = notify_phase_cb; + err = tcpip_api_call(pppapi_do_ppp_set_notify_phase_callback, &PPPAPI_VAR_REF(msg).call); + PPPAPI_VAR_FREE(msg); + return err; +} +#endif /* PPP_NOTIFY_PHASE */ + + +#if PPPOS_SUPPORT +/** + * Call pppos_create() inside the tcpip_thread context. + */ +static err_t +pppapi_do_pppos_create(struct tcpip_api_call_data *m) +{ + /* cast through void* to silence alignment warnings. + * We know it works because the structs have been instantiated as struct pppapi_msg */ + struct pppapi_msg *msg = (struct pppapi_msg *)(void*)m; + + msg->msg.ppp = pppos_create(msg->msg.msg.serialcreate.pppif, msg->msg.msg.serialcreate.output_cb, + msg->msg.msg.serialcreate.link_status_cb, msg->msg.msg.serialcreate.ctx_cb); + return ERR_OK; +} + +/** + * Call pppos_create() in a thread-safe way by running that function inside the + * tcpip_thread context. + */ +ppp_pcb* +pppapi_pppos_create(struct netif *pppif, pppos_output_cb_fn output_cb, + ppp_link_status_cb_fn link_status_cb, void *ctx_cb) +{ + ppp_pcb* result; + PPPAPI_VAR_DECLARE(msg); + PPPAPI_VAR_ALLOC_RETURN_NULL(msg); + + PPPAPI_VAR_REF(msg).msg.ppp = NULL; + PPPAPI_VAR_REF(msg).msg.msg.serialcreate.pppif = pppif; + PPPAPI_VAR_REF(msg).msg.msg.serialcreate.output_cb = output_cb; + PPPAPI_VAR_REF(msg).msg.msg.serialcreate.link_status_cb = link_status_cb; + PPPAPI_VAR_REF(msg).msg.msg.serialcreate.ctx_cb = ctx_cb; + tcpip_api_call(pppapi_do_pppos_create, &PPPAPI_VAR_REF(msg).call); + result = PPPAPI_VAR_REF(msg).msg.ppp; + PPPAPI_VAR_FREE(msg); + return result; +} +#endif /* PPPOS_SUPPORT */ + + +#if PPPOE_SUPPORT +/** + * Call pppoe_create() inside the tcpip_thread context. + */ +static err_t +pppapi_do_pppoe_create(struct tcpip_api_call_data *m) +{ + /* cast through void* to silence alignment warnings. + * We know it works because the structs have been instantiated as struct pppapi_msg */ + struct pppapi_msg *msg = (struct pppapi_msg *)(void*)m; + + msg->msg.ppp = pppoe_create(msg->msg.msg.ethernetcreate.pppif, msg->msg.msg.ethernetcreate.ethif, + msg->msg.msg.ethernetcreate.service_name, msg->msg.msg.ethernetcreate.concentrator_name, + msg->msg.msg.ethernetcreate.link_status_cb, msg->msg.msg.ethernetcreate.ctx_cb); + return ERR_OK; +} + +/** + * Call pppoe_create() in a thread-safe way by running that function inside the + * tcpip_thread context. + */ +ppp_pcb* +pppapi_pppoe_create(struct netif *pppif, struct netif *ethif, const char *service_name, + const char *concentrator_name, ppp_link_status_cb_fn link_status_cb, + void *ctx_cb) +{ + ppp_pcb* result; + PPPAPI_VAR_DECLARE(msg); + PPPAPI_VAR_ALLOC_RETURN_NULL(msg); + + PPPAPI_VAR_REF(msg).msg.ppp = NULL; + PPPAPI_VAR_REF(msg).msg.msg.ethernetcreate.pppif = pppif; + PPPAPI_VAR_REF(msg).msg.msg.ethernetcreate.ethif = ethif; + PPPAPI_VAR_REF(msg).msg.msg.ethernetcreate.service_name = service_name; + PPPAPI_VAR_REF(msg).msg.msg.ethernetcreate.concentrator_name = concentrator_name; + PPPAPI_VAR_REF(msg).msg.msg.ethernetcreate.link_status_cb = link_status_cb; + PPPAPI_VAR_REF(msg).msg.msg.ethernetcreate.ctx_cb = ctx_cb; + tcpip_api_call(pppapi_do_pppoe_create, &PPPAPI_VAR_REF(msg).call); + result = PPPAPI_VAR_REF(msg).msg.ppp; + PPPAPI_VAR_FREE(msg); + return result; +} +#endif /* PPPOE_SUPPORT */ + + +#if PPPOL2TP_SUPPORT +/** + * Call pppol2tp_create() inside the tcpip_thread context. + */ +static err_t +pppapi_do_pppol2tp_create(struct tcpip_api_call_data *m) +{ + /* cast through void* to silence alignment warnings. + * We know it works because the structs have been instantiated as struct pppapi_msg */ + struct pppapi_msg *msg = (struct pppapi_msg *)(void*)m; + + msg->msg.ppp = pppol2tp_create(msg->msg.msg.l2tpcreate.pppif, + msg->msg.msg.l2tpcreate.netif, API_EXPR_REF(msg->msg.msg.l2tpcreate.ipaddr), msg->msg.msg.l2tpcreate.port, +#if PPPOL2TP_AUTH_SUPPORT + msg->msg.msg.l2tpcreate.secret, + msg->msg.msg.l2tpcreate.secret_len, +#else /* PPPOL2TP_AUTH_SUPPORT */ + NULL, + 0, +#endif /* PPPOL2TP_AUTH_SUPPORT */ + msg->msg.msg.l2tpcreate.link_status_cb, msg->msg.msg.l2tpcreate.ctx_cb); + return ERR_OK; +} + +/** + * Call pppol2tp_create() in a thread-safe way by running that function inside the + * tcpip_thread context. + */ +ppp_pcb* +pppapi_pppol2tp_create(struct netif *pppif, struct netif *netif, ip_addr_t *ipaddr, u16_t port, + const u8_t *secret, u8_t secret_len, + ppp_link_status_cb_fn link_status_cb, void *ctx_cb) +{ + ppp_pcb* result; + PPPAPI_VAR_DECLARE(msg); + PPPAPI_VAR_ALLOC_RETURN_NULL(msg); +#if !PPPOL2TP_AUTH_SUPPORT + LWIP_UNUSED_ARG(secret); + LWIP_UNUSED_ARG(secret_len); +#endif /* !PPPOL2TP_AUTH_SUPPORT */ + + PPPAPI_VAR_REF(msg).msg.ppp = NULL; + PPPAPI_VAR_REF(msg).msg.msg.l2tpcreate.pppif = pppif; + PPPAPI_VAR_REF(msg).msg.msg.l2tpcreate.netif = netif; + PPPAPI_VAR_REF(msg).msg.msg.l2tpcreate.ipaddr = PPPAPI_VAR_REF(ipaddr); + PPPAPI_VAR_REF(msg).msg.msg.l2tpcreate.port = port; +#if PPPOL2TP_AUTH_SUPPORT + PPPAPI_VAR_REF(msg).msg.msg.l2tpcreate.secret = secret; + PPPAPI_VAR_REF(msg).msg.msg.l2tpcreate.secret_len = secret_len; +#endif /* PPPOL2TP_AUTH_SUPPORT */ + PPPAPI_VAR_REF(msg).msg.msg.l2tpcreate.link_status_cb = link_status_cb; + PPPAPI_VAR_REF(msg).msg.msg.l2tpcreate.ctx_cb = ctx_cb; + tcpip_api_call(pppapi_do_pppol2tp_create, &PPPAPI_VAR_REF(msg).call); + result = PPPAPI_VAR_REF(msg).msg.ppp; + PPPAPI_VAR_FREE(msg); + return result; +} +#endif /* PPPOL2TP_SUPPORT */ + + +/** + * Call ppp_connect() inside the tcpip_thread context. + */ +static err_t +pppapi_do_ppp_connect(struct tcpip_api_call_data *m) +{ + /* cast through void* to silence alignment warnings. + * We know it works because the structs have been instantiated as struct pppapi_msg */ + struct pppapi_msg *msg = (struct pppapi_msg *)(void*)m; + + return ppp_connect(msg->msg.ppp, msg->msg.msg.connect.holdoff); +} + +/** + * Call ppp_connect() in a thread-safe way by running that function inside the + * tcpip_thread context. + */ +err_t +pppapi_connect(ppp_pcb *pcb, u16_t holdoff) +{ + err_t err; + PPPAPI_VAR_DECLARE(msg); + PPPAPI_VAR_ALLOC(msg); + + PPPAPI_VAR_REF(msg).msg.ppp = pcb; + PPPAPI_VAR_REF(msg).msg.msg.connect.holdoff = holdoff; + err = tcpip_api_call(pppapi_do_ppp_connect, &PPPAPI_VAR_REF(msg).call); + PPPAPI_VAR_FREE(msg); + return err; +} + + +#if PPP_SERVER +/** + * Call ppp_listen() inside the tcpip_thread context. + */ +static err_t +pppapi_do_ppp_listen(struct tcpip_api_call_data *m) +{ + /* cast through void* to silence alignment warnings. + * We know it works because the structs have been instantiated as struct pppapi_msg */ + struct pppapi_msg *msg = (struct pppapi_msg *)(void*)m; + + return ppp_listen(msg->msg.ppp); +} + +/** + * Call ppp_listen() in a thread-safe way by running that function inside the + * tcpip_thread context. + */ +err_t +pppapi_listen(ppp_pcb *pcb) +{ + err_t err; + PPPAPI_VAR_DECLARE(msg); + PPPAPI_VAR_ALLOC(msg); + + PPPAPI_VAR_REF(msg).msg.ppp = pcb; + err = tcpip_api_call(pppapi_do_ppp_listen, &PPPAPI_VAR_REF(msg).call); + PPPAPI_VAR_FREE(msg); + return err; +} +#endif /* PPP_SERVER */ + + +/** + * Call ppp_close() inside the tcpip_thread context. + */ +static err_t +pppapi_do_ppp_close(struct tcpip_api_call_data *m) +{ + /* cast through void* to silence alignment warnings. + * We know it works because the structs have been instantiated as struct pppapi_msg */ + struct pppapi_msg *msg = (struct pppapi_msg *)(void*)m; + + return ppp_close(msg->msg.ppp, msg->msg.msg.close.nocarrier); +} + +/** + * Call ppp_close() in a thread-safe way by running that function inside the + * tcpip_thread context. + */ +err_t +pppapi_close(ppp_pcb *pcb, u8_t nocarrier) +{ + err_t err; + PPPAPI_VAR_DECLARE(msg); + PPPAPI_VAR_ALLOC(msg); + + PPPAPI_VAR_REF(msg).msg.ppp = pcb; + PPPAPI_VAR_REF(msg).msg.msg.close.nocarrier = nocarrier; + err = tcpip_api_call(pppapi_do_ppp_close, &PPPAPI_VAR_REF(msg).call); + PPPAPI_VAR_FREE(msg); + return err; +} + + +/** + * Call ppp_free() inside the tcpip_thread context. + */ +static err_t +pppapi_do_ppp_free(struct tcpip_api_call_data *m) +{ + /* cast through void* to silence alignment warnings. + * We know it works because the structs have been instantiated as struct pppapi_msg */ + struct pppapi_msg *msg = (struct pppapi_msg *)(void*)m; + + return ppp_free(msg->msg.ppp); +} + +/** + * Call ppp_free() in a thread-safe way by running that function inside the + * tcpip_thread context. + */ +err_t +pppapi_free(ppp_pcb *pcb) +{ + err_t err; + PPPAPI_VAR_DECLARE(msg); + PPPAPI_VAR_ALLOC(msg); + + PPPAPI_VAR_REF(msg).msg.ppp = pcb; + err = tcpip_api_call(pppapi_do_ppp_free, &PPPAPI_VAR_REF(msg).call); + PPPAPI_VAR_FREE(msg); + return err; +} + + +/** + * Call ppp_ioctl() inside the tcpip_thread context. + */ +static err_t +pppapi_do_ppp_ioctl(struct tcpip_api_call_data *m) +{ + /* cast through void* to silence alignment warnings. + * We know it works because the structs have been instantiated as struct pppapi_msg */ + struct pppapi_msg *msg = (struct pppapi_msg *)(void*)m; + + return ppp_ioctl(msg->msg.ppp, msg->msg.msg.ioctl.cmd, msg->msg.msg.ioctl.arg); +} + +/** + * Call ppp_ioctl() in a thread-safe way by running that function inside the + * tcpip_thread context. + */ +err_t +pppapi_ioctl(ppp_pcb *pcb, u8_t cmd, void *arg) +{ + err_t err; + PPPAPI_VAR_DECLARE(msg); + PPPAPI_VAR_ALLOC(msg); + + PPPAPI_VAR_REF(msg).msg.ppp = pcb; + PPPAPI_VAR_REF(msg).msg.msg.ioctl.cmd = cmd; + PPPAPI_VAR_REF(msg).msg.msg.ioctl.arg = arg; + err = tcpip_api_call(pppapi_do_ppp_ioctl, &PPPAPI_VAR_REF(msg).call); + PPPAPI_VAR_FREE(msg); + return err; +} + +#endif /* LWIP_PPP_API */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/pppcrypt.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/pppcrypt.c new file mode 100644 index 0000000000000000000000000000000000000000..82d78c13ac31ed17f2f630f4c34eecaea8e041ed --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/pppcrypt.c @@ -0,0 +1,66 @@ +/* + * pppcrypt.c - PPP/DES linkage for MS-CHAP and EAP SRP-SHA1 + * + * Extracted from chap_ms.c by James Carlson. + * + * Copyright (c) 1995 Eric Rosenquist. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The name(s) of the authors of this software must not be used to + * endorse or promote products derived from this software without + * prior written permission. + * + * THE AUTHORS OF THIS SOFTWARE DISCLAIM ALL WARRANTIES WITH REGARD TO + * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY + * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include "netif/ppp/ppp_opts.h" +#if PPP_SUPPORT && MSCHAP_SUPPORT /* don't build if not necessary */ + +#include "netif/ppp/ppp_impl.h" + +#include "netif/ppp/pppcrypt.h" + + +static u_char pppcrypt_get_7bits(u_char *input, int startBit) { + unsigned int word; + + word = (unsigned)input[startBit / 8] << 8; + word |= (unsigned)input[startBit / 8 + 1]; + + word >>= 15 - (startBit % 8 + 7); + + return word & 0xFE; +} + +/* IN 56 bit DES key missing parity bits + * OUT 64 bit DES key with parity bits added + */ +void pppcrypt_56_to_64_bit_key(u_char *key, u_char * des_key) { + des_key[0] = pppcrypt_get_7bits(key, 0); + des_key[1] = pppcrypt_get_7bits(key, 7); + des_key[2] = pppcrypt_get_7bits(key, 14); + des_key[3] = pppcrypt_get_7bits(key, 21); + des_key[4] = pppcrypt_get_7bits(key, 28); + des_key[5] = pppcrypt_get_7bits(key, 35); + des_key[6] = pppcrypt_get_7bits(key, 42); + des_key[7] = pppcrypt_get_7bits(key, 49); +} + +#endif /* PPP_SUPPORT && MSCHAP_SUPPORT */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/pppoe.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/pppoe.c new file mode 100644 index 0000000000000000000000000000000000000000..8ed2d638fdc5733a570a655889f59291de3686d1 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/pppoe.c @@ -0,0 +1,1201 @@ +/***************************************************************************** +* pppoe.c - PPP Over Ethernet implementation for lwIP. +* +* Copyright (c) 2006 by Marc Boucher, Services Informatiques (MBSI) inc. +* +* The authors hereby grant permission to use, copy, modify, distribute, +* and license this software and its documentation for any purpose, provided +* that existing copyright notices are retained in all copies and that this +* notice and the following disclaimer are included verbatim in any +* distributions. No written agreement, license, or royalty fee is required +* for any of the authorized uses. +* +* THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS *AS IS* AND ANY EXPRESS OR +* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +* IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +****************************************************************************** +* REVISION HISTORY +* +* 06-01-01 Marc Boucher +* Ported to lwIP. +*****************************************************************************/ + + + +/* based on NetBSD: if_pppoe.c,v 1.64 2006/01/31 23:50:15 martin Exp */ + +/*- + * Copyright (c) 2002 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Martin Husemann . + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the NetBSD + * Foundation, Inc. and its contributors. + * 4. Neither the name of The NetBSD Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include "netif/ppp/ppp_opts.h" +#if PPP_SUPPORT && PPPOE_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +#if 0 /* UNUSED */ +#include +#include +#endif /* UNUSED */ + +#include "lwip/timeouts.h" +#include "lwip/memp.h" +#include "lwip/stats.h" +#include "lwip/snmp.h" + +#include "netif/ethernet.h" +#include "netif/ppp/ppp_impl.h" +#include "netif/ppp/lcp.h" +#include "netif/ppp/ipcp.h" +#include "netif/ppp/pppoe.h" + +/* Memory pool */ +LWIP_MEMPOOL_DECLARE(PPPOE_IF, MEMP_NUM_PPPOE_INTERFACES, sizeof(struct pppoe_softc), "PPPOE_IF") + +/* Add a 16 bit unsigned value to a buffer pointed to by PTR */ +#define PPPOE_ADD_16(PTR, VAL) \ + *(PTR)++ = (u8_t)((VAL) / 256); \ + *(PTR)++ = (u8_t)((VAL) % 256) + +/* Add a complete PPPoE header to the buffer pointed to by PTR */ +#define PPPOE_ADD_HEADER(PTR, CODE, SESS, LEN) \ + *(PTR)++ = PPPOE_VERTYPE; \ + *(PTR)++ = (CODE); \ + PPPOE_ADD_16(PTR, SESS); \ + PPPOE_ADD_16(PTR, LEN) + +#define PPPOE_DISC_TIMEOUT (5*1000) /* base for quick timeout calculation */ +#define PPPOE_SLOW_RETRY (60*1000) /* persistent retry interval */ +#define PPPOE_DISC_MAXPADI 4 /* retry PADI four times (quickly) */ +#define PPPOE_DISC_MAXPADR 2 /* retry PADR twice */ + +#ifdef PPPOE_SERVER +#error "PPPOE_SERVER is not yet supported under lwIP!" +/* from if_spppsubr.c */ +#define IFF_PASSIVE IFF_LINK0 /* wait passively for connection */ +#endif + +#define PPPOE_ERRORSTRING_LEN 64 + + +/* callbacks called from PPP core */ +static err_t pppoe_write(ppp_pcb *ppp, void *ctx, struct pbuf *p); +static err_t pppoe_netif_output(ppp_pcb *ppp, void *ctx, struct pbuf *p, u_short protocol); +static void pppoe_connect(ppp_pcb *ppp, void *ctx); +static void pppoe_disconnect(ppp_pcb *ppp, void *ctx); +static err_t pppoe_destroy(ppp_pcb *ppp, void *ctx); + +/* management routines */ +static void pppoe_abort_connect(struct pppoe_softc *); +#if 0 /* UNUSED */ +static void pppoe_clear_softc(struct pppoe_softc *, const char *); +#endif /* UNUSED */ + +/* internal timeout handling */ +static void pppoe_timeout(void *); + +/* sending actual protocol controll packets */ +static err_t pppoe_send_padi(struct pppoe_softc *); +static err_t pppoe_send_padr(struct pppoe_softc *); +#ifdef PPPOE_SERVER +static err_t pppoe_send_pado(struct pppoe_softc *); +static err_t pppoe_send_pads(struct pppoe_softc *); +#endif +static err_t pppoe_send_padt(struct netif *, u_int, const u8_t *); + +/* internal helper functions */ +static err_t pppoe_xmit(struct pppoe_softc *sc, struct pbuf *pb); +static struct pppoe_softc* pppoe_find_softc_by_session(u_int session, struct netif *rcvif); +static struct pppoe_softc* pppoe_find_softc_by_hunique(u8_t *token, size_t len, struct netif *rcvif); + +/** linked list of created pppoe interfaces */ +static struct pppoe_softc *pppoe_softc_list; + +/* Callbacks structure for PPP core */ +static const struct link_callbacks pppoe_callbacks = { + pppoe_connect, +#if PPP_SERVER + NULL, +#endif /* PPP_SERVER */ + pppoe_disconnect, + pppoe_destroy, + pppoe_write, + pppoe_netif_output, + NULL, + NULL +}; + +/* + * Create a new PPP Over Ethernet (PPPoE) connection. + * + * Return 0 on success, an error code on failure. + */ +ppp_pcb *pppoe_create(struct netif *pppif, + struct netif *ethif, + const char *service_name, const char *concentrator_name, + ppp_link_status_cb_fn link_status_cb, void *ctx_cb) +{ + ppp_pcb *ppp; + struct pppoe_softc *sc; + LWIP_UNUSED_ARG(service_name); + LWIP_UNUSED_ARG(concentrator_name); + LWIP_ASSERT_CORE_LOCKED(); + + sc = (struct pppoe_softc *)LWIP_MEMPOOL_ALLOC(PPPOE_IF); + if (sc == NULL) { + return NULL; + } + + ppp = ppp_new(pppif, &pppoe_callbacks, sc, link_status_cb, ctx_cb); + if (ppp == NULL) { + LWIP_MEMPOOL_FREE(PPPOE_IF, sc); + return NULL; + } + + memset(sc, 0, sizeof(struct pppoe_softc)); + sc->pcb = ppp; + sc->sc_ethif = ethif; + /* put the new interface at the head of the list */ + sc->next = pppoe_softc_list; + pppoe_softc_list = sc; + return ppp; +} + +/* Called by PPP core */ +static err_t pppoe_write(ppp_pcb *ppp, void *ctx, struct pbuf *p) { + struct pppoe_softc *sc = (struct pppoe_softc *)ctx; + struct pbuf *ph; /* Ethernet + PPPoE header */ + err_t ret; +#if MIB2_STATS + u16_t tot_len; +#else /* MIB2_STATS */ + LWIP_UNUSED_ARG(ppp); +#endif /* MIB2_STATS */ + + /* skip address & flags */ + pbuf_remove_header(p, 2); + + ph = pbuf_alloc(PBUF_LINK, (u16_t)(PPPOE_HEADERLEN), PBUF_RAM); + if(!ph) { + LINK_STATS_INC(link.memerr); + LINK_STATS_INC(link.proterr); + MIB2_STATS_NETIF_INC(ppp->netif, ifoutdiscards); + pbuf_free(p); + return ERR_MEM; + } + + pbuf_remove_header(ph, PPPOE_HEADERLEN); /* hide PPPoE header */ + pbuf_cat(ph, p); +#if MIB2_STATS + tot_len = ph->tot_len; +#endif /* MIB2_STATS */ + + ret = pppoe_xmit(sc, ph); + if (ret != ERR_OK) { + LINK_STATS_INC(link.err); + MIB2_STATS_NETIF_INC(ppp->netif, ifoutdiscards); + return ret; + } + + MIB2_STATS_NETIF_ADD(ppp->netif, ifoutoctets, (u16_t)tot_len); + MIB2_STATS_NETIF_INC(ppp->netif, ifoutucastpkts); + LINK_STATS_INC(link.xmit); + return ERR_OK; +} + +/* Called by PPP core */ +static err_t pppoe_netif_output(ppp_pcb *ppp, void *ctx, struct pbuf *p, u_short protocol) { + struct pppoe_softc *sc = (struct pppoe_softc *)ctx; + struct pbuf *pb; + u8_t *pl; + err_t err; +#if MIB2_STATS + u16_t tot_len; +#else /* MIB2_STATS */ + LWIP_UNUSED_ARG(ppp); +#endif /* MIB2_STATS */ + + /* @todo: try to use pbuf_header() here! */ + pb = pbuf_alloc(PBUF_LINK, PPPOE_HEADERLEN + sizeof(protocol), PBUF_RAM); + if(!pb) { + LINK_STATS_INC(link.memerr); + LINK_STATS_INC(link.proterr); + MIB2_STATS_NETIF_INC(ppp->netif, ifoutdiscards); + return ERR_MEM; + } + + pbuf_remove_header(pb, PPPOE_HEADERLEN); + + pl = (u8_t*)pb->payload; + PUTSHORT(protocol, pl); + + pbuf_chain(pb, p); +#if MIB2_STATS + tot_len = pb->tot_len; +#endif /* MIB2_STATS */ + + if( (err = pppoe_xmit(sc, pb)) != ERR_OK) { + LINK_STATS_INC(link.err); + MIB2_STATS_NETIF_INC(ppp->netif, ifoutdiscards); + return err; + } + + MIB2_STATS_NETIF_ADD(ppp->netif, ifoutoctets, tot_len); + MIB2_STATS_NETIF_INC(ppp->netif, ifoutucastpkts); + LINK_STATS_INC(link.xmit); + return ERR_OK; +} + +static err_t +pppoe_destroy(ppp_pcb *ppp, void *ctx) +{ + struct pppoe_softc *sc = (struct pppoe_softc *)ctx; + struct pppoe_softc **copp, *freep; + LWIP_UNUSED_ARG(ppp); + + sys_untimeout(pppoe_timeout, sc); + + /* remove interface from list */ + for (copp = &pppoe_softc_list; (freep = *copp); copp = &freep->next) { + if (freep == sc) { + *copp = freep->next; + break; + } + } + +#ifdef PPPOE_TODO + if (sc->sc_concentrator_name) { + mem_free(sc->sc_concentrator_name); + } + if (sc->sc_service_name) { + mem_free(sc->sc_service_name); + } +#endif /* PPPOE_TODO */ + LWIP_MEMPOOL_FREE(PPPOE_IF, sc); + + return ERR_OK; +} + +/* + * Find the interface handling the specified session. + * Note: O(number of sessions open), this is a client-side only, mean + * and lean implementation, so number of open sessions typically should + * be 1. + */ +static struct pppoe_softc* pppoe_find_softc_by_session(u_int session, struct netif *rcvif) { + struct pppoe_softc *sc; + + for (sc = pppoe_softc_list; sc != NULL; sc = sc->next) { + if (sc->sc_state == PPPOE_STATE_SESSION + && sc->sc_session == session + && sc->sc_ethif == rcvif) { + return sc; + } + } + return NULL; +} + +/* Check host unique token passed and return appropriate softc pointer, + * or NULL if token is bogus. */ +static struct pppoe_softc* pppoe_find_softc_by_hunique(u8_t *token, size_t len, struct netif *rcvif) { + struct pppoe_softc *sc, *t; + + if (len != sizeof sc) { + return NULL; + } + MEMCPY(&t, token, len); + + for (sc = pppoe_softc_list; sc != NULL; sc = sc->next) { + if (sc == t) { + break; + } + } + + if (sc == NULL) { + PPPDEBUG(LOG_DEBUG, ("pppoe: alien host unique tag, no session found\n")); + return NULL; + } + + /* should be safe to access *sc now */ + if (sc->sc_state < PPPOE_STATE_PADI_SENT || sc->sc_state >= PPPOE_STATE_SESSION) { + PPPDEBUG(LOG_DEBUG, ("%c%c%"U16_F": host unique tag found, but it belongs to a connection in state %d\n", + sc->sc_ethif->name[0], sc->sc_ethif->name[1], sc->sc_ethif->num, sc->sc_state)); + return NULL; + } + if (sc->sc_ethif != rcvif) { + PPPDEBUG(LOG_DEBUG, ("%c%c%"U16_F": wrong interface, not accepting host unique\n", + sc->sc_ethif->name[0], sc->sc_ethif->name[1], sc->sc_ethif->num)); + return NULL; + } + return sc; +} + +/* analyze and handle a single received packet while not in session state */ +void +pppoe_disc_input(struct netif *netif, struct pbuf *pb) +{ + u16_t tag, len, off; + u16_t session, plen; + struct pppoe_softc *sc; +#if PPP_DEBUG + const char *err_msg = NULL; +#endif /* PPP_DEBUG */ + u8_t *ac_cookie; + u16_t ac_cookie_len; +#ifdef PPPOE_SERVER + u8_t *hunique; + size_t hunique_len; +#endif + struct pppoehdr *ph; + struct pppoetag pt; + int err; + struct eth_hdr *ethhdr; + + /* don't do anything if there is not a single PPPoE instance */ + if (pppoe_softc_list == NULL) { + pbuf_free(pb); + return; + } + + pb = pbuf_coalesce(pb, PBUF_RAW); + + ethhdr = (struct eth_hdr *)pb->payload; + + ac_cookie = NULL; + ac_cookie_len = 0; +#ifdef PPPOE_SERVER + hunique = NULL; + hunique_len = 0; +#endif + session = 0; + off = sizeof(struct eth_hdr) + sizeof(struct pppoehdr); + if (pb->len < off) { + PPPDEBUG(LOG_DEBUG, ("pppoe: packet too short: %d\n", pb->len)); + goto done; + } + + ph = (struct pppoehdr *) (ethhdr + 1); + if (ph->vertype != PPPOE_VERTYPE) { + PPPDEBUG(LOG_DEBUG, ("pppoe: unknown version/type packet: 0x%x\n", ph->vertype)); + goto done; + } + session = lwip_ntohs(ph->session); + plen = lwip_ntohs(ph->plen); + + if (plen > (pb->len - off)) { + PPPDEBUG(LOG_DEBUG, ("pppoe: packet content does not fit: data available = %d, packet size = %u\n", + pb->len - off, plen)); + goto done; + } + if(pb->tot_len == pb->len) { + u16_t framelen = off + plen; + if (framelen < pb->len) { + /* ignore trailing garbage */ + pb->tot_len = pb->len = framelen; + } + } + tag = 0; + len = 0; + sc = NULL; + while (off + sizeof(pt) <= pb->len) { + MEMCPY(&pt, (u8_t*)pb->payload + off, sizeof(pt)); + tag = lwip_ntohs(pt.tag); + len = lwip_ntohs(pt.len); + if (off + sizeof(pt) + len > pb->len) { + PPPDEBUG(LOG_DEBUG, ("pppoe: tag 0x%x len 0x%x is too long\n", tag, len)); + goto done; + } + switch (tag) { + case PPPOE_TAG_EOL: + goto breakbreak; + case PPPOE_TAG_SNAME: + break; /* ignored */ + case PPPOE_TAG_ACNAME: + break; /* ignored */ + case PPPOE_TAG_HUNIQUE: + if (sc != NULL) { + break; + } +#ifdef PPPOE_SERVER + hunique = (u8_t*)pb->payload + off + sizeof(pt); + hunique_len = len; +#endif + sc = pppoe_find_softc_by_hunique((u8_t*)pb->payload + off + sizeof(pt), len, netif); + break; + case PPPOE_TAG_ACCOOKIE: + if (ac_cookie == NULL) { + if (len > PPPOE_MAX_AC_COOKIE_LEN) { + PPPDEBUG(LOG_DEBUG, ("pppoe: AC cookie is too long: len = %d, max = %d\n", len, PPPOE_MAX_AC_COOKIE_LEN)); + goto done; + } + ac_cookie = (u8_t*)pb->payload + off + sizeof(pt); + ac_cookie_len = len; + } + break; +#if PPP_DEBUG + case PPPOE_TAG_SNAME_ERR: + err_msg = "SERVICE NAME ERROR"; + break; + case PPPOE_TAG_ACSYS_ERR: + err_msg = "AC SYSTEM ERROR"; + break; + case PPPOE_TAG_GENERIC_ERR: + err_msg = "GENERIC ERROR"; + break; +#endif /* PPP_DEBUG */ + default: + break; + } +#if PPP_DEBUG + if (err_msg != NULL) { + char error_tmp[PPPOE_ERRORSTRING_LEN]; + u16_t error_len = LWIP_MIN(len, sizeof(error_tmp)-1); + strncpy(error_tmp, (char*)pb->payload + off + sizeof(pt), error_len); + error_tmp[error_len] = '\0'; + if (sc) { + PPPDEBUG(LOG_DEBUG, ("pppoe: %c%c%"U16_F": %s: %s\n", sc->sc_ethif->name[0], sc->sc_ethif->name[1], sc->sc_ethif->num, err_msg, error_tmp)); + } else { + PPPDEBUG(LOG_DEBUG, ("pppoe: %s: %s\n", err_msg, error_tmp)); + } + } +#endif /* PPP_DEBUG */ + off += sizeof(pt) + len; + } + +breakbreak:; + switch (ph->code) { + case PPPOE_CODE_PADI: +#ifdef PPPOE_SERVER + /* + * got service name, concentrator name, and/or host unique. + * ignore if we have no interfaces with IFF_PASSIVE|IFF_UP. + */ + if (LIST_EMPTY(&pppoe_softc_list)) { + goto done; + } + LIST_FOREACH(sc, &pppoe_softc_list, sc_list) { + if (!(sc->sc_sppp.pp_if.if_flags & IFF_UP)) { + continue; + } + if (!(sc->sc_sppp.pp_if.if_flags & IFF_PASSIVE)) { + continue; + } + if (sc->sc_state == PPPOE_STATE_INITIAL) { + break; + } + } + if (sc == NULL) { + /* PPPDEBUG(LOG_DEBUG, ("pppoe: free passive interface is not found\n")); */ + goto done; + } + if (hunique) { + if (sc->sc_hunique) { + mem_free(sc->sc_hunique); + } + sc->sc_hunique = mem_malloc(hunique_len); + if (sc->sc_hunique == NULL) { + goto done; + } + sc->sc_hunique_len = hunique_len; + MEMCPY(sc->sc_hunique, hunique, hunique_len); + } + MEMCPY(&sc->sc_dest, eh->ether_shost, sizeof sc->sc_dest); + sc->sc_state = PPPOE_STATE_PADO_SENT; + pppoe_send_pado(sc); + break; +#endif /* PPPOE_SERVER */ + case PPPOE_CODE_PADR: +#ifdef PPPOE_SERVER + /* + * get sc from ac_cookie if IFF_PASSIVE + */ + if (ac_cookie == NULL) { + /* be quiet if there is not a single pppoe instance */ + PPPDEBUG(LOG_DEBUG, ("pppoe: received PADR but not includes ac_cookie\n")); + goto done; + } + sc = pppoe_find_softc_by_hunique(ac_cookie, ac_cookie_len, netif); + if (sc == NULL) { + /* be quiet if there is not a single pppoe instance */ + if (!LIST_EMPTY(&pppoe_softc_list)) { + PPPDEBUG(LOG_DEBUG, ("pppoe: received PADR but could not find request for it\n")); + } + goto done; + } + if (sc->sc_state != PPPOE_STATE_PADO_SENT) { + PPPDEBUG(LOG_DEBUG, ("%c%c%"U16_F": received unexpected PADR\n", sc->sc_ethif->name[0], sc->sc_ethif->name[1], sc->sc_ethif->num)); + goto done; + } + if (hunique) { + if (sc->sc_hunique) { + mem_free(sc->sc_hunique); + } + sc->sc_hunique = mem_malloc(hunique_len); + if (sc->sc_hunique == NULL) { + goto done; + } + sc->sc_hunique_len = hunique_len; + MEMCPY(sc->sc_hunique, hunique, hunique_len); + } + pppoe_send_pads(sc); + sc->sc_state = PPPOE_STATE_SESSION; + ppp_start(sc->pcb); /* notify upper layers */ + break; +#else + /* ignore, we are no access concentrator */ + goto done; +#endif /* PPPOE_SERVER */ + case PPPOE_CODE_PADO: + if (sc == NULL) { + /* be quiet if there is not a single pppoe instance */ + if (pppoe_softc_list != NULL) { + PPPDEBUG(LOG_DEBUG, ("pppoe: received PADO but could not find request for it\n")); + } + goto done; + } + if (sc->sc_state != PPPOE_STATE_PADI_SENT) { + PPPDEBUG(LOG_DEBUG, ("%c%c%"U16_F": received unexpected PADO\n", sc->sc_ethif->name[0], sc->sc_ethif->name[1], sc->sc_ethif->num)); + goto done; + } + if (ac_cookie) { + sc->sc_ac_cookie_len = ac_cookie_len; + MEMCPY(sc->sc_ac_cookie, ac_cookie, ac_cookie_len); + } + MEMCPY(&sc->sc_dest, ethhdr->src.addr, sizeof(sc->sc_dest.addr)); + sys_untimeout(pppoe_timeout, sc); + sc->sc_padr_retried = 0; + sc->sc_state = PPPOE_STATE_PADR_SENT; + if ((err = pppoe_send_padr(sc)) != 0) { + PPPDEBUG(LOG_DEBUG, ("pppoe: %c%c%"U16_F": failed to send PADR, error=%d\n", sc->sc_ethif->name[0], sc->sc_ethif->name[1], sc->sc_ethif->num, err)); + LWIP_UNUSED_ARG(err); /* if PPPDEBUG is disabled */ + } + sys_timeout(PPPOE_DISC_TIMEOUT * (1 + sc->sc_padr_retried), pppoe_timeout, sc); + break; + case PPPOE_CODE_PADS: + if (sc == NULL) { + goto done; + } + sc->sc_session = session; + sys_untimeout(pppoe_timeout, sc); + PPPDEBUG(LOG_DEBUG, ("pppoe: %c%c%"U16_F": session 0x%x connected\n", sc->sc_ethif->name[0], sc->sc_ethif->name[1], sc->sc_ethif->num, session)); + sc->sc_state = PPPOE_STATE_SESSION; + ppp_start(sc->pcb); /* notify upper layers */ + break; + case PPPOE_CODE_PADT: + /* Don't disconnect here, we let the LCP Echo/Reply find the fact + * that PPP session is down. Asking the PPP stack to end the session + * require strict checking about the PPP phase to prevent endless + * disconnection loops. + */ +#if 0 /* UNUSED */ + if (sc == NULL) { /* PADT frames are rarely sent with a hunique tag, this is actually almost always true */ + goto done; + } + pppoe_clear_softc(sc, "received PADT"); +#endif /* UNUSED */ + break; + default: + if(sc) { + PPPDEBUG(LOG_DEBUG, ("%c%c%"U16_F": unknown code (0x%"X16_F") session = 0x%"X16_F"\n", + sc->sc_ethif->name[0], sc->sc_ethif->name[1], sc->sc_ethif->num, + (u16_t)ph->code, session)); + } else { + PPPDEBUG(LOG_DEBUG, ("pppoe: unknown code (0x%"X16_F") session = 0x%"X16_F"\n", (u16_t)ph->code, session)); + } + break; + } + +done: + pbuf_free(pb); + return; +} + +void +pppoe_data_input(struct netif *netif, struct pbuf *pb) +{ + u16_t session, plen; + struct pppoe_softc *sc; + struct pppoehdr *ph; +#ifdef PPPOE_TERM_UNKNOWN_SESSIONS + u8_t shost[ETHER_ADDR_LEN]; +#endif + +#ifdef PPPOE_TERM_UNKNOWN_SESSIONS + MEMCPY(shost, ((struct eth_hdr *)pb->payload)->src.addr, sizeof(shost)); +#endif + if (pbuf_remove_header(pb, sizeof(struct eth_hdr)) != 0) { + /* bail out */ + PPPDEBUG(LOG_ERR, ("pppoe_data_input: pbuf_remove_header failed\n")); + LINK_STATS_INC(link.lenerr); + goto drop; + } + + if (pb->len < sizeof(*ph)) { + PPPDEBUG(LOG_DEBUG, ("pppoe_data_input: could not get PPPoE header\n")); + goto drop; + } + ph = (struct pppoehdr *)pb->payload; + + if (ph->vertype != PPPOE_VERTYPE) { + PPPDEBUG(LOG_DEBUG, ("pppoe (data): unknown version/type packet: 0x%x\n", ph->vertype)); + goto drop; + } + if (ph->code != 0) { + goto drop; + } + + session = lwip_ntohs(ph->session); + sc = pppoe_find_softc_by_session(session, netif); + if (sc == NULL) { +#ifdef PPPOE_TERM_UNKNOWN_SESSIONS + PPPDEBUG(LOG_DEBUG, ("pppoe: input for unknown session 0x%x, sending PADT\n", session)); + pppoe_send_padt(netif, session, shost); +#endif + goto drop; + } + + plen = lwip_ntohs(ph->plen); + + if (pbuf_remove_header(pb, PPPOE_HEADERLEN) != 0) { + /* bail out */ + PPPDEBUG(LOG_ERR, ("pppoe_data_input: pbuf_remove_header PPPOE_HEADERLEN failed\n")); + LINK_STATS_INC(link.lenerr); + goto drop; + } + + PPPDEBUG(LOG_DEBUG, ("pppoe_data_input: %c%c%"U16_F": pkthdr.len=%d, pppoe.len=%d\n", + sc->sc_ethif->name[0], sc->sc_ethif->name[1], sc->sc_ethif->num, + pb->len, plen)); + + if (pb->tot_len < plen) { + goto drop; + } + + /* Dispatch the packet thereby consuming it. */ + ppp_input(sc->pcb, pb); + return; + +drop: + pbuf_free(pb); +} + +static err_t +pppoe_output(struct pppoe_softc *sc, struct pbuf *pb) +{ + struct eth_hdr *ethhdr; + u16_t etype; + err_t res; + + /* make room for Ethernet header - should not fail */ + if (pbuf_add_header(pb, sizeof(struct eth_hdr)) != 0) { + /* bail out */ + PPPDEBUG(LOG_ERR, ("pppoe: %c%c%"U16_F": pppoe_output: could not allocate room for Ethernet header\n", sc->sc_ethif->name[0], sc->sc_ethif->name[1], sc->sc_ethif->num)); + LINK_STATS_INC(link.lenerr); + pbuf_free(pb); + return ERR_BUF; + } + ethhdr = (struct eth_hdr *)pb->payload; + etype = sc->sc_state == PPPOE_STATE_SESSION ? ETHTYPE_PPPOE : ETHTYPE_PPPOEDISC; + ethhdr->type = lwip_htons(etype); + MEMCPY(ðhdr->dest.addr, &sc->sc_dest.addr, sizeof(ethhdr->dest.addr)); + MEMCPY(ðhdr->src.addr, &sc->sc_ethif->hwaddr, sizeof(ethhdr->src.addr)); + + PPPDEBUG(LOG_DEBUG, ("pppoe: %c%c%"U16_F" (%x) state=%d, session=0x%x output -> %02"X16_F":%02"X16_F":%02"X16_F":%02"X16_F":%02"X16_F":%02"X16_F", len=%d\n", + sc->sc_ethif->name[0], sc->sc_ethif->name[1], sc->sc_ethif->num, etype, + sc->sc_state, sc->sc_session, + sc->sc_dest.addr[0], sc->sc_dest.addr[1], sc->sc_dest.addr[2], sc->sc_dest.addr[3], sc->sc_dest.addr[4], sc->sc_dest.addr[5], + pb->tot_len)); + + res = sc->sc_ethif->linkoutput(sc->sc_ethif, pb); + + pbuf_free(pb); + + return res; +} + +static err_t +pppoe_send_padi(struct pppoe_softc *sc) +{ + struct pbuf *pb; + u8_t *p; + int len; +#ifdef PPPOE_TODO + int l1 = 0, l2 = 0; /* XXX: gcc */ +#endif /* PPPOE_TODO */ + + /* calculate length of frame (excluding ethernet header + pppoe header) */ + len = 2 + 2 + 2 + 2 + sizeof sc; /* service name tag is required, host unique is send too */ +#ifdef PPPOE_TODO + if (sc->sc_service_name != NULL) { + l1 = (int)strlen(sc->sc_service_name); + len += l1; + } + if (sc->sc_concentrator_name != NULL) { + l2 = (int)strlen(sc->sc_concentrator_name); + len += 2 + 2 + l2; + } +#endif /* PPPOE_TODO */ + LWIP_ASSERT("sizeof(struct eth_hdr) + PPPOE_HEADERLEN + len <= 0xffff", + sizeof(struct eth_hdr) + PPPOE_HEADERLEN + len <= 0xffff); + + /* allocate a buffer */ + pb = pbuf_alloc(PBUF_LINK, (u16_t)(PPPOE_HEADERLEN + len), PBUF_RAM); + if (!pb) { + return ERR_MEM; + } + LWIP_ASSERT("pb->tot_len == pb->len", pb->tot_len == pb->len); + + p = (u8_t*)pb->payload; + /* fill in pkt */ + PPPOE_ADD_HEADER(p, PPPOE_CODE_PADI, 0, (u16_t)len); + PPPOE_ADD_16(p, PPPOE_TAG_SNAME); +#ifdef PPPOE_TODO + if (sc->sc_service_name != NULL) { + PPPOE_ADD_16(p, l1); + MEMCPY(p, sc->sc_service_name, l1); + p += l1; + } else +#endif /* PPPOE_TODO */ + { + PPPOE_ADD_16(p, 0); + } +#ifdef PPPOE_TODO + if (sc->sc_concentrator_name != NULL) { + PPPOE_ADD_16(p, PPPOE_TAG_ACNAME); + PPPOE_ADD_16(p, l2); + MEMCPY(p, sc->sc_concentrator_name, l2); + p += l2; + } +#endif /* PPPOE_TODO */ + PPPOE_ADD_16(p, PPPOE_TAG_HUNIQUE); + PPPOE_ADD_16(p, sizeof(sc)); + MEMCPY(p, &sc, sizeof sc); + + /* send pkt */ + return pppoe_output(sc, pb); +} + +static void +pppoe_timeout(void *arg) +{ + u32_t retry_wait; + int err; + struct pppoe_softc *sc = (struct pppoe_softc*)arg; + + PPPDEBUG(LOG_DEBUG, ("pppoe: %c%c%"U16_F": timeout\n", sc->sc_ethif->name[0], sc->sc_ethif->name[1], sc->sc_ethif->num)); + + switch (sc->sc_state) { + case PPPOE_STATE_PADI_SENT: + /* + * We have two basic ways of retrying: + * - Quick retry mode: try a few times in short sequence + * - Slow retry mode: we already had a connection successfully + * established and will try infinitely (without user + * intervention) + * We only enter slow retry mode if IFF_LINK1 (aka autodial) + * is not set. + */ + if (sc->sc_padi_retried < 0xff) { + sc->sc_padi_retried++; + } + if (!sc->pcb->settings.persist && sc->sc_padi_retried >= PPPOE_DISC_MAXPADI) { +#if 0 + if ((sc->sc_sppp.pp_if.if_flags & IFF_LINK1) == 0) { + /* slow retry mode */ + retry_wait = PPPOE_SLOW_RETRY; + } else +#endif + { + pppoe_abort_connect(sc); + return; + } + } + /* initialize for quick retry mode */ + retry_wait = LWIP_MIN(PPPOE_DISC_TIMEOUT * sc->sc_padi_retried, PPPOE_SLOW_RETRY); + if ((err = pppoe_send_padi(sc)) != 0) { + sc->sc_padi_retried--; + PPPDEBUG(LOG_DEBUG, ("pppoe: %c%c%"U16_F": failed to transmit PADI, error=%d\n", sc->sc_ethif->name[0], sc->sc_ethif->name[1], sc->sc_ethif->num, err)); + LWIP_UNUSED_ARG(err); /* if PPPDEBUG is disabled */ + } + sys_timeout(retry_wait, pppoe_timeout, sc); + break; + + case PPPOE_STATE_PADR_SENT: + sc->sc_padr_retried++; + if (sc->sc_padr_retried >= PPPOE_DISC_MAXPADR) { + MEMCPY(&sc->sc_dest, ethbroadcast.addr, sizeof(sc->sc_dest)); + sc->sc_state = PPPOE_STATE_PADI_SENT; + sc->sc_padr_retried = 0; + if ((err = pppoe_send_padi(sc)) != 0) { + PPPDEBUG(LOG_DEBUG, ("pppoe: %c%c%"U16_F": failed to send PADI, error=%d\n", sc->sc_ethif->name[0], sc->sc_ethif->name[1], sc->sc_ethif->num, err)); + LWIP_UNUSED_ARG(err); /* if PPPDEBUG is disabled */ + } + sys_timeout(PPPOE_DISC_TIMEOUT * (1 + sc->sc_padi_retried), pppoe_timeout, sc); + return; + } + if ((err = pppoe_send_padr(sc)) != 0) { + sc->sc_padr_retried--; + PPPDEBUG(LOG_DEBUG, ("pppoe: %c%c%"U16_F": failed to send PADR, error=%d\n", sc->sc_ethif->name[0], sc->sc_ethif->name[1], sc->sc_ethif->num, err)); + LWIP_UNUSED_ARG(err); /* if PPPDEBUG is disabled */ + } + sys_timeout(PPPOE_DISC_TIMEOUT * (1 + sc->sc_padr_retried), pppoe_timeout, sc); + break; + default: + return; /* all done, work in peace */ + } +} + +/* Start a connection (i.e. initiate discovery phase) */ +static void +pppoe_connect(ppp_pcb *ppp, void *ctx) +{ + err_t err; + struct pppoe_softc *sc = (struct pppoe_softc *)ctx; + lcp_options *lcp_wo; + lcp_options *lcp_ao; +#if PPP_IPV4_SUPPORT && VJ_SUPPORT + ipcp_options *ipcp_wo; + ipcp_options *ipcp_ao; +#endif /* PPP_IPV4_SUPPORT && VJ_SUPPORT */ + + sc->sc_session = 0; + sc->sc_ac_cookie_len = 0; + sc->sc_padi_retried = 0; + sc->sc_padr_retried = 0; + /* changed to real address later */ + MEMCPY(&sc->sc_dest, ethbroadcast.addr, sizeof(sc->sc_dest)); +#ifdef PPPOE_SERVER + /* wait PADI if IFF_PASSIVE */ + if ((sc->sc_sppp.pp_if.if_flags & IFF_PASSIVE)) { + return 0; + } +#endif + + lcp_wo = &ppp->lcp_wantoptions; + lcp_wo->mru = sc->sc_ethif->mtu-PPPOE_HEADERLEN-2; /* two byte PPP protocol discriminator, then IP data */ + lcp_wo->neg_asyncmap = 0; + lcp_wo->neg_pcompression = 0; + lcp_wo->neg_accompression = 0; + lcp_wo->passive = 0; + lcp_wo->silent = 0; + + lcp_ao = &ppp->lcp_allowoptions; + lcp_ao->mru = sc->sc_ethif->mtu-PPPOE_HEADERLEN-2; /* two byte PPP protocol discriminator, then IP data */ + lcp_ao->neg_asyncmap = 0; + lcp_ao->neg_pcompression = 0; + lcp_ao->neg_accompression = 0; + +#if PPP_IPV4_SUPPORT && VJ_SUPPORT + ipcp_wo = &ppp->ipcp_wantoptions; + ipcp_wo->neg_vj = 0; + ipcp_wo->old_vj = 0; + + ipcp_ao = &ppp->ipcp_allowoptions; + ipcp_ao->neg_vj = 0; + ipcp_ao->old_vj = 0; +#endif /* PPP_IPV4_SUPPORT && VJ_SUPPORT */ + + /* save state, in case we fail to send PADI */ + sc->sc_state = PPPOE_STATE_PADI_SENT; + if ((err = pppoe_send_padi(sc)) != 0) { + PPPDEBUG(LOG_DEBUG, ("pppoe: %c%c%"U16_F": failed to send PADI, error=%d\n", sc->sc_ethif->name[0], sc->sc_ethif->name[1], sc->sc_ethif->num, err)); + } + sys_timeout(PPPOE_DISC_TIMEOUT, pppoe_timeout, sc); +} + +/* disconnect */ +static void +pppoe_disconnect(ppp_pcb *ppp, void *ctx) +{ + struct pppoe_softc *sc = (struct pppoe_softc *)ctx; + + PPPDEBUG(LOG_DEBUG, ("pppoe: %c%c%"U16_F": disconnecting\n", sc->sc_ethif->name[0], sc->sc_ethif->name[1], sc->sc_ethif->num)); + if (sc->sc_state == PPPOE_STATE_SESSION) { + pppoe_send_padt(sc->sc_ethif, sc->sc_session, (const u8_t *)&sc->sc_dest); + } + + /* stop any timer, disconnect can be called while initiating is in progress */ + sys_untimeout(pppoe_timeout, sc); + sc->sc_state = PPPOE_STATE_INITIAL; +#ifdef PPPOE_SERVER + if (sc->sc_hunique) { + mem_free(sc->sc_hunique); + sc->sc_hunique = NULL; /* probably not necessary, if state is initial we shouldn't have to access hunique anyway */ + } + sc->sc_hunique_len = 0; /* probably not necessary, if state is initial we shouldn't have to access hunique anyway */ +#endif + ppp_link_end(ppp); /* notify upper layers */ + return; +} + +/* Connection attempt aborted */ +static void +pppoe_abort_connect(struct pppoe_softc *sc) +{ + PPPDEBUG(LOG_DEBUG, ("%c%c%"U16_F": could not establish connection\n", sc->sc_ethif->name[0], sc->sc_ethif->name[1], sc->sc_ethif->num)); + sc->sc_state = PPPOE_STATE_INITIAL; + ppp_link_failed(sc->pcb); /* notify upper layers */ +} + +/* Send a PADR packet */ +static err_t +pppoe_send_padr(struct pppoe_softc *sc) +{ + struct pbuf *pb; + u8_t *p; + size_t len; +#ifdef PPPOE_TODO + size_t l1 = 0; /* XXX: gcc */ +#endif /* PPPOE_TODO */ + + len = 2 + 2 + 2 + 2 + sizeof(sc); /* service name, host unique */ +#ifdef PPPOE_TODO + if (sc->sc_service_name != NULL) { /* service name tag maybe empty */ + l1 = strlen(sc->sc_service_name); + len += l1; + } +#endif /* PPPOE_TODO */ + if (sc->sc_ac_cookie_len > 0) { + len += 2 + 2 + sc->sc_ac_cookie_len; /* AC cookie */ + } + LWIP_ASSERT("sizeof(struct eth_hdr) + PPPOE_HEADERLEN + len <= 0xffff", + sizeof(struct eth_hdr) + PPPOE_HEADERLEN + len <= 0xffff); + pb = pbuf_alloc(PBUF_LINK, (u16_t)(PPPOE_HEADERLEN + len), PBUF_RAM); + if (!pb) { + return ERR_MEM; + } + LWIP_ASSERT("pb->tot_len == pb->len", pb->tot_len == pb->len); + p = (u8_t*)pb->payload; + PPPOE_ADD_HEADER(p, PPPOE_CODE_PADR, 0, len); + PPPOE_ADD_16(p, PPPOE_TAG_SNAME); +#ifdef PPPOE_TODO + if (sc->sc_service_name != NULL) { + PPPOE_ADD_16(p, l1); + MEMCPY(p, sc->sc_service_name, l1); + p += l1; + } else +#endif /* PPPOE_TODO */ + { + PPPOE_ADD_16(p, 0); + } + if (sc->sc_ac_cookie_len > 0) { + PPPOE_ADD_16(p, PPPOE_TAG_ACCOOKIE); + PPPOE_ADD_16(p, sc->sc_ac_cookie_len); + MEMCPY(p, sc->sc_ac_cookie, sc->sc_ac_cookie_len); + p += sc->sc_ac_cookie_len; + } + PPPOE_ADD_16(p, PPPOE_TAG_HUNIQUE); + PPPOE_ADD_16(p, sizeof(sc)); + MEMCPY(p, &sc, sizeof sc); + + return pppoe_output(sc, pb); +} + +/* send a PADT packet */ +static err_t +pppoe_send_padt(struct netif *outgoing_if, u_int session, const u8_t *dest) +{ + struct pbuf *pb; + struct eth_hdr *ethhdr; + err_t res; + u8_t *p; + + pb = pbuf_alloc(PBUF_LINK, (u16_t)(PPPOE_HEADERLEN), PBUF_RAM); + if (!pb) { + return ERR_MEM; + } + LWIP_ASSERT("pb->tot_len == pb->len", pb->tot_len == pb->len); + + if (pbuf_add_header(pb, sizeof(struct eth_hdr))) { + PPPDEBUG(LOG_ERR, ("pppoe: pppoe_send_padt: could not allocate room for PPPoE header\n")); + LINK_STATS_INC(link.lenerr); + pbuf_free(pb); + return ERR_BUF; + } + ethhdr = (struct eth_hdr *)pb->payload; + ethhdr->type = PP_HTONS(ETHTYPE_PPPOEDISC); + MEMCPY(ðhdr->dest.addr, dest, sizeof(ethhdr->dest.addr)); + MEMCPY(ðhdr->src.addr, &outgoing_if->hwaddr, sizeof(ethhdr->src.addr)); + + p = (u8_t*)(ethhdr + 1); + PPPOE_ADD_HEADER(p, PPPOE_CODE_PADT, session, 0); + + res = outgoing_if->linkoutput(outgoing_if, pb); + + pbuf_free(pb); + + return res; +} + +#ifdef PPPOE_SERVER +static err_t +pppoe_send_pado(struct pppoe_softc *sc) +{ + struct pbuf *pb; + u8_t *p; + size_t len; + + /* calc length */ + len = 0; + /* include ac_cookie */ + len += 2 + 2 + sizeof(sc); + /* include hunique */ + len += 2 + 2 + sc->sc_hunique_len; + pb = pbuf_alloc(PBUF_LINK, (u16_t)(PPPOE_HEADERLEN + len), PBUF_RAM); + if (!pb) { + return ERR_MEM; + } + LWIP_ASSERT("pb->tot_len == pb->len", pb->tot_len == pb->len); + p = (u8_t*)pb->payload; + PPPOE_ADD_HEADER(p, PPPOE_CODE_PADO, 0, len); + PPPOE_ADD_16(p, PPPOE_TAG_ACCOOKIE); + PPPOE_ADD_16(p, sizeof(sc)); + MEMCPY(p, &sc, sizeof(sc)); + p += sizeof(sc); + PPPOE_ADD_16(p, PPPOE_TAG_HUNIQUE); + PPPOE_ADD_16(p, sc->sc_hunique_len); + MEMCPY(p, sc->sc_hunique, sc->sc_hunique_len); + return pppoe_output(sc, pb); +} + +static err_t +pppoe_send_pads(struct pppoe_softc *sc) +{ + struct pbuf *pb; + u8_t *p; + size_t len, l1 = 0; /* XXX: gcc */ + + sc->sc_session = mono_time.tv_sec % 0xff + 1; + /* calc length */ + len = 0; + /* include hunique */ + len += 2 + 2 + 2 + 2 + sc->sc_hunique_len; /* service name, host unique*/ + if (sc->sc_service_name != NULL) { /* service name tag maybe empty */ + l1 = strlen(sc->sc_service_name); + len += l1; + } + pb = pbuf_alloc(PBUF_LINK, (u16_t)(PPPOE_HEADERLEN + len), PBUF_RAM); + if (!pb) { + return ERR_MEM; + } + LWIP_ASSERT("pb->tot_len == pb->len", pb->tot_len == pb->len); + p = (u8_t*)pb->payload; + PPPOE_ADD_HEADER(p, PPPOE_CODE_PADS, sc->sc_session, len); + PPPOE_ADD_16(p, PPPOE_TAG_SNAME); + if (sc->sc_service_name != NULL) { + PPPOE_ADD_16(p, l1); + MEMCPY(p, sc->sc_service_name, l1); + p += l1; + } else { + PPPOE_ADD_16(p, 0); + } + PPPOE_ADD_16(p, PPPOE_TAG_HUNIQUE); + PPPOE_ADD_16(p, sc->sc_hunique_len); + MEMCPY(p, sc->sc_hunique, sc->sc_hunique_len); + return pppoe_output(sc, pb); +} +#endif + +static err_t +pppoe_xmit(struct pppoe_softc *sc, struct pbuf *pb) +{ + u8_t *p; + size_t len; + + len = pb->tot_len; + + /* make room for PPPoE header - should not fail */ + if (pbuf_add_header(pb, PPPOE_HEADERLEN) != 0) { + /* bail out */ + PPPDEBUG(LOG_ERR, ("pppoe: %c%c%"U16_F": pppoe_xmit: could not allocate room for PPPoE header\n", sc->sc_ethif->name[0], sc->sc_ethif->name[1], sc->sc_ethif->num)); + LINK_STATS_INC(link.lenerr); + pbuf_free(pb); + return ERR_BUF; + } + + p = (u8_t*)pb->payload; + PPPOE_ADD_HEADER(p, 0, sc->sc_session, len); + + return pppoe_output(sc, pb); +} + +#if 0 /*def PFIL_HOOKS*/ +static int +pppoe_ifattach_hook(void *arg, struct pbuf **mp, struct netif *ifp, int dir) +{ + struct pppoe_softc *sc; + int s; + + if (mp != (struct pbuf **)PFIL_IFNET_DETACH) { + return 0; + } + + LIST_FOREACH(sc, &pppoe_softc_list, sc_list) { + if (sc->sc_ethif != ifp) { + continue; + } + if (sc->sc_sppp.pp_if.if_flags & IFF_UP) { + sc->sc_sppp.pp_if.if_flags &= ~(IFF_UP|IFF_RUNNING); + PPPDEBUG(LOG_DEBUG, ("%c%c%"U16_F": ethernet interface detached, going down\n", + sc->sc_ethif->name[0], sc->sc_ethif->name[1], sc->sc_ethif->num)); + } + sc->sc_ethif = NULL; + pppoe_clear_softc(sc, "ethernet interface detached"); + } + + return 0; +} +#endif + +#if 0 /* UNUSED */ +static void +pppoe_clear_softc(struct pppoe_softc *sc, const char *message) +{ + LWIP_UNUSED_ARG(message); + + /* stop timer */ + sys_untimeout(pppoe_timeout, sc); + PPPDEBUG(LOG_DEBUG, ("pppoe: %c%c%"U16_F": session 0x%x terminated, %s\n", sc->sc_ethif->name[0], sc->sc_ethif->name[1], sc->sc_ethif->num, sc->sc_session, message)); + sc->sc_state = PPPOE_STATE_INITIAL; + ppp_link_end(sc->pcb); /* notify upper layers - /!\ dangerous /!\ - see pppoe_disc_input() */ +} +#endif /* UNUSED */ +#endif /* PPP_SUPPORT && PPPOE_SUPPORT */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/pppol2tp.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/pppol2tp.c new file mode 100644 index 0000000000000000000000000000000000000000..4c4557fca1c856518cf066fa0680a8a6223a94bc --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/pppol2tp.c @@ -0,0 +1,1159 @@ +/** + * @file + * Network Point to Point Protocol over Layer 2 Tunneling Protocol program file. + * + */ + +/* + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + */ + +/* + * L2TP Support status: + * + * Supported: + * - L2TPv2 (PPP over L2TP, a.k.a. UDP tunnels) + * - LAC + * + * Not supported: + * - LNS (require PPP server support) + * - L2TPv3 ethernet pseudowires + * - L2TPv3 VLAN pseudowire + * - L2TPv3 PPP pseudowires + * - L2TPv3 IP encapsulation + * - L2TPv3 IP pseudowire + * - L2TP tunnel switching - http://tools.ietf.org/html/draft-ietf-l2tpext-tunnel-switching-08 + * - Multiple tunnels per UDP socket, as well as multiple sessions per tunnel + * - Hidden AVPs + */ + +#include "netif/ppp/ppp_opts.h" +#if PPP_SUPPORT && PPPOL2TP_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/err.h" +#include "lwip/memp.h" +#include "lwip/netif.h" +#include "lwip/udp.h" +#include "lwip/snmp.h" + +#include "netif/ppp/ppp_impl.h" +#include "netif/ppp/lcp.h" +#include "netif/ppp/ipcp.h" +#include "netif/ppp/pppol2tp.h" +#include "netif/ppp/pppcrypt.h" +#include "netif/ppp/magic.h" + +/* Memory pool */ +LWIP_MEMPOOL_DECLARE(PPPOL2TP_PCB, MEMP_NUM_PPPOL2TP_INTERFACES, sizeof(pppol2tp_pcb), "PPPOL2TP_PCB") + +/* callbacks called from PPP core */ +static err_t pppol2tp_write(ppp_pcb *ppp, void *ctx, struct pbuf *p); +static err_t pppol2tp_netif_output(ppp_pcb *ppp, void *ctx, struct pbuf *p, u_short protocol); +static err_t pppol2tp_destroy(ppp_pcb *ppp, void *ctx); /* Destroy a L2TP control block */ +static void pppol2tp_connect(ppp_pcb *ppp, void *ctx); /* Be a LAC, connect to a LNS. */ +static void pppol2tp_disconnect(ppp_pcb *ppp, void *ctx); /* Disconnect */ + + /* Prototypes for procedures local to this file. */ +static void pppol2tp_input(void *arg, struct udp_pcb *pcb, struct pbuf *p, const ip_addr_t *addr, u16_t port); +static void pppol2tp_dispatch_control_packet(pppol2tp_pcb *l2tp, u16_t port, struct pbuf *p, u16_t ns, u16_t nr); +static void pppol2tp_timeout(void *arg); +static void pppol2tp_abort_connect(pppol2tp_pcb *l2tp); +static err_t pppol2tp_send_sccrq(pppol2tp_pcb *l2tp); +static err_t pppol2tp_send_scccn(pppol2tp_pcb *l2tp, u16_t ns); +static err_t pppol2tp_send_icrq(pppol2tp_pcb *l2tp, u16_t ns); +static err_t pppol2tp_send_iccn(pppol2tp_pcb *l2tp, u16_t ns); +static err_t pppol2tp_send_zlb(pppol2tp_pcb *l2tp, u16_t ns, u16_t nr); +static err_t pppol2tp_send_stopccn(pppol2tp_pcb *l2tp, u16_t ns); +static err_t pppol2tp_xmit(pppol2tp_pcb *l2tp, struct pbuf *pb); +static err_t pppol2tp_udp_send(pppol2tp_pcb *l2tp, struct pbuf *pb); + +/* Callbacks structure for PPP core */ +static const struct link_callbacks pppol2tp_callbacks = { + pppol2tp_connect, +#if PPP_SERVER + NULL, +#endif /* PPP_SERVER */ + pppol2tp_disconnect, + pppol2tp_destroy, + pppol2tp_write, + pppol2tp_netif_output, + NULL, + NULL +}; + + +/* Create a new L2TP session. */ +ppp_pcb *pppol2tp_create(struct netif *pppif, + struct netif *netif, const ip_addr_t *ipaddr, u16_t port, + const u8_t *secret, u8_t secret_len, + ppp_link_status_cb_fn link_status_cb, void *ctx_cb) { + ppp_pcb *ppp; + pppol2tp_pcb *l2tp; + struct udp_pcb *udp; +#if !PPPOL2TP_AUTH_SUPPORT + LWIP_UNUSED_ARG(secret); + LWIP_UNUSED_ARG(secret_len); +#endif /* !PPPOL2TP_AUTH_SUPPORT */ + + if (ipaddr == NULL) { + goto ipaddr_check_failed; + } + + l2tp = (pppol2tp_pcb *)LWIP_MEMPOOL_ALLOC(PPPOL2TP_PCB); + if (l2tp == NULL) { + goto memp_malloc_l2tp_failed; + } + + udp = udp_new_ip_type(IP_GET_TYPE(ipaddr)); + if (udp == NULL) { + goto udp_new_failed; + } + udp_recv(udp, pppol2tp_input, l2tp); + + ppp = ppp_new(pppif, &pppol2tp_callbacks, l2tp, link_status_cb, ctx_cb); + if (ppp == NULL) { + goto ppp_new_failed; + } + + memset(l2tp, 0, sizeof(pppol2tp_pcb)); + l2tp->phase = PPPOL2TP_STATE_INITIAL; + l2tp->ppp = ppp; + l2tp->udp = udp; + l2tp->netif = netif; + ip_addr_copy(l2tp->remote_ip, *ipaddr); + l2tp->remote_port = port; +#if PPPOL2TP_AUTH_SUPPORT + l2tp->secret = secret; + l2tp->secret_len = secret_len; +#endif /* PPPOL2TP_AUTH_SUPPORT */ + + return ppp; + +ppp_new_failed: + udp_remove(udp); +udp_new_failed: + LWIP_MEMPOOL_FREE(PPPOL2TP_PCB, l2tp); +memp_malloc_l2tp_failed: +ipaddr_check_failed: + return NULL; +} + +/* Called by PPP core */ +static err_t pppol2tp_write(ppp_pcb *ppp, void *ctx, struct pbuf *p) { + pppol2tp_pcb *l2tp = (pppol2tp_pcb *)ctx; + struct pbuf *ph; /* UDP + L2TP header */ + err_t ret; +#if MIB2_STATS + u16_t tot_len; +#else /* MIB2_STATS */ + LWIP_UNUSED_ARG(ppp); +#endif /* MIB2_STATS */ + + ph = pbuf_alloc(PBUF_TRANSPORT, (u16_t)(PPPOL2TP_OUTPUT_DATA_HEADER_LEN), PBUF_RAM); + if(!ph) { + LINK_STATS_INC(link.memerr); + LINK_STATS_INC(link.proterr); + MIB2_STATS_NETIF_INC(ppp->netif, ifoutdiscards); + pbuf_free(p); + return ERR_MEM; + } + + pbuf_remove_header(ph, PPPOL2TP_OUTPUT_DATA_HEADER_LEN); /* hide L2TP header */ + pbuf_cat(ph, p); +#if MIB2_STATS + tot_len = ph->tot_len; +#endif /* MIB2_STATS */ + + ret = pppol2tp_xmit(l2tp, ph); + if (ret != ERR_OK) { + LINK_STATS_INC(link.err); + MIB2_STATS_NETIF_INC(ppp->netif, ifoutdiscards); + return ret; + } + + MIB2_STATS_NETIF_ADD(ppp->netif, ifoutoctets, (u16_t)tot_len); + MIB2_STATS_NETIF_INC(ppp->netif, ifoutucastpkts); + LINK_STATS_INC(link.xmit); + return ERR_OK; +} + +/* Called by PPP core */ +static err_t pppol2tp_netif_output(ppp_pcb *ppp, void *ctx, struct pbuf *p, u_short protocol) { + pppol2tp_pcb *l2tp = (pppol2tp_pcb *)ctx; + struct pbuf *pb; + u8_t *pl; + err_t err; +#if MIB2_STATS + u16_t tot_len; +#else /* MIB2_STATS */ + LWIP_UNUSED_ARG(ppp); +#endif /* MIB2_STATS */ + + /* @todo: try to use pbuf_header() here! */ + pb = pbuf_alloc(PBUF_TRANSPORT, PPPOL2TP_OUTPUT_DATA_HEADER_LEN + sizeof(protocol), PBUF_RAM); + if(!pb) { + LINK_STATS_INC(link.memerr); + LINK_STATS_INC(link.proterr); + MIB2_STATS_NETIF_INC(ppp->netif, ifoutdiscards); + return ERR_MEM; + } + + pbuf_remove_header(pb, PPPOL2TP_OUTPUT_DATA_HEADER_LEN); + + pl = (u8_t*)pb->payload; + PUTSHORT(protocol, pl); + + pbuf_chain(pb, p); +#if MIB2_STATS + tot_len = pb->tot_len; +#endif /* MIB2_STATS */ + + if( (err = pppol2tp_xmit(l2tp, pb)) != ERR_OK) { + LINK_STATS_INC(link.err); + MIB2_STATS_NETIF_INC(ppp->netif, ifoutdiscards); + return err; + } + + MIB2_STATS_NETIF_ADD(ppp->netif, ifoutoctets, tot_len); + MIB2_STATS_NETIF_INC(ppp->netif, ifoutucastpkts); + LINK_STATS_INC(link.xmit); + return ERR_OK; +} + +/* Destroy a L2TP control block */ +static err_t pppol2tp_destroy(ppp_pcb *ppp, void *ctx) { + pppol2tp_pcb *l2tp = (pppol2tp_pcb *)ctx; + LWIP_UNUSED_ARG(ppp); + + sys_untimeout(pppol2tp_timeout, l2tp); + udp_remove(l2tp->udp); + LWIP_MEMPOOL_FREE(PPPOL2TP_PCB, l2tp); + return ERR_OK; +} + +/* Be a LAC, connect to a LNS. */ +static void pppol2tp_connect(ppp_pcb *ppp, void *ctx) { + err_t err; + pppol2tp_pcb *l2tp = (pppol2tp_pcb *)ctx; + lcp_options *lcp_wo; + lcp_options *lcp_ao; +#if PPP_IPV4_SUPPORT && VJ_SUPPORT + ipcp_options *ipcp_wo; + ipcp_options *ipcp_ao; +#endif /* PPP_IPV4_SUPPORT && VJ_SUPPORT */ + + l2tp->tunnel_port = l2tp->remote_port; + l2tp->our_ns = 0; + l2tp->peer_nr = 0; + l2tp->peer_ns = 0; + l2tp->source_tunnel_id = 0; + l2tp->remote_tunnel_id = 0; + l2tp->source_session_id = 0; + l2tp->remote_session_id = 0; + /* l2tp->*_retried are cleared when used */ + + lcp_wo = &ppp->lcp_wantoptions; + lcp_wo->mru = PPPOL2TP_DEFMRU; + lcp_wo->neg_asyncmap = 0; + lcp_wo->neg_pcompression = 0; + lcp_wo->neg_accompression = 0; + lcp_wo->passive = 0; + lcp_wo->silent = 0; + + lcp_ao = &ppp->lcp_allowoptions; + lcp_ao->mru = PPPOL2TP_DEFMRU; + lcp_ao->neg_asyncmap = 0; + lcp_ao->neg_pcompression = 0; + lcp_ao->neg_accompression = 0; + +#if PPP_IPV4_SUPPORT && VJ_SUPPORT + ipcp_wo = &ppp->ipcp_wantoptions; + ipcp_wo->neg_vj = 0; + ipcp_wo->old_vj = 0; + + ipcp_ao = &ppp->ipcp_allowoptions; + ipcp_ao->neg_vj = 0; + ipcp_ao->old_vj = 0; +#endif /* PPP_IPV4_SUPPORT && VJ_SUPPORT */ + + /* Listen to a random source port, we need to do that instead of using udp_connect() + * because the L2TP LNS might answer with its own random source port (!= 1701) + */ +#if LWIP_IPV6 + if (IP_IS_V6_VAL(l2tp->udp->local_ip)) { + udp_bind(l2tp->udp, IP6_ADDR_ANY, 0); + } else +#endif /* LWIP_IPV6 */ + udp_bind(l2tp->udp, IP_ADDR_ANY, 0); + +#if PPPOL2TP_AUTH_SUPPORT + /* Generate random vector */ + if (l2tp->secret != NULL) { + magic_random_bytes(l2tp->secret_rv, sizeof(l2tp->secret_rv)); + } +#endif /* PPPOL2TP_AUTH_SUPPORT */ + + do { + l2tp->remote_tunnel_id = magic(); + } while(l2tp->remote_tunnel_id == 0); + /* save state, in case we fail to send SCCRQ */ + l2tp->sccrq_retried = 0; + l2tp->phase = PPPOL2TP_STATE_SCCRQ_SENT; + if ((err = pppol2tp_send_sccrq(l2tp)) != 0) { + PPPDEBUG(LOG_DEBUG, ("pppol2tp: failed to send SCCRQ, error=%d\n", err)); + } + sys_timeout(PPPOL2TP_CONTROL_TIMEOUT, pppol2tp_timeout, l2tp); +} + +/* Disconnect */ +static void pppol2tp_disconnect(ppp_pcb *ppp, void *ctx) { + pppol2tp_pcb *l2tp = (pppol2tp_pcb *)ctx; + + l2tp->our_ns++; + pppol2tp_send_stopccn(l2tp, l2tp->our_ns); + + /* stop any timer, disconnect can be called while initiating is in progress */ + sys_untimeout(pppol2tp_timeout, l2tp); + l2tp->phase = PPPOL2TP_STATE_INITIAL; + ppp_link_end(ppp); /* notify upper layers */ +} + +/* UDP Callback for incoming IPv4 L2TP frames */ +static void pppol2tp_input(void *arg, struct udp_pcb *pcb, struct pbuf *p, const ip_addr_t *addr, u16_t port) { + pppol2tp_pcb *l2tp = (pppol2tp_pcb*)arg; + u16_t hflags, hlen, len=0, tunnel_id=0, session_id=0, ns=0, nr=0, offset=0; + u8_t *inp; + LWIP_UNUSED_ARG(pcb); + + /* we can't unbound a UDP pcb, thus we can still receive UDP frames after the link is closed */ + if (l2tp->phase < PPPOL2TP_STATE_SCCRQ_SENT) { + goto free_and_return; + } + + if (!ip_addr_cmp(&l2tp->remote_ip, addr)) { + goto free_and_return; + } + + /* discard packet if port mismatch, but only if we received a SCCRP */ + if (l2tp->phase > PPPOL2TP_STATE_SCCRQ_SENT && l2tp->tunnel_port != port) { + goto free_and_return; + } + + /* printf("-----------\nL2TP INPUT, %d\n", p->len); */ + + /* L2TP header */ + if (p->len < sizeof(hflags) + sizeof(tunnel_id) + sizeof(session_id) ) { + goto packet_too_short; + } + + inp = (u8_t*)p->payload; + GETSHORT(hflags, inp); + + if (hflags & PPPOL2TP_HEADERFLAG_CONTROL) { + /* check mandatory flags for a control packet */ + if ( (hflags & PPPOL2TP_HEADERFLAG_CONTROL_MANDATORY) != PPPOL2TP_HEADERFLAG_CONTROL_MANDATORY ) { + PPPDEBUG(LOG_DEBUG, ("pppol2tp: mandatory header flags for control packet not set\n")); + goto free_and_return; + } + /* check forbidden flags for a control packet */ + if (hflags & PPPOL2TP_HEADERFLAG_CONTROL_FORBIDDEN) { + PPPDEBUG(LOG_DEBUG, ("pppol2tp: forbidden header flags for control packet found\n")); + goto free_and_return; + } + } else { + /* check mandatory flags for a data packet */ + if ( (hflags & PPPOL2TP_HEADERFLAG_DATA_MANDATORY) != PPPOL2TP_HEADERFLAG_DATA_MANDATORY) { + PPPDEBUG(LOG_DEBUG, ("pppol2tp: mandatory header flags for data packet not set\n")); + goto free_and_return; + } + } + + /* Expected header size */ + hlen = sizeof(hflags) + sizeof(tunnel_id) + sizeof(session_id); + if (hflags & PPPOL2TP_HEADERFLAG_LENGTH) { + hlen += sizeof(len); + } + if (hflags & PPPOL2TP_HEADERFLAG_SEQUENCE) { + hlen += sizeof(ns) + sizeof(nr); + } + if (hflags & PPPOL2TP_HEADERFLAG_OFFSET) { + hlen += sizeof(offset); + } + if (p->len < hlen) { + goto packet_too_short; + } + + if (hflags & PPPOL2TP_HEADERFLAG_LENGTH) { + GETSHORT(len, inp); + if (p->len < len || len < hlen) { + goto packet_too_short; + } + } + GETSHORT(tunnel_id, inp); + GETSHORT(session_id, inp); + if (hflags & PPPOL2TP_HEADERFLAG_SEQUENCE) { + GETSHORT(ns, inp); + GETSHORT(nr, inp); + } + if (hflags & PPPOL2TP_HEADERFLAG_OFFSET) { + GETSHORT(offset, inp) + if (offset > 4096) { /* don't be fooled with large offset which might overflow hlen */ + PPPDEBUG(LOG_DEBUG, ("pppol2tp: strange packet received, offset=%d\n", offset)); + goto free_and_return; + } + hlen += offset; + if (p->len < hlen) { + goto packet_too_short; + } + INCPTR(offset, inp); + } + + /* printf("HLEN = %d\n", hlen); */ + + /* skip L2TP header */ + if (pbuf_remove_header(p, hlen) != 0) { + goto free_and_return; + } + + /* printf("LEN=%d, TUNNEL_ID=%d, SESSION_ID=%d, NS=%d, NR=%d, OFFSET=%d\n", len, tunnel_id, session_id, ns, nr, offset); */ + PPPDEBUG(LOG_DEBUG, ("pppol2tp: input packet, len=%"U16_F", tunnel=%"U16_F", session=%"U16_F", ns=%"U16_F", nr=%"U16_F"\n", + len, tunnel_id, session_id, ns, nr)); + + /* Control packet */ + if (hflags & PPPOL2TP_HEADERFLAG_CONTROL) { + pppol2tp_dispatch_control_packet(l2tp, port, p, ns, nr); + goto free_and_return; + } + + /* Data packet */ + if(l2tp->phase != PPPOL2TP_STATE_DATA) { + goto free_and_return; + } + if(tunnel_id != l2tp->remote_tunnel_id) { + PPPDEBUG(LOG_DEBUG, ("pppol2tp: tunnel ID mismatch, assigned=%d, received=%d\n", l2tp->remote_tunnel_id, tunnel_id)); + goto free_and_return; + } + if(session_id != l2tp->remote_session_id) { + PPPDEBUG(LOG_DEBUG, ("pppol2tp: session ID mismatch, assigned=%d, received=%d\n", l2tp->remote_session_id, session_id)); + goto free_and_return; + } + /* + * skip address & flags if necessary + * + * RFC 2661 does not specify whether the PPP frame in the L2TP payload should + * have a HDLC header or not. We handle both cases for compatibility. + */ + if (p->len >= 2) { + GETSHORT(hflags, inp); + if (hflags == 0xff03) { + pbuf_remove_header(p, 2); + } + } + /* Dispatch the packet thereby consuming it. */ + ppp_input(l2tp->ppp, p); + return; + +packet_too_short: + PPPDEBUG(LOG_DEBUG, ("pppol2tp: packet too short: %d\n", p->len)); +free_and_return: + pbuf_free(p); +} + +/* L2TP Control packet entry point */ +static void pppol2tp_dispatch_control_packet(pppol2tp_pcb *l2tp, u16_t port, struct pbuf *p, u16_t ns, u16_t nr) { + u8_t *inp; + u16_t avplen, avpflags, vendorid, attributetype, messagetype=0; + err_t err; +#if PPPOL2TP_AUTH_SUPPORT + lwip_md5_context md5_ctx; + u8_t md5_hash[16]; + u8_t challenge_id = 0; +#endif /* PPPOL2TP_AUTH_SUPPORT */ + + /* printf("L2TP CTRL INPUT, ns=%d, nr=%d, len=%d\n", ns, nr, p->len); */ + + /* Drop unexpected packet */ + if (ns != l2tp->peer_ns) { + PPPDEBUG(LOG_DEBUG, ("pppol2tp: drop unexpected packet: received NS=%d, expected NS=%d\n", ns, l2tp->peer_ns)); + /* + * In order to ensure that all messages are acknowledged properly + * (particularly in the case of a lost ZLB ACK message), receipt + * of duplicate messages MUST be acknowledged. + * + * In this very special case we Ack a packet we previously received. + * Therefore our NS is the NR we just received. And our NR is the + * NS we just received plus one. + */ + if ((s16_t)(ns - l2tp->peer_ns) < 0) { + pppol2tp_send_zlb(l2tp, nr, ns+1); + } + return; + } + + l2tp->peer_nr = nr; + + /* Handle the special case of the ICCN acknowledge */ + if (l2tp->phase == PPPOL2TP_STATE_ICCN_SENT && (s16_t)(l2tp->peer_nr - l2tp->our_ns) > 0) { + l2tp->phase = PPPOL2TP_STATE_DATA; + sys_untimeout(pppol2tp_timeout, l2tp); + ppp_start(l2tp->ppp); /* notify upper layers */ + } + + /* ZLB packets */ + if (p->tot_len == 0) { + return; + } + /* A ZLB packet does not consume a NS slot thus we don't record the NS value for ZLB packets */ + l2tp->peer_ns = ns+1; + + p = pbuf_coalesce(p, PBUF_RAW); + inp = (u8_t*)p->payload; + /* Decode AVPs */ + while (p->len > 0) { + if (p->len < sizeof(avpflags) + sizeof(vendorid) + sizeof(attributetype) ) { + goto packet_too_short; + } + GETSHORT(avpflags, inp); + avplen = avpflags & PPPOL2TP_AVPHEADERFLAG_LENGTHMASK; + /* printf("AVPLEN = %d\n", avplen); */ + if (p->len < avplen || avplen < sizeof(avpflags) + sizeof(vendorid) + sizeof(attributetype)) { + goto packet_too_short; + } + GETSHORT(vendorid, inp); + GETSHORT(attributetype, inp); + avplen -= sizeof(avpflags) + sizeof(vendorid) + sizeof(attributetype); + + /* Message type must be the first AVP */ + if (messagetype == 0) { + if (attributetype != 0 || vendorid != 0 || avplen != sizeof(messagetype) ) { + PPPDEBUG(LOG_DEBUG, ("pppol2tp: message type must be the first AVP\n")); + return; + } + GETSHORT(messagetype, inp); + /* printf("Message type = %d\n", messagetype); */ + switch(messagetype) { + /* Start Control Connection Reply */ + case PPPOL2TP_MESSAGETYPE_SCCRP: + /* Only accept SCCRP packet if we sent a SCCRQ */ + if (l2tp->phase != PPPOL2TP_STATE_SCCRQ_SENT) { + goto send_zlb; + } + break; + /* Incoming Call Reply */ + case PPPOL2TP_MESSAGETYPE_ICRP: + /* Only accept ICRP packet if we sent a IRCQ */ + if (l2tp->phase != PPPOL2TP_STATE_ICRQ_SENT) { + goto send_zlb; + } + break; + /* Stop Control Connection Notification */ + case PPPOL2TP_MESSAGETYPE_STOPCCN: + pppol2tp_send_zlb(l2tp, l2tp->our_ns+1, l2tp->peer_ns); /* Ack the StopCCN before we switch to down state */ + if (l2tp->phase < PPPOL2TP_STATE_DATA) { + pppol2tp_abort_connect(l2tp); + } else if (l2tp->phase == PPPOL2TP_STATE_DATA) { + /* Don't disconnect here, we let the LCP Echo/Reply find the fact + * that PPP session is down. Asking the PPP stack to end the session + * require strict checking about the PPP phase to prevent endless + * disconnection loops. + */ + } + return; + default: + break; + } + goto nextavp; + } + + /* Skip proprietary L2TP extensions */ + if (vendorid != 0) { + goto skipavp; + } + + switch (messagetype) { + /* Start Control Connection Reply */ + case PPPOL2TP_MESSAGETYPE_SCCRP: + switch (attributetype) { + case PPPOL2TP_AVPTYPE_TUNNELID: + if (avplen != sizeof(l2tp->source_tunnel_id) ) { + PPPDEBUG(LOG_DEBUG, ("pppol2tp: AVP Assign tunnel ID length check failed\n")); + return; + } + GETSHORT(l2tp->source_tunnel_id, inp); + PPPDEBUG(LOG_DEBUG, ("pppol2tp: Assigned tunnel ID %"U16_F"\n", l2tp->source_tunnel_id)); + goto nextavp; +#if PPPOL2TP_AUTH_SUPPORT + case PPPOL2TP_AVPTYPE_CHALLENGE: + if (avplen == 0) { + PPPDEBUG(LOG_DEBUG, ("pppol2tp: Challenge length check failed\n")); + return; + } + if (l2tp->secret == NULL) { + PPPDEBUG(LOG_DEBUG, ("pppol2tp: Received challenge from peer and no secret key available\n")); + pppol2tp_abort_connect(l2tp); + return; + } + /* Generate hash of ID, secret, challenge */ + lwip_md5_init(&md5_ctx); + lwip_md5_starts(&md5_ctx); + challenge_id = PPPOL2TP_MESSAGETYPE_SCCCN; + lwip_md5_update(&md5_ctx, &challenge_id, 1); + lwip_md5_update(&md5_ctx, l2tp->secret, l2tp->secret_len); + lwip_md5_update(&md5_ctx, inp, avplen); + lwip_md5_finish(&md5_ctx, l2tp->challenge_hash); + lwip_md5_free(&md5_ctx); + l2tp->send_challenge = 1; + goto skipavp; + case PPPOL2TP_AVPTYPE_CHALLENGERESPONSE: + if (avplen != PPPOL2TP_AVPTYPE_CHALLENGERESPONSE_SIZE) { + PPPDEBUG(LOG_DEBUG, ("pppol2tp: AVP Challenge Response length check failed\n")); + return; + } + /* Generate hash of ID, secret, challenge */ + lwip_md5_init(&md5_ctx); + lwip_md5_starts(&md5_ctx); + challenge_id = PPPOL2TP_MESSAGETYPE_SCCRP; + lwip_md5_update(&md5_ctx, &challenge_id, 1); + lwip_md5_update(&md5_ctx, l2tp->secret, l2tp->secret_len); + lwip_md5_update(&md5_ctx, l2tp->secret_rv, sizeof(l2tp->secret_rv)); + lwip_md5_finish(&md5_ctx, md5_hash); + lwip_md5_free(&md5_ctx); + if ( memcmp(inp, md5_hash, sizeof(md5_hash)) ) { + PPPDEBUG(LOG_DEBUG, ("pppol2tp: Received challenge response from peer and secret key do not match\n")); + pppol2tp_abort_connect(l2tp); + return; + } + goto skipavp; +#endif /* PPPOL2TP_AUTH_SUPPORT */ + default: + break; + } + break; + /* Incoming Call Reply */ + case PPPOL2TP_MESSAGETYPE_ICRP: + switch (attributetype) { + case PPPOL2TP_AVPTYPE_SESSIONID: + if (avplen != sizeof(l2tp->source_session_id) ) { + PPPDEBUG(LOG_DEBUG, ("pppol2tp: AVP Assign session ID length check failed\n")); + return; + } + GETSHORT(l2tp->source_session_id, inp); + PPPDEBUG(LOG_DEBUG, ("pppol2tp: Assigned session ID %"U16_F"\n", l2tp->source_session_id)); + goto nextavp; + default: + break; + } + break; + default: + break; + } + +skipavp: + INCPTR(avplen, inp); +nextavp: + /* printf("AVP Found, vendor=%d, attribute=%d, len=%d\n", vendorid, attributetype, avplen); */ + /* next AVP */ + if (pbuf_remove_header(p, avplen + sizeof(avpflags) + sizeof(vendorid) + sizeof(attributetype)) != 0) { + return; + } + } + + switch(messagetype) { + /* Start Control Connection Reply */ + case PPPOL2TP_MESSAGETYPE_SCCRP: + do { + l2tp->remote_session_id = magic(); + } while(l2tp->remote_session_id == 0); + l2tp->tunnel_port = port; /* LNS server might have chosen its own local port */ + l2tp->icrq_retried = 0; + l2tp->phase = PPPOL2TP_STATE_ICRQ_SENT; + l2tp->our_ns++; + if ((err = pppol2tp_send_scccn(l2tp, l2tp->our_ns)) != 0) { + PPPDEBUG(LOG_DEBUG, ("pppol2tp: failed to send SCCCN, error=%d\n", err)); + LWIP_UNUSED_ARG(err); /* if PPPDEBUG is disabled */ + } + l2tp->our_ns++; + if ((err = pppol2tp_send_icrq(l2tp, l2tp->our_ns)) != 0) { + PPPDEBUG(LOG_DEBUG, ("pppol2tp: failed to send ICRQ, error=%d\n", err)); + LWIP_UNUSED_ARG(err); /* if PPPDEBUG is disabled */ + } + sys_untimeout(pppol2tp_timeout, l2tp); + sys_timeout(PPPOL2TP_CONTROL_TIMEOUT, pppol2tp_timeout, l2tp); + break; + /* Incoming Call Reply */ + case PPPOL2TP_MESSAGETYPE_ICRP: + l2tp->iccn_retried = 0; + l2tp->phase = PPPOL2TP_STATE_ICCN_SENT; + l2tp->our_ns++; + if ((err = pppol2tp_send_iccn(l2tp, l2tp->our_ns)) != 0) { + PPPDEBUG(LOG_DEBUG, ("pppol2tp: failed to send ICCN, error=%d\n", err)); + LWIP_UNUSED_ARG(err); /* if PPPDEBUG is disabled */ + } + sys_untimeout(pppol2tp_timeout, l2tp); + sys_timeout(PPPOL2TP_CONTROL_TIMEOUT, pppol2tp_timeout, l2tp); + break; + /* Unhandled packet, send ZLB ACK */ + default: + goto send_zlb; + } + return; + +send_zlb: + pppol2tp_send_zlb(l2tp, l2tp->our_ns+1, l2tp->peer_ns); + return; +packet_too_short: + PPPDEBUG(LOG_DEBUG, ("pppol2tp: packet too short: %d\n", p->len)); +} + +/* L2TP Timeout handler */ +static void pppol2tp_timeout(void *arg) { + pppol2tp_pcb *l2tp = (pppol2tp_pcb*)arg; + err_t err; + u32_t retry_wait; + + PPPDEBUG(LOG_DEBUG, ("pppol2tp: timeout\n")); + + switch (l2tp->phase) { + case PPPOL2TP_STATE_SCCRQ_SENT: + /* backoff wait */ + if (l2tp->sccrq_retried < 0xff) { + l2tp->sccrq_retried++; + } + if (!l2tp->ppp->settings.persist && l2tp->sccrq_retried >= PPPOL2TP_MAXSCCRQ) { + pppol2tp_abort_connect(l2tp); + return; + } + retry_wait = LWIP_MIN(PPPOL2TP_CONTROL_TIMEOUT * l2tp->sccrq_retried, PPPOL2TP_SLOW_RETRY); + PPPDEBUG(LOG_DEBUG, ("pppol2tp: sccrq_retried=%d\n", l2tp->sccrq_retried)); + if ((err = pppol2tp_send_sccrq(l2tp)) != 0) { + l2tp->sccrq_retried--; + PPPDEBUG(LOG_DEBUG, ("pppol2tp: failed to send SCCRQ, error=%d\n", err)); + LWIP_UNUSED_ARG(err); /* if PPPDEBUG is disabled */ + } + sys_timeout(retry_wait, pppol2tp_timeout, l2tp); + break; + + case PPPOL2TP_STATE_ICRQ_SENT: + l2tp->icrq_retried++; + if (l2tp->icrq_retried >= PPPOL2TP_MAXICRQ) { + pppol2tp_abort_connect(l2tp); + return; + } + PPPDEBUG(LOG_DEBUG, ("pppol2tp: icrq_retried=%d\n", l2tp->icrq_retried)); + if ((s16_t)(l2tp->peer_nr - l2tp->our_ns) < 0) { /* the SCCCN was not acknowledged */ + if ((err = pppol2tp_send_scccn(l2tp, l2tp->our_ns -1)) != 0) { + l2tp->icrq_retried--; + PPPDEBUG(LOG_DEBUG, ("pppol2tp: failed to send SCCCN, error=%d\n", err)); + LWIP_UNUSED_ARG(err); /* if PPPDEBUG is disabled */ + sys_timeout(PPPOL2TP_CONTROL_TIMEOUT, pppol2tp_timeout, l2tp); + break; + } + } + if ((err = pppol2tp_send_icrq(l2tp, l2tp->our_ns)) != 0) { + l2tp->icrq_retried--; + PPPDEBUG(LOG_DEBUG, ("pppol2tp: failed to send ICRQ, error=%d\n", err)); + LWIP_UNUSED_ARG(err); /* if PPPDEBUG is disabled */ + } + sys_timeout(PPPOL2TP_CONTROL_TIMEOUT, pppol2tp_timeout, l2tp); + break; + + case PPPOL2TP_STATE_ICCN_SENT: + l2tp->iccn_retried++; + if (l2tp->iccn_retried >= PPPOL2TP_MAXICCN) { + pppol2tp_abort_connect(l2tp); + return; + } + PPPDEBUG(LOG_DEBUG, ("pppol2tp: iccn_retried=%d\n", l2tp->iccn_retried)); + if ((err = pppol2tp_send_iccn(l2tp, l2tp->our_ns)) != 0) { + l2tp->iccn_retried--; + PPPDEBUG(LOG_DEBUG, ("pppol2tp: failed to send ICCN, error=%d\n", err)); + LWIP_UNUSED_ARG(err); /* if PPPDEBUG is disabled */ + } + sys_timeout(PPPOL2TP_CONTROL_TIMEOUT, pppol2tp_timeout, l2tp); + break; + + default: + return; /* all done, work in peace */ + } +} + +/* Connection attempt aborted */ +static void pppol2tp_abort_connect(pppol2tp_pcb *l2tp) { + PPPDEBUG(LOG_DEBUG, ("pppol2tp: could not establish connection\n")); + l2tp->phase = PPPOL2TP_STATE_INITIAL; + ppp_link_failed(l2tp->ppp); /* notify upper layers */ +} + +/* Initiate a new tunnel */ +static err_t pppol2tp_send_sccrq(pppol2tp_pcb *l2tp) { + struct pbuf *pb; + u8_t *p; + u16_t len; + + /* calculate UDP packet length */ + len = 12 +8 +8 +10 +10 +6+sizeof(PPPOL2TP_HOSTNAME)-1 +6+sizeof(PPPOL2TP_VENDORNAME)-1 +8 +8; +#if PPPOL2TP_AUTH_SUPPORT + if (l2tp->secret != NULL) { + len += 6 + sizeof(l2tp->secret_rv); + } +#endif /* PPPOL2TP_AUTH_SUPPORT */ + + /* allocate a buffer */ + pb = pbuf_alloc(PBUF_TRANSPORT, len, PBUF_RAM); + if (pb == NULL) { + return ERR_MEM; + } + LWIP_ASSERT("pb->tot_len == pb->len", pb->tot_len == pb->len); + + p = (u8_t*)pb->payload; + /* fill in pkt */ + /* L2TP control header */ + PUTSHORT(PPPOL2TP_HEADERFLAG_CONTROL_MANDATORY, p); + PUTSHORT(len, p); /* Length */ + PUTSHORT(0, p); /* Tunnel Id */ + PUTSHORT(0, p); /* Session Id */ + PUTSHORT(0, p); /* NS Sequence number - to peer */ + PUTSHORT(0, p); /* NR Sequence number - expected for peer */ + + /* AVP - Message type */ + PUTSHORT(PPPOL2TP_AVPHEADERFLAG_MANDATORY + 8, p); /* Mandatory flag + len field */ + PUTSHORT(0, p); /* Vendor ID */ + PUTSHORT(PPPOL2TP_AVPTYPE_MESSAGE, p); /* Attribute type: Message Type */ + PUTSHORT(PPPOL2TP_MESSAGETYPE_SCCRQ, p); /* Attribute value: Message type: SCCRQ */ + + /* AVP - L2TP Version */ + PUTSHORT(PPPOL2TP_AVPHEADERFLAG_MANDATORY + 8, p); /* Mandatory flag + len field */ + PUTSHORT(0, p); /* Vendor ID */ + PUTSHORT(PPPOL2TP_AVPTYPE_VERSION, p); /* Attribute type: Version */ + PUTSHORT(PPPOL2TP_VERSION, p); /* Attribute value: L2TP Version */ + + /* AVP - Framing capabilities */ + PUTSHORT(PPPOL2TP_AVPHEADERFLAG_MANDATORY + 10, p); /* Mandatory flag + len field */ + PUTSHORT(0, p); /* Vendor ID */ + PUTSHORT(PPPOL2TP_AVPTYPE_FRAMINGCAPABILITIES, p); /* Attribute type: Framing capabilities */ + PUTLONG(PPPOL2TP_FRAMINGCAPABILITIES, p); /* Attribute value: Framing capabilities */ + + /* AVP - Bearer capabilities */ + PUTSHORT(PPPOL2TP_AVPHEADERFLAG_MANDATORY + 10, p); /* Mandatory flag + len field */ + PUTSHORT(0, p); /* Vendor ID */ + PUTSHORT(PPPOL2TP_AVPTYPE_BEARERCAPABILITIES, p); /* Attribute type: Bearer capabilities */ + PUTLONG(PPPOL2TP_BEARERCAPABILITIES, p); /* Attribute value: Bearer capabilities */ + + /* AVP - Host name */ + PUTSHORT(PPPOL2TP_AVPHEADERFLAG_MANDATORY + 6+sizeof(PPPOL2TP_HOSTNAME)-1, p); /* Mandatory flag + len field */ + PUTSHORT(0, p); /* Vendor ID */ + PUTSHORT(PPPOL2TP_AVPTYPE_HOSTNAME, p); /* Attribute type: Hostname */ + MEMCPY(p, PPPOL2TP_HOSTNAME, sizeof(PPPOL2TP_HOSTNAME)-1); /* Attribute value: Hostname */ + INCPTR(sizeof(PPPOL2TP_HOSTNAME)-1, p); + + /* AVP - Vendor name */ + PUTSHORT(6+sizeof(PPPOL2TP_VENDORNAME)-1, p); /* len field */ + PUTSHORT(0, p); /* Vendor ID */ + PUTSHORT(PPPOL2TP_AVPTYPE_VENDORNAME, p); /* Attribute type: Vendor name */ + MEMCPY(p, PPPOL2TP_VENDORNAME, sizeof(PPPOL2TP_VENDORNAME)-1); /* Attribute value: Vendor name */ + INCPTR(sizeof(PPPOL2TP_VENDORNAME)-1, p); + + /* AVP - Assign tunnel ID */ + PUTSHORT(PPPOL2TP_AVPHEADERFLAG_MANDATORY + 8, p); /* Mandatory flag + len field */ + PUTSHORT(0, p); /* Vendor ID */ + PUTSHORT(PPPOL2TP_AVPTYPE_TUNNELID, p); /* Attribute type: Tunnel ID */ + PUTSHORT(l2tp->remote_tunnel_id, p); /* Attribute value: Tunnel ID */ + + /* AVP - Receive window size */ + PUTSHORT(PPPOL2TP_AVPHEADERFLAG_MANDATORY + 8, p); /* Mandatory flag + len field */ + PUTSHORT(0, p); /* Vendor ID */ + PUTSHORT(PPPOL2TP_AVPTYPE_RECEIVEWINDOWSIZE, p); /* Attribute type: Receive window size */ + PUTSHORT(PPPOL2TP_RECEIVEWINDOWSIZE, p); /* Attribute value: Receive window size */ + +#if PPPOL2TP_AUTH_SUPPORT + /* AVP - Challenge */ + if (l2tp->secret != NULL) { + PUTSHORT(PPPOL2TP_AVPHEADERFLAG_MANDATORY + 6 + sizeof(l2tp->secret_rv), p); /* Mandatory flag + len field */ + PUTSHORT(0, p); /* Vendor ID */ + PUTSHORT(PPPOL2TP_AVPTYPE_CHALLENGE, p); /* Attribute type: Challenge */ + MEMCPY(p, l2tp->secret_rv, sizeof(l2tp->secret_rv)); /* Attribute value: Random vector */ + INCPTR(sizeof(l2tp->secret_rv), p); + } +#endif /* PPPOL2TP_AUTH_SUPPORT */ + + return pppol2tp_udp_send(l2tp, pb); +} + +/* Complete tunnel establishment */ +static err_t pppol2tp_send_scccn(pppol2tp_pcb *l2tp, u16_t ns) { + struct pbuf *pb; + u8_t *p; + u16_t len; + + /* calculate UDP packet length */ + len = 12 +8; +#if PPPOL2TP_AUTH_SUPPORT + if (l2tp->send_challenge) { + len += 6 + sizeof(l2tp->challenge_hash); + } +#endif /* PPPOL2TP_AUTH_SUPPORT */ + + /* allocate a buffer */ + pb = pbuf_alloc(PBUF_TRANSPORT, len, PBUF_RAM); + if (pb == NULL) { + return ERR_MEM; + } + LWIP_ASSERT("pb->tot_len == pb->len", pb->tot_len == pb->len); + + p = (u8_t*)pb->payload; + /* fill in pkt */ + /* L2TP control header */ + PUTSHORT(PPPOL2TP_HEADERFLAG_CONTROL_MANDATORY, p); + PUTSHORT(len, p); /* Length */ + PUTSHORT(l2tp->source_tunnel_id, p); /* Tunnel Id */ + PUTSHORT(0, p); /* Session Id */ + PUTSHORT(ns, p); /* NS Sequence number - to peer */ + PUTSHORT(l2tp->peer_ns, p); /* NR Sequence number - expected for peer */ + + /* AVP - Message type */ + PUTSHORT(PPPOL2TP_AVPHEADERFLAG_MANDATORY + 8, p); /* Mandatory flag + len field */ + PUTSHORT(0, p); /* Vendor ID */ + PUTSHORT(PPPOL2TP_AVPTYPE_MESSAGE, p); /* Attribute type: Message Type */ + PUTSHORT(PPPOL2TP_MESSAGETYPE_SCCCN, p); /* Attribute value: Message type: SCCCN */ + +#if PPPOL2TP_AUTH_SUPPORT + /* AVP - Challenge response */ + if (l2tp->send_challenge) { + PUTSHORT(PPPOL2TP_AVPHEADERFLAG_MANDATORY + 6 + sizeof(l2tp->challenge_hash), p); /* Mandatory flag + len field */ + PUTSHORT(0, p); /* Vendor ID */ + PUTSHORT(PPPOL2TP_AVPTYPE_CHALLENGERESPONSE, p); /* Attribute type: Challenge response */ + MEMCPY(p, l2tp->challenge_hash, sizeof(l2tp->challenge_hash)); /* Attribute value: Computed challenge */ + INCPTR(sizeof(l2tp->challenge_hash), p); + } +#endif /* PPPOL2TP_AUTH_SUPPORT */ + + return pppol2tp_udp_send(l2tp, pb); +} + +/* Initiate a new session */ +static err_t pppol2tp_send_icrq(pppol2tp_pcb *l2tp, u16_t ns) { + struct pbuf *pb; + u8_t *p; + u16_t len; + u32_t serialnumber; + + /* calculate UDP packet length */ + len = 12 +8 +8 +10; + + /* allocate a buffer */ + pb = pbuf_alloc(PBUF_TRANSPORT, len, PBUF_RAM); + if (pb == NULL) { + return ERR_MEM; + } + LWIP_ASSERT("pb->tot_len == pb->len", pb->tot_len == pb->len); + + p = (u8_t*)pb->payload; + /* fill in pkt */ + /* L2TP control header */ + PUTSHORT(PPPOL2TP_HEADERFLAG_CONTROL_MANDATORY, p); + PUTSHORT(len, p); /* Length */ + PUTSHORT(l2tp->source_tunnel_id, p); /* Tunnel Id */ + PUTSHORT(0, p); /* Session Id */ + PUTSHORT(ns, p); /* NS Sequence number - to peer */ + PUTSHORT(l2tp->peer_ns, p); /* NR Sequence number - expected for peer */ + + /* AVP - Message type */ + PUTSHORT(PPPOL2TP_AVPHEADERFLAG_MANDATORY + 8, p); /* Mandatory flag + len field */ + PUTSHORT(0, p); /* Vendor ID */ + PUTSHORT(PPPOL2TP_AVPTYPE_MESSAGE, p); /* Attribute type: Message Type */ + PUTSHORT(PPPOL2TP_MESSAGETYPE_ICRQ, p); /* Attribute value: Message type: ICRQ */ + + /* AVP - Assign session ID */ + PUTSHORT(PPPOL2TP_AVPHEADERFLAG_MANDATORY + 8, p); /* Mandatory flag + len field */ + PUTSHORT(0, p); /* Vendor ID */ + PUTSHORT(PPPOL2TP_AVPTYPE_SESSIONID, p); /* Attribute type: Session ID */ + PUTSHORT(l2tp->remote_session_id, p); /* Attribute value: Session ID */ + + /* AVP - Call Serial Number */ + PUTSHORT(PPPOL2TP_AVPHEADERFLAG_MANDATORY + 10, p); /* Mandatory flag + len field */ + PUTSHORT(0, p); /* Vendor ID */ + PUTSHORT(PPPOL2TP_AVPTYPE_CALLSERIALNUMBER, p); /* Attribute type: Serial number */ + serialnumber = magic(); + PUTLONG(serialnumber, p); /* Attribute value: Serial number */ + + return pppol2tp_udp_send(l2tp, pb); +} + +/* Complete tunnel establishment */ +static err_t pppol2tp_send_iccn(pppol2tp_pcb *l2tp, u16_t ns) { + struct pbuf *pb; + u8_t *p; + u16_t len; + + /* calculate UDP packet length */ + len = 12 +8 +10 +10; + + /* allocate a buffer */ + pb = pbuf_alloc(PBUF_TRANSPORT, len, PBUF_RAM); + if (pb == NULL) { + return ERR_MEM; + } + LWIP_ASSERT("pb->tot_len == pb->len", pb->tot_len == pb->len); + + p = (u8_t*)pb->payload; + /* fill in pkt */ + /* L2TP control header */ + PUTSHORT(PPPOL2TP_HEADERFLAG_CONTROL_MANDATORY, p); + PUTSHORT(len, p); /* Length */ + PUTSHORT(l2tp->source_tunnel_id, p); /* Tunnel Id */ + PUTSHORT(l2tp->source_session_id, p); /* Session Id */ + PUTSHORT(ns, p); /* NS Sequence number - to peer */ + PUTSHORT(l2tp->peer_ns, p); /* NR Sequence number - expected for peer */ + + /* AVP - Message type */ + PUTSHORT(PPPOL2TP_AVPHEADERFLAG_MANDATORY + 8, p); /* Mandatory flag + len field */ + PUTSHORT(0, p); /* Vendor ID */ + PUTSHORT(PPPOL2TP_AVPTYPE_MESSAGE, p); /* Attribute type: Message Type */ + PUTSHORT(PPPOL2TP_MESSAGETYPE_ICCN, p); /* Attribute value: Message type: ICCN */ + + /* AVP - Framing type */ + PUTSHORT(PPPOL2TP_AVPHEADERFLAG_MANDATORY + 10, p); /* Mandatory flag + len field */ + PUTSHORT(0, p); /* Vendor ID */ + PUTSHORT(PPPOL2TP_AVPTYPE_FRAMINGTYPE, p); /* Attribute type: Framing type */ + PUTLONG(PPPOL2TP_FRAMINGTYPE, p); /* Attribute value: Framing type */ + + /* AVP - TX Connect speed */ + PUTSHORT(PPPOL2TP_AVPHEADERFLAG_MANDATORY + 10, p); /* Mandatory flag + len field */ + PUTSHORT(0, p); /* Vendor ID */ + PUTSHORT(PPPOL2TP_AVPTYPE_TXCONNECTSPEED, p); /* Attribute type: TX Connect speed */ + PUTLONG(PPPOL2TP_TXCONNECTSPEED, p); /* Attribute value: TX Connect speed */ + + return pppol2tp_udp_send(l2tp, pb); +} + +/* Send a ZLB ACK packet */ +static err_t pppol2tp_send_zlb(pppol2tp_pcb *l2tp, u16_t ns, u16_t nr) { + struct pbuf *pb; + u8_t *p; + u16_t len; + + /* calculate UDP packet length */ + len = 12; + + /* allocate a buffer */ + pb = pbuf_alloc(PBUF_TRANSPORT, len, PBUF_RAM); + if (pb == NULL) { + return ERR_MEM; + } + LWIP_ASSERT("pb->tot_len == pb->len", pb->tot_len == pb->len); + + p = (u8_t*)pb->payload; + /* fill in pkt */ + /* L2TP control header */ + PUTSHORT(PPPOL2TP_HEADERFLAG_CONTROL_MANDATORY, p); + PUTSHORT(len, p); /* Length */ + PUTSHORT(l2tp->source_tunnel_id, p); /* Tunnel Id */ + PUTSHORT(0, p); /* Session Id */ + PUTSHORT(ns, p); /* NS Sequence number - to peer */ + PUTSHORT(nr, p); /* NR Sequence number - expected for peer */ + + return pppol2tp_udp_send(l2tp, pb); +} + +/* Send a StopCCN packet */ +static err_t pppol2tp_send_stopccn(pppol2tp_pcb *l2tp, u16_t ns) { + struct pbuf *pb; + u8_t *p; + u16_t len; + + /* calculate UDP packet length */ + len = 12 +8 +8 +8; + + /* allocate a buffer */ + pb = pbuf_alloc(PBUF_TRANSPORT, len, PBUF_RAM); + if (pb == NULL) { + return ERR_MEM; + } + LWIP_ASSERT("pb->tot_len == pb->len", pb->tot_len == pb->len); + + p = (u8_t*)pb->payload; + /* fill in pkt */ + /* L2TP control header */ + PUTSHORT(PPPOL2TP_HEADERFLAG_CONTROL_MANDATORY, p); + PUTSHORT(len, p); /* Length */ + PUTSHORT(l2tp->source_tunnel_id, p); /* Tunnel Id */ + PUTSHORT(0, p); /* Session Id */ + PUTSHORT(ns, p); /* NS Sequence number - to peer */ + PUTSHORT(l2tp->peer_ns, p); /* NR Sequence number - expected for peer */ + + /* AVP - Message type */ + PUTSHORT(PPPOL2TP_AVPHEADERFLAG_MANDATORY + 8, p); /* Mandatory flag + len field */ + PUTSHORT(0, p); /* Vendor ID */ + PUTSHORT(PPPOL2TP_AVPTYPE_MESSAGE, p); /* Attribute type: Message Type */ + PUTSHORT(PPPOL2TP_MESSAGETYPE_STOPCCN, p); /* Attribute value: Message type: StopCCN */ + + /* AVP - Assign tunnel ID */ + PUTSHORT(PPPOL2TP_AVPHEADERFLAG_MANDATORY + 8, p); /* Mandatory flag + len field */ + PUTSHORT(0, p); /* Vendor ID */ + PUTSHORT(PPPOL2TP_AVPTYPE_TUNNELID, p); /* Attribute type: Tunnel ID */ + PUTSHORT(l2tp->remote_tunnel_id, p); /* Attribute value: Tunnel ID */ + + /* AVP - Result code */ + PUTSHORT(PPPOL2TP_AVPHEADERFLAG_MANDATORY + 8, p); /* Mandatory flag + len field */ + PUTSHORT(0, p); /* Vendor ID */ + PUTSHORT(PPPOL2TP_AVPTYPE_RESULTCODE, p); /* Attribute type: Result code */ + PUTSHORT(PPPOL2TP_RESULTCODE, p); /* Attribute value: Result code */ + + return pppol2tp_udp_send(l2tp, pb); +} + +static err_t pppol2tp_xmit(pppol2tp_pcb *l2tp, struct pbuf *pb) { + u8_t *p; + + /* make room for L2TP header - should not fail */ + if (pbuf_add_header(pb, PPPOL2TP_OUTPUT_DATA_HEADER_LEN) != 0) { + /* bail out */ + PPPDEBUG(LOG_ERR, ("pppol2tp: pppol2tp_pcb: could not allocate room for L2TP header\n")); + LINK_STATS_INC(link.lenerr); + pbuf_free(pb); + return ERR_BUF; + } + + p = (u8_t*)pb->payload; + PUTSHORT(PPPOL2TP_HEADERFLAG_DATA_MANDATORY, p); + PUTSHORT(l2tp->source_tunnel_id, p); /* Tunnel Id */ + PUTSHORT(l2tp->source_session_id, p); /* Session Id */ + + return pppol2tp_udp_send(l2tp, pb); +} + +static err_t pppol2tp_udp_send(pppol2tp_pcb *l2tp, struct pbuf *pb) { + err_t err; + if (l2tp->netif) { + err = udp_sendto_if(l2tp->udp, pb, &l2tp->remote_ip, l2tp->tunnel_port, l2tp->netif); + } else { + err = udp_sendto(l2tp->udp, pb, &l2tp->remote_ip, l2tp->tunnel_port); + } + pbuf_free(pb); + return err; +} + +#endif /* PPP_SUPPORT && PPPOL2TP_SUPPORT */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/pppos.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/pppos.c new file mode 100644 index 0000000000000000000000000000000000000000..dff0255449aa5ad3dadcdcd75304ee91094e6a8b --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/pppos.c @@ -0,0 +1,895 @@ +/** + * @file + * Network Point to Point Protocol over Serial file. + * + */ + +/* + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + */ + +#include "netif/ppp/ppp_opts.h" +#if PPP_SUPPORT && PPPOS_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +#include + +#include "lwip/arch.h" +#include "lwip/err.h" +#include "lwip/pbuf.h" +#include "lwip/sys.h" +#include "lwip/memp.h" +#include "lwip/netif.h" +#include "lwip/snmp.h" +#include "lwip/priv/tcpip_priv.h" +#include "lwip/api.h" +#include "lwip/ip4.h" /* for ip4_input() */ + +#include "netif/ppp/ppp_impl.h" +#include "netif/ppp/pppos.h" +#include "netif/ppp/vj.h" + +/* Memory pool */ +LWIP_MEMPOOL_DECLARE(PPPOS_PCB, MEMP_NUM_PPPOS_INTERFACES, sizeof(pppos_pcb), "PPPOS_PCB") + +/* callbacks called from PPP core */ +static err_t pppos_write(ppp_pcb *ppp, void *ctx, struct pbuf *p); +static err_t pppos_netif_output(ppp_pcb *ppp, void *ctx, struct pbuf *pb, u16_t protocol); +static void pppos_connect(ppp_pcb *ppp, void *ctx); +#if PPP_SERVER +static void pppos_listen(ppp_pcb *ppp, void *ctx); +#endif /* PPP_SERVER */ +static void pppos_disconnect(ppp_pcb *ppp, void *ctx); +static err_t pppos_destroy(ppp_pcb *ppp, void *ctx); +static void pppos_send_config(ppp_pcb *ppp, void *ctx, u32_t accm, int pcomp, int accomp); +static void pppos_recv_config(ppp_pcb *ppp, void *ctx, u32_t accm, int pcomp, int accomp); + +/* Prototypes for procedures local to this file. */ +#if PPP_INPROC_IRQ_SAFE +static void pppos_input_callback(void *arg); +#endif /* PPP_INPROC_IRQ_SAFE */ +static void pppos_input_free_current_packet(pppos_pcb *pppos); +static void pppos_input_drop(pppos_pcb *pppos); +static err_t pppos_output_append(pppos_pcb *pppos, err_t err, struct pbuf *nb, u8_t c, u8_t accm, u16_t *fcs); +static err_t pppos_output_last(pppos_pcb *pppos, err_t err, struct pbuf *nb, u16_t *fcs); + +/* Callbacks structure for PPP core */ +static const struct link_callbacks pppos_callbacks = { + pppos_connect, +#if PPP_SERVER + pppos_listen, +#endif /* PPP_SERVER */ + pppos_disconnect, + pppos_destroy, + pppos_write, + pppos_netif_output, + pppos_send_config, + pppos_recv_config +}; + +/* PPP's Asynchronous-Control-Character-Map. The mask array is used + * to select the specific bit for a character. */ +#define ESCAPE_P(accm, c) ((accm)[(c) >> 3] & 1 << (c & 0x07)) + +#if PPP_FCS_TABLE +/* + * FCS lookup table as calculated by genfcstab. + */ +static const u16_t fcstab[256] = { + 0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf, + 0x8c48, 0x9dc1, 0xaf5a, 0xbed3, 0xca6c, 0xdbe5, 0xe97e, 0xf8f7, + 0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, 0x472c, 0x75b7, 0x643e, + 0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, 0xcb64, 0xf9ff, 0xe876, + 0x2102, 0x308b, 0x0210, 0x1399, 0x6726, 0x76af, 0x4434, 0x55bd, + 0xad4a, 0xbcc3, 0x8e58, 0x9fd1, 0xeb6e, 0xfae7, 0xc87c, 0xd9f5, + 0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, 0x662e, 0x54b5, 0x453c, + 0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef, 0xea66, 0xd8fd, 0xc974, + 0x4204, 0x538d, 0x6116, 0x709f, 0x0420, 0x15a9, 0x2732, 0x36bb, + 0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868, 0x99e1, 0xab7a, 0xbaf3, + 0x5285, 0x430c, 0x7197, 0x601e, 0x14a1, 0x0528, 0x37b3, 0x263a, + 0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, 0x8960, 0xbbfb, 0xaa72, + 0x6306, 0x728f, 0x4014, 0x519d, 0x2522, 0x34ab, 0x0630, 0x17b9, + 0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, 0xb8e3, 0x8a78, 0x9bf1, + 0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, 0x242a, 0x16b1, 0x0738, + 0xffcf, 0xee46, 0xdcdd, 0xcd54, 0xb9eb, 0xa862, 0x9af9, 0x8b70, + 0x8408, 0x9581, 0xa71a, 0xb693, 0xc22c, 0xd3a5, 0xe13e, 0xf0b7, + 0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64, 0x5fed, 0x6d76, 0x7cff, + 0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, 0xc324, 0xf1bf, 0xe036, + 0x18c1, 0x0948, 0x3bd3, 0x2a5a, 0x5ee5, 0x4f6c, 0x7df7, 0x6c7e, + 0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e, 0xf2a7, 0xc03c, 0xd1b5, + 0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, 0x7eef, 0x4c74, 0x5dfd, + 0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, 0xe226, 0xd0bd, 0xc134, + 0x39c3, 0x284a, 0x1ad1, 0x0b58, 0x7fe7, 0x6e6e, 0x5cf5, 0x4d7c, + 0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, 0x91a1, 0xa33a, 0xb2b3, + 0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60, 0x1de9, 0x2f72, 0x3efb, + 0xd68d, 0xc704, 0xf59f, 0xe416, 0x90a9, 0x8120, 0xb3bb, 0xa232, + 0x5ac5, 0x4b4c, 0x79d7, 0x685e, 0x1ce1, 0x0d68, 0x3ff3, 0x2e7a, + 0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, 0xb0a3, 0x8238, 0x93b1, + 0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, 0x3ceb, 0x0e70, 0x1ff9, + 0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, 0x8330, + 0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3, 0x2c6a, 0x1ef1, 0x0f78 +}; +#define PPP_FCS(fcs, c) (((fcs) >> 8) ^ fcstab[((fcs) ^ (c)) & 0xff]) +#else /* PPP_FCS_TABLE */ +/* The HDLC polynomial: X**0 + X**5 + X**12 + X**16 (0x8408) */ +#define PPP_FCS_POLYNOMIAL 0x8408 +static u16_t +ppp_get_fcs(u8_t byte) +{ + unsigned int octet; + int bit; + octet = byte; + for (bit = 8; bit-- > 0; ) { + octet = (octet & 0x01) ? ((octet >> 1) ^ PPP_FCS_POLYNOMIAL) : (octet >> 1); + } + return octet & 0xffff; +} +#define PPP_FCS(fcs, c) (((fcs) >> 8) ^ ppp_get_fcs(((fcs) ^ (c)) & 0xff)) +#endif /* PPP_FCS_TABLE */ + +/* + * Values for FCS calculations. + */ +#define PPP_INITFCS 0xffff /* Initial FCS value */ +#define PPP_GOODFCS 0xf0b8 /* Good final FCS value */ + +#if PPP_INPROC_IRQ_SAFE +#define PPPOS_DECL_PROTECT(lev) SYS_ARCH_DECL_PROTECT(lev) +#define PPPOS_PROTECT(lev) SYS_ARCH_PROTECT(lev) +#define PPPOS_UNPROTECT(lev) SYS_ARCH_UNPROTECT(lev) +#else +#define PPPOS_DECL_PROTECT(lev) +#define PPPOS_PROTECT(lev) +#define PPPOS_UNPROTECT(lev) +#endif /* PPP_INPROC_IRQ_SAFE */ + + +/* + * Create a new PPP connection using the given serial I/O device. + * + * Return 0 on success, an error code on failure. + */ +ppp_pcb *pppos_create(struct netif *pppif, pppos_output_cb_fn output_cb, + ppp_link_status_cb_fn link_status_cb, void *ctx_cb) +{ + pppos_pcb *pppos; + ppp_pcb *ppp; + LWIP_ASSERT_CORE_LOCKED(); + + pppos = (pppos_pcb *)LWIP_MEMPOOL_ALLOC(PPPOS_PCB); + if (pppos == NULL) { + return NULL; + } + + ppp = ppp_new(pppif, &pppos_callbacks, pppos, link_status_cb, ctx_cb); + if (ppp == NULL) { + LWIP_MEMPOOL_FREE(PPPOS_PCB, pppos); + return NULL; + } + + memset(pppos, 0, sizeof(pppos_pcb)); + pppos->ppp = ppp; + pppos->output_cb = output_cb; + return ppp; +} + +/* Called by PPP core */ +static err_t +pppos_write(ppp_pcb *ppp, void *ctx, struct pbuf *p) +{ + pppos_pcb *pppos = (pppos_pcb *)ctx; + u8_t *s; + struct pbuf *nb; + u16_t n; + u16_t fcs_out; + err_t err; + LWIP_UNUSED_ARG(ppp); + + /* Grab an output buffer. Using PBUF_POOL here for tx is ok since the pbuf + gets freed by 'pppos_output_last' before this function returns and thus + cannot starve rx. */ + nb = pbuf_alloc(PBUF_RAW, 0, PBUF_POOL); + if (nb == NULL) { + PPPDEBUG(LOG_WARNING, ("pppos_write[%d]: alloc fail\n", ppp->netif->num)); + LINK_STATS_INC(link.memerr); + LINK_STATS_INC(link.drop); + MIB2_STATS_NETIF_INC(ppp->netif, ifoutdiscards); + pbuf_free(p); + return ERR_MEM; + } + + /* Set nb->tot_len to actual payload length */ + nb->tot_len = p->len; + + /* If the link has been idle, we'll send a fresh flag character to + * flush any noise. */ + err = ERR_OK; + if ((sys_now() - pppos->last_xmit) >= PPP_MAXIDLEFLAG) { + err = pppos_output_append(pppos, err, nb, PPP_FLAG, 0, NULL); + } + + /* Load output buffer. */ + fcs_out = PPP_INITFCS; + s = (u8_t*)p->payload; + n = p->len; + while (n-- > 0) { + err = pppos_output_append(pppos, err, nb, *s++, 1, &fcs_out); + } + + err = pppos_output_last(pppos, err, nb, &fcs_out); + if (err == ERR_OK) { + PPPDEBUG(LOG_INFO, ("pppos_write[%d]: len=%d\n", ppp->netif->num, p->len)); + } else { + PPPDEBUG(LOG_WARNING, ("pppos_write[%d]: output failed len=%d\n", ppp->netif->num, p->len)); + } + pbuf_free(p); + return err; +} + +/* Called by PPP core */ +static err_t +pppos_netif_output(ppp_pcb *ppp, void *ctx, struct pbuf *pb, u16_t protocol) +{ + pppos_pcb *pppos = (pppos_pcb *)ctx; + struct pbuf *nb, *p; + u16_t fcs_out; + err_t err; + LWIP_UNUSED_ARG(ppp); + + /* Grab an output buffer. Using PBUF_POOL here for tx is ok since the pbuf + gets freed by 'pppos_output_last' before this function returns and thus + cannot starve rx. */ + nb = pbuf_alloc(PBUF_RAW, 0, PBUF_POOL); + if (nb == NULL) { + PPPDEBUG(LOG_WARNING, ("pppos_netif_output[%d]: alloc fail\n", ppp->netif->num)); + LINK_STATS_INC(link.memerr); + LINK_STATS_INC(link.drop); + MIB2_STATS_NETIF_INC(ppp->netif, ifoutdiscards); + return ERR_MEM; + } + + /* Set nb->tot_len to actual payload length */ + nb->tot_len = pb->tot_len; + + /* If the link has been idle, we'll send a fresh flag character to + * flush any noise. */ + err = ERR_OK; + if ((sys_now() - pppos->last_xmit) >= PPP_MAXIDLEFLAG) { + err = pppos_output_append(pppos, err, nb, PPP_FLAG, 0, NULL); + } + + fcs_out = PPP_INITFCS; + if (!pppos->accomp) { + err = pppos_output_append(pppos, err, nb, PPP_ALLSTATIONS, 1, &fcs_out); + err = pppos_output_append(pppos, err, nb, PPP_UI, 1, &fcs_out); + } + if (!pppos->pcomp || protocol > 0xFF) { + err = pppos_output_append(pppos, err, nb, (protocol >> 8) & 0xFF, 1, &fcs_out); + } + err = pppos_output_append(pppos, err, nb, protocol & 0xFF, 1, &fcs_out); + + /* Load packet. */ + for(p = pb; p; p = p->next) { + u16_t n = p->len; + u8_t *s = (u8_t*)p->payload; + + while (n-- > 0) { + err = pppos_output_append(pppos, err, nb, *s++, 1, &fcs_out); + } + } + + err = pppos_output_last(pppos, err, nb, &fcs_out); + if (err == ERR_OK) { + PPPDEBUG(LOG_INFO, ("pppos_netif_output[%d]: proto=0x%"X16_F", len = %d\n", ppp->netif->num, protocol, pb->tot_len)); + } else { + PPPDEBUG(LOG_WARNING, ("pppos_netif_output[%d]: output failed proto=0x%"X16_F", len = %d\n", ppp->netif->num, protocol, pb->tot_len)); + } + return err; +} + +static void +pppos_connect(ppp_pcb *ppp, void *ctx) +{ + pppos_pcb *pppos = (pppos_pcb *)ctx; + PPPOS_DECL_PROTECT(lev); + +#if PPP_INPROC_IRQ_SAFE + /* input pbuf left over from last session? */ + pppos_input_free_current_packet(pppos); +#endif /* PPP_INPROC_IRQ_SAFE */ + + /* reset PPPoS control block to its initial state */ + memset(&pppos->last_xmit, 0, sizeof(pppos_pcb) - offsetof(pppos_pcb, last_xmit)); + + /* + * Default the in and out accm so that escape and flag characters + * are always escaped. + */ + pppos->in_accm[15] = 0x60; /* no need to protect since RX is not running */ + pppos->out_accm[15] = 0x60; + PPPOS_PROTECT(lev); + pppos->open = 1; + PPPOS_UNPROTECT(lev); + + /* + * Start the connection and handle incoming events (packet or timeout). + */ + PPPDEBUG(LOG_INFO, ("pppos_connect: unit %d: connecting\n", ppp->netif->num)); + ppp_start(ppp); /* notify upper layers */ +} + +#if PPP_SERVER +static void +pppos_listen(ppp_pcb *ppp, void *ctx) +{ + pppos_pcb *pppos = (pppos_pcb *)ctx; + PPPOS_DECL_PROTECT(lev); + +#if PPP_INPROC_IRQ_SAFE + /* input pbuf left over from last session? */ + pppos_input_free_current_packet(pppos); +#endif /* PPP_INPROC_IRQ_SAFE */ + + /* reset PPPoS control block to its initial state */ + memset(&pppos->last_xmit, 0, sizeof(pppos_pcb) - offsetof(pppos_pcb, last_xmit)); + + /* + * Default the in and out accm so that escape and flag characters + * are always escaped. + */ + pppos->in_accm[15] = 0x60; /* no need to protect since RX is not running */ + pppos->out_accm[15] = 0x60; + PPPOS_PROTECT(lev); + pppos->open = 1; + PPPOS_UNPROTECT(lev); + + /* + * Wait for something to happen. + */ + PPPDEBUG(LOG_INFO, ("pppos_listen: unit %d: listening\n", ppp->netif->num)); + ppp_start(ppp); /* notify upper layers */ +} +#endif /* PPP_SERVER */ + +static void +pppos_disconnect(ppp_pcb *ppp, void *ctx) +{ + pppos_pcb *pppos = (pppos_pcb *)ctx; + PPPOS_DECL_PROTECT(lev); + + PPPOS_PROTECT(lev); + pppos->open = 0; + PPPOS_UNPROTECT(lev); + + /* If PPP_INPROC_IRQ_SAFE is used we cannot call + * pppos_input_free_current_packet() here because + * rx IRQ might still call pppos_input(). + */ +#if !PPP_INPROC_IRQ_SAFE + /* input pbuf left ? */ + pppos_input_free_current_packet(pppos); +#endif /* !PPP_INPROC_IRQ_SAFE */ + + ppp_link_end(ppp); /* notify upper layers */ +} + +static err_t +pppos_destroy(ppp_pcb *ppp, void *ctx) +{ + pppos_pcb *pppos = (pppos_pcb *)ctx; + LWIP_UNUSED_ARG(ppp); + +#if PPP_INPROC_IRQ_SAFE + /* input pbuf left ? */ + pppos_input_free_current_packet(pppos); +#endif /* PPP_INPROC_IRQ_SAFE */ + + LWIP_MEMPOOL_FREE(PPPOS_PCB, pppos); + return ERR_OK; +} + +#if !NO_SYS && !PPP_INPROC_IRQ_SAFE +/** Pass received raw characters to PPPoS to be decoded through lwIP TCPIP thread. + * + * This is one of the only functions that may be called outside of the TCPIP thread! + * + * @param ppp PPP descriptor index, returned by pppos_create() + * @param s received data + * @param l length of received data + */ +err_t +pppos_input_tcpip(ppp_pcb *ppp, u8_t *s, int l) +{ + struct pbuf *p; + err_t err; + + p = pbuf_alloc(PBUF_RAW, l, PBUF_POOL); + if (!p) { + return ERR_MEM; + } + pbuf_take(p, s, l); + + err = tcpip_inpkt(p, ppp_netif(ppp), pppos_input_sys); + if (err != ERR_OK) { + pbuf_free(p); + } + return err; +} + +/* called from TCPIP thread */ +err_t pppos_input_sys(struct pbuf *p, struct netif *inp) { + ppp_pcb *ppp = (ppp_pcb*)inp->state; + struct pbuf *n; + LWIP_ASSERT_CORE_LOCKED(); + + for (n = p; n; n = n->next) { + pppos_input(ppp, (u8_t*)n->payload, n->len); + } + pbuf_free(p); + return ERR_OK; +} +#endif /* !NO_SYS && !PPP_INPROC_IRQ_SAFE */ + +/** PPPoS input helper struct, must be packed since it is stored + * to pbuf->payload, which might be unaligned. */ +#if PPP_INPROC_IRQ_SAFE +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct pppos_input_header { + PACK_STRUCT_FIELD(ppp_pcb *ppp); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif +#endif /* PPP_INPROC_IRQ_SAFE */ + +/** Pass received raw characters to PPPoS to be decoded. + * + * @param ppp PPP descriptor index, returned by pppos_create() + * @param s received data + * @param l length of received data + */ +void +pppos_input(ppp_pcb *ppp, u8_t *s, int l) +{ + pppos_pcb *pppos = (pppos_pcb *)ppp->link_ctx_cb; + struct pbuf *next_pbuf; + u8_t cur_char; + u8_t escaped; + PPPOS_DECL_PROTECT(lev); +#if !PPP_INPROC_IRQ_SAFE + LWIP_ASSERT_CORE_LOCKED(); +#endif + + PPPDEBUG(LOG_DEBUG, ("pppos_input[%d]: got %d bytes\n", ppp->netif->num, l)); + while (l-- > 0) { + cur_char = *s++; + + PPPOS_PROTECT(lev); + /* ppp_input can disconnect the interface, we need to abort to prevent a memory + * leak if there are remaining bytes because pppos_connect and pppos_listen + * functions expect input buffer to be free. Furthermore there are no real + * reason to continue reading bytes if we are disconnected. + */ + if (!pppos->open) { + PPPOS_UNPROTECT(lev); + return; + } + escaped = ESCAPE_P(pppos->in_accm, cur_char); + PPPOS_UNPROTECT(lev); + /* Handle special characters. */ + if (escaped) { + /* Check for escape sequences. */ + /* XXX Note that this does not handle an escaped 0x5d character which + * would appear as an escape character. Since this is an ASCII ']' + * and there is no reason that I know of to escape it, I won't complicate + * the code to handle this case. GLL */ + if (cur_char == PPP_ESCAPE) { + pppos->in_escaped = 1; + /* Check for the flag character. */ + } else if (cur_char == PPP_FLAG) { + /* If this is just an extra flag character, ignore it. */ + if (pppos->in_state <= PDADDRESS) { + /* ignore it */; + /* If we haven't received the packet header, drop what has come in. */ + } else if (pppos->in_state < PDDATA) { + PPPDEBUG(LOG_WARNING, + ("pppos_input[%d]: Dropping incomplete packet %d\n", + ppp->netif->num, pppos->in_state)); + LINK_STATS_INC(link.lenerr); + pppos_input_drop(pppos); + /* If the fcs is invalid, drop the packet. */ + } else if (pppos->in_fcs != PPP_GOODFCS) { + PPPDEBUG(LOG_INFO, + ("pppos_input[%d]: Dropping bad fcs 0x%"X16_F" proto=0x%"X16_F"\n", + ppp->netif->num, pppos->in_fcs, pppos->in_protocol)); + /* Note: If you get lots of these, check for UART frame errors or try different baud rate */ + LINK_STATS_INC(link.chkerr); + pppos_input_drop(pppos); + /* Otherwise it's a good packet so pass it on. */ + } else { + struct pbuf *inp; + /* Trim off the checksum. */ + if(pppos->in_tail->len > 2) { + pppos->in_tail->len -= 2; + + pppos->in_tail->tot_len = pppos->in_tail->len; + if (pppos->in_tail != pppos->in_head) { + pbuf_cat(pppos->in_head, pppos->in_tail); + } + } else { + pppos->in_tail->tot_len = pppos->in_tail->len; + if (pppos->in_tail != pppos->in_head) { + pbuf_cat(pppos->in_head, pppos->in_tail); + } + + pbuf_realloc(pppos->in_head, pppos->in_head->tot_len - 2); + } + + /* Dispatch the packet thereby consuming it. */ + inp = pppos->in_head; + /* Packet consumed, release our references. */ + pppos->in_head = NULL; + pppos->in_tail = NULL; +#if IP_FORWARD || LWIP_IPV6_FORWARD + /* hide the room for Ethernet forwarding header */ + pbuf_remove_header(inp, PBUF_LINK_ENCAPSULATION_HLEN + PBUF_LINK_HLEN); +#endif /* IP_FORWARD || LWIP_IPV6_FORWARD */ +#if PPP_INPROC_IRQ_SAFE + if(tcpip_try_callback(pppos_input_callback, inp) != ERR_OK) { + PPPDEBUG(LOG_ERR, ("pppos_input[%d]: tcpip_callback() failed, dropping packet\n", ppp->netif->num)); + pbuf_free(inp); + LINK_STATS_INC(link.drop); + MIB2_STATS_NETIF_INC(ppp->netif, ifindiscards); + } +#else /* PPP_INPROC_IRQ_SAFE */ + ppp_input(ppp, inp); +#endif /* PPP_INPROC_IRQ_SAFE */ + } + + /* Prepare for a new packet. */ + pppos->in_fcs = PPP_INITFCS; + pppos->in_state = PDADDRESS; + pppos->in_escaped = 0; + /* Other characters are usually control characters that may have + * been inserted by the physical layer so here we just drop them. */ + } else { + PPPDEBUG(LOG_WARNING, + ("pppos_input[%d]: Dropping ACCM char <%d>\n", ppp->netif->num, cur_char)); + } + /* Process other characters. */ + } else { + /* Unencode escaped characters. */ + if (pppos->in_escaped) { + pppos->in_escaped = 0; + cur_char ^= PPP_TRANS; + } + + /* Process character relative to current state. */ + switch(pppos->in_state) { + case PDIDLE: /* Idle state - waiting. */ + /* Drop the character if it's not 0xff + * we would have processed a flag character above. */ + if (cur_char != PPP_ALLSTATIONS) { + break; + } + /* no break */ + /* Fall through */ + + case PDSTART: /* Process start flag. */ + /* Prepare for a new packet. */ + pppos->in_fcs = PPP_INITFCS; + /* no break */ + /* Fall through */ + + case PDADDRESS: /* Process address field. */ + if (cur_char == PPP_ALLSTATIONS) { + pppos->in_state = PDCONTROL; + break; + } + /* no break */ + + /* Else assume compressed address and control fields so + * fall through to get the protocol... */ + /* Fall through */ + case PDCONTROL: /* Process control field. */ + /* If we don't get a valid control code, restart. */ + if (cur_char == PPP_UI) { + pppos->in_state = PDPROTOCOL1; + break; + } + /* no break */ + +#if 0 + else { + PPPDEBUG(LOG_WARNING, + ("pppos_input[%d]: Invalid control <%d>\n", ppp->netif->num, cur_char)); + pppos->in_state = PDSTART; + } +#endif + /* Fall through */ + + case PDPROTOCOL1: /* Process protocol field 1. */ + /* If the lower bit is set, this is the end of the protocol + * field. */ + if (cur_char & 1) { + pppos->in_protocol = cur_char; + pppos->in_state = PDDATA; + } else { + pppos->in_protocol = (u16_t)cur_char << 8; + pppos->in_state = PDPROTOCOL2; + } + break; + case PDPROTOCOL2: /* Process protocol field 2. */ + pppos->in_protocol |= cur_char; + pppos->in_state = PDDATA; + break; + case PDDATA: /* Process data byte. */ + /* Make space to receive processed data. */ + if (pppos->in_tail == NULL || pppos->in_tail->len == PBUF_POOL_BUFSIZE) { + u16_t pbuf_alloc_len; + if (pppos->in_tail != NULL) { + pppos->in_tail->tot_len = pppos->in_tail->len; + if (pppos->in_tail != pppos->in_head) { + pbuf_cat(pppos->in_head, pppos->in_tail); + /* give up the in_tail reference now */ + pppos->in_tail = NULL; + } + } + /* If we haven't started a packet, we need a packet header. */ + pbuf_alloc_len = 0; +#if IP_FORWARD || LWIP_IPV6_FORWARD + /* If IP forwarding is enabled we are reserving PBUF_LINK_ENCAPSULATION_HLEN + * + PBUF_LINK_HLEN bytes so the packet is being allocated with enough header + * space to be forwarded (to Ethernet for example). + */ + if (pppos->in_head == NULL) { + pbuf_alloc_len = PBUF_LINK_ENCAPSULATION_HLEN + PBUF_LINK_HLEN; + } +#endif /* IP_FORWARD || LWIP_IPV6_FORWARD */ + next_pbuf = pbuf_alloc(PBUF_RAW, pbuf_alloc_len, PBUF_POOL); + if (next_pbuf == NULL) { + /* No free buffers. Drop the input packet and let the + * higher layers deal with it. Continue processing + * the received pbuf chain in case a new packet starts. */ + PPPDEBUG(LOG_ERR, ("pppos_input[%d]: NO FREE PBUFS!\n", ppp->netif->num)); + LINK_STATS_INC(link.memerr); + pppos_input_drop(pppos); + pppos->in_state = PDSTART; /* Wait for flag sequence. */ + break; + } + if (pppos->in_head == NULL) { + u8_t *payload = ((u8_t*)next_pbuf->payload) + pbuf_alloc_len; +#if PPP_INPROC_IRQ_SAFE + ((struct pppos_input_header*)payload)->ppp = ppp; + payload += sizeof(struct pppos_input_header); + next_pbuf->len += sizeof(struct pppos_input_header); +#endif /* PPP_INPROC_IRQ_SAFE */ + next_pbuf->len += sizeof(pppos->in_protocol); + *(payload++) = pppos->in_protocol >> 8; + *(payload) = pppos->in_protocol & 0xFF; + pppos->in_head = next_pbuf; + } + pppos->in_tail = next_pbuf; + } + /* Load character into buffer. */ + ((u8_t*)pppos->in_tail->payload)[pppos->in_tail->len++] = cur_char; + break; + default: + break; + } + + /* update the frame check sequence number. */ + pppos->in_fcs = PPP_FCS(pppos->in_fcs, cur_char); + } + } /* while (l-- > 0), all bytes processed */ +} + +#if PPP_INPROC_IRQ_SAFE +/* PPPoS input callback using one input pointer + */ +static void pppos_input_callback(void *arg) { + struct pbuf *pb = (struct pbuf*)arg; + ppp_pcb *ppp; + + ppp = ((struct pppos_input_header*)pb->payload)->ppp; + if(pbuf_remove_header(pb, sizeof(struct pppos_input_header))) { + LWIP_ASSERT("pbuf_remove_header failed\n", 0); + goto drop; + } + + /* Dispatch the packet thereby consuming it. */ + ppp_input(ppp, pb); + return; + +drop: + LINK_STATS_INC(link.drop); + MIB2_STATS_NETIF_INC(ppp->netif, ifindiscards); + pbuf_free(pb); +} +#endif /* PPP_INPROC_IRQ_SAFE */ + +static void +pppos_send_config(ppp_pcb *ppp, void *ctx, u32_t accm, int pcomp, int accomp) +{ + int i; + pppos_pcb *pppos = (pppos_pcb *)ctx; + LWIP_UNUSED_ARG(ppp); + + pppos->pcomp = pcomp; + pppos->accomp = accomp; + + /* Load the ACCM bits for the 32 control codes. */ + for (i = 0; i < 32/8; i++) { + pppos->out_accm[i] = (u8_t)((accm >> (8 * i)) & 0xFF); + } + + PPPDEBUG(LOG_INFO, ("pppos_send_config[%d]: out_accm=%X %X %X %X\n", + pppos->ppp->netif->num, + pppos->out_accm[0], pppos->out_accm[1], pppos->out_accm[2], pppos->out_accm[3])); +} + +static void +pppos_recv_config(ppp_pcb *ppp, void *ctx, u32_t accm, int pcomp, int accomp) +{ + int i; + pppos_pcb *pppos = (pppos_pcb *)ctx; + PPPOS_DECL_PROTECT(lev); + LWIP_UNUSED_ARG(ppp); + LWIP_UNUSED_ARG(pcomp); + LWIP_UNUSED_ARG(accomp); + + /* Load the ACCM bits for the 32 control codes. */ + PPPOS_PROTECT(lev); + for (i = 0; i < 32 / 8; i++) { + pppos->in_accm[i] = (u8_t)(accm >> (i * 8)); + } + PPPOS_UNPROTECT(lev); + + PPPDEBUG(LOG_INFO, ("pppos_recv_config[%d]: in_accm=%X %X %X %X\n", + pppos->ppp->netif->num, + pppos->in_accm[0], pppos->in_accm[1], pppos->in_accm[2], pppos->in_accm[3])); +} + +/* + * Drop the input packet. + */ +static void +pppos_input_free_current_packet(pppos_pcb *pppos) +{ + if (pppos->in_head != NULL) { + if (pppos->in_tail && (pppos->in_tail != pppos->in_head)) { + pbuf_free(pppos->in_tail); + } + pbuf_free(pppos->in_head); + pppos->in_head = NULL; + } + pppos->in_tail = NULL; +} + +/* + * Drop the input packet and increase error counters. + */ +static void +pppos_input_drop(pppos_pcb *pppos) +{ + if (pppos->in_head != NULL) { +#if 0 + PPPDEBUG(LOG_INFO, ("pppos_input_drop: %d:%.*H\n", pppos->in_head->len, min(60, pppos->in_head->len * 2), pppos->in_head->payload)); +#endif + PPPDEBUG(LOG_INFO, ("pppos_input_drop: pbuf len=%d, addr %p\n", pppos->in_head->len, (void*)pppos->in_head)); + } + pppos_input_free_current_packet(pppos); +#if VJ_SUPPORT + vj_uncompress_err(&pppos->ppp->vj_comp); +#endif /* VJ_SUPPORT */ + + LINK_STATS_INC(link.drop); + MIB2_STATS_NETIF_INC(pppos->ppp->netif, ifindiscards); +} + +/* + * pppos_output_append - append given character to end of given pbuf. + * If out_accm is not 0 and the character needs to be escaped, do so. + * If pbuf is full, send the pbuf and reuse it. + * Return the current pbuf. + */ +static err_t +pppos_output_append(pppos_pcb *pppos, err_t err, struct pbuf *nb, u8_t c, u8_t accm, u16_t *fcs) +{ + if (err != ERR_OK) { + return err; + } + + /* Make sure there is room for the character and an escape code. + * Sure we don't quite fill the buffer if the character doesn't + * get escaped but is one character worth complicating this? */ + if ((PBUF_POOL_BUFSIZE - nb->len) < 2) { + u32_t l = pppos->output_cb(pppos->ppp, (u8_t*)nb->payload, nb->len, pppos->ppp->ctx_cb); + if (l != nb->len) { + return ERR_IF; + } + nb->len = 0; + } + + /* Update FCS before checking for special characters. */ + if (fcs) { + *fcs = PPP_FCS(*fcs, c); + } + + /* Copy to output buffer escaping special characters. */ + if (accm && ESCAPE_P(pppos->out_accm, c)) { + *((u8_t*)nb->payload + nb->len++) = PPP_ESCAPE; + *((u8_t*)nb->payload + nb->len++) = c ^ PPP_TRANS; + } else { + *((u8_t*)nb->payload + nb->len++) = c; + } + + return ERR_OK; +} + +static err_t +pppos_output_last(pppos_pcb *pppos, err_t err, struct pbuf *nb, u16_t *fcs) +{ + ppp_pcb *ppp = pppos->ppp; + + /* Add FCS and trailing flag. */ + err = pppos_output_append(pppos, err, nb, ~(*fcs) & 0xFF, 1, NULL); + err = pppos_output_append(pppos, err, nb, (~(*fcs) >> 8) & 0xFF, 1, NULL); + err = pppos_output_append(pppos, err, nb, PPP_FLAG, 0, NULL); + + if (err != ERR_OK) { + goto failed; + } + + /* Send remaining buffer if not empty */ + if (nb->len > 0) { + u32_t l = pppos->output_cb(ppp, (u8_t*)nb->payload, nb->len, ppp->ctx_cb); + if (l != nb->len) { + err = ERR_IF; + goto failed; + } + } + + pppos->last_xmit = sys_now(); + MIB2_STATS_NETIF_ADD(ppp->netif, ifoutoctets, nb->tot_len); + MIB2_STATS_NETIF_INC(ppp->netif, ifoutucastpkts); + LINK_STATS_INC(link.xmit); + pbuf_free(nb); + return ERR_OK; + +failed: + pppos->last_xmit = 0; /* prepend PPP_FLAG to next packet */ + LINK_STATS_INC(link.err); + LINK_STATS_INC(link.drop); + MIB2_STATS_NETIF_INC(ppp->netif, ifoutdiscards); + pbuf_free(nb); + return err; +} + +#endif /* PPP_SUPPORT && PPPOS_SUPPORT */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/upap.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/upap.c new file mode 100644 index 0000000000000000000000000000000000000000..3b2399dc231bbb0d22ffe98bb2cb91bfaaa416a9 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/upap.c @@ -0,0 +1,677 @@ +/* + * upap.c - User/Password Authentication Protocol. + * + * Copyright (c) 1984-2000 Carnegie Mellon University. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The name "Carnegie Mellon University" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For permission or any legal + * details, please contact + * Office of Technology Transfer + * Carnegie Mellon University + * 5000 Forbes Avenue + * Pittsburgh, PA 15213-3890 + * (412) 268-4387, fax: (412) 268-7395 + * tech-transfer@andrew.cmu.edu + * + * 4. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by Computing Services + * at Carnegie Mellon University (http://www.cmu.edu/computing/)." + * + * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO + * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE + * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include "netif/ppp/ppp_opts.h" +#if PPP_SUPPORT && PAP_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +/* + * @todo: + */ + +#if 0 /* UNUSED */ +#include +#include +#endif /* UNUSED */ + +#include "netif/ppp/ppp_impl.h" + +#include "netif/ppp/upap.h" + +#if PPP_OPTIONS +/* + * Command-line options. + */ +static option_t pap_option_list[] = { + { "hide-password", o_bool, &hide_password, + "Don't output passwords to log", OPT_PRIO | 1 }, + { "show-password", o_bool, &hide_password, + "Show password string in debug log messages", OPT_PRIOSUB | 0 }, + + { "pap-restart", o_int, &upap[0].us_timeouttime, + "Set retransmit timeout for PAP", OPT_PRIO }, + { "pap-max-authreq", o_int, &upap[0].us_maxtransmits, + "Set max number of transmissions for auth-reqs", OPT_PRIO }, + { "pap-timeout", o_int, &upap[0].us_reqtimeout, + "Set time limit for peer PAP authentication", OPT_PRIO }, + + { NULL } +}; +#endif /* PPP_OPTIONS */ + +/* + * Protocol entry points. + */ +static void upap_init(ppp_pcb *pcb); +static void upap_lowerup(ppp_pcb *pcb); +static void upap_lowerdown(ppp_pcb *pcb); +static void upap_input(ppp_pcb *pcb, u_char *inpacket, int l); +static void upap_protrej(ppp_pcb *pcb); +#if PRINTPKT_SUPPORT +static int upap_printpkt(const u_char *p, int plen, void (*printer) (void *, const char *, ...), void *arg); +#endif /* PRINTPKT_SUPPORT */ + +const struct protent pap_protent = { + PPP_PAP, + upap_init, + upap_input, + upap_protrej, + upap_lowerup, + upap_lowerdown, + NULL, + NULL, +#if PRINTPKT_SUPPORT + upap_printpkt, +#endif /* PRINTPKT_SUPPORT */ +#if PPP_DATAINPUT + NULL, +#endif /* PPP_DATAINPUT */ +#if PRINTPKT_SUPPORT + "PAP", + NULL, +#endif /* PRINTPKT_SUPPORT */ +#if PPP_OPTIONS + pap_option_list, + NULL, +#endif /* PPP_OPTIONS */ +#if DEMAND_SUPPORT + NULL, + NULL +#endif /* DEMAND_SUPPORT */ +}; + +static void upap_timeout(void *arg); +#if PPP_SERVER +static void upap_reqtimeout(void *arg); +static void upap_rauthreq(ppp_pcb *pcb, u_char *inp, int id, int len); +#endif /* PPP_SERVER */ +static void upap_rauthack(ppp_pcb *pcb, u_char *inp, int id, int len); +static void upap_rauthnak(ppp_pcb *pcb, u_char *inp, int id, int len); +static void upap_sauthreq(ppp_pcb *pcb); +#if PPP_SERVER +static void upap_sresp(ppp_pcb *pcb, u_char code, u_char id, const char *msg, int msglen); +#endif /* PPP_SERVER */ + + +/* + * upap_init - Initialize a UPAP unit. + */ +static void upap_init(ppp_pcb *pcb) { + pcb->upap.us_user = NULL; + pcb->upap.us_userlen = 0; + pcb->upap.us_passwd = NULL; + pcb->upap.us_passwdlen = 0; + pcb->upap.us_clientstate = UPAPCS_INITIAL; +#if PPP_SERVER + pcb->upap.us_serverstate = UPAPSS_INITIAL; +#endif /* PPP_SERVER */ + pcb->upap.us_id = 0; +} + + +/* + * upap_authwithpeer - Authenticate us with our peer (start client). + * + * Set new state and send authenticate's. + */ +void upap_authwithpeer(ppp_pcb *pcb, const char *user, const char *password) { + + if(!user || !password) + return; + + /* Save the username and password we're given */ + pcb->upap.us_user = user; + pcb->upap.us_userlen = (u8_t)LWIP_MIN(strlen(user), 0xff); + pcb->upap.us_passwd = password; + pcb->upap.us_passwdlen = (u8_t)LWIP_MIN(strlen(password), 0xff); + pcb->upap.us_transmits = 0; + + /* Lower layer up yet? */ + if (pcb->upap.us_clientstate == UPAPCS_INITIAL || + pcb->upap.us_clientstate == UPAPCS_PENDING) { + pcb->upap.us_clientstate = UPAPCS_PENDING; + return; + } + + upap_sauthreq(pcb); /* Start protocol */ +} + +#if PPP_SERVER +/* + * upap_authpeer - Authenticate our peer (start server). + * + * Set new state. + */ +void upap_authpeer(ppp_pcb *pcb) { + + /* Lower layer up yet? */ + if (pcb->upap.us_serverstate == UPAPSS_INITIAL || + pcb->upap.us_serverstate == UPAPSS_PENDING) { + pcb->upap.us_serverstate = UPAPSS_PENDING; + return; + } + + pcb->upap.us_serverstate = UPAPSS_LISTEN; + if (pcb->settings.pap_req_timeout > 0) + TIMEOUT(upap_reqtimeout, pcb, pcb->settings.pap_req_timeout); +} +#endif /* PPP_SERVER */ + +/* + * upap_timeout - Retransmission timer for sending auth-reqs expired. + */ +static void upap_timeout(void *arg) { + ppp_pcb *pcb = (ppp_pcb*)arg; + + if (pcb->upap.us_clientstate != UPAPCS_AUTHREQ) + return; + + if (pcb->upap.us_transmits >= pcb->settings.pap_max_transmits) { + /* give up in disgust */ + ppp_error("No response to PAP authenticate-requests"); + pcb->upap.us_clientstate = UPAPCS_BADAUTH; + auth_withpeer_fail(pcb, PPP_PAP); + return; + } + + upap_sauthreq(pcb); /* Send Authenticate-Request */ +} + + +#if PPP_SERVER +/* + * upap_reqtimeout - Give up waiting for the peer to send an auth-req. + */ +static void upap_reqtimeout(void *arg) { + ppp_pcb *pcb = (ppp_pcb*)arg; + + if (pcb->upap.us_serverstate != UPAPSS_LISTEN) + return; /* huh?? */ + + auth_peer_fail(pcb, PPP_PAP); + pcb->upap.us_serverstate = UPAPSS_BADAUTH; +} +#endif /* PPP_SERVER */ + + +/* + * upap_lowerup - The lower layer is up. + * + * Start authenticating if pending. + */ +static void upap_lowerup(ppp_pcb *pcb) { + + if (pcb->upap.us_clientstate == UPAPCS_INITIAL) + pcb->upap.us_clientstate = UPAPCS_CLOSED; + else if (pcb->upap.us_clientstate == UPAPCS_PENDING) { + upap_sauthreq(pcb); /* send an auth-request */ + } + +#if PPP_SERVER + if (pcb->upap.us_serverstate == UPAPSS_INITIAL) + pcb->upap.us_serverstate = UPAPSS_CLOSED; + else if (pcb->upap.us_serverstate == UPAPSS_PENDING) { + pcb->upap.us_serverstate = UPAPSS_LISTEN; + if (pcb->settings.pap_req_timeout > 0) + TIMEOUT(upap_reqtimeout, pcb, pcb->settings.pap_req_timeout); + } +#endif /* PPP_SERVER */ +} + + +/* + * upap_lowerdown - The lower layer is down. + * + * Cancel all timeouts. + */ +static void upap_lowerdown(ppp_pcb *pcb) { + + if (pcb->upap.us_clientstate == UPAPCS_AUTHREQ) /* Timeout pending? */ + UNTIMEOUT(upap_timeout, pcb); /* Cancel timeout */ +#if PPP_SERVER + if (pcb->upap.us_serverstate == UPAPSS_LISTEN && pcb->settings.pap_req_timeout > 0) + UNTIMEOUT(upap_reqtimeout, pcb); +#endif /* PPP_SERVER */ + + pcb->upap.us_clientstate = UPAPCS_INITIAL; +#if PPP_SERVER + pcb->upap.us_serverstate = UPAPSS_INITIAL; +#endif /* PPP_SERVER */ +} + + +/* + * upap_protrej - Peer doesn't speak this protocol. + * + * This shouldn't happen. In any case, pretend lower layer went down. + */ +static void upap_protrej(ppp_pcb *pcb) { + + if (pcb->upap.us_clientstate == UPAPCS_AUTHREQ) { + ppp_error("PAP authentication failed due to protocol-reject"); + auth_withpeer_fail(pcb, PPP_PAP); + } +#if PPP_SERVER + if (pcb->upap.us_serverstate == UPAPSS_LISTEN) { + ppp_error("PAP authentication of peer failed (protocol-reject)"); + auth_peer_fail(pcb, PPP_PAP); + } +#endif /* PPP_SERVER */ + upap_lowerdown(pcb); +} + + +/* + * upap_input - Input UPAP packet. + */ +static void upap_input(ppp_pcb *pcb, u_char *inpacket, int l) { + u_char *inp; + u_char code, id; + int len; + + /* + * Parse header (code, id and length). + * If packet too short, drop it. + */ + inp = inpacket; + if (l < UPAP_HEADERLEN) { + UPAPDEBUG(("pap_input: rcvd short header.")); + return; + } + GETCHAR(code, inp); + GETCHAR(id, inp); + GETSHORT(len, inp); + if (len < UPAP_HEADERLEN) { + UPAPDEBUG(("pap_input: rcvd illegal length.")); + return; + } + if (len > l) { + UPAPDEBUG(("pap_input: rcvd short packet.")); + return; + } + len -= UPAP_HEADERLEN; + + /* + * Action depends on code. + */ + switch (code) { + case UPAP_AUTHREQ: +#if PPP_SERVER + upap_rauthreq(pcb, inp, id, len); +#endif /* PPP_SERVER */ + break; + + case UPAP_AUTHACK: + upap_rauthack(pcb, inp, id, len); + break; + + case UPAP_AUTHNAK: + upap_rauthnak(pcb, inp, id, len); + break; + + default: /* XXX Need code reject */ + break; + } +} + +#if PPP_SERVER +/* + * upap_rauth - Receive Authenticate. + */ +static void upap_rauthreq(ppp_pcb *pcb, u_char *inp, int id, int len) { + u_char ruserlen, rpasswdlen; + char *ruser; + char *rpasswd; + char rhostname[256]; + int retcode; + const char *msg; + int msglen; + + if (pcb->upap.us_serverstate < UPAPSS_LISTEN) + return; + + /* + * If we receive a duplicate authenticate-request, we are + * supposed to return the same status as for the first request. + */ + if (pcb->upap.us_serverstate == UPAPSS_OPEN) { + upap_sresp(pcb, UPAP_AUTHACK, id, "", 0); /* return auth-ack */ + return; + } + if (pcb->upap.us_serverstate == UPAPSS_BADAUTH) { + upap_sresp(pcb, UPAP_AUTHNAK, id, "", 0); /* return auth-nak */ + return; + } + + /* + * Parse user/passwd. + */ + if (len < 1) { + UPAPDEBUG(("pap_rauth: rcvd short packet.")); + return; + } + GETCHAR(ruserlen, inp); + len -= sizeof (u_char) + ruserlen + sizeof (u_char); + if (len < 0) { + UPAPDEBUG(("pap_rauth: rcvd short packet.")); + return; + } + ruser = (char *) inp; + INCPTR(ruserlen, inp); + GETCHAR(rpasswdlen, inp); + if (len < rpasswdlen) { + UPAPDEBUG(("pap_rauth: rcvd short packet.")); + return; + } + + rpasswd = (char *) inp; + + /* + * Check the username and password given. + */ + retcode = UPAP_AUTHNAK; + if (auth_check_passwd(pcb, ruser, ruserlen, rpasswd, rpasswdlen, &msg, &msglen)) { + retcode = UPAP_AUTHACK; + } + BZERO(rpasswd, rpasswdlen); + +#if 0 /* UNUSED */ + /* + * Check remote number authorization. A plugin may have filled in + * the remote number or added an allowed number, and rather than + * return an authenticate failure, is leaving it for us to verify. + */ + if (retcode == UPAP_AUTHACK) { + if (!auth_number()) { + /* We do not want to leak info about the pap result. */ + retcode = UPAP_AUTHNAK; /* XXX exit value will be "wrong" */ + warn("calling number %q is not authorized", remote_number); + } + } + + msglen = strlen(msg); + if (msglen > 255) + msglen = 255; +#endif /* UNUSED */ + + upap_sresp(pcb, retcode, id, msg, msglen); + + /* Null terminate and clean remote name. */ + ppp_slprintf(rhostname, sizeof(rhostname), "%.*v", ruserlen, ruser); + + if (retcode == UPAP_AUTHACK) { + pcb->upap.us_serverstate = UPAPSS_OPEN; + ppp_notice("PAP peer authentication succeeded for %q", rhostname); + auth_peer_success(pcb, PPP_PAP, 0, ruser, ruserlen); + } else { + pcb->upap.us_serverstate = UPAPSS_BADAUTH; + ppp_warn("PAP peer authentication failed for %q", rhostname); + auth_peer_fail(pcb, PPP_PAP); + } + + if (pcb->settings.pap_req_timeout > 0) + UNTIMEOUT(upap_reqtimeout, pcb); +} +#endif /* PPP_SERVER */ + +/* + * upap_rauthack - Receive Authenticate-Ack. + */ +static void upap_rauthack(ppp_pcb *pcb, u_char *inp, int id, int len) { + u_char msglen; + char *msg; + LWIP_UNUSED_ARG(id); + + if (pcb->upap.us_clientstate != UPAPCS_AUTHREQ) /* XXX */ + return; + + /* + * Parse message. + */ + if (len < 1) { + UPAPDEBUG(("pap_rauthack: ignoring missing msg-length.")); + } else { + GETCHAR(msglen, inp); + if (msglen > 0) { + len -= sizeof (u_char); + if (len < msglen) { + UPAPDEBUG(("pap_rauthack: rcvd short packet.")); + return; + } + msg = (char *) inp; + PRINTMSG(msg, msglen); + } + } + + pcb->upap.us_clientstate = UPAPCS_OPEN; + + auth_withpeer_success(pcb, PPP_PAP, 0); +} + + +/* + * upap_rauthnak - Receive Authenticate-Nak. + */ +static void upap_rauthnak(ppp_pcb *pcb, u_char *inp, int id, int len) { + u_char msglen; + char *msg; + LWIP_UNUSED_ARG(id); + + if (pcb->upap.us_clientstate != UPAPCS_AUTHREQ) /* XXX */ + return; + + /* + * Parse message. + */ + if (len < 1) { + UPAPDEBUG(("pap_rauthnak: ignoring missing msg-length.")); + } else { + GETCHAR(msglen, inp); + if (msglen > 0) { + len -= sizeof (u_char); + if (len < msglen) { + UPAPDEBUG(("pap_rauthnak: rcvd short packet.")); + return; + } + msg = (char *) inp; + PRINTMSG(msg, msglen); + } + } + + pcb->upap.us_clientstate = UPAPCS_BADAUTH; + + ppp_error("PAP authentication failed"); + auth_withpeer_fail(pcb, PPP_PAP); +} + + +/* + * upap_sauthreq - Send an Authenticate-Request. + */ +static void upap_sauthreq(ppp_pcb *pcb) { + struct pbuf *p; + u_char *outp; + int outlen; + + outlen = UPAP_HEADERLEN + 2 * sizeof (u_char) + + pcb->upap.us_userlen + pcb->upap.us_passwdlen; + p = pbuf_alloc(PBUF_RAW, (u16_t)(PPP_HDRLEN +outlen), PPP_CTRL_PBUF_TYPE); + if(NULL == p) + return; + if(p->tot_len != p->len) { + pbuf_free(p); + return; + } + + outp = (u_char*)p->payload; + MAKEHEADER(outp, PPP_PAP); + + PUTCHAR(UPAP_AUTHREQ, outp); + PUTCHAR(++pcb->upap.us_id, outp); + PUTSHORT(outlen, outp); + PUTCHAR(pcb->upap.us_userlen, outp); + MEMCPY(outp, pcb->upap.us_user, pcb->upap.us_userlen); + INCPTR(pcb->upap.us_userlen, outp); + PUTCHAR(pcb->upap.us_passwdlen, outp); + MEMCPY(outp, pcb->upap.us_passwd, pcb->upap.us_passwdlen); + + ppp_write(pcb, p); + + TIMEOUT(upap_timeout, pcb, pcb->settings.pap_timeout_time); + ++pcb->upap.us_transmits; + pcb->upap.us_clientstate = UPAPCS_AUTHREQ; +} + +#if PPP_SERVER +/* + * upap_sresp - Send a response (ack or nak). + */ +static void upap_sresp(ppp_pcb *pcb, u_char code, u_char id, const char *msg, int msglen) { + struct pbuf *p; + u_char *outp; + int outlen; + + outlen = UPAP_HEADERLEN + sizeof (u_char) + msglen; + p = pbuf_alloc(PBUF_RAW, (u16_t)(PPP_HDRLEN +outlen), PPP_CTRL_PBUF_TYPE); + if(NULL == p) + return; + if(p->tot_len != p->len) { + pbuf_free(p); + return; + } + + outp = (u_char*)p->payload; + MAKEHEADER(outp, PPP_PAP); + + PUTCHAR(code, outp); + PUTCHAR(id, outp); + PUTSHORT(outlen, outp); + PUTCHAR(msglen, outp); + MEMCPY(outp, msg, msglen); + + ppp_write(pcb, p); +} +#endif /* PPP_SERVER */ + +#if PRINTPKT_SUPPORT +/* + * upap_printpkt - print the contents of a PAP packet. + */ +static const char* const upap_codenames[] = { + "AuthReq", "AuthAck", "AuthNak" +}; + +static int upap_printpkt(const u_char *p, int plen, void (*printer) (void *, const char *, ...), void *arg) { + int code, id, len; + int mlen, ulen, wlen; + const u_char *user, *pwd, *msg; + const u_char *pstart; + + if (plen < UPAP_HEADERLEN) + return 0; + pstart = p; + GETCHAR(code, p); + GETCHAR(id, p); + GETSHORT(len, p); + if (len < UPAP_HEADERLEN || len > plen) + return 0; + + if (code >= 1 && code <= (int)LWIP_ARRAYSIZE(upap_codenames)) + printer(arg, " %s", upap_codenames[code-1]); + else + printer(arg, " code=0x%x", code); + printer(arg, " id=0x%x", id); + len -= UPAP_HEADERLEN; + switch (code) { + case UPAP_AUTHREQ: + if (len < 1) + break; + ulen = p[0]; + if (len < ulen + 2) + break; + wlen = p[ulen + 1]; + if (len < ulen + wlen + 2) + break; + user = (const u_char *) (p + 1); + pwd = (const u_char *) (p + ulen + 2); + p += ulen + wlen + 2; + len -= ulen + wlen + 2; + printer(arg, " user="); + ppp_print_string(user, ulen, printer, arg); + printer(arg, " password="); +/* FIXME: require ppp_pcb struct as printpkt() argument */ +#if 0 + if (!pcb->settings.hide_password) +#endif + ppp_print_string(pwd, wlen, printer, arg); +#if 0 + else + printer(arg, ""); +#endif + break; + case UPAP_AUTHACK: + case UPAP_AUTHNAK: + if (len < 1) + break; + mlen = p[0]; + if (len < mlen + 1) + break; + msg = (const u_char *) (p + 1); + p += mlen + 1; + len -= mlen + 1; + printer(arg, " "); + ppp_print_string(msg, mlen, printer, arg); + break; + default: + break; + } + + /* print the rest of the bytes in the packet */ + for (; len > 0; --len) { + GETCHAR(code, p); + printer(arg, " %.2x", code); + } + + return p - pstart; +} +#endif /* PRINTPKT_SUPPORT */ + +#endif /* PPP_SUPPORT && PAP_SUPPORT */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/utils.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/utils.c new file mode 100644 index 0000000000000000000000000000000000000000..f1366dae459b6c1e2ae9428785c45d695f7b1e91 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/utils.c @@ -0,0 +1,957 @@ +/* + * utils.c - various utility functions used in pppd. + * + * Copyright (c) 1999-2002 Paul Mackerras. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. The name(s) of the authors of this software must not be used to + * endorse or promote products derived from this software without + * prior written permission. + * + * 3. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by Paul Mackerras + * ". + * + * THE AUTHORS OF THIS SOFTWARE DISCLAIM ALL WARRANTIES WITH REGARD TO + * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY + * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include "netif/ppp/ppp_opts.h" +#if PPP_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +#if 0 /* UNUSED */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifdef SVR4 +#include +#endif +#endif /* UNUSED */ + +#include "netif/ppp/ppp_impl.h" + +#include "netif/ppp/fsm.h" +#include "netif/ppp/lcp.h" + +#if defined(SUNOS4) +extern char *strerror(); +#endif + +static void ppp_logit(int level, const char *fmt, va_list args); +static void ppp_log_write(int level, char *buf); +#if PRINTPKT_SUPPORT +static void ppp_vslp_printer(void *arg, const char *fmt, ...); +static void ppp_format_packet(const u_char *p, int len, + void (*printer) (void *, const char *, ...), void *arg); + +struct buffer_info { + char *ptr; + int len; +}; +#endif /* PRINTPKT_SUPPORT */ + +/* + * ppp_strlcpy - like strcpy/strncpy, doesn't overflow destination buffer, + * always leaves destination null-terminated (for len > 0). + */ +size_t ppp_strlcpy(char *dest, const char *src, size_t len) { + size_t ret = strlen(src); + + if (len != 0) { + if (ret < len) + strcpy(dest, src); + else { + strncpy(dest, src, len - 1); + dest[len-1] = 0; + } + } + return ret; +} + +/* + * ppp_strlcat - like strcat/strncat, doesn't overflow destination buffer, + * always leaves destination null-terminated (for len > 0). + */ +size_t ppp_strlcat(char *dest, const char *src, size_t len) { + size_t dlen = strlen(dest); + + return dlen + ppp_strlcpy(dest + dlen, src, (len > dlen? len - dlen: 0)); +} + + +/* + * ppp_slprintf - format a message into a buffer. Like sprintf except we + * also specify the length of the output buffer, and we handle + * %m (error message), %v (visible string), + * %q (quoted string), %t (current time) and %I (IP address) formats. + * Doesn't do floating-point formats. + * Returns the number of chars put into buf. + */ +int ppp_slprintf(char *buf, int buflen, const char *fmt, ...) { + va_list args; + int n; + + va_start(args, fmt); + n = ppp_vslprintf(buf, buflen, fmt, args); + va_end(args); + return n; +} + +/* + * ppp_vslprintf - like ppp_slprintf, takes a va_list instead of a list of args. + */ +#define OUTCHAR(c) (buflen > 0? (--buflen, *buf++ = (c)): 0) + +int ppp_vslprintf(char *buf, int buflen, const char *fmt, va_list args) { + int c, i, n; + int width, prec, fillch; + int base, len, neg, quoted; + unsigned long val = 0; + const char *f; + char *str, *buf0; + const unsigned char *p; + char num[32]; +#if 0 /* need port */ + time_t t; +#endif /* need port */ + u32_t ip; + static char hexchars[] = "0123456789abcdef"; +#if PRINTPKT_SUPPORT + struct buffer_info bufinfo; +#endif /* PRINTPKT_SUPPORT */ + + buf0 = buf; + --buflen; + while (buflen > 0) { + for (f = fmt; *f != '%' && *f != 0; ++f) + ; + if (f > fmt) { + len = f - fmt; + if (len > buflen) + len = buflen; + memcpy(buf, fmt, len); + buf += len; + buflen -= len; + fmt = f; + } + if (*fmt == 0) + break; + c = *++fmt; + width = 0; + prec = -1; + fillch = ' '; + if (c == '0') { + fillch = '0'; + c = *++fmt; + } + if (c == '*') { + width = va_arg(args, int); + c = *++fmt; + } else { + while (lwip_isdigit(c)) { + width = width * 10 + c - '0'; + c = *++fmt; + } + } + if (c == '.') { + c = *++fmt; + if (c == '*') { + prec = va_arg(args, int); + c = *++fmt; + } else { + prec = 0; + while (lwip_isdigit(c)) { + prec = prec * 10 + c - '0'; + c = *++fmt; + } + } + } + str = 0; + base = 0; + neg = 0; + ++fmt; + switch (c) { + case 'l': + c = *fmt++; + switch (c) { + case 'd': + val = va_arg(args, long); + if ((long)val < 0) { + neg = 1; + val = (unsigned long)-(long)val; + } + base = 10; + break; + case 'u': + val = va_arg(args, unsigned long); + base = 10; + break; + default: + OUTCHAR('%'); + OUTCHAR('l'); + --fmt; /* so %lz outputs %lz etc. */ + continue; + } + break; + case 'd': + i = va_arg(args, int); + if (i < 0) { + neg = 1; + val = -i; + } else + val = i; + base = 10; + break; + case 'u': + val = va_arg(args, unsigned int); + base = 10; + break; + case 'o': + val = va_arg(args, unsigned int); + base = 8; + break; + case 'x': + case 'X': + val = va_arg(args, unsigned int); + base = 16; + break; +#if 0 /* unused (and wrong on LLP64 systems) */ + case 'p': + val = (unsigned long) va_arg(args, void *); + base = 16; + neg = 2; + break; +#endif /* unused (and wrong on LLP64 systems) */ + case 's': + str = va_arg(args, char *); + break; + case 'c': + num[0] = va_arg(args, int); + num[1] = 0; + str = num; + break; +#if 0 /* do we always have strerror() in embedded ? */ + case 'm': + str = strerror(errno); + break; +#endif /* do we always have strerror() in embedded ? */ + case 'I': + ip = va_arg(args, u32_t); + ip = lwip_ntohl(ip); + ppp_slprintf(num, sizeof(num), "%d.%d.%d.%d", (ip >> 24) & 0xff, + (ip >> 16) & 0xff, (ip >> 8) & 0xff, ip & 0xff); + str = num; + break; +#if 0 /* need port */ + case 't': + time(&t); + str = ctime(&t); + str += 4; /* chop off the day name */ + str[15] = 0; /* chop off year and newline */ + break; +#endif /* need port */ + case 'v': /* "visible" string */ + case 'q': /* quoted string */ + quoted = c == 'q'; + p = va_arg(args, unsigned char *); + if (p == NULL) + p = (const unsigned char *)""; + if (fillch == '0' && prec >= 0) { + n = prec; + } else { + n = strlen((const char *)p); + if (prec >= 0 && n > prec) + n = prec; + } + while (n > 0 && buflen > 0) { + c = *p++; + --n; + if (!quoted && c >= 0x80) { + OUTCHAR('M'); + OUTCHAR('-'); + c -= 0x80; + } + if (quoted && (c == '"' || c == '\\')) + OUTCHAR('\\'); + if (c < 0x20 || (0x7f <= c && c < 0xa0)) { + if (quoted) { + OUTCHAR('\\'); + switch (c) { + case '\t': OUTCHAR('t'); break; + case '\n': OUTCHAR('n'); break; + case '\b': OUTCHAR('b'); break; + case '\f': OUTCHAR('f'); break; + default: + OUTCHAR('x'); + OUTCHAR(hexchars[c >> 4]); + OUTCHAR(hexchars[c & 0xf]); + } + } else { + if (c == '\t') + OUTCHAR(c); + else { + OUTCHAR('^'); + OUTCHAR(c ^ 0x40); + } + } + } else + OUTCHAR(c); + } + continue; +#if PRINTPKT_SUPPORT + case 'P': /* print PPP packet */ + bufinfo.ptr = buf; + bufinfo.len = buflen + 1; + p = va_arg(args, unsigned char *); + n = va_arg(args, int); + ppp_format_packet(p, n, ppp_vslp_printer, &bufinfo); + buf = bufinfo.ptr; + buflen = bufinfo.len - 1; + continue; +#endif /* PRINTPKT_SUPPORT */ + case 'B': + p = va_arg(args, unsigned char *); + for (n = prec; n > 0; --n) { + c = *p++; + if (fillch == ' ') + OUTCHAR(' '); + OUTCHAR(hexchars[(c >> 4) & 0xf]); + OUTCHAR(hexchars[c & 0xf]); + } + continue; + default: + *buf++ = '%'; + if (c != '%') + --fmt; /* so %z outputs %z etc. */ + --buflen; + continue; + } + if (base != 0) { + str = num + sizeof(num); + *--str = 0; + while (str > num + neg) { + *--str = hexchars[val % base]; + val = val / base; + if (--prec <= 0 && val == 0) + break; + } + switch (neg) { + case 1: + *--str = '-'; + break; + case 2: + *--str = 'x'; + *--str = '0'; + break; + default: + break; + } + len = num + sizeof(num) - 1 - str; + } else { + len = strlen(str); + if (prec >= 0 && len > prec) + len = prec; + } + if (width > 0) { + if (width > buflen) + width = buflen; + if ((n = width - len) > 0) { + buflen -= n; + for (; n > 0; --n) + *buf++ = fillch; + } + } + if (len > buflen) + len = buflen; + memcpy(buf, str, len); + buf += len; + buflen -= len; + } + *buf = 0; + return buf - buf0; +} + +#if PRINTPKT_SUPPORT +/* + * vslp_printer - used in processing a %P format + */ +static void ppp_vslp_printer(void *arg, const char *fmt, ...) { + int n; + va_list pvar; + struct buffer_info *bi; + + va_start(pvar, fmt); + bi = (struct buffer_info *) arg; + n = ppp_vslprintf(bi->ptr, bi->len, fmt, pvar); + va_end(pvar); + + bi->ptr += n; + bi->len -= n; +} +#endif /* PRINTPKT_SUPPORT */ + +#if 0 /* UNUSED */ +/* + * log_packet - format a packet and log it. + */ + +void +log_packet(p, len, prefix, level) + u_char *p; + int len; + char *prefix; + int level; +{ + init_pr_log(prefix, level); + ppp_format_packet(p, len, pr_log, &level); + end_pr_log(); +} +#endif /* UNUSED */ + +#if PRINTPKT_SUPPORT +/* + * ppp_format_packet - make a readable representation of a packet, + * calling `printer(arg, format, ...)' to output it. + */ +static void ppp_format_packet(const u_char *p, int len, + void (*printer) (void *, const char *, ...), void *arg) { + int i, n; + u_short proto; + const struct protent *protp; + + if (len >= 2) { + GETSHORT(proto, p); + len -= 2; + for (i = 0; (protp = protocols[i]) != NULL; ++i) + if (proto == protp->protocol) + break; + if (protp != NULL) { + printer(arg, "[%s", protp->name); + n = (*protp->printpkt)(p, len, printer, arg); + printer(arg, "]"); + p += n; + len -= n; + } else { + for (i = 0; (protp = protocols[i]) != NULL; ++i) + if (proto == (protp->protocol & ~0x8000)) + break; + if (protp != 0 && protp->data_name != 0) { + printer(arg, "[%s data]", protp->data_name); + if (len > 8) + printer(arg, "%.8B ...", p); + else + printer(arg, "%.*B", len, p); + len = 0; + } else + printer(arg, "[proto=0x%x]", proto); + } + } + + if (len > 32) + printer(arg, "%.32B ...", p); + else + printer(arg, "%.*B", len, p); +} +#endif /* PRINTPKT_SUPPORT */ + +#if 0 /* UNUSED */ +/* + * init_pr_log, end_pr_log - initialize and finish use of pr_log. + */ + +static char line[256]; /* line to be logged accumulated here */ +static char *linep; /* current pointer within line */ +static int llevel; /* level for logging */ + +void +init_pr_log(prefix, level) + const char *prefix; + int level; +{ + linep = line; + if (prefix != NULL) { + ppp_strlcpy(line, prefix, sizeof(line)); + linep = line + strlen(line); + } + llevel = level; +} + +void +end_pr_log() +{ + if (linep != line) { + *linep = 0; + ppp_log_write(llevel, line); + } +} + +/* + * pr_log - printer routine for outputting to log + */ +void +pr_log (void *arg, const char *fmt, ...) +{ + int l, n; + va_list pvar; + char *p, *eol; + char buf[256]; + + va_start(pvar, fmt); + n = ppp_vslprintf(buf, sizeof(buf), fmt, pvar); + va_end(pvar); + + p = buf; + eol = strchr(buf, '\n'); + if (linep != line) { + l = (eol == NULL)? n: eol - buf; + if (linep + l < line + sizeof(line)) { + if (l > 0) { + memcpy(linep, buf, l); + linep += l; + } + if (eol == NULL) + return; + p = eol + 1; + eol = strchr(p, '\n'); + } + *linep = 0; + ppp_log_write(llevel, line); + linep = line; + } + + while (eol != NULL) { + *eol = 0; + ppp_log_write(llevel, p); + p = eol + 1; + eol = strchr(p, '\n'); + } + + /* assumes sizeof(buf) <= sizeof(line) */ + l = buf + n - p; + if (l > 0) { + memcpy(line, p, n); + linep = line + l; + } +} +#endif /* UNUSED */ + +/* + * ppp_print_string - print a readable representation of a string using + * printer. + */ +void ppp_print_string(const u_char *p, int len, void (*printer) (void *, const char *, ...), void *arg) { + int c; + + printer(arg, "\""); + for (; len > 0; --len) { + c = *p++; + if (' ' <= c && c <= '~') { + if (c == '\\' || c == '"') + printer(arg, "\\"); + printer(arg, "%c", c); + } else { + switch (c) { + case '\n': + printer(arg, "\\n"); + break; + case '\r': + printer(arg, "\\r"); + break; + case '\t': + printer(arg, "\\t"); + break; + default: + printer(arg, "\\%.3o", (u8_t)c); + /* no break */ + } + } + } + printer(arg, "\""); +} + +/* + * ppp_logit - does the hard work for fatal et al. + */ +static void ppp_logit(int level, const char *fmt, va_list args) { + char buf[1024]; + + ppp_vslprintf(buf, sizeof(buf), fmt, args); + ppp_log_write(level, buf); +} + +static void ppp_log_write(int level, char *buf) { + LWIP_UNUSED_ARG(level); /* necessary if PPPDEBUG is defined to an empty function */ + LWIP_UNUSED_ARG(buf); + PPPDEBUG(level, ("%s\n", buf) ); +#if 0 + if (log_to_fd >= 0 && (level != LOG_DEBUG || debug)) { + int n = strlen(buf); + + if (n > 0 && buf[n-1] == '\n') + --n; + if (write(log_to_fd, buf, n) != n + || write(log_to_fd, "\n", 1) != 1) + log_to_fd = -1; + } +#endif +} + +/* + * ppp_fatal - log an error message and die horribly. + */ +void ppp_fatal(const char *fmt, ...) { + va_list pvar; + + va_start(pvar, fmt); + ppp_logit(LOG_ERR, fmt, pvar); + va_end(pvar); + + LWIP_ASSERT("ppp_fatal", 0); /* as promised */ +} + +/* + * ppp_error - log an error message. + */ +void ppp_error(const char *fmt, ...) { + va_list pvar; + + va_start(pvar, fmt); + ppp_logit(LOG_ERR, fmt, pvar); + va_end(pvar); +#if 0 /* UNUSED */ + ++error_count; +#endif /* UNUSED */ +} + +/* + * ppp_warn - log a warning message. + */ +void ppp_warn(const char *fmt, ...) { + va_list pvar; + + va_start(pvar, fmt); + ppp_logit(LOG_WARNING, fmt, pvar); + va_end(pvar); +} + +/* + * ppp_notice - log a notice-level message. + */ +void ppp_notice(const char *fmt, ...) { + va_list pvar; + + va_start(pvar, fmt); + ppp_logit(LOG_NOTICE, fmt, pvar); + va_end(pvar); +} + +/* + * ppp_info - log an informational message. + */ +void ppp_info(const char *fmt, ...) { + va_list pvar; + + va_start(pvar, fmt); + ppp_logit(LOG_INFO, fmt, pvar); + va_end(pvar); +} + +/* + * ppp_dbglog - log a debug message. + */ +void ppp_dbglog(const char *fmt, ...) { + va_list pvar; + + va_start(pvar, fmt); + ppp_logit(LOG_DEBUG, fmt, pvar); + va_end(pvar); +} + +#if PRINTPKT_SUPPORT +/* + * ppp_dump_packet - print out a packet in readable form if it is interesting. + * Assumes len >= PPP_HDRLEN. + */ +void ppp_dump_packet(ppp_pcb *pcb, const char *tag, unsigned char *p, int len) { + int proto; + + /* + * don't print data packets, i.e. IPv4, IPv6, VJ, and compressed packets. + */ + proto = (p[0] << 8) + p[1]; + if (proto < 0xC000 && (proto & ~0x8000) == proto) + return; + + /* + * don't print valid LCP echo request/reply packets if the link is up. + */ + if (proto == PPP_LCP && pcb->phase == PPP_PHASE_RUNNING && len >= 2 + HEADERLEN) { + unsigned char *lcp = p + 2; + int l = (lcp[2] << 8) + lcp[3]; + + if ((lcp[0] == ECHOREQ || lcp[0] == ECHOREP) + && l >= HEADERLEN && l <= len - 2) + return; + } + + ppp_dbglog("%s %P", tag, p, len); +} +#endif /* PRINTPKT_SUPPORT */ + +#if 0 /* Unused */ + +/* + * complete_read - read a full `count' bytes from fd, + * unless end-of-file or an error other than EINTR is encountered. + */ +ssize_t +complete_read(int fd, void *buf, size_t count) +{ + size_t done; + ssize_t nb; + char *ptr = buf; + + for (done = 0; done < count; ) { + nb = read(fd, ptr, count - done); + if (nb < 0) { + if (errno == EINTR) + continue; + return -1; + } + if (nb == 0) + break; + done += nb; + ptr += nb; + } + return done; +} + +/* Procedures for locking the serial device using a lock file. */ +#ifndef LOCK_DIR +#ifdef __linux__ +#define LOCK_DIR "/var/lock" +#else +#ifdef SVR4 +#define LOCK_DIR "/var/spool/locks" +#else +#define LOCK_DIR "/var/spool/lock" +#endif +#endif +#endif /* LOCK_DIR */ + +static char lock_file[MAXPATHLEN]; + +/* + * lock - create a lock file for the named device + */ +int +lock(dev) + char *dev; +{ +#ifdef LOCKLIB + int result; + + result = mklock (dev, (void *) 0); + if (result == 0) { + ppp_strlcpy(lock_file, dev, sizeof(lock_file)); + return 0; + } + + if (result > 0) + ppp_notice("Device %s is locked by pid %d", dev, result); + else + ppp_error("Can't create lock file %s", lock_file); + return -1; + +#else /* LOCKLIB */ + + char lock_buffer[12]; + int fd, pid, n; + +#ifdef SVR4 + struct stat sbuf; + + if (stat(dev, &sbuf) < 0) { + ppp_error("Can't get device number for %s: %m", dev); + return -1; + } + if ((sbuf.st_mode & S_IFMT) != S_IFCHR) { + ppp_error("Can't lock %s: not a character device", dev); + return -1; + } + ppp_slprintf(lock_file, sizeof(lock_file), "%s/LK.%03d.%03d.%03d", + LOCK_DIR, major(sbuf.st_dev), + major(sbuf.st_rdev), minor(sbuf.st_rdev)); +#else + char *p; + char lockdev[MAXPATHLEN]; + + if ((p = strstr(dev, "dev/")) != NULL) { + dev = p + 4; + strncpy(lockdev, dev, MAXPATHLEN-1); + lockdev[MAXPATHLEN-1] = 0; + while ((p = strrchr(lockdev, '/')) != NULL) { + *p = '_'; + } + dev = lockdev; + } else + if ((p = strrchr(dev, '/')) != NULL) + dev = p + 1; + + ppp_slprintf(lock_file, sizeof(lock_file), "%s/LCK..%s", LOCK_DIR, dev); +#endif + + while ((fd = open(lock_file, O_EXCL | O_CREAT | O_RDWR, 0644)) < 0) { + if (errno != EEXIST) { + ppp_error("Can't create lock file %s: %m", lock_file); + break; + } + + /* Read the lock file to find out who has the device locked. */ + fd = open(lock_file, O_RDONLY, 0); + if (fd < 0) { + if (errno == ENOENT) /* This is just a timing problem. */ + continue; + ppp_error("Can't open existing lock file %s: %m", lock_file); + break; + } +#ifndef LOCK_BINARY + n = read(fd, lock_buffer, 11); +#else + n = read(fd, &pid, sizeof(pid)); +#endif /* LOCK_BINARY */ + close(fd); + fd = -1; + if (n <= 0) { + ppp_error("Can't read pid from lock file %s", lock_file); + break; + } + + /* See if the process still exists. */ +#ifndef LOCK_BINARY + lock_buffer[n] = 0; + pid = atoi(lock_buffer); +#endif /* LOCK_BINARY */ + if (pid == getpid()) + return 1; /* somebody else locked it for us */ + if (pid == 0 + || (kill(pid, 0) == -1 && errno == ESRCH)) { + if (unlink (lock_file) == 0) { + ppp_notice("Removed stale lock on %s (pid %d)", dev, pid); + continue; + } + ppp_warn("Couldn't remove stale lock on %s", dev); + } else + ppp_notice("Device %s is locked by pid %d", dev, pid); + break; + } + + if (fd < 0) { + lock_file[0] = 0; + return -1; + } + + pid = getpid(); +#ifndef LOCK_BINARY + ppp_slprintf(lock_buffer, sizeof(lock_buffer), "%10d\n", pid); + write (fd, lock_buffer, 11); +#else + write(fd, &pid, sizeof (pid)); +#endif + close(fd); + return 0; + +#endif +} + +/* + * relock - called to update our lockfile when we are about to detach, + * thus changing our pid (we fork, the child carries on, and the parent dies). + * Note that this is called by the parent, with pid equal to the pid + * of the child. This avoids a potential race which would exist if + * we had the child rewrite the lockfile (the parent might die first, + * and another process could think the lock was stale if it checked + * between when the parent died and the child rewrote the lockfile). + */ +int +relock(pid) + int pid; +{ +#ifdef LOCKLIB + /* XXX is there a way to do this? */ + return -1; +#else /* LOCKLIB */ + + int fd; + char lock_buffer[12]; + + if (lock_file[0] == 0) + return -1; + fd = open(lock_file, O_WRONLY, 0); + if (fd < 0) { + ppp_error("Couldn't reopen lock file %s: %m", lock_file); + lock_file[0] = 0; + return -1; + } + +#ifndef LOCK_BINARY + ppp_slprintf(lock_buffer, sizeof(lock_buffer), "%10d\n", pid); + write (fd, lock_buffer, 11); +#else + write(fd, &pid, sizeof(pid)); +#endif /* LOCK_BINARY */ + close(fd); + return 0; + +#endif /* LOCKLIB */ +} + +/* + * unlock - remove our lockfile + */ +void +unlock() +{ + if (lock_file[0]) { +#ifdef LOCKLIB + (void) rmlock(lock_file, (void *) 0); +#else + unlink(lock_file); +#endif + lock_file[0] = 0; + } +} + +#endif /* Unused */ + +#endif /* PPP_SUPPORT */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/vj.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/vj.c new file mode 100644 index 0000000000000000000000000000000000000000..3fecba6995f07c6f09b83453a4cbead649f51c66 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/vj.c @@ -0,0 +1,685 @@ +/* + * Routines to compress and uncompess tcp packets (for transmission + * over low speed serial lines. + * + * Copyright (c) 1989 Regents of the University of California. + * All rights reserved. + * + * Redistribution and use in source and binary forms are permitted + * provided that the above copyright notice and this paragraph are + * duplicated in all such forms and that any documentation, + * advertising materials, and other materials related to such + * distribution and use acknowledge that the software was developed + * by the University of California, Berkeley. The name of the + * University may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. + * + * Van Jacobson (van@helios.ee.lbl.gov), Dec 31, 1989: + * Initial distribution. + * + * Modified June 1993 by Paul Mackerras, paulus@cs.anu.edu.au, + * so that the entire packet being decompressed doesn't have + * to be in contiguous memory (just the compressed header). + * + * Modified March 1998 by Guy Lancaster, glanca@gesn.com, + * for a 16 bit processor. + */ + +#include "netif/ppp/ppp_opts.h" +#if PPP_SUPPORT && VJ_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +#include "netif/ppp/ppp_impl.h" +#include "netif/ppp/pppdebug.h" + +#include "netif/ppp/vj.h" + +#include + +#if LINK_STATS +#define INCR(counter) ++comp->stats.counter +#else +#define INCR(counter) +#endif + +void +vj_compress_init(struct vjcompress *comp) +{ + u8_t i; + struct cstate *tstate = comp->tstate; + +#if MAX_SLOTS == 0 + memset((char *)comp, 0, sizeof(*comp)); +#endif + comp->maxSlotIndex = MAX_SLOTS - 1; + comp->compressSlot = 0; /* Disable slot ID compression by default. */ + for (i = MAX_SLOTS - 1; i > 0; --i) { + tstate[i].cs_id = i; + tstate[i].cs_next = &tstate[i - 1]; + } + tstate[0].cs_next = &tstate[MAX_SLOTS - 1]; + tstate[0].cs_id = 0; + comp->last_cs = &tstate[0]; + comp->last_recv = 255; + comp->last_xmit = 255; + comp->flags = VJF_TOSS; +} + + +/* ENCODE encodes a number that is known to be non-zero. ENCODEZ + * checks for zero (since zero has to be encoded in the long, 3 byte + * form). + */ +#define ENCODE(n) { \ + if ((u16_t)(n) >= 256) { \ + *cp++ = 0; \ + cp[1] = (u8_t)(n); \ + cp[0] = (u8_t)((n) >> 8); \ + cp += 2; \ + } else { \ + *cp++ = (u8_t)(n); \ + } \ +} +#define ENCODEZ(n) { \ + if ((u16_t)(n) >= 256 || (u16_t)(n) == 0) { \ + *cp++ = 0; \ + cp[1] = (u8_t)(n); \ + cp[0] = (u8_t)((n) >> 8); \ + cp += 2; \ + } else { \ + *cp++ = (u8_t)(n); \ + } \ +} + +#define DECODEL(f) { \ + if (*cp == 0) {\ + u32_t tmp_ = lwip_ntohl(f) + ((cp[1] << 8) | cp[2]); \ + (f) = lwip_htonl(tmp_); \ + cp += 3; \ + } else { \ + u32_t tmp_ = lwip_ntohl(f) + (u32_t)*cp++; \ + (f) = lwip_htonl(tmp_); \ + } \ +} + +#define DECODES(f) { \ + if (*cp == 0) {\ + u16_t tmp_ = lwip_ntohs(f) + (((u16_t)cp[1] << 8) | cp[2]); \ + (f) = lwip_htons(tmp_); \ + cp += 3; \ + } else { \ + u16_t tmp_ = lwip_ntohs(f) + (u16_t)*cp++; \ + (f) = lwip_htons(tmp_); \ + } \ +} + +#define DECODEU(f) { \ + if (*cp == 0) {\ + (f) = lwip_htons(((u16_t)cp[1] << 8) | cp[2]); \ + cp += 3; \ + } else { \ + (f) = lwip_htons((u16_t)*cp++); \ + } \ +} + +/* Helper structures for unaligned *u32_t and *u16_t accesses */ +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct vj_u32_t { + PACK_STRUCT_FIELD(u32_t v); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct vj_u16_t { + PACK_STRUCT_FIELD(u16_t v); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +/* + * vj_compress_tcp - Attempt to do Van Jacobson header compression on a + * packet. This assumes that nb and comp are not null and that the first + * buffer of the chain contains a valid IP header. + * Return the VJ type code indicating whether or not the packet was + * compressed. + */ +u8_t +vj_compress_tcp(struct vjcompress *comp, struct pbuf **pb) +{ + struct pbuf *np = *pb; + struct ip_hdr *ip = (struct ip_hdr *)np->payload; + struct cstate *cs = comp->last_cs->cs_next; + u16_t ilen = IPH_HL(ip); + u16_t hlen; + struct tcp_hdr *oth; + struct tcp_hdr *th; + u16_t deltaS, deltaA = 0; + u32_t deltaL; + u32_t changes = 0; + u8_t new_seq[16]; + u8_t *cp = new_seq; + + /* + * Check that the packet is IP proto TCP. + */ + if (IPH_PROTO(ip) != IP_PROTO_TCP) { + return (TYPE_IP); + } + + /* + * Bail if this is an IP fragment or if the TCP packet isn't + * `compressible' (i.e., ACK isn't set or some other control bit is + * set). + */ + if ((IPH_OFFSET(ip) & PP_HTONS(0x3fff)) || np->tot_len < 40) { + return (TYPE_IP); + } + th = (struct tcp_hdr *)&((struct vj_u32_t*)ip)[ilen]; + if ((TCPH_FLAGS(th) & (TCP_SYN|TCP_FIN|TCP_RST|TCP_ACK)) != TCP_ACK) { + return (TYPE_IP); + } + + /* Check that the TCP/IP headers are contained in the first buffer. */ + hlen = ilen + TCPH_HDRLEN(th); + hlen <<= 2; + if (np->len < hlen) { + PPPDEBUG(LOG_INFO, ("vj_compress_tcp: header len %d spans buffers\n", hlen)); + return (TYPE_IP); + } + + /* TCP stack requires that we don't change the packet payload, therefore we copy + * the whole packet before compression. */ + np = pbuf_clone(PBUF_RAW, PBUF_RAM, *pb); + if (!np) { + return (TYPE_IP); + } + + *pb = np; + ip = (struct ip_hdr *)np->payload; + + /* + * Packet is compressible -- we're going to send either a + * COMPRESSED_TCP or UNCOMPRESSED_TCP packet. Either way we need + * to locate (or create) the connection state. Special case the + * most recently used connection since it's most likely to be used + * again & we don't have to do any reordering if it's used. + */ + INCR(vjs_packets); + if (!ip4_addr_cmp(&ip->src, &cs->cs_ip.src) + || !ip4_addr_cmp(&ip->dest, &cs->cs_ip.dest) + || (*(struct vj_u32_t*)th).v != (((struct vj_u32_t*)&cs->cs_ip)[IPH_HL(&cs->cs_ip)]).v) { + /* + * Wasn't the first -- search for it. + * + * States are kept in a circularly linked list with + * last_cs pointing to the end of the list. The + * list is kept in lru order by moving a state to the + * head of the list whenever it is referenced. Since + * the list is short and, empirically, the connection + * we want is almost always near the front, we locate + * states via linear search. If we don't find a state + * for the datagram, the oldest state is (re-)used. + */ + struct cstate *lcs; + struct cstate *lastcs = comp->last_cs; + + do { + lcs = cs; cs = cs->cs_next; + INCR(vjs_searches); + if (ip4_addr_cmp(&ip->src, &cs->cs_ip.src) + && ip4_addr_cmp(&ip->dest, &cs->cs_ip.dest) + && (*(struct vj_u32_t*)th).v == (((struct vj_u32_t*)&cs->cs_ip)[IPH_HL(&cs->cs_ip)]).v) { + goto found; + } + } while (cs != lastcs); + + /* + * Didn't find it -- re-use oldest cstate. Send an + * uncompressed packet that tells the other side what + * connection number we're using for this conversation. + * Note that since the state list is circular, the oldest + * state points to the newest and we only need to set + * last_cs to update the lru linkage. + */ + INCR(vjs_misses); + comp->last_cs = lcs; + goto uncompressed; + + found: + /* + * Found it -- move to the front on the connection list. + */ + if (cs == lastcs) { + comp->last_cs = lcs; + } else { + lcs->cs_next = cs->cs_next; + cs->cs_next = lastcs->cs_next; + lastcs->cs_next = cs; + } + } + + oth = (struct tcp_hdr *)&((struct vj_u32_t*)&cs->cs_ip)[ilen]; + deltaS = ilen; + + /* + * Make sure that only what we expect to change changed. The first + * line of the `if' checks the IP protocol version, header length & + * type of service. The 2nd line checks the "Don't fragment" bit. + * The 3rd line checks the time-to-live and protocol (the protocol + * check is unnecessary but costless). The 4th line checks the TCP + * header length. The 5th line checks IP options, if any. The 6th + * line checks TCP options, if any. If any of these things are + * different between the previous & current datagram, we send the + * current datagram `uncompressed'. + */ + if ((((struct vj_u16_t*)ip)[0]).v != (((struct vj_u16_t*)&cs->cs_ip)[0]).v + || (((struct vj_u16_t*)ip)[3]).v != (((struct vj_u16_t*)&cs->cs_ip)[3]).v + || (((struct vj_u16_t*)ip)[4]).v != (((struct vj_u16_t*)&cs->cs_ip)[4]).v + || TCPH_HDRLEN(th) != TCPH_HDRLEN(oth) + || (deltaS > 5 && BCMP(ip + 1, &cs->cs_ip + 1, (deltaS - 5) << 2)) + || (TCPH_HDRLEN(th) > 5 && BCMP(th + 1, oth + 1, (TCPH_HDRLEN(th) - 5) << 2))) { + goto uncompressed; + } + + /* + * Figure out which of the changing fields changed. The + * receiver expects changes in the order: urgent, window, + * ack, seq (the order minimizes the number of temporaries + * needed in this section of code). + */ + if (TCPH_FLAGS(th) & TCP_URG) { + deltaS = lwip_ntohs(th->urgp); + ENCODEZ(deltaS); + changes |= NEW_U; + } else if (th->urgp != oth->urgp) { + /* argh! URG not set but urp changed -- a sensible + * implementation should never do this but RFC793 + * doesn't prohibit the change so we have to deal + * with it. */ + goto uncompressed; + } + + if ((deltaS = (u16_t)(lwip_ntohs(th->wnd) - lwip_ntohs(oth->wnd))) != 0) { + ENCODE(deltaS); + changes |= NEW_W; + } + + if ((deltaL = lwip_ntohl(th->ackno) - lwip_ntohl(oth->ackno)) != 0) { + if (deltaL > 0xffff) { + goto uncompressed; + } + deltaA = (u16_t)deltaL; + ENCODE(deltaA); + changes |= NEW_A; + } + + if ((deltaL = lwip_ntohl(th->seqno) - lwip_ntohl(oth->seqno)) != 0) { + if (deltaL > 0xffff) { + goto uncompressed; + } + deltaS = (u16_t)deltaL; + ENCODE(deltaS); + changes |= NEW_S; + } + + switch(changes) { + case 0: + /* + * Nothing changed. If this packet contains data and the + * last one didn't, this is probably a data packet following + * an ack (normal on an interactive connection) and we send + * it compressed. Otherwise it's probably a retransmit, + * retransmitted ack or window probe. Send it uncompressed + * in case the other side missed the compressed version. + */ + if (IPH_LEN(ip) != IPH_LEN(&cs->cs_ip) && + lwip_ntohs(IPH_LEN(&cs->cs_ip)) == hlen) { + break; + } + /* no break */ + /* fall through */ + + case SPECIAL_I: + case SPECIAL_D: + /* + * actual changes match one of our special case encodings -- + * send packet uncompressed. + */ + goto uncompressed; + + case NEW_S|NEW_A: + if (deltaS == deltaA && deltaS == lwip_ntohs(IPH_LEN(&cs->cs_ip)) - hlen) { + /* special case for echoed terminal traffic */ + changes = SPECIAL_I; + cp = new_seq; + } + break; + + case NEW_S: + if (deltaS == lwip_ntohs(IPH_LEN(&cs->cs_ip)) - hlen) { + /* special case for data xfer */ + changes = SPECIAL_D; + cp = new_seq; + } + break; + default: + break; + } + + deltaS = (u16_t)(lwip_ntohs(IPH_ID(ip)) - lwip_ntohs(IPH_ID(&cs->cs_ip))); + if (deltaS != 1) { + ENCODEZ(deltaS); + changes |= NEW_I; + } + if (TCPH_FLAGS(th) & TCP_PSH) { + changes |= TCP_PUSH_BIT; + } + /* + * Grab the cksum before we overwrite it below. Then update our + * state with this packet's header. + */ + deltaA = lwip_ntohs(th->chksum); + MEMCPY(&cs->cs_ip, ip, hlen); + + /* + * We want to use the original packet as our compressed packet. + * (cp - new_seq) is the number of bytes we need for compressed + * sequence numbers. In addition we need one byte for the change + * mask, one for the connection id and two for the tcp checksum. + * So, (cp - new_seq) + 4 bytes of header are needed. hlen is how + * many bytes of the original packet to toss so subtract the two to + * get the new packet size. + */ + deltaS = (u16_t)(cp - new_seq); + if (!comp->compressSlot || comp->last_xmit != cs->cs_id) { + comp->last_xmit = cs->cs_id; + hlen -= deltaS + 4; + if (pbuf_remove_header(np, hlen)){ + /* Can we cope with this failing? Just assert for now */ + LWIP_ASSERT("pbuf_remove_header failed\n", 0); + } + cp = (u8_t*)np->payload; + *cp++ = (u8_t)(changes | NEW_C); + *cp++ = cs->cs_id; + } else { + hlen -= deltaS + 3; + if (pbuf_remove_header(np, hlen)) { + /* Can we cope with this failing? Just assert for now */ + LWIP_ASSERT("pbuf_remove_header failed\n", 0); + } + cp = (u8_t*)np->payload; + *cp++ = (u8_t)changes; + } + *cp++ = (u8_t)(deltaA >> 8); + *cp++ = (u8_t)deltaA; + MEMCPY(cp, new_seq, deltaS); + INCR(vjs_compressed); + return (TYPE_COMPRESSED_TCP); + + /* + * Update connection state cs & send uncompressed packet (that is, + * a regular ip/tcp packet but with the 'conversation id' we hope + * to use on future compressed packets in the protocol field). + */ +uncompressed: + MEMCPY(&cs->cs_ip, ip, hlen); + IPH_PROTO_SET(ip, cs->cs_id); + comp->last_xmit = cs->cs_id; + return (TYPE_UNCOMPRESSED_TCP); +} + +/* + * Called when we may have missed a packet. + */ +void +vj_uncompress_err(struct vjcompress *comp) +{ + comp->flags |= VJF_TOSS; + INCR(vjs_errorin); +} + +/* + * "Uncompress" a packet of type TYPE_UNCOMPRESSED_TCP. + * Return 0 on success, -1 on failure. + */ +int +vj_uncompress_uncomp(struct pbuf *nb, struct vjcompress *comp) +{ + u32_t hlen; + struct cstate *cs; + struct ip_hdr *ip; + + ip = (struct ip_hdr *)nb->payload; + hlen = IPH_HL(ip) << 2; + if (IPH_PROTO(ip) >= MAX_SLOTS + || hlen + sizeof(struct tcp_hdr) > nb->len + || (hlen += TCPH_HDRLEN_BYTES((struct tcp_hdr *)&((char *)ip)[hlen])) + > nb->len + || hlen > MAX_HDR) { + PPPDEBUG(LOG_INFO, ("vj_uncompress_uncomp: bad cid=%d, hlen=%d buflen=%d\n", + IPH_PROTO(ip), hlen, nb->len)); + vj_uncompress_err(comp); + return -1; + } + cs = &comp->rstate[comp->last_recv = IPH_PROTO(ip)]; + comp->flags &=~ VJF_TOSS; + IPH_PROTO_SET(ip, IP_PROTO_TCP); + /* copy from/to bigger buffers checked above instead of cs->cs_ip and ip + just to help static code analysis to see this is correct ;-) */ + MEMCPY(&cs->cs_hdr, nb->payload, hlen); + cs->cs_hlen = (u16_t)hlen; + INCR(vjs_uncompressedin); + return 0; +} + +/* + * Uncompress a packet of type TYPE_COMPRESSED_TCP. + * The packet is composed of a buffer chain and the first buffer + * must contain an accurate chain length. + * The first buffer must include the entire compressed TCP/IP header. + * This procedure replaces the compressed header with the uncompressed + * header and returns the length of the VJ header. + */ +int +vj_uncompress_tcp(struct pbuf **nb, struct vjcompress *comp) +{ + u8_t *cp; + struct tcp_hdr *th; + struct cstate *cs; + struct vj_u16_t *bp; + struct pbuf *n0 = *nb; + u32_t tmp; + u32_t vjlen, hlen, changes; + + INCR(vjs_compressedin); + cp = (u8_t*)n0->payload; + changes = *cp++; + if (changes & NEW_C) { + /* + * Make sure the state index is in range, then grab the state. + * If we have a good state index, clear the 'discard' flag. + */ + if (*cp >= MAX_SLOTS) { + PPPDEBUG(LOG_INFO, ("vj_uncompress_tcp: bad cid=%d\n", *cp)); + goto bad; + } + + comp->flags &=~ VJF_TOSS; + comp->last_recv = *cp++; + } else { + /* + * this packet has an implicit state index. If we've + * had a line error since the last time we got an + * explicit state index, we have to toss the packet. + */ + if (comp->flags & VJF_TOSS) { + PPPDEBUG(LOG_INFO, ("vj_uncompress_tcp: tossing\n")); + INCR(vjs_tossed); + return (-1); + } + } + cs = &comp->rstate[comp->last_recv]; + hlen = IPH_HL(&cs->cs_ip) << 2; + th = (struct tcp_hdr *)&((u8_t*)&cs->cs_ip)[hlen]; + th->chksum = lwip_htons((*cp << 8) | cp[1]); + cp += 2; + if (changes & TCP_PUSH_BIT) { + TCPH_SET_FLAG(th, TCP_PSH); + } else { + TCPH_UNSET_FLAG(th, TCP_PSH); + } + + switch (changes & SPECIALS_MASK) { + case SPECIAL_I: + { + u32_t i = lwip_ntohs(IPH_LEN(&cs->cs_ip)) - cs->cs_hlen; + /* some compilers can't nest inline assembler.. */ + tmp = lwip_ntohl(th->ackno) + i; + th->ackno = lwip_htonl(tmp); + tmp = lwip_ntohl(th->seqno) + i; + th->seqno = lwip_htonl(tmp); + } + break; + + case SPECIAL_D: + /* some compilers can't nest inline assembler.. */ + tmp = lwip_ntohl(th->seqno) + lwip_ntohs(IPH_LEN(&cs->cs_ip)) - cs->cs_hlen; + th->seqno = lwip_htonl(tmp); + break; + + default: + if (changes & NEW_U) { + TCPH_SET_FLAG(th, TCP_URG); + DECODEU(th->urgp); + } else { + TCPH_UNSET_FLAG(th, TCP_URG); + } + if (changes & NEW_W) { + DECODES(th->wnd); + } + if (changes & NEW_A) { + DECODEL(th->ackno); + } + if (changes & NEW_S) { + DECODEL(th->seqno); + } + break; + } + if (changes & NEW_I) { + DECODES(cs->cs_ip._id); + } else { + IPH_ID_SET(&cs->cs_ip, lwip_ntohs(IPH_ID(&cs->cs_ip)) + 1); + IPH_ID_SET(&cs->cs_ip, lwip_htons(IPH_ID(&cs->cs_ip))); + } + + /* + * At this point, cp points to the first byte of data in the + * packet. Fill in the IP total length and update the IP + * header checksum. + */ + vjlen = (u16_t)(cp - (u8_t*)n0->payload); + if (n0->len < vjlen) { + /* + * We must have dropped some characters (crc should detect + * this but the old slip framing won't) + */ + PPPDEBUG(LOG_INFO, ("vj_uncompress_tcp: head buffer %d too short %d\n", + n0->len, vjlen)); + goto bad; + } + +#if BYTE_ORDER == LITTLE_ENDIAN + tmp = n0->tot_len - vjlen + cs->cs_hlen; + IPH_LEN_SET(&cs->cs_ip, lwip_htons((u16_t)tmp)); +#else + IPH_LEN_SET(&cs->cs_ip, lwip_htons(n0->tot_len - vjlen + cs->cs_hlen)); +#endif + + /* recompute the ip header checksum */ + bp = (struct vj_u16_t*) &cs->cs_ip; + IPH_CHKSUM_SET(&cs->cs_ip, 0); + for (tmp = 0; hlen > 0; hlen -= 2) { + tmp += (*bp++).v; + } + tmp = (tmp & 0xffff) + (tmp >> 16); + tmp = (tmp & 0xffff) + (tmp >> 16); + IPH_CHKSUM_SET(&cs->cs_ip, (u16_t)(~tmp)); + + /* Remove the compressed header and prepend the uncompressed header. */ + if (pbuf_remove_header(n0, vjlen)) { + /* Can we cope with this failing? Just assert for now */ + LWIP_ASSERT("pbuf_remove_header failed\n", 0); + goto bad; + } + + if(LWIP_MEM_ALIGN(n0->payload) != n0->payload) { + struct pbuf *np; + +#if IP_FORWARD + /* If IP forwarding is enabled we are using a PBUF_LINK packet type so + * the packet is being allocated with enough header space to be + * forwarded (to Ethernet for example). + */ + np = pbuf_alloc(PBUF_LINK, n0->len + cs->cs_hlen, PBUF_POOL); +#else /* IP_FORWARD */ + np = pbuf_alloc(PBUF_RAW, n0->len + cs->cs_hlen, PBUF_POOL); +#endif /* IP_FORWARD */ + if(!np) { + PPPDEBUG(LOG_WARNING, ("vj_uncompress_tcp: realign failed\n")); + goto bad; + } + + if (pbuf_remove_header(np, cs->cs_hlen)) { + /* Can we cope with this failing? Just assert for now */ + LWIP_ASSERT("pbuf_remove_header failed\n", 0); + goto bad; + } + + pbuf_take(np, n0->payload, n0->len); + + if(n0->next) { + pbuf_chain(np, n0->next); + pbuf_dechain(n0); + } + pbuf_free(n0); + n0 = np; + } + + if (pbuf_add_header(n0, cs->cs_hlen)) { + struct pbuf *np; + + LWIP_ASSERT("vj_uncompress_tcp: cs->cs_hlen <= PBUF_POOL_BUFSIZE", cs->cs_hlen <= PBUF_POOL_BUFSIZE); + np = pbuf_alloc(PBUF_RAW, cs->cs_hlen, PBUF_POOL); + if(!np) { + PPPDEBUG(LOG_WARNING, ("vj_uncompress_tcp: prepend failed\n")); + goto bad; + } + pbuf_cat(np, n0); + n0 = np; + } + LWIP_ASSERT("n0->len >= cs->cs_hlen", n0->len >= cs->cs_hlen); + MEMCPY(n0->payload, &cs->cs_ip, cs->cs_hlen); + + *nb = n0; + + return vjlen; + +bad: + vj_uncompress_err(comp); + return (-1); +} + +#endif /* PPP_SUPPORT && VJ_SUPPORT */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/slipif.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/slipif.c new file mode 100644 index 0000000000000000000000000000000000000000..9b175dc3e44c90e152c214a5dbcc337416125a49 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/slipif.c @@ -0,0 +1,558 @@ +/** + * @file + * SLIP Interface + * + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is built upon the file: src/arch/rtxc/netif/sioslip.c + * + * Author: Magnus Ivarsson + * Simon Goldschmidt + */ + + +/** + * @defgroup slipif SLIP + * @ingroup netifs + * + * This is an arch independent SLIP netif. The specific serial hooks must be + * provided by another file. They are sio_open, sio_read/sio_tryread and sio_send + * + * Usage: This netif can be used in three ways:\n + * 1) For NO_SYS==0, an RX thread can be used which blocks on sio_read() + * until data is received.\n + * 2) In your main loop, call slipif_poll() to check for new RX bytes, + * completed packets are fed into netif->input().\n + * 3) Call slipif_received_byte[s]() from your serial RX ISR and + * slipif_process_rxqueue() from your main loop. ISR level decodes + * packets and puts completed packets on a queue which is fed into + * the stack from the main loop (needs SYS_LIGHTWEIGHT_PROT for + * pbuf_alloc to work on ISR level!). + * + */ + +#include "netif/slipif.h" +#include "lwip/opt.h" + +#include "lwip/def.h" +#include "lwip/pbuf.h" +#include "lwip/stats.h" +#include "lwip/snmp.h" +#include "lwip/sys.h" +#include "lwip/sio.h" + +#define SLIP_END 0xC0 /* 0300: start and end of every packet */ +#define SLIP_ESC 0xDB /* 0333: escape start (one byte escaped data follows) */ +#define SLIP_ESC_END 0xDC /* 0334: following escape: original byte is 0xC0 (END) */ +#define SLIP_ESC_ESC 0xDD /* 0335: following escape: original byte is 0xDB (ESC) */ + +/** Maximum packet size that is received by this netif */ +#ifndef SLIP_MAX_SIZE +#define SLIP_MAX_SIZE 1500 +#endif + +/** Define this to the interface speed for SNMP + * (sio_fd is the sio_fd_t returned by sio_open). + * The default value of zero means 'unknown'. + */ +#ifndef SLIP_SIO_SPEED +#define SLIP_SIO_SPEED(sio_fd) 0 +#endif + +enum slipif_recv_state { + SLIP_RECV_NORMAL, + SLIP_RECV_ESCAPE +}; + +struct slipif_priv { + sio_fd_t sd; + /* q is the whole pbuf chain for a packet, p is the current pbuf in the chain */ + struct pbuf *p, *q; + u8_t state; + u16_t i, recved; +#if SLIP_RX_FROM_ISR + struct pbuf *rxpackets; +#endif +}; + +/** + * Send a pbuf doing the necessary SLIP encapsulation + * + * Uses the serial layer's sio_send() + * + * @param netif the lwip network interface structure for this slipif + * @param p the pbuf chain packet to send + * @return always returns ERR_OK since the serial layer does not provide return values + */ +static err_t +slipif_output(struct netif *netif, struct pbuf *p) +{ + struct slipif_priv *priv; + struct pbuf *q; + u16_t i; + u8_t c; + + LWIP_ASSERT("netif != NULL", (netif != NULL)); + LWIP_ASSERT("netif->state != NULL", (netif->state != NULL)); + LWIP_ASSERT("p != NULL", (p != NULL)); + + LWIP_DEBUGF(SLIP_DEBUG, ("slipif_output: sending %"U16_F" bytes\n", p->tot_len)); + priv = (struct slipif_priv *)netif->state; + + /* Send pbuf out on the serial I/O device. */ + /* Start with packet delimiter. */ + sio_send(SLIP_END, priv->sd); + + for (q = p; q != NULL; q = q->next) { + for (i = 0; i < q->len; i++) { + c = ((u8_t *)q->payload)[i]; + switch (c) { + case SLIP_END: + /* need to escape this byte (0xC0 -> 0xDB, 0xDC) */ + sio_send(SLIP_ESC, priv->sd); + sio_send(SLIP_ESC_END, priv->sd); + break; + case SLIP_ESC: + /* need to escape this byte (0xDB -> 0xDB, 0xDD) */ + sio_send(SLIP_ESC, priv->sd); + sio_send(SLIP_ESC_ESC, priv->sd); + break; + default: + /* normal byte - no need for escaping */ + sio_send(c, priv->sd); + break; + } + } + } + /* End with packet delimiter. */ + sio_send(SLIP_END, priv->sd); + return ERR_OK; +} + +#if LWIP_IPV4 +/** + * Send a pbuf doing the necessary SLIP encapsulation + * + * Uses the serial layer's sio_send() + * + * @param netif the lwip network interface structure for this slipif + * @param p the pbuf chain packet to send + * @param ipaddr the ip address to send the packet to (not used for slipif) + * @return always returns ERR_OK since the serial layer does not provide return values + */ +static err_t +slipif_output_v4(struct netif *netif, struct pbuf *p, const ip4_addr_t *ipaddr) +{ + LWIP_UNUSED_ARG(ipaddr); + return slipif_output(netif, p); +} +#endif /* LWIP_IPV4 */ + +#if LWIP_IPV6 +/** + * Send a pbuf doing the necessary SLIP encapsulation + * + * Uses the serial layer's sio_send() + * + * @param netif the lwip network interface structure for this slipif + * @param p the pbuf chain packet to send + * @param ipaddr the ip address to send the packet to (not used for slipif) + * @return always returns ERR_OK since the serial layer does not provide return values + */ +static err_t +slipif_output_v6(struct netif *netif, struct pbuf *p, const ip6_addr_t *ipaddr) +{ + LWIP_UNUSED_ARG(ipaddr); + return slipif_output(netif, p); +} +#endif /* LWIP_IPV6 */ + +/** + * Handle the incoming SLIP stream character by character + * + * @param netif the lwip network interface structure for this slipif + * @param c received character (multiple calls to this function will + * return a complete packet, NULL is returned before - used for polling) + * @return The IP packet when SLIP_END is received + */ +static struct pbuf * +slipif_rxbyte(struct netif *netif, u8_t c) +{ + struct slipif_priv *priv; + struct pbuf *t; + + LWIP_ASSERT("netif != NULL", (netif != NULL)); + LWIP_ASSERT("netif->state != NULL", (netif->state != NULL)); + + priv = (struct slipif_priv *)netif->state; + + switch (priv->state) { + case SLIP_RECV_NORMAL: + switch (c) { + case SLIP_END: + if (priv->recved > 0) { + /* Received whole packet. */ + /* Trim the pbuf to the size of the received packet. */ + pbuf_realloc(priv->q, priv->recved); + + LINK_STATS_INC(link.recv); + + LWIP_DEBUGF(SLIP_DEBUG, ("slipif: Got packet (%"U16_F" bytes)\n", priv->recved)); + t = priv->q; + priv->p = priv->q = NULL; + priv->i = priv->recved = 0; + return t; + } + return NULL; + case SLIP_ESC: + priv->state = SLIP_RECV_ESCAPE; + return NULL; + default: + break; + } /* end switch (c) */ + break; + case SLIP_RECV_ESCAPE: + /* un-escape END or ESC bytes, leave other bytes + (although that would be a protocol error) */ + switch (c) { + case SLIP_ESC_END: + c = SLIP_END; + break; + case SLIP_ESC_ESC: + c = SLIP_ESC; + break; + default: + break; + } + priv->state = SLIP_RECV_NORMAL; + break; + default: + break; + } /* end switch (priv->state) */ + + /* byte received, packet not yet completely received */ + if (priv->p == NULL) { + /* allocate a new pbuf */ + LWIP_DEBUGF(SLIP_DEBUG, ("slipif_input: alloc\n")); + priv->p = pbuf_alloc(PBUF_LINK, (PBUF_POOL_BUFSIZE - PBUF_LINK_HLEN - PBUF_LINK_ENCAPSULATION_HLEN), PBUF_POOL); + + if (priv->p == NULL) { + LINK_STATS_INC(link.drop); + LWIP_DEBUGF(SLIP_DEBUG, ("slipif_input: no new pbuf! (DROP)\n")); + /* don't process any further since we got no pbuf to receive to */ + return NULL; + } + + if (priv->q != NULL) { + /* 'chain' the pbuf to the existing chain */ + pbuf_cat(priv->q, priv->p); + } else { + /* p is the first pbuf in the chain */ + priv->q = priv->p; + } + } + + /* this automatically drops bytes if > SLIP_MAX_SIZE */ + if ((priv->p != NULL) && (priv->recved <= SLIP_MAX_SIZE)) { + ((u8_t *)priv->p->payload)[priv->i] = c; + priv->recved++; + priv->i++; + if (priv->i >= priv->p->len) { + /* on to the next pbuf */ + priv->i = 0; + if (priv->p->next != NULL && priv->p->next->len > 0) { + /* p is a chain, on to the next in the chain */ + priv->p = priv->p->next; + } else { + /* p is a single pbuf, set it to NULL so next time a new + * pbuf is allocated */ + priv->p = NULL; + } + } + } + return NULL; +} + +/** Like slipif_rxbyte, but passes completed packets to netif->input + * + * @param netif The lwip network interface structure for this slipif + * @param c received character + */ +static void +slipif_rxbyte_input(struct netif *netif, u8_t c) +{ + struct pbuf *p; + p = slipif_rxbyte(netif, c); + if (p != NULL) { + if (netif->input(p, netif) != ERR_OK) { + pbuf_free(p); + } + } +} + +#if SLIP_USE_RX_THREAD +/** + * The SLIP input thread. + * + * Feed the IP layer with incoming packets + * + * @param nf the lwip network interface structure for this slipif + */ +static void +slipif_loop_thread(void *nf) +{ + u8_t c; + struct netif *netif = (struct netif *)nf; + struct slipif_priv *priv = (struct slipif_priv *)netif->state; + + while (1) { + if (sio_read(priv->sd, &c, 1) > 0) { + slipif_rxbyte_input(netif, c); + } + } +} +#endif /* SLIP_USE_RX_THREAD */ + +/** + * @ingroup slipif + * SLIP netif initialization + * + * Call the arch specific sio_open and remember + * the opened device in the state field of the netif. + * + * @param netif the lwip network interface structure for this slipif + * @return ERR_OK if serial line could be opened, + * ERR_MEM if no memory could be allocated, + * ERR_IF is serial line couldn't be opened + * + * @note If netif->state is interpreted as an u8_t serial port number. + * + */ +err_t +slipif_init(struct netif *netif) +{ + struct slipif_priv *priv; + u8_t sio_num; + + LWIP_ASSERT("slipif needs an input callback", netif->input != NULL); + + /* netif->state contains serial port number */ + sio_num = LWIP_PTR_NUMERIC_CAST(u8_t, netif->state); + + LWIP_DEBUGF(SLIP_DEBUG, ("slipif_init: netif->num=%"U16_F"\n", (u16_t)sio_num)); + + /* Allocate private data */ + priv = (struct slipif_priv *)mem_malloc(sizeof(struct slipif_priv)); + if (!priv) { + return ERR_MEM; + } + + netif->name[0] = 's'; + netif->name[1] = 'l'; +#if LWIP_IPV4 + netif->output = slipif_output_v4; +#endif /* LWIP_IPV4 */ +#if LWIP_IPV6 + netif->output_ip6 = slipif_output_v6; +#endif /* LWIP_IPV6 */ + netif->mtu = SLIP_MAX_SIZE; + + /* Try to open the serial port. */ + priv->sd = sio_open(sio_num); + if (!priv->sd) { + /* Opening the serial port failed. */ + mem_free(priv); + return ERR_IF; + } + + /* Initialize private data */ + priv->p = NULL; + priv->q = NULL; + priv->state = SLIP_RECV_NORMAL; + priv->i = 0; + priv->recved = 0; +#if SLIP_RX_FROM_ISR + priv->rxpackets = NULL; +#endif + + netif->state = priv; + + /* initialize the snmp variables and counters inside the struct netif */ + MIB2_INIT_NETIF(netif, snmp_ifType_slip, SLIP_SIO_SPEED(priv->sd)); + +#if SLIP_USE_RX_THREAD + /* Create a thread to poll the serial line. */ + sys_thread_new(SLIPIF_THREAD_NAME, slipif_loop_thread, netif, + SLIPIF_THREAD_STACKSIZE, SLIPIF_THREAD_PRIO); +#endif /* SLIP_USE_RX_THREAD */ + return ERR_OK; +} + +/** + * @ingroup slipif + * Polls the serial device and feeds the IP layer with incoming packets. + * + * @param netif The lwip network interface structure for this slipif + */ +void +slipif_poll(struct netif *netif) +{ + u8_t c; + struct slipif_priv *priv; + + LWIP_ASSERT("netif != NULL", (netif != NULL)); + LWIP_ASSERT("netif->state != NULL", (netif->state != NULL)); + + priv = (struct slipif_priv *)netif->state; + + while (sio_tryread(priv->sd, &c, 1) > 0) { + slipif_rxbyte_input(netif, c); + } +} + +#if SLIP_RX_FROM_ISR +/** + * @ingroup slipif + * Feeds the IP layer with incoming packets that were receive + * + * @param netif The lwip network interface structure for this slipif + */ +void +slipif_process_rxqueue(struct netif *netif) +{ + struct slipif_priv *priv; + SYS_ARCH_DECL_PROTECT(old_level); + + LWIP_ASSERT("netif != NULL", (netif != NULL)); + LWIP_ASSERT("netif->state != NULL", (netif->state != NULL)); + + priv = (struct slipif_priv *)netif->state; + + SYS_ARCH_PROTECT(old_level); + while (priv->rxpackets != NULL) { + struct pbuf *p = priv->rxpackets; +#if SLIP_RX_QUEUE + /* dequeue packet */ + struct pbuf *q = p; + while ((q->len != q->tot_len) && (q->next != NULL)) { + q = q->next; + } + priv->rxpackets = q->next; + q->next = NULL; +#else /* SLIP_RX_QUEUE */ + priv->rxpackets = NULL; +#endif /* SLIP_RX_QUEUE */ + SYS_ARCH_UNPROTECT(old_level); + if (netif->input(p, netif) != ERR_OK) { + pbuf_free(p); + } + SYS_ARCH_PROTECT(old_level); + } + SYS_ARCH_UNPROTECT(old_level); +} + +/** Like slipif_rxbyte, but queues completed packets. + * + * @param netif The lwip network interface structure for this slipif + * @param data Received serial byte + */ +static void +slipif_rxbyte_enqueue(struct netif *netif, u8_t data) +{ + struct pbuf *p; + struct slipif_priv *priv = (struct slipif_priv *)netif->state; + SYS_ARCH_DECL_PROTECT(old_level); + + p = slipif_rxbyte(netif, data); + if (p != NULL) { + SYS_ARCH_PROTECT(old_level); + if (priv->rxpackets != NULL) { +#if SLIP_RX_QUEUE + /* queue multiple pbufs */ + struct pbuf *q = p; + while (q->next != NULL) { + q = q->next; + } + q->next = p; + } else { +#else /* SLIP_RX_QUEUE */ + pbuf_free(priv->rxpackets); + } + { +#endif /* SLIP_RX_QUEUE */ + priv->rxpackets = p; + } + SYS_ARCH_UNPROTECT(old_level); + } +} + +/** + * @ingroup slipif + * Process a received byte, completed packets are put on a queue that is + * fed into IP through slipif_process_rxqueue(). + * + * This function can be called from ISR if SYS_LIGHTWEIGHT_PROT is enabled. + * + * @param netif The lwip network interface structure for this slipif + * @param data received character + */ +void +slipif_received_byte(struct netif *netif, u8_t data) +{ + LWIP_ASSERT("netif != NULL", (netif != NULL)); + LWIP_ASSERT("netif->state != NULL", (netif->state != NULL)); + slipif_rxbyte_enqueue(netif, data); +} + +/** + * @ingroup slipif + * Process multiple received byte, completed packets are put on a queue that is + * fed into IP through slipif_process_rxqueue(). + * + * This function can be called from ISR if SYS_LIGHTWEIGHT_PROT is enabled. + * + * @param netif The lwip network interface structure for this slipif + * @param data received character + * @param len Number of received characters + */ +void +slipif_received_bytes(struct netif *netif, u8_t *data, u8_t len) +{ + u8_t i; + u8_t *rxdata = data; + LWIP_ASSERT("netif != NULL", (netif != NULL)); + LWIP_ASSERT("netif->state != NULL", (netif->state != NULL)); + + for (i = 0; i < len; i++, rxdata++) { + slipif_rxbyte_enqueue(netif, *rxdata); + } +} +#endif /* SLIP_RX_FROM_ISR */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/zepif.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/zepif.c new file mode 100644 index 0000000000000000000000000000000000000000..b4033030bf98361b995c0b3dd40309926c0986e8 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/zepif.c @@ -0,0 +1,300 @@ +/** + * @file + * + * @defgroup zepif ZEP - ZigBee Encapsulation Protocol + * @ingroup netifs + * A netif implementing the ZigBee Encapsulation Protocol (ZEP). + * This is used to tunnel 6LowPAN over UDP. + * + * Usage (there must be a default netif before!): + * @code{.c} + * netif_add(&zep_netif, NULL, NULL, NULL, NULL, zepif_init, tcpip_6lowpan_input); + * netif_create_ip6_linklocal_address(&zep_netif, 1); + * netif_set_up(&zep_netif); + * netif_set_link_up(&zep_netif); + * @endcode + */ + +/* + * Copyright (c) 2018 Simon Goldschmidt + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Simon Goldschmidt + * + */ + +#include "netif/zepif.h" + +#if LWIP_IPV6 && LWIP_UDP + +#include "netif/lowpan6.h" +#include "lwip/udp.h" +#include "lwip/timeouts.h" +#include + +/** Define this to 1 to loop back TX packets for testing */ +#ifndef ZEPIF_LOOPBACK +#define ZEPIF_LOOPBACK 0 +#endif + +#define ZEP_MAX_DATA_LEN 127 + +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct zep_hdr { + PACK_STRUCT_FLD_8(u8_t prot_id[2]); + PACK_STRUCT_FLD_8(u8_t prot_version); + PACK_STRUCT_FLD_8(u8_t type); + PACK_STRUCT_FLD_8(u8_t channel_id); + PACK_STRUCT_FIELD(u16_t device_id); + PACK_STRUCT_FLD_8(u8_t crc_mode); + PACK_STRUCT_FLD_8(u8_t unknown_1); + PACK_STRUCT_FIELD(u32_t timestamp[2]); + PACK_STRUCT_FIELD(u32_t seq_num); + PACK_STRUCT_FLD_8(u8_t unknown_2[10]); + PACK_STRUCT_FLD_8(u8_t len); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +struct zepif_state { + struct zepif_init init; + struct udp_pcb *pcb; + u32_t seqno; +}; + +static u8_t zep_lowpan_timer_running; + +/* Helper function that calls the 6LoWPAN timer and reschedules itself */ +static void +zep_lowpan_timer(void *arg) +{ + lowpan6_tmr(); + if (zep_lowpan_timer_running) { + sys_timeout(LOWPAN6_TMR_INTERVAL, zep_lowpan_timer, arg); + } +} + +/* Pass received pbufs into 6LowPAN netif */ +static void +zepif_udp_recv(void *arg, struct udp_pcb *pcb, struct pbuf *p, + const ip_addr_t *addr, u16_t port) +{ + err_t err; + struct netif *netif_lowpan6 = (struct netif *)arg; + struct zep_hdr *zep; + + LWIP_ASSERT("arg != NULL", arg != NULL); + LWIP_ASSERT("pcb != NULL", pcb != NULL); + LWIP_UNUSED_ARG(pcb); /* for LWIP_NOASSERT */ + LWIP_UNUSED_ARG(addr); + LWIP_UNUSED_ARG(port); + if (p == NULL) { + return; + } + + /* Parse and hide the ZEP header */ + if (p->len < sizeof(struct zep_hdr)) { + /* need the zep_hdr in one piece */ + goto err_return; + } + zep = (struct zep_hdr *)p->payload; + if (zep->prot_id[0] != 'E') { + goto err_return; + } + if (zep->prot_id[1] != 'X') { + goto err_return; + } + if (zep->prot_version != 2) { + /* we only support this version for now */ + goto err_return; + } + if (zep->type != 1) { + goto err_return; + } + if (zep->crc_mode != 1) { + goto err_return; + } + if (zep->len != p->tot_len - sizeof(struct zep_hdr)) { + goto err_return; + } + /* everything seems to be OK, hide the ZEP header */ + if (pbuf_remove_header(p, sizeof(struct zep_hdr))) { + goto err_return; + } + /* TODO Check CRC? */ + /* remove CRC trailer */ + pbuf_realloc(p, p->tot_len - 2); + + /* Call into 6LoWPAN code. */ + err = netif_lowpan6->input(p, netif_lowpan6); + if (err == ERR_OK) { + return; + } +err_return: + pbuf_free(p); +} + +/* Send 6LoWPAN TX packets as UDP broadcast */ +static err_t +zepif_linkoutput(struct netif *netif, struct pbuf *p) +{ + err_t err; + struct pbuf *q; + struct zep_hdr *zep; + struct zepif_state *state; + + LWIP_ASSERT("invalid netif", netif != NULL); + LWIP_ASSERT("invalid pbuf", p != NULL); + + if (p->tot_len > ZEP_MAX_DATA_LEN) { + return ERR_VAL; + } + LWIP_ASSERT("TODO: support chained pbufs", p->next == NULL); + + state = (struct zepif_state *)netif->state; + LWIP_ASSERT("state->pcb != NULL", state->pcb != NULL); + + q = pbuf_alloc(PBUF_TRANSPORT, sizeof(struct zep_hdr) + p->tot_len, PBUF_RAM); + if (q == NULL) { + return ERR_MEM; + } + zep = (struct zep_hdr *)q->payload; + memset(zep, 0, sizeof(struct zep_hdr)); + zep->prot_id[0] = 'E'; + zep->prot_id[1] = 'X'; + zep->prot_version = 2; + zep->type = 1; /* Data */ + zep->channel_id = 0; /* whatever */ + zep->device_id = lwip_htons(1); /* whatever */ + zep->crc_mode = 1; + zep->unknown_1 = 0xff; + zep->seq_num = lwip_htonl(state->seqno); + state->seqno++; + zep->len = (u8_t)p->tot_len; + + err = pbuf_take_at(q, p->payload, p->tot_len, sizeof(struct zep_hdr)); + if (err == ERR_OK) { +#if ZEPIF_LOOPBACK + zepif_udp_recv(netif, state->pcb, pbuf_clone(PBUF_RAW, PBUF_RAM, q), NULL, 0); +#endif + err = udp_sendto(state->pcb, q, state->init.zep_dst_ip_addr, state->init.zep_dst_udp_port); + } + pbuf_free(q); + + return err; +} + +/** + * @ingroup zepif + * Set up a raw 6LowPAN netif and surround it with input- and output + * functions for ZEP + */ +err_t +zepif_init(struct netif *netif) +{ + err_t err; + struct zepif_init *init_state = (struct zepif_init *)netif->state; + struct zepif_state *state = (struct zepif_state *)mem_malloc(sizeof(struct zepif_state)); + + LWIP_ASSERT("zepif needs an input callback", netif->input != NULL); + + if (state == NULL) { + return ERR_MEM; + } + memset(state, 0, sizeof(struct zepif_state)); + if (init_state != NULL) { + memcpy(&state->init, init_state, sizeof(struct zepif_init)); + } + if (state->init.zep_src_udp_port == 0) { + state->init.zep_src_udp_port = ZEPIF_DEFAULT_UDP_PORT; + } + if (state->init.zep_dst_udp_port == 0) { + state->init.zep_dst_udp_port = ZEPIF_DEFAULT_UDP_PORT; + } +#if LWIP_IPV4 + if (state->init.zep_dst_ip_addr == NULL) { + /* With IPv4 enabled, default to broadcasting packets if no address is set */ + state->init.zep_dst_ip_addr = IP_ADDR_BROADCAST; + } +#endif /* LWIP_IPV4 */ + + netif->state = NULL; + + state->pcb = udp_new_ip_type(IPADDR_TYPE_ANY); + if (state->pcb == NULL) { + err = ERR_MEM; + goto err_ret; + } + err = udp_bind(state->pcb, state->init.zep_src_ip_addr, state->init.zep_src_udp_port); + if (err != ERR_OK) { + goto err_ret; + } + if (state->init.zep_netif != NULL) { + udp_bind_netif(state->pcb, state->init.zep_netif); + } + LWIP_ASSERT("udp_bind(lowpan6_broadcast_pcb) failed", err == ERR_OK); + ip_set_option(state->pcb, SOF_BROADCAST); + udp_recv(state->pcb, zepif_udp_recv, netif); + + err = lowpan6_if_init(netif); + LWIP_ASSERT("lowpan6_if_init set a state", netif->state == NULL); + if (err == ERR_OK) { + netif->state = state; + netif->hwaddr_len = 6; + if (init_state != NULL) { + memcpy(netif->hwaddr, init_state->addr, 6); + } else { + u8_t i; + for (i = 0; i < 6; i++) { + netif->hwaddr[i] = i; + } + netif->hwaddr[0] &= 0xfc; + } + netif->linkoutput = zepif_linkoutput; + + if (!zep_lowpan_timer_running) { + sys_timeout(LOWPAN6_TMR_INTERVAL, zep_lowpan_timer, NULL); + zep_lowpan_timer_running = 1; + } + + return ERR_OK; + } + +err_ret: + if (state->pcb != NULL) { + udp_remove(state->pcb); + } + mem_free(state); + return err; +} + +#endif /* LWIP_IPV6 && LWIP_UDP */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/system/OS/sys_arch.c b/STM32_Disco746G/Middlewares/Third_Party/LwIP/system/OS/sys_arch.c new file mode 100644 index 0000000000000000000000000000000000000000..65d9bf906be3fa4b0534d39f15269bfe1bc8fcfc --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/system/OS/sys_arch.c @@ -0,0 +1,512 @@ +/* + * Copyright (c) 2001-2003 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +/* lwIP includes. */ +#include "lwip/debug.h" +#include "lwip/def.h" +#include "lwip/sys.h" +#include "lwip/mem.h" +#include "lwip/stats.h" + +#if !NO_SYS + +#include "cmsis_os.h" + +#if defined(LWIP_PROVIDE_ERRNO) +int errno; +#endif + +/*-----------------------------------------------------------------------------------*/ +// Creates an empty mailbox. +err_t sys_mbox_new(sys_mbox_t *mbox, int size) +{ +#if (osCMSIS < 0x20000U) + osMessageQDef(QUEUE, size, void *); + *mbox = osMessageCreate(osMessageQ(QUEUE), NULL); +#else + *mbox = osMessageQueueNew(size, sizeof(void *), NULL); +#endif +#if SYS_STATS + ++lwip_stats.sys.mbox.used; + if(lwip_stats.sys.mbox.max < lwip_stats.sys.mbox.used) + { + lwip_stats.sys.mbox.max = lwip_stats.sys.mbox.used; + } +#endif /* SYS_STATS */ + if(*mbox == NULL) + return ERR_MEM; + + return ERR_OK; +} + +/*-----------------------------------------------------------------------------------*/ +/* + Deallocates a mailbox. If there are messages still present in the + mailbox when the mailbox is deallocated, it is an indication of a + programming error in lwIP and the developer should be notified. +*/ +void sys_mbox_free(sys_mbox_t *mbox) +{ +#if (osCMSIS < 0x20000U) + if(osMessageWaiting(*mbox)) +#else + if(osMessageQueueGetCount(*mbox)) +#endif + { + /* Line for breakpoint. Should never break here! */ + portNOP(); +#if SYS_STATS + lwip_stats.sys.mbox.err++; +#endif /* SYS_STATS */ + + } +#if (osCMSIS < 0x20000U) + osMessageDelete(*mbox); +#else + osMessageQueueDelete(*mbox); +#endif +#if SYS_STATS + --lwip_stats.sys.mbox.used; +#endif /* SYS_STATS */ +} + +/*-----------------------------------------------------------------------------------*/ +// Posts the "msg" to the mailbox. +void sys_mbox_post(sys_mbox_t *mbox, void *data) +{ +#if (osCMSIS < 0x20000U) + while(osMessagePut(*mbox, (uint32_t)data, osWaitForever) != osOK); +#else + while(osMessageQueuePut(*mbox, &data, 0, osWaitForever) != osOK); +#endif +} + + +/*-----------------------------------------------------------------------------------*/ +// Try to post the "msg" to the mailbox. +err_t sys_mbox_trypost(sys_mbox_t *mbox, void *msg) +{ + err_t result; +#if (osCMSIS < 0x20000U) + if(osMessagePut(*mbox, (uint32_t)msg, 0) == osOK) +#else + if(osMessageQueuePut(*mbox, &msg, 0, 0) == osOK) +#endif + { + result = ERR_OK; + } + else + { + // could not post, queue must be full + result = ERR_MEM; + +#if SYS_STATS + lwip_stats.sys.mbox.err++; +#endif /* SYS_STATS */ + } + + return result; +} + + +/*-----------------------------------------------------------------------------------*/ +// Try to post the "msg" to the mailbox. +err_t sys_mbox_trypost_fromisr(sys_mbox_t *mbox, void *msg) +{ + return sys_mbox_trypost(mbox, msg); +} + +/*-----------------------------------------------------------------------------------*/ +/* + Blocks the thread until a message arrives in the mailbox, but does + not block the thread longer than "timeout" milliseconds (similar to + the sys_arch_sem_wait() function). The "msg" argument is a result + parameter that is set by the function (i.e., by doing "*msg = + ptr"). The "msg" parameter maybe NULL to indicate that the message + should be dropped. + + The return values are the same as for the sys_arch_sem_wait() function: + Number of milliseconds spent waiting or SYS_ARCH_TIMEOUT if there was a + timeout. + + Note that a function with a similar name, sys_mbox_fetch(), is + implemented by lwIP. +*/ +u32_t sys_arch_mbox_fetch(sys_mbox_t *mbox, void **msg, u32_t timeout) +{ +#if (osCMSIS < 0x20000U) + osEvent event; + uint32_t starttime = osKernelSysTick(); +#else + osStatus_t status; + uint32_t starttime = osKernelGetTickCount(); +#endif + if(timeout != 0) + { +#if (osCMSIS < 0x20000U) + event = osMessageGet (*mbox, timeout); + + if(event.status == osEventMessage) + { + *msg = (void *)event.value.v; + return (osKernelSysTick() - starttime); + } +#else + status = osMessageQueueGet(*mbox, msg, 0, timeout); + if (status == osOK) + { + return (osKernelGetTickCount() - starttime); + } +#endif + else + { + return SYS_ARCH_TIMEOUT; + } + } + else + { +#if (osCMSIS < 0x20000U) + event = osMessageGet (*mbox, osWaitForever); + *msg = (void *)event.value.v; + return (osKernelSysTick() - starttime); +#else + osMessageQueueGet(*mbox, msg, 0, osWaitForever ); + return (osKernelGetTickCount() - starttime); +#endif + } +} + +/*-----------------------------------------------------------------------------------*/ +/* + Similar to sys_arch_mbox_fetch, but if message is not ready immediately, we'll + return with SYS_MBOX_EMPTY. On success, 0 is returned. +*/ +u32_t sys_arch_mbox_tryfetch(sys_mbox_t *mbox, void **msg) +{ +#if (osCMSIS < 0x20000U) + osEvent event; + + event = osMessageGet (*mbox, 0); + + if(event.status == osEventMessage) + { + *msg = (void *)event.value.v; +#else + if (osMessageQueueGet(*mbox, msg, 0, 0) == osOK) + { +#endif + return ERR_OK; + } + else + { + return SYS_MBOX_EMPTY; + } +} +/*----------------------------------------------------------------------------------*/ +int sys_mbox_valid(sys_mbox_t *mbox) +{ + if (*mbox == SYS_MBOX_NULL) + return 0; + else + return 1; +} +/*-----------------------------------------------------------------------------------*/ +void sys_mbox_set_invalid(sys_mbox_t *mbox) +{ + *mbox = SYS_MBOX_NULL; +} + +/*-----------------------------------------------------------------------------------*/ +// Creates a new semaphore. The "count" argument specifies +// the initial state of the semaphore. +err_t sys_sem_new(sys_sem_t *sem, u8_t count) +{ +#if (osCMSIS < 0x20000U) + osSemaphoreDef(SEM); + *sem = osSemaphoreCreate (osSemaphore(SEM), 1); +#else + *sem = osSemaphoreNew(UINT16_MAX, count, NULL); +#endif + + if(*sem == NULL) + { +#if SYS_STATS + ++lwip_stats.sys.sem.err; +#endif /* SYS_STATS */ + return ERR_MEM; + } + + if(count == 0) // Means it can't be taken + { +#if (osCMSIS < 0x20000U) + osSemaphoreWait(*sem, 0); +#else + osSemaphoreAcquire(*sem, 0); +#endif + } + +#if SYS_STATS + ++lwip_stats.sys.sem.used; + if (lwip_stats.sys.sem.max < lwip_stats.sys.sem.used) { + lwip_stats.sys.sem.max = lwip_stats.sys.sem.used; + } +#endif /* SYS_STATS */ + + return ERR_OK; +} + +/*-----------------------------------------------------------------------------------*/ +/* + Blocks the thread while waiting for the semaphore to be + signaled. If the "timeout" argument is non-zero, the thread should + only be blocked for the specified time (measured in + milliseconds). + + If the timeout argument is non-zero, the return value is the number of + milliseconds spent waiting for the semaphore to be signaled. If the + semaphore wasn't signaled within the specified time, the return value is + SYS_ARCH_TIMEOUT. If the thread didn't have to wait for the semaphore + (i.e., it was already signaled), the function may return zero. + + Notice that lwIP implements a function with a similar name, + sys_sem_wait(), that uses the sys_arch_sem_wait() function. +*/ +u32_t sys_arch_sem_wait(sys_sem_t *sem, u32_t timeout) +{ +#if (osCMSIS < 0x20000U) + uint32_t starttime = osKernelSysTick(); +#else + uint32_t starttime = osKernelGetTickCount(); +#endif + if(timeout != 0) + { +#if (osCMSIS < 0x20000U) + if(osSemaphoreWait (*sem, timeout) == osOK) + { + return (osKernelSysTick() - starttime); +#else + if(osSemaphoreAcquire(*sem, timeout) == osOK) + { + return (osKernelGetTickCount() - starttime); +#endif + } + else + { + return SYS_ARCH_TIMEOUT; + } + } + else + { +#if (osCMSIS < 0x20000U) + while(osSemaphoreWait (*sem, osWaitForever) != osOK); + return (osKernelSysTick() - starttime); +#else + while(osSemaphoreAcquire(*sem, osWaitForever) != osOK); + return (osKernelGetTickCount() - starttime); +#endif + } +} + +/*-----------------------------------------------------------------------------------*/ +// Signals a semaphore +void sys_sem_signal(sys_sem_t *sem) +{ + osSemaphoreRelease(*sem); +} + +/*-----------------------------------------------------------------------------------*/ +// Deallocates a semaphore +void sys_sem_free(sys_sem_t *sem) +{ +#if SYS_STATS + --lwip_stats.sys.sem.used; +#endif /* SYS_STATS */ + + osSemaphoreDelete(*sem); +} +/*-----------------------------------------------------------------------------------*/ +int sys_sem_valid(sys_sem_t *sem) +{ + if (*sem == SYS_SEM_NULL) + return 0; + else + return 1; +} + +/*-----------------------------------------------------------------------------------*/ +void sys_sem_set_invalid(sys_sem_t *sem) +{ + *sem = SYS_SEM_NULL; +} + +/*-----------------------------------------------------------------------------------*/ +#if (osCMSIS < 0x20000U) +osMutexId lwip_sys_mutex; +osMutexDef(lwip_sys_mutex); +#else +osMutexId_t lwip_sys_mutex; +#endif +// Initialize sys arch +void sys_init(void) +{ +#if (osCMSIS < 0x20000U) + lwip_sys_mutex = osMutexCreate(osMutex(lwip_sys_mutex)); +#else + lwip_sys_mutex = osMutexNew(NULL); +#endif +} +/*-----------------------------------------------------------------------------------*/ + /* Mutexes*/ +/*-----------------------------------------------------------------------------------*/ +/*-----------------------------------------------------------------------------------*/ +#if LWIP_COMPAT_MUTEX == 0 +/* Create a new mutex*/ +err_t sys_mutex_new(sys_mutex_t *mutex) { + +#if (osCMSIS < 0x20000U) + osMutexDef(MUTEX); + *mutex = osMutexCreate(osMutex(MUTEX)); +#else + *mutex = osMutexNew(NULL); +#endif + + if(*mutex == NULL) + { +#if SYS_STATS + ++lwip_stats.sys.mutex.err; +#endif /* SYS_STATS */ + return ERR_MEM; + } + +#if SYS_STATS + ++lwip_stats.sys.mutex.used; + if (lwip_stats.sys.mutex.max < lwip_stats.sys.mutex.used) { + lwip_stats.sys.mutex.max = lwip_stats.sys.mutex.used; + } +#endif /* SYS_STATS */ + return ERR_OK; +} +/*-----------------------------------------------------------------------------------*/ +/* Deallocate a mutex*/ +void sys_mutex_free(sys_mutex_t *mutex) +{ +#if SYS_STATS + --lwip_stats.sys.mutex.used; +#endif /* SYS_STATS */ + + osMutexDelete(*mutex); +} +/*-----------------------------------------------------------------------------------*/ +/* Lock a mutex*/ +void sys_mutex_lock(sys_mutex_t *mutex) +{ +#if (osCMSIS < 0x20000U) + osMutexWait(*mutex, osWaitForever); +#else + osMutexAcquire(*mutex, osWaitForever); +#endif +} + +/*-----------------------------------------------------------------------------------*/ +/* Unlock a mutex*/ +void sys_mutex_unlock(sys_mutex_t *mutex) +{ + osMutexRelease(*mutex); +} +#endif /*LWIP_COMPAT_MUTEX*/ +/*-----------------------------------------------------------------------------------*/ +// TODO +/*-----------------------------------------------------------------------------------*/ +/* + Starts a new thread with priority "prio" that will begin its execution in the + function "thread()". The "arg" argument will be passed as an argument to the + thread() function. The id of the new thread is returned. Both the id and + the priority are system dependent. +*/ +sys_thread_t sys_thread_new(const char *name, lwip_thread_fn thread , void *arg, int stacksize, int prio) +{ +#if (osCMSIS < 0x20000U) + const osThreadDef_t os_thread_def = { (char *)name, (os_pthread)thread, (osPriority)prio, 0, stacksize}; + return osThreadCreate(&os_thread_def, arg); +#else + const osThreadAttr_t attributes = { + .name = name, + .stack_size = stacksize, + .priority = (osPriority_t)prio, + }; + return osThreadNew(thread, arg, &attributes); +#endif +} + +/* + This optional function does a "fast" critical region protection and returns + the previous protection level. This function is only called during very short + critical regions. An embedded system which supports ISR-based drivers might + want to implement this function by disabling interrupts. Task-based systems + might want to implement this by using a mutex or disabling tasking. This + function should support recursive calls from the same task or interrupt. In + other words, sys_arch_protect() could be called while already protected. In + that case the return value indicates that it is already protected. + + sys_arch_protect() is only required if your port is supporting an operating + system. + + Note: This function is based on FreeRTOS API, because no equivalent CMSIS-RTOS + API is available +*/ +sys_prot_t sys_arch_protect(void) +{ +#if (osCMSIS < 0x20000U) + osMutexWait(lwip_sys_mutex, osWaitForever); +#else + osMutexAcquire(lwip_sys_mutex, osWaitForever); +#endif + return (sys_prot_t)1; +} + + +/* + This optional function does a "fast" set of critical region protection to the + value specified by pval. See the documentation for sys_arch_protect() for + more information. This function is only required if your port is supporting + an operating system. + + Note: This function is based on FreeRTOS API, because no equivalent CMSIS-RTOS + API is available +*/ +void sys_arch_unprotect(sys_prot_t pval) +{ + ( void ) pval; + osMutexRelease(lwip_sys_mutex); +} + +#endif /* !NO_SYS */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/system/arch/bpstruct.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/system/arch/bpstruct.h new file mode 100644 index 0000000000000000000000000000000000000000..177758c5ee5139a35119bdf58572c26a19b94d98 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/system/arch/bpstruct.h @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2001-2003 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#if defined(__IAR_SYSTEMS_ICC__) +#pragma pack(1) +#endif + diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/system/arch/cc.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/system/arch/cc.h new file mode 100644 index 0000000000000000000000000000000000000000..3065318b3416b57673e2b3a99101744f607f4f3f --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/system/arch/cc.h @@ -0,0 +1,88 @@ +/* + * Copyright (c) 2001-2003 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __CC_H__ +#define __CC_H__ + +#include "cpu.h" +#include +#include + +typedef int sys_prot_t; + +#define LWIP_PROVIDE_ERRNO + +#if defined (__GNUC__) & !defined (__CC_ARM) + +#define LWIP_TIMEVAL_PRIVATE 0 +#include + +#endif + +/* define compiler specific symbols */ +#if defined (__ICCARM__) + +#define PACK_STRUCT_BEGIN +#define PACK_STRUCT_STRUCT +#define PACK_STRUCT_END +#define PACK_STRUCT_FIELD(x) x +#define PACK_STRUCT_USE_INCLUDES + +#elif defined (__GNUC__) + +#define PACK_STRUCT_BEGIN +#define PACK_STRUCT_STRUCT __attribute__ ((__packed__)) +#define PACK_STRUCT_END +#define PACK_STRUCT_FIELD(x) x + +#elif defined (__CC_ARM) + +#define PACK_STRUCT_BEGIN __packed +#define PACK_STRUCT_STRUCT +#define PACK_STRUCT_END +#define PACK_STRUCT_FIELD(x) x + +#elif defined (__TASKING__) + +#define PACK_STRUCT_BEGIN +#define PACK_STRUCT_STRUCT +#define PACK_STRUCT_END +#define PACK_STRUCT_FIELD(x) x + +#endif + +#define LWIP_PLATFORM_ASSERT(x) do {printf("Assertion \"%s\" failed at line %d in %s\n", \ + x, __LINE__, __FILE__); } while(0) + +/* Define random number generator function */ +#define LWIP_RAND() ((u32_t)rand()) + +#endif /* __CC_H__ */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/system/arch/cpu.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/system/arch/cpu.h new file mode 100644 index 0000000000000000000000000000000000000000..bfdf8811adeb7510846203337c5fcc9f4136295f --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/system/arch/cpu.h @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2001-2003 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __CPU_H__ +#define __CPU_H__ + +#ifndef BYTE_ORDER +#define BYTE_ORDER LITTLE_ENDIAN +#endif + +#endif /* __CPU_H__ */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/system/arch/epstruct.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/system/arch/epstruct.h new file mode 100644 index 0000000000000000000000000000000000000000..1e1a049cb7207e6f2d2f5ed74bd1260eaeb7faac --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/system/arch/epstruct.h @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2001-2003 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#if defined(__IAR_SYSTEMS_ICC__) +#pragma pack() +#endif + diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/system/arch/init.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/system/arch/init.h new file mode 100644 index 0000000000000000000000000000000000000000..e622c73aee76e004ee5cea0dcaa117af1eea0692 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/system/arch/init.h @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2001-2003 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __ARCH_INIT_H__ +#define __ARCH_INIT_H__ + +#define TCPIP_INIT_DONE(arg) tcpip_init_done(arg) + +void tcpip_init_done(void *); +int wait_for_tcpip_init(void); + +#endif /* __ARCH_INIT_H__ */ + + + + diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/system/arch/lib.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/system/arch/lib.h new file mode 100644 index 0000000000000000000000000000000000000000..378f25b885135e1bf6cc621283b321dfe1595be5 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/system/arch/lib.h @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2001-2003 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LIB_H__ +#define __LIB_H__ + +#include + + +#endif /* __LIB_H__ */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/system/arch/perf.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/system/arch/perf.h new file mode 100644 index 0000000000000000000000000000000000000000..334d42af8cd08f95e7c410ead24a98cc72060385 --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/system/arch/perf.h @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2001-2003 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __PERF_H__ +#define __PERF_H__ + +#define PERF_START /* null definition */ +#define PERF_STOP(x) /* null definition */ + +#endif /* __PERF_H__ */ diff --git a/STM32_Disco746G/Middlewares/Third_Party/LwIP/system/arch/sys_arch.h b/STM32_Disco746G/Middlewares/Third_Party/LwIP/system/arch/sys_arch.h new file mode 100644 index 0000000000000000000000000000000000000000..49bfd4ebcbd872c0aaa9355cfc4a1cc663816c3a --- /dev/null +++ b/STM32_Disco746G/Middlewares/Third_Party/LwIP/system/arch/sys_arch.h @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2001-2003 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __SYS_ARCH_H__ +#define __SYS_ARCH_H__ + +#include "lwip/opt.h" + +#if (NO_SYS != 0) +#error "NO_SYS need to be set to 0 to use threaded API" +#endif + +#include "cmsis_os.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#if (osCMSIS < 0x20000U) + +#define SYS_MBOX_NULL (osMessageQId)0 +#define SYS_SEM_NULL (osSemaphoreId)0 + +typedef osSemaphoreId sys_sem_t; +typedef osSemaphoreId sys_mutex_t; +typedef osMessageQId sys_mbox_t; +typedef osThreadId sys_thread_t; +#else + +#define SYS_MBOX_NULL (osMessageQueueId_t)0 +#define SYS_SEM_NULL (osSemaphoreId_t)0 + +typedef osSemaphoreId_t sys_sem_t; +typedef osSemaphoreId_t sys_mutex_t; +typedef osMessageQueueId_t sys_mbox_t; +typedef osThreadId_t sys_thread_t; +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* __SYS_ARCH_H__ */ + diff --git a/STM32_Disco746G/STM32CubeIDE/.cproject b/STM32_Disco746G/STM32CubeIDE/.cproject index a561eb9c120f2824a3364f14703bed48d7865792..bc5d83ae7f6117b7f77d73fda0c2dfb1726ae907 100644 --- a/STM32_Disco746G/STM32CubeIDE/.cproject +++ b/STM32_Disco746G/STM32CubeIDE/.cproject @@ -1,319 +1,386 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/STM32_Disco746G/STM32CubeIDE/.project b/STM32_Disco746G/STM32CubeIDE/.project index a687d29258ecb625f16e8cd4b0976e09904767bd..76a82a63e74c5dc76024bf210029d931ca513b40 100644 --- a/STM32_Disco746G/STM32CubeIDE/.project +++ b/STM32_Disco746G/STM32CubeIDE/.project @@ -1,7 +1,7 @@ LightControlConvi_Disco746G - + @@ -93,6 +93,11 @@ 1 PARENT-1-PROJECT_LOC/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dsi.c + + Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.c + 1 + PARENT-1-PROJECT_LOC/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_eth.c + Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.c 1 @@ -459,115 +464,445 @@ PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LibJPEG/source/jutils.c - Application/User/Core/freertos.c + Middlewares/LwIP/altcp.c 1 - $%7BPARENT-1-PROJECT_LOC%7D/Core/Src/freertos.c + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/core/altcp.c - Application/User/Core/main.c + Middlewares/LwIP/altcp_alloc.c 1 - $%7BPARENT-1-PROJECT_LOC%7D/Core/Src/main.c + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/core/altcp_alloc.c - Application/User/Core/stm32f7xx_hal_msp.c + Middlewares/LwIP/altcp_tcp.c 1 - $%7BPARENT-1-PROJECT_LOC%7D/Core/Src/stm32f7xx_hal_msp.c + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/core/altcp_tcp.c - Application/User/Core/stm32f7xx_hal_timebase_tim.c + Middlewares/LwIP/api_lib.c 1 - $%7BPARENT-1-PROJECT_LOC%7D/Core/Src/stm32f7xx_hal_timebase_tim.c + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/api/api_lib.c - Application/User/Core/stm32f7xx_it.c + Middlewares/LwIP/api_msg.c 1 - $%7BPARENT-1-PROJECT_LOC%7D/Core/Src/stm32f7xx_it.c + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/api/api_msg.c - Application/User/LIBJPEG/App/libjpeg.c + Middlewares/LwIP/auth.c 1 - PARENT-1-PROJECT_LOC/LIBJPEG/App/libjpeg.c + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/netif/ppp/auth.c - Application/User/TouchGFX/App/app_touchgfx.c + Middlewares/LwIP/autoip.c 1 - $%7BPARENT-1-PROJECT_LOC%7D/TouchGFX/App/app_touchgfx.c + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/core/ipv4/autoip.c - Application/User/TouchGFX/target/CortexMMCUInstrumentation.cpp + Middlewares/LwIP/bridgeif.c 1 - $%7BPARENT-1-PROJECT_LOC%7D/TouchGFX/target/CortexMMCUInstrumentation.cpp + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/netif/bridgeif.c - Application/User/TouchGFX/target/STM32TouchController.cpp + Middlewares/LwIP/bridgeif_fdb.c 1 - $%7BPARENT-1-PROJECT_LOC%7D/TouchGFX/target/STM32TouchController.cpp + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/netif/bridgeif_fdb.c - Application/User/TouchGFX/target/TouchGFXGPIO.cpp + Middlewares/LwIP/ccp.c 1 - $%7BPARENT-1-PROJECT_LOC%7D/TouchGFX/target/TouchGFXGPIO.cpp + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/netif/ppp/ccp.c - Application/User/TouchGFX/target/TouchGFXHAL.cpp + Middlewares/LwIP/chap-md5.c 1 - $%7BPARENT-1-PROJECT_LOC%7D/TouchGFX/target/TouchGFXHAL.cpp + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/netif/ppp/chap-md5.c - Application/User/TouchGFX/target/generated/OSWrappers.cpp + Middlewares/LwIP/chap-new.c 1 - $%7BPARENT-1-PROJECT_LOC%7D/TouchGFX/target/generated/OSWrappers.cpp + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/netif/ppp/chap-new.c - Application/User/TouchGFX/target/generated/STM32DMA.cpp + Middlewares/LwIP/chap_ms.c 1 - $%7BPARENT-1-PROJECT_LOC%7D/TouchGFX/target/generated/STM32DMA.cpp + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/netif/ppp/chap_ms.c - Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.cpp + Middlewares/LwIP/def.c 1 - PARENT-1-PROJECT_LOC/TouchGFX/target/generated/SoftwareMJPEGDecoder.cpp + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/core/def.c - Application/User/TouchGFX/target/generated/TouchGFXConfiguration.cpp + Middlewares/LwIP/demand.c 1 - $%7BPARENT-1-PROJECT_LOC%7D/TouchGFX/target/generated/TouchGFXConfiguration.cpp + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/netif/ppp/demand.c - Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.cpp + Middlewares/LwIP/dhcp.c 1 - $%7BPARENT-1-PROJECT_LOC%7D/TouchGFX/target/generated/TouchGFXGeneratedHAL.cpp + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/core/ipv4/dhcp.c - Application/User/gui/FrontendApplication.cpp + Middlewares/LwIP/dhcp6.c 1 - PARENT-1-PROJECT_LOC/TouchGFX/gui/src/common/FrontendApplication.cpp + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/core/ipv6/dhcp6.c - Application/User/gui/SliderContainer.cpp + Middlewares/LwIP/dns.c 1 - PARENT-1-PROJECT_LOC/TouchGFX/gui/src/containers/SliderContainer.cpp + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/core/dns.c - Application/User/gui/MainScreenPresenter.cpp + Middlewares/LwIP/eap.c 1 - PARENT-1-PROJECT_LOC/TouchGFX/gui/src/mainscreen_screen/MainScreenPresenter.cpp + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/netif/ppp/eap.c - Application/User/gui/MainScreenView.cpp + Middlewares/LwIP/ecp.c 1 - PARENT-1-PROJECT_LOC/TouchGFX/gui/src/mainscreen_screen/MainScreenView.cpp + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/netif/ppp/ecp.c - Application/User/gui/Model.cpp + Middlewares/LwIP/err.c 1 - PARENT-1-PROJECT_LOC/TouchGFX/gui/src/model/Model.cpp + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/api/err.c + + + Middlewares/LwIP/etharp.c + 1 + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/core/ipv4/etharp.c + + + Middlewares/LwIP/ethernet.c + 1 + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/netif/ethernet.c + + + Middlewares/LwIP/ethip6.c + 1 + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/core/ipv6/ethip6.c + + + Middlewares/LwIP/eui64.c + 1 + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/netif/ppp/eui64.c + + + Middlewares/LwIP/fsm.c + 1 + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/netif/ppp/fsm.c + + + Middlewares/LwIP/icmp.c + 1 + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/core/ipv4/icmp.c + + + Middlewares/LwIP/icmp6.c + 1 + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/core/ipv6/icmp6.c + + + Middlewares/LwIP/if_api.c + 1 + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/api/if_api.c + + + Middlewares/LwIP/igmp.c + 1 + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/core/ipv4/igmp.c + + + Middlewares/LwIP/inet6.c + 1 + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/core/ipv6/inet6.c + + + Middlewares/LwIP/inet_chksum.c + 1 + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/core/inet_chksum.c + + + Middlewares/LwIP/init.c + 1 + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/core/init.c + + + Middlewares/LwIP/ip.c + 1 + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/core/ip.c + + + Middlewares/LwIP/ip4.c + 1 + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/core/ipv4/ip4.c + + + Middlewares/LwIP/ip4_addr.c + 1 + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/core/ipv4/ip4_addr.c + + + Middlewares/LwIP/ip4_frag.c + 1 + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/core/ipv4/ip4_frag.c + + + Middlewares/LwIP/ip6.c + 1 + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/core/ipv6/ip6.c + + + Middlewares/LwIP/ip6_addr.c + 1 + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/core/ipv6/ip6_addr.c + + + Middlewares/LwIP/ip6_frag.c + 1 + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/core/ipv6/ip6_frag.c + + + Middlewares/LwIP/ipcp.c + 1 + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/netif/ppp/ipcp.c + + + Middlewares/LwIP/ipv6cp.c + 1 + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/netif/ppp/ipv6cp.c + + + Middlewares/LwIP/lcp.c + 1 + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/netif/ppp/lcp.c + + + Middlewares/LwIP/lowpan6.c + 1 + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/netif/lowpan6.c + + + Middlewares/LwIP/lowpan6_ble.c + 1 + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/netif/lowpan6_ble.c + + + Middlewares/LwIP/lowpan6_common.c + 1 + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/netif/lowpan6_common.c + + + Middlewares/LwIP/magic.c + 1 + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/netif/ppp/magic.c + + + Middlewares/LwIP/mem.c + 1 + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/core/mem.c + + + Middlewares/LwIP/memp.c + 1 + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/core/memp.c + + + Middlewares/LwIP/mld6.c + 1 + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/core/ipv6/mld6.c + + + Middlewares/LwIP/mppe.c + 1 + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/netif/ppp/mppe.c + + + Middlewares/LwIP/mqtt.c + 1 + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/apps/mqtt/mqtt.c + + + Middlewares/LwIP/multilink.c + 1 + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/netif/ppp/multilink.c + + + Middlewares/LwIP/nd6.c + 1 + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/core/ipv6/nd6.c + + + Middlewares/LwIP/netbuf.c + 1 + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/api/netbuf.c + + + Middlewares/LwIP/netdb.c + 1 + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/api/netdb.c + + + Middlewares/LwIP/netif.c + 1 + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/core/netif.c + + + Middlewares/LwIP/netifapi.c + 1 + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/api/netifapi.c + + + Middlewares/LwIP/pbuf.c + 1 + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/core/pbuf.c + + + Middlewares/LwIP/ppp.c + 1 + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/netif/ppp/ppp.c + + + Middlewares/LwIP/pppapi.c + 1 + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/netif/ppp/pppapi.c + + + Middlewares/LwIP/pppcrypt.c + 1 + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/netif/ppp/pppcrypt.c + + + Middlewares/LwIP/pppoe.c + 1 + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/netif/ppp/pppoe.c + + + Middlewares/LwIP/pppol2tp.c + 1 + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/netif/ppp/pppol2tp.c + + + Middlewares/LwIP/pppos.c + 1 + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/netif/ppp/pppos.c + + + Middlewares/LwIP/raw.c + 1 + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/core/raw.c + + + Middlewares/LwIP/slipif.c + 1 + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/netif/slipif.c + + + Middlewares/LwIP/sockets.c + 1 + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/api/sockets.c + + + Middlewares/LwIP/stats.c + 1 + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/core/stats.c + + + Middlewares/LwIP/sys.c + 1 + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/core/sys.c + + + Middlewares/LwIP/sys_arch.c + 1 + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/system/OS/sys_arch.c + + + Middlewares/LwIP/tcp.c + 1 + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/core/tcp.c + + + Middlewares/LwIP/tcp_in.c + 1 + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/core/tcp_in.c + + + Middlewares/LwIP/tcp_out.c + 1 + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/core/tcp_out.c + + + Middlewares/LwIP/tcpip.c + 1 + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/api/tcpip.c + + + Middlewares/LwIP/timeouts.c + 1 + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/core/timeouts.c + + + Middlewares/LwIP/udp.c + 1 + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/core/udp.c + + + Middlewares/LwIP/upap.c + 1 + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/netif/ppp/upap.c + + + Middlewares/LwIP/utils.c + 1 + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/netif/ppp/utils.c + + + Middlewares/LwIP/vj.c + 1 + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/netif/ppp/vj.c + + + Middlewares/LwIP/zepif.c + 1 + PARENT-1-PROJECT_LOC/Middlewares/Third_Party/LwIP/src/netif/zepif.c + + + Application/User/Core/freertos.c + 1 + $%7BPARENT-1-PROJECT_LOC%7D/Core/Src/freertos.c + + + Application/User/Core/main.c + 1 + $%7BPARENT-1-PROJECT_LOC%7D/Core/Src/main.c + + + Application/User/Core/stm32f7xx_hal_msp.c + 1 + $%7BPARENT-1-PROJECT_LOC%7D/Core/Src/stm32f7xx_hal_msp.c + + + Application/User/Core/stm32f7xx_hal_timebase_tim.c + 1 + $%7BPARENT-1-PROJECT_LOC%7D/Core/Src/stm32f7xx_hal_timebase_tim.c + + + Application/User/Core/stm32f7xx_it.c + 1 + $%7BPARENT-1-PROJECT_LOC%7D/Core/Src/stm32f7xx_it.c Application/User/generated/ApplicationFontProvider.cpp 1 PARENT-1-PROJECT_LOC/TouchGFX/generated/fonts/src/ApplicationFontProvider.cpp + + Application/User/generated/BitmapDatabase.cpp + 1 + PARENT-1-PROJECT_LOC/TouchGFX/generated/images/src/BitmapDatabase.cpp + Application/User/generated/CachedFont.cpp 1 @@ -593,6 +928,11 @@ 1 PARENT-1-PROJECT_LOC/TouchGFX/generated/fonts/src/Font_verdana_40_4bpp_0.cpp + + Application/User/generated/FrontendApplicationBase.cpp + 1 + PARENT-1-PROJECT_LOC/TouchGFX/generated/gui_generated/src/common/FrontendApplicationBase.cpp + Application/User/generated/GeneratedFont.cpp 1 @@ -613,6 +953,26 @@ 1 PARENT-1-PROJECT_LOC/TouchGFX/generated/fonts/src/Kerning_verdana_40_4bpp.cpp + + Application/User/generated/LanguageGb.cpp + 1 + PARENT-1-PROJECT_LOC/TouchGFX/generated/texts/src/LanguageGb.cpp + + + Application/User/generated/MainScreenViewBase.cpp + 1 + PARENT-1-PROJECT_LOC/TouchGFX/generated/gui_generated/src/mainscreen_screen/MainScreenViewBase.cpp + + + Application/User/generated/SVGDatabase.cpp + 1 + PARENT-1-PROJECT_LOC/TouchGFX/generated/images/src/SVGDatabase.cpp + + + Application/User/generated/SliderContainerBase.cpp + 1 + PARENT-1-PROJECT_LOC/TouchGFX/generated/gui_generated/src/containers/SliderContainerBase.cpp + Application/User/generated/Table_verdana_10_4bpp.cpp 1 @@ -628,65 +988,130 @@ 1 PARENT-1-PROJECT_LOC/TouchGFX/generated/fonts/src/Table_verdana_40_4bpp.cpp + + Application/User/generated/Texts.cpp + 1 + PARENT-1-PROJECT_LOC/TouchGFX/generated/texts/src/Texts.cpp + + + Application/User/generated/TypedTextDatabase.cpp + 1 + PARENT-1-PROJECT_LOC/TouchGFX/generated/texts/src/TypedTextDatabase.cpp + Application/User/generated/UnmappedDataFont.cpp 1 PARENT-1-PROJECT_LOC/TouchGFX/generated/fonts/src/UnmappedDataFont.cpp - Application/User/generated/FrontendApplicationBase.cpp + Application/User/generated/image_Blue_Slider_Vertical_Small_Indicators_Slider3_Vertical_Round_nob.cpp 1 - PARENT-1-PROJECT_LOC/TouchGFX/generated/gui_generated/src/common/FrontendApplicationBase.cpp + PARENT-1-PROJECT_LOC/TouchGFX/generated/images/src/__designer/image_Blue_Slider_Vertical_Small_Indicators_Slider3_Vertical_Round_nob.cpp - Application/User/generated/SliderContainerBase.cpp + Application/User/generated/image_Blue_Slider_Vertical_Small_Slider3_Vertical_Round_back.cpp 1 - PARENT-1-PROJECT_LOC/TouchGFX/generated/gui_generated/src/containers/SliderContainerBase.cpp + PARENT-1-PROJECT_LOC/TouchGFX/generated/images/src/__designer/image_Blue_Slider_Vertical_Small_Slider3_Vertical_Round_back.cpp - Application/User/generated/MainScreenViewBase.cpp + Application/User/generated/image_Blue_Slider_Vertical_Small_Slider3_Vertical_Round_fill.cpp 1 - PARENT-1-PROJECT_LOC/TouchGFX/generated/gui_generated/src/mainscreen_screen/MainScreenViewBase.cpp + PARENT-1-PROJECT_LOC/TouchGFX/generated/images/src/__designer/image_Blue_Slider_Vertical_Small_Slider3_Vertical_Round_fill.cpp - Application/User/generated/BitmapDatabase.cpp + Application/User/gui/FrontendApplication.cpp 1 - PARENT-1-PROJECT_LOC/TouchGFX/generated/images/src/BitmapDatabase.cpp + PARENT-1-PROJECT_LOC/TouchGFX/gui/src/common/FrontendApplication.cpp - Application/User/generated/SVGDatabase.cpp + Application/User/gui/MainScreenPresenter.cpp 1 - PARENT-1-PROJECT_LOC/TouchGFX/generated/images/src/SVGDatabase.cpp + PARENT-1-PROJECT_LOC/TouchGFX/gui/src/mainscreen_screen/MainScreenPresenter.cpp - Application/User/generated/image_Blue_Slider_Vertical_Small_Indicators_Slider3_Vertical_Round_nob.cpp + Application/User/gui/MainScreenView.cpp 1 - PARENT-1-PROJECT_LOC/TouchGFX/generated/images/src/__designer/image_Blue_Slider_Vertical_Small_Indicators_Slider3_Vertical_Round_nob.cpp + PARENT-1-PROJECT_LOC/TouchGFX/gui/src/mainscreen_screen/MainScreenView.cpp - Application/User/generated/image_Blue_Slider_Vertical_Small_Slider3_Vertical_Round_back.cpp + Application/User/gui/Model.cpp 1 - PARENT-1-PROJECT_LOC/TouchGFX/generated/images/src/__designer/image_Blue_Slider_Vertical_Small_Slider3_Vertical_Round_back.cpp + PARENT-1-PROJECT_LOC/TouchGFX/gui/src/model/Model.cpp - Application/User/generated/image_Blue_Slider_Vertical_Small_Slider3_Vertical_Round_fill.cpp + Application/User/gui/SliderContainer.cpp 1 - PARENT-1-PROJECT_LOC/TouchGFX/generated/images/src/__designer/image_Blue_Slider_Vertical_Small_Slider3_Vertical_Round_fill.cpp + PARENT-1-PROJECT_LOC/TouchGFX/gui/src/containers/SliderContainer.cpp - Application/User/generated/LanguageGb.cpp + Drivers/BSP/Components/lan8742.c 1 - PARENT-1-PROJECT_LOC/TouchGFX/generated/texts/src/LanguageGb.cpp + PARENT-1-PROJECT_LOC/Drivers/BSP/Components/lan8742/lan8742.c - Application/User/generated/Texts.cpp + Application/User/LIBJPEG/App/libjpeg.c 1 - PARENT-1-PROJECT_LOC/TouchGFX/generated/texts/src/Texts.cpp + PARENT-1-PROJECT_LOC/LIBJPEG/App/libjpeg.c - Application/User/generated/TypedTextDatabase.cpp + Application/User/LWIP/App/lwip.c 1 - PARENT-1-PROJECT_LOC/TouchGFX/generated/texts/src/TypedTextDatabase.cpp + PARENT-1-PROJECT_LOC/LWIP/App/lwip.c + + + Application/User/LWIP/Target/ethernetif.c + 1 + PARENT-1-PROJECT_LOC/LWIP/Target/ethernetif.c + + + Application/User/TouchGFX/App/app_touchgfx.c + 1 + $%7BPARENT-1-PROJECT_LOC%7D/TouchGFX/App/app_touchgfx.c + + + Application/User/TouchGFX/target/CortexMMCUInstrumentation.cpp + 1 + $%7BPARENT-1-PROJECT_LOC%7D/TouchGFX/target/CortexMMCUInstrumentation.cpp + + + Application/User/TouchGFX/target/STM32TouchController.cpp + 1 + $%7BPARENT-1-PROJECT_LOC%7D/TouchGFX/target/STM32TouchController.cpp + + + Application/User/TouchGFX/target/TouchGFXGPIO.cpp + 1 + $%7BPARENT-1-PROJECT_LOC%7D/TouchGFX/target/TouchGFXGPIO.cpp + + + Application/User/TouchGFX/target/TouchGFXHAL.cpp + 1 + $%7BPARENT-1-PROJECT_LOC%7D/TouchGFX/target/TouchGFXHAL.cpp + + + Application/User/TouchGFX/target/generated/OSWrappers.cpp + 1 + $%7BPARENT-1-PROJECT_LOC%7D/TouchGFX/target/generated/OSWrappers.cpp + + + Application/User/TouchGFX/target/generated/STM32DMA.cpp + 1 + $%7BPARENT-1-PROJECT_LOC%7D/TouchGFX/target/generated/STM32DMA.cpp + + + Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.cpp + 1 + PARENT-1-PROJECT_LOC/TouchGFX/target/generated/SoftwareMJPEGDecoder.cpp + + + Application/User/TouchGFX/target/generated/TouchGFXConfiguration.cpp + 1 + $%7BPARENT-1-PROJECT_LOC%7D/TouchGFX/target/generated/TouchGFXConfiguration.cpp + + + Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.cpp + 1 + $%7BPARENT-1-PROJECT_LOC%7D/TouchGFX/target/generated/TouchGFXGeneratedHAL.cpp diff --git a/STM32_Disco746G/STM32CubeIDE/Debug/Application/User/Core/subdir.mk b/STM32_Disco746G/STM32CubeIDE/Debug/Application/User/Core/subdir.mk index 5220ee876da2ade21ec41bc7cecdbb505bddccca..d3022d305023ed6882dd2b55806e9e3fc5c02e23 100644 --- a/STM32_Disco746G/STM32CubeIDE/Debug/Application/User/Core/subdir.mk +++ b/STM32_Disco746G/STM32CubeIDE/Debug/Application/User/Core/subdir.mk @@ -1,15 +1,15 @@ ################################################################################ # Automatically-generated file. Do not edit! -# Toolchain: GNU Tools for STM32 (10.3-2021.10) +# Toolchain: GNU Tools for STM32 (11.3.rel1) ################################################################################ # Add inputs and outputs from these tool invocations to the build variables C_SRCS += \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Core/Src/freertos.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Core/Src/main.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Core/Src/stm32f7xx_hal_msp.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Core/Src/stm32f7xx_hal_timebase_tim.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Core/Src/stm32f7xx_it.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Core/Src/freertos.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Core/Src/main.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Core/Src/stm32f7xx_hal_msp.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Core/Src/stm32f7xx_hal_timebase_tim.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Core/Src/stm32f7xx_it.c \ ../Application/User/Core/syscalls.c \ ../Application/User/Core/sysmem.c @@ -33,18 +33,18 @@ OBJS += \ # Each subdirectory must supply rules for building sources it contributes -Application/User/Core/freertos.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Core/Src/freertos.c Application/User/Core/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Application/User/Core/main.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Core/Src/main.c Application/User/Core/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Application/User/Core/stm32f7xx_hal_msp.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Core/Src/stm32f7xx_hal_msp.c Application/User/Core/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Application/User/Core/stm32f7xx_hal_timebase_tim.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Core/Src/stm32f7xx_hal_timebase_tim.c Application/User/Core/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Application/User/Core/stm32f7xx_it.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Core/Src/stm32f7xx_it.c Application/User/Core/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Application/User/Core/freertos.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Core/Src/freertos.c Application/User/Core/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Application/User/Core/main.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Core/Src/main.c Application/User/Core/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Application/User/Core/stm32f7xx_hal_msp.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Core/Src/stm32f7xx_hal_msp.c Application/User/Core/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Application/User/Core/stm32f7xx_hal_timebase_tim.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Core/Src/stm32f7xx_hal_timebase_tim.c Application/User/Core/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Application/User/Core/stm32f7xx_it.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Core/Src/stm32f7xx_it.c Application/User/Core/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" Application/User/Core/%.o Application/User/Core/%.su Application/User/Core/%.cyclo: ../Application/User/Core/%.c Application/User/Core/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" clean: clean-Application-2f-User-2f-Core diff --git a/STM32_Disco746G/STM32CubeIDE/Debug/Application/User/LIBJPEG/App/subdir.mk b/STM32_Disco746G/STM32CubeIDE/Debug/Application/User/LIBJPEG/App/subdir.mk index 7c0ed0335a3507dac6d2ff93960e08a7c51072b0..2aa18b9eaf089266325aefaf23c9d9c38f108637 100644 --- a/STM32_Disco746G/STM32CubeIDE/Debug/Application/User/LIBJPEG/App/subdir.mk +++ b/STM32_Disco746G/STM32CubeIDE/Debug/Application/User/LIBJPEG/App/subdir.mk @@ -1,11 +1,11 @@ ################################################################################ # Automatically-generated file. Do not edit! -# Toolchain: GNU Tools for STM32 (10.3-2021.10) +# Toolchain: GNU Tools for STM32 (11.3.rel1) ################################################################################ # Add inputs and outputs from these tool invocations to the build variables C_SRCS += \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/LIBJPEG/App/libjpeg.c +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/LIBJPEG/App/libjpeg.c C_DEPS += \ ./Application/User/LIBJPEG/App/libjpeg.d @@ -15,8 +15,8 @@ OBJS += \ # Each subdirectory must supply rules for building sources it contributes -Application/User/LIBJPEG/App/libjpeg.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/LIBJPEG/App/libjpeg.c Application/User/LIBJPEG/App/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Application/User/LIBJPEG/App/libjpeg.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/LIBJPEG/App/libjpeg.c Application/User/LIBJPEG/App/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" clean: clean-Application-2f-User-2f-LIBJPEG-2f-App diff --git a/STM32_Disco746G/STM32CubeIDE/Debug/Application/User/LWIP/App/subdir.mk b/STM32_Disco746G/STM32CubeIDE/Debug/Application/User/LWIP/App/subdir.mk new file mode 100644 index 0000000000000000000000000000000000000000..498998cdcc016eafcd777aa8422305cdb89e1821 --- /dev/null +++ b/STM32_Disco746G/STM32CubeIDE/Debug/Application/User/LWIP/App/subdir.mk @@ -0,0 +1,27 @@ +################################################################################ +# Automatically-generated file. Do not edit! +# Toolchain: GNU Tools for STM32 (11.3.rel1) +################################################################################ + +# Add inputs and outputs from these tool invocations to the build variables +C_SRCS += \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/LWIP/App/lwip.c + +C_DEPS += \ +./Application/User/LWIP/App/lwip.d + +OBJS += \ +./Application/User/LWIP/App/lwip.o + + +# Each subdirectory must supply rules for building sources it contributes +Application/User/LWIP/App/lwip.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/LWIP/App/lwip.c Application/User/LWIP/App/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" + +clean: clean-Application-2f-User-2f-LWIP-2f-App + +clean-Application-2f-User-2f-LWIP-2f-App: + -$(RM) ./Application/User/LWIP/App/lwip.cyclo ./Application/User/LWIP/App/lwip.d ./Application/User/LWIP/App/lwip.o ./Application/User/LWIP/App/lwip.su + +.PHONY: clean-Application-2f-User-2f-LWIP-2f-App + diff --git a/STM32_Disco746G/STM32CubeIDE/Debug/Application/User/LWIP/Target/subdir.mk b/STM32_Disco746G/STM32CubeIDE/Debug/Application/User/LWIP/Target/subdir.mk new file mode 100644 index 0000000000000000000000000000000000000000..7f722032b6e14172a420f8c4062a49edb0d83a12 --- /dev/null +++ b/STM32_Disco746G/STM32CubeIDE/Debug/Application/User/LWIP/Target/subdir.mk @@ -0,0 +1,27 @@ +################################################################################ +# Automatically-generated file. Do not edit! +# Toolchain: GNU Tools for STM32 (11.3.rel1) +################################################################################ + +# Add inputs and outputs from these tool invocations to the build variables +C_SRCS += \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/LWIP/Target/ethernetif.c + +C_DEPS += \ +./Application/User/LWIP/Target/ethernetif.d + +OBJS += \ +./Application/User/LWIP/Target/ethernetif.o + + +# Each subdirectory must supply rules for building sources it contributes +Application/User/LWIP/Target/ethernetif.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/LWIP/Target/ethernetif.c Application/User/LWIP/Target/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" + +clean: clean-Application-2f-User-2f-LWIP-2f-Target + +clean-Application-2f-User-2f-LWIP-2f-Target: + -$(RM) ./Application/User/LWIP/Target/ethernetif.cyclo ./Application/User/LWIP/Target/ethernetif.d ./Application/User/LWIP/Target/ethernetif.o ./Application/User/LWIP/Target/ethernetif.su + +.PHONY: clean-Application-2f-User-2f-LWIP-2f-Target + diff --git a/STM32_Disco746G/STM32CubeIDE/Debug/Application/User/Startup/subdir.mk b/STM32_Disco746G/STM32CubeIDE/Debug/Application/User/Startup/subdir.mk index 59575a18bdf0a44a29020578302f938d91be4808..e2b1c3de459d96a19a59ca914ffd041452200bce 100644 --- a/STM32_Disco746G/STM32CubeIDE/Debug/Application/User/Startup/subdir.mk +++ b/STM32_Disco746G/STM32CubeIDE/Debug/Application/User/Startup/subdir.mk @@ -1,6 +1,6 @@ ################################################################################ # Automatically-generated file. Do not edit! -# Toolchain: GNU Tools for STM32 (10.3-2021.10) +# Toolchain: GNU Tools for STM32 (11.3.rel1) ################################################################################ # Add inputs and outputs from these tool invocations to the build variables diff --git a/STM32_Disco746G/STM32CubeIDE/Debug/Application/User/TouchGFX/App/subdir.mk b/STM32_Disco746G/STM32CubeIDE/Debug/Application/User/TouchGFX/App/subdir.mk index 3dfdb375ea290502edf628588ef0ead27ab9834f..4048328c0fc75e8f265a24df527169312657e2f8 100644 --- a/STM32_Disco746G/STM32CubeIDE/Debug/Application/User/TouchGFX/App/subdir.mk +++ b/STM32_Disco746G/STM32CubeIDE/Debug/Application/User/TouchGFX/App/subdir.mk @@ -1,11 +1,11 @@ ################################################################################ # Automatically-generated file. Do not edit! -# Toolchain: GNU Tools for STM32 (10.3-2021.10) +# Toolchain: GNU Tools for STM32 (11.3.rel1) ################################################################################ # Add inputs and outputs from these tool invocations to the build variables C_SRCS += \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/App/app_touchgfx.c +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/App/app_touchgfx.c C_DEPS += \ ./Application/User/TouchGFX/App/app_touchgfx.d @@ -15,8 +15,8 @@ OBJS += \ # Each subdirectory must supply rules for building sources it contributes -Application/User/TouchGFX/App/app_touchgfx.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/App/app_touchgfx.c Application/User/TouchGFX/App/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Application/User/TouchGFX/App/app_touchgfx.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/App/app_touchgfx.c Application/User/TouchGFX/App/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" clean: clean-Application-2f-User-2f-TouchGFX-2f-App diff --git a/STM32_Disco746G/STM32CubeIDE/Debug/Application/User/TouchGFX/target/generated/subdir.mk b/STM32_Disco746G/STM32CubeIDE/Debug/Application/User/TouchGFX/target/generated/subdir.mk index 998978cdfaf6d50048c42fcb558cef49e13654d3..199c9dc43c6c980b170df3adc53449da6b738b52 100644 --- a/STM32_Disco746G/STM32CubeIDE/Debug/Application/User/TouchGFX/target/generated/subdir.mk +++ b/STM32_Disco746G/STM32CubeIDE/Debug/Application/User/TouchGFX/target/generated/subdir.mk @@ -1,15 +1,15 @@ ################################################################################ # Automatically-generated file. Do not edit! -# Toolchain: GNU Tools for STM32 (10.3-2021.10) +# Toolchain: GNU Tools for STM32 (11.3.rel1) ################################################################################ # Add inputs and outputs from these tool invocations to the build variables CPP_SRCS += \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/target/generated/OSWrappers.cpp \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/target/generated/STM32DMA.cpp \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/target/generated/SoftwareMJPEGDecoder.cpp \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/target/generated/TouchGFXConfiguration.cpp \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/target/generated/TouchGFXGeneratedHAL.cpp +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/target/generated/OSWrappers.cpp \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/target/generated/STM32DMA.cpp \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/target/generated/SoftwareMJPEGDecoder.cpp \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/target/generated/TouchGFXConfiguration.cpp \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/target/generated/TouchGFXGeneratedHAL.cpp OBJS += \ ./Application/User/TouchGFX/target/generated/OSWrappers.o \ @@ -27,16 +27,16 @@ CPP_DEPS += \ # Each subdirectory must supply rules for building sources it contributes -Application/User/TouchGFX/target/generated/OSWrappers.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/target/generated/OSWrappers.cpp Application/User/TouchGFX/target/generated/subdir.mk - arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Application/User/TouchGFX/target/generated/STM32DMA.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/target/generated/STM32DMA.cpp Application/User/TouchGFX/target/generated/subdir.mk - arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/target/generated/SoftwareMJPEGDecoder.cpp Application/User/TouchGFX/target/generated/subdir.mk - arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/target/generated/TouchGFXConfiguration.cpp Application/User/TouchGFX/target/generated/subdir.mk - arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/target/generated/TouchGFXGeneratedHAL.cpp Application/User/TouchGFX/target/generated/subdir.mk - arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Application/User/TouchGFX/target/generated/OSWrappers.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/target/generated/OSWrappers.cpp Application/User/TouchGFX/target/generated/subdir.mk + arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Application/User/TouchGFX/target/generated/STM32DMA.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/target/generated/STM32DMA.cpp Application/User/TouchGFX/target/generated/subdir.mk + arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/target/generated/SoftwareMJPEGDecoder.cpp Application/User/TouchGFX/target/generated/subdir.mk + arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/target/generated/TouchGFXConfiguration.cpp Application/User/TouchGFX/target/generated/subdir.mk + arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/target/generated/TouchGFXGeneratedHAL.cpp Application/User/TouchGFX/target/generated/subdir.mk + arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" clean: clean-Application-2f-User-2f-TouchGFX-2f-target-2f-generated diff --git a/STM32_Disco746G/STM32CubeIDE/Debug/Application/User/TouchGFX/target/subdir.mk b/STM32_Disco746G/STM32CubeIDE/Debug/Application/User/TouchGFX/target/subdir.mk index 9b208c7c560ba6c9bbd52cb9bf39886ef42a7610..01add16783bfdbf31a9ecfef0851faf2b1274f03 100644 --- a/STM32_Disco746G/STM32CubeIDE/Debug/Application/User/TouchGFX/target/subdir.mk +++ b/STM32_Disco746G/STM32CubeIDE/Debug/Application/User/TouchGFX/target/subdir.mk @@ -1,14 +1,14 @@ ################################################################################ # Automatically-generated file. Do not edit! -# Toolchain: GNU Tools for STM32 (10.3-2021.10) +# Toolchain: GNU Tools for STM32 (11.3.rel1) ################################################################################ # Add inputs and outputs from these tool invocations to the build variables CPP_SRCS += \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/target/CortexMMCUInstrumentation.cpp \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/target/STM32TouchController.cpp \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/target/TouchGFXGPIO.cpp \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/target/TouchGFXHAL.cpp +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/target/CortexMMCUInstrumentation.cpp \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/target/STM32TouchController.cpp \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/target/TouchGFXGPIO.cpp \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/target/TouchGFXHAL.cpp OBJS += \ ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o \ @@ -24,14 +24,14 @@ CPP_DEPS += \ # Each subdirectory must supply rules for building sources it contributes -Application/User/TouchGFX/target/CortexMMCUInstrumentation.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/target/CortexMMCUInstrumentation.cpp Application/User/TouchGFX/target/subdir.mk - arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Application/User/TouchGFX/target/STM32TouchController.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/target/STM32TouchController.cpp Application/User/TouchGFX/target/subdir.mk - arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Application/User/TouchGFX/target/TouchGFXGPIO.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/target/TouchGFXGPIO.cpp Application/User/TouchGFX/target/subdir.mk - arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Application/User/TouchGFX/target/TouchGFXHAL.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/target/TouchGFXHAL.cpp Application/User/TouchGFX/target/subdir.mk - arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Application/User/TouchGFX/target/CortexMMCUInstrumentation.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/target/CortexMMCUInstrumentation.cpp Application/User/TouchGFX/target/subdir.mk + arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Application/User/TouchGFX/target/STM32TouchController.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/target/STM32TouchController.cpp Application/User/TouchGFX/target/subdir.mk + arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Application/User/TouchGFX/target/TouchGFXGPIO.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/target/TouchGFXGPIO.cpp Application/User/TouchGFX/target/subdir.mk + arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Application/User/TouchGFX/target/TouchGFXHAL.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/target/TouchGFXHAL.cpp Application/User/TouchGFX/target/subdir.mk + arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" clean: clean-Application-2f-User-2f-TouchGFX-2f-target diff --git a/STM32_Disco746G/STM32CubeIDE/Debug/Application/User/generated/subdir.mk b/STM32_Disco746G/STM32CubeIDE/Debug/Application/User/generated/subdir.mk index 27447a7c81331a661d30da2a298b9036c12f4532..6c78541e382c68e9d1960f9116c2820368816c56 100644 --- a/STM32_Disco746G/STM32CubeIDE/Debug/Application/User/generated/subdir.mk +++ b/STM32_Disco746G/STM32CubeIDE/Debug/Application/User/generated/subdir.mk @@ -1,35 +1,35 @@ ################################################################################ # Automatically-generated file. Do not edit! -# Toolchain: GNU Tools for STM32 (10.3-2021.10) +# Toolchain: GNU Tools for STM32 (11.3.rel1) ################################################################################ # Add inputs and outputs from these tool invocations to the build variables CPP_SRCS += \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/generated/fonts/src/ApplicationFontProvider.cpp \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/generated/images/src/BitmapDatabase.cpp \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/generated/fonts/src/CachedFont.cpp \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/generated/fonts/src/FontCache.cpp \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/generated/fonts/src/Font_verdana_10_4bpp_0.cpp \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/generated/fonts/src/Font_verdana_20_4bpp_0.cpp \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/generated/fonts/src/Font_verdana_40_4bpp_0.cpp \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/generated/gui_generated/src/common/FrontendApplicationBase.cpp \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/generated/fonts/src/GeneratedFont.cpp \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/generated/fonts/src/Kerning_verdana_10_4bpp.cpp \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/generated/fonts/src/Kerning_verdana_20_4bpp.cpp \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/generated/fonts/src/Kerning_verdana_40_4bpp.cpp \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/generated/texts/src/LanguageGb.cpp \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/generated/gui_generated/src/mainscreen_screen/MainScreenViewBase.cpp \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/generated/images/src/SVGDatabase.cpp \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/generated/gui_generated/src/containers/SliderContainerBase.cpp \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/generated/fonts/src/Table_verdana_10_4bpp.cpp \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/generated/fonts/src/Table_verdana_20_4bpp.cpp \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/generated/fonts/src/Table_verdana_40_4bpp.cpp \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/generated/texts/src/Texts.cpp \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/generated/texts/src/TypedTextDatabase.cpp \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/generated/fonts/src/UnmappedDataFont.cpp \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/generated/images/src/__designer/image_Blue_Slider_Vertical_Small_Indicators_Slider3_Vertical_Round_nob.cpp \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/generated/images/src/__designer/image_Blue_Slider_Vertical_Small_Slider3_Vertical_Round_back.cpp \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/generated/images/src/__designer/image_Blue_Slider_Vertical_Small_Slider3_Vertical_Round_fill.cpp +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/generated/fonts/src/ApplicationFontProvider.cpp \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/generated/images/src/BitmapDatabase.cpp \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/generated/fonts/src/CachedFont.cpp \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/generated/fonts/src/FontCache.cpp \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/generated/fonts/src/Font_verdana_10_4bpp_0.cpp \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/generated/fonts/src/Font_verdana_20_4bpp_0.cpp \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/generated/fonts/src/Font_verdana_40_4bpp_0.cpp \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/generated/gui_generated/src/common/FrontendApplicationBase.cpp \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/generated/fonts/src/GeneratedFont.cpp \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/generated/fonts/src/Kerning_verdana_10_4bpp.cpp \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/generated/fonts/src/Kerning_verdana_20_4bpp.cpp \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/generated/fonts/src/Kerning_verdana_40_4bpp.cpp \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/generated/texts/src/LanguageGb.cpp \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/generated/gui_generated/src/mainscreen_screen/MainScreenViewBase.cpp \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/generated/images/src/SVGDatabase.cpp \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/generated/gui_generated/src/containers/SliderContainerBase.cpp \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/generated/fonts/src/Table_verdana_10_4bpp.cpp \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/generated/fonts/src/Table_verdana_20_4bpp.cpp \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/generated/fonts/src/Table_verdana_40_4bpp.cpp \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/generated/texts/src/Texts.cpp \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/generated/texts/src/TypedTextDatabase.cpp \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/generated/fonts/src/UnmappedDataFont.cpp \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/generated/images/src/__designer/image_Blue_Slider_Vertical_Small_Indicators_Slider3_Vertical_Round_nob.cpp \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/generated/images/src/__designer/image_Blue_Slider_Vertical_Small_Slider3_Vertical_Round_back.cpp \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/generated/images/src/__designer/image_Blue_Slider_Vertical_Small_Slider3_Vertical_Round_fill.cpp OBJS += \ ./Application/User/generated/ApplicationFontProvider.o \ @@ -87,56 +87,56 @@ CPP_DEPS += \ # Each subdirectory must supply rules for building sources it contributes -Application/User/generated/ApplicationFontProvider.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/generated/fonts/src/ApplicationFontProvider.cpp Application/User/generated/subdir.mk - arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Application/User/generated/BitmapDatabase.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/generated/images/src/BitmapDatabase.cpp Application/User/generated/subdir.mk - arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Application/User/generated/CachedFont.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/generated/fonts/src/CachedFont.cpp Application/User/generated/subdir.mk - arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Application/User/generated/FontCache.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/generated/fonts/src/FontCache.cpp Application/User/generated/subdir.mk - arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Application/User/generated/Font_verdana_10_4bpp_0.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/generated/fonts/src/Font_verdana_10_4bpp_0.cpp Application/User/generated/subdir.mk - arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Application/User/generated/Font_verdana_20_4bpp_0.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/generated/fonts/src/Font_verdana_20_4bpp_0.cpp Application/User/generated/subdir.mk - arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Application/User/generated/Font_verdana_40_4bpp_0.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/generated/fonts/src/Font_verdana_40_4bpp_0.cpp Application/User/generated/subdir.mk - arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Application/User/generated/FrontendApplicationBase.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/generated/gui_generated/src/common/FrontendApplicationBase.cpp Application/User/generated/subdir.mk - arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Application/User/generated/GeneratedFont.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/generated/fonts/src/GeneratedFont.cpp Application/User/generated/subdir.mk - arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Application/User/generated/Kerning_verdana_10_4bpp.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/generated/fonts/src/Kerning_verdana_10_4bpp.cpp Application/User/generated/subdir.mk - arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Application/User/generated/Kerning_verdana_20_4bpp.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/generated/fonts/src/Kerning_verdana_20_4bpp.cpp Application/User/generated/subdir.mk - arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Application/User/generated/Kerning_verdana_40_4bpp.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/generated/fonts/src/Kerning_verdana_40_4bpp.cpp Application/User/generated/subdir.mk - arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Application/User/generated/LanguageGb.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/generated/texts/src/LanguageGb.cpp Application/User/generated/subdir.mk - arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Application/User/generated/MainScreenViewBase.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/generated/gui_generated/src/mainscreen_screen/MainScreenViewBase.cpp Application/User/generated/subdir.mk - arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Application/User/generated/SVGDatabase.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/generated/images/src/SVGDatabase.cpp Application/User/generated/subdir.mk - arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Application/User/generated/SliderContainerBase.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/generated/gui_generated/src/containers/SliderContainerBase.cpp Application/User/generated/subdir.mk - arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Application/User/generated/Table_verdana_10_4bpp.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/generated/fonts/src/Table_verdana_10_4bpp.cpp Application/User/generated/subdir.mk - arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Application/User/generated/Table_verdana_20_4bpp.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/generated/fonts/src/Table_verdana_20_4bpp.cpp Application/User/generated/subdir.mk - arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Application/User/generated/Table_verdana_40_4bpp.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/generated/fonts/src/Table_verdana_40_4bpp.cpp Application/User/generated/subdir.mk - arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Application/User/generated/Texts.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/generated/texts/src/Texts.cpp Application/User/generated/subdir.mk - arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Application/User/generated/TypedTextDatabase.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/generated/texts/src/TypedTextDatabase.cpp Application/User/generated/subdir.mk - arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Application/User/generated/UnmappedDataFont.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/generated/fonts/src/UnmappedDataFont.cpp Application/User/generated/subdir.mk - arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Application/User/generated/image_Blue_Slider_Vertical_Small_Indicators_Slider3_Vertical_Round_nob.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/generated/images/src/__designer/image_Blue_Slider_Vertical_Small_Indicators_Slider3_Vertical_Round_nob.cpp Application/User/generated/subdir.mk - arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Application/User/generated/image_Blue_Slider_Vertical_Small_Slider3_Vertical_Round_back.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/generated/images/src/__designer/image_Blue_Slider_Vertical_Small_Slider3_Vertical_Round_back.cpp Application/User/generated/subdir.mk - arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Application/User/generated/image_Blue_Slider_Vertical_Small_Slider3_Vertical_Round_fill.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/generated/images/src/__designer/image_Blue_Slider_Vertical_Small_Slider3_Vertical_Round_fill.cpp Application/User/generated/subdir.mk - arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Application/User/generated/ApplicationFontProvider.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/generated/fonts/src/ApplicationFontProvider.cpp Application/User/generated/subdir.mk + arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Application/User/generated/BitmapDatabase.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/generated/images/src/BitmapDatabase.cpp Application/User/generated/subdir.mk + arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Application/User/generated/CachedFont.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/generated/fonts/src/CachedFont.cpp Application/User/generated/subdir.mk + arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Application/User/generated/FontCache.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/generated/fonts/src/FontCache.cpp Application/User/generated/subdir.mk + arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Application/User/generated/Font_verdana_10_4bpp_0.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/generated/fonts/src/Font_verdana_10_4bpp_0.cpp Application/User/generated/subdir.mk + arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Application/User/generated/Font_verdana_20_4bpp_0.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/generated/fonts/src/Font_verdana_20_4bpp_0.cpp Application/User/generated/subdir.mk + arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Application/User/generated/Font_verdana_40_4bpp_0.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/generated/fonts/src/Font_verdana_40_4bpp_0.cpp Application/User/generated/subdir.mk + arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Application/User/generated/FrontendApplicationBase.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/generated/gui_generated/src/common/FrontendApplicationBase.cpp Application/User/generated/subdir.mk + arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Application/User/generated/GeneratedFont.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/generated/fonts/src/GeneratedFont.cpp Application/User/generated/subdir.mk + arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Application/User/generated/Kerning_verdana_10_4bpp.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/generated/fonts/src/Kerning_verdana_10_4bpp.cpp Application/User/generated/subdir.mk + arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Application/User/generated/Kerning_verdana_20_4bpp.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/generated/fonts/src/Kerning_verdana_20_4bpp.cpp Application/User/generated/subdir.mk + arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Application/User/generated/Kerning_verdana_40_4bpp.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/generated/fonts/src/Kerning_verdana_40_4bpp.cpp Application/User/generated/subdir.mk + arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Application/User/generated/LanguageGb.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/generated/texts/src/LanguageGb.cpp Application/User/generated/subdir.mk + arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Application/User/generated/MainScreenViewBase.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/generated/gui_generated/src/mainscreen_screen/MainScreenViewBase.cpp Application/User/generated/subdir.mk + arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Application/User/generated/SVGDatabase.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/generated/images/src/SVGDatabase.cpp Application/User/generated/subdir.mk + arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Application/User/generated/SliderContainerBase.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/generated/gui_generated/src/containers/SliderContainerBase.cpp Application/User/generated/subdir.mk + arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Application/User/generated/Table_verdana_10_4bpp.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/generated/fonts/src/Table_verdana_10_4bpp.cpp Application/User/generated/subdir.mk + arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Application/User/generated/Table_verdana_20_4bpp.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/generated/fonts/src/Table_verdana_20_4bpp.cpp Application/User/generated/subdir.mk + arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Application/User/generated/Table_verdana_40_4bpp.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/generated/fonts/src/Table_verdana_40_4bpp.cpp Application/User/generated/subdir.mk + arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Application/User/generated/Texts.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/generated/texts/src/Texts.cpp Application/User/generated/subdir.mk + arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Application/User/generated/TypedTextDatabase.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/generated/texts/src/TypedTextDatabase.cpp Application/User/generated/subdir.mk + arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Application/User/generated/UnmappedDataFont.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/generated/fonts/src/UnmappedDataFont.cpp Application/User/generated/subdir.mk + arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Application/User/generated/image_Blue_Slider_Vertical_Small_Indicators_Slider3_Vertical_Round_nob.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/generated/images/src/__designer/image_Blue_Slider_Vertical_Small_Indicators_Slider3_Vertical_Round_nob.cpp Application/User/generated/subdir.mk + arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Application/User/generated/image_Blue_Slider_Vertical_Small_Slider3_Vertical_Round_back.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/generated/images/src/__designer/image_Blue_Slider_Vertical_Small_Slider3_Vertical_Round_back.cpp Application/User/generated/subdir.mk + arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Application/User/generated/image_Blue_Slider_Vertical_Small_Slider3_Vertical_Round_fill.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/generated/images/src/__designer/image_Blue_Slider_Vertical_Small_Slider3_Vertical_Round_fill.cpp Application/User/generated/subdir.mk + arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" clean: clean-Application-2f-User-2f-generated diff --git a/STM32_Disco746G/STM32CubeIDE/Debug/Application/User/gui/subdir.mk b/STM32_Disco746G/STM32CubeIDE/Debug/Application/User/gui/subdir.mk index 310a7d0246e1eb7aa50e957a0e342f26f113237f..d0d1e142a28e28b06d78759f4e8cb6d426de9ba8 100644 --- a/STM32_Disco746G/STM32CubeIDE/Debug/Application/User/gui/subdir.mk +++ b/STM32_Disco746G/STM32CubeIDE/Debug/Application/User/gui/subdir.mk @@ -1,15 +1,15 @@ ################################################################################ # Automatically-generated file. Do not edit! -# Toolchain: GNU Tools for STM32 (10.3-2021.10) +# Toolchain: GNU Tools for STM32 (11.3.rel1) ################################################################################ # Add inputs and outputs from these tool invocations to the build variables CPP_SRCS += \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/gui/src/common/FrontendApplication.cpp \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/gui/src/mainscreen_screen/MainScreenPresenter.cpp \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/gui/src/mainscreen_screen/MainScreenView.cpp \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/gui/src/model/Model.cpp \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/gui/src/containers/SliderContainer.cpp +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/gui/src/common/FrontendApplication.cpp \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/gui/src/mainscreen_screen/MainScreenPresenter.cpp \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/gui/src/mainscreen_screen/MainScreenView.cpp \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/gui/src/model/Model.cpp \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/gui/src/containers/SliderContainer.cpp OBJS += \ ./Application/User/gui/FrontendApplication.o \ @@ -27,16 +27,16 @@ CPP_DEPS += \ # Each subdirectory must supply rules for building sources it contributes -Application/User/gui/FrontendApplication.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/gui/src/common/FrontendApplication.cpp Application/User/gui/subdir.mk - arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Application/User/gui/MainScreenPresenter.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/gui/src/mainscreen_screen/MainScreenPresenter.cpp Application/User/gui/subdir.mk - arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Application/User/gui/MainScreenView.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/gui/src/mainscreen_screen/MainScreenView.cpp Application/User/gui/subdir.mk - arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Application/User/gui/Model.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/gui/src/model/Model.cpp Application/User/gui/subdir.mk - arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Application/User/gui/SliderContainer.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/TouchGFX/gui/src/containers/SliderContainer.cpp Application/User/gui/subdir.mk - arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Application/User/gui/FrontendApplication.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/gui/src/common/FrontendApplication.cpp Application/User/gui/subdir.mk + arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Application/User/gui/MainScreenPresenter.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/gui/src/mainscreen_screen/MainScreenPresenter.cpp Application/User/gui/subdir.mk + arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Application/User/gui/MainScreenView.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/gui/src/mainscreen_screen/MainScreenView.cpp Application/User/gui/subdir.mk + arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Application/User/gui/Model.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/gui/src/model/Model.cpp Application/User/gui/subdir.mk + arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Application/User/gui/SliderContainer.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/TouchGFX/gui/src/containers/SliderContainer.cpp Application/User/gui/subdir.mk + arm-none-eabi-g++ "$<" -mcpu=cortex-m7 -std=gnu++14 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -femit-class-debug-always -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" clean: clean-Application-2f-User-2f-gui diff --git a/STM32_Disco746G/STM32CubeIDE/Debug/Drivers/BSP/Components/subdir.mk b/STM32_Disco746G/STM32CubeIDE/Debug/Drivers/BSP/Components/subdir.mk new file mode 100644 index 0000000000000000000000000000000000000000..dfa6495d2e6ac73a399360366f8ee972cfb4fdc4 --- /dev/null +++ b/STM32_Disco746G/STM32CubeIDE/Debug/Drivers/BSP/Components/subdir.mk @@ -0,0 +1,27 @@ +################################################################################ +# Automatically-generated file. Do not edit! +# Toolchain: GNU Tools for STM32 (11.3.rel1) +################################################################################ + +# Add inputs and outputs from these tool invocations to the build variables +C_SRCS += \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Drivers/BSP/Components/lan8742/lan8742.c + +C_DEPS += \ +./Drivers/BSP/Components/lan8742.d + +OBJS += \ +./Drivers/BSP/Components/lan8742.o + + +# Each subdirectory must supply rules for building sources it contributes +Drivers/BSP/Components/lan8742.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Drivers/BSP/Components/lan8742/lan8742.c Drivers/BSP/Components/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" + +clean: clean-Drivers-2f-BSP-2f-Components + +clean-Drivers-2f-BSP-2f-Components: + -$(RM) ./Drivers/BSP/Components/lan8742.cyclo ./Drivers/BSP/Components/lan8742.d ./Drivers/BSP/Components/lan8742.o ./Drivers/BSP/Components/lan8742.su + +.PHONY: clean-Drivers-2f-BSP-2f-Components + diff --git a/STM32_Disco746G/STM32CubeIDE/Debug/Drivers/BSP/subdir.mk b/STM32_Disco746G/STM32CubeIDE/Debug/Drivers/BSP/subdir.mk index 1df4d07f4bfee4230bf97519dedfa03af45e33d4..7922f0015fddf01bf79527b9ff31cdaa195673a2 100644 --- a/STM32_Disco746G/STM32CubeIDE/Debug/Drivers/BSP/subdir.mk +++ b/STM32_Disco746G/STM32CubeIDE/Debug/Drivers/BSP/subdir.mk @@ -1,11 +1,11 @@ ################################################################################ # Automatically-generated file. Do not edit! -# Toolchain: GNU Tools for STM32 (10.3-2021.10) +# Toolchain: GNU Tools for STM32 (11.3.rel1) ################################################################################ # Add inputs and outputs from these tool invocations to the build variables C_SRCS += \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_qspi.c +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_qspi.c C_DEPS += \ ./Drivers/BSP/stm32746g_discovery_qspi.d @@ -15,8 +15,8 @@ OBJS += \ # Each subdirectory must supply rules for building sources it contributes -Drivers/BSP/stm32746g_discovery_qspi.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_qspi.c Drivers/BSP/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Drivers/BSP/stm32746g_discovery_qspi.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_qspi.c Drivers/BSP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" clean: clean-Drivers-2f-BSP diff --git a/STM32_Disco746G/STM32CubeIDE/Debug/Drivers/CMSIS/subdir.mk b/STM32_Disco746G/STM32CubeIDE/Debug/Drivers/CMSIS/subdir.mk index d9a5150db5efa8658000988d69f2d3908e6ed3c9..e639a76b6f1ea1c453d0e3e8c1a9bf85330d7f34 100644 --- a/STM32_Disco746G/STM32CubeIDE/Debug/Drivers/CMSIS/subdir.mk +++ b/STM32_Disco746G/STM32CubeIDE/Debug/Drivers/CMSIS/subdir.mk @@ -1,11 +1,11 @@ ################################################################################ # Automatically-generated file. Do not edit! -# Toolchain: GNU Tools for STM32 (10.3-2021.10) +# Toolchain: GNU Tools for STM32 (11.3.rel1) ################################################################################ # Add inputs and outputs from these tool invocations to the build variables C_SRCS += \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Core/Src/system_stm32f7xx.c +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Core/Src/system_stm32f7xx.c C_DEPS += \ ./Drivers/CMSIS/system_stm32f7xx.d @@ -15,8 +15,8 @@ OBJS += \ # Each subdirectory must supply rules for building sources it contributes -Drivers/CMSIS/system_stm32f7xx.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Core/Src/system_stm32f7xx.c Drivers/CMSIS/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Drivers/CMSIS/system_stm32f7xx.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Core/Src/system_stm32f7xx.c Drivers/CMSIS/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" clean: clean-Drivers-2f-CMSIS diff --git a/STM32_Disco746G/STM32CubeIDE/Debug/Drivers/Components/subdir.mk b/STM32_Disco746G/STM32CubeIDE/Debug/Drivers/Components/subdir.mk index 2f22bb05da51acab0cd2d97e08aaeee122833b09..8c0ac220821d9d213e61ed8063e57a030a8a5fb7 100644 --- a/STM32_Disco746G/STM32CubeIDE/Debug/Drivers/Components/subdir.mk +++ b/STM32_Disco746G/STM32CubeIDE/Debug/Drivers/Components/subdir.mk @@ -1,11 +1,11 @@ ################################################################################ # Automatically-generated file. Do not edit! -# Toolchain: GNU Tools for STM32 (10.3-2021.10) +# Toolchain: GNU Tools for STM32 (11.3.rel1) ################################################################################ # Add inputs and outputs from these tool invocations to the build variables C_SRCS += \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Drivers/BSP/Components/ft5336/ft5336.c +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Drivers/BSP/Components/ft5336/ft5336.c C_DEPS += \ ./Drivers/Components/ft5336.d @@ -15,8 +15,8 @@ OBJS += \ # Each subdirectory must supply rules for building sources it contributes -Drivers/Components/ft5336.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Drivers/BSP/Components/ft5336/ft5336.c Drivers/Components/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Drivers/Components/ft5336.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Drivers/BSP/Components/ft5336/ft5336.c Drivers/Components/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" clean: clean-Drivers-2f-Components diff --git a/STM32_Disco746G/STM32CubeIDE/Debug/Drivers/STM32F7xx_HAL_Driver/subdir.mk b/STM32_Disco746G/STM32CubeIDE/Debug/Drivers/STM32F7xx_HAL_Driver/subdir.mk index 8904bad4e24086aef40339223399f7e4fd5025f1..6ce99f4eb63a307956c5b7af78d68e54aec5a650 100644 --- a/STM32_Disco746G/STM32CubeIDE/Debug/Drivers/STM32F7xx_HAL_Driver/subdir.mk +++ b/STM32_Disco746G/STM32CubeIDE/Debug/Drivers/STM32F7xx_HAL_Driver/subdir.mk @@ -1,35 +1,36 @@ ################################################################################ # Automatically-generated file. Do not edit! -# Toolchain: GNU Tools for STM32 (10.3-2021.10) +# Toolchain: GNU Tools for STM32 (11.3.rel1) ################################################################################ # Add inputs and outputs from these tool invocations to the build variables C_SRCS += \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_cortex.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_crc.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_crc_ex.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dma.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dma2d.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dma_ex.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dsi.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_exti.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_flash.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_flash_ex.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_gpio.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c_ex.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_ltdc.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_ltdc_ex.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_pwr.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_pwr_ex.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_qspi.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc_ex.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_sdram.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim_ex.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_fmc.c +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_cortex.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_crc.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_crc_ex.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dma.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dma2d.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dma_ex.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dsi.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_eth.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_exti.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_flash.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_flash_ex.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_gpio.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c_ex.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_ltdc.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_ltdc_ex.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_pwr.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_pwr_ex.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_qspi.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc_ex.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_sdram.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim_ex.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_fmc.c C_DEPS += \ ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.d \ @@ -40,6 +41,7 @@ C_DEPS += \ ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.d \ ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.d \ ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.d \ +./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.d \ ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.d \ ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.d \ ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.d \ @@ -67,6 +69,7 @@ OBJS += \ ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o \ ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o \ ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o \ +./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o \ ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o \ ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o \ ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o \ @@ -87,61 +90,63 @@ OBJS += \ # Each subdirectory must supply rules for building sources it contributes -Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal.c Drivers/STM32F7xx_HAL_Driver/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_cortex.c Drivers/STM32F7xx_HAL_Driver/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_crc.c Drivers/STM32F7xx_HAL_Driver/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_crc_ex.c Drivers/STM32F7xx_HAL_Driver/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dma.c Drivers/STM32F7xx_HAL_Driver/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dma2d.c Drivers/STM32F7xx_HAL_Driver/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dma_ex.c Drivers/STM32F7xx_HAL_Driver/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dsi.c Drivers/STM32F7xx_HAL_Driver/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_exti.c Drivers/STM32F7xx_HAL_Driver/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_flash.c Drivers/STM32F7xx_HAL_Driver/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_flash_ex.c Drivers/STM32F7xx_HAL_Driver/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_gpio.c Drivers/STM32F7xx_HAL_Driver/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c.c Drivers/STM32F7xx_HAL_Driver/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c_ex.c Drivers/STM32F7xx_HAL_Driver/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_ltdc.c Drivers/STM32F7xx_HAL_Driver/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_ltdc_ex.c Drivers/STM32F7xx_HAL_Driver/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_pwr.c Drivers/STM32F7xx_HAL_Driver/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_pwr_ex.c Drivers/STM32F7xx_HAL_Driver/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_qspi.c Drivers/STM32F7xx_HAL_Driver/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc.c Drivers/STM32F7xx_HAL_Driver/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc_ex.c Drivers/STM32F7xx_HAL_Driver/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_sdram.c Drivers/STM32F7xx_HAL_Driver/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim.c Drivers/STM32F7xx_HAL_Driver/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim_ex.c Drivers/STM32F7xx_HAL_Driver/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_fmc.c Drivers/STM32F7xx_HAL_Driver/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal.c Drivers/STM32F7xx_HAL_Driver/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_cortex.c Drivers/STM32F7xx_HAL_Driver/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_crc.c Drivers/STM32F7xx_HAL_Driver/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_crc_ex.c Drivers/STM32F7xx_HAL_Driver/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dma.c Drivers/STM32F7xx_HAL_Driver/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dma2d.c Drivers/STM32F7xx_HAL_Driver/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dma_ex.c Drivers/STM32F7xx_HAL_Driver/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dsi.c Drivers/STM32F7xx_HAL_Driver/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_eth.c Drivers/STM32F7xx_HAL_Driver/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_exti.c Drivers/STM32F7xx_HAL_Driver/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_flash.c Drivers/STM32F7xx_HAL_Driver/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_flash_ex.c Drivers/STM32F7xx_HAL_Driver/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_gpio.c Drivers/STM32F7xx_HAL_Driver/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c.c Drivers/STM32F7xx_HAL_Driver/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c_ex.c Drivers/STM32F7xx_HAL_Driver/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_ltdc.c Drivers/STM32F7xx_HAL_Driver/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_ltdc_ex.c Drivers/STM32F7xx_HAL_Driver/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_pwr.c Drivers/STM32F7xx_HAL_Driver/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_pwr_ex.c Drivers/STM32F7xx_HAL_Driver/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_qspi.c Drivers/STM32F7xx_HAL_Driver/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc.c Drivers/STM32F7xx_HAL_Driver/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc_ex.c Drivers/STM32F7xx_HAL_Driver/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_sdram.c Drivers/STM32F7xx_HAL_Driver/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim.c Drivers/STM32F7xx_HAL_Driver/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim_ex.c Drivers/STM32F7xx_HAL_Driver/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_fmc.c Drivers/STM32F7xx_HAL_Driver/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" clean: clean-Drivers-2f-STM32F7xx_HAL_Driver clean-Drivers-2f-STM32F7xx_HAL_Driver: - -$(RM) ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.cyclo ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.su ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.cyclo ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.su ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.cyclo ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.su ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.cyclo ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.su ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.cyclo ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.su ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.cyclo ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.su ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.cyclo ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.su ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.cyclo ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.su ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.cyclo ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.su ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.cyclo ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.su ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.cyclo ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.su ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.cyclo ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.su ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.cyclo ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.su ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.cyclo ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.su ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.cyclo ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.su ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.cyclo ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.su ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.cyclo ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.su ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.cyclo ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.su ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.cyclo ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.su ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.cyclo ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.su ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.cyclo ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.su ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.cyclo ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.su ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.cyclo ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.su ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.cyclo ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.su ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.cyclo ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.su + -$(RM) ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.cyclo ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.su ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.cyclo ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.su ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.cyclo ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.su ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.cyclo ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.su ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.cyclo ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.su ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.cyclo ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.su ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.cyclo ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.su ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.cyclo ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.su ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.cyclo ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.su ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.cyclo ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.su ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.cyclo ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.su ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.cyclo ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.su ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.cyclo ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.su ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.cyclo ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.su ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.cyclo ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.su ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.cyclo ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.su ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.cyclo ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.su ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.cyclo ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.su ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.cyclo ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.su ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.cyclo ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.su ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.cyclo ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.su ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.cyclo ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.su ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.cyclo ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.su ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.cyclo ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.su ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.cyclo ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.su ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.cyclo ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.su .PHONY: clean-Drivers-2f-STM32F7xx_HAL_Driver diff --git a/STM32_Disco746G/STM32CubeIDE/Debug/LightControlConvi_Disco746G.hex b/STM32_Disco746G/STM32CubeIDE/Debug/LightControlConvi_Disco746G.hex new file mode 100644 index 0000000000000000000000000000000000000000..c016faecb5a2758a5a2694bd03f1c858811d1945 --- /dev/null +++ b/STM32_Disco746G/STM32CubeIDE/Debug/LightControlConvi_Disco746G.hex @@ -0,0 +1,17896 @@ +:020000040800F2 +:1000000000000520B9240008951D0008971D000870 +:10001000991D00089B1D00089D1D000800000000A0 +:10002000000000000000000000000000F19900083E +:100030009F1D000800000000919A0008F59A000832 +:1000400009250008092500080925000809250008D8 +:1000500009250008092500080925000809250008C8 +:1000600009250008092500080925000809250008B8 +:1000700009250008092500080925000809250008A8 +:100080000925000809250008092500080925000898 +:100090000925000809250008092500080925000888 +:1000A0000925000809250008092500080925000878 +:1000B0000925000809250008092500080925000868 +:1000C0000925000809250008092500080925000858 +:1000D0000925000809250008092500080925000848 +:1000E0000925000809250008092500080925000838 +:1000F0000925000809250008092500080925000828 +:100100000925000809250008092500080925000817 +:100110000925000809250008A11D00080925000877 +:1001200009250008092500080925000809250008F7 +:1001300009250008AD1D000809250008092500084B +:1001400009250008092500080925000809250008D7 +:1001500009250008092500080925000809250008C7 +:1001600009250008092500080925000809250008B7 +:1001700009250008092500080925000800000000DD +:100180000925000809250008092500080925000897 +:100190000925000809250008092500080925000887 +:1001A000B91D000809250008C51D0008092500081B +:1001B0000925000809250008092500080925000867 +:0801C0000925000809250008CB +:1001D00010B5054C237833B9044B13B10448AFF381 +:1001E00000800123237010BD800200200000000069 +:1001F0001058030808B5034B1BB103490348AFF37C +:10020000008008BD00000000840200201058030890 +:1002100001F0FF01102A2BDB10F0070F08D010F8B7 +:10022000013B013A8B422DD010F0070F42B3F6D1BB +:10023000F0B441EA012141EA014122F007047FF0D4 +:1002400000070023F0E80256083C85EA010586EA2B +:10025000010685FA47F5A3FA87F586FA47F6A5FA67 +:1002600087F68EB9EED1F0BC01F0FF0102F0070273 +:1002700032B110F8013B013A83EA010313B1F8D11E +:100280000020704701387047002D06BF35460338FF +:10029000073815F0010F07D1013015F4807F02BF38 +:1002A000013015F4C03F0130F0BC0138704700BF89 +:1002B00081F0004102E000BF83F0004330B54FEA17 +:1002C00041044FEA430594EA050F08BF90EA020F84 +:1002D0001FBF54EA000C55EA020C7FEA645C7FEA17 +:1002E000655C00F0E2804FEA5454D4EB5555B8BF3A +:1002F0006D420CDD2C4480EA020281EA030382EAAB +:10030000000083EA010180EA020281EA0303362D3C +:1003100088BF30BD11F0004F4FEA01314FF4801C0F +:100320004CEA113102D0404261EB410113F0004F21 +:100330004FEA03334CEA133302D0524263EB4303D8 +:1003400094EA050F00F0A780A4F10104D5F1200E76 +:100350000DDB02FA0EFC22FA05F2801841F10001D1 +:1003600003FA0EF2801843FA05F359410EE0A5F1A5 +:1003700020050EF1200E012A03FA0EFC28BF4CF0D6 +:10038000020C43FA05F3C01851EBE37101F000458C +:1003900007D54FF0000EDCF1000C7EEB00006EEB99 +:1003A0000101B1F5801F1BD3B1F5001F0CD3490823 +:1003B0005FEA30004FEA3C0C04F101044FEA44527A +:1003C00012F5800F80F09A80BCF1004F08BF5FEA01 +:1003D000500C50F1000041EB045141EA050130BDE1 +:1003E0005FEA4C0C404141EB0101013C28BFB1F5F3 +:1003F000801FE9D291F0000F04BF01460020B1FA3E +:1004000081F308BF2033A3F10B03B3F120020CDA10 +:100410000C3208DD02F1140CC2F10C0201FA0CF0EE +:1004200021FA02F10CE002F11402D8BFC2F1200C53 +:1004300001FA02F120FA0CFCDCBF41EA0C01904009 +:10044000E41AA2BF01EB0451294330BD6FEA040452 +:100450001F3C1CDA0C340EDC04F11404C4F120023D +:1004600020FA04F001FA02F340EA030021FA04F34F +:1004700045EA030130BDC4F10C04C4F1200220FAA6 +:1004800002F001FA04F340EA0300294630BD21FAE4 +:1004900004F0294630BD94F0000F83F4801306BFAA +:1004A00081F480110134013D4EE77FEA645C18BF9E +:1004B0007FEA655C29D094EA050F08BF90EA020F35 +:1004C00005D054EA000C04BF1946104630BD91EA2D +:1004D000030F1EBF0021002030BD5FEA545C05D130 +:1004E0004000494128BF41F0004130BD14F580046F +:1004F0003CBF01F5801130BD01F0004545F0FE41E3 +:1005000041F470014FF0000030BD7FEA645C1ABF17 +:10051000194610467FEA655C1CBF0B46024650EA4E +:10052000013406BF52EA033591EA030F41F400217A +:1005300030BD00BF90F0000F04BF0021704730B500 +:100540004FF4806404F132044FF000054FF00001D5 +:1005500050E700BF90F0000F04BF0021704730B596 +:100560004FF4806404F1320410F0004548BF40426B +:100570004FF000013EE700BF42004FEAE2014FEAC0 +:1005800031014FEA02701FBF12F07F4393F07F4F9B +:1005900081F06051704732F07F4208BF704793F09E +:1005A0007F4F04BF41F40021704730B54FF46074B1 +:1005B00001F0004521F000411CE700BF50EA0102B4 +:1005C00008BF704730B54FF000050AE050EA01025D +:1005D00008BF704730B511F0004502D5404261EBCD +:1005E00041014FF4806404F132045FEA915C3FF40E +:1005F000D8AE4FF003025FEADC0C18BF03325FEAAB +:10060000DC0C18BF033202EBDC02C2F1200300FA5B +:1006100003FC20FA02F001FA03FE40EA0E0021FA80 +:1006200002F11444BDE600BF70B54FF0FF0C4CF46E +:10063000E06C1CEA11541DBF1CEA135594EA0C0F20 +:1006400095EA0C0F00F0DEF82C4481EA030621EA5B +:100650004C5123EA4C5350EA013518BF52EA033596 +:1006600041F4801143F4801338D0A0FB02CE4FF048 +:100670000005E1FB02E506F00042E0FB03E54FF078 +:100680000006E1FB03569CF0000F18BF4EF0010E70 +:10069000A4F1FF04B6F5007F64F5407404D25FEA6C +:1006A0004E0E6D4146EB060642EAC62141EA55511F +:1006B0004FEAC52040EA5E504FEACE2EB4F1FD0C61 +:1006C00088BFBCF5E06F1ED8BEF1004F08BF5FEADF +:1006D000500E50F1000041EB045170BD06F0004691 +:1006E00046EA010140EA020081EA0301B4EB5C043E +:1006F000C2BFD4EB0C0541EA045170BD41F4801136 +:100700004FF0000E013C00F3AB8014F1360FDEBF5A +:10071000002001F0004170BDC4F10004203C35DA36 +:100720000C341BDC04F11404C4F1200500FA05F3B9 +:1007300020FA04F001FA05F240EA020001F000425A +:1007400021F0004110EBD37021FA04F642EB0601D0 +:100750005EEA430E08BF20EAD37070BDC4F10C04FA +:10076000C4F1200500FA04F320FA05F001FA04F2BE +:1007700040EA020001F0004110EBD37041F10001AA +:100780005EEA430E08BF20EAD37070BDC4F12005B5 +:1007900000FA05F24EEA020E20FA04F301FA05F21D +:1007A00043EA020321FA04F001F0004121FA04F2C5 +:1007B00020EA020000EBD3705EEA430E08BF20EA95 +:1007C000D37070BD94F0000F0FD101F000464000CF +:1007D00041EB010111F4801F08BF013CF7D041EA51 +:1007E000060195F0000F18BF704703F00046520055 +:1007F00043EB030313F4801F08BF013DF7D043EA26 +:100800000603704794EA0C0F0CEA135518BF95EADB +:100810000C0F0CD050EA410618BF52EA4306D1D162 +:1008200081EA030101F000414FF0000070BD50EA81 +:10083000410606BF1046194652EA430619D094EA0B +:100840000C0F02D150EA013613D195EA0C0F05D1F5 +:1008500052EA03361CBF104619460AD181EA030149 +:1008600001F0004141F0FE4141F470014FF0000001 +:1008700070BD41F0FE4141F4780170BD70B54FF09C +:10088000FF0C4CF4E06C1CEA11541DBF1CEA13551C +:1008900094EA0C0F95EA0C0F00F0A7F8A4EB0504FE +:1008A00081EA030E52EA03354FEA013100F08880F5 +:1008B0004FEA03334FF0805545EA131343EA1263BE +:1008C0004FEA022245EA111545EA10654FEA002673 +:1008D0000EF000419D4208BF964244F1FD0404F52C +:1008E000407402D25B084FEA3202B61A65EB030588 +:1008F0005B084FEA32024FF480104FF4002CB6EB45 +:10090000020E75EB030E22BFB61A754640EA0C00C4 +:100910005B084FEA3202B6EB020E75EB030E22BF04 +:10092000B61A754640EA5C005B084FEA3202B6EB45 +:10093000020E75EB030E22BFB61A754640EA9C0004 +:100940005B084FEA3202B6EB020E75EB030E22BFD4 +:10095000B61A754640EADC0055EA060E18D04FEA92 +:10096000051545EA16754FEA06164FEAC30343EA32 +:1009700052734FEAC2025FEA1C1CC0D111F4801FFF +:100980000BD141EA00014FF000004FF0004CB6E7F8 +:1009900011F4801F04BF01430020B4F1FD0C88BF97 +:1009A000BCF5E06F3FF6AFAEB5EB030C04BFB6EBA2 +:1009B000020C5FEA500C50F1000041EB045170BD95 +:1009C0000EF0004E4EEA113114EB5C04C2BFD4EBC2 +:1009D0000C0541EA045170BD41F480114FF0000E46 +:1009E000013C90E645EA060E8DE60CEA135594EAC2 +:1009F0000C0F08BF95EA0C0F3FF43BAF94EA0C0FC5 +:100A00000AD150EA01347FF434AF95EA0C0F7FF439 +:100A100025AF104619462CE795EA0C0F06D152EA8D +:100A200003353FF4FDAE1046194622E750EA410671 +:100A300018BF52EA43067FF4C5AE50EA41047FF482 +:100A40000DAF52EA43057FF4EBAE12E74FEA4102E5 +:100A5000B2F1E04324BFB3F5001CDCF1FE5C0DD91C +:100A600001F0004C4FEAC0024CEA5070B2F1004F66 +:100A700040EB830008BF20F00100704711F0804F69 +:100A800021D113F13872BCBF01F00040704741F42E +:100A900080114FEA5252C2F11802C2F1200C10FA32 +:100AA0000CF320FA02F018BF40F001004FEAC12316 +:100AB0004FEAD32303FA0CFC40EA0C0023FA02F3BA +:100AC0004FEA4303CCE77FEA625307D150EA013390 +:100AD0001EBF4FF0FE4040F44000704701F0004060 +:100AE00040F0FE4040F40000704700BF53B94AB9DF +:100AF000002908BF00281CBF4FF0FF314FF0FF3026 +:100B000000F070B9ADF1080C6DE904CE00F006F804 +:100B1000DDF804E0DDE9022304B070472DE9F04779 +:100B2000089E0D4604460F46002B4AD18A42944641 +:100B300065D9B2FA82F343B102FA03FCC3F1200291 +:100B40009F4020FA02F217439C404FEA1C4E1FFAC6 +:100B50008CF5B7FBFEF1220C0EFB117742EA07423F +:100B600001FB05F090420AD91CEB020201F1FF37AC +:100B700080F01C81904240F2198102396244121ABD +:100B8000A4B2B2FBFEF00EFB102244EA024400FBCA +:100B900005F5A5420AD91CEB040400F1FF3280F0F0 +:100BA0000781A54240F204816444023840EA0140D2 +:100BB000641B00211EB1DC400023C6E90043BDE8F0 +:100BC000F0878B4208D9002E00F0ED800021C6E9A5 +:100BD00000050846BDE8F087B3FA83F1002949D142 +:100BE000AB4202D3824200F2F880841A65EB030222 +:100BF00001201746002EE2D0C6E90047DFE702B920 +:100C0000FFDEB2FA82F3002B40F090808A1A4FEA9E +:100C10001C471FFA8CFE0121B2FBF7F507FB1520DC +:100C2000220C42EA00420EFB05F0904208D91CEB70 +:100C3000020205F1FF3802D2904200F2CB80454615 +:100C4000121AA4B2B2FBF7F007FB102244EA0244E6 +:100C50000EFB00FEA64508D91CEB040400F1FF3290 +:100C600002D2A64500F2BB801046A4EB0E0440EA77 +:100C700005409FE7C1F120078B4022FA07FC4CEAB0 +:100C8000030C05FA01F420FA07F3FD404FEA1C4972 +:100C90002343B5FBF9F81FFA8CFE09FB18551C0C11 +:100CA00044EA054408FB0EF5A54202FA01F200FAF7 +:100CB00001F00BD91CEB040408F1FF3A80F08880A6 +:100CC000A54240F28580A8F102086444641B9DB2ED +:100CD000B4FBF9F309FB134445EA044403FB0EFE9D +:100CE000A64508D91CEB040403F1FF356CD2A645D8 +:100CF0006AD9023B644443EA0843A3FB0295A4EB90 +:100D00000E04AC42C846AE4656D353D056B1B0EBF3 +:100D1000080264EB0E0404FA07F7CA40CC401743FC +:100D2000C6E9007418460021BDE8F087C3F1200130 +:100D300002FA03FC20FA01F225FA01F19D402A4350 +:100D40004FEA1C471FFA8CFEB1FBF7F007FB1015AA +:100D5000110C41EA054100FB0EF58D4204FA03F443 +:100D600008D91CEB010100F1FF382FD28D422DD99B +:100D700002386144491B92B2B1FBF7F507FB15112C +:100D800042EA014205FB0EF1914208D91CEB020236 +:100D900005F1FF3816D2914214D9023D6244521A2D +:100DA00045EA004138E73146304608E73946E6E68D +:100DB0001046FBE64845A9D2B9EB020865EB0C0EDC +:100DC000013BA3E74546EAE72B4694E74046D1E7D7 +:100DD000D0467BE7023D624432E708460AE76444B6 +:100DE000023842E7704700BF014900200AF01CB8F2 +:100DF000A929000808B501F045F8642008F00AFAAE +:100E0000FBE700002DE9F843DFF8BC801022FF214A +:100E1000284833F0D3FD284F0021404608F03AF827 +:100E200004214046254E08F035F808213846244D67 +:100E300008F030F80C2138461E4C08F02BF8002141 +:100E400030464FF6FF7908F025F80C21304608F0BF +:100E500021F80021284608F01DF80421284608F052 +:100E600019F8184BB8F80C201A805A80BA899A8061 +:100E7000DA80B2891A815A81AA899A81DA81D8F8EE +:100E800000200120238853636388A9EB0303936345 +:100E90003B68A288DA63E2881A64336822895A635D +:100EA00062891A642B68A2895A63E2899A6308F0FE +:100EB000B1F9E4E7C8050020300500207C050020DA +:100EC000E4040020D80500209804002010B594B058 +:100ED0001022002102240AA833F070FD1422002100 +:100EE00003A833F06BFD1D4B192108A81A6C42F0C2 +:100EF00080521A641B6C03F080530193019B184BC2 +:100F00001A6842F440421A6001221B6803F440430D +:100F10000293029B4FF48033CDE908234FF4800302 +:100F2000CDE90E434FF4D873CDE91244CDE9101347 +:100F300006F082FD06F024FA0F2300200721CDE9F8 +:100F400003344FF4A053CDE905034FF4805303A8B5 +:100F5000079306F059FF14B010BD00BF00380240DF +:100F6000007000402DE98048A9B0BFF34F8FBFF358 +:100F70006F8FC54A0021C2F85012BFF34F8FBFF3E5 +:100F80006F8F536943F400335361BFF34F8FBFF347 +:100F90006F8FC2F88410BFF34F8FD2F8803043F6C2 +:100FA000E074C3F3C900C3F34E335B0103EA0406E4 +:100FB000014646EA81750139C2F86052F9D2203BF8 +:100FC00013F1200FF2D1BFF34F8F536943F48033F5 +:100FD0005361BFF34F8FBFF36F8F102704F00AFBED +:100FE00000211BA83A460024012533F0E7FC04F059 +:100FF0009BFB4FF01042A54B1BA8ADF86C504FF077 +:10100000030B1E944FF480594FF0400AA04E4FF04E +:101010000408CDE91C2304F0A5FB17231BA88DF8B9 +:101020006D508DF874308DF87A5004F09BFB0420DD +:1010300004F088FBFFF74AFF142221461BA833F077 +:10104000BDFC944B394694481A6B3A431A631A6BA9 +:101050003A400292029A1A6B42F040021A631A6BEB +:1010600002F040020392039A1A6B42F002021A63E2 +:101070001A6B02F002020492049A1A6B2A431A6352 +:101080001A6B2A400592059A1A6B42F400721A6391 +:101090001A6B02F400720692069A1A6B42F008026A +:1010A0001A631A6B02F008020792079A1A6B42F44D +:1010B00080621A631A6B02F480620892089A1A6BB3 +:1010C00042F020021A631A6B02F020020992099A78 +:1010D0001A6B42F480721A631A6B02F480720A92DD +:1010E0000A9A1A6B42F080021A631A6B02F08002AD +:1010F0000B920B9A1A6B42F004021A6322461B6B86 +:1011000003F004030C930C9B05F00CFC2A46082109 +:10111000624805F007FC2A464FF48051604805F00C +:1011200001FC2246C0215F4805F0FCFB224640211D +:101130005D4805F0F7FB1BA95748CDF878B01D9422 +:10114000CDE91B7505F066FA08231BA95348CDE9C4 +:101150001B35CDE91D4405F05DFA1BA95048CDE9CA +:101160001B95CDE91D4405F055FAC0221BA94D4839 +:10117000CDE91B25CDE91D4B05F04CFA1BA94A48CA +:10118000CDE91BA5CDE91D4B05F044FA4748484A77 +:10119000848002600562C0E9054404F00FFB454A03 +:1011A0003046C6E90A44C6E90C44C6E90024C6E94B +:1011B000024404F0A0FB294630463F4E04F054FCA4 +:1011C0003E4AC6F814A04FF0020A1BA93046B4608C +:1011D000B462CDF884A0C6E900244FF4C072C6E919 +:1011E00006244FF40062C6E908290722CDE91FBA98 +:1011F000CDE91BA2C6E90387CDE91D8207F060F99E +:101200002F494FF6FF7230460194C1E90057C1E9FA +:10121000025407F075F9284604F010FA28494FF6F1 +:10122000FF723046C1E900A7C1E9025407F068F92E +:10123000082323494FF6FF723046C1E90234C1E961 +:1012400000B707F05DF94FF40C721D49304601926A +:1012500040F2352B019A8D60CA604FF6FF72C1E9EA +:10126000008707F04DF940F22B713046154E07F01C +:1012700066F94FF0204243F2D20130461160124A23 +:101280001249346224E000BF00ED00E01B000003BF +:10129000DC02002000380240000402400028024026 +:1012A000002002400008024000180240B80200205E +:1012B0000030024000B0024064040020400100A061 +:1012C0009C0200201C03002068474020005C004076 +:1012D000C6E90012C6E90245C6E90444C6E9064467 +:1012E00005F048FC2146304605F066FE21463046B2 +:1012F000BD4E05F087FE214634221BA833F05EFB6D +:10130000BA4A28204FF0350C40F2152EB4863461CD +:1013100086F83640C6E900240922C6E905020B22F8 +:101320003046C6E907C240F21B12C6E909E240F2A4 +:101330001D12C6E90244C6E90BB205F00BFFFF20FF +:101340004FF480634FF4F0714FF488721B94ADF842 +:101350009C4026928DF89E40CDE920040520CDE9E1 +:1013600022304FF04040CDE91E2ACDE9240122462B +:10137000304643F6FF7A6026CDE91C141BA905F020 +:10138000B4FF9B489B4A18210462C0E900254FF432 +:10139000A062994DC0E90412C0E90287C0E9064481 +:1013A00006F008F903F0A4FF03F0E8FE5C2004F067 +:1013B000A9F900F065FD3A46214610A833F0FEFA7F +:1013C0001C22214614A80F94CDE90D4433F0F6FAFF +:1013D00021462C221BA833F0F1FA884A2846AC603B +:1013E000C5E90024C5E903A4C5E9054407F0FEFAF0 +:1013F00010A92846CDF8409007F018FC284607F0C1 +:1014000025FB0DA928460F94CDE90D4407F044FDB6 +:10141000224614A928461A94CDE91464CDE916444D +:10142000CDE9184407F07AFB424614A9284607F094 +:1014300075FB4FF400521BA928461F942294259453 +:10144000CDE920244FF00072CDE91B44CDE92324DF +:10145000CDE91D4407F06CFD284600F03BFB3A4601 +:10146000214614A8664D33F0A9FA21461C221BA878 +:101470001294CDE9104433F0A1FA624A28462C6157 +:10148000AC61C5E90024C5E9024A07F0AFFA14A926 +:101490002846CDF8509007F0C9FB284607F0D6FA49 +:1014A00010A928461094129407F0F6FC08231BA9F3 +:1014B00028461D941A461F94CDE91B6407F02EFBA5 +:1014C0000C221BA9284607F029FB284600F002FB46 +:1014D0003A46214614A84C4D33F070FA1C2221469E +:1014E0001BA81294CDE9104433F068FA474B284604 +:1014F0002C61AC61C5E90034C5E9024A07F076FA0F +:1015000014A92846CDF8509007F090FB284607F024 +:101510009DFA10A928461094129407F0BDFC2246AB +:101520001BA928461D941F94CDE91B6407F0F6FA09 +:101530000C221BA9284607F0F1FA284600F0CAFA47 +:101540003A46214614A8324D33F038FA1C2221467F +:101550001BA833F033FA2F4B28462C61AC61C5E948 +:101560000034C5E9024A07F041FA14A92846CDF82B +:10157000509007F05BFB284607F068FA22461BA94B +:1015800028461D941F94CDE91B6407F0C7FA424614 +:101590001BA9284607F0C2FA284600F09BFA00F083 +:1015A000B5FF00F0B2FF07F093FD1B4A21461B4830 +:1015B00007F0DCFD1A4B1B4A214618601A4807F059 +:1015C000D5FD1A4B1A4A214618601A4807F0CEFD7D +:1015D000194B1A4A21461860194807F0C7FD194BE4 +:1015E000186007F08FFDFEE77003002000680140DF +:1015F00018040020001000A0980400200000014002 +:1016000030050020000800407C050020000C004050 +:10161000E404002000180040DC580308F50D000821 +:10162000B4020020B85803081B250008B0020020AF +:1016300000590308313D0008E805002094580308CC +:10164000050E0008AC0200200268034B9A4201D14B +:1016500003F0E2BF704700BF001000407047000079 +:101660000D4B82B00F216FF001001A6C42F08052D6 +:101670001A641A6C02F080520092009A5A6C42F47A +:1016800080425A6400225B6C03F480430193019B07 +:1016900002B003F0F7BF00BF00380240026882B01A +:1016A000084B9A420BD1D3F8302803F5006342F47B +:1016B00080521A631B6B03F480530193019B02B0A9 +:1016C000704700BF003002400E4B07B502689A42D7 +:1016D00015D1A3F5F04305215A201A6B42F40002FC +:1016E0001A6300221B6B03F400030193019B03F0B8 +:1016F000C9FF5A2003B05DF804EB03F0F5BF03B057 +:101700005DF804FB00B0024010B5A8B004461422F6 +:10171000002102A833F052F98422002107A833F0F7 +:101720004DF92268174B9A422AD14FF4803307A80B +:10173000079306F03BFC08B1FFF790FF124C4FF403 +:10174000C07201211148236B43F080032363236B94 +:1017500003F080030093009B1223CDE902230323AF +:10176000CDE90413042302A9069304F053FF236C6C +:1017700043F400032364236C03F400030193019BEF +:1017800028B010BD005C004000380240001C024040 +:10179000026808B5094B9A420FD1094A80210948CD +:1017A000136C23F40003136405F016F84FF48071F2 +:1017B0000448BDE8084005F00FB808BD005C0040D3 +:1017C00000380240001C024070B5ACB00446142240 +:1017D000002106A833F0F2F8842200210BA833F090 +:1017E000EDF82268484B9A4240F08C80082305208F +:1017F00001240B934FF4C07310930223CDE91130F1 +:101800004FF400330BA8CDE9154306F0CFFB08B128 +:10181000FFF724FF3D4B002402250E265A6C06A933 +:101820003B4842F080625A645A6C02F08062009237 +:10183000009A1A6B42F010021A631A6B02F010023F +:101840000192019A1A6B42F400721A631A6B02F445 +:1018500000720292029A1A6B42F480621A631A6B47 +:1018600002F480620392039A1A6B42F040021A63F8 +:101870001A6B02F040020492049A1A6B42F48072CE +:101880001A631B6B03F480730593059B1023CDE94A +:101890000635CDE908440A9604F0BCFE4EF6FF7307 +:1018A00006A91C480A96CDE90635CDE9084404F09E +:1018B000B1FEF72306A918480A96CDE90635CDE909 +:1018C000084404F0A7FE4FF4805306A91348CDE95D +:1018D00006350923CDE908440A9304F09BFE4FF432 +:1018E000464306A90E480A96CDE90635CDE90844D7 +:1018F00004F090FE58202246052103F0C3FE582034 +:1019000003F0F2FE2CB070BD0068014000380240C8 +:10191000001002400024024000280240001802404B +:1019200000200240142200212DE9F0418AB0044633 +:101930000DEB020033F042F822682C4B9A4251D151 +:101940002B4B0225032409269A6B4FF0040805A9A6 +:10195000284842F0020200279A639A6B02F00202C2 +:101960000192019A1A6B42F010021A631A6B02F08C +:1019700010020292029A1A6B42F002021A631A6B68 +:1019800002F002020392039A1A6B42F008021A63F1 +:101990001B6B03F008030493049BCDE90585CDE997 +:1019A000084604F037FE402305A91348CDE9053564 +:1019B0000A23CDE90774099304F02CFE05A90E480B +:1019C0000996CDE90585CDE9077404F023FE4FF4AF +:1019D000605305A909480996CDE90535CDE9077495 +:1019E00004F018FE0AB0BDE8F08100BF001000A0AE +:1019F000003802400010024000040240000C024087 +:101A0000026808B50B4B9A4213D10B4A04210B48CC +:101A1000936B23F00203936304F0DEFE4421084835 +:101A200004F0DAFE4FF460510648BDE8084004F0C7 +:101A3000D3BE08BD001000A00038024000100240D4 +:101A400000040240000C0240036884B01C4A934228 +:101A50000BD11C4B5A6C42F001025A645B6C03F0D0 +:101A600001030093009B04B07047174A93420AD1C8 +:101A7000144B1A6C42F004021A641B6C03F004034A +:101A80000193019BEFE7114A93420AD10D4B1A6C67 +:101A900042F008021A641B6C03F008030293029BD5 +:101AA000E1E70B4A9342DED1064B1A6C42F040024A +:101AB0001A641B6C03F040030393039BD3E700BF3E +:101AC000000001400038024000080040000C0040C7 +:101AD0000018004030B58DB004461422002107A83C +:101AE00032F06CFF2368474A934226D1464B0225C9 +:101AF000012407A91A6B454842F001021A631A6BC8 +:101B000002F001020092009A1A6B42F002021A637C +:101B10001B6B0B9403F002030193019B4FF4807342 +:101B2000CDE9073504F076FD4FF480430B94CDE901 +:101B300007350023CDE9093312E0354A934212D12B +:101B4000314B1A6B42F002021A634FF440721B6B66 +:101B500003F002030293029B0223CDE907230B93B8 +:101B600007A92C4826E02C4A934227D1264B022471 +:101B7000012507A91A6B294842F480721A631A6B6F +:101B800002F480720392039A1A6B42F001021A6304 +:101B90001B6B0B9403F001030493049BCDE90754E2 +:101BA00004F038FD002307A918480B94CDE9075429 +:101BB000CDE9093304F02EFD0DB030BD184A934233 +:101BC000FAD1114B0225092407A91A6B154842F0D6 +:101BD00080021A631A6B02F080020592059A1A6B52 +:101BE00042F002021A631B6B0B9403F0020306938C +:101BF000069B4023CDE9073504F00CFD4FF400436C +:101C000094E700BF0000014000380240000002409D +:101C10000008004000040240000C00400020024088 +:101C200000180040001C0240F0B5002387B0039369 +:101C3000294B1E68002E4DD10122022703250C24BA +:101C40001A6001A9254B26489A6B42F001029A635B +:101C50009B6B03F001030093009B4FF68373CDE968 +:101C60000454CDE9013704F0D5FC48F2331301A93F +:101C70001C480594CDE90137CDE9036504F0CAFCA1 +:101C80004CF2037301A918480594CDE90137CDE959 +:101C9000036504F0BFFC4FF63F0301A91348059408 +:101CA000CDE90137CDE9036504F0B4FC282301A98F +:101CB0000F480594CDE90137CDE9036504F0AAFC8E +:101CC000082301A90B480594CDE90137CDE9036547 +:101CD00004F0A0FC07B0F0BDEC0500200038024085 +:101CE0000010024000180240000C024000140240A4 +:101CF000001C024000080240214B1A6C42F0100206 +:101D000070B51A6488B01B6C054601A903A803F0DE +:101D100010030293029B06F02BF9069B4BBB06F0C7 +:101D200017F9184E184B336040F2E733F360174B46 +:101D3000B0FBF3F3013B3046736000233361B360C3 +:101D4000B36106F053FE044680B9304606F0F4FC59 +:101D5000044658B9362003F0C7FC0F2D0DD8224693 +:101D60002946362003F08EFC094B1D60204608B042 +:101D700070BD06F0EDF84000D3E70124F6E700BFA0 +:101D800000380240F00500200010004040420F00E3 +:101D9000500000207047FEE7FEE7FEE7FEE77047D1 +:101DA000014806F00CBD00BFF0050020014804F01A +:101DB000CBBA00BF0C070020014805F039BA00BFBC +:101DC00070030020014803F0C4BD00BFDC02002006 +:101DD00001207047024B16224FF0FF301A60704707 +:101DE000A4E60120014B16221A60FEE7A4E60120BA +:101DF00070B50D4614460E46731B9C4201DC20460E +:101E000070BDAFF3008006F8010BF5E770B50D4625 +:101E100014460E46731B9C4201DC204670BD16F82A +:101E2000010BAFF30080F5E74FF0FF3070474FF440 +:101E3000005300204B60704701207047002070471E +:101E40000A4A0346116810B509B9094911601068BA +:101E5000084C09490344091B8B4283BF074B0C22E2 +:101E60004FF0FF30136088BF1A6010BD3C060020A1 +:101E700060F30120000A000000000520A4E6012014 +:101E800070477047002130B5084685B01DF09AFABA +:101E90001C4D00201C491D4B1D4A08601860106035 +:101EA0001C4C02951C4DCDE90005204619F05CFC48 +:101EB000204619F0EFFC94F83130204659071DD523 +:101EC00019F0EEFC154C1649124819F061FD20225C +:101ED0000021201D32F072FD124B4FF480620D493B +:101EE000236010231048C4E90523224607F03EF979 +:101EF000084805B0BDE8304017F072BC19F0EAFCA4 +:101F0000E0E700BF51F30108A00600209C06002076 +:101F1000A406002064060020B92000084006002026 +:101F2000831E000824590308752300080020704709 +:101F300030B58DB00C4630220021684632F03EFDAF +:101F40006A4623460021DBB9164D20462389C5F891 +:101F500008D06B606C6319F049FF2946124D134895 +:101F600004F016F94FF0FF31286807F061FA0446D3 +:101F70000028F7D10D4804F0B9F920460DB030BD66 +:101F800004290CD0586810605889506009B142F893 +:101F9000042C1B6803B9936001310C32D3E76FF056 +:101FA0000B00EBE7D0060020080700200C070020FC +:101FB00003F03EBB024808B504F0EEFA002008BD6D +:101FC0000C07002008B513460A460146034804F0F2 +:101FD00027FA003818BF0120404208BD0C07002036 +:101FE00008B513460A460146034804F041FA003892 +:101FF00018BF0120404208BD0C07002001460848D8 +:1020000008B519F009FB074B1A78012A07D10022FD +:102010001A70054B1868BDE8084007F043BA08BDC0 +:10202000E4590308C8060020CC0600202DE9F74338 +:102030000546114FDFF84480DFF844904FF0FF3140 +:10204000386807F0F5F904460028F7D198F8003011 +:1020500001941BB901A9484604F0CCF8019E002E5A +:10206000ECD02B692946304698470028EED0304600 +:1020700019F062FDEAE700BFCC060020C806002088 +:102080000C070020014B186807F00CBACC060020A2 +:10209000014B186807F006BA0807002008B504F0DD +:1020A000B5FA030605D5034B1868BDE8084007F0EC +:1020B000F9B908BDCC0600202DE9F0410446A4B0D2 +:1020C00030B95B4B40F2F5125A495B4832F042FBA3 +:1020D00047F27343642200210BA863860026574B06 +:1020E000574D6361574BDFF89481A36132F066FC72 +:1020F000554B2846ADF804602B60544BC5F804D00E +:1021000000934FF40003AB60514BEB60514B2B61DC +:102110004FF4C0636B6103F0BBFE342231460746C7 +:1021200008F1040032F04AFC21234B48C8F8003083 +:102130004FF44003C8F8143019F01AFA06230121AD +:1021400084F8303008466B681A7884F82A205A7868 +:1021500084F82B209A7884F82C20DA7884F82D20C3 +:102160001A7984F82E2032465B7984F82F3040F2B9 +:10217000DC53238594F8313043F00A0384F831307E +:1021800007F000F9354B012132461860084607F088 +:10219000F9F8334B20223146186003A832F00EFCC8 +:1021A000304B4FF4AF7102AA029330232E48CDE991 +:1021B0000713214606F0DAFF2C492D4802F0BCFE39 +:1021C0002B4802F0CDFE87BB294802F02AFF0128E8 +:1021D00009DC204619F0C2FB204619F07BFB0020E9 +:1021E00024B0BDE8F08103380BA9022893BF214B2E +:1021F0004FF480454FF4006633F810609CBF1E4BCF +:1022000033F810500E4804F058F90BA90C48CDE9EA +:10221000105604F0B4F90A4803F024FF204619F0E0 +:102220003FFB204619F072FBD9E7FFF717FAD6E714 +:102230002C590308469F030899590308ADA00108CB +:102240000C070020311F0008008002400080E100E0 +:10225000E001002040010020E4590308CC060020E2 +:1022600008070020C15903082D20000804000020A1 +:10227000A8060020C8590308CE590308D00600203C +:1022800003F0D6B9F0B58DB004461422002107A89A +:1022900032F094FB2268334B9A4261D1A3F590430C +:1022A000022703260B251A6B07A92F48002442F0AA +:1022B00000721A631A6B02F000720192019A1A6B93 +:1022C00042F080621A631A6B02F080620292029AF4 +:1022D0001A6B42F000621A631A6B02F000620392FA +:1022E000039A1A6B42F040021A631A6B02F0400222 +:1022F0000492049A1A6B42F004021A631A6B02F0F9 +:1023000004020592059A1A6B42F001021A631B6BD4 +:1023100003F001030693069B4FF4D043CDE9073742 +:10232000CDE90A6504F076F9322307A90F480B9529 +:10233000CDE90737CDE9094604F06CF9862307A9F2 +:102340000B480B95CDE90737CDE9094604F062F952 +:102350003D202246052103F095F93D2003F0C4F904 +:102360000DB0F0BD0080024000180240000802409D +:10237000000002402DE9F04700259AB0DFF8949064 +:102380000446A8462F46214E6422DFF88CA0002187 +:1023900001A832F013FB484602F043FE94F83130B6 +:1023A0005A0710D501280CDC304603F0ACFE20465D +:1023B00019F090FA204619F0D1FA642006F02AFFAD +:1023C000E9E75B07F9D40128F7DD831E032B19D851 +:1023D0000F4A3AF8138032F8135001A9304604F03E +:1023E0006CF801A930460127CDE9068504F0C7F84D +:1023F000304603F037FE204619F052FA204619F015 +:1024000085FADAE7002FD8D0E7E700BF0C070020F5 +:10241000DC590308A8060020D459030813B5044664 +:102420000C4819F0C7F8034678B100F120020A49B8 +:10243000226001614FF4C061CDE9002100214122F9 +:10244000084619F027FB02B010BD044A01212060A4 +:102450001170F8E7E4590308FD1F0008C8060020C2 +:1024600030B50025A2F1200422F8163C42F8205C89 +:1024700022F8185C05686DB904600C60016861B9E8 +:10248000BFF34F8F0A49002B0CDCBFF34F8FBFF314 +:102490006F8F30BD0D682C60EFE708891844088104 +:1024A0000968ECE7C1F85C22203B2032EBE700BF73 +:1024B00000ED00E019F040BBDFF834D0002103E06C +:1024C0000C4B5B58435004310B480C4B42189A425A +:1024D000F6D30B4A02E0002342F8043B094B9A4230 +:1024E000F9D302F09DFF32F01DFBFEF73BFD704774 +:1024F00000000520A0CB03080000002040010020C0 +:102500008002002060F30120FEE7704708B501F06B +:10251000F5F8BDE8084001F07FB801F0F1B8406877 +:1025200070474160704700004FF0E022D2F8FC3D58 +:1025300043F08073C2F8FC3D054B064AD3F8B01F48 +:102540000A43C3F8B02F1A6842F001021A607047BC +:10255000001000E055CEACC5511A01EB5301B1FBA0 +:10256000F3F07047014B5868704700BF001000E05F +:10257000704710B504460C2131F0BDFE204610BD59 +:10258000036810B51B69044631B19847A2686368B7 +:102590009B1A1844606010BD9847A060FBE70000DC +:1025A000024B7020024A1360DB68184724000020A9 +:1025B00044510020704710B50446042131F09BFEC1 +:1025C000204610BD37B50A4D0C462B6813B90020C4 +:1025D00003B030BD1B697020019298470199002813 +:1025E000F5D02B68702022465B6998470120EFE701 +:1025F000445100207FB501238DF817204FF47A72E3 +:10260000CDE901320DF1170200920A460146054854 +:1026100004F01AFB10B1034804F0FDFA07B05DF8AE +:1026200004FB00BF1C0300207FB500230A464FF4C3 +:102630007A718DF817300123CDE901310DF11701C1 +:1026400000910146054804F0D9FB10B1034804F09D +:10265000E2FA9DF8170007B05DF804FB1C030020A8 +:10266000032823D8DFE800F0020B131A104B1021C7 +:1026700010481A68B2FA82F2520904F053B90C4BAE +:1026800040215A68B2FA82F252090B48F5E7084B2A +:1026900080219A68B2FA82F25209F6E7044B40218F +:1026A0000648DA68B2FA82F25209E6E7704700BFDC +:1026B0004851002000040240000802400018024077 +:1026C000032823D8DFE800F0020B131A104B102167 +:1026D00010481A68003A18BF012204F023B90C4BC5 +:1026E00040215A68003A18BF01220B48F5E7084B11 +:1026F00080219A68003A18BF0122F6E7044B402176 +:102700000648DA68003A18BF0122E6E7704700BFC2 +:102710004851002000040240000802400018024016 +:1027200003280FD8DFE800F00206090B1021064845 +:1027300004F0FDB840210548FAE78021FBE740217D +:102740000348F5E7704700BF00040240000802405C +:102750000018024008B5032813D8DFE800F0020A89 +:102760000D0F1021084804F0D7F8431E5842584175 +:1027700008BD40210548F6E78021FBE740210448D9 +:10278000F1E70020F1E700BF00040240000802402A +:102790000018024070B5084D00240126E0B2FFF792 +:1027A000D9FF18B12B68012B18BF2E6001340435F6 +:1027B000052CF3D170BD00BF48510020012380F8E3 +:1027C000781080F8793070470020704741640039F4 +:1027D000024B18BF01211970704700BF33E7012079 +:1027E00000207047836B0BB10846184770474FF6BF +:1027F000FF707047406803689B6918477047000086 +:1028000038B5044601F052F823682046D3F88850C2 +:10281000074BD4E90F12A8470023064D84F84A302D +:102820002846FFF781FE0123256184F8703038BD0A +:10283000000000C05851002000F0F4BF00F0F8BFC5 +:1028400070B501F05DF810490023C1F88430BFF382 +:102850004F8FD1F8803043F6E074C3F3C900C3F35F +:102860004E335B0103EA0406024646EA8275013AEA +:10287000C1F87452F9D2203B13F1200FF2D1BFF30B +:102880004F8FBFF36F8F70BD00ED00E001F03AB8DD +:1028900000F0A4BF01F054B901F05CB900F0A8BF8A +:1028A00010B504461EF0ACFC23682046D3F8AC30CB +:1028B000BDE8104018471DF000BF10B504467C214C +:1028C00031F019FD204610BD90F87A301BB14068F8 +:1028D00003681B68184718467047000090F83410CA +:1028E0000D4B10B590F878401A788C4209D03AB95F +:1028F0000A490B4A08881488108001220C801A703B +:1029000010BD002AFCD0064A0449148808880C80AF +:1029100010800022F3E700BF2CE701202AE7012006 +:1029200028E7012070B50D46194635B9094B40F22C +:10293000D221094A094831F00DFDC0E90F52003A91 +:10294000074B18BF01221A700368BDE87040D3F826 +:102950008C301847305A0308685A0308B65A0308DF +:1029600032E7012008B5094B1B888B4203D8084B7E +:102970001B88934205D9074B9E21074A074831F02F +:10298000E9FC074B1980074B1A8008BD28E7012096 +:102990002AE70120FB5A03085E5B0308B65A0308C6 +:1029A0002EE7012030E70120014608B5034B1868E7 +:1029B00001B101211EF03EFC012008BD34E70120D9 +:1029C000034B00225A609A60024A1A60704700BFA7 +:1029D00058510020F85903080121002208B5084683 +:1029E00006F0D0FC0A4B186028B90A4B28210A4A85 +:1029F0000A4831F0AFFC00220421012006F088FDD6 +:102A0000074B186018B9074B2C21034AF0E708BDA3 +:102A1000685100207C5C0308C55C0308F45C030873 +:102A200064510020715D0308024B4FF0FF311868BC +:102A300006F0FEBC68510020014B186806F032BD5C +:102A400068510020024B0021186806F0F1BC00BF5D +:102A500068510020FFF7F0BF0023034803491A46DE +:102A6000006806F09BBD00BF6451002018000020E4 +:102A700013B50023074C01A91A46206806F0D0FDC3 +:102A80004FF0FF33002201A9206806F0C9FD02B013 +:102A900010BD00BF6451002003685B6C1847012023 +:102AA000704703689B6A18470D4B82B01A6B42F45B +:102AB00000021A631A6B02F400020192019A1A6969 +:102AC00042F400021A611A6922F400021A61054BED +:102AD000054A1A614FF08062044B9A6002B0704759 +:102AE00000380240DC020020312B000800E100E049 +:102AF00040F2EF3070470000054B4FF080620360FA +:102B0000044BC3F88820BFF34F8FBFF36F8F70471C +:102B1000405F030800E100E010B504464FF45A613D +:102B2000FFF7EAFF204631F0E6FB204610BD00002B +:102B3000024B1B68586803685B69184734E701203B +:102B400070B504460A4B0C300026254660226060B2 +:102B50002672667245F8203B29461EF0A7FC04F554 +:102B60005A63EE602435AB42FBD1204670BD00BFF6 +:102B7000405F030808B50B290BD8DFE801F0120607 +:102B8000100A0A0A0A0808080808012008BD0520DA +:102B9000FCE7054B6521054A054831F0DBFB0020C9 +:102BA000F4E70220F2E700BFB35D0308CE5D03083F +:102BB000185E030808B50A2909D8DFE801F01006F5 +:102BC0000E080808080606060600012008BD054B89 +:102BD0008621054A054831F0BDFB0020F6E70220BA +:102BE000F4E700BFB35D0308935E0308185E0308B3 +:102BF0002DE9F84391F81D800C4607464146FFF742 +:102C0000B9FF94F81E90054638464946FFF7B2FFD3 +:102C1000494606463846FFF7CDFFA18A628B434BF3 +:102C2000521A1A649A61228B521A1A61E28A586304 +:102C300042EA014220695A646268D863DA60276810 +:102C4000802F28D0227F0FD8202F65D0402F63D02F +:102C5000042F1AD045EA0265344BC84545F40035C7 +:102C6000DD615FD0324A44E0B7F5807F04D0B7F52C +:102C7000007FEFD12F4900E02F4941EA0262DA617B +:102C8000E2681A625E62586132E045EA026242F42A +:102C90000032DA61F6E7A7683A1DDA62217F3A78F6 +:102CA00045EA016545F40035DD615E62586142B177 +:102CB000012A21D0214B4FF48871214A214831F05B +:102CC00049FBDA69798822F47F42013922F0100247 +:102CD00042EA01220121DA61144BDA6942F0200252 +:102CE000DA61DA699206FCD410229A600029B9D020 +:102CF000154A1A60BDE8F883DA69FF39788822F44A +:102D00007F4218BF0121013822F0100242EA00225E +:102D100042F01002DA61DFE745EA0262034B42F457 +:102D20000032B6E740F20122E3E700BF00B0024004 +:102D300001020100090002000A000200DE5E030831 +:102D4000F85E0308185E03080102020038B50C465D +:102D5000897FFFF72FFF174BA58AE28A586342EA63 +:102D6000054221695A64628BD963521B1A64256833 +:102D7000082D0ED19A611A6158620F4A207F42EAEB +:102D80000062DA61E2681A620C4A5961D9601A601D +:102D900038BD0022D8611A61E1680A0A4809C1F306 +:102DA000C40102F4784200F4FC6002430A439A63CF +:102DB000034AECE700B002400900010001020200F2 +:102DC000010203004069704790F844007047036BAC +:102DD00023B9C06A003818BF01207047012070472E +:102DE00080687047043010B50C460FC884E80F00A7 +:102DF00010BD704708B5034A40F21221024B034848 +:102E000031F0A8FA885F0308BCA80308E35F030851 +:102E100010B50446482131F06EFA204610BD00007E +:102E20002DE9F0431C46436BADF51F7D05460E466C +:102E30001746002B37D0002203A8DFF8A890CDE971 +:102E400001320EF051FD4FF4F4725021249024A869 +:102E500008F099FC3A46314624A809F015FC0121F6 +:102E600024A808F093FD022324A88DF8D83008F098 +:102E700031FEBDF898322B9ABDF89C629342A89F10 +:102E800028BF1346419A964203EB4308A7EB43073A +:102E900028BF1646479B9E4209D824A808F098FDF3 +:102EA00024A808F0BDFC0DF51F7DBDE8F0830122CC +:102EB00001A924A808F057FE6B6B03EB08009842A9 +:102EC00001D83C44E6E759789A78C90009EA022219 +:102ED00001F4FC610A4313F8031B42EAD10224F80F +:102EE000022BECE700F8FFFF0A4A02600022C0E96B +:102EF0000522C0E90722C0E90922C0E90B22C0E986 +:102F00000D12C0E90F2280F84420C0E90322C0E975 +:102F100001227047F462030810B40C4611461A46A9 +:102F2000036B3BB1036C806BE41A20445DF8044BE7 +:102F300031F04CBDC06AF8E7036B10B573B1036C98 +:102F4000826BC91A5318525C98785C780004DB785D +:102F500040EA0420104340EA036010BDC36A585899 +:102F6000FBE7036B43B1036CC91A836B5A18585CB7 +:102F7000527840EA02207047C36A585A70470000EE +:102F800070B50446006B0D461646D8B1E36B93420C +:102F900008D209230D4A65210D4884F844300D4BB1 +:102FA00031F0D8F90368DB689847206B3246A16B93 +:102FB00003681B69984710B90D2384F84430A06B4F +:102FC000256470BDE06A0844FBE700BF7D6003082C +:102FD000E35F03086A6003082DE9F8434369044688 +:102FE0002BB9234BAA21234A234831F0B3F90822F5 +:102FF0008169FFF7C5FFA16943F2300646F26437E5 +:1030000004312046FFF798FFA3691844A36A00F132 +:1030100008029A4206D3012300206361236AA36158 +:10302000BDE8F883636909300822013320F001010B +:1030300020466361A161FFF7A3FFD4F818902046F2 +:103040004946FFF78EFF09F1020180462046FFF74F +:1030500088FF09F1040105462046FFF76DFFB045E2 +:10306000D2D1BD42D0D10028CED00120D8E700BFB8 +:10307000BF60030808610308E35F03082DE9F04F10 +:103080000446ADF51F7D8A4616468169082298469A +:10309000FFF776FFA7692046391DFFF74DFF07F1BF +:1030A0000801024605462046FFF76AFF636B0746A4 +:1030B00033B93C4B40F2AB113B4A3C4831F04AF942 +:1030C000002203A8CDE901320EF00EFC4FF4F47299 +:1030D0005021249024A808F056FB2A46394624A8FB +:1030E00009F0D2FA012124A808F050FC022324A8F8 +:1030F0008DF8D83008F0EEFCBAF90250479BAB428D +:1031000029D3BAF900904FEA4808BAF804702B9B0B +:1031100008FB05664F44BAF80250DFF894B03FB29E +:103120009F4228BF1F46BAF8063009EB490A1D44E2 +:10313000419B2DB29D4228BF1D46479BAB4210D3F9 +:1031400024A808F045FC24A808F06AFB01200DF52E +:103150001F7DBDE8F08F012201A924A808F003FD1E +:10316000CCE7012201A924A808F0FDFC626B4946C6 +:103170005244B94202F1030201D34644DDE712F89A +:10318000020C12F8013CC0000BEA032300F4FC60BF +:10319000034312F8030C43EAD00326F8113001313F +:1031A000E7E700BF3B61030891610308E35F0308A1 +:1031B00000F8FFFF0129036838BF0121DB6A70B501 +:1031C0000D4604469847A84204D223682046DB6A8D +:1031D000984705466B1EE6691022204606EB03164B +:1031E00006F10801FFF7CCFE06F110012046FFF7BB +:1031F000A3FE236A043B0344C4E9055370BD0000E9 +:103200002DE9F341002104464822816180F84410F1 +:10321000FFF7B6FEA7690423634A39462046FFF745 +:103220007BFE40B10323614AF22184F84430604BB5 +:10323000604831F08FF807F1080104235E4A204608 +:10324000A161FFF769FE30B10423584AFA2184F8DE +:1032500044305A4BECE707F10C010423584A20464E +:10326000A161FFF759FE064638B105234F4A40F2E7 +:10327000011184F84430534BDAE707F1100120467E +:10328000FFF75AFE054620B94F4B40F20711474A57 +:10329000CEE707F1140804234C4A20464146FFF7C5 +:1032A0003BFE00284BD0062384F844300423484AD0 +:1032B00007F118012046FFF72FFE002841D0072311 +:1032C00084F844304544434F0C2220462946FFF7FA +:1032D00057FE05F1080604233A4620463146FFF71B +:1032E0001BFE94F8443000284AD0002B4AD1A36A30 +:1032F000291DAB424AD805F10C03291D2046A361C4 +:103300000191FFF719FE3044019960622046FFF7F2 +:1033100013FE0644042220463146FFF731FE042303 +:103320002D4A31462046FFF7F7FD002839D1012309 +:10333000E6616361A369236202B0BDE8F081012602 +:10334000B4E7002EBED007F120012046FFF7F4FDC0 +:103350004FF47A7307F13001B0FBF3F06060204660 +:10336000FFF7EAFD07F14001A0602046FFF7E4FD0A +:1033700007F14401E0602046FFF7DEFD2061A1E790 +:10338000002BB8D00A2384F84430D5E72046FFF755 +:10339000D3FD08300C22054420462946FFF7F0FDF6 +:1033A00097E70B23EFE700BFEB610308096203080F +:1033B000F0610308E35F0308366203083B62030819 +:1033C00053620308586203086E6203087A620308B6 +:1033D0007F6203088462030889620308C0E90A2146 +:1033E00000220263FFF70CBF10B500230446084615 +:1033F000E3620B6821639B689847A0622046BDE8A2 +:103400001040FFF7FDBEF0B4BDF81050BDF81460D9 +:103410002AB123B1CDE90456F0BCFFF701BDF0BCE1 +:10342000704700002DE9F04F9946436985B0044686 +:103430000F4690462BB92A4B77212A4A2A4830F06A +:1034400089FF08228169FFF79BFDA6692046314666 +:10345000FFF787FDB11C83462046FFF782FD311D33 +:1034600082462046FFF768FD06F10801A36A05467B +:1034700042189A4227D243F230039B4517D146F2B5 +:1034800064339A4513D190B10246A1612046FFF7FB +:1034900077FD0E9B01462A462046CDF80080CDE9F7 +:1034A00001933B46FFF7AFFF636901336361A36993 +:1034B0002B448DB1A361A369626A013323F0010338 +:1034C0009342A3610AD10120236A6061A36180F065 +:1034D000010005B0BDE8F08F0833EBE70020F6E708 +:1034E000BF6003088E620308E35F03080120704792 +:1034F0000C2070470C2303FB0100083070470C239D +:1035000003FB0100083070470120704741F2D800EA +:10351000704741F2D80303FB01000830704741F2C5 +:10352000D80303FB010008307047012070471020CA +:10353000704700EB01100830704700EB01100830B5 +:103540007047084600F00EBE034B10B504460360FA +:103550001CF035FB204610BD9C63030810B50446E3 +:10356000FFF7F2FF1421204630F0C5FE204610BDC3 +:10357000034B10B5044603601CF021FB204610BD30 +:103580006863030810B50446FFF7F2FF4FF4875154 +:10359000204630F0B0FE204610BD0000034B10B5B1 +:1035A000044603601CF00BFB204610BD3463030887 +:1035B00010B50446FFF7F2FF1821204630F09BFEBD +:1035C000204610BD094B10B50446036000F5885035 +:1035D0000C30FFF7B9FF04F12C00FFF7C9FF04F12D +:1035E0001400FFF7DBFF204610BD00BFD0630308C7 +:1035F00008B50248FFF7E6FF08BD00BF7051002084 +:1036000010B50446FFF7DEFF41F28821204630F076 +:1036100072FE204610BD00002DE9F34100F020FCB1 +:103620000024054600F020FC234601462246284699 +:10363000009423F0FDF9264B264A2046264D1A60B9 +:1036400001F056FB254823F05BF92B68BFF35B8F35 +:10365000DB0737D4284630F050FE98B3204C214B7E +:1036600004F12C0804F11400236008F5885608F5CD +:1036700087576060C4F80880E76026611CF0A0FAF4 +:10368000194B404663611CF09BFA184B3846E362C5 +:103690001CF096FA04F58053154A04F58950C3F8D6 +:1036A0000C2101F015FC224604F58951304601F049 +:1036B00091FB304600F056FD0E4830F069FE28467A +:1036C00030F027FE0C4802B0BDE8F041FFF798B893 +:1036D00090E70120187200206C5100201C0000208F +:1036E00070510020D0630308346303086863030843 +:1036F0009C630308F13500089C71002070470000AE +:1037000001481DF044B800BF9C71002070B5224EE6 +:10371000224B234C3046234D2360FFF711FA2846F5 +:1037200027F060FC204B00224FF480711F481A865E +:1037300083F858205A6683F870205A67DC60C3E922 +:1037400012121B49C3E91A121A4999671A490B60E8 +:103750004FF4F0710180194801804FF488711848C6 +:10376000C3E90422C3E90622C3E90822C3E90A2205 +:10377000C3E90E22C3E91022C3E91422C3E91722C8 +:10378000C3E9016501800F4883F8342001800E49A8 +:103790000A700E4A1A6070BDFC630020205A0308AC +:1037A000F86300201C7200209C71002028E7012093 +:1037B000010000010000010134E701202EE7012093 +:1037C0002AE7012030E701202CE70120AC5B030849 +:1037D0000148FFF791B900BFFC630020034B902222 +:1037E00083F85A2383F85823704700BF00E100E0B4 +:1037F000094A0A49D3680A48C3F30A03013B9BB24A +:103800000B801169C1F30A01013901801364536B04 +:1038100043F001035363704700680140A272002027 +:10382000A0720020014BD3F8AC0070470068014043 +:10383000024B0122C3F8AC105A6270470068014085 +:10384000124A5369DB0370B51ED50023C2F88430D9 +:10385000BFF34F8FD2F8803043F6E074C3F3C90052 +:10386000C3F34E335B0103EA0406014646EA817561 +:103870000139C2F87452F9D2203B13F1200FF2D172 +:10388000BFF34F8FBFF36F8F70BD00BF00ED00E03F +:1038900070473823002201FB0333C25490F83830BC +:1038A0000BB9036C836470477047000038B5044659 +:1038B0001CF059FF23685D6E1FF096FF01462046FD +:1038C000A8472368084A2046D3F888500023A2F569 +:1038D0007F31A847054B064A5A60064A1A649A6423 +:1038E0004FF4FF225A6438BD00F807C06C7A0020FC +:1038F000247A002000F40BC01CF01CBF1CF026BF73 +:103900001CF0E1BE1DF051B810B50446582130F04E +:10391000F2FC204610BD000008B531B1044B40F266 +:103920009711044A044830F015FD90F8390008BD9D +:10393000DC630308F06303087D65030810B531B14B +:10394000064B40F29111064A064830F003FD4068EC +:1039500011460368BDE810401B6B1847DC63030881 +:10396000BF6503087D65030808B529B1034B7A21BB +:10397000034A044830F0EEFC006908BDDC6303082C +:10398000706703087D65030808B529B1054B8321DD +:10399000054A064830F0DEFC41618160C0E906322C +:1039A00008BD00BFDC630308286903087D650308C0 +:1039B00010B5044629B1274BA421274A274830F0E7 +:1039C000C9FC052A34D8DFE802F003292F34393E38 +:1039D000406803681B69984750B34FF0FF31606D32 +:1039E00005F076FC0023012294F83E1084F83B3069 +:1039F00084F83920A360636101B1226284F83E300B +:103A00006362E36A2BB90123206D84F83A3005F034 +:103A100049FD606DBDE8104005F08ABC002380F8C8 +:103A2000393084F83E3003E0036200238360436151 +:103A300010BD0362002383604361F2E7002380F836 +:103A400039300123EDE7003B18BF012380F83D30FA +:103A5000EEE700BFDC630308E76A03087D6503083F +:103A600070B50446164629B1314BE721314A324838 +:103A700030F070FC90F8393033B1304B1B6893F85C +:103A80006B20436913444361E36A002B4DD0E16925 +:103A9000D4E905325343A2684A43934220D2236AB1 +:103AA000002B42D04FF0FF31606D05F011FC236A0E +:103AB0000BB10023E362E36AFBB90125606D05F0F9 +:103AC00037FC94F839300BB9236A3BB1E36A2BB960 +:103AD0000123206D84F83A3005F0E4FC284670BDDF +:103AE00094F84C000028DDD09B1AB3FBF1F2994208 +:103AF00098BF02F1FF326262D4E7002294F83C5092 +:103B0000A3623046E262E2682261A2680132A260EA +:103B1000336333685B699847002DCED194F83D300C +:103B2000002BCBD184F83950C8E70125C9E700BF85 +:103B3000DC630308BE6C03087D65030834E70120DD +:103B4000034B4FF080629A604FF080729A6070472A +:103B500000E100E0084B4FF08062C3F88820BFF31B +:103B60004F8FBFF36F8F4FF08072C3F88820BFF381 +:103B70004F8FBFF36F8F704700E100E038B5034609 +:103B800090F8380038BB01229860D8609A634FF4EF +:103B9000807258619A874FF4F0729861D861186208 +:103BA00058629862D8621863586383F83E00CA86E8 +:103BB0004FF4887281F834000A8708639A6C1861A0 +:103BC00002F5FF24D3E9101529448C420AD9084B89 +:103BD0005821084A03E0084B40F2F511074A08480B +:103BE00030F0B8FB1A6302F57F329C645A6338BD2B +:103BF0001C7003085C700308626E0308926E030871 +:103C00007D65030810B5144C236823B3134B144A85 +:103C10001B6C11888B4213D1124B198803F092FB55 +:103C2000226892F86A30013382F86A30FEF714FF96 +:103C300020681DF0E5FA0020BDE81040FEF710BD39 +:103C400003F080FB206803681B6A98470020BDE8EA +:103C50001040FEF735BD10BD34E70120006801407B +:103C6000A2720020A07200202DE9F74304464FF411 +:103C7000707894F83A304FF0FF31002B31D0606DFE +:103C800005F026FB276BA36ABB4200D1676B266A4F +:103C9000656856B32B68314628465B6A984700230F +:103CA000236284F83B30606D05F042FB2B684FF4D3 +:103CB000F0723946CDF8008028465E694FF488736B +:103CC000B0474FF0FF310646606D05F001FB94F8F8 +:103CD0003B30E3B1002384F83B30606D05F028FBF6 +:103CE000C7E7206D05F0A4FBC3E7636A002BDAD0B9 +:103CF0002B682846D3E909939847616A014428460E +:103D0000C847A368626A66621344A360CBE7E762B0 +:103D10005EB12B6828469B6A984701380023E06013 +:103D200084F83C6084F83A30D7E70120F6E70000D9 +:103D3000014808B5FFF798FF6C7A00200368042259 +:103D400070B504465E6A00230D46B0474FF0FF3160 +:103D5000606D05F0BDFA382303FB0542D16A09B155 +:103D60000021D16203FB0545012385F83B30002388 +:103D700085F83930606DBDE8704005F0D9BA38B5C6 +:103D800000EB810304460D46114658680368DB6862 +:103D9000984729462046FFF7D1FF38BD70B50D463C +:103DA0001146044600EB85025068026896681A4680 +:103DB000B04729462046FFF7C1FF70BD38B5164908 +:103DC00000251648FFF790F8154C164B01202A469F +:103DD000294623604FF48073A564A38784F84C00C0 +:103DE00084F83E50C4E91055C4E91455C4E901559E +:103DF000C4E90355C4E90555C4E90755C4E90955A3 +:103E0000C4E90B55C4E90D5505F0BCFA20652846F8 +:103E100005F01AFA606538BDA4720020247A0020EB +:103E20006C7A00200C720308704710B50446042118 +:103E300030F061FA204610BD012908B506D00229EC +:103E400008D059B900F0A0FF006808BD00F09CFF41 +:103E50004068FAE700F098FF8068F6E70020F4E792 +:103E600000487047547203080320704713B50024BC +:103E700051B1036801AA01948DF803409C680DF1CB +:103E80000303A04702B010BD0846FBE7C089704796 +:103E9000008A7047C088704780887047807A00F039 +:103EA0007F007047807AC0097047704710B504469C +:103EB000082130F020FA204610BD7047704700F509 +:103EC00098730868496803C370477047704741603A +:103ED00070477047064BC0F84801C0F84C310023CA +:103EE000C0F8503100F5A273C0F84031704700BFF0 +:103EF000993F00080123037270477047704710B460 +:103F000041680346C2689B68541001EB6200D20707 +:103F100048BF0A595DF8044B48BFD3581847436857 +:103F20002BB183682BB9C06800F0010070471846B8 +:103F300070470120704710B504460C2130F0DBF9C2 +:103F4000204610BD10B50446102130F0D4F92046AB +:103F500010BD10B504464FF4AE7130F0CCF92046D8 +:103F600010BD10B51FF040FC0368BDE81040DB6BCE +:103F7000184710B50446D0F8400158B10368DB6813 +:103F8000984738B1D4F8400103689B6898470023EC +:103F9000C4F8403110BD00002DE9F14FD0E9555A69 +:103FA0000746A86803681B6A984741F2D7039842FE +:103FB00005D8464BA321464A464830F0CBF96868FD +:103FC00003681B6A98470F2803D8434BA421404A33 +:103FD000F2E7E86803681B6A98470B2803D83F4B51 +:103FE000A5213B4AE8E7DFF8FC901FF0FDFB043019 +:103FF0001FF01FFCD9F8000010B10368DB68984778 +:10400000D9F8000010B103681B689847DFF8D88022 +:10401000D8F8000010B103685B699847D7F83C01F5 +:1040200010B103685B689847D8F8000010B10368C6 +:104030001B689847D7F83C0110B103689B68984704 +:10404000E86800214FF0000B03685B6A9847244B37 +:104050000446C0F804B00360594680F808B0A86868 +:1040600003685B6A9847064600F026FF6868594671 +:1040700003685B6A98470546314600F0C7FEC9F8F9 +:104080000040C7F83C51C8F80060E5B12B1DCAF8E4 +:10409000083030463368C5F808A0DB68F5639847F8 +:1040A0002B6828461B6898472146304621F036F990 +:1040B000236820461B699847236820465B6901B046 +:1040C000BDE8F04F18472B46E1E700BFA072030898 +:1040D0002E730308387403087F74030822750308DD +:1040E0003C76030874E7012070E70120044B1B684D +:1040F00093F858200AB1D86C00B99868704700BF8F +:1041000034E70120F8B5044617460E461FF032FC8E +:10411000104B00251C6029460F4B23600F4BC4E950 +:1041200051350F4B1868C4E953550368C4E94F551E +:104130009B68C4E955769847284600F0D9FDFFF7FB +:10414000D5FF28F07EFDFFF7D1FF28F0F5FD2046D2 +:10415000F8BD00BF80E70120E8750308D0750308AB +:1041600034E70120064BC0F84801C0F84C31002369 +:10417000C0F8503100F5A273C0F84031704700BF5D +:10418000993F0008406A7047806A704770478B8883 +:10419000C069DB0A0A6850F823001044704710B564 +:1041A000C2B1137BB3B1547BD27A240204F4E0642D +:1041B0001443026A98B202EB840213888B4202D144 +:1041C00092F9020010BD05D80138043280B20028EF +:1041D000F3D1F7E70020F5E710B504462C2130F0C5 +:1041E0008AF8204610BD000030B58BB00446BDF8FB +:1041F00060500895BDF85C5007959DF850500695A5 +:104200009DF84C5005959DF8485004959DF84450F4 +:1042100003959DF8405002959DF83C500195BDF8DE +:104220003850009520F006FC064B20462360159B75 +:10423000E361169B2362199B63621A9BA3620BB016 +:1042400030BD00BF60760308002070478180704752 +:10425000C180704701817047418170477047704746 +:1042600070477047704710B4C4880368121B848875 +:104270005B6D091B12B25DF8044B09B218474FF68B +:10428000FF7383814FF0FF3303621368C3611060D3 +:1042900070477047704770477047704790F8252007 +:1042A0001AB190F8242002B1186070477047704727 +:1042B0007047704770477047704770470368DB6A04 +:1042C000184703681B6B184703685B6B1847036844 +:1042D0009B6B18470368DB6B184703681B6C184718 +:1042E00003685B6C184703689B6C1847704730B4D1 +:1042F00044680346C2689B68551004EB6200D2070D +:1043000048BF625930BC48BFD358184743682BB1E7 +:1043100083682BB9C06800F00100704718467047E9 +:104320000120704710B5044610212FF0E4FF20460D +:1043300010BD10B50446983000F0FCFD04F5247063 +:1043400000F0F8FD04F5916000F0F4FD04F5D06094 +:1043500000F0F0FD04F6780000F0ECFD04F52760B5 +:1043600000F0E8FD04F6684000F0E4FD04F5666046 +:10437000BDE8104000F0DEBD90F8252012B10368C2 +:104380005B6918477047036870B504461B6B154698 +:1043900098472368204629465B6BBDE87040184764 +:1043A00070B504461D46BDF91060FFF7ECFF2368A9 +:1043B000294620469B6B9847236831462046DB6B95 +:1043C000BDE8704018470000094A4FF48071026050 +:1043D00000228184FF21826280F82610C0E9012238 +:1043E000C0E90322C0E90522C0E90722704700BFE7 +:1043F00044C50308034B10B50446036000F0B0F950 +:10440000204610BD247C0308124B10B504460360FF +:1044100000F56660FFF7EEFF04F66840FFF7EAFF7D +:1044200004F52760FFF7E6FF04F67800FFF7E2FFE8 +:1044300004F5D060FFF7DEFF04F59160FFF7DAFFC7 +:1044400004F52470FFF7D6FF04F19800FFF7D2FFC0 +:10445000204610BDD876030810B50446FFF7D4FFF8 +:1044600041F2D80120462FF046FF204610BD10B57E +:104470000446FFF7BFFF4FF4FC7120462FF03BFFCF +:10448000204610BD2DE9F04F04462DED068B83B07C +:10449000274620F097FD0022864B04F16C0BE26367 +:1044A00004F1980A47F8403B3846FFF78DFF04F5C2 +:1044B0002479584604F59168FFF786FF504600F0CE +:1044C0002FFD484600F02CFD404600F029FD04F584 +:1044D000D06304F58055261D184608EE103A00F00A +:1044E0001FFD04F67803184608EE903A00F018FD18 +:1044F00004F52763184609EE103A00F011FD04F6A2 +:104500006843184609EE903A00F00AFD04F5666328 +:1045100018460AEE103A00F003FD67490022674B87 +:10452000296638466649EC66C5E91C126549C5E945 +:1045300020126549C5E924126449C5E91923C5E972 +:104540002812C5E91634C5E91E34C5E92234C5E987 +:104550002634C5E92A34C5E92E34C5E932345C492C +:104560005C4BC5E92C12C5E934325B494FF48873C2 +:10457000C5E93012114600934FF4F073FFF710FFB6 +:104580004FF07F4339463046A3661BF02BFB0022D9 +:104590004FF488735846114600934FF4F073FFF7B9 +:1045A000FFFE4E4B59463046C4F894301BF01AFBC0 +:1045B000002250461146FFF7E6FE04F582535146AD +:1045C00030461833C4F878321BF00CFB0022484602 +:1045D0003021FFF7D8FE04F58353494630460833AF +:1045E000C4F870341BF0FEFA002240466021FFF749 +:1045F000CAFE04F58353414630461833C4F8683682 +:104600001BF0F0FA002218EE100A9021FFF7BBFE13 +:1046100004F5845318EE101A30460833C4F8603895 +:104620001BF0E0FA002218EE900AC021FFF7ABFE63 +:1046300004F5845318EE901A30461833C4F8583AEB +:104640001BF0D0FA002219EE100AF021FFF79BFEB2 +:1046500004F5855319EE101A30460833C4F8503C5F +:104660001BF0C0FA002219EE900A4FF49071FFF788 +:104670008AFE04F5855319EE901A30461833C4F8B3 +:10468000483E1BF0AFFA00221AEE100A4FF4A87150 +:10469000FFF779FE04F5865330461AEE101A0833F8 +:1046A0002B641BF09FFA204603B0BDEC068BBDE8DF +:1046B000F08F00BFD8760308BD420008C07603081B +:1046C000C3420008C9420008CF420008D542000892 +:1046D000DB420008E7420008E1420008EBA250FF7D +:1046E000806A704730B585B00368044601816D4625 +:1046F0000146D3F884303C342846984795E80700B3 +:1047000084E8070005B030BD30B585B003680446C5 +:1047100041816D460146D3F884303C3428469847A1 +:1047200095E8070084E8070005B030BD002202804C +:1047300042808280C280704780F8361070470368DC +:1047400070B504461B6B15469847236820462946DA +:104750005B6EBDE87040184700207047806C704762 +:10476000704770477047704770B445680346C46827 +:104770009B68661005EB6400E40744BFAC59E3583E +:1047800070BC184743682BB183682BB9C06800F030 +:1047900001007047184670470120704710B5044665 +:1047A0004C212FF0A8FD204610BD10B50446102165 +:1047B0002FF0A1FD204610BD10B504464FF4FA714C +:1047C0002FF099FD204610BD08B5FFF7D5FD08BDB7 +:1047D00013B50446D0F8E001019160B10368DB68CD +:1047E000984740B1D4F8E001019903689B6802B092 +:1047F000BDE81040184702B010BD000000F12C03C6 +:104800008B4270B50446154612D113460A21094A57 +:1048100000F5E67022F066F804F5B67020F05DF859 +:104820002368E9B22046D3F88C30BDE870401847C1 +:1048300070BD00BF968F0308036870B55E6B0446B9 +:10484000114B8DB21B682BB9104B6C21104A1148CB +:104850002FF080FD1049828D0988914203D80F4BBB +:104860006D210B4AF3E713F812200D4B1B6853F828 +:10487000220003681B6B9847281A334601B2204672 +:10488000BDE87040184700BF84E701202477030883 +:1048900066770308A177030888E70120E877030813 +:1048A0008CE7012000224FF0FF318260C0E9002137 +:1048B000704700004FF48071002281840C4902632C +:1048C00001600C49028781624FF6FF71C2638185E6 +:1048D0004FF47F0141634FF0FF31C0E90122C0E98D +:1048E0000322C0E90522C0E90722C0E9101270477F +:1048F000B4C40308987203084FF480732DE9F04F95 +:1049000004460025064683845D4B04F590788BB001 +:1049100004F5B67785624FF0010ADFF874914FF025 +:104920007F4BC0E90155C0E90355C0E90555C0E911 +:10493000075546F82C3B30461BF026FE4046FFF755 +:10494000B9FFC4F820913846C4F86851FFF7B2FFA8 +:104950004C4B3046C4F86C912F220721C4F8B45157 +:10496000C4F8E051DFF82C91C4E97934464BC4E92E +:104970007B35464BA360FFF706FD022307AA06A975 +:104980003046ADF81C3008ABADF818A0ADF820509B +:104990001BF054FE7D23304603220721CDE900534E +:1049A0002B461BF09AFD6422294630461BF0E7FB9C +:1049B000294630461BF0ABFB04F5F2733146204626 +:1049C000C4F81C3102AE1BF00DF924230B2229463A +:1049D000404600933023FFF7E3FCD4F820314146F2 +:1049E0003046D3F88430C4F850B1A4F854519847F5 +:1049F00004F5AE7396E8070083E8070004F5DC735E +:104A000008A94046A4F8B851C4F86831CDF8209000 +:104A1000ADF824A01DF0D6F8414620461BF0E2F880 +:104A20001023EF222946384600933023FFF7B8FCC5 +:104A3000D4F86C3139463046D3F88430C4F89CB190 +:104A4000A4F8A051984704F5D47396E8070083E8CA +:104A5000070004F5E67308A93846A4F8CC51C4F859 +:104A6000B431CDF82090ADF824501DF0ABF82046BD +:104A700039461BF0B7F820460BB0BDE8F08F00BFF9 +:104A8000D8780308C0780308FD47000830001001FB +:104A900030780308987203087047000030B5174D4E +:104AA0008FB02C68BFF35B8F14F0010422D128462D +:104AB0002FF023FCF0B13F23252211490993114B1C +:104AC00011480893114B0A9407930123019404930E +:104AD000CDE905430423CDE902430A23CDE90B4484 +:104AE00000930C23FFF780FB09482FF051FC284668 +:104AF0002FF00FFC04480FB030BD00BFC47A002077 +:104B0000788D00905CCB0308C87A002068CB03083E +:104B1000994A00087047000030B5164D8FB02C68D8 +:104B2000BFF35B8F14F0010420D128462FF0E5FB82 +:104B3000E0B13F23012210490993104B104808931C +:104B4000104B0A940594CDE906430423CDE90332C2 +:104B50001423CDE90B440093CDE90144FFF744FB56 +:104B600009482FF015FC28462FF0D3FB04480FB05E +:104B700030BD00BFF47A0020808F009060CB030826 +:104B8000F87A00206CCB0308154B00087047000032 +:104B900030B5164D8FB02C68BFF35B8F14F0010455 +:104BA00020D128462FF0A9FBE0B13F230122104974 +:104BB0000993104B10480893104B0A940594CDE9C3 +:104BC00006430423CDE903322823CDE90B440093A7 +:104BD000CDE90144FFF708FB09482FF0D9FB28462F +:104BE0002FF097FB04480FB030BD00BF247B00209E +:104BF000908F009064CB0308287B002070CB0308C3 +:104C00008D4B000800207047002070470EB403B59C +:104C100003AB002153F8042B01931FF033FD02B0C6 +:104C20005DF804EB03B070470CB407B504AB53F860 +:104C3000042B01931FF026FD03B05DF804EB02B0D6 +:104C400070470000436C10B5044673B3038F2BB953 +:104C5000184BC521184A19482FF07CFBC38E00EB76 +:104C600043035B8C0BB321F089F8238F012B03D80E +:104C7000134BCB21134AEEE7E28E40F63F10531C54 +:104C80009BB2092B194688BFA3F10A0104EB41012D +:104C9000498C814209D10A2B04EB420228BF002330 +:104CA000508C04EB4303588451842046BDE81040E7 +:104CB00020F066BF68790308717903081C7A03083D +:104CC000667A0308747A030820F023BF10B586B013 +:104CD00002AC84E806001A460AAB2146059301930C +:104CE000099B0093089B1EF01DF906B010BD000043 +:104CF00038B518BB124B13481C681349B4B122686D +:104D000022440260626822440A60A26814440F4B85 +:104D100000221A8000F038F8054600F033F80C4BFA +:104D20001C600C4B1D600C4B188007E00B4B0360A4 +:104D30000B4B0B600B4B1C68002CE8D138BD00BF3F +:104D4000547B0020587B00205C7B0020607B00208F +:104D500084E701208CE7012088E70120A88F0090DC +:104D6000A08F0090B08F0090044B1B6853F8210077 +:104D7000034B1B6803EB4000704700BF5C7B0020C7 +:104D8000587B00200220704700487047647B002059 +:104D900010B5054CFFF7C0FE2060FFF7F9FE60601C +:104DA000FFF77CFEA06010BD647B0020704710B54B +:104DB00004464FF4AE712FF09EFA204610BD10B598 +:104DC0000446D0F8580100F086F82046BDE81040AF +:104DD0001EF08CBD10B50446FFF794F9014B204638 +:104DE000236010BD507B030870470438704770473C +:104DF00010B5044610212FF07EFA204610BDA0F118 +:104E00000400F5E7806800F067B800000022C16088 +:104E10008260044A10B502F1080424320460426042 +:104E200010BD00BF9C7B03087047C06B0A46002181 +:104E300003681B691847C06B0A46012103681B6998 +:104E40001847C06B0A46022103681B691847C06BEC +:104E50000A46032103681B691847C06B0A460421F0 +:104E600003681B691847C06B0A46052103681B6964 +:104E70001847C06B0A46062103681B691847C06BB8 +:104E80000A46072103681B6918470000034B10B549 +:104E900004460360FFF7B8FA204610BDD07B030834 +:104EA00010B50446FFF7F2FF41F2D80120462FF07B +:104EB00022FA204610BD000010B50446FFF7E2FAC2 +:104EC000014B2046236010BDD07B0308FFF731BAA9 +:104ED000002282607047704707290AD8054B425468 +:104EE00033F811305A436423B2FBF3F2024B23F838 +:104EF00011207047D8050020C8050020704710B564 +:104F00000A230446084684F8F4111A4604F5DC71B5 +:104F100021F0D8F904F59070BDE810401FF0DDBC19 +:104F200010B50446FFF7E8FC014B2046236010BD96 +:104F3000247C0308FFF715BC30B570B1CC6864B1B0 +:104F40008A6852B10B6943B10D6849688560C160D8 +:104F50008361C0E90424002030BD4FF0FF30FBE73F +:104F600073B5002346680446019366B1A369984768 +:104F70000546A3699847431BB3F5FA6FF9D9012396 +:104F80000025636027E0836803B19847202300254C +:104F90002360636901AA12213046984700281DDB6F +:104FA000019B03F01F03B3421AD10025266020683D +:104FB0001F282DD87DB923694FF400422946984710 +:104FC000002828DB636901AA294620689847002841 +:104FD0000ADA6FF00405284602B070BD6FF00405D0 +:104FE0000136202ED5D1E2E7A36998470546019BFB +:104FF000A2691B04BAD59047401BB0F5FA7F0DD8C3 +:10500000636901AA0021206898470028EFDAE0E7E9 +:105010006FF00205DFE76FF00305DCE76FF00105D5 +:10502000D9E737B500254369044601AA0121006884 +:1050300001959847A84203DA6FF0040003B030BD31 +:10504000636901AA0121206898470028F4DB019BCD +:105050005B072CD5636901AA294620689847002878 +:10506000EADB019BDD040ED403F40452B2F5045FC5 +:1050700001D10220E2E7980401D50320DEE7D9053B +:1050800013D50420DAE7636901AA1F212068984735 +:105090000028D1DB019BDA040BD503F01C03182B8D +:1050A000E7D0082BE9D0142BEBD00520C6E7012070 +:1050B000C4E70620C2E7000000B54FF4807295B047 +:1050C0004FF0807103460C9205220F910121069248 +:1050D000002201910B92139200920B48CDE903122A +:1050E000CDE90D22CDE91122102206A902924FF43A +:1050F000800205926A4602F007FB003818BF0120C3 +:1051000015B05DF804FB00BF707B002000B54FF4C4 +:10511000807395B041F2883217480C93062306A994 +:1051200006930023CDE90D330F930B931393CDE931 +:10513000113302F0A6FAE0B9022301224FF48001F4 +:1051400004900D48CDE900331023CDE90232052348 +:105150006A46CDE905134FF0807306A90F9341F21B +:10516000883302F0D1FA003818BF012015B05DF87D +:1051700004FB0120FAE700BF707B002000B54FF46C +:10518000807391B04FF040720E480893EB2302A950 +:1051900002934FF4406309934FF4005305930023A7 +:1051A000CDE90A320A220F9307926A46CDE90D3300 +:1051B000CDE9003302F0F8FA003818BF012011B031 +:1051C0005DF804FB707B0020454B012145489A6B3C +:1051D00042F00202F0B59A638DB09A6B092404275D +:1051E000002602F00202404D0092009A9A6942F0B5 +:1051F00002029A619A6922F002029A611A6B42F0E5 +:1052000002021A631A6B02F002020192019A1A6BEF +:1052100042F002021A631A6B02F002020292029A30 +:105220001A6B42F008021A631A6B02F0080203922A +:10523000039A1A6B42F008021A631A6B02F0080212 +:105240000492049A1A6B42F010021A631A6B02F06D +:1052500010020592059A1A6B42F008021A63402266 +:105260001B6B03F008030693069B0223CDE907237B +:105270000323CDE909130A2307A90B9301F0CAF907 +:1052800007A91848079709960B9401F0C3F94FF442 +:10529000006307A928460B94079301F0BBF94FF46C +:1052A000805307A928460B94079301F0B3F907A987 +:1052B0000E4807970B9401F0ADF94FF4005307A97E +:1052C00028460B94079301F0A5F932460F215C2084 +:1052D00000F0D8F95C2000F007FA0DB0F0BD00BF77 +:1052E0000038024000040240000C0240001002405E +:1052F000F0B5494C91B0494B2046236002F0AEF91D +:10530000054610B1012011B0F0BD01462046FFF75F +:105310005BFF012604234FF08077C4E9016310236B +:10532000E36097FAA7F3B3FA83F32046013B2361C6 +:105330004FF4A063C4E90755C4E9053502F03AF912 +:105340000028DFD14FF4807566230B9041F288323C +:10535000079002A90F9008950293CDE90900CDE9C5 +:105360000D00204602F08DF908B10420CBE7992307 +:1053700041F2883202A92046029302F082F9002805 +:10538000F3D141F28830FFF797FE0028EDD1852355 +:10539000079041F2883202A9089502930B97CDE954 +:1053A0000900CDE90C60CDE90E00204602F069F954 +:1053B0000028DAD141F288320DF10701204602F0CF +:1053C000D9FA0028D1D1FFF7A1FE0028CDD1812341 +:1053D000F022029392FAA2F20A219DF80730B2FA63 +:1053E00082F2204603F00F0301FA02F202A91343EE +:1053F00041F288328DF8073002F043F90028B4D129 +:1054000041F288320DF10701204602F057FA0028D8 +:105410003FF479AFA9E700BF707B0020001000A027 +:105420000F490020D1F8883043F47003C1F8883068 +:105430000C4B1A6842F001021A6098601A6822F058 +:10544000847222F480321A60074A5A601A6822F481 +:1054500080221A60D8604FF000638B60704700BFF5 +:1054600000ED00E0003802401030002470470020BA +:1054700070470000002337B58DF807300D4B1A78C0 +:105480000AB901221A700324C5B2013CA82128469A +:10549000FDF7CAF814F0FF048DF807009DF80730F7 +:1054A000DBB203D19DF8070003B030BD512BECD126 +:1054B000F8E700BFBE7B002013B500240221C0B274 +:1054C0008DF80740FDF7B0F88DF807009DF807301C +:1054D00003F00F038DF807309DF80730052B01D935 +:1054E0008DF807409DF80720034B9DF807005A7080 +:1054F00000229A7002B010BDBE7B00202DE9F74F4C +:105500002F4C15464FF000080F46A37862788DF8AF +:1055100007809A424DD9092B4ED803EB43035B0019 +:10552000DBB2191D03F1030B03F1060A0533C9B2FF +:105530005FFA8BFB5FFA8AFA5FFA83F8C6B2DFF88C +:1055400084903046FDF770F88DF807009DF807301D +:1055500059463046A9F80030FDF766F88DF8070087 +:1055600051469DF807303046B9F800201B0203F47D +:10557000706313433B80A9F80030FDF755F88DF8B0 +:10558000070041469DF807303046A9F80030FDF786 +:105590004BF88DF807009DF80730B9F800201B0282 +:1055A00003F470631343A9F800302B80A378013310 +:1055B000A37003B0BDE8F08FC246C3464146BDE7C5 +:1055C000BE7B0020BC7B00200122A421C0B2FDF7DD +:1055D00011B80022A421C0B2FDF70CB8FFF7F9BF43 +:1055E00070470000024B1A780AB901221A707047FE +:1055F000BE7B0020074A032008B5136843F480737C +:10560000136000F02DF80020FCF776FBFCF728F87B +:10561000002008BD003C0240034A044B11681B787F +:105620000B441360704700BFC47B00204C00002077 +:10563000014B1868704700BFC47B002038B5044692 +:10564000FFF7F6FF0546631C1EBF044B1B78E418EA +:10565000FFF7EEFF431BA342FAD338BD4C000020F6 +:1056600007490302CA6803F4E06322F4E06212040B +:10567000120C134343F0BF6343F40033CB60704715 +:1056800000ED00E0164B30B5DC68C4F30224C4F131 +:105690000703251D042B28BF0423062D4FF0FF35DB +:1056A0008CBF033C002405FA03F3002805FA04F537 +:1056B00021EA030322EA050203FA04F343EA0203A0 +:1056C0004FEA0313DBB206DB00F1604000F56140F6 +:1056D00080F8003330BD00F00F00024A1354F9E7A0 +:1056E00000ED00E014ED00E0002807DB4109012394 +:1056F00000F01F00024A834042F82130704700BF8B +:1057000000E100E000280CDB4309012200F01F004B +:1057100004492033824041F82320BFF34F8FBFF369 +:105720006F8F704700E100E0BFF35F8F044B5A6A50 +:1057300022F480325A620022C3F89420704700BFDE +:1057400000ED00E0064B40F00100C3F894005A6AF7 +:1057500042F480325A62BFF34F8FBFF36F8F7047AE +:1057600000ED00E04378144A10B5C2F89830017893 +:10577000E9B14368C2F89C30C37A047B1B0643EA54 +:1057800004730B43817A43EAC143417B43EA81437B +:10579000817B43EA4143C17B43EA0143417A43EAC7 +:1057A0000123017A43EA4103C2F8A03010BDC2F8D8 +:1057B0009C10C2F8A010F9E700ED00E010B5044617 +:1057C00008B9012010BD437F03F0FF0213B902772F +:1057D000FBF764FF022363772379E3B92368134A55 +:1057E0005A619A6822F018029A6062792368D2B9E5 +:1057F0004FF0FF321A6100209A68616922F060025E +:105800000A43A1699A609A6822F080020A439A606A +:1058100001236377D6E7D4E90212204600F008F8A6 +:105820000028E2D0CDE72269E4E700BFB71DC1043C +:105830001F2310B5013B1CD321FA03F4E407F9D56B +:10584000102A12D004D83AB1082A10D001200BE057 +:10585000182AFBD1062BF9D800684161836823F030 +:10586000180313438360002010BD072BF3E70F2BB1 +:10587000F1E7002AEAD1EFE770B50446866DFFF73D +:10588000D7FE054694F83530022B06D08023012040 +:105890006365002384F8343070BD23681A6822F0F1 +:1058A00016021A605A6922F080025A61226C0AB903 +:1058B000A26C1AB11A6822F008021A601A6822F063 +:1058C00001021A6023681B6813F0010308D1E16D1F +:1058D0003F2218468A40B260012284F83520D8E77A +:1058E000FFF7A6FE401B0528ECD9202303206365A3 +:1058F00084F83500CDE710B5044630B390F8393060 +:1059000003F0FF021BB980F83820FBF7DDFE2268A8 +:1059100002236168002084F83930136823F440338F +:105920000B43A1681360536B23F007030B43E1683B +:105930005363136C23F47F5323F03F030B4313642F +:105940000123E06384F8393010BD0120FCE7704783 +:105950007047036870B55E6804461D68F20714D589 +:10596000E90512D51A6822F480721A60C26B42F0FF +:105970000102C26301229A60042380F839300023B7 +:1059800080F83830436903B19847B20616D5AB04A6 +:1059900014D523681A6822F400521A6020229A60F3 +:1059A000E36B43F00203E363042384F839300023FC +:1059B00084F8383063690BB120469847300716D514 +:1059C000290514D523681A6822F400621A60082297 +:1059D0009A60E36B43F00403E363042384F83930F3 +:1059E000002384F8383063690BB12046984772076A +:1059F0000BD56B0509D5236820461A6822F480620E +:105A00001A6004229A60FFF7A2FFB00714D5A90517 +:105A100012D523681A6822F400721A6002229A6072 +:105A2000E36BE363012384F83930002384F83830D2 +:105A300023690BB120469847F20613D5EB0411D524 +:105A4000236820461A6822F480521A6010229A6055 +:105A5000E36BE363012384F83930002384F83830A2 +:105A6000FFF776FF70BD0000F0B590F83830012BDD +:105A70004FF002032BD080F83930012200EB0113E4 +:105A80001C4F80F838200E015D6AD3E9074244EAD2 +:105A90000242093C012C96BF05F07F4342EA0562B1 +:105AA0001A430368A9B9596A012C01EA070142EABD +:105AB00001025A6282699A6103D8426A22F07F42E7 +:105AC0009A62012380F83930002380F83830184674 +:105AD000F0BDD969012C01EA070142EA0102DA614D +:105AE00000EB060292691A61EBD825F07F451D6232 +:105AF000E7E700BFF0FFFC002DE9F043866A91461E +:105B00008C6800EB860CDCF818301D68002D02DA7A +:105B10000220BDE8F083DCF82C50002DF8D1256878 +:105B200067689D605D6825F4FF5525F01F053D43BE +:105B30000F68FA075D6005D51D684A6925F44005C0 +:105B400015431D60BD0605D51D68096925F0406532 +:105B5000294319607A0703D5196841F0800119605B +:105B6000196841F080511960BFF35F8F19680025F3 +:105B7000DFF8D08041F0004119603146A46805F19A +:105B8000010EBCB91A68B9F1000F58D042F080423A +:105B90001A601A6842F000521A6000EB8103C26B6F +:105BA000DA62816272B6036C01332B44036462B61D +:105BB0000020AEE71D6825F000551D601D68B9F195 +:105BC000000F25D045F080454F1C1D60032F88BF76 +:105BD000CF1E00EB8705AB69196821F08051196071 +:105BE0001968002917DADCF81810002272458FD0E6 +:105BF000BFF35F8F0B68013223F000430B60731C0F +:105C0000032B88BFF31E00EB83011E468969EDE775 +:105C100025F08045D8E7E96A0029E4D12168656864 +:105C20009960596801EA080129435960BFF35F8F01 +:105C30001968754641F00041196039469EE722F027 +:105C40008042A5E700E0FFFF70B58B680D4649690B +:105C5000044602680B43A96910680B43696A0B4349 +:105C6000E97F43EA0143297F43EA0133297943EA83 +:105C70008123E97B43EAC11395F8281043EA011315 +:105C80002949014001200B43297CB1FA81F14909DE +:105C900043EAC153697CB1FA81F1490943EA81536E +:105CA000A97FB1FA81F1490943EA413395F82010FF +:105CB000B1FA81F1490943EA412313601668FFF7FD +:105CC000BDFC2168A86C0E608A692B6D22F0BE02B3 +:105CD00043EA00431204120C134395F84C20B2FA25 +:105CE00082F2520943EAC21395F85520501E4242EF +:105CF0004241012043EAC20395F85620561E7242E3 +:105D0000724143EA820395F8542002F1FF3CDCF132 +:105D1000000242EB0C0243EA42038B618D69FFF7FC +:105D20008DFC23689D6170BD0F8120FF70B54B69AC +:105D30000D46096A044602680B43697B02F58052EE +:105D400043EA4163A97B906943EA4153297F43EACF +:105D5000C113A97F43EA811395F8241043EA810314 +:105D60001A49014001200B43297BB1FA81F149090D +:105D700043EA8163697FB1FA81F1490943EA01533A +:105D800093619669FFF75AFC22680120A96902F520 +:105D90008052AB6896610B4395F8251043EAC11316 +:105DA00029690B4329680B43A96A43EA81032979CE +:105DB00043EA416343F4000313601568FFF73EFCB8 +:105DC000236803F580531D6070BD00BF233FDEF8DC +:105DD000002313B5019304460368012003F58053A3 +:105DE0009A6942F480129A619B690193FFF726FC3D +:105DF0002368019A03F580539A6102B010BD000038 +:105E00002DE9F3470023876E0446C66E019307F120 +:105E100012034FF001084FF48C4950F82350DFF87B +:105E20006CA016B1B8F1000F0CD1E36EB34206D0EE +:105E30002368002203F580539A60C4E91A7602B001 +:105E4000BDE8F0872B6A33B901A8FCF7E7FA019B9C +:105E5000CBB12B62AB60A36D93B9C5F804A0BFF3BF +:105E60005F8F2B68013E43F000432B607B1C032BAC +:105E700088BFFB1E03F112021F4654F82250D0E7E0 +:105E8000C5F80490EBE79846CBE700BF00460080DA +:105E9000F0B50446A7B0002800F0D780D0F88430D1 +:105EA00023B92323C0F88430FCF7ECF96A4BA168CE +:105EB0005A6C42F480425A645B6C03F48043019351 +:105EC000019B664B5A6822F400025A605A680A43E2 +:105ED0005A605B68236803F580531A6842F0010238 +:105EE0001A60FFF7A5FB0646236803F580531D687B +:105EF00015F0010540F09C8001264FF4804240F2ED +:105F000001174FF400630DA920468DF83860ADF8F5 +:105F100052600F958DF850508DF854508DF84350C5 +:105F2000ADF8447016958DF85C501F958DF8805033 +:105F30002195ADF888508DF88A50CDE91223FFF7EE +:105F400083FE4FF48033204602A904934FF400539C +:105F50008DF80C608DF81660ADF814708DF8265031 +:105F60000A95ADF82C700C950295CDE906354FF4E5 +:105F7000800308934FF48073ADF82430FFF7D6FE0A +:105F8000E66804F1140C2A46284633461860194680 +:105F90005860032A9860D8604CF8043F1F6847F4A3 +:105FA000801741F8287B52D0D9601F68013247F42E +:105FB0004007042A1F600B46E8D12168002204F143 +:105FC00044074FF0004C01F58051A2624FF48C4E13 +:105FD0000E61266933461A60032D5A609A60DA60B2 +:105FE000C3F800C0C3F804E0586820F00040C3E9DB +:105FF0000822586003F1280047F8043F29D0D860F0 +:1060000001350346042DE6D100206268144BA065DB +:10601000C4E91700C4E91A00CE60918819641268B7 +:106020005A641023C4F88800C4F8843027B0F0BD47 +:10603000FFF7FEFA801BB0F5FA7F7FF655AF042319 +:10604000C4F88830E023C4F884300120EEE7DE6035 +:10605000ABE7DE60D4E700BF003802400038014003 +:1060600000800240F8B5D0F8843004460125102B9A +:1060700047D1036823268565C0F88460DA6B42F453 +:106080000272DA63D3F80C2142F4003242F060026B +:10609000C3F80C21D3F8102142F40312C3F81021E5 +:1060A0000423C366FFF7ACFE236828461A6842F053 +:1060B00008021A601F68FFF7C1FA236828461F60AC +:1060C0001A6842F004021A601F68FFF7B7FA2368E3 +:1060D00020461F60FFF77CFE2368002003F58053F5 +:1060E0009A6942F400529A619A6942F002029A61F6 +:1060F000DA6942F4D03242F0C102DA61C4F8846055 +:10610000F8BD2846FCE738B5D0F884300446232B88 +:106110003CD10168C0F88430012001F58053DA6970 +:1061200022F4D03222F0C102DA619A6922F40052DC +:106130009A619A6922F002029A610B6823F00403C3 +:106140000B600D68FFF77AFA236820461D60FFF7A1 +:106150003FFE236801201A6822F008021A601D68B9 +:10616000FFF76CFA234604F1540053F8442B1560F2 +:1061700053F8041F4A68984242F000424A60F7D13F +:1061800000201023A065C4F8843038BD0120FCE74E +:1061900010B5044639B9D0F8883043F00103C4F88B +:1061A0008830012025E0D0F88420232AF9D14B6BD8 +:1061B0000122C363FFF7A0FC20B1D4F8883043F07C +:1061C0000203ECE7BFF34F8FA36A5A1C032A8CBF6C +:1061D000033BA2624FF0000288BFA362236803F56D +:1061E0008053586910F0040003D00421104659610F +:1061F0005A6010BD2DE9F04F044685B08A4649B972 +:10620000D0F8883043F00103C0F88830012005B091 +:10621000BDE8F08FD0F88430232BF7D1D0F85C9014 +:106220004FF0000800F1800109F112034646C34611 +:1062300050F823507C3050F8103CC3F10403019314 +:106240002B68002B05DB019B9E4202D0B8F1000FAA +:1062500011D0E36E1E44E66616B12046FFF7D0FD6E +:10626000C4F85C90B8F1000FD0D0E36F0020CAF8FA +:106270000030E067CBE72B68DB0503D5AB69A3678C +:10628000EB6963672B689F0501D4E36F0BB32B6841 +:1062900067699A052B6848BFC4E918BBDB0507D5B9 +:1062A0002F684FF001082B68C7F30D472367043FA1 +:1062B000AA68BBB22A62CDE90201FCF7D1F8236ECD +:1062C00001332366636EDDE902013B446366C5F872 +:1062D00020B009F101030136032B88BFA9F10303A4 +:1062E00003F11202994654F82250A9E72DE9F0472C +:1062F000054601274FF028094FF0000AD0E9106445 +:1063000006B117B90020BDE8F08705EB8408013E0F +:10631000D8F82C0038B109FB04F3EA68D358002BF5 +:1063200005DA0027ECE7013404F00304E8E7013460 +:10633000FCF7C0F8C8F82CA004F00304C5E9106409 +:10634000DEE7704770470000036803F580535A6921 +:10635000510610B5044606D5DA69520603D52E4A11 +:106360005A61FBF78FFE236803F580535A69D00703 +:1063700008D5DA69D10705D54FF0011220465A61D8 +:10638000FBF786FE236803F580535A69120421D572 +:10639000DA6910041ED5D4F8882042F00802C4F847 +:1063A00088205A6912F4005F5A692DD022F07F428A +:1063B00022F4010222F45F4222F0FF02C4F88C2092 +:1063C000DA6922F4C032DA61E023C4F8843020466E +:1063D000FBF764FE23689A6B11070AD5DB6A204637 +:1063E00003F06003C4F89430FFF7ABFF0023C4F858 +:1063F00094300A4B5A69120305D54FF40022204607 +:106400005A61FFF79FFF10BD48F280610A40C4F84F +:106410008C205961DBE700BF40000100003C0140D7 +:10642000F8B5054600681E4692010369CC0202F4E5 +:10643000F86203F01C03A4B21A43144344F00104AD +:106440000461FFF7F5F8074614F0010405D12B6845 +:1064500020465B699BB23360F8BDFFF7E9F8C01BCB +:10646000B0F5803F02D22B681C69EDE70120F3E70D +:1064700070B505460068920104699BB202F4F862A7 +:1064800004F01C0443612243CC02A4B2144344F040 +:1064900003040461FFF7CCF8064614F0010401D1AF +:1064A000204670BDFFF7C4F8801BB0F5803F02D2D4 +:1064B0002B681C69F1E70120F3E700295DD0036830 +:1064C00000201A68C2F3001281F828201A6802F02E +:1064D00060024A621A6882F40072C2F3402281F8B4 +:1064E00020201A68C2F30042CA771A6882F4005268 +:1064F000C2F340328A771A68C2F300320A771A6808 +:1065000002F400628A611A6802F480424A611A68E1 +:1065100082F48002C2F380524A741A6882F4000244 +:10652000C2F3C0520A741A68C2F3C012CA731A685E +:1065300002F460228A601A68C2F380220A719A69A2 +:10654000C2F3400281F854209A6982F08002C2F3BB +:10655000C01281F84C209A6902F030020A659A69EB +:10656000120C8A649A69C2F3800281F856209B69F2 +:10657000C3F3C00381F8553070470120704708B558 +:1065800039B1D0F88430102B03D1FFF75DFB002028 +:1065900008BD0120FCE7000038B5036805461C690A +:1065A00001F0D0FC114B124A24F01C040344934226 +:1065B00004D244F008042B681C6138BD0D4B0E4A10 +:1065C0000344934202D844F00C04F4E70B4B0C4A0A +:1065D00003449342EFD30B4B0B4A0344934294BFC3 +:1065E00044F0040444F01004E5E700BF00D3CEFEFD +:1065F000C0E1E40040F1E9FD3F787D0100796CFCE9 +:10660000005A6202001F0AFA7FF0FA02D0F88C00EA +:10661000704700002DE9F74F0023DFF8B8916B4A6F +:1066200001240D689C4004EA050CAC4340F0B480A2 +:106630004D684FEA4308032605F0030406FA08F6FE +:10664000671EF643012F34D8876807EA060ECF6825 +:1066500007FA08F747EA0E078760476827EA0C0E33 +:10666000C5F300179F4047EA0E074760C768022C32 +:1066700007EA060E8F6807FA08F747EA0E07C760B1 +:1066800019D14FEAD30A03F0070B4FF00F0E00EBBE +:106690008A0A4FEA8B0BDAF820700EFA0BFE27EA13 +:1066A0000E0E0F6907FA0BF747EA0E07CAF82070BB +:1066B00001E0032CDAD1076804FA08F415F4403F2E +:1066C00007EA060744EA0704046065D0D9F84440A5 +:1066D00023F0030603F0030744F4804406F18046E8 +:1066E000BF00C9F8444006F59C36D9F8444004F48C +:1066F00080440194019C0F24D6F808E0BC402EEAA7 +:10670000040E334CA0424ED004F58064A0424CD01D +:1067100004F58064A0424AD004F58064A04248D0C9 +:1067200004F58064A04246D004F58064A04244D0C1 +:1067300004F58064A04242D004F58064A04240D0B9 +:1067400004F58064A0423ED004F58064A0420CBFF2 +:1067500009240A24BC40EF0244EA0E04B4606FEA44 +:106760000C06946854BF34404CEA0404AF029460B1 +:10677000D46854BF34404CEA0404AF03D460546876 +:1067800054BF34404CEA0404ED035460146854BF11 +:1067900034404CEA040414600133102B7FF440AF02 +:1067A00003B0BDE8F08F0024D4E70124D2E702242F +:1067B000D0E70324CEE70424CCE70524CAE7062467 +:1067C000C8E70724C6E70824C4E700BF003C01402F +:1067D00000000240003802402DE9F04F0022494CF1 +:1067E000DFF82891DFF828A1DFF828B1012303FAA8 +:1067F00002FE3EEA01050EEA01076CD122F0030514 +:1068000002F0030C0F26404B05F180454FEA8C0C3B +:10681000984205F59C3506FA0CF6D5F8088006EA8C +:1068200008085DD003F5806398425BD003F5806370 +:10683000984259D003F58063984257D003F580639E +:10684000984255D0484555D0504555D0584555D01B +:1068500003F58053984253D003F5806398420CBFF0 +:1068600009230A2303FA0CF3434513D1236823EACF +:1068700007032360636823EA07036360E36823EA8E +:106880000703E360A36823EA0703A360AB6823EA76 +:106890000603AB6056000323056802F0070CB34003 +:1068A0000F274FEA8C0C25EA030507FA0CF7056061 +:1068B000D50800EB85052E6A26EA07062E62C56814 +:1068C00025EA0305C560456825EA0E05456085682B +:1068D00025EA030383600132102A87D1BDE8F08FD7 +:1068E0000023BFE70123BDE70223BBE70323B9E78A +:1068F0000423B7E70523B5E70623B3E70723B1E78A +:106900000823AFE7003C01400000024000140240B1 +:1069100000180240001C02400369194214BF012004 +:10692000002070470AB1816170470904FBE74369A1 +:1069300001EA030221EA030141EA02418161704751 +:1069400003689A69910701D500229A629A69D20771 +:1069500003D49A6942F001029A61704730B5039DF1 +:10696000C1F3090104682B43606843EA0243054A06 +:106970000B4342EA555223F0004320EA020003434E +:10698000636030BDFF63FF0303682DE9F0419C693C +:1069900005460F46164614F010046FD0002410224E +:1069A000A046DA612B689A69900661D4B8F1000FAD +:1069B00035D044F0040401202E68B369D90505D50B +:1069C0004FF4807244F001040120F2615A0505D5AC +:1069D0004FF4806244F008040120F2619B054FD51A +:1069E0004FF4007344F00204F3612846FFF7A8FF58 +:1069F0007368012023F0FF7323F48B3323F4FF73B8 +:106A000023F0010373606B6C23436B64202385F8D0 +:106A10004130002385F8423085F8403032E07A1C5E +:106A2000C1D0FEF705FE801BB84201D8002FB9D1B6 +:106A30002B68596895F842209869D2B200040AD5AB +:106A4000490408D4202A06D05A6842F480425A6089 +:106A5000FEF7EEFD06462B689B699B06A2D4FEF767 +:106A6000E7FD801B1928F6D920244FF0010899E78B +:106A7000B8F1000F9DD12022DA619AE720469BE70A +:106A80000028B2D1BDE8F08170B504460D46164627 +:106A900023689B699B0701D5002070BD32462946BB +:106AA0002046FFF771FFA0B96A1CF1D0FEF7C0FDC8 +:106AB000801BA84201D8002DEAD1636C43F020036B +:106AC0006364202384F84130002384F8423084F842 +:106AD00040300120E1E72DE9F041069F0446884659 +:106AE00016461D462268936938EA03030CBF01234A +:106AF0000023B34201D0002015E06B1CF3D0FEF759 +:106B000097FDC01BA84201D8002DEBD1636C01207A +:106B100043F020036364202384F84130002384F889 +:106B2000423084F84030BDE8F08170B504460D462F +:106B3000164623689B699B0601D5002070BD32462E +:106B400029462046FFF720FF90B9FEF771FD801B14 +:106B5000A84201D8002DECD1636C43F0200363649C +:106B6000202384F84130002384F8423084F84030F8 +:106B70000120E3E710B5044600284AD090F84130E0 +:106B800003F0FF021BB980F84020FAF7BDFD242373 +:106B900084F8413023681A6822F001021A606268A2 +:106BA00022F070621A619A6822F400429A60D4E975 +:106BB0000221012924D142F400429A605A6800203F +:106BC00042F0007242F400425A60DA6822F4004255 +:106BD000DA60D4E904210A43A16942EA0122DA60B9 +:106BE000D4E907210A431A601A6842F001021A60C8 +:106BF0002023606484F84130206384F8420010BD93 +:106C000042F4044202299A60D8D14FF400625A60DB +:106C1000D4E70120F3E710B5044698B102682423B5 +:106C200080F84130136823F001031360FAF7B0FDD8 +:106C30000020606484F8400084F84100206384F8F8 +:106C4000420010BD0120FCE72DE9F74F994690F86E +:106C5000413004460F46202B1646BDF834A0DDF81F +:106C6000388040F0C6800C9B13B1BAF1000F06D1FA +:106C70004FF400736364012003B0BDE8F08F90F817 +:106C80004030012B00F0B5804FF0010B80F840B090 +:106C9000FEF7CEFC1923054600905A464FF40041FA +:106CA0002046FFF718FF0028E5D121235FFA89F27B +:106CB0003946606384F84130402384F842300C9BAD +:106CC0006064204663624C4BA4F82AA000934FF006 +:106CD0008073FFF743FE2A4641462046FFF7D4FE65 +:106CE00018BBB9F1010F236815D1F6B2002280213B +:106CF00020469E6243460095FFF7EDFEA8B9638DDE +:106D00009BB2FF2B15D8628D4FF00073009092B2AA +:106D10002285D2B212E0320A414620469A622A46C1 +:106D2000FFF7B2FE08B92368DFE7002384F840309C +:106D3000A1E7FF224FF0807300902285394620465C +:106D4000FFF70CFE2A4641462046FFF79DFE00282D +:106D500091D1636A226813F8011B91626362638DAB +:106D6000228D013B013A9BB292B26385638D2285ED +:106D70009BB2B3B1AAB94346802120460095FFF7E4 +:106D8000AAFE00287FF477AF638D9BB2FF2B28D932 +:106D9000FF224FF080730090228539462046FFF78E +:106DA000DDFD638D9BB2002BCCD12A4641462046A7 +:106DB000FFF7BBFE00287FF45EAF23682021D96176 +:106DC0005A6822F0FF7222F48B3222F4FF7222F012 +:106DD00001025A6084F8411084F8400084F84200AF +:106DE0004AE7628D4FF00073009092B22285D2B2D2 +:106DF000D3E7022040E700BF002000802DE9F74FD5 +:106E0000994690F8413004460F46202B1646BDF8AF +:106E100034A0DDF8388040F0C9800C9B13B1BAF182 +:106E2000000F06D14FF400736364012003B0BDE886 +:106E3000F08F90F84030012B00F0B8804FF0010B3C +:106E400080F840B0FEF7F4FB1923009005465A463F +:106E50004FF400412046FFF73EFE03460028E4D1F0 +:106E600022223946606384F84120402284F842207F +:106E70000C9A6064204662624D4AA4F82AA00092EF +:106E80005FFA89F2FFF76AFD2A4641462046FFF77E +:106E9000FBFD20BBB9F1010F236816D1F6B2002229 +:106EA000402120469E6243460095FFF714FEB0B98C +:106EB000638D9BB2FF2B3F4B15D8628D00934FF033 +:106EC000007392B22285D2B212E0320A41462046C5 +:106ED0009A622A46FFF7D8FD08B92368DEE7002347 +:106EE00084F84030A1E7FF2200934FF080732285A1 +:106EF00039462046FFF732FD434600220421204652 +:106F00000095FFF7E8FD00288FD123685A6A636A6D +:106F10001A70636A228D0133013A6362638D92B203 +:106F2000013B22859BB26385638D9BB2B3B1AAB945 +:106F30004346802120460095FFF7CDFD00287FF4D1 +:106F400074AF638D9BB2FF2B28D9FF224FF0807363 +:106F50000090228539462046FFF700FD638D9BB2E5 +:106F6000002BC9D12A4641462046FFF7DEFD002806 +:106F70007FF45BAF23682021D9615A6822F0FF7249 +:106F800022F48B3222F4FF7222F001025A6084F85C +:106F9000411084F8400084F8420047E7628D4FF0CA +:106FA0000073009092B22285D2B2D3E702203DE76F +:106FB000002000800024008010B590F84130202B84 +:106FC000DCB21DD190F84030012B19D0242380F879 +:106FD000413003681A6822F001021A601A6822F42C +:106FE00080521A601A68114319601A6842F001024F +:106FF0001A60002380F8414080F84030184610BDE8 +:107000000220FCE710B590F84130202BDCB21CD1F7 +:1070100090F84030012B18D0242380F841300368C9 +:107020001A6822F001021A601A6822F4706242EAB9 +:10703000012119601A6842F001021A60002380F8E9 +:10704000414080F84030184610BD0220FCE70000A7 +:10705000D2010068D1F800C0843283182DE9F043D2 +:10706000C6680CF101075D684FF0000E4C68C6F36E +:107070000B4605F47045D1F8189026445D60C5684C +:10708000C5F30B453D4445EA06455D60C668CD68DD +:10709000C6F30A062E449D6805F470459D608D6810 +:1070A000C7680135C7F30A073D4445EA06450E693E +:1070B0009D601D6925F007051D611E619D6991F8A0 +:1070C000327091F83180C3F818E091F8305045EAF9 +:1070D000096545EA082545EA07459D615D6925F092 +:1070E000FF055D614D695D61DD6925F4E06525F0B1 +:1070F0000705DD61D1E907573D43DD619D6A4D6AB2 +:10710000C3F828E09D62FEB1013E062E1ED8104D48 +:10711000AD5DDE6AA4EB0C0406F0E0266C43DE6293 +:1071200003348E6AC96A6E4344EA0644DC621C6B0F +:1071300024F4FF6424F007041C631963835843F0AC +:1071400001038350BDE8F0830425E2E70125E0E771 +:10715000D47C030838B50446002863D090F8A130E9 +:1071600003F0FF021BB980F8A020FAF72DFB0223E1 +:1071700084F8A13023689A6922F070429A61996973 +:10718000D4E901200243E0680243206902436069B8 +:107190000A4325499A619A680A409A609A6842EAC5 +:1071A0000042A0690243E0699A60DA680A40DA6046 +:1071B000DA6842EA0042206A0243606ADA601A69C9 +:1071C0000A401A611A6942EA0042A06A02431A613F +:1071D0005A690A40E16A5A615A6942EA0142216BDE +:1071E0000A435A61DA6A94F8350002F07F4294F853 +:1071F0003610DA62DD6A94F834202A4342EA00222B +:10720000002042EA0142DA625A6B42F006025A63F7 +:107210009A6942F001029A610123C4F8A40084F83B +:10722000A13038BD0120FCE700F800F0704770473E +:10723000036870B59E6B04465D6B720714D56907D1 +:1072400012D55A6B22F004025A630422DA63D0F892 +:10725000A43043F00103C0F8A430002380F8A1203B +:1072600080F8A030FFF7E2FFB20716D5AB0714D5C0 +:10727000236820465A6B22F002025A630222DA6324 +:10728000D4F8A4301343C4F8A430042384F8A13004 +:10729000002384F8A030FFF7C9FFF00710D5E907F5 +:1072A0000ED5236820465A6B22F001025A63012250 +:1072B000DA63002384F8A12084F8A030FCF7A2FC54 +:1072C000320711D52B070FD5236820465A6B22F0C1 +:1072D00008025A630822DA63012384F8A1300023EC +:1072E00084F8A030FFF7A3FF70BD2DE9F04190F8BE +:1072F000A03006460F469446012B4FF002001FD0E7 +:1073000034244FF001080D4686F8A10004FB026406 +:1073100086F8A08038340FCD0FC40FCD0FC40FCD29 +:107320000FC42B683046624639462360FFF790FE53 +:1073300033680020C3F8248086F8A18086F8A00076 +:10734000BDE8F08190F8A030012B4FF0020312D07D +:1073500080F8A13003685A6B22F001025A63074A91 +:1073600011645A6B42F001025A63012380F8A13084 +:10737000002380F8A0301846704700BF0068014025 +:10738000194B37B51A6C194C42F080521A641B6CB9 +:1073900003F080530193019B236843F480332360FF +:1073A000FEF746F905466368DA030CD523680F4DEE +:1073B00043F400332360FEF73BF904466B689B03FC +:1073C0000AD5002006E0FEF733F9401BB0F57A7FBE +:1073D000E9D9032003B030BDFEF72AF9001BB0F550 +:1073E0007A7FEBD9F5E700BF00380240007000401B +:1073F0002DE9F0474E6A36B1B2F1406F03D08B6A87 +:107400000468013B2361D1F818A0D1E9077EBAF1E5 +:10741000000F4CD04C6905684FEA844C4AEA0604D8 +:107420000B68D1F8348044EA020AD1E90B09BEF1B5 +:10743000000F24D08E684AEA0E04EE610E699FB1F7 +:107440003B430343C86843EA090343EA0803334361 +:10745000034343EA0C032343B2F1406F6B6101D055 +:107460004B68AB61BDE8F087034343EA090343EA95 +:107470000803334343EA0C0323436B61F2E767B12C +:107480003B430343C86843EA090343EA0803034351 +:1074900043EA0C0343EA0A03DEE7034343EA090332 +:1074A00043EA080444EA0C0343EA0A03E5E7BEF1B1 +:1074B000000F2CD046EA0E058B6804684E69154310 +:1074C000E361D1F834C0B6040B69D1E90B8EA7B1E2 +:1074D0003B43C868B2F1406F43EA080343EA0E0336 +:1074E00043EA0C0343EA000343EA060343EA0503C5 +:1074F0006361B7D04B68A361B4E743EA080343EA8A +:107500000E0343EA0C0333432B436361AAE7D7B16D +:1075100046EA0703CC6A0068B2F1406F43EA02030F +:1075200043EA04030C6B43EA04034C6B43EA040391 +:10753000CC6843EA04034C6943EA8443436191D035 +:107540004B6883618EE7002E8CD0CB6A0068334392 +:1075500013430A6B13434A6B13434A6943EA82435A +:1075600043617FE72DE9F041DDF8188004460E46BF +:1075700015461F4622689368334214BF0123002337 +:10758000AB4201D1002012E0B8F1FF3FF3D0FEF78B +:107590004FF8C01B404502D8B8F1000FEAD10423D0 +:1075A000012084F84130636C43F001036364BDE85B +:1075B000F081000030B5044685B0FEF739F8034687 +:1075C000002C47D094F8412002F0FF014AB9039003 +:1075D000204684F84010FAF7A5F941F28832039B5F +:1075E000A2642068A1680268013922F4F85242EAD4 +:1075F0000122202102602046A26C00920022FFF7A7 +:10760000B1FF10BB2268E569E36811682B43256A66 +:1076100021F07F412B43656821F0D00143EA0563E7 +:107620000B4313605568D4E905310B43216943EAE4 +:107630000143094929400B435360136843F0010398 +:1076400013600123606484F84130002384F84030E3 +:1076500005B030BD0120FBE7FEF8E0FF10B50446A1 +:1076600068B10268136823F001031360FAF7C8F9E0 +:107670000020606484F8410084F8400010BD0120BF +:10768000FCE72DE9F043044685B017468946FDF72F +:10769000CFFF94F840200346012A33D0012202266E +:1076A00084F8402094F84120012A5FFA82F827D11B +:1076B00000220390202120466264009784F84160F4 +:1076C000FFF750FF0546A0B9024649462046FFF79E +:1076D0008FFED9F82420039B4AB942463146204602 +:1076E0000097FFF73FFF054618B92368DE6084F86E +:1076F0004180002384F84030284605B0BDE8F0837F +:107700003546F6E70225F7E72DE9FF410446154621 +:107710001E468846FDF78CFF94F840200346012A58 +:1077200040D0012284F8402094F84120012AD7B2A9 +:1077300036D142210022039020466264009684F8EC +:1077400041102021FFF70EFF20BB21682A6828691D +:107750008A626A684A62AA68CA620A6822F44002B7 +:107760000243204642F480020A604146EA68C8F8B3 +:1077700028204FF00062FFF73BFE039B3A460821AA +:1077800020460096FFF7EEFE20B923680822DA6053 +:1077900084F84170002384F8403004B0BDE8F081E3 +:1077A0000220F7E70220F8E7F7B5044616460F4631 +:1077B000FDF73EFF94F840200346012A33D0012212 +:1077C00084F8402094F84120012A2AD10022822105 +:1077D0002046626484F84110A16C00912021FFF7DB +:1077E000C1FE0546B8B9236872681868082A20F0F7 +:1077F000080040EA0200186007D132681A631022BC +:10780000DA601A6842F480121A604FF0406239461A +:107810002046FFF7EDFD002384F84030284603B0F2 +:10782000F0BD0225F7E70225F8E71FB50446FDF78E +:10783000FFFE034694F8410010F002003AD0002207 +:10784000216884F840200A6812F0040234D00A68E3 +:10785000E06B22F0040203930A60FEF70DF8039B2D +:1078600018B1626C42F00402626422689168890671 +:107870001DD511682046039341F0020111600221D9 +:10788000A26C00920122FFF76DFE039B90B9226863 +:107890000221D1602021A26C009202462046FFF70F +:1078A00061FE38B92268536923F0406353610123B4 +:1078B00084F8413004B010BD1046D6E7F0B5044658 +:1078C00085B016460F46FDF7B3FE94F840200346F8 +:1078D0002568012A4CD0012284F8402094F84120E8 +:1078E000012AD0B242D100226264002F39D0122284 +:1078F00084F841202A690132E2622A696762013212 +:10790000A2626A6922F040626A61E26AA2B9012257 +:10791000022120460096FFF725FE28B9236802229F +:107920002046DA60FFF781FF012384F8413000230D +:1079300084F8403005B0F0BD0122042120460096B5 +:107940000393FFF70FFE0028EED1626A039B1278C3 +:1079500085F82020626A01326262E26A013AE262DC +:10796000D3E7636C43F008036364E0E70220DEE7DB +:107970000220DFE7F0B5044685B016460F46FDF756 +:1079800057FE25680346D5F818C094F84020012A10 +:1079900050D0012284F8402094F84120012AD0B22E +:1079A00046D100226264002F3DD0222284F841207B +:1079B0002A690132A2632A69276301326263696915 +:1079C00021F0406141F080616961C5F818C0A26B87 +:1079D000A2B90122022120460096FFF7C3FD28B973 +:1079E000236802222046DA60FFF71FFF012384F894 +:1079F0004130002384F8403005B0F0BD012206215B +:107A0000204600960393FFF7ADFD0028EED195F8D0 +:107A10002010226B039B1170226B01322263A26B38 +:107A2000013AA263D3E7636C43F008036364E0E7C1 +:107A30000220DEE70220DFE72DE9F341044640B3F0 +:107A40000368DB0710D423689F0761D423681907F4 +:107A500000F1A68023685A0700F1C780A269002AB6 +:107A600040F0308100202CE0944B9A6802F00C0228 +:107A7000042A07D09A6802F00C02082A0BD15B682E +:107A80005E0208D58D4B1B689D03DCD56368002B17 +:107A9000D9D1012015E06368884DB3F5803F13D13B +:107AA0002B6843F480332B60FDF7C2FD834E0546FF +:107AB00033689803C7D4FDF7BBFD401B6428F7D992 +:107AC000032002B0BDE8F0819BB92B6823F480331A +:107AD0002B602B6823F480232B60FDF7A9FD06465D +:107AE0002B689903AFD5FDF7A3FD801B6428F7D958 +:107AF000E6E7B3F5A02F2B6803D143F480232B6076 +:107B0000CEE723F480332B602B6823F48023CAE76D +:107B10006A4B9A6812F00C0F07D09A6802F00C02B8 +:107B2000082A11D15B685A020ED4644A13689B0775 +:107B300002D5E368012BACD11368216923F0F80367 +:107B400043EAC103136081E7E3685C4DBBB12B6876 +:107B500043F001032B60FDF76BFD06462B689F0782 +:107B600007D52B68226923F0F80343EAC2032B6090 +:107B70006CE7FDF75DFD801B0228EFD9A0E72B68BD +:107B800023F001032B60FDF753FD06462B68980791 +:107B90007FF55CAFFDF74CFD801B0228F6D98FE71F +:107BA0006369464D83B16B6F43F001036B67FDF76B +:107BB0003FFD06466B6F9B073FF54CAFFDF738FD69 +:107BC000801B0228F6D97BE76B6F23F001036B67FC +:107BD000FDF72EFD06466B6F9F077FF53BAFFDF768 +:107BE00027FD801B0228F6D96AE7344B1A6CD000B7 +:107BF00027D41A6C012742F080521A641B6C03F0E0 +:107C000080530193019B2E4D2B68D9051BD5A3688A +:107C10002A4D012B27D12B6F43F001032B6741F233 +:107C20008838FDF705FD254E0546336F9B073FD588 +:107C3000002F3FF413AF214A136C23F080531364D9 +:107C40000CE70027DFE72B6843F480732B60FDF718 +:107C5000EFFC06462B68DA05D9D4FDF7E9FC801B5A +:107C60006428F7D92CE7ABB92B6F41F2883823F0A1 +:107C700001032B672B6F23F004032B67FDF7D8FC60 +:107C800006462B6F9807D3D5FDF7D2FC801B4045E5 +:107C9000F7D915E7052B2B6F03D143F004032B67AE +:107CA000B9E723F001032B672B6F23F00403B5E73B +:107CB000FDF7BEFC401B4045B7D901E70038024044 +:107CC00000700040384DAB6803F00C03082B41D026 +:107CD0002B68022A23F080732B602ED1FDF7A8FCBD +:107CE00006462B68990122D4A36A5B085A1ED4E980 +:107CF00007310B4343EA0243626A43EA8213E26AB2 +:107D000043EA026343F000536B602B6843F08073D7 +:107D10002B60FDF78DFC244D04462B689A013FF53E +:107D2000A1AEFDF785FC001B0228F6D9C8E6FDF7D9 +:107D30007FFC801B0228D4D9C2E6FDF779FC0446FB +:107D40002B689B017FF58EAEFDF772FC001B0228AD +:107D5000F6D9B5E6012A6B683FF49BAE03F48002C6 +:107D6000E1698A427FF495AE03F03F02216A8A42BC +:107D70007FF48FAE47F6C072616A1A40B2EB811F82 +:107D80007FF487AEA26A03F440315208013AB1EBA6 +:107D9000024F7FF47EAE03F07063E26AB3EB026FD2 +:107DA0003FF460AE75E600BF00380240134908B5E5 +:107DB0008B6803F00C03042B1BD0082B1BD14A68E3 +:107DC0004B68496802F03F0213F48003C1F3881145 +:107DD0001ABF0B4800230B48A1FB0001F8F786FEF1 +:107DE000064B5B68C3F3014301335B00B0FBF3F068 +:107DF00008BD0348FCE70348FAE700BF003802402B +:107E000040787D010024F4002DE9F0410D46044640 +:107E100010B90120BDE8F081454A136803F00F0353 +:107E20008B4228D321688F0730D4C80743D4404AF7 +:107E3000136803F00F03AB4266D8226851076FD472 +:107E4000130707D53B4A2169936823F4604343EA4B +:107E5000C1039360FFF7AAFF364B374A9B68C3F311 +:107E60000313D35CD840354B1860354B1868F9F7CD +:107E700043FF0020CEE7136823F00F030B4313608A +:107E8000136803F00F038B42C3D1CBE711F0040F4B +:107E9000284B03D09A6842F4E0529A600E0703D54B +:107EA0009A6842F460429A609A68A06822F0F002F0 +:107EB00002439A60B9E761681E4B01291A681BD119 +:107EC00012F4003FA5D09A6841F28838194F22F089 +:107ED00003020A439A60FDF7ABFB0646BB68626883 +:107EE00003F00C03B3EB820FA1D0FDF7A1FB801BC5 +:107EF0004045F3D903208DE7022902D112F0007F1B +:107F0000E0E712F0020FDDE7136823F00F032B43C5 +:107F10001360136803F00F03AB427FF47AAF8CE772 +:107F20000449E0688B6823F4E05303438B6087E7E0 +:107F3000003C024000380240BC7C030820000020C6 +:107F400050000020014B1868704700BF200000203F +:107F5000044B054A9B68C3F38223D35C034A106831 +:107F6000D840704700380240CC7C03082000002035 +:107F70000F2303600B4B9A6802F0030242609A6879 +:107F800002F0F00282609A6802F4E052C2609B68DC +:107F9000DB0803F4E0530361034B1B6803F00F039A +:107FA0000B60704700380240003C024003682DE936 +:107FB000F74313F0010604460BD0AD4A916821F453 +:107FC00000019160466B91683143B6FA86F67609F6 +:107FD000916013F4002512D0A549E56BD1F88C20EF +:107FE000B5F5801F22F4401208BF012642EA0502BF +:107FF00016BFB5FA85F500256D09C1F88C20D802A9 +:1080000010D59B48216CD0F88C20B1F5800F22F45C +:10801000400242EA0102C0F88C2000F0868100296B +:1080200008BF012513F0807F18BF0126990632D5BD +:108030008F4B904F1A6C42F080521A641B6C03F005 +:1080400080530193019B3B6843F480733B60FDF7D1 +:10805000EFFA80463B68DA0540F16981844F226B74 +:108060003B6F13F4407340F06D81236B03F4407257 +:10807000B2F5407F7E4A40F08A81916823F07040DB +:1080800021F4F81120F4407001439160C3F30B0315 +:10809000116F0B4313672368D9060CD5744AD2F8C5 +:1080A0008C1021F08071C2F88C10D2F88C10A06B6B +:1080B0000143C2F88C105A0408D56D49606ED1F89E +:1080C000902022F440320243C1F890201F0408D5CA +:1080D0006749A06ED1F8902022F440220243C1F8F3 +:1080E0009020D80308D56249E06ED1F8902022F4A0 +:1080F00040120243C1F89020990308D55C49206FD3 +:10810000D1F8902022F440020243C1F890205A0690 +:1081100008D55749606CD1F8902022F00302024341 +:10812000C1F890201F0608D55149A06CD1F89020C5 +:1081300022F00C020243C1F89020D80508D54C4922 +:10814000E06CD1F8902022F030020243C1F8902078 +:10815000990508D54649206DD1F8902022F0C0023B +:108160000243C1F890205A0508D54149606DD1F805 +:10817000902022F440720243C1F890201F0508D5D8 +:108180003B49A06DD1F8902022F440620243C1F82F +:108190009020D80408D53649E06DD1F8902022F41B +:1081A00040520243C1F89020990408D53049206E0E +:1081B000D1F8902022F440420243C1F890205A02A4 +:1081C00008D52B49A06FD1F8902022F0806202439D +:1081D000C1F890209F020CD52548E16FD0F890207F +:1081E000B1F1006F22F0006208BF01250A43C0F818 +:1081F000902013F0080F18BF0125580308D51C491B +:10820000606FD1F8902022F040720243C1F89020B4 +:10821000190209D51649D4F88000D1F8902022F02F +:1082200080520243C1F89020012E00F0B4809A01E0 +:1082300000F1B180012D76D10D4D2B6823F08053D4 +:108240002B60FDF7F5F906462B689F0000F12781AA +:1082500021680E0301D5E36B1BB1CD0223D5236C3E +:108260000BBB034AD2F88830D2F8880004E000BF84 +:10827000003802400070004003F4403300F0E0405A +:108280000343606943EA8013A06943EA0063C2F8CC +:108290008830D2F88C30A06A23F4F853013843EACE +:1082A0000023C2F88C30880215D5E36FB3F1006F5C +:1082B00011D1824AD2F88830D2F8880003F0706376 +:1082C00000F0E0400343606943EA8013206A43EA18 +:1082D0000043C2F888300A0719D5784AD2F88810C6 +:1082E000D2F8883001F0706103F440330B436169C8 +:1082F00043EA8113E16943EA0173C2F88830D2F896 +:108300008C30E16A23F440330B43C2F88C306B4C61 +:10831000236843F080532360FDF78AF905462368FC +:108320009B0040F1C380002009E001267AE6FDF7BA +:108330007FF9A0EB080064287FF68CAE032003B021 +:10834000BDE8F08302F440729A423FF48EAE3B6F78 +:108350003A6F23F4407342F480323A673A6F22F462 +:1083600080323A673B673B6FDB077FF57EAEFDF7F8 +:108370005FF941F2883980463B6F98073FF575AE4B +:10838000FDF756F9A0EB08004845F5D9D6E7916806 +:1083900021F4F81179E6494E336823F080633360A5 +:1083A000FDF746F9074633681B0172D42268D707E8 +:1083B00012D5636B83B9D6F88430D6F8841003F4F1 +:1083C000403301F070610B43616843EA8113A16897 +:1083D00043EA0173C6F88430160303D5E36BB3F5A3 +:1083E000801F05D0D0021ED5236CB3F5800F1AD1A3 +:1083F0003249D1F88430D1F8840003F4403300F0DE +:10840000E0400343606843EA8013E06843EA0063A6 +:10841000C1F88430D1F88C00636A20F01F00013B62 +:108420000343C1F88C30D10111D52449D1F88430EF +:10843000D1F8840003F0706300F0E040034360680B +:1084400043EA8013206943EA0043C1F88430920173 +:108450000DD5236962681B0443EA8213E26843EA8C +:108460000263A26843EA0273144AC2F88430134ECE +:10847000336843F080633360FDF7DAF8074633680A +:108480001B013FF5D7AEFDF7D3F8C01B6428F6D922 +:1084900054E7FDF7CDF8C01B642884D94EE7FDF7FB +:1084A000C7F8801B64287FF6CFAE47E7FDF7C0F81A +:1084B000401B64287FF633AF40E700BF003802401E +:1084C00038B50D460446C8B190F82C3003F0FF02D1 +:1084D0001BB980F82D20F9F7A7FB0223211D206886 +:1084E00084F82C3000F069FD62682946206800F0AD +:1084F0009CFD0123002084F82C3038BD0120FCE7CE +:1085000070B590F82C3005460E46022BD8B210D02C +:1085100000F0FB04012C10D10223286885F82C30D0 +:1085200000F0B9FD3368022B04D1052385F82C3007 +:10853000002070BD85F82C40FAE70120F9E738B536 +:1085400090F82C300446022BD8B20DD094F82C3081 +:10855000012BDDB209D10223206884F82C3000F011 +:10856000ACFD002084F82C5038BD0120FCE7000051 +:10857000036A23F0010370B50362036A42688469E9 +:1085800023F002030D6824F4803424F073042C4398 +:108590008D682B430E4DA84202D00E4EB04211D131 +:1085A00023F00803CE68A84243EA060323F004033D +:1085B00002D0084DA84205D122F44072D1E90556F7 +:1085C00035432A4342604A6884614263036270BD56 +:1085D0000000014000040140036A23F4807370B579 +:1085E0000362036A4268C46923F400730D6824F4CB +:1085F000803424F073042C438D6843EA0523114D25 +:10860000A84203D005F58065A84214D1CD6823F4B3 +:10861000006343EA05230B4DA84223F4806303D093 +:1086200005F58065A84206D122F44052D1E90556ED +:10863000354342EA051242604A68C461C26303627C +:1086400070BD00BF00000140036A23F4805330B5C1 +:108650000362026A4468C36922F400520D6823F081 +:10866000807323F4E64343EA05238D6842EA05322A +:10867000084DA84203D005F58065A84204D124F432 +:1086800080444D6944EA85144460C3614B680364C7 +:10869000026230BD00000140036A23F4803330B52C +:1086A0000362026A4468436D22F400320D6823F4C9 +:1086B000803323F070032B438D6842EA0542094D55 +:1086C000A84203D005F58065A84204D124F4803483 +:1086D0004D6944EA0524446043654B688365026242 +:1086E00030BD00BF00000140036A23F4801330B5A1 +:1086F0000362026A4468436D22F400120D6823F09D +:10870000807323F4E04343EA05238D6842EA05526F +:10871000084DA84203D005F58065A84204D124F491 +:1087200080244D6944EA8524446043654B68C365F1 +:10873000026230BD0000014090F83D30012B33D182 +:10874000022380F83D300368DA6842F00102DA6003 +:10875000164A93421AD0B3F1804F17D0A2F57C424B +:10876000934213D002F5806293420FD002F58062EB +:1087700093420BD002F57842934207D002F5705233 +:10878000934203D0A2F59432934207D19968084AE4 +:108790000A40062A06D0B2F5803F03D01A6842F09C +:1087A00001021A600020704701207047000001405C +:1087B00007000100704770477047704770470368B3 +:1087C0001A69910710B504460FD5DA6892070CD5DF +:1087D0006FF002021A61012202779B69990700F08B +:1087E0008580FFF7E9FF0023237723681A69520782 +:1087F00010D5DA6850070DD56FF0040220461A61D3 +:10880000022222779B6913F4407F75D0FFF7D4FFD3 +:108810000023237723681A6911070FD5DA68120736 +:108820000CD56FF0080220461A6104222277DB691A +:108830009B0767D0FFF7C0FF0023237723681A69DF +:10884000D00610D5DA68D1060DD56FF0100220469B +:108850001A6108222277DB6913F4407F58D0FFF7B2 +:10886000ABFF0023237723681A69D20708D5DA689B +:10887000D00705D56FF0010220461A61F8F7E4FE33 +:1088800023681A69110608D5DA68120605D56FF053 +:10889000800220461A6100F08EFB23681A69D00519 +:1088A00008D5DA68110605D56FF4807220461A6182 +:1088B00000F082FB23681A69520608D5DA68500670 +:1088C00005D56FF0400220461A61FFF777FF236855 +:1088D0001A69910622D5DA6892061FD56FF0200238 +:1088E00020461A61BDE8104000F064BBFFF763FF4B +:1088F0002046FFF762FF76E7FFF75DFF2046FFF7B0 +:108900005CFF85E7FFF757FF2046FFF756FF93E729 +:10891000FFF751FF2046FFF750FFA2E710BD000010 +:10892000304A0368904212D0B0F1804F0FD0A2F5C8 +:108930007C4290420BD002F58062904207D002F553 +:108940008062904203D002F57842904219D14A6881 +:1089500023F070031343234A904229D0B0F1804F93 +:1089600026D0A2F57C42904222D002F5806290424D +:108970001ED002F5806290421AD002F578429042F1 +:1089800016D0194A904213D002F5806290420FD05F +:1089900002F5806290420BD0A2F59832904207D047 +:1089A00002F58062904203D002F58062904203D1CA +:1089B00023F44073CA6813434A6923F080031343C6 +:1089C00003608B68C3620B688362064B984203D0D6 +:1089D00003F58063984201D10B690363012343616E +:1089E000704700BF000001400040014010B5044640 +:1089F00050B390F83D3003F0FF021BB980F83C20E3 +:108A0000F9F722F802232068211D84F83D30FFF792 +:108A100087FF0123002084F8483084F83E3084F832 +:108A20003F3084F8403084F8413084F8423084F894 +:108A3000433084F8443084F8453084F8463084F874 +:108A4000473084F83D3010BD0120FCE710B50446E6 +:108A500050B390F83D3003F0FF021BB980F83C2082 +:108A6000FFF7A8FE02232068211D84F83D30FFF7A0 +:108A700057FF0123002084F8483084F83E3084F802 +:108A80003F3084F8403084F8413084F8423084F834 +:108A9000433084F8443084F8453084F8463084F814 +:108AA000473084F83D3010BD0120FCE7036A23F015 +:108AB000100370B50362036A4268846923F02003DF +:108AC0000D6824F0807424F4E64444EA05248D689B +:108AD00043EA0513104DA84203D005F58065A8426E +:108AE00014D1CD6823F0800343EA05130A4DA84250 +:108AF00023F0400303D005F58065A84206D122F497 +:108B00004062D1E90556354342EA850242604A682F +:108B100084618263036270BD0000014070B590F80B +:108B20003C300546012B74D001230C2A80F83C30E0 +:108B30004FD009D8042A2CD0082A3AD0C2B11846FE +:108B4000002385F83C3070BD102A52D0142AF6D18B +:108B50000068FFF7C9FD0A69436D43F4006343658C +:108B6000436D23F480634365436D43EA02234EE083 +:108B70000068FFF7FDFC0A69836943F0080383611D +:108B8000836923F0040383618369134383610020B5 +:108B9000D6E70068FFF78AFF0A69836943F4006338 +:108BA0008361836923F480638361836943EA0223D9 +:108BB000ECE70068FFF710FD0A69C36943F008039A +:108BC000C361C36923F00403C361C3691343C36171 +:108BD000DDE70068FFF738FD0A69C36943F4006305 +:108BE000C361C36923F48063C361C36943EA022399 +:108BF000EDE70068FFF750FD0A69436D43F0080395 +:108C00004365436D23F004034365436D134343659C +:108C1000BDE7022097E7114310B5846841EA0323BA +:108C200024F47F442343836010BD000038B590F8DE +:108C30003C300446012B4FF0020300F08C800122EF +:108C400080F83D30454B80F83C20006885682B401B +:108C500083600B68602B4FD032D8402B64D016D87D +:108C6000202B0DD00AD833F0100109D0012384F84D +:108C70003D30002384F83C30104638BD302BF5D110 +:108C8000826822F07002134343F0070328E0502B60 +:108C9000ECD14A68CD68016A036A21F00A0123F029 +:108CA00001030A430362836923F0F00343EA0513D7 +:108CB00083610262836823F0700343F057030FE07F +:108CC000B3F5805F0DD0B3F5005F0CD0702BCDD124 +:108CD000CB68D1E90121FFF79EFF836843F077035A +:108CE00083600022C2E7CB68D1E90121FFF793FF3F +:108CF000836843F48043F3E7036A4D6823F010036D +:108D0000C96803628269036A22F4704223F0A003F7 +:108D100042EA013243EA051382610362836823F069 +:108D2000700343F06703DBE74A68CD68016A036AB2 +:108D300021F00A0123F001030A430362836923F04F +:108D4000F00343EA051383610262836823F0700332 +:108D500043F04703C4E71A468EE700BF8800FEFFD2 +:108D600001F01F01036A10B501248A408C4023EAF8 +:108D700004030362036A1A43026210BD082908B59E +:108D800025D00FD8A9B1042919D090F84330012B70 +:108D900013D108292BD899B3042914D0022380F8C1 +:108DA000433030E00C291FD01029EED190F842302A +:108DB0000FE090F83E30012B22D0012036E090F8F1 +:108DC0003F30012BF9D1022380F83F301BE090F8AF +:108DD0004030013B18BF0123002BEED10829D8D128 +:108DE000022380F840300EE090F84130F1E70C2982 +:108DF0004FF002031BD01029D0D180F8423002E09E +:108E0000022380F83E3000680122FFF7A9FF1D4AC7 +:108E100090420FD01C4B98420CD0B0F1804F10D133 +:108E200082681A4B1340062B27D1002008BD80F81A +:108E30004130E8E7436C904243F400434364EFD091 +:108E4000EBE7134B9842EBD003F580639842E7D0F1 +:108E500003F580639842E3D003F578439842DFD06E +:108E600003F570539842DBD0A3F594339842D7D0E2 +:108E7000036843F001030360D7E7B3F5803FF7D100 +:108E8000D3E700BF000001400004014007000100DB +:108E900000040040FFF772BF70B590F83C30012B22 +:108EA0004FF002033BD080F83D301E4D0368AB42CB +:108EB0005A689C6802D01C4EB34203D122F470025F +:108EC0004E6832430E6822F07002AB4242EA06025C +:108ED0005A6019D0B3F1804F16D0144A934213D080 +:108EE00002F5806293420FD002F5806293420BD06C +:108EF00002F57842934207D002F57052934203D0B4 +:108F0000A2F59432934204D1896824F080020A4386 +:108F10009A60012380F83D30002380F83C301846E9 +:108F200070BD00BF0000014000040140000400408B +:108F300010B590F83C30012B38D0CB688A6823F408 +:108F400040731B4C13434A6823F4806313430A683D +:108F500023F4006313430A6923F4805313434A69DB +:108F600023F4005313438A6A23F4804313438A692A +:108F700023F4702343EA02430268A24203D004F5BB +:108F80008064A2420CD14C6A23F4700343EA045378 +:108F9000CC69096A23F08073234323F000730B43E9 +:108FA0005364002380F83C30184610BD0220FCE7D3 +:108FB000000001407047704770472DE9F041D1E94A +:108FC000012CD1E90738D1F824E043EA0803D1E9BC +:108FD0000376D1E90554096891B943EA0E030168A3 +:108FE000134321F4FF4143EA0C0321F07F013B438B +:108FF00033432B4323430B4303600020BDE8F08140 +:10900000016843EA0E0321F4F8410B43036042EA8E +:109010000C0341683B4321F4FF42334322F07F02BB +:109020002B43234313434360E7E7CB6803F1FF3C43 +:109030004B69F0B5013B0F684C688E681B050D69E4 +:10904000013C8969013E013D013F0139240136029D +:109050002D04090643EA0C335AB93B438268234383 +:1090600002F0704233432B430B43134383600020D1 +:10907000F0BD826822F4700222F470421A4344EA7E +:1090800006033B438260C2682B4302F070420B43ED +:109090001343C360EBE7026910B5D1E90034920DC8 +:1090A0002343CC68920543EA442313438A68013A78 +:1090B00043EA42130361002010BD436923F47F5348 +:1090C00023F03E0343EA4101416100207047000064 +:1090D000EFF3058313B16FF005007047EFF31082D3 +:1090E000074B12B9EFF3118212B11A68022AF2D0BB +:1090F000186810B901221A6070474FF0FF307047AE +:10910000287E002008B5EFF3058313B16FF005004A +:1091100008BDEFF310820A4B12B9EFF3118212B1BE +:109120001A68022AF2D01A68012A05D102221A60AE +:1091300001F096FE0020EBE74FF0FF30E8E700BFBC +:10914000287E0020EFF305830BB101F031BDEFF372 +:10915000108313B9EFF311831BB1034B1B68022B70 +:10916000F3D001F01FBD00BF287E0020F0B51446EB +:1091700087B000220B460592EFF305821ABBEFF38E +:10918000108212B9EFF311821AB1214A1268022A31 +:1091900019D0C0B16CB3A569002D08BF18256A1E8F +:1091A000AC46372A2AD86268D20727D466696EB1DE +:1091B000B2082168D4E9027E57B1BEF15F0F02D92F +:1091C000246904B1E6B9059807B0F0BD8022F0E744 +:1091D000BEF1000FF7D12469002CF4D105AC92B296 +:1091E000CDE900C401F0A9FC01281CBF00230593B0 +:1091F000E9E721464FF0180C8022EFE70020E3E773 +:10920000CDE90147009501F05AFC0590DBE700BF6E +:10921000287E002008B5EFF3058313B16FF0050039 +:1092200008BDEFF3108313B9EFF311831BB1054BA6 +:109230001B68022BF2D00028F2D001F0CFFD0020F5 +:10924000EEE700BF287E0020F8B50446EFF3058660 +:1092500016B100273846F8BDEFF3108313B9EFF3CA +:1092600011831BB1194B1B68022BF2D024B3656824 +:109270002B07EED405F00105D4E9021399B14F2B69 +:10928000E7D9BDB1042000F051FF07460028E0D027 +:1092900024682E462146384601F048FA002ED9D0DF +:1092A00047F00107D6E7002BD3D12DB1042000F001 +:1092B00072FFEAE70120E6E7012000F06CFF0746B5 +:1092C0000028C6D0002CE5D00025E1E7287E00204C +:1092D000034620F0010010B503F001030C46EFF344 +:1092E000058212B16FF0050010BDEFF3108212B9C4 +:1092F000EFF311821AB10D4A1268022AF2D088B136 +:10930000214663B101F099F9012801D10020EBE772 +:10931000002C14BF6FF001006FF00200E4E701F0D1 +:10932000C1F8F1E76FF00300DEE700BF287E002000 +:1093300008B5034620F0010003F00103EFF30582B6 +:1093400012B16FF0050008BDEFF3108212B9EFF310 +:1093500011821AB10A4A1268022AF2D068B13BB1EE +:1093600000F0F9FE01280CBF00206FF00200EAE7D0 +:109370001A46194600F01FFEF4E76FF00300E2E71B +:10938000287E002073B50E461546EFF305831BB10A +:109390000024204602B070BDEFF3108313B9EFF341 +:1093A00011831BB1214B1B68022BF1D00028EFD099 +:1093B000B042EDD3EDB1D5E90232C3B14F2AE7D9BE +:1093C000012829D1032200920022114600F06EFDEF +:1093D00004460028DCD0CEB100231A46194600F01E +:1093E000EAFD012812D0204601F0C6F9D0E7002A94 +:1093F000CED1012804D10322002100F06BFDE7E764 +:10940000314600F0B6FD04460028C1D05DB92946BA +:10941000204601F08BF9BCE71A46314600F083FD87 +:1094200004460028B4D02D68F1E700BF287E002054 +:1094300013B50C4618B96FF0030002B010BDEFF37E +:10944000058363B1002CF6D101AA2146019401F0F5 +:1094500018F9012813D1019BA3B90020EDE7EFF320 +:10946000108313B9EFF311831BB10D4B1B68022B53 +:10947000E8D0214601F016F80128EED06CB96FF063 +:109480000200DAE74FF0E0234FF08052C3F8042DDA +:10949000BFF34F8FBFF36F8FDFE76FF00100CCE7B3 +:1094A000287E002013B570B3EFF305834BB1002481 +:1094B00001A9019400F0F5FE012814D06FF002001C +:1094C00014E0EFF3108313B9EFF311831BB10F4BCB +:1094D0001B68022BEBD000231A46194600F06BFDE7 +:1094E000012802D0EAE7019B13B9002002B010BDA9 +:1094F0004FF0E0234FF08052C3F8042DBFF34F8F9D +:10950000BFF36F8FF1E76FF00300EFE7287E0020D5 +:1095100073B51446EFF305831BB10025284602B04E +:1095200070BDEFF3108313B9EFF311831BB11A4B26 +:109530001B68022BF1D00028EFD00029EDD0ECB150 +:10954000D4E9023293B14F2AE7D92269002AE4D044 +:1095500001FB00F56669AE42DFD30025009500F0FF +:10956000A5FC05460028D8D024680FE0002AD4D1F5 +:109570002369002BD1D16369002BCED1002200F0EA +:10958000A9FC05460028C8D0002CEDD1214628466C +:1095900001F0CCF8C2E700BF287E002013B51C46BE +:1095A000EFF3058323B1D8B96FF0030002B010BD0B +:1095B000EFF3108313B9EFF311831BB1174B1B6843 +:1095C000022BF0D00028EFD00029EDD00023224656 +:1095D00000F0F1FC012810D0E4B96FF00200E5E7DB +:1095E0000029E1D0002CDFD1234601AA019400F02C +:1095F000EFFD0128F1D1019B0BB90020D6E74FF018 +:10960000E0234FF08052C3F8042DBFF34F8FBFF318 +:109610006F8FF2E76FF00100C8E700BF287E0020DF +:1096200013B51C46EFF3058323B1D0B96FF00300E7 +:1096300002B010BDEFF3108313B9EFF311831BB128 +:10964000164B1B68022BF0D00028EFD00029EDD07C +:10965000224600F082FE01280FD0DCB96FF0020034 +:10966000E6E70029E2D0002CE0D101AA019401F044 +:1096700008F80128F2D1019B0BB90020D8E74FF080 +:10968000E0234FF08052C3F8042DBFF34F8FBFF398 +:109690006F8FF2E76FF00100CAE700BF287E00205D +:1096A000034B0360034B0B6080231360704700BFC4 +:1096B000C87D0020C87B0020034B0360034B0B6078 +:1096C0004FF48073136070472C8200202C7E0020A2 +:1096D000104B10B51A461B688342FBD3546811190E +:1096E000884201BF41681046091951604468011958 +:1096F0008B420CD1084909688B4203D05968214438 +:10970000416019689042016018BF106010BD194691 +:10971000F8E700BF94A701208C8200202DE9F041DA +:10972000044601F037FA4049404D0B68F3B9404A0E +:10973000002056073F4E1BBF07323F4B3F4B22F0E6 +:109740000702706018BF9B1A32601344083B23F075 +:109750000703C3E90000981A0B60C2E90030384BD8 +:109760001860384B18604FF000432B602E6826427B +:1097700054D1002C43D004F1080360071CBF23F030 +:1097800007030833002B49D02E4F3C689C4245D339 +:10979000284A15686868984204D2D5F800C0BCF120 +:1097A000000F17D10968A94238D02968D2F8008083 +:1097B0001160C21A102A14D9E81841070DD04FF0D1 +:1097C000500372B683F31188BFF36F8FBFF34F8FCF +:1097D00062B6FEE72A466546DCE742606B60FFF74B +:1097E00077FF6A6800231649A41A164308683C608C +:1097F00084426E602B6038BF0C6008F1080401F0F1 +:1098000077FA63070CD04FF0500372B683F31188D8 +:10981000BFF36F8FBFF34F8F62B6FEE70024EEE712 +:109820002046BDE8F08100BF8C82002088A701207F +:109830009082002094A7012088A70120F82401002D +:1098400090A701208CA7012010B50446002832D033 +:10985000194A50F8043C126813420AD14FF05003E1 +:1098600072B683F31188BFF36F8FBFF34F8F62B669 +:10987000FEE750F8081C51B14FF0500372B683F365 +:109880001188BFF36F8FBFF34F8F62B6FEE723EAF5 +:10989000020340F8043C01F07DF9084A54F8043C06 +:1098A000A4F1080011680B441360FFF711FFBDE835 +:1098B000104001F01DBA10BD88A701208CA701201F +:1098C00000F108034FF0FF3243600361C0E9022357 +:1098D00000230360704700230361704743689A6860 +:1098E0004B608A609A68516099600368086101332F +:1098F0000360704730B50C68631C0AD103695A686D +:109900004A6091608B6059600368086101330360AD +:1099100030BD00F10802134652681568A542FAD915 +:10992000EDE70369D0E901128A605160596881420C +:1099300008BF5A60002202611A68013A1A6018686A +:109940007047000008480068006880F308884FF0FE +:10995000000080F3148862B661B6BFF34F8FBFF387 +:109960006F8F00DF00BF000008ED00E0DFF80C00A3 +:10997000016841F4700101607047000088ED00E06B +:10998000002382B001930F4B1B6801330AD04FF0C4 +:10999000500372B683F31188BFF36F8FBFF34F8FFD +:1099A00062B6FEE74FF0500372B683F31188BFF33F +:1099B0006F8FBFF34F8F62B6019B002BFCD002B0BC +:1099C000704700BF540000204FF0807321F0010168 +:1099D00040F8202C44380364034BC16383636FF069 +:1099E00002030362704700BF819900080000000075 +:1099F000074B19680868B0E8F04F80F30988BFF397 +:109A00006F8F4FF0000080F311887047AFF3008034 +:109A1000E4A701204FF0500372B683F31188BFF31F +:109A20006F8FBFF34F8F62B60B4A13680133012B60 +:109A3000136010D14FF0E023D3F8043DDBB253B1F3 +:109A40004FF0500372B683F31188BFF36F8FBFF3EB +:109A50004F8F62B6FEE7704754000020094A136832 +:109A600053B94FF0500372B683F31188BFF36F8F71 +:109A7000BFF34F8F62B6FEE7013B13600BB983F370 +:109A80001188704754000020000000000000000012 +:109A9000EFF30980BFF36F8F154B1A681EF0100F9C +:109AA00008BF20ED108A20E9F04F10602DE9090071 +:109AB0004FF0500072B680F31188BFF34F8FBFF3A1 +:109AC0006F8F62B601F01EFA4FF0000080F311882C +:109AD00009BC19680868B0E8F04F1EF0100F08BF05 +:109AE000B0EC108A80F30988BFF36F8F704700BF16 +:109AF000E4A7012008B54FF0500372B683F3118834 +:109B0000BFF36F8FBFF34F8F62B601F059F828B1E2 +:109B10004FF0E0234FF08052C3F8042D002383F36D +:109B2000118808BD4FF0E02200234FF47A711361D1 +:109B30009361044B1B68B3FBF1F3013B53610723B3 +:109B400013617047200000202E4B37B51A78002192 +:109B5000D2B20192FF221A701B782B4ADBB28DF829 +:109B600003309DF8033003F0500313700723274A96 +:109B700013609DF803005C1E00060ED411B1032B88 +:109B8000136013D04FF0500372B683F31188BFF304 +:109B90006F8FBFF34F8F62B6FEE79DF80330012150 +:109BA0005B00DBB28DF803302346E2E74FF44073ED +:109BB0004FF0E02400251360019B124ADBB21370C2 +:109BC000D4F8203D43F47003C4F8203DD4F8203D80 +:109BD00043F07043C4F8203DFFF7A4FF0C4B1D6019 +:109BE000FFF7C4FED4F8343F43F04043C4F8343F99 +:109BF000FFF7A8FE01F086F92846FFF7C1FE03B083 +:109C000030BD00BF00E400E09CA70120A0A7012018 +:109C100054000020EFF305830F2B10D9134A9B5CEF +:109C2000134A12789A420AD94FF0500372B683F35E +:109C30001188BFF36F8FBFF34F8F62B6FEE74FF00F +:109C4000E0230C4AD3F80C3D126803F4E06393421E +:109C50000AD94FF0500372B683F31188BFF36F8FA8 +:109C6000BFF34F8F62B6FEE7704700BFF0E300E03E +:109C70009CA70120A0A7012010B50446FFF7CAFE4B +:109C8000A46BFFF7EBFEB4FA84F0400910BDF8B501 +:109C90001546026C0446866B52B9076847BB80685C +:109CA00001F0A0FA0546A76001362846A663F8BD74 +:109CB00065B940682AF05DFF6368226C1344A268AE +:109CC00093426360F0D323686360EDE7C0682AF0D5 +:109CD00050FF226CE36851429B1A22689342E36072 +:109CE0003EBFA3685B18E360022D01D116B1013EAF +:109CF0000025D9E73546D7E7034608461A6C10B465 +:109D000062B1DC68996814448C42DC605DF8044BF5 +:109D100024BF1968D960D9682AF02BBF5DF8044BBD +:109D2000704770B50446FFF775FE94F8455004F18E +:109D300024066DB2002D14DCFF2304F1100684F814 +:109D40004530FFF78BFEFFF765FE94F844506DB287 +:109D5000002D12DCFF2384F84430BDE87040FFF78B +:109D60007DBE636A002BE7D0304601F04DF908B1A3 +:109D700001F0DCF9013D6DB2DCE72369002BE9D08D +:109D8000304601F041F908B101F0D0F9013D6DB262 +:109D9000DEE738B50D46044650B94FF0500372B6B1 +:109DA00083F31188BFF36F8FBFF34F8F62B6FEE767 +:109DB000FFF730FE2268D4E90F3162604B43D018C0 +:109DC0005B1AA0601A440020FF23E260A06384F8BD +:109DD000443084F84530A5B9236973B104F110000B +:109DE00001F012F948B14FF0E0234FF08052C3F870 +:109DF000042DBFF34F8FBFF36F8FFFF72FFE0120AE +:109E000038BD04F11000FFF75BFD04F12400FFF7FB +:109E100057FDF2E713B51C4653B94FF0500372B625 +:109E200083F31188BFF36F8FBFF34F8F62B6FEE7E6 +:109E30005AB1B1B94FF0500372B683F31188BFF332 +:109E40006F8FBFF34F8F62B6FEE751B14FF05003F3 +:109E500072B683F31188BFF36F8FBFF34F8F62B673 +:109E6000FEE750230193019B502B0AD04FF0500383 +:109E700072B683F31188BFF36F8FBFF34F8F62B653 +:109E8000FEE7002908BF2246019B0123226084F8D7 +:109E90004630C4E90F0119462046FFF77AFF9DF8C6 +:109EA0001030204684F84C3002B010BD10B49DF83C +:109EB000044050B94FF0500372B683F31188BFF3DA +:109EC0006F8FBFF34F8F62B6FEE701945DF8044BCE +:109ED000FFF7A0BFF8B50D461746064650B94FF03C +:109EE000500372B683F31188BFF36F8FBFF34F8FA8 +:109EF00062B6FEE748435030FFF710FC044670B1ED +:109F0000002380F8463065B100F15003012120465E +:109F10002360C4E90F65FFF73CFF84F84C702046CE +:109F2000F8BD0346F2E713B513460C4650B94FF09F +:109F3000500372B683F31188BFF36F8FBFF34F8F57 +:109F400062B6FEE788420AD24FF0500372B683F33E +:109F50001188BFF36F8FBFF34F8F62B6FEE7022207 +:109F6000009200221146FFF7A1FF00B1846302B006 +:109F700010BD10B50C4650B94FF0500372B683F3C4 +:109F80001188BFF36F8FBFF34F8F62B6FEE7884231 +:109F90000AD24FF0500372B683F31188BFF36F8F6C +:109FA000BFF34F8F62B6FEE702220021FFF792FF58 +:109FB00000B1846310BD2DE9F04385B088461F468B +:109FC0000446019250B94FF0500372B683F31188E2 +:109FD000BFF36F8FBFF34F8F62B6FEE761B9036CBB +:109FE00053B14FF0500372B683F31188BFF36F8FF4 +:109FF000BFF34F8F62B6FEE7022F0DD1E36B012B4B +:10A000000AD04FF0500372B683F31188BFF36F8FFD +:10A01000BFF34F8F62B6FEE701F094F8064660B9D1 +:10A02000019B5BB14FF0500372B683F31188BFF30D +:10A030006F8FBFF34F8F62B6FEE700264FF0000927 +:10A0400037E0019D1DB9FFF709FD002052E016B968 +:10A0500002A801F01FF8FFF701FD00F09BFDFFF7DC +:10A06000D9FC94F84430FF2B01D184F8449094F843 +:10A070004530FF2B01D184F84590FFF7EFFC01A993 +:10A0800002A801F013F800284AD1FFF7C3FCA26B25 +:10A09000E36B9A4231D1FFF7E1FC019904F1100022 +:10A0A00000F076FF2046FFF73CFE00F021FE60B393 +:10A0B0000126FFF7AFFCA26BE36B9A4201D3022F9C +:10A0C000BFD13A4641462046FFF7E1FD636A1BB126 +:10A0D00004F1240000F098FF48B14FF0E0234FF066 +:10A0E0008052C3F8042DBFF34F8FBFF36F8FFFF77C +:10A0F000B5FC012005B0BDE8F083FFF7AFFC2046BA +:10A10000FFF70FFE00F0F4FDD2E74FF0E0234FF031 +:10A110008052C3F8042DBFF34F8FBFF36F8FC7E793 +:10A120002046FFF7FEFD00F0E3FD8EE700220B4620 +:10A1300013B5114600900120FFF76CFE044638B1BC +:10A1400000231A46194683600360C360FFF733FF9C +:10A15000204602B010BD38B5044650B94FF0500348 +:10A1600072B683F31188BFF36F8FBFF34F8F62B660 +:10A17000FEE7856800F0E0FF85420AD1E368013B15 +:10A18000E36023B91A4619462046FFF714FF012061 +:10A1900000E0002038BD70B506465020FFF7BEFA3B +:10A1A000044698B100250121006080F84650C0E9BE +:10A1B0000F15FFF7EEFD2B462A462946204684F868 +:10A1C0004C60A5602560E560FFF7F5FE204670BD98 +:10A1D0002DE9F843894690461F46044650B94FF092 +:10A1E000500372B683F31188BFF36F8FBFF34F8FA5 +:10A1F00062B6FEE761B9036C53B14FF0500372B61B +:10A2000083F31188BFF36F8FBFF34F8F62B6FEE702 +:10A21000022F0DD1E36B012B0AD04FF0500372B621 +:10A2200083F31188BFF36F8FBFF34F8F62B6FEE7E2 +:10A23000FFF7F0FCEFF311864FF0500372B683F393 +:10A240001188BFF36F8FBFF34F8F62B6A26BE36BC2 +:10A250009A4201D3022F22D194F845503A464946FA +:10A2600020466DB2FFF713FD6B1C13D1636A0BB967 +:10A2700001200BE004F1240000F0C6FE0028F7D016 +:10A28000B8F1000FF4D00120C8F8000086F311885F +:10A29000BDE8F88301356DB284F84550E8E7002049 +:10A2A000F4E770B50D46044650B94FF0500372B64E +:10A2B00083F31188BFF36F8FBFF34F8F62B6FEE752 +:10A2C000036C53B14FF0500372B683F31188BFF3A0 +:10A2D0006F8FBFF34F8F62B6FEE7036863B9836881 +:10A2E00053B14FF0500372B683F31188BFF36F8FF1 +:10A2F000BFF34F8F62B6FEE7FFF78CFCEFF31186DA +:10A300004FF0500372B683F31188BFF36F8FBFF322 +:10A310004F8F62B6A26BE36B93421CD994F8451041 +:10A320000132FF294BB2A26310D1636A0BB901203D +:10A3300009E004F1240000F067FE0028F7D0002DAA +:10A34000F5D00120286086F3118870BD01335BB21F +:10A3500084F84530EBE70020F5E72DE9FF410F4693 +:10A360000446019250B94FF0500372B683F311883E +:10A37000BFF36F8FBFF34F8F62B6FEE761B9036C17 +:10A3800053B14FF0500372B683F31188BFF36F8F50 +:10A39000BFF34F8F62B6FEE700F0D4FE064660B909 +:10A3A000019B5BB14FF0500372B683F31188BFF38A +:10A3B0006F8FBFF34F8F62B6FEE700264FF00008A5 +:10A3C0003DE0019D1DB9FFF749FB002056E016B99D +:10A3D00002A800F05FFEFFF741FB00F0DBFBFFF798 +:10A3E00019FB94F84430FF2B01D184F8448094F891 +:10A3F0004530FF2B01D184F84580FFF72FFB01A9E1 +:10A4000002A800F053FE002841D12046FFF734FC9B +:10A41000B8B3019904F1240000F0BAFD2046FFF71B +:10A4200080FC00F065FC48B94FF0E0234FF080520B +:10A43000C3F8042DBFF34F8FBFF36F8F0126FFF7D3 +:10A44000E9FAA56B002DBCD0013D39462046FFF747 +:10A4500053FCA563236973B104F1100000F0D4FD2F +:10A4600048B14FF0E0234FF08052C3F8042DBFF302 +:10A470004F8FBFF36F8FFFF7F1FA012004B0BDE8F3 +:10A48000F0812046FFF74DFC00F032FCD6E7204675 +:10A49000FFF747FC00F02CFC2046FFF7EDFB0028FF +:10A4A000CCD092E7F0B585B00446019150B94FF099 +:10A4B000500372B683F31188BFF36F8FBFF34F8FD2 +:10A4C00062B6FEE7056C55B14FF0500372B683F3E8 +:10A4D0001188BFF36F8FBFF34F8F62B6FEE700F0B6 +:10A4E00031FE064660B9019B6BB14FF0500372B666 +:10A4F00083F31188BFF36F8FBFF34F8F62B6FEE710 +:10A500002E46002755E00546FBE7019B73B955B180 +:10A510004FF0500372B683F31188BFF36F8FBFF310 +:10A520004F8F62B6FEE7FFF799FA62E016B902A80C +:10A5300000F0B0FDFFF792FA00F02CFBFFF76AFA8B +:10A5400094F84430FF2B01D184F8447094F84530DE +:10A55000FF2B01D184F84570FFF780FA01A902A80A +:10A5600000F0A4FD00284DD12046FFF785FB002810 +:10A5700042D023683BB9FFF74DFAA06800F0F2FD26 +:10A580000546FFF76BFA019904F1240000F000FD85 +:10A590002046FFF7C6FB00F0ABFB48B94FF0E023C5 +:10A5A0004FF08052C3F8042DBFF34F8FBFF36F8F6E +:10A5B0000126FFF72FFAA36B002BA6D0013BA36364 +:10A5C000236813B900F0ACFEA060236973B104F1F5 +:10A5D000100000F019FD48B14FF0E0234FF0805219 +:10A5E000C3F8042DBFF34F8FBFF36F8F0125FFF723 +:10A5F00035FA284605B0F0BD2046FFF792FB00F083 +:10A6000077FBD5E72046FFF78CFB00F071FB204677 +:10A61000FFF732FB0028CBD0002DEAD0FFF7FAF984 +:10A62000616A19B1236B1968C1F13801A06800256E +:10A6300000F020FEFFF712FADBE737B5044650B909 +:10A640004FF0500372B683F31188BFF36F8FBFF3DF +:10A650004F8F62B6FEE78568019100F06DFD85427F +:10A66000019905D1E36801200133E36003B030BDF7 +:10A670002046FFF717FF0028F8D0E3680133E360B6 +:10A68000F4E72DE9F84389469046054650B94FF066 +:10A69000500372B683F31188BFF36F8FBFF34F8FF0 +:10A6A00062B6FEE761B9036C53B14FF0500372B666 +:10A6B00083F31188BFF36F8FBFF34F8F62B6FEE74E +:10A6C000FFF7A8FAEFF311874FF0500372B683F348 +:10A6D0001188BFF36F8FBFF34F8F62B6AC6B1CB3A3 +:10A6E00095F8446049462846013C76B2FFF704FBE2 +:10A6F000AC63731C13D12B690BB901200BE005F17E +:10A70000100000F081FC0028F7D0B8F1000FF4D061 +:10A710000120C8F8000087F31188BDE8F8830136EE +:10A7200076B285F84460E8E72046F4E70023074A5C +:10A7300010B552F833402CB942F8331002EBC30283 +:10A74000506010BD0133082BF3D1FAE7A4A7012014 +:10A750000023084A10B502EBC3014C68844204D1BF +:10A76000002042F83300486010BD0133082BF2D1BD +:10A77000FAE700BFA4A7012010B5044650B94FF076 +:10A78000500372B683F31188BFF36F8FBFF34F8FFF +:10A7900062B6FEE7FFF7DCFF94F8463023B92046A7 +:10A7A000BDE81040FFF750B810BD70B504460D4627 +:10A7B0001646FFF72FF994F84430FF2B02D10023FF +:10A7C00084F8443094F84530FF2B02D1002384F8FC +:10A7D0004530FFF743F9A36B2BB93246294604F104 +:10A7E000240000F0F1FB2046BDE87040FFF799BA65 +:10A7F0002DE9F0410446FFF70DF92F4B2F4E1A6853 +:10A800002F4F01321A603568002D4AD134601B6821 +:10A81000012B1FD1B84601354046FFF751F808F12A +:10A820001408382DF7D1DFF8C080264D4046FFF7D9 +:10A8300047F82846FFF744F82348FFF741F8234834 +:10A84000FFF73EF82248FFF73BF8224BC3F80080A1 +:10A85000214B1D60214A136801331360204A636451 +:10A860001168E36A8B4200D913601420211D00FB9C +:10A870000370FFF733F8FFF7F1F81A4B1B6873B159 +:10A880003368DA6AE36A9A4209D24FF0E0234FF064 +:10A890008052C3F8042DBFF34F8FBFF36F8FBDE815 +:10A8A000F081104B1A68E36A002AD3D13268D26A69 +:10A8B0009A42CFD83460CDE750AC0120E4A7012004 +:10A8C000F0A701207CAC012098AC0120C4AC012091 +:10A8D000B0AC0120E8A70120ECA7012060AC01206A +:10A8E00064AC0120ACAC012068AC0120F8B5154B7C +:10A8F0000646154D0F461C6828680430FFF711F80E +:10A90000731C07D137B1296810480431BDE8F840FD +:10A91000FEF7E4BFA4192B685C6007D30C4B1868E2 +:10A920002968BDE8F8400431FEF7E4BF094B186818 +:10A9300029680431FEF7DEFF074B1A68A24200D9EE +:10A940001C60F8BDD8AC0120E4A70120B0AC012008 +:10A95000ECA70120E8A7012090AC0120064A13686B +:10A960001968064B19B94FF0FF321A607047126828 +:10A97000D268D2685268F8E7E8A7012090AC0120BD +:10A9800010B590F85D3004463BB9006BFEF75CFFF4 +:10A990002046BDE81040FEF757BF012BF9D0022B2F +:10A9A0000AD04FF0500372B683F31188BFF36F8F54 +:10A9B000BFF34F8F62B6FEE710BD000080B5144CA8 +:10A9C000144F154D236883B9144B1B68012B09D90B +:10A9D0004FF0E0234FF08052C3F8042DBFF34F8FA8 +:10A9E000BFF36F8FF6F700FAEBE7FFF713F8FB689A +:10A9F000DE68301DFEF795FF2B68013B2B60236856 +:10AA0000013B2360FFF72AF83046FFF7B9FFD9E78B +:10AA100054AC0120C4AC012050AC0120F0A70120AF +:10AA20002DE9F0474FEA820906460D46A5214A4620 +:10AA30001F46A9F10409DDE90984206B29F0BEFF56 +:10AA4000236B4B4423F00709B5B36B1E04F13302AB +:10AA50000F3513F8011F02F8011F09B1AB42F8D1FD +:10AA6000002384F84330089D4FF0000A201D372D45 +:10AA7000C4F850A028BF3725E562E564C5F1380564 +:10AA8000FEF729FF04F11800FEF725FFC4F858A0CF +:10AA90003A46314648462461A5616462C4F854A030 +:10AAA00084F85CA0FEF790FF2060B8F1000F01D0A1 +:10AAB000C8F80040BDE8F08784F83450D3E770B59B +:10AAC00086B0DDE90B5455B94FF0500372B683F3ED +:10AAD0001188BFF36F8FBFF34F8F62B6FEE754B993 +:10AAE0004FF0500372B683F31188BFF36F8FBFF33B +:10AAF0004F8F62B6FEE760260596059E602E0AD04F +:10AB00004FF0500372B683F31188BFF36F8FBFF31A +:10AB10004F8F62B6FEE725630225059E84F85D50DF +:10AB200004AD029401950A9D0095FFF779FF204638 +:10AB3000FFF75EFE049806B070BD2DE9F0430746AE +:10AB400085B09000884616469946FEF7E7FD054613 +:10AB5000E8B16020FEF7E2FD0446A8B100230563DA +:10AB60003246414680F85D300D9B02903846019395 +:10AB70000C9B00934B46FFF753FF2046FFF738FE30 +:10AB8000012005B0BDE8F0832846FEF75DFE4FF0DA +:10AB9000FF30F6E7024A136801331360704700BFC5 +:10ABA0005CAC0120014B1868704700BFD8AC012095 +:10ABB00008B5FFF72FF8014B186808BDD8AC012085 +:10ABC000404B1B682DE9F74F002B74D13E4B1D689D +:10ABD00001351D60CDB93D4B1A68126852B14FF076 +:10ABE000500372B683F31188BFF36F8FBFF34F8F9B +:10ABF00062B6FEE7364A1968106818601160354A77 +:10AC0000136801331360FFF7A9FE334E0024334F5E +:10AC10003368DFF8D480AB4211D9D8F80030142261 +:10AC2000DB6A5343FB58022B28BF01242C4B1B68C3 +:10AC3000002B0CBF2046012003B0BDE8F08FDFF8E9 +:10AC40008C90DFF8A8A0D9F800301B681BB94FF032 +:10AC5000FF333360E1E7D9F80030DB68D3F80CB09C +:10AC6000DBF80420954201D23260D6E70BF10401F3 +:10AC700008460191FEF755FEDBF82820019922B124 +:10AC80000BF11800FEF74DFE0199DBF82C00DAF805 +:10AC90000020904201D9CAF80000142303FB007081 +:10ACA000FEF71CFED8F80010DBF82C20CB6A9A4285 +:10ACB00028BF0124C7E70B4A00241368013313603F +:10ACC000B4E700BF5CAC0120D8AC0120E8A70120AC +:10ACD000ECA7012094AC012090AC0120F0A701204A +:10ACE000DCAC012058AC0120E4A7012064AC0120B9 +:10ACF000F7B5324C236853B94FF0500372B683F363 +:10AD00001188BFF36F8FBFF34F8F62B6FEE7FEF778 +:10AD100081FE2368013B236024682CB10024FEF7E8 +:10AD20009DFE204603B0F0BD254B1B68002BF5D0DF +:10AD3000244D254E254F1EE0EB68DC6804F1180019 +:10AD4000FEF7EFFD211D08460191FEF7EAFDE36ADB +:10AD500032680199934200D93360142000FB0370DC +:10AD6000FEF7BCFD1A4BE26A1B68DB6A9A4202D30B +:10AD7000184B01221A602B68002BDDD10CB1FFF7B4 +:10AD8000EDFD154D2C6844B1124E0127FFF718FF59 +:10AD900000B13760013CF9D12C600E4B1B68002BD1 +:10ADA000BCD04FF0E0234FF08052C3F8042DBFF326 +:10ADB0004F8FBFF36F8F0124B1E700BF5CAC012060 +:10ADC00050AC012098AC012064AC0120F0A7012018 +:10ADD000E4A70120DCAC012058AC012008B550B933 +:10ADE0004FF0E0234FF08052C3F8042DBFF34F8F94 +:10ADF000BFF36F8F08BD0B4B196851B14FF0500373 +:10AE000072B683F31188BFF36F8FBFF34F8F62B6B3 +:10AE1000FEE7FFF7BFFEFFF769FDFFF769FF0028B8 +:10AE2000DED0E7E75CAC012038B50D46044608B932 +:10AE3000044B1C68FEF7EEFD6565BDE83840FEF783 +:10AE40000DBE00BFE4A70120034608460BB9034B23 +:10AE50001B685B6D03B1184718467047E4A70120D3 +:10AE600010B588B0002407AA06A905A8CDE90544B5 +:10AE7000FEF716FC059B079A0293069B1B491C488C +:10AE8000CDE900432346FFF71AFE60B300F0A6FAAF +:10AE900001281BD14FF0500372B683F31188BFF322 +:10AEA0006F8FBFF34F8F62B64FF0FF32114B2146C9 +:10AEB0001A60114B1860114B1C60114B1868FFF79A +:10AEC000C3FF08B0BDE81040FEF73EBE01300AD116 +:10AED0004FF0500372B683F31188BFF36F8FBFF347 +:10AEE0004F8F62B6FEE708B010BD00BFDB7C0308E1 +:10AEF000BDA9000890AC0120ACAC0120D8AC012069 +:10AF0000E4A70120F8B51D4B1A681D4B12B10122B0 +:10AF10001A60F8BD1B4C01211B4E14271A602068D3 +:10AF2000FFF792FF3268194907FB02F3CD58C818A2 +:10AF3000ADB1456808336D680B449D42456004BF60 +:10AF40006B684360142303FB02114B680021DB682C +:10AF5000236032602068BDE8F840FFF775BF52B942 +:10AF60004FF0500372B683F31188BFF36F8FBFF3B6 +:10AF70004F8F62B6FEE7013AD6E700BF5CAC012016 +:10AF8000DCAC0120E4A7012064AC0120F0A7012083 +:10AF900010B50C4650B94FF0500372B683F31188C8 +:10AFA000BFF36F8FBFF34F8F62B6FEE7054B196893 +:10AFB0001831FEF79FFC20460121BDE81040FFF745 +:10AFC00095BC00BFE4A7012038B50D46144650B922 +:10AFD0004FF0500372B683F31188BFF36F8FBFF346 +:10AFE0004F8F62B6FEE7074B19681831FEF776FC03 +:10AFF000002C21460CBF28464FF0FF30BDE83840FA +:10B00000FFF774BCE4A70120C36813B5DC6854B92A +:10B010004FF0500372B683F31188BFF36F8FBFF305 +:10B020004F8F62B6FEE704F1180108460191FEF762 +:10B0300078FC124B01991B68E3B9211D0846019168 +:10B04000FEF76FFC0E4AE36A10680199834200D94B +:10B0500013600C4A142000FB0320FEF73FFC0A4B50 +:10B06000E26A1B68DB6A9A4206D90120074B186026 +:10B0700002B010BD0648F0E70020F9E75CAC012003 +:10B0800064AC0120F0A70120E4A70120DCAC012082 +:10B0900098AC0120034B1B680360034B1B684360A3 +:10B0A000704700BF94AC0120D8AC012070B50C46AD +:10B0B000054650B94FF0500372B683F31188BFF3C1 +:10B0C0006F8FBFF34F8F62B6FEE751B94FF0500359 +:10B0D00072B683F31188BFF36F8FBFF34F8F62B6E1 +:10B0E000FEE7FEF797FC0F4B196823685A1C10D037 +:10B0F0000D482E6800686A68864201D08A420FD9DE +:10B10000881A83420AD95B1A284613442360FFF742 +:10B11000C1FF0024FEF7A2FC204670BD002323607F +:10B120000124F7E7D8AC012094AC0120014B0122A7 +:10B130001A607047DCAC0120014B1868704700BFF3 +:10B14000E4A70120054B1B6833B1054B1868B0FA22 +:10B1500080F040094000704701207047ACAC0120EE +:10B160005CAC012073B5044640B31B4DC36A2A682A +:10B17000D26A934228D28269002A04DB2A68D26A02 +:10B18000C2F1380282611422144E02FB0363626929 +:10B190009A4215D1211D08460191FEF7C2FB2B688A +:10B1A0000F4ADB6A106801998342E36200D9136099 +:10B1B000142000FB0360FEF791FB012002B070BD7C +:10B1C0002B68DB6AE362F8E72B68C06CDB6A9842A5 +:10B1D0002CBF00200120F1E7E4A70120F0A7012007 +:10B1E00064AC012013B510B9002002B010BD1E4B95 +:10B1F0001C6884420AD04FF0500372B683F3118862 +:10B20000BFF36F8FBFF34F8F62B6FEE7236D53B965 +:10B210004FF0500372B683F31188BFF36F8FBFF303 +:10B220004F8F62B6FEE7E16A013BE26C2365914213 +:10B23000DAD0002BD8D1211D08460191FEF771FB11 +:10B24000E36C0199C3F13802E362A261074A106816 +:10B25000834200D91360064A142000FB0320FEF746 +:10B260003DFB0120C1E700BFE4A7012064AC012041 +:10B27000F0A7012037B50446002848D0026D52B926 +:10B280004FF0500372B683F31188BFF36F8FBFF393 +:10B290004F8F62B6FEE7C36C994238BF1946C36A46 +:10B2A0008B4234D0012A32D11A4A126882420AD122 +:10B2B0004FF0500372B683F31188BFF36F8FBFF363 +:10B2C0004F8F62B6FEE78269134D002A4FF01402D9 +:10B2D000C16202FB0353A8BFC1F138014269A8BF94 +:10B2E00081619A4213D1011D08460191FEF719FBB5 +:10B2F0000A4AE36A10680199834200D91360142056 +:10B3000000FB035003B0BDE83040FEF7E7BA03B0DE +:10B3100030BD00BFE4A70120F0A7012064AC0120EC +:10B32000044B1A681AB119680A6D01320A65186867 +:10B33000704700BFE4A70120F7B5114CFEF76AFB88 +:10B340002568BDB90F4F104E3846FEF7B9FA3046A2 +:10B35000FEF7B6FA0D4B0E4A10211F600A200D4B66 +:10B360001E600D4B0095FEF7A1FD206010B10B494A +:10B37000FFF7DCF903B0BDE8F040FEF76FBB00BF9C +:10B3800004AE012088AD01209CAD0120E0AC01207D +:10B39000E8AC0120E4AC0120B4AD0120E07C03085E +:10B3A000914208B5416000610AD8D31A826993427C +:10B3B0000DD2011D074B1868FEF79CFA002008BD4E +:10B3C0009A4201D2994202D2011D034BF3E70120B8 +:10B3D000F5E700BFE4AC0120E0AC012010B588B077 +:10B3E000FFF7AAFF134B1B68B3B1002407AA06A9F5 +:10B3F00005A8CDE90544FEF75FF9059B079A02937E +:10B40000069B0D49019302230C4800932346FFF746 +:10B4100056FB0B4B186050B94FF0500372B683F3D4 +:10B420001188BFF36F8FBFF34F8F62B6FEE7012025 +:10B4300008B010BD04AE0120E57C03084DB500083E +:10B4400008AE01207FB5164604461A4650B94FF0A3 +:10B45000500372B683F31188BFF36F8FBFF34F8F22 +:10B4600062B6FEE70C4D286878B105290294CDE953 +:10B4700000160CDCFFF766FE0023022869462868E8 +:10B480000CBF089A1A46FEF796FD04B070BD002363 +:10B490006946FEF79DFEF8E704AE01202DE9FF475F +:10B4A000DFF8A4800646FFF77DFB0546D8F800309C +:10B4B00083420BD9224F4FF000093B681A686AB9E2 +:10B4C000204A116813600123396000E000232846F8 +:10B4D0003360C8F8005004B0BDE8F087DB68DC6872 +:10B4E000D3F800A0211D08460391FEF71AFA236A3B +:10B4F0002046984794F82830039913F0040FDCD0C5 +:10B50000A36953449A4505D2386863602461FEF705 +:10B51000F1F9D2E7002352462046CDF800901946B3 +:10B52000FFF790FF0028C8D14FF0500372B683F3A5 +:10B530001188BFF36F8FBFF34F8F62B6FEE700BF76 +:10B54000E0AC0120E4AC0120B0AD01202DE9F043D6 +:10B55000714D89B0714E2B68D3F80080B8F1000F9F +:10B5600037D0DB680024D3F80080FFF713FB04A872 +:10B57000FFF794FF049B8146002B6BD1002C4ED12A +:10B58000404552D3FFF7B4FB2B68DB68DF68381DFA +:10B59000FEF7C7F997F8283058071CD5B969434614 +:10B5A0004A4638464144FFF7FBFEC0B123464246B7 +:10B5B000214638460094FFF745FF80B94FF050030D +:10B5C00072B683F31188BFF36F8FBFF34F8F62B6EC +:10B5D000FEE70124C9E723F0010387F828303B6A1E +:10B5E00038469847002204A93068FEF7B6FE0028C6 +:10B5F000B1D0049B0698002B2FDB069C6369002BBF +:10B6000032D103A8FFF74AFF049B0246092BE9D871 +:10B61000DFE803F02E2E2E59607A2E2E5960404B13 +:10B620001B681C68B4FA84F464092246A8EB09017B +:10B630003068FFF7BAF8FFF75BFB0028D2D14FF074 +:10B64000E0234FF08052C3F8042DBFF34F8FBFF3B8 +:10B650006F8FC7E7FFF74CFBC4E7059B0799984737 +:10B66000049B002BBEDBC8E7201DFEF75AF9C8E794 +:10B6700094F828302046A16943F0010384F828306B +:10B68000059B1944FFF78CFE0028ABD0236A2046A7 +:10B69000984794F828305907A4D5A2690023059942 +:10B6A000204600930A441946FFF7CCFE002899D1A2 +:10B6B0004FF0500372B683F31188BFF36F8FBFF35F +:10B6C0004F8F62B6FEE794F8283023F0010384F828 +:10B6D000283087E794F8283043F0010384F82830B5 +:10B6E0000599A16151B94FF0500372B683F31188E7 +:10B6F000BFF36F8FBFF34F8F62B6FEE7034601447F +:10B700002046FFF74DFE6DE794F828309A07DCD409 +:10B710002046FEF799F865E7E0AC012004AE012071 +:10B72000E4AC0120436810B504464BB15B6A0121CB +:10B73000984723692BB1C82363610023C4F83431CF +:10B7400010BD64236361FBE7436810B504460BB189 +:10B750009B6A984700236360636110BD08B5436826 +:10B76000842200211B6898470022C0F8802008BD71 +:10B7700008B543684FF48C7200211B68984700227B +:10B78000C0F8142108BD0023502970B504461546A1 +:10B79000436007D003680D265022D961C3E90562D2 +:10B7A0001B689847B5F5F47F09D0236816214FF43C +:10B7B000F4722046DD61C3E905121B6898474FF417 +:10B7C000F472002120462668E56829F0F7F8012385 +:10B7D000204626602361E5600BF044FE00232046EE +:10B7E000A360A361C4F8B430C4F8C430C4F8B8305E +:10B7F000C4F8C830C4F8BC30C4F8CC30C4F8C03089 +:10B80000C4F8D030C4F83431C4E92933C4E92B3347 +:10B8100005F08CF8204603F091FDC823636170BDEC +:10B82000FFF792BF4269A2F1C80370B504460A2B24 +:10B8300000F29F80DFE803F00610A597979797978F +:10B84000979D9700D0F8C8315B689847A369204658 +:10B850009B689847C9236361D4F8C83120461B68A8 +:10B860009847012806462AD1656A032D29D0042D60 +:10B870005FD0012D73D1034684F8280084F8293065 +:10B880000022D4F8A8310221C4E90B333E4B84F8DE +:10B890005810C4E90E2300230122C4E9103384F8B0 +:10B8A00048306365E265C4F88830E366C4E9132272 +:10B8B000C4E919334FF48072CA23226663613046AB +:10B8C00070BDD4F81C3183B9D4F828318BB194F809 +:10B8D0002C2162B3012A08D0236874212046C3E9D1 +:10B8E00005125B684FF0FF319847022384F8285017 +:10B8F000C4E7D4F8D83019689A6D0129D3F8B0504C +:10B900000FD1022A01D1032DEFD023682046C3E9CD +:10B91000061271221D62012103255A615B68984756 +:10B92000E3E75229F1D1472AEFD1422DEDD102258B +:10B93000DBE7D4F8283173B194F82C215AB1022AEC +:10B9400008D0236874212046C3E905125B684FF0D4 +:10B95000FF3198470525042384F828508EE70023FB +:10B9600084F828308AE7D0F8C831BDE870401B68F9 +:10B970001847036815210026C3E905121B6898477C +:10B980009DE701269BE700BF0000F03F4269A2F15E +:10B99000C803012B70B504460E4605D9036815216E +:10B9A000C3E905121B6898472046FFF73BFF0128B3 +:10B9B00005460BD0022809D12EB123683522204636 +:10B9C0005A611B6898472046FFF7ACFE284670BDB9 +:10B9D0004369A3F1CD02012A10B504461FD8026CB9 +:10B9E0000ABBD0F88C20436F9A4204D203684522E8 +:10B9F0005A611B689847D4F8B83120465B6898476D +:10BA0000D2236361D4F8C8315A69A2B1A369204630 +:10BA10009B6998472046FFF785FE012010E0CF2B59 +:10BA2000EED0D22BEED0226815212046C2E90513B4 +:10BA300013689847E6E71B68204698470028E1D13D +:10BA400010BD4369CC2B2DE9F041044608D0D0F855 +:10BA5000B8311B6898470023C4F88C30CC2363614D +:10BA600004F18C050026D4F8B8319B68F3B9636CF7 +:10BA70000120002B14BFCE23CD236361BDE8F081EC +:10BA8000A36823B12046C3E901121B689847D4F884 +:10BA9000BC312A462046D4F88C70D3F804800023A9 +:10BAA0001946C047D4F88C30BB4211D0D4F88C1062 +:10BAB000626F9142E4D3D4F8B83120465B6898476E +:10BAC000D4F8B83120461B689847C4F88C60CAE7A0 +:10BAD0000020D3E74369CA2B10B5044609D105F00D +:10BAE000CFF8236C1BB1CF230120636110BDCB23A2 +:10BAF00063616269CB2A2CD1D4F8C8311B69FBB1D0 +:10BB0000A36813B11B6820469847D4F8C831204673 +:10BB10001B6898470028E9D0022811D0A368002BA1 +:10BB2000EED020F002000128EAD15A68996801326B +:10BB30008A425A60E4DBD4F848210A449A60DFE77D +:10BB4000D4F89030C4F898302046BDE81040FFF794 +:10BB500078BFCC2AF8D0236815212046C3E9051206 +:10BB60001B689847F0E7F7B51646426904460D464C +:10BB7000CD2A05D003681521C3E905121B68984733 +:10BB8000D4F88C20636F9A420AD323687E22204621 +:10BB90004FF0FF315A615B689847002003B0F0BD59 +:10BBA000A06820B1C0E9012303682046984700231C +:10BBB000204601AA29460193D4F8BC315F68334678 +:10BBC000B847D4F88C3001980344C4F88C30E5E7CA +:10BBD00038B584690546636843B9E368984728B96E +:10BBE0002B68192228465A611B6898476368013BF5 +:10BBF000636023685A1C2260187838BD2DE9F04133 +:10BC000080460D46D0F8D0414FF40047D4E90323D5 +:10BC1000B2F5004F1CDB2878294900F07F06A768A1 +:10BC200051F82610A2EB21424FEA212C02FA03F32D +:10BC30000E14E2609F4234DBFF1A964220F07F032D +:10BC4000E660A7605BB234DD83EA0C032B7034E05E +:10BC5000013B002B23611ADAD8F8B4316BB94046A6 +:10BC6000FFF7B6FFFF28064608D14046FFF7B0FFB2 +:10BC7000FF28FAD010B1C8F8B4010026A36846EA3C +:10BC80000326236913F10802A66004D42261E36845 +:10BC90005B00E360BAE709332361002BF7D1E7606B +:10BCA000F5E7B2F5004F08DA20F07F0396425BB269 +:10BCB000CADD4B4080F080002B70C009BDE8F081E8 +:10BCC000F07C03082DE9F74FD0F8E03000F5A871BB +:10BCD0000446D0F8D051D0F898210191002B00F003 +:10BCE0008880D0E96717D0F8A4015AB9A1B12368B8 +:10BCF0001126C3E90717C3E90562586220461B688D +:10BD000098470FE08A42F2DCD4F8B0318B42EEDB88 +:10BD1000D4F85031012BEAD117B17B1E8342E6D112 +:10BD20000D28E4DCDDF804A04FF000094FF0760B9D +:10BD3000D4F85031D4F898214B451FDCD4F8A03109 +:10BD4000002B53D1634B6449002A08BF0B464FF0C8 +:10BD5000000805F11409019EC2466B60D4F8503109 +:10BD600043455FDC0023C5E902336FF00F032B610D +:10BD7000D4F818316B6303B0BDE8F08F5AF8043F74 +:10BD8000D4F8A0105E68300201EB062862B10A58B0 +:10BD9000002A09DA226800234FF0FF312046D361E0 +:10BDA000C2E905B652689047D4F8987108EB870845 +:10BDB000D4F89C21BA4202DA09F10109B8E7D8F8AF +:10BDC0000020D4F8A01122EAE272914208D0226841 +:10BDD0004FF0FF312046D761C2E905B6526890475F +:10BDE000D4F8A421013748F8042BE1E73B4B3C4948 +:10BDF000AAE76AB9D0F8A03153B9D0F8A4313BB959 +:10BE0000D0F89C313F2B0BDCD0F8B021934207D007 +:10BE100023687D224FF0FF3120465A615B689847C6 +:10BE2000304B94E7D4F8E03056F804BF33B1D4F87F +:10BE3000983143BBD4F8A031002B3AD1DBF8147011 +:10BE40000F2F06D9236832222046C3E905271B6835 +:10BE5000984705EB8707BB6B33B963684022012124 +:10BE600020461B689847B86340220021B86B28F031 +:10BE7000A5FDC9F800A0C9F810A0D4F8E030EBB9CE +:10BE8000D4F8B031ABB1DBF818700F2F19D805EB2F +:10BE90008707BB6F3BB963684FF48072012120466E +:10BEA0001B689847B8674FF480720021B86F28F07C +:10BEB00085FD08F1010809F104094FE7D4F898312C +:10BEC000E0E7236832222046C3E905271B6898472C +:10BED000DDE700BF55C3000889C40008DDC10008C4 +:10BEE00003C300088BBF00082DE9F047D0E9733584 +:10BEF00004469B68984728B92368192220465A614E +:10BF00001B689847002605F1140704F5A878B14688 +:10BF1000D4F85031B3420ADC0023C5E902336FF094 +:10BF20000F032B61D4F818316B63BDE8F087D4F8A8 +:10BF3000E03058F804AF2BB1D4F89831ABB9D4F84D +:10BF4000A031E3B9DAF81430402200210E3355F85D +:10BF5000230028F033FDC7F80090C7F81090D4F8FC +:10BF6000E0307BB9D4F8B0314BB1DAF818304FF487 +:10BF7000807200211E3355F8230028F01FFD013682 +:10BF80000437C5E7D4F89831EEE72DE9F04FD0F843 +:10BF900018310446D0F8D0512DED028B87B00591B1 +:10BFA00033B16B6B0BB9FFF79FFF6B6B013B6B639F +:10BFB0002B69013300F0AA80D4F8AC310027049338 +:10BFC00004F5B673039305F1B80308EE103AD4F8FC +:10BFD0006C31BB4240F39A80059B2046039A53F88C +:10BFE0002730009352F8043F039204EB830205EBE1 +:10BFF000830BD2F85421DBF824100192526905EB2F +:10C0000082090292D9F838600E443146FFF7F6FDF6 +:10C0100068BBCBF82400DBF81430009A1380D4F806 +:10C02000B031002B00F0C380019B00269B6905EB1B +:10C03000830B04EB030ADBF8781006EB460220467C +:10C0400001EB02094946FFF7D9FD002840F0AF8017 +:10C0500009F1010120460136FFF7D0FD00286DD11E +:10C06000D4F8B02109F10309B242F1DC43E0711CBC +:10C070002046FFF7C3FD811C8046204606EB010ADF +:10C080005146FFF7BBFD064640B1D9F8381001F123 +:10C09000140A51462046FFF7B1FD40BB029B2344E2 +:10C0A00093F8E8209946012303FA02F2B6EB620FF7 +:10C0B00035DB99F8F82003FA02F2B6EB620FCCBF39 +:10C0C00008F1030208F1010292000AF10E01B146E3 +:10C0D000CBF82420761024D1B8F1000F2BD109F130 +:10C0E0000109DBF814204A44CBF8142093E77600CA +:10C0F000B6F5004F10D1236875224FF0FF3120466E +:10C100005A615B6898474FF0FF332B61012007B0FD +:10C11000BDEC028BBDE8F08F0AF1010AB9E70022FD +:10C12000D3E720460291FFF769FD02990028D1D09C +:10C1300049EA0609CEE76FEA0909D2E709F10209DF +:10C1400018EE101A2046FFF759FD49460190204687 +:10C15000FFF754FD8046A8B149462046FFF74EFD43 +:10C1600080B19AF808114FEA4808DBF87820B1420C +:10C17000ACBFBD21D92102EB010949462046FFF79A +:10C180003DFDB0B909F10E01C1465FEA680818D15A +:10C19000019B03BB09F10102049B009953F826306F +:10C1A00021F81320D4F8B031B3423FF744AF013740 +:10C1B0000DE74FEA4808B8F5004F9CD009F1010996 +:10C1C000DBE720460291FFF719FD02990028DCD039 +:10C1D00049EA0809D9E76FEA0902DDE7D0F8183122 +:10C1E0002DE9F04F04460D46D0F8D0612DED028BBD +:10C1F00085B033B1736B0BB9FFF776FE736B013B00 +:10C2000073633369013376D0D4F8543101214FF090 +:10C21000FF38D4F8ACB19A69D4F8A431D5F80090BD +:10C220009940D4F89C7108FA03F301910293002F0E +:10C2300037DC02F11E03D4F89851039306F1B803DA +:10C2400008EE103AD4F89C31AB4254DB6B1E039AD3 +:10C25000BD4203EB430356F8222002EB030A05DD3F +:10C2600051462046FFF7CAFC002844D15BF8251050 +:10C27000013509EB410839F91110D1B10AF1020178 +:10C280002046FFF7BBFC0028DCD0B8F90010B8F856 +:10C2900000300029B4BF029A019A1344A8F8003074 +:10C2A000D0E75BF8273039F91330002BC1D1013FBB +:10C2B000BDE70AF101012046FFF7A0FC50B118EEDE +:10C2C000101A2046FFF79AFCDDE90132002818BF5A +:10C2D0001346E3E7D4F89C210AF1030AAA42C5DA1F +:10C2E000236875224FF0FF3120465A615B689847FA +:10C2F0004FF0FF333361012005B0BDEC028BBDE888 +:10C30000F08FD0F818312DE9F04104468846D0F876 +:10C31000D06133B1736B0BB9FFF7E6FD736B013B73 +:10C320007363D4F8A4310127B83600259F40D4F8B0 +:10C330006C31AB4202DC0120BDE8F0813146204681 +:10C34000FFF75CFC20B158F8252013883B4313808D +:10C350000135ECE7D0F818312DE9F04F044687B0ED +:10C360000D46D0F8D06133B1736B0BB9FFF7BCFD4C +:10C37000736B013B7363336901331DD02B6806F186 +:10C38000B80BD4F8ACA10293D4F85431D4F8985136 +:10C390009B6906EB83090193D4F89C31AB420BDB1C +:10C3A0006B1ED9F87810204603EB430301EB03081A +:10C3B0004146FFF723FCB0B1012007B0BDE8F08F84 +:10C3C0000135D4F89C2108F10308AA420BDA23684E +:10C3D00075224FF0FF3120465A615B6898474FF055 +:10C3E000FF333361E8E708F101012046FFF706FC5F +:10C3F0000028E5D008F1020859462046FFF7FEFB69 +:10C40000414603902046FFF7F9FB0746B0B141468D +:10C410002046FFF7F3FB88B1019B7F00D9F8782015 +:10C42000E11891F80811A942ACBFBD21D92102EB56 +:10C43000010841462046FFF7E1FB88B908F10E01EB +:10C440003A467F1013D1039BE3B90132D4F8A4110B +:10C450005AF8253001358A40029921F813209BE7CC +:10C460007F00B7F5004FB2D008F10108E1E72046A0 +:10C47000CDE90412FFF7C2FBDDE904120028E0D089 +:10C480003A43DEE7D243E1E72DE9F04FD0F8183127 +:10C4900085B00446D0F8D061039133B1736B0BB90A +:10C4A000FFF722FD736B013B7363336901337BD06C +:10C4B00004F5B6734FF000090193D4F86C314B4585 +:10C4C00072DD039B2046019A53F82930029352F8FB +:10C4D000043F019204EB830206EB830AD2F8542155 +:10C4E000DAF82410526906EB82080092D8F8385026 +:10C4F0000D442946FFF782FB58B9CAF82400D4F846 +:10C50000A42109F10109DAF814309340029A13804A +:10C51000D3E7691C2046FFF771FB811C07462046C4 +:10C5200005EB010B5946FFF769FB054640B1D8F80A +:10C53000381001F1140B59462046FFF75FFB20BB72 +:10C54000009B234493F8E8209846012303FA02F263 +:10C55000B5EB620F2FDB98F8F82003FA02F2B5EB87 +:10C56000620FCCBFFA1C7A1C92000BF10E01A84698 +:10C57000CAF824206D1020D14FBB08F10108DAF869 +:10C5800014204244CAF81420B9E76D00B5F5004FF5 +:10C590000ED1236875224FF0FF3120465A615B6847 +:10C5A00098474FF0FF333361012005B0BDE8F08FAD +:10C5B0000BF1010BBFE70022D7E720460091FFF700 +:10C5C0001DFB00990028D5D048EA0508D2E76FEA9C +:10C5D0000808D4E74368BC2201211B6870B50446F3 +:10C5E0009847144B0546C4F8D001802240F8383BE8 +:10C5F000002128F0E3F9712385F8B830D4F8E03051 +:10C600007BB1626A012163682046120200251B6823 +:10C6100098470646C4F8A000636A06EB0520AB42C3 +:10C6200000DC70BD4FF48072FF21013528F0C6F99F +:10C63000F2E700BFC5BC00087047000003687B221A +:10C640004FF0FF3110B504465A615B689847A36903 +:10C65000024A01201A6002225A6010BDB87E030807 +:10C6600070B50C1E064608DD85696B68A34205DBC4 +:10C670002A681B1B22446B602A6070BDE41A304696 +:10C68000EB689847F1E7704770B5044616460D46CB +:10C6900001B12AB923682B2220465A611B689847AA +:10C6A000A16929B963681C2220461B689847A061CC +:10C6B000A369064A9A60064ADA60064A1A61064A7F +:10C6C0005A61064AC3E900569A6170BD39C600082E +:10C6D0003DC6000861C600088D08010887C600082D +:10C6E000D0F85021D0F8C031012A0FDCD0F8482111 +:10C6F000D0F85411013AD0F89400904234BFCA687F +:10C70000CA6CDA610022C3E9052270470122F8E70A +:10C710000022C0F89420FFF7E3BF002070472DE906 +:10C72000F04F00F5A87B8FB00446D0F8C0515F46AB +:10C7300000264FF001080DF12809D4F85031B3421A +:10C7400013DCAE690DF12809EB69B34222DCD4F8A1 +:10C750009430D4F8482101339342C4F8943071D214 +:10C760002046FFF7BDFF032044E057F8041F606830 +:10C77000CB684968D4F894201231CDF800805A4330 +:10C78000D0F820A055F821102046D04749F82600BF +:10C790000136D2E7B3006F690893D4F86431BB4225 +:10C7A0004FF000034BD9D4F85021DA460393069298 +:10C7B00013E05AF8042F4FF0000CDDF82080D2E986 +:10C7C0000EE2059207FB0EF2D20104922EEAEE72FF +:10C7D0000992059A624510DC0133069A9A42E8DC18 +:10C7E000D4F8D03105F1200120465B68984720BB82 +:10C7F000C5E905760FB0BDE8F08F59F823200499FC +:10C8000052F808200A4400210792039A02F180425C +:10C81000073205EB820207988E4500EBC11008DC59 +:10C8200003990CF1010C099A08F1040811440391D1 +:10C83000CFE7013142F8040FEDE70137ADE70136EC +:10C840006B6181E7D4F8C8312046DB689847042043 +:10C85000D0E72DE9F04F044689B08B46D0F8C0717F +:10C86000D0F84851D4F89020D4F898309A421DDB83 +:10C87000D4F89C3003D1D4F894209A4216D96B1E78 +:10C880000026D4F8D850039307F148030693636A4F +:10C89000D4F89C20B34213DC501CD4F84831C4F8BF +:10C8A0009C0098422CBF0420032006E0D4F8C83135 +:10C8B00020461B6898470028D4D109B0BDE8F08F06 +:10C8C0006B6B13B901365835E1E761680020EB68FE +:10C8D000009020460F6A5A43069951F82610B8472F +:10C8E000D4F89C30039A04909342EB6821D29A4684 +:10C8F000D4F8D431002203EB86035B681F465BF853 +:10C9000026300292029A5245DCDA049A4FF000096E +:10C910000299C84652F821200592E969059A4145D5 +:10C9200002EBC8120FD8AA6A03EB8203029A013203 +:10C93000E7E72A6AB2FBF3F103FB112ABAF1000F11 +:10C9400008BF9A46D4E7CDF80090294607932046C1 +:10C95000B8476A6A08F10108079B9144DDE70000C7 +:10C960002DE9F041D0F8C05104462B6923B3036D83 +:10C97000002B4BD0D0F8E030002B47D0D0F8A030BF +:10C98000002B43D02B6F3BB9426A182143684A43BE +:10C9900001211B68984728670023D5F870C0D4F898 +:10C9A000D8004FF0180E1946626A0EFB03C7934277 +:10C9B00007DB59B3164BEB600023C4F89C30BDE88D +:10C9C000F081026D12B3168806B35688F6B1168A46 +:10C9D000E6B1168CD6B1568AC6B19288B2B1D4F8F7 +:10C9E000A0601A02B25806EB0328002A0EDB0122CF +:10C9F00058F82260002E47F8226002F1010218BFA9 +:10CA00000121062AF4D101335830CDE7014BD2E79A +:10CA10009BCB000853C80008D0F864312DE9F04FD3 +:10CA2000013BD0F8C05104462DED028B8FB0089326 +:10CA3000D0F848310B91013B0993AB69039305F1A1 +:10CA4000200308EE103AEB69039A934213DCD4F802 +:10CA50009C30D4F848210133C4F89C30D4F8943089 +:10CA600001339342C4F8943080F090802046FFF761 +:10CA700037FE03202AE06F69089B9F4205D90023F7 +:10CA80006B61039B01330393DDE7D4F8B03133B11D +:10CA9000D4F86C210021286AD20127F08FFFD4F846 +:10CAA000D03118EE101A20465B68984758B14FF005 +:10CAB000000B04F5A873DA460593D4F850315B45B2 +:10CAC00009DC0137D8E7039BC5E905730FB0BDEC5E +:10CAD000028BBDE8F08F059B53F8041F05934B6B49 +:10CAE00023B90B6C9A440BF1010BE6E74A684FF04F +:10CAF0000009D4F8D431039803EB82035B681E4627 +:10CB0000089B9F4234BF8B6B8B6C06938B6A4343AD +:10CB10000B9850F8222002EB83034A6C7A430A9266 +:10CB2000CA6B4A45DFDDD4F894200998824204D3C9 +:10CB3000039AC86C4A4490420DDD0AF1804808F11E +:10CB4000070805EB88024FF0000807920A9A049242 +:10CB5000069A904507DB8A6B09F1010992448A6ABB +:10CB600003EB8203DCE7079808F10108049A0D93B0 +:10CB7000009250F8042F0C9107902046B0470C9972 +:10CB8000049B4A6A134404930D9BE1E7D4F8C8312F +:10CB90002046DB689847042098E72DE9F04FD0F84D +:10CBA000C031C5B00446D0F8485122911E93D4F844 +:10CBB0009030D4F898108B4203DCD4F8C821506927 +:10CBC000A8B16B1ED4F8D850209300230393636A56 +:10CBD0000399D4F89C208B421EDC501CD4F84831B9 +:10CBE000C4F89C0098422CBF0420032011E08B4223 +:10CBF0000AD1D4F89811D4F89C30002908BF013329 +:10CC0000D4F894109942DCD813682046984700283D +:10CC1000CDD145B0BDE8F08F6B6B23B9039B583580 +:10CC200001330393D3E7209BE868934240F25A8193 +:10CC30004300814600210F916168039ED1F8208056 +:10CC40001E99483151F82610002A00F0598100261B +:10CC5000013A0344424320460096C047EB681D96C4 +:10CC600000EB83001E9B182203991B6F039F02FB9E +:10CC7000013305932B6D1A88B3F802E0B3F810C0A6 +:10CC80001E8C598A06929A88D4F8D43103EB870314 +:10CC90005B682193229B53F827300E934FEACE1303 +:10CCA00013934FEA0E2314934FEACC1315934FEAD4 +:10CCB0000C231693F301179333021893CB011993A6 +:10CCC0000B021A93D3011B9313021C93031F0D93A2 +:10CCD0000023049309F1FF332393049B4B459DDA12 +:10CCE0000D9B53F8048F0D931D9B1BB1049B002BD0 +:10CCF00000F00C810D9B53F8043C07930F9B23B16C +:10CD0000239B049A934200F004810D9B5B68089377 +:10CD1000079B0126EA69B3F90030013A1293B8F98A +:10CD200000301F9200221F46089BDDF848B0B3F97F +:10CD30000030BA460993CDE90B22012224A94046CE +:10CD40000A930BF0C6FD1F9B0C9A93420A9B40F27C +:10CD5000EA80079AB2F980201092B8F980200A92EE +:10CD6000089AB2F980201192059A5168C1B1BDF9B3 +:10CD70009220AAB90A983A1A0698424324204243BC +:10CD8000139800F1D780024400291498B2FBF0F206 +:10CD900004DD06FA01F1914200DC4A1EADF8922052 +:10CDA000059A9168C9B1BDF9A020B2B9099A06984F +:10CDB000ABEB0202424324204243159800F1C880A5 +:10CDC000024400291698B2FBF0F204DD06FA01F1E4 +:10CDD000914200DC4A1EADF8A020059AD168D1B17D +:10CDE000BDF9B020BAB9099A06985A44A2EB4A0292 +:10CDF0004243179812EBC20200F1B88002440029A6 +:10CE00001898B2FBF0F204DD06FA01F1914200DC61 +:10CE10004A1EADF8B020059A1269E2B1BDF9A21020 +:10CE2000C9B912991098091ACB1A11990B4406998D +:10CE30004B43199913EB830300F1A6800B44002A9E +:10CE40001A99B3FBF1F304DD06FA02F29A4200DC10 +:10CE5000531EADF8A230059B5A69DAB1BDF9943082 +:10CE6000C3B90A993B460B440699A3EB4A034B43CB +:10CE70001B9913EBC30300F195800B44002A1C9906 +:10CE8000B3FBF1F304DD06FA02F29A4200DC531E12 +:10CE9000ADF894300B9B24AA2946219F009320468D +:10CEA0000E9B08F18008B847079B0B9A57468033C2 +:10CEB000CDF848B00793089B803308936B6AD3186A +:10CEC0001F9A0B930C9B01330C930C99099B8A427C +:10CED00022D20E9AAB6A02EB83030E93049B0133BA +:10CEE0000493FAE62B6AB3FBF0F100FB1139B9F1B8 +:10CEF000000F03D10346814601219CE64B46FBE728 +:10CF000020460092C04701231D93ABE6CDF81C805C +:10CF1000F4E6CDF82080FBE6119ADDF828A0DDF8D4 +:10CF200040B0099209E7099ACDF828A01192CDF8EE +:10CF300040B019E7821A00291498B2FBF0F205DD1F +:10CF400006FA01F19142D8BF01F1FF32524225E7C2 +:10CF5000821A00291698B2FBF0F205DD06FA01F1FB +:10CF60009142D8BF01F1FF32524234E7821A0029C0 +:10CF70001898B2FBF0F205DD06FA01F19142D8BF34 +:10CF800001F1FF32524244E7CB1A002A1A99B3FB4F +:10CF9000F1F305DD06FA02F29A42D8BF02F1FF333F +:10CFA0005B4256E7CB1A002A1C99B3FBF1F305DD6F +:10CFB00006FA02F29A42D8BF02F1FF335B4267E7FA +:10CFC0002DE9FF4743680E46742201211B68054680 +:10CFD00098472C4BC5F8C0010027036004462A4B34 +:10CFE00000F144080767836086B3D5F8D8606B6AA0 +:10CFF000BB4209DC04F148032449254A6160C4E9C5 +:10D00000032304B0BDE8F087D5F8E030D6F80C90E3 +:10D010000BB109EB49096B680137B168583656F80E +:10D020003C0CD3F814A00BF03AFC56F84C1C0390BF +:10D0300056F8380C0BF033FC0122039B1146CDE966 +:10D0400000092846D04748F8040FD0E76B684FF432 +:10D05000A062012128465B68984704F11C03024640 +:10D0600043F8042F434502F18002F9D1D5F8B011FD +:10D0700019B94FF4A06227F0A1FC06490023064A23 +:10D08000BCE700BF11C7000861C900081FC700083E +:10D0900053C800081BC7000819CA000843684FF4AA +:10D0A000806201211B682DE9F0410446D0F8DC5173 +:10D0B00098474FF4806263680121A86020461B688E +:10D0C00098476368E8604FF480621B68012120463E +:10D0D000DFF87C8098476368286101211B6820463F +:10D0E0004FF48062174F98472C6968610023DFF87E +:10D0F00064E01549D5E902C6144D08FB03E2121499 +:10D100004CF8232007FB03F2A2F56202A2F5A2422B +:10D11000121446F8232005FB03F202F5B60202F5CD +:10D12000D24244F8232001FB03F202F5321202F549 +:10D13000506240F823200133B3F5807FDDD1BDE894 +:10D14000F08100BFA2C50100E6A7FFFF2E49FFFF47 +:10D15000E9660100800B4DFF2DE9F04FD0F8DC416E +:10D1600087B0056FC3EB8202D0F84C01D4F814E00D +:10D17000029001950592D4E9026003902069049021 +:10D18000109A013A109202D507B0BDE8F08F059AC7 +:10D190000C689D1853F8040B54F805804C686459CA +:10D1A00004F1FF3C8C686759019C013F04EB080ABD +:10D1B000D04500F10300E3D017F8019F18F8014BA8 +:10D1C000029A1CF801BF56F8295014440FFA8BFB41 +:10D1D000049A655D00F8015C52F829505EF82B2036 +:10D1E0001544039A2D14655D00F8025C52F82B502B +:10D1F000645D00F8034CDBE72DE9F04FD0F8DC412B +:10D20000C3EB8202099DA669076F013D01D5BDE808 +:10D21000F08F9C18086853F8049B50F804C04868C5 +:10D2200050F804E0886850F804800020B842ECD040 +:10D230001EF800401CF800B004F5807456F824A0D5 +:10D2400056F82B40544418F800A00AF5007A56F816 +:10D250002AA05444241409F800400130E6E72DE9DF +:10D26000F041069DC3EB8202066F013D01D5BDE88A +:10D27000F08198180C6827584C6854F800C08C68E6 +:10D2800054F800E0002053F8044BB04204F10304CA +:10D29000EBD017F8008004F8018C1CF8008004F82B +:10D2A000028C1EF80080013004F8038CEDE72DE9B4 +:10D2B000F043079EC3EB8202476AD0F870E0013E5C +:10D2C00018D403EB020C00200AE051F8204054F877 +:10D2D0000C501C6805EB0E080444454504D1013090 +:10D2E000B842F2DB0433EAE715F8019B84F80090BA +:10D2F0003C44F2E7BDE8F083F0B5059DC3EB820244 +:10D30000076F013D00D5F0BD08681C1853F8040BE9 +:10D31000A45804EB070C644500F10300F1D014F8A5 +:10D32000016B00F8036C00F8026C00F8016CF2E786 +:10D330002DE9F04FD0F8DC4187B0056FC3EB8208D0 +:10D34000D0F84C61D4F814E00095D4E902C0019003 +:10D3500020690290109A013A109202D507B0BDE8F8 +:10D36000F08F03EB08000A6853F8045B125803922D +:10D370004A68125804928A6852F80090CA6852F8B3 +:10D3800000A00022009804358242E3D019F8027010 +:10D39000049C039814F802B0805C5CF827400FFAF4 +:10D3A0008BFB0444C4F1FF04345D05F8044C5EF8C3 +:10D3B0002B400594029C54F82770059C3C4400EBDC +:10D3C0002444C4F1FF04345D05F8034C019C54F877 +:10D3D0002B402044C0F1FF00305C05F8020C1AF825 +:10D3E0000200013205F8010CCCE7704713B50C467A +:10D3F00011461A46036F20680193049B0093002393 +:10D400000BF055FA02B010BD43681C2201211B68C5 +:10D4100070B5044698474A4B0546C4F8DC010360E2 +:10D4200094F82830626A032B21D8012B2DD823D001 +:10D43000002A23DD94F8291094F82830022955D0C9 +:10D44000042966D001296DD103F0FD02A167012AEC +:10D4500024D13C4B5820616A6B60134600259942E9 +:10D4600015DC636D002B69D1A36FE36770BD043BCE +:10D47000012BDDD8042A00E0012ADBD023680B222F +:10D4800020465A611B689847D4E7032AF5E7D4F889 +:10D49000D82000FB032201335563E0E7022B46D17D +:10D4A000294B4FF44062204644F68B466B6063681C +:10D4B000D4F8DC511B6898470023A86141F62F512E +:10D4C000043849F2466506FB03F240F8042F05FBD9 +:10D4D00003F2C0F8002401FB03F2013302F500421D +:10D4E000B3F5807FC0F80028EDD1BAE7032293425C +:10D4F000A26705D1154B20466B60FFF7CFFDB0E763 +:10D50000012B02D1124B6B60ABE7022B0FD1114BF9 +:10D51000F9E7052BA16701D10F4BECE7042B06D1EE +:10D520000E4BF0E7994202D1636AA367F8E72368DC +:10D530001C2220465A611B68984792E7012394E712 +:10D54000EBD30008EDD30008F9D1000859D1000849 +:10D55000F9D200085FD2000831D30008AFD200082A +:10D560002DE9F04F00250746D0F8D8A0D0F8D48197 +:10D570002C46AB462DED048B87B07B6A5B4504DC03 +:10D5800007B0BDEC048BBDE8F08FDAE9091240F278 +:10D590000E7002EB0123834200F0D9805ADC40F286 +:10D5A0000440834200F0D6802FDCB3F5017F00F009 +:10D5B000D3801ADC40F20120834200F0CF800EDCE1 +:10D5C00040F20110834200F0CB80B3F5817F00F080 +:10D5D000C9803B680720DA61C3E90501B3E040F286 +:10D5E00002208342F5D19E4DB2E040F206308342E4 +:10D5F00000F0BA8040F20240834200F0B78040F26F +:10D6000003308342E5D1974DA2E040F203608342AC +:10D6100000F0AE800EDC40F20550834200F0AA809C +:10D6200040F20A50834200F0A780B3F5816FD0D159 +:10D630008D4D8DE040F20C60834200F09F8040F2FF +:10D640000770834200F09C8040F206608342C0D1A4 +:10D65000864D7DE040F60640834200F0938021DC59 +:10D6600040F60910834200F08F800DDC40F6080080 +:10D67000834239D0B3F5016F00F0888040F6040092 +:10D680008342A6D17A4D63E040F60A2083427FD0E0 +:10D6900040F60B3083427DD040F60520834298D17E +:10D6A000744D55E040F60E60834275D00DDC40F6B7 +:10D6B0000D50834272D040F60760834270D040F62E +:10D6C0000C40834285D16C4D42E041F20800834218 +:10D6D00068D041F21000834266D040F60F7083425A +:10D6E0007FF477AF654D33E097F84830022B27D8A9 +:10D6F0001C46634B53F82450DAF8343048F8045F82 +:10D70000CBB1D8F82830A34215D0DAF8506096B1E2 +:10D71000012CC8F8284049D0022C5AD0002C40F0E7 +:10D720009880DAF85420234636F8131042F8231074 +:10D730000133402BF8D10BF1010B0AF1580A1CE719 +:10D740003B6831225A611B6838469847D4E74D4DF3 +:10D750000024D1E74C4DFBE74C4DF9E74C4DF7E782 +:10D760004C4DF5E74C4DF3E74C4DF1E74C4DEFE7F1 +:10D770004C4DEDE74C4DEBE74C4DE9E74C4DE7E701 +:10D780004C4DE5E74C4DE3E74C4DE1E74C4DDFE711 +:10D790004C4DDDE74C4DDBE74C4DD9E74C4DD7E721 +:10D7A0004C4DD5E74C4DD3E74C4DD1E7DAF854005A +:10D7B00000224B4936F8123031F902CB0CFB03F34F +:10D7C00003F500631B1340F822300132402AF1D1E7 +:10D7D000B1E7DAF854304FF000090493414B03935A +:10D7E000039BB3EC027B0393B0EE478AF0EE678AAB +:10D7F000049B03EB890301933A4B029306F1100358 +:10D800000593029B36F8020BB3EC027BB0EE479A0D +:10D81000F0EE679A0293F2F78DFE53EC182BF2F7B5 +:10D8200003FF53EC192BF2F7FFFE4FF07F5300225A +:10D83000F2F7FAFEF3F70AF9019B43F8040B0193A0 +:10D84000059B9E42DDD109F10809B9F1400FC7D10E +:10D8500071E73B68312238465A611B6898476AE78E +:10D86000BD290108C9280108F16701086D240108D4 +:10D870006D5701081D55010821340108CD400108EC +:10D88000BC7E0308915F01089D270108596B0108C0 +:10D89000815B0108392A0108316C0108096A010815 +:10D8A000B55A0108595901081D260108B965010832 +:10D8B00001630108D9210108655201085D2A0108A8 +:10D8C000B95B0108212D010825300108853C0108BC +:10D8D000ED370108D94E0108A14A01086145010848 +:10D8E000087F0308C87E0308F8B54368054654223C +:10D8F00001211B68002698470F4B0446D5F8D870C5 +:10D90000C5F8D40144F8283B6B6AB34200DCF8BD8B +:10D910006B684FF48072012128461B6801369847D6 +:10D920004FF480727865002127F048F84FF0FF33FC +:10D93000583744F8043FE7E761D500082DE9F74F71 +:10D940000569074688461646D5F8B4B19946D0E928 +:10D95000004ABBF1000F42D04E4542DAD5F8D03133 +:10D960005B6A5BB92B6878224FF0FF3128465A6119 +:10D970005B689847D5F8D03101225A62C6F1190682 +:10D9800008FA06F819262CE0BAF1000F07D1AB69A6 +:10D990002846DB68984750B3AB69D3E9004A14F8CE +:10D9A000012B0AF1FF3AFF2A16D1BAF1000F09D173 +:10D9B000AB6928460192DB689847C0B1AB69019A10 +:10D9C000D3E9004A14F8013B0AF1FF3AFF2BECD0EF +:10D9D00013B1C5F8B431BFE742EA08280836182E5B +:10D9E000D2DD4FF0010BC7E9004AC7E9028658466D +:10D9F00003B0BDE8F08F0000F8B5069D06468C46E2 +:10DA0000144695421F4608DD2B46FFF797FF10B9D5 +:10DA10004FF0FF30F8BDD6E902C4621B1B4B4CFA35 +:10DA200002F053F82530184057F8253083420DDBBB +:10DA3000102DC6E902C21FDD306979224FF0FF3197 +:10DA400003685A615B6898470020E3E7002A4FEAC1 +:10DA5000400408DC012361463046FFF76FFF0028D1 +:10DA6000D6D0D6E902C2013A01354CFA02F303F0EE +:10DA7000010343EA0400D7E7D7F88C30123503449A +:10DA800057F825201344587CC4E700BF887F03085B +:10DA900070B5D0E9732500260446EB689169002B28 +:10DAA000B8BF073301EBE30193689161EE609847DB +:10DAB00090B1D4F85021314605F1140022EAE27207 +:10DAC000920026F07BFFD4F818312E61AB62D4F8B7 +:10DAD000B43103B96B62012070BD00002DE9F04F35 +:10DAE000D0F8A43191B00546D0F8D0410393D0F8D6 +:10DAF0001831059133B9666A7EB1A36A0120013BF2 +:10DB0000A36207E0A36A002BF5D1FFF7C1FF00284D +:10DB1000F1D1002011B0BDE8F08FAB6904F110081D +:10DB20000BAF05F5B6791A6804F1100B5B68069225 +:10DB30000793DFF818A10A95B8E80F00D4E902ECC2 +:10DB40000FC7D8F800303B60D5F86C31B3420DDC1C +:10DB5000AB690BAE069A5D461A60079A5A600FCE03 +:10DB6000C4E902EC0FC533682B60C6E7059BBCF126 +:10DB7000070F59F8047F53F82630049305EB870309 +:10DB8000D3F854315B6904EB8303D3F82C800CDCAD +:10DB900000236246714606A8FFF7D0FE0028B8D0E1 +:10DBA000DDE908ECBCF1070F3EDDACF108034EFAED +:10DBB00003F3DBB203F1240258F82220002A42D0FA +:10DBC0004344ACEB020C93F89084B8F1000F1BD0E7 +:10DBD000E04509DD43466246714606A8FFF7AEFE02 +:10DBE000002896D0DDE908ECACEB080C5AF82820A8 +:10DBF00008F1FF384EFA0CF35AF8281013409942F6 +:10DC0000ACBFA3EB0208984610AB039A013603EBB6 +:10DC1000870757F8103C434403FA02F847F8103CD2 +:10DC2000049BA3F800808FE70123009362464346DC +:10DC3000714606A8FFF7E0FEB0F10008FFF669AFF5 +:10DC4000DDE908ECC1E70923EFE700BF887F03089F +:10DC5000D0F818312DE9F04F07468DB00C46D0F8BA +:10DC6000D05133B96B6A7BB1AB6A0120013BAB6227 +:10DC700007E0AB6A002BF5D1FFF70AFF0028F1D1CE +:10DC800000200DB0BDE8F08FD7F89C312E690393CA +:10DC9000D7F8A431D7F8ACB1049316B1013E2E6188 +:10DCA000E2E7BB69D5F83C901A685B680792089375 +:10DCB000D7F898812368DFF8F4A00B970593D5E98E +:10DCC0000212039B984569DC072A09DC002307A898 +:10DCD000FFF734FE0028D3D0DDE90912072A33DD2F +:10DCE000A2F1080341FA03F3DBB203F1240059F86F +:10DCF0002000A0B34B44121A93F8900410F00F04C4 +:10DD00004FEA20132DD0A242984407DA234607A8F1 +:10DD1000FFF714FE0028B3D0DDE90912121B5AF8F0 +:10DD20002400013C41FA02F35AF8244003409C428B +:10DD3000049CA8BF1B1A5BF82800A340059C24F88C +:10DD4000103008F10108BCE70123009307A84B46F7 +:10DD5000FFF752FE002893DBDDE90912CEE7092325 +:10DD6000F3E70F2B02D108F10F08EAE701269E40E6 +:10DD70009BB19A4209DA07A80393FFF7DFFD002859 +:10DD80003FF47EAF039BDDE90912D21A074850F831 +:10DD9000230041FA02F303401E44013EBB69079889 +:10DDA000186008985860C5E9021278E7887F030870 +:10DDB0002DE9F043D0F8A431012787B004469F40F5 +:10DDC000D0F818318846D0F8D051C3B9A3690026DD +:10DDD00005941A685B6801920293D5E90212D4F89F +:10DDE0006C31B34216DCA369019818600298586040 +:10DDF0000120AB6A013BC5E90212AB6207E0AB6AE6 +:10DE0000002BE3D1FFF744FE0028DFD1002007B04C +:10DE1000BDE8F083002A58F8269007DC012301A80A +:10DE2000FFF78CFD0028F1D0DDE90312013A01363D +:10DE300041FA02F3DB0742BFB9F800303B43A9F8CF +:10DE40000030CCE7D0F818312DE9F04F0546D1B0BD +:10DE50000E46D0F8D0714BB9D7F824A0BAF1000F14 +:10DE60000FD0BB6A0120013BBB6207E0BB6A002BFD +:10DE7000F2D1FFF70DFE0028EED1002051B0BDE831 +:10DE8000F08FD5F89C310122D7F810B00693D5F861 +:10DE9000A431D6F800809A40D5F898610F95039286 +:10DEA0004FF0FF3202FA03F30793D5F8AC31089331 +:10DEB000AB691A685B680B920C93FB6BD7E9024263 +:10DEC0000993BBF1000F00F0C380069B9E4240F314 +:10DED000CD800BF1FF3BBFE0072A0ADC002321467F +:10DEE0000BA8FFF72BFD00286ED0DDE90D42072AB5 +:10DEF00061DDA2F10803099844FA03F3DBB203F1F0 +:10DF0000240150F8211000296BD00344521A93F8D1 +:10DF1000900410F00F034FEA2019049366D0012BF0 +:10DF200009D02B6879212846049259614FF0FF31BE +:10DF30005B689847049A002A08DC012321460BA855 +:10DF4000FFF7FCFC00283FD0DDE90D42013A0799BC +:10DF500044FA02F313F0010F039B08BF0B4604932E +:10DF6000089B53F82630059338F91330002B5ED008 +:10DF7000002A07DC012321460BA8FFF7DFFC18B3BA +:10DF8000DDE90D42013A44FA02F3D9070ED5059BAB +:10DF900038F91310039B194208D100298BB2ACBF8A +:10DFA000039907990B44059928F811300136069B0F +:10DFB000B342D5DA3EE0012300932146099B0BA82A +:10DFC000FFF71AFD00280EDA10AB0022BAF1000F9D +:10DFD0003FF453AF0AF1FF3A53F82A1028F8112002 +:10DFE000F4E70923E8E7DDE90D4292E7B9F10F0F05 +:10DFF000B6D0012303FA09FBB9F1000F13D04A454B +:10E0000008DA4B4621460BA8FFF798FC0028DBD026 +:10E01000DDE90D42284BA2EB090253F8291044FA1E +:10E0200002F30B409B44BBF1000F15D04DE7B9F153 +:10E030000109BBD2049B53B1089B049953F82630C5 +:10E0400028F8131010A941F82A300AF1010A013604 +:10E05000069B9E427FF740AFAB690B9919600C9904 +:10E060005960C7F810B0C7E90242FAE6089B53F8B6 +:10E07000269038F91930E3B1002A08DC0123214643 +:10E080000BA8FFF75BFC00289ED0DDE90D42013AAA +:10E0900044FA02F3DB070CD538F91910039B194237 +:10E0A00007D100298BB2ACBF039907990B4428F81C +:10E0B0001930013609E700BF887F03082DE9F04FCA +:10E0C000D0F8183193B00646D0F8D051069133B944 +:10E0D0006F6A7FB1AB6A0120013BAB6207E0AB6ABC +:10E0E000002BF5D1FFF7D4FC0028F1D1002013B0AC +:10E0F000BDE8F08FD6F8AC3105F110080DAC05F194 +:10E100005C090493D6F8B031DFF89CA20593B3699B +:10E110000C961A685B6808920993B8E80F00D5E975 +:10E1200002EC0FC4D8F800302360D6F86C31BB4243 +:10E130000EDCB3690DAE089A05F110041A60099A55 +:10E140005A600FCEC5E902EC0FC433682360C1E703 +:10E15000069BBCF1070F59F8044F53F827B00CDCAD +:10E1600000236246714608A8FFF7E8FB0028BDD0EF +:10E17000DDE90AECBCF1070F4ADDACF108034EFA09 +:10E1800003F3DBB203F1240254F82220002A4DD01D +:10E190002344ACEB020C93F89044D9F85030D9F8F2 +:10E1A00028800393002B00F0A080CCB1A44509DAAD +:10E1B00023466246714608A8FFF7C0FB002895D0A9 +:10E1C000DDE90AECACEB040C5AF82420013C4EFAD1 +:10E1D0000CF35AF8241013409942ACBF9C1A1C4609 +:10E1E00006F5B87353F8272012AB03EB820252F8FE +:10E1F000103C2344012442F8103CABF80030039B50 +:10E200009C4215DB059B9C4240F3818001378CE7E3 +:10E210000123009362462346714608A8FFF7ECFBF2 +:10E22000041EFFF663AFDDE90AECB6E70923F0E769 +:10E23000BCF1070F0DDC00236246714608A8FFF70A +:10E240007DFB00283FF452AFDDE90AECBCF1070F7B +:10E2500037DDACF108034EFA03F3DBB203F124021D +:10E2600058F82220002A3AD04344ACEB020C93F831 +:10E27000900410F00F034FEA201232D09C45144452 +:10E280000BDA6246714608A80793FFF757FB002890 +:10E290003FF42CAF079BDDE90AECACEB030C5AF81A +:10E2A0002310013B4EFA0CF25AF823300A409342F5 +:10E2B000049BA8BF521A53F824302BF813200134C2 +:10E2C0009DE70123009362464346714608A8FFF785 +:10E2D00093FB0028FFF60AAFDDE90AECC9E7092342 +:10E2E000F0E70F2A92D10F34E9E774B1A4450ADAB6 +:10E2F00023466246714608A8FFF720FB00283FF43A +:10E30000F5AEDDE90AECACEB040C01247AE7BCF1D4 +:10E31000070F0DDC00236246714608A8FFF70EFBCD +:10E3200000283FF4E3AEDDE90AECBCF1070F25DD80 +:10E33000ACF108034EFA03F3DBB203F1240258F800 +:10E3400022204AB34344ACEB020C93F8900410F043 +:10E350000F0B4FEA201321D0DC451C440ADA5B4640 +:10E360006246714608A8FFF7E9FA00283FF4BEAEFE +:10E37000DDE90AECACEB0B0C013443E7012300931D +:10E3800062464346714608A8FFF736FB0028FFF6B1 +:10E39000ADAEDDE90AECDAE70923F0E70F2B7FF4F5 +:10E3A00035AF0F34E8E700BF887F03082DE9F04F51 +:10E3B000D0F8183191B00646D0F8D051049133B955 +:10E3C0006F6A7FB1AB6A0120013BAB6207E0AB6AC9 +:10E3D000002BF5D1FFF75CFB0028F1D1002011B034 +:10E3E000BDE8F08FB36905F110080BAC05F15C09CD +:10E3F0001A685B6806920793DFF890A20A96B8E85D +:10E400000F00D5E902EC0FC4D8F800302360D6F82D +:10E410006C31BB420EDCB3690BAE069A05F11004F9 +:10E420001A60079A5A600FCEC5E902EC0FC4336830 +:10E430002360C7E7049BBCF1070F59F8044F53F85A +:10E4400027B00CDC00236246714606A8FFF776FA77 +:10E450000028C3D0DDE908ECBCF1070F49DDACF1C1 +:10E4600008034EFA03F3DBB203F1240254F822202E +:10E47000002A4CD02344ACEB020C93F89044D9F81A +:10E480005030D9F828800393002B00F09F80CCB146 +:10E49000A44509DA23466246714606A8FFF74EFAFC +:10E4A00000289BD0DDE908ECACEB040C5AF82420E2 +:10E4B000013C4EFA0CF35AF8241013409942ACBFB9 +:10E4C0009C1A1C4606F5B87353F8272010AB03EBD3 +:10E4D000820252F8103C2344012442F8103CABF86D +:10E4E0000030039B9C4214DB3F2C40F381800137BA +:10E4F0008DE70123009362462346714606A8FFF785 +:10E500007BFA041EFFF66AAFDDE908ECB7E70923E2 +:10E51000F0E7BCF1070F0DDC00236246714606A848 +:10E52000FFF70CFA00283FF459AFDDE908ECBCF125 +:10E53000070F37DDACF108034EFA03F3DBB203F14A +:10E54000240258F82220002A3AD04344ACEB020CB3 +:10E5500093F8900410F00F034FEA201232D09C453C +:10E5600014440BDA6246714606A80593FFF7E6F9F4 +:10E5700000283FF433AF059BDDE908ECACEB030C5E +:10E580005AF82310013B4EFA0CF25AF823300A4095 +:10E5900093423D4BA8BF521A53F824302BF8132056 +:10E5A00001349EE70123009362464346714606A864 +:10E5B000FFF722FA0028FFF611AFDDE908ECC9E702 +:10E5C0000923F0E70F2A92D10F34E9E774B1A4458B +:10E5D0000ADA23466246714606A8FFF7AFF900281B +:10E5E0003FF4FCAEDDE908ECACEB040C01247BE766 +:10E5F000BCF1070F0DDC00236246714606A8FFF749 +:10E600009DF900283FF4EAAEDDE908ECBCF1070F04 +:10E6100025DDACF108034EFA03F3DBB203F124026B +:10E6200058F822204AB34344ACEB020C93F8900410 +:10E6300010F00F0B4FEA201321D0DC451C440ADAFE +:10E640005B466246714606A8FFF778F900283FF45A +:10E65000C5AEDDE908ECACEB0B0C013444E701235B +:10E66000009362464346714606A8FFF7C5F90028A5 +:10E67000FFF6B4AEDDE908ECDAE70923F0E70F2B8B +:10E680007FF435AF0F34E8E760980308887F03080C +:10E690002DE9F04F032AADF2245D044616461F46CD +:10E6A000029105D903683422C3E905261B689847FF +:10E6B000029B002B44D004EB8603D3F8B45035B949 +:10E6C000236834222046C3E905261B6898473B6827 +:10E6D0003BB963684FF4B262012120461B6898473A +:10E6E0003860D7F80080012600274FF0090BC8F8E2 +:10E6F0008C5015F80690BA464F44B7F5807F05DD7B +:10E7000023682046C3F814B01B6898470AF1180321 +:10E710006B44B9F1010918D20136112EE9D100225A +:10E7200006AB0DF58E7A4FF0010BDA5591469DF848 +:10E73000186006AB13F8093013B34946521A0AE0C1 +:10E7400004EB8603D3F8C450B9E703F8016BE0E7A4 +:10E750004AF82130013106A853188946405CB0427E +:10E76000F6D00BFA06F29A4207DC2268092120460D +:10E770000093516112689047009B5A000136D8E718 +:10E7800005F11002284646460DF58E7C019210F8E0 +:10E79000011F49B35CF823209A1A0B44F2645A1EF5 +:10E7A0005CF8222046F8042F019A8242EFD12D4BCB +:10E7B0004FF48062002108F19000C8F8443001262F +:10E7C00026F0FCF84FF0000A47ABAA5DC6F1080B33 +:10E7D000D14600920122009902FA0BF251440391B2 +:10E7E00005F1110104911FE04FF0FF32DAE753F811 +:10E7F00029009646049900FA0BF011F8091000F16F +:10E80000804C0CF1230C08EB8C0CBEF1010E4CF883 +:10E81000046FFAD100F59260059209F101094044B4 +:10E8200026F0CCF847AB059A03998945DFD101362C +:10E83000009A092E9244C8D1029B23B1019B103546 +:10E840001F44AF4203D10DF2245DBDE8F08F15F8EF +:10E85000013F0F2BF5D9236820465E611B6898475E +:10E86000EFE700BFFFFF0F002DE9F84FD0F8E050B1 +:10E870008246D0F8D0B100F5A874D0F89821002DC8 +:10E8800000F0AF80D0F8A451D0E9671662B9A9B101 +:10E89000DAF80030112750465D62C3E90572C3E91A +:10E8A00007161B6898470FE08A42F1DCD0F8B031B8 +:10E8B0008B42EDDBD0F85031012BE9D116B1731E3C +:10E8C000AB42E5D10D2DE3DCA1460027DAF850314B +:10E8D000DAF89821BB4220DCDAF8A031002B58D1BD +:10E8E000BB4BBC490026002A08BF0B460BF11007A2 +:10E8F000B046CBF80430DAF85031B3424CDC002398 +:10E90000CBF810300023CBE90233CBF82430DAF80F +:10E910001831CBF82830BDE8F88F59F8043FD3F808 +:10E920000480DAF8A0304FEA082103EB082672B120 +:10E930005B58002B0BDADAF8003076224FF0FF310B +:10E940005046C3E905280022DA615B689847DAF887 +:10E95000985106EB8506DAF89C31AB4201DA0137B3 +:10E96000B4E73368DAF8A02123EAE3739A420AD0C5 +:10E97000DAF8003076224FF0FF315046DD61C3E90E +:10E9800005285B689847DAF8A431013546F8043B5E +:10E99000E1E7914B9149A5E7DAF8982154F8043F53 +:10E9A0007AB9DAF8A02142B95A690121504602F138 +:10E9B0000B030BEB8303FFF76BFE013647F8048F65 +:10E9C00099E79D690021504605F10B032A460BEBA0 +:10E9D00085050BEB8303FFF75BFEEB6ACBF83C305E +:10E9E000EBE782B9D0F8A0316BB9D0F8A43153B9B4 +:10E9F000D0F8DC20D0F89C310AB93F2B0CDCDAF8D7 +:10EA0000B0219A4208D0DAF800307D224FF0FF3171 +:10EA100050465A615B689847DAF8B0110026704B8F +:10EA20000BF110076F4AB0463F2908BF1346CBF8D9 +:10EA30000430DAF85031B3423DDCDAF86C010BF106 +:10EA40005C040AF5B6764FF0060C674FDFF8B0812C +:10EA5000A8427FF757AF56F8043F0AEB8303D3F879 +:10EA60005421536910335BF8233044F8043F936911 +:10EA700014335BF82330A362536B002B76D0DAF8A3 +:10EA8000B0110F29D2E9092373D031DC03294BD00F +:10EA9000082959D0002900F09980591E082902F14F +:10EAA000FF3128BF0823082928BF082202EBC30230 +:10EAB0004E4B093A45E054F8049F01215046D9F8DD +:10EAC000142002F110030BEB8303FFF7E1FDDAF8EA +:10EAD000B0314BB1D9F818200021504602F114038F +:10EAE0000BEB8303FFF7D4FD013647F8048FA0E753 +:10EAF000232903F1FF3E02F1FF3948D0302954D0D9 +:10EB00001829CAD1BEF1050F28BF0523B9F1050F99 +:10EB100003F1FF3328BF052203EB8303013A1344BB +:10EB2000334A52F8233020E0591E022902F1FF3106 +:10EB300028BF0223022928BF022202EB43022D4BE9 +:10EB4000033A53F8223010E0591E032902F1FF3135 +:10EB500028BF0323032903F1FF3328BF032203EB5C +:10EB60004303013A134458F8233001330135236538 +:10EB70006EE7591E042902F1FF3128BF042304293E +:10EB800028BF042202EB83021B4B053AD9E7BEF1F2 +:10EB9000060F28BF0623B9F1060F28BF0622013B46 +:10EBA000013A0CFB0322154BCBE7BEF1070F28BF40 +:10EBB0000723B9F1070F03F1FF3328BF0722C3EB87 +:10EBC000C303013A134457F82330CEE70123CDE7BE +:10EBD00051DC0008DDDA000845DE0008B1DD000880 +:10EBE000BDE00008ADE3000830820308C87F0308D9 +:10EBF0003C810308C8800308FC800308A081030847 +:10EC0000D8800308F8B54368D822012105461B685F +:10EC10009847174BC5F8D00104460360D5F8E0309B +:10EC200043B9036503644365436483658364C365D3 +:10EC3000C364F8BD6A6A01216B6828461202002687 +:10EC40001B6898470746C5F8A0006B6A07EB0620CB +:10EC5000B34205DC0023C4E90B33C4E90D33E8E714 +:10EC60004FF48072FF21013625F0A8FEEDE700BFCA +:10EC700069E80008D0F8C831014A1A60704700BF3F +:10EC80003DEE000838B50A4A0025D0F8C8310446E0 +:10EC90001A600122C3E904559A6103681B69984709 +:10ECA000D4F8CC3120461B689847C4F8A05038BD32 +:10ECB0003DEE0008D0F85021012A2DE9F047044626 +:10ECC00000F5A87635D1D0F85431D969C0F864116F +:10ECD000196AC0F86811586A1A64C3E91102D86841 +:10ECE000B1FBF0F500FB1511002908BF0146C3E98F +:10ECF0000E22D9640023C4F86C21C4F87031B146E7 +:10ED000000274FF0360AD4F850319F4271DBD4F817 +:10ED1000D03120461B689847D4F8C03120461B6884 +:10ED20009847D4F8C021D4F8C83152681A60BDE8B9 +:10ED3000F087531E032B07D903681B21C3E9051273 +:10ED40000422DA611B689847D4F838310025D4F8DA +:10ED5000A811B046E0694FF00E09594309F09AFD39 +:10ED6000D4F83C31D4F8A811C4F864015943206A9E +:10ED700009F090FDC4F86C51C4F86801D4F8503122 +:10ED80009D42BCDA58F8043F99685A6AD8684A43E9 +:10ED900000FB01F75A64DA699963D8631F64B2FB18 +:10EDA000F1FC01FB1C22002A08BF0A469A641A6A79 +:10EDB000B2FBF0F100FB1122002A08BF0246DA6420 +:10EDC000D4F86C313B440A2B05DD23682046C3F898 +:10EDD00014901B689847002F01DC0135CEE7D4F86A +:10EDE0006C31013F5A1C5C33C4F86C2144F8235049 +:10EDF000F1E759F8046F336DEBB93269032A02F178 +:10EE0000280503D804EB85035B682BB923682046EB +:10EE1000C3E905A21B689847636884220121204644 +:10EE20001B6804EB8505984780468422696825F0B5 +:10EE3000A0FEC6F85080013765E700002DE9F84FC5 +:10EE4000D0F8C86104467369EBB94FF00109B04DC1 +:10EE5000D4F8CC3120465B6898470128074616D085 +:10EE6000022811D101237361B369002B00F0748172 +:10EE7000D4F8CC311B6933B123683D2220465A6156 +:10EE80001B68984700E002273846BDE8F88FB36951 +:10EE9000002B00F05081012B40F0D880226A4FF601 +:10EEA000DC739A4202DCE2699A4208DD23682A2177 +:10EEB0004FF6DC722046C3E905121B689847D4F868 +:10EEC000D420082A06D0236810212046C3E9051261 +:10EED0001B689847626A0A2A08DD23681B212046BE +:10EEE000C3E905120A22DA611B689847D4F8D88072 +:10EEF0004FF0000A4FF0130BC4E94E99636A9A452C +:10EF00000DDBD4F8DC302BB9D4F8E03083B3D4F87F +:10EF100050316BB30823C4E96A353F2371E0D8F858 +:10EF20000830013B032B04D8D8F80C30013B032BED +:10EF300005D923682046C3F814B01B689847D8F851 +:10EF400008300AF1010AD4F8382108F158089A4229 +:10EF5000ACBFC4F83821C4F83831D4F83C2158F893 +:10EF60004C3C9A42ACBFC4F83C21C4F83C31C5E7E4 +:10EF7000D4F89C31502B00F08A802BDC182B78D0F1 +:10EF80001DDC082B70D013DCBBB3032B65D02268CB +:10EF9000112120465161D4F89811C2E90613D4F822 +:10EFA000A0311362D4F8A4315362136898472AE061 +:10EFB0000F2BECD10422C4F8A821564A51E0302B83 +:10EFC0005CD03F2B5FD0232BE1D10622C4F8A821CF +:10EFD000514A46E0A82B60D007DC782B59D08F2B04 +:10EFE00059D0632BD3D10A2395E7E02B57D0FF2BC1 +:10EFF00057D0C32BCBD10E238DE7C4F8A891C4F80A +:10F00000AC51C4F8B0314FF0000AD4F8A831D4F8AC +:10F01000D880D346C4E95033636AD4F8A8119A451E +:10F0200041DBD4F83C31206A594309F033FC636A70 +:10F03000D4F85021C4F848019A42D4F8C83103DB0F +:10F04000D4F8E020002A71D0C3F81090D4F85031E1 +:10F05000002B6DD10223B361FAE60222C4F8A82185 +:10F060002E4AC4F8AC21CCE70322C4F8A8212C4ACC +:10F07000F7E70522C4F8A8212A4AF2E70722C4F8D4 +:10F08000A821294AEDE70822C4F8A821B7E70923F7 +:10F0900041E70B233FE70C233DE70D233BE70F231D +:10F0A00039E7102337E7C8E90911D8F808000AF151 +:10F0B000010AD4F83821E3695143584309F0EAFBC7 +:10F0C000C8F81C00D8F80C00D4F83C21236AD4F806 +:10F0D000A8115843514309F0DDFBC8F82000D8F8C7 +:10F0E0000800E369D4F83811584309F0D3FBC8F895 +:10F0F0002C00D8F80C00236AD4F83C11584309F0CE +:10F10000C9FBC8F850B0C8E90C0908F1580883E7F2 +:10F1100060980308549A0308789B0308A099030891 +:10F12000F0990308D49A0308489C03081A618DE7F4 +:10F130000023B361A8E633692BB923682422204653 +:10F140005A611B689847D4F85031002B3FF480AEC9 +:10F150002046FFF7AFFD97E6D4F89030D4F898201A +:10F160009A427FF790AEC4F898308DE6D0F8A81197 +:10F17000C26A036B4A439A4270B50446C06913D809 +:10F18000012509F087FBD4F8A8112067206A09F04F +:10F1900081FBD4F8D8300022616A6067C4E9505519 +:10F1A000914200F3BF8070BDB2EB430F4FEA4305BD +:10F1B0000BD84000022509F06DFB2067206AD4F8C7 +:10F1C000A811400009F066FBE3E71D44AA420DD8F0 +:10F1D00000EB4000032509F05DFB2067206AD4F8AE +:10F1E000A81100EB400009F055FBD2E7B2EB830F0A +:10F1F0004FEA83050BD88000042509F04BFB2067FC +:10F20000206AD4F8A811800009F044FBC1E71D442E +:10F21000AA420DD800EB8000052509F03BFB2067D2 +:10F22000206AD4F8A81100EB800009F033FBB0E7A6 +:10F23000062505FB03F6B2420AD8684309F02AFB0B +:10F240002067206AD4F8A811684309F023FBA0E7DF +:10F25000C3EBC306DD00B2420DD8C0EBC0000725EA +:10F2600009F018FB2067206AD4F8A811C0EBC00091 +:10F2700009F010FB8DE7AA420BD8C000082509F061 +:10F2800009FB2067206AD4F8A811C00009F002FB2E +:10F290007FE71D44AA420DD800EBC000092509F004 +:10F2A000F9FA2067206AD4F8A81100EBC00009F031 +:10F2B000F1FA6EE70A2505FB03F6B242BDD90B252C +:10F2C00005FB03F6B242B8D90C2505FB03F6B242A2 +:10F2D000B3D90D2505FB03F6B242AED90E2505FBC9 +:10F2E00003F6B242A9D9C3EB03139A424FEA0013C3 +:10F2F0000CD8181A0F2509F0CDFA2067206AD4F827 +:10F30000A811C0EB001009F0C5FA42E71846102515 +:10F3100009F0C0FA2067206AD4F8A811000109F0AA +:10F32000B9FA36E7D4F840010132583343F8340CC7 +:10F33000D4F8440143F8300C32E7000043681C2243 +:10F3400000211B6810B504469847084BC4F8C80153 +:10F350000360074B4360074B8360074BC360002388 +:10F36000C0E904330123836110BD00BF3DEE0008F6 +:10F3700085EC0008B5EC000875EC00082DE9F74FA6 +:10F38000D0F8BC31024649B1022971D0036803228A +:10F390005A611B6803B0BDE8F04F1847D0F8D80198 +:10F3A0008068002861D0D2F844C11F46D2F8D860E6 +:10F3B000526A314800920CF1020247F8040F0192A0 +:10F3C000009A914209DB0022C3E91022DA6400228C +:10F3D000C3E90C2203B0BDE8F08FB06AF268019D6A +:10F3E0004243986B57F8044F50F821E0D86B92FBDA +:10F3F000FCF250F8210002FB05F900254D451CDB0D +:10F4000002FB0CFB6FF001054FEA420A05FB02B557 +:10F4100004EB8B0800EB850904EB8505002400EB69 +:10F420008B00544511DB6FF00300002400FB02E564 +:10F43000A24214DC01315836C2E754F8258040F866 +:10F4400025804EF825800135D8E758F804BB0134F3 +:10F4500049F804BB55F804BB40F804BBE1E7DEF80B +:10F46000000045F824000134E2E7044A5A60AEE7A0 +:10F47000034A5A60AEE700BFDDF4000885F40008D7 +:10F48000D1F600082DE9F043D0F8BC4198460E466D +:10F4900087B0236B0546174604F1080143B9D0F83D +:10F4A000C0310591DB689847A8B101230599236312 +:10F4B000D5F8449104F13402D5F8C43128460096B9 +:10F4C000CDE901785E684B46B047636B4B4524BF7E +:10F4D0000023C4E90C3307B0BDE8F0832DE9F04FF9 +:10F4E000D0F8BC4198468BB00546236B8946174639 +:10F4F00073B9236CD0F8C0210E33D26854F82310AE +:10F50000904700285AD001232363E36C0133E3645E +:10F51000636C012B11D0022B36D0002B4ED1D5F8C5 +:10F5200044C10026E26C0CF1FF336663A364D5F896 +:10F5300048319A4245D001236364236C04F13402BC +:10F54000284603F10E01D5F8C431CDF80090CDE97D +:10F5500001785E6854F82110A36CB047626BA36C0D +:10F560009A422BD3E36CD5F84401012B63D0236C72 +:10F5700083F00103236400232363431C023063638D +:10F580000223A064636419E0236C04F1340228466A +:10F5900003F10E01D5F8C431CDF80090CDE9017822 +:10F5A0005E6854F82110A36CB047626BA36C9A425A +:10F5B00004D3002363643B684345B0D30BB0BDE87C +:10F5C000F08F6A6A6FF0404ED5F8BC11D5F8D8308C +:10F5D0000692069A9642AEDAD8689A6A4243186B47 +:10F5E000B0FBF2FB02FB1B0092FBFCFA002808BFF9 +:10F5F000104626B9421E92FBFAF201328A640A6C66 +:10F6000070444FEA4A0A0E3251F8222052F826205E +:10F6100002EB800B00205A460432059005985045B5 +:10F6200002DB01365833D4E7DBF8000042F8040B64 +:10F6300005980130F1E7D5F8D830D5F8BC810593AD +:10F640006B6A00250893431C0793089B9D428EDA42 +:10F65000059BDA689B6A5A43D8F8383092FBF0F27F +:10F6600053F82570D8F83C3053F825C0079B534316 +:10F6700007EB83010CEB830A13440691002107EB8F +:10F6800083090CEB83031E466FF0030303FB02FEAA +:10F6900007EB0E03E64409938A4204DC059B01351F +:10F6A00058330593D1E7069B53F804BB0693099B97 +:10F6B00043F821B05AF804BB4EF821B057F8213076 +:10F6C00049F8043B5CF82130013146F8043BE3E79C +:10F6D0001FB5D0F8C4410091CDE90123002364682F +:10F6E0001A461946A04704B010BD00002DE9F84F96 +:10F6F00043680D46502201211B68044698473A4B47 +:10F70000C4F8BC01064603602DB1236803222046DD +:10F710005A611B689847D4F8D831D4F844519B6893 +:10F720001BB3012D05DC2368302220465A611B687B +:10F730009847626A012163682046D200D4F8BC7100 +:10F740001B684FF00008D4F844919847636AB86387 +:10F7500009F1040900EB8300D4F8D850F863626A19 +:10F76000D4F8443190450ADB9D1CD4F8D870043697 +:10F770004FF00008636A43451DDCBDE8F88FA96AB5 +:10F780002046EA6858354A43012192FBF3FB63683F +:10F790000BFB09FA1B684FEACA029847BB6B00EBE8 +:10F7A0008B0043F8280000EB8A00FB6B43F828002D +:10F7B00008F10108D3E7BA6A08F10108FB68583775 +:10F7C00057F8341C5343D4F84421606893FBF2F398 +:10F7D00057F83C2C6B43D0F8089020464A4301214F +:10F7E000C84746F8040FC5E77DF300082DE9F04748 +:10F7F00086690446D6E900C5C0E93712C0F8E4308E +:10F800003DB9F368984710B90020BDE8F087D6E904 +:10F8100000C56B1E9CF8007000F088800CF101059B +:10F82000013B95F8008000F08A8001352A78013B81 +:10F83000C4F8D42000F08C8001352A78013B4FEACF +:10F840000222226200F08D8001352978013B226A74 +:10F850000A44226200F08E8001352A78013B4FEA8B +:10F860000222E26100F08F8001352978013BE269D4 +:10F870000A44E26100F09080013503F1FF3915F888 +:10F88000013BD4F8B421012163622046236808EBD0 +:10F8900007289A61A8F10808E269DA61226A1A6207 +:10F8A000626A5A6266225A615B689847D4F8CC3122 +:10F8B0001B692BB123683C2220465A611B6898477C +:10F8C000236A23B1E36913B1636A002B05DC236863 +:10F8D000212220465A611B689847636A03EB430361 +:10F8E000434505D023680C2220465A611B6898477F +:10F8F000D4F8D8304BB9626A5821636820464A432D +:10F9000001211B689847C4F8D800D4F8D8704FF08C +:10F9100000084FF0670A5837636A434545DCD4F85E +:10F92000CC3101201861C6E900596EE7F368204622 +:10F93000984700283FF468AFD6E9005370E7F368B2 +:10F940002046984700283FF45FAFD6E900536DE7A3 +:10F95000F3682046984700283FF456AFD6E9005395 +:10F960006BE7F3682046984700283FF44DAFD6E98F +:10F9700000536AE7F3682046984700283FF444AFF5 +:10F98000D6E9005369E7F3682046984700283FF41A +:10F990003BAFD6E9005368E7F36820469847002854 +:10F9A0003FF432AFD6E9005367E747F8548CB9F11A +:10F9B000000F07D1F3682046984700283FF424AF92 +:10F9C000D6E900592B7847F8583CB9F1010329D002 +:10F9D00001352A78013B4FEA221102F00F0247F865 +:10F9E000501C47F84C2C26D0013503F1FF3915F88F +:10F9F000013B57F8582C012147F8483C2046236822 +:10FA000008F1010858379A6157F8A82CDA6157F8BD +:10FA1000A42C1A6257F8A02CC3F814A05A625B6891 +:10FA2000984779E7F3682046984700283FF4ECAE02 +:10FA3000D6E90053CDE7F3682046984700283FF405 +:10FA4000E3AED6E90053D0E72DE9F0410D2A0C468C +:10FA5000016802EB030605464B686DD922784A2AF5 +:10FA600040F08F806278462A40F08B80A278492A45 +:10FA70006AD1E278462A67D12279002A64D101222C +:10FA8000C0F81C21627980F82021012A94F806C070 +:10FA900080F821C1E77980F8227194F808E0677A4C +:10FAA00007EB0E27A0F8247194F80AE0E77A07EB39 +:10FAB0000E27A0F8267107D07A27C1F81CC0C1E92B +:10FAC00005724FF0FF3198472B68012195F82021EE +:10FAD00028469A6195F82121DA61B5F824211A6245 +:10FAE000B5F826215A6295F822219A6259225A6164 +:10FAF0005B689847237B627B13430AD02B685C22A8 +:10FB0000012128465A61227B9A61627BDA615B6837 +:10FB10009847237B0E3E627B13FB02F303EB430308 +:10FB2000B34230D02B685A22C3E905265B682846C9 +:10FB30000121BDE8F0411847052A22D922784A2A36 +:10FB40001FD16278462A1CD1A278582A19D1E278AE +:10FB5000582A16D12279A2B96279112A07D0132A1C +:10FB600007D0102A07D16E22C1E90526DFE76F22F0 +:10FB7000FAE77022F8E75B224A616279C1E906265A +:10FB8000D5E74F22F0E7BDE8F0812DE9F0410B2ADF +:10FB90000468054666682BD90F78412F28D14F7825 +:10FBA000642F25D18F786F2F22D1CF78622F1FD16C +:10FBB0000F79652F1CD1CB790A7A4F7A02EB032299 +:10FBC0008B7A91F805C003EB0723CF7A8979C4E9D2 +:10FBD000083701EB0C214E23C4E9061263610121B1 +:10FBE000B047012385F82C71C5F82831BDE8F081B4 +:10FBF00050211A442846334661610121A261BDE8C3 +:10FC0000F04118472DE9FF4786698046D6E900474D +:10FC100047B9F368984718B9002004B0BDE8F087E9 +:10FC2000D6E9004794F80090013F4FEA09292ED009 +:10FC3000013414F8015B013F4D44023D0D2D2EDCD3 +:10FC4000002D2FDDA9464FF0000A37B9F368404672 +:10FC500098470028E0D0D6E9004714F8013B013F5F +:10FC60000DF80A300AF1010AD145EED1D8F8B421D5 +:10FC7000A5EB0905E02A18D0EE2A28D0D8F80030E4 +:10FC800046214046C3E905121B68984713E0F36814 +:10FC9000404698470028BFD0D6E90047C9E74FF053 +:10FCA0000E09D0E74FF00009E0E72B464A466946C7 +:10FCB0004046FFF7C9FE002DC6E9004705DDD8F82C +:10FCC0001830294640461B6998470120A5E72B4676 +:10FCD0004A4669464046FFF758FFECE72DE9F843EE +:10FCE00084690746D4E900533BB9E368984710B9E3 +:10FCF0000020BDE8F883D4E9005395F80090B3F1F3 +:10FD000001084FEA09291CD0013515F8016B5D2364 +:10FD10003A6801214E4438465361023ED7F8B43167 +:10FD2000C2E906365368984708F1FF33002E256074 +:10FD3000636004DDBB69314638461B699847012082 +:10FD4000D7E7E368384698470028D1D0D4E900586F +:10FD5000DBE72DE9F04186698046D6E9004787B99F +:10FD6000F3684046984750B90020BDE8F081D8F8C4 +:10FD7000CC21936901339361C6E90047EFE7D6E9E7 +:10FD8000004714F8013B013FFF2BF0D137B9F3686E +:10FD9000404698470028E7D0D6E9004714F8015BB1 +:10FDA000013FFF2DF2D0D8F8CC2193690DB9023371 +:10FDB000E1E773B1D8F8002077214046D561C2E968 +:10FDC000051353684FF0FF319847D8F8CC31002223 +:10FDD0009A61C8F8B4510120C6E90047C5E7D0F8D8 +:10FDE000B43110B50446E3B1D4F8CC31D4F8B42121 +:10FDF000596901F1D0039A4219D12368642220463F +:10FE0000C3E905215B68032198470023C4F8B43196 +:10FE1000D4F8CC2101205369013303F00703536167 +:10FE200004E0FFF796FF0028DED1002010BDA36993 +:10FE300020465B6998470028EAD1F6E70023D0F80E +:10FE4000CC21C0F8D830C0F89030C0F8B4319361FC +:10FE5000C2F8A430C2E9033370472DE9F04F876937 +:10FE6000C9B00546D7E9004646B9FB68984718B9B6 +:10FE7000002049B0BDE8F08FD7E9004694F8008033 +:10FE8000013E4FEA082818D0013414F8019B013EC6 +:10FE90000DF10C0BC144A9F10209B9F1100F14DCEA +:10FEA000B9F1000F05D02B680C2228465A611B6857 +:10FEB00098470120C7E90046DBE7FB6828469847DA +:10FEC0000028D5D0D7E90046DFE736B9FA682846DA +:10FED00090470028CCD0D7E9004614F8018B522176 +:10FEE0002A682846CDF80080013E4FF0000AC2E99A +:10FEF0000518526801219047012246B9F968284641 +:10FF0000019288470028B3D0019AD7E9004614F837 +:10FF1000011B013E02F80B1001328A44112AECD178 +:10FF20002A68A9F111039BF801104FF058092846DF +:10FF3000019391619BF80210C2F81490D1619BF873 +:10FF4000031011629BF8041051629BF80510916236 +:10FF50009BF80610D1629BF8071011639BF80810FC +:10FF600051630221526890472A689BF8091028467D +:10FF7000C2F8149091619BF80A10D1619BF80B10A4 +:10FF800011629BF80C1051629BF80D1091629BF866 +:10FF90000E10D1629BF80F1011639BF81010516383 +:10FFA000022152689047BAF5807F02DC019B5345DD +:10FFB00005DA2A68092128465161126890474FF0F6 +:10FFC000000908A9D1453FD118F0100F019BA3EB00 +:10FFD000090917BFA8F1100308F12D0808F121083D +:10FFE0000093009B05EB8808032B06D92A681F2184 +:10FFF0002846C2E9051312689047D8F8002022B9B4 +:020000040801F1 +:100000002846FBF7B5FBC8F800000022DE460DF1DC +:100010001C0A8BF80020D8F80020F4460832BCE80F +:100020000300D44542F8080C42F8041CE646F4D11B +:100030009CF8001011704FF48072D8F8000008A9E5 +:10004000113024F096FD28E746B9FA682846904713 +:1000500000283FF40DAF08A9D7E9004614F8012B9A +:10006000013E09F8012009F10109ABE72DE9F04F44 +:10007000044685B0D4F8B4315BBBD4F8CC31DB682E +:10008000002B7BD1A769D7E9005333B9FB68204621 +:100090009847002877D0D7E90053013B95F80080B6 +:1000A00065D00135B8F1FF0F03F1FF3615F8019B5C +:1000B00002D1B9F1D80F08D0236837222046C3F8FF +:1000C0001C90C3E905281B689847C4F8B491C7E998 +:1000D0000056D4F8B431012B00F0BA83A3F1C0026A +:1000E0003E2A00F2C2833E2A00F2BF83DFE812F00C +:1000F0008B0094009700A0003202A000A000A00096 +:10010000A0009B009D00A000B901A000A000A000DD +:10011000B003B003B003B003B003B003B003B00347 +:100120004D00AD01A8003602B9035203BD03BD0363 +:10013000A403A403A403A403A403A403A403A40387 +:10014000A403A403A403A403A403A403A403A40377 +:10015000BD03BD03BD03BD03BD03BD03BD03BD039F +:10016000BD03BD03BD03BD03BD03BD03AC03FB68FD +:100170002046984738B1D7E9005393E72046FFF768 +:10018000E8FD0028A5D10020EAE0236868220121CB +:1001900020465A615B689847D4F8CC31DB682BB1B4 +:1001A00023683F2220465A611B689847102200218D +:1001B00004F1E80024F002FC1022012104F1F8000F +:1001C00024F0FCFB1022052104F5847024F0F6FBDA +:1001D00040F201120023A4F820214FF0011284F80C +:1001E0002830C4F8303184F8223184F82C31C4E945 +:1001F0004923C4E946330122D4F8CC31DA60002324 +:10020000C4F8B43136E7002301211A462046FFF72F +:10021000EDFA0028F3D1B6E70023002201E0002325 +:1002200001220021F2E70123F7E701231A46F8E74C +:1002300022683E212046C2E9051313689847DEE78D +:10024000D4F8CC31A7691B69D7E900562BB92368CC +:10025000402220465A611B68984736B9FB68204601 +:10026000984700288FD0D7E9005695F80090013EB6 +:100270004FEA092977D0013595F80080013EC8443E +:100280007AD0013515F8019B6922236801212046A7 +:10029000013EC3E905295B68984709F10303B8EB00 +:1002A000430F08D1B9F1040F05DCB9F1000F08D1F3 +:1002B000D4F8E0302BB923680C2220465A611B6821 +:1002C000984704F5A8734FF0000AC4F850910193C1 +:1002D000D1455ADC3EB9FB682046984700283FF4D8 +:1002E00052AFD7E900562B78013EC4F8983100F0A0 +:1002F0009A8001352B78013EC4F89C3100F09C8037 +:10030000013515F8013B01212046013E1A1103F089 +:100310000F03C4F8A021C4F8A431D4F898212368AD +:100320009A61D4F89C21DA61D4F8A0211A62D4F839 +:10033000A4215A626B225A615B689847D4F8CC3189 +:1003400000225A61B9F1000F04D0D4F89030013383 +:10035000C4F8903000230120C7E90056C4F8B43136 +:1003600005B0BDE8F08FFB682046984700283FF4B1 +:100370000AAFD7E900567FE7FB6820469847002878 +:100380003FF401AFD7E900567CE73EB9FB68204651 +:10039000984700283FF4F7AED7E90056013E95F89C +:1003A00000B02FD00135013E15F8013BD4F8D880BC +:1003B0000020626A90422EDB2168204602930423CB +:1003C000C1E9053B09688847029B019A191103F0AE +:1003D0000F03204642F8048F0AF1010AC8F81410EE +:1003E0002168C8F81830C1F818B0D8F81430019254 +:1003F000CB61D8F818300B626A234B614B6801213E +:10040000984765E7FB682046984700283FF4BBAE55 +:10041000D7E90056C7E7D8F800108B45D5D0013092 +:1004200008F15808C6E7FB682046984700283FF4C3 +:10043000AAAED7E900565DE7FB682046984700283A +:100440003FF4A1AED7E900565BE723685722204668 +:1004500001215A615B68984700230220C4F8B43137 +:100460007EE7A769D7E900563EB9FB682046984762 +:1004700000283FF488AED7E9005695F80080013E89 +:100480004FEA082815D0013515F8019B013E4FF0C1 +:100490001D0BC144A9F10209B9F1000F12DC05D00E +:1004A00023680C2220465A611B6898473D607E6095 +:1004B000A5E6FB682046984700283FF464AED7E9DC +:1004C0000056E1E73EB9FB682046984700283FF414 +:1004D0005AAED7E90056013E95F800801FD001358D +:1004E0002268512315F801AB01212046013EC2F8D4 +:1004F0001CA0A9F10209C2E9053852689047B8F179 +:100500001F0F05D922682046C2E905B81268904736 +:10051000B8F10F0FA0440BDD88F8F8A0BCE7FB682A +:100520002046984700283FF42EAED7E90056D7E77B +:100530000AF00F014FEA1A12914288F8E81088F881 +:10054000F820A9D922681E2120461368C2E9051A9D +:100550009847A1E72046FFF780FC5AE6A669D6E94E +:1005600000533BB9F3682046984700283FF40BAE90 +:10057000D6E900532F78013B4FEA072714D0013505 +:1005800015F8018B03F1FF3AB844A8F10208B8F15D +:10059000000F12DC05D022680C2120465161126840 +:1005A0009047C6E9005A2AE6F36820469847002893 +:1005B0003FF4E9ADD6E90053E2E708F1FF38BAF1BC +:1005C000000F07D1F3682046984700283FF4DBADC1 +:1005D000D6E9005A15F8019B5321226820464FEABC +:1005E000291309F00F070AF1FF3AD3610193C2E919 +:1005F000051752680121904719F00C0F06D02268A8 +:1006000020212046C2E905171268904704EB8707AE +:10061000D7F8A42022B92046FBF7A0F8C7F8A40019 +:10062000019BD7F8A4B0002B57D0B8F17F0F6CDC3A +:10063000ABF102020BF17E01012022F8020F914280 +:10064000FBD14FEA6809B9F1190F62D053DCB9F157 +:10065000090F60D0B9F1100F5FD0854F854AB9F10D +:10066000040F18BF174607EB89030293029BBB4296 +:1006700057D12268926E012A26DD0BF180035F2795 +:10068000BBF80010204622680BF1100B0293916119 +:100690003BF80E1CD1613BF80C1C11623BF80A1CA4 +:1006A00051623BF8081C91623BF8061CD1623BF892 +:1006B000041C11633BF8021C57615163022152680C +:1006C0009047029B9B45DBD1019BA8EB0908002BBF +:1006D0003FF45DAFA8EB090859E7B8F13F0F14DC10 +:1006E000ABF102020BF17E01012022F8020F9142D0 +:1006F000FBD1C146A7E7B9F1240F10D05D4F5E4B87 +:10070000B9F1310F08BF1F46ADE74FF04009594F0F +:10071000A9E75A4FA7E75A4FA5E75A4FA3E75A4F01 +:10072000A1E7019B33B3BAF1000F07D1F36820466C +:10073000984700283FF427ADD6E9005A2A78BAF145 +:1007400001034FEA02220AD0013515F8011B03F11B +:10075000FF3A0A4457F8041B2BF8112086E7F36888 +:1007600020460392984700283FF40DAD039AD6E93E +:100770000053EAE7BAF1000F07D1F3682046984723 +:1007800000283FF400ADD6E9005A0AF1FF3A15F807 +:10079000012BDFE7A769D7E900533BB9FB68204687 +:1007A000984700283FF4EFACD7E9005395F8008054 +:1007B000013B4FEA082824D001352A785E1E4244C6 +:1007C000042A05D023680C2220465A611B689847EA +:1007D00006B3013595F80090013E4FEA092922D071 +:1007E000013515F8018B542223680121C8442046A5 +:1007F000013EC3E905285B689847C4F818813D604D +:1008000055E6FB682046984700283FF4BCACD7E982 +:100810000053D2E7FB682046984700283FF4B3AC6A +:10082000D7E90056D6E7FB682046984700283FF4F2 +:10083000AAACD7E90056D4E7D4F8CC21D83B52F87B +:10084000233020469847E4E4D4F8CC31DB69F8E75C +:1008500022685E212046C2E90513536801219847AA +:10086000CDE42046FFF73AFAD3E422684621E1E4DA +:10087000A099030860980308489C0308D49A0308C9 +:10088000F0990308549A0308789B03082DE9F04176 +:100890000F460368D0F8B4517C2207F10108D961F2 +:1008A0004FF0FF31064608F0070808F1D008C3E909 +:1008B00005255B689847BF2D2EDDA5F1D003072BDA +:1008C00028D8454526D0BB1C03F00703D0339D42F2 +:1008D00020D07B1E03F00703D0339D421CD0BC1EEA +:1008E00004F00704D034A54214BF01240224336865 +:1008F000632204213046DC61C3E905255B68984723 +:10090000022C0BD0032C02D00023C6F8B4310120F6 +:10091000BDE8F0810324EAE70224E8E73046FFF768 +:1009200018FA0028F4D0D6F8B451C4E738B54368B3 +:10093000AC22002105461B689847114BC5F8CC0135 +:100940000446036000F15C010E4B0F4A43600F4BFD +:10095000C26183600023036600F11C0343F8042F87 +:100960009942FBD104F164004022002124F026F8D2 +:10097000074B28462362A365BDE83840FFF75EBAFF +:100980003DFE00086D000108DDFC0008DFFD0008E9 +:1009900005FC000838B5D0F8B8510446AB68002B08 +:1009A0002AD00021D0F8E031A9601B689847D4F81C +:1009B000C431022120461B689847D4F8BC3102217B +:1009C0001B6820469847A268AAB1A968EB6800296D +:1009D000D36014BF022101210B44216C136151B17A +:1009E000D4F8C811496931B9E16E002914BF022158 +:1009F00001210B44136138BD436D6BB1D0F88830D1 +:100A000053B9C36D002B37D0C36E002B34D0AB6904 +:100A1000C0F8E0310123AB60D4F8D43120461B6824 +:100A20009847D4F8C03120469B689847636C002BE8 +:100A3000C9D12B6923B9D4F8DC3120461B6898470B +:100A4000D4F8D83120461B689847636D2BB1D4F891 +:100A5000E0312046A9681B689847AA682046D4F868 +:100A6000C431002A1B6814BF032100219847D4F821 +:100A7000BC3100211B68A4E7636E1BB16B69C4F82D +:100A8000E031C9E723682F2220465A611B68984746 +:100A9000C2E7426D10B5D0F8B8411AB1D0F8E031D4 +:100AA0009B689847E3680133E36010BDC36C02465E +:100AB00010B5002B42D1D0F83001002840D192F877 +:100AC0002830032B39D1536A032B36D192F82930C1 +:100AD000022B32D1936F032B2FD1D2F8D8309968E3 +:100AE00002292AD1196E012927D1D3F8B81001297A +:100AF00023D1D968022920DC596E01291DD1D3F8F0 +:100B0000BC10012919D1D2F84041596AA14214D12F +:100B1000DC6FA14211D1D3F8D440A1420DD1D2F85B +:100B200044119A6A8A4208D1D3F880108A4204D1CB +:100B3000D3F8D800831A5842584110BD0020FCE772 +:100B40001846FAE74269CA2A2DE9F047044605D05B +:100B500003681521C3E905121B6898472046002643 +:100B6000FEF704FBD4F8D850D4F824C02B46B44583 +:100B70007ADDE26C0121D4F84081002A14BF0827F5 +:100B8000042700E0490001FB08F0B8420ADC9A683B +:100B9000D4F838E14A4352009EFBF2F902FB19E215 +:100BA000002AEFD058624FF00108D4F8449108FBB6 +:100BB00009F1B9420ADCDA68D4F83CE102FB08F238 +:100BC00052009EFBF2FA02FB1AE24AB1B0EB410F6F +:100BD00099624FEA410206DD5A6201365833C6E790 +:100BE0004FEA4808E3E74200B1EB400FC8BF9A6202 +:100BF000F3E76B6A0136A8685835D4F83821D4F881 +:100C0000A8115843E3695143584307F043FE55F890 +:100C1000303C45F82C0C55F84C0CD4F83C21D4F859 +:100C2000A8115843236A5143584307F033FE45F84F +:100C3000280C636AB342DCDC94F82920032A15D817 +:100C4000012A18D800D11346626D2046A367002AF6 +:100C500018BF0123E367FFF729FF70B1D4F83C31D7 +:100C6000C4F88030BDE8F0870026E2E7043A012AA4 +:100C700098BF0423E8E70323E6E70123F0E7000039 +:100C8000F8B543681C22012104461B6800269847DA +:100C90006D4BC4F8B801054603606C4B8660436039 +:100CA0002046FFF74FFF63684FF4B06201211B68D5 +:100CB0002046984700F5807307463146C4F84C310A +:100CC0004FF4807223F07AFE07F1FF03314603F8F8 +:100CD000011F0131B1F5807FF9D14FF4C072FF21BE +:100CE00007F50070002623F069FE4FF4C072002162 +:100CF00007F5607023F062FE8022D4F84C1107F5EE +:100D0000A06023F036FF2046EE60FFF7CFFE636D54 +:100D1000AE61C5E90406B3B1226CA2B1636C002BCD +:100D200066D1A36F032B4FF0010368D063660023E5 +:100D3000C4E91A33C4F88830204606F0B9FED4F866 +:100D4000E0316B6162E0C4E91966E666002BE5D12B +:100D5000636C4BB92B692046002B69D000F01EFA5A +:100D6000E16E204600F09AFB2046FCF7BDFDD4F86A +:100D7000E4302046002B61D0FBF72CFCD4F8C831BE +:100D80001B69002B5DD1216C003918BF0121204661 +:100D9000FCF716F9616C11B92046FEF7A7FC6368F1 +:100DA00020469B699847D4F8C83120469B689847ED +:100DB000A268E2B1236CD3B9D4F8C8311B69B3B1CE +:100DC000D4F8E010636A11B103EB43030233D4F8A3 +:100DD000481100205943E36E5060834214BF03233F +:100DE00002231361EB680133C2E90210EB60F8BD26 +:100DF0002368302220465A611B68984791E7D4F84F +:100E000088207AB1A366636E002B95D1E36E13B987 +:100E1000A36E002B9CD0204607F0D0FCD4F8E03124 +:100E2000AB6195E7E26D0AB1E366ECE7636683E7E1 +:100E3000FCF7EAFA204600F04FFC91E7FDF7E2FEEE +:100E40009CE70121A3E700BF95090108930A010867 +:100E5000D0F8D83100225A62426FDA62704770B51A +:100E6000059D1446D0F8D8312A68DE68049B03EB50 +:100E700082032268B0472B6801332B60236801335B +:100E8000236070BD2DE9F04FD0F8D85189B0D3F868 +:100E900000C02E69D5F81C80634601966E69D0F8B3 +:100EA0004C410296AE690D68039655F822500495A0 +:100EB0004D68896855F8225051F82220049905920E +:100EC000026FDDF814904FEA520E05EB52020692C3 +:100ED000069A06330231954228D10623026F03FB9E +:100EE0000EF3D2070CEB03011DD5059A019F12F8F2 +:100EF0000E602A78039D58F8220055F8265057F8BE +:100F000026602844029D55F8225004EB2040049AA4 +:100F100012F81E20A7182C44BE5D8E70805C4870AD +:100F2000A25C0CF8032009B0BDE8F08F15F801AB06 +:100F300019F8012B019E56F8227058F82A602744B0 +:100F40000796039E56F82220079E3244029E56F8CA +:100F50002A6004EB224211F802AC264417F80AB0CA +:100F600003F804BC12F80AB003F805BC16F80AA08E +:100F700003F806AC11F801AC17F80A7003F8017C0D +:100F800012F80A2003F8022C16F80A2003F8032CA2 +:100F90009EE72DE9F04FD0F8D8518DB0D0F84C41F4 +:100FA0002E69D5F81CA004966E690596AE690D6889 +:100FB000069655F8326005EBC2056D68B646079691 +:100FC00008954D68896855F8228051F82220016FF4 +:100FD00009924F081A6808EB51015B68DDF820C0E0 +:100FE0000A9109990192029303910A9906320633F4 +:100FF0000EF1020E88450CF1020C39D10623019A3C +:10100000006F7B43C00702EB0301029A1A442CD500 +:101010000998049DC05D98F8006055F820E0069D91 +:101020005AF826C055F82000059D604455F826C0A2 +:10103000079D04EB204015F817600EEB040564448F +:1010400015F806E081F802E010F806E081F801E00A +:10105000A15D019EF154089911F817106D5C95700F +:10106000405C5070625C0299CA540DB0BDE8F08FCC +:10107000039D18F8019B15F8011B0395049D55F875 +:1010800021605AF8295026440B95069D55F82110E9 +:101090000B9D2944059D55F8295004EB21411EF86C +:1010A000029C254416F809B002F804BC11F809B0F6 +:1010B00002F805BC15F8099002F8069C1EF8019C80 +:1010C00016F809B002F801BC11F809B002F802BC28 +:1010D00015F8099002F8039C1CF8029C16F809B058 +:1010E00003F804BC11F809B003F805BC15F8099021 +:1010F00003F8069C1CF8019C16F8096003F8016CC3 +:1011000011F8091003F8021C15F8091003F8031C64 +:101110006BE72DE9FF41D0F8D8411646DDE90AC852 +:10112000656AD8F800300CEB8302DDB1A36A0125B3 +:1011300004F12000019300230095194607F0B7FB46 +:1011400000236362D8F800302B44C8F80030E36A0B +:101150005B1BE362636A13B933680133336004B025 +:10116000BDE8F081E76A0C9D022FA5EB03055CF852 +:10117000233028BF02270293BD4228BF3D46E768BF +:10118000022D17BF236A5368039301230CBF0393F7 +:10119000636202AB3268B847D4E70000436830228C +:1011A00001211B682DE9F04104469847374B05465D +:1011B000C4F8D801226F03600020A36FA8605A43CF +:1011C000D4F83C31022BAA625AD1314B012120467E +:1011D0006B60304BEB6063685B68984763684FF403 +:1011E0008062286201211B682046D4F8D8519847B4 +:1011F00063684FF48062286101211B68204698478C +:10120000636868614FF480621B6801212046DFF843 +:101210009C8098476368A86101211B6820464FF4B1 +:1012200080621D4F9847AC69E8610023DFF880E0D9 +:101230001A49D5E904C61A4D08FB03E212144CF80A +:10124000232007FB03F2A2F56202A2F5A2421214C8 +:1012500046F8232005FB03F202F5B60202F5D2425E +:1012600044F8232001FB03F202F5321202F550622A +:1012700040F823200133B3F5807FDDD1BDE8F08154 +:10128000084B6B60084BEB60A8E700BF510E0108EC +:1012900013110108930F0108A2C50100E6A7FFFF83 +:1012A0002E49FFFF5F0E0108850E0108E966010067 +:1012B000800B4DFF022937B5D0F8C44123D0032954 +:1012C00019D0002928D1426D82B1164A6260E268C5 +:1012D0003AB9436801210091DD69A1682369A847F3 +:1012E000E0600023C4E9053303B030BDD0F8D83145 +:1012F0005B686360F5E7A2681AB9036859611B6807 +:101300009847094BF5E7A26822B9036803225A619E +:101310001B689847054BECE7036803225A611B687A +:101320009847DEE731130108911301081F140108E3 +:101330002DE9F04188B0D0F8C48104460F9D109E7D +:101340002F68F61B00270797D0F8D8710597D8F8B3 +:101350001070BE4294BF0296029707AE0196D8F86D +:101360000C600096059E7668B0472968D4F8E03195 +:1013700020460E9A5E6802EB8102079BD8F80C109B +:10138000B0472B68079A13442B6008B0BDE8F08182 +:101390002DE9F04FD0F8C44185B09A460546A369BF +:1013A0000E469146DDF83C8043B943680122009225 +:1013B000DF69A168D4E90432B847E06022693146A8 +:1013C000A7692846029204F11802D5F8D831019293 +:1013D000E26800924A46D3F804B05346D847A6695B +:1013E000BE4210D9D5F8E031F61BE1680022D3F8EF +:1013F00004902846334601EB8701C847D8F80030EF +:101400003344C8F800302269A369934204D3636966 +:10141000134463610023A36105B0BDE8F08F2DE99B +:10142000FF41D0F8C44106460B9FA3693BB942680F +:101430000093D569A168D4E90432A847E0606369E4 +:10144000756FA169ED1A23693A685B1A0A989D4283 +:1014500028BF1D460C9B9B1A00EB82029D4228BFB1 +:101460001D46E36803930398D6F8E03100EB810151 +:101470003046D3F804802B46C0473B682B443B6082 +:10148000A36922691D449542A56104D3636913448D +:1014900063610023A36104B0BDE8F08143681C22AE +:1014A000F0B51B6885B00F46012104469847154BDF +:1014B0000026C4F8C40105460360636DC0E90266F6 +:1014C000BBB1D4F83C31226F0361A06F6168424325 +:1014D0008FB10F691946606F039207F0E0F92B692D +:1014E0000121039ACDE90003134620463246B8474E +:1014F000A86005B0F0BD8E6820460121B047E860C5 +:10150000F7E700BFB5120108D0F83C21D0F8D83178 +:10151000DA65426F1A6670472DE9F04FD0F8D8416E +:101520001546D0F83C3185B0E26D834688469A4234 +:1015300010DBD0F8D83000264FF0580A039304F19E +:101540003003039A0AFB0621DBF82420B24231DC87 +:101550000023E3650F9B5846109E1B68216EF61A08 +:10156000E26D8E4228BF0E46DBF83C11891A8E428E +:1015700028BF0E46DBF8DC110096D1F804800E99E6 +:1015800001EB830304F10C01C0470F9B0F9A1B680A +:1015900033441360236E9B1B2366E36D1E44DBF80C +:1015A0003C319E42E665A2BF2B6801332B6005B03B +:1015B000BDE8F08F586B03F104092A68243B4243CD +:1015C000986A074658F82600013600EB8202584612 +:1015D000B8474B46B5E71A60704700221A6070475B +:1015E000F0B51F680023D0F83C11994200DCF0BD33 +:1015F00057F82310046F52F823500C44A14201D332 +:101600000133F0E715F8016B01F8026B01F8016C8A +:10161000F4E72DE9F04F05461F68D0F8D80185B0F2 +:101620004B68161F0024034493F8968093F88CA00F +:1016300008F1FF330393D5F83C31A34202DC05B037 +:10164000BDE8F08F57F824302A6F56F804BF03EB3B +:1016500002094B450ED3B8F1010F09DD2B6F3A4655 +:10166000214638460193039B0093631C07F01FF942 +:101670004444E0E7184652461BF8011B23F09EF94C +:1016800003465344E5E72DE9F341054617461E6836 +:1016900000244FF00108D5F83C31A34202DC02B02F +:1016A000BDE8F08156F824302A6F57F814101A4418 +:1016B00093420AD32B6F214632463046CDE9008350 +:1016C000631C023407F0F3F8E5E711F8010B03F8A7 +:1016D000020B03F8010CEBE72DE9F84F4368A02259 +:1016E000012104461B6898473F4BC4F8D8010546C2 +:1016F00003603E4B436000238360D4F830312BB14C +:1017000023681A2220465A611B68984705F10C0687 +:1017100005F18C08C5F1FF25D4F8D870DFF8DC900E +:1017200005F57F05DFF8D8A0743505EB0803626A7C +:101730009A4201DCBDE8F88FB86AFB68D7F808E088 +:101740004343D4F84401D7F824C0D4F8401193FBA4 +:10175000F0F3D4E94EB0B3657A6B32B9244BB3627F +:101760005837043608F10108DFE70CFB0EF292FB54 +:10177000F1F25A4503D1834201D11E4BEFE7BBEB97 +:10178000420F19D1834211D11B4BB3626368D4F865 +:101790003811206FD3F808B007F081F8D4F83C3145 +:1017A000024601212046D8473060D9E7B0EB430F0D +:1017B00002D1C6F828A0E9E79BFBF2F102FB11B2C7 +:1017C0005AB990FBF3F203FB120333B9C6F8289021 +:1017D00088F8001088F80A20D8E7236827222046D6 +:1017E0005A611B689847D1E70915010819150108C6 +:1017F000DB150108D7150108E115010813160108CA +:101800008716010800B50368B3B0DB6869469847DE +:1018100033B05DF804FB0029034610B504680BDA09 +:10182000E26E12B1A26E022A02DDA268184690474B +:10183000E36E0133E36610BDA36E8B42FBDBA3684E +:10184000BDE81040184703680022DA665A61704705 +:10185000034608461A685369002B30B587B01FDD70 +:10186000516F99421CDB116F51F8231011B993612C +:10187000136F19680B4613F8014BFCB9536B0593B2 +:10188000136B0493D36A0393936A0293536A01938D +:10189000136A0093D2E9062322F06EFF07B030BD31 +:1018A000946F002CE3D0D16F9942E0DCD2F88050E5 +:1018B0009D42DCDB591A54F82110D7E7252CDAD1E8 +:1018C0001B78732BDAD1183207B0BDE8304022F014 +:1018D00053BF036810B504469B6898472046BDE88F +:1018E0001040F9F731BF00000A4A0B4902600B4A69 +:1018F00001677E2142600A4A82600A4AC2600A4A3F +:1019000002610022C0E91A224261C0E91D12C0E949 +:101910001F227047D31801084495030817180108BF +:101920000518010851180108471801082DE9F04F62 +:10193000D1F854C0C1B0D0F84C61023A0CF1200A81 +:101940006C469FEDBC5A9FEDBC4ADFEDBC4ADFED13 +:10195000BC3AB2F912E00434B2F92290B2F9328002 +:10196000B2F94270B2F95210B2F96250B2F9720093 +:1019700032F902BFBCEC017A07EE90BA4EEA090BCD +:1019800048EA0B0BF8EEE77A47EA0B0B67EE877A2B +:1019900041EA0B0B45EA0B0B50EA0B0B40F0BF8002 +:1019A00044ED017AC4ED077AC4ED0F7AC4ED177ADD +:1019B000C4ED1F7AC4ED277AC4ED2F7AC4ED377ACF +:1019C000E245C6D11C1F69461C33DFED9E2ADFEDC0 +:1019D000994A9FED993A9FED994ADFED993AD1EDF9 +:1019E000006A203111ED047A76EEA26A51ED025AB6 +:1019F00011ED011A54F8045F77EE267A4A9A76EED2 +:101A0000C76A11ED067AA8184A9F37EE256AA342E5 +:101A100037EE657AB0EE462A77EE865A37EEC65A2A +:101A200051ED037A97EE242A11ED057A77EE871AA5 +:101A300077EEC77A11ED077A36EE826A76EEC26AE1 +:101A400037EE012A37EE417A31EE821A32EE612A00 +:101A500077EE871A63EEE77A23EE477AE1EE847A2F +:101A6000A1EE847A77EEC17AF0EE671AD2EE241AEC +:101A700035EE812A75EEC15ABDEEC22AFDEEE55A59 +:101A800037EE617A12EE102AC2F30902B25CEA550F +:101A900015EE902A76EE275AC2F3090236EE676AEF +:101AA000FDEEE55AB25CFDEEC67AC27115EE902AE3 +:101AB000C2F30902B25C427017EE902A76EEA17A68 +:101AC000C2F3090276EEE16AFDEEE77AB25C82715A +:101AD00017EE902AFDEEE67AC2F30902B25C82703C +:101AE00017EE902A75EE077AC2F30902FDEEE77A47 +:101AF000B25C427117EE902A75EE477AC2F3090282 +:101B0000FDEEE77AB25CC27017EE902AC2F30902CA +:101B1000B25C02717FF463AF41B0BDE8F08F07EEB5 +:101B2000109A9CED2F3ADCED1F2AF8EEC76A07EEFB +:101B3000107ADCED0F5AB8EEC76A07EE105A9CED2A +:101B4000371AB8EEC77ADCED071ADCED170A27EE74 +:101B5000037AB0EE673AE6EE627AA6EE223AB0EE8B +:101B6000476A96EEA57AA6EEA56AF0EE466A33EECF +:101B7000062A33EE463AD7EE056A9CED277A77EED1 +:101B8000A62A77EEE66A07EE90EAB8EEE76A07EE75 +:101B9000908AF8EEE75A07EE901AF8EEE77A67EEC9 +:101BA000877A07EE100AB8EEC77A27EE017AB0EE10 +:101BB000671AE5EEE07AA5EEA01AF0EE475A96EE27 +:101BC000217AE6EE215A37EE876A63EEE77A71EE04 +:101BD000251A24EE477AE6EE247A75EEC15AA6EE6F +:101BE000247A77EEE17AB0EE676A95EE856A72EE56 +:101BF000215A32EE612A44ED015A72EEA75A72EE72 +:101C0000E72A84ED372A76EE867A37EE467AC4EDF7 +:101C1000075A76EEC66AC4ED2F2AC4ED0F7A73EE2A +:101C2000077AC4ED276AC4ED177A73EE477AC4EDDC +:101C30001F7AC5E6F304B53FD48B8A3F5E83EC3F41 +:101C4000753D2740008000432DE9F04FC5B04D6D34 +:101C5000023A0293D0F84C3103F1800905F12003D8 +:101C6000039304ABB2F912600433B2F922C0B2F9A3 +:101C70003270B2F942A0B2F95210B2F962E0B2F990 +:101C8000728055F8040B32F9024F444346EA0C00C7 +:101C900038434AEA000008434EEA000058EA0000D0 +:101CA0003FD143F8044CDC61DC63DC65DC67C3F8DE +:101CB0009C40C3F8BC40C3F8DC400399A942D1D191 +:101CC000029B04ADA3F1040B1C3303934E9B5BF802 +:101CD00004AFEA690AEB0300D5E901E8D5E9034757 +:101CE0004EEA08062643D5E9053C3E4355F8201B3D +:101CF0001E4346EA0C0616437ED1C1F349114E9AA3 +:101D000019F801300AF8023043708370C370037110 +:101D100043718371C371039B5B45D7D145B0BDE867 +:101D2000F08FE86B00FB0CFCE86F00FB0AFAD5F8BB +:101D3000BC0000FB0EFE0AEB0400A4EB0A04ACEBB3 +:101D40000E0B0CEB0E0A4FF4B57C00EB0A0E0CFBED +:101D50000BFBCAEB2B2BA0EB0A0AA4EB0B0004EB4A +:101D60000B0C0190E8694643E86D4743D5F89C00A9 +:101D70004143D5F8DC0000FB08F007EB0108C91B64 +:101D80003718301A0E18044640F2D91008EB070B2A +:101D9000A7EB080746436FF4277041434FF4B57033 +:101DA000474340F215100912444301EB262120124B +:101DB000A1EB0B01A0EB26200EEB0B06C1EB2727B6 +:101DC00043F8046CAEEB0B063844C3F8DC600CEB54 +:101DD0000106ACEB0101DE61C3F8BC100199394486 +:101DE000D9630199CC1B0AEB0001AAEB0000C3F8F0 +:101DF0009C40D967D86560E77E18C91B08EB0C07C3 +:101E0000A8EB0C084FF4B57C0CFB08F806EB070CAC +:101E1000F61BC7EB282801EB0807A1EB080101918D +:101E2000E1181B1B0EEB0204AEEB0202029101EB68 +:101E3000040840F2D91103EB020E01FB0EFE6FF411 +:101E400027714B430299641A4FF4B5711B124C432E +:101E500040F2151103EB2E234A434E99A3EB0803DE +:101E60001212C3EB2424A2EB2E220CEB080EACEBD7 +:101E7000080CCEF3491E2244CCF3491C19F80EE09D +:101E80000AF801E019F80CC080F807C007EB030C52 +:101E9000FF1ACCF3491CC7F3491719F80CC080F896 +:101EA00001C019F807308371019B2344C3F3491320 +:101EB00019F803308370019B191BC1F3491119F8FC +:101EC00001304371B318B61AC3F34913C6F3491668 +:101ED00019F80330037119F80630C3701BE70000CE +:101EE0002DE9F04FC7B04D6D039306A9D0F84C31E2 +:101EF00080330193931E009305F120030493009B0C +:101F0000043155F8040B1A46B3F912A0B3F9227044 +:101F1000B3F932E0B3F94260B3F95280B3F96240E9 +:101F2000B3F9729032F9023F43434AEA0700009244 +:101F30004EEA0000304348EA0000204359EA00001E +:101F400046D19B0041F8043CCB61CB63CB65CB67AA +:101F5000C1F89C30C1F8BC30C1F8DC30049BAB4206 +:101F6000CDD1039B06ADA3F104091C33059359F8A9 +:101F7000043FD5F81CB00093009A509BD5E901A00E +:101F8000D5E903E613444AEA000242EA0E02D5E923 +:101F90000584324355F8201B42EA080210312243DF +:101FA00052EA0B0240F09280C1F34911019A009865 +:101FB000525C509942545A709A70DA701A715A7180 +:101FC0009A71DA71059B4B45D1D147B0BDE8F08FCE +:101FD000E86B41F251125B034743D5F8BC0003F5AF +:101FE000806360433C18544341F67E0202FB07477E +:101FF000744A02FB0044E86F464303EB4630A3EB10 +:10200000463307EB000CC21BD5F8DC00E7181B1B9E +:10201000EC6900FB09F9D5F89C0004FB0AFA00FB07 +:1020200008F8E86D029242F2A15200FB0EFE08EBA6 +:102030000A0409EB0E0630195043634A02FB0606F8 +:10204000624A02FB040009EB0A04614A544340F669 +:102050008E1206EB040B044402FB09B943F20B0B8E +:102060005C4A0BFB0A4408EB0E0A44F2B31B02FB6A +:102070000AFA504456440BFB080046F2542808FB69 +:102080000E6E0CEB0406ACEB040CF6124FEAEC24DB +:1020900041F8046CC1F8DC4007EB0E04A7EB0E0717 +:1020A000E412FF12CC611C181B1AC1F8BC70E412B8 +:1020B000DB12CC63C1F89C30029B4B44DB12CB6536 +:1020C000029BA3EB0903DB12CB6747E7021941F23E +:1020D00051177A4341F67E0707FB0020394F07FB73 +:1020E00004227418891B42F2A15700EB4436C0EB5E +:1020F00044300EEB0B04029602EB413603900AEBE0 +:102100000800C2EB41322118049279432E4F009A05 +:1021100007FB04142D4F07FB00110AEB0B002C4F9B +:10212000784340F68E1704EB000C084407FB0BCCF9 +:1021300043F20B0B274F0BFB0A000EEB080A44F28D +:10214000B31B07FB0AFA029F514454440BFB0811CE +:1021500046F2542808FB0E4407EB000E019FCEF315 +:10216000894E17F80EE0509F02F807E0029F049A8C +:102170003F1A0198C7F38947C05D019FD871301994 +:10218000361BC0F38940C6F38946385C5870B85D89 +:1021900098715018521AC0F38940C2F38942385CD2 +:1021A0009870BA5C5A71039A6244C2F38942BA5C6D +:1021B000DA70039AA2EB0C02C2F38942BA5C1A717C +:1021C00000E700BFDFC4FFFF3BC1FFFF84F3FFFF59 +:1021D00033E3FFFFFDADFFFF2DE9F04FB9B04D6DCB +:1021E000961E0393043DD0F84C310DF11C0C03F105 +:1021F000800802F10C03059336F9023F40F61221E4 +:1022000055F8042F42F6C609B6F920400CF1040C2B +:102210005343B6F940E0B6F960205B0303F58063F1 +:1022200001932B6C5C43D5F8803003FB0EFED5F890 +:10223000C0305A4341F63743AEEB02075F43A4EB8D +:102240000E034B430199F8180844854901FB0E0120 +:10225000A0180291A1180491019909FB00116FF4D3 +:102260001F70B6F9509000FB02127E4800FB04116B +:102270002C6A3A442F6E1944B6F9103041F6EF50EB +:102280006343B6F930407C43D5F8A07003EB040BF0 +:1022900007FB09F91F1B00FB0BFB40F273504B447B +:1022A0004C4447437048ABEB070A5F4441F2A33B01 +:1022B00044430BFB03F343F6DE3B27449A440BFBFA +:1022C0000933234402EB0A04A2EB0A02E412D212FD +:1022D0004CF8044CCCF8A420029A3A44D212CCF820 +:1022E0001820029AD01BCA18C91A049BD212AEEB4E +:1022F000030E42F64153CCF83420C012019AC912A1 +:10230000CCF8880003FB0E23CCF86C10DB12CCF861 +:102310005030059BB3427FF46FAF039B07ACA3F132 +:1023200004091833059359F8043F1C3454F81C7CF5 +:10233000429A03939E1807F1100354F8041C01936A +:1023400054F80C3C54F8145CA3EB010C41F63743F1 +:10235000434F03FB0CFC54F80C3C54F810ACEA1A45 +:1023600040F6122354F808EC5A43019B0CEB020090 +:1023700000EB433054F80C3C07FB03006B1842F6AB +:10238000C60704937B43019F03EB47336FF41F772A +:1023900007FB0131334F07FB053340F273576144AC +:1023A000134454F8182C029302EB0A0BA2EB0A0513 +:1023B00041F6EF537244F24403FB0BFB429B7D4317 +:1023C000294FABEB050C5D4441F2A33B07FB0AFA36 +:1023D000039F0BFB02F243F6DE3B554494440BFB98 +:1023E0000E2201EB0C0EA1EB0C015244CEF3894EF0 +:1023F000C1F3894118F80EE007F803E018F801105E +:10240000029BB1714119401BC1F38941C0F389405E +:1024100018F80110717018F80010717199189B1A52 +:10242000C1F38941C3F3894318F80110B17018F85A +:102430000330337154F80C3C049A9B1A42F6415213 +:102440005343019A03EB4233C3F3894318F8033033 +:10245000F370059B4B457FF466AF39B0BDE8F08F54 +:1024600015C5FFFFF1B0FFFFE1D3FFFF2DE9F04FEE +:10247000D0F84C01A7B04D6D961E80300A32043D55 +:1024800002AF0090019236F9021F42F2317055F806 +:10249000042F0437B6F940405143D5F88020B6F9EF +:1024A00020C06243490341F2A164B6F9309001F5BE +:1024B0008061B6F9508062438C18A1EB42012A6C0E +:1024C00002FB0CF24243286A04EB020EA41AB6F98E +:1024D00010204243286E00FB09F9D5F8A00000FB4C +:1024E00008F840F6B63002EB090A02EB080CA2EB42 +:1024F0000902A8EB090B00FB0CFCA2EB08020CEB99 +:102500004A3A92000EEB0A08AEEB0A0E0CEB4B3C7B +:102510004FEAEE2E4FEAE828C7F874E002EBE12E0E +:10252000C2EBE12247F8048CC7F814E0FA6504EB2B +:102530000C02A4EB0C04D212E412FA62019A7C643D +:10254000B242A0D1A3F1040E03F1140902A95EF86E +:1025500004AF41F2A160309B183151F8082CF145CD +:102560000AEB030751F8183C00FB02F442F2317009 +:1025700003F1100351F8048C04EB4332C4EB4333F2 +:10258000A3EB040351F8104C00FB04F440F6B63002 +:1025900002EB0406A2EB040251F8144C04EB08050C +:1025A00000FB05F551F80C0C04EB000CA4EB000447 +:1025B000A8EB000B009805EB4C3CA4EB080405EBE2 +:1025C0004B3506EB0C08A6EB0C06C8F38948C6F39E +:1025D000894610F8088030980AF800800098865DD7 +:1025E0007E7103EB4436A3EB4433C6F38946C3F351 +:1025F0008943865D7E70C35C3B7102EB0503A2EBF1 +:102600000502C3F38943C2F38942C35CBB70835C98 +:10261000FB709CD127B0BDE8F08F00002DE9F04F92 +:10262000D0F84C019DB04D6D961E80300832043DAF +:1026300003AF41F64C1E4FF4356C0090019236F911 +:10264000022F043755F8041FB6F940804A432C6C1A +:10265000B6F92010286A52036143D5F88040B6F9D4 +:1026600010A002F5806204FB08F4B6F930B000FB5C +:102670000AFA286E01EB0408091B00FB0BFB41F66C +:102680009A200CFB01F10EFB08F85418A2EB810212 +:1026900008EB0409A4EB08040AEB0B08D21200FBB8 +:1026A00008F841F271007A6200FB0A8A3A48019AFE +:1026B00000FB0B8809EB0A0BA9EB0A09B2424FEAAF +:1026C000EB2B4FEAE92947F804BCC7F84C9004EB20 +:1026D0000809A4EB08044FEAE9294FEAE424C7F803 +:1026E0001090BC63ABD1A3F1040E03A9103341F6E3 +:1026F0004C1A4FF4356901935EF8048F41F69A2025 +:10270000269B143151F8042C08EB030751F8143CB4 +:1027100051F808BC03F1100C51F80C3C51F8106C46 +:102720009C189B1A09FB03F30AFB04F403EB4C32DD +:102730009B00A518121B06EB0B04C3EB4C33444360 +:1027400041F27100C3F3894300FB0646124800FBC7 +:102750000B4405EB060B0098AD1BCBF3894BC5F37F +:10276000894510F80BB0269808F800B00098455D30 +:102770003D711519121BC5F38945C2F38942455DA8 +:102780007D70825CFA70C35CBB70019B7345B3D1F2 +:102790001DB0BDE8F08F00BF5CBAFFFF2DE9F04F20 +:1027A000D0F84C6193B04D6D971E80360632043DD3 +:1027B00002A841F2511841F67E0EDFF808C137F940 +:1027C000024F043055F8041FB7F92090BA4201FBBC +:1027D00004F4296CB7F910A001FB09F1B7F930B086 +:1027E00004EB0109A4EB0104296A01FB0AFA296E32 +:1027F00001FB0BFB0AEB0B0108FB01F101F580610A +:102800000EFB0A1A0CFB0B114FEAEA2A4FEAE121F0 +:102810000AEB890BCAEB890A01EB840940F804BC76 +:10282000C1EB8401C0F82CA0C0F80C90C161C6D1E6 +:102830001D1F03F10C0C02AC41F2511941F67E0848 +:10284000DFF880E055F8043F10341C9A54F8100C5F +:10285000AC4503EB020754F804BC54F8082C00F113 +:10286000100054F80C1C00EB020AA0EB020001EB74 +:102870000B0209FB02F208FB01210EFB0B2201EB0C +:102880004A3BC1EB4A310192CBF3894B1C9AC1F30D +:10289000894116F80BB003F802B0735CFB70019B22 +:1028A00003EB4033C3F38943F35C7B70019BC3EBC1 +:1028B0004032C2F38942B35CBB70C3D113B0BDE8F0 +:1028C000F08F00BFDFC4FFFF2DE9F04F8BB0D0F8D1 +:1028D0004C01496DA2F1020801AC00F1800EA1F19A +:1028E000040C0432204641F2A16A42F2317938F9EF +:1028F000021F04345CF8045FB8F910B0424505FBD0 +:1029000001F1DCF84060B8F920504FEA4131DCF8C1 +:10291000207006FB05F501F5806107FB0BF70AFB4C +:1029200005F509FB07F701EB0506A1EB450106EBF1 +:10293000070BA6EB07064FEAE1214FEAEB2B4FEA24 +:10294000E626A16044F804BC6661D0D11D1F41F2A7 +:10295000A16C083342F2317B55F8049F0C30149A75 +:1029600050F8041CAB4209EB020650F80C2C0CFB8F +:1029700001F150F8084C02F11002149F0BFB04F413 +:1029800001EB4238C1EB423208EB040AA8EB040821 +:10299000A2EB0102CAF3894AC8F38948C2F389420B +:1029A0001EF80AA009F807A01EF80840B4701EF827 +:1029B00002207270D0D10BB0BDE8F08FD1F854C0B6 +:1029C000B2F90010F0B5D0F84C61DCF80000B2F9B3 +:1029D000104080364143DCF82000B2F902504443F5 +:1029E0000431059F6018091BDCF804406543B2F907 +:1029F0001240DCF82420544305EB040C2A1B1D680C +:102A000000EB0C04A0EB0C0005EB070EC4F3C904AB +:102A1000C0F3C900345DEC55305C8EF80100586895 +:102A20008B18891AC3F3C903C419C1F3C901F35C34 +:102A3000C355735C6370F0BD496DB2F9002009683D +:102A40004A43D0F84C110432C2F3C9020A4492F846 +:102A500080101A68009BD154704700002DE9F04F98 +:102A6000D1B04C6DA2F1020E0693043CD0F84C316B +:102A700008A803F1800A02F10E0307933EF9025FF2 +:102A8000043054F8043FBEF920105D43236CBEF9B6 +:102A900040205943D4F88030BEF960606D035A433A +:102AA000D4F8C03005F58065BEF950C0734341F2DB +:102AB000A1667343EF18A5EB430301938B1A73438D +:102AC0000293DDE901355E198B1842F687256B43C9 +:102AD00042F2AB25694340F2DC756A43FD18FB1AEC +:102AE0007F1AAD1ABA180B44BEF910100592226A6B +:102AF000276E5143BEF9302004937A43D4F8A07076 +:102B0000D4F8E03007FB0CFCBEF97070039542F678 +:102B100091455F43814B01EB0C0B5A4341F6175330 +:102B200001EB0709A1EB0C0103FB0BFB40F67A73E9 +:102B3000C91B03FB09F9ACEB07036B430BEB09085B +:102B40001D46D31AA8EB02089B4442F231732A4473 +:102B50005943039B4A44A3EB080503EB0807049B76 +:102B6000ED12FF12C0F8FC507518761A03EB0B013A +:102B7000A3EB0B03ED12F61240F8047CDB12C561E7 +:102B8000C912C0F8DC60C0F8BC30059BC1631344B7 +:102B9000DB12C365059B9B1ADB12C0F89C30DDE994 +:102BA0000132A3EB4203DB12C367079B73457FF43B +:102BB00065AF069B08AAA3F104092033069359F8D0 +:102BC000043F41F2A16C5A99203205935C1852F8E7 +:102BD000203C52F8180C03F1100552F8083C52F84A +:102BE000101C0CFB03F6C6EB453306EB45379B1B6D +:102BF0000193431A0CFB03F30293DDE901355E19DF +:102C0000431842F687256B4342F2AB25684340F2F6 +:102C1000DC756943FD18FB1A3F1A6D1A79183F4F8E +:102C2000034452F81C0C049152F8141C039341F60F +:102C30001753794352F80C7C00EB070B52F8047CD5 +:102C400003FB0BFB00EB070E40F67A7352F80C7C8B +:102C500003FB0EFE52F8043CA7EB030842F6914337 +:102C60000BEB0E0C03FB08F852F80C3CACEB010C20 +:102C7000A1EB08074144C01A52F8043C01EB0E08CE +:102C800005EB0C0EC01AA5EB0C0542F23173CEF326 +:102C9000894E5A99C5F389451AF80EE05843059BA9 +:102CA0005F4403F801E01AF80550039B25723518BC +:102CB000361AC5F38945C6F389461AF8055065707A +:102CC0001AF80600E071D819DB1BC0F38940C3F382 +:102CD00089431AF80000A0701AF80330A371049B0E +:102CE0004344C3F389431AF80330E370049BA3EB16 +:102CF0000803C3F389431AF803306371DDE9013136 +:102D0000A3EB4103C3F389431AF803302371069BF5 +:102D10004B457FF454AF51B0BDE8F08FCFD8FFFFE3 +:102D20002DE9F04FD0F84C01D9B04C6DA2F1020B57 +:102D3000049300F18003043C08A9019302F10E03FF +:102D400006933BF9026F41F69A2054F8043F043190 +:102D5000BBF940205E43D4F88030BBF950E05343C8 +:102D600042F29D42760302FB03F740F6FC5206F561 +:102D700080665343F519FF1AF21AA6EB4703BBF915 +:102D80002060BBF960700593236C5E43D4F8C030BB +:102D90005F43F319434341F2710000FB0636A0483C +:102DA00000FB073305EB060CA81B256ED718D31ABA +:102DB000BBF910200393236ABBF970605A43BBF937 +:102DC0003030029040F6E3106B43D4F8A05005FB7E +:102DD0000EFED4F8E050754303EB05095B1B00FBC6 +:102DE00003F541F66F6000FB09F642F6B34005EBD0 +:102DF0004E3A00FB026840F21470C5EB4E3550436A +:102E0000D044A5EB0335D31A861B0598A3EB0E031C +:102E100042F6530E564441F2CF2A0EFB02FE9B00AF +:102E20000AFB09F941F28C4A0AFB02F2AEEB090EE9 +:102E3000A2EB0902AEEB050E2A440CEB0805ACEB45 +:102E4000080CED1241F8045C4FEAEC25C1F81C5166 +:102E500007EB0E05A7EB0E07ED12FF12CD6103EB9A +:102E6000E025C3EBE023C1F8FC70CD63C1F8DC3092 +:102E7000039B1344DB12CB65039B9B1ADB12C1F847 +:102E8000BC30029B3344DB12CB67029B9B1BDB12E3 +:102E9000C1F89C30069B5B457FF453AF049B08A9A7 +:102EA000A3F1040B243307935BF8043F41F69A2007 +:102EB000629A203151F8107C9C1842F29D42069390 +:102EC00002FB07F551F8203C40F6FC521033574303 +:102ED00005EB4336ED1BC7EB433251F8087C6D0020 +:102EE000C5EB433351F8185C0293EB19434341F2AD +:102EF000710000FB05354A4800FB073306EB050C63 +:102F0000701B51F8045CD718D31A039040F6E310F5 +:102F1000049351F8143C51F81C2C03EB05095B1B7E +:102F200000FB03F541F66F6000FB09F851F80C0C4B +:102F300005EB403A42F6B34000FB028E40F21470BB +:102F400000FB02F6D64451F80C0CA6EB080642F63C +:102F50005308C5EB4035564441F2CF2AA5EB033563 +:102F600008FB02F80AFB09F941F28C4AD31A0AFB62 +:102F700002F2A8EB09085B03A2EB0902A8EB050823 +:102F8000A3EB403306982A440CEB0E050593ACEBFB +:102F90000E0C019BC5F38945CCF3894C5D5D629BAA +:102FA000C554019B059813F80C50657207EB080592 +:102FB000A7EB0807C5F38945C7F389475D5D6570D1 +:102FC000DD5D029B25721D18019BC5F389455D5D82 +:102FD000A570029B1B1A0198C3F38943C35CE3717C +:102FE000049B1344C3F38943C35CE370049B9B1AA3 +:102FF000C3F38943C35CA371039B3344C3F3894385 +:10300000C35C2371039B9B1BC3F38943C35C637144 +:10301000079B5B457FF448AF59B0BDE8F08F00BF18 +:103020005CBAFFFF2DE9F04FE5B0496DA2F1020B4C +:103030000893D0F84C31803301930B1F029302F1B7 +:103040000E030CAA0A93029942F66C3E3BF9023F2A +:1030500044F2582951F8040F0432BBF960600C6C3B +:103060004343BBF92000D1F880505B036043BBF9B8 +:103070004040029103F580636C43D1F8C0506E4329 +:1030800045F27E15271AA4EB060C05FB0CFC40F656 +:10309000C9556F438519291B0EFB01330CEB070E35 +:1030A00009919E44D04901FB04E144F2B53E0EFB78 +:1030B000063E03910EEB0C014FF44C6E0491CB498C +:1030C00001FB003C0CEB0701BBF93070BBF950C0B1 +:1030D0000591C74901FB053501F6BE3101FB0651DB +:1030E00043F639660691C349484306FB0400BBF921 +:1030F0001040BBF97060411907910299086A444376 +:10310000086E4743D1F8A00000FB0CFCD1F8E000AA +:10311000B9494643E01904EB0C0A0CEB000504EB3B +:10312000060835440EFB05F541F66A4E0EFB00F02D +:1031300041F2745E0EFB0AFA40F6B83E0EFB0858E8 +:1031400000EB0A0EC64401FB04EE07EB0C04A1F2EF +:10315000AD7101FB0454EF3909FB074901FB0C4435 +:10316000A6498144B819544444F2473A4843049963 +:1031700081440AFB0600404442F20B0808FB0CFCA9 +:10318000DFF8808208FB07CC9D4F07FB06CCAC44E0 +:1031900001EB0E05ED1242F8045CA1EB0E0503995C +:1031A000ED12C2F83C5101EB0905ED12D561A1EB1E +:1031B00009050699ED12C2F81C510D190C1BED12F0 +:1031C000E412D5630599C2F8FC400C18081A079957 +:1031D000C012E412C2F8DC0001EB0C00D465C0128E +:1031E000D067A1EB0C000999C012C2F8BC0045F6EB +:1031F000AD0000FB1133DB12C2F89C300A9B5B452B +:103200007FF421AF089B043B0393089B28330B9367 +:103210000CAB0293039B45F27E10029A44F2582AAB +:1032200053F8041F16699769099103930B466E9929 +:10323000A6EB070E94685918029BE51900FB0EFED9 +:10324000A6EB040C1B6840F6C950AA1B103300FB08 +:103250000CFCA81B5B030A9042F66C3000FB0233A7 +:103260000EEB0C00604A184402FB060244F2B53033 +:1032700000FB0730049200EB0E026E9805925B4A49 +:1032800002FB043E0EEB0C020692594A02FB053586 +:1032900002F6BE3202FB075243F639670792554ADF +:1032A000544307FB06444FF44C6762190892029A94 +:1032B000D2F80CE05568D2F8148005EB0E04D2F871 +:1032C0001CC005EB080B4C4A08EB040605EB0C0987 +:1032D00066447E4341F66A477C4341F2745707FBDC +:1032E0000BFB40F6B83707FB096904EB0B074F44AB +:1032F00002FB05770EEB0805A2F2AD7202FB056535 +:10330000EF3A0AFB0E5A02FB08553C4AA2440EEB68 +:103310000C045D4444F2473B5443059AA2440BFB22 +:103320000C444C4442F20B0909FB08F8DFF8D49036 +:1033300009FB0E88DFF8C8E00EFB0C88B044D619F4 +:10334000019AC6F38946965D099A1654059AD01BD0 +:10335000019AC0F38940105C8872049A02EB0A005B +:10336000019AC0F38940105C049A4870A2EB0A00ED +:10337000019AC0F38940105C079A48725019019A6B +:10338000C0F38940105C079A8870501B019AC0F303 +:103390008940105C069A08721019019AC0F389409E +:1033A000105C069AC870101B019AC0F38940105C2B +:1033B000089AC87102EB0800019AC0F38940105CBA +:1033C000089A0871A2EB0800019AC0F38940105CCA +:1033D000887145F6AD000A9A00FB1233019AC3F3D7 +:1033E0008943D35C10E000BFB4C5FFFF91CFFFFF5E +:1033F00005DBFFFF7DD3FFFF76E2FFFF75C6FFFF12 +:1034000016CAFFFF0DD1FFFF039A4B71029B2033B9 +:1034100002930B9B93427FF4FDAE65B0BDE8F08F45 +:103420002DE9F04FEBB0496DA2F102080893D0F8F6 +:103430004C3103F180090B1F009302F10E03099335 +:103440000AAB0099043338F902CF51F8042FB8F9C8 +:103450002060D1F8800002FB0CFCB8F940200091FC +:103460004FEA4C3C424342F23170B8F960400CF5EF +:10347000806C4243086C42F6B63146430CEB0207BF +:10348000ACEB020201FB06F00099D1F8C0506C438E +:103490006403C4EB46350CEB05010191ACEB05016F +:1034A0000519A0EB4630029141F68D36791B001BC1 +:1034B00007EB050BB8F9107003911118121AB8F93F +:1034C00030C0B8F950500592009A0491126A0099E0 +:1034D0005743009AD1F8E00042F6CF11126E02FB7A +:1034E0000CFC009AD2F8A02001FB0CF4B94955431A +:1034F000B8F9702007EB050A424301FB0CF002EB20 +:103500000A0E06FB0EFE40F65B0606FB0AEA40F6D4 +:10351000F70604EB0A01AEEB040406FB0711AE1834 +:103520000691AD49714346180791AC4901FB056608 +:103530000799ACEB050541F2511C564443F2C62AEB +:103540000AFB02440C44A64901FB0700A54901FB04 +:103550000200BA1A571970440CFB07F741F67E0CAB +:103560000CFB027CA04A02FB0577069A5A44D21251 +:1035700043F8042C069AABEB020B4FEAEB22C3F89C +:103580005C21019A6244D212DA61019AA2EB0C0228 +:10359000D212C3F83C21049A3244D212DA63049A5C +:1035A000921BD212C3F81C21059A2244D212DA656A +:1035B000059A121BD212C3F8FC20029A3A44D21286 +:1035C000DA67029AD21BD212C3F8DC20039A0244B3 +:1035D000D212C3F89C20039A121AD212C3F8BC204C +:1035E000099A42457FF42DAF089B0AAAA3F1040A69 +:1035F0002C3307935AF8043F2032749952F8084C40 +:1036000052F8185C6403069352F8207C0B44C4EB18 +:10361000453C52F8100C1037009342F2317142F6DB +:10362000B633484303FB05F10CEB473300EB473659 +:103630000193CCEB473301EB040CA1EB4531C0EB1C +:1036400047300293091BA6EB0C0352F80C5C06EB07 +:103650000C070393431852F8044C41F68D3604933B +:10366000431A42F6CF11059352F8143C01FB03F0C4 +:103670005849594352F81C3C03EB050B04EB0B0C67 +:1036800006FB0CFC40F65B0606FB0BCB40F6F70690 +:1036900000EB0B0EACEB000006FB03EE2E194E4BBD +:1036A00003FB06F8A3F6DB5301EB080603FB0566F4 +:1036B00052F81C3C5E4443F2C62B0BFB040000EBAB +:1036C000080B474841F2511800FB0311454B749811 +:1036D00003FB041152F81C3C1C1B52F8143C6144BF +:1036E0005D1B414B04EB050C08FB0CFC41F67E080E +:1036F00008FB04C807EB0E04A7EB0E0703FB05CC81 +:10370000C4F38944069BC7F3894719F804401C5445 +:10371000009B19F80740DC72019B03EB0804009B37 +:10372000C4F3894419F804405C70019BA3EB0804BE +:10373000C4F3894419F80440009B9C72049B9C19B3 +:10374000009BC4F3894419F804409C70049B9C1BA3 +:10375000009BC4F3894419F804405C72059B03EB99 +:103760000B04009BC4F3894419F80440DC70059BEA +:10377000A3EB0B00009BC0F3894019F800001872FE +:10378000029B03EB0C00009BC0F3894019F800007A +:103790001871029BA3EB0C00009BC0F3894019F841 +:1037A0000000D871039B5818009BC0F3894019F89A +:1037B00000005871039B591AC1F3894119F801108F +:1037C000009B9971079B53457FF414AF6BB0BDE824 +:1037D000F08F00BFAFEEFFFF8BDEFFFFB0D0FFFF2B +:1037E0005CEAFFFF8CC0FFFFDFC4FFFF2DE9F04F55 +:1037F000F7B0A2F102090C93D0F84C3103F1800824 +:103800004B6DA3F1040E02F10E030EAA0D9339F9CC +:10381000023F42F2F9455EF8041F0432B9F9204034 +:103820004B43B9F94010B9F960005B03B9F9507026 +:10383000B9F970C003F580630393DEF84030634349 +:103840000193DEF88030019C5943DEF8C0305843C4 +:103850000B18091A029140F219315D43DDE902604B +:1038600001FB060142F6F13000FB045008440490CD +:1038700041F20C006043401B40F67C45084405FBC8 +:10388000061142F2E01505904FF42260654358435B +:103890002D1A0D440695D94D05FB040041180398D7 +:1038A000079140F6F2514B4341F6FE517143D44E1D +:1038B000091AD4486043C01A401A0890D24800FB45 +:1038C0000433DEF8600041F602645B1AB9F91010A7 +:1038D0000993DEF820305943B9F930304343DEF81C +:1038E000A0004743DEF8E00001EB030B00FB0CFCFB +:1038F00042F65020CD1900FB0BFB42F23E504543EF +:1039000001EB0C0004FB00FAC04C0A900BEB050025 +:10391000504406FB0100BE4E0B90D819704341F68F +:10392000CB2606FB030604FB070004F611545E4495 +:1039300044F2946B284403EB0C056543B54C2E44CC +:103940000BFB0C5540F6332B554407EB0C0A04FBDC +:103950000AFA0A9C5044AA4440F6D5256543AE4C69 +:103960000BFB015140F64E4B04FB0311FB1A41F6D1 +:1039700002646343049C19440BFB07336FF45F57E5 +:1039800007FB0C332B440B9D6519ED1242F8045CC8 +:103990000B9D651B069CED12C2F87C51A519ED121A +:1039A000D561A51B059CED12C2F85C512518201AA3 +:1039B000ED12C012D563C2F83C0108985044C01201 +:1039C000D0650898A0EB0A00C012C2F81C01099843 +:1039D0000844C012D0670998411A0398C912C2F866 +:1039E000FC1007991944C912C2F89C100799CB1A08 +:1039F000DB12C2F8DC30DDE901135B1A42F64151FB +:103A000001FB0303DB12C2F8BC300D9B4B457FF476 +:103A1000FEAE0C9B0EAC043B03930C9B30330C931B +:103A2000039B42F2F945206941F6026753F8042FDF +:103A3000203454F8081C0B9203931346809A54F8D0 +:103A400018EC9A1854F8203C54F80CCC103302931C +:103A50004318411A5D43019140F219310198019ECA +:103A60004143029801EB403142F6F13000FB0E5029 +:103A70000844049041F20C0000FB0EF0401B40F69D +:103A80007C45084405FB061142F2E01505904FF411 +:103A9000226005FB0EF558432D1A0D440695574D2F +:103AA00005FB0E0041180298079140F6F2514B4376 +:103AB00041F6FE517143564EA1EB4031514800FB97 +:103AC0000EF0C01A401A08904F4800FB0E3342F621 +:103AD00050205B1A54F81C1C099301EB0C0554F898 +:103AE000143C01EB030B00FB0BFB42F23E50454341 +:103AF00054F8040C01EB0009414807FB09FA0BEBF1 +:103B00000507574400FB0170404F0A9003EB0C007F +:103B1000704341F6CB2606FB030607FB0C0007F6B5 +:103B200011575E4444F2946B284454F8045C5D19C8 +:103B30007D4354F8047C2E440BFB075555440CEB95 +:103B4000070A344F07FB0AFA07F21E675044AA44DB +:103B500040F6D52505FB09F540F6332909FB01514F +:103B600040F64E4907FB0311ACEB030341F6026735 +:103B70007B4354F8047C194409FB0C336FF45F5CFD +:103B80000CFB073303EB050C0A9B049D1D44C5F396 +:103B9000894518F805500B9F809BFD54049B0A9D96 +:103BA0005D1B069BC5F3894518F8055015739D19D3 +:103BB000C5F3894518F8055055709D1B059BC5F345 +:103BC000894518F80550D5721D18181A089BC5F3B9 +:103BD0008945C0F3894018F80550957018F8000021 +:103BE000907203EB0A00C0F3894018F80000D0700F +:103BF000A3EB0A00099BC0F389400FE0EED7FFFF5B +:103C00005BBFFFFF8CFAFFFF4BE6FFFFB1CDFFFF6D +:103C10002BF5FFFFF8EAFFFF16F1FFFF18F8000091 +:103C200050725818591A079BC0F38940C1F3894153 +:103C300018F80000107118F80110117203EB0C0154 +:103C4000A3EB0C03C1F38941C3F3894318F80110B6 +:103C5000517142F6415118F80330D371019BA3EB27 +:103C60000E034B43029903EB4133C3F3894318F826 +:103C7000033093710C9B039A93427FF4D1AE77B0DB +:103C8000BDE8F08F2DE9F04FFDB0A2F1020B0993D2 +:103C9000D0F84C31486D03F18009031F009302F105 +:103CA0000E030B930CAB009941F2A33E3BF9024F7C +:103CB00040F6F26851F8042F043300915443009AFF +:103CC000BBF94010D2F88020640300984A4342F6C2 +:103CD000C60104F5806401FB02F740F6122101FBE6 +:103CE00002FC41F63741E6194A43674404EB0C05F0 +:103CF000BBF920C0BF1AA11AA4EB4702D0F8C040FC +:103D000042F26237D6480A92009A126C02FB0CFC0F +:103D1000BBF9602062430CEB02047C4340F6BD0714 +:103D200007FB0C4700FB024400F6E5204243F01974 +:103D30000190F01B0EFB0C22BBF930700290281989 +:103D4000BBF950600390281BBBF9104042F252654A +:103D5000049088188A1A009905906FF4A260069260 +:103D6000009AD1F8E010126A5443009A126E574339 +:103D7000009AD2F8A02004EB070C5643BBF9702040 +:103D800004EB060A4A4342F6B72105FB0AF501FB9C +:103D90000CFCB4490CEB050E0EEB423E01FB04EEAD +:103DA00041F6140101FB0AFAAF4901FB04A1E41B2F +:103DB00008FB04F8A8EB423841440791B919414384 +:103DC000A0F68100A1EB423100FB0710604442F6EF +:103DD000F84C0890A54800FB0611A5482944F51B9E +:103DE0000CFB05F505EB423C224400FB06CC019898 +:103DF000921B00EB0E04D444920041F2995AE41253 +:103E00000AFB075543F8044CA0EB0E040398454405 +:103E1000E412C3F89C41089C0419E412DC61089C7C +:103E2000041B0598E412C3F87C414418411AE412BB +:103E3000C912DC63C3F85C110A9902EBE121D96570 +:103E40000A99C2EBE1220799C3F83C21069A624421 +:103E5000D212DA67069AA2EB0C02D212C3F81C2126 +:103E6000049A2A44D212C3F89C20049A521BD212FC +:103E7000C3F8FC20029A0A44D212C3F8BC20029A6A +:103E8000521AD212C3F8DC200B9A5A457FF40BAFBA +:103E9000099B0CA8043B0093099B34330B93009BB4 +:103EA00040F61224066941F2A33E53F8042F6FF442 +:103EB000A26A016804FB06F70A9241F637440093B0 +:103EC0001346869A103120309A1842F6C60307EB43 +:103ED000413573436643624C03EB413C3B44C6EBC4 +:103EE000413842F262379B1B50F8186C5B00C3EB01 +:103EF0004133019350F8083CF118794340F6BD076F +:103F000007FB061704FB031104F6E52463430CEBDF +:103F100007040294ACEB07040EFB063350F80CCCFC +:103F200003946C18691A50F8046C049442F25264B9 +:103F3000059108EB0301A8EB030350F8148C0691DC +:103F400042F6B721079340F6F26E50F81C3C03EBA3 +:103F50000C0B03EB080504FB0BF44D4341492F19EF +:103F600007EB463701FB037741F6140101FB0BFB1E +:103F70003D4901FB03B1A3EB08030EFB03FE0893CD +:103F8000AEEB463E3B4B7144099108EB0C010AFB3A +:103F900001F1A1EB463103FB081A344B03FB0C1172 +:103FA000AA4442F6F845324B2144ACEB08046C437A +:103FB00004EB463503FB0C55089B5D44A3EB0C0357 +:103FC00041F2995B5B030BFB0844744403EB463EF0 +:103FD000029E869B06EB070C0A9ECCF3894C19F8CF +:103FE0000CC006F803C0029BDE1B049BC6F3894687 +:103FF00019F80660567303EB0A06C6F3894619F8EA +:1040000006605670A3EB0A06069BC6F3894619F8AC +:10401000066016735E18591A019BC6F38946C1F3F0 +:10402000894119F80660967019F80110D17203EBF6 +:104030000E01A3EB0E03C1F38941C3F3894319F8C1 +:104040000110D17019F8033009999372079B2B4422 +:10405000C3F3894319F803301371079B5B1B0BE013 +:10406000FCC8FFFFF0DBFFFF0BDEFFFF09B4FFFF23 +:10407000E6C9FFFF6EF2FFFFC3F3894319F803306F +:104080005372059B2344C3F3894319F803305371DA +:10409000059B1B1BC3F3894319F803301372039B61 +:1040A0000B44C3F3894319F803309371039B5B1AE4 +:1040B000C3F3894319F80330D3710B9B009A9342E1 +:1040C0007FF4EDAE7DB0BDE8F08F00BF2DE9F04F7D +:1040D000ADF5077DA2F1020A0C93D0F84C31486D82 +:1040E00003F18009031F009302F10E030D930EAB41 +:1040F000009942F6136E3AF9025F41F2682B51F8CB +:10410000042F44F6A368BAF9606004330091554364 +:10411000009A0098126C6D03BAF92010D0F8804014 +:1041200005F580655143BAF940206243D0F8C0409C +:1041300040F6FC50744342F29D4600FB04FC42F6FC +:10414000CE207443A5EB0C072E19A4EB0C04A5EBB1 +:1041500044048D1A0A440EFB01F1019400FB02F4A1 +:104160004FF4BB7006EB040E00FB05FC3C1B0EEB92 +:104170000C00644440F6C74C0290601841F282146F +:104180000CFB05FC54430390A6EB040E3C44A4EB4B +:104190000C04AEEB0C0041F69A2C611A04900591C8 +:1041A00041F64C1151434FF435620F446A43761A7D +:1041B000B818B218BAF95060069007924FF4B55289 +:1041C0006A43BAF9305008920899019A0A44009952 +:1041D0000992096ABAF910204A430099096E4D43C1 +:1041E0000099D1F8A010BAF970E000984E4342F25D +:1041F0003171D0F8E0404E4304FB0EFEA5EB0E04F7 +:1042000017190CFB07F741F2710C0CFB0270A2EBC3 +:104210000E0C0A90CD4800FB0477CD4842F60254BC +:10422000684304FB0C640B9001FB0CFCC94802EBD7 +:104230000E0108FB0E48454300F271700BFB01F1C3 +:1042400040F6397B00FB02440B980BFB0212A8EBF3 +:1042500005080444ACEB060C921B0244BE4800FB6C +:104260000E1102983144294400EB0805ED1243F881 +:10427000045CA0EB08050698ED12C3F8BC510A9D3A +:104280004519ED12DD610A9D451B0998ED12C3F831 +:104290009C5100EB0C05ED12DD63A0EB0C050398BF +:1042A000ED12C3F87C518518821AED12D212DD6529 +:1042B000C3F85C21079A3A44D212DA67079AD21BF4 +:1042C000D212C3F83C21049A0A44D212C3F89C20AB +:1042D000049A521AD212C3F81C21059A2244D2120F +:1042E000C3F8BC20059A121BD212C3F8FC20019A15 +:1042F0000899A2EB4102D212C3F8DC200D9A524574 +:104300007FF4F6AE0C9B043B01930C9B38330D936A +:104310000EAB0093019B40F6FC514FF4BB7442F688 +:10432000136E53F8042F42F2317A41F271080C9265 +:1043300001931346909A1344009A95681069166881 +:104340009269103601FB02FC42F29D414A43CCEBDC +:10435000463102EB4637A2EB0C025200C2EB46326A +:104360002E1A28440EFB05F5029242F6CE2204FBDB +:1043700006FC424307EB020E8A1A62440EEB0C0461 +:1043800040F6C74C2A4403940CFB06FC049241F20D +:1043900082124243A7EB020E0A44A2EB0C02AEEBE0 +:1043A0000C04521B0594694C069241F64C12504382 +:1043B0004FF435623F1A724301441144BA18079210 +:1043C0004FF4B552724341F69A2608920898029A21 +:1043D00002EB000B0098009AC768406952680AFB1C +:1043E00000FC0098D0F81CE0A7EB0E0550197043B4 +:1043F00044F6A36608FB020804FB0500A2EB0E05C9 +:10440000564C0990524878430A905248474342F626 +:10441000025000FB05C00AFB05F541F2682A06FBC5 +:104420000E0604FB02000A9CF61BA5EB0C052044BB +:104430000B9002EB0E000AFB00F040F6397A0AFB03 +:104440000202A2EB0C0202EB040A434C04FB0E0036 +:10445000039C60443844A719C7F3894719F80770CB +:104460000C9C909AA754039A961B049AC6F389460B +:1044700019F806609E7301EB0806A1EB0801C6F36C +:104480008946C1F3894119F806605E7019F8011078 +:1044900059730BEB0501ABEB050BC1F38941CBF372 +:1044A000894B19F80110997019F80B10197302EB68 +:1044B0000A01A2EB0A02C1F38941C2F3894219F849 +:1044C0000110D97019F802200999DA72079A0A4482 +:1044D000C2F3894219F802201A71079A521AC2F3DC +:1044E000894219F802209A72059A0244C2F389425D +:1044F00019F802205A71059A121AC2F3894219F862 +:1045000002205A72069A0B990A44C2F3894219F89A +:1045100002209A71069A521A0899C2F3894219F830 +:1045200002201A72029AA2EB4102C2F3894219F8E0 +:104530000220DA71009B019A203300930D9B934275 +:104540007FF4E8AE0DF5077DBDE8F08F5CBAFFFFA4 +:1045500066E5FFFFF6D4FFFF2FE4FFFF67DCFFFFF8 +:104560002DE9F04FADF50F7DA2F1020B0C93D0F8C1 +:104570004C3103F180084B6DA3F1040A02F10E03E4 +:104580000D930EAB00933BF9022F41F251145AF8F0 +:10459000041F42F66345BBF9400045F2032E4A432F +:1045A000DAF88010BBF960C04143520342F6CF10E5 +:1045B000CD4B02F5806248436143BBF92040171898 +:1045C000101A5618521ADAF8401001FB04F9DAF8FA +:1045D000C01001FB0CFC40F6D401A9EB0C046143B4 +:1045E0006C4341F6CD450EFB0C4E03FB094403F230 +:1045F000EE2305FB091542F2E97903FB0C1107EBE9 +:104600000E030193A7EB0E03029373190393731B1D +:10461000BBF95050049313190593131BDAF82020AB +:1046200006934318DAF8E0400793431ABBF91010D9 +:10463000DAF860005143BBF9302008934243DAF8BE +:10464000A0004543BBF970008E18604342F64E341B +:104650004F19664301EB000E42F2FC24A1EB000C63 +:1046600009FB07F904FB0EFE41F6B64404FB0CFC03 +:1046700041F2555404FB07F38C1A06EB0907099322 +:1046800040F6235377445C43984B03FB0177099B27 +:104690000A940CEB03040A9B1C44954B03FB014159 +:1046A0005419944B0B914FF48E614C4340F24D21C1 +:1046B00001FB024103FB054403F538630E44A91ACC +:1046C0004C4442F6095909FB01F103FB0519099B0A +:1046D000994443F61A7303FB02110A9B0244CB1858 +:1046E0000993854B03FB02F142F218230E4403FBAE +:1046F0000011824B714446F2854E5A43099B0EFBD2 +:10470000002E1A447E4BE64405EB000C401B03FBD5 +:104710000CFC40F623535843019B64446144DD196B +:10472000009B86444844ED121D60019BDD1B009BED +:10473000ED12C3F8E051039B9D19009BED121D6221 +:10474000039B9D1B009BED12C3F8C051059B1D19D7 +:10475000009BED121D64059B1C1B009BE412C3F81B +:10476000A041079B5C18009BE4121C66079B591A2A +:10477000009BC912C3F88011089B03EB0E01009B3C +:10478000C912C3F88010089BA3EB0E01009BC9124D +:10479000C3F86011069B1918009BC912C3F8A0103A +:1047A000069B191A009BC912C3F84011049B991863 +:1047B000009BC912C3F8C010049B9A1A009BD21226 +:1047C000C3F82021029B0B9A9A18009BD212C3F8BF +:1047D000E020029B0B9A9A1A009BD2120433C3F872 +:1047E000FC2000930D9B5B457FF4CDAE0C9B043BFE +:1047F00001930C9B3C330D930EAB0093019B41F254 +:10480000511042F6CF1442F6634653F8042F45F296 +:104810000327354D0C9201931346989A9918009BE3 +:10482000009A1B68126910335443424340F6D40087 +:1048300004EB433E02EB433CC4EB4334C2EB433254 +:10484000009BD3F80890D3F818A0A9EB0A035843AB +:10485000734341F6CD4607FB0A3705FB093305F2E2 +:10486000EE2506FB090642F2E97905FB0A000EEB8C +:1048700007050295AEEB070503950CEB06050495BD +:10488000ACEB06050595D518D31A069540F62355C9 +:10489000079323180893231A009842F64E3409937D +:1048A000009B47695A68DB68C06902EB070AD618A3 +:1048B000A2EB030B02EB000EA2EB000C664342F2EC +:1048C000FC2409FB0AF904FB0EFE41F6B64405FB85 +:1048D0000BFB064D04FB0CFC41F2555404FB0AFA99 +:1048E00006EB090474440DE0C2ECFFFFD6B6FFFFEF +:1048F00042C5FFFFFADBFFFFABEAFFFF17D8FFFF60 +:10490000B2D4FFFF05FB024405F66C650A940CEB7C +:104910000A045C4405FB0242DC195E4D0B924FF425 +:104920008E62544340F24D2202FB034216445A4A1F +:1049300002FB0744FA1A4C4442F6095909FB02F2F9 +:1049400005FB0729A5F66375D14443F61A7A0AFBDD +:104950000322034402EB0B0A504A42F2182B5A433B +:104960006B4316440BFB00229A44724446F2854E78 +:104970000EFB003E6FF45973E6441D4407EB000C38 +:10498000C01B0A9F05FB0CFC40F623556843029DA3 +:1049900064446244EF190C9D86444844C7F3894738 +:1049A00018F80770989BEF54029B0A9D5F1B049BAD +:1049B000C7F3894718F80770CF739F199E1B069B92 +:1049C000C7F38947C6F3894618F807704F7018F87F +:1049D00006608E731E191C1B089BC6F38946C4F320 +:1049E000894418F806608E7018F804404C739C18BF +:1049F0009A1A099BC4F38944C2F3894218F8044007 +:104A0000CC7018F802200A7303EB0E02C2F389423D +:104A100018F802200A71A3EB0E02079BC2F3894229 +:104A200018F80220CA721A18C2F3894218F8022034 +:104A30004A711A1A059BC2F3894218F802208A7239 +:104A400003EB0A02A3EB0A03C2F38942C3F38943CF +:104A500018F802208A7118F803300B9A4B72039BE6 +:104A60001344C3F3894318F80330CB71039B9B1A9B +:104A7000019AC3F3894318F803300B72009B20336B +:104A800000930D9B93427FF4B9AE0DF50F7DBDE809 +:104A9000F08F00BF7AE7FFFFFADBFFFFABEAFFFF13 +:104AA0002DE9F04FD1B04D6D049310A9D0F84C31E1 +:104AB00003F1800B931E019305F120030593019BE5 +:104AC000043155F8040B1A46B3F912A0B3F9227059 +:104AD000B3F932E0B3F94260B3F95280B3F96240FE +:104AE000B3F9729032F9023F43434AEA0700019258 +:104AF0004EEA0000304348EA0000204359EA000033 +:104B000040F052819B0041F8043CCB61CB63CB6504 +:104B1000CB67C1F89C30C1F8BC30C1F8DC30059BD4 +:104B2000AB42CCD1049B043B0293049B1C330F93F8 +:104B300010AB0193029B41F2511042F6CF1442F6A2 +:104B4000634653F8042F45F20327D74D0E92029384 +:104B500013465A9A9918019B019A1B6812691033DF +:104B60005443424340F6D40004EB433E02EB433C43 +:104B7000C4EB4334C2EB4332019BD3F80890D3F823 +:104B80001880A9EB08035843734341F6CD4607FB51 +:104B9000083705FB093305F2EE2506FB090642F24C +:104BA000E97905FB08000EEB070540F6235803954D +:104BB000AEEB070504950CEB06050595ACEB060579 +:104BC0000695D518D31A079508932318B74D09935E +:104BD000231A019842F64E340A93019B47695A689A +:104BE000DB68C06902EB070AD61802EB000EA2EBE5 +:104BF000000C664342F2FC2409FB0AF904FB0EFE9A +:104C000041F6B64404FB0CFC41F2555404FB0AFA8D +:104C1000D41A08FB04F40B9406EB0904744405FB56 +:104C200002440B9D0C940CEB0A042C44A04D05FB94 +:104C30000242DC199F4D0D924FF48E62544340F2B4 +:104C40004D2202FB034216449B4A02FB0744FA1A18 +:104C50004C4442F6095909FB02F205FB07290B9D5A +:104C6000D14443F61A7A0AFB0322034402EB050AF5 +:104C7000924A42F218255A43164405FB0022904DF1 +:104C8000724446F2854E6B430EFB003E9A446FF42D +:104C90005973E64407EB000C1D44C01B05FB0CFCDC +:104CA000039D0C9F08FB00F05A9B6444EF190E9D76 +:104CB00062448644C7F3894748441BF80770EF54A1 +:104CC000039B0C9D5F1B059BC7F389471BF807706F +:104CD000CF739F199E1B079BC7F38947C6F389466D +:104CE0001BF807704F701BF806608E731E191C1B93 +:104CF000099BC6F38946C4F389441BF806608E708D +:104D00001BF804404C739C189A1A0A9BC4F38944FC +:104D1000C2F389421BF80440CC701BF802200A73CE +:104D200003EB0E02C2F389421BF802200A71A3EBC7 +:104D30000E02089BC2F389421BF80220CA721A189D +:104D4000C2F389421BF802204A711A1AC2F389423F +:104D50001BF80220069B8A7203EB0A02A3EB0A03EC +:104D6000C2F38942C3F389431BF802208A711BF8FE +:104D700003300D9A4B72049B1344C3F389431BF811 +:104D80000330CB71049B9B1A029AC3F389431BF82F +:104D900003300B72019B203301930F9B93427FF4EE +:104DA000C9AE51B0BDE8F08FE86B41F251125B0320 +:104DB0004743D5F8BC0003F5806360433C18544377 +:104DC00041F67E0202FB07473E4A02FB0044E86FC1 +:104DD000464303EB4630A3EB463307EB000CC21B04 +:104DE000D5F8DC00E7181B1BEC6900FB09F9D5F8C6 +:104DF0009C0004FB0AFA00FB08F8E86D029242F2FC +:104E0000A15200FB0EFE08EB0A04039340F68E133A +:104E100009EB0E06301950432B4A02FB06062B4ABB +:104E200002FB040009EB0A04294A544332190444E2 +:104E300003FB092943F20B03264A03FB0A4408EB50 +:104E40000E0A44F2B31302FB0AFA5044564403FB21 +:104E5000080046F25428039B08FB0E6E0CEB040678 +:104E6000ACEB040CF6124FEAEC2441F8046CC1F8E8 +:104E7000DC4007EB0E04A7EB0E07E412FF12CC6137 +:104E80001C181B1AC1F8BC70E412DB12CC63C1F809 +:104E90009C30029B4B44DB12CB65029BA3EB0903C6 +:104EA000DB12CB673BE600BFC2ECFFFFD6B6FFFFCD +:104EB00042C5FFFF7AE7FFFFFADBFFFFABEAFFFF28 +:104EC00017D8FFFFDFC4FFFF3BC1FFFF84F3FFFFE5 +:104ED00033E3FFFFFDADFFFF2DE9F04FC5B04E6D91 +:104EE000A2F1020C0E320393043ED0F84C310DF1C6 +:104EF000300E0592803301933CF9022F40F61220C8 +:104F000056F8041F42F6C609BCF920500EF1040EF3 +:104F10004A43BCF94080BCF96010520302F580623C +:104F20000292326C5543D6F8802002FB08F8D6F87E +:104F3000C020514341F63742A8EB01076B18574395 +:104F4000A5EB080242430298BC180444BD4800FB8C +:104F5000084468180490029809FB03006FF41F735B +:104F6000BCF9509003FB0101B74B03FB0500356A08 +:104F70003944376E1044BCF9102041F6EF536A43B0 +:104F8000BCF930507D43D6F8A07002EB050B07FB4F +:104F900009F9571B03FB0BFB40F273534A444D4482 +:104FA0005F43AA4BABEB070A5F4441F2A33B5D436F +:104FB000049B0BFB02F243F6DE3B2F44A8EB0308F5 +:104FC00092440BFB0922029B2A4401EB0A05A1EB48 +:104FD0000A01ED12C9124EF8045CCEF8BC10E119BA +:104FE000E41BC912E412CEF81C108118801A42F694 +:104FF0004152C912CEF89C4002FB0832059BC012F8 +:10500000CEF83C10D2126345CEF87C00CEF85C207E +:105010007FF472AF039B0CACA3F1040918330B931C +:1050200059F8043F41F637454E9A41F2A3382769B3 +:105030006FF4A26A99180A9342F6C60320682034D6 +:1050400003FB07F240F61223103003FB07FE02EBCE +:10505000403C6F4372440EEB403654F818ECC7EBFB +:105060004035D21B42F262375200C2EB403354F853 +:10507000082C0EEB02000293754B784340F6BD07F7 +:1050800007FB0E0703FB020003F6E5235A430CEB74 +:1050900007030393ACEB070308FB0E2254F80CCC78 +:1050A0000493331854F8148C40F6F26E0593331AB7 +:1050B00042F6B7200693AB180793AB1A54F81C2C92 +:1050C00042F25265089302EB0C0B02EB080654F80F +:1050D000043C464341F6140005FB0BF500FB0BFBBB +:1050E000771907EB43375B4B03FB027703F21B2374 +:1050F00003FB02B0A2EB080254F8043C0EFB02FED4 +:10510000A2EB0C02AEEB433E520300EB0E0308EBA6 +:105110000C0009930AFB00F054F8043CA0EB433068 +:105120004D4B03FB080A4D4B03FB0C00B24442F607 +:10513000F84654F8043C2844ACEB0805754305EBED +:105140004336474B03FB0C6654F8043C5E4441F283 +:10515000995B0BFB0855754402EB433E039B4E9A4B +:1051600003EB070C019BCCF3894C13F80CC00A9B92 +:1051700003F802C0039BDF1B019BC7F38947DF5D78 +:105180004F73059B03EB0A07019BC7F38947DF5D5C +:10519000059B4F70A3EB0A07019BC7F38947DF5DAF +:1051A000079B0F731F18019BC7F38947DF5D079BA0 +:1051B0008F70181A019BC0F38940185C029BC8725B +:1051C00003EB0E00019BC0F38940185C029BC87082 +:1051D000A3EB0E02019BC2F389429A5C089B8A7280 +:1051E0009A19019BC2F389429A5C089B0A719A1B27 +:1051F000019BC2F389429A5C4A72069B5A19019B31 +:10520000C2F389429A5C069B4A715A1B019BC2F306 +:1052100089429A5C049B0A72099A9A18019BC2F30C +:1052200089429A5C049B8A71099A9A1A019BC2F37B +:1052300089429A5C0B9BCA714B457FF4F1AE45B035 +:10524000BDE8F08F15C5FFFFF1B0FFFFE1D3FFFF11 +:10525000FCC8FFFFF0DBFFFF6EF2FFFF09B4FFFFAA +:10526000E6C9FFFF2DE9F04FD0F84C01BBB04D6D02 +:10527000961E80300E32043D0AAF0190029236F93C +:10528000021F42F2317055F8042F0437B6F940403E +:105290005143D5F88020B6F920C06243490341F25A +:1052A000A164B6F9309001F58061B6F9508062438F +:1052B0008C18A1EB42012A6C02FB0CF24243286AD3 +:1052C00004EB020EA41AB6F910204243286E00FB2C +:1052D00009F9D5F8A00000FB08F840F6B63002EB5B +:1052E000090A02EB080CA2EB0902A8EB090B00FB70 +:1052F0000CFCA2EB08020CEB4A3A92000EEB0A08F7 +:10530000AEEB0A0E0CEB4B3C4FEAEE2E4FEAE828D0 +:10531000C7F89CE002EBE12EC2EBE12247F8048CD7 +:10532000C7F81CE0FA6704EB0C02A4EB0C04D212E1 +:10533000E412FA63029AFC65B242A0D1A3F1040A16 +:105340000AAA143309935AF8043F20324499089367 +:1053500052F8085C0B4452F8201C52F8186C6D038C +:1053600001F1100C52F8104C42F23171C5EB463E7F +:1053700052F81C8C4C4342F6B6310EEB4C30714364 +:1053800004EB4C370290C4EB4C34CEEB4C3001EBC9 +:10539000050CA1EB463152F80C6C039007EB0C00A6 +:1053A000491B08EB060B0490A7EB0C0052F8045CB9 +:1053B00041F68D3705906018611A05EB0B0C0690CD +:1053C00042F6CF10079106EB050952F8141C07FBB3 +:1053D0000CFC40F65B0700FB01F44B4807FB0BCBD2 +:1053E00040F6F7074143494804EB0B0EACEB0404CD +:1053F00000FB09F9A0F6DB5007FB08EE01EB0907FB +:1054000000FB0677424800FB081142485F4443F224 +:10541000C62B00FB051152F8140C0BFB0544A8EB3E +:105420000505861B614441F251183B4805EB060C0B +:105430004C4408FB0CFC41F67E0808FB05C800FB49 +:1054400006CC0498449E00EB0E050198C5F38945EF +:10545000455D089885550498A0EB0E050198C5F3A5 +:105460008945455D0298DD7200EB08050198C5F39A +:105470008945455D5D700298A0EB08050198C5F36C +:105480008945455D06989D72C5190198C5F3894502 +:10549000455D06989D70C51B0198C5F38945455D1E +:1054A00007985D7205190198C5F38945455D079810 +:1054B000DD70041B0198C4F38944045D03981C72D9 +:1054C00000EB0C040198C4F38944045D03981C713B +:1054D000A0EB0C040198C4F38944045D0598DC71C9 +:1054E00044180198C4F38944045D5C710598411A1D +:1054F0000198C1F38941415C9971099B53457FF43F +:1055000022AF3BB0BDE8F08FAFEEFFFF8BDEFFFFB9 +:105510005CEAFFFF8CC0FFFFDFC4FFFF2DE9F04F07 +:10552000D0F84C01B1B04D6D961E80300E32043D66 +:1055300008AF41F64C1E4FF4356C0190029236F9DB +:10554000022F043755F8041FB6F940804A432C6CEB +:10555000B6F92010286A52036143D5F88040B6F9A5 +:1055600010A002F5806204FB08F4B6F930B000FB2D +:105570000AFA286E01EB0408091B00FB0BFB41F63D +:105580009A200CFB01F10EFB08F85418A2EB8102E3 +:1055900008EB0409A4EB08040AEB0B08D21200FB89 +:1055A00008F841F27100FA6300FB0A8A6E48029A19 +:1055B00000FB0B8809EB0A0BA9EB0A09B2424FEA80 +:1055C000EB2B4FEAE92947F804BCC7F87C9004EBC1 +:1055D0000809A4EB08044FEAE9294FEAE424C7F8D4 +:1055E0001C90FC65ABD1A3F1040B08A91033079301 +:1055F0005BF8043F41F69A203A9A203151F8107C2A +:105600009C1842F29D42069302FB07F551F8203C9C +:1056100040F6FC521033574305EB4336ED1BC7EB06 +:10562000433251F8087C6D00C5EB433351F8185CE8 +:105630000293EB19434341F2710000FB05354A48E0 +:1056400000FB073306EB050C701B51F8045CD71800 +:10565000D31A039040F6E310049351F8143C51F828 +:105660001C2C03EB05095B1B00FB03F541F66F6087 +:1056700000FB09F851F80C0C05EB403A42F6B34038 +:1056800000FB028E40F2147000FB02F6D64451F883 +:105690000C0CA6EB080642F65308C5EB4035564401 +:1056A00041F2CF2AA5EB033508FB02F80AFB09F902 +:1056B00041F28C4AD31A0AFB02F2A8EB09085B03F9 +:1056C000A2EB0902A8EB0508A3EB403306982A4495 +:1056D0000CEB0E050593ACEB0E0C019BC5F3894555 +:1056E000CCF3894C5D5D3A9BC554019B059813F83A +:1056F0000C50657207EB0805A7EB0807C5F3894551 +:10570000C7F389475D5D6570DD5D029B25721D18DD +:10571000019BC5F389455D5DA570029B1B1A01982D +:10572000C3F38943C35CE371049B1344C3F389430C +:10573000C35CE370049B9B1AC3F38943C35CA371EE +:10574000039B3344C3F38943C35C2371039B9B1BBB +:10575000C3F38943C35C6371079B5B457FF448AF28 +:1057600031B0BDE8F08F00BF5CBAFFFF2DE9F04F0C +:10577000A5B0D0F84C014E6D971E04AC00F1800E20 +:105780000E32043E204641F2511841F67E0C009242 +:1057900037F9025F043456F8041FB7F920904D43DF +:1057A000316CB7F910A001FB09F1B7F930B0654AC7 +:1057B00005EB01096D1A316A01FB0AFA316E01FB32 +:1057C0000BFB0AEB0B0108FB01F101F580610CFBFF +:1057D0000A1A02FB0B11009A4FEAEA2AC912BA42CE +:1057E0000AEB890BCAEB890A01EB850944F804BC72 +:1057F000C1EB8501C4F85CA0C4F81C90E163C7D17B +:10580000A3F104080C33039358F8043F41F25115F7 +:105810002E9A203050F8181C9C18029350F8083C1F +:1058200050F8106CCA1850F814CC50F81C9C6A43FD +:1058300041F67E0550F8047C05FB0121414D05FB36 +:10584000032250F8203C10339D199B1B01EB453679 +:10585000C1EB453142F2A155C2EB433B009102EB53 +:10586000433150F80C3C019107EB0C0103EB0902AA +:105870008B186B43344D05FB0131344D05FB02336E +:1058800007EB0902324D6A4340F68E1501EB020A1E +:105890001A4405FB07A750F80C5C43F20B0A0AFBFD +:1058A000092205EB0C092B4D44F2B31A05FB09F94B +:1058B00050F80C5C4B44494446F254290AFB053A23 +:1058C000029D09FB0C1106EB020CB61A2E9BCCF3C1 +:1058D000894CC6F389461EF80CC005F803C0019B2D +:1058E0001EF806205D1AE2715A18C5F38945C2F305 +:1058F00089421EF8022062701EF80520A2710BEB8F +:105900000A02ABEB0A0BC2F38942CBF3894B1EF8B8 +:105910000220A2701EF80B306371009B3B44C3F35E +:1059200089431EF80330E370009BDB1BC3F38943FC +:105930001EF803302371039B43457FF465AF25B008 +:10594000BDE8F08FDFC4FFFF3BC1FFFF84F3FFFF23 +:1059500033E3FFFFFDADFFFF2DE9F04F95B0D0F829 +:105960004C01496DA2F1020E02AD803002F10A0431 +:10597000A1F1040C2A4641F2A16942F2317801906A +:105980003EF9021F04355CF8046FBEF910A074459F +:1059900006FB01F1DCF84070BEF920604FEA4131AE +:1059A000DCF8200007FB06F601F5806100FB0AFA2F +:1059B00009FB06F608FB0AFA01EB0607A1EB460114 +:1059C00007EB0A0BA7EB0A074FEAE1214FEAEB2BA3 +:1059D0004FEAE727696145F804BCEF62D0D1A3F133 +:1059E000040E03F108095EF804AF41F2A1601E9BAA +:1059F000183252F8081CF1450AEB030752F8183C1C +:105A000000FB01F442F2317003F1100352F8048CF0 +:105A100004EB4331C4EB4333A3EB040352F8104CC3 +:105A200000FB04F440F6B63001EB0406A1EB0401E0 +:105A300052F8144C04EB080500FB05F552F80C0C69 +:105A400004EB000CA4EB0004A8EB000B019805EBA1 +:105A50004C3CA4EB080405EB4B3506EB0C08A6EB1D +:105A60000C06C8F38948C6F3894610F808801E98CA +:105A70000AF800800198865D7E7103EB4436A3EB43 +:105A80004433C6F38946C3F38943865D7E70C35CA5 +:105A90003B7101EB0503A1EB0501C3F38943C1F39E +:105AA0008941C35CBB70435CFB709CD115B0BDE801 +:105AB000F08F00002DE9F04F8BB0D0F84C514E6DB7 +:105AC000971E0DF1080C8035043E063260460193A6 +:105AD00037F9021F56F8044FBA4204FB01F1336A4A +:105AE000B7F9104003FB04F401EB040EA1EB040131 +:105AF0004CF804EBCCF80C10EAD1019B41F2511A9E +:105B000041F67E09A3F1040C0468E0468268103077 +:105B100050F8047C043450F80C1C04EB020BA41A5B +:105B2000CA195CF804EF149B0AFB02F20EEB0306A1 +:105B3000124B09FB012103FB0722149B01EB4B379E +:105B4000C1EB4B31C7F30947C1F30941EF5D0EF8D3 +:105B50000370695C019BF17002EB4431C2EB44328B +:105B60004345C1F30941C2F30942695C7170AA5C03 +:105B7000B270C9D10BB0BDE8F08F00BFDFC4FFFF2A +:105B8000496DD0F84C01F0B51D688030B2F9003095 +:105B90000F68B2F9022049687B43059C04334A43ED +:105BA0002E1999189B1AC1F3C901C3F3C903415CAB +:105BB0002955C35C7370F0BD2DE9F04FADF50F7D35 +:105BC000A2F1020B0C93D0F84C31803300934B6D53 +:105BD000A3F1040802F10E030D930EAB3BF9022F63 +:105BE00041F2511458F8041F42F66345BBF94000D6 +:105BF00045F2032E4A43D8F88010BBF960C0043345 +:105C00004143520342F6CF1002F58062484361439C +:105C1000BBF920401718101A5618A2EB010AD8F841 +:105C20004010CF4A01FB04F9D8F8C01001FB0CFC6E +:105C300040F6D401A9EB0C0461436C4341F6CD4519 +:105C40000EFB0C4E02FB094402F2EE2205FB091585 +:105C500042F2E97902FB0C1107EB0E020192A7EB6D +:105C60000E0240F62357029272190392721BBBF97F +:105C7000505004920AEB04020592AAEB0402D8F8F1 +:105C8000E040069242180792421ABBF9101008929F +:105C9000D8F82020D8F860005143BBF930204243A7 +:105CA000D8F8A0004543BBF970008E18604342F657 +:105CB0004E3401EB050A664301EB000E42F2FC2470 +:105CC000A1EB000C09FB0AF904FB0EFE41F6B644F9 +:105CD00004FB0CFC41F2555404FB0AFA8C1A7C4379 +:105CE00006EB0907099477449E4C04FB0174099F55 +:105CF0000A940CEB0A043C449B4F07FB01415419E6 +:105D00009A4F0B914FF48E614C4340F24D2101FBB1 +:105D100002410E44964901FB0544A91A4C4442F63F +:105D2000095909FB01F107FB0519099FD14443F605 +:105D30001A7A0AFB0211024401EB070A8D4942F26A +:105D4000182751430E4407FB00118B4F714446F254 +:105D5000854E7A430EFB002E52446FF4597AE64486 +:105D600005EB000C5744401B40F6235507FB0CFC89 +:105D70000A9F6843019D644461443D44864448440D +:105D8000ED1243F8045C019DED1BED12C3F8DC51EC +:105D9000039D3544ED12DD61039DAD1BED12C3F88B +:105DA000BC51059D2544ED12DD63059D2C1BE412BD +:105DB000C3F89C41079C0C44E412DC65079C611A03 +:105DC000C912C3F87C1108997144C912D96708999E +:105DD000A1EB0E01C912C3F85C1106990144C91266 +:105DE000C3F89C100699091AC912C3F83C1104990A +:105DF0001144C912C3F8BC1004998A1A0B99D21223 +:105E0000C3F81C21029A0A44D212C3F8DC20029A79 +:105E1000521AD212C3F8FC200D9A5A457FF4DEAE16 +:105E20000C9B0EA8A3F104093C33049359F8043FDA +:105E300041F25114989A203050F8181C9D1850F8CF +:105E4000082C03938B1850F8106C50F804BC634373 +:105E500041F67E0450F80C8C04FB0131474C50F89D +:105E600014EC04FB023350F8202C50F81CAC103218 +:105E70009419921B01EB4437C1EB44310BEB0E0438 +:105E800003EB42360191C3EB423308EB0A01029364 +:105E900042F2A15362185A43394B03FB0424394B95 +:105EA00003FB01220BEB0A01374B594340F68E13DB +:105EB00004EB010C114403FB0BCC43F20B0B334BF3 +:105EC0000BFB0A1108EB0E0A44F2B31B03FB0AFAA0 +:105ED000009B524454440BFB082B46F25428989ADA +:105EE00008FB0E4407EB010E7F1ACEF3894EC7F371 +:105EF000894713F80EE0039B03F802E0009B009A29 +:105F0000D95DE9713119361BC1F38941C6F3894660 +:105F1000595C6970995D029BA97103EB0B01009BB1 +:105F2000C1F38941595C029BA970A3EB0B03C3F336 +:105F30008943D35C6B71019B6344C3F38943D35C96 +:105F4000EB70019BA3EB0C03C3F38943D35C2B7170 +:105F5000049B4B457FF46AAF0DF50F7DBDE8F08FD4 +:105F6000C2ECFFFFD6B6FFFF42C5FFFF7AE7FFFF97 +:105F7000FADBFFFFABEAFFFF17D8FFFFDFC4FFFF2D +:105F80003BC1FFFF84F3FFFF33E3FFFFFDADFFFFE6 +:105F90002DE9F04FEFB0A2F1020E0993D0F84C3189 +:105FA000486D80330438009302F10C030B930CAB63 +:105FB0003EF9022F41F2A33850F8041F6FF4A26A91 +:105FC000BEF9404004334A43D0F880104C4342F6B7 +:105FD000C601520301FB04F740F6122102F580626C +:105FE00001FB04FC41F63741D6194C43674402EBF0 +:105FF0000C05BEF920C03F1BA2EB0409D0F8C0403D +:10600000A2EB470242F26237B4490A92026C02FBE9 +:106010000CFCBEF9602062430CEB02047C4340F6AA +:10602000BD0707FB0C4701FB024401F6E5214A438B +:10603000F1190191F11B08FB0C22BEF9307002919D +:106040002919BEF950600391291BBEF9104042F294 +:106050005265049109EB0201A9EB020240F6F269D4 +:1060600005910692026AD0F8E0105443026E57433D +:10607000D0F8A0205643BEF9702004EB070C4A4329 +:1060800004EB060B42F6B72105FB0BF501FB0CFCFC +:1060900093490CEB050808EB423801FB048841F6F4 +:1060A000140101FB0BFB8F4901FB04B1E41B09FB4D +:1060B00004F90794A9EB42398B4C49440891B9196A +:1060C0000AFB01F1A1EB423104FB071A874C04FBE8 +:1060D0000611E24442F6F84C854C2944F51B0CFBB2 +:1060E00005F505EB423C04FB06CC079C2244019CD1 +:1060F000DC4441F2995B4444921B0BFB0755E412CC +:1061000092004D4443F8044C019CA4EB0804E412B3 +:10611000C3F86841039C5444E4129C61039CA4EBC3 +:106120000A04E412C3F84C41059C0C44E4125C637D +:10613000059C611AC912C3F830110A9902EBE121DA +:1061400019650A99C2EBE1220899C3F81421069A4D +:106150006244D212DA66069AA2EB0C02D212C3F89B +:10616000F820049A2A44D212C3F88820049A521BB9 +:10617000D212C3F8DC20029A0A44D212C3F8A42037 +:10618000029A521AD212C3F8C0200B9A72457FF4B9 +:106190000FAF099B0CACA3F104093433049359F8F5 +:1061A000043F1C3454F81C7C789A03939E1807F122 +:1061B000100354F8041C019354F80C3C54F8145C7C +:1061C000A3EB010C41F637434A4F05EB010803FBF3 +:1061D0000CFC54F80C3C54F810ACEA1A40F61223AC +:1061E00054F808EC5A43019B0CEB020000EB4330DF +:1061F00054F80C3C07FB030042F6C603019F03FB67 +:1062000008F303EB47336FF41F7707FB01313A4F75 +:1062100007FB053340F273576144134454F8182CBC +:10622000029302EB0A0BA2EB0A0541F6EF5372440C +:10623000F24403FB0BFB789B7D43304FABEB050C2B +:106240005D4441F2A33B07FB0AFA009F0BFB02F2FD +:1062500043F6DE3B554494440BFB0E2201EB0C0E3F +:10626000A1EB0C015244CEF3894EC1F3894117F8DA +:106270000EE0039F07F803E0009B595CB1714119E0 +:10628000401BC1F38941C0F38940595C7170195CAE +:10629000029B71719918009BC1F38941595CB170DF +:1062A000029B9B1A009AC3F38943D35C42F6415286 +:1062B000337154F80C3CA3EB08035343019A03EBEE +:1062C0004233009AC3F38943D35CF370049B4B457C +:1062D0007FF465AF6FB0BDE8F08F00BFFCC8FFFF73 +:1062E000F0DBFFFF0BDEFFFF6EF2FFFF09B4FFFFE5 +:1062F000E6C9FFFF15C5FFFFF1B0FFFFE1D3FFFFC8 +:106300002DE9F04FD3B0496DA2F102090893043989 +:10631000D0F84C318033009302F10A0309930AABA1 +:1063200039F9027F043351F8042FB9F96040D1F8EC +:1063300080005743B9F94020D1F8C0507F03424351 +:1063400042F23170B9F920606C434243086C07F5A2 +:1063500080676403464307EB020CA7EB020EC4EB15 +:10636000463542F6B63202FB06F07A1901927A1BE4 +:106370000519A0EB4630029241F68D360CEB050272 +:10638000001B874F0392ACEB0502B9F910C00492D1 +:106390000EEB0002B9F950500592AEEB0002B9F9CC +:1063A00030E006920A6AD1F8E00002FB0CFC0A6EAB +:1063B00002FB0EFED1F8A0205543B9F970200CEB7A +:1063C000050B424342F6CF1002EB0B0800FB0EF424 +:1063D000744806FB08F840F65B0600FB0EF006FB6F +:1063E0000B8B40F6F70604EB0B0AA8EB040406FB44 +:1063F0000CA605EB020A07966B4E06FB0AFA00EBA9 +:106400000A0607FB0566694FAEEB050541F2511E12 +:106410005E4407FB0C0043F2C62B654F0BFB0244A6 +:1064200007FB0200ACEB0202544402EB050C4044B3 +:106430000EFB0CFC41F67E0E0EFB02CE5D4A02FB0B +:1064400005CC039D079A2A44D21243F8042C079ADC +:10645000AF1A019A7244FF12D212C3F804715A6142 +:10646000019AA2EB0E02D212C3F8EC20059A324434 +:10647000D212DA62059A921BD212C3F8D420069A7D +:106480002244D2125A64069A121BD212C3F8BC20BC +:10649000029A6244D212DA65029AA2EB0C02D2127C +:1064A000C3F8A420049A0244D2125A67049A121A1A +:1064B000D212C3F88C20099A4A457FF431AF089B69 +:1064C0000AA941F2A16BA3F1040C03F12C085CF8BA +:1064D000049F42F231745C9B40F6B6370A69E0458E +:1064E00009EB03060B680BFB02F0D1F814E003F193 +:1064F000100301F1180100EB4332C0EB4333A3EB6F +:10650000000351F8100C04FB00F0019302EB0005AE +:10651000A2EB000251F8140C51F80C3C00EB0E04F5 +:10652000AEEB030A07FB04F451F80C7C0744A0EB24 +:106530000300009B04EB4737A0EB0E0004EB4A344A +:1065400005EB070EA5EB0705CEF3894EC5F389458C +:1065500013F80EE05C9B09F803E0009B5D5D019B76 +:10656000757103EB4035009BC5F389455D5D019B6B +:106570007570A3EB40330098C3F38943C35C337158 +:1065800002EB0403A2EB0402C3F38943C2F3894282 +:10659000C35CB370835CF37099D153B0BDE8F08FE6 +:1065A000B0D0FFFFAFEEFFFF8BDEFFFF5CEAFFFF27 +:1065B0008CC0FFFFDFC4FFFF2DE9F04FB9B0941E80 +:1065C0000393D0F84C31486D06A98033043800930A +:1065D00002F10803059334F9026F043150F8043FC7 +:1065E000B4F940205E43D0F88030534342F29D42DC +:1065F000760302FB03F740F6FC5206F58066534330 +:1066000041F69A22F519FF1AA6EB030EA6EB4703F3 +:10661000B4F92060B4F960700493036C5E43D0F861 +:10662000C0305F43F319534341F2710202FB063657 +:106630006E4A02FB0733AA1B05EB060C056E0EEB38 +:106640000307AEEB030301920293B4F91020036A2F +:10665000B4F950E05A43B4F93030B4F970606B4388 +:10666000D0F8A05005FB0EFED0F8E050754341F67F +:106670006F6603EB05095B1B40F6E31506FB09FBA0 +:1066800042F6B3465D4306FB02B840F2147605EBD2 +:106690004E3A5643C5EB4E35D044A6EB0B06A5EB60 +:1066A0000335D31A564441F2CF2AA3EB0E0342F628 +:1066B000530E0AFB09F941F28C4A0EFB02FE9B00C5 +:1066C0000AFB02F2AEEB090EA2EB0902AEEB050EDD +:1066D0002A440CEB0805ACEB080CED1241F8045C05 +:1066E0004FEAEC25C1F8B05007EB0E05A7EB0E07FB +:1066F000ED12FF120D61049DC1F89C7003EBE525BE +:106700004D62049DC3EBE523C1F88830029B13441E +:10671000DB128B63029B9B1ADB124B67019B33449A +:10672000DB12CB64019B9B1BDB120B66059BA34218 +:106730007FF451AF039B06A941F64C1A4FF435691B +:10674000A3F1040C41F69A28243302935CF804EF79 +:106750001431429B51F8042C0EEB030651F80C3C0B +:1067600051F8147C98189B1A103751F808BC09FB93 +:1067700003F351F8105C0AFB00F003EB473201937E +:1067800041F271038418121A05EB0B0008FB00F0AC +:1067900003FB0505154B03FB0B0004EB050B009BEE +:1067A000641BCBF3894BC4F3894413F80BB0429BB1 +:1067B0000EF803B0009B1C5D34711418121AC4F358 +:1067C0008944C2F389421C5D74709A5C019BF2702B +:1067D0009B00009AC3EB4733C3F38943D35CB37088 +:1067E000029B6345B2D139B0BDE8F08F5CBAFFFFC0 +:1067F0002DE9F04FA7B04D6D049306A9D0F84C31A8 +:1068000080330293931E019305F110030593019BBE +:10681000043155F8040B1A46B3F912A0B3F92270EB +:10682000B3F932E0B3F94260B3F95280B3F9624090 +:10683000B3F9729032F9023F43434AEA07000192EA +:106840004EEA0000304348EA0000204359EA0000C5 +:1068500055D19B0041F8043CCB60CB61CB62CB634C +:10686000CB64CB65CB66059BAB42D0D1049B06A81D +:1068700041F2511841F67E0E1C1F03F11C0BDFF88C +:1068800074C154F8046F1030309B50F8101CA345AD +:1068900006EB030550F804AC50F8083C01F1100178 +:1068A00050F80C2C01EB0309A1EB030102EB0A03E6 +:1068B000029F08FB03F30EFB02320CFB0A3302EBD0 +:1068C000493AC2EB4932CAF3894AC2F3894217F8FE +:1068D0000AA0309F06F807A0029EB25CEA7003EBA4 +:1068E0004132C3EB4133C2F38942C3F38943B25C03 +:1068F0006A70F35CAB70C4D127B0BDE8F08FE86B71 +:1069000041F251125B034743D5F8BC0003F58063A5 +:1069100060433C18544341F67E0202FB0747354A68 +:1069200002FB0044E86F464303EB4630A3EB4633DB +:1069300007EB000CC21BD5F8DC00E7181B1BEC6949 +:1069400000FB09F9D5F89C0004FB0AFA00FB08F8E3 +:10695000E86D039242F2A15200FB0EFE08EB0A041E +:1069600009EB0E0630195043234A02FB0606234A60 +:1069700002FB040009EB0A04214A544340F68E123C +:1069800006EB040B044402FB09B943F20B0B1D4A4E +:106990000BFB0A4408EB0E0A44F2B31B02FB0AFA93 +:1069A000504456440BFB080046F2542808FB0E6E78 +:1069B0000CEB0406ACEB040CF6124FEAEC2441F8A5 +:1069C000046CCC6607EB0E04A7EB0E07E412FF1273 +:1069D000CC601C181B1ACF65E412DB12CC61CB64AF +:1069E000039B4B44DB12CB62039BA3EB0903DB123B +:1069F000CB6338E7DFC4FFFF3BC1FFFF84F3FFFF3A +:106A000033E3FFFFFDADFFFF2DE9F04FD0F84C0160 +:106A100095B04C6D951E00F1800E0432043C02AE20 +:106A20000093019235F9021F40F6B63354F8042F53 +:106A30000436B5F940005143D4F88020B5F92070F0 +:106A40004243490341F2A160B5F9309001F58061FC +:106A5000B5F9508042438818A1EB4201226C7A4379 +:106A600042F231777A43276A00EB020C801AB5F9BB +:106A700010207A43276E07FB09F9D4F8A07007FBB2 +:106A800008F802EB090A02EB0807A2EB0902A8EBDF +:106A9000090B5F43A2EB0802019B07EB4A3A920005 +:106AA000AB420CEB0A08ACEB0A0C07EB4B374FEA96 +:106AB000EC2C4FEAE828C6F838C002EBE12CC2EB18 +:106AC000E12246F8048CC6F808C0F26200EB070227 +:106AD000A0EB07004FEAE2224FEAE0207261306249 +:106AE000A0D1009B02A941F2A16C42F2317B1D1F93 +:106AF000143355F8049F0C311E9A51F8040CAB4224 +:106B000009EB020651F80C2C0CFB00F051F8084C74 +:106B100002F110021E9F0BFB04F400EB4238C0EBA5 +:106B2000423208EB040AA8EB0408A2EB0002CAF305 +:106B3000894AC8F38948C2F389421EF80AA009F8B5 +:106B400007A01EF80840B4701EF802207270D0D161 +:106B500015B0BDE8F08F00002DE9F04FD0F84C7172 +:106B60008BB04C6D961E07F1800002AD043C41F2E3 +:106B7000511841F67E0E019054F8041FB44636F9C0 +:106B8000020F0435294F624501FB00F0B6F9209051 +:106B9000216CB6F910A001FB09F1B6F930B000EB99 +:106BA0000109A0EB0100216A01FB0AFA216E01FB39 +:106BB0000BFB0AEB0B0108FB01F10EFB0A1A07FBAA +:106BC0000B110AEB493BCAEB493A01EB403945F856 +:106BD00004BCC1EB4031C5F814A0C5F80490E960CD +:106BE000CAD1181F02A90C3350F8046F0831149A47 +:106BF00051F8045C834206EB020C51F8082C019F0B +:106C000002F5004202EB0504A2EB0502C4F30944BD +:106C1000C2F309423C5D149FF455019CA25C8CF8C0 +:106C20000120E1D10BB0BDE8F08F00BFDFC4FFFF52 +:106C300070B54C6DB2F900102668B2F91020246AC4 +:106C40007143D0F84C01624304318030049D8C18AC +:106C5000891AC4F3C904C1F3C901065D1C686655ED +:106C6000425C5B685A5570BD03683822C3E9052150 +:106C70001B6818478B682DE9F04F4FEAC3188B69E2 +:106C800085B081460C46924603FB08F7002601F1C9 +:106C9000300B2269B24202DC05B0BDE8F08F921BD6 +:106CA0006169A0698A4265683044A8BF0A46E16903 +:106CB0002D1A091A9142A8BF11468D42A8BF0D4650 +:106CC000002DE9DD05FB08F32268039352F8262026 +:106CD000BAF1000F0AD0009359463B464846656B0F +:106CE000A847039B62691F441644D2E7039B594699 +:106CF0004846256B00933B46F2E700002DE9F84F2C +:106D00004FF6F07306460D4614469A42476802D97C +:106D10000121FFF7A9FF14F007031CBF0834E41A90 +:106D2000012D06D933680F223046C3E905251B68BB +:106D3000984707EB85084FF0000AD8F83400E8B907 +:106D400004F11009BAF1000F1ED11D4B53F8253084 +:106D5000C9F580359D4228BF1D4605EB090B30461D +:106D6000594600F0D1FB88B9632D4FEA550B03D883 +:106D700002213046FFF778FF5D46EEE78368A342C5 +:106D800011D282460068DAE70E4BDFE7FB6C254440 +:106D90005B44FB6400238560C0E90033BAF1000F57 +:106DA0000BD1C8F8340043681A1910334260826866 +:106DB000121B82601844BDE8F88FCAF80000F2E7A1 +:106DC0004C9703084497030801292DE9F041044634 +:106DD0000D4616461F46D0F8048005D003680F22E2 +:106DE000C3E905211B6898473C2229462046FFF746 +:106DF00085FF0023069A03608362D8F84830066254 +:106E0000C362C0E90127079AC260C8F84800BDE81C +:106E1000F08101292DE9F04104460D4616461F4632 +:106E2000D0F8048005D003680F22C3E905211B6850 +:106E300098473C2229462046FFF760FF0023069A28 +:106E400003608362D8F844300662C362C0E9012758 +:106E5000079AC260C8F84400BDE8F08101292DE915 +:106E6000F04106468846456810D903680F22C3E9F9 +:106E700005211B68984705EB88040022E36BE26359 +:106E80000BBB616B636369BBBDE8F081F3D16C6CD4 +:106E9000002724B9AF6C6C645FB9AF64EBE7A36AF9 +:106EA0002BB1A36B04F130013046A7629847E46A26 +:106EB000EFE7BB6A2BB1BB6B07F130013046BC6218 +:106EC0009847FF6AE8E7D3E900879A681946304691 +:106ED000174410373A4600F020FBEB6CDB1BEB64E9 +:106EE0004346CDE78B683046D1E900741C4410342A +:106EF000224600F00CFBEB6C39461B1BEB64C2E72F +:106F000010B504460121FFF7A9FF00212046FFF735 +:106F1000A5FF20466168542200F0F9FA00232046BC +:106F20006360BDE8104000F004BB2DE9F743D718BB +:106F300015464A680C46DDF82880BA4204D3CA6870 +:106F40009A4201D30B6833B90368172201905A6142 +:106F50001B6898470198A369AB4203D82269134480 +:106F6000BB4221D2A36A33B90368472201905A6118 +:106F70001B6898470198636A3BB101222146019042 +:106F8000FFF778FE002301986362A369002221467F +:106F90000190AB4229BF23692B46FB1A23EAE37316 +:106FA000A361FFF767FE0198E669BE421CD2AE42BC +:106FB0000CD2B8F1000F1BD00368172201902E46A7 +:106FC0005A611B6898470198E76102E0B8F1000F29 +:106FD000FAD1226AB2B1A2684FEAC219A269B61AFE +:106FE000BF1ABE42236805D3B8F1000F0DD10EE0E1 +:106FF0002E46EEE753F826004A46002101361DF0E2 +:10700000DDFCEEE7B8F1000F09D001236362A3694C +:107010002068ED1A00EB850003B0BDE8F08303683B +:1070200017225A611B689847F1E74FF6F0739A42AE +:107030002DE9F041064688461446476802D90321E7 +:10704000FFF712FE14F007031CBF0834E41AB8F16E +:10705000010F06D933680F223046C3E905281B68A3 +:10706000984704F11001304600F054FA054618B96B +:1070700004213046FFF7F8FDFB6C07EB880105F1B2 +:10708000100010332344FB64CB6BC5E900340023AC +:10709000AB60CD63BDE8F0812DE9F047D7011D4617 +:1070A0004FF6F07380468A4646689F42B3FBF7F47A +:1070B00004D9036848225A611B689847AC424FEADA +:1070C000850251464046A8BF2C4634650026FFF78E +:1070D00015FE8146AE4202D34846BDE8F087AB1BA1 +:1070E000514640469C4228BF1C4604FB07F2FFF76E +:1070F0009CFF09EB8603264409EB86029342E9D004 +:1071000043F8040B3844F9E72DE9F0471D464FF6E4 +:10711000F07307468A469A4290464668B3FBF2F4FB +:1071200004D9036848225A611B689847AC424FEA69 +:10713000850251463846A8BF2C4634650026FFF725 +:10714000DDFD8146AE4202D34846BDE8F087AB1B69 +:10715000514638469C4228BF1C4604FB08F2FFF704 +:1071600064FF09EB8603264409EB86029342E9D0CB +:1071700043F8040B4044F9E72DE9F843D0F80480C4 +:1071800000250746D8F844302E4603BBD8F84830CF +:1071900043BB002E19DDD8F84C302A46314638461C +:1071A00000F0BEF985422ADD90FBF6F6012EB8BF4D +:1071B0000126D8F844404FF0010900250CBBD8F84F +:1071C00048504FF00109002D41D1BDE8F8831A68FD +:1071D00032B9D3E9022101FB0266596801FB02556D +:1071E000DB6AD2E71A6842B9D3E90221514306EBC0 +:1071F000C11659684A4305EBC215DB6AC8E7274E3A +:10720000D7E72368B3B96268D4E90201531EB3FB20 +:10721000F1F301339E420FDB226123690121A26851 +:107220003846FFF771FFD8F850302060E56165629D +:10723000C4E90535E46AC1E7714342433846216138 +:1072400004F1300100F06EF9C4F82890E5E72B68EE +:10725000B3B96868D5E90221431EB3FBF1F30133EA +:107260009E420FDB28612B690121AA683846FFF78F +:1072700013FFD8F850302860EC616C62C5E9053422 +:10728000ED6AA0E7714342433846296105F13001B8 +:10729000D20100F047F9C5F82890E4E700CA9A3B0C +:1072A0002DE9F04F02EB030815464A6887B00C46FB +:1072B0004245DDF840A004D3CA689A4201D30B6866 +:1072C00033B90368172203905A611B6898470398E3 +:1072D000A369AB420CD822691344434508D3E6693D +:1072E0004645C0F08380BAF1000F40F0AA80AAE0C2 +:1072F000A36A33B90368472203905A611B68984711 +:107300000398636A7BB1D4F808B04FF00009A36911 +:1073100004F1300103FB0BF322694A45D4E9067EF0 +:107320003DDC00236362A2694FF00009236904F188 +:107330003001AA42D4F808B02ABFA8EB03032B46B9 +:1073400023EAE373A3610BFB03F32269E6694A4571 +:10735000C5DDA2EB09026769BA42A8BF3A46A76930 +:107360004F44A6EB070C9445A8BF94466268D61B11 +:107370006645A8BF6646002EB1DD06FB0BF6226807 +:10738000276B009652F829200593CDE90301B847F1 +:10739000059B626933449144DDE90301D5E7A2EB23 +:1073A0000902666907EB090CB242A8BF3246AEEB90 +:1073B0000C069642A8BF16466268A2EB0C07B742BD +:1073C000A8BF3746002FACDD07FB0BF72268666BC2 +:1073D000009752F829200593CDE90301B047059B9A +:1073E00062693B449144DDE9030195E7AE420DD269 +:1073F000BAF1000F20D00368172203902E465A617D +:107400001B6898470398C4F81C8002E0BAF1000F8B +:10741000F9D1226A92B1A169A768761AA8EB01088E +:1074200046452368BFF45FAF53F826003A46002173 +:1074300001361DF0C3FAF3E72E46EAE7BAF1000F72 +:1074400009D001236362A3692068ED1A00EB85006F +:1074500007B0BDE8F08F036817225A611B68984790 +:10746000F1E70000002370B50546436000F05FF8C7 +:1074700054210646284600F047F8044648B92846F5 +:1074800000F057F82B6838222846C3E905241B680A +:107490009847124B2360124B6360124BA360124B50 +:1074A000E360124B2361124B6361124BA361124BD9 +:1074B000E361124B2362124B6362124BA3624FF4DF +:1074C0008033C4E90B630023A36323646363E36332 +:1074D000C4E911335423E3646C6070BDFD6C010892 +:1074E0002B7001080971010899700108136E0108D9 +:1074F000C96D010879710108A17201082B6F01089B +:107500005D6E0108016F01080846F2F707B90846E9 +:10751000F2F79AB90846F2F701B90846F2F794B9BA +:1075200010467047036833225A611B6818470020D1 +:10753000704770472DE9F84F90F858300121D0F886 +:10754000E0510446012B4FF4FF7816BF00234FF49F +:10755000FF761E46EB61436806F580729F68836F75 +:10756000B847D5F814C005F11C0E0023A861A26F1E +:107570009A4201DCBDE8F88F5EF8041F9F00A869FD +:107580009CFBF1FC26B150F82320FF3240F8232069 +:1075900001F1FF3901F1FE0AC25900204FEA490901 +:1075A00001469AFBF9F78F420ADB10FB0CFB02F84D +:1075B00001B00131B1F5807FF5D13EB90133D6E795 +:1075C000013008FB00A797FBF9F7ECE7114602F141 +:1075D000FF00A2F1FF0792F8009001F8019DB94267 +:1075E00092F8FF9000F8019FF5D1E7E72DE9F74FFA +:1075F000D0F878C09846D0F8E0312CEAEC79D3F88E +:1076000018E0036F00200193404502DB03B0BDE8A2 +:10761000F08F52F82040019B51F8205004EB030AF0 +:1076200054450FD10130EFE715F803B05EF8237031 +:10763000013317F80B703E446345F5DB4D4404F805 +:10764000016BEDE700231E46F6E72DE9F047D0F881 +:10765000E041D0F870900020A469D4E900CED4F8BD +:107660000880984201DBBDE8F08752F8205051F8BD +:10767000204005EB090A554504F1030401D101300E +:10768000EFE714F8036C14F8027C1CF806601EF88F +:107690000770374414F8016C18F806603E4405F88A +:1076A000016BE8E72DE9F04F9A468BB0D0F8E03156 +:1076B000CDE908129A6911680491516892680591A0 +:1076C00000210692026F0792514502DB0BB0BDE824 +:1076D000F08F1A6B0998079C50F821509001D3F84D +:1076E0003480029005EB040E00240192D3E90E9041 +:1076F0000390089850F82100754500F1030006D169 +:10770000019A0131013202F00F021A63DCE7029E96 +:1077100010F803CC06EB8406049A013458F806707E +:107720009444059A04F00F041CF807B010F802CC3A +:1077300059F806709444039A1CF80770965910F88B +:1077400001CC5F44069A94441CF806603E4405F858 +:10775000016BD1E7026FF8B50232D0F8E061044660 +:10776000002755004036A36FBB4200DCF8BD6368BC +:107770002A46012120465B680137984746F8040FE6 +:10778000F1E7704703682F225A611B681847000011 +:107790002DE9F047D0F8E05104462B69C0F8883055 +:1077A0006B69C0F8843090F85830012B0BD0022B55 +:1077B0005ED0002B74D1836F032B0CBF3C4B3D4B31 +:1077C0006B60BDE8F087816F3B4B3C4A032918BFD3 +:1077D00013466B6000232B63EB690BB9FFF7AAFE1E +:1077E0006D6B002DEDD1D4F8E07107F11C08464611 +:1077F000A36F9D42E5DA56F8049F424600239D425E +:1078000007D052F8041F894530D107EB8303586B2A +:1078100048BB63684FF48062012120461B6898478B +:1078200009F1FF3200F13C01DFF898C0520200F28A +:107830003C4AA1F1400EE14619F8013B5B00C3F15F +:10784000FF03D3EB032345BF5B4293FBF2F393FBB0 +:10785000F2F35B424EF8043F8E45EDD140310CF11E +:10786000100C8A45E5D101357061C1E70133C6E7E7 +:10787000134B6B6000236B656B6C0BB9FFF76AFFF2 +:10788000226F4035002702325600A36FBB4298DDBD +:107890003246002155F8040F01371DF08FF8F4E748 +:1078A00003683122BDE8F0475A611B68184700BFE2 +:1078B0004B760108ED750108A5760108017A0108EB +:1078C000C9780108609703082DE9F04F91B0056F62 +:1078D000D0F87890A2F1040BD0F8E041CDE90D1377 +:1078E000D0F84C310A936B1E059303FB09F3089300 +:1078F0006B1C5B00099300230093009A0E9B9A4235 +:1079000002DB11B0BDE8F08F00212A465BF8040FBE +:107910001DF054F804F1400300210493C9F1000361 +:107920000F934945626D06DBB2FA82F2009B520961 +:1079300001336265E0E700980D9B53F82030DBF8D7 +:10794000000003EB010E049B53F804CF049312B321 +:10795000089B9E44059B18440F9B0793099B9C44DE +:107960004FF0FF3302936746A369039553F8213024 +:107970000B93236953F821300C93029B5B00019316 +:10798000002398460693039A4AB9019A01316A4343 +:107990002CF80230C5E70123CDF81C90E2E7019AEC +:1079A00037F902A00A9AD0449EF800A008F108080E +:1079B00002EB28180B9A18F80AA090F8008012F829 +:1079C0000A20904416460C9A80F8008012F806802F +:1079D000079AAAEB080A9644029A0AEB4A0810444E +:1079E000039A434408EB4A08013A3B800392069B02 +:1079F000019A4344CDF818A008EB4A081744C2E79F +:107A00002DE9F04F89B08846D0F8E091141F079314 +:107A10000027836FD0F870A00193079B9F4202DB81 +:107A200009B0BDE8F08F5246002154F8040F1CF055 +:107A3000C5FF4946002051F8303F9A010392019A50 +:107A4000904206DB0133013703F00F03C9F83030F1 +:107A5000E3E7D9F81820002658F8275052F82020DC +:107A600005EB000C2568059251F8042F02920AEBF1 +:107A700005020692069A954201D10130DFE72A7885 +:107A80009CF800E00492029A02EB860B039A0136FE +:107A90005BF802B0059A06F00F069644049A1EF8A9 +:107AA0000BE0724405F8012B019A9444E2E70000D0 +:107AB0004368582201211B682DE9F04F85B0044628 +:107AC0009847684BC4F8E0010360674B8360674BDD +:107AD000C360002343644363A36F042B07DD236863 +:107AE00039200422C3E905021B6820469847236E0B +:107AF000B3F5807F08DD23683B214FF48072204678 +:107B0000C3E905121B689847D4F8E0610123D4F853 +:107B1000788006F12009D4F860A09B46013301214A +:107B20001A46884549DC9245F7DABBF1010F06D1C8 +:107B300023683A212046C3E905121B68984706F1DD +:107B40001C07002301253A46984539DCDFF820C19F +:107B500000210B46984539DC0029F9D1A16F236833 +:107B600003295A6849D19D61316AD961716A1962E4 +:107B7000B16A5962602159610121204690476368CA +:107B80002A460121D3F808802046A36FC047A846A3 +:107B900000220190A36F9A4233DB019B2046C6E985 +:107BA0000435FFF7C7FC94F85830022B56D1204615 +:107BB00005B0BDE8F04FFFF7CDBD5A430131B0E746 +:107BC0000BFB05F5013342F804BFBDE794F829200B +:107BD000022A0CBF5CF82300184659F820B095FB28 +:107BE000FBF20BFB02220BF1010E9245B4DB0133D9 +:107BF0001546012149F820E0ACE76121C3E90515EC +:107C0000BAE757F804AF0AF1FF3302935B1098FB11 +:107C1000FAF9039300239B469A4502DC0132C846D9 +:107C2000B8E70398C3EB0321DC460144029891FBBB +:107C3000F0F10846AC450EDB0133CB44ECE701998B +:107C400051F8221071440EF1010E01F80C00F145BB +:107C5000F5DCC444EEE74FF0000EF8E705B0BDE8F0 +:107C6000F08F00BF917701088377010885770108BD +:107C700054970308D0F8E021D0F870C02DE9F04304 +:107C8000976900254FF0020E4FF6FF789D4201DB09 +:107C9000BDE8F08351F82500664603300EB9013582 +:107CA000F4E710F8022C013E10F8039C033010F8A2 +:107CB000044C92084FEAD9099201E40857F8299038 +:107CC0001EFB042439F80420013292B2002A08BFB6 +:107CD000424629F80420E1E72DE9F04FADF2CC5DF2 +:107CE000804600250B93D0F8E031D0109B6940010D +:107CF000CDE90912891006930B9B00F1020A490194 +:107D00001E309C10D8F8843001F104091C31029314 +:107D1000640109EB010304F1040B1C345B100393B1 +:107D20000AEB00035B1004930BEB04035B10059359 +:107D30006FF000430193029BAB4243DC002272A927 +:107D400032A81346029C9C4200F39D80802372A9B6 +:107D50006FF00040013B41F8040BFBD132A90891C0 +:107D60000193019B934240F09780099B12A923F055 +:107D70000300069B03EB80050B9B23F003020A9B89 +:107D8000284623F0070310309B0103EB420355F80C +:107D9000044B01F120071C4426460A4601F1040C5D +:107DA00012F8011B0131624526F8021BF8D1BA42D4 +:107DB000114604F14004EFD18542E8D10DF2CC5DCB +:107DC000BDE8F08FD8F888703B685A5D91452BDD8F +:107DD000A2EB090C521A0CFB0CFC52437B685B5D56 +:107DE0009A4534DDA3EB0A0E0EEB4E0E0EFB0ECCC5 +:107DF0001B1A03EB430303FB0323BA68525D93454D +:107E000034DDA2EB0B077F0007FB07CC121B5200EF +:107E100002FB023372AA42F825C00135019A9A4248 +:107E2000A8BF1A46019286E7914206DAA2EB010C3E +:107E3000A2EB09020CFB0CFCCFE7039B4FF0000CFC +:107E40009342ACBF521AA2EB09025243C6E79842D2 +:107E500008DAA3EB000E0EEB4E0E0EFB0ECCA3EBDE +:107E60000A03C6E7049E9E42F9DBC1E7944206DAA4 +:107E7000171B7F0007FB07CCA2EB0B02C7E7059E91 +:107E80009642F9DBC2E751F8044B019DA542A4BF1D +:107E900083540132013355E7089B0DF1480ED8F8A1 +:107EA000881013F8014B08930B681D5D4B688968B7 +:107EB000A9EB0505185D095DAAEB0000ABEB01011C +:107EC00000EB400349005B4305FB0533043501FB30 +:107ED0000133083104932B010C934823584300F1DC +:107EE00090030D934B010021079300F519630F9345 +:107EF000079B03F500630E9372ABF4460D980B4499 +:107F000005930C9B0B441093049B039323E03B4687 +:107F100053F8047F11971F46119BAB42C4BF3B46E9 +:107F20001D603544C8BF029B06F50076C8BF1C70B3 +:107F3000029B013302930E9BB342E8D1059B0CF1E7 +:107F4000040C10330593039B034400F590700393D6 +:107F50000F9B984207D0059B079E043B039DCDF8DD +:107F600008C01F46D3E704988031109B0EF1200E05 +:107F7000B1F5007F18440490BED1019B0133EFE6B8 +:107F80002DE9F04F9A46D0F8E03185B088469B69DC +:107F9000914600250093036F0193554502DB05B020 +:107FA000BDE8F08F59F8256058F82540019B03344F +:107FB00006EB030B5E4501D10135EEE714F803CC67 +:107FC00014F8027C4FEADC01009A4FEA970E14F88D +:107FD000013C52F821C0DB080CEB8E1737F813C0B8 +:107FE000BCF1000F06D1724603930290FFF774FEB6 +:107FF000DDE9020337F813300334013B06F8013B97 +:10800000D8E72DE9F04FD0F8E0A19FB0D0F870B0DC +:108010004FF000091B93DAF818301593D0F84C3163 +:108020000893DAF828300993D0F88830CDE919128E +:108030001A6816925A689B68179218930BEB4B03B9 +:10804000033B109306230BFB033312931B9B9945B1 +:1080500002DB1FB0BDE8F08F199B53F82930019364 +:108060001A9B53F829300393DAF820300293DAF898 +:108070002430002B36D0109B019A1A440BF1FF33A9 +:108080000192039A1A44029B0392129A13446FF0CE +:1080900002020293002306924FF0FF320D92CAF8BB +:1080A00024300024069B029E21465D002246CDF826 +:1080B0001CB0AB1C0A9413932B1D14932346CDE9DB +:1080C0000444CDE90B44079F8FB90BFB05F5029AD9 +:1080D000029B09F1010904992B445153059A9C8094 +:1080E0005A80B3E7012303220D930692D7E736F9AE +:1080F00005C077199C44139B1197F35E0CF1080C93 +:10810000099F1A44149BF35E08320B4412114FEA84 +:108110002C11083357F8222057F821101B1157F85B +:108120002330019F97F800C0089F39443A4411F862 +:108130000C100E9101994978525C08991746019AE2 +:108140000B4492789B5CBA100F930E9BD910159B31 +:1081500053F8213003EB82180F9BDB1038F813C063 +:10816000BCF1000F05D1CDE91C03FFF7B5FDDDE93A +:108170001C0338F81330039A013B05991370169AC3 +:1081800012F803C00E9AA2EB0C0C179A12F803E037 +:10819000189AA7EB0E0E019F12F803800F9B049A0A +:1081A000A3EB08080CEB4C031A4403EB4C0332809E +:1081B0000A9A1A4403EB4C0304920EEB4E0211444C +:1081C00002EB4E0271800B99114402EB4E020591B5 +:1081D00008EB48010C4401EB4801B480069E0C9C5E +:1081E0003744039E0C4401EB480101970D9F3E4428 +:1081F0000396079E013ECDE90BE80796119ECDF848 +:1082000028C060E738B5436840F2FC720121D0F81D +:10821000E0411B68984700F57F7300F57E7100F51B +:108220008062A36200235C4241F8043F013342F8BC +:10823000044D102BF7D100F5876400F570716FF0D5 +:1082400011025D4244F8043F41F8045D02F001056B +:10825000013A2B4412F1320FF3D100F5976100F58A +:1082600050725C4241F8043F42F8044D8242F9D119 +:1082700038BD7047D0F8E0310122DA617047000064 +:1082800073B5D0F8E051044690F85830AE69002B31 +:1082900050D0022380F8583089B1284B6B60284BAE +:1082A000AB60341F7C3654F8040F4FF48052002129 +:1082B0001CF084FBA642F6D10023EB612FE0214B9A +:1082C0006B60214BAB60D4F88430002B29DC3A2260 +:1082D00023685A6101229A6120461B68984794F8E6 +:1082E0005830022B18D10623226F5A432B6A0C32C6 +:1082F0003BB963680121204601925B689847019A67 +:1083000028620021286A1CF059FBAB6A13B9204689 +:10831000FFF778FF00236B62EB69002BC1D102B03D +:1083200070BDB3F5807FDADD3B2223685A614FF4DC +:108330008072D0E70029B0D1044BC1E7757C0108F9 +:108340007B8501080380010873820108817F010891 +:108350002DE9F74FD0F818C00B694D694FEA430873 +:108360000193D1E90070D1E902E487423B4634DB56 +:10837000A64572466EDB019EAE42C0F2C180B64693 +:10838000A61AC71A4FEA4E0A4FEAC608FF0008EBC2 +:108390008608A5EB0E0608FB08F8360107FB0787E1 +:1083A0004FF0000806FB06768E61984280F2E3806B +:1083B000C1F81C8003B0BDE8F08F08EB891A5CF8A7 +:1083C00023205244DDF804A0554508DA09F10109DB +:1083D0004C45F2DA013398420FDBF146F8E732F808 +:1083E00002BBBBF1000F05D098420B60C0DD074611 +:1083F000F1460FE00AF1010AE6E73B46F7E708EB32 +:10840000891A5CF827205244DDF804A0554507DAA4 +:1084100009F101094C45F2DA013F9F42A8DBE7E789 +:1084200032F802BBBBF1000F02D038464F609FE725 +:108430000AF1010AEAE75CF82970DDF804A007EB0D +:108440000B0655450ADA09F101098145F3DD0132D0 +:10845000944211DB994608EB821BF6E736F8027B63 +:108460003FB194428A6086DDA646994608EB8E1B92 +:108470000EE00AF1010AE4E77246F5E75CF82970BC +:10848000DDF804A007EB0B06554509DA09F10109EF +:108490004845F3DA0EF1FF3E9645FFF66CAFE4E790 +:1084A00036F8027B1FB17446C1F80CE063E70AF1AD +:1084B000010AE9E75CF8287091465744A1450BDDB5 +:1084C00008F101084045F5DA0EF1010E75451ADB99 +:1084D0004FEA4E0A9846F5E74FEA891B37F80BB08A +:1084E000BBF1000F09D07545C1F810E07FF748AF28 +:1084F0002F464FEA470A984610E009F10109DDE7E7 +:10850000DDF804E0E4E7DDF804E0F1E75CF828607A +:10851000914656444C4508DA08F101084045F5DA21 +:10852000013F7745FFF62CAFE3E74FEA891B36F8AA +:108530000BB0BBF1000F02D03D464F6120E709F1BF +:108540000109E7E70AEB87195CF82360A9F1020942 +:108550004E44F1464D4504DA0137BC42F2DA0133AC +:1085600023E736F802BFBBF1000F01D008F1010884 +:1085700009F10109EEE71746EFE72DE9F04FD0F8D2 +:10858000E0318BB001214FF0010B02931B69009089 +:10859000C0F88830029B5B690193019A43685201DD +:1085A0001B68984700231F223F21836004464261D5 +:1085B000A0462746C0E90313C0E90032009B0146EC +:1085C000D3F8E0A15046FFF7C3FE019B5B4524DCD6 +:1085D0000021009BD3F8E0319B690393D8E9007335 +:1085E0000493D8F808300593D8F80C300693D8F8DF +:1085F00010300193D8F814300793019B5B00099366 +:1086000000239A4699461A460498B842C0F29780C9 +:10861000F800059E043008907BE0019BB3EB4B0F04 +:108620004EDB0021224608460E46D369B34204DDE4 +:108630009569002DC4BF11461E4601302032834586 +:10864000F3D10029C5D007F1200307EE903A4B681B +:108650007B62CA68FA624A697A630A683A628A681F +:10866000BA62086938630A688E6803929A1A4FEAF8 +:10867000C209CA680492921B4FEAC20C0CEB820C2E +:108680004A69A2EB000EBCEB0E1F4FEA0E15C0F2BA +:108690008A80E14523DD039A134403EBD3735B1017 +:1086A0004B6001333B6250460BF1010BFFF750FE6C +:1086B00017EE901A504617EE907AFFF749FE84E7BE +:1086C000002123460A4608469E6901328642C4BFFD +:1086D00019463046934503F12003F5D1B1E7049BD9 +:1086E000334403EBD3767610CE600136BE62DAE710 +:1086F00009984FEA860E039C00EB86100EF1020EDD +:1087000054F82740DDF804C02044079C644505DA8E +:1087100001360698B042EBDA013775E730F8024BC4 +:1087200054B1089D22440EFB04AA05FB04994FEAAC +:10873000CC05043504FB05330CF1010CE5E700988A +:1087400009EB62090AEB620A08F12008D0F88800F8 +:1087500003EB620399FBF2F9006800F801900098BE +:108760009AFBF2FAD0F88800406800F801A000985F +:1087700093FBF2F3D0F888008068435401315945E7 +:108780007FF427AF009B62220098C3F884101B6817 +:10879000C3E905215B68012198470123029AD3614F +:1087A0000BB0BDE8F08FA9453FF775AF024402EB6F +:1087B000D27252104A6101323A6374E7F8B54368E5 +:1087C0002C22012104461B689847304BC4F8E00175 +:1087D000054603602E4BC360002303628362A36FD0 +:1087E000032B05D02368302220465A611B68984726 +:1087F00063680026802201211B6820469847A861F3 +:1088000063684FF48052AF6901215B682046984746 +:10881000B8510436802EF3D10123EB61E36E002BB7 +:1088200031D0266E072E25DC3A2223685A610822B1 +:108830009A6120461B6898476368324601212046AA +:108840009F680323B847C5E9040694F85830E3B19C +:108850000223226F2046012184F8583006235A4310 +:1088600063680C325B68984728622046BDE8F84090 +:10887000FFF7C8BCB6F5807FDEDD3B2223685A6176 +:108880004FF48072D4E72B61DFE7F8BD81820108E5 +:10889000758201084318013B93FBF1F070474B1EB2 +:1088A000184490FBF1F301FB1303C01A704770B535 +:1088B000049E00EB810402EB8305002E00DC70BDFA +:1088C000059A013E54F8041B55F8040B1CF051F9AD +:1088D000F3E70B46D201014618461CF04AB940BAEC +:1088E00080B2704700BA704743798B421FBF0023A4 +:1088F0004171837103817047F8B5871C04460D46AA +:108900001646442F06D9074B40F2AE520649074897 +:108910001BF020FF330AB8B22B550134A4B22E55F8 +:10892000F8BD00BF4C9D0308D29D03089959030868 +:10893000F8B51E46023304460D4650FA83F3174637 +:10894000442B06D9064B40F29A52064906481BF0C2 +:1089500001FF631CA01C2F559BB280B2EE54F8BDE2 +:108960004C9D03080D9E030899590308432870B5D0 +:1089700004460D46164606D9054B40F2A652054957 +:1089800005481BF0E7FE601C2E5580B270BD00BF8D +:108990004C9D03084F9E030899590308F8B5071D1D +:1089A00004460D461646442F06D90B4B40F2B752EB +:1089B0000A490B481BF0CEFE330E320C2B55631CBC +:1089C000B8B29BB2EA54A31C0334320A9BB2A4B2DD +:1089D000EA542E55F8BD00BF4C9D0308849E030841 +:1089E000995903082DE9F7430E46904699460546E6 +:1089F00058B92F463E4B40F269723E493E481BF043 +:108A0000A9FE384603B0BDE8F08341B9384B40F2C7 +:108A10006A723A49374638481BF09CFEF1E74FF43A +:108A200020724FF49A71362003F0EEF807460028C2 +:108A3000E7D04389B3F59A7F06D22D4B40F271728D +:108A40002F492D481BF086FEB8F1030F02D1737930 +:108A5000032B07D1B3792B4C13B91BF05BFD2060BE +:108A6000236833607C684FF49A72002120461BF023 +:108A7000A5FF01232370637095F83030A370306830 +:108A8000FFF730FF4FF4C873606023FA08F3DB0789 +:108A900006D4B8F1030F05D17379043B012B01D83B +:108AA0006B68E36005F1290304F11B022F3513F80D +:108AB000011FAB4202F8011FF9D16FF07D02632361 +:108AC00004F1F001002084F8ED20532284F8EC300A +:108AD00084F8EE20352284F8EF3001230191FFF76E +:108AE00027FF42460199FFF741FFA9F8000088E7F8 +:108AF0004C9D0308BE9E030899590308DD9E030898 +:108B0000FB9E03083CAE0120F8B50446FF2308464F +:108B10001746661CC4F143050B550021B6B2ADB231 +:108B2000442E304494BF2A4600221BF047FF442EB7 +:108B300004F1F101384688BF00252944BDE8F8401A +:108B400089B203F0F3B800002DE9F0410023446A34 +:108B500086B0064606212046E3610122FFF7C4FEE7 +:108B60000DF1160321463046FFF73CFF054600286D +:108B700039D0416802233922BDF81600F031DFF800 +:108B8000B48003270391FFF7D3FE328D0399ADF82C +:108B90001600FFF7B1FE039903233722ADF8160044 +:108BA000FFF7C6FE0399ADF81600013F18F8012B38 +:108BB000BDF816000391FFF7D9FE17F0FF070399E0 +:108BC000ADF81600F1D12A46FFF79EFF164B174865 +:108BD0002946174ACDE900634323006806F05CFE8E +:108BE000284602F0A9FFA3790020FF2B1CBF013308 +:108BF000A371A279052A97BF01234EF66023934003 +:108C0000C3EB431298BF03EB82034FF4FA729CBF8D +:108C1000DB009BB203F2F3139BB2B3FBF2F32381AD +:108C200006B0BDE8F08100BF28A503080CAE012006 +:108C30002CA50308B5A0030838B5446A05460821E9 +:108C400000222046FFF750FE04F11C01284601F0E7 +:108C500093F9A379FF2B1CBF0133A3710123238157 +:108C600038BD000013B5044648B93B4B40F21542ED +:108C70003A493B4802B0BDE810401BF06BBD406A6A +:108C800020B9354B40F217423649F2E700234382C0 +:108C9000836A5A1C0CD01E33B3F5701F36BF3C22BA +:108CA0004FF6FF73B3FBF2F39AB2002B43D08282EC +:108CB000C36A591C0ED01E33B3F5701F36BF3C2259 +:108CC0004FF6FF73B3FBF2F39BB2012B38BF0123C6 +:108CD0004381C381036B5A1C0ED01E33B3F5701F42 +:108CE00036BF3C224FF6FF73B3FBF2F39BB2012B6E +:108CF00038BF012383810382838942899A4202D348 +:108D00000BB100234381C379C3B1036A426A009364 +:108D1000019222B9C269134043F0807301930A2182 +:108D20006A46FFF7E1FD00F11C0101AB204602F0AD +:108D3000EFFC02B010BD01238382B9E790F91C203B +:108D4000037F002A06DAC02B4FF6FF7328BF6FF0AF +:108D50007F43DBE7FF23D9E74C9D03083B9F0308D4 +:108D600099590308549F030838B5154D2B78F3B96A +:108D7000144C23682BB1144BE522144914481BF002 +:108D8000E9FC06F0D5FE2060B0B1427A114942F00C +:108D900020024272442206F01FFD43220D49206842 +:108DA00006F052FE00220C49206806F089FE2B785E +:108DB000002001332B7038BD4FF0FF30FBE700BFC0 +:108DC00010AE01200CAE01204C9D03086C9F0308DF +:108DD0009959030828A50308E990010838B50A4DF8 +:108DE0002B782BB9094BFF2209490A481BF0B2FC2A +:108DF0002C78013CE4B22C7024B9074D286806F0A9 +:108E000071FE2C6038BD00BF10AE01204C9D0308E0 +:108E1000919F0308995903080CAE01202DE9F041F8 +:108E2000446A86B0032106462046FFF75DFD0A46E8 +:108E30000DF1160321463046FFF7D4FD0546002804 +:108E40004AD0416802233922BDF81600F031DFF81C +:108E5000C8800391FFF76CFD4FF410720399ADF8D1 +:108E60001600FFF749FD042332220399ADF81600DE +:108E7000FFF75EFD0746ADF81600E069FFF732FD2B +:108E8000039902463846FFF789FD039903233722E9 +:108E9000ADF816000327FFF74BFD0399ADF8160058 +:108EA000013F18F8012BBDF816000391FFF75EFD96 +:108EB00017F0FF070399ADF81600F1D12A46FFF726 +:108EC00023FE134800964323124A2946006806F001 +:108ED0007BFD284602F030FEA379FF2B1CBF013337 +:108EE000A371A379092B96BFC3EB431242F210730F +:108EF00003EB82034FF4FA729CBFDB009BB203F2D8 +:108F0000F3139BB2B3FBF2F3238106B0BDE8F0810B +:108F10000CAE01202CA50308B5A0030838B500232A +:108F2000164D0446C0E90833EB7813B1144BDB68E7 +:108F300083622B79D3B1124B1B69E3626B79C3B1A6 +:108F40000F4B5B6923630B69E361AB792BB10C4B6E +:108F50009869FFF7C7FC01232062E371EB7923B125 +:108F6000074BD869FFF7BEFC606238BDA36A5B0897 +:108F7000E3E7A36AC3EBC303DB08E3E711AE012019 +:108F80001CAE01202DE9F043074685B048B94E4B91 +:108F900040F277124D494E4805B0BDE8F0431BF052 +:108FA000D9BB446A24B9484B40F279124949F2E7E7 +:108FB00001212046FFF798FC03220DF10E03214604 +:108FC0003846FFF70FFD064600285ED045680223AD +:108FD0003922BDF80E00F035DFF808912946FFF779 +:108FE000A7FC3A8D2946ADF80E00FFF785FC042357 +:108FF00032222946ADF80E00FFF79AFC8046ADF804 +:109000000E00E069FFF76EFC294602464046FFF776 +:10901000C5FC042336222946ADF80E00FFF788FC74 +:109020008046ADF80E00A069FFF75CFC29460246B9 +:1090300040464FF00308FFF7B1FC032337222946CF +:10904000ADF80E00FFF774FCADF80E0008F1FF3824 +:1090500019F8012B2946BDF80E00FFF787FC18F020 +:10906000FF08ADF80E00F1D132462946FFF74CFD5E +:10907000194B1A4831461A4ACDE900734323006858 +:1090800006F00AFC304602F057FDA379FF2B1CBF07 +:109090000133A371A279052A97BF01234EF66023FD +:1090A0009340C3EB431298BF03EB82034FF4FA7271 +:1090B0009CBFDB009BB203F2F3139BB2B3FBF2F352 +:1090C000238105B0BDE8F0834C9D0308B59F0308DC +:1090D00099590308D09F030828A503080CAE012066 +:1090E0002CA50308B5A003089E4B2DE9F04F5D6841 +:1090F00089B06B6A01920293029B5268002B3CD0AC +:109100001B79002B39D0019B5B892B2B35D9137828 +:10911000022B32D195F8304005F1290002F11B01F4 +:109120000023DEB2B44201D9062B1FD15068FFF7ED +:10913000D9FB029B1B6898421FD1DFF854B2002371 +:10914000019ACBF804305289CBF800302B2A14D97D +:10915000019A4FF0F00A0393B2F80890019E7389C8 +:10916000534510D9736854460593D2E010F8017F37 +:10917000013311F8016FB742D3D0019809B0BDE8AF +:10918000F04F02F0D9BCAAEB03023668A9EB030347 +:109190001FFA82FA1FFA83F9002EE0D1EDE7A31C33 +:1091A0009BB29C420493E8D8601C7389984216DAFB +:1091B000059B23445B783B2954D8322900F28381F4 +:1091C000012913D003294DD1032B00F26581664B91 +:1091D00040F23362654966481BF0BCFACDE733685C +:1091E000002B00F02F815B681B78E4E7042B00F074 +:1091F0004F815D4B40F22E625E49ECE7042B00F09C +:109200004F81594B40F24162F6E7012B04D0564B97 +:1092100040F24F625849DEE7BAF1F00F00F04481A6 +:10922000514B40F251625549D5E7012B00F0448182 +:109230004D4B40F25562EDE7042B00F039814A4B6B +:1092400040F25962D8E7042B00F03681464B40F2D9 +:109250005D62D1E7042B00F03281434B40F2616242 +:10926000CAE70023A1B984B27389A34251D8E41A92 +:10927000A9EB0303A4B21FFA83F94C45BFF47DAFF9 +:109280003668002E43D1384B40F29D623C49A2E73C +:109290004FF0FF3800271C444FF6FD7294423FF711 +:1092A0006CAF049A13449CB2002FDDD00023B8F1B8 +:1092B000070F079306D92C4B4FF4CF6231492C4846 +:1092C0001BF048FA1BF80830002BCDD1BAB2049B32 +:1092D00007A93046049202F06BFE049A82427FF4A2 +:1092E0004CAF042F09D10798FFF7FCFA01230BF8C4 +:1092F0000830254B43F82800B6E7012F04D01A4B5D +:109300004FF4D262214966E79DF81C00EEE77368CE +:1093100005934C4504D2059B195DFF297FF43FAFAF +:109320009BF80030002B35D1039B002B3BD19BF8E1 +:109330000130002B3FF421AF019B134A5968137988 +:10934000052B4BD1029B5B79012B3CD1686AFFF75F +:10935000E5FD95F8313028461B073CD5FFF76CFC3E +:109360000BE700BF34AF01204C9D0308F39F0308B7 +:1093700099590308EA9F030805A003080EA00308F3 +:1093800049A0030825A003081CAE012036A003084D +:1093900011AE0120594B00221B688BF80020012BD5 +:1093A0000CD0022B06D100234FF06C094FF02C0A91 +:1093B0000393D3E6032BB7D1012303934FF0EC09BA +:1093C0004FF06C0ACAE6033B022B3FF6D6AE686A42 +:1093D000FFF7A4FD2846FFF745FCCEE6062B15D186 +:1093E000029B5B79DA1E022A02D9012B7FF4C5AEFB +:1093F000686A0C21FFF778FA414B28461A4619464D +:1094000002F086F92846FFF79FFBB6E6022B7FF4B1 +:10941000B4AE029B5B79062B7FF4AFAE9BF80230B3 +:109420006C6A002B3FF4A9AE039B906823810291E4 +:10943000FFF758FA0299A06128460B69E361FFF72C +:10944000A1FD9AE63B293FF60DAF322906D8012946 +:109450003FF4CFAE03293FF4BAAE03E7A1F13303E3 +:10946000082B3FF6FEAE01A252F823F0039201084A +:109470000F920108319201083F920108639201089E +:1094800063920108639201084D9201085B92010802 +:109490001F464FF00608FEE64FF007080427FAE6DD +:1094A0001F464FF00308F6E61F464FF00008F2E6AD +:1094B0001F464FF00208EEE61F469846EBE61F46B1 +:1094C0004FF00508E7E6A1F13302082A3FF6CAAEDD +:1094D00001A757F822F000BFFD9101080B92010887 +:1094E0002B920108399201086592010865920108E2 +:1094F0006592010847920108559201081CAE0120AF +:1095000028A5030838B5456A0446FDB16B79052BDB +:1095100009D8022B09D8CBB100232046AB71BDE896 +:109520003840FFF711BB0A2B06D100232046AB7150 +:10953000BDE83840FFF772BC0C2BEDD9044B40F26C +:109540006D32044904481BF005F9E5E738BD00BF5A +:109550004C9D030880A0030899590308F0B50646FE +:1095600087B048B9284B40F28B322849284807B0C9 +:10957000BDE8F0401BF0EEB8446A002C41D063799E +:10958000082B3ED10A68E3699A423AD10C21204661 +:10959000FFF7AAF904220DF1160321463046FFF722 +:1095A00021FA054630B3416804233222BDF8160083 +:1095B000F0310391FFF7BCF90746ADF81600E069FA +:1095C000FFF790F9039902463846FFF7E7F92A4674 +:1095D0000399ADF81600FFF797FA0E4B29460E488F +:1095E0000E4ACDE900634323006806F055F928468A +:1095F00002F0A2FAA379FF2B1CBF0133A37114233D +:10960000238107B0F0BD00BF4C9D0308469F0308AF +:109610009959030828A503080CAE01202CA50308BE +:109620002DE9F041446A86B0064605212046032212 +:10963000FFF75AF90DF1160321463046FFF7D2F92C +:109640000546002856D0416802233922BDF816008D +:10965000F031DFF8AC8003270391FFF769F9328D11 +:109660000399ADF81600FFF747F903990323372252 +:10967000ADF81600FFF75CF90399ADF81600013F4D +:1096800018F8012BBDF816000391FFF76FF917F0DA +:10969000FF070399ADF81600F1D12A46FFF734FA17 +:1096A00016480096432304F118022946006806F084 +:1096B0008BF90646284602F03FFAA3793046FF2B85 +:1096C0001CBF0133A371A379092B96BFC3EB4312CF +:1096D00044F6206303EB82034FF4FA729CBF1B0134 +:1096E0009BB203F2F3139BB2B3FBF2F3238106B0F8 +:1096F000BDE8F0814FF0FF36DFE700BF0CAE012080 +:10970000B5A0030850B1406A40B140790A2806D09C +:10971000043801288CBF00200120C0B2704701200E +:10972000FBE70000F0B5446A87B00646002C50D035 +:109730006379002B4DD0A36905930023C4E9063358 +:10974000C4E90833C4E90B33A362E3812361A38234 +:10975000FFF7D8FF68B30DF1120307222146304608 +:10976000FFF740F9054620B3416804233622BDF8CF +:109770001200F0310391FFF7DBF80746ADF8120055 +:109780000598FFF7AFF8039902463846FFF706F948 +:109790002A460399ADF81200FFF7B6F90E484323A5 +:1097A000009605AA2946006806F00EF9284602F040 +:1097B000C3F90A4B304619461A4601F0A9FF0021A9 +:1097C0002046FFF791F823791BB1FFF707FB002331 +:1097D000237107B0F0BD00BF0CAE012028A503081F +:1097E00038B5044650B9244B40F2E72223492448B7 +:1097F0001AF0B0FF6FF00F02104638BD90F831300C +:10980000DA0704D41C4B4FF43A721E49EFE7038D7C +:10981000456AB3F5107F02D24FF0FF32ECE7DDB9B5 +:10982000342001F0BBFD05460028F5D060623422EB +:10983000002128461BF0C2F8FFF796FA02460028DE +:10984000EAD101232B7194F831305B070AD402214D +:109850002846FFF749F8CFE72B79002BE7D0FFF731 +:10986000BDFAE4E72046FFF76FF902460028C3D0AF +:109870002046FFF757FFCFE74C9D0308469F03089C +:109880009959030894A00308584B2DE9F04F1D681F +:1098900087B0574E574FDFF8608115B907B0BDE864 +:1098A000F08F6C6A7CB163796BB1A18A69B1628A0D +:1098B000013292B29142628207D12846FFF732FF0D +:1098C0002846FFF78DFF2D68E7E7228A002A73D02C +:1098D000511E012A21826FD1013BDBB2092BF2D844 +:1098E00046FA03F3DB07EED404212046FEF7FCFF23 +:1098F00003220DF1160321462846FFF773F881462F +:10990000002838D0416802233922BDF81600F03112 +:10991000DFF8E8B04FF0030A0391FFF709F82A8D4A +:109920000399ADF81600FEF7E7FF039903233722EA +:10993000ADF81600FEF7FCFF0399ADF816000AF12A +:10994000FF3A1BF8012BBDF816000391FFF70EF844 +:109950001AF0FF0A0399ADF81600F0D14A46FFF756 +:10996000D3F84323424649463868009506F02CF860 +:10997000484602F0E1F8A379FF2B1CBF0133A37125 +:10998000A379092B96BFC3EB431242F2107303EB8A +:1099900082034FF4FA729CBFDB009BB203F2F31315 +:1099A0009BB2B3FBF2F3628A2381A38A9B1A012B39 +:1099B00089DD5B10238286E7E289002A83D0511E6D +:1099C000012AE1817FF47FAF03F0FB02012A02D07C +:1099D0000A2B7FF478AF2846FFF722FEA389628A1C +:1099E0009B1A012BC4BF5B10E3816CE79CE601204E +:1099F000E6FDFFFF0CAE01202CA50308B5A003086F +:109A000038B5254B00251C6804B938BD636A23B1FD +:109A10001A89012A03D9013A1A812468F4E7FCD192 +:109A20005A791D810C2A15D0013A072AF5D801A1CF +:109A300051F822F05D9A01081B9A01088B9A0108DF +:109A40001B9A01081B9A0108559A01081B9A0108E4 +:109A5000779A01082046FFF777F8DEE79B792046E2 +:109A6000052B02D8FFF78EFAD7E7FFF75BFE2046FB +:109A7000FFF7B6FED1E79B792046012B02D8FFF70E +:109A8000DBF8CAE7FFF7EEF8C7E79B792046012B22 +:109A9000E1D8FFF7C3F9C0E79CE6012070B51826AE +:109AA000074C05464643A05918B102F045F800237B +:109AB000A351182303FB05400023037570BD00BFAD +:109AC00040AE01202DE9F74F4FF0000C4FF00A0E89 +:109AD00006461746404BE146E34674467546F04657 +:109AE0000191CDF800C00A2C0FFA8CF093F814A065 +:109AF00019D1BAF1000F5FD046B131685A6891426E +:109B000004D1002F4BD09968B94248D0BAF1010F67 +:109B1000598A4CD11A68002A44D0009A914205D340 +:109B20008646009102E0BAF1000FE5D10CF1010C7C +:109B30001833BCF10A0FD6D1019B012B48D10A2C56 +:109B400011D10A2D3AD01823234A6B43D35833B18D +:109B5000224B40F26D12224922481AF0FBFD2C469E +:109B60002846FFF79BFF18231B4A03FB04231B7D9A +:109B700033B11A4B4FF4C2721B491A481AF0EAFD6E +:109B80002EB1154B1821326801FB04335A60124A7A +:109B90001823204603FB042300229F605A8203B04F +:109BA000BDE8F08F5945C1D38B468046BEE7494595 +:109BB000BCD389460546B9E70446B7E7B8F10A0FB2 +:109BC00004D1BEF10A0F03D07546C8E74546C6E783 +:109BD0004FF0FF30E3E700BF40AE0120B8A003081C +:109BE00040A103089959030857A103082DE9F34739 +:109BF000DDF82CA0884691461E46074630B92D4B0D +:109C000040F257422C492D481AF0A4FD4FF420721F +:109C10001C210E2001F0F8FF0546002847D043899B +:109C20001B2B06D8234B40F26242254923481AF0E9 +:109C300091FD6C68BDF83400FEF751FEE08097F8A6 +:109C40003030062B06D01B4B40F269421D491B48A1 +:109C50001AF080FD3368424629463846A360B3882F +:109C60000026A381DAF80030C4F81230BAF80430C4 +:109C7000E3820A9B1B68C4F80E300C9B1B6826709D +:109C8000A3610123E67063700823A3700623237188 +:109C90000423637140F6060300934B4600F0F4FA88 +:109CA000284601F049FF304602B0BDE8F0874FF08A +:109CB000FF30F9E7B8A00308469F03089959030845 +:109CC00080A10308B1A1030870B50646074D002422 +:109CD0002B7D2BB1AB68B34202D12046FFF7DEFEED +:109CE000013418350A2CF3D170BD00BF40AE0120FD +:109CF0002DE9F047074688B00C4649B94E4B40F273 +:109D00008A224E494E4808B0BDE8F0471AF022BDFD +:109D100045682B88B3F5807F08D12B79062B05D1B8 +:109D20006B79042B02D16B88082B05D0384608B01C +:109D3000BDE8F04701F000BFD5F80E3005F1080886 +:109D40004E680793AB69002E5CD09E4259D1012624 +:109D5000B24694F83030062B06D0374B40F2A912A9 +:109D6000384937481AF0F6FC079800283CD02146BD +:109D700000F053FD8146B8BB079B03F0F003E02BD6 +:109D800032D02246514607A8FFF79CFE031E2BDB6C +:109D900018202D4A4FF0020E00FB03FC02EB0C01D1 +:109DA00081F814E04FF00C0E8C6013FB00E3A86800 +:109DB00002EB030ED050B8F80430AEF80430A1F82E +:109DC000129052F80C1079B14FF4006342F80C90E5 +:109DD000204604F12A0200934346059100F054FA0C +:109DE0000599084601F0A8FEEB88B3F5807F0CD0FA +:109DF000B3F5007F1AD0384601F09EFE08B0BDE8EA +:109E0000F08700264FF0020AA3E7002EF3D00222CB +:109E100004F12A032046039207AA1946CDE90182DC +:109E2000221D00924246FFF7E1FEE4E707A9204623 +:109E3000FFF794FBDFE700BFB8A00308469F0308C5 +:109E40009959030811A2030840AE01201FB502462C +:109E5000012400F12A030432CDE9021404490092DE +:109E600001911946034AFFF7C1FE04B010BD00BFBF +:109E70004AA3030844A30308F8B5134C002502269F +:109E80000427227D6AB1638A01339BB2B3F5967FC2 +:109E9000638203D2012A09D1042B0FD92846FFF788 +:109EA000FDFD013518340A2DEBD1F8BD032A01D18F +:109EB0002775F6E7042AF4D12675F2E7211DA0687C +:109EC000FFF7C4FFEDE700BF40AE01202DE9FF47DB +:109ED000244F18230646884603FB027314461B7D55 +:109EE000012B06D8204B40F2EE22204920481AF0E0 +:109EF00031FC182304EB440506F12A0903FB047422 +:109F0000ED00237D05F10C0A022BBA440BD1638AC4 +:109F1000B3F58E7F13D9043530467919FFF796FFD4 +:109F200008B9032323754FF400634A46414630467F +:109F30000093534600F0A8F904B0BDE8F087B3F5EC +:109F4000877FF0D3012304355246494603932F44BB +:109F5000084B304602970193331D00934B46FFF7A1 +:109F600045FEDDE740AE0120B8A0030835A2030896 +:109F7000995903084AA303082DE9F3478846064682 +:109F800001461546D8F8000000F047FC00286CD1C7 +:109F9000D8F8003003F0F002E02A66D0002B64D03D +:109FA000324601214046FFF78DFD071E03DA78B2E5 +:109FB00002B0BDE8F0877E2F06DD364B40F2C1329D +:109FC000354936481AF0C6FBFFB2DFF8D89018239F +:109FD00003FB07931A7D002A56D101229E601A7551 +:109FE00041463046FFF732FF002DE1D0182303FB36 +:109FF0000792127D012A0ED9294A03FB07932946AD +:10A00000304617704FF400620C33009206F12A02BA +:10A0100000F03AF9CCE7CBD12C461E4EDFF8888011 +:10A02000DFF878A0628923899A4208D1236833B186 +:10A03000334640F2F132414650461AF08BFB237B07 +:10A040005B0615D42468002CECD1284601F0CEFE26 +:10A05000182404FB07F359F8030008B101F06CFD64 +:10A060007C43002049F80450A2E76FF00F009FE7FF +:10A070002A464FF420710E2001F0E0FF054600282B +:10A08000E6D14FF0FF3093E7002DA9D04FF0FF301D +:10A09000ACE700BFB8A0030865A2030899590308FC +:10A0A00030AF012040AE012073A20308F0B50E4688 +:10A0B00085B01546044630B9434B40F21E32434941 +:10A0C00043481AF047FB36B93F4B40F21F32414933 +:10A0D0003F481AF03FFB35B93B4B4FF448723E49BD +:10A0E0003B481AF037FB2146286800F096FB002811 +:10A0F00065D12B6803F0F002E02A1CD10123ADF8F2 +:10A1000008305E238DF80A306B7803F07F038DF8FA +:10A110000B30AB788DF80C30EB788DF80D3002AB4E +:10A120004FF4006231462046009204F12A0200F00A +:10A13000ABF805B0F0BD6268A1685A400A4209D088 +:10A140009BB24FF6A962934204D0E368002B38D04B +:10A1500004F10C05DFF88CC01821204B9CF800207E +:10A1600001FB0233197D01290DD99968A1420AD159 +:10A1700029685B68994206D13146204605B0BDE8A2 +:10A18000F040FFF7A3BE154B00211F7DCAB2012F7F +:10A1900009D99F68A74206D15F682868B84202D1F2 +:10A1A0008CF80020E8E7013118330A29EDD1324656 +:10A1B0002946204605B0BDE8F040FFF7DDBE084B5C +:10A1C000AEE76FF00300B4E7B8A00308469F0308AA +:10A1D0009959030897AE0308F2A1030840AE012085 +:10A1E00044A3030830AF012043890E2B70B5044609 +:10A1F0000D461AD9C37B1BB991F834300133C373B0 +:10A20000606803788689D9070AD5012B11D1437874 +:10A2100033B983785E2B03D1637B43F01003637300 +:10A22000082E10D0B6F5C16F1DD0204601F084FC79 +:10A2300017E0062213491AF097FB0028F0D1637B40 +:10A2400043F00803EBE795F831301A07EDD50E21FE +:10A25000204601F03DFC0028E7D12946204600F0C9 +:10A260008BF9002070BD95F831301B07DDD50E212C +:10A27000204601F02DFC0028D7D129462046FFF7C3 +:10A2800037FDEEE744A303082DE9F0410D460446EF +:10A29000BDF8180016461F46FEF721FB0E2180462A +:10A2A000284601F011FCE0B96968A1F80C803B6810 +:10A2B0000B60BB888B803368C1F80630B3884B8154 +:10A2C00094F83030062B06D0084B4FF499720849A9 +:10A2D00008481AF03FFAA36929462046BDE8F04134 +:10A2E00018476FF00100BDE8F08100BF8DA20308A0 +:10A2F00013A3030899590308F0B5044687B00F4625 +:10A30000164624214FF42072222001F07DFC0546E0 +:10A3100090B34389232B06D8184B4FF4B4721849D5 +:10A3200018481AF017FA606800236C6800F11C01E5 +:10A33000237104F108026371A371E371034627706E +:10A34000667053F8046B8B4242F8046BF9D1C36812 +:10A3500005A8059300F0E2F858B10021012305AAF1 +:10A36000A170E17002902846CDE90013FF2300F0B0 +:10A3700043FA284601F0E0FB07B0F0BD50A3030804 +:10A38000D6A30308995903082DE9F043434F87B03A +:10A3900004468846D7F8089099F8005005F00F0554 +:10A3A000AD00132D2FD94389032B2CD943681B787B +:10A3B000082B28D1786900F0F003E02B23D039680E +:10A3C00000F02BFAF8B92389072B1CD905F10E01EF +:10A3D0002046059101F078FB0599002852D0238989 +:10A3E000591989B28B420ED84FF420720E2001F019 +:10A3F0000BFC064638B1428905F108039A4208D29F +:10A40000304601F099FB204607B0BDE8F04301F06B +:10A4100093BB49462A4640681AF0ABFB29463046B2 +:10A4200001F056FB30B11E4BB6221E491E481AF0F1 +:10A4300091F9E5E72146304601F038FD0028DFD1EB +:10A440002046344601F078FB29462046666801F034 +:10A450003BFB02460028D6D1606801217B69C360BE +:10A460003B690361FF233270B270F2700372827233 +:10A47000C2722046CDF80880CDE900210B4900F0DA +:10A48000BBF9C0E7204601F023FB0028DCD0044BD9 +:10A49000C722074904481AF05DF9B4E734AF012038 +:10A4A00050A3030802A403089959030848AF0120E8 +:10A4B00037A403080A460321FFF71EBF0A460B21F3 +:10A4C000FFF71ABF08B501F015FE00F09DFD01F081 +:10A4D00063F801F01BF905F09BF801F081FEBDE87F +:10A4E000084005F04FB8000008B590F8313001463B +:10A4F00013F001030BD043684BB1074A5069834204 +:10A5000007D000F08AF9003818BF012008BD1846AE +:10A51000FCE70120FAE700BF34AF0120144B30B54F +:10A520001B687BB9134A1268FAB192F8311001F036 +:10A530000501052919D15168B9B101787F2918BFE2 +:10A54000134612E093F83110CD07E9D54C07E7D553 +:10A550005A68002AE4D004689D6862402A4204D008 +:10A560008A07DDD4DA689442DAD1184630BD00BFDC +:10A570009CE6012098E601202DE9F843D0F80480FC +:10A5800004460E4698F800502B09042B05D02046AF +:10A5900001F0D2FA0020BDE8F883B8F8020005F017 +:10A5A0000F05FEF79CF923894FEA85090746834288 +:10A5B0004D4603D90146204601F0B8FB6389AB4202 +:10A5C000E5D32389BB42E2D3132DE0D9D8F810306C +:10A5D000494D6B6103F0F003D8F80C20E02B2A61A1 +:10A5E00043D196F83130DB0705D498F80930112BA8 +:10A5F00053D0002703E07368002BF6D03746286954 +:10A6000048B1314600F009F90028C0D12B6903F0A8 +:10A61000F003E02BBBD0002FB9D0B8F8063023F000 +:10A62000C0033BB1204600F02BFA04460028B1D00D +:10A63000D0F80480C5F8088049462046C5E9007670 +:10A6400098F8003003F00F039B00AB8101F040FA53 +:10A6500098F80930062B34D0112B26D0012B35D198 +:10A6600031462046FFF790FE23E03046FFF73CFFDF +:10A6700080B92B7D7F2BB8D0204B1F68002FB4D022 +:10A68000B74201D13F68F9E73846FFF72DFF0028B0 +:10A69000F8D0B4E7002EB1D1A7E708EB09035B8837 +:10A6A000B3F5884FA5D13746B5E73146204604F0CB +:10A6B000BBFF0023C5E90033AB60AB81C5E90433C0 +:10A6C00068E73146204603F0C5F9F2E73946686984 +:10A6D00000F0A3F860B96B6903F0F003E02B07D03A +:10A6E0004946204601F020FA02212046FFF7E2FE0B +:10A6F000204601F021FADCE734AF01209CE601207E +:10A700002DE9F3479846837B04468946012B16467C +:10A710000C9F06D0324B4FF45572324932481AF032 +:10A7200019F8002E4ED01421204601F0CDF920B1A9 +:10A730006FF0010002B0BDE8F08763896568132BF4 +:10A7400006D8274B4FF46272284927481AF002F8BE +:10A750009DF82C3085F808804FF000086B72336844 +:10A76000DFF890A02B6145232B709DF828306B708B +:10A770002089FEF7B4F885F80680688085F80780A0 +:10A78000BAF80000FEF7ABF8BAF80030A880013341 +:10A79000AAF80030B9F1000F11D1154B1B68EB601E +:10A7A00085F80A8085F80B803B8D9BB122899A42FF +:10A7B00010D932463946204600F03AFBBAE7D9F8BC +:10A7C0000030ECE76389132BB2D9636801AE1B69D3 +:10A7D0000193E9E77B693246214638469847A9E765 +:10A7E00069A40308EEA4030899590308FAA403080E +:10A7F00028A503084CAF0120F0B4069C9DF810502A +:10A800009DF814601AB109B10F6807B9211D0495AC +:10A81000CDE90564F0BCFFF773BF431E033313D8C3 +:10A8200091F8313013F002030CD04B6883420DD005 +:10A830008A684340134209D1D34320EA0200C21A76 +:10A8400053425341184670470123FBE70023F9E7C1 +:10A8500038B50C4B04460D461A68824207D102688F +:10A860001A6021460420BDE8384000F0E9BE31B945 +:10A87000054B40F245120549054819F06BFF236866 +:10A880002B60EEE750AF012030A50308BAA50308FE +:10A890009959030881422DE9F84F04460E4605D127 +:10A8A0002F4BAB222F49304819F054FF46B1336883 +:10A8B000A34205D02A4BAD222C492B4819F04AFF60 +:10A8C00067687B689A8892BB1A6804F11C01626011 +:10A8D00004F1080252F8040B8A4243F8040BF9D140 +:10A8E00001213846FFF7EAFD384601F077FA0546C0 +:10A8F000384601F021F96768DFF86480DFF8789066 +:10A90000DFF864A0AFB92046194C3146FFF7A0FF2D +:10A910002388AB4205D2124BD2221649124819F0B5 +:10A9200019FF238828465B1B2380BDE8F88F00258C +:10A93000E1E77B683846D3F800B001F04FFA0544F0 +:10A94000B5F5803F05DB4346CC224946504619F019 +:10A9500001FF3846ADB25F4601F0EEF8D2E700BF26 +:10A9600030A50308D3A5030899590308DFA50308F8 +:10A970004EAF01200EA60308F1A503082DE9F04112 +:10A9800005460F460026DFF868800024D8F800301E +:10A990002146A446204653B910B1FFF77BFF064479 +:10A9A000BE4201DA012CF0DC3046BDE8F081D5F87A +:10A9B0000CE05A69724509D1D5F810E09A697245E0 +:10A9C00004D1B3F80CE0AA88964508D0013460B1F0 +:10A9D000C27F93F81FE096459CBF614618461A68EF +:10A9E000002A18BF9C461346D5E761461846F6E78D +:10A9F00050AF012010B5044630B9064B4FF4317208 +:10AA00000549064819F0A6FE21460520BDE810407C +:10AA100000F016BE30A503087FAE0308995903085D +:10AA200010B5044630B9084B40F2CE220749084819 +:10AA300019F090FE606908B101F07EF82046BDE88B +:10AA40001040FFF7D7BF00BF30A5030830A60308AA +:10AA50009959030838B5094B0024186800B938BD66 +:10AA6000C37F056823B1013BC37704462846F5E759 +:10AA70002146FFF70FFF2046F7E700BF50AF012048 +:10AA80002DE9F74F456880462B7803F00F03052B1F +:10AA900040F0A180E888FDF722FF07466888FDF7AF +:10AAA0001EFF2B7803F00F03B0EB830F4FEA8302F6 +:10AAB000C0F09180831AB54C40469BB2019301F0DF +:10AAC0008DF92388814603440A2B7ADCB04E346822 +:10AAD000002C40F08580042000F082FD044658B927 +:10AAE00049462846FFF74AFF814574DC042000F000 +:10AAF00077FD044600286ED01C220021201D19F08D +:10AB00005DFF0F2304F1080205F11401E3773368B8 +:10AB1000346023602B4653F8040B8B4242F8040B3D +:10AB2000F9D1B5F806B0C7F30C071BF0200B4FEABC +:10AB3000C7070AD1019BFB189BB29F4200F23881E4 +:10AB40004FF6EB72934200F23381D8F804506888D4 +:10AB5000FDF7C5FE2B7803F00F03B0EB830F4FEA30 +:10AB60008302C0F02581801A1FFA80FAE888FDF779 +:10AB7000B6FEC0F30C00D8F804600025C3003570A1 +:10AB80000AEB03007570B5701FFA80FCF570B38096 +:10AB90006345F08000F20C81D4F804E04FF0010A24 +:10ABA000704660BB002D40F0A980BEF1000F00F0A0 +:10ABB0009580784B4FF4DF727749784819F0CAFDD9 +:10ABC0008CE001462846FFF7D9FE20B123884B448C +:10ABD0000A2B7FF77BAF404600F0AEFF002777E0FF +:10ABE000EB6862699A4208D12B69A2699A4204D142 +:10ABF000A289AB889A4200F0EF80246868E7426837 +:10AC000091888B426DD23060002D65D0EA889342E6 +:10AC1000C0F0CE808C4500F2CB809342C5F8008016 +:10AC200040F0F680BBF1000F04D0A37F13F00103C6 +:10AC300000F09B80BAF1000F70D14FF0000A534E24 +:10AC400033884B443380BBF1000F06D1019B1F4476 +:10AC5000A37F43F00103A783A377BAF1010FBDD10E +:10AC6000636804F11C01A08B5F6804F108031430D1 +:10AC70003D683A4680B253F804CB8B4242F804CB8D +:10AC8000F9D1FDF72CFE00237880BB71FB71BB72FC +:10AC9000FB726768002D6AD13D4B1B68A34202D04E +:10ACA0001D46002B70D120462946FFF7D1FD3846BE +:10ACB00001F094F833880446834206D2354B40F2C3 +:10ACC0009B223749354819F045FD33881B1B3380DB +:10ACD000384603B0BDE8F08F8C4569D8C4F80480CD +:10ACE000A0E765D0D088984262D825B1E88888422C +:10ACF00018BF4FF0000A1068154652E7EA889A42DA +:10AD000006D9244B4FF4DB722649244819F022FD62 +:10AD1000EA88C5F80080B3889A4281E76368002B0F +:10AD20008BD059688B88002B87D13368A3B9B14287 +:10AD300006D1184B4FF4F0721B49184819F00AFD60 +:10AD40003368002B3FF47BAF124B4FF4F17217497D +:10AD5000124819F0FFFC72E75A68F088938898420D +:10AD60007FF46BAF13681646E0E79A4667E7D5F8BD +:10AD700004801421284600F0ABFE2946384601F035 +:10AD800051F8D8F8005085E72B6887E74EAF0120CF +:10AD900050AF012030A503085AA6030899590308AB +:10ADA000C0A603083CA6030891A603089EA60308B4 +:10ADB0006368002B7FF40FAF194B1B68A34206D0CA +:10ADC000184B40F2AB221849184819F0C3FC002177 +:10ADD0002046FFF73DFDFEE6E888FDF780FDC0F365 +:10ADE0000C0000287FF49DAEE089FDF778FDC0F3EC +:10ADF0000C0000283FF495AE2B4604F1080205F143 +:10AE0000140153F8040B8B4242F8040BF9D188E685 +:10AE1000BBF1000F3FF411AF4FF0000A05E700BF90 +:10AE200050AF012030A50308DBA603089959030899 +:10AE30000B8D2DE9F04F2DED028B08EE102AB3F1AA +:10AE400014028BB0054648BFA3F10D028A46C2F337 +:10AE5000CF030593436802931B7803F00F03052B80 +:10AE60004FEA830709D14389132B09D8604B4FF46C +:10AE70003F726049604819F06DFC6FF0050013E007 +:10AE8000029B0026D888FDF72AFDC0F30C032C890D +:10AE9000039300F40053143C0793059BA4B2DB001A +:10AEA0009BB206932CB920460BB0BDEC028BBDE8DB +:10AEB000F08F069B4FF4207214210E20A34228BF6E +:10AEC0002346049300F0A0FE8046002836D0438934 +:10AED000132B06D8464B4FF449724849464819F09F +:10AEE00039FC029BD8F804201946143153F8040B9E +:10AEF0008B4242F8040BF9D1D8F804B0DDF8109079 +:10AF0000B9F1000F41D06B89DE1BBB42B6B206D24D +:10AF1000374B40F22D323A49374819F01BFC4E4569 +:10AF200028BF4E4616B92D680027E9E7052000F036 +:10AF300057FB034628B9404600F0FEFD4FF0FF30B6 +:10AF4000B2E7019631466A68089000203A440092C0 +:10AF5000412200F09FFD089B18B91846FFF74AFDF3 +:10AF6000E9E7CDE90803A9EB0609284600F03EFF12 +:10AF7000099B244A1FFA89F9089940465D611A61C4 +:10AF800000F050FFB9F1000FCDD1039B3744C3F35C +:10AF90000C00BAF82830BFB2133BA34201DD079B77 +:10AFA0000BB140F40050FDF79AFC049BABF806008F +:10AFB00003F1140080B2FDF792FC002318EE102A72 +:10AFC0004146ABF8020050468BF80A308BF80B3044 +:10AFD000DAF814309847404600F0AEFD049B059A1D +:10AFE000E31A9CB2039B13449BB203935AE700BF3E +:10AFF00030A50308FBA603089959030816A7030800 +:10B0000036A7030821AA0108124B134A23F00303B1 +:10B01000124810B513604FF4C86203F5C8611A6096 +:10B0200000221A710E4A11600E4AC3F8402601220E +:10B0300083F844260C4A136001F066F840B10B4BCC +:10B0400040F21F220A490B48BDE8104019F082BBAC +:10B0500010BD00BF67AF01205CAF012058AF0120D9 +:10B0600060AF01204006400654AF012045A7030809 +:10B07000C5A70308995903082DE9F04104460028A3 +:10B0800000F0B78083070CD05B4B40F273225B4922 +:10B090005B4819F05FFB01F061F8BDE8F04101F099 +:10B0A00069B8DFF88881A0F10805D8F80030AB4214 +:10B0B00005D8544F00F10C033A689A4204D24E4B23 +:10B0C00040F27F225049E3E7504801F028F814F895 +:10B0D000043C53B9484B4FF423724D49484819F08A +:10B0E00039FB4A4801F020F8D5E734F8082CD8F8A5 +:10B0F0000010B2F5C86F34F8060C10D8B0F5C86F60 +:10B100000DD86B1A9BB2834202D0085A984206D1DE +:10B110000A443868824207D052889A4204D0364B9B +:10B1200040F295223B49D9E700233B4E04F8043C0A +:10B130003368AB4288BF35608D4206D22E4B40F259 +:10B14000DF1236492E4819F005FB3B689D4206D3B5 +:10B15000294B4FF4F0723249294819F0FBFA14F8E0 +:10B16000043C33B1244B40F2E1122E49244819F03B +:10B17000F1FA34F8083CB3F5C86F06D91E4B4FF40A +:10B18000F27229491E4819F0E5FAD8F8003034F86F +:10B19000081C5A18954212D0107980B9386882423A +:10B1A0000DD0306882425A5A24F8082C5A5A08BFE7 +:10B1B0003560B2F5C86F1EBFD218E91A518034F855 +:10B1C000062C99188D420FD0087968B930688542ED +:10B1D00008BF316034F8081C995234F8081CB1F5E6 +:10B1E000C86F1CBF5B185A800848BDE8F04100F0EA +:10B1F0009BBFBDE8F08100BF45A70308E0A7030897 +:10B200009959030860AF012001A8030858AF012035 +:10B210001AA8030840A8030854AF012072A8030825 +:10B2200089A80308A3A80308BEA803085CAF0120EF +:10B230002DE9F84FCC1C054624F00304A4B20B2CD6 +:10B2400004D9B4F5C86F02D900251FE00C24A1422F +:10B25000FAD8DFF84481D8F80030AB4203D8464B27 +:10B260001B68AB4206D8454B40F2D12244494548C1 +:10B2700019F070FAD8F80030AB4203D83E4A126891 +:10B28000AA4206D800F06AFF00F074FF2846BDE825 +:10B29000F88FA5F1080635F8087CF61A083FB6B213 +:10B2A000BF1BBFB2A74207D2344B4FF439723649A5 +:10B2B000344819F04FFAC7E7E8D0344800F02FFFC0 +:10B2C00035F8089CD8F800B00BEB090A9AF804305E +:10B2D00043BBB9F5C86F06D1284B40F2F5222C4983 +:10B2E000284819F037FA2B4806F10803D8F800204F +:10B2F000234404683BF8097099B2544512FA83F369 +:10B3000008BF03600020187157525E8025F8081CA2 +:10B31000535AB3F5C86F01D01A4451801B4800F04E +:10B3200003FFB3E704F114039BB29F42F6D306F187 +:10B330000803B9F5C86F1C44A4B206D10F4B40F204 +:10B34000163213490F4819F005FAD8F800301149A0 +:10B350001A190868904288BF0A600021117135F8F7 +:10B36000081C1953568025F8084C1A5BB2F5C86FB3 +:10B370001CBF9B185C80D1E760AF012045A7030884 +:10B38000E8A8030899590308FFA8030858AF01204B +:10B390001FA9030854AF01205CAF01202DE9F84339 +:10B3A000002800F08A80C51C25F00305ADB20B2DE6 +:10B3B00004D9B5F5C86F02D900207EE00C25A8425B +:10B3C000FAD8DFF830916FF00707DFF82C8140489A +:10B3D00000F0A5FED9F80020D8F80060C5F5C860D7 +:10B3E000B61AB6B2864203D3394800F09DFEE3E7B1 +:10B3F0009419915B2379002B67D1BB1B0B44AB42A3 +:10B4000063D305F11402934259D305F10807374479 +:10B41000BFB2B7F5C86F06D12E4B40F287322E4926 +:10B420002E4819F097F9D9F800300021DA19117176 +:10B430002188D9535680012227802271DA5BB2F528 +:10B44000C86F01D013445F80D8F80030244EA34267 +:10B4500012D13168D9F800001A790AB1994231D174 +:10B460009942C8F8003007D032B11A4B40F2B532D9 +:10B470001C491A4819F06EF90835154800F054FEB9 +:10B4800033682544AB4206D2124B40F2B93216491A +:10B49000124819F05FF9A3070DD00E4B40F2BB32F2 +:10B4A00012490E4819F056F90A4B40F2BD321049C4 +:10B4B0000A4819F04FF904F10800BDE8F8830123A8 +:10B4C0002371C1E71B880344C6E70E468AE700BF25 +:10B4D00058AF012045A703081FA90308995903087D +:10B4E00060AF012030A9030849A9030879A903081E +:10B4F000A8A903085CAF012054AF012038B5044669 +:10B5000000F02CFE0546A3681C685CB122681A6036 +:10B51000A30706D0054B4FF48C720549054819F076 +:10B5200019F9284600F026FE204638BDCBA90308AD +:10B530004CAA03089959030838B58B0705460C46F1 +:10B5400006D0084B4FF4B6720749084819F002F9C3 +:10B5500000F004FEAB681A6822601C60BDE8384049 +:10B5600000F008BECBA903086FAA03089959030885 +:10B57000436800228168033330B523F00303448815 +:10B580000A60944200DC30BD0D6801321D60058800 +:10B590000B602B44F5E7000038B5054D0D24013C48 +:10B5A00055F8040BFFF7E4FFA4B2002CF7D138BD27 +:10B5B00078AB030810B5044618B1BDE81040FFF79A +:10B5C0009DBF044B4FF49E720349044819F0C2F822 +:10B5D000204610BDCBA903088FAA03089959030878 +:10B5E0000C2808B506D8084B53F82000BDE80840E1 +:10B5F000FFF784BF054B40F257120549054819F083 +:10B60000A9F8002008BD00BF78AB0308CBA9030848 +:10B61000A1AA03089959030840B9064B40F29512B4 +:10B620000549064819F096B8FFF786BF0029FBD1F7 +:10B63000704700BFCBA903088FAA030899590308D4 +:10B640000C2806D9064B4FF4D5720649064819F066 +:10B6500081B821B1054B53F82000FFF76DBF70474B +:10B66000CBA90308BEAA03089959030878AB0308BD +:10B670006FF00B007047000010B5044630B90C4B5A +:10B6800040F26D320B490C4819F064F894F83130EF +:10B6900003F00502052A09D162683AB11B0705D5F6 +:10B6A000211D2046BDE81040FEF7D0BB10BD00BFF5 +:10B6B000ACAB03082EAC03089959030873B50546D3 +:10B6C00016460C4631B90E4B40F2CB120D490E48CE +:10B6D00019F040F86B6822689A420FD0336001A9D4 +:10B6E0003046019200F0CCFF01A9304604F02EFA5A +:10B6F0002368012128466B60FFF7BEFF02B070BDD2 +:10B70000ACAB030851AC030899590308704700001B +:10B71000F7B5144D0446002914BF0E462E46002AE4 +:10B7200014BF17462F46002B18BF1D463368B3B908 +:10B7300001AA3146FFF7C2FF01233A68A1688A4295 +:10B74000E16818BFA2602A688A4218BFE26023B984 +:10B7500001AA31462046FFF7B1FF03B0F0BD002338 +:10B76000EBE700BF28A503082DE9F84FDDF82C8092 +:10B77000044648B93D4B40F227123D493D4818F078 +:10B78000E9FF2046BDE8F88FB8F1000F08D1374B2C +:10B790004FF4947238494446364818F0DBFFF0E71E +:10B7A000364E0025DFF8E4C046610A9EAB4208BF72 +:10B7B0006346C560AA4208BF62460662A94208BF46 +:10B7C00061462F4E0585377880F8315080F8347007 +:10B7D0000C9F4562C5610761C0E90155FFF798FFFD +:10B7E0002046C04700283FD1264FDFF880B094F8AC +:10B7F00034304FF000083D68FF2BDFF894A0DFF8ED +:10B80000749004BF002384F834302DB994F8343098 +:10B81000FE2B22D12B4622E0A54206D15B4640F208 +:10B820008B125146484618F095FF08F10108B8F10F +:10B83000FF0F06DD5B4640F28D121349484618F0B3 +:10B8400089FF94F8343095F834209A4203D10132BC +:10B8500084F83420CBE72D68D7E70133DBB23370AF +:10B860003B6823603C608CE72C468AE7ACAB03085E +:10B8700061AC0308995903087AAC030871B6010852 +:10B88000A0E601209CE60120B0AC030828A503082F +:10B890009CAC0308014B1860704700BF98E601207C +:10B8A00030B9094B4FF454720849094818F052BF97 +:10B8B00090F83120D10706D442F00102032180F82C +:10B8C0003120FFF7D9BE7047ACAB0308DEAC0308EC +:10B8D0009959030830B90A4B40F29B3209490A488A +:10B8E00018F038BF90F83120D10707D522F00101B8 +:10B8F000130780F8311001D5FEF7E6B9704700BF95 +:10B90000ACAB0308FAAC03089959030810B5044618 +:10B9100040B90F4B4FF478720E490F48BDE8104004 +:10B9200018F018BF90F831305A070FD443F00403D1 +:10B9300080F83130FDF7E6FD03212046FFF79CFE3D +:10B94000E3691BB12046BDE81040184710BD00BF99 +:10B95000ACAB030818AD03089959030830B9094B7B +:10B9600040F206420849094818F0F4BE90F8312028 +:10B97000510706D522F00402C36980F8312003B1D3 +:10B9800018477047ACAB030839AD03089959030851 +:10B9900000B1C1617047000050B1064B1B682BB16C +:10B9A00093F834200132D2B28242F7D11846704760 +:10B9B0000346FBE79CE6012008B500F0CFFB084BEF +:10B9C00000221A7000F0D6FB064B186800B908BDBB +:10B9D000436F1BB1BDE8084000F00CBDC068F5E73F +:10B9E000A1E60120ACE6012038B568B9144B40F25D +:10B9F000DF121449144818F0ADFE01201FE0002AA0 +:10BA0000FBD04268511A14E0B1F5803FF5D2A9B1DC +:10BA100003898CB213FA81F39BB29C42EDD890F962 +:10BA20000C50002DEBDA4268511A00F110029142DD +:10BA3000E3D342894160144403814481002038BD2E +:10BA40005CAD03087FAE03089959030822F0400358 +:10BA5000012B70B506460D46144606D00A4B4FF42E +:10BA6000A5720A490A4818F075FE0B20FFF7B8FDC9 +:10BA700040B100230581458143730473C0E900365A +:10BA80000123C38170BD00BF5CAD0308DDAD0308B9 +:10BA900099590308033020F0030070B50E18BDF863 +:10BAA0001450049CAE420DD804B10444184600233F +:10BAB000C0E90034022301814181437301230273F1 +:10BAC000C38170BD0020FCE70022FFF78DBF00009E +:10BAD00010B590B9104B40F24B221049104818F0A5 +:10BAE00039FE012008E09B1A446843810C44038915 +:10BAF00044609B1A0381002010BDB1F5803FF0D255 +:10BB00000029F8D08AB243899A42ECD9024B40F21C +:10BB100055220449E2E700BF5CAD03087FAE03088D +:10BB200099590308EFAD03080B1E02DA5942FFF7DB +:10BB3000CFBF0122FFF758BF2DE9F047044650B9A7 +:10BB400025462B4B4FF437722A492B4818F002FE3A +:10BB50002846BDE8F0870025254FDFF8A8A0DFF8CC +:10BB6000988000F0FBFAA37B814633B93B4640F254 +:10BB7000F1225146404618F0EDFDA67B4846013EB5 +:10BB8000F6B2A67300F0F6FA002EE1D1627B2668C9 +:10BB90009207237B11D5236933B93B4640F2FF223C +:10BBA0001649404618F0D6FD2369204698470135CE +:10BBB000EDB2002ECCD03446D3E703F00F03022BB6 +:10BBC00004D121460C20FFF73BFDF0E7012B02D109 +:10BBD00021460B20F7E71BB92046FFF74DFAE6E7B1 +:10BBE0003B4640F20F320649404618F0B3FDDEE70F +:10BBF0005CAD03087FAE03089959030823AE030820 +:10BC000044AE03080DAE0308B2F5C17F2DE9F0473D +:10BC100006460F4684B214D008D822F04003012B08 +:10BC200007D10020BDE8F047FFF710BFB2F5207F35 +:10BC30004ED0374B40F227123649374818F08AFD6C +:10BC40001FE00026DFF8E0903546B0460C20B246F3 +:10BC5000FFF7C6FC0646D0B9304C00F07FFA01234E +:10BC600027782370FFB200F085FA4FB931462C488F +:10BC700003F07CFB20B100F071FA267000F07AFA34 +:10BC80000DB900251FE02846FFF756FFF9E7E31C32 +:10BC90000444C0F8008023F0030313340781C3F584 +:10BCA000147324F00304C0F80C909BB24460BB42B0 +:10BCB00028BF3B4643814DB1CAF80000F91A002461 +:10BCC0008FB2002FC2D12846BDE8F0870546F5E7C0 +:10BCD0000334CB1C24F0030423F003031C44A4B25C +:10BCE00004F110009C4280B2CBD38342C9D8FFF745 +:10BCF00055FB05460028E6D006440023078113368D +:10BD00000360084B26F003064781C3604660DAE70C +:10BD10005CAD030856AE030899590308A1E601205B +:10BD2000B9B9010880000100820001002DE9F04747 +:10BD30000E46044630B9244B4FF4CC7223492448B4 +:10BD400018F008FD2789B7423CD93546DFF87880DE +:10BD5000DFF884A0DFF878906289AA4219D3237BA8 +:10BD6000190727D1AA4225D0637B9B0722D461689B +:10BD70002046091B294489B2FFF75AFA0446C8B97C +:10BD8000114B40F2BD121349114818F0E3FC6481D5 +:10BD9000FFDEAA1AF31B95B222891344238124687B +:10BDA000002CD9D1434640F2AF125146484618F014 +:10BDB000D1FCD1E720686581258108B1FFF7BCFE81 +:10BDC00000232360BDE8F0875CAD030871AE030873 +:10BDD00099590308A1AE030889AE0308034600225F +:10BDE00090B2013203B970471B68F9E710B50446F9 +:10BDF00088B100F0B3F9A37B0133A37300F0BAF963 +:10BE0000A37B43B9044B40F2423204490448BDE8E5 +:10BE1000104018F09FBC10BD5CAD0308BDAE030818 +:10BE20009959030870B50D46044600B161B9154B28 +:10BE300040F2593214491548BDE8704018F08ABCE8 +:10BE400029890B442381144622682389002AF7D1CB +:10BE500062899A420FD00B4B40F262320C490B4878 +:10BE600018F078FC236833B1064B40F2633209497D +:10BE7000064818F06FFC2A89238925601344238122 +:10BE800070BD00BF5CAD0308CFAE0308995903082D +:10BE900004AF030831AF030810B50C46FFF7C2FF2B +:10BEA0002046BDE81040FFF7A1BF00002DE9F84F84 +:10BEB0000C46054620B119B102890B899A420AD273 +:10BEC000344B40F2C9323449344818F043FC6FF027 +:10BED0000F00BDE8F88F0026DFF8B8B0DFF8CCA07F +:10BEE0003746DFF8B890B5F80A806389A8EB0708F1 +:10BEF00068689B1B616838449845314428BF984660 +:10BF00004246474418F035FE6B8946449F4206D9A5 +:10BF10005B4640F2D9325146484618F01BFC638913 +:10BF20009E4206D95B4640F2DA321D49484618F077 +:10BF300011FC63899E426B8924BF246800269F42BE +:10BF400008D12D682DB914B3124B4FF479721549ED +:10BF5000BAE700277CB1628923899A420BD1236812 +:10BF60004BB10C4B40F2E9320F490C4818F0F2FB90 +:10BF70006FF00500ADE76A892B899A4205D12B68DD +:10BF80001BB1044B40F2EE32EEE7002CABD1204661 +:10BF90009FE700BF5CAD030841AF03089959030850 +:10BFA00088AF0308A3AF0308B0AF030871AF03085D +:10BFB0002DE9F0410F469046054650B92E461B4BE1 +:10BFC00040F20A421A491B4818F0C4FB3046BDE84B +:10BFD000F08141BB154B40F20B4217493E461548D4 +:10BFE00018F0B8FBF2E76C8953B1A34208D31B1BCE +:10BFF0009BB22D68B8F1000FE8D0002DF3D1E5E732 +:10C00000E41A6968B819A4B21944444528BF4446E3 +:10C010002246264418F0ADFDA8EB0402B6B2002378 +:10C020001FFA82F8E5E70026E4E700BF5CAD0308ED +:10C03000DAAF030899590308F9AF030838B5154674 +:10C040000A462989FFF7E0FD044650B12946FFF76B +:10C050002DFF30B1044B40F224520449044818F03B +:10C0600079FB204638BD00BF5CAD03081CB0030857 +:10C070009959030810B50446002208460421EDF73B +:10C0800047FA2060B0FA80F04009404210BD00231A +:10C0900007B51A460191006801A9EDF77FFA00384B +:10C0A00018BF0120404203B05DF804FB37B50546D8 +:10C0B000CDE90021EDF746F80446DDE9002152B153 +:10C0C000134628680022EDF7ABFA50B9EDF73AF8BD +:10C0D000001B03B030BD4FF0FF332868EDF7A0FA26 +:10C0E000F4E74FF0FF30F4E70068003818BF012094 +:10C0F0007047000008B50020EDF7A6F8014B186066 +:10C1000008BD00BFA8E6012010B504460020EDF7E9 +:10C110009BF82060B0FA80F04009404210BD4FF01B +:10C12000FF310068EDF7D4B80068EDF701B9F0B55C +:10C130008BB0154607460C462022002102A81E4659 +:10C1400018F03CFC109B01AA294620460197069650 +:10C150000793EDF70BF80BB0F0BD000008B5044BEA +:10C160004FF0FF311868EDF7B3F8012008BD00BFAC +:10C17000A8E60120014B1868EDF7DAB8A8E601201F +:10C1800010B5044630B9134B4FF4CE721249134820 +:10C1900018F0E0FA237D042B03D0072B0CD0032BDF +:10C1A00008D1204602F074FC60B9052320462375AF +:10C1B00002F0CEFD002010BD204602F069FC08B957 +:10C1C0000923F3E7431CF6D1638B43F00803638331 +:10C1D000F0E700BF2DB00308ADB00308995903087C +:10C1E00008B518F097F96FEA8040024B6FEA90406B +:10C1F000188008BD5C00002010B5037D0446012BAB +:10C2000005D1064BD4220649064818F0A3FA214668 +:10C210000120BDE81040FFF713BA00BF2DB003089E +:10C22000B9B003089959030870B5044630B9154BE5 +:10C2300040F2A6321449154818F08CFA238DE16AB1 +:10C24000668E626A581AB6F5866F104494BF851BD5 +:10C25000A0F58665002D0FDA531A002B0EDC8D1A1F +:10C26000B5F5803F06D3074B40F2B6320849074880 +:10C2700018F070FAABB20020638570BD0023184639 +:10C28000FAE700BF2DB00308CAB0030899590308A4 +:10C29000EEB0030870B50C46054640B9184B40F2A5 +:10C2A000CF3218491848BDE8704018F053BA037DE2 +:10C2B000012B06D1124B40F2D2321449124818F029 +:10C2C00049FA2B8D191989B2B1F5066F13D88B4233 +:10C2D00088BF4FF4066128462985FFF7A5FFB0F512 +:10C2E000067F0BD36B8B284643F002036B83BDE8BC +:10C2F000704002F02DBD4FF40661ECE770BD00BF49 +:10C300002DB0030808B103089959030820B10308A8 +:10C3100010B5044648B1406808B1FFF70DFC21464E +:10C320000320BDE81040FFF78BB910BD10B500B970 +:10C3300010BD0468FFF7ECFF2046F8E738B5044667 +:10C3400030B90D4B40F282620C490D4818F002FAE8 +:10C350000320FFF745F9054660B12346024604F184 +:10C36000100153F8040B8B4242F8040BF9D16868B2 +:10C37000FFF73CFD284638BD2DB0030846B1030841 +:10C380009959030808B530B9064B40F6AF02064983 +:10C39000064818F0DFF9064B064A18681268104480 +:10C3A000186008BD2DB0030860B10308995903084F +:10C3B00058000020BCE6012038B504460D4632B9CD +:10C3C000094B40F6C5020949094818F0C3F94DB1B7 +:10C3D0002B8D3BB1282B8ABF283B00239BB29C426C +:10C3E00028BF1C46204638BD2DB003087AB103088B +:10C3F0009959030810B50446406F18B1FFF796FF2E +:10C400000023636710BD000010B5044640B9144B0B +:10C4100040F6510213491448BDE8104018F09AB98B +:10C42000037D012B1AD90A2B18D0806F18B1FFF7A2 +:10C4300083FB0023A367636F13B12046FFF7DAFF86 +:10C440004FF6FF73E06E2386FFF770FF206FFFF754 +:10C450006DFF0023C4E91B33A4F8683010BD00BF92 +:10C460002DB00308A1B103089959030838B5054652 +:10C470000C4631B9294B40F683022949294818F066 +:10C4800069F935B9254B40F684022749254818F04B +:10C4900061F92B68A3421FD1E3682B60002320467B +:10C4A000E360FFF7B1FF237D0A2B1DD1E36E6BBB69 +:10C4B000236F33B1194B40F694021C49194818F008 +:10C4C00049F9636FF3B1154B40F6960218491548C8 +:10C4D00018F040F916E01346002BDFD0DA68A242CC +:10C4E000F9D1E268DA60D9E7012B0BD0638BDA0768 +:10C4F000DCD543F002032046638302F029FC237D50 +:10C50000012BD3D100232375E38238BD034B40F6C2 +:10C5100093020849034818F01DF9C9E72DB0030834 +:10C52000BCB1030899590308D8B1030810B2030835 +:10C5300029B20308F8B103082DE9FF470E46044667 +:10C5400048B9364B40F23D223549364804B0BDE883 +:10C55000F04718F0FFB8037D012B06D12F4B4FF4A5 +:10C56000107231492F4818F0F5F8237D0A2B09D1B4 +:10C5700021462E48FFF77AFF204604B0BDE8F04779 +:10C58000FFF73ABED4F85090D4F824A0D4F89070B5 +:10C59000D4F81080E58A9BB93DB1254A1368A342BF +:10C5A00006D1E36813600025E5602E460FE01346D0 +:10C5B000002BF8D0DA68A242F9D1E268DA60F2E73B +:10C5C00021461C48FFF752FF1B4B01221A70206FB7 +:10C5D00008B1FFF7ABFEE06E08B1FFF7A7FE606F92 +:10C5E00008B1FFF7A3FE56B1238B524649462046B9 +:10C5F000CDE90153231D0093234602F031FB204671 +:10C60000FFF7FAFD3FB16FF00C0140463B4604B026 +:10C61000BDE8F047184704B0BDE8F0872DB0030827 +:10C6200040B203089959030859B20308C4E601202F +:10C63000B4E60120ACE60120B0E601200121FFF7BD +:10C640007BBF000070B50C46054630B9094B4FF46E +:10C6500010620949094818F07DF804B970BD2268D4 +:10C660002B68E6689A4202D12046FFF7E7FF34467E +:10C67000F3E700BF2DB003088AB2030899590308F5 +:10C6800038B50D46044680B1036873B10B4B196889 +:10C69000FFF7D8FF0A4B20461968FFF7D3FF25B1F3 +:10C6A0002B6813B1074B1B6803B938BD19682268A2 +:10C6B000914204BF2A681A60DB68F5E7ACE6012006 +:10C6C000B4E60120B8E601200C4B30B41968002410 +:10C6D0000B4B22461D6821B972B1104630BCFFF7E2 +:10C6E0002BBF0B7D834205D10B6AEB1AA34224BFFB +:10C6F0001C460A46C968EEE730BC7047ACE601202C +:10C70000BCE60120F8B504460120FEF769FF0346A8 +:10C71000002836D13F4E3068002857D13E4B0146A5 +:10C720003E4D1B682F68002B5BD108B1FFF786FFD9 +:10C730000120FEF755FF034618BB0920FFF7C4FF91 +:10C740000120FEF74DFF0346D8B90820FFF7BCFFD4 +:10C750000120FEF745FF034698B9220649D45CB193 +:10C7600021460139326800202E68C9B2002A42D120 +:10C7700013B11846FFF762FF0120FEF731FF0346B1 +:10C7800010B39C221846002118F018F94FF4866265 +:10C7900003464475A0F86420214A8262FF22C272D7 +:10C7A0000622A0F84020C2871E4A02631B4A126874 +:10C7B00002621D4A127882771C4A82641C4AC0F8C1 +:10C7C00084201C4AC0F894201846F8BD438BC568E5 +:10C7D000190704D523F008034383FFF7D1FC28464B +:10C7E0009AE71A6ABA1A8A4224BF18461146DB68C9 +:10C7F00099E77F21B5E7577D8F4204D307D1156AAA +:10C80000751B854203D3106A39461346301AD26825 +:10C81000ACE700BFACE60120C4E60120BCE6012085 +:10C8200060086008FFFF1802C1E601200100300423 +:10C83000D9C9010800DD6D0030B50D4685B004464C +:10C8400030B94B4B4FF4AF724A494B4817F082FF57 +:10C85000237D002D3FD0042B01D0072B3BD1A26FAD +:10C860001AB9228DB2F5066F35D0638BDB0606D47C +:10C870003F4B4FF4B27241493F4817F06BFF238B97 +:10C8800020460293E38A0193231D00932346626AA4 +:10C89000216D02F0E5F92046FFF7B6FD384A13682E +:10C8A000A34210D1E368136000230122E360354BFB +:10C8B0001A70354B1B68A3421DD101F049FE0020C0 +:10C8C00005B030BD1346002BEED0DA68A242F9D194 +:10C8D000E268DA60E8E7012B1AD0022B39D0002B8E +:10C8E0003FD1E38A3BB1294A1368A34208D1E368E8 +:10C8F00013600023E3602046FFF77EFCDFE713466A +:10C90000002BF6D0DA68A242F9D1E268DA60F0E7EB +:10C910001F49002051F8042F1268A2B90133042BDB +:10C92000F8D121461B48FFF7A1FD237D012B05D13E +:10C930000F4BDF221849104817F00CFF2146022048 +:10C94000FEF77EFEBBE7D56FAC4208BFD067D2686A +:10C95000E3E721460A48FFF789FD0A4B01221A70D6 +:10C96000C9E7204605B0BDE83040FFF709BC00BF6D +:10C970002DB00308BEB2030899590308DEB20308BC +:10C98000ACE60120B0E60120F0E60120B4E601208B +:10C9900030B50308B8E60120F7B2030808B558B16E +:10C9A000037D0121012B1EBF438B43F01003438302 +:10C9B000BDE80840FFF740BF044B4FF4F472044950 +:10C9C000044817F0C7FE6FF00F0008BD2DB0030834 +:10C9D00010B303089959030810B50846144649B91D +:10C9E0000C4B4FF4D3620C490C4817F0B3FE6FF0B8 +:10C9F0000F0010BD3AB11189FFF74CFC2046FFF73C +:10CA00009BF80020F5E71BB9BDE81040FFF7C6BF53 +:10CA10001046EEE72DB0030827B303089959030821 +:10CA2000F8B5044650B96FF00F051C4B40F209628F +:10CA30001B491C4817F08EFE2846F8BD866F002360 +:10CA4000D0F88450777B8367DDB1014632460069B8 +:10CA5000A8470546E0B9BB06EED5238DD4F884601F +:10CA6000B3F5066F1CBF01332385002EE4D00023ED +:10CA7000214620691A46B0470D30DDD16FF00C0514 +:10CA8000DAE701462B4632462846FFF7A5FFE0E7E6 +:10CA90000D35F3D06FF00405A667CDE72DB0030880 +:10CAA00042B30308995903082DE9F8431B4D1C4F65 +:10CAB0002B781C4E01332B703C684FF000080CB9EA +:10CAC000BDE8F8832B78A27F9A4224D0A377638BAA +:10CAD000D90709D543F002032046638302F038F9F1 +:10CAE000638B23F003036383638B1A0705D523F05D +:10CAF000080320466383FFF743FBA36FD4F80C9031 +:10CB00003BB1204686F80080FFF78AFF3378002B80 +:10CB1000D2D14C46D3E7D4F80C90FAE7C1E6012015 +:10CB2000ACE60120B0E601202DE9F04F914E87B030 +:10CB3000914A3368DFF86CA20133904F3360137869 +:10CB400001331370DAF800404FF00009DFF8588223 +:10CB50006CB98B4FDFF824823D68DFF850A2DFF814 +:10CB60004892002D40F0B88107B0BDE8F08F237DDA +:10CB700033B93B4640F2BE428249404617F0EAFDD7 +:10CB8000237D012B06D13B4640F2BF427E49404601 +:10CB900017F0E0FD237D0A2B06D13B464FF4986247 +:10CBA0007A49404617F0D6FD734BA27F1B789A4214 +:10CBB00003D1E568A1462C46CAE7227DA377022A65 +:10CBC00094F8423040F08980052B40F288804FF085 +:10CBD000010B227D062A0BD1618BCB0608D531686B +:10CBE000206A091A282984BF0BF101035FFA83FB2D +:10CBF000657A15F0080519D0042A02D0072A40F0FA +:10CC00003281226A4FF4FA753068801AD4F8942081 +:10CC100002F5242101F6B841B1FBF5F1884240F25A +:10CC200010810BF1010301255FFA83FB626F62B192 +:10CC30003268216A511AB4F9402002EB4202B1EB8A +:10CC4000420F02D32046FFF7D5FB227D032A40F096 +:10CC50000C813268216A521A282A03D8BBF1000FCE +:10CC600000F018812046D4F890B0FFF7CDFBDAF839 +:10CC70000030B9F1000F00F00081A34206D13B461D +:10CC800040F26D524249404617F064FDE368C9F82E +:10CC90000C305DB1238B20460293E38A0193231D60 +:10CCA00000932346626A216D01F0DAFF2369204672 +:10CCB000E5680593FFF7A0FA364C00222270BBF11D +:10CCC000000F08D0059B6FF00C011846D847237859 +:10CCD000002B7FF437AF4C466CE70B2B75E794F8CD +:10CCE00099B0BBF1000F63D0236F33B13B4640F2E4 +:10CCF000D4422949404617F02DFDE36E33B93B4637 +:10CD000040F2D5422549404617F024FD94F89A3068 +:10CD10000B2B3FF65CAF94F89920214B134413F88A +:10CD2000012C94F8983093420BD3B4F8601089B179 +:10CD3000204601F04DFD90B9204602F009F830B1CF +:10CD40000DE00133DBB2934284F89830EDD24FF01E +:10CD5000000B3EE7204602F003FA0028F7D194F8D2 +:10CD600099200023062A84F89830F0D8013284F8FC +:10CD70009920ECE7BCE60120C1E601202DB00308B4 +:10CD8000C4E6012068B3030892B30308BCB30308E8 +:10CD900050B40308B0E60120E9B303081BB403084C +:10CDA00040B50308ACE6012099590308A5B403086F +:10CDB000228E47F6FE718A429CBF01322286B4F968 +:10CDC0004020B4F930109142C1DB204601F090FEC2 +:10CDD00028B1226F002ABAD1E26E002AB7D0227D94 +:10CDE000022A14D0B4F93C10B4F93E20554802EBA5 +:10CDF000E10294F842100C2928BF0C21415C8A40C2 +:10CE000047F6FF718A42A8BF0A46A4F84020B4F84A +:10CE100048500021B4F86020608EAA422186A4F810 +:10CE2000480028BF2A464500A4F86A102046520848 +:10CE3000ADB2AA4238BF2A46A4F84A2002F032F91D +:10CE4000C7E694F89B10404B03FB0122B2FBF5F2BE +:10CE5000904208D9204602F05BF920B994F89B2053 +:10CE6000013284F89B200025E0E6092A7FF4F6AE23 +:10CE70003268216A521AF02AEFE6A34206D03B46F6 +:10CE800040F271523149404617F064FCE368CAF839 +:10CE90000030FEE6227F617F0132E568D2B2914226 +:10CEA00022773FF687AEDFF8B090D4F88C3084F864 +:10CEB0001CB089F800B01BB9204601F049FF79E6A3 +:10CEC00021462069984799F80030002B7FF43AAE4C +:10CED00000287FF46FAEEFE72B7D0A2B06D0434688 +:10CEE00040F2A1525146484617F034FC33682A6A92 +:10CEF0009B1AF02B10D92846FFF786FA7CB93B68BD +:10CF0000AB4206D0434640F2B3521149484617F0AF +:10CF100021FCEB683B600EE02C46ED6821E63B68A7 +:10CF2000AB4206D1434640F2AF520A49484617F099 +:10CF300011FCEB68E360D5F80CB02846FFF75CF90C +:10CF40005D460EE621B50308F82401007BB4030812 +:10CF5000FBB40308D4B40308B0E6012008B5FFF71A +:10CF6000A3FD064A13780133DBB21370DB0703D548 +:10CF7000BDE80840FFF7D8BD08BD00BFC0E60120EE +:10CF8000094A1388591C1180084A12681AB10849C5 +:10CF900009888B4204D2074A12681344187D7047EF +:10CFA0005B1ADBB2D05C7047F4E6012000E7012099 +:10CFB000FCE60120F8E60120F8B50C46054630B93C +:10CFC0001E4B40F21F421E491E4817F0C3FBEB6880 +:10CFD0009889FBF784FCC20714D41B4EE7683068BD +:10CFE0002B897968228903440A449A1A002A0FDAA5 +:10CFF0005B1A002B0ADD091A686889B22981FEF7DD +:10D0000095FE03E020460024FFF790F92C60F8BD60 +:10D01000B889FBF764FCC30707D5EB6801209F893B +:10D02000FBF75DFCEB683843988127682046FFF7E3 +:10D030006FF93C46002FD1D1E8E700BF47B50308A0 +:10D04000CAB5030899590308ECE60120F8B506466D +:10D0500030B91D4B40F27D721C491D4817F07AFB18 +:10D060001C4B1F8867B11C4D00232B802B88BB42B3 +:10D0700006D2FFF785FF0128F8D0022801D0C8B9F1 +:10D08000F8BDFFF77DFF0428FAD12B880133BB429E +:10D09000F6DAFFF775FF0402FFF772FFA4B244EA65 +:10D0A00000039BB25A1EB2F5067F28BF4FF40673E9 +:10D0B0007386DBE7FFF764FF0128E1D92B88023B89 +:10D0C00018442880D2E700BF47B50308EFB503082E +:10D0D0009959030804E70120F4E6012010B504463D +:10D0E00030B90F4B40F25A220E490F4817F032FB6D +:10D0F0000E4B187810F0100011D0638BDB0606D4AD +:10D10000D4F890301BB16FF00E012069984721468A +:10D110000748FFF7ABF92046FFF76EF8012010BD76 +:10D1200047B5030809B6030899590308E8E6012042 +:10D13000ACE601202DE9F84F064617460C46DFF80D +:10D14000B080DFF8A490DFF8ACA0002C39D0E36801 +:10D150005868FBF7C7FBE368834625899889FBF786 +:10D16000BEFBD8F8003010F00300A5EB030518BF94 +:10D1700001205D440544002D24DCD4E900B0FEF715 +:10D180002DFEB6F866300546834206D24B4640F285 +:10D1900057425146124817F0DDFAB6F8663020467D +:10D1A000104A5B1B1188A6F8663023890B44138054 +:10D1B000FFF7AEF8B6F866307BB1BBF1000F0CD1CB +:10D1C0001FB100242046BDE8F88F074B40F26142B2 +:10D1D0000649034817F0BEFAF3E75C46B5E700BF1F +:10D1E00099590308E0E6012047B5030856B603083D +:10D1F000C8E601202EB603082DE9F84F044630B9E1 +:10D200003B4B40F27B423B493B4817F0A3FA237D5E +:10D21000032B06D8364B40F27C423849364817F08B +:10D2200099FA374A374E1278336812F0100F364F9A +:10D2300000F09B80DFF8D890B4F86010D9F8002097 +:10D24000D4E9150CA0EB030EBEF1000F0CDB9842E5 +:10D2500003D1ACEB0200002806DB944513D12B4828 +:10D260000068C08988420ED92848B4F862800068F6 +:10D27000C0891FFA80FEA4F86000F045C4E91532A9 +:10D2800038BFA4F86200606C131A002B00F3798198 +:10D290003B88002B40F07181B4F860306144A56D8B +:10D2A0002B448B4240F06981B4F93030002BC0F23E +:10D2B0006481904240F0618194F84330FF2B1CBFA1 +:10D2C000013384F8433094F84330032B22D9B4F867 +:10D2D00048204FF6FF71638E13449BB29A4288BF79 +:10D2E0000B46A4F84830204601F086FC13E000BF4E +:10D2F00047B5030876B60308995903088FB60308A3 +:10D30000CCE60120ECE6012006E70120F8E601204A +:10D31000C8E60120E7D0636B3BB3A26BD9F80010DD +:10D32000521A002A21DAB64A9BB2B4F93CC01588D9 +:10D33000CCF3CF01EA1A521A10B21CFA82F200287A +:10D3400012B2B8BF5B1BA287B8BFC918B4F93E3090 +:10D35000B8BF08B2A3EBA30303449BB2E38703EB7C +:10D36000E203A4F840300023636338883368626ABC +:10D37000002800F05A83217D062900F25683D51A31 +:10D38000012D00F1A881C3F10101091A11440029FE +:10D3900000F3A181DFF88092D9F80480B8F1000F82 +:10D3A00006D1984B40F294529749984817F0D2F919 +:10D3B0004FF6FE739D4206D9924B40F29552944926 +:10D3C000924817F0C7F9D9F80430ADB21B89AB42C7 +:10D3D00006D28C4B40F297528E498C4817F0BAF91E +:10D3E000B9F8083000215B1BA9F80830D9F80430DF +:10D3F0001B895B1B9BB2B8F80A20AA42C0F062816D +:10D4000029464046FEF764FB636AD9F80C20336076 +:10D4100053603368626A991A0029C0F23182581C3D +:10D42000258D811A491B002900F32A82934240F07E +:10D430002182794DEB68B5F808809889FBF74FFA9F +:10D4400010F00300228D18BF012008EB00039BB2EF +:10D450009A423B8041D2EB689889FBF740FAC207B9 +:10D460000FD5EB68B3F80C80404628F47C58FBF7E6 +:10D4700036FA00F03E00FBF732FAEB6840EA0800AB +:10D480009881238D2B81EB689889FBF728FA830715 +:10D49000686842BF2B8903F1FF332B812989FEF78E +:10D4A00045FCEB68B5F808809889FBF718FA10F08E +:10D4B0000300326818BF0120616A08EB00039BB2C9 +:10D4C0003B801344228D0A44934206D04D4B40F2D8 +:10D4D000CB5252494D4817F03DF9636F002B00F0D5 +:10D4E0000981EB689889FBF7FAF9C00700F1FF8022 +:10D4F000D4F8748030683B880344B8F1000F39D009 +:10D50000D8F80CC0B8F80810DCF804201144591AF7 +:10D51000002980F21C819B1A002B2BDDEB68121A6C +:10D520002A819889FBF7DBF98307686842BF2B895A +:10D5300003F1FF332B812989FEF7F8FBEB68B5F87F +:10D5400008909889FBF7CBF910F00300326818BFF8 +:10D55000012009EB00039BB23B801344D8F80C2058 +:10D560005268934206D0274B40F2FC522C49274880 +:10D5700017F0F0F8C4F87480BCE0002384F843305E +:10D58000C9E6216D511A002900F39880618B480784 +:10D5900009D521F004016183B4F84A10A4F84810B9 +:10D5A0000021A4F86A10B4F93C00E18F626401EB39 +:10D5B000E001227DA4F84010032A4FF00001A4F8F6 +:10D5C000421039D9B4F848209BB2B4F84A109142BD +:10D5D00028D9618B11F4006F618E14BF01200220E5 +:10D5E00011FB00F189B2994294BF5018D01883B250 +:10D5F0009A4201D94FF6FF73A4F848301CE000BFEF +:10D60000BCE6012047B50308A8B6030899590308EA +:10D61000B8B60308C7B60308D0E60120D7B603089A +:10D620000EB70308B4F86A100B449BB299422CD889 +:10D630009A422CD9A4F86A302046D4E91B21FFF77E +:10D6400079FDE16E024620672046FFF773FD226FE9 +:10D65000E066B2FA82F35B095B42238600232377FC +:10D6600008B9A4F868009F49B4F8643009880B44ED +:10D67000A4F86430638B19057FF54DAED2B968B953 +:10D68000638B23F40063638345E64FF6FF739B1AB5 +:10D69000A4F86A30638E13449BB2A9E7D4F84C8097 +:10D6A000C3685868FBF71EF9A8EB000000283FF795 +:10D6B00032AEE5E7D4F84C80D368F2E7204601F0BB +:10D6C00015FB28E6AA1AA8F80830A8F80A1095B29F +:10D6D000D8F800808FE69B1A002BBEBF638B43F007 +:10D6E0000203638395E603686367FEF711FE606FCC +:10D6F0000028F8D13A88336813446362238D93423B +:10D7000006D2794B40F207627849794817F022F83F +:10D71000238D20463A889B1A2385FEF785FD6B688A +:10D720001A891AB1734A136000236B60EB689889F9 +:10D73000FBF7D5F8C50704D56F4A137843F02003EB +:10D740001370694FDFF8B881DFF8A4917CE0BCF872 +:10D750000C00FBF7C4F8C1071BD5EB689889FBF7F1 +:10D76000BEF8820715D4EB680120B3F80C90FBF7E4 +:10D77000B6F8EB6849EA0000B5F80890988180B2E5 +:10D78000FBF7ADF810F0030018BF01208144A7F8A3 +:10D790000090D8F800904046FEF7BAFDC846A9E6CA +:10D7A00033609089B5F808A0FBF799F8636A10F028 +:10D7B0000300B5F808B018BF01209A44EB68504444 +:10D7C000B4F828A060629889FBF789F810F003008C +:10D7D00018BF01205844824506D23B4640F22B62D6 +:10D7E0004146484616F0B6FFEB68B5F808A09889A0 +:10D7F000FBF775F810F00300238D18BF012050448B +:10D800001B1A20462385FEF70FFD69680B8933B18B +:10D81000384B186838B3FEF705FB00236B60EB68E4 +:10D820009889FBF75CF8C00709D5334A137843F0B1 +:10D8300020031370237D042B04BF072323752B685B +:10D8400028466367FEF764FD656F25B1EA68616A83 +:10D8500053688B42A4D0638BD90706D523F001030C +:10D8600043F0020303E01960D7E743F00103638349 +:10D87000BDE8F88F656F45B92048FEF75FFD60672A +:10D880002046BDE8F84F01F031BA4FF0000803F12F +:10D89000FF3ED5F80CC0DCF80420934215D11748A0 +:10D8A0002B8902899A42EBD9FEF748FD0028E7D080 +:10D8B000B8F1000F07D0C8F800002946FFF77CFB3D +:10D8C000DEE70D46E5E76067F7E7B8F1000F19D12D +:10D8D000991A00293DDA0948FEF730FD0028CFD01B +:10D8E0006067EAE7E0E6012047B5030849B70308A7 +:10D8F00099590308E4E60120E8E60120D0E601207A +:10D9000068B70308D8F80C104968AEEB010100298C +:10D910001FDB811A00291CDC4A48FEF70FFD074671 +:10D920000028ADD0D8F80C3031685A68B8F8083003 +:10D9300013445B1A002B07DD891AD8F8040089B25A +:10D94000A8F80810FEF7F2F929463846C8F8007022 +:10D95000B4E72968A8460029B3D19B1A002B8FDDB4 +:10D96000BCF80C00FAF7BBFFC20789D43548FEF7B4 +:10D97000E5FC2860002883D0EB6831685A682B8961 +:10D9800013445B1A002B05DD891A686889B2298166 +:10D99000FEF7CCF932683B881344626A9B1A228DE9 +:10D9A0009B1A002B7FF76CAF2B68DB689889FAF71E +:10D9B00096FFC30711D52B68DB68B3F80C8040468F +:10D9C00028F47C58FAF78BFF00F03E00FAF787FF47 +:10D9D0002B6840EA0800DB6898813268218D2B684B +:10D9E000891A626A5868114489B21981FEF79EF952 +:10D9F0002B681D89DB689889FAF771FF10F0030026 +:10DA0000326818BF0120616A2B189BB23B80134417 +:10DA1000228D0A4493423FF433AF0B4B4FF4DF6245 +:10DA20000A490B4816F096FE2AE7991A002906DBE8 +:10DA300001339B1A228D9B1A002B7FF719AF638B42 +:10DA40000EE700BFD0E6012047B50308D7B60308AC +:10DA5000995903082DE9F04F054687B028B9634B63 +:10DA600083226349634816F075FE6B68624E33602B +:10DA70006B89132B40F2B380604F39687869FCF7EB +:10DA8000CCFE0446002840F0AA807B6903F0F00336 +:10DA9000E02B00F0A48033689889FAF720FF810A10 +:10DAA00001F0FC01132940F29A802B898AB28B4243 +:10DAB000C0F09580A2F114036889DFF860819BB201 +:10DAC000DFF85CA19042DFF85C91A8F80030CAF85A +:10DAD000004042D32846A9F80030FDF7F9FF34682A +:10DAE000DFF844B12088FAF7FAFE208034686088B5 +:10DAF000FAF7F5FE608034686068FAF7F3FE404B91 +:10DB0000606034681860A068FAF7ECFEA0603468C2 +:10DB1000CBF80000E089FAF7E2FE3368E0819889EB +:10DB2000FAF7DDFE374A00F03F03137083072A89B6 +:10DB30004FD1354B1A80DFF8F4804FF0000A2B4BA1 +:10DB4000D8F80040DFF8AC90002C73D12F4BDFF8F1 +:10DB5000E0A01C68DFF89C905AE12B682BB9234B9E +:10DB6000C2222B49234816F0F5FD14212846FDF763 +:10DB7000AFFF6C892846A9F800402146B8F800900C +:10DB8000FDF7A6FF2868A9EB040843891FFA88F867 +:10DB9000434524D343684146CAF80030FDF798FF57 +:10DBA0002B891C446B89A4EB09042C812BB10F4BEE +:10DBB000DF2218490F4816F0CDFD2B682A891B89F2 +:10DBC0009A428CD0094BE02213490A4816F0C2FD54 +:10DBD00085E7531C0C499BB29A420B80ABD928466F +:10DBE00007B0BDE8F04FFDF7A7BF00BF47B503087A +:10DBF0008DB7030899590308F8E6012034AF0120D6 +:10DC0000ECE60120CCE6012006E70120C4E6012075 +:10DC1000A5B70308B5B70308C1B7030804E7012097 +:10DC200000E70120FCE60120C8E60120ACE6012067 +:10DC3000ADB80308227D2AB9FB229D49484616F05B +:10DC400089FD9C4B227D0A2A05D1FC229A4948462F +:10DC500016F080FD974B227D012A05D1FD229749C0 +:10DC6000484616F077FD934B207AE16830B17A6828 +:10DC700092F834200132D2B2904273D13268B4F8B3 +:10DC800018C0108884456DD1E08A5288904269D1CD +:10DC900060683A69904265D120687A69904261D1A2 +:10DCA000A14240F04584834B40F20D1284498548DF +:10DCB00016F050FDBAF1000F07D0E368CAF80C3037 +:10DCC000D8F80030C8F80040E360E368A34206D10A +:10DCD000784B40F215127C497A4816F03BFDDFF88C +:10DCE000109200232A89DFF80CA2A9F808203268D4 +:10DCF000764FC9F80C20764AC9F80030CAF80030CF +:10DD00003B701380734BC9F804501B781B0703D575 +:10DD10006B7B43F001036B73A36F6F4D002B00F01F +:10DD20004C812046FEF77CFE0D3008D0A36F002BFF +:10DD300000F04381694B1B88002B00F03E81638D0E +:10DD400013B9204600F0D2FF0024D9F804002C605B +:10DD5000CAF8004018B1FDF7EFFEC9F8044007B05B +:10DD6000BDE8F08FA2460C46EEE6237D0A2B06D0D6 +:10DD7000504B40F21F125146484616F0EBFC227AF7 +:10DD800032B17B6893F834300133DBB29A423ED132 +:10DD90003368208B1A88904239D15B88E18A994296 +:10DDA00035D162683B699A4231D122687B699A42D7 +:10DDB0002DD1484B1B785E073FF511AF474A1688B7 +:10DDC0009A0714D5464B1A68636AD31A14D4278D60 +:10DDD000DB1B002B10DC434B3244CDE901100093D8 +:10DDE00020460433DBF8001000F03AFFF7E6DF07C7 +:10DDF00042BF3D4B1B682362002E3FF4F0AE638BA5 +:10DE0000204643F00203638300F0A2FFE7E6E468E4 +:10DE1000002CAAD1354BD7F804C01A683168D7F85E +:10DE200014E09146B9F1000F13D18889FAF757FD34 +:10DE300042073FF5D4AE3368284A18881188284A2B +:10DE4000126802905B880A440193264B00930433C6 +:10DE50006AE399F8080028B19CF834300133DBB24A +:10DE600098420CD14888B9F81630834207D1D9F8C6 +:10DE70000030734500F03B83002B00F038834C46A4 +:10DE8000D9F80C90CEE798077FF5A9AE99F8150060 +:10DE9000FEF738FC824678BBD9F81830002B3FF4E7 +:10DEA0009EAE01464FF0FF32D9F81000984796E633 +:10DEB000E0B7030847B5030807B8030831B80308FB +:10DEC00058B803089959030883B80308E8E6012005 +:10DED000E0E60120CCE60120F0E6012006E7012083 +:10DEE000ECE6012044AF0120BCE60120B8E60120A9 +:10DEF000D0E60120E4E601207B69326803603B69DB +:10DF0000A84F4360B9F81630C3821378527843EAB9 +:10DF100002230383032303753B6801334362C36217 +:10DF2000FEF730FA3B68CAF85800013BCAF85000C7 +:10DF3000CAF84400CAF85430D9F81030CAF85C0066 +:10DF4000CAF81030CAF87C9099F8093003F00C0335 +:10DF50008AF8093099F808308AF80830D8F8003083 +:10DF6000C8F800A0CAF80C3001F0D6FA8E4B012296 +:10DF700050461A70FFF76AF833680AF10402BAF8DB +:10DF80003260DB8910460592AAF86030AAF8623048 +:10DF9000FCF7C4FA059A01463046FEF70DFA122145 +:10DFA000AAF83200504600F0DFFC20B1214650466E +:10DFB000FEF7C2FA13E6504626E77C4B2C601A782F +:10DFC000510739D5217D02291FD1226DDBF80030A0 +:10DFD0009A4207D13B7843F008033B70638B23F0F0 +:10DFE000010363833B78180740F10482D4F8903032 +:10DFF0001BB16FF00D012069984721466C48FEF770 +:10E0000035FA2046FEF7F8F89EE6664B626A1B6812 +:10E010009A4207D09B1AE5D4228D9B1A002BE1DC93 +:10E02000638B10E00029D5D1624B4FF44E726249E8 +:10E03000624816F08FFBCDE79207638B06D5227DF1 +:10E04000023A012A02D943F00203CAE7D806204661 +:10E050005EBF5B4B1B6823620023A4F89A30FEF777 +:10E06000F5FF237D023B072BBCD8DFE813F0080047 +:10E07000B30024012801730124018C01AC014B4B36 +:10E080001B7803F01202122A6CD1626CDBF80010CC +:10E0900001328A4266D1434B62641B683268591C64 +:10E0A000013B668E6162E162D28963650423A4F854 +:10E0B0006020A4F86220E218237510460592FCF750 +:10E0C0002DFA059A01463046FEF776F941F21C1307 +:10E0D0004200608681009A42164638BF1E46B6EB63 +:10E0E000800F33D98BB2A4F84830B4F8663033B916 +:10E0F000304B4FF45B723349304816F02BFBB4F8C9 +:10E100006630266F013BA4F866301EBBE66E36B95A +:10E11000284B4FF45D722C49284816F01BFB3368DE +:10E12000E3663046FEF7F4F8236FB3B94FF6FF739A +:10E130002386D4F88830002B3FF472AF00222146AA +:10E14000206998470D307FF46BAFFDE59A4288BF98 +:10E1500093B2C8E733682367E3E70023238684F894 +:10E160004230E6E7D9067FF53DAF3368174A188895 +:10E1700011880C4A1268029020465B880A44DBF83A +:10E1800000100193124B0093043300F069FD94F8E2 +:10E190004230052B3FF626AF00232046238600F0B1 +:10E1A0009DFF1FE7ECE60120B0E60120CCE6012050 +:10E1B000ACE6012047B50308DAB80308995903080B +:10E1C000BCE60120FAB8030810B9030806E70120ED +:10E1D00044AF01209D4B1B78DA065ED5636CDBF8FB +:10E1E0000010DB43CB4247D4236DCB1A002B43DC1A +:10E1F00004232375E36F1BB92046FEF71FFAA3E53E +:10E200009B6933B9924B4FF46A729249924816F067 +:10E21000A1FAE36F9B69002BEED000222146206912 +:10E22000984718B10D303FF48FADE5E72046FEF773 +:10E23000E3FF8A4A13880BB1013B1380618E41F2E0 +:10E240001C134A0088009A42164638BF1E46B6EB99 +:10E25000810F0DD983B2A4F848303B7898067FF53A +:10E26000C1AE638B43F00203638307232375B9E6D2 +:10E270009A4288BF93B2EEE73368794A1E881088C5 +:10E28000784A126802965B88024420460193764BD6 +:10E290000093043300F0E4FCA4E69E077FF5A2AEF1 +:10E2A000636A704A013B126893427FF49BAE20463A +:10E2B00000F062FC96E62046FEF79EFFCDE7204682 +:10E2C000FEF79AFF3B7813F0200F604B1B7832D09B +:10E2D00013F0100F638B29D0216DDBF800209142E1 +:10E2E00024D1E26E12BB43F0020320466383FEF7A3 +:10E2F0008BF8D8F800309C420AD1E368C8F80030A7 +:10E3000008E0DA68944202D1E268DA6002E013467B +:10E31000002BF6D1554B01221A700A232375544B5A +:10E320001A681C60E26001F0F7F85BE643F0020354 +:10E33000638308239AE7D9067FF554AE226DDBF894 +:10E3400000309A427FF44EAEE36E002B7FF44AAE6B +:10E3500006238BE72046FEF74FFF3B789A067FF5B2 +:10E3600041AE638B204643F002036383FEF74CF813 +:10E37000D8F800309C42C0D0002BCBD0DA68944251 +:10E38000C2D01346F8E72046FEF736FF2F4B1B7826 +:10E39000DB067FF527AE226DDBF800309A427FF472 +:10E3A00021AEE36E002B7FF41DAE2046FEF72CF865 +:10E3B000D8F800309C42A0D0002BABD0DA68944251 +:10E3C000A2D01346F8E72046FEF716FF1F4B1B7836 +:10E3D000DE067FF507AE216DDBF800203B78914229 +:10E3E0007FF400AEE26E002A7FF4FCAD43F0100330 +:10E3F0003B70F7E5194B1A882AB1D4F88030FBB985 +:10E400000023164A13802046FEF768FE00287FF49A +:10E410009BACDAF80030002B3CD0A36F33B10C4B2F +:10E420004FF4F37213490C4816F094F9638BDAF841 +:10E43000002013F010031FD01046FDF77DFBDBE634 +:10E440002146206998470D30DAD17DE4CCE60120E1 +:10E4500047B5030823B9030899590308E0E60120EA +:10E4600006E70120ECE6012044AF0120B0E60120E0 +:10E47000C4E6012041B90308D4F88460FEB1214606 +:10E480002069B04710F10D0F3FF45EAC10B1DAF81F +:10E490000030A3673B78990605D5A36FABB15A7BD3 +:10E4A00042F020025A73002320462B60FEF716FE2E +:10E4B00000287FF449AC204600F04AFC44E433468F +:10E4C00021463046FEF788FADCE7238DD4F88460D5 +:10E4D000B3F5066F1CBF01332385002EE3D0002364 +:10E4E000214620691A46B0470D30DCD12CE43CB1FE +:10E4F000D9F80C30E360114BC9F80C20C3F8009038 +:10E500000F4B1B785C073FF56AAB13F010043FF428 +:10E51000BAAC0C4B1C880C4B1A680B882244CDE912 +:10E5200001030A4B00930433DBF8001048465BE418 +:10E53000BAF1000F7FF4C1ABFFF7D1BBB8E6012001 +:10E54000CCE6012006E70120ECE6012044AF0120E3 +:10E55000024A137843F0100313707047E8E6012075 +:10E5600010B5044630B9064B40F29A5205490648A8 +:10E5700016F0F0F86368987B013818BF012010BDD1 +:10E580005BB90308DFB90308995903082DE9F0477F +:10E590000E46904699469DF820A0074628B92F4B75 +:10E5A000A3222F492F4816F0D5F82EB92B4BA422C1 +:10E5B0002D492C4816F0CEF84FEA8A050320FDF7C6 +:10E5C0000FF8044605F0040528B93046FDF7B4FA03 +:10E5D0002046BDE8F087002380F80AA01FFA85FADC +:10E5E000C0E900363389AB4205D21C4BB0221F492B +:10E5F0001C4816F0AFF8338930461421A3EB0A0308 +:10E600002381FDF761FA064620B120460024FDF77C +:10E610007FFEDDE76368AD02F88AD3F804A005F554 +:10E62000A045C4F80CA0FAF75AF9AAF80000D4F8EB +:10E630000CA0388BFAF753F9E768AAF802004846AD +:10E64000FAF750F9786045EA0800E768FAF747F901 +:10E65000E368B8819E74DE74BAE700BF5BB9030853 +:10E6600004BA03089959030824BA030845BA0308F1 +:10E6700014312DE9F04189B20646174622204FF4A5 +:10E6800020729846FDF7C0FA054648B34389132B1C +:10E6900006D8154B40F223721449154816F05AF863 +:10E6A0006C684046FAF71BF92080BDF81800FAF7AD +:10E6B00016F9676060803046FAF714F9A0609DF89B +:10E6C0001C0040F4A040FAF70AF9A081BDF8200030 +:10E6D000FAF705F90023E08123746374A374E374EB +:10E6E0002846BDE8F08100BF5BB903085ABA0308A9 +:10E6F000995903087FB50D461646044630B90D4BAF +:10E7000040F242720C490D4816F024F8638D3246EF +:10E710002946029310230193238B0093E38A606AB6 +:10E72000FFF7A6FF18B1628D636A1344E36204B079 +:10E7300070BD00BF5BB9030888BA03089959030884 +:10E7400030B9044B40F256720349044816F002B83F +:10E75000704700BF5BB90308ADBA030899590308B5 +:10E76000F0B5044685B017461E460D4631B9154B27 +:10E7700040F287721449154815F0ECFF64B1207A15 +:10E7800050B1FDF709F968B96FF003042846FDF7A9 +:10E79000D3F9204605B0F0BD3046FBF7BFFE002898 +:10E7A000F2D064B1E37AA47A062202903946284670 +:10E7B000CDE900423246FCF71FF80446E6E7FF23A6 +:10E7C000F2E700BF5BB90308D3BA030899590308FD +:10E7D0002DE9F74F0D46064630B95D4B40F24B32FE +:10E7E0005C495D4815F0B6FFF46E14B94FF0FF3088 +:10E7F00009E05DB9564B40F253325849564815F07E +:10E80000A9FF6FF0050003B0BDE8F08F2389AB428C +:10E8100001D80020F7E7738EAB420FD24C4B40F289 +:10E820005B324F494C4815F095FF238933B9484B6B +:10E830004FF457724B49484815F08CFF94F80AB0D2 +:10E840004FF42072B4F808A036204FEA8B07AAEBE9 +:10E85000050107F004071FFA81F817FA81F189B260 +:10E86000FDF7D2F981460028C0D06068228903896B +:10E87000D9F804109B1A424639442B449BB2FDF749 +:10E8800097FB404560D1E3689889FAF728F810F0C3 +:10E890000808C7B216BF4FF0080807F03F0707F097 +:10E8A0003707FB07E36848BF48F00108586848BFCE +:10E8B00007F0FE07FAF716F842462B18494630468D +:10E8C000CDF800B0FFF762FE804600283CD06068BB +:10E8D000A5EB0A05FDF782FAB6F866301FFA85F94E +:10E8E000181AA6F866006068038913FA85F5A9B2BC +:10E8F000FDF71CFA238938469944E368A4F8089088 +:10E900009D89F9F7ECFFE368284398816068FDF77B +:10E9100065FAB6F866301844A6F86600D8F8040020 +:10E92000FDF75CFAB6F8663018442368A6F866006E +:10E93000C8F80030C4F80080D8F8000000287FF440 +:10E9400068AFA6F868005EE74846FDF7F5F84DE7C2 +:10E950005BB90308FCBA0308995903081EBB0308F6 +:10E9600040BB03084DBB03082DE9F74311F0030832 +:10E9700004460E4606D13E4B40F211423D493E4808 +:10E9800015F0E8FE34B93A4B40F213423B493A489D +:10E9900015F0E0FEC6F340074FF4207236204FEA30 +:10E9A00087094946FDF730F9054640B9638B4FF0BA +:10E9B000FF3043F08003638303B0BDE8F0834389F5 +:10E9C0004B4506D22A4B40F239422D492A4815F0D0 +:10E9D000C1FE294600973246E36D2046FFF7D6FD7B +:10E9E00005460028E2D0C3689A0706D0204B40F2C3 +:10E9F00042422449204815F0ADFE2B8933B11C4B0F +:10EA000040F2434220491C4815F0A4FEE36E43BB8C +:10EA1000E5660023A4F86830B8F1000F02D0E36D7A +:10EA20000133E365F307686842BF638B43F020035B +:10EA30006383FDF7D3F9B4F86630184480B2A4F8C4 +:10EA400066000028B8D0206F48B9E46E002CB3D11E +:10EA5000074B40F265420D49074815F07BFE002048 +:10EA6000AAE71A461B68002BFBD11560D1E700BF4F +:10EA70005BB903085BBB030899590308B0BB0308E3 +:10EA8000CFBB030808BC030820BC03084ABC03082A +:10EA9000F8B5044630B9134B40F2EB321249134833 +:10EAA00015F058FEE56E4DB12F462D68002DFBD1B7 +:10EAB000FB689889F9F713FF430705D02046012129 +:10EAC000BDE8F840FFF750BFFB6801209E89F9F7C9 +:10EAD00006FFFB68304398812846638B43F0200390 +:10EAE0006383F8BD5BB9030872BC03089959030836 +:10EAF0002DE9F041044630B91C4B40F263621C49D9 +:10EB00001C4815F027FE256F45B96FF00500BDE8DC +:10EB1000F081FFF725FD0028F7D12D682B682846E6 +:10EB2000002BF6D1FFF71CFD06460028EDD1E36E61 +:10EB30002B60236FC4E91B30638B43F40063638352 +:10EB4000EB685868F9F7CEFEEB680746B5F8088021 +:10EB50009889F9F7C4FE10F003034744304618BF04 +:10EB6000012366633B44E364D1E700BF5BB903085C +:10EB70008CBC030899590308F8B5044630B91B4BFF +:10EB800040F2C1621A491B4815F0E4FD256F15B922 +:10EB90006FF00500F8BD2846FFF7E2FC0028F7D12A +:10EBA0002B6804F16C062367336883B933682B60E4 +:10EBB00035602B680BB9A4F8683094F84230002017 +:10EBC000FF2B60631CBF013384F84230E2E7DB684F +:10EBD0005868F9F787FEEB6807465868F9F782FE30 +:10EBE000381A0028E2DA3668DEE700BF5BB90308AE +:10EBF000B0BC03089959030838B5044630B9154B21 +:10EC000040F2F9621449154815F0A4FD236FFBB1D9 +:10EC1000638B5B071CD42046FFF7AEFFC0B9B4F886 +:10EC20006010B4F848302086994228BF1946638E98 +:10EC30005D004A10B5EB510F2B4488BF2A461344A0 +:10EC4000A4F84A20A4F84830638B43F0040363839C +:10EC500038BD00BF5BB90308C8BC03089959030855 +:10EC60002DE9FF47DDF8308006460F461446BDF813 +:10EC700034901D46BDF838A033B9184B40F2C47229 +:10EC80001749184815F066FDB8F1000F06D1134B6F +:10EC900040F2C5721449134815F05CFD3846F9F787 +:10ECA00021FE142346F208010246CDF800A02046BA +:10ECB000CDE901314B460021FFF7DAFC044650B1A3 +:10ECC000FFF73EFD43462A462146304604B0BDE8E4 +:10ECD000F047FFF745BD04B0BDE8F0875BB9030816 +:10ECE000E5BC030899590308FFBC030838B504467E +:10ECF00030B9144B40F2EA721349144815F02AFD5A +:10ED0000206DF9F7EFFD002102462046FFF7F2FCE7 +:10ED1000054630B9638B6FF0010043F00303638352 +:10ED200038BDFFF70DFD231D224629462046FFF77B +:10ED300017FD638B18B143F003039BB2EFE723F099 +:10ED40000303FAE75BB903081ABD030899590308DE +:10ED50002DE9F04F044687B030B98F4B40F2E142C5 +:10ED60008E498F4815F0F6FC237D012B06D18A4B86 +:10ED700040F2E3428B498A4815F0ECFC8A4B1B6851 +:10ED8000A34200F07181E56EB4F84880B4F8606089 +:10ED90004DB9638B980740F16381204607B0BDE809 +:10EDA000F04FFFF7A3BF207A04F1040940B3FCF74A +:10EDB000F3FD0746002800F0708123680BB9436813 +:10EDC0002360EB68B045586828BFB046F9F78AFD64 +:10EDD0002B89626C9B1A1844404515D9B4F86030F1 +:10EDE0004345D6D1236F002BD3D194F89930002B13 +:10EDF000CFD14FF4807284F89A30A4F89820C8E7F5 +:10EE00004846FBF78BFBD4E70023266F84F8993044 +:10EE100026B133463668002EFBD11E46DFF878A1B6 +:10EE2000DFF87CB1DEE0237D022B09D0EB681020F7 +:10EE30009B890493F9F753FD049BEA68184390817A +:10EE40002846FFF78DFB002870D1EB68606A0493B9 +:10EE5000F9F748FD049B9860EB68608D0493F9F71F +:10EE60003EFD049B628DD881636A1344E362AA7AF3 +:10EE7000EB68D2074AD403F11402B4F93030002B06 +:10EE8000BCBF00232386636B4BB94849EB68096814 +:10EE9000049261635868F9F725FD049AA0636968D4 +:10EEA000EB684868B1F80AC0181A4B6080B2ACEB46 +:10EEB000000CA1F80AC0B1F808C0ACEB0000088152 +:10EEC000002119745974A97A11F0010F14BF182187 +:10EED00014210B449A4206D0534640F21C62344936 +:10EEE000584615F037FC062302974A4621460193FF +:10EEF000A37A0093E37A6868FBF77EFCB0B1638B7A +:10EF000043F08003638307B0BDE8F08F4A4639467B +:10EF10004FF406700493FDF74FFA40F00170F9F7D3 +:10EF2000E1FC049B03F118025861A6E72B68E36635 +:10EF3000237D022B1EBF638B23F003036383EB68E7 +:10EF40005868F9F7CFFC2989EB68049105909889F6 +:10EF5000F9F7C5FC10F00303DDE9041218BF012323 +:10EF60000A441A44236D9B1A002B2B89B8BF2265D3 +:10EF7000EA6804939089F9F7B2FC10F00300049B4F +:10EF800018BF0120D84200F0848000232B60236F3B +:10EF900083B925672E4622E05BB903083ABD030812 +:10EFA0009959030852BD0308F0E60120BCE6012090 +:10EFB0008FBD0308EB685868F9F794FCF268049079 +:10EFC0005068F9F78FFC049B181A00285FDA04F1E7 +:10EFD00070031A68002A49D11A682A601D60E56E1C +:10EFE000002D3AD0EB685868F9F77CFC636CC01AC6 +:10EFF0002B89184440452ED8EB689889F9F76FFCA7 +:10F00000410706D5534640F236522549584615F079 +:10F01000A1FB236F002B3FF406AF628B12F0440F6D +:10F020007FF401AFE36E43B1196800297FF4FBAEB2 +:10F030001989638E9942BFF4F6AEB4F86430002BA0 +:10F040003FF4F1AEB4F86630082B3FF6ECAE12F0A8 +:10F05000A00F7FF4E8AEE36E13B90023A4F8683084 +:10F06000638B23F08003638300204CE7D268059311 +:10F070005068F9F737FCE96804904868F9F732FC02 +:10F08000049A059B101A0028A6DA1B68A1E73560D0 +:10F0900080E72846FDF73CF9A1E76FF0030032E76F +:10F0A00078BD030810B5044630B9094B4FF4D3625C +:10F0B0000849094815F04EFB94F842302046FF2BD2 +:10F0C0001CBF013384F84230BDE81040FFF740BE5A +:10F0D0005BB90308A2BD03089959030810B504469B +:10F0E00030B9084B40F2AD620749084815F032FBD1 +:10F0F0002046FFF7FDFC20B92046BDE81040FFF791 +:10F10000D1BF10BD5BB90308C5BD030899590308F9 +:10F1100070B5044630B90F4B40F624020E490F4833 +:10F1200015F018FB206D0138F9F7DCFB00210246D1 +:10F130002046FFF7DFFA054648B1FFF701FB231D24 +:10F14000224629462046BDE87040FFF709BB4FF034 +:10F15000FF3070BD5BB90308E1BD0308995903088E +:10F160002DE9F041064630B92C4B40F64F022C49B0 +:10F170002C4815F0EFFAF56E002D48D096F89A302D +:10F18000FF2B1CBF013386F89A30EB689889F9F79A +:10F19000A6FB10F00104EB68304618BF2C895A68B2 +:10F1A0001CBFB4FA84F4640984F00101FFF7A2FAE9 +:10F1B000074678B3D0F80480F4B1B8F90C401120B8 +:10F1C000F9F78DFB24F47C542043A8F80C00EB687D +:10F1D0005868F9F787FB336D01301B1A002BB8BF55 +:10F1E00030653846FFF7ACFA331D324639463046B3 +:10F1F000BDE8F041FFF7B4BA686808F114012A8944 +:10F2000003899B1A01229BB2FCF7D2FEDFE7284656 +:10F21000BDE8F0814FF0FF30FAE700BF5BB90308AB +:10F22000FCBD03089959030883B52C48FCF777FF08 +:10F230002B4B1B6813B12B4A10689847274D2A4F58 +:10F240002A4E00F0D3F9431C044613D12846FCF79C +:10F250006BFF002201A93846FCF728FF2846FCF77F +:10F260005EFF019CCCB9334691222149214815F01B +:10F2700071FAE6E710B900F097F9E2E72846FCF7E3 +:10F2800053FF224601A93846FCF710FF04462846E2 +:10F29000FCF745FF0134EED0E3E72378012B0FD0D4 +:10F2A000022B13D0B3B96068D4E90213984710B1A8 +:10F2B0006068FCF741FC21460920FCF7C1F9C0E772 +:10F2C000D4E90130984721460820F6E7D4E9013017 +:10F2D0009847B6E73346CF22C7E700BF08E70120CB +:10F2E0000CE7012010E7012014E701201FBE0308EE +:10F2F000A0BE030899590308F8B5074610480E4602 +:10F300001546FCF7F1FE28B90E4BFC220E490F48BA +:10F3100015F020FA0920FCF763F9044668B10023D0 +:10F320000146C5600370C0E901760548FCF7AFFEF1 +:10F3300028B121460920FCF783F94FF0FF30F8BDD2 +:10F3400014E701201FBE0308BEBE03089959030835 +:10F3500091F8313013F0180F14BF024A024AFFF738 +:10F36000CBBF00BFE9A1010879A5010870B5064629 +:10F3700010480D46FCF7B8FE30B90F4B40F25D1255 +:10F380000E490F4815F0E6F90820FCF729F9044664 +:10F3900060B1012301460370C0E901650548FCF72F +:10F3A00076FE28B121460820FCF74AF94FF0FF30DD +:10F3B00070BD00BF14E701201FBE0308BEBE0308D6 +:10F3C0009959030837B505460C46FBF77BF8134BF4 +:10F3D000062113481D60134B1C60FCF74BFE30B137 +:10F3E000114B40F261221149114815F0B3F911484F +:10F3F000FCF78AFE30B10C4B40F265220E490C48F6 +:10F4000015F0A8F9182300220C4900934FF48063EB +:10F410000B48FCF78CFE03B030BD00BF0CE70120A9 +:10F4200014E7012010E701201FBE0308CBBE03082C +:10F430009959030808E70120EEBE030829F20108E4 +:10F440000FBF030870B504460A200E461546FCF7A8 +:10F45000C7F838B9104BBE2210491148BDE87040BA +:10F4600015F078B900230F4A446003601368C0E9BF +:10F4700002650BB9106070BD5968611A002901DA84 +:10F480000360F7E719461B681BB15A68A21A002AE5 +:10F49000F8DA03600860EEE71CBF0308A1BF0308A9 +:10F4A000995903081CE7012038B54368044698477A +:10F4B000E2F7E6FE074B25681B6807492B441A1A3A +:10F4C000002A2246B4BF40191846BDE83840FFF76D +:10F4D000B9BF00BF18E70120A9F40108B0F1804FBF +:10F4E00070B504460D46164606D3084B40F2291265 +:10F4F0000749084815F02EF9E2F7C2FE32462946C0 +:10F500002044BDE87040FFF79DBF00BF1CBF03084B +:10F51000DEBF030899590308084B1A6862B9084A04 +:10F52000126812B9074A126832B101220649FA205C +:10F530001A600022FFF7D2BF704700BF20E701200A +:10F54000ACE60120C4E601204DF5010808B5FDF741 +:10F5500005FD084B1B6813B9074B1B6833B100222C +:10F560000649FA20BDE80840FFF7B8BF044A136017 +:10F5700008BD00BFACE60120C4E601204DF501083E +:10F5800020E7012070B5064D0124064E55F8080FFE +:10F59000013431462A46FFF7A1FF052CF6D170BD94 +:10F5A00014C00308A9F401082DE9F041E2F768FE50 +:10F5B0000C4E0446DFF83080316889B14B68E21A9E +:10F5C000002A0DDB0A680A20C8F800303260D1E951 +:10F5D0000257FCF735F8002DEED03846A847EBE788 +:10F5E000BDE8F0811CE7012018E7012010B5074CA9 +:10F5F00023683BB1E2F744FE23685B68181A48BFF2 +:10F60000002010BD4FF0FF30FBE700BF1CE70120DA +:10F6100008B514F07FFF6FEA8040024B6FEA90401C +:10F62000188008BD5E0000202DE9F04F884685B0A7 +:10F63000064628B95F4BCF225F49604815F08AF82B +:10F64000B8F1000F05D15B4BD0225D495B4815F046 +:10F6500081F87389072B05D8304605B0BDE8F04F17 +:10F66000FCF76ABA574F002574683968AA4678696A +:10F67000FBF7D3F8DFF85CB181462088F9F72FF962 +:10F6800002906088F9F72BF9DBF80040DFF824C11D +:10F690004D4903909CB925B9D8F804207B699A425A +:10F6A000DAD108213046FCF713FA00285ED0414B2E +:10F6B0004FF4B8724549414815F04CF8CCE7628ADE +:10F6C000039882424DD1B8F1000F07D163468822DA +:10F6D0003A4815F03FF8DFF8DCC03B49207A30B1FA +:10F6E0007A6892F834200132D2B2904239D122683D +:10F6F000B9F1000F30D03AB17869431C04D05040C2 +:10F70000D8F8083018422CD1207C43070ED45DB3C2 +:10F71000B9F1000F0AD07869013007D1D8F8040098 +:10F720002B68834202D0904208BF2546A28A029BE2 +:10F730009A4216D1626812B13869824211D1BAF187 +:10F74000000F07D0E368CAF80C30DBF80030CBF8C4 +:10F750000040E3602546A4E7002AD5D078699042AE +:10F76000D2D0A246E46895E72546DFE76DB1AC69E3 +:10F77000002C3FF471AF029B324629460093144B94 +:10F78000E869A04705B0BDE8F08FB9F1000F7FF43C +:10F7900063AF7B6903F0F003E02B3FF45DAFB98901 +:10F7A0003046083109B2FCF7BFF903213046FAF7B9 +:10F7B00081FE51E73CC00308BCC003089959030807 +:10F7C000D4C0030834AF0120EDC0030812C1030800 +:10F7D00044AF012024E701202DE9F041284D002904 +:10F7E00018BF0D4650B9274B40F2B732264927487B +:10F7F00014F0B0FF6FF00F00BDE8F081DFF894C0A7 +:10F80000DCF80040214679B9A2B12E68234603B343 +:10F81000834207D05F8A974204D11F68B7422AD03B +:10F820004EB347B3DB68F2E7814201D0C968EAE72B +:10F830000121E9E7164F4FF480434FF6FF7E3A88E7 +:10F840007245264616BF01324FF4404292B24EB97D +:10F850003A802B684282036011B9C460CCF8000082 +:10F860000020C9E7B6F81280904507D1013B9BB252 +:10F87000002BE5D13A806FF00700BDE7F668E6E7B8 +:10F8800028A503083CC003082DC1030899590308A3 +:10F890005E00002024E701202DE9F04F85B00E46E0 +:10F8A000904699460746DDE90EBA60B93E4B40F2F4 +:10F8B000D1223E496FF00F043D4814F04BFF204623 +:10F8C00005B0BDE8F08F21B9374B40F2D22239495B +:10F8D000F0E722B9344B40F2D3223749EAE7BAF1D4 +:10F8E000000F04D1304B4FF435723449E2E7BBF1DD +:10F8F000000F04D12C4B40F2D5223149DAE7428A7D +:10F900003AB132894FF6F7739A4209D94FF0FF3472 +:10F91000D5E70146FFF760FF04460028F1D0CEE7A7 +:10F9200008213046FCF7D0F800283AD04FF4207276 +:10F9300008212220FCF768F905460028E6D0338923 +:10F9400013B13146FCF7A8FA6B89072B06D8164B82 +:10F9500040F20D321B49164814F0FCFE6C68788AA0 +:10F96000F8F7BDFF20804846F8F7B9FF0023608014 +:10F97000A371E3712889F8F7B2FF1123A0804246F2 +:10F98000CDF808B0514601932846BB7A0093FB7A24 +:10F99000FAF7B6FEB542044691D02846FCF7CCF8FB +:10F9A0008DE73546D0E700BF3CC0030843C10308DC +:10F9B0009959030862C1030882C10308A4C103085E +:10F9C000C6C10308E7C1030873B5069C50B9184BBC +:10F9D0004FF420721749184814F0BCFE6FF00F0066 +:10F9E00002B070BD21B9124B40F281221349F2E7F7 +:10F9F00022B90F4B40F282221149ECE724B90C4B9B +:10FA000040F283220F49E6E705681DB105F0F006D4 +:10FA1000E02E05D1251DCDE90045FFF73DFFDFE7CD +:10FA20006668B54201D10546F5E76FF00300D7E7F8 +:10FA30003CC0030815C203089959030830C20308E3 +:10FA40004CC203086AC2030870B50D461646044648 +:10FA500048B9164B40F235421549164814F07AFE63 +:10FA60006FF00F0070BD21B9104B40F236421249C1 +:10FA7000F3E7428A6AB12B68A6826360237C43F075 +:10FA8000040323740D4B1A68104640B9E2601C60F1 +:10FA9000E8E70146FFF7A0FE0028ECD0E2E7A0422D +:10FAA00001D0C068F1E70020DCE700BF3CC00308DC +:10FAB00087C2030899590308A0C2030824E701205C +:10FAC00030B9054B40F28A420449054814F042BE61 +:10FAD000C0E90612704700BF3CC00308BCC203085F +:10FAE00099590308014630B90D4B40F2A1420D4926 +:10FAF0000D4814F02FBE0D4A1368834205D1C36828 +:10FB000013600020FBF79CBD1346002BF9D0DA6888 +:10FB1000002AF6D08A42F7D1CA68DA60F1E700BF5E +:10FB20003CC00308D2C203089959030824E7012006 +:10FB300010B50020FBF754FD044628B12022002117 +:10FB400014F03CFFFF23E372204610BD10B538B11E +:10FB500003682BB121B10B6813B1064B1B6803B9C5 +:10FB600010BD1C680268944204BF0A681A60DB6812 +:10FB7000F5E700BF24E701208088704770B503686F +:10FB80000C46002105465B6A984706462B682846C6 +:10FB9000A41B1B6AA4B29847B4FBF0F070BD00230D +:10FBA0008380704710B50368044681885B6A984774 +:10FBB000A3880133A38010BD03685B6A18477047B0 +:10FBC000024A026000228280704700BFF4C203082C +:10FBD000836A00202BB120B95A1A9B6950425041C8 +:10FBE000F8E77047002348618B61836A13B981622B +:10FBF000704713469A69002AFBD199617047002229 +:10FC0000836A23B199698162C3E90522F8E77047E5 +:10FC10000023836270470022028042808280C2807B +:10FC2000704770B50D461646846A3CB1236820467D +:10FC3000324629465B6D9847A469F6E770BD38B532 +:10FC40000D46846A34B12B68214628469B68984744 +:10FC5000A469F7E738BD704710B504462C2114F0AD +:10FC60004AFB204610BD836A9BB18B4209D19A6939 +:10FC700000215961826202B9704799617047134649 +:10FC80003AB19A698A42FAD18A699A610023C1E934 +:10FC90000533704710B4836A04462BB903681146D4 +:10FCA0005DF8044B1B6E184741B993618262546141 +:10FCB0005DF8044B704703460028F9D099429869D3 +:10FCC000F9D190618A61F2E72DE9F0411F4690F881 +:10FCD00024300D46164603B13860846A14B394F894 +:10FCE0002530EBB1B4F904108D4219DB89B22389B8 +:10FCF0000B441BB29D4213DAB4F9062096420FDB87 +:10FD000092B2638913441BB29E4209DA2368B21A85 +:10FD1000691A2046D3F8248012B23B4609B2C04784 +:10FD2000A469DBE7BDE8F0812DE9F04F6D4CA1B08F +:10FD3000064624682A9D94F84990002403932C8059 +:10FD40002B9D2C801C60CDE90112FFF7BDFFB9F19E +:10FD5000030F40F3C18031460CA804F059FEBDF9F1 +:10FD600030300693BDF932300793039BD3F800A0DF +:10FD7000BAF1000F00F0B380514610A804F048FE1D +:10FD80000220BDF94410019B069A91FBF0F19D18E9 +:10FD9000BDF94030079A1944029B1344BDF946202F +:10FDA0006D1ABDF9421092FBF0F20A449B1A5B43B4 +:10FDB00005FB05354C4F10ACB9F10C0F0FCF0FC43C +:10FDC0000FCF0FC40FCF0FC497E80F0084E80F00C8 +:10FDD0004FF00303D8BF09F1FF324FF00004CDF814 +:10FDE0000090CCBF984692FBF3F8631C10AA04F075 +:10FDF00001044FF0000B0893009B02EB441493FBAB +:10FE0000F8F304349BB20493049A54F8043C13FBB3 +:10FE100002F3019A9BB299180593B6F9043009B21E +:10FE200099424DDB328913441BB2994248DA049B54 +:10FE3000276817FB03F7029BBFB2FA18B6F9063022 +:10FE400012B29A423CDB708903441BB29A4237DA01 +:10FE5000002330460B930BABFFF736FF0B9A7AB3B8 +:10FE600052452DD011460EA8099204F0D1FD4FF055 +:10FE7000020EBDF93C10069ABDF93800019BBDF990 +:10FE80003EC01344079A91FBFEF19CFBFEFC01442B +:10FE9000581A029BBDF93A101344099A8C44A3EBFB +:10FEA0000C035B4300FB0033AB4208D20B991D46A9 +:10FEB000039801602A99059808802B990F80924633 +:10FEC0000BF1010B0834BBF1040F9DD1009B089C82 +:10FED0004B444445009388D121B0BDE8F08F4FF0EA +:10FEE000FF3567E734E70120285803082DE9F04380 +:10FEF000B1F900708C88B0F900903C44A4B20FFABC +:10FF000084F8C1452FDA82884A4492B20FFA82FE01 +:10FF1000774528DAB1F90250CB88B0F902602B445A +:10FF20001BB29E421FDAC38833449BB20FFA83FC94 +:10FF3000654518DA4F45B8BF4F46B542B8BF35469C +:10FF4000F045D8BF2246D21B82804A88C9880780E4 +:10FF50000A44458092B211B28C45A8BF13465B1B80 +:10FF6000C380BDE8F0830023038043808380C38087 +:10FF7000F7E7B0F90430002B06DDB0F906000028E1 +:10FF8000CCBF002001207047012070472DE9F041CF +:10FF9000002304468D6A038043808380C380002D44 +:10FFA00040D0281DFFF7E5FF88B92046FFF7E1FFA5 +:10FFB000B5F90420B5F90630B5F908E0B5F90AC07D +:10FFC00038B122806380A4F804E0A4F806C0AD69CB +:10FFD000E5E7B4F90000B4F9021090420746B4F81E +:10FFE00004800E46A8BF174699427244B4F806E052 +:10FFF000A8BF1E4640447144634400B2278012B239 +:020000040802F0 +:10000000668009B21BB29042ACBFC7EB0002C7EBDF +:1000100002029942ACBFC6EB0103C6EB0303A28008 +:10002000E380D4E72046BDE8F0812DE9F34190F864 +:10003000253083B3846A74B3B1F90050B1F902601A +:10004000B1F90470B1F9068094F8253003B368461D +:10005000211DADF80050ADF80260ADF80470ADF8A8 +:100060000680FFF743FF6846FFF783FF80B9BDF8BE +:1000700000306946A28820469B1AE288ADF800301D +:10008000BDF802309B1AADF8023023689B68984790 +:10009000A469002CD8D102B0BDE8F08173B590F806 +:1000A00025300D46164623B3846A14B394F82530E0 +:1000B000EBB128686B46696803C36846211DFFF7EA +:1000C00015FF6846FFF755FF88B9BDF8003069464F +:1000D000A28820469B1AE288ADF80030BDF80230B5 +:1000E0009B1A3246ADF802302368DB6D9847A4694D +:1000F000DBE702B070BDB0F9E4007047B0F9E6008C +:100100007047B0F930007047B0F93200704770B5F1 +:1001100003680446D3E92B53984701462B462046F3 +:10012000BDE87040184770B50368044690F82C206D +:10013000D3F8AC605AB94D89D3F8B8302046984707 +:10014000291A3346204609B2BDE8704018478D8908 +:10015000F2E790F82C20022322B9B0F9940090FB2A +:10016000F3F07047B0F99600F9E74286026801861D +:10017000194610B45DF8044BD2F8A8201047B0F926 +:100180002E308B4210B409DB9342A8BF134604689B +:10019000D4F89840A4465DF8044B60470B46F6E758 +:1001A000B0F9E620B0F9E400101A7047B0F9322037 +:1001B000B0F93000101A7047704710B50446F421AA +:1001C00014F099F8204610BD70B5B0F932500446CD +:1001D000B0F930308D42A8BF0D469D42ACBFC3EB95 +:1001E0000505C3EB03050368D3F8BC3098472368C3 +:1001F00006462046D3F8C030984731460246284686 +:1002000004F035FD94F82C30012B0BBFB4F8E63028 +:10021000B4F8E430181AC01800B270BDF8B5B0F9DF +:10022000E6300546B0F9E440994290F82C20B0F948 +:100230003060A8BF1946A142B8BF2146012A89B241 +:1002400008BF5C1A036818BF0C1BD3F8C03098476E +:100250002B68074624B2D3F8BC3028469847394665 +:100260000246204604F003FD3044F8BD2DE9F0417C +:100270000B7904460D462BB3012B37D1236894F834 +:100280002C20D3F8AC70002A2ED1EE88D3F8B830E9 +:1002900020469847311A204609B2B8472B79012BDE +:1002A00024D1D4F8EC0008B30368DB689847E8B1C0 +:1002B000D4F8EC002146B4F92E200368BDE8F041E3 +:1002C0009B681847D0F8E8000028D7D00368DB689F +:1002D00098470028D2D0D4F8E8002146B4F92E205F +:1002E00003689B689847C9E72E89CFE7BDE8F0818E +:1002F0000A4A026000228280C28002814281828199 +:10030000C28102824282C2610284428480F8242037 +:10031000C0E90522012280F8252070476CC6030839 +:1003200070B50368044615469B6B984723682946B9 +:100330002046DB6BBDE8704018472DE9F047B0F967 +:10034000E48004468C30884594F82C3004F1B806DB +:10035000B8BF8846B0F95A108845A8BF88461FFA2A +:1003600088F7002B30D1B4F992204146E3F77BFFA8 +:10037000304604F0B2FAB4F8BC2023682046BF1A15 +:10038000D3F8B830BFB298470744A4F8C0703046DD +:1003900004F0A3FA236841462046D3F8B4309847C6 +:1003A000E085D4F8F00000283CD00368DB6898476B +:1003B000002837D0D4F8F0002146B4F92E20036885 +:1003C000BDE8F0479B6818474246B4F99010E3F740 +:1003D0004AFF304604F081FA608FE58F23680544B8 +:1003E0002046D3F8B830ADB298472368ED1BB4F976 +:1003F000BCA0D3F8B8302D1A204698473844ADB287 +:10040000B4F9C09002B251463046E3F7BCFF304623 +:100410002AB24946FFF784FFB4F86A002D1AA4F8FF +:100420006650B4E7BDE8F08770B50446B1F90850EE +:10043000B1F90A60B1F90620B1F90410E3F7A3FF9E +:10044000324629462046FFF76BFF70BD2DE9F14F7C +:100450004FF0000A00F1340B04461D4680F82CA032 +:1004600058469046BDF92C608946BDF92870E3F7DF +:100470008AFF594604F1B800FFF7D6FF52465146AD +:1004800004F16000E3F77FFFE28FA18F20469044E4 +:10049000B4F89620A4F8925089441544B4F8941006 +:1004A0000FFA88F2A4F8E47073182DB20FFA89F9E4 +:1004B000A4F8E66019B2AA42B8BF2A464945B8BFB7 +:1004C0004946FFF72DFF2368B4F92E102046D3F8D4 +:1004D000A83001B0BDE8F04F18472DE9F0471D46A0 +:1004E00000F1340A012304461746BDF9248080F840 +:1004F0002C3050460E46BDF92090E3F744FF51469C +:1005000004F1B800FFF790FFA18FE28F2046B4F806 +:1005100096300E443A44B4F894104344A4F89050F2 +:1005200012B20D441BB2A4F8E49031B2A4F8E680F4 +:100530009A422DB2B8BF1A46A942B8BF2946FFF762 +:10054000EFFE2368B4F92E102046D3F8A830BDE89A +:10055000F047184738B504460D462622002114F00E +:100560002DFA2046FFF7C4FE064B2046294623609D +:100570002B88E384FF2384F8283001F0EAFB20462F +:1005800038BD00BFACC503082DE9F3470446FFF7AB +:10059000AFFE284B002502AE4FF6FF77236004F133 +:1005A0003409642304F1600A26F8047D4846638612 +:1005B0003146A56204F18C0884F82C50E585258627 +:1005C000FFF7C8FF31465046ADF80470FFF7C2FF91 +:1005D000314604F1B8064046ADF80470FFF7BAFFA3 +:1005E0003046FFF785FE144B51463046C4F8B8300C +:1005F0004FF48033C4F8E050C4E939350123C4E92D +:100600003B5584F82430FFF7EDFA49462046FFF7C2 +:10061000E9FA31462046FFF7E5FA41462046FFF762 +:10062000E1FA2046B4F9E410FFF787FE204602B055 +:10063000BDE8F087B8C3030828C303082DE9F843D1 +:10064000044600F1340689461F4604F18C05304605 +:10065000904604F042F9284604F03FF949463046F6 +:1006600001F077FB414604F1600001F072FB39466E +:10067000284601F06EFBB4F96A20B4F9681004F161 +:10068000B800FFF74DFE2368B4F92E102046D3F8CA +:10069000A8309847304604F020F92846BDE8F843D2 +:1006A00004F01BB9036813B5D3F8A8400023CDE9C3 +:1006B00000336B46A04702B010BD012380F84B30D9 +:1006C00080F86D307047012380F84B3080F86D3032 +:1006D0007047436801225A72406803681B691847D3 +:1006E000406803689B68184730B58BB004689DF874 +:1006F000585009959DF8545008959DF8505007950D +:10070000BDF84C5006959DF8485005959DF844500D +:100710000495BDF840500395BDF83C500295BDF8D6 +:100720003850CDE900351346E46B0022A0470BB0EA +:1007300030BD0000044B1B7823B190F86E0080F0B0 +:10074000010070470120704732E7012010B50446D0 +:10075000406803689B68984794F86D3013B1012393 +:1007600084F86E3010BD10B50446E2F735F9E2F7B3 +:1007700011F860680368DB689847E06803689B6865 +:100780009847236820465B6FBDE81040184708B5BE +:1007900003680446D3F88030984723689B6F20464F +:1007A0009847E2F765F923681B6FF8E77FB50368A0 +:1007B00004465B4DD3F8B0309847002800F0958090 +:1007C00001200026E1F74CFF94F86A3084F84B6072 +:1007D00084F86B3094F8793084F86A6033B1236818 +:1007E0002046D3F8C430984784F8796094F84A30AA +:1007F0000126626883F001032E70537202F0F4FF49 +:1008000003685B6B984794F86B300BB984F86B60A6 +:1008100002F0EAFF03685B699847E06D03681B69B3 +:10082000984794F86B3094F86C20013BDBB284F865 +:100830006B300AB1002BEBD13A4A94F96810137867 +:1008400001335BB29942137010DC0023E06802A907 +:10085000137003AA0368DB6898472368002850D008 +:10086000D3F8BC302046DDE90212984700236069C6 +:100870008DF8073058B103680DF10701DB68984720 +:1008800028B1E06D9DF807100368DB68984704F114 +:100890001C0013F07BFC94F870300BB320690368E4 +:1008A0001B699847636F064603B96067636F1E4A0A +:1008B000F31A934214D9206903689B699847636FC0 +:1008C0006422F31AB3FBF2F3B0FBF3F000281DDC53 +:1008D00084F86920206900210368DB69984766670E +:1008E00002F082FF03689B6B984723682046D3F889 +:1008F000B43098470120E1F7E3FE00232B7004B0E9 +:1009000070BDD3F8C03020469847AFE76328CBBF0F +:100910000023C0F1640084F8693084F86900D9E7E5 +:1009200038E7012039E7012000E1F50510B504465C +:10093000E2F782F8002263689A7210BDC1651C302C +:1009400013F022BC30B587B0044604A8CDE90412E8 +:1009500002F032FD049B06A903A8ADF80C30059BFC +:1009600021F80A3D02F07AFD94F86F1004F11C00A2 +:10097000BDF80C20BDF80E3089B1B4F86450009376 +:100980001346B4F860102A4613F00EFC28B1BDF9E6 +:100990000C302366BDF90E30636607B030BD13F02E +:1009A00043FC012384F86F30F1E710B5002B46D0EB +:1009B00081EA0200C40708D50B44013A8B423ED9B4 +:1009C00012F8010F01F8010BF8E7D00742BF12F847 +:1009D000010B03F1FF3301F8010B012B11D981EA5F +:1009E00002041046A40722D023F001040C448C42D8 +:1009F000024604D91288023021F8022BF7E703F0EF +:100A0000010323F0030008448842144604D92468F3 +:100A1000043241F8044BF7E703F00303013A0B44B7 +:100A20008B420CD912F8010F01F8010BF8E790077F +:100A3000E7D032F8020B023B21F8020BE1E701207C +:100A400010BD10B590F86F30044653B1B0F8643063 +:100A50000121B0F860201C3013F0E6FB002384F87D +:100A60006F3010BD2DE9F04385B004460020994653 +:100A700004AD0F46904645F8040DA069066801953F +:100A8000BDF8305000953568A847104D0646A5F8CA +:100A90000090E3F72BFB0368DB6A984728B1012835 +:100AA0000BD0304605B0BDE8F0832B8808FB0372FD +:100AB000039BA3EB4203E363F3E72A88039B08FB52 +:100AC000027202EB42029A1AE263EAE72EE7012081 +:100AD000F0B58BB0174604460E461D46E3F706FBFD +:100AE0000368DB6A98479DF85430079031462268C6 +:100AF000CDE908030C4B20461B8806939DF8503027 +:100B000005939DF84C300493BDF848300393BDF82D +:100B100044300293BDF84030CDE900533B46D56BDD +:100B20000022A8470BB0F0BD2EE701202DE9F043CD +:100B3000984603688BB01746DD6B0E46134B044690 +:100B4000B3F80090E3F7D2FA0368DB6A98479DF8A0 +:100B5000583000223146CDE9080302232046CDE972 +:100B60000693012305939DF854300493BDF850304B +:100B70000393BDF84C300293BDF84830CDE90083B3 +:100B80003B46A8470BB0BDE8F08300BF2EE701202D +:100B90002DE9F0439846036887B00E469D6D1746D1 +:100BA0000F4B0446B3F80090E3F7A0FA0368DB6A42 +:100BB00098479DF844303A463146CDF80C90CDE93F +:100BC00004039DF8403020460293BDF83C30019369 +:100BD000BDF8383000934346A84707B0BDE8F0831E +:100BE0002EE701202DE9F04F04468FB010460D4648 +:100BF00091461E4605F09CFE002800F09D8023686B +:100C00002046DFF898B10DF138089B6A98472368B1 +:100C10002046DFF88CA1DB6A9847BBF800305C4FB8 +:100C20000193BAF8003028F81C9D404602933B8897 +:100C30000393584B1A880593049205F00DFF3880F2 +:100C4000404605F03DFF059B80B21880524B1B7853 +:100C5000002B74D13B88AAF80000ABF8003048465E +:100C6000D4E90F8705F064FE0022C4E90F001146A5 +:100C70002846B5F90490B5F906A0E3F784FB0123F3 +:100C800095F825B085F82530B6F90430002B5CDDE9 +:100C9000B6F90630002B58DD2A460AAB52F8040F8D +:100CA000516803C331460AA8FFF720F9384B0021E9 +:100CB000B3F90020374BADF834200AAAB3F900305D +:100CC0000C91ADF8363008AB92E8030083E80300DE +:100CD00018460CA9FFF70AF9E36C002B3CD1002061 +:100CE00084F8580000266B6908A92A6828460593ED +:100CF0006E6192689047059B524649466B61284653 +:100D000084F8586085F825B0E3F73DFB019A234B42 +:100D100020461A80029A224B1A80039A1C4B1A8092 +:100D20001C4B049A1A802368C4E90F879B6A984772 +:100D300023682046DB6A98470FB0BDE8F08F3B88F8 +:100D4000ABF80000AAF8003089E72A460AAB52F84F +:100D5000040F516803C3A9E707A805F0EDFF064695 +:100D6000E06C0368DB6A98478642B8D1E3F7BEF9C6 +:100D70000368064607A85B6B059305F0DDFF059B3E +:100D800001463046984780F00100C0B2A8E700BF96 +:100D900028E701202AE701202CE701202EE7012087 +:100DA00030E70120074B10B51B7804463BB10368C0 +:100DB0001B6B9847E36B834201D1206C10BDE06B45 +:100DC000FCE700BF32E701202DE9F0411D468AB063 +:100DD0004FF480639046BDF84C600024074606FB44 +:100DE000058504948DF82040CDE90131BDF84030EF +:100DF000ADF81830BDF84430ADF81A30BDF84830C1 +:100E0000ADF81C30FFF7CEFF00EB45057868ADF874 +:100E10001E6001A905958DF822408DF821408DF8BE +:100E200023408DF8244003685B6898470AB0BDE80A +:100E3000F0812DE9F0438BB0002491461D46BDF8AA +:100E400050604FF4006388460746049406FB0595FE +:100E5000CDE90134FFF7A6FFBDF8483000EB4505AA +:100E60007868ADF8183001A9BDF84C300595ADF89B +:100E70001A30ADF81C40ADF81E60CDF81080ADF80A +:100E800020408DF822408DF823408DF824400368DF +:100E90005B6898470BB0BDE8F08300002DE9F04196 +:100EA0008AB09846002306469DF85C509DF8500095 +:100EB0000B2D9DF854C0BDF858709DF86040049308 +:100EC00037D180238DF8200030460392CDE90131DF +:100ED000BDF84430ADF81830BDF84830ADF81A30E0 +:100EE000BDF84C30ADF81C30FFF75CFF0B2CBDF8A3 +:100EF0004020ADF81E7094BF194B00218DF8215091 +:100F000098BF195D02FB07838DF82240C91001FBD1 +:100F100003009DF8643001A905908DF8233000236B +:100F200070688DF8243003685B6898470AB0BDE8A4 +:100F3000F081022D09D1FF2805D1BCF1000F14BFAB +:100F400040232023BEE74023BCE7FF2805D1BCF1A6 +:100F5000000F14BF04230123B4E70423B2E700BF4A +:100F60007CC403082DE9F04F8BB01D460024884651 +:100F70009DF8589093469DF860600746B9F1FF0FC1 +:100F8000BDF85CA0049414BF0823022305FB0AB536 +:100F9000CDE90134FFF706FF0B2E9DF8642001A96F +:100FA00098BF134BADF81EA098BF9C5DBDF85030A4 +:100FB000E410CDF81080ADF81830BDF8543004FBC3 +:100FC00005047868ADF81A3000230594ADF81C309C +:100FD0008DF820908DF823208DF824308DF8216035 +:100FE0008DF8226003685B6898470BB0BDE8F08F0E +:100FF0007CC403082DE9F0411E460A4B0F4690467B +:101000001D88E3F773F80368DB6A98470B2896BFDF +:10101000054B00241C5C08FB0570E41004FB006019 +:10102000BDE8F0812EE701207CC40308F0B58BB049 +:101030001F4604461646BDF854300025CDE901315F +:10104000BDF840300495ADF81830BDF84430ADF827 +:101050001A30BDF84830ADF81C309DF850308DF88E +:101060002030FFF79FFE3A46314603462046FFF701 +:10107000C1FF0E4B05901B88ADF81E30E3F736F824 +:101080000368DB6A9847139B8DF8220001A98DF84D +:101090002100049360689DF858308DF824508DF835 +:1010A000233003685B6898470BB0F0BD2EE7012042 +:1010B000F0B58DB0012504466B46039583E8060024 +:1010C0000023BDF80060BDF80270069303681B6B37 +:1010D00098473A46314603462046FFF78BFF636C3C +:1010E00004900793BDF80430ADF82030BDF8063009 +:1010F000ADF822300E4B1B88ADF82430ADF8263009 +:10110000E2F7F4FF0368DB6A9847FF238DF82900B4 +:1011100003A98DF82A0060688DF828308DF82B50CF +:101120008DF82C5003685B689847606C0DB0F0BD7B +:101130002EE701202DE9F0418CB01E460023044625 +:101140006D460693036885E806000125BDF800702A +:10115000BDF8028003951B6B98474246394603460B +:101160002046FFF747FFBDF804300490ADF820306B +:10117000BDF806300796ADF82230104B1B88ADF84D +:101180002430129BADF82630E2F7B0FF0368DB6A2B +:101190009847FF238DF8290003A98DF82A0060687D +:1011A0008DF828308DF82B508DF82C5003685B6833 +:1011B000984730460CB0BDE8F08100BF2EE7012013 +:1011C000F0B585B0054602AC84E80600BDF80860BD +:1011D000BDF80A70FFF7E6FD314603463A46284659 +:1011E000FFF708FF054A2B6812880092DE6E03465F +:1011F000284694E80600B04705B0F0BD2EE7012070 +:1012000070B590F86E3004469BB10220E1F788FA81 +:101210000023204684F86E3084F86D302368D3F8BC +:10122000B850FFF7BFFD014620462B46BDE8704091 +:10123000184770BD70B505460C46032049B1E1F76B +:101240000FFA286968B1036801215B69BDE8704045 +:101250001847E1F735FA286918B1036821465B6938 +:10126000F4E770BD38B590F87B3004460D468B42EC +:1012700006D0036829B9D3F8C830984784F87B5062 +:1012800038BDD3F8CC30F8E70D4B10B51B780446C9 +:101290005BB990F84830022B07D0406800F012F993 +:1012A00018B16268537A002BFCD0E1F7BDFB2046F1 +:1012B0000021FFF7D7FF2046FFF774FD10BD00BFE8 +:1012C00032E70120D0E90320131A584258417047F1 +:1012D000D0E903239B1A002BDCBF82689B18012BEB +:1012E000CCBF00200120704702694368242000FB26 +:1012F0000230704703681B691847012370B50372F9 +:101300000446406803689B69984703680546402B7C +:101310000CD010D8042B1DD004D8012B06D0022BE2 +:101320002CD070BD082B1DD0202BFAD1236820466D +:10133000DB6B984713E0B3F5007FF7D004D8802B20 +:10134000F4D0B3F5807FF0E7B3F5806FEED0B3F55E +:10135000006FE5E72368017F20469B6B9847236871 +:101360001B6B06E02368017F20469B6B9847236830 +:101370005B6B29462046BDE870401847236820462D +:10138000DB6B9847F3E7704770477047D0E903324B +:1013900010B5D21A002ADCBF84681219012A16DDA2 +:1013A0004268242404FB032301F1200251F8044B7A +:1013B000914243F8044BF9D10A781A70C3688268E5 +:1013C000BFF35B8F01339A42D8BF9B1AC36010BD35 +:1013D00003698268BFF35B8F01339A42D8BF9B1ABF +:1013E0000361704770B504460E46606803685B6829 +:1013F00098470028F9D10D4D28680368DB6F98479E +:10140000E1F720FB28680121FFF72CFF60683146D7 +:1014100003689B68984723682046DB6A98472868DA +:101420000368BDE870409B6F184700BF34E7012098 +:1014300008B5E1F7F9FABDE80840E1F7FDBA10B5E3 +:101440000446142112F057FF204610BD10B5044683 +:10145000406803681B68984748B9637A3BB1237AB0 +:101460002BB9236820465B6ABDE81040184710BDC1 +:1014700070B50446406803681B689847054630B954 +:10148000237A23B1606803685B69984725726068B6 +:1014900003681B68984728B9236820465B6ABDE843 +:1014A00070401847BDE87040E1F7D4BA10B58260CB +:1014B0000022034CC0E90322C0E9004110BD00BF77 +:1014C00090C40308406803681B68184700207047F1 +:1014D000074B828D1B88934281BF064B1B6803EB31 +:1014E000420358788CBF00F003000020704700BF13 +:1014F00088E7012084E7012070470000114B2DE9A7 +:10150000F041818D04461B888B4218D903689D6F7A +:101510000D4B1868E3F728FC236806462046DB6F6E +:101520009847236807462046D3F8803098473A46C4 +:10153000034631462046AC46BDE8F04160470020F6 +:10154000BDE8F08188E7012090E70120184B2DE9E4 +:10155000F743818D04461B888B4226D9154B1B68A7 +:1015600003EB410213F81100134B55781B68C5F3C8 +:10157000810553F820603368DF69104B1868E3F782 +:10158000F3FB236880462046DB6F9847236881463B +:101590002046D3F8803098474B4600904246294673 +:1015A0003046B84703B0BDE8F0830020FAE700BF3B +:1015B00088E7012084E701208CE7012090E70120E3 +:1015C0000EB4304B2DE9F0471A889DB0838D044648 +:1015D0009A4254D926AADFF8B090DFF8B080029280 +:1015E000D9F8002012F81320D8F8003053F8225010 +:1015F0002B6828469B6B9847064607B203A803F062 +:1016000093FE2B682846DB6C98472B688246284659 +:101610001B6D98475346009003A8029A259903F042 +:10162000DEFEA28DD9F8003094F837C0258903EB8F +:10163000420113F81200A5EB0C054A78D8F80030E7 +:101640002DB294F83910C2F38102009553F820307E +:1016500003A801F037FCB4F9342003B2B91800290B +:101660000BDD013B13FB02F316FB00331FB23846C0 +:101670001DB0BDE8F04703B07047002BF7DC002732 +:10168000F5E700BF88E7012084E701208CE701200F +:10169000BD4B2DE9F04F0C461B88898DA9B08046C3 +:1016A0008B4209D800234FF0FF328360C0E900323B +:1016B000404629B0BDE8F08FB44E336813F81120CE +:1016C000B34B1B6853F82250B24B1868E3F74CFB3E +:1016D0002B68814628469B6B9847A78E03B28246AB +:1016E00007440FA80493BBB2039394F83930002B3E +:1016F00040F0A58003F018FE2B682846DB6C984765 +:101700002B68064628461B6D9847236807462046E7 +:10171000DB6F9847236883462046D3F8803098478C +:101720003B46494632460026CDE900B00FA8374671 +:1017300003F06AFE94F83830DFF850B213F0FD0F72 +:101740000CBFB4F90A90B4F90890A28D2946DBF8D1 +:1017500000300FA8013703EB420347F6FF72BFB218 +:101760005B78C3F3810301F0C8F8039B8642A9EBC1 +:101770000309B8BF06460FA80FFA89F936B203F07D +:10178000FAFD18B92B7A4B44002BDEDC039B204674 +:10179000049A13FB07F7A38E95F80990FF1ABFB2BE +:1017A0003BB29A42A8BF574694F8383013F0FD0F69 +:1017B00023684F44DB6E08BFB4F908A01FFA87F90D +:1017C00018BFB4F90AA0984701280FFA89F7B3B2F5 +:1017D00000F0E280022894F8376000F0E380EA7AB3 +:1017E00036B22D7BB61A2A441FFA86FA134494F8AF +:1017F00038200FFA8AFB9BB2022A1EB200F0D68074 +:10180000032A00F0DE80012A40F0E6802589334675 +:101810003E46A5EB09091F465D460FFA89FB5D4B65 +:10182000A18D1868E3F7A0FAA8F800B0A8F8025054 +:10183000A8F80460A8F80670C8F8080038E703F0B4 +:1018400073FD2B682846DB6C98472B6807462846B3 +:101850001B6D9847236883462046DB6F98472268B4 +:1018600005902046D2F880209047059B3A4649468D +:1018700001900FA800935B4603F0C6FD94F8383042 +:10188000B4F908900FAF13F0FD0FB4F90A30A18D31 +:101890000ABF4A461A46994694F8373094F83900F8 +:1018A000D21A3368B4F9346003EB4103597800234A +:1018B0000797C1F38101ADF818308DF821008DF83C +:1018C00020100995ADF82820ADF82A90ADF82C60CD +:1018D000ADF82E30ADF83030ADF83230ADF83430F0 +:1018E000ADF83630ADF838308DF83A3050B32B685B +:1018F00028465B699847074620B30998394603682C +:10190000DB6898470646E8B1437B827A5B0003F4C4 +:1019100080731343ADF838309DF82130062B11D178 +:1019200009983246394603685B6C9847737B5B00C5 +:1019300003F48072B37A13431844BDF83830184466 +:10194000ADF838000026374606A8013701F0B7F990 +:10195000BDF83600039BBFB28642A9EB0309BDF870 +:101960001830B8BF06460FFA89F936B2002B3FF49B +:101970000DAF9DF83A30002B7FF408AF2B7A4B4423 +:10198000002BE1DC02E700BF88E7012084E70120AB +:101990008CE7012090E70120AAEB0606022096FBC7 +:1019A000F0F61CE71E44AAEB060618E72589ED1A97 +:1019B000A5EB0A050FFA85FB6589A5EB09052DB294 +:1019C0002DE765894FF0000BED1A33463E46A5EB37 +:1019D0000A051F462DB222E7002520E710B5044670 +:1019E000482112F088FC204610BD000013B590F885 +:1019F00036300446FBB1164B818D1B888B421AD9B9 +:101A0000B0F90830002B16DDB0F90A30002B12DDDA +:101A1000104B1868E3F7A8F9B4F942302268002B9C +:101A200006DBB4F94030002B02DB636C984204D033 +:101A300053692046984702B010BD04F13C016B4643 +:101A4000126903C983E80300194620469047F2E76C +:101A500088E7012090E70120454B2DE9F041828D78 +:101A60008EB01B88044693427ED9086805AB49684E +:101A7000404D03C311462868E3F776F9B4F94230C4 +:101A8000002B11DBB4F94030002B0DDB636C984266 +:101A90000AD104F13C0209AB92E8030083E8030099 +:101AA000194605A8FEF722FABDF91830002B5BDDB8 +:101AB000BDF91A30002B57DD2F4FA28D3B6813F86C +:101AC00012202E4B1B6853F82260002E4CD0236846 +:101AD000204694F83680DB6E9847A28D3B68B4F9B7 +:101AE00034C003EB420394F838E094F839205B7873 +:101AF00094F83770C3F38103216B09968DF8293070 +:101B00001F4B8DF828001B688DF82AE00B91ADF86B +:101B100030C08DF832808DF833708DF8342093F812 +:101B200058200AB1DE6C06B99E6807AF21463846D8 +:101B300002F06EFFA18D2868E3F716F923680546C9 +:101B40002046DB6F9847236880462046D3F88030D4 +:101B5000984709AB0195009305ABCDE9028030466B +:101B600097E80600E3F7B2F80EB0BDE8F08100BFD9 +:101B700088E7012090E7012084E701208CE701201D +:101B800034E7012038B50E4B0446828D1B889A42FB +:101B900014D203685B6F98472368054620461B6F85 +:101BA000984794F838302DB2014613F0FD0F06BF68 +:101BB000024629462A462046FEF7B2FB38BD00BF42 +:101BC00088E7012030B58B8885B004468385B0F95D +:101BD000083023B9B0F90A300BB9FFF7D3FF2368F7 +:101BE0006D4621463C342846D3F88430984795E822 +:101BF000070084E8070005B030BD00238380C38060 +:101C00000380438091F82630FF2B01BF0B8983802E +:101C10004B89C3807047000037B504466B4608689F +:101C2000496803C3236869462046DB6A9847084B26 +:101C30001B6893F858200AB1D86C00B998680368FB +:101C40006946A26A1D6A94F82630A84703B030BDE1 +:101C500034E70120704710B504462C2112F04BFBED +:101C6000204610BD90F826202AB190F8252012B108 +:101C700003685B6918477047304B2DE9F043828D4C +:101C80008DB01B8804460F46934254D92C4B1968DB +:101C900001EB420311F812102A4A126852F821107F +:101CA000002948D05A7894F83930C2F30108C2F3B9 +:101CB00081028DF82C30244B8DF821201A6890F881 +:101CC0003650B0F934C090F838E0266B90F8370001 +:101CD00092F8583007918DF820808DF822E009960F +:101CE000ADF828C08DF82A508DF82B000BB1D56CBB +:101CF00005B9956805AE2146304602F089FE134BC2 +:101D0000A18D1868E3F730F8236880462046DB6F22 +:101D10009847236881462046D3F88030984707AB20 +:101D2000CDF8048000933B46CDE90290284696E822 +:101D30000600E2F7CBFF0DB0BDE8F08388E7012095 +:101D400084E701208CE7012034E7012090E701209F +:101D5000704770B50B880D460446C384084604F0EE +:101D60007BFE0646284604F0ABFE23680546314656 +:101D700020469B6B9847236829462046DB6BBDE8CD +:101D80007040184710B504462C2112F0B4FA2046D2 +:101D900010BD10B591F828300446FF2B06D0002363 +:101DA000038043808380C380204610BD263104F029 +:101DB000BBFEF9E790F828202AB190F8252012B14F +:101DC00003685B69184770472DE9F041044688B005 +:101DD00000250F4654F8263B04A90646DB6ACDE9E8 +:101DE00004559847204604F037FE8046204604F00C +:101DF00067FE069506ADADF81E003946ADF81C80AD +:101E00002846FEF773F8BDF91C30002B19DDBDF92B +:101E10001E30002B15DD0C4B1B6893F858200AB1BF +:101E2000D86C00B9986801270168BDF91230029793 +:101E300096F82860BDF91020CDE900568D6821463E +:101E4000A84708B0BDE8F08134E7012010B5036869 +:101E50000C46DB6A9847031B5842584110BD0000EE +:101E6000014B1960704700BF3CE701202DE9F04F9E +:101E7000964697B0054614460E461F460DF11C0CBB +:101E8000BDF888809DF88C90BDF890A0BEE80F004A +:101E9000ACE80F00DEF8003004F1140ECCF800308E +:101EA0000DF1300CBEE80F00ACE80F00DEF800309A +:101EB00004F1280ECCF800300DF1440CBEE80F0000 +:101EC000ACE80F00DEF800303146219A2846CCF805 +:101ED00000302B680192209ACDF80880009207AA62 +:101EE000CDE9039AD3F83CB03B46D847A6460DF15E +:101EF0001C0CBEE80F00ACE80F00DEF8003004F167 +:101F0000280E3C34CCF800300DF1300CBEE80F0048 +:101F1000ACE80F00DEF80030CCF800300DF1440CD6 +:101F20000FCCACE80F00236831462846CCF80030CF +:101F30002B68CDE9039A219ACDF808800192209A66 +:101F4000009207AADC6B3B46A04717B0BDE8F08FB4 +:101F50002DE9F04F8DB08846D3F800C01699BDF832 +:101F600070400F6892ED094AA7EB0C07D2ED0B4ABF +:101F7000D3ED076ABC421899DDF864A0A8BF3C46BF +:101F8000B1F90090BAF9001007EE904A09EB0C0E77 +:101F9000D3ED0A1AB8EEE75AD2ED0D7A93ED0D2A79 +:101FA000714525EE044A65EE244A25EE275AF7EEE0 +:101FB000007A71EEA40A32EE051A87EEA67A36EEA2 +:101FC000840A61EE871A22EE072A40F38C80A1EB87 +:101FD0000E0696FBF4F507EE105A002D04FB15666D +:101FE000B8EEC77AA7EE040AE7EE240AA7EE051AB0 +:101FF00012DD70EE446A70EEE41A31EE452AF5EE19 +:10200000406AF1EE10FA14BF87EEA67AB0EE677A56 +:1020100061EE871A22EE072A05FB04F2BF1A9444E8 +:10202000BAF80420114409EB0C0209B23A448A427E +:10203000C4BFA1EB0902A2EB0C07002F50DD97FBF8 +:10204000F4F104FB11720AB901392246C7EE803A55 +:1020500040689DF86CB0B644D0F800A00029CCBF11 +:10206000A14691460B90179804FB05E5F0EE426AF5 +:10207000CDF824B00890B0EE617A18985B69FEEE56 +:10208000C86AB0F902B0BEEEC87A0B985B440793F9 +:1020900016EE903ACDE9058560EEA32A21EE233AAB +:1020A00072EEE17AFEEEC87A17EE907A73EE427A1B +:1020B00097FBF4F7FEEEC87A17EE90CA9CFBF4FC8F +:1020C0000CFB0633029317EE103ACDE9037C07FBB5 +:1020D0000637A9EB0603CDE90047DAF80840A04728 +:1020E0000DB0BDE8F08F00252E4699E72DE9F04FA1 +:1020F000DBB01D461446BDF898310F9129460A936E +:102100009DF89C3109900B93BDF8A031DDF894B196 +:10211000109303685F6CDDE90A23B847099B586098 +:10212000002800F0A1832B68F2EE047A94ED027A85 +:1021300014936B68B4EEE77A1593C14B1978D5E91F +:102140000223002916BF194611461346F1EE10FA74 +:102150001691CDE9173240F2878394ED077AB4EEF9 +:10216000E77AF1EE10FA40F27F8394ED0C7AB4EE48 +:10217000E77AF1EE10FA40F277832268B14B9A4287 +:10218000C0F27283B04963698A4200F36D8303F53C +:102190001C33AE48FF33834200F26683A36AAC4D22 +:1021A00003F51C33FF33AB4200F25E83626802F535 +:1021B0001C33FF33834200F25783A16901F51C33BE +:1021C000FF33834200F25083E36A03F51C30FF3093 +:1021D000A84200F249838A4280F210819A4200F3B9 +:1021E0001981994280F21D8102250127A946B8462E +:1021F0004FF0000A214649A803F0E0FD224653466D +:1022000049A9CDF8009019A803F008FF22465346CB +:1022100049A9CDF8008029A803F000FF43462246D3 +:1022200049A9CDF8009039A803F0F8FEAF4212AFEB +:10223000B7BF0023012329AD19ACB1BF0E9319AD6F +:102240000E9329AC0F9B93E8030087E8030028B99D +:10225000804B186803689B6A98473860649BBBF89A +:102260000600B3F902302F9A0C930C9963690B4462 +:10227000BBF90210084400B283420D9080F2DD8069 +:102280008B4208DA002A06DDCB1A9A42C0F2E480BB +:10229000002B00F3E28067690DF150080C9B3B4472 +:1022A0001F460D9BDF1B9742A8BF1746002F40F328 +:1022B0006681649B2968B3F90020BBF900301144A2 +:1022C000206899421ADDBBF8041002440B441BB28B +:1022D0009A4213DC109A12A9099B09981B6806926E +:1022E0000B9A009505920A9ACDE903B2649ACDE95A +:1022F000018249AAD3F848902346C84794ED0A7A48 +:10230000D4ED0B7AD4ED0E6A37EE277AD4ED0D7A40 +:10231000A16877EEA67A94ED086AD4ED076A84ED99 +:102320000A7A76EE866AC4ED0D7AD4E90023C4ED0C +:10233000076A1A446369013322606361A369013B40 +:10234000A36123690B44E1688B42236115DB94EDA3 +:10235000096A01325B1A76EE266A22602361C4EDB7 +:10236000076AD4ED0C6A36EE877A84ED0A7A94ED2A +:102370000F7A77EE277AC4ED0D7A95ED0A7AD5EDCE +:102380000B7AD5ED0E6A37EE277AD5ED0D7AA9686E +:1023900077EEA67A95ED086AD5ED076A85ED0A7A9B +:1023A00076EE866AC5ED0D7AD5E90023C5ED076A9C +:1023B0001A446B6901332A606B61AB69013BAB6105 +:1023C0002B690B44E9688B422B6115DB95ED096A9B +:1023D00001325B1A76EE266A2A602B61C5ED076A28 +:1023E000D5ED0C6A36EE877A85ED0A7A95ED0F7A8F +:1023F00077EE277AC5ED0D7A013F57E7994213DC56 +:102400009A4214DA022503274FF00008A9464FF03C +:10241000010AEFE601250027A946B8464FF0020A57 +:10242000E8E601250227E1E600250127F4E7022777 +:1024300003254FF00009B846E9E7134628E700BF37 +:102440002CE70120018FFDFF00710200FFE1040075 +:10245000FEE1040034E7012013462B999E462E9F8F +:102460009C4611914FF00009DDED344A9DED337A21 +:102470009DED374ADDED367ADDED313ADDED306A3E +:102480009DED325ADDED355A9DED386ADDE9290AB8 +:10249000DDE92C81BCF1000F47D103EB070CD71A03 +:1024A000B9F1000F09D029908DED337ACDED367A50 +:1024B000CDED306A2D91CDE92EC71B994FF0000864 +:1024C000DDED244A1191DDED236A9DED274A9DED56 +:1024D000267ADDED213ADDED207A9DED225ADDED03 +:1024E000255A9DED286ADDE9190ADDE91EC7DDE9F7 +:1024F0001C91BEF1000F31D0119E504476EEA46ABB +:10250000314437EE047A77EEA37A494508DB77EE5B +:10251000857A013076EEA56AA1EB090137EE067ADD +:102520000EF1FF3E4FF00108E3E7119E504437EEF5 +:10253000247A314477EE847A76EEA36A414508DB4B +:1025400076EE856A013037EE257AA1EB080177EE49 +:10255000867A0CF1FF3C4FF001099BE79C44FF1A7F +:10256000B8F1000F09D01990CDED236A8DED267AD0 +:10257000CDED207A1D91CDE91EC7D21A8BE60E9BB8 +:102580003F9A002B00F0D18019AD39AC649BBBF8A9 +:102590000600B3F902300C930C9963690B44BBF944 +:1025A0000210084400B283420D9080F2C1808B4239 +:1025B00008DA002A06DDCB1A9A42C0F2BB80002B53 +:1025C00000F3B98067690DF150080C9B3B441F462E +:1025D0000D9BDF1B9742A8BF1746002F40F33C819D +:1025E000649B2968B3F90020BBF9003011442068CE +:1025F00099421ADDBBF8041002440B441BB29A4204 +:1026000013DC109A12A9099B09981B6806920B9A71 +:10261000009505920A9ACDE903B2649ACDE9018248 +:1026200049AAD3F848902346C84794ED0A7AD4EDD6 +:102630000B7AD4ED0E6A37EE277AD4ED0D7AA168C5 +:1026400077EEA67A94ED086AD4ED076A84ED0A7AEB +:1026500076EE866AC4ED0D7AD4E90023C4ED076AEC +:102660001A446369013322606361A369013BA3617A +:1026700023690B44E1688B42236115DB94ED096A01 +:1026800001325B1A76EE266A22602361C4ED076A86 +:10269000D4ED0C6A36EE877A84ED0A7A94ED0F7ADF +:1026A00077EE277AC4ED0D7A95ED0A7AD5ED0B7A9F +:1026B000D5ED0E6A37EE277AD5ED0D7AA96877EE5B +:1026C000A67A95ED086AD5ED076A85ED0A7A76EE69 +:1026D000866AC5ED0D7AD5E90023C5ED076A1A446F +:1026E0006B6901332A606B61AB69013BAB612B699C +:1026F0000B44E9688B422B6115DB95ED096A0132C9 +:102700005B1A76EE266A2A602B61C5ED076AD5ED65 +:102710000C6A36EE877A85ED0A7A95ED0F7A77EEB8 +:10272000277AC5ED0D7A013F57E739AD19AC2DE792 +:10273000134644E713463B9E9E46DDF8F8C01F460D +:102740009DED437A4FF00009DDED444ADDED467A18 +:102750009DED474ADDED406ADDED413A3D99DDF8FA +:10276000F0809DED425ADDED455A9DED486A0E968A +:10277000DDE9390A002F46D19C44D71AB9F1000F80 +:1027800009D039903D91CDED406A8DED437ACDED84 +:10279000467ACDE93EC71B994FF00008DDED244A8B +:1027A0000E91DDED236A9DED274A9DED267ADDED44 +:1027B000213ADDED207A9DED225ADDED255A9DED81 +:1027C000286ADDE9190ADDE91EC7DDE91C91BEF1C1 +:1027D000000F30D00E9E504476EEA46A314437EE9E +:1027E000047A77EEA37A494508DB77EE857A0130E3 +:1027F00076EEA56AA1EB090137EE067A0EF1FF3EEF +:102800004FF00108E3E70E9E504437EE247A31443E +:1028100077EE847A76EEA36A414508DB76EE856A28 +:10282000013037EE257AA1EB080177EE867A013F79 +:102830004FF001099EE79C44FF1AB8F1000F09D040 +:102840001990CDED236A8DED267ACDED207A1D917C +:10285000CDE91EC7D21AB5E60F9B1B6823B9044BFE +:1028600018680368DB6A98475BB0BDE8F08F00BF6B +:1028700034E7012070B50446002505989DF81C60DA +:10288000616063829DF81010BDF9183025802172B7 +:102890006672E0602282A382E58225836583A58338 +:1028A000E583258484F822502EB303685B6998473A +:1028B000064600B3E06831460368DB689847054682 +:1028C000C8B1437B827A5B0003F480731343238493 +:1028D000637A062B0FD1E0682A46314603685B6CA9 +:1028E00098476B7B5B0003F48072AB7A1343184408 +:1028F000238C18442084204670BD2DE9F04F00241D +:1029000085B08146884692469B4627462546264600 +:1029100054452ADA002303934FF6FF639D4204D007 +:1029200042F20B039D4218BF2F4603AB4246594665 +:10293000484603F059F80546B8B10A2815D0039A5D +:102940008AB1507B3946937A4000958800F48070B4 +:10295000034340460193D8F800305B6C9847019BD5 +:1029600018440644B6B20134D2E7304605B0BDE89B +:10297000F08F022A30B511D0032A1CD0012A0CD1C5 +:102980008B880188B0F904205B1A4488B0F90610DE +:102990009B1A048081804380C28030BDCB884288EE +:1029A0009B1AC2889B1A8A8801884380521A8188A0 +:1029B000521A0280F1E7CB884188B0F906205B1AF1 +:1029C000B0F90050B0F904409B1A45808280038022 +:1029D000C480E2E72DE9F04F9FB016911793299933 +:1029E000299B09889B88DDF8A8800B4412929DF8EA +:1029F000B8201BB211909DF8ACB01093D8F80030FD +:102A0000BDF9A060197BDB7A14911593002A6AD076 +:102A100098F810302D9A062B14BF0123022313447B +:102A20004FF000090F934C46CDF83890CDF8349014 +:102A3000DDE90E32934280F28F800023CDE91C3312 +:102A40008DF86F304FF6FF639C4206D00D9B42F22B +:102A50000B02944218BF23460D930E9B2D99D8F874 +:102A600000208B4241DB136810465B69984704469F +:102A7000D8F800001DAA214603689D680DF16F0378 +:102A8000A8471C904FF6FF639C4200F0EC8042F296 +:102A90000B039C4200F0E780002C00F0F9800A2C28 +:102AA00060D01C9A6AB39488BBF1000F3BD092F8B7 +:102AB0000D90BBF1010F4FEA490909F4807392F8B8 +:102AC0000A9049EA030934D10D9BA6EB0906002BB5 +:102AD0004FD1149A09EB06031344299AB2F9002046 +:102AE000934251DA38E02D9B9AE70DF16F03594676 +:102AF0002C9801931DAB00931CAB02F0BEFF044663 +:102B0000C0E7D8F8000003681B6998474FF6FF63D9 +:102B1000984200F0A88042F20B03984200F0A38094 +:102B2000BBF1000F00D14E441C9A002ABFD1914640 +:102B300099E00D9B002B00F0AD80BBF1000F18D188 +:102B4000D8F800000D9903685B6C98470644159B04 +:102B5000109AF31A934217DD002C00F099800A2C8A +:102B600040F087800A24B4FA84F040091FB0BDE821 +:102B7000F08FD8F800000D9903685B6C9847BBF1A3 +:102B8000010FA6EB0006A4D01C98299B90F9091010 +:102B9000B3F90070437B31445B0103F480728379A5 +:102BA00013430B44BB425EDB109B99425BDAD8F8BF +:102BB0000000B7420368CCBFBF1B00271B6BC8BF18 +:102BC000BFB298471C9B5A7BD10001F48075197ADB +:102BD00029435506179D48BFA1F50071054448BF1C +:102BE00009B26D1A2999ADB2B1F902100FFA85FA3E +:102BF00051453CDD1201D87902F4807202439244BF +:102C0000514530DC4D1B8A462DB21993ADB2119B54 +:102C1000D8F800001A680168D36C1D9A13931892B3 +:102C2000096C884798F80610199B0B9198F80E10BC +:102C3000189A0A919DF86F100991D8F80810059319 +:102C4000299B06920493129BCDF804A0CDE902754E +:102C50003744139D3FB2CDE90701009716991A68D2 +:102C600011985B68A8470E9B01330E93E0E60025A0 +:102C7000CBE70E9D01352D9B9D42BFF674AF5946A3 +:102C80002C98E1F7DFFF044610B10A28F2D169E77A +:102C9000002468E7BBF1000F3FF459AF74E730B58B +:102CA000C48A458B43832C44E41A838BC482048BEF +:102CB00022440C44591AC2830483818330BD2DE918 +:102CC000F04F0446478AC06885B003689B6B9847FD +:102CD000B4F91460637A06EB4006013BB742ACBF1F +:102CE0004FF000094FF00109052B04D8DFE803F08D +:102CF00054080F474C4C0025A9462E462F460EE09F +:102D0000B7424FF00005B4BF00260126F6E7B742F0 +:102D10004D464FF00009B4BF002601264F464FF044 +:102D20000008A4F81680A4F81880CDF804800023C9 +:102D300003932388202B33D042F20B015A1AD2F18D +:102D4000000A4AEB020A4FF6FF62934208D08B4218 +:102D5000019A0EBF4FF0010A1A464FF0000A019285 +:102D600003ABE268217A606802F03EFE2080D8B9A9 +:102D7000A28B002311462046FFF791FF6EE000254D +:102D80000127A9462E46CAE7B7424FF00005B4BF57 +:102D9000002701272E46C2E700250126A946ADE7F8 +:102DA00001934FF0010ADBE7638B0A2803F101036B +:102DB0006383DDD0039A62BB4FF6FF63984203D072 +:102DC00042F20B039842B2D12388A18B202B03D06F +:102DD00042F20B00834231D1BAF1000F0ABF88469C +:102DE000504601200A44238BB4F810C092B2A2834B +:102DF0001344B9F1000F02D1002D42D000B3218C51 +:102E000019448C4537DAE18A002934D063458EDDD8 +:102E10001DE093880199238092F80DB04FEA4B0B87 +:102E20000BF4807092F80AB04BEA000BE06803687C +:102E30005B6C98470BEB000292B2C5E70020D1E72C +:102E400063457FF774AFE38A002B3FF470AF012333 +:102E5000228C84F82230E38B1344E383E068036818 +:102E60009B6B9847B4F914301844638A181A60822F +:102E700005B0BDE8F08F002311462046FFF70FFF95 +:102E800055E7634514DD17B101230A4672E7002EAA +:102E90003FF44DAF00287FF44AAFBAF1000F02D0E3 +:102EA0000123424667E7E38A002B3FF440AFD5E7B2 +:102EB00000287FF43CAFBAF1000F3FF438AF012394 +:102EC0004246DAE7F0B505468FB017461C460E4677 +:102ED000D1B11B6820469B6B9847404203964FF642 +:102EE000FF7300B20097BDF850202946CDE901409C +:102EF000012405A8FFF7BEFC05A8FFF7E0FEBDF81A +:102F0000143063B10134F7E7012402F039FE0A28D6 +:102F1000284608BF013402F033FE0028F7D1A0B2E2 +:102F20000FB0F0BD2DE9F04FE3B01C468346884654 +:102F30006C9B002B00F012812368002B00F00E81A7 +:102F4000A37B002B00F00A810AAD106851682B4664 +:102F5000B8F9042003C30021B8F90630ADF83420D5 +:102F600028460C910CA9A279ADF83630FFF701FD87 +:102F70000CA9A2790846FFF7FCFC17A802F0D4F9C7 +:102F800020680368DB6C98470646206803681B6D61 +:102F9000984733466D9A6C99009017A802F01FFA73 +:102FA000206894F804A003689B6B9847B4F90C6000 +:102FB00023680746064430A893F8099002F0B4F954 +:102FC000237C7BB120680368DB6C984709902068FC +:102FD0000268126D9047099B009030A86D9A6C9919 +:102FE00002F0FDF9BDF834100EA8E27BBDF83630D2 +:102FF0008A1A217C039192B2B4F90C1002912168D3 +:1030000001916179009130A9FFF734FC002E5BDC5F +:1030100017AF4FF00009237C002B00F0B1800EA801 +:10302000FFF74DFEBAF1000F00F0A580237C64226B +:10303000394649A8099311F09CFD099B002B00F02B +:10304000A780BDF956302279012A40F08A80BDF967 +:103050003400C01A022390FBF3F000B2237C002B53 +:1030600000F08B80BDF84E209DF85A10BDF932302B +:10307000CDE90521BDF8302000211044424600B2C0 +:10308000CDE9039700905846CDE90154FFF7A2FC23 +:10309000002863D1B2B2BDF83230BDF83610134407 +:1030A0008A1A1BB2ADF836209DF85A20ADF832309E +:1030B000002A53D122686988127A9B1AEA880A4446 +:1030C00012B29342A7DD49E0237C4F44C3B14FF6CF +:1030D000FF79BDF93230B5F902203B44934297DACB +:1030E0000EA8FFF7ECFDBDF84E30013B9BB24B45FF +:1030F000099321D0617917A8E1F7A4FD099BF4E7B2 +:103100001FFA86F9BDF93230B5F902203B449342EB +:10311000BFF67EAF17A802F033FDF8B10A28F1D14F +:10312000BDF832304B44ADF83230BDF83630A3EB49 +:103130000903ADF83630E5E7B3B2BDF832201A44E2 +:10314000ADF83220BDF83620D31AADF83630BDF8D0 +:1031500038301BB19DF85A30002BBAD063B0BDE8AF +:10316000F08F022A05D1E27BBDF83400801AC01A24 +:1031700073E7002072E7E07B70E747F6FF7273E7C2 +:10318000BAF1000FF7D06422394649A811F0F1FCDA +:10319000002347F6FF72216849A8FFF7AEFB03B290 +:1031A00051E7032B18D8DFE803F002060D13B0F93E +:1031B00000205018704703888088184400B2801A95 +:1031C0000138704703888088184400B2401AF7E736 +:1031D000B0F900001044704700207047032B17D847 +:1031E000DFE803F002060910B0F90210501870472A +:1031F000B0F90220FAE74388C088184400B2801A68 +:10320000013870474388C088184400B2401AF7E775 +:1032100000207047014B00221A6070473CE70120F4 +:103220000346C8B1020C1204A2B90304102013F023 +:103230007F4F04BF1B02083013F0704F04BF1B0107 +:10324000043013F0404F04BF9B000230002B04DB1E +:10325000013070470020EAE7202070472DE9F04F49 +:1032600087B00D46164698460146DDE9104720B165 +:103270001AB11F2D01D81F2B04D90020386007B0C8 +:10328000BDE8F08F7DB943B102462B46414630463A +:10329000CDE90047FFF7E2FFF1E74FF0FF336FF0B2 +:1032A00000403B60EBE732FA05FA06D14643B6FB35 +:1032B000F4F004FB10663E60E1E7012200FA05FB32 +:1032C000AA40BBFBF4F9013A0AFB09F304FB19B964 +:1032D000164003933046FFF7A3FF2B460A460146EC +:1032E0003046CDE90047FFF7B9FF0646484605EBF3 +:1032F0000801FFF795FF05AB4A46CDE900430346B9 +:103300005046FFF7ABFF3968059A039B1144B1FBA8 +:10331000F4F2D31804FB12141E443C603044AEE7B0 +:103320002DE9F04385B0B0F100091D4617460C9C0D +:10333000BBBFC9F100094FF0FF3601262368BCBFAF +:103340005B422360002A04DA2368574276425B42DC +:103350002360002D3846BABF6D424FF0FF384FF062 +:103360000108FFF75DFF03AB3A46CDE90053034682 +:103370004846FFF773FF2368039A46451A4492FBB9 +:10338000F5F3184405FB132318BF4042721C236059 +:1033900005D1002BC3F100020BDB226006E0012EF9 +:1033A00004D1002B02DA2B440138236005B0BDE8BC +:1033B000F0830138521BF0E72DE9FF411C4C054614 +:1033C0000768A3692BB94068C5E9007004B0BDE87F +:1033D000F0814FF00208A26804AE206893FBF8F178 +:1033E0000A44E16946F8042D3A460096FFF798FF33 +:1033F000A36907466A68216A00966068FFF790FF34 +:10340000A36962690744616A0096E06893FBF8F873 +:10341000424403922A68FFF783FF80460096A3691F +:103420006A68A16A2069FFF77BFF4044CCE700BFD0 +:1034300040E70120074B1B78012B09D1B1F900307F +:10344000B0F900200380044B1B88013B9B1A0B80C2 +:10345000704700BF2CE7012028E70120074B10B57B +:103460001B78012B08D1064B0C881B88B0F9002073 +:10347000013B1B1B03800A8010BD00BF2CE701200D +:1034800028E701200A4B10B51B78012B0ED1B0F9AB +:1034900006104388B0F90040CA18064B44801B88C8 +:1034A0009B1A0380B0F904308180C38010BD00BF37 +:1034B0002CE7012028E70120084B1B78012B0CD1B9 +:1034C0000388B0F90410428802805A18044B1B8804 +:1034D0009B1A4380C388C180838070472CE70120FA +:1034E00028E70120074B10B51B78012B08D1B1F953 +:1034F0000030B0F9004003809388013B1B1B0B8018 +:1035000010BD00BF2CE701200A4B0A4610B51B78FE +:10351000012B0DD1818803880B440146013B21F822 +:10352000023BFFF7DFFFB0F90430C288C38082801E +:1035300010BD00BF2CE70120064B0021B3F900208D +:10354000054BC0F83011B3F90030A0F83421A0F8D1 +:103550003631704728E701202AE70120034B18681D +:1035600010B103689B691847704700BF70E70120DE +:1035700070470000094B07B5B3F900200021084B44 +:1035800000916946B3F90030ADF80420ADF806307B +:1035900003689B6C984703B05DF804FB28E70120A3 +:1035A0002AE70120094B82B00021B3F90020084B23 +:1035B000ADF8042002AAB3F900300091ADF806304E +:1035C000036812E906001B6C02B0184728E70120C7 +:1035D0002AE70120034B186810B10368DB6918471C +:1035E000704700BF70E70120034B186810B10368F3 +:1035F0001B6A1847704700BF70E701200023A0F83E +:10360000EC307047034B186810B103689B6A184789 +:10361000704700BF70E70120704710B504464FF4B3 +:103620009E7110F068FE204610BD10B5B1F9004043 +:103630008A88B0F90030224412B2934215DA8288A7 +:1036400013441BB29C4210DAB1F90230C988B0F9B8 +:103650000220194409B28A4207DAC088104400B235 +:103660008342ACBF0020012010BD0020FCE7B0F970 +:103670000030002B10B504DA8488234483800023B3 +:103680000380B0F90040B0F90430091B8B42B0F957 +:103690000230C8BF8180002B04DAC1880B44C3808C +:1036A00000234380B0F90210B0F90630521A934259 +:1036B000C8BFC28010BD0000104B10B50C46B3F956 +:1036C00000200F4B2046B3F90010FFF7D0FF0D4B41 +:1036D000186890B1036821469B6898470A4B1868A0 +:1036E00018B1036821469B689847084B2146186823 +:1036F0000368BDE81040DB69184710BD2AE70120C8 +:1037000028E7012070E701206CE7012034E7012061 +:10371000F8B5064608460F46FCF72BFCE8B9B7F9A2 +:103720000050B6F90040A54217DBB7F90220B6F900 +:1037300002309A4211DBB9880D44B1880C442DB295 +:1037400024B2A54209DCF8881044F288134400B280 +:103750001BB29842CCBF00200120F8BDF8B504464A +:1037600008460D46FCF705FC78B92046FCF701FC3D +:10377000B5F9006050B12680B5F902306380B5F923 +:103780000430A380B5F90630E380F8BDB4F9001029 +:10379000B5F90220B142B4F90230B5F804C00F46C1 +:1037A000ED88A8BF3746934218466644B4F804C073 +:1037B000A8BF10462A44E588614436B227802B44CE +:1037C00009B212B260801BB28E42ACBFC7EB0601D9 +:1037D000C7EB01019A42ACBFC0EB0202C0EB03028F +:1037E000A180E280D1E70000014B1868704700BF5C +:1037F00080E70120002310B5A0F8A4300446B0F8FB +:103800008030A0F8A630B4F8A430B4F8A6209A42CC +:103810000ED9E21892F8842022B154F823000368EC +:103820001B6D9847B4F8A4300133A4F8A430EAE73C +:1038300010BD002300F18402A43020F8243C02F8DB +:10384000013B8242FBD1704770B50B4C05460E46DA +:10385000206810B103685B699847281DFFF7E9FFEE +:10386000266033683046DB6898472B6828465B6CD7 +:10387000BDE87040184700BF70E701200023B0F892 +:1038800080C0B0F8A4101A46F0B51C461D469C45F1 +:103890001ADDC61896F884606EB19A4208D050F8C6 +:1038A00023701FFA82FE40F82E70871887F8846014 +:1038B00001320133EBE79942B0F8A660A8BF0135A9 +:1038C0009E42C8BF0134F4E7B0F8A630491B1B1B69 +:1038D000A0F8A410A0F8A630B0F88030934203DD21 +:1038E000013BA0F88030F7E7F0BD000070B5164D41 +:1038F0000446286840B1037A33B984F83831036844 +:103900009B68BDE87040184794F838310F4E73B982 +:1039100068B1037A5BB1306810B103681B699847DE +:1039200028680368DB689847012384F83831043439 +:103930002046FFF75FFF2046FFF7A0FF306810B179 +:1039400003685B6ADDE770BD74E7012070E7012062 +:10395000034600F1400100221A80083323F8062CA8 +:1039600023F8042C23F8022C8B42F5D1A0F8402038 +:1039700070470000F8B51D4B06460446002546F882 +:10398000043BA8220021304611F018F8A4F8845016 +:1039900004F1AC00164FFFF7DBFF04F1EE00FFF778 +:1039A000D7FFA4F83051A4F83251A4F83451A4F848 +:1039B000365184F838510F490F4810F093FB0F4BE4 +:1039C00058B11D8000230E4A304613600D4A3B60FB +:1039D0001360FFF72EFF2046F8BD4FF480620220EF +:1039E0001A80386001F026FBECE700BF18C6030818 +:1039F00070E70120CDB5E8B5C2A507F4600000204E +:103A000080E7012074E70120B0F84030013B9BB211 +:103A10008B42A0F8403010B508D900EBC30300EB8F +:103A2000C1041A6840F831205A68626010BD000075 +:103A30002DE9F04F8FB08F4B83460AAC84E8060027 +:103A4000B3F9002020468C4BB3F90010FFF70FFEAE +:103A50002046FCF78EFA00286AD10394BBF8EC40AC +:103A60000BF1AC030BEBC4050193A4355CB1294603 +:103A70000398FFF74DFE013C18B1A1B20198FFF782 +:103A8000C3FF083DF2E7BBF8ECA00AF1FF33CDF825 +:103A900010A002934FEACA0303F1A40406935C4406 +:103AA00000252646CDF814A02F46059B002B73D089 +:103AB00003993046FFF7B9FD50B3BDF928E0B6F9D8 +:103AC00000C0BDF92A80E645B6F9029033DBBDF8A7 +:103AD0002C20B3887244634412B21BB29A422ADC8F +:103AE0001FFA89F2F388C845BDF82E1013441FFA57 +:103AF00088FC9BB20FFA83FE0FDBA3EB0C03C91A01 +:103B000009B20029ADF82E1012DDADF82AE0054605 +:103B1000059B083E013B0593C7E7614409B2714527 +:103B200038DCA2EB0C0212B2ADF82E20002AEEDC3B +:103B30000FB0BDE8F08FC8452CDBF3889944BDF881 +:103B40002E3098440FFA89F90FFA88F8C14521DB25 +:103B50001FFA8CF2B388E645BDF82C1013441FFA07 +:103B60008EF89BB20FFA83F90ADBA3EB0803C91A9C +:103B700009B20029ADF82C10DADDADF82890C6E7BF +:103B8000414409B2494505DCA2EB080212B2ADF886 +:103B90002C20CBE70746BBE7002D81D1002F00F09A +:103BA000DD81BDF92860BDF92A70B3B2BDF82EA041 +:103BB0000593059ABDF82C301344BAB292449BB2D7 +:103BC0001FFA8AFA0FFA83F80FFA8AF9CDE9072368 +:103BD000049B002B52D003992046FFF726FDDDE918 +:103BE0000723C0B1B4F900E0B4F90210764522DC35 +:103BF000B4F804C0F4440FFA8CFCE0451BDB8F42A0 +:103C00001FFA81FCE1880DDCAAEB0C0CA4F80290F1 +:103C1000A1EB0C01E18028460499083C05460139D6 +:103C20000491D3E7614409B24945F5DCA2EB0C0CE1 +:103C3000A4F806C0EFE78F42EEDCB4F806C061449A +:103C400009B28945E8DB76451FFA8EFCA18807DCBE +:103C5000A3EB0C0CA4F80080A1EB0C01A180DAE727 +:103C6000614409B28845D7DB0599A1EB0C0CA4F897 +:103C700004C0D0E72AE7012028E70120002D00F04A +:103C80006D81069B5B441C46029B013300F06681FC +:103C900004F1A40503982946FFF73AFD20B1BDF8C9 +:103CA00008100198FFF7B0FE03992846FFF7BDFC06 +:103CB000002800F09C80B4F9A490B4F9A8301FFA51 +:103CC00089F1BDF92800099301EB030C83B2484543 +:103CD000BDF92AE01FFA8CFABDF82CC0B4F9A62071 +:103CE00003EB0C05ADB20595BDF914500495BBF876 +:103CF000EC5040F399805B1A96450FFA8AF09BB21C +:103D00001EB22EDD029F1FFA8EFE92B2BDF82E402B +:103D10000BEBC708049FAEEB0201A6443F1AB8F8AC +:103D2000B20089B202440FFA8EFE0DB212B26F4396 +:103D3000AEEB02027243974209DBB8F8AC20A8F858 +:103D4000B2509C44ADF82820ADF82CC086E6214442 +:103D5000B8F8AE30A8F8B060ADF82E10ADF82A3043 +:103D60007CE6049FB84227DA02993F1ABDF82E502C +:103D70000BEBC10405EB0E011FFA81F8B4F8B21089 +:103D800011440FFA88F9A2EB0E02A1EB080172436D +:103D900089B20FFA81F808FB07F7BA4206DCA4F8EB +:103DA000AE90A4F8B280B4F8AC20CAE72944A4F8D5 +:103DB000B060ADF82E1051E60598062DAAEB000074 +:103DC00080B20FFA80FE17D8049BB4F9AA10A4F8A9 +:103DD000A4306B1CA4F8A8E0ABF8EC30019B019870 +:103DE00003EBC50320F835905A809E80D980029B52 +:103DF000083C013B029347E7029AB6454FEAC202EC +:103E00000DDB9C445A44ADF828901FFA8CFCA2F8B4 +:103E1000B0E0ADF82CC08C44A2F8ACC01EE65A4409 +:103E20008444A2F8B0608FE71FFA8EF1BDF82E60CF +:103E300093B2964501EB060806931FFA88F8069F91 +:103E40000FFA88F30793B4F8AA303B449BB2089367 +:103E500024DA0599A3EB0803A2EB0E02A9EB0000FC +:103E6000AAEB01049BB2A4B219B225B248436A433B +:103E70008242029A4FEAC2025A4406DC079BA444DB +:103E8000A2F8B210A2F8AE305EE70499A2F8B050E2 +:103E9000A2F8AC103344ADF82E30DFE5069F049B4A +:103EA000C91B0FFA8AF789B29F420FFA81FE23DD00 +:103EB000059AA9EB0000BDF92030AAEB0202079D8C +:103EC0000EFB00F092B2A5EB030A029B14B2DB00DA +:103ED00004FB0AFA5B44504503DBA3F8B2E09444C8 +:103EE00032E7049A3144A3F8B040A3F8AC20B3F809 +:103EF000AE30ADF82A305CE7089B062DA3EB080333 +:103F00009BB218B213D8079BA4F8AA00A4F8A63055 +:103F10006B1C0199ABF8EC30019B21F8359003EB59 +:103F2000C5035A80099AA3F806E09A805FE7029CCD +:103F300070454FEAC4040DDB3144069B5C44ADF888 +:103F40002A2089B2A4F8B200ADF82E101944A4F8C2 +:103F5000AE1083E55C44A4F8B2E09BE7BBF8EC400C +:103F60004FF6FF76651E0BEBC404ADB2B54244D0EC +:103F7000BDF92A20B4F9A600BDF928108242B4F98F +:103F8000A4701FD1BDF92EC0B4F9AA309C4519D137 +:103F9000B4F8A830BDF82C20D81900B2884209D155 +:103FA000ADF828701344ADF82C3029460198FFF77E +:103FB0002BFD03E0114409B2B942F3D0013D083CA6 +:103FC000ADB2D3E7B942F9D1BDF92C10B4F9A8309C +:103FD0009942F3D1B4F8AA30BDF82E101F183FB2A1 +:103FE000BA4205D1ADF82A000B44ADF82E30DCE71B +:103FF0000A4412B29042E1D1F6E7BBF8EC60072E1A +:104000004FEAC60412D8751CBDF92800BDF92A1064 +:10401000ABF8EC50019DBDF92C202C44BDF92E309D +:1040200025F836006180A280E38081E50BF1AC03C6 +:10403000013E5C446FF0004A4FF0FF3700250593C6 +:10404000B4F9A830721E02939146B4F9AA300493D1 +:1040500004F1A403B9F1FF3F18680DF1300C079289 +:1040600016BF0599DDF80CE001EBC90E0693BEF80A +:104070000610BEF8048018FB01F85968ACE803008C +:1040800071460CA8FFF76AFBBDF83610BDF8340086 +:104090004FF0080C049B029A10FB01F002FB03880E +:1040A000A0EB080190FBFCF0884220DC5145DDE9E3 +:1040B000063203DAD9B18A464F46354609F1FF394F +:1040C00019F1020FC6D116460132A4F10804B7D186 +:1040D000019BACB2ED0058197B1C0BD10146039833 +:1040E000FFF73CFB21460198FFF78EFCB6E44F46F4 +:1040F0003546EDE7019BFF005D44D9195F44FFF7AA +:104100002DFB039B03CB039BC7F8AC00C7F8B01093 +:1041100055F8AC0F696803C3E4E700BF2DE9F04F21 +:1041200000F598769BB004463046FBF722FF054623 +:1041300048B9236820461B6C96E806009847C4F8E7 +:104140003051C4F83451C54B1B68002B3FD0C44DCF +:104150002846FBF70EFF0646002838D12846FFF711 +:1041600091F92368296820461B6C6A6898472E805D +:104170006E80AE80EE800DF12408BA4D4046FFF708 +:10418000E7FB2E88B4F8EC7004F1AC003346BB4278 +:1041900024D2BDF86410072916D800EBC30230F909 +:1041A0003390B2F902A0B2F904E0B2F906C04A1C99 +:1041B000ADF8642008EBC10228F83190A2F802A003 +:1041C000A2F804E0A2F806C001339BB2DFE7B4F81E +:1041D000EC30002BCFD11BB0BDE8F08FB4F82E31FE +:1041E000B3420CD904EBC603226801362046176C93 +:1041F000D3F8EE10B6B2D3F8F220B847EEE79A4AF9 +:104200001368914693F84830012B40F0E0802988EC +:104210000026B4F8EC7004EBC103AE338F4203F117 +:1042200008030ADD33F8042C013133F8080C02448A +:1042300012B29642B8BF1646F0E78C4BDFF82892D0 +:104240001B880F2B8CBF4FEAD30B4FF0010B0023C1 +:10425000CDE90533BDF81670BDF81A00824B38441D +:1042600007B21868B742036880F28380D3F89C30A5 +:10427000984707EB0B03984207DAB04205DA87420A +:104280006CDD002F6ADD304604E08742FBDCB04283 +:10429000A8BF3046764BC01B0022ADF81670B3F9AC +:1042A00000302F88ADF81420ADF81830ADF81A00A2 +:1042B000B4F8EC30BB42CDD904EBC70207AB52F8DF +:1042C000AC0F516803C305A907A8FFF7AEF9002892 +:1042D0004CD0BDF91C00BDF91420BDF820A08646C5 +:1042E0009042BDF91E105044BDF818A0B8BF9646C4 +:1042F000BDF91630524480B299428C4692B2029374 +:10430000B8BF9C4603B20FFA82FAADF81CE0ADF8D4 +:104310001EC05345B8BF0246029BA2EB0E02ADF889 +:104320002020BDF822201144BDF81A20134489B280 +:104330009BB208B21AB29042B8BF0B46A3EB0C0373 +:10434000ADF8223007A8FBF714FE20B9236807A9AF +:1043500020469B6C98470137BFB2A9E7D9F8000007 +:1043600001210368D3F89830984773E7CDE9070037 +:10437000E8E75B6A98473F4B1B78002B3FF42BAF75 +:10438000002304F1EE00A4F82E312B88BDF8645010 +:10439000AB42BFF420AFB4F82E11072914D808EBB4 +:1043A000C30238F933E0B2F902C0B2F90470B2F9CD +:1043B00006604A1CA4F82E2100EBC10220F831E06F +:1043C000A2F802C09780D68001339BB2E0E7022BAF +:1043D00040F03381284B04F1AC0A1B78012B00F02C +:1043E00098802A88B4F8EC10013292B20029C2D029 +:1043F000B4F8AE609446B4F8B2304FF000091E44F1 +:1044000036B21FFA8CF34FEAC907994240F2BE80D8 +:10441000274404EBCC0EB7F9AE30BEF9AE008342B0 +:1044200040F3A080BEF8B260E146064436B29E4238 +:10443000A8BF1E460CF1010CE3E70AD16245B6F9AC +:10444000B200BEF9B210B8BF62468842B8BF1F467C +:1044500086E08A42B8BF0A4682E000BF6CE70120CE +:1044600078E701206000002034E701202AE70120DE +:1044700028E7012032E701202CE70120A11907AB32 +:1044800051F8AC0F496803C3BDF9203007A8BDF847 +:104490001C10132B0B44D8BFBDF91C209B1AADF880 +:1044A0001C20ADF82030FFF707F807A8FBF761FDE7 +:1044B00078BBBDF922C02644D9F80000BCF1140F26 +:1044C000BDF82030D0F800E0A8BF4FF0140CBDF8C4 +:1044D0001E20BDF81C101FFA8CFCCDF800C0DEF8C1 +:1044E00090B0D8478346ADF8220007A8FEF7CAFF70 +:1044F0002368204607A99B6C9847B6F8B000A0EB4C +:104500000B0000B2A6F8B00018B9B9B25046FFF7D8 +:104510007BFAB4F8ECB0BBF1000F3FF42CAF2B8862 +:104520000027B4F9AC2001339BB299B2FE008B4551 +:10453000A4D9264404EBC30EB6F8AC10B6F8B0000C +:10454000BEF9ACC00844BEF8B010614400B209B274 +:104550008842BFF672AF844562461F46B8BF024626 +:104560000133E2E70ED1BEF9B000BEF8B2E0B7F910 +:10457000B07073441BB29E42A8BF1E468742B8BFAC +:10458000E14657E78642A8BF064653E70AEB070015 +:104590002744B7F9B2B0BBF1130FDCBFB7F8AE6078 +:1045A0005E44CDE90221D8BF36B2FBF7E2FCDDE97B +:1045B000022100287FF41AAFB7F9AE201FFA8BFB57 +:1045C000ADF82200B61A2948B7F9AC10142EB7F985 +:1045D000B0300068A8BF1426ADF81C10ADF81E203E +:1045E00089B2ADF82030B6B2D0F800C092B25E45C4 +:1045F00094BF0096CDF800B09BB2DCF89060B04755 +:104600002368ADF8220007A99B6C20469847BDF8A7 +:104610002210B7F8B230B7F8AE205B1A0A441BB2CA +:10462000A7F8AE20A7F8B230002B7FF4DAAE1FFA5D +:1046300089F15046FFF7E8F9D3E62E88B4F8EC305C +:10464000B3427FF698AE04EBC60207AB52F8AC0F4C +:10465000516803C307A8FBF78CFC20B9236807A99E +:1046600020469B6C98470136B6B2E7E734E7012055 +:10467000034B00221A805A809A80DA80704700BF6C +:1046800078E701202DE9F04F9DB0064614468A4692 +:1046900003A81D4600F048FE3368304642F20B0B7B +:1046A000DB6C98473368074630461B6D98472A46AF +:1046B0000025214600903B462C46A946A84603A863 +:1046C00000F08DFE002302934FF6FF639C4202D060 +:1046D0005C4518BF254602AB3246514603A801F09F +:1046E00083F9044608B10A280AD1C14538BFC1463A +:1046F0004FF00008002CE5D148461DB0BDE8F08F12 +:10470000029A002ADED0577B294633687F009488BE +:104710005B6C07F48070977A0743304698473844BB +:1047200080441FFA88F8E5E708B50368DB68984716 +:1047300028B1437B807A5B0003F48073184308BD83 +:104740000EB4F0B59EB0054623AB05A853F8044B54 +:10475000039300F0E9FD2B682846DB6C98472B6833 +:10476000064628461B6D9847334621461EAE002458 +:104770000090039A05A800F032FE46F8684D2A46DC +:104780003346214605A801F02FF900B30A281AD0B4 +:10479000049FC7B1787B3B7AC100EA8801F480713D +:1047A000194343064FEA001048BFA1F5007300F417 +:1047B000807048BF19B2FB79034313445B1A1BB2E4 +:1047C0009C42B8BF1C4633462A460021DAE7A0B215 +:1047D0001EB0BDE8F04003B07047437A80881844AB +:1047E00080B2704703681B6B18470EB470B59DB05C +:1047F000044621AB03A853F8045B029300F094FD38 +:1048000023682046DB6C98472368064620461B6DCC +:1048100001249847334600902946029A03A800F0E5 +:10482000DEFD03A801F0ACF9A3B238B10A2803A851 +:1048300004BF01331CB201F0A3F9F5E718461DB01F +:10484000BDE8704003B070470EB4F0B59EB00446AA +:1048500023AB05A853F8045B039300F065FD2368C0 +:104860002046DB6C98472368064620461B6D984718 +:10487000334629460090039A05A800F0B0FD1EAD0E +:10488000002147F6FF76224605A845F8681D2B460D +:1048900001F0AAF8D8B10A2812D0049880B1477B59 +:1048A000E288FB0003F48071037A0B43790644BF6E +:1048B000A3F500731BB2D31A1BB29E42A8BF1E46BB +:1048C0002B462246002105A801F08EF8E2E730468B +:1048D0001EB0BDE8F04003B0704713B50368002474 +:1048E000B0F90810B0F90A20ADF8041069461B6948 +:1048F0000094ADF80620984702B010BD38B50B689B +:104900000C460546DB689847236820462946DB6A43 +:104910009847284638BD10B40A88848822440A8003 +:104920004A88C48822444A80406920B103685DF8FF +:10493000044BDB6A18475DF8044B704770B58288FA +:104940000C460B88054613440B804B88C2881344E1 +:104950004B80011D2046FBF7C9FAB4F90430002B47 +:104960000BDDB4F90630002B07DD686928B1036858 +:1049700021469B6ABDE87040184770BD70B58288BB +:104980000C460B88054613440B804B88C2881344A1 +:104990004B80011D2046FBF7A9FAB4F90430002B27 +:1049A00019DDB4F90630002B15DD686928B10368FC +:1049B00021461B69BDE870401847074B1B6804334C +:1049C0009D4208D1FEF710FF0368216862681B6CE6 +:1049D000BDE87040184770BD70E7012070B504460F +:1049E00016460D4601B992B1236820469B69984747 +:1049F000E288A18820463244294412B209B2DFF786 +:104A0000C2FC236820469B69BDE87040184770BD12 +:104A100010B5002304460846B1F908102380B0F908 +:104A20000A2063800368A1802146E280DB6A984700 +:104A3000204610BD30B58380BDF80C309DF818506D +:104A4000C3809DF81030416103729DF814300283D9 +:104A50004372837A65F306039DF81C5065F3C71310 +:104A600083729DF82030C3729DF824300373BDF823 +:104A70002830C381BDF82C300382014B036030BD68 +:104A8000D4C60308F0B54469BCB3A388028BCB1A23 +:104A900002F1FF3231D493420CDD0E2303FB0243BB +:104AA0009B885B1AD31A9A4227DB002BBCBF0223D8 +:104AB00092FBF3F300250E2695421EDC06FB034015 +:104AC0008788B9421AD00DD25A1E954215DC30F8AB +:104AD0000A3C5B1AD31A9A420FDB9D42ECDD531954 +:104AE0005B10E9E75D1CAA4207DB438ACB1A2B4423 +:104AF0009D4202DC9A42DFDAF1E70020F0BDF8B512 +:104B0000044617461E4611B900252846F8BD0A2955 +:104B1000FAD04FF6FF629142F6D042F20B02914278 +:104B2000F2D0FFF7AFFF054650B9236820461B6956 +:104B3000984701462046FFF7A5FF05460028E3D029 +:104B40002368294620465B6D9847386023682046D5 +:104B5000DB6B98473070D8E70346C8B1020C1204EB +:104B6000A2B90304102013F07F4F04BF1B020830CA +:104B700013F0704F04BF1B01043013F0404F04BF0B +:104B80009B000230002B04DB013070470020EAE775 +:104B9000202070472DE9F3470F4615461E46014673 +:104BA00000B127B90020306002B0BDE8F087FFF700 +:104BB000D3FF80B93846FFF7CFFF002805DD334625 +:104BC0002A463846FFF7E6FFEEE74FF0FF336FF077 +:104BD00000403360E8E737FA00F807FB01F305D13E +:104BE000B3FBF5F005FB10353560DDE7012301FA75 +:104BF00000FA2A4603FA00F03346BAFBF5F9013809 +:104C000008FB09F43840FFF7C5FF2A46074601AB09 +:104C100005FB19A14046FFF7BDFF019B32681A440E +:104C2000B2FBF5F31C4405FB13253C442044DBE7B1 +:104C300073B500281E46BABF40424FF0FF3401242E +:104C40000029BCBF49426442002AB6BF65422546DE +:104C500052428842C2BF03460846194601ABFFF7DD +:104C600099FF019B68435C43346002B070BD73B52B +:104C7000064601AB0D461446FFF7DAFF002E20DB97 +:104C800014BF01230023002D1EDB14BF01220022CC +:104C9000002C03FB02F21ADB14BF01230023534351 +:104CA000012B17D1002C019BB8BF6442002B04F1EB +:104CB0000104B8BF5B42B3EB640F00DB013002B00C +:104CC00070BD4FF0FF33DEE74FF0FF32E0E74FF00B +:104CD000FF33E4E70133F2D1019B002CB8BF6442FB +:104CE000002BB8BF5B42B3EB640FC8BF00F1FF30CD +:104CF000E5E70020704701207047022070477047A9 +:104D000070477047704710B504460C210FF0F3FA56 +:104D1000204610BD10B5044610210FF0ECFA2046D5 +:104D200010BD10B504460C210FF0E5FA204610BD69 +:104D300010B504463C210FF0DEFA204610BD0000FD +:104D400030B50D46016B87B0044601B301A8FFF7EB +:104D50005FFE2A89BDF804302879D21AA38EB5F9EE +:104D600006101A446B89BDF806508DF810005B1BC5 +:104D7000E58E206B2B44074DADF8121003A9039567 +:104D8000ADF81420ADF8163003689B6C984707B057 +:104D900030BD00BF5CC703082DE9F041036B8AB04A +:104DA00004460D4613B10B79002B44D004F10408DE +:104DB00003A84146FFF72CFE2B79BDF90C70BDF915 +:104DC0000E6083B904F136032A89E9884046921BB4 +:104DD0000193C91B04F1340312B2009309B204F128 +:104DE0003003FAF7A1FF216B29B305A8FFF710FEE6 +:104DF000BDF814202B7907A9BF1AEA88206B174445 +:104E0000A28E8DF820301744BDF81620B61A2A89D4 +:104E1000ADF822701644E28E1644084AADF82460BC +:104E200000260792ADF8266003685B6C98472B79E3 +:104E30000BB1C4E90C660AB0BDE8F08134C70308C1 +:104E40002DE9F0410C46016B88B0054600296DD074 +:104E50006846FFF7DDFDA98EE388BDF900800B44AD +:104E6000BDF902701BB2434531DBBDF804C0C44438 +:104E70000FFA8CFC63452ADAEA8E2689164436B28C +:104E8000BE4224DBBDF80600384400B286421EDA7A +:104E90006389194409B2414508DB614506DAA389F3 +:104EA0001A4412B2BA4201DB824210DB214B04A940 +:104EB000286B049302238DF814300023ADF81630CC +:104EC000ADF81830ADF81A3003685B6C9847291DAF +:104ED00002A8FFF79DFDBDF80830E088A3EB0808A5 +:104EE000BDF80A3021791FFA88F8DF1BB5F834C005 +:104EF000BBB24044228967896044A4891A44EE8E7B +:104F0000B8442344ADF816003244E04433440A4C1C +:104F1000286B8DF8141004A90494ADF81820ADF88E +:104F20001A80ADF81C300368DB6C984708B0BDE808 +:104F3000F08100BF34C7030848C7030837B50446EB +:104F400034F90C2F013212D10025B0F90810B0F954 +:104F50000A20036800956D46ADF80410ADF80620F0 +:104F600029469B6A984795E8030084E80300204699 +:104F700003B030BD13B5B0F920300446013309D178 +:104F800001466846FFF744FDBDF800302384BDF8B4 +:104F900002306384B4F9200002B010BD13B5B0F93B +:104FA00022300446013309D101466846FFF730FD3F +:104FB000BDF800302384BDF802306384B4F92200C8 +:104FC00002B010BD70B5174B0546174A012145F8D0 +:104FD000043B002342600446038143818381C381F3 +:104FE000038243828382C38203628384C38480F802 +:104FF0002830436380F8291080F83810C0E9063360 +:10500000C0E90B33094B2846B3F90060936B084A9B +:10501000B2F900109847636828463146DB6B984721 +:10502000204670BD70C7030828C303082AE7012083 +:1050300028E70120094B07B5B3F900200021084BF0 +:1050400000916946B3F90030ADF80420ADF80630A0 +:1050500003689B68984703B05DF804FB28E70120CC +:105060002AE701202DE9F04FB1F9043089B08046DC +:105070000C46002B15460EDDB1F90630002B0ADD7B +:105080002846FFF75BFF2146FEF7CFFAEB6928B908 +:105090001D46002BF4D109B0BDE8F08F04AE002B03 +:1050A00000F0B5802B68294602A8DB68984728469F +:1050B000FFF760FFBDF8087007442846FFF76EFF52 +:1050C000BDF80A30BDF90C203FB21844BDF90E30CE +:1050D0002146ADF81420ADF812003046ADF8163078 +:1050E000ADF81070FAF702FF2846FFF727FF06AB6E +:1050F000024696E8030083E8030011461846FAF7D3 +:10510000F5FEBDF91830B4F90010BDF91AA09942A6 +:10511000BDF91CB0BDF91E900BD1B4F90220524567 +:1051200007D1B4F904205A4503D1B4F906204A4501 +:105130006DD0BBF1000F65DDB9F1000F62DDB4F990 +:1051400002201FFA8AF05245009012DA0193009B68 +:10515000B4F90400ADF812209A1AADF810103146D7 +:10516000ADF814004046ADF81620EA69FFF77AFF63 +:10517000019BB4F900209FB29A420DDAADF81020DD +:10518000BA1AADF812A03146ADF814204046ADF879 +:105190001690EA69FFF766FF22885F44A388BFB2D2 +:1051A00013443AB29BB219B291420DDDDB1BADF84C +:1051B0001020ADF812A03146ADF814304046ADF8DD +:1051C0001690EA69FFF74EFFE28863881344009A5D +:1051D0004A449BB21FFA82F919B20FFA89F28A4245 +:1051E00015DAB4F90410A3EB0903B4F90000ADF823 +:1051F00014103146ADF81000ADF81220ADF816309D +:10520000EA6901E0EA6921464046FFF72BFF28469C +:10521000FFF794FE616802463346206803C31146D7 +:105220003046FAF763FEBDF91430002B7FF733AF39 +:10523000BDF91630002B7FF72EAF2846FFF79AFEF8 +:10524000BDF81030181AADF810002846FFF7A6FE7A +:10525000BDF812303146181AADF8120028462B68F6 +:105260009B68984717E770B5061D86B00C4600236B +:105270003146054602A80193FFF7CAFBBDF8083086 +:105280002288BDF80A10D21A6388B4F904005B1AA8 +:10529000B4F90610ADF8102001AAADF8140030469C +:1052A000ADF8161004A9ADF81230FAF7F7FE019A1E +:1052B0001AB121462846FFF7D5FE06B070BD02465A +:1052C00030B5044685B052F8080F0D466B4651685C +:1052D00003C329466846FAF709FE94F838302BB123 +:1052E00069462046FFF7BFFF05B030BD043402A871 +:1052F0002146FFF78DFBBDF80030BDF80820694658 +:1053000020469B1ABDF80A20ADF80030BDF80230E7 +:105310009B1AADF80230FAF788FEE5E70B460A68FB +:10532000011D92691846104738B50025022304462E +:105330000E220374294645610576C5830584C5861A +:105340000587C587A0F84050C0E90055C0E9115550 +:105350004C300FF033FB01232046A4F85A50A4F838 +:105360005C50A4F85E5084F8603084F86150DFF738 +:10537000ABFC204638BDC38E00EB4300408CB0FA36 +:1053800080F04009704730B500250124436813B907 +:10539000036813B34360037E43B143692BB11A889A +:1053A0001AB19A1C4261188830BD05764368198885 +:1053B00099B19A1C02294260F5D1037C012BE5D8F2 +:1053C0005A1C0233027450F823304361002BDDD0A5 +:1053D0001B88002BDAD00476D8E70020E4E70160D0 +:1053E000002130B441601568856052684364029BB7 +:1053F000C26001744161017601870184A0F8401008 +:10540000836430BCDFF760BC08B410B585B007AC6E +:1054100054F8043B0093134622460394FFF7DFFF42 +:1054200005B0BDE8104001B07047F0B5054608462C +:10543000F1B105F14C040B4601F10807224618684A +:10544000083353F8041C2646BB4203C63446F6D143 +:105450001868306010469B88B38095F859305B011E +:1054600003F4807195F852300B435B4285F8553058 +:10547000F0BD38B50C4611681046CD681946A847EE +:10548000002808BF204638BDF8B504461546084632 +:105490003AB9A4F85A20A4F85C20A4F85E20284663 +:1054A000F8BD92F80DC06FF4636793884FEA0C164D +:1054B00006F48072EE791643DA1991B2B7B21D295B +:1054C0007BD80122F6108A4074490A422ED112F488 +:1054D000607F72D004F14C022B4605F1080E154690 +:1054E0001868083353F8041C94467345ACE803006D +:1054F0006246F5D11868CCF800009B88ACF80430FF +:10550000B3B2B4F85C1094F85900CA1ACF1B20F05B +:10551000600092B2FB1A84F85420D21002F06002AC +:10552000024384F85920A4F85C30B8E7E38E04EB1A +:105530004303598C40F63363994210D10368DB680A +:105540009847417BCB0003F48072037A480643EA14 +:10555000020344BFA3F500731BB2A4F85A30B4F899 +:105560005A302A4605F1080C3B44334404F14C06FA +:105570009BB23546A4F85A301068083252F8041C21 +:105580003746624503C73E46F6D1106838609288B8 +:10559000BA8084F85430DB1094F8592003F060038B +:1055A00022F06002134394F85E2084F8593094F896 +:1055B00055309B1A84F8553071E723F0040240F609 +:1055C0001B618A4203D040F61D62934220D1013B09 +:1055D0000246294620469BB2FFF74BFF417BCB009A +:1055E000490603F48072037A43EA020344BFA3F539 +:1055F00000731BB2A4F85A306B7BAA7A5B0003F4E9 +:10560000807313435A1102EB9303A4F85E3035E024 +:105610004FEACC021CF0400F02F480712A7A42EA71 +:10562000010240F609611CBFA2F5007212B2A4F893 +:105630005A2023F010028A4203D040F613629342AC +:1056400029D16E7B2946760006F48072AE7A164325 +:1056500040F6136293420246204616BF03F1FF3321 +:1056600040F60C639BB2FFF704FF437B827A5B003A +:1056700003F480731343F61AA4F85E60697BCB00D1 +:1056800003F480722B7A13434A0644BFA3F50073D8 +:105690001BB2DB1B47E70023B7E700BF7900C03F21 +:1056A0002DE9F043044642B94FF40043A0F85A30C4 +:1056B000A0F85C30A4F85E3047E0517B93880D0180 +:1056C00005F48070D5790543042DCCBF4FEA950EC3 +:1056D0004FF0010EB3F5DD6F00F2AB8040F2E760F2 +:1056E000834216D240F25B60834259D840F2576041 +:1056F00083420ED2B3F5CA6F4AD240F24E60834263 +:1057000007D240F21A6083422AD021D8B3F5C26F83 +:105710005BD3B4F95A3013F5004F40F0D080B4F9A0 +:105720005C0010F5004F40F0CA80CB00490603F43E +:105730008070137A43EA000344BFA3F500731BB2E1 +:10574000A4F85A305D1BA4F85C501046BDE8F08305 +:1057500040F24B60834238D340F24C608342D8D948 +:10576000B4F95A00B4F95C3010F5004F40F0F38002 +:1057700013F5004F40F0EF80CB004E0603F480702D +:10578000137A43EA000344BFA3F500731BB2D9E7C1 +:1057900040F254608342E3D8B3F5CA6FE0D9B8E76A +:1057A00040F274608342B4D02DD840F25E608342F0 +:1057B00004D840F25D608342D2D3AAE740F25F6032 +:1057C0008342CDD0B3F5CE6FA3D0CB00490603F40E +:1057D0008070137A43EA000344BFA3F500731BB241 +:1057E0005D1BA4F85A30A4F85C50537B5B0103F4B2 +:1057F000807193790B4305215B0093FBF1F392F9E0 +:1058000009100B4456E740F2E260834209D840F2A7 +:10581000DF608342BFF47DAFA3F2D663052BD4D8FB +:1058200077E740F2E36083429AD040F2E46083423B +:10583000CAE7B3F50F6F2BD240F6ED0083428FD24B +:1058400040F6E500834216D840F6E4008342BFF4F8 +:1058500060AF40F2EC6083420AD840F2EB608342D2 +:10586000BFF457AF40F2EA6083423FF479AFACE750 +:1058700040F2ED60F8E740F6E800834202D840F6D7 +:10588000E70098E740F6E90083427FF442AF67E71C +:1058900040F6F60083423FF463AF02D840F6F200D0 +:1058A000F2E740F6FA00834205D840F6F900834259 +:1058B000FFF42FAF54E740F6FE008342AFE704F158 +:1058C0004C0C174602F1080866463868083757F846 +:1058D000041CE6464745AEE80300F446F5D13868B7 +:1058E000CEF80000B988AEF80410B4F95E0010F5E7 +:1058F000004F09D0517B9279490101F48071114325 +:10590000A0EB510084F8550013F5004FADB20DD057 +:105910002B4494F859209BB222F0600284F8543052 +:10592000DB1003F06003134384F8593094F85910E6 +:10593000CB004F0603F4807294F8543043EA02031C +:1059400044BFA3F500731BB2A4F85A305B1BA4F844 +:105950005C303246F9E604F14C0C174602F10809B6 +:1059600066463868083757F8041CE0464F45A8E8F3 +:105970000300C446F5D13868C8F80000B988A8F813 +:105980000410B4F95E0010F5004F09D0517B9279F4 +:10599000490101F480711143A0EB510084F85500D6 +:1059A00013F5004F0ED0A3EB0E0394F859209BB2D1 +:1059B00022F0600284F85430DB1003F060031343DC +:1059C00084F8593094F85910CB00480603F48072DB +:1059D00094F8543043EA020344BFA3F500731BB2AA +:1059E0005D1BA4F85C50B4E72DE9F0411E46C38E60 +:1059F0000446174600EB4303B3F82280DFF722F991 +:105A0000054618B930602846BDE8F0813B6801467C +:105A10003846DB689847A8F5C06302463060B3F5A6 +:105A2000407F13D2434639462046FFF739FE3060A7 +:105A3000336843B15A7B9B7A520002F4807213435D +:105A40000CBF0123002384F86130DCE7A5F5606317 +:105A50009BB27F2B04D839462046FFF715FDE6E7B9 +:105A600094F86130002BE3D040F602139D42DFD161 +:105A700001462046FFF7D9FCD9E72DE9F8431E4639 +:105A8000C38E0446174600EB4303B3F82280DFF7CA +:105A9000D9F8054618B930602846BDE8F8833B6858 +:105AA00001463846D3F80890DDE90823C847A8F531 +:105AB000C06302463060B3F5407F13D24346394697 +:105AC0002046FFF7EDFD3060336843B15A7B9B7A87 +:105AD000520002F4807213430CBF0123002384F8A8 +:105AE0006130D9E7A5F560639BB27F2B04D83946B6 +:105AF0002046FFF7C9FCE6E794F86130002BE3D0BD +:105B000040F602139D42DFD101462046FFF78DFC8F +:105B1000D9E710B50446B4F84010238FE1B10A2B41 +:105B20002DD0E28F013904EB4200408FA4F84010E1 +:105B3000511C89B201298ABF02F1FF32E187E28755 +:105B40005A1C2287E28E13449BB2092B88BF0A3B62 +:105B500004EB43035884DEE7238F0A2B0FD0204643 +:105B6000FFF711FC238F5A1C2287E28E13449BB24D +:105B7000092B88BF0A3B04EB43035884ECE710BDB4 +:105B800038B5C38E044600EB4302558C028F013AB0 +:105B900002875A1C92B2092A8ABF093BC286C38671 +:105BA000FFF7B7FF238C012B9CBF01332384E38BCA +:105BB0000BB90223E383E38B2846013B9BB2E383CB +:105BC00004EB4304658338BD8A422DE9F047C78E54 +:105BD00032D9058F541AB0F84080EE191FFA84FEAE +:105BE000B0F83EC0013EB4B2A4EB0E091FFA89F929 +:105BF000092C264688BFA4F10A06BCF1000F04F167 +:105C0000FF3408BF4FF0020C00EB4606A4B20CF1C3 +:105C1000FF3CB6F822A04C451FFA8CFC00EB4C066A +:105C2000A6F83AA0E4D1A5EB0E050EEB0804A0F807 +:105C30003EC00587A0F84040048F0A25641A394405 +:105C400089B20487092988BF0A39C1868AB1018FC0 +:105C5000013A013192B233F812400187C18E01B985 +:105C6000C586C18E013989B2C18600EB41014C84E1 +:105C7000ECE7BDE8F047FFF74CBF70B50025954253 +:105C800011D0C48B31F8026B1444013C641BA4B2E4 +:105C9000012C88BF023C00EB4404648BB44217D152 +:105CA0000135ADB2EBE7BDF8102000241344A2B2D9 +:105CB0009A420FDAC68E31F814500134324492B24F +:105CC000092A88BF0A3A00EB4202528CAA42EED05F +:105CD000002070BD0120FCE72DE9F74F0546164670 +:105CE0008C1C09884FEA113A34F81A30B34224D197 +:105CF000C1F30329C1F3031801F00F075246CDF891 +:105D000000804B4621462846FFF7B7FF834668B11F +:105D10000AEB09013A462846414404EB410349464F +:105D2000FFF752FF584603B0BDE8F08F07EB0A01BA +:105D30004944414404EB4101D2E74FF0000BF1E745 +:105D400070B51088984217D8481E32F82000984243 +:105D500012D300248C420FD26018401032F8206019 +:105D60008500B34202D9013084B2F3E701D281B297 +:105D7000F0E72A44508870BD0020FCE72DE9F0418F +:105D8000456C04460B266F887F08013E13D0E38ED6 +:105D90002A463946204604EB4303B3F822804346A3 +:105DA000FFF7CEFF38B105EB400142462046FFF732 +:105DB00093FF0028E9D1BDE8F081000070B54A6981 +:105DC0008D6A4B68541BCE6A00F006819B1B03D082 +:105DD0006343102293FBF2F30C688A69651B00F0A1 +:105DE000FD80921B03D06A43102492FBF4F29B1AAD +:105DF0009FED894AB7EE007A0A4607EE903A00F125 +:105E00000C040346F8EEE77A67EE847A87EE273AC9 +:105E1000B1EE436AD2ED027A1432C7EE276AE3ECA0 +:105E2000016A9C4252ED027A67EEA67AC3ED027ACD +:105E300052ED017A67EEA67AC3ED057AEAD1CA6A15 +:105E40008B69D0ED024A9B1AD0ED003AD0ED016A81 +:105E500007EE903A4B6876EEE46A90ED055A9B1A8D +:105E6000F8EEE77A73EEE44A90ED032A07EE103A73 +:105E7000D0ED045A67EE847A90ED071AB8EEC77A2F +:105E8000D0ED062A75EEC55A64EEE77A27EE047A5D +:105E900032EE455AE6EE877A67EE837AC0ED097AEC +:105EA0008C6A4A69131B07EE103A0B68B8EEC77A82 +:105EB0001B1B27EE047A64EEC74A07EE103AB8EED1 +:105EC000C77A27EE047AE6EE874A64EE864AC0ED8A +:105ED0000A4ACA6A8B699B1A06EE903A4B689B1A6B +:105EE000F8EEE66A07EE103A66EE846AB8EEC77A14 +:105EF00065EE666A27EE047AE5EE876A66EE836AE7 +:105F0000C0ED0B6A8C6A4A69131B07EE103A0B68E6 +:105F1000B8EEC77A1B1B27EE047A25EE475A07EE28 +:105F2000103AB8EEC77A27EE047AA5EE875AD0ED7C +:105F3000085A31EE651A72EEE55A25EE065A80EDE2 +:105F40000C5ACA6A8B699B1A07EE103A4B689B1A67 +:105F5000B8EEC77A01EE903A27EE047AF8EEE11A2D +:105F600025EEC77A61EE841AA1EE217A27EE037A34 +:105F700080ED0D7A8C6A4A69131B03EE103A0B68A8 +:105F8000B8EEC33A1B1B23EE043A65EEC35A03EE88 +:105F9000103AB8EEC33A23EE044AE1EE045A25EE75 +:105FA000866A62EE675A80ED0E6AE3EEA65AF5EE57 +:105FB000C05AF1EE10FA13DD4FF4004362EEE77AB7 +:105FC000C363E3EE877AF5EEC07AF1EE10FA15DDE1 +:105FD0004FF40043036470BD2346FDE62A4606E7FE +:105FE00002D547F6FF73E9E722EE642AA3EE852A7D +:105FF000B5EEC02AF1EE10FADEDAF2E702D547F686 +:10600000FF73E7E762EEE44AE3EE864AF5EEC04A44 +:10601000F1EE10FADCDAF2E70000803D2DE9F047FE +:1060200014275F4302EB070CDCF8045015F10F0E48 +:1060300000F1A2804FEA2E1E089C1426C0F814E03E +:10604000664302EB0608D8F8045015F10F0400F17E +:106050009F802411A4EB0E048461002C00F08A8040 +:10606000DCF80490D8F804409559A4EB0908D459F9 +:10607000A5EB040A4FEA08164FEA0A150EFB05FEC7 +:106080000AFB19EE08FB04E4013CA41900F18C8022 +:1060900094FBF6FE06FB1E44C0F800E00461002DF0 +:1060A000C0F2958095FBF6F406FB145544608560BC +:1060B000C66001EB8303DCF804404569D259C4EBA8 +:1060C0000514DFED4B6A91ED0A6A07EE104A046889 +:1060D000C2EB0412B8EEC77A07EE902A27EE267AB2 +:1060E000F8EEE77A67EEA67AD3ED006AE6EE076A85 +:1060F00091ED096AE6EE276AC0ED076AD0ED016A04 +:10610000D1ED095AF8EEE66A91ED0A6AA6EEA56AA3 +:1061100080ED086A4A6A4262D1ED0C5A93ED036A37 +:10612000A5EE876AD1ED0B5AA5EEA76A80ED0A6A43 +:10613000D1ED0B5A91ED0C6AA6EEA56A80ED0B6AC3 +:10614000CA6A026393ED066AD1ED0E5AA5EE876A1C +:10615000B0EE467A91ED0D6AA6EE277A80ED0D7AC3 +:1061600091ED0D7AD1ED0E7AE6EE877AC0ED0E7ADA +:106170004B6BC363BDE8F0871024C5F101059EFB9E +:10618000F4FE15F00F0518BF0125AEEB050E53E721 +:106190004FF01009C5F1010594FBF9F415F00F0556 +:1061A00018BF0125641B55E7644294FBF6FECEF14F +:1061B000000806FB1E44C0F800800461002C3FF478 +:1061C0006EAF6FEA0E0E341BC0F800E066E76D425A +:1061D00095FBF6F4C4F1000E06FB1455C0F804E07C +:1061E0008560002D3FF464AFE443751B44605EE7B7 +:1061F0000000803D024648B1002398B2013302EB13 +:10620000430131F8021C0029F7D17047704730B5BF +:10621000044659B148B1002398B2824205D9CD5CF9 +:1062200024F813500133002DF6D130BD0846FCE7A9 +:10623000F0B58BB08C46044600211F2601AF8DF8C7 +:106240002410711E94FBF3FE03FB1E4484EAE475E4 +:10625000A5EBE475ECB2092DD4BF30345734E4B269 +:10626000BC55744674B9002805DA0AAB19442D23CD +:1062700001F8243CB11E013160463944FFF7C7FFE5 +:106280000BB0F0BD0E46DCE7F0B58C468BB00021BC +:1062900001AE8DF824101F21B0FBF3F703FB1705A7 +:1062A0003846ECB2092DD4BF30345734E4B28C55A3 +:1062B0004C1E2FB931446046FFF7A9FF0BB0F0BD6B +:1062C0002146E9E710B431B19C1E222C03D85DF8B9 +:1062D000044BFFF7ADBF5DF8044B70472DE9F04F5D +:1062E00085B09146026888461C469DF840109DF88E +:1062F000483083461046039102930192FFF77AFFDC +:10630000B8F1000F0CBF844600F1010CB9F1690F20 +:106310009DF838600F9F1FFA8CFC139DDDF854A088 +:106320000399DDE9012341D034D8B9F1630F59D085 +:10633000B9F1640F3AD0B9F1580F34D00024BDF848 +:106340005020013A69B111998C4509DAA1EB0C0191 +:1063500089B233B9002E51D000284FD00C44A4B2DA +:1063600000212B68934207DAB8F1000F04D02AF815 +:1063700013802B6801332B603027002C4ED02E6801 +:10638000013CB242A4B249DD2AF816702B680133F1 +:106390002B60F2E7B9F1730F1DD0B9F1780F02D07D +:1063A000B9F16F0FC9E784464FF00008002CC6D042 +:1063B00047B9012806D11488302C02BF0232384672 +:1063C000CBF80020BC4514DABFB2A7EB0C04BC46E6 +:1063D000A4B20026B3E784466CB1B84200DDB8B27F +:1063E000002403E04FF0010C002460462646A0463E +:1063F000A5E70024EDE72646A046A0E70029B0D097 +:1064000020272E680029ACD00139964289B2A7DA3C +:106410002AF816702B6801332B60F2E788B12B68DD +:1064200001389A4280B20CDDDBF800309C1CCBF8BE +:1064300000401C882B682AF813402B6801332B601E +:10644000ECE7202651B128680139824289B205DD86 +:106450002AF810602B6801332B60F3E705B0BDE824 +:10646000F08F2DE9F0430024DDE9078CDDE909E632 +:10647000DDE90B7514801C7088F800408CF8004032 +:106480008EF800403C700468A4B124884FF00109E4 +:1064900014B32B2C01D0202C10D1148004680CB123 +:1064A000023404600C680CB101340C6004687CB1E7 +:1064B0002488EDE70C687CB12478E7E72D2C02D125 +:1064C00083F80090EAE7232C07D188F80090E5E7ED +:1064D0000C680CB12478DBE70024A4F13003092B0D +:1064E00001D92A2C22D10123302C8EF800300DD175 +:1064F0008CF8003003680BB1023303600B680BB1FA +:1065000001330B600368002B2FD01C882A2C35D157 +:106510004FF0FF33336003680BB1023303600B6845 +:106520000BB101330B6003681BB31C882E2C1AD1EE +:1065300001233B7003680BB1023303600B680BB19E +:1065400001330B600368002B36D01B882A2B37D110 +:106550004FF0FF332B6003680BB1023303600B680D +:106560000BB101330B60BDE8F0830C6834B12478C3 +:10657000CCE70B68002BF6D01C78D7E700230A2263 +:106580003360A4F1300C1FFA8CF3092BCED833689A +:1065900002FB03C3336003680BB1023303600B6873 +:1065A0000BB101330B6003680BB11C88E9E70C6881 +:1065B000002CE6D02478E4E70B680BB11B78C5E724 +:1065C00000220A242A60303B2A689EB2092E13D882 +:1065D00004FB02332B6003680BB1023303600B68CA +:1065E0000BB101330B6003680BB11B88EBE70B6841 +:1065F000002BE8D01B78E6E7062AA8BF06222A600F +:10660000B1E72DE9F04FA3B00026074688460DF10B +:10661000440931462C9C48460D96CDE90832422269 +:106620000EF0CCF95FB108F1FF3A099A0D9B52B117 +:1066300012880AB19A452EDC002227F8132038462A +:1066400023B0BDE8F08F089A002AF5D01278F0E761 +:10665000002DEAD02A7842B1252A01D09A4508DCDB +:10666000BBF1000F21D1002DDFD02A784FF0000BB5 +:106670001DE0BBF1000F77D0BBF8002027F81320F6 +:10668000BBF1000F02D00BF1020209920DB10135EE +:10669000089501330D930D9BDDE9085BBBF1000FFD +:1066A000D6D0BBF80020002AD6D1BBF80020002AA3 +:1066B000BBD09A45B9DDADF832608DF82D608DF80C +:1066C0002E608DF82F608DF830600E968DF8316059 +:1066D0000F96BBF1000F02D00BF1020309930DB12D +:1066E0006B1C08930FAB0DF1320208A909A80593A2 +:1066F0000DF1310304930EAB03930CAB02930DF138 +:106700002F0301930DF12E0300930DF12D03FFF7DD +:10671000A8FE0E9B002BBFBF2368043423EAE3735B +:106720000E930F9B002BBEBF2368043423EAE37350 +:10673000DDE90821B8BF0F93D9B10B88692B1FD0B1 +:106740002FD8582B1CD018D8252B34D00D9BCDE931 +:10675000085BBBF1000F00F0B780BBF8005027F8D2 +:10676000135001330D9329E00DB12A7886E72A46AC +:1067700084E7002AEAD01378E0E7633B012BE5D8F1 +:10678000CDF8409029B30B88692B63D025D8632BB3 +:1067900038D0642B5ED0582B7AD0ADF844602546B3 +:1067A00036E0732BECD002D86F2BCFD1E8E7752BF6 +:1067B000E6D0782BF9E70D9A27F81230099B0BB138 +:1067C00002330993089B002B3FF42FAF013308934A +:1067D0002BE7002AE1D01378D6E7732B36D007D801 +:1067E0006F2BDAD10D9A251D0823A8EB020249E090 +:1067F000752B42D0782BD0D10D9A251D1023A8EBF4 +:1068000002023FE02368251DADF84660ADF8443034 +:10681000099BBDF83210002B51D01A880DA89DF8A5 +:1068200031302C4605909DF82D0004900E98039071 +:106830009DF8300002900F9801909DF82F00CDE94F +:106840000687009010A8FFF749FDB7E7251D2368CC +:106850001093DDE70D9A0A2349462068A8EB02024F +:10686000251D92B2FFF7E4FCBDF844302D2BCFD1AB +:10687000ADF83230109B0233EAE70D9A251D0A234A +:10688000A8EB020292B249462068FFF7FDFCBFE781 +:106890000D9A102349462068A8EB0202251D92B2EA +:1068A000FFF7F2FC0DF1420232F8023F002BAFD0AD +:1068B000A3F161011929F7D8203B1380F4E7089A66 +:1068C000002AABD01278A9E7002D3FF448AF2D780D +:1068D00045E707B5009313460022FFF792FE03B089 +:1068E0005DF804FB0CB407B504AB53F8042B01931B +:1068F000FFF7EFFF03B05DF804EB02B07047000054 +:10690000014B1860704700BF94E70120064B1A88BE +:10691000824207D8054B1B8813449842ACBF002025 +:106920000120704700207047B4E70120B8E701203C +:1069300008B50146FFF7EAFF18B1024B1B6853F890 +:10694000210008BD98E70120F0B5244C2368002BF6 +:1069500042D0234A234D1188B5F800C02248614433 +:106960004A1C8F0022F00102DE19120406601F4E3D +:10697000120C07EB4207DA1932600E2202FB0CF20E +:10698000033222F003023A44194F13443B600023C0 +:10699000184F9C463B80184F3F68BA1A174F3A6011 +:1069A0004FF6FF77164A13808B420DD12D880023B6 +:1069B00030680E249D420FD904FB03020133117B82 +:1069C0006FF345111173F5E7226842F823C002689E +:1069D00022F813700133E7E7F0BD00BF98E701200C +:1069E000B4E70120B8E70120ACE701209CE70120D3 +:1069F000A4E70120B6E70120A0E70120B0E70120CD +:106A0000A8E70120064B1B6843B939B1054B1A8032 +:106A1000054B1960054B1860FFF796BF704700BF24 +:106A2000A4E70120B8E70120A0E7012098E70120B2 +:106A300070B4074C05461046039A266836B925609F +:106A4000044C2180194670BCFFF7DCBF70BC704756 +:106A5000BCE70120B4E70120124A03881288934260 +:106A600007D2114A1421126801FB0323B3F908006D +:106A700070470E49098811448B4204DA9B1A0C4A6C +:106A80000E211268F0E74FF6FE72934208D1094BCF +:106A90001B781BB9084BB3F900007047074BFAE7A6 +:106AA00000207047B4E70120BCE70120B8E70120CF +:106AB0009CE701202CE701202EE7012030E7012090 +:106AC000124A03881288934207D2114A142112688D +:106AD00001FB0323B3F90A0070470E4909881144EA +:106AE0008B4204DA9B1A0C4A0E211268F0E74FF62B +:106AF000FE72934208D1094B1B781BB9084BB3F9BE +:106B000000007047074BFAE700207047B4E7012008 +:106B1000BCE70120B8E701209CE701202CE7012019 +:106B200030E701202EE701201F4A10B50B8812889C +:106B3000934213D21D4A1421126801FB0323B3F9B7 +:106B40000C40B3F90E101A8A5B8AC2F30C0204805F +:106B5000C3F30C0341808280C3800EE0144909888E +:106B600011448B420ADA9B1A124A0E21126801FB69 +:106B700003231A6802605A68426010BD4FF6FE7225 +:106B800093420BD10C4BB3F900100C4B8180B3F93D +:106B900000200023C28003804380EEE700230380AF +:106BA00043808380D8E700BFB4E70120BCE7012021 +:106BB000B8E701209CE7012028E701202AE701200F +:106BC000174A03881288934213D2164A1421126876 +:106BD00001FB03231A8A1989C2F30C028A421DDBC6 +:106BE000588AC0F30C005B899842ACBF002001209A +:106BF00070470D49098811448B420DDA9B1A0B4AE4 +:106C00000E21126801FB0323B3F904101A89914283 +:106C100004DBB3F90600E6E7002070470120704767 +:106C2000B4E70120BCE70120B8E701209CE7012080 +:106C3000124A038811888B420BD2114A126812B192 +:106C400052F82300C0B90F4A116814225343C858A0 +:106C500070470D4A12880A44934204DA084A1268BF +:106C600052F8230070474FF6FE72934203D1074B50 +:106C70001B68586C70470020704700BFB4E70120C4 +:106C800098E70120BCE70120B8E7012034E70120A4 +:106C9000244B02881888824221D2234B196814237E +:106CA00003FB0213586800283AD0204909680029DC +:106CB00036D051F82210002932D01A895889504311 +:106CC0005A7CDB7C5209C3F3421343EAC2030B2B09 +:106CD00018BF4000033020F0030008447047144BF5 +:106CE0001B8803449A421ADA124B101A0E211B68B1 +:106CF00001FB0030037B03F01F030B2B0BD1038937 +:106D000040895843094B0330196820F0030351F8B8 +:106D10002200184470470D2B01D10D307047002020 +:106D2000704700BFB4E70120BCE7012098E70120CD +:106D3000B8E701209CE70120174A10B503881288A4 +:106D400093420CD2154A1421126801FB0323587C8C +:106D50004209D87CC0F3421040EAC20010BD10497D +:106D6000098811448B4209DA9B1A0E4A0E211268D7 +:106D700001FB0323187B00F01F00EFE74FF6FE72C4 +:106D8000934206D1DDF7B2F90368BDE81040DB6A33 +:106D900018470020E2E700BFB4E70120BCE701206C +:106DA000B8E701209CE701201020704700207047C1 +:106DB000024B1888400080B2704700BF2EE70120C8 +:106DC000FF2B50D00B2A4AD00ED8032A3FD004D82C +:106DD000012A3ED03FD9806B7047092A3FD03CD86A +:106DE000082A3AD0002070472F2A24D00DD82D2A07 +:106DF00014D026D82C2AF5D14B681B78012B18D03B +:106E000023D3022BEED180687047312A04D028D3D7 +:106E1000322A26D0332AE5D1006F70474B681B78A1 +:106E2000012B04D00BD3022BDCD100697047006A20 +:106E30007047806970474B681B78002BD2D1006B7C +:106E400070474B681B78002BCCD1806A7047806CF0 +:106E50007047006D7047006C7047806D7047006E22 +:106E60007047806E70470B2A49D00ED8032A40D055 +:106E700004D8012A3FD040D9C06B7047092A3ED0C0 +:106E800001D8082AAED1C06D70472F2A24D00DD862 +:106E90002D2A14D026D82C2AA4D14B681B78012B7C +:106EA00018D024D3022B9DD1C0687047312A04D05A +:106EB00027D3322A25D0332A94D1406F70474B68AC +:106EC0001B78012B04D00BD3022B8BD14069704768 +:106ED000406A7047C06970474B681B78002B81D1AE +:106EE000406B70474B681B78002B7FF47BAFC06A08 +:106EF0007047C06C7047406D7047406C7047406E83 +:106F00007047C06E70472DE9F04F87B01598059215 +:106F10009DF86420019102924168DDF860E0DDE9AE +:106F2000162401FB0424026802EB4404DEF800206E +:106F30000392DEF8042004320492029AD643F6B299 +:106F4000019A002A03DC059A002A40F32981119A4C +:106F5000BEF908C002F50041129ABEF90C7002F5A4 +:106F60000042002B0EDD081405D4604503DA10142E +:106F700001D4B84207DB1398013B02340144149852 +:106F80000244EEE771D0581E139D05FB00152D1429 +:106F90005FD465455DDA149D05FB0020001458D4CC +:106FA000B84256DA9946A246BDF808B0B9F1000FCA +:106FB00057DD4FEA224CBEF9087003980D1409F111 +:106FC000FF3907FB0C00405D049D35F81000BAF84E +:106FD00000504FEA202C2F124FEAE5080CF0F80C75 +:106FE00007F0F807ED0008F0FC0817FB06F7EDB214 +:106FF00018FB06F80CFB0B7CC71015FB06F5C00050 +:1070000007F0FC071FFA8CFCC0B207FB0B8700FBE4 +:107010000B500CF10105BFB280B205EB1C2C07F13F +:107020000108451C08EB17280CF4784C05EB1025DB +:1070300013984FEA5818C5F3C425014408F4FC68B6 +:10704000149845EA0C0C02444CEA080C2AF802CBCE +:10705000ACE74FF00008BDF808A003EB08000028DB +:1070600041DC23EAE37304EB4304019B002B40F370 +:107070009780B7EE007A109B30EE040A70EEA40AF7 +:10708000F0EE626AC7EE007A31EE051AFEEEC86ACB +:10709000CDED116AF0EE436AFEEEC86ACDED126ADC +:1070A00020EEA77A61EE277A77EE622A37EEC33AAE +:1070B000FEEEC82ABEEEC83A12EE902AF0EE472A3B +:1070C00092FBF3F313EE102A1393109BB0EE673A82 +:1070D00092FBF3F31493019B059A013B0193109BE0 +:1070E00008BF13462CE70F1453D4DEF80850BD42F6 +:1070F0004FDD5FEA224C4CD4DEF80C00604548DDE1 +:1071000003982DB20CFB0505E85D049D35F81000D1 +:107110006FF0010505FB08FB4FEA202C34F80B50FB +:107120000CF0F80C2F124FEAE50907F0F807ED0014 +:1071300009F0FC0917FB06F7EDB219FB06F90CFB89 +:107140000A7CC71015FB06F5C00007F0FC071FFA04 +:107150008CFCC0B207FB0A9700FB0A500CF101053A +:10716000BFB280B205EB1C2C07F10109451C09EBED +:1071700017290CF4784C05EB10254FEA5919C5F383 +:10718000C42509F4FC6945EA0C0C4CEA090C24F806 +:107190000BC0139808F1FF380144149802445CE7CF +:1071A00007B0BDE8F08F2DE9F04F85B09346F7EEBC +:1071B000006A139E169D70680091DDE91424DDE9D4 +:1071C00011EC00FB0424326802EB44042A680192AB +:1071D0006A6804320292009A002A03DCBBF1000FB5 +:1071E00040F3A0800F9AB5F9089002F50040109A7C +:1071F000B5F90C8002F50042002B0CDD061405D415 +:107200004E4503DA161401D4464505DB704462444A +:10721000013B0234F0E70FD05E1E0EFB06073F1461 +:1072200041D504EB430698460396B8F1000F59DCAC +:1072300023EAE37304EB4304009B002B72DD30EE82 +:10724000040A0E9B70EEA40AB0EE626AC6EE807A63 +:1072500031EE051ABEEEC86A8DED0F6AB0EE436AD4 +:10726000BEEEC86A8DED106A20EEA77A61EE277A2D +:1072700077EE622A37EEC33AFEEEC82ABEEEC83A6F +:1072800012EE902AF0EE472A92FBF3FE13EE102A3C +:10729000B0EE673A92FBF3FC009B013B00930E9B20 +:1072A00008BF5B4697E74F45BBDA0CFB0626361452 +:1072B000B7D44645B5DA1E46A046002EB8DD1714F1 +:1072C000B5F908A001994FEA2049624470440AFBCD +:1072D00007170299013E17F8097031F8177028F85E +:1072E000027BEAE75FEA204917D4AE684E4514DD19 +:1072F0005FEA224A11D4EF6857450EDD019F36B28E +:107300006FF001010AFB0676029F16F8096037F854 +:10731000167001FB08F603998F537044624408F11C +:10732000FF3882E705B0BDE8F08F2DE9F04F87B058 +:10733000159C05929DF86420029103926168DDF826 +:1073400060C0DDE9162001FB0020226802EB40024C +:107350000092DCF800200492DCF804200432019250 +:10736000039AD543EDB2029A002A03DC059A002A5B +:1073700040F32C81119ABCF908E002F50041129A01 +:10738000BCF90C7002F50042002B10DD0C1405D482 +:10739000744503DA141401D4BC4209DB139C013B8D +:1073A00000982144149C023022440090ECE771D0F4 +:1073B0005C1E139E06FB041636145DD476455BDA1C +:1073C000149E06FB0424241456D4BC4254DA984676 +:1073D000DDF80090BDF80CA0B8F1000F54DDBCF949 +:1073E0000870141404980E1408F1FF3807FB040405 +:1073F000019814F806E0B9F800400EEB4E0E271283 +:1074000000EB0E0B10F80EE007F0F80713989BF84E +:1074100002609BF801B0014416FB0AF614981BFBAE +:107420000AFB07FB0567E610E400024406F0FC06D1 +:10743000BFB2E4B206FB05B614FB05F4B6B20EFB10 +:107440000A4E7C1C06F1010B1FFA8EFE04EB172777 +:107450000EF101040BEB162B07F4784704EB1E2406 +:107460004FEA5B1BC4F3C4240BF4FC6B274347EACD +:107470000B0729F8027BAFE74FF0000EBDF80C9028 +:1074800003EB0E04002C43DC009A23EAE37302EBC7 +:1074900043030093029B002B40F39880B7EE007AE1 +:1074A000109B30EE040A70EEA40AF0EE626AC7EE9A +:1074B000007A31EE051AFEEEC86ACDED116AF0EEE3 +:1074C000436AFEEEC86ACDED126A20EEA77A61EE3D +:1074D000277A77EE622A37EEC33AFEEEC82ABEEE6E +:1074E000C83A12EE902AF0EE472A92FBF3F313EE1D +:1074F000102A1393109BB0EE673A92FBF3F31493A8 +:10750000029B059A013B0293109B08BF13462AE792 +:107510000F1454D4DCF80860BE4250DD5FEA224804 +:107520004DD4DCF80C40444549DD049C36B26FF084 +:10753000010008FB0646019C00FB0EFA009816F8B5 +:10754000078008EB480804EB080B30F80A40019864 +:107550009BF8026027129BF801B016FB09F607F0B2 +:10756000F80710F808801BFB09FB07FB0567E6100E +:10757000E400009806F0FC06BFB2E4B206FB05B6D4 +:1075800014FB05F4B6B208FB09487C1C06F1010B9C +:107590001FFA88F804EB172708F101040BEB162BF0 +:1075A00007F4784704EB18244FEA5B1BC4F3C424A8 +:1075B0000BF4FC6B274347EA0B0720F80A7013987B +:1075C0000EF1FF3E01441498024459E707B0BDE8AC +:1075D000F08F00002DE9F04F85B0F7EE006A139EA2 +:1075E000169D039270686F68DDF844C004370191FE +:1075F000DDE9142400FB0424326802EB44042A6809 +:107600000292019A002A03DC039A002A40F3CC80FC +:107610000F9AB5F9089002F50040109AB5F90C8060 +:1076200002F50042002B0DDD061405D44E4503DAA9 +:10763000161401D4464506DB129E6044013B023419 +:107640003244EFE70FD05E1E0CFB060E5FEA2E4EB3 +:1076500043D5984604EB430AB8F1000F71DC23EAE6 +:10766000E37304EB4304019B002B40F39D8030EE59 +:10767000040A0E9B70EEA40AB0EE626AC6EE807A2F +:1076800031EE051ABEEEC86A8DED0F6AB0EE436AA0 +:10769000BEEEC86A8DED106A20EEA77A61EE277AF9 +:1076A00077EE622A37EEC33AFEEEC82ABEEEC83A3B +:1076B00012EE902AF0EE472A92FBF3FC13EE102A0A +:1076C000B0EE673A92FBF3F31293019B039A013BEE +:1076D00001930E9B08BF134693E7CE45B9DA129982 +:1076E00001FB06263614B4D44645B2DA9846A246C3 +:1076F000B8F1000FB3DDB5F90890161402994FEAFE +:10770000204E08F1FF38604409FB0616284916F898 +:107710000EE00EEB4E0E07EB0E0B9BF801609BF894 +:107720000290F60001EA0929129906F4FC660A445F +:1077300049EA060617F80E9046EAD9062AF8026BBF +:10774000D6E75FEA204929D4AE684E4526DD5FEAD8 +:10775000224B23D4E968594520DD0FFA86FE0299B1 +:107760000BFB0E1E6FF001011EF809E001FB08F98A +:10777000A1F2FE710EEB4E0E07EB0E0696F802B06C +:10778000767801EA0B2BF60006F4FC664BEA060657 +:1077900017F80EB046EADB062AF809601299604431 +:1077A00008F1FF380A4457E705B0BDE8F08F00BF85 +:1077B00000F8FFFF2DE9F04F87B08B46F7EE006A27 +:1077C000159804929DF8642041680592DDF860C028 +:1077D000DDE9162401FB0424026802EB4404DCF812 +:1077E00000200192DCF8042004320292BBF1000F69 +:1077F00003DC049A002A40F33881119ABCF908701E +:1078000002F50040129ABCF90C6002F50041002B11 +:107810000EDD021405D4BA4203DA0A1401D4B242CE +:1078200007DB139A013B02341044149A1144EEE72B +:1078300019D05A1E139D05FB02052D1409D4BD4213 +:1078400007DA149D05FB0212121402D4B242C0F2F0 +:10785000AC804FF0000E03EB0E02002A3EDC23EA60 +:10786000E37304EB4304BBF1000F40F3FE8030EE02 +:10787000040A109B70EEA40ABBF1010BB0EE626A21 +:10788000C6EE807A31EE051ABEEEC86A8DED116A39 +:10789000B0EE436ABEEEC86A8DED126A20EEA77A9A +:1078A00061EE277A77EE622A37EEC33AFEEEC82AF7 +:1078B000BEEEC83A12EE902AF0EE472A92FBF3F39E +:1078C00013EE102A1393109BB0EE673A92FBF3F37A +:1078D000049A1493109B08BF134687E706145DD4DF +:1078E000DCF80850B54259DD0F1457D4DCF80C20F1 +:1078F000BA4253DD019A2DB207FB0525AA5D029D10 +:1079000055F822502E0E49D06FF00102C5F3072A18 +:1079100002FB0EF234F802800392059A4FEA282700 +:10792000564307F0F807721C02EB2622C5F3074600 +:10793000EDB212121FFA82F9D24316FB09F6D2B247 +:1079400015FB09F507FB02674FEAE8061AFB09FA7F +:107950004FEAC808BFB206F0FC065FFA88F806FBDB +:1079600002A608FB02557A1CB6B2ADB202EB17278D +:10797000039A05F1010A07F478470AEB152ACAF3BE +:10798000C42A4AEA070706F1010A0AEB162A4FEA57 +:107990005A1A0AF4FC6A47EA0A07A752139A0EF128 +:1079A000FF3E1044149A114455E74FF00008A3EB32 +:1079B0000802002A7FF753AFBCF908600A14019F40 +:1079C000051406FB0272525D029D55F822502E0EE0 +:1079D00044D0059AC5F3072A34F818E056434FEA15 +:1079E0002E27721C07F0F80702EB2622C5F3074684 +:1079F000EDB212121FFA82F9D24316FB09F6D2B287 +:107A000015FB09F507FB02674FEAEE061AFB09FAB8 +:107A10004FEACE0EBFB206F0FC065FFA8EFE06FB02 +:107A200002A60EFB02557A1CB6B2ADB202EB1727C6 +:107A300005F1010A07F478470AEB152ACAF3C42AAC +:107A40004AEA070706F1010A0AEB162A4FEA5A1A10 +:107A50000AF4FC6A47EA0A0724F81870139A08F136 +:107A600001081044149A1144A1E707B0BDE8F08F53 +:107A70002DE9F04F85B08B46F7EE006A139803921C +:107A80004168DDF858E0DDE9142401FB04240268B4 +:107A900002EB4404DEF800200092DEF804200432F9 +:107AA0000192BBF1000F03DC039A002A40F35381DB +:107AB0000F9ABEF9087002F50041109ABEF90C60E9 +:107AC00002F50042002B0EDD081405D4B84203DA9B +:107AD000101401D4B04207DB1198013B0234014479 +:107AE00012980244EEE717D0581E119D05FB0015B1 +:107AF0002D1409D4BD4207DA129D05FB00200014A5 +:107B000002D4B042C0F2BC800026981900283EDCA6 +:107B100023EAE37304EB4304BBF1000F40F31B8142 +:107B200030EE040A0E9B70EEA40ABBF1010BB0EE1E +:107B3000626AC6EE807A31EE051ABEEEC86A8DED35 +:107B40000F6AB0EE436ABEEEC86A8DED106A20EE91 +:107B5000A77A61EE277A77EE622A37EEC33AFEEE15 +:107B6000C82ABEEEC83A12EE902AF0EE472A92FBDF +:107B7000F3F313EE102A11930E9BB0EE673A92FBCB +:107B8000F3F3039A12930E9B08BF134689E70F1471 +:107B900026D4DEF80850BD4222DD5FEA224C1FD415 +:107BA000DEF80C0060451BDD00982DB20CFB0505CE +:107BB000E85D019D55F82000070EFF2F16D16FF0EC +:107BC000010505FB06F7A5F2FE7505EA102C45092F +:107BD000C0F3C40005F4FC654CEA05050543E55314 +:107BE0001198013E0144129802448EE7FDB2002F25 +:107BF000F6D06FF001071FFA85F9ED43C0F3072AAD +:107C000077431AFB09FAEDB234F807800297C0F304 +:107C100007474FEA282C17FB09F7C0B20CF0F80C05 +:107C200010FB09F00CFB057C4FEAE8074FEAC80897 +:107C30001FFA8CFC07F0FC075FFA88F807FB05A722 +:107C400008FB05000CF10105BFB280B205EB1C2C4E +:107C500000F1010A0CF4784C0AEB102A0298CAF3DE +:107C6000C42A4AEA0C0C07F1010A0AEB172A4FEA68 +:107C70005A1A0AF4FC6A4CEA0A0C24F800C0AFE76E +:107C80004FF00008A3EB080000287FF741AFBEF9D2 +:107C900008601014009F0D1406FB0070405D019DEC +:107CA00055F820502E0EFF2E12D12C4800EA152632 +:107CB0006809C5F3C40500F4FC603043284324F888 +:107CC0001800119808F10108014412980244D9E7FC +:107CD000F0B2002EF5D034F818C01FFA80F9C5F3C1 +:107CE0000746C0434FEA2C27C5F3072A16FB09F6BF +:107CF000C0B207F0F807EDB21AFB09FA07FB0067FC +:107D00004FEAEC0615FB09F54FEACC0CBFB206F0C2 +:107D1000FC065FFA8CFC06FB00A60CFB0055781CE9 +:107D2000B6B2ADB200EB172705F1010A07F47847A8 +:107D30000AEB152ACAF3C42A4AEA070706F1010A20 +:107D40000AEB162A4FEA5A1A0AF4FC6A47EA0A07AB +:107D500024F81870B5E705B0BDE8F08F00F8FFFF14 +:107D60002DE9F04F87B08B46F7EE006A159C049220 +:107D70009DF8642061680592DDF860E0DDE9162079 +:107D800001FB0020226802EB4000DEF80020019297 +:107D9000DEF804200292BBF1000F03DC049A002AF3 +:107DA00040F34281119ABEF9087002F50041129A1F +:107DB000BEF90C6002F50042002B0EDD0C1405D458 +:107DC000BC4203DA141401D4B44207DB139C013B18 +:107DD00002302144149C2244EEE719D05C1E139D0E +:107DE00005FB04152D1409D4BD4207DA149D05FBCB +:107DF0000424241402D4B442C0F2B1804FF000082D +:107E000003EB0804002C3EDC23EAE37300EB4300A1 +:107E1000BBF1000F40F3088130EE040A109B70EEB6 +:107E2000A40ABBF1010BB0EE626AC6EE807A31EEB5 +:107E3000051ABEEEC86A8DED116AB0EE436ABEEE59 +:107E4000C86A8DED126A20EEA77A61EE277A77EE86 +:107E5000622A37EEC33AFEEEC82ABEEEC83A12EEE8 +:107E6000902AF0EE472A92FBF3F313EE102A1393B5 +:107E7000109BB0EE673A92FBF3F3049A1493109BB5 +:107E800008BF134687E70E1462D4DEF80850B542E7 +:107E90005EDD17145CD4DEF80C40BC4258DD2DB218 +:107EA000029C07FB0565665D002E51D0019C34F8ED +:107EB00015906FF0010404FB08F44FEA292C055BD0 +:107EC0000CF0F80C0394059C4FEAE50A66430AF0AF +:107ED000FC0A741C04EB16242E12241206F0F80679 +:107EE000ED00A7B2E443EDB2E4B216FB04F615FBD5 +:107EF00004F50CFB076C4FEAE9061AFB04FA4FEA9B +:107F0000C9091FFA8CFC06F0FC065FFA89F906FB2A +:107F100007A60CF1010409FB075504EB1C2C039C7C +:107F2000ADB2B6B20CF4784C05F1010A0AEB152A91 +:107F3000CAF3C42A4AEA0C0C06F1010A0AEB162A13 +:107F40004FEA5A1A0AF4FC6A4CEA0A0C20F804C0F8 +:107F5000139C08F1FF382144149C224450E74FF051 +:107F60000009A3EB0904002C7FF74EAFBEF90860AF +:107F70000D14141406FB0454029D2E5D002E4CD0EB +:107F8000019D35F81480059C30F819504FEA282CD3 +:107F900066434FEAE50A0CF0F80C741C0AF0FC0A80 +:107FA00004EB16242E12241206F0F806ED00A7B2F8 +:107FB000E443EDB2E4B216FB04F615FB04F50CFB4A +:107FC000076C4FEAE8061AFB04FA4FEAC8081FFAE2 +:107FD0008CFC06F0FC065FFA88F806FB07A60CF19D +:107FE000010408FB075504EB1C2CADB2B6B20CF42F +:107FF000784C05F1010A0AEB152ACAF3C42A4AEAA9 +:108000000C0C06F1010A0AEB162A4FEA5A1A0AF476 +:10801000FC6A4CEA0A0C20F819C0139C09F101090A +:108020002144149C22449CE707B0BDE8F08F2DE961 +:10803000F04F85B08B46F7EE006A139C039261689F +:10804000DDF85880DDE9142001FB0020226802EBF6 +:108050004000D8F800200092D8F804200192BBF12B +:10806000000F03DC039A002A40F346810F9AB8F907 +:10807000087002F50041109AB8F90C6002F5004250 +:10808000002B0EDD0C1405D4BC4203DA141401D409 +:10809000B44207DB119C013B02302144129C224474 +:1080A000EEE717D05C1E119D05FB04152D1409D4B5 +:1080B000BD4207DA129D05FB0424241402D4B44205 +:1080C000C0F2B38000269C19002C3EDC23EAE37347 +:1080D00000EB4300BBF1000F40F30E8130EE040AC9 +:1080E0000E9B70EEA40ABBF1010BB0EE626AC6EE05 +:1080F000807A31EE051ABEEEC86A8DED0F6AB0EED9 +:10810000436ABEEEC86A8DED106A20EEA77A61EE72 +:10811000277A77EE622A37EEC33AFEEEC82ABEEE21 +:10812000C83A12EE902AF0EE472A92FBF3F313EED0 +:10813000102A11930E9BB0EE673A92FBF3F3039A69 +:1081400012930E9B08BF134689E70F1418D4D8F872 +:108150000850BD4214DD5FEA224C11D4D8F80C401F +:1081600064450DDD2DB2019C0CFB0575645DFF2C93 +:108170000CD1009C34F815506FF001047443055382 +:10818000119C013E2144129C22449CE7002CF7D014 +:10819000009F1FFA84FCE44337F815906FF0010547 +:1081A000E4B275434FEA292E02950EF0F80E455BB6 +:1081B0002F124FEAE50A07F0F807ED000AF0FC0A73 +:1081C00017FB04F7EDB21AFB04FA0EFB0C7E4FEA24 +:1081D000E90715FB04F54FEAC9091FFA8EFE07F0FF +:1081E000FC075FFA89F907FB0CA70EF1010409FBF4 +:1081F0000C5504EB1E2E029CADB2BFB20EF4784EAD +:1082000005F1010A0AEB152ACAF3C42A4AEA0E0E3E +:1082100007F1010A0AEB172A4FEA5A1A0AF4FC6A14 +:108220004EEA0A0E20F804E0AAE74FF00009A3EB9B +:108230000904002C7FF74AAF1414B8F908600D1434 +:1082400006FB0455019C645DFF2C0BD1009C34F8A7 +:10825000154020F81940119C09F101092144129C94 +:108260002244E4E7002CF6D0009EA7B2E44336F89F +:1082700015E030F81950E4B24FEA2E2C2E124FEAD6 +:10828000E50A0CF0F80C06F0F806ED000AF0FC0A1E +:1082900016FB04F6EDB21AFB04FA0CFB076C4FEA6E +:1082A000EE0615FB04F54FEACE0E1FFA8CFC06F025 +:1082B000FC065FFA8EFE06FB07A60CF101040EFB1E +:1082C000075504EB1C2CADB2B6B20CF4784C05F19A +:1082D000010A0AEB152ACAF3C42A4AEA0C0C06F171 +:1082E000010A0AEB162A4FEA5A1A0AF4FC6A4CEA07 +:1082F0000A0C20F819C0AEE705B0BDE8F08F2DE9F3 +:10830000F04F85B0139803929DF85C200091019284 +:108310004168DDF858E0DDE9142401FB042402681B +:1083200002EB4404DEF800200292019AD643F6B232 +:10833000009A002A03DC039A002A40F324810F9A52 +:10834000BEF908C002F50041109ABEF90C7002F5A2 +:108350000042002B0EDD081405D4604503DA10142A +:1083600001D4B84207DB1198013B02340144129852 +:108370000244EEE76ED0581E119D05FB00152D142A +:108380005CD465455ADA129D05FB0020001455D4D3 +:10839000B84253DA9946A246BDF804B0B9F1000FCD +:1083A00054DDBEF908700D14101409F1FF3907FBF4 +:1083B0000050029D35F81000BAF800504FEA202C0A +:1083C0002F124FEAE5080CF0F80C07F0F807ED0063 +:1083D00008F0FC0817FB06F7EDB218FB06F80CFBDB +:1083E0000B7CC71015FB06F5C00007F0FC071FFA51 +:1083F0008CFCC0B207FB0B8700FB0B500CF1010596 +:10840000BFB280B205EB1C2C07F10108451C08EB3C +:1084100017280CF4784C05EB102511984FEA5818E2 +:10842000C5F3C425014408F4FC68129845EA0C0C15 +:1084300002444CEA080C2AF802CBAFE74FF00008E0 +:10844000BDF804A003EB0800002841DC23EAE37335 +:1084500004EB4304009B002B40F39580B7EE007AB9 +:108460000E9B30EE040A70EEA40AF0EE626AC7EECC +:10847000007A31EE051AFEEEC86ACDED0F6AF0EE15 +:10848000436AFEEEC86ACDED106A20EEA77A61EE6F +:10849000277A77EE622A37EEC33AFEEEC82ABEEE9E +:1084A000C83A12EE902AF0EE472A92FBF3F313EE4D +:1084B000102A11930E9BB0EE673A92FBF3F31293DE +:1084C000009B039A013B00930E9B08BF13462FE7C6 +:1084D0000F1451D4DEF80850BD424DDD5FEA224C46 +:1084E0004AD4DEF80C00604546DD2DB202980CFB44 +:1084F000057530F815006FF0010505FB08FB4FEA24 +:10850000202C34F80B500CF0F80C2F124FEAE50930 +:1085100007F0F807ED0009F0FC0917FB06F7EDB2CC +:1085200019FB06F90CFB0A7CC71015FB06F5C00009 +:1085300007F0FC071FFA8CFCC0B207FB0A9700FB90 +:108540000A500CF10105BFB280B205EB1C2C07F1FB +:108550000109451C09EB17290CF4784C05EB102593 +:108560004FEA5919C5F3C42509F4FC6945EA0C0C16 +:108570004CEA090C24F80BC0119808F1FF380144AB +:10858000129802445EE705B0BDE8F08F2DE9F04F88 +:1085900085B09346F7EE006A139E169D70680191B0 +:1085A000DDE91424DDE911EC00FB0424326802EB60 +:1085B00044042A680292019A002A03DCBBF1000FEE +:1085C00040F39A800F9AB5F9089002F50040109A8E +:1085D000B5F90C8002F50042002B0CDD061405D421 +:1085E0004E4503DA161401D4464505DB7044624457 +:1085F000013B0234F0E70FD05E1E0EFB06073F146E +:1086000041D504EB430698460396B8F1000F56DCBB +:1086100023EAE37304EB4304019B002B6CDD30EE93 +:10862000040A0E9B70EEA40AB0EE626AC6EE807A6F +:1086300031EE051ABEEEC86A8DED0F6AB0EE436AE0 +:10864000BEEEC86A8DED106A20EEA77A61EE277A39 +:1086500077EE622A37EEC33AFEEEC82ABEEEC83A7B +:1086600012EE902AF0EE472A92FBF3FE13EE102A48 +:10867000B0EE673A92FBF3FC019B013B01930E9B2A +:1086800008BF5B4697E74F45BBDA0CFB062636145E +:10869000B7D44645B5DA1E46A046002EB8DD1714FD +:1086A000B5F908A04FEA20490299704462440AFBD8 +:1086B0000797013E31F8177028F8027BEDE75FEA73 +:1086C000204914D4AE684E4511DD5FEA224A0ED42B +:1086D000EF6857450BDD36B26FF00101029F0AFBD0 +:1086E000069637F8167001FB08F603998F5370440D +:1086F000624408F1FF3888E705B0BDE8F08F2DE946 +:10870000F04F87B08B46F7EE006A159803929DF8FC +:10871000642041680492DDF86090DDE9162501FBD4 +:108720000525026802EB4505D9F800200192BBF14E +:10873000000F03DC039A002A40F35881119AB9F91B +:10874000087002F50040129AB9F90C6002F5004178 +:10875000002B0EDD021405D4BA4203DA0A1401D448 +:10876000B24207DB139A013B02351044149A1144BC +:10877000EEE717D05A1E139C04FB0204241409D4FC +:10878000BC4207DA149C04FB0212121402D4B24257 +:10879000C0F2BF800027DA19002A3EDC23EAE37327 +:1087A00005EB4305BBF1000F40F3208130EE040AD6 +:1087B000109B70EEA40ABBF1010BB0EE626AC6EE2C +:1087C000807A31EE051ABEEEC86A8DED116AB0EE00 +:1087D000436ABEEEC86A8DED126A20EEA77A61EE9A +:1087E000277A77EE622A37EEC33AFEEEC82ABEEE4B +:1087F000C83A12EE902AF0EE472A92FBF3F313EEFA +:10880000102A1393109BB0EE673A92FBF3F3039A8E +:108810001493109B08BF134689E706142DD4D9F88A +:108820000840B44229DD5FEA214C26D4D9F80C2057 +:10883000624522DD24B2019A0CFB046452F8244004 +:10884000220E1AD0049E7243561C06EB2222260AE0 +:1088500012120596FF2A16D16FF0010226F4FF6668 +:1088600002FB07FC620926F00706C4F3C40402F405 +:10887000FC621643264325F80C60139A013F10440E +:10888000149A114487E76FF001061FFA82FAC4F3C5 +:10889000074CD2437E43E4B21CFB0AFCD2B235F84B +:1088A000068014FB0AF402964FEA282E9DF8146005 +:1088B00016FB0AF60EF0F80E0EFB02CE4FEAE80C9D +:1088C0004FEAC8081FFA8EFE0CF0FC0C5FFA88F81D +:1088D0000CFB026C08FB02440EF101021FFA8CFC37 +:1088E000A4B202EB1E2E029A661C0EF4784E06EB22 +:1088F0001426C6F3C42646EA0E0E0CF1010606EB5A +:108900001C26760906F4FC664EEA060E25F802E0FF +:10891000B3E74FF00008A3EB0802002A7FF73EAF51 +:108920000414B9F908600A1406FB0242019C54F8C9 +:108930002240220E15D0049E7243561C06EB2222C2 +:10894000260A1212FF2A13D1620926F4FF66C4F325 +:10895000C40402F4FC6226F007061643264325F8F9 +:108960001860139A08F101081044149A1144D2E7D0 +:1089700035F818E01FFA82FAC4F30747D2434FEAEA +:108980002E2C17FB0AF7D2B20CF0F80CE4B2F6B2B8 +:108990000CFB027C4FEAEE0714FB0AF44FEACE0E02 +:1089A0001FFA8CFC07F0FC0716FB0AF65FFA8EFE36 +:1089B0000EFB024407FB02670CF10102A4B202EBBA +:1089C0001C2C661CBFB20CF4784C06EB1426C6F3C4 +:1089D000C42646EA0C0C7E1C06EB1726760906F424 +:1089E000FC664CEA060C25F818C0BAE707B0BDE8EB +:1089F000F08F00002DE9F04F85B08B46F7EE006A4E +:108A0000139803924168DDF85880DDE9142401FBD6 +:108A10000424026802EB4404D8F800200192BBF160 +:108A2000000F03DC039A002A40F34F810F9AB8F934 +:108A3000087002F50041109AB8F90C6002F5004286 +:108A4000002B0EDD081405D4B84203DA101401D44B +:108A5000B04207DB1198013B0234014412980244F2 +:108A6000EEE717D0581E119D05FB00152D1409D4F3 +:108A7000BD4207DA129D05FB0020001402D4B0426B +:108A8000C0F2BA800026981900283EDC23EAE3737E +:108A900004EB4304BBF1000F40F3178130EE040AEE +:108AA0000E9B70EEA40ABBF1010BB0EE626AC6EE3B +:108AB000807A31EE051ABEEEC86A8DED0F6AB0EE0F +:108AC000436ABEEEC86A8DED106A20EEA77A61EEA9 +:108AD000277A77EE622A37EEC33AFEEEC82ABEEE58 +:108AE000C83A12EE902AF0EE472A92FBF3F313EE07 +:108AF000102A11930E9BB0EE673A92FBF3F3039AA0 +:108B000012930E9B08BF134689E70F1424D4D8F89C +:108B10000850BD4220DD5FEA224C1DD4D8F80C007D +:108B2000604519DD2DB201980CFB057550F8250044 +:108B3000070EFF2F16D16FF0010505FB06F7A5F212 +:108B4000FE7505EA102C4509C0F3C40005F4FC6568 +:108B50004CEA05050543E5531198013E014412987E +:108B6000024490E7FDB2002FF6D06FF001071FFA24 +:108B700085F9ED43C0F3072A77431AFB09FAEDB2F2 +:108B800034F807E00297C0F307474FEA2E2C17FB93 +:108B900009F7C0B20CF0F80C10FB09F00CFB057CD7 +:108BA0004FEAEE074FEACE0E1FFA8CFC07F0FC07E7 +:108BB0005FFA8EFE07FB05A70EFB05000CF1010511 +:108BC000BFB280B205EB1C2C00F1010A0CF4784C0A +:108BD0000AEB102A0298CAF3C42A4AEA0C0C07F1DD +:108BE000010A0AEB172A4FEA5A1A0AF4FC6A4CEAFD +:108BF0000A0C24F800C0AFE74FF0000EA3EB0E0004 +:108C000000287FF743AFB8F908600D14101406FB75 +:108C10000050019D55F820502E0EFF2E12D12C48E9 +:108C200000EA15266809C5F3C40500F4FC6030436A +:108C3000284324F81E0011980EF1010E01441298E9 +:108C40000244DBE7F0B2002EF5D034F81EC01FFA64 +:108C500080F9C5F30746C0434FEA2C27C5F3072A1E +:108C600016FB09F6C0B207F0F807EDB21AFB09FAD5 +:108C700007FB00674FEAEC0615FB09F54FEACC0C41 +:108C8000BFB206F0FC065FFA8CFC06FB00A60CFBEC +:108C90000055781CB6B2ADB200EB172705F1010AFA +:108CA00007F478470AEB152ACAF3C42A4AEA0707E9 +:108CB00006F1010A0AEB162A4FEA5A1A0AF4FC6A6C +:108CC00047EA0A0724F81E70B5E705B0BDE8F08F43 +:108CD00000F8FFFF2DE9F04F87B08B46F7EE006AF2 +:108CE000159803929DF8642041680492DDF8609025 +:108CF000DDE9162401FB0424026802EB4404D9F8E0 +:108D00000820013222F001020092D9F800200192DD +:108D1000BBF1000F03DC039A002A40F36A81119A29 +:108D2000B9F9087002F50040129AB9F90C6002F521 +:108D30000041002B0EDD021405D4BA4203DA0A14F6 +:108D400001D4B24207DB139A013B02341044149A57 +:108D50001144EEE717D05A1E139D05FB02052D1492 +:108D600009D4BD4207DA149D05FB0212121402D485 +:108D7000B242C0F2C8800027DA19002A3EDC23EA9A +:108D8000E37304EB4304BBF1000F40F3328130EE98 +:108D9000040A109B70EEA40ABBF1010BB0EE626AEC +:108DA000C6EE807A31EE051ABEEEC86A8DED116A04 +:108DB000B0EE436ABEEEC86A8DED126A20EEA77A65 +:108DC00061EE277A77EE622A37EEC33AFEEEC82AC2 +:108DD000BEEEC83A12EE902AF0EE472A92FBF3F369 +:108DE00013EE102A1393109BB0EE673A92FBF3F345 +:108DF000039A1493109B08BF134689E7051436D4D1 +:108E0000D9F80820AA4232DD0E1430D4D9F80C204B +:108E1000B2422CDD009A06FB0255019E6A08B25C44 +:108E2000EE0754BF02F00F02121102EB0212D2B28F +:108E3000EAB1049D6A43551C05EB22226E4D1212C5 +:108E40002D68FF2A4FEA1526059616D16FF001020C +:108E500026F4FF6602FB07FC6A0926F00706C5F345 +:108E6000C40502F4FC6216432E4324F80C60139AE6 +:108E7000013F1044149A11447EE76FF001061FFA77 +:108E800082FAC5F3074CD2437E43EDB21CFB0AFCC9 +:108E9000D2B234F8068015FB0AF502964FEA282E66 +:108EA0009DF8146016FB0AF60EF0F80E0EFB02CECB +:108EB0004FEAE80C4FEAC8081FFA8EFE0CF0FC0CD3 +:108EC0005FFA88F80CFB026C08FB02550EF10102F8 +:108ED0001FFA8CFCADB202EB1E2E029A6E1C0EF431 +:108EE000784E06EB1526C6F3C42646EA0E0E0CF1A4 +:108EF000010606EB1C26760906F4FC664EEA060E11 +:108F000024F802E0B3E74FF00008A3EB0802002AC0 +:108F10007FF735AF0214009E0D1406FB0525019E58 +:108F20006A08ED07B25C54BF02F00F02121102EBA7 +:108F30000212D2B2C2B1049D6A43551C05EB222233 +:108F40002D4D12122E68FF2A4FEA162513D17209F1 +:108F500025F4FF65C6F3C40602F4FC6225F007059C +:108F60001543354324F81850139A08F101081044AA +:108F7000149A1144C9E734F818E01FFA82FAC6F3CC +:108F80000747D2434FEA2E2C17FB0AF7D2B20CF058 +:108F9000F80CF6B2EDB20CFB027C4FEAEE0716FBC2 +:108FA0000AF64FEACE0E1FFA8CFC07F0FC0715FB01 +:108FB0000AF55FFA8EFE0EFB026607FB02570CF104 +:108FC0000102B6B202EB1C2C751CBFB20CF4784C3B +:108FD00005EB1625C5F3C42545EA0C0C7D1C05EBF5 +:108FE00017256D0905F4FC654CEA050C24F818C03A +:108FF000BAE707B0BDE8F08F3CE701202DE9F04F5C +:1090000087B0F7EE006ADFF80883159801910592A2 +:109010004168DDF860B0DDE9162401FB0424026834 +:1090200002EB4404DBF80820013222F00102029234 +:10903000DBF800200392019A002A03DC059A002A3B +:1090400040F36281119ABBF9087002F50040129A50 +:10905000BBF90C6002F50041002B0EDD021405D4B3 +:10906000BA4203DA0A1401D4B24207DB139A013B75 +:1090700002341044149A1144EEE717D05A1E139D7F +:1090800005FB02052D1409D4BD4207DA149D05FB2A +:109090000212121402D4B242C0F2C38000255A193F +:1090A000002A3FDC23EAE37304EB4304019B002B1B +:1090B00040F32A8130EE040A109B70EEA40AB0EE51 +:1090C000626AC6EE807A31EE051ABEEEC86A8DED90 +:1090D000116AB0EE436ABEEEC86A8DED126A20EEE8 +:1090E000A77A61EE277A77EE622A37EEC33AFEEE70 +:1090F000C82ABEEEC83A12EE902AF0EE472A92FB3A +:10910000F3F313EE102A1393109BB0EE673A92FB21 +:10911000F3F31493019B059A013B0193109B08BF45 +:10912000134688E706142CD4DBF80820B24228DD69 +:109130000F1426D4DBF80C20BA4222DD029A07FB7A +:109140000266039F7208F607BA5C54BF02F00F0272 +:10915000121102EB0212D2B2FF2A18D16FF00106EF +:10916000D8F8002006FB05F7A6F2FE7606EA122CD8 +:109170005609C2F3C40206F4FC664CEA060616431E +:10918000E653139A013D1044149A114487E7002ACC +:10919000F7D06FF00106D8F800C01FFA82F9D24369 +:1091A0006E43CCF3072AD2B234F806E01AFB09FA70 +:1091B0000496CCF307464FEA2E2716FB09F65FFA12 +:1091C0008CFC07F0F8071CFB09FC07FB02674FEA61 +:1091D000EE064FEACE0EBFB206F0FC065FFA8EFE38 +:1091E00006FB02A60EFB02CC7A1CB6B21FFA8CFC60 +:1091F00002EB1727049A0CF1010A07F478470AEBEF +:109200001C2ACAF3C42A4AEA070706F1010A0AEB34 +:10921000162A4FEA5A1A0AF4FC6A47EA0A07A752C2 +:10922000AFE74FF0000EA3EB0E02002A7FF73AAF34 +:109230000214029E0D1406FB0525039E6A08ED0725 +:10924000B25C54BF02F00F02121102EB0212D2B252 +:10925000FF2A15D1D8F80050A2F6FF0202EA15261F +:109260006A09C5F3C40502F4FC6232432A4324F8B8 +:109270001E20139A0EF1010E1044149A1144D2E7E5 +:10928000002AF6D0D8F800701FFA82F934F81EC010 +:10929000D243C7F30745C7F3072A4FEA2C2615FB2D +:1092A00009F5D2B206F0F806FFB21AFB09FA06FB7E +:1092B00002564FEAEC0517FB09F74FEACC0CB6B2A1 +:1092C00005F0FC055FFA8CFC05FB02A50CFB0277A0 +:1092D000721CADB2BFB202EB162607F1010A06F40A +:1092E00078460AEB172ACAF3C42A4AEA060605F1A9 +:1092F000010A0AEB152A4FEA5A1A0AF4FC6A46EAEE +:109300000A0624F81E60B4E707B0BDE8F08F00BF7E +:109310003CE70120704770477047704770477047BF +:109320007047704770477047704770477047704785 +:109330007047704770477047704770477047704775 +:109340007047704770477047704770477047704765 +:10935000704770472DE9F04788B006468846914629 +:1093600008AC24F80C3D2046FDF762FC3368054646 +:1093700020469F69FDF770FB82462046FDF7A0FB63 +:1093800000954B4642463146CDE901A006A8B847B4 +:10939000284608B0BDE8F0872DE9FF470023009379 +:1093A0003D4B1B78002B37D13C4AB2F90020ADF879 +:1093B0000420002B32D13A4BB3F9003002AC0868DC +:1093C000ADF8063002AB4968364D03C36946204606 +:1093D000FAF79AF86846FAF76FF8BDF80830BDF862 +:1093E00000202F4628681344BDF80220ADF808304D +:1093F000BDF80A301344ADF80A3003689B6B9847F8 +:1094000010F0010F0CD02868036894E80600DB6DAB +:10941000984704B0BDE8F087214AC6E71F4BCBE769 +:109420003868BDF90C800368BDF90E504FEA480852 +:109430001B6B9847BDF90830BDF80A20BDF80460E1 +:1094400016FB023600EB4606386803689B6A9847AD +:10945000124ABDF90A4013889146BDF908105D43D0 +:1094600003FB041400EB440404EB45053868AC42EC +:1094700003680ED2D3F834A0324643462146D04783 +:10948000B9F8003004EB4304BDF9043006EB4306A1 +:10949000ECE7DB6A9847BCE72CE701202EE70120C8 +:1094A00030E7012034E701202DE9F04F8BB00F4663 +:1094B00016469DF850B09DF85440BBF1000F4AD0BD +:1094C000106806AD516803C5186808AD596803C532 +:1094D00006A8F9F7F1FF314608A8FAF715F8BDF923 +:1094E0002020BDF92230BDF81C60BDF9248016FB98 +:1094F0000321BDF9265007EB4106BDF818105F4F58 +:109500000A443868B946ADF82020BDF81A20134443 +:10951000ADF8223003689B6B9847BBF1FF0F1DD15C +:10952000FCB910F0010F1CD0D9F800000027ADB233 +:10953000BDF822300168BDF82020CDF80CB00195AF +:10954000CDE90447BDF81C4002941FFA88F400944A +:109550004C6C3146A0470BB0BDE8F08F10F0040F03 +:10956000E1E7D9F800004FEA480703689B6A98478B +:10957000434BBDF92240BBF1FF0F1A889A46BDF953 +:10958000201005FB02F502FB041400EB440459D043 +:10959000CBF1FF0904EB45051FFA8BF29E461FFA3B +:1095A00089F9AC4264D204EB070A54453DD22188C4 +:1095B00036F8023B08124FEA232C00F0F8004FEA7D +:1095C000E10B0CF0F80CC90010FB09F00BF0FC0BE0 +:1095D000C9B20CFB020CD8101BFB09FBDB001FFA05 +:1095E0008CFC00F0FC0011FB09F1DBB200FB02B0C7 +:1095F0000CF1010B03FB02130BEB1C2C9BB280B292 +:109600000CF4784B03F1010C0CEB132C431C03EB13 +:109610001020CCF3C42C40094CEA0B0C00F4FC6085 +:109620004CEA000C24F802CBBFE7BEF80030A3EBF5 +:10963000080304EB4304BDF91C30A3EB080306EB5D +:109640004306AEE704EB4505D9F80000AC420368D9 +:109650000ED2D3F8348032463B462146C047BAF892 +:10966000003004EB4304BDF91C3006EB4306EBE786 +:10967000024B18680368DB6A98476CE734E70120FF +:109680002EE7012010B5044684210AF034FE20465E +:1096900010BD10B5044604210AF02DFE204610BD71 +:1096A00010B5044604210AF026FE204610BD10B570 +:1096B000044640F644010AF01EFE204610BD10B5D7 +:1096C000044604210AF017FE204610BD10B50446DA +:1096D00004210AF010FE204610BD10B504460421F6 +:1096E0000AF009FE204610BD10B5044604210AF018 +:1096F00002FE204610BD10B5044604210AF0FBFD11 +:10970000204610BD10B5044604210AF0F4FD2046A1 +:1097100010BD10B5044604210AF0EDFD204610BD31 +:1097200010B5044604210AF0E6FD204610BD10B530 +:10973000044604210AF0DFFD204610BD10B50446A2 +:1097400004210AF0D8FD204610BD10B504460421BE +:109750000AF0D1FD204610BD10B5044604210AF0E0 +:10976000CAFD204610BD10B5044604210AF0C3FD11 +:10977000204610BD10B5044604210AF0BCFD204669 +:1097800010BD10B5044604210AF0B5FD204610BDF9 +:1097900010B5044604210AF0AEFD204610BD10B5F8 +:1097A000044604210AF0A7FD204610BD10B504466A +:1097B00004210AF0A0FD204610BD10B50446042186 +:1097C0000AF099FD204610BD10B5044604210AF0A8 +:1097D00092FD204610BD10B5044604210AF08BFD11 +:1097E000204610BD10B5044604210AF084FD204631 +:1097F00010BD10B5044604210AF07DFD204610BDC1 +:1098000010B5044604210AF076FD204610BD10B5BF +:10981000044604210AF06FFD204610BD10B5044631 +:1098200004210AF068FD204610BD10B5044604214D +:109830000AF061FD204610BD10B5044604210AF06F +:109840005AFD204610BD00002DE9F04F8FB01C4698 +:1098500005929DF864200091189B0192002A00F067 +:10986000168120680AAA616803C218680CAA5968A0 +:1098700003C20AA8F9F720FE21460CA8F9F744FE16 +:10988000BDF92C60BDF92E50B6F5806FBDF83000E3 +:10989000DBBFB3B24FF48062012392FBF3F3BDF957 +:1098A00032201D4492FBF3F11FFA81FC013D0CFBB9 +:1098B0001324614614FB06F4044495FBF3F5A4B2AB +:1098C00031B1059B009953F82C301BBA1944009113 +:1098D000BDF82830ADB2BDF934801844BDF82A3047 +:1098E000BDF93660AD001A446A4BADF83000186817 +:1098F000ADF8322003689B6A98476749BDF932206A +:10990000002C0B88BDF930C00CBFC6464FF0000ECE +:10991000099103FB02C2BDF8041073431FFA8EFEC7 +:1099200000EB4200039100EB430306932B1D0793CA +:10993000019BC3F1FF02002392B202930492069AA4 +:10994000824240F29F8063B9009B1A78930902F02B +:109950003F0202925A1E022A15D8009A9BB2013287 +:109960000092B4B19C4291BF1C1BE41A71464FF0A7 +:10997000000A9BBF1FFA84FA0024A4B21FFA88F1E0 +:1099800053468E46DBE7009A009B02325B780092DA +:10999000E7E70222079973451546029A24BFA3EB15 +:1099A0000E0AF14615FB0212059934BF99461FFABB +:1099B0008AFA31F802C038BFAEEB0301019A2EBF1C +:1099C000214689B2A246FF2A4FEA490905D18144BE +:1099D000814545D020F802CBFAE74FEA2C22039DBF +:1099E0004FEAEC0B81444FEACC0C02F0F8020BF08A +:1099F000FC0B5FFA8CFC6A430BFB05FB0CFB05FCC4 +:109A0000089281452CD00288049D1612049F06F00E +:109A1000F80616FB05F6089D2E44D510D200B6B206 +:109A200005F0FC05D2B215FB07F512FB07F2771C17 +:109A30005D44624407EB1626ADB292B206F4784656 +:109A4000571C07EB1222C2F3C42216436A1C02EB16 +:109A500015256D0905F4FC652E4320F8026BD0E74F +:109A600073458DD31FFA88F1BDF82C40099B641A09 +:109A70001B88A4B2A3EB0803002C00EB430018BF23 +:109A800000217DE7034B18680368DB6A98470FB035 +:109A9000BDE8F08F34E701202EE701202DE9F04FDB +:109AA0009FB01D460446289BCDE913129DF8A420C3 +:109AB0000992002A00F0ED8128681AAA696803C299 +:109AC00018681CAA596803C21AA8F9F7F5FC2946B8 +:109AD0001CA8F9F719FDBDF96C30BDF96E80B3F51E +:109AE000806FBDF97660DBBF9AB24FF480610122CE +:109AF00091FBF2F202920298BDF97220029992FB58 +:109B0000F0F080B28844109008F1FF380298109D60 +:109B100005FB102598FBF1F815FB03F5BDF8701057 +:109B2000BDF8683008F101080D441944BDF86A30E9 +:109B30001FFA88F81A44BDF97430ADF87010ADB250 +:109B40000493944BADF87220186803689B6A984799 +:109B5000914BBDF97210002D1A88BDF9707002FB8F +:109B600006F602FB0171189300EB4100BDF82430AA +:109B70004FF0000100EB46020F93884B0A92149AB3 +:109B8000A3EB04030D9102EB8808199308F104027A +:109B90001192099AC2F1FF021592049A18BF00228D +:109BA00092B210990D9B11FA83F3149901EB830380 +:109BB000043306930A9B834240F26681BDF86C3001 +:109BC0004FF0010A0299069ED34657463678B5FBF8 +:109BD000F3F3CB1A129601369BB205961693069BA9 +:109BE00059789B781B0243EA01430699C9780B43D5 +:109BF000139919444E1C497803960902139E01F4E7 +:109C0000FF71F35C19438BB284F804180C930023A2 +:109C100007939C46BDF854300E93002D7ED0AF4282 +:109C20006ED20A9BED1B01928342ADB202D873E063 +:109C3000002B5FD1039BCBF107025B7893405B0065 +:109C400003F4FF72039B1B7843FA0BF3DBB213435D +:109C50000BF101025FFA82FB039A9FB2BBF1080F7E +:109C600013BF013202324FF0000B039208BF039280 +:109C7000129ABA4209D384F804380123059AB2F53E +:109C8000007F0ED39A46002635E0059B9F4218D3ED +:109C900004EB0A0394F8042883F804280AF101036A +:109CA0009BB2059A94F8046804EB82020C99167131 +:109CB0000AF10106D1805671059A013292B20592DD +:109CC000E0E704EB87033A465B7903F60406264493 +:109CD000199901EB060CBCF1000F07DD04EB8202C1 +:109CE00092F804C006F801CDD288F1E784F8042880 +:109CF0009BB2C3E70C9F0C97B446019A1F468CE7B2 +:109D00007B1B0CEB0506BDF810209BB2B6B201928E +:109D100000250A9A82428BD8019A4BE7974232D3A8 +:109D2000BB1A089201959BB20999FF2908990CEB7F +:109D3000010635D1A0F1020EB6B2B44540F08C80D8 +:109D40000899974200EB4100E2D3189A04991288CF +:109D5000521A169900EB4200079A01328A42079282 +:109D600040F08780BDF87050BDF86870049BED1B13 +:109D7000ADB2002D08BF1A460D9B18BF002201335B +:109D800092B20D930DE7D11B08978BB201932B462E +:109D9000CAE700BF34E701202EE70120FBF7FFFFF1 +:109DA000B6B20B90B445CBD00CF10101A44417918D +:109DB0009CF80458119931F815500B994FEA252851 +:109DC000B1F800C00E9908F0F8084FEA2C2E4FEABF +:109DD000EC090EF0F80E4FEACC0C09F0FC091EFB62 +:109DE00001FE0F995FFA8CFC08FB01E84FEAE50ED3 +:109DF0000E99ED000EF0FC0E1FFA88F819FB01F920 +:109E00000F99EDB20EFB019E0E991CFB01FC0F9900 +:109E10001FFA8EFE05FB01C508F1010C0EF10109C8 +:109E20000B99ADB20CEB182805F1010C09EB1E29BA +:109E300008F478480CEB152C4FEA5919CCF3C42CD4 +:109E400009F4FC694CEA0808BDF85CC048EA090856 +:109E500021F8028B0B91A5E70CF10108A44411999C +:109E60009CF804581FFA88FC31F815502EF8025F50 +:109E700063E7BDF81020BDF86C50AD1AADB2002DEF +:109E800018BF0022019244E7034B18680368DB6A9D +:109E900098471FB0BDE8F08F34E701202DE9F04F5F +:109EA0008FB01C460F4603929DF86420189B0292C7 +:109EB000002A00F0288120680AAA616803C2186895 +:109EC0000CAA596803C20AA8F9F7F6FA21460CA8A9 +:109ED000F9F71AFBBDF92C60BDF92E50B6F5806F6D +:109EE000BDF83000DBBFB3B24FF48062012392FBB8 +:109EF000F3F3BDF932201D4492FBF3F11FFA81FC0C +:109F0000013D0CFB1324614614FB06F4044495FB4D +:109F1000F3F5A4B221B1039B53F82C301BBA1F44B4 +:109F2000BDF82830ADB2BDF934901844BDF82A30E0 +:109F3000BDF93660AD001A44744BADF830001868B6 +:109F4000ADF8322003689B6A9847714ABDF9321018 +:109F5000002C1388BDF930C00CBFC8464FF0000874 +:109F6000099203FB01C173431FFA88F800EB41001B +:109F700000EB430304932B1D059300230193049AE4 +:109F8000824240F2BB805BB93A78930902F03F020B +:109F900001925A1E022A8DBF7B7801379BB202378D +:109FA00084B19C4291BF1C1BE41AC4464FF0000AC6 +:109FB0009BBF1FFA84FA0024A4B21FFA89FC5346FF +:109FC000E046DCE70422059943451546019A24BF83 +:109FD000A3EB080AC64615FB021203993CBFA8EB87 +:109FE000030C9E468A5826BF1FFA8AFAA4461FFA17 +:109FF0008CFC4FEA126138BFA2464FEA4E0E002990 +:10A0000066D0FF294FEA122614D1029DFF2D11D1EF +:10A01000510926F4FF66C2F3C402864401F4FC61D0 +:10A0200026F007060E431643B6B2864551D020F8F7 +:10A03000026BFAE7029DF6B2864469434D1C05EBBC +:10A040002125C2F30741D2B22D126FEA050BADB242 +:10A0500011FB05F15FFA8BFB16FB05F612FB05F20F +:10A0600089B2B6B292B2069107960892864530D070 +:10A07000028806991612D51006F0F806D20005F0EF +:10A08000FC0546EA5616D2B206FB0B1645EA9515B4 +:10A09000079942EA5212B6B205FB0B15089902FB6A +:10A0A0000B12711CADB292B201EB1626511C06F4D4 +:10A0B000784601EB1222C2F3C42216436A1C02EB5B +:10A0C00015256D0905F4FC652E4320F8026BCDE7DC +:10A0D00070444345FFF473AF1FFA89FCBDF82C4070 +:10A0E000099BA4EB0C041B88A4B2A3EB0903002C6E +:10A0F00000EB430018BF4FF0000C60E7034B1868FB +:10A100000368DB6A98470FB0BDE8F08F34E70120A1 +:10A110002EE701202DE9F04F93B01C4605929DF8E3 +:10A12000742001911C9B0292002A00F02E8120686D +:10A130000EAA616803C2186810AA596803C20EA863 +:10A14000F9F7BAF9214610A8F9F7DEF9BDF93C6034 +:10A15000BDF93E50B6F5806FBDF84000DBBFB3B22D +:10A160004FF48062012392FBF3F3BDF942201D44BA +:10A1700092FBF3F11FFA81FC013D0CFB13246146B5 +:10A1800014FB06F4044495FBF3F5A4B231B1059B2E +:10A19000019953F82C301BBA19440191BDF838309D +:10A1A000ADB2BDF944B01844BDF83A30BDF94660CF +:10A1B000AD001A44764BADF840001868ADF8422067 +:10A1C00003689B6A98477349BDF940C0002C0B880F +:10A1D000BDF942200D9103FB02C208BFDC4603FB20 +:10A1E00006F318BF4FF0000C00EB4200BDF808105A +:10A1F0001FFA8CFC00EB4303069108932B1D099377 +:10A20000029BDA430023D2B203930792089A824258 +:10A2100040F2B68063B9019B1A78930902F03F02BD +:10A2200003925A1E022A15D8019A9BB2013201925A +:10A23000B4B19C4291BF1C1BE41A66464FF0000863 +:10A240009BBF1FFA84F80024A4B21FFA8BF6434682 +:10A25000B446DBE7019A019B02325B780192E7E7A3 +:10A260000322099963451546039A2CBFA3EB0C08FA +:10A27000ACEB030615FB0212059924BF1FFA88F800 +:10A28000E14601EB020502992FBF2646B6B2994678 +:10A29000A046FF294AD0069FCA46A9780490794370 +:10A2A0000A91697879430B9105998A5C7A430C92FB +:10A2B000BAF1000F3DD0049A0AF1FF3A079F1288C5 +:10A2C0001FFA8AFABE460A9F1512D11005F0F8054A +:10A2D000D20001F0FC0145EA5515D2B205FB0E751E +:10A2E00041EA91110B9F42EA5212ADB201FB0E718D +:10A2F0000C9F02FB0E7205F1010E89B292B20EEBB9 +:10A30000152502F1010E05F478450EEB1222C2F379 +:10A31000C42215434A1C02EB1121049A490901F495 +:10A32000FC610D4322F8025B0492C1E74946864670 +:10A3300099B9634500EB490089D31FFA8BF6BDF844 +:10A340003C400D9BA41B1B88A4B2A3EB0B03002C69 +:10A3500000EB430018BF002679E7AA7801390E4FB9 +:10A3600089B207EA022A6A78D20002F4FC624AEA59 +:10A37000020295F800A042EADA022EF8022BD7E793 +:10A38000034B18680368DB6A984713B0BDE8F08F89 +:10A3900034E701202EE7012000F8FFFF2DE9F04F00 +:10A3A0009DB01C468346269BCDE911129DF89C204A +:10A3B0000E92002A00F0E481206818AA616803C2A6 +:10A3C00018681AAA596803C218A8F9F775F821463F +:10A3D0001AA8F9F799F8BDF96430BDF96640B3F5EC +:10A3E000806FBDF96E60DBBF9AB24FF480610122CD +:10A3F00091FBF2F202920298BDF96A20029992FB57 +:10A40000F0F080B20C440F90013C02980F9D05FBC8 +:10A41000102594FBF1F415FB03F5BDF86810BDF8A9 +:10A42000603001340D441944BDF86230A4B21A44BE +:10A43000BDF96C30ADF86810A4000693ADB2B34B13 +:10A44000ADF86A20186803689B6A9847B04BBDF95D +:10A450006A10002D1A88BDF9687002FB06F602FB2F +:10A460000171169300EB4108AA4B18BF002108EBBD +:10A470004602A3EB0B030A9204F104021793139212 +:10A48000069A08BF1146002289B20D920F9A0D9BC1 +:10A4900012FA83F3129A02EB8303043308930A9BA4 +:10A4A000434540F26881BDF864304FF0010E029AD6 +:10A4B0000898B5FBF3F3D31A00789BB210900130E3 +:10A4C0001493089B07905A789B781B0243EA024337 +:10A4D000089AD2781343119A1A44501C5278059066 +:10A4E0001202119802F4FF72C35C1A4393B28BF804 +:10A4F00004280B9300230993012301930493002361 +:10A500000393002D7DD0AE456CD20A9BA5EB0E05C2 +:10A510000C464345ADB202D871E0002B5DD1059BDE +:10A52000049A5B78C2F10702049993405B0003F43C +:10A53000FF72059B1B780B410131C9B2DBB20829C0 +:10A540000491059943EA02030CBF023101319AB22A +:10A5500005BF0591002105910491109991420AD3FC +:10A560008BF8043801230799B1F5007F0FD3002140 +:10A570000193039132E0079B9A4218D3019B9BF809 +:10A5800004185B4483F80418019B01339BB20799BC +:10A590009BF804080BEB810108710B98C8800198A7 +:10A5A000013048710799013189B20791DFE70BEB60 +:10A5B000820311465B7903F604005844179E064453 +:10A5C000002E06DD0BEB81010E7900F8016DC988C4 +:10A5D000F4E78BF804189BB2C5E70B9A21460B925F +:10A5E0009E468EE7039AAEEB0503BDF818402A4459 +:10A5F0009BB292B2039200250A9A42458DD8214619 +:10A600004DE78E454FF000092BBFAEEB0103A1EBE8 +:10A610000E042C462B4627BF9BB20C91A4B2CDF85A +:10A6200030E0039A0C984A44484592B274D0042012 +:10A630005A44054692F80428139815FB0202129812 +:10A6400080585FEA106A14D0BAF1FF0F4FEA102564 +:10A6500012D10E9AFF2A0FD1420925F4FF65C0F3EB +:10A66000C40002F4FC6225F007051543054328F8F1 +:10A67000195009F10109D4E738F819C0EDB24FEAD1 +:10A68000EC064FEA2C2706F0FC024FEACC0CC0F394 +:10A69000074607F0F80715925FFA8CFC0E9AC0B2D5 +:10A6A00047EA571702FB0AFA4CEA5C1C0AF101025E +:10A6B00002EB2A2212121FFA82FAD24316FB0AF682 +:10A6C000D2B210FB0AF007FB0267159E0CFB0200DA +:10A6D00015FB0AF5BFB280B246EA961606FB025693 +:10A6E0007A1C451C02EB172705EB1025B6B207F4C0 +:10A6F0007847C5F3C4252F43751C05EB16256D0956 +:10A7000005F4FC652F4328F81970B2E734E70120FF +:10A710002EE70120FBF7FFFF03928E450C9A08EB12 +:10A720004208FFF468AF169A06991288521A1499D3 +:10A7300008EB4208099A01328A42099211D1BDF808 +:10A740006850BDF86090069BA5EB0905ADB2002DE1 +:10A7500008BF19460D9B18BF0021013389B20D9324 +:10A7600094E6BDF81840BDF864502D1BADB2002D25 +:10A7700018BF002440E7044B18680368DB6A984759 +:10A780001DB0BDE8F08F00BF34E701202DE9F04F88 +:10A790009FB01D460446289BCDE913129DF8A420C6 +:10A7A0000A92002A00F0FE8128681AAA696803C28A +:10A7B00018681CAA596803C21AA8F8F77DFE294632 +:10A7C0001CA8F8F7A1FEBDF96C30BDF96E60B3F5B9 +:10A7D000806FBDF97670DBBF9AB24FF480610122C1 +:10A7E00091FBF2F201920198BDF97220019992FB5E +:10A7F000F0F080B20E441090013E0198109D05FBD0 +:10A80000102596FBF1F615FB03F5BDF87010BDF8A9 +:10A81000683001360D441944BDF86A30B6B21A44A6 +:10A82000BDF97430ADF87010ADB20493964BADF82D +:10A830007220186803689B6A9847944BBDF97210A0 +:10A84000002D1A88BDF970C002FB07F702FB01C199 +:10A85000189300EB410B8E4B18BF00210BEB470206 +:10A86000A3EB04030B92149A199302EB860606F1EC +:10A87000040206920A9A6FEA0202D2B21592049A70 +:10A8800008BF1146002289B20D92109A0D9B12FA50 +:10A8900083F3149A02EB8303043307930B9B5B450A +:10A8A00040F27B81BDF86C304FF00108019A0798A7 +:10A8B000C446CDF808800078B5FBF3F3D31A1190A5 +:10A8C00001309BB205901693079B5A789B781B0228 +:10A8D00043EA0243079AD2781343139A1A44501C4E +:10A8E000527803901202139802F4FF72C35C1A4369 +:10A8F00093B284F804280C93002308931A46BDF8F9 +:10A9000028300E93BDF854300F93002D7DD0AC4508 +:10A910006DD20B9BA5EB0C0508465B45ADB202D88A +:10A9200071E0002B5DD1039B029A5B78C2F10702B4 +:10A93000029993405B0003F4FF72039B1B780B4169 +:10A940000131C9B2DBB208290291039943EA02033B +:10A950000CBF023101319AB205BF0391002103916E +:10A960000291119991420AD384F804380123059980 +:10A97000B1F5007F0FD300219846009132E0059B8E +:10A980009A4218D304EB080394F8041883F80418C7 +:10A9900008F101039BB2059994F8046804EB810166 +:10A9A0000E710C9ECE8008F101064E7105990131A1 +:10A9B00089B20591DFE704EB820311465B7903F668 +:10A9C00004062644199F3744002F06DD04EB81015D +:10A9D0000F7906F8017DC988F4E784F804189BB262 +:10A9E000C5E70C9A0C920146009A9C468DE7ACEBA9 +:10A9F00005035719BDF81000BAB29BB200920025AA +:10AA00000B9A5A458DD8014648E78C4527BFACEBD9 +:10AA100001032846A1EB0C002B460A9D27BF9BB2E1 +:10AA2000099180B2CDF824C0FF2D099D02EB0507E6 +:10AA3000BDB200952ED15E46009DAA4240F08380B3 +:10AA4000099A8C450BEB420BD9D3189A04991288BA +:10AA5000521A16990BEB420B089A01328A4208925D +:10AA600040F09180BDF87050BDF868C0049BA5EB24 +:10AA70000C05ADB2002D08BF19460D9B18BF002173 +:10AA8000013389B20D9300E734E701202EE701205E +:10AA9000FBF7FFFFD946009DAA42D1D0551C2244A6 +:10AAA00092F804E8069A0EEB4E0E17957244129235 +:10AAB000B9F80020129F161297F802A0D5100E9F29 +:10AAC00006F0F80605F0FC05D2001AFB07FA46EA84 +:10AAD00056160F9F45EA9515D2B206FB07A6129FA0 +:10AAE00042EA521297F801A0B6B20E9F1AFB07FA7B +:10AAF0000F9F05FB07A5069F06F1010A17F80EE058 +:10AB0000ADB20E9F0AEB162605F1010A1EFB07FEE9 +:10AB10000F9F0AEB152A06F4784602FB07E24FEA7C +:10AB20005A1A92B20AF4FC6A02F1010E0EEB122ECE +:10AB3000BDF85C20CEF3C42E4EEA060646EA0A06AD +:10AB400029F8026BA7E702F1010E2244069F92F852 +:10AB50000458069A05EB450502EB050A134A9AF8D4 +:10AB6000029002EA09299AF80120D20002F4FC625C +:10AB700049EA020217F8059042EAD90226F8022BA8 +:10AB80001FFA8EF258E7BDF81000BDF86C502D1A70 +:10AB9000ADB2002D18BF002032E7054B18680368DE +:10ABA000DB6A98471FB0BDE8F08F00BF00F8FFFFD9 +:10ABB00034E701202DE9F04F91B09B461646B3F9DA +:10ABC00000200DF12808B3F90230BDF96C9004465D +:10ABD000BDF9707040460D465946ADF82820ADF8D5 +:10ABE0002A30ADF82C90ADF82E70F5F77FF931468C +:10ABF0004046F5F77BF9744B1888744B02B21988FC +:10AC0000BDF928300EB2002B07DABDF82CC0634422 +:10AC1000ADF82C300023ADF82830BDF92830BDF94F +:10AC20002CC0D21A9445C4BFC21AADF82C20BDF96D +:10AC30002A20002A07DABDF82EC06244ADF82E2083 +:10AC40000022ADF82A20BDF92AA0BDF92E20A6EBDE +:10AC50000A06B242C4BFA1EB0A02ADF82E205C4A3C +:10AC60001278A2B9BDF92C6086424046039314BF06 +:10AC700000260126F5F77DF9039B60B100232380B0 +:10AC80006380A3802046E38011B0BDE8F08FBDF95A +:10AC90002E608E42E9E7BDF92C200EA90E900CA87B +:10ACA0000592BDF92E20ADF83C900692BBF800202D +:10ACB000ADF83E709B1A1BB20393BBF80230DFF86D +:10ACC00018B1AAEB030A0FFA8AF30493039BADF8B9 +:10ACD0003030049BADF83230059BADF83430069B24 +:10ACE000ADF83630F8F710FC4046F8F7E5FB0EA853 +:10ACF000F8F7E2FB374B2846BDF93CA01B880793C9 +:10AD00002B681B6B9847BDF83250BDF93030814637 +:10AD1000DBF800001AFB05331A9D05EB43050368B9 +:10AD20001B6B98470746DBF80000BDF92810BDF9FA +:10AD30002A200368099108929B6B984710F0010F35 +:10AD4000DDE9082112D0DBF80000BDF934200368EA +:10AD50000092DE6E2B4698E80600B047039B2380E6 +:10AD6000049B6380059BA380069B8BE709FB02F293 +:10AD7000BDF9363002EB41010F4466B1079A9245A6 +:10AD800009D1DBF8000009FB03F329460268566B82 +:10AD90003A46B047E2E70AFB03F34FEA4A06DFF818 +:10ADA00038B005EB43084545D8D2DBF8000029460A +:10ADB000BDF93430354402685B00D2F834A03A461D +:10ADC000D0474F44EFE700BF28E701202AE70120E2 +:10ADD0002CE701202EE7012034E70120F0B50646DC +:10ADE00087B00C4617461D4633B30846F5F7C1F841 +:10ADF00010BB206804AB61681B4C03C304A8F8F7C0 +:10AE00005BFB206803689B6B9847FF2D16D010F002 +:10AE1000080F206815D000240168BDF81230BDF875 +:10AE20001020CDE90254BDF816400194BDF814403D +:10AE300000940C6E3946A04707B0F0BD10F0020F29 +:10AE4000E7E703689B6A9847084B014630461A8833 +:10AE50003368CDE900755D6A04ABA84720680368D4 +:10AE6000DB6A9847E8E700BF34E701202EE70120BE +:10AE70002DE9F0479DF82470884614461D46089E2B +:10AE8000002F00F0AB801846F5F773F8002840F06B +:10AE9000A580B5F90010FF2FB5F90230B5F904000F +:10AEA00004FB0313B5F90650A4EB000208EB4301C1 +:10AEB00004FB05F54FEA162801EB45054AD0BCB264 +:10AEC000C7F1FF0CC6F3074E5FFA88F7F3B24000F4 +:10AED0000EFB04FE67434FEA420863431FFA8CFCF3 +:10AEE000A9427BD201EB0009494531D20A881412EC +:10AEF000D61004F0F804D20006F0FC06D2B244EA00 +:10AF0000541442EA521214FB0CF446EA961612FB51 +:10AF10000CF216FB0CF674441A44A4B23E4492B2EE +:10AF200004F1010AB6B20AEB142402F1010A0AEB99 +:10AF3000122204F47844C2F3C4222243741C04EBAA +:10AF40001626760906F4FC66324321F8022BCBE77D +:10AF50004144C5E77309224FC6F3C40608EA070750 +:10AF600003F4FC633B43E70743EA06039BB20BD5BC +:10AF700040005200A94231D20C18A14202D221F85D +:10AF8000023BFAE71144F5E78E0708D066000A464F +:10AF9000AA4202D213803244FAE702310138C207D2 +:10AFA0000BD500F100426600013A01EB4202AA42D1 +:10AFB00002D213803244FAE7013878B1401043EAF4 +:10AFC000034380006400A94208D20E180A46B24228 +:10AFD00002D242F8043BFAE72144F4E7BDE8F087E7 +:10AFE00000F8FF000022124942600160C0E902221D +:10AFF000C0E90422C0E90622C0E90822C0E90A2209 +:10B00000C0E90C22C0E90E22C0E91022C0E91222D8 +:10B01000C0E91422C0E91622C0E91822C0E91A22A8 +:10B02000C0E91C22C0E91E22C0F88020704700BF82 +:10B0300028CA03082DE9F04F8DB00D460446994605 +:10B04000086808AB496803C310680AAB516803C3BA +:10B0500008A8F8F731FA29460AA8674DF8F754FA14 +:10B06000BDF92820BDF92A30BDF82410286811FB4D +:10B070000321BDF92C80BDF92E6004EB8104BDF8DD +:10B0800020100A44ADF82820BDF822201344ADF862 +:10B090002A3003689B6B9847B9F1FF0F19D110F064 +:10B0A000200F286818D000250168B6B2BDF82A30F4 +:10B0B000BDF828200196CDE90395BDF824500295EE +:10B0C0001FFA88F500950D6D2146A8470DB0BDE823 +:10B0D000F08F10F0400FE4E703689B6A98474749F8 +:10B0E000BDF92A200B888A46BDF9285003FB02527D +:10B0F000734300EB420000EB430307934FEA48031E +:10B100000693079B984270D2069B214600EB030BE7 +:10B1100058455DD251F8044B230E14D0FF2B4FEA53 +:10B12000142C12D1B9F1FF0F0FD163092CF4FF6C6D +:10B13000C4F3C40403F4FC632CF0070C43EA0C0CC6 +:10B140004CEA040404800230E2E709FB03F30788B9 +:10B15000C4F3074E5FFA8CFC5A1C3E12FD1002EB42 +:10B16000232206F0F806FF0005F0FC05121246EA5D +:10B17000561693B2D243FFB21EFB03FED2B21CFBA3 +:10B1800003FCE4B206FB02E645EA951514FB03F462 +:10B1900047EA5717B6B205FB02C507FB024706F19F +:10B1A000010EADB2BFB20EEB162605F1010C06F48E +:10B1B000784E7E1C0CEB152506EB17266D09C6F3A1 +:10B1C000C42605F4FC6546EA0E062E430680BAE75F +:10B1D000BAF80030BDF92440A3EB0803A4EB08043F +:10B1E00000EB430001EB84048BE7034B1868036812 +:10B1F000DB6A98476AE700BF34E701202EE70120A9 +:10B200002DE9F04385B010680C4651686D4616462E +:10B2100003C51868596803C568462E4DF8F74CF900 +:10B22000314602A82C4EF8F76FF9BDF90820BDF998 +:10B230000A30BDF80410286811FB0321BDF90C7019 +:10B24000BDF90E8004EB8104BDF800100A44ADF88E +:10B250000820BDF802201344ADF80A3003689B6A49 +:10B2600098473388BDF90A204FEA470CBDF908100A +:10B27000DFF868E003FB021208FB03F300EB420077 +:10B2800000EB430398421DD200EB0C0840450FD25F +:10B2900054F8041B4FEA51190EEA1122C1F3C401FC +:10B2A00009F4FC6942EA09020A4320F8022BEDE79F +:10B2B0003288D21B00EB4200BDF90420D21B04EB04 +:10B2C0008204DFE728680368DB6A984705B0BDE8B9 +:10B2D000F08300BF34E701202EE7012000F8FFFFD4 +:10B2E0002DE9F0478EB00E4604461D4608680AABAD +:10B2F0004968DFF8D481DFF8D49103C310680CAB40 +:10B30000516803C30AA8F8F7D7F831460CA8F8F734 +:10B31000FBF8BDF93020BDF93230BDF82C10D8F85B +:10B32000000011FB0321BDF93470BDF9366001EB5B +:10B3300041010C44BDF828100A44ADF83020BDF896 +:10B340002A201344ADF8323003689B6B9847FF2DD9 +:10B3500024D110F0010FD8F8000022D000214FF0C6 +:10B36000010ED0F800C0B6B2CDF818E0BFB2BDF8FB +:10B370003230BDF83020CDE90711B9F800E003956F +:10B3800001960097CDE9041EBDF82C1002912146CC +:10B39000DCF84050A8470EB0BDE8F08710F0040F6D +:10B3A000D9E703689B6A9847B9F80030BDF93220A5 +:10B3B0004FEA470EBDF930105E43BDF92CC0FF2D9A +:10B3C00003FB0212ACEB070CA3EB070700EB4200F8 +:10B3D0000CEB4C0C00EB46064FEA470749D0EB4319 +:10B3E0001FFA85F9DBB2B04266D200EB0E0A504577 +:10B3F000214604F103045BD2028814F8011C4FEAD1 +:10B40000222811FB09F1D51008F0F808D20005F048 +:10B41000FC0548EA581845EA951508FB031814F886 +:10B42000021CD2B211FB09F11FFA88F842EA52124B +:10B4300005FB031514F8031C11FB09F1ADB202FB67 +:10B44000031208F1010192B201EB1828511C08F413 +:10B45000784801EB1222691C01EB1525C2F3C422C6 +:10B460006D0942EA080205F4FC652A4320F8022B24 +:10B47000BDE7144AB0421FD200EB0E05A842214698 +:10B4800004F1030410D214F8023C14F8011CDB0090 +:10B4900002EA012103F4FC630B4314F8031C43EAA2 +:10B4A000D10320F8023BE9E7384401EB0C04E1E763 +:10B4B000384401EB0C0496E7034B18680368DB6A19 +:10B4C000984768E700F8FFFF34E701202EE70120E6 +:10B4D000F0B416461C460D46049A012E9DF8143011 +:10B4E0009DF8187012D003D3022E0AD0F0BC70471A +:10B4F0000568CDE90437ED6813462246AC46F0BC3A +:10B50000604721462846F0BCFFF794BD21462846F7 +:10B51000F0BCFFF7E5BE00002DE9F04F93B0814687 +:10B520008846106851680EAC16469DF870A06B4FA7 +:10B5300003C4186810AC596803C40EA8F7F7BCFF21 +:10B54000314610A8664EF7F7DFFFBDF94020BDF980 +:10B550004230BDF83C10306811FB0321BDF9444076 +:10B56000BDF946508944BDF838100A44ADF8402072 +:10B57000BDF83A201344ADF8423003689B6B9847FE +:10B5800010F0800F30681DD000220168A4B2BDF811 +:10B590004030ADB2CDE908220B2207923A880295DD +:10B5A000069201220194CDE904A2BDF83C20039249 +:10B5B000BDF8422000924246CC6B4946A04713B0EA +:10B5C000BDE8F08F03689B6A98473B88BDF942202D +:10B5D0004FF0040EBDF940105D4303FB021200EB77 +:10B5E000420000EB45020C92BDF93C20121B0D926B +:10B5F00062001C1B0A9263000B930C9B984266D25C +:10B600000A9B00EB030B58455CD219F8013B1EFB6B +:10B6100003E358F80320110E12D0FF294FEA122736 +:10B6200010D1BAF1FF0F0DD1530927F4FF67C2F310 +:10B63000C40203F4FC6327F007071F433A43028068 +:10B640000230E0E70AFB01F10688C2F3074CD2B2F0 +:10B650004B1C3512F41003EB212305F0F805F6001E +:10B6600004F0FC041B12F6B299B2DB4345EA55150F +:10B670001CFB01FCDBB212FB01F246EA561605FB8D +:10B6800003C5FFB206FB032244EA941417FB01F73B +:10B69000ADB292B204FB037405F1010C571C0CEB24 +:10B6A000152507EB1227A4B205F47845C7F3C42784 +:10B6B0003D43671C07EB1424640904F4FC64254330 +:10B6C0000580BDE70B9B18440D9B994495E7044BFF +:10B6D00018680368DB6A984771E700BF2EE701200E +:10B6E00034E701202DE9F04F87B080460D4614461F +:10B6F0009DF84060002E00F0B980106802AF5168DC +:10B7000003C7186804AF596803C702A8F7F7D4FE47 +:10B71000214604A8F7F7F8FEBDF91020BDF9123054 +:10B72000BDF80C40BDF9167014FB032108EB0104B1 +:10B73000BDF80810BDF914800A444FEA480AADF874 +:10B740001020BDF80A201344ADF81230494B186898 +:10B7500003689B6A9847484BBDF91210FF2E1A8860 +:10B76000BDF910C002FB01C102FB07F200EB410072 +:10B7700005F104011D465AD0C6F1FF0E00EB42024E +:10B78000B6B201931FFA8EFE82426AD900EB0A0B11 +:10B79000834540D9058814F8013B2F1231F8133046 +:10B7A0004FEAE50907F0F807ED004FEA232C09F00E +:10B7B000FC0917FB0EF7EDB219FB0EF90CF0F80CB3 +:10B7C00015FB0EF50CFB067CDF10DB001FFA8CFC72 +:10B7D00007F0FC07DBB207FB06970CF1010903FB3E +:10B7E000065309EB1C2C9BB20CF47849BFB203F151 +:10B7F000010C0CEB132CCCF3C42C4CEA090C07F114 +:10B80000010909EB17277F0907F4FC674CEA070CCD +:10B8100020F802CBBCE7019B1B88A3EB080300EBDD +:10B820004300BDF90C30A3EB08031C44ACE700EB6C +:10B830004202824215D900EB0A06864206D914F864 +:10B84000013B31F8133020F8023BF6E72B88A3EBDD +:10B85000080300EB4300BDF90C30A3EB08031C44C4 +:10B86000E7E7044B18680368DB6A984707B0BDE850 +:10B87000F08F00BF34E701202EE701202DE9F04FC3 +:10B8800091B080460F4614469DF86850002D51D067 +:10B8900010680CAE5168DFF8009203C618680EAE4F +:10B8A000596803C60CA8F7F707FE21460EA8F7F75C +:10B8B0002BFEBDF93820BDF93A30BDF83410D9F867 +:10B8C000000011FB0321BDF93C60BDF93EA008EB6F +:10B8D0000104BDF83010DFF8C4810A44ADF8382007 +:10B8E000BDF832201344ADF83A3003689B6B98479B +:10B8F00010F0800FD9F800001FD000220168B6B206 +:10B90000BDF83830CDE908220B220792B8F80020A4 +:10B91000019606920122CDE90452BDF8342003922B +:10B920001FFA8AF20292BDF83A2000923A46CD6B95 +:10B930002146A84711B0BDE8F08F03684FEA4609D9 +:10B940009B6A9847B8F80020BDF93A30FF2DBDF941 +:10B9500038100AFB02FA02FB031300EB430062D02B +:10B960006FEA050C00EB4A03ADB2CDF82C805FFA0C +:10B970008CFC0A930A9B984280F0858000EB090BAF +:10B98000584546D214F801EB0323042213FB0E2E74 +:10B99000038807EB0E0A1912DA1017F80EE09AF86E +:10B9A000028001F0F801DB0002F0FC0218FB05F850 +:10B9B00041EA51111EFB05FEDBB201FB0C819AF836 +:10B9C000018042EA921218FB05F843EA531389B248 +:10B9D00002FB0C8203FB0CE301F1010892B29BB263 +:10B9E00008EB112102F1010803F1010E08EB122806 +:10B9F00001F478410EEB132E4FEA5818CEF3C42E03 +:10BA000008F4FC684EEA010141EA080120F8021B33 +:10BA1000B6E70B9B1B889B1B00EB4300BDF9343042 +:10BA20009B1B1C44A6E700EB4A0A03220425194984 +:10BA3000504528D200EB090C6045234619D293F8F3 +:10BA400000E0013412FB0E5E07EB0E0B17F80EE060 +:10BA50009BF802309BF801B001EA03234FEACB0BBD +:10BA60000BF4FC6B43EA0B0343EADE0320F8023BD2 +:10BA7000E2E7B8F800309B1B00EB4300BDF934301F +:10BA80009B1B1C44D4E7044B18680368DB6A984787 +:10BA900050E700BF00F8FFFF34E701202EE7012048 +:10BAA000F0B40C4611469DF814501A460F78049BCA +:10BAB000012F4E7836D01ED3022F4AD1032E48D8FC +:10BAC000DFE806F00207141604952046F0BCFFF7E5 +:10BAD00009BE806F00283CD00668CDE90435B56802 +:10BAE0001346AC460A462146F0BC6047C06FF1E7FA +:10BAF000D0F88000EEE7032E2BD8DFE806F002072F +:10BB00000E1004952046F0BCFFF706BD806F00B311 +:10BB10000668CDE90435F568E2E7C06FF7E7D0F8CD +:10BB20008000F4E7032E14D8DFE806F002070E10B9 +:10BB300004952046F0BCFFF7A1BE806F48B10668AF +:10BB4000CDE904353569CBE7C06FF7E7D0F8800061 +:10BB5000F4E7F0BC704700002DE9F04F87B00446D1 +:10BB60000E461068516802AD17469DF840A0DFF8F8 +:10BB7000309203C5186804AD596803C502A8F7F7E9 +:10BB80009BFC394604A8F7F7BFFCBDF91020BDF9AE +:10BB90001230BDF80C10BDF9148011FB0321BDF962 +:10BBA000165004EB41040E44BDF808100A44ADF8E9 +:10BBB0001020BDF80A201344ADF81230774B1868F6 +:10BBC00003689B6A9847B9F800B0BDF91230BAF122 +:10BBD000FF0FBDF9102005FB0BF50BFB032300EB5A +:10BBE00043004FEA4803009369D000EB450B5845EA +:10BBF00080F0CC80009B3146C3180193019B984292 +:10BC00004FD211F8012B002A48D00AFB02F2531C34 +:10BC100003EB12231B1241D002889EB2B4F800C07D +:10BC2000DB431512DBB24FEA2C2705F0F8054FEA8B +:10BC3000E20E15FB03F507F0F807D2000EF0FC0E3C +:10BC400007FB06574FEAEC05D2B24FEACC0C05F0E1 +:10BC5000FC051EFB03FEBFB212FB03F25FFA8CFC75 +:10BC600005FB06E507F1010E0CFB062C0EEB172772 +:10BC70001FFA8CFC07F4784EADB20CF1010707EB0C +:10BC80001C27C7F3C42747EA0E0705F1010E0EEB88 +:10BC900015256D0905F4FC652F4307800230023439 +:10BCA000ACE7B9F80030BDF90C60A3EB0803A6EBD4 +:10BCB000080600EB430004EB46040E4497E700EB54 +:10BCC0004505A84262D2009B314600EB030B584564 +:10BCD0004ED211F8013B2BB1FF2BB4F800E004D198 +:10BCE000A0F800E002300234F1E702889FB2DB43A3 +:10BCF0004FEA2E2C1612DBB20CF0F80C06F0F80608 +:10BD00004FEAE20AD20016FB03F60AF0FC0AD2B2AE +:10BD10000CFB076C4FEAEE061AFB03FA4FEACE0E55 +:10BD20001FFA8CFC06F0FC0612FB03F35FFA8EFE92 +:10BD300006FB07A60CF101020EFB0733B6B29BB25D +:10BD400002EB1C2C06F1010A0CF4784203F1010C01 +:10BD50000AEB16260CEB132C7609CCF3C42C06F454 +:10BD6000FC664CEA020C4CEA060CA0F800C0B9E7ED +:10BD7000B9F80030BDF90C60A3EB0803A6EB080688 +:10BD800000EB430004EB46040E449AE7034B1868AB +:10BD90000368DB6A984707B0BDE8F08F34E70120FD +:10BDA0002EE701202DE9F04F89B082460F469146DB +:10BDB0009DF84C609846129C002E3DD00846FAF73C +:10BDC0004BFE05463846FAF77BFEADF80E003846C6 +:10BDD000ADF80890ADF80C50ADF80A80FAF728FFDE +:10BDE00005463846FAF754FF81463846FAF7A4FF6D +:10BDF0000B2821D8DFE800F0BEAE0620202020204E +:10BE0000202020B5B04B186803689B6B9847FF2E25 +:10BE100001D1830606D53346224602A92846FFF7FC +:10BE200009F909E03846FAF7CBFE40B9234602AAE1 +:10BE300029465046FFF7E4F909B0BDE8F08F0DF14F +:10BE40001808394604AF4046FAF76EFE98E803003A +:10BE500087E8030038462146F4F748F83846F4F7F7 +:10BE600088F80028D7D1BDF91230B4F902209342E6 +:10BE700012DD9B1AB4F90000B4F90410ADF81800F3 +:10BE80002846ADF81A204246ADF81C1002A9ADF8BC +:10BE90001E303346FFF7CEF8BDF91030B4F900205C +:10BEA000934212DD9B1ABDF91200BDF91610ADF8D0 +:10BEB00018204246ADF81A002846ADF81C30FF2382 +:10BEC000ADF81E1002A9FFF7B5F83B4602AA2946B5 +:10BED0005046FFF795F9A2882388BDF81410134443 +:10BEE000BDF810200A449BB292B218B211B2884237 +:10BEF00012DD9B1ABDF91600BDF912604246ADF87D +:10BF0000181002A9ADF81C30FF23ADF81E0028461A +:10BF1000ADF81A60FFF78EF8E2886388BDF8161056 +:10BF20001344BDF812200A449BB292B218B211B267 +:10BF3000884281DD9B1AB4F90060B4F904004246DE +:10BF4000ADF81E30FF23ADF81860ADF81A10ADF84B +:10BF50001C0062E73346224602A92846FFF7C0F9D3 +:10BF60006AE7CDE9004602AB4A4629465046FFF74C +:10BF700097FD61E73846FAF723FE50B9DAF800304A +:10BF800002AA2946CDE900605046DE682346B04744 +:10BF900052E70DF11808394604AF4046FAF7C4FDE0 +:10BFA00098E8030087E8030038462146F3F79EFF30 +:10BFB0003846F3F7DEFF38B12346009602AA494619 +:10BFC0002846FFF7C9FD37E7DAF8003002AA29460C +:10BFD000CDE900605046D3F80CB03B46D847BDF9D8 +:10BFE0001230B4F90220934213DDB4F900009B1A19 +:10BFF000B4F90410ADF818002846ADF81A2002AACA +:10C00000ADF81C104946ADF81E3043460096FFF7C8 +:10C01000A3FDBDF91030B4F90020934213DD9B1A43 +:10C02000BDF91200BDF91610ADF8182002AAADF83E +:10C030001A002846ADF81C304346ADF81E1049469C +:10C040000096FFF789FDA2882388BDF814101344D9 +:10C05000BDF810200A449BB292B218B211B28842C5 +:10C0600013DD9B1ABDF91600BDF9127002AAADF8D6 +:10C0700018104946ADF81C304346ADF81E0028465E +:10C080000096ADF81A70FFF767FDE2886388BDF887 +:10C0900016101344BDF812200A449BB292B218B293 +:10C0A00011B288427FF7C8AEB4F900709B1AB4F998 +:10C0B0000400ADF81E304346ADF81870ADF81A1004 +:10C0C000ADF81C00009679E734E7012080B1032920 +:10C0D0001CD8DFE801F0021D081F104B1888C0F3C0 +:10C0E0000E00404270470D4B1888C0F30E00704799 +:10C0F00003290BD801A353F821F000BF11C1020896 +:10C10000E7C0020815C10208DBC002080020704722 +:10C11000012070474FF0FF30704700BF2EE701202D +:10C1200080B103291CD8DFE801F01D021F07104B66 +:10C130001888C0F30E0070470D4B1888C0F30E002E +:10C140004042704703290BD801A353F821F000BFE8 +:10C150002FC1020869C1020839C1020865C102087D +:10C1600000207047012070474FF0FF30704700BF3C +:10C170002EE701202DE9F04F99B00B9114A9BDF9DC +:10C180008840BDF89050BDF894609DF8AC809DF853 +:10C19000B4A081E80C00BDF98C30DDE926210993BB +:10C1A00091F80D909DF8A4304FEA491710939DF82F +:10C1B000B0300C9307F480738F791F4300F09581A2 +:10C1C0004FEA091909F4807391F8079059EA0309B5 +:10C1D00000F08B8191F909309BB2002D00F02E8187 +:10C1E000ED1AADB22B0402D5641B002524B2B2F9BE +:10C1F000001014A8CDF828908C428BB2BFBFED1868 +:10C200002C1BA5B20C4691880B4421461BB20F9300 +:10C21000D38852881344099A1BB20D93BD4B93F8EF +:10C2200000B00BF1FF3CDCF1000343EB0C030E9379 +:10C230005346F6F7B6FF2146ADF85C005346099A1F +:10C2400014A8F6F7CBFF18A921F8020D17A8F7F7E5 +:10C25000F1F8BAF1000F40F0F480BBF1010F40F0AB +:10C26000F880109B002B40F04581BAB205B96EB141 +:10C2700006FB02532898314608FB03F303F0070638 +:10C2800000EBD3032893A9EB01030A9351460E98C0 +:10C29000FFF71CFF81460E98FFF742FF0D9B09999F +:10C2A0008346A3EB010A0A9B9A45A8BF9A46BAF1B6 +:10C2B000000F40F31A81641B0F9B1C1BBC42D4BFB0 +:10C2C000C5EB0405C5EB0705002D40F30E81521B9D +:10C2D00008FB02F30F930B9B002B40F016818E4B53 +:10C2E000186803689B6A984701238C4A03FA08F38D +:10C2F0001188BDF95C20013BDBB20E93BDF95E30C5 +:10C3000001FB032300EB43030A932A9BC3F3074378 +:10C3100013932A9B190ACBB212932A9BDBB2119377 +:10C320002A9B5A097E4B02F4FC620B4013432A9A63 +:10C33000C2F3C40213439BB21093289B1A784FEAAE +:10C34000490305FB19B9324103FB05FB0D93D2B23A +:10C350000BEB490B1AF1FF3AC0F0F580AE46DDF861 +:10C3600028C01EF1FF3EC0F0DD800E9B134055D06B +:10C37000FF200E9990FBF1F14B43FE2B03DD0C994E +:10C38000814200F0C4800C99BCF8004011FB03F31B +:10C3900020129BB200F0F800591C40EA501001EB4B +:10C3A0001323E110C3F30723E40001F0FC019FB263 +:10C3B000DB4341EA9111DBB2E4B20993139B44EAF7 +:10C3C000541413FB07F9099B00FB0390129B13FB0A +:10C3D00007F9099B80B201FB0391119B13FB07F73F +:10C3E000099B89B204FB0374431CA4B203EB102025 +:10C3F00004F1010900F4784009EB1429C9F3C429B8 +:10C4000049EA000001F1010909EB11294FEA591924 +:10C4100009F4FC6940EA0900ACF800004644B6B2F1 +:10C42000072E89BF289B42FA08F200265A788ABF55 +:10C430000133D2B228930D9B9C4492E71C4424B252 +:10C44000D5E6BAF1010F7FF40CAFBBF1010F7FF419 +:10C4500008AFDFF8C4B0DBF8000003689B6B9847B7 +:10C4600010F480735A4606D0B8F1040F40D1109BE7 +:10C47000003318BF012380056ED5B8F1080F6BD1CA +:10C48000002B0CBF4FF400714FF48071002D7FF42E +:10C49000E8AE002E7FF4E5AEE3190F9883423FF734 +:10C4A000E0AE099B0D984B4483423FF7DAAEBFB232 +:10C4B000B8F1080F10684FF0000518BF0137BDF83C +:10C4C0005E30046818BF27F00107BDF85C20CDE995 +:10C4D00005150C9918BFBFB204912A99CDE90079CE +:10C4E000CDE902712899646DA04719B0BDE8F08FBD +:10C4F0000023C0E7082292FBF8F35A1E3A4492FB4D +:10C50000F3F212FB03F292B2B0E60B98ECE610984D +:10C5100082E700BF2CE7012034E701202EE701204D +:10C5200000F8FF000F9B53B11E44289BB6B203EBEB +:10C53000D60306F007061A7828933241D2B20A9B36 +:10C540005B440A9306E70B9B002BCED1054B186882 +:10C550000368DB6A9847C8E7002B3FF482AE4FF4CC +:10C56000807193E734E7012038B5154C05462378F0 +:10C57000BFF35B8FDA070BD4204607F0BEFE38B15D +:10C58000204607F0C6FE0F4A0F49104807F0AEFEDE +:10C590000F4C2378BFF35B8FDB070BD4204607F0EB +:10C5A000ACFE38B1204607F0B4FE064A09490A48F5 +:10C5B00007F09CFE054B2B61074B6B6138BD00BF3C +:10C5C0000CE80120000000204F930208AC0000207E +:10C5D00010E801204D930208B000002038B5154C3A +:10C5E00005462378BFF35B8FDA070BD4204607F0AC +:10C5F00084FE38B1204607F08CFE0F4A0F491048E0 +:10C6000007F074FE0F4C2378BFF35B8FDB070BD46E +:10C61000204607F072FE38B1204607F07AFE064A3F +:10C6200009490A4807F062FE054BAB60074BEB6017 +:10C6300038BD00BFE4E7012000000020539302084A +:10C6400084000020E8E701205193020888000020C0 +:10C6500010B50446FFF788FF2046BDE81040FFF7FD +:10C66000BDBF000038B5154C05462378BFF35B8F7E +:10C67000DA070BD4204607F040FE38B1204607F019 +:10C6800048FE0F4A0F49104807F030FE0F4C237840 +:10C69000BFF35B8FDB070BD4204607F02EFE38B1CB +:10C6A000204607F036FE064A09490A4807F01EFEF2 +:10C6B000054B2B62074B6B6238BD00BF14E80120AD +:10C6C0000000002047930208B400002018E8012071 +:10C6D00045930208B800002038B5154C054623786C +:10C6E000BFF35B8FDA070BD4204607F006FE38B1A4 +:10C6F000204607F00EFE0F4A0F49104807F0F6FDDE +:10C700000F4C2378BFF35B8FDB070BD4204607F079 +:10C71000F4FD38B1204607F0FCFD064A09490A48F5 +:10C7200007F0E4FD054BAB61074BEB6138BD00BF83 +:10C73000ECE70120000000204B9302088C00002051 +:10C74000F0E70120499302089000002010B504464C +:10C75000FFF788FF2046BDE81040FFF7BDBF00008F +:10C7600038B5154C05462378BFF35B8FDA070BD439 +:10C77000204607F0C2FD38B1204607F0CAFD0F4A37 +:10C780000F49104807F0B2FD0F4C2378BFF35B8FC1 +:10C79000DB070BD4204607F0B0FD38B1204607F088 +:10C7A000B8FD064A09490A4807F0A0FD054B2B636E +:10C7B000074B6B6338BD00BF24E801200000002058 +:10C7C0003F930208C400002028E801203D9302089E +:10C7D000C800002038B5154C05462378BFF35B8FA1 +:10C7E000DA070BD4204607F088FD38B1204607F061 +:10C7F00090FD0F4A0F49104807F078FD0F4C237841 +:10C80000BFF35B8FDB070BD4204607F076FD38B112 +:10C81000204607F07EFD064A09490A4807F066FDF2 +:10C82000054BAB62074BEB6238BD00BFF4E701205C +:10C83000000000204393020894000020F8E7012044 +:10C84000419302089800002010B50446FFF788FFC6 +:10C850002046BDE81040FFF7BDBF000038B5154CBD +:10C8600005462378BFF35B8FDA070BD4204607F029 +:10C8700044FD38B1204607F04CFD0F4A0F491048DF +:10C8800007F034FD0F4C2378BFF35B8FDB070BD42D +:10C89000204607F032FD38B1204607F03AFD064A3F +:10C8A00009490A4807F022FD054B2B65074B6B65CC +:10C8B00038BD00BF2CE80120000000202F930208A3 +:10C8C000CC00002030E801202D930208D000002089 +:10C8D00038B5154C05462378BFF35B8FDA070BD4C8 +:10C8E000204607F00AFD38B1204607F012FD0F4A36 +:10C8F0000F49104807F0FAFC0F4C2378BFF35B8F09 +:10C90000DB070BD4204607F0F8FC38B1204607F0CF +:10C9100000FD064A09490A4807F0E8FC054BAB64EC +:10C92000074BEB6438BD00BF34E801200000002055 +:10C9300033930208D400002038E801203193020824 +:10C94000D800002038B5154C05462378BFF35B8F1F +:10C95000DA070BD4204607F0D0FC38B1204607F0A8 +:10C96000D8FC0F4A0F49104807F0C0FC0F4C237841 +:10C97000BFF35B8FDB070BD4204607F0BEFC38B15A +:10C98000204607F0C6FC064A09490A4807F0AEFCF3 +:10C99000054B2B64074B6B6438BD00BFFCE70120DF +:10C9A00000000020379302089C00002000E80120CE +:10C9B00035930208A000002038B5154C05462378B1 +:10C9C000BFF35B8FDA070BD4204607F096FC38B133 +:10C9D000204607F09EFC0F4A0F49104807F086FCDE +:10C9E0000F4C2378BFF35B8FDB070BD4204607F097 +:10C9F00084FC38B1204607F08CFC064A09490A48F5 +:10CA000007F074FC054BAB63074BEB6338BD00BF0D +:10CA10001CE80120000000203B930208BC0000201D +:10CA200020E8012039930208C000002010B5044618 +:10CA3000FFF714FF2046FFF785FF2046FFF748FF6A +:10CA40002046BDE81040FFF7B7BF000038B5154CD1 +:10CA500005462378BFF35B8FDA070BD4204607F037 +:10CA60004CFC38B1204607F054FC0F4A0F491048DF +:10CA700007F03CFC0F4C2378BFF35B8FDB070BD434 +:10CA8000204607F03AFC38B1204607F042FC064A3F +:10CA900009490A4807F02AFC054B2B66074B6B66D1 +:10CAA00038BD00BF04E801200000002027930208E1 +:10CAB000A400002008E8012025930208A800002017 +:10CAC00038B5154C05462378BFF35B8FDA070BD4D6 +:10CAD000204607F012FC38B1204607F01AFC0F4A36 +:10CAE0000F49104807F002FC0F4C2378BFF35B8F0F +:10CAF000DB070BD4204607F000FC38B1204607F0D6 +:10CB000008FC064A09490A4807F0F0FB054BAB65EB +:10CB1000074BEB6538BD00BFDCE7012000000020BB +:10CB20002B9302087C000020E0E7012029930208F3 +:10CB30008000002010B50446FFF788FF2046BDE8BE +:10CB40001040FFF7BDBF000038B5154C05462378EF +:10CB5000BFF35B8FDA070BD4204607F0CEFB38B16A +:10CB6000204607F0D6FB0F4A0F49104807F0BEFBDE +:10CB70000F4C2378BFF35B8FDB070BD4204607F005 +:10CB8000BCFB38B1204607F0C4FB064A09490A48F5 +:10CB900007F0ACFB054B2B67074B6B6738BD00BF3D +:10CBA000D4E70120000000201F9302087400002039 +:10CBB000D8E701201D9302087800002038B5154CF5 +:10CBC00005462378BFF35B8FDA070BD4204607F0C6 +:10CBD00094FB38B1204607F09CFB0F4A0F491048E0 +:10CBE00007F084FB0F4C2378BFF35B8FDB070BD47C +:10CBF000204607F082FB38B1204607F08AFB064A40 +:10CC000009490A4807F072FB054BAB66074BEB6618 +:10CC100038BD00BFCCE701200000002023930208AC +:10CC20006C000020D0E70120219302087000002052 +:10CC300010B50446FFF788FF2046BDE81040FFF717 +:10CC4000BDBF10B50446FFF7F3FF2046FFF772FFA4 +:10CC50002046FFF7F9FD2046FFF7FAFC2046FFF7D4 +:10CC600075FD2046BDE81040FFF7E0BE38B50B4C1F +:10CC700005462378BFF35B8FDB070BD4204607F014 +:10CC80003CFB38B1204607F044FB054A05490648FD +:10CC900007F02CFB044BAB6738BD00BFC0E7012099 +:10CCA000000000201B9302086400002038B50B4CE4 +:10CCB00005462378BFF35B8FDB070BD4204607F0D4 +:10CCC0001CFB38B1204607F024FB054A05490648FD +:10CCD00007F00CFB044BEB6738BD00BFC4E7012035 +:10CCE00000000020199302086800002070B50D4D67 +:10CCF00006460D4C2B78BFF35B8F13F0010F0DD15F +:10CD0000284607F0FAFA48B1084B2846236007F096 +:10CD100000FB074A2046074907F0E8FAC6F88040BA +:10CD200070BD00BFC8E701203CE80120DCC7030854 +:10CD3000000000201793020810B50446FFF796FF85 +:10CD40002046FFF7B3FF2046BDE81040FFF7CEBFF7 +:10CD50002DE9F04FDDE90B45BDF924E0002DBDF9CB +:10CD600028B005FB0E4C9DF834909DF838709DF866 +:10CD70003C6002EB0C0A0888C0F2B080AB4540F37F +:10CD8000AD80002CC0F2A880A64540F3A58012F823 +:10CD90000C2033F81280621C00F1A380964540F30A +:10CDA000A080B9F1000F00F09C809AF8012033F8C0 +:10CDB00012C0013500F19980AB4540F39680002FF9 +:10CDC00000F09380002CC0F28E80A64540F38B804B +:10CDD0001AF80E2033F81250013400F18980A6456C +:10CDE00040F38680B9F1000F00F08280D6449EF8AF +:10CDF000012033F812304FEA084428F4FC6819FB8C +:10CE000007FEC7F1100204F0FC64CEF3C70EA2EBDC +:10CE1000090244EA08084FEA0C442CF4FC6C0EEBBF +:10CE2000420204F0FC64CEEB470744EA0C0CCEEB64 +:10CE3000490404FB0CF402FB08481A0423F4FC63C5 +:10CE4000B4B202F0FC62F64313432A0425F4FC65F5 +:10CE5000F6B202F0FC620EFB03832A4307FB0232A8 +:10CE6000C710530D07F0FC07520917FB06F703F430 +:10CE7000FC6322F4FC621A4393B202121D1202F008 +:10CE8000F802C00005F0F80512FB06F2C0B205FB7F +:10CE90000425DA1010FB06F0DB00ADB202F0FC0254 +:10CEA000DBB202FB047203FB04006B1C92B280B283 +:10CEB00003EB1525431C05F4784503EB1023501CA8 +:10CEC00000EB1222C3F3C42352092B4302F4FC6289 +:10CED00013430B80BDE8F08F80465CE784468046B4 +:10CEE00067E7844665E7054676E70346054682E739 +:10CEF000034680E72DE9F04F99B015920993279AE0 +:10CF00009DF8AC3016900D9350680C911268DDE9D5 +:10CF10002813DDE923A500FB031302EB43082A9B3A +:10CF20001B680B932A9B5E680D9B0436DB43DBB2C8 +:10CF30000A930C9B002B03DC159B002B40F32582EE +:10CF40002A9BB3F90810B3F90C20481E571E099B01 +:10CF5000002B40F3E3805FEA2A4C4FEA254306D4D6 +:10CF6000844504DA002B02DBBB42C0F2D8801CF1FE +:10CF7000010C00F1C9806145C0F2C680013300F1A7 +:10CF8000C3809A42C0F2C080DDF824B04746BBF1AE +:10CF9000000F40F3E3802A9A4FEA254C2A9BCAF3FC +:10CFA0000330D2F80CE05FEA2A42C5F303319B68F4 +:10CFB00000F1218103F1FF394A4580F21C81BCF167 +:10CFC000000FC0F218810EF1FF39CC4580F21381B9 +:10CFD0001BB20B9C0CFB032204EB0209A25C36F88B +:10CFE00012E0002800F0FE8099F8012036F81220A7 +:10CFF000119251B109EB030219F8033036F81330DE +:10D000000F93537836F813301293119B10FB01F2F3 +:10D01000129C4FEA034C23F4FC6324F4FC64D2100A +:10D020000CF0FC6CC2EB40094CEA030C129B1B0495 +:10D0300003F0FC6323430A9C534309FB0C334FEA80 +:10D040000E4C2EF4FC6E0CF0FC6C4CEA0E0EC1F192 +:10D05000100CACEB000C02EB4C0CC2EB41020CFBD5 +:10D060000E3C0F9B180423F4FC6300F0FC60184393 +:10D0700002FB00C23888530D520903F4FC6301120D +:10D0800022F4FC624FEAE00E01F0F801C0001A43FE +:10D09000BDF8343011FB04F10EF0FC0E92B21EFB11 +:10D0A00004FEC0B24FEA222C10FB04F00CF0F80C86 +:10D0B0000CFB031CD110D20001F0FC011FFA8CFC08 +:10D0C000D2B201FB03E102FB030389B29AB20CF175 +:10D0D000010303EB1C2C531C03EB12234A1C0CF41E +:10D0E000784C02EB1121C3F3C423490943EA0C0332 +:10D0F00001F4FC610B433B80259B02370BF1FF3BA6 +:10D100009A44269B1D4442E7259B08F102089A4455 +:10D11000269B1D44099B013B099318E723D0099BDB +:10D120002598013B00FB03A000143FF52DAF01390A +:10D130008842BFF629AF269901FB03531B143FF524 +:10D1400023AF013A9342BFF61FAFDDF824E0BDF8EC +:10D150003490CDF83880BEF1000F6CDC099B23EAD7 +:10D16000E37408EB44080C9B002B40F30E81B7EEF0 +:10D17000007A229B30EE040A70EEA40AF0EE626A96 +:10D18000C7EE007A31EE051AFEEEC86A16EE90AAD6 +:10D19000F0EE436AFEEEC86A16EE905A20EEA77AC9 +:10D1A00061EE277A77EE622A37EEC33AFEEEC82A9E +:10D1B000BEEEC83A12EE902AF0EE472A92FBF3F345 +:10D1C00013EE102A2593229BB0EE673A92FBF3F3FD +:10D1D00026930C9B159A013B0C93229B08BF134688 +:10D1E0000993A6E600293FF410AF19F8033036F88A +:10D1F00013300F9309E712F101093FF57DAF4B455D +:10D20000FFF67AAF1CF101093FF576AFCE45FFF688 +:10D2100073AF0D9C1BB202920FFA8EF2009333464D +:10D2200001920B9ACDE90514CDE903C03946169851 +:10D23000FFF78EFD60E72A9B4FEA2A4229140B9CD8 +:10D24000B3F90830CAF3033CC5F3033003FB0121F3 +:10D250000B9A0A44615C36F81110BCF1000F00F023 +:10D260008C80577836F81740139440B1D718D35CA8 +:10D2700036F8133010937B7836F813301493139BE1 +:10D280001CFB00F2149C0EF1FF3E1F0423F4FC6310 +:10D29000D21024F4FC6B07F0FC671F43C2EB4C0375 +:10D2A0001793149B179C1B0403F0FC6343EA0B03C6 +:10D2B0004FEA014B21F4FC61534304FB07370BF0A9 +:10D2C000FC630A9C43EA010BC0F11001109BA1EB27 +:10D2D0000C0C02EB4C0CC2EB40020CFB0B774FEA40 +:10D2E000034C23F4FC6B0CF0FC6C4CEA0B0C02FBC3 +:10D2F0000C770E9A790D12887F0901F4FC6127F4EE +:10D30000FC670F431112BBB201F0F801D71011FBFB +:10D3100004F11812D20007F0FC0700F0F80017FB28 +:10D3200004F7D2B200FB0910D91012FB04F2DB00A3 +:10D3300001F0FC0180B2DBB201FB097103FB0923A0 +:10D34000421C89B29BB202EB10204F1C5A1C07EB07 +:10D35000112100F4784002EB13220E9B4909C2F31D +:10D36000C42201F4FC611043084323F8020B0E931E +:10D37000259B9A44269B1D44EDE600283FF47FAF91 +:10D38000D35C36F81330109379E719B0BDE8F08F0D +:10D390002DE9F047DDE90A48BDF920E0B8F1000FBA +:10D3A000BDF924A008FB0E479DF830509DF834606D +:10D3B00002EB0709088867DBC24565DD002C61DBED +:10D3C000A6455FDDD25D33F812C0621C5FD496457E +:10D3D0005DDD002D5BD099F8012033F8127018F153 +:10D3E000010858D4C24556DD002E54D0002C50DB25 +:10D3F000A6454EDD19F80E2033F81220013407D46B +:10D40000A64505DD25B1CE449EF8010033F8100095 +:10D4100015FB06F44FEA0C434FEA074E2CF4FC6C64 +:10D4200003F0FC63C4F3C7040EF0FC6E27F4FC6742 +:10D4300043EA0C0CC6F110034EEA0707C4EB46069C +:10D440005B1BC4EB450504EB43037D4303FB0C5C12 +:10D45000030420F4FC6003F0FC631843130422F47B +:10D46000FC6203F0FC6304FB00C0134306FB0300F3 +:10D47000430D400903F4FC6320F4FC60184308806A +:10D48000BDE8F0878446A0E707468446A7E707463D +:10D49000A5E70246B2E70246BAE72DE9F04F93B09E +:10D4A000F7EE006A0F92219A109008915068069347 +:10D4B0001268DDE92213DDE91D4600FB031302EBD0 +:10D4C0004309249B1B680793249B5F680437089BD0 +:10D4D000002B03DC0F9B002B40F3B281249BB3F99C +:10D4E0000810B3F90C20481E02F1FF3C069B002BEC +:10D4F00040F3A9805FEA244E4FEA264306D48645CE +:10D5000004DA002B02DB6345C0F29E801EF1010E9F +:10D5100000F18F807145C0F28C80013300F1898069 +:10D520009A42C0F28680DDF818B0C846BBF1000F01 +:10D5300040F3A680249A4FEA264C249BC4F3033080 +:10D54000D2F80CE02214C6F303319B6800F1E380AB +:10D5500003F1FF3A524580F2DE80BCF1000FC0F2C9 +:10D56000DA800EF1FF3AD44580F2D5801BB2079DD8 +:10D570000CFB032205EB020AAA5C37F812E0002834 +:10D5800000F0C0809AF8012037F812200B9251B1B8 +:10D590000AEB03021AF8033037F813300993537873 +:10D5A00037F813300C930B9B10FB01F20C9D4FEAE4 +:10D5B000034C23F4FC6325F4FC65D2100CF0FC6CE6 +:10D5C000C2EB400A4CEA030C0C9B1B0403F0FC6307 +:10D5D0002B4353430AFB0C334FEA0E4C2EF4FC6EE4 +:10D5E0000CF0FC6C4CEA0E0EC1F1100CACEB000C14 +:10D5F00002EB4C0CC2EB41020CFB0E3C099B1804E5 +:10D6000023F4FC6300F0FC60184302FB00C2530DDE +:10D61000520903F4FC6322F4FC621A43A8F80020C8 +:10D620001F9B08F102080BF1FF3B1C44209B1E448A +:10D630007CE71F9B09F102091C44209B1E44069BAA +:10D64000013B069352E720D0069B1F98013B00FB4D +:10D65000034000143FF567AF01398842BFF663AF5E +:10D66000209901FB03631B143FF55DAF013A934220 +:10D67000BFF659AFDDF81880CA46B8F1000F67DC75 +:10D68000069B23EAE37509EB4509089B002B40F351 +:10D69000D78030EE040A1C9B70EEA40AB0EE626ADA +:10D6A000C6EE807A31EE051ABEEEC86A16EE104A52 +:10D6B000B0EE436ABEEEC86A16EE106A20EEA77A94 +:10D6C00061EE277A77EE622A37EEC33AFEEEC82A79 +:10D6D000BEEEC83A12EE902AF0EE472A92FBF3F320 +:10D6E00013EE102A1F931C9BB0EE673A92FBF3F3E4 +:10D6F0002093089B0F9A013B08931C9B08BF13467D +:10D700000693E4E600293FF44EAF1AF8033037F8E9 +:10D710001330099347E712F1010A81D45345FFF60C +:10D720007FAF1CF1010A3FF57BAFD645FFF678AF1E +:10D730001BB2CDE9022C0FFA8EF200933B46019208 +:10D74000079ACDE9040141461098FFF721FE67E7EB +:10D75000249B22143114079DB3F90830C4F3033E0F +:10D76000C6F3033003FB0121079A0A44695C37F8CA +:10D770001110BEF1000F5CD092F801C037F81C50B8 +:10D780000D9550B102EB030CD35C37F813300A93BC +:10D790009CF8013037F813300E930D9B1EFB00F2FE +:10D7A0000E9D08F1FF384FEA034C23F4FC63D210BE +:10D7B00025F4FC6B0CF0FC6C4CEA030CC2EB4E0342 +:10D7C00011930E9B119D1B0403F0FC6343EA0B03B2 +:10D7D0004FEA014B21F4FC61534305FB0C3C0BF079 +:10D7E000FC6343EA010BC0F110010A9BA1EB0E0E92 +:10D7F00002EB4E0EC2EB40020EFB0BCC4FEA034B8A +:10D8000023F4FC6E0BF0FC6B4BEA0E0E02FB0ECC0D +:10D810004FEA5C534FEA5C1C03F4FC632CF4FC6C91 +:10D8200043EA0C0C1F9B1C44209B2AF802CB1E448D +:10D8300023E70028B1D0D35C37F813300A93ACE764 +:10D8400013B0BDE8F08F2DE9F04F0D8887B0EF10D1 +:10D8500003914FEA252ABDF94090ED0007F0FC073F +:10D860000AF0F80ABDF944B0EDB201979DF85040B6 +:10D870000295019D02992D029DF854E09DF8588073 +:10D8800045EA0A45DDE912060D4306FB0907002EAD +:10D89000059502EB070CC0F2B680B34540F3B380A8 +:10D8A0000028C0F2AE80814540F3AB80D75D07EB26 +:10D8B00047071F44421C00F1A980914540F3A68010 +:10D8C000002C00F0A3809CF8015005EB45051D4499 +:10D8D000013600F19F80B34540F39C80BEF1000FFC +:10D8E00000F098800028C0F29380814540F390803A +:10D8F0001CF8096006EB46061E44013000F18D80DD +:10D90000814540F38A80002C00F08780E14499F83B +:10D91000012002EB42021344A4B297F802C01FFA9E +:10D920008EFE019904FB0EFB2401CBEB0E1EC4F509 +:10D930008079A4EB0B041FFA8EF0A2B2AC78A9EBAD +:10D9400000091FFA88FE54436FEA08081FFA89F994 +:10D950005FFA88F809FB0C4496F802C01AFB08FA33 +:10D9600000FB0C4493F802C00BFB0C4C7C783F7816 +:10D97000CCF3072C0CFB0EAC95F801A02D7802FB24 +:10D980000AFA1FFA8CFC6A43357809FB04AA7478FA +:10D9900009FB072200FB04AA5C7800FB05201B782A +:10D9A0000BFB04A411FB08FA0BFB030B029BC4F353 +:10D9B000072413FB08F8CBF3072B04FB0EA40CF190 +:10D9C00001030BFB0E8EA4B21FFA8EFE03EB1C2C80 +:10D9D00004F1010A0CF478430EF1010C0AEB142453 +:10D9E0000CEB1E2C6409CCF3C42C04F4FC644CEA4C +:10D9F000030C039B4CEA040CA3F800C007B0BDE87D +:10DA0000F08F05AF56E705AD2F4661E705AD5FE73F +:10DA100005AE72E705AB1E467EE705AB7CE72DE958 +:10DA2000F04F95B012920993239A9DF89C30139071 +:10DA30000F9350680E911268DDE9241300FB031365 +:10DA400002EB43030A93269B1B680D93269B5C689D +:10DA50000F9B0434DB43DBB20B930E9B002B03DCE8 +:10DA6000129B002B40F35582269BB3F90810B3F9A3 +:10DA70000C20481E551E099B002B40F3F9801F9E69 +:10DA8000209B36144FEA234306D4864204DA002B47 +:10DA900002DBAB42C0F2ED80013600F1DA80B14228 +:10DAA000C0F2D780013300F1D4809A42C0F2D18015 +:10DAB000099B11930A9B0C93119B002B40F3FA8056 +:10DAC0002698209B209AC6681D141F98C2F3033124 +:10DAD0001F9B269A0014C3F30333926800F13E8122 +:10DAE000571EB84280F23A81002DC0F23781771E6E +:10DAF000BD4280F2338112B205FB02000D9D15F884 +:10DB000000A02E180AEB4A0A04EB0A05002B00F0CD +:10DB1000178196F801C00CEB4C0CA444002900F0CE +:10DB20001781B018B25C407802EB420200EB400073 +:10DB3000224420449BB29CF8027089B295F802B04E +:10DB40000C9E03FB01F91B01B6F800E0C9EB0111C3 +:10DB5000C3F58078A3EB0903BDF83C6089B214F8E3 +:10DB60000AA09BB2A8EB01085F431FFA88F8109344 +:10DB70000B9B08FB0B7792F802B001FB0B7790F838 +:10DB800002B009FB0B774FEA2E2B0BF0F80BC7F313 +:10DB900007271BFB03FB109B07FB06B795F801B09B +:10DBA0009CF801509CF800C0BFB25D430B9B08FB82 +:10DBB0000B5592F801B001FB0B5590F801B009FB31 +:10DBC0000B554FEAEE0B4FEACE0E0BF0FC0BC5F3F4 +:10DBD00007255FFA8EFE1BFB03FB109B03FB0CF378 +:10DBE00092F800C005FB06B508FB0A33ADB201FB95 +:10DBF0000C3390F800C005F1010B09FB0C3C0B9BAA +:10DC00000BEB15251EFB03FECCF3072C7B1C6D09CB +:10DC10000CFB06E603EB172705F4FC65B6B207F428 +:10DC20007843771C07EB1627C7F3C4271F430C9BC9 +:10DC30003D431D800C9B219A02330C931F9B134480 +:10DC4000229A1F93209B13442093119B013B119315 +:10DC500032E71F9B219E3344229E1F93209B334417 +:10DC60002093099B013B09930A9B02330A9302E725 +:10DC700027D0099B2198013B1F9D00FB03500014F6 +:10DC80003FF516AF01398842BFF612AF22992098AE +:10DC900001FB03031B143FF50BAF013A9342BFF6A0 +:10DCA00007AF099BBDF83CA011930A9B0C93119BF5 +:10DCB000002B70DC099B0A9A23EAE37302EB43030F +:10DCC0000A930E9B002B40F32481B7EE007A1E9B33 +:10DCD00030EE040A70EEA40AF0EE626AC7EE007A33 +:10DCE00031EE051AFEEEC86ACDED1F6AF0EE436A0A +:10DCF000FEEEC86ACDED206A20EEA77A61EE277AA3 +:10DD000077EE622A37EEC33AFEEEC82ABEEEC83A74 +:10DD100012EE902AF0EE472A92FBF3F313EE102A4C +:10DD200021931E9BB0EE673A92FBF3F322930E9B76 +:10DD3000129A013B0E931E9B08BF134609938CE673 +:10DD400049B1B25C284602EB42022244AC46F1E6FD +:10DD500028462A46EEE628462A46F7E7471C3FF5BE +:10DD600069AFBA42FFF666AF6F1C3FF563AFBE42C4 +:10DD7000FFF660AF0F9F36B212B20290019600928A +:10DD80001398CDE90517CDE90353DDE90C122346BD +:10DD9000FFF759FD4EE7209A2098C2F303311F9DEB +:10DDA000269A00142D141F9BB2F90820C3F30333E5 +:10DDB00002FB00500D9D15F800902E1809EB490943 +:10DDC00004EB0905002B00F09680777807EB4707F6 +:10DDD0002744002900F09780B018B25C407802EB2D +:10DDE000420200EB4000224420449BB20C9E89B2C8 +:10DDF00095F802B0B6F800C003FB01F81B01BE782D +:10DE0000C8EB0111C3F5807EA3EB080314F8099059 +:10DE100089B29BB2AEEB010E5E431FFA8EFE1093E9 +:10DE20000B9B0EFB0B6692F802B001FB0B6690F8A1 +:10DE300002B008FB0B664FEA2C2B0BF0F80BC6F375 +:10DE400007261BFB03FB109B06FB0AB695F801B0E7 +:10DE50007D783F78B6B25D430B9B0EFB0B5592F875 +:10DE600001B001FB0B5590F801B008FB0B554FEAD0 +:10DE7000EC0B4FEACC0C0BF0FC0BC5F307255FFA5B +:10DE80008CFC1BFB03FB109B7B43177805FB0AB53F +:10DE90000EFB0933ADB201FB0733077805F1010B27 +:10DEA00008FB07370B9B0BEB15251CFB03FCC7F38B +:10DEB0000727731C6D0907FB0AC703EB162605F439 +:10DEC000FC65BFB20C9B06F478467A1C02EB172265 +:10DED000C2F3C4221643219A2E4323F8026B0C93FB +:10DEE0001F9B1344229A1F93209B13442093119B42 +:10DEF000013B1193DBE649B1B25C284602EB4202DA +:10DF000022442F4671E728462A466EE728462A46CD +:10DF1000F7E715B0BDE8F08F2DE9F74F0F88BDF991 +:10DF200030E03C02BDF934909DF8400004F4780BD9 +:10DF30007C01FF009DF8446004F47C44FFB24BEA8E +:10DF40000404DDE90EC5274305FB0ECA002D019729 +:10DF500002EB0A087EDBA9457CDDBCF1000F77DB14 +:10DF6000E64575DD12F80A7007EB47071F441CF100 +:10DF7000010272D4964570DD00286ED098F80140F9 +:10DF800004EB44041C4401356BD4A94569DD002E23 +:10DF900067D0BCF1000F62DBE64560DD18F80E507B +:10DFA00005EB45051D441CF101025DD496455BDD82 +:10DFB000002859D0C6449EF8012002EB42021344C7 +:10DFC00080B297F802E0B2B297F800907F7800FB39 +:10DFD00002F60001C6EB0212C0F58078801B1FFA22 +:10DFE00082FC82B2A078A8EB0C0850431FFA88F894 +:10DFF00008FB0E0EA8780CFB00E093F802E006FB8D +:10E000000E0E0EF4784094F800E002FB0EFE08FBC2 +:10E0100009E995F800E00CFB0E9993F800E05B78B5 +:10E0200006FB0E9ECEF3C42E4EEA000E60785043DF +:10E030006A7808FB07000CFB020206FB03235B095E +:10E0400003F4FC634EEA03030B8003B0BDE8F08FDA +:10E0500001AF8CE701AC274695E701AC93E701AD32 +:10E06000A1E701AB1D46ABE701ABA9E72DE9F04FF6 +:10E070008FB00C921D9A0D900A9150680693126809 +:10E08000DDE91E13DDE919B500FB031302EB4303C1 +:10E090000793209B1B680893209B5C6804340A9BB1 +:10E0A000002B03DC0C9B002B40F3D581209BB3F9A4 +:10E0B0000810B3F90C20481E561E069B002B40F397 +:10E0C000B6805FEA2B474FEA254306D4874204DA3D +:10E0D000002B02DBB342C0F2AB80013700F19C8021 +:10E0E000B942C0F29980013300F196809A42C0F2A1 +:10E0F0009380069B0B93079B09930B9B002B40F38C +:10E10000B48020982E14209ACBF30333C7685FEABB +:10E110002B40C5F30331926800F1FB8002F1FF3C14 +:10E12000604580F2F680002EC0F2F38007F1FF3CDC +:10E13000664580F2EE8012B206FB0200089E371898 +:10E14000305C00EB400804EB080C002B00F0D3809F +:10E150007E7806EB46062644002900F0D480B818E5 +:10E16000BA5C407802EB420200EB400022442044BB +:10E170009BB2B77889B29CF802A09CF801C003FB5F +:10E1800001F91B01C9EB0111C3F5807EA3EB090363 +:10E1900089B29BB2AEEB010E5F431FFA8EFE0EFBFF +:10E1A0000A7792F802A001FB0A7790F802A009FB17 +:10E1B0000A7A14F8087096F8008076780AF4784A9B +:10E1C00003FB08F873430EFB078817780EFB0C332C +:10E1D00001FB0788077809FB0787C7F3C42747EACD +:10E1E0000A0792F801A001FB0A3190F801A0099BEF +:10E1F00009FB0A1A4FEA5A1A0AF4FC6A47EA0A07A4 +:10E200001F80099B023309931B9B9B441C9B1D444D +:10E210000B9B013B0B9370E71B9B9B441C9B1D447A +:10E22000069B013B0693079B0233079345E723D0E8 +:10E23000069B1B98013B00FB03B000143FF559AF50 +:10E2400001398842BFF655AF1C9901FB03531B14DB +:10E250003FF54FAF013A9342BFF64BAF069B099390 +:10E26000079B0B93099B002B70DC069B079A23EA04 +:10E27000E37302EB430307930A9B002B40F3EB800D +:10E28000B7EE007A189B30EE040A70EEA40AF0EEA6 +:10E29000626AC7EE007A31EE051AFEEEC86A16EE23 +:10E2A00090BAF0EE436AFEEEC86A16EE905A20EE7F +:10E2B000A77A61EE277A77EE622A37EEC33AFEEE4E +:10E2C000C82ABEEEC83A12EE902AF0EE472A92FB18 +:10E2D000F3F313EE102A1B93189BB0EE673A92FBF0 +:10E2E000F3F31C930A9B0C9A013B0A93189B08BFFB +:10E2F00013460693D3E649B1BA5C604602EB42028C +:10E300002244664634E76046624631E7604662462C +:10E31000F7E710F1010C3FF574AF6245FFF671AFFE +:10E3200016F1010C3FF56DAF6745FFF66AAF3FB2DE +:10E3300012B201970092CDE90431CDE902062346DD +:10E340000D98DDE90821FFF7E7FD5AE7209A4FEA2B +:10E350002B462814CBF30333B2F90820C5F303315D +:10E3600002FB0060089E16F80080371808EB48088A +:10E3700004EB080C002B60D07E7806EB46062644A2 +:10E38000002962D0B818BA5C407802EB420200EB78 +:10E390004000224420449BB2B77889B29CF802A086 +:10E3A0009CF801C003FB01F91B01C9EB0111C3F586 +:10E3B000807EA3EB090389B29BB2AEEB010E5F43F3 +:10E3C0001FFA8EFE0EFB0A7792F802A001FB0A7775 +:10E3D00090F802A009FB0A7A14F8087096F80080F9 +:10E3E00076780AF4784A03FB08F8734356780EFBF4 +:10E3F000078817780EFB0C3301FB0788077801FBB1 +:10E40000063309FB0787C7F3C42747EA0A0790F8D2 +:10E4100001A009FB0A3A0B9B4FEA5A1A0AF4FC6A5C +:10E4200047EA0A0723F8027B0B931B9B9B441C9B28 +:10E430001D44099B013B099314E749B1BA5C60464E +:10E4400002EB420222446646A5E760466246A2E726 +:10E4500060466246F7E70FB0BDE8F08F2DE9F04F58 +:10E4600085B0DDE91074BDF938C00291002C04FBC1 +:10E470000C71BDF93C809DF848609DF84C0002EBA2 +:10E48000010EC0F22281A04540F31F81002FC0F28F +:10E490001A81BC4540F31781525C53F822507A1C14 +:10E4A00000F11681944540F31381002E00F0128193 +:10E4B0009EF8012053F82210013400F10F81A0458D +:10E4C00040F30C81002800F00C81002FC0F2048181 +:10E4D000BC4540F301811EF80C2053F8224001375F +:10E4E00000F10281BC4540F3FF80002E00F0FE8069 +:10E4F000F4449CF8012053F82220B6B280B24FEACF +:10E50000116A00FB06FE36014FEA156BCEEB0010D8 +:10E51000A6EB0E07C6F580734FEA146980B2BFB24E +:10E520001B1A4FEA12680AFB07F69BB20BFB036645 +:10E5300000FB09660EFB0866C6F307260096002E50 +:10E5400000F0BE8005F0FF1C05F47F45029E0BFB2A +:10E550000CFC0BFB05F536884FEA1C2B0CF1011C5B +:10E5600001950BF0FF1BDC444FEA1C2C0CF0FF154F +:10E570000395019D05F5807C0CEB152501F0FF1C32 +:10E5800001F47F410AFB0CFC4FEA152B0AFB01FA50 +:10E590004FEA1C250CF1011C0AF5807105F0FF15EE +:10E5A00001EB1A2A654404F0FF1C04F47F444FEA8F +:10E5B0001A2A09FB0CFC2D0A09FB04F90AF47F4A0C +:10E5C0004FEA1C2105F0FF1509F580740CF1011CC0 +:10E5D00001F0FF117D4304EB192902F0FF1402F44E +:10E5E0007F42614408FB04F44FEA192908FB02F852 +:10E5F000090A220A04F1011401F0FF1107FB0AF7CE +:10E6000002F0FF12144408F58072240A02EB182865 +:10E61000039A04F0FF1402FB03554FEA1828009AEE +:10E6200004FB0E5408F47F48351201FB004105F04D +:10E63000F805090A01F0FF140BF47F4103FB017197 +:10E640000EFB081E09F47F4100FB01E19DF850001C +:10E6500087B2090A7A4301F47F41531C214303EB3B +:10E6600012230A0CC1F307246FEA1323C8B212FB6A +:10E6700007F214FB07F4DBB210FB07F005FB0325E0 +:10E68000F210F60002F0FC02ADB2F6B202FB034259 +:10E6900006FB030394B299B26B1C621C03EB1525B5 +:10E6A0004B1C02EB142203EB112305F478455209AD +:10E6B000C3F3C42302F4FC622B431343029A138076 +:10E6C00005B0BDE8F08F0025E9E600210D46F3E630 +:10E6D0000021F1E63146EFE6002400E7002214466F +:10E6E0000BE70246044608E7002206E7324604E745 +:10E6F0002DE9F04F9FB01B9209932D9A9DF8C430DD +:10E700001D901C935068199112682A9DDDE92E1303 +:10E7100000FB031302EB43030C93309B1B68129323 +:10E72000309B5E68BDF8703004360D93199B002B4A +:10E7300003DC1B9B002B40F38783309BB3F908104D +:10E74000B3F90C20481E571E099B002B40F39481FF +:10E75000299C2B145FEA244C06D4844504DA002B50 +:10E7600002DBBB42C0F289811CF1010C00F1778110 +:10E770006145C0F27481013300F171819A42C0F2A7 +:10E780006E81099B0C9F1A931A9B002B40F3938177 +:10E79000299B4FEA254CC5F30331C3F30332309B69 +:10E7A000D3E9020E299B1B1400F1D68100F1FF383A +:10E7B000434580F2D181BCF1000FC0F2CD810EF152 +:10E7C000FF38C44580F2C88100B2129C0CFB0033B4 +:10E7D00004EB0308E35C56F823304FEA136E002A7B +:10E7E00000F0AF8198F801C056F82C400E94240E2A +:10E7F000159479B108EB000C18F8000056F82000C9 +:10E800000A90000E13909CF8010056F820000F901B +:10E81000000E169092B2159889B2139C02FB01F972 +:10E820001201C9EB0111A2EB0908C2F5807289B28D +:10E830001FFA88F8521A08FB00F092B202FB0E0091 +:10E8400001FB0400169C09FB0400C0F3072000280C +:10E8500000F0FA80BEF1FF0F1BD003F0FF1A03F4A3 +:10E860007F430EFB0AFA0EFB03FE4FEA1A230AF15E +:10E87000011A0EF5807C03F0FF130CEB1E2C5344A1 +:10E880004FEA1C2C1B0A0CF47F4C03F0FF1343EAE5 +:10E890000C03159CFF2C21D00E9C04F0FF1B159C33 +:10E8A00004FB0BFB0E9C04F47F4A159C4FEA1B2EC5 +:10E8B0000BF1011B04FB0AFA0EF0FF1E0AF5807C27 +:10E8C000DE440CEB1A2A4FEA1E2E4FEA1A2A0EF0EB +:10E8D000FF1E0AF47F4A4EEA0A040E94139CFF2C92 +:10E8E00021D00A9C04F0FF1B139C04FB0BFB0A9C29 +:10E8F00004F47F4A139C4FEA1B2E0BF1011B04FB0F +:10E900000AFA0EF0FF1E0AF5807CDE440CEB1A2A90 +:10E910004FEA1E2E4FEA1A2A0EF0FF1E0AF47F4A13 +:10E920004EEA0A040A94169CFF2C21D00F9C04F096 +:10E93000FF1B169C04FB0BFB0F9C04F47F4A169CE8 +:10E940004FEA1B2E0BF1011B04FB0AFA0EF0FF1E0F +:10E950000AF5807CDE440CEB1A2A4FEA1E2E4FEAA1 +:10E960001A2A0EF0FF1E0AF47F4A4EEA0A040F9498 +:10E970000E9C03F0FF1E03F47F4304F0FF1C0A9C6F +:10E9800008FB0CFC02FB0ECC04F0FF1E0F9C01FBED +:10E990000ECC04F0FF1E0E9C09FB0ECC04F47F4E3F +:10E9A0000D9C08FB0EF84FEA1C2C02FB03830A9A0D +:10E9B0000CF0FF1C02F47F4A0F9A01FB0A3302F4A9 +:10E9C0007F410D9A09FB01393B8842434FEA1929DF +:10E9D000501C191209F47F4900EB122001F0F801D4 +:10E9E0004CEA090C6FEA10204FEA1C42CCF3072EC8 +:10E9F000C0B212FB04F25FFA8CFC1EFB04FE01FBAA +:10EA00000021DA101CFB04FCDB0089B202F0FC02DE +:10EA1000DBB202FB00E203FB00C392B21FFA83FCED +:10EA20004B1C03EB11210CF1010303EB1C2301F43C +:10EA30007841C3F3C4230B43511C01EB122252094A +:10EA400002F4FC6213433B802B9B0237299A1A4441 +:10EA50002C9B1D441A9B2992013B1A9394E62B9BF5 +:10EA6000299C1C442C9B1D44099B2994013B099320 +:10EA70000C9B02330C9367E624D0099B2B98013B37 +:10EA8000299C00FB034000143FF57BAE013988420E +:10EA9000BFF677AE2C9901FB03531B143FF571AE03 +:10EAA000013A9342BFF66DAEDDF824B0DDF8309048 +:10EAB000BBF1000F70DC099B23EAE3740C9B03EBB2 +:10EAC00044030C93199B002B40F3BE81B7EE007AF0 +:10EAD000289B30EE040A70EEA40AF0EE626AC7EEDC +:10EAE000007A31EE051AFEEEC86ACDED296AF0EE25 +:10EAF000436AFEEEC86A16EE905A20EEA77A61EEDF +:10EB0000277A77EE622A37EEC33AFEEEC82ABEEEC7 +:10EB1000C83A12EE902AF0EE472A92FBF3F313EE76 +:10EB2000102A2B93289BB0EE673A92FBF3F32C93B9 +:10EB3000199B1B9A013B1993289B08BF1346099305 +:10EB4000F4E500293FF466AE18F8000056F82000FE +:10EB50000A90000E13905DE613F101083FF574AFC3 +:10EB60004045FFF671AF1CF101083FF56DAFC6459A +:10EB7000FFF66AAF1C9C00B202930FFA8EF300906E +:10EB8000019333461D98CDE90514CDE903C23946FA +:10EB9000129AFFF763FC57E7299BC5F30330299CC2 +:10EBA000C3F30332309B2714129CB3F908102B14C3 +:10EBB00001FB0373E718E35C56F823304FEA136C4C +:10EBC000002A00F0378197F801E056F82E401094A3 +:10EBD000240E179470B107EB010E795C56F82110E2 +:10EBE0000B91090E14919EF8011056F82110119105 +:10EBF000090E189192B2179980B2149C02FB00F88A +:10EC00001201C8EB0010A2EB080EC2F5807280B2B0 +:10EC10001FFA8EFE121A0EFB01F192B202FB0C11CA +:10EC200000FB0411189C08FB0411C1F30721002903 +:10EC300000F0F580BCF1FF0F19D003F0FF1A03F4C8 +:10EC40007F430CFB0AFA0CFB03FC4FEA1A230AF180 +:10EC5000011A0CF5807703F0FF1307EB1C275344D0 +:10EC60003F0A1B0A07F47F4703F0FF133B43179C3F +:10EC7000FF2C20D0109C04F0FF17179C6743109CBA +:10EC80004FEA172C04F47F4A179C07F101170CF088 +:10EC9000FF1C04FB0AFABC440AF580774FEA1C2CDF +:10ECA00007EB1A2A0CF0FF1C4FEA1A2A0AF47F4AD3 +:10ECB0004CEA0A041094149CFF2C20D00B9C04F006 +:10ECC000FF17149C67430B9C4FEA172C04F47F4AF0 +:10ECD000149C07F101170CF0FF1C04FB0AFABC445A +:10ECE0000AF580774FEA1C2C07EB1A2A0CF0FF1C60 +:10ECF0004FEA1A2A0AF47F4A4CEA0A040B94189C39 +:10ED0000FF2C20D0119C04F0FF17189C6743119C26 +:10ED10004FEA172C04F47F4A189C07F101170CF0F6 +:10ED2000FF1C04FB0AFABC440AF580774FEA1C2C4E +:10ED300007EB1A2A0CF0FF1C4FEA1A2A0AF47F4A42 +:10ED40004CEA0A041194109C03F0FF1C03F47F4367 +:10ED500004F0FF170B9C0EFB07F702FB0C7704F087 +:10ED6000FF1C119C00FB0C7704F0FF1C109C08FB9F +:10ED70000C7704F47F4C0D9C0EFB0CFE3F0A02FB4B +:10ED800003E30B9A07F0FF1702F47F4A119A00FB86 +:10ED90000A3302F47F4CB9F8000008FB0C3C0D9BD1 +:10EDA00002124B434FEA1C2C02F0F8020CF47F4C89 +:10EDB000591C47EA0C0701EB13213B0C6FEA1121A8 +:10EDC000C7F3072CFFB213FB04F3C9B21CFB04FC0E +:10EDD00002FB0132C31017FB04F7C00092B203F02C +:10EDE000FC03C0B203FB01C302F1010C00FB017084 +:10EDF0000CEB122280B202F4784C9BB2421C02EB64 +:10EE00001022C2F3C42242EA0C0203F1010C0CEB03 +:10EE100013235B0903F4FC631A43A9F800202B9B1E +:10EE200009F10209299A0BF1FF3B1A442C9B299204 +:10EE30001D443DE600283FF4DDAE795C56F8211014 +:10EE40000B91090E1491D5E61FB0BDE8F08F2DE9A6 +:10EE5000F04F89B001910198BDF948C00088BDF913 +:10EE60004C8006129DF858509DF85C4006F0F8065C +:10EE70000296C610C00006F0FC06C0B203960490CD +:10EE8000DDE9141707FB0C10002F02EB000EC0F297 +:10EE90000A81B84540F307810029C0F202818C4500 +:10EEA00040F3FF80125C53F822004A1C00F1FE8000 +:10EEB000944540F3FB80002D00F0FA809EF801207D +:10EEC00053F82260013700F1F780B84540F3F48031 +:10EED000002C00F0F48000290EEB0C02C0F2EA8056 +:10EEE0008C4540F3E7801EF80C7053F82770013111 +:10EEF00000F1E8808C4540F3E580002D00F0E480CF +:10EF0000527853F822100B0E07F0FF1C4FEA106ADC +:10EF10000093A4B2ABB200F0FF154FEA166B03FBEF +:10EF200004F91B010AFB05F54FEA1768A3EB090E6C +:10EF3000C3F5807200F47F43280A05F1011507F438 +:10EF40007F4700F0FF100AFB03F308FB07F7C9EB4C +:10EF50000414054408FB0CFCA4B22D0A1FFA8EFE13 +:10EF6000121B05F0FF1092B2059003F5807000EBC4 +:10EF700013234FEA1C200CF1011C1B0A00F0FF10A8 +:10EF8000069306F0FF1306F47F4660440BFB03F381 +:10EF90000BFB06F6000A1D0A03F1011300F0FF1037 +:10EFA00005F0FF151D4406F5807303EB162607F5E3 +:10EFB00080732D0A03EB172301F0FF1705F0FF15EF +:10EFC000360A1B0A05FB0EF506F47F4607930B0E67 +:10EFD00001F47F410EFB06F65F435943059B4FEA60 +:10EFE000172C07F1011703FB0255069B0CF0FF1CC1 +:10EFF0000EFB0BFEBC4401F580774FEA1C2C07EB9F +:10F0000011210CF0FF1C090A0CFB095501F47F418A +:10F0100000FB045503F47F40079B02FB00602D0AB0 +:10F0200002FB0AE203F47F4309FB010005F0FF1530 +:10F0300004FB0300009B04FB0824049A000A09FB5C +:10F040000349029B00F47F406FEA292905435FFAD8 +:10F0500089F903FB09F1039B03FB09F302FB09F99F +:10F060004A1C581C02EB112100EB13202A0C2B0A1E +:10F0700002EB112203EB10231202DB0002F47842B0 +:10F0800003F4FC63134309F1010202EB192905EBB8 +:10F090001925C5F3C4051D43019B1D8009B0BDE8BA +:10F0A000F08F002001E7002630460BE7002609E735 +:10F0B0002E4607E700271AE700210F4623E72146DF +:10F0C000274620E700211EE729461CE72DE9F04FDF +:10F0D0009BB01892299A199016915068079312685C +:10F0E000269DDDE92A1300FB031302EB43030A9379 +:10F0F0002C9B1B680F932C9B5E680436169B002B81 +:10F1000003DC189B002B40F373832C9BB3F908108E +:10F11000B3F90C20481E571E079B002B40F38F812C +:10F12000259C2B145FEA244C06D4844504DA002B7A +:10F1300002DBBB42C0F284811CF1010C00F1728140 +:10F140006145C0F26F81013300F16C819A42C0F2D7 +:10F150006981079B0A9F1793179B002B40F38E81B1 +:10F16000259B4FEA254CC5F30330C3F303322C9B98 +:10F17000D3E9021E259B1B1400F1D18101F1FF3858 +:10F18000434580F2CC81BCF1000FC0F2C8810EF182 +:10F19000FF38C44580F2C38109B20F9C0CFB0133D8 +:10F1A00004EB0308E35C56F823304FEA136E002AA1 +:10F1B00000F0AA8198F801C056F82C400B94240E58 +:10F1C000129478B108EB010C18F8011056F82110D0 +:10F1D0000891090E10919CF8011056F821100C911D +:10F1E000090E139192B2129980B2109C02FB00F9A1 +:10F1F0001201C9EB0010A2EB0908C2F5807280B2BF +:10F200001FFA88F8121A08FB01F192B202FB0E11E4 +:10F2100000FB0411139C09FB0411C1F30721002911 +:10F2200000F0F580BEF1FF0F1BD003F0FF1A03F4CE +:10F230007F430EFB0AFA0EFB03FE4FEA1A230AF184 +:10F24000011A0EF5807C03F0FF130CEB1E2C5344C7 +:10F250004FEA1C2C1B0A0CF47F4C03F0FF1343EA0B +:10F260000C03129CFF2C21D00B9C04F0FF1B129C62 +:10F2700004FB0BFB0B9C04F47F4A129C4FEA1B2EF1 +:10F280000BF1011B04FB0AFA0EF0FF1E0AF5807C4D +:10F29000DE440CEB1A2A4FEA1E2E4FEA1A2A0EF011 +:10F2A000FF1E0AF47F4A4EEA0A040B94109CFF2CBE +:10F2B00021D0089C04F0FF1B109C04FB0BFB089C56 +:10F2C00004F47F4A109C4FEA1B2E0BF1011B04FB38 +:10F2D0000AFA0EF0FF1E0AF5807CDE440CEB1A2AB7 +:10F2E0004FEA1E2E4FEA1A2A0EF0FF1E0AF47F4A3A +:10F2F0004EEA0A040894139CFF2C21D00C9C04F0C5 +:10F30000FF1B139C04FB0BFB0C9C04F47F4A139C17 +:10F310004FEA1B2E0BF1011B04FB0AFA0EF0FF1E35 +:10F320000AF5807CDE440CEB1A2A4FEA1E2E4FEAC7 +:10F330001A2A0EF0FF1E0AF47F4A4EEA0A040C94C1 +:10F340000B9C03F0FF1E03F47F43C94304F0FF1C32 +:10F35000089C08FB0CFC02FB0ECC04F0FF1E0C9C6E +:10F3600000FB0ECC04F0FF1E0B9C09FB0ECC04F43A +:10F370007F4E08FB0EF84FEA1C2C5FFA81FE02FB61 +:10F380000383089AB7F800800CF0FF1C02F47F4A50 +:10F390000C9A4FEAC80100FB0A3302F47F404FEA9F +:10F3A000282209FB00394FEAE80002F0F802C9B24E +:10F3B0004FEA192900F0FC0002FB0EF209F47F4924 +:10F3C00000FB0EF0531C01FB0EF14CEA090C03EBA1 +:10F3D00012224FEA1C4303EB1223604ADBB202EA1B +:10F3E0000322431C03EB10204FEA1C2303EB1023E2 +:10F3F000DB0003F4FC6313434A1C02EB11210CEB0A +:10F40000112CCCF3C40C4CEA030CA7F800C0279BCA +:10F410000237259A1A44289B1D44179B2592013BCD +:10F42000179399E6279B259C1C44289B1D44079B0A +:10F430002594013B07930A9B02330A936CE624D080 +:10F44000079B2798013B259C00FB034000143FF5D8 +:10F4500080AE01398842BFF67CAE289901FB035388 +:10F460001B143FF576AE013A9342BFF672AEDDF85B +:10F470001CB0DDF82890BBF1000F71DC079B23EA7C +:10F48000E3740A9B03EB44030A93169B002B40F39F +:10F49000AF81B7EE007A249B30EE040A70EEA40A26 +:10F4A000F0EE626AC7EE007A31EE051AFEEEC86A27 +:10F4B000CDED256AF0EE436AFEEEC86A16EE905A6C +:10F4C00020EEA77A61EE277A77EE622A37EEC33A0A +:10F4D000FEEEC82ABEEEC83A12EE902AF0EE472A97 +:10F4E00092FBF3F313EE102A2793249BB0EE673AB6 +:10F4F00092FBF3F32893169B189A013B1693249BD7 +:10F5000008BF13460793F9E500283FF46BAE18F8DF +:10F51000011056F821100891090E109162E613F1BE +:10F5200001083FF574AF4145FFF671AF1CF10108CA +:10F530003FF56DAFC645FFF66AAF09B2CDE9023CB3 +:10F540000FFA8EF30091394601933346CDE904203A +:10F550000F9A1998FFF77BFC59E700BF00F8FFFFEF +:10F56000259BC5F30330259CC3F303322C9B271442 +:10F570000F9CB3F908102B1401FB0373E718E35C2D +:10F5800056F823304FEA136C002A00F0278197F8D1 +:10F5900001E056F82E400D94240E149470B107EB40 +:10F5A000010E795C56F821100991090E11919EF80F +:10F5B000011056F821100E91090E159192B2119C6E +:10F5C00080B202FB00F81201C8EB0010A2EB080E9B +:10F5D000C2F58071149A80B21FFA8EFE091A0EFBD2 +:10F5E00002F289B201FB0C2200FB0422159C08FBED +:10F5F0000422C2F30722002A00F0E580BCF1FF0FCD +:10F6000019D003F0FF1A03F47F430CFB0AFA0CFB3A +:10F6100003FC4FEA1A230AF1011A0CF5807703F074 +:10F62000FF1307EB1C2753443F0A1B0A07F47F47CD +:10F6300003F0FF133B43149CFF2C20D00D9C04F0DF +:10F64000FF17149C67430D9C4FEA172C04F47F4A64 +:10F65000149C07F101170CF0FF1C04FB0AFABC44D0 +:10F660000AF580774FEA1C2C07EB1A2A0CF0FF1CD6 +:10F670004FEA1A2A0AF47F4A4CEA0A040D94119CB4 +:10F68000FF2C20D0099C04F0FF17119C6743099CB4 +:10F690004FEA172C04F47F4A119C07F101170CF074 +:10F6A000FF1C04FB0AFABC440AF580774FEA1C2CC5 +:10F6B00007EB1A2A0CF0FF1C4FEA1A2A0AF47F4AB9 +:10F6C0004CEA0A040994159CFF2C20D00E9C04F0EF +:10F6D000FF17159C67430E9C4FEA172C04F47F4AD2 +:10F6E000159C07F101170CF0FF1C04FB0AFABC443F +:10F6F0000AF580774FEA1C2C07EB1A2A0CF0FF1C46 +:10F700004FEA1A2A0AF47F4A4CEA0A040E940D9C26 +:10F7100003F0FF1C03F47F43D24304F0FF17099C5E +:10F72000D2B20EFB07F701FB0C7704F0FF1C0E9C16 +:10F7300000FB0C7704F0FF1C0D9C08FB0C7704F415 +:10F740007F4C0EFB0CFE3F0A01FB03E3099907F017 +:10F75000FF1701F47F4A0E9900FB0A3301F47F4C36 +:10F7600008FB0C3CB9F800301812D9104FEA1C2CD9 +:10F7700000F0F800DB0001F0FC0150430CF47F4C7A +:10F78000DBB2514347EA0C075343421C02EB102003 +:10F790003A0C02EB1020184AC0B202EA00204A1CC0 +:10F7A00002EB11213A0A02EB1121C90001F4FC61BC +:10F7B0000143581C00EB132007EB1027C7F3C400CC +:10F7C0000843A9F80000279B09F10209259A0BF1CB +:10F7D000FF3B1A44289B25921D444CE600283FF429 +:10F7E000EDAE795C56F821100991090E1191E5E60C +:10F7F0001BB0BDE8F08F00BF00F8FFFF2DE9F04F10 +:10F8000085B0DDE91070BDF938600028039100FB78 +:10F810000674BDF93CB09DF8481002EB44059DF814 +:10F820004CE003EB04090195C0F25081834540F39D +:10F830004D81002FC0F24681BE4240F3438113F850 +:10F8400004C032F814304FF61F044FEAEC0223F4E0 +:10F85000FC6503F4FC6355430CFB03F204EA551307 +:10F8600005F601051D4402F1200303EB122304EA0F +:10F8700055141B0A03F4FC631C437B1C00F12B8111 +:10F880009E4240F32881002900F02881019A99F8CE +:10F89000013055884FEAE30825F4FC6205F4FC6565 +:10F8A00008FB02F84FF61F025D4302EA581A08F6F9 +:10F8B0000108D04405F1200A0AEB152502EA581286 +:10F8C0002D0A05F4FC652A43013000F10D818345C2 +:10F8D00040F30A81BEF1000F00F00B81002FC0F24F +:10F8E0000081BE4240F3FD8001984FF61F0B19F8CE +:10F8F000065030F816804FEAE50A28F4FC6008F458 +:10F90000FC680AFB00FA05FB08F80BEA5A100AF635 +:10F91000010A824408F1200000EB18200BEA5A1B70 +:10F92000000A00F4FC604BEA000B013700F1E680AE +:10F93000BE4240F3E380002900F0E38001360198E5 +:10F9400019F8067030F816004FEAE70920F4FC6653 +:10F9500000F4FC6009FB06F907FB00F84FF61F00F6 +:10F9600000EA591A09F60109D14400EA591608F1CA +:10F97000200000EB1820000A00F4FC6030438EB237 +:10F980001FFA8EF94FEA044A24F4FC6406FB09F8D6 +:10F9900036010AF0FC6AC8EB091901964AEA040428 +:10F9A0004FEA024A1FFA89F622F4FC6211FB0EF9B3 +:10F9B0000AF0FC6A02962646C9F3C709CEF1100484 +:10F9C0004AEA02024FEA004A641AC9EB41010AF00E +:10F9D000FC6A20F4FC604A4309EB44044AEA000054 +:10F9E000039904FB0624029EC9EB4E0E09FB00425C +:10F9F0004FEA0B442BF4FC6B088804F0FC649DF880 +:10FA0000501044EA0B0B019C89B2C4F580740EFBC4 +:10FA10000B2EA41B019E4FEA5E52A6EB0806A4B271 +:10FA20004FEA5E1E02F4FC62B6B22EF4FC6E734323 +:10FA300042EA0E0E0CFB0433029C1FFA8EF204FB0A +:10FA40000535D41008FB0757151204F0FC04D2004A +:10FA5000C7F3072705F0F805D2B24F437B1C03EB31 +:10FA6000172703126FEA172703F0F803FFB213FBFF +:10FA700007F305FB0135C31003F0FC03ADB213FB24 +:10FA800007F304FB0134C300DBB2A4B213FB07F39A +:10FA900002FB01316B1C621C89B203EB15254B1C68 +:10FAA00002EB142405F47845039A03EB112364094F +:10FAB000C3F3C42304F4FC642B432343138005B035 +:10FAC000BDE8F08F4FF0000C6446D6E600239C465C +:10FAD0001A461C46F8E600231A46F5E60B460A4687 +:10FAE000F2E60025AB4620E700273D463846BB46F8 +:10FAF00045E7774675467046F34640E700273846A7 +:10FB00003DE70F4608463AE72DE9F04F97B01492CB +:10FB10000893259A9DF8A43015901293506811917E +:10FB20001268DDE9261300FB031302EB430309937C +:10FB3000289B1B680B93289B5B680C93BDF848308F +:10FB40000A93119B002B03DC149B002B40F3CD8305 +:10FB5000289BB3F90810B3F90C20481E551E089BCA +:10FB6000002B40F3A581219E229B36144FEA2343AC +:10FB700006D4864204DA002B02DBAB42C0F2998144 +:10FB8000013600F18681B142C0F28381013300F178 +:10FB900080819A42C0F27D81089B4FF61F06099F23 +:10FBA0001393139B002B40F3A681229B219D1814D5 +:10FBB000219B2D14C3F30331229BC3F3033C289BE9 +:10FBC000D3E9022300F1FA8102F1FF3E754580F28C +:10FBD000F5810028C0F2F28103F1FF3E704580F20A +:10FBE000ED8112B20C9B1FFA81FE00FB02504FEA1E +:10FBF0000E1503EB000A13F80090C5F580739AF810 +:10FC000001809BB2BCF1000F00F0BB811AF80240EA +:10FC10000AEB020B1FFA8CFA0D940AFB0EFE9BF8FE +:10FC20000140CEEB0A1AA5EB0E050E941FFA8AFAD4 +:10FC30000D9CADB2A3EB0A0308FB05F59BB209FBD3 +:10FC400003530AFB04330E9C0EFB0433C3F3072358 +:10FC5000002B00F011810B9CB9F1FF0F04EB400564 +:10FC600034F8100000F0928120F4FC6E4FEAE90AAB +:10FC700000F4FC600AFB0EFE09FB00F006EA5E19C8 +:10FC80000EF6010E00F1200BCE440BEB102906EA14 +:10FC90005E1E4FEA192909F4FC694EEA0909B8F118 +:10FCA000FF0F688819D020F4FC6E4FEAE80A00F4D0 +:10FCB000FC600AFB0EFE08FB00F806EA5E100EF67A +:10FCC000010E08F1200B86440BEB182006EA5E1E9D +:10FCD000000A00F4FC604EEA00004FEA094E29F4E5 +:10FCE000FC694FEA004A20F4FC600EF0FC6E0AF05A +:10FCF000FC6A4EEA09094AEA0000BCF1000F00F074 +:10FD0000478102F100420D9C013AFF2C4FEA42026A +:10FD100002F1020205EB020EAA5A18D022F4FC6589 +:10FD200002F4FC624FEAE40804FB02FA08FB05F85F +:10FD30000AF1200506EA581208F6010805EB1A2513 +:10FD400042442D0A06EA521205F4FC652A430E9C31 +:10FD5000BEF80250FF2C1AD025F4FC6E05F4FC65A9 +:10FD60004FEAE40804FB05FA08FB0EF80AF1200E3E +:10FD700006EA581508F601080EEB1A2E45444FEA1C +:10FD80001E2E06EA55150EF4FC6E45EA0E051CFB08 +:10FD900001FECCF110084FEA024A22F4FC624FEA5D +:10FDA000EE0EA8EB01084FEA054B0AF0FC6ACEEB19 +:10FDB000410125F4FC650EEB48084AEA0202414382 +:10FDC000CEEB4C0C0BF0FC6B09FB08114BEA050564 +:10FDD0000CFB02110EFB051E4FEA5E524FEA5E1E3F +:10FDE00002F4FC622EF4FC6E42EA0E0E1FFA8EF252 +:10FDF000FF2B03D11299FF2900F0DE800A9915121A +:10FE000038884B4305F0F8050A9C03F1010C0CEB14 +:10FE100023236FEA23235FFA83FC031203F0F80322 +:10FE200013FB0CF305FB0135C310D11003F0FC03E9 +:10FE3000D20001F0FC01ADB213FB0CF3D2B201FB16 +:10FE40000431C300DBB289B213FB0CF302FB0433B1 +:10FE50009AB26B1C03EB1525531C03EB12234A1CAF +:10FE600005F4784502EB1121C3F3C42349092B4360 +:10FE700001F4FC610B433B80219B0237239A13441E +:10FE8000229A2193249B1A44139B013B22921393A1 +:10FE900087E6219B239E229C33442193249B1C4470 +:10FEA000089B013B22940893099B0233099356E671 +:10FEB00028D0089B2398013B219D00FB0350001490 +:10FEC0003FF56AAE01398842BFF666AE24992298A2 +:10FED00001FB03031B143FF55FAE013A9342BFF6EB +:10FEE0005BAE089B4FF61F06DDF824E01393139BCF +:10FEF000002B00F38280089B23EAE374099B03EB49 +:10FF000044030993119B002B40F3EF81B7EE007A75 +:10FF1000209B30EE040A70EEA40AF0EE626AC7EE8F +:10FF2000007A31EE051AFEEEC86ACDED216AF0EED8 +:10FF3000436AFEEEC86ACDED226A20EEA77A61EE32 +:10FF4000277A77EE622A37EEC33AFEEEC82ABEEE73 +:10FF5000C83A12EE902AF0EE472A92FBF3F313EE22 +:10FF6000102A2393209BB0EE673A92FBF3F324937D +:10FF7000119B149A013B1193209B08BF13460893D1 +:10FF8000DFE508FB05F509FB03535FE6814686E6DE +:10FF9000C1F11002414309FB02194FEA49094FEA36 +:10FFA00059524FEA591902F4FC6229F4FC6942EAF9 +:10FFB00009091FFA89F21BE73A805DE715F1010E86 +:10FFC0003FF55AAF7245FFF657AF10F1010E3FF5FE +:10FFD00053AF7345FFF650AF129C1BB212B202959D +:10FFE00001930092CDE90301CDE905C4DDE90B23BE +:10FFF00039461598FFF702FC3EE7219BC3F3033215 +:020000040803EF +:10000000229BC3F30335289B1FFA82FCB3F9081027 +:10001000229B4FEA0C101F14219B1B1401FB073776 +:100020000C9B03EB070A13F80790C0F580739AF84E +:1000300001809BB2002D00F03D811AF801400AEBCF +:10004000010B1FFA85FA0F940AFB0CFC9BF8014088 +:10005000CCEB0A1AA0EB0C0010941FFA8AFA80B2BB +:10006000A3EB0A0308FB00F09BB209FB03030F9804 +:100070000AFB00330CFB0433C3F30723002B00F00F +:100080000B810B98B9F1FF0F0B9C00EB470034F884 +:10009000177000F0148127F4FC6C4FEAE90A07F4AA +:1000A000FC670AFB0CFC09FB07F706EA5C190CF677 +:1000B000010C07F1200BCC440BEB172906EA5C1C62 +:1000C0004FEA192909F4FC694CEA0909B8F1FF0F54 +:1000D000478819D027F4FC6C4FEAE80A07F4FC675C +:1000E0000AFB0CFC08FB07F806EA5C170CF6010C8F +:1000F00008F1200BBC440BEB182706EA5C1C3F0AF6 +:1001000007F4FC674CEA07074FEA094C29F4FC693D +:100110004FEA074A27F4FC670CF0FC6C0AF0FC6A13 +:100120004CEA09094AEA0707002D00F0CA8001F1EC +:10013000004101394900023100EB010C415A0F988E +:10014000FF2819D021F4FC600F9C01F4FC614FEAF8 +:10015000E40804FB01FA08FB00F80AF1200006EAB3 +:10016000581108F6010800EB1A204144000A06EA7B +:10017000511100F4FC600143109CBCF80200FF2CFC +:100180001AD020F4FC6C00F4FC604FEAE40804FB95 +:1001900000FA08FB0CF80AF1200C06EA581008F6E1 +:1001A00001080CEB1A2C40444FEA1C2C06EA5010B4 +:1001B0000CF4FC6C40EA0C0015FB02FCC5F11008C5 +:1001C0004FEA014A21F4FC614FEAEC0CA8EB02086B +:1001D0004FEA004B0AF0FC6ACCEB420220F4FC60D0 +:1001E0000CEB48084AEA01017A43CCEB45050BF0D9 +:1001F000FC6B09FB08224BEA000005FB01220CFB0B +:100200000022570D520907F4FC6722F4FC623A43BE +:10021000FF2B92B202D11299FF2963D00A981512CE +:10022000BEF8001043430A9CCF1005F0F805581C97 +:1002300007F0FC0700EB232308126FEA2323C90011 +:1002400000F0F800DBB2C9B210FB03F011FB03F1C0 +:1002500005FB0405D01017FB03F7D200ADB200F088 +:10026000FC00D2B200FB04706B1C02FB041203EB17 +:10027000152592B280B205F47845571C07EB12277A +:10028000C7F3C4273D43471C07EB10277F0907F43A +:10029000FC673D43AEF80050219B0EF1020E239AFD +:1002A0001344229A2193249B1A44139B013B2292CC +:1002B00013931CE608FB00F009FB0303DCE6B946D8 +:1002C00004E7C2F110017A4309FB01294FEA490909 +:1002D0004FEA59504FEA591200F4FC6022F4FC62D4 +:1002E000024395E7AEF80020D6E717B0BDE8F08FDF +:1002F0002DE9F04F85B0DDE91070BDF938600028B8 +:10030000039100FB0674BDF93CB09DF8481003EB67 +:1003100044059DF84CE002EB04090195C0F24181CF +:10032000834540F33E81002FC0F23781BE4240F347 +:10033000348112F804C033F814304FF61F044FEA2A +:10034000EC0223F4FC6503F4FC6355430CFB03F25D +:1003500004EA551305F601051D4402F1200303EBE1 +:10036000122304EA55141B0A03F4FC631C437B1C90 +:1003700000F11C819E4240F31981002900F019818F +:10038000019A99F8013055884FEAE30825F4FC6298 +:1003900005F4FC6508FB02F84FF61F025D4302EA14 +:1003A000581A08F60108D04405F1200A0AEB152571 +:1003B00002EA58122D0A05F4FC652A43013000F1C7 +:1003C000FE80834540F3FB80BEF1000F00F0FC800F +:1003D000002FC0F2F180BE4240F3EE8001984FF64C +:1003E0001F0B19F8065030F816804FEAE50A28F47A +:1003F000FC6008F4FC680AFB00FA05FB08F80BEA4D +:100400005A100AF6010A824408F1200000EB182075 +:100410000BEA5A1B000A00F4FC604BEA000B0137A0 +:1004200000F1D780BE4240F3D480002900F0D48090 +:100430000136019819F8067030F816004FEAE709FE +:1004400020F4FC6600F4FC6009FB06F907FB00F8E9 +:100450004FF61F0000EA591A09F60109D14400EAD3 +:10046000591608F1200000EB1820000A00F4FC6087 +:1004700030438EB21FFA8EF94FEA044A24F4FC642A +:1004800006FB09F836010AF0FC6AC8EB0919019667 +:100490004AEA04044FEA024A1FFA89F622F4FC628F +:1004A00011FB0EF90AF0FC6A02962646C9F3C70949 +:1004B000CEF110044AEA02024FEA004A641AC9EB7C +:1004C00041010AF0FC6A20F4FC604A4309EB440451 +:1004D0004AEA0000C9EB4E0E04FB0624039909FB0F +:1004E00000424FEA0B4401982BF4FC6B04F0FC64CF +:1004F0000988C0F5807044EA0B0B029C001B019C2C +:100500000EFB0B2EA4EB080680B24FEA5E52B6B289 +:100510004FEA5E1E02F4FC6273432EF4FC6E0CFB89 +:100520000033029842EA0E0E00FB05350B12C8108C +:1005300008FB075703F0F803C90000F0FC006FEA5E +:1005400027271FFA8EF2C9B2FFB27B4378434F438D +:10055000591C01EB1321131223F0070303EB1123A2 +:10056000411C01EB1020D1101B0221F00301D2002D +:1005700003F4784301EB1021C90001F4FC610B4343 +:10058000791C01EB172702EB1722C2F3C4021A43AE +:10059000039B1A8005B0BDE8F08F4FF0000C644655 +:1005A000E5E600239C461A461C4607E700231A4648 +:1005B00004E70B460A4601E70025AB462FE7002774 +:1005C0003D463846BB4654E7774675467046F34687 +:1005D0004FE7002738464CE70F46084649E700003A +:1005E0002DE9F04F93B01092219A11900E9150681E +:1005F00006931268DDE9221300FB031302EB4303A9 +:100600000793249B1B680893249B5B6809930E9BAC +:10061000002B03DC109B002B40F3B683249BB3F923 +:100620000810B3F90C20481E551E069B002B40F302 +:1006300065811D9E1E9B36144FEA234306D48642D5 +:1006400004DA002B02DBAB42C0F25981013600F123 +:100650004681B142C0F24381013300F140819A42A8 +:10066000C0F23D81069B4FF61F06079F0F930F9B1D +:10067000002B40F366811E9B1D9D18141D9B2D149D +:10068000C3F303311E9BC3F3033C249BD3E9022332 +:1006900000F1F08102F1FF3E754580F2EB81002808 +:1006A000C0F2E88103F1FF3E704580F2E38112B2AF +:1006B000099B1FFA81FE00FB02504FEA0E1503EB67 +:1006C000000A13F80090C5F580739AF801809BB278 +:1006D000BCF1000F00F07B811AF802400AEB020B1C +:1006E0001FFA8CFA0A940AFB0EFE9BF80140CEEB2F +:1006F0000A1AA5EB0E050B941FFA8AFA0A9CADB2F2 +:10070000A3EB0A0308FB05F59BB209FB03530AFBA5 +:1007100004330B9C0EFB0433C3F30723002B00F0C0 +:10072000D180089CB9F1FF0F04EB400534F81000AC +:1007300000F0528120F4FC6E4FEAE90A00F4FC60FC +:100740000AFB0EFE09FB00F006EA5E190EF6010E2A +:1007500000F1200BCE440BEB102906EA5E1E4FEA97 +:10076000192909F4FC694EEA0909B8F1FF0F6888F4 +:1007700019D020F4FC6E4FEAE80A00F4FC600AFB92 +:100780000EFE08FB00F806EA5E100EF6010E08F1F8 +:10079000200B86440BEB182006EA5E1E000A00F4CC +:1007A000FC604EEA00004FEA094E29F4FC694FEA6A +:1007B000004A20F4FC600EF0FC6E0AF0FC6A4EEA7F +:1007C00009094AEA0000BCF1000F00F0078102F1BC +:1007D00000420A9C013AFF2C4FEA420202F1020257 +:1007E00005EB020EAA5A18D022F4FC6502F4FC6252 +:1007F0004FEAE40804FB02FA08FB05F80AF12005B9 +:1008000006EA581208F6010805EB1A2542442D0A9B +:1008100006EA521205F4FC652A430B9CBEF802500E +:10082000FF2C1AD025F4FC6E05F4FC654FEAE408B1 +:1008300004FB05FA08FB0EF80AF1200E06EA58152B +:1008400008F601080EEB1A2E45444FEA1E2E06EA62 +:1008500055150EF4FC6E45EA0E051CFB01FECCF1AD +:1008600010084FEA024A22F4FC624FEAEE0EA8EBAF +:1008700001084FEA054B0AF0FC6ACEEB410125F472 +:10088000FC650EEB48084AEA02024143CEEB4C0CF1 +:100890000BF0FC6B09FB08114BEA05050CFB021180 +:1008A0000EFB051E4FEA5E524FEA5E1E02F4FC622A +:1008B0002EF4FC6E42EA0E0E1FFA8EF2FF2B40F071 +:1008C000A1803A801D9B02371F9A13441E9A1D93E4 +:1008D000209B1A440F9B013B1E920F93C7E61D9B62 +:1008E0001F9E1E9C33441D93209B1C44069B013B72 +:1008F0001E940693079B0233079396E628D0069B27 +:100900001F98013B1D9D00FB035000143FF5AAAE4C +:1009100001398842BFF6A6AE20991E9801FB030359 +:100920001B143FF59FAE013A9342BFF69BAE069B68 +:100930004FF61F06DDF81CE00F930F9B002B00F312 +:10094000B680069B23EAE374079B03EB44030793FB +:100950000E9B002B40F31882B7EE007A1C9B30EE02 +:10096000040A70EEA40AF0EE626AC7EE007A31EE75 +:10097000051AFEEEC86ACDED1D6AF0EE436AFEEE82 +:10098000C86ACDED1E6A20EEA77A61EE277A77EE6F +:10099000622A37EEC33AFEEEC82ABEEEC83A12EE1D +:1009A000902AF0EE472A92FBF3F313EE102A1F93DE +:1009B0001C9BB0EE673A92FBF3F320930E9B109AC8 +:1009C000013B0E931C9B08BF134606931FE608FBD2 +:1009D00005F509FB03539FE68146C6E6C1F1100207 +:1009E000414309FB02194FEA49094FEA59524FEABC +:1009F000591902F4FC6229F4FC6942EA09091FFA58 +:100A000089F25BE7B7F800C0DB434FEA2C205FFABE +:100A100083FE00F0F8004FEAEC054FEACC0300FB40 +:100A20000EF005F0FC05DBB2411C05FB0EF503FBE7 +:100A30000EF301EB1020111221F0070101EB102140 +:100A4000D348C9B200EA0120691C01EB1525D11079 +:100A5000D20021F0030101EB1521C90001F4FC6172 +:100A60000143581C00EB132302EB1322C2F3C40210 +:100A70000A4326E715F1010E3FF524AF7245FFF654 +:100A800021AF10F1010E3FF51DAF7345FFF61AAF10 +:100A90001BB212B201930092CDE9041CCDE90250C1 +:100AA000DDE9083239461198FFF722FC0AE71D9B61 +:100AB000C3F303321E9BC3F30335249B1FFA82FC4E +:100AC000B3F908101E9B4FEA0C101F141D9B1B143A +:100AD00001FB0737099B03EB070A13F80790C0F5E2 +:100AE00080739AF801809BB2002D00F0FE801AF806 +:100AF00001400AEB010B1FFA85FA0C940AFB0CFC6F +:100B00009BF80140CCEB0A1AA0EB0C000D941FFAE5 +:100B10008AFA80B2A3EB0A0308FB00F09BB209FB40 +:100B200003030C980AFB00330CFB0433C3F30723C5 +:100B3000002B00F0CC800898B9F1FF0F089C00EB67 +:100B4000470034F8177000F0D58027F4FC6C4FEAAA +:100B5000E90A07F4FC670AFB0CFC09FB07F706EA45 +:100B60005C190CF6010C07F1200BCC440BEB172998 +:100B700006EA5C1C4FEA192909F4FC694CEA0909E8 +:100B8000B8F1FF0F478819D027F4FC6C4FEAE80A48 +:100B900007F4FC670AFB0CFC08FB07F806EA5C1785 +:100BA0000CF6010C08F1200BBC440BEB182706EAED +:100BB0005C1C3F0A07F4FC674CEA07074FEA094C44 +:100BC00029F4FC694FEA074A27F4FC670CF0FC6C37 +:100BD0000AF0FC6A4CEA09094AEA0707002D00F00E +:100BE0008B8001F1004101394900023100EB010C19 +:100BF000415A0C98FF2819D021F4FC600C9C01F498 +:100C0000FC614FEAE40804FB01FA08FB00F80AF172 +:100C1000200006EA581108F6010800EB1A204144AA +:100C2000000A06EA511100F4FC6001430D9CBCF877 +:100C30000200FF2C1AD020F4FC6C00F4FC604FEA98 +:100C4000E40804FB00FA08FB0CF80AF1200C06EAA1 +:100C5000581008F601080CEB1A2C40444FEA1C2CE3 +:100C600006EA50100CF4FC6C40EA0C0015FB02FC88 +:100C7000C5F110084FEA014A21F4FC614FEAEC0C7F +:100C8000A8EB02084FEA004B0AF0FC6ACCEB4202E8 +:100C900020F4FC600CEB48084AEA01017A43CCEBF3 +:100CA00045050BF0FC6B09FB08224BEA000005FB35 +:100CB00001220CFB0022570D520907F4FC6722F4B5 +:100CC000FC623A43FF2B92B227D1AEF800201D9B65 +:100CD0000EF1020E1F9A13441E9A1D93209B1A4474 +:100CE0000F9B013B1E920F9327E608FB00F009FBC8 +:100CF00003031BE7B94643E7C2F110017A4309FB3E +:100D000001294FEA49094FEA59504FEA591200F4B4 +:100D1000FC6022F4FC620243D4E7BEF80070DB43BF +:100D20001B4C38125FFA83FC00F0F800FD10FB004A +:100D300000FB0CF005F0FC05DBB205FB0CF1451CDB +:100D400003FB0CF305EB1020151225F0070505EB4E +:100D500010204D1C05EB1125D110C0B221F003016C +:100D6000D20004EA002001EB1521C90001F4FC6166 +:100D70000843591C01EB132302EB1323C3F3C403F1 +:100D80001843AEF80000A2E713B0BDE8F08F00BF33 +:100D900000F8FFFF2DE9F047DDE90945BDF920A086 +:100DA00005FB034C002D9DF82C909DF8307002EB54 +:100DB0004C0E9DF834600888C0F2A780AA4540F325 +:100DC000A480002CC0F29F80A34240F39C8032F8A4 +:100DD0001C80621C00F19C80934240F39980B9F121 +:100DE000000F00F09580BEF802C0013500F194803C +:100DF000AA4540F39180002F00F08E80002CC0F2B5 +:100E00008980A34240F386803EF81350013400F1FC +:100E10008680A34240F38380B9F1000F7FD0013375 +:100E20003EF813304FEA084428F4FC6819FB07FE2B +:100E3000C7F1100204F0FC64CEF3C70EA2EB090266 +:100E400044EA08084FEA0C442CF4FC6C0EEB420216 +:100E500004F0FC64CEEB470744EA0C0CCEEB4904EB +:100E600004FB0CF402FB08481A0423F4FC63B4B23C +:100E700002F0FC62F64313432A0425F4FC65F6B243 +:100E800002F0FC620EFB03832A4307FB0232C71009 +:100E9000530D07F0FC07520917FB06F703F4FC6338 +:100EA00022F4FC621A4393B202121D1202F0F802FD +:100EB000C00005F0F80512FB06F2C0B205FB0425E0 +:100EC000DA1010FB06F0DB00ADB202F0FC02DBB280 +:100ED00002FB047203FB04006B1C92B280B203EBB2 +:100EE0001525431C05F4784503EB1023501C00EB3B +:100EF0001222C3F3C42352092B4302F4FC621343AE +:100F00000B80BDE8F087804663E7844680466CE747 +:100F100084466AE7054679E70346054682E70346C5 +:100F200080E72DE9F04F93B01D461092219B9DF86C +:100F300094200A910B9259681B681190DDE92227D1 +:100F4000DDE91D4601FB072703EB47030793249BBD +:100F50001B6809930B9BDB43DBB208930A9B002BB6 +:100F600003DC109B002B40F30582249BB3F908108F +:100F7000B3F90C20481E02F1FF3C002D40F3DA804B +:100F80005FEA244E4FEA264306D4864504DA002B56 +:100F900002DB6345C0F2CF801EF1010E00F1C1807B +:100FA0007145C0F2BE80013300F1BB809A42C0F2AD +:100FB000B880A946DDF81C80B9F1000F40F3D88055 +:100FC000249B21144FEA2640C4F30332C6F3033CAA +:100FD000D3E902E300F112810EF1FF3A514580F2AC +:100FE0000D810028C0F20A8103F1FF3A504580F2DA +:100FF00005810FFA8EF300FB0311099800EB410AFB +:1010000030F811E0BAF80210BCF1000F07D05B0015 +:101010000AEB03003AF803300C9343880D934FEA30 +:101020000E402EF4FC6E12FB0CF34FEA014A00F066 +:10103000FC6021F4FC61DB100AF0FC6A40EA0E005F +:10104000CCF1100E4AEA0101089FAEEB020EC3EB91 +:10105000420203EB4E0E51430D9A0EFB001E0C99FB +:10106000100422F4FC6200F0FC6010430C9A12049D +:1010700003FB00E021F4FC6EC3EB4C0302F0FC62C6 +:1010800042EA0E0203FB0203B8F800005A0D5B09A6 +:1010900002F4FC62011223F4FC634FEAE00E01F05B +:1010A000F801C0001343BDF82C2011FB07F1C0B2BA +:1010B0009BB20EF0FC0E10FB07F01EFB07FE4FEA82 +:1010C000232C0CF0F80C0CFB021CD910DB001FFACF +:1010D0008CFC01F0FC01DBB201FB02E103FB02032B +:1010E00089B29AB20CF1010303EB1C2C531C03EBE5 +:1010F00012234A1C0CF4784C02EB1121C3F3C423D5 +:10110000490943EA0C0301F4FC610B43A8F80030E1 +:101110001F9B08F1020809F1FF391C44209B1E4463 +:101120004AE71F9B013D1C44209B1E44079B023342 +:10113000079322E722D06B1E1F9800FB0340001488 +:101140003FF537AF01398842BFF633AF209901FB35 +:1011500003631B143FF52DAF013A9342BFF629AF4D +:10116000A846DDF81C90BDF82CA0B8F1000F60DC9B +:10117000079B25EAE57503EB450307930A9B002BC4 +:1011800040F3F880B7EE007A1C9B30EE040A70EE54 +:10119000A40AF0EE626AC7EE007A31EE051AFEEE9E +:1011A000C86A16EE904AF0EE436AFEEEC86A16EE82 +:1011B000906A20EEA77A61EE277A77EE622A37EE00 +:1011C000C33AFEEEC82ABEEEC83A12EE902AF0EEFE +:1011D000472A92FBF3F313EE102A1F931C9BB0EEE9 +:1011E000673A92FBF3F320930A9B109A013B0A9310 +:1011F00008BF15461C9B18BF1D46AFE611F1010A3A +:1012000086D4D64584DB10F1010A81D45345FFF61C +:101210007FAF0B9F1BB20191414600930FFA8EF3F3 +:10122000CDE90202CDE904C7099A1198FFF7B2FD92 +:101230006EE7249B3014099FC6F3033EB3F90810F0 +:101240002314C4F3033201FB0030099B03EB40037A +:1012500037F810C05888BEF1000F0BD001F10041E3 +:1012600001394900023103EB010B5B5A0E93BBF8C5 +:1012700002300F934FEA0C412CF4FC6C12FB0EF37E +:101280004FEA004B01F0FC6120F4FC60DB100BF036 +:10129000FC6B41EA0C01CEF1100C4BEA0000089FF8 +:1012A000ACEB020CC3EB420208F1FF38504303EBF6 +:1012B0004C0C0F9A0CFB010C0E984FEA024B22F4D7 +:1012C000FC610E9A20F4FC600BF0FC6B12044BEAFC +:1012D000010102F0FC6203FB01C1C3EB4E030243B8 +:1012E00003FB02124FEA525B52090BF4FC6B22F42F +:1012F000FC63B9F800204BEA030311124FEAE20C39 +:101300009BB201F0F801D2000CF0FC0C11FB07F1CC +:1013100018121CFB07FCD2B200F0F80012FB07F217 +:1013200000FB0A10D910DB0001F0FC0180B2DBB237 +:1013300001FB0AC103FB0A23421C89B29BB202EBE8 +:10134000102001F1010C5A1C0CEB112C00F4784018 +:1013500002EB13221F9B4FEA5C1CC2F3C4221C4405 +:101360000CF4FC6C209B10431E4440EA0C0029F84E +:10137000020BFAE613B0BDE8F08F2DE9F043DDE98A +:10138000084EBDF91C900EFB0347BEF1000F9DF8FF +:1013900028509DF82C6002EB4708088860DBF14577 +:1013A0005EDD002C5ADBA34258DD32F817C0621C08 +:1013B00059D4934257DD002D55D0B8F802701EF174 +:1013C000010E54D4F14552DD002E50D0002C4CDBE0 +:1013D000A3424ADD38F81320013405D4A34203DDCB +:1013E00015B1013338F8130015FB06F44FEA0C432E +:1013F0004FEA074E2CF4FC6C03F0FC63C4F3C70403 +:101400000EF0FC6E27F4FC6743EA0C0CC6F11003E7 +:101410004EEA0707C4EB46065B1BC4EB450504EB2D +:1014200043037D4303FB0C5C030420F4FC6003F0E6 +:10143000FC631843130422F4FC6203F0FC6304FB16 +:1014400000C0134306FB0300430D400903F4FC6393 +:1014500020F4FC6018430880BDE8F0838446A6E7CA +:1014600007468446ABE70746A9E70246B4E70246CB +:10147000BAE72DE9F04F8FB01D461D9B07910C92E6 +:1014800059681B680D90DDE91E27DDE9194601FB4F +:10149000072703EB4707209BD3F80080079B002B0F +:1014A00003DC0C9B002B40F38281209BB3F90810D6 +:1014B000B3F90C20481E02F1FF3C002D40F39B8045 +:1014C0005FEA244E4FEA264306D4864504DA002B11 +:1014D00002DB6345C0F290801EF1010E00F18480B2 +:1014E0007145C0F2818001337ED49A427CDBAA46EA +:1014F000B946BAF1000F40F39980209B21144FEABE +:101500002640C4F30332C6F3033CD3E902E300F1FF +:10151000D1800EF1FF3B594580F2CC800028C0F20B +:10152000C98003F1FF3B584580F2C4800FFA8EFE5C +:1015300000FB0E1108EB410038F811B04188BCF1F6 +:10154000000F0BD00EF10043013B5B00023300EBB8 +:10155000030EC35A0893BEF8023009934FEA0B40BA +:101560002BF4FC6B12FB0CF3CCF1100E00F0FC60C2 +:10157000DB10AEEB020E40EA0B004FEA014B21F408 +:10158000FC61C3EB42020BF0FC6B03EB4E0E4BEA2B +:1015900001015143099A0EFB001E100422F4FC6263 +:1015A000089900F0FC601043089A120403FB00E065 +:1015B00021F4FC6EC3EB4C0302F0FC6242EA0E0223 +:1015C00003FB02035A0D5B0902F4FC6223F4FC6383 +:1015D0001343A9F800301B9B09F102090AF1FF3AF5 +:1015E0001C441C9B1E4484E71B9B013D02371C448A +:1015F0001C9B1E4461E71DD06B1E1B9800FB034023 +:1016000000143FF574AF01398842BFF670AF1C99E2 +:1016100001FB03631B143FF56AAF013A9342BFF627 +:1016200066AFA946BA46B9F1000F5BDC25EAE5755D +:1016300007EB4507079B002B40F3B980B7EE007A14 +:10164000189B30EE040A70EEA40AF0EE626AC7EE50 +:10165000007A31EE051AFEEEC86A16EE904AF0EEF8 +:10166000436AFEEEC86A16EE906A20EEA77A61EE33 +:10167000277A77EE622A37EEC33AFEEEC82ABEEE2C +:10168000C83A12EE902AF0EE472A92FBF3F313EEDB +:10169000102A1B93189BB0EE673A92FBF3F31C934E +:1016A000079B0C9A013B079308BF1546189B18BF70 +:1016B0001D46F3E611F1010B8DD4DE458BDB10F1F5 +:1016C000010B88D45B4586DB1BB2CDE90110CDE967 +:1016D000032C009342460FFA8EF349460D98FFF70C +:1016E0004CFE78E7209B20143114C6F3033EB3F977 +:1016F0000830C4F3033203FB010108EB410038F862 +:1017000011C04188BEF1000F0BD003F10043013B33 +:101710005B00023300EB030BC35A0A93BBF80230A1 +:101720000B934FEA0C402CF4FC6C12FB0EF34FEAC7 +:10173000014B00F0FC6021F4FC61DB100BF0FC6B52 +:1017400040EA0C00CEF1100C4BEA010109F1FF391F +:10175000ACEB020CC3EB420203EB4C0C51430B9A73 +:101760000CFB001C0A994FEA024B22F4FC600A9A17 +:101770000BF0FC6B12044BEA000021F4FC6B02F04E +:10178000FC6203FB00C0C3EB4E0342EA0B0B03FBFE +:101790000B00430D400903F4FC6320F4FC60184384 +:1017A0001B9B1C441C9B2AF8020B1E443BE70FB0FA +:1017B000BDE8F08F2DE9F04F85B0DDE90F7402919F +:1017C000002C04FB0371BDF938E09DF8446002EB86 +:1017D000810C9DF84800C0F21B81A64540F318819A +:1017E000002FC0F21381BB4240F3108152F8215008 +:1017F0007A1C00F11081934240F30D81002E00F01D +:101800000C81DCF80410013400F10B81A64540F393 +:101810000881002800F00881002FC0F20081BB423F +:1018200040F3FD805CF82340013700F10081BB42AA +:1018300040F3FD80002E00F0FC8001335CF8232093 +:10184000B6B280B24FEA116A00FB06FE36014FEADB +:10185000156BCEEB0010A6EB0E07C6F580734FEAB2 +:10186000146980B2BFB21B1A4FEA12680AFB07F66E +:101870009BB20BFB036600FB09660EFB0866C6F312 +:1018800007260096002E00F0BE8005F0FF1C05F430 +:101890007F45029E0BFB0CFC0BFB05F536884FEADF +:1018A0001C2B0CF1011C01950BF0FF1BDC444FEAD3 +:1018B0001C2C0CF0FF150395019D05F5807C0CEBAD +:1018C000152501F0FF1C01F47F410AFB0CFC4FEAD7 +:1018D000152B0AFB01FA4FEA1C250CF1011C0AF535 +:1018E000807105F0FF1501EB1A2A654404F0FF1C16 +:1018F00004F47F444FEA1A2A09FB0CFC2D0A09FB69 +:1019000004F90AF47F4A4FEA1C2105F0FF1509F596 +:1019100080740CF1011C01F0FF117D4304EB1929C7 +:1019200002F0FF1402F47F42614408FB04F44FEA22 +:10193000192908FB02F8090A220A04F1011401F02E +:10194000FF1107FB0AF702F0FF12144408F580723A +:10195000240A02EB1828039A04F0FF1402FB035533 +:101960004FEA1828009A04FB0E5408F47F483512F9 +:1019700001FB004105F0F805090A01F0FF140BF422 +:101980007F4103FB01710EFB081E09F47F4100FB40 +:1019900001E19DF84C0087B2090A7A4301F47F41C6 +:1019A000531C214303EB12230A0CC1F307246FEAF3 +:1019B0001323C8B212FB07F214FB07F4DBB210FBCF +:1019C00007F005FB0325F210F60002F0FC02ADB2B1 +:1019D000F6B202FB034206FB030394B299B26B1CFE +:1019E000621C03EB15254B1C02EB142203EB1123A5 +:1019F00005F478455209C3F3C42302F4FC622B4377 +:101A00001343029A138005B0BDE8F08F0025EFE67E +:101A100000210D46F7E60021F5E63146F3E6002405 +:101A200002E7002214460BE70246044608E70022BC +:101A300006E7324604E72DE9F04F9DB0199207936F +:101A40002B9A9DF8BC301B901A935068179112681E +:101A5000DDE92C13DDE9274600FB031302EB43030A +:101A60000A932E9B1B681093BDF868300B93179B4D +:101A7000002B03DC199B002B40F375832E9BB3F9DD +:101A80000810B3F90C20481E571E079B002B40F38B +:101A90008E815FEA244C4FEA264306D4844504DA5B +:101AA000002B02DBBB42C0F283811CF1010C00F170 +:101AB00073816145C0F27081013300F16D819A42FA +:101AC000C0F26A81079B0A9F1893189B002B40F372 +:101AD0008C812E9A4FEA264C2E9BC4F30330D2F809 +:101AE0000CE02214C6F303319B6800F1CD8103F1B1 +:101AF000FF38424580F2C881BCF1000FC0F2C481BA +:101B00000EF1FF38C44580F2BF811BB2109D0CFB63 +:101B1000032205EB820855F822204FEA126E0028B6 +:101B200000F0A981D8F804500C952D0E139581B1C1 +:101B300003F18043013B9B00043308EB030C58F88E +:101B4000033008931B0E1193DCF804300D931B0E29 +:101B5000149380B2119D89B200FB01F90001C9EB19 +:101B60000111A0EB0908C0F58073139889B21FFA20 +:101B700088F85B1A08FB00F09BB203FB0E0001FB28 +:101B80000500149D09FB0500C0F30720002800F0A4 +:101B9000FA80BEF1FF0F1BD002F0FF1A02F47F4261 +:101BA0000EFB0AFA0EFB02FE4FEA1A220AF1011A94 +:101BB0000EF5807C02F0FF120CEB1E2C52444FEA13 +:101BC0001C2C120A0CF47F4C02F0FF1242EA0C02A9 +:101BD000139DFF2D21D00C9D05F0FF1B139D05FBD0 +:101BE0000BFB0C9D05F47F4A139D4FEA1B2E0BF156 +:101BF000011B05FB0AFA0EF0FF1E0AF5807CDE448D +:101C00000CEB1A2A4FEA1E2E4FEA1A2A0EF0FF1E7C +:101C10000AF47F4A4EEA0A050C95119DFF2D21D04A +:101C2000089D05F0FF1B119D05FB0BFB089D05F4AE +:101C30007F4A119D4FEA1B2E0BF1011B05FB0AFA8F +:101C40000EF0FF1E0AF5807CDE440CEB1A2A4FEAE8 +:101C50001E2E4FEA1A2A0EF0FF1E0AF47F4A4EEAA1 +:101C60000A050895149DFF2D21D00D9D05F0FF1B41 +:101C7000149D05FB0BFB0D9D05F47F4A149D4FEA57 +:101C80001B2E0BF1011B05FB0AFA0EF0FF1E0AF5D5 +:101C9000807CDE440CEB1A2A4FEA1E2E4FEA1A2AE9 +:101CA0000EF0FF1E0AF47F4A4EEA0A050D950C9DC0 +:101CB00002F0FF1E02F47F4205F0FF1C089D08FBA6 +:101CC0000CFC03FB0ECC05F0FF1E0D9D01FB0ECCA2 +:101CD00005F0FF1E0C9D09FB0ECC05F47F4E0B9DFD +:101CE00008FB0EF84FEA1C2C03FB0282089B0CF049 +:101CF000FF1C03F47F4A0D9B01FB0A2203F47F4182 +:101D00003B8809FB01290B9A191242434FEA192912 +:101D100001F0F801501C09F47F4900EB12204CEA55 +:101D2000090C6FEA10204FEA1C42CCF3072E5FFA31 +:101D30008CFC12FB05F2C0B21CFB05FC01FB002170 +:101D4000DA101EFB05FEDB0089B202F0FC02DBB2FA +:101D500002FB00E203FB00C392B21FFA83FC4B1CA0 +:101D600003EB11210CF1010303EB1C2301F4784177 +:101D7000C3F3C4230B43511C01EB1222520902F49A +:101D8000FC6213433B80299B02371C442A9B1E4460 +:101D9000189B013B189398E6299B1C442A9B1E44E0 +:101DA000079B013B07930A9B02330A936DE623D0FE +:101DB000079B2998013B00FB034000143FF582AECE +:101DC00001398842BFF67EAE2A9901FB03631B14DA +:101DD0003FF578AE013A9342BFF674AEDDF81CB021 +:101DE000DDF82890BBF1000F6CDC079B23EAE3755C +:101DF0000A9B03EB45030A93179B002B40F3B38127 +:101E0000B7EE007A269B30EE040A70EEA40AF0EEDC +:101E1000626AC7EE007A31EE051AFEEEC86A16EE67 +:101E2000904AF0EE436AFEEEC86A16EE906A20EE23 +:101E3000A77A61EE277A77EE622A37EEC33AFEEE92 +:101E4000C82ABEEEC83A12EE902AF0EE472A92FB5C +:101E5000F3F313EE102A2993269BB0EE673A92FB18 +:101E6000F3F32A93179B199A013B1793269B08BFFC +:101E700013460793FBE500293FF46BAE58F8233077 +:101E800008931B0E119364E612F101083FF57BAF36 +:101E90004345FFF678AF1CF101083FF574AFC64526 +:101EA000FFF671AF1A9D1BB201920FFA8EF2CDE9C7 +:101EB0000415CDE902C000923946109A1B98FFF72D +:101EC00079FC60E72E9B2714109DC4F30332B3F90D +:101ED00008103314C6F3033001FB037305EB8307CB +:101EE00055F823304FEA136C002A00F033817D68E7 +:101EF0000E952D0E159578B101F1804101398900BB +:101F0000043107EB010E79580991090E1291DEF8A0 +:101F100004100F91090E169192B2159980B2129D7C +:101F200002FB00F81201C8EB0010A2EB080EC2F58C +:101F3000807280B21FFA8EFE121A0EFB01F192B26D +:101F400002FB0C1100FB0511169D08FB0511C1F3E6 +:101F50000721002900F0F580BCF1FF0F19D003F034 +:101F6000FF1A03F47F430CFB0AFA0CFB03FC4FEA55 +:101F70001A230AF1011A0CF5807703F0FF1307EB1F +:101F80001C2753443F0A1B0A07F47F4703F0FF1343 +:101F90003B43159DFF2D20D00E9D05F0FF17159D8D +:101FA0006F430E9D4FEA172C05F47F4A159D07F1EC +:101FB00001170CF0FF1C05FB0AFABC440AF58077F8 +:101FC0004FEA1C2C07EB1A2A0CF0FF1C4FEA1A2AC6 +:101FD0000AF47F4A4CEA0A050E95129DFF2D20D087 +:101FE000099D05F0FF17129D6F43099D4FEA172CBD +:101FF00005F47F4A129D07F101170CF0FF1C05FB49 +:102000000AFABC440AF580774FEA1C2C07EB1A2A1F +:102010000CF0FF1C4FEA1A2A0AF47F4A4CEA0A0520 +:102020000995169DFF2D20D00F9D05F0FF17169DD9 +:102030006F430F9D4FEA172C05F47F4A169D07F159 +:1020400001170CF0FF1C05FB0AFABC440AF5807767 +:102050004FEA1C2C07EB1A2A0CF0FF1C4FEA1A2A35 +:102060000AF47F4A4CEA0A050F950E9D03F0FF1C07 +:1020700003F47F4305F0FF17099D0EFB07F702FBF2 +:102080000C7705F0FF1C0F9D00FB0C7705F0FF1C83 +:102090000E9D08FB0C7705F47F4C0B9D0EFB0CFE90 +:1020A0003F0A02FB03E3099A07F0FF1702F47F4A95 +:1020B0000F9A00FB0A3302F47F4CB9F8000008FBCA +:1020C0000C3C0B9B021259434FEA1C2C02F0F80205 +:1020D0000CF47F4C4B1C47EA0C0703EB11213B0C23 +:1020E0006FEA1121C7F3072CFFB213FB05F3C9B246 +:1020F00017FB05F702FB0132C3101CFB05FCC000F7 +:1021000092B203F0FC03C0B203FB01C300FB0170F9 +:10211000511C9BB280B201EB122200F1010C02F4BF +:1021200078420CEB102CCCF3C42C4CEA020203F1E5 +:10213000010C0CEB13235B0903F4FC631A43A9F8AD +:102140000020299B09F102090BF1FF3B1C442A9B4B +:102150001E4447E600283FF4DFAE57F821100991EE +:10216000090E1291D8E61DB0BDE8F08F2DE9F04FB1 +:1021700085B0DDE90F740291002C04FB0371BDF9F9 +:1021800038E09DF8446002EB810C9DF84800C0F2F5 +:102190000C81A64540F30981002FC0F20481BB42A7 +:1021A00040F3018152F821507A1C00F101819342E1 +:1021B00040F3FE80002E00F0FD80DCF804100134B6 +:1021C00000F1FC80A64540F3F980002800F0F9807A +:1021D000002F0CEB8302C0F2EF80BB4240F3EC8097 +:1021E0005CF82340013700F1EF80BB4240F3EC8004 +:1021F000002E00F0EB805268B6B280B24FEA116A4E +:1022000000FB06FE36014FEA156BCEEB0010A6EB85 +:102210000E07C6F580734FEA146980B2BFB21B1A6D +:102220004FEA126807FB0AF69BB20BFB036600FB42 +:1022300009660EFB0866C6F307260096002E00F01E +:10224000AF8005F0FF1C05F47F45029E0BFB0CFCE4 +:102250000BFB05F536884FEA1C2B0CF1011C019590 +:102260000BF0FF1BDC444FEA1C2C0CF0FF15039510 +:10227000019D05F5807C0CEB152501F0FF1C01F498 +:102280007F410AFB0CFC4FEA152B0AFB01FA4FEACF +:102290001C250CF1011C0AF5807105F0FF1501EBFE +:1022A0001A2A654404F0FF1C04F47F444FEA1A2AFA +:1022B00009FB0CFC2D0A09FB04F90AF47F4A4FEADA +:1022C0001C2105F0FF1509F580740CF1011C01F0CB +:1022D000FF117D4304EB192902F0FF1402F47F4241 +:1022E000614408FB04F44FEA192908FB02F8090AC3 +:1022F000220A04F1011401F0FF1107FB0AF702F0B2 +:10230000FF12144408F58072240A02EB1828039A7D +:1023100004F0FF1402FB03554FEA182804FB0E5487 +:1023200008F47F4801FB0041090A01F0FF140BF497 +:102330007F4103FB0171009B0EFB081E09F47F41E6 +:10234000DA43331200FB01E1F010D2B203F0F803DC +:10235000090A00F0FC00F600534301F47F415043AA +:10236000F6B2214356435A1C02EB13220B0C03EB2B +:102370001223421C02EB10200A0A1B0202EB10225D +:1023800003F47843D20002F4FC621343721C02EBA4 +:10239000162601EB1621C1F3C4011943029B1980D3 +:1023A00005B0BDE8F08F0025FEE600210D4606E7EA +:1023B000002104E7314602E7002413E70022144617 +:1023C0001AE70246044617E7002215E7324613E7EC +:1023D0002DE9F04F9BB01892299A199016915068E8 +:1023E00007931268DDE92A13DDE9254600FB031394 +:1023F00002EB43030A932C9B1B680F93169B002B45 +:1024000003DC189B002B40F387832C9BB3F9081047 +:10241000B3F90C20481E571E079B002B40F3668122 +:102420005FEA244C4FEA264306D4844504DA002BA5 +:1024300002DBBB42C0F25B811CF1010C00F14B815D +:102440006145C0F24881013300F145819A42C0F2F2 +:102450004281079B0A9F1793179B002B40F36581CE +:102460002C9A4FEA264C2C9BC4F30331D2F80CE093 +:102470002214C6F303309B6800F1D58103F1FF38C5 +:10248000424580F2D081BCF1000FC0F2CC810EF148 +:10249000FF38C44580F2C7811BB20F9D0CFB03229D +:1024A00005EB820855F822204FEA126E002900F051 +:1024B0008281D8F804500B952D0E129580B103F14E +:1024C0008043013B9B00043308EB030C58F80330B6 +:1024D00008931B0E1093DCF804300C931B0E13931F +:1024E00089B2129B80B2109D01FB00F90901C9EB72 +:1024F0000010A1EB0908C1F5807180B21FFA88F8BD +:10250000091A08FB03F389B201FB0E3300FB053304 +:10251000139D09FB0533C3F30723002B00F0D28082 +:10252000BEF1FF0F1BD002F0FF1A02F47F420EFB38 +:102530000AFA0EFB02FE4FEA1A220AF1011A0EF500 +:10254000807C02F0FF120CEB1E2C52444FEA1C2C34 +:10255000120A0CF47F4C02F0FF1242EA0C02129DA8 +:10256000FF2D21D00B9D05F0FF1B129D05FB0BFBE2 +:102570000B9D05F47F4A129D4FEA1B2E0BF1011BA8 +:1025800005FB0AFA0EF0FF1E0AF5807CDE440CEB18 +:102590001A2A4FEA1E2E4FEA1A2A0EF0FF1E0AF4DC +:1025A0007F4A4EEA0A050B95109DFF2D21D0089D0C +:1025B00005F0FF1B109D05FB0BFB089D05F47F4EEE +:1025C000109D05FB0EFA4FEA1B2E0BF1011B0EF0BE +:1025D000FF1E0AF5807CDE440CEB1A2A4FEA1E2E01 +:1025E0004FEA1A2A0EF0FF1E0AF47F4A4EEA0A0545 +:1025F0000895139DFF2D21D00C9D05F0FF1B139D09 +:1026000005FB0BFB0C9D05F47F4A139D4FEA1B2E27 +:102610000BF1011B05FB0AFA0EF0FF1E0AF5807C88 +:10262000DE440CEB1A2A4FEA1E2E4FEA1A2A0EF04D +:10263000FF1E0AF47F4A4EEA0A050C950B9D02F034 +:10264000FF1E02F47F42FF2B05F0FF1C089D08FBD4 +:102650000CFC01FB0ECC05F0FF1E0C9D00FB0ECC0C +:1026600005F0FF1E0B9D09FB0ECC05F47F4E08FB09 +:102670000EF84FEA1C2C01FB028208990CF0FF1C9B +:1026800001F47F4A0C9900FB0A2201F47F4009FB08 +:1026900000294FEA192909F47F494CEA090C4FEA4D +:1026A0001C2240F091804FEA5C1322F4FF6203F495 +:1026B000FC6322F007021A43CCF3C40C4CEA020C70 +:1026C000A7F800C0279B02371C44289B1E44179B79 +:1026D000013B1793C0E6279B1C44289B1E44079B85 +:1026E000013B07930A9B02330A9395E624D0079B8C +:1026F0002798013B00FB034000143FF5AAAE0139C7 +:102700008842BFF6A6AE289901FB03631B143FF570 +:10271000A0AE013A9342BFF69CAEDDF81CB0DDF8E6 +:102720002880BBF1000F00F39A80079B23EAE37532 +:102730000A9B03EB45030A93169B002B40F3EC81A5 +:10274000B7EE007A249B30EE040A70EEA40AF0EE95 +:10275000626AC7EE007A31EE051AFEEEC86A16EE1E +:10276000904AF0EE436AFEEEC86A16EE906A20EEDA +:10277000A77A61EE277A77EE622A37EEC33AFEEE49 +:10278000C82ABEEEC83A12EE902AF0EE472A92FB13 +:10279000F3F313EE102A2793249BB0EE673A92FBD3 +:1027A000F3F32893169B189A013B1693249B08BFBA +:1027B0001346079322E600283FF492AE58F82330E0 +:1027C00008931B0E10938BE63988DB43D44D4FEAF8 +:1027D000212E5FFA83F80EF0F80EC810CB000EFB26 +:1027E00008FE00F0FC00DBB20EF1010100FB08F076 +:1027F00003FB08F301EB1E2E4FEA1C4101EB1E21E7 +:1028000000F1010E0EEB1020C9B202EB102205EA16 +:102810000121D20002F4FC620A43591C01EB13238C +:102820000CEB132C48E712F101083FF54BAF434581 +:10283000FFF648AF1CF101083FF544AFC645FFF66F +:1028400041AF1BB2CDE9012C0FFA8EF2CDE9031096 +:10285000009239460F9A1998FFF788FC32E72C9BB3 +:1028600021140F9DC4F30332B3F908703314C6F377 +:10287000033007FB03130F9901EB830155F8233055 +:102880004FEA136C002A00F008814D680D952D0E5B +:10289000149578B107F18047013FBF00043701EB81 +:1028A000070EC9590991090E1191DEF804100E9115 +:1028B000090E159192B2119D80B202FB00F912012E +:1028C000C9EB0010A2EB090EC2F58071149A80B218 +:1028D0001FFA8EFE091A0EFB02F289B201FB0C22CE +:1028E00000FB0522159D09FB0522C2F30722002AE1 +:1028F00000F0CA80BCF1FF0F19D003F0FF1A03F4F7 +:102900007F430CFB0AFA0CFB03FC4FEA1A230AF183 +:10291000011A0CF5807703F0FF1307EB1C275344D3 +:102920003F0A1B0A07F47F4703F0FF133B43149D44 +:10293000FF2D20D00D9D05F0FF17149D6F430D9DB9 +:102940004FEA172C05F47F4A149D07F101170CF08C +:10295000FF1C05FB0AFABC440AF580774FEA1C2CE1 +:1029600007EB1A2A0CF0FF1C4FEA1A2A0AF47F4AD6 +:102970004CEA0A050D95119DFF2D20D0099D05F00B +:10298000FF17119D6F43099D05F47F4C119D05FBB9 +:102990000CFA4FEA172C07F101170CF0FF1CBC448E +:1029A0000AF5807707EB1A2A4FEA1C2C4FEA1A2AFD +:1029B0000CF0FF1C0AF47F4A4CEA0A050995159DA4 +:1029C000FF2D20D00E9D05F0FF17159D6F430E9D26 +:1029D0004FEA172C05F47F4A159D07F101170CF0FB +:1029E000FF1C05FB0AFABC440AF580774FEA1C2C51 +:1029F00007EB1A2A0CF0FF1C4FEA1A2A0AF47F4A46 +:102A00004CEA0A050E950D9D03F0FF1C03F47F436D +:102A1000FF2A05F0FF17099D0EFB07F701FB0C7756 +:102A200005F0FF1C0E9D00FB0C7705F0FF1C0D9DB3 +:102A300009FB0C7705F47F4C0EFB0CFE4FEA1727C1 +:102A400001FB03E3099907F0FF1701F47F4A0E9990 +:102A500000FB0A3301F47F4C09FB0C3C4FEA1C2CB1 +:102A60000CF47F4C47EA0C074FEA17231ED17A0972 +:102A700023F4FF63C7F3C40702F4FC6223F00703E7 +:102A800013431F43A8F80070279B08F102080BF1BD +:102A9000FF3B1C44289B1E4443E600283FF40AAF3A +:102AA00051F827100991090E119103E7B8F80010A9 +:102AB000D2434FEA212C5FFA82FE0CF0F80CC810CA +:102AC000CA000CFB0EFC00F0FC00D2B20CF10101BC +:102AD00000FB0EF002FB0EF201EB1C2C390C01EB9B +:102AE0001C2C0F495FFA8CFC01EA0C2C411C01EBF9 +:102AF0001020511C03EB102001EB1222C00007EB49 +:102B0000122700F4FC60C7F3C4074CEA000C47EA44 +:102B10000C0CA8F800C0B7E71BB0BDE8F08F00BFF1 +:102B200000F8FFFF2DE9F047DDE90A05BDF9208037 +:102B3000002DBDF924909DF8307005FB030E9DF823 +:102B400034C0C0F28C80A94540F389800028C0F2CF +:102B50008480804540F381804FEA5E041EF0010FBF +:102B6000165D0CBF06F00F06361106EB0616F6B220 +:102B7000441C77D4A04575DD002F75D00EF1010AF5 +:102B80004FEA5A041AF0010F145D0CBF04F00F0451 +:102B9000241104EB0414E4B2013569D4A94567DDBE +:102BA000BCF1000F67D0002860DB80455EDD03EBE1 +:102BB0000E094FEA590519F0010F555D0CBF05F0DC +:102BC0000F052D1105EB0515EDB2013056D48045EA +:102BD00054DD002F54D001339E444FEA5E031EF0B3 +:102BE000010FD05C0CBF00F00F00001100EB0010D3 +:102BF000C3B2BAB21FFA8CFC02FB0CF01201C0EB9C +:102C00000C1CC2F58077121A1FFA8CFC92B2A7EB4B +:102C10000C076243BFB206FB07220CFB052500FB35 +:102C20000353C3F30723B3B19DF838205A43531C11 +:102C300003EB12232D4A1B121268FF2B4FEA1226B8 +:102C400020D150092A4BC2F3C40200F4FC60334087 +:102C5000184302430A80BDE8F087002688E7002475 +:102C6000264699E7002497E73C4695E70025ACE720 +:102C700000231D46BDE763466546BAE70023B8E773 +:102C80003B46B6E70D889FB2C2F30740DB432C12E8 +:102C900010FB07F0DBB204F0F804F6B2D2B204FB8A +:102CA0000304E81012FB07F2ED0000F0FC00A4B2F0 +:102CB00016FB07F6EDB200FB036605FB0323B0B27B +:102CC0009AB2631C03EB1424531C03EB1223421C23 +:102CD00004F4784402EB1020C3F3C42340092343D7 +:102CE00000F4FC6003430B80B5E700BF3CE7012024 +:102CF00000F8FF002DE9F04F97B014920993259A40 +:102D00009DF8A43015900D9150680F931268DDE97D +:102D10002613DDE9214600FB031302EB4309289B40 +:102D20009B68013323F001030A93289B1F680D9BC6 +:102D3000002B03DC149B002B40F38982289BB3F902 +:102D40000810B3F90C20481E02F1FF3C099B002B30 +:102D500040F3C5805FEA244E4FEA264306D48645F9 +:102D600004DA002B02DB6345C0F2BA801EF1010ECB +:102D700000F1AB807145C0F2A880013300F1A5805D +:102D80009A42C0F2A280099BC846BDF928A00E93C2 +:102D90000E9B002B40F3C480289B3014C4F30332F5 +:102DA000C6F30331D3E902CE231400F14F810CF1B5 +:102DB000FF3B5B4580F24A810028C0F247810EF15B +:102DC000FF3B584580F242810A9D00FB05335808BD +:102DD000DD0717F800C054BF0CF00F0C4FEA2C1C95 +:102DE0000CEB0C1C5FFA8CFC002A00F0DD80581CF8 +:102DF0004FEA500EC00717F80EE054BF0EF00F0E4A +:102E00004FEA2E1E0EEB0E1E5FFA8EF01090D9B117 +:102E100053445808DD0703F10103385C54BF00F048 +:102E20000F000011DD0700EB0010C0B20B904FEA5D +:102E3000530017F800E054BF0EF00F034FEA2E13B3 +:102E400003EB0313DBB2119392B2109D89B202FB24 +:102E500001F31201C3EB0111C2F58070D21A89B2DD +:102E600092B2401A6A4380B20CFB002C0B9A01FB11 +:102E700002C1119A03FB0213C3F30723DBB10F9ABC +:102E800053435A1C02EB1323C64A1B121268FF2B32 +:102E90004FEA122C40F0998053092CF4FF6CC2F3D6 +:102EA000C40203F4FC632CF0070C43EA0C0C4CEA5C +:102EB0000202A8F80020239B08F102081C44249B6E +:102EC0001E440E9B013B0E9362E7239B09F102090E +:102ED0001C44249B1E44099B013B099336E724D0E4 +:102EE000099B2398013B00FB034000143FF54BAFC7 +:102EF00001398842BFF647AF249901FB03631B14D5 +:102F00003FF541AF013A9342BFF63DAFBDF92830DE +:102F1000C846DDF824B00E93BBF1000F00F3B78074 +:102F2000099B23EAE37509EB45090D9B002B40F350 +:102F30008E81B7EE007A209B30EE040A70EEA40A70 +:102F4000F0EE626AC7EE007A31EE051AFEEEC86A4C +:102F500016EE904AF0EE436AFEEEC86A16EE906AEC +:102F600020EEA77A61EE277A77EE622A37EEC33A2F +:102F7000FEEEC82ABEEEC83A12EE902AF0EE472ABC +:102F800092FBF3F313EE102A2393209BB0EE673AE3 +:102F900092FBF3F324930D9B149A013B0D93209B1A +:102FA00008BF13460993C2E600293FF44DAF0AEB70 +:102FB00003004308C007FB5C54BF03F00F031B1161 +:102FC00003EB0313DBB20B933EE7B8F800E01FFA04 +:102FD00083FBC2F30741DB434FEA2E2011FB0BF1C9 +:102FE000DBB200F0F8005FFA8CFCD2B200FB0310F9 +:102FF0004FEAEE011CFB0BFC4FEACE0E80B201F053 +:10300000FC0112FB0BFB5FFA8EFE01FB03CC0EFBF7 +:1030100003BB431C1FFA8CFC1FFA8BFB03EB102035 +:103020000CF1010100F478430BF1010001EB1C2CC1 +:1030300000EB1B204FEA5C1CC0F3C4200CF4FC6CBA +:10304000184340EA0C00A8F8000034E713F1010B24 +:103050003FF531AFDC45FFF62EAF10F1010B3FF528 +:103060002AAFDE45FFF627AF02930FFA8EF30F9DCE +:1030700001930FFA8CF3CDE90302CDE90515009316 +:103080003A46534641461598FFF74CFD13E7221484 +:103090000A9D3314C4F30331C6F3033005FB032345 +:1030A0005A08DD07BA5C54BF02F00F02121102EB9E +:1030B0000212D2B2002977D003F1010E4FEA5E0C62 +:1030C0001EF0010F17F80CC00CBF0CF00F0C4FEAEC +:1030D0002C1C0CEB0C1C5FFA8CF5129508B30E9DA2 +:1030E0002B444FEA530CDD0703F1010317F80CC022 +:1030F00054BF0CF00F0C4FEA2C1C0CEB0C1C5FFAAD +:103100008CF54FEA530C0C95DD0717F80CC054BF33 +:103110000CF00F0C4FEA2C1C0CEB0C1C5FFA8CF320 +:10312000139389B2129D80B201FB00F30901C3EB36 +:103130000010C1F5807CC91A80B289B2ACEB000CDA +:1031400069431FFA8CFC02FB0C120C9900FB012056 +:10315000139A03FB0203C3F30723D3B10F9A53431C +:103160005A1C02EB13230F4A1B121268FF2B4FEA63 +:10317000122C2DD153092CF4FF6CC2F3C40203F4BA +:10318000FC632CF0070C43EA0C0C4CEA0202A8F892 +:103190000020239B08F102080BF1FF3B1C44249BF9 +:1031A0001E44B9E63CE701200028BAD00E9D2B440E +:1031B0004FEA530CDB0717F80CC054BF0CF00F0C90 +:1031C0004FEA2C1C0CEB0C1C5FFA8CF30C93A8E759 +:1031D000B8F800E01FFA83FAC2F30741DB434FEA75 +:1031E0002E2011FB0AF1DBB200F0F800D2B25FFA38 +:1031F0008CFC00FB03104FEAEE0112FB0AF24FEACF +:10320000CE0E80B201F0FC011CFB0AFC5FFA8EFEC0 +:103210000EFB032201FB03CC431C92B203EB1020F4 +:10322000511C1FFA8CFC00F4784001EB1221C1F311 +:10323000C42108430CF1010101EB1C2C4FEA5C1C7A +:103240000CF4FC6C40EA0C00A8F80000A1E717B0F1 +:10325000BDE8F08F2DE9F047DDE90A05BDF92080D2 +:10326000002DBDF924909DF8307005FB030E9DF8EC +:1032700034C0C0F2B080A94540F3AD800028C0F250 +:10328000A880804540F3A5804FEA5E041EF0010F40 +:10329000165D0CBF06F00F06361106EB0616F6B2E9 +:1032A000441C00F19B80A04540F39880002F00F063 +:1032B00097800EF1010A4FEA5A041AF0010F145DCB +:1032C0000CBF04F00F04241104EB0414E4B2013524 +:1032D00000F18A80A94540F38780BCF1000F00F01F +:1032E000868000287EDB80457CDD03EB0E094FEAFB +:1032F000590519F0010F555D0CBF05F00F052D1193 +:1033000005EB0515EDB2013074D4804572DD002F58 +:1033100072D001339E444FEA5E031EF0010FD05C71 +:103320000CBF00F00F00001100EB0010C3B2BAB2E6 +:103330001FFA8CFC02FB0CF01201C0EB0C1CC2F556 +:103340008077121A1FFA8CFC92B2A7EB0C0762432B +:10335000BFB206FB07220CFB052500FB0353C3F39A +:103360000723A3B3254A0E8815689AB23412DB43AB +:10337000C5F30740C5F30727DBB204F0F80410FBE0 +:1033800002F0EDB217FB02F704FB0304F01015FB8B +:1033900002F2F60000F0FC00A4B2F6B200FB0370EB +:1033A00006FB032380B29AB2631C03EB1424531C64 +:1033B00003EB1223421C04F4784402EB1020C3F305 +:1033C000C4234009234300F4FC6003430B80BDE8A1 +:1033D000F087002664E70024264678E7002476E795 +:1033E0003C4674E700258EE700231D469FE76346B1 +:1033F00065469CE700239AE73B4698E73CE70120B7 +:103400002DE9F04F93B01D460C92219A119007912F +:1034100050681268DDE92213DDE91D4600FB031345 +:1034200002EB4309249B9B68013323F001030693BD +:10343000249B1F68079B002B03DC0C9B002B40F395 +:103440006782249BB3F90810B3F90C20481E02F1DF +:10345000FF3C002D40F3B7805FEA244E4FEA26433D +:1034600006D4864504DA002B02DB6345C0F2AC804B +:103470001EF1010E00F19F807145C0F29C80013366 +:1034800000F199809A42C0F29680C846BDF918A012 +:103490000995099B002B40F3B580C4F30333301426 +:1034A000C6F303310893249BD3E902CE231400F121 +:1034B0003F810CF1FF3B5B4580F23A810028C0F26E +:1034C00037810EF1FF3B584580F23281069A00FBAE +:1034D00002335808DA07089A17F800C054BF0CF0F6 +:1034E0000F0C4FEA2C1C0CEB0C1C5FFA8CFC002A16 +:1034F00000F0CC80581C4FEA500EC00717F80EE0C1 +:1035000054BF0EF00F0E4FEA2E1E0EEB0E1E5FFA8A +:103510008EFECDF834E0B9B153445808DA07385C70 +:1035200054BF00F00F00001100EB0010C0B20A9071 +:10353000581C4308C207FB5C54BF03F00F031B1168 +:1035400003EB0313DBB20E93BDF8202089B202FB1C +:1035500001F31201C3EB0111C2F58070D21A89B2D6 +:1035600092B2401A1FFA80FE0D9842430CFB0E2CBB +:103570000A9A01FB02C10E9A03FB0213C3F307234D +:10358000FF2B40F09480BF4B1A68BF4B510903EAF0 +:103590001223C2F3C40201F4FC610B431343A8F8E5 +:1035A00000301F9B08F102081C44209B1E44099B0D +:1035B000013B09936DE71F9B013D09F102091C4482 +:1035C000209B1E4445E721D06B1E1F9800FB034043 +:1035D00000143FF55AAF01398842BFF656AF209923 +:1035E00001FB03631B143FF550AF013A9342BFF652 +:1035F0004CAFBDF91830A846CE460893B8F1000F7D +:1036000000F3B68025EAE57509EB4509079B002B19 +:1036100040F37E81B7EE007A1C9B30EE040A70EE18 +:10362000A40AF0EE626AC7EE007A31EE051AFEEEE9 +:10363000C86A16EE904AF0EE436AFEEEC86A16EECD +:10364000906A20EEA77A61EE277A77EE622A37EE4B +:10365000C33AFEEEC82ABEEEC83A12EE902AF0EE49 +:10366000472A92FBF3F313EE102A1F931C9BB0EE34 +:10367000673A92FBF3F32093079B0C9A013B079365 +:1036800008BF15461C9B18BF1D46D3E600293FF412 +:103690005BAF0AEB03004308C007FB5C54BF03F0B9 +:1036A0000F031B1103EB0313DBB20A934CE7002B50 +:1036B0003FF477AF734A1FFA83FEB8F800C0DB43CC +:1036C00010684FEA2C21C0F30742DBB201F0F80189 +:1036D000C0F3072B12FB0EF2C0B21BFB0EFB01FB6B +:1036E00003214FEAEC0210FB0EFE4FEACC0C89B22C +:1036F00002F0FC025FFA8CFC02FB03B2481C0CFBDC +:1037000003E392B29BB200EB112102F1010B01F431 +:103710007840591C0BEB122201EB13215209C1F323 +:10372000C42102F4FC6201431143A8F8001038E7F9 +:1037300013F1010B3FF535AFDC45FFF632AF10F169 +:10374000010B3FF52EAFDE45FFF62BAF02930FFACC +:103750008EF3089A01930FFA8CF30591414600937A +:103760005346CDE903023A461198FFF773FD18E777 +:10377000221406993314C4F30330C6F3033C01FB4F +:1037800003235A08D907BA5C54BF02F00F02121182 +:1037900002EB0212D2B2002863D003F1010A4FEA11 +:1037A0005A011AF0010F795C0CBF01F00F010911E9 +:1037B00001EB0111C9B20F91BCF1000F1AD00899A9 +:1037C0000B44590813F0010F03F10103795C0CBF9E +:1037D00001F00F01091101EB0111C9B20B91590858 +:1037E000DB07795C54BF01F00F01091101EB0111F6 +:1037F000C9B2109180B21FFA8CFC00FB0CF30001DF +:10380000C3EB0C1CC0F58071C01A1FFA8CFC80B28F +:10381000A1EB0C011FFA81FA0F9948430B9902FBA7 +:103820000A020CFB012C109A03FB02C3C3F307230B +:10383000FF2B2BD1134B1A68134B510903EA1223A8 +:10384000C2F3C40201F4FC610B431343AEF8003031 +:103850001F9B0EF1020E08F1FF381C44209B1E44F2 +:10386000CCE6BCF1000FC5D008990B445908DB0722 +:10387000795C54BF01F00F01091101EB0111C9B2CC +:103880000B91B7E73CE7012000F8FFFF002BDFD0EA +:10389000214A1FFA83FABEF800C0DB4310684FEAE2 +:1038A0002C21C0F30742DBB201F0F801C0F3072B73 +:1038B00012FB0AF2C0B21BFB0AFB01FB03214FEA19 +:1038C000EC0210FB0AF04FEACC0C89B202F0FC02C9 +:1038D0005FFA8CFC02FB03B20CFB03004B1C92B2A0 +:1038E00080B203EB112100F1010B01F478410BEBE5 +:1038F000102BCBF3C42B4BEA010102F1010B0BEBB4 +:103900001222520902F4FC621143AEF800109FE744 +:1039100013B0BDE8F08F00BF3CE7012070B508127E +:10392000BDF810509EB2131200F0F800CC1003F056 +:10393000F803C90010FB06F004F0FC0413FB05F3C8 +:1039400014FB06F41844D310D20003F0FC0380B239 +:10395000D2B213FB05F312FB05F21C44CBB213FBEE +:1039600006F3A4B21344421C9BB202EB102000F4F5 +:103970007842581C00EB1320C0F3C4201043621C93 +:1039800002EB1424640904F4FC64204370BD0000BD +:103990002DE9F04F8FB01C460D4616469DF8647019 +:1039A0000490189B002F00F0F68020680AAA616836 +:1039B0004FF00208043603C218680CAA596803C203 +:1039C0000AA8EFF779FD21460CA8EFF79DFDBDF998 +:1039D0003020BDF936B002F00103BDF934900693F2 +:1039E000BDF92C3003F0010105910598BDF93210A5 +:1039F000034401FB032393FBF8F31D44BDF8283077 +:103A00001A44BDF82A301944644BADF830201868C8 +:103A1000ADF8321003689B6A9847614ABDF932409D +:103A2000FF2F13881146BDF930A003FB0BFB03FBEE +:103A300004A400EB44046BD0C7F1FF03CDF824804D +:103A4000039304EB4B03CDE90732079BA34240F2FB +:103A50009D80069B002B39D02B7805F1010809F1D8 +:103A6000FF3B228803F00F03049836F81310039BE2 +:103A700000933B46FFF752FF24F8020BBBF1010F06 +:103A8000A24604F1040424DD98F80030ABF1020BE7 +:103A900034F8042C1B09049836F81310039B009388 +:103AA0003B46FFF73BFF24F8040C18F8013B34F8C1 +:103AB000022C03F00F03049836F81310039B0093B5 +:103AC0003B46FFF72BFF24F8020CD7E7A846CB466E +:103AD000D4E70ED198F80030BAF800201B090498FA +:103AE00036F81310039B00933B46FFF717FF2AF8A5 +:103AF000020B089B059A1C88BDF92C30A4EB090425 +:103B00001344099A0AEB440493FBF2F31D449CE727 +:103B100004EB4B0BA34539D9069BFBB12B786A1CF0 +:103B200009F1FF30023403F00F0336F8133024F8A4 +:103B3000023C0128234604F1040412DD1378023804 +:103B40001B0936F8133024F8043C12F8013B03F04B +:103B50000F0336F8133024F8023CEAE72A464846B9 +:103B6000E7E706D112780233120936F8122023F85B +:103B7000022C0C88059AA4EB090403EB4404BDF95C +:103B80002C30134493FBF8F31D44C3E7034B186830 +:103B90000368DB6A98470FB0BDE8F08F34E7012077 +:103BA0002EE70120F0B59DF814500F0AFF2D0CD11F +:103BB000FF2B0AD14809254BC1F3C40100F4FC6076 +:103BC0003B401843084380B2F0BD15FB03F51412C7 +:103BD000D610ABB204F0F804D000C1F307425D1C6C +:103BE00044EA5414C0B206F0FC0605EB132546EA7D +:103BF0009616C5F307251FFA85FCED4312FB0CF260 +:103C0000EBB2FDB204FB032440EA501215FB0CF5A5 +:103C1000C8B2A4B210FB0CF006FB035502FB030074 +:103C2000ADB283B2601C00EB1424581C00EB1320CF +:103C30006B1C04F4784403EB1525C0F3C4206D0914 +:103C4000204305F4FC652843BEE700BF00F8FF00F1 +:103C50002DE9F04F1C468DB00D461646169B80464A +:103C6000616808AA20684FF0020A9DF85C9004364B +:103C700003C218680AAA596803C208A8EFF71CFC17 +:103C800021460AA8EFF740FCBDF92820BDF92E70A7 +:103C900002F00103BDF92CB00393BDF9243003F009 +:103CA000010102910298BDF92A10034401FB03238C +:103CB00093FBFAF31D44BDF820301A44BDF82230BE +:103CC000ADF8282019443E4AADF82A101068059234 +:103CD00003689B6A98473B4BBDF92A401988BDF998 +:103CE00028C04F4301FB04C400EB440404EB47022B +:103CF000CDE9063A0492049B9C4258D2039B002BC8 +:103D000034D02B786F1C03F00F0356F823100B0EE2 +:103D100006D02288404600934B46FFF743FF2080A1 +:103D200002340BF1FF3ABAF1010F22DD3B781B0997 +:103D300056F823100B0E06D02288404600934B46BF +:103D4000FFF730FF208017F8013B03F00F0356F810 +:103D500023100B0E06D06288404600934B46FFF7B7 +:103D600021FF60800434AAF1020ADCE72F46DA461C +:103D7000D9E70DD13B781B0956F823100B0E06D05E +:103D80002288404600934B46FFF70CFF2080023408 +:103D9000069B029A1B88A3EB0B0304EB4304BDF9BB +:103DA00024301344079A93FBF2F31D44A3E7059BC9 +:103DB00018680368DB6A98470DB0BDE8F08F00BF54 +:103DC00034E701202EE7012070B514128D789DF89C +:103DD0001060D01004F0F804D20015FB03F500F0D9 +:103DE000FC0044EA5414D2B204FB06554C7809781E +:103DF00040EA901014FB03F442EA521211FB03F361 +:103E0000ADB200FB064402FB0633681CA4B29BB2B1 +:103E100000EB1525621C581C02EB142405F47845B0 +:103E200000EB13206409C0F3C42004F4FC642843AD +:103E3000204370BD2DE9F04F8FB01C4682460E46E0 +:103E40009DF864701546189B002F00F04181206892 +:103E50000AAA61684FF00208043503C218680CAA68 +:103E6000596803C20AA8EFF727FB21460CA8EFF711 +:103E70004BFBBDF93020BDF936B002F001030693CB +:103E8000BDF92C3003F0010105910598BDF9321000 +:103E9000034401FB032393FBF8F31E44BDF82830D1 +:103EA0001A44BDF82A301944BDF93430ADF8302039 +:103EB0000393894BADF83210186803689B6A9847E2 +:103EC000864ABDF93240FF2F13889446BDF93090E1 +:103ED00003FB049403FB0BF300EB440471D0F943A0 +:103EE00004EB4303CDF82480C9B2CDE90732049135 +:103EF000079BA34240F2E780069B002B3DD0317820 +:103F00005046049B06F1010801F00F01228800933E +:103F10003B4601EB41012944FFF756FF039B24F880 +:103F2000020B03F1FF3BBBF1010FA14604F10404B6 +:103F300027DD98F800105046049BABF1020B0909ED +:103F400034F8042C00933B4601EB41012944FFF770 +:103F50003BFF24F8040C18F8011B5046049B01F0A9 +:103F60000F0134F8022C00933B4601EB4101294438 +:103F7000FFF72AFF24F8020CD5E7B046DDF80CB0B5 +:103F8000D1E70FD198F800105046049B0909B9F801 +:103F9000002000933B4601EB41012944FFF714FF49 +:103FA00029F8020B089B059A1C88039BE41ABDF9AB +:103FB0002C301344099A09EB440493FBF2F31E449A +:103FC00096E704EB4303464FA3427CD9069A002AA6 +:103FD00054D03078711C00F00F0000EB400005EB6E +:103FE000000E285C9EF802209EF801E007EA0222FB +:103FF0004FEACE0E0EF4FC6E42EA0E0242EAD00206 +:1040000024F8022B039A02F1FF3EBEF1010F204675 +:1040100004F1040436DD0878AEF1020E000900EB6D +:10402000400005EB000A9AF801209AF80290D200AD +:1040300007EA092902F4FC6249EA020215F8009035 +:1040400042EAD90224F8042C11F8010B00F00F0009 +:1040500000EB400005EB000A9AF801209AF8029064 +:10406000D20007EA092902F4FC6249EA020215F8C3 +:10407000009042EAD90224F8022CC6E73146DDF866 +:104080000CE0C2E711D10978090901EB41016C1874 +:10409000695CA278647807EA0222E40004F4FC6414 +:1040A000224342EAD10220F8022B039ABCF80040D6 +:1040B0000599A41ABDF92C200A4400EB440492FB94 +:1040C000F8F2164480E7044B18680368DB6A9847E7 +:1040D0000FB0BDE8F08F00BF34E701202EE70120CC +:1040E00000F8FFFF204A30B513684FF6F0744CF229 +:1040F000402523F0010313601C4B1A682240AA429A +:1041000005D01B684CF270222340934224D1184BF7 +:104110001B680BBB174B1A68C2F30B02B2F58A6F10 +:104120000DD01A6840F28344C2F30B02A24206D0BB +:104130001B6840F28542C3F30B0393420CD10E4B34 +:1041400001221A601A68002AFCD10C4B186018680A +:10415000431A5842584130BD094B01221A601A686F +:10416000002AFCD1074BF1E7002000E000ED00E061 +:10417000002004E00010005C084C0258004C02587B +:10418000083002400030024001617047837B4BB130 +:10419000038901339BB2072B038181BF0023438135 +:1041A00083818373704700002DE9FF41984683881F +:1041B00004461746ADF80630A8EB0303194A0E462D +:1041C0001BB2C18800920020002BA28ABDF82850A3 +:1041D000B8BF5B428DF80400ADF808101BB2ADF813 +:1041E0000A80ADF80C50934207DC691A09B2002925 +:1041F000B8BF494209B28A4210DA20696946A8EB81 +:104200000606EF1B03685B68984700230120668160 +:104210002381A781A4F80480E580A07304B0BDE8E1 +:10422000F08100BF48C70308F0B51E464B1E85B09D +:104230000446012B0D4617464BD8B0F90A20D31C73 +:104240009BB2062B16D9DFF8A0C0B4F90410CDF844 +:1042500004C04FF0000CB4F906300069ADF80C1042 +:1042600001A98DF808C0ADF80A20ADF80E3003683A +:104270009B689847B4F90C20D31C9BB2062B16D927 +:10428000DFF864C0B4F90410CDF804C04FF0010C9D +:10429000B4F906302069ADF80C1001A98DF808C0FA +:1042A000ADF80A20ADF80E3003689B6898470D4BB7 +:1042B00001A92069019300238DF80850ADF80A7018 +:1042C000ADF80C60ADF80E3003681B68984705B078 +:1042D000F0BD0029EBD1A280C680A160A181A173AD +:1042E000E5E700BF34C703085CC703080B46014677 +:1042F000184600F04DB900F012B80368DB0706D489 +:10430000437803B1FFDE0123437018467047002055 +:10431000704701230360704708B500F00FF800F004 +:1043200045B808B5804700F00EF80000024B186849 +:10433000BFF35B8F704700BFDC00002008B5FFF7BC +:10434000F5FFFFF7EEFF08B5062000F079FB01202E +:10435000CDF748FD1FB514461A46094B1B680546A4 +:10436000D8684CB1074B0091CDE9013406492B4682 +:1043700000F0C0F9FFF7E7FF044B1C46F3E700BF6E +:104380003801002078CA030885CA030891B30308DE +:10439000002301461A46184600F0FABB024B0146BC +:1043A000186800F02BB800BF38010020024B01460E +:1043B000186800F04BBC00BF3801002070B50E4EED +:1043C0000C463168054611B900F08AFB3060214681 +:1043D000284600F085FB431C0AD0C41C24F00304CB +:1043E000A04207D0211A284600F07AFB013001D103 +:1043F0004FF0FF34204670BD84F001202DE9F843D2 +:10440000CD1C25F0030508350C2D38BF0C25002DDB +:10441000074601DBA94205D90C233B600026304644 +:10442000BDE8F883DFF8D08000F068F8D8F80030F5 +:104430001C465CBB29463846FFF7C0FF431C0446B8 +:1044400055D1D8F800402646002E45D1002C48D042 +:1044500023683146384604EB030900F041FB8145EF +:104460003FD121686D1A29463846FFF7A7FF013072 +:1044700037D023682B442360D8F80030002B38D085 +:104480005A68A2422BD100225A600FE02268521BC8 +:104490001FD40B2A17D96119A342256018BF596090 +:1044A000636808BFC8F8001062514B60384604F1D9 +:1044B0000B0600F029F826F00706231DF21AAED0ED +:1044C0009B1BA350ABE7A3426268DDD1C8F8002074 +:1044D000ECE723466468ACE734467668B4E71346F5 +:1044E000CCE70C233B60384600F00EF897E72560D8 +:1044F000DCE75B60FFDE00BF80F00120014800F0D8 +:1045000036BB00BFC5F10120014800F031BB00BF40 +:10451000C5F10120164B10B51C68236BB3B91820E8 +:10452000FFF73CFF0246206320B9124B124852218C +:10453000FFF710FF1149124BC0E90013114B8360C4 +:104540000B23838100210120C2E90401216B0E4865 +:104550000B694C690D4A584302FB0400A3FB02326D +:10456000013340EB0200C1E9043020F0004010BDEF +:1045700038010020B4CA0308CBCA03080E33CDAB00 +:1045800034126DE6ECDE05002DF451582D7F954C6C +:1045900010B5054C13462CB10A460146022000F026 +:1045A000F7FA10BD2046FCE7914B0308002310B535 +:1045B0000446C0E90033C0E9043383608181436667 +:1045C000C2818361194608225C3000F0F7F90D4B77 +:1045D00063620D4BA3620D4BE3620D4B23630D4BE6 +:1045E00024629C4206D003F16802944202D0D03388 +:1045F0009C4205D104F15800BDE8104000F0B6BA65 +:1046000010BD00BFB9470308DB4703081348030880 +:104610003748030888F00120024A0349034800F0A4 +:104620007BB800BFE000002049560308EC000020E2 +:1046300041680C4B994210B5044601D001F004F8D2 +:10464000A168094B994202D0204600F0FDFFE168C5 +:10465000064B994204D02046BDE8104000F0F4BF5C +:1046600010BD00BF88F00120F0F0012058F10120BA +:1046700010B50B4B0B4C0C4A1A602046002204214B +:10468000FFF794FF04F1680001220921FFF78EFF74 +:1046900004F1D0000222BDE810401221FFF786BFCE +:1046A000C0F1012088F0012019460308014800F0FC +:1046B0005EBA00BFC6F10120014800F059BA00BF40 +:1046C000C6F1012010B50446FFF7F0FF236A1BB1C5 +:1046D000BDE81040FFF7F0BF044B2362044B1B689A +:1046E000002BF5D1FFF7C4FFF2E700BF3146030806 +:1046F000C0F101200EB403B5014603AB054853F8E1 +:10470000042B0068019300F06FFC02B05DF804EB2D +:1047100003B07047380100202DE9F843074688466A +:1047200014460026D4E90195B9F1010905D524689C +:10473000002CF7D13046BDE8F883AB89012B07D9AF +:10474000B5F90E30013303D029463846C047064339 +:104750006835E9E70FB407B5064904AB086853F8B4 +:10476000042B8168019300F03FFC03B05DF804EB7B +:1047700004B07047380100200EB400B59CB01DABEA +:10478000029006906FF00041094807910491094991 +:1047900053F8042B05910068019302A900F0FCFA7C +:1047A000029B00221A701CB05DF804EB03B0704746 +:1047B000380100200802FFFF10B50C46B1F90E10B9 +:1047C00000F068F90028ABBF636DA3891B1823F4C0 +:1047D0008053ACBF6365A38110BD2DE9F0411F4636 +:1047E0008B89DB0505460C46164605D5B1F90E103A +:1047F0000223002200F03CF9A389B4F90E1023F43F +:104800008053A38132463B462846BDE8F04100F084 +:1048100077B910B50C46B1F90E1000F029F9431C18 +:10482000A38915BF606523F4805343F48053A381AB +:1048300018BFA38110BDB1F90E1000F009B9F8B589 +:104840000E461446054618B1036A0BB9FFF73AFF46 +:10485000A369A360A3891A0725D523691BB323681D +:104860002269981A6369F6B28342374604DC21460E +:10487000284600F0E9FEE0B9A368013BA360236885 +:104880005A1C22601E706269431C9A4204D0A3899C +:10489000DB0706D50A2E04D12146284600F0D4FEB7 +:1048A00038B93846F8BD2146284600F005F80028FA +:1048B000D5D04FF0FF37F4E738B52A4B05461868D6 +:1048C0000C4618B1036A0BB9FFF7FCFEA389B4F9D3 +:1048D0000C20180722D4D90607D409232B6042F0F4 +:1048E0004003A3814FF0FF3034E0580712D5616BCD +:1048F00041B104F14403994202D0284600F0A6F9E0 +:1049000000236363A38923F02403A381002363604E +:1049100023692360A38943F00803A38123694BB96A +:10492000A38903F42073B3F5007F03D02146284602 +:1049300000F0D8FEA089B4F90C2010F001030AD0D1 +:104940000023A36063695B42A361236943B910F04C +:104950008000C4D138BD810758BF6369A360F4E704 +:104960000020F7E73801002010B5013902449042D9 +:1049700001D1002005E0037811F8014FA34201D0D6 +:10498000181B10BD0130F2E7884210B501EB02049C +:1049900002D98442234607D8431EA14208D011F809 +:1049A000012B03F8012FF8E7024401468A4200D1A7 +:1049B00010BD13F8014D02F8014DF7E7024403461C +:1049C000934200D1704703F8011BF9E710B56AB1B3 +:1049D0000139841810F8012B11F8013F9A4203D1D4 +:1049E000A04201D0002AF5D1D01A10BD1046FCE734 +:1049F0001F2938B504460D4604D9162303604FF02D +:104A0000FF3038BDC26B12B152F821304BB920468D +:104A100000F064F82A4601462046BDE8384000F020 +:104A20004BB8012B0AD0591C03D116230360012077 +:104A3000E7E7002442F82540284698470020E0E7B1 +:104A4000024B01461868FFF7D3BF00BF38010020B2 +:104A500038B5064D0023044608462B60CDF7E4F92F +:104A6000431C02D12B6803B1236038BDA4E60120AA +:104A700038B5074D04460846114600222A601A46FA +:104A8000CDF7DCF9431C02D12B6803B1236038BD9C +:104A9000A4E6012038B5074D044608461146002219 +:104AA0002A601A46CDF7A4F9431C02D12B6803B142 +:104AB000236038BDA4E6012038B5074D0023044625 +:104AC000084611462B60CDF785F9431C02D12B68AF +:104AD00003B1236038BD00BFA4E60120CDF778B94B +:104AE00038B5064D0023044608462B60CDF7A8F9DB +:104AF000431C02D12B6803B1236038BDA4E601201A +:104B000038B5074D04460846114600222A601A4669 +:104B1000CDF77CF9431C02D12B6803B1236038BD6B +:104B2000A4E6012070B50D4D0D4C641BA4100026A9 +:104B3000A64209D10B4D0C4C00F06AFE641BA41078 +:104B40000026A64205D170BD55F8043B98470136B2 +:104B5000EEE755F8043B98470136F2E77CCB0308B3 +:104B60007CCB03087CCB030898CB030870477047C5 +:104B700070470A44914200F1FF3300D1704710B5ED +:104B800011F8014B03F8014F9142F9D110BD00001B +:104B90002DE9F843DFF8B0800646D8F800001F463C +:104BA0000D469146FFF7E3FF234B1C6834B9234CB5 +:104BB0001C60234B13B11B68C4F8883063681F2B3B +:104BC00007DDD8F80000FFF7D3FF4FF0FF30BDE856 +:104BD000F8832EB3D4F8880068B91A4B002BF0D0B4 +:104BE0004FF48470FFF7DAFB0028EAD00023C0E915 +:104BF0004033C4F88800636840F8239001229A404B +:104C000000EB8301D0F800311343C0F80031022ECD +:104C1000C1F8807002BFD0F804311343C0F80431EA +:104C20006368D8F800005A1C0233626044F82350CD +:104C3000FFF79EFF0020CAE754F20120C8F10120CF +:104C400024CB03089D4303083C01002037B500290D +:104C500044D051F8043C0190002BA1F10404B8BFEA +:104C6000E418FFF74BFC1E4A0198136833B96360E0 +:104C7000146003B0BDE83040FFF746BCA34208D93A +:104C8000256861198B4201BF19685B684919216069 +:104C9000EDE71A465B680BB1A342FAD911685518C3 +:104CA000A5420BD1246821445418A3421160E0D1DD +:104CB0001C685B6853600C441460DAE702D90C236B +:104CC0000360D6E7256861198B4204BF19685B68E9 +:104CD000636004BF491921605460CAE703B030BD66 +:104CE00080F001202DE9F0478E681F46BE420B6818 +:104CF00082460C4690462CD88A8912F4906F26D0B2 +:104D00006569096905EB4505A3EB010905EBD57557 +:104D10007B1C4B446D109D4238BF1D46530527D563 +:104D20002946FFF76BFB064660B321694A46FFF749 +:104D300020FFA38923F4906343F08003A3812661BD +:104D400065614E44A5EB09052660A5603E46BE425E +:104D500000D93E46206832464146FFF715FEA3685B +:104D60009B1BA3602368334423600020BDE8F087C9 +:104D70002A4600F015FD06460028E0D1216950467C +:104D8000FFF764FF0C23CAF80030A38943F0400307 +:104D9000A3814FF0FF30E9E72DE9F04F98468B896A +:104DA0001B069DB007460D4614460ED50B6963B928 +:104DB0004021FFF723FB2860286120B90C233B60CA +:104DC0004FF0FF30D0E040236B6100230993202394 +:104DD0008DF82930CDF80C803023DFF8A4818DF8D0 +:104DE0002A304FF0010923469A4613F8012B0AB1E5 +:104DF000252AF9D1BAEB040B0BD05B462246294693 +:104E00003846FFF76FFF013000F0A980099A5A4435 +:104E100009929AF80030002B00F0A18000234FF097 +:104E2000FF32CDE905230AF1010A049307938DF8B7 +:104E300053301A935446052214F8011B5048CBF7FF +:104E4000E7F9049AD8B9D00644BF20238DF853302F +:104E5000110744BF2B238DF853309AF800302A2BCA +:104E600015D0079A544600204FF00A0C214611F83D +:104E7000013B303B092B4DD9B0B1079214E0A0EBB8 +:104E8000080309FA03F313430493A246D2E7039BF2 +:104E9000191D1B680391002BBBBF5B4242F002024D +:104EA00007930793B8BF049223782E2B0CD1637815 +:104EB0002A2B34D1039B1A1D1B680392002BB8BF09 +:104EC0004FF0FF3302340593DFF8C4A021780322AA +:104ED0005046CBF79DF938B1049BA0EB0A00402265 +:104EE000824013430134049314F8011B25488DF8C4 +:104EF00028100622CBF78CF9002838D0224B1BBB98 +:104F0000039B073323F0070308330393099B3344C0 +:104F1000099368E70CFB02320C460120A6E7002348 +:104F20000134059319464FF00A0C204610F8012B66 +:104F3000303A092A03D9002BC6D00591C4E70CFBEF +:104F4000012104460123F0E703AB00932A460F4BEF +:104F500004A93846AFF30080421C0646D6D1AB897F +:104F60005B063FF52DAF09981DB0BDE8F08F03AB90 +:104F700000932A46054B04A9384600F0BDF9EBE73B +:104F800028CB030832CB030800000000E54C0308DF +:104F90002ECB03089368013B002B10B4936008DA12 +:104FA0009469A34201DB0A2903D15DF8044BFFF7A2 +:104FB00046BC1368581C1060197008465DF8044B15 +:104FC0007047F8B506460F461446D518AC4201D1D5 +:104FD000002007E014F8011B3A463046FFF7DAFFDD +:104FE000431CF3D1F8BD00002DE9F04F0D469DB0F4 +:104FF00014469846064618B1036A0BB9FFF762FBE0 +:105000006B6ED90705D4AB899A0502D4A86DFFF75A +:10501000AEFDAB891B0701D52B699BB929463046EC +:10502000FFF74AFC70B16B6EDC0704D54FF0FF3020 +:105030001DB0BDE8F08FAB899805F7D4A86DFFF7D8 +:1050400097FDF3E70023099320238DF82930CDF84D +:105050000C803023DFF8B0818DF82A304FF0010941 +:1050600023469A4613F8012B0AB1252AF9D1BAEB47 +:10507000040B0BD05B46224629463046FFF7A1FFC2 +:10508000013000F0A980099A5A4409929AF8003038 +:10509000002B00F0A18000234FF0FF32CDE9052363 +:1050A0000AF1010A049307938DF853301A9354467A +:1050B000052214F8011B5448CBF7AAF8049AD8B972 +:1050C000D10644BF20238DF85330130744BF2B2350 +:1050D0008DF853309AF800302A2B15D0079A544691 +:1050E00000204FF00A0C214611F8013B303B092B00 +:1050F0004DD9B0B1079214E0A0EB080309FA03F30D +:1051000013430493A246D2E7039B191D1B68039126 +:10511000002BBBBF5B4242F0020207930793B8BF6C +:10512000049223782E2B0CD163782A2B34D1039B45 +:105130001A1D1B680392002BB8BF4FF0FF330234D7 +:105140000593DFF8D4A0217803225046CBF760F80E +:1051500038B1049BA0EB0A00402282401343013483 +:10516000049314F8011B29488DF828100622CBF768 +:105170004FF800283FD0264B1BBB039B073323F07F +:10518000070308330393099B3B44099368E70CFB2F +:1051900002320C460120A6E700230134059319468C +:1051A0004FF00A0C204610F8012B303A092A03D997 +:1051B000002BC6D00591C4E70CFB01210446012356 +:1051C000F0E703AB00932A46124B04A93046AFF335 +:1051D00000800746781CD6D16B6ED90705D4AB8901 +:1051E0009A0502D4A86DFFF7C3FCAB895B063FF5B7 +:1051F0001DAF09981CE703AB00932A46054B04A991 +:10520000304600F079F8E4E728CB030832CB0308F6 +:1052100000000000C34F03082ECB03082DE9F04720 +:10522000164699468A680B69DDF820809342B8BF1C +:105230001346336091F8432007460C460AB1013308 +:1052400033602368990642BF3368023333602568B0 +:1052500015F0060506D104F1190AE36832689B1AB5 +:10526000AB4226DC94F84320131E226818BF0123AA +:1052700092062BD404F1430249463846C047013018 +:105280001ED02368226903F00603042B02BFE568E1 +:105290003368ED1AA3680CBF25EAE5750025934233 +:1052A000C4BF9B1AED1800261A34B5421AD100204B +:1052B00008E00123524649463846C047013003D131 +:1052C0004FF0FF30BDE8F0870135C6E7E1185A1C02 +:1052D000302081F84300224494F8451082F84310AE +:1052E0000233C7E70123224649463846C04701300A +:1052F000E6D00136D9E700002DE9FF470F7E0C9D6F +:10530000782F914680460C469A4601F1430207D811 +:10531000622F0AD8002F00F0D480582F00F0C080F0 +:1053200004F1420584F842703AE0A7F16303152BBB +:10533000F6D801A151F823F091530308A5530308AF +:105340002153030821530308215303082153030861 +:10535000A5530308215303082153030821530308CD +:1053600021530308A9540308D153030863540308C5 +:105370002153030821530308CB5403082153030886 +:10538000D153030821530308215303086B54030826 +:105390002B681A1D1B682A6004F1420584F842300C +:1053A00001239FE020682B68070603F104012960B0 +:1053B00001D51E6803E04606FBD5B3F90060002E58 +:1053C00003DA2D23764284F843305A480A2312E048 +:1053D0002B682068191D2960050601D51E6802E0AA +:1053E0004106FBD51E8853486F2F0CBF08230A23A4 +:1053F000002184F843106568A560002DA2BF2168D4 +:1054000021F0040121600EB9002D4BD01546B6FBEA +:10541000F3F103FB1167C75D05F8017D3746BB4219 +:105420000E46F4D9082B0BD12368DE0708D5236973 +:1054300061689942DEBF302305F8013C05F1FF3574 +:10544000521B2261CDF800A04B4603AA21464046DC +:10545000FFF7E4FE01304AD14FF0FF3004B0BDE861 +:10546000F087236843F0200323603348782784F8CB +:105470004570236829681F0651F8046B02D45F0643 +:1054800048BFB6B2DF0748BF43F02003296048BFDA +:1054900023601EB9236823F0200323601023A7E7AD +:1054A0002448E4E71546BDE72B6826686169181DA6 +:1054B000286035061B6801D5196002E07006FBD52F +:1054C0001980002323611546BCE72B681A1D2A604A +:1054D0001D68626800212846CAF79AFE08B1401B81 +:1054E000606063682361002384F84330AAE723697E +:1054F0002A4649464046D0470130ADD023689B0735 +:1055000013D4E068039B9842B8BF1846A6E701236E +:10551000324649464046D04701309DD00135E368C8 +:1055200003995B1AAB42F2DCEBE7002504F11906A4 +:10553000F5E700BF39CB03084ACB03088A892DE978 +:10554000F041054610070C4658D44B68002B05DC8B +:105550000B6C002B02DC0020BDE8F081E66A002E17 +:10556000F9D0002312F480522F68216A2B6032D0C8 +:10557000606DA3895A0705D56368C01A636B0BB1C8 +:10558000236CC01A00230246E66A216A2846B04707 +:10559000431CA38906D129681D292BD8294A0A4111 +:1055A000D60727D400226260D9042269226004D57C +:1055B000421C01D12B6803B96065616B2F60002923 +:1055C000C9D004F14403994202D02846FFF73EFBBC +:1055D00000206063C0E701232846B047411CC8D1C2 +:1055E0002B68002BC5D01D2B01D0162B01D12F60AD +:1055F000B1E7A38943F04003A381ADE70F69002F12 +:10560000A9D093070E6808BF4B690F6018BF00232D +:10561000A6EB07088B60B8F1000F9CDD216AA66A33 +:1056200043463A462846B047002806DCA38943F0A3 +:105630004003A3814FF0FF308EE70744A8EB00083A +:10564000E9E700BFFEFFBFDF38B50B6905460C4632 +:1056500013B90025284638BD18B1036A0BB9FFF706 +:1056600031F8B4F90C30002BF3D0626ED00704D4BB +:10567000990502D4A06DFFF77AFA28462146FFF774 +:105680005DFF636EDA070546E4D4A3899B05E1D488 +:10569000A06DFFF76DFADDE770B50C46B1F90E109D +:1056A000002996B015461E460DDAA38913F0800F27 +:1056B0004FF000010CBF4FF48063402300203160A5 +:1056C0002B6016B070BD6A4600F048F80028ECDB8D +:1056D000019901F47041A1F50053594259414FF429 +:1056E0008063EBE78B8973B59D0706460C4607D5AB +:1056F00004F14703236023610123636102B070BD9D +:1057000001AB6A46FFF7C8FF009905463046FEF731 +:1057100075FE48B9B4F90C309A05EFD423F00303B1 +:1057200043F00203A381E3E7A389206043F08003F1 +:10573000A381009B6361019B20615BB1B4F90E10F2 +:10574000304600F01DF828B1A38923F0030343F08D +:105750000103A381A3891D43A581CFE738B5074D78 +:1057600000230446084611462B60CCF760FB431C1F +:1057700002D12B6803B1236038BD00BFA4E601202D +:1057800038B5064D0023044608462B60CCF754FB81 +:10579000431C02D12B6803B1236038BDA4E601206D +:1057A0002DE9F041804614460E4621B9BDE8F0418E +:1057B0001146FEF723BE2AB9FFF748FA25462846C8 +:1057C000BDE8F08100F01BF88442074602D8B4EB34 +:1057D000500F12D821464046FEF710FE054600281D +:1057E000EDD0BC422246314628BF3A46FFF7C1F908 +:1057F00031464046FFF72AFAE1E73546DFE751F840 +:10580000043C181F002BBCBF0B58C0187047000089 +:10581000F8B500BFF8BC08BC9E467047F8B500BF9D +:08582000F8BC08BC9E4670476D +:1058280000000000FFFFFFFFFFFFFFFF0000000078 +:10583800010000000000000000000000010000005E +:10584800FFFFFFFFFFFFFFFF01000000FFFFFFFF5B +:10585800FFFFFFFF01000000010000000100000041 +:105868004D61696E5461736B00766964656F54614C +:10587800736B00546F7563684746585461736B00C7 +:1058880064656661756C745461736B0068580308CD +:105898000000000000000000000000000000000000 +:1058A80000020000180000000000000000000000D6 +:1058B8007B58030800000000000000000000000002 +:1058C8000000000000400000180000000000000078 +:1058D80000000000885803080000000000000000D5 +:1058E8000000000000000000000200001800000096 +:1058F80000000000000000007158030800000000CC +:10590800000000000000000000000000A00F0000E0 +:105918000800000000000000000000004574684C0A +:10592800696E6B00433A2F55736572732F736176F6 +:105938006172642F446F63756D656E74732F706543 +:1059480072736F2F4465762F656C656374726F6C24 +:1059580061622F6C69676874636F6E74726F6C63D1 +:105968006F6E76695F73772F53544D33325F446996 +:1059780073636F373436472F4C5749502F54617231 +:105988006765742F65746865726E657469662E63E1 +:1059980000417373657274696F6E2022257322202B +:1059A8006661696C6564206174206C696E65202588 +:1059B8006420696E2025730A0045746849660000F2 +:1059C8000000000800000040000000000040004007 +:1059D80000000000000800000008000020060C007D +:1059E800BC0700204051002000000000000000001B +:1059F8002925000871250008732500085925000885 +:105A080065250008812500081F25000823250008B2 +:105A18000000000000000000B5250008B7250008B8 +:105A2800A1250008C52500086672616D6542756686 +:105A380066657220213D20302026262022412066DE +:105A480072616D656275666665722061646472650F +:105A58007373206D757374206265207365742200FA +:105A68007669727475616C20766F696420746F75DD +:105A780063686766783A3A48414C3A3A73657446BF +:105A880072616D65427566666572537461727441C0 +:105A9800646472657373657328766F69642A2C2051 +:105AA800766F69642A2C20766F69642A29002E2E65 +:105AB8002F2E2E2F4D6964646C6577617265732F84 +:105AC80053542F746F7563686766782F6672616DBB +:105AD80065776F726B2F696E636C7564652F746F71 +:105AE8007563686766782F68616C2F48414C2E682B +:105AF8007070007769647468203E3D2044495350B3 +:105B08004C41595F57494454482026262068656906 +:105B1800676874203E3D20444953504C41595F48C2 +:105B2800454947485420262620224672616D656201 +:105B380075666665722063616E6E6F74206265209B +:105B4800736D616C6C6572207468616E2064697332 +:105B5800706C617922007669727475616C20766F59 +:105B6800696420746F7563686766783A3A48414C8F +:105B78003A3A7365744672616D6542756666657218 +:105B880053697A652875696E7431365F742C20758F +:105B9800696E7431365F742900000000000000004F +:105BA80000000000FD270008BB280008BD270008EA +:105BB80065290008012800088F070208B72800088F +:105BC80041280008D3060208E106020889120208E3 +:105BD8002D090208392800088D280008C92800085E +:105BE8009D0E0208E9060208D10A0208C90D02083A +:105BF800330E02082D0B02082D100208650F02084B +:105C0800C1110208910B02083D090208B1100208EF +:105C180035110208A12800089128000895280008D5 +:105C2800992800089D280008C92700082529000888 +:105C3800CD270008650A0208E1270008E5270008C3 +:105C4800EF270008F5270008A5060208E50B02085B +:105C5800AD070208F9380008FD3800083D2800089B +:105C680045090208430A0208DD28000841380008EF +:105C780041380008286672616D655F627566666501 +:105C8800725F73656D20213D204E554C4C292026AE +:105C98002620224372656174696F6E206F662066E4 +:105CA80072616D656275666665722073656D617097 +:105CB800686F7265206661696C656422007374613F +:105CC80074696320766F696420746F7563686766AA +:105CD800783A3A4F5357726170706572733A3A69FD +:105CE8006E697469616C697A65282900433A2F5591 +:105CF800736572732F7361766172642F446F637575 +:105D08006D656E74732F706572736F2F4465762F8F +:105D1800656C656374726F6C61622F6C6967687417 +:105D2800636F6E74726F6C636F6E76695F73772FD3 +:105D380053544D33325F446973636F373436472F9A +:105D4800546F7563684746582F7461726765742F7E +:105D580067656E6572617465642F4F535772617021 +:105D6800706572732E63707000287673796E635F46 +:105D7800717565756520213D204E554C4C292026AE +:105D88002620224372656174696F6E206F662076E3 +:105D980073796E63206D65737361676520717565CE +:105DA8007565206661696C656422003020262620AE +:105DB80022556E737570706F7274656420466F72C9 +:105DC8006D617421220075696E7433325F742053DB +:105DD800544D3332444D413A3A6765744368726FA3 +:105DE8006D415254496E707574466F726D617428B6 +:105DF800746F7563686766783A3A4269746D617062 +:105E08003A3A4269746D6170466F726D6174290027 +:105E1800433A2F55736572732F7361766172642FDD +:105E2800446F63756D656E74732F706572736F2F31 +:105E38004465762F656C656374726F6C61622F6C54 +:105E480069676874636F6E74726F6C636F6E76697E +:105E58005F73772F53544D33325F446973636F37E1 +:105E68003436472F546F7563684746582F746172EC +:105E78006765742F67656E6572617465642F535426 +:105E88004D3332444D412E6370700075696E743322 +:105E9800325F742053544D3332444D413A3A67656A +:105EA800744368726F6D4152544F757470757446BF +:105EB8006F726D617428746F7563686766783A3AB3 +:105EC8004269746D61703A3A4269746D6170466FE7 +:105ED800726D61742900302026262022556E737554 +:105EE80070706F7274656420666F726D61742200E1 +:105EF8007669727475616C20766F69642053544DAD +:105F08003332444D413A3A73657475704461746133 +:105F1800436F707928636F6E737420746F7563684C +:105F28006766783A3A426C69744F70262900000017 +:105F38000000000000000000F12A0008E513020834 +:105F4800992A0008A92A00084D140208A32A000863 +:105F58009F2A0008F92A0008192B0008FB120208DA +:105F680071140208F5120208F12B00084D2D0008E3 +:105F780087130208891302088713020831140208DC +:105F88007669727475616C20626F6F6C20536F66EE +:105F980074776172654D4A5045474465636F64651F +:105FA800723A3A6465636F64655468756D626E61D0 +:105FB800696C2875696E7433325F742C2075696E4C +:105FC80074385F742A2C2075696E7431365F742CAE +:105FD8002075696E7431365F742900433A2F557302 +:105FE8006572732F7361766172642F446F63756D88 +:105FF800656E74732F706572736F2F4465762F65A5 +:106008006C656374726F6C61622F6C696768746326 +:106018006F6E74726F6C636F6E76695F73772F53F0 +:10602800544D33325F446973636F373436472F54A6 +:106038006F7563684746582F7461726765742F6778 +:10604800656E6572617465642F536F6674776172EB +:10605800654D4A5045474465636F6465722E6370A9 +:106068007000212242756666657220746F20736D18 +:10607800616C6C2200636F6E73742075696E74387E +:106088005F742A20536F6674776172654D4A504574 +:10609800474465636F6465723A3A72656164446146 +:1060A80074612875696E7433325F742C2075696E5B +:1060B8007433325F742900286672616D654E756DA0 +:1060C800626572203E2030292026262022536F66E2 +:1060D80074776172654D4A5045474465636F6465DE +:1060E80072206465636F64696E6720776974686F8E +:1060F8007574206672616D65206461746121220087 +:106108007669727475616C20626F6F6C20536F666C +:1061180074776172654D4A5045474465636F64659D +:10612800723A3A676F746F4E6578744672616D653E +:106138002829006C696E6542756666657220262698 +:1061480020224C696E65427566666572206D7573AE +:10615800742062652061737369676E65642070726C +:10616800696F7220746F206465636F64696E67205D +:106178006469726563746C7920746F206672616DEE +:106188006562756666657222007669727475616CFF +:1061980020626F6F6C20536F6674776172654D4A29 +:1061A8005045474465636F6465723A3A6465636F46 +:1061B80064654672616D6528636F6E737420746FD1 +:1061C8007563686766783A3A52656374262C207559 +:1061D800696E74385F742A2C2075696E7433325F67 +:1061E80074290052494646002122524946462068F1 +:1061F8006561646572206E6F7420666F756E6422C7 +:1062080000766F696420536F6674776172654D4AD2 +:106218005045474465636F6465723A3A72656164D4 +:10622800566964656F48656164657228290041563E +:106238004920002122415649206865616465722021 +:106248006E6F7420666F756E6422004C495354005B +:106258002122415649204C495354206E6F742066C0 +:106268006F756E6422006176694C69737453697A3C +:1062780065006864726C0061766968006D6F7669A4 +:106288000069647831007669727475616C20626F98 +:106298006F6C20536F6674776172654D4A5045473D +:1062A8004465636F6465723A3A6465636F64654E0A +:1062B8006578744672616D652875696E74385F74A7 +:1062C8002A2C2075696E7431365F742C2075696EBE +:1062D8007431365F742C2075696E7433325F74299B +:1062E800000000000000000000000000F32D00087E +:1062F800112E0008DD330008E9330008CF2D00080F +:1063080025340008D92F00087D300008F52D000835 +:10631800B5310008C52D0008E12D0008E52D00085D +:10632800C92D000800000000000000009D3500088D +:10633800B1350008A5FB0108B9FB010879FB010884 +:106348007DFB01089FFB01082B3500082F3500084D +:10635800333500083B35000800000000000000004D +:106368007135000885350008A5FB0108B9FB01084F +:1063780079FB01087DFB01089FFB0108093500082E +:106388000D350008133500081F350008000000000F +:1063980000000000493500085D350008A5FB01082C +:1063A800B9FB010879FB01087DFB01089FFB010887 +:1063B800ED340008F1340008F5340008FF34000813 +:1063C8000000000000000000C53500080136000884 +:1063D8004335000868616E646C65203C206E6F5F11 +:1063E80073747265616D7300626F6F6C20446F75B2 +:1063F800626C654275666665726564566964656F48 +:10640800436F6E74726F6C6C65723C6E6F5F737401 +:106418007265616D732C2077696474682C206865D7 +:10642800696768742C207374726964652C206F75B1 +:10643800747075745F666F726D61743E3A3A676521 +:10644800744973506C6179696E6728746F756368F5 +:106458006766783A3A566964656F436F6E74726F0F +:106468006C6C65723A3A48616E646C6529205B779A +:10647800697468206C6F6E6720756E7369676E65E6 +:106488006420696E74206E6F5F73747265616D73DA +:10649800203D20313B206C6F6E6720756E736967F5 +:1064A8006E656420696E74207769647468203D2085 +:1064B8003438303B206C6F6E6720756E7369676E79 +:1064C800656420696E7420686569676874203D207A +:1064D8003237323B206C6F6E6720756E7369676E5A +:1064E800656420696E7420737472696465203D2048 +:1064F8003936303B20746F7563686766783A3A427C +:1065080069746D61703A3A4269746D6170466F7270 +:106518006D6174206F75747075745F666F726D61EC +:1065280074203D20746F7563686766783A3A4269EB +:10653800746D61703A3A5247423536353B20746F74 +:106548007563686766783A3A566964656F436F6E33 +:1065580074726F6C6C65723A3A48616E646C65204F +:106568003D206C6F6E6720756E7369676E65642079 +:10657800696E745D002E2E2F2E2E2F546F75636852 +:106588004746582F7461726765742F67656E657228 +:10659800617465642F446F75626C654275666665E3 +:1065A800726564566964656F436F6E74726F6C6C64 +:1065B80065722E68707000766F696420446F75622A +:1065C8006C654275666665726564566964656F4395 +:1065D8006F6E74726F6C6C65723C6E6F5F73747201 +:1065E80065616D732C2077696474682C206865690F +:1065F8006768742C207374726964652C206F7574D5 +:106608007075745F666F726D61743E3A3A6765744F +:10661800566964656F496E666F726D6174696F6EF5 +:1066280028746F7563686766783A3A566964656F67 +:10663800436F6E74726F6C6C65723A3A48616E643F +:106648006C652C20746F7563686766783A3A56698A +:1066580064656F496E666F726D6174696F6E2A2921 +:10666800205B77697468206C6F6E6720756E73693C +:10667800676E656420696E74206E6F5F73747265EF +:10668800616D73203D20313B206C6F6E6720756E05 +:106698007369676E656420696E74207769647468CD +:1066A800203D203438303B206C6F6E6720756E7348 +:1066B80069676E656420696E7420686569676874C7 +:1066C800203D203237323B206C6F6E6720756E7329 +:1066D80069676E656420696E742073747269646595 +:1066E800203D203936303B20746F756368676678C3 +:1066F8003A3A4269746D61703A3A4269746D6170F0 +:10670800466F726D6174206F75747075745F666F13 +:10671800726D6174203D20746F7563686766783A9E +:106728003A4269746D61703A3A5247423536353BA0 +:1067380020746F7563686766783A3A566964656F5E +:10674800436F6E74726F6C6C65723A3A48616E642E +:106758006C65203D206C6F6E6720756E7369676E7F +:10676800656420696E745D0075696E7433325F7498 +:1067780020446F75626C654275666665726564561D +:106788006964656F436F6E74726F6C6C65723C6E92 +:106798006F5F73747265616D732C207769647468B8 +:1067A8002C206865696768742C2073747269646545 +:1067B8002C206F75747075745F666F726D61743EAE +:1067C8003A3A67657443757272656E744672616DA4 +:1067D800654E756D62657228746F75636867667853 +:1067E8003A3A566964656F436F6E74726F6C6C6584 +:1067F800723A3A48616E646C6529205B77697468FF +:10680800206C6F6E6720756E7369676E65642069AA +:106818006E74206E6F5F73747265616D73203D20B6 +:10682800313B206C6F6E6720756E7369676E6564A7 +:1068380020696E74207769647468203D203438308C +:106848003B206C6F6E6720756E7369676E65642098 +:10685800696E7420686569676874203D2032373234 +:106868003B206C6F6E6720756E7369676E65642078 +:10687800696E7420737472696465203D20393630FE +:106888003B20746F7563686766783A3A4269746D3D +:1068980061703A3A4269746D6170466F726D6174E5 +:1068A800206F75747075745F666F726D6174203DCA +:1068B80020746F7563686766783A3A4269746D61E7 +:1068C800703A3A5247423536353B2075696E743313 +:1068D800325F74203D206C6F6E6720756E73696738 +:1068E8006E656420696E743B20746F7563686766B3 +:1068F800783A3A566964656F436F6E74726F6C6C60 +:1069080065723A3A48616E646C65203D206C6F6E22 +:106918006720756E7369676E656420696E745D00C3 +:10692800766F696420446F75626C6542756666654A +:10693800726564566964656F436F6E74726F6C6CD0 +:1069480065723C6E6F5F73747265616D732C20772E +:10695800696474682C206865696768742C2073748E +:10696800726964652C206F75747075745F666F72D8 +:106978006D61743E3A3A7365744672616D65526131 +:10698800746528746F7563686766783A3A566964FF +:10699800656F436F6E74726F6C6C65723A3A4861DA +:1069A8006E646C652C2075696E7433325F742C20AC +:1069B80075696E7433325F7429205B776974682057 +:1069C8006C6F6E6720756E7369676E656420696E9B +:1069D80074206E6F5F73747265616D73203D203132 +:1069E8003B206C6F6E6720756E7369676E656420F7 +:1069F800696E74207769647468203D203438303BB0 +:106A0800206C6F6E6720756E7369676E65642069A8 +:106A18006E7420686569676874203D203237323BA0 +:106A2800206C6F6E6720756E7369676E6564206988 +:106A38006E7420737472696465203D203936303B6A +:106A480020746F7563686766783A3A4269746D6155 +:106A5800703A3A4269746D6170466F726D61742064 +:106A68006F75747075745F666F726D6174203D2008 +:106A7800746F7563686766783A3A4269746D6170D5 +:106A88003A3A5247423536353B20746F756368672A +:106A980066783A3A566964656F436F6E74726F6CC4 +:106AA8006C65723A3A48616E646C65203D206C6F83 +:106AB8006E6720756E7369676E656420696E743BD6 +:106AC8002075696E7433325F74203D206C6F6E6779 +:106AD80020756E7369676E656420696E745D0076F3 +:106AE8006F696420446F75626C654275666665728D +:106AF8006564566964656F436F6E74726F6C6C651C +:106B0800723C6E6F5F73747265616D732C20776968 +:106B18006474682C206865696768742C20737472C3 +:106B28006964652C206F75747075745F666F726D1B +:106B380061743E3A3A736574436F6D6D616E642893 +:106B4800746F7563686766783A3A566964656F4327 +:106B58006F6E74726F6C6C65723A3A48616E646CF1 +:106B6800652C20746F7563686766783A3A5669646D +:106B7800656F436F6E74726F6C6C65723A3A436FEF +:106B88006D6D616E642C2075696E7433325F742983 +:106B9800205B77697468206C6F6E6720756E736907 +:106BA800676E656420696E74206E6F5F73747265BA +:106BB800616D73203D20313B206C6F6E6720756ED0 +:106BC8007369676E656420696E7420776964746898 +:106BD800203D203438303B206C6F6E6720756E7313 +:106BE80069676E656420696E742068656967687492 +:106BF800203D203237323B206C6F6E6720756E73F4 +:106C080069676E656420696E74207374726964655F +:106C1800203D203936303B20746F7563686766788D +:106C28003A3A4269746D61703A3A4269746D6170BA +:106C3800466F726D6174206F75747075745F666FDE +:106C4800726D6174203D20746F7563686766783A69 +:106C58003A4269746D61703A3A5247423536353B6B +:106C680020746F7563686766783A3A566964656F29 +:106C7800436F6E74726F6C6C65723A3A48616E64F9 +:106C88006C65203D206C6F6E6720756E7369676E4A +:106C9800656420696E743B2075696E7433325F7465 +:106CA800203D206C6F6E6720756E7369676E656432 +:106CB80020696E745D00626F6F6C20446F75626C42 +:106CC800654275666665726564566964656F436F8B +:106CD8006E74726F6C6C65723C6E6F5F7374726504 +:106CE800616D732C2077696474682C206865696706 +:106CF80068742C207374726964652C206F757470C5 +:106D080075745F666F726D61743E3A3A757064614E +:106D180074654672616D6528746F75636867667817 +:106D28003A3A566964656F436F6E74726F6C6C653E +:106D3800723A3A48616E646C652C20746F756368AA +:106D48006766783A3A566964656F57696467657427 +:106D58002629205B77697468206C6F6E6720756ED2 +:106D68007369676E656420696E74206E6F5F7374F3 +:106D78007265616D73203D20313B206C6F6E67201A +:106D8800756E7369676E656420696E7420776964CF +:106D98007468203D203438303B206C6F6E67207556 +:106DA8006E7369676E656420696E742068656967CB +:106DB8006874203D203237323B206C6F6E67207537 +:106DC8006E7369676E656420696E74207374726986 +:106DD8006465203D203936303B20746F75636867E1 +:106DE80066783A3A4269746D61703A3A4269746DEC +:106DF8006170466F726D6174206F75747075745F21 +:106E0800666F726D6174203D20746F756368676684 +:106E1800783A3A4269746D61703A3A524742353667 +:106E2800353B20746F7563686766783A3A566964CB +:106E3800656F436F6E74726F6C6C65723A3A486135 +:106E48006E646C65203D206C6F6E6720756E73698B +:106E5800676E656420696E745D00302026262022E6 +:106E6800556E61626C6520746F2066696E64206679 +:106E780072656520766964656F2073747265616DEB +:106E88002068616E646C65212200746F75636867A1 +:106E980066783A3A566964656F436F6E74726F6CC0 +:106EA8006C65723A3A48616E646C6520446F75622D +:106EB8006C654275666665726564566964656F439C +:106EC8006F6E74726F6C6C65723C6E6F5F73747208 +:106ED80065616D732C2077696474682C2068656916 +:106EE8006768742C207374726964652C206F7574DC +:106EF8007075745F666F726D61743E3A3A67657457 +:106F08004672656548616E646C652829205B7769FF +:106F18007468206C6F6E6720756E7369676E656440 +:106F280020696E74206E6F5F73747265616D732073 +:106F38003D20313B206C6F6E6720756E7369676EFC +:106F4800656420696E74207769647468203D203414 +:106F580038303B206C6F6E6720756E7369676E659D +:106F68006420696E7420686569676874203D203202 +:106F780037323B206C6F6E6720756E7369676E657C +:106F88006420696E7420737472696465203D2039C9 +:106F980036303B20746F7563686766783A3A4269A1 +:106FA800746D61703A3A4269746D6170466F726DC2 +:106FB8006174206F75747075745F666F726D61743B +:106FC800203D20746F7563686766783A3A42697441 +:106FD8006D61703A3A5247423536353B20746F75C9 +:106FE80063686766783A3A566964656F436F6E748A +:106FF800726F6C6C65723A3A48616E646C65203DDC +:10700800206C6F6E6720756E7369676E65642069A2 +:107018006E745D00302026262022726567697374BD +:107028006572566964656F5769646765743A205577 +:107038006E61626C6520746F20616C6C6F63617443 +:10704800652074776F2052474220627566666572C4 +:1070580073212200746F7563686766783A3A5669D7 +:1070680064656F436F6E74726F6C6C65723A3A4800 +:10707800616E646C6520446F75626C654275666606 +:1070880065726564566964656F436F6E74726F6C80 +:107098006C65723C6E6F5F73747265616D732C20E2 +:1070A80077696474682C206865696768742C207334 +:1070B80074726964652C206F75747075745F666F7F +:1070C800726D61743E3A3A72656769737465725697 +:1070D8006964656F57696467657428746F75636858 +:1070E8006766783A3A566964656F57696467657484 +:1070F8002629205B77697468206C6F6E6720756E2F +:107108007369676E656420696E74206E6F5F73744F +:107118007265616D73203D20313B206C6F6E672076 +:10712800756E7369676E656420696E74207769642B +:107138007468203D203438303B206C6F6E672075B2 +:107148006E7369676E656420696E74206865696727 +:107158006874203D203237323B206C6F6E67207593 +:107168006E7369676E656420696E742073747269E2 +:107178006465203D203936303B20746F756368673D +:1071880066783A3A4269746D61703A3A4269746D48 +:107198006170466F726D6174206F75747075745F7D +:1071A800666F726D6174203D20746F7563686766E1 +:1071B800783A3A4269746D61703A3A5247423536C4 +:1071C800353B20746F7563686766783A3A56696428 +:1071D800656F436F6E74726F6C6C65723A3A486192 +:1071E8006E646C65203D206C6F6E6720756E7369E8 +:1071F800676E656420696E745D0000000000000021 +:107208000000000091380008093900087D3B00089B +:107218009338000889390008613A0008A93800083D +:107228009D3D00087F3D0008B13900086939000814 +:107238003D3900081939000800000000000000006E +:10724800393E0008293E00082B3E00080000009047 +:107258000000000022003600050007001800264044 +:10726800B01C0090000000001400AC0000000A00F0 +:107278001400984070520090000000001400AC0008 +:1072880000000A0014009840000000000000000000 +:10729800AB3E0008AD3E000873697A656F662853F7 +:1072A800637265656E5479706529203C3D20686578 +:1072B80061702E73637265656E53746F7261676572 +:1072C8002E656C656D656E745F73697A6528292013 +:1072D800262620225669657720616C6C6F6361747D +:1072E800696F6E206572726F723A20436865636BCE +:1072F800207468617420616C6C20766965777320EE +:1073080061726520616464656420746F2046726FE1 +:107318006E74656E64486561703A3A56696577546B +:1073280079706573220050726573656E7465725466 +:107338007970652A20746F7563686766783A3A6D64 +:10734800616B655472616E736974696F6E28746FCE +:107358007563686766783A3A53637265656E2A2A78 +:107368002C20746F7563686766783A3A5072657353 +:10737800656E7465722A2A2C20746F756368676657 +:10738800783A3A4D565048656170262C20746F75CE +:1073980063686766783A3A5472616E736974696FA4 +:1073A8006E2A2A2C204D6F64656C547970652A29E1 +:1073B800205B776974682053637265656E547970D1 +:1073C80065203D204D61696E53637265656E56692F +:1073D80065773B2050726573656E74657254797079 +:1073E80065203D204D61696E53637265656E50720C +:1073F8006573656E7465723B205472616E7354795F +:107408007065203D20746F7563686766783A3A4EF8 +:107418006F5472616E736974696F6E3B204D6F644F +:10742800656C54797065203D204D6F64656C5D0016 +:107438002E2E2F2E2E2F4D6964646C657761726530 +:10744800732F53542F746F7563686766782F66724D +:10745800616D65776F726B2F696E636C7564652FEC +:107468006D76702F4D56504170706C696361746908 +:107478006F6E2E6870700073697A656F6628507237 +:107488006573656E7465725479706529203C3D207A +:10749800686561702E70726573656E746572537479 +:1074A8006F726167652E656C656D656E745F736973 +:1074B8007A652829202626202250726573656E7405 +:1074C800657220616C6C6F636174696F6E206572A0 +:1074D800726F723A20436865636B20746861742028 +:1074E800616C6C2070726573656E7465727320616F +:1074F800726520616464656420746F2046726F6EE3 +:1075080074656E64486561703A3A50726573656E69 +:107518007465725479706573220073697A656F6651 +:10752800285472616E735479706529203C3D206837 +:107538006561702E7472616E736974696F6E5374CD +:107548006F726167652E656C656D656E745F7369D2 +:107558007A65282920262620225472616E73697460 +:10756800696F6E20616C6C6F636174696F6E206502 +:1075780072726F723A20436865636B207468617435 +:1075880020616C6C207472616E736974696F6E73BC +:107598002061726520616464656420746F2046729E +:1075A8006F6E74656E64486561703A3A5472616EC4 +:1075B800736974696F6E54797065732200000000F6 +:1075C8000000000000000000FD3E0008453F0008E4 +:1075D800FF3E00081F3F00080000000000000000F8 +:1075E8005D350208D5350208E93502080536020876 +:1075F800ED380208733F0008D33E0008533F0008E7 +:10760800D53E000849380208BD3E00083935020851 +:10761800BF3E0008FD3502081D410208A5350208D5 +:10762800313A020875350208B93602080000000030 +:1076380000000000FB3E0008373F0008F53E000848 +:10764800CB3E0008CD3E0008633F0008CF3E00084F +:1076580000000000000000008D410008D94100082A +:10766800FF4A02086D3E00088D3E0008913E000862 +:107678000D4C0008294C000829470208494802080F +:1076880041470208E5470208953E0008DB47020823 +:10769800993E00089D3E0008A53E00089F4100084D +:1076A800EB47020885410008894100088F4100081E +:1076B8000000000000000000ED420008254300081B +:1076C800EF4200080D430008000000000000000021 +:1076D8000944000859440008BF520208334300080F +:1076E8009542000897420008994D0208414E020849 +:1076F800414D0208994200089B420008AD4200082B +:10770800AF420008B1420008B3420008B542000881 +:10771800B7420008B9420008BB4200087479706596 +:1077280064546578747320213D2030202626202259 +:107738005479706564546578742064617461626119 +:10774800736520686173206E6F74206265656E20B2 +:10775800696E697469616C697A65642E2200636F69 +:107768006E737420746F7563686766783A3A466F0B +:107778006E742A20746F7563686766783A3A54792C +:10778800706564546578743A3A676574466F6E74C8 +:10779800282920636F6E7374002E2E2F2E2E2F4DE6 +:1077A8006964646C6577617265732F53542F746FC5 +:1077B8007563686766782F6672616D65776F726B3F +:1077C8002F696E636C7564652F746F75636867667F +:1077D800782F5479706564546578742E68707000D9 +:1077E80068617356616C69644964282920262620DB +:1077F800227479706564546578744964206C617288 +:10780800676572207468616E206E756D6265724F6F +:1078180066547970656454657874732E220000008C +:107828000000000000000000674700089D470008AE +:10783800791C02082D4700087D490208DB48020828 +:10784800C947000849420008FD4802089D4200084F +:107858003D490208174902084D42000851420008F4 +:10786800E5460008094700085D4200085F42000835 +:10787800614200086342000865420008DD490208C9 +:10788800674200087F420008394700083948000865 +:107898003F470008D1140208FD1402084D150208DC +:1078A800C11502085D47000859470008A5480008A7 +:1078B800000000000000000065470008AB47000812 +:1078C8006947000885470008000000000000000024 +:1078D80061470008B94700082B00020817FC010897 +:1078E8007D490208DB48020879430008E1460008A0 +:1078F800FD480208C9FC01083D4902081749020869 +:107908004D420008514200085542000859420008FB +:107918005D4200085F4200086142000863420008B7 +:1079280065420008DD490208674200089D00020818 +:10793800E5FB010867FC0108FFFB010811FC0108D1 +:10794800D1FB010895FC010829FD01083FFC01084D +:107958008DFF010823FC010863470008D147000890 +:1079680075736564203E203000746F7563686766C0 +:10797800783A3A556E69636F64653A3A556E696349 +:107988006F64654368617220746F756368676678B1 +:107998003A3A5465787450726F76696465723A3A07 +:1079A80063697263756C61724275666665723C7371 +:1079B800697A653E3A3A7065656B43686172282951 +:1079C800205B7769746820756E7369676E656420DB +:1079D800696E742073697A65203D2031303B2074CC +:1079E8006F7563686766783A3A556E69636F646560 +:1079F8003A3A556E69636F646543686172203D2049 +:107A080073686F727420756E7369676E6564206938 +:107A18006E745D002E2E2F2E2E2F4D6964646C65BA +:107A280077617265732F53542F746F756368676637 +:107A3800782F6672616D65776F726B2F696E636CF4 +:107A48007564652F746F7563686766782F546578F9 +:107A58007450726F76696465722E687070006F6614 +:107A680066736574203C207573656400746F756374 +:107A7800686766783A3A556E69636F64653A3A554D +:107A88006E69636F64654368617220746F756368BB +:107A98006766783A3A5465787450726F76696465A7 +:107AA800723A3A63697263756C61724275666665AB +:107AB800723C73697A653E3A3A7065656B436861F2 +:107AC800722875696E7431365F7429205B77697422 +:107AD8006820756E7369676E656420696E742073BB +:107AE800697A65203D2031303B20746F7563686783 +:107AF80066783A3A556E69636F64653A3A556E69C5 +:107B0800636F646543686172203D2073686F7274A7 +:107B180020756E7369676E656420696E743B2075A5 +:107B2800696E7431365F74203D2073686F727420FB +:107B3800756E7369676E656420696E745D00000018 +:107B480000000000000000005D350208D53502087D +:107B5800E935020805360208BF4D0008733F0008E2 +:107B6800AD4D0008AF4D0008D53E00084938020861 +:107B7800BD3E000839350208BF3E0008FD35020841 +:107B88001D410208A5350208313A02087535020878 +:107B9800B93602080000000000000000EF4D0008A0 +:107BA800EF4D0008E94D0008F14D0008054E0008AA +:107BB800FCFFFFFF00000000EB4D0008FF4D000830 +:107BC80000000000000000008D4E0008A14E0008D3 +:107BD800BF520208CD4E000895420008294E000801 +:107BE800994D0208414E0208414D02089942000889 +:107BF8009B4200082B4E0008374E0008434E0008F1 +:107C08004F4E00085B4E0008674E0008734E000890 +:107C18007F4E00080000000000000000F543000847 +:107C28006F4400082B00020817FC01087D49020870 +:107C3800DB48020879430008E1460008FD480208CD +:107C4800C9FC01083D490208174902084D420008CD +:107C58005142000855420008594200085D42000898 +:107C68005F4200086142000863420008654200085C +:107C7800DD490208674200089D000208E5FB01088B +:107C880067FC0108FFFB010811FC0108D1FB010892 +:107C980095FC010829FD01083FFC01088DFF01083A +:107CA80023FC0108354F0008D1470008FF4E0008A3 +:107CB800FD4E00080000000000000000010203045F +:107CC800060708090000000001020304030202027B +:107CD80001010249444C4500546D725100546D72C3 +:107CE800205376630000000081011D5A0E0286258C +:107CF8001003141112040B081405D8031706DA012F +:107D08001907E5001C086F001E093600210A1A0031 +:107D1800230B0D00090C06000A0D03000C0D0100D1 +:107D28008F0F7F5A2410253F2611F22C27127C2012 +:107D38002813B9172A1482112B15EF0C2D16A10937 +:107D48002E172F0730185C0531190604331A030360 +:107D5800341B4002361CB101381D4401391EF500A0 +:107D68003B1FB7003C208A003E2168003F224E009E +:107D780020233B0021092C00A525E15A40264C4828 +:107D880041270D3A4328F12E44291F26452A331F3F +:107D9800462BA819482C1815492D77114A2E740E10 +:107DA8004B2FFB0B4D30F8094E3161084F32060757 +:107DB8003033CD053234DE0432350F0433366303F5 +:107DC8003437D40235385C023639F801373AA40121 +:107DD800383B6001393C25013A3DF6003B3ECB007B +:107DE8003D3FAB003D208F00C141125B5042044D26 +:107DF80051432C415244D8375345E82F54463C2927 +:107E0800564779235748DF1E5749A91A484A4E173B +:107E1800484B24144A4C9C114A4D6B0F4B4E510D44 +:107E28004D4FB60B4D30400AD051325858521C4D68 +:107E380059538E435A54DD3B5B55EE345C56AE2E97 +:107E48005D579A2956471625D85970555F5AA94C37 +:107E5800605BD944615C223E635D2438635EB43262 +:107E68005D56172EDF60A8566561464F6662E54786 +:107E78006763CF4168643D3C635D5E376966315234 +:107E88006A670F4C6B68394667635E41E96A275633 +:107E98006C6BE7506D67854B6E6D97556F6B4F50E8 +:107EA800EE6F105A706D2255F06FEB5971711D5AB3 +:107EB800FFD90000E11E0108491C01082D1901081D +:107EC800000000000000F03FEF6148B15031F63F7C +:107ED800CA6F4D91AEE7F43FAA116CEF62D0F23F42 +:107EE800000000000000F03F3BBFA7C06924E93F45 +:107EF800BB20C77B7A51E13F5DAB72DE55A8D13F0D +:107F08000040C5589F53424B00404932A322A81154 +:107F1800C558217BFC736268C558BF450B307E1875 +:107F28009F53FC73416D54629F53B341412D121707 +:107F3800424B626854627E58424B213BBA28C314B4 +:107F48000040C5589F53424B00404932A322A81114 +:107F58004932BF45B341213B49328227371BE00DE7 +:107F6800A3220B30412DBA28A322371BBF128E093A +:107F7800A8117E181217C314A811E00D8E09DF048A +:107F880000000000010000000300000007000000DE +:107F98000F0000001F0000003F0000007F000000ED +:107FA800FF000000FF010000FF030000FF070000C2 +:107FB800FF0F0000FF1F0000FF3F0000FF7F0000D1 +:107FC800000000000100000005000000060000009D +:107FD8000E0000000F0000001B0000001C00000045 +:107FE8000200000004000000070000000D0000006F +:107FF800100000001A0000001D0000002A00000008 +:1080080003000000080000000C0000001100000040 +:10801800190000001E000000290000002B000000CD +:10802800090000000B00000012000000180000000A +:108038001F000000280000002C0000003500000090 +:108048000A000000130000001700000020000000D4 +:10805800270000002D00000034000000360000005A +:108068001400000016000000210000002600000097 +:108078002E00000033000000370000003C00000024 +:108088001500000022000000250000002F0000005D +:1080980032000000380000003B0000003D000000F6 +:1080A8002300000024000000300000003100000020 +:1080B800390000003A0000003E0000003F000000C8 +:1080C80000000000010000000200000003000000A2 +:1080D8000000000001000000050000000200000090 +:1080E8000400000006000000030000000700000074 +:1080F800080000000000000001000000050000006A +:108108000600000002000000040000000700000054 +:108118000C00000003000000080000000B00000035 +:108128000D000000090000000A0000000E00000019 +:108138000F00000000000000010000000500000022 +:10814800060000000E00000002000000040000000D +:10815800070000000D0000000F00000003000000F1 +:10816800080000000C0000001000000015000000CE +:10817800090000000B0000001100000014000000BE +:10818800160000000A0000001200000013000000A2 +:1081980017000000180000000000000001000000A7 +:1081A80005000000060000000E0000000F0000009F +:1081B8000200000004000000070000000D0000009D +:1081C8001000000019000000030000000800000073 +:1081D8000C00000011000000180000001A00000048 +:1081E800090000000B00000012000000170000004A +:1081F8001B000000200000000A000000130000001F +:10820800160000001C0000001F00000021000000F4 +:1082180014000000150000001D0000001E000000F2 +:108228002200000023000000000000000100000000 +:1082380005000000060000000E0000000F0000000E +:108248001B000000020000000400000007000000FE +:108258000D000000100000001A0000001C000000C3 +:1082680003000000080000000C00000011000000DE +:10827800190000001D000000260000000900000091 +:108288000B00000012000000180000001E00000093 +:1082980025000000270000000A000000130000006D +:1082A800170000001F000000240000002800000044 +:1082B8002D0000001400000016000000200000003F +:1082C80023000000290000002C0000002E00000000 +:1082D8001500000021000000220000002A00000014 +:1082E8002B0000002F00000030000000426F67756F +:1082F80073206D65737361676520636F64652025FE +:108308006400414C49474E5F5459504520697320D9 +:1083180077726F6E672C20706C6561736520666973 +:1083280078004D41585F414C4C4F435F4348554E90 +:108338004B2069732077726F6E672C20706C6561B3 +:1083480073652066697800426F6775732062756689 +:1083580066657220636F6E74726F6C206D6F6465F2 +:1083680000496E76616C696420636F6D706F6E652D +:108378006E7420494420256420696E20534F5300B1 +:10838800496E76616C69642063726F7020726571E2 +:10839800756573740044435420636F65666669634A +:1083A80069656E74206F7574206F662072616E67E0 +:1083B8006500444354207363616C656420626C6F8C +:1083C800636B2073697A65202564782564206E6F55 +:1083D8007420737570706F7274656400436F6D708C +:1083E8006F6E656E7420696E6465782025643A2026 +:1083F8006D69736D61746368696E672073616D7010 +:108408006C696E6720726174696F2025643A25640F +:108418002C2025643A25642C20256300426F67755B +:108428007320487566666D616E207461626C6520A4 +:10843800646566696E6974696F6E00426F6775730B +:1084480020696E70757420636F6C6F7273706163EE +:108458006500426F677573204A50454720636F6C0B +:108468006F72737061636500426F677573206D6129 +:10847800726B6572206C656E6774680057726F6EF8 +:1084880067204A504547206C69627261727920768C +:10849800657273696F6E3A206C69627261727920D5 +:1084A80069732025642C2063616C6C657220657883 +:1084B80070656374732025640053616D706C696E18 +:1084C8006720666163746F727320746F6F206C61CC +:1084D80072676520666F7220696E7465726C65617B +:1084E800766564207363616E00496E76616C6964B9 +:1084F800206D656D6F727920706F6F6C20636F648B +:108508006520256400556E737570706F72746564AC +:10851800204A504547206461746120707265636920 +:1085280073696F6E20256400496E76616C696420FA +:1085380070726F67726573736976652070617261B6 +:108548006D65746572732053733D25642053653DD2 +:1085580025642041683D256420416C3D256400491F +:108568006E76616C69642070726F67726573736987 +:10857800766520706172616D6574657273206174CF +:10858800207363616E2073637269707420656E7402 +:10859800727920256400426F6775732073616D706E +:1085A8006C696E6720666163746F727300496E76DA +:1085B800616C6964207363616E207363726970749F +:1085C80020617420656E74727920256400496D708D +:1085D800726F7065722063616C6C20746F204A50F2 +:1085E8004547206C69627261727920696E207374E4 +:1085F800617465202564004A5045472070617261A6 +:108608006D6574657220737472756374206D697317 +:108618006D617463683A206C696272617279207462 +:1086280068696E6B732073697A6520697320257594 +:108638002C2063616C6C6572206578706563747357 +:1086480020257500426F67757320766972747561AD +:108658006C20617272617920616363657373004293 +:1086680075666665722070617373656420746F2027 +:108678004A504547206C696272617279206973209B +:10868800746F6F20736D616C6C0053757370656ED9 +:1086980073696F6E206E6F7420616C6C6F776564A0 +:1086A8002068657265004343495236303120736152 +:1086B8006D706C696E67206E6F7420696D706C6583 +:1086C8006D656E7465642079657400546F6F206DF4 +:1086D800616E7920636F6C6F7220636F6D706F6E5F +:1086E800656E74733A2025642C206D6178202564AA +:1086F80000556E737570706F7274656420636F6C6B +:108708006F7220636F6E76657273696F6E20726523 +:10871800717565737400426F677573204441432017 +:10872800696E64657820256400426F67757320441C +:1087380041432076616C7565203078257800426F5A +:108748006775732044485420696E646578202564F1 +:1087580000426F6775732044515420696E646578D0 +:1087680020256400456D707479204A50454720697A +:108778006D6167652028444E4C206E6F74207375B8 +:1087880070706F7274656429005265616420667246 +:108798006F6D20454D53206661696C6564005772A2 +:1087A80069746520746F20454D53206661696C6556 +:1087B80064004469646E277420657870656374206A +:1087C8006D6F7265207468616E206F6E65207363CB +:1087D800616E00496E7075742066696C65207265FB +:1087E8006164206572726F72004F757470757420C1 +:1087F80066696C65207772697465206572726F723C +:10880800202D2D2D206F7574206F66206469736B81 +:108818002073706163653F004672616374696F6EAF +:10882800616C2073616D706C696E67206E6F742067 +:10883800696D706C656D656E74656420796574002A +:10884800487566666D616E20636F64652073697A2A +:1088580065207461626C65206F766572666C6F77EF +:10886800004D697373696E6720487566666D616E41 +:1088780020636F6465207461626C6520656E747234 +:1088880079004D6178696D756D20737570706F72C0 +:1088980074656420696D6167652064696D656E73D0 +:1088A800696F6E20697320257520706978656C730F +:1088B80000456D70747920696E7075742066696CF6 +:1088C80065005072656D617475726520656E64200F +:1088D8006F6620696E7075742066696C6500436107 +:1088E8006E6E6F74207472616E73636F646520645A +:1088F800756520746F206D756C7469706C65207572 +:108908007365206F66207175616E74697A61746928 +:108918006F6E207461626C65202564005363616E1C +:108928002073637269707420646F6573206E6F744E +:10893800207472616E736D697420616C6C2064615F +:10894800746100496E76616C696420636F6C6F7244 +:10895800207175616E74697A6174696F6E206D6FCC +:108968006465206368616E6765004E6F7420696D89 +:10897800706C656D656E7465642079657400526508 +:1089880071756573746564206665617475726520B8 +:10899800776173206F6D69747465642061742063F6 +:1089A8006F6D70696C652074696D650041726974DA +:1089B800686D65746963207461626C652030782520 +:1089C80030327820776173206E6F74206465666931 +:1089D8006E6564004261636B696E672073746F72C1 +:1089E80065206E6F7420737570706F7274656400A3 +:1089F800487566666D616E207461626C65203078BA +:108A08002530327820776173206E6F742064656634 +:108A1800696E6564004A50454720646174617374E7 +:108A28007265616D20636F6E7461696E73206E6F1D +:108A380020696D616765005175616E74697A61744A +:108A4800696F6E207461626C6520307825303278E9 +:108A580020776173206E6F7420646566696E656443 +:108A6800004E6F742061204A5045472066696C6546 +:108A78003A2073746172747320776974682030784F +:108A8800253032782030782530327800496E737579 +:108A98006666696369656E74206D656D6F727920AD +:108AA8002863617365202564290043616E6E6F74C5 +:108AB800207175616E74697A65206D6F72652074B6 +:108AC80068616E20256420636F6C6F7220636F6D20 +:108AD800706F6E656E74730043616E6E6F74207193 +:108AE80075616E74697A6520746F20666577657242 +:108AF800207468616E20256420636F6C6F72730048 +:108B080043616E6E6F74207175616E74697A652049 +:108B1800746F206D6F7265207468616E2025642003 +:108B2800636F6C6F727300496E76616C6964204A7A +:108B38005045472066696C65207374727563747557 +:108B480072653A2074776F20534F46206D61726BBF +:108B580065727300496E76616C6964204A504547B6 +:108B68002066696C65207374727563747572653AF2 +:108B7800206D697373696E6720534F53206D61725E +:108B88006B657200556E737570706F7274656420D2 +:108B98004A5045472070726F636573733A20534F8C +:108BA8004620747970652030782530327800496E17 +:108BB80076616C6964204A5045472066696C652077 +:108BC8007374727563747572653A2074776F205385 +:108BD8004F49206D61726B65727300496E76616CE6 +:108BE8006964204A5045472066696C652073747231 +:108BF8007563747572653A20534F53206265666FCA +:108C0800726520534F46004661696C656420746F35 +:108C1800206372656174652074656D706F7261722E +:108C2800792066696C652025730052656164206649 +:108C380061696C6564206F6E2074656D706F726118 +:108C480072792066696C65005365656B2066616999 +:108C58006C6564206F6E2074656D706F72617279D7 +:108C68002066696C65005772697465206661696C75 +:108C78006564206F6E2074656D706F726172792003 +:108C880066696C65202D2D2D206F7574206F662008 +:108C98006469736B2073706163653F004170706C29 +:108CA80069636174696F6E207472616E7366657250 +:108CB80072656420746F6F20666577207363616ED8 +:108CC8006C696E657300556E737570706F7274653C +:108CD80064206D61726B65722074797065203078DC +:108CE80025303278005669727475616C2061727231 +:108CF800617920636F6E74726F6C6C6572206D653C +:108D08007373656420757000496D61676520746FC1 +:108D18006F207769646520666F72207468697320B4 +:108D2800696D706C656D656E746174696F6E005203 +:108D38006561642066726F6D20584D5320666169C5 +:108D48006C656400577269746520746F20584D53C0 +:108D5800206661696C656400436F70797269676841 +:108D6800742028432920323031322C2054686F6D0A +:108D7800617320472E204C616E652C20477569640D +:108D88006F20566F6C6C626564696E67003864208A +:108D98002031352D4A616E2D3230313200436175F4 +:108DA80074696F6E3A207175616E74697A6174695D +:108DB8006F6E207461626C65732061726520746FD8 +:108DC8006F20636F6172736520666F7220626173D2 +:108DD800656C696E65204A5045470041646F62655D +:108DE800204150503134206D61726B65723A2076A3 +:108DF800657273696F6E2025642C20666C616773D9 +:108E080020307825303478203078253034782C207C +:108E18007472616E73666F726D20256400556E6B97 +:108E28006E6F776E2041505030206D61726B6572A5 +:108E380020286E6F74204A464946292C206C656E9E +:108E480067746820257500556E6B6E6F776E2041CC +:108E580050503134206D61726B657220286E6F74CA +:108E68002041646F6265292C206C656E67746820E8 +:108E7800257500446566696E652041726974686D80 +:108E880065746963205461626C65203078253032DE +:108E9800783A2030782530327800446566696E6506 +:108EA80020487566666D616E205461626C6520307D +:108EB800782530327800446566696E6520517561A1 +:108EC8006E74697A6174696F6E205461626C652092 +:108ED80025642020707265636973696F6E2025644C +:108EE80000446566696E652052657374617274200A +:108EF800496E74657276616C2025750046726565E9 +:108F08006420454D532068616E646C6520257500AA +:108F18004F627461696E656420454D532068616EC7 +:108F2800646C6520257500456E64204F6620496D88 +:108F38006167650020202020202020202533642020 +:108F480025336420253364202533642025336420A9 +:108F58002533642025336420253364004A46494676 +:108F68002041505030206D61726B65723A207665F1 +:108F78007273696F6E2025642E253032642C20644C +:108F8800656E7369747920256478256420202564CA +:108F9800005761726E696E673A207468756D626E0B +:108FA80061696C20696D6167652073697A65206401 +:108FB8006F6573206E6F74206D61746368206461DF +:108FC8007461206C656E677468202575004A46498F +:108FD8004620657874656E73696F6E206D61726B7B +:108FE80065723A2074797065203078253032782C93 +:108FF800206C656E67746820257500202020207716 +:109008006974682025642078202564207468756D4B +:10901800626E61696C20696D616765004D69736393 +:10902800656C6C616E656F7573206D61726B6572CE +:10903800203078253032782C206C656E6774682073 +:10904800257500556E6578706563746564206D617B +:10905800726B65722030782530327800202020200D +:1090680020202020253475202534752025347520AE +:109078002534752025347520253475202534752030 +:10908800253475005175616E74697A696E6720744C +:109098006F202564203D2025642A25642A25642024 +:1090A800636F6C6F7273005175616E74697A696E63 +:1090B8006720746F20256420636F6C6F7273005390 +:1090C800656C656374656420256420636F6C6F72DA +:1090D8007320666F72207175616E74697A61746944 +:1090E8006F6E004174206D61726B65722030782557 +:1090F8003032782C207265636F76657279206163EF +:1091080074696F6E20256400536D6F6F7468696EA3 +:1091180067206E6F7420737570706F727465642049 +:1091280077697468206E6F6E7374616E64617264BF +:109138002073616D706C696E6720726174696F73FA +:10914800005374617274204F66204672616D652009 +:109158003078253032783A2077696474683D25750F +:109168002C206865696768743D25752C20636F6DD0 +:10917800706F6E656E74733D256400202020204357 +:109188006F6D706F6E656E742025643A2025646873 +:109198007825647620713D256400537461727420CB +:1091A8006F6620496D616765005374617274204F62 +:1091B80066205363616E3A20256420636F6D706F7B +:1091C8006E656E74730020202020436F6D706F6E83 +:1091D800656E742025643A2064633D2564206163CC +:1091E8003D256400202053733D25642C2053653DA4 +:1091F80025642C2041683D25642C20416C3D256464 +:1092080000436C6F7365642074656D706F72617272 +:10921800792066696C65202573004F70656E6564FA +:109228002074656D706F726172792066696C652053 +:109238002573004A46494620657874656E73696FE0 +:109248006E206D61726B65723A204A5045472D63F6 +:109258006F6D70726573736564207468756D626E86 +:1092680061696C20696D6167652C206C656E677437 +:1092780068202575004A46494620657874656E73EE +:10928800696F6E206D61726B65723A2070616C65F2 +:10929800747465207468756D626E61696C20696D9F +:1092A8006167652C206C656E677468202575004AB7 +:1092B80046494620657874656E73696F6E206D61E6 +:1092C800726B65723A20524742207468756D626EFF +:1092D80061696C20696D6167652C206C656E6774C7 +:1092E8006820257500556E7265636F676E697A65CB +:1092F8006420636F6D706F6E656E742049447320CF +:1093080025642025642025642C20617373756D699C +:109318006E6720594362437200467265656420583F +:109328004D532068616E646C65202575004F62742A +:1093380061696E656420584D532068616E646C6580 +:1093480020257500556E6B6E6F776E2041646F62D5 +:109358006520636F6C6F72207472616E73666F72D2 +:109368006D20636F646520256400436F72727570A9 +:1093780074204A50454720646174613A20626164F0 +:109388002061726974686D6574696320636F6465D0 +:1093980000496E636F6E73697374656E74207072C2 +:1093A8006F6772657373696F6E2073657175656E2B +:1093B800636520666F7220636F6D706F6E656E7483 +:1093C80020256420636F656666696369656E74202D +:1093D800256400436F7272757074204A50454720A7 +:1093E800646174613A2025752065787472616E65D0 +:1093F8006F7573206279746573206265666F726534 +:10940800206D61726B6572203078253032780043A8 +:109418006F7272757074204A504547206461746198 +:109428003A207072656D617475726520656E64208E +:109438006F662064617461207365676D656E740082 +:10944800436F7272757074204A5045472064617486 +:10945800613A2062616420487566666D616E2063BA +:109468006F6465005761726E696E673A20756E6B3E +:109478006E6F776E204A4649462072657669736931 +:109488006F6E206E756D6265722025642E253032F0 +:1094980064005072656D617475726520656E642034 +:1094A8006F66204A5045472066696C6500436F72B5 +:1094B80072757074204A50454720646174613A207F +:1094C800666F756E64206D61726B657220307825E9 +:1094D80030327820696E7374656164206F6620523B +:1094E8005354256400496E76616C696420534F5368 +:1094F80020706172616D657465727320666F722089 +:1095080073657175656E7469616C204A50454700D2 +:109518004170706C69636174696F6E207472616EFA +:109528007366657272656420746F6F206D616E7901 +:10953800207363616E6C696E65730000F4820308C2 +:109548000A8303082A8303084F83030869830308EF +:10955800888303089D830308BA830308E483030808 +:1095680024840308438403085A8403087084030886 +:1095780084840308C1840308F18403080D85030863 +:1095880030850308678503089E850308B5850308A9 +:10959800D5850308FF8503084C86030867860308FA +:1095A80092860308AE860308D3860308F986030863 +:1095B8001E8703083187030846870308598703086D +:1095C8006C87030891870308A6870308BA870308EE +:1095D800DB870308F1870308208803084888030805 +:1095E800698803088A880308B9880308CA880308B1 +:1095F800E6880308248903084B890308728903084D +:1096080086890308B4890308DC890308F8890308F4 +:109618001D8A03083F8A0308698A0308948A030895 +:10962800B28A0308E08A0308088B03082F8B030813 +:109638005C8B03088C8B0308B68B0308E38B030849 +:109648000F8C0308328C0308508C03086E8C0308B7 +:10965800A48C0308CE8C0308ED8C0308108D030836 +:10966800378D03084C8D0308608D0308958D03081A +:10967800A58D0308E38D0308258E03084F8E030884 +:109688007B8E0308A28E0308BE8E0308E98E0308AA +:10969800048F0308188F03082F8F03083C8F0308D3 +:1096A800648F0308998F0308D58F03080390030874 +:1096B800249003084B900308649003088C900308D7 +:1096C800AF900308C7900308EB900308E7940308DA +:1096D800109103084991030883910308A291030894 +:1096E800B1910308CE910308EC910308099203088D +:1096F800229203083B9203087D920308B79203085D +:10970800ED92030821930308359303084C9303084B +:109718007293030899930308DB93030817940308CB +:10972800489403086C9403089A940308B5940308B2 +:10973800ED940308189503080000000000000000DD +:109748008813000040060000803E00000100000071 +:10975800020000000000000000C030F00CCC3CFC0F +:1097680003C333F30FCF3FFF8040B0708C4CBC7CF9 +:109778008343B3738F4FBF7F20E010D02CEC1CDCE9 +:1097880023E313D32FEF1FDFA0609050AC6C9C5CD9 +:10979800A3639353AF6F9F5F08C838F804C434F4C9 +:1097A8000BCB3BFB07C737F78848B8788444B474B9 +:1097B8008B4BBB7B8747B77728E818D824E414D4A9 +:1097C8002BEB1BDB27E717D7A8689858A464945499 +:1097D800AB6B9B5BA767975702C232F20ECE3EFE79 +:1097E80001C131F10DCD3DFD8242B2728E4EBE7E79 +:1097F8008141B1718D4DBD7D22E212D22EEE1EDE69 +:1098080021E111D12DED1DDDA2629252AE6E9E5E58 +:10981800A1619151AD6D9D5D0ACA3AFA06C636F648 +:1098280009C939F905C535F58A4ABA7A8646B67638 +:109838008949B9798545B5752AEA1ADA26E616D628 +:1098480029E919D925E515D5AA6A9A5AA666965618 +:10985800A9699959A5659555000000000100000007 +:1098680008000000100000000900000002000000CD +:10987800030000000A0000001100000018000000AA +:109888002000000019000000120000000B0000007A +:1098980004000000050000000C0000001300000098 +:1098A8001A0000002100000028000000300000001D +:1098B80029000000220000001B0000001400000026 +:1098C8000D00000006000000070000000E00000068 +:1098D800150000001C000000230000002A00000002 +:1098E800310000003800000039000000320000009C +:1098F8002B000000240000001D00000016000000DE +:109908000F000000170000001E00000025000000E6 +:109918002C000000330000003A0000003B0000006B +:10992800340000002D000000260000001F00000089 +:10993800270000002E000000350000003C00000059 +:109948003D000000360000002F0000003700000036 +:109958003E0000003F0000003F0000003F00000004 +:109968003F0000003F0000003F0000003F000000F3 +:109978003F0000003F0000003F0000003F000000E3 +:109988003F0000003F0000003F0000003F000000D3 +:109998003F0000003F000000000000000100000040 +:1099A80008000000090000003F0000003F00000020 +:1099B8003F0000003F0000003F0000003F000000A3 +:1099C8003F0000003F0000003F0000003F00000093 +:1099D8003F0000003F0000003F0000003F00000083 +:1099E8003F0000003F0000000000000001000000F0 +:1099F800080000001000000009000000020000003C +:109A08000A00000011000000120000003F000000E2 +:109A18003F0000003F0000003F0000003F00000042 +:109A28003F0000003F0000003F0000003F00000032 +:109A38003F0000003F0000003F0000003F00000022 +:109A48003F0000003F0000003F0000000000000051 +:109A580001000000080000001000000009000000DC +:109A680002000000030000000A00000011000000CE +:109A78001800000019000000120000000B00000090 +:109A8800130000001A0000001B0000003F00000047 +:109A98003F0000003F0000003F0000003F000000C2 +:109AA8003F0000003F0000003F0000003F000000B2 +:109AB8003F0000003F0000003F0000003F000000A2 +:109AC8003F0000003F0000003F00000000000000D1 +:109AD800010000000800000010000000090000005C +:109AE80002000000030000000A000000110000004E +:109AF80018000000200000001900000012000000FB +:109B08000B000000040000000C000000130000001F +:109B18001A00000021000000220000001B000000C5 +:109B2800140000001C0000002300000024000000B6 +:109B38003F0000003F0000003F0000003F00000021 +:109B48003F0000003F0000003F0000003F00000011 +:109B58003F0000003F0000003F0000003F00000001 +:109B68003F0000003F0000003F0000003F000000F1 +:109B780000000000010000000800000010000000C4 +:109B88000900000002000000030000000A000000B5 +:109B9800110000001800000020000000190000005B +:109BA800120000000B000000040000000500000087 +:109BB8000C000000130000001A0000002100000043 +:109BC8002800000029000000220000001B000000FF +:109BD800140000000D000000150000001C0000002B +:109BE800230000002A0000002B00000024000000D1 +:109BF8001D000000250000002C0000002D000000C2 +:109C08003F0000003F0000003F0000003F00000050 +:109C18003F0000003F0000003F0000003F00000040 +:109C28003F0000003F0000003F0000003F00000030 +:109C38003F0000003F0000003F0000003F00000020 +:109C480000000000010000000800000010000000F3 +:109C58000900000002000000030000000A000000E4 +:109C6800110000001800000020000000190000008A +:109C7800120000000B0000000400000005000000B6 +:109C88000C000000130000001A0000002100000072 +:109C98002800000030000000290000002200000019 +:109CA8001B000000140000000D000000060000006A +:109CB8000E000000150000001C000000230000003A +:109CC8002A00000031000000320000002B000000D4 +:109CD800240000001D000000160000001E00000007 +:109CE800250000002C0000003300000034000000B4 +:109CF8002D000000260000002E00000035000000A6 +:109D0800360000003F0000003F0000003F00000058 +:109D18003F0000003F0000003F0000003F0000003F +:109D28003F0000003F0000003F0000003F0000002F +:109D38003F0000003F0000003F0000003F0000001F +:109D48003F000000433A2F55736572732F73617695 +:109D58006172642F446F63756D656E74732F7065DF +:109D680072736F2F4465762F656C656374726F6CC0 +:109D780061622F6C69676874636F6E74726F6C636D +:109D88006F6E76695F73772F53544D33325F446932 +:109D980073636F373436472F4D6964646C65776138 +:109DA8007265732F54686972645F50617274792F99 +:109DB8004C7749502F7372632F636F72652F6970E8 +:109DC80076342F646863702E6300646863705F6F15 +:109DD8007074696F6E5F73686F72743A206F707415 +:109DE800696F6E735F6F75745F6C656E202B2032C0 +:109DF800203C3D20444843505F4F5054494F4E53F8 +:109E08005F4C454E00646863705F6F7074696F6E75 +:109E18003A206F7074696F6E735F6F75745F6C65ED +:109E28006E202B2032202B206F7074696F6E5F6C50 +:109E3800656E203C3D20444843505F4F5054494F85 +:109E48004E535F4C454E00646863705F6F70746971 +:109E58006F6E5F627974653A206F7074696F6E73A4 +:109E68005F6F75745F6C656E203C20444843505F9B +:109E78004F5054494F4E535F4C454E0064686370D1 +:109E88005F6F7074696F6E5F6C6F6E673A206F708A +:109E980074696F6E735F6F75745F6C656E202B20CD +:109EA80034203C3D20444843505F4F5054494F4E66 +:109EB800535F4C454E00646863705F6372656174FC +:109EC800655F6D73673A206E6574696620213D2071 +:109ED8004E554C4C00646863705F637265617465CD +:109EE8005F6D73673A206468637020213D204E558A +:109EF8004C4C00646863705F6372656174655F6D84 +:109F080073673A20636865636B20746861742066C0 +:109F18006972737420706275662063616E20686F61 +:109F28006C642073747275637420646863705F6D09 +:109F3800736700646863705F62696E643A206E6577 +:109F480074696620213D204E554C4C00646863704E +:109F58005F62696E643A206468637020213D204E18 +:109F6800554C4C00646863705F696E635F70636230 +:109F78005F726566636F756E7428293A206D656D2A +:109F88006F7279206C65616B00646863705F7063E1 +:109F9800625F726566636F756E7428293A20726510 +:109FA80066636F756E74206572726F7200646863A1 +:109FB800705F73656C6563743A206E6574696620BA +:109FC800213D204E554C4C00646863705F73656C8E +:109FD8006563743A206468637020213D204E554CB7 +:109FE8004C006C656E203D3D2034006C656E203E53 +:109FF8003D206465636F64655F6C656E006C656EBB +:10A00800203D3D2031006F7665726C6F6164206978 +:10A018006E2066696C652F736E616D650063686597 +:10A02800636B206465636F64655F69647800696E5B +:10A0380076616C6964206465636F64655F6C656EE6 +:10A04800006E657874207062756620776173206E83 +:10A05800756C6C006E6574696620616C726561640C +:10A068007920686173206120737472756374206449 +:10A078006863702073657400696E76616C6964202A +:10A08800646863702D3E7374617465006E657469ED +:10A0980066206973206E6F742075702C206F6C6455 +:10A0A800207374796C6520706F72743F0001031C13 +:10A0B800433A2F55736572732F7361766172642FFB +:10A0C800446F63756D656E74732F706572736F2F4F +:10A0D8004465762F656C656374726F6C61622F6C72 +:10A0E80069676874636F6E74726F6C636F6E76699C +:10A0F8005F73772F53544D33325F446973636F37FF +:10A108003436472F4D6964646C6577617265732FC7 +:10A1180054686972645F50617274792F4C77495042 +:10A128002F7372632F636F72652F697076342F6592 +:10A1380074686172702E63006172705F7461626C22 +:10A14800655B695D2E71203D3D204E554C4C00618C +:10A1580072705F7461626C655B695D2E73746174A3 +:10A1680065203D3D204554484152505F5354415469 +:10A17800455F454D50545900636865636B207468AA +:10A1880061742066697273742070627566206361F9 +:10A198006E20686F6C6420737472756374206574C4 +:10A1A800686172705F686472006E657469662D3EDE +:10A1B8006877616464725F6C656E206D7573742076 +:10A1C8006265207468652073616D65206173204540 +:10A1D80054485F4857414444525F4C454E20666F8F +:10A1E80072206574686172702100697061646472BC +:10A1F80020213D204E554C4C006574685F72657493 +:10A2080020213D204E554C4C006E657469662D3EEC +:10A218006877616464725F6C656E203D3D204554CB +:10A22800485F4857414444525F4C454E0061727044 +:10A238005F7461626C655B6172705F6964785D2EE2 +:10A248007374617465203E3D204554484152505F07 +:10A2580053544154455F535441424C4500747970FE +:10A2680065206F766572666C6F77006E6F2070611F +:10A27800636B65742071756575657320616C6C6FAF +:10A288007765642100433A2F55736572732F7361A4 +:10A29800766172642F446F63756D656E74732F7089 +:10A2A8006572736F2F4465762F656C656374726F82 +:10A2B8006C61622F6C69676874636F6E74726F6C1F +:10A2C800636F6E76695F73772F53544D33325F44F3 +:10A2D8006973636F373436472F4D6964646C6577EB +:10A2E800617265732F54686972645F506172747922 +:10A2F8002F4C7749502F7372632F6E657469662FE0 +:10A3080065746865726E65742E63006E657469663F +:10A318002D3E6877616464725F6C656E206D75733D +:10A3280074206265203620666F72206574686572D5 +:10A338006E65745F6F75747075742100FFFFFFFFA1 +:10A34800FFFF000000000000433A2F557365727349 +:10A358002F7361766172642F446F63756D656E74D7 +:10A36800732F706572736F2F4465762F656C656304 +:10A3780074726F6C61622F6C69676874636F6E7456 +:10A38800726F6C636F6E76695F73772F53544D33BA +:10A39800325F446973636F373436472F4D6964649D +:10A3A8006C6577617265732F54686972645F506178 +:10A3B8007274792F4C7749502F7372632F636F72C1 +:10A3C800652F697076342F69636D702E630063683A +:10A3D80065636B2074686174206669727374207099 +:10A3E8006275662063616E20686F6C642069636DB6 +:10A3F80070206D6573736167650069636D705F696F +:10A408006E7075743A206D6F76696E6720722D3E96 +:10A418007061796C6F616420746F2069636D70205E +:10A42800686561646572206661696C65640A0069C3 +:10A43800636D705F696E7075743A20726573746FBE +:10A4480072696E67206F726967696E616C20702D22 +:10A458003E7061796C6F6164206661696C65640A3D +:10A4680000433A2F55736572732F73617661726476 +:10A478002F446F63756D656E74732F706572736F9B +:10A488002F4465762F656C656374726F6C61622FFB +:10A498006C69676874636F6E74726F6C636F6E76E5 +:10A4A800695F73772F53544D33325F446973636F19 +:10A4B800373436472F4D6964646C6577617265730C +:10A4C8002F54686972645F50617274792F4C7749B0 +:10A4D800502F7372632F636F72652F697076342FF4 +:10A4E8006970342E6300702D3E726566203D3D20F4 +:10A4F8003100636865636B207468617420666972F3 +:10A50800737420706275662063616E20686F6C6476 +:10A51800207374727563742069705F6864720000D8 +:10A5280000000000FFFFFFFF433A2F557365727369 +:10A538002F7361766172642F446F63756D656E74F5 +:10A54800732F706572736F2F4465762F656C656322 +:10A5580074726F6C61622F6C69676874636F6E7474 +:10A56800726F6C636F6E76695F73772F53544D33D8 +:10A57800325F446973636F373436472F4D696464BB +:10A588006C6577617265732F54686972645F506196 +:10A598007274792F4C7749502F7372632F636F72DF +:10A5A800652F697076342F6970345F667261672E23 +:10A5B800630073616E69747920636865636B206CEE +:10A5C800696E6B6564206C697374007072657620BF +:10A5D800213D2069707200707265762D3E6E657837 +:10A5E80074203D3D206970720070627566735F6605 +:10A5F80072656564202B20636C656E203C3D2030BD +:10A6080078666666660069705F72656173735F700D +:10A61800627566636F756E74203E3D207062756664 +:10A62800735F66726565640070637220213D204E19 +:10A63800554C4C00636865636B20667261676D6595 +:10A648006E747320646F6E2774206F7665726C6108 +:10A6580070006E6F2070726576696F757320667210 +:10A6680061676D656E742C2074686973206D7573ED +:10A678007420626520746865206669727374206648 +:10A688007261676D656E74210073616E69747920FB +:10A69800636865636B0076616C69646174655F64A7 +:10A6A8006174616772616D3A6E6578745F70627526 +:10A6B80066213D4E554C4C0069705F72656173733D +:10A6C8005F70627566636F756E74203E3D20636CC3 +:10A6D800656E006E6F74206669727374616C74685D +:10A6E8006F756768206A75737420656E7175657516 +:10A6F8006564006970345F6672616728293A207062 +:10A7080062756620746F6F2073686F727400746866 +:10A718006973206E656564732061207062756620B8 +:10A72800696E206F6E652070696563652100702D04 +:10A738003E6C656E203E3D20706F666600433A2F82 +:10A7480055736572732F7361766172642F446F63FA +:10A75800756D656E74732F706572736F2F446576AF +:10A768002F656C656374726F6C61622F6C696768C2 +:10A7780074636F6E74726F6C636F6E76695F7377F4 +:10A788002F53544D33325F446973636F3734364700 +:10A798002F4D6964646C6577617265732F546869BD +:10A7A80072645F50617274792F4C7749502F7372BD +:10A7B800632F636F72652F6D656D2E630066616927 +:10A7C8006C656420746F20637265617465206D65C3 +:10A7D8006D5F6D75746578006D656D5F6672656532 +:10A7E8003A2073616E69747920636865636B2061D0 +:10A7F8006C69676E6D656E74006D656D5F66726518 +:10A80800653A20696C6C6567616C206D656D6F7267 +:10A8180079006D656D5F667265653A20696C6C6577 +:10A8280067616C206D656D6F72793A20646F75622F +:10A838006C652066726565006D656D5F667265653D +:10A848003A20696C6C6567616C206D656D6F727913 +:10A858003A206E6F6E2D6C696E6B65643A20646F7A +:10A8680075626C65206672656500706C75675F68F7 +:10A878006F6C65733A206D656D203E3D2072616D89 +:10A8880000706C75675F686F6C65733A206D656DF5 +:10A89800203C2072616D5F656E6400706C75675F47 +:10A8A800686F6C65733A206D656D2D3E75736564D0 +:10A8B800203D3D203000706C75675F686F6C657374 +:10A8C8003A206D656D2D3E6E657874203C3D204DB7 +:10A8D800454D5F53495A455F414C49474E454400F1 +:10A8E8006D656D5F7472696D3A206C6567616C2087 +:10A8F8006D656D6F7279006D656D5F7472696D203D +:10A9080063616E206F6E6C7920736872696E6B205C +:10A918006D656D6F727900696E76616C6964206E21 +:10A9280065787420707472006D656D5F6D616C6C14 +:10A938006F633A20216C667265652D3E7573656498 +:10A94800006D656D5F6D616C6C6F633A20616C6C56 +:10A958006F6361746564206D656D6F7279206E6FC9 +:10A96800742061626F76652072616D5F656E642E1A +:10A97800006D656D5F6D616C6C6F633A20616C6C26 +:10A988006F6361746564206D656D6F727920707294 +:10A998006F7065726C7920616C69676E65642E00F2 +:10A9A8006D656D5F6D616C6C6F633A2073616E6984 +:10A9B800747920636865636B20616C69676E6D6587 +:10A9C8006E7400433A2F55736572732F7361766105 +:10A9D80072642F446F63756D656E74732F70657242 +:10A9E800736F2F4465762F656C656374726F6C6145 +:10A9F800622F6C69676874636F6E74726F6C636FD3 +:10AA08006E76695F73772F53544D33325F446973A1 +:10AA1800636F373436472F4D6964646C65776172AC +:10AA280065732F54686972645F50617274792F4C32 +:10AA38007749502F7372632F636F72652F6D656D41 +:10AA4800702E63006D656D705F6D616C6C6F633A3D +:10AA5800206D656D702070726F7065726C79206101 +:10AA68006C69676E6564006D656D705F66726565BB +:10AA78003A206D656D2070726F7065726C79206117 +:10AA88006C69676E656400696E76616C69642070D4 +:10AA98006F6F6C2064657363006D656D705F6D61C9 +:10AAA8006C6C6F633A2074797065203C204D454D7D +:10AAB800505F4D4158006D656D705F667265653A0F +:10AAC8002074797065203C204D454D505F4D4158AC +:10AAD8000000000018000F00B7B5012064E601204F +:10AAE8001000020022B7012068E6012028000400B7 +:10AAF80045B701206CE6012010001000EBDD0120B5 +:10AB080070E6012060021000E8B7012074E6012019 +:10AB180020000500EEDE012078E601201000050087 +:10AB280091DF01207CE6012010000800E4DF01200D +:10AB380080E601201000080067E0012084E601207B +:10AB48009C000500CDE1012088E601201C000800DA +:10AB5800EAE001208CE6012010001000DCE401206E +:10AB680090E6012020000400DFE5012094E60120A2 +:10AB78006CAB030848AB030854AB030860AB03088D +:10AB880018AB0308DCAA0308E8AA0308F4AA030818 +:10AB980030AB03083CAB030824AB030800AB030845 +:10ABA8000CAB0308433A2F55736572732F736176A4 +:10ABB8006172642F446F63756D656E74732F706571 +:10ABC80072736F2F4465762F656C656374726F6C52 +:10ABD80061622F6C69676874636F6E74726F6C63FF +:10ABE8006F6E76695F73772F53544D33325F4469C4 +:10ABF80073636F373436472F4D6964646C657761CA +:10AC08007265732F54686972645F50617274792F2A +:10AC18004C7749502F7372632F636F72652F6E657F +:10AC28007469662E63006E657469665F697373750F +:10AC3800655F7265706F7274733A20696E76616CC5 +:10AC48006964206E6574696600696E76616C696412 +:10AC580020706F696E746572006E657469665F61F5 +:10AC680064643A20696E76616C6964206E65746903 +:10AC780066006E657469665F6164643A204E6F2091 +:10AC8800696E69742066756E6374696F6E20676992 +:10AC980076656E006E6574696620616C72656164C4 +:10ACA8007920616464656400746F6F206D616E79EA +:10ACB800206E65746966732C206D61782E2073751B +:10ACC80070706F72746564206E756D62657220694C +:10ACD8007320323535006E657469665F7365745F1D +:10ACE80075703A20696E76616C6964206E65746966 +:10ACF80066006E657469665F7365745F646F776E0E +:10AD08003A20696E76616C6964206E6574696600C4 +:10AD18006E657469665F7365745F6C696E6B5F7589 +:10AD2800703A20696E76616C6964206E6574696634 +:10AD3800006E657469665F7365745F6C696E6B5FDE +:10AD4800646F776E3A20696E76616C6964206E650F +:10AD580074696600433A2F55736572732F73617671 +:10AD68006172642F446F63756D656E74732F7065BF +:10AD780072736F2F4465762F656C656374726F6CA0 +:10AD880061622F6C69676874636F6E74726F6C634D +:10AD98006F6E76695F73772F53544D33325F446912 +:10ADA80073636F373436472F4D6964646C65776118 +:10ADB8007265732F54686972645F50617274792F79 +:10ADC8004C7749502F7372632F636F72652F7062CF +:10ADD80075662E6300696E76616C696420706275B1 +:10ADE800665F7479706500696E6372656D656E740F +:10ADF8005F6D61676E6974756465203C3D20702DD8 +:10AE08003E6C656E00706275665F667265653A20B5 +:10AE1800702D3E726566203E20300070632D3E63C3 +:10AE28007573746F6D5F667265655F66756E637462 +:10AE3800696F6E20213D204E554C4C00696E76613D +:10AE48006C69642070627566207479706500706240 +:10AE580075665F616C6C6F633A206572726F6E65C0 +:10AE68006F7573207479706500706275665F7265BE +:10AE7800616C6C6F633A207020213D204E554C4C1C +:10AE880000706275665F7265616C6C6F633A207101 +:10AE980020213D204E554C4C006D656D5F747269E4 +:10AEA8006D2072657475726E65642071203D3D2059 +:10AEB8004E554C4C007062756620726566206F7640 +:10AEC8006572666C6F7700286820213D204E554CCE +:10AED8004C2920262620287420213D204E554C4CF4 +:10AEE80029202870726F6772616D6D6572207669AE +:10AEF8006F6C61746573204150492900702D3E7450 +:10AF08006F745F6C656E203D3D20702D3E6C656EE4 +:10AF180020286F66206C61737420706275662069E2 +:10AF28006E20636861696E2900702D3E6E657874C5 +:10AF3800203D3D204E554C4C00706275665F636F36 +:10AF480070793A20746172676574206E6F7420623C +:10AF5800696720656E6F75676820746F20686F6C0D +:10AF68006420736F75726365006F66667365745FDE +:10AF7800746F203C3D20705F746F2D3E6C656E00D1 +:10AF88006F66667365745F66726F6D203C3D2070F6 +:10AF98005F66726F6D2D3E6C656E00705F746F201A +:10AFA800213D204E554C4C00706275665F636F7092 +:10AFB80079282920646F6573206E6F7420616C6C2A +:10AFC8006F77207061636B65742071756575657343 +:10AFD8002100706275665F636F70795F706172746B +:10AFE80069616C3A20696E76616C69642062756685 +:10AFF80000706275665F636F70795F706172746903 +:10B00800616C3A20696E76616C6964206461746170 +:10B0180070747200706275665F636F707920666124 +:10B02800696C656400433A2F55736572732F7361B9 +:10B03800766172642F446F63756D656E74732F70DB +:10B048006572736F2F4465762F656C656374726FD4 +:10B058006C61622F6C69676874636F6E74726F6C71 +:10B06800636F6E76695F73772F53544D33325F4445 +:10B078006973636F373436472F4D6964646C65773D +:10B08800617265732F54686972645F506172747974 +:10B098002F4C7749502F7372632F636F72652F742B +:10B0A80063702E630070636220213D204E554C4C26 +:10B0B800007463705F667265653A204C4953544565 +:10B0C8004E007463705F7570646174655F72637657 +:10B0D8005F616E6E5F776E643A20696E76616C6947 +:10B0E8006420706362006E65775F7263765F616E7D +:10B0F8006E5F776E64203C3D203078666666660039 +:10B108007463705F7265637665643A20696E766110 +:10B118006C69642070636200646F6E2774206361D9 +:10B128006C6C207463705F72656376656420666F0B +:10B1380072206C697374656E2D706362730074633A +:10B14800705F7365675F636F70793A20696E7661C7 +:10B158006C696420736567007463705F6E657874EA +:10B168005F6973733A20696E76616C6964207063F5 +:10B1780062007463705F6566665F73656E645F6DB9 +:10B1880073735F6E657469663A20696E76616C697F +:10B1980064206473745F6970007463705F706362C5 +:10B1A8005F70757267653A20696E76616C696420B4 +:10B1B800706362007463705F7063625F72656D6F65 +:10B1C80076653A20696E76616C6964207063620006 +:10B1D8007463705F7063625F72656D6F76653A2045 +:10B1E800696E76616C6964207063626C697374005F +:10B1F800756E73656E74207365676D656E74732004 +:10B208006C65616B696E6700756E61636B65642060 +:10B218007365676D656E7473206C65616B696E67C5 +:10B22800006F6F736571207365676D656E74732049 +:10B238006C65616B696E67007463705F6162616EF3 +:10B24800646F6E3A20696E76616C6964207063621F +:10B2580000646F6E27742063616C6C207463705F88 +:10B2680061626F72742F7463705F6162616E646F84 +:10B278006E20666F72206C697374656E2D706362E0 +:10B2880073007463705F6E657469665F69705F618F +:10B298006464725F6368616E6765645F7063626C43 +:10B2A8006973743A20696E76616C6964206F6C64A6 +:10B2B8005F61646472007463705F636C6F73655F71 +:10B2C80073687574646F776E3A20696E76616C691D +:10B2D8006420706362007063622D3E666C61677300 +:10B2E80020262054465F5258434C4F53454400741F +:10B2F80063705F667265655F6C697374656E3A202A +:10B30800214C495354454E007463705F636C6F73EE +:10B31800653A20696E76616C6964207063620074B6 +:10B3280063705F726563765F6E756C6C3A20696EE8 +:10B3380076616C696420706362007463705F707218 +:10B348006F636573735F726566757365645F646167 +:10B3580074613A20696E76616C696420706362007A +:10B368007463705F736C6F77746D723A2061637485 +:10B37800697665207063622D3E737461746520215F +:10B388003D20434C4F5345440A007463705F736C0F +:10B398006F77746D723A20616374697665207063A3 +:10B3A800622D3E737461746520213D204C495354CD +:10B3B800454E0A007463705F736C6F77746D723AF0 +:10B3C80020616374697665207063622D3E737461D1 +:10B3D800746520213D2054494D452D574149540A53 +:10B3E800007463705F736C6F7774696D723A207064 +:10B3F800657273697374207469636B696E6720770B +:10B4080069746820696E2D666C6967687420646168 +:10B418007461007463705F736C6F7774696D723AEE +:10B428002070657273697374207469636B696E67E1 +:10B43800207769746820656D7074792073656E640F +:10B4480020627566666572007463705F736C6F77EF +:10B45800746D723A206D6964646C65207463702041 +:10B46800213D207463705F6163746976655F706302 +:10B478006273007463705F736C6F77746D723A20D7 +:10B48800666972737420706362203D3D2074637036 +:10B498005F6163746976655F70636273007463707B +:10B4A8005F736C6F77746D723A2054494D452D5710 +:10B4B800414954207063622D3E7374617465203D68 +:10B4C8003D2054494D452D57414954007463705FE0 +:10B4D800736C6F77746D723A206D6964646C652063 +:10B4E80074637020213D207463705F74775F7063AC +:10B4F8006273007463705F736C6F77746D723A2057 +:10B50800666972737420706362203D3D20746370B5 +:10B518005F74775F706362730001020304050607B6 +:10B528000707070707070000B8E60120B4E601206F +:10B53800ACE60120C4E6012003060C18306078430D +:10B548003A2F55736572732F7361766172642F4455 +:10B558006F63756D656E74732F706572736F2F44AA +:10B5680065762F656C656374726F6C61622F6C69A8 +:10B57800676874636F6E74726F6C636F6E76695F01 +:10B5880073772F53544D33325F446973636F373485 +:10B5980036472F4D6964646C6577617265732F5403 +:10B5A800686972645F50617274792F4C7749502FC3 +:10B5B8007372632F636F72652F7463705F696E2E89 +:10B5C80063007463705F6F6F735F696E7365727425 +:10B5D8005F7365676D656E743A20696E76616C6934 +:10B5E800642063736567007463705F70617273656C +:10B5F8006F70743A20696E76616C6964207063625A +:10B60800007463705F696E7075745F64656C6179EE +:10B6180065645F636C6F73653A20696E76616C6907 +:10B628006420706362007063622D3E736E645F71A4 +:10B63800756575656C656E203E3D20706275665F48 +:10B64800636C656E286E6578742D3E70290074638E +:10B65800705F726563656976653A2076616C6964C6 +:10B66800207175657565206C656E67746800746314 +:10B67800705F726563656976653A20696E76616C9C +:10B68800696420706362007463705F7265636569E2 +:10B6980076653A2077726F6E6720737461746500FF +:10B6A800696E7365672E7020213D204E554C4C0005 +:10B6B800696E73616E65206F6666736574210070CC +:10B6C80062756620746F6F2073686F7274210074DE +:10B6D80063705F726563656976653A207365676D47 +:10B6E800656E74206E6F74207472696D6D65642068 +:10B6F800636F72726563746C7920746F20726376FD +:10B708005F776E640A007463705F7265636569765B +:10B71800653A207365676D656E74206E6F7420746A +:10B7280072696D6D656420636F72726563746C799C +:10B7380020746F206F6F7365712071756575650A68 +:10B74800007463705F726563656976653A20746337 +:10B75800706C656E203E207263765F776E640A00B7 +:10B768007463705F726563656976653A206F6F739D +:10B778006571207463706C656E203E207263765F1D +:10B78800776E640A007463705F696E7075743A202E +:10B79800696E76616C6964207062756600702D3E12 +:10B7A8006E65787420213D204E554C4C00702D3E1E +:10B7B8006C656E203D3D203000702D3E746F745FC7 +:10B7C8006C656E203D3D20702D3E6E6578742D3E73 +:10B7D800746F745F6C656E007463705F696E70750A +:10B7E800743A20616374697665207063622D3E73D4 +:10B7F8007461746520213D20434C4F5345440074C7 +:10B8080063705F696E7075743A20616374697665F8 +:10B81800207063622D3E737461746520213D20544D +:10B82800494D452D57414954007463705F696E70E6 +:10B8380075743A20616374697665207063622D3E81 +:10B84800737461746520213D204C495354454E0062 +:10B858007463705F696E7075743A207063622D3E10 +:10B868006E65787420213D207063622028626566C9 +:10B878006F726520636163686529007463705F692E +:10B888006E7075743A207063622D3E6E6578742010 +:10B89800213D2070636220286166746572206361AF +:10B8A80063686529007463705F696E7075743A2007 +:10B8B80054494D452D57414954207063622D3E73BC +:10B8C80074617465203D3D2054494D452D574149CB +:10B8D80054007463705F696E7075743A20706362A7 +:10B8E8002D3E737461746520213D20434C4F5345B0 +:10B8F80044007063622D3E736E645F717565756593 +:10B908006C656E203E2030006E6F207365676D6534 +:10B918006E7420746F2066726565007063622D3ED8 +:10B928006C697374656E65722D3E616363657074CE +:10B9380020213D204E554C4C007063622D3E7265AF +:10B9480066757365645F64617461203D3D204E5582 +:10B958004C4C00433A2F55736572732F73617661AF +:10B9680072642F446F63756D656E74732F706572A2 +:10B97800736F2F4465762F656C656374726F6C61A5 +:10B98800622F6C69676874636F6E74726F6C636F33 +:10B998006E76695F73772F53544D33325F44697302 +:10B9A800636F373436472F4D6964646C657761720D +:10B9B80065732F54686972645F50617274792F4C93 +:10B9C8007749502F7372632F636F72652F7463709A +:10B9D8005F6F75742E63007463705F6F7574707534 +:10B9E800745F7365676D656E745F627573793A200D +:10B9F800696E76616C696420736567007463705F53 +:10BA08006372656174655F7365676D656E743A200E +:10BA1800696E76616C696420706362007463705F3C +:10BA28006372656174655F7365676D656E743A20EE +:10BA3800696E76616C6964207062756600702D3E6F +:10BA4800746F745F6C656E203E3D206F70746C651A +:10BA58006E00636865636B20746861742066697240 +:10BA6800737420706275662063616E20686F6C6401 +:10BA780020737472756374207463705F68647200F5 +:10BA88007463705F6F75747075745F616C6C6F63ED +:10BA98005F6865616465723A20696E76616C696495 +:10BAA80020706362007463705F6F75747075745F83 +:10BAB80066696C6C5F6F7074696F6E733A20696E3B +:10BAC80076616C69642070627566007463705F6F7C +:10BAD80075747075745F636F6E74726F6C5F736585 +:10BAE800676D656E743A20696E76616C6964207062 +:10BAF800627566007463705F73706C69745F756EED +:10BB080073656E745F7365673A20696E76616C69F8 +:10BB180064207063620043616E27742073706C69DF +:10BB280074207365676D656E7420696E746F206C20 +:10BB3800656E67746820300073706C6974203C3DD2 +:10BB4800206D737300757365672D3E6C656E203EBE +:10BB58002030007463705F656E71756575655F662A +:10BB68006C6167733A206E65656420656974686501 +:10BB780072205443505F53594E206F7220544350E3 +:10BB88005F46494E20696E20666C61677320287095 +:10BB9800726F6772616D6D65722076696F6C617422 +:10BBA80065732041504929007463705F656E717533 +:10BBB8006575655F666C6167733A20696E76616C5E +:10BBC800696420706362007463705F656E71756587 +:10BBD80075655F666C6167733A20636865636B209F +:10BBE8007468617420666972737420706275662067 +:10BBF80063616E20686F6C64206F70746C656E0092 +:10BC08007365672D3E746370686472206E6F74206C +:10BC1800616C69676E6564007463705F656E7175E9 +:10BC28006575655F666C6167733A20696E76616CED +:10BC38006964207365676D656E74206C656E6774E2 +:10BC480068007463705F656E71756575655F666CB5 +:10BC58006167733A20696E76616C696420717565F5 +:10BC68007565206C656E677468007463705F7365D2 +:10BC78006E645F66696E3A20696E76616C696420ED +:10BC8800706362007463705F7265786D69745F7267 +:10BC9800746F5F707265706172653A20696E766163 +:10BCA8006C696420706362007463705F7265786D9C +:10BCB80069743A20696E76616C6964207063620009 +:10BCC8007463705F7265786D69745F666173743AE6 +:10BCD80020696E76616C69642070636200746370B9 +:10BCE8005F7273743A20696E76616C6964206C6F58 +:10BCF80063616C5F6970007463705F7273743A207B +:10BD0800696E76616C69642072656D6F74655F69D0 +:10BD180070007463705F73656E645F656D707479CD +:10BD28005F61636B3A20696E76616C696420706349 +:10BD380062007463705F6F75747075743A20696E11 +:10BD480076616C69642070636200646F6E2774208A +:10BD580063616C6C207463705F6F757470757420A8 +:10BD6800666F72206C697374656E2D706362730000 +:10BD7800525354206E6F74206578706563746564DF +:10BD8800206865726521006F7074696F6E73206E2C +:10BD98006F742066696C6C6564007463705F7265AB +:10BDA800786D69745F72746F5F636F6D6D69743AF3 +:10BDB80020696E76616C69642070636200746370D8 +:10BDC8005F7265786D69745F72746F3A20696E7618 +:10BDD800616C696420706362007463705F6B656591 +:10BDE80070616C6976653A20696E76616C69642069 +:10BDF800706362007463705F7A65726F5F77696EF3 +:10BE0800646F775F70726F62653A20696E76616CF5 +:10BE180069642070636200433A2F55736572732F0B +:10BE28007361766172642F446F63756D656E7473A8 +:10BE38002F706572736F2F4465762F656C65637418 +:10BE4800726F6C61622F6C69676874636F6E74726D +:10BE58006F6C636F6E76695F73772F53544D33320F +:10BE68005F446973636F373436472F4D6964646C78 +:10BE78006577617265732F54686972645F50617287 +:10BE880074792F4C7749502F7372632F6170692F23 +:10BE980074637069702E630074637069705F74688E +:10BEA800726561643A20696E76616C6964206D65BB +:10BEB800737361676500496E76616C6964206D62B1 +:10BEC8006F78006661696C656420746F20637265C1 +:10BED8006174652074637069705F74687265616409 +:10BEE800206D626F78006661696C656420746F20EC +:10BEF800637265617465206C6F636B5F74637069EE +:10BF0800705F636F72650074637069705F746872E4 +:10BF180065616400433A2F55736572732F736176B8 +:10BF28006172642F446F63756D656E74732F7065ED +:10BF380072736F2F4465762F656C656374726F6CCE +:10BF480061622F6C69676874636F6E74726F6C637B +:10BF58006F6E76695F73772F53544D33325F446940 +:10BF680073636F373436472F4D6964646C65776146 +:10BF78007265732F54686972645F50617274792FA7 +:10BF88004C7749502F7372632F636F72652F7469F2 +:10BF98006D656F7574732E63007379735F74696D63 +:10BFA800656F75743A2074696D656F757420213DED +:10BFB800204E554C4C2C20706F6F6C204D454D50C9 +:10BFC8005F5359535F54494D454F55542069732069 +:10BFD800656D7074790054696D656F757420746946 +:10BFE8006D6520746F6F206C6F6E672C206D6178A3 +:10BFF800206973204C5749505F55494E5433325F7E +:10C008004D41582F34206D7365637300FA000000AA +:10C018005DCF0108E803000055AA0108E803000005 +:10C02800799E010860EA000089980108F40100007F +:10C03800019A0108433A2F55736572732F7361761D +:10C048006172642F446F63756D656E74732F7065CC +:10C0580072736F2F4465762F656C656374726F6CAD +:10C0680061622F6C69676874636F6E74726F6C635A +:10C078006F6E76695F73772F53544D33325F44691F +:10C0880073636F373436472F4D6964646C65776125 +:10C098007265732F54686972645F50617274792F86 +:10C0A8004C7749502F7372632F636F72652F7564D5 +:10C0B800702E63007564705F696E7075743A2069DC +:10C0C8006E76616C69642070627566007564705F75 +:10C0D800696E7075743A20696E76616C6964206E59 +:10C0E80065746966007564705F696E7075745F6CFD +:10C0F8006F63616C5F6D617463683A20696E766125 +:10C108006C6964206E6574696600706275665F723A +:10C11800656D6F76655F68656164657220666169E3 +:10C128006C65640A007564705F62696E643A2069C0 +:10C138006E76616C696420706362007564705F7309 +:10C14800656E64746F5F69665F7372633A20696EC7 +:10C1580076616C696420706362007564705F7365F2 +:10C168006E64746F5F69665F7372633A20696E7696 +:10C17800616C69642070627566007564705F7365D0 +:10C188006E64746F5F69665F7372633A20696E7676 +:10C19800616C6964206473745F6970007564705FB2 +:10C1A80073656E64746F5F69665F7372633A206962 +:10C1B8006E76616C6964207372635F697000756480 +:10C1C800705F73656E64746F5F69665F7372633AFC +:10C1D80020696E76616C6964206E657469660063B7 +:10C1E8006865636B20746861742066697273742073 +:10C1F800706275662063616E20686F6C642073746A +:10C2080072756374207564705F6864720075647019 +:10C218005F73656E64746F5F69663A20696E7661F4 +:10C228006C696420706362007564705F73656E6426 +:10C23800746F5F69663A20696E76616C6964207014 +:10C24800627566007564705F73656E64746F5F69AC +:10C25800663A20696E76616C6964206473745F69FC +:10C2680070007564705F73656E64746F5F69663AB9 +:10C2780020696E76616C6964206E65746966007504 +:10C2880064705F636F6E6E6563743A20696E766181 +:10C298006C696420706362007564705F636F6E6EB2 +:10C2A8006563743A20696E76616C696420697061AF +:10C2B800646472007564705F726563763A20696EB3 +:10C2C80076616C696420706362007564705F726582 +:10C2D8006D6F76653A20696E76616C69642070636B +:10C2E80062000000000000000000000000000000E4 +:10C2F80000000000A5FB0108B9FB010879FB010853 +:10C308007DFB01089FFB0108194303081943030833 +:10C318001943030819430308000000000000000047 +:10C3280057FC010859FC01082B00020817FC0108FA +:10C338007D490208DB48020879430008E146000805 +:10C34800FD480208C9FC01083D49020817490208CE +:10C358004D42000851420008554200085942000861 +:10C368005D4200085F42000861420008634200081D +:10C3780065420008DD490208674200089D0002087E +:10C38800E5FB010867FC0108FFFB010811FC010837 +:10C39800D1FB010895FC010829FD01083FFC0108B3 +:10C3A8008DFF010823FC01080000000000000000C8 +:10C3B800B9010208BB0102082B00020817FC01089A +:10C3C8007D490208DB48020879430008E146000875 +:10C3D800FD480208C9FC01083D490208174902083E +:10C3E8004D420008514200085542000859420008D1 +:10C3F8005D4200086D020208614200082701020838 +:10C4080065420008DD490208674200089D000208ED +:10C41800E5FB010867FC0108FFFB010811FC0108A6 +:10C42800D1FB010895FC010829FD01083FFC010822 +:10C438008DFF010823FC01084D040208DB040208F3 +:10C44800F7000208FD0002086B0102080301020858 +:10C45800090102087F0102080F0102083B030208D4 +:10C46800C90102081D02020853010208A1010208BD +:10C47800AD0102081018200000000008080808088C +:10C488000000000000000000C5120208D1120208D6 +:10C498008D1302088B1302083F140208D1130208F7 +:10C4A800E91202080000000000000000F914020868 +:10C4B800DD190208591A02082D4700087D490208AB +:10C4C800DB480208ED19020849420008FD48020845 +:10C4D8009D4200083D490208174902084D420008DC +:10C4E80051420008E5460008094700085D42000877 +:10C4F8005F42000861420008634200086542000884 +:10C50800DD490208674200087F42000839470008F1 +:10C51800394800083F470008D1140208FD140208F2 +:10C528004D150208C1150208CD1402085947000824 +:10C53800911602080000000000000000551C0208C7 +:10C54800571C0208191C0208FB1B02087D49020837 +:10C55800DB480208651C020849420008FD48020839 +:10C568009D4200083D490208174902084D4200084B +:10C578005142000855420008594200085D4200082F +:10C588005F420008614200086342000865420008F3 +:10C59800DD490208674200087F42000800000000E9 +:10C5A80000000000511D0208851D0208C91D02086F +:10C5B800931D02087D490208DB480208B51D0208E0 +:10C5C80049420008FD4802089D4200083D4902080A +:10C5D800174902084D420008514200085542000818 +:10C5E800594200085D4200085F42000861420008A5 +:10C5F8006342000865420008DD49020867420008F6 +:10C608007F420008531D02080000000000000000DF +:10C618005D350208D5350208E935020805360208F5 +:10C62800ED38020871350208193602081B3602086F +:10C63800BB3E000849380208BD3E000839350208EB +:10C64800BF3E0008FD3502081D410208A535020855 +:10C65800313A020875350208B936020800000000B0 +:10C66800000000000000000000000000194303085B +:10C67800194303087D490208DB480208794300088A +:10C6880049420008FD480208194303083D490208C9 +:10C69800174902084D420008514200085542000857 +:10C6A800594200085D4200085F42000861420008E4 +:10C6B8006342000865420008DD4902086742000835 +:10C6C8007F42000800000000000000000000000099 +:10C6D80000000000FF4A02086D3E00088D3E000879 +:10C6E800913E00080D4C0008294C00082947020813 +:10C6F8004948020841470208E5470208953E0008F4 +:10C70800DB470208993E00089D3E0008A53E000848 +:10C7180019430308EB470208054C0008094C0008B8 +:10C72800194303080000000000000000054D02083E +:10C73800074D0208F34C020800000000000000004A +:10C74800034D0208154D0208F74C020800000000CE +:10C7580000000000014D0208234D0208FB4C0208AE +:10C768000000000000000000FF4C0208314D0208E4 +:10C77800BF520208934200089542000897420008F9 +:10C78800994D0208414E0208414D0208994200089D +:10C798009B42000800000000000000001B930208F4 +:10C7A8009396020891390308513C0308353E030863 +:10C7B800000000000000000019930208A19602087A +:10C7C800499802089D9E020815A102080000000071 +:10C7D8000000000017930208AF9602089D9A02080D +:10C7E8009DA302088DA702080000000000000000B9 +:10C7F8002393020839980208D58C0208000000002B +:10C8080000000000219302082B980208FD8F0208FF +:10C8180000000000000000001F9302081D98020895 +:10C82800F52C030800000000000000001D9302081A +:10C838000F980208013403080000000000000000FF +:10C8480037930208AD970208FF8202080000000033 +:10C8580000000000359302089F9702088D850208A2 +:10C86800000000000000000053930208E996020847 +:10C87800076F020800000000000000004B93020848 +:10C88800219702082B730208000000000000000036 +:10C898003B930208C9970208617D02080000000066 +:10C8A800000000002B93020801980208FF86020886 +:10C8B800000000000000000051930208DB96020807 +:10C8C800A771020800000000000000004993020858 +:10C8D80013970208D5750208000000000000000048 +:10C8E80039930208BB9702082F8002080000000055 +:10C8F800000000002F93020875970208230F030811 +:10C90800000000000000000029930208F3970208C5 +:10C91800F5890208000000000000000043930208A7 +:10C9280059970208B57702080000000000000000CF +:10C938002D9302086797020873140308000000008B +:10C94800000000004F930208CD960208F5CE0208B9 +:10C958000000000000000000479302080597020845 +:10C968001FDA0208000000000000000033930208EC +:10C978009197020809FB020800000000000000006F +:10C98800419302084B970208717A020800000000E0 +:10C998000000000027930208E5970208371A0308E9 +:10C9A80000000000000000004D930208BF96020836 +:10C9B8009BD4020800000000000000004593020814 +:10C9C800F79602086DE00208000000000000000071 +:10C9D8003193020883970208E1050308000000006C +:10C9E8000000000025930208D7970208D123030806 +:10C9F80000000000000000003F9302083D97020875 +:10CA0800F1E6020800000000000000003D93020863 +:10CA18002F970208CDF00208000000000000000077 +:10CA28001593020885960208A5BD0208A994020874 +:10CA3800D1B4020855930208B5AB020899930208CD +:10CA4800DDAD020871AE0208A96D0208AD6D0208DD +:10CA5800B16D02084D1E0208611E0208ED20020891 +:10CA68006D1E0208C16D0208511F020875C1020837 +:10CA78002C2066756E6374696F6E3A20006173735B +:10CA8800657274696F6E2022257322206661696C55 +:10CA980065643A2066696C6520222573222C206C17 +:10CAA800696E65202564257325730A005245454E35 +:10CAB80054206D616C6C6F63207375636365656486 +:10CAC8006564002F6275696C642F676E752D746FCD +:10CAD8006F6C732D666F722D73746D33325F3131E5 +:10CAE8002E332E72656C312E32303233303931327A +:10CAF8002D313630302F7372632F6E65776C696213 +:10CB08002F6E65776C69622F6C6962632F7374642A +:10CB18006C69622F72616E642E63000058F2012006 +:10CB2800232D302B2000686C4C006566674546470E +:10CB38000030313233343536373839414243444591 +:10CB48004600303132333435363738396162636400 +:04CB5800656600000E +:10CB5C000000000000000000000000003088009081 +:08CB6C00188C0090608C009011 +:08CB7400A83FFC7F0100000056 +:10CB7C00F5010008C12900080D370008BD3D00086B +:0CCB8C00914D00081532020871460208A5 +:08CB9800D1010008D1370008AB +:10CBA00000000000B51F00082D1F0008E11F00084D +:10CBB000C51F0008B11F00085A0000004872030892 +:10CBC0000024F400E5550008755400086D54000871 +:10CBD000DD550008B9540008FD540008C955000887 +:10CBE000E15500086F540008D3550008010000000B +:10CBF00010000000AAAAAAAA6E19000000C000C076 +:10CC0000E8030000A4C70308C0C70308F8C7030867 +:10CC10000CC8030820C8030834C80308ACC80308BC +:10CC200010C9030870C80308C0C8030884C80308F3 +:10CC3000D4C8030824C9030888C9030848C80308DE +:10CC40005CC803089CC90308ECC903084CC9030865 +:10CC5000B0C9030860C90308C4C9030898C8030819 +:10CC6000E8C8030800CA030814CA0308FCC803087C +:10CC700038C9030874C90308D8C90308474303081F +:10CC8000000000000300000088F001200000000008 +:10CC900088F00120F0F0012058F101200000000090 +:10CCA0000000000000000000000000000000000084 +:10CCB0000000000000000000000000000000000074 +:10CCC0000000000000000000000000000000000064 +:10CCD0000000000000000000EC000020C4F1012072 +:10CCE0000000000000000000000000000000000044 +:10CCF0000000000000000000000000000000000034 +:10CD00000000000000000000000000000000000023 +:10CD10000000000000000000000000000000000013 +:10CD20000000000000000000000000000000000003 +:10CD300000000000000000000000000000000000F3 +:10CD400000000000000000000000000000000000E3 +:10CD500000000000000000000000000000000000D3 +:10CD600000000000000000000000000000000000C3 +:10CD700000000000000000000000000000000000B3 +:10CD800000000000000000000000000000000000A3 +:10CD90000000000000000000000000000000000093 +:10CDA0000000000000000000000000000000000083 +:10CDB0000000000000000000000000000000000073 +:10CDC0000000000000000000000000000000000063 +:10CDD0000000000000000000000000000000000053 +:10CDE0000000000000000000000000000000000043 +:10CDF0000000000000000000000000000000000033 +:10CE00000000000000000000000000000000000022 +:10CE10000000000000000000000000000000000012 +:0200000490006A +:1000000000000000000000000000000000000000F0 +:1000100000000000000000000000000000000000E0 +:1000200000000000000000000000000000000000D0 +:1000300000000004000000040000000800000008A8 +:100040000000000C0000000C000000080000000888 +:100050000000000400000004000000000000000098 +:100060000000000000000000000000000000000090 +:100070000000000000000000000000000000000080 +:100080000000000000000000000000000000000070 +:100090000000000000000000000000000000000060 +:1000A000000000000000000000000000000000044C +:1000B0000000000840341810B89C4859C8A8509A4D +:1000C000D0B050CBD0B458EBD8B458FBD8B458F714 +:1000D000D0B450EBD0B050CBC8A8509AB89C485977 +:1000E0004034181000000008000000040000000068 +:1000F0000000000000000000000000000000000000 +:1001000000000000000000000000000000000000EF +:1001100000000000000000000000000000000000DF +:1001200000000000000000000000000000000000CF +:10013000000000087864301CC0A4508AD0B458EF86 +:10014000D8B458FFD8B458FFD8B458FFD8B458FF23 +:10015000D8B458FFD8B458FFD8B458FFD8B458FF13 +:10016000D8B458FFD8B458FFD0B458EFC0A4508EBC +:100170007864301C0000000800000000000000004F +:10018000000000000000000000000000000000006F +:10019000000000000000000000000000000000005F +:1001A000000000000000000000000000000000004F +:1001B000000000040000000CB89C4865D0B458EB67 +:1001C000D8B458FFD8B458FFD0B050FFC8A838FFF3 +:1001D000C89C18FFC09818FFC09810FFC09810FF67 +:1001E000C89818FFC89C18FFC8A838FFD0B050FFA7 +:1001F000D8B458FFD8B458FFD0B450EBB89C486579 +:100200000000000C000000040000000000000000DE +:1002100000000000000000000000000000000000DE +:1002200000000000000000000000000000000000CE +:10023000000000000000000428201010C8A850A2F0 +:10024000D0B458FFD8B450FFD0A840FFC89810FFD2 +:10025000C89810FFC89810FFC89810FFC89818FFDA +:10026000C89810FFC09810FFC89818FFC09810FFDA +:10027000C89810FFC89810FFC09818FFD0AC40FF76 +:10028000D8B458FFD8B458FFC0A850A228201010E6 +:10029000000000040000000000000000000000005A +:1002A000000000000000000000000000000000004E +:1002B000000000000000000000000004201C1014DA +:1002C000C8A850B6D8B450FFD0B048FFC89818FF9F +:1002D000C09810FFC09810FFC89818FFC09818FF6A +:1002E000C09810FFC89818FFC89818FFC89818FF42 +:1002F000C09418FFC89818FFC89810FFC89818FF36 +:10030000C09810FFC89810FFC89818FFD0B048FFD9 +:10031000D8B450FFC8A850B6201C10140000000428 +:1003200000000000000000000000000000000000CD +:1003300000000000000000000000000000000004B9 +:1003400000000010C0A450A2D0B458FFD0A430FFC9 +:10035000C09410FFC09418FFC89418FFC09410FFF9 +:10036000C09418FFC89418FFC09410FFC09410FFE9 +:10037000C09410FFC09410FFC89410FFC09418FFE1 +:10038000C09418FFC09410FFC89418FFC09410FFC9 +:10039000C09410FFC09418FFD0A430FFD0B458FF11 +:1003A000C0A450A2000000100000000400000000E3 +:1003B000000000000000000000000000000000003D +:1003C000000000000000000CB0944869D8B450FF51 +:1003D000C89C28FFC89810FFC09810FFC89410FF51 +:1003E000C89810FFC89810FFC09810FFC89410FF5D +:1003F000C89818FFC89810FFC09418FFC89810FF3D +:10040000C89810FFC09810FFC89410FFC89810FF3C +:10041000C09818FFC89410FFC09810FFC89418FF28 +:10042000C89810FFC89C28FFD8B450FFB094486902 +:100430000000000C000000000000000000000000B0 +:10044000000000000000000000000008584C2824B4 +:10045000D0B050EBC8A430FFC09410FFC09418FF78 +:10046000C09418FFC09410FFC09418FFC09418FFE8 +:10047000C09410FFC09410FFC09418FFC09410FFE8 +:10048000C89418FFC09418FFC09410FFC09418FFC0 +:10049000C09410FFC09410FFC09418FFC09410FFC8 +:1004A000C89410FFC09418FFC09410FFC09410FFB0 +:1004B000C8A430FFD0B050EB584C282400000008EE +:1004C0000000000000000000000000000000000428 +:1004D00000000010B89C4892D0AC48FFC09418FFB0 +:1004E000C09410FFC89410FFC09418FFC09410FF70 +:1004F000C09410FFC89418FFC09410FFC09818FF54 +:10050000C09410FFC09410FFC09410FFC09410FF5F +:10051000C09418FFC89410FFC09818FFC09410FF33 +:10052000C09418FFC09810FFC09410FFC09418FF2B +:10053000C09810FFC09418FFC09418FFD0B048FFB7 +:10054000B89C489200000010000000040000000069 +:1005500000000000000000082820101CD0B050EF60 +:10056000C09418FFC89410FFC09410FFC09410FFEF +:10057000C89410FFC09410FFC89410FFC09410FFDF +:10058000C09410FFC89410FFC89410FFC09410FFCF +:10059000C09410FFC89410FFC09410FFC09410FFC7 +:1005A000C89410FFC89410FFC09410FFC89410FFA7 +:1005B000C09410FFC89410FFC89410FFC09410FF9F +:1005C000C89410FFC09418FFD0B050EF2820101C22 +:1005D0000000000800000000000000000000000C07 +:1005E00098844065D0A840FFC09410FFC09410FFCD +:1005F000C09410FFC09418FFC09410FFC09410FF67 +:10060000C09418FFC09410FFC09410FFC09418FF4E +:10061000C09410FFC09418FFC09418FFC09410FF3E +:10062000C09410FFC09418FFC09410FFC09410FF36 +:10063000C09418FFC09418FFC09410FFC09410FF1E +:10064000C09418FFC09410FFC09410FFC09410FF16 +:10065000D0A840FFA08440650000000C000000000E +:100660000000000400000010B89C48A6C09410FFD1 +:10067000C09410FFC09410FFC09410FFC09410FFEE +:10068000C09410FFC09410FFC09410FFC09410FFDE +:10069000C09410FFC09410FFC09410FFC09410FFCE +:1006A000C09410FFC09410FFC09410FFC09410FFBE +:1006B000C09410FFC09410FFC09410FFC09410FFAE +:1006C000C09410FFC09410FFC09410FFC09410FF9E +:1006D000C09410FFC09410FFC09410FFB89C48A6AF +:1006E00000000014000000040000000400000018D6 +:1006F000C0A048D3C09010FFC09010FFC09410FF5E +:10070000C09010FFC09410FFC09410FFC09010FF65 +:10071000C09410FFC09410FFC09010FFC09410FF51 +:10072000C09410FFC09010FFC09410FFC09410FF41 +:10073000C09010FFC09410FFC09410FFC09010FF35 +:10074000C09410FFC09010FFC09010FFC09410FF25 +:10075000C09010FFC09010FFC09010FFC09010FF1D +:10076000C09010FFC0A448D300000018000000048F +:10077000000000080000001CC8A030EFC09010FF6F +:10078000C09410FFC09010FFC09010FFC09410FFE5 +:10079000C09010FFC09010FFC09410FFC09010FFD9 +:1007A000C09010FFC09410FFC09010FFC09010FFC9 +:1007B000C09410FFC09010FFC09010FFC09410FFB5 +:1007C000C09010FFC09010FFC09410FFC09410FFA5 +:1007D000C09010FFC09410FFC09410FFC09010FF95 +:1007E000C09410FFC09410FFC09010FFC89C30EF61 +:1007F0000000001C000000080000000C00000020A9 +:10080000C09418FBC09010FFC09010FFC09010FF64 +:10081000C09010FFC09010FFC09010FFC09010FF5C +:10082000C09010FFC09010FFC09010FFC09010FF4C +:10083000C09010FFC09010FFC09010FFC09010FF3C +:10084000C09010FFC09010FFC09010FFC09010FF2C +:10085000C09010FFC09010FFC09010FFC09010FF1C +:10086000C09010FFC09010FFC09010FFC09010FF0C +:10087000C09010FFC09418FB000000200000000C86 +:100880000000000C00000020C09010FFC09010FF7E +:10089000C09410FFC09010FFC09410FFC09010FFD4 +:1008A000C09010FFC09410FFC09010FFC09410FFC4 +:1008B000C09010FFC09010FFC09410FFC09010FFB8 +:1008C000C09010FFC09410FFC09010FFC09010FFA8 +:1008D000C09410FFC09010FFC09010FFC09010FF98 +:1008E000C09010FFC09010FFC09010FFC09410FF88 +:1008F000C09010FFC09010FFC09410FFC09010FF78 +:10090000000000240000000C0000000C0000002487 +:10091000C09010FFC09010FFC09010FFC09010FF5B +:10092000C09010FFC09010FFC09010FFC09010FF4B +:10093000C09010FFC09010FFC09010FFC09010FF3B +:10094000C09010FFC09010FFC09010FFC09010FF2B +:10095000C09010FFC09010FFC09010FFC09010FF1B +:10096000C09010FFC09010FFC09010FFC09010FF0B +:10097000C09010FFC09010FFC09010FFC09010FFFB +:10098000C09010FFC09010FF000000240000000C79 +:100990000000000C00000024B89010FFB89010FF79 +:1009A000B89010FFB89010FFB89010FFB89010FFEB +:1009B000C09010FFB89010FFB89010FFC09010FFCB +:1009C000B89010FFB89010FFC09010FFB89010FFC3 +:1009D000B89010FFC09010FFB89010FFB89010FFB3 +:1009E000C09010FFB89010FFB89010FFC09010FF9B +:1009F000B89010FFB89010FFC09010FFB89010FF93 +:100A0000B89010FFB89010FFB89010FFC09010FF82 +:100A1000000000240000000C0000000C0000002476 +:100A2000C09010FFB89010FFC09008FFC09010FF5A +:100A3000B89010FFC09010FFB89010FFB89010FF52 +:100A4000C09010FFB89010FFC09010FFB89010FF3A +:100A5000C09010FFB89010FFC09010FFB89010FF2A +:100A6000C09010FFB89010FFC09010FFB89010FF1A +:100A7000B89010FFC09010FFB89010FFB89010FF12 +:100A8000C09010FFB89010FFC09010FFC09010FFF2 +:100A9000B89010FFB89010FF000000240000000C78 +:100AA0000000000C00000024B88C08FFC08C08FF78 +:100AB000C08C10FFB88C08FFC08C08FFC08C08FFEA +:100AC000B88C08FFC08C08FFC08C10FFB88C08FFE2 +:100AD000C08C08FFC08C08FFB88C10FFC08C08FFCA +:100AE000B88C08FFC08C08FFC08C08FFB88C10FFC2 +:100AF000C08C08FFC08C08FFC08C08FFB89008FFAE +:100B0000C08C10FFC08C08FFB88C08FFC08C08FF99 +:100B1000C08C08FFB88C08FFC08C08FFC08C10FF89 +:100B2000000000240000000C0000000C0000002465 +:100B3000B88C10FFB88C10FFB88C10FFB88C10FF69 +:100B4000B88C10FFB88C10FFB88C10FFB88C10FF59 +:100B5000B88C08FFB88C10FFB88C10FFB88C10FF51 +:100B6000B88C08FFB88C10FFB88C10FFB88C10FF41 +:100B7000B88C10FFB88C08FFB89010FFB88C10FF2D +:100B8000B88C10FFB88C10FFB88C08FFB88C10FF21 +:100B9000B89010FFB88C10FFB88C10FFB88C10FF05 +:100BA000B88C10FFB88C08FF000000240000000C77 +:100BB0000000000C00000024B88C08FFB89008FF6B +:100BC000B88C08FFC09008FFB89010FFB88C08FFE1 +:100BD000C09008FFB89010FFB88C08FFC09008FFC5 +:100BE000B89010FFB88C08FFC09008FFB89010FFB5 +:100BF000B88C08FFC09008FFB89010FFB88C08FFB1 +:100C0000B88C08FFB89010FFC08C08FFB88C08FFA4 +:100C1000B89010FFC08C08FFB88C08FFB89010FF88 +:100C2000B88C08FFC09008FFB89010FFB88C08FF80 +:100C3000000000240000000C0000000C0000002454 +:100C4000B88C10FFC08C10FFB88C08FFB88C10FF58 +:100C5000C08C08FFB88C08FFB88C10FFC08C10FF48 +:100C6000B88C08FFB88C10FFC08C10FFB88C08FF40 +:100C7000B88C10FFC08C10FFB88C08FFB88C08FF30 +:100C8000C08C10FFB88C10FFC08C08FFB88C10FF10 +:100C9000B88C08FFC08C10FFB88C10FFB88C08FF10 +:100CA000C08C10FFB88C08FFB88C08FFC08C10FFF8 +:100CB000B88C08FFB88C10FF000000240000000C66 +:100CC0000000000C00000024B88C08FFB88C08FF5E +:100CD000B88C10FFB88C08FFB88C08FFB88C10FFD8 +:100CE000B88C08FFB88C08FFB88C08FFB88C08FFD8 +:100CF000B88C08FFB88C08FFB88C08FFB88C10FFC0 +:100D0000B88C08FFB88C08FFB88C10FFB88C08FFAF +:100D1000B88C08FFB88C08FFB88C10FFB88C08FF9F +:100D2000B88C08FFB88C08FFB88C10FFB88C08FF8F +:100D3000B88C10FFB88C08FFB88C08FFB88C08FF7F +:100D4000000000240000000C0000000C0000002443 +:100D5000B88C08FFB88C08FFB88C10FFB88C08FF5F +:100D6000B88C08FFB88C10FFB88C08FFB88C08FF4F +:100D7000B88C10FFB88C10FFB88C08FFB88C10FF2F +:100D8000B88C08FFB88C08FFB88C10FFB88C08FF2F +:100D9000B88C08FFB88C10FFB88C08FFB88C08FF1F +:100DA000B88C10FFB88C08FFB88C08FFB88C10FF07 +:100DB000B88C08FFB88C08FFB88C10FFB88C08FFFF +:100DC000B88C10FFB88C08FF000000240000000C55 +:100DD0000000000C00000024B88808FFB88808FF55 +:100DE000B88808FFB88808FFB88808FFB88808FFE7 +:100DF000B88810FFB88808FFB88808FFB88808FFCF +:100E0000B88808FFB88808FFB88808FFB88808FFC6 +:100E1000B88808FFB88808FFB88C08FFB88808FFB2 +:100E2000B88810FFB88C08FFB88808FFB88808FF9A +:100E3000B88C08FFB88808FFB88808FFB88C08FF8E +:100E4000B88808FFB88808FFB88C08FFB88810FF7A +:100E5000000000240000000C0000000C0000002432 +:100E6000B88C08FFB88C10FFB88C08FFB88C10FF46 +:100E7000B88C08FFB88C08FFB88C08FFB88C08FF46 +:100E8000B88C08FFB88C10FFB88C08FFB88C08FF2E +:100E9000B88C10FFB88C10FFB88808FFB88C10FF12 +:100EA000B88808FFB88C08FFB88808FFB88C08FF1E +:100EB000B88810FFB88C08FFB88C10FFB88808FFFE +:100EC000B88C10FFB88808FFB88C08FFB88810FFEE +:100ED000B88808FFB88C08FF000000240000000C50 +:100EE0000000000C00000024B88808FFB88808FF44 +:100EF000B88808FFB88808FFB88808FFB88808FFD6 +:100F0000B88808FFB88808FFB88808FFB88808FFC5 +:100F1000B88808FFB88808FFB88808FFB88808FFB5 +:100F2000B88808FFB88808FFB88808FFB88808FFA5 +:100F3000B88808FFB88808FFB88808FFB88808FF95 +:100F4000B88808FFB88808FFB88808FFB88808FF85 +:100F5000B88808FFB88808FFB88808FFB88808FF75 +:100F6000000000240000000C0000000C0000002421 +:100F7000B88808FFB88808FFB88808FFB88808FF55 +:100F8000B88808FFB88810FFB88808FFB88808FF3D +:100F9000B88810FFB88808FFB88808FFB88808FF2D +:100FA000B88808FFB88808FFB88808FFB88808FF25 +:100FB000B88808FFB88810FFB88808FFB88808FF0D +:100FC000B88808FFB88808FFB88808FFB88808FF05 +:100FD000B88808FFB88808FFB88808FFB88808FFF5 +:100FE000B88808FFB88808FF000000240000000C43 +:100FF0000000000C00000024B08808FFB08808FF43 +:10100000B08808FFB08808FFB08808FFB08808FFE4 +:10101000B08808FFB08808FFB08808FFB08808FFD4 +:10102000B08808FFB08808FFB08808FFB08808FFC4 +:10103000B08808FFB08808FFB88808FFB08808FFAC +:10104000B08808FFB08808FFB08808FFB88808FF9C +:10105000B08808FFB08808FFB08808FFB88808FF8C +:10106000B08808FFB08808FFB88808FFB08808FF7C +:10107000000000240000000C0000000C0000002410 +:10108000B88808FFB88808FFB08808FFB88808FF4C +:10109000B88808FFB88808FFB88808FFB08808FF3C +:1010A000B88808FFB88808FFB88808FFB88808FF24 +:1010B000B88808FFB88808FFB08808FFB88808FF1C +:1010C000B08808FFB88808FFB88808FFB08808FF14 +:1010D000B88808FFB08808FFB88808FFB08808FF04 +:1010E000B88808FFB08808FFB08808FFB88808FFF4 +:1010F000B08808FFB08808FF000000240000000C42 +:101100000000000C00000024B08408FFB88408FF31 +:10111000B88408FFB08408FFB08408FFB88408FFD3 +:10112000B88408FFB08408FFB88408FFB08408FFC3 +:10113000B08408FFB88408FFB08808FFB88408FFAF +:10114000B88408FFB08808FFB08808FFB88408FF9B +:10115000B08808FFB88808FFB88408FFB08808FF87 +:10116000B88408FFB88808FFB08408FFB88808FF73 +:10117000B88808FFB88408FFB08808FFB88808FF5F +:10118000000000240000000C0000000C00000024FF +:10119000B08808FFB08408FFB08808FFB08808FF57 +:1011A000B08808FFB08808FFB08808FFB08808FF43 +:1011B000B08808FFB08808FFB08408FFB08808FF37 +:1011C000B08408FFB08808FFB08408FFB08408FF2F +:1011D000B88808FFB08408FFB08408FFB08408FF17 +:1011E000B08808FFB08408FFB08808FFB08408FF0B +:1011F000B08408FFB08808FFB08408FFB08408FFFF +:10120000B08408FFB88408FF000000240000000C30 +:101210000000000C00000024B08408FFB08408FF28 +:10122000B08408FFB88408FFB08408FFB08408FFCA +:10123000B08408FFB88408FFB08408FFB88408FFB2 +:10124000B08408FFB08408FFB88408FFB08408FFAA +:10125000B08408FFB08408FFB08408FFB08408FFA2 +:10126000B08408FFB08408FFB88408FFB08408FF8A +:10127000B08408FFB08408FFB88408FFB08408FF7A +:10128000B08408FFB08408FFB08408FFB08408FF72 +:10129000000000240000000C0000000C00000024EE +:1012A000B08408FFB88408FFB08400FFB08408FF52 +:1012B000B88408FFB08400FFB88408FFB08408FF3A +:1012C000B08400FFB08408FFB88808FFB08408FF2E +:1012D000B08408FFB88808FFB08408FFB88808FF0A +:1012E000B08408FFB88808FFB08408FFB08808FF02 +:1012F000B88408FFB08408FFB08808FFB88408FFEE +:10130000B08408FFB08808FFB88408FFB88808FFD9 +:10131000B08808FFB08408FF000000240000000C23 +:101320000000000C00000024B08008FBB08408FF1F +:10133000B08400FFB08408FFB08408FFB08408FFC9 +:10134000B08408FFB08408FFB08400FFB08408FFB9 +:10135000B08408FFB08400FFB08400FFB08408FFB1 +:10136000B08400FFB08400FFB08408FFB08400FFA9 +:10137000B08400FFB08408FFB08400FFB08400FF99 +:10138000B08408FFB08400FFB08408FFB08400FF81 +:10139000B08408FFB08400FFB08408FFB08008FB71 +:1013A000000000240000000C0000000C00000020E1 +:1013B000A07400EFB08408FFB08408FFB08400FF81 +:1013C000B08400FFB08400FFB08408FFB08400FF49 +:1013D000B08408FFB08400FFB08408FFB08400FF31 +:1013E000B08408FFB08408FFB08400FFB08408FF19 +:1013F000B08408FFB08400FFB08408FFB08408FF09 +:10140000B08400FFB08408FFB08408FFB08400FF00 +:10141000B08408FFB08408FFB08400FFB08408FFE8 +:10142000B08400FFA07400EF000000200000000C5A +:101430000000000800000020886400D3B08408FF8A +:10144000B08408FFB08408FFB08408FFB08408FFB0 +:10145000B08400FFB08408FFB08408FFB08408FFA8 +:10146000B08400FFB08408FFB08408FFB08400FFA0 +:10147000B08408FFB08408FFB08400FFB08408FF88 +:10148000B08408FFB08400FFB08408FFB08408FF78 +:10149000B08400FFB08408FFB08408FFB08400FF70 +:1014A000B08408FFB08408FFB08408FF886400D3CC +:1014B000000000200000000C000000080000001CDC +:1014C000785C00AEB08000FFB08000FFB08000FF0D +:1014D000B08008FFB08000FFB08000FFB08000FF48 +:1014E000B08008FFB08000FFB08000FFB08008FF30 +:1014F000B08000FFB08000FFB08008FFB08000FF28 +:10150000B08000FFB08008FFB08000FFB08000FF17 +:10151000B08008FFB08000FFB08000FFB08008FFFF +:10152000B08000FFB08000FFB08000FFB08008FFF7 +:10153000B08000FF805C00AE0000001C00000008CE +:10154000000000080000001860480875987408FF43 +:10155000B08400FFB08400FFB08408FFB08408FFAF +:10156000B08400FFB08408FFB08400FFB08408FF9F +:10157000B08000FFB08408FFB08408FFB08000FF97 +:10158000B08408FFB08400FFB08008FFB08408FF7B +:10159000B08400FFB08008FFB08408FFB08400FF73 +:1015A000B08008FFB08400FFB08408FFB08008FF5F +:1015B000B08400FFB08408FF987408FF6048087585 +:1015C00000000018000000040000000400000010EB +:1015D00010100830906800F3B08000FFB08008FF62 +:1015E000B08000FFB08000FFB08008FFB08000FF37 +:1015F000B08000FFB08000FFB08000FFB08000FF2F +:10160000B08000FFB08000FFB08000FFB08008FF16 +:10161000B08000FFB08000FFB08000FFB08000FF0E +:10162000B08000FFB08000FFB08000FFB08000FFFE +:10163000B08000FFB08000FFB08000FFB08000FFEE +:10164000906800EF1010083400000014000000043F +:10165000000000000000000C00000024705400A2F4 +:10166000906C00FFB08008FFB08000FFB08000FFEA +:10167000B08008FFB08000FFB08008FFB08008FF96 +:10168000B08000FFB08408FFB08008FFB08000FF8A +:10169000B08000FFB08408FFB08000FFB08000FF82 +:1016A000B08008FFB08008FFB08400FFB08008FF62 +:1016B000B08008FFB08000FFB08408FFB08008FF52 +:1016C000B08000FF906C00FF705400A20000002466 +:1016D0000000000C000000000000000000000008F6 +:1016E0000000001820180041886800EFA07408FF6F +:1016F000A88000FFA88000FFB08008FFA88000FF3E +:10170000A88000FFB08008FFA88000FFA88000FF2D +:10171000B08008FFA88000FFA88008FFB08000FF0D +:10172000A88000FFA88008FFB08000FFA88000FF0D +:10173000B08008FFA88000FFB08000FFA88008FFED +:10174000A88000FFB08008FFA07408FF886800F33D +:10175000201C0041000000180000000800000000EC +:1017600000000000000000040000000C0000002445 +:1017700060440082906800FFA07800FFB08000FF06 +:10178000B08000FFA88000FFB08000FFB08000FFA5 +:10179000B08000FFB08000FFB08000FFA88000FF95 +:1017A000B08000FFB08000FFB08000FFB08000FF7D +:1017B000A88000FFB08000FFB08000FFA88000FF7D +:1017C000B08000FFB08000FFA88000FFA07800FF7D +:1017D000906800FF60480082000000240000000CB8 +:1017E00000000004000000000000000000000000F5 +:1017F000000000080000001800000030785800B217 +:10180000906808FFA07400FFB08000FFB08008FF60 +:10181000A88000FFB08000FFA88008FFB08000FF14 +:10182000B08000FFA88008FFB08000FFB08008FFF4 +:10183000A88008FFB08000FFB08008FFA88000FFEC +:10184000B08000FFB08008FFA88000FFB08000FFDC +:10185000A07400FF906800FF785800B200000030CC +:10186000000000140000000800000000000000005C +:101870000000000000000000000000000000000C5C +:101880000000001C08080038785C00C7886808FF62 +:10189000906C00FFA88000FFA88008FFA88000FFD0 +:1018A000A88000FFA88008FFA88000FFB08000FF8C +:1018B000A88000FFA88000FFA88000FFA88000FF8C +:1018C000B08000FFA88008FFA88000FFB08000FF64 +:1018D000A88008FF906C00FF906808FF785C08C73C +:1018E000080400380000001C0000000C0000000488 +:1018F00000000000000000000000000000000000E8 +:1019000000000000000000040000000C00000020A7 +:101910000804003C785800B6906800FF906800FF0B +:10192000987000FFB08000FFB08000FFB08000FF23 +:10193000A87C00FFB08000FFB08000FFA87C00FF03 +:10194000B08000FFB08000FFA88000FFB07C00FFE7 +:10195000A88000FF987000FF906800FF906800FF6B +:10196000705800B60804003C000000200000000C85 +:101970000000000400000000000000000000000063 +:101980000000000000000000000000000000000057 +:1019900000000004000000100000002000000034DF +:1019A00058440086886400F3906800FF886800FF50 +:1019B000906800FFA07400FFA87C00FFA87C08FFCF +:1019C000A87C00FFA87C00FFA87C08FFA87C00FF83 +:1019D000A07400FF906800FF886800FF906800FF17 +:1019E000886400F3584400860000003400000020A2 +:1019F00000000010000000040000000000000000D3 +:101A000000000000000000000000000000000000D6 +:101A100000000000000000000000000000000004C2 +:101A2000000000100000001C000000302014004DD9 +:101A3000685000AA886408F3886800FF886800FF7F +:101A4000906800FF886800FF906800FF906800FFC2 +:101A5000886800FF906800FF886800FF886808FFBA +:101A6000886400F3685000AA2014004D0000003084 +:101A70000000001C00000010000000040000000036 +:101A80000000000000000000000000000000000056 +:101A90000000000000000000000000000000000046 +:101AA0000000000000000000000000040000000C26 +:101AB0000000001800000024000000340804004565 +:101AC000503C0082705400B6805C00DB886400EFFC +:101AD000886400FB886800FB886400F3805C00DB9E +:101AE000705400B6503C00821008004500000034DD +:101AF00000000024000000180000000C000000049A +:101B000000000000000000000000000000000000D5 +:101B100000000000000000000000000000000000C5 +:101B200000000000000000000000000000000000B5 +:101B30000000000000000004000000080000000C8D +:101B400000000018000000240000002C00000038F5 +:101B50000000003C0000004500000045000000457A +:101B60000000004100000041000000380000002C8F +:101B700000000024000000180000000C0000000815 +:101B80000000000000000000000000000000000055 +:101B90000000000000000000000000000000000045 +:101BA0000000000000000000000000000000000035 +:101BB0000000000000000000000000000000000025 +:101BC0000000000000000004000000080000000CFD +:101BD00000000010000000180000001C00000020A1 +:101BE0000000002400000024000000200000001C71 +:101BF00000000018000000100000000C00000008A9 +:101C000000000004000000000000000000000000D0 +:101C100000000000000000000000000000000000C4 +:101C200000000000000000000000000000000000B4 +:101C300000000000000000000000000000000000A4 +:101C40000000000000000000000000000000000094 +:101C50000000000000000000000000040000000878 +:101C6000000000080000000C0000000C0000000C48 +:101C70000000000800000008000000080000000448 +:101C80000000000000000000000000000000000054 +:101C90000000000000000000000000000000000044 +:101CA0000000000000000000000000000000000034 +:101CB0000000000000000000000000000000000024 +:101CC00000000000A8ACA804B0ACB055A8ACA8A611 +:101CD000A8ACA8DFB0ACB0F7A8ACA8F3A8ACA8D764 +:101CE000B0ACB0A6A8ACA855A8ACA80400000000F1 +:101CF00000000000000000000000000000000000E4 +:101D000000000000000000000000000000000000D3 +:101D1000A8ACA851B0ACB0DBB0ACB0FFA8ACA8FF89 +:101D2000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FF97 +:101D3000B0ACB0FFA8ACA8FFB0ACB0DBB0ACB05159 +:101D40000000000000000000000000000000000093 +:101D50000000000000000000A8ACA804B0ACB08AED +:101D6000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FF77 +:101D7000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FF57 +:101D8000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FF57 +:101D9000B0ACB08AA8ACA8040000000000000000AD +:101DA0000000000000000000B0ACB08AA8ACA8FFA2 +:101DB000B0ACB0FFA8ACA8FFB0ACB0FFB0ACB0FF07 +:101DC000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FF07 +:101DD000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FFF7 +:101DE000B0ACB0FFA8ACA88A000000000000000062 +:101DF00000000000A8ACA855B0ACB0FFA8ACA8FF8C +:101E0000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FFC6 +:101E1000A8ACA8FFA8ACA8FFB0ACB0FFB0ACB0FFB6 +:101E2000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FFA6 +:101E3000A8ACA8FFB0ACB0FFB0ACB055000000003B +:101E4000A8ACA804B0ACB0E3A8ACA8FFB0ACB0FF9D +:101E5000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FF76 +:101E6000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FF66 +:101E7000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FF66 +:101E8000A8ACA8FFB0ACB0FFA8ACA8E3A8ACA8046D +:101E9000B0ACB059A8ACA8FFB0ACB0FFA8ACA8FFDC +:101EA000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FF26 +:101EB000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FF06 +:101EC000B0ACB0FFA8ACA8FFB0ACB0FFB0ACB0FFF6 +:101ED000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB05D98 +:101EE000A8ACA8AAB0ACB0FFA8ACA8FFB0ACB0FF3B +:101EF000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FFE6 +:101F0000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FFC5 +:101F1000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FFC5 +:101F2000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8AAFA +:101F3000A8ACA8DFB0ACB0FFB0ACB0FFA8ACA8FFB5 +:101F4000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FF75 +:101F5000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FF75 +:101F6000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FF55 +:101F7000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0DF75 +:101F8000A8ACA8F7B0ACB0FFA8ACA8FFA8ACA8FF5D +:101F9000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FF35 +:101FA000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FF35 +:101FB000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FF15 +:101FC000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FB09 +:101FD000B0ACB0FFA8ACA8FFB0ACB0FFB0ACB0FFE5 +:101FE000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FFE5 +:101FF000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FFD5 +:10200000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FFC4 +:10201000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FFB4 +:10202000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FFB4 +:10203000B0ACB0FFA8ACA8FFB0ACB0FFB0ACB0FF84 +:10204000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF84 +:10205000B0ACB0FFA8ACA8FFB0ACB0FFB0ACB0FF64 +:10206000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FF74 +:10207000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF54 +:10208000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FF54 +:10209000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FF34 +:1020A000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FF34 +:1020B000B0ACB0FFA8ACA8FFB0ACB0FFB0ACB0FF04 +:1020C000B0ACB0FFA8ACA8FFB0ACB0FFB0ACB0FFF4 +:1020D000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FF04 +:1020E000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FFD4 +:1020F000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FFD4 +:10210000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FFD3 +:10211000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FFC3 +:10212000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FF93 +:10213000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF93 +:10214000B0ACB0FFA8ACA8FFB0ACB0FFB0ACB0FF73 +:10215000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF73 +:10216000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FF63 +:10217000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FF53 +:10218000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FF43 +:10219000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FF43 +:1021A000B0ACB0FFB0ACB0FFA8ACA8FFA8ACA8FF23 +:1021B000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF13 +:1021C000A8ACA8FFA8ACA8FFB0ACB0FFB0ACB0FF03 +:1021D000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FFF3 +:1021E000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FFE3 +:1021F000A8ACA8FFA8ACA8FFB0ACB0FFB0ACB0FFD3 +:10220000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FFC2 +:10221000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FFB2 +:10222000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FFB2 +:10223000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FF82 +:10224000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FF82 +:10225000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FF72 +:10226000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FF52 +:10227000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FF52 +:10228000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FF52 +:10229000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FF32 +:1022A000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FF32 +:1022B000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FF12 +:1022C000B0ACB0FFA8ACA8FFB0ACB0FFB0ACB0FFF2 +:1022D000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FFF2 +:1022E000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FFD2 +:1022F000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FFD2 +:10230000B0ACB0FFB0ACB0FFA8ACA8FFA8ACA8FFC1 +:10231000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FFB1 +:10232000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FFB1 +:10233000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FFA1 +:10234000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FF91 +:10235000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FF61 +:10236000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FF61 +:10237000B0ACB0FFA8ACA8FFB0ACB0FFB0ACB0FF41 +:10238000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FF41 +:10239000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FF31 +:1023A000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF21 +:1023B000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FF21 +:1023C000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FF01 +:1023D000A8ACA8FFA8ACA8FFB0ACB0FFB0ACB0FFF1 +:1023E000A8ACA8FFB0ACB0FFB0ACB0FFB0ACB0FFD1 +:1023F000A8ACA8FFA8ACA8FFB0ACB0FFB0ACB0FFD1 +:10240000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FFC0 +:10241000B0ACB0FFA8ACA8FFB0ACB0FFB0ACB0FFA0 +:10242000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FFB0 +:10243000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FFA0 +:10244000B0ACB0FFB0ACB0FFA8ACA8FFA8ACA8FF80 +:10245000B0ACB0FFB0ACB0FFA8ACA8FFA8ACA8FF70 +:10246000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FF60 +:10247000B0ACB0FFB0ACB0FFA8ACA8FFA8ACA8FF50 +:10248000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FF40 +:10249000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FF40 +:1024A000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FF20 +:1024B000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FF20 +:1024C000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FFF0 +:1024D000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FFE0 +:1024E000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FFE0 +:1024F000B0ACB0FFA8ACA8FFB0ACB0FFB0ACB0FFC0 +:10250000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FFBF +:10251000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FFAF +:10252000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FFAF +:10253000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FF8F +:10254000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FF7F +:10255000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FF6F +:10256000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FF5F +:10257000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FF4F +:10258000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FF3F +:10259000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FF2F +:1025A000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FF2F +:1025B000B0ACB0FFB0ACB0FFA8ACA8FFA8ACA8FF0F +:1025C000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FFFF +:1025D000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FFDF +:1025E000A8ACA8FFA8ACA8FFB0ACB0FFB0ACB0FFDF +:1025F000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FFCF +:10260000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FFBE +:10261000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FFBE +:10262000B0ACB0FFA8ACA8FFB0ACB0FFB0ACB0FF8E +:10263000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FF9E +:10264000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FF7E +:10265000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FF6E +:10266000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FF4E +:10267000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FF5E +:10268000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FF2E +:10269000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF2E +:1026A000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF1E +:1026B000A8ACA8FFA8ACA8FFB0ACB0FFB0ACB0FF0E +:1026C000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FF0E +:1026D000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FFEE +:1026E000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FFDE +:1026F000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FFCE +:10270000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FFCD +:10271000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FF9D +:10272000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF9D +:10273000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF8D +:10274000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF7D +:10275000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FF5D +:10276000A8ACA8FFA8ACA8FFB0ACB0FFB0ACB0FF5D +:10277000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FF5D +:10278000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FF3D +:10279000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FF2D +:1027A000A8ACA8FFA8ACA8FFB0ACB0FFB0ACB0FF1D +:1027B000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FF1D +:1027C000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FFED +:1027D000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FFED +:1027E000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FFDD +:1027F000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FFDD +:10280000B0ACB0FFB0ACB0FFA8ACA8FFA8ACA8FFBC +:10281000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FFAC +:10282000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF9C +:10283000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF8C +:10284000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FF6C +:10285000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FF6C +:10286000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FF4C +:10287000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FF5C +:10288000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FF3C +:10289000A8ACA8FFA8ACA8FFB0ACB0FFB0ACB0FF2C +:1028A000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FF2C +:1028B000B0ACB0FFA8ACA8FFB0ACB0FFB0ACB0FFFC +:1028C000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FFFC +:1028D000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FFEC +:1028E000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FFEC +:1028F000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FFCC +:10290000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FFCB +:10291000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FFAB +:10292000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF9B +:10293000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FF7B +:10294000B0ACB0FFA8ACA8FFB0ACB0FFB0ACB0FF6B +:10295000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF6B +:10296000B0ACB0FFA8ACA8FFB0ACB0FFB0ACB0FF4B +:10297000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FF5B +:10298000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FF4B +:10299000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF2B +:1029A000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FF1B +:1029B000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF0B +:1029C000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FFFB +:1029D000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FFEB +:1029E000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FFDB +:1029F000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FFDB +:102A0000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FFBA +:102A1000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FFAA +:102A2000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FF9A +:102A3000B0ACB0FFA8ACA8FFB0ACB0FFB0ACB0FF7A +:102A4000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FF7A +:102A5000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FF5A +:102A6000A8ACA8FFA8ACA8FFB0ACB0FFB0ACB0FF5A +:102A7000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF4A +:102A8000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FF4A +:102A9000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FF3A +:102AA000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FF1A +:102AB000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FF0A +:102AC000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FFFA +:102AD000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FFDA +:102AE000B0ACB0FFA8ACA8FFB0ACB0FFB0ACB0FFCA +:102AF000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FFCA +:102B0000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FFB9 +:102B1000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FFA9 +:102B2000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FFA9 +:102B3000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF89 +:102B4000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FF89 +:102B5000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FF69 +:102B6000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FF59 +:102B7000B0ACB0FFA8ACA8FFB0ACB0FFB0ACB0FF39 +:102B8000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FF49 +:102B9000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FF19 +:102BA000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF19 +:102BB000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FF19 +:102BC000B0ACB0FFB0ACB0FFA8ACA8FFA8ACA8FFF9 +:102BD000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FFD9 +:102BE000A8ACA8FFA8ACA8FFB0ACB0FFB0ACB0FFD9 +:102BF000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FFD9 +:102C0000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FFB8 +:102C1000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FFA8 +:102C2000A8ACA8FFA8ACA8FFB0ACB0FFB0ACB0FF98 +:102C3000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FF98 +:102C4000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FF68 +:102C5000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF68 +:102C6000A8ACA8FFB0ACB0FFB0ACB0FFB0ACB0FF48 +:102C7000A8ACA8FFA8ACA8FFB0ACB0FFB0ACB0FF48 +:102C8000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FF38 +:102C9000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FF38 +:102CA000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FF18 +:102CB000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FF08 +:102CC000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FFF8 +:102CD000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FFE8 +:102CE000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FFD8 +:102CF000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FFD8 +:102D0000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FFB7 +:102D1000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FFA7 +:102D2000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FF97 +:102D3000B0ACB0FFA8ACA8FFB0ACB0FFB0ACB0FF77 +:102D4000B0ACB0FFA8ACA8FFB0ACB0FFB0ACB0FF67 +:102D5000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FF67 +:102D6000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF57 +:102D7000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FF47 +:102D8000A8ACA8FFA8ACA8FFA8ACA8FFB0ACB0FF47 +:102D9000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF27 +:102DA000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FF27 +:102DB000B0ACB0FFB0ACB0FFA8ACA8FFA8ACA8FF07 +:102DC000B0ACB0FFA8ACA8FFB0ACB0FFB0ACB0FFE7 +:102DD000B0ACB0FFB0ACB0FFA8ACA8FFA8ACA8FFE7 +:102DE000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FFE7 +:102DF000B0ACB0FFA8ACA8FFB0ACB0FFB0ACB0FFB7 +:102E0000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FFB6 +:102E1000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FFB6 +:102E2000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FF96 +:102E3000B0ACB0FFA8ACA8FFB0ACB0FFB0ACB0FF76 +:102E4000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FF86 +:102E5000B0ACB0FFA8ACA8FFB0ACB0FFB0ACB0FF56 +:102E6000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FF56 +:102E7000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF46 +:102E8000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FF46 +:102E9000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FF16 +:102EA000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FF26 +:102EB000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF06 +:102EC000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FFF6 +:102ED000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FFE6 +:102EE000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FFD6 +:102EF000B0ACB0FFA8ACA8FFB0ACB0FFB0ACB0FFB6 +:102F0000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FFC5 +:102F1000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FFA5 +:102F2000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FF95 +:102F3000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FF85 +:102F4000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FF85 +:102F5000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FF55 +:102F6000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FF55 +:102F7000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FF55 +:102F8000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FF25 +:102F9000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FF25 +:102FA000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FF15 +:102FB000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FF05 +:102FC000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FFF5 +:102FD000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FFE5 +:102FE000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FFD5 +:102FF000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FFD5 +:10300000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FFA4 +:10301000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FFA4 +:10302000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF94 +:10303000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FF94 +:10304000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FF64 +:10305000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FF74 +:10306000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF54 +:10307000B0ACB0FFA8ACA8FFB0ACB0FFB0ACB0FF34 +:10308000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF34 +:10309000A8ACA8FFA8ACA8FFB0ACB0FFB0ACB0FF24 +:1030A000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FF14 +:1030B000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FF04 +:1030C000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FF04 +:1030D000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FFD4 +:1030E000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FFD4 +:1030F000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FFD4 +:10310000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FFB3 +:10311000B0ACB0FFB0ACB0FFA8ACA8FFA8ACA8FFA3 +:10312000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FF93 +:10313000B0ACB0FFA8ACA8FFB0ACB0FFB0ACB0FF73 +:10314000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF73 +:10315000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FF73 +:10316000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FF43 +:10317000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FF53 +:10318000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FF43 +:10319000B0ACB0FFB0ACB0FFA8ACA8FFA8ACA8FF23 +:1031A000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FF13 +:1031B000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF03 +:1031C000B0ACB0FFA8ACA8FFB0ACB0FFB0ACB0FFE3 +:1031D000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FFE3 +:1031E000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FFD3 +:1031F000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FFC3 +:10320000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FFB2 +:10321000A8ACA8FFA8ACA8FFB0ACB0FFB0ACB0FFA2 +:10322000A8ACA8FFA8ACA8FFB0ACB0FFB0ACB0FF92 +:10323000A8ACA8FFA8ACA8FFB0ACB0FFB0ACB0FF82 +:10324000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF72 +:10325000B0ACB0FFA8ACA8FFB0ACB0FFB0ACB0FF52 +:10326000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FF62 +:10327000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FF42 +:10328000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FF32 +:10329000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FF22 +:1032A000A8ACA8FFA8ACA8FFB0ACB0FFB0ACB0FF12 +:1032B000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF02 +:1032C000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FFF2 +:1032D000B0ACB0FFB0ACB0FFA8ACA8FFA8ACA8FFE2 +:1032E000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FFD2 +:1032F000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FFC2 +:10330000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FFC1 +:10331000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FFA1 +:10332000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FF91 +:10333000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF81 +:10334000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FF71 +:10335000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FF51 +:10336000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF51 +:10337000A8ACA8FFA8ACA8FFB0ACB0FFB0ACB0FF41 +:10338000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FF31 +:10339000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FF21 +:1033A000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF11 +:1033B000B0ACB0FFA8ACA8FFB0ACB0FFB0ACB0FFF1 +:1033C000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FF01 +:1033D000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FFE1 +:1033E000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FFE1 +:1033F000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FFC1 +:10340000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FFC0 +:10341000B0ACB0FFB0ACB0FFA8ACA8FFA8ACA8FFA0 +:10342000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF90 +:10343000B0ACB0FFA8ACA8FFB0ACB0FFB0ACB0FF70 +:10344000B0ACB0FFA8ACA8FFB0ACB0FFB0ACB0FF60 +:10345000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FF70 +:10346000B0ACB0FFA8ACA8FFB0ACB0FFB0ACB0FF40 +:10347000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FF40 +:10348000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FF40 +:10349000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FF30 +:1034A000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FF00 +:1034B000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FF10 +:1034C000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FFF0 +:1034D000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FFE0 +:1034E000B0ACB0FFB0ACB0FFA8ACA8FFA8ACA8FFD0 +:1034F000B0ACB0FFA8ACA8FFB0ACB0FFB0ACB0FFB0 +:10350000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FFAF +:10351000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF9F +:10352000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF8F +:10353000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FF7F +:10354000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FF6F +:10355000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FF5F +:10356000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FF4F +:10357000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FF3F +:10358000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF2F +:10359000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FF1F +:1035A000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FF1F +:1035B000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FFFF +:1035C000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FFEF +:1035D000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FFDF +:1035E000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FFCF +:1035F000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FFAF +:10360000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FFAE +:10361000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF9E +:10362000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FF8E +:10363000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FF8E +:10364000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FF6E +:10365000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF5E +:10366000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FF4E +:10367000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FF3E +:10368000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FF1E +:10369000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FF1E +:1036A000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FF0E +:1036B000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FFFE +:1036C000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FFFE +:1036D000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FFDE +:1036E000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FFCE +:1036F000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FFCE +:10370000B0ACB0FFA8ACA8FFB0ACB0FFB0ACB0FF9D +:10371000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF9D +:10372000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FF8D +:10373000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF7D +:10374000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FF5D +:10375000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FF6D +:10376000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FF4D +:10377000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FF3D +:10378000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FF2D +:10379000A8ACA8FFA8ACA8FFB0ACB0FFB0ACB0FF1D +:1037A000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF0D +:1037B000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FFFD +:1037C000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FFED +:1037D000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FFDD +:1037E000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FFDD +:1037F000B0ACB0FFB0ACB0FFA8ACA8FFA8ACA8FFBD +:10380000B0ACB0FFA8ACA8FFB0ACB0FFB0ACB0FF9C +:10381000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FFAC +:10382000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FF7C +:10383000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FF6C +:10384000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FF6C +:10385000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FF5C +:10386000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FF4C +:10387000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FF4C +:10388000A8ACA8FFA8ACA8FFB0ACB0FFB0ACB0FF2C +:10389000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FF2C +:1038A000B0ACB0FFB0ACB0FFA8ACA8FFA8ACA8FF0C +:1038B000B0ACB0FFA8ACA8FFB0ACB0FFB0ACB0FFEC +:1038C000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FFEC +:1038D000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FFEC +:1038E000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FFCC +:1038F000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FFBC +:10390000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FFBB +:10391000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF9B +:10392000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FF7B +:10393000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FF6B +:10394000A8ACA8FFA8ACA8FFB0ACB0FFB0ACB0FF6B +:10395000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FF5B +:10396000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FF4B +:10397000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FF4B +:10398000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FF2B +:10399000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FF1B +:1039A000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF0B +:1039B000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FFFB +:1039C000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FFEB +:1039D000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FFEB +:1039E000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FFBB +:1039F000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FFBB +:103A0000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FFAA +:103A1000B0ACB0FFA8ACA8FFB0ACB0FFB0ACB0FF8A +:103A2000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FF8A +:103A3000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FF7A +:103A4000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FF6A +:103A5000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF5A +:103A6000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FF5A +:103A7000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF3A +:103A8000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FF3A +:103A9000B0ACB0FFA8ACA8FFB0ACB0FFB0ACB0FF0A +:103AA000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FF1A +:103AB000B0ACB0FFA8ACA8FFB0ACB0FFB0ACB0FFEA +:103AC000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FFFA +:103AD000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FFCA +:103AE000A8ACA8FFA8ACA8FFB0ACB0FFB0ACB0FFCA +:103AF000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FFBA +:103B0000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FFA9 +:103B1000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FF99 +:103B2000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FF89 +:103B3000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FF79 +:103B4000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF69 +:103B5000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FF69 +:103B6000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FF39 +:103B7000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FF49 +:103B8000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FF19 +:103B9000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FF29 +:103BA000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FF09 +:103BB000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FFF9 +:103BC000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FFE9 +:103BD000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FFD9 +:103BE000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FFB9 +:103BF000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FFB9 +:103C0000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FFA8 +:103C1000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FF98 +:103C2000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FF98 +:103C3000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FF78 +:103C4000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF68 +:103C5000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FF58 +:103C6000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF48 +:103C7000B0ACB0FFA8ACA8FFB0ACB0FFB0ACB0FF28 +:103C8000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FF38 +:103C9000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FF18 +:103CA000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FF08 +:103CB000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FFF8 +:103CC000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FFF8 +:103CD000B0ACB0FFB0ACB0FFB0ACB0FFA8ACA8FFC8 +:103CE000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FFC8 +:103CF000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FFB8 +:103D0000B0ACB0FFA8ACA8FFB0ACB0FFB0ACB0FF97 +:103D1000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FFA7 +:103D2000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF87 +:103D3000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF77 +:103D4000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FF67 +:103D5000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF57 +:103D6000B0ACB0FFA8ACA8FFB0ACB0FFB0ACB0FF37 +:103D7000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FF47 +:103D8000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FF27 +:103D9000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FF17 +:103DA000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FF17 +:103DB000B0ACB0FFA8ACA8FFB0ACB0FFB0ACB0FFE7 +:103DC000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FFE7 +:103DD000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FFD7 +:103DE000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FFC7 +:103DF000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FFB7 +:103E0000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FFB6 +:103E1000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FF96 +:103E2000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FF86 +:103E3000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FF76 +:103E4000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FF66 +:103E5000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FF46 +:103E6000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF46 +:103E7000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FF46 +:103E8000B0ACB0FFB0ACB0FFA8ACA8FFA8ACA8FF26 +:103E9000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FF16 +:103EA000A8ACA8FFA8ACA8FFB0ACB0FFB0ACB0FF06 +:103EB000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FF06 +:103EC000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FFE6 +:103ED000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FFD6 +:103EE000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FFB6 +:103EF000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FFB6 +:103F0000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FFA5 +:103F1000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FF85 +:103F2000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FF95 +:103F3000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FF85 +:103F4000B0ACB0FFB0ACB0FFA8ACA8FFA8ACA8FF65 +:103F5000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FF45 +:103F6000A8ACA8FFA8ACA8FFB0ACB0FFB0ACB0FF45 +:103F7000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FF35 +:103F8000B0ACB0FFB0ACB0FFA8ACA8FFA8ACA8FF25 +:103F9000B0ACB0FFB0ACB0FFA8ACA8FFA8ACA8FF15 +:103FA000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FF05 +:103FB000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FF05 +:103FC000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FFE5 +:103FD000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FFD5 +:103FE000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FFC5 +:103FF000B0ACB0FFB0ACB0FFA8ACA8FFA8ACA8FFB5 +:10400000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FF94 +:10401000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FF94 +:10402000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF84 +:10403000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FF84 +:10404000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FF64 +:10405000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FF64 +:10406000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FF44 +:10407000B0ACB0FFA8ACA8FFB0ACB0FFB0ACB0FF24 +:10408000B0ACB0FFA8ACA8FFB0ACB0FFB0ACB0FF14 +:10409000A8ACA8FFA8ACA8FFB0ACB0FFB0ACB0FF14 +:1040A000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FF04 +:1040B000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FFF4 +:1040C000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FFE4 +:1040D000A8ACA8FFA8ACA8FFB0ACB0FFB0ACB0FFD4 +:1040E000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FFD4 +:1040F000B0ACB0FFA8ACA8FFB0ACB0FFB0ACB0FFA4 +:10410000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FFA3 +:10411000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FFA3 +:10412000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FF83 +:10413000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FF73 +:10414000A8ACA8FFA8ACA8FFA8ACA8FFB0ACB0FF73 +:10415000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FF53 +:10416000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FF43 +:10417000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FF23 +:10418000A8ACA8FFA8ACA8FFB0ACB0FFB0ACB0FF23 +:10419000B0ACB0FFB0ACB0FFA8ACA8FFA8ACA8FF13 +:1041A000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FF03 +:1041B000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FFE3 +:1041C000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FFE3 +:1041D000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FFD3 +:1041E000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FFC3 +:1041F000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FFB3 +:10420000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FFB2 +:10421000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FFA2 +:10422000B0ACB0FFB0ACB0FFA8ACA8FFA8ACA8FF82 +:10423000A8ACA8FFA8ACA8FFB0ACB0FFB0ACB0FF72 +:10424000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FF62 +:10425000B0ACB0FFA8ACA8FFB0ACB0FFB0ACB0FF42 +:10426000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF42 +:10427000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FF32 +:10428000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FF22 +:10429000A8ACA8FFA8ACA8FFB0ACB0FFB0ACB0FF12 +:1042A000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FF12 +:1042B000B0ACB0FFA8ACA8FFB0ACB0FFB0ACB0FFE2 +:1042C000A8ACA8FFA8ACA8FFB0ACB0FFB0ACB0FFE2 +:1042D000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FFC2 +:1042E000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FFC2 +:1042F000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FFB2 +:10430000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FFA1 +:10431000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FFA1 +:10432000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FF91 +:10433000B0ACB0FFB0ACB0FFA8ACA8FFA8ACA8FF71 +:10434000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FF61 +:10435000B0ACB0FFA8ACA8FFB0ACB0FFB0ACB0FF41 +:10436000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FF41 +:10437000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FF41 +:10438000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FF21 +:10439000B0ACB0FFB0ACB0FFA8ACA8FFA8ACA8FF11 +:1043A000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FF01 +:1043B000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FFF1 +:1043C000B0ACB0FFB0ACB0FFB0ACB0FFA8ACA8FFD1 +:1043D000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FFD1 +:1043E000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FFC1 +:1043F000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FFB1 +:10440000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FFA0 +:10441000A8ACA8FFA8ACA8FFB0ACB0FFB0ACB0FF90 +:10442000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FF80 +:10443000A8ACA8FFA8ACA8FFB0ACB0FFB0ACB0FF70 +:10444000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF60 +:10445000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FF50 +:10446000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FF50 +:10447000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FF30 +:10448000B0ACB0FFB0ACB0FFA8ACA8FFA8ACA8FF20 +:10449000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FF10 +:1044A000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF00 +:1044B000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FFE0 +:1044C000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FFF0 +:1044D000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FFC0 +:1044E000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FFC0 +:1044F000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FFB0 +:10450000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF9F +:10451000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FF8F +:10452000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FF8F +:10453000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF6F +:10454000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF5F +:10455000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FF5F +:10456000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FF2F +:10457000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FF2F +:10458000B0ACB0FFB0ACB0FFA8ACA8FFA8ACA8FF1F +:10459000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FF0F +:1045A000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FFFF +:1045B000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FFFF +:1045C000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FFCF +:1045D000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FFCF +:1045E000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FFBF +:1045F000A8ACA8FFB0ACB0FFB0ACB0FFB0ACB0FF9F +:10460000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FF9E +:10461000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FF9E +:10462000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FF7E +:10463000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF6E +:10464000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FF6E +:10465000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FF4E +:10466000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FF2E +:10467000B0ACB0FFA8ACA8FFB0ACB0FFB0ACB0FF1E +:10468000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF1E +:10469000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FF0E +:1046A000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FF0E +:1046B000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FFEE +:1046C000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FFEE +:1046D000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FFCE +:1046E000A8ACA8FFB0ACB0FFB0ACB0FFB0ACB0FFAE +:1046F000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FFAE +:10470000B0ACB0FFA8ACA8FFB0ACB0FFB0ACB0FF8D +:10471000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FF9D +:10472000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FF7D +:10473000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FF7D +:10474000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FF5D +:10475000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FF5D +:10476000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FF2D +:10477000B0ACB0FFA8ACA8FFB0ACB0FFB0ACB0FF1D +:10478000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FF1D +:10479000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FF0D +:1047A000B0ACB0FFB0ACB0FFA8ACA8FFA8ACA8FFFD +:1047B000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FFED +:1047C000A8ACA8FFA8ACA8FFA8ACA8FFB0ACB0FFED +:1047D000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FFBD +:1047E000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FFCD +:1047F000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FFAD +:10480000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FF8C +:10481000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FF8C +:10482000A8ACA8FFA8ACA8FFB0ACB0FFB0ACB0FF7C +:10483000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FF6C +:10484000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FF6C +:10485000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FF4C +:10486000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FF2C +:10487000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FF3C +:10488000B0ACB0FFA8ACA8FFB0ACB0FFB0ACB0FF0C +:10489000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FF0C +:1048A000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FFFC +:1048B000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FFFC +:1048C000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FFCC +:1048D000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FFDC +:1048E000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FFBC +:1048F000B0ACB0FFA8ACA8FFB0ACB0FFB0ACB0FF9C +:10490000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF9B +:10491000A8ACA8FFA8ACA8FFB0ACB0FFB0ACB0FF8B +:10492000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FF7B +:10493000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FF6B +:10494000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FF6B +:10495000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FF4B +:10496000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FF4B +:10497000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FF2B +:10498000B0ACB0FFA8ACA8FFB0ACB0FFB0ACB0FF0B +:10499000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF0B +:1049A000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FFFB +:1049B000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FFDB +:1049C000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FFDB +:1049D000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FFDB +:1049E000B0ACB0FFB0ACB0FFA8ACA8FFA8ACA8FFBB +:1049F000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FFAB +:104A0000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FFAA +:104A1000B0ACB0FFB0ACB0FFB0ACB0FFA8ACA8FF7A +:104A2000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FF7A +:104A3000B0ACB0FFA8ACA8FFB0ACB0FFB0ACB0FF5A +:104A4000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF5A +:104A5000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FF4A +:104A6000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FF4A +:104A7000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FF1A +:104A8000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FF2A +:104A9000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FF0A +:104AA000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FFFA +:104AB000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FFEA +:104AC000A8ACA8FFA8ACA8FFB0ACB0FFB0ACB0FFDA +:104AD000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FFDA +:104AE000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FFBA +:104AF000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FFAA +:104B0000B0ACB0FFA8ACA8FFB0ACB0FFB0ACB0FF89 +:104B1000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FF99 +:104B2000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FF69 +:104B3000B0ACB0FFA8ACA8FFB0ACB0FFB0ACB0FF59 +:104B4000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF59 +:104B5000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FF59 +:104B6000B0ACB0FFB0ACB0FFA8ACA8FFA8ACA8FF39 +:104B7000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FF29 +:104B8000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FF29 +:104B9000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FF09 +:104BA000B0ACB0FFB0ACB0FFA8ACA8FFA8ACA8FFF9 +:104BB000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FFD9 +:104BC000B0ACB0FFA8ACA8FFB0ACB0FFB0ACB0FFC9 +:104BD000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FFD9 +:104BE000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FFC9 +:104BF000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FF99 +:104C0000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FFA8 +:104C1000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FF98 +:104C2000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FF68 +:104C3000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FF68 +:104C4000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF58 +:104C5000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FF48 +:104C6000B0ACB0FFB0ACB0FFA8ACA8FFA8ACA8FF38 +:104C7000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FF28 +:104C8000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FF18 +:104C9000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FF08 +:104CA000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FFF8 +:104CB000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FFE8 +:104CC000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FFD8 +:104CD000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FFD8 +:104CE000B0ACB0FFB0ACB0FFA8ACA8FFA8ACA8FFB8 +:104CF000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FFA8 +:104D0000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF97 +:104D1000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF87 +:104D2000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FF77 +:104D3000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FF67 +:104D4000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FF47 +:104D5000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FF47 +:104D6000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FF37 +:104D7000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FF27 +:104D8000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FF17 +:104D9000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FF17 +:104DA000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FFF7 +:104DB000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FFE7 +:104DC000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FFD7 +:104DD000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FFC7 +:104DE000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FFB7 +:104DF000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FF97 +:104E0000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FF96 +:104E1000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FF86 +:104E2000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FF76 +:104E3000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF66 +:104E4000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FF66 +:104E5000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FF46 +:104E6000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FF36 +:104E7000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FF26 +:104E8000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FF16 +:104E9000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FF06 +:104EA000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FFF6 +:104EB000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FFF6 +:104EC000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FFC6 +:104ED000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FFD6 +:104EE000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FFA6 +:104EF000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FFA6 +:104F0000B0ACB0FFA8ACA8FFB0ACB0FFB0ACB0FF85 +:104F1000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FF95 +:104F2000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FF75 +:104F3000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FF65 +:104F4000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FF55 +:104F5000A8ACA8F3B0ACB0FFA8ACA8FFB0ACB0FF51 +:104F6000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF35 +:104F7000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FF25 +:104F8000B0ACB0FFB0ACB0FFA8ACA8FFA8ACA8FF15 +:104F9000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8F70D +:104FA000A8ACA8D7B0ACB0FFA8ACA8FFA8ACA8FF2D +:104FB000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FFD5 +:104FC000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FFE5 +:104FD000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FFC5 +:104FE000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0DFD5 +:104FF000B0ACB0AAA8ACA8FFB0ACB0FFB0ACB0FFEA +:10500000A8ACA8FFA8ACA8FFB0ACB0FFA8ACA8FFA4 +:10501000B0ACB0FFB0ACB0FFA8ACA8FFB0ACB0FF74 +:10502000A8ACA8FFA8ACA8FFB0ACB0FFB0ACB0FF74 +:10503000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0AEB5 +:10504000A8ACA859B0ACB0FFA8ACA8FFB0ACB0FFFA +:10505000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FF44 +:10506000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF34 +:10507000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FF24 +:10508000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA85DB6 +:10509000A8ACA808B0ACB0E3A8ACA8FFA8ACA8FF27 +:1050A000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FFF4 +:1050B000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FFE4 +:1050C000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FFD4 +:1050D000A8ACA8FFB0ACB0FFA8ACA8E3A8ACA808E7 +:1050E00000000000B0ACB055B0ACB0FFA8ACA8FF59 +:1050F000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FFA4 +:10510000B0ACB0FFA8ACA8FFB0ACB0FFA8ACA8FF93 +:10511000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FF83 +:10512000B0ACB0FFB0ACB0FFA8ACA8550000000018 +:105130000000000000000000A8ACA88AB0ACB0FFDE +:10514000B0ACB0FFA8ACA8FFB0ACB0FFB0ACB0FF43 +:10515000A8ACA8FFB0ACB0FFB0ACB0FFA8ACA8FF43 +:10516000A8ACA8FFB0ACB0FFA8ACA8FFB0ACB0FF33 +:10517000A8ACA8FFB0ACB08A00000000000000009E +:105180000000000000000000A8ACA804A8ACA89291 +:10519000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FF03 +:1051A000A8ACA8FFA8ACA8FFB0ACB0FFB0ACB0FFF3 +:1051B000A8ACA8FFB0ACB0FFA8ACA8FFA8ACA8FFF3 +:1051C000B0ACB092A8ACA804000000000000000041 +:1051D00000000000000000000000000000000000CF +:1051E000B0ACB051A8ACA8DBB0ACB0FFA8ACA8FF85 +:1051F000B0ACB0FFA8ACA8FFA8ACA8FFB0ACB0FFA3 +:10520000B0ACB0FFA8ACA8FFB0ACB0DBB0ACB05550 +:10521000000000000000000000000000000000008E +:10522000000000000000000000000000000000007E +:1052300000000000B0ACB008A8ACA859B0ACB0AA4F +:10524000B0ACB0DFA8ACA8FBA8ACA8FBB0ACB0DF9A +:10525000A8ACA8AAA8ACA859B0ACB008000000003F +:10526000000000000000000000000000000000003E +:10527000000000000000000000000000000000002E +:1052800000000000F8FCF804F8FCF855F8FCF8A65B +:10529000F8FCF8DFF8FCF8F7F8FCF8F3F8FCF8D7BE +:1052A000F8FCF8A6F8FCF855F8FCF804000000003B +:1052B00000000000000000000000000000000000EE +:1052C00000000000000000000000000000000000DE +:1052D000F8FCF851F8FCF8DBF8FCF8FFF8FCF8FFF4 +:1052E000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF12 +:1052F000F8FCF8FFF8FCF8FFF8FCF8DBF8FCF851D4 +:10530000000000000000000000000000000000009D +:105310000000000000000000F8FCF804F8FCF88A27 +:10532000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFD1 +:10533000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFC1 +:10534000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFB1 +:10535000F8FCF88AF8FCF8040000000000000000E7 +:105360000000000000000000F8FCF88AF8FCF8FFDC +:10537000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF81 +:10538000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF71 +:10539000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF61 +:1053A000F8FCF8FFF8FCF88A00000000000000009C +:1053B00000000000F8FCF855F8FCF8FFF8FCF8FFD6 +:1053C000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF31 +:1053D000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF21 +:1053E000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF11 +:1053F000F8FCF8FFF8FCF8FFF8FCF8550000000096 +:10540000F8FCF804F8FCF8E3F8FCF8FFF8FCF8FF07 +:10541000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFE0 +:10542000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFD0 +:10543000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFC0 +:10544000F8FCF8FFF8FCF8FFF8FCF8E3F8FCF804C7 +:10545000F8FCF859F8FCF8FFF8FCF8FFF8FCF8FF46 +:10546000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF90 +:10547000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF80 +:10548000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF70 +:10549000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF85D02 +:1054A000F8FCF8AAF8FCF8FFF8FCF8FFF8FCF8FFA5 +:1054B000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF40 +:1054C000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF30 +:1054D000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF20 +:1054E000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8AA65 +:1054F000F8FCF8DFF8FCF8FFF8FCF8FFF8FCF8FF20 +:10550000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFEF +:10551000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFDF +:10552000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFCF +:10553000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8DFDF +:10554000F8FCF8F7F8FCF8FFF8FCF8FFF8FCF8FFB7 +:10555000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF9F +:10556000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF8F +:10557000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF7F +:10558000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FB73 +:10559000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF5F +:1055A000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF4F +:1055B000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF3F +:1055C000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF2F +:1055D000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF1F +:1055E000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF0F +:1055F000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFFF +:10560000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFEE +:10561000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFDE +:10562000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFCE +:10563000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFBE +:10564000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFAE +:10565000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF9E +:10566000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF8E +:10567000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF7E +:10568000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF6E +:10569000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF5E +:1056A000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF4E +:1056B000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF3E +:1056C000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF2E +:1056D000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF1E +:1056E000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF0E +:1056F000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFFE +:10570000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFED +:10571000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFDD +:10572000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFCD +:10573000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFBD +:10574000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFAD +:10575000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF9D +:10576000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF8D +:10577000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF7D +:10578000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF6D +:10579000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF5D +:1057A000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF4D +:1057B000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF3D +:1057C000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF2D +:1057D000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF1D +:1057E000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF0D +:1057F000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFFD +:10580000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFEC +:10581000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFDC +:10582000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFCC +:10583000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFBC +:10584000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFAC +:10585000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF9C +:10586000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF8C +:10587000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF7C +:10588000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF6C +:10589000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF5C +:1058A000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF4C +:1058B000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF3C +:1058C000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF2C +:1058D000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF1C +:1058E000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF0C +:1058F000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFFC +:10590000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFEB +:10591000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFDB +:10592000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFCB +:10593000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFBB +:10594000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFAB +:10595000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF9B +:10596000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF8B +:10597000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF7B +:10598000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF6B +:10599000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF5B +:1059A000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF4B +:1059B000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF3B +:1059C000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF2B +:1059D000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF1B +:1059E000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF0B +:1059F000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFFB +:105A0000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFEA +:105A1000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFDA +:105A2000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFCA +:105A3000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFBA +:105A4000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFAA +:105A5000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF9A +:105A6000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF8A +:105A7000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF7A +:105A8000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF6A +:105A9000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF5A +:105AA000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF4A +:105AB000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF3A +:105AC000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF2A +:105AD000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF1A +:105AE000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF0A +:105AF000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFFA +:105B0000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFE9 +:105B1000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFD9 +:105B2000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFC9 +:105B3000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFB9 +:105B4000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFA9 +:105B5000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF99 +:105B6000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF89 +:105B7000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF79 +:105B8000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF69 +:105B9000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF59 +:105BA000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF49 +:105BB000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF39 +:105BC000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF29 +:105BD000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF19 +:105BE000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF09 +:105BF000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFF9 +:105C0000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFE8 +:105C1000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFD8 +:105C2000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFC8 +:105C3000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFB8 +:105C4000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFA8 +:105C5000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF98 +:105C6000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF88 +:105C7000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF78 +:105C8000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF68 +:105C9000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF58 +:105CA000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF48 +:105CB000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF38 +:105CC000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF28 +:105CD000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF18 +:105CE000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF08 +:105CF000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFF8 +:105D0000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFE7 +:105D1000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFD7 +:105D2000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFC7 +:105D3000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFB7 +:105D4000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFA7 +:105D5000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF97 +:105D6000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF87 +:105D7000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF77 +:105D8000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF67 +:105D9000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF57 +:105DA000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF47 +:105DB000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF37 +:105DC000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF27 +:105DD000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF17 +:105DE000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF07 +:105DF000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFF7 +:105E0000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFE6 +:105E1000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFD6 +:105E2000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFC6 +:105E3000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFB6 +:105E4000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFA6 +:105E5000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF96 +:105E6000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF86 +:105E7000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF76 +:105E8000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF66 +:105E9000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF56 +:105EA000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF46 +:105EB000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF36 +:105EC000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF26 +:105ED000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF16 +:105EE000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF06 +:105EF000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFF6 +:105F0000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFE5 +:105F1000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFD5 +:105F2000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFC5 +:105F3000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFB5 +:105F4000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFA5 +:105F5000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF95 +:105F6000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF85 +:105F7000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF75 +:105F8000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF65 +:105F9000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF55 +:105FA000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF45 +:105FB000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF35 +:105FC000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF25 +:105FD000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF15 +:105FE000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF05 +:105FF000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFF5 +:10600000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFE4 +:10601000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFD4 +:10602000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFC4 +:10603000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFB4 +:10604000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFA4 +:10605000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF94 +:10606000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF84 +:10607000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF74 +:10608000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF64 +:10609000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF54 +:1060A000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF44 +:1060B000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF34 +:1060C000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF24 +:1060D000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF14 +:1060E000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF04 +:1060F000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFF4 +:10610000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFE3 +:10611000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFD3 +:10612000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFC3 +:10613000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFB3 +:10614000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFA3 +:10615000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF93 +:10616000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF83 +:10617000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF73 +:10618000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF63 +:10619000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF53 +:1061A000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF43 +:1061B000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF33 +:1061C000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF23 +:1061D000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF13 +:1061E000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF03 +:1061F000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFF3 +:10620000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFE2 +:10621000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFD2 +:10622000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFC2 +:10623000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFB2 +:10624000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFA2 +:10625000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF92 +:10626000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF82 +:10627000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF72 +:10628000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF62 +:10629000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF52 +:1062A000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF42 +:1062B000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF32 +:1062C000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF22 +:1062D000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF12 +:1062E000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF02 +:1062F000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFF2 +:10630000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFE1 +:10631000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFD1 +:10632000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFC1 +:10633000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFB1 +:10634000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFA1 +:10635000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF91 +:10636000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF81 +:10637000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF71 +:10638000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF61 +:10639000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF51 +:1063A000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF41 +:1063B000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF31 +:1063C000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF21 +:1063D000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF11 +:1063E000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF01 +:1063F000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFF1 +:10640000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFE0 +:10641000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFD0 +:10642000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFC0 +:10643000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFB0 +:10644000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFA0 +:10645000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF90 +:10646000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF80 +:10647000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF70 +:10648000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF60 +:10649000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF50 +:1064A000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF40 +:1064B000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF30 +:1064C000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF20 +:1064D000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF10 +:1064E000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF00 +:1064F000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFF0 +:10650000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFDF +:10651000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFCF +:10652000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFBF +:10653000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFAF +:10654000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF9F +:10655000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF8F +:10656000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF7F +:10657000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF6F +:10658000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF5F +:10659000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF4F +:1065A000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF3F +:1065B000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF2F +:1065C000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF1F +:1065D000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF0F +:1065E000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFFF +:1065F000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFEF +:10660000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFDE +:10661000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFCE +:10662000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFBE +:10663000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFAE +:10664000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF9E +:10665000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF8E +:10666000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF7E +:10667000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF6E +:10668000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF5E +:10669000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF4E +:1066A000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF3E +:1066B000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF2E +:1066C000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF1E +:1066D000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF0E +:1066E000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFFE +:1066F000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFEE +:10670000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFDD +:10671000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFCD +:10672000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFBD +:10673000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFAD +:10674000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF9D +:10675000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF8D +:10676000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF7D +:10677000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF6D +:10678000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF5D +:10679000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF4D +:1067A000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF3D +:1067B000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF2D +:1067C000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF1D +:1067D000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF0D +:1067E000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFFD +:1067F000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFED +:10680000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFDC +:10681000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFCC +:10682000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFBC +:10683000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFAC +:10684000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF9C +:10685000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF8C +:10686000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF7C +:10687000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF6C +:10688000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF5C +:10689000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF4C +:1068A000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF3C +:1068B000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF2C +:1068C000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF1C +:1068D000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF0C +:1068E000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFFC +:1068F000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFEC +:10690000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFDB +:10691000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFCB +:10692000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFBB +:10693000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFAB +:10694000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF9B +:10695000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF8B +:10696000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF7B +:10697000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF6B +:10698000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF5B +:10699000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF4B +:1069A000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF3B +:1069B000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF2B +:1069C000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF1B +:1069D000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF0B +:1069E000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFFB +:1069F000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFEB +:106A0000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFDA +:106A1000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFCA +:106A2000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFBA +:106A3000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFAA +:106A4000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF9A +:106A5000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF8A +:106A6000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF7A +:106A7000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF6A +:106A8000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF5A +:106A9000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF4A +:106AA000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF3A +:106AB000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF2A +:106AC000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF1A +:106AD000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF0A +:106AE000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFFA +:106AF000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFEA +:106B0000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFD9 +:106B1000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFC9 +:106B2000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFB9 +:106B3000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFA9 +:106B4000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF99 +:106B5000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF89 +:106B6000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF79 +:106B7000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF69 +:106B8000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF59 +:106B9000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF49 +:106BA000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF39 +:106BB000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF29 +:106BC000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF19 +:106BD000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF09 +:106BE000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFF9 +:106BF000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFE9 +:106C0000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFD8 +:106C1000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFC8 +:106C2000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFB8 +:106C3000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFA8 +:106C4000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF98 +:106C5000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF88 +:106C6000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF78 +:106C7000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF68 +:106C8000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF58 +:106C9000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF48 +:106CA000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF38 +:106CB000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF28 +:106CC000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF18 +:106CD000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF08 +:106CE000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFF8 +:106CF000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFE8 +:106D0000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFD7 +:106D1000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFC7 +:106D2000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFB7 +:106D3000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFA7 +:106D4000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF97 +:106D5000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF87 +:106D6000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF77 +:106D7000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF67 +:106D8000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF57 +:106D9000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF47 +:106DA000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF37 +:106DB000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF27 +:106DC000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF17 +:106DD000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF07 +:106DE000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFF7 +:106DF000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFE7 +:106E0000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFD6 +:106E1000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFC6 +:106E2000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFB6 +:106E3000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFA6 +:106E4000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF96 +:106E5000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF86 +:106E6000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF76 +:106E7000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF66 +:106E8000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF56 +:106E9000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF46 +:106EA000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF36 +:106EB000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF26 +:106EC000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF16 +:106ED000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF06 +:106EE000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFF6 +:106EF000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFE6 +:106F0000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFD5 +:106F1000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFC5 +:106F2000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFB5 +:106F3000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFA5 +:106F4000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF95 +:106F5000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF85 +:106F6000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF75 +:106F7000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF65 +:106F8000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF55 +:106F9000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF45 +:106FA000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF35 +:106FB000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF25 +:106FC000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF15 +:106FD000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF05 +:106FE000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFF5 +:106FF000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFE5 +:10700000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFD4 +:10701000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFC4 +:10702000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFB4 +:10703000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFA4 +:10704000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF94 +:10705000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF84 +:10706000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF74 +:10707000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF64 +:10708000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF54 +:10709000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF44 +:1070A000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF34 +:1070B000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF24 +:1070C000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF14 +:1070D000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF04 +:1070E000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFF4 +:1070F000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFE4 +:10710000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFD3 +:10711000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFC3 +:10712000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFB3 +:10713000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFA3 +:10714000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF93 +:10715000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF83 +:10716000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF73 +:10717000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF63 +:10718000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF53 +:10719000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF43 +:1071A000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF33 +:1071B000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF23 +:1071C000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF13 +:1071D000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF03 +:1071E000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFF3 +:1071F000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFE3 +:10720000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFD2 +:10721000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFC2 +:10722000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFB2 +:10723000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFA2 +:10724000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF92 +:10725000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF82 +:10726000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF72 +:10727000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF62 +:10728000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF52 +:10729000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF42 +:1072A000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF32 +:1072B000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF22 +:1072C000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF12 +:1072D000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF02 +:1072E000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFF2 +:1072F000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFE2 +:10730000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFD1 +:10731000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFC1 +:10732000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFB1 +:10733000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFA1 +:10734000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF91 +:10735000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF81 +:10736000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF71 +:10737000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF61 +:10738000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF51 +:10739000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF41 +:1073A000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF31 +:1073B000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF21 +:1073C000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF11 +:1073D000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF01 +:1073E000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFF1 +:1073F000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFE1 +:10740000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFD0 +:10741000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFC0 +:10742000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFB0 +:10743000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFA0 +:10744000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF90 +:10745000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF80 +:10746000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF70 +:10747000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF60 +:10748000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF50 +:10749000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF40 +:1074A000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF30 +:1074B000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF20 +:1074C000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF10 +:1074D000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF00 +:1074E000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFF0 +:1074F000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFE0 +:10750000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFCF +:10751000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFBF +:10752000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFAF +:10753000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF9F +:10754000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF8F +:10755000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF7F +:10756000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF6F +:10757000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF5F +:10758000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF4F +:10759000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF3F +:1075A000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF2F +:1075B000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF1F +:1075C000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF0F +:1075D000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFFF +:1075E000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFEF +:1075F000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFDF +:10760000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFCE +:10761000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFBE +:10762000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFAE +:10763000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF9E +:10764000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF8E +:10765000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF7E +:10766000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF6E +:10767000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF5E +:10768000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF4E +:10769000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF3E +:1076A000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF2E +:1076B000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF1E +:1076C000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF0E +:1076D000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFFE +:1076E000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFEE +:1076F000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFDE +:10770000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFCD +:10771000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFBD +:10772000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFAD +:10773000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF9D +:10774000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF8D +:10775000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF7D +:10776000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF6D +:10777000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF5D +:10778000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF4D +:10779000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF3D +:1077A000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF2D +:1077B000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF1D +:1077C000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF0D +:1077D000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFFD +:1077E000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFED +:1077F000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFDD +:10780000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFCC +:10781000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFBC +:10782000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFAC +:10783000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF9C +:10784000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF8C +:10785000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF7C +:10786000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF6C +:10787000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF5C +:10788000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF4C +:10789000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF3C +:1078A000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF2C +:1078B000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF1C +:1078C000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF0C +:1078D000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFFC +:1078E000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFEC +:1078F000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFDC +:10790000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFCB +:10791000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFBB +:10792000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFAB +:10793000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF9B +:10794000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF8B +:10795000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF7B +:10796000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF6B +:10797000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF5B +:10798000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF4B +:10799000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF3B +:1079A000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF2B +:1079B000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF1B +:1079C000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF0B +:1079D000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFFB +:1079E000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFEB +:1079F000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFDB +:107A0000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFCA +:107A1000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFBA +:107A2000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFAA +:107A3000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF9A +:107A4000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF8A +:107A5000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF7A +:107A6000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF6A +:107A7000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF5A +:107A8000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF4A +:107A9000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF3A +:107AA000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF2A +:107AB000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF1A +:107AC000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF0A +:107AD000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFFA +:107AE000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFEA +:107AF000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFDA +:107B0000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFC9 +:107B1000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFB9 +:107B2000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFA9 +:107B3000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF99 +:107B4000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF89 +:107B5000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF79 +:107B6000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF69 +:107B7000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF59 +:107B8000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF49 +:107B9000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF39 +:107BA000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF29 +:107BB000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF19 +:107BC000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF09 +:107BD000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFF9 +:107BE000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFE9 +:107BF000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFD9 +:107C0000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFC8 +:107C1000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFB8 +:107C2000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFA8 +:107C3000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF98 +:107C4000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF88 +:107C5000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF78 +:107C6000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF68 +:107C7000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF58 +:107C8000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF48 +:107C9000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF38 +:107CA000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF28 +:107CB000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF18 +:107CC000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF08 +:107CD000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFF8 +:107CE000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFE8 +:107CF000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFD8 +:107D0000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFC7 +:107D1000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFB7 +:107D2000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFA7 +:107D3000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF97 +:107D4000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF87 +:107D5000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF77 +:107D6000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF67 +:107D7000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF57 +:107D8000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF47 +:107D9000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF37 +:107DA000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF27 +:107DB000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF17 +:107DC000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF07 +:107DD000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFF7 +:107DE000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFE7 +:107DF000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFD7 +:107E0000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFC6 +:107E1000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFB6 +:107E2000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFA6 +:107E3000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF96 +:107E4000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF86 +:107E5000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF76 +:107E6000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF66 +:107E7000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF56 +:107E8000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF46 +:107E9000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF36 +:107EA000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF26 +:107EB000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF16 +:107EC000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF06 +:107ED000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFF6 +:107EE000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFE6 +:107EF000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFD6 +:107F0000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFC5 +:107F1000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFB5 +:107F2000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFA5 +:107F3000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF95 +:107F4000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF85 +:107F5000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF75 +:107F6000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF65 +:107F7000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF55 +:107F8000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF45 +:107F9000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF35 +:107FA000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF25 +:107FB000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF15 +:107FC000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF05 +:107FD000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFF5 +:107FE000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFE5 +:107FF000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFD5 +:10800000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFC4 +:10801000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFB4 +:10802000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFA4 +:10803000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF94 +:10804000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF84 +:10805000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF74 +:10806000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF64 +:10807000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF54 +:10808000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF44 +:10809000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF34 +:1080A000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF24 +:1080B000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF14 +:1080C000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF04 +:1080D000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFF4 +:1080E000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFE4 +:1080F000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFD4 +:10810000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFC3 +:10811000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFB3 +:10812000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFA3 +:10813000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF93 +:10814000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF83 +:10815000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF73 +:10816000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF63 +:10817000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF53 +:10818000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF43 +:10819000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF33 +:1081A000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF23 +:1081B000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF13 +:1081C000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF03 +:1081D000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFF3 +:1081E000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFE3 +:1081F000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFD3 +:10820000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFC2 +:10821000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFB2 +:10822000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFA2 +:10823000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF92 +:10824000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF82 +:10825000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF72 +:10826000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF62 +:10827000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF52 +:10828000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF42 +:10829000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF32 +:1082A000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF22 +:1082B000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF12 +:1082C000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF02 +:1082D000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFF2 +:1082E000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFE2 +:1082F000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFD2 +:10830000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFC1 +:10831000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFB1 +:10832000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFA1 +:10833000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF91 +:10834000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF81 +:10835000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF71 +:10836000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF61 +:10837000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF51 +:10838000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF41 +:10839000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF31 +:1083A000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF21 +:1083B000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF11 +:1083C000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF01 +:1083D000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFF1 +:1083E000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFE1 +:1083F000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFD1 +:10840000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFC0 +:10841000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFB0 +:10842000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFA0 +:10843000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF90 +:10844000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF80 +:10845000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF70 +:10846000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF60 +:10847000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF50 +:10848000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF40 +:10849000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF30 +:1084A000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF20 +:1084B000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF10 +:1084C000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF00 +:1084D000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFF0 +:1084E000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFE0 +:1084F000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFD0 +:10850000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFBF +:10851000F8FCF8F3F8FCF8FFF8FCF8FFF8FCF8FFBB +:10852000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF9F +:10853000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF8F +:10854000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF7F +:10855000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8F777 +:10856000F8FCF8D7F8FCF8FFF8FCF8FFF8FCF8FF87 +:10857000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF4F +:10858000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF3F +:10859000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF2F +:1085A000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8DF3F +:1085B000F8FCF8AAF8FCF8FFF8FCF8FFF8FCF8FF64 +:1085C000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFFF +:1085D000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFEF +:1085E000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFDF +:1085F000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8AE20 +:10860000F8FCF859F8FCF8FFF8FCF8FFF8FCF8FF64 +:10861000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFAE +:10862000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF9E +:10863000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF8E +:10864000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF85D20 +:10865000F8FCF808F8FCF8E3F8FCF8FFF8FCF8FF81 +:10866000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF5E +:10867000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF4E +:10868000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF3E +:10869000F8FCF8FFF8FCF8FFF8FCF8E3F8FCF80841 +:1086A00000000000F8FCF855F8FCF8FFF8FCF8FFB3 +:1086B000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF0E +:1086C000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFFE +:1086D000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFEE +:1086E000F8FCF8FFF8FCF8FFF8FCF8550000000073 +:1086F0000000000000000000F8FCF88AF8FCF8FF19 +:10870000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFBD +:10871000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FFAD +:10872000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF9D +:10873000F8FCF8FFF8FCF88A0000000000000000D8 +:108740000000000000000000F8FCF804F8FCF892BB +:10875000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF6D +:10876000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF5D +:10877000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF4D +:10878000F8FCF892F8FCF80400000000000000007B +:1087900000000000000000000000000000000000D9 +:1087A000F8FCF851F8FCF8DBF8FCF8FFF8FCF8FFEF +:1087B000F8FCF8FFF8FCF8FFF8FCF8FFF8FCF8FF0D +:1087C000F8FCF8FFF8FCF8FFF8FCF8DBF8FCF855CB +:1087D0000000000000000000000000000000000099 +:1087E0000000000000000000000000000000000089 +:1087F00000000000F8FCF808F8FCF859F8FCF8AAAA +:10880000F8FCF8DFF8FCF8FBF8FCF8FBF8FCF8DF04 +:10881000F8FCF8AAF8FCF859F8FCF8080000000089 +:108820000000000000000000000000000000000048 +:1088300040DC08D0024BC30086A500A5A500A5B367 +:108840000096D0025B40DD08200C00D70C00200C05 +:1088500000200C00200C00200C00200C00C8CE04CE +:10886000B0DE0850104C00005A00102D00B0060079 +:108870007A00B10700F3DD9DA0ED1A50006B0010E7 +:108880003B00F70800005A00008642105BB2DE0889 +:1088900000700C00C40C103C0CB0240C77200CD9D8 +:1088A000DDBF00200C00200CC0EE8EC00300C00312 +:1088B00000C0DE0910107A00009641106BB1DE088E +:1088C00000D81E900900D10000D3DB1AB50198B47E +:1088D00000B3D1038740DC1AE3EEBE00009600002F +:1088E0002D00600900D00200A600003D00500A00E3 +:1088F00060CC1AD10078E20268709E0AC1535D957F +:1089000000B5D3018770CC1A60DD08C3014B960017 +:1089100095D401A670CD9B00006900401DA0BE0249 +:10892000D2CE0321500C00300C00C105004D0000D8 +:108930000C00000200000F0000F6030000AB08006E +:10894000102D0D0060093C00B0048800F1DDDD0051 +:108950009600D0034B008008DFDD040E500C0E6043 +:1089600009DFFD060E104D0E00690E103DDFDD061D +:1089700010E9BE04B0084007D300000095000000D5 +:1089800096000000D3000000C008300610DABE04D4 +:10899000DFCE05000E306C000E00D3000E00E001AB +:1089A0000E00E0010E00D3000E305C00DFCE0500AB +:1089B000EFEE0B0E00000E0000EFEE0A0E00000EB0 +:1089C00000000E0000EFEE0BEFEE090E00000E00AF +:1089D00000EFEE010E00000E00000E00000E000081 +:1089E00010D9CD07B019200AD3000000960000006E +:1089F000A600EC1ED300001EB019101E10D8CD0723 +:108A00000E00860E00860E0086EFEE8E0E00860E9D +:108A100000860E00860E0086D47E6009600960091B +:108A2000600960096009D47EB0AD00A500A500A56D +:108A300000A500A50088EA1B0F104C0FB0060F8997 +:108A4000007F0A00BF2D000FC7000FA0090F106C98 +:108A50000E00000E00000E00000E00000E00000EC2 +:108A600000000E0000EFEE088F00F207DE00C807DE +:108A70008D068C072D6C87070DDA81070D83800723 +:108A80000D0080070D008007BF0086CD03865D0ABC +:108A9000860D2C860DA5860DD0880D608E0D008D5F +:108AA00010EA9E01B007900AC300001E9600004B1A +:108AB0009600004BC300001EC007900A10EA9E01FA +:108AC000DFAD010E90080E500A0EA107DF8D000EDB +:108AD00000000E00000E000010EA9E01B007900A90 +:108AE000C300001E9600004B9600004BC300001E02 +:108AF000C007900A10EAAF01000088000000C26EB3 +:108B0000DFBD010E80090E500B0EA006DF9E000E89 +:108B1000D4010E700B0E009A50ED9D00D202710030 +:108B2000C4000000C08C15000084DC000000C003FD +:108B30007401D201A2DE4C00EEFEEE0200860000BF +:108B4000008600000086000000860000008600000D +:108B50000086000000860000D2008007D200800757 +:108B6000D2008007D2008007D2008007D100900594 +:108B7000C005D20220DC5D005B007008A600C003C7 +:108B8000E100D100B004860060093B00101E0D001A +:108B900000AB080000F6030086008A0059C300CC31 +:108BA000001DE010CA110DB0549754097087538707 +:108BB0000630BB20BA0200BD00DC00008B00AA001A +:108BC000C500C003A0069700203D1D0000E705007A +:108BD00000E70500203D1D00B0059800A500D0036A +:108BE0006A00C3D2014B90570A10DD0200980000C2 +:108BF0008600008600008600E3EEFE030000B5005C +:108C000000202D0000C0050000980000400C00006E +:108C1000D1020000F6EEEE0493ECDE2900F7ADDAA7 +:108C2000EF02330000F90A000000F30C000000F529 +:108C30000A000010FD030000D56F0000B0CF030054 +:108C400000E00C000000E00C000000400300000009 +:108C50000000000000F00E000000F00E0000000018 +:108C600000105377570200000083FCFFFFFFDF175F +:108C70000000FDFFFFFFFFFFDF0200FDFFFFEFFF32 +:108C8000FFFF2E00FD9E150041FAFFBF006B0000A4 +:108C9000000060FFFF02000000000000FBFF070073 +:108CA0000000000000F7FF08000000000000F6FFD1 +:108CB00009000000000000F7FF07000000000000AE +:108CC000FBFF04000000000030FFEF000000000088 +:108CD00000C1FF7F000000000010FCFF0C0000003E +:108CE0000000D3FFDF020000000081FFFF2C000026 +:108CF000000060FEFF9F0000000000D0FFDF0400C6 +:108D000000000000D0FF0B000000000000D0FF09B1 +:108D1000000000000000D0FF09000000000000D0AB +:108D2000FF09000000000000D0FF09000000000063 +:108D30000000000000000000000000000000000033 +:108D4000000000000000000000000000404403009C +:108D50000000000000F1FF0E000000000000F1FF25 +:108D60000E000000000000F1FF0E000000000000F7 +:108D7000F1FF0E00000000000000000030000608B7 +:108D80000800060000001800000031000508080176 +:108D9000060000003000000032000608080006004F +:108DA000000048000000330006080800060000002C +:108DB000600000003400060808000600000078008B +:108DC00000003500060808000600000090000000C2 +:108DD00036000608080006000000A8000000370062 +:108DE0000608080006000000C00000003800060861 +:108DF000080006000000D80000003900060808003E +:108E000006000000F00000003F0005080800050013 +:108E100000000801000041000708080007000000EA +:108E20002801000042000608080107000000400178 +:108E30000000430007080800070000006001000070 +:108E400044000708080108000000800100004500F8 +:108E5000050808010600000098010000460005080A +:108E6000080106000000B0010000470008080800E3 +:108E700008000000D00100004800060808010800B2 +:108E80000000E80100004900040808000400000098 +:108E9000F80100004A00040808000500000008026C +:108EA00000004B0006080801070000002002000037 +:108EB0004C000508080106000000380200004D00C3 +:108EC0000708080108000000580200004E000608CC +:108ED000080107000000700200004F0008080800A9 +:108EE000080000009002000050000508080106007C +:108EF0000000A80200005100080A08000800000055 +:108F0000D002000052000608080107000000E80235 +:108F100000005300070808000700000008030000D5 +:108F20005400070808000600000028030000550050 +:108F30000708080007000000480300005600070863 +:108F40000800070000006803000057000A08080036 +:108F50000A000000900300005800070808000700FE +:108F60000000B003000059000608080006000000D9 +:108F7000C80300005A0007080800070000000000AE +:108F8000000000003F00090E0E010B000000000071 +:108F9000000000003F00111F1F031600000000002A +:108FA00000000000000000000200000002010201B9 +:048FB000AC8F0090F2 +:04000005080024B912 +:00000001FF diff --git a/STM32_Disco746G/STM32CubeIDE/Debug/LightControlConvi_Disco746G.list b/STM32_Disco746G/STM32CubeIDE/Debug/LightControlConvi_Disco746G.list new file mode 100644 index 0000000000000000000000000000000000000000..9d6a4b8b44d3f8bc7a8e9aecd3af989b02f40c29 --- /dev/null +++ b/STM32_Disco746G/STM32CubeIDE/Debug/LightControlConvi_Disco746G.list @@ -0,0 +1,114982 @@ + +LightControlConvi_Disco746G.elf: file format elf32-littlearm + +Sections: +Idx Name Size VMA LMA File off Algn + 0 .isr_vector 000001c8 08000000 08000000 00010000 2**0 + CONTENTS, ALLOC, LOAD, READONLY, DATA + 1 .text 00035658 080001d0 080001d0 000101d0 2**4 + CONTENTS, ALLOC, LOAD, READONLY, CODE + 2 .rodata 00007334 08035828 08035828 00045828 2**3 + CONTENTS, ALLOC, LOAD, READONLY, DATA + 3 FontSearchFlashSection 00000018 0803cb5c 0803cb5c 0004cb5c 2**2 + CONTENTS, ALLOC, LOAD, READONLY, DATA + 4 .ARM.extab 00000000 0803cb74 0803cb74 00068fb4 2**0 + CONTENTS + 5 .ARM 00000008 0803cb74 0803cb74 0004cb74 2**2 + CONTENTS, ALLOC, LOAD, READONLY, DATA + 6 .preinit_array 00000000 0803cb7c 0803cb7c 00068fb4 2**0 + CONTENTS, ALLOC, LOAD, DATA + 7 .init_array 0000001c 0803cb7c 0803cb7c 0004cb7c 2**2 + CONTENTS, ALLOC, LOAD, DATA + 8 .fini_array 00000008 0803cb98 0803cb98 0004cb98 2**2 + CONTENTS, ALLOC, LOAD, DATA + 9 .data 00000140 20000000 0803cba0 00050000 2**2 + CONTENTS, ALLOC, LOAD, DATA + 10 .RxDecripSection 000000a0 20000140 0803cce0 00050140 2**2 + CONTENTS, ALLOC, LOAD, DATA + 11 .TxDecripSection 000000a0 200001e0 0803cd80 000501e0 2**2 + CONTENTS, ALLOC, LOAD, DATA + 12 .bss 0001f0e0 20000280 0803ce20 00050280 2**2 + ALLOC + 13 ._user_heap_stack 00001400 2001f360 0803ce20 0005f360 2**0 + ALLOC + 14 .ARM.attributes 00000030 00000000 00000000 00068fb4 2**0 + CONTENTS, READONLY + 15 BufferSection 0013ec00 c0000000 c0000000 00070000 2**2 + ALLOC + 16 ExtFlashSection 00008830 90000000 90000000 00060000 2**2 + CONTENTS, ALLOC, LOAD, READONLY, DATA + 17 FontFlashSection 00000770 90008830 90008830 00068830 2**2 + CONTENTS, ALLOC, LOAD, READONLY, DATA + 18 TextFlashSection 00000014 90008fa0 90008fa0 00068fa0 2**2 + CONTENTS, ALLOC, LOAD, READONLY, DATA + 19 .comment 000000c2 00000000 00000000 00068fe4 2**0 + CONTENTS, READONLY + 20 .debug_info 000f7c45 00000000 00000000 000690a6 2**0 + CONTENTS, READONLY, DEBUGGING, OCTETS + 21 .debug_abbrev 0001ed60 00000000 00000000 00160ceb 2**0 + CONTENTS, READONLY, DEBUGGING, OCTETS + 22 .debug_aranges 000041c0 00000000 00000000 0017fa50 2**3 + CONTENTS, READONLY, DEBUGGING, OCTETS + 23 .debug_rnglists 00004c4f 00000000 00000000 00183c10 2**0 + CONTENTS, READONLY, DEBUGGING, OCTETS + 24 .debug_macro 00046f9e 00000000 00000000 0018885f 2**0 + CONTENTS, READONLY, DEBUGGING, OCTETS + 25 .debug_line 0009d9d1 00000000 00000000 001cf7fd 2**0 + CONTENTS, READONLY, DEBUGGING, OCTETS + 26 .debug_str 00144a9a 00000000 00000000 0026d1ce 2**0 + CONTENTS, READONLY, DEBUGGING, OCTETS + 27 .debug_frame 0000ce84 00000000 00000000 003b1c68 2**2 + CONTENTS, READONLY, DEBUGGING, OCTETS + 28 .debug_loclists 0004049c 00000000 00000000 003beaec 2**0 + CONTENTS, READONLY, DEBUGGING, OCTETS + 29 .debug_line_str 0000009b 00000000 00000000 003fef88 2**0 + CONTENTS, READONLY, DEBUGGING, OCTETS + +Disassembly of section .text: + +080001d0 <__do_global_dtors_aux>: + 80001d0: b510 push {r4, lr} + 80001d2: 4c05 ldr r4, [pc, #20] ; (80001e8 <__do_global_dtors_aux+0x18>) + 80001d4: 7823 ldrb r3, [r4, #0] + 80001d6: b933 cbnz r3, 80001e6 <__do_global_dtors_aux+0x16> + 80001d8: 4b04 ldr r3, [pc, #16] ; (80001ec <__do_global_dtors_aux+0x1c>) + 80001da: b113 cbz r3, 80001e2 <__do_global_dtors_aux+0x12> + 80001dc: 4804 ldr r0, [pc, #16] ; (80001f0 <__do_global_dtors_aux+0x20>) + 80001de: f3af 8000 nop.w + 80001e2: 2301 movs r3, #1 + 80001e4: 7023 strb r3, [r4, #0] + 80001e6: bd10 pop {r4, pc} + 80001e8: 20000280 .word 0x20000280 + 80001ec: 00000000 .word 0x00000000 + 80001f0: 08035810 .word 0x08035810 + +080001f4 : + 80001f4: b508 push {r3, lr} + 80001f6: 4b03 ldr r3, [pc, #12] ; (8000204 ) + 80001f8: b11b cbz r3, 8000202 + 80001fa: 4903 ldr r1, [pc, #12] ; (8000208 ) + 80001fc: 4803 ldr r0, [pc, #12] ; (800020c ) + 80001fe: f3af 8000 nop.w + 8000202: bd08 pop {r3, pc} + 8000204: 00000000 .word 0x00000000 + 8000208: 20000284 .word 0x20000284 + 800020c: 08035810 .word 0x08035810 + +08000210 : + 8000210: f001 01ff and.w r1, r1, #255 ; 0xff + 8000214: 2a10 cmp r2, #16 + 8000216: db2b blt.n 8000270 + 8000218: f010 0f07 tst.w r0, #7 + 800021c: d008 beq.n 8000230 + 800021e: f810 3b01 ldrb.w r3, [r0], #1 + 8000222: 3a01 subs r2, #1 + 8000224: 428b cmp r3, r1 + 8000226: d02d beq.n 8000284 + 8000228: f010 0f07 tst.w r0, #7 + 800022c: b342 cbz r2, 8000280 + 800022e: d1f6 bne.n 800021e + 8000230: b4f0 push {r4, r5, r6, r7} + 8000232: ea41 2101 orr.w r1, r1, r1, lsl #8 + 8000236: ea41 4101 orr.w r1, r1, r1, lsl #16 + 800023a: f022 0407 bic.w r4, r2, #7 + 800023e: f07f 0700 mvns.w r7, #0 + 8000242: 2300 movs r3, #0 + 8000244: e8f0 5602 ldrd r5, r6, [r0], #8 + 8000248: 3c08 subs r4, #8 + 800024a: ea85 0501 eor.w r5, r5, r1 + 800024e: ea86 0601 eor.w r6, r6, r1 + 8000252: fa85 f547 uadd8 r5, r5, r7 + 8000256: faa3 f587 sel r5, r3, r7 + 800025a: fa86 f647 uadd8 r6, r6, r7 + 800025e: faa5 f687 sel r6, r5, r7 + 8000262: b98e cbnz r6, 8000288 + 8000264: d1ee bne.n 8000244 + 8000266: bcf0 pop {r4, r5, r6, r7} + 8000268: f001 01ff and.w r1, r1, #255 ; 0xff + 800026c: f002 0207 and.w r2, r2, #7 + 8000270: b132 cbz r2, 8000280 + 8000272: f810 3b01 ldrb.w r3, [r0], #1 + 8000276: 3a01 subs r2, #1 + 8000278: ea83 0301 eor.w r3, r3, r1 + 800027c: b113 cbz r3, 8000284 + 800027e: d1f8 bne.n 8000272 + 8000280: 2000 movs r0, #0 + 8000282: 4770 bx lr + 8000284: 3801 subs r0, #1 + 8000286: 4770 bx lr + 8000288: 2d00 cmp r5, #0 + 800028a: bf06 itte eq + 800028c: 4635 moveq r5, r6 + 800028e: 3803 subeq r0, #3 + 8000290: 3807 subne r0, #7 + 8000292: f015 0f01 tst.w r5, #1 + 8000296: d107 bne.n 80002a8 + 8000298: 3001 adds r0, #1 + 800029a: f415 7f80 tst.w r5, #256 ; 0x100 + 800029e: bf02 ittt eq + 80002a0: 3001 addeq r0, #1 + 80002a2: f415 3fc0 tsteq.w r5, #98304 ; 0x18000 + 80002a6: 3001 addeq r0, #1 + 80002a8: bcf0 pop {r4, r5, r6, r7} + 80002aa: 3801 subs r0, #1 + 80002ac: 4770 bx lr + 80002ae: bf00 nop + +080002b0 <__aeabi_drsub>: + 80002b0: f081 4100 eor.w r1, r1, #2147483648 ; 0x80000000 + 80002b4: e002 b.n 80002bc <__adddf3> + 80002b6: bf00 nop + +080002b8 <__aeabi_dsub>: + 80002b8: f083 4300 eor.w r3, r3, #2147483648 ; 0x80000000 + +080002bc <__adddf3>: + 80002bc: b530 push {r4, r5, lr} + 80002be: ea4f 0441 mov.w r4, r1, lsl #1 + 80002c2: ea4f 0543 mov.w r5, r3, lsl #1 + 80002c6: ea94 0f05 teq r4, r5 + 80002ca: bf08 it eq + 80002cc: ea90 0f02 teqeq r0, r2 + 80002d0: bf1f itttt ne + 80002d2: ea54 0c00 orrsne.w ip, r4, r0 + 80002d6: ea55 0c02 orrsne.w ip, r5, r2 + 80002da: ea7f 5c64 mvnsne.w ip, r4, asr #21 + 80002de: ea7f 5c65 mvnsne.w ip, r5, asr #21 + 80002e2: f000 80e2 beq.w 80004aa <__adddf3+0x1ee> + 80002e6: ea4f 5454 mov.w r4, r4, lsr #21 + 80002ea: ebd4 5555 rsbs r5, r4, r5, lsr #21 + 80002ee: bfb8 it lt + 80002f0: 426d neglt r5, r5 + 80002f2: dd0c ble.n 800030e <__adddf3+0x52> + 80002f4: 442c add r4, r5 + 80002f6: ea80 0202 eor.w r2, r0, r2 + 80002fa: ea81 0303 eor.w r3, r1, r3 + 80002fe: ea82 0000 eor.w r0, r2, r0 + 8000302: ea83 0101 eor.w r1, r3, r1 + 8000306: ea80 0202 eor.w r2, r0, r2 + 800030a: ea81 0303 eor.w r3, r1, r3 + 800030e: 2d36 cmp r5, #54 ; 0x36 + 8000310: bf88 it hi + 8000312: bd30 pophi {r4, r5, pc} + 8000314: f011 4f00 tst.w r1, #2147483648 ; 0x80000000 + 8000318: ea4f 3101 mov.w r1, r1, lsl #12 + 800031c: f44f 1c80 mov.w ip, #1048576 ; 0x100000 + 8000320: ea4c 3111 orr.w r1, ip, r1, lsr #12 + 8000324: d002 beq.n 800032c <__adddf3+0x70> + 8000326: 4240 negs r0, r0 + 8000328: eb61 0141 sbc.w r1, r1, r1, lsl #1 + 800032c: f013 4f00 tst.w r3, #2147483648 ; 0x80000000 + 8000330: ea4f 3303 mov.w r3, r3, lsl #12 + 8000334: ea4c 3313 orr.w r3, ip, r3, lsr #12 + 8000338: d002 beq.n 8000340 <__adddf3+0x84> + 800033a: 4252 negs r2, r2 + 800033c: eb63 0343 sbc.w r3, r3, r3, lsl #1 + 8000340: ea94 0f05 teq r4, r5 + 8000344: f000 80a7 beq.w 8000496 <__adddf3+0x1da> + 8000348: f1a4 0401 sub.w r4, r4, #1 + 800034c: f1d5 0e20 rsbs lr, r5, #32 + 8000350: db0d blt.n 800036e <__adddf3+0xb2> + 8000352: fa02 fc0e lsl.w ip, r2, lr + 8000356: fa22 f205 lsr.w r2, r2, r5 + 800035a: 1880 adds r0, r0, r2 + 800035c: f141 0100 adc.w r1, r1, #0 + 8000360: fa03 f20e lsl.w r2, r3, lr + 8000364: 1880 adds r0, r0, r2 + 8000366: fa43 f305 asr.w r3, r3, r5 + 800036a: 4159 adcs r1, r3 + 800036c: e00e b.n 800038c <__adddf3+0xd0> + 800036e: f1a5 0520 sub.w r5, r5, #32 + 8000372: f10e 0e20 add.w lr, lr, #32 + 8000376: 2a01 cmp r2, #1 + 8000378: fa03 fc0e lsl.w ip, r3, lr + 800037c: bf28 it cs + 800037e: f04c 0c02 orrcs.w ip, ip, #2 + 8000382: fa43 f305 asr.w r3, r3, r5 + 8000386: 18c0 adds r0, r0, r3 + 8000388: eb51 71e3 adcs.w r1, r1, r3, asr #31 + 800038c: f001 4500 and.w r5, r1, #2147483648 ; 0x80000000 + 8000390: d507 bpl.n 80003a2 <__adddf3+0xe6> + 8000392: f04f 0e00 mov.w lr, #0 + 8000396: f1dc 0c00 rsbs ip, ip, #0 + 800039a: eb7e 0000 sbcs.w r0, lr, r0 + 800039e: eb6e 0101 sbc.w r1, lr, r1 + 80003a2: f5b1 1f80 cmp.w r1, #1048576 ; 0x100000 + 80003a6: d31b bcc.n 80003e0 <__adddf3+0x124> + 80003a8: f5b1 1f00 cmp.w r1, #2097152 ; 0x200000 + 80003ac: d30c bcc.n 80003c8 <__adddf3+0x10c> + 80003ae: 0849 lsrs r1, r1, #1 + 80003b0: ea5f 0030 movs.w r0, r0, rrx + 80003b4: ea4f 0c3c mov.w ip, ip, rrx + 80003b8: f104 0401 add.w r4, r4, #1 + 80003bc: ea4f 5244 mov.w r2, r4, lsl #21 + 80003c0: f512 0f80 cmn.w r2, #4194304 ; 0x400000 + 80003c4: f080 809a bcs.w 80004fc <__adddf3+0x240> + 80003c8: f1bc 4f00 cmp.w ip, #2147483648 ; 0x80000000 + 80003cc: bf08 it eq + 80003ce: ea5f 0c50 movseq.w ip, r0, lsr #1 + 80003d2: f150 0000 adcs.w r0, r0, #0 + 80003d6: eb41 5104 adc.w r1, r1, r4, lsl #20 + 80003da: ea41 0105 orr.w r1, r1, r5 + 80003de: bd30 pop {r4, r5, pc} + 80003e0: ea5f 0c4c movs.w ip, ip, lsl #1 + 80003e4: 4140 adcs r0, r0 + 80003e6: eb41 0101 adc.w r1, r1, r1 + 80003ea: 3c01 subs r4, #1 + 80003ec: bf28 it cs + 80003ee: f5b1 1f80 cmpcs.w r1, #1048576 ; 0x100000 + 80003f2: d2e9 bcs.n 80003c8 <__adddf3+0x10c> + 80003f4: f091 0f00 teq r1, #0 + 80003f8: bf04 itt eq + 80003fa: 4601 moveq r1, r0 + 80003fc: 2000 moveq r0, #0 + 80003fe: fab1 f381 clz r3, r1 + 8000402: bf08 it eq + 8000404: 3320 addeq r3, #32 + 8000406: f1a3 030b sub.w r3, r3, #11 + 800040a: f1b3 0220 subs.w r2, r3, #32 + 800040e: da0c bge.n 800042a <__adddf3+0x16e> + 8000410: 320c adds r2, #12 + 8000412: dd08 ble.n 8000426 <__adddf3+0x16a> + 8000414: f102 0c14 add.w ip, r2, #20 + 8000418: f1c2 020c rsb r2, r2, #12 + 800041c: fa01 f00c lsl.w r0, r1, ip + 8000420: fa21 f102 lsr.w r1, r1, r2 + 8000424: e00c b.n 8000440 <__adddf3+0x184> + 8000426: f102 0214 add.w r2, r2, #20 + 800042a: bfd8 it le + 800042c: f1c2 0c20 rsble ip, r2, #32 + 8000430: fa01 f102 lsl.w r1, r1, r2 + 8000434: fa20 fc0c lsr.w ip, r0, ip + 8000438: bfdc itt le + 800043a: ea41 010c orrle.w r1, r1, ip + 800043e: 4090 lslle r0, r2 + 8000440: 1ae4 subs r4, r4, r3 + 8000442: bfa2 ittt ge + 8000444: eb01 5104 addge.w r1, r1, r4, lsl #20 + 8000448: 4329 orrge r1, r5 + 800044a: bd30 popge {r4, r5, pc} + 800044c: ea6f 0404 mvn.w r4, r4 + 8000450: 3c1f subs r4, #31 + 8000452: da1c bge.n 800048e <__adddf3+0x1d2> + 8000454: 340c adds r4, #12 + 8000456: dc0e bgt.n 8000476 <__adddf3+0x1ba> + 8000458: f104 0414 add.w r4, r4, #20 + 800045c: f1c4 0220 rsb r2, r4, #32 + 8000460: fa20 f004 lsr.w r0, r0, r4 + 8000464: fa01 f302 lsl.w r3, r1, r2 + 8000468: ea40 0003 orr.w r0, r0, r3 + 800046c: fa21 f304 lsr.w r3, r1, r4 + 8000470: ea45 0103 orr.w r1, r5, r3 + 8000474: bd30 pop {r4, r5, pc} + 8000476: f1c4 040c rsb r4, r4, #12 + 800047a: f1c4 0220 rsb r2, r4, #32 + 800047e: fa20 f002 lsr.w r0, r0, r2 + 8000482: fa01 f304 lsl.w r3, r1, r4 + 8000486: ea40 0003 orr.w r0, r0, r3 + 800048a: 4629 mov r1, r5 + 800048c: bd30 pop {r4, r5, pc} + 800048e: fa21 f004 lsr.w r0, r1, r4 + 8000492: 4629 mov r1, r5 + 8000494: bd30 pop {r4, r5, pc} + 8000496: f094 0f00 teq r4, #0 + 800049a: f483 1380 eor.w r3, r3, #1048576 ; 0x100000 + 800049e: bf06 itte eq + 80004a0: f481 1180 eoreq.w r1, r1, #1048576 ; 0x100000 + 80004a4: 3401 addeq r4, #1 + 80004a6: 3d01 subne r5, #1 + 80004a8: e74e b.n 8000348 <__adddf3+0x8c> + 80004aa: ea7f 5c64 mvns.w ip, r4, asr #21 + 80004ae: bf18 it ne + 80004b0: ea7f 5c65 mvnsne.w ip, r5, asr #21 + 80004b4: d029 beq.n 800050a <__adddf3+0x24e> + 80004b6: ea94 0f05 teq r4, r5 + 80004ba: bf08 it eq + 80004bc: ea90 0f02 teqeq r0, r2 + 80004c0: d005 beq.n 80004ce <__adddf3+0x212> + 80004c2: ea54 0c00 orrs.w ip, r4, r0 + 80004c6: bf04 itt eq + 80004c8: 4619 moveq r1, r3 + 80004ca: 4610 moveq r0, r2 + 80004cc: bd30 pop {r4, r5, pc} + 80004ce: ea91 0f03 teq r1, r3 + 80004d2: bf1e ittt ne + 80004d4: 2100 movne r1, #0 + 80004d6: 2000 movne r0, #0 + 80004d8: bd30 popne {r4, r5, pc} + 80004da: ea5f 5c54 movs.w ip, r4, lsr #21 + 80004de: d105 bne.n 80004ec <__adddf3+0x230> + 80004e0: 0040 lsls r0, r0, #1 + 80004e2: 4149 adcs r1, r1 + 80004e4: bf28 it cs + 80004e6: f041 4100 orrcs.w r1, r1, #2147483648 ; 0x80000000 + 80004ea: bd30 pop {r4, r5, pc} + 80004ec: f514 0480 adds.w r4, r4, #4194304 ; 0x400000 + 80004f0: bf3c itt cc + 80004f2: f501 1180 addcc.w r1, r1, #1048576 ; 0x100000 + 80004f6: bd30 popcc {r4, r5, pc} + 80004f8: f001 4500 and.w r5, r1, #2147483648 ; 0x80000000 + 80004fc: f045 41fe orr.w r1, r5, #2130706432 ; 0x7f000000 + 8000500: f441 0170 orr.w r1, r1, #15728640 ; 0xf00000 + 8000504: f04f 0000 mov.w r0, #0 + 8000508: bd30 pop {r4, r5, pc} + 800050a: ea7f 5c64 mvns.w ip, r4, asr #21 + 800050e: bf1a itte ne + 8000510: 4619 movne r1, r3 + 8000512: 4610 movne r0, r2 + 8000514: ea7f 5c65 mvnseq.w ip, r5, asr #21 + 8000518: bf1c itt ne + 800051a: 460b movne r3, r1 + 800051c: 4602 movne r2, r0 + 800051e: ea50 3401 orrs.w r4, r0, r1, lsl #12 + 8000522: bf06 itte eq + 8000524: ea52 3503 orrseq.w r5, r2, r3, lsl #12 + 8000528: ea91 0f03 teqeq r1, r3 + 800052c: f441 2100 orrne.w r1, r1, #524288 ; 0x80000 + 8000530: bd30 pop {r4, r5, pc} + 8000532: bf00 nop + +08000534 <__aeabi_ui2d>: + 8000534: f090 0f00 teq r0, #0 + 8000538: bf04 itt eq + 800053a: 2100 moveq r1, #0 + 800053c: 4770 bxeq lr + 800053e: b530 push {r4, r5, lr} + 8000540: f44f 6480 mov.w r4, #1024 ; 0x400 + 8000544: f104 0432 add.w r4, r4, #50 ; 0x32 + 8000548: f04f 0500 mov.w r5, #0 + 800054c: f04f 0100 mov.w r1, #0 + 8000550: e750 b.n 80003f4 <__adddf3+0x138> + 8000552: bf00 nop + +08000554 <__aeabi_i2d>: + 8000554: f090 0f00 teq r0, #0 + 8000558: bf04 itt eq + 800055a: 2100 moveq r1, #0 + 800055c: 4770 bxeq lr + 800055e: b530 push {r4, r5, lr} + 8000560: f44f 6480 mov.w r4, #1024 ; 0x400 + 8000564: f104 0432 add.w r4, r4, #50 ; 0x32 + 8000568: f010 4500 ands.w r5, r0, #2147483648 ; 0x80000000 + 800056c: bf48 it mi + 800056e: 4240 negmi r0, r0 + 8000570: f04f 0100 mov.w r1, #0 + 8000574: e73e b.n 80003f4 <__adddf3+0x138> + 8000576: bf00 nop + +08000578 <__aeabi_f2d>: + 8000578: 0042 lsls r2, r0, #1 + 800057a: ea4f 01e2 mov.w r1, r2, asr #3 + 800057e: ea4f 0131 mov.w r1, r1, rrx + 8000582: ea4f 7002 mov.w r0, r2, lsl #28 + 8000586: bf1f itttt ne + 8000588: f012 437f andsne.w r3, r2, #4278190080 ; 0xff000000 + 800058c: f093 4f7f teqne r3, #4278190080 ; 0xff000000 + 8000590: f081 5160 eorne.w r1, r1, #939524096 ; 0x38000000 + 8000594: 4770 bxne lr + 8000596: f032 427f bics.w r2, r2, #4278190080 ; 0xff000000 + 800059a: bf08 it eq + 800059c: 4770 bxeq lr + 800059e: f093 4f7f teq r3, #4278190080 ; 0xff000000 + 80005a2: bf04 itt eq + 80005a4: f441 2100 orreq.w r1, r1, #524288 ; 0x80000 + 80005a8: 4770 bxeq lr + 80005aa: b530 push {r4, r5, lr} + 80005ac: f44f 7460 mov.w r4, #896 ; 0x380 + 80005b0: f001 4500 and.w r5, r1, #2147483648 ; 0x80000000 + 80005b4: f021 4100 bic.w r1, r1, #2147483648 ; 0x80000000 + 80005b8: e71c b.n 80003f4 <__adddf3+0x138> + 80005ba: bf00 nop + +080005bc <__aeabi_ul2d>: + 80005bc: ea50 0201 orrs.w r2, r0, r1 + 80005c0: bf08 it eq + 80005c2: 4770 bxeq lr + 80005c4: b530 push {r4, r5, lr} + 80005c6: f04f 0500 mov.w r5, #0 + 80005ca: e00a b.n 80005e2 <__aeabi_l2d+0x16> + +080005cc <__aeabi_l2d>: + 80005cc: ea50 0201 orrs.w r2, r0, r1 + 80005d0: bf08 it eq + 80005d2: 4770 bxeq lr + 80005d4: b530 push {r4, r5, lr} + 80005d6: f011 4500 ands.w r5, r1, #2147483648 ; 0x80000000 + 80005da: d502 bpl.n 80005e2 <__aeabi_l2d+0x16> + 80005dc: 4240 negs r0, r0 + 80005de: eb61 0141 sbc.w r1, r1, r1, lsl #1 + 80005e2: f44f 6480 mov.w r4, #1024 ; 0x400 + 80005e6: f104 0432 add.w r4, r4, #50 ; 0x32 + 80005ea: ea5f 5c91 movs.w ip, r1, lsr #22 + 80005ee: f43f aed8 beq.w 80003a2 <__adddf3+0xe6> + 80005f2: f04f 0203 mov.w r2, #3 + 80005f6: ea5f 0cdc movs.w ip, ip, lsr #3 + 80005fa: bf18 it ne + 80005fc: 3203 addne r2, #3 + 80005fe: ea5f 0cdc movs.w ip, ip, lsr #3 + 8000602: bf18 it ne + 8000604: 3203 addne r2, #3 + 8000606: eb02 02dc add.w r2, r2, ip, lsr #3 + 800060a: f1c2 0320 rsb r3, r2, #32 + 800060e: fa00 fc03 lsl.w ip, r0, r3 + 8000612: fa20 f002 lsr.w r0, r0, r2 + 8000616: fa01 fe03 lsl.w lr, r1, r3 + 800061a: ea40 000e orr.w r0, r0, lr + 800061e: fa21 f102 lsr.w r1, r1, r2 + 8000622: 4414 add r4, r2 + 8000624: e6bd b.n 80003a2 <__adddf3+0xe6> + 8000626: bf00 nop + +08000628 <__aeabi_dmul>: + 8000628: b570 push {r4, r5, r6, lr} + 800062a: f04f 0cff mov.w ip, #255 ; 0xff + 800062e: f44c 6ce0 orr.w ip, ip, #1792 ; 0x700 + 8000632: ea1c 5411 ands.w r4, ip, r1, lsr #20 + 8000636: bf1d ittte ne + 8000638: ea1c 5513 andsne.w r5, ip, r3, lsr #20 + 800063c: ea94 0f0c teqne r4, ip + 8000640: ea95 0f0c teqne r5, ip + 8000644: f000 f8de bleq 8000804 <__aeabi_dmul+0x1dc> + 8000648: 442c add r4, r5 + 800064a: ea81 0603 eor.w r6, r1, r3 + 800064e: ea21 514c bic.w r1, r1, ip, lsl #21 + 8000652: ea23 534c bic.w r3, r3, ip, lsl #21 + 8000656: ea50 3501 orrs.w r5, r0, r1, lsl #12 + 800065a: bf18 it ne + 800065c: ea52 3503 orrsne.w r5, r2, r3, lsl #12 + 8000660: f441 1180 orr.w r1, r1, #1048576 ; 0x100000 + 8000664: f443 1380 orr.w r3, r3, #1048576 ; 0x100000 + 8000668: d038 beq.n 80006dc <__aeabi_dmul+0xb4> + 800066a: fba0 ce02 umull ip, lr, r0, r2 + 800066e: f04f 0500 mov.w r5, #0 + 8000672: fbe1 e502 umlal lr, r5, r1, r2 + 8000676: f006 4200 and.w r2, r6, #2147483648 ; 0x80000000 + 800067a: fbe0 e503 umlal lr, r5, r0, r3 + 800067e: f04f 0600 mov.w r6, #0 + 8000682: fbe1 5603 umlal r5, r6, r1, r3 + 8000686: f09c 0f00 teq ip, #0 + 800068a: bf18 it ne + 800068c: f04e 0e01 orrne.w lr, lr, #1 + 8000690: f1a4 04ff sub.w r4, r4, #255 ; 0xff + 8000694: f5b6 7f00 cmp.w r6, #512 ; 0x200 + 8000698: f564 7440 sbc.w r4, r4, #768 ; 0x300 + 800069c: d204 bcs.n 80006a8 <__aeabi_dmul+0x80> + 800069e: ea5f 0e4e movs.w lr, lr, lsl #1 + 80006a2: 416d adcs r5, r5 + 80006a4: eb46 0606 adc.w r6, r6, r6 + 80006a8: ea42 21c6 orr.w r1, r2, r6, lsl #11 + 80006ac: ea41 5155 orr.w r1, r1, r5, lsr #21 + 80006b0: ea4f 20c5 mov.w r0, r5, lsl #11 + 80006b4: ea40 505e orr.w r0, r0, lr, lsr #21 + 80006b8: ea4f 2ece mov.w lr, lr, lsl #11 + 80006bc: f1b4 0cfd subs.w ip, r4, #253 ; 0xfd + 80006c0: bf88 it hi + 80006c2: f5bc 6fe0 cmphi.w ip, #1792 ; 0x700 + 80006c6: d81e bhi.n 8000706 <__aeabi_dmul+0xde> + 80006c8: f1be 4f00 cmp.w lr, #2147483648 ; 0x80000000 + 80006cc: bf08 it eq + 80006ce: ea5f 0e50 movseq.w lr, r0, lsr #1 + 80006d2: f150 0000 adcs.w r0, r0, #0 + 80006d6: eb41 5104 adc.w r1, r1, r4, lsl #20 + 80006da: bd70 pop {r4, r5, r6, pc} + 80006dc: f006 4600 and.w r6, r6, #2147483648 ; 0x80000000 + 80006e0: ea46 0101 orr.w r1, r6, r1 + 80006e4: ea40 0002 orr.w r0, r0, r2 + 80006e8: ea81 0103 eor.w r1, r1, r3 + 80006ec: ebb4 045c subs.w r4, r4, ip, lsr #1 + 80006f0: bfc2 ittt gt + 80006f2: ebd4 050c rsbsgt r5, r4, ip + 80006f6: ea41 5104 orrgt.w r1, r1, r4, lsl #20 + 80006fa: bd70 popgt {r4, r5, r6, pc} + 80006fc: f441 1180 orr.w r1, r1, #1048576 ; 0x100000 + 8000700: f04f 0e00 mov.w lr, #0 + 8000704: 3c01 subs r4, #1 + 8000706: f300 80ab bgt.w 8000860 <__aeabi_dmul+0x238> + 800070a: f114 0f36 cmn.w r4, #54 ; 0x36 + 800070e: bfde ittt le + 8000710: 2000 movle r0, #0 + 8000712: f001 4100 andle.w r1, r1, #2147483648 ; 0x80000000 + 8000716: bd70 pople {r4, r5, r6, pc} + 8000718: f1c4 0400 rsb r4, r4, #0 + 800071c: 3c20 subs r4, #32 + 800071e: da35 bge.n 800078c <__aeabi_dmul+0x164> + 8000720: 340c adds r4, #12 + 8000722: dc1b bgt.n 800075c <__aeabi_dmul+0x134> + 8000724: f104 0414 add.w r4, r4, #20 + 8000728: f1c4 0520 rsb r5, r4, #32 + 800072c: fa00 f305 lsl.w r3, r0, r5 + 8000730: fa20 f004 lsr.w r0, r0, r4 + 8000734: fa01 f205 lsl.w r2, r1, r5 + 8000738: ea40 0002 orr.w r0, r0, r2 + 800073c: f001 4200 and.w r2, r1, #2147483648 ; 0x80000000 + 8000740: f021 4100 bic.w r1, r1, #2147483648 ; 0x80000000 + 8000744: eb10 70d3 adds.w r0, r0, r3, lsr #31 + 8000748: fa21 f604 lsr.w r6, r1, r4 + 800074c: eb42 0106 adc.w r1, r2, r6 + 8000750: ea5e 0e43 orrs.w lr, lr, r3, lsl #1 + 8000754: bf08 it eq + 8000756: ea20 70d3 biceq.w r0, r0, r3, lsr #31 + 800075a: bd70 pop {r4, r5, r6, pc} + 800075c: f1c4 040c rsb r4, r4, #12 + 8000760: f1c4 0520 rsb r5, r4, #32 + 8000764: fa00 f304 lsl.w r3, r0, r4 + 8000768: fa20 f005 lsr.w r0, r0, r5 + 800076c: fa01 f204 lsl.w r2, r1, r4 + 8000770: ea40 0002 orr.w r0, r0, r2 + 8000774: f001 4100 and.w r1, r1, #2147483648 ; 0x80000000 + 8000778: eb10 70d3 adds.w r0, r0, r3, lsr #31 + 800077c: f141 0100 adc.w r1, r1, #0 + 8000780: ea5e 0e43 orrs.w lr, lr, r3, lsl #1 + 8000784: bf08 it eq + 8000786: ea20 70d3 biceq.w r0, r0, r3, lsr #31 + 800078a: bd70 pop {r4, r5, r6, pc} + 800078c: f1c4 0520 rsb r5, r4, #32 + 8000790: fa00 f205 lsl.w r2, r0, r5 + 8000794: ea4e 0e02 orr.w lr, lr, r2 + 8000798: fa20 f304 lsr.w r3, r0, r4 + 800079c: fa01 f205 lsl.w r2, r1, r5 + 80007a0: ea43 0302 orr.w r3, r3, r2 + 80007a4: fa21 f004 lsr.w r0, r1, r4 + 80007a8: f001 4100 and.w r1, r1, #2147483648 ; 0x80000000 + 80007ac: fa21 f204 lsr.w r2, r1, r4 + 80007b0: ea20 0002 bic.w r0, r0, r2 + 80007b4: eb00 70d3 add.w r0, r0, r3, lsr #31 + 80007b8: ea5e 0e43 orrs.w lr, lr, r3, lsl #1 + 80007bc: bf08 it eq + 80007be: ea20 70d3 biceq.w r0, r0, r3, lsr #31 + 80007c2: bd70 pop {r4, r5, r6, pc} + 80007c4: f094 0f00 teq r4, #0 + 80007c8: d10f bne.n 80007ea <__aeabi_dmul+0x1c2> + 80007ca: f001 4600 and.w r6, r1, #2147483648 ; 0x80000000 + 80007ce: 0040 lsls r0, r0, #1 + 80007d0: eb41 0101 adc.w r1, r1, r1 + 80007d4: f411 1f80 tst.w r1, #1048576 ; 0x100000 + 80007d8: bf08 it eq + 80007da: 3c01 subeq r4, #1 + 80007dc: d0f7 beq.n 80007ce <__aeabi_dmul+0x1a6> + 80007de: ea41 0106 orr.w r1, r1, r6 + 80007e2: f095 0f00 teq r5, #0 + 80007e6: bf18 it ne + 80007e8: 4770 bxne lr + 80007ea: f003 4600 and.w r6, r3, #2147483648 ; 0x80000000 + 80007ee: 0052 lsls r2, r2, #1 + 80007f0: eb43 0303 adc.w r3, r3, r3 + 80007f4: f413 1f80 tst.w r3, #1048576 ; 0x100000 + 80007f8: bf08 it eq + 80007fa: 3d01 subeq r5, #1 + 80007fc: d0f7 beq.n 80007ee <__aeabi_dmul+0x1c6> + 80007fe: ea43 0306 orr.w r3, r3, r6 + 8000802: 4770 bx lr + 8000804: ea94 0f0c teq r4, ip + 8000808: ea0c 5513 and.w r5, ip, r3, lsr #20 + 800080c: bf18 it ne + 800080e: ea95 0f0c teqne r5, ip + 8000812: d00c beq.n 800082e <__aeabi_dmul+0x206> + 8000814: ea50 0641 orrs.w r6, r0, r1, lsl #1 + 8000818: bf18 it ne + 800081a: ea52 0643 orrsne.w r6, r2, r3, lsl #1 + 800081e: d1d1 bne.n 80007c4 <__aeabi_dmul+0x19c> + 8000820: ea81 0103 eor.w r1, r1, r3 + 8000824: f001 4100 and.w r1, r1, #2147483648 ; 0x80000000 + 8000828: f04f 0000 mov.w r0, #0 + 800082c: bd70 pop {r4, r5, r6, pc} + 800082e: ea50 0641 orrs.w r6, r0, r1, lsl #1 + 8000832: bf06 itte eq + 8000834: 4610 moveq r0, r2 + 8000836: 4619 moveq r1, r3 + 8000838: ea52 0643 orrsne.w r6, r2, r3, lsl #1 + 800083c: d019 beq.n 8000872 <__aeabi_dmul+0x24a> + 800083e: ea94 0f0c teq r4, ip + 8000842: d102 bne.n 800084a <__aeabi_dmul+0x222> + 8000844: ea50 3601 orrs.w r6, r0, r1, lsl #12 + 8000848: d113 bne.n 8000872 <__aeabi_dmul+0x24a> + 800084a: ea95 0f0c teq r5, ip + 800084e: d105 bne.n 800085c <__aeabi_dmul+0x234> + 8000850: ea52 3603 orrs.w r6, r2, r3, lsl #12 + 8000854: bf1c itt ne + 8000856: 4610 movne r0, r2 + 8000858: 4619 movne r1, r3 + 800085a: d10a bne.n 8000872 <__aeabi_dmul+0x24a> + 800085c: ea81 0103 eor.w r1, r1, r3 + 8000860: f001 4100 and.w r1, r1, #2147483648 ; 0x80000000 + 8000864: f041 41fe orr.w r1, r1, #2130706432 ; 0x7f000000 + 8000868: f441 0170 orr.w r1, r1, #15728640 ; 0xf00000 + 800086c: f04f 0000 mov.w r0, #0 + 8000870: bd70 pop {r4, r5, r6, pc} + 8000872: f041 41fe orr.w r1, r1, #2130706432 ; 0x7f000000 + 8000876: f441 0178 orr.w r1, r1, #16252928 ; 0xf80000 + 800087a: bd70 pop {r4, r5, r6, pc} + +0800087c <__aeabi_ddiv>: + 800087c: b570 push {r4, r5, r6, lr} + 800087e: f04f 0cff mov.w ip, #255 ; 0xff + 8000882: f44c 6ce0 orr.w ip, ip, #1792 ; 0x700 + 8000886: ea1c 5411 ands.w r4, ip, r1, lsr #20 + 800088a: bf1d ittte ne + 800088c: ea1c 5513 andsne.w r5, ip, r3, lsr #20 + 8000890: ea94 0f0c teqne r4, ip + 8000894: ea95 0f0c teqne r5, ip + 8000898: f000 f8a7 bleq 80009ea <__aeabi_ddiv+0x16e> + 800089c: eba4 0405 sub.w r4, r4, r5 + 80008a0: ea81 0e03 eor.w lr, r1, r3 + 80008a4: ea52 3503 orrs.w r5, r2, r3, lsl #12 + 80008a8: ea4f 3101 mov.w r1, r1, lsl #12 + 80008ac: f000 8088 beq.w 80009c0 <__aeabi_ddiv+0x144> + 80008b0: ea4f 3303 mov.w r3, r3, lsl #12 + 80008b4: f04f 5580 mov.w r5, #268435456 ; 0x10000000 + 80008b8: ea45 1313 orr.w r3, r5, r3, lsr #4 + 80008bc: ea43 6312 orr.w r3, r3, r2, lsr #24 + 80008c0: ea4f 2202 mov.w r2, r2, lsl #8 + 80008c4: ea45 1511 orr.w r5, r5, r1, lsr #4 + 80008c8: ea45 6510 orr.w r5, r5, r0, lsr #24 + 80008cc: ea4f 2600 mov.w r6, r0, lsl #8 + 80008d0: f00e 4100 and.w r1, lr, #2147483648 ; 0x80000000 + 80008d4: 429d cmp r5, r3 + 80008d6: bf08 it eq + 80008d8: 4296 cmpeq r6, r2 + 80008da: f144 04fd adc.w r4, r4, #253 ; 0xfd + 80008de: f504 7440 add.w r4, r4, #768 ; 0x300 + 80008e2: d202 bcs.n 80008ea <__aeabi_ddiv+0x6e> + 80008e4: 085b lsrs r3, r3, #1 + 80008e6: ea4f 0232 mov.w r2, r2, rrx + 80008ea: 1ab6 subs r6, r6, r2 + 80008ec: eb65 0503 sbc.w r5, r5, r3 + 80008f0: 085b lsrs r3, r3, #1 + 80008f2: ea4f 0232 mov.w r2, r2, rrx + 80008f6: f44f 1080 mov.w r0, #1048576 ; 0x100000 + 80008fa: f44f 2c00 mov.w ip, #524288 ; 0x80000 + 80008fe: ebb6 0e02 subs.w lr, r6, r2 + 8000902: eb75 0e03 sbcs.w lr, r5, r3 + 8000906: bf22 ittt cs + 8000908: 1ab6 subcs r6, r6, r2 + 800090a: 4675 movcs r5, lr + 800090c: ea40 000c orrcs.w r0, r0, ip + 8000910: 085b lsrs r3, r3, #1 + 8000912: ea4f 0232 mov.w r2, r2, rrx + 8000916: ebb6 0e02 subs.w lr, r6, r2 + 800091a: eb75 0e03 sbcs.w lr, r5, r3 + 800091e: bf22 ittt cs + 8000920: 1ab6 subcs r6, r6, r2 + 8000922: 4675 movcs r5, lr + 8000924: ea40 005c orrcs.w r0, r0, ip, lsr #1 + 8000928: 085b lsrs r3, r3, #1 + 800092a: ea4f 0232 mov.w r2, r2, rrx + 800092e: ebb6 0e02 subs.w lr, r6, r2 + 8000932: eb75 0e03 sbcs.w lr, r5, r3 + 8000936: bf22 ittt cs + 8000938: 1ab6 subcs r6, r6, r2 + 800093a: 4675 movcs r5, lr + 800093c: ea40 009c orrcs.w r0, r0, ip, lsr #2 + 8000940: 085b lsrs r3, r3, #1 + 8000942: ea4f 0232 mov.w r2, r2, rrx + 8000946: ebb6 0e02 subs.w lr, r6, r2 + 800094a: eb75 0e03 sbcs.w lr, r5, r3 + 800094e: bf22 ittt cs + 8000950: 1ab6 subcs r6, r6, r2 + 8000952: 4675 movcs r5, lr + 8000954: ea40 00dc orrcs.w r0, r0, ip, lsr #3 + 8000958: ea55 0e06 orrs.w lr, r5, r6 + 800095c: d018 beq.n 8000990 <__aeabi_ddiv+0x114> + 800095e: ea4f 1505 mov.w r5, r5, lsl #4 + 8000962: ea45 7516 orr.w r5, r5, r6, lsr #28 + 8000966: ea4f 1606 mov.w r6, r6, lsl #4 + 800096a: ea4f 03c3 mov.w r3, r3, lsl #3 + 800096e: ea43 7352 orr.w r3, r3, r2, lsr #29 + 8000972: ea4f 02c2 mov.w r2, r2, lsl #3 + 8000976: ea5f 1c1c movs.w ip, ip, lsr #4 + 800097a: d1c0 bne.n 80008fe <__aeabi_ddiv+0x82> + 800097c: f411 1f80 tst.w r1, #1048576 ; 0x100000 + 8000980: d10b bne.n 800099a <__aeabi_ddiv+0x11e> + 8000982: ea41 0100 orr.w r1, r1, r0 + 8000986: f04f 0000 mov.w r0, #0 + 800098a: f04f 4c00 mov.w ip, #2147483648 ; 0x80000000 + 800098e: e7b6 b.n 80008fe <__aeabi_ddiv+0x82> + 8000990: f411 1f80 tst.w r1, #1048576 ; 0x100000 + 8000994: bf04 itt eq + 8000996: 4301 orreq r1, r0 + 8000998: 2000 moveq r0, #0 + 800099a: f1b4 0cfd subs.w ip, r4, #253 ; 0xfd + 800099e: bf88 it hi + 80009a0: f5bc 6fe0 cmphi.w ip, #1792 ; 0x700 + 80009a4: f63f aeaf bhi.w 8000706 <__aeabi_dmul+0xde> + 80009a8: ebb5 0c03 subs.w ip, r5, r3 + 80009ac: bf04 itt eq + 80009ae: ebb6 0c02 subseq.w ip, r6, r2 + 80009b2: ea5f 0c50 movseq.w ip, r0, lsr #1 + 80009b6: f150 0000 adcs.w r0, r0, #0 + 80009ba: eb41 5104 adc.w r1, r1, r4, lsl #20 + 80009be: bd70 pop {r4, r5, r6, pc} + 80009c0: f00e 4e00 and.w lr, lr, #2147483648 ; 0x80000000 + 80009c4: ea4e 3111 orr.w r1, lr, r1, lsr #12 + 80009c8: eb14 045c adds.w r4, r4, ip, lsr #1 + 80009cc: bfc2 ittt gt + 80009ce: ebd4 050c rsbsgt r5, r4, ip + 80009d2: ea41 5104 orrgt.w r1, r1, r4, lsl #20 + 80009d6: bd70 popgt {r4, r5, r6, pc} + 80009d8: f441 1180 orr.w r1, r1, #1048576 ; 0x100000 + 80009dc: f04f 0e00 mov.w lr, #0 + 80009e0: 3c01 subs r4, #1 + 80009e2: e690 b.n 8000706 <__aeabi_dmul+0xde> + 80009e4: ea45 0e06 orr.w lr, r5, r6 + 80009e8: e68d b.n 8000706 <__aeabi_dmul+0xde> + 80009ea: ea0c 5513 and.w r5, ip, r3, lsr #20 + 80009ee: ea94 0f0c teq r4, ip + 80009f2: bf08 it eq + 80009f4: ea95 0f0c teqeq r5, ip + 80009f8: f43f af3b beq.w 8000872 <__aeabi_dmul+0x24a> + 80009fc: ea94 0f0c teq r4, ip + 8000a00: d10a bne.n 8000a18 <__aeabi_ddiv+0x19c> + 8000a02: ea50 3401 orrs.w r4, r0, r1, lsl #12 + 8000a06: f47f af34 bne.w 8000872 <__aeabi_dmul+0x24a> + 8000a0a: ea95 0f0c teq r5, ip + 8000a0e: f47f af25 bne.w 800085c <__aeabi_dmul+0x234> + 8000a12: 4610 mov r0, r2 + 8000a14: 4619 mov r1, r3 + 8000a16: e72c b.n 8000872 <__aeabi_dmul+0x24a> + 8000a18: ea95 0f0c teq r5, ip + 8000a1c: d106 bne.n 8000a2c <__aeabi_ddiv+0x1b0> + 8000a1e: ea52 3503 orrs.w r5, r2, r3, lsl #12 + 8000a22: f43f aefd beq.w 8000820 <__aeabi_dmul+0x1f8> + 8000a26: 4610 mov r0, r2 + 8000a28: 4619 mov r1, r3 + 8000a2a: e722 b.n 8000872 <__aeabi_dmul+0x24a> + 8000a2c: ea50 0641 orrs.w r6, r0, r1, lsl #1 + 8000a30: bf18 it ne + 8000a32: ea52 0643 orrsne.w r6, r2, r3, lsl #1 + 8000a36: f47f aec5 bne.w 80007c4 <__aeabi_dmul+0x19c> + 8000a3a: ea50 0441 orrs.w r4, r0, r1, lsl #1 + 8000a3e: f47f af0d bne.w 800085c <__aeabi_dmul+0x234> + 8000a42: ea52 0543 orrs.w r5, r2, r3, lsl #1 + 8000a46: f47f aeeb bne.w 8000820 <__aeabi_dmul+0x1f8> + 8000a4a: e712 b.n 8000872 <__aeabi_dmul+0x24a> + +08000a4c <__aeabi_d2f>: + 8000a4c: ea4f 0241 mov.w r2, r1, lsl #1 + 8000a50: f1b2 43e0 subs.w r3, r2, #1879048192 ; 0x70000000 + 8000a54: bf24 itt cs + 8000a56: f5b3 1c00 subscs.w ip, r3, #2097152 ; 0x200000 + 8000a5a: f1dc 5cfe rsbscs ip, ip, #532676608 ; 0x1fc00000 + 8000a5e: d90d bls.n 8000a7c <__aeabi_d2f+0x30> + 8000a60: f001 4c00 and.w ip, r1, #2147483648 ; 0x80000000 + 8000a64: ea4f 02c0 mov.w r2, r0, lsl #3 + 8000a68: ea4c 7050 orr.w r0, ip, r0, lsr #29 + 8000a6c: f1b2 4f00 cmp.w r2, #2147483648 ; 0x80000000 + 8000a70: eb40 0083 adc.w r0, r0, r3, lsl #2 + 8000a74: bf08 it eq + 8000a76: f020 0001 biceq.w r0, r0, #1 + 8000a7a: 4770 bx lr + 8000a7c: f011 4f80 tst.w r1, #1073741824 ; 0x40000000 + 8000a80: d121 bne.n 8000ac6 <__aeabi_d2f+0x7a> + 8000a82: f113 7238 adds.w r2, r3, #48234496 ; 0x2e00000 + 8000a86: bfbc itt lt + 8000a88: f001 4000 andlt.w r0, r1, #2147483648 ; 0x80000000 + 8000a8c: 4770 bxlt lr + 8000a8e: f441 1180 orr.w r1, r1, #1048576 ; 0x100000 + 8000a92: ea4f 5252 mov.w r2, r2, lsr #21 + 8000a96: f1c2 0218 rsb r2, r2, #24 + 8000a9a: f1c2 0c20 rsb ip, r2, #32 + 8000a9e: fa10 f30c lsls.w r3, r0, ip + 8000aa2: fa20 f002 lsr.w r0, r0, r2 + 8000aa6: bf18 it ne + 8000aa8: f040 0001 orrne.w r0, r0, #1 + 8000aac: ea4f 23c1 mov.w r3, r1, lsl #11 + 8000ab0: ea4f 23d3 mov.w r3, r3, lsr #11 + 8000ab4: fa03 fc0c lsl.w ip, r3, ip + 8000ab8: ea40 000c orr.w r0, r0, ip + 8000abc: fa23 f302 lsr.w r3, r3, r2 + 8000ac0: ea4f 0343 mov.w r3, r3, lsl #1 + 8000ac4: e7cc b.n 8000a60 <__aeabi_d2f+0x14> + 8000ac6: ea7f 5362 mvns.w r3, r2, asr #21 + 8000aca: d107 bne.n 8000adc <__aeabi_d2f+0x90> + 8000acc: ea50 3301 orrs.w r3, r0, r1, lsl #12 + 8000ad0: bf1e ittt ne + 8000ad2: f04f 40fe movne.w r0, #2130706432 ; 0x7f000000 + 8000ad6: f440 0040 orrne.w r0, r0, #12582912 ; 0xc00000 + 8000ada: 4770 bxne lr + 8000adc: f001 4000 and.w r0, r1, #2147483648 ; 0x80000000 + 8000ae0: f040 40fe orr.w r0, r0, #2130706432 ; 0x7f000000 + 8000ae4: f440 0000 orr.w r0, r0, #8388608 ; 0x800000 + 8000ae8: 4770 bx lr + 8000aea: bf00 nop + +08000aec <__aeabi_uldivmod>: + 8000aec: b953 cbnz r3, 8000b04 <__aeabi_uldivmod+0x18> + 8000aee: b94a cbnz r2, 8000b04 <__aeabi_uldivmod+0x18> + 8000af0: 2900 cmp r1, #0 + 8000af2: bf08 it eq + 8000af4: 2800 cmpeq r0, #0 + 8000af6: bf1c itt ne + 8000af8: f04f 31ff movne.w r1, #4294967295 + 8000afc: f04f 30ff movne.w r0, #4294967295 + 8000b00: f000 b970 b.w 8000de4 <__aeabi_idiv0> + 8000b04: f1ad 0c08 sub.w ip, sp, #8 + 8000b08: e96d ce04 strd ip, lr, [sp, #-16]! + 8000b0c: f000 f806 bl 8000b1c <__udivmoddi4> + 8000b10: f8dd e004 ldr.w lr, [sp, #4] + 8000b14: e9dd 2302 ldrd r2, r3, [sp, #8] + 8000b18: b004 add sp, #16 + 8000b1a: 4770 bx lr + +08000b1c <__udivmoddi4>: + 8000b1c: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} + 8000b20: 9e08 ldr r6, [sp, #32] + 8000b22: 460d mov r5, r1 + 8000b24: 4604 mov r4, r0 + 8000b26: 460f mov r7, r1 + 8000b28: 2b00 cmp r3, #0 + 8000b2a: d14a bne.n 8000bc2 <__udivmoddi4+0xa6> + 8000b2c: 428a cmp r2, r1 + 8000b2e: 4694 mov ip, r2 + 8000b30: d965 bls.n 8000bfe <__udivmoddi4+0xe2> + 8000b32: fab2 f382 clz r3, r2 + 8000b36: b143 cbz r3, 8000b4a <__udivmoddi4+0x2e> + 8000b38: fa02 fc03 lsl.w ip, r2, r3 + 8000b3c: f1c3 0220 rsb r2, r3, #32 + 8000b40: 409f lsls r7, r3 + 8000b42: fa20 f202 lsr.w r2, r0, r2 + 8000b46: 4317 orrs r7, r2 + 8000b48: 409c lsls r4, r3 + 8000b4a: ea4f 4e1c mov.w lr, ip, lsr #16 + 8000b4e: fa1f f58c uxth.w r5, ip + 8000b52: fbb7 f1fe udiv r1, r7, lr + 8000b56: 0c22 lsrs r2, r4, #16 + 8000b58: fb0e 7711 mls r7, lr, r1, r7 + 8000b5c: ea42 4207 orr.w r2, r2, r7, lsl #16 + 8000b60: fb01 f005 mul.w r0, r1, r5 + 8000b64: 4290 cmp r0, r2 + 8000b66: d90a bls.n 8000b7e <__udivmoddi4+0x62> + 8000b68: eb1c 0202 adds.w r2, ip, r2 + 8000b6c: f101 37ff add.w r7, r1, #4294967295 + 8000b70: f080 811c bcs.w 8000dac <__udivmoddi4+0x290> + 8000b74: 4290 cmp r0, r2 + 8000b76: f240 8119 bls.w 8000dac <__udivmoddi4+0x290> + 8000b7a: 3902 subs r1, #2 + 8000b7c: 4462 add r2, ip + 8000b7e: 1a12 subs r2, r2, r0 + 8000b80: b2a4 uxth r4, r4 + 8000b82: fbb2 f0fe udiv r0, r2, lr + 8000b86: fb0e 2210 mls r2, lr, r0, r2 + 8000b8a: ea44 4402 orr.w r4, r4, r2, lsl #16 + 8000b8e: fb00 f505 mul.w r5, r0, r5 + 8000b92: 42a5 cmp r5, r4 + 8000b94: d90a bls.n 8000bac <__udivmoddi4+0x90> + 8000b96: eb1c 0404 adds.w r4, ip, r4 + 8000b9a: f100 32ff add.w r2, r0, #4294967295 + 8000b9e: f080 8107 bcs.w 8000db0 <__udivmoddi4+0x294> + 8000ba2: 42a5 cmp r5, r4 + 8000ba4: f240 8104 bls.w 8000db0 <__udivmoddi4+0x294> + 8000ba8: 4464 add r4, ip + 8000baa: 3802 subs r0, #2 + 8000bac: ea40 4001 orr.w r0, r0, r1, lsl #16 + 8000bb0: 1b64 subs r4, r4, r5 + 8000bb2: 2100 movs r1, #0 + 8000bb4: b11e cbz r6, 8000bbe <__udivmoddi4+0xa2> + 8000bb6: 40dc lsrs r4, r3 + 8000bb8: 2300 movs r3, #0 + 8000bba: e9c6 4300 strd r4, r3, [r6] + 8000bbe: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + 8000bc2: 428b cmp r3, r1 + 8000bc4: d908 bls.n 8000bd8 <__udivmoddi4+0xbc> + 8000bc6: 2e00 cmp r6, #0 + 8000bc8: f000 80ed beq.w 8000da6 <__udivmoddi4+0x28a> + 8000bcc: 2100 movs r1, #0 + 8000bce: e9c6 0500 strd r0, r5, [r6] + 8000bd2: 4608 mov r0, r1 + 8000bd4: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + 8000bd8: fab3 f183 clz r1, r3 + 8000bdc: 2900 cmp r1, #0 + 8000bde: d149 bne.n 8000c74 <__udivmoddi4+0x158> + 8000be0: 42ab cmp r3, r5 + 8000be2: d302 bcc.n 8000bea <__udivmoddi4+0xce> + 8000be4: 4282 cmp r2, r0 + 8000be6: f200 80f8 bhi.w 8000dda <__udivmoddi4+0x2be> + 8000bea: 1a84 subs r4, r0, r2 + 8000bec: eb65 0203 sbc.w r2, r5, r3 + 8000bf0: 2001 movs r0, #1 + 8000bf2: 4617 mov r7, r2 + 8000bf4: 2e00 cmp r6, #0 + 8000bf6: d0e2 beq.n 8000bbe <__udivmoddi4+0xa2> + 8000bf8: e9c6 4700 strd r4, r7, [r6] + 8000bfc: e7df b.n 8000bbe <__udivmoddi4+0xa2> + 8000bfe: b902 cbnz r2, 8000c02 <__udivmoddi4+0xe6> + 8000c00: deff udf #255 ; 0xff + 8000c02: fab2 f382 clz r3, r2 + 8000c06: 2b00 cmp r3, #0 + 8000c08: f040 8090 bne.w 8000d2c <__udivmoddi4+0x210> + 8000c0c: 1a8a subs r2, r1, r2 + 8000c0e: ea4f 471c mov.w r7, ip, lsr #16 + 8000c12: fa1f fe8c uxth.w lr, ip + 8000c16: 2101 movs r1, #1 + 8000c18: fbb2 f5f7 udiv r5, r2, r7 + 8000c1c: fb07 2015 mls r0, r7, r5, r2 + 8000c20: 0c22 lsrs r2, r4, #16 + 8000c22: ea42 4200 orr.w r2, r2, r0, lsl #16 + 8000c26: fb0e f005 mul.w r0, lr, r5 + 8000c2a: 4290 cmp r0, r2 + 8000c2c: d908 bls.n 8000c40 <__udivmoddi4+0x124> + 8000c2e: eb1c 0202 adds.w r2, ip, r2 + 8000c32: f105 38ff add.w r8, r5, #4294967295 + 8000c36: d202 bcs.n 8000c3e <__udivmoddi4+0x122> + 8000c38: 4290 cmp r0, r2 + 8000c3a: f200 80cb bhi.w 8000dd4 <__udivmoddi4+0x2b8> + 8000c3e: 4645 mov r5, r8 + 8000c40: 1a12 subs r2, r2, r0 + 8000c42: b2a4 uxth r4, r4 + 8000c44: fbb2 f0f7 udiv r0, r2, r7 + 8000c48: fb07 2210 mls r2, r7, r0, r2 + 8000c4c: ea44 4402 orr.w r4, r4, r2, lsl #16 + 8000c50: fb0e fe00 mul.w lr, lr, r0 + 8000c54: 45a6 cmp lr, r4 + 8000c56: d908 bls.n 8000c6a <__udivmoddi4+0x14e> + 8000c58: eb1c 0404 adds.w r4, ip, r4 + 8000c5c: f100 32ff add.w r2, r0, #4294967295 + 8000c60: d202 bcs.n 8000c68 <__udivmoddi4+0x14c> + 8000c62: 45a6 cmp lr, r4 + 8000c64: f200 80bb bhi.w 8000dde <__udivmoddi4+0x2c2> + 8000c68: 4610 mov r0, r2 + 8000c6a: eba4 040e sub.w r4, r4, lr + 8000c6e: ea40 4005 orr.w r0, r0, r5, lsl #16 + 8000c72: e79f b.n 8000bb4 <__udivmoddi4+0x98> + 8000c74: f1c1 0720 rsb r7, r1, #32 + 8000c78: 408b lsls r3, r1 + 8000c7a: fa22 fc07 lsr.w ip, r2, r7 + 8000c7e: ea4c 0c03 orr.w ip, ip, r3 + 8000c82: fa05 f401 lsl.w r4, r5, r1 + 8000c86: fa20 f307 lsr.w r3, r0, r7 + 8000c8a: 40fd lsrs r5, r7 + 8000c8c: ea4f 491c mov.w r9, ip, lsr #16 + 8000c90: 4323 orrs r3, r4 + 8000c92: fbb5 f8f9 udiv r8, r5, r9 + 8000c96: fa1f fe8c uxth.w lr, ip + 8000c9a: fb09 5518 mls r5, r9, r8, r5 + 8000c9e: 0c1c lsrs r4, r3, #16 + 8000ca0: ea44 4405 orr.w r4, r4, r5, lsl #16 + 8000ca4: fb08 f50e mul.w r5, r8, lr + 8000ca8: 42a5 cmp r5, r4 + 8000caa: fa02 f201 lsl.w r2, r2, r1 + 8000cae: fa00 f001 lsl.w r0, r0, r1 + 8000cb2: d90b bls.n 8000ccc <__udivmoddi4+0x1b0> + 8000cb4: eb1c 0404 adds.w r4, ip, r4 + 8000cb8: f108 3aff add.w sl, r8, #4294967295 + 8000cbc: f080 8088 bcs.w 8000dd0 <__udivmoddi4+0x2b4> + 8000cc0: 42a5 cmp r5, r4 + 8000cc2: f240 8085 bls.w 8000dd0 <__udivmoddi4+0x2b4> + 8000cc6: f1a8 0802 sub.w r8, r8, #2 + 8000cca: 4464 add r4, ip + 8000ccc: 1b64 subs r4, r4, r5 + 8000cce: b29d uxth r5, r3 + 8000cd0: fbb4 f3f9 udiv r3, r4, r9 + 8000cd4: fb09 4413 mls r4, r9, r3, r4 + 8000cd8: ea45 4404 orr.w r4, r5, r4, lsl #16 + 8000cdc: fb03 fe0e mul.w lr, r3, lr + 8000ce0: 45a6 cmp lr, r4 + 8000ce2: d908 bls.n 8000cf6 <__udivmoddi4+0x1da> + 8000ce4: eb1c 0404 adds.w r4, ip, r4 + 8000ce8: f103 35ff add.w r5, r3, #4294967295 + 8000cec: d26c bcs.n 8000dc8 <__udivmoddi4+0x2ac> + 8000cee: 45a6 cmp lr, r4 + 8000cf0: d96a bls.n 8000dc8 <__udivmoddi4+0x2ac> + 8000cf2: 3b02 subs r3, #2 + 8000cf4: 4464 add r4, ip + 8000cf6: ea43 4308 orr.w r3, r3, r8, lsl #16 + 8000cfa: fba3 9502 umull r9, r5, r3, r2 + 8000cfe: eba4 040e sub.w r4, r4, lr + 8000d02: 42ac cmp r4, r5 + 8000d04: 46c8 mov r8, r9 + 8000d06: 46ae mov lr, r5 + 8000d08: d356 bcc.n 8000db8 <__udivmoddi4+0x29c> + 8000d0a: d053 beq.n 8000db4 <__udivmoddi4+0x298> + 8000d0c: b156 cbz r6, 8000d24 <__udivmoddi4+0x208> + 8000d0e: ebb0 0208 subs.w r2, r0, r8 + 8000d12: eb64 040e sbc.w r4, r4, lr + 8000d16: fa04 f707 lsl.w r7, r4, r7 + 8000d1a: 40ca lsrs r2, r1 + 8000d1c: 40cc lsrs r4, r1 + 8000d1e: 4317 orrs r7, r2 + 8000d20: e9c6 7400 strd r7, r4, [r6] + 8000d24: 4618 mov r0, r3 + 8000d26: 2100 movs r1, #0 + 8000d28: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + 8000d2c: f1c3 0120 rsb r1, r3, #32 + 8000d30: fa02 fc03 lsl.w ip, r2, r3 + 8000d34: fa20 f201 lsr.w r2, r0, r1 + 8000d38: fa25 f101 lsr.w r1, r5, r1 + 8000d3c: 409d lsls r5, r3 + 8000d3e: 432a orrs r2, r5 + 8000d40: ea4f 471c mov.w r7, ip, lsr #16 + 8000d44: fa1f fe8c uxth.w lr, ip + 8000d48: fbb1 f0f7 udiv r0, r1, r7 + 8000d4c: fb07 1510 mls r5, r7, r0, r1 + 8000d50: 0c11 lsrs r1, r2, #16 + 8000d52: ea41 4105 orr.w r1, r1, r5, lsl #16 + 8000d56: fb00 f50e mul.w r5, r0, lr + 8000d5a: 428d cmp r5, r1 + 8000d5c: fa04 f403 lsl.w r4, r4, r3 + 8000d60: d908 bls.n 8000d74 <__udivmoddi4+0x258> + 8000d62: eb1c 0101 adds.w r1, ip, r1 + 8000d66: f100 38ff add.w r8, r0, #4294967295 + 8000d6a: d22f bcs.n 8000dcc <__udivmoddi4+0x2b0> + 8000d6c: 428d cmp r5, r1 + 8000d6e: d92d bls.n 8000dcc <__udivmoddi4+0x2b0> + 8000d70: 3802 subs r0, #2 + 8000d72: 4461 add r1, ip + 8000d74: 1b49 subs r1, r1, r5 + 8000d76: b292 uxth r2, r2 + 8000d78: fbb1 f5f7 udiv r5, r1, r7 + 8000d7c: fb07 1115 mls r1, r7, r5, r1 + 8000d80: ea42 4201 orr.w r2, r2, r1, lsl #16 + 8000d84: fb05 f10e mul.w r1, r5, lr + 8000d88: 4291 cmp r1, r2 + 8000d8a: d908 bls.n 8000d9e <__udivmoddi4+0x282> + 8000d8c: eb1c 0202 adds.w r2, ip, r2 + 8000d90: f105 38ff add.w r8, r5, #4294967295 + 8000d94: d216 bcs.n 8000dc4 <__udivmoddi4+0x2a8> + 8000d96: 4291 cmp r1, r2 + 8000d98: d914 bls.n 8000dc4 <__udivmoddi4+0x2a8> + 8000d9a: 3d02 subs r5, #2 + 8000d9c: 4462 add r2, ip + 8000d9e: 1a52 subs r2, r2, r1 + 8000da0: ea45 4100 orr.w r1, r5, r0, lsl #16 + 8000da4: e738 b.n 8000c18 <__udivmoddi4+0xfc> + 8000da6: 4631 mov r1, r6 + 8000da8: 4630 mov r0, r6 + 8000daa: e708 b.n 8000bbe <__udivmoddi4+0xa2> + 8000dac: 4639 mov r1, r7 + 8000dae: e6e6 b.n 8000b7e <__udivmoddi4+0x62> + 8000db0: 4610 mov r0, r2 + 8000db2: e6fb b.n 8000bac <__udivmoddi4+0x90> + 8000db4: 4548 cmp r0, r9 + 8000db6: d2a9 bcs.n 8000d0c <__udivmoddi4+0x1f0> + 8000db8: ebb9 0802 subs.w r8, r9, r2 + 8000dbc: eb65 0e0c sbc.w lr, r5, ip + 8000dc0: 3b01 subs r3, #1 + 8000dc2: e7a3 b.n 8000d0c <__udivmoddi4+0x1f0> + 8000dc4: 4645 mov r5, r8 + 8000dc6: e7ea b.n 8000d9e <__udivmoddi4+0x282> + 8000dc8: 462b mov r3, r5 + 8000dca: e794 b.n 8000cf6 <__udivmoddi4+0x1da> + 8000dcc: 4640 mov r0, r8 + 8000dce: e7d1 b.n 8000d74 <__udivmoddi4+0x258> + 8000dd0: 46d0 mov r8, sl + 8000dd2: e77b b.n 8000ccc <__udivmoddi4+0x1b0> + 8000dd4: 3d02 subs r5, #2 + 8000dd6: 4462 add r2, ip + 8000dd8: e732 b.n 8000c40 <__udivmoddi4+0x124> + 8000dda: 4608 mov r0, r1 + 8000ddc: e70a b.n 8000bf4 <__udivmoddi4+0xd8> + 8000dde: 4464 add r4, ip + 8000de0: 3802 subs r0, #2 + 8000de2: e742 b.n 8000c6a <__udivmoddi4+0x14e> + +08000de4 <__aeabi_idiv0>: + 8000de4: 4770 bx lr + 8000de6: bf00 nop + +08000de8 : + specified, or call vTaskDelay()). If the application makes use of the + vTaskDelete() API function (as this demo application does) then it is also + important that vApplicationIdleHook() is permitted to return to its calling + function, because it is the responsibility of the idle task to clean up + memory allocated by the kernel to any task that has since been deleted. */ + vTaskSetApplicationTaskTag(NULL, IdleTaskHook); + 8000de8: 4901 ldr r1, [pc, #4] ; (8000df0 ) + 8000dea: 2000 movs r0, #0 + 8000dec: f00a b81c b.w 800ae28 + 8000df0: 080029a9 .word 0x080029a9 + +08000df4 : + * @param argument: Not used + * @retval None + */ +/* USER CODE END Header_StartDefaultTask */ +void StartDefaultTask(void *argument) +{ + 8000df4: b508 push {r3, lr} + /* init code for LWIP */ + MX_LWIP_Init(); + 8000df6: f001 f845 bl 8001e84 + /* USER CODE BEGIN 5 */ + /* Infinite loop */ + for(;;) + { + osDelay(100); + 8000dfa: 2064 movs r0, #100 ; 0x64 + 8000dfc: f008 fa0a bl 8009214 + for(;;) + 8000e00: e7fb b.n 8000dfa + ... + +08000e04 : +* @param argument: Not used +* @retval None +*/ +/* USER CODE END Header_StartTask04 */ +void StartTask04(void *argument) +{ + 8000e04: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} + { + pwm_dyc[cnt_u8] = 0xFFFF; // Set all PWMs to max value upon startup + } + + // Start all PWM outputs + HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); + 8000e08: f8df 80bc ldr.w r8, [pc, #188] ; 8000ec8 + pwm_dyc[cnt_u8] = 0xFFFF; // Set all PWMs to max value upon startup + 8000e0c: 2210 movs r2, #16 + 8000e0e: 21ff movs r1, #255 ; 0xff + 8000e10: 4828 ldr r0, [pc, #160] ; (8000eb4 ) + 8000e12: f033 fdd3 bl 80349bc + HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2); + HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_3); + 8000e16: 4f28 ldr r7, [pc, #160] ; (8000eb8 ) + HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); + 8000e18: 2100 movs r1, #0 + 8000e1a: 4640 mov r0, r8 + 8000e1c: f008 f83a bl 8008e94 + HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2); + 8000e20: 2104 movs r1, #4 + 8000e22: 4640 mov r0, r8 + HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_4); + HAL_TIM_PWM_Start(&htim5, TIM_CHANNEL_1); + 8000e24: 4e25 ldr r6, [pc, #148] ; (8000ebc ) + HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2); + 8000e26: f008 f835 bl 8008e94 + HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_3); + 8000e2a: 2108 movs r1, #8 + 8000e2c: 4638 mov r0, r7 + HAL_TIM_PWM_Start(&htim5, TIM_CHANNEL_4); + HAL_TIM_PWM_Start(&htim12, TIM_CHANNEL_1); + 8000e2e: 4d24 ldr r5, [pc, #144] ; (8000ec0 ) + HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_3); + 8000e30: f008 f830 bl 8008e94 + HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_4); + 8000e34: 210c movs r1, #12 + 8000e36: 4638 mov r0, r7 + + /* Infinite loop */ + for(;;) + { + // Update PWMs + __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, pwm_dyc[0]); + 8000e38: 4c1e ldr r4, [pc, #120] ; (8000eb4 ) + HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_4); + 8000e3a: f008 f82b bl 8008e94 + HAL_TIM_PWM_Start(&htim5, TIM_CHANNEL_1); + 8000e3e: 2100 movs r1, #0 + 8000e40: 4630 mov r0, r6 + __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_2, ((uint16_t)0xFFFF) - pwm_dyc[1]); + 8000e42: f64f 79ff movw r9, #65535 ; 0xffff + HAL_TIM_PWM_Start(&htim5, TIM_CHANNEL_1); + 8000e46: f008 f825 bl 8008e94 + HAL_TIM_PWM_Start(&htim5, TIM_CHANNEL_4); + 8000e4a: 210c movs r1, #12 + 8000e4c: 4630 mov r0, r6 + 8000e4e: f008 f821 bl 8008e94 + HAL_TIM_PWM_Start(&htim12, TIM_CHANNEL_1); + 8000e52: 2100 movs r1, #0 + 8000e54: 4628 mov r0, r5 + 8000e56: f008 f81d bl 8008e94 + HAL_TIM_PWM_Start(&htim12, TIM_CHANNEL_2); + 8000e5a: 2104 movs r1, #4 + 8000e5c: 4628 mov r0, r5 + 8000e5e: f008 f819 bl 8008e94 + pwm_period[0] = htim1.Init.Period; + 8000e62: 4b18 ldr r3, [pc, #96] ; (8000ec4 ) + 8000e64: f8b8 200c ldrh.w r2, [r8, #12] + 8000e68: 801a strh r2, [r3, #0] + pwm_period[1] = htim1.Init.Period; + 8000e6a: 805a strh r2, [r3, #2] + pwm_period[2] = htim4.Init.Period; + 8000e6c: 89ba ldrh r2, [r7, #12] + 8000e6e: 809a strh r2, [r3, #4] + pwm_period[3] = htim4.Init.Period; + 8000e70: 80da strh r2, [r3, #6] + pwm_period[4] = htim5.Init.Period; + 8000e72: 89b2 ldrh r2, [r6, #12] + 8000e74: 811a strh r2, [r3, #8] + pwm_period[5] = htim5.Init.Period; + 8000e76: 815a strh r2, [r3, #10] + pwm_period[6] = htim12.Init.Period; + 8000e78: 89aa ldrh r2, [r5, #12] + 8000e7a: 819a strh r2, [r3, #12] + pwm_period[7] = htim12.Init.Period; + 8000e7c: 81da strh r2, [r3, #14] + __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, pwm_dyc[0]); + 8000e7e: f8d8 2000 ldr.w r2, [r8] + __HAL_TIM_SET_COMPARE(&htim5, TIM_CHANNEL_1, pwm_dyc[4]); + __HAL_TIM_SET_COMPARE(&htim5, TIM_CHANNEL_4, pwm_dyc[5]); + __HAL_TIM_SET_COMPARE(&htim12, TIM_CHANNEL_1, pwm_dyc[6]); + __HAL_TIM_SET_COMPARE(&htim12, TIM_CHANNEL_2, pwm_dyc[7]); + + osDelay(1); + 8000e82: 2001 movs r0, #1 + __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, pwm_dyc[0]); + 8000e84: 8823 ldrh r3, [r4, #0] + 8000e86: 6353 str r3, [r2, #52] ; 0x34 + __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_2, ((uint16_t)0xFFFF) - pwm_dyc[1]); + 8000e88: 8863 ldrh r3, [r4, #2] + 8000e8a: eba9 0303 sub.w r3, r9, r3 + 8000e8e: 6393 str r3, [r2, #56] ; 0x38 + __HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_3, pwm_dyc[2]); + 8000e90: 683b ldr r3, [r7, #0] + 8000e92: 88a2 ldrh r2, [r4, #4] + 8000e94: 63da str r2, [r3, #60] ; 0x3c + __HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_4, pwm_dyc[3]); + 8000e96: 88e2 ldrh r2, [r4, #6] + 8000e98: 641a str r2, [r3, #64] ; 0x40 + __HAL_TIM_SET_COMPARE(&htim5, TIM_CHANNEL_1, pwm_dyc[4]); + 8000e9a: 6833 ldr r3, [r6, #0] + 8000e9c: 8922 ldrh r2, [r4, #8] + 8000e9e: 635a str r2, [r3, #52] ; 0x34 + __HAL_TIM_SET_COMPARE(&htim5, TIM_CHANNEL_4, pwm_dyc[5]); + 8000ea0: 8962 ldrh r2, [r4, #10] + 8000ea2: 641a str r2, [r3, #64] ; 0x40 + __HAL_TIM_SET_COMPARE(&htim12, TIM_CHANNEL_1, pwm_dyc[6]); + 8000ea4: 682b ldr r3, [r5, #0] + 8000ea6: 89a2 ldrh r2, [r4, #12] + 8000ea8: 635a str r2, [r3, #52] ; 0x34 + __HAL_TIM_SET_COMPARE(&htim12, TIM_CHANNEL_2, pwm_dyc[7]); + 8000eaa: 89e2 ldrh r2, [r4, #14] + 8000eac: 639a str r2, [r3, #56] ; 0x38 + osDelay(1); + 8000eae: f008 f9b1 bl 8009214 + for(;;) + 8000eb2: e7e4 b.n 8000e7e + 8000eb4: 200005c8 .word 0x200005c8 + 8000eb8: 20000530 .word 0x20000530 + 8000ebc: 2000057c .word 0x2000057c + 8000ec0: 200004e4 .word 0x200004e4 + 8000ec4: 200005d8 .word 0x200005d8 + 8000ec8: 20000498 .word 0x20000498 + +08000ecc : +{ + 8000ecc: b510 push {r4, lr} + 8000ece: b094 sub sp, #80 ; 0x50 + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + 8000ed0: 2210 movs r2, #16 + 8000ed2: 2100 movs r1, #0 + RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; + 8000ed4: 2402 movs r4, #2 + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + 8000ed6: a80a add r0, sp, #40 ; 0x28 + 8000ed8: f033 fd70 bl 80349bc + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + 8000edc: 2214 movs r2, #20 + 8000ede: 2100 movs r1, #0 + 8000ee0: a803 add r0, sp, #12 + 8000ee2: f033 fd6b bl 80349bc + __HAL_RCC_PWR_CLK_ENABLE(); + 8000ee6: 4b1d ldr r3, [pc, #116] ; (8000f5c ) + RCC_OscInitStruct.PLL.PLLN = 432; + 8000ee8: 2119 movs r1, #25 + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + 8000eea: a808 add r0, sp, #32 + __HAL_RCC_PWR_CLK_ENABLE(); + 8000eec: 6c1a ldr r2, [r3, #64] ; 0x40 + 8000eee: f042 5280 orr.w r2, r2, #268435456 ; 0x10000000 + 8000ef2: 641a str r2, [r3, #64] ; 0x40 + 8000ef4: 6c1b ldr r3, [r3, #64] ; 0x40 + 8000ef6: f003 5380 and.w r3, r3, #268435456 ; 0x10000000 + 8000efa: 9301 str r3, [sp, #4] + 8000efc: 9b01 ldr r3, [sp, #4] + __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); + 8000efe: 4b18 ldr r3, [pc, #96] ; (8000f60 ) + 8000f00: 681a ldr r2, [r3, #0] + 8000f02: f442 4240 orr.w r2, r2, #49152 ; 0xc000 + 8000f06: 601a str r2, [r3, #0] + RCC_OscInitStruct.HSEState = RCC_HSE_ON; + 8000f08: 2201 movs r2, #1 + __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); + 8000f0a: 681b ldr r3, [r3, #0] + 8000f0c: f403 4340 and.w r3, r3, #49152 ; 0xc000 + 8000f10: 9302 str r3, [sp, #8] + 8000f12: 9b02 ldr r3, [sp, #8] + RCC_OscInitStruct.HSEState = RCC_HSE_ON; + 8000f14: f44f 3380 mov.w r3, #65536 ; 0x10000 + 8000f18: e9cd 2308 strd r2, r3, [sp, #32] + RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; + 8000f1c: f44f 0380 mov.w r3, #4194304 ; 0x400000 + 8000f20: e9cd 430e strd r4, r3, [sp, #56] ; 0x38 + RCC_OscInitStruct.PLL.PLLN = 432; + 8000f24: f44f 73d8 mov.w r3, #432 ; 0x1b0 + RCC_OscInitStruct.PLL.PLLQ = 2; + 8000f28: e9cd 4412 strd r4, r4, [sp, #72] ; 0x48 + RCC_OscInitStruct.PLL.PLLN = 432; + 8000f2c: e9cd 1310 strd r1, r3, [sp, #64] ; 0x40 + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + 8000f30: f006 fd82 bl 8007a38 + if (HAL_PWREx_EnableOverDrive() != HAL_OK) + 8000f34: f006 fa24 bl 8007380 + RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK + 8000f38: 230f movs r3, #15 + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4; + 8000f3a: 2000 movs r0, #0 + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_7) != HAL_OK) + 8000f3c: 2107 movs r1, #7 + RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; + 8000f3e: e9cd 3403 strd r3, r4, [sp, #12] + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4; + 8000f42: f44f 53a0 mov.w r3, #5120 ; 0x1400 + 8000f46: e9cd 0305 strd r0, r3, [sp, #20] + RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2; + 8000f4a: f44f 5380 mov.w r3, #4096 ; 0x1000 + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_7) != HAL_OK) + 8000f4e: a803 add r0, sp, #12 + RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2; + 8000f50: 9307 str r3, [sp, #28] + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_7) != HAL_OK) + 8000f52: f006 ff59 bl 8007e08 +} + 8000f56: b014 add sp, #80 ; 0x50 + 8000f58: bd10 pop {r4, pc} + 8000f5a: bf00 nop + 8000f5c: 40023800 .word 0x40023800 + 8000f60: 40007000 .word 0x40007000 + +08000f64
: +{ + 8000f64: e92d 4880 stmdb sp!, {r7, fp, lr} + 8000f68: b0a9 sub sp, #164 ; 0xa4 + \details Acts as a special kind of Data Memory Barrier. + It completes when all explicit memory accesses before this instruction complete. + */ +__STATIC_FORCEINLINE void __DSB(void) +{ + __ASM volatile ("dsb 0xF":::"memory"); + 8000f6a: f3bf 8f4f dsb sy + __ASM volatile ("isb 0xF":::"memory"); + 8000f6e: f3bf 8f6f isb sy +__STATIC_INLINE void SCB_EnableICache (void) +{ + #if defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U) + __DSB(); + __ISB(); + SCB->ICIALLU = 0UL; /* invalidate I-Cache */ + 8000f72: 4ac5 ldr r2, [pc, #788] ; (8001288 ) + 8000f74: 2100 movs r1, #0 + 8000f76: f8c2 1250 str.w r1, [r2, #592] ; 0x250 + __ASM volatile ("dsb 0xF":::"memory"); + 8000f7a: f3bf 8f4f dsb sy + __ASM volatile ("isb 0xF":::"memory"); + 8000f7e: f3bf 8f6f isb sy + __DSB(); + __ISB(); + SCB->CCR |= (uint32_t)SCB_CCR_IC_Msk; /* enable I-Cache */ + 8000f82: 6953 ldr r3, [r2, #20] + 8000f84: f443 3300 orr.w r3, r3, #131072 ; 0x20000 + 8000f88: 6153 str r3, [r2, #20] + __ASM volatile ("dsb 0xF":::"memory"); + 8000f8a: f3bf 8f4f dsb sy + __ASM volatile ("isb 0xF":::"memory"); + 8000f8e: f3bf 8f6f isb sy + #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + uint32_t ccsidr; + uint32_t sets; + uint32_t ways; + + SCB->CSSELR = 0U; /*(0U << 1U) | 0U;*/ /* Level 1 data cache */ + 8000f92: f8c2 1084 str.w r1, [r2, #132] ; 0x84 + __ASM volatile ("dsb 0xF":::"memory"); + 8000f96: f3bf 8f4f dsb sy + __DSB(); + + ccsidr = SCB->CCSIDR; + 8000f9a: f8d2 3080 ldr.w r3, [r2, #128] ; 0x80 + /* invalidate D-Cache */ + sets = (uint32_t)(CCSIDR_SETS(ccsidr)); + do { + ways = (uint32_t)(CCSIDR_WAYS(ccsidr)); + do { + SCB->DCISW = (((sets << SCB_DCISW_SET_Pos) & SCB_DCISW_SET_Msk) | + 8000f9e: f643 74e0 movw r4, #16352 ; 0x3fe0 + ways = (uint32_t)(CCSIDR_WAYS(ccsidr)); + 8000fa2: f3c3 00c9 ubfx r0, r3, #3, #10 + sets = (uint32_t)(CCSIDR_SETS(ccsidr)); + 8000fa6: f3c3 334e ubfx r3, r3, #13, #15 + 8000faa: 015b lsls r3, r3, #5 + SCB->DCISW = (((sets << SCB_DCISW_SET_Pos) & SCB_DCISW_SET_Msk) | + 8000fac: ea03 0604 and.w r6, r3, r4 + ways = (uint32_t)(CCSIDR_WAYS(ccsidr)); + 8000fb0: 4601 mov r1, r0 + SCB->DCISW = (((sets << SCB_DCISW_SET_Pos) & SCB_DCISW_SET_Msk) | + 8000fb2: ea46 7581 orr.w r5, r6, r1, lsl #30 + ((ways << SCB_DCISW_WAY_Pos) & SCB_DCISW_WAY_Msk) ); + #if defined ( __CC_ARM ) + __schedule_barrier(); + #endif + } while (ways-- != 0U); + 8000fb6: 3901 subs r1, #1 + SCB->DCISW = (((sets << SCB_DCISW_SET_Pos) & SCB_DCISW_SET_Msk) | + 8000fb8: f8c2 5260 str.w r5, [r2, #608] ; 0x260 + } while (ways-- != 0U); + 8000fbc: d2f9 bcs.n 8000fb2 + } while(sets-- != 0U); + 8000fbe: 3b20 subs r3, #32 + 8000fc0: f113 0f20 cmn.w r3, #32 + 8000fc4: d1f2 bne.n 8000fac + 8000fc6: f3bf 8f4f dsb sy + __DSB(); + + SCB->CCR |= (uint32_t)SCB_CCR_DC_Msk; /* enable D-Cache */ + 8000fca: 6953 ldr r3, [r2, #20] + 8000fcc: f443 3380 orr.w r3, r3, #65536 ; 0x10000 + 8000fd0: 6153 str r3, [r2, #20] + 8000fd2: f3bf 8f4f dsb sy + __ASM volatile ("isb 0xF":::"memory"); + 8000fd6: f3bf 8f6f isb sy + +/* MPU Configuration */ + +void MPU_Config(void) +{ + MPU_Region_InitTypeDef MPU_InitStruct = {0}; + 8000fda: 2710 movs r7, #16 + HAL_Init(); + 8000fdc: f004 fb0a bl 80055f4 + MPU_Region_InitTypeDef MPU_InitStruct = {0}; + 8000fe0: 2100 movs r1, #0 + 8000fe2: a81b add r0, sp, #108 ; 0x6c + 8000fe4: 463a mov r2, r7 + MPU_InitStruct.BaseAddress = 0x90000000; + MPU_InitStruct.Size = MPU_REGION_SIZE_256MB; + MPU_InitStruct.SubRegionDisable = 0x0; + MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL0; + MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS; + MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_ENABLE; + 8000fe6: 2400 movs r4, #0 + MPU_InitStruct.Enable = MPU_REGION_ENABLE; + 8000fe8: 2501 movs r5, #1 + MPU_Region_InitTypeDef MPU_InitStruct = {0}; + 8000fea: f033 fce7 bl 80349bc + HAL_MPU_Disable(); + 8000fee: f004 fb9b bl 8005728 + MPU_InitStruct.Size = MPU_REGION_SIZE_256MB; + 8000ff2: f04f 4210 mov.w r2, #2415919104 ; 0x90000000 + 8000ff6: 4ba5 ldr r3, [pc, #660] ; (800128c ) + MPU_InitStruct.IsShareable = MPU_ACCESS_NOT_SHAREABLE; + MPU_InitStruct.IsCacheable = MPU_ACCESS_NOT_CACHEABLE; + MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE; + + HAL_MPU_ConfigRegion(&MPU_InitStruct); + 8000ff8: a81b add r0, sp, #108 ; 0x6c + MPU_InitStruct.Enable = MPU_REGION_ENABLE; + 8000ffa: f8ad 506c strh.w r5, [sp, #108] ; 0x6c + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + 8000ffe: f04f 0b03 mov.w fp, #3 + MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_ENABLE; + 8001002: 941e str r4, [sp, #120] ; 0x78 + GPIO_InitStruct.Pin = LCD_DISP_Pin; + 8001004: f44f 5980 mov.w r9, #4096 ; 0x1000 + GPIO_InitStruct.Pin = MCU_ACTIVE_Pin; + 8001008: f04f 0a40 mov.w sl, #64 ; 0x40 + hdma2d.Instance = DMA2D; + 800100c: 4ea0 ldr r6, [pc, #640] ; (8001290 ) + hsdram1.Init.RowBitsNumber = FMC_SDRAM_ROW_BITS_NUM_12; + 800100e: f04f 0804 mov.w r8, #4 + MPU_InitStruct.Size = MPU_REGION_SIZE_256MB; + 8001012: e9cd 231c strd r2, r3, [sp, #112] ; 0x70 + HAL_MPU_ConfigRegion(&MPU_InitStruct); + 8001016: f004 fba5 bl 8005764 + + /** Initializes and configures the Region and the memory to be protected + */ + MPU_InitStruct.Number = MPU_REGION_NUMBER1; + MPU_InitStruct.Size = MPU_REGION_SIZE_16MB; + 800101a: 2317 movs r3, #23 + MPU_InitStruct.IsCacheable = MPU_ACCESS_CACHEABLE; + + HAL_MPU_ConfigRegion(&MPU_InitStruct); + 800101c: a81b add r0, sp, #108 ; 0x6c + MPU_InitStruct.Number = MPU_REGION_NUMBER1; + 800101e: f88d 506d strb.w r5, [sp, #109] ; 0x6d + MPU_InitStruct.Size = MPU_REGION_SIZE_16MB; + 8001022: f88d 3074 strb.w r3, [sp, #116] ; 0x74 + MPU_InitStruct.IsCacheable = MPU_ACCESS_CACHEABLE; + 8001026: f88d 507a strb.w r5, [sp, #122] ; 0x7a + HAL_MPU_ConfigRegion(&MPU_InitStruct); + 800102a: f004 fb9b bl 8005764 + /* Enables the MPU */ + HAL_MPU_Enable(MPU_PRIVILEGED_DEFAULT); + 800102e: 2004 movs r0, #4 + 8001030: f004 fb88 bl 8005744 + SystemClock_Config(); + 8001034: f7ff ff4a bl 8000ecc + GPIO_InitTypeDef GPIO_InitStruct = {0}; + 8001038: 2214 movs r2, #20 + 800103a: 4621 mov r1, r4 + 800103c: a81b add r0, sp, #108 ; 0x6c + 800103e: f033 fcbd bl 80349bc + __HAL_RCC_GPIOE_CLK_ENABLE(); + 8001042: 4b94 ldr r3, [pc, #592] ; (8001294 ) + HAL_GPIO_WritePin(VSYNC_FREQ_GPIO_Port, VSYNC_FREQ_Pin, GPIO_PIN_RESET); + 8001044: 4639 mov r1, r7 + 8001046: 4894 ldr r0, [pc, #592] ; (8001298 ) + __HAL_RCC_GPIOE_CLK_ENABLE(); + 8001048: 6b1a ldr r2, [r3, #48] ; 0x30 + 800104a: 433a orrs r2, r7 + 800104c: 631a str r2, [r3, #48] ; 0x30 + 800104e: 6b1a ldr r2, [r3, #48] ; 0x30 + 8001050: 403a ands r2, r7 + 8001052: 9202 str r2, [sp, #8] + 8001054: 9a02 ldr r2, [sp, #8] + __HAL_RCC_GPIOG_CLK_ENABLE(); + 8001056: 6b1a ldr r2, [r3, #48] ; 0x30 + 8001058: f042 0240 orr.w r2, r2, #64 ; 0x40 + 800105c: 631a str r2, [r3, #48] ; 0x30 + 800105e: 6b1a ldr r2, [r3, #48] ; 0x30 + 8001060: f002 0240 and.w r2, r2, #64 ; 0x40 + 8001064: 9203 str r2, [sp, #12] + 8001066: 9a03 ldr r2, [sp, #12] + __HAL_RCC_GPIOB_CLK_ENABLE(); + 8001068: 6b1a ldr r2, [r3, #48] ; 0x30 + 800106a: f042 0202 orr.w r2, r2, #2 + 800106e: 631a str r2, [r3, #48] ; 0x30 + 8001070: 6b1a ldr r2, [r3, #48] ; 0x30 + 8001072: f002 0202 and.w r2, r2, #2 + 8001076: 9204 str r2, [sp, #16] + 8001078: 9a04 ldr r2, [sp, #16] + __HAL_RCC_GPIOA_CLK_ENABLE(); + 800107a: 6b1a ldr r2, [r3, #48] ; 0x30 + 800107c: 432a orrs r2, r5 + 800107e: 631a str r2, [r3, #48] ; 0x30 + 8001080: 6b1a ldr r2, [r3, #48] ; 0x30 + 8001082: 402a ands r2, r5 + 8001084: 9205 str r2, [sp, #20] + 8001086: 9a05 ldr r2, [sp, #20] + __HAL_RCC_GPIOJ_CLK_ENABLE(); + 8001088: 6b1a ldr r2, [r3, #48] ; 0x30 + 800108a: f442 7200 orr.w r2, r2, #512 ; 0x200 + 800108e: 631a str r2, [r3, #48] ; 0x30 + 8001090: 6b1a ldr r2, [r3, #48] ; 0x30 + 8001092: f402 7200 and.w r2, r2, #512 ; 0x200 + 8001096: 9206 str r2, [sp, #24] + 8001098: 9a06 ldr r2, [sp, #24] + __HAL_RCC_GPIOD_CLK_ENABLE(); + 800109a: 6b1a ldr r2, [r3, #48] ; 0x30 + 800109c: f042 0208 orr.w r2, r2, #8 + 80010a0: 631a str r2, [r3, #48] ; 0x30 + 80010a2: 6b1a ldr r2, [r3, #48] ; 0x30 + 80010a4: f002 0208 and.w r2, r2, #8 + 80010a8: 9207 str r2, [sp, #28] + 80010aa: 9a07 ldr r2, [sp, #28] + __HAL_RCC_GPIOK_CLK_ENABLE(); + 80010ac: 6b1a ldr r2, [r3, #48] ; 0x30 + 80010ae: f442 6280 orr.w r2, r2, #1024 ; 0x400 + 80010b2: 631a str r2, [r3, #48] ; 0x30 + 80010b4: 6b1a ldr r2, [r3, #48] ; 0x30 + 80010b6: f402 6280 and.w r2, r2, #1024 ; 0x400 + 80010ba: 9208 str r2, [sp, #32] + 80010bc: 9a08 ldr r2, [sp, #32] + __HAL_RCC_GPIOF_CLK_ENABLE(); + 80010be: 6b1a ldr r2, [r3, #48] ; 0x30 + 80010c0: f042 0220 orr.w r2, r2, #32 + 80010c4: 631a str r2, [r3, #48] ; 0x30 + 80010c6: 6b1a ldr r2, [r3, #48] ; 0x30 + 80010c8: f002 0220 and.w r2, r2, #32 + 80010cc: 9209 str r2, [sp, #36] ; 0x24 + 80010ce: 9a09 ldr r2, [sp, #36] ; 0x24 + __HAL_RCC_GPIOI_CLK_ENABLE(); + 80010d0: 6b1a ldr r2, [r3, #48] ; 0x30 + 80010d2: f442 7280 orr.w r2, r2, #256 ; 0x100 + 80010d6: 631a str r2, [r3, #48] ; 0x30 + 80010d8: 6b1a ldr r2, [r3, #48] ; 0x30 + 80010da: f402 7280 and.w r2, r2, #256 ; 0x100 + 80010de: 920a str r2, [sp, #40] ; 0x28 + 80010e0: 9a0a ldr r2, [sp, #40] ; 0x28 + __HAL_RCC_GPIOH_CLK_ENABLE(); + 80010e2: 6b1a ldr r2, [r3, #48] ; 0x30 + 80010e4: f042 0280 orr.w r2, r2, #128 ; 0x80 + 80010e8: 631a str r2, [r3, #48] ; 0x30 + 80010ea: 6b1a ldr r2, [r3, #48] ; 0x30 + 80010ec: f002 0280 and.w r2, r2, #128 ; 0x80 + 80010f0: 920b str r2, [sp, #44] ; 0x2c + 80010f2: 9a0b ldr r2, [sp, #44] ; 0x2c + __HAL_RCC_GPIOC_CLK_ENABLE(); + 80010f4: 6b1a ldr r2, [r3, #48] ; 0x30 + 80010f6: f042 0204 orr.w r2, r2, #4 + 80010fa: 631a str r2, [r3, #48] ; 0x30 + HAL_GPIO_WritePin(VSYNC_FREQ_GPIO_Port, VSYNC_FREQ_Pin, GPIO_PIN_RESET); + 80010fc: 4622 mov r2, r4 + __HAL_RCC_GPIOC_CLK_ENABLE(); + 80010fe: 6b1b ldr r3, [r3, #48] ; 0x30 + 8001100: f003 0304 and.w r3, r3, #4 + 8001104: 930c str r3, [sp, #48] ; 0x30 + 8001106: 9b0c ldr r3, [sp, #48] ; 0x30 + HAL_GPIO_WritePin(VSYNC_FREQ_GPIO_Port, VSYNC_FREQ_Pin, GPIO_PIN_RESET); + 8001108: f005 fc0c bl 8006924 + HAL_GPIO_WritePin(LCD_BL_CTRL_GPIO_Port, LCD_BL_CTRL_Pin, GPIO_PIN_SET); + 800110c: 462a mov r2, r5 + 800110e: 2108 movs r1, #8 + 8001110: 4862 ldr r0, [pc, #392] ; (800129c ) + 8001112: f005 fc07 bl 8006924 + HAL_GPIO_WritePin(LCD_DISP_GPIO_Port, LCD_DISP_Pin, GPIO_PIN_SET); + 8001116: 462a mov r2, r5 + 8001118: f44f 5180 mov.w r1, #4096 ; 0x1000 + 800111c: 4860 ldr r0, [pc, #384] ; (80012a0 ) + 800111e: f005 fc01 bl 8006924 + HAL_GPIO_WritePin(GPIOC, FRAME_RATE_Pin|RENDER_TIME_Pin, GPIO_PIN_RESET); + 8001122: 4622 mov r2, r4 + 8001124: 21c0 movs r1, #192 ; 0xc0 + 8001126: 485f ldr r0, [pc, #380] ; (80012a4 ) + 8001128: f005 fbfc bl 8006924 + HAL_GPIO_WritePin(MCU_ACTIVE_GPIO_Port, MCU_ACTIVE_Pin, GPIO_PIN_RESET); + 800112c: 4622 mov r2, r4 + 800112e: 2140 movs r1, #64 ; 0x40 + 8001130: 485d ldr r0, [pc, #372] ; (80012a8 ) + 8001132: f005 fbf7 bl 8006924 + HAL_GPIO_Init(VSYNC_FREQ_GPIO_Port, &GPIO_InitStruct); + 8001136: a91b add r1, sp, #108 ; 0x6c + 8001138: 4857 ldr r0, [pc, #348] ; (8001298 ) + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + 800113a: f8cd b078 str.w fp, [sp, #120] ; 0x78 + GPIO_InitStruct.Pull = GPIO_NOPULL; + 800113e: 941d str r4, [sp, #116] ; 0x74 + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + 8001140: e9cd 751b strd r7, r5, [sp, #108] ; 0x6c + HAL_GPIO_Init(VSYNC_FREQ_GPIO_Port, &GPIO_InitStruct); + 8001144: f005 fa66 bl 8006614 + GPIO_InitStruct.Pin = LCD_BL_CTRL_Pin; + 8001148: 2308 movs r3, #8 + HAL_GPIO_Init(LCD_BL_CTRL_GPIO_Port, &GPIO_InitStruct); + 800114a: a91b add r1, sp, #108 ; 0x6c + 800114c: 4853 ldr r0, [pc, #332] ; (800129c ) + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + 800114e: e9cd 351b strd r3, r5, [sp, #108] ; 0x6c + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + 8001152: e9cd 441d strd r4, r4, [sp, #116] ; 0x74 + HAL_GPIO_Init(LCD_BL_CTRL_GPIO_Port, &GPIO_InitStruct); + 8001156: f005 fa5d bl 8006614 + HAL_GPIO_Init(LCD_DISP_GPIO_Port, &GPIO_InitStruct); + 800115a: a91b add r1, sp, #108 ; 0x6c + 800115c: 4850 ldr r0, [pc, #320] ; (80012a0 ) + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + 800115e: e9cd 951b strd r9, r5, [sp, #108] ; 0x6c + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + 8001162: e9cd 441d strd r4, r4, [sp, #116] ; 0x74 + HAL_GPIO_Init(LCD_DISP_GPIO_Port, &GPIO_InitStruct); + 8001166: f005 fa55 bl 8006614 + GPIO_InitStruct.Pin = FRAME_RATE_Pin|RENDER_TIME_Pin; + 800116a: 22c0 movs r2, #192 ; 0xc0 + HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); + 800116c: a91b add r1, sp, #108 ; 0x6c + 800116e: 484d ldr r0, [pc, #308] ; (80012a4 ) + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + 8001170: e9cd 251b strd r2, r5, [sp, #108] ; 0x6c + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + 8001174: e9cd 4b1d strd r4, fp, [sp, #116] ; 0x74 + HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); + 8001178: f005 fa4c bl 8006614 + HAL_GPIO_Init(MCU_ACTIVE_GPIO_Port, &GPIO_InitStruct); + 800117c: a91b add r1, sp, #108 ; 0x6c + 800117e: 484a ldr r0, [pc, #296] ; (80012a8 ) + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + 8001180: e9cd a51b strd sl, r5, [sp, #108] ; 0x6c + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + 8001184: e9cd 4b1d strd r4, fp, [sp, #116] ; 0x74 + HAL_GPIO_Init(MCU_ACTIVE_GPIO_Port, &GPIO_InitStruct); + 8001188: f005 fa44 bl 8006614 + hcrc.Instance = CRC; + 800118c: 4847 ldr r0, [pc, #284] ; (80012ac ) + 800118e: 4a48 ldr r2, [pc, #288] ; (80012b0 ) + hcrc.Init.DefaultPolynomialUse = DEFAULT_POLYNOMIAL_ENABLE; + 8001190: 8084 strh r4, [r0, #4] + hcrc.Instance = CRC; + 8001192: 6002 str r2, [r0, #0] + hcrc.InputDataFormat = CRC_INPUTDATA_FORMAT_BYTES; + 8001194: 6205 str r5, [r0, #32] + hcrc.Init.OutputDataInversionMode = CRC_OUTPUTDATA_INVERSION_DISABLE; + 8001196: e9c0 4405 strd r4, r4, [r0, #20] + if (HAL_CRC_Init(&hcrc) != HAL_OK) + 800119a: f004 fb0f bl 80057bc + hdma2d.Instance = DMA2D; + 800119e: 4a45 ldr r2, [pc, #276] ; (80012b4 ) + if (HAL_DMA2D_Init(&hdma2d) != HAL_OK) + 80011a0: 4630 mov r0, r6 + hdma2d.LayerCfg[1].InputColorMode = DMA2D_INPUT_ARGB8888; + 80011a2: e9c6 440a strd r4, r4, [r6, #40] ; 0x28 + hdma2d.LayerCfg[1].InputAlpha = 0; + 80011a6: e9c6 440c strd r4, r4, [r6, #48] ; 0x30 + hdma2d.Init.Mode = DMA2D_M2M; + 80011aa: e9c6 2400 strd r2, r4, [r6] + hdma2d.Init.OutputOffset = 0; + 80011ae: e9c6 4402 strd r4, r4, [r6, #8] + if (HAL_DMA2D_Init(&hdma2d) != HAL_OK) + 80011b2: f004 fba0 bl 80058f6 + if (HAL_DMA2D_ConfigLayer(&hdma2d, 1) != HAL_OK) + 80011b6: 4629 mov r1, r5 + 80011b8: 4630 mov r0, r6 + hsdram1.Instance = FMC_SDRAM_DEVICE; + 80011ba: 4e3f ldr r6, [pc, #252] ; (80012b8 ) + if (HAL_DMA2D_ConfigLayer(&hdma2d, 1) != HAL_OK) + 80011bc: f004 fc54 bl 8005a68 + hsdram1.Instance = FMC_SDRAM_DEVICE; + 80011c0: 4a3e ldr r2, [pc, #248] ; (80012bc ) + hsdram1.Init.InternalBankNumber = FMC_SDRAM_INTERN_BANKS_NUM_4; + 80011c2: f8c6 a014 str.w sl, [r6, #20] + SdramTiming.ExitSelfRefreshDelay = 7; + 80011c6: f04f 0a02 mov.w sl, #2 + if (HAL_SDRAM_Init(&hsdram1, &SdramTiming) != HAL_OK) + 80011ca: a91b add r1, sp, #108 ; 0x6c + 80011cc: 4630 mov r0, r6 + hsdram1.Init.ColumnBitsNumber = FMC_SDRAM_COLUMN_BITS_NUM_8; + 80011ce: 60b4 str r4, [r6, #8] + hsdram1.Init.ReadPipeDelay = FMC_SDRAM_RPIPE_DELAY_0; + 80011d0: 62b4 str r4, [r6, #40] ; 0x28 + SdramTiming.RCDDelay = 2; + 80011d2: f8cd a084 str.w sl, [sp, #132] ; 0x84 + hsdram1.Init.SDBank = FMC_SDRAM_BANK1; + 80011d6: e9c6 2400 strd r2, r4, [r6] + hsdram1.Init.CASLatency = FMC_SDRAM_CAS_LATENCY_3; + 80011da: f44f 72c0 mov.w r2, #384 ; 0x180 + hsdram1.Init.WriteProtection = FMC_SDRAM_WRITE_PROTECTION_DISABLE; + 80011de: e9c6 2406 strd r2, r4, [r6, #24] + hsdram1.Init.SDClockPeriod = FMC_SDRAM_CLOCK_PERIOD_2; + 80011e2: f44f 6200 mov.w r2, #2048 ; 0x800 + hsdram1.Init.ReadBurst = FMC_SDRAM_RBURST_ENABLE; + 80011e6: e9c6 2908 strd r2, r9, [r6, #32] + SdramTiming.ExitSelfRefreshDelay = 7; + 80011ea: 2207 movs r2, #7 + SdramTiming.RPDelay = 2; + 80011ec: e9cd ba1f strd fp, sl, [sp, #124] ; 0x7c + SdramTiming.ExitSelfRefreshDelay = 7; + 80011f0: e9cd a21b strd sl, r2, [sp, #108] ; 0x6c + hsdram1.Init.MemoryDataWidth = FMC_SDRAM_MEM_BUS_WIDTH_16; + 80011f4: e9c6 8703 strd r8, r7, [r6, #12] + SdramTiming.RowCycleDelay = 7; + 80011f8: e9cd 821d strd r8, r2, [sp, #116] ; 0x74 + if (HAL_SDRAM_Init(&hsdram1, &SdramTiming) != HAL_OK) + 80011fc: f007 f960 bl 80084c0 + Command.CommandMode = FMC_SDRAM_CMD_CLK_ENABLE; + 8001200: 492f ldr r1, [pc, #188] ; (80012c0 ) + HAL_SDRAM_SendCommand(&hsdram1, &Command, SDRAM_TIMEOUT); + 8001202: f64f 72ff movw r2, #65535 ; 0xffff + 8001206: 4630 mov r0, r6 + __IO uint32_t tmpmrd = 0; + 8001208: 9401 str r4, [sp, #4] + Command.CommandTarget = FMC_SDRAM_CMD_TARGET_BANK1; + 800120a: e9c1 5700 strd r5, r7, [r1] + Command.ModeRegisterDefinition = 0; + 800120e: e9c1 5402 strd r5, r4, [r1, #8] + HAL_SDRAM_SendCommand(&hsdram1, &Command, SDRAM_TIMEOUT); + 8001212: f007 f975 bl 8008500 + HAL_Delay(1); + 8001216: 4628 mov r0, r5 + 8001218: f004 fa10 bl 800563c + Command.CommandMode = FMC_SDRAM_CMD_PALL; + 800121c: 4928 ldr r1, [pc, #160] ; (80012c0 ) + HAL_SDRAM_SendCommand(&hsdram1, &Command, SDRAM_TIMEOUT); + 800121e: f64f 72ff movw r2, #65535 ; 0xffff + 8001222: 4630 mov r0, r6 + Command.CommandTarget = FMC_SDRAM_CMD_TARGET_BANK1; + 8001224: e9c1 a700 strd sl, r7, [r1] + Command.ModeRegisterDefinition = 0; + 8001228: e9c1 5402 strd r5, r4, [r1, #8] + HAL_SDRAM_SendCommand(&hsdram1, &Command, SDRAM_TIMEOUT); + 800122c: f007 f968 bl 8008500 + Command.AutoRefreshNumber = 8; + 8001230: 2308 movs r3, #8 + Command.CommandMode = FMC_SDRAM_CMD_AUTOREFRESH_MODE; + 8001232: 4923 ldr r1, [pc, #140] ; (80012c0 ) + HAL_SDRAM_SendCommand(&hsdram1, &Command, SDRAM_TIMEOUT); + 8001234: f64f 72ff movw r2, #65535 ; 0xffff + 8001238: 4630 mov r0, r6 + Command.ModeRegisterDefinition = 0; + 800123a: e9c1 3402 strd r3, r4, [r1, #8] + Command.CommandTarget = FMC_SDRAM_CMD_TARGET_BANK1; + 800123e: e9c1 b700 strd fp, r7, [r1] + HAL_SDRAM_SendCommand(&hsdram1, &Command, SDRAM_TIMEOUT); + 8001242: f007 f95d bl 8008500 + tmpmrd = (uint32_t)SDRAM_MODEREG_BURST_LENGTH_1 | \ + 8001246: f44f 720c mov.w r2, #560 ; 0x230 + Command.CommandMode = FMC_SDRAM_CMD_LOAD_MODE; + 800124a: 491d ldr r1, [pc, #116] ; (80012c0 ) + HAL_SDRAM_SendCommand(&hsdram1, &Command, SDRAM_TIMEOUT); + 800124c: 4630 mov r0, r6 + tmpmrd = (uint32_t)SDRAM_MODEREG_BURST_LENGTH_1 | \ + 800124e: 9201 str r2, [sp, #4] + hltdc.Init.TotalHeigh = 285; + 8001250: f240 2b35 movw fp, #565 ; 0x235 + Command.ModeRegisterDefinition = tmpmrd; + 8001254: 9a01 ldr r2, [sp, #4] + Command.AutoRefreshNumber = 1; + 8001256: 608d str r5, [r1, #8] + Command.ModeRegisterDefinition = tmpmrd; + 8001258: 60ca str r2, [r1, #12] + HAL_SDRAM_SendCommand(&hsdram1, &Command, SDRAM_TIMEOUT); + 800125a: f64f 72ff movw r2, #65535 ; 0xffff + Command.CommandTarget = FMC_SDRAM_CMD_TARGET_BANK1; + 800125e: e9c1 8700 strd r8, r7, [r1] + HAL_SDRAM_SendCommand(&hsdram1, &Command, SDRAM_TIMEOUT); + 8001262: f007 f94d bl 8008500 + HAL_SDRAM_ProgramRefreshRate(&hsdram1, REFRESH_COUNT); + 8001266: f240 712b movw r1, #1835 ; 0x72b + 800126a: 4630 mov r0, r6 + hi2c3.Instance = I2C3; + 800126c: 4e15 ldr r6, [pc, #84] ; (80012c4 ) + HAL_SDRAM_ProgramRefreshRate(&hsdram1, REFRESH_COUNT); + 800126e: f007 f966 bl 800853e + FMC_Bank1->BTCR[0] = 0x000030D2; + 8001272: f04f 4220 mov.w r2, #2684354560 ; 0xa0000000 + 8001276: f243 01d2 movw r1, #12498 ; 0x30d2 + if (HAL_I2C_Init(&hi2c3) != HAL_OK) + 800127a: 4630 mov r0, r6 + FMC_Bank1->BTCR[0] = 0x000030D2; + 800127c: 6011 str r1, [r2, #0] + hi2c3.Init.Timing = 0x20404768; + 800127e: 4a12 ldr r2, [pc, #72] ; (80012c8 ) + 8001280: 4912 ldr r1, [pc, #72] ; (80012cc ) + hi2c3.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE; + 8001282: 6234 str r4, [r6, #32] + 8001284: e024 b.n 80012d0 + 8001286: bf00 nop + 8001288: e000ed00 .word 0xe000ed00 + 800128c: 0300001b .word 0x0300001b + 8001290: 200002dc .word 0x200002dc + 8001294: 40023800 .word 0x40023800 + 8001298: 40020400 .word 0x40020400 + 800129c: 40022800 .word 0x40022800 + 80012a0: 40022000 .word 0x40022000 + 80012a4: 40020800 .word 0x40020800 + 80012a8: 40021800 .word 0x40021800 + 80012ac: 200002b8 .word 0x200002b8 + 80012b0: 40023000 .word 0x40023000 + 80012b4: 4002b000 .word 0x4002b000 + 80012b8: 20000464 .word 0x20000464 + 80012bc: a0000140 .word 0xa0000140 + 80012c0: 2000029c .word 0x2000029c + 80012c4: 2000031c .word 0x2000031c + 80012c8: 20404768 .word 0x20404768 + 80012cc: 40005c00 .word 0x40005c00 + hi2c3.Init.Timing = 0x20404768; + 80012d0: e9c6 1200 strd r1, r2, [r6] + hi2c3.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT; + 80012d4: e9c6 4502 strd r4, r5, [r6, #8] + hi2c3.Init.OwnAddress2 = 0; + 80012d8: e9c6 4404 strd r4, r4, [r6, #16] + hi2c3.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE; + 80012dc: e9c6 4406 strd r4, r4, [r6, #24] + if (HAL_I2C_Init(&hi2c3) != HAL_OK) + 80012e0: f005 fc48 bl 8006b74 + if (HAL_I2CEx_ConfigAnalogFilter(&hi2c3, I2C_ANALOGFILTER_ENABLE) != HAL_OK) + 80012e4: 4621 mov r1, r4 + 80012e6: 4630 mov r0, r6 + 80012e8: f005 fe66 bl 8006fb8 + if (HAL_I2CEx_ConfigDigitalFilter(&hi2c3, 0) != HAL_OK) + 80012ec: 4621 mov r1, r4 + 80012ee: 4630 mov r0, r6 + hltdc.Instance = LTDC; + 80012f0: 4ebd ldr r6, [pc, #756] ; (80015e8 ) + if (HAL_I2CEx_ConfigDigitalFilter(&hi2c3, 0) != HAL_OK) + 80012f2: f005 fe87 bl 8007004 + LTDC_LayerCfgTypeDef pLayerCfg = {0}; + 80012f6: 4621 mov r1, r4 + 80012f8: 2234 movs r2, #52 ; 0x34 + 80012fa: a81b add r0, sp, #108 ; 0x6c + 80012fc: f033 fb5e bl 80349bc + hltdc.Instance = LTDC; + 8001300: 4aba ldr r2, [pc, #744] ; (80015ec ) + hltdc.Init.VerticalSync = 9; + 8001302: 2028 movs r0, #40 ; 0x28 + hltdc.Init.AccumulatedVBP = 11; + 8001304: f04f 0c35 mov.w ip, #53 ; 0x35 + hltdc.Init.AccumulatedActiveH = 283; + 8001308: f240 2e15 movw lr, #533 ; 0x215 + hltdc.Init.Backcolor.Blue = 0; + 800130c: 86b4 strh r4, [r6, #52] ; 0x34 + hltdc.Init.PCPolarity = LTDC_PCPOLARITY_IPC; + 800130e: 6134 str r4, [r6, #16] + hltdc.Init.Backcolor.Red = 0; + 8001310: f886 4036 strb.w r4, [r6, #54] ; 0x36 + hltdc.Init.HSPolarity = LTDC_HSPOLARITY_AL; + 8001314: e9c6 2400 strd r2, r4, [r6] + hltdc.Init.VerticalSync = 9; + 8001318: 2209 movs r2, #9 + 800131a: e9c6 0205 strd r0, r2, [r6, #20] + hltdc.Init.AccumulatedVBP = 11; + 800131e: 220b movs r2, #11 + if (HAL_LTDC_Init(&hltdc) != HAL_OK) + 8001320: 4630 mov r0, r6 + hltdc.Init.AccumulatedVBP = 11; + 8001322: e9c6 c207 strd ip, r2, [r6, #28] + hltdc.Init.AccumulatedActiveH = 283; + 8001326: f240 121b movw r2, #283 ; 0x11b + 800132a: e9c6 e209 strd lr, r2, [r6, #36] ; 0x24 + hltdc.Init.TotalHeigh = 285; + 800132e: f240 121d movw r2, #285 ; 0x11d + hltdc.Init.DEPolarity = LTDC_DEPOLARITY_AL; + 8001332: e9c6 4402 strd r4, r4, [r6, #8] + hltdc.Init.TotalHeigh = 285; + 8001336: e9c6 b20b strd fp, r2, [r6, #44] ; 0x2c + if (HAL_LTDC_Init(&hltdc) != HAL_OK) + 800133a: f005 ff0b bl 8007154 + pLayerCfg.Alpha = 255; + 800133e: 20ff movs r0, #255 ; 0xff + pLayerCfg.BlendingFactor2 = LTDC_BLENDING_FACTOR2_CA; + 8001340: f44f 6380 mov.w r3, #1024 ; 0x400 + pLayerCfg.WindowX1 = 480; + 8001344: f44f 71f0 mov.w r1, #480 ; 0x1e0 + pLayerCfg.WindowY1 = 272; + 8001348: f44f 7288 mov.w r2, #272 ; 0x110 + pLayerCfg.WindowX0 = 0; + 800134c: 941b str r4, [sp, #108] ; 0x6c + pLayerCfg.Backcolor.Blue = 0; + 800134e: f8ad 409c strh.w r4, [sp, #156] ; 0x9c + pLayerCfg.ImageHeight = 272; + 8001352: 9226 str r2, [sp, #152] ; 0x98 + pLayerCfg.Backcolor.Red = 0; + 8001354: f88d 409e strb.w r4, [sp, #158] ; 0x9e + pLayerCfg.Alpha0 = 0; + 8001358: e9cd 0420 strd r0, r4, [sp, #128] ; 0x80 + pLayerCfg.BlendingFactor2 = LTDC_BLENDING_FACTOR2_CA; + 800135c: 2005 movs r0, #5 + 800135e: e9cd 3022 strd r3, r0, [sp, #136] ; 0x88 + pLayerCfg.FBStartAdress = 0xC0000000; + 8001362: f04f 4040 mov.w r0, #3221225472 ; 0xc0000000 + pLayerCfg.PixelFormat = LTDC_PIXEL_FORMAT_RGB565; + 8001366: e9cd 2a1e strd r2, sl, [sp, #120] ; 0x78 + pLayerCfg.ImageWidth = 480; + 800136a: e9cd 0124 strd r0, r1, [sp, #144] ; 0x90 + if (HAL_LTDC_ConfigLayer(&hltdc, &pLayerCfg, 0) != HAL_OK) + 800136e: 4622 mov r2, r4 + 8001370: 4630 mov r0, r6 + htim1.Init.Period = 16383; + 8001372: f643 7aff movw sl, #16383 ; 0x3fff + sConfigOC.OCMode = TIM_OCMODE_PWM1; + 8001376: 2660 movs r6, #96 ; 0x60 + pLayerCfg.WindowY0 = 0; + 8001378: e9cd 141c strd r1, r4, [sp, #112] ; 0x70 + if (HAL_LTDC_ConfigLayer(&hltdc, &pLayerCfg, 0) != HAL_OK) + 800137c: a91b add r1, sp, #108 ; 0x6c + 800137e: f005 ffb4 bl 80072ea + hqspi.Instance = QUADSPI; + 8001382: 489b ldr r0, [pc, #620] ; (80015f0 ) + 8001384: 4a9b ldr r2, [pc, #620] ; (80015f4 ) + hqspi.Init.ChipSelectHighTime = QSPI_CS_HIGH_TIME_6_CYCLE; + 8001386: 2118 movs r1, #24 + hqspi.Init.DualFlash = QSPI_DUALFLASH_DISABLE; + 8001388: 6204 str r4, [r0, #32] + hqspi.Init.ClockPrescaler = 1; + 800138a: e9c0 2500 strd r2, r5, [r0] + hqspi.Init.ChipSelectHighTime = QSPI_CS_HIGH_TIME_6_CYCLE; + 800138e: f44f 62a0 mov.w r2, #1280 ; 0x500 + htim1.Instance = TIM1; + 8001392: 4d99 ldr r5, [pc, #612] ; (80015f8 ) + hqspi.Init.ChipSelectHighTime = QSPI_CS_HIGH_TIME_6_CYCLE; + 8001394: e9c0 1204 strd r1, r2, [r0, #16] + hqspi.Init.SampleShifting = QSPI_SAMPLE_SHIFTING_HALFCYCLE; + 8001398: e9c0 8702 strd r8, r7, [r0, #8] + hqspi.Init.FlashID = QSPI_FLASH_ID_1; + 800139c: e9c0 4406 strd r4, r4, [r0, #24] + if (HAL_QSPI_Init(&hqspi) != HAL_OK) + 80013a0: f006 f908 bl 80075b4 + BSP_QSPI_Init(); + 80013a4: f003 ffa4 bl 80052f0 + BSP_QSPI_MemoryMappedMode(); + 80013a8: f003 fee8 bl 800517c + HAL_NVIC_DisableIRQ(QUADSPI_IRQn); + 80013ac: 205c movs r0, #92 ; 0x5c + 80013ae: f004 f9a9 bl 8005704 + MX_LIBJPEG_Init(); + 80013b2: f000 fd65 bl 8001e80 + TIM_ClockConfigTypeDef sClockSourceConfig = {0}; + 80013b6: 463a mov r2, r7 + 80013b8: 4621 mov r1, r4 + 80013ba: a810 add r0, sp, #64 ; 0x40 + 80013bc: f033 fafe bl 80349bc + TIM_OC_InitTypeDef sConfigOC = {0}; + 80013c0: 221c movs r2, #28 + 80013c2: 4621 mov r1, r4 + 80013c4: a814 add r0, sp, #80 ; 0x50 + TIM_MasterConfigTypeDef sMasterConfig = {0}; + 80013c6: 940f str r4, [sp, #60] ; 0x3c + 80013c8: e9cd 440d strd r4, r4, [sp, #52] ; 0x34 + TIM_OC_InitTypeDef sConfigOC = {0}; + 80013cc: f033 faf6 bl 80349bc + TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0}; + 80013d0: 4621 mov r1, r4 + 80013d2: 222c movs r2, #44 ; 0x2c + 80013d4: a81b add r0, sp, #108 ; 0x6c + 80013d6: f033 faf1 bl 80349bc + htim1.Instance = TIM1; + 80013da: 4a88 ldr r2, [pc, #544] ; (80015fc ) + if (HAL_TIM_Base_Init(&htim1) != HAL_OK) + 80013dc: 4628 mov r0, r5 + htim1.Init.CounterMode = TIM_COUNTERMODE_UP; + 80013de: 60ac str r4, [r5, #8] + htim1.Init.Prescaler = 0; + 80013e0: e9c5 2400 strd r2, r4, [r5] + htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; + 80013e4: e9c5 a403 strd sl, r4, [r5, #12] + htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; + 80013e8: e9c5 4405 strd r4, r4, [r5, #20] + if (HAL_TIM_Base_Init(&htim1) != HAL_OK) + 80013ec: f007 fafe bl 80089ec + if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) + 80013f0: a910 add r1, sp, #64 ; 0x40 + 80013f2: 4628 mov r0, r5 + sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; + 80013f4: f8cd 9040 str.w r9, [sp, #64] ; 0x40 + if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) + 80013f8: f007 fc18 bl 8008c2c + if (HAL_TIM_PWM_Init(&htim1) != HAL_OK) + 80013fc: 4628 mov r0, r5 + 80013fe: f007 fb25 bl 8008a4c + if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK) + 8001402: a90d add r1, sp, #52 ; 0x34 + 8001404: 4628 mov r0, r5 + sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; + 8001406: 940f str r4, [sp, #60] ; 0x3c + sMasterConfig.MasterOutputTrigger2 = TIM_TRGO2_RESET; + 8001408: e9cd 440d strd r4, r4, [sp, #52] ; 0x34 + if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK) + 800140c: f007 fd44 bl 8008e98 + if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) + 8001410: 4622 mov r2, r4 + 8001412: a914 add r1, sp, #80 ; 0x50 + 8001414: 4628 mov r0, r5 + sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; + 8001416: 941a str r4, [sp, #104] ; 0x68 + sConfigOC.Pulse = 0; + 8001418: e9cd 6414 strd r6, r4, [sp, #80] ; 0x50 + sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; + 800141c: e9cd 4416 strd r4, r4, [sp, #88] ; 0x58 + sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; + 8001420: e9cd 4418 strd r4, r4, [sp, #96] ; 0x60 + if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) + 8001424: f007 fb7a bl 8008b1c + if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) + 8001428: 4642 mov r2, r8 + 800142a: a914 add r1, sp, #80 ; 0x50 + 800142c: 4628 mov r0, r5 + 800142e: f007 fb75 bl 8008b1c + sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH; + 8001432: f44f 5200 mov.w r2, #8192 ; 0x2000 + if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK) + 8001436: a91b add r1, sp, #108 ; 0x6c + 8001438: 4628 mov r0, r5 + sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE; + 800143a: 941f str r4, [sp, #124] ; 0x7c + sBreakDeadTimeConfig.Break2State = TIM_BREAK2_DISABLE; + 800143c: 9422 str r4, [sp, #136] ; 0x88 + sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE; + 800143e: 9425 str r4, [sp, #148] ; 0x94 + sBreakDeadTimeConfig.BreakFilter = 0; + 8001440: e9cd 2420 strd r2, r4, [sp, #128] ; 0x80 + sBreakDeadTimeConfig.Break2Polarity = TIM_BREAK2POLARITY_HIGH; + 8001444: f04f 7200 mov.w r2, #33554432 ; 0x2000000 + sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE; + 8001448: e9cd 441b strd r4, r4, [sp, #108] ; 0x6c + sBreakDeadTimeConfig.Break2Filter = 0; + 800144c: e9cd 2423 strd r2, r4, [sp, #140] ; 0x8c + sBreakDeadTimeConfig.DeadTime = 0; + 8001450: e9cd 441d strd r4, r4, [sp, #116] ; 0x74 + if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK) + 8001454: f007 fd6c bl 8008f30 + HAL_TIM_MspPostInit(&htim1); + 8001458: 4628 mov r0, r5 + 800145a: f000 fb3b bl 8001ad4 + TIM_ClockConfigTypeDef sClockSourceConfig = {0}; + 800145e: 463a mov r2, r7 + 8001460: 4621 mov r1, r4 + 8001462: a814 add r0, sp, #80 ; 0x50 + htim4.Instance = TIM4; + 8001464: 4d66 ldr r5, [pc, #408] ; (8001600 ) + TIM_ClockConfigTypeDef sClockSourceConfig = {0}; + 8001466: f033 faa9 bl 80349bc + TIM_OC_InitTypeDef sConfigOC = {0}; + 800146a: 4621 mov r1, r4 + 800146c: 221c movs r2, #28 + 800146e: a81b add r0, sp, #108 ; 0x6c + TIM_MasterConfigTypeDef sMasterConfig = {0}; + 8001470: 9412 str r4, [sp, #72] ; 0x48 + 8001472: e9cd 4410 strd r4, r4, [sp, #64] ; 0x40 + TIM_OC_InitTypeDef sConfigOC = {0}; + 8001476: f033 faa1 bl 80349bc + htim4.Instance = TIM4; + 800147a: 4a62 ldr r2, [pc, #392] ; (8001604 ) + if (HAL_TIM_Base_Init(&htim4) != HAL_OK) + 800147c: 4628 mov r0, r5 + htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; + 800147e: 612c str r4, [r5, #16] + htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; + 8001480: 61ac str r4, [r5, #24] + htim4.Init.Prescaler = 0; + 8001482: e9c5 2400 strd r2, r4, [r5] + htim4.Init.Period = 16383; + 8001486: e9c5 4a02 strd r4, sl, [r5, #8] + if (HAL_TIM_Base_Init(&htim4) != HAL_OK) + 800148a: f007 faaf bl 80089ec + if (HAL_TIM_ConfigClockSource(&htim4, &sClockSourceConfig) != HAL_OK) + 800148e: a914 add r1, sp, #80 ; 0x50 + 8001490: 4628 mov r0, r5 + sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; + 8001492: f8cd 9050 str.w r9, [sp, #80] ; 0x50 + if (HAL_TIM_ConfigClockSource(&htim4, &sClockSourceConfig) != HAL_OK) + 8001496: f007 fbc9 bl 8008c2c + if (HAL_TIM_PWM_Init(&htim4) != HAL_OK) + 800149a: 4628 mov r0, r5 + 800149c: f007 fad6 bl 8008a4c + if (HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig) != HAL_OK) + 80014a0: a910 add r1, sp, #64 ; 0x40 + 80014a2: 4628 mov r0, r5 + sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; + 80014a4: 9410 str r4, [sp, #64] ; 0x40 + sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; + 80014a6: 9412 str r4, [sp, #72] ; 0x48 + if (HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig) != HAL_OK) + 80014a8: f007 fcf6 bl 8008e98 + if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) + 80014ac: 2308 movs r3, #8 + 80014ae: a91b add r1, sp, #108 ; 0x6c + 80014b0: 4628 mov r0, r5 + sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; + 80014b2: 941d str r4, [sp, #116] ; 0x74 + if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) + 80014b4: 461a mov r2, r3 + sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; + 80014b6: 941f str r4, [sp, #124] ; 0x7c + sConfigOC.Pulse = 0; + 80014b8: e9cd 641b strd r6, r4, [sp, #108] ; 0x6c + if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) + 80014bc: f007 fb2e bl 8008b1c + if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_4) != HAL_OK) + 80014c0: 220c movs r2, #12 + 80014c2: a91b add r1, sp, #108 ; 0x6c + 80014c4: 4628 mov r0, r5 + 80014c6: f007 fb29 bl 8008b1c + HAL_TIM_MspPostInit(&htim4); + 80014ca: 4628 mov r0, r5 + 80014cc: f000 fb02 bl 8001ad4 + TIM_ClockConfigTypeDef sClockSourceConfig = {0}; + 80014d0: 463a mov r2, r7 + 80014d2: 4621 mov r1, r4 + 80014d4: a814 add r0, sp, #80 ; 0x50 + htim5.Instance = TIM5; + 80014d6: 4d4c ldr r5, [pc, #304] ; (8001608 ) + TIM_ClockConfigTypeDef sClockSourceConfig = {0}; + 80014d8: f033 fa70 bl 80349bc + TIM_OC_InitTypeDef sConfigOC = {0}; + 80014dc: 221c movs r2, #28 + 80014de: 4621 mov r1, r4 + 80014e0: a81b add r0, sp, #108 ; 0x6c + TIM_MasterConfigTypeDef sMasterConfig = {0}; + 80014e2: 9412 str r4, [sp, #72] ; 0x48 + 80014e4: e9cd 4410 strd r4, r4, [sp, #64] ; 0x40 + TIM_OC_InitTypeDef sConfigOC = {0}; + 80014e8: f033 fa68 bl 80349bc + htim5.Instance = TIM5; + 80014ec: 4b47 ldr r3, [pc, #284] ; (800160c ) + if (HAL_TIM_Base_Init(&htim5) != HAL_OK) + 80014ee: 4628 mov r0, r5 + htim5.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; + 80014f0: 612c str r4, [r5, #16] + htim5.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; + 80014f2: 61ac str r4, [r5, #24] + htim5.Init.Prescaler = 0; + 80014f4: e9c5 3400 strd r3, r4, [r5] + htim5.Init.Period = 16383; + 80014f8: e9c5 4a02 strd r4, sl, [r5, #8] + if (HAL_TIM_Base_Init(&htim5) != HAL_OK) + 80014fc: f007 fa76 bl 80089ec + if (HAL_TIM_ConfigClockSource(&htim5, &sClockSourceConfig) != HAL_OK) + 8001500: a914 add r1, sp, #80 ; 0x50 + 8001502: 4628 mov r0, r5 + sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; + 8001504: f8cd 9050 str.w r9, [sp, #80] ; 0x50 + if (HAL_TIM_ConfigClockSource(&htim5, &sClockSourceConfig) != HAL_OK) + 8001508: f007 fb90 bl 8008c2c + if (HAL_TIM_PWM_Init(&htim5) != HAL_OK) + 800150c: 4628 mov r0, r5 + 800150e: f007 fa9d bl 8008a4c + if (HAL_TIMEx_MasterConfigSynchronization(&htim5, &sMasterConfig) != HAL_OK) + 8001512: a910 add r1, sp, #64 ; 0x40 + 8001514: 4628 mov r0, r5 + sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; + 8001516: 9410 str r4, [sp, #64] ; 0x40 + sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; + 8001518: 9412 str r4, [sp, #72] ; 0x48 + if (HAL_TIMEx_MasterConfigSynchronization(&htim5, &sMasterConfig) != HAL_OK) + 800151a: f007 fcbd bl 8008e98 + if (HAL_TIM_PWM_ConfigChannel(&htim5, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) + 800151e: 4622 mov r2, r4 + 8001520: a91b add r1, sp, #108 ; 0x6c + 8001522: 4628 mov r0, r5 + sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; + 8001524: 941d str r4, [sp, #116] ; 0x74 + sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; + 8001526: 941f str r4, [sp, #124] ; 0x7c + sConfigOC.Pulse = 0; + 8001528: e9cd 641b strd r6, r4, [sp, #108] ; 0x6c + if (HAL_TIM_PWM_ConfigChannel(&htim5, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) + 800152c: f007 faf6 bl 8008b1c + if (HAL_TIM_PWM_ConfigChannel(&htim5, &sConfigOC, TIM_CHANNEL_4) != HAL_OK) + 8001530: 220c movs r2, #12 + 8001532: a91b add r1, sp, #108 ; 0x6c + 8001534: 4628 mov r0, r5 + 8001536: f007 faf1 bl 8008b1c + HAL_TIM_MspPostInit(&htim5); + 800153a: 4628 mov r0, r5 + 800153c: f000 faca bl 8001ad4 + TIM_ClockConfigTypeDef sClockSourceConfig = {0}; + 8001540: 463a mov r2, r7 + 8001542: 4621 mov r1, r4 + 8001544: a814 add r0, sp, #80 ; 0x50 + htim12.Instance = TIM12; + 8001546: 4d32 ldr r5, [pc, #200] ; (8001610 ) + TIM_ClockConfigTypeDef sClockSourceConfig = {0}; + 8001548: f033 fa38 bl 80349bc + TIM_OC_InitTypeDef sConfigOC = {0}; + 800154c: 221c movs r2, #28 + 800154e: 4621 mov r1, r4 + 8001550: a81b add r0, sp, #108 ; 0x6c + 8001552: f033 fa33 bl 80349bc + htim12.Instance = TIM12; + 8001556: 4b2f ldr r3, [pc, #188] ; (8001614 ) + if (HAL_TIM_Base_Init(&htim12) != HAL_OK) + 8001558: 4628 mov r0, r5 + htim12.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; + 800155a: 612c str r4, [r5, #16] + htim12.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; + 800155c: 61ac str r4, [r5, #24] + htim12.Init.Prescaler = 0; + 800155e: e9c5 3400 strd r3, r4, [r5] + htim12.Init.Period = 16383; + 8001562: e9c5 4a02 strd r4, sl, [r5, #8] + if (HAL_TIM_Base_Init(&htim12) != HAL_OK) + 8001566: f007 fa41 bl 80089ec + if (HAL_TIM_ConfigClockSource(&htim12, &sClockSourceConfig) != HAL_OK) + 800156a: a914 add r1, sp, #80 ; 0x50 + 800156c: 4628 mov r0, r5 + sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; + 800156e: f8cd 9050 str.w r9, [sp, #80] ; 0x50 + if (HAL_TIM_ConfigClockSource(&htim12, &sClockSourceConfig) != HAL_OK) + 8001572: f007 fb5b bl 8008c2c + if (HAL_TIM_PWM_Init(&htim12) != HAL_OK) + 8001576: 4628 mov r0, r5 + 8001578: f007 fa68 bl 8008a4c + if (HAL_TIM_PWM_ConfigChannel(&htim12, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) + 800157c: 4622 mov r2, r4 + 800157e: a91b add r1, sp, #108 ; 0x6c + 8001580: 4628 mov r0, r5 + sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; + 8001582: 941d str r4, [sp, #116] ; 0x74 + sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; + 8001584: 941f str r4, [sp, #124] ; 0x7c + sConfigOC.Pulse = 0; + 8001586: e9cd 641b strd r6, r4, [sp, #108] ; 0x6c + if (HAL_TIM_PWM_ConfigChannel(&htim12, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) + 800158a: f007 fac7 bl 8008b1c + if (HAL_TIM_PWM_ConfigChannel(&htim12, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) + 800158e: 4642 mov r2, r8 + 8001590: a91b add r1, sp, #108 ; 0x6c + 8001592: 4628 mov r0, r5 + 8001594: f007 fac2 bl 8008b1c + HAL_TIM_MspPostInit(&htim12); + 8001598: 4628 mov r0, r5 + 800159a: f000 fa9b bl 8001ad4 + MX_TouchGFX_Init(); + 800159e: f000 ffb5 bl 800250c + MX_TouchGFX_PreOSInit(); + 80015a2: f000 ffb2 bl 800250a + osKernelInitialize(); + 80015a6: f007 fd93 bl 80090d0 + defaultTaskHandle = osThreadNew(StartDefaultTask, NULL, &defaultTask_attributes); + 80015aa: 4a1b ldr r2, [pc, #108] ; (8001618 ) + 80015ac: 4621 mov r1, r4 + 80015ae: 481b ldr r0, [pc, #108] ; (800161c ) + 80015b0: f007 fddc bl 800916c + 80015b4: 4b1a ldr r3, [pc, #104] ; (8001620 ) + TouchGFXTaskHandle = osThreadNew(TouchGFX_Task, NULL, &TouchGFXTask_attributes); + 80015b6: 4a1b ldr r2, [pc, #108] ; (8001624 ) + 80015b8: 4621 mov r1, r4 + defaultTaskHandle = osThreadNew(StartDefaultTask, NULL, &defaultTask_attributes); + 80015ba: 6018 str r0, [r3, #0] + TouchGFXTaskHandle = osThreadNew(TouchGFX_Task, NULL, &TouchGFXTask_attributes); + 80015bc: 481a ldr r0, [pc, #104] ; (8001628 ) + 80015be: f007 fdd5 bl 800916c + 80015c2: 4b1a ldr r3, [pc, #104] ; (800162c ) + videoTaskHandle = osThreadNew(videoTaskFunc, NULL, &videoTask_attributes); + 80015c4: 4a1a ldr r2, [pc, #104] ; (8001630 ) + 80015c6: 4621 mov r1, r4 + TouchGFXTaskHandle = osThreadNew(TouchGFX_Task, NULL, &TouchGFXTask_attributes); + 80015c8: 6018 str r0, [r3, #0] + videoTaskHandle = osThreadNew(videoTaskFunc, NULL, &videoTask_attributes); + 80015ca: 481a ldr r0, [pc, #104] ; (8001634 ) + 80015cc: f007 fdce bl 800916c + 80015d0: 4b19 ldr r3, [pc, #100] ; (8001638 ) + MainTaskHandle = osThreadNew(StartTask04, NULL, &MainTask_attributes); + 80015d2: 4a1a ldr r2, [pc, #104] ; (800163c ) + 80015d4: 4621 mov r1, r4 + videoTaskHandle = osThreadNew(videoTaskFunc, NULL, &videoTask_attributes); + 80015d6: 6018 str r0, [r3, #0] + MainTaskHandle = osThreadNew(StartTask04, NULL, &MainTask_attributes); + 80015d8: 4819 ldr r0, [pc, #100] ; (8001640 ) + 80015da: f007 fdc7 bl 800916c + 80015de: 4b19 ldr r3, [pc, #100] ; (8001644 ) + 80015e0: 6018 str r0, [r3, #0] + osKernelStart(); + 80015e2: f007 fd8f bl 8009104 + while (1) + 80015e6: e7fe b.n 80015e6 + 80015e8: 20000370 .word 0x20000370 + 80015ec: 40016800 .word 0x40016800 + 80015f0: 20000418 .word 0x20000418 + 80015f4: a0001000 .word 0xa0001000 + 80015f8: 20000498 .word 0x20000498 + 80015fc: 40010000 .word 0x40010000 + 8001600: 20000530 .word 0x20000530 + 8001604: 40000800 .word 0x40000800 + 8001608: 2000057c .word 0x2000057c + 800160c: 40000c00 .word 0x40000c00 + 8001610: 200004e4 .word 0x200004e4 + 8001614: 40001800 .word 0x40001800 + 8001618: 080358dc .word 0x080358dc + 800161c: 08000df5 .word 0x08000df5 + 8001620: 200002b4 .word 0x200002b4 + 8001624: 080358b8 .word 0x080358b8 + 8001628: 0800251b .word 0x0800251b + 800162c: 200002b0 .word 0x200002b0 + 8001630: 08035900 .word 0x08035900 + 8001634: 08003d31 .word 0x08003d31 + 8001638: 200005e8 .word 0x200005e8 + 800163c: 08035894 .word 0x08035894 + 8001640: 08000e05 .word 0x08000e05 + 8001644: 200002ac .word 0x200002ac + +08001648 : +void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) +{ + /* USER CODE BEGIN Callback 0 */ + + /* USER CODE END Callback 0 */ + if (htim->Instance == TIM6) { + 8001648: 6802 ldr r2, [r0, #0] + 800164a: 4b03 ldr r3, [pc, #12] ; (8001658 ) + 800164c: 429a cmp r2, r3 + 800164e: d101 bne.n 8001654 + HAL_IncTick(); + 8001650: f003 bfe2 b.w 8005618 + } + /* USER CODE BEGIN Callback 1 */ + + /* USER CODE END Callback 1 */ +} + 8001654: 4770 bx lr + 8001656: bf00 nop + 8001658: 40001000 .word 0x40001000 + +0800165c : +{ + /* USER CODE BEGIN Error_Handler_Debug */ + /* User can add his own implementation to report the HAL error return state */ + + /* USER CODE END Error_Handler_Debug */ +} + 800165c: 4770 bx lr + ... + +08001660 : +{ + /* USER CODE BEGIN MspInit 0 */ + + /* USER CODE END MspInit 0 */ + + __HAL_RCC_PWR_CLK_ENABLE(); + 8001660: 4b0d ldr r3, [pc, #52] ; (8001698 ) +{ + 8001662: b082 sub sp, #8 + __HAL_RCC_SYSCFG_CLK_ENABLE(); + + /* System interrupt init*/ + /* PendSV_IRQn interrupt configuration */ + HAL_NVIC_SetPriority(PendSV_IRQn, 15, 0); + 8001664: 210f movs r1, #15 + 8001666: f06f 0001 mvn.w r0, #1 + __HAL_RCC_PWR_CLK_ENABLE(); + 800166a: 6c1a ldr r2, [r3, #64] ; 0x40 + 800166c: f042 5280 orr.w r2, r2, #268435456 ; 0x10000000 + 8001670: 641a str r2, [r3, #64] ; 0x40 + 8001672: 6c1a ldr r2, [r3, #64] ; 0x40 + 8001674: f002 5280 and.w r2, r2, #268435456 ; 0x10000000 + 8001678: 9200 str r2, [sp, #0] + 800167a: 9a00 ldr r2, [sp, #0] + __HAL_RCC_SYSCFG_CLK_ENABLE(); + 800167c: 6c5a ldr r2, [r3, #68] ; 0x44 + 800167e: f442 4280 orr.w r2, r2, #16384 ; 0x4000 + 8001682: 645a str r2, [r3, #68] ; 0x44 + HAL_NVIC_SetPriority(PendSV_IRQn, 15, 0); + 8001684: 2200 movs r2, #0 + __HAL_RCC_SYSCFG_CLK_ENABLE(); + 8001686: 6c5b ldr r3, [r3, #68] ; 0x44 + 8001688: f403 4380 and.w r3, r3, #16384 ; 0x4000 + 800168c: 9301 str r3, [sp, #4] + 800168e: 9b01 ldr r3, [sp, #4] + + /* USER CODE BEGIN MspInit 1 */ + + /* USER CODE END MspInit 1 */ +} + 8001690: b002 add sp, #8 + HAL_NVIC_SetPriority(PendSV_IRQn, 15, 0); + 8001692: f003 bff7 b.w 8005684 + 8001696: bf00 nop + 8001698: 40023800 .word 0x40023800 + +0800169c : +* @param hcrc: CRC handle pointer +* @retval None +*/ +void HAL_CRC_MspInit(CRC_HandleTypeDef* hcrc) +{ + if(hcrc->Instance==CRC) + 800169c: 6802 ldr r2, [r0, #0] +{ + 800169e: b082 sub sp, #8 + if(hcrc->Instance==CRC) + 80016a0: 4b08 ldr r3, [pc, #32] ; (80016c4 ) + 80016a2: 429a cmp r2, r3 + 80016a4: d10b bne.n 80016be + { + /* USER CODE BEGIN CRC_MspInit 0 */ + + /* USER CODE END CRC_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_CRC_CLK_ENABLE(); + 80016a6: f8d3 2830 ldr.w r2, [r3, #2096] ; 0x830 + 80016aa: f503 6300 add.w r3, r3, #2048 ; 0x800 + 80016ae: f442 5280 orr.w r2, r2, #4096 ; 0x1000 + 80016b2: 631a str r2, [r3, #48] ; 0x30 + 80016b4: 6b1b ldr r3, [r3, #48] ; 0x30 + 80016b6: f403 5380 and.w r3, r3, #4096 ; 0x1000 + 80016ba: 9301 str r3, [sp, #4] + 80016bc: 9b01 ldr r3, [sp, #4] + /* USER CODE BEGIN CRC_MspInit 1 */ + + /* USER CODE END CRC_MspInit 1 */ + } + +} + 80016be: b002 add sp, #8 + 80016c0: 4770 bx lr + 80016c2: bf00 nop + 80016c4: 40023000 .word 0x40023000 + +080016c8 : +* @param hdma2d: DMA2D handle pointer +* @retval None +*/ +void HAL_DMA2D_MspInit(DMA2D_HandleTypeDef* hdma2d) +{ + if(hdma2d->Instance==DMA2D) + 80016c8: 4b0e ldr r3, [pc, #56] ; (8001704 ) +{ + 80016ca: b507 push {r0, r1, r2, lr} + if(hdma2d->Instance==DMA2D) + 80016cc: 6802 ldr r2, [r0, #0] + 80016ce: 429a cmp r2, r3 + 80016d0: d115 bne.n 80016fe + { + /* USER CODE BEGIN DMA2D_MspInit 0 */ + + /* USER CODE END DMA2D_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_DMA2D_CLK_ENABLE(); + 80016d2: f5a3 43f0 sub.w r3, r3, #30720 ; 0x7800 + /* DMA2D interrupt Init */ + HAL_NVIC_SetPriority(DMA2D_IRQn, 5, 0); + 80016d6: 2105 movs r1, #5 + 80016d8: 205a movs r0, #90 ; 0x5a + __HAL_RCC_DMA2D_CLK_ENABLE(); + 80016da: 6b1a ldr r2, [r3, #48] ; 0x30 + 80016dc: f442 0200 orr.w r2, r2, #8388608 ; 0x800000 + 80016e0: 631a str r2, [r3, #48] ; 0x30 + HAL_NVIC_SetPriority(DMA2D_IRQn, 5, 0); + 80016e2: 2200 movs r2, #0 + __HAL_RCC_DMA2D_CLK_ENABLE(); + 80016e4: 6b1b ldr r3, [r3, #48] ; 0x30 + 80016e6: f403 0300 and.w r3, r3, #8388608 ; 0x800000 + 80016ea: 9301 str r3, [sp, #4] + 80016ec: 9b01 ldr r3, [sp, #4] + HAL_NVIC_SetPriority(DMA2D_IRQn, 5, 0); + 80016ee: f003 ffc9 bl 8005684 + HAL_NVIC_EnableIRQ(DMA2D_IRQn); + 80016f2: 205a movs r0, #90 ; 0x5a + /* USER CODE BEGIN DMA2D_MspInit 1 */ + + /* USER CODE END DMA2D_MspInit 1 */ + } + +} + 80016f4: b003 add sp, #12 + 80016f6: f85d eb04 ldr.w lr, [sp], #4 + HAL_NVIC_EnableIRQ(DMA2D_IRQn); + 80016fa: f003 bff5 b.w 80056e8 +} + 80016fe: b003 add sp, #12 + 8001700: f85d fb04 ldr.w pc, [sp], #4 + 8001704: 4002b000 .word 0x4002b000 + +08001708 : +* This function configures the hardware resources used in this example +* @param hi2c: I2C handle pointer +* @retval None +*/ +void HAL_I2C_MspInit(I2C_HandleTypeDef* hi2c) +{ + 8001708: b510 push {r4, lr} + 800170a: b0a8 sub sp, #160 ; 0xa0 + 800170c: 4604 mov r4, r0 + GPIO_InitTypeDef GPIO_InitStruct = {0}; + 800170e: 2214 movs r2, #20 + 8001710: 2100 movs r1, #0 + 8001712: a802 add r0, sp, #8 + 8001714: f033 f952 bl 80349bc + RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0}; + 8001718: 2284 movs r2, #132 ; 0x84 + 800171a: 2100 movs r1, #0 + 800171c: a807 add r0, sp, #28 + 800171e: f033 f94d bl 80349bc + if(hi2c->Instance==I2C3) + 8001722: 6822 ldr r2, [r4, #0] + 8001724: 4b17 ldr r3, [pc, #92] ; (8001784 ) + 8001726: 429a cmp r2, r3 + 8001728: d12a bne.n 8001780 + + /* USER CODE END I2C3_MspInit 0 */ + + /** Initializes the peripherals clock + */ + PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_I2C3; + 800172a: f44f 3380 mov.w r3, #65536 ; 0x10000 + PeriphClkInitStruct.I2c3ClockSelection = RCC_I2C3CLKSOURCE_PCLK1; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) + 800172e: a807 add r0, sp, #28 + PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_I2C3; + 8001730: 9307 str r3, [sp, #28] + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) + 8001732: f006 fc3b bl 8007fac + 8001736: b108 cbz r0, 800173c + { + Error_Handler(); + 8001738: f7ff ff90 bl 800165c + } + + __HAL_RCC_GPIOH_CLK_ENABLE(); + 800173c: 4c12 ldr r4, [pc, #72] ; (8001788 ) + /**I2C3 GPIO Configuration + PH7 ------> I2C3_SCL + PH8 ------> I2C3_SDA + */ + GPIO_InitStruct.Pin = GPIO_PIN_7|GPIO_PIN_8; + GPIO_InitStruct.Mode = GPIO_MODE_AF_OD; + 800173e: f44f 72c0 mov.w r2, #384 ; 0x180 + GPIO_InitStruct.Pull = GPIO_PULLUP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + 8001742: 2101 movs r1, #1 + GPIO_InitStruct.Alternate = GPIO_AF4_I2C3; + HAL_GPIO_Init(GPIOH, &GPIO_InitStruct); + 8001744: 4811 ldr r0, [pc, #68] ; (800178c ) + __HAL_RCC_GPIOH_CLK_ENABLE(); + 8001746: 6b23 ldr r3, [r4, #48] ; 0x30 + 8001748: f043 0380 orr.w r3, r3, #128 ; 0x80 + 800174c: 6323 str r3, [r4, #48] ; 0x30 + 800174e: 6b23 ldr r3, [r4, #48] ; 0x30 + 8001750: f003 0380 and.w r3, r3, #128 ; 0x80 + 8001754: 9300 str r3, [sp, #0] + 8001756: 9b00 ldr r3, [sp, #0] + GPIO_InitStruct.Mode = GPIO_MODE_AF_OD; + 8001758: 2312 movs r3, #18 + 800175a: e9cd 2302 strd r2, r3, [sp, #8] + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + 800175e: 2303 movs r3, #3 + 8001760: e9cd 1304 strd r1, r3, [sp, #16] + GPIO_InitStruct.Alternate = GPIO_AF4_I2C3; + 8001764: 2304 movs r3, #4 + HAL_GPIO_Init(GPIOH, &GPIO_InitStruct); + 8001766: a902 add r1, sp, #8 + GPIO_InitStruct.Alternate = GPIO_AF4_I2C3; + 8001768: 9306 str r3, [sp, #24] + HAL_GPIO_Init(GPIOH, &GPIO_InitStruct); + 800176a: f004 ff53 bl 8006614 + + /* Peripheral clock enable */ + __HAL_RCC_I2C3_CLK_ENABLE(); + 800176e: 6c23 ldr r3, [r4, #64] ; 0x40 + 8001770: f443 0300 orr.w r3, r3, #8388608 ; 0x800000 + 8001774: 6423 str r3, [r4, #64] ; 0x40 + 8001776: 6c23 ldr r3, [r4, #64] ; 0x40 + 8001778: f403 0300 and.w r3, r3, #8388608 ; 0x800000 + 800177c: 9301 str r3, [sp, #4] + 800177e: 9b01 ldr r3, [sp, #4] + /* USER CODE BEGIN I2C3_MspInit 1 */ + + /* USER CODE END I2C3_MspInit 1 */ + } + +} + 8001780: b028 add sp, #160 ; 0xa0 + 8001782: bd10 pop {r4, pc} + 8001784: 40005c00 .word 0x40005c00 + 8001788: 40023800 .word 0x40023800 + 800178c: 40021c00 .word 0x40021c00 + +08001790 : +* @param hi2c: I2C handle pointer +* @retval None +*/ +void HAL_I2C_MspDeInit(I2C_HandleTypeDef* hi2c) +{ + if(hi2c->Instance==I2C3) + 8001790: 6802 ldr r2, [r0, #0] +{ + 8001792: b508 push {r3, lr} + if(hi2c->Instance==I2C3) + 8001794: 4b09 ldr r3, [pc, #36] ; (80017bc ) + 8001796: 429a cmp r2, r3 + 8001798: d10f bne.n 80017ba + { + /* USER CODE BEGIN I2C3_MspDeInit 0 */ + + /* USER CODE END I2C3_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_I2C3_CLK_DISABLE(); + 800179a: 4a09 ldr r2, [pc, #36] ; (80017c0 ) + + /**I2C3 GPIO Configuration + PH7 ------> I2C3_SCL + PH8 ------> I2C3_SDA + */ + HAL_GPIO_DeInit(GPIOH, GPIO_PIN_7); + 800179c: 2180 movs r1, #128 ; 0x80 + 800179e: 4809 ldr r0, [pc, #36] ; (80017c4 ) + __HAL_RCC_I2C3_CLK_DISABLE(); + 80017a0: 6c13 ldr r3, [r2, #64] ; 0x40 + 80017a2: f423 0300 bic.w r3, r3, #8388608 ; 0x800000 + 80017a6: 6413 str r3, [r2, #64] ; 0x40 + HAL_GPIO_DeInit(GPIOH, GPIO_PIN_7); + 80017a8: f005 f816 bl 80067d8 + + HAL_GPIO_DeInit(GPIOH, GPIO_PIN_8); + 80017ac: f44f 7180 mov.w r1, #256 ; 0x100 + 80017b0: 4804 ldr r0, [pc, #16] ; (80017c4 ) + /* USER CODE BEGIN I2C3_MspDeInit 1 */ + + /* USER CODE END I2C3_MspDeInit 1 */ + } + +} + 80017b2: e8bd 4008 ldmia.w sp!, {r3, lr} + HAL_GPIO_DeInit(GPIOH, GPIO_PIN_8); + 80017b6: f005 b80f b.w 80067d8 +} + 80017ba: bd08 pop {r3, pc} + 80017bc: 40005c00 .word 0x40005c00 + 80017c0: 40023800 .word 0x40023800 + 80017c4: 40021c00 .word 0x40021c00 + +080017c8 : +* This function configures the hardware resources used in this example +* @param hltdc: LTDC handle pointer +* @retval None +*/ +void HAL_LTDC_MspInit(LTDC_HandleTypeDef* hltdc) +{ + 80017c8: b570 push {r4, r5, r6, lr} + 80017ca: b0ac sub sp, #176 ; 0xb0 + 80017cc: 4604 mov r4, r0 + GPIO_InitTypeDef GPIO_InitStruct = {0}; + 80017ce: 2214 movs r2, #20 + 80017d0: 2100 movs r1, #0 + 80017d2: a806 add r0, sp, #24 + 80017d4: f033 f8f2 bl 80349bc + RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0}; + 80017d8: 2284 movs r2, #132 ; 0x84 + 80017da: 2100 movs r1, #0 + 80017dc: a80b add r0, sp, #44 ; 0x2c + 80017de: f033 f8ed bl 80349bc + if(hltdc->Instance==LTDC) + 80017e2: 6822 ldr r2, [r4, #0] + 80017e4: 4b48 ldr r3, [pc, #288] ; (8001908 ) + 80017e6: 429a cmp r2, r3 + 80017e8: f040 808c bne.w 8001904 + + /* USER CODE END LTDC_MspInit 0 */ + + /** Initializes the peripherals clock + */ + PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LTDC; + 80017ec: 2308 movs r3, #8 + PeriphClkInitStruct.PLLSAI.PLLSAIN = 384; + PeriphClkInitStruct.PLLSAI.PLLSAIR = 5; + PeriphClkInitStruct.PLLSAI.PLLSAIQ = 2; + 80017ee: 2005 movs r0, #5 + PeriphClkInitStruct.PLLSAI.PLLSAIP = RCC_PLLSAIP_DIV2; + PeriphClkInitStruct.PLLSAIDivQ = 1; + PeriphClkInitStruct.PLLSAIDivR = RCC_PLLSAIDIVR_8; + 80017f0: 2401 movs r4, #1 + PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LTDC; + 80017f2: 930b str r3, [sp, #44] ; 0x2c + PeriphClkInitStruct.PLLSAI.PLLSAIN = 384; + 80017f4: f44f 73c0 mov.w r3, #384 ; 0x180 + 80017f8: 9310 str r3, [sp, #64] ; 0x40 + PeriphClkInitStruct.PLLSAI.PLLSAIQ = 2; + 80017fa: 2302 movs r3, #2 + 80017fc: e9cd 3011 strd r3, r0, [sp, #68] ; 0x44 + PeriphClkInitStruct.PLLSAIDivR = RCC_PLLSAIDIVR_8; + 8001800: f44f 3300 mov.w r3, #131072 ; 0x20000 + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) + 8001804: a80b add r0, sp, #44 ; 0x2c + PeriphClkInitStruct.PLLSAIDivR = RCC_PLLSAIDIVR_8; + 8001806: e9cd 4315 strd r4, r3, [sp, #84] ; 0x54 + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) + 800180a: f006 fbcf bl 8007fac + 800180e: b108 cbz r0, 8001814 + { + Error_Handler(); + 8001810: f7ff ff24 bl 800165c + } + + /* Peripheral clock enable */ + __HAL_RCC_LTDC_CLK_ENABLE(); + 8001814: 4b3d ldr r3, [pc, #244] ; (800190c ) + PJ0 ------> LTDC_R1 + PJ1 ------> LTDC_R2 + */ + GPIO_InitStruct.Pin = GPIO_PIN_4; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + 8001816: 2400 movs r4, #0 + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + 8001818: 2502 movs r5, #2 + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF14_LTDC; + 800181a: 260e movs r6, #14 + __HAL_RCC_LTDC_CLK_ENABLE(); + 800181c: 6c5a ldr r2, [r3, #68] ; 0x44 + HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); + 800181e: a906 add r1, sp, #24 + 8001820: 483b ldr r0, [pc, #236] ; (8001910 ) + __HAL_RCC_LTDC_CLK_ENABLE(); + 8001822: f042 6280 orr.w r2, r2, #67108864 ; 0x4000000 + 8001826: 645a str r2, [r3, #68] ; 0x44 + 8001828: 6c5a ldr r2, [r3, #68] ; 0x44 + 800182a: f002 6280 and.w r2, r2, #67108864 ; 0x4000000 + 800182e: 9200 str r2, [sp, #0] + 8001830: 9a00 ldr r2, [sp, #0] + __HAL_RCC_GPIOE_CLK_ENABLE(); + 8001832: 6b1a ldr r2, [r3, #48] ; 0x30 + 8001834: f042 0210 orr.w r2, r2, #16 + 8001838: 631a str r2, [r3, #48] ; 0x30 + 800183a: 6b1a ldr r2, [r3, #48] ; 0x30 + 800183c: f002 0210 and.w r2, r2, #16 + 8001840: 9201 str r2, [sp, #4] + 8001842: 9a01 ldr r2, [sp, #4] + __HAL_RCC_GPIOJ_CLK_ENABLE(); + 8001844: 6b1a ldr r2, [r3, #48] ; 0x30 + 8001846: f442 7200 orr.w r2, r2, #512 ; 0x200 + 800184a: 631a str r2, [r3, #48] ; 0x30 + 800184c: 6b1a ldr r2, [r3, #48] ; 0x30 + 800184e: f402 7200 and.w r2, r2, #512 ; 0x200 + 8001852: 9202 str r2, [sp, #8] + 8001854: 9a02 ldr r2, [sp, #8] + __HAL_RCC_GPIOK_CLK_ENABLE(); + 8001856: 6b1a ldr r2, [r3, #48] ; 0x30 + 8001858: f442 6280 orr.w r2, r2, #1024 ; 0x400 + 800185c: 631a str r2, [r3, #48] ; 0x30 + 800185e: 6b1a ldr r2, [r3, #48] ; 0x30 + 8001860: f402 6280 and.w r2, r2, #1024 ; 0x400 + 8001864: 9203 str r2, [sp, #12] + 8001866: 9a03 ldr r2, [sp, #12] + __HAL_RCC_GPIOG_CLK_ENABLE(); + 8001868: 6b1a ldr r2, [r3, #48] ; 0x30 + 800186a: f042 0240 orr.w r2, r2, #64 ; 0x40 + 800186e: 631a str r2, [r3, #48] ; 0x30 + 8001870: 6b1a ldr r2, [r3, #48] ; 0x30 + 8001872: f002 0240 and.w r2, r2, #64 ; 0x40 + 8001876: 9204 str r2, [sp, #16] + 8001878: 9a04 ldr r2, [sp, #16] + __HAL_RCC_GPIOI_CLK_ENABLE(); + 800187a: 6b1a ldr r2, [r3, #48] ; 0x30 + 800187c: f442 7280 orr.w r2, r2, #256 ; 0x100 + 8001880: 631a str r2, [r3, #48] ; 0x30 + 8001882: 6b1b ldr r3, [r3, #48] ; 0x30 + 8001884: f403 7380 and.w r3, r3, #256 ; 0x100 + 8001888: 9305 str r3, [sp, #20] + 800188a: 9b05 ldr r3, [sp, #20] + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + 800188c: 2310 movs r3, #16 + 800188e: e9cd 3506 strd r3, r5, [sp, #24] + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + 8001892: e9cd 4408 strd r4, r4, [sp, #32] + GPIO_InitStruct.Alternate = GPIO_AF14_LTDC; + 8001896: 960a str r6, [sp, #40] ; 0x28 + HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); + 8001898: f004 febc bl 8006614 + + GPIO_InitStruct.Pin = GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15|GPIO_PIN_11 + 800189c: f64e 73ff movw r3, #61439 ; 0xefff + |GPIO_PIN_2|GPIO_PIN_0|GPIO_PIN_1; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF14_LTDC; + HAL_GPIO_Init(GPIOJ, &GPIO_InitStruct); + 80018a0: a906 add r1, sp, #24 + 80018a2: 481c ldr r0, [pc, #112] ; (8001914 ) + GPIO_InitStruct.Alternate = GPIO_AF14_LTDC; + 80018a4: 960a str r6, [sp, #40] ; 0x28 + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + 80018a6: e9cd 3506 strd r3, r5, [sp, #24] + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + 80018aa: e9cd 4408 strd r4, r4, [sp, #32] + HAL_GPIO_Init(GPIOJ, &GPIO_InitStruct); + 80018ae: f004 feb1 bl 8006614 + + GPIO_InitStruct.Pin = GPIO_PIN_7|GPIO_PIN_6|GPIO_PIN_5|GPIO_PIN_4 + 80018b2: 23f7 movs r3, #247 ; 0xf7 + |GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_0; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF14_LTDC; + HAL_GPIO_Init(GPIOK, &GPIO_InitStruct); + 80018b4: a906 add r1, sp, #24 + 80018b6: 4818 ldr r0, [pc, #96] ; (8001918 ) + GPIO_InitStruct.Alternate = GPIO_AF14_LTDC; + 80018b8: 960a str r6, [sp, #40] ; 0x28 + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + 80018ba: e9cd 3506 strd r3, r5, [sp, #24] + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + 80018be: e9cd 4408 strd r4, r4, [sp, #32] + HAL_GPIO_Init(GPIOK, &GPIO_InitStruct); + 80018c2: f004 fea7 bl 8006614 + + GPIO_InitStruct.Pin = GPIO_PIN_12; + 80018c6: f44f 5380 mov.w r3, #4096 ; 0x1000 + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF9_LTDC; + HAL_GPIO_Init(GPIOG, &GPIO_InitStruct); + 80018ca: a906 add r1, sp, #24 + 80018cc: 4813 ldr r0, [pc, #76] ; (800191c ) + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + 80018ce: e9cd 3506 strd r3, r5, [sp, #24] + GPIO_InitStruct.Alternate = GPIO_AF9_LTDC; + 80018d2: 2309 movs r3, #9 + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + 80018d4: e9cd 4408 strd r4, r4, [sp, #32] + GPIO_InitStruct.Alternate = GPIO_AF9_LTDC; + 80018d8: 930a str r3, [sp, #40] ; 0x28 + HAL_GPIO_Init(GPIOG, &GPIO_InitStruct); + 80018da: f004 fe9b bl 8006614 + + GPIO_InitStruct.Pin = GPIO_PIN_10|GPIO_PIN_9|GPIO_PIN_15|GPIO_PIN_14; + 80018de: f44f 4346 mov.w r3, #50688 ; 0xc600 + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF14_LTDC; + HAL_GPIO_Init(GPIOI, &GPIO_InitStruct); + 80018e2: a906 add r1, sp, #24 + 80018e4: 480e ldr r0, [pc, #56] ; (8001920 ) + GPIO_InitStruct.Alternate = GPIO_AF14_LTDC; + 80018e6: 960a str r6, [sp, #40] ; 0x28 + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + 80018e8: e9cd 3506 strd r3, r5, [sp, #24] + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + 80018ec: e9cd 4408 strd r4, r4, [sp, #32] + HAL_GPIO_Init(GPIOI, &GPIO_InitStruct); + 80018f0: f004 fe90 bl 8006614 + + /* LTDC interrupt Init */ + HAL_NVIC_SetPriority(LTDC_IRQn, 5, 0); + 80018f4: 2058 movs r0, #88 ; 0x58 + 80018f6: 4622 mov r2, r4 + 80018f8: 2105 movs r1, #5 + 80018fa: f003 fec3 bl 8005684 + HAL_NVIC_EnableIRQ(LTDC_IRQn); + 80018fe: 2058 movs r0, #88 ; 0x58 + 8001900: f003 fef2 bl 80056e8 + /* USER CODE BEGIN LTDC_MspInit 1 */ + + /* USER CODE END LTDC_MspInit 1 */ + } + +} + 8001904: b02c add sp, #176 ; 0xb0 + 8001906: bd70 pop {r4, r5, r6, pc} + 8001908: 40016800 .word 0x40016800 + 800190c: 40023800 .word 0x40023800 + 8001910: 40021000 .word 0x40021000 + 8001914: 40022400 .word 0x40022400 + 8001918: 40022800 .word 0x40022800 + 800191c: 40021800 .word 0x40021800 + 8001920: 40022000 .word 0x40022000 + +08001924 : +* @param hqspi: QSPI handle pointer +* @retval None +*/ +void HAL_QSPI_MspInit(QSPI_HandleTypeDef* hqspi) +{ + GPIO_InitTypeDef GPIO_InitStruct = {0}; + 8001924: 2214 movs r2, #20 + 8001926: 2100 movs r1, #0 +{ + 8001928: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} + 800192c: b08a sub sp, #40 ; 0x28 + 800192e: 4604 mov r4, r0 + GPIO_InitTypeDef GPIO_InitStruct = {0}; + 8001930: eb0d 0002 add.w r0, sp, r2 + 8001934: f033 f842 bl 80349bc + if(hqspi->Instance==QUADSPI) + 8001938: 6822 ldr r2, [r4, #0] + 800193a: 4b2c ldr r3, [pc, #176] ; (80019ec ) + 800193c: 429a cmp r2, r3 + 800193e: d151 bne.n 80019e4 + { + /* USER CODE BEGIN QUADSPI_MspInit 0 */ + + /* USER CODE END QUADSPI_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_QSPI_CLK_ENABLE(); + 8001940: 4b2b ldr r3, [pc, #172] ; (80019f0 ) + PD12 ------> QUADSPI_BK1_IO1 + PD13 ------> QUADSPI_BK1_IO3 + PD11 ------> QUADSPI_BK1_IO0 + */ + GPIO_InitStruct.Pin = GPIO_PIN_2; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + 8001942: 2502 movs r5, #2 + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF9_QUADSPI; + 8001944: 2403 movs r4, #3 + 8001946: 2609 movs r6, #9 + __HAL_RCC_QSPI_CLK_ENABLE(); + 8001948: 6b9a ldr r2, [r3, #56] ; 0x38 + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + 800194a: f04f 0804 mov.w r8, #4 + HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); + 800194e: a905 add r1, sp, #20 + 8001950: 4828 ldr r0, [pc, #160] ; (80019f4 ) + __HAL_RCC_QSPI_CLK_ENABLE(); + 8001952: f042 0202 orr.w r2, r2, #2 + + GPIO_InitStruct.Pin = GPIO_PIN_6; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + 8001956: 2700 movs r7, #0 + __HAL_RCC_QSPI_CLK_ENABLE(); + 8001958: 639a str r2, [r3, #56] ; 0x38 + 800195a: 6b9a ldr r2, [r3, #56] ; 0x38 + 800195c: f002 0202 and.w r2, r2, #2 + 8001960: 9201 str r2, [sp, #4] + 8001962: 9a01 ldr r2, [sp, #4] + __HAL_RCC_GPIOE_CLK_ENABLE(); + 8001964: 6b1a ldr r2, [r3, #48] ; 0x30 + 8001966: f042 0210 orr.w r2, r2, #16 + 800196a: 631a str r2, [r3, #48] ; 0x30 + 800196c: 6b1a ldr r2, [r3, #48] ; 0x30 + 800196e: f002 0210 and.w r2, r2, #16 + 8001972: 9202 str r2, [sp, #8] + 8001974: 9a02 ldr r2, [sp, #8] + __HAL_RCC_GPIOB_CLK_ENABLE(); + 8001976: 6b1a ldr r2, [r3, #48] ; 0x30 + 8001978: f042 0202 orr.w r2, r2, #2 + 800197c: 631a str r2, [r3, #48] ; 0x30 + 800197e: 6b1a ldr r2, [r3, #48] ; 0x30 + 8001980: f002 0202 and.w r2, r2, #2 + 8001984: 9203 str r2, [sp, #12] + 8001986: 9a03 ldr r2, [sp, #12] + __HAL_RCC_GPIOD_CLK_ENABLE(); + 8001988: 6b1a ldr r2, [r3, #48] ; 0x30 + 800198a: f042 0208 orr.w r2, r2, #8 + 800198e: 631a str r2, [r3, #48] ; 0x30 + 8001990: 6b1b ldr r3, [r3, #48] ; 0x30 + 8001992: f003 0308 and.w r3, r3, #8 + 8001996: 9304 str r3, [sp, #16] + 8001998: 9b04 ldr r3, [sp, #16] + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + 800199a: e9cd 8505 strd r8, r5, [sp, #20] + GPIO_InitStruct.Alternate = GPIO_AF9_QUADSPI; + 800199e: e9cd 4608 strd r4, r6, [sp, #32] + HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); + 80019a2: f004 fe37 bl 8006614 + GPIO_InitStruct.Pin = GPIO_PIN_6; + 80019a6: 2340 movs r3, #64 ; 0x40 + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF10_QUADSPI; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + 80019a8: a905 add r1, sp, #20 + 80019aa: 4813 ldr r0, [pc, #76] ; (80019f8 ) + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + 80019ac: e9cd 3505 strd r3, r5, [sp, #20] + GPIO_InitStruct.Alternate = GPIO_AF10_QUADSPI; + 80019b0: 230a movs r3, #10 + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + 80019b2: e9cd 7407 strd r7, r4, [sp, #28] + GPIO_InitStruct.Alternate = GPIO_AF10_QUADSPI; + 80019b6: 9309 str r3, [sp, #36] ; 0x24 + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + 80019b8: f004 fe2c bl 8006614 + GPIO_InitStruct.Pin = GPIO_PIN_2; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF9_QUADSPI; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + 80019bc: a905 add r1, sp, #20 + 80019be: 480e ldr r0, [pc, #56] ; (80019f8 ) + GPIO_InitStruct.Alternate = GPIO_AF9_QUADSPI; + 80019c0: 9609 str r6, [sp, #36] ; 0x24 + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + 80019c2: e9cd 8505 strd r8, r5, [sp, #20] + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + 80019c6: e9cd 7407 strd r7, r4, [sp, #28] + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + 80019ca: f004 fe23 bl 8006614 + + GPIO_InitStruct.Pin = GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_11; + 80019ce: f44f 5360 mov.w r3, #14336 ; 0x3800 + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF9_QUADSPI; + HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); + 80019d2: a905 add r1, sp, #20 + 80019d4: 4809 ldr r0, [pc, #36] ; (80019fc ) + GPIO_InitStruct.Alternate = GPIO_AF9_QUADSPI; + 80019d6: 9609 str r6, [sp, #36] ; 0x24 + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + 80019d8: e9cd 3505 strd r3, r5, [sp, #20] + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + 80019dc: e9cd 7407 strd r7, r4, [sp, #28] + HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); + 80019e0: f004 fe18 bl 8006614 + /* USER CODE BEGIN QUADSPI_MspInit 1 */ + + /* USER CODE END QUADSPI_MspInit 1 */ + } + +} + 80019e4: b00a add sp, #40 ; 0x28 + 80019e6: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + 80019ea: bf00 nop + 80019ec: a0001000 .word 0xa0001000 + 80019f0: 40023800 .word 0x40023800 + 80019f4: 40021000 .word 0x40021000 + 80019f8: 40020400 .word 0x40020400 + 80019fc: 40020c00 .word 0x40020c00 + +08001a00 : +* @param hqspi: QSPI handle pointer +* @retval None +*/ +void HAL_QSPI_MspDeInit(QSPI_HandleTypeDef* hqspi) +{ + if(hqspi->Instance==QUADSPI) + 8001a00: 6802 ldr r2, [r0, #0] +{ + 8001a02: b508 push {r3, lr} + if(hqspi->Instance==QUADSPI) + 8001a04: 4b0b ldr r3, [pc, #44] ; (8001a34 ) + 8001a06: 429a cmp r2, r3 + 8001a08: d113 bne.n 8001a32 + { + /* USER CODE BEGIN QUADSPI_MspDeInit 0 */ + + /* USER CODE END QUADSPI_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_QSPI_CLK_DISABLE(); + 8001a0a: 4a0b ldr r2, [pc, #44] ; (8001a38 ) + PB2 ------> QUADSPI_CLK + PD12 ------> QUADSPI_BK1_IO1 + PD13 ------> QUADSPI_BK1_IO3 + PD11 ------> QUADSPI_BK1_IO0 + */ + HAL_GPIO_DeInit(GPIOE, GPIO_PIN_2); + 8001a0c: 2104 movs r1, #4 + 8001a0e: 480b ldr r0, [pc, #44] ; (8001a3c ) + __HAL_RCC_QSPI_CLK_DISABLE(); + 8001a10: 6b93 ldr r3, [r2, #56] ; 0x38 + 8001a12: f023 0302 bic.w r3, r3, #2 + 8001a16: 6393 str r3, [r2, #56] ; 0x38 + HAL_GPIO_DeInit(GPIOE, GPIO_PIN_2); + 8001a18: f004 fede bl 80067d8 + + HAL_GPIO_DeInit(GPIOB, GPIO_PIN_6|GPIO_PIN_2); + 8001a1c: 2144 movs r1, #68 ; 0x44 + 8001a1e: 4808 ldr r0, [pc, #32] ; (8001a40 ) + 8001a20: f004 feda bl 80067d8 + + HAL_GPIO_DeInit(GPIOD, GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_11); + 8001a24: f44f 5160 mov.w r1, #14336 ; 0x3800 + 8001a28: 4806 ldr r0, [pc, #24] ; (8001a44 ) + /* USER CODE BEGIN QUADSPI_MspDeInit 1 */ + + /* USER CODE END QUADSPI_MspDeInit 1 */ + } + +} + 8001a2a: e8bd 4008 ldmia.w sp!, {r3, lr} + HAL_GPIO_DeInit(GPIOD, GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_11); + 8001a2e: f004 bed3 b.w 80067d8 +} + 8001a32: bd08 pop {r3, pc} + 8001a34: a0001000 .word 0xa0001000 + 8001a38: 40023800 .word 0x40023800 + 8001a3c: 40021000 .word 0x40021000 + 8001a40: 40020400 .word 0x40020400 + 8001a44: 40020c00 .word 0x40020c00 + +08001a48 : +* @param htim_base: TIM_Base handle pointer +* @retval None +*/ +void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base) +{ + if(htim_base->Instance==TIM1) + 8001a48: 6803 ldr r3, [r0, #0] +{ + 8001a4a: b084 sub sp, #16 + if(htim_base->Instance==TIM1) + 8001a4c: 4a1c ldr r2, [pc, #112] ; (8001ac0 ) + 8001a4e: 4293 cmp r3, r2 + 8001a50: d10b bne.n 8001a6a + { + /* USER CODE BEGIN TIM1_MspInit 0 */ + + /* USER CODE END TIM1_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_TIM1_CLK_ENABLE(); + 8001a52: 4b1c ldr r3, [pc, #112] ; (8001ac4 ) + 8001a54: 6c5a ldr r2, [r3, #68] ; 0x44 + 8001a56: f042 0201 orr.w r2, r2, #1 + 8001a5a: 645a str r2, [r3, #68] ; 0x44 + 8001a5c: 6c5b ldr r3, [r3, #68] ; 0x44 + 8001a5e: f003 0301 and.w r3, r3, #1 + 8001a62: 9300 str r3, [sp, #0] + 8001a64: 9b00 ldr r3, [sp, #0] + /* USER CODE BEGIN TIM12_MspInit 1 */ + + /* USER CODE END TIM12_MspInit 1 */ + } + +} + 8001a66: b004 add sp, #16 + 8001a68: 4770 bx lr + else if(htim_base->Instance==TIM4) + 8001a6a: 4a17 ldr r2, [pc, #92] ; (8001ac8 ) + 8001a6c: 4293 cmp r3, r2 + 8001a6e: d10a bne.n 8001a86 + __HAL_RCC_TIM4_CLK_ENABLE(); + 8001a70: 4b14 ldr r3, [pc, #80] ; (8001ac4 ) + 8001a72: 6c1a ldr r2, [r3, #64] ; 0x40 + 8001a74: f042 0204 orr.w r2, r2, #4 + 8001a78: 641a str r2, [r3, #64] ; 0x40 + 8001a7a: 6c1b ldr r3, [r3, #64] ; 0x40 + 8001a7c: f003 0304 and.w r3, r3, #4 + 8001a80: 9301 str r3, [sp, #4] + 8001a82: 9b01 ldr r3, [sp, #4] + 8001a84: e7ef b.n 8001a66 + else if(htim_base->Instance==TIM5) + 8001a86: 4a11 ldr r2, [pc, #68] ; (8001acc ) + 8001a88: 4293 cmp r3, r2 + 8001a8a: d10a bne.n 8001aa2 + __HAL_RCC_TIM5_CLK_ENABLE(); + 8001a8c: 4b0d ldr r3, [pc, #52] ; (8001ac4 ) + 8001a8e: 6c1a ldr r2, [r3, #64] ; 0x40 + 8001a90: f042 0208 orr.w r2, r2, #8 + 8001a94: 641a str r2, [r3, #64] ; 0x40 + 8001a96: 6c1b ldr r3, [r3, #64] ; 0x40 + 8001a98: f003 0308 and.w r3, r3, #8 + 8001a9c: 9302 str r3, [sp, #8] + 8001a9e: 9b02 ldr r3, [sp, #8] + 8001aa0: e7e1 b.n 8001a66 + else if(htim_base->Instance==TIM12) + 8001aa2: 4a0b ldr r2, [pc, #44] ; (8001ad0 ) + 8001aa4: 4293 cmp r3, r2 + 8001aa6: d1de bne.n 8001a66 + __HAL_RCC_TIM12_CLK_ENABLE(); + 8001aa8: 4b06 ldr r3, [pc, #24] ; (8001ac4 ) + 8001aaa: 6c1a ldr r2, [r3, #64] ; 0x40 + 8001aac: f042 0240 orr.w r2, r2, #64 ; 0x40 + 8001ab0: 641a str r2, [r3, #64] ; 0x40 + 8001ab2: 6c1b ldr r3, [r3, #64] ; 0x40 + 8001ab4: f003 0340 and.w r3, r3, #64 ; 0x40 + 8001ab8: 9303 str r3, [sp, #12] + 8001aba: 9b03 ldr r3, [sp, #12] +} + 8001abc: e7d3 b.n 8001a66 + 8001abe: bf00 nop + 8001ac0: 40010000 .word 0x40010000 + 8001ac4: 40023800 .word 0x40023800 + 8001ac8: 40000800 .word 0x40000800 + 8001acc: 40000c00 .word 0x40000c00 + 8001ad0: 40001800 .word 0x40001800 + +08001ad4 : + +void HAL_TIM_MspPostInit(TIM_HandleTypeDef* htim) +{ + 8001ad4: b530 push {r4, r5, lr} + 8001ad6: b08d sub sp, #52 ; 0x34 + 8001ad8: 4604 mov r4, r0 + GPIO_InitTypeDef GPIO_InitStruct = {0}; + 8001ada: 2214 movs r2, #20 + 8001adc: 2100 movs r1, #0 + 8001ade: a807 add r0, sp, #28 + 8001ae0: f032 ff6c bl 80349bc + if(htim->Instance==TIM1) + 8001ae4: 6823 ldr r3, [r4, #0] + 8001ae6: 4a47 ldr r2, [pc, #284] ; (8001c04 ) + 8001ae8: 4293 cmp r3, r2 + 8001aea: d126 bne.n 8001b3a + { + /* USER CODE BEGIN TIM1_MspPostInit 0 */ + + /* USER CODE END TIM1_MspPostInit 0 */ + __HAL_RCC_GPIOA_CLK_ENABLE(); + 8001aec: 4b46 ldr r3, [pc, #280] ; (8001c08 ) + /**TIM1 GPIO Configuration + PA8 ------> TIM1_CH1 + PB14 ------> TIM1_CH2N + */ + GPIO_InitStruct.Pin = PWM1_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + 8001aee: 2502 movs r5, #2 + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF1_TIM1; + 8001af0: 2401 movs r4, #1 + HAL_GPIO_Init(PWM1_GPIO_Port, &GPIO_InitStruct); + 8001af2: a907 add r1, sp, #28 + __HAL_RCC_GPIOA_CLK_ENABLE(); + 8001af4: 6b1a ldr r2, [r3, #48] ; 0x30 + HAL_GPIO_Init(PWM1_GPIO_Port, &GPIO_InitStruct); + 8001af6: 4845 ldr r0, [pc, #276] ; (8001c0c ) + __HAL_RCC_GPIOA_CLK_ENABLE(); + 8001af8: f042 0201 orr.w r2, r2, #1 + 8001afc: 631a str r2, [r3, #48] ; 0x30 + 8001afe: 6b1a ldr r2, [r3, #48] ; 0x30 + 8001b00: f002 0201 and.w r2, r2, #1 + 8001b04: 9200 str r2, [sp, #0] + 8001b06: 9a00 ldr r2, [sp, #0] + __HAL_RCC_GPIOB_CLK_ENABLE(); + 8001b08: 6b1a ldr r2, [r3, #48] ; 0x30 + 8001b0a: f042 0202 orr.w r2, r2, #2 + 8001b0e: 631a str r2, [r3, #48] ; 0x30 + 8001b10: 6b1b ldr r3, [r3, #48] ; 0x30 + GPIO_InitStruct.Alternate = GPIO_AF1_TIM1; + 8001b12: 940b str r4, [sp, #44] ; 0x2c + __HAL_RCC_GPIOB_CLK_ENABLE(); + 8001b14: f003 0302 and.w r3, r3, #2 + 8001b18: 9301 str r3, [sp, #4] + 8001b1a: 9b01 ldr r3, [sp, #4] + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + 8001b1c: f44f 7380 mov.w r3, #256 ; 0x100 + 8001b20: e9cd 3507 strd r3, r5, [sp, #28] + HAL_GPIO_Init(PWM1_GPIO_Port, &GPIO_InitStruct); + 8001b24: f004 fd76 bl 8006614 + + GPIO_InitStruct.Pin = PWM2_Pin; + 8001b28: f44f 4380 mov.w r3, #16384 ; 0x4000 + + GPIO_InitStruct.Pin = PWM8_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF9_TIM12; + 8001b2c: 940b str r4, [sp, #44] ; 0x2c + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + 8001b2e: e9cd 3507 strd r3, r5, [sp, #28] + GPIO_InitStruct.Pull = GPIO_NOPULL; + 8001b32: 2300 movs r3, #0 + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + 8001b34: e9cd 3309 strd r3, r3, [sp, #36] ; 0x24 + GPIO_InitStruct.Alternate = GPIO_AF9_TIM12; + 8001b38: e012 b.n 8001b60 + else if(htim->Instance==TIM4) + 8001b3a: 4a35 ldr r2, [pc, #212] ; (8001c10 ) + 8001b3c: 4293 cmp r3, r2 + 8001b3e: d112 bne.n 8001b66 + __HAL_RCC_GPIOB_CLK_ENABLE(); + 8001b40: 4b31 ldr r3, [pc, #196] ; (8001c08 ) + 8001b42: 6b1a ldr r2, [r3, #48] ; 0x30 + 8001b44: f042 0202 orr.w r2, r2, #2 + 8001b48: 631a str r2, [r3, #48] ; 0x30 + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + 8001b4a: f44f 7240 mov.w r2, #768 ; 0x300 + __HAL_RCC_GPIOB_CLK_ENABLE(); + 8001b4e: 6b1b ldr r3, [r3, #48] ; 0x30 + 8001b50: f003 0302 and.w r3, r3, #2 + 8001b54: 9302 str r3, [sp, #8] + 8001b56: 9b02 ldr r3, [sp, #8] + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + 8001b58: 2302 movs r3, #2 + 8001b5a: e9cd 2307 strd r2, r3, [sp, #28] + GPIO_InitStruct.Alternate = GPIO_AF2_TIM4; + 8001b5e: 930b str r3, [sp, #44] ; 0x2c + HAL_GPIO_Init(PWM8_GPIO_Port, &GPIO_InitStruct); + 8001b60: a907 add r1, sp, #28 + 8001b62: 482c ldr r0, [pc, #176] ; (8001c14 ) + 8001b64: e026 b.n 8001bb4 + else if(htim->Instance==TIM5) + 8001b66: 4a2c ldr r2, [pc, #176] ; (8001c18 ) + 8001b68: 4293 cmp r3, r2 + 8001b6a: d127 bne.n 8001bbc + __HAL_RCC_GPIOI_CLK_ENABLE(); + 8001b6c: 4b26 ldr r3, [pc, #152] ; (8001c08 ) + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + 8001b6e: 2402 movs r4, #2 + 8001b70: 2501 movs r5, #1 + HAL_GPIO_Init(PWM6_GPIO_Port, &GPIO_InitStruct); + 8001b72: a907 add r1, sp, #28 + __HAL_RCC_GPIOI_CLK_ENABLE(); + 8001b74: 6b1a ldr r2, [r3, #48] ; 0x30 + HAL_GPIO_Init(PWM6_GPIO_Port, &GPIO_InitStruct); + 8001b76: 4829 ldr r0, [pc, #164] ; (8001c1c ) + __HAL_RCC_GPIOI_CLK_ENABLE(); + 8001b78: f442 7280 orr.w r2, r2, #256 ; 0x100 + 8001b7c: 631a str r2, [r3, #48] ; 0x30 + 8001b7e: 6b1a ldr r2, [r3, #48] ; 0x30 + 8001b80: f402 7280 and.w r2, r2, #256 ; 0x100 + 8001b84: 9203 str r2, [sp, #12] + 8001b86: 9a03 ldr r2, [sp, #12] + __HAL_RCC_GPIOA_CLK_ENABLE(); + 8001b88: 6b1a ldr r2, [r3, #48] ; 0x30 + 8001b8a: f042 0201 orr.w r2, r2, #1 + 8001b8e: 631a str r2, [r3, #48] ; 0x30 + 8001b90: 6b1b ldr r3, [r3, #48] ; 0x30 + GPIO_InitStruct.Alternate = GPIO_AF2_TIM5; + 8001b92: 940b str r4, [sp, #44] ; 0x2c + __HAL_RCC_GPIOA_CLK_ENABLE(); + 8001b94: f003 0301 and.w r3, r3, #1 + 8001b98: 9304 str r3, [sp, #16] + 8001b9a: 9b04 ldr r3, [sp, #16] + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + 8001b9c: e9cd 5407 strd r5, r4, [sp, #28] + HAL_GPIO_Init(PWM6_GPIO_Port, &GPIO_InitStruct); + 8001ba0: f004 fd38 bl 8006614 + GPIO_InitStruct.Pull = GPIO_NOPULL; + 8001ba4: 2300 movs r3, #0 + HAL_GPIO_Init(PWM5_GPIO_Port, &GPIO_InitStruct); + 8001ba6: a907 add r1, sp, #28 + 8001ba8: 4818 ldr r0, [pc, #96] ; (8001c0c ) + GPIO_InitStruct.Alternate = GPIO_AF2_TIM5; + 8001baa: 940b str r4, [sp, #44] ; 0x2c + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + 8001bac: e9cd 5407 strd r5, r4, [sp, #28] + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + 8001bb0: e9cd 3309 strd r3, r3, [sp, #36] ; 0x24 + HAL_GPIO_Init(PWM8_GPIO_Port, &GPIO_InitStruct); + 8001bb4: f004 fd2e bl 8006614 + /* USER CODE BEGIN TIM12_MspPostInit 1 */ + + /* USER CODE END TIM12_MspPostInit 1 */ + } + +} + 8001bb8: b00d add sp, #52 ; 0x34 + 8001bba: bd30 pop {r4, r5, pc} + else if(htim->Instance==TIM12) + 8001bbc: 4a18 ldr r2, [pc, #96] ; (8001c20 ) + 8001bbe: 4293 cmp r3, r2 + 8001bc0: d1fa bne.n 8001bb8 + __HAL_RCC_GPIOH_CLK_ENABLE(); + 8001bc2: 4b11 ldr r3, [pc, #68] ; (8001c08 ) + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + 8001bc4: 2502 movs r5, #2 + GPIO_InitStruct.Alternate = GPIO_AF9_TIM12; + 8001bc6: 2409 movs r4, #9 + HAL_GPIO_Init(PWM7_GPIO_Port, &GPIO_InitStruct); + 8001bc8: a907 add r1, sp, #28 + __HAL_RCC_GPIOH_CLK_ENABLE(); + 8001bca: 6b1a ldr r2, [r3, #48] ; 0x30 + HAL_GPIO_Init(PWM7_GPIO_Port, &GPIO_InitStruct); + 8001bcc: 4815 ldr r0, [pc, #84] ; (8001c24 ) + __HAL_RCC_GPIOH_CLK_ENABLE(); + 8001bce: f042 0280 orr.w r2, r2, #128 ; 0x80 + 8001bd2: 631a str r2, [r3, #48] ; 0x30 + 8001bd4: 6b1a ldr r2, [r3, #48] ; 0x30 + 8001bd6: f002 0280 and.w r2, r2, #128 ; 0x80 + 8001bda: 9205 str r2, [sp, #20] + 8001bdc: 9a05 ldr r2, [sp, #20] + __HAL_RCC_GPIOB_CLK_ENABLE(); + 8001bde: 6b1a ldr r2, [r3, #48] ; 0x30 + 8001be0: f042 0202 orr.w r2, r2, #2 + 8001be4: 631a str r2, [r3, #48] ; 0x30 + 8001be6: 6b1b ldr r3, [r3, #48] ; 0x30 + GPIO_InitStruct.Alternate = GPIO_AF9_TIM12; + 8001be8: 940b str r4, [sp, #44] ; 0x2c + __HAL_RCC_GPIOB_CLK_ENABLE(); + 8001bea: f003 0302 and.w r3, r3, #2 + 8001bee: 9306 str r3, [sp, #24] + 8001bf0: 9b06 ldr r3, [sp, #24] + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + 8001bf2: 2340 movs r3, #64 ; 0x40 + 8001bf4: e9cd 3507 strd r3, r5, [sp, #28] + HAL_GPIO_Init(PWM7_GPIO_Port, &GPIO_InitStruct); + 8001bf8: f004 fd0c bl 8006614 + GPIO_InitStruct.Pin = PWM8_Pin; + 8001bfc: f44f 4300 mov.w r3, #32768 ; 0x8000 + 8001c00: e794 b.n 8001b2c + 8001c02: bf00 nop + 8001c04: 40010000 .word 0x40010000 + 8001c08: 40023800 .word 0x40023800 + 8001c0c: 40020000 .word 0x40020000 + 8001c10: 40000800 .word 0x40000800 + 8001c14: 40020400 .word 0x40020400 + 8001c18: 40000c00 .word 0x40000c00 + 8001c1c: 40022000 .word 0x40022000 + 8001c20: 40001800 .word 0x40001800 + 8001c24: 40021c00 .word 0x40021c00 + +08001c28 : + /* USER CODE BEGIN FMC_MspInit 1 */ + + /* USER CODE END FMC_MspInit 1 */ +} + +void HAL_SDRAM_MspInit(SDRAM_HandleTypeDef* hsdram){ + 8001c28: b5f0 push {r4, r5, r6, r7, lr} + GPIO_InitTypeDef GPIO_InitStruct ={0}; + 8001c2a: 2300 movs r3, #0 +void HAL_SDRAM_MspInit(SDRAM_HandleTypeDef* hsdram){ + 8001c2c: b087 sub sp, #28 + GPIO_InitTypeDef GPIO_InitStruct ={0}; + 8001c2e: 9303 str r3, [sp, #12] + if (FMC_Initialized) { + 8001c30: 4b29 ldr r3, [pc, #164] ; (8001cd8 ) + 8001c32: 681e ldr r6, [r3, #0] + 8001c34: 2e00 cmp r6, #0 + 8001c36: d14d bne.n 8001cd4 + FMC_Initialized = 1; + 8001c38: 2201 movs r2, #1 + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + 8001c3a: 2702 movs r7, #2 + GPIO_InitStruct.Alternate = GPIO_AF12_FMC; + 8001c3c: 2503 movs r5, #3 + 8001c3e: 240c movs r4, #12 + FMC_Initialized = 1; + 8001c40: 601a str r2, [r3, #0] + HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); + 8001c42: a901 add r1, sp, #4 + __HAL_RCC_FMC_CLK_ENABLE(); + 8001c44: 4b25 ldr r3, [pc, #148] ; (8001cdc ) + HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); + 8001c46: 4826 ldr r0, [pc, #152] ; (8001ce0 ) + __HAL_RCC_FMC_CLK_ENABLE(); + 8001c48: 6b9a ldr r2, [r3, #56] ; 0x38 + 8001c4a: f042 0201 orr.w r2, r2, #1 + 8001c4e: 639a str r2, [r3, #56] ; 0x38 + 8001c50: 6b9b ldr r3, [r3, #56] ; 0x38 + 8001c52: f003 0301 and.w r3, r3, #1 + 8001c56: 9300 str r3, [sp, #0] + 8001c58: 9b00 ldr r3, [sp, #0] + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + 8001c5a: f64f 7383 movw r3, #65411 ; 0xff83 + GPIO_InitStruct.Alternate = GPIO_AF12_FMC; + 8001c5e: e9cd 5404 strd r5, r4, [sp, #16] + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + 8001c62: e9cd 3701 strd r3, r7, [sp, #4] + HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); + 8001c66: f004 fcd5 bl 8006614 + GPIO_InitStruct.Pin = GPIO_PIN_15|GPIO_PIN_8|GPIO_PIN_1|GPIO_PIN_0 + 8001c6a: f248 1333 movw r3, #33075 ; 0x8133 + HAL_GPIO_Init(GPIOG, &GPIO_InitStruct); + 8001c6e: a901 add r1, sp, #4 + 8001c70: 481c ldr r0, [pc, #112] ; (8001ce4 ) + GPIO_InitStruct.Alternate = GPIO_AF12_FMC; + 8001c72: 9405 str r4, [sp, #20] + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + 8001c74: e9cd 3701 strd r3, r7, [sp, #4] + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + 8001c78: e9cd 6503 strd r6, r5, [sp, #12] + HAL_GPIO_Init(GPIOG, &GPIO_InitStruct); + 8001c7c: f004 fcca bl 8006614 + GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_15|GPIO_PIN_10 + 8001c80: f24c 7303 movw r3, #50947 ; 0xc703 + HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); + 8001c84: a901 add r1, sp, #4 + 8001c86: 4818 ldr r0, [pc, #96] ; (8001ce8 ) + GPIO_InitStruct.Alternate = GPIO_AF12_FMC; + 8001c88: 9405 str r4, [sp, #20] + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + 8001c8a: e9cd 3701 strd r3, r7, [sp, #4] + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + 8001c8e: e9cd 6503 strd r6, r5, [sp, #12] + HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); + 8001c92: f004 fcbf bl 8006614 + GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3 + 8001c96: f64f 033f movw r3, #63551 ; 0xf83f + HAL_GPIO_Init(GPIOF, &GPIO_InitStruct); + 8001c9a: a901 add r1, sp, #4 + 8001c9c: 4813 ldr r0, [pc, #76] ; (8001cec ) + GPIO_InitStruct.Alternate = GPIO_AF12_FMC; + 8001c9e: 9405 str r4, [sp, #20] + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + 8001ca0: e9cd 3701 strd r3, r7, [sp, #4] + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + 8001ca4: e9cd 6503 strd r6, r5, [sp, #12] + HAL_GPIO_Init(GPIOF, &GPIO_InitStruct); + 8001ca8: f004 fcb4 bl 8006614 + GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_3; + 8001cac: 2328 movs r3, #40 ; 0x28 + HAL_GPIO_Init(GPIOH, &GPIO_InitStruct); + 8001cae: a901 add r1, sp, #4 + 8001cb0: 480f ldr r0, [pc, #60] ; (8001cf0 ) + GPIO_InitStruct.Alternate = GPIO_AF12_FMC; + 8001cb2: 9405 str r4, [sp, #20] + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + 8001cb4: e9cd 3701 strd r3, r7, [sp, #4] + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + 8001cb8: e9cd 6503 strd r6, r5, [sp, #12] + HAL_GPIO_Init(GPIOH, &GPIO_InitStruct); + 8001cbc: f004 fcaa bl 8006614 + GPIO_InitStruct.Pin = GPIO_PIN_3; + 8001cc0: 2308 movs r3, #8 + HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); + 8001cc2: a901 add r1, sp, #4 + 8001cc4: 480b ldr r0, [pc, #44] ; (8001cf4 ) + GPIO_InitStruct.Alternate = GPIO_AF12_FMC; + 8001cc6: 9405 str r4, [sp, #20] + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + 8001cc8: e9cd 3701 strd r3, r7, [sp, #4] + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + 8001ccc: e9cd 6503 strd r6, r5, [sp, #12] + HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); + 8001cd0: f004 fca0 bl 8006614 + /* USER CODE END SDRAM_MspInit 0 */ + HAL_FMC_MspInit(); + /* USER CODE BEGIN SDRAM_MspInit 1 */ + + /* USER CODE END SDRAM_MspInit 1 */ +} + 8001cd4: b007 add sp, #28 + 8001cd6: bdf0 pop {r4, r5, r6, r7, pc} + 8001cd8: 200005ec .word 0x200005ec + 8001cdc: 40023800 .word 0x40023800 + 8001ce0: 40021000 .word 0x40021000 + 8001ce4: 40021800 .word 0x40021800 + 8001ce8: 40020c00 .word 0x40020c00 + 8001cec: 40021400 .word 0x40021400 + 8001cf0: 40021c00 .word 0x40021c00 + 8001cf4: 40020800 .word 0x40020800 + +08001cf8 : + uint32_t uwPrescalerValue = 0U; + uint32_t pFLatency; + HAL_StatusTypeDef status; + + /* Enable TIM6 clock */ + __HAL_RCC_TIM6_CLK_ENABLE(); + 8001cf8: 4b21 ldr r3, [pc, #132] ; (8001d80 ) + 8001cfa: 6c1a ldr r2, [r3, #64] ; 0x40 + 8001cfc: f042 0210 orr.w r2, r2, #16 +{ + 8001d00: b570 push {r4, r5, r6, lr} + __HAL_RCC_TIM6_CLK_ENABLE(); + 8001d02: 641a str r2, [r3, #64] ; 0x40 +{ + 8001d04: b088 sub sp, #32 + __HAL_RCC_TIM6_CLK_ENABLE(); + 8001d06: 6c1b ldr r3, [r3, #64] ; 0x40 +{ + 8001d08: 4605 mov r5, r0 + + /* Get clock configuration */ + HAL_RCC_GetClockConfig(&clkconfig, &pFLatency); + 8001d0a: a901 add r1, sp, #4 + 8001d0c: a803 add r0, sp, #12 + __HAL_RCC_TIM6_CLK_ENABLE(); + 8001d0e: f003 0310 and.w r3, r3, #16 + 8001d12: 9302 str r3, [sp, #8] + 8001d14: 9b02 ldr r3, [sp, #8] + HAL_RCC_GetClockConfig(&clkconfig, &pFLatency); + 8001d16: f006 f92b bl 8007f70 + + /* Get APB1 prescaler */ + uwAPB1Prescaler = clkconfig.APB1CLKDivider; + /* Compute TIM6 clock */ + if (uwAPB1Prescaler == RCC_HCLK_DIV1) + 8001d1a: 9b06 ldr r3, [sp, #24] + 8001d1c: bb4b cbnz r3, 8001d72 + { + uwTimclock = HAL_RCC_GetPCLK1Freq(); + 8001d1e: f006 f917 bl 8007f50 + + /* Compute the prescaler value to have TIM6 counter clock equal to 1MHz */ + uwPrescalerValue = (uint32_t) ((uwTimclock / 1000000U) - 1U); + + /* Initialize TIM6 */ + htim6.Instance = TIM6; + 8001d22: 4e18 ldr r6, [pc, #96] ; (8001d84 ) + 8001d24: 4b18 ldr r3, [pc, #96] ; (8001d88 ) + 8001d26: 6033 str r3, [r6, #0] + + Period = [(TIM6CLK/1000) - 1]. to have a (1/1000) s time base. + + Prescaler = (uwTimclock/1000000 - 1) to have a 1MHz counter clock. + + ClockDivision = 0 + + Counter direction = Up + */ + htim6.Init.Period = (1000000U / 1000U) - 1U; + 8001d28: f240 33e7 movw r3, #999 ; 0x3e7 + 8001d2c: 60f3 str r3, [r6, #12] + uwPrescalerValue = (uint32_t) ((uwTimclock / 1000000U) - 1U); + 8001d2e: 4b17 ldr r3, [pc, #92] ; (8001d8c ) + 8001d30: fbb0 f3f3 udiv r3, r0, r3 + 8001d34: 3b01 subs r3, #1 + htim6.Init.Prescaler = uwPrescalerValue; + htim6.Init.ClockDivision = 0; + htim6.Init.CounterMode = TIM_COUNTERMODE_UP; + htim6.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; + + status = HAL_TIM_Base_Init(&htim6); + 8001d36: 4630 mov r0, r6 + htim6.Init.Prescaler = uwPrescalerValue; + 8001d38: 6073 str r3, [r6, #4] + htim6.Init.ClockDivision = 0; + 8001d3a: 2300 movs r3, #0 + 8001d3c: 6133 str r3, [r6, #16] + htim6.Init.CounterMode = TIM_COUNTERMODE_UP; + 8001d3e: 60b3 str r3, [r6, #8] + htim6.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; + 8001d40: 61b3 str r3, [r6, #24] + status = HAL_TIM_Base_Init(&htim6); + 8001d42: f006 fe53 bl 80089ec + if (status == HAL_OK) + 8001d46: 4604 mov r4, r0 + 8001d48: b980 cbnz r0, 8001d6c + { + /* Start the TIM time Base generation in interrupt mode */ + status = HAL_TIM_Base_Start_IT(&htim6); + 8001d4a: 4630 mov r0, r6 + 8001d4c: f006 fcf4 bl 8008738 + if (status == HAL_OK) + 8001d50: 4604 mov r4, r0 + 8001d52: b958 cbnz r0, 8001d6c + { + /* Enable the TIM6 global Interrupt */ + HAL_NVIC_EnableIRQ(TIM6_DAC_IRQn); + 8001d54: 2036 movs r0, #54 ; 0x36 + 8001d56: f003 fcc7 bl 80056e8 + /* Configure the SysTick IRQ priority */ + if (TickPriority < (1UL << __NVIC_PRIO_BITS)) + 8001d5a: 2d0f cmp r5, #15 + 8001d5c: d80d bhi.n 8001d7a + { + /* Configure the TIM IRQ priority */ + HAL_NVIC_SetPriority(TIM6_DAC_IRQn, TickPriority, 0U); + 8001d5e: 4622 mov r2, r4 + 8001d60: 4629 mov r1, r5 + 8001d62: 2036 movs r0, #54 ; 0x36 + 8001d64: f003 fc8e bl 8005684 + uwTickPrio = TickPriority; + 8001d68: 4b09 ldr r3, [pc, #36] ; (8001d90 ) + 8001d6a: 601d str r5, [r3, #0] + } + } + + /* Return function status */ + return status; +} + 8001d6c: 4620 mov r0, r4 + 8001d6e: b008 add sp, #32 + 8001d70: bd70 pop {r4, r5, r6, pc} + uwTimclock = 2UL * HAL_RCC_GetPCLK1Freq(); + 8001d72: f006 f8ed bl 8007f50 + 8001d76: 0040 lsls r0, r0, #1 + 8001d78: e7d3 b.n 8001d22 + status = HAL_ERROR; + 8001d7a: 2401 movs r4, #1 + 8001d7c: e7f6 b.n 8001d6c + 8001d7e: bf00 nop + 8001d80: 40023800 .word 0x40023800 + 8001d84: 200005f0 .word 0x200005f0 + 8001d88: 40001000 .word 0x40001000 + 8001d8c: 000f4240 .word 0x000f4240 + 8001d90: 20000050 .word 0x20000050 + +08001d94 : + + /* USER CODE END NonMaskableInt_IRQn 0 */ + /* USER CODE BEGIN NonMaskableInt_IRQn 1 */ + + /* USER CODE END NonMaskableInt_IRQn 1 */ +} + 8001d94: 4770 bx lr + +08001d96 : +void HardFault_Handler(void) +{ + /* USER CODE BEGIN HardFault_IRQn 0 */ + + /* USER CODE END HardFault_IRQn 0 */ + while (1) + 8001d96: e7fe b.n 8001d96 + +08001d98 : +void MemManage_Handler(void) +{ + /* USER CODE BEGIN MemoryManagement_IRQn 0 */ + + /* USER CODE END MemoryManagement_IRQn 0 */ + while (1) + 8001d98: e7fe b.n 8001d98 + +08001d9a : +void BusFault_Handler(void) +{ + /* USER CODE BEGIN BusFault_IRQn 0 */ + + /* USER CODE END BusFault_IRQn 0 */ + while (1) + 8001d9a: e7fe b.n 8001d9a + +08001d9c : +void UsageFault_Handler(void) +{ + /* USER CODE BEGIN UsageFault_IRQn 0 */ + + /* USER CODE END UsageFault_IRQn 0 */ + while (1) + 8001d9c: e7fe b.n 8001d9c + +08001d9e : + 8001d9e: 4770 bx lr + +08001da0 : +void TIM6_DAC_IRQHandler(void) +{ + /* USER CODE BEGIN TIM6_DAC_IRQn 0 */ + + /* USER CODE END TIM6_DAC_IRQn 0 */ + HAL_TIM_IRQHandler(&htim6); + 8001da0: 4801 ldr r0, [pc, #4] ; (8001da8 ) + 8001da2: f006 bd0c b.w 80087be + 8001da6: bf00 nop + 8001da8: 200005f0 .word 0x200005f0 + +08001dac : +void ETH_IRQHandler(void) +{ + /* USER CODE BEGIN ETH_IRQn 0 */ + + /* USER CODE END ETH_IRQn 0 */ + HAL_ETH_IRQHandler(&heth); + 8001dac: 4801 ldr r0, [pc, #4] ; (8001db4 ) + 8001dae: f004 bacb b.w 8006348 + 8001db2: bf00 nop + 8001db4: 2000070c .word 0x2000070c + +08001db8 : +void LTDC_IRQHandler(void) +{ + /* USER CODE BEGIN LTDC_IRQn 0 */ + + /* USER CODE END LTDC_IRQn 0 */ + HAL_LTDC_IRQHandler(&hltdc); + 8001db8: 4801 ldr r0, [pc, #4] ; (8001dc0 ) + 8001dba: f005 ba39 b.w 8007230 + 8001dbe: bf00 nop + 8001dc0: 20000370 .word 0x20000370 + +08001dc4 : +void DMA2D_IRQHandler(void) +{ + /* USER CODE BEGIN DMA2D_IRQn 0 */ + + /* USER CODE END DMA2D_IRQn 0 */ + HAL_DMA2D_IRQHandler(&hdma2d); + 8001dc4: 4801 ldr r0, [pc, #4] ; (8001dcc ) + 8001dc6: f003 bdc4 b.w 8005952 + 8001dca: bf00 nop + 8001dcc: 200002dc .word 0x200002dc + +08001dd0 <_getpid>: +} + +int _getpid(void) +{ + return 1; +} + 8001dd0: 2001 movs r0, #1 + 8001dd2: 4770 bx lr + +08001dd4 <_kill>: + +int _kill(int pid, int sig) +{ + errno = EINVAL; + 8001dd4: 4b02 ldr r3, [pc, #8] ; (8001de0 <_kill+0xc>) + 8001dd6: 2216 movs r2, #22 + return -1; +} + 8001dd8: f04f 30ff mov.w r0, #4294967295 + errno = EINVAL; + 8001ddc: 601a str r2, [r3, #0] +} + 8001dde: 4770 bx lr + 8001de0: 2001e6a4 .word 0x2001e6a4 + +08001de4 <_exit>: + errno = EINVAL; + 8001de4: 4b01 ldr r3, [pc, #4] ; (8001dec <_exit+0x8>) + 8001de6: 2216 movs r2, #22 + 8001de8: 601a str r2, [r3, #0] + +void _exit (int status) +{ + _kill(status, -1); + while (1) {} /* Make sure we hang here */ + 8001dea: e7fe b.n 8001dea <_exit+0x6> + 8001dec: 2001e6a4 .word 0x2001e6a4 + +08001df0 <_read>: +} + +__attribute__((weak)) int _read(int file, char *ptr, int len) +{ + 8001df0: b570 push {r4, r5, r6, lr} + 8001df2: 460d mov r5, r1 + 8001df4: 4614 mov r4, r2 + int DataIdx; + + for (DataIdx = 0; DataIdx < len; DataIdx++) + 8001df6: 460e mov r6, r1 + 8001df8: 1b73 subs r3, r6, r5 + 8001dfa: 429c cmp r4, r3 + 8001dfc: dc01 bgt.n 8001e02 <_read+0x12> + { + *ptr++ = __io_getchar(); + } + +return len; +} + 8001dfe: 4620 mov r0, r4 + 8001e00: bd70 pop {r4, r5, r6, pc} + *ptr++ = __io_getchar(); + 8001e02: f3af 8000 nop.w + 8001e06: f806 0b01 strb.w r0, [r6], #1 + for (DataIdx = 0; DataIdx < len; DataIdx++) + 8001e0a: e7f5 b.n 8001df8 <_read+0x8> + +08001e0c <_write>: + +__attribute__((weak)) int _write(int file, char *ptr, int len) +{ + 8001e0c: b570 push {r4, r5, r6, lr} + 8001e0e: 460d mov r5, r1 + 8001e10: 4614 mov r4, r2 + int DataIdx; + + for (DataIdx = 0; DataIdx < len; DataIdx++) + 8001e12: 460e mov r6, r1 + 8001e14: 1b73 subs r3, r6, r5 + 8001e16: 429c cmp r4, r3 + 8001e18: dc01 bgt.n 8001e1e <_write+0x12> + { + __io_putchar(*ptr++); + } + return len; +} + 8001e1a: 4620 mov r0, r4 + 8001e1c: bd70 pop {r4, r5, r6, pc} + __io_putchar(*ptr++); + 8001e1e: f816 0b01 ldrb.w r0, [r6], #1 + 8001e22: f3af 8000 nop.w + for (DataIdx = 0; DataIdx < len; DataIdx++) + 8001e26: e7f5 b.n 8001e14 <_write+0x8> + +08001e28 <_close>: + +int _close(int file) +{ + return -1; +} + 8001e28: f04f 30ff mov.w r0, #4294967295 + 8001e2c: 4770 bx lr + +08001e2e <_fstat>: + + +int _fstat(int file, struct stat *st) +{ + st->st_mode = S_IFCHR; + 8001e2e: f44f 5300 mov.w r3, #8192 ; 0x2000 + return 0; +} + 8001e32: 2000 movs r0, #0 + st->st_mode = S_IFCHR; + 8001e34: 604b str r3, [r1, #4] +} + 8001e36: 4770 bx lr + +08001e38 <_isatty>: + +int _isatty(int file) +{ + return 1; +} + 8001e38: 2001 movs r0, #1 + 8001e3a: 4770 bx lr + +08001e3c <_lseek>: + +int _lseek(int file, int ptr, int dir) +{ + return 0; +} + 8001e3c: 2000 movs r0, #0 + 8001e3e: 4770 bx lr + +08001e40 <_sbrk>: + const uint32_t stack_limit = (uint32_t)&_estack - (uint32_t)&_Min_Stack_Size; + const uint8_t *max_heap = (uint8_t *)stack_limit; + uint8_t *prev_heap_end; + + /* Initalize heap end at first call */ + if (NULL == __sbrk_heap_end) + 8001e40: 4a0a ldr r2, [pc, #40] ; (8001e6c <_sbrk+0x2c>) +{ + 8001e42: 4603 mov r3, r0 + if (NULL == __sbrk_heap_end) + 8001e44: 6811 ldr r1, [r2, #0] +{ + 8001e46: b510 push {r4, lr} + if (NULL == __sbrk_heap_end) + 8001e48: b909 cbnz r1, 8001e4e <_sbrk+0xe> + { + __sbrk_heap_end = &_end; + 8001e4a: 4909 ldr r1, [pc, #36] ; (8001e70 <_sbrk+0x30>) + 8001e4c: 6011 str r1, [r2, #0] + } + + /* Protect heap from growing into the reserved MSP stack */ + if (__sbrk_heap_end + incr > max_heap) + 8001e4e: 6810 ldr r0, [r2, #0] + 8001e50: 4c08 ldr r4, [pc, #32] ; (8001e74 <_sbrk+0x34>) + 8001e52: 4909 ldr r1, [pc, #36] ; (8001e78 <_sbrk+0x38>) + 8001e54: 4403 add r3, r0 + 8001e56: 1b09 subs r1, r1, r4 + 8001e58: 428b cmp r3, r1 + { + errno = ENOMEM; + 8001e5a: bf83 ittte hi + 8001e5c: 4b07 ldrhi r3, [pc, #28] ; (8001e7c <_sbrk+0x3c>) + 8001e5e: 220c movhi r2, #12 + return (void *)-1; + 8001e60: f04f 30ff movhi.w r0, #4294967295 + } + + prev_heap_end = __sbrk_heap_end; + __sbrk_heap_end += incr; + 8001e64: 6013 strls r3, [r2, #0] + errno = ENOMEM; + 8001e66: bf88 it hi + 8001e68: 601a strhi r2, [r3, #0] + + return (void *)prev_heap_end; +} + 8001e6a: bd10 pop {r4, pc} + 8001e6c: 2000063c .word 0x2000063c + 8001e70: 2001f360 .word 0x2001f360 + 8001e74: 00000a00 .word 0x00000a00 + 8001e78: 20050000 .word 0x20050000 + 8001e7c: 2001e6a4 .word 0x2001e6a4 + +08001e80 : + */ + + /* USER CODE BEGIN 3 */ + /* USER CODE END 3 */ + +} + 8001e80: 4770 bx lr + +08001e82 : + else /* netif is down */ + { +/* USER CODE BEGIN 6 */ +/* USER CODE END 6 */ + } +} + 8001e82: 4770 bx lr + +08001e84 : + tcpip_init( NULL, NULL ); + 8001e84: 2100 movs r1, #0 +{ + 8001e86: b530 push {r4, r5, lr} + tcpip_init( NULL, NULL ); + 8001e88: 4608 mov r0, r1 +{ + 8001e8a: b085 sub sp, #20 + tcpip_init( NULL, NULL ); + 8001e8c: f01d fa9a bl 801f3c4 + netif_add(&gnetif, &ipaddr, &netmask, &gw, NULL, ðernetif_init, &tcpip_input); + 8001e90: 4d1c ldr r5, [pc, #112] ; (8001f04 ) + ipaddr.addr = 0; + 8001e92: 2000 movs r0, #0 + 8001e94: 491c ldr r1, [pc, #112] ; (8001f08 ) + gw.addr = 0; + 8001e96: 4b1d ldr r3, [pc, #116] ; (8001f0c ) + netmask.addr = 0; + 8001e98: 4a1d ldr r2, [pc, #116] ; (8001f10 ) + ipaddr.addr = 0; + 8001e9a: 6008 str r0, [r1, #0] + gw.addr = 0; + 8001e9c: 6018 str r0, [r3, #0] + netmask.addr = 0; + 8001e9e: 6010 str r0, [r2, #0] + netif_add(&gnetif, &ipaddr, &netmask, &gw, NULL, ðernetif_init, &tcpip_input); + 8001ea0: 4c1c ldr r4, [pc, #112] ; (8001f14 ) + 8001ea2: 9502 str r5, [sp, #8] + 8001ea4: 4d1c ldr r5, [pc, #112] ; (8001f18 ) + 8001ea6: e9cd 0500 strd r0, r5, [sp] + 8001eaa: 4620 mov r0, r4 + 8001eac: f019 fc5c bl 801b768 + netif_set_default(&gnetif); + 8001eb0: 4620 mov r0, r4 + 8001eb2: f019 fcef bl 801b894 + if (netif_is_link_up(&gnetif)) + 8001eb6: f894 3031 ldrb.w r3, [r4, #49] ; 0x31 + netif_set_up(&gnetif); + 8001eba: 4620 mov r0, r4 + if (netif_is_link_up(&gnetif)) + 8001ebc: 0759 lsls r1, r3, #29 + 8001ebe: d51d bpl.n 8001efc + netif_set_up(&gnetif); + 8001ec0: f019 fcee bl 801b8a0 + memset(&attributes, 0x0, sizeof(osThreadAttr_t)); + 8001ec4: 4c15 ldr r4, [pc, #84] ; (8001f1c ) + netif_set_link_callback(&gnetif, ethernet_link_status_updated); + 8001ec6: 4916 ldr r1, [pc, #88] ; (8001f20 ) + 8001ec8: 4812 ldr r0, [pc, #72] ; (8001f14 ) + 8001eca: f019 fd61 bl 801b990 + memset(&attributes, 0x0, sizeof(osThreadAttr_t)); + 8001ece: 2220 movs r2, #32 + 8001ed0: 2100 movs r1, #0 + 8001ed2: 1d20 adds r0, r4, #4 + 8001ed4: f032 fd72 bl 80349bc + attributes.name = "EthLink"; + 8001ed8: 4b12 ldr r3, [pc, #72] ; (8001f24 ) + attributes.priority = osPriorityBelowNormal; + 8001eda: f44f 6280 mov.w r2, #1024 ; 0x400 + osThreadNew(ethernet_link_thread, &gnetif, &attributes); + 8001ede: 490d ldr r1, [pc, #52] ; (8001f14 ) + attributes.name = "EthLink"; + 8001ee0: 6023 str r3, [r4, #0] + attributes.priority = osPriorityBelowNormal; + 8001ee2: 2310 movs r3, #16 + osThreadNew(ethernet_link_thread, &gnetif, &attributes); + 8001ee4: 4810 ldr r0, [pc, #64] ; (8001f28 ) + attributes.priority = osPriorityBelowNormal; + 8001ee6: e9c4 2305 strd r2, r3, [r4, #20] + osThreadNew(ethernet_link_thread, &gnetif, &attributes); + 8001eea: 4622 mov r2, r4 + 8001eec: f007 f93e bl 800916c + dhcp_start(&gnetif); + 8001ef0: 4808 ldr r0, [pc, #32] ; (8001f14 ) +} + 8001ef2: b005 add sp, #20 + 8001ef4: e8bd 4030 ldmia.w sp!, {r4, r5, lr} + dhcp_start(&gnetif); + 8001ef8: f017 bc72 b.w 80197e0 + netif_set_down(&gnetif); + 8001efc: f019 fcea bl 801b8d4 + 8001f00: e7e0 b.n 8001ec4 + 8001f02: bf00 nop + 8001f04: 0801f351 .word 0x0801f351 + 8001f08: 200006a0 .word 0x200006a0 + 8001f0c: 2000069c .word 0x2000069c + 8001f10: 200006a4 .word 0x200006a4 + 8001f14: 20000664 .word 0x20000664 + 8001f18: 080020b9 .word 0x080020b9 + 8001f1c: 20000640 .word 0x20000640 + 8001f20: 08001e83 .word 0x08001e83 + 8001f24: 08035924 .word 0x08035924 + 8001f28: 08002375 .word 0x08002375 + +08001f2c : + * @retval 0 if OK, -1 if ERROR + */ +int32_t ETH_PHY_IO_DeInit (void) +{ + return 0; +} + 8001f2c: 2000 movs r0, #0 + 8001f2e: 4770 bx lr + +08001f30 : +{ + 8001f30: b530 push {r4, r5, lr} + 8001f32: b08d sub sp, #52 ; 0x34 + 8001f34: 460c mov r4, r1 + memset(Txbuffer, 0 , ETH_TX_DESC_CNT*sizeof(ETH_BufferTypeDef)); + 8001f36: 2230 movs r2, #48 ; 0x30 + 8001f38: 2100 movs r1, #0 + 8001f3a: 4668 mov r0, sp + 8001f3c: f032 fd3e bl 80349bc + for(q = p; q != NULL; q = q->next) + 8001f40: 466a mov r2, sp + 8001f42: 4623 mov r3, r4 + uint32_t i = 0U; + 8001f44: 2100 movs r1, #0 + for(q = p; q != NULL; q = q->next) + 8001f46: b9db cbnz r3, 8001f80 + TxConfig.Length = p->tot_len; + 8001f48: 4d16 ldr r5, [pc, #88] ; (8001fa4 ) + pbuf_ref(p); + 8001f4a: 4620 mov r0, r4 + TxConfig.Length = p->tot_len; + 8001f4c: 8923 ldrh r3, [r4, #8] + TxConfig.TxBuffer = Txbuffer; + 8001f4e: f8c5 d008 str.w sp, [r5, #8] + TxConfig.Length = p->tot_len; + 8001f52: 606b str r3, [r5, #4] + TxConfig.pData = p; + 8001f54: 636c str r4, [r5, #52] ; 0x34 + pbuf_ref(p); + 8001f56: f019 ff49 bl 801bdec + HAL_ETH_Transmit_IT(&heth, &TxConfig); + 8001f5a: 4629 mov r1, r5 + while(osSemaphoreAcquire(TxPktSemaphore, TIME_WAITING_FOR_INPUT)!=osOK) + 8001f5c: 4d12 ldr r5, [pc, #72] ; (8001fa8 ) + HAL_ETH_Transmit_IT(&heth, &TxConfig); + 8001f5e: 4813 ldr r0, [pc, #76] ; (8001fac ) + 8001f60: f004 f916 bl 8006190 + while(osSemaphoreAcquire(TxPktSemaphore, TIME_WAITING_FOR_INPUT)!=osOK) + 8001f64: f04f 31ff mov.w r1, #4294967295 + 8001f68: 6828 ldr r0, [r5, #0] + 8001f6a: f007 fa61 bl 8009430 + 8001f6e: 4604 mov r4, r0 + 8001f70: 2800 cmp r0, #0 + 8001f72: d1f7 bne.n 8001f64 + HAL_ETH_ReleaseTxPacket(&heth); + 8001f74: 480d ldr r0, [pc, #52] ; (8001fac ) + 8001f76: f004 f9b9 bl 80062ec + return errval; + 8001f7a: 4620 mov r0, r4 +} + 8001f7c: b00d add sp, #52 ; 0x34 + 8001f7e: bd30 pop {r4, r5, pc} + if(i >= ETH_TX_DESC_CNT) + 8001f80: 2904 cmp r1, #4 + 8001f82: d00c beq.n 8001f9e + Txbuffer[i].buffer = q->payload; + 8001f84: 6858 ldr r0, [r3, #4] + 8001f86: 6010 str r0, [r2, #0] + Txbuffer[i].len = q->len; + 8001f88: 8958 ldrh r0, [r3, #10] + 8001f8a: 6050 str r0, [r2, #4] + if(i>0) + 8001f8c: b109 cbz r1, 8001f92 + Txbuffer[i-1].next = &Txbuffer[i]; + 8001f8e: f842 2c04 str.w r2, [r2, #-4] + if(q->next == NULL) + 8001f92: 681b ldr r3, [r3, #0] + 8001f94: b903 cbnz r3, 8001f98 + Txbuffer[i].next = NULL; + 8001f96: 6093 str r3, [r2, #8] + i++; + 8001f98: 3101 adds r1, #1 + for(q = p; q != NULL; q = q->next) + 8001f9a: 320c adds r2, #12 + 8001f9c: e7d3 b.n 8001f46 + return ERR_IF; + 8001f9e: f06f 000b mvn.w r0, #11 + 8001fa2: e7eb b.n 8001f7c + 8001fa4: 200006d0 .word 0x200006d0 + 8001fa8: 20000708 .word 0x20000708 + 8001fac: 2000070c .word 0x2000070c + +08001fb0 : + * @brief Get the time in millisecons used for internal PHY driver process. + * @retval Time value + */ +int32_t ETH_PHY_IO_GetTick(void) +{ + return HAL_GetTick(); + 8001fb0: f003 bb3e b.w 8005630 + +08001fb4 : + HAL_ETH_SetMDIOClockRange(&heth); + 8001fb4: 4802 ldr r0, [pc, #8] ; (8001fc0 ) +{ + 8001fb6: b508 push {r3, lr} + HAL_ETH_SetMDIOClockRange(&heth); + 8001fb8: f004 faee bl 8006598 +} + 8001fbc: 2000 movs r0, #0 + 8001fbe: bd08 pop {r3, pc} + 8001fc0: 2000070c .word 0x2000070c + +08001fc4 : +{ + 8001fc4: b508 push {r3, lr} + 8001fc6: 4613 mov r3, r2 + if(HAL_ETH_ReadPHYRegister(&heth, DevAddr, RegAddr, pRegVal) != HAL_OK) + 8001fc8: 460a mov r2, r1 + 8001fca: 4601 mov r1, r0 + 8001fcc: 4803 ldr r0, [pc, #12] ; (8001fdc ) + 8001fce: f004 fa27 bl 8006420 + 8001fd2: 3800 subs r0, #0 + 8001fd4: bf18 it ne + 8001fd6: 2001 movne r0, #1 +} + 8001fd8: 4240 negs r0, r0 + 8001fda: bd08 pop {r3, pc} + 8001fdc: 2000070c .word 0x2000070c + +08001fe0 : +{ + 8001fe0: b508 push {r3, lr} + 8001fe2: 4613 mov r3, r2 + if(HAL_ETH_WritePHYRegister(&heth, DevAddr, RegAddr, RegVal) != HAL_OK) + 8001fe4: 460a mov r2, r1 + 8001fe6: 4601 mov r1, r0 + 8001fe8: 4803 ldr r0, [pc, #12] ; (8001ff8 ) + 8001fea: f004 fa41 bl 8006470 + 8001fee: 3800 subs r0, #0 + 8001ff0: bf18 it ne + 8001ff2: 2001 movne r0, #1 +} + 8001ff4: 4240 negs r0, r0 + 8001ff6: bd08 pop {r3, pc} + 8001ff8: 2000070c .word 0x2000070c + +08001ffc : +{ + 8001ffc: 4601 mov r1, r0 + LWIP_MEMPOOL_FREE(RX_POOL, custom_pbuf); + 8001ffe: 4808 ldr r0, [pc, #32] ; (8002020 ) +{ + 8002000: b508 push {r3, lr} + LWIP_MEMPOOL_FREE(RX_POOL, custom_pbuf); + 8002002: f019 fb09 bl 801b618 + if (RxAllocStatus == RX_ALLOC_ERROR) + 8002006: 4b07 ldr r3, [pc, #28] ; (8002024 ) + 8002008: 781a ldrb r2, [r3, #0] + 800200a: 2a01 cmp r2, #1 + 800200c: d107 bne.n 800201e + RxAllocStatus = RX_ALLOC_OK; + 800200e: 2200 movs r2, #0 + 8002010: 701a strb r2, [r3, #0] + osSemaphoreRelease(RxPktSemaphore); + 8002012: 4b05 ldr r3, [pc, #20] ; (8002028 ) + 8002014: 6818 ldr r0, [r3, #0] +} + 8002016: e8bd 4008 ldmia.w sp!, {r3, lr} + osSemaphoreRelease(RxPktSemaphore); + 800201a: f007 ba43 b.w 80094a4 +} + 800201e: bd08 pop {r3, pc} + 8002020: 080359e4 .word 0x080359e4 + 8002024: 200006c8 .word 0x200006c8 + 8002028: 200006cc .word 0x200006cc + +0800202c : +{ + 800202c: e92d 43f7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, lr} + 8002030: 4605 mov r5, r0 + if (osSemaphoreAcquire(RxPktSemaphore, TIME_WAITING_FOR_INPUT) == osOK) + 8002032: 4f11 ldr r7, [pc, #68] ; (8002078 ) + if(RxAllocStatus == RX_ALLOC_OK) + 8002034: f8df 8044 ldr.w r8, [pc, #68] ; 800207c + HAL_ETH_ReadData(&heth, (void **)&p); + 8002038: f8df 9044 ldr.w r9, [pc, #68] ; 8002080 + if (osSemaphoreAcquire(RxPktSemaphore, TIME_WAITING_FOR_INPUT) == osOK) + 800203c: f04f 31ff mov.w r1, #4294967295 + 8002040: 6838 ldr r0, [r7, #0] + 8002042: f007 f9f5 bl 8009430 + 8002046: 4604 mov r4, r0 + 8002048: 2800 cmp r0, #0 + 800204a: d1f7 bne.n 800203c + if(RxAllocStatus == RX_ALLOC_OK) + 800204c: f898 3000 ldrb.w r3, [r8] + struct pbuf *p = NULL; + 8002050: 9401 str r4, [sp, #4] + if(RxAllocStatus == RX_ALLOC_OK) + 8002052: b91b cbnz r3, 800205c + HAL_ETH_ReadData(&heth, (void **)&p); + 8002054: a901 add r1, sp, #4 + 8002056: 4648 mov r0, r9 + 8002058: f004 f8cc bl 80061f4 + return p; + 800205c: 9e01 ldr r6, [sp, #4] + if (p != NULL) + 800205e: 2e00 cmp r6, #0 + 8002060: d0ec beq.n 800203c + if (netif->input( p, netif) != ERR_OK ) + 8002062: 692b ldr r3, [r5, #16] + 8002064: 4629 mov r1, r5 + 8002066: 4630 mov r0, r6 + 8002068: 4798 blx r3 + 800206a: 2800 cmp r0, #0 + 800206c: d0ee beq.n 800204c + pbuf_free(p); + 800206e: 4630 mov r0, r6 + 8002070: f019 fd62 bl 801bb38 + 8002074: e7ea b.n 800204c + 8002076: bf00 nop + 8002078: 200006cc .word 0x200006cc + 800207c: 200006c8 .word 0x200006c8 + 8002080: 2000070c .word 0x2000070c + +08002084 : + osSemaphoreRelease(RxPktSemaphore); + 8002084: 4b01 ldr r3, [pc, #4] ; (800208c ) + 8002086: 6818 ldr r0, [r3, #0] + 8002088: f007 ba0c b.w 80094a4 + 800208c: 200006cc .word 0x200006cc + +08002090 : + osSemaphoreRelease(TxPktSemaphore); + 8002090: 4b01 ldr r3, [pc, #4] ; (8002098 ) + 8002092: 6818 ldr r0, [r3, #0] + 8002094: f007 ba06 b.w 80094a4 + 8002098: 20000708 .word 0x20000708 + +0800209c : +{ + 800209c: b508 push {r3, lr} + if((HAL_ETH_GetDMAError(handlerEth) & ETH_DMASR_RBUS) == ETH_DMASR_RBUS) + 800209e: f004 fab5 bl 800660c + 80020a2: 0603 lsls r3, r0, #24 + 80020a4: d505 bpl.n 80020b2 + osSemaphoreRelease(RxPktSemaphore); + 80020a6: 4b03 ldr r3, [pc, #12] ; (80020b4 ) + 80020a8: 6818 ldr r0, [r3, #0] +} + 80020aa: e8bd 4008 ldmia.w sp!, {r3, lr} + osSemaphoreRelease(RxPktSemaphore); + 80020ae: f007 b9f9 b.w 80094a4 +} + 80020b2: bd08 pop {r3, pc} + 80020b4: 200006cc .word 0x200006cc + +080020b8 : +{ + 80020b8: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} + LWIP_ASSERT("netif != NULL", (netif != NULL)); + 80020bc: 4604 mov r4, r0 +{ + 80020be: b0a4 sub sp, #144 ; 0x90 + LWIP_ASSERT("netif != NULL", (netif != NULL)); + 80020c0: b930 cbnz r0, 80020d0 + 80020c2: 4b5b ldr r3, [pc, #364] ; (8002230 ) + 80020c4: f240 12f5 movw r2, #501 ; 0x1f5 + 80020c8: 495a ldr r1, [pc, #360] ; (8002234 ) + 80020ca: 485b ldr r0, [pc, #364] ; (8002238 ) + 80020cc: f032 fb42 bl 8034754 + netif->name[0] = IFNAME0; + 80020d0: f247 4373 movw r3, #29811 ; 0x7473 + ETH_MACConfigTypeDef MACConf = {0}; + 80020d4: 2264 movs r2, #100 ; 0x64 + 80020d6: 2100 movs r1, #0 + 80020d8: a80b add r0, sp, #44 ; 0x2c + netif->name[0] = IFNAME0; + 80020da: 8663 strh r3, [r4, #50] ; 0x32 + MACAddr[4] = 0x00; + 80020dc: 2600 movs r6, #0 + netif->output = etharp_output; + 80020de: 4b57 ldr r3, [pc, #348] ; (800223c ) + heth.Instance = ETH; + 80020e0: 4d57 ldr r5, [pc, #348] ; (8002240 ) + netif->output = etharp_output; + 80020e2: 6163 str r3, [r4, #20] + netif->linkoutput = low_level_output; + 80020e4: 4b57 ldr r3, [pc, #348] ; (8002244 ) + memset(&TxConfig, 0 , sizeof(ETH_TxPacketConfig)); + 80020e6: f8df 8194 ldr.w r8, [pc, #404] ; 800227c + netif->linkoutput = low_level_output; + 80020ea: 61a3 str r3, [r4, #24] + ETH_MACConfigTypeDef MACConf = {0}; + 80020ec: f032 fc66 bl 80349bc + heth.Instance = ETH; + 80020f0: 4b55 ldr r3, [pc, #340] ; (8002248 ) + hal_eth_init_status = HAL_ETH_Init(&heth); + 80020f2: 4628 mov r0, r5 + MACAddr[4] = 0x00; + 80020f4: f8ad 6004 strh.w r6, [sp, #4] + heth.Instance = ETH; + 80020f8: 602b str r3, [r5, #0] + MACAddr[0] = 0x00; + 80020fa: 4b54 ldr r3, [pc, #336] ; (800224c ) + heth.Init.MACAddr = &MACAddr[0]; + 80020fc: f8c5 d004 str.w sp, [r5, #4] + MACAddr[0] = 0x00; + 8002100: 9300 str r3, [sp, #0] + heth.Init.MediaInterface = HAL_ETH_RMII_MODE; + 8002102: f44f 0300 mov.w r3, #8388608 ; 0x800000 + 8002106: 60ab str r3, [r5, #8] + heth.Init.TxDesc = DMATxDscrTab; + 8002108: 4b51 ldr r3, [pc, #324] ; (8002250 ) + 800210a: 60eb str r3, [r5, #12] + heth.Init.RxDesc = DMARxDscrTab; + 800210c: 4b51 ldr r3, [pc, #324] ; (8002254 ) + 800210e: 612b str r3, [r5, #16] + heth.Init.RxBuffLen = 1536; + 8002110: f44f 63c0 mov.w r3, #1536 ; 0x600 + 8002114: 616b str r3, [r5, #20] + hal_eth_init_status = HAL_ETH_Init(&heth); + 8002116: f003 febb bl 8005e90 + memset(&TxConfig, 0 , sizeof(ETH_TxPacketConfig)); + 800211a: 2234 movs r2, #52 ; 0x34 + 800211c: 4631 mov r1, r6 + hal_eth_init_status = HAL_ETH_Init(&heth); + 800211e: 4607 mov r7, r0 + memset(&TxConfig, 0 , sizeof(ETH_TxPacketConfig)); + 8002120: f108 0004 add.w r0, r8, #4 + 8002124: f032 fc4a bl 80349bc + TxConfig.Attributes = ETH_TX_PACKETS_FEATURES_CSUM | ETH_TX_PACKETS_FEATURES_CRCPAD; + 8002128: 2321 movs r3, #33 ; 0x21 + LWIP_MEMPOOL_INIT(RX_POOL); + 800212a: 484b ldr r0, [pc, #300] ; (8002258 ) + TxConfig.Attributes = ETH_TX_PACKETS_FEATURES_CSUM | ETH_TX_PACKETS_FEATURES_CRCPAD; + 800212c: f8c8 3000 str.w r3, [r8] + TxConfig.ChecksumCtrl = ETH_CHECKSUM_IPHDR_PAYLOAD_INSERT_PHDR_CALC; + 8002130: f44f 0340 mov.w r3, #12582912 ; 0xc00000 + 8002134: f8c8 3014 str.w r3, [r8, #20] + LWIP_MEMPOOL_INIT(RX_POOL); + 8002138: f019 fa1a bl 801b570 + netif->hwaddr_len = ETH_HWADDR_LEN; + 800213c: 2306 movs r3, #6 + RxPktSemaphore = osSemaphoreNew(1, 1, NULL); + 800213e: 2101 movs r1, #1 + netif->hwaddr_len = ETH_HWADDR_LEN; + 8002140: f884 3030 strb.w r3, [r4, #48] ; 0x30 + RxPktSemaphore = osSemaphoreNew(1, 1, NULL); + 8002144: 4608 mov r0, r1 + netif->hwaddr[0] = heth.Init.MACAddr[0]; + 8002146: 686b ldr r3, [r5, #4] + 8002148: 781a ldrb r2, [r3, #0] + 800214a: f884 202a strb.w r2, [r4, #42] ; 0x2a + netif->hwaddr[1] = heth.Init.MACAddr[1]; + 800214e: 785a ldrb r2, [r3, #1] + 8002150: f884 202b strb.w r2, [r4, #43] ; 0x2b + netif->hwaddr[2] = heth.Init.MACAddr[2]; + 8002154: 789a ldrb r2, [r3, #2] + 8002156: f884 202c strb.w r2, [r4, #44] ; 0x2c + netif->hwaddr[3] = heth.Init.MACAddr[3]; + 800215a: 78da ldrb r2, [r3, #3] + 800215c: f884 202d strb.w r2, [r4, #45] ; 0x2d + netif->hwaddr[4] = heth.Init.MACAddr[4]; + 8002160: 791a ldrb r2, [r3, #4] + 8002162: f884 202e strb.w r2, [r4, #46] ; 0x2e + RxPktSemaphore = osSemaphoreNew(1, 1, NULL); + 8002166: 4632 mov r2, r6 + netif->hwaddr[5] = heth.Init.MACAddr[5]; + 8002168: 795b ldrb r3, [r3, #5] + 800216a: f884 302f strb.w r3, [r4, #47] ; 0x2f + netif->mtu = ETH_MAX_PAYLOAD; + 800216e: f240 53dc movw r3, #1500 ; 0x5dc + 8002172: 8523 strh r3, [r4, #40] ; 0x28 + netif->flags |= NETIF_FLAG_BROADCAST | NETIF_FLAG_ETHARP; + 8002174: f894 3031 ldrb.w r3, [r4, #49] ; 0x31 + 8002178: f043 030a orr.w r3, r3, #10 + 800217c: f884 3031 strb.w r3, [r4, #49] ; 0x31 + RxPktSemaphore = osSemaphoreNew(1, 1, NULL); + 8002180: f007 f900 bl 8009384 + 8002184: 4b35 ldr r3, [pc, #212] ; (800225c ) + TxPktSemaphore = osSemaphoreNew(1, 1, NULL); + 8002186: 2101 movs r1, #1 + 8002188: 4632 mov r2, r6 + RxPktSemaphore = osSemaphoreNew(1, 1, NULL); + 800218a: 6018 str r0, [r3, #0] + TxPktSemaphore = osSemaphoreNew(1, 1, NULL); + 800218c: 4608 mov r0, r1 + 800218e: f007 f8f9 bl 8009384 + 8002192: 4b33 ldr r3, [pc, #204] ; (8002260 ) + memset(&attributes, 0x0, sizeof(osThreadAttr_t)); + 8002194: 2220 movs r2, #32 + 8002196: 4631 mov r1, r6 + TxPktSemaphore = osSemaphoreNew(1, 1, NULL); + 8002198: 6018 str r0, [r3, #0] + memset(&attributes, 0x0, sizeof(osThreadAttr_t)); + 800219a: a803 add r0, sp, #12 + 800219c: f032 fc0e bl 80349bc + attributes.name = "EthIf"; + 80021a0: 4b30 ldr r3, [pc, #192] ; (8002264 ) + attributes.priority = osPriorityRealtime; + 80021a2: f44f 71af mov.w r1, #350 ; 0x15e + osThreadNew(ethernetif_input, netif, &attributes); + 80021a6: aa02 add r2, sp, #8 + attributes.name = "EthIf"; + 80021a8: 9302 str r3, [sp, #8] + attributes.priority = osPriorityRealtime; + 80021aa: 2330 movs r3, #48 ; 0x30 + osThreadNew(ethernetif_input, netif, &attributes); + 80021ac: 482e ldr r0, [pc, #184] ; (8002268 ) + attributes.priority = osPriorityRealtime; + 80021ae: e9cd 1307 strd r1, r3, [sp, #28] + osThreadNew(ethernetif_input, netif, &attributes); + 80021b2: 4621 mov r1, r4 + 80021b4: f006 ffda bl 800916c + LAN8742_RegisterBusIO(&LAN8742, &LAN8742_IOCtx); + 80021b8: 492c ldr r1, [pc, #176] ; (800226c ) + 80021ba: 482d ldr r0, [pc, #180] ; (8002270 ) + 80021bc: f002 febc bl 8004f38 + LAN8742_Init(&LAN8742); + 80021c0: 482b ldr r0, [pc, #172] ; (8002270 ) + 80021c2: f002 fecd bl 8004f60 + if (hal_eth_init_status == HAL_OK) + 80021c6: bb87 cbnz r7, 800222a + PHYLinkState = LAN8742_GetLinkState(&LAN8742); + 80021c8: 4829 ldr r0, [pc, #164] ; (8002270 ) + 80021ca: f002 ff2a bl 8005022 + if(PHYLinkState <= LAN8742_STATUS_LINK_DOWN) + 80021ce: 2801 cmp r0, #1 + 80021d0: dc09 bgt.n 80021e6 + netif_set_link_down(netif); + 80021d2: 4620 mov r0, r4 + 80021d4: f019 fbc2 bl 801b95c + netif_set_down(netif); + 80021d8: 4620 mov r0, r4 + 80021da: f019 fb7b bl 801b8d4 +} + 80021de: 2000 movs r0, #0 + 80021e0: b024 add sp, #144 ; 0x90 + 80021e2: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + switch (PHYLinkState) + 80021e6: 3803 subs r0, #3 + HAL_ETH_GetMACConfig(&heth, &MACConf); + 80021e8: a90b add r1, sp, #44 ; 0x2c + 80021ea: 2802 cmp r0, #2 + 80021ec: bf93 iteet ls + 80021ee: 4b21 ldrls r3, [pc, #132] ; (8002274 ) + switch (PHYLinkState) + 80021f0: f44f 4580 movhi.w r5, #16384 ; 0x4000 + 80021f4: f44f 6600 movhi.w r6, #2048 ; 0x800 + 80021f8: f833 6010 ldrhls.w r6, [r3, r0, lsl #1] + 80021fc: bf9c itt ls + 80021fe: 4b1e ldrls r3, [pc, #120] ; (8002278 ) + 8002200: f833 5010 ldrhls.w r5, [r3, r0, lsl #1] + HAL_ETH_GetMACConfig(&heth, &MACConf); + 8002204: 480e ldr r0, [pc, #56] ; (8002240 ) + 8002206: f004 f958 bl 80064ba + HAL_ETH_SetMACConfig(&heth, &MACConf); + 800220a: a90b add r1, sp, #44 ; 0x2c + 800220c: 480c ldr r0, [pc, #48] ; (8002240 ) + MACConf.Speed = speed; + 800220e: e9cd 5610 strd r5, r6, [sp, #64] ; 0x40 + HAL_ETH_SetMACConfig(&heth, &MACConf); + 8002212: f004 f9b4 bl 800657e + HAL_ETH_Start_IT(&heth); + 8002216: 480a ldr r0, [pc, #40] ; (8002240 ) + 8002218: f003 ff24 bl 8006064 + netif_set_up(netif); + 800221c: 4620 mov r0, r4 + 800221e: f019 fb3f bl 801b8a0 + netif_set_link_up(netif); + 8002222: 4620 mov r0, r4 + 8002224: f019 fb72 bl 801b90c + 8002228: e7d9 b.n 80021de + Error_Handler(); + 800222a: f7ff fa17 bl 800165c + 800222e: e7d6 b.n 80021de + 8002230: 0803592c .word 0x0803592c + 8002234: 08039f46 .word 0x08039f46 + 8002238: 08035999 .word 0x08035999 + 800223c: 0801a0ad .word 0x0801a0ad + 8002240: 2000070c .word 0x2000070c + 8002244: 08001f31 .word 0x08001f31 + 8002248: 40028000 .word 0x40028000 + 800224c: 00e18000 .word 0x00e18000 + 8002250: 200001e0 .word 0x200001e0 + 8002254: 20000140 .word 0x20000140 + 8002258: 080359e4 .word 0x080359e4 + 800225c: 200006cc .word 0x200006cc + 8002260: 20000708 .word 0x20000708 + 8002264: 080359c1 .word 0x080359c1 + 8002268: 0800202d .word 0x0800202d + 800226c: 20000004 .word 0x20000004 + 8002270: 200006a8 .word 0x200006a8 + 8002274: 080359c8 .word 0x080359c8 + 8002278: 080359ce .word 0x080359ce + 800227c: 200006d0 .word 0x200006d0 + +08002280 : + return HAL_GetTick(); + 8002280: f003 b9d6 b.w 8005630 + +08002284 : +{ + 8002284: b5f0 push {r4, r5, r6, r7, lr} + 8002286: b08d sub sp, #52 ; 0x34 + 8002288: 4604 mov r4, r0 + GPIO_InitTypeDef GPIO_InitStruct = {0}; + 800228a: 2214 movs r2, #20 + 800228c: 2100 movs r1, #0 + 800228e: a807 add r0, sp, #28 + 8002290: f032 fb94 bl 80349bc + if(ethHandle->Instance==ETH) + 8002294: 6822 ldr r2, [r4, #0] + 8002296: 4b33 ldr r3, [pc, #204] ; (8002364 ) + 8002298: 429a cmp r2, r3 + 800229a: d161 bne.n 8002360 + __HAL_RCC_ETH_CLK_ENABLE(); + 800229c: f5a3 4390 sub.w r3, r3, #18432 ; 0x4800 + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + 80022a0: 2702 movs r7, #2 + GPIO_InitStruct.Alternate = GPIO_AF11_ETH; + 80022a2: 2603 movs r6, #3 + 80022a4: 250b movs r5, #11 + __HAL_RCC_ETH_CLK_ENABLE(); + 80022a6: 6b1a ldr r2, [r3, #48] ; 0x30 + HAL_GPIO_Init(GPIOG, &GPIO_InitStruct); + 80022a8: a907 add r1, sp, #28 + 80022aa: 482f ldr r0, [pc, #188] ; (8002368 ) + GPIO_InitStruct.Pull = GPIO_NOPULL; + 80022ac: 2400 movs r4, #0 + __HAL_RCC_ETH_CLK_ENABLE(); + 80022ae: f042 7200 orr.w r2, r2, #33554432 ; 0x2000000 + 80022b2: 631a str r2, [r3, #48] ; 0x30 + 80022b4: 6b1a ldr r2, [r3, #48] ; 0x30 + 80022b6: f002 7200 and.w r2, r2, #33554432 ; 0x2000000 + 80022ba: 9201 str r2, [sp, #4] + 80022bc: 9a01 ldr r2, [sp, #4] + 80022be: 6b1a ldr r2, [r3, #48] ; 0x30 + 80022c0: f042 6280 orr.w r2, r2, #67108864 ; 0x4000000 + 80022c4: 631a str r2, [r3, #48] ; 0x30 + 80022c6: 6b1a ldr r2, [r3, #48] ; 0x30 + 80022c8: f002 6280 and.w r2, r2, #67108864 ; 0x4000000 + 80022cc: 9202 str r2, [sp, #8] + 80022ce: 9a02 ldr r2, [sp, #8] + 80022d0: 6b1a ldr r2, [r3, #48] ; 0x30 + 80022d2: f042 6200 orr.w r2, r2, #134217728 ; 0x8000000 + 80022d6: 631a str r2, [r3, #48] ; 0x30 + 80022d8: 6b1a ldr r2, [r3, #48] ; 0x30 + 80022da: f002 6200 and.w r2, r2, #134217728 ; 0x8000000 + 80022de: 9203 str r2, [sp, #12] + 80022e0: 9a03 ldr r2, [sp, #12] + __HAL_RCC_GPIOG_CLK_ENABLE(); + 80022e2: 6b1a ldr r2, [r3, #48] ; 0x30 + 80022e4: f042 0240 orr.w r2, r2, #64 ; 0x40 + 80022e8: 631a str r2, [r3, #48] ; 0x30 + 80022ea: 6b1a ldr r2, [r3, #48] ; 0x30 + 80022ec: f002 0240 and.w r2, r2, #64 ; 0x40 + 80022f0: 9204 str r2, [sp, #16] + 80022f2: 9a04 ldr r2, [sp, #16] + __HAL_RCC_GPIOC_CLK_ENABLE(); + 80022f4: 6b1a ldr r2, [r3, #48] ; 0x30 + 80022f6: f042 0204 orr.w r2, r2, #4 + 80022fa: 631a str r2, [r3, #48] ; 0x30 + 80022fc: 6b1a ldr r2, [r3, #48] ; 0x30 + 80022fe: f002 0204 and.w r2, r2, #4 + 8002302: 9205 str r2, [sp, #20] + 8002304: 9a05 ldr r2, [sp, #20] + __HAL_RCC_GPIOA_CLK_ENABLE(); + 8002306: 6b1a ldr r2, [r3, #48] ; 0x30 + 8002308: f042 0201 orr.w r2, r2, #1 + 800230c: 631a str r2, [r3, #48] ; 0x30 + 800230e: 6b1b ldr r3, [r3, #48] ; 0x30 + 8002310: f003 0301 and.w r3, r3, #1 + 8002314: 9306 str r3, [sp, #24] + 8002316: 9b06 ldr r3, [sp, #24] + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + 8002318: f44f 43d0 mov.w r3, #26624 ; 0x6800 + 800231c: e9cd 3707 strd r3, r7, [sp, #28] + GPIO_InitStruct.Alternate = GPIO_AF11_ETH; + 8002320: e9cd 650a strd r6, r5, [sp, #40] ; 0x28 + HAL_GPIO_Init(GPIOG, &GPIO_InitStruct); + 8002324: f004 f976 bl 8006614 + GPIO_InitStruct.Pin = GPIO_PIN_1|GPIO_PIN_4|GPIO_PIN_5; + 8002328: 2332 movs r3, #50 ; 0x32 + HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); + 800232a: a907 add r1, sp, #28 + 800232c: 480f ldr r0, [pc, #60] ; (800236c ) + GPIO_InitStruct.Alternate = GPIO_AF11_ETH; + 800232e: 950b str r5, [sp, #44] ; 0x2c + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + 8002330: e9cd 3707 strd r3, r7, [sp, #28] + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + 8002334: e9cd 4609 strd r4, r6, [sp, #36] ; 0x24 + HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); + 8002338: f004 f96c bl 8006614 + GPIO_InitStruct.Pin = GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_7; + 800233c: 2386 movs r3, #134 ; 0x86 + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + 800233e: a907 add r1, sp, #28 + 8002340: 480b ldr r0, [pc, #44] ; (8002370 ) + GPIO_InitStruct.Alternate = GPIO_AF11_ETH; + 8002342: 950b str r5, [sp, #44] ; 0x2c + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + 8002344: e9cd 3707 strd r3, r7, [sp, #28] + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + 8002348: e9cd 4609 strd r4, r6, [sp, #36] ; 0x24 + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + 800234c: f004 f962 bl 8006614 + HAL_NVIC_SetPriority(ETH_IRQn, 5, 0); + 8002350: 203d movs r0, #61 ; 0x3d + 8002352: 4622 mov r2, r4 + 8002354: 2105 movs r1, #5 + 8002356: f003 f995 bl 8005684 + HAL_NVIC_EnableIRQ(ETH_IRQn); + 800235a: 203d movs r0, #61 ; 0x3d + 800235c: f003 f9c4 bl 80056e8 +} + 8002360: b00d add sp, #52 ; 0x34 + 8002362: bdf0 pop {r4, r5, r6, r7, pc} + 8002364: 40028000 .word 0x40028000 + 8002368: 40021800 .word 0x40021800 + 800236c: 40020800 .word 0x40020800 + 8002370: 40020000 .word 0x40020000 + +08002374 : +/** + * @brief Check the ETH link state then update ETH driver and netif link accordingly. + * @retval None + */ +void ethernet_link_thread(void* argument) +{ + 8002374: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} + ETH_MACConfigTypeDef MACConf = {0}; + int32_t PHYLinkState = 0; + uint32_t linkchanged = 0U, speed = 0U, duplex = 0U; + 8002378: 2500 movs r5, #0 +{ + 800237a: b09a sub sp, #104 ; 0x68 + +/* USER CODE END ETH link init */ + + for(;;) + { + PHYLinkState = LAN8742_GetLinkState(&LAN8742); + 800237c: f8df 9094 ldr.w r9, [pc, #148] ; 8002414 +{ + 8002380: 4604 mov r4, r0 + uint32_t linkchanged = 0U, speed = 0U, duplex = 0U; + 8002382: 46a8 mov r8, r5 + 8002384: 462f mov r7, r5 + } + + if(linkchanged) + { + /* Get MAC Config MAC */ + HAL_ETH_GetMACConfig(&heth, &MACConf); + 8002386: 4e21 ldr r6, [pc, #132] ; (800240c ) + ETH_MACConfigTypeDef MACConf = {0}; + 8002388: 2264 movs r2, #100 ; 0x64 + 800238a: f8df a08c ldr.w sl, [pc, #140] ; 8002418 + 800238e: 2100 movs r1, #0 + 8002390: a801 add r0, sp, #4 + 8002392: f032 fb13 bl 80349bc + PHYLinkState = LAN8742_GetLinkState(&LAN8742); + 8002396: 4648 mov r0, r9 + 8002398: f002 fe43 bl 8005022 + if(netif_is_link_up(netif) && (PHYLinkState <= LAN8742_STATUS_LINK_DOWN)) + 800239c: f894 3031 ldrb.w r3, [r4, #49] ; 0x31 + 80023a0: 075a lsls r2, r3, #29 + 80023a2: d510 bpl.n 80023c6 + 80023a4: 2801 cmp r0, #1 + 80023a6: dc0c bgt.n 80023c2 + HAL_ETH_Stop_IT(&heth); + 80023a8: 4630 mov r0, r6 + 80023aa: f003 feac bl 8006106 + netif_set_down(netif); + 80023ae: 4620 mov r0, r4 + 80023b0: f019 fa90 bl 801b8d4 + netif_set_link_down(netif); + 80023b4: 4620 mov r0, r4 + 80023b6: f019 fad1 bl 801b95c + +/* USER CODE BEGIN ETH link Thread core code for User BSP */ + +/* USER CODE END ETH link Thread core code for User BSP */ + + osDelay(100); + 80023ba: 2064 movs r0, #100 ; 0x64 + 80023bc: f006 ff2a bl 8009214 + PHYLinkState = LAN8742_GetLinkState(&LAN8742); + 80023c0: e7e9 b.n 8002396 + else if(!netif_is_link_up(netif) && (PHYLinkState > LAN8742_STATUS_LINK_DOWN)) + 80023c2: 075b lsls r3, r3, #29 + 80023c4: d4f9 bmi.n 80023ba + 80023c6: 2801 cmp r0, #1 + 80023c8: ddf7 ble.n 80023ba + switch (PHYLinkState) + 80023ca: 1e83 subs r3, r0, #2 + 80023cc: 2b03 cmp r3, #3 + 80023ce: d819 bhi.n 8002404 + 80023d0: 4a0f ldr r2, [pc, #60] ; (8002410 ) + 80023d2: f83a 8013 ldrh.w r8, [sl, r3, lsl #1] + 80023d6: f832 5013 ldrh.w r5, [r2, r3, lsl #1] + HAL_ETH_GetMACConfig(&heth, &MACConf); + 80023da: a901 add r1, sp, #4 + 80023dc: 4630 mov r0, r6 + 80023de: f004 f86c bl 80064ba + HAL_ETH_SetMACConfig(&heth, &MACConf); + 80023e2: a901 add r1, sp, #4 + 80023e4: 4630 mov r0, r6 + netif_set_link_up(netif); + 80023e6: 2701 movs r7, #1 + MACConf.Speed = speed; + 80023e8: e9cd 8506 strd r8, r5, [sp, #24] + HAL_ETH_SetMACConfig(&heth, &MACConf); + 80023ec: f004 f8c7 bl 800657e + HAL_ETH_Start_IT(&heth); + 80023f0: 4630 mov r0, r6 + 80023f2: f003 fe37 bl 8006064 + netif_set_up(netif); + 80023f6: 4620 mov r0, r4 + 80023f8: f019 fa52 bl 801b8a0 + netif_set_link_up(netif); + 80023fc: 4620 mov r0, r4 + 80023fe: f019 fa85 bl 801b90c + 8002402: e7da b.n 80023ba + if(linkchanged) + 8002404: 2f00 cmp r7, #0 + 8002406: d0d8 beq.n 80023ba + 8002408: e7e7 b.n 80023da + 800240a: bf00 nop + 800240c: 2000070c .word 0x2000070c + 8002410: 080359dc .word 0x080359dc + 8002414: 200006a8 .word 0x200006a8 + 8002418: 080359d4 .word 0x080359d4 + +0800241c : + } +} + +void HAL_ETH_RxAllocateCallback(uint8_t **buff) +{ + 800241c: b513 push {r0, r1, r4, lr} + 800241e: 4604 mov r4, r0 +/* USER CODE BEGIN HAL ETH RxAllocateCallback */ + struct pbuf_custom *p = LWIP_MEMPOOL_ALLOC(RX_POOL); + 8002420: 480c ldr r0, [pc, #48] ; (8002454 ) + 8002422: f019 f8c7 bl 801b5b4 + if (p) + 8002426: 4603 mov r3, r0 + 8002428: b178 cbz r0, 800244a + { + /* Get the buff from the struct pbuf address. */ + *buff = (uint8_t *)p + offsetof(RxBuff_t, buff); + 800242a: f100 0220 add.w r2, r0, #32 + p->custom_free_function = pbuf_free_custom; + 800242e: 490a ldr r1, [pc, #40] ; (8002458 ) + *buff = (uint8_t *)p + offsetof(RxBuff_t, buff); + 8002430: 6022 str r2, [r4, #0] + p->custom_free_function = pbuf_free_custom; + 8002432: 6101 str r1, [r0, #16] + /* Initialize the struct pbuf. + * This must be performed whenever a buffer's allocated because it may be + * changed by lwIP or the app, e.g., pbuf_free decrements ref. */ + pbuf_alloced_custom(PBUF_RAW, 0, PBUF_REF, p, *buff, ETH_RX_BUF_SIZE); + 8002434: f44f 61c0 mov.w r1, #1536 ; 0x600 + 8002438: e9cd 2100 strd r2, r1, [sp] + 800243c: 2100 movs r1, #0 + 800243e: 2241 movs r2, #65 ; 0x41 + 8002440: 4608 mov r0, r1 + 8002442: f019 fb27 bl 801ba94 + { + RxAllocStatus = RX_ALLOC_ERROR; + *buff = NULL; + } +/* USER CODE END HAL ETH RxAllocateCallback */ +} + 8002446: b002 add sp, #8 + 8002448: bd10 pop {r4, pc} + RxAllocStatus = RX_ALLOC_ERROR; + 800244a: 4a04 ldr r2, [pc, #16] ; (800245c ) + 800244c: 2101 movs r1, #1 + *buff = NULL; + 800244e: 6020 str r0, [r4, #0] + RxAllocStatus = RX_ALLOC_ERROR; + 8002450: 7011 strb r1, [r2, #0] +} + 8002452: e7f8 b.n 8002446 + 8002454: 080359e4 .word 0x080359e4 + 8002458: 08001ffd .word 0x08001ffd + 800245c: 200006c8 .word 0x200006c8 + +08002460 : + +void HAL_ETH_RxLinkCallback(void **pStart, void **pEnd, uint8_t *buff, uint16_t Length) +{ + 8002460: b530 push {r4, r5, lr} + struct pbuf **ppEnd = (struct pbuf **)pEnd; + struct pbuf *p = NULL; + + /* Get the struct pbuf from the buff address. */ + p = (struct pbuf *)(buff - offsetof(RxBuff_t, buff)); + p->next = NULL; + 8002462: 2500 movs r5, #0 + p = (struct pbuf *)(buff - offsetof(RxBuff_t, buff)); + 8002464: f1a2 0420 sub.w r4, r2, #32 + p->tot_len = 0; + p->len = Length; + 8002468: f822 3c16 strh.w r3, [r2, #-22] + p->next = NULL; + 800246c: f842 5c20 str.w r5, [r2, #-32] + p->tot_len = 0; + 8002470: f822 5c18 strh.w r5, [r2, #-24] + + /* Chain the buffer. */ + if (!*ppStart) + 8002474: 6805 ldr r5, [r0, #0] + 8002476: b96d cbnz r5, 8002494 + { + /* The first buffer of the packet. */ + *ppStart = p; + 8002478: 6004 str r4, [r0, #0] + else + { + /* Chain the buffer to the end of the packet. */ + (*ppEnd)->next = p; + } + *ppEnd = p; + 800247a: 600c str r4, [r1, #0] + + /* Update the total length of all the buffers of the chain. Each pbuf in the chain should have its tot_len + * set to its own length, plus the length of all the following pbufs in the chain. */ + for (p = *ppStart; p != NULL; p = p->next) + 800247c: 6801 ldr r1, [r0, #0] + 800247e: b961 cbnz r1, 800249a + __ASM volatile ("dsb 0xF":::"memory"); + 8002480: f3bf 8f4f dsb sy + int32_t linesize = 32; /* in Cortex-M7 size of cache line is fixed to 8 words (32 bytes) */ + + __DSB(); + + while (op_size > 0) { + SCB->DCIMVAC = op_addr; + 8002484: 490a ldr r1, [pc, #40] ; (80024b0 ) + while (op_size > 0) { + 8002486: 2b00 cmp r3, #0 + 8002488: dc0c bgt.n 80024a4 + 800248a: f3bf 8f4f dsb sy + __ASM volatile ("isb 0xF":::"memory"); + 800248e: f3bf 8f6f isb sy + + /* Invalidate data cache because Rx DMA's writing to physical memory makes it stale. */ + SCB_InvalidateDCache_by_Addr((uint32_t *)buff, Length); + +/* USER CODE END HAL ETH RxLinkCallback */ +} + 8002492: bd30 pop {r4, r5, pc} + (*ppEnd)->next = p; + 8002494: 680d ldr r5, [r1, #0] + 8002496: 602c str r4, [r5, #0] + 8002498: e7ef b.n 800247a + p->tot_len += Length; + 800249a: 8908 ldrh r0, [r1, #8] + 800249c: 4418 add r0, r3 + 800249e: 8108 strh r0, [r1, #8] + for (p = *ppStart; p != NULL; p = p->next) + 80024a0: 6809 ldr r1, [r1, #0] + 80024a2: e7ec b.n 800247e + SCB->DCIMVAC = op_addr; + 80024a4: f8c1 225c str.w r2, [r1, #604] ; 0x25c + op_addr += (uint32_t)linesize; + op_size -= linesize; + 80024a8: 3b20 subs r3, #32 + op_addr += (uint32_t)linesize; + 80024aa: 3220 adds r2, #32 + op_size -= linesize; + 80024ac: e7eb b.n 8002486 + 80024ae: bf00 nop + 80024b0: e000ed00 .word 0xe000ed00 + +080024b4 : + +void HAL_ETH_TxFreeCallback(uint32_t * buff) +{ +/* USER CODE BEGIN HAL ETH TxFreeCallback */ + + pbuf_free((struct pbuf *)buff); + 80024b4: f019 bb40 b.w 801bb38 + +080024b8 : + + .section .text.Reset_Handler + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + ldr sp, =_estack /* set stack pointer */ + 80024b8: f8df d034 ldr.w sp, [pc, #52] ; 80024f0 + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + 80024bc: 2100 movs r1, #0 + b LoopCopyDataInit + 80024be: e003 b.n 80024c8 + +080024c0 : + +CopyDataInit: + ldr r3, =_sidata + 80024c0: 4b0c ldr r3, [pc, #48] ; (80024f4 ) + ldr r3, [r3, r1] + 80024c2: 585b ldr r3, [r3, r1] + str r3, [r0, r1] + 80024c4: 5043 str r3, [r0, r1] + adds r1, r1, #4 + 80024c6: 3104 adds r1, #4 + +080024c8 : + +LoopCopyDataInit: + ldr r0, =_sdata + 80024c8: 480b ldr r0, [pc, #44] ; (80024f8 ) + ldr r3, =_edata + 80024ca: 4b0c ldr r3, [pc, #48] ; (80024fc ) + adds r2, r0, r1 + 80024cc: 1842 adds r2, r0, r1 + cmp r2, r3 + 80024ce: 429a cmp r2, r3 + bcc CopyDataInit + 80024d0: d3f6 bcc.n 80024c0 + ldr r2, =_sbss + 80024d2: 4a0b ldr r2, [pc, #44] ; (8002500 ) + b LoopFillZerobss + 80024d4: e002 b.n 80024dc + +080024d6 : +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + 80024d6: 2300 movs r3, #0 + str r3, [r2], #4 + 80024d8: f842 3b04 str.w r3, [r2], #4 + +080024dc : + +LoopFillZerobss: + ldr r3, = _ebss + 80024dc: 4b09 ldr r3, [pc, #36] ; (8002504 ) + cmp r2, r3 + 80024de: 429a cmp r2, r3 + bcc FillZerobss + 80024e0: d3f9 bcc.n 80024d6 + +/* Call the clock system initialization function.*/ + bl SystemInit + 80024e2: f002 ff9d bl 8005420 +/* Call static constructors */ + bl __libc_init_array + 80024e6: f032 fb1d bl 8034b24 <__libc_init_array> +/* Call the application's entry point.*/ + bl main + 80024ea: f7fe fd3b bl 8000f64
+ bx lr + 80024ee: 4770 bx lr + ldr sp, =_estack /* set stack pointer */ + 80024f0: 20050000 .word 0x20050000 + ldr r3, =_sidata + 80024f4: 0803cba0 .word 0x0803cba0 + ldr r0, =_sdata + 80024f8: 20000000 .word 0x20000000 + ldr r3, =_edata + 80024fc: 20000140 .word 0x20000140 + ldr r2, =_sbss + 8002500: 20000280 .word 0x20000280 + ldr r3, = _ebss + 8002504: 2001f360 .word 0x2001f360 + +08002508 : + * @retval None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + 8002508: e7fe b.n 8002508 + +0800250a : +/** + * PreOS Initialization function + */ +void MX_TouchGFX_PreOSInit(void) +{ +} + 800250a: 4770 bx lr + +0800250c : + +/** + * Initialize TouchGFX application + */ +void MX_TouchGFX_Init(void) +{ + 800250c: b508 push {r3, lr} + // Calling forward to touchgfx_init in C++ domain + touchgfx_components_init(); + 800250e: f001 f8f5 bl 80036fc + touchgfx_init(); +} + 8002512: e8bd 4008 ldmia.w sp!, {r3, lr} + touchgfx_init(); + 8002516: f001 b87f b.w 8003618 + +0800251a : + * TouchGFX application thread + */ +void TouchGFX_Task(void *argument) +{ + // Calling forward to touchgfx_taskEntry in C++ domain + touchgfx_taskEntry(); + 800251a: f001 b8f1 b.w 8003700 + +0800251e <_ZN8touchgfx18MCUInstrumentation13getCCConsumedEv>: + * + * @return clock cycles. + */ + virtual uint32_t getCCConsumed() + { + return cc_consumed; + 800251e: 6840 ldr r0, [r0, #4] + } + 8002520: 4770 bx lr + +08002522 <_ZN8touchgfx18MCUInstrumentation13setCCConsumedEm>: + * + * @param val number of clock cycles. + */ + virtual void setCCConsumed(uint32_t val) + { + cc_consumed = val; + 8002522: 6041 str r1, [r0, #4] + } + 8002524: 4770 bx lr + ... + +08002528 <_ZN8touchgfx25CortexMMCUInstrumentation4initEv>: + // Embedded Trace Macrocell (ETM) + // Trace Port Interface Unit (TPIU). + // This enables control of power usage unless tracing is required. The application can enable this, for ITM use, or use by a debugger. + + // Enable Debug Exception and Monitor Control Register + *((volatile unsigned int*)0xE000EDFC) |= 0x01000000; + 8002528: f04f 22e0 mov.w r2, #3758153728 ; 0xe000e000 + 800252c: f8d2 3dfc ldr.w r3, [r2, #3580] ; 0xdfc + 8002530: f043 7380 orr.w r3, r3, #16777216 ; 0x1000000 + 8002534: f8c2 3dfc str.w r3, [r2, #3580] ; 0xdfc + // Enable Lock Access Register + *((volatile unsigned int*)0xE0001FB0) |= 0xC5ACCE55; + 8002538: 4b05 ldr r3, [pc, #20] ; (8002550 <_ZN8touchgfx25CortexMMCUInstrumentation4initEv+0x28>) + 800253a: 4a06 ldr r2, [pc, #24] ; (8002554 <_ZN8touchgfx25CortexMMCUInstrumentation4initEv+0x2c>) + 800253c: f8d3 1fb0 ldr.w r1, [r3, #4016] ; 0xfb0 + 8002540: 430a orrs r2, r1 + 8002542: f8c3 2fb0 str.w r2, [r3, #4016] ; 0xfb0 + // Enable Data Watchpoint and Trace Control Register + *((volatile unsigned int*)0xE0001000) |= 1; + 8002546: 681a ldr r2, [r3, #0] + 8002548: f042 0201 orr.w r2, r2, #1 + 800254c: 601a str r2, [r3, #0] +} + 800254e: 4770 bx lr + 8002550: e0001000 .word 0xe0001000 + 8002554: c5acce55 .word 0xc5acce55 + +08002558 <_ZN8touchgfx25CortexMMCUInstrumentation12getElapsedUSEjjj>: + +//Board specific clockfrequency +unsigned int CortexMMCUInstrumentation::getElapsedUS(unsigned int start, unsigned int now, unsigned int clockfrequency) +{ + return ((now - start) + (clockfrequency / 2)) / clockfrequency; + 8002558: 1a51 subs r1, r2, r1 + 800255a: eb01 0153 add.w r1, r1, r3, lsr #1 +} + 800255e: fbb1 f0f3 udiv r0, r1, r3 + 8002562: 4770 bx lr + +08002564 <_ZN8touchgfx25CortexMMCUInstrumentation12getCPUCyclesEv>: + +unsigned int CortexMMCUInstrumentation::getCPUCycles() +{ + return *((volatile unsigned int*)0xE0001004); + 8002564: 4b01 ldr r3, [pc, #4] ; (800256c <_ZN8touchgfx25CortexMMCUInstrumentation12getCPUCyclesEv+0x8>) + 8002566: 6858 ldr r0, [r3, #4] +} + 8002568: 4770 bx lr + 800256a: bf00 nop + 800256c: e0001000 .word 0xe0001000 + +08002570 <_ZN8touchgfx25CortexMMCUInstrumentationD1Ev>: + * Interface for instrumenting Cortex-M processors to measure MCU load via measured CPU + * cycles. + * + * @sa MCUInstrumentation + */ +class CortexMMCUInstrumentation : public MCUInstrumentation + 8002570: 4770 bx lr + +08002572 <_ZN8touchgfx25CortexMMCUInstrumentationD0Ev>: + 8002572: b510 push {r4, lr} + 8002574: 4604 mov r4, r0 + 8002576: 210c movs r1, #12 + 8002578: f031 febd bl 80342f6 <_ZdlPvj> + 800257c: 4620 mov r0, r4 + 800257e: bd10 pop {r4, pc} + +08002580 <_ZN8touchgfx25CortexMMCUInstrumentation12setMCUActiveEb>: + +void CortexMMCUInstrumentation::setMCUActive(bool active) +{ + if (active) //idle task sched out + { + uint32_t cc_temp = getCPUCycles() - cc_in; + 8002580: 6803 ldr r3, [r0, #0] +{ + 8002582: b510 push {r4, lr} + uint32_t cc_temp = getCPUCycles() - cc_in; + 8002584: 691b ldr r3, [r3, #16] +{ + 8002586: 4604 mov r4, r0 + if (active) //idle task sched out + 8002588: b131 cbz r1, 8002598 <_ZN8touchgfx25CortexMMCUInstrumentation12setMCUActiveEb+0x18> + uint32_t cc_temp = getCPUCycles() - cc_in; + 800258a: 4798 blx r3 + 800258c: 68a2 ldr r2, [r4, #8] + cc_consumed += cc_temp; + 800258e: 6863 ldr r3, [r4, #4] + 8002590: 1a9b subs r3, r3, r2 + 8002592: 4418 add r0, r3 + 8002594: 6060 str r0, [r4, #4] + } + else //idle task sched in + { + cc_in = getCPUCycles(); + } +} + 8002596: bd10 pop {r4, pc} + cc_in = getCPUCycles(); + 8002598: 4798 blx r3 + 800259a: 60a0 str r0, [r4, #8] +} + 800259c: e7fb b.n 8002596 <_ZN8touchgfx25CortexMMCUInstrumentation12setMCUActiveEb+0x16> + ... + +080025a0 <_ZN20STM32TouchController4initEv>: +extern I2C_HandleTypeDef hi2c3; + +void STM32TouchController::init() +{ + /* Initialize the TS driver structure */ + tsDriver = &ft5336_ts_drv; + 80025a0: 4b02 ldr r3, [pc, #8] ; (80025ac <_ZN20STM32TouchController4initEv+0xc>) + + /* Initialize the TS driver */ + tsDriver->Start(TS_I2C_ADDRESS); + 80025a2: 2070 movs r0, #112 ; 0x70 + tsDriver = &ft5336_ts_drv; + 80025a4: 4a02 ldr r2, [pc, #8] ; (80025b0 <_ZN20STM32TouchController4initEv+0x10>) + 80025a6: 6013 str r3, [r2, #0] + tsDriver->Start(TS_I2C_ADDRESS); + 80025a8: 68db ldr r3, [r3, #12] + 80025aa: 4718 bx r3 + 80025ac: 20000024 .word 0x20000024 + 80025b0: 20005144 .word 0x20005144 + +080025b4 <_ZN20STM32TouchControllerD1Ev>: + * @brief This class specializes TouchController Interface. + * + * @sa touchgfx::TouchController + */ + +class STM32TouchController : public touchgfx::TouchController + 80025b4: 4770 bx lr + +080025b6 <_ZN20STM32TouchControllerD0Ev>: + 80025b6: b510 push {r4, lr} + 80025b8: 4604 mov r4, r0 + 80025ba: 2104 movs r1, #4 + 80025bc: f031 fe9b bl 80342f6 <_ZdlPvj> + 80025c0: 4620 mov r0, r4 + 80025c2: bd10 pop {r4, pc} + +080025c4 <_ZN20STM32TouchController11sampleTouchERlS0_>: +} + +bool STM32TouchController::sampleTouch(int32_t& x, int32_t& y) +{ + 80025c4: b537 push {r0, r1, r2, r4, r5, lr} + * + * This function is called by the TouchGFX framework. + * By default sampleTouch is called every tick, this can be adjusted by HAL::setTouchSampleRate(int8_t); + * + */ + if (tsDriver) + 80025c6: 4d0a ldr r5, [pc, #40] ; (80025f0 <_ZN20STM32TouchController11sampleTouchERlS0_+0x2c>) +{ + 80025c8: 460c mov r4, r1 + if (tsDriver) + 80025ca: 682b ldr r3, [r5, #0] + 80025cc: b913 cbnz r3, 80025d4 <_ZN20STM32TouchController11sampleTouchERlS0_+0x10> + /* Get each touch coordinates */ + tsDriver->GetXY(TS_I2C_ADDRESS, (uint16_t*)&y, (uint16_t*)&x); + return true; + } + } + return false; + 80025ce: 2000 movs r0, #0 +} + 80025d0: b003 add sp, #12 + 80025d2: bd30 pop {r4, r5, pc} + if (tsDriver->DetectTouch(TS_I2C_ADDRESS)) + 80025d4: 691b ldr r3, [r3, #16] + 80025d6: 2070 movs r0, #112 ; 0x70 + 80025d8: 9201 str r2, [sp, #4] + 80025da: 4798 blx r3 + 80025dc: 9901 ldr r1, [sp, #4] + 80025de: 2800 cmp r0, #0 + 80025e0: d0f5 beq.n 80025ce <_ZN20STM32TouchController11sampleTouchERlS0_+0xa> + tsDriver->GetXY(TS_I2C_ADDRESS, (uint16_t*)&y, (uint16_t*)&x); + 80025e2: 682b ldr r3, [r5, #0] + 80025e4: 2070 movs r0, #112 ; 0x70 + 80025e6: 4622 mov r2, r4 + 80025e8: 695b ldr r3, [r3, #20] + 80025ea: 4798 blx r3 + 80025ec: 2001 movs r0, #1 + 80025ee: e7ef b.n 80025d0 <_ZN20STM32TouchController11sampleTouchERlS0_+0xc> + 80025f0: 20005144 .word 0x20005144 + +080025f4 : + * @param Reg: Reg address + * @param Value: Data to be written + * @retval None + */ +void TS_IO_Write(uint8_t Addr, uint8_t Reg, uint8_t Value) +{ + 80025f4: b57f push {r0, r1, r2, r3, r4, r5, r6, lr} + status = HAL_I2C_Mem_Write(i2c_handler, Addr, (uint16_t)Reg, MemAddress, Buffer, Length, 1000); + 80025f6: 2301 movs r3, #1 +{ + 80025f8: f88d 2017 strb.w r2, [sp, #23] + status = HAL_I2C_Mem_Write(i2c_handler, Addr, (uint16_t)Reg, MemAddress, Buffer, Length, 1000); + 80025fc: f44f 727a mov.w r2, #1000 ; 0x3e8 + 8002600: e9cd 3201 strd r3, r2, [sp, #4] + 8002604: f10d 0217 add.w r2, sp, #23 + 8002608: 9200 str r2, [sp, #0] + 800260a: 460a mov r2, r1 + 800260c: 4601 mov r1, r0 + 800260e: 4805 ldr r0, [pc, #20] ; (8002624 ) + 8002610: f004 fb1a bl 8006c48 + if (status != HAL_OK) + 8002614: b110 cbz r0, 800261c + HAL_I2C_DeInit(i2c_handler); + 8002616: 4803 ldr r0, [pc, #12] ; (8002624 ) + 8002618: f004 fafd bl 8006c16 + I2Cx_WriteMultiple(&hi2c3, Addr, (uint16_t)Reg, I2C_MEMADD_SIZE_8BIT, (uint8_t*)&Value, 1); +} + 800261c: b007 add sp, #28 + 800261e: f85d fb04 ldr.w pc, [sp], #4 + 8002622: bf00 nop + 8002624: 2000031c .word 0x2000031c + +08002628 : + * @param Addr: I2C address + * @param Reg: Reg address + * @retval Data to be read + */ +uint8_t TS_IO_Read(uint8_t Addr, uint8_t Reg) +{ + 8002628: b57f push {r0, r1, r2, r3, r4, r5, r6, lr} + uint8_t read_value = 0; + 800262a: 2300 movs r3, #0 +{ + 800262c: 460a mov r2, r1 + status = HAL_I2C_Mem_Read(i2c_handler, Addr, (uint16_t)Reg, MemAddress, Buffer, Length, 1000); + 800262e: f44f 717a mov.w r1, #1000 ; 0x3e8 + uint8_t read_value = 0; + 8002632: f88d 3017 strb.w r3, [sp, #23] + status = HAL_I2C_Mem_Read(i2c_handler, Addr, (uint16_t)Reg, MemAddress, Buffer, Length, 1000); + 8002636: 2301 movs r3, #1 + 8002638: e9cd 3101 strd r3, r1, [sp, #4] + 800263c: f10d 0117 add.w r1, sp, #23 + 8002640: 9100 str r1, [sp, #0] + 8002642: 4601 mov r1, r0 + 8002644: 4805 ldr r0, [pc, #20] ; (800265c ) + 8002646: f004 fbd9 bl 8006dfc + if (status != HAL_OK) + 800264a: b110 cbz r0, 8002652 + HAL_I2C_DeInit(i2c_handler); + 800264c: 4803 ldr r0, [pc, #12] ; (800265c ) + 800264e: f004 fae2 bl 8006c16 + + I2Cx_ReadMultiple(&hi2c3, Addr, Reg, I2C_MEMADD_SIZE_8BIT, (uint8_t*)&read_value, 1); + + return read_value; +} + 8002652: f89d 0017 ldrb.w r0, [sp, #23] + 8002656: b007 add sp, #28 + 8002658: f85d fb04 ldr.w pc, [sp], #4 + 800265c: 2000031c .word 0x2000031c + +08002660 <_ZN8touchgfx4GPIO3setENS0_7GPIO_IDE>: +/* + * Sets a pin high. + */ +void GPIO::set(GPIO_ID id) +{ + switch (id) + 8002660: 2803 cmp r0, #3 + 8002662: d823 bhi.n 80026ac <_ZN8touchgfx4GPIO3setENS0_7GPIO_IDE+0x4c> + 8002664: e8df f000 tbb [pc, r0] + 8002668: 1a130b02 .word 0x1a130b02 + { + case GPIO::VSYNC_FREQ: +#if defined(VSYNC_FREQ_GPIO_Port) && defined(VSYNC_FREQ_Pin) + HAL_GPIO_WritePin(VSYNC_FREQ_GPIO_Port, VSYNC_FREQ_Pin, M_GPIO_PIN_SET(id)); + 800266c: 4b10 ldr r3, [pc, #64] ; (80026b0 <_ZN8touchgfx4GPIO3setENS0_7GPIO_IDE+0x50>) + 800266e: 2110 movs r1, #16 + 8002670: 4810 ldr r0, [pc, #64] ; (80026b4 <_ZN8touchgfx4GPIO3setENS0_7GPIO_IDE+0x54>) + 8002672: 681a ldr r2, [r3, #0] + 8002674: fab2 f282 clz r2, r2 + 8002678: 0952 lsrs r2, r2, #5 + HAL_GPIO_WritePin(FRAME_RATE_GPIO_Port, FRAME_RATE_Pin, M_GPIO_PIN_SET(id)); +#endif + break; + case GPIO::MCU_ACTIVE: +#if defined(MCU_ACTIVE_GPIO_Port) && defined(MCU_ACTIVE_Pin) + HAL_GPIO_WritePin(MCU_ACTIVE_GPIO_Port, MCU_ACTIVE_Pin, M_GPIO_PIN_SET(id)); + 800267a: f004 b953 b.w 8006924 + HAL_GPIO_WritePin(RENDER_TIME_GPIO_Port, RENDER_TIME_Pin, M_GPIO_PIN_SET(id)); + 800267e: 4b0c ldr r3, [pc, #48] ; (80026b0 <_ZN8touchgfx4GPIO3setENS0_7GPIO_IDE+0x50>) + 8002680: 2140 movs r1, #64 ; 0x40 + 8002682: 685a ldr r2, [r3, #4] + 8002684: fab2 f282 clz r2, r2 + 8002688: 0952 lsrs r2, r2, #5 + HAL_GPIO_WritePin(FRAME_RATE_GPIO_Port, FRAME_RATE_Pin, M_GPIO_PIN_SET(id)); + 800268a: 480b ldr r0, [pc, #44] ; (80026b8 <_ZN8touchgfx4GPIO3setENS0_7GPIO_IDE+0x58>) + 800268c: e7f5 b.n 800267a <_ZN8touchgfx4GPIO3setENS0_7GPIO_IDE+0x1a> + 800268e: 4b08 ldr r3, [pc, #32] ; (80026b0 <_ZN8touchgfx4GPIO3setENS0_7GPIO_IDE+0x50>) + 8002690: 2180 movs r1, #128 ; 0x80 + 8002692: 689a ldr r2, [r3, #8] + 8002694: fab2 f282 clz r2, r2 + 8002698: 0952 lsrs r2, r2, #5 + 800269a: e7f6 b.n 800268a <_ZN8touchgfx4GPIO3setENS0_7GPIO_IDE+0x2a> + HAL_GPIO_WritePin(MCU_ACTIVE_GPIO_Port, MCU_ACTIVE_Pin, M_GPIO_PIN_SET(id)); + 800269c: 4b04 ldr r3, [pc, #16] ; (80026b0 <_ZN8touchgfx4GPIO3setENS0_7GPIO_IDE+0x50>) + 800269e: 2140 movs r1, #64 ; 0x40 + 80026a0: 4806 ldr r0, [pc, #24] ; (80026bc <_ZN8touchgfx4GPIO3setENS0_7GPIO_IDE+0x5c>) + 80026a2: 68da ldr r2, [r3, #12] + 80026a4: fab2 f282 clz r2, r2 + 80026a8: 0952 lsrs r2, r2, #5 + 80026aa: e7e6 b.n 800267a <_ZN8touchgfx4GPIO3setENS0_7GPIO_IDE+0x1a> +#endif + break; + } +} + 80026ac: 4770 bx lr + 80026ae: bf00 nop + 80026b0: 20005148 .word 0x20005148 + 80026b4: 40020400 .word 0x40020400 + 80026b8: 40020800 .word 0x40020800 + 80026bc: 40021800 .word 0x40021800 + +080026c0 <_ZN8touchgfx4GPIO5clearENS0_7GPIO_IDE>: +/* + * Sets a pin low. + */ +void GPIO::clear(GPIO_ID id) +{ + switch (id) + 80026c0: 2803 cmp r0, #3 + 80026c2: d823 bhi.n 800270c <_ZN8touchgfx4GPIO5clearENS0_7GPIO_IDE+0x4c> + 80026c4: e8df f000 tbb [pc, r0] + 80026c8: 1a130b02 .word 0x1a130b02 + { + case GPIO::VSYNC_FREQ: +#if defined(VSYNC_FREQ_GPIO_Port) && defined(VSYNC_FREQ_Pin) + HAL_GPIO_WritePin(VSYNC_FREQ_GPIO_Port, VSYNC_FREQ_Pin, M_GPIO_PIN_RESET(id)); + 80026cc: 4b10 ldr r3, [pc, #64] ; (8002710 <_ZN8touchgfx4GPIO5clearENS0_7GPIO_IDE+0x50>) + 80026ce: 2110 movs r1, #16 + 80026d0: 4810 ldr r0, [pc, #64] ; (8002714 <_ZN8touchgfx4GPIO5clearENS0_7GPIO_IDE+0x54>) + 80026d2: 681a ldr r2, [r3, #0] + 80026d4: 3a00 subs r2, #0 + 80026d6: bf18 it ne + 80026d8: 2201 movne r2, #1 + HAL_GPIO_WritePin(FRAME_RATE_GPIO_Port, FRAME_RATE_Pin, M_GPIO_PIN_RESET(id)); +#endif + break; + case GPIO::MCU_ACTIVE: +#if defined(MCU_ACTIVE_GPIO_Port) && defined(MCU_ACTIVE_Pin) + HAL_GPIO_WritePin(MCU_ACTIVE_GPIO_Port, MCU_ACTIVE_Pin, M_GPIO_PIN_RESET(id)); + 80026da: f004 b923 b.w 8006924 + HAL_GPIO_WritePin(RENDER_TIME_GPIO_Port, RENDER_TIME_Pin, M_GPIO_PIN_RESET(id)); + 80026de: 4b0c ldr r3, [pc, #48] ; (8002710 <_ZN8touchgfx4GPIO5clearENS0_7GPIO_IDE+0x50>) + 80026e0: 2140 movs r1, #64 ; 0x40 + 80026e2: 685a ldr r2, [r3, #4] + 80026e4: 3a00 subs r2, #0 + 80026e6: bf18 it ne + 80026e8: 2201 movne r2, #1 + HAL_GPIO_WritePin(FRAME_RATE_GPIO_Port, FRAME_RATE_Pin, M_GPIO_PIN_RESET(id)); + 80026ea: 480b ldr r0, [pc, #44] ; (8002718 <_ZN8touchgfx4GPIO5clearENS0_7GPIO_IDE+0x58>) + 80026ec: e7f5 b.n 80026da <_ZN8touchgfx4GPIO5clearENS0_7GPIO_IDE+0x1a> + 80026ee: 4b08 ldr r3, [pc, #32] ; (8002710 <_ZN8touchgfx4GPIO5clearENS0_7GPIO_IDE+0x50>) + 80026f0: 2180 movs r1, #128 ; 0x80 + 80026f2: 689a ldr r2, [r3, #8] + 80026f4: 3a00 subs r2, #0 + 80026f6: bf18 it ne + 80026f8: 2201 movne r2, #1 + 80026fa: e7f6 b.n 80026ea <_ZN8touchgfx4GPIO5clearENS0_7GPIO_IDE+0x2a> + HAL_GPIO_WritePin(MCU_ACTIVE_GPIO_Port, MCU_ACTIVE_Pin, M_GPIO_PIN_RESET(id)); + 80026fc: 4b04 ldr r3, [pc, #16] ; (8002710 <_ZN8touchgfx4GPIO5clearENS0_7GPIO_IDE+0x50>) + 80026fe: 2140 movs r1, #64 ; 0x40 + 8002700: 4806 ldr r0, [pc, #24] ; (800271c <_ZN8touchgfx4GPIO5clearENS0_7GPIO_IDE+0x5c>) + 8002702: 68da ldr r2, [r3, #12] + 8002704: 3a00 subs r2, #0 + 8002706: bf18 it ne + 8002708: 2201 movne r2, #1 + 800270a: e7e6 b.n 80026da <_ZN8touchgfx4GPIO5clearENS0_7GPIO_IDE+0x1a> +#endif + break; + } +} + 800270c: 4770 bx lr + 800270e: bf00 nop + 8002710: 20005148 .word 0x20005148 + 8002714: 40020400 .word 0x40020400 + 8002718: 40020800 .word 0x40020800 + 800271c: 40021800 .word 0x40021800 + +08002720 <_ZN8touchgfx4GPIO6toggleENS0_7GPIO_IDE>: +/* + * Toggles a pin. + */ +void GPIO::toggle(GPIO_ID id) +{ + switch (id) + 8002720: 2803 cmp r0, #3 + 8002722: d80f bhi.n 8002744 <_ZN8touchgfx4GPIO6toggleENS0_7GPIO_IDE+0x24> + 8002724: e8df f000 tbb [pc, r0] + 8002728: 0b090602 .word 0x0b090602 + { + case GPIO::VSYNC_FREQ: +#if defined(VSYNC_FREQ_GPIO_Port) && defined(VSYNC_FREQ_Pin) + HAL_GPIO_TogglePin(VSYNC_FREQ_GPIO_Port, VSYNC_FREQ_Pin); + 800272c: 2110 movs r1, #16 + 800272e: 4806 ldr r0, [pc, #24] ; (8002748 <_ZN8touchgfx4GPIO6toggleENS0_7GPIO_IDE+0x28>) + HAL_GPIO_TogglePin(FRAME_RATE_GPIO_Port, FRAME_RATE_Pin); +#endif + break; + case GPIO::MCU_ACTIVE: +#if defined(MCU_ACTIVE_GPIO_Port) && defined(MCU_ACTIVE_Pin) + HAL_GPIO_TogglePin(MCU_ACTIVE_GPIO_Port, MCU_ACTIVE_Pin); + 8002730: f004 b8fd b.w 800692e + HAL_GPIO_TogglePin(RENDER_TIME_GPIO_Port, RENDER_TIME_Pin); + 8002734: 2140 movs r1, #64 ; 0x40 + HAL_GPIO_TogglePin(FRAME_RATE_GPIO_Port, FRAME_RATE_Pin); + 8002736: 4805 ldr r0, [pc, #20] ; (800274c <_ZN8touchgfx4GPIO6toggleENS0_7GPIO_IDE+0x2c>) + 8002738: e7fa b.n 8002730 <_ZN8touchgfx4GPIO6toggleENS0_7GPIO_IDE+0x10> + 800273a: 2180 movs r1, #128 ; 0x80 + 800273c: e7fb b.n 8002736 <_ZN8touchgfx4GPIO6toggleENS0_7GPIO_IDE+0x16> + HAL_GPIO_TogglePin(MCU_ACTIVE_GPIO_Port, MCU_ACTIVE_Pin); + 800273e: 2140 movs r1, #64 ; 0x40 + 8002740: 4803 ldr r0, [pc, #12] ; (8002750 <_ZN8touchgfx4GPIO6toggleENS0_7GPIO_IDE+0x30>) + 8002742: e7f5 b.n 8002730 <_ZN8touchgfx4GPIO6toggleENS0_7GPIO_IDE+0x10> +#endif + break; + } +} + 8002744: 4770 bx lr + 8002746: bf00 nop + 8002748: 40020400 .word 0x40020400 + 800274c: 40020800 .word 0x40020800 + 8002750: 40021800 .word 0x40021800 + +08002754 <_ZN8touchgfx4GPIO3getENS0_7GPIO_IDE>: + +/* + * Gets the state of a pin. + */ +bool GPIO::get(GPIO_ID id) +{ + 8002754: b508 push {r3, lr} + GPIO_PinState bitstatus = GPIO_PIN_RESET; + switch (id) + 8002756: 2803 cmp r0, #3 + 8002758: d813 bhi.n 8002782 <_ZN8touchgfx4GPIO3getENS0_7GPIO_IDE+0x2e> + 800275a: e8df f000 tbb [pc, r0] + 800275e: 0a02 .short 0x0a02 + 8002760: 0f0d .short 0x0f0d + { + case GPIO::VSYNC_FREQ: +#if defined(VSYNC_FREQ_GPIO_Port) && defined(VSYNC_FREQ_Pin) + bitstatus = HAL_GPIO_ReadPin(VSYNC_FREQ_GPIO_Port, VSYNC_FREQ_Pin); + 8002762: 2110 movs r1, #16 + 8002764: 4808 ldr r0, [pc, #32] ; (8002788 <_ZN8touchgfx4GPIO3getENS0_7GPIO_IDE+0x34>) + bitstatus = HAL_GPIO_ReadPin(FRAME_RATE_GPIO_Port, FRAME_RATE_Pin); +#endif + break; + case GPIO::MCU_ACTIVE: +#if defined(MCU_ACTIVE_GPIO_Port) && defined(MCU_ACTIVE_Pin) + bitstatus = HAL_GPIO_ReadPin(MCU_ACTIVE_GPIO_Port, MCU_ACTIVE_Pin); + 8002766: f004 f8d7 bl 8006918 +#endif + break; + } + return (bitstatus == GPIO_PIN_SET); +} + 800276a: 1e43 subs r3, r0, #1 + 800276c: 4258 negs r0, r3 + 800276e: 4158 adcs r0, r3 + 8002770: bd08 pop {r3, pc} + bitstatus = HAL_GPIO_ReadPin(RENDER_TIME_GPIO_Port, RENDER_TIME_Pin); + 8002772: 2140 movs r1, #64 ; 0x40 + bitstatus = HAL_GPIO_ReadPin(FRAME_RATE_GPIO_Port, FRAME_RATE_Pin); + 8002774: 4805 ldr r0, [pc, #20] ; (800278c <_ZN8touchgfx4GPIO3getENS0_7GPIO_IDE+0x38>) + 8002776: e7f6 b.n 8002766 <_ZN8touchgfx4GPIO3getENS0_7GPIO_IDE+0x12> + 8002778: 2180 movs r1, #128 ; 0x80 + 800277a: e7fb b.n 8002774 <_ZN8touchgfx4GPIO3getENS0_7GPIO_IDE+0x20> + bitstatus = HAL_GPIO_ReadPin(MCU_ACTIVE_GPIO_Port, MCU_ACTIVE_Pin); + 800277c: 2140 movs r1, #64 ; 0x40 + 800277e: 4804 ldr r0, [pc, #16] ; (8002790 <_ZN8touchgfx4GPIO3getENS0_7GPIO_IDE+0x3c>) + 8002780: e7f1 b.n 8002766 <_ZN8touchgfx4GPIO3getENS0_7GPIO_IDE+0x12> + switch (id) + 8002782: 2000 movs r0, #0 + 8002784: e7f1 b.n 800276a <_ZN8touchgfx4GPIO3getENS0_7GPIO_IDE+0x16> + 8002786: bf00 nop + 8002788: 40020400 .word 0x40020400 + 800278c: 40020800 .word 0x40020800 + 8002790: 40021800 .word 0x40021800 + +08002794 <_ZN8touchgfx4GPIO4initEv>: +{ + 8002794: b570 push {r4, r5, r6, lr} + 8002796: 4d08 ldr r5, [pc, #32] ; (80027b8 <_ZN8touchgfx4GPIO4initEv+0x24>) + for (int id = 0; id <= 4; id++) + 8002798: 2400 movs r4, #0 + GPIO_InvertedLevels[id] = 1; + 800279a: 2601 movs r6, #1 + if (GPIO::get(static_cast(id))) + 800279c: b2e0 uxtb r0, r4 + 800279e: f7ff ffd9 bl 8002754 <_ZN8touchgfx4GPIO3getENS0_7GPIO_IDE> + 80027a2: b118 cbz r0, 80027ac <_ZN8touchgfx4GPIO4initEv+0x18> + if (GPIO_InvertedLevels[id] != 1) + 80027a4: 682b ldr r3, [r5, #0] + 80027a6: 2b01 cmp r3, #1 + GPIO_InvertedLevels[id] = 1; + 80027a8: bf18 it ne + 80027aa: 602e strne r6, [r5, #0] + for (int id = 0; id <= 4; id++) + 80027ac: 3401 adds r4, #1 + 80027ae: 3504 adds r5, #4 + 80027b0: 2c05 cmp r4, #5 + 80027b2: d1f3 bne.n 800279c <_ZN8touchgfx4GPIO4initEv+0x8> +} + 80027b4: bd70 pop {r4, r5, r6, pc} + 80027b6: bf00 nop + 80027b8: 20005148 .word 0x20005148 + +080027bc <_ZN8touchgfx3HAL21setDisplayOrientationENS_18DisplayOrientationE>: + * @note A screen transition must occur before this takes effect! + */ + virtual void setDisplayOrientation(DisplayOrientation orientation) + { + requestedOrientation = orientation; + displayOrientationChangeRequested = true; + 80027bc: 2301 movs r3, #1 + requestedOrientation = orientation; + 80027be: f880 1078 strb.w r1, [r0, #120] ; 0x78 + displayOrientationChangeRequested = true; + 80027c2: f880 3079 strb.w r3, [r0, #121] ; 0x79 + } + 80027c6: 4770 bx lr + +080027c8 <_ZN8touchgfx3HAL9sampleKeyERh>: + */ + virtual bool sampleKey(uint8_t& key) + { + (void)key; // Unused variable + return false; + } + 80027c8: 2000 movs r0, #0 + 80027ca: 4770 bx lr + +080027cc <_ZN8touchgfx3HAL19setAnimationStorageEPv>: + * + * @see setFrameBufferStartAddresses + */ + virtual void setAnimationStorage(void* animationStorage) + { + frameBuffer2 = reinterpret_cast(animationStorage); + 80027cc: 6441 str r1, [r0, #68] ; 0x44 + USE_ANIMATION_STORAGE = animationStorage != 0; + 80027ce: 3900 subs r1, #0 + 80027d0: 4b02 ldr r3, [pc, #8] ; (80027dc <_ZN8touchgfx3HAL19setAnimationStorageEPv+0x10>) + 80027d2: bf18 it ne + 80027d4: 2101 movne r1, #1 + 80027d6: 7019 strb r1, [r3, #0] + } + 80027d8: 4770 bx lr + 80027da: bf00 nop + 80027dc: 2001e733 .word 0x2001e733 + +080027e0 <_ZNK8touchgfx3HAL18getFlashDataReaderEv>: + * @return the FlashDataReader. + */ + virtual FlashDataReader* getFlashDataReader() const + { + return 0; + } + 80027e0: 2000 movs r0, #0 + 80027e2: 4770 bx lr + +080027e4 <_ZN8touchgfx3HAL9taskDelayEt>: + * + * @see registerTaskDelayFunction + */ + virtual void taskDelay(uint16_t ms) + { + if (taskDelayFunc) + 80027e4: 6b83 ldr r3, [r0, #56] ; 0x38 + 80027e6: b10b cbz r3, 80027ec <_ZN8touchgfx3HAL9taskDelayEt+0x8> + { + taskDelayFunc(ms); + 80027e8: 4608 mov r0, r1 + 80027ea: 4718 bx r3 + } + } + 80027ec: 4770 bx lr + +080027ee <_ZN8touchgfx3HAL17getTFTCurrentLineEv>: + * implemented". + */ + virtual uint16_t getTFTCurrentLine() + { + return 0xFFFFu; + } + 80027ee: f64f 70ff movw r0, #65535 ; 0xffff + 80027f2: 4770 bx lr + +080027f4 <_ZN8touchgfx3HAL10getDMATypeEv>: + * + * @return a DMAType value of the concrete DMA implementation. + */ + virtual DMAType getDMAType() + { + return dma.getDMAType(); + 80027f4: 6840 ldr r0, [r0, #4] + 80027f6: 6803 ldr r3, [r0, #0] + 80027f8: 699b ldr r3, [r3, #24] + 80027fa: 4718 bx r3 + +080027fc <_ZN11TouchGFXHALD1Ev>: + * + * @brief HAL implementation for TouchGFX. + * + * @sa HAL + */ +class TouchGFXHAL : public TouchGFXGeneratedHAL + 80027fc: 4770 bx lr + ... + +08002800 <_ZN11TouchGFXHAL10initializeEv>: + +LOCATION_PRAGMA("TouchGFX_Framebuffer") +uint32_t animationBuffer[(480 * 272 * 2 + 3) / 4] LOCATION_ATTRIBUTE("TouchGFX_Framebuffer"); + +void TouchGFXHAL::initialize() +{ + 8002800: b538 push {r3, r4, r5, lr} + 8002802: 4604 mov r4, r0 + // + // To overwrite the generated implementation, omit call to parent function + // and implemented needed functionality here. + // Please note, HAL::initialize() must be called to initialize the framework. + + TouchGFXGeneratedHAL::initialize(); + 8002804: f001 f852 bl 80038ac <_ZN20TouchGFXGeneratedHAL10initializeEv> + setFrameBufferStartAddresses((void*)frameBuffer0, (void*)frameBuffer1, (void*)animationBuffer); //enable the animation storage to allow slide animations + 8002808: 6823 ldr r3, [r4, #0] + 800280a: 4620 mov r0, r4 + 800280c: f8d3 5088 ldr.w r5, [r3, #136] ; 0x88 + 8002810: 4b07 ldr r3, [pc, #28] ; (8002830 <_ZN11TouchGFXHAL10initializeEv+0x30>) + 8002812: e9d4 120f ldrd r1, r2, [r4, #60] ; 0x3c + 8002816: 47a8 blx r5 + lockDMAToPorch = enableLock; + 8002818: 2300 movs r3, #0 + lockDMAToFrontPorch(false); + instrumentation.init(); + 800281a: 4d06 ldr r5, [pc, #24] ; (8002834 <_ZN11TouchGFXHAL10initializeEv+0x34>) + 800281c: f884 304a strb.w r3, [r4, #74] ; 0x4a + 8002820: 4628 mov r0, r5 + 8002822: f7ff fe81 bl 8002528 <_ZN8touchgfx25CortexMMCUInstrumentation4initEv> + updateMCULoad = enabled; + 8002826: 2301 movs r3, #1 + mcuInstrumentation = mcuInstr; + 8002828: 6125 str r5, [r4, #16] + updateMCULoad = enabled; + 800282a: f884 3070 strb.w r3, [r4, #112] ; 0x70 + setMCUInstrumentation(&instrumentation); + enableMCULoadCalculation(true); +} + 800282e: bd38 pop {r3, r4, r5, pc} + 8002830: c0000000 .word 0xc0000000 + 8002834: 20005158 .word 0x20005158 + +08002838 <_ZNK11TouchGFXHAL17getTFTFrameBufferEv>: + // Calling parent implementation of getTFTFrameBuffer(). + // + // To overwrite the generated implementation, omit call to parent function + // and implemented needed functionality here. + + return TouchGFXGeneratedHAL::getTFTFrameBuffer(); + 8002838: f000 bff4 b.w 8003824 <_ZNK20TouchGFXGeneratedHAL17getTFTFrameBufferEv> + +0800283c <_ZN11TouchGFXHAL17setTFTFrameBufferEPt>: + // Calling parent implementation of setTFTFrameBuffer(uint16_t* address). + // + // To overwrite the generated implementation, omit call to parent function + // and implemented needed functionality here. + + TouchGFXGeneratedHAL::setTFTFrameBuffer(address); + 800283c: f000 bff8 b.w 8003830 <_ZN20TouchGFXGeneratedHAL17setTFTFrameBufferEPt> + +08002840 <_ZN11TouchGFXHAL16flushFrameBufferERKN8touchgfx4RectE>: + * @param rect The area of the screen that has been drawn, expressed in absolute coordinates. + * + * @see flushFrameBuffer(). + */ +void TouchGFXHAL::flushFrameBuffer(const touchgfx::Rect& rect) +{ + 8002840: b570 push {r4, r5, r6, lr} + // To overwrite the generated implementation, omit call to parent function + // and implemented needed functionality here. + // Please note, HAL::flushFrameBuffer(const touchgfx::Rect& rect) must + // be called to notify the touchgfx framework that flush has been performed. + + TouchGFXGeneratedHAL::flushFrameBuffer(rect); + 8002842: f001 f85d bl 8003900 <_ZN20TouchGFXGeneratedHAL16flushFrameBufferERKN8touchgfx4RectE> + SCB->CSSELR = 0U; /*(0U << 1U) | 0U;*/ /* Level 1 data cache */ + 8002846: 4910 ldr r1, [pc, #64] ; (8002888 <_ZN11TouchGFXHAL16flushFrameBufferERKN8touchgfx4RectE+0x48>) + 8002848: 2300 movs r3, #0 + 800284a: f8c1 3084 str.w r3, [r1, #132] ; 0x84 + __ASM volatile ("dsb 0xF":::"memory"); + 800284e: f3bf 8f4f dsb sy + ccsidr = SCB->CCSIDR; + 8002852: f8d1 3080 ldr.w r3, [r1, #128] ; 0x80 + SCB->DCCISW = (((sets << SCB_DCCISW_SET_Pos) & SCB_DCCISW_SET_Msk) | + 8002856: f643 74e0 movw r4, #16352 ; 0x3fe0 + ways = (uint32_t)(CCSIDR_WAYS(ccsidr)); + 800285a: f3c3 00c9 ubfx r0, r3, #3, #10 + sets = (uint32_t)(CCSIDR_SETS(ccsidr)); + 800285e: f3c3 334e ubfx r3, r3, #13, #15 + 8002862: 015b lsls r3, r3, #5 + SCB->DCCISW = (((sets << SCB_DCCISW_SET_Pos) & SCB_DCCISW_SET_Msk) | + 8002864: ea03 0604 and.w r6, r3, r4 + ways = (uint32_t)(CCSIDR_WAYS(ccsidr)); + 8002868: 4602 mov r2, r0 + SCB->DCCISW = (((sets << SCB_DCCISW_SET_Pos) & SCB_DCCISW_SET_Msk) | + 800286a: ea46 7582 orr.w r5, r6, r2, lsl #30 + } while (ways-- != 0U); + 800286e: 3a01 subs r2, #1 + SCB->DCCISW = (((sets << SCB_DCCISW_SET_Pos) & SCB_DCCISW_SET_Msk) | + 8002870: f8c1 5274 str.w r5, [r1, #628] ; 0x274 + } while (ways-- != 0U); + 8002874: d2f9 bcs.n 800286a <_ZN11TouchGFXHAL16flushFrameBufferERKN8touchgfx4RectE+0x2a> + } while(sets-- != 0U); + 8002876: 3b20 subs r3, #32 + 8002878: f113 0f20 cmn.w r3, #32 + 800287c: d1f2 bne.n 8002864 <_ZN11TouchGFXHAL16flushFrameBufferERKN8touchgfx4RectE+0x24> + 800287e: f3bf 8f4f dsb sy + __ASM volatile ("isb 0xF":::"memory"); + 8002882: f3bf 8f6f isb sy + // If the framebuffer is placed in Write Through cached memory (e.g. SRAM) then we need + // to flush the Dcache to make sure framebuffer is correct in RAM. That's done + // using SCB_CleanInvalidateDCache(). + + SCB_CleanInvalidateDCache(); +} + 8002886: bd70 pop {r4, r5, r6, pc} + 8002888: e000ed00 .word 0xe000ed00 + +0800288c <_ZN11TouchGFXHAL9blockCopyEPvPKvm>: + +bool TouchGFXHAL::blockCopy(void* RESTRICT dest, const void* RESTRICT src, uint32_t numBytes) +{ + return TouchGFXGeneratedHAL::blockCopy(dest, src, numBytes); + 800288c: f001 b83a b.w 8003904 <_ZN20TouchGFXGeneratedHAL9blockCopyEPvPKvm> + +08002890 <_ZN11TouchGFXHAL19configureInterruptsEv>: + // Calling parent implementation of configureInterrupts(). + // + // To overwrite the generated implementation, omit call to parent function + // and implemented needed functionality here. + + TouchGFXGeneratedHAL::configureInterrupts(); + 8002890: f000 bfa4 b.w 80037dc <_ZN20TouchGFXGeneratedHAL19configureInterruptsEv> + +08002894 <_ZN11TouchGFXHAL16enableInterruptsEv>: + // Calling parent implementation of enableInterrupts(). + // + // To overwrite the generated implementation, omit call to parent function + // and implemented needed functionality here. + + TouchGFXGeneratedHAL::enableInterrupts(); + 8002894: f001 b954 b.w 8003b40 <_ZN20TouchGFXGeneratedHAL16enableInterruptsEv> + +08002898 <_ZN11TouchGFXHAL17disableInterruptsEv>: + // Calling parent implementation of disableInterrupts(). + // + // To overwrite the generated implementation, omit call to parent function + // and implemented needed functionality here. + + TouchGFXGeneratedHAL::disableInterrupts(); + 8002898: f001 b95c b.w 8003b54 <_ZN20TouchGFXGeneratedHAL17disableInterruptsEv> + +0800289c <_ZN11TouchGFXHAL28enableLCDControllerInterruptEv>: + // Calling parent implementation of enableLCDControllerInterrupt(). + // + // To overwrite the generated implementation, omit call to parent function + // and implemented needed functionality here. + + TouchGFXGeneratedHAL::enableLCDControllerInterrupt(); + 800289c: f000 bfa8 b.w 80037f0 <_ZN20TouchGFXGeneratedHAL28enableLCDControllerInterruptEv> + +080028a0 <_ZN8touchgfx3HAL15backPorchExitedEv>: + virtual void backPorchExited() + 80028a0: b510 push {r4, lr} + 80028a2: 4604 mov r4, r0 + swapFrameBuffers(); + 80028a4: f01e fcac bl 8021200 <_ZN8touchgfx3HAL16swapFrameBuffersEv> + tick(); + 80028a8: 6823 ldr r3, [r4, #0] + 80028aa: 4620 mov r0, r4 + 80028ac: f8d3 30ac ldr.w r3, [r3, #172] ; 0xac + } + 80028b0: e8bd 4010 ldmia.w sp!, {r4, lr} + tick(); + 80028b4: 4718 bx r3 + +080028b6 <_ZN11TouchGFXHAL16flushFrameBufferEv>: + * Rect version. + * @see HAL::flushFrameBuffer + */ + virtual void flushFrameBuffer() + { + HAL::flushFrameBuffer(); + 80028b6: f01d bf00 b.w 80206ba <_ZN8touchgfx3HAL16flushFrameBufferEv> + +080028ba <_ZN11TouchGFXHALD0Ev>: + 80028ba: b510 push {r4, lr} + 80028bc: 4604 mov r4, r0 + 80028be: 217c movs r1, #124 ; 0x7c + 80028c0: f031 fd19 bl 80342f6 <_ZdlPvj> + 80028c4: 4620 mov r0, r4 + 80028c6: bd10 pop {r4, pc} + +080028c8 <_ZN8touchgfx3HAL11getBlitCapsEv>: + if (useDMAAcceleration) + 80028c8: f890 307a ldrb.w r3, [r0, #122] ; 0x7a + 80028cc: b11b cbz r3, 80028d6 <_ZN8touchgfx3HAL11getBlitCapsEv+0xe> + return dma.getBlitCaps(); + 80028ce: 6840 ldr r0, [r0, #4] + 80028d0: 6803 ldr r3, [r0, #0] + 80028d2: 681b ldr r3, [r3, #0] + 80028d4: 4718 bx r3 + } + 80028d6: 4618 mov r0, r3 + 80028d8: 4770 bx lr + ... + +080028dc <_ZN8touchgfx3HAL31performDisplayOrientationChangeEv>: + virtual void noTouch(); + + /** Perform the actual display orientation change. */ + virtual void performDisplayOrientationChange() + { + if (requestedOrientation != nativeDisplayOrientation) + 80028dc: f890 1034 ldrb.w r1, [r0, #52] ; 0x34 + { + if (DISPLAY_ROTATION == rotate0) + 80028e0: 4b0d ldr r3, [pc, #52] ; (8002918 <_ZN8touchgfx3HAL31performDisplayOrientationChangeEv+0x3c>) + virtual void performDisplayOrientationChange() + 80028e2: b510 push {r4, lr} + if (requestedOrientation != nativeDisplayOrientation) + 80028e4: f890 4078 ldrb.w r4, [r0, #120] ; 0x78 + if (DISPLAY_ROTATION == rotate0) + 80028e8: 781a ldrb r2, [r3, #0] + if (requestedOrientation != nativeDisplayOrientation) + 80028ea: 428c cmp r4, r1 + 80028ec: d009 beq.n 8002902 <_ZN8touchgfx3HAL31performDisplayOrientationChangeEv+0x26> + if (DISPLAY_ROTATION == rotate0) + 80028ee: b93a cbnz r2, 8002900 <_ZN8touchgfx3HAL31performDisplayOrientationChangeEv+0x24> + { + const uint16_t tmp = DISPLAY_HEIGHT; + 80028f0: 490a ldr r1, [pc, #40] ; (800291c <_ZN8touchgfx3HAL31performDisplayOrientationChangeEv+0x40>) + DISPLAY_HEIGHT = DISPLAY_WIDTH; + 80028f2: 4a0b ldr r2, [pc, #44] ; (8002920 <_ZN8touchgfx3HAL31performDisplayOrientationChangeEv+0x44>) + const uint16_t tmp = DISPLAY_HEIGHT; + 80028f4: 8808 ldrh r0, [r1, #0] + DISPLAY_HEIGHT = DISPLAY_WIDTH; + 80028f6: 8814 ldrh r4, [r2, #0] + DISPLAY_WIDTH = tmp; + 80028f8: 8010 strh r0, [r2, #0] + DISPLAY_ROTATION = rotate90; + 80028fa: 2201 movs r2, #1 + DISPLAY_HEIGHT = DISPLAY_WIDTH; + 80028fc: 800c strh r4, [r1, #0] + else if (DISPLAY_ROTATION != rotate0) + { + const uint16_t tmp = DISPLAY_HEIGHT; + DISPLAY_HEIGHT = DISPLAY_WIDTH; + DISPLAY_WIDTH = tmp; + DISPLAY_ROTATION = rotate0; + 80028fe: 701a strb r2, [r3, #0] + } + } + 8002900: bd10 pop {r4, pc} + else if (DISPLAY_ROTATION != rotate0) + 8002902: 2a00 cmp r2, #0 + 8002904: d0fc beq.n 8002900 <_ZN8touchgfx3HAL31performDisplayOrientationChangeEv+0x24> + DISPLAY_HEIGHT = DISPLAY_WIDTH; + 8002906: 4a06 ldr r2, [pc, #24] ; (8002920 <_ZN8touchgfx3HAL31performDisplayOrientationChangeEv+0x44>) + const uint16_t tmp = DISPLAY_HEIGHT; + 8002908: 4904 ldr r1, [pc, #16] ; (800291c <_ZN8touchgfx3HAL31performDisplayOrientationChangeEv+0x40>) + DISPLAY_HEIGHT = DISPLAY_WIDTH; + 800290a: 8814 ldrh r4, [r2, #0] + const uint16_t tmp = DISPLAY_HEIGHT; + 800290c: 8808 ldrh r0, [r1, #0] + DISPLAY_HEIGHT = DISPLAY_WIDTH; + 800290e: 800c strh r4, [r1, #0] + DISPLAY_WIDTH = tmp; + 8002910: 8010 strh r0, [r2, #0] + DISPLAY_ROTATION = rotate0; + 8002912: 2200 movs r2, #0 + 8002914: e7f3 b.n 80028fe <_ZN8touchgfx3HAL31performDisplayOrientationChangeEv+0x22> + 8002916: bf00 nop + 8002918: 2001e72c .word 0x2001e72c + 800291c: 2001e72a .word 0x2001e72a + 8002920: 2001e728 .word 0x2001e728 + +08002924 <_ZN8touchgfx3HAL28setFrameBufferStartAddressesEPvS1_S1_>: + virtual void setFrameBufferStartAddresses(void* frameBuffer, void* doubleBuffer, void* animationStorage) + 8002924: b570 push {r4, r5, r6, lr} + 8002926: 460d mov r5, r1 + 8002928: 4619 mov r1, r3 + assert(frameBuffer != 0 && "A framebuffer address must be set"); + 800292a: b935 cbnz r5, 800293a <_ZN8touchgfx3HAL28setFrameBufferStartAddressesEPvS1_S1_+0x16> + 800292c: 4b09 ldr r3, [pc, #36] ; (8002954 <_ZN8touchgfx3HAL28setFrameBufferStartAddressesEPvS1_S1_+0x30>) + 800292e: f240 21d2 movw r1, #722 ; 0x2d2 + 8002932: 4a09 ldr r2, [pc, #36] ; (8002958 <_ZN8touchgfx3HAL28setFrameBufferStartAddressesEPvS1_S1_+0x34>) + 8002934: 4809 ldr r0, [pc, #36] ; (800295c <_ZN8touchgfx3HAL28setFrameBufferStartAddressesEPvS1_S1_+0x38>) + 8002936: f031 fd0d bl 8034354 <__assert_func> + frameBuffer1 = reinterpret_cast(doubleBuffer); + 800293a: e9c0 520f strd r5, r2, [r0, #60] ; 0x3c + USE_DOUBLE_BUFFERING = doubleBuffer != 0; + 800293e: 3a00 subs r2, #0 + 8002940: 4b07 ldr r3, [pc, #28] ; (8002960 <_ZN8touchgfx3HAL28setFrameBufferStartAddressesEPvS1_S1_+0x3c>) + 8002942: bf18 it ne + 8002944: 2201 movne r2, #1 + 8002946: 701a strb r2, [r3, #0] + setAnimationStorage(animationStorage); + 8002948: 6803 ldr r3, [r0, #0] + } + 800294a: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} + setAnimationStorage(animationStorage); + 800294e: f8d3 308c ldr.w r3, [r3, #140] ; 0x8c + 8002952: 4718 bx r3 + 8002954: 08035a30 .word 0x08035a30 + 8002958: 08035a68 .word 0x08035a68 + 800295c: 08035ab6 .word 0x08035ab6 + 8002960: 2001e732 .word 0x2001e732 + +08002964 <_ZN8touchgfx3HAL18setFrameBufferSizeEtt>: + virtual void setFrameBufferSize(uint16_t width, uint16_t height) + 8002964: b508 push {r3, lr} + assert(width >= DISPLAY_WIDTH && height >= DISPLAY_HEIGHT && "Framebuffer cannot be smaller than display"); + 8002966: 4b09 ldr r3, [pc, #36] ; (800298c <_ZN8touchgfx3HAL18setFrameBufferSizeEtt+0x28>) + 8002968: 881b ldrh r3, [r3, #0] + 800296a: 428b cmp r3, r1 + 800296c: d803 bhi.n 8002976 <_ZN8touchgfx3HAL18setFrameBufferSizeEtt+0x12> + 800296e: 4b08 ldr r3, [pc, #32] ; (8002990 <_ZN8touchgfx3HAL18setFrameBufferSizeEtt+0x2c>) + 8002970: 881b ldrh r3, [r3, #0] + 8002972: 4293 cmp r3, r2 + 8002974: d905 bls.n 8002982 <_ZN8touchgfx3HAL18setFrameBufferSizeEtt+0x1e> + 8002976: 4b07 ldr r3, [pc, #28] ; (8002994 <_ZN8touchgfx3HAL18setFrameBufferSizeEtt+0x30>) + 8002978: 219e movs r1, #158 ; 0x9e + 800297a: 4a07 ldr r2, [pc, #28] ; (8002998 <_ZN8touchgfx3HAL18setFrameBufferSizeEtt+0x34>) + 800297c: 4807 ldr r0, [pc, #28] ; (800299c <_ZN8touchgfx3HAL18setFrameBufferSizeEtt+0x38>) + 800297e: f031 fce9 bl 8034354 <__assert_func> + FRAME_BUFFER_WIDTH = width; + 8002982: 4b07 ldr r3, [pc, #28] ; (80029a0 <_ZN8touchgfx3HAL18setFrameBufferSizeEtt+0x3c>) + 8002984: 8019 strh r1, [r3, #0] + FRAME_BUFFER_HEIGHT = height; + 8002986: 4b07 ldr r3, [pc, #28] ; (80029a4 <_ZN8touchgfx3HAL18setFrameBufferSizeEtt+0x40>) + 8002988: 801a strh r2, [r3, #0] + } + 800298a: bd08 pop {r3, pc} + 800298c: 2001e728 .word 0x2001e728 + 8002990: 2001e72a .word 0x2001e72a + 8002994: 08035afb .word 0x08035afb + 8002998: 08035b5e .word 0x08035b5e + 800299c: 08035ab6 .word 0x08035ab6 + 80029a0: 2001e72e .word 0x2001e72e + 80029a4: 2001e730 .word 0x2001e730 + +080029a8 : +} + +extern "C" +{ + portBASE_TYPE IdleTaskHook(void* p) + { + 80029a8: 4601 mov r1, r0 + 80029aa: b508 push {r3, lr} + return instance; + 80029ac: 4b03 ldr r3, [pc, #12] ; (80029bc ) + 80029ae: 6818 ldr r0, [r3, #0] + if ((int)p) //idle task sched out + 80029b0: b101 cbz r1, 80029b4 + { + touchgfx::HAL::getInstance()->setMCUActive(true); + 80029b2: 2101 movs r1, #1 + } + else //idle task sched in + { + touchgfx::HAL::getInstance()->setMCUActive(false); + 80029b4: f01e fc3e bl 8021234 <_ZN8touchgfx3HAL12setMCUActiveEb> + } + return pdTRUE; + } + 80029b8: 2001 movs r0, #1 + 80029ba: bd08 pop {r3, pc} + 80029bc: 2001e734 .word 0x2001e734 + +080029c0 <_GLOBAL__sub_I_instrumentation>: + : cc_consumed(0), + 80029c0: 4b03 ldr r3, [pc, #12] ; (80029d0 <_GLOBAL__sub_I_instrumentation+0x10>) + 80029c2: 2200 movs r2, #0 + 80029c4: 605a str r2, [r3, #4] + cc_in(0) + 80029c6: 609a str r2, [r3, #8] + 80029c8: 4a02 ldr r2, [pc, #8] ; (80029d4 <_GLOBAL__sub_I_instrumentation+0x14>) + 80029ca: 601a str r2, [r3, #0] +} + 80029cc: 4770 bx lr + 80029ce: bf00 nop + 80029d0: 20005158 .word 0x20005158 + 80029d4: 080359f8 .word 0x080359f8 + +080029d8 <_ZN8touchgfx10OSWrappers10initializeEv>: + * Initialize frame buffer semaphore and queue/mutex for VSYNC signal. + */ +void OSWrappers::initialize() +{ + // Create a queue of length 1 + frame_buffer_sem = osSemaphoreNew(1, 1, NULL); // Binary semaphore + 80029d8: 2101 movs r1, #1 + 80029da: 2200 movs r2, #0 +{ + 80029dc: b508 push {r3, lr} + frame_buffer_sem = osSemaphoreNew(1, 1, NULL); // Binary semaphore + 80029de: 4608 mov r0, r1 + 80029e0: f006 fcd0 bl 8009384 + 80029e4: 4b0a ldr r3, [pc, #40] ; (8002a10 <_ZN8touchgfx10OSWrappers10initializeEv+0x38>) + 80029e6: 6018 str r0, [r3, #0] + assert((frame_buffer_sem != NULL) && "Creation of framebuffer semaphore failed"); + 80029e8: b928 cbnz r0, 80029f6 <_ZN8touchgfx10OSWrappers10initializeEv+0x1e> + 80029ea: 4b0a ldr r3, [pc, #40] ; (8002a14 <_ZN8touchgfx10OSWrappers10initializeEv+0x3c>) + 80029ec: 2128 movs r1, #40 ; 0x28 + 80029ee: 4a0a ldr r2, [pc, #40] ; (8002a18 <_ZN8touchgfx10OSWrappers10initializeEv+0x40>) + + // Create a queue of length 1 + vsync_queue = osMessageQueueNew(1, 4, NULL); + assert((vsync_queue != NULL) && "Creation of vsync message queue failed"); + 80029f0: 480a ldr r0, [pc, #40] ; (8002a1c <_ZN8touchgfx10OSWrappers10initializeEv+0x44>) + 80029f2: f031 fcaf bl 8034354 <__assert_func> + vsync_queue = osMessageQueueNew(1, 4, NULL); + 80029f6: 2200 movs r2, #0 + 80029f8: 2104 movs r1, #4 + 80029fa: 2001 movs r0, #1 + 80029fc: f006 fd88 bl 8009510 + 8002a00: 4b07 ldr r3, [pc, #28] ; (8002a20 <_ZN8touchgfx10OSWrappers10initializeEv+0x48>) + 8002a02: 6018 str r0, [r3, #0] + assert((vsync_queue != NULL) && "Creation of vsync message queue failed"); + 8002a04: b918 cbnz r0, 8002a0e <_ZN8touchgfx10OSWrappers10initializeEv+0x36> + 8002a06: 4b07 ldr r3, [pc, #28] ; (8002a24 <_ZN8touchgfx10OSWrappers10initializeEv+0x4c>) + 8002a08: 212c movs r1, #44 ; 0x2c + 8002a0a: 4a03 ldr r2, [pc, #12] ; (8002a18 <_ZN8touchgfx10OSWrappers10initializeEv+0x40>) + 8002a0c: e7f0 b.n 80029f0 <_ZN8touchgfx10OSWrappers10initializeEv+0x18> +} + 8002a0e: bd08 pop {r3, pc} + 8002a10: 20005168 .word 0x20005168 + 8002a14: 08035c7c .word 0x08035c7c + 8002a18: 08035cc5 .word 0x08035cc5 + 8002a1c: 08035cf4 .word 0x08035cf4 + 8002a20: 20005164 .word 0x20005164 + 8002a24: 08035d71 .word 0x08035d71 + +08002a28 <_ZN8touchgfx10OSWrappers24takeFrameBufferSemaphoreEv>: +/* + * Take the frame buffer semaphore. Blocks until semaphore is available. + */ +void OSWrappers::takeFrameBufferSemaphore() +{ + osSemaphoreAcquire(frame_buffer_sem, osWaitForever); + 8002a28: 4b02 ldr r3, [pc, #8] ; (8002a34 <_ZN8touchgfx10OSWrappers24takeFrameBufferSemaphoreEv+0xc>) + 8002a2a: f04f 31ff mov.w r1, #4294967295 + 8002a2e: 6818 ldr r0, [r3, #0] + 8002a30: f006 bcfe b.w 8009430 + 8002a34: 20005168 .word 0x20005168 + +08002a38 <_ZN8touchgfx10OSWrappers24giveFrameBufferSemaphoreEv>: +/* + * Release the frame buffer semaphore. + */ +void OSWrappers::giveFrameBufferSemaphore() +{ + osSemaphoreRelease(frame_buffer_sem); + 8002a38: 4b01 ldr r3, [pc, #4] ; (8002a40 <_ZN8touchgfx10OSWrappers24giveFrameBufferSemaphoreEv+0x8>) + 8002a3a: 6818 ldr r0, [r3, #0] + 8002a3c: f006 bd32 b.w 80094a4 + 8002a40: 20005168 .word 0x20005168 + +08002a44 <_ZN8touchgfx10OSWrappers27tryTakeFrameBufferSemaphoreEv>: + * Note must return immediately! This function does not care who has the taken the semaphore, + * it only serves to make sure that the semaphore is taken by someone. + */ +void OSWrappers::tryTakeFrameBufferSemaphore() +{ + osSemaphoreAcquire(frame_buffer_sem, 0); + 8002a44: 4b02 ldr r3, [pc, #8] ; (8002a50 <_ZN8touchgfx10OSWrappers27tryTakeFrameBufferSemaphoreEv+0xc>) + 8002a46: 2100 movs r1, #0 + 8002a48: 6818 ldr r0, [r3, #0] + 8002a4a: f006 bcf1 b.w 8009430 + 8002a4e: bf00 nop + 8002a50: 20005168 .word 0x20005168 + +08002a54 <_ZN8touchgfx10OSWrappers31giveFrameBufferSemaphoreFromISREv>: + 8002a54: f7ff bff0 b.w 8002a38 <_ZN8touchgfx10OSWrappers24giveFrameBufferSemaphoreEv> + +08002a58 <_ZN8touchgfx10OSWrappers11signalVSyncEv>: + * Note This function is called from an ISR, and should (depending on OS) trigger a + * scheduling. + */ +void OSWrappers::signalVSync() +{ + osMessageQueuePut(vsync_queue, &dummy, 0, 0); + 8002a58: 2300 movs r3, #0 + 8002a5a: 4803 ldr r0, [pc, #12] ; (8002a68 <_ZN8touchgfx10OSWrappers11signalVSyncEv+0x10>) + 8002a5c: 4903 ldr r1, [pc, #12] ; (8002a6c <_ZN8touchgfx10OSWrappers11signalVSyncEv+0x14>) + 8002a5e: 461a mov r2, r3 + 8002a60: 6800 ldr r0, [r0, #0] + 8002a62: f006 bd9b b.w 800959c + 8002a66: bf00 nop + 8002a68: 20005164 .word 0x20005164 + 8002a6c: 20000018 .word 0x20000018 + +08002a70 <_ZN8touchgfx10OSWrappers12waitForVSyncEv>: + * + * Note This function must first clear the mutex/queue and then wait for the next one to + * occur. + */ +void OSWrappers::waitForVSync() +{ + 8002a70: b513 push {r0, r1, r4, lr} + uint32_t dummyGet; + // First make sure the queue is empty, by trying to remove an element with 0 timeout. + osMessageQueueGet(vsync_queue, &dummyGet, 0, 0); + 8002a72: 2300 movs r3, #0 + 8002a74: 4c07 ldr r4, [pc, #28] ; (8002a94 <_ZN8touchgfx10OSWrappers12waitForVSyncEv+0x24>) + 8002a76: a901 add r1, sp, #4 + 8002a78: 461a mov r2, r3 + 8002a7a: 6820 ldr r0, [r4, #0] + 8002a7c: f006 fdd0 bl 8009620 + + // Then, wait for next VSYNC to occur. + osMessageQueueGet(vsync_queue, &dummyGet, 0, osWaitForever); + 8002a80: f04f 33ff mov.w r3, #4294967295 + 8002a84: 2200 movs r2, #0 + 8002a86: a901 add r1, sp, #4 + 8002a88: 6820 ldr r0, [r4, #0] + 8002a8a: f006 fdc9 bl 8009620 +} + 8002a8e: b002 add sp, #8 + 8002a90: bd10 pop {r4, pc} + 8002a92: bf00 nop + 8002a94: 20005164 .word 0x20005164 + +08002a98 <_ZN8touchgfx13DMA_Interface5flushEv>: + virtual void addToQueue(const BlitOp& op); + + /** This function blocks until all DMA transfers in the queue have been completed. */ + virtual void flush() + { + waitForFrameBufferSemaphore(); + 8002a98: 6803 ldr r3, [r0, #0] + 8002a9a: 6c5b ldr r3, [r3, #68] ; 0x44 + 8002a9c: 4718 bx r3 + +08002a9e <_ZN8STM32DMA10getDMATypeEv>: + * @return a DMAType value of the concrete DMA_Interface implementation. + */ + virtual touchgfx::DMAType getDMAType(void) + { + return touchgfx::DMA_TYPE_CHROMART; + } + 8002a9e: 2001 movs r0, #1 + 8002aa0: 4770 bx lr + +08002aa2 <_ZN8STM32DMA18signalDMAInterruptEv>: + * + * Raises a DMA interrupt signal. + */ + virtual void signalDMAInterrupt() + { + executeCompleted(); + 8002aa2: 6803 ldr r3, [r0, #0] + 8002aa4: 6a9b ldr r3, [r3, #40] ; 0x28 + 8002aa6: 4718 bx r3 + +08002aa8 <_ZN8STM32DMA10initializeEv>: +} + +void STM32DMA::initialize() +{ + /* Ensure DMA2D Clock is enabled */ + __HAL_RCC_DMA2D_CLK_ENABLE(); + 8002aa8: 4b0d ldr r3, [pc, #52] ; (8002ae0 <_ZN8STM32DMA10initializeEv+0x38>) +{ + 8002aaa: b082 sub sp, #8 + __HAL_RCC_DMA2D_CLK_ENABLE(); + 8002aac: 6b1a ldr r2, [r3, #48] ; 0x30 + 8002aae: f442 0200 orr.w r2, r2, #8388608 ; 0x800000 + 8002ab2: 631a str r2, [r3, #48] ; 0x30 + 8002ab4: 6b1a ldr r2, [r3, #48] ; 0x30 + 8002ab6: f402 0200 and.w r2, r2, #8388608 ; 0x800000 + 8002aba: 9201 str r2, [sp, #4] + 8002abc: 9a01 ldr r2, [sp, #4] + __HAL_RCC_DMA2D_FORCE_RESET(); + 8002abe: 691a ldr r2, [r3, #16] + 8002ac0: f442 0200 orr.w r2, r2, #8388608 ; 0x800000 + 8002ac4: 611a str r2, [r3, #16] + __HAL_RCC_DMA2D_RELEASE_RESET(); + 8002ac6: 691a ldr r2, [r3, #16] + 8002ac8: f422 0200 bic.w r2, r2, #8388608 ; 0x800000 + 8002acc: 611a str r2, [r3, #16] + + /* Add transfer complete callback function */ + hdma2d.XferCpltCallback = DMA2D_XferCpltCallback; + 8002ace: 4b05 ldr r3, [pc, #20] ; (8002ae4 <_ZN8STM32DMA10initializeEv+0x3c>) + 8002ad0: 4a05 ldr r2, [pc, #20] ; (8002ae8 <_ZN8STM32DMA10initializeEv+0x40>) + 8002ad2: 611a str r2, [r3, #16] + NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + 8002ad4: f04f 6280 mov.w r2, #67108864 ; 0x4000000 + 8002ad8: 4b04 ldr r3, [pc, #16] ; (8002aec <_ZN8STM32DMA10initializeEv+0x44>) + 8002ada: 609a str r2, [r3, #8] + + /* Enable DMA2D global Interrupt */ + NVIC_EnableIRQ(DMA2D_IRQn); +} + 8002adc: b002 add sp, #8 + 8002ade: 4770 bx lr + 8002ae0: 40023800 .word 0x40023800 + 8002ae4: 200002dc .word 0x200002dc + 8002ae8: 08002b31 .word 0x08002b31 + 8002aec: e000e100 .word 0xe000e100 + +08002af0 <_ZN8STM32DMA11getBlitCapsEv>: + | BLIT_OP_COPY_WITH_ALPHA + | BLIT_OP_COPY_ARGB8888 + | BLIT_OP_COPY_ARGB8888_WITH_ALPHA + | BLIT_OP_COPY_A4 + | BLIT_OP_COPY_A8); +} + 8002af0: f240 30ef movw r0, #1007 ; 0x3ef + 8002af4: 4770 bx lr + ... + +08002af8 <_ZN8STM32DMAD1Ev>: +STM32DMA::~STM32DMA() + 8002af8: 4b05 ldr r3, [pc, #20] ; (8002b10 <_ZN8STM32DMAD1Ev+0x18>) + NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + 8002afa: f04f 6280 mov.w r2, #67108864 ; 0x4000000 + 8002afe: 6003 str r3, [r0, #0] + 8002b00: 4b04 ldr r3, [pc, #16] ; (8002b14 <_ZN8STM32DMAD1Ev+0x1c>) + 8002b02: f8c3 2088 str.w r2, [r3, #136] ; 0x88 + __ASM volatile ("dsb 0xF":::"memory"); + 8002b06: f3bf 8f4f dsb sy + __ASM volatile ("isb 0xF":::"memory"); + 8002b0a: f3bf 8f6f isb sy +} + 8002b0e: 4770 bx lr + 8002b10: 08035f40 .word 0x08035f40 + 8002b14: e000e100 .word 0xe000e100 + +08002b18 <_ZN8STM32DMAD0Ev>: +STM32DMA::~STM32DMA() + 8002b18: b510 push {r4, lr} + 8002b1a: 4604 mov r4, r0 +} + 8002b1c: f44f 615a mov.w r1, #3488 ; 0xda0 + 8002b20: f7ff ffea bl 8002af8 <_ZN8STM32DMAD1Ev> + 8002b24: 4620 mov r0, r4 + 8002b26: f031 fbe6 bl 80342f6 <_ZdlPvj> + 8002b2a: 4620 mov r0, r4 + 8002b2c: bd10 pop {r4, pc} + ... + +08002b30 : + 8002b30: 4b02 ldr r3, [pc, #8] ; (8002b3c ) + 8002b32: 681b ldr r3, [r3, #0] + 8002b34: 6858 ldr r0, [r3, #4] + dma.signalDMAInterrupt(); + 8002b36: 6803 ldr r3, [r0, #0] + 8002b38: 695b ldr r3, [r3, #20] + 8002b3a: 4718 bx r3 + 8002b3c: 2001e734 .word 0x2001e734 + +08002b40 <_ZN8STM32DMAC1Ev>: +STM32DMA::STM32DMA() + 8002b40: b570 push {r4, r5, r6, lr} + 8002b42: 4604 mov r4, r0 + : DMA_Interface(dma_queue), dma_queue(queue_storage, sizeof(queue_storage) / sizeof(queue_storage[0])) + 8002b44: 4b0a ldr r3, [pc, #40] ; (8002b70 <_ZN8STM32DMAC1Ev+0x30>) + 8002b46: 300c adds r0, #12 + * Constructs a DMA Interface object. + * + * @param [in] dmaQueue Reference to the queue of DMA operations. + */ + DMA_Interface(DMA_Queue& dmaQueue) + : queue(dmaQueue), isRunning(false), isAllowed(false) + 8002b48: 2600 movs r6, #0 + 8002b4a: 4625 mov r5, r4 + 8002b4c: 2260 movs r2, #96 ; 0x60 + 8002b4e: 6060 str r0, [r4, #4] + 8002b50: 7226 strb r6, [r4, #8] + 8002b52: 7266 strb r6, [r4, #9] + 8002b54: f845 3b20 str.w r3, [r5], #32 + 8002b58: 4629 mov r1, r5 + 8002b5a: f01e fca7 bl 80214ac <_ZN8touchgfx17LockFreeDMA_QueueC1EPNS_6BlitOpEi> + 8002b5e: f504 635a add.w r3, r4, #3488 ; 0xda0 + */ +struct colortype +{ + /** Default constructor. Creates a black (0) color. */ + colortype() + : color(0) + 8002b62: 60ee str r6, [r5, #12] + 8002b64: 3524 adds r5, #36 ; 0x24 + 8002b66: 42ab cmp r3, r5 + 8002b68: d1fb bne.n 8002b62 <_ZN8STM32DMAC1Ev+0x22> +} + 8002b6a: 4620 mov r0, r4 + 8002b6c: bd70 pop {r4, r5, r6, pc} + 8002b6e: bf00 nop + 8002b70: 08035f40 .word 0x08035f40 + +08002b74 <_ZN8STM32DMA22getChromARTInputFormatEN8touchgfx6Bitmap12BitmapFormatE>: +{ + 8002b74: b508 push {r3, lr} + switch (format) + 8002b76: 290b cmp r1, #11 + 8002b78: d80b bhi.n 8002b92 <_ZN8STM32DMA22getChromARTInputFormatEN8touchgfx6Bitmap12BitmapFormatE+0x1e> + 8002b7a: e8df f001 tbb [pc, r1] + 8002b7e: 0612 .short 0x0612 + 8002b80: 0a0a0a10 .word 0x0a0a0a10 + 8002b84: 0808080a .word 0x0808080a + 8002b88: 0808 .short 0x0808 + 8002b8a: 2001 movs r0, #1 +} + 8002b8c: bd08 pop {r3, pc} + dma2dColorMode = DMA2D_INPUT_L8; + 8002b8e: 2005 movs r0, #5 + break; + 8002b90: e7fc b.n 8002b8c <_ZN8STM32DMA22getChromARTInputFormatEN8touchgfx6Bitmap12BitmapFormatE+0x18> + assert(0 && "Unsupported Format!"); + 8002b92: 4b05 ldr r3, [pc, #20] ; (8002ba8 <_ZN8STM32DMA22getChromARTInputFormatEN8touchgfx6Bitmap12BitmapFormatE+0x34>) + 8002b94: 2165 movs r1, #101 ; 0x65 + 8002b96: 4a05 ldr r2, [pc, #20] ; (8002bac <_ZN8STM32DMA22getChromARTInputFormatEN8touchgfx6Bitmap12BitmapFormatE+0x38>) + 8002b98: 4805 ldr r0, [pc, #20] ; (8002bb0 <_ZN8STM32DMA22getChromARTInputFormatEN8touchgfx6Bitmap12BitmapFormatE+0x3c>) + 8002b9a: f031 fbdb bl 8034354 <__assert_func> + dma2dColorMode = DMA2D_INPUT_ARGB8888; + 8002b9e: 2000 movs r0, #0 + 8002ba0: e7f4 b.n 8002b8c <_ZN8STM32DMA22getChromARTInputFormatEN8touchgfx6Bitmap12BitmapFormatE+0x18> + dma2dColorMode = DMA2D_INPUT_RGB565; + 8002ba2: 2002 movs r0, #2 + return dma2dColorMode; + 8002ba4: e7f2 b.n 8002b8c <_ZN8STM32DMA22getChromARTInputFormatEN8touchgfx6Bitmap12BitmapFormatE+0x18> + 8002ba6: bf00 nop + 8002ba8: 08035db3 .word 0x08035db3 + 8002bac: 08035dce .word 0x08035dce + 8002bb0: 08035e18 .word 0x08035e18 + +08002bb4 <_ZN8STM32DMA23getChromARTOutputFormatEN8touchgfx6Bitmap12BitmapFormatE>: +{ + 8002bb4: b508 push {r3, lr} + switch (format) + 8002bb6: 290a cmp r1, #10 + 8002bb8: d809 bhi.n 8002bce <_ZN8STM32DMA23getChromARTOutputFormatEN8touchgfx6Bitmap12BitmapFormatE+0x1a> + 8002bba: e8df f001 tbb [pc, r1] + 8002bbe: 0610 .short 0x0610 + 8002bc0: 0808080e .word 0x0808080e + 8002bc4: 06060608 .word 0x06060608 + 8002bc8: 06 .byte 0x06 + 8002bc9: 00 .byte 0x00 + 8002bca: 2001 movs r0, #1 +} + 8002bcc: bd08 pop {r3, pc} + assert(0 && "Unsupported Format!"); + 8002bce: 4b05 ldr r3, [pc, #20] ; (8002be4 <_ZN8STM32DMA23getChromARTOutputFormatEN8touchgfx6Bitmap12BitmapFormatE+0x30>) + 8002bd0: 2186 movs r1, #134 ; 0x86 + 8002bd2: 4a05 ldr r2, [pc, #20] ; (8002be8 <_ZN8STM32DMA23getChromARTOutputFormatEN8touchgfx6Bitmap12BitmapFormatE+0x34>) + 8002bd4: 4805 ldr r0, [pc, #20] ; (8002bec <_ZN8STM32DMA23getChromARTOutputFormatEN8touchgfx6Bitmap12BitmapFormatE+0x38>) + 8002bd6: f031 fbbd bl 8034354 <__assert_func> + dma2dColorMode = DMA2D_OUTPUT_ARGB8888; + 8002bda: 2000 movs r0, #0 + 8002bdc: e7f6 b.n 8002bcc <_ZN8STM32DMA23getChromARTOutputFormatEN8touchgfx6Bitmap12BitmapFormatE+0x18> + dma2dColorMode = DMA2D_OUTPUT_RGB565; + 8002bde: 2002 movs r0, #2 + return dma2dColorMode; + 8002be0: e7f4 b.n 8002bcc <_ZN8STM32DMA23getChromARTOutputFormatEN8touchgfx6Bitmap12BitmapFormatE+0x18> + 8002be2: bf00 nop + 8002be4: 08035db3 .word 0x08035db3 + 8002be8: 08035e93 .word 0x08035e93 + 8002bec: 08035e18 .word 0x08035e18 + +08002bf0 <_ZN8STM32DMA13setupDataCopyERKN8touchgfx6BlitOpE>: + * BLIT_OP_COPY_ARGB8888_WITH_ALPHA + * BLIT_OP_COPY_A4 + * BLIT_OP_COPY_A8 + */ +void STM32DMA::setupDataCopy(const BlitOp& blitOp) +{ + 8002bf0: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} + uint32_t dma2dForegroundColorMode = getChromARTInputFormat(static_cast(blitOp.srcFormat)); + 8002bf4: f891 801d ldrb.w r8, [r1, #29] +{ + 8002bf8: 460c mov r4, r1 + 8002bfa: 4607 mov r7, r0 + uint32_t dma2dForegroundColorMode = getChromARTInputFormat(static_cast(blitOp.srcFormat)); + 8002bfc: 4641 mov r1, r8 + 8002bfe: f7ff ffb9 bl 8002b74 <_ZN8STM32DMA22getChromARTInputFormatEN8touchgfx6Bitmap12BitmapFormatE> + uint32_t dma2dBackgroundColorMode = getChromARTInputFormat(static_cast(blitOp.dstFormat)); + 8002c02: f894 901e ldrb.w r9, [r4, #30] + uint32_t dma2dForegroundColorMode = getChromARTInputFormat(static_cast(blitOp.srcFormat)); + 8002c06: 4605 mov r5, r0 + uint32_t dma2dBackgroundColorMode = getChromARTInputFormat(static_cast(blitOp.dstFormat)); + 8002c08: 4638 mov r0, r7 + 8002c0a: 4649 mov r1, r9 + 8002c0c: f7ff ffb2 bl 8002b74 <_ZN8STM32DMA22getChromARTInputFormatEN8touchgfx6Bitmap12BitmapFormatE> + uint32_t dma2dOutputColorMode = getChromARTOutputFormat(static_cast(blitOp.dstFormat)); + 8002c10: 4649 mov r1, r9 + uint32_t dma2dBackgroundColorMode = getChromARTInputFormat(static_cast(blitOp.dstFormat)); + 8002c12: 4606 mov r6, r0 + uint32_t dma2dOutputColorMode = getChromARTOutputFormat(static_cast(blitOp.dstFormat)); + 8002c14: 4638 mov r0, r7 + 8002c16: f7ff ffcd bl 8002bb4 <_ZN8STM32DMA23getChromARTOutputFormatEN8touchgfx6Bitmap12BitmapFormatE> + + /* DMA2D OOR register configuration */ + WRITE_REG(DMA2D->OOR, blitOp.dstLoopStride - blitOp.nSteps); + 8002c1a: 8aa1 ldrh r1, [r4, #20] + 8002c1c: 8b62 ldrh r2, [r4, #26] + 8002c1e: 4b43 ldr r3, [pc, #268] ; (8002d2c <_ZN8STM32DMA13setupDataCopyERKN8touchgfx6BlitOpE+0x13c>) + 8002c20: 1a52 subs r2, r2, r1 + 8002c22: 641a str r2, [r3, #64] ; 0x40 + + /* DMA2D BGOR register configuration */ + WRITE_REG(DMA2D->BGOR, blitOp.dstLoopStride - blitOp.nSteps); + 8002c24: 619a str r2, [r3, #24] + + /* DMA2D FGOR register configuration */ + WRITE_REG(DMA2D->FGOR, blitOp.srcLoopStride - blitOp.nSteps); + 8002c26: 8b22 ldrh r2, [r4, #24] + 8002c28: 1a52 subs r2, r2, r1 + 8002c2a: 611a str r2, [r3, #16] + + /* DMA2D OPFCCR register configuration */ + WRITE_REG(DMA2D->OPFCCR, dma2dOutputColorMode); + + /* Configure DMA2D data size */ + WRITE_REG(DMA2D->NLR, (blitOp.nLoops | (blitOp.nSteps << DMA2D_NLR_PL_Pos))); + 8002c2c: 8ae2 ldrh r2, [r4, #22] + WRITE_REG(DMA2D->OPFCCR, dma2dOutputColorMode); + 8002c2e: 6358 str r0, [r3, #52] ; 0x34 + WRITE_REG(DMA2D->NLR, (blitOp.nLoops | (blitOp.nSteps << DMA2D_NLR_PL_Pos))); + 8002c30: ea42 4201 orr.w r2, r2, r1, lsl #16 + + /* Configure DMA2D destination address */ + WRITE_REG(DMA2D->OMAR, reinterpret_cast(blitOp.pDst)); + 8002c34: 6920 ldr r0, [r4, #16] + WRITE_REG(DMA2D->NLR, (blitOp.nLoops | (blitOp.nSteps << DMA2D_NLR_PL_Pos))); + 8002c36: 645a str r2, [r3, #68] ; 0x44 + + /* Configure DMA2D source address */ + WRITE_REG(DMA2D->FGMAR, reinterpret_cast(blitOp.pSrc)); + 8002c38: 6862 ldr r2, [r4, #4] + WRITE_REG(DMA2D->OMAR, reinterpret_cast(blitOp.pDst)); + 8002c3a: 63d8 str r0, [r3, #60] ; 0x3c + WRITE_REG(DMA2D->FGMAR, reinterpret_cast(blitOp.pSrc)); + 8002c3c: 60da str r2, [r3, #12] + + switch (blitOp.operation) + 8002c3e: 6827 ldr r7, [r4, #0] + 8002c40: 2f80 cmp r7, #128 ; 0x80 + 8002c42: d028 beq.n 8002c96 <_ZN8STM32DMA13setupDataCopyERKN8touchgfx6BlitOpE+0xa6> + 8002c44: 7f22 ldrb r2, [r4, #28] + 8002c46: d80f bhi.n 8002c68 <_ZN8STM32DMA13setupDataCopyERKN8touchgfx6BlitOpE+0x78> + 8002c48: 2f20 cmp r7, #32 + 8002c4a: d065 beq.n 8002d18 <_ZN8STM32DMA13setupDataCopyERKN8touchgfx6BlitOpE+0x128> + 8002c4c: 2f40 cmp r7, #64 ; 0x40 + 8002c4e: d063 beq.n 8002d18 <_ZN8STM32DMA13setupDataCopyERKN8touchgfx6BlitOpE+0x128> + 8002c50: 2f04 cmp r7, #4 + 8002c52: d01a beq.n 8002c8a <_ZN8STM32DMA13setupDataCopyERKN8touchgfx6BlitOpE+0x9a> + /* Set DMA2D mode */ + WRITE_REG(DMA2D->CR, DMA2D_M2M_BLEND | DMA2D_IT_TC | DMA2D_CR_START); + break; + default: /* BLIT_OP_COPY */ + /* Set DMA2D color mode and alpha mode */ + WRITE_REG(DMA2D->FGPFCCR, dma2dForegroundColorMode | (DMA2D_COMBINE_ALPHA << DMA2D_FGPFCCR_AM_Pos) | (blitOp.alpha << 24)); + 8002c54: ea45 6502 orr.w r5, r5, r2, lsl #24 + 8002c58: 4b34 ldr r3, [pc, #208] ; (8002d2c <_ZN8STM32DMA13setupDataCopyERKN8touchgfx6BlitOpE+0x13c>) + + /* Perform pixel-format-conversion (PFC) If Bitmap format is not same format as framebuffer format */ + if (blitOp.srcFormat != blitOp.dstFormat) + 8002c5a: 45c8 cmp r8, r9 + WRITE_REG(DMA2D->FGPFCCR, dma2dForegroundColorMode | (DMA2D_COMBINE_ALPHA << DMA2D_FGPFCCR_AM_Pos) | (blitOp.alpha << 24)); + 8002c5c: f445 3500 orr.w r5, r5, #131072 ; 0x20000 + 8002c60: 61dd str r5, [r3, #28] + if (blitOp.srcFormat != blitOp.dstFormat) + 8002c62: d05f beq.n 8002d24 <_ZN8STM32DMA13setupDataCopyERKN8touchgfx6BlitOpE+0x134> + { + /* Start DMA2D : PFC Mode */ + WRITE_REG(DMA2D->CR, DMA2D_M2M_PFC | DMA2D_IT_TC | DMA2D_CR_START); + 8002c64: 4a32 ldr r2, [pc, #200] ; (8002d30 <_ZN8STM32DMA13setupDataCopyERKN8touchgfx6BlitOpE+0x140>) + 8002c66: e044 b.n 8002cf2 <_ZN8STM32DMA13setupDataCopyERKN8touchgfx6BlitOpE+0x102> + switch (blitOp.operation) + 8002c68: f5b7 7f80 cmp.w r7, #256 ; 0x100 + 8002c6c: d004 beq.n 8002c78 <_ZN8STM32DMA13setupDataCopyERKN8touchgfx6BlitOpE+0x88> + 8002c6e: f5b7 7f00 cmp.w r7, #512 ; 0x200 + 8002c72: d1ef bne.n 8002c54 <_ZN8STM32DMA13setupDataCopyERKN8touchgfx6BlitOpE+0x64> + WRITE_REG(DMA2D->FGPFCCR, DMA2D_INPUT_A8 | (DMA2D_COMBINE_ALPHA << DMA2D_FGPFCCR_AM_Pos) | (blitOp.alpha << 24)); + 8002c74: 492f ldr r1, [pc, #188] ; (8002d34 <_ZN8STM32DMA13setupDataCopyERKN8touchgfx6BlitOpE+0x144>) + 8002c76: e000 b.n 8002c7a <_ZN8STM32DMA13setupDataCopyERKN8touchgfx6BlitOpE+0x8a> + WRITE_REG(DMA2D->FGPFCCR, DMA2D_INPUT_A4 | (DMA2D_COMBINE_ALPHA << DMA2D_FGPFCCR_AM_Pos) | (blitOp.alpha << 24)); + 8002c78: 492f ldr r1, [pc, #188] ; (8002d38 <_ZN8STM32DMA13setupDataCopyERKN8touchgfx6BlitOpE+0x148>) + WRITE_REG(DMA2D->FGPFCCR, DMA2D_INPUT_A8 | (DMA2D_COMBINE_ALPHA << DMA2D_FGPFCCR_AM_Pos) | (blitOp.alpha << 24)); + 8002c7a: ea41 6202 orr.w r2, r1, r2, lsl #24 + 8002c7e: 61da str r2, [r3, #28] + * + * @return The result of the operation. + */ + operator uint32_t() const + { + return color; + 8002c80: 68e2 ldr r2, [r4, #12] + WRITE_REG(DMA2D->FGCOLR, blitOp.color); + 8002c82: 621a str r2, [r3, #32] + WRITE_REG(DMA2D->BGPFCCR, dma2dBackgroundColorMode | (DMA2D_NO_MODIF_ALPHA << DMA2D_BGPFCCR_AM_Pos)); + 8002c84: 625e str r6, [r3, #36] ; 0x24 + WRITE_REG(DMA2D->BGMAR, reinterpret_cast(blitOp.pDst)); + 8002c86: 6158 str r0, [r3, #20] + 8002c88: e032 b.n 8002cf0 <_ZN8STM32DMA13setupDataCopyERKN8touchgfx6BlitOpE+0x100> + WRITE_REG(DMA2D->FGPFCCR, dma2dForegroundColorMode | (DMA2D_COMBINE_ALPHA << DMA2D_FGPFCCR_AM_Pos) | (blitOp.alpha << 24)); + 8002c8a: ea45 6202 orr.w r2, r5, r2, lsl #24 + 8002c8e: f442 3200 orr.w r2, r2, #131072 ; 0x20000 + WRITE_REG(DMA2D->FGPFCCR, dma2dForegroundColorMode | (DMA2D_COMBINE_ALPHA << DMA2D_FGPFCCR_AM_Pos) | (blitOp.alpha << 24)); + 8002c92: 61da str r2, [r3, #28] + 8002c94: e7f6 b.n 8002c84 <_ZN8STM32DMA13setupDataCopyERKN8touchgfx6BlitOpE+0x94> + const clutData_t* const palette = reinterpret_cast(blitOp.pClut); + 8002c96: 68a7 ldr r7, [r4, #8] + WRITE_REG(DMA2D->FGCMAR, reinterpret_cast(&palette->data)); + 8002c98: 1d3a adds r2, r7, #4 + 8002c9a: 62da str r2, [r3, #44] ; 0x2c + WRITE_REG(DMA2D->FGPFCCR, dma2dForegroundColorMode | (DMA2D_COMBINE_ALPHA << DMA2D_FGPFCCR_AM_Pos) | (blitOp.alpha << 24)); + 8002c9c: 7f21 ldrb r1, [r4, #28] + switch ((Bitmap::ClutFormat)palette->format) + 8002c9e: 783a ldrb r2, [r7, #0] + WRITE_REG(DMA2D->FGPFCCR, dma2dForegroundColorMode | (DMA2D_COMBINE_ALPHA << DMA2D_FGPFCCR_AM_Pos) | (blitOp.alpha << 24)); + 8002ca0: ea45 6501 orr.w r5, r5, r1, lsl #24 + 8002ca4: f445 3500 orr.w r5, r5, #131072 ; 0x20000 + 8002ca8: 61dd str r5, [r3, #28] + WRITE_REG(DMA2D->BGPFCCR, dma2dBackgroundColorMode | (DMA2D_NO_MODIF_ALPHA << DMA2D_BGPFCCR_AM_Pos)); + 8002caa: 625e str r6, [r3, #36] ; 0x24 + WRITE_REG(DMA2D->BGMAR, reinterpret_cast(blitOp.pDst)); + 8002cac: 6158 str r0, [r3, #20] + switch ((Bitmap::ClutFormat)palette->format) + 8002cae: b142 cbz r2, 8002cc2 <_ZN8STM32DMA13setupDataCopyERKN8touchgfx6BlitOpE+0xd2> + 8002cb0: 2a01 cmp r2, #1 + 8002cb2: d021 beq.n 8002cf8 <_ZN8STM32DMA13setupDataCopyERKN8touchgfx6BlitOpE+0x108> + assert(0 && "Unsupported format"); + 8002cb4: 4b21 ldr r3, [pc, #132] ; (8002d3c <_ZN8STM32DMA13setupDataCopyERKN8touchgfx6BlitOpE+0x14c>) + 8002cb6: f44f 7188 mov.w r1, #272 ; 0x110 + 8002cba: 4a21 ldr r2, [pc, #132] ; (8002d40 <_ZN8STM32DMA13setupDataCopyERKN8touchgfx6BlitOpE+0x150>) + 8002cbc: 4821 ldr r0, [pc, #132] ; (8002d44 <_ZN8STM32DMA13setupDataCopyERKN8touchgfx6BlitOpE+0x154>) + 8002cbe: f031 fb49 bl 8034354 <__assert_func> + MODIFY_REG(DMA2D->FGPFCCR, (DMA2D_FGPFCCR_CS | DMA2D_FGPFCCR_CCM), (((palette->size - 1) << DMA2D_FGPFCCR_CS_Pos) | (DMA2D_CCM_ARGB8888 << DMA2D_FGPFCCR_CCM_Pos))); + 8002cc2: 69da ldr r2, [r3, #28] + 8002cc4: 8879 ldrh r1, [r7, #2] + 8002cc6: f422 427f bic.w r2, r2, #65280 ; 0xff00 + 8002cca: 3901 subs r1, #1 + 8002ccc: f022 0210 bic.w r2, r2, #16 + 8002cd0: ea42 2201 orr.w r2, r2, r1, lsl #8 + bool blend = true; + 8002cd4: 2101 movs r1, #1 + MODIFY_REG(DMA2D->FGPFCCR, (DMA2D_FGPFCCR_CS | DMA2D_FGPFCCR_CCM), (((palette->size - 1) << DMA2D_FGPFCCR_CS_Pos) | (DMA2D_CCM_ARGB8888 << DMA2D_FGPFCCR_CCM_Pos))); + 8002cd6: 61da str r2, [r3, #28] + SET_BIT(DMA2D->FGPFCCR, DMA2D_FGPFCCR_START); + 8002cd8: 4b14 ldr r3, [pc, #80] ; (8002d2c <_ZN8STM32DMA13setupDataCopyERKN8touchgfx6BlitOpE+0x13c>) + 8002cda: 69da ldr r2, [r3, #28] + 8002cdc: f042 0220 orr.w r2, r2, #32 + 8002ce0: 61da str r2, [r3, #28] + while ((READ_REG(DMA2D->FGPFCCR) & DMA2D_FGPFCCR_START) != 0U) + 8002ce2: 69da ldr r2, [r3, #28] + 8002ce4: 0692 lsls r2, r2, #26 + 8002ce6: d4fc bmi.n 8002ce2 <_ZN8STM32DMA13setupDataCopyERKN8touchgfx6BlitOpE+0xf2> + DMA2D->IFCR = (DMA2D_FLAG_CTC); + 8002ce8: 2210 movs r2, #16 + 8002cea: 609a str r2, [r3, #8] + if (blend) + 8002cec: 2900 cmp r1, #0 + 8002cee: d0b9 beq.n 8002c64 <_ZN8STM32DMA13setupDataCopyERKN8touchgfx6BlitOpE+0x74> + WRITE_REG(DMA2D->CR, DMA2D_M2M_BLEND | DMA2D_IT_TC | DMA2D_CR_START); + 8002cf0: 4a15 ldr r2, [pc, #84] ; (8002d48 <_ZN8STM32DMA13setupDataCopyERKN8touchgfx6BlitOpE+0x158>) + } + else + { + /* Start DMA2D : M2M Mode */ + WRITE_REG(DMA2D->CR, DMA2D_M2M | DMA2D_IT_TC | DMA2D_CR_START); + 8002cf2: 601a str r2, [r3, #0] + } + break; + } +} + 8002cf4: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} + MODIFY_REG(DMA2D->FGPFCCR, (DMA2D_FGPFCCR_CS | DMA2D_FGPFCCR_CCM), (((palette->size - 1) << DMA2D_FGPFCCR_CS_Pos) | (DMA2D_CCM_RGB888 << DMA2D_FGPFCCR_CCM_Pos))); + 8002cf8: 69da ldr r2, [r3, #28] + if (blitOp.alpha == 255) + 8002cfa: 39ff subs r1, #255 ; 0xff + MODIFY_REG(DMA2D->FGPFCCR, (DMA2D_FGPFCCR_CS | DMA2D_FGPFCCR_CCM), (((palette->size - 1) << DMA2D_FGPFCCR_CS_Pos) | (DMA2D_CCM_RGB888 << DMA2D_FGPFCCR_CCM_Pos))); + 8002cfc: 8878 ldrh r0, [r7, #2] + 8002cfe: f422 427f bic.w r2, r2, #65280 ; 0xff00 + if (blitOp.alpha == 255) + 8002d02: bf18 it ne + 8002d04: 2101 movne r1, #1 + MODIFY_REG(DMA2D->FGPFCCR, (DMA2D_FGPFCCR_CS | DMA2D_FGPFCCR_CCM), (((palette->size - 1) << DMA2D_FGPFCCR_CS_Pos) | (DMA2D_CCM_RGB888 << DMA2D_FGPFCCR_CCM_Pos))); + 8002d06: 3801 subs r0, #1 + 8002d08: f022 0210 bic.w r2, r2, #16 + 8002d0c: ea42 2200 orr.w r2, r2, r0, lsl #8 + 8002d10: f042 0210 orr.w r2, r2, #16 + 8002d14: 61da str r2, [r3, #28] + break; + 8002d16: e7df b.n 8002cd8 <_ZN8STM32DMA13setupDataCopyERKN8touchgfx6BlitOpE+0xe8> + WRITE_REG(DMA2D->FGPFCCR, dma2dForegroundColorMode | (DMA2D_COMBINE_ALPHA << DMA2D_FGPFCCR_AM_Pos) | (blitOp.alpha << 24)); + 8002d18: ea45 6202 orr.w r2, r5, r2, lsl #24 + 8002d1c: 4b03 ldr r3, [pc, #12] ; (8002d2c <_ZN8STM32DMA13setupDataCopyERKN8touchgfx6BlitOpE+0x13c>) + 8002d1e: f442 3200 orr.w r2, r2, #131072 ; 0x20000 + 8002d22: e7b6 b.n 8002c92 <_ZN8STM32DMA13setupDataCopyERKN8touchgfx6BlitOpE+0xa2> + WRITE_REG(DMA2D->CR, DMA2D_M2M | DMA2D_IT_TC | DMA2D_CR_START); + 8002d24: f240 2201 movw r2, #513 ; 0x201 + 8002d28: e7e3 b.n 8002cf2 <_ZN8STM32DMA13setupDataCopyERKN8touchgfx6BlitOpE+0x102> + 8002d2a: bf00 nop + 8002d2c: 4002b000 .word 0x4002b000 + 8002d30: 00010201 .word 0x00010201 + 8002d34: 00020009 .word 0x00020009 + 8002d38: 0002000a .word 0x0002000a + 8002d3c: 08035ede .word 0x08035ede + 8002d40: 08035ef8 .word 0x08035ef8 + 8002d44: 08035e18 .word 0x08035e18 + 8002d48: 00020201 .word 0x00020201 + +08002d4c <_ZN8STM32DMA13setupDataFillERKN8touchgfx6BlitOpE>: + * void STM32DMA::setupDataFill(const BlitOp& blitOp) handles blit operation of + * BLIT_OP_FILL + * BLIT_OP_FILL_WITH_ALPHA + */ +void STM32DMA::setupDataFill(const BlitOp& blitOp) +{ + 8002d4c: b538 push {r3, r4, r5, lr} + 8002d4e: 460c mov r4, r1 + uint32_t dma2dOutputColorMode = getChromARTOutputFormat(static_cast(blitOp.dstFormat)); + 8002d50: 7f89 ldrb r1, [r1, #30] + 8002d52: f7ff ff2f bl 8002bb4 <_ZN8STM32DMA23getChromARTOutputFormatEN8touchgfx6Bitmap12BitmapFormatE> + + /* DMA2D OPFCCR register configuration */ + WRITE_REG(DMA2D->OPFCCR, dma2dOutputColorMode); + 8002d56: 4b17 ldr r3, [pc, #92] ; (8002db4 <_ZN8STM32DMA13setupDataFillERKN8touchgfx6BlitOpE+0x68>) + + /* Configure DMA2D data size */ + WRITE_REG(DMA2D->NLR, (blitOp.nLoops | (blitOp.nSteps << DMA2D_NLR_PL_Pos))); + 8002d58: 8aa5 ldrh r5, [r4, #20] + 8002d5a: 8ae2 ldrh r2, [r4, #22] + WRITE_REG(DMA2D->OPFCCR, dma2dOutputColorMode); + 8002d5c: 6358 str r0, [r3, #52] ; 0x34 + WRITE_REG(DMA2D->NLR, (blitOp.nLoops | (blitOp.nSteps << DMA2D_NLR_PL_Pos))); + 8002d5e: ea42 4205 orr.w r2, r2, r5, lsl #16 + + /* Configure DMA2D destination address */ + WRITE_REG(DMA2D->OMAR, reinterpret_cast(blitOp.pDst)); + 8002d62: 6921 ldr r1, [r4, #16] + WRITE_REG(DMA2D->NLR, (blitOp.nLoops | (blitOp.nSteps << DMA2D_NLR_PL_Pos))); + 8002d64: 645a str r2, [r3, #68] ; 0x44 + + /* DMA2D OOR register configuration */ + WRITE_REG(DMA2D->OOR, blitOp.dstLoopStride - blitOp.nSteps); + 8002d66: 8b62 ldrh r2, [r4, #26] + WRITE_REG(DMA2D->OMAR, reinterpret_cast(blitOp.pDst)); + 8002d68: 63d9 str r1, [r3, #60] ; 0x3c + WRITE_REG(DMA2D->OOR, blitOp.dstLoopStride - blitOp.nSteps); + 8002d6a: 1b52 subs r2, r2, r5 + 8002d6c: 641a str r2, [r3, #64] ; 0x40 + + if (blitOp.operation == BLIT_OP_FILL_WITH_ALPHA) + 8002d6e: 6825 ldr r5, [r4, #0] + 8002d70: 2d08 cmp r5, #8 + 8002d72: d10e bne.n 8002d92 <_ZN8STM32DMA13setupDataFillERKN8touchgfx6BlitOpE+0x46> + { + /* DMA2D BGOR register configuration */ + WRITE_REG(DMA2D->BGOR, blitOp.dstLoopStride - blitOp.nSteps); + 8002d74: 619a str r2, [r3, #24] + + /* DMA2D FGOR register configuration */ + WRITE_REG(DMA2D->FGOR, blitOp.dstLoopStride - blitOp.nSteps); + 8002d76: 611a str r2, [r3, #16] + + /* Write DMA2D BGPFCCR register */ + WRITE_REG(DMA2D->BGPFCCR, dma2dOutputColorMode | (DMA2D_NO_MODIF_ALPHA << DMA2D_BGPFCCR_AM_Pos)); + 8002d78: 6258 str r0, [r3, #36] ; 0x24 + + /* Write DMA2D FGPFCCR register */ + WRITE_REG(DMA2D->FGPFCCR, DMA2D_INPUT_A8 | (DMA2D_REPLACE_ALPHA << DMA2D_FGPFCCR_AM_Pos) | ((blitOp.alpha << 24) & DMA2D_FGPFCCR_ALPHA)); + 8002d7a: 4a0f ldr r2, [pc, #60] ; (8002db8 <_ZN8STM32DMA13setupDataFillERKN8touchgfx6BlitOpE+0x6c>) + 8002d7c: 7f20 ldrb r0, [r4, #28] + 8002d7e: ea42 6200 orr.w r2, r2, r0, lsl #24 + 8002d82: 61da str r2, [r3, #28] + 8002d84: 68e2 ldr r2, [r4, #12] + + /* DMA2D FGCOLR register configuration */ + WRITE_REG(DMA2D->FGCOLR, blitOp.color); + 8002d86: 621a str r2, [r3, #32] + + /* Configure DMA2D source address */ + WRITE_REG(DMA2D->FGMAR, reinterpret_cast(blitOp.pDst)); + + /* Enable the Peripheral and Enable the transfer complete interrupt */ + WRITE_REG(DMA2D->CR, (DMA2D_IT_TC | DMA2D_CR_START | DMA2D_M2M_BLEND)); + 8002d88: 4a0c ldr r2, [pc, #48] ; (8002dbc <_ZN8STM32DMA13setupDataFillERKN8touchgfx6BlitOpE+0x70>) + WRITE_REG(DMA2D->BGMAR, reinterpret_cast(blitOp.pDst)); + 8002d8a: 6159 str r1, [r3, #20] + WRITE_REG(DMA2D->FGMAR, reinterpret_cast(blitOp.pDst)); + 8002d8c: 60d9 str r1, [r3, #12] + + /* Set color */ + WRITE_REG(DMA2D->OCOLR, ((blitOp.color >> 8) & 0xF800) | ((blitOp.color >> 5) & 0x07E0) | ((blitOp.color >> 3) & 0x001F)); + + /* Enable the Peripheral and Enable the transfer complete interrupt */ + WRITE_REG(DMA2D->CR, (DMA2D_IT_TC | DMA2D_CR_START | DMA2D_R2M)); + 8002d8e: 601a str r2, [r3, #0] + } +} + 8002d90: bd38 pop {r3, r4, r5, pc} + WRITE_REG(DMA2D->FGOR, 0); + 8002d92: 2200 movs r2, #0 + WRITE_REG(DMA2D->FGPFCCR, dma2dOutputColorMode | (DMA2D_NO_MODIF_ALPHA << DMA2D_FGPFCCR_AM_Pos)); + 8002d94: 61d8 str r0, [r3, #28] + WRITE_REG(DMA2D->FGOR, 0); + 8002d96: 611a str r2, [r3, #16] + 8002d98: 68e1 ldr r1, [r4, #12] + WRITE_REG(DMA2D->OCOLR, ((blitOp.color >> 8) & 0xF800) | ((blitOp.color >> 5) & 0x07E0) | ((blitOp.color >> 3) & 0x001F)); + 8002d9a: 0a0a lsrs r2, r1, #8 + 8002d9c: 0948 lsrs r0, r1, #5 + 8002d9e: f3c1 01c4 ubfx r1, r1, #3, #5 + 8002da2: f402 4278 and.w r2, r2, #63488 ; 0xf800 + 8002da6: f400 60fc and.w r0, r0, #2016 ; 0x7e0 + 8002daa: 4302 orrs r2, r0 + 8002dac: 430a orrs r2, r1 + 8002dae: 639a str r2, [r3, #56] ; 0x38 + WRITE_REG(DMA2D->CR, (DMA2D_IT_TC | DMA2D_CR_START | DMA2D_R2M)); + 8002db0: 4a03 ldr r2, [pc, #12] ; (8002dc0 <_ZN8STM32DMA13setupDataFillERKN8touchgfx6BlitOpE+0x74>) + 8002db2: e7ec b.n 8002d8e <_ZN8STM32DMA13setupDataFillERKN8touchgfx6BlitOpE+0x42> + 8002db4: 4002b000 .word 0x4002b000 + 8002db8: 00010009 .word 0x00010009 + 8002dbc: 00020201 .word 0x00020201 + 8002dc0: 00030201 .word 0x00030201 + +08002dc4 <_ZNK20SoftwareMJPEGDecoder21getCurrentFrameNumberEv>: + + virtual bool decodeThumbnail(uint32_t frameno, uint8_t* buffer, uint16_t width, uint16_t height); + + virtual void gotoFrame(uint32_t frameno); + + virtual uint32_t getCurrentFrameNumber() const { return frameNumber; } + 8002dc4: 6940 ldr r0, [r0, #20] + 8002dc6: 4770 bx lr + +08002dc8 <_ZN20SoftwareMJPEGDecoder12getLastErrorEv>: + + virtual void getVideoInfo(touchgfx::VideoInformation* data); + + void setAVIFileBuffer(uint8_t* buffer, uint32_t size) { aviBuffer = buffer, aviBufferLength = size; } + + virtual AVIErrors getLastError() { return lastError; } + 8002dc8: f890 0044 ldrb.w r0, [r0, #68] ; 0x44 + 8002dcc: 4770 bx lr + +08002dce <_ZN20SoftwareMJPEGDecoder8hasVideoEv>: + readVideoHeader(); +} + +bool SoftwareMJPEGDecoder::hasVideo() +{ + return (reader != 0) || (movieData != 0); + 8002dce: 6b03 ldr r3, [r0, #48] ; 0x30 + 8002dd0: b923 cbnz r3, 8002ddc <_ZN20SoftwareMJPEGDecoder8hasVideoEv+0xe> + 8002dd2: 6ac0 ldr r0, [r0, #44] ; 0x2c + 8002dd4: 3800 subs r0, #0 + 8002dd6: bf18 it ne + 8002dd8: 2001 movne r0, #1 + 8002dda: 4770 bx lr + 8002ddc: 2001 movs r0, #1 +} + 8002dde: 4770 bx lr + +08002de0 <_ZN20SoftwareMJPEGDecoder17getNumberOfFramesEv>: +} + +uint32_t SoftwareMJPEGDecoder::getNumberOfFrames() +{ + return videoInfo.number_of_frames; +} + 8002de0: 6880 ldr r0, [r0, #8] + 8002de2: 4770 bx lr + +08002de4 <_ZN20SoftwareMJPEGDecoder12getVideoInfoEPN8touchgfx16VideoInformationE>: + +void SoftwareMJPEGDecoder::getVideoInfo(touchgfx::VideoInformation* data) +{ + *data = videoInfo; + 8002de4: 3004 adds r0, #4 +{ + 8002de6: b510 push {r4, lr} + 8002de8: 460c mov r4, r1 + *data = videoInfo; + 8002dea: c80f ldmia r0, {r0, r1, r2, r3} + 8002dec: e884 000f stmia.w r4, {r0, r1, r2, r3} +#if VIDEO_DECODE_FORMAT == RGB565 || VIDEO_DECODE_FORMAT == RGB888 || VIDEO_DECODE_FORMAT == ARGB8888 +#else + data->frame_width = 0; + data->frame_height = 0; +#endif +} + 8002df0: bd10 pop {r4, pc} + +08002df2 <_ZN20SoftwareMJPEGDecoderD1Ev>: +class SoftwareMJPEGDecoder : public MJPEGDecoder + 8002df2: 4770 bx lr + +08002df4 <_ZN20SoftwareMJPEGDecoder15decodeThumbnailEmPhtt>: +{ + 8002df4: b508 push {r3, lr} + assert(0); + 8002df6: 4a03 ldr r2, [pc, #12] ; (8002e04 <_ZN20SoftwareMJPEGDecoder15decodeThumbnailEmPhtt+0x10>) + 8002df8: f240 2112 movw r1, #530 ; 0x212 + 8002dfc: 4b02 ldr r3, [pc, #8] ; (8002e08 <_ZN20SoftwareMJPEGDecoder15decodeThumbnailEmPhtt+0x14>) + 8002dfe: 4803 ldr r0, [pc, #12] ; (8002e0c <_ZN20SoftwareMJPEGDecoder15decodeThumbnailEmPhtt+0x18>) + 8002e00: f031 faa8 bl 8034354 <__assert_func> + 8002e04: 08035f88 .word 0x08035f88 + 8002e08: 0803a8bc .word 0x0803a8bc + 8002e0c: 08035fe3 .word 0x08035fe3 + +08002e10 <_ZN20SoftwareMJPEGDecoderD0Ev>: + 8002e10: b510 push {r4, lr} + 8002e12: 4604 mov r4, r0 + 8002e14: 2148 movs r1, #72 ; 0x48 + 8002e16: f031 fa6e bl 80342f6 <_ZdlPvj> + 8002e1a: 4620 mov r0, r4 + 8002e1c: bd10 pop {r4, pc} + ... + +08002e20 <_ZN20SoftwareMJPEGDecoder16decodeMJPEGFrameEPKhmPhttm.part.0>: +void SoftwareMJPEGDecoder::decodeMJPEGFrame(const uint8_t* const mjpgdata, const uint32_t length, uint8_t* outputBuffer, uint16_t bufferWidth, uint16_t bufferHeight, uint32_t bufferStride) + 8002e20: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} + 8002e24: 461c mov r4, r3 + if (outputBuffer && lineBuffer) //only decode if buffers are assigned. + 8002e26: 6b43 ldr r3, [r0, #52] ; 0x34 +void SoftwareMJPEGDecoder::decodeMJPEGFrame(const uint8_t* const mjpgdata, const uint32_t length, uint8_t* outputBuffer, uint16_t bufferWidth, uint16_t bufferHeight, uint32_t bufferStride) + 8002e28: f5ad 7d1f sub.w sp, sp, #636 ; 0x27c + 8002e2c: 4605 mov r5, r0 + 8002e2e: 460e mov r6, r1 + 8002e30: 4617 mov r7, r2 + if (outputBuffer && lineBuffer) //only decode if buffers are assigned. + 8002e32: 2b00 cmp r3, #0 + 8002e34: d037 beq.n 8002ea6 <_ZN20SoftwareMJPEGDecoder16decodeMJPEGFrameEPKhmPhttm.part.0+0x86> + JSAMPROW lines[2] = { lineBuffer, 0 }; /* Output row buffer */ + 8002e36: 2200 movs r2, #0 + cinfo.err = jpeg_std_error(&jerr); + 8002e38: a803 add r0, sp, #12 + const uint16_t pix = ((RGB_matrix->R & 0xF8) << 8) | ((RGB_matrix->G & 0xFC) << 3) | ((RGB_matrix->B & 0xF8) >> 3); + 8002e3a: f8df 90a8 ldr.w r9, [pc, #168] ; 8002ee4 <_ZN20SoftwareMJPEGDecoder16decodeMJPEGFrameEPKhmPhttm.part.0+0xc4> + JSAMPROW lines[2] = { lineBuffer, 0 }; /* Output row buffer */ + 8002e3e: e9cd 3201 strd r3, r2, [sp, #4] + cinfo.err = jpeg_std_error(&jerr); + 8002e42: f00e fd51 bl 80118e8 + jpeg_create_decompress(&cinfo); + 8002e46: f44f 72f4 mov.w r2, #488 ; 0x1e8 + 8002e4a: 2150 movs r1, #80 ; 0x50 + cinfo.err = jpeg_std_error(&jerr); + 8002e4c: 9024 str r0, [sp, #144] ; 0x90 + jpeg_create_decompress(&cinfo); + 8002e4e: a824 add r0, sp, #144 ; 0x90 + 8002e50: f008 fc99 bl 800b786 + jpeg_mem_src(&cinfo, const_cast(mjpgdata), length); + 8002e54: 463a mov r2, r7 + 8002e56: 4631 mov r1, r6 + 8002e58: a824 add r0, sp, #144 ; 0x90 + 8002e5a: f009 fc15 bl 800c688 + jpeg_read_header(&cinfo, TRUE); + 8002e5e: 2101 movs r1, #1 + 8002e60: a824 add r0, sp, #144 ; 0x90 + 8002e62: f008 fd93 bl 800b98c + cinfo.dct_method = JDCT_FLOAT; + 8002e66: 2302 movs r3, #2 + jpeg_start_decompress(&cinfo); + 8002e68: a824 add r0, sp, #144 ; 0x90 + cinfo.dct_method = JDCT_FLOAT; + 8002e6a: f88d 30d8 strb.w r3, [sp, #216] ; 0xd8 + jpeg_start_decompress(&cinfo); + 8002e6e: f008 fe31 bl 800bad4 + const uint32_t width = MIN(bufferWidth, cinfo.image_width); + 8002e72: f8bd 3298 ldrh.w r3, [sp, #664] ; 0x298 + 8002e76: 9a2b ldr r2, [sp, #172] ; 0xac + const uint32_t height = MIN(bufferHeight, cinfo.output_height); + 8002e78: f8bd 629c ldrh.w r6, [sp, #668] ; 0x29c + const uint32_t width = MIN(bufferWidth, cinfo.image_width); + 8002e7c: 4293 cmp r3, r2 + lineptr = (uint16_t*)((uint8_t*)lineptr + bufferStride - width * 2); //move to next line + 8002e7e: 9fa8 ldr r7, [sp, #672] ; 0x2a0 + const uint32_t width = MIN(bufferWidth, cinfo.image_width); + 8002e80: bf28 it cs + 8002e82: 4613 movcs r3, r2 + const uint32_t height = MIN(bufferHeight, cinfo.output_height); + 8002e84: 9a41 ldr r2, [sp, #260] ; 0x104 + 8002e86: 4296 cmp r6, r2 + JPEG_RGB* const RGB_end = RGB_matrix + width; + 8002e88: eb03 0843 add.w r8, r3, r3, lsl #1 + lineptr = (uint16_t*)((uint8_t*)lineptr + bufferStride - width * 2); //move to next line + 8002e8c: eba7 0743 sub.w r7, r7, r3, lsl #1 + const uint32_t height = MIN(bufferHeight, cinfo.output_height); + 8002e90: bf28 it cs + 8002e92: 4616 movcs r6, r2 + while (cinfo.output_scanline < height) + 8002e94: 9b47 ldr r3, [sp, #284] ; 0x11c + 8002e96: 429e cmp r6, r3 + 8002e98: d809 bhi.n 8002eae <_ZN20SoftwareMJPEGDecoder16decodeMJPEGFrameEPKhmPhttm.part.0+0x8e> + jpeg_finish_decompress(&cinfo); + 8002e9a: a824 add r0, sp, #144 ; 0x90 + 8002e9c: f008 fd98 bl 800b9d0 + jpeg_destroy_decompress(&cinfo); + 8002ea0: a824 add r0, sp, #144 ; 0x90 + 8002ea2: f008 fcbd bl 800b820 +} + 8002ea6: f50d 7d1f add.w sp, sp, #636 ; 0x27c + 8002eaa: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} + (void)jpeg_read_scanlines(&cinfo, lines, 1); + 8002eae: 2201 movs r2, #1 + 8002eb0: a901 add r1, sp, #4 + 8002eb2: a824 add r0, sp, #144 ; 0x90 + 8002eb4: f008 fe57 bl 800bb66 + JPEG_RGB* RGB_matrix = (JPEG_RGB*)lineBuffer; + 8002eb8: 6b6b ldr r3, [r5, #52] ; 0x34 + JPEG_RGB* const RGB_end = RGB_matrix + width; + 8002eba: eb03 0008 add.w r0, r3, r8 + while (RGB_matrix < RGB_end) + 8002ebe: 4298 cmp r0, r3 + 8002ec0: d801 bhi.n 8002ec6 <_ZN20SoftwareMJPEGDecoder16decodeMJPEGFrameEPKhmPhttm.part.0+0xa6> + lineptr = (uint16_t*)((uint8_t*)lineptr + bufferStride - width * 2); //move to next line + 8002ec2: 443c add r4, r7 + 8002ec4: e7e6 b.n 8002e94 <_ZN20SoftwareMJPEGDecoder16decodeMJPEGFrameEPKhmPhttm.part.0+0x74> + const uint16_t pix = ((RGB_matrix->R & 0xF8) << 8) | ((RGB_matrix->G & 0xFC) << 3) | ((RGB_matrix->B & 0xF8) >> 3); + 8002ec6: 7859 ldrb r1, [r3, #1] + 8002ec8: 789a ldrb r2, [r3, #2] + 8002eca: 00c9 lsls r1, r1, #3 + 8002ecc: ea09 2202 and.w r2, r9, r2, lsl #8 + 8002ed0: f401 61fc and.w r1, r1, #2016 ; 0x7e0 + 8002ed4: 430a orrs r2, r1 + 8002ed6: f813 1b03 ldrb.w r1, [r3], #3 + 8002eda: ea42 02d1 orr.w r2, r2, r1, lsr #3 + *lineptr++ = pix; + 8002ede: f824 2b02 strh.w r2, [r4], #2 + RGB_matrix++; + 8002ee2: e7ec b.n 8002ebe <_ZN20SoftwareMJPEGDecoder16decodeMJPEGFrameEPKhmPhttm.part.0+0x9e> + 8002ee4: fffff800 .word 0xfffff800 + +08002ee8 <_ZN20SoftwareMJPEGDecoderC1EPh>: + reader(0), lineBuffer(buffer), aviBuffer(0), aviBufferLength(0), aviBufferStartOffset(0), lastError(AVI_NO_ERROR) + 8002ee8: 4a0a ldr r2, [pc, #40] ; (8002f14 <_ZN20SoftwareMJPEGDecoderC1EPh+0x2c>) + 8002eea: 6002 str r2, [r0, #0] + : frameNumber(0), currentMovieOffset(0), indexOffset(0), firstFrameOffset(0), lastFrameEnd(0), movieLength(0), movieData(0), + 8002eec: 2200 movs r2, #0 + 8002eee: e9c0 2205 strd r2, r2, [r0, #20] + 8002ef2: e9c0 2207 strd r2, r2, [r0, #28] + 8002ef6: e9c0 2209 strd r2, r2, [r0, #36] ; 0x24 + reader(0), lineBuffer(buffer), aviBuffer(0), aviBufferLength(0), aviBufferStartOffset(0), lastError(AVI_NO_ERROR) + 8002efa: e9c0 220b strd r2, r2, [r0, #44] ; 0x2c + 8002efe: e9c0 120d strd r1, r2, [r0, #52] ; 0x34 + 8002f02: e9c0 220f strd r2, r2, [r0, #60] ; 0x3c + 8002f06: f880 2044 strb.w r2, [r0, #68] ; 0x44 + videoInfo.frame_width = 0; + 8002f0a: e9c0 2203 strd r2, r2, [r0, #12] + videoInfo.number_of_frames = 0; + 8002f0e: e9c0 2201 strd r2, r2, [r0, #4] +} + 8002f12: 4770 bx lr + 8002f14: 080362f4 .word 0x080362f4 + +08002f18 <_ZN20SoftwareMJPEGDecoder7compareEmPKcm>: +{ + 8002f18: b410 push {r4} + 8002f1a: 460c mov r4, r1 + 8002f1c: 4611 mov r1, r2 + 8002f1e: 461a mov r2, r3 + if (reader != 0) + 8002f20: 6b03 ldr r3, [r0, #48] ; 0x30 + 8002f22: b13b cbz r3, 8002f34 <_ZN20SoftwareMJPEGDecoder7compareEmPKcm+0x1c> + src = reinterpret_cast(aviBuffer + (offset - aviBufferStartOffset)); + 8002f24: 6c03 ldr r3, [r0, #64] ; 0x40 + 8002f26: 6b80 ldr r0, [r0, #56] ; 0x38 + 8002f28: 1ae4 subs r4, r4, r3 + src = (const char*)movieData + offset; + 8002f2a: 4420 add r0, r4 +} + 8002f2c: f85d 4b04 ldr.w r4, [sp], #4 + return strncmp(src, str, num); + 8002f30: f031 bd4c b.w 80349cc + src = (const char*)movieData + offset; + 8002f34: 6ac0 ldr r0, [r0, #44] ; 0x2c + 8002f36: e7f8 b.n 8002f2a <_ZN20SoftwareMJPEGDecoder7compareEmPKcm+0x12> + +08002f38 <_ZN20SoftwareMJPEGDecoder6getU32Em>: + if (reader != 0) + 8002f38: 6b03 ldr r3, [r0, #48] ; 0x30 +{ + 8002f3a: b510 push {r4, lr} + if (reader != 0) + 8002f3c: b173 cbz r3, 8002f5c <_ZN20SoftwareMJPEGDecoder6getU32Em+0x24> + const uint32_t index = offset - aviBufferStartOffset; + 8002f3e: 6c03 ldr r3, [r0, #64] ; 0x40 + return aviBuffer[index + 0] | (aviBuffer[index + 1] << 8) | (aviBuffer[index + 2] << 16) | (aviBuffer[index + 3] << 24); + 8002f40: 6b82 ldr r2, [r0, #56] ; 0x38 + const uint32_t index = offset - aviBufferStartOffset; + 8002f42: 1ac9 subs r1, r1, r3 + return aviBuffer[index + 0] | (aviBuffer[index + 1] << 8) | (aviBuffer[index + 2] << 16) | (aviBuffer[index + 3] << 24); + 8002f44: 1853 adds r3, r2, r1 + 8002f46: 5c52 ldrb r2, [r2, r1] + 8002f48: 7898 ldrb r0, [r3, #2] + 8002f4a: 785c ldrb r4, [r3, #1] + 8002f4c: 0400 lsls r0, r0, #16 + 8002f4e: 78db ldrb r3, [r3, #3] + 8002f50: ea40 2004 orr.w r0, r0, r4, lsl #8 + 8002f54: 4310 orrs r0, r2 + 8002f56: ea40 6003 orr.w r0, r0, r3, lsl #24 +} + 8002f5a: bd10 pop {r4, pc} + return d[0] | (d[1] << 8) | (d[2] << 16) | (d[3] << 24); + 8002f5c: 6ac3 ldr r3, [r0, #44] ; 0x2c + 8002f5e: 5858 ldr r0, [r3, r1] + 8002f60: e7fb b.n 8002f5a <_ZN20SoftwareMJPEGDecoder6getU32Em+0x22> + +08002f62 <_ZN20SoftwareMJPEGDecoder6getU16Em>: + if (reader != 0) + 8002f62: 6b03 ldr r3, [r0, #48] ; 0x30 + 8002f64: b143 cbz r3, 8002f78 <_ZN20SoftwareMJPEGDecoder6getU16Em+0x16> + const uint32_t index = offset - aviBufferStartOffset; + 8002f66: 6c03 ldr r3, [r0, #64] ; 0x40 + 8002f68: 1ac9 subs r1, r1, r3 + return aviBuffer[index + 0] | (aviBuffer[index + 1] << 8); + 8002f6a: 6b83 ldr r3, [r0, #56] ; 0x38 + 8002f6c: 185a adds r2, r3, r1 + 8002f6e: 5c58 ldrb r0, [r3, r1] + 8002f70: 7852 ldrb r2, [r2, #1] + 8002f72: ea40 2002 orr.w r0, r0, r2, lsl #8 + 8002f76: 4770 bx lr + return d[0] | (d[1] << 8); + 8002f78: 6ac3 ldr r3, [r0, #44] ; 0x2c + 8002f7a: 5a58 ldrh r0, [r3, r1] +} + 8002f7c: 4770 bx lr + ... + +08002f80 <_ZN20SoftwareMJPEGDecoder8readDataEmm>: +{ + 8002f80: b570 push {r4, r5, r6, lr} + 8002f82: 4604 mov r4, r0 + if (reader != 0) + 8002f84: 6b00 ldr r0, [r0, #48] ; 0x30 +{ + 8002f86: 460d mov r5, r1 + 8002f88: 4616 mov r6, r2 + if (reader != 0) + 8002f8a: b1d8 cbz r0, 8002fc4 <_ZN20SoftwareMJPEGDecoder8readDataEmm+0x44> + if (length > aviBufferLength) + 8002f8c: 6be3 ldr r3, [r4, #60] ; 0x3c + 8002f8e: 4293 cmp r3, r2 + 8002f90: d208 bcs.n 8002fa4 <_ZN20SoftwareMJPEGDecoder8readDataEmm+0x24> + lastError = AVI_ERROR_FILE_BUFFER_TO_SMALL; + 8002f92: 2309 movs r3, #9 + assert(!"Buffer to small"); + 8002f94: 4a0d ldr r2, [pc, #52] ; (8002fcc <_ZN20SoftwareMJPEGDecoder8readDataEmm+0x4c>) + 8002f96: 2165 movs r1, #101 ; 0x65 + 8002f98: 480d ldr r0, [pc, #52] ; (8002fd0 <_ZN20SoftwareMJPEGDecoder8readDataEmm+0x50>) + lastError = AVI_ERROR_FILE_BUFFER_TO_SMALL; + 8002f9a: f884 3044 strb.w r3, [r4, #68] ; 0x44 + assert(!"Buffer to small"); + 8002f9e: 4b0d ldr r3, [pc, #52] ; (8002fd4 <_ZN20SoftwareMJPEGDecoder8readDataEmm+0x54>) + 8002fa0: f031 f9d8 bl 8034354 <__assert_func> + reader->seek(offset); + 8002fa4: 6803 ldr r3, [r0, #0] + 8002fa6: 68db ldr r3, [r3, #12] + 8002fa8: 4798 blx r3 + if (!reader->readData(aviBuffer, length)) + 8002faa: 6b20 ldr r0, [r4, #48] ; 0x30 + 8002fac: 4632 mov r2, r6 + 8002fae: 6ba1 ldr r1, [r4, #56] ; 0x38 + 8002fb0: 6803 ldr r3, [r0, #0] + 8002fb2: 691b ldr r3, [r3, #16] + 8002fb4: 4798 blx r3 + 8002fb6: b910 cbnz r0, 8002fbe <_ZN20SoftwareMJPEGDecoder8readDataEmm+0x3e> + lastError = AVI_ERROR_EOF_REACHED; + 8002fb8: 230d movs r3, #13 + 8002fba: f884 3044 strb.w r3, [r4, #68] ; 0x44 + return aviBuffer; + 8002fbe: 6ba0 ldr r0, [r4, #56] ; 0x38 + aviBufferStartOffset = offset; + 8002fc0: 6425 str r5, [r4, #64] ; 0x40 +} + 8002fc2: bd70 pop {r4, r5, r6, pc} + return movieData + offset; + 8002fc4: 6ae0 ldr r0, [r4, #44] ; 0x2c + 8002fc6: 4408 add r0, r1 + 8002fc8: e7fb b.n 8002fc2 <_ZN20SoftwareMJPEGDecoder8readDataEmm+0x42> + 8002fca: bf00 nop + 8002fcc: 0803607d .word 0x0803607d + 8002fd0: 08035fe3 .word 0x08035fe3 + 8002fd4: 0803606a .word 0x0803606a + +08002fd8 <_ZN20SoftwareMJPEGDecoder13gotoNextFrameEv>: +{ + 8002fd8: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} + assert((frameNumber > 0) && "SoftwareMJPEGDecoder decoding without frame data!"); + 8002fdc: 6943 ldr r3, [r0, #20] +{ + 8002fde: 4604 mov r4, r0 + assert((frameNumber > 0) && "SoftwareMJPEGDecoder decoding without frame data!"); + 8002fe0: b92b cbnz r3, 8002fee <_ZN20SoftwareMJPEGDecoder13gotoNextFrameEv+0x16> + 8002fe2: 4b23 ldr r3, [pc, #140] ; (8003070 <_ZN20SoftwareMJPEGDecoder13gotoNextFrameEv+0x98>) + 8002fe4: 21aa movs r1, #170 ; 0xaa + 8002fe6: 4a23 ldr r2, [pc, #140] ; (8003074 <_ZN20SoftwareMJPEGDecoder13gotoNextFrameEv+0x9c>) + 8002fe8: 4823 ldr r0, [pc, #140] ; (8003078 <_ZN20SoftwareMJPEGDecoder13gotoNextFrameEv+0xa0>) + 8002fea: f031 f9b3 bl 8034354 <__assert_func> + readData(currentMovieOffset, 8); + 8002fee: 2208 movs r2, #8 + 8002ff0: 6981 ldr r1, [r0, #24] + 8002ff2: f7ff ffc5 bl 8002f80 <_ZN20SoftwareMJPEGDecoder8readDataEmm> + uint32_t chunkSize = getU32(currentMovieOffset + 4); + 8002ff6: 69a1 ldr r1, [r4, #24] + if (streamNo == STREAM0 && chunkType == TYPEDC && chunkSize > 0) + 8002ff8: f243 0630 movw r6, #12336 ; 0x3030 + 8002ffc: f246 3764 movw r7, #25444 ; 0x6364 + uint32_t chunkSize = getU32(currentMovieOffset + 4); + 8003000: 3104 adds r1, #4 + 8003002: 4620 mov r0, r4 + 8003004: f7ff ff98 bl 8002f38 <_ZN20SoftwareMJPEGDecoder6getU32Em> + while (currentMovieOffset + 8 + chunkSize < movieLength) + 8003008: 69a3 ldr r3, [r4, #24] + 800300a: 4418 add r0, r3 + 800300c: 6aa3 ldr r3, [r4, #40] ; 0x28 + 800300e: f100 0208 add.w r2, r0, #8 + 8003012: 429a cmp r2, r3 + 8003014: d306 bcc.n 8003024 <_ZN20SoftwareMJPEGDecoder13gotoNextFrameEv+0x4c> + frameNumber = 1; + 8003016: 2301 movs r3, #1 + return false; + 8003018: 2000 movs r0, #0 + frameNumber = 1; + 800301a: 6163 str r3, [r4, #20] + currentMovieOffset = firstFrameOffset; //start over + 800301c: 6a23 ldr r3, [r4, #32] + 800301e: 61a3 str r3, [r4, #24] +} + 8003020: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} + frameNumber++; + 8003024: 6963 ldr r3, [r4, #20] + currentMovieOffset = (currentMovieOffset + 1) & 0xFFFFFFFE; //pad to next word + 8003026: 3009 adds r0, #9 + readData(currentMovieOffset, 8); + 8003028: 2208 movs r2, #8 + frameNumber++; + 800302a: 3301 adds r3, #1 + currentMovieOffset = (currentMovieOffset + 1) & 0xFFFFFFFE; //pad to next word + 800302c: f020 0101 bic.w r1, r0, #1 + readData(currentMovieOffset, 8); + 8003030: 4620 mov r0, r4 + frameNumber++; + 8003032: 6163 str r3, [r4, #20] + currentMovieOffset = (currentMovieOffset + 1) & 0xFFFFFFFE; //pad to next word + 8003034: 61a1 str r1, [r4, #24] + readData(currentMovieOffset, 8); + 8003036: f7ff ffa3 bl 8002f80 <_ZN20SoftwareMJPEGDecoder8readDataEmm> + uint32_t streamNo = getU16(currentMovieOffset); + 800303a: f8d4 9018 ldr.w r9, [r4, #24] + 800303e: 4620 mov r0, r4 + 8003040: 4649 mov r1, r9 + 8003042: f7ff ff8e bl 8002f62 <_ZN20SoftwareMJPEGDecoder6getU16Em> + uint32_t chunkType = getU16(currentMovieOffset + 2); + 8003046: f109 0102 add.w r1, r9, #2 + uint32_t streamNo = getU16(currentMovieOffset); + 800304a: 4680 mov r8, r0 + uint32_t chunkType = getU16(currentMovieOffset + 2); + 800304c: 4620 mov r0, r4 + 800304e: f7ff ff88 bl 8002f62 <_ZN20SoftwareMJPEGDecoder6getU16Em> + chunkSize = getU32(currentMovieOffset + 4); + 8003052: f109 0104 add.w r1, r9, #4 + uint32_t chunkType = getU16(currentMovieOffset + 2); + 8003056: 4605 mov r5, r0 + chunkSize = getU32(currentMovieOffset + 4); + 8003058: 4620 mov r0, r4 + 800305a: f7ff ff6d bl 8002f38 <_ZN20SoftwareMJPEGDecoder6getU32Em> + if (streamNo == STREAM0 && chunkType == TYPEDC && chunkSize > 0) + 800305e: 45b0 cmp r8, r6 + 8003060: d1d2 bne.n 8003008 <_ZN20SoftwareMJPEGDecoder13gotoNextFrameEv+0x30> + 8003062: 42bd cmp r5, r7 + 8003064: d1d0 bne.n 8003008 <_ZN20SoftwareMJPEGDecoder13gotoNextFrameEv+0x30> + 8003066: 2800 cmp r0, #0 + 8003068: d0ce beq.n 8003008 <_ZN20SoftwareMJPEGDecoder13gotoNextFrameEv+0x30> + return true; + 800306a: 2001 movs r0, #1 + 800306c: e7d8 b.n 8003020 <_ZN20SoftwareMJPEGDecoder13gotoNextFrameEv+0x48> + 800306e: bf00 nop + 8003070: 080360bf .word 0x080360bf + 8003074: 08036108 .word 0x08036108 + 8003078: 08035fe3 .word 0x08035fe3 + +0800307c <_ZN20SoftwareMJPEGDecoder11decodeFrameERKN8touchgfx4RectEPhm>: +{ + 800307c: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8003080: 4604 mov r4, r0 + 8003082: f5ad 7d1f sub.w sp, sp, #636 ; 0x27c + 8003086: 468a mov sl, r1 + 8003088: 4616 mov r6, r2 + readData(currentMovieOffset, 8); + 800308a: 6981 ldr r1, [r0, #24] + 800308c: 2208 movs r2, #8 +{ + 800308e: 4698 mov r8, r3 + readData(currentMovieOffset, 8); + 8003090: f7ff ff76 bl 8002f80 <_ZN20SoftwareMJPEGDecoder8readDataEmm> + const uint32_t length = getU32(currentMovieOffset + 4); + 8003094: 69a7 ldr r7, [r4, #24] + 8003096: 4620 mov r0, r4 + 8003098: 1d39 adds r1, r7, #4 + 800309a: f7ff ff4d bl 8002f38 <_ZN20SoftwareMJPEGDecoder6getU32Em> + const uint8_t* mjpgdata = readData(currentMovieOffset + 8, length); + 800309e: f107 0108 add.w r1, r7, #8 + 80030a2: 4602 mov r2, r0 + const uint32_t length = getU32(currentMovieOffset + 4); + 80030a4: 4605 mov r5, r0 + const uint8_t* mjpgdata = readData(currentMovieOffset + 8, length); + 80030a6: 4620 mov r0, r4 + 80030a8: f7ff ff6a bl 8002f80 <_ZN20SoftwareMJPEGDecoder8readDataEmm> + assert(lineBuffer && "LineBuffer must be assigned prior to decoding directly to framebuffer"); + 80030ac: 6b63 ldr r3, [r4, #52] ; 0x34 + const uint8_t* mjpgdata = readData(currentMovieOffset + 8, length); + 80030ae: 4607 mov r7, r0 + assert(lineBuffer && "LineBuffer must be assigned prior to decoding directly to framebuffer"); + 80030b0: b933 cbnz r3, 80030c0 <_ZN20SoftwareMJPEGDecoder11decodeFrameERKN8touchgfx4RectEPhm+0x44> + 80030b2: 4b3c ldr r3, [pc, #240] ; (80031a4 <_ZN20SoftwareMJPEGDecoder11decodeFrameERKN8touchgfx4RectEPhm+0x128>) + 80030b4: f240 11ab movw r1, #427 ; 0x1ab + 80030b8: 4a3b ldr r2, [pc, #236] ; (80031a8 <_ZN20SoftwareMJPEGDecoder11decodeFrameERKN8touchgfx4RectEPhm+0x12c>) + 80030ba: 483c ldr r0, [pc, #240] ; (80031ac <_ZN20SoftwareMJPEGDecoder11decodeFrameERKN8touchgfx4RectEPhm+0x130>) + 80030bc: f031 f94a bl 8034354 <__assert_func> + JSAMPROW lines[2] = { lineBuffer, 0 }; /* Output row buffer */ + 80030c0: 2200 movs r2, #0 + cinfo.err = jpeg_std_error(&jerr); + 80030c2: a803 add r0, sp, #12 + JSAMPROW lines[2] = { lineBuffer, 0 }; /* Output row buffer */ + 80030c4: e9cd 3201 strd r3, r2, [sp, #4] + cinfo.err = jpeg_std_error(&jerr); + 80030c8: f00e fc0e bl 80118e8 + jpeg_create_decompress(&cinfo); + 80030cc: f44f 72f4 mov.w r2, #488 ; 0x1e8 + 80030d0: 2150 movs r1, #80 ; 0x50 + cinfo.err = jpeg_std_error(&jerr); + 80030d2: 9024 str r0, [sp, #144] ; 0x90 + jpeg_create_decompress(&cinfo); + 80030d4: a824 add r0, sp, #144 ; 0x90 + 80030d6: f008 fb56 bl 800b786 + jpeg_mem_src(&cinfo, const_cast(mjpgdata), length); + 80030da: 462a mov r2, r5 + 80030dc: 4639 mov r1, r7 + 80030de: a824 add r0, sp, #144 ; 0x90 + 80030e0: f009 fad2 bl 800c688 + jpeg_read_header(&cinfo, TRUE); + 80030e4: 2101 movs r1, #1 + 80030e6: a824 add r0, sp, #144 ; 0x90 + 80030e8: f008 fc50 bl 800b98c + cinfo.dct_method = JDCT_FLOAT; + 80030ec: 2302 movs r3, #2 + jpeg_start_decompress(&cinfo); + 80030ee: a824 add r0, sp, #144 ; 0x90 + cinfo.dct_method = JDCT_FLOAT; + 80030f0: f88d 30d8 strb.w r3, [sp, #216] ; 0xd8 + jpeg_start_decompress(&cinfo); + 80030f4: f008 fcee bl 800bad4 + const uint32_t startY = area.y; + 80030f8: f9ba 5002 ldrsh.w r5, [sl, #2] + while (cinfo.output_scanline < startY) + 80030fc: 9b47 ldr r3, [sp, #284] ; 0x11c + 80030fe: 42ab cmp r3, r5 + 8003100: d329 bcc.n 8003156 <_ZN20SoftwareMJPEGDecoder11decodeFrameERKN8touchgfx4RectEPhm+0xda> + const uint32_t startX = area.x; + 8003102: f9ba 9000 ldrsh.w r9, [sl] + * + * @return x coordinate of the right edge (calculated as "x + width"). + */ + FORCE_INLINE_FUNCTION int16_t right() const + { + return x + width; + 8003106: ea4f 0848 mov.w r8, r8, lsl #1 + 800310a: f8ba 7004 ldrh.w r7, [sl, #4] + 800310e: 9b2b ldr r3, [sp, #172] ; 0xac + lineptr += framebuffer_width * startY; + 8003110: fb08 6605 mla r6, r8, r5, r6 + 8003114: 444f add r7, r9 + * + * @return y coordinate of the bottom edge (calculated as "y + height"). + */ + FORCE_INLINE_FUNCTION int16_t bottom() const + { + return y + height; + 8003116: f8ba 5002 ldrh.w r5, [sl, #2] + const uint16_t pix = ((RGB_matrix[counter].R & 0xF8) << 8) | ((RGB_matrix[counter].G & 0xFC) << 3) | ((RGB_matrix[counter].B & 0xF8) >> 3); + 800311a: f8df b094 ldr.w fp, [pc, #148] ; 80031b0 <_ZN20SoftwareMJPEGDecoder11decodeFrameERKN8touchgfx4RectEPhm+0x134> + const uint32_t endX = MIN((uint32_t)area.right(), cinfo.image_width); + 800311e: b23f sxth r7, r7 + 8003120: 429f cmp r7, r3 + 8003122: bf28 it cs + 8003124: 461f movcs r7, r3 + 8003126: f8ba 3006 ldrh.w r3, [sl, #6] + 800312a: eb09 0a49 add.w sl, r9, r9, lsl #1 + 800312e: 441d add r5, r3 + 8003130: 9b41 ldr r3, [sp, #260] ; 0x104 + const uint32_t endY = MIN((uint32_t)area.bottom(), cinfo.output_height); + 8003132: b22d sxth r5, r5 + 8003134: 429d cmp r5, r3 + 8003136: bf28 it cs + 8003138: 461d movcs r5, r3 + while (cinfo.output_scanline < endY) + 800313a: 9b47 ldr r3, [sp, #284] ; 0x11c + 800313c: 42ab cmp r3, r5 + 800313e: d310 bcc.n 8003162 <_ZN20SoftwareMJPEGDecoder11decodeFrameERKN8touchgfx4RectEPhm+0xe6> + jpeg_finish_decompress(&cinfo); + 8003140: a824 add r0, sp, #144 ; 0x90 + 8003142: f008 fc45 bl 800b9d0 + jpeg_destroy_decompress(&cinfo); + 8003146: a824 add r0, sp, #144 ; 0x90 + 8003148: f008 fb6a bl 800b820 +} + 800314c: 2001 movs r0, #1 + 800314e: f50d 7d1f add.w sp, sp, #636 ; 0x27c + 8003152: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + (void)jpeg_read_scanlines(&cinfo, lines, 1); + 8003156: 2201 movs r2, #1 + 8003158: a901 add r1, sp, #4 + 800315a: a824 add r0, sp, #144 ; 0x90 + 800315c: f008 fd03 bl 800bb66 + 8003160: e7cc b.n 80030fc <_ZN20SoftwareMJPEGDecoder11decodeFrameERKN8touchgfx4RectEPhm+0x80> + (void)jpeg_read_scanlines(&cinfo, lines, 1); + 8003162: 2201 movs r2, #1 + 8003164: a901 add r1, sp, #4 + 8003166: a824 add r0, sp, #144 ; 0x90 + 8003168: f008 fcfd bl 800bb66 + for (uint32_t counter = startX; counter < endX; counter++) + 800316c: 6b62 ldr r2, [r4, #52] ; 0x34 + 800316e: 4649 mov r1, r9 + 8003170: 4452 add r2, sl + 8003172: 42b9 cmp r1, r7 + 8003174: f102 0203 add.w r2, r2, #3 + 8003178: d301 bcc.n 800317e <_ZN20SoftwareMJPEGDecoder11decodeFrameERKN8touchgfx4RectEPhm+0x102> + lineptr += framebuffer_width; //move to next line + 800317a: 4446 add r6, r8 + 800317c: e7dd b.n 800313a <_ZN20SoftwareMJPEGDecoder11decodeFrameERKN8touchgfx4RectEPhm+0xbe> + const uint16_t pix = ((RGB_matrix[counter].R & 0xF8) << 8) | ((RGB_matrix[counter].G & 0xFC) << 3) | ((RGB_matrix[counter].B & 0xF8) >> 3); + 800317e: f812 0c02 ldrb.w r0, [r2, #-2] + 8003182: f812 3c01 ldrb.w r3, [r2, #-1] + 8003186: 00c0 lsls r0, r0, #3 + 8003188: ea0b 2303 and.w r3, fp, r3, lsl #8 + 800318c: f400 60fc and.w r0, r0, #2016 ; 0x7e0 + 8003190: 4303 orrs r3, r0 + 8003192: f812 0c03 ldrb.w r0, [r2, #-3] + 8003196: ea43 03d0 orr.w r3, r3, r0, lsr #3 + *(lineptr + counter) = pix; + 800319a: f826 3011 strh.w r3, [r6, r1, lsl #1] + for (uint32_t counter = startX; counter < endX; counter++) + 800319e: 3101 adds r1, #1 + 80031a0: e7e7 b.n 8003172 <_ZN20SoftwareMJPEGDecoder11decodeFrameERKN8touchgfx4RectEPhm+0xf6> + 80031a2: bf00 nop + 80031a4: 0803613b .word 0x0803613b + 80031a8: 08036191 .word 0x08036191 + 80031ac: 08035fe3 .word 0x08035fe3 + 80031b0: fffff800 .word 0xfffff800 + +080031b4 <_ZN20SoftwareMJPEGDecoder9gotoFrameEm>: + if (frameNumber == 0) + 80031b4: 2901 cmp r1, #1 + if (frameNumber > getNumberOfFrames()) + 80031b6: 6803 ldr r3, [r0, #0] + 80031b8: bf38 it cc + 80031ba: 2101 movcc r1, #1 + 80031bc: 6adb ldr r3, [r3, #44] ; 0x2c +{ + 80031be: b570 push {r4, r5, r6, lr} + 80031c0: 460d mov r5, r1 + 80031c2: 4604 mov r4, r0 + if (frameNumber > getNumberOfFrames()) + 80031c4: 4798 blx r3 + 80031c6: 42a8 cmp r0, r5 + 80031c8: d204 bcs.n 80031d4 <_ZN20SoftwareMJPEGDecoder9gotoFrameEm+0x20> + frameNumber = getNumberOfFrames(); + 80031ca: 6823 ldr r3, [r4, #0] + 80031cc: 4620 mov r0, r4 + 80031ce: 6adb ldr r3, [r3, #44] ; 0x2c + 80031d0: 4798 blx r3 + 80031d2: 4605 mov r5, r0 + uint32_t offset = indexOffset + 8 + (frameNumber - 1) * 16; + 80031d4: 1e6b subs r3, r5, #1 + 80031d6: 69e6 ldr r6, [r4, #28] + readData(offset, 16); + 80031d8: 2210 movs r2, #16 + 80031da: 4620 mov r0, r4 + uint32_t offset = indexOffset + 8 + (frameNumber - 1) * 16; + 80031dc: eb06 1603 add.w r6, r6, r3, lsl #4 + readData(offset, 16); + 80031e0: f106 0108 add.w r1, r6, #8 + 80031e4: f7ff fecc bl 8002f80 <_ZN20SoftwareMJPEGDecoder8readDataEmm> + currentMovieOffset = getU32(offset + 8) + firstFrameOffset - 4; + 80031e8: f106 0110 add.w r1, r6, #16 + 80031ec: 4620 mov r0, r4 + 80031ee: f7ff fea3 bl 8002f38 <_ZN20SoftwareMJPEGDecoder6getU32Em> + 80031f2: 6a23 ldr r3, [r4, #32] + 80031f4: 3b04 subs r3, #4 + 80031f6: 4403 add r3, r0 + this->frameNumber = frameNumber; + 80031f8: e9c4 5305 strd r5, r3, [r4, #20] +} + 80031fc: bd70 pop {r4, r5, r6, pc} + ... + +08003200 <_ZN20SoftwareMJPEGDecoder15readVideoHeaderEv>: +{ + 8003200: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr} + currentMovieOffset = 0; + 8003204: 2100 movs r1, #0 +{ + 8003206: 4604 mov r4, r0 + readData(0, 72); + 8003208: 2248 movs r2, #72 ; 0x48 + currentMovieOffset = 0; + 800320a: 6181 str r1, [r0, #24] + lastError = AVI_NO_ERROR; + 800320c: f880 1044 strb.w r1, [r0, #68] ; 0x44 + readData(0, 72); + 8003210: f7ff feb6 bl 8002f80 <_ZN20SoftwareMJPEGDecoder8readDataEmm> + if (compare(currentMovieOffset, "RIFF", 4)) + 8003214: 69a7 ldr r7, [r4, #24] + 8003216: 2304 movs r3, #4 + 8003218: 4a63 ldr r2, [pc, #396] ; (80033a8 <_ZN20SoftwareMJPEGDecoder15readVideoHeaderEv+0x1a8>) + 800321a: 4639 mov r1, r7 + 800321c: 4620 mov r0, r4 + 800321e: f7ff fe7b bl 8002f18 <_ZN20SoftwareMJPEGDecoder7compareEmPKcm> + 8003222: b140 cbz r0, 8003236 <_ZN20SoftwareMJPEGDecoder15readVideoHeaderEv+0x36> + lastError = AVI_ERROR_NOT_RIFF; + 8003224: 2303 movs r3, #3 + assert(!"RIFF header not found"); + 8003226: 4a61 ldr r2, [pc, #388] ; (80033ac <_ZN20SoftwareMJPEGDecoder15readVideoHeaderEv+0x1ac>) + 8003228: 21f2 movs r1, #242 ; 0xf2 + lastError = AVI_ERROR_NOT_RIFF; + 800322a: f884 3044 strb.w r3, [r4, #68] ; 0x44 + assert(!"RIFF header not found"); + 800322e: 4b60 ldr r3, [pc, #384] ; (80033b0 <_ZN20SoftwareMJPEGDecoder15readVideoHeaderEv+0x1b0>) + assert(!"AVI header not found"); + 8003230: 4860 ldr r0, [pc, #384] ; (80033b4 <_ZN20SoftwareMJPEGDecoder15readVideoHeaderEv+0x1b4>) + 8003232: f031 f88f bl 8034354 <__assert_func> + currentMovieOffset += 8; + 8003236: f107 0108 add.w r1, r7, #8 + if (compare(currentMovieOffset, "AVI ", 4)) + 800323a: 2304 movs r3, #4 + 800323c: 4a5e ldr r2, [pc, #376] ; (80033b8 <_ZN20SoftwareMJPEGDecoder15readVideoHeaderEv+0x1b8>) + 800323e: 4620 mov r0, r4 + currentMovieOffset += 8; + 8003240: 61a1 str r1, [r4, #24] + if (compare(currentMovieOffset, "AVI ", 4)) + 8003242: f7ff fe69 bl 8002f18 <_ZN20SoftwareMJPEGDecoder7compareEmPKcm> + 8003246: b130 cbz r0, 8003256 <_ZN20SoftwareMJPEGDecoder15readVideoHeaderEv+0x56> + lastError = AVI_ERROR_AVI_HEADER_NOT_FOUND; + 8003248: 2304 movs r3, #4 + assert(!"AVI header not found"); + 800324a: 4a58 ldr r2, [pc, #352] ; (80033ac <_ZN20SoftwareMJPEGDecoder15readVideoHeaderEv+0x1ac>) + 800324c: 21fa movs r1, #250 ; 0xfa + lastError = AVI_ERROR_AVI_HEADER_NOT_FOUND; + 800324e: f884 3044 strb.w r3, [r4, #68] ; 0x44 + assert(!"AVI header not found"); + 8003252: 4b5a ldr r3, [pc, #360] ; (80033bc <_ZN20SoftwareMJPEGDecoder15readVideoHeaderEv+0x1bc>) + 8003254: e7ec b.n 8003230 <_ZN20SoftwareMJPEGDecoder15readVideoHeaderEv+0x30> + currentMovieOffset += 4; + 8003256: f107 010c add.w r1, r7, #12 + if (compare(currentMovieOffset, "LIST", 4)) + 800325a: 2304 movs r3, #4 + 800325c: 4a58 ldr r2, [pc, #352] ; (80033c0 <_ZN20SoftwareMJPEGDecoder15readVideoHeaderEv+0x1c0>) + 800325e: 4620 mov r0, r4 + currentMovieOffset += 4; + 8003260: 61a1 str r1, [r4, #24] + if (compare(currentMovieOffset, "LIST", 4)) + 8003262: f7ff fe59 bl 8002f18 <_ZN20SoftwareMJPEGDecoder7compareEmPKcm> + 8003266: 4606 mov r6, r0 + 8003268: b138 cbz r0, 800327a <_ZN20SoftwareMJPEGDecoder15readVideoHeaderEv+0x7a> + lastError = AVI_ERROR_AVI_LIST_NOT_FOUND; + 800326a: 2305 movs r3, #5 + assert(!"AVI LIST not found"); + 800326c: 4a4f ldr r2, [pc, #316] ; (80033ac <_ZN20SoftwareMJPEGDecoder15readVideoHeaderEv+0x1ac>) + 800326e: f240 1101 movw r1, #257 ; 0x101 + lastError = AVI_ERROR_AVI_LIST_NOT_FOUND; + 8003272: f884 3044 strb.w r3, [r4, #68] ; 0x44 + assert(!"AVI LIST not found"); + 8003276: 4b53 ldr r3, [pc, #332] ; (80033c4 <_ZN20SoftwareMJPEGDecoder15readVideoHeaderEv+0x1c4>) + 8003278: e7da b.n 8003230 <_ZN20SoftwareMJPEGDecoder15readVideoHeaderEv+0x30> + const uint32_t aviListSize = getU32(currentMovieOffset + 4); + 800327a: f107 0110 add.w r1, r7, #16 + 800327e: 4620 mov r0, r4 + 8003280: f7ff fe5a bl 8002f38 <_ZN20SoftwareMJPEGDecoder6getU32Em> + assert(aviListSize); + 8003284: 4605 mov r5, r0 + 8003286: b920 cbnz r0, 8003292 <_ZN20SoftwareMJPEGDecoder15readVideoHeaderEv+0x92> + 8003288: 4b4f ldr r3, [pc, #316] ; (80033c8 <_ZN20SoftwareMJPEGDecoder15readVideoHeaderEv+0x1c8>) + 800328a: f240 1107 movw r1, #263 ; 0x107 + 800328e: 4a47 ldr r2, [pc, #284] ; (80033ac <_ZN20SoftwareMJPEGDecoder15readVideoHeaderEv+0x1ac>) + 8003290: e7ce b.n 8003230 <_ZN20SoftwareMJPEGDecoder15readVideoHeaderEv+0x30> + uint32_t offset = currentMovieOffset + 8; + 8003292: f107 0814 add.w r8, r7, #20 + if (compare(offset, "hdrl", 4)) + 8003296: 2304 movs r3, #4 + 8003298: 4a4c ldr r2, [pc, #304] ; (80033cc <_ZN20SoftwareMJPEGDecoder15readVideoHeaderEv+0x1cc>) + 800329a: 4620 mov r0, r4 + 800329c: 4641 mov r1, r8 + 800329e: f7ff fe3b bl 8002f18 <_ZN20SoftwareMJPEGDecoder7compareEmPKcm> + 80032a2: 2800 cmp r0, #0 + 80032a4: d04b beq.n 800333e <_ZN20SoftwareMJPEGDecoder15readVideoHeaderEv+0x13e> + lastError = AVI_ERROR_AVI_HDRL_NOT_FOUND; + 80032a6: 2306 movs r3, #6 + 80032a8: f884 3044 strb.w r3, [r4, #68] ; 0x44 + if (compare(offset, "avih", 4)) + 80032ac: 2304 movs r3, #4 + 80032ae: 4a48 ldr r2, [pc, #288] ; (80033d0 <_ZN20SoftwareMJPEGDecoder15readVideoHeaderEv+0x1d0>) + 80032b0: f107 0118 add.w r1, r7, #24 + 80032b4: 4620 mov r0, r4 + 80032b6: f7ff fe2f bl 8002f18 <_ZN20SoftwareMJPEGDecoder7compareEmPKcm> + 80032ba: 2800 cmp r0, #0 + 80032bc: d041 beq.n 8003342 <_ZN20SoftwareMJPEGDecoder15readVideoHeaderEv+0x142> + lastError = AVI_ERROR_AVI_AVIH_NOT_FOUND; + 80032be: 2307 movs r3, #7 + 80032c0: f884 3044 strb.w r3, [r4, #68] ; 0x44 + uint32_t listOffset = aviListOffset + aviListSize + 8; + 80032c4: 4445 add r5, r8 + while (compare(listOffset + 8, "movi", 4) && (lastError == AVI_NO_ERROR) && listOffset < movieLength) + 80032c6: 4f43 ldr r7, [pc, #268] ; (80033d4 <_ZN20SoftwareMJPEGDecoder15readVideoHeaderEv+0x1d4>) + readData(listOffset, 12); + 80032c8: 220c movs r2, #12 + 80032ca: 4620 mov r0, r4 + 80032cc: 4629 mov r1, r5 + 80032ce: f7ff fe57 bl 8002f80 <_ZN20SoftwareMJPEGDecoder8readDataEmm> + while (compare(listOffset + 8, "movi", 4) && (lastError == AVI_NO_ERROR) && listOffset < movieLength) + 80032d2: f105 0608 add.w r6, r5, #8 + 80032d6: 2304 movs r3, #4 + 80032d8: 463a mov r2, r7 + 80032da: 4620 mov r0, r4 + 80032dc: 4631 mov r1, r6 + 80032de: f7ff fe1b bl 8002f18 <_ZN20SoftwareMJPEGDecoder7compareEmPKcm> + 80032e2: f894 3044 ldrb.w r3, [r4, #68] ; 0x44 + 80032e6: 2800 cmp r0, #0 + 80032e8: d04a beq.n 8003380 <_ZN20SoftwareMJPEGDecoder15readVideoHeaderEv+0x180> + 80032ea: 2b00 cmp r3, #0 + 80032ec: d14a bne.n 8003384 <_ZN20SoftwareMJPEGDecoder15readVideoHeaderEv+0x184> + 80032ee: 6aa3 ldr r3, [r4, #40] ; 0x28 + const uint32_t listSize = getU32(listOffset + 4) + 8; + 80032f0: 1d29 adds r1, r5, #4 + while (compare(listOffset + 8, "movi", 4) && (lastError == AVI_NO_ERROR) && listOffset < movieLength) + 80032f2: 42ab cmp r3, r5 + 80032f4: d84a bhi.n 800338c <_ZN20SoftwareMJPEGDecoder15readVideoHeaderEv+0x18c> + currentMovieOffset = listOffset + 8 + 4; //skip LIST and 'movi' + 80032f6: f105 030c add.w r3, r5, #12 + lastFrameEnd = listOffset + 8 + getU32(listOffset + 4); + 80032fa: 1d29 adds r1, r5, #4 + 80032fc: 4620 mov r0, r4 + currentMovieOffset = listOffset + 8 + 4; //skip LIST and 'movi' + 80032fe: 61a3 str r3, [r4, #24] + lastFrameEnd = listOffset + 8 + getU32(listOffset + 4); + 8003300: 9101 str r1, [sp, #4] + 8003302: f7ff fe19 bl 8002f38 <_ZN20SoftwareMJPEGDecoder6getU32Em> + 8003306: 4430 add r0, r6 + const uint32_t listSize = getU32(listOffset + 4) + 8; + 8003308: 9901 ldr r1, [sp, #4] + lastFrameEnd = listOffset + 8 + getU32(listOffset + 4); + 800330a: 6260 str r0, [r4, #36] ; 0x24 + const uint32_t listSize = getU32(listOffset + 4) + 8; + 800330c: 4620 mov r0, r4 + 800330e: f7ff fe13 bl 8002f38 <_ZN20SoftwareMJPEGDecoder6getU32Em> + listOffset += listSize; + 8003312: 4406 add r6, r0 + readData(listOffset, 4); + 8003314: 2204 movs r2, #4 + 8003316: 4620 mov r0, r4 + 8003318: 4631 mov r1, r6 + 800331a: f7ff fe31 bl 8002f80 <_ZN20SoftwareMJPEGDecoder8readDataEmm> + if (!compare(listOffset, "idx1", 4)) + 800331e: 2304 movs r3, #4 + 8003320: 4a2d ldr r2, [pc, #180] ; (80033d8 <_ZN20SoftwareMJPEGDecoder15readVideoHeaderEv+0x1d8>) + 8003322: 4631 mov r1, r6 + 8003324: 4620 mov r0, r4 + 8003326: f7ff fdf7 bl 8002f18 <_ZN20SoftwareMJPEGDecoder7compareEmPKcm> + 800332a: 2800 cmp r0, #0 + 800332c: d139 bne.n 80033a2 <_ZN20SoftwareMJPEGDecoder15readVideoHeaderEv+0x1a2> + frameNumber = 1; //next frame number is 1 + 800332e: 2301 movs r3, #1 + indexOffset = listOffset; + 8003330: 61e6 str r6, [r4, #28] + frameNumber = 1; //next frame number is 1 + 8003332: 6163 str r3, [r4, #20] + firstFrameOffset = currentMovieOffset; + 8003334: 69a3 ldr r3, [r4, #24] + 8003336: 6223 str r3, [r4, #32] +} + 8003338: b002 add sp, #8 + 800333a: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + bool foundFrame = true; + 800333e: 2601 movs r6, #1 + 8003340: e7b4 b.n 80032ac <_ZN20SoftwareMJPEGDecoder15readVideoHeaderEv+0xac> + if (foundFrame) + 8003342: 2e00 cmp r6, #0 + 8003344: d0be beq.n 80032c4 <_ZN20SoftwareMJPEGDecoder15readVideoHeaderEv+0xc4> + videoInfo.ms_between_frames = getU32(offset) / 1000; + 8003346: f107 0120 add.w r1, r7, #32 + 800334a: 4620 mov r0, r4 + 800334c: f7ff fdf4 bl 8002f38 <_ZN20SoftwareMJPEGDecoder6getU32Em> + 8003350: f44f 737a mov.w r3, #1000 ; 0x3e8 + videoInfo.number_of_frames = getU32(offset + 16); + 8003354: f107 0130 add.w r1, r7, #48 ; 0x30 + videoInfo.ms_between_frames = getU32(offset) / 1000; + 8003358: fbb0 f0f3 udiv r0, r0, r3 + 800335c: 6060 str r0, [r4, #4] + videoInfo.number_of_frames = getU32(offset + 16); + 800335e: 4620 mov r0, r4 + 8003360: f7ff fdea bl 8002f38 <_ZN20SoftwareMJPEGDecoder6getU32Em> + videoInfo.frame_width = getU32(offset + 32); + 8003364: f107 0140 add.w r1, r7, #64 ; 0x40 + videoInfo.number_of_frames = getU32(offset + 16); + 8003368: 60a0 str r0, [r4, #8] + videoInfo.frame_width = getU32(offset + 32); + 800336a: 4620 mov r0, r4 + 800336c: f7ff fde4 bl 8002f38 <_ZN20SoftwareMJPEGDecoder6getU32Em> + videoInfo.frame_height = getU32(offset + 36); + 8003370: f107 0144 add.w r1, r7, #68 ; 0x44 + videoInfo.frame_width = getU32(offset + 32); + 8003374: 60e0 str r0, [r4, #12] + videoInfo.frame_height = getU32(offset + 36); + 8003376: 4620 mov r0, r4 + 8003378: f7ff fdde bl 8002f38 <_ZN20SoftwareMJPEGDecoder6getU32Em> + 800337c: 6120 str r0, [r4, #16] + 800337e: e7a1 b.n 80032c4 <_ZN20SoftwareMJPEGDecoder15readVideoHeaderEv+0xc4> + if (lastError != AVI_NO_ERROR) + 8003380: 2b00 cmp r3, #0 + 8003382: d0b8 beq.n 80032f6 <_ZN20SoftwareMJPEGDecoder15readVideoHeaderEv+0xf6> + lastError = AVI_ERROR_MOVI_NOT_FOUND; + 8003384: 230a movs r3, #10 + lastError = AVI_ERROR_IDX1_NOT_FOUND; + 8003386: f884 3044 strb.w r3, [r4, #68] ; 0x44 + return; + 800338a: e7d5 b.n 8003338 <_ZN20SoftwareMJPEGDecoder15readVideoHeaderEv+0x138> + const uint32_t listSize = getU32(listOffset + 4) + 8; + 800338c: 4620 mov r0, r4 + 800338e: f7ff fdd3 bl 8002f38 <_ZN20SoftwareMJPEGDecoder6getU32Em> + 8003392: 3008 adds r0, #8 + readData(listOffset, 12); + 8003394: 220c movs r2, #12 + listOffset += listSize; + 8003396: 4405 add r5, r0 + readData(listOffset, 12); + 8003398: 4620 mov r0, r4 + 800339a: 4629 mov r1, r5 + 800339c: f7ff fdf0 bl 8002f80 <_ZN20SoftwareMJPEGDecoder8readDataEmm> + 80033a0: e797 b.n 80032d2 <_ZN20SoftwareMJPEGDecoder15readVideoHeaderEv+0xd2> + lastError = AVI_ERROR_IDX1_NOT_FOUND; + 80033a2: 230b movs r3, #11 + 80033a4: e7ef b.n 8003386 <_ZN20SoftwareMJPEGDecoder15readVideoHeaderEv+0x186> + 80033a6: bf00 nop + 80033a8: 080361eb .word 0x080361eb + 80033ac: 08036209 .word 0x08036209 + 80033b0: 080361f0 .word 0x080361f0 + 80033b4: 08035fe3 .word 0x08035fe3 + 80033b8: 08036236 .word 0x08036236 + 80033bc: 0803623b .word 0x0803623b + 80033c0: 08036253 .word 0x08036253 + 80033c4: 08036258 .word 0x08036258 + 80033c8: 0803626e .word 0x0803626e + 80033cc: 0803627a .word 0x0803627a + 80033d0: 0803627f .word 0x0803627f + 80033d4: 08036284 .word 0x08036284 + 80033d8: 08036289 .word 0x08036289 + +080033dc <_ZN20SoftwareMJPEGDecoder12setVideoDataEPKhm>: + movieLength = length; + 80033dc: e9c0 210a strd r2, r1, [r0, #40] ; 0x28 + reader = 0; //not using reader + 80033e0: 2200 movs r2, #0 + 80033e2: 6302 str r2, [r0, #48] ; 0x30 + readVideoHeader(); + 80033e4: f7ff bf0c b.w 8003200 <_ZN20SoftwareMJPEGDecoder15readVideoHeaderEv> + +080033e8 <_ZN20SoftwareMJPEGDecoder12setVideoDataERN8touchgfx15VideoDataReaderE>: +{ + 80033e8: b510 push {r4, lr} + movieData = 0; + 80033ea: 2300 movs r3, #0 +{ + 80033ec: 4604 mov r4, r0 + 80033ee: 4608 mov r0, r1 + movieData = 0; + 80033f0: 62e3 str r3, [r4, #44] ; 0x2c + movieLength = reader.getDataLength(); + 80033f2: 680b ldr r3, [r1, #0] + this->reader = &reader; + 80033f4: 6321 str r1, [r4, #48] ; 0x30 + movieLength = reader.getDataLength(); + 80033f6: 689b ldr r3, [r3, #8] + 80033f8: 4798 blx r3 + 80033fa: 62a0 str r0, [r4, #40] ; 0x28 + readVideoHeader(); + 80033fc: 4620 mov r0, r4 +} + 80033fe: e8bd 4010 ldmia.w sp!, {r4, lr} + readVideoHeader(); + 8003402: f7ff befd b.w 8003200 <_ZN20SoftwareMJPEGDecoder15readVideoHeaderEv> + +08003406 <_ZN20SoftwareMJPEGDecoder16decodeMJPEGFrameEPKhmPhttm>: +{ + 8003406: b4f0 push {r4, r5, r6, r7} + 8003408: f8bd 5010 ldrh.w r5, [sp, #16] + 800340c: f8bd 6014 ldrh.w r6, [sp, #20] + if (length == 0) + 8003410: b12a cbz r2, 800341e <_ZN20SoftwareMJPEGDecoder16decodeMJPEGFrameEPKhmPhttm+0x18> + if (outputBuffer && lineBuffer) //only decode if buffers are assigned. + 8003412: b123 cbz r3, 800341e <_ZN20SoftwareMJPEGDecoder16decodeMJPEGFrameEPKhmPhttm+0x18> + 8003414: e9cd 5604 strd r5, r6, [sp, #16] +} + 8003418: bcf0 pop {r4, r5, r6, r7} + 800341a: f7ff bd01 b.w 8002e20 <_ZN20SoftwareMJPEGDecoder16decodeMJPEGFrameEPKhmPhttm.part.0> + 800341e: bcf0 pop {r4, r5, r6, r7} + 8003420: 4770 bx lr + ... + +08003424 <_ZN20SoftwareMJPEGDecoder15decodeNextFrameEPhttm>: +{ + 8003424: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8003428: 4699 mov r9, r3 + assert((frameNumber > 0) && "SoftwareMJPEGDecoder decoding without frame data!"); + 800342a: 6943 ldr r3, [r0, #20] +{ + 800342c: b085 sub sp, #20 + 800342e: 4604 mov r4, r0 + 8003430: 460f mov r7, r1 + 8003432: 4690 mov r8, r2 + assert((frameNumber > 0) && "SoftwareMJPEGDecoder decoding without frame data!"); + 8003434: b92b cbnz r3, 8003442 <_ZN20SoftwareMJPEGDecoder15decodeNextFrameEPhttm+0x1e> + 8003436: 4b2a ldr r3, [pc, #168] ; (80034e0 <_ZN20SoftwareMJPEGDecoder15decodeNextFrameEPhttm+0xbc>) + 8003438: 2177 movs r1, #119 ; 0x77 + 800343a: 4a2a ldr r2, [pc, #168] ; (80034e4 <_ZN20SoftwareMJPEGDecoder15decodeNextFrameEPhttm+0xc0>) + 800343c: 482a ldr r0, [pc, #168] ; (80034e8 <_ZN20SoftwareMJPEGDecoder15decodeNextFrameEPhttm+0xc4>) + 800343e: f030 ff89 bl 8034354 <__assert_func> + readData(currentMovieOffset, 8); + 8003442: 2208 movs r2, #8 + 8003444: 6981 ldr r1, [r0, #24] + 8003446: f7ff fd9b bl 8002f80 <_ZN20SoftwareMJPEGDecoder8readDataEmm> + uint32_t streamNo = getU16(currentMovieOffset); + 800344a: 69a6 ldr r6, [r4, #24] + 800344c: 4620 mov r0, r4 + 800344e: 4631 mov r1, r6 + 8003450: f7ff fd87 bl 8002f62 <_ZN20SoftwareMJPEGDecoder6getU16Em> + uint32_t chunkType = getU16(currentMovieOffset + 2); + 8003454: 1cb1 adds r1, r6, #2 + uint32_t streamNo = getU16(currentMovieOffset); + 8003456: 4683 mov fp, r0 + uint32_t chunkType = getU16(currentMovieOffset + 2); + 8003458: 4620 mov r0, r4 + 800345a: f7ff fd82 bl 8002f62 <_ZN20SoftwareMJPEGDecoder6getU16Em> + uint32_t chunkSize = getU32(currentMovieOffset + 4); + 800345e: 1d31 adds r1, r6, #4 + uint32_t chunkType = getU16(currentMovieOffset + 2); + 8003460: 4682 mov sl, r0 + uint32_t chunkSize = getU32(currentMovieOffset + 4); + 8003462: 4620 mov r0, r4 + 8003464: f7ff fd68 bl 8002f38 <_ZN20SoftwareMJPEGDecoder6getU32Em> + 8003468: f106 0108 add.w r1, r6, #8 + if (currentMovieOffset + 8 + chunkSize < movieLength) + 800346c: 6aa3 ldr r3, [r4, #40] ; 0x28 + uint32_t chunkSize = getU32(currentMovieOffset + 4); + 800346e: 4605 mov r5, r0 + if (currentMovieOffset + 8 + chunkSize < movieLength) + 8003470: 1842 adds r2, r0, r1 + 8003472: 429a cmp r2, r3 + 8003474: d227 bcs.n 80034c6 <_ZN20SoftwareMJPEGDecoder15decodeNextFrameEPhttm+0xa2> + if (streamNo == STREAM0 && chunkType == TYPEDC && chunkSize > 0) + 8003476: f243 0330 movw r3, #12336 ; 0x3030 + 800347a: 459b cmp fp, r3 + 800347c: d117 bne.n 80034ae <_ZN20SoftwareMJPEGDecoder15decodeNextFrameEPhttm+0x8a> + 800347e: f246 3364 movw r3, #25444 ; 0x6364 + 8003482: 459a cmp sl, r3 + 8003484: d113 bne.n 80034ae <_ZN20SoftwareMJPEGDecoder15decodeNextFrameEPhttm+0x8a> + 8003486: b190 cbz r0, 80034ae <_ZN20SoftwareMJPEGDecoder15decodeNextFrameEPhttm+0x8a> + const uint8_t* chunk = readData(currentMovieOffset, chunkSize); + 8003488: 4602 mov r2, r0 + currentMovieOffset += 8; + 800348a: 61a1 str r1, [r4, #24] + const uint8_t* chunk = readData(currentMovieOffset, chunkSize); + 800348c: 4620 mov r0, r4 + 800348e: f7ff fd77 bl 8002f80 <_ZN20SoftwareMJPEGDecoder8readDataEmm> + decodeMJPEGFrame(chunk, chunkSize, buffer, buffer_width, buffer_height, buffer_stride); + 8003492: 9b0e ldr r3, [sp, #56] ; 0x38 + const uint8_t* chunk = readData(currentMovieOffset, chunkSize); + 8003494: 4601 mov r1, r0 + decodeMJPEGFrame(chunk, chunkSize, buffer, buffer_width, buffer_height, buffer_stride); + 8003496: 462a mov r2, r5 + 8003498: 4620 mov r0, r4 + 800349a: f8cd 8000 str.w r8, [sp] + 800349e: e9cd 9301 strd r9, r3, [sp, #4] + 80034a2: 463b mov r3, r7 + 80034a4: f7ff ffaf bl 8003406 <_ZN20SoftwareMJPEGDecoder16decodeMJPEGFrameEPKhmPhttm> + frameNumber++; + 80034a8: 6963 ldr r3, [r4, #20] + 80034aa: 3301 adds r3, #1 + 80034ac: 6163 str r3, [r4, #20] + currentMovieOffset += chunkSize; + 80034ae: 69a3 ldr r3, [r4, #24] + 80034b0: 442b add r3, r5 + if (chunkSize == 0) // Empty frame - Skip + 80034b2: b18d cbz r5, 80034d8 <_ZN20SoftwareMJPEGDecoder15decodeNextFrameEPhttm+0xb4> + currentMovieOffset += 8; + 80034b4: 61a3 str r3, [r4, #24] + currentMovieOffset = (currentMovieOffset + 1) & 0xFFFFFFFE; //pad to next word + 80034b6: 69a3 ldr r3, [r4, #24] + if (currentMovieOffset == lastFrameEnd) + 80034b8: 6a62 ldr r2, [r4, #36] ; 0x24 + currentMovieOffset = (currentMovieOffset + 1) & 0xFFFFFFFE; //pad to next word + 80034ba: 3301 adds r3, #1 + 80034bc: f023 0301 bic.w r3, r3, #1 + if (currentMovieOffset == lastFrameEnd) + 80034c0: 4293 cmp r3, r2 + currentMovieOffset = (currentMovieOffset + 1) & 0xFFFFFFFE; //pad to next word + 80034c2: 61a3 str r3, [r4, #24] + if (currentMovieOffset == lastFrameEnd) + 80034c4: d10a bne.n 80034dc <_ZN20SoftwareMJPEGDecoder15decodeNextFrameEPhttm+0xb8> + frameNumber = 1; + 80034c6: 2001 movs r0, #1 + currentMovieOffset = firstFrameOffset; //start over + 80034c8: 6a23 ldr r3, [r4, #32] + frameNumber = 1; + 80034ca: 6160 str r0, [r4, #20] + currentMovieOffset = firstFrameOffset; //start over + 80034cc: 61a3 str r3, [r4, #24] +} + 80034ce: f080 0001 eor.w r0, r0, #1 + 80034d2: b005 add sp, #20 + 80034d4: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + currentMovieOffset += 8; + 80034d8: 3308 adds r3, #8 + 80034da: e7eb b.n 80034b4 <_ZN20SoftwareMJPEGDecoder15decodeNextFrameEPhttm+0x90> + isCurrentFrameLast = false; + 80034dc: 2000 movs r0, #0 + 80034de: e7f6 b.n 80034ce <_ZN20SoftwareMJPEGDecoder15decodeNextFrameEPhttm+0xaa> + 80034e0: 080360bf .word 0x080360bf + 80034e4: 0803628e .word 0x0803628e + 80034e8: 08035fe3 .word 0x08035fe3 + +080034ec <_ZNK8touchgfx9PartitionINS_4meta8TypeListINS_12NoTransitionENS2_INS1_3NilES4_EEEELt1EE8capacityEv>: + }; + + virtual uint16_t capacity() const + { + return NUMBER_OF_ELEMENTS; + } + 80034ec: 2001 movs r0, #1 + 80034ee: 4770 bx lr + +080034f0 <_ZN8touchgfx9PartitionINS_4meta8TypeListINS_12NoTransitionENS2_INS1_3NilES4_EEEELt1EE12element_sizeEv>: + + virtual uint32_t element_size() + { + return sizeof(stBlocks[0]); + } + 80034f0: 200c movs r0, #12 + 80034f2: 4770 bx lr + +080034f4 <_ZN8touchgfx9PartitionINS_4meta8TypeListINS_12NoTransitionENS2_INS1_3NilES4_EEEELt1EE7elementEt>: + +protected: + virtual void* element(uint16_t index) + { + return &stBlocks[index]; + 80034f4: 230c movs r3, #12 + 80034f6: fb03 0001 mla r0, r3, r1, r0 + } + 80034fa: 3008 adds r0, #8 + 80034fc: 4770 bx lr + +080034fe <_ZNK8touchgfx9PartitionINS_4meta8TypeListINS_12NoTransitionENS2_INS1_3NilES4_EEEELt1EE7elementEt>: + + virtual const void* element(uint16_t index) const + { + return &stBlocks[index]; + 80034fe: 230c movs r3, #12 + 8003500: fb03 0001 mla r0, r3, r1, r0 + } + 8003504: 3008 adds r0, #8 + 8003506: 4770 bx lr + +08003508 <_ZNK8touchgfx9PartitionINS_4meta8TypeListI14MainScreenViewNS2_INS1_3NilES4_EEEELt1EE8capacityEv>: + } + 8003508: 2001 movs r0, #1 + 800350a: 4770 bx lr + +0800350c <_ZN8touchgfx9PartitionINS_4meta8TypeListI14MainScreenViewNS2_INS1_3NilES4_EEEELt1EE12element_sizeEv>: + } + 800350c: f241 00d8 movw r0, #4312 ; 0x10d8 + 8003510: 4770 bx lr + +08003512 <_ZN8touchgfx9PartitionINS_4meta8TypeListI14MainScreenViewNS2_INS1_3NilES4_EEEELt1EE7elementEt>: + return &stBlocks[index]; + 8003512: f241 03d8 movw r3, #4312 ; 0x10d8 + 8003516: fb03 0001 mla r0, r3, r1, r0 + } + 800351a: 3008 adds r0, #8 + 800351c: 4770 bx lr + +0800351e <_ZNK8touchgfx9PartitionINS_4meta8TypeListI14MainScreenViewNS2_INS1_3NilES4_EEEELt1EE7elementEt>: + return &stBlocks[index]; + 800351e: f241 03d8 movw r3, #4312 ; 0x10d8 + 8003522: fb03 0001 mla r0, r3, r1, r0 + } + 8003526: 3008 adds r0, #8 + 8003528: 4770 bx lr + +0800352a <_ZNK8touchgfx9PartitionINS_4meta8TypeListI19MainScreenPresenterNS2_INS1_3NilES4_EEEELt1EE8capacityEv>: + } + 800352a: 2001 movs r0, #1 + 800352c: 4770 bx lr + +0800352e <_ZN8touchgfx9PartitionINS_4meta8TypeListI19MainScreenPresenterNS2_INS1_3NilES4_EEEELt1EE12element_sizeEv>: + } + 800352e: 2010 movs r0, #16 + 8003530: 4770 bx lr + +08003532 <_ZN8touchgfx9PartitionINS_4meta8TypeListI19MainScreenPresenterNS2_INS1_3NilES4_EEEELt1EE7elementEt>: + return &stBlocks[index]; + 8003532: eb00 1001 add.w r0, r0, r1, lsl #4 + } + 8003536: 3008 adds r0, #8 + 8003538: 4770 bx lr + +0800353a <_ZNK8touchgfx9PartitionINS_4meta8TypeListI19MainScreenPresenterNS2_INS1_3NilES4_EEEELt1EE7elementEt>: + return &stBlocks[index]; + 800353a: eb00 1001 add.w r0, r0, r1, lsl #4 + } + 800353e: 3008 adds r0, #8 + 8003540: 4770 bx lr + +08003542 <_ZN16FrontendHeapBase15gotoStartScreenER19FrontendApplication>: + */ + typedef touchgfx::meta::select_type_maxsize< GeneratedTransitionTypes >::type MaxGeneratedTransitionType; + + virtual void gotoStartScreen(FrontendApplication& app) + { + app.gotoMainScreenScreenNoTransition(); + 8003542: 4608 mov r0, r1 + 8003544: f000 be0e b.w 8004164 <_ZN23FrontendApplicationBase32gotoMainScreenScreenNoTransitionEv> + +08003548 <_ZN8touchgfx9PartitionINS_4meta8TypeListINS_12NoTransitionENS2_INS1_3NilES4_EEEELt1EED1Ev>: +class Partition : public AbstractPartition + 8003548: 4b03 ldr r3, [pc, #12] ; (8003558 <_ZN8touchgfx9PartitionINS_4meta8TypeListINS_12NoTransitionENS2_INS1_3NilES4_EEEELt1EED1Ev+0x10>) + 800354a: b510 push {r4, lr} + 800354c: 4604 mov r4, r0 + 800354e: 6003 str r3, [r0, #0] + 8003550: f01c fb35 bl 801fbbe <_ZN8touchgfx17AbstractPartitionD1Ev> + 8003554: 4620 mov r0, r4 + 8003556: bd10 pop {r4, pc} + 8003558: 0803639c .word 0x0803639c + +0800355c <_ZN8touchgfx9PartitionINS_4meta8TypeListINS_12NoTransitionENS2_INS1_3NilES4_EEEELt1EED0Ev>: + 800355c: b510 push {r4, lr} + 800355e: 4604 mov r4, r0 + 8003560: f7ff fff2 bl 8003548 <_ZN8touchgfx9PartitionINS_4meta8TypeListINS_12NoTransitionENS2_INS1_3NilES4_EEEELt1EED1Ev> + 8003564: 2114 movs r1, #20 + 8003566: 4620 mov r0, r4 + 8003568: f030 fec5 bl 80342f6 <_ZdlPvj> + 800356c: 4620 mov r0, r4 + 800356e: bd10 pop {r4, pc} + +08003570 <_ZN8touchgfx9PartitionINS_4meta8TypeListI14MainScreenViewNS2_INS1_3NilES4_EEEELt1EED1Ev>: + 8003570: 4b03 ldr r3, [pc, #12] ; (8003580 <_ZN8touchgfx9PartitionINS_4meta8TypeListI14MainScreenViewNS2_INS1_3NilES4_EEEELt1EED1Ev+0x10>) + 8003572: b510 push {r4, lr} + 8003574: 4604 mov r4, r0 + 8003576: 6003 str r3, [r0, #0] + 8003578: f01c fb21 bl 801fbbe <_ZN8touchgfx17AbstractPartitionD1Ev> + 800357c: 4620 mov r0, r4 + 800357e: bd10 pop {r4, pc} + 8003580: 08036368 .word 0x08036368 + +08003584 <_ZN8touchgfx9PartitionINS_4meta8TypeListI14MainScreenViewNS2_INS1_3NilES4_EEEELt1EED0Ev>: + 8003584: b510 push {r4, lr} + 8003586: 4604 mov r4, r0 + 8003588: f7ff fff2 bl 8003570 <_ZN8touchgfx9PartitionINS_4meta8TypeListI14MainScreenViewNS2_INS1_3NilES4_EEEELt1EED1Ev> + 800358c: f44f 5187 mov.w r1, #4320 ; 0x10e0 + 8003590: 4620 mov r0, r4 + 8003592: f030 feb0 bl 80342f6 <_ZdlPvj> + 8003596: 4620 mov r0, r4 + 8003598: bd10 pop {r4, pc} + ... + +0800359c <_ZN8touchgfx9PartitionINS_4meta8TypeListI19MainScreenPresenterNS2_INS1_3NilES4_EEEELt1EED1Ev>: + 800359c: 4b03 ldr r3, [pc, #12] ; (80035ac <_ZN8touchgfx9PartitionINS_4meta8TypeListI19MainScreenPresenterNS2_INS1_3NilES4_EEEELt1EED1Ev+0x10>) + 800359e: b510 push {r4, lr} + 80035a0: 4604 mov r4, r0 + 80035a2: 6003 str r3, [r0, #0] + 80035a4: f01c fb0b bl 801fbbe <_ZN8touchgfx17AbstractPartitionD1Ev> + 80035a8: 4620 mov r0, r4 + 80035aa: bd10 pop {r4, pc} + 80035ac: 08036334 .word 0x08036334 + +080035b0 <_ZN8touchgfx9PartitionINS_4meta8TypeListI19MainScreenPresenterNS2_INS1_3NilES4_EEEELt1EED0Ev>: + 80035b0: b510 push {r4, lr} + 80035b2: 4604 mov r4, r0 + 80035b4: f7ff fff2 bl 800359c <_ZN8touchgfx9PartitionINS_4meta8TypeListI19MainScreenPresenterNS2_INS1_3NilES4_EEEELt1EED1Ev> + 80035b8: 2118 movs r1, #24 + 80035ba: 4620 mov r0, r4 + 80035bc: f030 fe9b bl 80342f6 <_ZdlPvj> + 80035c0: 4620 mov r0, r4 + 80035c2: bd10 pop {r4, pc} + +080035c4 <_ZN12FrontendHeapD1Ev>: +#ifndef FRONTENDHEAP_HPP +#define FRONTENDHEAP_HPP + +#include + +class FrontendHeap : public FrontendHeapBase + 80035c4: 4b09 ldr r3, [pc, #36] ; (80035ec <_ZN12FrontendHeapD1Ev+0x28>) + 80035c6: b510 push {r4, lr} + 80035c8: 4604 mov r4, r0 + 80035ca: 6003 str r3, [r0, #0] + 80035cc: f500 5088 add.w r0, r0, #4352 ; 0x1100 + 80035d0: 300c adds r0, #12 + 80035d2: f7ff ffb9 bl 8003548 <_ZN8touchgfx9PartitionINS_4meta8TypeListINS_12NoTransitionENS2_INS1_3NilES4_EEEELt1EED1Ev> + 80035d6: f104 002c add.w r0, r4, #44 ; 0x2c + 80035da: f7ff ffc9 bl 8003570 <_ZN8touchgfx9PartitionINS_4meta8TypeListI14MainScreenViewNS2_INS1_3NilES4_EEEELt1EED1Ev> + 80035de: f104 0014 add.w r0, r4, #20 + 80035e2: f7ff ffdb bl 800359c <_ZN8touchgfx9PartitionINS_4meta8TypeListI19MainScreenPresenterNS2_INS1_3NilES4_EEEELt1EED1Ev> + 80035e6: 4620 mov r0, r4 + 80035e8: bd10 pop {r4, pc} + 80035ea: bf00 nop + 80035ec: 080363d0 .word 0x080363d0 + +080035f0 <__tcf_0>: + > > CombinedTransitionTypes; + typedef touchgfx::meta::select_type_maxsize< CombinedTransitionTypes >::type MaxTransitionType; + + static FrontendHeap& getInstance() + { + static FrontendHeap instance; + 80035f0: b508 push {r3, lr} + 80035f2: 4802 ldr r0, [pc, #8] ; (80035fc <__tcf_0+0xc>) + 80035f4: f7ff ffe6 bl 80035c4 <_ZN12FrontendHeapD1Ev> + 80035f8: bd08 pop {r3, pc} + 80035fa: bf00 nop + 80035fc: 20005170 .word 0x20005170 + +08003600 <_ZN12FrontendHeapD0Ev>: +class FrontendHeap : public FrontendHeapBase + 8003600: b510 push {r4, lr} + 8003602: 4604 mov r4, r0 + 8003604: f7ff ffde bl 80035c4 <_ZN12FrontendHeapD1Ev> + 8003608: f241 2188 movw r1, #4744 ; 0x1288 + 800360c: 4620 mov r0, r4 + 800360e: f030 fe72 bl 80342f6 <_ZdlPvj> + 8003612: 4620 mov r0, r4 + 8003614: bd10 pop {r4, pc} + ... + +08003618 : +static ApplicationFontProvider fontProvider; +static Texts texts; +static TouchGFXHAL hal(dma, display, tc, 480, 272); + +void touchgfx_init() +{ + 8003618: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr} + Bitmap::registerBitmapDatabase(BitmapDatabase::getInstance(), BitmapDatabase::getInstanceSize()); + 800361c: f000 fc20 bl 8003e60 <_ZN14BitmapDatabase11getInstanceEv> + 8003620: 2400 movs r4, #0 + 8003622: 4605 mov r5, r0 + 8003624: f000 fc20 bl 8003e68 <_ZN14BitmapDatabase15getInstanceSizeEv> + 8003628: 4623 mov r3, r4 + 800362a: 4601 mov r1, r0 + 800362c: 4622 mov r2, r4 + 800362e: 4628 mov r0, r5 + 8003630: 9400 str r4, [sp, #0] + 8003632: f023 f9fd bl 8026a30 <_ZN8touchgfx6Bitmap22registerBitmapDatabaseEPKNS0_10BitmapDataEtPtmm> + * + * @param t The array of texts. + */ + static void registerTexts(const Texts* t) + { + texts = t; + 8003636: 4b26 ldr r3, [pc, #152] ; (80036d0 ) + 8003638: 4a26 ldr r2, [pc, #152] ; (80036d4 ) + TypedText::registerTexts(&texts); + Texts::setLanguage(0); + 800363a: 4620 mov r0, r4 + static FrontendHeap instance; + 800363c: 4d26 ldr r5, [pc, #152] ; (80036d8 ) + 800363e: 601a str r2, [r3, #0] + 8003640: f001 fb56 bl 8004cf0 <_ZN8touchgfx5Texts11setLanguageEt> + + FontManager::setFontProvider(&fontProvider); + 8003644: 4825 ldr r0, [pc, #148] ; (80036dc ) + 8003646: f023 f95b bl 8026900 <_ZN8touchgfx11FontManager15setFontProviderEPNS_12FontProviderE> + 800364a: 682b ldr r3, [r5, #0] + 800364c: f3bf 8f5b dmb ish + 8003650: 07db lsls r3, r3, #31 + 8003652: d437 bmi.n 80036c4 + 8003654: 4628 mov r0, r5 + 8003656: f030 fe50 bl 80342fa <__cxa_guard_acquire> + 800365a: b398 cbz r0, 80036c4 + */ + MVPHeap(AbstractPartition& pres, + AbstractPartition& scr, + AbstractPartition& tra, + MVPApplication& app) + : presenterStorage(pres), + 800365c: 4c20 ldr r4, [pc, #128] ; (80036e0 ) + Model model; + FrontendApplication app; + +private: + FrontendHeap() : FrontendHeapBase(presenters, views, transitions, app), + app(model, *this) + 800365e: 4b21 ldr r3, [pc, #132] ; (80036e4 ) + screenStorage(scr), + 8003660: f104 082c add.w r8, r4, #44 ; 0x2c + : presenterStorage(pres), + 8003664: f104 0014 add.w r0, r4, #20 + 8003668: 6023 str r3, [r4, #0] + transitionStorage(tra), + frontendApplication(app) + 800366a: f508 5688 add.w r6, r8, #4352 ; 0x1100 + transitionStorage(tra), + 800366e: f508 5787 add.w r7, r8, #4320 ; 0x10e0 + : presenterStorage(pres), + 8003672: 6060 str r0, [r4, #4] + screenStorage(scr), + 8003674: f8c4 8008 str.w r8, [r4, #8] + transitionStorage(tra), + 8003678: 60e7 str r7, [r4, #12] + frontendApplication(app) + 800367a: 6126 str r6, [r4, #16] + 800367c: f01c faa0 bl 801fbc0 <_ZN8touchgfx17AbstractPartitionC1Ev> + 8003680: 4b19 ldr r3, [pc, #100] ; (80036e8 ) + 8003682: 4640 mov r0, r8 + 8003684: 6163 str r3, [r4, #20] + 8003686: f01c fa9b bl 801fbc0 <_ZN8touchgfx17AbstractPartitionC1Ev> + 800368a: 4b18 ldr r3, [pc, #96] ; (80036ec ) + 800368c: 4638 mov r0, r7 + 800368e: 62e3 str r3, [r4, #44] ; 0x2c + 8003690: f01c fa96 bl 801fbc0 <_ZN8touchgfx17AbstractPartitionC1Ev> + 8003694: f504 5380 add.w r3, r4, #4096 ; 0x1000 + 8003698: 4a15 ldr r2, [pc, #84] ; (80036f0 ) + 800369a: f504 5089 add.w r0, r4, #4384 ; 0x1120 + 800369e: f8c3 210c str.w r2, [r3, #268] ; 0x10c + 80036a2: f001 fc15 bl 8004ed0 <_ZN5ModelC1Ev> + 80036a6: 4622 mov r2, r4 + 80036a8: f504 5189 add.w r1, r4, #4384 ; 0x1120 + 80036ac: 4630 mov r0, r6 + 80036ae: f001 fb91 bl 8004dd4 <_ZN19FrontendApplicationC1ER5ModelR12FrontendHeap> + 80036b2: 4630 mov r0, r6 + 80036b4: f000 fd56 bl 8004164 <_ZN23FrontendApplicationBase32gotoMainScreenScreenNoTransitionEv> + static FrontendHeap instance; + 80036b8: 480e ldr r0, [pc, #56] ; (80036f4 ) + 80036ba: f030 fe69 bl 8034390 + 80036be: 4628 mov r0, r5 + 80036c0: f030 fe27 bl 8034312 <__cxa_guard_release> + (void)heap; + + /* + * Initialize TouchGFX + */ + hal.initialize(); + 80036c4: 480c ldr r0, [pc, #48] ; (80036f8 ) +} + 80036c6: b002 add sp, #8 + 80036c8: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} + hal.initialize(); + 80036cc: f7ff b898 b.w 8002800 <_ZN11TouchGFXHAL10initializeEv> + 80036d0: 2001e790 .word 0x2001e790 + 80036d4: 20007218 .word 0x20007218 + 80036d8: 2000516c .word 0x2000516c + 80036dc: 2000001c .word 0x2000001c + 80036e0: 20005170 .word 0x20005170 + 80036e4: 080363d0 .word 0x080363d0 + 80036e8: 08036334 .word 0x08036334 + 80036ec: 08036368 .word 0x08036368 + 80036f0: 0803639c .word 0x0803639c + 80036f4: 080035f1 .word 0x080035f1 + 80036f8: 2000719c .word 0x2000719c + +080036fc : + +void touchgfx_components_init() +{ +} + 80036fc: 4770 bx lr + ... + +08003700 : + * Main event loop. Will wait for VSYNC signal, and then process next frame. Call + * this function from your GUI task. + * + * Note This function never returns + */ + hal.taskEntry(); + 8003700: 4801 ldr r0, [pc, #4] ; (8003708 ) + 8003702: f01d b844 b.w 802078e <_ZN8touchgfx3HAL9taskEntryEv> + 8003706: bf00 nop + 8003708: 2000719c .word 0x2000719c + +0800370c <_GLOBAL__sub_I_touchgfx_init>: +} + 800370c: b570 push {r4, r5, r6, lr} +static STM32DMA dma; + 800370e: 4e22 ldr r6, [pc, #136] ; (8003798 <_GLOBAL__sub_I_touchgfx_init+0x8c>) +{ +public: + + STM32TouchController() {} + 8003710: 4b22 ldr r3, [pc, #136] ; (800379c <_GLOBAL__sub_I_touchgfx_init+0x90>) + 8003712: 4c23 ldr r4, [pc, #140] ; (80037a0 <_GLOBAL__sub_I_touchgfx_init+0x94>) + 8003714: 4630 mov r0, r6 +static LCD16bpp display; + 8003716: 4d23 ldr r5, [pc, #140] ; (80037a4 <_GLOBAL__sub_I_touchgfx_init+0x98>) + 8003718: 6023 str r3, [r4, #0] +static STM32DMA dma; + 800371a: f7ff fa11 bl 8002b40 <_ZN8STM32DMAC1Ev> +static LCD16bpp display; + 800371e: 4628 mov r0, r5 + 8003720: f027 fc60 bl 802afe4 <_ZN8touchgfx8LCD16bppC1Ev> + : dma(dmaInterface), + 8003724: 4b20 ldr r3, [pc, #128] ; (80037a8 <_GLOBAL__sub_I_touchgfx_init+0x9c>) + mcuInstrumentation(0), + 8003726: 2200 movs r2, #0 + refreshStrategy(REFRESH_STRATEGY_DEFAULT), + 8003728: f44f 7180 mov.w r1, #256 ; 0x100 + FRAME_BUFFER_WIDTH = DISPLAY_WIDTH = width; + 800372c: 481f ldr r0, [pc, #124] ; (80037ac <_GLOBAL__sub_I_touchgfx_init+0xa0>) + }; + +public: + /** Default constructor. Does nothing. */ + Gestures() + : drag(), listener(0), dragThresholdValue(0) + 800372e: 861a strh r2, [r3, #48] ; 0x30 + useAuxiliaryLCD(false), + 8003730: f883 2058 strb.w r2, [r3, #88] ; 0x58 + lastY(0), + 8003734: 665a str r2, [r3, #100] ; 0x64 + updateMCULoad(0), + 8003736: f883 2070 strb.w r2, [r3, #112] ; 0x70 + cc_begin(0), + 800373a: 675a str r2, [r3, #116] ; 0x74 + touchController(touchCtrl), + 800373c: 60dc str r4, [r3, #12] + auxiliaryLCD(0), + 800373e: e9c3 1212 strd r1, r2, [r3, #72] ; 0x48 + touchSampleRate(1), + 8003742: 491b ldr r1, [pc, #108] ; (80037b0 <_GLOBAL__sub_I_touchgfx_init+0xa4>) + vSyncCompensationEnabled(false), + 8003744: e9c3 121a strd r1, r2, [r3, #104] ; 0x68 + requestedOrientation(ORIENTATION_LANDSCAPE), + 8003748: 491a ldr r1, [pc, #104] ; (80037b4 <_GLOBAL__sub_I_touchgfx_init+0xa8>) + 800374a: 6799 str r1, [r3, #120] ; 0x78 + instance = this; + 800374c: 491a ldr r1, [pc, #104] ; (80037b8 <_GLOBAL__sub_I_touchgfx_init+0xac>) + 800374e: 600b str r3, [r1, #0] + FRAME_BUFFER_WIDTH = DISPLAY_WIDTH = width; + 8003750: f44f 71f0 mov.w r1, #480 ; 0x1e0 + 8003754: 8001 strh r1, [r0, #0] + 8003756: 4819 ldr r0, [pc, #100] ; (80037bc <_GLOBAL__sub_I_touchgfx_init+0xb0>) + 8003758: 8001 strh r1, [r0, #0] + FRAME_BUFFER_HEIGHT = DISPLAY_HEIGHT = height; + 800375a: f44f 7188 mov.w r1, #272 ; 0x110 + 800375e: 4818 ldr r0, [pc, #96] ; (80037c0 <_GLOBAL__sub_I_touchgfx_init+0xb4>) + buttonController(0), + 8003760: e9c3 2204 strd r2, r2, [r3, #16] + 8003764: e9c3 2206 strd r2, r2, [r3, #24] + 8003768: e9c3 2208 strd r2, r2, [r3, #32] + 800376c: e9c3 220a strd r2, r2, [r3, #40] ; 0x28 + frameBuffer0(0), + 8003770: e9c3 220e strd r2, r2, [r3, #56] ; 0x38 + frameBuffer2(0), + 8003774: e9c3 2210 strd r2, r2, [r3, #64] ; 0x40 + : x(0), y(0), width(0), height(0) + 8003778: e9c3 2214 strd r2, r2, [r3, #80] ; 0x50 + lastX(0), + 800377c: e9c3 2217 strd r2, r2, [r3, #92] ; 0x5c + lcdRef(display), + 8003780: e9c3 6501 strd r6, r5, [r3, #4] + FRAME_BUFFER_HEIGHT = DISPLAY_HEIGHT = height; + 8003784: 8001 strh r1, [r0, #0] + 8003786: 480f ldr r0, [pc, #60] ; (80037c4 <_GLOBAL__sub_I_touchgfx_init+0xb8>) + nativeDisplayOrientation = ((width >= height) ? ORIENTATION_LANDSCAPE : ORIENTATION_PORTRAIT); + 8003788: f883 2034 strb.w r2, [r3, #52] ; 0x34 + FRAME_BUFFER_HEIGHT = DISPLAY_HEIGHT = height; + 800378c: 8001 strh r1, [r0, #0] + DISPLAY_ROTATION = rotate0; + 800378e: 490e ldr r1, [pc, #56] ; (80037c8 <_GLOBAL__sub_I_touchgfx_init+0xbc>) + 8003790: 700a strb r2, [r1, #0] + * @param [in,out] display Reference to LCD interface. + * @param [in,out] tc Reference to Touch Controller driver. + * @param width Width of the display. + * @param height Height of the display. + */ + TouchGFXHAL(touchgfx::DMA_Interface& dma, touchgfx::LCD& display, touchgfx::TouchController& tc, uint16_t width, uint16_t height) : TouchGFXGeneratedHAL(dma, display, tc, width, height) + 8003792: 4a0e ldr r2, [pc, #56] ; (80037cc <_GLOBAL__sub_I_touchgfx_init+0xc0>) + 8003794: 601a str r2, [r3, #0] +} + 8003796: bd70 pop {r4, r5, r6, pc} + 8003798: 200063fc .word 0x200063fc + 800379c: 08035a20 .word 0x08035a20 + 80037a0: 200063f8 .word 0x200063f8 + 80037a4: 2000721c .word 0x2000721c + 80037a8: 2000719c .word 0x2000719c + 80037ac: 2001e728 .word 0x2001e728 + 80037b0: 01000001 .word 0x01000001 + 80037b4: 01010000 .word 0x01010000 + 80037b8: 2001e734 .word 0x2001e734 + 80037bc: 2001e72e .word 0x2001e72e + 80037c0: 2001e72a .word 0x2001e72a + 80037c4: 2001e730 .word 0x2001e730 + 80037c8: 2001e72c .word 0x2001e72c + 80037cc: 08035bac .word 0x08035bac + +080037d0 <_GLOBAL__sub_D_touchgfx_init>: +static STM32DMA dma; + 80037d0: 4801 ldr r0, [pc, #4] ; (80037d8 <_GLOBAL__sub_D_touchgfx_init+0x8>) + 80037d2: f7ff b991 b.w 8002af8 <_ZN8STM32DMAD1Ev> + 80037d6: bf00 nop + 80037d8: 200063fc .word 0x200063fc + +080037dc <_ZN20TouchGFXGeneratedHAL19configureInterruptsEv>: + NVIC->IP[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + 80037dc: 4b03 ldr r3, [pc, #12] ; (80037ec <_ZN20TouchGFXGeneratedHAL19configureInterruptsEv+0x10>) + 80037de: 2290 movs r2, #144 ; 0x90 + 80037e0: f883 235a strb.w r2, [r3, #858] ; 0x35a + 80037e4: f883 2358 strb.w r2, [r3, #856] ; 0x358 + +void TouchGFXGeneratedHAL::configureInterrupts() +{ + NVIC_SetPriority(DMA2D_IRQn, 9); + NVIC_SetPriority(LTDC_IRQn, 9); +} + 80037e8: 4770 bx lr + 80037ea: bf00 nop + 80037ec: e000e100 .word 0xe000e100 + +080037f0 <_ZN20TouchGFXGeneratedHAL28enableLCDControllerInterruptEv>: + NVIC_DisableIRQ(LTDC_IRQn); +} + +void TouchGFXGeneratedHAL::enableLCDControllerInterrupt() +{ + lcd_int_active_line = (LTDC->BPCR & 0x7FF) - 1; + 80037f0: 4a09 ldr r2, [pc, #36] ; (8003818 <_ZN20TouchGFXGeneratedHAL28enableLCDControllerInterruptEv+0x28>) + 80037f2: 490a ldr r1, [pc, #40] ; (800381c <_ZN20TouchGFXGeneratedHAL28enableLCDControllerInterruptEv+0x2c>) + 80037f4: 68d3 ldr r3, [r2, #12] + lcd_int_porch_line = (LTDC->AWCR & 0x7FF) - 1; + 80037f6: 480a ldr r0, [pc, #40] ; (8003820 <_ZN20TouchGFXGeneratedHAL28enableLCDControllerInterruptEv+0x30>) + lcd_int_active_line = (LTDC->BPCR & 0x7FF) - 1; + 80037f8: f3c3 030a ubfx r3, r3, #0, #11 + 80037fc: 3b01 subs r3, #1 + 80037fe: b29b uxth r3, r3 + 8003800: 800b strh r3, [r1, #0] + lcd_int_porch_line = (LTDC->AWCR & 0x7FF) - 1; + 8003802: 6911 ldr r1, [r2, #16] + 8003804: f3c1 010a ubfx r1, r1, #0, #11 + 8003808: 3901 subs r1, #1 + 800380a: 8001 strh r1, [r0, #0] + + /* Sets the Line Interrupt position */ + LTDC->LIPCR = lcd_int_active_line; + 800380c: 6413 str r3, [r2, #64] ; 0x40 + /* Line Interrupt Enable */ + LTDC->IER |= LTDC_IER_LIE; + 800380e: 6b53 ldr r3, [r2, #52] ; 0x34 + 8003810: f043 0301 orr.w r3, r3, #1 + 8003814: 6353 str r3, [r2, #52] ; 0x34 +} + 8003816: 4770 bx lr + 8003818: 40016800 .word 0x40016800 + 800381c: 200072a2 .word 0x200072a2 + 8003820: 200072a0 .word 0x200072a0 + +08003824 <_ZNK20TouchGFXGeneratedHAL17getTFTFrameBufferEv>: + videoController.endFrame(); +} + +uint16_t* TouchGFXGeneratedHAL::getTFTFrameBuffer() const +{ + return (uint16_t*)LTDC_Layer1->CFBAR; + 8003824: 4b01 ldr r3, [pc, #4] ; (800382c <_ZNK20TouchGFXGeneratedHAL17getTFTFrameBufferEv+0x8>) + 8003826: f8d3 00ac ldr.w r0, [r3, #172] ; 0xac +} + 800382a: 4770 bx lr + 800382c: 40016800 .word 0x40016800 + +08003830 <_ZN20TouchGFXGeneratedHAL17setTFTFrameBufferEPt>: + +void TouchGFXGeneratedHAL::setTFTFrameBuffer(uint16_t* adr) +{ + LTDC_Layer1->CFBAR = (uint32_t)adr; + 8003830: 4b02 ldr r3, [pc, #8] ; (800383c <_ZN20TouchGFXGeneratedHAL17setTFTFrameBufferEPt+0xc>) + + /* Reload immediate */ + LTDC->SRCR = (uint32_t)LTDC_SRCR_IMR; + 8003832: 2201 movs r2, #1 + LTDC_Layer1->CFBAR = (uint32_t)adr; + 8003834: f8c3 10ac str.w r1, [r3, #172] ; 0xac + LTDC->SRCR = (uint32_t)LTDC_SRCR_IMR; + 8003838: 625a str r2, [r3, #36] ; 0x24 +} + 800383a: 4770 bx lr + 800383c: 40016800 .word 0x40016800 + +08003840 <_ZN20TouchGFXGeneratedHAL10FlushCacheEv>: +{ + // If the framebuffer is placed in Write Through cached memory (e.g. SRAM) then + // the DCache must be flushed prior to DMA2D accessing it. That's done + // using the function SCB_CleanInvalidateDCache(). Remember to enable "CPU Cache" in the + // "System Core" settings for "Cortex M7" in CubeMX in order for this function call to work. + if (SCB->CCR & SCB_CCR_DC_Msk) + 8003840: 4a12 ldr r2, [pc, #72] ; (800388c <_ZN20TouchGFXGeneratedHAL10FlushCacheEv+0x4c>) + 8003842: 6953 ldr r3, [r2, #20] + 8003844: 03db lsls r3, r3, #15 +{ + 8003846: b570 push {r4, r5, r6, lr} + if (SCB->CCR & SCB_CCR_DC_Msk) + 8003848: d51e bpl.n 8003888 <_ZN20TouchGFXGeneratedHAL10FlushCacheEv+0x48> + SCB->CSSELR = 0U; /*(0U << 1U) | 0U;*/ /* Level 1 data cache */ + 800384a: 2300 movs r3, #0 + 800384c: f8c2 3084 str.w r3, [r2, #132] ; 0x84 + __ASM volatile ("dsb 0xF":::"memory"); + 8003850: f3bf 8f4f dsb sy + ccsidr = SCB->CCSIDR; + 8003854: f8d2 3080 ldr.w r3, [r2, #128] ; 0x80 + SCB->DCCISW = (((sets << SCB_DCCISW_SET_Pos) & SCB_DCCISW_SET_Msk) | + 8003858: f643 74e0 movw r4, #16352 ; 0x3fe0 + ways = (uint32_t)(CCSIDR_WAYS(ccsidr)); + 800385c: f3c3 00c9 ubfx r0, r3, #3, #10 + sets = (uint32_t)(CCSIDR_SETS(ccsidr)); + 8003860: f3c3 334e ubfx r3, r3, #13, #15 + 8003864: 015b lsls r3, r3, #5 + SCB->DCCISW = (((sets << SCB_DCCISW_SET_Pos) & SCB_DCCISW_SET_Msk) | + 8003866: ea03 0604 and.w r6, r3, r4 + ways = (uint32_t)(CCSIDR_WAYS(ccsidr)); + 800386a: 4601 mov r1, r0 + SCB->DCCISW = (((sets << SCB_DCCISW_SET_Pos) & SCB_DCCISW_SET_Msk) | + 800386c: ea46 7581 orr.w r5, r6, r1, lsl #30 + } while (ways-- != 0U); + 8003870: 3901 subs r1, #1 + SCB->DCCISW = (((sets << SCB_DCCISW_SET_Pos) & SCB_DCCISW_SET_Msk) | + 8003872: f8c2 5274 str.w r5, [r2, #628] ; 0x274 + } while (ways-- != 0U); + 8003876: d2f9 bcs.n 800386c <_ZN20TouchGFXGeneratedHAL10FlushCacheEv+0x2c> + } while(sets-- != 0U); + 8003878: 3b20 subs r3, #32 + 800387a: f113 0f20 cmn.w r3, #32 + 800387e: d1f2 bne.n 8003866 <_ZN20TouchGFXGeneratedHAL10FlushCacheEv+0x26> + 8003880: f3bf 8f4f dsb sy + __ASM volatile ("isb 0xF":::"memory"); + 8003884: f3bf 8f6f isb sy + { + SCB_CleanInvalidateDCache(); + } +} + 8003888: bd70 pop {r4, r5, r6, pc} + 800388a: bf00 nop + 800388c: e000ed00 .word 0xe000ed00 + +08003890 <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EED1Ev>: +#define SEM_TYPE osSemaphoreId_t +#define SEM_WAIT(s) osSemaphoreAcquire(s, osWaitForever) +#endif + +template +class DoubleBufferedVideoController : public touchgfx::VideoController + 8003890: 4770 bx lr + +08003892 <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE21unregisterVideoWidgetEm>: + virtual void unregisterVideoWidget(const Handle handle) + { + // Running in UI thread + + // Reset active for this handle + streams[handle].isActive = false; + 8003892: 2338 movs r3, #56 ; 0x38 + 8003894: 2200 movs r2, #0 + 8003896: fb01 3303 mla r3, r1, r3, r3 + 800389a: 54c2 strb r2, [r0, r3] + bool oneIsActive = false; + for (uint32_t i = 0; i < no_streams; i++) + { + oneIsActive |= streams[i].isActive; + } + if (oneIsActive == false) + 800389c: f890 3038 ldrb.w r3, [r0, #56] ; 0x38 + 80038a0: b90b cbnz r3, 80038a6 <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE21unregisterVideoWidgetEm+0x14> + { + // Reset memory usage + topBufferRGB = bufferRGB; + 80038a2: 6c03 ldr r3, [r0, #64] ; 0x40 + 80038a4: 6483 str r3, [r0, #72] ; 0x48 + } + } + 80038a6: 4770 bx lr + +080038a8 <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE4drawEmRKNS0_4RectERKNS0_11VideoWidgetE>: + virtual void draw(const Handle handle, const touchgfx::Rect& invalidatedArea, const touchgfx::VideoWidget& widget) + { + // Running in UI thread + + // Nothing in this decoder + } + 80038a8: 4770 bx lr + ... + +080038ac <_ZN20TouchGFXGeneratedHAL10initializeEv>: +{ + 80038ac: b538 push {r3, r4, r5, lr} + 80038ae: 4604 mov r4, r0 + HAL::initialize(); + 80038b0: f01c ff59 bl 8020766 <_ZN8touchgfx3HAL10initializeEv> + registerEventListener(*(Application::getInstance())); + 80038b4: 6823 ldr r3, [r4, #0] + 80038b6: 6e5d ldr r5, [r3, #100] ; 0x64 + 80038b8: f01f ff96 bl 80237e8 <_ZN8touchgfx11Application11getInstanceEv> + 80038bc: 4601 mov r1, r0 + 80038be: 4620 mov r0, r4 + 80038c0: 47a8 blx r5 + setFrameBufferStartAddresses((void*)frameBuf, (void*)(frameBuf + sizeof(frameBuf) / (sizeof(uint32_t) * 2)), (void*)0); + 80038c2: 6823 ldr r3, [r4, #0] + 80038c4: 4a08 ldr r2, [pc, #32] ; (80038e8 <_ZN20TouchGFXGeneratedHAL10initializeEv+0x3c>) + 80038c6: 4620 mov r0, r4 + 80038c8: f8d3 5088 ldr.w r5, [r3, #136] ; 0x88 + 80038cc: 2300 movs r3, #0 + 80038ce: f5a2 317f sub.w r1, r2, #261120 ; 0x3fc00 + 80038d2: 47a8 blx r5 + void addDecoder(MJPEGDecoder& decoder, uint32_t index) + { + // Running in UI thread / main + + assert(index < no_streams); + mjpegDecoders[index] = &decoder; + 80038d4: 4b05 ldr r3, [pc, #20] ; (80038ec <_ZN20TouchGFXGeneratedHAL10initializeEv+0x40>) + 80038d6: 4a06 ldr r2, [pc, #24] ; (80038f0 <_ZN20TouchGFXGeneratedHAL10initializeEv+0x44>) + 80038d8: 605a str r2, [r3, #4] + bufferRGB = buffer; + 80038da: 4a06 ldr r2, [pc, #24] ; (80038f4 <_ZN20TouchGFXGeneratedHAL10initializeEv+0x48>) + 80038dc: 641a str r2, [r3, #64] ; 0x40 + topBufferRGB = bufferRGB; + 80038de: 649a str r2, [r3, #72] ; 0x48 + sizeBufferRGB = sizeOfBuffer; + 80038e0: f44f 22ff mov.w r2, #522240 ; 0x7f800 + 80038e4: 645a str r2, [r3, #68] ; 0x44 +} + 80038e6: bd38 pop {r3, r4, r5, pc} + 80038e8: c007f800 .word 0xc007f800 + 80038ec: 20007a6c .word 0x20007a6c + 80038f0: 20007a24 .word 0x20007a24 + 80038f4: c00bf400 .word 0xc00bf400 + +080038f8 <_ZN20TouchGFXGeneratedHAL10beginFrameEv>: + return HAL::beginFrame(); + 80038f8: f01c bf1c b.w 8020734 <_ZN8touchgfx3HAL10beginFrameEv> + +080038fc <_ZN20TouchGFXGeneratedHAL8endFrameEv>: + HAL::endFrame(); + 80038fc: f01c bf26 b.w 802074c <_ZN8touchgfx3HAL8endFrameEv> + +08003900 <_ZN20TouchGFXGeneratedHAL16flushFrameBufferERKN8touchgfx4RectE>: + HAL::flushFrameBuffer(rect); + 8003900: f01c bee1 b.w 80206c6 <_ZN8touchgfx3HAL16flushFrameBufferERKNS_4RectE> + +08003904 <_ZN20TouchGFXGeneratedHAL9blockCopyEPvPKvm>: + return HAL::blockCopy(dest, src, numBytes); + 8003904: f01d b851 b.w 80209aa <_ZN8touchgfx3HAL9blockCopyEPvPKvm> + +08003908 <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EED0Ev>: +class DoubleBufferedVideoController : public touchgfx::VideoController + 8003908: b510 push {r4, lr} + 800390a: 4604 mov r4, r0 + 800390c: 2158 movs r1, #88 ; 0x58 + 800390e: f030 fcf2 bl 80342f6 <_ZdlPvj> + 8003912: 4620 mov r0, r4 + 8003914: bd10 pop {r4, pc} + ... + +08003918 <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE12getIsPlayingEm>: + { + assert(handle < no_streams); + mjpegDecoders[handle]->getVideoInfo(data); + } + + virtual bool getIsPlaying(const Handle handle) + 8003918: b508 push {r3, lr} + { + assert(handle < no_streams); + 800391a: b131 cbz r1, 800392a <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE12getIsPlayingEm+0x12> + 800391c: 4b04 ldr r3, [pc, #16] ; (8003930 <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE12getIsPlayingEm+0x18>) + 800391e: f240 1197 movw r1, #407 ; 0x197 + 8003922: 4a04 ldr r2, [pc, #16] ; (8003934 <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE12getIsPlayingEm+0x1c>) + 8003924: 4804 ldr r0, [pc, #16] ; (8003938 <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE12getIsPlayingEm+0x20>) + 8003926: f030 fd15 bl 8034354 <__assert_func> + Stream& stream = streams[handle]; + return stream.isPlaying; + } + 800392a: f890 0039 ldrb.w r0, [r0, #57] ; 0x39 + 800392e: bd08 pop {r3, pc} + 8003930: 080363dc .word 0x080363dc + 8003934: 080363f0 .word 0x080363f0 + 8003938: 0803657d .word 0x0803657d + +0800393c <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE19getVideoInformationEmPNS0_16VideoInformationE>: + virtual void getVideoInformation(const Handle handle, touchgfx::VideoInformation* data) + 800393c: b510 push {r4, lr} + assert(handle < no_streams); + 800393e: b131 cbz r1, 800394e <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE19getVideoInformationEmPNS0_16VideoInformationE+0x12> + 8003940: 4b06 ldr r3, [pc, #24] ; (800395c <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE19getVideoInformationEmPNS0_16VideoInformationE+0x20>) + 8003942: f240 1191 movw r1, #401 ; 0x191 + 8003946: 4a06 ldr r2, [pc, #24] ; (8003960 <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE19getVideoInformationEmPNS0_16VideoInformationE+0x24>) + 8003948: 4806 ldr r0, [pc, #24] ; (8003964 <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE19getVideoInformationEmPNS0_16VideoInformationE+0x28>) + 800394a: f030 fd03 bl 8034354 <__assert_func> + mjpegDecoders[handle]->getVideoInfo(data); + 800394e: 6840 ldr r0, [r0, #4] + 8003950: 4611 mov r1, r2 + 8003952: 6803 ldr r3, [r0, #0] + } + 8003954: e8bd 4010 ldmia.w sp!, {r4, lr} + mjpegDecoders[handle]->getVideoInfo(data); + 8003958: 6b1b ldr r3, [r3, #48] ; 0x30 + 800395a: 4718 bx r3 + 800395c: 080363dc .word 0x080363dc + 8003960: 080365bf .word 0x080365bf + 8003964: 0803657d .word 0x0803657d + +08003968 <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE21getCurrentFrameNumberEm>: + virtual uint32_t getCurrentFrameNumber(const Handle handle) + 8003968: b508 push {r3, lr} + assert(handle < no_streams); + 800396a: b129 cbz r1, 8003978 <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE21getCurrentFrameNumberEm+0x10> + 800396c: 4b03 ldr r3, [pc, #12] ; (800397c <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE21getCurrentFrameNumberEm+0x14>) + 800396e: 217a movs r1, #122 ; 0x7a + 8003970: 4a03 ldr r2, [pc, #12] ; (8003980 <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE21getCurrentFrameNumberEm+0x18>) + 8003972: 4804 ldr r0, [pc, #16] ; (8003984 <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE21getCurrentFrameNumberEm+0x1c>) + 8003974: f030 fcee bl 8034354 <__assert_func> + } + 8003978: 6900 ldr r0, [r0, #16] + 800397a: bd08 pop {r3, pc} + 800397c: 080363dc .word 0x080363dc + 8003980: 08036770 .word 0x08036770 + 8003984: 0803657d .word 0x0803657d + +08003988 <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE12setFrameRateEmmm>: + virtual void setFrameRate(const Handle handle, uint32_t ui_frames, uint32_t video_frames) + 8003988: b508 push {r3, lr} + assert(handle < no_streams); + 800398a: b129 cbz r1, 8003998 <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE12setFrameRateEmmm+0x10> + 800398c: 4b05 ldr r3, [pc, #20] ; (80039a4 <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE12setFrameRateEmmm+0x1c>) + 800398e: 2183 movs r1, #131 ; 0x83 + 8003990: 4a05 ldr r2, [pc, #20] ; (80039a8 <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE12setFrameRateEmmm+0x20>) + 8003992: 4806 ldr r0, [pc, #24] ; (80039ac <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE12setFrameRateEmmm+0x24>) + 8003994: f030 fcde bl 8034354 <__assert_func> + stream.tickCount = 0; + 8003998: 6141 str r1, [r0, #20] + stream.frameCount = 0; + 800399a: 6081 str r1, [r0, #8] + stream.frame_rate_video = video_frames; + 800399c: e9c0 3206 strd r3, r2, [r0, #24] + } + 80039a0: bd08 pop {r3, pc} + 80039a2: bf00 nop + 80039a4: 080363dc .word 0x080363dc + 80039a8: 08036928 .word 0x08036928 + 80039ac: 0803657d .word 0x0803657d + +080039b0 <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE10setCommandEmNS0_15VideoController7CommandEm>: + virtual void setCommand(const Handle handle, Command cmd, uint32_t param) + 80039b0: b510 push {r4, lr} + 80039b2: 4604 mov r4, r0 + assert(handle < no_streams); + 80039b4: b129 cbz r1, 80039c2 <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE10setCommandEmNS0_15VideoController7CommandEm+0x12> + 80039b6: 4b27 ldr r3, [pc, #156] ; (8003a54 <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE10setCommandEmNS0_15VideoController7CommandEm+0xa4>) + 80039b8: 21a4 movs r1, #164 ; 0xa4 + 80039ba: 4a27 ldr r2, [pc, #156] ; (8003a58 <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE10setCommandEmNS0_15VideoController7CommandEm+0xa8>) + 80039bc: 4827 ldr r0, [pc, #156] ; (8003a5c <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE10setCommandEmNS0_15VideoController7CommandEm+0xac>) + 80039be: f030 fcc9 bl 8034354 <__assert_func> + switch (cmd) + 80039c2: 2a05 cmp r2, #5 + 80039c4: d834 bhi.n 8003a30 <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE10setCommandEmNS0_15VideoController7CommandEm+0x80> + 80039c6: e8df f002 tbb [pc, r2] + 80039ca: 2903 .short 0x2903 + 80039cc: 3e39342f .word 0x3e39342f + if (mjpegDecoders[handle]->hasVideo()) + 80039d0: 6840 ldr r0, [r0, #4] + 80039d2: 6803 ldr r3, [r0, #0] + 80039d4: 691b ldr r3, [r3, #16] + 80039d6: 4798 blx r3 + 80039d8: b350 cbz r0, 8003a30 <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE10setCommandEmNS0_15VideoController7CommandEm+0x80> + MUTEX_LOCK(mutexBuffers); + 80039da: f04f 31ff mov.w r1, #4294967295 + 80039de: 6d60 ldr r0, [r4, #84] ; 0x54 + 80039e0: f005 fc76 bl 80092d0 + stream.cancelDecoding = false; + 80039e4: 2300 movs r3, #0 + stream.isPlaying = true; + 80039e6: 2201 movs r2, #1 + if (stream.isStopped) + 80039e8: f894 103e ldrb.w r1, [r4, #62] ; 0x3e + stream.cancelDecoding = false; + 80039ec: f884 303b strb.w r3, [r4, #59] ; 0x3b + stream.isPlaying = true; + 80039f0: f884 2039 strb.w r2, [r4, #57] ; 0x39 + stream.frameCount = 0; + 80039f4: 60a3 str r3, [r4, #8] + stream.tickCount = 0; + 80039f6: 6163 str r3, [r4, #20] + if (stream.isStopped) + 80039f8: b101 cbz r1, 80039fc <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE10setCommandEmNS0_15VideoController7CommandEm+0x4c> + stream.seek_to_frame = 1; + 80039fa: 6222 str r2, [r4, #32] + stream.isStopped = false; + 80039fc: f884 303e strb.w r3, [r4, #62] ; 0x3e + stream.skip_frames = 0; + 8003a00: 6263 str r3, [r4, #36] ; 0x24 + if (stream.nextBuffer == 0) + 8003a02: 6ae3 ldr r3, [r4, #44] ; 0x2c + 8003a04: b92b cbnz r3, 8003a12 <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE10setCommandEmNS0_15VideoController7CommandEm+0x62> + stream.doDecodeNewFrame = true; + 8003a06: 2301 movs r3, #1 + SEM_POST(semDecode); + 8003a08: 6d20 ldr r0, [r4, #80] ; 0x50 + stream.doDecodeNewFrame = true; + 8003a0a: f884 303a strb.w r3, [r4, #58] ; 0x3a + SEM_POST(semDecode); + 8003a0e: f005 fd49 bl 80094a4 + MUTEX_UNLOCK(mutexBuffers); + 8003a12: 6d60 ldr r0, [r4, #84] ; 0x54 + } + 8003a14: e8bd 4010 ldmia.w sp!, {r4, lr} + MUTEX_UNLOCK(mutexBuffers); + 8003a18: f005 bc8a b.w 8009330 + stream.isPlaying = false; + 8003a1c: 2300 movs r3, #0 + 8003a1e: f880 3039 strb.w r3, [r0, #57] ; 0x39 + stream.isStopped = true; + 8003a22: f884 303e strb.w r3, [r4, #62] ; 0x3e + break; + 8003a26: e003 b.n 8003a30 <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE10setCommandEmNS0_15VideoController7CommandEm+0x80> + stream.seek_to_frame = param; + 8003a28: 6203 str r3, [r0, #32] + stream.frameCount = 0; + 8003a2a: 2300 movs r3, #0 + 8003a2c: 6083 str r3, [r0, #8] + stream.tickCount = 0; + 8003a2e: 6143 str r3, [r0, #20] + } + 8003a30: bd10 pop {r4, pc} + stream.seek_to_frame = param; + 8003a32: 6203 str r3, [r0, #32] + stream.frameCount = 0; + 8003a34: 2300 movs r3, #0 + 8003a36: 6083 str r3, [r0, #8] + stream.tickCount = 0; + 8003a38: 6143 str r3, [r0, #20] + 8003a3a: e7f2 b.n 8003a22 <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE10setCommandEmNS0_15VideoController7CommandEm+0x72> + stream.isPlaying = false; + 8003a3c: 2300 movs r3, #0 + 8003a3e: f880 3039 strb.w r3, [r0, #57] ; 0x39 + stream.isStopped = true; + 8003a42: 2301 movs r3, #1 + 8003a44: e7ed b.n 8003a22 <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE10setCommandEmNS0_15VideoController7CommandEm+0x72> + stream.repeat = (param > 0); + 8003a46: 3b00 subs r3, #0 + 8003a48: bf18 it ne + 8003a4a: 2301 movne r3, #1 + 8003a4c: f880 303d strb.w r3, [r0, #61] ; 0x3d + } + 8003a50: e7ee b.n 8003a30 <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE10setCommandEmNS0_15VideoController7CommandEm+0x80> + 8003a52: bf00 nop + 8003a54: 080363dc .word 0x080363dc + 8003a58: 08036ae7 .word 0x08036ae7 + 8003a5c: 0803657d .word 0x0803657d + +08003a60 <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE11updateFrameEmRNS0_11VideoWidgetE>: + virtual bool updateFrame(const Handle handle, touchgfx::VideoWidget& widget) + 8003a60: b570 push {r4, r5, r6, lr} + 8003a62: 4604 mov r4, r0 + 8003a64: 4616 mov r6, r2 + assert(handle < no_streams); + 8003a66: b129 cbz r1, 8003a74 <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE11updateFrameEmRNS0_11VideoWidgetE+0x14> + 8003a68: 4b31 ldr r3, [pc, #196] ; (8003b30 <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE11updateFrameEmRNS0_11VideoWidgetE+0xd0>) + 8003a6a: 21e7 movs r1, #231 ; 0xe7 + 8003a6c: 4a31 ldr r2, [pc, #196] ; (8003b34 <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE11updateFrameEmRNS0_11VideoWidgetE+0xd4>) + 8003a6e: 4832 ldr r0, [pc, #200] ; (8003b38 <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE11updateFrameEmRNS0_11VideoWidgetE+0xd8>) + 8003a70: f030 fc70 bl 8034354 <__assert_func> + if (stream.isPlaying) + 8003a74: f890 3039 ldrb.w r3, [r0, #57] ; 0x39 + 8003a78: b133 cbz r3, 8003a88 <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE11updateFrameEmRNS0_11VideoWidgetE+0x28> + return vSyncForFrame; + 8003a7a: 4b30 ldr r3, [pc, #192] ; (8003b3c <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE11updateFrameEmRNS0_11VideoWidgetE+0xdc>) + 8003a7c: 681b ldr r3, [r3, #0] + 8003a7e: f893 206b ldrb.w r2, [r3, #107] ; 0x6b + stream.tickCount += HAL::getInstance()->getLCDRefreshCount(); + 8003a82: 6943 ldr r3, [r0, #20] + 8003a84: 4413 add r3, r2 + 8003a86: 6143 str r3, [r0, #20] + if (stream.nextBuffer && (decodeForNextTick(stream) || stream.seek_to_frame > 0)) + 8003a88: 6ae3 ldr r3, [r4, #44] ; 0x2c + 8003a8a: 2b00 cmp r3, #0 + 8003a8c: d04d beq.n 8003b2a <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE11updateFrameEmRNS0_11VideoWidgetE+0xca> + bool decodeForNextTick(Stream& stream) + { + // Running in UI thread + + // Compare tickCount/frameCount to frame_rate_ticks/frame_rate_video + if ((stream.tickCount * stream.frame_rate_video) >= (stream.frame_rate_ticks * stream.frameCount)) + 8003a8e: 69e1 ldr r1, [r4, #28] + 8003a90: e9d4 3205 ldrd r3, r2, [r4, #20] + 8003a94: 4353 muls r3, r2 + 8003a96: 68a2 ldr r2, [r4, #8] + 8003a98: 434a muls r2, r1 + 8003a9a: 4293 cmp r3, r2 + 8003a9c: d220 bcs.n 8003ae0 <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE11updateFrameEmRNS0_11VideoWidgetE+0x80> + if (stream.nextBuffer && (decodeForNextTick(stream) || stream.seek_to_frame > 0)) + 8003a9e: 6a23 ldr r3, [r4, #32] + 8003aa0: 2b00 cmp r3, #0 + 8003aa2: d042 beq.n 8003b2a <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE11updateFrameEmRNS0_11VideoWidgetE+0xca> + MUTEX_LOCK(mutexBuffers); + 8003aa4: f04f 31ff mov.w r1, #4294967295 + 8003aa8: 6d60 ldr r0, [r4, #84] ; 0x54 + 8003aaa: f005 fc11 bl 80092d0 + if (stream.seek_to_frame > 0) + 8003aae: 6a23 ldr r3, [r4, #32] + 8003ab0: b10b cbz r3, 8003ab6 <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE11updateFrameEmRNS0_11VideoWidgetE+0x56> + stream.nextBuffer = 0; + 8003ab2: 2300 movs r3, #0 + 8003ab4: 62e3 str r3, [r4, #44] ; 0x2c + if (stream.nextBuffer != 0) + 8003ab6: 6ae3 ldr r3, [r4, #44] ; 0x2c + 8003ab8: b9fb cbnz r3, 8003afa <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE11updateFrameEmRNS0_11VideoWidgetE+0x9a> + bool hasMoreFrames = true; + 8003aba: 2501 movs r5, #1 + MUTEX_UNLOCK(mutexBuffers); + 8003abc: 6d60 ldr r0, [r4, #84] ; 0x54 + 8003abe: f005 fc37 bl 8009330 + if ((stream.isPlaying || stream.seek_to_frame > 0) && (stream.nextBuffer == 0)) + 8003ac2: f894 3039 ldrb.w r3, [r4, #57] ; 0x39 + 8003ac6: b90b cbnz r3, 8003acc <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE11updateFrameEmRNS0_11VideoWidgetE+0x6c> + 8003ac8: 6a23 ldr r3, [r4, #32] + 8003aca: b13b cbz r3, 8003adc <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE11updateFrameEmRNS0_11VideoWidgetE+0x7c> + 8003acc: 6ae3 ldr r3, [r4, #44] ; 0x2c + 8003ace: b92b cbnz r3, 8003adc <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE11updateFrameEmRNS0_11VideoWidgetE+0x7c> + stream.doDecodeNewFrame = true; + 8003ad0: 2301 movs r3, #1 + SEM_POST(semDecode); + 8003ad2: 6d20 ldr r0, [r4, #80] ; 0x50 + stream.doDecodeNewFrame = true; + 8003ad4: f884 303a strb.w r3, [r4, #58] ; 0x3a + SEM_POST(semDecode); + 8003ad8: f005 fce4 bl 80094a4 + } + 8003adc: 4628 mov r0, r5 + 8003ade: bd70 pop {r4, r5, r6, pc} + { + if (allowSkipFrames) + 8003ae0: f894 004c ldrb.w r0, [r4, #76] ; 0x4c + 8003ae4: 2800 cmp r0, #0 + 8003ae6: d0dd beq.n 8003aa4 <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE11updateFrameEmRNS0_11VideoWidgetE+0x44> + { + stream.skip_frames = (stream.tickCount * stream.frame_rate_video - stream.frame_rate_ticks * stream.frameCount) / stream.frame_rate_ticks; + 8003ae8: 1a9b subs r3, r3, r2 + 8003aea: fbb3 f2f1 udiv r2, r3, r1 + if (stream.skip_frames > 0) + 8003aee: 4299 cmp r1, r3 + { + stream.skip_frames--; + 8003af0: bf98 it ls + 8003af2: f102 32ff addls.w r2, r2, #4294967295 + 8003af6: 6262 str r2, [r4, #36] ; 0x24 + 8003af8: e7d4 b.n 8003aa4 <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE11updateFrameEmRNS0_11VideoWidgetE+0x44> + stream.nextBuffer = 0; + 8003afa: 2200 movs r2, #0 + hasMoreFrames = stream.hasMoreFramesAfterNext; + 8003afc: f894 503c ldrb.w r5, [r4, #60] ; 0x3c + stream.currentBuffer = stream.nextBuffer; + 8003b00: 62a3 str r3, [r4, #40] ; 0x28 + widget.invalidate(); + 8003b02: 4630 mov r0, r6 + stream.nextBuffer = 0; + 8003b04: 62e2 str r2, [r4, #44] ; 0x2c + stream.frameNumberShown = stream.frameNumberNext; + 8003b06: 68e2 ldr r2, [r4, #12] + 8003b08: 6122 str r2, [r4, #16] + stream.frameCount++; + 8003b0a: 68a2 ldr r2, [r4, #8] + 8003b0c: 3201 adds r2, #1 + 8003b0e: 60a2 str r2, [r4, #8] + * + * @param [in] videoBuffer Video buffer. + */ + void setVideoBuffer(uint8_t* const videoBuffer) + { + buffer = videoBuffer; + 8003b10: 6333 str r3, [r6, #48] ; 0x30 + widget.invalidate(); + 8003b12: 6833 ldr r3, [r6, #0] + 8003b14: 695b ldr r3, [r3, #20] + 8003b16: 4798 blx r3 + if (!hasMoreFrames && !stream.repeat) + 8003b18: 2d00 cmp r5, #0 + 8003b1a: d1ce bne.n 8003aba <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE11updateFrameEmRNS0_11VideoWidgetE+0x5a> + 8003b1c: f894 303d ldrb.w r3, [r4, #61] ; 0x3d + 8003b20: 2b00 cmp r3, #0 + 8003b22: d1cb bne.n 8003abc <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE11updateFrameEmRNS0_11VideoWidgetE+0x5c> + stream.isPlaying = false; + 8003b24: f884 5039 strb.w r5, [r4, #57] ; 0x39 + 8003b28: e7c8 b.n 8003abc <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE11updateFrameEmRNS0_11VideoWidgetE+0x5c> + bool hasMoreFrames = true; + 8003b2a: 2501 movs r5, #1 + 8003b2c: e7c9 b.n 8003ac2 <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE11updateFrameEmRNS0_11VideoWidgetE+0x62> + 8003b2e: bf00 nop + 8003b30: 080363dc .word 0x080363dc + 8003b34: 08036cbe .word 0x08036cbe + 8003b38: 0803657d .word 0x0803657d + 8003b3c: 2001e734 .word 0x2001e734 + +08003b40 <_ZN20TouchGFXGeneratedHAL16enableInterruptsEv>: + NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + 8003b40: 4b03 ldr r3, [pc, #12] ; (8003b50 <_ZN20TouchGFXGeneratedHAL16enableInterruptsEv+0x10>) + 8003b42: f04f 6280 mov.w r2, #67108864 ; 0x4000000 + 8003b46: 609a str r2, [r3, #8] + 8003b48: f04f 7280 mov.w r2, #16777216 ; 0x1000000 + 8003b4c: 609a str r2, [r3, #8] +} + 8003b4e: 4770 bx lr + 8003b50: e000e100 .word 0xe000e100 + +08003b54 <_ZN20TouchGFXGeneratedHAL17disableInterruptsEv>: + NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + 8003b54: 4b08 ldr r3, [pc, #32] ; (8003b78 <_ZN20TouchGFXGeneratedHAL17disableInterruptsEv+0x24>) + 8003b56: f04f 6280 mov.w r2, #67108864 ; 0x4000000 + 8003b5a: f8c3 2088 str.w r2, [r3, #136] ; 0x88 + __ASM volatile ("dsb 0xF":::"memory"); + 8003b5e: f3bf 8f4f dsb sy + __ASM volatile ("isb 0xF":::"memory"); + 8003b62: f3bf 8f6f isb sy + 8003b66: f04f 7280 mov.w r2, #16777216 ; 0x1000000 + 8003b6a: f8c3 2088 str.w r2, [r3, #136] ; 0x88 + __ASM volatile ("dsb 0xF":::"memory"); + 8003b6e: f3bf 8f4f dsb sy + __ASM volatile ("isb 0xF":::"memory"); + 8003b72: f3bf 8f6f isb sy +} + 8003b76: 4770 bx lr + 8003b78: e000e100 .word 0xe000e100 + +08003b7c <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE19registerVideoWidgetERNS0_11VideoWidgetE>: + virtual Handle registerVideoWidget(touchgfx::VideoWidget& widget) + 8003b7c: b538 push {r3, r4, r5, lr} + 8003b7e: 4603 mov r3, r0 + { + // Running in UI thread + + for (uint32_t i = 0; i < no_streams; i++) + { + if (streams[i].isActive == false) + 8003b80: f890 0038 ldrb.w r0, [r0, #56] ; 0x38 + 8003b84: bb38 cbnz r0, 8003bd6 <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE19registerVideoWidgetERNS0_11VideoWidgetE+0x5a> + streams[handle].isActive = true; + 8003b86: 2201 movs r2, #1 + { + // Reset stream parameters + streams[i] = Stream(); + 8003b88: 6098 str r0, [r3, #8] + 8003b8a: 60d8 str r0, [r3, #12] + streams[handle].isActive = true; + 8003b8c: 639a str r2, [r3, #56] ; 0x38 + streams[i] = Stream(); + 8003b8e: f44f 7280 mov.w r2, #256 ; 0x100 + 8003b92: 6158 str r0, [r3, #20] + 8003b94: 879a strh r2, [r3, #60] ; 0x3c + * @param height Height of the videoBuffer in pixels + */ + void setVideoBufferFormat(Bitmap::BitmapFormat bufferFormat, int16_t width, int16_t height) + { + format = bufferFormat; + bufferWidth = width; + 8003b96: f44f 72f0 mov.w r2, #480 ; 0x1e0 + 8003b9a: 6198 str r0, [r3, #24] + 8003b9c: 61d8 str r0, [r3, #28] + 8003b9e: 6218 str r0, [r3, #32] + 8003ba0: 6258 str r0, [r3, #36] ; 0x24 + 8003ba2: 6298 str r0, [r3, #40] ; 0x28 + 8003ba4: 62d8 str r0, [r3, #44] ; 0x2c + 8003ba6: 6318 str r0, [r3, #48] ; 0x30 + 8003ba8: 6358 str r0, [r3, #52] ; 0x34 + 8003baa: f883 003e strb.w r0, [r3, #62] ; 0x3e + 8003bae: 86ca strh r2, [r1, #54] ; 0x36 + bufferHeight = height; + 8003bb0: f44f 7288 mov.w r2, #272 ; 0x110 + format = bufferFormat; + 8003bb4: f881 0034 strb.w r0, [r1, #52] ; 0x34 + bufferHeight = height; + 8003bb8: 870a strh r2, [r1, #56] ; 0x38 + buffer = videoBuffer; + 8003bba: 6308 str r0, [r1, #48] ; 0x30 + if (topBufferRGB + 2 * sizeOfOneDecodeBuffer > (bufferRGB + sizeBufferRGB)) + 8003bbc: 6c9a ldr r2, [r3, #72] ; 0x48 + streams[handle].frameNumberShown = 0; + 8003bbe: 6118 str r0, [r3, #16] + if (topBufferRGB + 2 * sizeOfOneDecodeBuffer > (bufferRGB + sizeBufferRGB)) + 8003bc0: f502 24ff add.w r4, r2, #522240 ; 0x7f800 + 8003bc4: e9d3 1510 ldrd r1, r5, [r3, #64] ; 0x40 + 8003bc8: 4429 add r1, r5 + 8003bca: 428c cmp r4, r1 + 8003bcc: d90a bls.n 8003be4 <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE19registerVideoWidgetERNS0_11VideoWidgetE+0x68> + assert(0 && "registerVideoWidget: Unable to allocate two RGB buffers!"); + 8003bce: 4b08 ldr r3, [pc, #32] ; (8003bf0 <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE19registerVideoWidgetERNS0_11VideoWidgetE+0x74>) + 8003bd0: 2158 movs r1, #88 ; 0x58 + 8003bd2: 4a08 ldr r2, [pc, #32] ; (8003bf4 <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE19registerVideoWidgetERNS0_11VideoWidgetE+0x78>) + 8003bd4: e003 b.n 8003bde <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE19registerVideoWidgetERNS0_11VideoWidgetE+0x62> + + return static_cast(i); + } + } + + assert(0 && "Unable to find free video stream handle!"); + 8003bd6: 4b08 ldr r3, [pc, #32] ; (8003bf8 <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE19registerVideoWidgetERNS0_11VideoWidgetE+0x7c>) + 8003bd8: f240 11f5 movw r1, #501 ; 0x1f5 + 8003bdc: 4a07 ldr r2, [pc, #28] ; (8003bfc <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE19registerVideoWidgetERNS0_11VideoWidgetE+0x80>) + assert(0 && "registerVideoWidget: Unable to allocate two RGB buffers!"); + 8003bde: 4808 ldr r0, [pc, #32] ; (8003c00 <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE19registerVideoWidgetERNS0_11VideoWidgetE+0x84>) + 8003be0: f030 fbb8 bl 8034354 <__assert_func> + streams[handle].bufferA = (uint8_t*)topBufferRGB; + 8003be4: 631a str r2, [r3, #48] ; 0x30 + topBufferRGB += sizeOfOneDecodeBuffer; + 8003be6: f502 327f add.w r2, r2, #261120 ; 0x3fc00 + topBufferRGB += sizeOfOneDecodeBuffer; + 8003bea: 649c str r4, [r3, #72] ; 0x48 + streams[handle].bufferB = (uint8_t*)topBufferRGB; + 8003bec: 635a str r2, [r3, #52] ; 0x34 + } + 8003bee: bd38 pop {r3, r4, r5, pc} + 8003bf0: 0803701c .word 0x0803701c + 8003bf4: 0803705c .word 0x0803705c + 8003bf8: 08036e62 .word 0x08036e62 + 8003bfc: 08036e92 .word 0x08036e92 + 8003c00: 0803657d .word 0x0803657d + +08003c04 : +} + +extern "C" +{ + void HAL_LTDC_LineEventCallback(LTDC_HandleTypeDef* hltdc) + { + 8003c04: b510 push {r4, lr} + return instance; + 8003c06: 4c14 ldr r4, [pc, #80] ; (8003c58 ) + if (!HAL::getInstance()) + 8003c08: 6823 ldr r3, [r4, #0] + 8003c0a: b323 cbz r3, 8003c56 + { + return; + } + + if (LTDC->LIPCR == lcd_int_active_line) + 8003c0c: 4b13 ldr r3, [pc, #76] ; (8003c5c ) + 8003c0e: 4a14 ldr r2, [pc, #80] ; (8003c60 ) + 8003c10: 6c1b ldr r3, [r3, #64] ; 0x40 + 8003c12: 8811 ldrh r1, [r2, #0] + 8003c14: 428b cmp r3, r1 + 8003c16: d113 bne.n 8003c40 + { + //entering active area + HAL_LTDC_ProgramLineEvent(hltdc, lcd_int_porch_line); + 8003c18: 4b12 ldr r3, [pc, #72] ; (8003c64 ) + 8003c1a: 8819 ldrh r1, [r3, #0] + 8003c1c: f003 fb92 bl 8007344 + 8003c20: 6822 ldr r2, [r4, #0] + vSyncCnt++; + 8003c22: f892 306a ldrb.w r3, [r2, #106] ; 0x6a + 8003c26: 3301 adds r3, #1 + 8003c28: f882 306a strb.w r3, [r2, #106] ; 0x6a + HAL::getInstance()->vSync(); + OSWrappers::signalVSync(); + 8003c2c: f7fe ff14 bl 8002a58 <_ZN8touchgfx10OSWrappers11signalVSyncEv> + + // Swap frame buffers immediately instead of waiting for the task to be scheduled in. + // Note: task will also swap when it wakes up, but that operation is guarded and will not have + // any effect if already swapped. + HAL::getInstance()->swapFrameBuffers(); + 8003c30: 6820 ldr r0, [r4, #0] + 8003c32: f01d fae5 bl 8021200 <_ZN8touchgfx3HAL16swapFrameBuffersEv> + GPIO::set(GPIO::VSYNC_FREQ); + 8003c36: 2000 movs r0, #0 + + // Signal to the framework that display update has finished. + HAL::getInstance()->frontPorchEntered(); + GPIO::clear(GPIO::VSYNC_FREQ); + } + } + 8003c38: e8bd 4010 ldmia.w sp!, {r4, lr} + GPIO::set(GPIO::VSYNC_FREQ); + 8003c3c: f7fe bd10 b.w 8002660 <_ZN8touchgfx4GPIO3setENS0_7GPIO_IDE> + HAL_LTDC_ProgramLineEvent(hltdc, lcd_int_active_line); + 8003c40: f003 fb80 bl 8007344 + return instance; + 8003c44: 6820 ldr r0, [r4, #0] + allowDMATransfers(); + 8003c46: 6803 ldr r3, [r0, #0] + 8003c48: 6a1b ldr r3, [r3, #32] + 8003c4a: 4798 blx r3 + GPIO::clear(GPIO::VSYNC_FREQ); + 8003c4c: 2000 movs r0, #0 + } + 8003c4e: e8bd 4010 ldmia.w sp!, {r4, lr} + GPIO::clear(GPIO::VSYNC_FREQ); + 8003c52: f7fe bd35 b.w 80026c0 <_ZN8touchgfx4GPIO5clearENS0_7GPIO_IDE> + } + 8003c56: bd10 pop {r4, pc} + 8003c58: 2001e734 .word 0x2001e734 + 8003c5c: 40016800 .word 0x40016800 + 8003c60: 200072a2 .word 0x200072a2 + 8003c64: 200072a0 .word 0x200072a0 + +08003c68 <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE16decoderTaskEntryEv>: + void decoderTaskEntry() + 8003c68: e92d 43f7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, lr} + 8003c6c: 4604 mov r4, r0 + const bool hasMoreFrames = decoder->decodeNextFrame(decodeBuffer, width, height, stride); + 8003c6e: f44f 7870 mov.w r8, #960 ; 0x3c0 + uint32_t getStreamIndexToDecode() + { + for (uint32_t i = 0; i < no_streams; i++) + { + Stream& stream = streams[i]; + if (stream.doDecodeNewFrame) // Marked by UI for decoding + 8003c72: f894 303a ldrb.w r3, [r4, #58] ; 0x3a + MUTEX_LOCK(mutexBuffers); + 8003c76: f04f 31ff mov.w r1, #4294967295 + if (stream.doDecodeNewFrame) // Marked by UI for decoding + 8003c7a: 2b00 cmp r3, #0 + 8003c7c: d031 beq.n 8003ce2 <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE16decoderTaskEntryEv+0x7a> + MUTEX_LOCK(mutexBuffers); + 8003c7e: 6d60 ldr r0, [r4, #84] ; 0x54 + 8003c80: f005 fb26 bl 80092d0 + uint8_t* decodeBuffer = (stream.currentBuffer == stream.bufferA) ? stream.bufferB : stream.bufferA; + 8003c84: 6b27 ldr r7, [r4, #48] ; 0x30 + 8003c86: 6aa3 ldr r3, [r4, #40] ; 0x28 + 8003c88: 42bb cmp r3, r7 + 8003c8a: d100 bne.n 8003c8e <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE16decoderTaskEntryEv+0x26> + 8003c8c: 6b67 ldr r7, [r4, #52] ; 0x34 + if (stream.seek_to_frame > 0) + 8003c8e: 6a26 ldr r6, [r4, #32] + MJPEGDecoder* const decoder = mjpegDecoders[stream_index]; + 8003c90: 6865 ldr r5, [r4, #4] + if (stream.seek_to_frame > 0) + 8003c92: b356 cbz r6, 8003cea <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE16decoderTaskEntryEv+0x82> + decoder->gotoFrame(stream.seek_to_frame); + 8003c94: 682b ldr r3, [r5, #0] + 8003c96: 4631 mov r1, r6 + 8003c98: 4628 mov r0, r5 + 8003c9a: 6a5b ldr r3, [r3, #36] ; 0x24 + 8003c9c: 4798 blx r3 + stream.seek_to_frame = 0; + 8003c9e: 2300 movs r3, #0 + 8003ca0: 6223 str r3, [r4, #32] + stream.cancelDecoding = false; + 8003ca2: f884 303b strb.w r3, [r4, #59] ; 0x3b + MUTEX_UNLOCK(mutexBuffers); + 8003ca6: 6d60 ldr r0, [r4, #84] ; 0x54 + 8003ca8: f005 fb42 bl 8009330 + const bool hasMoreFrames = decoder->decodeNextFrame(decodeBuffer, width, height, stride); + 8003cac: 682b ldr r3, [r5, #0] + 8003cae: f44f 72f0 mov.w r2, #480 ; 0x1e0 + 8003cb2: 4639 mov r1, r7 + 8003cb4: f8cd 8000 str.w r8, [sp] + 8003cb8: 4628 mov r0, r5 + 8003cba: 695e ldr r6, [r3, #20] + 8003cbc: f44f 7388 mov.w r3, #272 ; 0x110 + 8003cc0: 47b0 blx r6 + MUTEX_LOCK(mutexBuffers); + 8003cc2: f04f 31ff mov.w r1, #4294967295 + const bool hasMoreFrames = decoder->decodeNextFrame(decodeBuffer, width, height, stride); + 8003cc6: 4606 mov r6, r0 + MUTEX_LOCK(mutexBuffers); + 8003cc8: 6d60 ldr r0, [r4, #84] ; 0x54 + 8003cca: f005 fb01 bl 80092d0 + if (stream.cancelDecoding) + 8003cce: f894 303b ldrb.w r3, [r4, #59] ; 0x3b + 8003cd2: b1e3 cbz r3, 8003d0e <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE16decoderTaskEntryEv+0xa6> + stream.cancelDecoding = false; + 8003cd4: 2300 movs r3, #0 + 8003cd6: f884 303b strb.w r3, [r4, #59] ; 0x3b + MUTEX_UNLOCK(mutexBuffers); + 8003cda: 6d60 ldr r0, [r4, #84] ; 0x54 + 8003cdc: f005 fb28 bl 8009330 + 8003ce0: e7c7 b.n 8003c72 <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE16decoderTaskEntryEv+0xa> + SEM_WAIT(semDecode); + 8003ce2: 6d20 ldr r0, [r4, #80] ; 0x50 + 8003ce4: f005 fba4 bl 8009430 + continue; + 8003ce8: e7c3 b.n 8003c72 <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE16decoderTaskEntryEv+0xa> + if (stream.skip_frames > 0) + 8003cea: 6a63 ldr r3, [r4, #36] ; 0x24 + 8003cec: 2b00 cmp r3, #0 + 8003cee: d0da beq.n 8003ca6 <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE16decoderTaskEntryEv+0x3e> + decoder->gotoFrame(decoder->getCurrentFrameNumber() + stream.skip_frames); + 8003cf0: 682b ldr r3, [r5, #0] + 8003cf2: 4628 mov r0, r5 + 8003cf4: e9d3 9309 ldrd r9, r3, [r3, #36] ; 0x24 + 8003cf8: 4798 blx r3 + 8003cfa: 6a61 ldr r1, [r4, #36] ; 0x24 + 8003cfc: 4401 add r1, r0 + 8003cfe: 4628 mov r0, r5 + 8003d00: 47c8 blx r9 + stream.frameCount += stream.skip_frames; + 8003d02: 68a3 ldr r3, [r4, #8] + 8003d04: 6a62 ldr r2, [r4, #36] ; 0x24 + stream.skip_frames = 0; + 8003d06: 6266 str r6, [r4, #36] ; 0x24 + stream.frameCount += stream.skip_frames; + 8003d08: 4413 add r3, r2 + 8003d0a: 60a3 str r3, [r4, #8] + 8003d0c: e7cb b.n 8003ca6 <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE16decoderTaskEntryEv+0x3e> + stream.nextBuffer = decodeBuffer; + 8003d0e: 62e7 str r7, [r4, #44] ; 0x2c + if (hasMoreFrames) + 8003d10: b15e cbz r6, 8003d2a <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE16decoderTaskEntryEv+0xc2> + stream.frameNumberNext = decoder->getCurrentFrameNumber() - 1; // Points to frame after this + 8003d12: 682b ldr r3, [r5, #0] + 8003d14: 4628 mov r0, r5 + 8003d16: 6a9b ldr r3, [r3, #40] ; 0x28 + 8003d18: 4798 blx r3 + 8003d1a: 3801 subs r0, #1 + stream.doDecodeNewFrame = false; + 8003d1c: 2300 movs r3, #0 + stream.frameNumberNext = decoder->getCurrentFrameNumber() - 1; // Points to frame after this + 8003d1e: 60e0 str r0, [r4, #12] + stream.hasMoreFramesAfterNext = hasMoreFrames; + 8003d20: f884 603c strb.w r6, [r4, #60] ; 0x3c + stream.doDecodeNewFrame = false; + 8003d24: f884 303a strb.w r3, [r4, #58] ; 0x3a + 8003d28: e7d7 b.n 8003cda <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE16decoderTaskEntryEv+0x72> + 8003d2a: 2001 movs r0, #1 + 8003d2c: e7f6 b.n 8003d1c <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE16decoderTaskEntryEv+0xb4> + ... + +08003d30 : + videoController.decoderTaskEntry(); + 8003d30: 4801 ldr r0, [pc, #4] ; (8003d38 ) +{ + 8003d32: b508 push {r3, lr} + videoController.decoderTaskEntry(); + 8003d34: f7ff ff98 bl 8003c68 <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE16decoderTaskEntryEv> + 8003d38: 20007a6c .word 0x20007a6c + +08003d3c <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE10clearStateEm>: + } + + void clearState(const Handle handle) + { + // Stop playing, and clear next buffer if any, cancel ongoing decoding + setCommand(handle, STOP, 0); + 8003d3c: 6803 ldr r3, [r0, #0] + 8003d3e: 2204 movs r2, #4 + void clearState(const Handle handle) + 8003d40: b570 push {r4, r5, r6, lr} + 8003d42: 4604 mov r4, r0 + setCommand(handle, STOP, 0); + 8003d44: 6a5e ldr r6, [r3, #36] ; 0x24 + 8003d46: 2300 movs r3, #0 + void clearState(const Handle handle) + 8003d48: 460d mov r5, r1 + setCommand(handle, STOP, 0); + 8003d4a: 47b0 blx r6 + + MUTEX_LOCK(mutexBuffers); + 8003d4c: f04f 31ff mov.w r1, #4294967295 + 8003d50: 6d60 ldr r0, [r4, #84] ; 0x54 + 8003d52: f005 fabd bl 80092d0 + + Stream& stream = streams[handle]; + if (stream.nextBuffer != 0) + 8003d56: 2338 movs r3, #56 ; 0x38 + 8003d58: fb03 4205 mla r2, r3, r5, r4 + 8003d5c: 6ad1 ldr r1, [r2, #44] ; 0x2c + 8003d5e: b109 cbz r1, 8003d64 <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE10clearStateEm+0x28> + { + // Ignore any decoded buffer + stream.nextBuffer = 0; + 8003d60: 2100 movs r1, #0 + 8003d62: 62d1 str r1, [r2, #44] ; 0x2c + 8003d64: fb03 4505 mla r5, r3, r5, r4 + } + stream.cancelDecoding = true; + 8003d68: 2301 movs r3, #1 + 8003d6a: f885 303b strb.w r3, [r5, #59] ; 0x3b + stream.isPlaying = false; + 8003d6e: 2300 movs r3, #0 + 8003d70: f885 3039 strb.w r3, [r5, #57] ; 0x39 + + MUTEX_UNLOCK(mutexBuffers); + 8003d74: 6d60 ldr r0, [r4, #84] ; 0x54 + } + 8003d76: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} + MUTEX_UNLOCK(mutexBuffers); + 8003d7a: f005 bad9 b.w 8009330 + +08003d7e <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE12setVideoDataEmRNS0_15VideoDataReaderE>: + virtual void setVideoData(const Handle handle, VideoDataReader& reader) + 8003d7e: b538 push {r3, r4, r5, lr} + mjpegDecoders[handle]->setVideoData(reader); + 8003d80: eb00 0381 add.w r3, r0, r1, lsl #2 + virtual void setVideoData(const Handle handle, VideoDataReader& reader) + 8003d84: 4604 mov r4, r0 + 8003d86: 460d mov r5, r1 + mjpegDecoders[handle]->setVideoData(reader); + 8003d88: 4611 mov r1, r2 + 8003d8a: 6858 ldr r0, [r3, #4] + 8003d8c: 6803 ldr r3, [r0, #0] + 8003d8e: 68db ldr r3, [r3, #12] + 8003d90: 4798 blx r3 + clearState(handle); + 8003d92: 4629 mov r1, r5 + 8003d94: 4620 mov r0, r4 + 8003d96: f7ff ffd1 bl 8003d3c <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE10clearStateEm> + } + 8003d9a: bd38 pop {r3, r4, r5, pc} + +08003d9c <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE12setVideoDataEmPKhm>: + virtual void setVideoData(const Handle handle, const uint8_t* movie, const uint32_t length) + 8003d9c: b570 push {r4, r5, r6, lr} + 8003d9e: 460d mov r5, r1 + 8003da0: 4611 mov r1, r2 + 8003da2: 4604 mov r4, r0 + mjpegDecoders[handle]->setVideoData(movie, length); + 8003da4: eb00 0285 add.w r2, r0, r5, lsl #2 + 8003da8: 6850 ldr r0, [r2, #4] + 8003daa: 6802 ldr r2, [r0, #0] + 8003dac: 6896 ldr r6, [r2, #8] + 8003dae: 461a mov r2, r3 + 8003db0: 47b0 blx r6 + clearState(handle); + 8003db2: 4629 mov r1, r5 + 8003db4: 4620 mov r0, r4 + 8003db6: f7ff ffc1 bl 8003d3c <_ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE10clearStateEm> + } + 8003dba: bd70 pop {r4, r5, r6, pc} + +08003dbc <_GLOBAL__sub_I_lineBuffer>: +} + 8003dbc: b538 push {r3, r4, r5, lr} +SoftwareMJPEGDecoder mjpegdecoder1((uint8_t*)lineBuffer); + 8003dbe: 4916 ldr r1, [pc, #88] ; (8003e18 <_GLOBAL__sub_I_lineBuffer+0x5c>) + bufferRGB(0), sizeBufferRGB(0), topBufferRGB(0), allowSkipFrames(true), + 8003dc0: 2500 movs r5, #0 + 8003dc2: 4816 ldr r0, [pc, #88] ; (8003e1c <_GLOBAL__sub_I_lineBuffer+0x60>) + 8003dc4: f7ff f890 bl 8002ee8 <_ZN20SoftwareMJPEGDecoderC1EPh> + semDecode(0), mutexBuffers(0) + 8003dc8: 4c15 ldr r4, [pc, #84] ; (8003e20 <_GLOBAL__sub_I_lineBuffer+0x64>) + 8003dca: 4b16 ldr r3, [pc, #88] ; (8003e24 <_GLOBAL__sub_I_lineBuffer+0x68>) + bufferRGB(0), sizeBufferRGB(0), topBufferRGB(0), allowSkipFrames(true), + 8003dcc: 2001 movs r0, #1 + semDecode = SEM_CREATE(); // Binary semaphore + 8003dce: 462a mov r2, r5 + 8003dd0: 4629 mov r1, r5 + semDecode(0), mutexBuffers(0) + 8003dd2: 6023 str r3, [r4, #0] + Stream() : frameCount(0), frameNumberNext(0), frameNumberShown(0), tickCount(0), + 8003dd4: f44f 7380 mov.w r3, #256 ; 0x100 + bufferRGB(0), sizeBufferRGB(0), topBufferRGB(0), allowSkipFrames(true), + 8003dd8: 64a5 str r5, [r4, #72] ; 0x48 + Stream() : frameCount(0), frameNumberNext(0), frameNumberShown(0), tickCount(0), + 8003dda: 87a3 strh r3, [r4, #60] ; 0x3c + bufferRGB(0), sizeBufferRGB(0), topBufferRGB(0), allowSkipFrames(true), + 8003ddc: f884 004c strb.w r0, [r4, #76] ; 0x4c + hasMoreFramesAfterNext(false), repeat(true), isStopped(false) + 8003de0: f884 503e strb.w r5, [r4, #62] ; 0x3e + bufferRGB(0), sizeBufferRGB(0), topBufferRGB(0), allowSkipFrames(true), + 8003de4: e9c4 5510 strd r5, r5, [r4, #64] ; 0x40 + semDecode(0), mutexBuffers(0) + 8003de8: e9c4 5514 strd r5, r5, [r4, #80] ; 0x50 + Stream() : frameCount(0), frameNumberNext(0), frameNumberShown(0), tickCount(0), + 8003dec: e9c4 5501 strd r5, r5, [r4, #4] + 8003df0: e9c4 5503 strd r5, r5, [r4, #12] + frame_rate_video(0), frame_rate_ticks(0), + 8003df4: e9c4 5505 strd r5, r5, [r4, #20] + seek_to_frame(0), skip_frames(0), + 8003df8: e9c4 5507 strd r5, r5, [r4, #28] + currentBuffer(0), nextBuffer(0), bufferA(0), bufferB(0), + 8003dfc: e9c4 5509 strd r5, r5, [r4, #36] ; 0x24 + 8003e00: e9c4 550b strd r5, r5, [r4, #44] ; 0x2c + Stream() : frameCount(0), frameNumberNext(0), frameNumberShown(0), tickCount(0), + 8003e04: e9c4 550d strd r5, r5, [r4, #52] ; 0x34 + semDecode = SEM_CREATE(); // Binary semaphore + 8003e08: f005 fabc bl 8009384 + 8003e0c: 6520 str r0, [r4, #80] ; 0x50 + mutexBuffers = MUTEX_CREATE(); + 8003e0e: 4628 mov r0, r5 + 8003e10: f005 fa1a bl 8009248 + 8003e14: 6560 str r0, [r4, #84] ; 0x54 +} + 8003e16: bd38 pop {r3, r4, r5, pc} + 8003e18: 200072a4 .word 0x200072a4 + 8003e1c: 20007a24 .word 0x20007a24 + 8003e20: 20007a6c .word 0x20007a6c + 8003e24: 0803720c .word 0x0803720c + +08003e28 <_ZN23ApplicationFontProviderD1Ev>: + static const touchgfx::FontId LARGE = 1; // verdana_40_4bpp + static const touchgfx::FontId SMALL = 2; // verdana_10_4bpp + static const uint16_t NUMBER_OF_FONTS = 3; +}; + +class ApplicationFontProvider : public touchgfx::FontProvider + 8003e28: 4770 bx lr + +08003e2a <_ZN23ApplicationFontProviderD0Ev>: + 8003e2a: b510 push {r4, lr} + 8003e2c: 4604 mov r4, r0 + 8003e2e: 2104 movs r1, #4 + 8003e30: f030 fa61 bl 80342f6 <_ZdlPvj> + 8003e34: 4620 mov r0, r4 + 8003e36: bd10 pop {r4, pc} + +08003e38 <_ZN23ApplicationFontProvider7getFontEt>: +#include +#include + +touchgfx::Font* ApplicationFontProvider::getFont(touchgfx::FontId typography) +{ + switch (typography) + 8003e38: 2901 cmp r1, #1 +{ + 8003e3a: b508 push {r3, lr} + switch (typography) + 8003e3c: d006 beq.n 8003e4c <_ZN23ApplicationFontProvider7getFontEt+0x14> + 8003e3e: 2902 cmp r1, #2 + 8003e40: d008 beq.n 8003e54 <_ZN23ApplicationFontProvider7getFontEt+0x1c> + 8003e42: b959 cbnz r1, 8003e5c <_ZN23ApplicationFontProvider7getFontEt+0x24> + { + case Typography::DEFAULT: + // verdana_20_4bpp + return const_cast(TypedTextDatabase::getFonts()[0]); + 8003e44: f000 ffa0 bl 8004d88 <_ZN17TypedTextDatabase8getFontsEv> + 8003e48: 6800 ldr r0, [r0, #0] + // verdana_10_4bpp + return const_cast(TypedTextDatabase::getFonts()[2]); + default: + return 0; + } +} + 8003e4a: bd08 pop {r3, pc} + return const_cast(TypedTextDatabase::getFonts()[1]); + 8003e4c: f000 ff9c bl 8004d88 <_ZN17TypedTextDatabase8getFontsEv> + 8003e50: 6840 ldr r0, [r0, #4] + 8003e52: e7fa b.n 8003e4a <_ZN23ApplicationFontProvider7getFontEt+0x12> + return const_cast(TypedTextDatabase::getFonts()[2]); + 8003e54: f000 ff98 bl 8004d88 <_ZN17TypedTextDatabase8getFontsEv> + 8003e58: 6880 ldr r0, [r0, #8] + 8003e5a: e7f6 b.n 8003e4a <_ZN23ApplicationFontProvider7getFontEt+0x12> + switch (typography) + 8003e5c: 2000 movs r0, #0 + 8003e5e: e7f4 b.n 8003e4a <_ZN23ApplicationFontProvider7getFontEt+0x12> + +08003e60 <_ZN14BitmapDatabase11getInstanceEv>: +namespace BitmapDatabase +{ +const touchgfx::Bitmap::BitmapData* getInstance() +{ + return bitmap_database; +} + 8003e60: 4800 ldr r0, [pc, #0] ; (8003e64 <_ZN14BitmapDatabase11getInstanceEv+0x4>) + 8003e62: 4770 bx lr + 8003e64: 08037254 .word 0x08037254 + +08003e68 <_ZN14BitmapDatabase15getInstanceSizeEv>: + +uint16_t getInstanceSize() +{ + return (uint16_t)(sizeof(bitmap_database) / sizeof(touchgfx::Bitmap::BitmapData)); +} + 8003e68: 2003 movs r0, #3 + 8003e6a: 4770 bx lr + +08003e6c <_ZNK8touchgfx4Font8getGlyphEt>: + * + * @return A pointer to the glyph node or null if the glyph was not found. + * + * @see TextProvider::getNextLigature + */ + virtual const GlyphNode* getGlyph(Unicode::UnicodeChar unicode) const + 8003e6c: b513 push {r0, r1, r4, lr} + 8003e6e: 2400 movs r4, #0 + { + if (unicode == 0) + 8003e70: b151 cbz r1, 8003e88 <_ZNK8touchgfx4Font8getGlyphEt+0x1c> + { + return 0; + } + const uint8_t* dummyPixelDataPointer = 0; + uint8_t bitsPerPixelDummy = 0; + const GlyphNode* glyph = getGlyph(unicode, dummyPixelDataPointer, bitsPerPixelDummy); + 8003e72: 6803 ldr r3, [r0, #0] + 8003e74: aa01 add r2, sp, #4 + const uint8_t* dummyPixelDataPointer = 0; + 8003e76: 9401 str r4, [sp, #4] + uint8_t bitsPerPixelDummy = 0; + 8003e78: f88d 4003 strb.w r4, [sp, #3] + const GlyphNode* glyph = getGlyph(unicode, dummyPixelDataPointer, bitsPerPixelDummy); + 8003e7c: 689c ldr r4, [r3, #8] + 8003e7e: f10d 0303 add.w r3, sp, #3 + 8003e82: 47a0 blx r4 + return glyph; + } + 8003e84: b002 add sp, #8 + 8003e86: bd10 pop {r4, pc} + return 0; + 8003e88: 4608 mov r0, r1 + 8003e8a: e7fb b.n 8003e84 <_ZNK8touchgfx4Font8getGlyphEt+0x18> + +08003e8c <_ZNK8touchgfx4Font15getFallbackCharEv>: + * @return The default character for the typography in case no glyph is available. + */ + virtual Unicode::UnicodeChar getFallbackChar() const + { + return fallbackCharacter; + } + 8003e8c: 89c0 ldrh r0, [r0, #14] + 8003e8e: 4770 bx lr + +08003e90 <_ZNK8touchgfx4Font15getEllipsisCharEv>: + * @see TextArea::setWideTextAction + */ + virtual Unicode::UnicodeChar getEllipsisChar() const + { + return ellipsisCharacter; + } + 8003e90: 8a00 ldrh r0, [r0, #16] + 8003e92: 4770 bx lr + +08003e94 <_ZNK8touchgfx4Font11getBaselineEv>: + * getHeight for this. + */ + FORCE_INLINE_FUNCTION virtual uint16_t getBaseline() const + { + return baselineHeight; + } + 8003e94: 88c0 ldrh r0, [r0, #6] + 8003e96: 4770 bx lr + +08003e98 <_ZNK8touchgfx4Font9getHeightEv>: + * @return The font height. + */ + FORCE_INLINE_FUNCTION virtual uint16_t getHeight() const + { + return fontHeight; + } + 8003e98: 8880 ldrh r0, [r0, #4] + 8003e9a: 4770 bx lr + +08003e9c <_ZNK8touchgfx4Font15getBitsPerPixelEv>: + * + * @return The number of bits used per pixel in this font. + */ + FORCE_INLINE_FUNCTION virtual uint8_t getBitsPerPixel() const + { + return bPerPixel; + 8003e9c: 7a80 ldrb r0, [r0, #10] + } + 8003e9e: f000 007f and.w r0, r0, #127 ; 0x7f + 8003ea2: 4770 bx lr + +08003ea4 <_ZNK8touchgfx4Font15getByteAlignRowEv>: + * + * @return True if each glyph row is stored byte aligned, false otherwise. + */ + FORCE_INLINE_FUNCTION virtual uint8_t getByteAlignRow() const + { + return bAlignRow; + 8003ea4: 7a80 ldrb r0, [r0, #10] + } + 8003ea6: 09c0 lsrs r0, r0, #7 + 8003ea8: 4770 bx lr + +08003eaa <_ZN8touchgfx9TypedTextD1Ev>: + } + 8003eaa: 4770 bx lr + +08003eac <_ZN8touchgfx9TypedTextD0Ev>: + virtual ~TypedText() + 8003eac: b510 push {r4, lr} + 8003eae: 4604 mov r4, r0 + } + 8003eb0: 2108 movs r1, #8 + 8003eb2: f030 fa20 bl 80342f6 <_ZdlPvj> + 8003eb6: 4620 mov r0, r4 + 8003eb8: bd10 pop {r4, pc} + +08003eba <_ZN8touchgfx11Application19changeToStartScreenEv>: + * this is explicitly done in your + * FrontendApplication::changeToStartScreen(). + */ + virtual void changeToStartScreen() + { + } + 8003eba: 4770 bx lr + +08003ebc <_ZN8touchgfx11Application15appSwitchScreenEh>: + * @param screenId An id that maps to the desired screen. + */ + virtual void appSwitchScreen(uint8_t screenId) + { + (void)screenId; // Unused variable + } + 8003ebc: 4770 bx lr + +08003ebe <_ZN8touchgfx11Application13requestRedrawERNS_4RectE>: + * + * @param [in,out] rect The Rect that must be redrawn. + */ + virtual void requestRedraw(Rect& rect) + { + redraw = rect; + 8003ebe: f500 7398 add.w r3, r0, #304 ; 0x130 + 8003ec2: 6808 ldr r0, [r1, #0] + 8003ec4: 6849 ldr r1, [r1, #4] + 8003ec6: c303 stmia r3!, {r0, r1} + } + 8003ec8: 4770 bx lr + +08003eca <_ZN8touchgfx10Transition8tearDownEv>: + * Tears down the Animation. Called before the destructor is called, when the + * application changes the transition. + */ + virtual void tearDown() + { + } + 8003eca: 4770 bx lr + +08003ecc <_ZN8touchgfx10Transition4initEv>: + * Initializes the transition. Called after the constructor is called, when the + * application changes the transition. + */ + virtual void init() + { + } + 8003ecc: 4770 bx lr + +08003ece <_ZN8touchgfx10Transition18setScreenContainerERNS_9ContainerE>: + * + * @param [in] cont The Container the transition should have access to. + */ + virtual void setScreenContainer(Container& cont) + { + screenContainer = &cont; + 8003ece: 6041 str r1, [r0, #4] + } + 8003ed0: 4770 bx lr + +08003ed2 <_ZN23FrontendApplicationBaseD1Ev>: + +class FrontendApplicationBase : public touchgfx::MVPApplication +{ +public: + FrontendApplicationBase(Model& m, FrontendHeap& heap); + virtual ~FrontendApplicationBase() { } + 8003ed2: 4770 bx lr + +08003ed4 <_ZN23FrontendApplicationBase19changeToStartScreenEv>: + * + * @note The member function to call must return void. The function can have zero, one, two or + * three arguments of any type. + */ +template +struct Callback : public GenericCallback<> + 8003ed4: 4b06 ldr r3, [pc, #24] ; (8003ef0 <_ZN23FrontendApplicationBase19changeToStartScreenEv+0x1c>) + 8003ed6: f8c0 0148 str.w r0, [r0, #328] ; 0x148 + 8003eda: f8c0 314c str.w r3, [r0, #332] ; 0x14c + 8003ede: 2300 movs r3, #0 + 8003ee0: f8c0 3150 str.w r3, [r0, #336] ; 0x150 +// MainScreen + +void FrontendApplicationBase::gotoMainScreenScreenNoTransition() +{ + transitionCallback = touchgfx::Callback(this, &FrontendApplicationBase::gotoMainScreenScreenNoTransitionImpl); + pendingScreenTransitionCallback = &transitionCallback; + 8003ee4: f500 73a2 add.w r3, r0, #324 ; 0x144 + 8003ee8: f8c0 3140 str.w r3, [r0, #320] ; 0x140 + + virtual void changeToStartScreen() + { + gotoMainScreenScreenNoTransition(); + } + 8003eec: 4770 bx lr + 8003eee: bf00 nop + 8003ef0: 08003f99 .word 0x08003f99 + +08003ef4 <_ZN8touchgfx12NoTransition15handleTickEventEv>: +{ +public: + /** Indicates that the transition is done after the first tick. */ + virtual void handleTickEvent() + { + done = true; + 8003ef4: 2301 movs r3, #1 + 8003ef6: 7203 strb r3, [r0, #8] + } + 8003ef8: 4770 bx lr + +08003efa <_ZN8touchgfx12NoTransitionD1Ev>: +class NoTransition : public Transition + 8003efa: 4770 bx lr + +08003efc <_ZN8touchgfx8CallbackI23FrontendApplicationBasevvvED1Ev>: + 8003efc: 4770 bx lr + +08003efe <_ZN8touchgfx8CallbackI23FrontendApplicationBasevvvE7executeEv>: + + /** + * Calls the member function. Do not call execute unless isValid() returns true (ie. a + * pointer to the object and the function has been set). + */ + virtual void execute() + 8003efe: b410 push {r4} + { + (pobject->*pmemfun)(); + 8003f00: 6841 ldr r1, [r0, #4] + virtual void execute() + 8003f02: 4603 mov r3, r0 + (pobject->*pmemfun)(); + 8003f04: 68c2 ldr r2, [r0, #12] + 8003f06: 689b ldr r3, [r3, #8] + 8003f08: 1054 asrs r4, r2, #1 + 8003f0a: eb01 0062 add.w r0, r1, r2, asr #1 + 8003f0e: 07d2 lsls r2, r2, #31 + 8003f10: bf48 it mi + 8003f12: 590a ldrmi r2, [r1, r4] + } + 8003f14: f85d 4b04 ldr.w r4, [sp], #4 + (pobject->*pmemfun)(); + 8003f18: bf48 it mi + 8003f1a: 58d3 ldrmi r3, [r2, r3] + 8003f1c: 4718 bx r3 + +08003f1e <_ZNK8touchgfx8CallbackI23FrontendApplicationBasevvvE7isValidEv>: + * + * @return true If the callback is valid (i.e. safe to call execute). + */ + virtual bool isValid() const + { + return (pobject != 0) && (pmemfun != 0); + 8003f1e: 6843 ldr r3, [r0, #4] + 8003f20: b12b cbz r3, 8003f2e <_ZNK8touchgfx8CallbackI23FrontendApplicationBasevvvE7isValidEv+0x10> + 8003f22: 6883 ldr r3, [r0, #8] + 8003f24: b92b cbnz r3, 8003f32 <_ZNK8touchgfx8CallbackI23FrontendApplicationBasevvvE7isValidEv+0x14> + 8003f26: 68c0 ldr r0, [r0, #12] + 8003f28: f000 0001 and.w r0, r0, #1 + 8003f2c: 4770 bx lr + 8003f2e: 4618 mov r0, r3 + 8003f30: 4770 bx lr + 8003f32: 2001 movs r0, #1 + } + 8003f34: 4770 bx lr + +08003f36 <_ZN8touchgfx12NoTransitionD0Ev>: + 8003f36: b510 push {r4, lr} + 8003f38: 4604 mov r4, r0 + 8003f3a: 210c movs r1, #12 + 8003f3c: f030 f9db bl 80342f6 <_ZdlPvj> + 8003f40: 4620 mov r0, r4 + 8003f42: bd10 pop {r4, pc} + +08003f44 <_ZN8touchgfx8CallbackI23FrontendApplicationBasevvvED0Ev>: +struct Callback : public GenericCallback<> + 8003f44: b510 push {r4, lr} + 8003f46: 4604 mov r4, r0 + 8003f48: 2110 movs r1, #16 + 8003f4a: f030 f9d4 bl 80342f6 <_ZdlPvj> + 8003f4e: 4620 mov r0, r4 + 8003f50: bd10 pop {r4, pc} + +08003f52 <_ZN23FrontendApplicationBaseD0Ev>: + virtual ~FrontendApplicationBase() { } + 8003f52: b510 push {r4, lr} + 8003f54: 4604 mov r4, r0 + 8003f56: f44f 71ae mov.w r1, #348 ; 0x15c + 8003f5a: f030 f9cc bl 80342f6 <_ZdlPvj> + 8003f5e: 4620 mov r0, r4 + 8003f60: bd10 pop {r4, pc} + +08003f62 <_ZN8touchgfx10Transition10invalidateEv>: + virtual void invalidate() + 8003f62: b510 push {r4, lr} + Application::getInstance()->invalidate(); + 8003f64: f01f fc40 bl 80237e8 <_ZN8touchgfx11Application11getInstanceEv> + 8003f68: 6803 ldr r3, [r0, #0] + } + 8003f6a: e8bd 4010 ldmia.w sp!, {r4, lr} + Application::getInstance()->invalidate(); + 8003f6e: 6bdb ldr r3, [r3, #60] ; 0x3c + 8003f70: 4718 bx r3 + +08003f72 <_ZN8touchgfx14MVPApplication29handlePendingScreenTransitionEv>: + /** + * Handles the pending screen transition. + * + * Delegates the work to evaluatePendingScreenTransition() + */ + virtual void handlePendingScreenTransition() + 8003f72: b510 push {r4, lr} + 8003f74: 4604 mov r4, r0 + * Evaluates the pending Callback instances. If a callback is valid, it is executed and + * a Screen transition is executed. + */ + void evaluatePendingScreenTransition() + { + if (pendingScreenTransitionCallback && pendingScreenTransitionCallback->isValid()) + 8003f76: f8d0 0140 ldr.w r0, [r0, #320] ; 0x140 + 8003f7a: b158 cbz r0, 8003f94 <_ZN8touchgfx14MVPApplication29handlePendingScreenTransitionEv+0x22> + 8003f7c: 6803 ldr r3, [r0, #0] + 8003f7e: 68db ldr r3, [r3, #12] + 8003f80: 4798 blx r3 + 8003f82: b138 cbz r0, 8003f94 <_ZN8touchgfx14MVPApplication29handlePendingScreenTransitionEv+0x22> + { + pendingScreenTransitionCallback->execute(); + 8003f84: f8d4 0140 ldr.w r0, [r4, #320] ; 0x140 + 8003f88: 6803 ldr r3, [r0, #0] + 8003f8a: 689b ldr r3, [r3, #8] + 8003f8c: 4798 blx r3 + pendingScreenTransitionCallback = 0; + 8003f8e: 2300 movs r3, #0 + 8003f90: f8c4 3140 str.w r3, [r4, #320] ; 0x140 + } + 8003f94: bd10 pop {r4, pc} + ... + +08003f98 <_ZN23FrontendApplicationBase36gotoMainScreenScreenNoTransitionImplEv>: +} + +void FrontendApplicationBase::gotoMainScreenScreenNoTransitionImpl() +{ + 8003f98: e92d 4ff1 stmdb sp!, {r0, r4, r5, r6, r7, r8, r9, sl, fp, lr} + touchgfx::makeTransition(¤tScreen, ¤tPresenter, frontendHeap, ¤tTransition, &model); + 8003f9c: e9d0 5a55 ldrd r5, sl, [r0, #340] ; 0x154 +{ + 8003fa0: 4607 mov r7, r0 + * value as the old presenter due to memory reuse. + */ +template +PresenterType* makeTransition(Screen** currentScreen, Presenter** currentPresenter, MVPHeap& heap, Transition** currentTrans, ModelType* model) +{ + assert(sizeof(ScreenType) <= heap.screenStorage.element_size() && "View allocation error: Check that all views are added to FrontendHeap::ViewTypes"); + 8003fa2: 68a8 ldr r0, [r5, #8] + 8003fa4: 6803 ldr r3, [r0, #0] + 8003fa6: 6a1b ldr r3, [r3, #32] + 8003fa8: 4798 blx r3 + 8003faa: f241 03d7 movw r3, #4311 ; 0x10d7 + 8003fae: 4298 cmp r0, r3 + 8003fb0: d805 bhi.n 8003fbe <_ZN23FrontendApplicationBase36gotoMainScreenScreenNoTransitionImplEv+0x26> + 8003fb2: 4b46 ldr r3, [pc, #280] ; (80040cc <_ZN23FrontendApplicationBase36gotoMainScreenScreenNoTransitionImplEv+0x134>) + 8003fb4: 21a3 movs r1, #163 ; 0xa3 + 8003fb6: 4a46 ldr r2, [pc, #280] ; (80040d0 <_ZN23FrontendApplicationBase36gotoMainScreenScreenNoTransitionImplEv+0x138>) + assert(sizeof(PresenterType) <= heap.presenterStorage.element_size() && "Presenter allocation error: Check that all presenters are added to FrontendHeap::PresenterTypes"); + 8003fb8: 4846 ldr r0, [pc, #280] ; (80040d4 <_ZN23FrontendApplicationBase36gotoMainScreenScreenNoTransitionImplEv+0x13c>) + 8003fba: f030 f9cb bl 8034354 <__assert_func> + 8003fbe: 6868 ldr r0, [r5, #4] + 8003fc0: 6803 ldr r3, [r0, #0] + 8003fc2: 6a1b ldr r3, [r3, #32] + 8003fc4: 4798 blx r3 + 8003fc6: 280f cmp r0, #15 + 8003fc8: d803 bhi.n 8003fd2 <_ZN23FrontendApplicationBase36gotoMainScreenScreenNoTransitionImplEv+0x3a> + 8003fca: 4b43 ldr r3, [pc, #268] ; (80040d8 <_ZN23FrontendApplicationBase36gotoMainScreenScreenNoTransitionImplEv+0x140>) + 8003fcc: 21a4 movs r1, #164 ; 0xa4 + 8003fce: 4a40 ldr r2, [pc, #256] ; (80040d0 <_ZN23FrontendApplicationBase36gotoMainScreenScreenNoTransitionImplEv+0x138>) + 8003fd0: e7f2 b.n 8003fb8 <_ZN23FrontendApplicationBase36gotoMainScreenScreenNoTransitionImplEv+0x20> + assert(sizeof(TransType) <= heap.transitionStorage.element_size() && "Transition allocation error: Check that all transitions are added to FrontendHeap::TransitionTypes"); + 8003fd2: 68e8 ldr r0, [r5, #12] + 8003fd4: 6803 ldr r3, [r0, #0] + 8003fd6: 6a1b ldr r3, [r3, #32] + 8003fd8: 4798 blx r3 + 8003fda: 280b cmp r0, #11 + 8003fdc: d803 bhi.n 8003fe6 <_ZN23FrontendApplicationBase36gotoMainScreenScreenNoTransitionImplEv+0x4e> + 8003fde: 4b3f ldr r3, [pc, #252] ; (80040dc <_ZN23FrontendApplicationBase36gotoMainScreenScreenNoTransitionImplEv+0x144>) + 8003fe0: 21a5 movs r1, #165 ; 0xa5 + 8003fe2: 4a3b ldr r2, [pc, #236] ; (80040d0 <_ZN23FrontendApplicationBase36gotoMainScreenScreenNoTransitionImplEv+0x138>) + 8003fe4: e7e8 b.n 8003fb8 <_ZN23FrontendApplicationBase36gotoMainScreenScreenNoTransitionImplEv+0x20> + if (*currentTrans) + 8003fe6: f8df 90fc ldr.w r9, [pc, #252] ; 80040e4 <_ZN23FrontendApplicationBase36gotoMainScreenScreenNoTransitionImplEv+0x14c> + Application::getInstance()->clearAllTimerWidgets(); + 8003fea: f01f fbfd bl 80237e8 <_ZN8touchgfx11Application11getInstanceEv> + + /** Clears all currently registered timer widgets. */ + + void clearAllTimerWidgets() + { + timerWidgets.clear(); + 8003fee: 3004 adds r0, #4 + 8003ff0: f01f fc1f bl 8023832 <_ZN8touchgfx11Application12TimerWidgets5clearEv> + if (*currentTrans) + 8003ff4: f8d9 0000 ldr.w r0, [r9] + 8003ff8: b110 cbz r0, 8004000 <_ZN23FrontendApplicationBase36gotoMainScreenScreenNoTransitionImplEv+0x68> + (*currentTrans)->tearDown(); + 8003ffa: 6803 ldr r3, [r0, #0] + 8003ffc: 68db ldr r3, [r3, #12] + 8003ffe: 4798 blx r3 + if (*currentTrans) + 8004000: f8d9 0000 ldr.w r0, [r9] + 8004004: b110 cbz r0, 800400c <_ZN23FrontendApplicationBase36gotoMainScreenScreenNoTransitionImplEv+0x74> + (*currentTrans)->~Transition(); + 8004006: 6803 ldr r3, [r0, #0] + 8004008: 681b ldr r3, [r3, #0] + 800400a: 4798 blx r3 + if (*currentScreen) + 800400c: f8df 80d8 ldr.w r8, [pc, #216] ; 80040e8 <_ZN23FrontendApplicationBase36gotoMainScreenScreenNoTransitionImplEv+0x150> + 8004010: f8d8 0000 ldr.w r0, [r8] + 8004014: b110 cbz r0, 800401c <_ZN23FrontendApplicationBase36gotoMainScreenScreenNoTransitionImplEv+0x84> + (*currentScreen)->tearDownScreen(); + 8004016: 6803 ldr r3, [r0, #0] + 8004018: 695b ldr r3, [r3, #20] + 800401a: 4798 blx r3 + if (*currentPresenter) + 800401c: f8d7 013c ldr.w r0, [r7, #316] ; 0x13c + 8004020: b110 cbz r0, 8004028 <_ZN23FrontendApplicationBase36gotoMainScreenScreenNoTransitionImplEv+0x90> + (*currentPresenter)->deactivate(); + 8004022: 6803 ldr r3, [r0, #0] + 8004024: 685b ldr r3, [r3, #4] + 8004026: 4798 blx r3 + if (*currentScreen) + 8004028: f8d8 0000 ldr.w r0, [r8] + 800402c: b110 cbz r0, 8004034 <_ZN23FrontendApplicationBase36gotoMainScreenScreenNoTransitionImplEv+0x9c> + (*currentScreen)->~Screen(); + 800402e: 6803 ldr r3, [r0, #0] + 8004030: 681b ldr r3, [r3, #0] + 8004032: 4798 blx r3 + if (*currentPresenter) + 8004034: f8d7 013c ldr.w r0, [r7, #316] ; 0x13c + 8004038: b110 cbz r0, 8004040 <_ZN23FrontendApplicationBase36gotoMainScreenScreenNoTransitionImplEv+0xa8> + (*currentPresenter)->~Presenter(); + 800403a: 6803 ldr r3, [r0, #0] + 800403c: 689b ldr r3, [r3, #8] + 800403e: 4798 blx r3 + + prepareTransition(currentScreen, currentPresenter, currentTrans); + + TransType* newTransition = new (&heap.transitionStorage.at(0)) TransType; + 8004040: 68e8 ldr r0, [r5, #12] + * @return A typed reference to the object at the specified index. + */ + template + T& at(const uint16_t index) + { + return *static_cast(element(index)); + 8004042: 2100 movs r1, #0 + : screenContainer(0), done(false) + 8004044: f04f 0b00 mov.w fp, #0 + 8004048: 6803 ldr r3, [r0, #0] + 800404a: 6a5b ldr r3, [r3, #36] ; 0x24 + 800404c: 4798 blx r3 + 800404e: 4b24 ldr r3, [pc, #144] ; (80040e0 <_ZN23FrontendApplicationBase36gotoMainScreenScreenNoTransitionImplEv+0x148>) + 8004050: 4604 mov r4, r0 + 8004052: f8c0 b004 str.w fp, [r0, #4] + 8004056: 6003 str r3, [r0, #0] + 8004058: 4659 mov r1, fp + 800405a: f880 b008 strb.w fp, [r0, #8] + ScreenType* newScreen = new (&heap.screenStorage.at(0)) ScreenType; + 800405e: 68a8 ldr r0, [r5, #8] + 8004060: 6803 ldr r3, [r0, #0] + 8004062: 6a5b ldr r3, [r3, #36] ; 0x24 + 8004064: 4798 blx r3 + 8004066: 4606 mov r6, r0 + 8004068: f000 ff26 bl 8004eb8 <_ZN14MainScreenViewC1Ev> + PresenterType* newPresenter = new (&heap.presenterStorage.at(0)) PresenterType(*newScreen); + 800406c: 6868 ldr r0, [r5, #4] + 800406e: 4659 mov r1, fp + 8004070: 6803 ldr r3, [r0, #0] + 8004072: 6a5b ldr r3, [r3, #36] ; 0x24 + 8004074: 4798 blx r3 + 8004076: 4605 mov r5, r0 + 8004078: 4631 mov r1, r6 + 800407a: f000 fec7 bl 8004e0c <_ZN19MainScreenPresenterC1ER14MainScreenView> + *currentTrans = newTransition; + 800407e: f8c9 4000 str.w r4, [r9] + *currentPresenter = newPresenter; + 8004082: f8c7 513c str.w r5, [r7, #316] ; 0x13c + *currentScreen = newScreen; + 8004086: f8c8 6000 str.w r6, [r8] + model->bind(newPresenter); + 800408a: b1e5 cbz r5, 80040c6 <_ZN23FrontendApplicationBase36gotoMainScreenScreenNoTransitionImplEv+0x12e> + 800408c: 1d2b adds r3, r5, #4 +public: + Model(); + + void bind(ModelListener* listener) + { + modelListener = listener; + 800408e: f8ca 3008 str.w r3, [sl, #8] + newScreen->setupScreen(); + 8004092: 4630 mov r0, r6 + 8004094: 6833 ldr r3, [r6, #0] + + virtual ~ModelListener() {} + + void bind(Model* m) + { + model = m; + 8004096: f8c5 a008 str.w sl, [r5, #8] + 800409a: 68db ldr r3, [r3, #12] + * + * @param [in] newPresenter The specific Presenter to be associated with the View. + */ + void bind(T& newPresenter) + { + presenter = &newPresenter; + 800409c: 63f5 str r5, [r6, #60] ; 0x3c + 800409e: 4798 blx r3 + newPresenter->activate(); + 80040a0: 682b ldr r3, [r5, #0] + 80040a2: 4628 mov r0, r5 + 80040a4: 681b ldr r3, [r3, #0] + 80040a6: 4798 blx r3 + newScreen->bindTransition(*newTransition); + 80040a8: 4621 mov r1, r4 + 80040aa: 4630 mov r0, r6 + 80040ac: f021 f936 bl 802531c <_ZN8touchgfx6Screen14bindTransitionERNS_10TransitionE> + newTransition->init(); + 80040b0: 6823 ldr r3, [r4, #0] + 80040b2: 4620 mov r0, r4 + 80040b4: 691b ldr r3, [r3, #16] + 80040b6: 4798 blx r3 + newTransition->invalidate(); + 80040b8: 6823 ldr r3, [r4, #0] + 80040ba: 4620 mov r0, r4 + 80040bc: 695b ldr r3, [r3, #20] +} + 80040be: b001 add sp, #4 + 80040c0: e8bd 4ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 80040c4: 4718 bx r3 + model->bind(newPresenter); + 80040c6: 462b mov r3, r5 + 80040c8: e7e1 b.n 800408e <_ZN23FrontendApplicationBase36gotoMainScreenScreenNoTransitionImplEv+0xf6> + 80040ca: bf00 nop + 80040cc: 080372a0 .word 0x080372a0 + 80040d0: 0803732e .word 0x0803732e + 80040d4: 08037438 .word 0x08037438 + 80040d8: 0803747f .word 0x0803747f + 80040dc: 08037522 .word 0x08037522 + 80040e0: 0803763c .word 0x0803763c + 80040e4: 2001e774 .word 0x2001e774 + 80040e8: 2001e770 .word 0x2001e770 + +080040ec <_ZN8touchgfx3HAL3lcdEv>: + if (instance->useAuxiliaryLCD && instance->auxiliaryLCD) + 80040ec: 4b04 ldr r3, [pc, #16] ; (8004100 <_ZN8touchgfx3HAL3lcdEv+0x14>) + 80040ee: 681b ldr r3, [r3, #0] + 80040f0: f893 2058 ldrb.w r2, [r3, #88] ; 0x58 + 80040f4: b10a cbz r2, 80040fa <_ZN8touchgfx3HAL3lcdEv+0xe> + 80040f6: 6cd8 ldr r0, [r3, #76] ; 0x4c + 80040f8: b900 cbnz r0, 80040fc <_ZN8touchgfx3HAL3lcdEv+0x10> + return instance->lcdRef; + 80040fa: 6898 ldr r0, [r3, #8] + } + 80040fc: 4770 bx lr + 80040fe: bf00 nop + 8004100: 2001e734 .word 0x2001e734 + +08004104 <_ZN23FrontendApplicationBaseC1ER5ModelR12FrontendHeap>: +FrontendApplicationBase::FrontendApplicationBase(Model& m, FrontendHeap& heap) + 8004104: b5f8 push {r3, r4, r5, r6, r7, lr} + 8004106: 4604 mov r4, r0 + 8004108: 4617 mov r7, r2 + 800410a: 460e mov r6, r1 + pendingScreenTransitionCallback(0) + 800410c: f01f fc32 bl 8023974 <_ZN8touchgfx11ApplicationC1Ev> + instance = this; + 8004110: 4b10 ldr r3, [pc, #64] ; (8004154 <_ZN23FrontendApplicationBaseC1ER5ModelR12FrontendHeap+0x50>) + : currentPresenter(0), + 8004112: 2500 movs r5, #0 + instance = this; + 8004114: 601c str r4, [r3, #0] + touchgfx::HAL::getInstance()->setDisplayOrientation(touchgfx::ORIENTATION_LANDSCAPE); + 8004116: 4629 mov r1, r5 + model(m) + 8004118: 4b0f ldr r3, [pc, #60] ; (8004158 <_ZN23FrontendApplicationBaseC1ER5ModelR12FrontendHeap+0x54>) + 800411a: 6023 str r3, [r4, #0] + : pobject(0), pmemfun(0) + 800411c: 4b0f ldr r3, [pc, #60] ; (800415c <_ZN23FrontendApplicationBaseC1ER5ModelR12FrontendHeap+0x58>) + 800411e: e9c4 3551 strd r3, r5, [r4, #324] ; 0x144 + return instance; + 8004122: 4b0f ldr r3, [pc, #60] ; (8004160 <_ZN23FrontendApplicationBaseC1ER5ModelR12FrontendHeap+0x5c>) + 8004124: 6818 ldr r0, [r3, #0] + 8004126: e9c4 5553 strd r5, r5, [r4, #332] ; 0x14c + touchgfx::HAL::getInstance()->setDisplayOrientation(touchgfx::ORIENTATION_LANDSCAPE); + 800412a: 6803 ldr r3, [r0, #0] + pendingScreenTransitionCallback(0) + 800412c: e9c4 554f strd r5, r5, [r4, #316] ; 0x13c + 8004130: 689b ldr r3, [r3, #8] + model(m) + 8004132: e9c4 7655 strd r7, r6, [r4, #340] ; 0x154 + touchgfx::HAL::getInstance()->setDisplayOrientation(touchgfx::ORIENTATION_LANDSCAPE); + 8004136: 4798 blx r3 + touchgfx::Texts::setLanguage(GB); + 8004138: 4628 mov r0, r5 + 800413a: f000 fdd9 bl 8004cf0 <_ZN8touchgfx5Texts11setLanguageEt> + reinterpret_cast(touchgfx::HAL::lcd()).enableTextureMapperAll(); + 800413e: f7ff ffd5 bl 80040ec <_ZN8touchgfx3HAL3lcdEv> + 8004142: f028 fd7e bl 802cc42 <_ZN8touchgfx8LCD16bpp22enableTextureMapperAllEv> + reinterpret_cast(touchgfx::HAL::lcd()).enableDecompressorL8_All(); + 8004146: f7ff ffd1 bl 80040ec <_ZN8touchgfx3HAL3lcdEv> + 800414a: f028 fdf5 bl 802cd38 <_ZN8touchgfx8LCD16bpp24enableDecompressorL8_AllEv> +} + 800414e: 4620 mov r0, r4 + 8004150: bdf8 pop {r3, r4, r5, r6, r7, pc} + 8004152: bf00 nop + 8004154: 2001e780 .word 0x2001e780 + 8004158: 080375e8 .word 0x080375e8 + 800415c: 080375d0 .word 0x080375d0 + 8004160: 2001e734 .word 0x2001e734 + +08004164 <_ZN23FrontendApplicationBase32gotoMainScreenScreenNoTransitionEv>: +struct Callback : public GenericCallback<> + 8004164: 4b06 ldr r3, [pc, #24] ; (8004180 <_ZN23FrontendApplicationBase32gotoMainScreenScreenNoTransitionEv+0x1c>) + 8004166: f8c0 0148 str.w r0, [r0, #328] ; 0x148 + 800416a: f8c0 314c str.w r3, [r0, #332] ; 0x14c + 800416e: 2300 movs r3, #0 + 8004170: f8c0 3150 str.w r3, [r0, #336] ; 0x150 + pendingScreenTransitionCallback = &transitionCallback; + 8004174: f500 73a2 add.w r3, r0, #324 ; 0x144 + 8004178: f8c0 3140 str.w r3, [r0, #320] ; 0x140 +} + 800417c: 4770 bx lr + 800417e: bf00 nop + 8004180: 08003f99 .word 0x08003f99 + +08004184 <_ZNK8touchgfx13GeneratedFont12getGSUBTableEv>: + virtual int8_t getKerning(Unicode::UnicodeChar prevChar, const GlyphNode* glyph) const; + + virtual const uint16_t* getGSUBTable() const + { + return gsubTable; + } + 8004184: 6a40 ldr r0, [r0, #36] ; 0x24 + 8004186: 4770 bx lr + +08004188 <_ZNK8touchgfx13GeneratedFont23getContextualFormsTableEv>: + + virtual const FontContextualFormsTable* getContextualFormsTable() const + { + return arabicTable; + } + 8004188: 6a80 ldr r0, [r0, #40] ; 0x28 + 800418a: 4770 bx lr + +0800418c <_ZN8touchgfx13GeneratedFontD1Ev>: +class GeneratedFont : public ConstFont + 800418c: 4770 bx lr + +0800418e <_ZNK8touchgfx13GeneratedFont12getPixelDataEPKNS_9GlyphNodeE>: +} + +const uint8_t* GeneratedFont::getPixelData(const GlyphNode* glyph) const +{ + const uint8_t* const* table = (const uint8_t* const*)glyphData; + return &(table[glyph->unicode / 2048][glyph->dataOffset]); + 800418e: 888b ldrh r3, [r1, #4] + 8004190: 69c0 ldr r0, [r0, #28] + 8004192: 0adb lsrs r3, r3, #11 + 8004194: 680a ldr r2, [r1, #0] + 8004196: f850 0023 ldr.w r0, [r0, r3, lsl #2] +} + 800419a: 4410 add r0, r2 + 800419c: 4770 bx lr + +0800419e <_ZNK8touchgfx13GeneratedFont10getKerningEtPKNS_9GlyphNodeE>: + +int8_t GeneratedFont::getKerning(Unicode::UnicodeChar prevChar, const GlyphNode* glyph) const +{ + 800419e: b510 push {r4, lr} + if (!glyph || glyph->kerningTableSize == 0) + 80041a0: b1c2 cbz r2, 80041d4 <_ZNK8touchgfx13GeneratedFont10getKerningEtPKNS_9GlyphNodeE+0x36> + 80041a2: 7b13 ldrb r3, [r2, #12] + 80041a4: b1b3 cbz r3, 80041d4 <_ZNK8touchgfx13GeneratedFont10getKerningEtPKNS_9GlyphNodeE+0x36> + return ((flags & GLYPH_DATA_KERNINGTABLEPOS_BIT8_10) << 8) | _kerningTablePos; + 80041a6: 7b54 ldrb r4, [r2, #13] + 80041a8: 7ad2 ldrb r2, [r2, #11] + 80041aa: 0224 lsls r4, r4, #8 + 80041ac: f404 64e0 and.w r4, r4, #1792 ; 0x700 + { + return 0; + } + + const KerningNode* kerndata = kerningData + glyph->kerningTablePos(); + 80041b0: 4314 orrs r4, r2 + 80041b2: 6a02 ldr r2, [r0, #32] + for (uint16_t i = glyph->kerningTableSize; i > 0; i--, kerndata++) + 80041b4: b298 uxth r0, r3 + const KerningNode* kerndata = kerningData + glyph->kerningTablePos(); + 80041b6: eb02 0284 add.w r2, r2, r4, lsl #2 + { + if (prevChar == kerndata->unicodePrevChar) + 80041ba: 8813 ldrh r3, [r2, #0] + 80041bc: 428b cmp r3, r1 + 80041be: d102 bne.n 80041c6 <_ZNK8touchgfx13GeneratedFont10getKerningEtPKNS_9GlyphNodeE+0x28> + { + return kerndata->distance; + 80041c0: f992 0002 ldrsb.w r0, [r2, #2] + { + break; + } + } + return 0; +} + 80041c4: bd10 pop {r4, pc} + if (prevChar < kerndata->unicodePrevChar) + 80041c6: d805 bhi.n 80041d4 <_ZNK8touchgfx13GeneratedFont10getKerningEtPKNS_9GlyphNodeE+0x36> + for (uint16_t i = glyph->kerningTableSize; i > 0; i--, kerndata++) + 80041c8: 3801 subs r0, #1 + 80041ca: 3204 adds r2, #4 + 80041cc: b280 uxth r0, r0 + 80041ce: 2800 cmp r0, #0 + 80041d0: d1f3 bne.n 80041ba <_ZNK8touchgfx13GeneratedFont10getKerningEtPKNS_9GlyphNodeE+0x1c> + 80041d2: e7f7 b.n 80041c4 <_ZNK8touchgfx13GeneratedFont10getKerningEtPKNS_9GlyphNodeE+0x26> + return 0; + 80041d4: 2000 movs r0, #0 + 80041d6: e7f5 b.n 80041c4 <_ZNK8touchgfx13GeneratedFont10getKerningEtPKNS_9GlyphNodeE+0x26> + +080041d8 <_ZN8touchgfx13GeneratedFontD0Ev>: + 80041d8: b510 push {r4, lr} + 80041da: 4604 mov r4, r0 + 80041dc: 212c movs r1, #44 ; 0x2c + 80041de: f030 f88a bl 80342f6 <_ZdlPvj> + 80041e2: 4620 mov r0, r4 + 80041e4: bd10 pop {r4, pc} + ... + +080041e8 <_ZN8touchgfx13GeneratedFontC1EPKNS_9GlyphNodeEttthhhhhhPKPKhPKNS_11KerningNodeEttPKtPKNS_24FontContextualFormsTableE>: +GeneratedFont::GeneratedFont(const GlyphNode* glyphs, uint16_t numGlyphs, uint16_t height, uint16_t baseline, uint8_t pixAboveTop, uint8_t pixBelowBottom, uint8_t bitsPerPixel, uint8_t byteAlignRow, uint8_t maxLeft, uint8_t maxRight, const uint8_t* const* glyphDataInternalFlash, const KerningNode* kerningList, const Unicode::UnicodeChar fallbackChar, const Unicode::UnicodeChar ellipsisChar, const uint16_t* const gsubData, const FontContextualFormsTable* formsTable) + 80041e8: b530 push {r4, r5, lr} + 80041ea: b08b sub sp, #44 ; 0x2c + 80041ec: 4604 mov r4, r0 + arabicTable(formsTable) + 80041ee: f8bd 5060 ldrh.w r5, [sp, #96] ; 0x60 + 80041f2: 9508 str r5, [sp, #32] + 80041f4: f8bd 505c ldrh.w r5, [sp, #92] ; 0x5c + 80041f8: 9507 str r5, [sp, #28] + 80041fa: f89d 5050 ldrb.w r5, [sp, #80] ; 0x50 + 80041fe: 9506 str r5, [sp, #24] + 8004200: f89d 504c ldrb.w r5, [sp, #76] ; 0x4c + 8004204: 9505 str r5, [sp, #20] + 8004206: f89d 5048 ldrb.w r5, [sp, #72] ; 0x48 + 800420a: 9504 str r5, [sp, #16] + 800420c: f89d 5044 ldrb.w r5, [sp, #68] ; 0x44 + 8004210: 9503 str r5, [sp, #12] + 8004212: f89d 5040 ldrb.w r5, [sp, #64] ; 0x40 + 8004216: 9502 str r5, [sp, #8] + 8004218: f89d 503c ldrb.w r5, [sp, #60] ; 0x3c + 800421c: 9501 str r5, [sp, #4] + 800421e: f8bd 5038 ldrh.w r5, [sp, #56] ; 0x38 + 8004222: 9500 str r5, [sp, #0] + 8004224: f020 fc06 bl 8024a34 <_ZN8touchgfx9ConstFontC1EPKNS_9GlyphNodeEttthhhhhhtt> + 8004228: 4b06 ldr r3, [pc, #24] ; (8004244 <_ZN8touchgfx13GeneratedFontC1EPKNS_9GlyphNodeEttthhhhhhPKPKhPKNS_11KerningNodeEttPKtPKNS_24FontContextualFormsTableE+0x5c>) +} + 800422a: 4620 mov r0, r4 + arabicTable(formsTable) + 800422c: 6023 str r3, [r4, #0] + glyphData(glyphDataInternalFlash), + 800422e: 9b15 ldr r3, [sp, #84] ; 0x54 + 8004230: 61e3 str r3, [r4, #28] + kerningData(kerningList), + 8004232: 9b16 ldr r3, [sp, #88] ; 0x58 + 8004234: 6223 str r3, [r4, #32] + gsubTable(gsubData), + 8004236: 9b19 ldr r3, [sp, #100] ; 0x64 + 8004238: 6263 str r3, [r4, #36] ; 0x24 + arabicTable(formsTable) + 800423a: 9b1a ldr r3, [sp, #104] ; 0x68 + 800423c: 62a3 str r3, [r4, #40] ; 0x28 +} + 800423e: b00b add sp, #44 ; 0x2c + 8004240: bd30 pop {r4, r5, pc} + 8004242: bf00 nop + 8004244: 08037660 .word 0x08037660 + +08004248 <_ZN8touchgfx8Drawable13getFirstChildEv>: + * @see Container::getFirstChild + */ + virtual Drawable* getFirstChild() + { + return 0; + } + 8004248: 2000 movs r0, #0 + 800424a: 4770 bx lr + +0800424c <_ZN8touchgfx8Drawable4setXEs>: + * + * @note For most Drawable widgets, changing this does normally not automatically yield a redraw. + */ + virtual void setX(int16_t x) + { + rect.x = x; + 800424c: 8081 strh r1, [r0, #4] + } + 800424e: 4770 bx lr + +08004250 <_ZN8touchgfx8Drawable4setYEs>: + * + * @note For most Drawable widgets, changing this does normally not automatically yield a redraw. + */ + virtual void setY(int16_t y) + { + rect.y = y; + 8004250: 80c1 strh r1, [r0, #6] + } + 8004252: 4770 bx lr + +08004254 <_ZN8touchgfx8Drawable8setWidthEs>: + * + * @note For most Drawable widgets, changing this does normally not automatically yield a redraw. + */ + virtual void setWidth(int16_t width) + { + rect.width = width; + 8004254: 8101 strh r1, [r0, #8] + } + 8004256: 4770 bx lr + +08004258 <_ZN8touchgfx8Drawable9setHeightEs>: + * + * @note For most Drawable widgets, changing this does normally not automatically yield a redraw. + */ + virtual void setHeight(int16_t height) + { + rect.height = height; + 8004258: 8141 strh r1, [r0, #10] + } + 800425a: 4770 bx lr + +0800425c <_ZN8touchgfx8Drawable20childGeometryChangedEv>: + * one or more of its children has changed. Currently only used in ScrollableContainer + * to redraw scrollbars when the size of the scrolling contents changes. + */ + virtual void childGeometryChanged() + { + } + 800425c: 4770 bx lr + +0800425e <_ZN8touchgfx8Drawable16handleClickEventERKNS_10ClickEventE>: + * @param event The ClickEvent received from the HAL. + */ + virtual void handleClickEvent(const ClickEvent& event) + { + (void)event; // Unused variable + } + 800425e: 4770 bx lr + +08004260 <_ZN8touchgfx8Drawable18handleGestureEventERKNS_12GestureEventE>: + * @param event The GestureEvent received from the HAL. + */ + virtual void handleGestureEvent(const GestureEvent& event) + { + (void)event; // Unused variable + } + 8004260: 4770 bx lr + +08004262 <_ZN8touchgfx8Drawable15handleDragEventERKNS_9DragEventE>: + * @param event The DragEvent received from the HAL. + */ + virtual void handleDragEvent(const DragEvent& event) + { + (void)event; // Unused variable + } + 8004262: 4770 bx lr + +08004264 <_ZN8touchgfx8Drawable15handleTickEventEv>: + * + * @see Application::registerTimerWidget + */ + virtual void handleTickEvent() + { + } + 8004264: 4770 bx lr + +08004266 <_ZN8touchgfx8Drawable6moveToEss>: + * + * @see moveRelative, setXY + * + * @note Will redraw the appropriate areas of the screen. + */ + virtual void moveTo(int16_t x, int16_t y) + 8004266: b410 push {r4} + { + moveRelative(x - rect.x, y - rect.y); + 8004268: 88c4 ldrh r4, [r0, #6] + 800426a: 6803 ldr r3, [r0, #0] + 800426c: 1b12 subs r2, r2, r4 + 800426e: 8884 ldrh r4, [r0, #4] + 8004270: 6d5b ldr r3, [r3, #84] ; 0x54 + 8004272: 1b09 subs r1, r1, r4 + 8004274: b212 sxth r2, r2 + } + 8004276: f85d 4b04 ldr.w r4, [sp], #4 + moveRelative(x - rect.x, y - rect.y); + 800427a: b209 sxth r1, r1 + 800427c: 4718 bx r3 + +0800427e <_ZN8touchgfx8Drawable14setupDrawChainERKNS_4RectEPPS0_>: + * @note For TouchGFX internal use only. + */ + void resetDrawChainCache() + { + // Resetting the cached indicators + cachedVisibleRect.x = UNCACHED_INDICATOR; + 800427e: f64f 73ff movw r3, #65535 ; 0xffff + 8004282: 8183 strh r3, [r0, #12] + cachedAbsX = UNCACHED_INDICATOR; + 8004284: f04f 33ff mov.w r3, #4294967295 + 8004288: 6203 str r3, [r0, #32] + */ + virtual void setupDrawChain(const Rect& invalidatedArea, Drawable** nextPreviousElement) + { + (void)invalidatedArea; // Unused variable + resetDrawChainCache(); + nextDrawChainElement = *nextPreviousElement; + 800428a: 6813 ldr r3, [r2, #0] + 800428c: 61c3 str r3, [r0, #28] + *nextPreviousElement = this; + 800428e: 6010 str r0, [r2, #0] + } + 8004290: 4770 bx lr + +08004292 <_ZN8touchgfx6Screen11setupScreenEv>: + * + * @see Application::switchScreen + */ + virtual void setupScreen() + { + } + 8004292: 4770 bx lr + +08004294 <_ZN8touchgfx6Screen15afterTransitionEv>: + * + * @see Application::handleTickEvent + */ + virtual void afterTransition() + { + } + 8004294: 4770 bx lr + +08004296 <_ZN8touchgfx6Screen14tearDownScreenEv>: + * + * @see Application::switchScreen + */ + virtual void tearDownScreen() + { + } + 8004296: 4770 bx lr + +08004298 <_ZN8touchgfx6Screen15handleTickEventEv>: + * Called by the Application on the current screen with a frequency of + * Application::TICK_INTERVAL_MS. + */ + virtual void handleTickEvent() + { + } + 8004298: 4770 bx lr + +0800429a <_ZN8touchgfx6Screen14handleKeyEventEh>: + * @param key The key to handle. + */ + virtual void handleKeyEvent(uint8_t key) + { + (void)key; // Unused variable + } + 800429a: 4770 bx lr + +0800429c <_ZN8touchgfx6Widget12getLastChildEssPPNS_8DrawableE>: + * + * @param [out] last Result, the address of the actual instance of the Widget. + */ + virtual void getLastChild(int16_t /*x*/, int16_t /*y*/, Drawable** last) + { + if (isVisible() && isTouchable()) + 800429c: f890 2025 ldrb.w r2, [r0, #37] ; 0x25 + 80042a0: b11a cbz r2, 80042aa <_ZN8touchgfx6Widget12getLastChildEssPPNS_8DrawableE+0xe> + 80042a2: f890 2024 ldrb.w r2, [r0, #36] ; 0x24 + 80042a6: b102 cbz r2, 80042aa <_ZN8touchgfx6Widget12getLastChildEssPPNS_8DrawableE+0xe> + { + *last = this; + 80042a8: 6018 str r0, [r3, #0] + } + } + 80042aa: 4770 bx lr + +080042ac <_ZN18MainScreenViewBase10updatePwm1Eh>: + * Virtual Action Handlers + */ + virtual void updatePwm1(uint8_t value) + { + // Override and implement this function in MainScreen + } + 80042ac: 4770 bx lr + +080042ae <_ZN18MainScreenViewBase10updatePwm2Eh>: + virtual void updatePwm2(uint8_t value) + { + // Override and implement this function in MainScreen + } + 80042ae: 4770 bx lr + +080042b0 <_ZN18MainScreenViewBase10updatePwm3Eh>: + virtual void updatePwm3(uint8_t value) + { + // Override and implement this function in MainScreen + } + 80042b0: 4770 bx lr + +080042b2 <_ZN18MainScreenViewBase10updatePwm4Eh>: + virtual void updatePwm4(uint8_t value) + { + // Override and implement this function in MainScreen + } + 80042b2: 4770 bx lr + +080042b4 <_ZN18MainScreenViewBase10updatePwm5Eh>: + virtual void updatePwm5(uint8_t value) + { + // Override and implement this function in MainScreen + } + 80042b4: 4770 bx lr + +080042b6 <_ZN18MainScreenViewBase10updatePwm6Eh>: + virtual void updatePwm6(uint8_t value) + { + // Override and implement this function in MainScreen + } + 80042b6: 4770 bx lr + +080042b8 <_ZN18MainScreenViewBase10updatePwm7Eh>: + virtual void updatePwm7(uint8_t value) + { + // Override and implement this function in MainScreen + } + 80042b8: 4770 bx lr + +080042ba <_ZN18MainScreenViewBase10updatePwm8Eh>: + virtual void updatePwm8(uint8_t value) + { + // Override and implement this function in MainScreen + } + 80042ba: 4770 bx lr + +080042bc <_ZN18MainScreenViewBase40sliderContainer1UpdatePwmCallbackHandlerEh>: +void MainScreenViewBase::sliderContainer1UpdatePwmCallbackHandler(uint8_t value) +{ + //Interaction1 + //When sliderContainer1 updatePwm call virtual function + //Call updatePwm1 + updatePwm1(value); + 80042bc: 6803 ldr r3, [r0, #0] + 80042be: 6adb ldr r3, [r3, #44] ; 0x2c + 80042c0: 4718 bx r3 + +080042c2 <_ZN18MainScreenViewBase40sliderContainer2UpdatePwmCallbackHandlerEh>: +void MainScreenViewBase::sliderContainer2UpdatePwmCallbackHandler(uint8_t value) +{ + //Interaction2 + //When sliderContainer2 updatePwm call virtual function + //Call updatePwm2 + updatePwm2(value); + 80042c2: 6803 ldr r3, [r0, #0] + 80042c4: 6b1b ldr r3, [r3, #48] ; 0x30 + 80042c6: 4718 bx r3 + +080042c8 <_ZN18MainScreenViewBase40sliderContainer3UpdatePwmCallbackHandlerEh>: +void MainScreenViewBase::sliderContainer3UpdatePwmCallbackHandler(uint8_t value) +{ + //Interaction3 + //When sliderContainer3 updatePwm call virtual function + //Call updatePwm3 + updatePwm3(value); + 80042c8: 6803 ldr r3, [r0, #0] + 80042ca: 6b5b ldr r3, [r3, #52] ; 0x34 + 80042cc: 4718 bx r3 + +080042ce <_ZN18MainScreenViewBase40sliderContainer4UpdatePwmCallbackHandlerEh>: +void MainScreenViewBase::sliderContainer4UpdatePwmCallbackHandler(uint8_t value) +{ + //Interaction4 + //When sliderContainer4 updatePwm call virtual function + //Call updatePwm4 + updatePwm4(value); + 80042ce: 6803 ldr r3, [r0, #0] + 80042d0: 6b9b ldr r3, [r3, #56] ; 0x38 + 80042d2: 4718 bx r3 + +080042d4 <_ZN18MainScreenViewBase40sliderContainer5UpdatePwmCallbackHandlerEh>: +void MainScreenViewBase::sliderContainer5UpdatePwmCallbackHandler(uint8_t value) +{ + //Interaction5 + //When sliderContainer5 updatePwm call virtual function + //Call updatePwm5 + updatePwm5(value); + 80042d4: 6803 ldr r3, [r0, #0] + 80042d6: 6bdb ldr r3, [r3, #60] ; 0x3c + 80042d8: 4718 bx r3 + +080042da <_ZN18MainScreenViewBase40sliderContainer6UpdatePwmCallbackHandlerEh>: +void MainScreenViewBase::sliderContainer6UpdatePwmCallbackHandler(uint8_t value) +{ + //Interaction6 + //When sliderContainer6 updatePwm call virtual function + //Call updatePwm6 + updatePwm6(value); + 80042da: 6803 ldr r3, [r0, #0] + 80042dc: 6c1b ldr r3, [r3, #64] ; 0x40 + 80042de: 4718 bx r3 + +080042e0 <_ZN18MainScreenViewBase40sliderContainer7UpdatePwmCallbackHandlerEh>: +void MainScreenViewBase::sliderContainer7UpdatePwmCallbackHandler(uint8_t value) +{ + //Interaction7 + //When sliderContainer7 updatePwm call virtual function + //Call updatePwm7 + updatePwm7(value); + 80042e0: 6803 ldr r3, [r0, #0] + 80042e2: 6c5b ldr r3, [r3, #68] ; 0x44 + 80042e4: 4718 bx r3 + +080042e6 <_ZN18MainScreenViewBase40sliderContainer8UpdatePwmCallbackHandlerEh>: +void MainScreenViewBase::sliderContainer8UpdatePwmCallbackHandler(uint8_t value) +{ + //Interaction8 + //When sliderContainer8 updatePwm call virtual function + //Call updatePwm8 + updatePwm8(value); + 80042e6: 6803 ldr r3, [r0, #0] + 80042e8: 6c9b ldr r3, [r3, #72] ; 0x48 + 80042ea: 4718 bx r3 + +080042ec <_ZN8touchgfx8CallbackI18MainScreenViewBasehvvED1Ev>: +struct Callback : public GenericCallback + 80042ec: 4770 bx lr + +080042ee <_ZN8touchgfx8CallbackI18MainScreenViewBasehvvE7executeEh>: + virtual void execute(T1 t1) + 80042ee: b430 push {r4, r5} + (pobject->*pmemfun)(t1); + 80042f0: 6844 ldr r4, [r0, #4] + virtual void execute(T1 t1) + 80042f2: 4603 mov r3, r0 + (pobject->*pmemfun)(t1); + 80042f4: 68c2 ldr r2, [r0, #12] + 80042f6: 689b ldr r3, [r3, #8] + 80042f8: 1055 asrs r5, r2, #1 + 80042fa: eb04 0062 add.w r0, r4, r2, asr #1 + 80042fe: 07d2 lsls r2, r2, #31 + 8004300: bf48 it mi + 8004302: 5962 ldrmi r2, [r4, r5] + } + 8004304: bc30 pop {r4, r5} + (pobject->*pmemfun)(t1); + 8004306: bf48 it mi + 8004308: 58d3 ldrmi r3, [r2, r3] + 800430a: 4718 bx r3 + +0800430c <_ZNK8touchgfx8CallbackI18MainScreenViewBasehvvE7isValidEv>: + return (pobject != 0) && (pmemfun != 0); + 800430c: 6843 ldr r3, [r0, #4] + 800430e: b12b cbz r3, 800431c <_ZNK8touchgfx8CallbackI18MainScreenViewBasehvvE7isValidEv+0x10> + 8004310: 6883 ldr r3, [r0, #8] + 8004312: b92b cbnz r3, 8004320 <_ZNK8touchgfx8CallbackI18MainScreenViewBasehvvE7isValidEv+0x14> + 8004314: 68c0 ldr r0, [r0, #12] + 8004316: f000 0001 and.w r0, r0, #1 + 800431a: 4770 bx lr + 800431c: 4618 mov r0, r3 + 800431e: 4770 bx lr + 8004320: 2001 movs r0, #1 + } + 8004322: 4770 bx lr + +08004324 <_ZN8touchgfx8CallbackI18MainScreenViewBasehvvED0Ev>: +struct Callback : public GenericCallback + 8004324: b510 push {r4, lr} + 8004326: 4604 mov r4, r0 + 8004328: 2110 movs r1, #16 + 800432a: f02f ffe4 bl 80342f6 <_ZdlPvj> + 800432e: 4620 mov r0, r4 + 8004330: bd10 pop {r4, pc} + +08004332 <_ZN18MainScreenViewBase11setupScreenEv>: +{ + 8004332: b510 push {r4, lr} + 8004334: 4604 mov r4, r0 + sliderContainer1.initialize(); + 8004336: 3098 adds r0, #152 ; 0x98 + 8004338: f000 fdfc bl 8004f34 <_ZN15SliderContainer10initializeEv> + sliderContainer2.initialize(); + 800433c: f504 7024 add.w r0, r4, #656 ; 0x290 + 8004340: f000 fdf8 bl 8004f34 <_ZN15SliderContainer10initializeEv> + sliderContainer3.initialize(); + 8004344: f504 6091 add.w r0, r4, #1160 ; 0x488 + 8004348: f000 fdf4 bl 8004f34 <_ZN15SliderContainer10initializeEv> + sliderContainer4.initialize(); + 800434c: f504 60d0 add.w r0, r4, #1664 ; 0x680 + 8004350: f000 fdf0 bl 8004f34 <_ZN15SliderContainer10initializeEv> + sliderContainer5.initialize(); + 8004354: f604 0078 addw r0, r4, #2168 ; 0x878 + 8004358: f000 fdec bl 8004f34 <_ZN15SliderContainer10initializeEv> + sliderContainer6.initialize(); + 800435c: f504 6027 add.w r0, r4, #2672 ; 0xa70 + 8004360: f000 fde8 bl 8004f34 <_ZN15SliderContainer10initializeEv> + sliderContainer7.initialize(); + 8004364: f604 4068 addw r0, r4, #3176 ; 0xc68 + 8004368: f000 fde4 bl 8004f34 <_ZN15SliderContainer10initializeEv> + sliderContainer8.initialize(); + 800436c: f504 6066 add.w r0, r4, #3680 ; 0xe60 +} + 8004370: e8bd 4010 ldmia.w sp!, {r4, lr} + sliderContainer8.initialize(); + 8004374: f000 bdde b.w 8004f34 <_ZN15SliderContainer10initializeEv> + +08004378 <_ZNK8touchgfx8Drawable17invalidateContentEv>: + if (visible) + 8004378: f890 2025 ldrb.w r2, [r0, #37] ; 0x25 + 800437c: b112 cbz r2, 8004384 <_ZNK8touchgfx8Drawable17invalidateContentEv+0xc> + invalidate(); + 800437e: 6803 ldr r3, [r0, #0] + 8004380: 695b ldr r3, [r3, #20] + 8004382: 4718 bx r3 + } + 8004384: 4770 bx lr + +08004386 <_ZN8touchgfx8Drawable5setXYEss>: + setX(x); + 8004386: 6803 ldr r3, [r0, #0] + void setXY(int16_t x, int16_t y) + 8004388: b570 push {r4, r5, r6, lr} + 800438a: 4604 mov r4, r0 + setX(x); + 800438c: 6b1b ldr r3, [r3, #48] ; 0x30 + void setXY(int16_t x, int16_t y) + 800438e: 4615 mov r5, r2 + setX(x); + 8004390: 4798 blx r3 + setY(y); + 8004392: 6823 ldr r3, [r4, #0] + 8004394: 4620 mov r0, r4 + 8004396: 4629 mov r1, r5 + 8004398: 6b5b ldr r3, [r3, #52] ; 0x34 + } + 800439a: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} + setY(y); + 800439e: 4718 bx r3 + +080043a0 <_ZN8touchgfx8Drawable11setPositionEssss>: + void setPosition(int16_t x, int16_t y, int16_t width, int16_t height) + 80043a0: b570 push {r4, r5, r6, lr} + 80043a2: 4604 mov r4, r0 + 80043a4: 461d mov r5, r3 + 80043a6: f9bd 6010 ldrsh.w r6, [sp, #16] + setXY(x, y); + 80043aa: f7ff ffec bl 8004386 <_ZN8touchgfx8Drawable5setXYEss> + setWidth(width); + 80043ae: 6823 ldr r3, [r4, #0] + 80043b0: 4629 mov r1, r5 + 80043b2: 4620 mov r0, r4 + 80043b4: 6b9b ldr r3, [r3, #56] ; 0x38 + 80043b6: 4798 blx r3 + setHeight(height); + 80043b8: 6823 ldr r3, [r4, #0] + 80043ba: 4631 mov r1, r6 + 80043bc: 4620 mov r0, r4 + 80043be: 6bdb ldr r3, [r3, #60] ; 0x3c + } + 80043c0: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} + setHeight(height); + 80043c4: 4718 bx r3 + ... + +080043c8 <_ZN8touchgfx3BoxC1Ev>: +class Box : public Widget +{ +public: + /** Construct a new Box with a default alpha value of 255 (solid) */ + Box() + : Widget(), alpha(255), color(0) + 80043c8: 4a09 ldr r2, [pc, #36] ; (80043f0 <_ZN8touchgfx3BoxC1Ev+0x28>) + touchable(false), + 80043ca: f44f 7180 mov.w r1, #256 ; 0x100 + 80043ce: 6002 str r2, [r0, #0] + 80043d0: 2200 movs r2, #0 + 80043d2: 8481 strh r1, [r0, #36] ; 0x24 + 80043d4: 21ff movs r1, #255 ; 0xff + : color(col) + 80043d6: 6282 str r2, [r0, #40] ; 0x28 + 80043d8: f880 1026 strb.w r1, [r0, #38] ; 0x26 + : x(0), y(0), width(0), height(0) + 80043dc: e9c0 2201 strd r2, r2, [r0, #4] + 80043e0: e9c0 2203 strd r2, r2, [r0, #12] + nextSibling(0), + 80043e4: e9c0 2205 strd r2, r2, [r0, #20] + cachedAbsX(0), + 80043e8: e9c0 2207 strd r2, r2, [r0, #28] + { + } + 80043ec: 4770 bx lr + 80043ee: bf00 nop + 80043f0: 0803c544 .word 0x0803c544 + +080043f4 <_ZN15SliderContainerD1Ev>: + +class SliderContainer : public SliderContainerBase +{ +public: + SliderContainer(); + virtual ~SliderContainer() {} + 80043f4: 4b03 ldr r3, [pc, #12] ; (8004404 <_ZN15SliderContainerD1Ev+0x10>) + 80043f6: b510 push {r4, lr} + 80043f8: 4604 mov r4, r0 + 80043fa: 6003 str r3, [r0, #0] + 80043fc: f000 f9b0 bl 8004760 <_ZN19SliderContainerBaseD1Ev> + 8004400: 4620 mov r0, r4 + 8004402: bd10 pop {r4, pc} + 8004404: 08037c24 .word 0x08037c24 + +08004408 <_ZN18MainScreenViewBaseD1Ev>: +MainScreenViewBase::~MainScreenViewBase() + 8004408: 4b12 ldr r3, [pc, #72] ; (8004454 <_ZN18MainScreenViewBaseD1Ev+0x4c>) + 800440a: b510 push {r4, lr} + 800440c: 4604 mov r4, r0 + 800440e: 6003 str r3, [r0, #0] + 8004410: f500 6066 add.w r0, r0, #3680 ; 0xe60 + 8004414: f7ff ffee bl 80043f4 <_ZN15SliderContainerD1Ev> + 8004418: f604 4068 addw r0, r4, #3176 ; 0xc68 + 800441c: f7ff ffea bl 80043f4 <_ZN15SliderContainerD1Ev> + 8004420: f504 6027 add.w r0, r4, #2672 ; 0xa70 + 8004424: f7ff ffe6 bl 80043f4 <_ZN15SliderContainerD1Ev> + 8004428: f604 0078 addw r0, r4, #2168 ; 0x878 + 800442c: f7ff ffe2 bl 80043f4 <_ZN15SliderContainerD1Ev> + 8004430: f504 60d0 add.w r0, r4, #1664 ; 0x680 + 8004434: f7ff ffde bl 80043f4 <_ZN15SliderContainerD1Ev> + 8004438: f504 6091 add.w r0, r4, #1160 ; 0x488 + 800443c: f7ff ffda bl 80043f4 <_ZN15SliderContainerD1Ev> + 8004440: f504 7024 add.w r0, r4, #656 ; 0x290 + 8004444: f7ff ffd6 bl 80043f4 <_ZN15SliderContainerD1Ev> + 8004448: f104 0098 add.w r0, r4, #152 ; 0x98 + 800444c: f7ff ffd2 bl 80043f4 <_ZN15SliderContainerD1Ev> +} + 8004450: 4620 mov r0, r4 + 8004452: bd10 pop {r4, pc} + 8004454: 080376d8 .word 0x080376d8 + +08004458 <_ZN18MainScreenViewBaseD0Ev>: +MainScreenViewBase::~MainScreenViewBase() + 8004458: b510 push {r4, lr} + 800445a: 4604 mov r4, r0 +} + 800445c: f7ff ffd4 bl 8004408 <_ZN18MainScreenViewBaseD1Ev> + 8004460: f241 01d8 movw r1, #4312 ; 0x10d8 + 8004464: 4620 mov r0, r4 + 8004466: f02f ff46 bl 80342f6 <_ZdlPvj> + 800446a: 4620 mov r0, r4 + 800446c: bd10 pop {r4, pc} + +0800446e <_ZN15SliderContainerD0Ev>: + 800446e: b510 push {r4, lr} + 8004470: 4604 mov r4, r0 + 8004472: f7ff ffbf bl 80043f4 <_ZN15SliderContainerD1Ev> + 8004476: f44f 71fc mov.w r1, #504 ; 0x1f8 + 800447a: 4620 mov r0, r4 + 800447c: f02f ff3b bl 80342f6 <_ZdlPvj> + 8004480: 4620 mov r0, r4 + 8004482: bd10 pop {r4, pc} + +08004484 <_ZN18MainScreenViewBaseC1Ev>: +MainScreenViewBase::MainScreenViewBase() : + 8004484: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8004488: 4604 mov r4, r0 + 800448a: ed2d 8b06 vpush {d8-d10} + 800448e: b083 sub sp, #12 + sliderContainer8UpdatePwmCallback(this, &MainScreenViewBase::sliderContainer8UpdatePwmCallbackHandler) + 8004490: 4627 mov r7, r4 + : presenter(0) + 8004492: f020 fd97 bl 8024fc4 <_ZN8touchgfx6ScreenC1Ev> + 8004496: 2200 movs r2, #0 + 8004498: 4b86 ldr r3, [pc, #536] ; (80046b4 <_ZN18MainScreenViewBaseC1Ev+0x230>) + 800449a: f104 0b6c add.w fp, r4, #108 ; 0x6c + 800449e: 63e2 str r2, [r4, #60] ; 0x3c + 80044a0: f104 0a98 add.w sl, r4, #152 ; 0x98 + 80044a4: f847 3b40 str.w r3, [r7], #64 + 80044a8: 4638 mov r0, r7 + 80044aa: f7ff ff8d bl 80043c8 <_ZN8touchgfx3BoxC1Ev> + 80044ae: f504 7924 add.w r9, r4, #656 ; 0x290 + 80044b2: 4658 mov r0, fp + 80044b4: f504 6891 add.w r8, r4, #1160 ; 0x488 + 80044b8: f7ff ff86 bl 80043c8 <_ZN8touchgfx3BoxC1Ev> + 80044bc: 4650 mov r0, sl + 80044be: f000 fd2f bl 8004f20 <_ZN15SliderContainerC1Ev> + 80044c2: 4648 mov r0, r9 + 80044c4: f000 fd2c bl 8004f20 <_ZN15SliderContainerC1Ev> + 80044c8: 4640 mov r0, r8 + 80044ca: f000 fd29 bl 8004f20 <_ZN15SliderContainerC1Ev> + 80044ce: f504 63d0 add.w r3, r4, #1664 ; 0x680 + : pobject(pObject), pmemfun(pmemfun_1) + 80044d2: f504 5580 add.w r5, r4, #4096 ; 0x1000 + * @note Must not be called with a Drawable that was already added to the screen. If in doubt, + * call remove() first. + */ + void add(Drawable& d) + { + container.add(d); + 80044d6: 1d26 adds r6, r4, #4 + 80044d8: 4618 mov r0, r3 + 80044da: ee08 3a10 vmov s16, r3 + 80044de: f000 fd1f bl 8004f20 <_ZN15SliderContainerC1Ev> + 80044e2: f604 0378 addw r3, r4, #2168 ; 0x878 + 80044e6: 4618 mov r0, r3 + 80044e8: ee08 3a90 vmov s17, r3 + 80044ec: f000 fd18 bl 8004f20 <_ZN15SliderContainerC1Ev> + 80044f0: f504 6327 add.w r3, r4, #2672 ; 0xa70 + 80044f4: 4618 mov r0, r3 + 80044f6: ee09 3a10 vmov s18, r3 + 80044fa: f000 fd11 bl 8004f20 <_ZN15SliderContainerC1Ev> + 80044fe: f604 4368 addw r3, r4, #3176 ; 0xc68 + 8004502: 4618 mov r0, r3 + 8004504: ee09 3a90 vmov s19, r3 + 8004508: f000 fd0a bl 8004f20 <_ZN15SliderContainerC1Ev> + 800450c: f504 6366 add.w r3, r4, #3680 ; 0xe60 + 8004510: 4618 mov r0, r3 + 8004512: ee0a 3a10 vmov s20, r3 + 8004516: f000 fd03 bl 8004f20 <_ZN15SliderContainerC1Ev> + 800451a: 4967 ldr r1, [pc, #412] ; (80046b8 <_ZN18MainScreenViewBaseC1Ev+0x234>) + 800451c: 2200 movs r2, #0 + 800451e: 4b67 ldr r3, [pc, #412] ; (80046bc <_ZN18MainScreenViewBaseC1Ev+0x238>) + 8004520: 6629 str r1, [r5, #96] ; 0x60 + __background.setPosition(0, 0, 480, 272); + 8004522: 4638 mov r0, r7 + 8004524: 4966 ldr r1, [pc, #408] ; (80046c0 <_ZN18MainScreenViewBaseC1Ev+0x23c>) + 8004526: 66ec str r4, [r5, #108] ; 0x6c + 8004528: e9c5 121c strd r1, r2, [r5, #112] ; 0x70 + 800452c: 4965 ldr r1, [pc, #404] ; (80046c4 <_ZN18MainScreenViewBaseC1Ev+0x240>) + 800452e: e9c5 1220 strd r1, r2, [r5, #128] ; 0x80 + 8004532: 4965 ldr r1, [pc, #404] ; (80046c8 <_ZN18MainScreenViewBaseC1Ev+0x244>) + 8004534: e9c5 1224 strd r1, r2, [r5, #144] ; 0x90 + 8004538: 4964 ldr r1, [pc, #400] ; (80046cc <_ZN18MainScreenViewBaseC1Ev+0x248>) + 800453a: e9c5 2319 strd r2, r3, [r5, #100] ; 0x64 + 800453e: e9c5 1228 strd r1, r2, [r5, #160] ; 0xa0 + 8004542: e9c5 3416 strd r3, r4, [r5, #88] ; 0x58 + 8004546: e9c5 341e strd r3, r4, [r5, #120] ; 0x78 + 800454a: e9c5 3422 strd r3, r4, [r5, #136] ; 0x88 + 800454e: e9c5 3426 strd r3, r4, [r5, #152] ; 0x98 + 8004552: e9c5 342a strd r3, r4, [r5, #168] ; 0xa8 + 8004556: e9c5 342e strd r3, r4, [r5, #184] ; 0xb8 + 800455a: e9c5 3432 strd r3, r4, [r5, #200] ; 0xc8 + 800455e: 495c ldr r1, [pc, #368] ; (80046d0 <_ZN18MainScreenViewBaseC1Ev+0x24c>) + 8004560: 4b5c ldr r3, [pc, #368] ; (80046d4 <_ZN18MainScreenViewBaseC1Ev+0x250>) + 8004562: e9c5 122c strd r1, r2, [r5, #176] ; 0xb0 + 8004566: e9c5 3234 strd r3, r2, [r5, #208] ; 0xd0 + 800456a: 495b ldr r1, [pc, #364] ; (80046d8 <_ZN18MainScreenViewBaseC1Ev+0x254>) + 800456c: f44f 7388 mov.w r3, #272 ; 0x110 + 8004570: e9c5 1230 strd r1, r2, [r5, #192] ; 0xc0 + 8004574: 4611 mov r1, r2 + 8004576: 9300 str r3, [sp, #0] + 8004578: f44f 73f0 mov.w r3, #480 ; 0x1e0 + 800457c: f7ff ff10 bl 80043a0 <_ZN8touchgfx8Drawable11setPositionEssss> + * + * @see getColor, Color::getColorFromRGB + */ + void setColor(colortype newColor) + { + color = newColor; + 8004580: f04f 437f mov.w r3, #4278190080 ; 0xff000000 + 8004584: 4639 mov r1, r7 + 8004586: 4630 mov r0, r6 + 8004588: 66a3 str r3, [r4, #104] ; 0x68 + 800458a: f01b fb2b bl 801fbe4 <_ZN8touchgfx9Container3addERNS_8DrawableE> + box1.setPosition(0, 0, 480, 272); + 800458e: 2200 movs r2, #0 + 8004590: f44f 7388 mov.w r3, #272 ; 0x110 + 8004594: 4658 mov r0, fp + 8004596: 4611 mov r1, r2 + 8004598: 9300 str r3, [sp, #0] + 800459a: f44f 73f0 mov.w r3, #480 ; 0x1e0 + 800459e: f7ff feff bl 80043a0 <_ZN8touchgfx8Drawable11setPositionEssss> + 80045a2: 4b4e ldr r3, [pc, #312] ; (80046dc <_ZN18MainScreenViewBaseC1Ev+0x258>) + 80045a4: 4659 mov r1, fp + 80045a6: 4630 mov r0, r6 + 80045a8: f8c4 3094 str.w r3, [r4, #148] ; 0x94 + 80045ac: f01b fb1a bl 801fbe4 <_ZN8touchgfx9Container3addERNS_8DrawableE> + sliderContainer1.setXY(0, 0); + 80045b0: 2200 movs r2, #0 + 80045b2: 4650 mov r0, sl + 80045b4: 4611 mov r1, r2 + 80045b6: f7ff fee6 bl 8004386 <_ZN8touchgfx8Drawable5setXYEss> + sliderContainer1.setUpdatePwmCallback(sliderContainer1UpdatePwmCallback); + 80045ba: f504 5382 add.w r3, r4, #4160 ; 0x1040 + 80045be: 4651 mov r1, sl + 80045c0: 4630 mov r0, r6 + 80045c2: 3318 adds r3, #24 + /* + * Custom Trigger Callback Setters + */ + void setUpdatePwmCallback(touchgfx::GenericCallback& callback) + { + this->updatePwmCallback = &callback; + 80045c4: f8c4 3278 str.w r3, [r4, #632] ; 0x278 + 80045c8: f01b fb0c bl 801fbe4 <_ZN8touchgfx9Container3addERNS_8DrawableE> + sliderContainer2.setXY(48, 0); + 80045cc: 2200 movs r2, #0 + 80045ce: 4648 mov r0, r9 + 80045d0: 2130 movs r1, #48 ; 0x30 + 80045d2: f7ff fed8 bl 8004386 <_ZN8touchgfx8Drawable5setXYEss> + sliderContainer2.setUpdatePwmCallback(sliderContainer2UpdatePwmCallback); + 80045d6: f504 5383 add.w r3, r4, #4192 ; 0x1060 + 80045da: 4649 mov r1, r9 + 80045dc: 4630 mov r0, r6 + 80045de: 3308 adds r3, #8 + 80045e0: f8c4 3470 str.w r3, [r4, #1136] ; 0x470 + 80045e4: f01b fafe bl 801fbe4 <_ZN8touchgfx9Container3addERNS_8DrawableE> + sliderContainer3.setXY(96, 0); + 80045e8: 2200 movs r2, #0 + 80045ea: 4640 mov r0, r8 + 80045ec: 2160 movs r1, #96 ; 0x60 + 80045ee: f7ff feca bl 8004386 <_ZN8touchgfx8Drawable5setXYEss> + sliderContainer3.setUpdatePwmCallback(sliderContainer3UpdatePwmCallback); + 80045f2: f504 5383 add.w r3, r4, #4192 ; 0x1060 + 80045f6: 4641 mov r1, r8 + 80045f8: 4630 mov r0, r6 + 80045fa: 3318 adds r3, #24 + 80045fc: f8c4 3668 str.w r3, [r4, #1640] ; 0x668 + 8004600: f01b faf0 bl 801fbe4 <_ZN8touchgfx9Container3addERNS_8DrawableE> + sliderContainer4.setXY(144, 0); + 8004604: 2200 movs r2, #0 + 8004606: ee18 0a10 vmov r0, s16 + 800460a: 2190 movs r1, #144 ; 0x90 + 800460c: f7ff febb bl 8004386 <_ZN8touchgfx8Drawable5setXYEss> + sliderContainer4.setUpdatePwmCallback(sliderContainer4UpdatePwmCallback); + 8004610: f504 5384 add.w r3, r4, #4224 ; 0x1080 + 8004614: ee18 1a10 vmov r1, s16 + 8004618: 4630 mov r0, r6 + 800461a: 3308 adds r3, #8 + 800461c: f8c4 3860 str.w r3, [r4, #2144] ; 0x860 + 8004620: f01b fae0 bl 801fbe4 <_ZN8touchgfx9Container3addERNS_8DrawableE> + sliderContainer5.setXY(192, 0); + 8004624: 2200 movs r2, #0 + 8004626: ee18 0a90 vmov r0, s17 + 800462a: 21c0 movs r1, #192 ; 0xc0 + 800462c: f7ff feab bl 8004386 <_ZN8touchgfx8Drawable5setXYEss> + sliderContainer5.setUpdatePwmCallback(sliderContainer5UpdatePwmCallback); + 8004630: f504 5384 add.w r3, r4, #4224 ; 0x1080 + 8004634: ee18 1a90 vmov r1, s17 + 8004638: 4630 mov r0, r6 + 800463a: 3318 adds r3, #24 + 800463c: f8c4 3a58 str.w r3, [r4, #2648] ; 0xa58 + 8004640: f01b fad0 bl 801fbe4 <_ZN8touchgfx9Container3addERNS_8DrawableE> + sliderContainer6.setXY(240, 0); + 8004644: 2200 movs r2, #0 + 8004646: ee19 0a10 vmov r0, s18 + 800464a: 21f0 movs r1, #240 ; 0xf0 + 800464c: f7ff fe9b bl 8004386 <_ZN8touchgfx8Drawable5setXYEss> + sliderContainer6.setUpdatePwmCallback(sliderContainer6UpdatePwmCallback); + 8004650: f504 5385 add.w r3, r4, #4256 ; 0x10a0 + 8004654: ee19 1a10 vmov r1, s18 + 8004658: 4630 mov r0, r6 + 800465a: 3308 adds r3, #8 + 800465c: f8c4 3c50 str.w r3, [r4, #3152] ; 0xc50 + 8004660: f01b fac0 bl 801fbe4 <_ZN8touchgfx9Container3addERNS_8DrawableE> + sliderContainer7.setXY(288, 0); + 8004664: 2200 movs r2, #0 + 8004666: ee19 0a90 vmov r0, s19 + 800466a: f44f 7190 mov.w r1, #288 ; 0x120 + 800466e: f7ff fe8a bl 8004386 <_ZN8touchgfx8Drawable5setXYEss> + sliderContainer7.setUpdatePwmCallback(sliderContainer7UpdatePwmCallback); + 8004672: f504 5385 add.w r3, r4, #4256 ; 0x10a0 + 8004676: ee19 1a90 vmov r1, s19 + 800467a: 4630 mov r0, r6 + 800467c: 3318 adds r3, #24 + 800467e: f8c4 3e48 str.w r3, [r4, #3656] ; 0xe48 + 8004682: f01b faaf bl 801fbe4 <_ZN8touchgfx9Container3addERNS_8DrawableE> + sliderContainer8.setXY(336, 0); + 8004686: 2200 movs r2, #0 + 8004688: ee1a 0a10 vmov r0, s20 + 800468c: f44f 71a8 mov.w r1, #336 ; 0x150 + 8004690: f7ff fe79 bl 8004386 <_ZN8touchgfx8Drawable5setXYEss> + sliderContainer8.setUpdatePwmCallback(sliderContainer8UpdatePwmCallback); + 8004694: f504 5386 add.w r3, r4, #4288 ; 0x10c0 + 8004698: 4630 mov r0, r6 + 800469a: ee1a 1a10 vmov r1, s20 + 800469e: 3308 adds r3, #8 + 80046a0: 642b str r3, [r5, #64] ; 0x40 + 80046a2: f01b fa9f bl 801fbe4 <_ZN8touchgfx9Container3addERNS_8DrawableE> +} + 80046a6: 4620 mov r0, r4 + 80046a8: b003 add sp, #12 + 80046aa: ecbd 8b06 vpop {d8-d10} + 80046ae: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 80046b2: bf00 nop + 80046b4: 080376d8 .word 0x080376d8 + 80046b8: 080042bd .word 0x080042bd + 80046bc: 080376c0 .word 0x080376c0 + 80046c0: 080042c3 .word 0x080042c3 + 80046c4: 080042c9 .word 0x080042c9 + 80046c8: 080042cf .word 0x080042cf + 80046cc: 080042d5 .word 0x080042d5 + 80046d0: 080042db .word 0x080042db + 80046d4: 080042e7 .word 0x080042e7 + 80046d8: 080042e1 .word 0x080042e1 + 80046dc: ff50a2eb .word 0xff50a2eb + +080046e0 <_ZN8touchgfx9Container13getFirstChildEv>: + * @see getNextSibling + */ + virtual Drawable* getFirstChild() + { + return firstChild; + } + 80046e0: 6a80 ldr r0, [r0, #40] ; 0x28 + 80046e2: 4770 bx lr + +080046e4 <_ZN8touchgfx8TextArea8setWidthEs>: + TextArea() + : Widget(), typedText(TYPED_TEXT_INVALID), color(0), linespace(0), alpha(255), indentation(0), rotation(TEXT_ROTATE_0), wideTextAction(WIDE_TEXT_NONE), boundingArea() + { + } + + virtual void setWidth(int16_t width) + 80046e4: b530 push {r4, r5, lr} + 80046e6: b085 sub sp, #20 + { + Widget::setWidth(width); + boundingArea = calculateBoundingArea(); + 80046e8: 6803 ldr r3, [r0, #0] + virtual void setWidth(int16_t width) + 80046ea: 4604 mov r4, r0 + rect.width = width; + 80046ec: 8101 strh r1, [r0, #8] + boundingArea = calculateBoundingArea(); + 80046ee: 466d mov r5, sp + 80046f0: 4601 mov r1, r0 + 80046f2: f8d3 3084 ldr.w r3, [r3, #132] ; 0x84 + 80046f6: 343c adds r4, #60 ; 0x3c + 80046f8: 4628 mov r0, r5 + 80046fa: 4798 blx r3 + 80046fc: e895 0007 ldmia.w r5, {r0, r1, r2} + 8004700: e884 0007 stmia.w r4, {r0, r1, r2} + } + 8004704: b005 add sp, #20 + 8004706: bd30 pop {r4, r5, pc} + +08004708 <_ZN8touchgfx8TextArea9setHeightEs>: + + virtual void setHeight(int16_t height) + 8004708: b530 push {r4, r5, lr} + 800470a: b085 sub sp, #20 + { + Widget::setHeight(height); + boundingArea = calculateBoundingArea(); + 800470c: 6803 ldr r3, [r0, #0] + virtual void setHeight(int16_t height) + 800470e: 4604 mov r4, r0 + rect.height = height; + 8004710: 8141 strh r1, [r0, #10] + boundingArea = calculateBoundingArea(); + 8004712: 466d mov r5, sp + 8004714: 4601 mov r1, r0 + 8004716: f8d3 3084 ldr.w r3, [r3, #132] ; 0x84 + 800471a: 343c adds r4, #60 ; 0x3c + 800471c: 4628 mov r0, r5 + 800471e: 4798 blx r3 + 8004720: e895 0007 ldmia.w r5, {r0, r1, r2} + 8004724: e884 0007 stmia.w r4, {r0, r1, r2} + } + 8004728: b005 add sp, #20 + 800472a: bd30 pop {r4, r5, pc} + +0800472c <_ZNK8touchgfx8TextArea12getSolidRectEv>: + 800472c: 2200 movs r2, #0 + 800472e: 8002 strh r2, [r0, #0] + 8004730: 8042 strh r2, [r0, #2] + 8004732: 8082 strh r2, [r0, #4] + 8004734: 80c2 strh r2, [r0, #6] + + virtual Rect getSolidRect() const + { + return Rect(); + } + 8004736: 4770 bx lr + +08004738 <_ZN8touchgfx8TextArea8setAlphaEh>: + /** + * @copydoc Image::setAlpha + */ + virtual void setAlpha(uint8_t newAlpha) + { + alpha = newAlpha; + 8004738: f880 1036 strb.w r1, [r0, #54] ; 0x36 + } + 800473c: 4770 bx lr + +0800473e <_ZN8touchgfx8TextArea13setXBaselineYEss>: + * + * @note setTypedText() must be called prior to setting the baseline. + */ + virtual void setXBaselineY(int16_t x, int16_t baselineY) + { + setX(x); + 800473e: 6803 ldr r3, [r0, #0] + virtual void setXBaselineY(int16_t x, int16_t baselineY) + 8004740: b570 push {r4, r5, r6, lr} + 8004742: 4604 mov r4, r0 + setX(x); + 8004744: 6b1b ldr r3, [r3, #48] ; 0x30 + virtual void setXBaselineY(int16_t x, int16_t baselineY) + 8004746: 4615 mov r5, r2 + setX(x); + 8004748: 4798 blx r3 + setBaselineY(baselineY); + 800474a: 6823 ldr r3, [r4, #0] + 800474c: 4620 mov r0, r4 + 800474e: 4629 mov r1, r5 + 8004750: 6e5b ldr r3, [r3, #100] ; 0x64 + } + 8004752: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} + setBaselineY(baselineY); + 8004756: 4718 bx r3 + +08004758 <_ZNK8touchgfx8TextArea12getWildcard2Ev>: + * @see TextAreaWithOneWildcard, TextAreaWithTwoWildcards + */ + virtual const Unicode::UnicodeChar* getWildcard2() const + { + return 0; + } + 8004758: 2000 movs r0, #0 + 800475a: 4770 bx lr + +0800475c <_ZNK8touchgfx23TextAreaWithOneWildcard12getWildcard1Ev>: + } + + virtual const Unicode::UnicodeChar* getWildcard1() const + { + return wc1; + } + 800475c: 6c80 ldr r0, [r0, #72] ; 0x48 + 800475e: 4770 bx lr + +08004760 <_ZN19SliderContainerBaseD1Ev>: +} + +SliderContainerBase::~SliderContainerBase() +{ + +} + 8004760: 4770 bx lr + +08004762 <_ZN19SliderContainerBase10initializeEv>: + +void SliderContainerBase::initialize() +{ + +} + 8004762: 4770 bx lr + +08004764 <_ZN8touchgfx8CallbackI19SliderContainerBaseRKNS_6SliderEivED1Ev>: +struct Callback : public GenericCallback + 8004764: 4770 bx lr + +08004766 <_ZN8touchgfx23TextAreaWithOneWildcardD1Ev>: +class TextAreaWithOneWildcard : public TextAreaWithWildcardBase + 8004766: 4770 bx lr + +08004768 <_ZN8touchgfx8CallbackI19SliderContainerBaseRKNS_6SliderEivE7executeES4_i>: + virtual void execute(T1 t1, T2 t2) + 8004768: b470 push {r4, r5, r6} + (pobject->*pmemfun)(t1, t2); + 800476a: 6845 ldr r5, [r0, #4] + virtual void execute(T1 t1, T2 t2) + 800476c: 4603 mov r3, r0 + (pobject->*pmemfun)(t1, t2); + 800476e: 68c4 ldr r4, [r0, #12] + 8004770: 689b ldr r3, [r3, #8] + 8004772: 1066 asrs r6, r4, #1 + 8004774: eb05 0064 add.w r0, r5, r4, asr #1 + 8004778: 07e4 lsls r4, r4, #31 + 800477a: bf44 itt mi + 800477c: 59ac ldrmi r4, [r5, r6] + 800477e: 58e3 ldrmi r3, [r4, r3] + } + 8004780: bc70 pop {r4, r5, r6} + (pobject->*pmemfun)(t1, t2); + 8004782: 4718 bx r3 + +08004784 <_ZNK8touchgfx8CallbackI19SliderContainerBaseRKNS_6SliderEivE7isValidEv>: + return (pobject != 0) && (pmemfun != 0); + 8004784: 6843 ldr r3, [r0, #4] + 8004786: b12b cbz r3, 8004794 <_ZNK8touchgfx8CallbackI19SliderContainerBaseRKNS_6SliderEivE7isValidEv+0x10> + 8004788: 6883 ldr r3, [r0, #8] + 800478a: b92b cbnz r3, 8004798 <_ZNK8touchgfx8CallbackI19SliderContainerBaseRKNS_6SliderEivE7isValidEv+0x14> + 800478c: 68c0 ldr r0, [r0, #12] + 800478e: f000 0001 and.w r0, r0, #1 + 8004792: 4770 bx lr + 8004794: 4618 mov r0, r3 + 8004796: 4770 bx lr + 8004798: 2001 movs r0, #1 + } + 800479a: 4770 bx lr + +0800479c <_ZN8touchgfx23TextAreaWithOneWildcardD0Ev>: + 800479c: b510 push {r4, lr} + 800479e: 4604 mov r4, r0 + 80047a0: 214c movs r1, #76 ; 0x4c + 80047a2: f02f fda8 bl 80342f6 <_ZdlPvj> + 80047a6: 4620 mov r0, r4 + 80047a8: bd10 pop {r4, pc} + +080047aa <_ZN8touchgfx8CallbackI19SliderContainerBaseRKNS_6SliderEivED0Ev>: +struct Callback : public GenericCallback + 80047aa: b510 push {r4, lr} + 80047ac: 4604 mov r4, r0 + 80047ae: 2110 movs r1, #16 + 80047b0: f02f fda1 bl 80342f6 <_ZdlPvj> + 80047b4: 4620 mov r0, r4 + 80047b6: bd10 pop {r4, pc} + +080047b8 <_ZN19SliderContainerBaseD0Ev>: +SliderContainerBase::~SliderContainerBase() + 80047b8: b510 push {r4, lr} + 80047ba: 4604 mov r4, r0 +} + 80047bc: f44f 71fa mov.w r1, #500 ; 0x1f4 + 80047c0: f02f fd99 bl 80342f6 <_ZdlPvj> + 80047c4: 4620 mov r0, r4 + 80047c6: bd10 pop {r4, pc} + +080047c8 <_ZNK8touchgfx24TextAreaWithWildcardBase17invalidateContentEv>: + virtual void invalidateContent() const + 80047c8: b508 push {r3, lr} + Widget::invalidateContent(); + 80047ca: f7ff fdd5 bl 8004378 <_ZNK8touchgfx8Drawable17invalidateContentEv> + } + 80047ce: bd08 pop {r3, pc} + +080047d0 <_ZN19SliderContainerBase21emitUpdatePwmCallbackEh>: + } + + /* + * Custom Trigger Emitters + */ + virtual void emitUpdatePwmCallback(uint8_t value) + 80047d0: b513 push {r0, r1, r4, lr} + 80047d2: 4604 mov r4, r0 + { + if (updatePwmCallback && updatePwmCallback->isValid()) + 80047d4: f8d0 01e0 ldr.w r0, [r0, #480] ; 0x1e0 + virtual void emitUpdatePwmCallback(uint8_t value) + 80047d8: 9101 str r1, [sp, #4] + if (updatePwmCallback && updatePwmCallback->isValid()) + 80047da: b160 cbz r0, 80047f6 <_ZN19SliderContainerBase21emitUpdatePwmCallbackEh+0x26> + 80047dc: 6803 ldr r3, [r0, #0] + 80047de: 68db ldr r3, [r3, #12] + 80047e0: 4798 blx r3 + 80047e2: b140 cbz r0, 80047f6 <_ZN19SliderContainerBase21emitUpdatePwmCallbackEh+0x26> + { + this->updatePwmCallback->execute( value); + 80047e4: f8d4 01e0 ldr.w r0, [r4, #480] ; 0x1e0 + 80047e8: 9901 ldr r1, [sp, #4] + 80047ea: 6803 ldr r3, [r0, #0] + 80047ec: 689b ldr r3, [r3, #8] + } + } + 80047ee: b002 add sp, #8 + 80047f0: e8bd 4010 ldmia.w sp!, {r4, lr} + this->updatePwmCallback->execute( value); + 80047f4: 4718 bx r3 + } + 80047f6: b002 add sp, #8 + 80047f8: bd10 pop {r4, pc} + ... + +080047fc <_ZN19SliderContainerBase33sliderValueChangedCallbackHandlerERKN8touchgfx6SliderEi>: + +void SliderContainerBase::sliderValueChangedCallbackHandler(const touchgfx::Slider& src, int value) +{ + if (&src == &slider) + 80047fc: f100 032c add.w r3, r0, #44 ; 0x2c + 8004800: 428b cmp r3, r1 +{ + 8004802: b570 push {r4, r5, r6, lr} + 8004804: 4604 mov r4, r0 + 8004806: 4615 mov r5, r2 + if (&src == &slider) + 8004808: d112 bne.n 8004830 <_ZN19SliderContainerBase33sliderValueChangedCallbackHandlerERKN8touchgfx6SliderEi+0x34> + { + //Interaction1 + //When slider value changed execute C++ code + //Execute C++ code + Unicode::snprintf(textValueBuffer, TEXTVALUE_SIZE, "%d", value); + 800480a: 4613 mov r3, r2 + 800480c: 210a movs r1, #10 + 800480e: 4a09 ldr r2, [pc, #36] ; (8004834 <_ZN19SliderContainerBase33sliderValueChangedCallbackHandlerERKN8touchgfx6SliderEi+0x38>) + 8004810: f500 70e6 add.w r0, r0, #460 ; 0x1cc + 8004814: f022 f866 bl 80268e4 <_ZN8touchgfx7Unicode8snprintfEPttPKcz> + textValue.invalidate(); + 8004818: f504 70b6 add.w r0, r4, #364 ; 0x16c + 800481c: f020 f85d bl 80248da <_ZNK8touchgfx8Drawable10invalidateEv> + + //Interaction2 + //When slider value changed emit updatePwm callback + //Emit callback + emitUpdatePwmCallback(value); + 8004820: 6823 ldr r3, [r4, #0] + 8004822: b2e9 uxtb r1, r5 + 8004824: 4620 mov r0, r4 + 8004826: f8d3 308c ldr.w r3, [r3, #140] ; 0x8c + } +} + 800482a: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} + emitUpdatePwmCallback(value); + 800482e: 4718 bx r3 +} + 8004830: bd70 pop {r4, r5, r6, pc} + 8004832: bf00 nop + 8004834: 08038f96 .word 0x08038f96 + +08004838 <_ZN8touchgfx8TextArea12setBaselineYEs>: + setY(baselineY - getTypedText().getFont()->getBaseline()); + 8004838: 6803 ldr r3, [r0, #0] + virtual void setBaselineY(int16_t baselineY) + 800483a: b570 push {r4, r5, r6, lr} + setY(baselineY - getTypedText().getFont()->getBaseline()); + 800483c: 6b5e ldr r6, [r3, #52] ; 0x34 + virtual void setBaselineY(int16_t baselineY) + 800483e: 4604 mov r4, r0 + assert(typedTexts != 0 && "TypedText database has not been initialized."); + 8004840: 4b11 ldr r3, [pc, #68] ; (8004888 <_ZN8touchgfx8TextArea12setBaselineYEs+0x50>) + setY(baselineY - getTypedText().getFont()->getBaseline()); + 8004842: b28d uxth r5, r1 + 8004844: 681b ldr r3, [r3, #0] + 8004846: b92b cbnz r3, 8004854 <_ZN8touchgfx8TextArea12setBaselineYEs+0x1c> + 8004848: 4b10 ldr r3, [pc, #64] ; (800488c <_ZN8touchgfx8TextArea12setBaselineYEs+0x54>) + 800484a: 216c movs r1, #108 ; 0x6c + 800484c: 4a10 ldr r2, [pc, #64] ; (8004890 <_ZN8touchgfx8TextArea12setBaselineYEs+0x58>) + assert(hasValidId() && "typedTextId larger than numberOfTypedTexts."); + 800484e: 4811 ldr r0, [pc, #68] ; (8004894 <_ZN8touchgfx8TextArea12setBaselineYEs+0x5c>) + 8004850: f02f fd80 bl 8034354 <__assert_func> + return typedTextId < numberOfTypedTexts; + 8004854: 4910 ldr r1, [pc, #64] ; (8004898 <_ZN8touchgfx8TextArea12setBaselineYEs+0x60>) + 8004856: 8d82 ldrh r2, [r0, #44] ; 0x2c + assert(hasValidId() && "typedTextId larger than numberOfTypedTexts."); + 8004858: 8809 ldrh r1, [r1, #0] + 800485a: 4291 cmp r1, r2 + 800485c: d803 bhi.n 8004866 <_ZN8touchgfx8TextArea12setBaselineYEs+0x2e> + 800485e: 4b0f ldr r3, [pc, #60] ; (800489c <_ZN8touchgfx8TextArea12setBaselineYEs+0x64>) + 8004860: 216d movs r1, #109 ; 0x6d + 8004862: 4a0b ldr r2, [pc, #44] ; (8004890 <_ZN8touchgfx8TextArea12setBaselineYEs+0x58>) + 8004864: e7f3 b.n 800484e <_ZN8touchgfx8TextArea12setBaselineYEs+0x16> + return fonts[typedTexts[typedTextId].fontIdx]; + 8004866: f813 2012 ldrb.w r2, [r3, r2, lsl #1] + 800486a: 4b0d ldr r3, [pc, #52] ; (80048a0 <_ZN8touchgfx8TextArea12setBaselineYEs+0x68>) + 800486c: 681b ldr r3, [r3, #0] + 800486e: f853 0022 ldr.w r0, [r3, r2, lsl #2] + 8004872: 6803 ldr r3, [r0, #0] + 8004874: 6b1b ldr r3, [r3, #48] ; 0x30 + 8004876: 4798 blx r3 + 8004878: 1a28 subs r0, r5, r0 + 800487a: 4633 mov r3, r6 + 800487c: b201 sxth r1, r0 + 800487e: 4620 mov r0, r4 + } + 8004880: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} + setY(baselineY - getTypedText().getFont()->getBaseline()); + 8004884: 4718 bx r3 + 8004886: bf00 nop + 8004888: 2001e784 .word 0x2001e784 + 800488c: 08037724 .word 0x08037724 + 8004890: 08037766 .word 0x08037766 + 8004894: 080377a1 .word 0x080377a1 + 8004898: 2001e788 .word 0x2001e788 + 800489c: 080377e8 .word 0x080377e8 + 80048a0: 2001e78c .word 0x2001e78c + +080048a4 <_ZNK8touchgfx24TextAreaWithWildcardBase21calculateBoundingAreaEv>: + + /** + * Initializes a new instance of the BoundingArea class which is invalid by default. + */ + BoundingArea() + : rect(Rect(0, 0, -1, -1)), // Negative width and height means invalid rectangle + 80048a4: 2200 movs r2, #0 + 80048a6: f04f 31ff mov.w r1, #4294967295 + text(0) + 80048aa: 6082 str r2, [r0, #8] + : rect(Rect(0, 0, -1, -1)), // Negative width and height means invalid rectangle + 80048ac: e9c0 2100 strd r2, r1, [r0] + } + 80048b0: 4770 bx lr + ... + +080048b4 <_ZN8touchgfx8TextAreaC1Ev>: + touchable(false), + 80048b4: f44f 7180 mov.w r1, #256 ; 0x100 + 80048b8: 2200 movs r2, #0 + 80048ba: 8481 strh r1, [r0, #36] ; 0x24 + : Widget(), typedText(TYPED_TEXT_INVALID), color(0), linespace(0), alpha(255), indentation(0), rotation(TEXT_ROTATE_0), wideTextAction(WIDE_TEXT_NONE), boundingArea() + 80048bc: 490c ldr r1, [pc, #48] ; (80048f0 <_ZN8touchgfx8TextAreaC1Ev+0x3c>) + : color(col) + 80048be: 6302 str r2, [r0, #48] ; 0x30 + 80048c0: 6001 str r1, [r0, #0] + : typedTextId(id) + 80048c2: 490c ldr r1, [pc, #48] ; (80048f4 <_ZN8touchgfx8TextAreaC1Ev+0x40>) + 80048c4: 8702 strh r2, [r0, #56] ; 0x38 + 80048c6: 6281 str r1, [r0, #40] ; 0x28 + 80048c8: f64f 71ff movw r1, #65535 ; 0xffff + : x(rectX), y(rectY), width(rectWidth), height(rectHeight) + 80048cc: 63c2 str r2, [r0, #60] ; 0x3c + 80048ce: 8581 strh r1, [r0, #44] ; 0x2c + 80048d0: f44f 017f mov.w r1, #16711680 ; 0xff0000 + 80048d4: 6341 str r1, [r0, #52] ; 0x34 + 80048d6: f04f 31ff mov.w r1, #4294967295 + : x(0), y(0), width(0), height(0) + 80048da: e9c0 2201 strd r2, r2, [r0, #4] + 80048de: e9c0 2203 strd r2, r2, [r0, #12] + nextSibling(0), + 80048e2: e9c0 2205 strd r2, r2, [r0, #20] + cachedAbsX(0), + 80048e6: e9c0 2207 strd r2, r2, [r0, #28] + text(0) + 80048ea: e9c0 1210 strd r1, r2, [r0, #64] ; 0x40 + } + 80048ee: 4770 bx lr + 80048f0: 0803c4b4 .word 0x0803c4b4 + 80048f4: 08037298 .word 0x08037298 + +080048f8 <_ZN19SliderContainerBaseC1Ev>: + touchable(false), + 80048f8: f44f 7380 mov.w r3, #256 ; 0x100 +SliderContainerBase::SliderContainerBase() : + 80048fc: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8004900: 4604 mov r4, r0 + 8004902: 2500 movs r5, #0 + sliderValueChangedCallback(this, &SliderContainerBase::sliderValueChangedCallbackHandler) + 8004904: 4606 mov r6, r0 + 8004906: 8483 strh r3, [r0, #36] ; 0x24 + 8004908: 4b5d ldr r3, [pc, #372] ; (8004a80 <_ZN19SliderContainerBaseC1Ev+0x188>) + 800490a: f504 7890 add.w r8, r4, #288 ; 0x120 +SliderContainerBase::SliderContainerBase() : + 800490e: b08b sub sp, #44 ; 0x2c + sliderValueChangedCallback(this, &SliderContainerBase::sliderValueChangedCallbackHandler) + 8004910: f504 77b6 add.w r7, r4, #364 ; 0x16c + firstChild(0) + 8004914: 6285 str r5, [r0, #40] ; 0x28 + * array. + * + * @param id (Optional) The unique bitmap identifier. + */ + Bitmap(const BitmapId id = BITMAP_INVALID) + : bitmapId(id) + 8004916: f04f 0a01 mov.w sl, #1 + : TextAreaWithWildcardBase(), wc1(0) + 800491a: f8df 9174 ldr.w r9, [pc, #372] ; 8004a90 <_ZN19SliderContainerBaseC1Ev+0x198> + color = newColor; + 800491e: f04f 4b7f mov.w fp, #4278190080 ; 0xff000000 + 8004922: e9c0 5501 strd r5, r5, [r0, #4] + 8004926: e9c0 5503 strd r5, r5, [r0, #12] + nextSibling(0), + 800492a: e9c0 5505 strd r5, r5, [r0, #20] + cachedAbsX(0), + 800492e: e9c0 5507 strd r5, r5, [r0, #28] + 8004932: f846 3b2c str.w r3, [r6], #44 + 8004936: 4630 mov r0, r6 + 8004938: f01b fe26 bl 8020588 <_ZN8touchgfx6SliderC1Ev> + : TextArea() + 800493c: 4640 mov r0, r8 + 800493e: f7ff ffb9 bl 80048b4 <_ZN8touchgfx8TextAreaC1Ev> + : TextAreaWithWildcardBase(), wc1(0) + 8004942: f8c4 9120 str.w r9, [r4, #288] ; 0x120 + : TextArea() + 8004946: 4638 mov r0, r7 + : TextAreaWithWildcardBase(), wc1(0) + 8004948: f8c4 5168 str.w r5, [r4, #360] ; 0x168 + : TextArea() + 800494c: f7ff ffb2 bl 80048b4 <_ZN8touchgfx8TextAreaC1Ev> + : pobject(pObject), pmemfun(pmemfun_2) + 8004950: 4b4c ldr r3, [pc, #304] ; (8004a84 <_ZN19SliderContainerBaseC1Ev+0x18c>) + slider.setXY(7, 47); + 8004952: 4630 mov r0, r6 + : TextAreaWithWildcardBase(), wc1(0) + 8004954: f8c4 916c str.w r9, [r4, #364] ; 0x16c + 8004958: 222f movs r2, #47 ; 0x2f + 800495a: 2107 movs r1, #7 + 800495c: f8c4 51b4 str.w r5, [r4, #436] ; 0x1b4 + updatePwmCallback(0), + 8004960: f8c4 51e0 str.w r5, [r4, #480] ; 0x1e0 + 8004964: f8df 912c ldr.w r9, [pc, #300] ; 8004a94 <_ZN19SliderContainerBaseC1Ev+0x19c> + 8004968: e9c4 3479 strd r3, r4, [r4, #484] ; 0x1e4 + 800496c: 4b46 ldr r3, [pc, #280] ; (8004a88 <_ZN19SliderContainerBaseC1Ev+0x190>) + 800496e: e9c4 357b strd r3, r5, [r4, #492] ; 0x1ec + rect.width = width; + 8004972: 4b46 ldr r3, [pc, #280] ; (8004a8c <_ZN19SliderContainerBaseC1Ev+0x194>) + 8004974: 60a3 str r3, [r4, #8] + slider.setXY(7, 47); + 8004976: f7ff fd06 bl 8004386 <_ZN8touchgfx8Drawable5setXYEss> + 800497a: 2302 movs r3, #2 + slider.setBitmaps(touchgfx::Bitmap(BITMAP_BLUE_SLIDER_VERTICAL_SMALL_SLIDER3_VERTICAL_ROUND_BACK_ID), touchgfx::Bitmap(BITMAP_BLUE_SLIDER_VERTICAL_SMALL_SLIDER3_VERTICAL_ROUND_FILL_ID), touchgfx::Bitmap(BITMAP_BLUE_SLIDER_VERTICAL_SMALL_INDICATORS_SLIDER3_VERTICAL_ROUND_NOB_ID)); + 800497c: aa07 add r2, sp, #28 + 800497e: a906 add r1, sp, #24 + 8004980: 4630 mov r0, r6 + 8004982: f8ad 301c strh.w r3, [sp, #28] + 8004986: ab08 add r3, sp, #32 + 8004988: f8ad a018 strh.w sl, [sp, #24] + 800498c: f8ad 5020 strh.w r5, [sp, #32] + 8004990: f01b fe54 bl 802063c <_ZN8touchgfx6Slider10setBitmapsERKNS_6BitmapES3_S3_> + slider.setupVerticalSlider(7, 3, 0, 0, 125); + 8004994: 237d movs r3, #125 ; 0x7d + 8004996: 4630 mov r0, r6 + 8004998: 2203 movs r2, #3 + 800499a: 2107 movs r1, #7 + 800499c: e9cd 5300 strd r5, r3, [sp] + 80049a0: 462b mov r3, r5 + 80049a2: f01b fd9a bl 80204da <_ZN8touchgfx6Slider19setupVerticalSliderEsssss> + slider.setValueRange(0, 100); + 80049a6: 2264 movs r2, #100 ; 0x64 + 80049a8: 4629 mov r1, r5 + 80049aa: 4630 mov r0, r6 + 80049ac: f01b fbe7 bl 802017e <_ZN8touchgfx6Slider13setValueRangeEss> + slider.setValue(0); + 80049b0: 4629 mov r1, r5 + 80049b2: 4630 mov r0, r6 + 80049b4: f01b fbab bl 802010e <_ZN8touchgfx6Slider8setValueEs> + slider.setNewValueCallback(sliderValueChangedCallback); + 80049b8: f504 73f2 add.w r3, r4, #484 ; 0x1e4 + add(slider); + 80049bc: 4631 mov r1, r6 + 80049be: 4620 mov r0, r4 + * + * @see GenericCallback + */ + void setNewValueCallback(GenericCallback& callback) + { + newValueCallback = &callback; + 80049c0: f8c4 311c str.w r3, [r4, #284] ; 0x11c + boundingArea = calculateBoundingArea(); + 80049c4: ae02 add r6, sp, #8 + 80049c6: f01b f90d bl 801fbe4 <_ZN8touchgfx9Container3addERNS_8DrawableE> + textTitle.setPosition(0, 11, 48, 36); + 80049ca: 2324 movs r3, #36 ; 0x24 + 80049cc: 220b movs r2, #11 + 80049ce: 4629 mov r1, r5 + 80049d0: 4640 mov r0, r8 + 80049d2: 9300 str r3, [sp, #0] + 80049d4: 2330 movs r3, #48 ; 0x30 + 80049d6: f7ff fce3 bl 80043a0 <_ZN8touchgfx8Drawable11setPositionEssss> + 80049da: f8d4 3120 ldr.w r3, [r4, #288] ; 0x120 + 80049de: 4641 mov r1, r8 + 80049e0: 4630 mov r0, r6 + 80049e2: f8d3 3084 ldr.w r3, [r3, #132] ; 0x84 + color = newColor; + 80049e6: f8c4 b150 str.w fp, [r4, #336] ; 0x150 + linespace = space; + 80049ea: f8a4 5154 strh.w r5, [r4, #340] ; 0x154 + boundingArea = calculateBoundingArea(); + 80049ee: 4798 blx r3 + 80049f0: f504 73ae add.w r3, r4, #348 ; 0x15c + 80049f4: e896 0007 ldmia.w r6, {r0, r1, r2} + 80049f8: e883 0007 stmia.w r3, {r0, r1, r2} + textTitle.setWildcard(textTitleBuffer); + 80049fc: f504 73dc add.w r3, r4, #440 ; 0x1b8 + textTitle.setTypedText(touchgfx::TypedText(T___SINGLEUSE_BJLO)); + 8004a00: a908 add r1, sp, #32 + 8004a02: 4640 mov r0, r8 + textTitleBuffer[0] = 0; + 8004a04: f8a4 51b8 strh.w r5, [r4, #440] ; 0x1b8 + wc1 = value; + 8004a08: f8c4 3168 str.w r3, [r4, #360] ; 0x168 + 8004a0c: f8cd 9020 str.w r9, [sp, #32] + 8004a10: f8ad a024 strh.w sl, [sp, #36] ; 0x24 + textTitle.setTypedText(touchgfx::TypedText(T___SINGLEUSE_BJLO)); + 8004a14: f01d f8d6 bl 8021bc4 <_ZN8touchgfx8TextArea12setTypedTextERKNS_9TypedTextE> + add(textTitle); + 8004a18: 4641 mov r1, r8 + 8004a1a: 4620 mov r0, r4 + 8004a1c: f01b f8e2 bl 801fbe4 <_ZN8touchgfx9Container3addERNS_8DrawableE> + textValue.setPosition(0, 239, 48, 16); + 8004a20: 2310 movs r3, #16 + 8004a22: 22ef movs r2, #239 ; 0xef + 8004a24: 4629 mov r1, r5 + 8004a26: 4638 mov r0, r7 + 8004a28: 9300 str r3, [sp, #0] + 8004a2a: 2330 movs r3, #48 ; 0x30 + 8004a2c: f7ff fcb8 bl 80043a0 <_ZN8touchgfx8Drawable11setPositionEssss> + 8004a30: f8d4 316c ldr.w r3, [r4, #364] ; 0x16c + 8004a34: 4639 mov r1, r7 + 8004a36: 4630 mov r0, r6 + 8004a38: f8d3 3084 ldr.w r3, [r3, #132] ; 0x84 + color = newColor; + 8004a3c: f8c4 b19c str.w fp, [r4, #412] ; 0x19c + linespace = space; + 8004a40: f8a4 51a0 strh.w r5, [r4, #416] ; 0x1a0 + boundingArea = calculateBoundingArea(); + 8004a44: 4798 blx r3 + 8004a46: f504 73d4 add.w r3, r4, #424 ; 0x1a8 + 8004a4a: e896 0007 ldmia.w r6, {r0, r1, r2} + 8004a4e: e883 0007 stmia.w r3, {r0, r1, r2} + textValue.setWildcard(textValueBuffer); + 8004a52: f504 73e6 add.w r3, r4, #460 ; 0x1cc + textValue.setTypedText(touchgfx::TypedText(T___SINGLEUSE_67SG)); + 8004a56: a908 add r1, sp, #32 + 8004a58: 4638 mov r0, r7 + textValueBuffer[0] = 0; + 8004a5a: f8a4 51cc strh.w r5, [r4, #460] ; 0x1cc + 8004a5e: f8c4 31b4 str.w r3, [r4, #436] ; 0x1b4 + 8004a62: f8cd 9020 str.w r9, [sp, #32] + 8004a66: f8ad 5024 strh.w r5, [sp, #36] ; 0x24 + textValue.setTypedText(touchgfx::TypedText(T___SINGLEUSE_67SG)); + 8004a6a: f01d f8ab bl 8021bc4 <_ZN8touchgfx8TextArea12setTypedTextERKNS_9TypedTextE> + add(textValue); + 8004a6e: 4620 mov r0, r4 + 8004a70: 4639 mov r1, r7 + 8004a72: f01b f8b7 bl 801fbe4 <_ZN8touchgfx9Container3addERNS_8DrawableE> +} + 8004a76: 4620 mov r0, r4 + 8004a78: b00b add sp, #44 ; 0x2c + 8004a7a: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 8004a7e: bf00 nop + 8004a80: 080378d8 .word 0x080378d8 + 8004a84: 080378c0 .word 0x080378c0 + 8004a88: 080047fd .word 0x080047fd + 8004a8c: 01100030 .word 0x01100030 + 8004a90: 08037830 .word 0x08037830 + 8004a94: 08037298 .word 0x08037298 + +08004a98 <__tcf_0>: +KEEP extern const touchgfx::KerningNode kerning_verdana_10_4bpp[] FONT_KERNING_LOCATION_FLASH_ATTRIBUTE; +touchgfx::GeneratedFont& getFont_verdana_10_4bpp(); + +touchgfx::GeneratedFont& getFont_verdana_10_4bpp() +{ + static touchgfx::GeneratedFont verdana_10_4bpp(glyphs_verdana_10_4bpp, 37, 12, 10, 0, 0, 4, 1, 0, 1, unicodes_verdana_10_4bpp, kerning_verdana_10_4bpp, 63, 0, 0, 0); + 8004a98: 4770 bx lr + ... + +08004a9c <_Z23getFont_verdana_10_4bppv>: +{ + 8004a9c: b530 push {r4, r5, lr} + static touchgfx::GeneratedFont verdana_10_4bpp(glyphs_verdana_10_4bpp, 37, 12, 10, 0, 0, 4, 1, 0, 1, unicodes_verdana_10_4bpp, kerning_verdana_10_4bpp, 63, 0, 0, 0); + 8004a9e: 4d17 ldr r5, [pc, #92] ; (8004afc <_Z23getFont_verdana_10_4bppv+0x60>) +{ + 8004aa0: b08f sub sp, #60 ; 0x3c + static touchgfx::GeneratedFont verdana_10_4bpp(glyphs_verdana_10_4bpp, 37, 12, 10, 0, 0, 4, 1, 0, 1, unicodes_verdana_10_4bpp, kerning_verdana_10_4bpp, 63, 0, 0, 0); + 8004aa2: 682c ldr r4, [r5, #0] + 8004aa4: f3bf 8f5b dmb ish + 8004aa8: f014 0401 ands.w r4, r4, #1 + 8004aac: d122 bne.n 8004af4 <_Z23getFont_verdana_10_4bppv+0x58> + 8004aae: 4628 mov r0, r5 + 8004ab0: f02f fc23 bl 80342fa <__cxa_guard_acquire> + 8004ab4: b1f0 cbz r0, 8004af4 <_Z23getFont_verdana_10_4bppv+0x58> + 8004ab6: 233f movs r3, #63 ; 0x3f + 8004ab8: 2225 movs r2, #37 ; 0x25 + 8004aba: 4911 ldr r1, [pc, #68] ; (8004b00 <_Z23getFont_verdana_10_4bppv+0x64>) + 8004abc: 9309 str r3, [sp, #36] ; 0x24 + 8004abe: 4b11 ldr r3, [pc, #68] ; (8004b04 <_Z23getFont_verdana_10_4bppv+0x68>) + 8004ac0: 4811 ldr r0, [pc, #68] ; (8004b08 <_Z23getFont_verdana_10_4bppv+0x6c>) + 8004ac2: 9308 str r3, [sp, #32] + 8004ac4: 4b11 ldr r3, [pc, #68] ; (8004b0c <_Z23getFont_verdana_10_4bppv+0x70>) + 8004ac6: 940a str r4, [sp, #40] ; 0x28 + 8004ac8: 9307 str r3, [sp, #28] + 8004aca: 2301 movs r3, #1 + 8004acc: 9401 str r4, [sp, #4] + 8004ace: 9304 str r3, [sp, #16] + 8004ad0: e9cd 4305 strd r4, r3, [sp, #20] + 8004ad4: 2304 movs r3, #4 + 8004ad6: e9cd 4302 strd r4, r3, [sp, #8] + 8004ada: 230a movs r3, #10 + 8004adc: e9cd 440b strd r4, r4, [sp, #44] ; 0x2c + 8004ae0: 9300 str r3, [sp, #0] + 8004ae2: 230c movs r3, #12 + 8004ae4: f7ff fb80 bl 80041e8 <_ZN8touchgfx13GeneratedFontC1EPKNS_9GlyphNodeEttthhhhhhPKPKhPKNS_11KerningNodeEttPKtPKNS_24FontContextualFormsTableE> + 8004ae8: 4809 ldr r0, [pc, #36] ; (8004b10 <_Z23getFont_verdana_10_4bppv+0x74>) + 8004aea: f02f fc51 bl 8034390 + 8004aee: 4628 mov r0, r5 + 8004af0: f02f fc0f bl 8034312 <__cxa_guard_release> + return verdana_10_4bpp; +} + 8004af4: 4804 ldr r0, [pc, #16] ; (8004b08 <_Z23getFont_verdana_10_4bppv+0x6c>) + 8004af6: b00f add sp, #60 ; 0x3c + 8004af8: bd30 pop {r4, r5, pc} + 8004afa: bf00 nop + 8004afc: 20007ac4 .word 0x20007ac4 + 8004b00: 90008d78 .word 0x90008d78 + 8004b04: 0803cb5c .word 0x0803cb5c + 8004b08: 20007ac8 .word 0x20007ac8 + 8004b0c: 0803cb68 .word 0x0803cb68 + 8004b10: 08004a99 .word 0x08004a99 + +08004b14 <__tcf_0>: +KEEP extern const touchgfx::KerningNode kerning_verdana_20_4bpp[] FONT_KERNING_LOCATION_FLASH_ATTRIBUTE; +touchgfx::GeneratedFont& getFont_verdana_20_4bpp(); + +touchgfx::GeneratedFont& getFont_verdana_20_4bpp() +{ + static touchgfx::GeneratedFont verdana_20_4bpp(glyphs_verdana_20_4bpp, 1, 20, 20, 0, 0, 4, 1, 0, 0, unicodes_verdana_20_4bpp, kerning_verdana_20_4bpp, 63, 0, 0, 0); + 8004b14: 4770 bx lr + ... + +08004b18 <_Z23getFont_verdana_20_4bppv>: +{ + 8004b18: b530 push {r4, r5, lr} + static touchgfx::GeneratedFont verdana_20_4bpp(glyphs_verdana_20_4bpp, 1, 20, 20, 0, 0, 4, 1, 0, 0, unicodes_verdana_20_4bpp, kerning_verdana_20_4bpp, 63, 0, 0, 0); + 8004b1a: 4d16 ldr r5, [pc, #88] ; (8004b74 <_Z23getFont_verdana_20_4bppv+0x5c>) +{ + 8004b1c: b08f sub sp, #60 ; 0x3c + static touchgfx::GeneratedFont verdana_20_4bpp(glyphs_verdana_20_4bpp, 1, 20, 20, 0, 0, 4, 1, 0, 0, unicodes_verdana_20_4bpp, kerning_verdana_20_4bpp, 63, 0, 0, 0); + 8004b1e: 682c ldr r4, [r5, #0] + 8004b20: f3bf 8f5b dmb ish + 8004b24: f014 0401 ands.w r4, r4, #1 + 8004b28: d120 bne.n 8004b6c <_Z23getFont_verdana_20_4bppv+0x54> + 8004b2a: 4628 mov r0, r5 + 8004b2c: f02f fbe5 bl 80342fa <__cxa_guard_acquire> + 8004b30: b1e0 cbz r0, 8004b6c <_Z23getFont_verdana_20_4bppv+0x54> + 8004b32: 233f movs r3, #63 ; 0x3f + 8004b34: 2201 movs r2, #1 + 8004b36: 4910 ldr r1, [pc, #64] ; (8004b78 <_Z23getFont_verdana_20_4bppv+0x60>) + 8004b38: 9309 str r3, [sp, #36] ; 0x24 + 8004b3a: 4b10 ldr r3, [pc, #64] ; (8004b7c <_Z23getFont_verdana_20_4bppv+0x64>) + 8004b3c: 4810 ldr r0, [pc, #64] ; (8004b80 <_Z23getFont_verdana_20_4bppv+0x68>) + 8004b3e: 9308 str r3, [sp, #32] + 8004b40: 4b10 ldr r3, [pc, #64] ; (8004b84 <_Z23getFont_verdana_20_4bppv+0x6c>) + 8004b42: 940a str r4, [sp, #40] ; 0x28 + 8004b44: 9405 str r4, [sp, #20] + 8004b46: e9cd 4306 strd r4, r3, [sp, #24] + 8004b4a: 2304 movs r3, #4 + 8004b4c: e9cd 3203 strd r3, r2, [sp, #12] + 8004b50: 2314 movs r3, #20 + 8004b52: e9cd 440b strd r4, r4, [sp, #44] ; 0x2c + 8004b56: 9300 str r3, [sp, #0] + 8004b58: e9cd 4401 strd r4, r4, [sp, #4] + 8004b5c: f7ff fb44 bl 80041e8 <_ZN8touchgfx13GeneratedFontC1EPKNS_9GlyphNodeEttthhhhhhPKPKhPKNS_11KerningNodeEttPKtPKNS_24FontContextualFormsTableE> + 8004b60: 4809 ldr r0, [pc, #36] ; (8004b88 <_Z23getFont_verdana_20_4bppv+0x70>) + 8004b62: f02f fc15 bl 8034390 + 8004b66: 4628 mov r0, r5 + 8004b68: f02f fbd3 bl 8034312 <__cxa_guard_release> + return verdana_20_4bpp; +} + 8004b6c: 4804 ldr r0, [pc, #16] ; (8004b80 <_Z23getFont_verdana_20_4bppv+0x68>) + 8004b6e: b00f add sp, #60 ; 0x3c + 8004b70: bd30 pop {r4, r5, pc} + 8004b72: bf00 nop + 8004b74: 20007af4 .word 0x20007af4 + 8004b78: 90008f80 .word 0x90008f80 + 8004b7c: 0803cb60 .word 0x0803cb60 + 8004b80: 20007af8 .word 0x20007af8 + 8004b84: 0803cb6c .word 0x0803cb6c + 8004b88: 08004b15 .word 0x08004b15 + +08004b8c <__tcf_0>: +KEEP extern const touchgfx::KerningNode kerning_verdana_40_4bpp[] FONT_KERNING_LOCATION_FLASH_ATTRIBUTE; +touchgfx::GeneratedFont& getFont_verdana_40_4bpp(); + +touchgfx::GeneratedFont& getFont_verdana_40_4bpp() +{ + static touchgfx::GeneratedFont verdana_40_4bpp(glyphs_verdana_40_4bpp, 1, 40, 40, 0, 0, 4, 1, 0, 0, unicodes_verdana_40_4bpp, kerning_verdana_40_4bpp, 63, 0, 0, 0); + 8004b8c: 4770 bx lr + ... + +08004b90 <_Z23getFont_verdana_40_4bppv>: +{ + 8004b90: b530 push {r4, r5, lr} + static touchgfx::GeneratedFont verdana_40_4bpp(glyphs_verdana_40_4bpp, 1, 40, 40, 0, 0, 4, 1, 0, 0, unicodes_verdana_40_4bpp, kerning_verdana_40_4bpp, 63, 0, 0, 0); + 8004b92: 4d16 ldr r5, [pc, #88] ; (8004bec <_Z23getFont_verdana_40_4bppv+0x5c>) +{ + 8004b94: b08f sub sp, #60 ; 0x3c + static touchgfx::GeneratedFont verdana_40_4bpp(glyphs_verdana_40_4bpp, 1, 40, 40, 0, 0, 4, 1, 0, 0, unicodes_verdana_40_4bpp, kerning_verdana_40_4bpp, 63, 0, 0, 0); + 8004b96: 682c ldr r4, [r5, #0] + 8004b98: f3bf 8f5b dmb ish + 8004b9c: f014 0401 ands.w r4, r4, #1 + 8004ba0: d120 bne.n 8004be4 <_Z23getFont_verdana_40_4bppv+0x54> + 8004ba2: 4628 mov r0, r5 + 8004ba4: f02f fba9 bl 80342fa <__cxa_guard_acquire> + 8004ba8: b1e0 cbz r0, 8004be4 <_Z23getFont_verdana_40_4bppv+0x54> + 8004baa: 233f movs r3, #63 ; 0x3f + 8004bac: 2201 movs r2, #1 + 8004bae: 4910 ldr r1, [pc, #64] ; (8004bf0 <_Z23getFont_verdana_40_4bppv+0x60>) + 8004bb0: 9309 str r3, [sp, #36] ; 0x24 + 8004bb2: 4b10 ldr r3, [pc, #64] ; (8004bf4 <_Z23getFont_verdana_40_4bppv+0x64>) + 8004bb4: 4810 ldr r0, [pc, #64] ; (8004bf8 <_Z23getFont_verdana_40_4bppv+0x68>) + 8004bb6: 9308 str r3, [sp, #32] + 8004bb8: 4b10 ldr r3, [pc, #64] ; (8004bfc <_Z23getFont_verdana_40_4bppv+0x6c>) + 8004bba: 940a str r4, [sp, #40] ; 0x28 + 8004bbc: 9405 str r4, [sp, #20] + 8004bbe: e9cd 4306 strd r4, r3, [sp, #24] + 8004bc2: 2304 movs r3, #4 + 8004bc4: e9cd 3203 strd r3, r2, [sp, #12] + 8004bc8: 2328 movs r3, #40 ; 0x28 + 8004bca: e9cd 440b strd r4, r4, [sp, #44] ; 0x2c + 8004bce: 9300 str r3, [sp, #0] + 8004bd0: e9cd 4401 strd r4, r4, [sp, #4] + 8004bd4: f7ff fb08 bl 80041e8 <_ZN8touchgfx13GeneratedFontC1EPKNS_9GlyphNodeEttthhhhhhPKPKhPKNS_11KerningNodeEttPKtPKNS_24FontContextualFormsTableE> + 8004bd8: 4809 ldr r0, [pc, #36] ; (8004c00 <_Z23getFont_verdana_40_4bppv+0x70>) + 8004bda: f02f fbd9 bl 8034390 + 8004bde: 4628 mov r0, r5 + 8004be0: f02f fb97 bl 8034312 <__cxa_guard_release> + return verdana_40_4bpp; +} + 8004be4: 4804 ldr r0, [pc, #16] ; (8004bf8 <_Z23getFont_verdana_40_4bppv+0x68>) + 8004be6: b00f add sp, #60 ; 0x3c + 8004be8: bd30 pop {r4, r5, pc} + 8004bea: bf00 nop + 8004bec: 20007b24 .word 0x20007b24 + 8004bf0: 90008f90 .word 0x90008f90 + 8004bf4: 0803cb64 .word 0x0803cb64 + 8004bf8: 20007b28 .word 0x20007b28 + 8004bfc: 0803cb70 .word 0x0803cb70 + 8004c00: 08004b8d .word 0x08004b8d + +08004c04 <_ZNK8touchgfx4Font12getGSUBTableEv>: + * @return The GSUB table or null if font has GSUB no table. + */ + virtual const uint16_t* getGSUBTable() const + { + return 0; + } + 8004c04: 2000 movs r0, #0 + 8004c06: 4770 bx lr + +08004c08 <_ZNK8touchgfx4Font23getContextualFormsTableEv>: + * @return The FontContextualFormsTable or null if the font has no table. + */ + virtual const FontContextualFormsTable* getContextualFormsTable() const + { + return 0; + } + 8004c08: 2000 movs r0, #0 + 8004c0a: 4770 bx lr + +08004c0c <_ZNK8touchgfx4Font14getStringWidthEPKtz>: +#include +#include +#include + +uint16_t touchgfx::Font::getStringWidth(const touchgfx::Unicode::UnicodeChar* text, ...) const +{ + 8004c0c: b40e push {r1, r2, r3} + 8004c0e: b503 push {r0, r1, lr} + 8004c10: ab03 add r3, sp, #12 + va_list pArg; + va_start(pArg, text); + uint16_t width = getStringWidthLTR(TEXT_DIRECTION_LTR, text, pArg); + 8004c12: 2100 movs r1, #0 +{ + 8004c14: f853 2b04 ldr.w r2, [r3], #4 + va_start(pArg, text); + 8004c18: 9301 str r3, [sp, #4] + uint16_t width = getStringWidthLTR(TEXT_DIRECTION_LTR, text, pArg); + 8004c1a: f01f fd33 bl 8024684 <_ZNK8touchgfx4Font17getStringWidthLTREhPKtSt9__va_list> + va_end(pArg); + return width; +} + 8004c1e: b002 add sp, #8 + 8004c20: f85d eb04 ldr.w lr, [sp], #4 + 8004c24: b003 add sp, #12 + 8004c26: 4770 bx lr + +08004c28 <_ZNK8touchgfx4Font14getStringWidthEhPKtz>: + +uint16_t touchgfx::Font::getStringWidth(touchgfx::TextDirection textDirection, const touchgfx::Unicode::UnicodeChar* text, ...) const +{ + 8004c28: b40c push {r2, r3} + 8004c2a: b507 push {r0, r1, r2, lr} + 8004c2c: ab04 add r3, sp, #16 + 8004c2e: f853 2b04 ldr.w r2, [r3], #4 + va_list pArg; + va_start(pArg, text); + 8004c32: 9301 str r3, [sp, #4] + uint16_t width = getStringWidthLTR(textDirection, text, pArg); + 8004c34: f01f fd26 bl 8024684 <_ZNK8touchgfx4Font17getStringWidthLTREhPKtSt9__va_list> + va_end(pArg); + return width; +} + 8004c38: b003 add sp, #12 + 8004c3a: f85d eb04 ldr.w lr, [sp], #4 + 8004c3e: b002 add sp, #8 + 8004c40: 4770 bx lr + ... + +08004c44 <_ZN8touchgfx12TextProvider15getNextLigatureEh>: + +touchgfx::Unicode::UnicodeChar touchgfx::TextProvider::getNextLigature(TextDirection direction) +{ + if (fontGsubTable && nextCharacters.peekChar()) + 8004c44: 6c43 ldr r3, [r0, #68] ; 0x44 +{ + 8004c46: b510 push {r4, lr} + 8004c48: 4604 mov r4, r0 + if (fontGsubTable && nextCharacters.peekChar()) + 8004c4a: b373 cbz r3, 8004caa <_ZN8touchgfx12TextProvider15getNextLigatureEh+0x66> + return used == size; + } + + FORCE_INLINE_FUNCTION Unicode::UnicodeChar peekChar() + { + assert(used > 0); + 8004c4c: 8f03 ldrh r3, [r0, #56] ; 0x38 + 8004c4e: b92b cbnz r3, 8004c5c <_ZN8touchgfx12TextProvider15getNextLigatureEh+0x18> + 8004c50: 4b18 ldr r3, [pc, #96] ; (8004cb4 <_ZN8touchgfx12TextProvider15getNextLigatureEh+0x70>) + 8004c52: 21c5 movs r1, #197 ; 0xc5 + 8004c54: 4a18 ldr r2, [pc, #96] ; (8004cb8 <_ZN8touchgfx12TextProvider15getNextLigatureEh+0x74>) + return buffer[pos]; + } + + FORCE_INLINE_FUNCTION Unicode::UnicodeChar peekChar(uint16_t offset) + { + assert(offset < used); + 8004c56: 4819 ldr r0, [pc, #100] ; (8004cbc <_ZN8touchgfx12TextProvider15getNextLigatureEh+0x78>) + 8004c58: f02f fb7c bl 8034354 <__assert_func> + return buffer[pos]; + 8004c5c: 8ec3 ldrh r3, [r0, #54] ; 0x36 + 8004c5e: eb00 0343 add.w r3, r0, r3, lsl #1 + 8004c62: 8c5b ldrh r3, [r3, #34] ; 0x22 + 8004c64: b30b cbz r3, 8004caa <_ZN8touchgfx12TextProvider15getNextLigatureEh+0x66> + { + substituteGlyphs(); + 8004c66: f021 f889 bl 8025d7c <_ZN8touchgfx12TextProvider16substituteGlyphsEv> + assert(offset < used); + 8004c6a: 8f23 ldrh r3, [r4, #56] ; 0x38 + 8004c6c: 2b01 cmp r3, #1 + 8004c6e: d803 bhi.n 8004c78 <_ZN8touchgfx12TextProvider15getNextLigatureEh+0x34> + 8004c70: 4b13 ldr r3, [pc, #76] ; (8004cc0 <_ZN8touchgfx12TextProvider15getNextLigatureEh+0x7c>) + 8004c72: 21cb movs r1, #203 ; 0xcb + 8004c74: 4a13 ldr r2, [pc, #76] ; (8004cc4 <_ZN8touchgfx12TextProvider15getNextLigatureEh+0x80>) + 8004c76: e7ee b.n 8004c56 <_ZN8touchgfx12TextProvider15getNextLigatureEh+0x12> + const uint16_t index = pos + offset; + 8004c78: 8ee2 ldrh r2, [r4, #54] ; 0x36 + if (nextCharacters.peekChar(1) == 0x093F) // Hindi I-matra + 8004c7a: f640 103f movw r0, #2367 ; 0x93f + 8004c7e: 1c53 adds r3, r2, #1 + 8004c80: b29b uxth r3, r3 + return buffer[index < size ? index : index - size]; + 8004c82: 2b09 cmp r3, #9 + 8004c84: 4619 mov r1, r3 + 8004c86: bf88 it hi + 8004c88: f1a3 010a subhi.w r1, r3, #10 + 8004c8c: eb04 0141 add.w r1, r4, r1, lsl #1 + 8004c90: 8c49 ldrh r1, [r1, #34] ; 0x22 + 8004c92: 4281 cmp r1, r0 + 8004c94: d109 bne.n 8004caa <_ZN8touchgfx12TextProvider15getNextLigatureEh+0x66> + FORCE_INLINE_FUNCTION Unicode::UnicodeChar peekChar() + 8004c96: 2b0a cmp r3, #10 + 8004c98: eb04 0242 add.w r2, r4, r2, lsl #1 + 8004c9c: bf28 it cs + 8004c9e: 2300 movcs r3, #0 + return buffer[pos]; + 8004ca0: 8c50 ldrh r0, [r2, #34] ; 0x22 + + FORCE_INLINE_FUNCTION void replaceAt1(Unicode::UnicodeChar newChar) + { + assert(used > 1); + const uint16_t index = pos + 1; + buffer[index < size ? index : 0] = newChar; + 8004ca2: eb04 0343 add.w r3, r4, r3, lsl #1 + 8004ca6: 8458 strh r0, [r3, #34] ; 0x22 + buffer[pos] = newChar; + 8004ca8: 8451 strh r1, [r2, #34] ; 0x22 + { + nextCharacters.replaceAt1(nextCharacters.peekChar()); + nextCharacters.replaceAt0(0x093F); + } + } + return getNextChar(); + 8004caa: 4620 mov r0, r4 +} + 8004cac: e8bd 4010 ldmia.w sp!, {r4, lr} + return getNextChar(); + 8004cb0: f020 bf66 b.w 8025b80 <_ZN8touchgfx12TextProvider11getNextCharEv> + 8004cb4: 08037968 .word 0x08037968 + 8004cb8: 08037971 .word 0x08037971 + 8004cbc: 08037a1c .word 0x08037a1c + 8004cc0: 08037a66 .word 0x08037a66 + 8004cc4: 08037a74 .word 0x08037a74 + +08004cc8 <_ZN8touchgfx12TextProvider18initializeInternalEv>: + +void touchgfx::TextProvider::initializeInternal() +{ + fillInputBuffer(); + 8004cc8: f020 bf23 b.w 8025b12 <_ZN8touchgfx12TextProvider15fillInputBufferEv> + +08004ccc <_ZN8touchgfx3LCD10drawStringENS_4RectERKS1_RKNS0_13StringVisualsEPKtz>: +} + +void touchgfx::LCD::drawString(touchgfx::Rect widgetArea, const touchgfx::Rect& invalidatedArea, const touchgfx::LCD::StringVisuals& stringVisuals, const touchgfx::Unicode::UnicodeChar* format, ...) +{ + 8004ccc: b510 push {r4, lr} + 8004cce: b086 sub sp, #24 + 8004cd0: ac02 add r4, sp, #8 + 8004cd2: e884 0006 stmia.w r4, {r1, r2} + 8004cd6: 461a mov r2, r3 + va_list pArg; + va_start(pArg, format); + 8004cd8: ab0a add r3, sp, #40 ; 0x28 + drawStringLTR(widgetArea, invalidatedArea, stringVisuals, format, pArg); + 8004cda: 4621 mov r1, r4 + va_start(pArg, format); + 8004cdc: 9305 str r3, [sp, #20] + drawStringLTR(widgetArea, invalidatedArea, stringVisuals, format, pArg); + 8004cde: 9301 str r3, [sp, #4] + 8004ce0: 9b09 ldr r3, [sp, #36] ; 0x24 + 8004ce2: 9300 str r3, [sp, #0] + 8004ce4: 9b08 ldr r3, [sp, #32] + 8004ce6: f01e f91d bl 8022f24 <_ZN8touchgfx3LCD13drawStringLTRERKNS_4RectES3_RKNS0_13StringVisualsEPKtSt9__va_list> + va_end(pArg); +} + 8004cea: b006 add sp, #24 + 8004cec: bd10 pop {r4, pc} + ... + +08004cf0 <_ZN8touchgfx5Texts11setLanguageEt>: +touchgfx::LanguageId touchgfx::Texts::currentLanguage = static_cast(0); +static const touchgfx::Unicode::UnicodeChar* currentLanguagePtr = 0; +static const uint32_t* currentLanguageIndices = 0; + +void touchgfx::Texts::setLanguage(touchgfx::LanguageId id) +{ + 8004cf0: b538 push {r3, r4, r5, lr} + const touchgfx::TypedText::TypedTextData* currentLanguageTypedText = 0; + if (id < 1) + 8004cf2: bb18 cbnz r0, 8004d3c <_ZN8touchgfx5Texts11setLanguageEt+0x4c> + { + if (languagesArray[id] != 0) + 8004cf4: 4b12 ldr r3, [pc, #72] ; (8004d40 <_ZN8touchgfx5Texts11setLanguageEt+0x50>) + 8004cf6: 4813 ldr r0, [pc, #76] ; (8004d44 <_ZN8touchgfx5Texts11setLanguageEt+0x54>) + 8004cf8: 681c ldr r4, [r3, #0] + 8004cfa: 4913 ldr r1, [pc, #76] ; (8004d48 <_ZN8touchgfx5Texts11setLanguageEt+0x58>) + 8004cfc: b1b4 cbz r4, 8004d2c <_ZN8touchgfx5Texts11setLanguageEt+0x3c> + { + // Dynamic translation is added + const TranslationHeader* translation = languagesArray[id]; + currentLanguagePtr = (const touchgfx::Unicode::UnicodeChar*)(((const uint8_t*)translation) + translation->offset_to_texts); + 8004cfe: 6822 ldr r2, [r4, #0] + 8004d00: 4422 add r2, r4 + 8004d02: 6002 str r2, [r0, #0] + currentLanguageIndices = (const uint32_t*)(((const uint8_t*)translation) + translation->offset_to_indices); + 8004d04: 6862 ldr r2, [r4, #4] + 8004d06: 4422 add r2, r4 + 8004d08: 600a str r2, [r1, #0] + currentLanguageTypedText = (const touchgfx::TypedText::TypedTextData*)(((const uint8_t*)translation) + translation->offset_to_typedtext); + 8004d0a: 68a2 ldr r2, [r4, #8] + 8004d0c: 4414 add r4, r2 + } + } + + if (currentLanguageTypedText) + { + currentLanguage = id; + 8004d0e: 4b0f ldr r3, [pc, #60] ; (8004d4c <_ZN8touchgfx5Texts11setLanguageEt+0x5c>) + 8004d10: 2200 movs r2, #0 + 8004d12: 801a strh r2, [r3, #0] + touchgfx::TypedText::registerTypedTextDatabase(currentLanguageTypedText, + TypedTextDatabase::getFonts(), TypedTextDatabase::getInstanceSize()); + 8004d14: f000 f838 bl 8004d88 <_ZN17TypedTextDatabase8getFontsEv> + 8004d18: 4605 mov r5, r0 + touchgfx::TypedText::registerTypedTextDatabase(currentLanguageTypedText, + 8004d1a: f000 f833 bl 8004d84 <_ZN17TypedTextDatabase15getInstanceSizeEv> + typedTexts = data; + 8004d1e: 4b0c ldr r3, [pc, #48] ; (8004d50 <_ZN8touchgfx5Texts11setLanguageEt+0x60>) + 8004d20: 601c str r4, [r3, #0] + fonts = f; + 8004d22: 4b0c ldr r3, [pc, #48] ; (8004d54 <_ZN8touchgfx5Texts11setLanguageEt+0x64>) + 8004d24: 601d str r5, [r3, #0] + numberOfTypedTexts = n; + 8004d26: 4b0c ldr r3, [pc, #48] ; (8004d58 <_ZN8touchgfx5Texts11setLanguageEt+0x68>) + 8004d28: 8018 strh r0, [r3, #0] + } +} + 8004d2a: e007 b.n 8004d3c <_ZN8touchgfx5Texts11setLanguageEt+0x4c> + currentLanguagePtr = texts_all_languages; + 8004d2c: 4b0b ldr r3, [pc, #44] ; (8004d5c <_ZN8touchgfx5Texts11setLanguageEt+0x6c>) + 8004d2e: 6003 str r3, [r0, #0] + currentLanguageIndices = staticLanguageIndices[id]; + 8004d30: 4b0b ldr r3, [pc, #44] ; (8004d60 <_ZN8touchgfx5Texts11setLanguageEt+0x70>) + 8004d32: 600b str r3, [r1, #0] + currentLanguageTypedText = typedTextDatabaseArray[id]; + 8004d34: 4b0b ldr r3, [pc, #44] ; (8004d64 <_ZN8touchgfx5Texts11setLanguageEt+0x74>) + 8004d36: 681c ldr r4, [r3, #0] + if (currentLanguageTypedText) + 8004d38: 2c00 cmp r4, #0 + 8004d3a: d1e8 bne.n 8004d0e <_ZN8touchgfx5Texts11setLanguageEt+0x1e> +} + 8004d3c: bd38 pop {r3, r4, r5, pc} + 8004d3e: bf00 nop + 8004d40: 20007b54 .word 0x20007b54 + 8004d44: 20007b58 .word 0x20007b58 + 8004d48: 20007b5c .word 0x20007b5c + 8004d4c: 20007b60 .word 0x20007b60 + 8004d50: 2001e784 .word 0x2001e784 + 8004d54: 2001e78c .word 0x2001e78c + 8004d58: 2001e788 .word 0x2001e788 + 8004d5c: 90008fa8 .word 0x90008fa8 + 8004d60: 90008fa0 .word 0x90008fa0 + 8004d64: 90008fb0 .word 0x90008fb0 + +08004d68 <_ZNK8touchgfx5Texts7getTextEt>: + languagesArray[id] = (const TranslationHeader*)translation; +} + +const touchgfx::Unicode::UnicodeChar* touchgfx::Texts::getText(TypedTextId id) const +{ + return ¤tLanguagePtr[currentLanguageIndices[id]]; + 8004d68: 4b04 ldr r3, [pc, #16] ; (8004d7c <_ZNK8touchgfx5Texts7getTextEt+0x14>) + 8004d6a: 681b ldr r3, [r3, #0] + 8004d6c: f853 0021 ldr.w r0, [r3, r1, lsl #2] + 8004d70: 4b03 ldr r3, [pc, #12] ; (8004d80 <_ZNK8touchgfx5Texts7getTextEt+0x18>) + 8004d72: 681b ldr r3, [r3, #0] +} + 8004d74: eb03 0040 add.w r0, r3, r0, lsl #1 + 8004d78: 4770 bx lr + 8004d7a: bf00 nop + 8004d7c: 20007b5c .word 0x20007b5c + 8004d80: 20007b58 .word 0x20007b58 + +08004d84 <_ZN17TypedTextDatabase15getInstanceSizeEv>: +} + +uint16_t getInstanceSize() +{ + return sizeof(typedText_database_DEFAULT) / sizeof(touchgfx::TypedText::TypedTextData); +} + 8004d84: 2002 movs r0, #2 + 8004d86: 4770 bx lr + +08004d88 <_ZN17TypedTextDatabase8getFontsEv>: + +const touchgfx::Font** getFonts() +{ + return touchgfx_fonts; +} + 8004d88: 4800 ldr r0, [pc, #0] ; (8004d8c <_ZN17TypedTextDatabase8getFontsEv+0x4>) + 8004d8a: 4770 bx lr + 8004d8c: 20007b64 .word 0x20007b64 + +08004d90 <_GLOBAL__sub_I_touchgfx_fonts>: + case 2: + touchgfx_fonts[2] = &(getFont_verdana_10_4bpp()); + break; + } +} +} // namespace TypedTextDatabase + 8004d90: b510 push {r4, lr} +}; + 8004d92: 4c05 ldr r4, [pc, #20] ; (8004da8 <_GLOBAL__sub_I_touchgfx_fonts+0x18>) + &(getFont_verdana_20_4bpp()), + 8004d94: f7ff fec0 bl 8004b18 <_Z23getFont_verdana_20_4bppv> +}; + 8004d98: 6020 str r0, [r4, #0] + &(getFont_verdana_40_4bpp()), + 8004d9a: f7ff fef9 bl 8004b90 <_Z23getFont_verdana_40_4bppv> +}; + 8004d9e: 6060 str r0, [r4, #4] + &(getFont_verdana_10_4bpp()) + 8004da0: f7ff fe7c bl 8004a9c <_Z23getFont_verdana_10_4bppv> +}; + 8004da4: 60a0 str r0, [r4, #8] +} // namespace TypedTextDatabase + 8004da6: bd10 pop {r4, pc} + 8004da8: 20007b64 .word 0x20007b64 + +08004dac <_ZN19FrontendApplicationD1Ev>: + +class FrontendApplication : public FrontendApplicationBase +{ +public: + FrontendApplication(Model& m, FrontendHeap& heap); + virtual ~FrontendApplication() { } + 8004dac: 4770 bx lr + +08004dae <_ZN19FrontendApplicationD0Ev>: + 8004dae: b510 push {r4, lr} + 8004db0: 4604 mov r4, r0 + 8004db2: f44f 71ae mov.w r1, #348 ; 0x15c + 8004db6: f02f fa9e bl 80342f6 <_ZdlPvj> + 8004dba: 4620 mov r0, r4 + 8004dbc: bd10 pop {r4, pc} + +08004dbe <_ZN19FrontendApplication15handleTickEventEv>: + + virtual void handleTickEvent() + 8004dbe: b510 push {r4, lr} + 8004dc0: 4604 mov r4, r0 + { + model.tick(); + 8004dc2: f8d0 0158 ldr.w r0, [r0, #344] ; 0x158 + 8004dc6: f000 f886 bl 8004ed6 <_ZN5Model4tickEv> + FrontendApplicationBase::handleTickEvent(); + 8004dca: 4620 mov r0, r4 + } + 8004dcc: e8bd 4010 ldmia.w sp!, {r4, lr} + FrontendApplicationBase::handleTickEvent(); + 8004dd0: f01e bd8c b.w 80238ec <_ZN8touchgfx11Application15handleTickEventEv> + +08004dd4 <_ZN19FrontendApplicationC1ER5ModelR12FrontendHeap>: +#include + +FrontendApplication::FrontendApplication(Model& m, FrontendHeap& heap) + 8004dd4: b510 push {r4, lr} + 8004dd6: 4604 mov r4, r0 + : FrontendApplicationBase(m, heap) + 8004dd8: f7ff f994 bl 8004104 <_ZN23FrontendApplicationBaseC1ER5ModelR12FrontendHeap> + 8004ddc: 4b01 ldr r3, [pc, #4] ; (8004de4 <_ZN19FrontendApplicationC1ER5ModelR12FrontendHeap+0x10>) +{ + +} + 8004dde: 4620 mov r0, r4 + : FrontendApplicationBase(m, heap) + 8004de0: 6023 str r3, [r4, #0] +} + 8004de2: bd10 pop {r4, pc} + 8004de4: 08037b50 .word 0x08037b50 + +08004de8 <_ZN19MainScreenPresenterD1Ev>: + */ + virtual void deactivate(); + + virtual void SetPwmValueFromHmi(uint8_t index_u8, uint8_t value_u8); + + virtual ~MainScreenPresenter() {}; + 8004de8: 4770 bx lr + +08004dea <_ZThn4_N19MainScreenPresenterD1Ev>: + 8004dea: 3804 subs r0, #4 + 8004dec: 4770 bx lr + +08004dee <_ZN19MainScreenPresenter10deactivateEv>: +} + +void MainScreenPresenter::activate() +{ + +} + 8004dee: 4770 bx lr + +08004df0 <_ZN19MainScreenPresenterD0Ev>: + 8004df0: b510 push {r4, lr} + 8004df2: 4604 mov r4, r0 + 8004df4: 2110 movs r1, #16 + 8004df6: f02f fa7e bl 80342f6 <_ZdlPvj> + 8004dfa: 4620 mov r0, r4 + 8004dfc: bd10 pop {r4, pc} + +08004dfe <_ZThn4_N19MainScreenPresenterD0Ev>: + 8004dfe: f1a0 0004 sub.w r0, r0, #4 + 8004e02: e7f5 b.n 8004df0 <_ZN19MainScreenPresenterD0Ev> + +08004e04 <_ZN19MainScreenPresenter18SetPwmValueFromHmiEhh>: + +} + +void MainScreenPresenter::SetPwmValueFromHmi(uint8_t index_u8, uint8_t value_u8) +{ + model->SetPwmValueFromHmi(index_u8, value_u8); + 8004e04: 6880 ldr r0, [r0, #8] + 8004e06: f000 b867 b.w 8004ed8 <_ZN5Model18SetPwmValueFromHmiEhh> + ... + +08004e0c <_ZN19MainScreenPresenterC1ER14MainScreenView>: + ModelListener() : model(0) {} + 8004e0c: 2200 movs r2, #0 + : view(v) + 8004e0e: 60c1 str r1, [r0, #12] + 8004e10: 6082 str r2, [r0, #8] + 8004e12: 4a04 ldr r2, [pc, #16] ; (8004e24 <_ZN19MainScreenPresenterC1ER14MainScreenView+0x18>) +MainScreenPresenter::MainScreenPresenter(MainScreenView& v) + 8004e14: b510 push {r4, lr} + : view(v) + 8004e16: f102 0408 add.w r4, r2, #8 + 8004e1a: 3224 adds r2, #36 ; 0x24 + 8004e1c: 6004 str r4, [r0, #0] + 8004e1e: 6042 str r2, [r0, #4] +} + 8004e20: bd10 pop {r4, pc} + 8004e22: bf00 nop + 8004e24: 08037b9c .word 0x08037b9c + +08004e28 <_ZN14MainScreenView14tearDownScreenEv>: +} + +void MainScreenView::tearDownScreen() +{ + MainScreenViewBase::tearDownScreen(); +} + 8004e28: 4770 bx lr + +08004e2a <_ZN14MainScreenView10updatePwm1Eh>: + +void MainScreenView::updatePwm1(uint8_t value) +{ + presenter->SetPwmValueFromHmi(0, value); + 8004e2a: 6bc0 ldr r0, [r0, #60] ; 0x3c +{ + 8004e2c: 460a mov r2, r1 + presenter->SetPwmValueFromHmi(0, value); + 8004e2e: 2100 movs r1, #0 + 8004e30: 6803 ldr r3, [r0, #0] + 8004e32: 691b ldr r3, [r3, #16] + 8004e34: 4718 bx r3 + +08004e36 <_ZN14MainScreenView10updatePwm2Eh>: +} + +void MainScreenView::updatePwm2(uint8_t value) +{ + presenter->SetPwmValueFromHmi(1, value); + 8004e36: 6bc0 ldr r0, [r0, #60] ; 0x3c +{ + 8004e38: 460a mov r2, r1 + presenter->SetPwmValueFromHmi(1, value); + 8004e3a: 2101 movs r1, #1 + 8004e3c: 6803 ldr r3, [r0, #0] + 8004e3e: 691b ldr r3, [r3, #16] + 8004e40: 4718 bx r3 + +08004e42 <_ZN14MainScreenView10updatePwm3Eh>: +} + +void MainScreenView::updatePwm3(uint8_t value) +{ + presenter->SetPwmValueFromHmi(2, value); + 8004e42: 6bc0 ldr r0, [r0, #60] ; 0x3c +{ + 8004e44: 460a mov r2, r1 + presenter->SetPwmValueFromHmi(2, value); + 8004e46: 2102 movs r1, #2 + 8004e48: 6803 ldr r3, [r0, #0] + 8004e4a: 691b ldr r3, [r3, #16] + 8004e4c: 4718 bx r3 + +08004e4e <_ZN14MainScreenView10updatePwm4Eh>: +} + +void MainScreenView::updatePwm4(uint8_t value) +{ + presenter->SetPwmValueFromHmi(3, value); + 8004e4e: 6bc0 ldr r0, [r0, #60] ; 0x3c +{ + 8004e50: 460a mov r2, r1 + presenter->SetPwmValueFromHmi(3, value); + 8004e52: 2103 movs r1, #3 + 8004e54: 6803 ldr r3, [r0, #0] + 8004e56: 691b ldr r3, [r3, #16] + 8004e58: 4718 bx r3 + +08004e5a <_ZN14MainScreenView10updatePwm5Eh>: +} + +void MainScreenView::updatePwm5(uint8_t value) +{ + presenter->SetPwmValueFromHmi(4, value); + 8004e5a: 6bc0 ldr r0, [r0, #60] ; 0x3c +{ + 8004e5c: 460a mov r2, r1 + presenter->SetPwmValueFromHmi(4, value); + 8004e5e: 2104 movs r1, #4 + 8004e60: 6803 ldr r3, [r0, #0] + 8004e62: 691b ldr r3, [r3, #16] + 8004e64: 4718 bx r3 + +08004e66 <_ZN14MainScreenView10updatePwm6Eh>: +} + +void MainScreenView::updatePwm6(uint8_t value) +{ + presenter->SetPwmValueFromHmi(5, value); + 8004e66: 6bc0 ldr r0, [r0, #60] ; 0x3c +{ + 8004e68: 460a mov r2, r1 + presenter->SetPwmValueFromHmi(5, value); + 8004e6a: 2105 movs r1, #5 + 8004e6c: 6803 ldr r3, [r0, #0] + 8004e6e: 691b ldr r3, [r3, #16] + 8004e70: 4718 bx r3 + +08004e72 <_ZN14MainScreenView10updatePwm7Eh>: +} + +void MainScreenView::updatePwm7(uint8_t value) +{ + presenter->SetPwmValueFromHmi(6, value); + 8004e72: 6bc0 ldr r0, [r0, #60] ; 0x3c +{ + 8004e74: 460a mov r2, r1 + presenter->SetPwmValueFromHmi(6, value); + 8004e76: 2106 movs r1, #6 + 8004e78: 6803 ldr r3, [r0, #0] + 8004e7a: 691b ldr r3, [r3, #16] + 8004e7c: 4718 bx r3 + +08004e7e <_ZN14MainScreenView10updatePwm8Eh>: +} + +void MainScreenView::updatePwm8(uint8_t value) +{ + presenter->SetPwmValueFromHmi(7, value); + 8004e7e: 6bc0 ldr r0, [r0, #60] ; 0x3c +{ + 8004e80: 460a mov r2, r1 + presenter->SetPwmValueFromHmi(7, value); + 8004e82: 2107 movs r1, #7 + 8004e84: 6803 ldr r3, [r0, #0] + 8004e86: 691b ldr r3, [r3, #16] + 8004e88: 4718 bx r3 + ... + +08004e8c <_ZN14MainScreenViewD1Ev>: + +class MainScreenView : public MainScreenViewBase +{ +public: + MainScreenView(); + virtual ~MainScreenView() {} + 8004e8c: 4b03 ldr r3, [pc, #12] ; (8004e9c <_ZN14MainScreenViewD1Ev+0x10>) + 8004e8e: b510 push {r4, lr} + 8004e90: 4604 mov r4, r0 + 8004e92: 6003 str r3, [r0, #0] + 8004e94: f7ff fab8 bl 8004408 <_ZN18MainScreenViewBaseD1Ev> + 8004e98: 4620 mov r0, r4 + 8004e9a: bd10 pop {r4, pc} + 8004e9c: 08037bd0 .word 0x08037bd0 + +08004ea0 <_ZN14MainScreenViewD0Ev>: + 8004ea0: b510 push {r4, lr} + 8004ea2: 4604 mov r4, r0 + 8004ea4: f7ff fff2 bl 8004e8c <_ZN14MainScreenViewD1Ev> + 8004ea8: f241 01d8 movw r1, #4312 ; 0x10d8 + 8004eac: 4620 mov r0, r4 + 8004eae: f02f fa22 bl 80342f6 <_ZdlPvj> + 8004eb2: 4620 mov r0, r4 + 8004eb4: bd10 pop {r4, pc} + ... + +08004eb8 <_ZN14MainScreenViewC1Ev>: +MainScreenView::MainScreenView() + 8004eb8: b510 push {r4, lr} + 8004eba: 4604 mov r4, r0 + 8004ebc: f7ff fae2 bl 8004484 <_ZN18MainScreenViewBaseC1Ev> + 8004ec0: 4b01 ldr r3, [pc, #4] ; (8004ec8 <_ZN14MainScreenViewC1Ev+0x10>) +} + 8004ec2: 4620 mov r0, r4 +MainScreenView::MainScreenView() + 8004ec4: 6023 str r3, [r4, #0] +} + 8004ec6: bd10 pop {r4, pc} + 8004ec8: 08037bd0 .word 0x08037bd0 + +08004ecc <_ZN14MainScreenView11setupScreenEv>: + MainScreenViewBase::setupScreen(); + 8004ecc: f7ff ba31 b.w 8004332 <_ZN18MainScreenViewBase11setupScreenEv> + +08004ed0 <_ZN5ModelC1Ev>: +#ifndef SIMULATOR +#include <../../../../Core/Inc/main.h> +extern uint16_t pwm_period[8]; +#endif + +Model::Model() : modelListener(0) + 8004ed0: 2200 movs r2, #0 + 8004ed2: 6082 str r2, [r0, #8] +{ + +} + 8004ed4: 4770 bx lr + +08004ed6 <_ZN5Model4tickEv>: + +void Model::tick() +{ + +} + 8004ed6: 4770 bx lr + +08004ed8 <_ZN5Model18SetPwmValueFromHmiEhh>: + +void Model::SetPwmValueFromHmi (uint8_t index_u8, uint8_t value_u8) +{ +#ifndef SIMULATOR + if (index_u8 < 8) + 8004ed8: 2907 cmp r1, #7 + 8004eda: d80a bhi.n 8004ef2 <_ZN5Model18SetPwmValueFromHmiEhh+0x1a> + { + pwm_hmi_u8a[index_u8] = value_u8; + pwm_dyc[index_u8] = (uint16_t)((uint32_t)((uint32_t)value_u8 * (uint32_t)(pwm_period[index_u8])) / 100); + 8004edc: 4b05 ldr r3, [pc, #20] ; (8004ef4 <_ZN5Model18SetPwmValueFromHmiEhh+0x1c>) + pwm_hmi_u8a[index_u8] = value_u8; + 8004ede: 5442 strb r2, [r0, r1] + pwm_dyc[index_u8] = (uint16_t)((uint32_t)((uint32_t)value_u8 * (uint32_t)(pwm_period[index_u8])) / 100); + 8004ee0: f833 3011 ldrh.w r3, [r3, r1, lsl #1] + 8004ee4: 435a muls r2, r3 + 8004ee6: 2364 movs r3, #100 ; 0x64 + 8004ee8: fbb2 f2f3 udiv r2, r2, r3 + 8004eec: 4b02 ldr r3, [pc, #8] ; (8004ef8 <_ZN5Model18SetPwmValueFromHmiEhh+0x20>) + 8004eee: f823 2011 strh.w r2, [r3, r1, lsl #1] + else + { + // Invalid index + } +#endif +} + 8004ef2: 4770 bx lr + 8004ef4: 200005d8 .word 0x200005d8 + 8004ef8: 200005c8 .word 0x200005c8 + +08004efc <_ZN15SliderContainer9updatePwmEv>: +} + +void SliderContainer::updatePwm() +{ + +} + 8004efc: 4770 bx lr + +08004efe <_ZN15SliderContainer8setIndexEh>: +{ + 8004efe: b510 push {r4, lr} + Unicode::itoa(num_u8, textTitleBuffer, TEXTTITLE_SIZE, 10); + 8004f00: 230a movs r3, #10 +{ + 8004f02: 4604 mov r4, r0 + 8004f04: 4608 mov r0, r1 + index_u8 = num_u8; + 8004f06: f884 11f4 strb.w r1, [r4, #500] ; 0x1f4 + Unicode::itoa(num_u8, textTitleBuffer, TEXTTITLE_SIZE, 10); + 8004f0a: 461a mov r2, r3 + 8004f0c: f504 71dc add.w r1, r4, #440 ; 0x1b8 + 8004f10: f021 f9d8 bl 80262c4 <_ZN8touchgfx7Unicode4itoaElPtti> + textTitle.invalidate(); + 8004f14: f504 7090 add.w r0, r4, #288 ; 0x120 +} + 8004f18: e8bd 4010 ldmia.w sp!, {r4, lr} + textTitle.invalidate(); + 8004f1c: f01f bcdd b.w 80248da <_ZNK8touchgfx8Drawable10invalidateEv> + +08004f20 <_ZN15SliderContainerC1Ev>: +SliderContainer::SliderContainer() + 8004f20: b510 push {r4, lr} + 8004f22: 4604 mov r4, r0 + 8004f24: f7ff fce8 bl 80048f8 <_ZN19SliderContainerBaseC1Ev> + 8004f28: 4b01 ldr r3, [pc, #4] ; (8004f30 <_ZN15SliderContainerC1Ev+0x10>) +} + 8004f2a: 4620 mov r0, r4 +SliderContainer::SliderContainer() + 8004f2c: 6023 str r3, [r4, #0] +} + 8004f2e: bd10 pop {r4, pc} + 8004f30: 08037c24 .word 0x08037c24 + +08004f34 <_ZN15SliderContainer10initializeEv>: + SliderContainerBase::initialize(); + 8004f34: f7ff bc15 b.w 8004762 <_ZN19SliderContainerBase10initializeEv> + +08004f38 : + * @param ioctx: holds device IO functions. + * @retval LAN8742_STATUS_OK if OK + * LAN8742_STATUS_ERROR if missing mandatory function + */ +int32_t LAN8742_RegisterBusIO(lan8742_Object_t *pObj, lan8742_IOCtx_t *ioctx) +{ + 8004f38: b530 push {r4, r5, lr} + if(!pObj || !ioctx->ReadReg || !ioctx->WriteReg || !ioctx->GetTick) + 8004f3a: b170 cbz r0, 8004f5a + 8004f3c: 68cc ldr r4, [r1, #12] + 8004f3e: b164 cbz r4, 8004f5a + 8004f40: 688a ldr r2, [r1, #8] + 8004f42: b152 cbz r2, 8004f5a + 8004f44: 690b ldr r3, [r1, #16] + 8004f46: b143 cbz r3, 8004f5a + { + return LAN8742_STATUS_ERROR; + } + + pObj->IO.Init = ioctx->Init; + 8004f48: 680d ldr r5, [r1, #0] + pObj->IO.DeInit = ioctx->DeInit; + 8004f4a: 6849 ldr r1, [r1, #4] + pObj->IO.Init = ioctx->Init; + 8004f4c: 6085 str r5, [r0, #8] + pObj->IO.DeInit = ioctx->DeInit; + 8004f4e: 60c1 str r1, [r0, #12] + pObj->IO.ReadReg = ioctx->ReadReg; + pObj->IO.WriteReg = ioctx->WriteReg; + pObj->IO.GetTick = ioctx->GetTick; + 8004f50: 6183 str r3, [r0, #24] + pObj->IO.WriteReg = ioctx->WriteReg; + 8004f52: e9c0 2404 strd r2, r4, [r0, #16] + + return LAN8742_STATUS_OK; + 8004f56: 2000 movs r0, #0 +} + 8004f58: bd30 pop {r4, r5, pc} + return LAN8742_STATUS_ERROR; + 8004f5a: f04f 30ff mov.w r0, #4294967295 + 8004f5e: e7fb b.n 8004f58 + +08004f60 : + * LAN8742_STATUS_READ_ERROR if connot read register + * LAN8742_STATUS_WRITE_ERROR if connot write to register + * LAN8742_STATUS_RESET_TIMEOUT if cannot perform a software reset + */ + int32_t LAN8742_Init(lan8742_Object_t *pObj) + { + 8004f60: b573 push {r0, r1, r4, r5, r6, lr} + uint32_t tickstart = 0, regvalue = 0, addr = 0; + 8004f62: 2300 movs r3, #0 + int32_t status = LAN8742_STATUS_OK; + + if(pObj->Is_Initialized == 0) + 8004f64: 6846 ldr r6, [r0, #4] + { + 8004f66: 4604 mov r4, r0 + uint32_t tickstart = 0, regvalue = 0, addr = 0; + 8004f68: 9301 str r3, [sp, #4] + if(pObj->Is_Initialized == 0) + 8004f6a: b166 cbz r6, 8004f86 + } + } + + if(status == LAN8742_STATUS_OK) + { + tickstart = pObj->IO.GetTick(); + 8004f6c: 69a3 ldr r3, [r4, #24] + 8004f6e: 4798 blx r3 + 8004f70: 4605 mov r5, r0 + + /* Wait for 2s to perform initialization */ + while((pObj->IO.GetTick() - tickstart) <= LAN8742_INIT_TO) + 8004f72: 69a3 ldr r3, [r4, #24] + 8004f74: 4798 blx r3 + 8004f76: 1b43 subs r3, r0, r5 + 8004f78: f5b3 6ffa cmp.w r3, #2000 ; 0x7d0 + 8004f7c: d9f9 bls.n 8004f72 + { + } + pObj->Is_Initialized = 1; + 8004f7e: 2301 movs r3, #1 + 8004f80: 2500 movs r5, #0 + 8004f82: 6063 str r3, [r4, #4] + 8004f84: e027 b.n 8004fd6 + if(pObj->IO.Init != 0) + 8004f86: 6883 ldr r3, [r0, #8] + 8004f88: b103 cbz r3, 8004f8c + pObj->IO.Init(); + 8004f8a: 4798 blx r3 + pObj->DevAddr = LAN8742_MAX_DEV_ADDR + 1; + 8004f8c: 2320 movs r3, #32 + int32_t status = LAN8742_STATUS_OK; + 8004f8e: 2500 movs r5, #0 + pObj->DevAddr = LAN8742_MAX_DEV_ADDR + 1; + 8004f90: 6023 str r3, [r4, #0] + if(pObj->IO.ReadReg(addr, LAN8742_SMR, ®value) < 0) + 8004f92: 6963 ldr r3, [r4, #20] + 8004f94: aa01 add r2, sp, #4 + 8004f96: 2112 movs r1, #18 + 8004f98: 4630 mov r0, r6 + 8004f9a: 4798 blx r3 + 8004f9c: 2800 cmp r0, #0 + 8004f9e: db1d blt.n 8004fdc + if((regvalue & LAN8742_SMR_PHY_ADDR) == addr) + 8004fa0: 9b01 ldr r3, [sp, #4] + 8004fa2: f003 031f and.w r3, r3, #31 + 8004fa6: 42b3 cmp r3, r6 + 8004fa8: d11a bne.n 8004fe0 + status = LAN8742_STATUS_OK; + 8004faa: 2500 movs r5, #0 + pObj->DevAddr = addr; + 8004fac: 6026 str r6, [r4, #0] + if(pObj->DevAddr > LAN8742_MAX_DEV_ADDR) + 8004fae: 6820 ldr r0, [r4, #0] + 8004fb0: 281f cmp r0, #31 + 8004fb2: d82d bhi.n 8005010 + if(status == LAN8742_STATUS_OK) + 8004fb4: b97d cbnz r5, 8004fd6 + if(pObj->IO.WriteReg(pObj->DevAddr, LAN8742_BCR, LAN8742_BCR_SOFT_RESET) >= 0) + 8004fb6: 6923 ldr r3, [r4, #16] + 8004fb8: f44f 4200 mov.w r2, #32768 ; 0x8000 + 8004fbc: 4629 mov r1, r5 + 8004fbe: 4798 blx r3 + 8004fc0: 2800 cmp r0, #0 + 8004fc2: db28 blt.n 8005016 + if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_BCR, ®value) >= 0) + 8004fc4: 6963 ldr r3, [r4, #20] + 8004fc6: aa01 add r2, sp, #4 + 8004fc8: 4629 mov r1, r5 + 8004fca: 6820 ldr r0, [r4, #0] + 8004fcc: 4798 blx r3 + 8004fce: 2800 cmp r0, #0 + 8004fd0: da0a bge.n 8004fe8 + status = LAN8742_STATUS_READ_ERROR; + 8004fd2: f06f 0504 mvn.w r5, #4 + } + + return status; + } + 8004fd6: 4628 mov r0, r5 + 8004fd8: b002 add sp, #8 + 8004fda: bd70 pop {r4, r5, r6, pc} + status = LAN8742_STATUS_READ_ERROR; + 8004fdc: f06f 0504 mvn.w r5, #4 + for(addr = 0; addr <= LAN8742_MAX_DEV_ADDR; addr ++) + 8004fe0: 3601 adds r6, #1 + 8004fe2: 2e20 cmp r6, #32 + 8004fe4: d1d5 bne.n 8004f92 + 8004fe6: e7e2 b.n 8004fae + tickstart = pObj->IO.GetTick(); + 8004fe8: 69a3 ldr r3, [r4, #24] + 8004fea: 4798 blx r3 + 8004fec: 4605 mov r5, r0 + while(regvalue & LAN8742_BCR_SOFT_RESET) + 8004fee: 9b01 ldr r3, [sp, #4] + if((pObj->IO.GetTick() - tickstart) <= LAN8742_SW_RESET_TO) + 8004ff0: 69a2 ldr r2, [r4, #24] + while(regvalue & LAN8742_BCR_SOFT_RESET) + 8004ff2: 041b lsls r3, r3, #16 + 8004ff4: d5ba bpl.n 8004f6c + if((pObj->IO.GetTick() - tickstart) <= LAN8742_SW_RESET_TO) + 8004ff6: 4790 blx r2 + 8004ff8: 1b40 subs r0, r0, r5 + 8004ffa: f5b0 7ffa cmp.w r0, #500 ; 0x1f4 + 8004ffe: d80d bhi.n 800501c + if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_BCR, ®value) < 0) + 8005000: 6963 ldr r3, [r4, #20] + 8005002: aa01 add r2, sp, #4 + 8005004: 2100 movs r1, #0 + 8005006: 6820 ldr r0, [r4, #0] + 8005008: 4798 blx r3 + 800500a: 2800 cmp r0, #0 + 800500c: daef bge.n 8004fee + 800500e: e7e0 b.n 8004fd2 + status = LAN8742_STATUS_ADDRESS_ERROR; + 8005010: f06f 0502 mvn.w r5, #2 + 8005014: e7df b.n 8004fd6 + status = LAN8742_STATUS_WRITE_ERROR; + 8005016: f06f 0503 mvn.w r5, #3 + 800501a: e7dc b.n 8004fd6 + status = LAN8742_STATUS_RESET_TIMEOUT; + 800501c: f06f 0501 mvn.w r5, #1 + return status; + 8005020: e7d9 b.n 8004fd6 + +08005022 : + * LAN8742_STATUS_10MBITS_HALFDUPLEX if 10Mb/s HD + * LAN8742_STATUS_READ_ERROR if connot read register + * LAN8742_STATUS_WRITE_ERROR if connot write to register + */ +int32_t LAN8742_GetLinkState(lan8742_Object_t *pObj) +{ + 8005022: b537 push {r0, r1, r2, r4, r5, lr} + uint32_t readval = 0; + 8005024: 2500 movs r5, #0 + + /* Read Status register */ + if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_BSR, &readval) < 0) + 8005026: 6943 ldr r3, [r0, #20] +{ + 8005028: 4604 mov r4, r0 + if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_BSR, &readval) < 0) + 800502a: aa01 add r2, sp, #4 + 800502c: 2101 movs r1, #1 + 800502e: 6800 ldr r0, [r0, #0] + uint32_t readval = 0; + 8005030: 9501 str r5, [sp, #4] + if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_BSR, &readval) < 0) + 8005032: 4798 blx r3 + 8005034: 42a8 cmp r0, r5 + 8005036: da03 bge.n 8005040 + { + return LAN8742_STATUS_READ_ERROR; + 8005038: f06f 0004 mvn.w r0, #4 + else + { + return LAN8742_STATUS_10MBITS_HALFDUPLEX; + } + } +} + 800503c: b003 add sp, #12 + 800503e: bd30 pop {r4, r5, pc} + if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_BSR, &readval) < 0) + 8005040: 6963 ldr r3, [r4, #20] + 8005042: aa01 add r2, sp, #4 + 8005044: 2101 movs r1, #1 + 8005046: 6820 ldr r0, [r4, #0] + 8005048: 4798 blx r3 + 800504a: 2800 cmp r0, #0 + 800504c: dbf4 blt.n 8005038 + if((readval & LAN8742_BSR_LINK_STATUS) == 0) + 800504e: 9b01 ldr r3, [sp, #4] + 8005050: 075b lsls r3, r3, #29 + 8005052: d52c bpl.n 80050ae + if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_BCR, &readval) < 0) + 8005054: 6963 ldr r3, [r4, #20] + 8005056: aa01 add r2, sp, #4 + 8005058: 4629 mov r1, r5 + 800505a: 6820 ldr r0, [r4, #0] + 800505c: 4798 blx r3 + 800505e: 2800 cmp r0, #0 + 8005060: dbea blt.n 8005038 + if((readval & LAN8742_BCR_AUTONEGO_EN) != LAN8742_BCR_AUTONEGO_EN) + 8005062: 9b01 ldr r3, [sp, #4] + 8005064: 04dd lsls r5, r3, #19 + 8005066: d40e bmi.n 8005086 + if(((readval & LAN8742_BCR_SPEED_SELECT) == LAN8742_BCR_SPEED_SELECT) && ((readval & LAN8742_BCR_DUPLEX_MODE) == LAN8742_BCR_DUPLEX_MODE)) + 8005068: f403 5204 and.w r2, r3, #8448 ; 0x2100 + 800506c: f5b2 5f04 cmp.w r2, #8448 ; 0x2100 + 8005070: d101 bne.n 8005076 + return LAN8742_STATUS_100MBITS_FULLDUPLEX; + 8005072: 2002 movs r0, #2 + 8005074: e7e2 b.n 800503c + else if ((readval & LAN8742_BCR_SPEED_SELECT) == LAN8742_BCR_SPEED_SELECT) + 8005076: 0498 lsls r0, r3, #18 + 8005078: d501 bpl.n 800507e + return LAN8742_STATUS_100MBITS_HALFDUPLEX; + 800507a: 2003 movs r0, #3 + 800507c: e7de b.n 800503c + else if ((readval & LAN8742_BCR_DUPLEX_MODE) == LAN8742_BCR_DUPLEX_MODE) + 800507e: 05d9 lsls r1, r3, #23 + 8005080: d513 bpl.n 80050aa + return LAN8742_STATUS_10MBITS_FULLDUPLEX; + 8005082: 2004 movs r0, #4 + 8005084: e7da b.n 800503c + if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_PHYSCSR, &readval) < 0) + 8005086: 6963 ldr r3, [r4, #20] + 8005088: aa01 add r2, sp, #4 + 800508a: 211f movs r1, #31 + 800508c: 6820 ldr r0, [r4, #0] + 800508e: 4798 blx r3 + 8005090: 2800 cmp r0, #0 + 8005092: dbd1 blt.n 8005038 + if((readval & LAN8742_PHYSCSR_AUTONEGO_DONE) == 0) + 8005094: 9b01 ldr r3, [sp, #4] + 8005096: 04da lsls r2, r3, #19 + 8005098: d50b bpl.n 80050b2 + if((readval & LAN8742_PHYSCSR_HCDSPEEDMASK) == LAN8742_PHYSCSR_100BTX_FD) + 800509a: f003 031c and.w r3, r3, #28 + 800509e: 2b18 cmp r3, #24 + 80050a0: d0e7 beq.n 8005072 + else if ((readval & LAN8742_PHYSCSR_HCDSPEEDMASK) == LAN8742_PHYSCSR_100BTX_HD) + 80050a2: 2b08 cmp r3, #8 + 80050a4: d0e9 beq.n 800507a + else if ((readval & LAN8742_PHYSCSR_HCDSPEEDMASK) == LAN8742_PHYSCSR_10BT_FD) + 80050a6: 2b14 cmp r3, #20 + 80050a8: d0eb beq.n 8005082 + return LAN8742_STATUS_10MBITS_HALFDUPLEX; + 80050aa: 2005 movs r0, #5 + 80050ac: e7c6 b.n 800503c + return LAN8742_STATUS_LINK_DOWN; + 80050ae: 2001 movs r0, #1 + 80050b0: e7c4 b.n 800503c + return LAN8742_STATUS_AUTONEGO_NOTDONE; + 80050b2: 2006 movs r0, #6 + 80050b4: e7c2 b.n 800503c + ... + +080050b8 : + * @brief This function read the SR of the memory and wait the EOP. + * @param hqspi: QSPI handle + * @param Timeout + * @retval None + */ +static uint8_t QSPI_AutoPollingMemReady(QSPI_HandleTypeDef *hqspi, uint32_t Timeout) + 80050b8: b500 push {lr} +{ + QSPI_CommandTypeDef s_command; + QSPI_AutoPollingTypeDef s_config; + + /* Configure automatic polling mode to wait for memory ready */ + s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; + 80050ba: f44f 7280 mov.w r2, #256 ; 0x100 +static uint8_t QSPI_AutoPollingMemReady(QSPI_HandleTypeDef *hqspi, uint32_t Timeout) + 80050be: b095 sub sp, #84 ; 0x54 + s_command.Instruction = READ_STATUS_REG_CMD; + s_command.AddressMode = QSPI_ADDRESS_NONE; + s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; + s_command.DataMode = QSPI_DATA_1_LINE; + 80050c0: f04f 7180 mov.w r1, #16777216 ; 0x1000000 +static uint8_t QSPI_AutoPollingMemReady(QSPI_HandleTypeDef *hqspi, uint32_t Timeout) + 80050c4: 4603 mov r3, r0 + s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; + 80050c6: 920c str r2, [sp, #48] ; 0x30 + s_command.Instruction = READ_STATUS_REG_CMD; + 80050c8: 2205 movs r2, #5 + s_command.DataMode = QSPI_DATA_1_LINE; + 80050ca: 910f str r1, [sp, #60] ; 0x3c + s_command.DdrMode = QSPI_DDR_MODE_DISABLE; + s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; + s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; + + s_config.Match = 0; + s_config.Mask = N25Q128A_SR_WIP; + 80050cc: 2101 movs r1, #1 + s_command.Instruction = READ_STATUS_REG_CMD; + 80050ce: 9206 str r2, [sp, #24] + s_command.AddressMode = QSPI_ADDRESS_NONE; + 80050d0: 2200 movs r2, #0 + s_config.Mask = N25Q128A_SR_WIP; + 80050d2: 9101 str r1, [sp, #4] + s_command.DummyCycles = 0; + 80050d4: 920b str r2, [sp, #44] ; 0x2c + s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; + 80050d6: 9213 str r2, [sp, #76] ; 0x4c + s_config.Match = 0; + 80050d8: 9200 str r2, [sp, #0] + s_config.MatchMode = QSPI_MATCH_MODE_AND; + s_config.StatusBytesSize = 1; + s_config.Interval = 0x10; + s_config.AutomaticStop = QSPI_AUTOMATIC_STOP_ENABLE; + + if (HAL_QSPI_AutoPolling(hqspi, &s_command, &s_config, Timeout) != HAL_OK) + 80050da: 480b ldr r0, [pc, #44] ; (8005108 ) + s_config.StatusBytesSize = 1; + 80050dc: e9cd 1203 strd r1, r2, [sp, #12] + s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; + 80050e0: e9cd 220d strd r2, r2, [sp, #52] ; 0x34 + s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; + 80050e4: e9cd 2211 strd r2, r2, [sp, #68] ; 0x44 + s_config.Interval = 0x10; + 80050e8: 2210 movs r2, #16 + if (HAL_QSPI_AutoPolling(hqspi, &s_command, &s_config, Timeout) != HAL_OK) + 80050ea: a906 add r1, sp, #24 + s_config.Interval = 0x10; + 80050ec: 9202 str r2, [sp, #8] + s_config.AutomaticStop = QSPI_AUTOMATIC_STOP_ENABLE; + 80050ee: f44f 0280 mov.w r2, #4194304 ; 0x400000 + 80050f2: 9205 str r2, [sp, #20] + if (HAL_QSPI_AutoPolling(hqspi, &s_command, &s_config, Timeout) != HAL_OK) + 80050f4: 466a mov r2, sp + 80050f6: f002 fb07 bl 8007708 + { + return QSPI_ERROR; + } + + return QSPI_OK; +} + 80050fa: 3800 subs r0, #0 + 80050fc: bf18 it ne + 80050fe: 2001 movne r0, #1 + 8005100: b015 add sp, #84 ; 0x54 + 8005102: f85d fb04 ldr.w pc, [sp], #4 + 8005106: bf00 nop + 8005108: 20007b70 .word 0x20007b70 + +0800510c : +static uint8_t QSPI_WriteEnable(QSPI_HandleTypeDef *hqspi) + 800510c: b500 push {lr} + s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; + 800510e: f44f 7380 mov.w r3, #256 ; 0x100 +static uint8_t QSPI_WriteEnable(QSPI_HandleTypeDef *hqspi) + 8005112: b095 sub sp, #84 ; 0x54 + if (HAL_QSPI_Command(hqspi, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) + 8005114: f241 3288 movw r2, #5000 ; 0x1388 + 8005118: 4817 ldr r0, [pc, #92] ; (8005178 ) + s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; + 800511a: 930c str r3, [sp, #48] ; 0x30 + s_command.Instruction = WRITE_ENABLE_CMD; + 800511c: 2306 movs r3, #6 + if (HAL_QSPI_Command(hqspi, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) + 800511e: a906 add r1, sp, #24 + s_command.Instruction = WRITE_ENABLE_CMD; + 8005120: 9306 str r3, [sp, #24] + s_command.AddressMode = QSPI_ADDRESS_NONE; + 8005122: 2300 movs r3, #0 + s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; + 8005124: e9cd 330d strd r3, r3, [sp, #52] ; 0x34 + s_command.DataMode = QSPI_DATA_NONE; + 8005128: 930f str r3, [sp, #60] ; 0x3c + s_command.DummyCycles = 0; + 800512a: 930b str r3, [sp, #44] ; 0x2c + s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; + 800512c: 9313 str r3, [sp, #76] ; 0x4c + s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; + 800512e: e9cd 3311 strd r3, r3, [sp, #68] ; 0x44 + if (HAL_QSPI_Command(hqspi, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) + 8005132: f002 faa6 bl 8007682 + 8005136: b9e0 cbnz r0, 8005172 + s_config.Match = N25Q128A_SR_WREN; + 8005138: 2302 movs r3, #2 + s_config.Interval = 0x10; + 800513a: 2201 movs r2, #1 + s_command.Instruction = READ_STATUS_REG_CMD; + 800513c: f44f 0180 mov.w r1, #4194304 ; 0x400000 + s_config.MatchMode = QSPI_MATCH_MODE_AND; + 8005140: 9004 str r0, [sp, #16] + if (HAL_QSPI_AutoPolling(hqspi, &s_command, &s_config, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) + 8005142: 480d ldr r0, [pc, #52] ; (8005178 ) + s_config.Mask = N25Q128A_SR_WREN; + 8005144: e9cd 3300 strd r3, r3, [sp] + s_config.Interval = 0x10; + 8005148: 2310 movs r3, #16 + 800514a: e9cd 3202 strd r3, r2, [sp, #8] + s_command.Instruction = READ_STATUS_REG_CMD; + 800514e: 2305 movs r3, #5 + if (HAL_QSPI_AutoPolling(hqspi, &s_command, &s_config, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) + 8005150: 466a mov r2, sp + s_command.Instruction = READ_STATUS_REG_CMD; + 8005152: e9cd 1305 strd r1, r3, [sp, #20] + s_command.DataMode = QSPI_DATA_1_LINE; + 8005156: f04f 7380 mov.w r3, #16777216 ; 0x1000000 + if (HAL_QSPI_AutoPolling(hqspi, &s_command, &s_config, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) + 800515a: a906 add r1, sp, #24 + s_command.DataMode = QSPI_DATA_1_LINE; + 800515c: 930f str r3, [sp, #60] ; 0x3c + if (HAL_QSPI_AutoPolling(hqspi, &s_command, &s_config, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) + 800515e: f241 3388 movw r3, #5000 ; 0x1388 + 8005162: f002 fad1 bl 8007708 + return QSPI_ERROR; + 8005166: 3800 subs r0, #0 + 8005168: bf18 it ne + 800516a: 2001 movne r0, #1 +} + 800516c: b015 add sp, #84 ; 0x54 + 800516e: f85d fb04 ldr.w pc, [sp], #4 + return QSPI_ERROR; + 8005172: 2001 movs r0, #1 + 8005174: e7fa b.n 800516c + 8005176: bf00 nop + 8005178: 20007b70 .word 0x20007b70 + +0800517c : +{ + 800517c: b500 push {lr} + s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; + 800517e: f44f 7380 mov.w r3, #256 ; 0x100 +{ + 8005182: b091 sub sp, #68 ; 0x44 + s_command.DataMode = QSPI_DATA_4_LINES; + 8005184: f04f 7240 mov.w r2, #50331648 ; 0x3000000 + if (HAL_QSPI_MemoryMapped(&QSPIHandle, &s_command, &s_mem_mapped_cfg) != HAL_OK) + 8005188: 480e ldr r0, [pc, #56] ; (80051c4 ) + s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; + 800518a: 9308 str r3, [sp, #32] + s_command.Instruction = QUAD_INOUT_FAST_READ_CMD; + 800518c: 23eb movs r3, #235 ; 0xeb + if (HAL_QSPI_MemoryMapped(&QSPIHandle, &s_command, &s_mem_mapped_cfg) != HAL_OK) + 800518e: a902 add r1, sp, #8 + s_command.Instruction = QUAD_INOUT_FAST_READ_CMD; + 8005190: 9302 str r3, [sp, #8] + s_command.AddressMode = QSPI_ADDRESS_4_LINES; + 8005192: f44f 6340 mov.w r3, #3072 ; 0xc00 + 8005196: 9309 str r3, [sp, #36] ; 0x24 + s_command.AddressSize = QSPI_ADDRESS_24_BITS; + 8005198: f44f 5300 mov.w r3, #8192 ; 0x2000 + 800519c: 9305 str r3, [sp, #20] + s_command.DataMode = QSPI_DATA_4_LINES; + 800519e: 2300 movs r3, #0 + 80051a0: e9cd 320a strd r3, r2, [sp, #40] ; 0x28 + s_command.DummyCycles = N25Q128A_DUMMY_CYCLES_READ_QUAD; + 80051a4: 220a movs r2, #10 + s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; + 80051a6: 930f str r3, [sp, #60] ; 0x3c + s_command.DummyCycles = N25Q128A_DUMMY_CYCLES_READ_QUAD; + 80051a8: 9207 str r2, [sp, #28] + if (HAL_QSPI_MemoryMapped(&QSPIHandle, &s_command, &s_mem_mapped_cfg) != HAL_OK) + 80051aa: 466a mov r2, sp + s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; + 80051ac: e9cd 330d strd r3, r3, [sp, #52] ; 0x34 + s_mem_mapped_cfg.TimeOutPeriod = 0; + 80051b0: e9cd 3300 strd r3, r3, [sp] + if (HAL_QSPI_MemoryMapped(&QSPIHandle, &s_command, &s_mem_mapped_cfg) != HAL_OK) + 80051b4: f002 faf8 bl 80077a8 +} + 80051b8: 3800 subs r0, #0 + 80051ba: bf18 it ne + 80051bc: 2001 movne r0, #1 + 80051be: b011 add sp, #68 ; 0x44 + 80051c0: f85d fb04 ldr.w pc, [sp], #4 + 80051c4: 20007b70 .word 0x20007b70 + +080051c8 : + QSPI_CLK_ENABLE(); + 80051c8: 4b45 ldr r3, [pc, #276] ; (80052e0 ) + gpio_init_structure.Speed = GPIO_SPEED_HIGH; + 80051ca: 2101 movs r1, #1 + HAL_GPIO_Init(QSPI_CS_GPIO_PORT, &gpio_init_structure); + 80051cc: 4845 ldr r0, [pc, #276] ; (80052e4 ) + QSPI_CLK_ENABLE(); + 80051ce: 6b9a ldr r2, [r3, #56] ; 0x38 + 80051d0: f042 0202 orr.w r2, r2, #2 +{ + 80051d4: b5f0 push {r4, r5, r6, r7, lr} + QSPI_CLK_ENABLE(); + 80051d6: 639a str r2, [r3, #56] ; 0x38 +{ + 80051d8: b08d sub sp, #52 ; 0x34 + QSPI_CLK_ENABLE(); + 80051da: 6b9a ldr r2, [r3, #56] ; 0x38 + gpio_init_structure.Alternate = GPIO_AF9_QUADSPI; + 80051dc: 2409 movs r4, #9 + gpio_init_structure.Pin = QSPI_CLK_PIN; + 80051de: 2704 movs r7, #4 + gpio_init_structure.Pull = GPIO_NOPULL; + 80051e0: 2600 movs r6, #0 + QSPI_CLK_ENABLE(); + 80051e2: f002 0202 and.w r2, r2, #2 + HAL_GPIO_Init(QSPI_D0_GPIO_PORT, &gpio_init_structure); + 80051e6: 4d40 ldr r5, [pc, #256] ; (80052e8 ) + QSPI_CLK_ENABLE(); + 80051e8: 9200 str r2, [sp, #0] + 80051ea: 9a00 ldr r2, [sp, #0] + QSPI_FORCE_RESET(); + 80051ec: 699a ldr r2, [r3, #24] + 80051ee: f042 0202 orr.w r2, r2, #2 + 80051f2: 619a str r2, [r3, #24] + QSPI_RELEASE_RESET(); + 80051f4: 699a ldr r2, [r3, #24] + 80051f6: f022 0202 bic.w r2, r2, #2 + 80051fa: 619a str r2, [r3, #24] + QSPI_CS_GPIO_CLK_ENABLE(); + 80051fc: 6b1a ldr r2, [r3, #48] ; 0x30 + 80051fe: f042 0202 orr.w r2, r2, #2 + 8005202: 631a str r2, [r3, #48] ; 0x30 + 8005204: 6b1a ldr r2, [r3, #48] ; 0x30 + 8005206: f002 0202 and.w r2, r2, #2 + 800520a: 9201 str r2, [sp, #4] + 800520c: 9a01 ldr r2, [sp, #4] + QSPI_CLK_GPIO_CLK_ENABLE(); + 800520e: 6b1a ldr r2, [r3, #48] ; 0x30 + 8005210: f042 0202 orr.w r2, r2, #2 + 8005214: 631a str r2, [r3, #48] ; 0x30 + 8005216: 6b1a ldr r2, [r3, #48] ; 0x30 + 8005218: f002 0202 and.w r2, r2, #2 + 800521c: 9202 str r2, [sp, #8] + 800521e: 9a02 ldr r2, [sp, #8] + QSPI_D0_GPIO_CLK_ENABLE(); + 8005220: 6b1a ldr r2, [r3, #48] ; 0x30 + 8005222: f042 0208 orr.w r2, r2, #8 + 8005226: 631a str r2, [r3, #48] ; 0x30 + 8005228: 6b1a ldr r2, [r3, #48] ; 0x30 + 800522a: f002 0208 and.w r2, r2, #8 + 800522e: 9203 str r2, [sp, #12] + 8005230: 9a03 ldr r2, [sp, #12] + QSPI_D1_GPIO_CLK_ENABLE(); + 8005232: 6b1a ldr r2, [r3, #48] ; 0x30 + 8005234: f042 0208 orr.w r2, r2, #8 + 8005238: 631a str r2, [r3, #48] ; 0x30 + 800523a: 6b1a ldr r2, [r3, #48] ; 0x30 + 800523c: f002 0208 and.w r2, r2, #8 + 8005240: 9204 str r2, [sp, #16] + 8005242: 9a04 ldr r2, [sp, #16] + QSPI_D2_GPIO_CLK_ENABLE(); + 8005244: 6b1a ldr r2, [r3, #48] ; 0x30 + 8005246: f042 0210 orr.w r2, r2, #16 + 800524a: 631a str r2, [r3, #48] ; 0x30 + 800524c: 6b1a ldr r2, [r3, #48] ; 0x30 + 800524e: f002 0210 and.w r2, r2, #16 + 8005252: 9205 str r2, [sp, #20] + 8005254: 9a05 ldr r2, [sp, #20] + QSPI_D3_GPIO_CLK_ENABLE(); + 8005256: 6b1a ldr r2, [r3, #48] ; 0x30 + 8005258: f042 0208 orr.w r2, r2, #8 + 800525c: 631a str r2, [r3, #48] ; 0x30 + gpio_init_structure.Mode = GPIO_MODE_AF_PP; + 800525e: 2240 movs r2, #64 ; 0x40 + QSPI_D3_GPIO_CLK_ENABLE(); + 8005260: 6b1b ldr r3, [r3, #48] ; 0x30 + 8005262: f003 0308 and.w r3, r3, #8 + 8005266: 9306 str r3, [sp, #24] + 8005268: 9b06 ldr r3, [sp, #24] + gpio_init_structure.Mode = GPIO_MODE_AF_PP; + 800526a: 2302 movs r3, #2 + 800526c: e9cd 2307 strd r2, r3, [sp, #28] + gpio_init_structure.Speed = GPIO_SPEED_HIGH; + 8005270: 2303 movs r3, #3 + 8005272: e9cd 1309 strd r1, r3, [sp, #36] ; 0x24 + gpio_init_structure.Alternate = GPIO_AF10_QUADSPI; + 8005276: 230a movs r3, #10 + HAL_GPIO_Init(QSPI_CS_GPIO_PORT, &gpio_init_structure); + 8005278: a907 add r1, sp, #28 + gpio_init_structure.Alternate = GPIO_AF10_QUADSPI; + 800527a: 930b str r3, [sp, #44] ; 0x2c + HAL_GPIO_Init(QSPI_CS_GPIO_PORT, &gpio_init_structure); + 800527c: f001 f9ca bl 8006614 + HAL_GPIO_Init(QSPI_CLK_GPIO_PORT, &gpio_init_structure); + 8005280: a907 add r1, sp, #28 + 8005282: 4818 ldr r0, [pc, #96] ; (80052e4 ) + gpio_init_structure.Pin = QSPI_CLK_PIN; + 8005284: 9707 str r7, [sp, #28] + gpio_init_structure.Pull = GPIO_NOPULL; + 8005286: 9609 str r6, [sp, #36] ; 0x24 + gpio_init_structure.Alternate = GPIO_AF9_QUADSPI; + 8005288: 940b str r4, [sp, #44] ; 0x2c + HAL_GPIO_Init(QSPI_CLK_GPIO_PORT, &gpio_init_structure); + 800528a: f001 f9c3 bl 8006614 + gpio_init_structure.Pin = QSPI_D0_PIN; + 800528e: f44f 6300 mov.w r3, #2048 ; 0x800 + HAL_GPIO_Init(QSPI_D0_GPIO_PORT, &gpio_init_structure); + 8005292: a907 add r1, sp, #28 + 8005294: 4628 mov r0, r5 + gpio_init_structure.Alternate = GPIO_AF9_QUADSPI; + 8005296: 940b str r4, [sp, #44] ; 0x2c + gpio_init_structure.Pin = QSPI_D0_PIN; + 8005298: 9307 str r3, [sp, #28] + HAL_GPIO_Init(QSPI_D0_GPIO_PORT, &gpio_init_structure); + 800529a: f001 f9bb bl 8006614 + gpio_init_structure.Pin = QSPI_D1_PIN; + 800529e: f44f 5380 mov.w r3, #4096 ; 0x1000 + HAL_GPIO_Init(QSPI_D1_GPIO_PORT, &gpio_init_structure); + 80052a2: a907 add r1, sp, #28 + 80052a4: 4628 mov r0, r5 + gpio_init_structure.Alternate = GPIO_AF9_QUADSPI; + 80052a6: 940b str r4, [sp, #44] ; 0x2c + gpio_init_structure.Pin = QSPI_D1_PIN; + 80052a8: 9307 str r3, [sp, #28] + HAL_GPIO_Init(QSPI_D1_GPIO_PORT, &gpio_init_structure); + 80052aa: f001 f9b3 bl 8006614 + HAL_GPIO_Init(QSPI_D2_GPIO_PORT, &gpio_init_structure); + 80052ae: a907 add r1, sp, #28 + 80052b0: 480e ldr r0, [pc, #56] ; (80052ec ) + gpio_init_structure.Pin = QSPI_D2_PIN; + 80052b2: 9707 str r7, [sp, #28] + gpio_init_structure.Alternate = GPIO_AF9_QUADSPI; + 80052b4: 940b str r4, [sp, #44] ; 0x2c + HAL_GPIO_Init(QSPI_D2_GPIO_PORT, &gpio_init_structure); + 80052b6: f001 f9ad bl 8006614 + gpio_init_structure.Pin = QSPI_D3_PIN; + 80052ba: f44f 5300 mov.w r3, #8192 ; 0x2000 + HAL_GPIO_Init(QSPI_D3_GPIO_PORT, &gpio_init_structure); + 80052be: a907 add r1, sp, #28 + 80052c0: 4628 mov r0, r5 + gpio_init_structure.Alternate = GPIO_AF9_QUADSPI; + 80052c2: 940b str r4, [sp, #44] ; 0x2c + gpio_init_structure.Pin = QSPI_D3_PIN; + 80052c4: 9307 str r3, [sp, #28] + HAL_GPIO_Init(QSPI_D3_GPIO_PORT, &gpio_init_structure); + 80052c6: f001 f9a5 bl 8006614 + HAL_NVIC_SetPriority(QUADSPI_IRQn, 0x0F, 0); + 80052ca: 4632 mov r2, r6 + 80052cc: 210f movs r1, #15 + 80052ce: 205c movs r0, #92 ; 0x5c + 80052d0: f000 f9d8 bl 8005684 + HAL_NVIC_EnableIRQ(QUADSPI_IRQn); + 80052d4: 205c movs r0, #92 ; 0x5c + 80052d6: f000 fa07 bl 80056e8 +} + 80052da: b00d add sp, #52 ; 0x34 + 80052dc: bdf0 pop {r4, r5, r6, r7, pc} + 80052de: bf00 nop + 80052e0: 40023800 .word 0x40023800 + 80052e4: 40020400 .word 0x40020400 + 80052e8: 40020c00 .word 0x40020c00 + 80052ec: 40021000 .word 0x40021000 + +080052f0 : +{ + 80052f0: b5f0 push {r4, r5, r6, r7, lr} + QSPIHandle.Instance = QUADSPI; + 80052f2: 4c49 ldr r4, [pc, #292] ; (8005418 ) +{ + 80052f4: b091 sub sp, #68 ; 0x44 + QSPIHandle.Instance = QUADSPI; + 80052f6: 4b49 ldr r3, [pc, #292] ; (800541c ) + if (HAL_QSPI_DeInit(&QSPIHandle) != HAL_OK) + 80052f8: 4620 mov r0, r4 + QSPIHandle.Instance = QUADSPI; + 80052fa: 6023 str r3, [r4, #0] + if (HAL_QSPI_DeInit(&QSPIHandle) != HAL_OK) + 80052fc: f002 f9ae bl 800765c + 8005300: 4605 mov r5, r0 + 8005302: b110 cbz r0, 800530a + return QSPI_ERROR; + 8005304: 2001 movs r0, #1 +} + 8005306: b011 add sp, #68 ; 0x44 + 8005308: bdf0 pop {r4, r5, r6, r7, pc} + BSP_QSPI_MspInit(&QSPIHandle, NULL); + 800530a: 4601 mov r1, r0 + 800530c: 4620 mov r0, r4 + 800530e: f7ff ff5b bl 80051c8 + QSPIHandle.Init.FifoThreshold = 4; + 8005312: 2601 movs r6, #1 + 8005314: 2304 movs r3, #4 + uint32_t result; + +#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) + __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) ); + 8005316: f04f 7780 mov.w r7, #16777216 ; 0x1000000 + 800531a: e9c4 6301 strd r6, r3, [r4, #4] + QSPIHandle.Init.SampleShifting = QSPI_SAMPLE_SHIFTING_HALFCYCLE; + 800531e: 2310 movs r3, #16 + 8005320: 60e3 str r3, [r4, #12] + 8005322: fa97 f3a7 rbit r3, r7 + QSPIHandle.Init.FlashSize = POSITION_VAL(N25Q128A_FLASH_SIZE) - 1; + 8005326: fab3 f383 clz r3, r3 + if (HAL_QSPI_Init(&QSPIHandle) != HAL_OK) + 800532a: 4620 mov r0, r4 + QSPIHandle.Init.FlashSize = POSITION_VAL(N25Q128A_FLASH_SIZE) - 1; + 800532c: 3b01 subs r3, #1 + 800532e: 6123 str r3, [r4, #16] + QSPIHandle.Init.ChipSelectHighTime = QSPI_CS_HIGH_TIME_6_CYCLE; /* Min 50ns for nonRead */ + 8005330: f44f 63a0 mov.w r3, #1280 ; 0x500 + QSPIHandle.Init.DualFlash = QSPI_DUALFLASH_DISABLE; + 8005334: e9c4 5507 strd r5, r5, [r4, #28] + QSPIHandle.Init.ClockMode = QSPI_CLOCK_MODE_0; + 8005338: e9c4 3505 strd r3, r5, [r4, #20] + if (HAL_QSPI_Init(&QSPIHandle) != HAL_OK) + 800533c: f002 f93a bl 80075b4 + 8005340: 2800 cmp r0, #0 + 8005342: d1df bne.n 8005304 + s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; + 8005344: f44f 7580 mov.w r5, #256 ; 0x100 + s_command.Instruction = RESET_ENABLE_CMD; + 8005348: 2366 movs r3, #102 ; 0x66 + s_command.DataMode = QSPI_DATA_NONE; + 800534a: 900b str r0, [sp, #44] ; 0x2c + if (HAL_QSPI_Command(hqspi, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) + 800534c: f241 3288 movw r2, #5000 ; 0x1388 + s_command.DummyCycles = 0; + 8005350: 9007 str r0, [sp, #28] + if (HAL_QSPI_Command(hqspi, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) + 8005352: a902 add r1, sp, #8 + s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; + 8005354: 900f str r0, [sp, #60] ; 0x3c + s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; + 8005356: 9508 str r5, [sp, #32] + s_command.Instruction = RESET_ENABLE_CMD; + 8005358: 9302 str r3, [sp, #8] + s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; + 800535a: e9cd 0009 strd r0, r0, [sp, #36] ; 0x24 + s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; + 800535e: e9cd 000d strd r0, r0, [sp, #52] ; 0x34 + if (HAL_QSPI_Command(hqspi, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) + 8005362: 4620 mov r0, r4 + 8005364: f002 f98d bl 8007682 + 8005368: b108 cbz r0, 800536e + return QSPI_NOT_SUPPORTED; + 800536a: 2004 movs r0, #4 + 800536c: e7cb b.n 8005306 + s_command.Instruction = RESET_MEMORY_CMD; + 800536e: 2399 movs r3, #153 ; 0x99 + if (HAL_QSPI_Command(hqspi, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) + 8005370: f241 3288 movw r2, #5000 ; 0x1388 + 8005374: a902 add r1, sp, #8 + 8005376: 4620 mov r0, r4 + s_command.Instruction = RESET_MEMORY_CMD; + 8005378: 9302 str r3, [sp, #8] + if (HAL_QSPI_Command(hqspi, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) + 800537a: f002 f982 bl 8007682 + 800537e: 2800 cmp r0, #0 + 8005380: d1f3 bne.n 800536a + if (QSPI_AutoPollingMemReady(hqspi, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != QSPI_OK) + 8005382: f241 3088 movw r0, #5000 ; 0x1388 + 8005386: f7ff fe97 bl 80050b8 + 800538a: 2800 cmp r0, #0 + 800538c: d1ed bne.n 800536a + s_command.Instruction = READ_VOL_CFG_REG_CMD; + 800538e: 2385 movs r3, #133 ; 0x85 + s_command.DummyCycles = 0; + 8005390: 9007 str r0, [sp, #28] + if (HAL_QSPI_Command(hqspi, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) + 8005392: f241 3288 movw r2, #5000 ; 0x1388 + 8005396: a902 add r1, sp, #8 + s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; + 8005398: 9508 str r5, [sp, #32] + s_command.Instruction = READ_VOL_CFG_REG_CMD; + 800539a: 9302 str r3, [sp, #8] + s_command.DataMode = QSPI_DATA_1_LINE; + 800539c: 970b str r7, [sp, #44] ; 0x2c + s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; + 800539e: e9cd 0009 strd r0, r0, [sp, #36] ; 0x24 + s_command.DdrMode = QSPI_DDR_MODE_DISABLE; + 80053a2: e9cd 600c strd r6, r0, [sp, #48] ; 0x30 + s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; + 80053a6: e9cd 000e strd r0, r0, [sp, #56] ; 0x38 + if (HAL_QSPI_Command(hqspi, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) + 80053aa: 4620 mov r0, r4 + 80053ac: f002 f969 bl 8007682 + 80053b0: 2800 cmp r0, #0 + 80053b2: d1da bne.n 800536a + if (HAL_QSPI_Receive(hqspi, ®, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) + 80053b4: f241 3288 movw r2, #5000 ; 0x1388 + 80053b8: f10d 0107 add.w r1, sp, #7 + 80053bc: 4620 mov r0, r4 + 80053be: f002 fad9 bl 8007974 + 80053c2: 2800 cmp r0, #0 + 80053c4: d1d1 bne.n 800536a + if (QSPI_WriteEnable(hqspi) != QSPI_OK) + 80053c6: f7ff fea1 bl 800510c + 80053ca: 2800 cmp r0, #0 + 80053cc: d1cd bne.n 800536a + s_command.Instruction = WRITE_VOL_CFG_REG_CMD; + 80053ce: 2381 movs r3, #129 ; 0x81 + 80053d0: 22f0 movs r2, #240 ; 0xf0 + 80053d2: 9302 str r3, [sp, #8] + 80053d4: fa92 f2a2 rbit r2, r2 + MODIFY_REG(reg, N25Q128A_VCR_NB_DUMMY, (N25Q128A_DUMMY_CYCLES_READ_QUAD << POSITION_VAL(N25Q128A_VCR_NB_DUMMY))); + 80053d8: 210a movs r1, #10 + 80053da: f89d 3007 ldrb.w r3, [sp, #7] + 80053de: fab2 f282 clz r2, r2 + if (HAL_QSPI_Command(hqspi, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) + 80053e2: 4620 mov r0, r4 + MODIFY_REG(reg, N25Q128A_VCR_NB_DUMMY, (N25Q128A_DUMMY_CYCLES_READ_QUAD << POSITION_VAL(N25Q128A_VCR_NB_DUMMY))); + 80053e4: f003 030f and.w r3, r3, #15 + 80053e8: fa01 f202 lsl.w r2, r1, r2 + if (HAL_QSPI_Command(hqspi, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) + 80053ec: a902 add r1, sp, #8 + MODIFY_REG(reg, N25Q128A_VCR_NB_DUMMY, (N25Q128A_DUMMY_CYCLES_READ_QUAD << POSITION_VAL(N25Q128A_VCR_NB_DUMMY))); + 80053ee: 4313 orrs r3, r2 + if (HAL_QSPI_Command(hqspi, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) + 80053f0: f241 3288 movw r2, #5000 ; 0x1388 + MODIFY_REG(reg, N25Q128A_VCR_NB_DUMMY, (N25Q128A_DUMMY_CYCLES_READ_QUAD << POSITION_VAL(N25Q128A_VCR_NB_DUMMY))); + 80053f4: f88d 3007 strb.w r3, [sp, #7] + if (HAL_QSPI_Command(hqspi, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) + 80053f8: f002 f943 bl 8007682 + 80053fc: 2800 cmp r0, #0 + 80053fe: d1b4 bne.n 800536a + if (HAL_QSPI_Transmit(hqspi, ®, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) + 8005400: f241 3288 movw r2, #5000 ; 0x1388 + 8005404: f10d 0107 add.w r1, sp, #7 + 8005408: 4620 mov r0, r4 + 800540a: f002 fa57 bl 80078bc + 800540e: 2800 cmp r0, #0 + 8005410: f43f af79 beq.w 8005306 + 8005414: e7a9 b.n 800536a + 8005416: bf00 nop + 8005418: 20007b70 .word 0x20007b70 + 800541c: a0001000 .word 0xa0001000 + +08005420 : + */ +void SystemInit(void) +{ + /* FPU settings ------------------------------------------------------------*/ +#if (__FPU_PRESENT == 1) && (__FPU_USED == 1) + SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */ + 8005420: 490f ldr r1, [pc, #60] ; (8005460 ) + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + 8005422: 2000 movs r0, #0 + SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */ + 8005424: f8d1 3088 ldr.w r3, [r1, #136] ; 0x88 + 8005428: f443 0370 orr.w r3, r3, #15728640 ; 0xf00000 + 800542c: f8c1 3088 str.w r3, [r1, #136] ; 0x88 + RCC->CR |= (uint32_t)0x00000001; + 8005430: 4b0c ldr r3, [pc, #48] ; (8005464 ) + 8005432: 681a ldr r2, [r3, #0] + 8005434: f042 0201 orr.w r2, r2, #1 + 8005438: 601a str r2, [r3, #0] + RCC->CFGR = 0x00000000; + 800543a: 6098 str r0, [r3, #8] + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + 800543c: 681a ldr r2, [r3, #0] + 800543e: f022 7284 bic.w r2, r2, #17301504 ; 0x1080000 + 8005442: f422 3280 bic.w r2, r2, #65536 ; 0x10000 + 8005446: 601a str r2, [r3, #0] + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + 8005448: 4a07 ldr r2, [pc, #28] ; (8005468 ) + 800544a: 605a str r2, [r3, #4] + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + 800544c: 681a ldr r2, [r3, #0] + 800544e: f422 2280 bic.w r2, r2, #262144 ; 0x40000 + 8005452: 601a str r2, [r3, #0] + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + 8005454: 60d8 str r0, [r3, #12] + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = RAMDTCM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ + 8005456: f04f 6300 mov.w r3, #134217728 ; 0x8000000 + 800545a: 608b str r3, [r1, #8] +#endif +} + 800545c: 4770 bx lr + 800545e: bf00 nop + 8005460: e000ed00 .word 0xe000ed00 + 8005464: 40023800 .word 0x40023800 + 8005468: 24003010 .word 0x24003010 + +0800546c : + */ +void ft5336_Reset(uint16_t DeviceAddr) +{ + /* Do nothing */ + /* No software reset sequence available in FT5336 IC */ +} + 800546c: 4770 bx lr + +0800546e : + */ +uint8_t ft5336_TS_ITStatus(uint16_t DeviceAddr) +{ + /* Always return 0 as feature not applicable to FT5336 */ + return 0; +} + 800546e: 2000 movs r0, #0 + 8005470: 4770 bx lr + ... + +08005474 : + volatile uint8_t ucReadId = 0; + 8005474: 2300 movs r3, #0 +{ + 8005476: b537 push {r0, r1, r2, r4, r5, lr} + volatile uint8_t ucReadId = 0; + 8005478: f88d 3007 strb.w r3, [sp, #7] + * @param None. + * @retval : I2C initialization status. + */ +static uint8_t ft5336_Get_I2C_InitializedStatus(void) +{ + return(ft5336_handle.i2cInitialized); + 800547c: 4b0d ldr r3, [pc, #52] ; (80054b4 ) + * @param None. + * @retval : None. + */ +static void ft5336_I2C_InitializeIfRequired(void) +{ + if(ft5336_Get_I2C_InitializedStatus() == FT5336_I2C_NOT_INITIALIZED) + 800547e: 781a ldrb r2, [r3, #0] + 8005480: b90a cbnz r2, 8005486 + { + /* Initialize TS IO BUS layer (I2C) */ + //TS_IO_Init(); + + /* Set state to initialized */ + ft5336_handle.i2cInitialized = FT5336_I2C_INITIALIZED; + 8005482: 2201 movs r2, #1 + 8005484: 701a strb r2, [r3, #0] +{ + 8005486: 2403 movs r4, #3 + ucReadId = TS_IO_Read(DeviceAddr, FT5336_CHIP_ID_REG); + 8005488: b2c5 uxtb r5, r0 + for(nbReadAttempts = 0; ((nbReadAttempts < 3) && !(bFoundDevice)); nbReadAttempts++) + 800548a: 3c01 subs r4, #1 + ucReadId = TS_IO_Read(DeviceAddr, FT5336_CHIP_ID_REG); + 800548c: 21a8 movs r1, #168 ; 0xa8 + 800548e: 4628 mov r0, r5 + 8005490: f7fd f8ca bl 8002628 + for(nbReadAttempts = 0; ((nbReadAttempts < 3) && !(bFoundDevice)); nbReadAttempts++) + 8005494: f014 04ff ands.w r4, r4, #255 ; 0xff + ucReadId = TS_IO_Read(DeviceAddr, FT5336_CHIP_ID_REG); + 8005498: f88d 0007 strb.w r0, [sp, #7] + if(ucReadId == FT5336_ID_VALUE) + 800549c: f89d 3007 ldrb.w r3, [sp, #7] + 80054a0: b2db uxtb r3, r3 + for(nbReadAttempts = 0; ((nbReadAttempts < 3) && !(bFoundDevice)); nbReadAttempts++) + 80054a2: d103 bne.n 80054ac + return (ucReadId); + 80054a4: f89d 0007 ldrb.w r0, [sp, #7] +} + 80054a8: b003 add sp, #12 + 80054aa: bd30 pop {r4, r5, pc} + for(nbReadAttempts = 0; ((nbReadAttempts < 3) && !(bFoundDevice)); nbReadAttempts++) + 80054ac: 2b51 cmp r3, #81 ; 0x51 + 80054ae: d1ec bne.n 800548a + 80054b0: e7f8 b.n 80054a4 + 80054b2: bf00 nop + 80054b4: 20007bbe .word 0x20007bbe + +080054b8 : +{ + 80054b8: b513 push {r0, r1, r4, lr} + volatile uint8_t nbTouch = 0; + 80054ba: 2400 movs r4, #0 + nbTouch = TS_IO_Read(DeviceAddr, FT5336_TD_STAT_REG); + 80054bc: 2102 movs r1, #2 + 80054be: b2c0 uxtb r0, r0 + volatile uint8_t nbTouch = 0; + 80054c0: f88d 4007 strb.w r4, [sp, #7] + nbTouch = TS_IO_Read(DeviceAddr, FT5336_TD_STAT_REG); + 80054c4: f7fd f8b0 bl 8002628 + 80054c8: f88d 0007 strb.w r0, [sp, #7] + nbTouch &= FT5336_TD_STAT_MASK; + 80054cc: f89d 3007 ldrb.w r3, [sp, #7] + 80054d0: f003 030f and.w r3, r3, #15 + 80054d4: f88d 3007 strb.w r3, [sp, #7] + if(nbTouch > FT5336_MAX_DETECTABLE_TOUCH) + 80054d8: f89d 3007 ldrb.w r3, [sp, #7] + 80054dc: 2b05 cmp r3, #5 + 80054de: d901 bls.n 80054e4 + nbTouch = 0; + 80054e0: f88d 4007 strb.w r4, [sp, #7] + ft5336_handle.currActiveTouchNb = nbTouch; + 80054e4: f89d 2007 ldrb.w r2, [sp, #7] + 80054e8: 4b03 ldr r3, [pc, #12] ; (80054f8 ) + return(nbTouch); + 80054ea: f89d 0007 ldrb.w r0, [sp, #7] + ft5336_handle.currActiveTouchNb = nbTouch; + 80054ee: 705a strb r2, [r3, #1] + ft5336_handle.currActiveTouchIdx = 0; + 80054f0: 2200 movs r2, #0 + 80054f2: 709a strb r2, [r3, #2] +} + 80054f4: b002 add sp, #8 + 80054f6: bd10 pop {r4, pc} + 80054f8: 20007bbe .word 0x20007bbe + +080054fc : +{ + 80054fc: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} + if(ft5336_handle.currActiveTouchIdx < ft5336_handle.currActiveTouchNb) + 8005500: 4c2f ldr r4, [pc, #188] ; (80055c0 ) +{ + 8005502: 4615 mov r5, r2 + volatile uint8_t ucReadData = 0; + 8005504: f04f 0800 mov.w r8, #0 +{ + 8005508: 460f mov r7, r1 + if(ft5336_handle.currActiveTouchIdx < ft5336_handle.currActiveTouchNb) + 800550a: 78a3 ldrb r3, [r4, #2] + 800550c: 7862 ldrb r2, [r4, #1] + volatile uint8_t ucReadData = 0; + 800550e: f88d 8007 strb.w r8, [sp, #7] + if(ft5336_handle.currActiveTouchIdx < ft5336_handle.currActiveTouchNb) + 8005512: 429a cmp r2, r3 + 8005514: d94d bls.n 80055b2 + switch(ft5336_handle.currActiveTouchIdx) + 8005516: 2b09 cmp r3, #9 + 8005518: d84e bhi.n 80055b8 + 800551a: eb03 0343 add.w r3, r3, r3, lsl #1 + 800551e: 005b lsls r3, r3, #1 + 8005520: b2db uxtb r3, r3 + 8005522: 1d19 adds r1, r3, #4 + 8005524: f103 0b03 add.w fp, r3, #3 + 8005528: f103 0a06 add.w sl, r3, #6 + 800552c: 3305 adds r3, #5 + 800552e: b2c9 uxtb r1, r1 + 8005530: fa5f fb8b uxtb.w fp, fp + 8005534: fa5f fa8a uxtb.w sl, sl + 8005538: fa5f f883 uxtb.w r8, r3 + ucReadData = TS_IO_Read(DeviceAddr, regAddressXLow); + 800553c: b2c6 uxtb r6, r0 + coord = (ucReadData & FT5336_TOUCH_POS_LSB_MASK) >> FT5336_TOUCH_POS_LSB_SHIFT; + 800553e: f8df 9084 ldr.w r9, [pc, #132] ; 80055c4 + ucReadData = TS_IO_Read(DeviceAddr, regAddressXLow); + 8005542: 4630 mov r0, r6 + 8005544: f7fd f870 bl 8002628 + 8005548: f88d 0007 strb.w r0, [sp, #7] + coord = (ucReadData & FT5336_TOUCH_POS_LSB_MASK) >> FT5336_TOUCH_POS_LSB_SHIFT; + 800554c: f89d 3007 ldrb.w r3, [sp, #7] + ucReadData = TS_IO_Read(DeviceAddr, regAddressXHigh); + 8005550: 4659 mov r1, fp + 8005552: 4630 mov r0, r6 + coord = (ucReadData & FT5336_TOUCH_POS_LSB_MASK) >> FT5336_TOUCH_POS_LSB_SHIFT; + 8005554: f8a9 3000 strh.w r3, [r9] + ucReadData = TS_IO_Read(DeviceAddr, regAddressXHigh); + 8005558: f7fd f866 bl 8002628 + 800555c: f88d 0007 strb.w r0, [sp, #7] + ucReadData = TS_IO_Read(DeviceAddr, regAddressYLow); + 8005560: 4651 mov r1, sl + coord |= ((ucReadData & FT5336_TOUCH_POS_MSB_MASK) >> FT5336_TOUCH_POS_MSB_SHIFT) << 8; + 8005562: f89d 3007 ldrb.w r3, [sp, #7] + ucReadData = TS_IO_Read(DeviceAddr, regAddressYLow); + 8005566: 4630 mov r0, r6 + coord |= ((ucReadData & FT5336_TOUCH_POS_MSB_MASK) >> FT5336_TOUCH_POS_MSB_SHIFT) << 8; + 8005568: f8b9 2000 ldrh.w r2, [r9] + 800556c: 021b lsls r3, r3, #8 + 800556e: f403 6370 and.w r3, r3, #3840 ; 0xf00 + 8005572: 4313 orrs r3, r2 + *X = coord; + 8005574: 803b strh r3, [r7, #0] + coord |= ((ucReadData & FT5336_TOUCH_POS_MSB_MASK) >> FT5336_TOUCH_POS_MSB_SHIFT) << 8; + 8005576: f8a9 3000 strh.w r3, [r9] + ucReadData = TS_IO_Read(DeviceAddr, regAddressYLow); + 800557a: f7fd f855 bl 8002628 + 800557e: f88d 0007 strb.w r0, [sp, #7] + ucReadData = TS_IO_Read(DeviceAddr, regAddressYHigh); + 8005582: 4641 mov r1, r8 + coord = (ucReadData & FT5336_TOUCH_POS_LSB_MASK) >> FT5336_TOUCH_POS_LSB_SHIFT; + 8005584: f89d 3007 ldrb.w r3, [sp, #7] + ucReadData = TS_IO_Read(DeviceAddr, regAddressYHigh); + 8005588: 4630 mov r0, r6 + coord = (ucReadData & FT5336_TOUCH_POS_LSB_MASK) >> FT5336_TOUCH_POS_LSB_SHIFT; + 800558a: f8a9 3000 strh.w r3, [r9] + ucReadData = TS_IO_Read(DeviceAddr, regAddressYHigh); + 800558e: f7fd f84b bl 8002628 + 8005592: f88d 0007 strb.w r0, [sp, #7] + coord |= ((ucReadData & FT5336_TOUCH_POS_MSB_MASK) >> FT5336_TOUCH_POS_MSB_SHIFT) << 8; + 8005596: f89d 3007 ldrb.w r3, [sp, #7] + 800559a: f8b9 2000 ldrh.w r2, [r9] + 800559e: 021b lsls r3, r3, #8 + 80055a0: f403 6370 and.w r3, r3, #3840 ; 0xf00 + 80055a4: 4313 orrs r3, r2 + 80055a6: f8a9 3000 strh.w r3, [r9] + *Y = coord; + 80055aa: 802b strh r3, [r5, #0] + ft5336_handle.currActiveTouchIdx++; /* next call will work on next touch */ + 80055ac: 78a3 ldrb r3, [r4, #2] + 80055ae: 3301 adds r3, #1 + 80055b0: 70a3 strb r3, [r4, #2] +} + 80055b2: b003 add sp, #12 + 80055b4: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + if(ft5336_handle.currActiveTouchIdx < ft5336_handle.currActiveTouchNb) + 80055b8: 46c2 mov sl, r8 + 80055ba: 46c3 mov fp, r8 + 80055bc: 4641 mov r1, r8 + 80055be: e7bd b.n 800553c + 80055c0: 20007bbe .word 0x20007bbe + 80055c4: 20007bbc .word 0x20007bbc + +080055c8 : + TS_IO_Write(DeviceAddr, FT5336_GMODE_REG, regValue); + 80055c8: 2201 movs r2, #1 + 80055ca: 21a4 movs r1, #164 ; 0xa4 + 80055cc: b2c0 uxtb r0, r0 + 80055ce: f7fd b811 b.w 80025f4 + +080055d2 : + TS_IO_Write(DeviceAddr, FT5336_GMODE_REG, regValue); + 80055d2: 2200 movs r2, #0 + 80055d4: 21a4 movs r1, #164 ; 0xa4 + 80055d6: b2c0 uxtb r0, r0 + 80055d8: f7fd b80c b.w 80025f4 + +080055dc : + ft5336_TS_DisableIT(DeviceAddr); + 80055dc: f7ff bff9 b.w 80055d2 + +080055e0 : + 80055e0: 4770 bx lr + ... + +080055e4 : + return(ft5336_handle.i2cInitialized); + 80055e4: 4b02 ldr r3, [pc, #8] ; (80055f0 ) + if(ft5336_Get_I2C_InitializedStatus() == FT5336_I2C_NOT_INITIALIZED) + 80055e6: 781a ldrb r2, [r3, #0] + 80055e8: b90a cbnz r2, 80055ee + ft5336_handle.i2cInitialized = FT5336_I2C_INITIALIZED; + 80055ea: 2201 movs r2, #1 + 80055ec: 701a strb r2, [r3, #0] +} + 80055ee: 4770 bx lr + 80055f0: 20007bbe .word 0x20007bbe + +080055f4 : + __HAL_FLASH_ART_ENABLE(); +#endif /* ART_ACCELERATOR_ENABLE */ + + /* Configure Flash prefetch */ +#if (PREFETCH_ENABLE != 0U) + __HAL_FLASH_PREFETCH_BUFFER_ENABLE(); + 80055f4: 4a07 ldr r2, [pc, #28] ; (8005614 ) +#endif /* PREFETCH_ENABLE */ + + /* Set Interrupt Group Priority */ + HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4); + 80055f6: 2003 movs r0, #3 +{ + 80055f8: b508 push {r3, lr} + __HAL_FLASH_PREFETCH_BUFFER_ENABLE(); + 80055fa: 6813 ldr r3, [r2, #0] + 80055fc: f443 7380 orr.w r3, r3, #256 ; 0x100 + 8005600: 6013 str r3, [r2, #0] + HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4); + 8005602: f000 f82d bl 8005660 + + /* Use systick as time base source and configure 1ms tick (default clock after Reset is HSI) */ + HAL_InitTick(TICK_INT_PRIORITY); + 8005606: 2000 movs r0, #0 + 8005608: f7fc fb76 bl 8001cf8 + + /* Init the low level hardware */ + HAL_MspInit(); + 800560c: f7fc f828 bl 8001660 + + /* Return function status */ + return HAL_OK; +} + 8005610: 2000 movs r0, #0 + 8005612: bd08 pop {r3, pc} + 8005614: 40023c00 .word 0x40023c00 + +08005618 : + * implementations in user file. + * @retval None + */ +__weak void HAL_IncTick(void) +{ + uwTick += uwTickFreq; + 8005618: 4a03 ldr r2, [pc, #12] ; (8005628 ) + 800561a: 4b04 ldr r3, [pc, #16] ; (800562c ) + 800561c: 6811 ldr r1, [r2, #0] + 800561e: 781b ldrb r3, [r3, #0] + 8005620: 440b add r3, r1 + 8005622: 6013 str r3, [r2, #0] +} + 8005624: 4770 bx lr + 8005626: bf00 nop + 8005628: 20007bc4 .word 0x20007bc4 + 800562c: 2000004c .word 0x2000004c + +08005630 : + * implementations in user file. + * @retval tick value + */ +__weak uint32_t HAL_GetTick(void) +{ + return uwTick; + 8005630: 4b01 ldr r3, [pc, #4] ; (8005638 ) + 8005632: 6818 ldr r0, [r3, #0] +} + 8005634: 4770 bx lr + 8005636: bf00 nop + 8005638: 20007bc4 .word 0x20007bc4 + +0800563c : + * implementations in user file. + * @param Delay specifies the delay time length, in milliseconds. + * @retval None + */ +__weak void HAL_Delay(uint32_t Delay) +{ + 800563c: b538 push {r3, r4, r5, lr} + 800563e: 4604 mov r4, r0 + uint32_t tickstart = HAL_GetTick(); + 8005640: f7ff fff6 bl 8005630 + 8005644: 4605 mov r5, r0 + uint32_t wait = Delay; + + /* Add a freq to guarantee minimum wait */ + if (wait < HAL_MAX_DELAY) + 8005646: 1c63 adds r3, r4, #1 + { + wait += (uint32_t)(uwTickFreq); + 8005648: bf1e ittt ne + 800564a: 4b04 ldrne r3, [pc, #16] ; (800565c ) + 800564c: 781b ldrbne r3, [r3, #0] + 800564e: 18e4 addne r4, r4, r3 + } + + while ((HAL_GetTick() - tickstart) < wait) + 8005650: f7ff ffee bl 8005630 + 8005654: 1b43 subs r3, r0, r5 + 8005656: 42a3 cmp r3, r4 + 8005658: d3fa bcc.n 8005650 + { + } +} + 800565a: bd38 pop {r3, r4, r5, pc} + 800565c: 2000004c .word 0x2000004c + +08005660 : + reg_value = SCB->AIRCR; /* read old register configuration */ + 8005660: 4907 ldr r1, [pc, #28] ; (8005680 ) + (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */ + 8005662: 0203 lsls r3, r0, #8 + reg_value = SCB->AIRCR; /* read old register configuration */ + 8005664: 68ca ldr r2, [r1, #12] + (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */ + 8005666: f403 63e0 and.w r3, r3, #1792 ; 0x700 + reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ + 800566a: f422 62e0 bic.w r2, r2, #1792 ; 0x700 + 800566e: 0412 lsls r2, r2, #16 + 8005670: 0c12 lsrs r2, r2, #16 + ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + 8005672: 4313 orrs r3, r2 + reg_value = (reg_value | + 8005674: f043 63bf orr.w r3, r3, #100139008 ; 0x5f80000 + 8005678: f443 3300 orr.w r3, r3, #131072 ; 0x20000 + SCB->AIRCR = reg_value; + 800567c: 60cb str r3, [r1, #12] + /* Check the parameters */ + assert_param(IS_NVIC_PRIORITY_GROUP(PriorityGroup)); + + /* Set the PRIGROUP[10:8] bits according to the PriorityGroup parameter value */ + NVIC_SetPriorityGrouping(PriorityGroup); +} + 800567e: 4770 bx lr + 8005680: e000ed00 .word 0xe000ed00 + +08005684 : + return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); + 8005684: 4b16 ldr r3, [pc, #88] ; (80056e0 ) + * This parameter can be a value between 0 and 15 + * A lower priority value indicates a higher priority. + * @retval None + */ +void HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority) +{ + 8005686: b530 push {r4, r5, lr} + 8005688: 68dc ldr r4, [r3, #12] + 800568a: f3c4 2402 ubfx r4, r4, #8, #3 + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + 800568e: f1c4 0307 rsb r3, r4, #7 + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + 8005692: 1d25 adds r5, r4, #4 + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + 8005694: 2b04 cmp r3, #4 + 8005696: bf28 it cs + 8005698: 2304 movcs r3, #4 + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + 800569a: 2d06 cmp r5, #6 + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + 800569c: f04f 35ff mov.w r5, #4294967295 + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + 80056a0: bf8c ite hi + 80056a2: 3c03 subhi r4, #3 + 80056a4: 2400 movls r4, #0 + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + 80056a6: fa05 f303 lsl.w r3, r5, r3 + if ((int32_t)(IRQn) >= 0) + 80056aa: 2800 cmp r0, #0 + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + 80056ac: fa05 f504 lsl.w r5, r5, r4 + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + 80056b0: ea21 0303 bic.w r3, r1, r3 + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + 80056b4: ea22 0205 bic.w r2, r2, r5 + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + 80056b8: fa03 f304 lsl.w r3, r3, r4 + 80056bc: ea43 0302 orr.w r3, r3, r2 + NVIC->IP[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + 80056c0: ea4f 1303 mov.w r3, r3, lsl #4 + 80056c4: b2db uxtb r3, r3 + if ((int32_t)(IRQn) >= 0) + 80056c6: db06 blt.n 80056d6 + NVIC->IP[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + 80056c8: f100 4060 add.w r0, r0, #3758096384 ; 0xe0000000 + 80056cc: f500 4061 add.w r0, r0, #57600 ; 0xe100 + 80056d0: f880 3300 strb.w r3, [r0, #768] ; 0x300 + assert_param(IS_NVIC_PREEMPTION_PRIORITY(PreemptPriority)); + + prioritygroup = NVIC_GetPriorityGrouping(); + + NVIC_SetPriority(IRQn, NVIC_EncodePriority(prioritygroup, PreemptPriority, SubPriority)); +} + 80056d4: bd30 pop {r4, r5, pc} + SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + 80056d6: f000 000f and.w r0, r0, #15 + 80056da: 4a02 ldr r2, [pc, #8] ; (80056e4 ) + 80056dc: 5413 strb r3, [r2, r0] + 80056de: e7f9 b.n 80056d4 + 80056e0: e000ed00 .word 0xe000ed00 + 80056e4: e000ed14 .word 0xe000ed14 + +080056e8 : + if ((int32_t)(IRQn) >= 0) + 80056e8: 2800 cmp r0, #0 + 80056ea: db07 blt.n 80056fc + NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + 80056ec: 0941 lsrs r1, r0, #5 + 80056ee: 2301 movs r3, #1 + 80056f0: f000 001f and.w r0, r0, #31 + 80056f4: 4a02 ldr r2, [pc, #8] ; (8005700 ) + 80056f6: 4083 lsls r3, r0 + 80056f8: f842 3021 str.w r3, [r2, r1, lsl #2] + /* Check the parameters */ + assert_param(IS_NVIC_DEVICE_IRQ(IRQn)); + + /* Enable interrupt */ + NVIC_EnableIRQ(IRQn); +} + 80056fc: 4770 bx lr + 80056fe: bf00 nop + 8005700: e000e100 .word 0xe000e100 + +08005704 : + if ((int32_t)(IRQn) >= 0) + 8005704: 2800 cmp r0, #0 + 8005706: db0c blt.n 8005722 + NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + 8005708: 0943 lsrs r3, r0, #5 + 800570a: 2201 movs r2, #1 + 800570c: f000 001f and.w r0, r0, #31 + 8005710: 4904 ldr r1, [pc, #16] ; (8005724 ) + 8005712: 3320 adds r3, #32 + 8005714: 4082 lsls r2, r0 + 8005716: f841 2023 str.w r2, [r1, r3, lsl #2] + __ASM volatile ("dsb 0xF":::"memory"); + 800571a: f3bf 8f4f dsb sy + __ASM volatile ("isb 0xF":::"memory"); + 800571e: f3bf 8f6f isb sy + /* Check the parameters */ + assert_param(IS_NVIC_DEVICE_IRQ(IRQn)); + + /* Disable interrupt */ + NVIC_DisableIRQ(IRQn); +} + 8005722: 4770 bx lr + 8005724: e000e100 .word 0xe000e100 + +08005728 : + __ASM volatile ("dmb 0xF":::"memory"); + 8005728: f3bf 8f5f dmb sy +{ + /* Make sure outstanding transfers are done */ + __DMB(); + + /* Disable fault exceptions */ + SCB->SHCSR &= ~SCB_SHCSR_MEMFAULTENA_Msk; + 800572c: 4b04 ldr r3, [pc, #16] ; (8005740 ) + 800572e: 6a5a ldr r2, [r3, #36] ; 0x24 + 8005730: f422 3280 bic.w r2, r2, #65536 ; 0x10000 + 8005734: 625a str r2, [r3, #36] ; 0x24 + + /* Disable the MPU and clear the control register*/ + MPU->CTRL = 0; + 8005736: 2200 movs r2, #0 + 8005738: f8c3 2094 str.w r2, [r3, #148] ; 0x94 +} + 800573c: 4770 bx lr + 800573e: bf00 nop + 8005740: e000ed00 .word 0xe000ed00 + +08005744 : + * @retval None + */ +void HAL_MPU_Enable(uint32_t MPU_Control) +{ + /* Enable the MPU */ + MPU->CTRL = MPU_Control | MPU_CTRL_ENABLE_Msk; + 8005744: 4b06 ldr r3, [pc, #24] ; (8005760 ) + 8005746: f040 0001 orr.w r0, r0, #1 + 800574a: f8c3 0094 str.w r0, [r3, #148] ; 0x94 + + /* Enable fault exceptions */ + SCB->SHCSR |= SCB_SHCSR_MEMFAULTENA_Msk; + 800574e: 6a5a ldr r2, [r3, #36] ; 0x24 + 8005750: f442 3280 orr.w r2, r2, #65536 ; 0x10000 + 8005754: 625a str r2, [r3, #36] ; 0x24 + __ASM volatile ("dsb 0xF":::"memory"); + 8005756: f3bf 8f4f dsb sy + __ASM volatile ("isb 0xF":::"memory"); + 800575a: f3bf 8f6f isb sy + + /* Ensure MPU setting take effects */ + __DSB(); + __ISB(); +} + 800575e: 4770 bx lr + 8005760: e000ed00 .word 0xe000ed00 + +08005764 : + /* Check the parameters */ + assert_param(IS_MPU_REGION_NUMBER(MPU_Init->Number)); + assert_param(IS_MPU_REGION_ENABLE(MPU_Init->Enable)); + + /* Set the Region number */ + MPU->RNR = MPU_Init->Number; + 8005764: 7843 ldrb r3, [r0, #1] + 8005766: 4a14 ldr r2, [pc, #80] ; (80057b8 ) +{ + 8005768: b510 push {r4, lr} + MPU->RNR = MPU_Init->Number; + 800576a: f8c2 3098 str.w r3, [r2, #152] ; 0x98 + + if ((MPU_Init->Enable) != RESET) + 800576e: 7801 ldrb r1, [r0, #0] + 8005770: b1e9 cbz r1, 80057ae + assert_param(IS_MPU_ACCESS_CACHEABLE(MPU_Init->IsCacheable)); + assert_param(IS_MPU_ACCESS_BUFFERABLE(MPU_Init->IsBufferable)); + assert_param(IS_MPU_SUB_REGION_DISABLE(MPU_Init->SubRegionDisable)); + assert_param(IS_MPU_REGION_SIZE(MPU_Init->Size)); + + MPU->RBAR = MPU_Init->BaseAddress; + 8005772: 6843 ldr r3, [r0, #4] + 8005774: f8c2 309c str.w r3, [r2, #156] ; 0x9c + MPU->RASR = ((uint32_t)MPU_Init->DisableExec << MPU_RASR_XN_Pos) | + ((uint32_t)MPU_Init->AccessPermission << MPU_RASR_AP_Pos) | + 8005778: 7ac3 ldrb r3, [r0, #11] + MPU->RASR = ((uint32_t)MPU_Init->DisableExec << MPU_RASR_XN_Pos) | + 800577a: 7b04 ldrb r4, [r0, #12] + ((uint32_t)MPU_Init->AccessPermission << MPU_RASR_AP_Pos) | + 800577c: 061b lsls r3, r3, #24 + MPU->RASR = ((uint32_t)MPU_Init->DisableExec << MPU_RASR_XN_Pos) | + 800577e: ea43 7304 orr.w r3, r3, r4, lsl #28 + ((uint32_t)MPU_Init->TypeExtField << MPU_RASR_TEX_Pos) | + ((uint32_t)MPU_Init->IsShareable << MPU_RASR_S_Pos) | + ((uint32_t)MPU_Init->IsCacheable << MPU_RASR_C_Pos) | + ((uint32_t)MPU_Init->IsBufferable << MPU_RASR_B_Pos) | + ((uint32_t)MPU_Init->SubRegionDisable << MPU_RASR_SRD_Pos) | + ((uint32_t)MPU_Init->Size << MPU_RASR_SIZE_Pos) | + 8005782: 430b orrs r3, r1 + ((uint32_t)MPU_Init->TypeExtField << MPU_RASR_TEX_Pos) | + 8005784: 7a81 ldrb r1, [r0, #10] + ((uint32_t)MPU_Init->Size << MPU_RASR_SIZE_Pos) | + 8005786: ea43 43c1 orr.w r3, r3, r1, lsl #19 + ((uint32_t)MPU_Init->IsShareable << MPU_RASR_S_Pos) | + 800578a: 7b41 ldrb r1, [r0, #13] + ((uint32_t)MPU_Init->Size << MPU_RASR_SIZE_Pos) | + 800578c: ea43 4381 orr.w r3, r3, r1, lsl #18 + ((uint32_t)MPU_Init->IsCacheable << MPU_RASR_C_Pos) | + 8005790: 7b81 ldrb r1, [r0, #14] + ((uint32_t)MPU_Init->Size << MPU_RASR_SIZE_Pos) | + 8005792: ea43 4341 orr.w r3, r3, r1, lsl #17 + ((uint32_t)MPU_Init->IsBufferable << MPU_RASR_B_Pos) | + 8005796: 7bc1 ldrb r1, [r0, #15] + ((uint32_t)MPU_Init->Size << MPU_RASR_SIZE_Pos) | + 8005798: ea43 4301 orr.w r3, r3, r1, lsl #16 + ((uint32_t)MPU_Init->SubRegionDisable << MPU_RASR_SRD_Pos) | + 800579c: 7a41 ldrb r1, [r0, #9] + ((uint32_t)MPU_Init->Size << MPU_RASR_SIZE_Pos) | + 800579e: ea43 2301 orr.w r3, r3, r1, lsl #8 + 80057a2: 7a01 ldrb r1, [r0, #8] + 80057a4: ea43 0341 orr.w r3, r3, r1, lsl #1 + MPU->RASR = ((uint32_t)MPU_Init->DisableExec << MPU_RASR_XN_Pos) | + 80057a8: f8c2 30a0 str.w r3, [r2, #160] ; 0xa0 + else + { + MPU->RBAR = 0x00; + MPU->RASR = 0x00; + } +} + 80057ac: bd10 pop {r4, pc} + MPU->RBAR = 0x00; + 80057ae: f8c2 109c str.w r1, [r2, #156] ; 0x9c + MPU->RASR = 0x00; + 80057b2: f8c2 10a0 str.w r1, [r2, #160] ; 0xa0 +} + 80057b6: e7f9 b.n 80057ac + 80057b8: e000ed00 .word 0xe000ed00 + +080057bc : + * parameters in the CRC_InitTypeDef and create the associated handle. + * @param hcrc CRC handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_CRC_Init(CRC_HandleTypeDef *hcrc) +{ + 80057bc: b510 push {r4, lr} + /* Check the CRC handle allocation */ + if (hcrc == NULL) + 80057be: 4604 mov r4, r0 + 80057c0: b908 cbnz r0, 80057c6 + { + return HAL_ERROR; + 80057c2: 2001 movs r0, #1 + /* Change CRC peripheral state */ + hcrc->State = HAL_CRC_STATE_READY; + + /* Return function status */ + return HAL_OK; +} + 80057c4: bd10 pop {r4, pc} + if (hcrc->State == HAL_CRC_STATE_RESET) + 80057c6: 7f43 ldrb r3, [r0, #29] + 80057c8: f003 02ff and.w r2, r3, #255 ; 0xff + 80057cc: b913 cbnz r3, 80057d4 + hcrc->Lock = HAL_UNLOCKED; + 80057ce: 7702 strb r2, [r0, #28] + HAL_CRC_MspInit(hcrc); + 80057d0: f7fb ff64 bl 800169c + hcrc->State = HAL_CRC_STATE_BUSY; + 80057d4: 2302 movs r3, #2 + 80057d6: 7763 strb r3, [r4, #29] + if (hcrc->Init.DefaultPolynomialUse == DEFAULT_POLYNOMIAL_ENABLE) + 80057d8: 7923 ldrb r3, [r4, #4] + 80057da: b9e3 cbnz r3, 8005816 + WRITE_REG(hcrc->Instance->POL, DEFAULT_CRC32_POLY); + 80057dc: 6823 ldr r3, [r4, #0] + 80057de: 4a13 ldr r2, [pc, #76] ; (800582c ) + 80057e0: 615a str r2, [r3, #20] + MODIFY_REG(hcrc->Instance->CR, CRC_CR_POLYSIZE, CRC_POLYLENGTH_32B); + 80057e2: 689a ldr r2, [r3, #8] + 80057e4: f022 0218 bic.w r2, r2, #24 + 80057e8: 609a str r2, [r3, #8] + if (hcrc->Init.DefaultInitValueUse == DEFAULT_INIT_VALUE_ENABLE) + 80057ea: 7962 ldrb r2, [r4, #5] + WRITE_REG(hcrc->Instance->INIT, DEFAULT_CRC_INITVALUE); + 80057ec: 6823 ldr r3, [r4, #0] + if (hcrc->Init.DefaultInitValueUse == DEFAULT_INIT_VALUE_ENABLE) + 80057ee: b9d2 cbnz r2, 8005826 + WRITE_REG(hcrc->Instance->INIT, DEFAULT_CRC_INITVALUE); + 80057f0: f04f 32ff mov.w r2, #4294967295 + WRITE_REG(hcrc->Instance->INIT, hcrc->Init.InitValue); + 80057f4: 611a str r2, [r3, #16] + return HAL_OK; + 80057f6: 2000 movs r0, #0 + MODIFY_REG(hcrc->Instance->CR, CRC_CR_REV_IN, hcrc->Init.InputDataInversionMode); + 80057f8: 689a ldr r2, [r3, #8] + 80057fa: 6961 ldr r1, [r4, #20] + 80057fc: f022 0260 bic.w r2, r2, #96 ; 0x60 + 8005800: 430a orrs r2, r1 + MODIFY_REG(hcrc->Instance->CR, CRC_CR_REV_OUT, hcrc->Init.OutputDataInversionMode); + 8005802: 69a1 ldr r1, [r4, #24] + MODIFY_REG(hcrc->Instance->CR, CRC_CR_REV_IN, hcrc->Init.InputDataInversionMode); + 8005804: 609a str r2, [r3, #8] + MODIFY_REG(hcrc->Instance->CR, CRC_CR_REV_OUT, hcrc->Init.OutputDataInversionMode); + 8005806: 689a ldr r2, [r3, #8] + 8005808: f022 0280 bic.w r2, r2, #128 ; 0x80 + 800580c: 430a orrs r2, r1 + 800580e: 609a str r2, [r3, #8] + hcrc->State = HAL_CRC_STATE_READY; + 8005810: 2301 movs r3, #1 + 8005812: 7763 strb r3, [r4, #29] + return HAL_OK; + 8005814: e7d6 b.n 80057c4 + if (HAL_CRCEx_Polynomial_Set(hcrc, hcrc->Init.GeneratingPolynomial, hcrc->Init.CRCLength) != HAL_OK) + 8005816: e9d4 1202 ldrd r1, r2, [r4, #8] + 800581a: 4620 mov r0, r4 + 800581c: f000 f808 bl 8005830 + 8005820: 2800 cmp r0, #0 + 8005822: d0e2 beq.n 80057ea + 8005824: e7cd b.n 80057c2 + WRITE_REG(hcrc->Instance->INIT, hcrc->Init.InitValue); + 8005826: 6922 ldr r2, [r4, #16] + 8005828: e7e4 b.n 80057f4 + 800582a: bf00 nop + 800582c: 04c11db7 .word 0x04c11db7 + +08005830 : + * @retval HAL status + */ +HAL_StatusTypeDef HAL_CRCEx_Polynomial_Set(CRC_HandleTypeDef *hcrc, uint32_t Pol, uint32_t PolyLength) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t msb = 31U; /* polynomial degree is 32 at most, so msb is initialized to max value */ + 8005830: 231f movs r3, #31 +{ + 8005832: b510 push {r4, lr} + * definition. HAL_ERROR is reported if Pol degree is + * larger than that indicated by PolyLength. + * Look for MSB position: msb will contain the degree of + * the second to the largest polynomial member. E.g., for + * X^7 + X^6 + X^5 + X^2 + 1, msb = 6. */ + while ((msb-- > 0U) && ((Pol & ((uint32_t)(0x1U) << (msb & 0x1FU))) == 0U)) + 8005834: 3b01 subs r3, #1 + 8005836: d31c bcc.n 8005872 + 8005838: fa21 f403 lsr.w r4, r1, r3 + 800583c: 07e4 lsls r4, r4, #31 + 800583e: d5f9 bpl.n 8005834 + { + } + + switch (PolyLength) + 8005840: 2a10 cmp r2, #16 + 8005842: d012 beq.n 800586a + 8005844: d804 bhi.n 8005850 + 8005846: b13a cbz r2, 8005858 + 8005848: 2a08 cmp r2, #8 + 800584a: d010 beq.n 800586e + } + break; + case CRC_POLYLENGTH_8B: + if (msb >= HAL_CRC_LENGTH_8B) + { + status = HAL_ERROR; + 800584c: 2001 movs r0, #1 + + /* set generating polynomial size */ + MODIFY_REG(hcrc->Instance->CR, CRC_CR_POLYSIZE, PolyLength); + } + /* Return function status */ + return status; + 800584e: e00b b.n 8005868 + switch (PolyLength) + 8005850: 2a18 cmp r2, #24 + 8005852: d1fb bne.n 800584c + if (msb >= HAL_CRC_LENGTH_7B) + 8005854: 2b06 cmp r3, #6 + if (msb >= HAL_CRC_LENGTH_16B) + 8005856: d8f9 bhi.n 800584c + WRITE_REG(hcrc->Instance->POL, Pol); + 8005858: 6800 ldr r0, [r0, #0] + 800585a: 6141 str r1, [r0, #20] + MODIFY_REG(hcrc->Instance->CR, CRC_CR_POLYSIZE, PolyLength); + 800585c: 6883 ldr r3, [r0, #8] + 800585e: f023 0318 bic.w r3, r3, #24 + 8005862: 4313 orrs r3, r2 + 8005864: 6083 str r3, [r0, #8] + 8005866: 2000 movs r0, #0 +} + 8005868: bd10 pop {r4, pc} + if (msb >= HAL_CRC_LENGTH_8B) + 800586a: 2b07 cmp r3, #7 + 800586c: e7f3 b.n 8005856 + if (msb >= HAL_CRC_LENGTH_16B) + 800586e: 2b0f cmp r3, #15 + 8005870: e7f1 b.n 8005856 + switch (PolyLength) + 8005872: 2a00 cmp r2, #0 + 8005874: d1ea bne.n 800584c + 8005876: e7ef b.n 8005858 + +08005878 : + * and the Stream will be effectively disabled only after the transfer of + * this single data is finished. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DMA_Abort(DMA_HandleTypeDef *hdma) +{ + 8005878: b570 push {r4, r5, r6, lr} + 800587a: 4604 mov r4, r0 + /* calculate DMA base and stream number */ + DMA_Base_Registers *regs = (DMA_Base_Registers *)hdma->StreamBaseAddress; + 800587c: 6d86 ldr r6, [r0, #88] ; 0x58 + + uint32_t tickstart = HAL_GetTick(); + 800587e: f7ff fed7 bl 8005630 + 8005882: 4605 mov r5, r0 + + if(hdma->State != HAL_DMA_STATE_BUSY) + 8005884: f894 3035 ldrb.w r3, [r4, #53] ; 0x35 + 8005888: 2b02 cmp r3, #2 + 800588a: d006 beq.n 800589a + { + hdma->ErrorCode = HAL_DMA_ERROR_NO_XFER; + 800588c: 2380 movs r3, #128 ; 0x80 + + /* Process Unlocked */ + __HAL_UNLOCK(hdma); + + return HAL_ERROR; + 800588e: 2001 movs r0, #1 + hdma->ErrorCode = HAL_DMA_ERROR_NO_XFER; + 8005890: 6563 str r3, [r4, #84] ; 0x54 + __HAL_UNLOCK(hdma); + 8005892: 2300 movs r3, #0 + 8005894: f884 3034 strb.w r3, [r4, #52] ; 0x34 + /* Process Unlocked */ + __HAL_UNLOCK(hdma); + + } + return HAL_OK; +} + 8005898: bd70 pop {r4, r5, r6, pc} + hdma->Instance->CR &= ~(DMA_IT_TC | DMA_IT_TE | DMA_IT_DME); + 800589a: 6823 ldr r3, [r4, #0] + 800589c: 681a ldr r2, [r3, #0] + 800589e: f022 0216 bic.w r2, r2, #22 + 80058a2: 601a str r2, [r3, #0] + hdma->Instance->FCR &= ~(DMA_IT_FE); + 80058a4: 695a ldr r2, [r3, #20] + 80058a6: f022 0280 bic.w r2, r2, #128 ; 0x80 + 80058aa: 615a str r2, [r3, #20] + if((hdma->XferHalfCpltCallback != NULL) || (hdma->XferM1HalfCpltCallback != NULL)) + 80058ac: 6c22 ldr r2, [r4, #64] ; 0x40 + 80058ae: b90a cbnz r2, 80058b4 + 80058b0: 6ca2 ldr r2, [r4, #72] ; 0x48 + 80058b2: b11a cbz r2, 80058bc + hdma->Instance->CR &= ~(DMA_IT_HT); + 80058b4: 681a ldr r2, [r3, #0] + 80058b6: f022 0208 bic.w r2, r2, #8 + 80058ba: 601a str r2, [r3, #0] + __HAL_DMA_DISABLE(hdma); + 80058bc: 681a ldr r2, [r3, #0] + 80058be: f022 0201 bic.w r2, r2, #1 + 80058c2: 601a str r2, [r3, #0] + while((hdma->Instance->CR & DMA_SxCR_EN) != RESET) + 80058c4: 6823 ldr r3, [r4, #0] + 80058c6: 681b ldr r3, [r3, #0] + 80058c8: f013 0301 ands.w r3, r3, #1 + 80058cc: d108 bne.n 80058e0 + regs->IFCR = 0x3FU << hdma->StreamIndex; + 80058ce: 6de1 ldr r1, [r4, #92] ; 0x5c + 80058d0: 223f movs r2, #63 ; 0x3f + return HAL_OK; + 80058d2: 4618 mov r0, r3 + regs->IFCR = 0x3FU << hdma->StreamIndex; + 80058d4: 408a lsls r2, r1 + 80058d6: 60b2 str r2, [r6, #8] + hdma->State = HAL_DMA_STATE_READY; + 80058d8: 2201 movs r2, #1 + 80058da: f884 2035 strb.w r2, [r4, #53] ; 0x35 + return HAL_OK; + 80058de: e7d8 b.n 8005892 + if((HAL_GetTick() - tickstart ) > HAL_TIMEOUT_DMA_ABORT) + 80058e0: f7ff fea6 bl 8005630 + 80058e4: 1b40 subs r0, r0, r5 + 80058e6: 2805 cmp r0, #5 + 80058e8: d9ec bls.n 80058c4 + hdma->ErrorCode = HAL_DMA_ERROR_TIMEOUT; + 80058ea: 2320 movs r3, #32 + hdma->State = HAL_DMA_STATE_TIMEOUT; + 80058ec: 2003 movs r0, #3 + hdma->ErrorCode = HAL_DMA_ERROR_TIMEOUT; + 80058ee: 6563 str r3, [r4, #84] ; 0x54 + hdma->State = HAL_DMA_STATE_TIMEOUT; + 80058f0: f884 0035 strb.w r0, [r4, #53] ; 0x35 + return HAL_TIMEOUT; + 80058f4: e7cd b.n 8005892 + +080058f6 : + * @param hdma2d pointer to a DMA2D_HandleTypeDef structure that contains + * the configuration information for the DMA2D. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DMA2D_Init(DMA2D_HandleTypeDef *hdma2d) +{ + 80058f6: b510 push {r4, lr} + /* Check the DMA2D peripheral state */ + if (hdma2d == NULL) + 80058f8: 4604 mov r4, r0 + 80058fa: b330 cbz r0, 800594a + + /* Init the low level hardware */ + hdma2d->MspInitCallback(hdma2d); + } +#else + if (hdma2d->State == HAL_DMA2D_STATE_RESET) + 80058fc: f890 3039 ldrb.w r3, [r0, #57] ; 0x39 + 8005900: f003 02ff and.w r2, r3, #255 ; 0xff + 8005904: b91b cbnz r3, 800590e + { + /* Allocate lock resource and initialize it */ + hdma2d->Lock = HAL_UNLOCKED; + 8005906: f880 2038 strb.w r2, [r0, #56] ; 0x38 + /* Init the low level hardware */ + HAL_DMA2D_MspInit(hdma2d); + 800590a: f7fb fedd bl 80016c8 + + /* Change DMA2D peripheral state */ + hdma2d->State = HAL_DMA2D_STATE_BUSY; + + /* DMA2D CR register configuration -------------------------------------------*/ + MODIFY_REG(hdma2d->Instance->CR, DMA2D_CR_MODE, hdma2d->Init.Mode); + 800590e: 6822 ldr r2, [r4, #0] + hdma2d->State = HAL_DMA2D_STATE_BUSY; + 8005910: 2302 movs r3, #2 + MODIFY_REG(hdma2d->Instance->CR, DMA2D_CR_MODE, hdma2d->Init.Mode); + 8005912: 6861 ldr r1, [r4, #4] + (hdma2d->Init.RedBlueSwap << DMA2D_OPFCCR_RBS_Pos))); +#endif /* DMA2D_ALPHA_INV_RB_SWAP_SUPPORT */ + + + /* Update error code */ + hdma2d->ErrorCode = HAL_DMA2D_ERROR_NONE; + 8005914: 2000 movs r0, #0 + hdma2d->State = HAL_DMA2D_STATE_BUSY; + 8005916: f884 3039 strb.w r3, [r4, #57] ; 0x39 + MODIFY_REG(hdma2d->Instance->CR, DMA2D_CR_MODE, hdma2d->Init.Mode); + 800591a: 6813 ldr r3, [r2, #0] + 800591c: f423 3340 bic.w r3, r3, #196608 ; 0x30000 + 8005920: 430b orrs r3, r1 + MODIFY_REG(hdma2d->Instance->OPFCCR, DMA2D_OPFCCR_CM, hdma2d->Init.ColorMode); + 8005922: 68a1 ldr r1, [r4, #8] + MODIFY_REG(hdma2d->Instance->CR, DMA2D_CR_MODE, hdma2d->Init.Mode); + 8005924: 6013 str r3, [r2, #0] + MODIFY_REG(hdma2d->Instance->OPFCCR, DMA2D_OPFCCR_CM, hdma2d->Init.ColorMode); + 8005926: 6b53 ldr r3, [r2, #52] ; 0x34 + 8005928: f023 0307 bic.w r3, r3, #7 + 800592c: 430b orrs r3, r1 + MODIFY_REG(hdma2d->Instance->OOR, DMA2D_OOR_LO, hdma2d->Init.OutputOffset); + 800592e: 68e1 ldr r1, [r4, #12] + MODIFY_REG(hdma2d->Instance->OPFCCR, DMA2D_OPFCCR_CM, hdma2d->Init.ColorMode); + 8005930: 6353 str r3, [r2, #52] ; 0x34 + MODIFY_REG(hdma2d->Instance->OOR, DMA2D_OOR_LO, hdma2d->Init.OutputOffset); + 8005932: 6c13 ldr r3, [r2, #64] ; 0x40 + 8005934: f423 537f bic.w r3, r3, #16320 ; 0x3fc0 + 8005938: f023 033f bic.w r3, r3, #63 ; 0x3f + 800593c: 430b orrs r3, r1 + 800593e: 6413 str r3, [r2, #64] ; 0x40 + + /* Initialize the DMA2D state*/ + hdma2d->State = HAL_DMA2D_STATE_READY; + 8005940: 2301 movs r3, #1 + hdma2d->ErrorCode = HAL_DMA2D_ERROR_NONE; + 8005942: 63e0 str r0, [r4, #60] ; 0x3c + hdma2d->State = HAL_DMA2D_STATE_READY; + 8005944: f884 3039 strb.w r3, [r4, #57] ; 0x39 + + return HAL_OK; +} + 8005948: bd10 pop {r4, pc} + return HAL_ERROR; + 800594a: 2001 movs r0, #1 + 800594c: e7fc b.n 8005948 + +0800594e : + 800594e: 4770 bx lr + +08005950 : + 8005950: 4770 bx lr + +08005952 : + * the configuration information for the DMA2D. + * @retval HAL status + */ +void HAL_DMA2D_IRQHandler(DMA2D_HandleTypeDef *hdma2d) +{ + uint32_t isrflags = READ_REG(hdma2d->Instance->ISR); + 8005952: 6803 ldr r3, [r0, #0] +{ + 8005954: b570 push {r4, r5, r6, lr} + uint32_t isrflags = READ_REG(hdma2d->Instance->ISR); + 8005956: 685e ldr r6, [r3, #4] +{ + 8005958: 4604 mov r4, r0 + uint32_t crflags = READ_REG(hdma2d->Instance->CR); + 800595a: 681d ldr r5, [r3, #0] + + /* Transfer Error Interrupt management ***************************************/ + if ((isrflags & DMA2D_FLAG_TE) != 0U) + 800595c: 07f2 lsls r2, r6, #31 + 800595e: d514 bpl.n 800598a + { + if ((crflags & DMA2D_IT_TE) != 0U) + 8005960: 05e9 lsls r1, r5, #23 + 8005962: d512 bpl.n 800598a + { + /* Disable the transfer Error interrupt */ + __HAL_DMA2D_DISABLE_IT(hdma2d, DMA2D_IT_TE); + 8005964: 681a ldr r2, [r3, #0] + 8005966: f422 7280 bic.w r2, r2, #256 ; 0x100 + 800596a: 601a str r2, [r3, #0] + + /* Update error code */ + hdma2d->ErrorCode |= HAL_DMA2D_ERROR_TE; + 800596c: 6bc2 ldr r2, [r0, #60] ; 0x3c + 800596e: f042 0201 orr.w r2, r2, #1 + 8005972: 63c2 str r2, [r0, #60] ; 0x3c + + /* Clear the transfer error flag */ + __HAL_DMA2D_CLEAR_FLAG(hdma2d, DMA2D_FLAG_TE); + 8005974: 2201 movs r2, #1 + 8005976: 609a str r2, [r3, #8] + + /* Change DMA2D state */ + hdma2d->State = HAL_DMA2D_STATE_ERROR; + 8005978: 2304 movs r3, #4 + 800597a: f880 3039 strb.w r3, [r0, #57] ; 0x39 + + /* Process Unlocked */ + __HAL_UNLOCK(hdma2d); + 800597e: 2300 movs r3, #0 + 8005980: f880 3038 strb.w r3, [r0, #56] ; 0x38 + + if (hdma2d->XferErrorCallback != NULL) + 8005984: 6943 ldr r3, [r0, #20] + 8005986: b103 cbz r3, 800598a + { + /* Transfer error Callback */ + hdma2d->XferErrorCallback(hdma2d); + 8005988: 4798 blx r3 + } + } + } + /* Configuration Error Interrupt management **********************************/ + if ((isrflags & DMA2D_FLAG_CE) != 0U) + 800598a: 06b2 lsls r2, r6, #26 + 800598c: d516 bpl.n 80059bc + { + if ((crflags & DMA2D_IT_CE) != 0U) + 800598e: 04ab lsls r3, r5, #18 + 8005990: d514 bpl.n 80059bc + { + /* Disable the Configuration Error interrupt */ + __HAL_DMA2D_DISABLE_IT(hdma2d, DMA2D_IT_CE); + 8005992: 6823 ldr r3, [r4, #0] + 8005994: 681a ldr r2, [r3, #0] + 8005996: f422 5200 bic.w r2, r2, #8192 ; 0x2000 + 800599a: 601a str r2, [r3, #0] + + /* Clear the Configuration error flag */ + __HAL_DMA2D_CLEAR_FLAG(hdma2d, DMA2D_FLAG_CE); + 800599c: 2220 movs r2, #32 + 800599e: 609a str r2, [r3, #8] + + /* Update error code */ + hdma2d->ErrorCode |= HAL_DMA2D_ERROR_CE; + 80059a0: 6be3 ldr r3, [r4, #60] ; 0x3c + 80059a2: f043 0302 orr.w r3, r3, #2 + 80059a6: 63e3 str r3, [r4, #60] ; 0x3c + + /* Change DMA2D state */ + hdma2d->State = HAL_DMA2D_STATE_ERROR; + 80059a8: 2304 movs r3, #4 + 80059aa: f884 3039 strb.w r3, [r4, #57] ; 0x39 + + /* Process Unlocked */ + __HAL_UNLOCK(hdma2d); + 80059ae: 2300 movs r3, #0 + 80059b0: f884 3038 strb.w r3, [r4, #56] ; 0x38 + + if (hdma2d->XferErrorCallback != NULL) + 80059b4: 6963 ldr r3, [r4, #20] + 80059b6: b10b cbz r3, 80059bc + { + /* Transfer error Callback */ + hdma2d->XferErrorCallback(hdma2d); + 80059b8: 4620 mov r0, r4 + 80059ba: 4798 blx r3 + } + } + } + /* CLUT access Error Interrupt management ***********************************/ + if ((isrflags & DMA2D_FLAG_CAE) != 0U) + 80059bc: 0730 lsls r0, r6, #28 + 80059be: d516 bpl.n 80059ee + { + if ((crflags & DMA2D_IT_CAE) != 0U) + 80059c0: 0529 lsls r1, r5, #20 + 80059c2: d514 bpl.n 80059ee + { + /* Disable the CLUT access error interrupt */ + __HAL_DMA2D_DISABLE_IT(hdma2d, DMA2D_IT_CAE); + 80059c4: 6823 ldr r3, [r4, #0] + 80059c6: 681a ldr r2, [r3, #0] + 80059c8: f422 6200 bic.w r2, r2, #2048 ; 0x800 + 80059cc: 601a str r2, [r3, #0] + + /* Clear the CLUT access error flag */ + __HAL_DMA2D_CLEAR_FLAG(hdma2d, DMA2D_FLAG_CAE); + 80059ce: 2208 movs r2, #8 + 80059d0: 609a str r2, [r3, #8] + + /* Update error code */ + hdma2d->ErrorCode |= HAL_DMA2D_ERROR_CAE; + 80059d2: 6be3 ldr r3, [r4, #60] ; 0x3c + 80059d4: f043 0304 orr.w r3, r3, #4 + 80059d8: 63e3 str r3, [r4, #60] ; 0x3c + + /* Change DMA2D state */ + hdma2d->State = HAL_DMA2D_STATE_ERROR; + 80059da: 2304 movs r3, #4 + 80059dc: f884 3039 strb.w r3, [r4, #57] ; 0x39 + + /* Process Unlocked */ + __HAL_UNLOCK(hdma2d); + 80059e0: 2300 movs r3, #0 + 80059e2: f884 3038 strb.w r3, [r4, #56] ; 0x38 + + if (hdma2d->XferErrorCallback != NULL) + 80059e6: 6963 ldr r3, [r4, #20] + 80059e8: b10b cbz r3, 80059ee + { + /* Transfer error Callback */ + hdma2d->XferErrorCallback(hdma2d); + 80059ea: 4620 mov r0, r4 + 80059ec: 4798 blx r3 + } + } + } + /* Transfer watermark Interrupt management **********************************/ + if ((isrflags & DMA2D_FLAG_TW) != 0U) + 80059ee: 0772 lsls r2, r6, #29 + 80059f0: d50b bpl.n 8005a0a + { + if ((crflags & DMA2D_IT_TW) != 0U) + 80059f2: 056b lsls r3, r5, #21 + 80059f4: d509 bpl.n 8005a0a + { + /* Disable the transfer watermark interrupt */ + __HAL_DMA2D_DISABLE_IT(hdma2d, DMA2D_IT_TW); + 80059f6: 6823 ldr r3, [r4, #0] + + /* Transfer watermark Callback */ +#if (USE_HAL_DMA2D_REGISTER_CALLBACKS == 1) + hdma2d->LineEventCallback(hdma2d); +#else + HAL_DMA2D_LineEventCallback(hdma2d); + 80059f8: 4620 mov r0, r4 + __HAL_DMA2D_DISABLE_IT(hdma2d, DMA2D_IT_TW); + 80059fa: 681a ldr r2, [r3, #0] + 80059fc: f422 6280 bic.w r2, r2, #1024 ; 0x400 + 8005a00: 601a str r2, [r3, #0] + __HAL_DMA2D_CLEAR_FLAG(hdma2d, DMA2D_FLAG_TW); + 8005a02: 2204 movs r2, #4 + 8005a04: 609a str r2, [r3, #8] + HAL_DMA2D_LineEventCallback(hdma2d); + 8005a06: f7ff ffa2 bl 800594e +#endif /* USE_HAL_DMA2D_REGISTER_CALLBACKS */ + + } + } + /* Transfer Complete Interrupt management ************************************/ + if ((isrflags & DMA2D_FLAG_TC) != 0U) + 8005a0a: 07b0 lsls r0, r6, #30 + 8005a0c: d514 bpl.n 8005a38 + { + if ((crflags & DMA2D_IT_TC) != 0U) + 8005a0e: 05a9 lsls r1, r5, #22 + 8005a10: d512 bpl.n 8005a38 + { + /* Disable the transfer complete interrupt */ + __HAL_DMA2D_DISABLE_IT(hdma2d, DMA2D_IT_TC); + 8005a12: 6823 ldr r3, [r4, #0] + 8005a14: 681a ldr r2, [r3, #0] + 8005a16: f422 7200 bic.w r2, r2, #512 ; 0x200 + 8005a1a: 601a str r2, [r3, #0] + + /* Clear the transfer complete flag */ + __HAL_DMA2D_CLEAR_FLAG(hdma2d, DMA2D_FLAG_TC); + 8005a1c: 2202 movs r2, #2 + 8005a1e: 609a str r2, [r3, #8] + + /* Update error code */ + hdma2d->ErrorCode |= HAL_DMA2D_ERROR_NONE; + 8005a20: 6be3 ldr r3, [r4, #60] ; 0x3c + 8005a22: 63e3 str r3, [r4, #60] ; 0x3c + + /* Change DMA2D state */ + hdma2d->State = HAL_DMA2D_STATE_READY; + 8005a24: 2301 movs r3, #1 + 8005a26: f884 3039 strb.w r3, [r4, #57] ; 0x39 + + /* Process Unlocked */ + __HAL_UNLOCK(hdma2d); + 8005a2a: 2300 movs r3, #0 + 8005a2c: f884 3038 strb.w r3, [r4, #56] ; 0x38 + + if (hdma2d->XferCpltCallback != NULL) + 8005a30: 6923 ldr r3, [r4, #16] + 8005a32: b10b cbz r3, 8005a38 + { + /* Transfer complete Callback */ + hdma2d->XferCpltCallback(hdma2d); + 8005a34: 4620 mov r0, r4 + 8005a36: 4798 blx r3 + } + } + } + /* CLUT Transfer Complete Interrupt management ******************************/ + if ((isrflags & DMA2D_FLAG_CTC) != 0U) + 8005a38: 06f2 lsls r2, r6, #27 + 8005a3a: d513 bpl.n 8005a64 + { + if ((crflags & DMA2D_IT_CTC) != 0U) + 8005a3c: 04eb lsls r3, r5, #19 + 8005a3e: d511 bpl.n 8005a64 + { + /* Disable the CLUT transfer complete interrupt */ + __HAL_DMA2D_DISABLE_IT(hdma2d, DMA2D_IT_CTC); + 8005a40: 6823 ldr r3, [r4, #0] + + /* CLUT Transfer complete Callback */ +#if (USE_HAL_DMA2D_REGISTER_CALLBACKS == 1) + hdma2d->CLUTLoadingCpltCallback(hdma2d); +#else + HAL_DMA2D_CLUTLoadingCpltCallback(hdma2d); + 8005a42: 4620 mov r0, r4 + __HAL_DMA2D_DISABLE_IT(hdma2d, DMA2D_IT_CTC); + 8005a44: 681a ldr r2, [r3, #0] + 8005a46: f422 5280 bic.w r2, r2, #4096 ; 0x1000 + 8005a4a: 601a str r2, [r3, #0] + __HAL_DMA2D_CLEAR_FLAG(hdma2d, DMA2D_FLAG_CTC); + 8005a4c: 2210 movs r2, #16 + 8005a4e: 609a str r2, [r3, #8] + hdma2d->ErrorCode |= HAL_DMA2D_ERROR_NONE; + 8005a50: 6be3 ldr r3, [r4, #60] ; 0x3c + 8005a52: 63e3 str r3, [r4, #60] ; 0x3c + hdma2d->State = HAL_DMA2D_STATE_READY; + 8005a54: 2301 movs r3, #1 + 8005a56: f884 3039 strb.w r3, [r4, #57] ; 0x39 + __HAL_UNLOCK(hdma2d); + 8005a5a: 2300 movs r3, #0 + 8005a5c: f884 3038 strb.w r3, [r4, #56] ; 0x38 + HAL_DMA2D_CLUTLoadingCpltCallback(hdma2d); + 8005a60: f7ff ff76 bl 8005950 +#endif /* USE_HAL_DMA2D_REGISTER_CALLBACKS */ + } + } + +} + 8005a64: bd70 pop {r4, r5, r6, pc} + ... + +08005a68 : + * This parameter can be one of the following values: + * DMA2D_BACKGROUND_LAYER(0) / DMA2D_FOREGROUND_LAYER(1) + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DMA2D_ConfigLayer(DMA2D_HandleTypeDef *hdma2d, uint32_t LayerIdx) +{ + 8005a68: b5f0 push {r4, r5, r6, r7, lr} + assert_param(IS_DMA2D_ALPHA_INVERTED(hdma2d->LayerCfg[LayerIdx].AlphaInverted)); + assert_param(IS_DMA2D_RB_SWAP(hdma2d->LayerCfg[LayerIdx].RedBlueSwap)); +#endif /* DMA2D_ALPHA_INV_RB_SWAP_SUPPORT */ + + /* Process locked */ + __HAL_LOCK(hdma2d); + 8005a6a: f890 3038 ldrb.w r3, [r0, #56] ; 0x38 + 8005a6e: 2b01 cmp r3, #1 + 8005a70: f04f 0302 mov.w r3, #2 + 8005a74: d02b beq.n 8005ace + + /* Change DMA2D peripheral state */ + hdma2d->State = HAL_DMA2D_STATE_BUSY; + 8005a76: f880 3039 strb.w r3, [r0, #57] ; 0x39 + __HAL_LOCK(hdma2d); + 8005a7a: 2201 movs r2, #1 +#if defined (DMA2D_ALPHA_INV_RB_SWAP_SUPPORT) + regValue = pLayerCfg->InputColorMode | (pLayerCfg->AlphaMode << DMA2D_BGPFCCR_AM_Pos) | \ + (pLayerCfg->AlphaInverted << DMA2D_BGPFCCR_AI_Pos) | (pLayerCfg->RedBlueSwap << DMA2D_BGPFCCR_RBS_Pos); + regMask = (DMA2D_BGPFCCR_CM | DMA2D_BGPFCCR_AM | DMA2D_BGPFCCR_ALPHA | DMA2D_BGPFCCR_AI | DMA2D_BGPFCCR_RBS); +#else + regValue = pLayerCfg->InputColorMode | (pLayerCfg->AlphaMode << DMA2D_BGPFCCR_AM_Pos); + 8005a7c: eb00 1301 add.w r3, r0, r1, lsl #4 + 8005a80: 4f1c ldr r7, [pc, #112] ; (8005af4 ) + __HAL_LOCK(hdma2d); + 8005a82: f880 2038 strb.w r2, [r0, #56] ; 0x38 + regValue = pLayerCfg->InputColorMode | (pLayerCfg->AlphaMode << DMA2D_BGPFCCR_AM_Pos); + 8005a86: 010e lsls r6, r1, #4 + 8005a88: 6a5d ldr r5, [r3, #36] ; 0x24 + 8005a8a: e9d3 4207 ldrd r4, r2, [r3, #28] + 8005a8e: ea44 4202 orr.w r2, r4, r2, lsl #16 + regMask = DMA2D_BGPFCCR_CM | DMA2D_BGPFCCR_AM | DMA2D_BGPFCCR_ALPHA; +#endif /* DMA2D_ALPHA_INV_RB_SWAP_SUPPORT */ + + + if ((pLayerCfg->InputColorMode == DMA2D_INPUT_A4) || (pLayerCfg->InputColorMode == DMA2D_INPUT_A8)) + 8005a92: 3c09 subs r4, #9 + 8005a94: 2c01 cmp r4, #1 + { + regValue |= (pLayerCfg->InputAlpha & DMA2D_BGPFCCR_ALPHA); + 8005a96: bf96 itet ls + 8005a98: f005 437f andls.w r3, r5, #4278190080 ; 0xff000000 + } + else + { + regValue |= (pLayerCfg->InputAlpha << DMA2D_BGPFCCR_ALPHA_Pos); + 8005a9c: ea42 6205 orrhi.w r2, r2, r5, lsl #24 + regValue |= (pLayerCfg->InputAlpha & DMA2D_BGPFCCR_ALPHA); + 8005aa0: 431a orrls r2, r3 + + /* Configure the background DMA2D layer */ + if (LayerIdx == DMA2D_BACKGROUND_LAYER) + { + /* Write DMA2D BGPFCCR register */ + MODIFY_REG(hdma2d->Instance->BGPFCCR, regMask, regValue); + 8005aa2: 6803 ldr r3, [r0, #0] + if (LayerIdx == DMA2D_BACKGROUND_LAYER) + 8005aa4: b9a9 cbnz r1, 8005ad2 + MODIFY_REG(hdma2d->Instance->BGPFCCR, regMask, regValue); + 8005aa6: 6a59 ldr r1, [r3, #36] ; 0x24 + + /* DMA2D BGOR register configuration -------------------------------------*/ + WRITE_REG(hdma2d->Instance->BGOR, pLayerCfg->InputOffset); + + /* DMA2D BGCOLR register configuration -------------------------------------*/ + if ((pLayerCfg->InputColorMode == DMA2D_INPUT_A4) || (pLayerCfg->InputColorMode == DMA2D_INPUT_A8)) + 8005aa8: 2c01 cmp r4, #1 + MODIFY_REG(hdma2d->Instance->BGPFCCR, regMask, regValue); + 8005aaa: ea01 0107 and.w r1, r1, r7 + 8005aae: ea42 0201 orr.w r2, r2, r1 + 8005ab2: 625a str r2, [r3, #36] ; 0x24 + WRITE_REG(hdma2d->Instance->BGOR, pLayerCfg->InputOffset); + 8005ab4: 6982 ldr r2, [r0, #24] + 8005ab6: 619a str r2, [r3, #24] + if ((pLayerCfg->InputColorMode == DMA2D_INPUT_A4) || (pLayerCfg->InputColorMode == DMA2D_INPUT_A8)) + 8005ab8: d803 bhi.n 8005ac2 + { + WRITE_REG(hdma2d->Instance->BGCOLR, pLayerCfg->InputAlpha & (DMA2D_BGCOLR_BLUE | DMA2D_BGCOLR_GREEN | \ + 8005aba: 6a42 ldr r2, [r0, #36] ; 0x24 + 8005abc: f022 427f bic.w r2, r2, #4278190080 ; 0xff000000 + 8005ac0: 629a str r2, [r3, #40] ; 0x28 + WRITE_REG(hdma2d->Instance->FGCOLR, pLayerCfg->InputAlpha & (DMA2D_FGCOLR_BLUE | DMA2D_FGCOLR_GREEN | \ + DMA2D_FGCOLR_RED)); + } + } + /* Initialize the DMA2D state*/ + hdma2d->State = HAL_DMA2D_STATE_READY; + 8005ac2: 2301 movs r3, #1 + 8005ac4: f880 3039 strb.w r3, [r0, #57] ; 0x39 + + /* Process unlocked */ + __HAL_UNLOCK(hdma2d); + 8005ac8: 2300 movs r3, #0 + 8005aca: f880 3038 strb.w r3, [r0, #56] ; 0x38 + __HAL_LOCK(hdma2d); + 8005ace: 4618 mov r0, r3 + + return HAL_OK; +} + 8005ad0: bdf0 pop {r4, r5, r6, r7, pc} + MODIFY_REG(hdma2d->Instance->FGPFCCR, regMask, regValue); + 8005ad2: 69d9 ldr r1, [r3, #28] + if ((pLayerCfg->InputColorMode == DMA2D_INPUT_A4) || (pLayerCfg->InputColorMode == DMA2D_INPUT_A8)) + 8005ad4: 2c01 cmp r4, #1 + MODIFY_REG(hdma2d->Instance->FGPFCCR, regMask, regValue); + 8005ad6: ea01 0107 and.w r1, r1, r7 + 8005ada: ea42 0201 orr.w r2, r2, r1 + 8005ade: 61da str r2, [r3, #28] + WRITE_REG(hdma2d->Instance->FGOR, pLayerCfg->InputOffset); + 8005ae0: eb00 0206 add.w r2, r0, r6 + 8005ae4: 6992 ldr r2, [r2, #24] + 8005ae6: 611a str r2, [r3, #16] + if ((pLayerCfg->InputColorMode == DMA2D_INPUT_A4) || (pLayerCfg->InputColorMode == DMA2D_INPUT_A8)) + 8005ae8: d8eb bhi.n 8005ac2 + WRITE_REG(hdma2d->Instance->FGCOLR, pLayerCfg->InputAlpha & (DMA2D_FGCOLR_BLUE | DMA2D_FGCOLR_GREEN | \ + 8005aea: f025 457f bic.w r5, r5, #4278190080 ; 0xff000000 + 8005aee: 621d str r5, [r3, #32] + 8005af0: e7e7 b.n 8005ac2 + 8005af2: bf00 nop + 8005af4: 00fcfff0 .word 0x00fcfff0 + +08005af8 : + * @param pTxConfig: Tx packet configuration + * @param ItMode: Enable or disable Tx EOT interrept + * @retval Status + */ +static uint32_t ETH_Prepare_Tx_Descriptors(ETH_HandleTypeDef *heth, ETH_TxPacketConfig *pTxConfig, uint32_t ItMode) +{ + 8005af8: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} + ETH_TxDescListTypeDef *dmatxdesclist = &heth->TxDescList; + uint32_t descidx = dmatxdesclist->CurTxDesc; + 8005afc: 6a86 ldr r6, [r0, #40] ; 0x28 +{ + 8005afe: 4691 mov r9, r2 + uint32_t firstdescidx = dmatxdesclist->CurTxDesc; + uint32_t idx; + uint32_t descnbr = 0; + ETH_DMADescTypeDef *dmatxdesc = (ETH_DMADescTypeDef *)dmatxdesclist->TxDesc[descidx]; + + ETH_BufferTypeDef *txbuffer = pTxConfig->TxBuffer; + 8005b00: 688c ldr r4, [r1, #8] + 8005b02: eb00 0c86 add.w ip, r0, r6, lsl #2 + ETH_DMADescTypeDef *dmatxdesc = (ETH_DMADescTypeDef *)dmatxdesclist->TxDesc[descidx]; + 8005b06: f8dc 3018 ldr.w r3, [ip, #24] + uint32_t bd_count = 0; + + /* Current Tx Descriptor Owned by DMA: cannot be used by the application */ + if ((READ_BIT(dmatxdesc->DESC0, ETH_DMATXDESC_OWN) == ETH_DMATXDESC_OWN) + 8005b0a: 681d ldr r5, [r3, #0] + 8005b0c: 2d00 cmp r5, #0 + 8005b0e: da02 bge.n 8005b16 + || (dmatxdesclist->PacketAddress[descidx] != NULL)) + { + return HAL_ETH_ERROR_BUSY; + 8005b10: 2002 movs r0, #2 + __enable_irq(); + + + /* Return function status */ + return HAL_ETH_ERROR_NONE; +} + 8005b12: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} + || (dmatxdesclist->PacketAddress[descidx] != NULL)) + 8005b16: f8dc 502c ldr.w r5, [ip, #44] ; 0x2c + 8005b1a: 2d00 cmp r5, #0 + 8005b1c: d1f8 bne.n 8005b10 + WRITE_REG(dmatxdesc->DESC2, (uint32_t)txbuffer->buffer); + 8005b1e: 6825 ldr r5, [r4, #0] + MODIFY_REG(dmatxdesc->DESC1, ETH_DMATXDESC_TBS1, txbuffer->len); + 8005b20: 6867 ldr r7, [r4, #4] + WRITE_REG(dmatxdesc->DESC2, (uint32_t)txbuffer->buffer); + 8005b22: 609d str r5, [r3, #8] + MODIFY_REG(dmatxdesc->DESC1, ETH_DMATXDESC_TBS1, txbuffer->len); + 8005b24: 685d ldr r5, [r3, #4] + 8005b26: f425 55ff bic.w r5, r5, #8160 ; 0x1fe0 + 8005b2a: f025 051f bic.w r5, r5, #31 + 8005b2e: 433d orrs r5, r7 + if (READ_BIT(pTxConfig->Attributes, ETH_TX_PACKETS_FEATURES_CSUM) != 0U) + 8005b30: 680f ldr r7, [r1, #0] + 8005b32: 07fa lsls r2, r7, #31 + MODIFY_REG(dmatxdesc->DESC1, ETH_DMATXDESC_TBS1, txbuffer->len); + 8005b34: 605d str r5, [r3, #4] + if (READ_BIT(pTxConfig->Attributes, ETH_TX_PACKETS_FEATURES_CSUM) != 0U) + 8005b36: d505 bpl.n 8005b44 + MODIFY_REG(dmatxdesc->DESC0, ETH_DMATXDESC_CIC, pTxConfig->ChecksumCtrl); + 8005b38: 681d ldr r5, [r3, #0] + 8005b3a: 694a ldr r2, [r1, #20] + 8005b3c: f425 0540 bic.w r5, r5, #12582912 ; 0xc00000 + 8005b40: 4315 orrs r5, r2 + 8005b42: 601d str r5, [r3, #0] + if (READ_BIT(pTxConfig->Attributes, ETH_TX_PACKETS_FEATURES_CRCPAD) != 0U) + 8005b44: 06bd lsls r5, r7, #26 + 8005b46: d505 bpl.n 8005b54 + MODIFY_REG(dmatxdesc->DESC0, ETH_CRC_PAD_DISABLE, pTxConfig->CRCPadCtrl); + 8005b48: 681d ldr r5, [r3, #0] + 8005b4a: 6909 ldr r1, [r1, #16] + 8005b4c: f025 6540 bic.w r5, r5, #201326592 ; 0xc000000 + 8005b50: 4329 orrs r1, r5 + 8005b52: 6019 str r1, [r3, #0] + if (READ_BIT(pTxConfig->Attributes, ETH_TX_PACKETS_FEATURES_VLANTAG) != 0U) + 8005b54: 077a lsls r2, r7, #29 + 8005b56: d503 bpl.n 8005b60 + SET_BIT(dmatxdesc->DESC0, ETH_DMATXDESC_VF); + 8005b58: 6819 ldr r1, [r3, #0] + 8005b5a: f041 0180 orr.w r1, r1, #128 ; 0x80 + 8005b5e: 6019 str r1, [r3, #0] + SET_BIT(dmatxdesc->DESC0, ETH_DMATXDESC_FS); + 8005b60: 6819 ldr r1, [r3, #0] + 8005b62: f041 5180 orr.w r1, r1, #268435456 ; 0x10000000 + 8005b66: 6019 str r1, [r3, #0] + __ASM volatile ("dmb 0xF":::"memory"); + 8005b68: f3bf 8f5f dmb sy + SET_BIT(dmatxdesc->DESC0, ETH_DMATXDESC_OWN); + 8005b6c: 6819 ldr r1, [r3, #0] + uint32_t bd_count = 0; + 8005b6e: 2500 movs r5, #0 + MODIFY_REG(dmatxdesc->DESC1, ETH_DMATXDESC_TBS1, txbuffer->len); + 8005b70: f8df 80d0 ldr.w r8, [pc, #208] ; 8005c44 + SET_BIT(dmatxdesc->DESC0, ETH_DMATXDESC_OWN); + 8005b74: f041 4100 orr.w r1, r1, #2147483648 ; 0x80000000 + 8005b78: 6019 str r1, [r3, #0] + uint32_t descidx = dmatxdesclist->CurTxDesc; + 8005b7a: 4631 mov r1, r6 + while (txbuffer->next != NULL) + 8005b7c: 68a4 ldr r4, [r4, #8] + 8005b7e: f105 0e01 add.w lr, r5, #1 + 8005b82: b9bc cbnz r4, 8005bb4 + SET_BIT(dmatxdesc->DESC0, ETH_DMATXDESC_IC); + 8005b84: 681a ldr r2, [r3, #0] + if (ItMode != ((uint32_t)RESET)) + 8005b86: f1b9 0f00 cmp.w r9, #0 + 8005b8a: d058 beq.n 8005c3e + SET_BIT(dmatxdesc->DESC0, ETH_DMATXDESC_IC); + 8005b8c: f042 4280 orr.w r2, r2, #1073741824 ; 0x40000000 + CLEAR_BIT(dmatxdesc->DESC0, ETH_DMATXDESC_IC); + 8005b90: 601a str r2, [r3, #0] + SET_BIT(dmatxdesc->DESC0, ETH_DMATXDESC_LS); + 8005b92: 681a ldr r2, [r3, #0] + 8005b94: f042 5200 orr.w r2, r2, #536870912 ; 0x20000000 + 8005b98: 601a str r2, [r3, #0] + dmatxdesclist->PacketAddress[descidx] = dmatxdesclist->CurrentPacketAddress; + 8005b9a: eb00 0381 add.w r3, r0, r1, lsl #2 + 8005b9e: 6bc2 ldr r2, [r0, #60] ; 0x3c + 8005ba0: 62da str r2, [r3, #44] ; 0x2c + dmatxdesclist->CurTxDesc = descidx; + 8005ba2: 6281 str r1, [r0, #40] ; 0x28 + __ASM volatile ("cpsid i" : : : "memory"); + 8005ba4: b672 cpsid i + dmatxdesclist->BuffersInUse += bd_count + 1U; + 8005ba6: 6c03 ldr r3, [r0, #64] ; 0x40 + 8005ba8: 3301 adds r3, #1 + 8005baa: 442b add r3, r5 + 8005bac: 6403 str r3, [r0, #64] ; 0x40 + __ASM volatile ("cpsie i" : : : "memory"); + 8005bae: b662 cpsie i + return HAL_ETH_ERROR_NONE; + 8005bb0: 2000 movs r0, #0 + 8005bb2: e7ae b.n 8005b12 + CLEAR_BIT(dmatxdesc->DESC0, ETH_DMATXDESC_LS); + 8005bb4: 681d ldr r5, [r3, #0] + 8005bb6: f025 5500 bic.w r5, r5, #536870912 ; 0x20000000 + 8005bba: 601d str r5, [r3, #0] + SET_BIT(dmatxdesc->DESC0, ETH_DMATXDESC_IC); + 8005bbc: 681d ldr r5, [r3, #0] + if (ItMode != ((uint32_t)RESET)) + 8005bbe: f1b9 0f00 cmp.w r9, #0 + 8005bc2: d025 beq.n 8005c10 + SET_BIT(dmatxdesc->DESC0, ETH_DMATXDESC_IC); + 8005bc4: f045 4580 orr.w r5, r5, #1073741824 ; 0x40000000 + INCR_TX_DESC_INDEX(descidx, 1U); + 8005bc8: 1c4f adds r7, r1, #1 + CLEAR_BIT(dmatxdesc->DESC0, ETH_DMATXDESC_IC); + 8005bca: 601d str r5, [r3, #0] + INCR_TX_DESC_INDEX(descidx, 1U); + 8005bcc: 2f03 cmp r7, #3 + 8005bce: bf88 it hi + 8005bd0: 1ecf subhi r7, r1, #3 + dmatxdesc = (ETH_DMADescTypeDef *)dmatxdesclist->TxDesc[descidx]; + 8005bd2: eb00 0587 add.w r5, r0, r7, lsl #2 + 8005bd6: 69ab ldr r3, [r5, #24] + CLEAR_BIT(dmatxdesc->DESC0, ETH_DMATXDESC_FS); + 8005bd8: 6819 ldr r1, [r3, #0] + 8005bda: f021 5180 bic.w r1, r1, #268435456 ; 0x10000000 + 8005bde: 6019 str r1, [r3, #0] + if ((READ_BIT(dmatxdesc->DESC0, ETH_DMATXDESC_OWN) == ETH_DMATXDESC_OWN) + 8005be0: 6819 ldr r1, [r3, #0] + 8005be2: 2900 cmp r1, #0 + 8005be4: da17 bge.n 8005c16 + dmatxdesc = (ETH_DMADescTypeDef *)dmatxdesclist->TxDesc[descidx]; + 8005be6: f8dc 1018 ldr.w r1, [ip, #24] + for (idx = 0; idx < descnbr; idx ++) + 8005bea: 2200 movs r2, #0 + 8005bec: 4572 cmp r2, lr + 8005bee: d08f beq.n 8005b10 + __ASM volatile ("dmb 0xF":::"memory"); + 8005bf0: f3bf 8f5f dmb sy + CLEAR_BIT(dmatxdesc->DESC0, ETH_DMATXDESC_OWN); + 8005bf4: 680b ldr r3, [r1, #0] + for (idx = 0; idx < descnbr; idx ++) + 8005bf6: 3201 adds r2, #1 + CLEAR_BIT(dmatxdesc->DESC0, ETH_DMATXDESC_OWN); + 8005bf8: f023 4300 bic.w r3, r3, #2147483648 ; 0x80000000 + 8005bfc: 600b str r3, [r1, #0] + INCR_TX_DESC_INDEX(descidx, 1U); + 8005bfe: 1c73 adds r3, r6, #1 + 8005c00: 2b03 cmp r3, #3 + 8005c02: bf88 it hi + 8005c04: 1ef3 subhi r3, r6, #3 + dmatxdesc = (ETH_DMADescTypeDef *)dmatxdesclist->TxDesc[descidx]; + 8005c06: eb00 0183 add.w r1, r0, r3, lsl #2 + for (idx = 0; idx < descnbr; idx ++) + 8005c0a: 461e mov r6, r3 + dmatxdesc = (ETH_DMADescTypeDef *)dmatxdesclist->TxDesc[descidx]; + 8005c0c: 6989 ldr r1, [r1, #24] + for (idx = 0; idx < descnbr; idx ++) + 8005c0e: e7ed b.n 8005bec + CLEAR_BIT(dmatxdesc->DESC0, ETH_DMATXDESC_IC); + 8005c10: f025 4580 bic.w r5, r5, #1073741824 ; 0x40000000 + 8005c14: e7d8 b.n 8005bc8 + || (dmatxdesclist->PacketAddress[descidx] != NULL)) + 8005c16: 6ae9 ldr r1, [r5, #44] ; 0x2c + 8005c18: 2900 cmp r1, #0 + 8005c1a: d1e4 bne.n 8005be6 + WRITE_REG(dmatxdesc->DESC2, (uint32_t)txbuffer->buffer); + 8005c1c: 6821 ldr r1, [r4, #0] + MODIFY_REG(dmatxdesc->DESC1, ETH_DMATXDESC_TBS1, txbuffer->len); + 8005c1e: 6865 ldr r5, [r4, #4] + WRITE_REG(dmatxdesc->DESC2, (uint32_t)txbuffer->buffer); + 8005c20: 6099 str r1, [r3, #8] + MODIFY_REG(dmatxdesc->DESC1, ETH_DMATXDESC_TBS1, txbuffer->len); + 8005c22: 6859 ldr r1, [r3, #4] + 8005c24: ea01 0108 and.w r1, r1, r8 + 8005c28: 4329 orrs r1, r5 + 8005c2a: 6059 str r1, [r3, #4] + 8005c2c: f3bf 8f5f dmb sy + SET_BIT(dmatxdesc->DESC0, ETH_DMATXDESC_OWN); + 8005c30: 6819 ldr r1, [r3, #0] + 8005c32: 4675 mov r5, lr + 8005c34: f041 4100 orr.w r1, r1, #2147483648 ; 0x80000000 + 8005c38: 6019 str r1, [r3, #0] + 8005c3a: 4639 mov r1, r7 + 8005c3c: e79e b.n 8005b7c + CLEAR_BIT(dmatxdesc->DESC0, ETH_DMATXDESC_IC); + 8005c3e: f022 4280 bic.w r2, r2, #1073741824 ; 0x40000000 + 8005c42: e7a5 b.n 8005b90 + 8005c44: ffffe000 .word 0xffffe000 + +08005c48 : +{ + 8005c48: b570 push {r4, r5, r6, lr} + 8005c4a: 688b ldr r3, [r1, #8] + 8005c4c: 460d mov r5, r1 + 8005c4e: 6949 ldr r1, [r1, #20] + 8005c50: 4604 mov r4, r0 + tmpreg1 = (heth->Instance)->MACCR; + 8005c52: 6802 ldr r2, [r0, #0] + 8005c54: 430b orrs r3, r1 + 8005c56: 69a9 ldr r1, [r5, #24] + 8005c58: 6810 ldr r0, [r2, #0] + tmpreg1 |= (uint32_t)(((uint32_t)((macconf->Watchdog == DISABLE) ? 1U : 0U) << 23U) | + 8005c5a: 430b orrs r3, r1 + 8005c5c: 6a69 ldr r1, [r5, #36] ; 0x24 + 8005c5e: 430b orrs r3, r1 + ((uint32_t)macconf->CarrierSenseDuringTransmit << 16U) | + 8005c60: 7fe9 ldrb r1, [r5, #31] + 8005c62: ea43 4301 orr.w r3, r3, r1, lsl #16 + ((uint32_t)macconf->LoopbackMode << 12U) | + 8005c66: 7f29 ldrb r1, [r5, #28] + 8005c68: ea43 3301 orr.w r3, r3, r1, lsl #12 + ((uint32_t)macconf->ChecksumOffload << 10U) | + 8005c6c: 7929 ldrb r1, [r5, #4] + 8005c6e: ea43 2381 orr.w r3, r3, r1, lsl #10 + ((uint32_t)macconf->AutomaticPadCRCStrip << 7U) | + 8005c72: 7be9 ldrb r1, [r5, #15] + 8005c74: ea43 13c1 orr.w r3, r3, r1, lsl #7 + ((uint32_t)macconf->DeferralCheck << 4U)); + 8005c78: f895 1028 ldrb.w r1, [r5, #40] ; 0x28 + 8005c7c: ea43 1301 orr.w r3, r3, r1, lsl #4 + tmpreg1 &= ETH_MACCR_CLEAR_MASK; + 8005c80: 4929 ldr r1, [pc, #164] ; (8005d28 ) + 8005c82: 4001 ands r1, r0 + HAL_Delay(ETH_REG_WRITE_DELAY); + 8005c84: 2001 movs r0, #1 + 8005c86: 430b orrs r3, r1 + tmpreg1 |= (uint32_t)(((uint32_t)((macconf->Watchdog == DISABLE) ? 1U : 0U) << 23U) | + 8005c88: 7c29 ldrb r1, [r5, #16] + 8005c8a: fab1 f181 clz r1, r1 + 8005c8e: 0949 lsrs r1, r1, #5 + 8005c90: ea43 53c1 orr.w r3, r3, r1, lsl #23 + ((uint32_t)((macconf->Jabber == DISABLE) ? 1U : 0U) << 22U) | + 8005c94: 7c69 ldrb r1, [r5, #17] + 8005c96: fab1 f181 clz r1, r1 + 8005c9a: 0949 lsrs r1, r1, #5 + 8005c9c: ea43 5381 orr.w r3, r3, r1, lsl #22 + ((uint32_t)((macconf->ReceiveOwn == DISABLE) ? 1U : 0U) << 13U) | + 8005ca0: 7fa9 ldrb r1, [r5, #30] + 8005ca2: fab1 f181 clz r1, r1 + 8005ca6: 0949 lsrs r1, r1, #5 + 8005ca8: ea43 3341 orr.w r3, r3, r1, lsl #13 + ((uint32_t)((macconf->RetryTransmission == DISABLE) ? 1U : 0U) << 9U) | + 8005cac: f895 1020 ldrb.w r1, [r5, #32] + 8005cb0: fab1 f181 clz r1, r1 + 8005cb4: 0949 lsrs r1, r1, #5 + tmpreg1 |= (uint32_t)(((uint32_t)((macconf->Watchdog == DISABLE) ? 1U : 0U) << 23U) | + 8005cb6: ea43 2341 orr.w r3, r3, r1, lsl #9 + (heth->Instance)->MACCR = (uint32_t)tmpreg1; + 8005cba: 6013 str r3, [r2, #0] + tmpreg1 = (heth->Instance)->MACCR; + 8005cbc: 6816 ldr r6, [r2, #0] + HAL_Delay(ETH_REG_WRITE_DELAY); + 8005cbe: f7ff fcbd bl 800563c + (heth->Instance)->MACCR = tmpreg1; + 8005cc2: 6821 ldr r1, [r4, #0] + tmpreg1 |= (uint32_t)((macconf->PauseTime << 16U) | + 8005cc4: 6ca8 ldr r0, [r5, #72] ; 0x48 + (heth->Instance)->MACCR = tmpreg1; + 8005cc6: 600e str r6, [r1, #0] + tmpreg1 = (heth->Instance)->MACFCR; + 8005cc8: 698a ldr r2, [r1, #24] + tmpreg1 |= (uint32_t)((macconf->PauseTime << 16U) | + 8005cca: 6d2b ldr r3, [r5, #80] ; 0x50 + tmpreg1 &= ETH_MACFCR_CLEAR_MASK; + 8005ccc: f022 02be bic.w r2, r2, #190 ; 0xbe + 8005cd0: ea43 4300 orr.w r3, r3, r0, lsl #16 + 8005cd4: 0412 lsls r2, r2, #16 + 8005cd6: 0c12 lsrs r2, r2, #16 + 8005cd8: 4313 orrs r3, r2 + ((uint32_t)((macconf->ZeroQuantaPause == DISABLE) ? 1U : 0U) << 7U) | + 8005cda: f895 204c ldrb.w r2, [r5, #76] ; 0x4c + 8005cde: fab2 f282 clz r2, r2 + 8005ce2: 0952 lsrs r2, r2, #5 + 8005ce4: ea43 13c2 orr.w r3, r3, r2, lsl #7 + ((uint32_t)((macconf->UnicastPausePacketDetect == ENABLE) ? 1U : 0U) << 3U) | + 8005ce8: f895 2055 ldrb.w r2, [r5, #85] ; 0x55 + 8005cec: 1e50 subs r0, r2, #1 + 8005cee: 4242 negs r2, r0 + 8005cf0: 4142 adcs r2, r0 + HAL_Delay(ETH_REG_WRITE_DELAY); + 8005cf2: 2001 movs r0, #1 + 8005cf4: ea43 03c2 orr.w r3, r3, r2, lsl #3 + ((uint32_t)((macconf->ReceiveFlowControl == ENABLE) ? 1U : 0U) << 2U) | + 8005cf8: f895 2056 ldrb.w r2, [r5, #86] ; 0x56 + 8005cfc: 1e56 subs r6, r2, #1 + 8005cfe: 4272 negs r2, r6 + 8005d00: 4172 adcs r2, r6 + 8005d02: ea43 0382 orr.w r3, r3, r2, lsl #2 + ((uint32_t)((macconf->TransmitFlowControl == ENABLE) ? 1U : 0U) << 1U)); + 8005d06: f895 2054 ldrb.w r2, [r5, #84] ; 0x54 + 8005d0a: f102 3cff add.w ip, r2, #4294967295 + 8005d0e: f1dc 0200 rsbs r2, ip, #0 + 8005d12: eb42 020c adc.w r2, r2, ip + tmpreg1 |= (uint32_t)((macconf->PauseTime << 16U) | + 8005d16: ea43 0342 orr.w r3, r3, r2, lsl #1 + (heth->Instance)->MACFCR = (uint32_t)tmpreg1; + 8005d1a: 618b str r3, [r1, #24] + tmpreg1 = (heth->Instance)->MACFCR; + 8005d1c: 698d ldr r5, [r1, #24] + HAL_Delay(ETH_REG_WRITE_DELAY); + 8005d1e: f7ff fc8d bl 800563c + (heth->Instance)->MACFCR = tmpreg1; + 8005d22: 6823 ldr r3, [r4, #0] + 8005d24: 619d str r5, [r3, #24] +} + 8005d26: bd70 pop {r4, r5, r6, pc} + 8005d28: ff20810f .word 0xff20810f + +08005d2c : +{ + 8005d2c: b570 push {r4, r5, r6, lr} + 8005d2e: 694b ldr r3, [r1, #20] + 8005d30: 460d mov r5, r1 + 8005d32: 6a09 ldr r1, [r1, #32] + 8005d34: 4604 mov r4, r0 + tmpreg1 = (heth->Instance)->DMAOMR; + 8005d36: 6802 ldr r2, [r0, #0] + 8005d38: 430b orrs r3, r1 + ((uint32_t)dmaconf->ReceiveStoreForward << 25U) | + 8005d3a: 7b69 ldrb r1, [r5, #13] + tmpreg1 = (heth->Instance)->DMAOMR; + 8005d3c: f502 5280 add.w r2, r2, #4096 ; 0x1000 + 8005d40: ea43 6341 orr.w r3, r3, r1, lsl #25 + ((uint32_t)dmaconf->TransmitStoreForward << 21U) | + 8005d44: 7ba9 ldrb r1, [r5, #14] + tmpreg1 = (heth->Instance)->DMAOMR; + 8005d46: 6990 ldr r0, [r2, #24] + tmpreg1 |= (uint32_t)(((uint32_t)((dmaconf->DropTCPIPChecksumErrorFrame == DISABLE) ? 1U : 0U) << 26U) | + 8005d48: ea43 5341 orr.w r3, r3, r1, lsl #21 + ((uint32_t)dmaconf->ForwardErrorFrames << 7U) | + 8005d4c: 7f29 ldrb r1, [r5, #28] + 8005d4e: ea43 13c1 orr.w r3, r3, r1, lsl #7 + ((uint32_t)dmaconf->ForwardUndersizedGoodFrames << 6U) | + 8005d52: 7fa9 ldrb r1, [r5, #30] + 8005d54: ea43 1381 orr.w r3, r3, r1, lsl #6 + ((uint32_t)dmaconf->SecondFrameOperate << 2U)); + 8005d58: f895 1024 ldrb.w r1, [r5, #36] ; 0x24 + 8005d5c: ea43 0381 orr.w r3, r3, r1, lsl #2 + tmpreg1 &= ETH_DMAOMR_CLEAR_MASK; + 8005d60: 491a ldr r1, [pc, #104] ; (8005dcc ) + 8005d62: 4001 ands r1, r0 + HAL_Delay(ETH_REG_WRITE_DELAY); + 8005d64: 2001 movs r0, #1 + 8005d66: 430b orrs r3, r1 + tmpreg1 |= (uint32_t)(((uint32_t)((dmaconf->DropTCPIPChecksumErrorFrame == DISABLE) ? 1U : 0U) << 26U) | + 8005d68: 7b29 ldrb r1, [r5, #12] + 8005d6a: fab1 f181 clz r1, r1 + 8005d6e: 0949 lsrs r1, r1, #5 + 8005d70: ea43 6381 orr.w r3, r3, r1, lsl #26 + ((uint32_t)((dmaconf->FlushRxPacket == DISABLE) ? 1U : 0U) << 20U) | + 8005d74: 7f69 ldrb r1, [r5, #29] + 8005d76: fab1 f181 clz r1, r1 + 8005d7a: 0949 lsrs r1, r1, #5 + tmpreg1 |= (uint32_t)(((uint32_t)((dmaconf->DropTCPIPChecksumErrorFrame == DISABLE) ? 1U : 0U) << 26U) | + 8005d7c: ea43 5301 orr.w r3, r3, r1, lsl #20 + (heth->Instance)->DMAOMR = (uint32_t)tmpreg1; + 8005d80: 6193 str r3, [r2, #24] + tmpreg1 = (heth->Instance)->DMAOMR; + 8005d82: 6996 ldr r6, [r2, #24] + HAL_Delay(ETH_REG_WRITE_DELAY); + 8005d84: f7ff fc5a bl 800563c + (heth->Instance)->DMAOMR = tmpreg1; + 8005d88: 6822 ldr r2, [r4, #0] + HAL_Delay(ETH_REG_WRITE_DELAY); + 8005d8a: 2001 movs r0, #1 + (dmaconf->DescriptorSkipLength << 2U) | + 8005d8c: 69a9 ldr r1, [r5, #24] + (heth->Instance)->DMAOMR = tmpreg1; + 8005d8e: f502 5280 add.w r2, r2, #4096 ; 0x1000 + (dmaconf->DescriptorSkipLength << 2U) | + 8005d92: 68ab ldr r3, [r5, #8] + (heth->Instance)->DMAOMR = tmpreg1; + 8005d94: 6196 str r6, [r2, #24] + (dmaconf->DescriptorSkipLength << 2U) | + 8005d96: 430b orrs r3, r1 + ((uint32_t)dmaconf->EnhancedDescriptorFormat << 7U) | + 8005d98: f895 1025 ldrb.w r1, [r5, #37] ; 0x25 + (dmaconf->DescriptorSkipLength << 2U) | + 8005d9c: ea43 13c1 orr.w r3, r3, r1, lsl #7 + 8005da0: 6929 ldr r1, [r5, #16] + 8005da2: 430b orrs r3, r1 + 8005da4: 6829 ldr r1, [r5, #0] + 8005da6: 430b orrs r3, r1 + 8005da8: 6aa9 ldr r1, [r5, #40] ; 0x28 + 8005daa: ea43 0381 orr.w r3, r3, r1, lsl #2 + (heth->Instance)->DMABMR = (uint32_t)(((uint32_t)dmaconf->AddressAlignedBeats << 25U) | + 8005dae: 7929 ldrb r1, [r5, #4] + (dmaconf->DescriptorSkipLength << 2U) | + 8005db0: ea43 6341 orr.w r3, r3, r1, lsl #25 + (heth->Instance)->DMABMR = (uint32_t)(((uint32_t)dmaconf->AddressAlignedBeats << 25U) | + 8005db4: f443 0300 orr.w r3, r3, #8388608 ; 0x800000 + 8005db8: 6013 str r3, [r2, #0] + tmpreg1 = (heth->Instance)->DMABMR; + 8005dba: 6815 ldr r5, [r2, #0] + HAL_Delay(ETH_REG_WRITE_DELAY); + 8005dbc: f7ff fc3e bl 800563c + (heth->Instance)->DMABMR = tmpreg1; + 8005dc0: 6823 ldr r3, [r4, #0] + 8005dc2: f503 5380 add.w r3, r3, #4096 ; 0x1000 + 8005dc6: 601d str r5, [r3, #0] +} + 8005dc8: bd70 pop {r4, r5, r6, pc} + 8005dca: bf00 nop + 8005dcc: f8de3f23 .word 0xf8de3f23 + +08005dd0 : + __IO uint32_t tmpreg = 0; + 8005dd0: 2300 movs r3, #0 +{ + 8005dd2: b513 push {r0, r1, r4, lr} + __IO uint32_t tmpreg = 0; + 8005dd4: 9301 str r3, [sp, #4] +{ + 8005dd6: 4604 mov r4, r0 + (heth->Instance)->DMAOMR |= ETH_DMAOMR_FTF; + 8005dd8: 6803 ldr r3, [r0, #0] + HAL_Delay(ETH_REG_WRITE_DELAY); + 8005dda: 2001 movs r0, #1 + (heth->Instance)->DMAOMR |= ETH_DMAOMR_FTF; + 8005ddc: f503 5380 add.w r3, r3, #4096 ; 0x1000 + 8005de0: 699a ldr r2, [r3, #24] + 8005de2: f442 1280 orr.w r2, r2, #1048576 ; 0x100000 + 8005de6: 619a str r2, [r3, #24] + tmpreg = (heth->Instance)->DMAOMR; + 8005de8: 699b ldr r3, [r3, #24] + 8005dea: 9301 str r3, [sp, #4] + HAL_Delay(ETH_REG_WRITE_DELAY); + 8005dec: f7ff fc26 bl 800563c + (heth->Instance)->DMAOMR = tmpreg; + 8005df0: 6823 ldr r3, [r4, #0] + 8005df2: 9a01 ldr r2, [sp, #4] + 8005df4: f503 5380 add.w r3, r3, #4096 ; 0x1000 + 8005df8: 619a str r2, [r3, #24] +} + 8005dfa: b002 add sp, #8 + 8005dfc: bd10 pop {r4, pc} + ... + +08005e00 : +{ + 8005e00: e92d 47f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, r9, sl, lr} + uint8_t *buff = NULL; + 8005e04: 2300 movs r3, #0 + descidx = heth->RxDescList.RxBuildDescIdx; + 8005e06: 6e87 ldr r7, [r0, #104] ; 0x68 +{ + 8005e08: 4604 mov r4, r0 + desccount = heth->RxDescList.RxBuildDescCnt; + 8005e0a: 6ec6 ldr r6, [r0, #108] ; 0x6c + uint8_t *buff = NULL; + 8005e0c: 9301 str r3, [sp, #4] + dmarxdesc = (ETH_DMADescTypeDef *)heth->RxDescList.RxDesc[descidx]; + 8005e0e: f107 0312 add.w r3, r7, #18 + uint8_t allocStatus = 1U; + 8005e12: f04f 0801 mov.w r8, #1 + WRITE_REG(dmarxdesc->DESC1, ETH_RX_BUF_SIZE | ETH_DMARXDESC_RCH); + 8005e16: f44f 498c mov.w r9, #17920 ; 0x4600 + dmarxdesc = (ETH_DMADescTypeDef *)heth->RxDescList.RxDesc[descidx]; + 8005e1a: f850 5023 ldr.w r5, [r0, r3, lsl #2] + WRITE_REG(dmarxdesc->DESC1, ETH_DMARXDESC_DIC | ETH_RX_BUF_SIZE | ETH_DMARXDESC_RCH); + 8005e1e: f8df a06c ldr.w sl, [pc, #108] ; 8005e8c + while ((desccount > 0U) && (allocStatus != 0U)) + 8005e22: b116 cbz r6, 8005e2a + 8005e24: f1b8 0f00 cmp.w r8, #0 + 8005e28: d10c bne.n 8005e44 + if (heth->RxDescList.RxBuildDescCnt != desccount) + 8005e2a: 6ee3 ldr r3, [r4, #108] ; 0x6c + 8005e2c: 42b3 cmp r3, r6 + 8005e2e: d006 beq.n 8005e3e + WRITE_REG(heth->Instance->DMARPDR, 0); + 8005e30: 6823 ldr r3, [r4, #0] + 8005e32: 2200 movs r2, #0 + 8005e34: f503 5380 add.w r3, r3, #4096 ; 0x1000 + 8005e38: 609a str r2, [r3, #8] + heth->RxDescList.RxBuildDescCnt = desccount; + 8005e3a: e9c4 761a strd r7, r6, [r4, #104] ; 0x68 +} + 8005e3e: b002 add sp, #8 + 8005e40: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + if (READ_REG(dmarxdesc->BackupAddr0) == 0U) + 8005e44: 6a2b ldr r3, [r5, #32] + 8005e46: b933 cbnz r3, 8005e56 + HAL_ETH_RxAllocateCallback(&buff); + 8005e48: a801 add r0, sp, #4 + 8005e4a: f7fc fae7 bl 800241c + if (buff == NULL) + 8005e4e: 9b01 ldr r3, [sp, #4] + 8005e50: b1cb cbz r3, 8005e86 + WRITE_REG(dmarxdesc->BackupAddr0, (uint32_t)buff); + 8005e52: 622b str r3, [r5, #32] + WRITE_REG(dmarxdesc->DESC2, (uint32_t)buff); + 8005e54: 60ab str r3, [r5, #8] + if (heth->RxDescList.ItMode == 0U) + 8005e56: 6da3 ldr r3, [r4, #88] ; 0x58 + 8005e58: b993 cbnz r3, 8005e80 + WRITE_REG(dmarxdesc->DESC1, ETH_DMARXDESC_DIC | ETH_RX_BUF_SIZE | ETH_DMARXDESC_RCH); + 8005e5a: f8c5 a004 str.w sl, [r5, #4] + 8005e5e: f3bf 8f5f dmb sy + SET_BIT(dmarxdesc->DESC0, ETH_DMARXDESC_OWN); + 8005e62: 682b ldr r3, [r5, #0] + desccount--; + 8005e64: 3e01 subs r6, #1 + SET_BIT(dmarxdesc->DESC0, ETH_DMARXDESC_OWN); + 8005e66: f043 4300 orr.w r3, r3, #2147483648 ; 0x80000000 + 8005e6a: 602b str r3, [r5, #0] + INCR_RX_DESC_INDEX(descidx, 1U); + 8005e6c: 1c7b adds r3, r7, #1 + 8005e6e: 2b03 cmp r3, #3 + 8005e70: bf88 it hi + 8005e72: 1efb subhi r3, r7, #3 + dmarxdesc = (ETH_DMADescTypeDef *)heth->RxDescList.RxDesc[descidx]; + 8005e74: f103 0212 add.w r2, r3, #18 + desccount--; + 8005e78: 461f mov r7, r3 + dmarxdesc = (ETH_DMADescTypeDef *)heth->RxDescList.RxDesc[descidx]; + 8005e7a: f854 5022 ldr.w r5, [r4, r2, lsl #2] + desccount--; + 8005e7e: e7d0 b.n 8005e22 + WRITE_REG(dmarxdesc->DESC1, ETH_RX_BUF_SIZE | ETH_DMARXDESC_RCH); + 8005e80: f8c5 9004 str.w r9, [r5, #4] + 8005e84: e7eb b.n 8005e5e + allocStatus = 0U; + 8005e86: 4698 mov r8, r3 + 8005e88: e7cb b.n 8005e22 + 8005e8a: bf00 nop + 8005e8c: 80004600 .word 0x80004600 + +08005e90 : +{ + 8005e90: b5f0 push {r4, r5, r6, r7, lr} + if (heth == NULL) + 8005e92: 4604 mov r4, r0 +{ + 8005e94: b0a7 sub sp, #156 ; 0x9c + if (heth == NULL) + 8005e96: 2800 cmp r0, #0 + 8005e98: f000 80d7 beq.w 800604a + if (heth->gState == HAL_ETH_STATE_RESET) + 8005e9c: f8d0 3084 ldr.w r3, [r0, #132] ; 0x84 + 8005ea0: b923 cbnz r3, 8005eac + heth->gState = HAL_ETH_STATE_BUSY; + 8005ea2: 2323 movs r3, #35 ; 0x23 + 8005ea4: f8c0 3084 str.w r3, [r0, #132] ; 0x84 + HAL_ETH_MspInit(heth); + 8005ea8: f7fc f9ec bl 8002284 + __HAL_RCC_SYSCFG_CLK_ENABLE(); + 8005eac: 4b6a ldr r3, [pc, #424] ; (8006058 ) + SYSCFG->PMC |= (uint32_t)heth->Init.MediaInterface; + 8005eae: 68a1 ldr r1, [r4, #8] + __HAL_RCC_SYSCFG_CLK_ENABLE(); + 8005eb0: 6c5a ldr r2, [r3, #68] ; 0x44 + 8005eb2: f442 4280 orr.w r2, r2, #16384 ; 0x4000 + 8005eb6: 645a str r2, [r3, #68] ; 0x44 + 8005eb8: 6c5b ldr r3, [r3, #68] ; 0x44 + 8005eba: f403 4380 and.w r3, r3, #16384 ; 0x4000 + 8005ebe: 9301 str r3, [sp, #4] + 8005ec0: 9b01 ldr r3, [sp, #4] + SYSCFG->PMC &= ~(SYSCFG_PMC_MII_RMII_SEL); + 8005ec2: 4b66 ldr r3, [pc, #408] ; (800605c ) + 8005ec4: 685a ldr r2, [r3, #4] + 8005ec6: f422 0200 bic.w r2, r2, #8388608 ; 0x800000 + 8005eca: 605a str r2, [r3, #4] + SYSCFG->PMC |= (uint32_t)heth->Init.MediaInterface; + 8005ecc: 685a ldr r2, [r3, #4] + 8005ece: 430a orrs r2, r1 + 8005ed0: 605a str r2, [r3, #4] + (void)SYSCFG->PMC; + 8005ed2: 685b ldr r3, [r3, #4] + SET_BIT(heth->Instance->DMABMR, ETH_DMABMR_SR); + 8005ed4: 6823 ldr r3, [r4, #0] + 8005ed6: f503 5380 add.w r3, r3, #4096 ; 0x1000 + 8005eda: 681a ldr r2, [r3, #0] + 8005edc: f042 0201 orr.w r2, r2, #1 + 8005ee0: 601a str r2, [r3, #0] + tickstart = HAL_GetTick(); + 8005ee2: f7ff fba5 bl 8005630 + 8005ee6: 4606 mov r6, r0 + while (READ_BIT(heth->Instance->DMABMR, ETH_DMABMR_SR) > 0U) + 8005ee8: 6823 ldr r3, [r4, #0] + 8005eea: f503 5380 add.w r3, r3, #4096 ; 0x1000 + 8005eee: 681d ldr r5, [r3, #0] + 8005ef0: f015 0501 ands.w r5, r5, #1 + 8005ef4: f040 809c bne.w 8006030 + macDefaultConf.ChecksumOffload = ENABLE; + 8005ef8: 2601 movs r6, #1 + macDefaultConf.DuplexMode = ETH_FULLDUPLEX_MODE; + 8005efa: f44f 4280 mov.w r2, #16384 ; 0x4000 + macDefaultConf.Watchdog = ENABLE; + 8005efe: f240 1701 movw r7, #257 ; 0x101 + macDefaultConf.DuplexMode = ETH_FULLDUPLEX_MODE; + 8005f02: f44f 6300 mov.w r3, #2048 ; 0x800 + ETH_SetMACConfig(heth, &macDefaultConf); + 8005f06: a90d add r1, sp, #52 ; 0x34 + 8005f08: 4620 mov r0, r4 + macDefaultConf.ChecksumOffload = ENABLE; + 8005f0a: f88d 6038 strb.w r6, [sp, #56] ; 0x38 + macDefaultConf.ReceiveOwn = ENABLE; + 8005f0e: f8ad 6052 strh.w r6, [sp, #82] ; 0x52 + macDefaultConf.InterPacketGapVal = ETH_INTERFRAMEGAP_96BIT; + 8005f12: 950f str r5, [sp, #60] ; 0x3c + macDefaultConf.LoopbackMode = DISABLE; + 8005f14: f88d 5050 strb.w r5, [sp, #80] ; 0x50 + macDefaultConf.RetryTransmission = DISABLE; + 8005f18: f88d 5054 strb.w r5, [sp, #84] ; 0x54 + macDefaultConf.AutomaticPadCRCStrip = DISABLE; + 8005f1c: f88d 5043 strb.w r5, [sp, #67] ; 0x43 + macDefaultConf.Watchdog = ENABLE; + 8005f20: f8ad 7044 strh.w r7, [sp, #68] ; 0x44 + macDefaultConf.BackOffLimit = ETH_BACKOFFLIMIT_10; + 8005f24: 9516 str r5, [sp, #88] ; 0x58 + macDefaultConf.DeferralCheck = DISABLE; + 8005f26: f88d 505c strb.w r5, [sp, #92] ; 0x5c + macDefaultConf.PauseTime = 0x0U; + 8005f2a: 951f str r5, [sp, #124] ; 0x7c + macDefaultConf.ZeroQuantaPause = DISABLE; + 8005f2c: f88d 5080 strb.w r5, [sp, #128] ; 0x80 + macDefaultConf.PauseLowThreshold = ETH_PAUSELOWTHRESHOLD_MINUS4; + 8005f30: 9521 str r5, [sp, #132] ; 0x84 + macDefaultConf.TransmitFlowControl = DISABLE; + 8005f32: f8ad 5088 strh.w r5, [sp, #136] ; 0x88 + macDefaultConf.ReceiveFlowControl = DISABLE; + 8005f36: f88d 508a strb.w r5, [sp, #138] ; 0x8a + macDefaultConf.DuplexMode = ETH_FULLDUPLEX_MODE; + 8005f3a: e9cd 2312 strd r2, r3, [sp, #72] ; 0x48 + ETH_SetMACConfig(heth, &macDefaultConf); + 8005f3e: f7ff fe83 bl 8005c48 + dmaDefaultConf.BurstMode = ETH_BURSTLENGTH_FIXED; + 8005f42: f44f 3380 mov.w r3, #65536 ; 0x10000 + ETH_SetDMAConfig(heth, &dmaDefaultConf); + 8005f46: 4620 mov r0, r4 + 8005f48: a902 add r1, sp, #8 + dmaDefaultConf.BurstMode = ETH_BURSTLENGTH_FIXED; + 8005f4a: 9304 str r3, [sp, #16] + dmaDefaultConf.TxDMABurstLength = ETH_TXDMABURSTLENGTH_32BEAT; + 8005f4c: f44f 5300 mov.w r3, #8192 ; 0x2000 + dmaDefaultConf.AddressAlignedBeats = ENABLE; + 8005f50: f88d 600c strb.w r6, [sp, #12] + dmaDefaultConf.TransmitStoreForward = ENABLE; + 8005f54: f88d 6016 strb.w r6, [sp, #22] + dmaDefaultConf.DropTCPIPChecksumErrorFrame = ENABLE; + 8005f58: f8ad 7014 strh.w r7, [sp, #20] + dmaDefaultConf.ForwardUndersizedGoodFrames = DISABLE; + 8005f5c: f88d 5026 strb.w r5, [sp, #38] ; 0x26 + dmaDefaultConf.ReceiveThresholdControl = ETH_RECEIVEDTHRESHOLDCONTROL_64BYTES; + 8005f60: 950a str r5, [sp, #40] ; 0x28 + dmaDefaultConf.SecondFrameOperate = ENABLE; + 8005f62: f8ad 702c strh.w r7, [sp, #44] ; 0x2c + dmaDefaultConf.DescriptorSkipLength = 0x0U; + 8005f66: 950c str r5, [sp, #48] ; 0x30 + dmaDefaultConf.DMAArbitration = ETH_DMAARBITRATION_ROUNDROBIN_RXTX_1_1; + 8005f68: 9502 str r5, [sp, #8] + dmaDefaultConf.TransmitThresholdControl = ETH_TRANSMITTHRESHOLDCONTROL_64BYTES; + 8005f6a: e9cd 3506 strd r3, r5, [sp, #24] + dmaDefaultConf.RxDMABurstLength = ETH_RXDMABURSTLENGTH_32BEAT; + 8005f6e: f44f 0380 mov.w r3, #4194304 ; 0x400000 + 8005f72: 9308 str r3, [sp, #32] + dmaDefaultConf.ForwardErrorFrames = DISABLE; + 8005f74: f44f 7380 mov.w r3, #256 ; 0x100 + 8005f78: f8ad 3024 strh.w r3, [sp, #36] ; 0x24 + ETH_SetDMAConfig(heth, &dmaDefaultConf); + 8005f7c: f7ff fed6 bl 8005d2c + WRITE_REG(dmatxdesc->DESC3, (uint32_t)(heth->Init.TxDesc)); + 8005f80: 68e6 ldr r6, [r4, #12] + 8005f82: f104 0c14 add.w ip, r4, #20 + 8005f86: 462a mov r2, r5 + WRITE_REG(dmatxdesc->DESC0, 0x0); + 8005f88: 4628 mov r0, r5 + WRITE_REG(dmatxdesc->DESC3, (uint32_t)(heth->Init.TxDesc)); + 8005f8a: 4633 mov r3, r6 + WRITE_REG(dmatxdesc->DESC0, 0x0); + 8005f8c: 6018 str r0, [r3, #0] + SET_BIT(dmatxdesc->DESC0, ETH_DMATXDESC_TCH); + 8005f8e: 4619 mov r1, r3 + WRITE_REG(dmatxdesc->DESC1, 0x0); + 8005f90: 6058 str r0, [r3, #4] + if (i < ((uint32_t)ETH_TX_DESC_CNT - 1U)) + 8005f92: 2a03 cmp r2, #3 + WRITE_REG(dmatxdesc->DESC2, 0x0); + 8005f94: 6098 str r0, [r3, #8] + WRITE_REG(dmatxdesc->DESC3, 0x0); + 8005f96: 60d8 str r0, [r3, #12] + WRITE_REG(heth->TxDescList.TxDesc[i], (uint32_t)dmatxdesc); + 8005f98: f84c 3f04 str.w r3, [ip, #4]! + SET_BIT(dmatxdesc->DESC0, ETH_DMATXDESC_TCH); + 8005f9c: 681f ldr r7, [r3, #0] + 8005f9e: f447 1780 orr.w r7, r7, #1048576 ; 0x100000 + 8005fa2: f841 7b28 str.w r7, [r1], #40 + if (i < ((uint32_t)ETH_TX_DESC_CNT - 1U)) + 8005fa6: d052 beq.n 800604e + WRITE_REG(dmatxdesc->DESC3, (uint32_t)(heth->Init.TxDesc + i + 1U)); + 8005fa8: 60d9 str r1, [r3, #12] + SET_BIT(dmatxdesc->DESC0, ETH_DMATXDESC_CHECKSUMTCPUDPICMPFULL); + 8005faa: 681f ldr r7, [r3, #0] + for (i = 0; i < (uint32_t)ETH_TX_DESC_CNT; i++) + 8005fac: 3201 adds r2, #1 + SET_BIT(dmatxdesc->DESC0, ETH_DMATXDESC_CHECKSUMTCPUDPICMPFULL); + 8005fae: f447 0740 orr.w r7, r7, #12582912 ; 0xc00000 + for (i = 0; i < (uint32_t)ETH_TX_DESC_CNT; i++) + 8005fb2: 2a04 cmp r2, #4 + SET_BIT(dmatxdesc->DESC0, ETH_DMATXDESC_CHECKSUMTCPUDPICMPFULL); + 8005fb4: 601f str r7, [r3, #0] + for (i = 0; i < (uint32_t)ETH_TX_DESC_CNT; i++) + 8005fb6: 460b mov r3, r1 + 8005fb8: d1e8 bne.n 8005f8c + WRITE_REG(heth->Instance->DMATDLAR, (uint32_t) heth->Init.TxDesc); + 8005fba: 6821 ldr r1, [r4, #0] + heth->TxDescList.CurTxDesc = 0; + 8005fbc: 2200 movs r2, #0 + 8005fbe: f104 0744 add.w r7, r4, #68 ; 0x44 + dmarxdesc->DESC0 = ETH_DMARXDESC_OWN; + 8005fc2: f04f 4c00 mov.w ip, #2147483648 ; 0x80000000 + WRITE_REG(heth->Instance->DMATDLAR, (uint32_t) heth->Init.TxDesc); + 8005fc6: f501 5180 add.w r1, r1, #4096 ; 0x1000 + heth->TxDescList.CurTxDesc = 0; + 8005fca: 62a2 str r2, [r4, #40] ; 0x28 + dmarxdesc->DESC1 = ETH_DMARXDESC_RCH | ETH_RX_BUF_SIZE; + 8005fcc: f44f 4e8c mov.w lr, #17920 ; 0x4600 + WRITE_REG(heth->Instance->DMATDLAR, (uint32_t) heth->Init.TxDesc); + 8005fd0: 610e str r6, [r1, #16] + WRITE_REG(dmarxdesc->DESC3, (uint32_t)(heth->Init.RxDesc)); + 8005fd2: 6926 ldr r6, [r4, #16] + 8005fd4: 4633 mov r3, r6 + WRITE_REG(dmarxdesc->DESC0, 0x0); + 8005fd6: 601a str r2, [r3, #0] + if (i < ((uint32_t)ETH_RX_DESC_CNT - 1U)) + 8005fd8: 2d03 cmp r5, #3 + WRITE_REG(dmarxdesc->DESC1, 0x0); + 8005fda: 605a str r2, [r3, #4] + WRITE_REG(dmarxdesc->DESC2, 0x0); + 8005fdc: 609a str r2, [r3, #8] + WRITE_REG(dmarxdesc->DESC3, 0x0); + 8005fde: 60da str r2, [r3, #12] + dmarxdesc->DESC0 = ETH_DMARXDESC_OWN; + 8005fe0: f8c3 c000 str.w ip, [r3] + dmarxdesc->DESC1 = ETH_DMARXDESC_RCH | ETH_RX_BUF_SIZE; + 8005fe4: f8c3 e004 str.w lr, [r3, #4] + dmarxdesc->DESC1 &= ~ETH_DMARXDESC_DIC; + 8005fe8: 6858 ldr r0, [r3, #4] + 8005fea: f020 4000 bic.w r0, r0, #2147483648 ; 0x80000000 + WRITE_REG(dmarxdesc->BackupAddr1, 0x0); + 8005fee: e9c3 2208 strd r2, r2, [r3, #32] + dmarxdesc->DESC1 &= ~ETH_DMARXDESC_DIC; + 8005ff2: 6058 str r0, [r3, #4] + WRITE_REG(heth->RxDescList.RxDesc[i], (uint32_t)dmarxdesc); + 8005ff4: f103 0028 add.w r0, r3, #40 ; 0x28 + 8005ff8: f847 3f04 str.w r3, [r7, #4]! + if (i < ((uint32_t)ETH_RX_DESC_CNT - 1U)) + 8005ffc: d029 beq.n 8006052 + WRITE_REG(dmarxdesc->DESC3, (uint32_t)(heth->Init.RxDesc + i + 1U)); + 8005ffe: 60d8 str r0, [r3, #12] + for (i = 0; i < (uint32_t)ETH_RX_DESC_CNT; i++) + 8006000: 3501 adds r5, #1 + 8006002: 4603 mov r3, r0 + 8006004: 2d04 cmp r5, #4 + 8006006: d1e6 bne.n 8005fd6 + WRITE_REG(heth->RxDescList.RxDescIdx, 0); + 8006008: 2000 movs r0, #0 + ETH_MACAddressConfig(heth, ETH_MAC_ADDRESS0, heth->Init.MACAddr); + 800600a: 6862 ldr r2, [r4, #4] + (*(__IO uint32_t *)((uint32_t)(ETH_MAC_ADDR_HBASE + MacAddr))) = tmpreg1; + 800600c: 4b14 ldr r3, [pc, #80] ; (8006060 ) + WRITE_REG(heth->RxDescList.ItMode, 0); + 800600e: 65a0 str r0, [r4, #88] ; 0x58 + WRITE_REG(heth->RxDescList.RxDescCnt, 0); + 8006010: e9c4 0017 strd r0, r0, [r4, #92] ; 0x5c + WRITE_REG(heth->RxDescList.RxBuildDescCnt, 0); + 8006014: e9c4 001a strd r0, r0, [r4, #104] ; 0x68 + WRITE_REG(heth->Instance->DMARDLAR, (uint32_t) heth->Init.RxDesc); + 8006018: 60ce str r6, [r1, #12] + tmpreg1 = ((uint32_t)Addr[5U] << 8U) | (uint32_t)Addr[4U]; + 800601a: 8891 ldrh r1, [r2, #4] + (*(__IO uint32_t *)((uint32_t)(ETH_MAC_ADDR_HBASE + MacAddr))) = tmpreg1; + 800601c: 6419 str r1, [r3, #64] ; 0x40 + tmpreg1 = ((uint32_t)Addr[3U] << 24U) | ((uint32_t)Addr[2U] << 16U) | ((uint32_t)Addr[1U] << 8U) | Addr[0U]; + 800601e: 6812 ldr r2, [r2, #0] + (*(__IO uint32_t *)((uint32_t)(ETH_MAC_ADDR_LBASE + MacAddr))) = tmpreg1; + 8006020: 645a str r2, [r3, #68] ; 0x44 + heth->gState = HAL_ETH_STATE_READY; + 8006022: 2310 movs r3, #16 + heth->ErrorCode = HAL_ETH_ERROR_NONE; + 8006024: f8c4 0088 str.w r0, [r4, #136] ; 0x88 + heth->gState = HAL_ETH_STATE_READY; + 8006028: f8c4 3084 str.w r3, [r4, #132] ; 0x84 +} + 800602c: b027 add sp, #156 ; 0x9c + 800602e: bdf0 pop {r4, r5, r6, r7, pc} + if (((HAL_GetTick() - tickstart) > ETH_SWRESET_TIMEOUT)) + 8006030: f7ff fafe bl 8005630 + 8006034: 1b80 subs r0, r0, r6 + 8006036: f5b0 7ffa cmp.w r0, #500 ; 0x1f4 + 800603a: f67f af55 bls.w 8005ee8 + heth->ErrorCode = HAL_ETH_ERROR_TIMEOUT; + 800603e: 2304 movs r3, #4 + 8006040: f8c4 3088 str.w r3, [r4, #136] ; 0x88 + heth->gState = HAL_ETH_STATE_ERROR; + 8006044: 23e0 movs r3, #224 ; 0xe0 + 8006046: f8c4 3084 str.w r3, [r4, #132] ; 0x84 + return HAL_ERROR; + 800604a: 2001 movs r0, #1 + 800604c: e7ee b.n 800602c + WRITE_REG(dmatxdesc->DESC3, (uint32_t)(heth->Init.TxDesc)); + 800604e: 60de str r6, [r3, #12] + 8006050: e7ab b.n 8005faa + WRITE_REG(dmarxdesc->DESC3, (uint32_t)(heth->Init.RxDesc)); + 8006052: 60de str r6, [r3, #12] + 8006054: e7d4 b.n 8006000 + 8006056: bf00 nop + 8006058: 40023800 .word 0x40023800 + 800605c: 40013800 .word 0x40013800 + 8006060: 40028000 .word 0x40028000 + +08006064 : +{ + 8006064: b5f8 push {r3, r4, r5, r6, r7, lr} + if (heth->gState == HAL_ETH_STATE_READY) + 8006066: f8d0 3084 ldr.w r3, [r0, #132] ; 0x84 +{ + 800606a: 4604 mov r4, r0 + 800606c: 2501 movs r5, #1 + if (heth->gState == HAL_ETH_STATE_READY) + 800606e: 2b10 cmp r3, #16 + 8006070: d147 bne.n 8006102 + SET_BIT(heth->Instance->MACIMR, ETH_MACIMR_TSTIM | ETH_MACIMR_PMTIM); + 8006072: 6803 ldr r3, [r0, #0] + heth->gState = HAL_ETH_STATE_BUSY; + 8006074: 2623 movs r6, #35 ; 0x23 + heth->RxDescList.ItMode = 1U; + 8006076: 6585 str r5, [r0, #88] ; 0x58 + heth->gState = HAL_ETH_STATE_BUSY; + 8006078: f8c0 6084 str.w r6, [r0, #132] ; 0x84 + SET_BIT(heth->Instance->MACIMR, ETH_MACIMR_TSTIM | ETH_MACIMR_PMTIM); + 800607c: 6bda ldr r2, [r3, #60] ; 0x3c + 800607e: f442 7202 orr.w r2, r2, #520 ; 0x208 + 8006082: 63da str r2, [r3, #60] ; 0x3c + SET_BIT(heth->Instance->MMCRIMR, ETH_MMCRIMR_RGUFM | ETH_MMCRIMR_RFAEM | \ + 8006084: f8d3 210c ldr.w r2, [r3, #268] ; 0x10c + 8006088: f442 3200 orr.w r2, r2, #131072 ; 0x20000 + 800608c: f042 0260 orr.w r2, r2, #96 ; 0x60 + 8006090: f8c3 210c str.w r2, [r3, #268] ; 0x10c + SET_BIT(heth->Instance->MMCTIMR, ETH_MMCTIMR_TGFM | ETH_MMCTIMR_TGFMSCM | \ + 8006094: f8d3 2110 ldr.w r2, [r3, #272] ; 0x110 + 8006098: f442 1203 orr.w r2, r2, #2146304 ; 0x20c000 + 800609c: f8c3 2110 str.w r2, [r3, #272] ; 0x110 + heth->RxDescList.RxBuildDescCnt = ETH_RX_DESC_CNT; + 80060a0: 2304 movs r3, #4 + 80060a2: 66c3 str r3, [r0, #108] ; 0x6c + ETH_UpdateDescriptor(heth); + 80060a4: f7ff feac bl 8005e00 + SET_BIT(heth->Instance->MACCR, ETH_MACCR_TE); + 80060a8: 6823 ldr r3, [r4, #0] + HAL_Delay(ETH_REG_WRITE_DELAY); + 80060aa: 4628 mov r0, r5 + SET_BIT(heth->Instance->MACCR, ETH_MACCR_TE); + 80060ac: 681a ldr r2, [r3, #0] + 80060ae: f042 0208 orr.w r2, r2, #8 + 80060b2: 601a str r2, [r3, #0] + tmpreg1 = (heth->Instance)->MACCR; + 80060b4: 681f ldr r7, [r3, #0] + HAL_Delay(ETH_REG_WRITE_DELAY); + 80060b6: f7ff fac1 bl 800563c + (heth->Instance)->MACCR = tmpreg1; + 80060ba: 6823 ldr r3, [r4, #0] + HAL_Delay(ETH_REG_WRITE_DELAY); + 80060bc: 4628 mov r0, r5 + (heth->Instance)->MACCR = tmpreg1; + 80060be: 601f str r7, [r3, #0] + SET_BIT(heth->Instance->MACCR, ETH_MACCR_RE); + 80060c0: 681a ldr r2, [r3, #0] + 80060c2: f042 0204 orr.w r2, r2, #4 + 80060c6: 601a str r2, [r3, #0] + tmpreg1 = (heth->Instance)->MACCR; + 80060c8: 681f ldr r7, [r3, #0] + HAL_Delay(ETH_REG_WRITE_DELAY); + 80060ca: f7ff fab7 bl 800563c + (heth->Instance)->MACCR = tmpreg1; + 80060ce: 6823 ldr r3, [r4, #0] + ETH_FlushTransmitFIFO(heth); + 80060d0: 4620 mov r0, r4 + (heth->Instance)->MACCR = tmpreg1; + 80060d2: 601f str r7, [r3, #0] + ETH_FlushTransmitFIFO(heth); + 80060d4: f7ff fe7c bl 8005dd0 + SET_BIT(heth->Instance->DMAOMR, ETH_DMAOMR_ST); + 80060d8: 6823 ldr r3, [r4, #0] + return HAL_OK; + 80060da: 2000 movs r0, #0 + SET_BIT(heth->Instance->DMAOMR, ETH_DMAOMR_ST); + 80060dc: f503 5380 add.w r3, r3, #4096 ; 0x1000 + 80060e0: 699a ldr r2, [r3, #24] + 80060e2: f442 5200 orr.w r2, r2, #8192 ; 0x2000 + 80060e6: 619a str r2, [r3, #24] + SET_BIT(heth->Instance->DMAOMR, ETH_DMAOMR_SR); + 80060e8: 699a ldr r2, [r3, #24] + 80060ea: f042 0202 orr.w r2, r2, #2 + 80060ee: 619a str r2, [r3, #24] + __HAL_ETH_DMA_ENABLE_IT(heth, (ETH_DMAIER_NISE | ETH_DMAIER_RIE | ETH_DMAIER_TIE | + 80060f0: 69da ldr r2, [r3, #28] + 80060f2: f442 32d0 orr.w r2, r2, #106496 ; 0x1a000 + 80060f6: f042 02c1 orr.w r2, r2, #193 ; 0xc1 + 80060fa: 61da str r2, [r3, #28] + heth->gState = HAL_ETH_STATE_STARTED; + 80060fc: f8c4 6084 str.w r6, [r4, #132] ; 0x84 +} + 8006100: bdf8 pop {r3, r4, r5, r6, r7, pc} + return HAL_ERROR; + 8006102: 4628 mov r0, r5 + 8006104: e7fc b.n 8006100 + +08006106 : +{ + 8006106: b538 push {r3, r4, r5, lr} + if (heth->gState == HAL_ETH_STATE_STARTED) + 8006108: f8d0 3084 ldr.w r3, [r0, #132] ; 0x84 +{ + 800610c: 4604 mov r4, r0 + if (heth->gState == HAL_ETH_STATE_STARTED) + 800610e: 2b23 cmp r3, #35 ; 0x23 + 8006110: d13c bne.n 800618c + __HAL_ETH_DMA_DISABLE_IT(heth, (ETH_DMAIER_NISE | ETH_DMAIER_RIE | ETH_DMAIER_TIE | + 8006112: 6801 ldr r1, [r0, #0] + heth->gState = HAL_ETH_STATE_BUSY; + 8006114: f8c0 3084 str.w r3, [r0, #132] ; 0x84 + HAL_Delay(ETH_REG_WRITE_DELAY); + 8006118: 2001 movs r0, #1 + __HAL_ETH_DMA_DISABLE_IT(heth, (ETH_DMAIER_NISE | ETH_DMAIER_RIE | ETH_DMAIER_TIE | + 800611a: f501 5380 add.w r3, r1, #4096 ; 0x1000 + 800611e: 69da ldr r2, [r3, #28] + 8006120: f422 32d0 bic.w r2, r2, #106496 ; 0x1a000 + 8006124: f022 02c1 bic.w r2, r2, #193 ; 0xc1 + 8006128: 61da str r2, [r3, #28] + CLEAR_BIT(heth->Instance->DMAOMR, ETH_DMAOMR_ST); + 800612a: 699a ldr r2, [r3, #24] + 800612c: f422 5200 bic.w r2, r2, #8192 ; 0x2000 + 8006130: 619a str r2, [r3, #24] + CLEAR_BIT(heth->Instance->DMAOMR, ETH_DMAOMR_SR); + 8006132: 699a ldr r2, [r3, #24] + 8006134: f022 0202 bic.w r2, r2, #2 + 8006138: 619a str r2, [r3, #24] + CLEAR_BIT(heth->Instance->MACCR, ETH_MACCR_RE); + 800613a: 680b ldr r3, [r1, #0] + 800613c: f023 0304 bic.w r3, r3, #4 + 8006140: 600b str r3, [r1, #0] + tmpreg1 = (heth->Instance)->MACCR; + 8006142: 680d ldr r5, [r1, #0] + HAL_Delay(ETH_REG_WRITE_DELAY); + 8006144: f7ff fa7a bl 800563c + (heth->Instance)->MACCR = tmpreg1; + 8006148: 6823 ldr r3, [r4, #0] + ETH_FlushTransmitFIFO(heth); + 800614a: 4620 mov r0, r4 + (heth->Instance)->MACCR = tmpreg1; + 800614c: 601d str r5, [r3, #0] + ETH_FlushTransmitFIFO(heth); + 800614e: f7ff fe3f bl 8005dd0 + CLEAR_BIT(heth->Instance->MACCR, ETH_MACCR_TE); + 8006152: 6823 ldr r3, [r4, #0] + HAL_Delay(ETH_REG_WRITE_DELAY); + 8006154: 2001 movs r0, #1 + CLEAR_BIT(heth->Instance->MACCR, ETH_MACCR_TE); + 8006156: 681a ldr r2, [r3, #0] + 8006158: f022 0208 bic.w r2, r2, #8 + 800615c: 601a str r2, [r3, #0] + tmpreg1 = (heth->Instance)->MACCR; + 800615e: 681d ldr r5, [r3, #0] + HAL_Delay(ETH_REG_WRITE_DELAY); + 8006160: f7ff fa6c bl 800563c + (heth->Instance)->MACCR = tmpreg1; + 8006164: 4623 mov r3, r4 + 8006166: f104 0054 add.w r0, r4, #84 ; 0x54 + 800616a: f853 2b44 ldr.w r2, [r3], #68 + 800616e: 6015 str r5, [r2, #0] + dmarxdesc = (ETH_DMADescTypeDef *)heth->RxDescList.RxDesc[descindex]; + 8006170: f853 1f04 ldr.w r1, [r3, #4]! + SET_BIT(dmarxdesc->DESC1, ETH_DMARXDESC_DIC); + 8006174: 684a ldr r2, [r1, #4] + for (descindex = 0; descindex < (uint32_t)ETH_RX_DESC_CNT; descindex++) + 8006176: 4298 cmp r0, r3 + SET_BIT(dmarxdesc->DESC1, ETH_DMARXDESC_DIC); + 8006178: f042 4200 orr.w r2, r2, #2147483648 ; 0x80000000 + 800617c: 604a str r2, [r1, #4] + for (descindex = 0; descindex < (uint32_t)ETH_RX_DESC_CNT; descindex++) + 800617e: d1f7 bne.n 8006170 + heth->RxDescList.ItMode = 0U; + 8006180: 2000 movs r0, #0 + heth->gState = HAL_ETH_STATE_READY; + 8006182: 2310 movs r3, #16 + heth->RxDescList.ItMode = 0U; + 8006184: 65a0 str r0, [r4, #88] ; 0x58 + heth->gState = HAL_ETH_STATE_READY; + 8006186: f8c4 3084 str.w r3, [r4, #132] ; 0x84 +} + 800618a: bd38 pop {r3, r4, r5, pc} + return HAL_ERROR; + 800618c: 2001 movs r0, #1 + 800618e: e7fc b.n 800618a + +08006190 : +{ + 8006190: b510 push {r4, lr} + 8006192: 4604 mov r4, r0 + if (pTxConfig == NULL) + 8006194: b939 cbnz r1, 80061a6 + heth->ErrorCode |= HAL_ETH_ERROR_PARAM; + 8006196: f8d0 3088 ldr.w r3, [r0, #136] ; 0x88 + 800619a: f043 0301 orr.w r3, r3, #1 + heth->ErrorCode |= HAL_ETH_ERROR_BUSY; + 800619e: f8c4 3088 str.w r3, [r4, #136] ; 0x88 + return HAL_ERROR; + 80061a2: 2001 movs r0, #1 + 80061a4: e025 b.n 80061f2 + if (heth->gState == HAL_ETH_STATE_STARTED) + 80061a6: f8d0 2084 ldr.w r2, [r0, #132] ; 0x84 + 80061aa: 2a23 cmp r2, #35 ; 0x23 + 80061ac: d1f9 bne.n 80061a2 + heth->TxDescList.CurrentPacketAddress = (uint32_t *)pTxConfig->pData; + 80061ae: 6b4b ldr r3, [r1, #52] ; 0x34 + if (ETH_Prepare_Tx_Descriptors(heth, pTxConfig, 1) != HAL_ETH_ERROR_NONE) + 80061b0: 2201 movs r2, #1 + heth->TxDescList.CurrentPacketAddress = (uint32_t *)pTxConfig->pData; + 80061b2: 63c3 str r3, [r0, #60] ; 0x3c + if (ETH_Prepare_Tx_Descriptors(heth, pTxConfig, 1) != HAL_ETH_ERROR_NONE) + 80061b4: f7ff fca0 bl 8005af8 + 80061b8: b120 cbz r0, 80061c4 + heth->ErrorCode |= HAL_ETH_ERROR_BUSY; + 80061ba: f8d4 3088 ldr.w r3, [r4, #136] ; 0x88 + 80061be: f043 0302 orr.w r3, r3, #2 + 80061c2: e7ec b.n 800619e + __ASM volatile ("dsb 0xF":::"memory"); + 80061c4: f3bf 8f4f dsb sy + INCR_TX_DESC_INDEX(heth->TxDescList.CurTxDesc, 1U); + 80061c8: 6aa3 ldr r3, [r4, #40] ; 0x28 + 80061ca: 1c5a adds r2, r3, #1 + 80061cc: 2a03 cmp r2, #3 + 80061ce: bf8c ite hi + 80061d0: 3b03 subhi r3, #3 + 80061d2: 62a2 strls r2, [r4, #40] ; 0x28 + 80061d4: f04f 0200 mov.w r2, #0 + 80061d8: bf88 it hi + 80061da: 62a3 strhi r3, [r4, #40] ; 0x28 + if (((heth->Instance)->DMASR & ETH_DMASR_TBUS) != (uint32_t)RESET) + 80061dc: 6823 ldr r3, [r4, #0] + 80061de: f503 5380 add.w r3, r3, #4096 ; 0x1000 + 80061e2: 6958 ldr r0, [r3, #20] + 80061e4: f010 0004 ands.w r0, r0, #4 + 80061e8: d003 beq.n 80061f2 + (heth->Instance)->DMASR = ETH_DMASR_TBUS; + 80061ea: 2104 movs r1, #4 + return HAL_OK; + 80061ec: 4610 mov r0, r2 + (heth->Instance)->DMASR = ETH_DMASR_TBUS; + 80061ee: 6159 str r1, [r3, #20] + (heth->Instance)->DMATPDR = 0U; + 80061f0: 605a str r2, [r3, #4] +} + 80061f2: bd10 pop {r4, pc} + +080061f4 : +{ + 80061f4: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 80061f8: 4604 mov r4, r0 + 80061fa: b085 sub sp, #20 + if (pAppBuff == NULL) + 80061fc: 468a mov sl, r1 + 80061fe: b949 cbnz r1, 8006214 + heth->ErrorCode |= HAL_ETH_ERROR_PARAM; + 8006200: f8d0 3088 ldr.w r3, [r0, #136] ; 0x88 + 8006204: f043 0301 orr.w r3, r3, #1 + 8006208: f8c0 3088 str.w r3, [r0, #136] ; 0x88 + return HAL_ERROR; + 800620c: 2001 movs r0, #1 +} + 800620e: b005 add sp, #20 + 8006210: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + if (heth->gState != HAL_ETH_STATE_STARTED) + 8006214: f8d0 3084 ldr.w r3, [r0, #132] ; 0x84 + 8006218: 2b23 cmp r3, #35 ; 0x23 + 800621a: d1f7 bne.n 800620c + descidx = heth->RxDescList.RxDescIdx; + 800621c: f8d0 905c ldr.w r9, [r0, #92] ; 0x5c + uint8_t rxdataready = 0U; + 8006220: f04f 0800 mov.w r8, #0 + HAL_ETH_RxLinkCallback(&heth->RxDescList.pRxStart, &heth->RxDescList.pRxEnd, + 8006224: f100 0180 add.w r1, r0, #128 ; 0x80 + dmarxdesc = (ETH_DMADescTypeDef *)heth->RxDescList.RxDesc[descidx]; + 8006228: f109 0312 add.w r3, r9, #18 + uint32_t desccnt = 0U; + 800622c: 4646 mov r6, r8 + dmarxdesc->BackupAddr0 = 0; + 800622e: 46c3 mov fp, r8 + dmarxdesc = (ETH_DMADescTypeDef *)heth->RxDescList.RxDesc[descidx]; + 8006230: f850 5023 ldr.w r5, [r0, r3, lsl #2] + HAL_ETH_RxLinkCallback(&heth->RxDescList.pRxStart, &heth->RxDescList.pRxEnd, + 8006234: 307c adds r0, #124 ; 0x7c + desccntmax = ETH_RX_DESC_CNT - heth->RxDescList.RxBuildDescCnt; + 8006236: f850 3c10 ldr.w r3, [r0, #-16] + 800623a: f1c3 0304 rsb r3, r3, #4 + 800623e: 9301 str r3, [sp, #4] + while ((READ_BIT(dmarxdesc->DESC0, ETH_DMARXDESC_OWN) == (uint32_t)RESET) && (desccnt < desccntmax) + 8006240: 682b ldr r3, [r5, #0] + && (rxdataready == 0U)) + 8006242: 2b00 cmp r3, #0 + 8006244: db05 blt.n 8006252 + while ((READ_BIT(dmarxdesc->DESC0, ETH_DMARXDESC_OWN) == (uint32_t)RESET) && (desccnt < desccntmax) + 8006246: 9b01 ldr r3, [sp, #4] + 8006248: 429e cmp r6, r3 + 800624a: d002 beq.n 8006252 + && (rxdataready == 0U)) + 800624c: f1b8 0f00 cmp.w r8, #0 + 8006250: d011 beq.n 8006276 + heth->RxDescList.RxBuildDescCnt += desccnt; + 8006252: 6ee3 ldr r3, [r4, #108] ; 0x6c + 8006254: 441e add r6, r3 + 8006256: 66e6 str r6, [r4, #108] ; 0x6c + if ((heth->RxDescList.RxBuildDescCnt) != 0U) + 8006258: b116 cbz r6, 8006260 + ETH_UpdateDescriptor(heth); + 800625a: 4620 mov r0, r4 + 800625c: f7ff fdd0 bl 8005e00 + heth->RxDescList.RxDescIdx = descidx; + 8006260: f8c4 905c str.w r9, [r4, #92] ; 0x5c + if (rxdataready == 1U) + 8006264: f1b8 0f00 cmp.w r8, #0 + 8006268: d0d0 beq.n 800620c + *pAppBuff = heth->RxDescList.pRxStart; + 800626a: 6fe3 ldr r3, [r4, #124] ; 0x7c + heth->RxDescList.pRxStart = NULL; + 800626c: 2000 movs r0, #0 + *pAppBuff = heth->RxDescList.pRxStart; + 800626e: f8ca 3000 str.w r3, [sl] + heth->RxDescList.pRxStart = NULL; + 8006272: 67e0 str r0, [r4, #124] ; 0x7c + return HAL_OK; + 8006274: e7cb b.n 800620e + if (READ_BIT(dmarxdesc->DESC0, ETH_DMARXDESC_LS) != (uint32_t)RESET) + 8006276: 682b ldr r3, [r5, #0] + 8006278: 05db lsls r3, r3, #23 + 800627a: d503 bpl.n 8006284 + heth->RxDescList.TimeStamp.TimeStampHigh = dmarxdesc->DESC6; + 800627c: 69ab ldr r3, [r5, #24] + 800627e: 67a3 str r3, [r4, #120] ; 0x78 + heth->RxDescList.TimeStamp.TimeStampLow = dmarxdesc->DESC7; + 8006280: 69eb ldr r3, [r5, #28] + 8006282: 6763 str r3, [r4, #116] ; 0x74 + if ((READ_BIT(dmarxdesc->DESC0, ETH_DMARXDESC_FS) != (uint32_t)RESET) || (heth->RxDescList.pRxStart != NULL)) + 8006284: 682b ldr r3, [r5, #0] + 8006286: 059f lsls r7, r3, #22 + 8006288: d401 bmi.n 800628e + 800628a: 6fe3 ldr r3, [r4, #124] ; 0x7c + 800628c: b30b cbz r3, 80062d2 + if (READ_BIT(dmarxdesc->DESC0, ETH_DMARXDESC_FS) != (uint32_t)RESET) + 800628e: 682b ldr r3, [r5, #0] + bufflength = heth->Init.RxBuffLen; + 8006290: 6967 ldr r7, [r4, #20] + if (READ_BIT(dmarxdesc->DESC0, ETH_DMARXDESC_FS) != (uint32_t)RESET) + 8006292: 059a lsls r2, r3, #22 + if (READ_BIT(dmarxdesc->DESC0, ETH_DMARXDESC_LS) != (uint32_t)RESET) + 8006294: 682b ldr r3, [r5, #0] + heth->RxDescList.RxDataLength = 0; + 8006296: bf48 it mi + 8006298: e9c4 bb18 strdmi fp, fp, [r4, #96] ; 0x60 + if (READ_BIT(dmarxdesc->DESC0, ETH_DMARXDESC_LS) != (uint32_t)RESET) + 800629c: 05db lsls r3, r3, #23 + 800629e: d507 bpl.n 80062b0 + bufflength = ((dmarxdesc->DESC0 & ETH_DMARXDESC_FL) >> ETH_DMARXDESC_FRAMELENGTHSHIFT) - 4U; + 80062a0: 682f ldr r7, [r5, #0] + rxdataready = 1; + 80062a2: f04f 0801 mov.w r8, #1 + heth->RxDescList.pRxLastRxDesc = dmarxdesc->DESC0; + 80062a6: 682b ldr r3, [r5, #0] + bufflength = ((dmarxdesc->DESC0 & ETH_DMARXDESC_FL) >> ETH_DMARXDESC_FRAMELENGTHSHIFT) - 4U; + 80062a8: f3c7 470d ubfx r7, r7, #16, #14 + heth->RxDescList.pRxLastRxDesc = dmarxdesc->DESC0; + 80062ac: 6723 str r3, [r4, #112] ; 0x70 + bufflength = ((dmarxdesc->DESC0 & ETH_DMARXDESC_FL) >> ETH_DMARXDESC_FRAMELENGTHSHIFT) - 4U; + 80062ae: 3f04 subs r7, #4 + WRITE_REG(dmarxdesc->BackupAddr0, dmarxdesc->DESC2); + 80062b0: 68aa ldr r2, [r5, #8] + HAL_ETH_RxLinkCallback(&heth->RxDescList.pRxStart, &heth->RxDescList.pRxEnd, + 80062b2: b2bb uxth r3, r7 + WRITE_REG(dmarxdesc->BackupAddr0, dmarxdesc->DESC2); + 80062b4: 622a str r2, [r5, #32] + HAL_ETH_RxLinkCallback(&heth->RxDescList.pRxStart, &heth->RxDescList.pRxEnd, + 80062b6: e9cd 0102 strd r0, r1, [sp, #8] + 80062ba: f7fc f8d1 bl 8002460 + heth->RxDescList.RxDescCnt++; + 80062be: 6e23 ldr r3, [r4, #96] ; 0x60 + 80062c0: 3301 adds r3, #1 + 80062c2: 6623 str r3, [r4, #96] ; 0x60 + heth->RxDescList.RxDataLength += bufflength; + 80062c4: 6e63 ldr r3, [r4, #100] ; 0x64 + dmarxdesc->BackupAddr0 = 0; + 80062c6: e9dd 0102 ldrd r0, r1, [sp, #8] + heth->RxDescList.RxDataLength += bufflength; + 80062ca: 443b add r3, r7 + 80062cc: 6663 str r3, [r4, #100] ; 0x64 + dmarxdesc->BackupAddr0 = 0; + 80062ce: f8c5 b020 str.w fp, [r5, #32] + INCR_RX_DESC_INDEX(descidx, 1U); + 80062d2: f109 0301 add.w r3, r9, #1 + desccnt++; + 80062d6: 3601 adds r6, #1 + INCR_RX_DESC_INDEX(descidx, 1U); + 80062d8: 2b03 cmp r3, #3 + 80062da: bf88 it hi + 80062dc: f1a9 0303 subhi.w r3, r9, #3 + dmarxdesc = (ETH_DMADescTypeDef *)heth->RxDescList.RxDesc[descidx]; + 80062e0: f103 0212 add.w r2, r3, #18 + desccnt++; + 80062e4: 4699 mov r9, r3 + dmarxdesc = (ETH_DMADescTypeDef *)heth->RxDescList.RxDesc[descidx]; + 80062e6: f854 5022 ldr.w r5, [r4, r2, lsl #2] + desccnt++; + 80062ea: e7a9 b.n 8006240 + +080062ec : +{ + 80062ec: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} + 80062f0: 4605 mov r5, r0 + uint8_t pktTxStatus = 1U; + 80062f2: 2701 movs r7, #1 + if ((heth->Init.TxDesc[idx].DESC0 & ETH_DMATXDESC_OWN) == 0U) + 80062f4: f04f 0928 mov.w r9, #40 ; 0x28 + 80062f8: f04f 0a00 mov.w sl, #0 + uint32_t idx = dmatxdesclist->releaseIndex; + 80062fc: e9d0 6410 ldrd r6, r4, [r0, #64] ; 0x40 + while ((numOfBuf != 0U) && (pktTxStatus != 0U)) + 8006300: b106 cbz r6, 8006304 + 8006302: b917 cbnz r7, 800630a +} + 8006304: 2000 movs r0, #0 + 8006306: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + numOfBuf--; + 800630a: eb05 0884 add.w r8, r5, r4, lsl #2 + 800630e: 3e01 subs r6, #1 + if (dmatxdesclist->PacketAddress[idx] == NULL) + 8006310: f8d8 002c ldr.w r0, [r8, #44] ; 0x2c + 8006314: b138 cbz r0, 8006326 + if ((heth->Init.TxDesc[idx].DESC0 & ETH_DMATXDESC_OWN) == 0U) + 8006316: fb09 f304 mul.w r3, r9, r4 + 800631a: 68ea ldr r2, [r5, #12] + 800631c: 58d3 ldr r3, [r2, r3] + 800631e: 2b00 cmp r3, #0 + 8006320: da05 bge.n 800632e + pktTxStatus = 0U; + 8006322: 2700 movs r7, #0 + 8006324: e7ec b.n 8006300 + idx = (idx + 1U) & (ETH_TX_DESC_CNT - 1U); + 8006326: 3401 adds r4, #1 + 8006328: f004 0403 and.w r4, r4, #3 + if (pktInUse != 0U) + 800632c: e7e8 b.n 8006300 + idx = (idx + 1U) & (ETH_TX_DESC_CNT - 1U); + 800632e: 3401 adds r4, #1 + HAL_ETH_TxFreeCallback(dmatxdesclist->PacketAddress[idx]); + 8006330: f7fc f8c0 bl 80024b4 + dmatxdesclist->PacketAddress[idx] = NULL; + 8006334: f8c8 a02c str.w sl, [r8, #44] ; 0x2c + idx = (idx + 1U) & (ETH_TX_DESC_CNT - 1U); + 8006338: f004 0403 and.w r4, r4, #3 + dmatxdesclist->releaseIndex = idx; + 800633c: e9c5 6410 strd r6, r4, [r5, #64] ; 0x40 + 8006340: e7de b.n 8006300 + +08006342 : + 8006342: 4770 bx lr + +08006344 : + 8006344: 4770 bx lr + ... + +08006348 : + if (__HAL_ETH_DMA_GET_IT(heth, ETH_DMASR_RS)) + 8006348: 6803 ldr r3, [r0, #0] + 800634a: f503 5380 add.w r3, r3, #4096 ; 0x1000 + 800634e: 695a ldr r2, [r3, #20] + 8006350: 0651 lsls r1, r2, #25 +{ + 8006352: b510 push {r4, lr} + 8006354: 4604 mov r4, r0 + if (__HAL_ETH_DMA_GET_IT(heth, ETH_DMASR_RS)) + 8006356: d506 bpl.n 8006366 + if (__HAL_ETH_DMA_GET_IT_SOURCE(heth, ETH_DMAIER_RIE)) + 8006358: 69da ldr r2, [r3, #28] + 800635a: 0652 lsls r2, r2, #25 + 800635c: d503 bpl.n 8006366 + __HAL_ETH_DMA_CLEAR_IT(heth, ETH_DMASR_RS | ETH_DMASR_NIS); + 800635e: 4a2e ldr r2, [pc, #184] ; (8006418 ) + 8006360: 615a str r2, [r3, #20] + HAL_ETH_RxCpltCallback(heth); + 8006362: f7fb fe8f bl 8002084 + if (__HAL_ETH_DMA_GET_IT(heth, ETH_DMASR_TS)) + 8006366: 6823 ldr r3, [r4, #0] + 8006368: f503 5380 add.w r3, r3, #4096 ; 0x1000 + 800636c: 695a ldr r2, [r3, #20] + 800636e: 07d0 lsls r0, r2, #31 + 8006370: d508 bpl.n 8006384 + if (__HAL_ETH_DMA_GET_IT_SOURCE(heth, ETH_DMAIER_TIE)) + 8006372: 69da ldr r2, [r3, #28] + 8006374: 07d1 lsls r1, r2, #31 + 8006376: d505 bpl.n 8006384 + __HAL_ETH_DMA_CLEAR_IT(heth, ETH_DMASR_TS | ETH_DMASR_NIS); + 8006378: f04f 1201 mov.w r2, #65537 ; 0x10001 + HAL_ETH_TxCpltCallback(heth); + 800637c: 4620 mov r0, r4 + __HAL_ETH_DMA_CLEAR_IT(heth, ETH_DMASR_TS | ETH_DMASR_NIS); + 800637e: 615a str r2, [r3, #20] + HAL_ETH_TxCpltCallback(heth); + 8006380: f7fb fe86 bl 8002090 + if (__HAL_ETH_DMA_GET_IT(heth, ETH_DMASR_AIS)) + 8006384: 6823 ldr r3, [r4, #0] + 8006386: f503 5380 add.w r3, r3, #4096 ; 0x1000 + 800638a: 695a ldr r2, [r3, #20] + 800638c: 0412 lsls r2, r2, #16 + 800638e: d521 bpl.n 80063d4 + if (__HAL_ETH_DMA_GET_IT_SOURCE(heth, ETH_DMAIER_AISE)) + 8006390: 69da ldr r2, [r3, #28] + 8006392: 0410 lsls r0, r2, #16 + 8006394: d51e bpl.n 80063d4 + heth->ErrorCode |= HAL_ETH_ERROR_DMA; + 8006396: f8d4 2088 ldr.w r2, [r4, #136] ; 0x88 + 800639a: f042 0208 orr.w r2, r2, #8 + 800639e: f8c4 2088 str.w r2, [r4, #136] ; 0x88 + if (__HAL_ETH_DMA_GET_IT(heth, ETH_DMASR_FBES)) + 80063a2: 695a ldr r2, [r3, #20] + 80063a4: f412 5f00 tst.w r2, #8192 ; 0x2000 + heth->DMAErrorCode = READ_BIT(heth->Instance->DMASR, (ETH_DMASR_FBES | ETH_DMASR_TPS | ETH_DMASR_RPS)); + 80063a8: 695a ldr r2, [r3, #20] + if (__HAL_ETH_DMA_GET_IT(heth, ETH_DMASR_FBES)) + 80063aa: d02d beq.n 8006408 + heth->DMAErrorCode = READ_BIT(heth->Instance->DMASR, (ETH_DMASR_FBES | ETH_DMASR_TPS | ETH_DMASR_RPS)); + 80063ac: f022 427f bic.w r2, r2, #4278190080 ; 0xff000000 + 80063b0: f422 0201 bic.w r2, r2, #8454144 ; 0x810000 + 80063b4: f422 425f bic.w r2, r2, #57088 ; 0xdf00 + 80063b8: f022 02ff bic.w r2, r2, #255 ; 0xff + 80063bc: f8c4 208c str.w r2, [r4, #140] ; 0x8c + __HAL_ETH_DMA_DISABLE_IT(heth, ETH_DMAIER_NISE | ETH_DMAIER_AISE); + 80063c0: 69da ldr r2, [r3, #28] + 80063c2: f422 32c0 bic.w r2, r2, #98304 ; 0x18000 + 80063c6: 61da str r2, [r3, #28] + heth->gState = HAL_ETH_STATE_ERROR; + 80063c8: 23e0 movs r3, #224 ; 0xe0 + 80063ca: f8c4 3084 str.w r3, [r4, #132] ; 0x84 + HAL_ETH_ErrorCallback(heth); + 80063ce: 4620 mov r0, r4 + 80063d0: f7fb fe64 bl 800209c + if (__HAL_ETH_MAC_GET_IT(heth, ETH_MAC_PMT_IT)) + 80063d4: 6823 ldr r3, [r4, #0] + 80063d6: 6b9a ldr r2, [r3, #56] ; 0x38 + 80063d8: 0711 lsls r1, r2, #28 + 80063da: d50a bpl.n 80063f2 + heth->MACWakeUpEvent = READ_BIT(heth->Instance->MACPMTCSR, (ETH_MACPMTCSR_WFR | ETH_MACPMTCSR_MPR)); + 80063dc: 6adb ldr r3, [r3, #44] ; 0x2c + HAL_ETH_PMTCallback(heth); + 80063de: 4620 mov r0, r4 + heth->MACWakeUpEvent = READ_BIT(heth->Instance->MACPMTCSR, (ETH_MACPMTCSR_WFR | ETH_MACPMTCSR_MPR)); + 80063e0: f003 0360 and.w r3, r3, #96 ; 0x60 + 80063e4: f8c4 3094 str.w r3, [r4, #148] ; 0x94 + HAL_ETH_PMTCallback(heth); + 80063e8: f7ff ffab bl 8006342 + heth->MACWakeUpEvent = (uint32_t)(0x0U); + 80063ec: 2300 movs r3, #0 + 80063ee: f8c4 3094 str.w r3, [r4, #148] ; 0x94 + if (__HAL_ETH_WAKEUP_EXTI_GET_FLAG(ETH_WAKEUP_EXTI_LINE) != (uint32_t)RESET) + 80063f2: 4b0a ldr r3, [pc, #40] ; (800641c ) + 80063f4: 695a ldr r2, [r3, #20] + 80063f6: 0312 lsls r2, r2, #12 + 80063f8: d505 bpl.n 8006406 + __HAL_ETH_WAKEUP_EXTI_CLEAR_FLAG(ETH_WAKEUP_EXTI_LINE); + 80063fa: f44f 2200 mov.w r2, #524288 ; 0x80000 + HAL_ETH_WakeUpCallback(heth); + 80063fe: 4620 mov r0, r4 + __HAL_ETH_WAKEUP_EXTI_CLEAR_FLAG(ETH_WAKEUP_EXTI_LINE); + 8006400: 615a str r2, [r3, #20] + HAL_ETH_WakeUpCallback(heth); + 8006402: f7ff ff9f bl 8006344 +} + 8006406: bd10 pop {r4, pc} + heth->DMAErrorCode = READ_BIT(heth->Instance->DMASR, (ETH_DMASR_ETS | ETH_DMASR_RWTS | + 8006408: f248 6180 movw r1, #34432 ; 0x8680 + 800640c: 400a ands r2, r1 + 800640e: f8c4 208c str.w r2, [r4, #140] ; 0x8c + __HAL_ETH_DMA_CLEAR_IT(heth, (ETH_DMASR_ETS | ETH_DMASR_RWTS | + 8006412: 6159 str r1, [r3, #20] + 8006414: e7db b.n 80063ce + 8006416: bf00 nop + 8006418: 00010040 .word 0x00010040 + 800641c: 40013c00 .word 0x40013c00 + +08006420 : +{ + 8006420: b5f8 push {r3, r4, r5, r6, r7, lr} + 8006422: 4605 mov r5, r0 + tmpreg1 = heth->Instance->MACMIIAR; + 8006424: 6800 ldr r0, [r0, #0] +{ + 8006426: 461e mov r6, r3 + tmpreg1 |= (((uint32_t)PHYReg << 6U) & ETH_MACMIIAR_MR); /* Set the PHY register address */ + 8006428: 0192 lsls r2, r2, #6 + tmpreg1 = heth->Instance->MACMIIAR; + 800642a: 6903 ldr r3, [r0, #16] + tmpreg1 |= ((PHYAddr << 11U) & ETH_MACMIIAR_PA); /* Set the PHY device address */ + 800642c: 02cc lsls r4, r1, #11 + tmpreg1 |= (((uint32_t)PHYReg << 6U) & ETH_MACMIIAR_MR); /* Set the PHY register address */ + 800642e: f402 62f8 and.w r2, r2, #1984 ; 0x7c0 + tmpreg1 &= ~ETH_MACMIIAR_CR_MASK; + 8006432: f003 031c and.w r3, r3, #28 + tmpreg1 |= ((PHYAddr << 11U) & ETH_MACMIIAR_PA); /* Set the PHY device address */ + 8006436: b2a4 uxth r4, r4 + 8006438: 431a orrs r2, r3 + tmpreg1 |= (((uint32_t)PHYReg << 6U) & ETH_MACMIIAR_MR); /* Set the PHY register address */ + 800643a: 4314 orrs r4, r2 + tmpreg1 |= ETH_MACMIIAR_MB; /* Set the MII Busy bit */ + 800643c: f044 0401 orr.w r4, r4, #1 + heth->Instance->MACMIIAR = tmpreg1; + 8006440: 6104 str r4, [r0, #16] + tickstart = HAL_GetTick(); + 8006442: f7ff f8f5 bl 8005630 + 8006446: 4607 mov r7, r0 + while ((tmpreg1 & ETH_MACMIIAR_MB) == ETH_MACMIIAR_MB) + 8006448: f014 0401 ands.w r4, r4, #1 + 800644c: d105 bne.n 800645a + *pRegValue = (uint16_t)(heth->Instance->MACMIIDR); + 800644e: 682b ldr r3, [r5, #0] + return HAL_OK; + 8006450: 4620 mov r0, r4 + *pRegValue = (uint16_t)(heth->Instance->MACMIIDR); + 8006452: 695b ldr r3, [r3, #20] + 8006454: b29b uxth r3, r3 + 8006456: 6033 str r3, [r6, #0] +} + 8006458: bdf8 pop {r3, r4, r5, r6, r7, pc} + if ((HAL_GetTick() - tickstart) > PHY_READ_TO) + 800645a: f7ff f8e9 bl 8005630 + 800645e: 1bc0 subs r0, r0, r7 + 8006460: f5b0 3f80 cmp.w r0, #65536 ; 0x10000 + 8006464: d202 bcs.n 800646c + tmpreg1 = heth->Instance->MACMIIAR; + 8006466: 682b ldr r3, [r5, #0] + 8006468: 691c ldr r4, [r3, #16] + 800646a: e7ed b.n 8006448 + return HAL_ERROR; + 800646c: 2001 movs r0, #1 + 800646e: e7f3 b.n 8006458 + +08006470 : +{ + 8006470: b570 push {r4, r5, r6, lr} + 8006472: 4605 mov r5, r0 + tmpreg1 = heth->Instance->MACMIIAR; + 8006474: 6800 ldr r0, [r0, #0] + tmpreg1 |= (((uint32_t)PHYReg << 6U) & ETH_MACMIIAR_MR); /* Set the PHY register address */ + 8006476: 0192 lsls r2, r2, #6 + tmpreg1 = heth->Instance->MACMIIAR; + 8006478: 6904 ldr r4, [r0, #16] + tmpreg1 |= (((uint32_t)PHYReg << 6U) & ETH_MACMIIAR_MR); /* Set the PHY register address */ + 800647a: b29b uxth r3, r3 + 800647c: f402 62f8 and.w r2, r2, #1984 ; 0x7c0 + tmpreg1 &= ~ETH_MACMIIAR_CR_MASK; + 8006480: f004 041c and.w r4, r4, #28 + heth->Instance->MACMIIDR = (uint16_t)RegValue; + 8006484: 6143 str r3, [r0, #20] + 8006486: 4322 orrs r2, r4 + tmpreg1 |= ((PHYAddr << 11U) & ETH_MACMIIAR_PA); /* Set the PHY device address */ + 8006488: 02cc lsls r4, r1, #11 + 800648a: b2a4 uxth r4, r4 + tmpreg1 |= (((uint32_t)PHYReg << 6U) & ETH_MACMIIAR_MR); /* Set the PHY register address */ + 800648c: 4314 orrs r4, r2 + tmpreg1 |= ETH_MACMIIAR_MB; /* Set the MII Busy bit */ + 800648e: f044 0403 orr.w r4, r4, #3 + heth->Instance->MACMIIAR = tmpreg1; + 8006492: 6104 str r4, [r0, #16] + tickstart = HAL_GetTick(); + 8006494: f7ff f8cc bl 8005630 + 8006498: 4606 mov r6, r0 + while ((tmpreg1 & ETH_MACMIIAR_MB) == ETH_MACMIIAR_MB) + 800649a: f014 0401 ands.w r4, r4, #1 + 800649e: d101 bne.n 80064a4 + return HAL_OK; + 80064a0: 4620 mov r0, r4 +} + 80064a2: bd70 pop {r4, r5, r6, pc} + if ((HAL_GetTick() - tickstart) > PHY_WRITE_TO) + 80064a4: f7ff f8c4 bl 8005630 + 80064a8: 1b80 subs r0, r0, r6 + 80064aa: f5b0 3f80 cmp.w r0, #65536 ; 0x10000 + 80064ae: d202 bcs.n 80064b6 + tmpreg1 = heth->Instance->MACMIIAR; + 80064b0: 682b ldr r3, [r5, #0] + 80064b2: 691c ldr r4, [r3, #16] + 80064b4: e7f1 b.n 800649a + return HAL_ERROR; + 80064b6: 2001 movs r0, #1 + 80064b8: e7f3 b.n 80064a2 + +080064ba : + if (macconf == NULL) + 80064ba: 2900 cmp r1, #0 + 80064bc: d05d beq.n 800657a + macconf->DeferralCheck = ((READ_BIT(heth->Instance->MACCR, ETH_MACCR_DC) >> 4) > 0U) ? ENABLE : DISABLE; + 80064be: 6803 ldr r3, [r0, #0] + return HAL_OK; + 80064c0: 2000 movs r0, #0 + macconf->DeferralCheck = ((READ_BIT(heth->Instance->MACCR, ETH_MACCR_DC) >> 4) > 0U) ? ENABLE : DISABLE; + 80064c2: 681a ldr r2, [r3, #0] + 80064c4: f3c2 1200 ubfx r2, r2, #4, #1 + 80064c8: f881 2028 strb.w r2, [r1, #40] ; 0x28 + macconf->BackOffLimit = READ_BIT(heth->Instance->MACCR, ETH_MACCR_BL); + 80064cc: 681a ldr r2, [r3, #0] + 80064ce: f002 0260 and.w r2, r2, #96 ; 0x60 + 80064d2: 624a str r2, [r1, #36] ; 0x24 + macconf->RetryTransmission = ((READ_BIT(heth->Instance->MACCR, ETH_MACCR_RD) >> 9) == 0U) ? ENABLE : DISABLE; + 80064d4: 681a ldr r2, [r3, #0] + 80064d6: f482 7200 eor.w r2, r2, #512 ; 0x200 + 80064da: f3c2 2240 ubfx r2, r2, #9, #1 + 80064de: f881 2020 strb.w r2, [r1, #32] + macconf->CarrierSenseDuringTransmit = ((READ_BIT(heth->Instance->MACCR, ETH_MACCR_CSD) >> 16) > 0U) + 80064e2: 681a ldr r2, [r3, #0] + ? ENABLE : DISABLE; + 80064e4: f3c2 4200 ubfx r2, r2, #16, #1 + macconf->CarrierSenseDuringTransmit = ((READ_BIT(heth->Instance->MACCR, ETH_MACCR_CSD) >> 16) > 0U) + 80064e8: 77ca strb r2, [r1, #31] + macconf->ReceiveOwn = ((READ_BIT(heth->Instance->MACCR, ETH_MACCR_ROD) >> 13) == 0U) ? ENABLE : DISABLE; + 80064ea: 681a ldr r2, [r3, #0] + 80064ec: f482 5200 eor.w r2, r2, #8192 ; 0x2000 + 80064f0: f3c2 3240 ubfx r2, r2, #13, #1 + 80064f4: 778a strb r2, [r1, #30] + macconf->LoopbackMode = ((READ_BIT(heth->Instance->MACCR, ETH_MACCR_LM) >> 12) > 0U) ? ENABLE : DISABLE; + 80064f6: 681a ldr r2, [r3, #0] + 80064f8: f3c2 3200 ubfx r2, r2, #12, #1 + 80064fc: 770a strb r2, [r1, #28] + macconf->DuplexMode = READ_BIT(heth->Instance->MACCR, ETH_MACCR_DM); + 80064fe: 681a ldr r2, [r3, #0] + 8006500: f402 6200 and.w r2, r2, #2048 ; 0x800 + 8006504: 618a str r2, [r1, #24] + macconf->Speed = READ_BIT(heth->Instance->MACCR, ETH_MACCR_FES); + 8006506: 681a ldr r2, [r3, #0] + 8006508: f402 4280 and.w r2, r2, #16384 ; 0x4000 + 800650c: 614a str r2, [r1, #20] + macconf->Jabber = ((READ_BIT(heth->Instance->MACCR, ETH_MACCR_JD) >> 22) == 0U) ? ENABLE : DISABLE; + 800650e: 681a ldr r2, [r3, #0] + 8006510: f482 0280 eor.w r2, r2, #4194304 ; 0x400000 + 8006514: f3c2 5280 ubfx r2, r2, #22, #1 + 8006518: 744a strb r2, [r1, #17] + macconf->Watchdog = ((READ_BIT(heth->Instance->MACCR, ETH_MACCR_WD) >> 23) == 0U) ? ENABLE : DISABLE; + 800651a: 681a ldr r2, [r3, #0] + 800651c: f482 0200 eor.w r2, r2, #8388608 ; 0x800000 + 8006520: f3c2 52c0 ubfx r2, r2, #23, #1 + 8006524: 740a strb r2, [r1, #16] + macconf->AutomaticPadCRCStrip = ((READ_BIT(heth->Instance->MACCR, ETH_MACCR_APCS) >> 7) > 0U) ? ENABLE : DISABLE; + 8006526: 681a ldr r2, [r3, #0] + 8006528: f3c2 12c0 ubfx r2, r2, #7, #1 + 800652c: 73ca strb r2, [r1, #15] + macconf->InterPacketGapVal = READ_BIT(heth->Instance->MACCR, ETH_MACCR_IFG); + 800652e: 681a ldr r2, [r3, #0] + 8006530: f402 2260 and.w r2, r2, #917504 ; 0xe0000 + 8006534: 608a str r2, [r1, #8] + macconf->ChecksumOffload = ((READ_BIT(heth->Instance->MACCR, ETH_MACCR_IPCO) >> 10U) > 0U) ? ENABLE : DISABLE; + 8006536: 681a ldr r2, [r3, #0] + 8006538: f3c2 2280 ubfx r2, r2, #10, #1 + 800653c: 710a strb r2, [r1, #4] + macconf->TransmitFlowControl = ((READ_BIT(heth->Instance->MACFCR, ETH_MACFCR_TFCE) >> 1) > 0U) ? ENABLE : DISABLE; + 800653e: 699a ldr r2, [r3, #24] + 8006540: f3c2 0240 ubfx r2, r2, #1, #1 + 8006544: f881 2054 strb.w r2, [r1, #84] ; 0x54 + macconf->ZeroQuantaPause = ((READ_BIT(heth->Instance->MACFCR, ETH_MACFCR_ZQPD) >> 7) == 0U) ? ENABLE : DISABLE; + 8006548: 699a ldr r2, [r3, #24] + 800654a: f082 0280 eor.w r2, r2, #128 ; 0x80 + 800654e: f3c2 12c0 ubfx r2, r2, #7, #1 + 8006552: f881 204c strb.w r2, [r1, #76] ; 0x4c + macconf->PauseLowThreshold = READ_BIT(heth->Instance->MACFCR, ETH_MACFCR_PLT); + 8006556: 699a ldr r2, [r3, #24] + 8006558: f002 0230 and.w r2, r2, #48 ; 0x30 + 800655c: 650a str r2, [r1, #80] ; 0x50 + macconf->PauseTime = (READ_BIT(heth->Instance->MACFCR, ETH_MACFCR_PT) >> 16); + 800655e: 699a ldr r2, [r3, #24] + 8006560: 0c12 lsrs r2, r2, #16 + 8006562: 648a str r2, [r1, #72] ; 0x48 + macconf->ReceiveFlowControl = ((READ_BIT(heth->Instance->MACFCR, ETH_MACFCR_RFCE) >> 2U) > 0U) ? ENABLE : DISABLE; + 8006564: 699a ldr r2, [r3, #24] + 8006566: f3c2 0280 ubfx r2, r2, #2, #1 + 800656a: f881 2056 strb.w r2, [r1, #86] ; 0x56 + macconf->UnicastPausePacketDetect = ((READ_BIT(heth->Instance->MACFCR, ETH_MACFCR_UPFD) >> 3U) > 0U) + 800656e: 699b ldr r3, [r3, #24] + ? ENABLE : DISABLE; + 8006570: f3c3 03c0 ubfx r3, r3, #3, #1 + macconf->UnicastPausePacketDetect = ((READ_BIT(heth->Instance->MACFCR, ETH_MACFCR_UPFD) >> 3U) > 0U) + 8006574: f881 3055 strb.w r3, [r1, #85] ; 0x55 + return HAL_OK; + 8006578: 4770 bx lr + return HAL_ERROR; + 800657a: 2001 movs r0, #1 +} + 800657c: 4770 bx lr + +0800657e : +{ + 800657e: b508 push {r3, lr} + if (macconf == NULL) + 8006580: b139 cbz r1, 8006592 + if (heth->gState == HAL_ETH_STATE_READY) + 8006582: f8d0 3084 ldr.w r3, [r0, #132] ; 0x84 + 8006586: 2b10 cmp r3, #16 + 8006588: d103 bne.n 8006592 + ETH_SetMACConfig(heth, macconf); + 800658a: f7ff fb5d bl 8005c48 + return HAL_OK; + 800658e: 2000 movs r0, #0 +} + 8006590: bd08 pop {r3, pc} + return HAL_ERROR; + 8006592: 2001 movs r0, #1 + 8006594: e7fc b.n 8006590 + ... + +08006598 : +{ + 8006598: b538 push {r3, r4, r5, lr} + tmpreg = (heth->Instance)->MACMIIAR; + 800659a: 6803 ldr r3, [r0, #0] +{ + 800659c: 4605 mov r5, r0 + tmpreg = (heth->Instance)->MACMIIAR; + 800659e: 691c ldr r4, [r3, #16] + hclk = HAL_RCC_GetHCLKFreq(); + 80065a0: f001 fcd0 bl 8007f44 + if ((hclk >= 20000000U) && (hclk < 35000000U)) + 80065a4: 4b11 ldr r3, [pc, #68] ; (80065ec ) + 80065a6: 4a12 ldr r2, [pc, #72] ; (80065f0 ) + tmpreg &= ETH_MACMIIAR_CR_MASK; + 80065a8: f024 041c bic.w r4, r4, #28 + if ((hclk >= 20000000U) && (hclk < 35000000U)) + 80065ac: 4403 add r3, r0 + 80065ae: 4293 cmp r3, r2 + 80065b0: d204 bcs.n 80065bc + tmpreg |= (uint32_t)ETH_MACMIIAR_CR_Div16; + 80065b2: f044 0408 orr.w r4, r4, #8 + (heth->Instance)->MACMIIAR = (uint32_t)tmpreg; + 80065b6: 682b ldr r3, [r5, #0] + 80065b8: 611c str r4, [r3, #16] +} + 80065ba: bd38 pop {r3, r4, r5, pc} + else if ((hclk >= 35000000U) && (hclk < 60000000U)) + 80065bc: 4b0d ldr r3, [pc, #52] ; (80065f4 ) + 80065be: 4a0e ldr r2, [pc, #56] ; (80065f8 ) + 80065c0: 4403 add r3, r0 + 80065c2: 4293 cmp r3, r2 + 80065c4: d802 bhi.n 80065cc + tmpreg |= (uint32_t)ETH_MACMIIAR_CR_Div26; + 80065c6: f044 040c orr.w r4, r4, #12 + 80065ca: e7f4 b.n 80065b6 + else if ((hclk >= 60000000U) && (hclk < 100000000U)) + 80065cc: 4b0b ldr r3, [pc, #44] ; (80065fc ) + 80065ce: 4a0c ldr r2, [pc, #48] ; (8006600 ) + 80065d0: 4403 add r3, r0 + 80065d2: 4293 cmp r3, r2 + 80065d4: d3ef bcc.n 80065b6 + else if ((hclk >= 100000000U) && (hclk < 150000000U)) + 80065d6: 4b0b ldr r3, [pc, #44] ; (8006604 ) + 80065d8: 4a0b ldr r2, [pc, #44] ; (8006608 ) + 80065da: 4403 add r3, r0 + 80065dc: 4293 cmp r3, r2 + tmpreg |= (uint32_t)ETH_MACMIIAR_CR_Div62; + 80065de: bf94 ite ls + 80065e0: f044 0404 orrls.w r4, r4, #4 + tmpreg |= (uint32_t)ETH_MACMIIAR_CR_Div102; + 80065e4: f044 0410 orrhi.w r4, r4, #16 + 80065e8: e7e5 b.n 80065b6 + 80065ea: bf00 nop + 80065ec: feced300 .word 0xfeced300 + 80065f0: 00e4e1c0 .word 0x00e4e1c0 + 80065f4: fde9f140 .word 0xfde9f140 + 80065f8: 017d783f .word 0x017d783f + 80065fc: fc6c7900 .word 0xfc6c7900 + 8006600: 02625a00 .word 0x02625a00 + 8006604: fa0a1f00 .word 0xfa0a1f00 + 8006608: 02faf07f .word 0x02faf07f + +0800660c : + return heth->DMAErrorCode; + 800660c: f8d0 008c ldr.w r0, [r0, #140] ; 0x8c +} + 8006610: 4770 bx lr + ... + +08006614 : + * @param GPIO_Init pointer to a GPIO_InitTypeDef structure that contains + * the configuration information for the specified GPIO peripheral. + * @retval None + */ +void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init) +{ + 8006614: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} + assert_param(IS_GPIO_ALL_INSTANCE(GPIOx)); + assert_param(IS_GPIO_PIN(GPIO_Init->Pin)); + assert_param(IS_GPIO_MODE(GPIO_Init->Mode)); + + /* Configure the port pins */ + for(position = 0; position < GPIO_NUMBER; position++) + 8006618: 2300 movs r3, #0 + /*--------------------- EXTI Mode Configuration ------------------------*/ + /* Configure the External Interrupt or event for the current IO */ + if((GPIO_Init->Mode & EXTI_MODE) != 0x00u) + { + /* Enable SYSCFG Clock */ + __HAL_RCC_SYSCFG_CLK_ENABLE(); + 800661a: f8df 91b8 ldr.w r9, [pc, #440] ; 80067d4 + temp &= ~(((uint32_t)0x0F) << (4 * (position & 0x03))); + temp |= ((uint32_t)(GPIO_GET_INDEX(GPIOx)) << (4 * (position & 0x03))); + SYSCFG->EXTICR[position >> 2] = temp; + + /* Clear Rising Falling edge configuration */ + temp = EXTI->RTSR; + 800661e: 4a6b ldr r2, [pc, #428] ; (80067cc ) + ioposition = ((uint32_t)0x01) << position; + 8006620: 2401 movs r4, #1 + iocurrent = (uint32_t)(GPIO_Init->Pin) & ioposition; + 8006622: 680d ldr r5, [r1, #0] + ioposition = ((uint32_t)0x01) << position; + 8006624: 409c lsls r4, r3 + iocurrent = (uint32_t)(GPIO_Init->Pin) & ioposition; + 8006626: ea04 0c05 and.w ip, r4, r5 + if(iocurrent == ioposition) + 800662a: 43ac bics r4, r5 + 800662c: f040 80b4 bne.w 8006798 + if(((GPIO_Init->Mode & GPIO_MODE) == MODE_OUTPUT) || ((GPIO_Init->Mode & GPIO_MODE) == MODE_AF)) + 8006630: 684d ldr r5, [r1, #4] + 8006632: ea4f 0843 mov.w r8, r3, lsl #1 + temp &= ~(GPIO_OSPEEDER_OSPEEDR0 << (position * 2)); + 8006636: 2603 movs r6, #3 + if(((GPIO_Init->Mode & GPIO_MODE) == MODE_OUTPUT) || ((GPIO_Init->Mode & GPIO_MODE) == MODE_AF)) + 8006638: f005 0403 and.w r4, r5, #3 + temp &= ~(GPIO_OSPEEDER_OSPEEDR0 << (position * 2)); + 800663c: fa06 f608 lsl.w r6, r6, r8 + if(((GPIO_Init->Mode & GPIO_MODE) == MODE_OUTPUT) || ((GPIO_Init->Mode & GPIO_MODE) == MODE_AF)) + 8006640: 1e67 subs r7, r4, #1 + temp &= ~(GPIO_OSPEEDER_OSPEEDR0 << (position * 2)); + 8006642: 43f6 mvns r6, r6 + if(((GPIO_Init->Mode & GPIO_MODE) == MODE_OUTPUT) || ((GPIO_Init->Mode & GPIO_MODE) == MODE_AF)) + 8006644: 2f01 cmp r7, #1 + 8006646: d834 bhi.n 80066b2 + temp = GPIOx->OSPEEDR; + 8006648: 6887 ldr r7, [r0, #8] + temp &= ~(GPIO_OSPEEDER_OSPEEDR0 << (position * 2)); + 800664a: ea07 0e06 and.w lr, r7, r6 + temp |= (GPIO_Init->Speed << (position * 2)); + 800664e: 68cf ldr r7, [r1, #12] + 8006650: fa07 f708 lsl.w r7, r7, r8 + 8006654: ea47 070e orr.w r7, r7, lr + GPIOx->OSPEEDR = temp; + 8006658: 6087 str r7, [r0, #8] + temp = GPIOx->OTYPER; + 800665a: 6847 ldr r7, [r0, #4] + temp &= ~(GPIO_OTYPER_OT_0 << position) ; + 800665c: ea27 0e0c bic.w lr, r7, ip + temp |= (((GPIO_Init->Mode & OUTPUT_TYPE) >> OUTPUT_TYPE_Pos) << position); + 8006660: f3c5 1700 ubfx r7, r5, #4, #1 + 8006664: 409f lsls r7, r3 + 8006666: ea47 070e orr.w r7, r7, lr + GPIOx->OTYPER = temp; + 800666a: 6047 str r7, [r0, #4] + temp = GPIOx->PUPDR; + 800666c: 68c7 ldr r7, [r0, #12] + if((GPIO_Init->Mode & GPIO_MODE) == MODE_AF) + 800666e: 2c02 cmp r4, #2 + temp &= ~(GPIO_PUPDR_PUPDR0 << (position * 2)); + 8006670: ea07 0e06 and.w lr, r7, r6 + temp |= ((GPIO_Init->Pull) << (position * 2)); + 8006674: 688f ldr r7, [r1, #8] + 8006676: fa07 f708 lsl.w r7, r7, r8 + 800667a: ea47 070e orr.w r7, r7, lr + GPIOx->PUPDR = temp; + 800667e: 60c7 str r7, [r0, #12] + if((GPIO_Init->Mode & GPIO_MODE) == MODE_AF) + 8006680: d119 bne.n 80066b6 + temp = GPIOx->AFR[position >> 3]; + 8006682: ea4f 0ad3 mov.w sl, r3, lsr #3 + temp &= ~((uint32_t)0xF << ((uint32_t)(position & (uint32_t)0x07) * 4)) ; + 8006686: f003 0b07 and.w fp, r3, #7 + 800668a: f04f 0e0f mov.w lr, #15 + 800668e: eb00 0a8a add.w sl, r0, sl, lsl #2 + 8006692: ea4f 0b8b mov.w fp, fp, lsl #2 + temp = GPIOx->AFR[position >> 3]; + 8006696: f8da 7020 ldr.w r7, [sl, #32] + temp &= ~((uint32_t)0xF << ((uint32_t)(position & (uint32_t)0x07) * 4)) ; + 800669a: fa0e fe0b lsl.w lr, lr, fp + 800669e: ea27 0e0e bic.w lr, r7, lr + temp |= ((uint32_t)(GPIO_Init->Alternate) << (((uint32_t)position & (uint32_t)0x07) * 4)); + 80066a2: 690f ldr r7, [r1, #16] + 80066a4: fa07 f70b lsl.w r7, r7, fp + 80066a8: ea47 070e orr.w r7, r7, lr + GPIOx->AFR[position >> 3] = temp; + 80066ac: f8ca 7020 str.w r7, [sl, #32] + 80066b0: e001 b.n 80066b6 + if((GPIO_Init->Mode & GPIO_MODE) != MODE_ANALOG) + 80066b2: 2c03 cmp r4, #3 + 80066b4: d1da bne.n 800666c + temp = GPIOx->MODER; + 80066b6: 6807 ldr r7, [r0, #0] + temp |= ((GPIO_Init->Mode & GPIO_MODE) << (position * 2)); + 80066b8: fa04 f408 lsl.w r4, r4, r8 + if((GPIO_Init->Mode & EXTI_MODE) != 0x00u) + 80066bc: f415 3f40 tst.w r5, #196608 ; 0x30000 + temp &= ~(GPIO_MODER_MODER0 << (position * 2)); + 80066c0: ea07 0706 and.w r7, r7, r6 + temp |= ((GPIO_Init->Mode & GPIO_MODE) << (position * 2)); + 80066c4: ea44 0407 orr.w r4, r4, r7 + GPIOx->MODER = temp; + 80066c8: 6004 str r4, [r0, #0] + if((GPIO_Init->Mode & EXTI_MODE) != 0x00u) + 80066ca: d065 beq.n 8006798 + __HAL_RCC_SYSCFG_CLK_ENABLE(); + 80066cc: f8d9 4044 ldr.w r4, [r9, #68] ; 0x44 + 80066d0: f023 0603 bic.w r6, r3, #3 + temp &= ~(((uint32_t)0x0F) << (4 * (position & 0x03))); + 80066d4: f003 0703 and.w r7, r3, #3 + __HAL_RCC_SYSCFG_CLK_ENABLE(); + 80066d8: f444 4480 orr.w r4, r4, #16384 ; 0x4000 + 80066dc: f106 4680 add.w r6, r6, #1073741824 ; 0x40000000 + temp &= ~(((uint32_t)0x0F) << (4 * (position & 0x03))); + 80066e0: 00bf lsls r7, r7, #2 + __HAL_RCC_SYSCFG_CLK_ENABLE(); + 80066e2: f8c9 4044 str.w r4, [r9, #68] ; 0x44 + 80066e6: f506 369c add.w r6, r6, #79872 ; 0x13800 + 80066ea: f8d9 4044 ldr.w r4, [r9, #68] ; 0x44 + 80066ee: f404 4480 and.w r4, r4, #16384 ; 0x4000 + 80066f2: 9401 str r4, [sp, #4] + 80066f4: 9c01 ldr r4, [sp, #4] + temp &= ~(((uint32_t)0x0F) << (4 * (position & 0x03))); + 80066f6: 240f movs r4, #15 + temp = SYSCFG->EXTICR[position >> 2]; + 80066f8: f8d6 e008 ldr.w lr, [r6, #8] + temp &= ~(((uint32_t)0x0F) << (4 * (position & 0x03))); + 80066fc: 40bc lsls r4, r7 + 80066fe: ea2e 0e04 bic.w lr, lr, r4 + temp |= ((uint32_t)(GPIO_GET_INDEX(GPIOx)) << (4 * (position & 0x03))); + 8006702: 4c33 ldr r4, [pc, #204] ; (80067d0 ) + 8006704: 42a0 cmp r0, r4 + 8006706: d04e beq.n 80067a6 + 8006708: f504 6480 add.w r4, r4, #1024 ; 0x400 + 800670c: 42a0 cmp r0, r4 + 800670e: d04c beq.n 80067aa + 8006710: f504 6480 add.w r4, r4, #1024 ; 0x400 + 8006714: 42a0 cmp r0, r4 + 8006716: d04a beq.n 80067ae + 8006718: f504 6480 add.w r4, r4, #1024 ; 0x400 + 800671c: 42a0 cmp r0, r4 + 800671e: d048 beq.n 80067b2 + 8006720: f504 6480 add.w r4, r4, #1024 ; 0x400 + 8006724: 42a0 cmp r0, r4 + 8006726: d046 beq.n 80067b6 + 8006728: f504 6480 add.w r4, r4, #1024 ; 0x400 + 800672c: 42a0 cmp r0, r4 + 800672e: d044 beq.n 80067ba + 8006730: f504 6480 add.w r4, r4, #1024 ; 0x400 + 8006734: 42a0 cmp r0, r4 + 8006736: d042 beq.n 80067be + 8006738: f504 6480 add.w r4, r4, #1024 ; 0x400 + 800673c: 42a0 cmp r0, r4 + 800673e: d040 beq.n 80067c2 + 8006740: f504 6480 add.w r4, r4, #1024 ; 0x400 + 8006744: 42a0 cmp r0, r4 + 8006746: d03e beq.n 80067c6 + 8006748: f504 6480 add.w r4, r4, #1024 ; 0x400 + 800674c: 42a0 cmp r0, r4 + 800674e: bf0c ite eq + 8006750: 2409 moveq r4, #9 + 8006752: 240a movne r4, #10 + 8006754: 40bc lsls r4, r7 + temp &= ~((uint32_t)iocurrent); + if((GPIO_Init->Mode & TRIGGER_RISING) != 0x00u) + 8006756: 02ef lsls r7, r5, #11 + temp |= ((uint32_t)(GPIO_GET_INDEX(GPIOx)) << (4 * (position & 0x03))); + 8006758: ea44 040e orr.w r4, r4, lr + SYSCFG->EXTICR[position >> 2] = temp; + 800675c: 60b4 str r4, [r6, #8] + temp &= ~((uint32_t)iocurrent); + 800675e: ea6f 060c mvn.w r6, ip + temp = EXTI->RTSR; + 8006762: 6894 ldr r4, [r2, #8] + temp &= ~((uint32_t)iocurrent); + 8006764: bf54 ite pl + 8006766: 4034 andpl r4, r6 + { + temp |= iocurrent; + 8006768: ea4c 0404 orrmi.w r4, ip, r4 + } + EXTI->RTSR = temp; + + temp = EXTI->FTSR; + temp &= ~((uint32_t)iocurrent); + if((GPIO_Init->Mode & TRIGGER_FALLING) != 0x00u) + 800676c: 02af lsls r7, r5, #10 + EXTI->RTSR = temp; + 800676e: 6094 str r4, [r2, #8] + temp = EXTI->FTSR; + 8006770: 68d4 ldr r4, [r2, #12] + temp &= ~((uint32_t)iocurrent); + 8006772: bf54 ite pl + 8006774: 4034 andpl r4, r6 + { + temp |= iocurrent; + 8006776: ea4c 0404 orrmi.w r4, ip, r4 + } + EXTI->FTSR = temp; + + temp = EXTI->EMR; + temp &= ~((uint32_t)iocurrent); + if((GPIO_Init->Mode & EXTI_EVT) != 0x00u) + 800677a: 03af lsls r7, r5, #14 + EXTI->FTSR = temp; + 800677c: 60d4 str r4, [r2, #12] + temp = EXTI->EMR; + 800677e: 6854 ldr r4, [r2, #4] + temp &= ~((uint32_t)iocurrent); + 8006780: bf54 ite pl + 8006782: 4034 andpl r4, r6 + { + temp |= iocurrent; + 8006784: ea4c 0404 orrmi.w r4, ip, r4 + EXTI->EMR = temp; + + /* Clear EXTI line configuration */ + temp = EXTI->IMR; + temp &= ~((uint32_t)iocurrent); + if((GPIO_Init->Mode & EXTI_IT) != 0x00u) + 8006788: 03ed lsls r5, r5, #15 + EXTI->EMR = temp; + 800678a: 6054 str r4, [r2, #4] + temp = EXTI->IMR; + 800678c: 6814 ldr r4, [r2, #0] + temp &= ~((uint32_t)iocurrent); + 800678e: bf54 ite pl + 8006790: 4034 andpl r4, r6 + { + temp |= iocurrent; + 8006792: ea4c 0404 orrmi.w r4, ip, r4 + } + EXTI->IMR = temp; + 8006796: 6014 str r4, [r2, #0] + for(position = 0; position < GPIO_NUMBER; position++) + 8006798: 3301 adds r3, #1 + 800679a: 2b10 cmp r3, #16 + 800679c: f47f af40 bne.w 8006620 + } + } + } +} + 80067a0: b003 add sp, #12 + 80067a2: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + temp |= ((uint32_t)(GPIO_GET_INDEX(GPIOx)) << (4 * (position & 0x03))); + 80067a6: 2400 movs r4, #0 + 80067a8: e7d4 b.n 8006754 + 80067aa: 2401 movs r4, #1 + 80067ac: e7d2 b.n 8006754 + 80067ae: 2402 movs r4, #2 + 80067b0: e7d0 b.n 8006754 + 80067b2: 2403 movs r4, #3 + 80067b4: e7ce b.n 8006754 + 80067b6: 2404 movs r4, #4 + 80067b8: e7cc b.n 8006754 + 80067ba: 2405 movs r4, #5 + 80067bc: e7ca b.n 8006754 + 80067be: 2406 movs r4, #6 + 80067c0: e7c8 b.n 8006754 + 80067c2: 2407 movs r4, #7 + 80067c4: e7c6 b.n 8006754 + 80067c6: 2408 movs r4, #8 + 80067c8: e7c4 b.n 8006754 + 80067ca: bf00 nop + 80067cc: 40013c00 .word 0x40013c00 + 80067d0: 40020000 .word 0x40020000 + 80067d4: 40023800 .word 0x40023800 + +080067d8 : + * @param GPIO_Pin specifies the port bit to be written. + * This parameter can be one of GPIO_PIN_x where x can be (0..15). + * @retval None + */ +void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin) +{ + 80067d8: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + + /* Check the parameters */ + assert_param(IS_GPIO_ALL_INSTANCE(GPIOx)); + + /* Configure the port pins */ + for(position = 0; position < GPIO_NUMBER; position++) + 80067dc: 2200 movs r2, #0 + tmp = SYSCFG->EXTICR[position >> 2]; + tmp &= (((uint32_t)0x0F) << (4 * (position & 0x03))); + if(tmp == ((uint32_t)(GPIO_GET_INDEX(GPIOx)) << (4 * (position & 0x03)))) + { + /* Clear EXTI line configuration */ + EXTI->IMR &= ~((uint32_t)iocurrent); + 80067de: 4c49 ldr r4, [pc, #292] ; (8006904 ) + if(tmp == ((uint32_t)(GPIO_GET_INDEX(GPIOx)) << (4 * (position & 0x03)))) + 80067e0: f8df 9128 ldr.w r9, [pc, #296] ; 800690c + 80067e4: f8df a128 ldr.w sl, [pc, #296] ; 8006910 + 80067e8: f8df b128 ldr.w fp, [pc, #296] ; 8006914 + ioposition = ((uint32_t)0x01) << position; + 80067ec: 2301 movs r3, #1 + 80067ee: fa03 fe02 lsl.w lr, r3, r2 + if(iocurrent == ioposition) + 80067f2: ea3e 0501 bics.w r5, lr, r1 + iocurrent = (GPIO_Pin) & ioposition; + 80067f6: ea0e 0701 and.w r7, lr, r1 + if(iocurrent == ioposition) + 80067fa: d16c bne.n 80068d6 + tmp = SYSCFG->EXTICR[position >> 2]; + 80067fc: f022 0503 bic.w r5, r2, #3 + tmp &= (((uint32_t)0x0F) << (4 * (position & 0x03))); + 8006800: f002 0c03 and.w ip, r2, #3 + 8006804: 260f movs r6, #15 + if(tmp == ((uint32_t)(GPIO_GET_INDEX(GPIOx)) << (4 * (position & 0x03)))) + 8006806: 4b40 ldr r3, [pc, #256] ; (8006908 ) + 8006808: f105 4580 add.w r5, r5, #1073741824 ; 0x40000000 + tmp &= (((uint32_t)0x0F) << (4 * (position & 0x03))); + 800680c: ea4f 0c8c mov.w ip, ip, lsl #2 + if(tmp == ((uint32_t)(GPIO_GET_INDEX(GPIOx)) << (4 * (position & 0x03)))) + 8006810: 4298 cmp r0, r3 + 8006812: f505 359c add.w r5, r5, #79872 ; 0x13800 + tmp &= (((uint32_t)0x0F) << (4 * (position & 0x03))); + 8006816: fa06 f60c lsl.w r6, r6, ip + tmp = SYSCFG->EXTICR[position >> 2]; + 800681a: f8d5 8008 ldr.w r8, [r5, #8] + tmp &= (((uint32_t)0x0F) << (4 * (position & 0x03))); + 800681e: ea06 0808 and.w r8, r6, r8 + if(tmp == ((uint32_t)(GPIO_GET_INDEX(GPIOx)) << (4 * (position & 0x03)))) + 8006822: d05d beq.n 80068e0 + 8006824: f503 6380 add.w r3, r3, #1024 ; 0x400 + 8006828: 4298 cmp r0, r3 + 800682a: d05b beq.n 80068e4 + 800682c: f503 6380 add.w r3, r3, #1024 ; 0x400 + 8006830: 4298 cmp r0, r3 + 8006832: d059 beq.n 80068e8 + 8006834: f503 6380 add.w r3, r3, #1024 ; 0x400 + 8006838: 4298 cmp r0, r3 + 800683a: d057 beq.n 80068ec + 800683c: f503 6380 add.w r3, r3, #1024 ; 0x400 + 8006840: 4298 cmp r0, r3 + 8006842: d055 beq.n 80068f0 + 8006844: 4548 cmp r0, r9 + 8006846: d055 beq.n 80068f4 + 8006848: 4550 cmp r0, sl + 800684a: d055 beq.n 80068f8 + 800684c: 4558 cmp r0, fp + 800684e: d055 beq.n 80068fc + 8006850: f503 5380 add.w r3, r3, #4096 ; 0x1000 + 8006854: 4298 cmp r0, r3 + 8006856: d053 beq.n 8006900 + 8006858: f503 6380 add.w r3, r3, #1024 ; 0x400 + 800685c: 4298 cmp r0, r3 + 800685e: bf0c ite eq + 8006860: 2309 moveq r3, #9 + 8006862: 230a movne r3, #10 + 8006864: fa03 f30c lsl.w r3, r3, ip + 8006868: 4543 cmp r3, r8 + 800686a: d113 bne.n 8006894 + EXTI->IMR &= ~((uint32_t)iocurrent); + 800686c: 6823 ldr r3, [r4, #0] + 800686e: ea23 0307 bic.w r3, r3, r7 + 8006872: 6023 str r3, [r4, #0] + EXTI->EMR &= ~((uint32_t)iocurrent); + 8006874: 6863 ldr r3, [r4, #4] + 8006876: ea23 0307 bic.w r3, r3, r7 + 800687a: 6063 str r3, [r4, #4] + + /* Clear Rising Falling edge configuration */ + EXTI->FTSR &= ~((uint32_t)iocurrent); + 800687c: 68e3 ldr r3, [r4, #12] + 800687e: ea23 0307 bic.w r3, r3, r7 + 8006882: 60e3 str r3, [r4, #12] + EXTI->RTSR &= ~((uint32_t)iocurrent); + 8006884: 68a3 ldr r3, [r4, #8] + 8006886: ea23 0307 bic.w r3, r3, r7 + 800688a: 60a3 str r3, [r4, #8] + + /* Configure the External Interrupt or event for the current IO */ + tmp = ((uint32_t)0x0F) << (4 * (position & 0x03)); + SYSCFG->EXTICR[position >> 2] &= ~tmp; + 800688c: 68ab ldr r3, [r5, #8] + 800688e: ea23 0306 bic.w r3, r3, r6 + 8006892: 60ab str r3, [r5, #8] + } + /*------------------------- GPIO Mode Configuration --------------------*/ + /* Configure IO Direction in Input Floating Mode */ + GPIOx->MODER &= ~(GPIO_MODER_MODER0 << (position * 2)); + 8006894: 0056 lsls r6, r2, #1 + 8006896: 2303 movs r3, #3 + 8006898: 6805 ldr r5, [r0, #0] + + /* Configure the default Alternate Function in current IO */ + GPIOx->AFR[position >> 3] &= ~((uint32_t)0xF << ((uint32_t)(position & (uint32_t)0x07) * 4)) ; + 800689a: f002 0c07 and.w ip, r2, #7 + GPIOx->MODER &= ~(GPIO_MODER_MODER0 << (position * 2)); + 800689e: 40b3 lsls r3, r6 + GPIOx->AFR[position >> 3] &= ~((uint32_t)0xF << ((uint32_t)(position & (uint32_t)0x07) * 4)) ; + 80068a0: 270f movs r7, #15 + 80068a2: ea4f 0c8c mov.w ip, ip, lsl #2 + GPIOx->MODER &= ~(GPIO_MODER_MODER0 << (position * 2)); + 80068a6: ea25 0503 bic.w r5, r5, r3 + GPIOx->AFR[position >> 3] &= ~((uint32_t)0xF << ((uint32_t)(position & (uint32_t)0x07) * 4)) ; + 80068aa: fa07 f70c lsl.w r7, r7, ip + GPIOx->MODER &= ~(GPIO_MODER_MODER0 << (position * 2)); + 80068ae: 6005 str r5, [r0, #0] + GPIOx->AFR[position >> 3] &= ~((uint32_t)0xF << ((uint32_t)(position & (uint32_t)0x07) * 4)) ; + 80068b0: 08d5 lsrs r5, r2, #3 + 80068b2: eb00 0585 add.w r5, r0, r5, lsl #2 + 80068b6: 6a2e ldr r6, [r5, #32] + 80068b8: ea26 0607 bic.w r6, r6, r7 + 80068bc: 622e str r6, [r5, #32] + + /* Deactivate the Pull-up and Pull-down resistor for the current IO */ + GPIOx->PUPDR &= ~(GPIO_PUPDR_PUPDR0 << (position * 2)); + 80068be: 68c5 ldr r5, [r0, #12] + 80068c0: ea25 0503 bic.w r5, r5, r3 + 80068c4: 60c5 str r5, [r0, #12] + + /* Configure the default value IO Output Type */ + GPIOx->OTYPER &= ~(GPIO_OTYPER_OT_0 << position) ; + 80068c6: 6845 ldr r5, [r0, #4] + 80068c8: ea25 050e bic.w r5, r5, lr + 80068cc: 6045 str r5, [r0, #4] + + /* Configure the default value for IO Speed */ + GPIOx->OSPEEDR &= ~(GPIO_OSPEEDER_OSPEEDR0 << (position * 2)); + 80068ce: 6885 ldr r5, [r0, #8] + 80068d0: ea25 0303 bic.w r3, r5, r3 + 80068d4: 6083 str r3, [r0, #8] + for(position = 0; position < GPIO_NUMBER; position++) + 80068d6: 3201 adds r2, #1 + 80068d8: 2a10 cmp r2, #16 + 80068da: d187 bne.n 80067ec + } + } +} + 80068dc: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + if(tmp == ((uint32_t)(GPIO_GET_INDEX(GPIOx)) << (4 * (position & 0x03)))) + 80068e0: 2300 movs r3, #0 + 80068e2: e7bf b.n 8006864 + 80068e4: 2301 movs r3, #1 + 80068e6: e7bd b.n 8006864 + 80068e8: 2302 movs r3, #2 + 80068ea: e7bb b.n 8006864 + 80068ec: 2303 movs r3, #3 + 80068ee: e7b9 b.n 8006864 + 80068f0: 2304 movs r3, #4 + 80068f2: e7b7 b.n 8006864 + 80068f4: 2305 movs r3, #5 + 80068f6: e7b5 b.n 8006864 + 80068f8: 2306 movs r3, #6 + 80068fa: e7b3 b.n 8006864 + 80068fc: 2307 movs r3, #7 + 80068fe: e7b1 b.n 8006864 + 8006900: 2308 movs r3, #8 + 8006902: e7af b.n 8006864 + 8006904: 40013c00 .word 0x40013c00 + 8006908: 40020000 .word 0x40020000 + 800690c: 40021400 .word 0x40021400 + 8006910: 40021800 .word 0x40021800 + 8006914: 40021c00 .word 0x40021c00 + +08006918 : + GPIO_PinState bitstatus; + + /* Check the parameters */ + assert_param(IS_GPIO_PIN(GPIO_Pin)); + + if((GPIOx->IDR & GPIO_Pin) != (uint32_t)GPIO_PIN_RESET) + 8006918: 6903 ldr r3, [r0, #16] + 800691a: 4219 tst r1, r3 + else + { + bitstatus = GPIO_PIN_RESET; + } + return bitstatus; +} + 800691c: bf14 ite ne + 800691e: 2001 movne r0, #1 + 8006920: 2000 moveq r0, #0 + 8006922: 4770 bx lr + +08006924 : +{ + /* Check the parameters */ + assert_param(IS_GPIO_PIN(GPIO_Pin)); + assert_param(IS_GPIO_PIN_ACTION(PinState)); + + if(PinState != GPIO_PIN_RESET) + 8006924: b10a cbz r2, 800692a + { + GPIOx->BSRR = GPIO_Pin; + } + else + { + GPIOx->BSRR = (uint32_t)GPIO_Pin << 16; + 8006926: 6181 str r1, [r0, #24] + } +} + 8006928: 4770 bx lr + GPIOx->BSRR = (uint32_t)GPIO_Pin << 16; + 800692a: 0409 lsls r1, r1, #16 + 800692c: e7fb b.n 8006926 + +0800692e : + + /* Check the parameters */ + assert_param(IS_GPIO_PIN(GPIO_Pin)); + + /* get current Output Data Register value */ + odr = GPIOx->ODR; + 800692e: 6943 ldr r3, [r0, #20] + + /* Set selected pins that were at low level, and reset ones that were high */ + GPIOx->BSRR = ((odr & GPIO_Pin) << GPIO_NUMBER) | (~odr & GPIO_Pin); + 8006930: ea01 0203 and.w r2, r1, r3 + 8006934: ea21 0103 bic.w r1, r1, r3 + 8006938: ea41 4102 orr.w r1, r1, r2, lsl #16 + 800693c: 6181 str r1, [r0, #24] +} + 800693e: 4770 bx lr + +08006940 : + */ +static void I2C_Flush_TXDR(I2C_HandleTypeDef *hi2c) +{ + /* If a pending TXIS flag is set */ + /* Write a dummy data in TXDR to clear it */ + if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_TXIS) != RESET) + 8006940: 6803 ldr r3, [r0, #0] + 8006942: 699a ldr r2, [r3, #24] + 8006944: 0791 lsls r1, r2, #30 + 8006946: d501 bpl.n 800694c + { + hi2c->Instance->TXDR = 0x00U; + 8006948: 2200 movs r2, #0 + 800694a: 629a str r2, [r3, #40] ; 0x28 + } + + /* Flush TX register if not empty */ + if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_TXE) == RESET) + 800694c: 699a ldr r2, [r3, #24] + 800694e: 07d2 lsls r2, r2, #31 + 8006950: d403 bmi.n 800695a + { + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_TXE); + 8006952: 699a ldr r2, [r3, #24] + 8006954: f042 0201 orr.w r2, r2, #1 + 8006958: 619a str r2, [r3, #24] + } +} + 800695a: 4770 bx lr + +0800695c : + * @arg @ref I2C_GENERATE_START_WRITE Generate Restart for write request. + * @retval None + */ +static void I2C_TransferConfig(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t Size, uint32_t Mode, + uint32_t Request) +{ + 800695c: b530 push {r4, r5, lr} + 800695e: 9d03 ldr r5, [sp, #12] + assert_param(IS_I2C_ALL_INSTANCE(hi2c->Instance)); + assert_param(IS_TRANSFER_MODE(Mode)); + assert_param(IS_TRANSFER_REQUEST(Request)); + + /* Declaration of tmp to prevent undefined behavior of volatile usage */ + uint32_t tmp = ((uint32_t)(((uint32_t)DevAddress & I2C_CR2_SADD) | \ + 8006960: f3c1 0109 ubfx r1, r1, #0, #10 + (((uint32_t)Size << I2C_CR2_NBYTES_Pos) & I2C_CR2_NBYTES) | \ + (uint32_t)Mode | (uint32_t)Request) & (~0x80000000U)); + + /* update CR2 register */ + MODIFY_REG(hi2c->Instance->CR2, \ + 8006964: 6804 ldr r4, [r0, #0] + uint32_t tmp = ((uint32_t)(((uint32_t)DevAddress & I2C_CR2_SADD) | \ + 8006966: 432b orrs r3, r5 + MODIFY_REG(hi2c->Instance->CR2, \ + 8006968: 6860 ldr r0, [r4, #4] + uint32_t tmp = ((uint32_t)(((uint32_t)DevAddress & I2C_CR2_SADD) | \ + 800696a: ea43 4302 orr.w r3, r3, r2, lsl #16 + MODIFY_REG(hi2c->Instance->CR2, \ + 800696e: 4a05 ldr r2, [pc, #20] ; (8006984 ) + uint32_t tmp = ((uint32_t)(((uint32_t)DevAddress & I2C_CR2_SADD) | \ + 8006970: 430b orrs r3, r1 + MODIFY_REG(hi2c->Instance->CR2, \ + 8006972: ea42 5255 orr.w r2, r2, r5, lsr #21 + uint32_t tmp = ((uint32_t)(((uint32_t)DevAddress & I2C_CR2_SADD) | \ + 8006976: f023 4300 bic.w r3, r3, #2147483648 ; 0x80000000 + MODIFY_REG(hi2c->Instance->CR2, \ + 800697a: ea20 0002 bic.w r0, r0, r2 + 800697e: 4303 orrs r3, r0 + 8006980: 6063 str r3, [r4, #4] + ((I2C_CR2_SADD | I2C_CR2_NBYTES | I2C_CR2_RELOAD | I2C_CR2_AUTOEND | \ + (I2C_CR2_RD_WRN & (uint32_t)(Request >> (31U - I2C_CR2_RD_WRN_Pos))) | \ + I2C_CR2_START | I2C_CR2_STOP)), tmp); +} + 8006982: bd30 pop {r4, r5, pc} + 8006984: 03ff63ff .word 0x03ff63ff + +08006988 : + uint32_t itflag = hi2c->Instance->ISR; + 8006988: 6803 ldr r3, [r0, #0] +{ + 800698a: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} + uint32_t itflag = hi2c->Instance->ISR; + 800698e: 699c ldr r4, [r3, #24] +{ + 8006990: 4605 mov r5, r0 + 8006992: 460f mov r7, r1 + 8006994: 4616 mov r6, r2 + if (HAL_IS_BIT_SET(itflag, I2C_FLAG_AF)) + 8006996: f014 0410 ands.w r4, r4, #16 + 800699a: d06f beq.n 8006a7c + uint32_t error_code = 0; + 800699c: 2400 movs r4, #0 + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_AF); + 800699e: 2210 movs r2, #16 + HAL_StatusTypeDef status = HAL_OK; + 80069a0: 46a0 mov r8, r4 + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_AF); + 80069a2: 61da str r2, [r3, #28] + while ((__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_STOPF) == RESET) && (status == HAL_OK)) + 80069a4: 682b ldr r3, [r5, #0] + 80069a6: 699a ldr r2, [r3, #24] + 80069a8: 0690 lsls r0, r2, #26 + 80069aa: d461 bmi.n 8006a70 + 80069ac: f1b8 0f00 cmp.w r8, #0 + 80069b0: d035 beq.n 8006a1e + error_code |= HAL_I2C_ERROR_AF; + 80069b2: f044 0404 orr.w r4, r4, #4 + status = HAL_ERROR; + 80069b6: 2001 movs r0, #1 + itflag = hi2c->Instance->ISR; + 80069b8: 682e ldr r6, [r5, #0] + 80069ba: 69b3 ldr r3, [r6, #24] + if (HAL_IS_BIT_SET(itflag, I2C_FLAG_BERR)) + 80069bc: 05d9 lsls r1, r3, #23 + 80069be: d505 bpl.n 80069cc + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_BERR); + 80069c0: f44f 7280 mov.w r2, #256 ; 0x100 + error_code |= HAL_I2C_ERROR_BERR; + 80069c4: f044 0401 orr.w r4, r4, #1 + status = HAL_ERROR; + 80069c8: 2001 movs r0, #1 + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_BERR); + 80069ca: 61f2 str r2, [r6, #28] + if (HAL_IS_BIT_SET(itflag, I2C_FLAG_OVR)) + 80069cc: 055a lsls r2, r3, #21 + 80069ce: d505 bpl.n 80069dc + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_OVR); + 80069d0: f44f 6280 mov.w r2, #1024 ; 0x400 + error_code |= HAL_I2C_ERROR_OVR; + 80069d4: f044 0408 orr.w r4, r4, #8 + status = HAL_ERROR; + 80069d8: 2001 movs r0, #1 + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_OVR); + 80069da: 61f2 str r2, [r6, #28] + if (HAL_IS_BIT_SET(itflag, I2C_FLAG_ARLO)) + 80069dc: 059b lsls r3, r3, #22 + 80069de: d54f bpl.n 8006a80 + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_ARLO); + 80069e0: f44f 7300 mov.w r3, #512 ; 0x200 + error_code |= HAL_I2C_ERROR_ARLO; + 80069e4: f044 0402 orr.w r4, r4, #2 + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_ARLO); + 80069e8: 61f3 str r3, [r6, #28] + I2C_Flush_TXDR(hi2c); + 80069ea: 4628 mov r0, r5 + 80069ec: f7ff ffa8 bl 8006940 + I2C_RESET_CR2(hi2c); + 80069f0: 6873 ldr r3, [r6, #4] + __HAL_UNLOCK(hi2c); + 80069f2: 2001 movs r0, #1 + I2C_RESET_CR2(hi2c); + 80069f4: f023 73ff bic.w r3, r3, #33423360 ; 0x1fe0000 + 80069f8: f423 338b bic.w r3, r3, #71168 ; 0x11600 + 80069fc: f423 73ff bic.w r3, r3, #510 ; 0x1fe + 8006a00: f023 0301 bic.w r3, r3, #1 + 8006a04: 6073 str r3, [r6, #4] + hi2c->ErrorCode |= error_code; + 8006a06: 6c6b ldr r3, [r5, #68] ; 0x44 + 8006a08: 4323 orrs r3, r4 + 8006a0a: 646b str r3, [r5, #68] ; 0x44 + hi2c->State = HAL_I2C_STATE_READY; + 8006a0c: 2320 movs r3, #32 + 8006a0e: f885 3041 strb.w r3, [r5, #65] ; 0x41 + hi2c->Mode = HAL_I2C_MODE_NONE; + 8006a12: 2300 movs r3, #0 + 8006a14: f885 3042 strb.w r3, [r5, #66] ; 0x42 + __HAL_UNLOCK(hi2c); + 8006a18: f885 3040 strb.w r3, [r5, #64] ; 0x40 + 8006a1c: e032 b.n 8006a84 + if (Timeout != HAL_MAX_DELAY) + 8006a1e: 1c7a adds r2, r7, #1 + 8006a20: d0c1 beq.n 80069a6 + if (((HAL_GetTick() - tickstart) > Timeout) || (Timeout == 0U)) + 8006a22: f7fe fe05 bl 8005630 + 8006a26: 1b80 subs r0, r0, r6 + 8006a28: 42b8 cmp r0, r7 + 8006a2a: d801 bhi.n 8006a30 + 8006a2c: 2f00 cmp r7, #0 + 8006a2e: d1b9 bne.n 80069a4 + tmp1 = (uint32_t)(hi2c->Instance->CR2 & I2C_CR2_STOP); + 8006a30: 682b ldr r3, [r5, #0] + 8006a32: 6859 ldr r1, [r3, #4] + tmp2 = hi2c->Mode; + 8006a34: f895 2042 ldrb.w r2, [r5, #66] ; 0x42 + if ((__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) != RESET) && \ + 8006a38: 6998 ldr r0, [r3, #24] + tmp2 = hi2c->Mode; + 8006a3a: b2d2 uxtb r2, r2 + if ((__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) != RESET) && \ + 8006a3c: 0400 lsls r0, r0, #16 + 8006a3e: d50a bpl.n 8006a56 + 8006a40: 0449 lsls r1, r1, #17 + 8006a42: d408 bmi.n 8006a56 + (tmp1 != I2C_CR2_STOP) && \ + 8006a44: 2a20 cmp r2, #32 + 8006a46: d006 beq.n 8006a56 + hi2c->Instance->CR2 |= I2C_CR2_STOP; + 8006a48: 685a ldr r2, [r3, #4] + 8006a4a: f442 4280 orr.w r2, r2, #16384 ; 0x4000 + 8006a4e: 605a str r2, [r3, #4] + tickstart = HAL_GetTick(); + 8006a50: f7fe fdee bl 8005630 + 8006a54: 4606 mov r6, r0 + while (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_STOPF) == RESET) + 8006a56: 682b ldr r3, [r5, #0] + 8006a58: 699b ldr r3, [r3, #24] + 8006a5a: 069b lsls r3, r3, #26 + 8006a5c: d4a2 bmi.n 80069a4 + if ((HAL_GetTick() - tickstart) > I2C_TIMEOUT_STOPF) + 8006a5e: f7fe fde7 bl 8005630 + 8006a62: 1b80 subs r0, r0, r6 + 8006a64: 2819 cmp r0, #25 + 8006a66: d9f6 bls.n 8006a56 + error_code |=HAL_I2C_ERROR_TIMEOUT; + 8006a68: 2420 movs r4, #32 + status = HAL_ERROR; + 8006a6a: f04f 0801 mov.w r8, #1 + 8006a6e: e799 b.n 80069a4 + if (status == HAL_OK) + 8006a70: f1b8 0f00 cmp.w r8, #0 + 8006a74: d19d bne.n 80069b2 + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_STOPF); + 8006a76: 2220 movs r2, #32 + 8006a78: 61da str r2, [r3, #28] + 8006a7a: e79a b.n 80069b2 + HAL_StatusTypeDef status = HAL_OK; + 8006a7c: 4620 mov r0, r4 + 8006a7e: e79b b.n 80069b8 + if (status != HAL_OK) + 8006a80: 2800 cmp r0, #0 + 8006a82: d1b2 bne.n 80069ea +} + 8006a84: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + +08006a88 : +{ + 8006a88: b570 push {r4, r5, r6, lr} + 8006a8a: 4604 mov r4, r0 + 8006a8c: 460d mov r5, r1 + 8006a8e: 4616 mov r6, r2 + while (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_TXIS) == RESET) + 8006a90: 6823 ldr r3, [r4, #0] + 8006a92: 699b ldr r3, [r3, #24] + 8006a94: 079b lsls r3, r3, #30 + 8006a96: d501 bpl.n 8006a9c + return HAL_OK; + 8006a98: 2000 movs r0, #0 +} + 8006a9a: bd70 pop {r4, r5, r6, pc} + if (I2C_IsErrorOccurred(hi2c, Timeout, Tickstart) != HAL_OK) + 8006a9c: 4632 mov r2, r6 + 8006a9e: 4629 mov r1, r5 + 8006aa0: 4620 mov r0, r4 + 8006aa2: f7ff ff71 bl 8006988 + 8006aa6: b9a0 cbnz r0, 8006ad2 + if (Timeout != HAL_MAX_DELAY) + 8006aa8: 1c6a adds r2, r5, #1 + 8006aaa: d0f1 beq.n 8006a90 + if (((HAL_GetTick() - Tickstart) > Timeout) || (Timeout == 0U)) + 8006aac: f7fe fdc0 bl 8005630 + 8006ab0: 1b80 subs r0, r0, r6 + 8006ab2: 42a8 cmp r0, r5 + 8006ab4: d801 bhi.n 8006aba + 8006ab6: 2d00 cmp r5, #0 + 8006ab8: d1ea bne.n 8006a90 + hi2c->ErrorCode |= HAL_I2C_ERROR_TIMEOUT; + 8006aba: 6c63 ldr r3, [r4, #68] ; 0x44 + 8006abc: f043 0320 orr.w r3, r3, #32 + 8006ac0: 6463 str r3, [r4, #68] ; 0x44 + hi2c->State = HAL_I2C_STATE_READY; + 8006ac2: 2320 movs r3, #32 + 8006ac4: f884 3041 strb.w r3, [r4, #65] ; 0x41 + hi2c->Mode = HAL_I2C_MODE_NONE; + 8006ac8: 2300 movs r3, #0 + 8006aca: f884 3042 strb.w r3, [r4, #66] ; 0x42 + __HAL_UNLOCK(hi2c); + 8006ace: f884 3040 strb.w r3, [r4, #64] ; 0x40 + return HAL_ERROR; + 8006ad2: 2001 movs r0, #1 + 8006ad4: e7e1 b.n 8006a9a + +08006ad6 : +{ + 8006ad6: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} + 8006ada: 9f06 ldr r7, [sp, #24] + 8006adc: 4604 mov r4, r0 + 8006ade: 4688 mov r8, r1 + 8006ae0: 4616 mov r6, r2 + 8006ae2: 461d mov r5, r3 + while (__HAL_I2C_GET_FLAG(hi2c, Flag) == Status) + 8006ae4: 6822 ldr r2, [r4, #0] + 8006ae6: 6993 ldr r3, [r2, #24] + 8006ae8: ea38 0303 bics.w r3, r8, r3 + 8006aec: bf0c ite eq + 8006aee: 2301 moveq r3, #1 + 8006af0: 2300 movne r3, #0 + 8006af2: 42b3 cmp r3, r6 + 8006af4: d001 beq.n 8006afa + return HAL_OK; + 8006af6: 2000 movs r0, #0 + 8006af8: e015 b.n 8006b26 + if (Timeout != HAL_MAX_DELAY) + 8006afa: 1c6b adds r3, r5, #1 + 8006afc: d0f3 beq.n 8006ae6 + if (((HAL_GetTick() - Tickstart) > Timeout) || (Timeout == 0U)) + 8006afe: f7fe fd97 bl 8005630 + 8006b02: 1bc0 subs r0, r0, r7 + 8006b04: 42a8 cmp r0, r5 + 8006b06: d801 bhi.n 8006b0c + 8006b08: 2d00 cmp r5, #0 + 8006b0a: d1eb bne.n 8006ae4 + hi2c->ErrorCode |= HAL_I2C_ERROR_TIMEOUT; + 8006b0c: 6c63 ldr r3, [r4, #68] ; 0x44 + __HAL_UNLOCK(hi2c); + 8006b0e: 2001 movs r0, #1 + hi2c->ErrorCode |= HAL_I2C_ERROR_TIMEOUT; + 8006b10: f043 0320 orr.w r3, r3, #32 + 8006b14: 6463 str r3, [r4, #68] ; 0x44 + hi2c->State = HAL_I2C_STATE_READY; + 8006b16: 2320 movs r3, #32 + 8006b18: f884 3041 strb.w r3, [r4, #65] ; 0x41 + hi2c->Mode = HAL_I2C_MODE_NONE; + 8006b1c: 2300 movs r3, #0 + 8006b1e: f884 3042 strb.w r3, [r4, #66] ; 0x42 + __HAL_UNLOCK(hi2c); + 8006b22: f884 3040 strb.w r3, [r4, #64] ; 0x40 +} + 8006b26: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + +08006b2a : +{ + 8006b2a: b570 push {r4, r5, r6, lr} + 8006b2c: 4604 mov r4, r0 + 8006b2e: 460d mov r5, r1 + 8006b30: 4616 mov r6, r2 + while (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_STOPF) == RESET) + 8006b32: 6823 ldr r3, [r4, #0] + 8006b34: 699b ldr r3, [r3, #24] + 8006b36: 069b lsls r3, r3, #26 + 8006b38: d501 bpl.n 8006b3e + return HAL_OK; + 8006b3a: 2000 movs r0, #0 +} + 8006b3c: bd70 pop {r4, r5, r6, pc} + if (I2C_IsErrorOccurred(hi2c, Timeout, Tickstart) != HAL_OK) + 8006b3e: 4632 mov r2, r6 + 8006b40: 4629 mov r1, r5 + 8006b42: 4620 mov r0, r4 + 8006b44: f7ff ff20 bl 8006988 + 8006b48: b990 cbnz r0, 8006b70 + if (((HAL_GetTick() - Tickstart) > Timeout) || (Timeout == 0U)) + 8006b4a: f7fe fd71 bl 8005630 + 8006b4e: 1b80 subs r0, r0, r6 + 8006b50: 42a8 cmp r0, r5 + 8006b52: d801 bhi.n 8006b58 + 8006b54: 2d00 cmp r5, #0 + 8006b56: d1ec bne.n 8006b32 + hi2c->ErrorCode |= HAL_I2C_ERROR_TIMEOUT; + 8006b58: 6c63 ldr r3, [r4, #68] ; 0x44 + 8006b5a: f043 0320 orr.w r3, r3, #32 + 8006b5e: 6463 str r3, [r4, #68] ; 0x44 + hi2c->State = HAL_I2C_STATE_READY; + 8006b60: 2320 movs r3, #32 + 8006b62: f884 3041 strb.w r3, [r4, #65] ; 0x41 + hi2c->Mode = HAL_I2C_MODE_NONE; + 8006b66: 2300 movs r3, #0 + 8006b68: f884 3042 strb.w r3, [r4, #66] ; 0x42 + __HAL_UNLOCK(hi2c); + 8006b6c: f884 3040 strb.w r3, [r4, #64] ; 0x40 + return HAL_ERROR; + 8006b70: 2001 movs r0, #1 + 8006b72: e7e3 b.n 8006b3c + +08006b74 : +{ + 8006b74: b510 push {r4, lr} + if (hi2c == NULL) + 8006b76: 4604 mov r4, r0 + 8006b78: 2800 cmp r0, #0 + 8006b7a: d04a beq.n 8006c12 + if (hi2c->State == HAL_I2C_STATE_RESET) + 8006b7c: f890 3041 ldrb.w r3, [r0, #65] ; 0x41 + 8006b80: f003 02ff and.w r2, r3, #255 ; 0xff + 8006b84: b91b cbnz r3, 8006b8e + hi2c->Lock = HAL_UNLOCKED; + 8006b86: f880 2040 strb.w r2, [r0, #64] ; 0x40 + HAL_I2C_MspInit(hi2c); + 8006b8a: f7fa fdbd bl 8001708 + hi2c->State = HAL_I2C_STATE_BUSY; + 8006b8e: 2324 movs r3, #36 ; 0x24 + 8006b90: f884 3041 strb.w r3, [r4, #65] ; 0x41 + __HAL_I2C_DISABLE(hi2c); + 8006b94: 6823 ldr r3, [r4, #0] + 8006b96: 681a ldr r2, [r3, #0] + 8006b98: f022 0201 bic.w r2, r2, #1 + 8006b9c: 601a str r2, [r3, #0] + hi2c->Instance->TIMINGR = hi2c->Init.Timing & TIMING_CLEAR_MASK; + 8006b9e: 6862 ldr r2, [r4, #4] + 8006ba0: f022 6270 bic.w r2, r2, #251658240 ; 0xf000000 + 8006ba4: 611a str r2, [r3, #16] + hi2c->Instance->OAR1 &= ~I2C_OAR1_OA1EN; + 8006ba6: 689a ldr r2, [r3, #8] + 8006ba8: f422 4200 bic.w r2, r2, #32768 ; 0x8000 + 8006bac: 609a str r2, [r3, #8] + hi2c->Instance->OAR1 = (I2C_OAR1_OA1EN | hi2c->Init.OwnAddress1); + 8006bae: e9d4 2102 ldrd r2, r1, [r4, #8] + if (hi2c->Init.AddressingMode == I2C_ADDRESSINGMODE_7BIT) + 8006bb2: 2901 cmp r1, #1 + 8006bb4: d124 bne.n 8006c00 + hi2c->Instance->OAR1 = (I2C_OAR1_OA1EN | hi2c->Init.OwnAddress1); + 8006bb6: f442 4200 orr.w r2, r2, #32768 ; 0x8000 + 8006bba: 609a str r2, [r3, #8] + hi2c->Instance->CR2 |= (I2C_CR2_AUTOEND | I2C_CR2_NACK); + 8006bbc: 685a ldr r2, [r3, #4] + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + 8006bbe: 2000 movs r0, #0 + hi2c->Instance->CR2 |= (I2C_CR2_AUTOEND | I2C_CR2_NACK); + 8006bc0: f042 7200 orr.w r2, r2, #33554432 ; 0x2000000 + 8006bc4: f442 4200 orr.w r2, r2, #32768 ; 0x8000 + 8006bc8: 605a str r2, [r3, #4] + hi2c->Instance->OAR2 &= ~I2C_DUALADDRESS_ENABLE; + 8006bca: 68da ldr r2, [r3, #12] + 8006bcc: f422 4200 bic.w r2, r2, #32768 ; 0x8000 + 8006bd0: 60da str r2, [r3, #12] + hi2c->Instance->OAR2 = (hi2c->Init.DualAddressMode | hi2c->Init.OwnAddress2 | \ + 8006bd2: e9d4 2104 ldrd r2, r1, [r4, #16] + 8006bd6: 430a orrs r2, r1 + (hi2c->Init.OwnAddress2Masks << 8)); + 8006bd8: 69a1 ldr r1, [r4, #24] + hi2c->Instance->OAR2 = (hi2c->Init.DualAddressMode | hi2c->Init.OwnAddress2 | \ + 8006bda: ea42 2201 orr.w r2, r2, r1, lsl #8 + 8006bde: 60da str r2, [r3, #12] + hi2c->Instance->CR1 = (hi2c->Init.GeneralCallMode | hi2c->Init.NoStretchMode); + 8006be0: e9d4 2107 ldrd r2, r1, [r4, #28] + 8006be4: 430a orrs r2, r1 + 8006be6: 601a str r2, [r3, #0] + __HAL_I2C_ENABLE(hi2c); + 8006be8: 681a ldr r2, [r3, #0] + 8006bea: f042 0201 orr.w r2, r2, #1 + 8006bee: 601a str r2, [r3, #0] + hi2c->State = HAL_I2C_STATE_READY; + 8006bf0: 2320 movs r3, #32 + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + 8006bf2: 6460 str r0, [r4, #68] ; 0x44 + hi2c->State = HAL_I2C_STATE_READY; + 8006bf4: f884 3041 strb.w r3, [r4, #65] ; 0x41 + hi2c->PreviousState = I2C_STATE_NONE; + 8006bf8: 6320 str r0, [r4, #48] ; 0x30 + hi2c->Mode = HAL_I2C_MODE_NONE; + 8006bfa: f884 0042 strb.w r0, [r4, #66] ; 0x42 +} + 8006bfe: bd10 pop {r4, pc} + hi2c->Instance->OAR1 = (I2C_OAR1_OA1EN | I2C_OAR1_OA1MODE | hi2c->Init.OwnAddress1); + 8006c00: f442 4204 orr.w r2, r2, #33792 ; 0x8400 + if (hi2c->Init.AddressingMode == I2C_ADDRESSINGMODE_10BIT) + 8006c04: 2902 cmp r1, #2 + hi2c->Instance->OAR1 = (I2C_OAR1_OA1EN | I2C_OAR1_OA1MODE | hi2c->Init.OwnAddress1); + 8006c06: 609a str r2, [r3, #8] + if (hi2c->Init.AddressingMode == I2C_ADDRESSINGMODE_10BIT) + 8006c08: d1d8 bne.n 8006bbc + hi2c->Instance->CR2 = (I2C_CR2_ADD10); + 8006c0a: f44f 6200 mov.w r2, #2048 ; 0x800 + 8006c0e: 605a str r2, [r3, #4] + 8006c10: e7d4 b.n 8006bbc + return HAL_ERROR; + 8006c12: 2001 movs r0, #1 + 8006c14: e7f3 b.n 8006bfe + +08006c16 : +{ + 8006c16: b510 push {r4, lr} + if (hi2c == NULL) + 8006c18: 4604 mov r4, r0 + 8006c1a: b198 cbz r0, 8006c44 + __HAL_I2C_DISABLE(hi2c); + 8006c1c: 6802 ldr r2, [r0, #0] + hi2c->State = HAL_I2C_STATE_BUSY; + 8006c1e: 2324 movs r3, #36 ; 0x24 + 8006c20: f880 3041 strb.w r3, [r0, #65] ; 0x41 + __HAL_I2C_DISABLE(hi2c); + 8006c24: 6813 ldr r3, [r2, #0] + 8006c26: f023 0301 bic.w r3, r3, #1 + 8006c2a: 6013 str r3, [r2, #0] + HAL_I2C_MspDeInit(hi2c); + 8006c2c: f7fa fdb0 bl 8001790 + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + 8006c30: 2000 movs r0, #0 + 8006c32: 6460 str r0, [r4, #68] ; 0x44 + __HAL_UNLOCK(hi2c); + 8006c34: f884 0040 strb.w r0, [r4, #64] ; 0x40 + hi2c->State = HAL_I2C_STATE_RESET; + 8006c38: f884 0041 strb.w r0, [r4, #65] ; 0x41 + hi2c->PreviousState = I2C_STATE_NONE; + 8006c3c: 6320 str r0, [r4, #48] ; 0x30 + hi2c->Mode = HAL_I2C_MODE_NONE; + 8006c3e: f884 0042 strb.w r0, [r4, #66] ; 0x42 +} + 8006c42: bd10 pop {r4, pc} + return HAL_ERROR; + 8006c44: 2001 movs r0, #1 + 8006c46: e7fc b.n 8006c42 + +08006c48 : +{ + 8006c48: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8006c4c: 4699 mov r9, r3 + if (hi2c->State == HAL_I2C_STATE_READY) + 8006c4e: f890 3041 ldrb.w r3, [r0, #65] ; 0x41 +{ + 8006c52: 4604 mov r4, r0 + 8006c54: 460f mov r7, r1 + if (hi2c->State == HAL_I2C_STATE_READY) + 8006c56: 2b20 cmp r3, #32 +{ + 8006c58: 4616 mov r6, r2 + 8006c5a: f8bd a034 ldrh.w sl, [sp, #52] ; 0x34 + 8006c5e: f8dd 8038 ldr.w r8, [sp, #56] ; 0x38 + if (hi2c->State == HAL_I2C_STATE_READY) + 8006c62: f040 80c6 bne.w 8006df2 + if ((pData == NULL) || (Size == 0U)) + 8006c66: 9b0c ldr r3, [sp, #48] ; 0x30 + 8006c68: b113 cbz r3, 8006c70 + 8006c6a: f1ba 0f00 cmp.w sl, #0 + 8006c6e: d106 bne.n 8006c7e + hi2c->ErrorCode = HAL_I2C_ERROR_INVALID_PARAM; + 8006c70: f44f 7300 mov.w r3, #512 ; 0x200 + 8006c74: 6463 str r3, [r4, #68] ; 0x44 + return HAL_ERROR; + 8006c76: 2001 movs r0, #1 +} + 8006c78: b003 add sp, #12 + 8006c7a: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + __HAL_LOCK(hi2c); + 8006c7e: f890 3040 ldrb.w r3, [r0, #64] ; 0x40 + 8006c82: 2b01 cmp r3, #1 + 8006c84: f000 80b5 beq.w 8006df2 + 8006c88: f04f 0b01 mov.w fp, #1 + 8006c8c: f880 b040 strb.w fp, [r0, #64] ; 0x40 + tickstart = HAL_GetTick(); + 8006c90: f7fe fcce bl 8005630 + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_BUSY, SET, I2C_TIMEOUT_BUSY, tickstart) != HAL_OK) + 8006c94: 2319 movs r3, #25 + tickstart = HAL_GetTick(); + 8006c96: 4605 mov r5, r0 + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_BUSY, SET, I2C_TIMEOUT_BUSY, tickstart) != HAL_OK) + 8006c98: 9000 str r0, [sp, #0] + 8006c9a: 465a mov r2, fp + 8006c9c: f44f 4100 mov.w r1, #32768 ; 0x8000 + 8006ca0: 4620 mov r0, r4 + 8006ca2: f7ff ff18 bl 8006ad6 + 8006ca6: 2800 cmp r0, #0 + 8006ca8: d1e5 bne.n 8006c76 + hi2c->State = HAL_I2C_STATE_BUSY_TX; + 8006caa: 2321 movs r3, #33 ; 0x21 + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)MemAddSize, I2C_RELOAD_MODE, I2C_GENERATE_START_WRITE); + 8006cac: fa5f f289 uxtb.w r2, r9 + 8006cb0: 4639 mov r1, r7 + hi2c->XferISR = NULL; + 8006cb2: 6360 str r0, [r4, #52] ; 0x34 + hi2c->State = HAL_I2C_STATE_BUSY_TX; + 8006cb4: f884 3041 strb.w r3, [r4, #65] ; 0x41 + hi2c->Mode = HAL_I2C_MODE_MEM; + 8006cb8: 2340 movs r3, #64 ; 0x40 + 8006cba: f884 3042 strb.w r3, [r4, #66] ; 0x42 + hi2c->pBuffPtr = pData; + 8006cbe: 9b0c ldr r3, [sp, #48] ; 0x30 + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + 8006cc0: 6460 str r0, [r4, #68] ; 0x44 + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)MemAddSize, I2C_RELOAD_MODE, I2C_GENERATE_START_WRITE); + 8006cc2: 4620 mov r0, r4 + hi2c->pBuffPtr = pData; + 8006cc4: 6263 str r3, [r4, #36] ; 0x24 + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)MemAddSize, I2C_RELOAD_MODE, I2C_GENERATE_START_WRITE); + 8006cc6: 4b4c ldr r3, [pc, #304] ; (8006df8 ) + hi2c->XferCount = Size; + 8006cc8: f8a4 a02a strh.w sl, [r4, #42] ; 0x2a + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)MemAddSize, I2C_RELOAD_MODE, I2C_GENERATE_START_WRITE); + 8006ccc: 9300 str r3, [sp, #0] + 8006cce: f04f 7380 mov.w r3, #16777216 ; 0x1000000 + 8006cd2: f7ff fe43 bl 800695c + if (I2C_WaitOnTXISFlagUntilTimeout(hi2c, Timeout, Tickstart) != HAL_OK) + 8006cd6: 462a mov r2, r5 + 8006cd8: 4641 mov r1, r8 + 8006cda: 4620 mov r0, r4 + 8006cdc: f7ff fed4 bl 8006a88 + 8006ce0: bb18 cbnz r0, 8006d2a + if (MemAddSize == I2C_MEMADD_SIZE_8BIT) + 8006ce2: f1b9 0f01 cmp.w r9, #1 + hi2c->Instance->TXDR = I2C_MEM_ADD_LSB(MemAddress); + 8006ce6: 6823 ldr r3, [r4, #0] + if (MemAddSize == I2C_MEMADD_SIZE_8BIT) + 8006ce8: d115 bne.n 8006d16 + hi2c->Instance->TXDR = I2C_MEM_ADD_LSB(MemAddress); + 8006cea: b2f6 uxtb r6, r6 + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_TCR, RESET, Timeout, Tickstart) != HAL_OK) + 8006cec: 2200 movs r2, #0 + 8006cee: 2180 movs r1, #128 ; 0x80 + 8006cf0: 4620 mov r0, r4 + hi2c->Instance->TXDR = I2C_MEM_ADD_LSB(MemAddress); + 8006cf2: 629e str r6, [r3, #40] ; 0x28 + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_TCR, RESET, Timeout, Tickstart) != HAL_OK) + 8006cf4: 4643 mov r3, r8 + 8006cf6: 9500 str r5, [sp, #0] + 8006cf8: f7ff feed bl 8006ad6 + 8006cfc: b9a8 cbnz r0, 8006d2a + if (hi2c->XferCount > MAX_NBYTE_SIZE) + 8006cfe: 8d63 ldrh r3, [r4, #42] ; 0x2a + 8006d00: b29b uxth r3, r3 + 8006d02: 2bff cmp r3, #255 ; 0xff + 8006d04: d815 bhi.n 8006d32 + hi2c->XferSize = hi2c->XferCount; + 8006d06: 8d62 ldrh r2, [r4, #42] ; 0x2a + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, I2C_AUTOEND_MODE, I2C_NO_STARTSTOP); + 8006d08: f04f 7300 mov.w r3, #33554432 ; 0x2000000 + 8006d0c: 9000 str r0, [sp, #0] + hi2c->XferSize = hi2c->XferCount; + 8006d0e: b292 uxth r2, r2 + 8006d10: 8522 strh r2, [r4, #40] ; 0x28 + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, I2C_AUTOEND_MODE, I2C_NO_STARTSTOP); + 8006d12: b2d2 uxtb r2, r2 + 8006d14: e012 b.n 8006d3c + hi2c->Instance->TXDR = I2C_MEM_ADD_MSB(MemAddress); + 8006d16: 0a32 lsrs r2, r6, #8 + if (I2C_WaitOnTXISFlagUntilTimeout(hi2c, Timeout, Tickstart) != HAL_OK) + 8006d18: 4641 mov r1, r8 + 8006d1a: 4620 mov r0, r4 + hi2c->Instance->TXDR = I2C_MEM_ADD_MSB(MemAddress); + 8006d1c: 629a str r2, [r3, #40] ; 0x28 + if (I2C_WaitOnTXISFlagUntilTimeout(hi2c, Timeout, Tickstart) != HAL_OK) + 8006d1e: 462a mov r2, r5 + 8006d20: f7ff feb2 bl 8006a88 + 8006d24: b908 cbnz r0, 8006d2a + hi2c->Instance->TXDR = I2C_MEM_ADD_LSB(MemAddress); + 8006d26: 6823 ldr r3, [r4, #0] + 8006d28: e7df b.n 8006cea + __HAL_UNLOCK(hi2c); + 8006d2a: 2300 movs r3, #0 + 8006d2c: f884 3040 strb.w r3, [r4, #64] ; 0x40 + 8006d30: e7a1 b.n 8006c76 + hi2c->XferSize = MAX_NBYTE_SIZE; + 8006d32: 22ff movs r2, #255 ; 0xff + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, I2C_RELOAD_MODE, I2C_NO_STARTSTOP); + 8006d34: f04f 7380 mov.w r3, #16777216 ; 0x1000000 + 8006d38: 9000 str r0, [sp, #0] + hi2c->XferSize = MAX_NBYTE_SIZE; + 8006d3a: 8522 strh r2, [r4, #40] ; 0x28 + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, I2C_AUTOEND_MODE, I2C_NO_STARTSTOP); + 8006d3c: 4639 mov r1, r7 + 8006d3e: 4620 mov r0, r4 + 8006d40: f7ff fe0c bl 800695c + if (I2C_WaitOnTXISFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK) + 8006d44: 462a mov r2, r5 + 8006d46: 4641 mov r1, r8 + 8006d48: 4620 mov r0, r4 + 8006d4a: f7ff fe9d bl 8006a88 + 8006d4e: 2800 cmp r0, #0 + 8006d50: d191 bne.n 8006c76 + hi2c->Instance->TXDR = *hi2c->pBuffPtr; + 8006d52: 6a63 ldr r3, [r4, #36] ; 0x24 + 8006d54: 6822 ldr r2, [r4, #0] + 8006d56: f813 1b01 ldrb.w r1, [r3], #1 + 8006d5a: 6291 str r1, [r2, #40] ; 0x28 + hi2c->pBuffPtr++; + 8006d5c: 6263 str r3, [r4, #36] ; 0x24 + hi2c->XferCount--; + 8006d5e: 8d63 ldrh r3, [r4, #42] ; 0x2a + hi2c->XferSize--; + 8006d60: 8d22 ldrh r2, [r4, #40] ; 0x28 + hi2c->XferCount--; + 8006d62: 3b01 subs r3, #1 + hi2c->XferSize--; + 8006d64: 3a01 subs r2, #1 + hi2c->XferCount--; + 8006d66: b29b uxth r3, r3 + hi2c->XferSize--; + 8006d68: b292 uxth r2, r2 + hi2c->XferCount--; + 8006d6a: 8563 strh r3, [r4, #42] ; 0x2a + if ((hi2c->XferCount != 0U) && (hi2c->XferSize == 0U)) + 8006d6c: 8d63 ldrh r3, [r4, #42] ; 0x2a + hi2c->XferSize--; + 8006d6e: 8522 strh r2, [r4, #40] ; 0x28 + if ((hi2c->XferCount != 0U) && (hi2c->XferSize == 0U)) + 8006d70: b29b uxth r3, r3 + 8006d72: b1b3 cbz r3, 8006da2 + 8006d74: b9aa cbnz r2, 8006da2 + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_TCR, RESET, Timeout, tickstart) != HAL_OK) + 8006d76: 4643 mov r3, r8 + 8006d78: 2180 movs r1, #128 ; 0x80 + 8006d7a: 4620 mov r0, r4 + 8006d7c: 9500 str r5, [sp, #0] + 8006d7e: f7ff feaa bl 8006ad6 + 8006d82: 2800 cmp r0, #0 + 8006d84: f47f af77 bne.w 8006c76 + if (hi2c->XferCount > MAX_NBYTE_SIZE) + 8006d88: 8d63 ldrh r3, [r4, #42] ; 0x2a + 8006d8a: b29b uxth r3, r3 + 8006d8c: 2bff cmp r3, #255 ; 0xff + 8006d8e: d928 bls.n 8006de2 + hi2c->XferSize = MAX_NBYTE_SIZE; + 8006d90: 22ff movs r2, #255 ; 0xff + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, I2C_RELOAD_MODE, + 8006d92: f04f 7380 mov.w r3, #16777216 ; 0x1000000 + 8006d96: 9000 str r0, [sp, #0] + hi2c->XferSize = MAX_NBYTE_SIZE; + 8006d98: 8522 strh r2, [r4, #40] ; 0x28 + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, I2C_AUTOEND_MODE, + 8006d9a: 4639 mov r1, r7 + 8006d9c: 4620 mov r0, r4 + 8006d9e: f7ff fddd bl 800695c + } while (hi2c->XferCount > 0U); + 8006da2: 8d63 ldrh r3, [r4, #42] ; 0x2a + 8006da4: b29b uxth r3, r3 + 8006da6: 2b00 cmp r3, #0 + 8006da8: d1cc bne.n 8006d44 + if (I2C_WaitOnSTOPFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK) + 8006daa: 462a mov r2, r5 + 8006dac: 4641 mov r1, r8 + 8006dae: 4620 mov r0, r4 + 8006db0: f7ff febb bl 8006b2a + 8006db4: 2800 cmp r0, #0 + 8006db6: f47f af5e bne.w 8006c76 + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_STOPF); + 8006dba: 6823 ldr r3, [r4, #0] + 8006dbc: 2120 movs r1, #32 + 8006dbe: 61d9 str r1, [r3, #28] + I2C_RESET_CR2(hi2c); + 8006dc0: 685a ldr r2, [r3, #4] + 8006dc2: f022 72ff bic.w r2, r2, #33423360 ; 0x1fe0000 + 8006dc6: f422 328b bic.w r2, r2, #71168 ; 0x11600 + 8006dca: f422 72ff bic.w r2, r2, #510 ; 0x1fe + 8006dce: f022 0201 bic.w r2, r2, #1 + 8006dd2: 605a str r2, [r3, #4] + hi2c->State = HAL_I2C_STATE_READY; + 8006dd4: f884 1041 strb.w r1, [r4, #65] ; 0x41 + __HAL_UNLOCK(hi2c); + 8006dd8: f884 0040 strb.w r0, [r4, #64] ; 0x40 + hi2c->Mode = HAL_I2C_MODE_NONE; + 8006ddc: f884 0042 strb.w r0, [r4, #66] ; 0x42 + return HAL_OK; + 8006de0: e74a b.n 8006c78 + hi2c->XferSize = hi2c->XferCount; + 8006de2: 8d62 ldrh r2, [r4, #42] ; 0x2a + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, I2C_AUTOEND_MODE, + 8006de4: f04f 7300 mov.w r3, #33554432 ; 0x2000000 + 8006de8: 9000 str r0, [sp, #0] + hi2c->XferSize = hi2c->XferCount; + 8006dea: b292 uxth r2, r2 + 8006dec: 8522 strh r2, [r4, #40] ; 0x28 + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, I2C_AUTOEND_MODE, + 8006dee: b2d2 uxtb r2, r2 + 8006df0: e7d3 b.n 8006d9a + return HAL_BUSY; + 8006df2: 2002 movs r0, #2 + 8006df4: e740 b.n 8006c78 + 8006df6: bf00 nop + 8006df8: 80002000 .word 0x80002000 + +08006dfc : +{ + 8006dfc: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8006e00: 4699 mov r9, r3 + if (hi2c->State == HAL_I2C_STATE_READY) + 8006e02: f890 3041 ldrb.w r3, [r0, #65] ; 0x41 +{ + 8006e06: 4604 mov r4, r0 + 8006e08: 460f mov r7, r1 + if (hi2c->State == HAL_I2C_STATE_READY) + 8006e0a: 2b20 cmp r3, #32 +{ + 8006e0c: 4616 mov r6, r2 + 8006e0e: f8bd a034 ldrh.w sl, [sp, #52] ; 0x34 + 8006e12: f8dd 8038 ldr.w r8, [sp, #56] ; 0x38 + if (hi2c->State == HAL_I2C_STATE_READY) + 8006e16: f040 80c9 bne.w 8006fac + if ((pData == NULL) || (Size == 0U)) + 8006e1a: 9b0c ldr r3, [sp, #48] ; 0x30 + 8006e1c: b113 cbz r3, 8006e24 + 8006e1e: f1ba 0f00 cmp.w sl, #0 + 8006e22: d106 bne.n 8006e32 + hi2c->ErrorCode = HAL_I2C_ERROR_INVALID_PARAM; + 8006e24: f44f 7300 mov.w r3, #512 ; 0x200 + 8006e28: 6463 str r3, [r4, #68] ; 0x44 + return HAL_ERROR; + 8006e2a: 2001 movs r0, #1 +} + 8006e2c: b003 add sp, #12 + 8006e2e: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + __HAL_LOCK(hi2c); + 8006e32: f890 3040 ldrb.w r3, [r0, #64] ; 0x40 + 8006e36: 2b01 cmp r3, #1 + 8006e38: f000 80b8 beq.w 8006fac + 8006e3c: f04f 0b01 mov.w fp, #1 + 8006e40: f880 b040 strb.w fp, [r0, #64] ; 0x40 + tickstart = HAL_GetTick(); + 8006e44: f7fe fbf4 bl 8005630 + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_BUSY, SET, I2C_TIMEOUT_BUSY, tickstart) != HAL_OK) + 8006e48: 2319 movs r3, #25 + 8006e4a: 9000 str r0, [sp, #0] + tickstart = HAL_GetTick(); + 8006e4c: 4605 mov r5, r0 + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_BUSY, SET, I2C_TIMEOUT_BUSY, tickstart) != HAL_OK) + 8006e4e: 465a mov r2, fp + 8006e50: f44f 4100 mov.w r1, #32768 ; 0x8000 + 8006e54: 4620 mov r0, r4 + 8006e56: f7ff fe3e bl 8006ad6 + 8006e5a: 4603 mov r3, r0 + 8006e5c: 2800 cmp r0, #0 + 8006e5e: d1e4 bne.n 8006e2a + hi2c->State = HAL_I2C_STATE_BUSY_RX; + 8006e60: 2222 movs r2, #34 ; 0x22 + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)MemAddSize, I2C_SOFTEND_MODE, I2C_GENERATE_START_WRITE); + 8006e62: 4639 mov r1, r7 + hi2c->XferISR = NULL; + 8006e64: 6360 str r0, [r4, #52] ; 0x34 + hi2c->State = HAL_I2C_STATE_BUSY_RX; + 8006e66: f884 2041 strb.w r2, [r4, #65] ; 0x41 + hi2c->Mode = HAL_I2C_MODE_MEM; + 8006e6a: 2240 movs r2, #64 ; 0x40 + 8006e6c: f884 2042 strb.w r2, [r4, #66] ; 0x42 + hi2c->pBuffPtr = pData; + 8006e70: 9a0c ldr r2, [sp, #48] ; 0x30 + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + 8006e72: 6460 str r0, [r4, #68] ; 0x44 + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)MemAddSize, I2C_SOFTEND_MODE, I2C_GENERATE_START_WRITE); + 8006e74: 4620 mov r0, r4 + hi2c->pBuffPtr = pData; + 8006e76: 6262 str r2, [r4, #36] ; 0x24 + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)MemAddSize, I2C_SOFTEND_MODE, I2C_GENERATE_START_WRITE); + 8006e78: 4a4d ldr r2, [pc, #308] ; (8006fb0 ) + hi2c->XferCount = Size; + 8006e7a: f8a4 a02a strh.w sl, [r4, #42] ; 0x2a + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)MemAddSize, I2C_SOFTEND_MODE, I2C_GENERATE_START_WRITE); + 8006e7e: 9200 str r2, [sp, #0] + 8006e80: fa5f f289 uxtb.w r2, r9 + 8006e84: f7ff fd6a bl 800695c + if (I2C_WaitOnTXISFlagUntilTimeout(hi2c, Timeout, Tickstart) != HAL_OK) + 8006e88: 462a mov r2, r5 + 8006e8a: 4641 mov r1, r8 + 8006e8c: 4620 mov r0, r4 + 8006e8e: f7ff fdfb bl 8006a88 + 8006e92: bb20 cbnz r0, 8006ede + if (MemAddSize == I2C_MEMADD_SIZE_8BIT) + 8006e94: f1b9 0f01 cmp.w r9, #1 + hi2c->Instance->TXDR = I2C_MEM_ADD_LSB(MemAddress); + 8006e98: 6823 ldr r3, [r4, #0] + if (MemAddSize == I2C_MEMADD_SIZE_8BIT) + 8006e9a: d116 bne.n 8006eca + hi2c->Instance->TXDR = I2C_MEM_ADD_LSB(MemAddress); + 8006e9c: b2f6 uxtb r6, r6 + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_TC, RESET, Timeout, Tickstart) != HAL_OK) + 8006e9e: 2200 movs r2, #0 + 8006ea0: 2140 movs r1, #64 ; 0x40 + 8006ea2: 4620 mov r0, r4 + hi2c->Instance->TXDR = I2C_MEM_ADD_LSB(MemAddress); + 8006ea4: 629e str r6, [r3, #40] ; 0x28 + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_TC, RESET, Timeout, Tickstart) != HAL_OK) + 8006ea6: 4643 mov r3, r8 + 8006ea8: 9500 str r5, [sp, #0] + 8006eaa: f7ff fe14 bl 8006ad6 + 8006eae: b9b0 cbnz r0, 8006ede + if (hi2c->XferCount > MAX_NBYTE_SIZE) + 8006eb0: 8d63 ldrh r3, [r4, #42] ; 0x2a + 8006eb2: b29b uxth r3, r3 + 8006eb4: 2bff cmp r3, #255 ; 0xff + 8006eb6: 4b3f ldr r3, [pc, #252] ; (8006fb4 ) + 8006eb8: d815 bhi.n 8006ee6 + hi2c->XferSize = hi2c->XferCount; + 8006eba: 8d62 ldrh r2, [r4, #42] ; 0x2a + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, I2C_AUTOEND_MODE, + 8006ebc: 9300 str r3, [sp, #0] + 8006ebe: f04f 7300 mov.w r3, #33554432 ; 0x2000000 + hi2c->XferSize = hi2c->XferCount; + 8006ec2: b292 uxth r2, r2 + 8006ec4: 8522 strh r2, [r4, #40] ; 0x28 + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, I2C_AUTOEND_MODE, + 8006ec6: b2d2 uxtb r2, r2 + 8006ec8: e012 b.n 8006ef0 + hi2c->Instance->TXDR = I2C_MEM_ADD_MSB(MemAddress); + 8006eca: 0a32 lsrs r2, r6, #8 + if (I2C_WaitOnTXISFlagUntilTimeout(hi2c, Timeout, Tickstart) != HAL_OK) + 8006ecc: 4641 mov r1, r8 + 8006ece: 4620 mov r0, r4 + hi2c->Instance->TXDR = I2C_MEM_ADD_MSB(MemAddress); + 8006ed0: 629a str r2, [r3, #40] ; 0x28 + if (I2C_WaitOnTXISFlagUntilTimeout(hi2c, Timeout, Tickstart) != HAL_OK) + 8006ed2: 462a mov r2, r5 + 8006ed4: f7ff fdd8 bl 8006a88 + 8006ed8: b908 cbnz r0, 8006ede + hi2c->Instance->TXDR = I2C_MEM_ADD_LSB(MemAddress); + 8006eda: 6823 ldr r3, [r4, #0] + 8006edc: e7de b.n 8006e9c + __HAL_UNLOCK(hi2c); + 8006ede: 2300 movs r3, #0 + 8006ee0: f884 3040 strb.w r3, [r4, #64] ; 0x40 + 8006ee4: e7a1 b.n 8006e2a + hi2c->XferSize = MAX_NBYTE_SIZE; + 8006ee6: 22ff movs r2, #255 ; 0xff + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, I2C_RELOAD_MODE, + 8006ee8: 9300 str r3, [sp, #0] + 8006eea: f04f 7380 mov.w r3, #16777216 ; 0x1000000 + hi2c->XferSize = MAX_NBYTE_SIZE; + 8006eee: 8522 strh r2, [r4, #40] ; 0x28 + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, I2C_AUTOEND_MODE, + 8006ef0: 4639 mov r1, r7 + 8006ef2: 4620 mov r0, r4 + 8006ef4: f7ff fd32 bl 800695c + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_RXNE, RESET, Timeout, tickstart) != HAL_OK) + 8006ef8: 4643 mov r3, r8 + 8006efa: 2200 movs r2, #0 + 8006efc: 2104 movs r1, #4 + 8006efe: 4620 mov r0, r4 + 8006f00: 9500 str r5, [sp, #0] + 8006f02: f7ff fde8 bl 8006ad6 + 8006f06: 2800 cmp r0, #0 + 8006f08: d18f bne.n 8006e2a + *hi2c->pBuffPtr = (uint8_t)hi2c->Instance->RXDR; + 8006f0a: 6823 ldr r3, [r4, #0] + 8006f0c: 6a5a ldr r2, [r3, #36] ; 0x24 + 8006f0e: 6a63 ldr r3, [r4, #36] ; 0x24 + 8006f10: 701a strb r2, [r3, #0] + hi2c->pBuffPtr++; + 8006f12: 6a63 ldr r3, [r4, #36] ; 0x24 + hi2c->XferSize--; + 8006f14: 8d22 ldrh r2, [r4, #40] ; 0x28 + hi2c->pBuffPtr++; + 8006f16: 3301 adds r3, #1 + hi2c->XferSize--; + 8006f18: 3a01 subs r2, #1 + hi2c->pBuffPtr++; + 8006f1a: 6263 str r3, [r4, #36] ; 0x24 + hi2c->XferCount--; + 8006f1c: 8d63 ldrh r3, [r4, #42] ; 0x2a + hi2c->XferSize--; + 8006f1e: b292 uxth r2, r2 + hi2c->XferCount--; + 8006f20: 3b01 subs r3, #1 + hi2c->XferSize--; + 8006f22: 8522 strh r2, [r4, #40] ; 0x28 + hi2c->XferCount--; + 8006f24: b29b uxth r3, r3 + 8006f26: 8563 strh r3, [r4, #42] ; 0x2a + if ((hi2c->XferCount != 0U) && (hi2c->XferSize == 0U)) + 8006f28: 8d63 ldrh r3, [r4, #42] ; 0x2a + 8006f2a: b29b uxth r3, r3 + 8006f2c: b1b3 cbz r3, 8006f5c + 8006f2e: b9aa cbnz r2, 8006f5c + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_TCR, RESET, Timeout, tickstart) != HAL_OK) + 8006f30: 4643 mov r3, r8 + 8006f32: 2180 movs r1, #128 ; 0x80 + 8006f34: 4620 mov r0, r4 + 8006f36: 9500 str r5, [sp, #0] + 8006f38: f7ff fdcd bl 8006ad6 + 8006f3c: 2800 cmp r0, #0 + 8006f3e: f47f af74 bne.w 8006e2a + if (hi2c->XferCount > MAX_NBYTE_SIZE) + 8006f42: 8d63 ldrh r3, [r4, #42] ; 0x2a + 8006f44: b29b uxth r3, r3 + 8006f46: 2bff cmp r3, #255 ; 0xff + 8006f48: d928 bls.n 8006f9c + hi2c->XferSize = MAX_NBYTE_SIZE; + 8006f4a: 22ff movs r2, #255 ; 0xff + I2C_TransferConfig(hi2c, DevAddress, (uint8_t) hi2c->XferSize, I2C_RELOAD_MODE, + 8006f4c: f04f 7380 mov.w r3, #16777216 ; 0x1000000 + 8006f50: 9000 str r0, [sp, #0] + hi2c->XferSize = MAX_NBYTE_SIZE; + 8006f52: 8522 strh r2, [r4, #40] ; 0x28 + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, I2C_AUTOEND_MODE, + 8006f54: 4639 mov r1, r7 + 8006f56: 4620 mov r0, r4 + 8006f58: f7ff fd00 bl 800695c + } while (hi2c->XferCount > 0U); + 8006f5c: 8d63 ldrh r3, [r4, #42] ; 0x2a + 8006f5e: b29b uxth r3, r3 + 8006f60: 2b00 cmp r3, #0 + 8006f62: d1c9 bne.n 8006ef8 + if (I2C_WaitOnSTOPFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK) + 8006f64: 462a mov r2, r5 + 8006f66: 4641 mov r1, r8 + 8006f68: 4620 mov r0, r4 + 8006f6a: f7ff fdde bl 8006b2a + 8006f6e: 2800 cmp r0, #0 + 8006f70: f47f af5b bne.w 8006e2a + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_STOPF); + 8006f74: 6823 ldr r3, [r4, #0] + 8006f76: 2120 movs r1, #32 + 8006f78: 61d9 str r1, [r3, #28] + I2C_RESET_CR2(hi2c); + 8006f7a: 685a ldr r2, [r3, #4] + 8006f7c: f022 72ff bic.w r2, r2, #33423360 ; 0x1fe0000 + 8006f80: f422 328b bic.w r2, r2, #71168 ; 0x11600 + 8006f84: f422 72ff bic.w r2, r2, #510 ; 0x1fe + 8006f88: f022 0201 bic.w r2, r2, #1 + 8006f8c: 605a str r2, [r3, #4] + hi2c->State = HAL_I2C_STATE_READY; + 8006f8e: f884 1041 strb.w r1, [r4, #65] ; 0x41 + __HAL_UNLOCK(hi2c); + 8006f92: f884 0040 strb.w r0, [r4, #64] ; 0x40 + hi2c->Mode = HAL_I2C_MODE_NONE; + 8006f96: f884 0042 strb.w r0, [r4, #66] ; 0x42 + return HAL_OK; + 8006f9a: e747 b.n 8006e2c + hi2c->XferSize = hi2c->XferCount; + 8006f9c: 8d62 ldrh r2, [r4, #42] ; 0x2a + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, I2C_AUTOEND_MODE, + 8006f9e: f04f 7300 mov.w r3, #33554432 ; 0x2000000 + 8006fa2: 9000 str r0, [sp, #0] + hi2c->XferSize = hi2c->XferCount; + 8006fa4: b292 uxth r2, r2 + 8006fa6: 8522 strh r2, [r4, #40] ; 0x28 + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, I2C_AUTOEND_MODE, + 8006fa8: b2d2 uxtb r2, r2 + 8006faa: e7d3 b.n 8006f54 + return HAL_BUSY; + 8006fac: 2002 movs r0, #2 + 8006fae: e73d b.n 8006e2c + 8006fb0: 80002000 .word 0x80002000 + 8006fb4: 80002400 .word 0x80002400 + +08006fb8 : + * the configuration information for the specified I2Cx peripheral. + * @param AnalogFilter New state of the Analog filter. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2CEx_ConfigAnalogFilter(I2C_HandleTypeDef *hi2c, uint32_t AnalogFilter) +{ + 8006fb8: b510 push {r4, lr} + /* Check the parameters */ + assert_param(IS_I2C_ALL_INSTANCE(hi2c->Instance)); + assert_param(IS_I2C_ANALOG_FILTER(AnalogFilter)); + + if (hi2c->State == HAL_I2C_STATE_READY) + 8006fba: f890 3041 ldrb.w r3, [r0, #65] ; 0x41 + 8006fbe: 2b20 cmp r3, #32 + 8006fc0: b2dc uxtb r4, r3 + 8006fc2: d11d bne.n 8007000 + { + /* Process Locked */ + __HAL_LOCK(hi2c); + 8006fc4: f890 3040 ldrb.w r3, [r0, #64] ; 0x40 + 8006fc8: 2b01 cmp r3, #1 + 8006fca: d019 beq.n 8007000 + + hi2c->State = HAL_I2C_STATE_BUSY; + 8006fcc: 2324 movs r3, #36 ; 0x24 + 8006fce: f880 3041 strb.w r3, [r0, #65] ; 0x41 + + /* Disable the selected I2C peripheral */ + __HAL_I2C_DISABLE(hi2c); + 8006fd2: 6803 ldr r3, [r0, #0] + 8006fd4: 681a ldr r2, [r3, #0] + 8006fd6: f022 0201 bic.w r2, r2, #1 + 8006fda: 601a str r2, [r3, #0] + + /* Reset I2Cx ANOFF bit */ + hi2c->Instance->CR1 &= ~(I2C_CR1_ANFOFF); + 8006fdc: 681a ldr r2, [r3, #0] + 8006fde: f422 5280 bic.w r2, r2, #4096 ; 0x1000 + 8006fe2: 601a str r2, [r3, #0] + + /* Set analog filter bit*/ + hi2c->Instance->CR1 |= AnalogFilter; + 8006fe4: 681a ldr r2, [r3, #0] + 8006fe6: 4311 orrs r1, r2 + 8006fe8: 6019 str r1, [r3, #0] + + __HAL_I2C_ENABLE(hi2c); + 8006fea: 681a ldr r2, [r3, #0] + 8006fec: f042 0201 orr.w r2, r2, #1 + 8006ff0: 601a str r2, [r3, #0] + + hi2c->State = HAL_I2C_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + 8006ff2: 2300 movs r3, #0 + hi2c->State = HAL_I2C_STATE_READY; + 8006ff4: f880 4041 strb.w r4, [r0, #65] ; 0x41 + __HAL_UNLOCK(hi2c); + 8006ff8: f880 3040 strb.w r3, [r0, #64] ; 0x40 + + return HAL_OK; + 8006ffc: 4618 mov r0, r3 + } + else + { + return HAL_BUSY; + } +} + 8006ffe: bd10 pop {r4, pc} + return HAL_BUSY; + 8007000: 2002 movs r0, #2 + 8007002: e7fc b.n 8006ffe + +08007004 : + * the configuration information for the specified I2Cx peripheral. + * @param DigitalFilter Coefficient of digital noise filter between Min_Data=0x00 and Max_Data=0x0F. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2CEx_ConfigDigitalFilter(I2C_HandleTypeDef *hi2c, uint32_t DigitalFilter) +{ + 8007004: b510 push {r4, lr} + + /* Check the parameters */ + assert_param(IS_I2C_ALL_INSTANCE(hi2c->Instance)); + assert_param(IS_I2C_DIGITAL_FILTER(DigitalFilter)); + + if (hi2c->State == HAL_I2C_STATE_READY) + 8007006: f890 3041 ldrb.w r3, [r0, #65] ; 0x41 + 800700a: 2b20 cmp r3, #32 + 800700c: b2dc uxtb r4, r3 + 800700e: d11c bne.n 800704a + { + /* Process Locked */ + __HAL_LOCK(hi2c); + 8007010: f890 3040 ldrb.w r3, [r0, #64] ; 0x40 + 8007014: 2b01 cmp r3, #1 + 8007016: d018 beq.n 800704a + + hi2c->State = HAL_I2C_STATE_BUSY; + 8007018: 2324 movs r3, #36 ; 0x24 + 800701a: f880 3041 strb.w r3, [r0, #65] ; 0x41 + + /* Disable the selected I2C peripheral */ + __HAL_I2C_DISABLE(hi2c); + 800701e: 6803 ldr r3, [r0, #0] + 8007020: 681a ldr r2, [r3, #0] + 8007022: f022 0201 bic.w r2, r2, #1 + 8007026: 601a str r2, [r3, #0] + + /* Get the old register value */ + tmpreg = hi2c->Instance->CR1; + 8007028: 681a ldr r2, [r3, #0] + + /* Reset I2Cx DNF bits [11:8] */ + tmpreg &= ~(I2C_CR1_DNF); + 800702a: f422 6270 bic.w r2, r2, #3840 ; 0xf00 + + /* Set I2Cx DNF coefficient */ + tmpreg |= DigitalFilter << 8U; + 800702e: ea42 2101 orr.w r1, r2, r1, lsl #8 + + /* Store the new register value */ + hi2c->Instance->CR1 = tmpreg; + 8007032: 6019 str r1, [r3, #0] + + __HAL_I2C_ENABLE(hi2c); + 8007034: 681a ldr r2, [r3, #0] + 8007036: f042 0201 orr.w r2, r2, #1 + 800703a: 601a str r2, [r3, #0] + + hi2c->State = HAL_I2C_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + 800703c: 2300 movs r3, #0 + hi2c->State = HAL_I2C_STATE_READY; + 800703e: f880 4041 strb.w r4, [r0, #65] ; 0x41 + __HAL_UNLOCK(hi2c); + 8007042: f880 3040 strb.w r3, [r0, #64] ; 0x40 + + return HAL_OK; + 8007046: 4618 mov r0, r3 + } + else + { + return HAL_BUSY; + } +} + 8007048: bd10 pop {r4, pc} + return HAL_BUSY; + 800704a: 2002 movs r0, #2 + 800704c: e7fc b.n 8007048 + ... + +08007050 : + uint32_t tmp1; + uint32_t tmp2; + + /* Configure the horizontal start and stop position */ + tmp = ((pLayerCfg->WindowX1 + ((hltdc->Instance->BPCR & LTDC_BPCR_AHBP) >> 16U)) << 16U); + LTDC_LAYER(hltdc, LayerIdx)->WHPCR &= ~(LTDC_LxWHPCR_WHSTPOS | LTDC_LxWHPCR_WHSPPOS); + 8007050: 01d2 lsls r2, r2, #7 + tmp = ((pLayerCfg->WindowX1 + ((hltdc->Instance->BPCR & LTDC_BPCR_AHBP) >> 16U)) << 16U); + 8007052: 6800 ldr r0, [r0, #0] + LTDC_LAYER(hltdc, LayerIdx)->WHPCR = ((pLayerCfg->WindowX0 + \ + 8007054: f8d1 c000 ldr.w ip, [r1] + LTDC_LAYER(hltdc, LayerIdx)->WHPCR &= ~(LTDC_LxWHPCR_WHSTPOS | LTDC_LxWHPCR_WHSPPOS); + 8007058: 3284 adds r2, #132 ; 0x84 + 800705a: 1883 adds r3, r0, r2 +{ + 800705c: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} + tmp = ((pLayerCfg->WindowX1 + ((hltdc->Instance->BPCR & LTDC_BPCR_AHBP) >> 16U)) << 16U); + 8007060: 68c6 ldr r6, [r0, #12] + ((hltdc->Instance->BPCR & LTDC_BPCR_AHBP) >> 16U) + 1U) | tmp); + 8007062: f10c 0701 add.w r7, ip, #1 + LTDC_LAYER(hltdc, LayerIdx)->WHPCR &= ~(LTDC_LxWHPCR_WHSTPOS | LTDC_LxWHPCR_WHSPPOS); + 8007066: 685d ldr r5, [r3, #4] + + /* Configure the default color values */ + tmp = ((uint32_t)(pLayerCfg->Backcolor.Green) << 8U); + tmp1 = ((uint32_t)(pLayerCfg->Backcolor.Red) << 16U); + tmp2 = (pLayerCfg->Alpha0 << 24U); + LTDC_LAYER(hltdc, LayerIdx)->DCCR &= ~(LTDC_LxDCCR_DCBLUE | LTDC_LxDCCR_DCGREEN | LTDC_LxDCCR_DCRED | + 8007068: f04f 0e00 mov.w lr, #0 + tmp = ((pLayerCfg->WindowX1 + ((hltdc->Instance->BPCR & LTDC_BPCR_AHBP) >> 16U)) << 16U); + 800706c: 684c ldr r4, [r1, #4] + 800706e: f3c6 460b ubfx r6, r6, #16, #12 + LTDC_LAYER(hltdc, LayerIdx)->WHPCR &= ~(LTDC_LxWHPCR_WHSTPOS | LTDC_LxWHPCR_WHSPPOS); + 8007072: f405 4570 and.w r5, r5, #61440 ; 0xf000 + tmp2 = (pLayerCfg->Alpha0 << 24U); + 8007076: f8d1 9018 ldr.w r9, [r1, #24] + tmp = ((pLayerCfg->WindowX1 + ((hltdc->Instance->BPCR & LTDC_BPCR_AHBP) >> 16U)) << 16U); + 800707a: 4426 add r6, r4 + LTDC_LAYER(hltdc, LayerIdx)->WHPCR &= ~(LTDC_LxWHPCR_WHSTPOS | LTDC_LxWHPCR_WHSPPOS); + 800707c: 605d str r5, [r3, #4] + ((hltdc->Instance->BPCR & LTDC_BPCR_AHBP) >> 16U) + 1U) | tmp); + 800707e: 68c5 ldr r5, [r0, #12] + 8007080: f3c5 450b ubfx r5, r5, #16, #12 + 8007084: 443d add r5, r7 + 8007086: ea45 4506 orr.w r5, r5, r6, lsl #16 + LTDC_LAYER(hltdc, LayerIdx)->WHPCR = ((pLayerCfg->WindowX0 + \ + 800708a: 605d str r5, [r3, #4] + tmp = ((pLayerCfg->WindowY1 + (hltdc->Instance->BPCR & LTDC_BPCR_AVBP)) << 16U); + 800708c: 68c6 ldr r6, [r0, #12] + 800708e: 68cd ldr r5, [r1, #12] + 8007090: f3c6 060a ubfx r6, r6, #0, #11 + 8007094: 442e add r6, r5 + LTDC_LAYER(hltdc, LayerIdx)->WVPCR &= ~(LTDC_LxWVPCR_WVSTPOS | LTDC_LxWVPCR_WVSPPOS); + 8007096: 689d ldr r5, [r3, #8] + 8007098: f405 4570 and.w r5, r5, #61440 ; 0xf000 + 800709c: 609d str r5, [r3, #8] + LTDC_LAYER(hltdc, LayerIdx)->WVPCR = ((pLayerCfg->WindowY0 + (hltdc->Instance->BPCR & LTDC_BPCR_AVBP) + 1U) | tmp); + 800709e: 688d ldr r5, [r1, #8] + 80070a0: 68c7 ldr r7, [r0, #12] + 80070a2: 3501 adds r5, #1 + 80070a4: f3c7 070a ubfx r7, r7, #0, #11 + 80070a8: 443d add r5, r7 + 80070aa: ea45 4506 orr.w r5, r5, r6, lsl #16 + LTDC_LAYER(hltdc, LayerIdx)->PFCR = (pLayerCfg->PixelFormat); + 80070ae: 690e ldr r6, [r1, #16] + LTDC_LAYER(hltdc, LayerIdx)->WVPCR = ((pLayerCfg->WindowY0 + (hltdc->Instance->BPCR & LTDC_BPCR_AVBP) + 1U) | tmp); + 80070b0: 609d str r5, [r3, #8] + LTDC_LAYER(hltdc, LayerIdx)->PFCR &= ~(LTDC_LxPFCR_PF); + 80070b2: 691d ldr r5, [r3, #16] + 80070b4: f025 0507 bic.w r5, r5, #7 + 80070b8: 611d str r5, [r3, #16] + LTDC_LAYER(hltdc, LayerIdx)->PFCR = (pLayerCfg->PixelFormat); + 80070ba: 611e str r6, [r3, #16] + LTDC_LAYER(hltdc, LayerIdx)->DCCR &= ~(LTDC_LxDCCR_DCBLUE | LTDC_LxDCCR_DCGREEN | LTDC_LxDCCR_DCRED | + 80070bc: 699d ldr r5, [r3, #24] + tmp1 = ((uint32_t)(pLayerCfg->Backcolor.Red) << 16U); + 80070be: f891 7032 ldrb.w r7, [r1, #50] ; 0x32 + tmp = ((uint32_t)(pLayerCfg->Backcolor.Green) << 8U); + 80070c2: f891 8031 ldrb.w r8, [r1, #49] ; 0x31 + LTDC_LAYER(hltdc, LayerIdx)->DCCR &= ~(LTDC_LxDCCR_DCBLUE | LTDC_LxDCCR_DCGREEN | LTDC_LxDCCR_DCRED | + 80070c6: f8c3 e018 str.w lr, [r3, #24] + LTDC_LxDCCR_DCALPHA); + LTDC_LAYER(hltdc, LayerIdx)->DCCR = (pLayerCfg->Backcolor.Blue | tmp | tmp1 | tmp2); + 80070ca: f891 5030 ldrb.w r5, [r1, #48] ; 0x30 + 80070ce: ea45 6509 orr.w r5, r5, r9, lsl #24 + 80070d2: ea45 2508 orr.w r5, r5, r8, lsl #8 + 80070d6: ea45 4507 orr.w r5, r5, r7, lsl #16 + 80070da: 619d str r5, [r3, #24] + + /* Specifies the constant alpha value */ + LTDC_LAYER(hltdc, LayerIdx)->CACR &= ~(LTDC_LxCACR_CONSTA); + 80070dc: 695d ldr r5, [r3, #20] + 80070de: f025 05ff bic.w r5, r5, #255 ; 0xff + 80070e2: 615d str r5, [r3, #20] + LTDC_LAYER(hltdc, LayerIdx)->CACR = (pLayerCfg->Alpha); + 80070e4: 694d ldr r5, [r1, #20] + 80070e6: 615d str r5, [r3, #20] + + /* Specifies the blending factors */ + LTDC_LAYER(hltdc, LayerIdx)->BFCR &= ~(LTDC_LxBFCR_BF2 | LTDC_LxBFCR_BF1); + 80070e8: 69dd ldr r5, [r3, #28] + 80070ea: f425 65e0 bic.w r5, r5, #1792 ; 0x700 + 80070ee: f025 0507 bic.w r5, r5, #7 + 80070f2: 61dd str r5, [r3, #28] + LTDC_LAYER(hltdc, LayerIdx)->BFCR = (pLayerCfg->BlendingFactor1 | pLayerCfg->BlendingFactor2); + 80070f4: e9d1 5707 ldrd r5, r7, [r1, #28] + 80070f8: 433d orrs r5, r7 + 80070fa: 61dd str r5, [r3, #28] + + /* Configure the color frame buffer start address */ + LTDC_LAYER(hltdc, LayerIdx)->CFBAR &= ~(LTDC_LxCFBAR_CFBADD); + 80070fc: 6a9d ldr r5, [r3, #40] ; 0x28 + LTDC_LAYER(hltdc, LayerIdx)->CFBAR = (pLayerCfg->FBStartAdress); + 80070fe: 6a4d ldr r5, [r1, #36] ; 0x24 + LTDC_LAYER(hltdc, LayerIdx)->CFBAR &= ~(LTDC_LxCFBAR_CFBADD); + 8007100: f8c3 e028 str.w lr, [r3, #40] ; 0x28 + LTDC_LAYER(hltdc, LayerIdx)->CFBAR = (pLayerCfg->FBStartAdress); + 8007104: 629d str r5, [r3, #40] ; 0x28 + + if (pLayerCfg->PixelFormat == LTDC_PIXEL_FORMAT_ARGB8888) + 8007106: b1fe cbz r6, 8007148 + { + tmp = 4U; + } + else if (pLayerCfg->PixelFormat == LTDC_PIXEL_FORMAT_RGB888) + 8007108: 3e01 subs r6, #1 + 800710a: 2e06 cmp r6, #6 + 800710c: d81e bhi.n 800714c + 800710e: 4d10 ldr r5, [pc, #64] ; (8007150 ) + 8007110: 5dad ldrb r5, [r5, r6] + { + tmp = 1U; + } + + /* Configure the color frame buffer pitch in byte */ + LTDC_LAYER(hltdc, LayerIdx)->CFBLR &= ~(LTDC_LxCFBLR_CFBLL | LTDC_LxCFBLR_CFBP); + 8007112: 6ade ldr r6, [r3, #44] ; 0x2c + LTDC_LAYER(hltdc, LayerIdx)->CFBLR = (((pLayerCfg->ImageWidth * tmp) << 16U) | \ + (((pLayerCfg->WindowX1 - pLayerCfg->WindowX0) * tmp) + 3U)); + 8007114: eba4 040c sub.w r4, r4, ip + LTDC_LAYER(hltdc, LayerIdx)->CFBLR &= ~(LTDC_LxCFBLR_CFBLL | LTDC_LxCFBLR_CFBP); + 8007118: f006 26e0 and.w r6, r6, #3758153728 ; 0xe000e000 + (((pLayerCfg->WindowX1 - pLayerCfg->WindowX0) * tmp) + 3U)); + 800711c: 436c muls r4, r5 + LTDC_LAYER(hltdc, LayerIdx)->CFBLR &= ~(LTDC_LxCFBLR_CFBLL | LTDC_LxCFBLR_CFBP); + 800711e: 62de str r6, [r3, #44] ; 0x2c + (((pLayerCfg->WindowX1 - pLayerCfg->WindowX0) * tmp) + 3U)); + 8007120: 3403 adds r4, #3 + LTDC_LAYER(hltdc, LayerIdx)->CFBLR = (((pLayerCfg->ImageWidth * tmp) << 16U) | \ + 8007122: 6a8e ldr r6, [r1, #40] ; 0x28 + /* Configure the frame buffer line number */ + LTDC_LAYER(hltdc, LayerIdx)->CFBLNR &= ~(LTDC_LxCFBLNR_CFBLNBR); + LTDC_LAYER(hltdc, LayerIdx)->CFBLNR = (pLayerCfg->ImageHeight); + 8007124: 6ac9 ldr r1, [r1, #44] ; 0x2c + LTDC_LAYER(hltdc, LayerIdx)->CFBLR = (((pLayerCfg->ImageWidth * tmp) << 16U) | \ + 8007126: 436e muls r6, r5 + 8007128: ea44 4406 orr.w r4, r4, r6, lsl #16 + 800712c: 62dc str r4, [r3, #44] ; 0x2c + LTDC_LAYER(hltdc, LayerIdx)->CFBLNR &= ~(LTDC_LxCFBLNR_CFBLNBR); + 800712e: 6b1c ldr r4, [r3, #48] ; 0x30 + 8007130: f424 64ff bic.w r4, r4, #2040 ; 0x7f8 + 8007134: f024 0407 bic.w r4, r4, #7 + 8007138: 631c str r4, [r3, #48] ; 0x30 + LTDC_LAYER(hltdc, LayerIdx)->CFBLNR = (pLayerCfg->ImageHeight); + 800713a: 6319 str r1, [r3, #48] ; 0x30 + + /* Enable LTDC_Layer by setting LEN bit */ + LTDC_LAYER(hltdc, LayerIdx)->CR |= (uint32_t)LTDC_LxCR_LEN; + 800713c: 5883 ldr r3, [r0, r2] + 800713e: f043 0301 orr.w r3, r3, #1 + 8007142: 5083 str r3, [r0, r2] +} + 8007144: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} + tmp = 4U; + 8007148: 2504 movs r5, #4 + 800714a: e7e2 b.n 8007112 + if (pLayerCfg->PixelFormat == LTDC_PIXEL_FORMAT_ARGB8888) + 800714c: 2501 movs r5, #1 + 800714e: e7e0 b.n 8007112 + 8007150: 08037cd4 .word 0x08037cd4 + +08007154 : +{ + 8007154: b538 push {r3, r4, r5, lr} + if (hltdc == NULL) + 8007156: 4604 mov r4, r0 + 8007158: 2800 cmp r0, #0 + 800715a: d063 beq.n 8007224 + if (hltdc->State == HAL_LTDC_STATE_RESET) + 800715c: f890 30a1 ldrb.w r3, [r0, #161] ; 0xa1 + 8007160: f003 02ff and.w r2, r3, #255 ; 0xff + 8007164: b91b cbnz r3, 800716e + hltdc->Lock = HAL_UNLOCKED; + 8007166: f880 20a0 strb.w r2, [r0, #160] ; 0xa0 + HAL_LTDC_MspInit(hltdc); + 800716a: f7fa fb2d bl 80017c8 + hltdc->State = HAL_LTDC_STATE_BUSY; + 800716e: 2302 movs r3, #2 + 8007170: f884 30a1 strb.w r3, [r4, #161] ; 0xa1 + hltdc->Instance->GCR &= ~(LTDC_GCR_HSPOL | LTDC_GCR_VSPOL | LTDC_GCR_DEPOL | LTDC_GCR_PCPOL); + 8007174: 6823 ldr r3, [r4, #0] + 8007176: 699a ldr r2, [r3, #24] + 8007178: f022 4270 bic.w r2, r2, #4026531840 ; 0xf0000000 + 800717c: 619a str r2, [r3, #24] + hltdc->Instance->GCR |= (uint32_t)(hltdc->Init.HSPolarity | hltdc->Init.VSPolarity | \ + 800717e: 6999 ldr r1, [r3, #24] + 8007180: e9d4 2001 ldrd r2, r0, [r4, #4] + 8007184: 4302 orrs r2, r0 + 8007186: 68e0 ldr r0, [r4, #12] + 8007188: 4302 orrs r2, r0 + hltdc->Init.DEPolarity | hltdc->Init.PCPolarity); + 800718a: 6920 ldr r0, [r4, #16] + 800718c: 4302 orrs r2, r0 + tmp = (hltdc->Init.HorizontalSync << 16U); + 800718e: 6960 ldr r0, [r4, #20] + hltdc->Instance->GCR |= (uint32_t)(hltdc->Init.HSPolarity | hltdc->Init.VSPolarity | \ + 8007190: 430a orrs r2, r1 + hltdc->Instance->SSCR &= ~(LTDC_SSCR_VSH | LTDC_SSCR_HSW); + 8007192: 4925 ldr r1, [pc, #148] ; (8007228 ) + hltdc->Instance->GCR |= (uint32_t)(hltdc->Init.HSPolarity | hltdc->Init.VSPolarity | \ + 8007194: 619a str r2, [r3, #24] + hltdc->Instance->SSCR &= ~(LTDC_SSCR_VSH | LTDC_SSCR_HSW); + 8007196: 689a ldr r2, [r3, #8] + 8007198: 400a ands r2, r1 + 800719a: 609a str r2, [r3, #8] + hltdc->Instance->SSCR |= (tmp | hltdc->Init.VerticalSync); + 800719c: 689a ldr r2, [r3, #8] + 800719e: ea42 4200 orr.w r2, r2, r0, lsl #16 + 80071a2: 69a0 ldr r0, [r4, #24] + 80071a4: 4302 orrs r2, r0 + tmp = (hltdc->Init.AccumulatedHBP << 16U); + 80071a6: 69e0 ldr r0, [r4, #28] + hltdc->Instance->SSCR |= (tmp | hltdc->Init.VerticalSync); + 80071a8: 609a str r2, [r3, #8] + hltdc->Instance->BPCR &= ~(LTDC_BPCR_AVBP | LTDC_BPCR_AHBP); + 80071aa: 68da ldr r2, [r3, #12] + 80071ac: 400a ands r2, r1 + 80071ae: 60da str r2, [r3, #12] + hltdc->Instance->BPCR |= (tmp | hltdc->Init.AccumulatedVBP); + 80071b0: 68da ldr r2, [r3, #12] + 80071b2: ea42 4200 orr.w r2, r2, r0, lsl #16 + 80071b6: 6a20 ldr r0, [r4, #32] + 80071b8: 4302 orrs r2, r0 + tmp = (hltdc->Init.AccumulatedActiveW << 16U); + 80071ba: 6a60 ldr r0, [r4, #36] ; 0x24 + hltdc->Instance->BPCR |= (tmp | hltdc->Init.AccumulatedVBP); + 80071bc: 60da str r2, [r3, #12] + hltdc->Instance->AWCR &= ~(LTDC_AWCR_AAH | LTDC_AWCR_AAW); + 80071be: 691a ldr r2, [r3, #16] + 80071c0: 400a ands r2, r1 + 80071c2: 611a str r2, [r3, #16] + hltdc->Instance->AWCR |= (tmp | hltdc->Init.AccumulatedActiveH); + 80071c4: 691a ldr r2, [r3, #16] + 80071c6: ea42 4200 orr.w r2, r2, r0, lsl #16 + 80071ca: 6aa0 ldr r0, [r4, #40] ; 0x28 + 80071cc: 4302 orrs r2, r0 + 80071ce: 611a str r2, [r3, #16] + hltdc->Instance->TWCR &= ~(LTDC_TWCR_TOTALH | LTDC_TWCR_TOTALW); + 80071d0: 695a ldr r2, [r3, #20] + 80071d2: 400a ands r2, r1 + tmp = (hltdc->Init.TotalWidth << 16U); + 80071d4: 6ae1 ldr r1, [r4, #44] ; 0x2c + hltdc->Instance->TWCR &= ~(LTDC_TWCR_TOTALH | LTDC_TWCR_TOTALW); + 80071d6: 615a str r2, [r3, #20] + hltdc->Instance->TWCR |= (tmp | hltdc->Init.TotalHeigh); + 80071d8: 695a ldr r2, [r3, #20] + 80071da: ea42 4201 orr.w r2, r2, r1, lsl #16 + 80071de: 6b21 ldr r1, [r4, #48] ; 0x30 + 80071e0: 430a orrs r2, r1 + 80071e2: 615a str r2, [r3, #20] + hltdc->Instance->BCCR &= ~(LTDC_BCCR_BCBLUE | LTDC_BCCR_BCGREEN | LTDC_BCCR_BCRED); + 80071e4: 6ada ldr r2, [r3, #44] ; 0x2c + tmp = ((uint32_t)(hltdc->Init.Backcolor.Green) << 8U); + 80071e6: f894 0035 ldrb.w r0, [r4, #53] ; 0x35 + hltdc->Instance->BCCR &= ~(LTDC_BCCR_BCBLUE | LTDC_BCCR_BCGREEN | LTDC_BCCR_BCRED); + 80071ea: f002 427f and.w r2, r2, #4278190080 ; 0xff000000 + tmp1 = ((uint32_t)(hltdc->Init.Backcolor.Red) << 16U); + 80071ee: f894 1036 ldrb.w r1, [r4, #54] ; 0x36 + hltdc->Instance->BCCR &= ~(LTDC_BCCR_BCBLUE | LTDC_BCCR_BCGREEN | LTDC_BCCR_BCRED); + 80071f2: 62da str r2, [r3, #44] ; 0x2c + hltdc->Instance->BCCR |= (tmp1 | tmp | hltdc->Init.Backcolor.Blue); + 80071f4: 6add ldr r5, [r3, #44] ; 0x2c + 80071f6: f894 2034 ldrb.w r2, [r4, #52] ; 0x34 + 80071fa: 432a orrs r2, r5 + 80071fc: ea42 2200 orr.w r2, r2, r0, lsl #8 + hltdc->ErrorCode = HAL_LTDC_ERROR_NONE; + 8007200: 2000 movs r0, #0 + hltdc->Instance->BCCR |= (tmp1 | tmp | hltdc->Init.Backcolor.Blue); + 8007202: ea42 4201 orr.w r2, r2, r1, lsl #16 + 8007206: 62da str r2, [r3, #44] ; 0x2c + __HAL_LTDC_ENABLE_IT(hltdc, LTDC_IT_TE | LTDC_IT_FU); + 8007208: 6b5a ldr r2, [r3, #52] ; 0x34 + 800720a: f042 0206 orr.w r2, r2, #6 + 800720e: 635a str r2, [r3, #52] ; 0x34 + __HAL_LTDC_ENABLE(hltdc); + 8007210: 699a ldr r2, [r3, #24] + 8007212: f042 0201 orr.w r2, r2, #1 + 8007216: 619a str r2, [r3, #24] + hltdc->State = HAL_LTDC_STATE_READY; + 8007218: 2301 movs r3, #1 + hltdc->ErrorCode = HAL_LTDC_ERROR_NONE; + 800721a: f8c4 00a4 str.w r0, [r4, #164] ; 0xa4 + hltdc->State = HAL_LTDC_STATE_READY; + 800721e: f884 30a1 strb.w r3, [r4, #161] ; 0xa1 +} + 8007222: bd38 pop {r3, r4, r5, pc} + return HAL_ERROR; + 8007224: 2001 movs r0, #1 + 8007226: e7fc b.n 8007222 + 8007228: f000f800 .word 0xf000f800 + +0800722c : + 800722c: 4770 bx lr + +0800722e : + 800722e: 4770 bx lr + +08007230 : + uint32_t isrflags = READ_REG(hltdc->Instance->ISR); + 8007230: 6803 ldr r3, [r0, #0] +{ + 8007232: b570 push {r4, r5, r6, lr} + uint32_t isrflags = READ_REG(hltdc->Instance->ISR); + 8007234: 6b9e ldr r6, [r3, #56] ; 0x38 +{ + 8007236: 4604 mov r4, r0 + uint32_t itsources = READ_REG(hltdc->Instance->IER); + 8007238: 6b5d ldr r5, [r3, #52] ; 0x34 + if (((isrflags & LTDC_ISR_TERRIF) != 0U) && ((itsources & LTDC_IER_TERRIE) != 0U)) + 800723a: 0772 lsls r2, r6, #29 + 800723c: d514 bpl.n 8007268 + 800723e: 0769 lsls r1, r5, #29 + 8007240: d512 bpl.n 8007268 + __HAL_LTDC_DISABLE_IT(hltdc, LTDC_IT_TE); + 8007242: 6b5a ldr r2, [r3, #52] ; 0x34 + 8007244: f022 0204 bic.w r2, r2, #4 + 8007248: 635a str r2, [r3, #52] ; 0x34 + __HAL_LTDC_CLEAR_FLAG(hltdc, LTDC_FLAG_TE); + 800724a: 2204 movs r2, #4 + 800724c: 63da str r2, [r3, #60] ; 0x3c + hltdc->ErrorCode |= HAL_LTDC_ERROR_TE; + 800724e: f8d0 30a4 ldr.w r3, [r0, #164] ; 0xa4 + 8007252: f043 0301 orr.w r3, r3, #1 + 8007256: f8c0 30a4 str.w r3, [r0, #164] ; 0xa4 + __HAL_UNLOCK(hltdc); + 800725a: 2300 movs r3, #0 + hltdc->State = HAL_LTDC_STATE_ERROR; + 800725c: f880 20a1 strb.w r2, [r0, #161] ; 0xa1 + __HAL_UNLOCK(hltdc); + 8007260: f880 30a0 strb.w r3, [r0, #160] ; 0xa0 + HAL_LTDC_ErrorCallback(hltdc); + 8007264: f7ff ffe2 bl 800722c + if (((isrflags & LTDC_ISR_FUIF) != 0U) && ((itsources & LTDC_IER_FUIE) != 0U)) + 8007268: 07b2 lsls r2, r6, #30 + 800726a: d516 bpl.n 800729a + 800726c: 07ab lsls r3, r5, #30 + 800726e: d514 bpl.n 800729a + __HAL_LTDC_DISABLE_IT(hltdc, LTDC_IT_FU); + 8007270: 6823 ldr r3, [r4, #0] + HAL_LTDC_ErrorCallback(hltdc); + 8007272: 4620 mov r0, r4 + __HAL_LTDC_DISABLE_IT(hltdc, LTDC_IT_FU); + 8007274: 6b5a ldr r2, [r3, #52] ; 0x34 + 8007276: f022 0202 bic.w r2, r2, #2 + 800727a: 635a str r2, [r3, #52] ; 0x34 + __HAL_LTDC_CLEAR_FLAG(hltdc, LTDC_FLAG_FU); + 800727c: 2202 movs r2, #2 + 800727e: 63da str r2, [r3, #60] ; 0x3c + hltdc->ErrorCode |= HAL_LTDC_ERROR_FU; + 8007280: f8d4 30a4 ldr.w r3, [r4, #164] ; 0xa4 + 8007284: 4313 orrs r3, r2 + 8007286: f8c4 30a4 str.w r3, [r4, #164] ; 0xa4 + hltdc->State = HAL_LTDC_STATE_ERROR; + 800728a: 2304 movs r3, #4 + 800728c: f884 30a1 strb.w r3, [r4, #161] ; 0xa1 + __HAL_UNLOCK(hltdc); + 8007290: 2300 movs r3, #0 + 8007292: f884 30a0 strb.w r3, [r4, #160] ; 0xa0 + HAL_LTDC_ErrorCallback(hltdc); + 8007296: f7ff ffc9 bl 800722c + if (((isrflags & LTDC_ISR_LIF) != 0U) && ((itsources & LTDC_IER_LIE) != 0U)) + 800729a: 07f0 lsls r0, r6, #31 + 800729c: d510 bpl.n 80072c0 + 800729e: 07e9 lsls r1, r5, #31 + 80072a0: d50e bpl.n 80072c0 + __HAL_LTDC_DISABLE_IT(hltdc, LTDC_IT_LI); + 80072a2: 6823 ldr r3, [r4, #0] + HAL_LTDC_LineEventCallback(hltdc); + 80072a4: 4620 mov r0, r4 + __HAL_LTDC_DISABLE_IT(hltdc, LTDC_IT_LI); + 80072a6: 6b5a ldr r2, [r3, #52] ; 0x34 + 80072a8: f022 0201 bic.w r2, r2, #1 + 80072ac: 635a str r2, [r3, #52] ; 0x34 + __HAL_LTDC_CLEAR_FLAG(hltdc, LTDC_FLAG_LI); + 80072ae: 2201 movs r2, #1 + 80072b0: 63da str r2, [r3, #60] ; 0x3c + __HAL_UNLOCK(hltdc); + 80072b2: 2300 movs r3, #0 + hltdc->State = HAL_LTDC_STATE_READY; + 80072b4: f884 20a1 strb.w r2, [r4, #161] ; 0xa1 + __HAL_UNLOCK(hltdc); + 80072b8: f884 30a0 strb.w r3, [r4, #160] ; 0xa0 + HAL_LTDC_LineEventCallback(hltdc); + 80072bc: f7fc fca2 bl 8003c04 + if (((isrflags & LTDC_ISR_RRIF) != 0U) && ((itsources & LTDC_IER_RRIE) != 0U)) + 80072c0: 0732 lsls r2, r6, #28 + 80072c2: d511 bpl.n 80072e8 + 80072c4: 072b lsls r3, r5, #28 + 80072c6: d50f bpl.n 80072e8 + __HAL_LTDC_DISABLE_IT(hltdc, LTDC_IT_RR); + 80072c8: 6823 ldr r3, [r4, #0] + HAL_LTDC_ReloadEventCallback(hltdc); + 80072ca: 4620 mov r0, r4 + __HAL_LTDC_DISABLE_IT(hltdc, LTDC_IT_RR); + 80072cc: 6b5a ldr r2, [r3, #52] ; 0x34 + 80072ce: f022 0208 bic.w r2, r2, #8 + 80072d2: 635a str r2, [r3, #52] ; 0x34 + __HAL_LTDC_CLEAR_FLAG(hltdc, LTDC_FLAG_RR); + 80072d4: 2208 movs r2, #8 + 80072d6: 63da str r2, [r3, #60] ; 0x3c + hltdc->State = HAL_LTDC_STATE_READY; + 80072d8: 2301 movs r3, #1 + 80072da: f884 30a1 strb.w r3, [r4, #161] ; 0xa1 + __HAL_UNLOCK(hltdc); + 80072de: 2300 movs r3, #0 + 80072e0: f884 30a0 strb.w r3, [r4, #160] ; 0xa0 + HAL_LTDC_ReloadEventCallback(hltdc); + 80072e4: f7ff ffa3 bl 800722e +} + 80072e8: bd70 pop {r4, r5, r6, pc} + +080072ea : +{ + 80072ea: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} + __HAL_LOCK(hltdc); + 80072ee: f890 30a0 ldrb.w r3, [r0, #160] ; 0xa0 +{ + 80072f2: 4606 mov r6, r0 + 80072f4: 460f mov r7, r1 + 80072f6: 4694 mov ip, r2 + __HAL_LOCK(hltdc); + 80072f8: 2b01 cmp r3, #1 + 80072fa: f04f 0002 mov.w r0, #2 + 80072fe: d01f beq.n 8007340 + hltdc->LayerCfg[LayerIdx] = *pLayerCfg; + 8007300: 2434 movs r4, #52 ; 0x34 + __HAL_LOCK(hltdc); + 8007302: f04f 0801 mov.w r8, #1 + hltdc->LayerCfg[LayerIdx] = *pLayerCfg; + 8007306: 460d mov r5, r1 + hltdc->State = HAL_LTDC_STATE_BUSY; + 8007308: f886 00a1 strb.w r0, [r6, #161] ; 0xa1 + hltdc->LayerCfg[LayerIdx] = *pLayerCfg; + 800730c: fb04 6402 mla r4, r4, r2, r6 + __HAL_LOCK(hltdc); + 8007310: f886 80a0 strb.w r8, [r6, #160] ; 0xa0 + hltdc->LayerCfg[LayerIdx] = *pLayerCfg; + 8007314: 3438 adds r4, #56 ; 0x38 + 8007316: cd0f ldmia r5!, {r0, r1, r2, r3} + 8007318: c40f stmia r4!, {r0, r1, r2, r3} + 800731a: cd0f ldmia r5!, {r0, r1, r2, r3} + 800731c: c40f stmia r4!, {r0, r1, r2, r3} + 800731e: cd0f ldmia r5!, {r0, r1, r2, r3} + 8007320: c40f stmia r4!, {r0, r1, r2, r3} + 8007322: 682b ldr r3, [r5, #0] + LTDC_SetConfig(hltdc, pLayerCfg, LayerIdx); + 8007324: 4630 mov r0, r6 + 8007326: 4662 mov r2, ip + 8007328: 4639 mov r1, r7 + hltdc->LayerCfg[LayerIdx] = *pLayerCfg; + 800732a: 6023 str r3, [r4, #0] + LTDC_SetConfig(hltdc, pLayerCfg, LayerIdx); + 800732c: f7ff fe90 bl 8007050 + hltdc->Instance->SRCR = LTDC_SRCR_IMR; + 8007330: 6833 ldr r3, [r6, #0] + __HAL_UNLOCK(hltdc); + 8007332: 2000 movs r0, #0 + hltdc->Instance->SRCR = LTDC_SRCR_IMR; + 8007334: f8c3 8024 str.w r8, [r3, #36] ; 0x24 + hltdc->State = HAL_LTDC_STATE_READY; + 8007338: f886 80a1 strb.w r8, [r6, #161] ; 0xa1 + __HAL_UNLOCK(hltdc); + 800733c: f886 00a0 strb.w r0, [r6, #160] ; 0xa0 +} + 8007340: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + +08007344 : + __HAL_LOCK(hltdc); + 8007344: f890 30a0 ldrb.w r3, [r0, #160] ; 0xa0 + 8007348: 2b01 cmp r3, #1 + 800734a: f04f 0302 mov.w r3, #2 + 800734e: d012 beq.n 8007376 + hltdc->State = HAL_LTDC_STATE_BUSY; + 8007350: f880 30a1 strb.w r3, [r0, #161] ; 0xa1 + __HAL_LTDC_DISABLE_IT(hltdc, LTDC_IT_LI); + 8007354: 6803 ldr r3, [r0, #0] + 8007356: 6b5a ldr r2, [r3, #52] ; 0x34 + 8007358: f022 0201 bic.w r2, r2, #1 + 800735c: 635a str r2, [r3, #52] ; 0x34 + LTDC->LIPCR = (uint32_t)Line; + 800735e: 4a07 ldr r2, [pc, #28] ; (800737c ) + 8007360: 6411 str r1, [r2, #64] ; 0x40 + __HAL_LTDC_ENABLE_IT(hltdc, LTDC_IT_LI); + 8007362: 6b5a ldr r2, [r3, #52] ; 0x34 + 8007364: f042 0201 orr.w r2, r2, #1 + 8007368: 635a str r2, [r3, #52] ; 0x34 + hltdc->State = HAL_LTDC_STATE_READY; + 800736a: 2301 movs r3, #1 + 800736c: f880 30a1 strb.w r3, [r0, #161] ; 0xa1 + __HAL_UNLOCK(hltdc); + 8007370: 2300 movs r3, #0 + 8007372: f880 30a0 strb.w r3, [r0, #160] ; 0xa0 + __HAL_LOCK(hltdc); + 8007376: 4618 mov r0, r3 +} + 8007378: 4770 bx lr + 800737a: bf00 nop + 800737c: 40016800 .word 0x40016800 + +08007380 : + */ +HAL_StatusTypeDef HAL_PWREx_EnableOverDrive(void) +{ + uint32_t tickstart = 0; + + __HAL_RCC_PWR_CLK_ENABLE(); + 8007380: 4b19 ldr r3, [pc, #100] ; (80073e8 ) +{ + 8007382: b537 push {r0, r1, r2, r4, r5, lr} + __HAL_RCC_PWR_CLK_ENABLE(); + 8007384: 6c1a ldr r2, [r3, #64] ; 0x40 + + /* Enable the Over-drive to extend the clock frequency to 216 MHz */ + __HAL_PWR_OVERDRIVE_ENABLE(); + 8007386: 4c19 ldr r4, [pc, #100] ; (80073ec ) + __HAL_RCC_PWR_CLK_ENABLE(); + 8007388: f042 5280 orr.w r2, r2, #268435456 ; 0x10000000 + 800738c: 641a str r2, [r3, #64] ; 0x40 + 800738e: 6c1b ldr r3, [r3, #64] ; 0x40 + 8007390: f003 5380 and.w r3, r3, #268435456 ; 0x10000000 + 8007394: 9301 str r3, [sp, #4] + 8007396: 9b01 ldr r3, [sp, #4] + __HAL_PWR_OVERDRIVE_ENABLE(); + 8007398: 6823 ldr r3, [r4, #0] + 800739a: f443 3380 orr.w r3, r3, #65536 ; 0x10000 + 800739e: 6023 str r3, [r4, #0] + + /* Get tick */ + tickstart = HAL_GetTick(); + 80073a0: f7fe f946 bl 8005630 + 80073a4: 4605 mov r5, r0 + + while(!__HAL_PWR_GET_FLAG(PWR_FLAG_ODRDY)) + 80073a6: 6863 ldr r3, [r4, #4] + 80073a8: 03da lsls r2, r3, #15 + 80073aa: d50c bpl.n 80073c6 + return HAL_TIMEOUT; + } + } + + /* Enable the Over-drive switch */ + __HAL_PWR_OVERDRIVESWITCHING_ENABLE(); + 80073ac: 6823 ldr r3, [r4, #0] + + /* Get tick */ + tickstart = HAL_GetTick(); + + while(!__HAL_PWR_GET_FLAG(PWR_FLAG_ODSWRDY)) + 80073ae: 4d0f ldr r5, [pc, #60] ; (80073ec ) + __HAL_PWR_OVERDRIVESWITCHING_ENABLE(); + 80073b0: f443 3300 orr.w r3, r3, #131072 ; 0x20000 + 80073b4: 6023 str r3, [r4, #0] + tickstart = HAL_GetTick(); + 80073b6: f7fe f93b bl 8005630 + 80073ba: 4604 mov r4, r0 + while(!__HAL_PWR_GET_FLAG(PWR_FLAG_ODSWRDY)) + 80073bc: 686b ldr r3, [r5, #4] + 80073be: 039b lsls r3, r3, #14 + 80073c0: d50a bpl.n 80073d8 + if((HAL_GetTick() - tickstart ) > PWR_OVERDRIVE_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + return HAL_OK; + 80073c2: 2000 movs r0, #0 + 80073c4: e006 b.n 80073d4 + if((HAL_GetTick() - tickstart ) > PWR_OVERDRIVE_TIMEOUT_VALUE) + 80073c6: f7fe f933 bl 8005630 + 80073ca: 1b40 subs r0, r0, r5 + 80073cc: f5b0 7f7a cmp.w r0, #1000 ; 0x3e8 + 80073d0: d9e9 bls.n 80073a6 + return HAL_TIMEOUT; + 80073d2: 2003 movs r0, #3 +} + 80073d4: b003 add sp, #12 + 80073d6: bd30 pop {r4, r5, pc} + if((HAL_GetTick() - tickstart ) > PWR_OVERDRIVE_TIMEOUT_VALUE) + 80073d8: f7fe f92a bl 8005630 + 80073dc: 1b00 subs r0, r0, r4 + 80073de: f5b0 7f7a cmp.w r0, #1000 ; 0x3e8 + 80073e2: d9eb bls.n 80073bc + 80073e4: e7f5 b.n 80073d2 + 80073e6: bf00 nop + 80073e8: 40023800 .word 0x40023800 + 80073ec: 40007000 .word 0x40007000 + +080073f0 : + * @arg QSPI_FUNCTIONAL_MODE_AUTO_POLLING: Automatic polling mode + * @arg QSPI_FUNCTIONAL_MODE_MEMORY_MAPPED: Memory-mapped mode + * @retval None + */ +static void QSPI_Config(QSPI_HandleTypeDef *hqspi, QSPI_CommandTypeDef *cmd, uint32_t FunctionalMode) +{ + 80073f0: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} + assert_param(IS_QSPI_FUNCTIONAL_MODE(FunctionalMode)); + + if ((cmd->DataMode != QSPI_DATA_NONE) && (FunctionalMode != QSPI_FUNCTIONAL_MODE_MEMORY_MAPPED)) + 80073f4: 6a4e ldr r6, [r1, #36] ; 0x24 + 80073f6: b136 cbz r6, 8007406 + 80073f8: f1b2 6f40 cmp.w r2, #201326592 ; 0xc000000 + 80073fc: d003 beq.n 8007406 + { + /* Configure QSPI: DLR register with the number of data to read or write */ + WRITE_REG(hqspi->Instance->DLR, (cmd->NbData - 1U)); + 80073fe: 6a8b ldr r3, [r1, #40] ; 0x28 + 8007400: 6804 ldr r4, [r0, #0] + 8007402: 3b01 subs r3, #1 + 8007404: 6123 str r3, [r4, #16] + } + + if (cmd->InstructionMode != QSPI_INSTRUCTION_NONE) + 8007406: f8d1 a018 ldr.w sl, [r1, #24] + if (cmd->AlternateByteMode != QSPI_ALTERNATE_BYTES_NONE) + { + /* Configure QSPI: ABR register with alternate bytes value */ + WRITE_REG(hqspi->Instance->ABR, cmd->AlternateBytes); + + if (cmd->AddressMode != QSPI_ADDRESS_NONE) + 800740a: e9d1 7e07 ldrd r7, lr, [r1, #28] + if (cmd->InstructionMode != QSPI_INSTRUCTION_NONE) + 800740e: f1ba 0f00 cmp.w sl, #0 + 8007412: d04c beq.n 80074ae + { + /*---- Command with instruction, address and alternate bytes ----*/ + /* Configure QSPI: CCR register with all communications parameters */ + WRITE_REG(hqspi->Instance->CCR, (cmd->DdrMode | cmd->DdrHoldHalfCycle | cmd->SIOOMode | + 8007414: 694c ldr r4, [r1, #20] + WRITE_REG(hqspi->Instance->DLR, (cmd->NbData - 1U)); + 8007416: 6805 ldr r5, [r0, #0] + WRITE_REG(hqspi->Instance->CCR, (cmd->DdrMode | cmd->DdrHoldHalfCycle | cmd->SIOOMode | + 8007418: ea4f 4c84 mov.w ip, r4, lsl #18 + 800741c: ea4a 0406 orr.w r4, sl, r6 + 8007420: 680b ldr r3, [r1, #0] + 8007422: f8d1 8034 ldr.w r8, [r1, #52] ; 0x34 + 8007426: ea44 0a02 orr.w sl, r4, r2 + 800742a: e9d1 090b ldrd r0, r9, [r1, #44] ; 0x2c + if (cmd->AlternateByteMode != QSPI_ALTERNATE_BYTES_NONE) + 800742e: f1be 0f00 cmp.w lr, #0 + 8007432: d024 beq.n 800747e + WRITE_REG(hqspi->Instance->ABR, cmd->AlternateBytes); + 8007434: 688e ldr r6, [r1, #8] + 8007436: ea4a 040e orr.w r4, sl, lr + 800743a: 61ee str r6, [r5, #28] + WRITE_REG(hqspi->Instance->CCR, (cmd->DdrMode | cmd->DdrHoldHalfCycle | cmd->SIOOMode | + 800743c: 690e ldr r6, [r1, #16] + if (cmd->AddressMode != QSPI_ADDRESS_NONE) + 800743e: b19f cbz r7, 8007468 + WRITE_REG(hqspi->Instance->CCR, (cmd->DdrMode | cmd->DdrHoldHalfCycle | cmd->SIOOMode | + 8007440: 433b orrs r3, r7 + 8007442: 4303 orrs r3, r0 + 8007444: 68c8 ldr r0, [r1, #12] + 8007446: ea43 0309 orr.w r3, r3, r9 + 800744a: ea43 0308 orr.w r3, r3, r8 + 800744e: 4333 orrs r3, r6 + 8007450: 4303 orrs r3, r0 + 8007452: ea43 030c orr.w r3, r3, ip + 8007456: 4323 orrs r3, r4 + WRITE_REG(hqspi->Instance->CCR, (cmd->DdrMode | cmd->DdrHoldHalfCycle | cmd->SIOOMode | + cmd->DataMode | (cmd->DummyCycles << QUADSPI_CCR_DCYC_Pos) | + cmd->AlternateByteMode | cmd->AddressSize | cmd->AddressMode | + cmd->InstructionMode | cmd->Instruction | FunctionalMode)); + + if (FunctionalMode != QSPI_FUNCTIONAL_MODE_MEMORY_MAPPED) + 8007458: f1b2 6f40 cmp.w r2, #201326592 ; 0xc000000 + WRITE_REG(hqspi->Instance->CCR, (cmd->DdrMode | cmd->DdrHoldHalfCycle | cmd->SIOOMode | + 800745c: 616b str r3, [r5, #20] + if (FunctionalMode != QSPI_FUNCTIONAL_MODE_MEMORY_MAPPED) + 800745e: d001 beq.n 8007464 + { + /* Configure QSPI: AR register with address value */ + WRITE_REG(hqspi->Instance->AR, cmd->Address); + 8007460: 684b ldr r3, [r1, #4] + 8007462: 61ab str r3, [r5, #24] + cmd->InstructionMode | FunctionalMode)); + } + } + } + } +} + 8007464: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + WRITE_REG(hqspi->Instance->CCR, (cmd->DdrMode | cmd->DdrHoldHalfCycle | cmd->SIOOMode | + 8007468: 4303 orrs r3, r0 + 800746a: ea43 0309 orr.w r3, r3, r9 + 800746e: ea43 0308 orr.w r3, r3, r8 + 8007472: 4333 orrs r3, r6 + 8007474: ea43 030c orr.w r3, r3, ip + 8007478: 4323 orrs r3, r4 + WRITE_REG(hqspi->Instance->CCR, (cmd->DdrMode | cmd->DdrHoldHalfCycle | cmd->SIOOMode | + 800747a: 616b str r3, [r5, #20] + 800747c: e7f2 b.n 8007464 + if (cmd->AddressMode != QSPI_ADDRESS_NONE) + 800747e: b167 cbz r7, 800749a + WRITE_REG(hqspi->Instance->CCR, (cmd->DdrMode | cmd->DdrHoldHalfCycle | cmd->SIOOMode | + 8007480: 433b orrs r3, r7 + 8007482: 4303 orrs r3, r0 + 8007484: 68c8 ldr r0, [r1, #12] + 8007486: ea43 0309 orr.w r3, r3, r9 + 800748a: ea43 0308 orr.w r3, r3, r8 + 800748e: 4303 orrs r3, r0 + 8007490: ea43 030c orr.w r3, r3, ip + 8007494: ea43 030a orr.w r3, r3, sl + 8007498: e7de b.n 8007458 + WRITE_REG(hqspi->Instance->CCR, (cmd->DdrMode | cmd->DdrHoldHalfCycle | cmd->SIOOMode | + 800749a: 4303 orrs r3, r0 + 800749c: ea43 0309 orr.w r3, r3, r9 + 80074a0: ea43 0408 orr.w r4, r3, r8 + 80074a4: ea44 030c orr.w r3, r4, ip + 80074a8: ea43 030a orr.w r3, r3, sl + 80074ac: e7e5 b.n 800747a + if (cmd->AlternateByteMode != QSPI_ALTERNATE_BYTES_NONE) + 80074ae: f1be 0f00 cmp.w lr, #0 + 80074b2: d02c beq.n 800750e + WRITE_REG(hqspi->Instance->ABR, cmd->AlternateBytes); + 80074b4: ea46 050e orr.w r5, r6, lr + 80074b8: 688b ldr r3, [r1, #8] + 80074ba: 6804 ldr r4, [r0, #0] + WRITE_REG(hqspi->Instance->CCR, (cmd->DdrMode | cmd->DdrHoldHalfCycle | cmd->SIOOMode | + 80074bc: 694e ldr r6, [r1, #20] + 80074be: 4315 orrs r5, r2 + WRITE_REG(hqspi->Instance->ABR, cmd->AlternateBytes); + 80074c0: 61e3 str r3, [r4, #28] + WRITE_REG(hqspi->Instance->CCR, (cmd->DdrMode | cmd->DdrHoldHalfCycle | cmd->SIOOMode | + 80074c2: f8d1 c034 ldr.w ip, [r1, #52] ; 0x34 + 80074c6: 04b6 lsls r6, r6, #18 + 80074c8: 690b ldr r3, [r1, #16] + 80074ca: e9d1 8e0b ldrd r8, lr, [r1, #44] ; 0x2c + if (cmd->AddressMode != QSPI_ADDRESS_NONE) + 80074ce: b1a7 cbz r7, 80074fa + WRITE_REG(hqspi->Instance->CCR, (cmd->DdrMode | cmd->DdrHoldHalfCycle | cmd->SIOOMode | + 80074d0: 433b orrs r3, r7 + 80074d2: 68c8 ldr r0, [r1, #12] + if (FunctionalMode != QSPI_FUNCTIONAL_MODE_MEMORY_MAPPED) + 80074d4: f1b2 6f40 cmp.w r2, #201326592 ; 0xc000000 + WRITE_REG(hqspi->Instance->CCR, (cmd->DdrMode | cmd->DdrHoldHalfCycle | cmd->SIOOMode | + 80074d8: ea43 0308 orr.w r3, r3, r8 + 80074dc: ea43 030e orr.w r3, r3, lr + 80074e0: ea43 030c orr.w r3, r3, ip + 80074e4: ea43 0300 orr.w r3, r3, r0 + 80074e8: ea43 0306 orr.w r3, r3, r6 + 80074ec: ea43 0305 orr.w r3, r3, r5 + 80074f0: 6163 str r3, [r4, #20] + if (FunctionalMode != QSPI_FUNCTIONAL_MODE_MEMORY_MAPPED) + 80074f2: d0b7 beq.n 8007464 + WRITE_REG(hqspi->Instance->AR, cmd->Address); + 80074f4: 684b ldr r3, [r1, #4] + 80074f6: 61a3 str r3, [r4, #24] + 80074f8: e7b4 b.n 8007464 + WRITE_REG(hqspi->Instance->CCR, (cmd->DdrMode | cmd->DdrHoldHalfCycle | cmd->SIOOMode | + 80074fa: ea43 0308 orr.w r3, r3, r8 + 80074fe: ea43 030e orr.w r3, r3, lr + 8007502: ea43 030c orr.w r3, r3, ip + 8007506: 4333 orrs r3, r6 + 8007508: 432b orrs r3, r5 + 800750a: 6163 str r3, [r4, #20] + 800750c: e7aa b.n 8007464 + if (cmd->AddressMode != QSPI_ADDRESS_NONE) + 800750e: b1d7 cbz r7, 8007546 + WRITE_REG(hqspi->Instance->CCR, (cmd->DdrMode | cmd->DdrHoldHalfCycle | cmd->SIOOMode | + 8007510: ea46 0307 orr.w r3, r6, r7 + 8007514: 6acc ldr r4, [r1, #44] ; 0x2c + 8007516: 6800 ldr r0, [r0, #0] + if (FunctionalMode != QSPI_FUNCTIONAL_MODE_MEMORY_MAPPED) + 8007518: f1b2 6f40 cmp.w r2, #201326592 ; 0xc000000 + WRITE_REG(hqspi->Instance->CCR, (cmd->DdrMode | cmd->DdrHoldHalfCycle | cmd->SIOOMode | + 800751c: ea43 0302 orr.w r3, r3, r2 + 8007520: ea43 0304 orr.w r3, r3, r4 + 8007524: 6b0c ldr r4, [r1, #48] ; 0x30 + 8007526: ea43 0304 orr.w r3, r3, r4 + 800752a: 6b4c ldr r4, [r1, #52] ; 0x34 + 800752c: ea43 0304 orr.w r3, r3, r4 + 8007530: 68cc ldr r4, [r1, #12] + 8007532: ea43 0304 orr.w r3, r3, r4 + 8007536: 694c ldr r4, [r1, #20] + 8007538: ea43 4384 orr.w r3, r3, r4, lsl #18 + 800753c: 6143 str r3, [r0, #20] + if (FunctionalMode != QSPI_FUNCTIONAL_MODE_MEMORY_MAPPED) + 800753e: d091 beq.n 8007464 + WRITE_REG(hqspi->Instance->AR, cmd->Address); + 8007540: 684b ldr r3, [r1, #4] + 8007542: 6183 str r3, [r0, #24] + 8007544: e78e b.n 8007464 + if (cmd->DataMode != QSPI_DATA_NONE) + 8007546: 2e00 cmp r6, #0 + 8007548: d08c beq.n 8007464 + WRITE_REG(hqspi->Instance->CCR, (cmd->DdrMode | cmd->DdrHoldHalfCycle | cmd->SIOOMode | + 800754a: 6acb ldr r3, [r1, #44] ; 0x2c + 800754c: 6800 ldr r0, [r0, #0] + 800754e: 4333 orrs r3, r6 + 8007550: 4313 orrs r3, r2 + 8007552: 6b0a ldr r2, [r1, #48] ; 0x30 + 8007554: 4313 orrs r3, r2 + 8007556: 6b4a ldr r2, [r1, #52] ; 0x34 + 8007558: 4313 orrs r3, r2 + 800755a: 694a ldr r2, [r1, #20] + 800755c: ea43 4382 orr.w r3, r3, r2, lsl #18 + 8007560: 6143 str r3, [r0, #20] +} + 8007562: e77f b.n 8007464 + +08007564 : +{ + 8007564: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} + 8007568: f8dd 8018 ldr.w r8, [sp, #24] + 800756c: 4604 mov r4, r0 + 800756e: 460e mov r6, r1 + 8007570: 4615 mov r5, r2 + 8007572: 461f mov r7, r3 + while((__HAL_QSPI_GET_FLAG(hqspi, Flag)) != State) + 8007574: 6822 ldr r2, [r4, #0] + 8007576: 6893 ldr r3, [r2, #8] + 8007578: 4233 tst r3, r6 + 800757a: bf14 ite ne + 800757c: 2301 movne r3, #1 + 800757e: 2300 moveq r3, #0 + 8007580: 42ab cmp r3, r5 + 8007582: d101 bne.n 8007588 + return HAL_OK; + 8007584: 2000 movs r0, #0 + 8007586: e012 b.n 80075ae + if (Timeout != HAL_MAX_DELAY) + 8007588: f1b8 3fff cmp.w r8, #4294967295 + 800758c: d0f3 beq.n 8007576 + if(((HAL_GetTick() - Tickstart) > Timeout) || (Timeout == 0U)) + 800758e: f7fe f84f bl 8005630 + 8007592: 1bc0 subs r0, r0, r7 + 8007594: 4540 cmp r0, r8 + 8007596: d802 bhi.n 800759e + 8007598: f1b8 0f00 cmp.w r8, #0 + 800759c: d1ea bne.n 8007574 + hqspi->State = HAL_QSPI_STATE_ERROR; + 800759e: 2304 movs r3, #4 + hqspi->ErrorCode |= HAL_QSPI_ERROR_TIMEOUT; + 80075a0: 2001 movs r0, #1 + hqspi->State = HAL_QSPI_STATE_ERROR; + 80075a2: f884 3041 strb.w r3, [r4, #65] ; 0x41 + hqspi->ErrorCode |= HAL_QSPI_ERROR_TIMEOUT; + 80075a6: 6c63 ldr r3, [r4, #68] ; 0x44 + 80075a8: f043 0301 orr.w r3, r3, #1 + 80075ac: 6463 str r3, [r4, #68] ; 0x44 +} + 80075ae: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + ... + +080075b4 : +{ + 80075b4: b530 push {r4, r5, lr} + 80075b6: 4604 mov r4, r0 + 80075b8: b085 sub sp, #20 + uint32_t tickstart = HAL_GetTick(); + 80075ba: f7fe f839 bl 8005630 + 80075be: 4603 mov r3, r0 + if(hqspi == NULL) + 80075c0: 2c00 cmp r4, #0 + 80075c2: d047 beq.n 8007654 + if(hqspi->State == HAL_QSPI_STATE_RESET) + 80075c4: f894 2041 ldrb.w r2, [r4, #65] ; 0x41 + 80075c8: f002 01ff and.w r1, r2, #255 ; 0xff + 80075cc: b94a cbnz r2, 80075e2 + 80075ce: 9003 str r0, [sp, #12] + HAL_QSPI_MspInit(hqspi); + 80075d0: 4620 mov r0, r4 + hqspi->Lock = HAL_UNLOCKED; + 80075d2: f884 1040 strb.w r1, [r4, #64] ; 0x40 + HAL_QSPI_MspInit(hqspi); + 80075d6: f7fa f9a5 bl 8001924 + hqspi->Timeout = Timeout; + 80075da: f241 3288 movw r2, #5000 ; 0x1388 + 80075de: 9b03 ldr r3, [sp, #12] + 80075e0: 64a2 str r2, [r4, #72] ; 0x48 + MODIFY_REG(hqspi->Instance->CR, QUADSPI_CR_FTHRES, + 80075e2: 6820 ldr r0, [r4, #0] + 80075e4: 68a1 ldr r1, [r4, #8] + 80075e6: 6802 ldr r2, [r0, #0] + 80075e8: 3901 subs r1, #1 + 80075ea: f422 52f8 bic.w r2, r2, #7936 ; 0x1f00 + 80075ee: ea42 2201 orr.w r2, r2, r1, lsl #8 + status = QSPI_WaitFlagStateUntilTimeout(hqspi, QSPI_FLAG_BUSY, RESET, tickstart, hqspi->Timeout); + 80075f2: 2120 movs r1, #32 + MODIFY_REG(hqspi->Instance->CR, QUADSPI_CR_FTHRES, + 80075f4: 6002 str r2, [r0, #0] + status = QSPI_WaitFlagStateUntilTimeout(hqspi, QSPI_FLAG_BUSY, RESET, tickstart, hqspi->Timeout); + 80075f6: 4620 mov r0, r4 + 80075f8: 6ca2 ldr r2, [r4, #72] ; 0x48 + 80075fa: 9200 str r2, [sp, #0] + 80075fc: 2200 movs r2, #0 + 80075fe: f7ff ffb1 bl 8007564 + if(status == HAL_OK) + 8007602: bb10 cbnz r0, 800764a + MODIFY_REG(hqspi->Instance->CR, (QUADSPI_CR_PRESCALER | QUADSPI_CR_SSHIFT | QUADSPI_CR_FSEL | QUADSPI_CR_DFM), + 8007604: 6822 ldr r2, [r4, #0] + 8007606: 69e5 ldr r5, [r4, #28] + 8007608: 68e3 ldr r3, [r4, #12] + 800760a: 6811 ldr r1, [r2, #0] + 800760c: 432b orrs r3, r5 + 800760e: 6a25 ldr r5, [r4, #32] + 8007610: f021 417f bic.w r1, r1, #4278190080 ; 0xff000000 + 8007614: 432b orrs r3, r5 + 8007616: 6865 ldr r5, [r4, #4] + 8007618: f021 01d0 bic.w r1, r1, #208 ; 0xd0 + 800761c: ea43 6305 orr.w r3, r3, r5, lsl #24 + 8007620: 430b orrs r3, r1 + 8007622: 6013 str r3, [r2, #0] + MODIFY_REG(hqspi->Instance->DCR, (QUADSPI_DCR_FSIZE | QUADSPI_DCR_CSHT | QUADSPI_DCR_CKMODE), + 8007624: 6855 ldr r5, [r2, #4] + 8007626: e9d4 3105 ldrd r3, r1, [r4, #20] + 800762a: 430b orrs r3, r1 + 800762c: 6921 ldr r1, [r4, #16] + 800762e: ea43 4301 orr.w r3, r3, r1, lsl #16 + 8007632: 4909 ldr r1, [pc, #36] ; (8007658 ) + 8007634: 4029 ands r1, r5 + 8007636: 430b orrs r3, r1 + 8007638: 6053 str r3, [r2, #4] + __HAL_QSPI_ENABLE(hqspi); + 800763a: 6813 ldr r3, [r2, #0] + 800763c: f043 0301 orr.w r3, r3, #1 + 8007640: 6013 str r3, [r2, #0] + hqspi->State = HAL_QSPI_STATE_READY; + 8007642: 2301 movs r3, #1 + hqspi->ErrorCode = HAL_QSPI_ERROR_NONE; + 8007644: 6460 str r0, [r4, #68] ; 0x44 + hqspi->State = HAL_QSPI_STATE_READY; + 8007646: f884 3041 strb.w r3, [r4, #65] ; 0x41 + __HAL_UNLOCK(hqspi); + 800764a: 2300 movs r3, #0 + 800764c: f884 3040 strb.w r3, [r4, #64] ; 0x40 +} + 8007650: b005 add sp, #20 + 8007652: bd30 pop {r4, r5, pc} + return HAL_ERROR; + 8007654: 2001 movs r0, #1 + 8007656: e7fb b.n 8007650 + 8007658: ffe0f8fe .word 0xffe0f8fe + +0800765c : +{ + 800765c: b510 push {r4, lr} + if(hqspi == NULL) + 800765e: 4604 mov r4, r0 + 8007660: b168 cbz r0, 800767e + __HAL_QSPI_DISABLE(hqspi); + 8007662: 6802 ldr r2, [r0, #0] + 8007664: 6813 ldr r3, [r2, #0] + 8007666: f023 0301 bic.w r3, r3, #1 + 800766a: 6013 str r3, [r2, #0] + HAL_QSPI_MspDeInit(hqspi); + 800766c: f7fa f9c8 bl 8001a00 + hqspi->ErrorCode = HAL_QSPI_ERROR_NONE; + 8007670: 2000 movs r0, #0 + 8007672: 6460 str r0, [r4, #68] ; 0x44 + hqspi->State = HAL_QSPI_STATE_RESET; + 8007674: f884 0041 strb.w r0, [r4, #65] ; 0x41 + __HAL_UNLOCK(hqspi); + 8007678: f884 0040 strb.w r0, [r4, #64] ; 0x40 +} + 800767c: bd10 pop {r4, pc} + return HAL_ERROR; + 800767e: 2001 movs r0, #1 + 8007680: e7fc b.n 800767c + +08007682 : +{ + 8007682: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} + 8007686: 4604 mov r4, r0 + 8007688: b085 sub sp, #20 + 800768a: 4617 mov r7, r2 + 800768c: 4689 mov r9, r1 + uint32_t tickstart = HAL_GetTick(); + 800768e: f7fd ffcf bl 8005630 + __HAL_LOCK(hqspi); + 8007692: f894 2040 ldrb.w r2, [r4, #64] ; 0x40 + uint32_t tickstart = HAL_GetTick(); + 8007696: 4603 mov r3, r0 + __HAL_LOCK(hqspi); + 8007698: 2a01 cmp r2, #1 + 800769a: d033 beq.n 8007704 + 800769c: 2201 movs r2, #1 + 800769e: 2602 movs r6, #2 + 80076a0: f884 2040 strb.w r2, [r4, #64] ; 0x40 + if(hqspi->State == HAL_QSPI_STATE_READY) + 80076a4: f894 2041 ldrb.w r2, [r4, #65] ; 0x41 + 80076a8: 2a01 cmp r2, #1 + 80076aa: fa5f f882 uxtb.w r8, r2 + 80076ae: d127 bne.n 8007700 + hqspi->ErrorCode = HAL_QSPI_ERROR_NONE; + 80076b0: 2200 movs r2, #0 + status = QSPI_WaitFlagStateUntilTimeout(hqspi, QSPI_FLAG_BUSY, RESET, tickstart, Timeout); + 80076b2: 9003 str r0, [sp, #12] + 80076b4: 2120 movs r1, #32 + 80076b6: 4620 mov r0, r4 + hqspi->ErrorCode = HAL_QSPI_ERROR_NONE; + 80076b8: 6462 str r2, [r4, #68] ; 0x44 + status = QSPI_WaitFlagStateUntilTimeout(hqspi, QSPI_FLAG_BUSY, RESET, tickstart, Timeout); + 80076ba: 9700 str r7, [sp, #0] + hqspi->State = HAL_QSPI_STATE_BUSY; + 80076bc: f884 6041 strb.w r6, [r4, #65] ; 0x41 + status = QSPI_WaitFlagStateUntilTimeout(hqspi, QSPI_FLAG_BUSY, RESET, tickstart, Timeout); + 80076c0: f7ff ff50 bl 8007564 + if (status == HAL_OK) + 80076c4: 4605 mov r5, r0 + 80076c6: b9a0 cbnz r0, 80076f2 + QSPI_Config(hqspi, cmd, QSPI_FUNCTIONAL_MODE_INDIRECT_WRITE); + 80076c8: 4602 mov r2, r0 + 80076ca: 4649 mov r1, r9 + 80076cc: 4620 mov r0, r4 + 80076ce: f7ff fe8f bl 80073f0 + if (cmd->DataMode == QSPI_DATA_NONE) + 80076d2: f8d9 2024 ldr.w r2, [r9, #36] ; 0x24 + 80076d6: 9b03 ldr r3, [sp, #12] + 80076d8: b94a cbnz r2, 80076ee + status = QSPI_WaitFlagStateUntilTimeout(hqspi, QSPI_FLAG_TC, SET, tickstart, Timeout); + 80076da: 4642 mov r2, r8 + 80076dc: 4631 mov r1, r6 + 80076de: 4620 mov r0, r4 + 80076e0: 9700 str r7, [sp, #0] + 80076e2: f7ff ff3f bl 8007564 + if (status == HAL_OK) + 80076e6: 4605 mov r5, r0 + 80076e8: b918 cbnz r0, 80076f2 + __HAL_QSPI_CLEAR_FLAG(hqspi, QSPI_FLAG_TC); + 80076ea: 6823 ldr r3, [r4, #0] + 80076ec: 60de str r6, [r3, #12] + hqspi->State = HAL_QSPI_STATE_READY; + 80076ee: f884 8041 strb.w r8, [r4, #65] ; 0x41 + __HAL_UNLOCK(hqspi); + 80076f2: 2300 movs r3, #0 + 80076f4: f884 3040 strb.w r3, [r4, #64] ; 0x40 +} + 80076f8: 4628 mov r0, r5 + 80076fa: b005 add sp, #20 + 80076fc: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} + status = HAL_BUSY; + 8007700: 4635 mov r5, r6 + 8007702: e7f6 b.n 80076f2 + __HAL_LOCK(hqspi); + 8007704: 2502 movs r5, #2 + 8007706: e7f7 b.n 80076f8 + +08007708 : +{ + 8007708: e92d 41ff stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, lr} + 800770c: 4604 mov r4, r0 + 800770e: 4615 mov r5, r2 + 8007710: 461e mov r6, r3 + 8007712: 4688 mov r8, r1 + uint32_t tickstart = HAL_GetTick(); + 8007714: f7fd ff8c bl 8005630 + __HAL_LOCK(hqspi); + 8007718: f894 2040 ldrb.w r2, [r4, #64] ; 0x40 + uint32_t tickstart = HAL_GetTick(); + 800771c: 4603 mov r3, r0 + __HAL_LOCK(hqspi); + 800771e: 2a01 cmp r2, #1 + 8007720: d040 beq.n 80077a4 + 8007722: 2201 movs r2, #1 + 8007724: f884 2040 strb.w r2, [r4, #64] ; 0x40 + if(hqspi->State == HAL_QSPI_STATE_READY) + 8007728: f894 2041 ldrb.w r2, [r4, #65] ; 0x41 + 800772c: 2a01 cmp r2, #1 + 800772e: b2d7 uxtb r7, r2 + 8007730: d136 bne.n 80077a0 + hqspi->State = HAL_QSPI_STATE_BUSY_AUTO_POLLING; + 8007732: 2142 movs r1, #66 ; 0x42 + hqspi->ErrorCode = HAL_QSPI_ERROR_NONE; + 8007734: 2200 movs r2, #0 + status = QSPI_WaitFlagStateUntilTimeout(hqspi, QSPI_FLAG_BUSY, RESET, tickstart, Timeout); + 8007736: 9003 str r0, [sp, #12] + 8007738: 4620 mov r0, r4 + hqspi->ErrorCode = HAL_QSPI_ERROR_NONE; + 800773a: 6462 str r2, [r4, #68] ; 0x44 + status = QSPI_WaitFlagStateUntilTimeout(hqspi, QSPI_FLAG_BUSY, RESET, tickstart, Timeout); + 800773c: 9600 str r6, [sp, #0] + hqspi->State = HAL_QSPI_STATE_BUSY_AUTO_POLLING; + 800773e: f884 1041 strb.w r1, [r4, #65] ; 0x41 + status = QSPI_WaitFlagStateUntilTimeout(hqspi, QSPI_FLAG_BUSY, RESET, tickstart, Timeout); + 8007742: 2120 movs r1, #32 + 8007744: f7ff ff0e bl 8007564 + if (status == HAL_OK) + 8007748: bb20 cbnz r0, 8007794 + WRITE_REG(hqspi->Instance->PSMAR, cfg->Match); + 800774a: 6821 ldr r1, [r4, #0] + 800774c: 682a ldr r2, [r5, #0] + MODIFY_REG(hqspi->Instance->CR, (QUADSPI_CR_PMM | QUADSPI_CR_APMS), + 800774e: 6928 ldr r0, [r5, #16] + WRITE_REG(hqspi->Instance->PSMAR, cfg->Match); + 8007750: 628a str r2, [r1, #40] ; 0x28 + WRITE_REG(hqspi->Instance->PSMKR, cfg->Mask); + 8007752: 686a ldr r2, [r5, #4] + 8007754: 624a str r2, [r1, #36] ; 0x24 + WRITE_REG(hqspi->Instance->PIR, cfg->Interval); + 8007756: 68aa ldr r2, [r5, #8] + 8007758: 62ca str r2, [r1, #44] ; 0x2c + MODIFY_REG(hqspi->Instance->CR, (QUADSPI_CR_PMM | QUADSPI_CR_APMS), + 800775a: 680a ldr r2, [r1, #0] + 800775c: f422 0240 bic.w r2, r2, #12582912 ; 0xc00000 + 8007760: 4302 orrs r2, r0 + QSPI_Config(hqspi, cmd, QSPI_FUNCTIONAL_MODE_AUTO_POLLING); + 8007762: 4620 mov r0, r4 + MODIFY_REG(hqspi->Instance->CR, (QUADSPI_CR_PMM | QUADSPI_CR_APMS), + 8007764: f442 0280 orr.w r2, r2, #4194304 ; 0x400000 + 8007768: 600a str r2, [r1, #0] + QSPI_Config(hqspi, cmd, QSPI_FUNCTIONAL_MODE_AUTO_POLLING); + 800776a: 4641 mov r1, r8 + cmd->NbData = cfg->StatusBytesSize; + 800776c: 68ea ldr r2, [r5, #12] + 800776e: f8c8 2028 str.w r2, [r8, #40] ; 0x28 + QSPI_Config(hqspi, cmd, QSPI_FUNCTIONAL_MODE_AUTO_POLLING); + 8007772: f04f 6200 mov.w r2, #134217728 ; 0x8000000 + 8007776: f7ff fe3b bl 80073f0 + status = QSPI_WaitFlagStateUntilTimeout(hqspi, QSPI_FLAG_SM, SET, tickstart, Timeout); + 800777a: 9b03 ldr r3, [sp, #12] + 800777c: 463a mov r2, r7 + 800777e: 2108 movs r1, #8 + 8007780: 4620 mov r0, r4 + 8007782: 9600 str r6, [sp, #0] + 8007784: f7ff feee bl 8007564 + if (status == HAL_OK) + 8007788: b920 cbnz r0, 8007794 + __HAL_QSPI_CLEAR_FLAG(hqspi, QSPI_FLAG_SM); + 800778a: 6823 ldr r3, [r4, #0] + 800778c: 2208 movs r2, #8 + 800778e: 60da str r2, [r3, #12] + hqspi->State = HAL_QSPI_STATE_READY; + 8007790: f884 7041 strb.w r7, [r4, #65] ; 0x41 + __HAL_UNLOCK(hqspi); + 8007794: 2300 movs r3, #0 + 8007796: f884 3040 strb.w r3, [r4, #64] ; 0x40 +} + 800779a: b004 add sp, #16 + 800779c: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + status = HAL_BUSY; + 80077a0: 2002 movs r0, #2 + 80077a2: e7f7 b.n 8007794 + __HAL_LOCK(hqspi); + 80077a4: 2002 movs r0, #2 + 80077a6: e7f8 b.n 800779a + +080077a8 : +{ + 80077a8: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} + 80077aa: 4604 mov r4, r0 + 80077ac: 4616 mov r6, r2 + 80077ae: 460f mov r7, r1 + uint32_t tickstart = HAL_GetTick(); + 80077b0: f7fd ff3e bl 8005630 + __HAL_LOCK(hqspi); + 80077b4: f894 2040 ldrb.w r2, [r4, #64] ; 0x40 + uint32_t tickstart = HAL_GetTick(); + 80077b8: 4603 mov r3, r0 + __HAL_LOCK(hqspi); + 80077ba: 2a01 cmp r2, #1 + 80077bc: d033 beq.n 8007826 + 80077be: 2201 movs r2, #1 + 80077c0: f884 2040 strb.w r2, [r4, #64] ; 0x40 + if(hqspi->State == HAL_QSPI_STATE_READY) + 80077c4: f894 2041 ldrb.w r2, [r4, #65] ; 0x41 + 80077c8: 2a01 cmp r2, #1 + 80077ca: d12a bne.n 8007822 + hqspi->ErrorCode = HAL_QSPI_ERROR_NONE; + 80077cc: 2200 movs r2, #0 + hqspi->State = HAL_QSPI_STATE_BUSY_MEM_MAPPED; + 80077ce: 2182 movs r1, #130 ; 0x82 + status = QSPI_WaitFlagStateUntilTimeout(hqspi, QSPI_FLAG_BUSY, RESET, tickstart, hqspi->Timeout); + 80077d0: 4620 mov r0, r4 + hqspi->ErrorCode = HAL_QSPI_ERROR_NONE; + 80077d2: 6462 str r2, [r4, #68] ; 0x44 + hqspi->State = HAL_QSPI_STATE_BUSY_MEM_MAPPED; + 80077d4: f884 1041 strb.w r1, [r4, #65] ; 0x41 + status = QSPI_WaitFlagStateUntilTimeout(hqspi, QSPI_FLAG_BUSY, RESET, tickstart, hqspi->Timeout); + 80077d8: 6ca1 ldr r1, [r4, #72] ; 0x48 + 80077da: 9100 str r1, [sp, #0] + 80077dc: 2120 movs r1, #32 + 80077de: f7ff fec1 bl 8007564 + if (status == HAL_OK) + 80077e2: 4605 mov r5, r0 + 80077e4: b9b8 cbnz r0, 8007816 + MODIFY_REG(hqspi->Instance->CR, QUADSPI_CR_TCEN, cfg->TimeOutActivation); + 80077e6: 6823 ldr r3, [r4, #0] + 80077e8: 6872 ldr r2, [r6, #4] + 80077ea: 6818 ldr r0, [r3, #0] + if (cfg->TimeOutActivation == QSPI_TIMEOUT_COUNTER_ENABLE) + 80077ec: 2a08 cmp r2, #8 + MODIFY_REG(hqspi->Instance->CR, QUADSPI_CR_TCEN, cfg->TimeOutActivation); + 80077ee: f020 0008 bic.w r0, r0, #8 + 80077f2: ea40 0002 orr.w r0, r0, r2 + 80077f6: 6018 str r0, [r3, #0] + if (cfg->TimeOutActivation == QSPI_TIMEOUT_COUNTER_ENABLE) + 80077f8: d107 bne.n 800780a + WRITE_REG(hqspi->Instance->LPTR, cfg->TimeOutPeriod); + 80077fa: 6832 ldr r2, [r6, #0] + 80077fc: 631a str r2, [r3, #48] ; 0x30 + __HAL_QSPI_CLEAR_FLAG(hqspi, QSPI_FLAG_TO); + 80077fe: 2210 movs r2, #16 + 8007800: 60da str r2, [r3, #12] + __HAL_QSPI_ENABLE_IT(hqspi, QSPI_IT_TO); + 8007802: 681a ldr r2, [r3, #0] + 8007804: f442 1280 orr.w r2, r2, #1048576 ; 0x100000 + 8007808: 601a str r2, [r3, #0] + QSPI_Config(hqspi, cmd, QSPI_FUNCTIONAL_MODE_MEMORY_MAPPED); + 800780a: f04f 6240 mov.w r2, #201326592 ; 0xc000000 + 800780e: 4639 mov r1, r7 + 8007810: 4620 mov r0, r4 + 8007812: f7ff fded bl 80073f0 + __HAL_UNLOCK(hqspi); + 8007816: 2300 movs r3, #0 + 8007818: f884 3040 strb.w r3, [r4, #64] ; 0x40 +} + 800781c: 4628 mov r0, r5 + 800781e: b003 add sp, #12 + 8007820: bdf0 pop {r4, r5, r6, r7, pc} + status = HAL_BUSY; + 8007822: 2502 movs r5, #2 + 8007824: e7f7 b.n 8007816 + __HAL_LOCK(hqspi); + 8007826: 2502 movs r5, #2 + 8007828: e7f8 b.n 800781c + +0800782a : +{ + 800782a: b51f push {r0, r1, r2, r3, r4, lr} + 800782c: 4604 mov r4, r0 + uint32_t tickstart = HAL_GetTick(); + 800782e: f7fd feff bl 8005630 + 8007832: 4603 mov r3, r0 + if (((uint32_t)hqspi->State & 0x2U) != 0U) + 8007834: f894 0041 ldrb.w r0, [r4, #65] ; 0x41 + 8007838: f010 0002 ands.w r0, r0, #2 + 800783c: d03a beq.n 80078b4 + __HAL_UNLOCK(hqspi); + 800783e: 2200 movs r2, #0 + if ((hqspi->Instance->CR & QUADSPI_CR_DMAEN) != 0U) + 8007840: 6821 ldr r1, [r4, #0] + __HAL_UNLOCK(hqspi); + 8007842: f884 2040 strb.w r2, [r4, #64] ; 0x40 + if ((hqspi->Instance->CR & QUADSPI_CR_DMAEN) != 0U) + 8007846: 680a ldr r2, [r1, #0] + 8007848: f012 0204 ands.w r2, r2, #4 + 800784c: d034 beq.n 80078b8 + CLEAR_BIT(hqspi->Instance->CR, QUADSPI_CR_DMAEN); + 800784e: 680a ldr r2, [r1, #0] + status = HAL_DMA_Abort(hqspi->hdma); + 8007850: 6be0 ldr r0, [r4, #60] ; 0x3c + CLEAR_BIT(hqspi->Instance->CR, QUADSPI_CR_DMAEN); + 8007852: f022 0204 bic.w r2, r2, #4 + 8007856: 9303 str r3, [sp, #12] + 8007858: 600a str r2, [r1, #0] + status = HAL_DMA_Abort(hqspi->hdma); + 800785a: f7fe f80d bl 8005878 + if(status != HAL_OK) + 800785e: 9b03 ldr r3, [sp, #12] + 8007860: b118 cbz r0, 800786a + hqspi->ErrorCode |= HAL_QSPI_ERROR_DMA; + 8007862: 6c62 ldr r2, [r4, #68] ; 0x44 + 8007864: f042 0204 orr.w r2, r2, #4 + 8007868: 6462 str r2, [r4, #68] ; 0x44 + if (__HAL_QSPI_GET_FLAG(hqspi, QSPI_FLAG_BUSY) != RESET) + 800786a: 6822 ldr r2, [r4, #0] + 800786c: 6891 ldr r1, [r2, #8] + 800786e: 0689 lsls r1, r1, #26 + 8007870: d51d bpl.n 80078ae + SET_BIT(hqspi->Instance->CR, QUADSPI_CR_ABORT); + 8007872: 6811 ldr r1, [r2, #0] + status = QSPI_WaitFlagStateUntilTimeout(hqspi, QSPI_FLAG_TC, SET, tickstart, hqspi->Timeout); + 8007874: 4620 mov r0, r4 + 8007876: 9303 str r3, [sp, #12] + SET_BIT(hqspi->Instance->CR, QUADSPI_CR_ABORT); + 8007878: f041 0102 orr.w r1, r1, #2 + 800787c: 6011 str r1, [r2, #0] + status = QSPI_WaitFlagStateUntilTimeout(hqspi, QSPI_FLAG_TC, SET, tickstart, hqspi->Timeout); + 800787e: 2102 movs r1, #2 + 8007880: 6ca2 ldr r2, [r4, #72] ; 0x48 + 8007882: 9200 str r2, [sp, #0] + 8007884: 2201 movs r2, #1 + 8007886: f7ff fe6d bl 8007564 + if (status == HAL_OK) + 800788a: 9b03 ldr r3, [sp, #12] + 800788c: b990 cbnz r0, 80078b4 + __HAL_QSPI_CLEAR_FLAG(hqspi, QSPI_FLAG_TC); + 800788e: 6822 ldr r2, [r4, #0] + 8007890: 2102 movs r1, #2 + 8007892: 60d1 str r1, [r2, #12] + status = QSPI_WaitFlagStateUntilTimeout(hqspi, QSPI_FLAG_BUSY, RESET, tickstart, hqspi->Timeout); + 8007894: 2120 movs r1, #32 + 8007896: 6ca2 ldr r2, [r4, #72] ; 0x48 + 8007898: 9200 str r2, [sp, #0] + 800789a: 4602 mov r2, r0 + 800789c: 4620 mov r0, r4 + 800789e: f7ff fe61 bl 8007564 + if (status == HAL_OK) + 80078a2: b938 cbnz r0, 80078b4 + CLEAR_BIT(hqspi->Instance->CCR, QUADSPI_CCR_FMODE); + 80078a4: 6822 ldr r2, [r4, #0] + 80078a6: 6953 ldr r3, [r2, #20] + 80078a8: f023 6340 bic.w r3, r3, #201326592 ; 0xc000000 + 80078ac: 6153 str r3, [r2, #20] + hqspi->State = HAL_QSPI_STATE_READY; + 80078ae: 2301 movs r3, #1 + 80078b0: f884 3041 strb.w r3, [r4, #65] ; 0x41 +} + 80078b4: b004 add sp, #16 + 80078b6: bd10 pop {r4, pc} + HAL_StatusTypeDef status = HAL_OK; + 80078b8: 4610 mov r0, r2 + 80078ba: e7d6 b.n 800786a + +080078bc : +{ + 80078bc: b5f0 push {r4, r5, r6, r7, lr} + 80078be: 4604 mov r4, r0 + 80078c0: b085 sub sp, #20 + 80078c2: 4616 mov r6, r2 + 80078c4: 460f mov r7, r1 + uint32_t tickstart = HAL_GetTick(); + 80078c6: f7fd feb3 bl 8005630 + __HAL_LOCK(hqspi); + 80078ca: f894 2040 ldrb.w r2, [r4, #64] ; 0x40 + uint32_t tickstart = HAL_GetTick(); + 80078ce: 4603 mov r3, r0 + __IO uint32_t *data_reg = &hqspi->Instance->DR; + 80078d0: 6825 ldr r5, [r4, #0] + __HAL_LOCK(hqspi); + 80078d2: 2a01 cmp r2, #1 + 80078d4: d04c beq.n 8007970 + 80078d6: 2201 movs r2, #1 + 80078d8: f884 2040 strb.w r2, [r4, #64] ; 0x40 + if(hqspi->State == HAL_QSPI_STATE_READY) + 80078dc: f894 2041 ldrb.w r2, [r4, #65] ; 0x41 + 80078e0: 2a01 cmp r2, #1 + 80078e2: b2d0 uxtb r0, r2 + 80078e4: d142 bne.n 800796c + hqspi->ErrorCode = HAL_QSPI_ERROR_NONE; + 80078e6: 2200 movs r2, #0 + 80078e8: 6462 str r2, [r4, #68] ; 0x44 + if(pData != NULL ) + 80078ea: 2f00 cmp r7, #0 + 80078ec: d039 beq.n 8007962 + hqspi->State = HAL_QSPI_STATE_BUSY_INDIRECT_TX; + 80078ee: 2212 movs r2, #18 + 80078f0: f884 2041 strb.w r2, [r4, #65] ; 0x41 + hqspi->TxXferCount = READ_REG(hqspi->Instance->DLR) + 1U; + 80078f4: 692a ldr r2, [r5, #16] + 80078f6: 3201 adds r2, #1 + 80078f8: 62e2 str r2, [r4, #44] ; 0x2c + hqspi->TxXferSize = READ_REG(hqspi->Instance->DLR) + 1U; + 80078fa: 692a ldr r2, [r5, #16] + hqspi->pTxBuffPtr = pData; + 80078fc: 6267 str r7, [r4, #36] ; 0x24 + hqspi->TxXferSize = READ_REG(hqspi->Instance->DLR) + 1U; + 80078fe: 3201 adds r2, #1 + 8007900: 62a2 str r2, [r4, #40] ; 0x28 + MODIFY_REG(hqspi->Instance->CCR, QUADSPI_CCR_FMODE, QSPI_FUNCTIONAL_MODE_INDIRECT_WRITE); + 8007902: 696a ldr r2, [r5, #20] + 8007904: f022 6240 bic.w r2, r2, #201326592 ; 0xc000000 + 8007908: 616a str r2, [r5, #20] + while(hqspi->TxXferCount > 0U) + 800790a: 6ae2 ldr r2, [r4, #44] ; 0x2c + 800790c: b9a2 cbnz r2, 8007938 + status = QSPI_WaitFlagStateUntilTimeout(hqspi, QSPI_FLAG_TC, SET, tickstart, Timeout); + 800790e: 2201 movs r2, #1 + 8007910: 2102 movs r1, #2 + 8007912: 4620 mov r0, r4 + 8007914: 9600 str r6, [sp, #0] + 8007916: f7ff fe25 bl 8007564 + if (status == HAL_OK) + 800791a: b928 cbnz r0, 8007928 + __HAL_QSPI_CLEAR_FLAG(hqspi, QSPI_FLAG_TC); + 800791c: 6823 ldr r3, [r4, #0] + 800791e: 2202 movs r2, #2 + status = HAL_QSPI_Abort(hqspi); + 8007920: 4620 mov r0, r4 + __HAL_QSPI_CLEAR_FLAG(hqspi, QSPI_FLAG_TC); + 8007922: 60da str r2, [r3, #12] + status = HAL_QSPI_Abort(hqspi); + 8007924: f7ff ff81 bl 800782a + hqspi->State = HAL_QSPI_STATE_READY; + 8007928: 2301 movs r3, #1 + 800792a: f884 3041 strb.w r3, [r4, #65] ; 0x41 + __HAL_UNLOCK(hqspi); + 800792e: 2300 movs r3, #0 + 8007930: f884 3040 strb.w r3, [r4, #64] ; 0x40 +} + 8007934: b005 add sp, #20 + 8007936: bdf0 pop {r4, r5, r6, r7, pc} + status = QSPI_WaitFlagStateUntilTimeout(hqspi, QSPI_FLAG_FT, SET, tickstart, Timeout); + 8007938: 2201 movs r2, #1 + 800793a: 2104 movs r1, #4 + 800793c: 4620 mov r0, r4 + 800793e: 9600 str r6, [sp, #0] + 8007940: 9303 str r3, [sp, #12] + 8007942: f7ff fe0f bl 8007564 + if (status != HAL_OK) + 8007946: 2800 cmp r0, #0 + 8007948: d1ee bne.n 8007928 + *((__IO uint8_t *)data_reg) = *hqspi->pTxBuffPtr; + 800794a: 6a62 ldr r2, [r4, #36] ; 0x24 + hqspi->TxXferCount--; + 800794c: 9b03 ldr r3, [sp, #12] + *((__IO uint8_t *)data_reg) = *hqspi->pTxBuffPtr; + 800794e: 7812 ldrb r2, [r2, #0] + 8007950: f885 2020 strb.w r2, [r5, #32] + hqspi->pTxBuffPtr++; + 8007954: 6a62 ldr r2, [r4, #36] ; 0x24 + 8007956: 3201 adds r2, #1 + 8007958: 6262 str r2, [r4, #36] ; 0x24 + hqspi->TxXferCount--; + 800795a: 6ae2 ldr r2, [r4, #44] ; 0x2c + 800795c: 3a01 subs r2, #1 + 800795e: 62e2 str r2, [r4, #44] ; 0x2c + 8007960: e7d3 b.n 800790a + hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_PARAM; + 8007962: 6c63 ldr r3, [r4, #68] ; 0x44 + 8007964: f043 0308 orr.w r3, r3, #8 + 8007968: 6463 str r3, [r4, #68] ; 0x44 + status = HAL_ERROR; + 800796a: e7e0 b.n 800792e + status = HAL_BUSY; + 800796c: 2002 movs r0, #2 + 800796e: e7de b.n 800792e + __HAL_LOCK(hqspi); + 8007970: 2002 movs r0, #2 + 8007972: e7df b.n 8007934 + +08007974 : +{ + 8007974: b5f0 push {r4, r5, r6, r7, lr} + 8007976: 4604 mov r4, r0 + 8007978: b085 sub sp, #20 + 800797a: 4616 mov r6, r2 + 800797c: 460f mov r7, r1 + uint32_t tickstart = HAL_GetTick(); + 800797e: f7fd fe57 bl 8005630 + uint32_t addr_reg = READ_REG(hqspi->Instance->AR); + 8007982: 6825 ldr r5, [r4, #0] + uint32_t tickstart = HAL_GetTick(); + 8007984: 4603 mov r3, r0 + uint32_t addr_reg = READ_REG(hqspi->Instance->AR); + 8007986: f8d5 c018 ldr.w ip, [r5, #24] + __HAL_LOCK(hqspi); + 800798a: f894 2040 ldrb.w r2, [r4, #64] ; 0x40 + 800798e: 2a01 cmp r2, #1 + 8007990: d050 beq.n 8007a34 + 8007992: 2201 movs r2, #1 + 8007994: f884 2040 strb.w r2, [r4, #64] ; 0x40 + if(hqspi->State == HAL_QSPI_STATE_READY) + 8007998: f894 2041 ldrb.w r2, [r4, #65] ; 0x41 + 800799c: 2a01 cmp r2, #1 + 800799e: b2d0 uxtb r0, r2 + 80079a0: d146 bne.n 8007a30 + hqspi->ErrorCode = HAL_QSPI_ERROR_NONE; + 80079a2: 2200 movs r2, #0 + 80079a4: 6462 str r2, [r4, #68] ; 0x44 + if(pData != NULL ) + 80079a6: 2f00 cmp r7, #0 + 80079a8: d03d beq.n 8007a26 + hqspi->State = HAL_QSPI_STATE_BUSY_INDIRECT_RX; + 80079aa: 2222 movs r2, #34 ; 0x22 + 80079ac: f884 2041 strb.w r2, [r4, #65] ; 0x41 + hqspi->RxXferCount = READ_REG(hqspi->Instance->DLR) + 1U; + 80079b0: 692a ldr r2, [r5, #16] + 80079b2: 3201 adds r2, #1 + 80079b4: 63a2 str r2, [r4, #56] ; 0x38 + hqspi->RxXferSize = READ_REG(hqspi->Instance->DLR) + 1U; + 80079b6: 692a ldr r2, [r5, #16] + hqspi->pRxBuffPtr = pData; + 80079b8: 6327 str r7, [r4, #48] ; 0x30 + hqspi->RxXferSize = READ_REG(hqspi->Instance->DLR) + 1U; + 80079ba: 3201 adds r2, #1 + 80079bc: 6362 str r2, [r4, #52] ; 0x34 + MODIFY_REG(hqspi->Instance->CCR, QUADSPI_CCR_FMODE, QSPI_FUNCTIONAL_MODE_INDIRECT_READ); + 80079be: 6969 ldr r1, [r5, #20] + 80079c0: f021 6140 bic.w r1, r1, #201326592 ; 0xc000000 + 80079c4: f041 6180 orr.w r1, r1, #67108864 ; 0x4000000 + 80079c8: 6169 str r1, [r5, #20] + WRITE_REG(hqspi->Instance->AR, addr_reg); + 80079ca: f8c5 c018 str.w ip, [r5, #24] + while(hqspi->RxXferCount > 0U) + 80079ce: 6ba2 ldr r2, [r4, #56] ; 0x38 + 80079d0: b9a2 cbnz r2, 80079fc + status = QSPI_WaitFlagStateUntilTimeout(hqspi, QSPI_FLAG_TC, SET, tickstart, Timeout); + 80079d2: 2201 movs r2, #1 + 80079d4: 2102 movs r1, #2 + 80079d6: 4620 mov r0, r4 + 80079d8: 9600 str r6, [sp, #0] + 80079da: f7ff fdc3 bl 8007564 + if (status == HAL_OK) + 80079de: b928 cbnz r0, 80079ec + __HAL_QSPI_CLEAR_FLAG(hqspi, QSPI_FLAG_TC); + 80079e0: 6823 ldr r3, [r4, #0] + 80079e2: 2202 movs r2, #2 + status = HAL_QSPI_Abort(hqspi); + 80079e4: 4620 mov r0, r4 + __HAL_QSPI_CLEAR_FLAG(hqspi, QSPI_FLAG_TC); + 80079e6: 60da str r2, [r3, #12] + status = HAL_QSPI_Abort(hqspi); + 80079e8: f7ff ff1f bl 800782a + hqspi->State = HAL_QSPI_STATE_READY; + 80079ec: 2301 movs r3, #1 + 80079ee: f884 3041 strb.w r3, [r4, #65] ; 0x41 + __HAL_UNLOCK(hqspi); + 80079f2: 2300 movs r3, #0 + 80079f4: f884 3040 strb.w r3, [r4, #64] ; 0x40 +} + 80079f8: b005 add sp, #20 + 80079fa: bdf0 pop {r4, r5, r6, r7, pc} + status = QSPI_WaitFlagStateUntilTimeout(hqspi, (QSPI_FLAG_FT | QSPI_FLAG_TC), SET, tickstart, Timeout); + 80079fc: 2201 movs r2, #1 + 80079fe: 2106 movs r1, #6 + 8007a00: 4620 mov r0, r4 + 8007a02: 9600 str r6, [sp, #0] + 8007a04: 9303 str r3, [sp, #12] + 8007a06: f7ff fdad bl 8007564 + if (status != HAL_OK) + 8007a0a: 2800 cmp r0, #0 + 8007a0c: d1ee bne.n 80079ec + *hqspi->pRxBuffPtr = *((__IO uint8_t *)data_reg); + 8007a0e: f895 1020 ldrb.w r1, [r5, #32] + 8007a12: 6b22 ldr r2, [r4, #48] ; 0x30 + hqspi->RxXferCount--; + 8007a14: 9b03 ldr r3, [sp, #12] + *hqspi->pRxBuffPtr = *((__IO uint8_t *)data_reg); + 8007a16: 7011 strb r1, [r2, #0] + hqspi->pRxBuffPtr++; + 8007a18: 6b22 ldr r2, [r4, #48] ; 0x30 + 8007a1a: 3201 adds r2, #1 + 8007a1c: 6322 str r2, [r4, #48] ; 0x30 + hqspi->RxXferCount--; + 8007a1e: 6ba2 ldr r2, [r4, #56] ; 0x38 + 8007a20: 3a01 subs r2, #1 + 8007a22: 63a2 str r2, [r4, #56] ; 0x38 + 8007a24: e7d3 b.n 80079ce + hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_PARAM; + 8007a26: 6c63 ldr r3, [r4, #68] ; 0x44 + 8007a28: f043 0308 orr.w r3, r3, #8 + 8007a2c: 6463 str r3, [r4, #68] ; 0x44 + status = HAL_ERROR; + 8007a2e: e7e0 b.n 80079f2 + status = HAL_BUSY; + 8007a30: 2002 movs r0, #2 + 8007a32: e7de b.n 80079f2 + __HAL_LOCK(hqspi); + 8007a34: 2002 movs r0, #2 + 8007a36: e7df b.n 80079f8 + +08007a38 : + * supported by this function. User should request a transition to HSE Off + * first and then HSE On or HSE Bypass. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct) +{ + 8007a38: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr} + uint32_t tickstart; + uint32_t pll_config; + FlagStatus pwrclkchanged = RESET; + + /* Check Null pointer */ + if (RCC_OscInitStruct == NULL) + 8007a3c: 4604 mov r4, r0 + 8007a3e: b340 cbz r0, 8007a92 + + /* Check the parameters */ + assert_param(IS_RCC_OSCILLATORTYPE(RCC_OscInitStruct->OscillatorType)); + + /*------------------------------- HSE Configuration ------------------------*/ + if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSE) == RCC_OSCILLATORTYPE_HSE) + 8007a40: 6803 ldr r3, [r0, #0] + 8007a42: 07db lsls r3, r3, #31 + 8007a44: d410 bmi.n 8007a68 + } + } + } + } + /*----------------------------- HSI Configuration --------------------------*/ + if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSI) == RCC_OSCILLATORTYPE_HSI) + 8007a46: 6823 ldr r3, [r4, #0] + 8007a48: 079f lsls r7, r3, #30 + 8007a4a: d461 bmi.n 8007b10 + } + } + } + } + /*------------------------------ LSI Configuration -------------------------*/ + if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSI) == RCC_OSCILLATORTYPE_LSI) + 8007a4c: 6823 ldr r3, [r4, #0] + 8007a4e: 0719 lsls r1, r3, #28 + 8007a50: f100 80a6 bmi.w 8007ba0 + } + } + } + } + /*------------------------------ LSE Configuration -------------------------*/ + if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSE) == RCC_OSCILLATORTYPE_LSE) + 8007a54: 6823 ldr r3, [r4, #0] + 8007a56: 075a lsls r2, r3, #29 + 8007a58: f100 80c7 bmi.w 8007bea + } + } + /*-------------------------------- PLL Configuration -----------------------*/ + /* Check the parameters */ + assert_param(IS_RCC_PLL(RCC_OscInitStruct->PLL.PLLState)); + if ((RCC_OscInitStruct->PLL.PLLState) != RCC_PLL_NONE) + 8007a5c: 69a2 ldr r2, [r4, #24] + 8007a5e: 2a00 cmp r2, #0 + 8007a60: f040 8130 bne.w 8007cc4 + { + return HAL_ERROR; + } + } + } + return HAL_OK; + 8007a64: 2000 movs r0, #0 + 8007a66: e02c b.n 8007ac2 + if ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_HSE) + 8007a68: 4b94 ldr r3, [pc, #592] ; (8007cbc ) + 8007a6a: 689a ldr r2, [r3, #8] + 8007a6c: f002 020c and.w r2, r2, #12 + 8007a70: 2a04 cmp r2, #4 + 8007a72: d007 beq.n 8007a84 + || ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) && ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLCFGR_PLLSRC_HSE))) + 8007a74: 689a ldr r2, [r3, #8] + 8007a76: f002 020c and.w r2, r2, #12 + 8007a7a: 2a08 cmp r2, #8 + 8007a7c: d10b bne.n 8007a96 + 8007a7e: 685b ldr r3, [r3, #4] + 8007a80: 025e lsls r6, r3, #9 + 8007a82: d508 bpl.n 8007a96 + if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET) && (RCC_OscInitStruct->HSEState == RCC_HSE_OFF)) + 8007a84: 4b8d ldr r3, [pc, #564] ; (8007cbc ) + 8007a86: 681b ldr r3, [r3, #0] + 8007a88: 039d lsls r5, r3, #14 + 8007a8a: d5dc bpl.n 8007a46 + 8007a8c: 6863 ldr r3, [r4, #4] + 8007a8e: 2b00 cmp r3, #0 + 8007a90: d1d9 bne.n 8007a46 + return HAL_ERROR; + 8007a92: 2001 movs r0, #1 + 8007a94: e015 b.n 8007ac2 + __HAL_RCC_HSE_CONFIG(RCC_OscInitStruct->HSEState); + 8007a96: 6863 ldr r3, [r4, #4] + 8007a98: 4d88 ldr r5, [pc, #544] ; (8007cbc ) + 8007a9a: f5b3 3f80 cmp.w r3, #65536 ; 0x10000 + 8007a9e: d113 bne.n 8007ac8 + 8007aa0: 682b ldr r3, [r5, #0] + 8007aa2: f443 3380 orr.w r3, r3, #65536 ; 0x10000 + 8007aa6: 602b str r3, [r5, #0] + tickstart = HAL_GetTick(); + 8007aa8: f7fd fdc2 bl 8005630 + while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET) + 8007aac: 4e83 ldr r6, [pc, #524] ; (8007cbc ) + tickstart = HAL_GetTick(); + 8007aae: 4605 mov r5, r0 + while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET) + 8007ab0: 6833 ldr r3, [r6, #0] + 8007ab2: 0398 lsls r0, r3, #14 + 8007ab4: d4c7 bmi.n 8007a46 + if ((HAL_GetTick() - tickstart) > HSE_TIMEOUT_VALUE) + 8007ab6: f7fd fdbb bl 8005630 + 8007aba: 1b40 subs r0, r0, r5 + 8007abc: 2864 cmp r0, #100 ; 0x64 + 8007abe: d9f7 bls.n 8007ab0 + return HAL_TIMEOUT; + 8007ac0: 2003 movs r0, #3 +} + 8007ac2: b002 add sp, #8 + 8007ac4: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + __HAL_RCC_HSE_CONFIG(RCC_OscInitStruct->HSEState); + 8007ac8: b99b cbnz r3, 8007af2 + 8007aca: 682b ldr r3, [r5, #0] + 8007acc: f423 3380 bic.w r3, r3, #65536 ; 0x10000 + 8007ad0: 602b str r3, [r5, #0] + 8007ad2: 682b ldr r3, [r5, #0] + 8007ad4: f423 2380 bic.w r3, r3, #262144 ; 0x40000 + 8007ad8: 602b str r3, [r5, #0] + tickstart = HAL_GetTick(); + 8007ada: f7fd fda9 bl 8005630 + 8007ade: 4606 mov r6, r0 + while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET) + 8007ae0: 682b ldr r3, [r5, #0] + 8007ae2: 0399 lsls r1, r3, #14 + 8007ae4: d5af bpl.n 8007a46 + if ((HAL_GetTick() - tickstart) > HSE_TIMEOUT_VALUE) + 8007ae6: f7fd fda3 bl 8005630 + 8007aea: 1b80 subs r0, r0, r6 + 8007aec: 2864 cmp r0, #100 ; 0x64 + 8007aee: d9f7 bls.n 8007ae0 + 8007af0: e7e6 b.n 8007ac0 + __HAL_RCC_HSE_CONFIG(RCC_OscInitStruct->HSEState); + 8007af2: f5b3 2fa0 cmp.w r3, #327680 ; 0x50000 + 8007af6: 682b ldr r3, [r5, #0] + 8007af8: d103 bne.n 8007b02 + 8007afa: f443 2380 orr.w r3, r3, #262144 ; 0x40000 + 8007afe: 602b str r3, [r5, #0] + 8007b00: e7ce b.n 8007aa0 + 8007b02: f423 3380 bic.w r3, r3, #65536 ; 0x10000 + 8007b06: 602b str r3, [r5, #0] + 8007b08: 682b ldr r3, [r5, #0] + 8007b0a: f423 2380 bic.w r3, r3, #262144 ; 0x40000 + 8007b0e: e7ca b.n 8007aa6 + if ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_HSI) + 8007b10: 4b6a ldr r3, [pc, #424] ; (8007cbc ) + 8007b12: 689a ldr r2, [r3, #8] + 8007b14: f012 0f0c tst.w r2, #12 + 8007b18: d007 beq.n 8007b2a + || ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) && ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLCFGR_PLLSRC_HSI))) + 8007b1a: 689a ldr r2, [r3, #8] + 8007b1c: f002 020c and.w r2, r2, #12 + 8007b20: 2a08 cmp r2, #8 + 8007b22: d111 bne.n 8007b48 + 8007b24: 685b ldr r3, [r3, #4] + 8007b26: 025a lsls r2, r3, #9 + 8007b28: d40e bmi.n 8007b48 + if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET) && (RCC_OscInitStruct->HSIState != RCC_HSI_ON)) + 8007b2a: 4a64 ldr r2, [pc, #400] ; (8007cbc ) + 8007b2c: 6813 ldr r3, [r2, #0] + 8007b2e: 079b lsls r3, r3, #30 + 8007b30: d502 bpl.n 8007b38 + 8007b32: 68e3 ldr r3, [r4, #12] + 8007b34: 2b01 cmp r3, #1 + 8007b36: d1ac bne.n 8007a92 + __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->HSICalibrationValue); + 8007b38: 6813 ldr r3, [r2, #0] + 8007b3a: 6921 ldr r1, [r4, #16] + 8007b3c: f023 03f8 bic.w r3, r3, #248 ; 0xf8 + 8007b40: ea43 03c1 orr.w r3, r3, r1, lsl #3 + 8007b44: 6013 str r3, [r2, #0] + if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET) && (RCC_OscInitStruct->HSIState != RCC_HSI_ON)) + 8007b46: e781 b.n 8007a4c + if ((RCC_OscInitStruct->HSIState) != RCC_HSI_OFF) + 8007b48: 68e3 ldr r3, [r4, #12] + 8007b4a: 4d5c ldr r5, [pc, #368] ; (8007cbc ) + 8007b4c: b1bb cbz r3, 8007b7e + __HAL_RCC_HSI_ENABLE(); + 8007b4e: 682b ldr r3, [r5, #0] + 8007b50: f043 0301 orr.w r3, r3, #1 + 8007b54: 602b str r3, [r5, #0] + tickstart = HAL_GetTick(); + 8007b56: f7fd fd6b bl 8005630 + 8007b5a: 4606 mov r6, r0 + while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET) + 8007b5c: 682b ldr r3, [r5, #0] + 8007b5e: 079f lsls r7, r3, #30 + 8007b60: d507 bpl.n 8007b72 + __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->HSICalibrationValue); + 8007b62: 682b ldr r3, [r5, #0] + 8007b64: 6922 ldr r2, [r4, #16] + 8007b66: f023 03f8 bic.w r3, r3, #248 ; 0xf8 + 8007b6a: ea43 03c2 orr.w r3, r3, r2, lsl #3 + 8007b6e: 602b str r3, [r5, #0] + 8007b70: e76c b.n 8007a4c + if ((HAL_GetTick() - tickstart) > HSI_TIMEOUT_VALUE) + 8007b72: f7fd fd5d bl 8005630 + 8007b76: 1b80 subs r0, r0, r6 + 8007b78: 2802 cmp r0, #2 + 8007b7a: d9ef bls.n 8007b5c + 8007b7c: e7a0 b.n 8007ac0 + __HAL_RCC_HSI_DISABLE(); + 8007b7e: 682b ldr r3, [r5, #0] + 8007b80: f023 0301 bic.w r3, r3, #1 + 8007b84: 602b str r3, [r5, #0] + tickstart = HAL_GetTick(); + 8007b86: f7fd fd53 bl 8005630 + 8007b8a: 4606 mov r6, r0 + while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET) + 8007b8c: 682b ldr r3, [r5, #0] + 8007b8e: 0798 lsls r0, r3, #30 + 8007b90: f57f af5c bpl.w 8007a4c + if ((HAL_GetTick() - tickstart) > HSI_TIMEOUT_VALUE) + 8007b94: f7fd fd4c bl 8005630 + 8007b98: 1b80 subs r0, r0, r6 + 8007b9a: 2802 cmp r0, #2 + 8007b9c: d9f6 bls.n 8007b8c + 8007b9e: e78f b.n 8007ac0 + if ((RCC_OscInitStruct->LSIState) != RCC_LSI_OFF) + 8007ba0: 6963 ldr r3, [r4, #20] + 8007ba2: 4d46 ldr r5, [pc, #280] ; (8007cbc ) + 8007ba4: b183 cbz r3, 8007bc8 + __HAL_RCC_LSI_ENABLE(); + 8007ba6: 6f6b ldr r3, [r5, #116] ; 0x74 + 8007ba8: f043 0301 orr.w r3, r3, #1 + 8007bac: 676b str r3, [r5, #116] ; 0x74 + tickstart = HAL_GetTick(); + 8007bae: f7fd fd3f bl 8005630 + 8007bb2: 4606 mov r6, r0 + while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) == RESET) + 8007bb4: 6f6b ldr r3, [r5, #116] ; 0x74 + 8007bb6: 079b lsls r3, r3, #30 + 8007bb8: f53f af4c bmi.w 8007a54 + if ((HAL_GetTick() - tickstart) > LSI_TIMEOUT_VALUE) + 8007bbc: f7fd fd38 bl 8005630 + 8007bc0: 1b80 subs r0, r0, r6 + 8007bc2: 2802 cmp r0, #2 + 8007bc4: d9f6 bls.n 8007bb4 + 8007bc6: e77b b.n 8007ac0 + __HAL_RCC_LSI_DISABLE(); + 8007bc8: 6f6b ldr r3, [r5, #116] ; 0x74 + 8007bca: f023 0301 bic.w r3, r3, #1 + 8007bce: 676b str r3, [r5, #116] ; 0x74 + tickstart = HAL_GetTick(); + 8007bd0: f7fd fd2e bl 8005630 + 8007bd4: 4606 mov r6, r0 + while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) != RESET) + 8007bd6: 6f6b ldr r3, [r5, #116] ; 0x74 + 8007bd8: 079f lsls r7, r3, #30 + 8007bda: f57f af3b bpl.w 8007a54 + if ((HAL_GetTick() - tickstart) > LSI_TIMEOUT_VALUE) + 8007bde: f7fd fd27 bl 8005630 + 8007be2: 1b80 subs r0, r0, r6 + 8007be4: 2802 cmp r0, #2 + 8007be6: d9f6 bls.n 8007bd6 + 8007be8: e76a b.n 8007ac0 + if (__HAL_RCC_PWR_IS_CLK_DISABLED()) + 8007bea: 4b34 ldr r3, [pc, #208] ; (8007cbc ) + 8007bec: 6c1a ldr r2, [r3, #64] ; 0x40 + 8007bee: 00d0 lsls r0, r2, #3 + 8007bf0: d427 bmi.n 8007c42 + __HAL_RCC_PWR_CLK_ENABLE(); + 8007bf2: 6c1a ldr r2, [r3, #64] ; 0x40 + pwrclkchanged = SET; + 8007bf4: 2701 movs r7, #1 + __HAL_RCC_PWR_CLK_ENABLE(); + 8007bf6: f042 5280 orr.w r2, r2, #268435456 ; 0x10000000 + 8007bfa: 641a str r2, [r3, #64] ; 0x40 + 8007bfc: 6c1b ldr r3, [r3, #64] ; 0x40 + 8007bfe: f003 5380 and.w r3, r3, #268435456 ; 0x10000000 + 8007c02: 9301 str r3, [sp, #4] + 8007c04: 9b01 ldr r3, [sp, #4] + if (HAL_IS_BIT_CLR(PWR->CR1, PWR_CR1_DBP)) + 8007c06: 4d2e ldr r5, [pc, #184] ; (8007cc0 ) + 8007c08: 682b ldr r3, [r5, #0] + 8007c0a: 05d9 lsls r1, r3, #23 + 8007c0c: d51b bpl.n 8007c46 + __HAL_RCC_LSE_CONFIG(RCC_OscInitStruct->LSEState); + 8007c0e: 68a3 ldr r3, [r4, #8] + 8007c10: 4d2a ldr r5, [pc, #168] ; (8007cbc ) + 8007c12: 2b01 cmp r3, #1 + 8007c14: d127 bne.n 8007c66 + 8007c16: 6f2b ldr r3, [r5, #112] ; 0x70 + 8007c18: f043 0301 orr.w r3, r3, #1 + 8007c1c: 672b str r3, [r5, #112] ; 0x70 + if ((HAL_GetTick() - tickstart) > RCC_LSE_TIMEOUT_VALUE) + 8007c1e: f241 3888 movw r8, #5000 ; 0x1388 + tickstart = HAL_GetTick(); + 8007c22: f7fd fd05 bl 8005630 + while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET) + 8007c26: 4e25 ldr r6, [pc, #148] ; (8007cbc ) + tickstart = HAL_GetTick(); + 8007c28: 4605 mov r5, r0 + while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET) + 8007c2a: 6f33 ldr r3, [r6, #112] ; 0x70 + 8007c2c: 079b lsls r3, r3, #30 + 8007c2e: d53f bpl.n 8007cb0 + if (pwrclkchanged == SET) + 8007c30: 2f00 cmp r7, #0 + 8007c32: f43f af13 beq.w 8007a5c + __HAL_RCC_PWR_CLK_DISABLE(); + 8007c36: 4a21 ldr r2, [pc, #132] ; (8007cbc ) + 8007c38: 6c13 ldr r3, [r2, #64] ; 0x40 + 8007c3a: f023 5380 bic.w r3, r3, #268435456 ; 0x10000000 + 8007c3e: 6413 str r3, [r2, #64] ; 0x40 + 8007c40: e70c b.n 8007a5c + FlagStatus pwrclkchanged = RESET; + 8007c42: 2700 movs r7, #0 + 8007c44: e7df b.n 8007c06 + PWR->CR1 |= PWR_CR1_DBP; + 8007c46: 682b ldr r3, [r5, #0] + 8007c48: f443 7380 orr.w r3, r3, #256 ; 0x100 + 8007c4c: 602b str r3, [r5, #0] + tickstart = HAL_GetTick(); + 8007c4e: f7fd fcef bl 8005630 + 8007c52: 4606 mov r6, r0 + while (HAL_IS_BIT_CLR(PWR->CR1, PWR_CR1_DBP)) + 8007c54: 682b ldr r3, [r5, #0] + 8007c56: 05da lsls r2, r3, #23 + 8007c58: d4d9 bmi.n 8007c0e + if ((HAL_GetTick() - tickstart) > RCC_DBP_TIMEOUT_VALUE) + 8007c5a: f7fd fce9 bl 8005630 + 8007c5e: 1b80 subs r0, r0, r6 + 8007c60: 2864 cmp r0, #100 ; 0x64 + 8007c62: d9f7 bls.n 8007c54 + 8007c64: e72c b.n 8007ac0 + __HAL_RCC_LSE_CONFIG(RCC_OscInitStruct->LSEState); + 8007c66: b9ab cbnz r3, 8007c94 + 8007c68: 6f2b ldr r3, [r5, #112] ; 0x70 + if ((HAL_GetTick() - tickstart) > RCC_LSE_TIMEOUT_VALUE) + 8007c6a: f241 3888 movw r8, #5000 ; 0x1388 + __HAL_RCC_LSE_CONFIG(RCC_OscInitStruct->LSEState); + 8007c6e: f023 0301 bic.w r3, r3, #1 + 8007c72: 672b str r3, [r5, #112] ; 0x70 + 8007c74: 6f2b ldr r3, [r5, #112] ; 0x70 + 8007c76: f023 0304 bic.w r3, r3, #4 + 8007c7a: 672b str r3, [r5, #112] ; 0x70 + tickstart = HAL_GetTick(); + 8007c7c: f7fd fcd8 bl 8005630 + 8007c80: 4606 mov r6, r0 + while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) != RESET) + 8007c82: 6f2b ldr r3, [r5, #112] ; 0x70 + 8007c84: 0798 lsls r0, r3, #30 + 8007c86: d5d3 bpl.n 8007c30 + if ((HAL_GetTick() - tickstart) > RCC_LSE_TIMEOUT_VALUE) + 8007c88: f7fd fcd2 bl 8005630 + 8007c8c: 1b80 subs r0, r0, r6 + 8007c8e: 4540 cmp r0, r8 + 8007c90: d9f7 bls.n 8007c82 + 8007c92: e715 b.n 8007ac0 + __HAL_RCC_LSE_CONFIG(RCC_OscInitStruct->LSEState); + 8007c94: 2b05 cmp r3, #5 + 8007c96: 6f2b ldr r3, [r5, #112] ; 0x70 + 8007c98: d103 bne.n 8007ca2 + 8007c9a: f043 0304 orr.w r3, r3, #4 + 8007c9e: 672b str r3, [r5, #112] ; 0x70 + 8007ca0: e7b9 b.n 8007c16 + 8007ca2: f023 0301 bic.w r3, r3, #1 + 8007ca6: 672b str r3, [r5, #112] ; 0x70 + 8007ca8: 6f2b ldr r3, [r5, #112] ; 0x70 + 8007caa: f023 0304 bic.w r3, r3, #4 + 8007cae: e7b5 b.n 8007c1c + if ((HAL_GetTick() - tickstart) > RCC_LSE_TIMEOUT_VALUE) + 8007cb0: f7fd fcbe bl 8005630 + 8007cb4: 1b40 subs r0, r0, r5 + 8007cb6: 4540 cmp r0, r8 + 8007cb8: d9b7 bls.n 8007c2a + 8007cba: e701 b.n 8007ac0 + 8007cbc: 40023800 .word 0x40023800 + 8007cc0: 40007000 .word 0x40007000 + if (__HAL_RCC_GET_SYSCLK_SOURCE() != RCC_SYSCLKSOURCE_STATUS_PLLCLK) + 8007cc4: 4d38 ldr r5, [pc, #224] ; (8007da8 ) + 8007cc6: 68ab ldr r3, [r5, #8] + 8007cc8: f003 030c and.w r3, r3, #12 + 8007ccc: 2b08 cmp r3, #8 + 8007cce: d041 beq.n 8007d54 + __HAL_RCC_PLL_DISABLE(); + 8007cd0: 682b ldr r3, [r5, #0] + if ((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_ON) + 8007cd2: 2a02 cmp r2, #2 + __HAL_RCC_PLL_DISABLE(); + 8007cd4: f023 7380 bic.w r3, r3, #16777216 ; 0x1000000 + 8007cd8: 602b str r3, [r5, #0] + if ((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_ON) + 8007cda: d12e bne.n 8007d3a + tickstart = HAL_GetTick(); + 8007cdc: f7fd fca8 bl 8005630 + 8007ce0: 4606 mov r6, r0 + while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET) + 8007ce2: 682b ldr r3, [r5, #0] + 8007ce4: 0199 lsls r1, r3, #6 + 8007ce6: d422 bmi.n 8007d2e + __HAL_RCC_PLL_CONFIG(RCC_OscInitStruct->PLL.PLLSource, + 8007ce8: 6aa3 ldr r3, [r4, #40] ; 0x28 + 8007cea: 085b lsrs r3, r3, #1 + 8007cec: 1e5a subs r2, r3, #1 + 8007cee: e9d4 3107 ldrd r3, r1, [r4, #28] + 8007cf2: 430b orrs r3, r1 + 8007cf4: ea43 4302 orr.w r3, r3, r2, lsl #16 + 8007cf8: 6a62 ldr r2, [r4, #36] ; 0x24 + 8007cfa: ea43 1382 orr.w r3, r3, r2, lsl #6 + 8007cfe: 6ae2 ldr r2, [r4, #44] ; 0x2c + 8007d00: ea43 6302 orr.w r3, r3, r2, lsl #24 + 8007d04: f043 5300 orr.w r3, r3, #536870912 ; 0x20000000 + 8007d08: 606b str r3, [r5, #4] + __HAL_RCC_PLL_ENABLE(); + 8007d0a: 682b ldr r3, [r5, #0] + 8007d0c: f043 7380 orr.w r3, r3, #16777216 ; 0x1000000 + 8007d10: 602b str r3, [r5, #0] + tickstart = HAL_GetTick(); + 8007d12: f7fd fc8d bl 8005630 + while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET) + 8007d16: 4d24 ldr r5, [pc, #144] ; (8007da8 ) + tickstart = HAL_GetTick(); + 8007d18: 4604 mov r4, r0 + while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET) + 8007d1a: 682b ldr r3, [r5, #0] + 8007d1c: 019a lsls r2, r3, #6 + 8007d1e: f53f aea1 bmi.w 8007a64 + if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE) + 8007d22: f7fd fc85 bl 8005630 + 8007d26: 1b00 subs r0, r0, r4 + 8007d28: 2802 cmp r0, #2 + 8007d2a: d9f6 bls.n 8007d1a + 8007d2c: e6c8 b.n 8007ac0 + if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE) + 8007d2e: f7fd fc7f bl 8005630 + 8007d32: 1b80 subs r0, r0, r6 + 8007d34: 2802 cmp r0, #2 + 8007d36: d9d4 bls.n 8007ce2 + 8007d38: e6c2 b.n 8007ac0 + tickstart = HAL_GetTick(); + 8007d3a: f7fd fc79 bl 8005630 + 8007d3e: 4604 mov r4, r0 + while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET) + 8007d40: 682b ldr r3, [r5, #0] + 8007d42: 019b lsls r3, r3, #6 + 8007d44: f57f ae8e bpl.w 8007a64 + if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE) + 8007d48: f7fd fc72 bl 8005630 + 8007d4c: 1b00 subs r0, r0, r4 + 8007d4e: 2802 cmp r0, #2 + 8007d50: d9f6 bls.n 8007d40 + 8007d52: e6b5 b.n 8007ac0 + if (((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_OFF) || + 8007d54: 2a01 cmp r2, #1 + pll_config = RCC->PLLCFGR; + 8007d56: 686b ldr r3, [r5, #4] + if (((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_OFF) || + 8007d58: f43f ae9b beq.w 8007a92 + (READ_BIT(pll_config, RCC_PLLCFGR_PLLSRC) != RCC_OscInitStruct->PLL.PLLSource) || + 8007d5c: f403 0280 and.w r2, r3, #4194304 ; 0x400000 + if (((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_OFF) || + 8007d60: 69e1 ldr r1, [r4, #28] + 8007d62: 428a cmp r2, r1 + 8007d64: f47f ae95 bne.w 8007a92 + (READ_BIT(pll_config, RCC_PLLCFGR_PLLM) != RCC_OscInitStruct->PLL.PLLM) || + 8007d68: f003 023f and.w r2, r3, #63 ; 0x3f + (READ_BIT(pll_config, RCC_PLLCFGR_PLLSRC) != RCC_OscInitStruct->PLL.PLLSource) || + 8007d6c: 6a21 ldr r1, [r4, #32] + 8007d6e: 428a cmp r2, r1 + 8007d70: f47f ae8f bne.w 8007a92 + (READ_BIT(pll_config, RCC_PLLCFGR_PLLM) != RCC_OscInitStruct->PLL.PLLM) || + 8007d74: f647 72c0 movw r2, #32704 ; 0x7fc0 + (READ_BIT(pll_config, RCC_PLLCFGR_PLLN) != (RCC_OscInitStruct->PLL.PLLN << RCC_PLLCFGR_PLLN_Pos)) || + 8007d78: 6a61 ldr r1, [r4, #36] ; 0x24 + (READ_BIT(pll_config, RCC_PLLCFGR_PLLM) != RCC_OscInitStruct->PLL.PLLM) || + 8007d7a: 401a ands r2, r3 + 8007d7c: ebb2 1f81 cmp.w r2, r1, lsl #6 + 8007d80: f47f ae87 bne.w 8007a92 + (READ_BIT(pll_config, RCC_PLLCFGR_PLLP) != ((((RCC_OscInitStruct->PLL.PLLP) >> 1U) - 1U) << RCC_PLLCFGR_PLLP_Pos)) || + 8007d84: 6aa2 ldr r2, [r4, #40] ; 0x28 + 8007d86: f403 3140 and.w r1, r3, #196608 ; 0x30000 + 8007d8a: 0852 lsrs r2, r2, #1 + 8007d8c: 3a01 subs r2, #1 + (READ_BIT(pll_config, RCC_PLLCFGR_PLLN) != (RCC_OscInitStruct->PLL.PLLN << RCC_PLLCFGR_PLLN_Pos)) || + 8007d8e: ebb1 4f02 cmp.w r1, r2, lsl #16 + 8007d92: f47f ae7e bne.w 8007a92 + (READ_BIT(pll_config, RCC_PLLCFGR_PLLQ) != (RCC_OscInitStruct->PLL.PLLQ << RCC_PLLCFGR_PLLQ_Pos))) + 8007d96: f003 6370 and.w r3, r3, #251658240 ; 0xf000000 + 8007d9a: 6ae2 ldr r2, [r4, #44] ; 0x2c + (READ_BIT(pll_config, RCC_PLLCFGR_PLLP) != ((((RCC_OscInitStruct->PLL.PLLP) >> 1U) - 1U) << RCC_PLLCFGR_PLLP_Pos)) || + 8007d9c: ebb3 6f02 cmp.w r3, r2, lsl #24 + 8007da0: f43f ae60 beq.w 8007a64 + 8007da4: e675 b.n 8007a92 + 8007da6: bf00 nop + 8007da8: 40023800 .word 0x40023800 + +08007dac : +{ + uint32_t pllm = 0, pllvco = 0, pllp = 0; + uint32_t sysclockfreq = 0; + + /* Get SYSCLK source -------------------------------------------------------*/ + switch (RCC->CFGR & RCC_CFGR_SWS) + 8007dac: 4913 ldr r1, [pc, #76] ; (8007dfc ) +{ + 8007dae: b508 push {r3, lr} + switch (RCC->CFGR & RCC_CFGR_SWS) + 8007db0: 688b ldr r3, [r1, #8] + 8007db2: f003 030c and.w r3, r3, #12 + 8007db6: 2b04 cmp r3, #4 + 8007db8: d01b beq.n 8007df2 + 8007dba: 2b08 cmp r3, #8 + 8007dbc: d11b bne.n 8007df6 + } + case RCC_SYSCLKSOURCE_STATUS_PLLCLK: /* PLL used as system clock source */ + { + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLLM) * PLLN + SYSCLK = PLL_VCO / PLLP */ + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + 8007dbe: 684a ldr r2, [r1, #4] + if (__HAL_RCC_GET_PLL_OSCSOURCE() != RCC_PLLCFGR_PLLSRC_HSI) + 8007dc0: 684b ldr r3, [r1, #4] + { + /* HSE used as PLL clock source */ + pllvco = (uint32_t)((((uint64_t) HSE_VALUE * ((uint64_t)((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos)))) / (uint64_t)pllm); + 8007dc2: 6849 ldr r1, [r1, #4] + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + 8007dc4: f002 023f and.w r2, r2, #63 ; 0x3f + if (__HAL_RCC_GET_PLL_OSCSOURCE() != RCC_PLLCFGR_PLLSRC_HSI) + 8007dc8: f413 0380 ands.w r3, r3, #4194304 ; 0x400000 + pllvco = (uint32_t)((((uint64_t) HSE_VALUE * ((uint64_t)((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos)))) / (uint64_t)pllm); + 8007dcc: f3c1 1188 ubfx r1, r1, #6, #9 + 8007dd0: bf1a itte ne + 8007dd2: 480b ldrne r0, [pc, #44] ; (8007e00 ) + 8007dd4: 2300 movne r3, #0 + } + else + { + /* HSI used as PLL clock source */ + pllvco = (uint32_t)((((uint64_t) HSI_VALUE * ((uint64_t)((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos)))) / (uint64_t)pllm); + 8007dd6: 480b ldreq r0, [pc, #44] ; (8007e04 ) + 8007dd8: fba1 0100 umull r0, r1, r1, r0 + 8007ddc: f7f8 fe86 bl 8000aec <__aeabi_uldivmod> + } + pllp = ((((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >> RCC_PLLCFGR_PLLP_Pos) + 1) * 2); + 8007de0: 4b06 ldr r3, [pc, #24] ; (8007dfc ) + 8007de2: 685b ldr r3, [r3, #4] + 8007de4: f3c3 4301 ubfx r3, r3, #16, #2 + 8007de8: 3301 adds r3, #1 + 8007dea: 005b lsls r3, r3, #1 + + sysclockfreq = pllvco / pllp; + 8007dec: fbb0 f0f3 udiv r0, r0, r3 + sysclockfreq = HSI_VALUE; + break; + } + } + return sysclockfreq; +} + 8007df0: bd08 pop {r3, pc} + switch (RCC->CFGR & RCC_CFGR_SWS) + 8007df2: 4803 ldr r0, [pc, #12] ; (8007e00 ) + 8007df4: e7fc b.n 8007df0 + sysclockfreq = HSI_VALUE; + 8007df6: 4803 ldr r0, [pc, #12] ; (8007e04 ) + return sysclockfreq; + 8007df8: e7fa b.n 8007df0 + 8007dfa: bf00 nop + 8007dfc: 40023800 .word 0x40023800 + 8007e00: 017d7840 .word 0x017d7840 + 8007e04: 00f42400 .word 0x00f42400 + +08007e08 : +{ + 8007e08: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} + 8007e0c: 460d mov r5, r1 + if (RCC_ClkInitStruct == NULL) + 8007e0e: 4604 mov r4, r0 + 8007e10: b910 cbnz r0, 8007e18 + return HAL_ERROR; + 8007e12: 2001 movs r0, #1 +} + 8007e14: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + if (FLatency > __HAL_FLASH_GET_LATENCY()) + 8007e18: 4a45 ldr r2, [pc, #276] ; (8007f30 ) + 8007e1a: 6813 ldr r3, [r2, #0] + 8007e1c: f003 030f and.w r3, r3, #15 + 8007e20: 428b cmp r3, r1 + 8007e22: d328 bcc.n 8007e76 + if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_HCLK) == RCC_CLOCKTYPE_HCLK) + 8007e24: 6821 ldr r1, [r4, #0] + 8007e26: 078f lsls r7, r1, #30 + 8007e28: d430 bmi.n 8007e8c + if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_SYSCLK) == RCC_CLOCKTYPE_SYSCLK) + 8007e2a: 07c8 lsls r0, r1, #31 + 8007e2c: d443 bmi.n 8007eb6 + if (FLatency < __HAL_FLASH_GET_LATENCY()) + 8007e2e: 4a40 ldr r2, [pc, #256] ; (8007f30 ) + 8007e30: 6813 ldr r3, [r2, #0] + 8007e32: f003 030f and.w r3, r3, #15 + 8007e36: 42ab cmp r3, r5 + 8007e38: d866 bhi.n 8007f08 + if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1) + 8007e3a: 6822 ldr r2, [r4, #0] + 8007e3c: 0751 lsls r1, r2, #29 + 8007e3e: d46f bmi.n 8007f20 + if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2) + 8007e40: 0713 lsls r3, r2, #28 + 8007e42: d507 bpl.n 8007e54 + MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE2, ((RCC_ClkInitStruct->APB2CLKDivider) << 3)); + 8007e44: 4a3b ldr r2, [pc, #236] ; (8007f34 ) + 8007e46: 6921 ldr r1, [r4, #16] + 8007e48: 6893 ldr r3, [r2, #8] + 8007e4a: f423 4360 bic.w r3, r3, #57344 ; 0xe000 + 8007e4e: ea43 03c1 orr.w r3, r3, r1, lsl #3 + 8007e52: 6093 str r3, [r2, #8] + SystemCoreClock = HAL_RCC_GetSysClockFreq() >> AHBPrescTable[(RCC->CFGR & RCC_CFGR_HPRE) >> RCC_CFGR_HPRE_Pos]; + 8007e54: f7ff ffaa bl 8007dac + 8007e58: 4b36 ldr r3, [pc, #216] ; (8007f34 ) + 8007e5a: 4a37 ldr r2, [pc, #220] ; (8007f38 ) + 8007e5c: 689b ldr r3, [r3, #8] + 8007e5e: f3c3 1303 ubfx r3, r3, #4, #4 + 8007e62: 5cd3 ldrb r3, [r2, r3] + 8007e64: 40d8 lsrs r0, r3 + 8007e66: 4b35 ldr r3, [pc, #212] ; (8007f3c ) + 8007e68: 6018 str r0, [r3, #0] + HAL_InitTick(uwTickPrio); + 8007e6a: 4b35 ldr r3, [pc, #212] ; (8007f40 ) + 8007e6c: 6818 ldr r0, [r3, #0] + 8007e6e: f7f9 ff43 bl 8001cf8 + return HAL_OK; + 8007e72: 2000 movs r0, #0 + 8007e74: e7ce b.n 8007e14 + __HAL_FLASH_SET_LATENCY(FLatency); + 8007e76: 6813 ldr r3, [r2, #0] + 8007e78: f023 030f bic.w r3, r3, #15 + 8007e7c: 430b orrs r3, r1 + 8007e7e: 6013 str r3, [r2, #0] + if (__HAL_FLASH_GET_LATENCY() != FLatency) + 8007e80: 6813 ldr r3, [r2, #0] + 8007e82: f003 030f and.w r3, r3, #15 + 8007e86: 428b cmp r3, r1 + 8007e88: d1c3 bne.n 8007e12 + 8007e8a: e7cb b.n 8007e24 + if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1) + 8007e8c: f011 0f04 tst.w r1, #4 + 8007e90: 4b28 ldr r3, [pc, #160] ; (8007f34 ) + 8007e92: d003 beq.n 8007e9c + MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE1, RCC_HCLK_DIV16); + 8007e94: 689a ldr r2, [r3, #8] + 8007e96: f442 52e0 orr.w r2, r2, #7168 ; 0x1c00 + 8007e9a: 609a str r2, [r3, #8] + if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2) + 8007e9c: 070e lsls r6, r1, #28 + 8007e9e: d503 bpl.n 8007ea8 + MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE2, (RCC_HCLK_DIV16 << 3)); + 8007ea0: 689a ldr r2, [r3, #8] + 8007ea2: f442 4260 orr.w r2, r2, #57344 ; 0xe000 + 8007ea6: 609a str r2, [r3, #8] + MODIFY_REG(RCC->CFGR, RCC_CFGR_HPRE, RCC_ClkInitStruct->AHBCLKDivider); + 8007ea8: 689a ldr r2, [r3, #8] + 8007eaa: 68a0 ldr r0, [r4, #8] + 8007eac: f022 02f0 bic.w r2, r2, #240 ; 0xf0 + 8007eb0: 4302 orrs r2, r0 + 8007eb2: 609a str r2, [r3, #8] + 8007eb4: e7b9 b.n 8007e2a + if (RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_HSE) + 8007eb6: 6861 ldr r1, [r4, #4] + 8007eb8: 4b1e ldr r3, [pc, #120] ; (8007f34 ) + 8007eba: 2901 cmp r1, #1 + if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET) + 8007ebc: 681a ldr r2, [r3, #0] + if (RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_HSE) + 8007ebe: d11b bne.n 8007ef8 + if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET) + 8007ec0: f412 3f00 tst.w r2, #131072 ; 0x20000 + if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET) + 8007ec4: d0a5 beq.n 8007e12 + __HAL_RCC_SYSCLK_CONFIG(RCC_ClkInitStruct->SYSCLKSource); + 8007ec6: 689a ldr r2, [r3, #8] + if ((HAL_GetTick() - tickstart) > CLOCKSWITCH_TIMEOUT_VALUE) + 8007ec8: f241 3888 movw r8, #5000 ; 0x1388 + while (__HAL_RCC_GET_SYSCLK_SOURCE() != (RCC_ClkInitStruct->SYSCLKSource << RCC_CFGR_SWS_Pos)) + 8007ecc: 4f19 ldr r7, [pc, #100] ; (8007f34 ) + __HAL_RCC_SYSCLK_CONFIG(RCC_ClkInitStruct->SYSCLKSource); + 8007ece: f022 0203 bic.w r2, r2, #3 + 8007ed2: 430a orrs r2, r1 + 8007ed4: 609a str r2, [r3, #8] + tickstart = HAL_GetTick(); + 8007ed6: f7fd fbab bl 8005630 + 8007eda: 4606 mov r6, r0 + while (__HAL_RCC_GET_SYSCLK_SOURCE() != (RCC_ClkInitStruct->SYSCLKSource << RCC_CFGR_SWS_Pos)) + 8007edc: 68bb ldr r3, [r7, #8] + 8007ede: 6862 ldr r2, [r4, #4] + 8007ee0: f003 030c and.w r3, r3, #12 + 8007ee4: ebb3 0f82 cmp.w r3, r2, lsl #2 + 8007ee8: d0a1 beq.n 8007e2e + if ((HAL_GetTick() - tickstart) > CLOCKSWITCH_TIMEOUT_VALUE) + 8007eea: f7fd fba1 bl 8005630 + 8007eee: 1b80 subs r0, r0, r6 + 8007ef0: 4540 cmp r0, r8 + 8007ef2: d9f3 bls.n 8007edc + return HAL_TIMEOUT; + 8007ef4: 2003 movs r0, #3 + 8007ef6: e78d b.n 8007e14 + else if (RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_PLLCLK) + 8007ef8: 2902 cmp r1, #2 + 8007efa: d102 bne.n 8007f02 + if (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET) + 8007efc: f012 7f00 tst.w r2, #33554432 ; 0x2000000 + 8007f00: e7e0 b.n 8007ec4 + if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET) + 8007f02: f012 0f02 tst.w r2, #2 + 8007f06: e7dd b.n 8007ec4 + __HAL_FLASH_SET_LATENCY(FLatency); + 8007f08: 6813 ldr r3, [r2, #0] + 8007f0a: f023 030f bic.w r3, r3, #15 + 8007f0e: 432b orrs r3, r5 + 8007f10: 6013 str r3, [r2, #0] + if (__HAL_FLASH_GET_LATENCY() != FLatency) + 8007f12: 6813 ldr r3, [r2, #0] + 8007f14: f003 030f and.w r3, r3, #15 + 8007f18: 42ab cmp r3, r5 + 8007f1a: f47f af7a bne.w 8007e12 + 8007f1e: e78c b.n 8007e3a + MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE1, RCC_ClkInitStruct->APB1CLKDivider); + 8007f20: 4904 ldr r1, [pc, #16] ; (8007f34 ) + 8007f22: 68e0 ldr r0, [r4, #12] + 8007f24: 688b ldr r3, [r1, #8] + 8007f26: f423 53e0 bic.w r3, r3, #7168 ; 0x1c00 + 8007f2a: 4303 orrs r3, r0 + 8007f2c: 608b str r3, [r1, #8] + 8007f2e: e787 b.n 8007e40 + 8007f30: 40023c00 .word 0x40023c00 + 8007f34: 40023800 .word 0x40023800 + 8007f38: 08037cbc .word 0x08037cbc + 8007f3c: 20000020 .word 0x20000020 + 8007f40: 20000050 .word 0x20000050 + +08007f44 : + * @retval HCLK frequency + */ +uint32_t HAL_RCC_GetHCLKFreq(void) +{ + return SystemCoreClock; +} + 8007f44: 4b01 ldr r3, [pc, #4] ; (8007f4c ) + 8007f46: 6818 ldr r0, [r3, #0] + 8007f48: 4770 bx lr + 8007f4a: bf00 nop + 8007f4c: 20000020 .word 0x20000020 + +08007f50 : + * @retval PCLK1 frequency + */ +uint32_t HAL_RCC_GetPCLK1Freq(void) +{ + /* Get HCLK source and Compute PCLK1 frequency ---------------------------*/ + return (HAL_RCC_GetHCLKFreq() >> APBPrescTable[(RCC->CFGR & RCC_CFGR_PPRE1) >> RCC_CFGR_PPRE1_Pos]); + 8007f50: 4b04 ldr r3, [pc, #16] ; (8007f64 ) + 8007f52: 4a05 ldr r2, [pc, #20] ; (8007f68 ) + 8007f54: 689b ldr r3, [r3, #8] + 8007f56: f3c3 2382 ubfx r3, r3, #10, #3 + 8007f5a: 5cd3 ldrb r3, [r2, r3] + 8007f5c: 4a03 ldr r2, [pc, #12] ; (8007f6c ) + 8007f5e: 6810 ldr r0, [r2, #0] +} + 8007f60: 40d8 lsrs r0, r3 + 8007f62: 4770 bx lr + 8007f64: 40023800 .word 0x40023800 + 8007f68: 08037ccc .word 0x08037ccc + 8007f6c: 20000020 .word 0x20000020 + +08007f70 : + * @retval None + */ +void HAL_RCC_GetClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t *pFLatency) +{ + /* Set all possible values for the Clock type parameter --------------------*/ + RCC_ClkInitStruct->ClockType = RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2; + 8007f70: 230f movs r3, #15 + 8007f72: 6003 str r3, [r0, #0] + + /* Get the SYSCLK configuration --------------------------------------------*/ + RCC_ClkInitStruct->SYSCLKSource = (uint32_t)(RCC->CFGR & RCC_CFGR_SW); + 8007f74: 4b0b ldr r3, [pc, #44] ; (8007fa4 ) + 8007f76: 689a ldr r2, [r3, #8] + 8007f78: f002 0203 and.w r2, r2, #3 + 8007f7c: 6042 str r2, [r0, #4] + + /* Get the HCLK configuration ----------------------------------------------*/ + RCC_ClkInitStruct->AHBCLKDivider = (uint32_t)(RCC->CFGR & RCC_CFGR_HPRE); + 8007f7e: 689a ldr r2, [r3, #8] + 8007f80: f002 02f0 and.w r2, r2, #240 ; 0xf0 + 8007f84: 6082 str r2, [r0, #8] + + /* Get the APB1 configuration ----------------------------------------------*/ + RCC_ClkInitStruct->APB1CLKDivider = (uint32_t)(RCC->CFGR & RCC_CFGR_PPRE1); + 8007f86: 689a ldr r2, [r3, #8] + 8007f88: f402 52e0 and.w r2, r2, #7168 ; 0x1c00 + 8007f8c: 60c2 str r2, [r0, #12] + + /* Get the APB2 configuration ----------------------------------------------*/ + RCC_ClkInitStruct->APB2CLKDivider = (uint32_t)((RCC->CFGR & RCC_CFGR_PPRE2) >> 3); + 8007f8e: 689b ldr r3, [r3, #8] + 8007f90: 08db lsrs r3, r3, #3 + 8007f92: f403 53e0 and.w r3, r3, #7168 ; 0x1c00 + 8007f96: 6103 str r3, [r0, #16] + + /* Get the Flash Wait State (Latency) configuration ------------------------*/ + *pFLatency = (uint32_t)(FLASH->ACR & FLASH_ACR_LATENCY); + 8007f98: 4b03 ldr r3, [pc, #12] ; (8007fa8 ) + 8007f9a: 681b ldr r3, [r3, #0] + 8007f9c: f003 030f and.w r3, r3, #15 + 8007fa0: 600b str r3, [r1, #0] +} + 8007fa2: 4770 bx lr + 8007fa4: 40023800 .word 0x40023800 + 8007fa8: 40023c00 .word 0x40023c00 + +08007fac : + + /* Check the parameters */ + assert_param(IS_RCC_PERIPHCLOCK(PeriphClkInit->PeriphClockSelection)); + + /*----------------------------------- I2S configuration ----------------------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2S) == (RCC_PERIPHCLK_I2S)) + 8007fac: 6803 ldr r3, [r0, #0] +{ + 8007fae: e92d 43f7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, lr} + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2S) == (RCC_PERIPHCLK_I2S)) + 8007fb2: f013 0601 ands.w r6, r3, #1 +{ + 8007fb6: 4604 mov r4, r0 + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2S) == (RCC_PERIPHCLK_I2S)) + 8007fb8: d00b beq.n 8007fd2 + { + /* Check the parameters */ + assert_param(IS_RCC_I2SCLKSOURCE(PeriphClkInit->I2sClockSelection)); + + /* Configure I2S Clock source */ + __HAL_RCC_I2S_CONFIG(PeriphClkInit->I2sClockSelection); + 8007fba: 4aad ldr r2, [pc, #692] ; (8008270 ) + 8007fbc: 6891 ldr r1, [r2, #8] + 8007fbe: f421 0100 bic.w r1, r1, #8388608 ; 0x800000 + 8007fc2: 6091 str r1, [r2, #8] + 8007fc4: 6b46 ldr r6, [r0, #52] ; 0x34 + 8007fc6: 6891 ldr r1, [r2, #8] + 8007fc8: 4331 orrs r1, r6 + + /* Enable the PLLI2S when it's used as clock source for I2S */ + if(PeriphClkInit->I2sClockSelection == RCC_I2SCLKSOURCE_PLLI2S) + 8007fca: fab6 f686 clz r6, r6 + 8007fce: 0976 lsrs r6, r6, #5 + __HAL_RCC_I2S_CONFIG(PeriphClkInit->I2sClockSelection); + 8007fd0: 6091 str r1, [r2, #8] + plli2sused = 1; + } + } + + /*------------------------------------ SAI1 configuration --------------------------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAI1) == (RCC_PERIPHCLK_SAI1)) + 8007fd2: f413 2500 ands.w r5, r3, #524288 ; 0x80000 + 8007fd6: d012 beq.n 8007ffe + { + /* Check the parameters */ + assert_param(IS_RCC_SAI1CLKSOURCE(PeriphClkInit->Sai1ClockSelection)); + + /* Configure SAI1 Clock source */ + __HAL_RCC_SAI1_CONFIG(PeriphClkInit->Sai1ClockSelection); + 8007fd8: 49a5 ldr r1, [pc, #660] ; (8008270 ) + 8007fda: 6be5 ldr r5, [r4, #60] ; 0x3c + 8007fdc: f8d1 208c ldr.w r2, [r1, #140] ; 0x8c + /* Enable the PLLI2S when it's used as clock source for SAI */ + if(PeriphClkInit->Sai1ClockSelection == RCC_SAI1CLKSOURCE_PLLI2S) + 8007fe0: f5b5 1f80 cmp.w r5, #1048576 ; 0x100000 + __HAL_RCC_SAI1_CONFIG(PeriphClkInit->Sai1ClockSelection); + 8007fe4: f422 1240 bic.w r2, r2, #3145728 ; 0x300000 + { + plli2sused = 1; + 8007fe8: bf08 it eq + 8007fea: 2601 moveq r6, #1 + __HAL_RCC_SAI1_CONFIG(PeriphClkInit->Sai1ClockSelection); + 8007fec: ea42 0205 orr.w r2, r2, r5 + } + /* Enable the PLLSAI when it's used as clock source for SAI */ + if(PeriphClkInit->Sai1ClockSelection == RCC_SAI1CLKSOURCE_PLLSAI) + 8007ff0: bf16 itet ne + 8007ff2: fab5 f585 clzne r5, r5 + uint32_t pllsaiused = 0; + 8007ff6: 2500 moveq r5, #0 + if(PeriphClkInit->Sai1ClockSelection == RCC_SAI1CLKSOURCE_PLLSAI) + 8007ff8: 096d lsrne r5, r5, #5 + __HAL_RCC_SAI1_CONFIG(PeriphClkInit->Sai1ClockSelection); + 8007ffa: f8c1 208c str.w r2, [r1, #140] ; 0x8c + pllsaiused = 1; + } + } + + /*------------------------------------ SAI2 configuration --------------------------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAI2) == (RCC_PERIPHCLK_SAI2)) + 8007ffe: 02d8 lsls r0, r3, #11 + 8008000: d510 bpl.n 8008024 + { + /* Check the parameters */ + assert_param(IS_RCC_SAI2CLKSOURCE(PeriphClkInit->Sai2ClockSelection)); + + /* Configure SAI2 Clock source */ + __HAL_RCC_SAI2_CONFIG(PeriphClkInit->Sai2ClockSelection); + 8008002: 489b ldr r0, [pc, #620] ; (8008270 ) + 8008004: 6c21 ldr r1, [r4, #64] ; 0x40 + 8008006: f8d0 208c ldr.w r2, [r0, #140] ; 0x8c + + /* Enable the PLLI2S when it's used as clock source for SAI */ + if(PeriphClkInit->Sai2ClockSelection == RCC_SAI2CLKSOURCE_PLLI2S) + 800800a: f5b1 0f80 cmp.w r1, #4194304 ; 0x400000 + __HAL_RCC_SAI2_CONFIG(PeriphClkInit->Sai2ClockSelection); + 800800e: f422 0240 bic.w r2, r2, #12582912 ; 0xc00000 + 8008012: ea42 0201 orr.w r2, r2, r1 + 8008016: f8c0 208c str.w r2, [r0, #140] ; 0x8c + if(PeriphClkInit->Sai2ClockSelection == RCC_SAI2CLKSOURCE_PLLI2S) + 800801a: f000 8186 beq.w 800832a + plli2sused = 1; + } + /* Enable the PLLSAI when it's used as clock source for SAI */ + if(PeriphClkInit->Sai2ClockSelection == RCC_SAI2CLKSOURCE_PLLSAI) + { + pllsaiused = 1; + 800801e: 2900 cmp r1, #0 + 8008020: bf08 it eq + 8008022: 2501 moveq r5, #1 + } + + /*-------------------------------------- SPDIF-RX Configuration -----------------------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SPDIFRX) == RCC_PERIPHCLK_SPDIFRX) + { + plli2sused = 1; + 8008024: f013 7f80 tst.w r3, #16777216 ; 0x1000000 + 8008028: bf18 it ne + 800802a: 2601 movne r6, #1 + } + + /*------------------------------------ RTC configuration --------------------------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_RTC) == (RCC_PERIPHCLK_RTC)) + 800802c: 0699 lsls r1, r3, #26 + 800802e: d532 bpl.n 8008096 + { + /* Check for RTC Parameters used to output RTCCLK */ + assert_param(IS_RCC_RTCCLKSOURCE(PeriphClkInit->RTCClockSelection)); + + /* Enable Power Clock*/ + __HAL_RCC_PWR_CLK_ENABLE(); + 8008030: 4b8f ldr r3, [pc, #572] ; (8008270 ) + + /* Enable write access to Backup domain */ + PWR->CR1 |= PWR_CR1_DBP; + 8008032: 4f90 ldr r7, [pc, #576] ; (8008274 ) + __HAL_RCC_PWR_CLK_ENABLE(); + 8008034: 6c1a ldr r2, [r3, #64] ; 0x40 + 8008036: f042 5280 orr.w r2, r2, #268435456 ; 0x10000000 + 800803a: 641a str r2, [r3, #64] ; 0x40 + 800803c: 6c1b ldr r3, [r3, #64] ; 0x40 + 800803e: f003 5380 and.w r3, r3, #268435456 ; 0x10000000 + 8008042: 9301 str r3, [sp, #4] + 8008044: 9b01 ldr r3, [sp, #4] + PWR->CR1 |= PWR_CR1_DBP; + 8008046: 683b ldr r3, [r7, #0] + 8008048: f443 7380 orr.w r3, r3, #256 ; 0x100 + 800804c: 603b str r3, [r7, #0] + + /* Get Start Tick*/ + tickstart = HAL_GetTick(); + 800804e: f7fd faef bl 8005630 + 8008052: 4680 mov r8, r0 + + /* Wait for Backup domain Write protection disable */ + while((PWR->CR1 & PWR_CR1_DBP) == RESET) + 8008054: 683b ldr r3, [r7, #0] + 8008056: 05da lsls r2, r3, #23 + 8008058: f140 8169 bpl.w 800832e + return HAL_TIMEOUT; + } + } + + /* Reset the Backup domain only if the RTC Clock source selection is modified */ + tmpreg0 = (RCC->BDCR & RCC_BDCR_RTCSEL); + 800805c: 4f84 ldr r7, [pc, #528] ; (8008270 ) + + if((tmpreg0 != 0x00000000U) && (tmpreg0 != (PeriphClkInit->RTCClockSelection & RCC_BDCR_RTCSEL))) + 800805e: 6b22 ldr r2, [r4, #48] ; 0x30 + tmpreg0 = (RCC->BDCR & RCC_BDCR_RTCSEL); + 8008060: 6f3b ldr r3, [r7, #112] ; 0x70 + if((tmpreg0 != 0x00000000U) && (tmpreg0 != (PeriphClkInit->RTCClockSelection & RCC_BDCR_RTCSEL))) + 8008062: f413 7340 ands.w r3, r3, #768 ; 0x300 + 8008066: f040 816d bne.w 8008344 + return HAL_TIMEOUT; + } + } + } + } + __HAL_RCC_RTC_CONFIG(PeriphClkInit->RTCClockSelection); + 800806a: 6b23 ldr r3, [r4, #48] ; 0x30 + 800806c: f403 7240 and.w r2, r3, #768 ; 0x300 + 8008070: f5b2 7f40 cmp.w r2, #768 ; 0x300 + 8008074: 4a7e ldr r2, [pc, #504] ; (8008270 ) + 8008076: f040 818a bne.w 800838e + 800807a: 6891 ldr r1, [r2, #8] + 800807c: f023 4070 bic.w r0, r3, #4026531840 ; 0xf0000000 + 8008080: f421 11f8 bic.w r1, r1, #2031616 ; 0x1f0000 + 8008084: f420 7040 bic.w r0, r0, #768 ; 0x300 + 8008088: 4301 orrs r1, r0 + 800808a: 6091 str r1, [r2, #8] + 800808c: f3c3 030b ubfx r3, r3, #0, #12 + 8008090: 6f11 ldr r1, [r2, #112] ; 0x70 + 8008092: 430b orrs r3, r1 + 8008094: 6713 str r3, [r2, #112] ; 0x70 + } + + /*------------------------------------ TIM configuration --------------------------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_TIM) == (RCC_PERIPHCLK_TIM)) + 8008096: 6823 ldr r3, [r4, #0] + 8008098: 06d9 lsls r1, r3, #27 + 800809a: d50c bpl.n 80080b6 + { + /* Check the parameters */ + assert_param(IS_RCC_TIMPRES(PeriphClkInit->TIMPresSelection)); + + /* Configure Timer Prescaler */ + __HAL_RCC_TIMCLKPRESCALER(PeriphClkInit->TIMPresSelection); + 800809c: 4a74 ldr r2, [pc, #464] ; (8008270 ) + 800809e: f8d2 108c ldr.w r1, [r2, #140] ; 0x8c + 80080a2: f021 7180 bic.w r1, r1, #16777216 ; 0x1000000 + 80080a6: f8c2 108c str.w r1, [r2, #140] ; 0x8c + 80080aa: f8d2 108c ldr.w r1, [r2, #140] ; 0x8c + 80080ae: 6ba0 ldr r0, [r4, #56] ; 0x38 + 80080b0: 4301 orrs r1, r0 + 80080b2: f8c2 108c str.w r1, [r2, #140] ; 0x8c + } + + /*-------------------------------------- I2C1 Configuration -----------------------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2C1) == RCC_PERIPHCLK_I2C1) + 80080b6: 045a lsls r2, r3, #17 + 80080b8: d508 bpl.n 80080cc + { + /* Check the parameters */ + assert_param(IS_RCC_I2C1CLKSOURCE(PeriphClkInit->I2c1ClockSelection)); + + /* Configure the I2C1 clock source */ + __HAL_RCC_I2C1_CONFIG(PeriphClkInit->I2c1ClockSelection); + 80080ba: 496d ldr r1, [pc, #436] ; (8008270 ) + 80080bc: 6e60 ldr r0, [r4, #100] ; 0x64 + 80080be: f8d1 2090 ldr.w r2, [r1, #144] ; 0x90 + 80080c2: f422 3240 bic.w r2, r2, #196608 ; 0x30000 + 80080c6: 4302 orrs r2, r0 + 80080c8: f8c1 2090 str.w r2, [r1, #144] ; 0x90 + } + + /*-------------------------------------- I2C2 Configuration -----------------------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2C2) == RCC_PERIPHCLK_I2C2) + 80080cc: 041f lsls r7, r3, #16 + 80080ce: d508 bpl.n 80080e2 + { + /* Check the parameters */ + assert_param(IS_RCC_I2C2CLKSOURCE(PeriphClkInit->I2c2ClockSelection)); + + /* Configure the I2C2 clock source */ + __HAL_RCC_I2C2_CONFIG(PeriphClkInit->I2c2ClockSelection); + 80080d0: 4967 ldr r1, [pc, #412] ; (8008270 ) + 80080d2: 6ea0 ldr r0, [r4, #104] ; 0x68 + 80080d4: f8d1 2090 ldr.w r2, [r1, #144] ; 0x90 + 80080d8: f422 2240 bic.w r2, r2, #786432 ; 0xc0000 + 80080dc: 4302 orrs r2, r0 + 80080de: f8c1 2090 str.w r2, [r1, #144] ; 0x90 + } + + /*-------------------------------------- I2C3 Configuration -----------------------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2C3) == RCC_PERIPHCLK_I2C3) + 80080e2: 03d8 lsls r0, r3, #15 + 80080e4: d508 bpl.n 80080f8 + { + /* Check the parameters */ + assert_param(IS_RCC_I2C3CLKSOURCE(PeriphClkInit->I2c3ClockSelection)); + + /* Configure the I2C3 clock source */ + __HAL_RCC_I2C3_CONFIG(PeriphClkInit->I2c3ClockSelection); + 80080e6: 4962 ldr r1, [pc, #392] ; (8008270 ) + 80080e8: 6ee0 ldr r0, [r4, #108] ; 0x6c + 80080ea: f8d1 2090 ldr.w r2, [r1, #144] ; 0x90 + 80080ee: f422 1240 bic.w r2, r2, #3145728 ; 0x300000 + 80080f2: 4302 orrs r2, r0 + 80080f4: f8c1 2090 str.w r2, [r1, #144] ; 0x90 + } + + /*-------------------------------------- I2C4 Configuration -----------------------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2C4) == RCC_PERIPHCLK_I2C4) + 80080f8: 0399 lsls r1, r3, #14 + 80080fa: d508 bpl.n 800810e + { + /* Check the parameters */ + assert_param(IS_RCC_I2C4CLKSOURCE(PeriphClkInit->I2c4ClockSelection)); + + /* Configure the I2C4 clock source */ + __HAL_RCC_I2C4_CONFIG(PeriphClkInit->I2c4ClockSelection); + 80080fc: 495c ldr r1, [pc, #368] ; (8008270 ) + 80080fe: 6f20 ldr r0, [r4, #112] ; 0x70 + 8008100: f8d1 2090 ldr.w r2, [r1, #144] ; 0x90 + 8008104: f422 0240 bic.w r2, r2, #12582912 ; 0xc00000 + 8008108: 4302 orrs r2, r0 + 800810a: f8c1 2090 str.w r2, [r1, #144] ; 0x90 + } + + /*-------------------------------------- USART1 Configuration -----------------------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_USART1) == RCC_PERIPHCLK_USART1) + 800810e: 065a lsls r2, r3, #25 + 8008110: d508 bpl.n 8008124 + { + /* Check the parameters */ + assert_param(IS_RCC_USART1CLKSOURCE(PeriphClkInit->Usart1ClockSelection)); + + /* Configure the USART1 clock source */ + __HAL_RCC_USART1_CONFIG(PeriphClkInit->Usart1ClockSelection); + 8008112: 4957 ldr r1, [pc, #348] ; (8008270 ) + 8008114: 6c60 ldr r0, [r4, #68] ; 0x44 + 8008116: f8d1 2090 ldr.w r2, [r1, #144] ; 0x90 + 800811a: f022 0203 bic.w r2, r2, #3 + 800811e: 4302 orrs r2, r0 + 8008120: f8c1 2090 str.w r2, [r1, #144] ; 0x90 + } + + /*-------------------------------------- USART2 Configuration -----------------------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_USART2) == RCC_PERIPHCLK_USART2) + 8008124: 061f lsls r7, r3, #24 + 8008126: d508 bpl.n 800813a + { + /* Check the parameters */ + assert_param(IS_RCC_USART2CLKSOURCE(PeriphClkInit->Usart2ClockSelection)); + + /* Configure the USART2 clock source */ + __HAL_RCC_USART2_CONFIG(PeriphClkInit->Usart2ClockSelection); + 8008128: 4951 ldr r1, [pc, #324] ; (8008270 ) + 800812a: 6ca0 ldr r0, [r4, #72] ; 0x48 + 800812c: f8d1 2090 ldr.w r2, [r1, #144] ; 0x90 + 8008130: f022 020c bic.w r2, r2, #12 + 8008134: 4302 orrs r2, r0 + 8008136: f8c1 2090 str.w r2, [r1, #144] ; 0x90 + } + + /*-------------------------------------- USART3 Configuration -----------------------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_USART3) == RCC_PERIPHCLK_USART3) + 800813a: 05d8 lsls r0, r3, #23 + 800813c: d508 bpl.n 8008150 + { + /* Check the parameters */ + assert_param(IS_RCC_USART3CLKSOURCE(PeriphClkInit->Usart3ClockSelection)); + + /* Configure the USART3 clock source */ + __HAL_RCC_USART3_CONFIG(PeriphClkInit->Usart3ClockSelection); + 800813e: 494c ldr r1, [pc, #304] ; (8008270 ) + 8008140: 6ce0 ldr r0, [r4, #76] ; 0x4c + 8008142: f8d1 2090 ldr.w r2, [r1, #144] ; 0x90 + 8008146: f022 0230 bic.w r2, r2, #48 ; 0x30 + 800814a: 4302 orrs r2, r0 + 800814c: f8c1 2090 str.w r2, [r1, #144] ; 0x90 + } + + /*-------------------------------------- UART4 Configuration -----------------------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_UART4) == RCC_PERIPHCLK_UART4) + 8008150: 0599 lsls r1, r3, #22 + 8008152: d508 bpl.n 8008166 + { + /* Check the parameters */ + assert_param(IS_RCC_UART4CLKSOURCE(PeriphClkInit->Uart4ClockSelection)); + + /* Configure the UART4 clock source */ + __HAL_RCC_UART4_CONFIG(PeriphClkInit->Uart4ClockSelection); + 8008154: 4946 ldr r1, [pc, #280] ; (8008270 ) + 8008156: 6d20 ldr r0, [r4, #80] ; 0x50 + 8008158: f8d1 2090 ldr.w r2, [r1, #144] ; 0x90 + 800815c: f022 02c0 bic.w r2, r2, #192 ; 0xc0 + 8008160: 4302 orrs r2, r0 + 8008162: f8c1 2090 str.w r2, [r1, #144] ; 0x90 + } + + /*-------------------------------------- UART5 Configuration -----------------------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_UART5) == RCC_PERIPHCLK_UART5) + 8008166: 055a lsls r2, r3, #21 + 8008168: d508 bpl.n 800817c + { + /* Check the parameters */ + assert_param(IS_RCC_UART5CLKSOURCE(PeriphClkInit->Uart5ClockSelection)); + + /* Configure the UART5 clock source */ + __HAL_RCC_UART5_CONFIG(PeriphClkInit->Uart5ClockSelection); + 800816a: 4941 ldr r1, [pc, #260] ; (8008270 ) + 800816c: 6d60 ldr r0, [r4, #84] ; 0x54 + 800816e: f8d1 2090 ldr.w r2, [r1, #144] ; 0x90 + 8008172: f422 7240 bic.w r2, r2, #768 ; 0x300 + 8008176: 4302 orrs r2, r0 + 8008178: f8c1 2090 str.w r2, [r1, #144] ; 0x90 + } + + /*-------------------------------------- USART6 Configuration -----------------------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_USART6) == RCC_PERIPHCLK_USART6) + 800817c: 051f lsls r7, r3, #20 + 800817e: d508 bpl.n 8008192 + { + /* Check the parameters */ + assert_param(IS_RCC_USART6CLKSOURCE(PeriphClkInit->Usart6ClockSelection)); + + /* Configure the USART6 clock source */ + __HAL_RCC_USART6_CONFIG(PeriphClkInit->Usart6ClockSelection); + 8008180: 493b ldr r1, [pc, #236] ; (8008270 ) + 8008182: 6da0 ldr r0, [r4, #88] ; 0x58 + 8008184: f8d1 2090 ldr.w r2, [r1, #144] ; 0x90 + 8008188: f422 6240 bic.w r2, r2, #3072 ; 0xc00 + 800818c: 4302 orrs r2, r0 + 800818e: f8c1 2090 str.w r2, [r1, #144] ; 0x90 + } + + /*-------------------------------------- UART7 Configuration -----------------------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_UART7) == RCC_PERIPHCLK_UART7) + 8008192: 04d8 lsls r0, r3, #19 + 8008194: d508 bpl.n 80081a8 + { + /* Check the parameters */ + assert_param(IS_RCC_UART7CLKSOURCE(PeriphClkInit->Uart7ClockSelection)); + + /* Configure the UART7 clock source */ + __HAL_RCC_UART7_CONFIG(PeriphClkInit->Uart7ClockSelection); + 8008196: 4936 ldr r1, [pc, #216] ; (8008270 ) + 8008198: 6de0 ldr r0, [r4, #92] ; 0x5c + 800819a: f8d1 2090 ldr.w r2, [r1, #144] ; 0x90 + 800819e: f422 5240 bic.w r2, r2, #12288 ; 0x3000 + 80081a2: 4302 orrs r2, r0 + 80081a4: f8c1 2090 str.w r2, [r1, #144] ; 0x90 + } + + /*-------------------------------------- UART8 Configuration -----------------------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_UART8) == RCC_PERIPHCLK_UART8) + 80081a8: 0499 lsls r1, r3, #18 + 80081aa: d508 bpl.n 80081be + { + /* Check the parameters */ + assert_param(IS_RCC_UART8CLKSOURCE(PeriphClkInit->Uart8ClockSelection)); + + /* Configure the UART8 clock source */ + __HAL_RCC_UART8_CONFIG(PeriphClkInit->Uart8ClockSelection); + 80081ac: 4930 ldr r1, [pc, #192] ; (8008270 ) + 80081ae: 6e20 ldr r0, [r4, #96] ; 0x60 + 80081b0: f8d1 2090 ldr.w r2, [r1, #144] ; 0x90 + 80081b4: f422 4240 bic.w r2, r2, #49152 ; 0xc000 + 80081b8: 4302 orrs r2, r0 + 80081ba: f8c1 2090 str.w r2, [r1, #144] ; 0x90 + } + + /*--------------------------------------- CEC Configuration -----------------------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_CEC) == RCC_PERIPHCLK_CEC) + 80081be: 025a lsls r2, r3, #9 + 80081c0: d508 bpl.n 80081d4 + { + /* Check the parameters */ + assert_param(IS_RCC_CECCLKSOURCE(PeriphClkInit->CecClockSelection)); + + /* Configure the CEC clock source */ + __HAL_RCC_CEC_CONFIG(PeriphClkInit->CecClockSelection); + 80081c2: 492b ldr r1, [pc, #172] ; (8008270 ) + 80081c4: 6fa0 ldr r0, [r4, #120] ; 0x78 + 80081c6: f8d1 2090 ldr.w r2, [r1, #144] ; 0x90 + 80081ca: f022 6280 bic.w r2, r2, #67108864 ; 0x4000000 + 80081ce: 4302 orrs r2, r0 + 80081d0: f8c1 2090 str.w r2, [r1, #144] ; 0x90 + } + + /*-------------------------------------- CK48 Configuration -----------------------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_CLK48) == RCC_PERIPHCLK_CLK48) + 80081d4: 029f lsls r7, r3, #10 + 80081d6: d50c bpl.n 80081f2 + { + /* Check the parameters */ + assert_param(IS_RCC_CLK48SOURCE(PeriphClkInit->Clk48ClockSelection)); + + /* Configure the CLK48 source */ + __HAL_RCC_CLK48_CONFIG(PeriphClkInit->Clk48ClockSelection); + 80081d8: 4825 ldr r0, [pc, #148] ; (8008270 ) + 80081da: 6fe1 ldr r1, [r4, #124] ; 0x7c + 80081dc: f8d0 2090 ldr.w r2, [r0, #144] ; 0x90 + + /* Enable the PLLSAI when it's used as clock source for CK48 */ + if(PeriphClkInit->Clk48ClockSelection == RCC_CLK48SOURCE_PLLSAIP) + { + pllsaiused = 1; + 80081e0: f1b1 6f00 cmp.w r1, #134217728 ; 0x8000000 + __HAL_RCC_CLK48_CONFIG(PeriphClkInit->Clk48ClockSelection); + 80081e4: f022 6200 bic.w r2, r2, #134217728 ; 0x8000000 + pllsaiused = 1; + 80081e8: bf08 it eq + 80081ea: 2501 moveq r5, #1 + __HAL_RCC_CLK48_CONFIG(PeriphClkInit->Clk48ClockSelection); + 80081ec: 430a orrs r2, r1 + 80081ee: f8c0 2090 str.w r2, [r0, #144] ; 0x90 + + /*-------------------------------------- LTDC Configuration -----------------------------------*/ +#if defined(STM32F746xx) || defined(STM32F756xx) || defined (STM32F767xx) || defined (STM32F769xx) || defined (STM32F777xx) || defined (STM32F779xx) || defined (STM32F750xx) + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_LTDC) == RCC_PERIPHCLK_LTDC) + { + pllsaiused = 1; + 80081f2: f013 0f08 tst.w r3, #8 + 80081f6: bf18 it ne + 80081f8: 2501 movne r5, #1 + } +#endif /* STM32F746xx || STM32F756xx || STM32F767xx || STM32F769xx || STM32F777xx || STM32F779xx || STM32F750xx */ + + /*-------------------------------------- LPTIM1 Configuration -----------------------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_LPTIM1) == RCC_PERIPHCLK_LPTIM1) + 80081fa: 0358 lsls r0, r3, #13 + 80081fc: d508 bpl.n 8008210 + { + /* Check the parameters */ + assert_param(IS_RCC_LPTIM1CLK(PeriphClkInit->Lptim1ClockSelection)); + + /* Configure the LTPIM1 clock source */ + __HAL_RCC_LPTIM1_CONFIG(PeriphClkInit->Lptim1ClockSelection); + 80081fe: 491c ldr r1, [pc, #112] ; (8008270 ) + 8008200: 6f60 ldr r0, [r4, #116] ; 0x74 + 8008202: f8d1 2090 ldr.w r2, [r1, #144] ; 0x90 + 8008206: f022 7240 bic.w r2, r2, #50331648 ; 0x3000000 + 800820a: 4302 orrs r2, r0 + 800820c: f8c1 2090 str.w r2, [r1, #144] ; 0x90 + } + + /*------------------------------------- SDMMC1 Configuration ------------------------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SDMMC1) == RCC_PERIPHCLK_SDMMC1) + 8008210: 0219 lsls r1, r3, #8 + 8008212: d509 bpl.n 8008228 + { + /* Check the parameters */ + assert_param(IS_RCC_SDMMC1CLKSOURCE(PeriphClkInit->Sdmmc1ClockSelection)); + + /* Configure the SDMMC1 clock source */ + __HAL_RCC_SDMMC1_CONFIG(PeriphClkInit->Sdmmc1ClockSelection); + 8008214: 4916 ldr r1, [pc, #88] ; (8008270 ) + 8008216: f8d4 0080 ldr.w r0, [r4, #128] ; 0x80 + 800821a: f8d1 2090 ldr.w r2, [r1, #144] ; 0x90 + 800821e: f022 5280 bic.w r2, r2, #268435456 ; 0x10000000 + 8008222: 4302 orrs r2, r0 + 8008224: f8c1 2090 str.w r2, [r1, #144] ; 0x90 + } +#endif /* STM32F767xx || STM32F769xx || STM32F777xx || STM32F779xx */ + + /*-------------------------------------- PLLI2S Configuration ---------------------------------*/ + /* PLLI2S is configured when a peripheral will use it as source clock : SAI1, SAI2, I2S or SPDIF-RX */ + if((plli2sused == 1) || ((PeriphClkInit->PeriphClockSelection & RCC_PERIPHCLK_PLLI2S) == RCC_PERIPHCLK_PLLI2S)) + 8008228: 2e01 cmp r6, #1 + 800822a: f000 80b4 beq.w 8008396 + 800822e: 019a lsls r2, r3, #6 + 8008230: f100 80b1 bmi.w 8008396 + } + } + + /*-------------------------------------- PLLSAI Configuration ---------------------------------*/ + /* PLLSAI is configured when a peripheral will use it as source clock : SAI1, SAI2, LTDC or CK48 */ + if(pllsaiused == 1) + 8008234: 2d01 cmp r5, #1 + 8008236: d176 bne.n 8008326 + { + /* Disable PLLSAI Clock */ + __HAL_RCC_PLLSAI_DISABLE(); + 8008238: 4d0d ldr r5, [pc, #52] ; (8008270 ) + 800823a: 682b ldr r3, [r5, #0] + 800823c: f023 5380 bic.w r3, r3, #268435456 ; 0x10000000 + 8008240: 602b str r3, [r5, #0] + + /* Get Start Tick*/ + tickstart = HAL_GetTick(); + 8008242: f7fd f9f5 bl 8005630 + 8008246: 4606 mov r6, r0 + + /* Wait till PLLSAI is disabled */ + while(__HAL_RCC_PLLSAI_GET_FLAG() != RESET) + 8008248: 682b ldr r3, [r5, #0] + 800824a: 009f lsls r7, r3, #2 + 800824c: f100 8127 bmi.w 800849e + + /* Check the PLLSAI division factors */ + assert_param(IS_RCC_PLLSAIN_VALUE(PeriphClkInit->PLLSAI.PLLSAIN)); + + /*----------------- In Case of PLLSAI is selected as source clock for SAI -------------------*/ + if(((((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAI1) == RCC_PERIPHCLK_SAI1) && (PeriphClkInit->Sai1ClockSelection == RCC_SAI1CLKSOURCE_PLLSAI)) ||\ + 8008250: 6821 ldr r1, [r4, #0] + 8008252: 030e lsls r6, r1, #12 + 8008254: d501 bpl.n 800825a + 8008256: 6be3 ldr r3, [r4, #60] ; 0x3c + 8008258: b11b cbz r3, 8008262 + 800825a: 02cd lsls r5, r1, #11 + 800825c: d523 bpl.n 80082a6 + ((((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAI2) == RCC_PERIPHCLK_SAI2) && (PeriphClkInit->Sai2ClockSelection == RCC_SAI2CLKSOURCE_PLLSAI))) + 800825e: 6c23 ldr r3, [r4, #64] ; 0x40 + 8008260: bb0b cbnz r3, 80082a6 + assert_param(IS_RCC_PLLSAIQ_VALUE(PeriphClkInit->PLLSAI.PLLSAIQ)); + /* check for PLLSAI/DIVQ Parameter */ + assert_param(IS_RCC_PLLSAI_DIVQ_VALUE(PeriphClkInit->PLLSAIDivQ)); + + /* Read PLLSAIP value from PLLSAICFGR register (this value is not needed for SAI configuration) */ + tmpreg0 = ((RCC->PLLSAICFGR & RCC_PLLSAICFGR_PLLSAIP) >> RCC_PLLSAICFGR_PLLSAIP_Pos); + 8008262: 4a03 ldr r2, [pc, #12] ; (8008270 ) + 8008264: f8d2 3088 ldr.w r3, [r2, #136] ; 0x88 + tmpreg1 = ((RCC->PLLSAICFGR & RCC_PLLI2SCFGR_PLLI2SR) >> RCC_PLLSAICFGR_PLLSAIR_Pos); + 8008268: f8d2 0088 ldr.w r0, [r2, #136] ; 0x88 + 800826c: e004 b.n 8008278 + 800826e: bf00 nop + 8008270: 40023800 .word 0x40023800 + 8008274: 40007000 .word 0x40007000 + /* PLLSAI_VCO Input = PLL_SOURCE/PLLM */ + /* PLLSAI_VCO Output = PLLSAI_VCO Input * PLLSAIN */ + /* SAI_CLK(first level) = PLLSAI_VCO Output/PLLSAIQ */ + __HAL_RCC_PLLSAI_CONFIG(PeriphClkInit->PLLSAI.PLLSAIN , tmpreg0, PeriphClkInit->PLLSAI.PLLSAIQ, tmpreg1); + 8008278: f403 3340 and.w r3, r3, #196608 ; 0x30000 + 800827c: f000 40e0 and.w r0, r0, #1879048192 ; 0x70000000 + 8008280: 4303 orrs r3, r0 + 8008282: 6960 ldr r0, [r4, #20] + 8008284: ea43 1380 orr.w r3, r3, r0, lsl #6 + 8008288: 69a0 ldr r0, [r4, #24] + 800828a: ea43 6300 orr.w r3, r3, r0, lsl #24 + 800828e: f8c2 3088 str.w r3, [r2, #136] ; 0x88 + + /* SAI_CLK_x = SAI_CLK(first level)/PLLSAIDIVQ */ + __HAL_RCC_PLLSAI_PLLSAICLKDIVQ_CONFIG(PeriphClkInit->PLLSAIDivQ); + 8008292: f8d2 308c ldr.w r3, [r2, #140] ; 0x8c + 8008296: 6aa0 ldr r0, [r4, #40] ; 0x28 + 8008298: f423 53f8 bic.w r3, r3, #7936 ; 0x1f00 + 800829c: 3801 subs r0, #1 + 800829e: ea43 2300 orr.w r3, r3, r0, lsl #8 + 80082a2: f8c2 308c str.w r3, [r2, #140] ; 0x8c + } + + /*----------------- In Case of PLLSAI is selected as source clock for CLK48 -------------------*/ + /* In Case of PLLI2S is selected as source clock for CK48 */ + if((((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_CLK48) == RCC_PERIPHCLK_CLK48) && (PeriphClkInit->Clk48ClockSelection == RCC_CLK48SOURCE_PLLSAIP)) + 80082a6: 0288 lsls r0, r1, #10 + 80082a8: d515 bpl.n 80082d6 + 80082aa: 6fe3 ldr r3, [r4, #124] ; 0x7c + 80082ac: f1b3 6f00 cmp.w r3, #134217728 ; 0x8000000 + 80082b0: d111 bne.n 80082d6 + { + /* check for Parameters */ + assert_param(IS_RCC_PLLSAIP_VALUE(PeriphClkInit->PLLSAI.PLLSAIP)); + /* Read PLLSAIQ and PLLSAIR value from PLLSAICFGR register (this value is not needed for CK48 configuration) */ + tmpreg0 = ((RCC->PLLSAICFGR & RCC_PLLSAICFGR_PLLSAIQ) >> RCC_PLLSAICFGR_PLLSAIQ_Pos); + 80082b2: 4a82 ldr r2, [pc, #520] ; (80084bc ) + 80082b4: f8d2 3088 ldr.w r3, [r2, #136] ; 0x88 + tmpreg1 = ((RCC->PLLSAICFGR & RCC_PLLSAICFGR_PLLSAIR) >> RCC_PLLSAICFGR_PLLSAIR_Pos); + 80082b8: f8d2 0088 ldr.w r0, [r2, #136] ; 0x88 + + /* Configure the PLLSAI division factors */ + /* PLLSAI_VCO = f(VCO clock) = f(PLLSAI clock input) x (PLLI2SN/PLLM) */ + /* 48CLK = f(PLLSAI clock output) = f(VCO clock) / PLLSAIP */ + __HAL_RCC_PLLSAI_CONFIG(PeriphClkInit->PLLSAI.PLLSAIN , PeriphClkInit->PLLSAI.PLLSAIP, tmpreg0, tmpreg1); + 80082bc: f003 6370 and.w r3, r3, #251658240 ; 0xf000000 + 80082c0: f000 40e0 and.w r0, r0, #1879048192 ; 0x70000000 + 80082c4: 4303 orrs r3, r0 + 80082c6: 6960 ldr r0, [r4, #20] + 80082c8: ea43 1380 orr.w r3, r3, r0, lsl #6 + 80082cc: 6a20 ldr r0, [r4, #32] + 80082ce: ea43 4300 orr.w r3, r3, r0, lsl #16 + 80082d2: f8c2 3088 str.w r3, [r2, #136] ; 0x88 + } + +#if defined(STM32F746xx) || defined(STM32F756xx) || defined (STM32F767xx) || defined (STM32F769xx) || defined (STM32F777xx) || defined (STM32F779xx) || defined (STM32F750xx) + /*---------------------------- LTDC configuration -------------------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_LTDC) == (RCC_PERIPHCLK_LTDC)) + 80082d6: 070a lsls r2, r1, #28 + 80082d8: d519 bpl.n 800830e + { + assert_param(IS_RCC_PLLSAIR_VALUE(PeriphClkInit->PLLSAI.PLLSAIR)); + assert_param(IS_RCC_PLLSAI_DIVR_VALUE(PeriphClkInit->PLLSAIDivR)); + + /* Read PLLSAIP and PLLSAIQ value from PLLSAICFGR register (these value are not needed for LTDC configuration) */ + tmpreg0 = ((RCC->PLLSAICFGR & RCC_PLLSAICFGR_PLLSAIQ) >> RCC_PLLSAICFGR_PLLSAIQ_Pos); + 80082da: 4a78 ldr r2, [pc, #480] ; (80084bc ) + 80082dc: f8d2 1088 ldr.w r1, [r2, #136] ; 0x88 + tmpreg1 = ((RCC->PLLSAICFGR & RCC_PLLSAICFGR_PLLSAIP) >> RCC_PLLSAICFGR_PLLSAIP_Pos); + 80082e0: f8d2 3088 ldr.w r3, [r2, #136] ; 0x88 + + /* PLLSAI_VCO Input = PLL_SOURCE/PLLM */ + /* PLLSAI_VCO Output = PLLSAI_VCO Input * PLLSAIN */ + /* LTDC_CLK(first level) = PLLSAI_VCO Output/PLLSAIR */ + __HAL_RCC_PLLSAI_CONFIG(PeriphClkInit->PLLSAI.PLLSAIN , tmpreg1, tmpreg0, PeriphClkInit->PLLSAI.PLLSAIR); + 80082e4: f001 6170 and.w r1, r1, #251658240 ; 0xf000000 + 80082e8: f403 3340 and.w r3, r3, #196608 ; 0x30000 + 80082ec: 430b orrs r3, r1 + 80082ee: 6961 ldr r1, [r4, #20] + 80082f0: ea43 1381 orr.w r3, r3, r1, lsl #6 + 80082f4: 69e1 ldr r1, [r4, #28] + 80082f6: ea43 7301 orr.w r3, r3, r1, lsl #28 + 80082fa: f8c2 3088 str.w r3, [r2, #136] ; 0x88 + + /* LTDC_CLK = LTDC_CLK(first level)/PLLSAIDIVR */ + __HAL_RCC_PLLSAI_PLLSAICLKDIVR_CONFIG(PeriphClkInit->PLLSAIDivR); + 80082fe: f8d2 308c ldr.w r3, [r2, #140] ; 0x8c + 8008302: 6ae1 ldr r1, [r4, #44] ; 0x2c + 8008304: f423 3340 bic.w r3, r3, #196608 ; 0x30000 + 8008308: 430b orrs r3, r1 + 800830a: f8c2 308c str.w r3, [r2, #140] ; 0x8c + } +#endif /* STM32F746xx || STM32F756xx || STM32F767xx || STM32F769xx || STM32F777xx || STM32F779xx || STM32F750xx */ + + /* Enable PLLSAI Clock */ + __HAL_RCC_PLLSAI_ENABLE(); + 800830e: 4c6b ldr r4, [pc, #428] ; (80084bc ) + 8008310: 6823 ldr r3, [r4, #0] + 8008312: f043 5380 orr.w r3, r3, #268435456 ; 0x10000000 + 8008316: 6023 str r3, [r4, #0] + + /* Get Start Tick*/ + tickstart = HAL_GetTick(); + 8008318: f7fd f98a bl 8005630 + 800831c: 4605 mov r5, r0 + + /* Wait till PLLSAI is ready */ + while(__HAL_RCC_PLLSAI_GET_FLAG() == RESET) + 800831e: 6823 ldr r3, [r4, #0] + 8008320: 009b lsls r3, r3, #2 + 8008322: f140 80c3 bpl.w 80084ac + /* return in case of Timeout detected */ + return HAL_TIMEOUT; + } + } + } + return HAL_OK; + 8008326: 2000 movs r0, #0 + 8008328: e009 b.n 800833e + plli2sused = 1; + 800832a: 2601 movs r6, #1 + 800832c: e67a b.n 8008024 + if((HAL_GetTick() - tickstart) > RCC_DBP_TIMEOUT_VALUE) + 800832e: f7fd f97f bl 8005630 + 8008332: eba0 0008 sub.w r0, r0, r8 + 8008336: 2864 cmp r0, #100 ; 0x64 + 8008338: f67f ae8c bls.w 8008054 + return HAL_TIMEOUT; + 800833c: 2003 movs r0, #3 +} + 800833e: b003 add sp, #12 + 8008340: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} + if((tmpreg0 != 0x00000000U) && (tmpreg0 != (PeriphClkInit->RTCClockSelection & RCC_BDCR_RTCSEL))) + 8008344: f402 7240 and.w r2, r2, #768 ; 0x300 + 8008348: 429a cmp r2, r3 + 800834a: f43f ae8e beq.w 800806a + tmpreg0 = (RCC->BDCR & ~(RCC_BDCR_RTCSEL)); + 800834e: 6f3b ldr r3, [r7, #112] ; 0x70 + __HAL_RCC_BACKUPRESET_FORCE(); + 8008350: 6f3a ldr r2, [r7, #112] ; 0x70 + tmpreg0 = (RCC->BDCR & ~(RCC_BDCR_RTCSEL)); + 8008352: f423 7340 bic.w r3, r3, #768 ; 0x300 + __HAL_RCC_BACKUPRESET_FORCE(); + 8008356: f442 3280 orr.w r2, r2, #65536 ; 0x10000 + 800835a: 673a str r2, [r7, #112] ; 0x70 + __HAL_RCC_BACKUPRESET_RELEASE(); + 800835c: 6f3a ldr r2, [r7, #112] ; 0x70 + 800835e: f422 3280 bic.w r2, r2, #65536 ; 0x10000 + 8008362: 673a str r2, [r7, #112] ; 0x70 + RCC->BDCR = tmpreg0; + 8008364: 673b str r3, [r7, #112] ; 0x70 + if (HAL_IS_BIT_SET(RCC->BDCR, RCC_BDCR_LSEON)) + 8008366: 6f3b ldr r3, [r7, #112] ; 0x70 + 8008368: 07db lsls r3, r3, #31 + 800836a: f57f ae7e bpl.w 800806a + tickstart = HAL_GetTick(); + 800836e: f7fd f95f bl 8005630 + if((HAL_GetTick() - tickstart ) > RCC_LSE_TIMEOUT_VALUE) + 8008372: f241 3988 movw r9, #5000 ; 0x1388 + tickstart = HAL_GetTick(); + 8008376: 4680 mov r8, r0 + while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET) + 8008378: 6f3b ldr r3, [r7, #112] ; 0x70 + 800837a: 0798 lsls r0, r3, #30 + 800837c: f53f ae75 bmi.w 800806a + if((HAL_GetTick() - tickstart ) > RCC_LSE_TIMEOUT_VALUE) + 8008380: f7fd f956 bl 8005630 + 8008384: eba0 0008 sub.w r0, r0, r8 + 8008388: 4548 cmp r0, r9 + 800838a: d9f5 bls.n 8008378 + 800838c: e7d6 b.n 800833c + __HAL_RCC_RTC_CONFIG(PeriphClkInit->RTCClockSelection); + 800838e: 6891 ldr r1, [r2, #8] + 8008390: f421 11f8 bic.w r1, r1, #2031616 ; 0x1f0000 + 8008394: e679 b.n 800808a + __HAL_RCC_PLLI2S_DISABLE(); + 8008396: 4e49 ldr r6, [pc, #292] ; (80084bc ) + 8008398: 6833 ldr r3, [r6, #0] + 800839a: f023 6380 bic.w r3, r3, #67108864 ; 0x4000000 + 800839e: 6033 str r3, [r6, #0] + tickstart = HAL_GetTick(); + 80083a0: f7fd f946 bl 8005630 + 80083a4: 4607 mov r7, r0 + while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLI2SRDY) != RESET) + 80083a6: 6833 ldr r3, [r6, #0] + 80083a8: 011b lsls r3, r3, #4 + 80083aa: d472 bmi.n 8008492 + if(((((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2S) == RCC_PERIPHCLK_I2S) && (PeriphClkInit->I2sClockSelection == RCC_I2SCLKSOURCE_PLLI2S))) + 80083ac: 6822 ldr r2, [r4, #0] + 80083ae: 07d7 lsls r7, r2, #31 + 80083b0: d512 bpl.n 80083d8 + 80083b2: 6b63 ldr r3, [r4, #52] ; 0x34 + 80083b4: b983 cbnz r3, 80083d8 + tmpreg0 = ((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SP) >> RCC_PLLI2SCFGR_PLLI2SP_Pos); + 80083b6: f8d6 3084 ldr.w r3, [r6, #132] ; 0x84 + tmpreg1 = ((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SQ) >> RCC_PLLI2SCFGR_PLLI2SQ_Pos); + 80083ba: f8d6 1084 ldr.w r1, [r6, #132] ; 0x84 + __HAL_RCC_PLLI2S_CONFIG(PeriphClkInit->PLLI2S.PLLI2SN , tmpreg0, tmpreg1, PeriphClkInit->PLLI2S.PLLI2SR); + 80083be: f403 3340 and.w r3, r3, #196608 ; 0x30000 + 80083c2: f001 6170 and.w r1, r1, #251658240 ; 0xf000000 + 80083c6: 430b orrs r3, r1 + 80083c8: 6861 ldr r1, [r4, #4] + 80083ca: ea43 1381 orr.w r3, r3, r1, lsl #6 + 80083ce: 68a1 ldr r1, [r4, #8] + 80083d0: ea43 7301 orr.w r3, r3, r1, lsl #28 + 80083d4: f8c6 3084 str.w r3, [r6, #132] ; 0x84 + if(((((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAI1) == RCC_PERIPHCLK_SAI1) && (PeriphClkInit->Sai1ClockSelection == RCC_SAI1CLKSOURCE_PLLI2S)) || + 80083d8: 0316 lsls r6, r2, #12 + 80083da: d503 bpl.n 80083e4 + 80083dc: 6be3 ldr r3, [r4, #60] ; 0x3c + 80083de: f5b3 1f80 cmp.w r3, #1048576 ; 0x100000 + 80083e2: d005 beq.n 80083f0 + 80083e4: 02d0 lsls r0, r2, #11 + 80083e6: d51e bpl.n 8008426 + ((((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAI2) == RCC_PERIPHCLK_SAI2) && (PeriphClkInit->Sai2ClockSelection == RCC_SAI2CLKSOURCE_PLLI2S))) + 80083e8: 6c23 ldr r3, [r4, #64] ; 0x40 + 80083ea: f5b3 0f80 cmp.w r3, #4194304 ; 0x400000 + 80083ee: d11a bne.n 8008426 + tmpreg0 = ((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SP) >> RCC_PLLI2SCFGR_PLLI2SP_Pos); + 80083f0: 4932 ldr r1, [pc, #200] ; (80084bc ) + 80083f2: f8d1 3084 ldr.w r3, [r1, #132] ; 0x84 + tmpreg1 = ((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SR) >> RCC_PLLI2SCFGR_PLLI2SR_Pos); + 80083f6: f8d1 0084 ldr.w r0, [r1, #132] ; 0x84 + __HAL_RCC_PLLI2S_CONFIG(PeriphClkInit->PLLI2S.PLLI2SN, tmpreg0, PeriphClkInit->PLLI2S.PLLI2SQ, tmpreg1); + 80083fa: f403 3340 and.w r3, r3, #196608 ; 0x30000 + 80083fe: f000 40e0 and.w r0, r0, #1879048192 ; 0x70000000 + 8008402: 4303 orrs r3, r0 + 8008404: 6860 ldr r0, [r4, #4] + 8008406: ea43 1380 orr.w r3, r3, r0, lsl #6 + 800840a: 68e0 ldr r0, [r4, #12] + 800840c: ea43 6300 orr.w r3, r3, r0, lsl #24 + 8008410: f8c1 3084 str.w r3, [r1, #132] ; 0x84 + __HAL_RCC_PLLI2S_PLLSAICLKDIVQ_CONFIG(PeriphClkInit->PLLI2SDivQ); + 8008414: f8d1 008c ldr.w r0, [r1, #140] ; 0x8c + 8008418: 6a63 ldr r3, [r4, #36] ; 0x24 + 800841a: f020 001f bic.w r0, r0, #31 + 800841e: 3b01 subs r3, #1 + 8008420: 4303 orrs r3, r0 + 8008422: f8c1 308c str.w r3, [r1, #140] ; 0x8c + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SPDIFRX) == RCC_PERIPHCLK_SPDIFRX) + 8008426: 01d1 lsls r1, r2, #7 + 8008428: d511 bpl.n 800844e + tmpreg0 = ((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SQ) >> RCC_PLLI2SCFGR_PLLI2SQ_Pos); + 800842a: 4924 ldr r1, [pc, #144] ; (80084bc ) + 800842c: f8d1 3084 ldr.w r3, [r1, #132] ; 0x84 + tmpreg1 = ((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SR) >> RCC_PLLI2SCFGR_PLLI2SR_Pos); + 8008430: f8d1 0084 ldr.w r0, [r1, #132] ; 0x84 + __HAL_RCC_PLLI2S_CONFIG(PeriphClkInit->PLLI2S.PLLI2SN , PeriphClkInit->PLLI2S.PLLI2SP, tmpreg0, tmpreg1); + 8008434: f003 6370 and.w r3, r3, #251658240 ; 0xf000000 + 8008438: f000 40e0 and.w r0, r0, #1879048192 ; 0x70000000 + 800843c: 4303 orrs r3, r0 + 800843e: 6860 ldr r0, [r4, #4] + 8008440: ea43 1380 orr.w r3, r3, r0, lsl #6 + 8008444: 6920 ldr r0, [r4, #16] + 8008446: ea43 4300 orr.w r3, r3, r0, lsl #16 + 800844a: f8c1 3084 str.w r3, [r1, #132] ; 0x84 + if((PeriphClkInit->PeriphClockSelection & RCC_PERIPHCLK_PLLI2S) == RCC_PERIPHCLK_PLLI2S) + 800844e: 0192 lsls r2, r2, #6 + 8008450: d50d bpl.n 800846e + __HAL_RCC_PLLI2S_CONFIG(PeriphClkInit->PLLI2S.PLLI2SN , PeriphClkInit->PLLI2S.PLLI2SP, PeriphClkInit->PLLI2S.PLLI2SQ, PeriphClkInit->PLLI2S.PLLI2SR); + 8008452: 6923 ldr r3, [r4, #16] + 8008454: 6862 ldr r2, [r4, #4] + 8008456: 041b lsls r3, r3, #16 + 8008458: ea43 1382 orr.w r3, r3, r2, lsl #6 + 800845c: 68e2 ldr r2, [r4, #12] + 800845e: ea43 6302 orr.w r3, r3, r2, lsl #24 + 8008462: 68a2 ldr r2, [r4, #8] + 8008464: ea43 7302 orr.w r3, r3, r2, lsl #28 + 8008468: 4a14 ldr r2, [pc, #80] ; (80084bc ) + 800846a: f8c2 3084 str.w r3, [r2, #132] ; 0x84 + __HAL_RCC_PLLI2S_ENABLE(); + 800846e: 4e13 ldr r6, [pc, #76] ; (80084bc ) + 8008470: 6833 ldr r3, [r6, #0] + 8008472: f043 6380 orr.w r3, r3, #67108864 ; 0x4000000 + 8008476: 6033 str r3, [r6, #0] + tickstart = HAL_GetTick(); + 8008478: f7fd f8da bl 8005630 + 800847c: 4607 mov r7, r0 + while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLI2SRDY) == RESET) + 800847e: 6833 ldr r3, [r6, #0] + 8008480: 011b lsls r3, r3, #4 + 8008482: f53f aed7 bmi.w 8008234 + if((HAL_GetTick() - tickstart) > PLLI2S_TIMEOUT_VALUE) + 8008486: f7fd f8d3 bl 8005630 + 800848a: 1bc0 subs r0, r0, r7 + 800848c: 2864 cmp r0, #100 ; 0x64 + 800848e: d9f6 bls.n 800847e + 8008490: e754 b.n 800833c + if((HAL_GetTick() - tickstart) > PLLI2S_TIMEOUT_VALUE) + 8008492: f7fd f8cd bl 8005630 + 8008496: 1bc0 subs r0, r0, r7 + 8008498: 2864 cmp r0, #100 ; 0x64 + 800849a: d984 bls.n 80083a6 + 800849c: e74e b.n 800833c + if((HAL_GetTick() - tickstart) > PLLSAI_TIMEOUT_VALUE) + 800849e: f7fd f8c7 bl 8005630 + 80084a2: 1b80 subs r0, r0, r6 + 80084a4: 2864 cmp r0, #100 ; 0x64 + 80084a6: f67f aecf bls.w 8008248 + 80084aa: e747 b.n 800833c + if((HAL_GetTick() - tickstart) > PLLSAI_TIMEOUT_VALUE) + 80084ac: f7fd f8c0 bl 8005630 + 80084b0: 1b40 subs r0, r0, r5 + 80084b2: 2864 cmp r0, #100 ; 0x64 + 80084b4: f67f af33 bls.w 800831e + 80084b8: e740 b.n 800833c + 80084ba: bf00 nop + 80084bc: 40023800 .word 0x40023800 + +080084c0 : + * the configuration information for SDRAM module. + * @param Timing Pointer to SDRAM control timing structure + * @retval HAL status + */ +HAL_StatusTypeDef HAL_SDRAM_Init(SDRAM_HandleTypeDef *hsdram, FMC_SDRAM_TimingTypeDef *Timing) +{ + 80084c0: b538 push {r3, r4, r5, lr} + 80084c2: 460d mov r5, r1 + /* Check the SDRAM handle parameter */ + if (hsdram == NULL) + 80084c4: 4604 mov r4, r0 + 80084c6: b1c8 cbz r0, 80084fc + { + return HAL_ERROR; + } + + if (hsdram->State == HAL_SDRAM_STATE_RESET) + 80084c8: f890 302c ldrb.w r3, [r0, #44] ; 0x2c + 80084cc: f003 02ff and.w r2, r3, #255 ; 0xff + 80084d0: b91b cbnz r3, 80084da + { + /* Allocate lock resource and initialize it */ + hsdram->Lock = HAL_UNLOCKED; + 80084d2: f880 202d strb.w r2, [r0, #45] ; 0x2d + + /* Init the low level hardware */ + hsdram->MspInitCallback(hsdram); +#else + /* Initialize the low level hardware (MSP) */ + HAL_SDRAM_MspInit(hsdram); + 80084d6: f7f9 fba7 bl 8001c28 +#endif /* USE_HAL_SDRAM_REGISTER_CALLBACKS */ + } + + /* Initialize the SDRAM controller state */ + hsdram->State = HAL_SDRAM_STATE_BUSY; + 80084da: 2302 movs r3, #2 + + /* Initialize SDRAM control Interface */ + (void)FMC_SDRAM_Init(hsdram->Instance, &(hsdram->Init)); + 80084dc: 1d21 adds r1, r4, #4 + 80084de: 6820 ldr r0, [r4, #0] + hsdram->State = HAL_SDRAM_STATE_BUSY; + 80084e0: f884 302c strb.w r3, [r4, #44] ; 0x2c + (void)FMC_SDRAM_Init(hsdram->Instance, &(hsdram->Init)); + 80084e4: f000 fd69 bl 8008fba + + /* Initialize SDRAM timing Interface */ + (void)FMC_SDRAM_Timing_Init(hsdram->Instance, Timing, hsdram->Init.SDBank); + 80084e8: 6862 ldr r2, [r4, #4] + 80084ea: 4629 mov r1, r5 + 80084ec: 6820 ldr r0, [r4, #0] + 80084ee: f000 fd9c bl 800902a + /* Update the SDRAM controller state */ + hsdram->State = HAL_SDRAM_STATE_READY; + 80084f2: 2301 movs r3, #1 + + return HAL_OK; + 80084f4: 2000 movs r0, #0 + hsdram->State = HAL_SDRAM_STATE_READY; + 80084f6: f884 302c strb.w r3, [r4, #44] ; 0x2c +} + 80084fa: bd38 pop {r3, r4, r5, pc} + return HAL_ERROR; + 80084fc: 2001 movs r0, #1 + 80084fe: e7fc b.n 80084fa + +08008500 : + * @param Timeout Timeout duration + * @retval HAL status + */ +HAL_StatusTypeDef HAL_SDRAM_SendCommand(SDRAM_HandleTypeDef *hsdram, FMC_SDRAM_CommandTypeDef *Command, + uint32_t Timeout) +{ + 8008500: b570 push {r4, r5, r6, lr} + HAL_SDRAM_StateTypeDef state = hsdram->State; + 8008502: f890 302c ldrb.w r3, [r0, #44] ; 0x2c +{ + 8008506: 4605 mov r5, r0 + 8008508: 460e mov r6, r1 + + /* Check the SDRAM controller state */ + if (state == HAL_SDRAM_STATE_BUSY) + 800850a: 2b02 cmp r3, #2 + HAL_SDRAM_StateTypeDef state = hsdram->State; + 800850c: b2d8 uxtb r0, r3 + if (state == HAL_SDRAM_STATE_BUSY) + 800850e: d010 beq.n 8008532 + { + return HAL_BUSY; + } + else if ((state == HAL_SDRAM_STATE_READY) || (state == HAL_SDRAM_STATE_PRECHARGED)) + 8008510: f000 04fb and.w r4, r0, #251 ; 0xfb + 8008514: 2c01 cmp r4, #1 + 8008516: d110 bne.n 800853a + { + /* Update the SDRAM state */ + hsdram->State = HAL_SDRAM_STATE_BUSY; + 8008518: 2302 movs r3, #2 + + /* Send SDRAM command */ + (void)FMC_SDRAM_SendCommand(hsdram->Instance, Command, Timeout); + 800851a: 6828 ldr r0, [r5, #0] + hsdram->State = HAL_SDRAM_STATE_BUSY; + 800851c: f885 302c strb.w r3, [r5, #44] ; 0x2c + (void)FMC_SDRAM_SendCommand(hsdram->Instance, Command, Timeout); + 8008520: f000 fdb9 bl 8009096 + + /* Update the SDRAM controller state state */ + if (Command->CommandMode == FMC_SDRAM_CMD_PALL) + 8008524: 6833 ldr r3, [r6, #0] + 8008526: 2b02 cmp r3, #2 + 8008528: d104 bne.n 8008534 + { + hsdram->State = HAL_SDRAM_STATE_PRECHARGED; + 800852a: 2305 movs r3, #5 + 800852c: f885 302c strb.w r3, [r5, #44] ; 0x2c + else + { + return HAL_ERROR; + } + + return HAL_OK; + 8008530: 2000 movs r0, #0 +} + 8008532: bd70 pop {r4, r5, r6, pc} + hsdram->State = HAL_SDRAM_STATE_READY; + 8008534: f885 402c strb.w r4, [r5, #44] ; 0x2c + 8008538: e7fa b.n 8008530 + return HAL_ERROR; + 800853a: 2001 movs r0, #1 + 800853c: e7f9 b.n 8008532 + +0800853e : + * the configuration information for SDRAM module. + * @param RefreshRate The SDRAM refresh rate value + * @retval HAL status + */ +HAL_StatusTypeDef HAL_SDRAM_ProgramRefreshRate(SDRAM_HandleTypeDef *hsdram, uint32_t RefreshRate) +{ + 800853e: b538 push {r3, r4, r5, lr} + /* Check the SDRAM controller state */ + if (hsdram->State == HAL_SDRAM_STATE_BUSY) + 8008540: f890 302c ldrb.w r3, [r0, #44] ; 0x2c +{ + 8008544: 4604 mov r4, r0 + if (hsdram->State == HAL_SDRAM_STATE_BUSY) + 8008546: 2b02 cmp r3, #2 + 8008548: b2d8 uxtb r0, r3 + 800854a: d00d beq.n 8008568 + { + return HAL_BUSY; + } + else if (hsdram->State == HAL_SDRAM_STATE_READY) + 800854c: f894 302c ldrb.w r3, [r4, #44] ; 0x2c + 8008550: 2b01 cmp r3, #1 + 8008552: b2dd uxtb r5, r3 + 8008554: d109 bne.n 800856a + { + /* Update the SDRAM state */ + hsdram->State = HAL_SDRAM_STATE_BUSY; + 8008556: 2302 movs r3, #2 + + /* Program the refresh rate */ + (void)FMC_SDRAM_ProgramRefreshRate(hsdram->Instance, RefreshRate); + 8008558: 6820 ldr r0, [r4, #0] + hsdram->State = HAL_SDRAM_STATE_BUSY; + 800855a: f884 302c strb.w r3, [r4, #44] ; 0x2c + (void)FMC_SDRAM_ProgramRefreshRate(hsdram->Instance, RefreshRate); + 800855e: f000 fdac bl 80090ba + else + { + return HAL_ERROR; + } + + return HAL_OK; + 8008562: 2000 movs r0, #0 + hsdram->State = HAL_SDRAM_STATE_READY; + 8008564: f884 502c strb.w r5, [r4, #44] ; 0x2c +} + 8008568: bd38 pop {r3, r4, r5, pc} + return HAL_ERROR; + 800856a: 2001 movs r0, #1 + 800856c: e7fc b.n 8008568 + ... + +08008570 : + uint32_t tmpccmrx; + uint32_t tmpccer; + uint32_t tmpcr2; + + /* Disable the Channel 1: Reset the CC1E Bit */ + TIMx->CCER &= ~TIM_CCER_CC1E; + 8008570: 6a03 ldr r3, [r0, #32] + 8008572: f023 0301 bic.w r3, r3, #1 +{ + 8008576: b570 push {r4, r5, r6, lr} + TIMx->CCER &= ~TIM_CCER_CC1E; + 8008578: 6203 str r3, [r0, #32] + + /* Get the TIMx CCER register value */ + tmpccer = TIMx->CCER; + 800857a: 6a03 ldr r3, [r0, #32] + /* Get the TIMx CR2 register value */ + tmpcr2 = TIMx->CR2; + 800857c: 6842 ldr r2, [r0, #4] + + /* Get the TIMx CCMR1 register value */ + tmpccmrx = TIMx->CCMR1; + 800857e: 6984 ldr r4, [r0, #24] + tmpccmrx &= ~TIM_CCMR1_CC1S; + /* Select the Output Compare Mode */ + tmpccmrx |= OC_Config->OCMode; + + /* Reset the Output Polarity level */ + tmpccer &= ~TIM_CCER_CC1P; + 8008580: f023 0302 bic.w r3, r3, #2 + tmpccmrx |= OC_Config->OCMode; + 8008584: 680d ldr r5, [r1, #0] + tmpccmrx &= ~TIM_CCMR1_CC1S; + 8008586: f424 3480 bic.w r4, r4, #65536 ; 0x10000 + 800858a: f024 0473 bic.w r4, r4, #115 ; 0x73 + tmpccmrx |= OC_Config->OCMode; + 800858e: 432c orrs r4, r5 + /* Set the Output Compare Polarity */ + tmpccer |= OC_Config->OCPolarity; + 8008590: 688d ldr r5, [r1, #8] + 8008592: 432b orrs r3, r5 + + if (IS_TIM_CCXN_INSTANCE(TIMx, TIM_CHANNEL_1)) + 8008594: 4d0e ldr r5, [pc, #56] ; (80085d0 ) + 8008596: 42a8 cmp r0, r5 + 8008598: d002 beq.n 80085a0 + 800859a: 4e0e ldr r6, [pc, #56] ; (80085d4 ) + 800859c: 42b0 cmp r0, r6 + 800859e: d111 bne.n 80085c4 + { + /* Check parameters */ + assert_param(IS_TIM_OCN_POLARITY(OC_Config->OCNPolarity)); + + /* Reset the Output N Polarity level */ + tmpccer &= ~TIM_CCER_CC1NP; + 80085a0: f023 0308 bic.w r3, r3, #8 + /* Set the Output N Polarity */ + tmpccer |= OC_Config->OCNPolarity; + 80085a4: 68ce ldr r6, [r1, #12] + /* Reset the Output N State */ + tmpccer &= ~TIM_CCER_CC1NE; + } + + if (IS_TIM_BREAK_INSTANCE(TIMx)) + 80085a6: 42a8 cmp r0, r5 + tmpccer |= OC_Config->OCNPolarity; + 80085a8: ea43 0306 orr.w r3, r3, r6 + tmpccer &= ~TIM_CCER_CC1NE; + 80085ac: f023 0304 bic.w r3, r3, #4 + if (IS_TIM_BREAK_INSTANCE(TIMx)) + 80085b0: d002 beq.n 80085b8 + 80085b2: 4d08 ldr r5, [pc, #32] ; (80085d4 ) + 80085b4: 42a8 cmp r0, r5 + 80085b6: d105 bne.n 80085c4 + assert_param(IS_TIM_OCNIDLE_STATE(OC_Config->OCNIdleState)); + assert_param(IS_TIM_OCIDLE_STATE(OC_Config->OCIdleState)); + + /* Reset the Output Compare and Output Compare N IDLE State */ + tmpcr2 &= ~TIM_CR2_OIS1; + tmpcr2 &= ~TIM_CR2_OIS1N; + 80085b8: f422 7240 bic.w r2, r2, #768 ; 0x300 + /* Set the Output Idle state */ + tmpcr2 |= OC_Config->OCIdleState; + /* Set the Output N Idle state */ + tmpcr2 |= OC_Config->OCNIdleState; + 80085bc: e9d1 5605 ldrd r5, r6, [r1, #20] + 80085c0: 4335 orrs r5, r6 + 80085c2: 432a orrs r2, r5 + } + + /* Write to TIMx CR2 */ + TIMx->CR2 = tmpcr2; + 80085c4: 6042 str r2, [r0, #4] + + /* Write to TIMx CCMR1 */ + TIMx->CCMR1 = tmpccmrx; + + /* Set the Capture Compare Register value */ + TIMx->CCR1 = OC_Config->Pulse; + 80085c6: 684a ldr r2, [r1, #4] + TIMx->CCMR1 = tmpccmrx; + 80085c8: 6184 str r4, [r0, #24] + TIMx->CCR1 = OC_Config->Pulse; + 80085ca: 6342 str r2, [r0, #52] ; 0x34 + + /* Write to TIMx CCER */ + TIMx->CCER = tmpccer; + 80085cc: 6203 str r3, [r0, #32] +} + 80085ce: bd70 pop {r4, r5, r6, pc} + 80085d0: 40010000 .word 0x40010000 + 80085d4: 40010400 .word 0x40010400 + +080085d8 : + uint32_t tmpccmrx; + uint32_t tmpccer; + uint32_t tmpcr2; + + /* Disable the Channel 3: Reset the CC2E Bit */ + TIMx->CCER &= ~TIM_CCER_CC3E; + 80085d8: 6a03 ldr r3, [r0, #32] + 80085da: f423 7380 bic.w r3, r3, #256 ; 0x100 +{ + 80085de: b570 push {r4, r5, r6, lr} + TIMx->CCER &= ~TIM_CCER_CC3E; + 80085e0: 6203 str r3, [r0, #32] + + /* Get the TIMx CCER register value */ + tmpccer = TIMx->CCER; + 80085e2: 6a03 ldr r3, [r0, #32] + /* Get the TIMx CR2 register value */ + tmpcr2 = TIMx->CR2; + 80085e4: 6842 ldr r2, [r0, #4] + + /* Get the TIMx CCMR2 register value */ + tmpccmrx = TIMx->CCMR2; + 80085e6: 69c4 ldr r4, [r0, #28] + tmpccmrx &= ~TIM_CCMR2_CC3S; + /* Select the Output Compare Mode */ + tmpccmrx |= OC_Config->OCMode; + + /* Reset the Output Polarity level */ + tmpccer &= ~TIM_CCER_CC3P; + 80085e8: f423 7300 bic.w r3, r3, #512 ; 0x200 + tmpccmrx |= OC_Config->OCMode; + 80085ec: 680d ldr r5, [r1, #0] + tmpccmrx &= ~TIM_CCMR2_CC3S; + 80085ee: f424 3480 bic.w r4, r4, #65536 ; 0x10000 + 80085f2: f024 0473 bic.w r4, r4, #115 ; 0x73 + tmpccmrx |= OC_Config->OCMode; + 80085f6: 432c orrs r4, r5 + /* Set the Output Compare Polarity */ + tmpccer |= (OC_Config->OCPolarity << 8U); + 80085f8: 688d ldr r5, [r1, #8] + 80085fa: ea43 2305 orr.w r3, r3, r5, lsl #8 + + if (IS_TIM_CCXN_INSTANCE(TIMx, TIM_CHANNEL_3)) + 80085fe: 4d11 ldr r5, [pc, #68] ; (8008644 ) + 8008600: 42a8 cmp r0, r5 + 8008602: d003 beq.n 800860c + 8008604: f505 6580 add.w r5, r5, #1024 ; 0x400 + 8008608: 42a8 cmp r0, r5 + 800860a: d114 bne.n 8008636 + assert_param(IS_TIM_OCN_POLARITY(OC_Config->OCNPolarity)); + + /* Reset the Output N Polarity level */ + tmpccer &= ~TIM_CCER_CC3NP; + /* Set the Output N Polarity */ + tmpccer |= (OC_Config->OCNPolarity << 8U); + 800860c: 68cd ldr r5, [r1, #12] + tmpccer &= ~TIM_CCER_CC3NP; + 800860e: f423 6300 bic.w r3, r3, #2048 ; 0x800 + tmpccer |= (OC_Config->OCNPolarity << 8U); + 8008612: ea43 2305 orr.w r3, r3, r5, lsl #8 + /* Reset the Output N State */ + tmpccer &= ~TIM_CCER_CC3NE; + } + + if (IS_TIM_BREAK_INSTANCE(TIMx)) + 8008616: 4d0b ldr r5, [pc, #44] ; (8008644 ) + 8008618: 42a8 cmp r0, r5 + tmpccer &= ~TIM_CCER_CC3NE; + 800861a: f423 6380 bic.w r3, r3, #1024 ; 0x400 + if (IS_TIM_BREAK_INSTANCE(TIMx)) + 800861e: d003 beq.n 8008628 + 8008620: f505 6580 add.w r5, r5, #1024 ; 0x400 + 8008624: 42a8 cmp r0, r5 + 8008626: d106 bne.n 8008636 + assert_param(IS_TIM_OCNIDLE_STATE(OC_Config->OCNIdleState)); + assert_param(IS_TIM_OCIDLE_STATE(OC_Config->OCIdleState)); + + /* Reset the Output Compare and Output Compare N IDLE State */ + tmpcr2 &= ~TIM_CR2_OIS3; + tmpcr2 &= ~TIM_CR2_OIS3N; + 8008628: f422 5240 bic.w r2, r2, #12288 ; 0x3000 + /* Set the Output Idle state */ + tmpcr2 |= (OC_Config->OCIdleState << 4U); + /* Set the Output N Idle state */ + tmpcr2 |= (OC_Config->OCNIdleState << 4U); + 800862c: e9d1 5605 ldrd r5, r6, [r1, #20] + 8008630: 4335 orrs r5, r6 + 8008632: ea42 1205 orr.w r2, r2, r5, lsl #4 + } + + /* Write to TIMx CR2 */ + TIMx->CR2 = tmpcr2; + 8008636: 6042 str r2, [r0, #4] + + /* Write to TIMx CCMR2 */ + TIMx->CCMR2 = tmpccmrx; + + /* Set the Capture Compare Register value */ + TIMx->CCR3 = OC_Config->Pulse; + 8008638: 684a ldr r2, [r1, #4] + TIMx->CCMR2 = tmpccmrx; + 800863a: 61c4 str r4, [r0, #28] + TIMx->CCR3 = OC_Config->Pulse; + 800863c: 63c2 str r2, [r0, #60] ; 0x3c + + /* Write to TIMx CCER */ + TIMx->CCER = tmpccer; + 800863e: 6203 str r3, [r0, #32] +} + 8008640: bd70 pop {r4, r5, r6, pc} + 8008642: bf00 nop + 8008644: 40010000 .word 0x40010000 + +08008648 : + uint32_t tmpccmrx; + uint32_t tmpccer; + uint32_t tmpcr2; + + /* Disable the Channel 4: Reset the CC4E Bit */ + TIMx->CCER &= ~TIM_CCER_CC4E; + 8008648: 6a03 ldr r3, [r0, #32] + 800864a: f423 5380 bic.w r3, r3, #4096 ; 0x1000 +{ + 800864e: b530 push {r4, r5, lr} + TIMx->CCER &= ~TIM_CCER_CC4E; + 8008650: 6203 str r3, [r0, #32] + + /* Get the TIMx CCER register value */ + tmpccer = TIMx->CCER; + 8008652: 6a02 ldr r2, [r0, #32] + /* Get the TIMx CR2 register value */ + tmpcr2 = TIMx->CR2; + 8008654: 6844 ldr r4, [r0, #4] + + /* Get the TIMx CCMR2 register value */ + tmpccmrx = TIMx->CCMR2; + 8008656: 69c3 ldr r3, [r0, #28] + + /* Select the Output Compare Mode */ + tmpccmrx |= (OC_Config->OCMode << 8U); + + /* Reset the Output Polarity level */ + tmpccer &= ~TIM_CCER_CC4P; + 8008658: f422 5200 bic.w r2, r2, #8192 ; 0x2000 + tmpccmrx |= (OC_Config->OCMode << 8U); + 800865c: 680d ldr r5, [r1, #0] + tmpccmrx &= ~TIM_CCMR2_CC4S; + 800865e: f023 7380 bic.w r3, r3, #16777216 ; 0x1000000 + 8008662: f423 43e6 bic.w r3, r3, #29440 ; 0x7300 + tmpccmrx |= (OC_Config->OCMode << 8U); + 8008666: ea43 2305 orr.w r3, r3, r5, lsl #8 + /* Set the Output Compare Polarity */ + tmpccer |= (OC_Config->OCPolarity << 12U); + 800866a: 688d ldr r5, [r1, #8] + 800866c: ea42 3205 orr.w r2, r2, r5, lsl #12 + + if (IS_TIM_BREAK_INSTANCE(TIMx)) + 8008670: 4d08 ldr r5, [pc, #32] ; (8008694 ) + 8008672: 42a8 cmp r0, r5 + 8008674: d003 beq.n 800867e + 8008676: f505 6580 add.w r5, r5, #1024 ; 0x400 + 800867a: 42a8 cmp r0, r5 + 800867c: d104 bne.n 8008688 + { + /* Check parameters */ + assert_param(IS_TIM_OCIDLE_STATE(OC_Config->OCIdleState)); + + /* Reset the Output Compare IDLE State */ + tmpcr2 &= ~TIM_CR2_OIS4; + 800867e: f424 4480 bic.w r4, r4, #16384 ; 0x4000 + + /* Set the Output Idle state */ + tmpcr2 |= (OC_Config->OCIdleState << 6U); + 8008682: 694d ldr r5, [r1, #20] + 8008684: ea44 1485 orr.w r4, r4, r5, lsl #6 + } + + /* Write to TIMx CR2 */ + TIMx->CR2 = tmpcr2; + 8008688: 6044 str r4, [r0, #4] + + /* Write to TIMx CCMR2 */ + TIMx->CCMR2 = tmpccmrx; + 800868a: 61c3 str r3, [r0, #28] + + /* Set the Capture Compare Register value */ + TIMx->CCR4 = OC_Config->Pulse; + 800868c: 684b ldr r3, [r1, #4] + 800868e: 6403 str r3, [r0, #64] ; 0x40 + + /* Write to TIMx CCER */ + TIMx->CCER = tmpccer; + 8008690: 6202 str r2, [r0, #32] +} + 8008692: bd30 pop {r4, r5, pc} + 8008694: 40010000 .word 0x40010000 + +08008698 : + uint32_t tmpccmrx; + uint32_t tmpccer; + uint32_t tmpcr2; + + /* Disable the output: Reset the CCxE Bit */ + TIMx->CCER &= ~TIM_CCER_CC5E; + 8008698: 6a03 ldr r3, [r0, #32] + 800869a: f423 3380 bic.w r3, r3, #65536 ; 0x10000 +{ + 800869e: b530 push {r4, r5, lr} + TIMx->CCER &= ~TIM_CCER_CC5E; + 80086a0: 6203 str r3, [r0, #32] + + /* Get the TIMx CCER register value */ + tmpccer = TIMx->CCER; + 80086a2: 6a02 ldr r2, [r0, #32] + /* Get the TIMx CR2 register value */ + tmpcr2 = TIMx->CR2; + 80086a4: 6844 ldr r4, [r0, #4] + /* Get the TIMx CCMR1 register value */ + tmpccmrx = TIMx->CCMR3; + 80086a6: 6d43 ldr r3, [r0, #84] ; 0x54 + tmpccmrx &= ~(TIM_CCMR3_OC5M); + /* Select the Output Compare Mode */ + tmpccmrx |= OC_Config->OCMode; + + /* Reset the Output Polarity level */ + tmpccer &= ~TIM_CCER_CC5P; + 80086a8: f422 3200 bic.w r2, r2, #131072 ; 0x20000 + tmpccmrx |= OC_Config->OCMode; + 80086ac: 680d ldr r5, [r1, #0] + tmpccmrx &= ~(TIM_CCMR3_OC5M); + 80086ae: f423 3380 bic.w r3, r3, #65536 ; 0x10000 + 80086b2: f023 0370 bic.w r3, r3, #112 ; 0x70 + tmpccmrx |= OC_Config->OCMode; + 80086b6: 432b orrs r3, r5 + /* Set the Output Compare Polarity */ + tmpccer |= (OC_Config->OCPolarity << 16U); + 80086b8: 688d ldr r5, [r1, #8] + 80086ba: ea42 4205 orr.w r2, r2, r5, lsl #16 + + if (IS_TIM_BREAK_INSTANCE(TIMx)) + 80086be: 4d09 ldr r5, [pc, #36] ; (80086e4 ) + 80086c0: 42a8 cmp r0, r5 + 80086c2: d003 beq.n 80086cc + 80086c4: f505 6580 add.w r5, r5, #1024 ; 0x400 + 80086c8: 42a8 cmp r0, r5 + 80086ca: d104 bne.n 80086d6 + { + /* Reset the Output Compare IDLE State */ + tmpcr2 &= ~TIM_CR2_OIS5; + 80086cc: f424 3480 bic.w r4, r4, #65536 ; 0x10000 + /* Set the Output Idle state */ + tmpcr2 |= (OC_Config->OCIdleState << 8U); + 80086d0: 694d ldr r5, [r1, #20] + 80086d2: ea44 2405 orr.w r4, r4, r5, lsl #8 + } + /* Write to TIMx CR2 */ + TIMx->CR2 = tmpcr2; + 80086d6: 6044 str r4, [r0, #4] + + /* Write to TIMx CCMR3 */ + TIMx->CCMR3 = tmpccmrx; + 80086d8: 6543 str r3, [r0, #84] ; 0x54 + + /* Set the Capture Compare Register value */ + TIMx->CCR5 = OC_Config->Pulse; + 80086da: 684b ldr r3, [r1, #4] + 80086dc: 6583 str r3, [r0, #88] ; 0x58 + + /* Write to TIMx CCER */ + TIMx->CCER = tmpccer; + 80086de: 6202 str r2, [r0, #32] +} + 80086e0: bd30 pop {r4, r5, pc} + 80086e2: bf00 nop + 80086e4: 40010000 .word 0x40010000 + +080086e8 : + uint32_t tmpccmrx; + uint32_t tmpccer; + uint32_t tmpcr2; + + /* Disable the output: Reset the CCxE Bit */ + TIMx->CCER &= ~TIM_CCER_CC6E; + 80086e8: 6a03 ldr r3, [r0, #32] + 80086ea: f423 1380 bic.w r3, r3, #1048576 ; 0x100000 +{ + 80086ee: b530 push {r4, r5, lr} + TIMx->CCER &= ~TIM_CCER_CC6E; + 80086f0: 6203 str r3, [r0, #32] + + /* Get the TIMx CCER register value */ + tmpccer = TIMx->CCER; + 80086f2: 6a02 ldr r2, [r0, #32] + /* Get the TIMx CR2 register value */ + tmpcr2 = TIMx->CR2; + 80086f4: 6844 ldr r4, [r0, #4] + /* Get the TIMx CCMR1 register value */ + tmpccmrx = TIMx->CCMR3; + 80086f6: 6d43 ldr r3, [r0, #84] ; 0x54 + tmpccmrx &= ~(TIM_CCMR3_OC6M); + /* Select the Output Compare Mode */ + tmpccmrx |= (OC_Config->OCMode << 8U); + + /* Reset the Output Polarity level */ + tmpccer &= (uint32_t)~TIM_CCER_CC6P; + 80086f8: f422 1200 bic.w r2, r2, #2097152 ; 0x200000 + tmpccmrx |= (OC_Config->OCMode << 8U); + 80086fc: 680d ldr r5, [r1, #0] + tmpccmrx &= ~(TIM_CCMR3_OC6M); + 80086fe: f023 7380 bic.w r3, r3, #16777216 ; 0x1000000 + 8008702: f423 43e0 bic.w r3, r3, #28672 ; 0x7000 + tmpccmrx |= (OC_Config->OCMode << 8U); + 8008706: ea43 2305 orr.w r3, r3, r5, lsl #8 + /* Set the Output Compare Polarity */ + tmpccer |= (OC_Config->OCPolarity << 20U); + 800870a: 688d ldr r5, [r1, #8] + 800870c: ea42 5205 orr.w r2, r2, r5, lsl #20 + + if (IS_TIM_BREAK_INSTANCE(TIMx)) + 8008710: 4d08 ldr r5, [pc, #32] ; (8008734 ) + 8008712: 42a8 cmp r0, r5 + 8008714: d003 beq.n 800871e + 8008716: f505 6580 add.w r5, r5, #1024 ; 0x400 + 800871a: 42a8 cmp r0, r5 + 800871c: d104 bne.n 8008728 + { + /* Reset the Output Compare IDLE State */ + tmpcr2 &= ~TIM_CR2_OIS6; + 800871e: f424 2480 bic.w r4, r4, #262144 ; 0x40000 + /* Set the Output Idle state */ + tmpcr2 |= (OC_Config->OCIdleState << 10U); + 8008722: 694d ldr r5, [r1, #20] + 8008724: ea44 2485 orr.w r4, r4, r5, lsl #10 + } + + /* Write to TIMx CR2 */ + TIMx->CR2 = tmpcr2; + 8008728: 6044 str r4, [r0, #4] + + /* Write to TIMx CCMR3 */ + TIMx->CCMR3 = tmpccmrx; + 800872a: 6543 str r3, [r0, #84] ; 0x54 + + /* Set the Capture Compare Register value */ + TIMx->CCR6 = OC_Config->Pulse; + 800872c: 684b ldr r3, [r1, #4] + 800872e: 65c3 str r3, [r0, #92] ; 0x5c + + /* Write to TIMx CCER */ + TIMx->CCER = tmpccer; + 8008730: 6202 str r2, [r0, #32] +} + 8008732: bd30 pop {r4, r5, pc} + 8008734: 40010000 .word 0x40010000 + +08008738 : + if (htim->State != HAL_TIM_STATE_READY) + 8008738: f890 303d ldrb.w r3, [r0, #61] ; 0x3d + 800873c: 2b01 cmp r3, #1 + 800873e: d133 bne.n 80087a8 + htim->State = HAL_TIM_STATE_BUSY; + 8008740: 2302 movs r3, #2 + 8008742: f880 303d strb.w r3, [r0, #61] ; 0x3d + __HAL_TIM_ENABLE_IT(htim, TIM_IT_UPDATE); + 8008746: 6803 ldr r3, [r0, #0] + 8008748: 68da ldr r2, [r3, #12] + 800874a: f042 0201 orr.w r2, r2, #1 + 800874e: 60da str r2, [r3, #12] + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + 8008750: 4a16 ldr r2, [pc, #88] ; (80087ac ) + 8008752: 4293 cmp r3, r2 + 8008754: d01a beq.n 800878c + 8008756: f1b3 4f80 cmp.w r3, #1073741824 ; 0x40000000 + 800875a: d017 beq.n 800878c + 800875c: f5a2 427c sub.w r2, r2, #64512 ; 0xfc00 + 8008760: 4293 cmp r3, r2 + 8008762: d013 beq.n 800878c + 8008764: f502 6280 add.w r2, r2, #1024 ; 0x400 + 8008768: 4293 cmp r3, r2 + 800876a: d00f beq.n 800878c + 800876c: f502 6280 add.w r2, r2, #1024 ; 0x400 + 8008770: 4293 cmp r3, r2 + 8008772: d00b beq.n 800878c + 8008774: f502 4278 add.w r2, r2, #63488 ; 0xf800 + 8008778: 4293 cmp r3, r2 + 800877a: d007 beq.n 800878c + 800877c: f502 5270 add.w r2, r2, #15360 ; 0x3c00 + 8008780: 4293 cmp r3, r2 + 8008782: d003 beq.n 800878c + 8008784: f5a2 3294 sub.w r2, r2, #75776 ; 0x12800 + 8008788: 4293 cmp r3, r2 + 800878a: d107 bne.n 800879c + tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; + 800878c: 6899 ldr r1, [r3, #8] + 800878e: 4a08 ldr r2, [pc, #32] ; (80087b0 ) + 8008790: 400a ands r2, r1 + if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) + 8008792: 2a06 cmp r2, #6 + 8008794: d006 beq.n 80087a4 + 8008796: f5b2 3f80 cmp.w r2, #65536 ; 0x10000 + 800879a: d003 beq.n 80087a4 + __HAL_TIM_ENABLE(htim); + 800879c: 681a ldr r2, [r3, #0] + 800879e: f042 0201 orr.w r2, r2, #1 + 80087a2: 601a str r2, [r3, #0] + return HAL_OK; + 80087a4: 2000 movs r0, #0 +} + 80087a6: 4770 bx lr + return HAL_ERROR; + 80087a8: 2001 movs r0, #1 + 80087aa: 4770 bx lr + 80087ac: 40010000 .word 0x40010000 + 80087b0: 00010007 .word 0x00010007 + +080087b4 : + 80087b4: 4770 bx lr + +080087b6 : + 80087b6: 4770 bx lr + +080087b8 : + 80087b8: 4770 bx lr + +080087ba : + 80087ba: 4770 bx lr + +080087bc : + 80087bc: 4770 bx lr + +080087be : + if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_CC1) != RESET) + 80087be: 6803 ldr r3, [r0, #0] + 80087c0: 691a ldr r2, [r3, #16] + 80087c2: 0791 lsls r1, r2, #30 +{ + 80087c4: b510 push {r4, lr} + 80087c6: 4604 mov r4, r0 + if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_CC1) != RESET) + 80087c8: d50f bpl.n 80087ea + if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_CC1) != RESET) + 80087ca: 68da ldr r2, [r3, #12] + 80087cc: 0792 lsls r2, r2, #30 + 80087ce: d50c bpl.n 80087ea + __HAL_TIM_CLEAR_IT(htim, TIM_IT_CC1); + 80087d0: f06f 0202 mvn.w r2, #2 + 80087d4: 611a str r2, [r3, #16] + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1; + 80087d6: 2201 movs r2, #1 + 80087d8: 7702 strb r2, [r0, #28] + if ((htim->Instance->CCMR1 & TIM_CCMR1_CC1S) != 0x00U) + 80087da: 699b ldr r3, [r3, #24] + 80087dc: 0799 lsls r1, r3, #30 + 80087de: f000 8085 beq.w 80088ec + HAL_TIM_IC_CaptureCallback(htim); + 80087e2: f7ff ffe9 bl 80087b8 + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED; + 80087e6: 2300 movs r3, #0 + 80087e8: 7723 strb r3, [r4, #28] + if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_CC2) != RESET) + 80087ea: 6823 ldr r3, [r4, #0] + 80087ec: 691a ldr r2, [r3, #16] + 80087ee: 0752 lsls r2, r2, #29 + 80087f0: d510 bpl.n 8008814 + if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_CC2) != RESET) + 80087f2: 68da ldr r2, [r3, #12] + 80087f4: 0750 lsls r0, r2, #29 + 80087f6: d50d bpl.n 8008814 + __HAL_TIM_CLEAR_IT(htim, TIM_IT_CC2); + 80087f8: f06f 0204 mvn.w r2, #4 + HAL_TIM_IC_CaptureCallback(htim); + 80087fc: 4620 mov r0, r4 + __HAL_TIM_CLEAR_IT(htim, TIM_IT_CC2); + 80087fe: 611a str r2, [r3, #16] + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2; + 8008800: 2202 movs r2, #2 + 8008802: 7722 strb r2, [r4, #28] + if ((htim->Instance->CCMR1 & TIM_CCMR1_CC2S) != 0x00U) + 8008804: 699b ldr r3, [r3, #24] + 8008806: f413 7f40 tst.w r3, #768 ; 0x300 + 800880a: d075 beq.n 80088f8 + HAL_TIM_IC_CaptureCallback(htim); + 800880c: f7ff ffd4 bl 80087b8 + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED; + 8008810: 2300 movs r3, #0 + 8008812: 7723 strb r3, [r4, #28] + if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_CC3) != RESET) + 8008814: 6823 ldr r3, [r4, #0] + 8008816: 691a ldr r2, [r3, #16] + 8008818: 0711 lsls r1, r2, #28 + 800881a: d50f bpl.n 800883c + if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_CC3) != RESET) + 800881c: 68da ldr r2, [r3, #12] + 800881e: 0712 lsls r2, r2, #28 + 8008820: d50c bpl.n 800883c + __HAL_TIM_CLEAR_IT(htim, TIM_IT_CC3); + 8008822: f06f 0208 mvn.w r2, #8 + HAL_TIM_IC_CaptureCallback(htim); + 8008826: 4620 mov r0, r4 + __HAL_TIM_CLEAR_IT(htim, TIM_IT_CC3); + 8008828: 611a str r2, [r3, #16] + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3; + 800882a: 2204 movs r2, #4 + 800882c: 7722 strb r2, [r4, #28] + if ((htim->Instance->CCMR2 & TIM_CCMR2_CC3S) != 0x00U) + 800882e: 69db ldr r3, [r3, #28] + 8008830: 079b lsls r3, r3, #30 + 8008832: d067 beq.n 8008904 + HAL_TIM_IC_CaptureCallback(htim); + 8008834: f7ff ffc0 bl 80087b8 + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED; + 8008838: 2300 movs r3, #0 + 800883a: 7723 strb r3, [r4, #28] + if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_CC4) != RESET) + 800883c: 6823 ldr r3, [r4, #0] + 800883e: 691a ldr r2, [r3, #16] + 8008840: 06d0 lsls r0, r2, #27 + 8008842: d510 bpl.n 8008866 + if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_CC4) != RESET) + 8008844: 68da ldr r2, [r3, #12] + 8008846: 06d1 lsls r1, r2, #27 + 8008848: d50d bpl.n 8008866 + __HAL_TIM_CLEAR_IT(htim, TIM_IT_CC4); + 800884a: f06f 0210 mvn.w r2, #16 + HAL_TIM_IC_CaptureCallback(htim); + 800884e: 4620 mov r0, r4 + __HAL_TIM_CLEAR_IT(htim, TIM_IT_CC4); + 8008850: 611a str r2, [r3, #16] + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_4; + 8008852: 2208 movs r2, #8 + 8008854: 7722 strb r2, [r4, #28] + if ((htim->Instance->CCMR2 & TIM_CCMR2_CC4S) != 0x00U) + 8008856: 69db ldr r3, [r3, #28] + 8008858: f413 7f40 tst.w r3, #768 ; 0x300 + 800885c: d058 beq.n 8008910 + HAL_TIM_IC_CaptureCallback(htim); + 800885e: f7ff ffab bl 80087b8 + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED; + 8008862: 2300 movs r3, #0 + 8008864: 7723 strb r3, [r4, #28] + if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_UPDATE) != RESET) + 8008866: 6823 ldr r3, [r4, #0] + 8008868: 691a ldr r2, [r3, #16] + 800886a: 07d2 lsls r2, r2, #31 + 800886c: d508 bpl.n 8008880 + if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_UPDATE) != RESET) + 800886e: 68da ldr r2, [r3, #12] + 8008870: 07d0 lsls r0, r2, #31 + 8008872: d505 bpl.n 8008880 + __HAL_TIM_CLEAR_IT(htim, TIM_IT_UPDATE); + 8008874: f06f 0201 mvn.w r2, #1 + HAL_TIM_PeriodElapsedCallback(htim); + 8008878: 4620 mov r0, r4 + __HAL_TIM_CLEAR_IT(htim, TIM_IT_UPDATE); + 800887a: 611a str r2, [r3, #16] + HAL_TIM_PeriodElapsedCallback(htim); + 800887c: f7f8 fee4 bl 8001648 + if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_BREAK) != RESET) + 8008880: 6823 ldr r3, [r4, #0] + 8008882: 691a ldr r2, [r3, #16] + 8008884: 0611 lsls r1, r2, #24 + 8008886: d508 bpl.n 800889a + if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_BREAK) != RESET) + 8008888: 68da ldr r2, [r3, #12] + 800888a: 0612 lsls r2, r2, #24 + 800888c: d505 bpl.n 800889a + __HAL_TIM_CLEAR_IT(htim, TIM_IT_BREAK); + 800888e: f06f 0280 mvn.w r2, #128 ; 0x80 + HAL_TIMEx_BreakCallback(htim); + 8008892: 4620 mov r0, r4 + __HAL_TIM_CLEAR_IT(htim, TIM_IT_BREAK); + 8008894: 611a str r2, [r3, #16] + HAL_TIMEx_BreakCallback(htim); + 8008896: f000 fb8e bl 8008fb6 + if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_BREAK2) != RESET) + 800889a: 6823 ldr r3, [r4, #0] + 800889c: 691a ldr r2, [r3, #16] + 800889e: 05d0 lsls r0, r2, #23 + 80088a0: d508 bpl.n 80088b4 + if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_BREAK) != RESET) + 80088a2: 68da ldr r2, [r3, #12] + 80088a4: 0611 lsls r1, r2, #24 + 80088a6: d505 bpl.n 80088b4 + __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_BREAK2); + 80088a8: f46f 7280 mvn.w r2, #256 ; 0x100 + HAL_TIMEx_Break2Callback(htim); + 80088ac: 4620 mov r0, r4 + __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_BREAK2); + 80088ae: 611a str r2, [r3, #16] + HAL_TIMEx_Break2Callback(htim); + 80088b0: f000 fb82 bl 8008fb8 + if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_TRIGGER) != RESET) + 80088b4: 6823 ldr r3, [r4, #0] + 80088b6: 691a ldr r2, [r3, #16] + 80088b8: 0652 lsls r2, r2, #25 + 80088ba: d508 bpl.n 80088ce + if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_TRIGGER) != RESET) + 80088bc: 68da ldr r2, [r3, #12] + 80088be: 0650 lsls r0, r2, #25 + 80088c0: d505 bpl.n 80088ce + __HAL_TIM_CLEAR_IT(htim, TIM_IT_TRIGGER); + 80088c2: f06f 0240 mvn.w r2, #64 ; 0x40 + HAL_TIM_TriggerCallback(htim); + 80088c6: 4620 mov r0, r4 + __HAL_TIM_CLEAR_IT(htim, TIM_IT_TRIGGER); + 80088c8: 611a str r2, [r3, #16] + HAL_TIM_TriggerCallback(htim); + 80088ca: f7ff ff77 bl 80087bc + if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_COM) != RESET) + 80088ce: 6823 ldr r3, [r4, #0] + 80088d0: 691a ldr r2, [r3, #16] + 80088d2: 0691 lsls r1, r2, #26 + 80088d4: d522 bpl.n 800891c + if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_COM) != RESET) + 80088d6: 68da ldr r2, [r3, #12] + 80088d8: 0692 lsls r2, r2, #26 + 80088da: d51f bpl.n 800891c + __HAL_TIM_CLEAR_IT(htim, TIM_FLAG_COM); + 80088dc: f06f 0220 mvn.w r2, #32 + HAL_TIMEx_CommutCallback(htim); + 80088e0: 4620 mov r0, r4 + __HAL_TIM_CLEAR_IT(htim, TIM_FLAG_COM); + 80088e2: 611a str r2, [r3, #16] +} + 80088e4: e8bd 4010 ldmia.w sp!, {r4, lr} + HAL_TIMEx_CommutCallback(htim); + 80088e8: f000 bb64 b.w 8008fb4 + HAL_TIM_OC_DelayElapsedCallback(htim); + 80088ec: f7ff ff63 bl 80087b6 + HAL_TIM_PWM_PulseFinishedCallback(htim); + 80088f0: 4620 mov r0, r4 + 80088f2: f7ff ff62 bl 80087ba + 80088f6: e776 b.n 80087e6 + HAL_TIM_OC_DelayElapsedCallback(htim); + 80088f8: f7ff ff5d bl 80087b6 + HAL_TIM_PWM_PulseFinishedCallback(htim); + 80088fc: 4620 mov r0, r4 + 80088fe: f7ff ff5c bl 80087ba + 8008902: e785 b.n 8008810 + HAL_TIM_OC_DelayElapsedCallback(htim); + 8008904: f7ff ff57 bl 80087b6 + HAL_TIM_PWM_PulseFinishedCallback(htim); + 8008908: 4620 mov r0, r4 + 800890a: f7ff ff56 bl 80087ba + 800890e: e793 b.n 8008838 + HAL_TIM_OC_DelayElapsedCallback(htim); + 8008910: f7ff ff51 bl 80087b6 + HAL_TIM_PWM_PulseFinishedCallback(htim); + 8008914: 4620 mov r0, r4 + 8008916: f7ff ff50 bl 80087ba + 800891a: e7a2 b.n 8008862 +} + 800891c: bd10 pop {r4, pc} + ... + +08008920 : + if (IS_TIM_COUNTER_MODE_SELECT_INSTANCE(TIMx)) + 8008920: 4a30 ldr r2, [pc, #192] ; (80089e4 ) + tmpcr1 = TIMx->CR1; + 8008922: 6803 ldr r3, [r0, #0] + if (IS_TIM_COUNTER_MODE_SELECT_INSTANCE(TIMx)) + 8008924: 4290 cmp r0, r2 + 8008926: d012 beq.n 800894e + 8008928: f1b0 4f80 cmp.w r0, #1073741824 ; 0x40000000 + 800892c: d00f beq.n 800894e + 800892e: f5a2 427c sub.w r2, r2, #64512 ; 0xfc00 + 8008932: 4290 cmp r0, r2 + 8008934: d00b beq.n 800894e + 8008936: f502 6280 add.w r2, r2, #1024 ; 0x400 + 800893a: 4290 cmp r0, r2 + 800893c: d007 beq.n 800894e + 800893e: f502 6280 add.w r2, r2, #1024 ; 0x400 + 8008942: 4290 cmp r0, r2 + 8008944: d003 beq.n 800894e + 8008946: f502 4278 add.w r2, r2, #63488 ; 0xf800 + 800894a: 4290 cmp r0, r2 + 800894c: d119 bne.n 8008982 + tmpcr1 |= Structure->CounterMode; + 800894e: 684a ldr r2, [r1, #4] + tmpcr1 &= ~(TIM_CR1_DIR | TIM_CR1_CMS); + 8008950: f023 0370 bic.w r3, r3, #112 ; 0x70 + tmpcr1 |= Structure->CounterMode; + 8008954: 4313 orrs r3, r2 + if (IS_TIM_CLOCK_DIVISION_INSTANCE(TIMx)) + 8008956: 4a23 ldr r2, [pc, #140] ; (80089e4 ) + 8008958: 4290 cmp r0, r2 + 800895a: d029 beq.n 80089b0 + 800895c: f1b0 4f80 cmp.w r0, #1073741824 ; 0x40000000 + 8008960: d026 beq.n 80089b0 + 8008962: f5a2 427c sub.w r2, r2, #64512 ; 0xfc00 + 8008966: 4290 cmp r0, r2 + 8008968: d022 beq.n 80089b0 + 800896a: f502 6280 add.w r2, r2, #1024 ; 0x400 + 800896e: 4290 cmp r0, r2 + 8008970: d01e beq.n 80089b0 + 8008972: f502 6280 add.w r2, r2, #1024 ; 0x400 + 8008976: 4290 cmp r0, r2 + 8008978: d01a beq.n 80089b0 + 800897a: f502 4278 add.w r2, r2, #63488 ; 0xf800 + 800897e: 4290 cmp r0, r2 + 8008980: d016 beq.n 80089b0 + 8008982: 4a19 ldr r2, [pc, #100] ; (80089e8 ) + 8008984: 4290 cmp r0, r2 + 8008986: d013 beq.n 80089b0 + 8008988: f502 6280 add.w r2, r2, #1024 ; 0x400 + 800898c: 4290 cmp r0, r2 + 800898e: d00f beq.n 80089b0 + 8008990: f502 6280 add.w r2, r2, #1024 ; 0x400 + 8008994: 4290 cmp r0, r2 + 8008996: d00b beq.n 80089b0 + 8008998: f5a2 3298 sub.w r2, r2, #77824 ; 0x13000 + 800899c: 4290 cmp r0, r2 + 800899e: d007 beq.n 80089b0 + 80089a0: f502 6280 add.w r2, r2, #1024 ; 0x400 + 80089a4: 4290 cmp r0, r2 + 80089a6: d003 beq.n 80089b0 + 80089a8: f502 6280 add.w r2, r2, #1024 ; 0x400 + 80089ac: 4290 cmp r0, r2 + 80089ae: d103 bne.n 80089b8 + tmpcr1 &= ~TIM_CR1_CKD; + 80089b0: f423 7340 bic.w r3, r3, #768 ; 0x300 + tmpcr1 |= (uint32_t)Structure->ClockDivision; + 80089b4: 68ca ldr r2, [r1, #12] + 80089b6: 4313 orrs r3, r2 + MODIFY_REG(tmpcr1, TIM_CR1_ARPE, Structure->AutoReloadPreload); + 80089b8: 694a ldr r2, [r1, #20] + 80089ba: f023 0380 bic.w r3, r3, #128 ; 0x80 + 80089be: 4313 orrs r3, r2 + TIMx->CR1 = tmpcr1; + 80089c0: 6003 str r3, [r0, #0] + TIMx->ARR = (uint32_t)Structure->Period ; + 80089c2: 688b ldr r3, [r1, #8] + 80089c4: 62c3 str r3, [r0, #44] ; 0x2c + TIMx->PSC = Structure->Prescaler; + 80089c6: 680b ldr r3, [r1, #0] + 80089c8: 6283 str r3, [r0, #40] ; 0x28 + if (IS_TIM_REPETITION_COUNTER_INSTANCE(TIMx)) + 80089ca: 4b06 ldr r3, [pc, #24] ; (80089e4 ) + 80089cc: 4298 cmp r0, r3 + 80089ce: d003 beq.n 80089d8 + 80089d0: f503 6380 add.w r3, r3, #1024 ; 0x400 + 80089d4: 4298 cmp r0, r3 + 80089d6: d101 bne.n 80089dc + TIMx->RCR = Structure->RepetitionCounter; + 80089d8: 690b ldr r3, [r1, #16] + 80089da: 6303 str r3, [r0, #48] ; 0x30 + TIMx->EGR = TIM_EGR_UG; + 80089dc: 2301 movs r3, #1 + 80089de: 6143 str r3, [r0, #20] +} + 80089e0: 4770 bx lr + 80089e2: bf00 nop + 80089e4: 40010000 .word 0x40010000 + 80089e8: 40014000 .word 0x40014000 + +080089ec : +{ + 80089ec: b510 push {r4, lr} + if (htim == NULL) + 80089ee: 4604 mov r4, r0 + 80089f0: b350 cbz r0, 8008a48 + if (htim->State == HAL_TIM_STATE_RESET) + 80089f2: f890 303d ldrb.w r3, [r0, #61] ; 0x3d + 80089f6: f003 02ff and.w r2, r3, #255 ; 0xff + 80089fa: b91b cbnz r3, 8008a04 + htim->Lock = HAL_UNLOCKED; + 80089fc: f880 203c strb.w r2, [r0, #60] ; 0x3c + HAL_TIM_Base_MspInit(htim); + 8008a00: f7f9 f822 bl 8001a48 + htim->State = HAL_TIM_STATE_BUSY; + 8008a04: 2302 movs r3, #2 + TIM_Base_SetConfig(htim->Instance, &htim->Init); + 8008a06: 6820 ldr r0, [r4, #0] + 8008a08: 1d21 adds r1, r4, #4 + htim->State = HAL_TIM_STATE_BUSY; + 8008a0a: f884 303d strb.w r3, [r4, #61] ; 0x3d + TIM_Base_SetConfig(htim->Instance, &htim->Init); + 8008a0e: f7ff ff87 bl 8008920 + htim->DMABurstState = HAL_DMA_BURST_STATE_READY; + 8008a12: 2301 movs r3, #1 + return HAL_OK; + 8008a14: 2000 movs r0, #0 + htim->DMABurstState = HAL_DMA_BURST_STATE_READY; + 8008a16: f884 3048 strb.w r3, [r4, #72] ; 0x48 + TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY); + 8008a1a: f884 303e strb.w r3, [r4, #62] ; 0x3e + 8008a1e: f884 303f strb.w r3, [r4, #63] ; 0x3f + 8008a22: f884 3040 strb.w r3, [r4, #64] ; 0x40 + 8008a26: f884 3041 strb.w r3, [r4, #65] ; 0x41 + 8008a2a: f884 3042 strb.w r3, [r4, #66] ; 0x42 + 8008a2e: f884 3043 strb.w r3, [r4, #67] ; 0x43 + TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY); + 8008a32: f884 3044 strb.w r3, [r4, #68] ; 0x44 + 8008a36: f884 3045 strb.w r3, [r4, #69] ; 0x45 + 8008a3a: f884 3046 strb.w r3, [r4, #70] ; 0x46 + 8008a3e: f884 3047 strb.w r3, [r4, #71] ; 0x47 + htim->State = HAL_TIM_STATE_READY; + 8008a42: f884 303d strb.w r3, [r4, #61] ; 0x3d +} + 8008a46: bd10 pop {r4, pc} + return HAL_ERROR; + 8008a48: 2001 movs r0, #1 + 8008a4a: e7fc b.n 8008a46 + +08008a4c : +{ + 8008a4c: b510 push {r4, lr} + if (htim == NULL) + 8008a4e: 4604 mov r4, r0 + 8008a50: b350 cbz r0, 8008aa8 + if (htim->State == HAL_TIM_STATE_RESET) + 8008a52: f890 303d ldrb.w r3, [r0, #61] ; 0x3d + 8008a56: f003 02ff and.w r2, r3, #255 ; 0xff + 8008a5a: b91b cbnz r3, 8008a64 + htim->Lock = HAL_UNLOCKED; + 8008a5c: f880 203c strb.w r2, [r0, #60] ; 0x3c + HAL_TIM_PWM_MspInit(htim); + 8008a60: f7ff fea8 bl 80087b4 + htim->State = HAL_TIM_STATE_BUSY; + 8008a64: 2302 movs r3, #2 + TIM_Base_SetConfig(htim->Instance, &htim->Init); + 8008a66: 6820 ldr r0, [r4, #0] + 8008a68: 1d21 adds r1, r4, #4 + htim->State = HAL_TIM_STATE_BUSY; + 8008a6a: f884 303d strb.w r3, [r4, #61] ; 0x3d + TIM_Base_SetConfig(htim->Instance, &htim->Init); + 8008a6e: f7ff ff57 bl 8008920 + htim->DMABurstState = HAL_DMA_BURST_STATE_READY; + 8008a72: 2301 movs r3, #1 + return HAL_OK; + 8008a74: 2000 movs r0, #0 + htim->DMABurstState = HAL_DMA_BURST_STATE_READY; + 8008a76: f884 3048 strb.w r3, [r4, #72] ; 0x48 + TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY); + 8008a7a: f884 303e strb.w r3, [r4, #62] ; 0x3e + 8008a7e: f884 303f strb.w r3, [r4, #63] ; 0x3f + 8008a82: f884 3040 strb.w r3, [r4, #64] ; 0x40 + 8008a86: f884 3041 strb.w r3, [r4, #65] ; 0x41 + 8008a8a: f884 3042 strb.w r3, [r4, #66] ; 0x42 + 8008a8e: f884 3043 strb.w r3, [r4, #67] ; 0x43 + TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY); + 8008a92: f884 3044 strb.w r3, [r4, #68] ; 0x44 + 8008a96: f884 3045 strb.w r3, [r4, #69] ; 0x45 + 8008a9a: f884 3046 strb.w r3, [r4, #70] ; 0x46 + 8008a9e: f884 3047 strb.w r3, [r4, #71] ; 0x47 + htim->State = HAL_TIM_STATE_READY; + 8008aa2: f884 303d strb.w r3, [r4, #61] ; 0x3d +} + 8008aa6: bd10 pop {r4, pc} + return HAL_ERROR; + 8008aa8: 2001 movs r0, #1 + 8008aaa: e7fc b.n 8008aa6 + +08008aac : + TIMx->CCER &= ~TIM_CCER_CC2E; + 8008aac: 6a03 ldr r3, [r0, #32] + 8008aae: f023 0310 bic.w r3, r3, #16 +{ + 8008ab2: b570 push {r4, r5, r6, lr} + TIMx->CCER &= ~TIM_CCER_CC2E; + 8008ab4: 6203 str r3, [r0, #32] + tmpccer = TIMx->CCER; + 8008ab6: 6a03 ldr r3, [r0, #32] + tmpcr2 = TIMx->CR2; + 8008ab8: 6842 ldr r2, [r0, #4] + tmpccmrx = TIMx->CCMR1; + 8008aba: 6984 ldr r4, [r0, #24] + tmpccer &= ~TIM_CCER_CC2P; + 8008abc: f023 0320 bic.w r3, r3, #32 + tmpccmrx |= (OC_Config->OCMode << 8U); + 8008ac0: 680d ldr r5, [r1, #0] + tmpccmrx &= ~TIM_CCMR1_CC2S; + 8008ac2: f024 7480 bic.w r4, r4, #16777216 ; 0x1000000 + 8008ac6: f424 44e6 bic.w r4, r4, #29440 ; 0x7300 + tmpccmrx |= (OC_Config->OCMode << 8U); + 8008aca: ea44 2405 orr.w r4, r4, r5, lsl #8 + tmpccer |= (OC_Config->OCPolarity << 4U); + 8008ace: 688d ldr r5, [r1, #8] + 8008ad0: ea43 1305 orr.w r3, r3, r5, lsl #4 + if (IS_TIM_CCXN_INSTANCE(TIMx, TIM_CHANNEL_2)) + 8008ad4: 4d10 ldr r5, [pc, #64] ; (8008b18 ) + 8008ad6: 42a8 cmp r0, r5 + 8008ad8: d003 beq.n 8008ae2 + 8008ada: f505 6580 add.w r5, r5, #1024 ; 0x400 + 8008ade: 42a8 cmp r0, r5 + 8008ae0: d114 bne.n 8008b0c + tmpccer |= (OC_Config->OCNPolarity << 4U); + 8008ae2: 68cd ldr r5, [r1, #12] + tmpccer &= ~TIM_CCER_CC2NP; + 8008ae4: f023 0380 bic.w r3, r3, #128 ; 0x80 + tmpccer |= (OC_Config->OCNPolarity << 4U); + 8008ae8: ea43 1305 orr.w r3, r3, r5, lsl #4 + if (IS_TIM_BREAK_INSTANCE(TIMx)) + 8008aec: 4d0a ldr r5, [pc, #40] ; (8008b18 ) + 8008aee: 42a8 cmp r0, r5 + tmpccer &= ~TIM_CCER_CC2NE; + 8008af0: f023 0340 bic.w r3, r3, #64 ; 0x40 + if (IS_TIM_BREAK_INSTANCE(TIMx)) + 8008af4: d003 beq.n 8008afe + 8008af6: f505 6580 add.w r5, r5, #1024 ; 0x400 + 8008afa: 42a8 cmp r0, r5 + 8008afc: d106 bne.n 8008b0c + tmpcr2 &= ~TIM_CR2_OIS2N; + 8008afe: f422 6240 bic.w r2, r2, #3072 ; 0xc00 + tmpcr2 |= (OC_Config->OCNIdleState << 2U); + 8008b02: e9d1 5605 ldrd r5, r6, [r1, #20] + 8008b06: 4335 orrs r5, r6 + 8008b08: ea42 0285 orr.w r2, r2, r5, lsl #2 + TIMx->CR2 = tmpcr2; + 8008b0c: 6042 str r2, [r0, #4] + TIMx->CCR2 = OC_Config->Pulse; + 8008b0e: 684a ldr r2, [r1, #4] + TIMx->CCMR1 = tmpccmrx; + 8008b10: 6184 str r4, [r0, #24] + TIMx->CCR2 = OC_Config->Pulse; + 8008b12: 6382 str r2, [r0, #56] ; 0x38 + TIMx->CCER = tmpccer; + 8008b14: 6203 str r3, [r0, #32] +} + 8008b16: bd70 pop {r4, r5, r6, pc} + 8008b18: 40010000 .word 0x40010000 + +08008b1c : +{ + 8008b1c: b570 push {r4, r5, r6, lr} + __HAL_LOCK(htim); + 8008b1e: f890 303c ldrb.w r3, [r0, #60] ; 0x3c +{ + 8008b22: 4605 mov r5, r0 + __HAL_LOCK(htim); + 8008b24: 2b01 cmp r3, #1 + 8008b26: d074 beq.n 8008c12 + 8008b28: 2301 movs r3, #1 + switch (Channel) + 8008b2a: 2a0c cmp r2, #12 + __HAL_LOCK(htim); + 8008b2c: f880 303c strb.w r3, [r0, #60] ; 0x3c + switch (Channel) + 8008b30: d04f beq.n 8008bd2 + 8008b32: d809 bhi.n 8008b48 + 8008b34: 2a04 cmp r2, #4 + 8008b36: d02c beq.n 8008b92 + 8008b38: 2a08 cmp r2, #8 + 8008b3a: d03a beq.n 8008bb2 + 8008b3c: b1c2 cbz r2, 8008b70 + 8008b3e: 4618 mov r0, r3 + __HAL_UNLOCK(htim); + 8008b40: 2300 movs r3, #0 + 8008b42: f885 303c strb.w r3, [r5, #60] ; 0x3c +} + 8008b46: bd70 pop {r4, r5, r6, pc} + switch (Channel) + 8008b48: 2a10 cmp r2, #16 + 8008b4a: d052 beq.n 8008bf2 + 8008b4c: 2a14 cmp r2, #20 + 8008b4e: d1f6 bne.n 8008b3e + TIM_OC6_SetConfig(htim->Instance, sConfig); + 8008b50: 6800 ldr r0, [r0, #0] + 8008b52: f7ff fdc9 bl 80086e8 + htim->Instance->CCMR3 |= sConfig->OCFastMode << 8U; + 8008b56: 690a ldr r2, [r1, #16] + htim->Instance->CCMR3 |= TIM_CCMR3_OC6PE; + 8008b58: 6d43 ldr r3, [r0, #84] ; 0x54 + 8008b5a: f443 6300 orr.w r3, r3, #2048 ; 0x800 + 8008b5e: 6543 str r3, [r0, #84] ; 0x54 + htim->Instance->CCMR3 &= ~TIM_CCMR3_OC6FE; + 8008b60: 6d43 ldr r3, [r0, #84] ; 0x54 + 8008b62: f423 6380 bic.w r3, r3, #1024 ; 0x400 + 8008b66: 6543 str r3, [r0, #84] ; 0x54 + htim->Instance->CCMR3 |= sConfig->OCFastMode << 8U; + 8008b68: 6d43 ldr r3, [r0, #84] ; 0x54 + 8008b6a: ea43 2302 orr.w r3, r3, r2, lsl #8 + 8008b6e: e04e b.n 8008c0e + TIM_OC1_SetConfig(htim->Instance, sConfig); + 8008b70: 6800 ldr r0, [r0, #0] + 8008b72: f7ff fcfd bl 8008570 + htim->Instance->CCMR1 |= sConfig->OCFastMode; + 8008b76: 690a ldr r2, [r1, #16] + htim->Instance->CCMR1 |= TIM_CCMR1_OC1PE; + 8008b78: 6983 ldr r3, [r0, #24] + 8008b7a: f043 0308 orr.w r3, r3, #8 + 8008b7e: 6183 str r3, [r0, #24] + htim->Instance->CCMR1 &= ~TIM_CCMR1_OC1FE; + 8008b80: 6983 ldr r3, [r0, #24] + 8008b82: f023 0304 bic.w r3, r3, #4 + 8008b86: 6183 str r3, [r0, #24] + htim->Instance->CCMR1 |= sConfig->OCFastMode; + 8008b88: 6983 ldr r3, [r0, #24] + 8008b8a: 4313 orrs r3, r2 + htim->Instance->CCMR1 |= sConfig->OCFastMode << 8U; + 8008b8c: 6183 str r3, [r0, #24] + HAL_StatusTypeDef status = HAL_OK; + 8008b8e: 2000 movs r0, #0 + break; + 8008b90: e7d6 b.n 8008b40 + TIM_OC2_SetConfig(htim->Instance, sConfig); + 8008b92: 6800 ldr r0, [r0, #0] + 8008b94: f7ff ff8a bl 8008aac + htim->Instance->CCMR1 |= sConfig->OCFastMode << 8U; + 8008b98: 690a ldr r2, [r1, #16] + htim->Instance->CCMR1 |= TIM_CCMR1_OC2PE; + 8008b9a: 6983 ldr r3, [r0, #24] + 8008b9c: f443 6300 orr.w r3, r3, #2048 ; 0x800 + 8008ba0: 6183 str r3, [r0, #24] + htim->Instance->CCMR1 &= ~TIM_CCMR1_OC2FE; + 8008ba2: 6983 ldr r3, [r0, #24] + 8008ba4: f423 6380 bic.w r3, r3, #1024 ; 0x400 + 8008ba8: 6183 str r3, [r0, #24] + htim->Instance->CCMR1 |= sConfig->OCFastMode << 8U; + 8008baa: 6983 ldr r3, [r0, #24] + 8008bac: ea43 2302 orr.w r3, r3, r2, lsl #8 + 8008bb0: e7ec b.n 8008b8c + TIM_OC3_SetConfig(htim->Instance, sConfig); + 8008bb2: 6800 ldr r0, [r0, #0] + 8008bb4: f7ff fd10 bl 80085d8 + htim->Instance->CCMR2 |= sConfig->OCFastMode; + 8008bb8: 690a ldr r2, [r1, #16] + htim->Instance->CCMR2 |= TIM_CCMR2_OC3PE; + 8008bba: 69c3 ldr r3, [r0, #28] + 8008bbc: f043 0308 orr.w r3, r3, #8 + 8008bc0: 61c3 str r3, [r0, #28] + htim->Instance->CCMR2 &= ~TIM_CCMR2_OC3FE; + 8008bc2: 69c3 ldr r3, [r0, #28] + 8008bc4: f023 0304 bic.w r3, r3, #4 + 8008bc8: 61c3 str r3, [r0, #28] + htim->Instance->CCMR2 |= sConfig->OCFastMode; + 8008bca: 69c3 ldr r3, [r0, #28] + 8008bcc: 4313 orrs r3, r2 + htim->Instance->CCMR2 |= sConfig->OCFastMode << 8U; + 8008bce: 61c3 str r3, [r0, #28] + break; + 8008bd0: e7dd b.n 8008b8e + TIM_OC4_SetConfig(htim->Instance, sConfig); + 8008bd2: 6800 ldr r0, [r0, #0] + 8008bd4: f7ff fd38 bl 8008648 + htim->Instance->CCMR2 |= sConfig->OCFastMode << 8U; + 8008bd8: 690a ldr r2, [r1, #16] + htim->Instance->CCMR2 |= TIM_CCMR2_OC4PE; + 8008bda: 69c3 ldr r3, [r0, #28] + 8008bdc: f443 6300 orr.w r3, r3, #2048 ; 0x800 + 8008be0: 61c3 str r3, [r0, #28] + htim->Instance->CCMR2 &= ~TIM_CCMR2_OC4FE; + 8008be2: 69c3 ldr r3, [r0, #28] + 8008be4: f423 6380 bic.w r3, r3, #1024 ; 0x400 + 8008be8: 61c3 str r3, [r0, #28] + htim->Instance->CCMR2 |= sConfig->OCFastMode << 8U; + 8008bea: 69c3 ldr r3, [r0, #28] + 8008bec: ea43 2302 orr.w r3, r3, r2, lsl #8 + 8008bf0: e7ed b.n 8008bce + TIM_OC5_SetConfig(htim->Instance, sConfig); + 8008bf2: 6800 ldr r0, [r0, #0] + 8008bf4: f7ff fd50 bl 8008698 + htim->Instance->CCMR3 |= sConfig->OCFastMode; + 8008bf8: 690a ldr r2, [r1, #16] + htim->Instance->CCMR3 |= TIM_CCMR3_OC5PE; + 8008bfa: 6d43 ldr r3, [r0, #84] ; 0x54 + 8008bfc: f043 0308 orr.w r3, r3, #8 + 8008c00: 6543 str r3, [r0, #84] ; 0x54 + htim->Instance->CCMR3 &= ~TIM_CCMR3_OC5FE; + 8008c02: 6d43 ldr r3, [r0, #84] ; 0x54 + 8008c04: f023 0304 bic.w r3, r3, #4 + 8008c08: 6543 str r3, [r0, #84] ; 0x54 + htim->Instance->CCMR3 |= sConfig->OCFastMode; + 8008c0a: 6d43 ldr r3, [r0, #84] ; 0x54 + 8008c0c: 4313 orrs r3, r2 + htim->Instance->CCMR3 |= sConfig->OCFastMode << 8U; + 8008c0e: 6543 str r3, [r0, #84] ; 0x54 + 8008c10: e7bd b.n 8008b8e + __HAL_LOCK(htim); + 8008c12: 2002 movs r0, #2 + 8008c14: e797 b.n 8008b46 + +08008c16 : + + /* Reset the ETR Bits */ + tmpsmcr &= ~(TIM_SMCR_ETF | TIM_SMCR_ETPS | TIM_SMCR_ECE | TIM_SMCR_ETP); + + /* Set the Prescaler, the Filter value and the Polarity */ + tmpsmcr |= (uint32_t)(TIM_ExtTRGPrescaler | (TIM_ExtTRGPolarity | (ExtTRGFilter << 8U))); + 8008c16: 4311 orrs r1, r2 +{ + 8008c18: b510 push {r4, lr} + tmpsmcr = TIMx->SMCR; + 8008c1a: 6884 ldr r4, [r0, #8] + tmpsmcr |= (uint32_t)(TIM_ExtTRGPrescaler | (TIM_ExtTRGPolarity | (ExtTRGFilter << 8U))); + 8008c1c: ea41 2303 orr.w r3, r1, r3, lsl #8 + tmpsmcr &= ~(TIM_SMCR_ETF | TIM_SMCR_ETPS | TIM_SMCR_ECE | TIM_SMCR_ETP); + 8008c20: f424 447f bic.w r4, r4, #65280 ; 0xff00 + tmpsmcr |= (uint32_t)(TIM_ExtTRGPrescaler | (TIM_ExtTRGPolarity | (ExtTRGFilter << 8U))); + 8008c24: 4323 orrs r3, r4 + + /* Write to TIMx SMCR */ + TIMx->SMCR = tmpsmcr; + 8008c26: 6083 str r3, [r0, #8] +} + 8008c28: bd10 pop {r4, pc} + ... + +08008c2c : +{ + 8008c2c: b538 push {r3, r4, r5, lr} + __HAL_LOCK(htim); + 8008c2e: f890 303c ldrb.w r3, [r0, #60] ; 0x3c +{ + 8008c32: 4604 mov r4, r0 + __HAL_LOCK(htim); + 8008c34: 2b01 cmp r3, #1 + 8008c36: f04f 0302 mov.w r3, #2 + 8008c3a: f000 808c beq.w 8008d56 + 8008c3e: 2201 movs r2, #1 + htim->State = HAL_TIM_STATE_BUSY; + 8008c40: f880 303d strb.w r3, [r0, #61] ; 0x3d + tmpsmcr &= ~(TIM_SMCR_ETF | TIM_SMCR_ETPS | TIM_SMCR_ECE | TIM_SMCR_ETP); + 8008c44: 4b45 ldr r3, [pc, #276] ; (8008d5c ) + __HAL_LOCK(htim); + 8008c46: f880 203c strb.w r2, [r0, #60] ; 0x3c + tmpsmcr = htim->Instance->SMCR; + 8008c4a: 6800 ldr r0, [r0, #0] + 8008c4c: 6885 ldr r5, [r0, #8] + tmpsmcr &= ~(TIM_SMCR_ETF | TIM_SMCR_ETPS | TIM_SMCR_ECE | TIM_SMCR_ETP); + 8008c4e: 402b ands r3, r5 + htim->Instance->SMCR = tmpsmcr; + 8008c50: 6083 str r3, [r0, #8] + switch (sClockSourceConfig->ClockSource) + 8008c52: 680b ldr r3, [r1, #0] + 8008c54: 2b60 cmp r3, #96 ; 0x60 + 8008c56: d04f beq.n 8008cf8 + 8008c58: d832 bhi.n 8008cc0 + 8008c5a: 2b40 cmp r3, #64 ; 0x40 + 8008c5c: d064 beq.n 8008d28 + 8008c5e: d816 bhi.n 8008c8e + 8008c60: 2b20 cmp r3, #32 + 8008c62: d00d beq.n 8008c80 + 8008c64: d80a bhi.n 8008c7c + 8008c66: f033 0110 bics.w r1, r3, #16 + 8008c6a: d009 beq.n 8008c80 + htim->State = HAL_TIM_STATE_READY; + 8008c6c: 2301 movs r3, #1 + 8008c6e: f884 303d strb.w r3, [r4, #61] ; 0x3d + __HAL_UNLOCK(htim); + 8008c72: 2300 movs r3, #0 + 8008c74: f884 303c strb.w r3, [r4, #60] ; 0x3c +} + 8008c78: 4610 mov r0, r2 + 8008c7a: bd38 pop {r3, r4, r5, pc} + switch (sClockSourceConfig->ClockSource) + 8008c7c: 2b30 cmp r3, #48 ; 0x30 + 8008c7e: d1f5 bne.n 8008c6c + tmpsmcr = TIMx->SMCR; + 8008c80: 6882 ldr r2, [r0, #8] + tmpsmcr &= ~TIM_SMCR_TS; + 8008c82: f022 0270 bic.w r2, r2, #112 ; 0x70 + tmpsmcr |= (InputTriggerSource | TIM_SLAVEMODE_EXTERNAL1); + 8008c86: 4313 orrs r3, r2 + 8008c88: f043 0307 orr.w r3, r3, #7 + 8008c8c: e028 b.n 8008ce0 + switch (sClockSourceConfig->ClockSource) + 8008c8e: 2b50 cmp r3, #80 ; 0x50 + 8008c90: d1ec bne.n 8008c6c + sClockSourceConfig->ClockPolarity, + 8008c92: 684a ldr r2, [r1, #4] + sClockSourceConfig->ClockFilter); + 8008c94: 68cd ldr r5, [r1, #12] + tmpccer = TIMx->CCER; + 8008c96: 6a01 ldr r1, [r0, #32] + TIMx->CCER &= ~TIM_CCER_CC1E; + 8008c98: 6a03 ldr r3, [r0, #32] + tmpccer &= ~(TIM_CCER_CC1P | TIM_CCER_CC1NP); + 8008c9a: f021 010a bic.w r1, r1, #10 + TIMx->CCER &= ~TIM_CCER_CC1E; + 8008c9e: f023 0301 bic.w r3, r3, #1 + tmpccer |= TIM_ICPolarity; + 8008ca2: 430a orrs r2, r1 + TIMx->CCER &= ~TIM_CCER_CC1E; + 8008ca4: 6203 str r3, [r0, #32] + tmpccmr1 = TIMx->CCMR1; + 8008ca6: 6983 ldr r3, [r0, #24] + tmpccmr1 &= ~TIM_CCMR1_IC1F; + 8008ca8: f023 03f0 bic.w r3, r3, #240 ; 0xf0 + tmpccmr1 |= (TIM_ICFilter << 4U); + 8008cac: ea43 1305 orr.w r3, r3, r5, lsl #4 + TIMx->CCMR1 = tmpccmr1; + 8008cb0: 6183 str r3, [r0, #24] + TIMx->CCER = tmpccer; + 8008cb2: 6202 str r2, [r0, #32] + tmpsmcr = TIMx->SMCR; + 8008cb4: 6883 ldr r3, [r0, #8] + tmpsmcr &= ~TIM_SMCR_TS; + 8008cb6: f023 0370 bic.w r3, r3, #112 ; 0x70 + tmpsmcr |= (InputTriggerSource | TIM_SLAVEMODE_EXTERNAL1); + 8008cba: f043 0357 orr.w r3, r3, #87 ; 0x57 + TIMx->SMCR = tmpsmcr; + 8008cbe: e00f b.n 8008ce0 + switch (sClockSourceConfig->ClockSource) + 8008cc0: f5b3 5f80 cmp.w r3, #4096 ; 0x1000 + 8008cc4: d00d beq.n 8008ce2 + 8008cc6: f5b3 5f00 cmp.w r3, #8192 ; 0x2000 + 8008cca: d00c beq.n 8008ce6 + 8008ccc: 2b70 cmp r3, #112 ; 0x70 + 8008cce: d1cd bne.n 8008c6c + TIM_ETR_SetConfig(htim->Instance, + 8008cd0: 68cb ldr r3, [r1, #12] + 8008cd2: e9d1 2101 ldrd r2, r1, [r1, #4] + 8008cd6: f7ff ff9e bl 8008c16 + tmpsmcr = htim->Instance->SMCR; + 8008cda: 6883 ldr r3, [r0, #8] + tmpsmcr |= (TIM_SLAVEMODE_EXTERNAL1 | TIM_CLOCKSOURCE_ETRMODE1); + 8008cdc: f043 0377 orr.w r3, r3, #119 ; 0x77 + TIMx->SMCR = tmpsmcr; + 8008ce0: 6083 str r3, [r0, #8] + HAL_StatusTypeDef status = HAL_OK; + 8008ce2: 2200 movs r2, #0 + 8008ce4: e7c2 b.n 8008c6c + TIM_ETR_SetConfig(htim->Instance, + 8008ce6: 68cb ldr r3, [r1, #12] + 8008ce8: e9d1 2101 ldrd r2, r1, [r1, #4] + 8008cec: f7ff ff93 bl 8008c16 + htim->Instance->SMCR |= TIM_SMCR_ECE; + 8008cf0: 6883 ldr r3, [r0, #8] + 8008cf2: f443 4380 orr.w r3, r3, #16384 ; 0x4000 + 8008cf6: e7f3 b.n 8008ce0 + TIMx->CCER &= ~TIM_CCER_CC2E; + 8008cf8: 6a03 ldr r3, [r0, #32] + sClockSourceConfig->ClockPolarity, + 8008cfa: 684d ldr r5, [r1, #4] + TIMx->CCER &= ~TIM_CCER_CC2E; + 8008cfc: f023 0310 bic.w r3, r3, #16 + sClockSourceConfig->ClockFilter); + 8008d00: 68c9 ldr r1, [r1, #12] + TIMx->CCER &= ~TIM_CCER_CC2E; + 8008d02: 6203 str r3, [r0, #32] + tmpccmr1 = TIMx->CCMR1; + 8008d04: 6982 ldr r2, [r0, #24] + tmpccer = TIMx->CCER; + 8008d06: 6a03 ldr r3, [r0, #32] + tmpccmr1 &= ~TIM_CCMR1_IC2F; + 8008d08: f422 4270 bic.w r2, r2, #61440 ; 0xf000 + tmpccer &= ~(TIM_CCER_CC2P | TIM_CCER_CC2NP); + 8008d0c: f023 03a0 bic.w r3, r3, #160 ; 0xa0 + tmpccmr1 |= (TIM_ICFilter << 12U); + 8008d10: ea42 3201 orr.w r2, r2, r1, lsl #12 + tmpccer |= (TIM_ICPolarity << 4U); + 8008d14: ea43 1305 orr.w r3, r3, r5, lsl #4 + TIMx->CCMR1 = tmpccmr1 ; + 8008d18: 6182 str r2, [r0, #24] + TIMx->CCER = tmpccer; + 8008d1a: 6203 str r3, [r0, #32] + tmpsmcr = TIMx->SMCR; + 8008d1c: 6883 ldr r3, [r0, #8] + tmpsmcr &= ~TIM_SMCR_TS; + 8008d1e: f023 0370 bic.w r3, r3, #112 ; 0x70 + tmpsmcr |= (InputTriggerSource | TIM_SLAVEMODE_EXTERNAL1); + 8008d22: f043 0367 orr.w r3, r3, #103 ; 0x67 + TIMx->SMCR = tmpsmcr; + 8008d26: e7db b.n 8008ce0 + sClockSourceConfig->ClockPolarity, + 8008d28: 684a ldr r2, [r1, #4] + sClockSourceConfig->ClockFilter); + 8008d2a: 68cd ldr r5, [r1, #12] + tmpccer = TIMx->CCER; + 8008d2c: 6a01 ldr r1, [r0, #32] + TIMx->CCER &= ~TIM_CCER_CC1E; + 8008d2e: 6a03 ldr r3, [r0, #32] + tmpccer &= ~(TIM_CCER_CC1P | TIM_CCER_CC1NP); + 8008d30: f021 010a bic.w r1, r1, #10 + TIMx->CCER &= ~TIM_CCER_CC1E; + 8008d34: f023 0301 bic.w r3, r3, #1 + tmpccer |= TIM_ICPolarity; + 8008d38: 430a orrs r2, r1 + TIMx->CCER &= ~TIM_CCER_CC1E; + 8008d3a: 6203 str r3, [r0, #32] + tmpccmr1 = TIMx->CCMR1; + 8008d3c: 6983 ldr r3, [r0, #24] + tmpccmr1 &= ~TIM_CCMR1_IC1F; + 8008d3e: f023 03f0 bic.w r3, r3, #240 ; 0xf0 + tmpccmr1 |= (TIM_ICFilter << 4U); + 8008d42: ea43 1305 orr.w r3, r3, r5, lsl #4 + TIMx->CCMR1 = tmpccmr1; + 8008d46: 6183 str r3, [r0, #24] + TIMx->CCER = tmpccer; + 8008d48: 6202 str r2, [r0, #32] + tmpsmcr = TIMx->SMCR; + 8008d4a: 6883 ldr r3, [r0, #8] + tmpsmcr &= ~TIM_SMCR_TS; + 8008d4c: f023 0370 bic.w r3, r3, #112 ; 0x70 + tmpsmcr |= (InputTriggerSource | TIM_SLAVEMODE_EXTERNAL1); + 8008d50: f043 0347 orr.w r3, r3, #71 ; 0x47 + TIMx->SMCR = tmpsmcr; + 8008d54: e7c4 b.n 8008ce0 + __HAL_LOCK(htim); + 8008d56: 461a mov r2, r3 + 8008d58: e78e b.n 8008c78 + 8008d5a: bf00 nop + 8008d5c: fffe0088 .word 0xfffe0088 + +08008d60 : + + /* Check the parameters */ + assert_param(IS_TIM_CC1_INSTANCE(TIMx)); + assert_param(IS_TIM_CHANNELS(Channel)); + + tmp = TIM_CCER_CC1E << (Channel & 0x1FU); /* 0x1FU = 31 bits max shift */ + 8008d60: f001 011f and.w r1, r1, #31 + + /* Reset the CCxE Bit */ + TIMx->CCER &= ~tmp; + 8008d64: 6a03 ldr r3, [r0, #32] +{ + 8008d66: b510 push {r4, lr} + tmp = TIM_CCER_CC1E << (Channel & 0x1FU); /* 0x1FU = 31 bits max shift */ + 8008d68: 2401 movs r4, #1 + + /* Set or reset the CCxE Bit */ + TIMx->CCER |= (uint32_t)(ChannelState << (Channel & 0x1FU)); /* 0x1FU = 31 bits max shift */ + 8008d6a: 408a lsls r2, r1 + tmp = TIM_CCER_CC1E << (Channel & 0x1FU); /* 0x1FU = 31 bits max shift */ + 8008d6c: 408c lsls r4, r1 + TIMx->CCER &= ~tmp; + 8008d6e: ea23 0304 bic.w r3, r3, r4 + 8008d72: 6203 str r3, [r0, #32] + TIMx->CCER |= (uint32_t)(ChannelState << (Channel & 0x1FU)); /* 0x1FU = 31 bits max shift */ + 8008d74: 6a03 ldr r3, [r0, #32] + 8008d76: 431a orrs r2, r3 + 8008d78: 6202 str r2, [r0, #32] +} + 8008d7a: bd10 pop {r4, pc} + +08008d7c : + if (TIM_CHANNEL_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY) + 8008d7c: 2908 cmp r1, #8 +{ + 8008d7e: b508 push {r3, lr} + 8008d80: d025 beq.n 8008dce + 8008d82: d80f bhi.n 8008da4 + 8008d84: b1a9 cbz r1, 8008db2 + 8008d86: 2904 cmp r1, #4 + 8008d88: d019 beq.n 8008dbe + if (TIM_CHANNEL_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY) + 8008d8a: f890 3043 ldrb.w r3, [r0, #67] ; 0x43 + 8008d8e: 2b01 cmp r3, #1 + 8008d90: d113 bne.n 8008dba + 8008d92: 2908 cmp r1, #8 + 8008d94: d82b bhi.n 8008dee + 8008d96: b399 cbz r1, 8008e00 + 8008d98: 2904 cmp r1, #4 + 8008d9a: d014 beq.n 8008dc6 + TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); + 8008d9c: 2302 movs r3, #2 + 8008d9e: f880 3043 strb.w r3, [r0, #67] ; 0x43 + 8008da2: e030 b.n 8008e06 + 8008da4: 290c cmp r1, #12 + 8008da6: d01f beq.n 8008de8 + 8008da8: 2910 cmp r1, #16 + 8008daa: d1ee bne.n 8008d8a + if (TIM_CHANNEL_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY) + 8008dac: f890 3042 ldrb.w r3, [r0, #66] ; 0x42 + 8008db0: e00f b.n 8008dd2 + 8008db2: f890 303e ldrb.w r3, [r0, #62] ; 0x3e + 8008db6: 2b01 cmp r3, #1 + 8008db8: d022 beq.n 8008e00 + return HAL_ERROR; + 8008dba: 2001 movs r0, #1 + 8008dbc: e036 b.n 8008e2c + if (TIM_CHANNEL_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY) + 8008dbe: f890 303f ldrb.w r3, [r0, #63] ; 0x3f + 8008dc2: 2b01 cmp r3, #1 + 8008dc4: d1f9 bne.n 8008dba + TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); + 8008dc6: 2302 movs r3, #2 + 8008dc8: f880 303f strb.w r3, [r0, #63] ; 0x3f + 8008dcc: e01b b.n 8008e06 + if (TIM_CHANNEL_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY) + 8008dce: f890 3040 ldrb.w r3, [r0, #64] ; 0x40 + 8008dd2: 3b01 subs r3, #1 + 8008dd4: bf18 it ne + 8008dd6: 2301 movne r3, #1 + 8008dd8: 2b00 cmp r3, #0 + 8008dda: d1ee bne.n 8008dba + TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); + 8008ddc: 2908 cmp r1, #8 + 8008dde: d1d8 bne.n 8008d92 + 8008de0: 2302 movs r3, #2 + 8008de2: f880 3040 strb.w r3, [r0, #64] ; 0x40 + 8008de6: e00e b.n 8008e06 + if (TIM_CHANNEL_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY) + 8008de8: f890 3041 ldrb.w r3, [r0, #65] ; 0x41 + 8008dec: e7f1 b.n 8008dd2 + 8008dee: 290c cmp r1, #12 + 8008df0: f04f 0302 mov.w r3, #2 + 8008df4: d01b beq.n 8008e2e + 8008df6: 2910 cmp r1, #16 + 8008df8: d1d0 bne.n 8008d9c + TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); + 8008dfa: f880 3042 strb.w r3, [r0, #66] ; 0x42 + 8008dfe: e002 b.n 8008e06 + 8008e00: 2302 movs r3, #2 + 8008e02: f880 303e strb.w r3, [r0, #62] ; 0x3e + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE); + 8008e06: 6800 ldr r0, [r0, #0] + 8008e08: 2201 movs r2, #1 + 8008e0a: f7ff ffa9 bl 8008d60 + if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) + 8008e0e: 4a1d ldr r2, [pc, #116] ; (8008e84 ) + 8008e10: 4290 cmp r0, r2 + 8008e12: d00f beq.n 8008e34 + 8008e14: 4b1c ldr r3, [pc, #112] ; (8008e88 ) + 8008e16: 4298 cmp r0, r3 + 8008e18: d00c beq.n 8008e34 + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + 8008e1a: f1b0 4f80 cmp.w r0, #1073741824 ; 0x40000000 + 8008e1e: d110 bne.n 8008e42 + tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; + 8008e20: 6882 ldr r2, [r0, #8] + 8008e22: 4b1a ldr r3, [pc, #104] ; (8008e8c ) + 8008e24: 4013 ands r3, r2 + if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) + 8008e26: 2b06 cmp r3, #6 + 8008e28: d127 bne.n 8008e7a + return HAL_OK; + 8008e2a: 2000 movs r0, #0 +} + 8008e2c: bd08 pop {r3, pc} + TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); + 8008e2e: f880 3041 strb.w r3, [r0, #65] ; 0x41 + 8008e32: e7e8 b.n 8008e06 + __HAL_TIM_MOE_ENABLE(htim); + 8008e34: 6c43 ldr r3, [r0, #68] ; 0x44 + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + 8008e36: 4290 cmp r0, r2 + __HAL_TIM_MOE_ENABLE(htim); + 8008e38: f443 4300 orr.w r3, r3, #32768 ; 0x8000 + 8008e3c: 6443 str r3, [r0, #68] ; 0x44 + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + 8008e3e: d0ef beq.n 8008e20 + 8008e40: e7eb b.n 8008e1a + 8008e42: 4b13 ldr r3, [pc, #76] ; (8008e90 ) + 8008e44: 4298 cmp r0, r3 + 8008e46: d0eb beq.n 8008e20 + 8008e48: f503 6380 add.w r3, r3, #1024 ; 0x400 + 8008e4c: 4298 cmp r0, r3 + 8008e4e: d0e7 beq.n 8008e20 + 8008e50: f503 6380 add.w r3, r3, #1024 ; 0x400 + 8008e54: 4298 cmp r0, r3 + 8008e56: d0e3 beq.n 8008e20 + 8008e58: f503 4378 add.w r3, r3, #63488 ; 0xf800 + 8008e5c: 4298 cmp r0, r3 + 8008e5e: d0df beq.n 8008e20 + 8008e60: f503 5370 add.w r3, r3, #15360 ; 0x3c00 + 8008e64: 4298 cmp r0, r3 + 8008e66: d0db beq.n 8008e20 + 8008e68: f5a3 3394 sub.w r3, r3, #75776 ; 0x12800 + 8008e6c: 4298 cmp r0, r3 + 8008e6e: d0d7 beq.n 8008e20 + __HAL_TIM_ENABLE(htim); + 8008e70: 6803 ldr r3, [r0, #0] + 8008e72: f043 0301 orr.w r3, r3, #1 + 8008e76: 6003 str r3, [r0, #0] + 8008e78: e7d7 b.n 8008e2a + if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) + 8008e7a: f5b3 3f80 cmp.w r3, #65536 ; 0x10000 + 8008e7e: d1f7 bne.n 8008e70 + 8008e80: e7d3 b.n 8008e2a + 8008e82: bf00 nop + 8008e84: 40010000 .word 0x40010000 + 8008e88: 40010400 .word 0x40010400 + 8008e8c: 00010007 .word 0x00010007 + 8008e90: 40000400 .word 0x40000400 + +08008e94 : + 8008e94: f7ff bf72 b.w 8008d7c + +08008e98 : + * mode. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim, + const TIM_MasterConfigTypeDef *sMasterConfig) +{ + 8008e98: b570 push {r4, r5, r6, lr} + assert_param(IS_TIM_MASTER_INSTANCE(htim->Instance)); + assert_param(IS_TIM_TRGO_SOURCE(sMasterConfig->MasterOutputTrigger)); + assert_param(IS_TIM_MSM_STATE(sMasterConfig->MasterSlaveMode)); + + /* Check input state */ + __HAL_LOCK(htim); + 8008e9a: f890 303c ldrb.w r3, [r0, #60] ; 0x3c + 8008e9e: 2b01 cmp r3, #1 + 8008ea0: f04f 0302 mov.w r3, #2 + 8008ea4: d03b beq.n 8008f1e + + /* Change the handler state */ + htim->State = HAL_TIM_STATE_BUSY; + 8008ea6: f880 303d strb.w r3, [r0, #61] ; 0x3d + + /* Get the TIMx SMCR register value */ + tmpsmcr = htim->Instance->SMCR; + + /* If the timer supports ADC synchronization through TRGO2, set the master mode selection 2 */ + if (IS_TIM_TRGO2_INSTANCE(htim->Instance)) + 8008eaa: 4d1e ldr r5, [pc, #120] ; (8008f24 ) + tmpcr2 = htim->Instance->CR2; + 8008eac: 6803 ldr r3, [r0, #0] + if (IS_TIM_TRGO2_INSTANCE(htim->Instance)) + 8008eae: 42ab cmp r3, r5 + tmpcr2 = htim->Instance->CR2; + 8008eb0: 685a ldr r2, [r3, #4] + tmpsmcr = htim->Instance->SMCR; + 8008eb2: 689c ldr r4, [r3, #8] + if (IS_TIM_TRGO2_INSTANCE(htim->Instance)) + 8008eb4: d002 beq.n 8008ebc + 8008eb6: 4e1c ldr r6, [pc, #112] ; (8008f28 ) + 8008eb8: 42b3 cmp r3, r6 + 8008eba: d103 bne.n 8008ec4 + { + /* Check the parameters */ + assert_param(IS_TIM_TRGO2_SOURCE(sMasterConfig->MasterOutputTrigger2)); + + /* Clear the MMS2 bits */ + tmpcr2 &= ~TIM_CR2_MMS2; + 8008ebc: f422 0270 bic.w r2, r2, #15728640 ; 0xf00000 + /* Select the TRGO2 source*/ + tmpcr2 |= sMasterConfig->MasterOutputTrigger2; + 8008ec0: 684e ldr r6, [r1, #4] + 8008ec2: 4332 orrs r2, r6 + } + + /* Reset the MMS Bits */ + tmpcr2 &= ~TIM_CR2_MMS; + /* Select the TRGO source */ + tmpcr2 |= sMasterConfig->MasterOutputTrigger; + 8008ec4: 680e ldr r6, [r1, #0] + tmpcr2 &= ~TIM_CR2_MMS; + 8008ec6: f022 0270 bic.w r2, r2, #112 ; 0x70 + + /* Update TIMx CR2 */ + htim->Instance->CR2 = tmpcr2; + + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + 8008eca: 42ab cmp r3, r5 + tmpcr2 |= sMasterConfig->MasterOutputTrigger; + 8008ecc: ea42 0206 orr.w r2, r2, r6 + htim->Instance->CR2 = tmpcr2; + 8008ed0: 605a str r2, [r3, #4] + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + 8008ed2: d019 beq.n 8008f08 + 8008ed4: f1b3 4f80 cmp.w r3, #1073741824 ; 0x40000000 + 8008ed8: d016 beq.n 8008f08 + 8008eda: 4a14 ldr r2, [pc, #80] ; (8008f2c ) + 8008edc: 4293 cmp r3, r2 + 8008ede: d013 beq.n 8008f08 + 8008ee0: f502 6280 add.w r2, r2, #1024 ; 0x400 + 8008ee4: 4293 cmp r3, r2 + 8008ee6: d00f beq.n 8008f08 + 8008ee8: f502 6280 add.w r2, r2, #1024 ; 0x400 + 8008eec: 4293 cmp r3, r2 + 8008eee: d00b beq.n 8008f08 + 8008ef0: f502 4278 add.w r2, r2, #63488 ; 0xf800 + 8008ef4: 4293 cmp r3, r2 + 8008ef6: d007 beq.n 8008f08 + 8008ef8: f502 5270 add.w r2, r2, #15360 ; 0x3c00 + 8008efc: 4293 cmp r3, r2 + 8008efe: d003 beq.n 8008f08 + 8008f00: f5a2 3294 sub.w r2, r2, #75776 ; 0x12800 + 8008f04: 4293 cmp r3, r2 + 8008f06: d104 bne.n 8008f12 + { + /* Reset the MSM Bit */ + tmpsmcr &= ~TIM_SMCR_MSM; + /* Set master mode */ + tmpsmcr |= sMasterConfig->MasterSlaveMode; + 8008f08: 6889 ldr r1, [r1, #8] + tmpsmcr &= ~TIM_SMCR_MSM; + 8008f0a: f024 0280 bic.w r2, r4, #128 ; 0x80 + tmpsmcr |= sMasterConfig->MasterSlaveMode; + 8008f0e: 430a orrs r2, r1 + + /* Update TIMx SMCR */ + htim->Instance->SMCR = tmpsmcr; + 8008f10: 609a str r2, [r3, #8] + } + + /* Change the htim state */ + htim->State = HAL_TIM_STATE_READY; + 8008f12: 2301 movs r3, #1 + 8008f14: f880 303d strb.w r3, [r0, #61] ; 0x3d + + __HAL_UNLOCK(htim); + 8008f18: 2300 movs r3, #0 + 8008f1a: f880 303c strb.w r3, [r0, #60] ; 0x3c + __HAL_LOCK(htim); + 8008f1e: 4618 mov r0, r3 + + return HAL_OK; +} + 8008f20: bd70 pop {r4, r5, r6, pc} + 8008f22: bf00 nop + 8008f24: 40010000 .word 0x40010000 + 8008f28: 40010400 .word 0x40010400 + 8008f2c: 40000400 .word 0x40000400 + +08008f30 : + * interrupt can be enabled by calling the @ref __HAL_TIM_ENABLE_IT macro. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_ConfigBreakDeadTime(TIM_HandleTypeDef *htim, + const TIM_BreakDeadTimeConfigTypeDef *sBreakDeadTimeConfig) +{ + 8008f30: b510 push {r4, lr} + assert_param(IS_TIM_BREAK_POLARITY(sBreakDeadTimeConfig->BreakPolarity)); + assert_param(IS_TIM_BREAK_FILTER(sBreakDeadTimeConfig->BreakFilter)); + assert_param(IS_TIM_AUTOMATIC_OUTPUT_STATE(sBreakDeadTimeConfig->AutomaticOutput)); + + /* Check input state */ + __HAL_LOCK(htim); + 8008f32: f890 303c ldrb.w r3, [r0, #60] ; 0x3c + 8008f36: 2b01 cmp r3, #1 + 8008f38: d038 beq.n 8008fac + /* Set the Lock level, the Break enable Bit and the Polarity, the OSSR State, + the OSSI State, the dead time value and the Automatic Output Enable Bit */ + + /* Set the BDTR bits */ + MODIFY_REG(tmpbdtr, TIM_BDTR_DTG, sBreakDeadTimeConfig->DeadTime); + MODIFY_REG(tmpbdtr, TIM_BDTR_LOCK, sBreakDeadTimeConfig->LockLevel); + 8008f3a: 68cb ldr r3, [r1, #12] + 8008f3c: 688a ldr r2, [r1, #8] + 8008f3e: f423 7340 bic.w r3, r3, #768 ; 0x300 + MODIFY_REG(tmpbdtr, TIM_BDTR_BKE, sBreakDeadTimeConfig->BreakState); + MODIFY_REG(tmpbdtr, TIM_BDTR_BKP, sBreakDeadTimeConfig->BreakPolarity); + MODIFY_REG(tmpbdtr, TIM_BDTR_AOE, sBreakDeadTimeConfig->AutomaticOutput); + MODIFY_REG(tmpbdtr, TIM_BDTR_BKF, (sBreakDeadTimeConfig->BreakFilter << TIM_BDTR_BKF_Pos)); + + if (IS_TIM_BKIN2_INSTANCE(htim->Instance)) + 8008f42: 4c1b ldr r4, [pc, #108] ; (8008fb0 ) + MODIFY_REG(tmpbdtr, TIM_BDTR_LOCK, sBreakDeadTimeConfig->LockLevel); + 8008f44: 4313 orrs r3, r2 + MODIFY_REG(tmpbdtr, TIM_BDTR_OSSI, sBreakDeadTimeConfig->OffStateIDLEMode); + 8008f46: 684a ldr r2, [r1, #4] + 8008f48: f423 6380 bic.w r3, r3, #1024 ; 0x400 + 8008f4c: 4313 orrs r3, r2 + MODIFY_REG(tmpbdtr, TIM_BDTR_OSSR, sBreakDeadTimeConfig->OffStateRunMode); + 8008f4e: 680a ldr r2, [r1, #0] + 8008f50: f423 6300 bic.w r3, r3, #2048 ; 0x800 + 8008f54: 4313 orrs r3, r2 + MODIFY_REG(tmpbdtr, TIM_BDTR_BKE, sBreakDeadTimeConfig->BreakState); + 8008f56: 690a ldr r2, [r1, #16] + 8008f58: f423 5380 bic.w r3, r3, #4096 ; 0x1000 + 8008f5c: 4313 orrs r3, r2 + MODIFY_REG(tmpbdtr, TIM_BDTR_BKP, sBreakDeadTimeConfig->BreakPolarity); + 8008f5e: 694a ldr r2, [r1, #20] + 8008f60: f423 5300 bic.w r3, r3, #8192 ; 0x2000 + 8008f64: 4313 orrs r3, r2 + MODIFY_REG(tmpbdtr, TIM_BDTR_AOE, sBreakDeadTimeConfig->AutomaticOutput); + 8008f66: 6a8a ldr r2, [r1, #40] ; 0x28 + 8008f68: f423 4380 bic.w r3, r3, #16384 ; 0x4000 + 8008f6c: 4313 orrs r3, r2 + MODIFY_REG(tmpbdtr, TIM_BDTR_BKF, (sBreakDeadTimeConfig->BreakFilter << TIM_BDTR_BKF_Pos)); + 8008f6e: 698a ldr r2, [r1, #24] + 8008f70: f423 2370 bic.w r3, r3, #983040 ; 0xf0000 + 8008f74: ea43 4302 orr.w r3, r3, r2, lsl #16 + if (IS_TIM_BKIN2_INSTANCE(htim->Instance)) + 8008f78: 6802 ldr r2, [r0, #0] + 8008f7a: 42a2 cmp r2, r4 + 8008f7c: d003 beq.n 8008f86 + 8008f7e: f504 6480 add.w r4, r4, #1024 ; 0x400 + 8008f82: 42a2 cmp r2, r4 + 8008f84: d10c bne.n 8008fa0 + assert_param(IS_TIM_BREAK2_STATE(sBreakDeadTimeConfig->Break2State)); + assert_param(IS_TIM_BREAK2_POLARITY(sBreakDeadTimeConfig->Break2Polarity)); + assert_param(IS_TIM_BREAK_FILTER(sBreakDeadTimeConfig->Break2Filter)); + + /* Set the BREAK2 input related BDTR bits */ + MODIFY_REG(tmpbdtr, TIM_BDTR_BK2F, (sBreakDeadTimeConfig->Break2Filter << TIM_BDTR_BK2F_Pos)); + 8008f86: 6a4c ldr r4, [r1, #36] ; 0x24 + 8008f88: f423 0370 bic.w r3, r3, #15728640 ; 0xf00000 + 8008f8c: ea43 5304 orr.w r3, r3, r4, lsl #20 + MODIFY_REG(tmpbdtr, TIM_BDTR_BK2E, sBreakDeadTimeConfig->Break2State); + 8008f90: 69cc ldr r4, [r1, #28] + MODIFY_REG(tmpbdtr, TIM_BDTR_BK2P, sBreakDeadTimeConfig->Break2Polarity); + 8008f92: 6a09 ldr r1, [r1, #32] + MODIFY_REG(tmpbdtr, TIM_BDTR_BK2E, sBreakDeadTimeConfig->Break2State); + 8008f94: f023 7380 bic.w r3, r3, #16777216 ; 0x1000000 + 8008f98: 4323 orrs r3, r4 + MODIFY_REG(tmpbdtr, TIM_BDTR_BK2P, sBreakDeadTimeConfig->Break2Polarity); + 8008f9a: f023 7300 bic.w r3, r3, #33554432 ; 0x2000000 + 8008f9e: 430b orrs r3, r1 + } + + /* Set TIMx_BDTR */ + htim->Instance->BDTR = tmpbdtr; + 8008fa0: 6453 str r3, [r2, #68] ; 0x44 + + __HAL_UNLOCK(htim); + 8008fa2: 2300 movs r3, #0 + 8008fa4: f880 303c strb.w r3, [r0, #60] ; 0x3c + + return HAL_OK; + 8008fa8: 4618 mov r0, r3 +} + 8008faa: bd10 pop {r4, pc} + __HAL_LOCK(htim); + 8008fac: 2002 movs r0, #2 + 8008fae: e7fc b.n 8008faa + 8008fb0: 40010000 .word 0x40010000 + +08008fb4 : + 8008fb4: 4770 bx lr + +08008fb6 : + 8008fb6: 4770 bx lr + +08008fb8 : + 8008fb8: 4770 bx lr + +08008fba : + * @param Device Pointer to SDRAM device instance + * @param Init Pointer to SDRAM Initialization structure + * @retval HAL status + */ +HAL_StatusTypeDef FMC_SDRAM_Init(FMC_SDRAM_TypeDef *Device, FMC_SDRAM_InitTypeDef *Init) +{ + 8008fba: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} + assert_param(IS_FMC_READPIPE_DELAY(Init->ReadPipeDelay)); + + /* Set SDRAM bank configuration parameters */ + if (Init->SDBank == FMC_SDRAM_BANK1) + { + MODIFY_REG(Device->SDCR[FMC_SDRAM_BANK1], + 8008fbe: e9d1 2c01 ldrd r2, ip, [r1, #4] + 8008fc2: e9d1 3807 ldrd r3, r8, [r1, #28] + 8008fc6: f8d1 e024 ldr.w lr, [r1, #36] ; 0x24 + 8008fca: ea43 0308 orr.w r3, r3, r8 + 8008fce: e9d1 7603 ldrd r7, r6, [r1, #12] + 8008fd2: e9d1 5405 ldrd r5, r4, [r1, #20] + if (Init->SDBank == FMC_SDRAM_BANK1) + 8008fd6: 6809 ldr r1, [r1, #0] + 8008fd8: b991 cbnz r1, 8009000 + MODIFY_REG(Device->SDCR[FMC_SDRAM_BANK1], + 8008fda: ea43 030e orr.w r3, r3, lr + 8008fde: 6801 ldr r1, [r0, #0] + 8008fe0: 4313 orrs r3, r2 + 8008fe2: f421 41ff bic.w r1, r1, #32640 ; 0x7f80 + 8008fe6: ea43 030c orr.w r3, r3, ip + 8008fea: f021 017f bic.w r1, r1, #127 ; 0x7f + 8008fee: 433b orrs r3, r7 + 8008ff0: 4333 orrs r3, r6 + 8008ff2: 432b orrs r3, r5 + 8008ff4: 4323 orrs r3, r4 + 8008ff6: 430b orrs r3, r1 + 8008ff8: 6003 str r3, [r0, #0] + Init->CASLatency | + Init->WriteProtection)); + } + + return HAL_OK; +} + 8008ffa: 2000 movs r0, #0 + 8008ffc: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + MODIFY_REG(Device->SDCR[FMC_SDRAM_BANK1], + 8009000: 6801 ldr r1, [r0, #0] + 8009002: ea43 030e orr.w r3, r3, lr + 8009006: f421 41f8 bic.w r1, r1, #31744 ; 0x7c00 + 800900a: 430b orrs r3, r1 + 800900c: 6003 str r3, [r0, #0] + MODIFY_REG(Device->SDCR[FMC_SDRAM_BANK2], + 800900e: ea42 030c orr.w r3, r2, ip + 8009012: 6841 ldr r1, [r0, #4] + 8009014: 433b orrs r3, r7 + 8009016: f421 42ff bic.w r2, r1, #32640 ; 0x7f80 + 800901a: 4333 orrs r3, r6 + 800901c: f022 027f bic.w r2, r2, #127 ; 0x7f + 8009020: 432b orrs r3, r5 + 8009022: 4323 orrs r3, r4 + 8009024: 4313 orrs r3, r2 + 8009026: 6043 str r3, [r0, #4] + 8009028: e7e7 b.n 8008ffa + +0800902a : + assert_param(IS_FMC_SDRAM_BANK(Bank)); + + /* Set SDRAM device timing parameters */ + if (Bank == FMC_SDRAM_BANK1) + { + MODIFY_REG(Device->SDTR[FMC_SDRAM_BANK1], + 800902a: 68cb ldr r3, [r1, #12] + 800902c: f103 3cff add.w ip, r3, #4294967295 + 8009030: 694b ldr r3, [r1, #20] +{ + 8009032: b5f0 push {r4, r5, r6, r7, lr} + MODIFY_REG(Device->SDTR[FMC_SDRAM_BANK1], + 8009034: 3b01 subs r3, #1 + 8009036: 680f ldr r7, [r1, #0] + 8009038: 684c ldr r4, [r1, #4] + 800903a: 688e ldr r6, [r1, #8] + 800903c: 051b lsls r3, r3, #20 + 800903e: 690d ldr r5, [r1, #16] + 8009040: 3c01 subs r4, #1 + 8009042: 6989 ldr r1, [r1, #24] + 8009044: 3e01 subs r6, #1 + 8009046: 3d01 subs r5, #1 + 8009048: 3f01 subs r7, #1 + 800904a: 3901 subs r1, #1 + 800904c: 0124 lsls r4, r4, #4 + 800904e: 0236 lsls r6, r6, #8 + 8009050: 042d lsls r5, r5, #16 + 8009052: 0609 lsls r1, r1, #24 + 8009054: ea43 330c orr.w r3, r3, ip, lsl #12 + if (Bank == FMC_SDRAM_BANK1) + 8009058: b95a cbnz r2, 8009072 + MODIFY_REG(Device->SDTR[FMC_SDRAM_BANK1], + 800905a: 433b orrs r3, r7 + 800905c: 6882 ldr r2, [r0, #8] + 800905e: 4323 orrs r3, r4 + 8009060: f002 4270 and.w r2, r2, #4026531840 ; 0xf0000000 + 8009064: 4333 orrs r3, r6 + 8009066: 432b orrs r3, r5 + 8009068: 430b orrs r3, r1 + 800906a: 4313 orrs r3, r2 + 800906c: 6083 str r3, [r0, #8] + (((Timing->WriteRecoveryTime) - 1U) << FMC_SDTR1_TWR_Pos) | + (((Timing->RCDDelay) - 1U) << FMC_SDTR1_TRCD_Pos))); + } + + return HAL_OK; +} + 800906e: 2000 movs r0, #0 + 8009070: bdf0 pop {r4, r5, r6, r7, pc} + MODIFY_REG(Device->SDTR[FMC_SDRAM_BANK1], + 8009072: 6882 ldr r2, [r0, #8] + 8009074: f422 0270 bic.w r2, r2, #15728640 ; 0xf00000 + 8009078: f422 4270 bic.w r2, r2, #61440 ; 0xf000 + 800907c: 431a orrs r2, r3 + MODIFY_REG(Device->SDTR[FMC_SDRAM_BANK2], + 800907e: ea44 0306 orr.w r3, r4, r6 + 8009082: 433b orrs r3, r7 + MODIFY_REG(Device->SDTR[FMC_SDRAM_BANK1], + 8009084: 6082 str r2, [r0, #8] + MODIFY_REG(Device->SDTR[FMC_SDRAM_BANK2], + 8009086: 68c2 ldr r2, [r0, #12] + 8009088: 432b orrs r3, r5 + 800908a: f002 4270 and.w r2, r2, #4026531840 ; 0xf0000000 + 800908e: 430b orrs r3, r1 + 8009090: 4313 orrs r3, r2 + 8009092: 60c3 str r3, [r0, #12] + 8009094: e7eb b.n 800906e + +08009096 : + assert_param(IS_FMC_COMMAND_TARGET(Command->CommandTarget)); + assert_param(IS_FMC_AUTOREFRESH_NUMBER(Command->AutoRefreshNumber)); + assert_param(IS_FMC_MODE_REGISTER(Command->ModeRegisterDefinition)); + + /* Set command register */ + MODIFY_REG(Device->SDCMR, (FMC_SDCMR_MODE | FMC_SDCMR_CTB2 | FMC_SDCMR_CTB1 | FMC_SDCMR_NRFS | FMC_SDCMR_MRD), + 8009096: 6902 ldr r2, [r0, #16] +{ + 8009098: b510 push {r4, lr} + MODIFY_REG(Device->SDCMR, (FMC_SDCMR_MODE | FMC_SDCMR_CTB2 | FMC_SDCMR_CTB1 | FMC_SDCMR_NRFS | FMC_SDCMR_MRD), + 800909a: e9d1 3400 ldrd r3, r4, [r1] + 800909e: 0d92 lsrs r2, r2, #22 + 80090a0: 4323 orrs r3, r4 + 80090a2: 68cc ldr r4, [r1, #12] + 80090a4: 0592 lsls r2, r2, #22 + 80090a6: ea43 2344 orr.w r3, r3, r4, lsl #9 + 80090aa: 4313 orrs r3, r2 + 80090ac: 688a ldr r2, [r1, #8] + 80090ae: 3a01 subs r2, #1 + 80090b0: ea43 1342 orr.w r3, r3, r2, lsl #5 + 80090b4: 6103 str r3, [r0, #16] + (((Command->AutoRefreshNumber) - 1U) << FMC_SDCMR_NRFS_Pos) | + ((Command->ModeRegisterDefinition) << FMC_SDCMR_MRD_Pos))); + /* Prevent unused argument(s) compilation warning */ + UNUSED(Timeout); + return HAL_OK; +} + 80090b6: 2000 movs r0, #0 + 80090b8: bd10 pop {r4, pc} + +080090ba : + /* Check the parameters */ + assert_param(IS_FMC_SDRAM_DEVICE(Device)); + assert_param(IS_FMC_REFRESH_RATE(RefreshRate)); + + /* Set the refresh rate in command register */ + MODIFY_REG(Device->SDRTR, FMC_SDRTR_COUNT, (RefreshRate << FMC_SDRTR_COUNT_Pos)); + 80090ba: 6943 ldr r3, [r0, #20] + 80090bc: f423 537f bic.w r3, r3, #16320 ; 0x3fc0 + 80090c0: f023 033e bic.w r3, r3, #62 ; 0x3e + 80090c4: ea43 0141 orr.w r1, r3, r1, lsl #1 + 80090c8: 6141 str r1, [r0, #20] + + return HAL_OK; +} + 80090ca: 2000 movs r0, #0 + 80090cc: 4770 bx lr + ... + +080090d0 : + __ASM volatile ("MRS %0, ipsr" : "=r" (result) ); + 80090d0: f3ef 8305 mrs r3, IPSR +/*---------------------------------------------------------------------------*/ + +osStatus_t osKernelInitialize (void) { + osStatus_t stat; + + if (IS_IRQ()) { + 80090d4: b113 cbz r3, 80090dc + stat = osErrorISR; + 80090d6: f06f 0005 mvn.w r0, #5 + 80090da: 4770 bx lr + __ASM volatile ("MRS %0, primask" : "=r" (result) :: "memory"); + 80090dc: f3ef 8210 mrs r2, PRIMASK + return(result); + 80090e0: 4b07 ldr r3, [pc, #28] ; (8009100 ) + if (IS_IRQ()) { + 80090e2: b912 cbnz r2, 80090ea + __ASM volatile ("MRS %0, basepri" : "=r" (result) ); + 80090e4: f3ef 8211 mrs r2, BASEPRI + 80090e8: b112 cbz r2, 80090f0 + 80090ea: 681a ldr r2, [r3, #0] + 80090ec: 2a02 cmp r2, #2 + 80090ee: d0f2 beq.n 80090d6 + } + else { + if (KernelState == osKernelInactive) { + 80090f0: 6818 ldr r0, [r3, #0] + 80090f2: b910 cbnz r0, 80090fa + #if defined(USE_FREERTOS_HEAP_5) && (HEAP_5_REGION_SETUP == 1) + vPortDefineHeapRegions (configHEAP_5_REGIONS); + #endif + KernelState = osKernelReady; + 80090f4: 2201 movs r2, #1 + 80090f6: 601a str r2, [r3, #0] + stat = osOK; + 80090f8: 4770 bx lr + } else { + stat = osError; + 80090fa: f04f 30ff mov.w r0, #4294967295 + } + } + + return (stat); +} + 80090fe: 4770 bx lr + 8009100: 20007e28 .word 0x20007e28 + +08009104 : + } + + return (state); +} + +osStatus_t osKernelStart (void) { + 8009104: b508 push {r3, lr} + __ASM volatile ("MRS %0, ipsr" : "=r" (result) ); + 8009106: f3ef 8305 mrs r3, IPSR + osStatus_t stat; + + if (IS_IRQ()) { + 800910a: b113 cbz r3, 8009112 + stat = osErrorISR; + 800910c: f06f 0005 mvn.w r0, #5 + stat = osError; + } + } + + return (stat); +} + 8009110: bd08 pop {r3, pc} + __ASM volatile ("MRS %0, primask" : "=r" (result) :: "memory"); + 8009112: f3ef 8210 mrs r2, PRIMASK + return(result); + 8009116: 4b0a ldr r3, [pc, #40] ; (8009140 ) + if (IS_IRQ()) { + 8009118: b912 cbnz r2, 8009120 + __ASM volatile ("MRS %0, basepri" : "=r" (result) ); + 800911a: f3ef 8211 mrs r2, BASEPRI + 800911e: b112 cbz r2, 8009126 + 8009120: 681a ldr r2, [r3, #0] + 8009122: 2a02 cmp r2, #2 + 8009124: d0f2 beq.n 800910c + if (KernelState == osKernelReady) { + 8009126: 681a ldr r2, [r3, #0] + 8009128: 2a01 cmp r2, #1 + 800912a: d105 bne.n 8009138 + KernelState = osKernelRunning; + 800912c: 2202 movs r2, #2 + 800912e: 601a str r2, [r3, #0] + vTaskStartScheduler(); + 8009130: f001 fe96 bl 800ae60 + stat = osOK; + 8009134: 2000 movs r0, #0 + 8009136: e7eb b.n 8009110 + stat = osError; + 8009138: f04f 30ff mov.w r0, #4294967295 + return (stat); + 800913c: e7e8 b.n 8009110 + 800913e: bf00 nop + 8009140: 20007e28 .word 0x20007e28 + +08009144 : + __ASM volatile ("MRS %0, ipsr" : "=r" (result) ); + 8009144: f3ef 8305 mrs r3, IPSR +} + +uint32_t osKernelGetTickCount (void) { + TickType_t ticks; + + if (IS_IRQ()) { + 8009148: b10b cbz r3, 800914e + ticks = xTaskGetTickCountFromISR(); + 800914a: f001 bd31 b.w 800abb0 + __ASM volatile ("MRS %0, primask" : "=r" (result) :: "memory"); + 800914e: f3ef 8310 mrs r3, PRIMASK + if (IS_IRQ()) { + 8009152: b913 cbnz r3, 800915a + __ASM volatile ("MRS %0, basepri" : "=r" (result) ); + 8009154: f3ef 8311 mrs r3, BASEPRI + 8009158: b11b cbz r3, 8009162 + 800915a: 4b03 ldr r3, [pc, #12] ; (8009168 ) + 800915c: 681b ldr r3, [r3, #0] + 800915e: 2b02 cmp r3, #2 + 8009160: d0f3 beq.n 800914a + } else { + ticks = xTaskGetTickCount(); + 8009162: f001 bd1f b.w 800aba4 + 8009166: bf00 nop + 8009168: 20007e28 .word 0x20007e28 + +0800916c : + return (configCPU_CLOCK_HZ); +} + +/*---------------------------------------------------------------------------*/ + +osThreadId_t osThreadNew (osThreadFunc_t func, void *argument, const osThreadAttr_t *attr) { + 800916c: b5f0 push {r4, r5, r6, r7, lr} + 800916e: 4614 mov r4, r2 + 8009170: b087 sub sp, #28 + uint32_t stack; + TaskHandle_t hTask; + UBaseType_t prio; + int32_t mem; + + hTask = NULL; + 8009172: 2200 movs r2, #0 +osThreadId_t osThreadNew (osThreadFunc_t func, void *argument, const osThreadAttr_t *attr) { + 8009174: 460b mov r3, r1 + hTask = NULL; + 8009176: 9205 str r2, [sp, #20] + __ASM volatile ("MRS %0, ipsr" : "=r" (result) ); + 8009178: f3ef 8205 mrs r2, IPSR + + if (!IS_IRQ() && (func != NULL)) { + 800917c: bb1a cbnz r2, 80091c6 + __ASM volatile ("MRS %0, primask" : "=r" (result) :: "memory"); + 800917e: f3ef 8210 mrs r2, PRIMASK + 8009182: b912 cbnz r2, 800918a + __ASM volatile ("MRS %0, basepri" : "=r" (result) ); + 8009184: f3ef 8211 mrs r2, BASEPRI + 8009188: b11a cbz r2, 8009192 + 800918a: 4a21 ldr r2, [pc, #132] ; (8009210 ) + 800918c: 6812 ldr r2, [r2, #0] + 800918e: 2a02 cmp r2, #2 + 8009190: d019 beq.n 80091c6 + 8009192: b1c0 cbz r0, 80091c6 + prio = (UBaseType_t)osPriorityNormal; + + name = NULL; + mem = -1; + + if (attr != NULL) { + 8009194: b36c cbz r4, 80091f2 + if (attr->name != NULL) { + name = attr->name; + } + if (attr->priority != osPriorityNone) { + 8009196: 69a5 ldr r5, [r4, #24] + 8009198: 2d00 cmp r5, #0 + 800919a: bf08 it eq + 800919c: 2518 moveq r5, #24 + prio = (UBaseType_t)attr->priority; + } + + if ((prio < osPriorityIdle) || (prio > osPriorityISR) || ((attr->attr_bits & osThreadJoinable) == osThreadJoinable)) { + 800919e: 1e6a subs r2, r5, #1 + 80091a0: 46ac mov ip, r5 + 80091a2: 2a37 cmp r2, #55 ; 0x37 + 80091a4: d82a bhi.n 80091fc + 80091a6: 6862 ldr r2, [r4, #4] + 80091a8: 07d2 lsls r2, r2, #31 + 80091aa: d427 bmi.n 80091fc + return (NULL); + } + + if (attr->stack_size > 0U) { + 80091ac: 6966 ldr r6, [r4, #20] + 80091ae: b16e cbz r6, 80091cc + /* In FreeRTOS stack is not in bytes, but in sizeof(StackType_t) which is 4 on ARM ports. */ + /* Stack size should be therefore 4 byte aligned in order to avoid division caused side effects */ + stack = attr->stack_size / sizeof(StackType_t); + 80091b0: 08b2 lsrs r2, r6, #2 + if (attr->name != NULL) { + 80091b2: 6821 ldr r1, [r4, #0] + } + + if ((attr->cb_mem != NULL) && (attr->cb_size >= sizeof(StaticTask_t)) && + 80091b4: e9d4 7e02 ldrd r7, lr, [r4, #8] + 80091b8: b157 cbz r7, 80091d0 + 80091ba: f1be 0f5f cmp.w lr, #95 ; 0x5f + 80091be: d902 bls.n 80091c6 + (attr->stack_mem != NULL) && (attr->stack_size > 0U)) { + 80091c0: 6924 ldr r4, [r4, #16] + if ((attr->cb_mem != NULL) && (attr->cb_size >= sizeof(StaticTask_t)) && + 80091c2: b104 cbz r4, 80091c6 + (attr->stack_mem != NULL) && (attr->stack_size > 0U)) { + 80091c4: b9e6 cbnz r6, 8009200 + } + } + } + } + + return ((osThreadId_t)hTask); + 80091c6: 9805 ldr r0, [sp, #20] +} + 80091c8: b007 add sp, #28 + 80091ca: bdf0 pop {r4, r5, r6, r7, pc} + stack = configMINIMAL_STACK_SIZE; + 80091cc: 2280 movs r2, #128 ; 0x80 + 80091ce: e7f0 b.n 80091b2 + if ((attr->cb_mem == NULL) && (attr->cb_size == 0U) && (attr->stack_mem == NULL)) { + 80091d0: f1be 0f00 cmp.w lr, #0 + 80091d4: d1f7 bne.n 80091c6 + if (mem == 0) { + 80091d6: 6924 ldr r4, [r4, #16] + 80091d8: 2c00 cmp r4, #0 + 80091da: d1f4 bne.n 80091c6 + if (xTaskCreate ((TaskFunction_t)func, name, (uint16_t)stack, argument, prio, &hTask) != pdPASS) { + 80091dc: ac05 add r4, sp, #20 + 80091de: b292 uxth r2, r2 + 80091e0: e9cd c400 strd ip, r4, [sp] + 80091e4: f001 fca9 bl 800ab3a + 80091e8: 2801 cmp r0, #1 + hTask = NULL; + 80091ea: bf1c itt ne + 80091ec: 2300 movne r3, #0 + 80091ee: 9305 strne r3, [sp, #20] + 80091f0: e7e9 b.n 80091c6 + name = NULL; + 80091f2: 4621 mov r1, r4 + prio = (UBaseType_t)osPriorityNormal; + 80091f4: f04f 0c18 mov.w ip, #24 + stack = configMINIMAL_STACK_SIZE; + 80091f8: 2280 movs r2, #128 ; 0x80 + 80091fa: e7ef b.n 80091dc + return (NULL); + 80091fc: 2000 movs r0, #0 + 80091fe: e7e3 b.n 80091c8 + hTask = xTaskCreateStatic ((TaskFunction_t)func, name, stack, argument, prio, (StackType_t *)attr->stack_mem, + 8009200: e9cd 4701 strd r4, r7, [sp, #4] + 8009204: 9500 str r5, [sp, #0] + 8009206: f001 fc5a bl 800aabe + 800920a: 9005 str r0, [sp, #20] + 800920c: e7db b.n 80091c6 + 800920e: bf00 nop + 8009210: 20007e28 .word 0x20007e28 + +08009214 : + + /* Return flags before clearing */ + return (rflags); +} + +osStatus_t osDelay (uint32_t ticks) { + 8009214: b508 push {r3, lr} + __ASM volatile ("MRS %0, ipsr" : "=r" (result) ); + 8009216: f3ef 8305 mrs r3, IPSR + osStatus_t stat; + + if (IS_IRQ()) { + 800921a: b113 cbz r3, 8009222 + stat = osErrorISR; + 800921c: f06f 0005 mvn.w r0, #5 + vTaskDelay(ticks); + } + } + + return (stat); +} + 8009220: bd08 pop {r3, pc} + __ASM volatile ("MRS %0, primask" : "=r" (result) :: "memory"); + 8009222: f3ef 8310 mrs r3, PRIMASK + if (IS_IRQ()) { + 8009226: b913 cbnz r3, 800922e + __ASM volatile ("MRS %0, basepri" : "=r" (result) ); + 8009228: f3ef 8311 mrs r3, BASEPRI + 800922c: b11b cbz r3, 8009236 + 800922e: 4b05 ldr r3, [pc, #20] ; (8009244 ) + 8009230: 681b ldr r3, [r3, #0] + 8009232: 2b02 cmp r3, #2 + 8009234: d0f2 beq.n 800921c + if (ticks != 0U) { + 8009236: 2800 cmp r0, #0 + 8009238: d0f2 beq.n 8009220 + vTaskDelay(ticks); + 800923a: f001 fdcf bl 800addc + stat = osOK; + 800923e: 2000 movs r0, #0 + 8009240: e7ee b.n 8009220 + 8009242: bf00 nop + 8009244: 20007e28 .word 0x20007e28 + +08009248 : + return (stat); +} + +/*---------------------------------------------------------------------------*/ + +osMutexId_t osMutexNew (const osMutexAttr_t *attr) { + 8009248: b5f8 push {r3, r4, r5, r6, r7, lr} + 800924a: 4604 mov r4, r0 + __ASM volatile ("MRS %0, ipsr" : "=r" (result) ); + 800924c: f3ef 8605 mrs r6, IPSR + const char *name; + #endif + + hMutex = NULL; + + if (!IS_IRQ()) { + 8009250: b116 cbz r6, 8009258 + hMutex = NULL; + 8009252: 2700 movs r7, #0 + } + } + } + + return ((osMutexId_t)hMutex); +} + 8009254: 4638 mov r0, r7 + 8009256: bdf8 pop {r3, r4, r5, r6, r7, pc} + __ASM volatile ("MRS %0, primask" : "=r" (result) :: "memory"); + 8009258: f3ef 8310 mrs r3, PRIMASK + if (!IS_IRQ()) { + 800925c: b913 cbnz r3, 8009264 + __ASM volatile ("MRS %0, basepri" : "=r" (result) ); + 800925e: f3ef 8311 mrs r3, BASEPRI + 8009262: b11b cbz r3, 800926c + 8009264: 4b19 ldr r3, [pc, #100] ; (80092cc ) + 8009266: 681b ldr r3, [r3, #0] + 8009268: 2b02 cmp r3, #2 + 800926a: d0f2 beq.n 8009252 + if (attr != NULL) { + 800926c: b324 cbz r4, 80092b8 + type = attr->attr_bits; + 800926e: 6865 ldr r5, [r4, #4] + if ((type & osMutexRobust) != osMutexRobust) { + 8009270: 072b lsls r3, r5, #28 + 8009272: d4ee bmi.n 8009252 + if ((type & osMutexRecursive) == osMutexRecursive) { + 8009274: f005 0501 and.w r5, r5, #1 + if ((attr->cb_mem != NULL) && (attr->cb_size >= sizeof(StaticSemaphore_t))) { + 8009278: e9d4 1302 ldrd r1, r3, [r4, #8] + 800927c: b199 cbz r1, 80092a6 + 800927e: 2b4f cmp r3, #79 ; 0x4f + 8009280: d9e7 bls.n 8009252 + if (rmtx != 0U) { + 8009282: b1bd cbz r5, 80092b4 + hMutex = xSemaphoreCreateRecursiveMutexStatic (attr->cb_mem); + 8009284: 2004 movs r0, #4 + hMutex = xSemaphoreCreateMutexStatic (attr->cb_mem); + 8009286: f000 ff51 bl 800a12c + 800928a: 4607 mov r7, r0 + if (hMutex != NULL) { + 800928c: 2800 cmp r0, #0 + 800928e: d0e0 beq.n 8009252 + name = attr->name; + 8009290: 6824 ldr r4, [r4, #0] + 8009292: 462e mov r6, r5 + vQueueAddToRegistry (hMutex, name); + 8009294: 4621 mov r1, r4 + 8009296: 4638 mov r0, r7 + 8009298: f001 fa48 bl 800a72c + if ((hMutex != NULL) && (rmtx != 0U)) { + 800929c: 2e00 cmp r6, #0 + 800929e: d0d9 beq.n 8009254 + hMutex = (SemaphoreHandle_t)((uint32_t)hMutex | 1U); + 80092a0: f047 0701 orr.w r7, r7, #1 + return ((osMutexId_t)hMutex); + 80092a4: e7d6 b.n 8009254 + if ((attr->cb_mem == NULL) && (attr->cb_size == 0U)) { + 80092a6: 2b00 cmp r3, #0 + 80092a8: d1d3 bne.n 8009252 + if (rmtx != 0U) { + 80092aa: b12d cbz r5, 80092b8 + hMutex = xSemaphoreCreateRecursiveMutex (); + 80092ac: 2004 movs r0, #4 + 80092ae: f000 ff72 bl 800a196 + 80092b2: e7ea b.n 800928a + hMutex = xSemaphoreCreateMutexStatic (attr->cb_mem); + 80092b4: 2001 movs r0, #1 + 80092b6: e7e6 b.n 8009286 + hMutex = xSemaphoreCreateMutex (); + 80092b8: 2001 movs r0, #1 + 80092ba: f000 ff6c bl 800a196 + if (hMutex != NULL) { + 80092be: 4607 mov r7, r0 + 80092c0: 2800 cmp r0, #0 + 80092c2: d0c6 beq.n 8009252 + if (attr != NULL) { + 80092c4: 2c00 cmp r4, #0 + 80092c6: d0e5 beq.n 8009294 + 80092c8: 2500 movs r5, #0 + 80092ca: e7e1 b.n 8009290 + 80092cc: 20007e28 .word 0x20007e28 + +080092d0 : + +osStatus_t osMutexAcquire (osMutexId_t mutex_id, uint32_t timeout) { + 80092d0: 4603 mov r3, r0 + SemaphoreHandle_t hMutex; + osStatus_t stat; + uint32_t rmtx; + + hMutex = (SemaphoreHandle_t)((uint32_t)mutex_id & ~1U); + 80092d2: f020 0001 bic.w r0, r0, #1 +osStatus_t osMutexAcquire (osMutexId_t mutex_id, uint32_t timeout) { + 80092d6: b510 push {r4, lr} + + rmtx = (uint32_t)mutex_id & 1U; + 80092d8: f003 0301 and.w r3, r3, #1 +osStatus_t osMutexAcquire (osMutexId_t mutex_id, uint32_t timeout) { + 80092dc: 460c mov r4, r1 + __ASM volatile ("MRS %0, ipsr" : "=r" (result) ); + 80092de: f3ef 8205 mrs r2, IPSR + + stat = osOK; + + if (IS_IRQ()) { + 80092e2: b112 cbz r2, 80092ea + stat = osErrorISR; + 80092e4: f06f 0005 mvn.w r0, #5 + } + } + } + + return (stat); +} + 80092e8: bd10 pop {r4, pc} + __ASM volatile ("MRS %0, primask" : "=r" (result) :: "memory"); + 80092ea: f3ef 8210 mrs r2, PRIMASK + if (IS_IRQ()) { + 80092ee: b912 cbnz r2, 80092f6 + __ASM volatile ("MRS %0, basepri" : "=r" (result) ); + 80092f0: f3ef 8211 mrs r2, BASEPRI + 80092f4: b11a cbz r2, 80092fe + 80092f6: 4a0d ldr r2, [pc, #52] ; (800932c ) + 80092f8: 6812 ldr r2, [r2, #0] + 80092fa: 2a02 cmp r2, #2 + 80092fc: d0f2 beq.n 80092e4 + else if (hMutex == NULL) { + 80092fe: b188 cbz r0, 8009324 + if (xSemaphoreTakeRecursive (hMutex, timeout) != pdPASS) { + 8009300: 4621 mov r1, r4 + if (rmtx != 0U) { + 8009302: b163 cbz r3, 800931e + if (xSemaphoreTakeRecursive (hMutex, timeout) != pdPASS) { + 8009304: f001 f999 bl 800a63a + 8009308: 2801 cmp r0, #1 + 800930a: d101 bne.n 8009310 + stat = osOK; + 800930c: 2000 movs r0, #0 + 800930e: e7eb b.n 80092e8 + stat = osErrorResource; + 8009310: 2c00 cmp r4, #0 + 8009312: bf14 ite ne + 8009314: f06f 0001 mvnne.w r0, #1 + 8009318: f06f 0002 mvneq.w r0, #2 + 800931c: e7e4 b.n 80092e8 + if (xSemaphoreTake (hMutex, timeout) != pdPASS) { + 800931e: f001 f8c1 bl 800a4a4 + 8009322: e7f1 b.n 8009308 + stat = osErrorParameter; + 8009324: f06f 0003 mvn.w r0, #3 + 8009328: e7de b.n 80092e8 + 800932a: bf00 nop + 800932c: 20007e28 .word 0x20007e28 + +08009330 : + +osStatus_t osMutexRelease (osMutexId_t mutex_id) { + 8009330: b508 push {r3, lr} + 8009332: 4603 mov r3, r0 + SemaphoreHandle_t hMutex; + osStatus_t stat; + uint32_t rmtx; + + hMutex = (SemaphoreHandle_t)((uint32_t)mutex_id & ~1U); + 8009334: f020 0001 bic.w r0, r0, #1 + + rmtx = (uint32_t)mutex_id & 1U; + 8009338: f003 0301 and.w r3, r3, #1 + __ASM volatile ("MRS %0, ipsr" : "=r" (result) ); + 800933c: f3ef 8205 mrs r2, IPSR + + stat = osOK; + + if (IS_IRQ()) { + 8009340: b112 cbz r2, 8009348 + stat = osErrorISR; + 8009342: f06f 0005 mvn.w r0, #5 + } + } + } + + return (stat); +} + 8009346: bd08 pop {r3, pc} + __ASM volatile ("MRS %0, primask" : "=r" (result) :: "memory"); + 8009348: f3ef 8210 mrs r2, PRIMASK + if (IS_IRQ()) { + 800934c: b912 cbnz r2, 8009354 + __ASM volatile ("MRS %0, basepri" : "=r" (result) ); + 800934e: f3ef 8211 mrs r2, BASEPRI + 8009352: b11a cbz r2, 800935c + 8009354: 4a0a ldr r2, [pc, #40] ; (8009380 ) + 8009356: 6812 ldr r2, [r2, #0] + 8009358: 2a02 cmp r2, #2 + 800935a: d0f2 beq.n 8009342 + else if (hMutex == NULL) { + 800935c: b168 cbz r0, 800937a + if (rmtx != 0U) { + 800935e: b13b cbz r3, 8009370 + if (xSemaphoreGiveRecursive (hMutex) != pdPASS) { + 8009360: f000 fef9 bl 800a156 + 8009364: 2801 cmp r0, #1 + stat = osOK; + 8009366: bf0c ite eq + 8009368: 2000 moveq r0, #0 + stat = osErrorResource; + 800936a: f06f 0002 mvnne.w r0, #2 + 800936e: e7ea b.n 8009346 + if (xSemaphoreGive (hMutex) != pdPASS) { + 8009370: 461a mov r2, r3 + 8009372: 4619 mov r1, r3 + 8009374: f000 fe1f bl 8009fb6 + 8009378: e7f4 b.n 8009364 + stat = osErrorParameter; + 800937a: f06f 0003 mvn.w r0, #3 + return (stat); + 800937e: e7e2 b.n 8009346 + 8009380: 20007e28 .word 0x20007e28 + +08009384 : + return (stat); +} + +/*---------------------------------------------------------------------------*/ + +osSemaphoreId_t osSemaphoreNew (uint32_t max_count, uint32_t initial_count, const osSemaphoreAttr_t *attr) { + 8009384: b573 push {r0, r1, r4, r5, r6, lr} + 8009386: 460e mov r6, r1 + 8009388: 4615 mov r5, r2 + __ASM volatile ("MRS %0, ipsr" : "=r" (result) ); + 800938a: f3ef 8305 mrs r3, IPSR + const char *name; + #endif + + hSemaphore = NULL; + + if (!IS_IRQ() && (max_count > 0U) && (initial_count <= max_count)) { + 800938e: b11b cbz r3, 8009398 + } + + if ((hSemaphore != NULL) && (initial_count != 0U)) { + if (xSemaphoreGive (hSemaphore) != pdPASS) { + vSemaphoreDelete (hSemaphore); + hSemaphore = NULL; + 8009390: 2400 movs r4, #0 + #endif + } + } + + return ((osSemaphoreId_t)hSemaphore); +} + 8009392: 4620 mov r0, r4 + 8009394: b002 add sp, #8 + 8009396: bd70 pop {r4, r5, r6, pc} + __ASM volatile ("MRS %0, primask" : "=r" (result) :: "memory"); + 8009398: f3ef 8310 mrs r3, PRIMASK + if (!IS_IRQ() && (max_count > 0U) && (initial_count <= max_count)) { + 800939c: b913 cbnz r3, 80093a4 + __ASM volatile ("MRS %0, basepri" : "=r" (result) ); + 800939e: f3ef 8311 mrs r3, BASEPRI + 80093a2: b11b cbz r3, 80093ac + 80093a4: 4b21 ldr r3, [pc, #132] ; (800942c ) + 80093a6: 681b ldr r3, [r3, #0] + 80093a8: 2b02 cmp r3, #2 + 80093aa: d0f1 beq.n 8009390 + 80093ac: 2800 cmp r0, #0 + 80093ae: d0ef beq.n 8009390 + 80093b0: 42b0 cmp r0, r6 + 80093b2: d3ed bcc.n 8009390 + if (attr != NULL) { + 80093b4: b1ed cbz r5, 80093f2 + if ((attr->cb_mem != NULL) && (attr->cb_size >= sizeof(StaticSemaphore_t))) { + 80093b6: e9d5 3202 ldrd r3, r2, [r5, #8] + 80093ba: b1c3 cbz r3, 80093ee + 80093bc: 2a4f cmp r2, #79 ; 0x4f + 80093be: d9e7 bls.n 8009390 + if (max_count == 1U) { + 80093c0: 2801 cmp r0, #1 + 80093c2: d129 bne.n 8009418 + hSemaphore = xSemaphoreCreateBinaryStatic ((StaticSemaphore_t *)attr->cb_mem); + 80093c4: 2203 movs r2, #3 + 80093c6: 9200 str r2, [sp, #0] + 80093c8: 2200 movs r2, #0 + 80093ca: 4611 mov r1, r2 + 80093cc: f000 fd6e bl 8009eac + hSemaphore = xSemaphoreCreateBinary(); + 80093d0: 4604 mov r4, r0 + if ((hSemaphore != NULL) && (initial_count != 0U)) { + 80093d2: 2800 cmp r0, #0 + 80093d4: d0dc beq.n 8009390 + 80093d6: b1ce cbz r6, 800940c + if (xSemaphoreGive (hSemaphore) != pdPASS) { + 80093d8: 2300 movs r3, #0 + 80093da: 461a mov r2, r3 + 80093dc: 4619 mov r1, r3 + 80093de: f000 fdea bl 8009fb6 + 80093e2: 2801 cmp r0, #1 + 80093e4: d012 beq.n 800940c + vSemaphoreDelete (hSemaphore); + 80093e6: 4620 mov r0, r4 + 80093e8: f001 f9c6 bl 800a778 + 80093ec: e7d0 b.n 8009390 + if ((attr->cb_mem == NULL) && (attr->cb_size == 0U)) { + 80093ee: 2a00 cmp r2, #0 + 80093f0: d1ce bne.n 8009390 + if (max_count == 1U) { + 80093f2: 2801 cmp r0, #1 + 80093f4: d104 bne.n 8009400 + hSemaphore = xSemaphoreCreateBinary(); + 80093f6: 2203 movs r2, #3 + 80093f8: 2100 movs r1, #0 + 80093fa: f000 fd6b bl 8009ed4 + 80093fe: e7e7 b.n 80093d0 + hSemaphore = xSemaphoreCreateCounting (max_count, initial_count); + 8009400: 4631 mov r1, r6 + 8009402: f000 fdb6 bl 8009f72 + if (hSemaphore != NULL) { + 8009406: 4604 mov r4, r0 + 8009408: 2800 cmp r0, #0 + 800940a: d0c1 beq.n 8009390 + if (attr != NULL) { + 800940c: b95d cbnz r5, 8009426 + vQueueAddToRegistry (hSemaphore, name); + 800940e: 4629 mov r1, r5 + 8009410: 4620 mov r0, r4 + 8009412: f001 f98b bl 800a72c + return ((osSemaphoreId_t)hSemaphore); + 8009416: e7bc b.n 8009392 + hSemaphore = xSemaphoreCreateCountingStatic (max_count, initial_count, (StaticSemaphore_t *)attr->cb_mem); + 8009418: 461a mov r2, r3 + 800941a: 4631 mov r1, r6 + 800941c: f000 fd83 bl 8009f26 + if (hSemaphore != NULL) { + 8009420: 4604 mov r4, r0 + 8009422: 2800 cmp r0, #0 + 8009424: d0b4 beq.n 8009390 + name = attr->name; + 8009426: 682d ldr r5, [r5, #0] + 8009428: e7f1 b.n 800940e + 800942a: bf00 nop + 800942c: 20007e28 .word 0x20007e28 + +08009430 : + +osStatus_t osSemaphoreAcquire (osSemaphoreId_t semaphore_id, uint32_t timeout) { + 8009430: b513 push {r0, r1, r4, lr} + 8009432: 460c mov r4, r1 + osStatus_t stat; + BaseType_t yield; + + stat = osOK; + + if (hSemaphore == NULL) { + 8009434: b918 cbnz r0, 800943e + stat = osErrorParameter; + 8009436: f06f 0003 mvn.w r0, #3 + } + } + } + + return (stat); +} + 800943a: b002 add sp, #8 + 800943c: bd10 pop {r4, pc} + __ASM volatile ("MRS %0, ipsr" : "=r" (result) ); + 800943e: f3ef 8305 mrs r3, IPSR + else if (IS_IRQ()) { + 8009442: b163 cbz r3, 800945e + if (timeout != 0U) { + 8009444: 2c00 cmp r4, #0 + 8009446: d1f6 bne.n 8009436 + if (xSemaphoreTakeFromISR (hSemaphore, &yield) != pdPASS) { + 8009448: aa01 add r2, sp, #4 + 800944a: 4621 mov r1, r4 + yield = pdFALSE; + 800944c: 9401 str r4, [sp, #4] + if (xSemaphoreTakeFromISR (hSemaphore, &yield) != pdPASS) { + 800944e: f001 f918 bl 800a682 + 8009452: 2801 cmp r0, #1 + 8009454: d113 bne.n 800947e + portYIELD_FROM_ISR (yield); + 8009456: 9b01 ldr r3, [sp, #4] + 8009458: b9a3 cbnz r3, 8009484 + stat = osOK; + 800945a: 2000 movs r0, #0 + 800945c: e7ed b.n 800943a + __ASM volatile ("MRS %0, primask" : "=r" (result) :: "memory"); + 800945e: f3ef 8310 mrs r3, PRIMASK + else if (IS_IRQ()) { + 8009462: b913 cbnz r3, 800946a + __ASM volatile ("MRS %0, basepri" : "=r" (result) ); + 8009464: f3ef 8311 mrs r3, BASEPRI + 8009468: b11b cbz r3, 8009472 + 800946a: 4b0d ldr r3, [pc, #52] ; (80094a0 ) + 800946c: 681b ldr r3, [r3, #0] + 800946e: 2b02 cmp r3, #2 + 8009470: d0e8 beq.n 8009444 + if (xSemaphoreTake (hSemaphore, (TickType_t)timeout) != pdPASS) { + 8009472: 4621 mov r1, r4 + 8009474: f001 f816 bl 800a4a4 + 8009478: 2801 cmp r0, #1 + 800947a: d0ee beq.n 800945a + if (timeout != 0U) { + 800947c: b96c cbnz r4, 800949a + stat = osErrorResource; + 800947e: f06f 0002 mvn.w r0, #2 + 8009482: e7da b.n 800943a + portYIELD_FROM_ISR (yield); + 8009484: f04f 23e0 mov.w r3, #3758153728 ; 0xe000e000 + 8009488: f04f 5280 mov.w r2, #268435456 ; 0x10000000 + 800948c: f8c3 2d04 str.w r2, [r3, #3332] ; 0xd04 + 8009490: f3bf 8f4f dsb sy + 8009494: f3bf 8f6f isb sy + 8009498: e7df b.n 800945a + stat = osErrorTimeout; + 800949a: f06f 0001 mvn.w r0, #1 + return (stat); + 800949e: e7cc b.n 800943a + 80094a0: 20007e28 .word 0x20007e28 + +080094a4 : + +osStatus_t osSemaphoreRelease (osSemaphoreId_t semaphore_id) { + 80094a4: b513 push {r0, r1, r4, lr} + osStatus_t stat; + BaseType_t yield; + + stat = osOK; + + if (hSemaphore == NULL) { + 80094a6: b370 cbz r0, 8009506 + __ASM volatile ("MRS %0, ipsr" : "=r" (result) ); + 80094a8: f3ef 8305 mrs r3, IPSR + stat = osErrorParameter; + } + else if (IS_IRQ()) { + 80094ac: b14b cbz r3, 80094c2 + yield = pdFALSE; + 80094ae: 2400 movs r4, #0 + + if (xSemaphoreGiveFromISR (hSemaphore, &yield) != pdTRUE) { + 80094b0: a901 add r1, sp, #4 + yield = pdFALSE; + 80094b2: 9401 str r4, [sp, #4] + if (xSemaphoreGiveFromISR (hSemaphore, &yield) != pdTRUE) { + 80094b4: f000 fef5 bl 800a2a2 + 80094b8: 2801 cmp r0, #1 + 80094ba: d014 beq.n 80094e6 + portYIELD_FROM_ISR (yield); + } + } + else { + if (xSemaphoreGive (hSemaphore) != pdPASS) { + stat = osErrorResource; + 80094bc: f06f 0002 mvn.w r0, #2 + 80094c0: e014 b.n 80094ec + __ASM volatile ("MRS %0, primask" : "=r" (result) :: "memory"); + 80094c2: f3ef 8310 mrs r3, PRIMASK + else if (IS_IRQ()) { + 80094c6: b913 cbnz r3, 80094ce + __ASM volatile ("MRS %0, basepri" : "=r" (result) ); + 80094c8: f3ef 8311 mrs r3, BASEPRI + 80094cc: b11b cbz r3, 80094d6 + 80094ce: 4b0f ldr r3, [pc, #60] ; (800950c ) + 80094d0: 681b ldr r3, [r3, #0] + 80094d2: 2b02 cmp r3, #2 + 80094d4: d0eb beq.n 80094ae + if (xSemaphoreGive (hSemaphore) != pdPASS) { + 80094d6: 2300 movs r3, #0 + 80094d8: 461a mov r2, r3 + 80094da: 4619 mov r1, r3 + 80094dc: f000 fd6b bl 8009fb6 + 80094e0: 2801 cmp r0, #1 + 80094e2: d002 beq.n 80094ea + 80094e4: e7ea b.n 80094bc + portYIELD_FROM_ISR (yield); + 80094e6: 9b01 ldr r3, [sp, #4] + 80094e8: b913 cbnz r3, 80094f0 + stat = osOK; + 80094ea: 2000 movs r0, #0 + } + } + + return (stat); +} + 80094ec: b002 add sp, #8 + 80094ee: bd10 pop {r4, pc} + portYIELD_FROM_ISR (yield); + 80094f0: f04f 23e0 mov.w r3, #3758153728 ; 0xe000e000 + 80094f4: f04f 5280 mov.w r2, #268435456 ; 0x10000000 + 80094f8: f8c3 2d04 str.w r2, [r3, #3332] ; 0xd04 + 80094fc: f3bf 8f4f dsb sy + 8009500: f3bf 8f6f isb sy + 8009504: e7f1 b.n 80094ea + stat = osErrorParameter; + 8009506: f06f 0003 mvn.w r0, #3 + return (stat); + 800950a: e7ef b.n 80094ec + 800950c: 20007e28 .word 0x20007e28 + +08009510 : + return (stat); +} + +/*---------------------------------------------------------------------------*/ + +osMessageQueueId_t osMessageQueueNew (uint32_t msg_count, uint32_t msg_size, const osMessageQueueAttr_t *attr) { + 8009510: b573 push {r0, r1, r4, r5, r6, lr} + 8009512: 4614 mov r4, r2 + __ASM volatile ("MRS %0, ipsr" : "=r" (result) ); + 8009514: f3ef 8305 mrs r3, IPSR + const char *name; + #endif + + hQueue = NULL; + + if (!IS_IRQ() && (msg_count > 0U) && (msg_size > 0U)) { + 8009518: b11b cbz r3, 8009522 + hQueue = NULL; + 800951a: 2500 movs r5, #0 + #endif + + } + + return ((osMessageQueueId_t)hQueue); +} + 800951c: 4628 mov r0, r5 + 800951e: b002 add sp, #8 + 8009520: bd70 pop {r4, r5, r6, pc} + __ASM volatile ("MRS %0, primask" : "=r" (result) :: "memory"); + 8009522: f3ef 8310 mrs r3, PRIMASK + if (!IS_IRQ() && (msg_count > 0U) && (msg_size > 0U)) { + 8009526: b913 cbnz r3, 800952e + __ASM volatile ("MRS %0, basepri" : "=r" (result) ); + 8009528: f3ef 8311 mrs r3, BASEPRI + 800952c: b11b cbz r3, 8009536 + 800952e: 4b1a ldr r3, [pc, #104] ; (8009598 ) + 8009530: 681b ldr r3, [r3, #0] + 8009532: 2b02 cmp r3, #2 + 8009534: d0f1 beq.n 800951a + 8009536: 2800 cmp r0, #0 + 8009538: d0ef beq.n 800951a + 800953a: 2900 cmp r1, #0 + 800953c: d0ed beq.n 800951a + if (attr != NULL) { + 800953e: b1ec cbz r4, 800957c + if ((attr->cb_mem != NULL) && (attr->cb_size >= sizeof(StaticQueue_t)) && + 8009540: e9d4 3202 ldrd r3, r2, [r4, #8] + 8009544: b193 cbz r3, 800956c + 8009546: 2a4f cmp r2, #79 ; 0x4f + 8009548: d9e7 bls.n 800951a + (attr->mq_mem != NULL) && (attr->mq_size >= (msg_count * msg_size))) { + 800954a: 6922 ldr r2, [r4, #16] + if ((attr->cb_mem != NULL) && (attr->cb_size >= sizeof(StaticQueue_t)) && + 800954c: 2a00 cmp r2, #0 + 800954e: d0e4 beq.n 800951a + (attr->mq_mem != NULL) && (attr->mq_size >= (msg_count * msg_size))) { + 8009550: fb01 f500 mul.w r5, r1, r0 + 8009554: 6966 ldr r6, [r4, #20] + 8009556: 42ae cmp r6, r5 + 8009558: d3df bcc.n 800951a + hQueue = xQueueCreateStatic (msg_count, msg_size, attr->mq_mem, attr->cb_mem); + 800955a: 2500 movs r5, #0 + 800955c: 9500 str r5, [sp, #0] + 800955e: f000 fca5 bl 8009eac + if (hQueue != NULL) { + 8009562: 4605 mov r5, r0 + 8009564: 2800 cmp r0, #0 + 8009566: d0d8 beq.n 800951a + name = attr->name; + 8009568: 6824 ldr r4, [r4, #0] + 800956a: e00f b.n 800958c + if ((attr->cb_mem == NULL) && (attr->cb_size == 0U) && + 800956c: 2a00 cmp r2, #0 + 800956e: d1d4 bne.n 800951a + 8009570: 6923 ldr r3, [r4, #16] + 8009572: 2b00 cmp r3, #0 + 8009574: d1d1 bne.n 800951a + (attr->mq_mem == NULL) && (attr->mq_size == 0U)) { + 8009576: 6963 ldr r3, [r4, #20] + 8009578: 2b00 cmp r3, #0 + 800957a: d1ce bne.n 800951a + hQueue = xQueueCreate (msg_count, msg_size); + 800957c: 2200 movs r2, #0 + 800957e: f000 fca9 bl 8009ed4 + if (hQueue != NULL) { + 8009582: 4605 mov r5, r0 + 8009584: 2800 cmp r0, #0 + 8009586: d0c8 beq.n 800951a + if (attr != NULL) { + 8009588: 2c00 cmp r4, #0 + 800958a: d1ed bne.n 8009568 + vQueueAddToRegistry (hQueue, name); + 800958c: 4621 mov r1, r4 + 800958e: 4628 mov r0, r5 + 8009590: f001 f8cc bl 800a72c + return ((osMessageQueueId_t)hQueue); + 8009594: e7c2 b.n 800951c + 8009596: bf00 nop + 8009598: 20007e28 .word 0x20007e28 + +0800959c : + +osStatus_t osMessageQueuePut (osMessageQueueId_t mq_id, const void *msg_ptr, uint8_t msg_prio, uint32_t timeout) { + 800959c: b513 push {r0, r1, r4, lr} + 800959e: 461c mov r4, r3 + __ASM volatile ("MRS %0, ipsr" : "=r" (result) ); + 80095a0: f3ef 8305 mrs r3, IPSR + + (void)msg_prio; /* Message priority is ignored */ + + stat = osOK; + + if (IS_IRQ()) { + 80095a4: b123 cbz r3, 80095b0 + if ((hQueue == NULL) || (msg_ptr == NULL) || (timeout != 0U)) { + 80095a6: b9d8 cbnz r0, 80095e0 + stat = osErrorParameter; + 80095a8: f06f 0003 mvn.w r0, #3 + } + } + } + + return (stat); +} + 80095ac: b002 add sp, #8 + 80095ae: bd10 pop {r4, pc} + __ASM volatile ("MRS %0, primask" : "=r" (result) :: "memory"); + 80095b0: f3ef 8310 mrs r3, PRIMASK + if (IS_IRQ()) { + 80095b4: b913 cbnz r3, 80095bc + __ASM volatile ("MRS %0, basepri" : "=r" (result) ); + 80095b6: f3ef 8311 mrs r3, BASEPRI + 80095ba: b11b cbz r3, 80095c4 + 80095bc: 4b17 ldr r3, [pc, #92] ; (800961c ) + 80095be: 681b ldr r3, [r3, #0] + 80095c0: 2b02 cmp r3, #2 + 80095c2: d0f0 beq.n 80095a6 + if ((hQueue == NULL) || (msg_ptr == NULL)) { + 80095c4: 2800 cmp r0, #0 + 80095c6: d0ef beq.n 80095a8 + 80095c8: 2900 cmp r1, #0 + 80095ca: d0ed beq.n 80095a8 + if (xQueueSendToBack (hQueue, msg_ptr, (TickType_t)timeout) != pdPASS) { + 80095cc: 2300 movs r3, #0 + 80095ce: 4622 mov r2, r4 + 80095d0: f000 fcf1 bl 8009fb6 + 80095d4: 2801 cmp r0, #1 + 80095d6: d010 beq.n 80095fa + if (timeout != 0U) { + 80095d8: b9e4 cbnz r4, 8009614 + stat = osErrorResource; + 80095da: f06f 0002 mvn.w r0, #2 + 80095de: e7e5 b.n 80095ac + if ((hQueue == NULL) || (msg_ptr == NULL) || (timeout != 0U)) { + 80095e0: 2900 cmp r1, #0 + 80095e2: d0e1 beq.n 80095a8 + 80095e4: 2c00 cmp r4, #0 + 80095e6: d1df bne.n 80095a8 + if (xQueueSendToBackFromISR (hQueue, msg_ptr, &yield) != pdTRUE) { + 80095e8: 4623 mov r3, r4 + 80095ea: aa01 add r2, sp, #4 + yield = pdFALSE; + 80095ec: 9401 str r4, [sp, #4] + if (xQueueSendToBackFromISR (hQueue, msg_ptr, &yield) != pdTRUE) { + 80095ee: f000 fdef bl 800a1d0 + 80095f2: 2801 cmp r0, #1 + 80095f4: d1f1 bne.n 80095da + portYIELD_FROM_ISR (yield); + 80095f6: 9b01 ldr r3, [sp, #4] + 80095f8: b90b cbnz r3, 80095fe + stat = osOK; + 80095fa: 2000 movs r0, #0 + 80095fc: e7d6 b.n 80095ac + portYIELD_FROM_ISR (yield); + 80095fe: f04f 23e0 mov.w r3, #3758153728 ; 0xe000e000 + 8009602: f04f 5280 mov.w r2, #268435456 ; 0x10000000 + 8009606: f8c3 2d04 str.w r2, [r3, #3332] ; 0xd04 + 800960a: f3bf 8f4f dsb sy + 800960e: f3bf 8f6f isb sy + 8009612: e7f2 b.n 80095fa + stat = osErrorTimeout; + 8009614: f06f 0001 mvn.w r0, #1 + return (stat); + 8009618: e7c8 b.n 80095ac + 800961a: bf00 nop + 800961c: 20007e28 .word 0x20007e28 + +08009620 : + +osStatus_t osMessageQueueGet (osMessageQueueId_t mq_id, void *msg_ptr, uint8_t *msg_prio, uint32_t timeout) { + 8009620: b513 push {r0, r1, r4, lr} + 8009622: 461c mov r4, r3 + __ASM volatile ("MRS %0, ipsr" : "=r" (result) ); + 8009624: f3ef 8305 mrs r3, IPSR + + (void)msg_prio; /* Message priority is ignored */ + + stat = osOK; + + if (IS_IRQ()) { + 8009628: b123 cbz r3, 8009634 + if ((hQueue == NULL) || (msg_ptr == NULL) || (timeout != 0U)) { + 800962a: b9d0 cbnz r0, 8009662 + stat = osErrorParameter; + 800962c: f06f 0003 mvn.w r0, #3 + } + } + } + + return (stat); +} + 8009630: b002 add sp, #8 + 8009632: bd10 pop {r4, pc} + __ASM volatile ("MRS %0, primask" : "=r" (result) :: "memory"); + 8009634: f3ef 8310 mrs r3, PRIMASK + if (IS_IRQ()) { + 8009638: b913 cbnz r3, 8009640 + __ASM volatile ("MRS %0, basepri" : "=r" (result) ); + 800963a: f3ef 8311 mrs r3, BASEPRI + 800963e: b11b cbz r3, 8009648 + 8009640: 4b16 ldr r3, [pc, #88] ; (800969c ) + 8009642: 681b ldr r3, [r3, #0] + 8009644: 2b02 cmp r3, #2 + 8009646: d0f0 beq.n 800962a + if ((hQueue == NULL) || (msg_ptr == NULL)) { + 8009648: 2800 cmp r0, #0 + 800964a: d0ef beq.n 800962c + 800964c: 2900 cmp r1, #0 + 800964e: d0ed beq.n 800962c + if (xQueueReceive (hQueue, msg_ptr, (TickType_t)timeout) != pdPASS) { + 8009650: 4622 mov r2, r4 + 8009652: f000 fe82 bl 800a35a + 8009656: 2801 cmp r0, #1 + 8009658: d00f beq.n 800967a + if (timeout != 0U) { + 800965a: b9dc cbnz r4, 8009694 + stat = osErrorResource; + 800965c: f06f 0002 mvn.w r0, #2 + 8009660: e7e6 b.n 8009630 + if ((hQueue == NULL) || (msg_ptr == NULL) || (timeout != 0U)) { + 8009662: 2900 cmp r1, #0 + 8009664: d0e2 beq.n 800962c + 8009666: 2c00 cmp r4, #0 + 8009668: d1e0 bne.n 800962c + if (xQueueReceiveFromISR (hQueue, msg_ptr, &yield) != pdPASS) { + 800966a: aa01 add r2, sp, #4 + yield = pdFALSE; + 800966c: 9401 str r4, [sp, #4] + if (xQueueReceiveFromISR (hQueue, msg_ptr, &yield) != pdPASS) { + 800966e: f001 f808 bl 800a682 + 8009672: 2801 cmp r0, #1 + 8009674: d1f2 bne.n 800965c + portYIELD_FROM_ISR (yield); + 8009676: 9b01 ldr r3, [sp, #4] + 8009678: b90b cbnz r3, 800967e + stat = osOK; + 800967a: 2000 movs r0, #0 + 800967c: e7d8 b.n 8009630 + portYIELD_FROM_ISR (yield); + 800967e: f04f 23e0 mov.w r3, #3758153728 ; 0xe000e000 + 8009682: f04f 5280 mov.w r2, #268435456 ; 0x10000000 + 8009686: f8c3 2d04 str.w r2, [r3, #3332] ; 0xd04 + 800968a: f3bf 8f4f dsb sy + 800968e: f3bf 8f6f isb sy + 8009692: e7f2 b.n 800967a + stat = osErrorTimeout; + 8009694: f06f 0001 mvn.w r0, #1 + return (stat); + 8009698: e7ca b.n 8009630 + 800969a: bf00 nop + 800969c: 20007e28 .word 0x20007e28 + +080096a0 : +/* + vApplicationGetIdleTaskMemory gets called when configSUPPORT_STATIC_ALLOCATION + equals to 1 and is required for static memory allocation support. +*/ +void vApplicationGetIdleTaskMemory (StaticTask_t **ppxIdleTaskTCBBuffer, StackType_t **ppxIdleTaskStackBuffer, uint32_t *pulIdleTaskStackSize) { + *ppxIdleTaskTCBBuffer = &Idle_TCB; + 80096a0: 4b03 ldr r3, [pc, #12] ; (80096b0 ) + 80096a2: 6003 str r3, [r0, #0] + *ppxIdleTaskStackBuffer = &Idle_Stack[0]; + 80096a4: 4b03 ldr r3, [pc, #12] ; (80096b4 ) + 80096a6: 600b str r3, [r1, #0] + *pulIdleTaskStackSize = (uint32_t)configMINIMAL_STACK_SIZE; + 80096a8: 2380 movs r3, #128 ; 0x80 + 80096aa: 6013 str r3, [r2, #0] +} + 80096ac: 4770 bx lr + 80096ae: bf00 nop + 80096b0: 20007dc8 .word 0x20007dc8 + 80096b4: 20007bc8 .word 0x20007bc8 + +080096b8 : +/* + vApplicationGetTimerTaskMemory gets called when configSUPPORT_STATIC_ALLOCATION + equals to 1 and is required for static memory allocation support. +*/ +void vApplicationGetTimerTaskMemory (StaticTask_t **ppxTimerTaskTCBBuffer, StackType_t **ppxTimerTaskStackBuffer, uint32_t *pulTimerTaskStackSize) { + *ppxTimerTaskTCBBuffer = &Timer_TCB; + 80096b8: 4b03 ldr r3, [pc, #12] ; (80096c8 ) + 80096ba: 6003 str r3, [r0, #0] + *ppxTimerTaskStackBuffer = &Timer_Stack[0]; + 80096bc: 4b03 ldr r3, [pc, #12] ; (80096cc ) + 80096be: 600b str r3, [r1, #0] + *pulTimerTaskStackSize = (uint32_t)configTIMER_TASK_STACK_DEPTH; + 80096c0: f44f 7380 mov.w r3, #256 ; 0x100 + 80096c4: 6013 str r3, [r2, #0] +} + 80096c6: 4770 bx lr + 80096c8: 2000822c .word 0x2000822c + 80096cc: 20007e2c .word 0x20007e2c + +080096d0 : +BlockLink_t *pxIterator; +uint8_t *puc; + + /* Iterate through the list until a block is found that has a higher address + than the block being inserted. */ + for( pxIterator = &xStart; pxIterator->pxNextFreeBlock < pxBlockToInsert; pxIterator = pxIterator->pxNextFreeBlock ) + 80096d0: 4b10 ldr r3, [pc, #64] ; (8009714 ) +{ + 80096d2: b510 push {r4, lr} + for( pxIterator = &xStart; pxIterator->pxNextFreeBlock < pxBlockToInsert; pxIterator = pxIterator->pxNextFreeBlock ) + 80096d4: 461a mov r2, r3 + 80096d6: 681b ldr r3, [r3, #0] + 80096d8: 4283 cmp r3, r0 + 80096da: d3fb bcc.n 80096d4 + } + + /* Do the block being inserted, and the block it is being inserted after + make a contiguous block of memory? */ + puc = ( uint8_t * ) pxIterator; + if( ( puc + pxIterator->xBlockSize ) == ( uint8_t * ) pxBlockToInsert ) + 80096dc: 6854 ldr r4, [r2, #4] + 80096de: 1911 adds r1, r2, r4 + 80096e0: 4288 cmp r0, r1 + { + pxIterator->xBlockSize += pxBlockToInsert->xBlockSize; + 80096e2: bf01 itttt eq + 80096e4: 6841 ldreq r1, [r0, #4] + 80096e6: 4610 moveq r0, r2 + 80096e8: 1909 addeq r1, r1, r4 + 80096ea: 6051 streq r1, [r2, #4] + } + + /* Do the block being inserted, and the block it is being inserted before + make a contiguous block of memory? */ + puc = ( uint8_t * ) pxBlockToInsert; + if( ( puc + pxBlockToInsert->xBlockSize ) == ( uint8_t * ) pxIterator->pxNextFreeBlock ) + 80096ec: 6844 ldr r4, [r0, #4] + 80096ee: 1901 adds r1, r0, r4 + 80096f0: 428b cmp r3, r1 + 80096f2: d10c bne.n 800970e + { + if( pxIterator->pxNextFreeBlock != pxEnd ) + 80096f4: 4908 ldr r1, [pc, #32] ; (8009718 ) + 80096f6: 6809 ldr r1, [r1, #0] + 80096f8: 428b cmp r3, r1 + 80096fa: d003 beq.n 8009704 + { + /* Form one big block from the two blocks. */ + pxBlockToInsert->xBlockSize += pxIterator->pxNextFreeBlock->xBlockSize; + 80096fc: 6859 ldr r1, [r3, #4] + 80096fe: 4421 add r1, r4 + 8009700: 6041 str r1, [r0, #4] + pxBlockToInsert->pxNextFreeBlock = pxIterator->pxNextFreeBlock->pxNextFreeBlock; + 8009702: 6819 ldr r1, [r3, #0] + + /* If the block being inserted plugged a gab, so was merged with the block + before and the block after, then it's pxNextFreeBlock pointer will have + already been set, and should not be set here as that would make it point + to itself. */ + if( pxIterator != pxBlockToInsert ) + 8009704: 4290 cmp r0, r2 + pxBlockToInsert->pxNextFreeBlock = pxEnd; + 8009706: 6001 str r1, [r0, #0] + { + pxIterator->pxNextFreeBlock = pxBlockToInsert; + 8009708: bf18 it ne + 800970a: 6010 strne r0, [r2, #0] + } + else + { + mtCOVERAGE_TEST_MARKER(); + } +} + 800970c: bd10 pop {r4, pc} + 800970e: 4619 mov r1, r3 + 8009710: e7f8 b.n 8009704 + 8009712: bf00 nop + 8009714: 2001a794 .word 0x2001a794 + 8009718: 2000828c .word 0x2000828c + +0800971c : +{ + 800971c: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} + 8009720: 4604 mov r4, r0 + vTaskSuspendAll(); + 8009722: f001 fa37 bl 800ab94 + if( pxEnd == NULL ) + 8009726: 4940 ldr r1, [pc, #256] ; (8009828 ) + 8009728: 4d40 ldr r5, [pc, #256] ; (800982c ) + 800972a: 680b ldr r3, [r1, #0] + 800972c: b9f3 cbnz r3, 800976c + uxAddress = ( size_t ) ucHeap; + 800972e: 4a40 ldr r2, [pc, #256] ; (8009830 ) + xStart.xBlockSize = ( size_t ) 0; + 8009730: 2000 movs r0, #0 + if( ( uxAddress & portBYTE_ALIGNMENT_MASK ) != 0 ) + 8009732: 0756 lsls r6, r2, #29 + xStart.pxNextFreeBlock = ( void * ) pucAlignedHeap; + 8009734: 4e3f ldr r6, [pc, #252] ; (8009834 ) + uxAddress += ( portBYTE_ALIGNMENT - 1 ); + 8009736: bf1b ittet ne + 8009738: 3207 addne r2, #7 + xTotalHeapSize -= uxAddress - ( size_t ) ucHeap; + 800973a: 4b3f ldrne r3, [pc, #252] ; (8009838 ) +size_t xTotalHeapSize = configTOTAL_HEAP_SIZE; + 800973c: 4b3f ldreq r3, [pc, #252] ; (800983c ) + uxAddress &= ~( ( size_t ) portBYTE_ALIGNMENT_MASK ); + 800973e: f022 0207 bicne.w r2, r2, #7 + xStart.xBlockSize = ( size_t ) 0; + 8009742: 6070 str r0, [r6, #4] + xTotalHeapSize -= uxAddress - ( size_t ) ucHeap; + 8009744: bf18 it ne + 8009746: 1a9b subne r3, r3, r2 + xStart.pxNextFreeBlock = ( void * ) pucAlignedHeap; + 8009748: 6032 str r2, [r6, #0] + uxAddress = ( ( size_t ) pucAlignedHeap ) + xTotalHeapSize; + 800974a: 4413 add r3, r2 + uxAddress -= xHeapStructSize; + 800974c: 3b08 subs r3, #8 + uxAddress &= ~( ( size_t ) portBYTE_ALIGNMENT_MASK ); + 800974e: f023 0307 bic.w r3, r3, #7 + pxEnd->pxNextFreeBlock = NULL; + 8009752: e9c3 0000 strd r0, r0, [r3] + pxFirstFreeBlock->xBlockSize = uxAddress - ( size_t ) pxFirstFreeBlock; + 8009756: 1a98 subs r0, r3, r2 + pxEnd = ( void * ) uxAddress; + 8009758: 600b str r3, [r1, #0] + pxFirstFreeBlock->pxNextFreeBlock = pxEnd; + 800975a: e9c2 3000 strd r3, r0, [r2] + xMinimumEverFreeBytesRemaining = pxFirstFreeBlock->xBlockSize; + 800975e: 4b38 ldr r3, [pc, #224] ; (8009840 ) + 8009760: 6018 str r0, [r3, #0] + xFreeBytesRemaining = pxFirstFreeBlock->xBlockSize; + 8009762: 4b38 ldr r3, [pc, #224] ; (8009844 ) + 8009764: 6018 str r0, [r3, #0] + xBlockAllocatedBit = ( ( size_t ) 1 ) << ( ( sizeof( size_t ) * heapBITS_PER_BYTE ) - 1 ); + 8009766: f04f 4300 mov.w r3, #2147483648 ; 0x80000000 + 800976a: 602b str r3, [r5, #0] + if( ( xWantedSize & xBlockAllocatedBit ) == 0 ) + 800976c: 682e ldr r6, [r5, #0] + 800976e: 4226 tst r6, r4 + 8009770: d154 bne.n 800981c + if( xWantedSize > 0 ) + 8009772: 2c00 cmp r4, #0 + 8009774: d043 beq.n 80097fe + xWantedSize += xHeapStructSize; + 8009776: f104 0308 add.w r3, r4, #8 + if( ( xWantedSize & portBYTE_ALIGNMENT_MASK ) != 0x00 ) + 800977a: 0760 lsls r0, r4, #29 + xWantedSize += ( portBYTE_ALIGNMENT - ( xWantedSize & portBYTE_ALIGNMENT_MASK ) ); + 800977c: bf1c itt ne + 800977e: f023 0307 bicne.w r3, r3, #7 + 8009782: 3308 addne r3, #8 + if( ( xWantedSize > 0 ) && ( xWantedSize <= xFreeBytesRemaining ) ) + 8009784: 2b00 cmp r3, #0 + 8009786: d049 beq.n 800981c + 8009788: 4f2e ldr r7, [pc, #184] ; (8009844 ) + 800978a: 683c ldr r4, [r7, #0] + 800978c: 429c cmp r4, r3 + 800978e: d345 bcc.n 800981c + pxBlock = xStart.pxNextFreeBlock; + 8009790: 4a28 ldr r2, [pc, #160] ; (8009834 ) + 8009792: 6815 ldr r5, [r2, #0] + while( ( pxBlock->xBlockSize < xWantedSize ) && ( pxBlock->pxNextFreeBlock != NULL ) ) + 8009794: 6868 ldr r0, [r5, #4] + 8009796: 4298 cmp r0, r3 + 8009798: d204 bcs.n 80097a4 + 800979a: f8d5 c000 ldr.w ip, [r5] + 800979e: f1bc 0f00 cmp.w ip, #0 + 80097a2: d117 bne.n 80097d4 + if( pxBlock != pxEnd ) + 80097a4: 6809 ldr r1, [r1, #0] + 80097a6: 42a9 cmp r1, r5 + 80097a8: d038 beq.n 800981c + pxPreviousBlock->pxNextFreeBlock = pxBlock->pxNextFreeBlock; + 80097aa: 6829 ldr r1, [r5, #0] + pvReturn = ( void * ) ( ( ( uint8_t * ) pxPreviousBlock->pxNextFreeBlock ) + xHeapStructSize ); + 80097ac: f8d2 8000 ldr.w r8, [r2] + pxPreviousBlock->pxNextFreeBlock = pxBlock->pxNextFreeBlock; + 80097b0: 6011 str r1, [r2, #0] + if( ( pxBlock->xBlockSize - xWantedSize ) > heapMINIMUM_BLOCK_SIZE ) + 80097b2: 1ac2 subs r2, r0, r3 + 80097b4: 2a10 cmp r2, #16 + 80097b6: d914 bls.n 80097e2 + pxNewBlockLink = ( void * ) ( ( ( uint8_t * ) pxBlock ) + xWantedSize ); + 80097b8: 18e8 adds r0, r5, r3 + configASSERT( ( ( ( size_t ) pxNewBlockLink ) & portBYTE_ALIGNMENT_MASK ) == 0 ); + 80097ba: 0741 lsls r1, r0, #29 + 80097bc: d00d beq.n 80097da + +portFORCE_INLINE static void vPortRaiseBASEPRI( void ) +{ +uint32_t ulNewBASEPRI; + + __asm volatile + 80097be: f04f 0350 mov.w r3, #80 ; 0x50 + 80097c2: b672 cpsid i + 80097c4: f383 8811 msr BASEPRI, r3 + 80097c8: f3bf 8f6f isb sy + 80097cc: f3bf 8f4f dsb sy + 80097d0: b662 cpsie i + 80097d2: e7fe b.n 80097d2 + 80097d4: 462a mov r2, r5 + 80097d6: 4665 mov r5, ip + 80097d8: e7dc b.n 8009794 + pxNewBlockLink->xBlockSize = pxBlock->xBlockSize - xWantedSize; + 80097da: 6042 str r2, [r0, #4] + pxBlock->xBlockSize = xWantedSize; + 80097dc: 606b str r3, [r5, #4] + prvInsertBlockIntoFreeList( pxNewBlockLink ); + 80097de: f7ff ff77 bl 80096d0 + xFreeBytesRemaining -= pxBlock->xBlockSize; + 80097e2: 686a ldr r2, [r5, #4] + pxBlock->pxNextFreeBlock = NULL; + 80097e4: 2300 movs r3, #0 + if( xFreeBytesRemaining < xMinimumEverFreeBytesRemaining ) + 80097e6: 4916 ldr r1, [pc, #88] ; (8009840 ) + xFreeBytesRemaining -= pxBlock->xBlockSize; + 80097e8: 1aa4 subs r4, r4, r2 + pxBlock->xBlockSize |= xBlockAllocatedBit; + 80097ea: 4316 orrs r6, r2 + if( xFreeBytesRemaining < xMinimumEverFreeBytesRemaining ) + 80097ec: 6808 ldr r0, [r1, #0] + xFreeBytesRemaining -= pxBlock->xBlockSize; + 80097ee: 603c str r4, [r7, #0] + if( xFreeBytesRemaining < xMinimumEverFreeBytesRemaining ) + 80097f0: 4284 cmp r4, r0 + pxBlock->xBlockSize |= xBlockAllocatedBit; + 80097f2: 606e str r6, [r5, #4] + pxBlock->pxNextFreeBlock = NULL; + 80097f4: 602b str r3, [r5, #0] + xMinimumEverFreeBytesRemaining = xFreeBytesRemaining; + 80097f6: bf38 it cc + 80097f8: 600c strcc r4, [r1, #0] + pvReturn = ( void * ) ( ( ( uint8_t * ) pxPreviousBlock->pxNextFreeBlock ) + xHeapStructSize ); + 80097fa: f108 0408 add.w r4, r8, #8 + ( void ) xTaskResumeAll(); + 80097fe: f001 fa77 bl 800acf0 + configASSERT( ( ( ( size_t ) pvReturn ) & ( size_t ) portBYTE_ALIGNMENT_MASK ) == 0 ); + 8009802: 0763 lsls r3, r4, #29 + 8009804: d00c beq.n 8009820 + 8009806: f04f 0350 mov.w r3, #80 ; 0x50 + 800980a: b672 cpsid i + 800980c: f383 8811 msr BASEPRI, r3 + 8009810: f3bf 8f6f isb sy + 8009814: f3bf 8f4f dsb sy + 8009818: b662 cpsie i + 800981a: e7fe b.n 800981a +void *pvReturn = NULL; + 800981c: 2400 movs r4, #0 + 800981e: e7ee b.n 80097fe +} + 8009820: 4620 mov r0, r4 + 8009822: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + 8009826: bf00 nop + 8009828: 2000828c .word 0x2000828c + 800982c: 2001a788 .word 0x2001a788 + 8009830: 20008290 .word 0x20008290 + 8009834: 2001a794 .word 0x2001a794 + 8009838: 2001a788 .word 0x2001a788 + 800983c: 000124f8 .word 0x000124f8 + 8009840: 2001a790 .word 0x2001a790 + 8009844: 2001a78c .word 0x2001a78c + +08009848 : +{ + 8009848: b510 push {r4, lr} + if( pv != NULL ) + 800984a: 4604 mov r4, r0 + 800984c: 2800 cmp r0, #0 + 800984e: d032 beq.n 80098b6 + configASSERT( ( pxLink->xBlockSize & xBlockAllocatedBit ) != 0 ); + 8009850: 4a19 ldr r2, [pc, #100] ; (80098b8 ) + 8009852: f850 3c04 ldr.w r3, [r0, #-4] + 8009856: 6812 ldr r2, [r2, #0] + 8009858: 4213 tst r3, r2 + 800985a: d10a bne.n 8009872 + 800985c: f04f 0350 mov.w r3, #80 ; 0x50 + 8009860: b672 cpsid i + 8009862: f383 8811 msr BASEPRI, r3 + 8009866: f3bf 8f6f isb sy + 800986a: f3bf 8f4f dsb sy + 800986e: b662 cpsie i + 8009870: e7fe b.n 8009870 + configASSERT( pxLink->pxNextFreeBlock == NULL ); + 8009872: f850 1c08 ldr.w r1, [r0, #-8] + 8009876: b151 cbz r1, 800988e + 8009878: f04f 0350 mov.w r3, #80 ; 0x50 + 800987c: b672 cpsid i + 800987e: f383 8811 msr BASEPRI, r3 + 8009882: f3bf 8f6f isb sy + 8009886: f3bf 8f4f dsb sy + 800988a: b662 cpsie i + 800988c: e7fe b.n 800988c + pxLink->xBlockSize &= ~xBlockAllocatedBit; + 800988e: ea23 0302 bic.w r3, r3, r2 + 8009892: f840 3c04 str.w r3, [r0, #-4] + vTaskSuspendAll(); + 8009896: f001 f97d bl 800ab94 + xFreeBytesRemaining += pxLink->xBlockSize; + 800989a: 4a08 ldr r2, [pc, #32] ; (80098bc ) + 800989c: f854 3c04 ldr.w r3, [r4, #-4] + prvInsertBlockIntoFreeList( ( ( BlockLink_t * ) pxLink ) ); + 80098a0: f1a4 0008 sub.w r0, r4, #8 + xFreeBytesRemaining += pxLink->xBlockSize; + 80098a4: 6811 ldr r1, [r2, #0] + 80098a6: 440b add r3, r1 + 80098a8: 6013 str r3, [r2, #0] + prvInsertBlockIntoFreeList( ( ( BlockLink_t * ) pxLink ) ); + 80098aa: f7ff ff11 bl 80096d0 +} + 80098ae: e8bd 4010 ldmia.w sp!, {r4, lr} + ( void ) xTaskResumeAll(); + 80098b2: f001 ba1d b.w 800acf0 +} + 80098b6: bd10 pop {r4, pc} + 80098b8: 2001a788 .word 0x2001a788 + 80098bc: 2001a78c .word 0x2001a78c + +080098c0 : +void vListInitialise( List_t * const pxList ) +{ + /* The list structure contains a list item which is used to mark the + end of the list. To initialise the list the list end is inserted + as the only list entry. */ + pxList->pxIndex = ( ListItem_t * ) &( pxList->xListEnd ); /*lint !e826 !e740 !e9087 The mini list structure is used as the list end to save RAM. This is checked and valid. */ + 80098c0: f100 0308 add.w r3, r0, #8 + + /* The list end value is the highest possible value in the list to + ensure it remains at the end of the list. */ + pxList->xListEnd.xItemValue = portMAX_DELAY; + 80098c4: f04f 32ff mov.w r2, #4294967295 + pxList->pxIndex = ( ListItem_t * ) &( pxList->xListEnd ); /*lint !e826 !e740 !e9087 The mini list structure is used as the list end to save RAM. This is checked and valid. */ + 80098c8: 6043 str r3, [r0, #4] + + /* The list end next and previous pointers point to itself so we know + when the list is empty. */ + pxList->xListEnd.pxNext = ( ListItem_t * ) &( pxList->xListEnd ); /*lint !e826 !e740 !e9087 The mini list structure is used as the list end to save RAM. This is checked and valid. */ + pxList->xListEnd.pxPrevious = ( ListItem_t * ) &( pxList->xListEnd );/*lint !e826 !e740 !e9087 The mini list structure is used as the list end to save RAM. This is checked and valid. */ + 80098ca: 6103 str r3, [r0, #16] + pxList->xListEnd.pxNext = ( ListItem_t * ) &( pxList->xListEnd ); /*lint !e826 !e740 !e9087 The mini list structure is used as the list end to save RAM. This is checked and valid. */ + 80098cc: e9c0 2302 strd r2, r3, [r0, #8] + + pxList->uxNumberOfItems = ( UBaseType_t ) 0U; + 80098d0: 2300 movs r3, #0 + 80098d2: 6003 str r3, [r0, #0] + + /* Write known values into the list if + configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */ + listSET_LIST_INTEGRITY_CHECK_1_VALUE( pxList ); + listSET_LIST_INTEGRITY_CHECK_2_VALUE( pxList ); +} + 80098d4: 4770 bx lr + +080098d6 : +/*-----------------------------------------------------------*/ + +void vListInitialiseItem( ListItem_t * const pxItem ) +{ + /* Make sure the list item is not recorded as being on a list. */ + pxItem->pxContainer = NULL; + 80098d6: 2300 movs r3, #0 + 80098d8: 6103 str r3, [r0, #16] + + /* Write known values into the list item if + configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */ + listSET_FIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE( pxItem ); + listSET_SECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE( pxItem ); +} + 80098da: 4770 bx lr + +080098dc : +/*-----------------------------------------------------------*/ + +void vListInsertEnd( List_t * const pxList, ListItem_t * const pxNewListItem ) +{ +ListItem_t * const pxIndex = pxList->pxIndex; + 80098dc: 6843 ldr r3, [r0, #4] + + /* Insert a new list item into pxList, but rather than sort the list, + makes the new list item the last item to be removed by a call to + listGET_OWNER_OF_NEXT_ENTRY(). */ + pxNewListItem->pxNext = pxIndex; + pxNewListItem->pxPrevious = pxIndex->pxPrevious; + 80098de: 689a ldr r2, [r3, #8] + pxNewListItem->pxNext = pxIndex; + 80098e0: 604b str r3, [r1, #4] + pxNewListItem->pxPrevious = pxIndex->pxPrevious; + 80098e2: 608a str r2, [r1, #8] + + /* Only used during decision coverage testing. */ + mtCOVERAGE_TEST_DELAY(); + + pxIndex->pxPrevious->pxNext = pxNewListItem; + 80098e4: 689a ldr r2, [r3, #8] + 80098e6: 6051 str r1, [r2, #4] + pxIndex->pxPrevious = pxNewListItem; + 80098e8: 6099 str r1, [r3, #8] + + /* Remember which list the item is in. */ + pxNewListItem->pxContainer = pxList; + + ( pxList->uxNumberOfItems )++; + 80098ea: 6803 ldr r3, [r0, #0] + pxNewListItem->pxContainer = pxList; + 80098ec: 6108 str r0, [r1, #16] + ( pxList->uxNumberOfItems )++; + 80098ee: 3301 adds r3, #1 + 80098f0: 6003 str r3, [r0, #0] +} + 80098f2: 4770 bx lr + +080098f4 : +/*-----------------------------------------------------------*/ + +void vListInsert( List_t * const pxList, ListItem_t * const pxNewListItem ) +{ + 80098f4: b530 push {r4, r5, lr} +ListItem_t *pxIterator; +const TickType_t xValueOfInsertion = pxNewListItem->xItemValue; + 80098f6: 680c ldr r4, [r1, #0] + new list item should be placed after it. This ensures that TCBs which are + stored in ready lists (all of which have the same xItemValue value) get a + share of the CPU. However, if the xItemValue is the same as the back marker + the iteration loop below will not end. Therefore the value is checked + first, and the algorithm slightly modified if necessary. */ + if( xValueOfInsertion == portMAX_DELAY ) + 80098f8: 1c63 adds r3, r4, #1 + 80098fa: d10a bne.n 8009912 + { + pxIterator = pxList->xListEnd.pxPrevious; + 80098fc: 6903 ldr r3, [r0, #16] + /* There is nothing to do here, just iterating to the wanted + insertion position. */ + } + } + + pxNewListItem->pxNext = pxIterator->pxNext; + 80098fe: 685a ldr r2, [r3, #4] + 8009900: 604a str r2, [r1, #4] + pxNewListItem->pxNext->pxPrevious = pxNewListItem; + 8009902: 6091 str r1, [r2, #8] + pxNewListItem->pxPrevious = pxIterator; + 8009904: 608b str r3, [r1, #8] + pxIterator->pxNext = pxNewListItem; + 8009906: 6059 str r1, [r3, #4] + + /* Remember which list the item is in. This allows fast removal of the + item later. */ + pxNewListItem->pxContainer = pxList; + + ( pxList->uxNumberOfItems )++; + 8009908: 6803 ldr r3, [r0, #0] + pxNewListItem->pxContainer = pxList; + 800990a: 6108 str r0, [r1, #16] + ( pxList->uxNumberOfItems )++; + 800990c: 3301 adds r3, #1 + 800990e: 6003 str r3, [r0, #0] +} + 8009910: bd30 pop {r4, r5, pc} + for( pxIterator = ( ListItem_t * ) &( pxList->xListEnd ); pxIterator->pxNext->xItemValue <= xValueOfInsertion; pxIterator = pxIterator->pxNext ) /*lint !e826 !e740 !e9087 The mini list structure is used as the list end to save RAM. This is checked and valid. *//*lint !e440 The iterator moves to a different value, not xValueOfInsertion. */ + 8009912: f100 0208 add.w r2, r0, #8 + 8009916: 4613 mov r3, r2 + 8009918: 6852 ldr r2, [r2, #4] + 800991a: 6815 ldr r5, [r2, #0] + 800991c: 42a5 cmp r5, r4 + 800991e: d9fa bls.n 8009916 + 8009920: e7ed b.n 80098fe + +08009922 : + +UBaseType_t uxListRemove( ListItem_t * const pxItemToRemove ) +{ +/* The list item knows which list it is in. Obtain the list from the list +item. */ +List_t * const pxList = pxItemToRemove->pxContainer; + 8009922: 6903 ldr r3, [r0, #16] + + pxItemToRemove->pxNext->pxPrevious = pxItemToRemove->pxPrevious; + 8009924: e9d0 1201 ldrd r1, r2, [r0, #4] + 8009928: 608a str r2, [r1, #8] + pxItemToRemove->pxPrevious->pxNext = pxItemToRemove->pxNext; + 800992a: 6051 str r1, [r2, #4] + + /* Only used during decision coverage testing. */ + mtCOVERAGE_TEST_DELAY(); + + /* Make sure the index is left pointing to a valid item. */ + if( pxList->pxIndex == pxItemToRemove ) + 800992c: 6859 ldr r1, [r3, #4] + 800992e: 4281 cmp r1, r0 + { + pxList->pxIndex = pxItemToRemove->pxPrevious; + 8009930: bf08 it eq + 8009932: 605a streq r2, [r3, #4] + else + { + mtCOVERAGE_TEST_MARKER(); + } + + pxItemToRemove->pxContainer = NULL; + 8009934: 2200 movs r2, #0 + 8009936: 6102 str r2, [r0, #16] + ( pxList->uxNumberOfItems )--; + 8009938: 681a ldr r2, [r3, #0] + 800993a: 3a01 subs r2, #1 + 800993c: 601a str r2, [r3, #0] + + return pxList->uxNumberOfItems; + 800993e: 6818 ldr r0, [r3, #0] +} + 8009940: 4770 bx lr + ... + +08009944 : +{ + /* Start the first task. This also clears the bit that indicates the FPU is + in use in case the FPU was used before the scheduler was started - which + would otherwise result in the unnecessary leaving of space in the SVC stack + for lazy saving of FPU registers. */ + __asm volatile( + 8009944: 4808 ldr r0, [pc, #32] ; (8009968 ) + 8009946: 6800 ldr r0, [r0, #0] + 8009948: 6800 ldr r0, [r0, #0] + 800994a: f380 8808 msr MSP, r0 + 800994e: f04f 0000 mov.w r0, #0 + 8009952: f380 8814 msr CONTROL, r0 + 8009956: b662 cpsie i + 8009958: b661 cpsie f + 800995a: f3bf 8f4f dsb sy + 800995e: f3bf 8f6f isb sy + 8009962: df00 svc 0 + 8009964: bf00 nop + " dsb \n" + " isb \n" + " svc 0 \n" /* System call to start first task. */ + " nop \n" + ); +} + 8009966: 0000 .short 0x0000 + 8009968: e000ed08 .word 0xe000ed08 + +0800996c : +/*-----------------------------------------------------------*/ + +/* This is a naked function. */ +static void vPortEnableVFP( void ) +{ + __asm volatile + 800996c: f8df 000c ldr.w r0, [pc, #12] ; 800997c + 8009970: 6801 ldr r1, [r0, #0] + 8009972: f441 0170 orr.w r1, r1, #15728640 ; 0xf00000 + 8009976: 6001 str r1, [r0, #0] + 8009978: 4770 bx lr + " \n" + " orr r1, r1, #( 0xf << 20 ) \n" /* Enable CP10 and CP11 coprocessors, then save back. */ + " str r1, [r0] \n" + " bx r14 " + ); +} + 800997a: 0000 .short 0x0000 + 800997c: e000ed88 .word 0xe000ed88 + +08009980 : +volatile uint32_t ulDummy = 0; + 8009980: 2300 movs r3, #0 +{ + 8009982: b082 sub sp, #8 +volatile uint32_t ulDummy = 0; + 8009984: 9301 str r3, [sp, #4] + configASSERT( uxCriticalNesting == ~0UL ); + 8009986: 4b0f ldr r3, [pc, #60] ; (80099c4 ) + 8009988: 681b ldr r3, [r3, #0] + 800998a: 3301 adds r3, #1 + 800998c: d00a beq.n 80099a4 + 800998e: f04f 0350 mov.w r3, #80 ; 0x50 + 8009992: b672 cpsid i + 8009994: f383 8811 msr BASEPRI, r3 + 8009998: f3bf 8f6f isb sy + 800999c: f3bf 8f4f dsb sy + 80099a0: b662 cpsie i + 80099a2: e7fe b.n 80099a2 + 80099a4: f04f 0350 mov.w r3, #80 ; 0x50 + 80099a8: b672 cpsid i + 80099aa: f383 8811 msr BASEPRI, r3 + 80099ae: f3bf 8f6f isb sy + 80099b2: f3bf 8f4f dsb sy + 80099b6: b662 cpsie i + while( ulDummy == 0 ) + 80099b8: 9b01 ldr r3, [sp, #4] + 80099ba: 2b00 cmp r3, #0 + 80099bc: d0fc beq.n 80099b8 +} + 80099be: b002 add sp, #8 + 80099c0: 4770 bx lr + 80099c2: bf00 nop + 80099c4: 20000054 .word 0x20000054 + +080099c8 : + *pxTopOfStack = portINITIAL_XPSR; /* xPSR */ + 80099c8: f04f 7380 mov.w r3, #16777216 ; 0x1000000 + *pxTopOfStack = ( ( StackType_t ) pxCode ) & portSTART_ADDRESS_MASK; /* PC */ + 80099cc: f021 0101 bic.w r1, r1, #1 + *pxTopOfStack = ( StackType_t ) pvParameters; /* R0 */ + 80099d0: f840 2c20 str.w r2, [r0, #-32] +} + 80099d4: 3844 subs r0, #68 ; 0x44 + *pxTopOfStack = portINITIAL_XPSR; /* xPSR */ + 80099d6: 6403 str r3, [r0, #64] ; 0x40 + *pxTopOfStack = ( StackType_t ) portTASK_RETURN_ADDRESS; /* LR */ + 80099d8: 4b03 ldr r3, [pc, #12] ; (80099e8 ) + *pxTopOfStack = ( ( StackType_t ) pxCode ) & portSTART_ADDRESS_MASK; /* PC */ + 80099da: 63c1 str r1, [r0, #60] ; 0x3c + *pxTopOfStack = ( StackType_t ) portTASK_RETURN_ADDRESS; /* LR */ + 80099dc: 6383 str r3, [r0, #56] ; 0x38 + *pxTopOfStack = portINITIAL_EXC_RETURN; + 80099de: f06f 0302 mvn.w r3, #2 + 80099e2: 6203 str r3, [r0, #32] +} + 80099e4: 4770 bx lr + 80099e6: bf00 nop + 80099e8: 08009981 .word 0x08009981 + 80099ec: 00000000 .word 0x00000000 + +080099f0 : + __asm volatile ( + 80099f0: 4b07 ldr r3, [pc, #28] ; (8009a10 ) + 80099f2: 6819 ldr r1, [r3, #0] + 80099f4: 6808 ldr r0, [r1, #0] + 80099f6: e8b0 4ff0 ldmia.w r0!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 80099fa: f380 8809 msr PSP, r0 + 80099fe: f3bf 8f6f isb sy + 8009a02: f04f 0000 mov.w r0, #0 + 8009a06: f380 8811 msr BASEPRI, r0 + 8009a0a: 4770 bx lr + 8009a0c: f3af 8000 nop.w + +08009a10 : + 8009a10: 2001a7e4 .word 0x2001a7e4 + +08009a14 : + 8009a14: f04f 0350 mov.w r3, #80 ; 0x50 + 8009a18: b672 cpsid i + 8009a1a: f383 8811 msr BASEPRI, r3 + 8009a1e: f3bf 8f6f isb sy + 8009a22: f3bf 8f4f dsb sy + 8009a26: b662 cpsie i + uxCriticalNesting++; + 8009a28: 4a0b ldr r2, [pc, #44] ; (8009a58 ) + 8009a2a: 6813 ldr r3, [r2, #0] + 8009a2c: 3301 adds r3, #1 + if( uxCriticalNesting == 1 ) + 8009a2e: 2b01 cmp r3, #1 + uxCriticalNesting++; + 8009a30: 6013 str r3, [r2, #0] + if( uxCriticalNesting == 1 ) + 8009a32: d110 bne.n 8009a56 + configASSERT( ( portNVIC_INT_CTRL_REG & portVECTACTIVE_MASK ) == 0 ); + 8009a34: f04f 23e0 mov.w r3, #3758153728 ; 0xe000e000 + 8009a38: f8d3 3d04 ldr.w r3, [r3, #3332] ; 0xd04 + 8009a3c: b2db uxtb r3, r3 + 8009a3e: b153 cbz r3, 8009a56 + 8009a40: f04f 0350 mov.w r3, #80 ; 0x50 + 8009a44: b672 cpsid i + 8009a46: f383 8811 msr BASEPRI, r3 + 8009a4a: f3bf 8f6f isb sy + 8009a4e: f3bf 8f4f dsb sy + 8009a52: b662 cpsie i + 8009a54: e7fe b.n 8009a54 +} + 8009a56: 4770 bx lr + 8009a58: 20000054 .word 0x20000054 + +08009a5c : + configASSERT( uxCriticalNesting ); + 8009a5c: 4a09 ldr r2, [pc, #36] ; (8009a84 ) + 8009a5e: 6813 ldr r3, [r2, #0] + 8009a60: b953 cbnz r3, 8009a78 + 8009a62: f04f 0350 mov.w r3, #80 ; 0x50 + 8009a66: b672 cpsid i + 8009a68: f383 8811 msr BASEPRI, r3 + 8009a6c: f3bf 8f6f isb sy + 8009a70: f3bf 8f4f dsb sy + 8009a74: b662 cpsie i + 8009a76: e7fe b.n 8009a76 + uxCriticalNesting--; + 8009a78: 3b01 subs r3, #1 + 8009a7a: 6013 str r3, [r2, #0] + if( uxCriticalNesting == 0 ) + 8009a7c: b90b cbnz r3, 8009a82 +} +/*-----------------------------------------------------------*/ + +portFORCE_INLINE static void vPortSetBASEPRI( uint32_t ulNewMaskValue ) +{ + __asm volatile + 8009a7e: f383 8811 msr BASEPRI, r3 +} + 8009a82: 4770 bx lr + 8009a84: 20000054 .word 0x20000054 + ... + +08009a90 : + __asm volatile + 8009a90: f3ef 8009 mrs r0, PSP + 8009a94: f3bf 8f6f isb sy + 8009a98: 4b15 ldr r3, [pc, #84] ; (8009af0 ) + 8009a9a: 681a ldr r2, [r3, #0] + 8009a9c: f01e 0f10 tst.w lr, #16 + 8009aa0: bf08 it eq + 8009aa2: ed20 8a10 vstmdbeq r0!, {s16-s31} + 8009aa6: e920 4ff0 stmdb r0!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8009aaa: 6010 str r0, [r2, #0] + 8009aac: e92d 0009 stmdb sp!, {r0, r3} + 8009ab0: f04f 0050 mov.w r0, #80 ; 0x50 + 8009ab4: b672 cpsid i + 8009ab6: f380 8811 msr BASEPRI, r0 + 8009aba: f3bf 8f4f dsb sy + 8009abe: f3bf 8f6f isb sy + 8009ac2: b662 cpsie i + 8009ac4: f001 fa1e bl 800af04 + 8009ac8: f04f 0000 mov.w r0, #0 + 8009acc: f380 8811 msr BASEPRI, r0 + 8009ad0: bc09 pop {r0, r3} + 8009ad2: 6819 ldr r1, [r3, #0] + 8009ad4: 6808 ldr r0, [r1, #0] + 8009ad6: e8b0 4ff0 ldmia.w r0!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8009ada: f01e 0f10 tst.w lr, #16 + 8009ade: bf08 it eq + 8009ae0: ecb0 8a10 vldmiaeq r0!, {s16-s31} + 8009ae4: f380 8809 msr PSP, r0 + 8009ae8: f3bf 8f6f isb sy + 8009aec: 4770 bx lr + 8009aee: bf00 nop + +08009af0 : + 8009af0: 2001a7e4 .word 0x2001a7e4 + +08009af4 : +{ + 8009af4: b508 push {r3, lr} + __asm volatile + 8009af6: f04f 0350 mov.w r3, #80 ; 0x50 + 8009afa: b672 cpsid i + 8009afc: f383 8811 msr BASEPRI, r3 + 8009b00: f3bf 8f6f isb sy + 8009b04: f3bf 8f4f dsb sy + 8009b08: b662 cpsie i + if( xTaskIncrementTick() != pdFALSE ) + 8009b0a: f001 f859 bl 800abc0 + 8009b0e: b128 cbz r0, 8009b1c + portNVIC_INT_CTRL_REG = portNVIC_PENDSVSET_BIT; + 8009b10: f04f 23e0 mov.w r3, #3758153728 ; 0xe000e000 + 8009b14: f04f 5280 mov.w r2, #268435456 ; 0x10000000 + 8009b18: f8c3 2d04 str.w r2, [r3, #3332] ; 0xd04 + __asm volatile + 8009b1c: 2300 movs r3, #0 + 8009b1e: f383 8811 msr BASEPRI, r3 +} + 8009b22: bd08 pop {r3, pc} + +08009b24 : + portNVIC_SYSTICK_CTRL_REG = 0UL; + 8009b24: f04f 22e0 mov.w r2, #3758153728 ; 0xe000e000 + 8009b28: 2300 movs r3, #0 + portNVIC_SYSTICK_LOAD_REG = ( configSYSTICK_CLOCK_HZ / configTICK_RATE_HZ ) - 1UL; + 8009b2a: f44f 717a mov.w r1, #1000 ; 0x3e8 + portNVIC_SYSTICK_CTRL_REG = 0UL; + 8009b2e: 6113 str r3, [r2, #16] + portNVIC_SYSTICK_CURRENT_VALUE_REG = 0UL; + 8009b30: 6193 str r3, [r2, #24] + portNVIC_SYSTICK_LOAD_REG = ( configSYSTICK_CLOCK_HZ / configTICK_RATE_HZ ) - 1UL; + 8009b32: 4b04 ldr r3, [pc, #16] ; (8009b44 ) + 8009b34: 681b ldr r3, [r3, #0] + 8009b36: fbb3 f3f1 udiv r3, r3, r1 + 8009b3a: 3b01 subs r3, #1 + 8009b3c: 6153 str r3, [r2, #20] + portNVIC_SYSTICK_CTRL_REG = ( portNVIC_SYSTICK_CLK_BIT | portNVIC_SYSTICK_INT_BIT | portNVIC_SYSTICK_ENABLE_BIT ); + 8009b3e: 2307 movs r3, #7 + 8009b40: 6113 str r3, [r2, #16] +} + 8009b42: 4770 bx lr + 8009b44: 20000020 .word 0x20000020 + +08009b48 : + ulOriginalPriority = *pucFirstUserPriorityRegister; + 8009b48: 4b2e ldr r3, [pc, #184] ; (8009c04 ) +{ + 8009b4a: b537 push {r0, r1, r2, r4, r5, lr} + ulOriginalPriority = *pucFirstUserPriorityRegister; + 8009b4c: 781a ldrb r2, [r3, #0] + while( ( ucMaxPriorityValue & portTOP_BIT_OF_BYTE ) == portTOP_BIT_OF_BYTE ) + 8009b4e: 2100 movs r1, #0 + ulOriginalPriority = *pucFirstUserPriorityRegister; + 8009b50: b2d2 uxtb r2, r2 + 8009b52: 9201 str r2, [sp, #4] + *pucFirstUserPriorityRegister = portMAX_8_BIT_VALUE; + 8009b54: 22ff movs r2, #255 ; 0xff + 8009b56: 701a strb r2, [r3, #0] + ucMaxPriorityValue = *pucFirstUserPriorityRegister; + 8009b58: 781b ldrb r3, [r3, #0] + ucMaxSysCallPriority = configMAX_SYSCALL_INTERRUPT_PRIORITY & ucMaxPriorityValue; + 8009b5a: 4a2b ldr r2, [pc, #172] ; (8009c08 ) + ucMaxPriorityValue = *pucFirstUserPriorityRegister; + 8009b5c: b2db uxtb r3, r3 + 8009b5e: f88d 3003 strb.w r3, [sp, #3] + ucMaxSysCallPriority = configMAX_SYSCALL_INTERRUPT_PRIORITY & ucMaxPriorityValue; + 8009b62: f89d 3003 ldrb.w r3, [sp, #3] + 8009b66: f003 0350 and.w r3, r3, #80 ; 0x50 + 8009b6a: 7013 strb r3, [r2, #0] + ulMaxPRIGROUPValue = portMAX_PRIGROUP_BITS; + 8009b6c: 2307 movs r3, #7 + 8009b6e: 4a27 ldr r2, [pc, #156] ; (8009c0c ) + 8009b70: 6013 str r3, [r2, #0] + while( ( ucMaxPriorityValue & portTOP_BIT_OF_BYTE ) == portTOP_BIT_OF_BYTE ) + 8009b72: f89d 0003 ldrb.w r0, [sp, #3] + 8009b76: 1e5c subs r4, r3, #1 + 8009b78: 0600 lsls r0, r0, #24 + 8009b7a: d40e bmi.n 8009b9a + 8009b7c: b111 cbz r1, 8009b84 + configASSERT( ( portMAX_PRIGROUP_BITS - ulMaxPRIGROUPValue ) == configPRIO_BITS ); + 8009b7e: 2b03 cmp r3, #3 + 8009b80: 6013 str r3, [r2, #0] + 8009b82: d013 beq.n 8009bac + __asm volatile + 8009b84: f04f 0350 mov.w r3, #80 ; 0x50 + 8009b88: b672 cpsid i + 8009b8a: f383 8811 msr BASEPRI, r3 + 8009b8e: f3bf 8f6f isb sy + 8009b92: f3bf 8f4f dsb sy + 8009b96: b662 cpsie i + 8009b98: e7fe b.n 8009b98 + ucMaxPriorityValue <<= ( uint8_t ) 0x01; + 8009b9a: f89d 3003 ldrb.w r3, [sp, #3] + 8009b9e: 2101 movs r1, #1 + 8009ba0: 005b lsls r3, r3, #1 + 8009ba2: b2db uxtb r3, r3 + 8009ba4: f88d 3003 strb.w r3, [sp, #3] + 8009ba8: 4623 mov r3, r4 + 8009baa: e7e2 b.n 8009b72 + ulMaxPRIGROUPValue &= portPRIORITY_GROUP_MASK; + 8009bac: f44f 7340 mov.w r3, #768 ; 0x300 + portNVIC_SYSPRI2_REG |= portNVIC_PENDSV_PRI; + 8009bb0: f04f 24e0 mov.w r4, #3758153728 ; 0xe000e000 + uxCriticalNesting = 0; + 8009bb4: 2500 movs r5, #0 + ulMaxPRIGROUPValue &= portPRIORITY_GROUP_MASK; + 8009bb6: 6013 str r3, [r2, #0] + *pucFirstUserPriorityRegister = ulOriginalPriority; + 8009bb8: 9b01 ldr r3, [sp, #4] + 8009bba: 4a12 ldr r2, [pc, #72] ; (8009c04 ) + 8009bbc: b2db uxtb r3, r3 + 8009bbe: 7013 strb r3, [r2, #0] + portNVIC_SYSPRI2_REG |= portNVIC_PENDSV_PRI; + 8009bc0: f8d4 3d20 ldr.w r3, [r4, #3360] ; 0xd20 + 8009bc4: f443 0370 orr.w r3, r3, #15728640 ; 0xf00000 + 8009bc8: f8c4 3d20 str.w r3, [r4, #3360] ; 0xd20 + portNVIC_SYSPRI2_REG |= portNVIC_SYSTICK_PRI; + 8009bcc: f8d4 3d20 ldr.w r3, [r4, #3360] ; 0xd20 + 8009bd0: f043 4370 orr.w r3, r3, #4026531840 ; 0xf0000000 + 8009bd4: f8c4 3d20 str.w r3, [r4, #3360] ; 0xd20 + vPortSetupTimerInterrupt(); + 8009bd8: f7ff ffa4 bl 8009b24 + uxCriticalNesting = 0; + 8009bdc: 4b0c ldr r3, [pc, #48] ; (8009c10 ) + 8009bde: 601d str r5, [r3, #0] + vPortEnableVFP(); + 8009be0: f7ff fec4 bl 800996c + *( portFPCCR ) |= portASPEN_AND_LSPEN_BITS; + 8009be4: f8d4 3f34 ldr.w r3, [r4, #3892] ; 0xf34 + 8009be8: f043 4340 orr.w r3, r3, #3221225472 ; 0xc0000000 + 8009bec: f8c4 3f34 str.w r3, [r4, #3892] ; 0xf34 + prvPortStartFirstTask(); + 8009bf0: f7ff fea8 bl 8009944 + vTaskSwitchContext(); + 8009bf4: f001 f986 bl 800af04 +} + 8009bf8: 4628 mov r0, r5 + prvTaskExitError(); + 8009bfa: f7ff fec1 bl 8009980 +} + 8009bfe: b003 add sp, #12 + 8009c00: bd30 pop {r4, r5, pc} + 8009c02: bf00 nop + 8009c04: e000e400 .word 0xe000e400 + 8009c08: 2001a79c .word 0x2001a79c + 8009c0c: 2001a7a0 .word 0x2001a7a0 + 8009c10: 20000054 .word 0x20000054 + +08009c14 : + { + uint32_t ulCurrentInterrupt; + uint8_t ucCurrentPriority; + + /* Obtain the number of the currently executing interrupt. */ + __asm volatile( "mrs %0, ipsr" : "=r"( ulCurrentInterrupt ) :: "memory" ); + 8009c14: f3ef 8305 mrs r3, IPSR + + /* Is the interrupt number a user defined interrupt? */ + if( ulCurrentInterrupt >= portFIRST_USER_INTERRUPT_NUMBER ) + 8009c18: 2b0f cmp r3, #15 + 8009c1a: d910 bls.n 8009c3e + { + /* Look up the interrupt's priority. */ + ucCurrentPriority = pcInterruptPriorityRegisters[ ulCurrentInterrupt ]; + 8009c1c: 4a13 ldr r2, [pc, #76] ; (8009c6c ) + 8009c1e: 5c9b ldrb r3, [r3, r2] + interrupt entry is as fast and simple as possible. + + The following links provide detailed information: + http://www.freertos.org/RTOS-Cortex-M3-M4.html + http://www.freertos.org/FAQHelp.html */ + configASSERT( ucCurrentPriority >= ucMaxSysCallPriority ); + 8009c20: 4a13 ldr r2, [pc, #76] ; (8009c70 ) + 8009c22: 7812 ldrb r2, [r2, #0] + 8009c24: 429a cmp r2, r3 + 8009c26: d90a bls.n 8009c3e + 8009c28: f04f 0350 mov.w r3, #80 ; 0x50 + 8009c2c: b672 cpsid i + 8009c2e: f383 8811 msr BASEPRI, r3 + 8009c32: f3bf 8f6f isb sy + 8009c36: f3bf 8f4f dsb sy + 8009c3a: b662 cpsie i + 8009c3c: e7fe b.n 8009c3c + configuration then the correct setting can be achieved on all Cortex-M + devices by calling NVIC_SetPriorityGrouping( 0 ); before starting the + scheduler. Note however that some vendor specific peripheral libraries + assume a non-zero priority group setting, in which cases using a value + of zero will result in unpredictable behaviour. */ + configASSERT( ( portAIRCR_REG & portPRIORITY_GROUP_MASK ) <= ulMaxPRIGROUPValue ); + 8009c3e: f04f 23e0 mov.w r3, #3758153728 ; 0xe000e000 + 8009c42: 4a0c ldr r2, [pc, #48] ; (8009c74 ) + 8009c44: f8d3 3d0c ldr.w r3, [r3, #3340] ; 0xd0c + 8009c48: 6812 ldr r2, [r2, #0] + 8009c4a: f403 63e0 and.w r3, r3, #1792 ; 0x700 + 8009c4e: 4293 cmp r3, r2 + 8009c50: d90a bls.n 8009c68 + 8009c52: f04f 0350 mov.w r3, #80 ; 0x50 + 8009c56: b672 cpsid i + 8009c58: f383 8811 msr BASEPRI, r3 + 8009c5c: f3bf 8f6f isb sy + 8009c60: f3bf 8f4f dsb sy + 8009c64: b662 cpsie i + 8009c66: e7fe b.n 8009c66 + } + 8009c68: 4770 bx lr + 8009c6a: bf00 nop + 8009c6c: e000e3f0 .word 0xe000e3f0 + 8009c70: 2001a79c .word 0x2001a79c + 8009c74: 2001a7a0 .word 0x2001a7a0 + +08009c78 : + taskEXIT_CRITICAL(); +} +/*-----------------------------------------------------------*/ + +static BaseType_t prvIsQueueEmpty( const Queue_t *pxQueue ) +{ + 8009c78: b510 push {r4, lr} + 8009c7a: 4604 mov r4, r0 +BaseType_t xReturn; + + taskENTER_CRITICAL(); + 8009c7c: f7ff feca bl 8009a14 + { + if( pxQueue->uxMessagesWaiting == ( UBaseType_t ) 0 ) + 8009c80: 6ba4 ldr r4, [r4, #56] ; 0x38 + else + { + xReturn = pdFALSE; + } + } + taskEXIT_CRITICAL(); + 8009c82: f7ff feeb bl 8009a5c + + return xReturn; +} + 8009c86: fab4 f084 clz r0, r4 + 8009c8a: 0940 lsrs r0, r0, #5 + 8009c8c: bd10 pop {r4, pc} + +08009c8e : +{ + 8009c8e: b5f8 push {r3, r4, r5, r6, r7, lr} + 8009c90: 4615 mov r5, r2 + if( pxQueue->uxItemSize == ( UBaseType_t ) 0 ) + 8009c92: 6c02 ldr r2, [r0, #64] ; 0x40 +{ + 8009c94: 4604 mov r4, r0 + uxMessagesWaiting = pxQueue->uxMessagesWaiting; + 8009c96: 6b86 ldr r6, [r0, #56] ; 0x38 + if( pxQueue->uxItemSize == ( UBaseType_t ) 0 ) + 8009c98: b952 cbnz r2, 8009cb0 + if( pxQueue->uxQueueType == queueQUEUE_IS_MUTEX ) + 8009c9a: 6807 ldr r7, [r0, #0] + 8009c9c: bb47 cbnz r7, 8009cf0 + xReturn = xTaskPriorityDisinherit( pxQueue->u.xSemaphore.xMutexHolder ); + 8009c9e: 6880 ldr r0, [r0, #8] + 8009ca0: f001 faa0 bl 800b1e4 + 8009ca4: 4605 mov r5, r0 + pxQueue->u.xSemaphore.xMutexHolder = NULL; + 8009ca6: 60a7 str r7, [r4, #8] + pxQueue->uxMessagesWaiting = uxMessagesWaiting + ( UBaseType_t ) 1; + 8009ca8: 3601 adds r6, #1 +} + 8009caa: 4628 mov r0, r5 + pxQueue->uxMessagesWaiting = uxMessagesWaiting + ( UBaseType_t ) 1; + 8009cac: 63a6 str r6, [r4, #56] ; 0x38 +} + 8009cae: bdf8 pop {r3, r4, r5, r6, r7, pc} + else if( xPosition == queueSEND_TO_BACK ) + 8009cb0: b965 cbnz r5, 8009ccc + ( void ) memcpy( ( void * ) pxQueue->pcWriteTo, pvItemToQueue, ( size_t ) pxQueue->uxItemSize ); /*lint !e961 !e418 !e9087 MISRA exception as the casts are only redundant for some ports, plus previous logic ensures a null pointer can only be passed to memcpy() if the copy size is 0. Cast to void required by function signature and safe as no alignment requirement and copy length specified in bytes. */ + 8009cb2: 6840 ldr r0, [r0, #4] + 8009cb4: f02a ff5d bl 8034b72 + pxQueue->pcWriteTo += pxQueue->uxItemSize; /*lint !e9016 Pointer arithmetic on char types ok, especially in this use case where it is the clearest way of conveying intent. */ + 8009cb8: 6863 ldr r3, [r4, #4] + 8009cba: 6c22 ldr r2, [r4, #64] ; 0x40 + 8009cbc: 4413 add r3, r2 + if( pxQueue->pcWriteTo >= pxQueue->u.xQueue.pcTail ) /*lint !e946 MISRA exception justified as comparison of pointers is the cleanest solution. */ + 8009cbe: 68a2 ldr r2, [r4, #8] + 8009cc0: 4293 cmp r3, r2 + pxQueue->pcWriteTo += pxQueue->uxItemSize; /*lint !e9016 Pointer arithmetic on char types ok, especially in this use case where it is the clearest way of conveying intent. */ + 8009cc2: 6063 str r3, [r4, #4] + if( pxQueue->pcWriteTo >= pxQueue->u.xQueue.pcTail ) /*lint !e946 MISRA exception justified as comparison of pointers is the cleanest solution. */ + 8009cc4: d3f0 bcc.n 8009ca8 + pxQueue->pcWriteTo = pxQueue->pcHead; + 8009cc6: 6823 ldr r3, [r4, #0] + 8009cc8: 6063 str r3, [r4, #4] + 8009cca: e7ed b.n 8009ca8 + ( void ) memcpy( ( void * ) pxQueue->u.xQueue.pcReadFrom, pvItemToQueue, ( size_t ) pxQueue->uxItemSize ); /*lint !e961 !e9087 !e418 MISRA exception as the casts are only redundant for some ports. Cast to void required by function signature and safe as no alignment requirement and copy length specified in bytes. Assert checks null pointer only used when length is 0. */ + 8009ccc: 68c0 ldr r0, [r0, #12] + 8009cce: f02a ff50 bl 8034b72 + pxQueue->u.xQueue.pcReadFrom -= pxQueue->uxItemSize; + 8009cd2: 6c22 ldr r2, [r4, #64] ; 0x40 + 8009cd4: 68e3 ldr r3, [r4, #12] + 8009cd6: 4251 negs r1, r2 + 8009cd8: 1a9b subs r3, r3, r2 + if( pxQueue->u.xQueue.pcReadFrom < pxQueue->pcHead ) /*lint !e946 MISRA exception justified as comparison of pointers is the cleanest solution. */ + 8009cda: 6822 ldr r2, [r4, #0] + 8009cdc: 4293 cmp r3, r2 + pxQueue->u.xQueue.pcReadFrom -= pxQueue->uxItemSize; + 8009cde: 60e3 str r3, [r4, #12] + pxQueue->u.xQueue.pcReadFrom = ( pxQueue->u.xQueue.pcTail - pxQueue->uxItemSize ); + 8009ce0: bf3e ittt cc + 8009ce2: 68a3 ldrcc r3, [r4, #8] + 8009ce4: 185b addcc r3, r3, r1 + 8009ce6: 60e3 strcc r3, [r4, #12] + if( xPosition == queueOVERWRITE ) + 8009ce8: 2d02 cmp r5, #2 + 8009cea: d101 bne.n 8009cf0 + if( uxMessagesWaiting > ( UBaseType_t ) 0 ) + 8009cec: b116 cbz r6, 8009cf4 + --uxMessagesWaiting; + 8009cee: 3e01 subs r6, #1 +BaseType_t xReturn = pdFALSE; + 8009cf0: 2500 movs r5, #0 + 8009cf2: e7d9 b.n 8009ca8 + 8009cf4: 4635 mov r5, r6 + 8009cf6: e7d7 b.n 8009ca8 + +08009cf8 : +{ + 8009cf8: 4603 mov r3, r0 + 8009cfa: 4608 mov r0, r1 + if( pxQueue->uxItemSize != ( UBaseType_t ) 0 ) + 8009cfc: 6c1a ldr r2, [r3, #64] ; 0x40 +{ + 8009cfe: b410 push {r4} + if( pxQueue->uxItemSize != ( UBaseType_t ) 0 ) + 8009d00: b162 cbz r2, 8009d1c + pxQueue->u.xQueue.pcReadFrom += pxQueue->uxItemSize; /*lint !e9016 Pointer arithmetic on char types ok, especially in this use case where it is the clearest way of conveying intent. */ + 8009d02: 68dc ldr r4, [r3, #12] + if( pxQueue->u.xQueue.pcReadFrom >= pxQueue->u.xQueue.pcTail ) /*lint !e946 MISRA exception justified as use of the relational operator is the cleanest solutions. */ + 8009d04: 6899 ldr r1, [r3, #8] + pxQueue->u.xQueue.pcReadFrom += pxQueue->uxItemSize; /*lint !e9016 Pointer arithmetic on char types ok, especially in this use case where it is the clearest way of conveying intent. */ + 8009d06: 4414 add r4, r2 + if( pxQueue->u.xQueue.pcReadFrom >= pxQueue->u.xQueue.pcTail ) /*lint !e946 MISRA exception justified as use of the relational operator is the cleanest solutions. */ + 8009d08: 428c cmp r4, r1 + pxQueue->u.xQueue.pcReadFrom += pxQueue->uxItemSize; /*lint !e9016 Pointer arithmetic on char types ok, especially in this use case where it is the clearest way of conveying intent. */ + 8009d0a: 60dc str r4, [r3, #12] +} + 8009d0c: f85d 4b04 ldr.w r4, [sp], #4 + pxQueue->u.xQueue.pcReadFrom = pxQueue->pcHead; + 8009d10: bf24 itt cs + 8009d12: 6819 ldrcs r1, [r3, #0] + 8009d14: 60d9 strcs r1, [r3, #12] + ( void ) memcpy( ( void * ) pvBuffer, ( void * ) pxQueue->u.xQueue.pcReadFrom, ( size_t ) pxQueue->uxItemSize ); /*lint !e961 !e418 !e9087 MISRA exception as the casts are only redundant for some ports. Also previous logic ensures a null pointer can only be passed to memcpy() when the count is 0. Cast to void required by function signature and safe as no alignment requirement and copy length specified in bytes. */ + 8009d16: 68d9 ldr r1, [r3, #12] + 8009d18: f02a bf2b b.w 8034b72 +} + 8009d1c: f85d 4b04 ldr.w r4, [sp], #4 + 8009d20: 4770 bx lr + +08009d22 : +{ + 8009d22: b570 push {r4, r5, r6, lr} + 8009d24: 4604 mov r4, r0 + taskENTER_CRITICAL(); + 8009d26: f7ff fe75 bl 8009a14 + int8_t cTxLock = pxQueue->cTxLock; + 8009d2a: f894 5045 ldrb.w r5, [r4, #69] ; 0x45 + if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE ) + 8009d2e: f104 0624 add.w r6, r4, #36 ; 0x24 + int8_t cTxLock = pxQueue->cTxLock; + 8009d32: b26d sxtb r5, r5 + while( cTxLock > queueLOCKED_UNMODIFIED ) + 8009d34: 2d00 cmp r5, #0 + 8009d36: dc14 bgt.n 8009d62 + pxQueue->cTxLock = queueUNLOCKED; + 8009d38: 23ff movs r3, #255 ; 0xff + if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToSend ) ) != pdFALSE ) + 8009d3a: f104 0610 add.w r6, r4, #16 + pxQueue->cTxLock = queueUNLOCKED; + 8009d3e: f884 3045 strb.w r3, [r4, #69] ; 0x45 + taskEXIT_CRITICAL(); + 8009d42: f7ff fe8b bl 8009a5c + taskENTER_CRITICAL(); + 8009d46: f7ff fe65 bl 8009a14 + int8_t cRxLock = pxQueue->cRxLock; + 8009d4a: f894 5044 ldrb.w r5, [r4, #68] ; 0x44 + 8009d4e: b26d sxtb r5, r5 + while( cRxLock > queueLOCKED_UNMODIFIED ) + 8009d50: 2d00 cmp r5, #0 + 8009d52: dc12 bgt.n 8009d7a + pxQueue->cRxLock = queueUNLOCKED; + 8009d54: 23ff movs r3, #255 ; 0xff + 8009d56: f884 3044 strb.w r3, [r4, #68] ; 0x44 +} + 8009d5a: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} + taskEXIT_CRITICAL(); + 8009d5e: f7ff be7d b.w 8009a5c + if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE ) + 8009d62: 6a63 ldr r3, [r4, #36] ; 0x24 + 8009d64: 2b00 cmp r3, #0 + 8009d66: d0e7 beq.n 8009d38 + if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE ) + 8009d68: 4630 mov r0, r6 + 8009d6a: f001 f94d bl 800b008 + 8009d6e: b108 cbz r0, 8009d74 + vTaskMissedYield(); + 8009d70: f001 f9dc bl 800b12c + --cTxLock; + 8009d74: 3d01 subs r5, #1 + 8009d76: b26d sxtb r5, r5 + 8009d78: e7dc b.n 8009d34 + if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToSend ) ) == pdFALSE ) + 8009d7a: 6923 ldr r3, [r4, #16] + 8009d7c: 2b00 cmp r3, #0 + 8009d7e: d0e9 beq.n 8009d54 + if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToSend ) ) != pdFALSE ) + 8009d80: 4630 mov r0, r6 + 8009d82: f001 f941 bl 800b008 + 8009d86: b108 cbz r0, 8009d8c + vTaskMissedYield(); + 8009d88: f001 f9d0 bl 800b12c + --cRxLock; + 8009d8c: 3d01 subs r5, #1 + 8009d8e: b26d sxtb r5, r5 + 8009d90: e7de b.n 8009d50 + +08009d92 : +{ + 8009d92: b538 push {r3, r4, r5, lr} + 8009d94: 460d mov r5, r1 + configASSERT( pxQueue ); + 8009d96: 4604 mov r4, r0 + 8009d98: b950 cbnz r0, 8009db0 + 8009d9a: f04f 0350 mov.w r3, #80 ; 0x50 + 8009d9e: b672 cpsid i + 8009da0: f383 8811 msr BASEPRI, r3 + 8009da4: f3bf 8f6f isb sy + 8009da8: f3bf 8f4f dsb sy + 8009dac: b662 cpsie i + 8009dae: e7fe b.n 8009dae + taskENTER_CRITICAL(); + 8009db0: f7ff fe30 bl 8009a14 + pxQueue->u.xQueue.pcTail = pxQueue->pcHead + ( pxQueue->uxLength * pxQueue->uxItemSize ); /*lint !e9016 Pointer arithmetic allowed on char types, especially when it assists conveying intent. */ + 8009db4: 6822 ldr r2, [r4, #0] + 8009db6: e9d4 310f ldrd r3, r1, [r4, #60] ; 0x3c + pxQueue->pcWriteTo = pxQueue->pcHead; + 8009dba: 6062 str r2, [r4, #4] + pxQueue->u.xQueue.pcTail = pxQueue->pcHead + ( pxQueue->uxLength * pxQueue->uxItemSize ); /*lint !e9016 Pointer arithmetic allowed on char types, especially when it assists conveying intent. */ + 8009dbc: 434b muls r3, r1 + 8009dbe: 18d0 adds r0, r2, r3 + pxQueue->u.xQueue.pcReadFrom = pxQueue->pcHead + ( ( pxQueue->uxLength - 1U ) * pxQueue->uxItemSize ); /*lint !e9016 Pointer arithmetic allowed on char types, especially when it assists conveying intent. */ + 8009dc0: 1a5b subs r3, r3, r1 + pxQueue->u.xQueue.pcTail = pxQueue->pcHead + ( pxQueue->uxLength * pxQueue->uxItemSize ); /*lint !e9016 Pointer arithmetic allowed on char types, especially when it assists conveying intent. */ + 8009dc2: 60a0 str r0, [r4, #8] + pxQueue->u.xQueue.pcReadFrom = pxQueue->pcHead + ( ( pxQueue->uxLength - 1U ) * pxQueue->uxItemSize ); /*lint !e9016 Pointer arithmetic allowed on char types, especially when it assists conveying intent. */ + 8009dc4: 441a add r2, r3 + pxQueue->uxMessagesWaiting = ( UBaseType_t ) 0U; + 8009dc6: 2000 movs r0, #0 + pxQueue->cRxLock = queueUNLOCKED; + 8009dc8: 23ff movs r3, #255 ; 0xff + pxQueue->u.xQueue.pcReadFrom = pxQueue->pcHead + ( ( pxQueue->uxLength - 1U ) * pxQueue->uxItemSize ); /*lint !e9016 Pointer arithmetic allowed on char types, especially when it assists conveying intent. */ + 8009dca: 60e2 str r2, [r4, #12] + pxQueue->uxMessagesWaiting = ( UBaseType_t ) 0U; + 8009dcc: 63a0 str r0, [r4, #56] ; 0x38 + pxQueue->cRxLock = queueUNLOCKED; + 8009dce: f884 3044 strb.w r3, [r4, #68] ; 0x44 + pxQueue->cTxLock = queueUNLOCKED; + 8009dd2: f884 3045 strb.w r3, [r4, #69] ; 0x45 + if( xNewQueue == pdFALSE ) + 8009dd6: b9a5 cbnz r5, 8009e02 + if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToSend ) ) == pdFALSE ) + 8009dd8: 6923 ldr r3, [r4, #16] + 8009dda: b173 cbz r3, 8009dfa + if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToSend ) ) != pdFALSE ) + 8009ddc: f104 0010 add.w r0, r4, #16 + 8009de0: f001 f912 bl 800b008 + 8009de4: b148 cbz r0, 8009dfa + queueYIELD_IF_USING_PREEMPTION(); + 8009de6: f04f 23e0 mov.w r3, #3758153728 ; 0xe000e000 + 8009dea: f04f 5280 mov.w r2, #268435456 ; 0x10000000 + 8009dee: f8c3 2d04 str.w r2, [r3, #3332] ; 0xd04 + 8009df2: f3bf 8f4f dsb sy + 8009df6: f3bf 8f6f isb sy + taskEXIT_CRITICAL(); + 8009dfa: f7ff fe2f bl 8009a5c +} + 8009dfe: 2001 movs r0, #1 + 8009e00: bd38 pop {r3, r4, r5, pc} + vListInitialise( &( pxQueue->xTasksWaitingToSend ) ); + 8009e02: f104 0010 add.w r0, r4, #16 + 8009e06: f7ff fd5b bl 80098c0 + vListInitialise( &( pxQueue->xTasksWaitingToReceive ) ); + 8009e0a: f104 0024 add.w r0, r4, #36 ; 0x24 + 8009e0e: f7ff fd57 bl 80098c0 + 8009e12: e7f2 b.n 8009dfa + +08009e14 : + QueueHandle_t xQueueGenericCreateStatic( const UBaseType_t uxQueueLength, const UBaseType_t uxItemSize, uint8_t *pucQueueStorage, StaticQueue_t *pxStaticQueue, const uint8_t ucQueueType ) + 8009e14: b513 push {r0, r1, r4, lr} + configASSERT( pxStaticQueue != NULL ); + 8009e16: 461c mov r4, r3 + 8009e18: b953 cbnz r3, 8009e30 + 8009e1a: f04f 0350 mov.w r3, #80 ; 0x50 + 8009e1e: b672 cpsid i + 8009e20: f383 8811 msr BASEPRI, r3 + 8009e24: f3bf 8f6f isb sy + 8009e28: f3bf 8f4f dsb sy + 8009e2c: b662 cpsie i + 8009e2e: e7fe b.n 8009e2e + configASSERT( !( ( pucQueueStorage != NULL ) && ( uxItemSize == 0 ) ) ); + 8009e30: b15a cbz r2, 8009e4a + 8009e32: b9b1 cbnz r1, 8009e62 + 8009e34: f04f 0350 mov.w r3, #80 ; 0x50 + 8009e38: b672 cpsid i + 8009e3a: f383 8811 msr BASEPRI, r3 + 8009e3e: f3bf 8f6f isb sy + 8009e42: f3bf 8f4f dsb sy + 8009e46: b662 cpsie i + 8009e48: e7fe b.n 8009e48 + configASSERT( !( ( pucQueueStorage == NULL ) && ( uxItemSize != 0 ) ) ); + 8009e4a: b151 cbz r1, 8009e62 + 8009e4c: f04f 0350 mov.w r3, #80 ; 0x50 + 8009e50: b672 cpsid i + 8009e52: f383 8811 msr BASEPRI, r3 + 8009e56: f3bf 8f6f isb sy + 8009e5a: f3bf 8f4f dsb sy + 8009e5e: b662 cpsie i + 8009e60: e7fe b.n 8009e60 + volatile size_t xSize = sizeof( StaticQueue_t ); + 8009e62: 2350 movs r3, #80 ; 0x50 + 8009e64: 9301 str r3, [sp, #4] + configASSERT( xSize == sizeof( Queue_t ) ); + 8009e66: 9b01 ldr r3, [sp, #4] + 8009e68: 2b50 cmp r3, #80 ; 0x50 + 8009e6a: d00a beq.n 8009e82 + 8009e6c: f04f 0350 mov.w r3, #80 ; 0x50 + 8009e70: b672 cpsid i + 8009e72: f383 8811 msr BASEPRI, r3 + 8009e76: f3bf 8f6f isb sy + 8009e7a: f3bf 8f4f dsb sy + 8009e7e: b662 cpsie i + 8009e80: e7fe b.n 8009e80 + if( uxItemSize == ( UBaseType_t ) 0 ) + 8009e82: 2900 cmp r1, #0 + 8009e84: bf08 it eq + 8009e86: 4622 moveq r2, r4 + ( void ) xSize; /* Keeps lint quiet when configASSERT() is not defined. */ + 8009e88: 9b01 ldr r3, [sp, #4] + pxNewQueue->ucStaticallyAllocated = pdTRUE; + 8009e8a: 2301 movs r3, #1 + 8009e8c: 6022 str r2, [r4, #0] + 8009e8e: f884 3046 strb.w r3, [r4, #70] ; 0x46 + pxNewQueue->uxItemSize = uxItemSize; + 8009e92: e9c4 010f strd r0, r1, [r4, #60] ; 0x3c + ( void ) xQueueGenericReset( pxNewQueue, pdTRUE ); + 8009e96: 4619 mov r1, r3 + 8009e98: 4620 mov r0, r4 + 8009e9a: f7ff ff7a bl 8009d92 + pxNewQueue->ucQueueType = ucQueueType; + 8009e9e: f89d 3010 ldrb.w r3, [sp, #16] + } + 8009ea2: 4620 mov r0, r4 + pxNewQueue->ucQueueType = ucQueueType; + 8009ea4: f884 304c strb.w r3, [r4, #76] ; 0x4c + } + 8009ea8: b002 add sp, #8 + 8009eaa: bd10 pop {r4, pc} + +08009eac : + { + 8009eac: b410 push {r4} + 8009eae: f89d 4004 ldrb.w r4, [sp, #4] + configASSERT( uxQueueLength > ( UBaseType_t ) 0 ); + 8009eb2: b950 cbnz r0, 8009eca + 8009eb4: f04f 0350 mov.w r3, #80 ; 0x50 + 8009eb8: b672 cpsid i + 8009eba: f383 8811 msr BASEPRI, r3 + 8009ebe: f3bf 8f6f isb sy + 8009ec2: f3bf 8f4f dsb sy + 8009ec6: b662 cpsie i + 8009ec8: e7fe b.n 8009ec8 + 8009eca: 9401 str r4, [sp, #4] + } + 8009ecc: f85d 4b04 ldr.w r4, [sp], #4 + 8009ed0: f7ff bfa0 b.w 8009e14 + +08009ed4 : + { + 8009ed4: b5f8 push {r3, r4, r5, r6, r7, lr} + 8009ed6: 460d mov r5, r1 + 8009ed8: 4617 mov r7, r2 + configASSERT( uxQueueLength > ( UBaseType_t ) 0 ); + 8009eda: 4606 mov r6, r0 + 8009edc: b950 cbnz r0, 8009ef4 + 8009ede: f04f 0350 mov.w r3, #80 ; 0x50 + 8009ee2: b672 cpsid i + 8009ee4: f383 8811 msr BASEPRI, r3 + 8009ee8: f3bf 8f6f isb sy + 8009eec: f3bf 8f4f dsb sy + 8009ef0: b662 cpsie i + 8009ef2: e7fe b.n 8009ef2 + xQueueSizeInBytes = ( size_t ) ( uxQueueLength * uxItemSize ); /*lint !e961 MISRA exception as the casts are only redundant for some ports. */ + 8009ef4: 4348 muls r0, r1 + pxNewQueue = ( Queue_t * ) pvPortMalloc( sizeof( Queue_t ) + xQueueSizeInBytes ); /*lint !e9087 !e9079 see comment above. */ + 8009ef6: 3050 adds r0, #80 ; 0x50 + 8009ef8: f7ff fc10 bl 800971c + if( pxNewQueue != NULL ) + 8009efc: 4604 mov r4, r0 + 8009efe: b170 cbz r0, 8009f1e + pxNewQueue->ucStaticallyAllocated = pdFALSE; + 8009f00: 2300 movs r3, #0 + 8009f02: f880 3046 strb.w r3, [r0, #70] ; 0x46 + if( uxItemSize == ( UBaseType_t ) 0 ) + 8009f06: b165 cbz r5, 8009f22 + pucQueueStorage += sizeof( Queue_t ); /*lint !e9016 Pointer arithmetic allowed on char types, especially when it assists conveying intent. */ + 8009f08: f100 0350 add.w r3, r0, #80 ; 0x50 + ( void ) xQueueGenericReset( pxNewQueue, pdTRUE ); + 8009f0c: 2101 movs r1, #1 + 8009f0e: 4620 mov r0, r4 + 8009f10: 6023 str r3, [r4, #0] + pxNewQueue->uxItemSize = uxItemSize; + 8009f12: e9c4 650f strd r6, r5, [r4, #60] ; 0x3c + ( void ) xQueueGenericReset( pxNewQueue, pdTRUE ); + 8009f16: f7ff ff3c bl 8009d92 + pxNewQueue->ucQueueType = ucQueueType; + 8009f1a: f884 704c strb.w r7, [r4, #76] ; 0x4c + } + 8009f1e: 4620 mov r0, r4 + 8009f20: bdf8 pop {r3, r4, r5, r6, r7, pc} + 8009f22: 4603 mov r3, r0 + 8009f24: e7f2 b.n 8009f0c + +08009f26 : + { + 8009f26: b513 push {r0, r1, r4, lr} + 8009f28: 4613 mov r3, r2 + 8009f2a: 460c mov r4, r1 + configASSERT( uxMaxCount != 0 ); + 8009f2c: b950 cbnz r0, 8009f44 + 8009f2e: f04f 0350 mov.w r3, #80 ; 0x50 + 8009f32: b672 cpsid i + 8009f34: f383 8811 msr BASEPRI, r3 + 8009f38: f3bf 8f6f isb sy + 8009f3c: f3bf 8f4f dsb sy + 8009f40: b662 cpsie i + 8009f42: e7fe b.n 8009f42 + configASSERT( uxInitialCount <= uxMaxCount ); + 8009f44: 4288 cmp r0, r1 + 8009f46: d20a bcs.n 8009f5e + 8009f48: f04f 0350 mov.w r3, #80 ; 0x50 + 8009f4c: b672 cpsid i + 8009f4e: f383 8811 msr BASEPRI, r3 + 8009f52: f3bf 8f6f isb sy + 8009f56: f3bf 8f4f dsb sy + 8009f5a: b662 cpsie i + 8009f5c: e7fe b.n 8009f5c + xHandle = xQueueGenericCreateStatic( uxMaxCount, queueSEMAPHORE_QUEUE_ITEM_LENGTH, NULL, pxStaticQueue, queueQUEUE_TYPE_COUNTING_SEMAPHORE ); + 8009f5e: 2202 movs r2, #2 + 8009f60: 9200 str r2, [sp, #0] + 8009f62: 2200 movs r2, #0 + 8009f64: 4611 mov r1, r2 + 8009f66: f7ff ffa1 bl 8009eac + if( xHandle != NULL ) + 8009f6a: b100 cbz r0, 8009f6e + ( ( Queue_t * ) xHandle )->uxMessagesWaiting = uxInitialCount; + 8009f6c: 6384 str r4, [r0, #56] ; 0x38 + } + 8009f6e: b002 add sp, #8 + 8009f70: bd10 pop {r4, pc} + +08009f72 : + { + 8009f72: b510 push {r4, lr} + 8009f74: 460c mov r4, r1 + configASSERT( uxMaxCount != 0 ); + 8009f76: b950 cbnz r0, 8009f8e + 8009f78: f04f 0350 mov.w r3, #80 ; 0x50 + 8009f7c: b672 cpsid i + 8009f7e: f383 8811 msr BASEPRI, r3 + 8009f82: f3bf 8f6f isb sy + 8009f86: f3bf 8f4f dsb sy + 8009f8a: b662 cpsie i + 8009f8c: e7fe b.n 8009f8c + configASSERT( uxInitialCount <= uxMaxCount ); + 8009f8e: 4288 cmp r0, r1 + 8009f90: d20a bcs.n 8009fa8 + 8009f92: f04f 0350 mov.w r3, #80 ; 0x50 + 8009f96: b672 cpsid i + 8009f98: f383 8811 msr BASEPRI, r3 + 8009f9c: f3bf 8f6f isb sy + 8009fa0: f3bf 8f4f dsb sy + 8009fa4: b662 cpsie i + 8009fa6: e7fe b.n 8009fa6 + xHandle = xQueueGenericCreate( uxMaxCount, queueSEMAPHORE_QUEUE_ITEM_LENGTH, queueQUEUE_TYPE_COUNTING_SEMAPHORE ); + 8009fa8: 2202 movs r2, #2 + 8009faa: 2100 movs r1, #0 + 8009fac: f7ff ff92 bl 8009ed4 + if( xHandle != NULL ) + 8009fb0: b100 cbz r0, 8009fb4 + ( ( Queue_t * ) xHandle )->uxMessagesWaiting = uxInitialCount; + 8009fb2: 6384 str r4, [r0, #56] ; 0x38 + } + 8009fb4: bd10 pop {r4, pc} + +08009fb6 : +{ + 8009fb6: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} + 8009fba: b085 sub sp, #20 + 8009fbc: 4688 mov r8, r1 + 8009fbe: 461f mov r7, r3 + configASSERT( pxQueue ); + 8009fc0: 4604 mov r4, r0 +{ + 8009fc2: 9201 str r2, [sp, #4] + configASSERT( pxQueue ); + 8009fc4: b950 cbnz r0, 8009fdc + 8009fc6: f04f 0350 mov.w r3, #80 ; 0x50 + 8009fca: b672 cpsid i + 8009fcc: f383 8811 msr BASEPRI, r3 + 8009fd0: f3bf 8f6f isb sy + 8009fd4: f3bf 8f4f dsb sy + 8009fd8: b662 cpsie i + 8009fda: e7fe b.n 8009fda + configASSERT( !( ( pvItemToQueue == NULL ) && ( pxQueue->uxItemSize != ( UBaseType_t ) 0U ) ) ); + 8009fdc: b961 cbnz r1, 8009ff8 + 8009fde: 6c03 ldr r3, [r0, #64] ; 0x40 + 8009fe0: b153 cbz r3, 8009ff8 + 8009fe2: f04f 0350 mov.w r3, #80 ; 0x50 + 8009fe6: b672 cpsid i + 8009fe8: f383 8811 msr BASEPRI, r3 + 8009fec: f3bf 8f6f isb sy + 8009ff0: f3bf 8f4f dsb sy + 8009ff4: b662 cpsie i + 8009ff6: e7fe b.n 8009ff6 + configASSERT( !( ( xCopyPosition == queueOVERWRITE ) && ( pxQueue->uxLength != 1 ) ) ); + 8009ff8: 2f02 cmp r7, #2 + 8009ffa: d10d bne.n 800a018 + 8009ffc: 6be3 ldr r3, [r4, #60] ; 0x3c + 8009ffe: 2b01 cmp r3, #1 + 800a000: d00a beq.n 800a018 + 800a002: f04f 0350 mov.w r3, #80 ; 0x50 + 800a006: b672 cpsid i + 800a008: f383 8811 msr BASEPRI, r3 + 800a00c: f3bf 8f6f isb sy + 800a010: f3bf 8f4f dsb sy + 800a014: b662 cpsie i + 800a016: e7fe b.n 800a016 + configASSERT( !( ( xTaskGetSchedulerState() == taskSCHEDULER_SUSPENDED ) && ( xTicksToWait != 0 ) ) ); + 800a018: f001 f894 bl 800b144 + 800a01c: 4606 mov r6, r0 + 800a01e: b960 cbnz r0, 800a03a + 800a020: 9b01 ldr r3, [sp, #4] + 800a022: b15b cbz r3, 800a03c + 800a024: f04f 0350 mov.w r3, #80 ; 0x50 + 800a028: b672 cpsid i + 800a02a: f383 8811 msr BASEPRI, r3 + 800a02e: f3bf 8f6f isb sy + 800a032: f3bf 8f4f dsb sy + 800a036: b662 cpsie i + 800a038: e7fe b.n 800a038 + 800a03a: 2600 movs r6, #0 + prvLockQueue( pxQueue ); + 800a03c: f04f 0900 mov.w r9, #0 + 800a040: e037 b.n 800a0b2 + if( xTicksToWait == ( TickType_t ) 0 ) + 800a042: 9d01 ldr r5, [sp, #4] + 800a044: b91d cbnz r5, 800a04e + taskEXIT_CRITICAL(); + 800a046: f7ff fd09 bl 8009a5c + return errQUEUE_FULL; + 800a04a: 2000 movs r0, #0 + 800a04c: e052 b.n 800a0f4 + else if( xEntryTimeSet == pdFALSE ) + 800a04e: b916 cbnz r6, 800a056 + vTaskInternalSetTimeOutState( &xTimeOut ); + 800a050: a802 add r0, sp, #8 + 800a052: f001 f81f bl 800b094 + taskEXIT_CRITICAL(); + 800a056: f7ff fd01 bl 8009a5c + vTaskSuspendAll(); + 800a05a: f000 fd9b bl 800ab94 + prvLockQueue( pxQueue ); + 800a05e: f7ff fcd9 bl 8009a14 + 800a062: f894 3044 ldrb.w r3, [r4, #68] ; 0x44 + 800a066: 2bff cmp r3, #255 ; 0xff + 800a068: d101 bne.n 800a06e + 800a06a: f884 9044 strb.w r9, [r4, #68] ; 0x44 + 800a06e: f894 3045 ldrb.w r3, [r4, #69] ; 0x45 + 800a072: 2bff cmp r3, #255 ; 0xff + 800a074: d101 bne.n 800a07a + 800a076: f884 9045 strb.w r9, [r4, #69] ; 0x45 + 800a07a: f7ff fcef bl 8009a5c + if( xTaskCheckForTimeOut( &xTimeOut, &xTicksToWait ) == pdFALSE ) + 800a07e: a901 add r1, sp, #4 + 800a080: a802 add r0, sp, #8 + 800a082: f001 f813 bl 800b0ac + 800a086: 2800 cmp r0, #0 + 800a088: d14a bne.n 800a120 + +static BaseType_t prvIsQueueFull( const Queue_t *pxQueue ) +{ +BaseType_t xReturn; + + taskENTER_CRITICAL(); + 800a08a: f7ff fcc3 bl 8009a14 + { + if( pxQueue->uxMessagesWaiting == pxQueue->uxLength ) + 800a08e: 6ba2 ldr r2, [r4, #56] ; 0x38 + 800a090: 6be3 ldr r3, [r4, #60] ; 0x3c + 800a092: 429a cmp r2, r3 + 800a094: d131 bne.n 800a0fa + else + { + xReturn = pdFALSE; + } + } + taskEXIT_CRITICAL(); + 800a096: f7ff fce1 bl 8009a5c + vTaskPlaceOnEventList( &( pxQueue->xTasksWaitingToSend ), xTicksToWait ); + 800a09a: 9901 ldr r1, [sp, #4] + 800a09c: f104 0010 add.w r0, r4, #16 + 800a0a0: f000 ff76 bl 800af90 + prvUnlockQueue( pxQueue ); + 800a0a4: 4620 mov r0, r4 + 800a0a6: f7ff fe3c bl 8009d22 + if( xTaskResumeAll() == pdFALSE ) + 800a0aa: f000 fe21 bl 800acf0 + 800a0ae: b360 cbz r0, 800a10a + 800a0b0: 2601 movs r6, #1 + taskENTER_CRITICAL(); + 800a0b2: f7ff fcaf bl 8009a14 + if( ( pxQueue->uxMessagesWaiting < pxQueue->uxLength ) || ( xCopyPosition == queueOVERWRITE ) ) + 800a0b6: 6ba2 ldr r2, [r4, #56] ; 0x38 + 800a0b8: 6be3 ldr r3, [r4, #60] ; 0x3c + 800a0ba: 429a cmp r2, r3 + 800a0bc: d301 bcc.n 800a0c2 + 800a0be: 2f02 cmp r7, #2 + 800a0c0: d1bf bne.n 800a042 + xYieldRequired = prvCopyDataToQueue( pxQueue, pvItemToQueue, xCopyPosition ); + 800a0c2: 463a mov r2, r7 + 800a0c4: 4641 mov r1, r8 + 800a0c6: 4620 mov r0, r4 + 800a0c8: f7ff fde1 bl 8009c8e + if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE ) + 800a0cc: 6a63 ldr r3, [r4, #36] ; 0x24 + 800a0ce: b11b cbz r3, 800a0d8 + if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE ) + 800a0d0: f104 0024 add.w r0, r4, #36 ; 0x24 + 800a0d4: f000 ff98 bl 800b008 + else if( xYieldRequired != pdFALSE ) + 800a0d8: b148 cbz r0, 800a0ee + queueYIELD_IF_USING_PREEMPTION(); + 800a0da: f04f 23e0 mov.w r3, #3758153728 ; 0xe000e000 + 800a0de: f04f 5280 mov.w r2, #268435456 ; 0x10000000 + 800a0e2: f8c3 2d04 str.w r2, [r3, #3332] ; 0xd04 + 800a0e6: f3bf 8f4f dsb sy + 800a0ea: f3bf 8f6f isb sy + taskEXIT_CRITICAL(); + 800a0ee: f7ff fcb5 bl 8009a5c + return pdPASS; + 800a0f2: 2001 movs r0, #1 +} + 800a0f4: b005 add sp, #20 + 800a0f6: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} + taskEXIT_CRITICAL(); + 800a0fa: f7ff fcaf bl 8009a5c + prvUnlockQueue( pxQueue ); + 800a0fe: 4620 mov r0, r4 + 800a100: f7ff fe0f bl 8009d22 + ( void ) xTaskResumeAll(); + 800a104: f000 fdf4 bl 800acf0 + 800a108: e7d2 b.n 800a0b0 + portYIELD_WITHIN_API(); + 800a10a: f04f 23e0 mov.w r3, #3758153728 ; 0xe000e000 + 800a10e: f04f 5280 mov.w r2, #268435456 ; 0x10000000 + 800a112: f8c3 2d04 str.w r2, [r3, #3332] ; 0xd04 + 800a116: f3bf 8f4f dsb sy + 800a11a: f3bf 8f6f isb sy + 800a11e: e7c7 b.n 800a0b0 + prvUnlockQueue( pxQueue ); + 800a120: 4620 mov r0, r4 + 800a122: f7ff fdfe bl 8009d22 + ( void ) xTaskResumeAll(); + 800a126: f000 fde3 bl 800acf0 + 800a12a: e78e b.n 800a04a + +0800a12c : + xNewQueue = xQueueGenericCreateStatic( uxMutexLength, uxMutexSize, NULL, pxStaticQueue, ucQueueType ); + 800a12c: 2200 movs r2, #0 + { + 800a12e: 460b mov r3, r1 + 800a130: b513 push {r0, r1, r4, lr} + 800a132: 4611 mov r1, r2 + 800a134: 9000 str r0, [sp, #0] + 800a136: 2001 movs r0, #1 + 800a138: f7ff fe6c bl 8009e14 + if( pxNewQueue != NULL ) + 800a13c: 4604 mov r4, r0 + 800a13e: b138 cbz r0, 800a150 + pxNewQueue->u.xSemaphore.xMutexHolder = NULL; + 800a140: 2300 movs r3, #0 + ( void ) xQueueGenericSend( pxNewQueue, NULL, ( TickType_t ) 0U, queueSEND_TO_BACK ); + 800a142: 461a mov r2, r3 + 800a144: 4619 mov r1, r3 + pxNewQueue->u.xSemaphore.xMutexHolder = NULL; + 800a146: 6083 str r3, [r0, #8] + pxNewQueue->uxQueueType = queueQUEUE_IS_MUTEX; + 800a148: 6003 str r3, [r0, #0] + pxNewQueue->u.xSemaphore.uxRecursiveCallCount = 0; + 800a14a: 60c3 str r3, [r0, #12] + ( void ) xQueueGenericSend( pxNewQueue, NULL, ( TickType_t ) 0U, queueSEND_TO_BACK ); + 800a14c: f7ff ff33 bl 8009fb6 + } + 800a150: 4620 mov r0, r4 + 800a152: b002 add sp, #8 + 800a154: bd10 pop {r4, pc} + +0800a156 : + { + 800a156: b538 push {r3, r4, r5, lr} + configASSERT( pxMutex ); + 800a158: 4604 mov r4, r0 + 800a15a: b950 cbnz r0, 800a172 + 800a15c: f04f 0350 mov.w r3, #80 ; 0x50 + 800a160: b672 cpsid i + 800a162: f383 8811 msr BASEPRI, r3 + 800a166: f3bf 8f6f isb sy + 800a16a: f3bf 8f4f dsb sy + 800a16e: b662 cpsie i + 800a170: e7fe b.n 800a170 + if( pxMutex->u.xSemaphore.xMutexHolder == xTaskGetCurrentTaskHandle() ) + 800a172: 6885 ldr r5, [r0, #8] + 800a174: f000 ffe0 bl 800b138 + 800a178: 4285 cmp r5, r0 + 800a17a: d10a bne.n 800a192 + ( pxMutex->u.xSemaphore.uxRecursiveCallCount )--; + 800a17c: 68e3 ldr r3, [r4, #12] + 800a17e: 3b01 subs r3, #1 + 800a180: 60e3 str r3, [r4, #12] + if( pxMutex->u.xSemaphore.uxRecursiveCallCount == ( UBaseType_t ) 0 ) + 800a182: b923 cbnz r3, 800a18e + ( void ) xQueueGenericSend( pxMutex, NULL, queueMUTEX_GIVE_BLOCK_TIME, queueSEND_TO_BACK ); + 800a184: 461a mov r2, r3 + 800a186: 4619 mov r1, r3 + 800a188: 4620 mov r0, r4 + 800a18a: f7ff ff14 bl 8009fb6 + xReturn = pdPASS; + 800a18e: 2001 movs r0, #1 + return xReturn; + 800a190: e000 b.n 800a194 + xReturn = pdFAIL; + 800a192: 2000 movs r0, #0 + } + 800a194: bd38 pop {r3, r4, r5, pc} + +0800a196 : + { + 800a196: b570 push {r4, r5, r6, lr} + 800a198: 4606 mov r6, r0 + pxNewQueue = ( Queue_t * ) pvPortMalloc( sizeof( Queue_t ) + xQueueSizeInBytes ); /*lint !e9087 !e9079 see comment above. */ + 800a19a: 2050 movs r0, #80 ; 0x50 + 800a19c: f7ff fabe bl 800971c + if( pxNewQueue != NULL ) + 800a1a0: 4604 mov r4, r0 + 800a1a2: b198 cbz r0, 800a1cc + pxNewQueue->ucStaticallyAllocated = pdFALSE; + 800a1a4: 2500 movs r5, #0 + pxNewQueue->uxLength = uxQueueLength; + 800a1a6: 2101 movs r1, #1 + pxNewQueue->pcHead = ( int8_t * ) pxNewQueue; + 800a1a8: 6000 str r0, [r0, #0] + pxNewQueue->ucStaticallyAllocated = pdFALSE; + 800a1aa: f880 5046 strb.w r5, [r0, #70] ; 0x46 + pxNewQueue->uxItemSize = uxItemSize; + 800a1ae: e9c0 150f strd r1, r5, [r0, #60] ; 0x3c + ( void ) xQueueGenericReset( pxNewQueue, pdTRUE ); + 800a1b2: f7ff fdee bl 8009d92 + ( void ) xQueueGenericSend( pxNewQueue, NULL, ( TickType_t ) 0U, queueSEND_TO_BACK ); + 800a1b6: 462b mov r3, r5 + 800a1b8: 462a mov r2, r5 + 800a1ba: 4629 mov r1, r5 + 800a1bc: 4620 mov r0, r4 + pxNewQueue->ucQueueType = ucQueueType; + 800a1be: f884 604c strb.w r6, [r4, #76] ; 0x4c + pxNewQueue->u.xSemaphore.xMutexHolder = NULL; + 800a1c2: 60a5 str r5, [r4, #8] + pxNewQueue->uxQueueType = queueQUEUE_IS_MUTEX; + 800a1c4: 6025 str r5, [r4, #0] + pxNewQueue->u.xSemaphore.uxRecursiveCallCount = 0; + 800a1c6: 60e5 str r5, [r4, #12] + ( void ) xQueueGenericSend( pxNewQueue, NULL, ( TickType_t ) 0U, queueSEND_TO_BACK ); + 800a1c8: f7ff fef5 bl 8009fb6 + } + 800a1cc: 4620 mov r0, r4 + 800a1ce: bd70 pop {r4, r5, r6, pc} + +0800a1d0 : +{ + 800a1d0: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} + 800a1d4: 4689 mov r9, r1 + 800a1d6: 4690 mov r8, r2 + 800a1d8: 461f mov r7, r3 + configASSERT( pxQueue ); + 800a1da: 4604 mov r4, r0 + 800a1dc: b950 cbnz r0, 800a1f4 + 800a1de: f04f 0350 mov.w r3, #80 ; 0x50 + 800a1e2: b672 cpsid i + 800a1e4: f383 8811 msr BASEPRI, r3 + 800a1e8: f3bf 8f6f isb sy + 800a1ec: f3bf 8f4f dsb sy + 800a1f0: b662 cpsie i + 800a1f2: e7fe b.n 800a1f2 + configASSERT( !( ( pvItemToQueue == NULL ) && ( pxQueue->uxItemSize != ( UBaseType_t ) 0U ) ) ); + 800a1f4: b961 cbnz r1, 800a210 + 800a1f6: 6c03 ldr r3, [r0, #64] ; 0x40 + 800a1f8: b153 cbz r3, 800a210 + 800a1fa: f04f 0350 mov.w r3, #80 ; 0x50 + 800a1fe: b672 cpsid i + 800a200: f383 8811 msr BASEPRI, r3 + 800a204: f3bf 8f6f isb sy + 800a208: f3bf 8f4f dsb sy + 800a20c: b662 cpsie i + 800a20e: e7fe b.n 800a20e + configASSERT( !( ( xCopyPosition == queueOVERWRITE ) && ( pxQueue->uxLength != 1 ) ) ); + 800a210: 2f02 cmp r7, #2 + 800a212: d10d bne.n 800a230 + 800a214: 6be3 ldr r3, [r4, #60] ; 0x3c + 800a216: 2b01 cmp r3, #1 + 800a218: d00a beq.n 800a230 + 800a21a: f04f 0350 mov.w r3, #80 ; 0x50 + 800a21e: b672 cpsid i + 800a220: f383 8811 msr BASEPRI, r3 + 800a224: f3bf 8f6f isb sy + 800a228: f3bf 8f4f dsb sy + 800a22c: b662 cpsie i + 800a22e: e7fe b.n 800a22e + portASSERT_IF_INTERRUPT_PRIORITY_INVALID(); + 800a230: f7ff fcf0 bl 8009c14 + __asm volatile + 800a234: f3ef 8611 mrs r6, BASEPRI + 800a238: f04f 0350 mov.w r3, #80 ; 0x50 + 800a23c: b672 cpsid i + 800a23e: f383 8811 msr BASEPRI, r3 + 800a242: f3bf 8f6f isb sy + 800a246: f3bf 8f4f dsb sy + 800a24a: b662 cpsie i + if( ( pxQueue->uxMessagesWaiting < pxQueue->uxLength ) || ( xCopyPosition == queueOVERWRITE ) ) + 800a24c: 6ba2 ldr r2, [r4, #56] ; 0x38 + 800a24e: 6be3 ldr r3, [r4, #60] ; 0x3c + 800a250: 429a cmp r2, r3 + 800a252: d301 bcc.n 800a258 + 800a254: 2f02 cmp r7, #2 + 800a256: d122 bne.n 800a29e + const int8_t cTxLock = pxQueue->cTxLock; + 800a258: f894 5045 ldrb.w r5, [r4, #69] ; 0x45 + ( void ) prvCopyDataToQueue( pxQueue, pvItemToQueue, xCopyPosition ); + 800a25c: 463a mov r2, r7 + 800a25e: 4649 mov r1, r9 + 800a260: 4620 mov r0, r4 + const int8_t cTxLock = pxQueue->cTxLock; + 800a262: b26d sxtb r5, r5 + ( void ) prvCopyDataToQueue( pxQueue, pvItemToQueue, xCopyPosition ); + 800a264: f7ff fd13 bl 8009c8e + if( cTxLock == queueUNLOCKED ) + 800a268: 1c6b adds r3, r5, #1 + 800a26a: d113 bne.n 800a294 + if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE ) + 800a26c: 6a63 ldr r3, [r4, #36] ; 0x24 + 800a26e: b90b cbnz r3, 800a274 + xReturn = pdPASS; + 800a270: 2001 movs r0, #1 + 800a272: e00b b.n 800a28c + if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE ) + 800a274: f104 0024 add.w r0, r4, #36 ; 0x24 + 800a278: f000 fec6 bl 800b008 + 800a27c: 2800 cmp r0, #0 + 800a27e: d0f7 beq.n 800a270 + if( pxHigherPriorityTaskWoken != NULL ) + 800a280: f1b8 0f00 cmp.w r8, #0 + 800a284: d0f4 beq.n 800a270 + *pxHigherPriorityTaskWoken = pdTRUE; + 800a286: 2001 movs r0, #1 + 800a288: f8c8 0000 str.w r0, [r8] + __asm volatile + 800a28c: f386 8811 msr BASEPRI, r6 +} + 800a290: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} + pxQueue->cTxLock = ( int8_t ) ( cTxLock + 1 ); + 800a294: 3501 adds r5, #1 + 800a296: b26d sxtb r5, r5 + 800a298: f884 5045 strb.w r5, [r4, #69] ; 0x45 + 800a29c: e7e8 b.n 800a270 + xReturn = errQUEUE_FULL; + 800a29e: 2000 movs r0, #0 + 800a2a0: e7f4 b.n 800a28c + +0800a2a2 : +{ + 800a2a2: b570 push {r4, r5, r6, lr} + 800a2a4: 460d mov r5, r1 + configASSERT( pxQueue ); + 800a2a6: 4604 mov r4, r0 + 800a2a8: b950 cbnz r0, 800a2c0 + __asm volatile + 800a2aa: f04f 0350 mov.w r3, #80 ; 0x50 + 800a2ae: b672 cpsid i + 800a2b0: f383 8811 msr BASEPRI, r3 + 800a2b4: f3bf 8f6f isb sy + 800a2b8: f3bf 8f4f dsb sy + 800a2bc: b662 cpsie i + 800a2be: e7fe b.n 800a2be + configASSERT( pxQueue->uxItemSize == 0 ); + 800a2c0: 6c03 ldr r3, [r0, #64] ; 0x40 + 800a2c2: b153 cbz r3, 800a2da + 800a2c4: f04f 0350 mov.w r3, #80 ; 0x50 + 800a2c8: b672 cpsid i + 800a2ca: f383 8811 msr BASEPRI, r3 + 800a2ce: f3bf 8f6f isb sy + 800a2d2: f3bf 8f4f dsb sy + 800a2d6: b662 cpsie i + 800a2d8: e7fe b.n 800a2d8 + configASSERT( !( ( pxQueue->uxQueueType == queueQUEUE_IS_MUTEX ) && ( pxQueue->u.xSemaphore.xMutexHolder != NULL ) ) ); + 800a2da: 6803 ldr r3, [r0, #0] + 800a2dc: b963 cbnz r3, 800a2f8 + 800a2de: 6883 ldr r3, [r0, #8] + 800a2e0: b153 cbz r3, 800a2f8 + 800a2e2: f04f 0350 mov.w r3, #80 ; 0x50 + 800a2e6: b672 cpsid i + 800a2e8: f383 8811 msr BASEPRI, r3 + 800a2ec: f3bf 8f6f isb sy + 800a2f0: f3bf 8f4f dsb sy + 800a2f4: b662 cpsie i + 800a2f6: e7fe b.n 800a2f6 + portASSERT_IF_INTERRUPT_PRIORITY_INVALID(); + 800a2f8: f7ff fc8c bl 8009c14 + __asm volatile + 800a2fc: f3ef 8611 mrs r6, BASEPRI + 800a300: f04f 0350 mov.w r3, #80 ; 0x50 + 800a304: b672 cpsid i + 800a306: f383 8811 msr BASEPRI, r3 + 800a30a: f3bf 8f6f isb sy + 800a30e: f3bf 8f4f dsb sy + 800a312: b662 cpsie i + const UBaseType_t uxMessagesWaiting = pxQueue->uxMessagesWaiting; + 800a314: 6ba2 ldr r2, [r4, #56] ; 0x38 + if( uxMessagesWaiting < pxQueue->uxLength ) + 800a316: 6be3 ldr r3, [r4, #60] ; 0x3c + 800a318: 4293 cmp r3, r2 + 800a31a: d91c bls.n 800a356 + const int8_t cTxLock = pxQueue->cTxLock; + 800a31c: f894 1045 ldrb.w r1, [r4, #69] ; 0x45 + pxQueue->uxMessagesWaiting = uxMessagesWaiting + ( UBaseType_t ) 1; + 800a320: 3201 adds r2, #1 + if( cTxLock == queueUNLOCKED ) + 800a322: 29ff cmp r1, #255 ; 0xff + const int8_t cTxLock = pxQueue->cTxLock; + 800a324: b24b sxtb r3, r1 + pxQueue->uxMessagesWaiting = uxMessagesWaiting + ( UBaseType_t ) 1; + 800a326: 63a2 str r2, [r4, #56] ; 0x38 + if( cTxLock == queueUNLOCKED ) + 800a328: d110 bne.n 800a34c + if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE ) + 800a32a: 6a63 ldr r3, [r4, #36] ; 0x24 + 800a32c: b90b cbnz r3, 800a332 + xReturn = pdPASS; + 800a32e: 2001 movs r0, #1 + 800a330: e009 b.n 800a346 + if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE ) + 800a332: f104 0024 add.w r0, r4, #36 ; 0x24 + 800a336: f000 fe67 bl 800b008 + 800a33a: 2800 cmp r0, #0 + 800a33c: d0f7 beq.n 800a32e + if( pxHigherPriorityTaskWoken != NULL ) + 800a33e: 2d00 cmp r5, #0 + 800a340: d0f5 beq.n 800a32e + *pxHigherPriorityTaskWoken = pdTRUE; + 800a342: 2001 movs r0, #1 + 800a344: 6028 str r0, [r5, #0] + __asm volatile + 800a346: f386 8811 msr BASEPRI, r6 +} + 800a34a: bd70 pop {r4, r5, r6, pc} + pxQueue->cTxLock = ( int8_t ) ( cTxLock + 1 ); + 800a34c: 3301 adds r3, #1 + 800a34e: b25b sxtb r3, r3 + 800a350: f884 3045 strb.w r3, [r4, #69] ; 0x45 + 800a354: e7eb b.n 800a32e + xReturn = errQUEUE_FULL; + 800a356: 2000 movs r0, #0 + 800a358: e7f5 b.n 800a346 + +0800a35a : +{ + 800a35a: e92d 41ff stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, lr} + 800a35e: 460f mov r7, r1 + configASSERT( ( pxQueue ) ); + 800a360: 4604 mov r4, r0 +{ + 800a362: 9201 str r2, [sp, #4] + configASSERT( ( pxQueue ) ); + 800a364: b950 cbnz r0, 800a37c + __asm volatile + 800a366: f04f 0350 mov.w r3, #80 ; 0x50 + 800a36a: b672 cpsid i + 800a36c: f383 8811 msr BASEPRI, r3 + 800a370: f3bf 8f6f isb sy + 800a374: f3bf 8f4f dsb sy + 800a378: b662 cpsie i + 800a37a: e7fe b.n 800a37a + configASSERT( !( ( ( pvBuffer ) == NULL ) && ( ( pxQueue )->uxItemSize != ( UBaseType_t ) 0U ) ) ); + 800a37c: b961 cbnz r1, 800a398 + 800a37e: 6c03 ldr r3, [r0, #64] ; 0x40 + 800a380: b153 cbz r3, 800a398 + 800a382: f04f 0350 mov.w r3, #80 ; 0x50 + 800a386: b672 cpsid i + 800a388: f383 8811 msr BASEPRI, r3 + 800a38c: f3bf 8f6f isb sy + 800a390: f3bf 8f4f dsb sy + 800a394: b662 cpsie i + 800a396: e7fe b.n 800a396 + configASSERT( !( ( xTaskGetSchedulerState() == taskSCHEDULER_SUSPENDED ) && ( xTicksToWait != 0 ) ) ); + 800a398: f000 fed4 bl 800b144 + 800a39c: 4606 mov r6, r0 + 800a39e: b960 cbnz r0, 800a3ba + 800a3a0: 9b01 ldr r3, [sp, #4] + 800a3a2: b15b cbz r3, 800a3bc + 800a3a4: f04f 0350 mov.w r3, #80 ; 0x50 + 800a3a8: b672 cpsid i + 800a3aa: f383 8811 msr BASEPRI, r3 + 800a3ae: f3bf 8f6f isb sy + 800a3b2: f3bf 8f4f dsb sy + 800a3b6: b662 cpsie i + 800a3b8: e7fe b.n 800a3b8 + 800a3ba: 2600 movs r6, #0 + prvLockQueue( pxQueue ); + 800a3bc: f04f 0800 mov.w r8, #0 + 800a3c0: e03d b.n 800a43e + if( xTicksToWait == ( TickType_t ) 0 ) + 800a3c2: 9d01 ldr r5, [sp, #4] + 800a3c4: b91d cbnz r5, 800a3ce + taskEXIT_CRITICAL(); + 800a3c6: f7ff fb49 bl 8009a5c + return errQUEUE_EMPTY; + 800a3ca: 2000 movs r0, #0 + 800a3cc: e056 b.n 800a47c + else if( xEntryTimeSet == pdFALSE ) + 800a3ce: b916 cbnz r6, 800a3d6 + vTaskInternalSetTimeOutState( &xTimeOut ); + 800a3d0: a802 add r0, sp, #8 + 800a3d2: f000 fe5f bl 800b094 + taskEXIT_CRITICAL(); + 800a3d6: f7ff fb41 bl 8009a5c + vTaskSuspendAll(); + 800a3da: f000 fbdb bl 800ab94 + prvLockQueue( pxQueue ); + 800a3de: f7ff fb19 bl 8009a14 + 800a3e2: f894 3044 ldrb.w r3, [r4, #68] ; 0x44 + 800a3e6: 2bff cmp r3, #255 ; 0xff + 800a3e8: d101 bne.n 800a3ee + 800a3ea: f884 8044 strb.w r8, [r4, #68] ; 0x44 + 800a3ee: f894 3045 ldrb.w r3, [r4, #69] ; 0x45 + 800a3f2: 2bff cmp r3, #255 ; 0xff + 800a3f4: d101 bne.n 800a3fa + 800a3f6: f884 8045 strb.w r8, [r4, #69] ; 0x45 + 800a3fa: f7ff fb2f bl 8009a5c + if( xTaskCheckForTimeOut( &xTimeOut, &xTicksToWait ) == pdFALSE ) + 800a3fe: a901 add r1, sp, #4 + 800a400: a802 add r0, sp, #8 + 800a402: f000 fe53 bl 800b0ac + 800a406: 2800 cmp r0, #0 + 800a408: d141 bne.n 800a48e + if( prvIsQueueEmpty( pxQueue ) != pdFALSE ) + 800a40a: 4620 mov r0, r4 + 800a40c: f7ff fc34 bl 8009c78 + 800a410: b3b8 cbz r0, 800a482 + vTaskPlaceOnEventList( &( pxQueue->xTasksWaitingToReceive ), xTicksToWait ); + 800a412: 9901 ldr r1, [sp, #4] + 800a414: f104 0024 add.w r0, r4, #36 ; 0x24 + 800a418: f000 fdba bl 800af90 + prvUnlockQueue( pxQueue ); + 800a41c: 4620 mov r0, r4 + 800a41e: f7ff fc80 bl 8009d22 + if( xTaskResumeAll() == pdFALSE ) + 800a422: f000 fc65 bl 800acf0 + 800a426: b948 cbnz r0, 800a43c + portYIELD_WITHIN_API(); + 800a428: f04f 23e0 mov.w r3, #3758153728 ; 0xe000e000 + 800a42c: f04f 5280 mov.w r2, #268435456 ; 0x10000000 + 800a430: f8c3 2d04 str.w r2, [r3, #3332] ; 0xd04 + 800a434: f3bf 8f4f dsb sy + 800a438: f3bf 8f6f isb sy + 800a43c: 2601 movs r6, #1 + taskENTER_CRITICAL(); + 800a43e: f7ff fae9 bl 8009a14 + const UBaseType_t uxMessagesWaiting = pxQueue->uxMessagesWaiting; + 800a442: 6ba5 ldr r5, [r4, #56] ; 0x38 + if( uxMessagesWaiting > ( UBaseType_t ) 0 ) + 800a444: 2d00 cmp r5, #0 + 800a446: d0bc beq.n 800a3c2 + pxQueue->uxMessagesWaiting = uxMessagesWaiting - ( UBaseType_t ) 1; + 800a448: 3d01 subs r5, #1 + prvCopyDataFromQueue( pxQueue, pvBuffer ); + 800a44a: 4639 mov r1, r7 + 800a44c: 4620 mov r0, r4 + 800a44e: f7ff fc53 bl 8009cf8 + pxQueue->uxMessagesWaiting = uxMessagesWaiting - ( UBaseType_t ) 1; + 800a452: 63a5 str r5, [r4, #56] ; 0x38 + if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToSend ) ) == pdFALSE ) + 800a454: 6923 ldr r3, [r4, #16] + 800a456: b173 cbz r3, 800a476 + if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToSend ) ) != pdFALSE ) + 800a458: f104 0010 add.w r0, r4, #16 + 800a45c: f000 fdd4 bl 800b008 + 800a460: b148 cbz r0, 800a476 + queueYIELD_IF_USING_PREEMPTION(); + 800a462: f04f 23e0 mov.w r3, #3758153728 ; 0xe000e000 + 800a466: f04f 5280 mov.w r2, #268435456 ; 0x10000000 + 800a46a: f8c3 2d04 str.w r2, [r3, #3332] ; 0xd04 + 800a46e: f3bf 8f4f dsb sy + 800a472: f3bf 8f6f isb sy + taskEXIT_CRITICAL(); + 800a476: f7ff faf1 bl 8009a5c + return pdPASS; + 800a47a: 2001 movs r0, #1 +} + 800a47c: b004 add sp, #16 + 800a47e: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + prvUnlockQueue( pxQueue ); + 800a482: 4620 mov r0, r4 + 800a484: f7ff fc4d bl 8009d22 + ( void ) xTaskResumeAll(); + 800a488: f000 fc32 bl 800acf0 + 800a48c: e7d6 b.n 800a43c + prvUnlockQueue( pxQueue ); + 800a48e: 4620 mov r0, r4 + 800a490: f7ff fc47 bl 8009d22 + ( void ) xTaskResumeAll(); + 800a494: f000 fc2c bl 800acf0 + if( prvIsQueueEmpty( pxQueue ) != pdFALSE ) + 800a498: 4620 mov r0, r4 + 800a49a: f7ff fbed bl 8009c78 + 800a49e: 2800 cmp r0, #0 + 800a4a0: d0cc beq.n 800a43c + 800a4a2: e792 b.n 800a3ca + +0800a4a4 : +{ + 800a4a4: b5f0 push {r4, r5, r6, r7, lr} + 800a4a6: b085 sub sp, #20 + configASSERT( ( pxQueue ) ); + 800a4a8: 4604 mov r4, r0 +{ + 800a4aa: 9101 str r1, [sp, #4] + configASSERT( ( pxQueue ) ); + 800a4ac: b950 cbnz r0, 800a4c4 + 800a4ae: f04f 0350 mov.w r3, #80 ; 0x50 + 800a4b2: b672 cpsid i + 800a4b4: f383 8811 msr BASEPRI, r3 + 800a4b8: f3bf 8f6f isb sy + 800a4bc: f3bf 8f4f dsb sy + 800a4c0: b662 cpsie i + 800a4c2: e7fe b.n 800a4c2 + configASSERT( pxQueue->uxItemSize == 0 ); + 800a4c4: 6c05 ldr r5, [r0, #64] ; 0x40 + 800a4c6: b155 cbz r5, 800a4de + 800a4c8: f04f 0350 mov.w r3, #80 ; 0x50 + 800a4cc: b672 cpsid i + 800a4ce: f383 8811 msr BASEPRI, r3 + 800a4d2: f3bf 8f6f isb sy + 800a4d6: f3bf 8f4f dsb sy + 800a4da: b662 cpsie i + 800a4dc: e7fe b.n 800a4dc + configASSERT( !( ( xTaskGetSchedulerState() == taskSCHEDULER_SUSPENDED ) && ( xTicksToWait != 0 ) ) ); + 800a4de: f000 fe31 bl 800b144 + 800a4e2: 4606 mov r6, r0 + 800a4e4: b960 cbnz r0, 800a500 + 800a4e6: 9b01 ldr r3, [sp, #4] + 800a4e8: b16b cbz r3, 800a506 + 800a4ea: f04f 0350 mov.w r3, #80 ; 0x50 + 800a4ee: b672 cpsid i + 800a4f0: f383 8811 msr BASEPRI, r3 + 800a4f4: f3bf 8f6f isb sy + 800a4f8: f3bf 8f4f dsb sy + 800a4fc: b662 cpsie i + 800a4fe: e7fe b.n 800a4fe + 800a500: 462e mov r6, r5 + prvLockQueue( pxQueue ); + 800a502: 2700 movs r7, #0 + 800a504: e055 b.n 800a5b2 + 800a506: 4605 mov r5, r0 + 800a508: e7fb b.n 800a502 + if( xTicksToWait == ( TickType_t ) 0 ) + 800a50a: 9b01 ldr r3, [sp, #4] + 800a50c: b973 cbnz r3, 800a52c + configASSERT( xInheritanceOccurred == pdFALSE ); + 800a50e: b155 cbz r5, 800a526 + 800a510: f04f 0350 mov.w r3, #80 ; 0x50 + 800a514: b672 cpsid i + 800a516: f383 8811 msr BASEPRI, r3 + 800a51a: f3bf 8f6f isb sy + 800a51e: f3bf 8f4f dsb sy + 800a522: b662 cpsie i + 800a524: e7fe b.n 800a524 + taskEXIT_CRITICAL(); + 800a526: f7ff fa99 bl 8009a5c + return errQUEUE_EMPTY; + 800a52a: e062 b.n 800a5f2 + else if( xEntryTimeSet == pdFALSE ) + 800a52c: b916 cbnz r6, 800a534 + vTaskInternalSetTimeOutState( &xTimeOut ); + 800a52e: a802 add r0, sp, #8 + 800a530: f000 fdb0 bl 800b094 + taskEXIT_CRITICAL(); + 800a534: f7ff fa92 bl 8009a5c + vTaskSuspendAll(); + 800a538: f000 fb2c bl 800ab94 + prvLockQueue( pxQueue ); + 800a53c: f7ff fa6a bl 8009a14 + 800a540: f894 3044 ldrb.w r3, [r4, #68] ; 0x44 + 800a544: 2bff cmp r3, #255 ; 0xff + 800a546: d101 bne.n 800a54c + 800a548: f884 7044 strb.w r7, [r4, #68] ; 0x44 + 800a54c: f894 3045 ldrb.w r3, [r4, #69] ; 0x45 + 800a550: 2bff cmp r3, #255 ; 0xff + 800a552: d101 bne.n 800a558 + 800a554: f884 7045 strb.w r7, [r4, #69] ; 0x45 + 800a558: f7ff fa80 bl 8009a5c + if( xTaskCheckForTimeOut( &xTimeOut, &xTicksToWait ) == pdFALSE ) + 800a55c: a901 add r1, sp, #4 + 800a55e: a802 add r0, sp, #8 + 800a560: f000 fda4 bl 800b0ac + 800a564: 2800 cmp r0, #0 + 800a566: d14d bne.n 800a604 + if( prvIsQueueEmpty( pxQueue ) != pdFALSE ) + 800a568: 4620 mov r0, r4 + 800a56a: f7ff fb85 bl 8009c78 + 800a56e: 2800 cmp r0, #0 + 800a570: d042 beq.n 800a5f8 + if( pxQueue->uxQueueType == queueQUEUE_IS_MUTEX ) + 800a572: 6823 ldr r3, [r4, #0] + 800a574: b93b cbnz r3, 800a586 + taskENTER_CRITICAL(); + 800a576: f7ff fa4d bl 8009a14 + xInheritanceOccurred = xTaskPriorityInherit( pxQueue->u.xSemaphore.xMutexHolder ); + 800a57a: 68a0 ldr r0, [r4, #8] + 800a57c: f000 fdf2 bl 800b164 + 800a580: 4605 mov r5, r0 + taskEXIT_CRITICAL(); + 800a582: f7ff fa6b bl 8009a5c + vTaskPlaceOnEventList( &( pxQueue->xTasksWaitingToReceive ), xTicksToWait ); + 800a586: 9901 ldr r1, [sp, #4] + 800a588: f104 0024 add.w r0, r4, #36 ; 0x24 + 800a58c: f000 fd00 bl 800af90 + prvUnlockQueue( pxQueue ); + 800a590: 4620 mov r0, r4 + 800a592: f7ff fbc6 bl 8009d22 + if( xTaskResumeAll() == pdFALSE ) + 800a596: f000 fbab bl 800acf0 + 800a59a: b948 cbnz r0, 800a5b0 + portYIELD_WITHIN_API(); + 800a59c: f04f 23e0 mov.w r3, #3758153728 ; 0xe000e000 + 800a5a0: f04f 5280 mov.w r2, #268435456 ; 0x10000000 + 800a5a4: f8c3 2d04 str.w r2, [r3, #3332] ; 0xd04 + 800a5a8: f3bf 8f4f dsb sy + 800a5ac: f3bf 8f6f isb sy + 800a5b0: 2601 movs r6, #1 + taskENTER_CRITICAL(); + 800a5b2: f7ff fa2f bl 8009a14 + const UBaseType_t uxSemaphoreCount = pxQueue->uxMessagesWaiting; + 800a5b6: 6ba3 ldr r3, [r4, #56] ; 0x38 + if( uxSemaphoreCount > ( UBaseType_t ) 0 ) + 800a5b8: 2b00 cmp r3, #0 + 800a5ba: d0a6 beq.n 800a50a + pxQueue->uxMessagesWaiting = uxSemaphoreCount - ( UBaseType_t ) 1; + 800a5bc: 3b01 subs r3, #1 + 800a5be: 63a3 str r3, [r4, #56] ; 0x38 + if( pxQueue->uxQueueType == queueQUEUE_IS_MUTEX ) + 800a5c0: 6823 ldr r3, [r4, #0] + 800a5c2: b913 cbnz r3, 800a5ca + pxQueue->u.xSemaphore.xMutexHolder = pvTaskIncrementMutexHeldCount(); + 800a5c4: f000 feac bl 800b320 + 800a5c8: 60a0 str r0, [r4, #8] + if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToSend ) ) == pdFALSE ) + 800a5ca: 6923 ldr r3, [r4, #16] + 800a5cc: b173 cbz r3, 800a5ec + if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToSend ) ) != pdFALSE ) + 800a5ce: f104 0010 add.w r0, r4, #16 + 800a5d2: f000 fd19 bl 800b008 + 800a5d6: b148 cbz r0, 800a5ec + queueYIELD_IF_USING_PREEMPTION(); + 800a5d8: f04f 23e0 mov.w r3, #3758153728 ; 0xe000e000 + 800a5dc: f04f 5280 mov.w r2, #268435456 ; 0x10000000 + 800a5e0: f8c3 2d04 str.w r2, [r3, #3332] ; 0xd04 + 800a5e4: f3bf 8f4f dsb sy + 800a5e8: f3bf 8f6f isb sy + return pdPASS; + 800a5ec: 2501 movs r5, #1 + taskEXIT_CRITICAL(); + 800a5ee: f7ff fa35 bl 8009a5c +} + 800a5f2: 4628 mov r0, r5 + 800a5f4: b005 add sp, #20 + 800a5f6: bdf0 pop {r4, r5, r6, r7, pc} + prvUnlockQueue( pxQueue ); + 800a5f8: 4620 mov r0, r4 + 800a5fa: f7ff fb92 bl 8009d22 + ( void ) xTaskResumeAll(); + 800a5fe: f000 fb77 bl 800acf0 + 800a602: e7d5 b.n 800a5b0 + prvUnlockQueue( pxQueue ); + 800a604: 4620 mov r0, r4 + 800a606: f7ff fb8c bl 8009d22 + ( void ) xTaskResumeAll(); + 800a60a: f000 fb71 bl 800acf0 + if( prvIsQueueEmpty( pxQueue ) != pdFALSE ) + 800a60e: 4620 mov r0, r4 + 800a610: f7ff fb32 bl 8009c78 + 800a614: 2800 cmp r0, #0 + 800a616: d0cb beq.n 800a5b0 + if( xInheritanceOccurred != pdFALSE ) + 800a618: 2d00 cmp r5, #0 + 800a61a: d0ea beq.n 800a5f2 + taskENTER_CRITICAL(); + 800a61c: f7ff f9fa bl 8009a14 + if( listCURRENT_LIST_LENGTH( &( pxQueue->xTasksWaitingToReceive ) ) > 0U ) + 800a620: 6a61 ldr r1, [r4, #36] ; 0x24 + 800a622: b119 cbz r1, 800a62c + uxHighestPriorityOfWaitingTasks = ( UBaseType_t ) configMAX_PRIORITIES - ( UBaseType_t ) listGET_ITEM_VALUE_OF_HEAD_ENTRY( &( pxQueue->xTasksWaitingToReceive ) ); + 800a624: 6b23 ldr r3, [r4, #48] ; 0x30 + 800a626: 6819 ldr r1, [r3, #0] + 800a628: f1c1 0138 rsb r1, r1, #56 ; 0x38 + vTaskPriorityDisinheritAfterTimeout( pxQueue->u.xSemaphore.xMutexHolder, uxHighestWaitingPriority ); + 800a62c: 68a0 ldr r0, [r4, #8] + return errQUEUE_EMPTY; + 800a62e: 2500 movs r5, #0 + vTaskPriorityDisinheritAfterTimeout( pxQueue->u.xSemaphore.xMutexHolder, uxHighestWaitingPriority ); + 800a630: f000 fe20 bl 800b274 + taskEXIT_CRITICAL(); + 800a634: f7ff fa12 bl 8009a5c + 800a638: e7db b.n 800a5f2 + +0800a63a : + { + 800a63a: b537 push {r0, r1, r2, r4, r5, lr} + configASSERT( pxMutex ); + 800a63c: 4604 mov r4, r0 + 800a63e: b950 cbnz r0, 800a656 + 800a640: f04f 0350 mov.w r3, #80 ; 0x50 + 800a644: b672 cpsid i + 800a646: f383 8811 msr BASEPRI, r3 + 800a64a: f3bf 8f6f isb sy + 800a64e: f3bf 8f4f dsb sy + 800a652: b662 cpsie i + 800a654: e7fe b.n 800a654 + if( pxMutex->u.xSemaphore.xMutexHolder == xTaskGetCurrentTaskHandle() ) + 800a656: 6885 ldr r5, [r0, #8] + 800a658: 9101 str r1, [sp, #4] + 800a65a: f000 fd6d bl 800b138 + 800a65e: 4285 cmp r5, r0 + 800a660: 9901 ldr r1, [sp, #4] + 800a662: d105 bne.n 800a670 + ( pxMutex->u.xSemaphore.uxRecursiveCallCount )++; + 800a664: 68e3 ldr r3, [r4, #12] + xReturn = pdPASS; + 800a666: 2001 movs r0, #1 + ( pxMutex->u.xSemaphore.uxRecursiveCallCount )++; + 800a668: 3301 adds r3, #1 + 800a66a: 60e3 str r3, [r4, #12] + } + 800a66c: b003 add sp, #12 + 800a66e: bd30 pop {r4, r5, pc} + xReturn = xQueueSemaphoreTake( pxMutex, xTicksToWait ); + 800a670: 4620 mov r0, r4 + 800a672: f7ff ff17 bl 800a4a4 + if( xReturn != pdFAIL ) + 800a676: 2800 cmp r0, #0 + 800a678: d0f8 beq.n 800a66c + ( pxMutex->u.xSemaphore.uxRecursiveCallCount )++; + 800a67a: 68e3 ldr r3, [r4, #12] + 800a67c: 3301 adds r3, #1 + 800a67e: 60e3 str r3, [r4, #12] + return xReturn; + 800a680: e7f4 b.n 800a66c + +0800a682 : +{ + 800a682: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} + 800a686: 4689 mov r9, r1 + 800a688: 4690 mov r8, r2 + configASSERT( pxQueue ); + 800a68a: 4605 mov r5, r0 + 800a68c: b950 cbnz r0, 800a6a4 + 800a68e: f04f 0350 mov.w r3, #80 ; 0x50 + 800a692: b672 cpsid i + 800a694: f383 8811 msr BASEPRI, r3 + 800a698: f3bf 8f6f isb sy + 800a69c: f3bf 8f4f dsb sy + 800a6a0: b662 cpsie i + 800a6a2: e7fe b.n 800a6a2 + configASSERT( !( ( pvBuffer == NULL ) && ( pxQueue->uxItemSize != ( UBaseType_t ) 0U ) ) ); + 800a6a4: b961 cbnz r1, 800a6c0 + 800a6a6: 6c03 ldr r3, [r0, #64] ; 0x40 + 800a6a8: b153 cbz r3, 800a6c0 + 800a6aa: f04f 0350 mov.w r3, #80 ; 0x50 + 800a6ae: b672 cpsid i + 800a6b0: f383 8811 msr BASEPRI, r3 + 800a6b4: f3bf 8f6f isb sy + 800a6b8: f3bf 8f4f dsb sy + 800a6bc: b662 cpsie i + 800a6be: e7fe b.n 800a6be + portASSERT_IF_INTERRUPT_PRIORITY_INVALID(); + 800a6c0: f7ff faa8 bl 8009c14 + __asm volatile + 800a6c4: f3ef 8711 mrs r7, BASEPRI + 800a6c8: f04f 0350 mov.w r3, #80 ; 0x50 + 800a6cc: b672 cpsid i + 800a6ce: f383 8811 msr BASEPRI, r3 + 800a6d2: f3bf 8f6f isb sy + 800a6d6: f3bf 8f4f dsb sy + 800a6da: b662 cpsie i + const UBaseType_t uxMessagesWaiting = pxQueue->uxMessagesWaiting; + 800a6dc: 6bac ldr r4, [r5, #56] ; 0x38 + if( uxMessagesWaiting > ( UBaseType_t ) 0 ) + 800a6de: b31c cbz r4, 800a728 + const int8_t cRxLock = pxQueue->cRxLock; + 800a6e0: f895 6044 ldrb.w r6, [r5, #68] ; 0x44 + prvCopyDataFromQueue( pxQueue, pvBuffer ); + 800a6e4: 4649 mov r1, r9 + 800a6e6: 4628 mov r0, r5 + pxQueue->uxMessagesWaiting = uxMessagesWaiting - ( UBaseType_t ) 1; + 800a6e8: 3c01 subs r4, #1 + const int8_t cRxLock = pxQueue->cRxLock; + 800a6ea: b276 sxtb r6, r6 + prvCopyDataFromQueue( pxQueue, pvBuffer ); + 800a6ec: f7ff fb04 bl 8009cf8 + pxQueue->uxMessagesWaiting = uxMessagesWaiting - ( UBaseType_t ) 1; + 800a6f0: 63ac str r4, [r5, #56] ; 0x38 + if( cRxLock == queueUNLOCKED ) + 800a6f2: 1c73 adds r3, r6, #1 + 800a6f4: d113 bne.n 800a71e + if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToSend ) ) == pdFALSE ) + 800a6f6: 692b ldr r3, [r5, #16] + 800a6f8: b90b cbnz r3, 800a6fe + xReturn = pdPASS; + 800a6fa: 2001 movs r0, #1 + 800a6fc: e00b b.n 800a716 + if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToSend ) ) != pdFALSE ) + 800a6fe: f105 0010 add.w r0, r5, #16 + 800a702: f000 fc81 bl 800b008 + 800a706: 2800 cmp r0, #0 + 800a708: d0f7 beq.n 800a6fa + if( pxHigherPriorityTaskWoken != NULL ) + 800a70a: f1b8 0f00 cmp.w r8, #0 + 800a70e: d0f4 beq.n 800a6fa + *pxHigherPriorityTaskWoken = pdTRUE; + 800a710: 2001 movs r0, #1 + 800a712: f8c8 0000 str.w r0, [r8] + __asm volatile + 800a716: f387 8811 msr BASEPRI, r7 +} + 800a71a: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} + pxQueue->cRxLock = ( int8_t ) ( cRxLock + 1 ); + 800a71e: 3601 adds r6, #1 + 800a720: b276 sxtb r6, r6 + 800a722: f885 6044 strb.w r6, [r5, #68] ; 0x44 + 800a726: e7e8 b.n 800a6fa + xReturn = pdFAIL; + 800a728: 4620 mov r0, r4 + 800a72a: e7f4 b.n 800a716 + +0800a72c : + { + UBaseType_t ux; + + /* See if there is an empty space in the registry. A NULL name denotes + a free slot. */ + for( ux = ( UBaseType_t ) 0U; ux < ( UBaseType_t ) configQUEUE_REGISTRY_SIZE; ux++ ) + 800a72c: 2300 movs r3, #0 + { + if( xQueueRegistry[ ux ].pcQueueName == NULL ) + 800a72e: 4a07 ldr r2, [pc, #28] ; (800a74c ) + { + 800a730: b510 push {r4, lr} + if( xQueueRegistry[ ux ].pcQueueName == NULL ) + 800a732: f852 4033 ldr.w r4, [r2, r3, lsl #3] + 800a736: b92c cbnz r4, 800a744 + { + /* Store the information on this queue. */ + xQueueRegistry[ ux ].pcQueueName = pcQueueName; + 800a738: f842 1033 str.w r1, [r2, r3, lsl #3] + xQueueRegistry[ ux ].xHandle = xQueue; + 800a73c: eb02 02c3 add.w r2, r2, r3, lsl #3 + 800a740: 6050 str r0, [r2, #4] + else + { + mtCOVERAGE_TEST_MARKER(); + } + } + } + 800a742: bd10 pop {r4, pc} + for( ux = ( UBaseType_t ) 0U; ux < ( UBaseType_t ) configQUEUE_REGISTRY_SIZE; ux++ ) + 800a744: 3301 adds r3, #1 + 800a746: 2b08 cmp r3, #8 + 800a748: d1f3 bne.n 800a732 + 800a74a: e7fa b.n 800a742 + 800a74c: 2001a7a4 .word 0x2001a7a4 + +0800a750 : + { + UBaseType_t ux; + + /* See if the handle of the queue being unregistered in actually in the + registry. */ + for( ux = ( UBaseType_t ) 0U; ux < ( UBaseType_t ) configQUEUE_REGISTRY_SIZE; ux++ ) + 800a750: 2300 movs r3, #0 + { + if( xQueueRegistry[ ux ].xHandle == xQueue ) + 800a752: 4a08 ldr r2, [pc, #32] ; (800a774 ) + { + 800a754: b510 push {r4, lr} + if( xQueueRegistry[ ux ].xHandle == xQueue ) + 800a756: eb02 01c3 add.w r1, r2, r3, lsl #3 + 800a75a: 684c ldr r4, [r1, #4] + 800a75c: 4284 cmp r4, r0 + 800a75e: d104 bne.n 800a76a + { + /* Set the name to NULL to show that this slot if free again. */ + xQueueRegistry[ ux ].pcQueueName = NULL; + 800a760: 2000 movs r0, #0 + 800a762: f842 0033 str.w r0, [r2, r3, lsl #3] + + /* Set the handle to NULL to ensure the same queue handle cannot + appear in the registry twice if it is added, removed, then + added again. */ + xQueueRegistry[ ux ].xHandle = ( QueueHandle_t ) 0; + 800a766: 6048 str r0, [r1, #4] + { + mtCOVERAGE_TEST_MARKER(); + } + } + + } /*lint !e818 xQueue could not be pointer to const because it is a typedef. */ + 800a768: bd10 pop {r4, pc} + for( ux = ( UBaseType_t ) 0U; ux < ( UBaseType_t ) configQUEUE_REGISTRY_SIZE; ux++ ) + 800a76a: 3301 adds r3, #1 + 800a76c: 2b08 cmp r3, #8 + 800a76e: d1f2 bne.n 800a756 + 800a770: e7fa b.n 800a768 + 800a772: bf00 nop + 800a774: 2001a7a4 .word 0x2001a7a4 + +0800a778 : +{ + 800a778: b510 push {r4, lr} + configASSERT( pxQueue ); + 800a77a: 4604 mov r4, r0 + 800a77c: b950 cbnz r0, 800a794 + __asm volatile + 800a77e: f04f 0350 mov.w r3, #80 ; 0x50 + 800a782: b672 cpsid i + 800a784: f383 8811 msr BASEPRI, r3 + 800a788: f3bf 8f6f isb sy + 800a78c: f3bf 8f4f dsb sy + 800a790: b662 cpsie i + 800a792: e7fe b.n 800a792 + vQueueUnregisterQueue( pxQueue ); + 800a794: f7ff ffdc bl 800a750 + if( pxQueue->ucStaticallyAllocated == ( uint8_t ) pdFALSE ) + 800a798: f894 3046 ldrb.w r3, [r4, #70] ; 0x46 + 800a79c: b923 cbnz r3, 800a7a8 + vPortFree( pxQueue ); + 800a79e: 4620 mov r0, r4 +} + 800a7a0: e8bd 4010 ldmia.w sp!, {r4, lr} + vPortFree( pxQueue ); + 800a7a4: f7ff b850 b.w 8009848 +} + 800a7a8: bd10 pop {r4, pc} + +0800a7aa : +/*-----------------------------------------------------------*/ + +#if ( configUSE_TIMERS == 1 ) + + void vQueueWaitForMessageRestricted( QueueHandle_t xQueue, TickType_t xTicksToWait, const BaseType_t xWaitIndefinitely ) + { + 800a7aa: b570 push {r4, r5, r6, lr} + 800a7ac: 4604 mov r4, r0 + 800a7ae: 460d mov r5, r1 + 800a7b0: 4616 mov r6, r2 + will not actually cause the task to block, just place it on a blocked + list. It will not block until the scheduler is unlocked - at which + time a yield will be performed. If an item is added to the queue while + the queue is locked, and the calling task blocks on the queue, then the + calling task will be immediately unblocked when the queue is unlocked. */ + prvLockQueue( pxQueue ); + 800a7b2: f7ff f92f bl 8009a14 + 800a7b6: f894 3044 ldrb.w r3, [r4, #68] ; 0x44 + 800a7ba: 2bff cmp r3, #255 ; 0xff + 800a7bc: d102 bne.n 800a7c4 + 800a7be: 2300 movs r3, #0 + 800a7c0: f884 3044 strb.w r3, [r4, #68] ; 0x44 + 800a7c4: f894 3045 ldrb.w r3, [r4, #69] ; 0x45 + 800a7c8: 2bff cmp r3, #255 ; 0xff + 800a7ca: d102 bne.n 800a7d2 + 800a7cc: 2300 movs r3, #0 + 800a7ce: f884 3045 strb.w r3, [r4, #69] ; 0x45 + 800a7d2: f7ff f943 bl 8009a5c + if( pxQueue->uxMessagesWaiting == ( UBaseType_t ) 0U ) + 800a7d6: 6ba3 ldr r3, [r4, #56] ; 0x38 + 800a7d8: b92b cbnz r3, 800a7e6 + { + /* There is nothing in the queue, block for the specified period. */ + vTaskPlaceOnEventListRestricted( &( pxQueue->xTasksWaitingToReceive ), xTicksToWait, xWaitIndefinitely ); + 800a7da: 4632 mov r2, r6 + 800a7dc: 4629 mov r1, r5 + 800a7de: f104 0024 add.w r0, r4, #36 ; 0x24 + 800a7e2: f000 fbf1 bl 800afc8 + } + else + { + mtCOVERAGE_TEST_MARKER(); + } + prvUnlockQueue( pxQueue ); + 800a7e6: 4620 mov r0, r4 + } + 800a7e8: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} + prvUnlockQueue( pxQueue ); + 800a7ec: f7ff ba99 b.w 8009d22 + +0800a7f0 : + } +} +/*-----------------------------------------------------------*/ + +static void prvAddNewTaskToReadyList( TCB_t *pxNewTCB ) +{ + 800a7f0: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} + 800a7f4: 4604 mov r4, r0 + /* Ensure interrupts don't access the task lists while the lists are being + updated. */ + taskENTER_CRITICAL(); + 800a7f6: f7ff f90d bl 8009a14 + { + uxCurrentNumberOfTasks++; + 800a7fa: 4b2f ldr r3, [pc, #188] ; (800a8b8 ) + if( pxCurrentTCB == NULL ) + 800a7fc: 4e2f ldr r6, [pc, #188] ; (800a8bc ) + uxCurrentNumberOfTasks++; + 800a7fe: 681a ldr r2, [r3, #0] + 800a800: 4f2f ldr r7, [pc, #188] ; (800a8c0 ) + 800a802: 3201 adds r2, #1 + 800a804: 601a str r2, [r3, #0] + if( pxCurrentTCB == NULL ) + 800a806: 6835 ldr r5, [r6, #0] + 800a808: 2d00 cmp r5, #0 + 800a80a: d14a bne.n 800a8a2 + { + /* There are no other tasks, or all the other tasks are in + the suspended state - make this the current task. */ + pxCurrentTCB = pxNewTCB; + 800a80c: 6034 str r4, [r6, #0] + + if( uxCurrentNumberOfTasks == ( UBaseType_t ) 1 ) + 800a80e: 681b ldr r3, [r3, #0] + 800a810: 2b01 cmp r3, #1 + 800a812: d11f bne.n 800a854 + 800a814: 46b8 mov r8, r7 + +static void prvInitialiseTaskLists( void ) +{ +UBaseType_t uxPriority; + + for( uxPriority = ( UBaseType_t ) 0U; uxPriority < ( UBaseType_t ) configMAX_PRIORITIES; uxPriority++ ) + 800a816: 3501 adds r5, #1 + { + vListInitialise( &( pxReadyTasksLists[ uxPriority ] ) ); + 800a818: 4640 mov r0, r8 + 800a81a: f7ff f851 bl 80098c0 + for( uxPriority = ( UBaseType_t ) 0U; uxPriority < ( UBaseType_t ) configMAX_PRIORITIES; uxPriority++ ) + 800a81e: f108 0814 add.w r8, r8, #20 + 800a822: 2d38 cmp r5, #56 ; 0x38 + 800a824: d1f7 bne.n 800a816 + } + + vListInitialise( &xDelayedTaskList1 ); + 800a826: f8df 80c0 ldr.w r8, [pc, #192] ; 800a8e8 + vListInitialise( &xDelayedTaskList2 ); + 800a82a: 4d26 ldr r5, [pc, #152] ; (800a8c4 ) + vListInitialise( &xDelayedTaskList1 ); + 800a82c: 4640 mov r0, r8 + 800a82e: f7ff f847 bl 80098c0 + vListInitialise( &xDelayedTaskList2 ); + 800a832: 4628 mov r0, r5 + 800a834: f7ff f844 bl 80098c0 + vListInitialise( &xPendingReadyList ); + 800a838: 4823 ldr r0, [pc, #140] ; (800a8c8 ) + 800a83a: f7ff f841 bl 80098c0 + + #if ( INCLUDE_vTaskDelete == 1 ) + { + vListInitialise( &xTasksWaitingTermination ); + 800a83e: 4823 ldr r0, [pc, #140] ; (800a8cc ) + 800a840: f7ff f83e bl 80098c0 + } + #endif /* INCLUDE_vTaskDelete */ + + #if ( INCLUDE_vTaskSuspend == 1 ) + { + vListInitialise( &xSuspendedTaskList ); + 800a844: 4822 ldr r0, [pc, #136] ; (800a8d0 ) + 800a846: f7ff f83b bl 80098c0 + } + #endif /* INCLUDE_vTaskSuspend */ + + /* Start with pxDelayedTaskList using list1 and the pxOverflowDelayedTaskList + using list2. */ + pxDelayedTaskList = &xDelayedTaskList1; + 800a84a: 4b22 ldr r3, [pc, #136] ; (800a8d4 ) + 800a84c: f8c3 8000 str.w r8, [r3] + pxOverflowDelayedTaskList = &xDelayedTaskList2; + 800a850: 4b21 ldr r3, [pc, #132] ; (800a8d8 ) + 800a852: 601d str r5, [r3, #0] + uxTaskNumber++; + 800a854: 4a21 ldr r2, [pc, #132] ; (800a8dc ) + 800a856: 6813 ldr r3, [r2, #0] + 800a858: 3301 adds r3, #1 + 800a85a: 6013 str r3, [r2, #0] + prvAddTaskToReadyList( pxNewTCB ); + 800a85c: 4a20 ldr r2, [pc, #128] ; (800a8e0 ) + pxNewTCB->uxTCBNumber = uxTaskNumber; + 800a85e: 6463 str r3, [r4, #68] ; 0x44 + prvAddTaskToReadyList( pxNewTCB ); + 800a860: 6811 ldr r1, [r2, #0] + 800a862: 6ae3 ldr r3, [r4, #44] ; 0x2c + 800a864: 428b cmp r3, r1 + 800a866: d900 bls.n 800a86a + 800a868: 6013 str r3, [r2, #0] + 800a86a: 2014 movs r0, #20 + 800a86c: 1d21 adds r1, r4, #4 + 800a86e: fb00 7003 mla r0, r0, r3, r7 + 800a872: f7ff f833 bl 80098dc + taskEXIT_CRITICAL(); + 800a876: f7ff f8f1 bl 8009a5c + if( xSchedulerRunning != pdFALSE ) + 800a87a: 4b1a ldr r3, [pc, #104] ; (800a8e4 ) + 800a87c: 681b ldr r3, [r3, #0] + 800a87e: b173 cbz r3, 800a89e + if( pxCurrentTCB->uxPriority < pxNewTCB->uxPriority ) + 800a880: 6833 ldr r3, [r6, #0] + 800a882: 6ada ldr r2, [r3, #44] ; 0x2c + 800a884: 6ae3 ldr r3, [r4, #44] ; 0x2c + 800a886: 429a cmp r2, r3 + 800a888: d209 bcs.n 800a89e + taskYIELD_IF_USING_PREEMPTION(); + 800a88a: f04f 23e0 mov.w r3, #3758153728 ; 0xe000e000 + 800a88e: f04f 5280 mov.w r2, #268435456 ; 0x10000000 + 800a892: f8c3 2d04 str.w r2, [r3, #3332] ; 0xd04 + 800a896: f3bf 8f4f dsb sy + 800a89a: f3bf 8f6f isb sy +} + 800a89e: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + if( xSchedulerRunning == pdFALSE ) + 800a8a2: 4b10 ldr r3, [pc, #64] ; (800a8e4 ) + 800a8a4: 681a ldr r2, [r3, #0] + if( pxCurrentTCB->uxPriority <= pxNewTCB->uxPriority ) + 800a8a6: 6ae3 ldr r3, [r4, #44] ; 0x2c + if( xSchedulerRunning == pdFALSE ) + 800a8a8: 2a00 cmp r2, #0 + 800a8aa: d1d3 bne.n 800a854 + if( pxCurrentTCB->uxPriority <= pxNewTCB->uxPriority ) + 800a8ac: 6832 ldr r2, [r6, #0] + 800a8ae: 6ad2 ldr r2, [r2, #44] ; 0x2c + 800a8b0: 429a cmp r2, r3 + 800a8b2: d8cf bhi.n 800a854 + pxCurrentTCB = pxNewTCB; + 800a8b4: 6034 str r4, [r6, #0] + 800a8b6: e7cd b.n 800a854 + 800a8b8: 2001ac50 .word 0x2001ac50 + 800a8bc: 2001a7e4 .word 0x2001a7e4 + 800a8c0: 2001a7f0 .word 0x2001a7f0 + 800a8c4: 2001ac7c .word 0x2001ac7c + 800a8c8: 2001ac98 .word 0x2001ac98 + 800a8cc: 2001acc4 .word 0x2001acc4 + 800a8d0: 2001acb0 .word 0x2001acb0 + 800a8d4: 2001a7e8 .word 0x2001a7e8 + 800a8d8: 2001a7ec .word 0x2001a7ec + 800a8dc: 2001ac60 .word 0x2001ac60 + 800a8e0: 2001ac64 .word 0x2001ac64 + 800a8e4: 2001acac .word 0x2001acac + 800a8e8: 2001ac68 .word 0x2001ac68 + +0800a8ec : + } +#endif +/*-----------------------------------------------------------*/ + +static void prvAddCurrentTaskToDelayedList( TickType_t xTicksToWait, const BaseType_t xCanBlockIndefinitely ) +{ + 800a8ec: b5f8 push {r3, r4, r5, r6, r7, lr} +TickType_t xTimeToWake; +const TickType_t xConstTickCount = xTickCount; + 800a8ee: 4b15 ldr r3, [pc, #84] ; (800a944 ) +{ + 800a8f0: 4606 mov r6, r0 + } + #endif + + /* Remove the task from the ready list before adding it to the blocked list + as the same list item is used for both lists. */ + if( uxListRemove( &( pxCurrentTCB->xStateListItem ) ) == ( UBaseType_t ) 0 ) + 800a8f2: 4d15 ldr r5, [pc, #84] ; (800a948 ) +{ + 800a8f4: 460f mov r7, r1 +const TickType_t xConstTickCount = xTickCount; + 800a8f6: 681c ldr r4, [r3, #0] + if( uxListRemove( &( pxCurrentTCB->xStateListItem ) ) == ( UBaseType_t ) 0 ) + 800a8f8: 6828 ldr r0, [r5, #0] + 800a8fa: 3004 adds r0, #4 + 800a8fc: f7ff f811 bl 8009922 + mtCOVERAGE_TEST_MARKER(); + } + + #if ( INCLUDE_vTaskSuspend == 1 ) + { + if( ( xTicksToWait == portMAX_DELAY ) && ( xCanBlockIndefinitely != pdFALSE ) ) + 800a900: 1c73 adds r3, r6, #1 + 800a902: d107 bne.n 800a914 + 800a904: b137 cbz r7, 800a914 + { + /* Add the task to the suspended task list instead of a delayed task + list to ensure it is not woken by a timing event. It will block + indefinitely. */ + vListInsertEnd( &xSuspendedTaskList, &( pxCurrentTCB->xStateListItem ) ); + 800a906: 6829 ldr r1, [r5, #0] + 800a908: 4810 ldr r0, [pc, #64] ; (800a94c ) + 800a90a: 3104 adds r1, #4 + + /* Avoid compiler warning when INCLUDE_vTaskSuspend is not 1. */ + ( void ) xCanBlockIndefinitely; + } + #endif /* INCLUDE_vTaskSuspend */ +} + 800a90c: e8bd 40f8 ldmia.w sp!, {r3, r4, r5, r6, r7, lr} + vListInsertEnd( &xSuspendedTaskList, &( pxCurrentTCB->xStateListItem ) ); + 800a910: f7fe bfe4 b.w 80098dc + xTimeToWake = xConstTickCount + xTicksToWait; + 800a914: 19a4 adds r4, r4, r6 + listSET_LIST_ITEM_VALUE( &( pxCurrentTCB->xStateListItem ), xTimeToWake ); + 800a916: 682b ldr r3, [r5, #0] + 800a918: 605c str r4, [r3, #4] + if( xTimeToWake < xConstTickCount ) + 800a91a: d307 bcc.n 800a92c + vListInsert( pxOverflowDelayedTaskList, &( pxCurrentTCB->xStateListItem ) ); + 800a91c: 4b0c ldr r3, [pc, #48] ; (800a950 ) + 800a91e: 6818 ldr r0, [r3, #0] + 800a920: 6829 ldr r1, [r5, #0] +} + 800a922: e8bd 40f8 ldmia.w sp!, {r3, r4, r5, r6, r7, lr} + vListInsert( pxOverflowDelayedTaskList, &( pxCurrentTCB->xStateListItem ) ); + 800a926: 3104 adds r1, #4 + 800a928: f7fe bfe4 b.w 80098f4 + vListInsert( pxDelayedTaskList, &( pxCurrentTCB->xStateListItem ) ); + 800a92c: 4b09 ldr r3, [pc, #36] ; (800a954 ) + 800a92e: 6818 ldr r0, [r3, #0] + 800a930: 6829 ldr r1, [r5, #0] + 800a932: 3104 adds r1, #4 + 800a934: f7fe ffde bl 80098f4 + if( xTimeToWake < xNextTaskUnblockTime ) + 800a938: 4b07 ldr r3, [pc, #28] ; (800a958 ) + 800a93a: 681a ldr r2, [r3, #0] + 800a93c: 42a2 cmp r2, r4 + 800a93e: d900 bls.n 800a942 + xNextTaskUnblockTime = xTimeToWake; + 800a940: 601c str r4, [r3, #0] +} + 800a942: bdf8 pop {r3, r4, r5, r6, r7, pc} + 800a944: 2001acd8 .word 0x2001acd8 + 800a948: 2001a7e4 .word 0x2001a7e4 + 800a94c: 2001acb0 .word 0x2001acb0 + 800a950: 2001a7ec .word 0x2001a7ec + 800a954: 2001a7e8 .word 0x2001a7e8 + 800a958: 2001ac90 .word 0x2001ac90 + +0800a95c : + if( listLIST_IS_EMPTY( pxDelayedTaskList ) != pdFALSE ) + 800a95c: 4a06 ldr r2, [pc, #24] ; (800a978 ) + 800a95e: 6813 ldr r3, [r2, #0] + 800a960: 6819 ldr r1, [r3, #0] + 800a962: 4b06 ldr r3, [pc, #24] ; (800a97c ) + 800a964: b919 cbnz r1, 800a96e + xNextTaskUnblockTime = portMAX_DELAY; + 800a966: f04f 32ff mov.w r2, #4294967295 + xNextTaskUnblockTime = listGET_LIST_ITEM_VALUE( &( ( pxTCB )->xStateListItem ) ); + 800a96a: 601a str r2, [r3, #0] +} + 800a96c: 4770 bx lr + ( pxTCB ) = listGET_OWNER_OF_HEAD_ENTRY( pxDelayedTaskList ); /*lint !e9079 void * is used as this macro is used with timers and co-routines too. Alignment is known to be fine as the type of the pointer stored and retrieved is the same. */ + 800a96e: 6812 ldr r2, [r2, #0] + 800a970: 68d2 ldr r2, [r2, #12] + xNextTaskUnblockTime = listGET_LIST_ITEM_VALUE( &( ( pxTCB )->xStateListItem ) ); + 800a972: 68d2 ldr r2, [r2, #12] + 800a974: 6852 ldr r2, [r2, #4] + 800a976: e7f8 b.n 800a96a + 800a978: 2001a7e8 .word 0x2001a7e8 + 800a97c: 2001ac90 .word 0x2001ac90 + +0800a980 : + { + 800a980: b510 push {r4, lr} + if( pxTCB->ucStaticallyAllocated == tskDYNAMICALLY_ALLOCATED_STACK_AND_TCB ) + 800a982: f890 305d ldrb.w r3, [r0, #93] ; 0x5d + { + 800a986: 4604 mov r4, r0 + if( pxTCB->ucStaticallyAllocated == tskDYNAMICALLY_ALLOCATED_STACK_AND_TCB ) + 800a988: b93b cbnz r3, 800a99a + vPortFree( pxTCB->pxStack ); + 800a98a: 6b00 ldr r0, [r0, #48] ; 0x30 + 800a98c: f7fe ff5c bl 8009848 + vPortFree( pxTCB ); + 800a990: 4620 mov r0, r4 + } + 800a992: e8bd 4010 ldmia.w sp!, {r4, lr} + vPortFree( pxTCB ); + 800a996: f7fe bf57 b.w 8009848 + else if( pxTCB->ucStaticallyAllocated == tskSTATICALLY_ALLOCATED_STACK_ONLY ) + 800a99a: 2b01 cmp r3, #1 + 800a99c: d0f9 beq.n 800a992 + configASSERT( pxTCB->ucStaticallyAllocated == tskSTATICALLY_ALLOCATED_STACK_AND_TCB ); + 800a99e: 2b02 cmp r3, #2 + 800a9a0: d00a beq.n 800a9b8 + 800a9a2: f04f 0350 mov.w r3, #80 ; 0x50 + 800a9a6: b672 cpsid i + 800a9a8: f383 8811 msr BASEPRI, r3 + 800a9ac: f3bf 8f6f isb sy + 800a9b0: f3bf 8f4f dsb sy + 800a9b4: b662 cpsie i + 800a9b6: e7fe b.n 800a9b6 + } + 800a9b8: bd10 pop {r4, pc} + ... + +0800a9bc : +{ + 800a9bc: b580 push {r7, lr} + while( uxDeletedTasksWaitingCleanUp > ( UBaseType_t ) 0U ) + 800a9be: 4c14 ldr r4, [pc, #80] ; (800aa10 ) + pxTCB = listGET_OWNER_OF_HEAD_ENTRY( ( &xTasksWaitingTermination ) ); /*lint !e9079 void * is used as this macro is used with timers and co-routines too. Alignment is known to be fine as the type of the pointer stored and retrieved is the same. */ + 800a9c0: 4f14 ldr r7, [pc, #80] ; (800aa14 ) + --uxCurrentNumberOfTasks; + 800a9c2: 4d15 ldr r5, [pc, #84] ; (800aa18 ) + while( uxDeletedTasksWaitingCleanUp > ( UBaseType_t ) 0U ) + 800a9c4: 6823 ldr r3, [r4, #0] + 800a9c6: b983 cbnz r3, 800a9ea + if( listCURRENT_LIST_LENGTH( &( pxReadyTasksLists[ tskIDLE_PRIORITY ] ) ) > ( UBaseType_t ) 1 ) + 800a9c8: 4b14 ldr r3, [pc, #80] ; (800aa1c ) + 800a9ca: 681b ldr r3, [r3, #0] + 800a9cc: 2b01 cmp r3, #1 + 800a9ce: d909 bls.n 800a9e4 + taskYIELD(); + 800a9d0: f04f 23e0 mov.w r3, #3758153728 ; 0xe000e000 + 800a9d4: f04f 5280 mov.w r2, #268435456 ; 0x10000000 + 800a9d8: f8c3 2d04 str.w r2, [r3, #3332] ; 0xd04 + 800a9dc: f3bf 8f4f dsb sy + 800a9e0: f3bf 8f6f isb sy + vApplicationIdleHook(); + 800a9e4: f7f6 fa00 bl 8000de8 + prvCheckTasksWaitingTermination(); + 800a9e8: e7eb b.n 800a9c2 + taskENTER_CRITICAL(); + 800a9ea: f7ff f813 bl 8009a14 + pxTCB = listGET_OWNER_OF_HEAD_ENTRY( ( &xTasksWaitingTermination ) ); /*lint !e9079 void * is used as this macro is used with timers and co-routines too. Alignment is known to be fine as the type of the pointer stored and retrieved is the same. */ + 800a9ee: 68fb ldr r3, [r7, #12] + 800a9f0: 68de ldr r6, [r3, #12] + ( void ) uxListRemove( &( pxTCB->xStateListItem ) ); + 800a9f2: 1d30 adds r0, r6, #4 + 800a9f4: f7fe ff95 bl 8009922 + --uxCurrentNumberOfTasks; + 800a9f8: 682b ldr r3, [r5, #0] + 800a9fa: 3b01 subs r3, #1 + 800a9fc: 602b str r3, [r5, #0] + --uxDeletedTasksWaitingCleanUp; + 800a9fe: 6823 ldr r3, [r4, #0] + 800aa00: 3b01 subs r3, #1 + 800aa02: 6023 str r3, [r4, #0] + taskEXIT_CRITICAL(); + 800aa04: f7ff f82a bl 8009a5c + prvDeleteTCB( pxTCB ); + 800aa08: 4630 mov r0, r6 + 800aa0a: f7ff ffb9 bl 800a980 + 800aa0e: e7d9 b.n 800a9c4 + 800aa10: 2001ac54 .word 0x2001ac54 + 800aa14: 2001acc4 .word 0x2001acc4 + 800aa18: 2001ac50 .word 0x2001ac50 + 800aa1c: 2001a7f0 .word 0x2001a7f0 + +0800aa20 : +static void prvInitialiseNewTask( TaskFunction_t pxTaskCode, + 800aa20: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} + ( void ) memset( pxNewTCB->pxStack, ( int ) tskSTACK_FILL_BYTE, ( size_t ) ulStackDepth * sizeof( StackType_t ) ); + 800aa24: ea4f 0982 mov.w r9, r2, lsl #2 +static void prvInitialiseNewTask( TaskFunction_t pxTaskCode, + 800aa28: 4606 mov r6, r0 + 800aa2a: 460d mov r5, r1 + ( void ) memset( pxNewTCB->pxStack, ( int ) tskSTACK_FILL_BYTE, ( size_t ) ulStackDepth * sizeof( StackType_t ) ); + 800aa2c: 21a5 movs r1, #165 ; 0xa5 + 800aa2e: 464a mov r2, r9 +static void prvInitialiseNewTask( TaskFunction_t pxTaskCode, + 800aa30: 461f mov r7, r3 + pxTopOfStack = &( pxNewTCB->pxStack[ ulStackDepth - ( uint32_t ) 1 ] ); + 800aa32: f1a9 0904 sub.w r9, r9, #4 +static void prvInitialiseNewTask( TaskFunction_t pxTaskCode, + 800aa36: e9dd 8409 ldrd r8, r4, [sp, #36] ; 0x24 + ( void ) memset( pxNewTCB->pxStack, ( int ) tskSTACK_FILL_BYTE, ( size_t ) ulStackDepth * sizeof( StackType_t ) ); + 800aa3a: 6b20 ldr r0, [r4, #48] ; 0x30 + 800aa3c: f029 ffbe bl 80349bc + pxTopOfStack = &( pxNewTCB->pxStack[ ulStackDepth - ( uint32_t ) 1 ] ); + 800aa40: 6b23 ldr r3, [r4, #48] ; 0x30 + 800aa42: 444b add r3, r9 + pxTopOfStack = ( StackType_t * ) ( ( ( portPOINTER_SIZE_TYPE ) pxTopOfStack ) & ( ~( ( portPOINTER_SIZE_TYPE ) portBYTE_ALIGNMENT_MASK ) ) ); /*lint !e923 !e9033 !e9078 MISRA exception. Avoiding casts between pointers and integers is not practical. Size differences accounted for using portPOINTER_SIZE_TYPE type. Checked by assert(). */ + 800aa44: f023 0907 bic.w r9, r3, #7 + if( pcName != NULL ) + 800aa48: b3b5 cbz r5, 800aab8 + 800aa4a: 1e6b subs r3, r5, #1 + 800aa4c: f104 0233 add.w r2, r4, #51 ; 0x33 + 800aa50: 350f adds r5, #15 + pxNewTCB->pcTaskName[ x ] = pcName[ x ]; + 800aa52: f813 1f01 ldrb.w r1, [r3, #1]! + 800aa56: f802 1f01 strb.w r1, [r2, #1]! + if( pcName[ x ] == ( char ) 0x00 ) + 800aa5a: b109 cbz r1, 800aa60 + for( x = ( UBaseType_t ) 0; x < ( UBaseType_t ) configMAX_TASK_NAME_LEN; x++ ) + 800aa5c: 42ab cmp r3, r5 + 800aa5e: d1f8 bne.n 800aa52 + pxNewTCB->pcTaskName[ configMAX_TASK_NAME_LEN - 1 ] = '\0'; + 800aa60: 2300 movs r3, #0 + 800aa62: f884 3043 strb.w r3, [r4, #67] ; 0x43 + if( uxPriority >= ( UBaseType_t ) configMAX_PRIORITIES ) + 800aa66: 9d08 ldr r5, [sp, #32] + pxNewTCB->uxMutexesHeld = 0; + 800aa68: f04f 0a00 mov.w sl, #0 + vListInitialiseItem( &( pxNewTCB->xStateListItem ) ); + 800aa6c: 1d20 adds r0, r4, #4 + 800aa6e: 2d37 cmp r5, #55 ; 0x37 + pxNewTCB->uxMutexesHeld = 0; + 800aa70: f8c4 a050 str.w sl, [r4, #80] ; 0x50 + 800aa74: bf28 it cs + 800aa76: 2537 movcs r5, #55 ; 0x37 + pxNewTCB->uxPriority = uxPriority; + 800aa78: 62e5 str r5, [r4, #44] ; 0x2c + pxNewTCB->uxBasePriority = uxPriority; + 800aa7a: 64e5 str r5, [r4, #76] ; 0x4c + listSET_LIST_ITEM_VALUE( &( pxNewTCB->xEventListItem ), ( TickType_t ) configMAX_PRIORITIES - ( TickType_t ) uxPriority ); /*lint !e961 MISRA exception as the casts are only redundant for some ports. */ + 800aa7c: f1c5 0538 rsb r5, r5, #56 ; 0x38 + vListInitialiseItem( &( pxNewTCB->xStateListItem ) ); + 800aa80: f7fe ff29 bl 80098d6 + vListInitialiseItem( &( pxNewTCB->xEventListItem ) ); + 800aa84: f104 0018 add.w r0, r4, #24 + 800aa88: f7fe ff25 bl 80098d6 + pxNewTCB->ulNotifiedValue = 0; + 800aa8c: f8c4 a058 str.w sl, [r4, #88] ; 0x58 + pxNewTCB->pxTopOfStack = pxPortInitialiseStack( pxTopOfStack, pxTaskCode, pvParameters ); + 800aa90: 463a mov r2, r7 + 800aa92: 4631 mov r1, r6 + 800aa94: 4648 mov r0, r9 + listSET_LIST_ITEM_OWNER( &( pxNewTCB->xStateListItem ), pxNewTCB ); + 800aa96: 6124 str r4, [r4, #16] + listSET_LIST_ITEM_VALUE( &( pxNewTCB->xEventListItem ), ( TickType_t ) configMAX_PRIORITIES - ( TickType_t ) uxPriority ); /*lint !e961 MISRA exception as the casts are only redundant for some ports. */ + 800aa98: 61a5 str r5, [r4, #24] + listSET_LIST_ITEM_OWNER( &( pxNewTCB->xEventListItem ), pxNewTCB ); + 800aa9a: 6264 str r4, [r4, #36] ; 0x24 + pxNewTCB->pxTaskTag = NULL; + 800aa9c: f8c4 a054 str.w sl, [r4, #84] ; 0x54 + pxNewTCB->ucNotifyState = taskNOT_WAITING_NOTIFICATION; + 800aaa0: f884 a05c strb.w sl, [r4, #92] ; 0x5c + pxNewTCB->pxTopOfStack = pxPortInitialiseStack( pxTopOfStack, pxTaskCode, pvParameters ); + 800aaa4: f7fe ff90 bl 80099c8 + 800aaa8: 6020 str r0, [r4, #0] + if( pxCreatedTask != NULL ) + 800aaaa: f1b8 0f00 cmp.w r8, #0 + 800aaae: d001 beq.n 800aab4 + *pxCreatedTask = ( TaskHandle_t ) pxNewTCB; + 800aab0: f8c8 4000 str.w r4, [r8] +} + 800aab4: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + pxNewTCB->pcTaskName[ 0 ] = 0x00; + 800aab8: f884 5034 strb.w r5, [r4, #52] ; 0x34 + 800aabc: e7d3 b.n 800aa66 + +0800aabe : + { + 800aabe: b570 push {r4, r5, r6, lr} + 800aac0: b086 sub sp, #24 + 800aac2: e9dd 540b ldrd r5, r4, [sp, #44] ; 0x2c + configASSERT( puxStackBuffer != NULL ); + 800aac6: b955 cbnz r5, 800aade + 800aac8: f04f 0350 mov.w r3, #80 ; 0x50 + 800aacc: b672 cpsid i + 800aace: f383 8811 msr BASEPRI, r3 + 800aad2: f3bf 8f6f isb sy + 800aad6: f3bf 8f4f dsb sy + 800aada: b662 cpsie i + 800aadc: e7fe b.n 800aadc + configASSERT( pxTaskBuffer != NULL ); + 800aade: b954 cbnz r4, 800aaf6 + 800aae0: f04f 0350 mov.w r3, #80 ; 0x50 + 800aae4: b672 cpsid i + 800aae6: f383 8811 msr BASEPRI, r3 + 800aaea: f3bf 8f6f isb sy + 800aaee: f3bf 8f4f dsb sy + 800aaf2: b662 cpsie i + 800aaf4: e7fe b.n 800aaf4 + volatile size_t xSize = sizeof( StaticTask_t ); + 800aaf6: 2660 movs r6, #96 ; 0x60 + 800aaf8: 9605 str r6, [sp, #20] + configASSERT( xSize == sizeof( TCB_t ) ); + 800aafa: 9e05 ldr r6, [sp, #20] + 800aafc: 2e60 cmp r6, #96 ; 0x60 + 800aafe: d00a beq.n 800ab16 + 800ab00: f04f 0350 mov.w r3, #80 ; 0x50 + 800ab04: b672 cpsid i + 800ab06: f383 8811 msr BASEPRI, r3 + 800ab0a: f3bf 8f6f isb sy + 800ab0e: f3bf 8f4f dsb sy + 800ab12: b662 cpsie i + 800ab14: e7fe b.n 800ab14 + pxNewTCB->pxStack = ( StackType_t * ) puxStackBuffer; + 800ab16: 6325 str r5, [r4, #48] ; 0x30 + pxNewTCB->ucStaticallyAllocated = tskSTATICALLY_ALLOCATED_STACK_AND_TCB; + 800ab18: 2502 movs r5, #2 + ( void ) xSize; /* Prevent lint warning when configASSERT() is not used. */ + 800ab1a: 9e05 ldr r6, [sp, #20] + pxNewTCB->ucStaticallyAllocated = tskSTATICALLY_ALLOCATED_STACK_AND_TCB; + 800ab1c: f884 505d strb.w r5, [r4, #93] ; 0x5d + prvInitialiseNewTask( pxTaskCode, pcName, ulStackDepth, pvParameters, uxPriority, &xReturn, pxNewTCB, NULL ); + 800ab20: ad04 add r5, sp, #16 + 800ab22: 9402 str r4, [sp, #8] + 800ab24: 9501 str r5, [sp, #4] + 800ab26: 9d0a ldr r5, [sp, #40] ; 0x28 + 800ab28: 9500 str r5, [sp, #0] + 800ab2a: f7ff ff79 bl 800aa20 + prvAddNewTaskToReadyList( pxNewTCB ); + 800ab2e: 4620 mov r0, r4 + 800ab30: f7ff fe5e bl 800a7f0 + } + 800ab34: 9804 ldr r0, [sp, #16] + 800ab36: b006 add sp, #24 + 800ab38: bd70 pop {r4, r5, r6, pc} + +0800ab3a : + { + 800ab3a: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} + 800ab3e: 4607 mov r7, r0 + 800ab40: b085 sub sp, #20 + pxStack = pvPortMalloc( ( ( ( size_t ) usStackDepth ) * sizeof( StackType_t ) ) ); /*lint !e9079 All values returned by pvPortMalloc() have at least the alignment required by the MCU's stack and this allocation is the stack. */ + 800ab42: 0090 lsls r0, r2, #2 + { + 800ab44: 4688 mov r8, r1 + 800ab46: 4616 mov r6, r2 + 800ab48: 4699 mov r9, r3 + pxStack = pvPortMalloc( ( ( ( size_t ) usStackDepth ) * sizeof( StackType_t ) ) ); /*lint !e9079 All values returned by pvPortMalloc() have at least the alignment required by the MCU's stack and this allocation is the stack. */ + 800ab4a: f7fe fde7 bl 800971c + if( pxStack != NULL ) + 800ab4e: 4605 mov r5, r0 + 800ab50: b1e8 cbz r0, 800ab8e + pxNewTCB = ( TCB_t * ) pvPortMalloc( sizeof( TCB_t ) ); /*lint !e9087 !e9079 All values returned by pvPortMalloc() have at least the alignment required by the MCU's stack, and the first member of TCB_t is always a pointer to the task's stack. */ + 800ab52: 2060 movs r0, #96 ; 0x60 + 800ab54: f7fe fde2 bl 800971c + if( pxNewTCB != NULL ) + 800ab58: 4604 mov r4, r0 + 800ab5a: b1a8 cbz r0, 800ab88 + pxNewTCB->ucStaticallyAllocated = tskDYNAMICALLY_ALLOCATED_STACK_AND_TCB; + 800ab5c: 2300 movs r3, #0 + pxNewTCB->pxStack = pxStack; + 800ab5e: 6305 str r5, [r0, #48] ; 0x30 + prvInitialiseNewTask( pxTaskCode, pcName, ( uint32_t ) usStackDepth, pvParameters, uxPriority, pxCreatedTask, pxNewTCB, NULL ); + 800ab60: 4632 mov r2, r6 + 800ab62: 4641 mov r1, r8 + pxNewTCB->ucStaticallyAllocated = tskDYNAMICALLY_ALLOCATED_STACK_AND_TCB; + 800ab64: f880 305d strb.w r3, [r0, #93] ; 0x5d + prvInitialiseNewTask( pxTaskCode, pcName, ( uint32_t ) usStackDepth, pvParameters, uxPriority, pxCreatedTask, pxNewTCB, NULL ); + 800ab68: 9b0d ldr r3, [sp, #52] ; 0x34 + 800ab6a: 9002 str r0, [sp, #8] + 800ab6c: 4638 mov r0, r7 + 800ab6e: 9301 str r3, [sp, #4] + 800ab70: 9b0c ldr r3, [sp, #48] ; 0x30 + 800ab72: 9300 str r3, [sp, #0] + 800ab74: 464b mov r3, r9 + 800ab76: f7ff ff53 bl 800aa20 + prvAddNewTaskToReadyList( pxNewTCB ); + 800ab7a: 4620 mov r0, r4 + 800ab7c: f7ff fe38 bl 800a7f0 + xReturn = pdPASS; + 800ab80: 2001 movs r0, #1 + } + 800ab82: b005 add sp, #20 + 800ab84: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} + vPortFree( pxStack ); + 800ab88: 4628 mov r0, r5 + 800ab8a: f7fe fe5d bl 8009848 + xReturn = errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY; + 800ab8e: f04f 30ff mov.w r0, #4294967295 + return xReturn; + 800ab92: e7f6 b.n 800ab82 + +0800ab94 : + ++uxSchedulerSuspended; + 800ab94: 4a02 ldr r2, [pc, #8] ; (800aba0 ) + 800ab96: 6813 ldr r3, [r2, #0] + 800ab98: 3301 adds r3, #1 + 800ab9a: 6013 str r3, [r2, #0] +} + 800ab9c: 4770 bx lr + 800ab9e: bf00 nop + 800aba0: 2001ac5c .word 0x2001ac5c + +0800aba4 : + xTicks = xTickCount; + 800aba4: 4b01 ldr r3, [pc, #4] ; (800abac ) + 800aba6: 6818 ldr r0, [r3, #0] +} + 800aba8: 4770 bx lr + 800abaa: bf00 nop + 800abac: 2001acd8 .word 0x2001acd8 + +0800abb0 : +{ + 800abb0: b508 push {r3, lr} + portASSERT_IF_INTERRUPT_PRIORITY_INVALID(); + 800abb2: f7ff f82f bl 8009c14 + xReturn = xTickCount; + 800abb6: 4b01 ldr r3, [pc, #4] ; (800abbc ) + 800abb8: 6818 ldr r0, [r3, #0] +} + 800abba: bd08 pop {r3, pc} + 800abbc: 2001acd8 .word 0x2001acd8 + +0800abc0 : + if( uxSchedulerSuspended == ( UBaseType_t ) pdFALSE ) + 800abc0: 4b40 ldr r3, [pc, #256] ; (800acc4 ) + 800abc2: 681b ldr r3, [r3, #0] +{ + 800abc4: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} + if( uxSchedulerSuspended == ( UBaseType_t ) pdFALSE ) + 800abc8: 2b00 cmp r3, #0 + 800abca: d174 bne.n 800acb6 + const TickType_t xConstTickCount = xTickCount + ( TickType_t ) 1; + 800abcc: 4b3e ldr r3, [pc, #248] ; (800acc8 ) + 800abce: 681d ldr r5, [r3, #0] + 800abd0: 3501 adds r5, #1 + xTickCount = xConstTickCount; + 800abd2: 601d str r5, [r3, #0] + if( xConstTickCount == ( TickType_t ) 0U ) /*lint !e774 'if' does not always evaluate to false as it is looking for an overflow. */ + 800abd4: b9cd cbnz r5, 800ac0a + taskSWITCH_DELAYED_LISTS(); + 800abd6: 4b3d ldr r3, [pc, #244] ; (800accc ) + 800abd8: 681a ldr r2, [r3, #0] + 800abda: 6812 ldr r2, [r2, #0] + 800abdc: b152 cbz r2, 800abf4 + 800abde: f04f 0350 mov.w r3, #80 ; 0x50 + 800abe2: b672 cpsid i + 800abe4: f383 8811 msr BASEPRI, r3 + 800abe8: f3bf 8f6f isb sy + 800abec: f3bf 8f4f dsb sy + 800abf0: b662 cpsie i + 800abf2: e7fe b.n 800abf2 + 800abf4: 4a36 ldr r2, [pc, #216] ; (800acd0 ) + 800abf6: 6819 ldr r1, [r3, #0] + 800abf8: 6810 ldr r0, [r2, #0] + 800abfa: 6018 str r0, [r3, #0] + 800abfc: 6011 str r1, [r2, #0] + 800abfe: 4a35 ldr r2, [pc, #212] ; (800acd4 ) + 800ac00: 6813 ldr r3, [r2, #0] + 800ac02: 3301 adds r3, #1 + 800ac04: 6013 str r3, [r2, #0] + 800ac06: f7ff fea9 bl 800a95c + if( xConstTickCount >= xNextTaskUnblockTime ) + 800ac0a: 4e33 ldr r6, [pc, #204] ; (800acd8 ) +BaseType_t xSwitchRequired = pdFALSE; + 800ac0c: 2400 movs r4, #0 + 800ac0e: 4f33 ldr r7, [pc, #204] ; (800acdc ) + if( xConstTickCount >= xNextTaskUnblockTime ) + 800ac10: 6833 ldr r3, [r6, #0] + 800ac12: f8df 80d4 ldr.w r8, [pc, #212] ; 800ace8 + 800ac16: 42ab cmp r3, r5 + 800ac18: d911 bls.n 800ac3e + if( listCURRENT_LIST_LENGTH( &( pxReadyTasksLists[ pxCurrentTCB->uxPriority ] ) ) > ( UBaseType_t ) 1 ) + 800ac1a: f8d8 3000 ldr.w r3, [r8] + 800ac1e: 2214 movs r2, #20 + 800ac20: 6adb ldr r3, [r3, #44] ; 0x2c + 800ac22: 4353 muls r3, r2 + 800ac24: 58fb ldr r3, [r7, r3] + xSwitchRequired = pdTRUE; + 800ac26: 2b02 cmp r3, #2 + 800ac28: bf28 it cs + 800ac2a: 2401 movcs r4, #1 + if( xYieldPending != pdFALSE ) + 800ac2c: 4b2c ldr r3, [pc, #176] ; (800ace0 ) + 800ac2e: 681b ldr r3, [r3, #0] + xSwitchRequired = pdTRUE; + 800ac30: 2b00 cmp r3, #0 +} + 800ac32: bf0c ite eq + 800ac34: 4620 moveq r0, r4 + 800ac36: 2001 movne r0, #1 + 800ac38: b003 add sp, #12 + 800ac3a: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + if( listLIST_IS_EMPTY( pxDelayedTaskList ) != pdFALSE ) + 800ac3e: f8df 908c ldr.w r9, [pc, #140] ; 800accc + prvAddTaskToReadyList( pxTCB ); + 800ac42: f8df a0a8 ldr.w sl, [pc, #168] ; 800acec + if( listLIST_IS_EMPTY( pxDelayedTaskList ) != pdFALSE ) + 800ac46: f8d9 3000 ldr.w r3, [r9] + 800ac4a: 681b ldr r3, [r3, #0] + 800ac4c: b91b cbnz r3, 800ac56 + xNextTaskUnblockTime = portMAX_DELAY; /*lint !e961 MISRA exception as the casts are only redundant for some ports. */ + 800ac4e: f04f 33ff mov.w r3, #4294967295 + 800ac52: 6033 str r3, [r6, #0] + break; + 800ac54: e7e1 b.n 800ac1a + pxTCB = listGET_OWNER_OF_HEAD_ENTRY( pxDelayedTaskList ); /*lint !e9079 void * is used as this macro is used with timers and co-routines too. Alignment is known to be fine as the type of the pointer stored and retrieved is the same. */ + 800ac56: f8d9 3000 ldr.w r3, [r9] + 800ac5a: 68db ldr r3, [r3, #12] + 800ac5c: f8d3 b00c ldr.w fp, [r3, #12] + xItemValue = listGET_LIST_ITEM_VALUE( &( pxTCB->xStateListItem ) ); + 800ac60: f8db 2004 ldr.w r2, [fp, #4] + if( xConstTickCount < xItemValue ) + 800ac64: 4295 cmp r5, r2 + 800ac66: d201 bcs.n 800ac6c + xNextTaskUnblockTime = xItemValue; + 800ac68: 6032 str r2, [r6, #0] + break; /*lint !e9011 Code structure here is deedmed easier to understand with multiple breaks. */ + 800ac6a: e7d6 b.n 800ac1a + ( void ) uxListRemove( &( pxTCB->xStateListItem ) ); + 800ac6c: f10b 0104 add.w r1, fp, #4 + 800ac70: 4608 mov r0, r1 + 800ac72: 9101 str r1, [sp, #4] + 800ac74: f7fe fe55 bl 8009922 + if( listLIST_ITEM_CONTAINER( &( pxTCB->xEventListItem ) ) != NULL ) + 800ac78: f8db 2028 ldr.w r2, [fp, #40] ; 0x28 + 800ac7c: 9901 ldr r1, [sp, #4] + 800ac7e: b122 cbz r2, 800ac8a + ( void ) uxListRemove( &( pxTCB->xEventListItem ) ); + 800ac80: f10b 0018 add.w r0, fp, #24 + 800ac84: f7fe fe4d bl 8009922 + 800ac88: 9901 ldr r1, [sp, #4] + prvAddTaskToReadyList( pxTCB ); + 800ac8a: f8db 002c ldr.w r0, [fp, #44] ; 0x2c + 800ac8e: f8da 2000 ldr.w r2, [sl] + 800ac92: 4290 cmp r0, r2 + 800ac94: d901 bls.n 800ac9a + 800ac96: f8ca 0000 str.w r0, [sl] + 800ac9a: 2314 movs r3, #20 + 800ac9c: fb03 7000 mla r0, r3, r0, r7 + 800aca0: f7fe fe1c bl 80098dc + if( pxTCB->uxPriority >= pxCurrentTCB->uxPriority ) + 800aca4: f8d8 1000 ldr.w r1, [r8] + 800aca8: f8db 202c ldr.w r2, [fp, #44] ; 0x2c + 800acac: 6acb ldr r3, [r1, #44] ; 0x2c + xSwitchRequired = pdTRUE; + 800acae: 429a cmp r2, r3 + 800acb0: bf28 it cs + 800acb2: 2401 movcs r4, #1 + 800acb4: e7c7 b.n 800ac46 + ++uxPendedTicks; + 800acb6: 4a0b ldr r2, [pc, #44] ; (800ace4 ) +BaseType_t xSwitchRequired = pdFALSE; + 800acb8: 2400 movs r4, #0 + ++uxPendedTicks; + 800acba: 6813 ldr r3, [r2, #0] + 800acbc: 3301 adds r3, #1 + 800acbe: 6013 str r3, [r2, #0] + 800acc0: e7b4 b.n 800ac2c + 800acc2: bf00 nop + 800acc4: 2001ac5c .word 0x2001ac5c + 800acc8: 2001acd8 .word 0x2001acd8 + 800accc: 2001a7e8 .word 0x2001a7e8 + 800acd0: 2001a7ec .word 0x2001a7ec + 800acd4: 2001ac94 .word 0x2001ac94 + 800acd8: 2001ac90 .word 0x2001ac90 + 800acdc: 2001a7f0 .word 0x2001a7f0 + 800ace0: 2001acdc .word 0x2001acdc + 800ace4: 2001ac58 .word 0x2001ac58 + 800ace8: 2001a7e4 .word 0x2001a7e4 + 800acec: 2001ac64 .word 0x2001ac64 + +0800acf0 : +{ + 800acf0: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} + configASSERT( uxSchedulerSuspended ); + 800acf2: 4c32 ldr r4, [pc, #200] ; (800adbc ) + 800acf4: 6823 ldr r3, [r4, #0] + 800acf6: b953 cbnz r3, 800ad0e + 800acf8: f04f 0350 mov.w r3, #80 ; 0x50 + 800acfc: b672 cpsid i + 800acfe: f383 8811 msr BASEPRI, r3 + 800ad02: f3bf 8f6f isb sy + 800ad06: f3bf 8f4f dsb sy + 800ad0a: b662 cpsie i + 800ad0c: e7fe b.n 800ad0c + taskENTER_CRITICAL(); + 800ad0e: f7fe fe81 bl 8009a14 + --uxSchedulerSuspended; + 800ad12: 6823 ldr r3, [r4, #0] + 800ad14: 3b01 subs r3, #1 + 800ad16: 6023 str r3, [r4, #0] + if( uxSchedulerSuspended == ( UBaseType_t ) pdFALSE ) + 800ad18: 6824 ldr r4, [r4, #0] + 800ad1a: b12c cbz r4, 800ad28 +BaseType_t xAlreadyYielded = pdFALSE; + 800ad1c: 2400 movs r4, #0 + taskEXIT_CRITICAL(); + 800ad1e: f7fe fe9d bl 8009a5c +} + 800ad22: 4620 mov r0, r4 + 800ad24: b003 add sp, #12 + 800ad26: bdf0 pop {r4, r5, r6, r7, pc} + if( uxCurrentNumberOfTasks > ( UBaseType_t ) 0U ) + 800ad28: 4b25 ldr r3, [pc, #148] ; (800adc0 ) + 800ad2a: 681b ldr r3, [r3, #0] + 800ad2c: 2b00 cmp r3, #0 + 800ad2e: d0f5 beq.n 800ad1c + while( listLIST_IS_EMPTY( &xPendingReadyList ) == pdFALSE ) + 800ad30: 4d24 ldr r5, [pc, #144] ; (800adc4 ) + prvAddTaskToReadyList( pxTCB ); + 800ad32: 4e25 ldr r6, [pc, #148] ; (800adc8 ) + 800ad34: 4f25 ldr r7, [pc, #148] ; (800adcc ) + 800ad36: e01e b.n 800ad76 + pxTCB = listGET_OWNER_OF_HEAD_ENTRY( ( &xPendingReadyList ) ); /*lint !e9079 void * is used as this macro is used with timers and co-routines too. Alignment is known to be fine as the type of the pointer stored and retrieved is the same. */ + 800ad38: 68eb ldr r3, [r5, #12] + 800ad3a: 68dc ldr r4, [r3, #12] + ( void ) uxListRemove( &( pxTCB->xEventListItem ) ); + 800ad3c: f104 0018 add.w r0, r4, #24 + 800ad40: f7fe fdef bl 8009922 + ( void ) uxListRemove( &( pxTCB->xStateListItem ) ); + 800ad44: 1d21 adds r1, r4, #4 + 800ad46: 4608 mov r0, r1 + 800ad48: 9101 str r1, [sp, #4] + 800ad4a: f7fe fdea bl 8009922 + prvAddTaskToReadyList( pxTCB ); + 800ad4e: 6ae3 ldr r3, [r4, #44] ; 0x2c + 800ad50: 6832 ldr r2, [r6, #0] + 800ad52: 9901 ldr r1, [sp, #4] + 800ad54: 4293 cmp r3, r2 + 800ad56: d900 bls.n 800ad5a + 800ad58: 6033 str r3, [r6, #0] + 800ad5a: 2014 movs r0, #20 + 800ad5c: fb00 7003 mla r0, r0, r3, r7 + 800ad60: f7fe fdbc bl 80098dc + if( pxTCB->uxPriority >= pxCurrentTCB->uxPriority ) + 800ad64: 4b1a ldr r3, [pc, #104] ; (800add0 ) + 800ad66: 6ae2 ldr r2, [r4, #44] ; 0x2c + 800ad68: 681b ldr r3, [r3, #0] + 800ad6a: 6adb ldr r3, [r3, #44] ; 0x2c + 800ad6c: 429a cmp r2, r3 + 800ad6e: d302 bcc.n 800ad76 + xYieldPending = pdTRUE; + 800ad70: 4b18 ldr r3, [pc, #96] ; (800add4 ) + 800ad72: 2201 movs r2, #1 + 800ad74: 601a str r2, [r3, #0] + while( listLIST_IS_EMPTY( &xPendingReadyList ) == pdFALSE ) + 800ad76: 682b ldr r3, [r5, #0] + 800ad78: 2b00 cmp r3, #0 + 800ad7a: d1dd bne.n 800ad38 + if( pxTCB != NULL ) + 800ad7c: b10c cbz r4, 800ad82 + prvResetNextTaskUnblockTime(); + 800ad7e: f7ff fded bl 800a95c + UBaseType_t uxPendedCounts = uxPendedTicks; /* Non-volatile copy. */ + 800ad82: 4d15 ldr r5, [pc, #84] ; (800add8 ) + 800ad84: 682c ldr r4, [r5, #0] + if( uxPendedCounts > ( UBaseType_t ) 0U ) + 800ad86: b144 cbz r4, 800ad9a + xYieldPending = pdTRUE; + 800ad88: 4e12 ldr r6, [pc, #72] ; (800add4 ) + 800ad8a: 2701 movs r7, #1 + if( xTaskIncrementTick() != pdFALSE ) + 800ad8c: f7ff ff18 bl 800abc0 + 800ad90: b100 cbz r0, 800ad94 + xYieldPending = pdTRUE; + 800ad92: 6037 str r7, [r6, #0] + } while( uxPendedCounts > ( UBaseType_t ) 0U ); + 800ad94: 3c01 subs r4, #1 + 800ad96: d1f9 bne.n 800ad8c + uxPendedTicks = 0; + 800ad98: 602c str r4, [r5, #0] + if( xYieldPending != pdFALSE ) + 800ad9a: 4b0e ldr r3, [pc, #56] ; (800add4 ) + 800ad9c: 681b ldr r3, [r3, #0] + 800ad9e: 2b00 cmp r3, #0 + 800ada0: d0bc beq.n 800ad1c + taskYIELD_IF_USING_PREEMPTION(); + 800ada2: f04f 23e0 mov.w r3, #3758153728 ; 0xe000e000 + 800ada6: f04f 5280 mov.w r2, #268435456 ; 0x10000000 + 800adaa: f8c3 2d04 str.w r2, [r3, #3332] ; 0xd04 + 800adae: f3bf 8f4f dsb sy + 800adb2: f3bf 8f6f isb sy + xAlreadyYielded = pdTRUE; + 800adb6: 2401 movs r4, #1 + 800adb8: e7b1 b.n 800ad1e + 800adba: bf00 nop + 800adbc: 2001ac5c .word 0x2001ac5c + 800adc0: 2001ac50 .word 0x2001ac50 + 800adc4: 2001ac98 .word 0x2001ac98 + 800adc8: 2001ac64 .word 0x2001ac64 + 800adcc: 2001a7f0 .word 0x2001a7f0 + 800add0: 2001a7e4 .word 0x2001a7e4 + 800add4: 2001acdc .word 0x2001acdc + 800add8: 2001ac58 .word 0x2001ac58 + +0800addc : + { + 800addc: b508 push {r3, lr} + if( xTicksToDelay > ( TickType_t ) 0U ) + 800adde: b950 cbnz r0, 800adf6 + portYIELD_WITHIN_API(); + 800ade0: f04f 23e0 mov.w r3, #3758153728 ; 0xe000e000 + 800ade4: f04f 5280 mov.w r2, #268435456 ; 0x10000000 + 800ade8: f8c3 2d04 str.w r2, [r3, #3332] ; 0xd04 + 800adec: f3bf 8f4f dsb sy + 800adf0: f3bf 8f6f isb sy + } + 800adf4: bd08 pop {r3, pc} + configASSERT( uxSchedulerSuspended == 0 ); + 800adf6: 4b0b ldr r3, [pc, #44] ; (800ae24 ) + 800adf8: 6819 ldr r1, [r3, #0] + 800adfa: b151 cbz r1, 800ae12 + 800adfc: f04f 0350 mov.w r3, #80 ; 0x50 + 800ae00: b672 cpsid i + 800ae02: f383 8811 msr BASEPRI, r3 + 800ae06: f3bf 8f6f isb sy + 800ae0a: f3bf 8f4f dsb sy + 800ae0e: b662 cpsie i + 800ae10: e7fe b.n 800ae10 + vTaskSuspendAll(); + 800ae12: f7ff febf bl 800ab94 + prvAddCurrentTaskToDelayedList( xTicksToDelay, pdFALSE ); + 800ae16: f7ff fd69 bl 800a8ec + xAlreadyYielded = xTaskResumeAll(); + 800ae1a: f7ff ff69 bl 800acf0 + if( xAlreadyYielded == pdFALSE ) + 800ae1e: 2800 cmp r0, #0 + 800ae20: d0de beq.n 800ade0 + 800ae22: e7e7 b.n 800adf4 + 800ae24: 2001ac5c .word 0x2001ac5c + +0800ae28 : + { + 800ae28: b538 push {r3, r4, r5, lr} + 800ae2a: 460d mov r5, r1 + if( xTask == NULL ) + 800ae2c: 4604 mov r4, r0 + 800ae2e: b908 cbnz r0, 800ae34 + xTCB = ( TCB_t * ) pxCurrentTCB; + 800ae30: 4b04 ldr r3, [pc, #16] ; (800ae44 ) + 800ae32: 681c ldr r4, [r3, #0] + taskENTER_CRITICAL(); + 800ae34: f7fe fdee bl 8009a14 + xTCB->pxTaskTag = pxHookFunction; + 800ae38: 6565 str r5, [r4, #84] ; 0x54 + } + 800ae3a: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} + taskEXIT_CRITICAL(); + 800ae3e: f7fe be0d b.w 8009a5c + 800ae42: bf00 nop + 800ae44: 2001a7e4 .word 0x2001a7e4 + +0800ae48 : + { + 800ae48: 4603 mov r3, r0 + 800ae4a: 4608 mov r0, r1 + if( xTask == NULL ) + 800ae4c: b90b cbnz r3, 800ae52 + xTCB = pxCurrentTCB; + 800ae4e: 4b03 ldr r3, [pc, #12] ; (800ae5c ) + 800ae50: 681b ldr r3, [r3, #0] + if( xTCB->pxTaskTag != NULL ) + 800ae52: 6d5b ldr r3, [r3, #84] ; 0x54 + 800ae54: b103 cbz r3, 800ae58 + xReturn = xTCB->pxTaskTag( pvParameter ); + 800ae56: 4718 bx r3 + } + 800ae58: 4618 mov r0, r3 + 800ae5a: 4770 bx lr + 800ae5c: 2001a7e4 .word 0x2001a7e4 + +0800ae60 : +{ + 800ae60: b510 push {r4, lr} + 800ae62: b088 sub sp, #32 + StaticTask_t *pxIdleTaskTCBBuffer = NULL; + 800ae64: 2400 movs r4, #0 + vApplicationGetIdleTaskMemory( &pxIdleTaskTCBBuffer, &pxIdleTaskStackBuffer, &ulIdleTaskStackSize ); + 800ae66: aa07 add r2, sp, #28 + 800ae68: a906 add r1, sp, #24 + 800ae6a: a805 add r0, sp, #20 + StackType_t *pxIdleTaskStackBuffer = NULL; + 800ae6c: e9cd 4405 strd r4, r4, [sp, #20] + vApplicationGetIdleTaskMemory( &pxIdleTaskTCBBuffer, &pxIdleTaskStackBuffer, &ulIdleTaskStackSize ); + 800ae70: f7fe fc16 bl 80096a0 + xIdleTaskHandle = xTaskCreateStatic( prvIdleTask, + 800ae74: 9b05 ldr r3, [sp, #20] + 800ae76: 9a07 ldr r2, [sp, #28] + 800ae78: 9302 str r3, [sp, #8] + 800ae7a: 9b06 ldr r3, [sp, #24] + 800ae7c: 491b ldr r1, [pc, #108] ; (800aeec ) + 800ae7e: 481c ldr r0, [pc, #112] ; (800aef0 ) + 800ae80: e9cd 4300 strd r4, r3, [sp] + 800ae84: 4623 mov r3, r4 + 800ae86: f7ff fe1a bl 800aabe + if( xIdleTaskHandle != NULL ) + 800ae8a: b360 cbz r0, 800aee6 + xReturn = xTimerCreateTimerTask(); + 800ae8c: f000 faa6 bl 800b3dc + if( xReturn == pdPASS ) + 800ae90: 2801 cmp r0, #1 + 800ae92: d11b bne.n 800aecc + 800ae94: f04f 0350 mov.w r3, #80 ; 0x50 + 800ae98: b672 cpsid i + 800ae9a: f383 8811 msr BASEPRI, r3 + 800ae9e: f3bf 8f6f isb sy + 800aea2: f3bf 8f4f dsb sy + 800aea6: b662 cpsie i + xNextTaskUnblockTime = portMAX_DELAY; + 800aea8: f04f 32ff mov.w r2, #4294967295 + 800aeac: 4b11 ldr r3, [pc, #68] ; (800aef4 ) + traceTASK_SWITCHED_IN(); + 800aeae: 4621 mov r1, r4 + xNextTaskUnblockTime = portMAX_DELAY; + 800aeb0: 601a str r2, [r3, #0] + xSchedulerRunning = pdTRUE; + 800aeb2: 4b11 ldr r3, [pc, #68] ; (800aef8 ) + 800aeb4: 6018 str r0, [r3, #0] + xTickCount = ( TickType_t ) configINITIAL_TICK_COUNT; + 800aeb6: 4b11 ldr r3, [pc, #68] ; (800aefc ) + 800aeb8: 601c str r4, [r3, #0] + traceTASK_SWITCHED_IN(); + 800aeba: 4b11 ldr r3, [pc, #68] ; (800af00 ) + 800aebc: 6818 ldr r0, [r3, #0] + 800aebe: f7ff ffc3 bl 800ae48 +} + 800aec2: b008 add sp, #32 + 800aec4: e8bd 4010 ldmia.w sp!, {r4, lr} + if( xPortStartScheduler() != pdFALSE ) + 800aec8: f7fe be3e b.w 8009b48 + configASSERT( xReturn != errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY ); + 800aecc: 3001 adds r0, #1 + 800aece: d10a bne.n 800aee6 + 800aed0: f04f 0350 mov.w r3, #80 ; 0x50 + 800aed4: b672 cpsid i + 800aed6: f383 8811 msr BASEPRI, r3 + 800aeda: f3bf 8f6f isb sy + 800aede: f3bf 8f4f dsb sy + 800aee2: b662 cpsie i + 800aee4: e7fe b.n 800aee4 +} + 800aee6: b008 add sp, #32 + 800aee8: bd10 pop {r4, pc} + 800aeea: bf00 nop + 800aeec: 08037cdb .word 0x08037cdb + 800aef0: 0800a9bd .word 0x0800a9bd + 800aef4: 2001ac90 .word 0x2001ac90 + 800aef8: 2001acac .word 0x2001acac + 800aefc: 2001acd8 .word 0x2001acd8 + 800af00: 2001a7e4 .word 0x2001a7e4 + +0800af04 : +{ + 800af04: b5f8 push {r3, r4, r5, r6, r7, lr} + if( uxSchedulerSuspended != ( UBaseType_t ) pdFALSE ) + 800af06: 4b1d ldr r3, [pc, #116] ; (800af7c ) + 800af08: 681a ldr r2, [r3, #0] + 800af0a: 4b1d ldr r3, [pc, #116] ; (800af80 ) + 800af0c: b112 cbz r2, 800af14 + xYieldPending = pdTRUE; + 800af0e: 2201 movs r2, #1 + 800af10: 601a str r2, [r3, #0] +} + 800af12: bdf8 pop {r3, r4, r5, r6, r7, pc} + traceTASK_SWITCHED_OUT(); + 800af14: 4c1b ldr r4, [pc, #108] ; (800af84 ) + 800af16: 2101 movs r1, #1 + taskSELECT_HIGHEST_PRIORITY_TASK(); /*lint !e9079 void * is used as this macro is used with timers and co-routines too. Alignment is known to be fine as the type of the pointer stored and retrieved is the same. */ + 800af18: 4e1b ldr r6, [pc, #108] ; (800af88 ) + 800af1a: 2714 movs r7, #20 + xYieldPending = pdFALSE; + 800af1c: 601a str r2, [r3, #0] + traceTASK_SWITCHED_OUT(); + 800af1e: 6820 ldr r0, [r4, #0] + 800af20: f7ff ff92 bl 800ae48 + taskSELECT_HIGHEST_PRIORITY_TASK(); /*lint !e9079 void * is used as this macro is used with timers and co-routines too. Alignment is known to be fine as the type of the pointer stored and retrieved is the same. */ + 800af24: 6832 ldr r2, [r6, #0] + 800af26: 4919 ldr r1, [pc, #100] ; (800af8c ) + 800af28: fb07 f302 mul.w r3, r7, r2 + 800af2c: 58cd ldr r5, [r1, r3] + 800af2e: 18c8 adds r0, r1, r3 + 800af30: b1ad cbz r5, 800af5e + 800af32: 6845 ldr r5, [r0, #4] + 800af34: 3308 adds r3, #8 + 800af36: 686d ldr r5, [r5, #4] + 800af38: 440b add r3, r1 + 800af3a: 429d cmp r5, r3 + 800af3c: 6045 str r5, [r0, #4] + 800af3e: bf04 itt eq + 800af40: 686b ldreq r3, [r5, #4] + 800af42: 6043 streq r3, [r0, #4] + 800af44: 2314 movs r3, #20 + 800af46: fb03 1102 mla r1, r3, r2, r1 + 800af4a: 684b ldr r3, [r1, #4] + traceTASK_SWITCHED_IN(); + 800af4c: 2100 movs r1, #0 + taskSELECT_HIGHEST_PRIORITY_TASK(); /*lint !e9079 void * is used as this macro is used with timers and co-routines too. Alignment is known to be fine as the type of the pointer stored and retrieved is the same. */ + 800af4e: 68db ldr r3, [r3, #12] + 800af50: 6023 str r3, [r4, #0] + 800af52: 6032 str r2, [r6, #0] + traceTASK_SWITCHED_IN(); + 800af54: 6820 ldr r0, [r4, #0] +} + 800af56: e8bd 40f8 ldmia.w sp!, {r3, r4, r5, r6, r7, lr} + traceTASK_SWITCHED_IN(); + 800af5a: f7ff bf75 b.w 800ae48 + taskSELECT_HIGHEST_PRIORITY_TASK(); /*lint !e9079 void * is used as this macro is used with timers and co-routines too. Alignment is known to be fine as the type of the pointer stored and retrieved is the same. */ + 800af5e: b952 cbnz r2, 800af76 + 800af60: f04f 0350 mov.w r3, #80 ; 0x50 + 800af64: b672 cpsid i + 800af66: f383 8811 msr BASEPRI, r3 + 800af6a: f3bf 8f6f isb sy + 800af6e: f3bf 8f4f dsb sy + 800af72: b662 cpsie i + 800af74: e7fe b.n 800af74 + 800af76: 3a01 subs r2, #1 + 800af78: e7d6 b.n 800af28 + 800af7a: bf00 nop + 800af7c: 2001ac5c .word 0x2001ac5c + 800af80: 2001acdc .word 0x2001acdc + 800af84: 2001a7e4 .word 0x2001a7e4 + 800af88: 2001ac64 .word 0x2001ac64 + 800af8c: 2001a7f0 .word 0x2001a7f0 + +0800af90 : +{ + 800af90: b510 push {r4, lr} + 800af92: 460c mov r4, r1 + configASSERT( pxEventList ); + 800af94: b950 cbnz r0, 800afac + 800af96: f04f 0350 mov.w r3, #80 ; 0x50 + 800af9a: b672 cpsid i + 800af9c: f383 8811 msr BASEPRI, r3 + 800afa0: f3bf 8f6f isb sy + 800afa4: f3bf 8f4f dsb sy + 800afa8: b662 cpsie i + 800afaa: e7fe b.n 800afaa + vListInsert( pxEventList, &( pxCurrentTCB->xEventListItem ) ); + 800afac: 4b05 ldr r3, [pc, #20] ; (800afc4 ) + 800afae: 6819 ldr r1, [r3, #0] + 800afb0: 3118 adds r1, #24 + 800afb2: f7fe fc9f bl 80098f4 + prvAddCurrentTaskToDelayedList( xTicksToWait, pdTRUE ); + 800afb6: 4620 mov r0, r4 + 800afb8: 2101 movs r1, #1 +} + 800afba: e8bd 4010 ldmia.w sp!, {r4, lr} + prvAddCurrentTaskToDelayedList( xTicksToWait, pdTRUE ); + 800afbe: f7ff bc95 b.w 800a8ec + 800afc2: bf00 nop + 800afc4: 2001a7e4 .word 0x2001a7e4 + +0800afc8 : + { + 800afc8: b538 push {r3, r4, r5, lr} + 800afca: 460d mov r5, r1 + 800afcc: 4614 mov r4, r2 + configASSERT( pxEventList ); + 800afce: b950 cbnz r0, 800afe6 + 800afd0: f04f 0350 mov.w r3, #80 ; 0x50 + 800afd4: b672 cpsid i + 800afd6: f383 8811 msr BASEPRI, r3 + 800afda: f3bf 8f6f isb sy + 800afde: f3bf 8f4f dsb sy + 800afe2: b662 cpsie i + 800afe4: e7fe b.n 800afe4 + vListInsertEnd( pxEventList, &( pxCurrentTCB->xEventListItem ) ); + 800afe6: 4b07 ldr r3, [pc, #28] ; (800b004 ) + 800afe8: 6819 ldr r1, [r3, #0] + 800afea: 3118 adds r1, #24 + 800afec: f7fe fc76 bl 80098dc + xTicksToWait = portMAX_DELAY; + 800aff0: 2c00 cmp r4, #0 + prvAddCurrentTaskToDelayedList( xTicksToWait, xWaitIndefinitely ); + 800aff2: 4621 mov r1, r4 + 800aff4: bf0c ite eq + 800aff6: 4628 moveq r0, r5 + 800aff8: f04f 30ff movne.w r0, #4294967295 + } + 800affc: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} + prvAddCurrentTaskToDelayedList( xTicksToWait, xWaitIndefinitely ); + 800b000: f7ff bc74 b.w 800a8ec + 800b004: 2001a7e4 .word 0x2001a7e4 + +0800b008 : + pxUnblockedTCB = listGET_OWNER_OF_HEAD_ENTRY( pxEventList ); /*lint !e9079 void * is used as this macro is used with timers and co-routines too. Alignment is known to be fine as the type of the pointer stored and retrieved is the same. */ + 800b008: 68c3 ldr r3, [r0, #12] +{ + 800b00a: b513 push {r0, r1, r4, lr} + pxUnblockedTCB = listGET_OWNER_OF_HEAD_ENTRY( pxEventList ); /*lint !e9079 void * is used as this macro is used with timers and co-routines too. Alignment is known to be fine as the type of the pointer stored and retrieved is the same. */ + 800b00c: 68dc ldr r4, [r3, #12] + configASSERT( pxUnblockedTCB ); + 800b00e: b954 cbnz r4, 800b026 + 800b010: f04f 0350 mov.w r3, #80 ; 0x50 + 800b014: b672 cpsid i + 800b016: f383 8811 msr BASEPRI, r3 + 800b01a: f3bf 8f6f isb sy + 800b01e: f3bf 8f4f dsb sy + 800b022: b662 cpsie i + 800b024: e7fe b.n 800b024 + ( void ) uxListRemove( &( pxUnblockedTCB->xEventListItem ) ); + 800b026: f104 0118 add.w r1, r4, #24 + 800b02a: 4608 mov r0, r1 + 800b02c: 9101 str r1, [sp, #4] + 800b02e: f7fe fc78 bl 8009922 + if( uxSchedulerSuspended == ( UBaseType_t ) pdFALSE ) + 800b032: 4b12 ldr r3, [pc, #72] ; (800b07c ) + 800b034: 9901 ldr r1, [sp, #4] + 800b036: 681b ldr r3, [r3, #0] + 800b038: b9e3 cbnz r3, 800b074 + ( void ) uxListRemove( &( pxUnblockedTCB->xStateListItem ) ); + 800b03a: 1d21 adds r1, r4, #4 + 800b03c: 4608 mov r0, r1 + 800b03e: 9101 str r1, [sp, #4] + 800b040: f7fe fc6f bl 8009922 + prvAddTaskToReadyList( pxUnblockedTCB ); + 800b044: 4a0e ldr r2, [pc, #56] ; (800b080 ) + 800b046: 6ae3 ldr r3, [r4, #44] ; 0x2c + 800b048: 6810 ldr r0, [r2, #0] + 800b04a: 9901 ldr r1, [sp, #4] + 800b04c: 4283 cmp r3, r0 + 800b04e: d900 bls.n 800b052 + 800b050: 6013 str r3, [r2, #0] + 800b052: 4a0c ldr r2, [pc, #48] ; (800b084 ) + 800b054: 2014 movs r0, #20 + 800b056: fb00 2003 mla r0, r0, r3, r2 + vListInsertEnd( &( xPendingReadyList ), &( pxUnblockedTCB->xEventListItem ) ); + 800b05a: f7fe fc3f bl 80098dc + if( pxUnblockedTCB->uxPriority > pxCurrentTCB->uxPriority ) + 800b05e: 4b0a ldr r3, [pc, #40] ; (800b088 ) + 800b060: 6ae2 ldr r2, [r4, #44] ; 0x2c + 800b062: 681b ldr r3, [r3, #0] + 800b064: 6adb ldr r3, [r3, #44] ; 0x2c + 800b066: 429a cmp r2, r3 + 800b068: d906 bls.n 800b078 + xYieldPending = pdTRUE; + 800b06a: 2001 movs r0, #1 + 800b06c: 4b07 ldr r3, [pc, #28] ; (800b08c ) + 800b06e: 6018 str r0, [r3, #0] +} + 800b070: b002 add sp, #8 + 800b072: bd10 pop {r4, pc} + vListInsertEnd( &( xPendingReadyList ), &( pxUnblockedTCB->xEventListItem ) ); + 800b074: 4806 ldr r0, [pc, #24] ; (800b090 ) + 800b076: e7f0 b.n 800b05a + xReturn = pdFALSE; + 800b078: 2000 movs r0, #0 + return xReturn; + 800b07a: e7f9 b.n 800b070 + 800b07c: 2001ac5c .word 0x2001ac5c + 800b080: 2001ac64 .word 0x2001ac64 + 800b084: 2001a7f0 .word 0x2001a7f0 + 800b088: 2001a7e4 .word 0x2001a7e4 + 800b08c: 2001acdc .word 0x2001acdc + 800b090: 2001ac98 .word 0x2001ac98 + +0800b094 : + pxTimeOut->xOverflowCount = xNumOfOverflows; + 800b094: 4b03 ldr r3, [pc, #12] ; (800b0a4 ) + 800b096: 681b ldr r3, [r3, #0] + 800b098: 6003 str r3, [r0, #0] + pxTimeOut->xTimeOnEntering = xTickCount; + 800b09a: 4b03 ldr r3, [pc, #12] ; (800b0a8 ) + 800b09c: 681b ldr r3, [r3, #0] + 800b09e: 6043 str r3, [r0, #4] +} + 800b0a0: 4770 bx lr + 800b0a2: bf00 nop + 800b0a4: 2001ac94 .word 0x2001ac94 + 800b0a8: 2001acd8 .word 0x2001acd8 + +0800b0ac : +{ + 800b0ac: b570 push {r4, r5, r6, lr} + 800b0ae: 460c mov r4, r1 + configASSERT( pxTimeOut ); + 800b0b0: 4605 mov r5, r0 + 800b0b2: b950 cbnz r0, 800b0ca + 800b0b4: f04f 0350 mov.w r3, #80 ; 0x50 + 800b0b8: b672 cpsid i + 800b0ba: f383 8811 msr BASEPRI, r3 + 800b0be: f3bf 8f6f isb sy + 800b0c2: f3bf 8f4f dsb sy + 800b0c6: b662 cpsie i + 800b0c8: e7fe b.n 800b0c8 + configASSERT( pxTicksToWait ); + 800b0ca: b951 cbnz r1, 800b0e2 + 800b0cc: f04f 0350 mov.w r3, #80 ; 0x50 + 800b0d0: b672 cpsid i + 800b0d2: f383 8811 msr BASEPRI, r3 + 800b0d6: f3bf 8f6f isb sy + 800b0da: f3bf 8f4f dsb sy + 800b0de: b662 cpsie i + 800b0e0: e7fe b.n 800b0e0 + taskENTER_CRITICAL(); + 800b0e2: f7fe fc97 bl 8009a14 + const TickType_t xConstTickCount = xTickCount; + 800b0e6: 4b0f ldr r3, [pc, #60] ; (800b124 ) + 800b0e8: 6819 ldr r1, [r3, #0] + if( *pxTicksToWait == portMAX_DELAY ) + 800b0ea: 6823 ldr r3, [r4, #0] + 800b0ec: 1c5a adds r2, r3, #1 + 800b0ee: d010 beq.n 800b112 + if( ( xNumOfOverflows != pxTimeOut->xOverflowCount ) && ( xConstTickCount >= pxTimeOut->xTimeOnEntering ) ) /*lint !e525 Indentation preferred as is to make code within pre-processor directives clearer. */ + 800b0f0: 480d ldr r0, [pc, #52] ; (800b128 ) + 800b0f2: 682e ldr r6, [r5, #0] + 800b0f4: 6800 ldr r0, [r0, #0] + const TickType_t xElapsedTime = xConstTickCount - pxTimeOut->xTimeOnEntering; + 800b0f6: 686a ldr r2, [r5, #4] + if( ( xNumOfOverflows != pxTimeOut->xOverflowCount ) && ( xConstTickCount >= pxTimeOut->xTimeOnEntering ) ) /*lint !e525 Indentation preferred as is to make code within pre-processor directives clearer. */ + 800b0f8: 4286 cmp r6, r0 + 800b0fa: d001 beq.n 800b100 + 800b0fc: 428a cmp r2, r1 + 800b0fe: d90f bls.n 800b120 + const TickType_t xElapsedTime = xConstTickCount - pxTimeOut->xTimeOnEntering; + 800b100: 1a88 subs r0, r1, r2 + else if( xElapsedTime < *pxTicksToWait ) /*lint !e961 Explicit casting is only redundant with some compilers, whereas others require it to prevent integer conversion errors. */ + 800b102: 4283 cmp r3, r0 + 800b104: d90a bls.n 800b11c + *pxTicksToWait -= xElapsedTime; + 800b106: 1a5b subs r3, r3, r1 + vTaskInternalSetTimeOutState( pxTimeOut ); + 800b108: 4628 mov r0, r5 + *pxTicksToWait -= xElapsedTime; + 800b10a: 4413 add r3, r2 + 800b10c: 6023 str r3, [r4, #0] + vTaskInternalSetTimeOutState( pxTimeOut ); + 800b10e: f7ff ffc1 bl 800b094 + xReturn = pdFALSE; + 800b112: 2400 movs r4, #0 + taskEXIT_CRITICAL(); + 800b114: f7fe fca2 bl 8009a5c +} + 800b118: 4620 mov r0, r4 + 800b11a: bd70 pop {r4, r5, r6, pc} + *pxTicksToWait = 0; + 800b11c: 2300 movs r3, #0 + 800b11e: 6023 str r3, [r4, #0] + xReturn = pdTRUE; + 800b120: 2401 movs r4, #1 + 800b122: e7f7 b.n 800b114 + 800b124: 2001acd8 .word 0x2001acd8 + 800b128: 2001ac94 .word 0x2001ac94 + +0800b12c : + xYieldPending = pdTRUE; + 800b12c: 4b01 ldr r3, [pc, #4] ; (800b134 ) + 800b12e: 2201 movs r2, #1 + 800b130: 601a str r2, [r3, #0] +} + 800b132: 4770 bx lr + 800b134: 2001acdc .word 0x2001acdc + +0800b138 : + xReturn = pxCurrentTCB; + 800b138: 4b01 ldr r3, [pc, #4] ; (800b140 ) + 800b13a: 6818 ldr r0, [r3, #0] + } + 800b13c: 4770 bx lr + 800b13e: bf00 nop + 800b140: 2001a7e4 .word 0x2001a7e4 + +0800b144 : + if( xSchedulerRunning == pdFALSE ) + 800b144: 4b05 ldr r3, [pc, #20] ; (800b15c ) + 800b146: 681b ldr r3, [r3, #0] + 800b148: b133 cbz r3, 800b158 + if( uxSchedulerSuspended == ( UBaseType_t ) pdFALSE ) + 800b14a: 4b05 ldr r3, [pc, #20] ; (800b160 ) + 800b14c: 6818 ldr r0, [r3, #0] + 800b14e: fab0 f080 clz r0, r0 + 800b152: 0940 lsrs r0, r0, #5 + 800b154: 0040 lsls r0, r0, #1 + 800b156: 4770 bx lr + xReturn = taskSCHEDULER_NOT_STARTED; + 800b158: 2001 movs r0, #1 + } + 800b15a: 4770 bx lr + 800b15c: 2001acac .word 0x2001acac + 800b160: 2001ac5c .word 0x2001ac5c + +0800b164 : + { + 800b164: b573 push {r0, r1, r4, r5, r6, lr} + if( pxMutexHolder != NULL ) + 800b166: 4604 mov r4, r0 + 800b168: b340 cbz r0, 800b1bc + if( pxMutexHolderTCB->uxPriority < pxCurrentTCB->uxPriority ) + 800b16a: 4d1b ldr r5, [pc, #108] ; (800b1d8 ) + 800b16c: 6ac3 ldr r3, [r0, #44] ; 0x2c + 800b16e: 682a ldr r2, [r5, #0] + 800b170: 6ad2 ldr r2, [r2, #44] ; 0x2c + 800b172: 4293 cmp r3, r2 + 800b174: d228 bcs.n 800b1c8 + if( ( listGET_LIST_ITEM_VALUE( &( pxMutexHolderTCB->xEventListItem ) ) & taskEVENT_LIST_ITEM_VALUE_IN_USE ) == 0UL ) + 800b176: 6982 ldr r2, [r0, #24] + 800b178: 2a00 cmp r2, #0 + 800b17a: db04 blt.n 800b186 + listSET_LIST_ITEM_VALUE( &( pxMutexHolderTCB->xEventListItem ), ( TickType_t ) configMAX_PRIORITIES - ( TickType_t ) pxCurrentTCB->uxPriority ); /*lint !e961 MISRA exception as the casts are only redundant for some ports. */ + 800b17c: 682a ldr r2, [r5, #0] + 800b17e: 6ad2 ldr r2, [r2, #44] ; 0x2c + 800b180: f1c2 0238 rsb r2, r2, #56 ; 0x38 + 800b184: 6182 str r2, [r0, #24] + if( listIS_CONTAINED_WITHIN( &( pxReadyTasksLists[ pxMutexHolderTCB->uxPriority ] ), &( pxMutexHolderTCB->xStateListItem ) ) != pdFALSE ) + 800b186: 2214 movs r2, #20 + 800b188: 4e14 ldr r6, [pc, #80] ; (800b1dc ) + 800b18a: fb02 6303 mla r3, r2, r3, r6 + 800b18e: 6962 ldr r2, [r4, #20] + 800b190: 429a cmp r2, r3 + 800b192: d115 bne.n 800b1c0 + if( uxListRemove( &( pxMutexHolderTCB->xStateListItem ) ) == ( UBaseType_t ) 0 ) + 800b194: 1d21 adds r1, r4, #4 + 800b196: 4608 mov r0, r1 + 800b198: 9101 str r1, [sp, #4] + 800b19a: f7fe fbc2 bl 8009922 + pxMutexHolderTCB->uxPriority = pxCurrentTCB->uxPriority; + 800b19e: 682b ldr r3, [r5, #0] + prvAddTaskToReadyList( pxMutexHolderTCB ); + 800b1a0: 4a0f ldr r2, [pc, #60] ; (800b1e0 ) + pxMutexHolderTCB->uxPriority = pxCurrentTCB->uxPriority; + 800b1a2: 6adb ldr r3, [r3, #44] ; 0x2c + prvAddTaskToReadyList( pxMutexHolderTCB ); + 800b1a4: 6810 ldr r0, [r2, #0] + 800b1a6: 9901 ldr r1, [sp, #4] + 800b1a8: 4283 cmp r3, r0 + pxMutexHolderTCB->uxPriority = pxCurrentTCB->uxPriority; + 800b1aa: 62e3 str r3, [r4, #44] ; 0x2c + prvAddTaskToReadyList( pxMutexHolderTCB ); + 800b1ac: d900 bls.n 800b1b0 + 800b1ae: 6013 str r3, [r2, #0] + 800b1b0: 2014 movs r0, #20 + 800b1b2: fb00 6003 mla r0, r0, r3, r6 + 800b1b6: f7fe fb91 bl 80098dc + xReturn = pdTRUE; + 800b1ba: 2001 movs r0, #1 + } + 800b1bc: b002 add sp, #8 + 800b1be: bd70 pop {r4, r5, r6, pc} + pxMutexHolderTCB->uxPriority = pxCurrentTCB->uxPriority; + 800b1c0: 682b ldr r3, [r5, #0] + 800b1c2: 6adb ldr r3, [r3, #44] ; 0x2c + 800b1c4: 62e3 str r3, [r4, #44] ; 0x2c + 800b1c6: e7f8 b.n 800b1ba + if( pxMutexHolderTCB->uxBasePriority < pxCurrentTCB->uxPriority ) + 800b1c8: 682b ldr r3, [r5, #0] + 800b1ca: 6cc0 ldr r0, [r0, #76] ; 0x4c + 800b1cc: 6adb ldr r3, [r3, #44] ; 0x2c + 800b1ce: 4298 cmp r0, r3 + 800b1d0: bf2c ite cs + 800b1d2: 2000 movcs r0, #0 + 800b1d4: 2001 movcc r0, #1 + 800b1d6: e7f1 b.n 800b1bc + 800b1d8: 2001a7e4 .word 0x2001a7e4 + 800b1dc: 2001a7f0 .word 0x2001a7f0 + 800b1e0: 2001ac64 .word 0x2001ac64 + +0800b1e4 : + { + 800b1e4: b513 push {r0, r1, r4, lr} + if( pxMutexHolder != NULL ) + 800b1e6: b910 cbnz r0, 800b1ee + BaseType_t xReturn = pdFALSE; + 800b1e8: 2000 movs r0, #0 + } + 800b1ea: b002 add sp, #8 + 800b1ec: bd10 pop {r4, pc} + configASSERT( pxTCB == pxCurrentTCB ); + 800b1ee: 4b1e ldr r3, [pc, #120] ; (800b268 ) + 800b1f0: 681c ldr r4, [r3, #0] + 800b1f2: 4284 cmp r4, r0 + 800b1f4: d00a beq.n 800b20c + 800b1f6: f04f 0350 mov.w r3, #80 ; 0x50 + 800b1fa: b672 cpsid i + 800b1fc: f383 8811 msr BASEPRI, r3 + 800b200: f3bf 8f6f isb sy + 800b204: f3bf 8f4f dsb sy + 800b208: b662 cpsie i + 800b20a: e7fe b.n 800b20a + configASSERT( pxTCB->uxMutexesHeld ); + 800b20c: 6d23 ldr r3, [r4, #80] ; 0x50 + 800b20e: b953 cbnz r3, 800b226 + 800b210: f04f 0350 mov.w r3, #80 ; 0x50 + 800b214: b672 cpsid i + 800b216: f383 8811 msr BASEPRI, r3 + 800b21a: f3bf 8f6f isb sy + 800b21e: f3bf 8f4f dsb sy + 800b222: b662 cpsie i + 800b224: e7fe b.n 800b224 + if( pxTCB->uxPriority != pxTCB->uxBasePriority ) + 800b226: 6ae1 ldr r1, [r4, #44] ; 0x2c + ( pxTCB->uxMutexesHeld )--; + 800b228: 3b01 subs r3, #1 + if( pxTCB->uxPriority != pxTCB->uxBasePriority ) + 800b22a: 6ce2 ldr r2, [r4, #76] ; 0x4c + ( pxTCB->uxMutexesHeld )--; + 800b22c: 6523 str r3, [r4, #80] ; 0x50 + if( pxTCB->uxPriority != pxTCB->uxBasePriority ) + 800b22e: 4291 cmp r1, r2 + 800b230: d0da beq.n 800b1e8 + if( pxTCB->uxMutexesHeld == ( UBaseType_t ) 0 ) + 800b232: 2b00 cmp r3, #0 + 800b234: d1d8 bne.n 800b1e8 + if( uxListRemove( &( pxTCB->xStateListItem ) ) == ( UBaseType_t ) 0 ) + 800b236: 1d21 adds r1, r4, #4 + 800b238: 4608 mov r0, r1 + 800b23a: 9101 str r1, [sp, #4] + 800b23c: f7fe fb71 bl 8009922 + pxTCB->uxPriority = pxTCB->uxBasePriority; + 800b240: 6ce3 ldr r3, [r4, #76] ; 0x4c + prvAddTaskToReadyList( pxTCB ); + 800b242: 9901 ldr r1, [sp, #4] + listSET_LIST_ITEM_VALUE( &( pxTCB->xEventListItem ), ( TickType_t ) configMAX_PRIORITIES - ( TickType_t ) pxTCB->uxPriority ); /*lint !e961 MISRA exception as the casts are only redundant for some ports. */ + 800b244: f1c3 0238 rsb r2, r3, #56 ; 0x38 + pxTCB->uxPriority = pxTCB->uxBasePriority; + 800b248: 62e3 str r3, [r4, #44] ; 0x2c + listSET_LIST_ITEM_VALUE( &( pxTCB->xEventListItem ), ( TickType_t ) configMAX_PRIORITIES - ( TickType_t ) pxTCB->uxPriority ); /*lint !e961 MISRA exception as the casts are only redundant for some ports. */ + 800b24a: 61a2 str r2, [r4, #24] + prvAddTaskToReadyList( pxTCB ); + 800b24c: 4a07 ldr r2, [pc, #28] ; (800b26c ) + 800b24e: 6810 ldr r0, [r2, #0] + 800b250: 4283 cmp r3, r0 + 800b252: d900 bls.n 800b256 + 800b254: 6013 str r3, [r2, #0] + 800b256: 4a06 ldr r2, [pc, #24] ; (800b270 ) + 800b258: 2014 movs r0, #20 + 800b25a: fb00 2003 mla r0, r0, r3, r2 + 800b25e: f7fe fb3d bl 80098dc + xReturn = pdTRUE; + 800b262: 2001 movs r0, #1 + return xReturn; + 800b264: e7c1 b.n 800b1ea + 800b266: bf00 nop + 800b268: 2001a7e4 .word 0x2001a7e4 + 800b26c: 2001ac64 .word 0x2001ac64 + 800b270: 2001a7f0 .word 0x2001a7f0 + +0800b274 : + { + 800b274: b537 push {r0, r1, r2, r4, r5, lr} + if( pxMutexHolder != NULL ) + 800b276: 4604 mov r4, r0 + 800b278: 2800 cmp r0, #0 + 800b27a: d048 beq.n 800b30e + configASSERT( pxTCB->uxMutexesHeld ); + 800b27c: 6d02 ldr r2, [r0, #80] ; 0x50 + 800b27e: b952 cbnz r2, 800b296 + 800b280: f04f 0350 mov.w r3, #80 ; 0x50 + 800b284: b672 cpsid i + 800b286: f383 8811 msr BASEPRI, r3 + 800b28a: f3bf 8f6f isb sy + 800b28e: f3bf 8f4f dsb sy + 800b292: b662 cpsie i + 800b294: e7fe b.n 800b294 + if( pxTCB->uxBasePriority < uxHighestPriorityWaitingTask ) + 800b296: 6cc3 ldr r3, [r0, #76] ; 0x4c + 800b298: 4299 cmp r1, r3 + 800b29a: bf38 it cc + 800b29c: 4619 movcc r1, r3 + if( pxTCB->uxPriority != uxPriorityToUse ) + 800b29e: 6ac3 ldr r3, [r0, #44] ; 0x2c + 800b2a0: 428b cmp r3, r1 + 800b2a2: d034 beq.n 800b30e + if( pxTCB->uxMutexesHeld == uxOnlyOneMutexHeld ) + 800b2a4: 2a01 cmp r2, #1 + 800b2a6: d132 bne.n 800b30e + configASSERT( pxTCB != pxCurrentTCB ); + 800b2a8: 4a1a ldr r2, [pc, #104] ; (800b314 ) + 800b2aa: 6812 ldr r2, [r2, #0] + 800b2ac: 4282 cmp r2, r0 + 800b2ae: d10a bne.n 800b2c6 + 800b2b0: f04f 0350 mov.w r3, #80 ; 0x50 + 800b2b4: b672 cpsid i + 800b2b6: f383 8811 msr BASEPRI, r3 + 800b2ba: f3bf 8f6f isb sy + 800b2be: f3bf 8f4f dsb sy + 800b2c2: b662 cpsie i + 800b2c4: e7fe b.n 800b2c4 + if( ( listGET_LIST_ITEM_VALUE( &( pxTCB->xEventListItem ) ) & taskEVENT_LIST_ITEM_VALUE_IN_USE ) == 0UL ) + 800b2c6: 6982 ldr r2, [r0, #24] + if( listIS_CONTAINED_WITHIN( &( pxReadyTasksLists[ uxPriorityUsedOnEntry ] ), &( pxTCB->xStateListItem ) ) != pdFALSE ) + 800b2c8: 4d13 ldr r5, [pc, #76] ; (800b318 ) + if( ( listGET_LIST_ITEM_VALUE( &( pxTCB->xEventListItem ) ) & taskEVENT_LIST_ITEM_VALUE_IN_USE ) == 0UL ) + 800b2ca: 2a00 cmp r2, #0 + if( listIS_CONTAINED_WITHIN( &( pxReadyTasksLists[ uxPriorityUsedOnEntry ] ), &( pxTCB->xStateListItem ) ) != pdFALSE ) + 800b2cc: f04f 0214 mov.w r2, #20 + pxTCB->uxPriority = uxPriorityToUse; + 800b2d0: 62c1 str r1, [r0, #44] ; 0x2c + if( listIS_CONTAINED_WITHIN( &( pxReadyTasksLists[ uxPriorityUsedOnEntry ] ), &( pxTCB->xStateListItem ) ) != pdFALSE ) + 800b2d2: fb02 5303 mla r3, r2, r3, r5 + listSET_LIST_ITEM_VALUE( &( pxTCB->xEventListItem ), ( TickType_t ) configMAX_PRIORITIES - ( TickType_t ) uxPriorityToUse ); /*lint !e961 MISRA exception as the casts are only redundant for some ports. */ + 800b2d6: bfa8 it ge + 800b2d8: f1c1 0138 rsbge r1, r1, #56 ; 0x38 + if( listIS_CONTAINED_WITHIN( &( pxReadyTasksLists[ uxPriorityUsedOnEntry ] ), &( pxTCB->xStateListItem ) ) != pdFALSE ) + 800b2dc: 6942 ldr r2, [r0, #20] + listSET_LIST_ITEM_VALUE( &( pxTCB->xEventListItem ), ( TickType_t ) configMAX_PRIORITIES - ( TickType_t ) uxPriorityToUse ); /*lint !e961 MISRA exception as the casts are only redundant for some ports. */ + 800b2de: bfa8 it ge + 800b2e0: 6181 strge r1, [r0, #24] + if( listIS_CONTAINED_WITHIN( &( pxReadyTasksLists[ uxPriorityUsedOnEntry ] ), &( pxTCB->xStateListItem ) ) != pdFALSE ) + 800b2e2: 429a cmp r2, r3 + 800b2e4: d113 bne.n 800b30e + if( uxListRemove( &( pxTCB->xStateListItem ) ) == ( UBaseType_t ) 0 ) + 800b2e6: 1d01 adds r1, r0, #4 + 800b2e8: 4608 mov r0, r1 + 800b2ea: 9101 str r1, [sp, #4] + 800b2ec: f7fe fb19 bl 8009922 + prvAddTaskToReadyList( pxTCB ); + 800b2f0: 4a0a ldr r2, [pc, #40] ; (800b31c ) + 800b2f2: 6ae3 ldr r3, [r4, #44] ; 0x2c + 800b2f4: 6810 ldr r0, [r2, #0] + 800b2f6: 9901 ldr r1, [sp, #4] + 800b2f8: 4283 cmp r3, r0 + 800b2fa: d900 bls.n 800b2fe + 800b2fc: 6013 str r3, [r2, #0] + 800b2fe: 2014 movs r0, #20 + 800b300: fb00 5003 mla r0, r0, r3, r5 + } + 800b304: b003 add sp, #12 + 800b306: e8bd 4030 ldmia.w sp!, {r4, r5, lr} + prvAddTaskToReadyList( pxTCB ); + 800b30a: f7fe bae7 b.w 80098dc + } + 800b30e: b003 add sp, #12 + 800b310: bd30 pop {r4, r5, pc} + 800b312: bf00 nop + 800b314: 2001a7e4 .word 0x2001a7e4 + 800b318: 2001a7f0 .word 0x2001a7f0 + 800b31c: 2001ac64 .word 0x2001ac64 + +0800b320 : + if( pxCurrentTCB != NULL ) + 800b320: 4b04 ldr r3, [pc, #16] ; (800b334 ) + 800b322: 681a ldr r2, [r3, #0] + 800b324: b11a cbz r2, 800b32e + ( pxCurrentTCB->uxMutexesHeld )++; + 800b326: 6819 ldr r1, [r3, #0] + 800b328: 6d0a ldr r2, [r1, #80] ; 0x50 + 800b32a: 3201 adds r2, #1 + 800b32c: 650a str r2, [r1, #80] ; 0x50 + return pxCurrentTCB; + 800b32e: 6818 ldr r0, [r3, #0] + } + 800b330: 4770 bx lr + 800b332: bf00 nop + 800b334: 2001a7e4 .word 0x2001a7e4 + +0800b338 : + pxOverflowTimerList = pxTemp; +} +/*-----------------------------------------------------------*/ + +static void prvCheckForValidListAndQueue( void ) +{ + 800b338: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} + /* Check that the list from which active timers are referenced, and the + queue used to communicate with the timer service, have been + initialised. */ + taskENTER_CRITICAL(); + { + if( xTimerQueue == NULL ) + 800b33a: 4c11 ldr r4, [pc, #68] ; (800b380 ) + taskENTER_CRITICAL(); + 800b33c: f7fe fb6a bl 8009a14 + if( xTimerQueue == NULL ) + 800b340: 6825 ldr r5, [r4, #0] + 800b342: b9bd cbnz r5, 800b374 + { + vListInitialise( &xActiveTimerList1 ); + 800b344: 4f0f ldr r7, [pc, #60] ; (800b384 ) + vListInitialise( &xActiveTimerList2 ); + 800b346: 4e10 ldr r6, [pc, #64] ; (800b388 ) + vListInitialise( &xActiveTimerList1 ); + 800b348: 4638 mov r0, r7 + 800b34a: f7fe fab9 bl 80098c0 + vListInitialise( &xActiveTimerList2 ); + 800b34e: 4630 mov r0, r6 + 800b350: f7fe fab6 bl 80098c0 + pxCurrentTimerList = &xActiveTimerList1; + 800b354: 4b0d ldr r3, [pc, #52] ; (800b38c ) + /* The timer queue is allocated statically in case + configSUPPORT_DYNAMIC_ALLOCATION is 0. */ + static StaticQueue_t xStaticTimerQueue; /*lint !e956 Ok to declare in this manner to prevent additional conditional compilation guards in other locations. */ + static uint8_t ucStaticTimerQueueStorage[ ( size_t ) configTIMER_QUEUE_LENGTH * sizeof( DaemonTaskMessage_t ) ]; /*lint !e956 Ok to declare in this manner to prevent additional conditional compilation guards in other locations. */ + + xTimerQueue = xQueueCreateStatic( ( UBaseType_t ) configTIMER_QUEUE_LENGTH, ( UBaseType_t ) sizeof( DaemonTaskMessage_t ), &( ucStaticTimerQueueStorage[ 0 ] ), &xStaticTimerQueue ); + 800b356: 4a0e ldr r2, [pc, #56] ; (800b390 ) + 800b358: 2110 movs r1, #16 + pxCurrentTimerList = &xActiveTimerList1; + 800b35a: 601f str r7, [r3, #0] + xTimerQueue = xQueueCreateStatic( ( UBaseType_t ) configTIMER_QUEUE_LENGTH, ( UBaseType_t ) sizeof( DaemonTaskMessage_t ), &( ucStaticTimerQueueStorage[ 0 ] ), &xStaticTimerQueue ); + 800b35c: 200a movs r0, #10 + pxOverflowTimerList = &xActiveTimerList2; + 800b35e: 4b0d ldr r3, [pc, #52] ; (800b394 ) + 800b360: 601e str r6, [r3, #0] + xTimerQueue = xQueueCreateStatic( ( UBaseType_t ) configTIMER_QUEUE_LENGTH, ( UBaseType_t ) sizeof( DaemonTaskMessage_t ), &( ucStaticTimerQueueStorage[ 0 ] ), &xStaticTimerQueue ); + 800b362: 4b0d ldr r3, [pc, #52] ; (800b398 ) + 800b364: 9500 str r5, [sp, #0] + 800b366: f7fe fda1 bl 8009eac + 800b36a: 6020 str r0, [r4, #0] + } + #endif + + #if ( configQUEUE_REGISTRY_SIZE > 0 ) + { + if( xTimerQueue != NULL ) + 800b36c: b110 cbz r0, 800b374 + { + vQueueAddToRegistry( xTimerQueue, "TmrQ" ); + 800b36e: 490b ldr r1, [pc, #44] ; (800b39c ) + 800b370: f7ff f9dc bl 800a72c + { + mtCOVERAGE_TEST_MARKER(); + } + } + taskEXIT_CRITICAL(); +} + 800b374: b003 add sp, #12 + 800b376: e8bd 40f0 ldmia.w sp!, {r4, r5, r6, r7, lr} + taskEXIT_CRITICAL(); + 800b37a: f7fe bb6f b.w 8009a5c + 800b37e: bf00 nop + 800b380: 2001ae04 .word 0x2001ae04 + 800b384: 2001ad88 .word 0x2001ad88 + 800b388: 2001ad9c .word 0x2001ad9c + 800b38c: 2001ace0 .word 0x2001ace0 + 800b390: 2001ace8 .word 0x2001ace8 + 800b394: 2001ace4 .word 0x2001ace4 + 800b398: 2001adb4 .word 0x2001adb4 + 800b39c: 08037ce0 .word 0x08037ce0 + +0800b3a0 : + if( xNextExpiryTime <= xTimeNow ) + 800b3a0: 4291 cmp r1, r2 +{ + 800b3a2: b508 push {r3, lr} + listSET_LIST_ITEM_VALUE( &( pxTimer->xTimerListItem ), xNextExpiryTime ); + 800b3a4: 6041 str r1, [r0, #4] + listSET_LIST_ITEM_OWNER( &( pxTimer->xTimerListItem ), pxTimer ); + 800b3a6: 6100 str r0, [r0, #16] + if( xNextExpiryTime <= xTimeNow ) + 800b3a8: d80a bhi.n 800b3c0 + if( ( ( TickType_t ) ( xTimeNow - xCommandTime ) ) >= pxTimer->xTimerPeriodInTicks ) /*lint !e961 MISRA exception as the casts are only redundant for some ports. */ + 800b3aa: 1ad3 subs r3, r2, r3 + 800b3ac: 6982 ldr r2, [r0, #24] + 800b3ae: 4293 cmp r3, r2 + 800b3b0: d20d bcs.n 800b3ce + vListInsert( pxOverflowTimerList, &( pxTimer->xTimerListItem ) ); + 800b3b2: 1d01 adds r1, r0, #4 + 800b3b4: 4b07 ldr r3, [pc, #28] ; (800b3d4 ) + vListInsert( pxCurrentTimerList, &( pxTimer->xTimerListItem ) ); + 800b3b6: 6818 ldr r0, [r3, #0] + 800b3b8: f7fe fa9c bl 80098f4 +BaseType_t xProcessTimerNow = pdFALSE; + 800b3bc: 2000 movs r0, #0 +} + 800b3be: bd08 pop {r3, pc} + if( ( xTimeNow < xCommandTime ) && ( xNextExpiryTime >= xCommandTime ) ) + 800b3c0: 429a cmp r2, r3 + 800b3c2: d201 bcs.n 800b3c8 + 800b3c4: 4299 cmp r1, r3 + 800b3c6: d202 bcs.n 800b3ce + vListInsert( pxCurrentTimerList, &( pxTimer->xTimerListItem ) ); + 800b3c8: 1d01 adds r1, r0, #4 + 800b3ca: 4b03 ldr r3, [pc, #12] ; (800b3d8 ) + 800b3cc: e7f3 b.n 800b3b6 + xProcessTimerNow = pdTRUE; + 800b3ce: 2001 movs r0, #1 + return xProcessTimerNow; + 800b3d0: e7f5 b.n 800b3be + 800b3d2: bf00 nop + 800b3d4: 2001ace4 .word 0x2001ace4 + 800b3d8: 2001ace0 .word 0x2001ace0 + +0800b3dc : +{ + 800b3dc: b510 push {r4, lr} + 800b3de: b088 sub sp, #32 + prvCheckForValidListAndQueue(); + 800b3e0: f7ff ffaa bl 800b338 + if( xTimerQueue != NULL ) + 800b3e4: 4b13 ldr r3, [pc, #76] ; (800b434 ) + 800b3e6: 681b ldr r3, [r3, #0] + 800b3e8: b1b3 cbz r3, 800b418 + StaticTask_t *pxTimerTaskTCBBuffer = NULL; + 800b3ea: 2400 movs r4, #0 + vApplicationGetTimerTaskMemory( &pxTimerTaskTCBBuffer, &pxTimerTaskStackBuffer, &ulTimerTaskStackSize ); + 800b3ec: aa07 add r2, sp, #28 + 800b3ee: a906 add r1, sp, #24 + 800b3f0: a805 add r0, sp, #20 + StackType_t *pxTimerTaskStackBuffer = NULL; + 800b3f2: e9cd 4405 strd r4, r4, [sp, #20] + vApplicationGetTimerTaskMemory( &pxTimerTaskTCBBuffer, &pxTimerTaskStackBuffer, &ulTimerTaskStackSize ); + 800b3f6: f7fe f95f bl 80096b8 + xTimerTaskHandle = xTaskCreateStatic( prvTimerTask, + 800b3fa: 9b05 ldr r3, [sp, #20] + 800b3fc: 9a07 ldr r2, [sp, #28] + 800b3fe: 9302 str r3, [sp, #8] + 800b400: 9b06 ldr r3, [sp, #24] + 800b402: 490d ldr r1, [pc, #52] ; (800b438 ) + 800b404: 9301 str r3, [sp, #4] + 800b406: 2302 movs r3, #2 + 800b408: 480c ldr r0, [pc, #48] ; (800b43c ) + 800b40a: 9300 str r3, [sp, #0] + 800b40c: 4623 mov r3, r4 + 800b40e: f7ff fb56 bl 800aabe + 800b412: 4b0b ldr r3, [pc, #44] ; (800b440 ) + 800b414: 6018 str r0, [r3, #0] + if( xTimerTaskHandle != NULL ) + 800b416: b950 cbnz r0, 800b42e + 800b418: f04f 0350 mov.w r3, #80 ; 0x50 + 800b41c: b672 cpsid i + 800b41e: f383 8811 msr BASEPRI, r3 + 800b422: f3bf 8f6f isb sy + 800b426: f3bf 8f4f dsb sy + 800b42a: b662 cpsie i + configASSERT( xReturn ); + 800b42c: e7fe b.n 800b42c +} + 800b42e: 2001 movs r0, #1 + 800b430: b008 add sp, #32 + 800b432: bd10 pop {r4, pc} + 800b434: 2001ae04 .word 0x2001ae04 + 800b438: 08037ce5 .word 0x08037ce5 + 800b43c: 0800b54d .word 0x0800b54d + 800b440: 2001ae08 .word 0x2001ae08 + +0800b444 : +{ + 800b444: b57f push {r0, r1, r2, r3, r4, r5, r6, lr} + 800b446: 4616 mov r6, r2 + configASSERT( xTimer ); + 800b448: 4604 mov r4, r0 +{ + 800b44a: 461a mov r2, r3 + configASSERT( xTimer ); + 800b44c: b950 cbnz r0, 800b464 + 800b44e: f04f 0350 mov.w r3, #80 ; 0x50 + 800b452: b672 cpsid i + 800b454: f383 8811 msr BASEPRI, r3 + 800b458: f3bf 8f6f isb sy + 800b45c: f3bf 8f4f dsb sy + 800b460: b662 cpsie i + 800b462: e7fe b.n 800b462 + if( xTimerQueue != NULL ) + 800b464: 4d0c ldr r5, [pc, #48] ; (800b498 ) + 800b466: 6828 ldr r0, [r5, #0] + 800b468: b178 cbz r0, 800b48a + if( xCommandID < tmrFIRST_FROM_ISR_COMMAND ) + 800b46a: 2905 cmp r1, #5 + xMessage.u.xTimerParameters.pxTimer = xTimer; + 800b46c: 9402 str r4, [sp, #8] + xMessage.u.xTimerParameters.xMessageValue = xOptionalValue; + 800b46e: e9cd 1600 strd r1, r6, [sp] + if( xCommandID < tmrFIRST_FROM_ISR_COMMAND ) + 800b472: dc0c bgt.n 800b48e + if( xTaskGetSchedulerState() == taskSCHEDULER_RUNNING ) + 800b474: f7ff fe66 bl 800b144 + xReturn = xQueueSendToBack( xTimerQueue, &xMessage, xTicksToWait ); + 800b478: 2300 movs r3, #0 + if( xTaskGetSchedulerState() == taskSCHEDULER_RUNNING ) + 800b47a: 2802 cmp r0, #2 + xReturn = xQueueSendToBack( xTimerQueue, &xMessage, tmrNO_DELAY ); + 800b47c: 4669 mov r1, sp + 800b47e: 6828 ldr r0, [r5, #0] + xReturn = xQueueSendToBack( xTimerQueue, &xMessage, xTicksToWait ); + 800b480: bf0c ite eq + 800b482: 9a08 ldreq r2, [sp, #32] + xReturn = xQueueSendToBack( xTimerQueue, &xMessage, tmrNO_DELAY ); + 800b484: 461a movne r2, r3 + 800b486: f7fe fd96 bl 8009fb6 +} + 800b48a: b004 add sp, #16 + 800b48c: bd70 pop {r4, r5, r6, pc} + xReturn = xQueueSendToBackFromISR( xTimerQueue, &xMessage, pxHigherPriorityTaskWoken ); + 800b48e: 2300 movs r3, #0 + 800b490: 4669 mov r1, sp + 800b492: f7fe fe9d bl 800a1d0 + 800b496: e7f8 b.n 800b48a + 800b498: 2001ae04 .word 0x2001ae04 + +0800b49c : +{ + 800b49c: e92d 47ff stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, lr} + if( xTimeNow < xLastTime ) + 800b4a0: f8df 80a4 ldr.w r8, [pc, #164] ; 800b548 +{ + 800b4a4: 4606 mov r6, r0 + xTimeNow = xTaskGetTickCount(); + 800b4a6: f7ff fb7d bl 800aba4 + 800b4aa: 4605 mov r5, r0 + if( xTimeNow < xLastTime ) + 800b4ac: f8d8 3000 ldr.w r3, [r8] + 800b4b0: 4283 cmp r3, r0 + 800b4b2: d90b bls.n 800b4cc + while( listLIST_IS_EMPTY( pxCurrentTimerList ) == pdFALSE ) + 800b4b4: 4f22 ldr r7, [pc, #136] ; (800b540 ) + xResult = xTimerGenericCommand( pxTimer, tmrCOMMAND_START_DONT_TRACE, xNextExpireTime, NULL, tmrNO_DELAY ); + 800b4b6: f04f 0900 mov.w r9, #0 + while( listLIST_IS_EMPTY( pxCurrentTimerList ) == pdFALSE ) + 800b4ba: 683b ldr r3, [r7, #0] + 800b4bc: 681a ldr r2, [r3, #0] + 800b4be: b96a cbnz r2, 800b4dc + pxCurrentTimerList = pxOverflowTimerList; + 800b4c0: 4a20 ldr r2, [pc, #128] ; (800b544 ) + 800b4c2: 6811 ldr r1, [r2, #0] + pxOverflowTimerList = pxTemp; + 800b4c4: 6013 str r3, [r2, #0] + 800b4c6: 2301 movs r3, #1 + pxCurrentTimerList = pxOverflowTimerList; + 800b4c8: 6039 str r1, [r7, #0] + *pxTimerListsWereSwitched = pdTRUE; + 800b4ca: e000 b.n 800b4ce + 800b4cc: 2300 movs r3, #0 +} + 800b4ce: 4628 mov r0, r5 + *pxTimerListsWereSwitched = pdTRUE; + 800b4d0: 6033 str r3, [r6, #0] + xLastTime = xTimeNow; + 800b4d2: f8c8 5000 str.w r5, [r8] +} + 800b4d6: b004 add sp, #16 + 800b4d8: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + xNextExpireTime = listGET_ITEM_VALUE_OF_HEAD_ENTRY( pxCurrentTimerList ); + 800b4dc: 68db ldr r3, [r3, #12] + pxTimer = ( Timer_t * ) listGET_OWNER_OF_HEAD_ENTRY( pxCurrentTimerList ); /*lint !e9087 !e9079 void * is used as this macro is used with tasks and co-routines too. Alignment is known to be fine as the type of the pointer stored and retrieved is the same. */ + 800b4de: 68dc ldr r4, [r3, #12] + xNextExpireTime = listGET_ITEM_VALUE_OF_HEAD_ENTRY( pxCurrentTimerList ); + 800b4e0: f8d3 a000 ldr.w sl, [r3] + ( void ) uxListRemove( &( pxTimer->xTimerListItem ) ); + 800b4e4: 1d21 adds r1, r4, #4 + 800b4e6: 4608 mov r0, r1 + 800b4e8: 9103 str r1, [sp, #12] + 800b4ea: f7fe fa1a bl 8009922 + pxTimer->pxCallbackFunction( ( TimerHandle_t ) pxTimer ); + 800b4ee: 6a23 ldr r3, [r4, #32] + 800b4f0: 4620 mov r0, r4 + 800b4f2: 4798 blx r3 + if( ( pxTimer->ucStatus & tmrSTATUS_IS_AUTORELOAD ) != 0 ) + 800b4f4: f894 3028 ldrb.w r3, [r4, #40] ; 0x28 + 800b4f8: 9903 ldr r1, [sp, #12] + 800b4fa: f013 0f04 tst.w r3, #4 + 800b4fe: d0dc beq.n 800b4ba + xReloadTime = ( xNextExpireTime + pxTimer->xTimerPeriodInTicks ); + 800b500: 69a3 ldr r3, [r4, #24] + 800b502: 4453 add r3, sl + if( xReloadTime > xNextExpireTime ) + 800b504: 459a cmp sl, r3 + 800b506: d205 bcs.n 800b514 + vListInsert( pxCurrentTimerList, &( pxTimer->xTimerListItem ) ); + 800b508: 6838 ldr r0, [r7, #0] + listSET_LIST_ITEM_VALUE( &( pxTimer->xTimerListItem ), xReloadTime ); + 800b50a: 6063 str r3, [r4, #4] + listSET_LIST_ITEM_OWNER( &( pxTimer->xTimerListItem ), pxTimer ); + 800b50c: 6124 str r4, [r4, #16] + vListInsert( pxCurrentTimerList, &( pxTimer->xTimerListItem ) ); + 800b50e: f7fe f9f1 bl 80098f4 + 800b512: e7d2 b.n 800b4ba + xResult = xTimerGenericCommand( pxTimer, tmrCOMMAND_START_DONT_TRACE, xNextExpireTime, NULL, tmrNO_DELAY ); + 800b514: 2300 movs r3, #0 + 800b516: 4652 mov r2, sl + 800b518: 4620 mov r0, r4 + 800b51a: f8cd 9000 str.w r9, [sp] + 800b51e: 4619 mov r1, r3 + 800b520: f7ff ff90 bl 800b444 + configASSERT( xResult ); + 800b524: 2800 cmp r0, #0 + 800b526: d1c8 bne.n 800b4ba + 800b528: f04f 0350 mov.w r3, #80 ; 0x50 + 800b52c: b672 cpsid i + 800b52e: f383 8811 msr BASEPRI, r3 + 800b532: f3bf 8f6f isb sy + 800b536: f3bf 8f4f dsb sy + 800b53a: b662 cpsie i + 800b53c: e7fe b.n 800b53c + 800b53e: bf00 nop + 800b540: 2001ace0 .word 0x2001ace0 + 800b544: 2001ace4 .word 0x2001ace4 + 800b548: 2001adb0 .word 0x2001adb0 + +0800b54c : +{ + 800b54c: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} + *pxListWasEmpty = listLIST_IS_EMPTY( pxCurrentTimerList ); + 800b550: 4d71 ldr r5, [pc, #452] ; (800b718 ) +{ + 800b552: b089 sub sp, #36 ; 0x24 + vQueueWaitForMessageRestricted( xTimerQueue, ( xNextExpireTime - xTimeNow ), xListWasEmpty ); + 800b554: 4e71 ldr r6, [pc, #452] ; (800b71c ) + *pxListWasEmpty = listLIST_IS_EMPTY( pxCurrentTimerList ); + 800b556: 682b ldr r3, [r5, #0] + 800b558: f8d3 8000 ldr.w r8, [r3] + 800b55c: f1b8 0f00 cmp.w r8, #0 + 800b560: d037 beq.n 800b5d2 + xNextExpireTime = listGET_ITEM_VALUE_OF_HEAD_ENTRY( pxCurrentTimerList ); + 800b562: 68db ldr r3, [r3, #12] + *pxListWasEmpty = listLIST_IS_EMPTY( pxCurrentTimerList ); + 800b564: 2400 movs r4, #0 + xNextExpireTime = listGET_ITEM_VALUE_OF_HEAD_ENTRY( pxCurrentTimerList ); + 800b566: f8d3 8000 ldr.w r8, [r3] + vTaskSuspendAll(); + 800b56a: f7ff fb13 bl 800ab94 + xTimeNow = prvSampleTimeNow( &xTimerListsWereSwitched ); + 800b56e: a804 add r0, sp, #16 + 800b570: f7ff ff94 bl 800b49c + if( xTimerListsWereSwitched == pdFALSE ) + 800b574: 9b04 ldr r3, [sp, #16] + xTimeNow = prvSampleTimeNow( &xTimerListsWereSwitched ); + 800b576: 4681 mov r9, r0 + if( xTimerListsWereSwitched == pdFALSE ) + 800b578: 2b00 cmp r3, #0 + 800b57a: d16b bne.n 800b654 + if( ( xListWasEmpty == pdFALSE ) && ( xNextExpireTime <= xTimeNow ) ) + 800b57c: 2c00 cmp r4, #0 + 800b57e: d14e bne.n 800b61e + 800b580: 4540 cmp r0, r8 + 800b582: d352 bcc.n 800b62a + ( void ) xTaskResumeAll(); + 800b584: f7ff fbb4 bl 800acf0 +Timer_t * const pxTimer = ( Timer_t * ) listGET_OWNER_OF_HEAD_ENTRY( pxCurrentTimerList ); /*lint !e9087 !e9079 void * is used as this macro is used with tasks and co-routines too. Alignment is known to be fine as the type of the pointer stored and retrieved is the same. */ + 800b588: 682b ldr r3, [r5, #0] + 800b58a: 68db ldr r3, [r3, #12] + 800b58c: 68df ldr r7, [r3, #12] + ( void ) uxListRemove( &( pxTimer->xTimerListItem ) ); + 800b58e: 1d38 adds r0, r7, #4 + 800b590: f7fe f9c7 bl 8009922 + if( ( pxTimer->ucStatus & tmrSTATUS_IS_AUTORELOAD ) != 0 ) + 800b594: f897 3028 ldrb.w r3, [r7, #40] ; 0x28 + 800b598: 0758 lsls r0, r3, #29 + 800b59a: d51c bpl.n 800b5d6 + if( prvInsertTimerInActiveList( pxTimer, ( xNextExpireTime + pxTimer->xTimerPeriodInTicks ), xTimeNow, xNextExpireTime ) != pdFALSE ) + 800b59c: 69b9 ldr r1, [r7, #24] + 800b59e: 4643 mov r3, r8 + 800b5a0: 464a mov r2, r9 + 800b5a2: 4638 mov r0, r7 + 800b5a4: 4441 add r1, r8 + 800b5a6: f7ff fefb bl 800b3a0 + 800b5aa: b1c0 cbz r0, 800b5de + xResult = xTimerGenericCommand( pxTimer, tmrCOMMAND_START_DONT_TRACE, xNextExpireTime, NULL, tmrNO_DELAY ); + 800b5ac: 4623 mov r3, r4 + 800b5ae: 4642 mov r2, r8 + 800b5b0: 4621 mov r1, r4 + 800b5b2: 4638 mov r0, r7 + 800b5b4: 9400 str r4, [sp, #0] + 800b5b6: f7ff ff45 bl 800b444 + configASSERT( xResult ); + 800b5ba: b980 cbnz r0, 800b5de + 800b5bc: f04f 0350 mov.w r3, #80 ; 0x50 + 800b5c0: b672 cpsid i + 800b5c2: f383 8811 msr BASEPRI, r3 + 800b5c6: f3bf 8f6f isb sy + 800b5ca: f3bf 8f4f dsb sy + 800b5ce: b662 cpsie i + 800b5d0: e7fe b.n 800b5d0 + *pxListWasEmpty = listLIST_IS_EMPTY( pxCurrentTimerList ); + 800b5d2: 2401 movs r4, #1 + 800b5d4: e7c9 b.n 800b56a + pxTimer->ucStatus &= ~tmrSTATUS_IS_ACTIVE; + 800b5d6: f023 0301 bic.w r3, r3, #1 + 800b5da: f887 3028 strb.w r3, [r7, #40] ; 0x28 + pxTimer->pxCallbackFunction( ( TimerHandle_t ) pxTimer ); + 800b5de: 6a3b ldr r3, [r7, #32] + 800b5e0: 4638 mov r0, r7 + 800b5e2: 4798 blx r3 + while( xQueueReceive( xTimerQueue, &xMessage, tmrNO_DELAY ) != pdFAIL ) /*lint !e603 xMessage does not have to be initialised as it is passed out, not in, and it is not used unless xQueueReceive() returns pdTRUE. */ + 800b5e4: 2200 movs r2, #0 + 800b5e6: a904 add r1, sp, #16 + 800b5e8: 6830 ldr r0, [r6, #0] + 800b5ea: f7fe feb6 bl 800a35a + 800b5ee: 2800 cmp r0, #0 + 800b5f0: d0b1 beq.n 800b556 + if( xMessage.xMessageID < ( BaseType_t ) 0 ) + 800b5f2: 9b04 ldr r3, [sp, #16] + pxCallback->pxCallbackFunction( pxCallback->pvParameter1, pxCallback->ulParameter2 ); + 800b5f4: 9806 ldr r0, [sp, #24] + if( xMessage.xMessageID < ( BaseType_t ) 0 ) + 800b5f6: 2b00 cmp r3, #0 + 800b5f8: db2f blt.n 800b65a + pxTimer = xMessage.u.xTimerParameters.pxTimer; + 800b5fa: 9c06 ldr r4, [sp, #24] + if( listIS_CONTAINED_WITHIN( NULL, &( pxTimer->xTimerListItem ) ) == pdFALSE ) /*lint !e961. The cast is only redundant when NULL is passed into the macro. */ + 800b5fc: 6963 ldr r3, [r4, #20] + 800b5fe: 2b00 cmp r3, #0 + 800b600: d132 bne.n 800b668 + xTimeNow = prvSampleTimeNow( &xTimerListsWereSwitched ); + 800b602: a803 add r0, sp, #12 + 800b604: f7ff ff4a bl 800b49c + switch( xMessage.xMessageID ) + 800b608: 9b04 ldr r3, [sp, #16] + xTimeNow = prvSampleTimeNow( &xTimerListsWereSwitched ); + 800b60a: 4602 mov r2, r0 + switch( xMessage.xMessageID ) + 800b60c: 2b09 cmp r3, #9 + 800b60e: d8e9 bhi.n 800b5e4 + 800b610: e8df f003 tbb [pc, r3] + 800b614: 592e2e2e .word 0x592e2e2e + 800b618: 2e2e7a60 .word 0x2e2e7a60 + 800b61c: 6059 .short 0x6059 + xListWasEmpty = listLIST_IS_EMPTY( pxOverflowTimerList ); + 800b61e: 4b40 ldr r3, [pc, #256] ; (800b720 ) + 800b620: 681b ldr r3, [r3, #0] + 800b622: 681c ldr r4, [r3, #0] + 800b624: fab4 f484 clz r4, r4 + 800b628: 0964 lsrs r4, r4, #5 + vQueueWaitForMessageRestricted( xTimerQueue, ( xNextExpireTime - xTimeNow ), xListWasEmpty ); + 800b62a: 4622 mov r2, r4 + 800b62c: eba8 0109 sub.w r1, r8, r9 + 800b630: 6830 ldr r0, [r6, #0] + 800b632: f7ff f8ba bl 800a7aa + if( xTaskResumeAll() == pdFALSE ) + 800b636: f7ff fb5b bl 800acf0 + 800b63a: 2800 cmp r0, #0 + 800b63c: d1d2 bne.n 800b5e4 + portYIELD_WITHIN_API(); + 800b63e: f04f 23e0 mov.w r3, #3758153728 ; 0xe000e000 + 800b642: f04f 5280 mov.w r2, #268435456 ; 0x10000000 + 800b646: f8c3 2d04 str.w r2, [r3, #3332] ; 0xd04 + 800b64a: f3bf 8f4f dsb sy + 800b64e: f3bf 8f6f isb sy + 800b652: e7c7 b.n 800b5e4 + ( void ) xTaskResumeAll(); + 800b654: f7ff fb4c bl 800acf0 +} + 800b658: e7c4 b.n 800b5e4 + pxCallback->pxCallbackFunction( pxCallback->pvParameter1, pxCallback->ulParameter2 ); + 800b65a: 9b05 ldr r3, [sp, #20] + 800b65c: 9907 ldr r1, [sp, #28] + 800b65e: 4798 blx r3 + if( xMessage.xMessageID >= ( BaseType_t ) 0 ) + 800b660: 9b04 ldr r3, [sp, #16] + 800b662: 2b00 cmp r3, #0 + 800b664: dbbe blt.n 800b5e4 + 800b666: e7c8 b.n 800b5fa + ( void ) uxListRemove( &( pxTimer->xTimerListItem ) ); + 800b668: 1d20 adds r0, r4, #4 + 800b66a: f7fe f95a bl 8009922 + 800b66e: e7c8 b.n 800b602 + pxTimer->ucStatus |= tmrSTATUS_IS_ACTIVE; + 800b670: f894 3028 ldrb.w r3, [r4, #40] ; 0x28 + if( prvInsertTimerInActiveList( pxTimer, xMessage.u.xTimerParameters.xMessageValue + pxTimer->xTimerPeriodInTicks, xTimeNow, xMessage.u.xTimerParameters.xMessageValue ) != pdFALSE ) + 800b674: 4620 mov r0, r4 + 800b676: 69a1 ldr r1, [r4, #24] + pxTimer->ucStatus |= tmrSTATUS_IS_ACTIVE; + 800b678: f043 0301 orr.w r3, r3, #1 + 800b67c: f884 3028 strb.w r3, [r4, #40] ; 0x28 + if( prvInsertTimerInActiveList( pxTimer, xMessage.u.xTimerParameters.xMessageValue + pxTimer->xTimerPeriodInTicks, xTimeNow, xMessage.u.xTimerParameters.xMessageValue ) != pdFALSE ) + 800b680: 9b05 ldr r3, [sp, #20] + 800b682: 4419 add r1, r3 + 800b684: f7ff fe8c bl 800b3a0 + 800b688: 2800 cmp r0, #0 + 800b68a: d0ab beq.n 800b5e4 + pxTimer->pxCallbackFunction( ( TimerHandle_t ) pxTimer ); + 800b68c: 6a23 ldr r3, [r4, #32] + 800b68e: 4620 mov r0, r4 + 800b690: 4798 blx r3 + if( ( pxTimer->ucStatus & tmrSTATUS_IS_AUTORELOAD ) != 0 ) + 800b692: f894 3028 ldrb.w r3, [r4, #40] ; 0x28 + 800b696: 0759 lsls r1, r3, #29 + 800b698: d5a4 bpl.n 800b5e4 + xResult = xTimerGenericCommand( pxTimer, tmrCOMMAND_START_DONT_TRACE, xMessage.u.xTimerParameters.xMessageValue + pxTimer->xTimerPeriodInTicks, NULL, tmrNO_DELAY ); + 800b69a: 69a2 ldr r2, [r4, #24] + 800b69c: 2300 movs r3, #0 + 800b69e: 9905 ldr r1, [sp, #20] + 800b6a0: 4620 mov r0, r4 + 800b6a2: 9300 str r3, [sp, #0] + 800b6a4: 440a add r2, r1 + 800b6a6: 4619 mov r1, r3 + 800b6a8: f7ff fecc bl 800b444 + configASSERT( xResult ); + 800b6ac: 2800 cmp r0, #0 + 800b6ae: d199 bne.n 800b5e4 + 800b6b0: f04f 0350 mov.w r3, #80 ; 0x50 + 800b6b4: b672 cpsid i + 800b6b6: f383 8811 msr BASEPRI, r3 + 800b6ba: f3bf 8f6f isb sy + 800b6be: f3bf 8f4f dsb sy + 800b6c2: b662 cpsie i + 800b6c4: e7fe b.n 800b6c4 + pxTimer->ucStatus &= ~tmrSTATUS_IS_ACTIVE; + 800b6c6: f894 3028 ldrb.w r3, [r4, #40] ; 0x28 + pxTimer->ucStatus &= ~tmrSTATUS_IS_ACTIVE; + 800b6ca: f023 0301 bic.w r3, r3, #1 + 800b6ce: f884 3028 strb.w r3, [r4, #40] ; 0x28 + 800b6d2: e787 b.n 800b5e4 + pxTimer->ucStatus |= tmrSTATUS_IS_ACTIVE; + 800b6d4: f894 3028 ldrb.w r3, [r4, #40] ; 0x28 + 800b6d8: f043 0301 orr.w r3, r3, #1 + 800b6dc: f884 3028 strb.w r3, [r4, #40] ; 0x28 + pxTimer->xTimerPeriodInTicks = xMessage.u.xTimerParameters.xMessageValue; + 800b6e0: 9905 ldr r1, [sp, #20] + 800b6e2: 61a1 str r1, [r4, #24] + configASSERT( ( pxTimer->xTimerPeriodInTicks > 0 ) ); + 800b6e4: b951 cbnz r1, 800b6fc + 800b6e6: f04f 0350 mov.w r3, #80 ; 0x50 + 800b6ea: b672 cpsid i + 800b6ec: f383 8811 msr BASEPRI, r3 + 800b6f0: f3bf 8f6f isb sy + 800b6f4: f3bf 8f4f dsb sy + 800b6f8: b662 cpsie i + 800b6fa: e7fe b.n 800b6fa + ( void ) prvInsertTimerInActiveList( pxTimer, ( xTimeNow + pxTimer->xTimerPeriodInTicks ), xTimeNow, xTimeNow ); + 800b6fc: 4603 mov r3, r0 + 800b6fe: 4401 add r1, r0 + 800b700: 4620 mov r0, r4 + 800b702: f7ff fe4d bl 800b3a0 + break; + 800b706: e76d b.n 800b5e4 + if( ( pxTimer->ucStatus & tmrSTATUS_IS_STATICALLY_ALLOCATED ) == ( uint8_t ) 0 ) + 800b708: f894 3028 ldrb.w r3, [r4, #40] ; 0x28 + 800b70c: 079a lsls r2, r3, #30 + 800b70e: d4dc bmi.n 800b6ca + vPortFree( pxTimer ); + 800b710: 4620 mov r0, r4 + 800b712: f7fe f899 bl 8009848 + 800b716: e765 b.n 800b5e4 + 800b718: 2001ace0 .word 0x2001ace0 + 800b71c: 2001ae04 .word 0x2001ae04 + 800b720: 2001ace4 .word 0x2001ace4 + +0800b724 : +jpeg_abort (j_common_ptr cinfo) +{ + int pool; + + /* Do nothing if called on a not-initialized or destroyed JPEG object. */ + if (cinfo->mem == NULL) + 800b724: 6843 ldr r3, [r0, #4] +{ + 800b726: b510 push {r4, lr} + 800b728: 4604 mov r4, r0 + if (cinfo->mem == NULL) + 800b72a: b14b cbz r3, 800b740 + + /* Releasing pools in reverse order might help avoid fragmentation + * with some (brain-damaged) malloc libraries. + */ + for (pool = JPOOL_NUMPOOLS-1; pool > JPOOL_PERMANENT; pool--) { + (*cinfo->mem->free_pool) (cinfo, pool); + 800b72c: 6a5b ldr r3, [r3, #36] ; 0x24 + 800b72e: 2101 movs r1, #1 + 800b730: 4798 blx r3 + } + + /* Reset overall state for possible reuse of object */ + if (cinfo->is_decompressor) { + 800b732: 6923 ldr r3, [r4, #16] + 800b734: b12b cbz r3, 800b742 + cinfo->global_state = DSTATE_START; + 800b736: 23c8 movs r3, #200 ; 0xc8 + 800b738: 6163 str r3, [r4, #20] + /* Try to keep application from accessing now-deleted marker list. + * A bit kludgy to do it here, but this is the most central place. + */ + ((j_decompress_ptr) cinfo)->marker_list = NULL; + 800b73a: 2300 movs r3, #0 + 800b73c: f8c4 3134 str.w r3, [r4, #308] ; 0x134 + } else { + cinfo->global_state = CSTATE_START; + } +} + 800b740: bd10 pop {r4, pc} + cinfo->global_state = CSTATE_START; + 800b742: 2364 movs r3, #100 ; 0x64 + 800b744: 6163 str r3, [r4, #20] + 800b746: e7fb b.n 800b740 + +0800b748 : +GLOBAL(void) +jpeg_destroy (j_common_ptr cinfo) +{ + /* We need only tell the memory manager to release everything. */ + /* NB: mem pointer is NULL if memory mgr failed to initialize. */ + if (cinfo->mem != NULL) + 800b748: 6843 ldr r3, [r0, #4] +{ + 800b74a: b510 push {r4, lr} + 800b74c: 4604 mov r4, r0 + if (cinfo->mem != NULL) + 800b74e: b10b cbz r3, 800b754 + (*cinfo->mem->self_destruct) (cinfo); + 800b750: 6a9b ldr r3, [r3, #40] ; 0x28 + 800b752: 4798 blx r3 + cinfo->mem = NULL; /* be safe if jpeg_destroy is called twice */ + 800b754: 2300 movs r3, #0 + 800b756: 6063 str r3, [r4, #4] + cinfo->global_state = 0; /* mark it destroyed */ + 800b758: 6163 str r3, [r4, #20] +} + 800b75a: bd10 pop {r4, pc} + +0800b75c : + * (Would jutils.c be a more reasonable place to put these?) + */ + +GLOBAL(JQUANT_TBL *) +jpeg_alloc_quant_table (j_common_ptr cinfo) +{ + 800b75c: b508 push {r3, lr} + JQUANT_TBL *tbl; + + tbl = (JQUANT_TBL *) + (*cinfo->mem->alloc_small) (cinfo, JPOOL_PERMANENT, SIZEOF(JQUANT_TBL)); + 800b75e: 6843 ldr r3, [r0, #4] + 800b760: 2284 movs r2, #132 ; 0x84 + 800b762: 2100 movs r1, #0 + 800b764: 681b ldr r3, [r3, #0] + 800b766: 4798 blx r3 + tbl->sent_table = FALSE; /* make sure this is false in any new table */ + 800b768: 2200 movs r2, #0 + 800b76a: f8c0 2080 str.w r2, [r0, #128] ; 0x80 + return tbl; +} + 800b76e: bd08 pop {r3, pc} + +0800b770 : + + +GLOBAL(JHUFF_TBL *) +jpeg_alloc_huff_table (j_common_ptr cinfo) +{ + 800b770: b508 push {r3, lr} + JHUFF_TBL *tbl; + + tbl = (JHUFF_TBL *) + (*cinfo->mem->alloc_small) (cinfo, JPOOL_PERMANENT, SIZEOF(JHUFF_TBL)); + 800b772: 6843 ldr r3, [r0, #4] + 800b774: f44f 728c mov.w r2, #280 ; 0x118 + 800b778: 2100 movs r1, #0 + 800b77a: 681b ldr r3, [r3, #0] + 800b77c: 4798 blx r3 + tbl->sent_table = FALSE; /* make sure this is false in any new table */ + 800b77e: 2200 movs r2, #0 + 800b780: f8c0 2114 str.w r2, [r0, #276] ; 0x114 + return tbl; +} + 800b784: bd08 pop {r3, pc} + +0800b786 : +jpeg_CreateDecompress (j_decompress_ptr cinfo, int version, size_t structsize) +{ + int i; + + /* Guard against version mismatches between library and caller. */ + cinfo->mem = NULL; /* so jpeg_destroy knows mem mgr not called */ + 800b786: 2300 movs r3, #0 + if (version != JPEG_LIB_VERSION) + 800b788: 2950 cmp r1, #80 ; 0x50 +{ + 800b78a: b570 push {r4, r5, r6, lr} + 800b78c: 4604 mov r4, r0 + 800b78e: 4615 mov r5, r2 + cinfo->mem = NULL; /* so jpeg_destroy knows mem mgr not called */ + 800b790: 6043 str r3, [r0, #4] + if (version != JPEG_LIB_VERSION) + 800b792: d007 beq.n 800b7a4 + ERREXIT2(cinfo, JERR_BAD_LIB_VERSION, JPEG_LIB_VERSION, version); + 800b794: 6803 ldr r3, [r0, #0] + 800b796: 260d movs r6, #13 + 800b798: 2250 movs r2, #80 ; 0x50 + 800b79a: 61d9 str r1, [r3, #28] + 800b79c: e9c3 6205 strd r6, r2, [r3, #20] + 800b7a0: 681b ldr r3, [r3, #0] + 800b7a2: 4798 blx r3 + if (structsize != SIZEOF(struct jpeg_decompress_struct)) + 800b7a4: f5b5 7ff4 cmp.w r5, #488 ; 0x1e8 + 800b7a8: d009 beq.n 800b7be + ERREXIT2(cinfo, JERR_BAD_STRUCT_SIZE, + 800b7aa: 6823 ldr r3, [r4, #0] + 800b7ac: 2116 movs r1, #22 + 800b7ae: f44f 72f4 mov.w r2, #488 ; 0x1e8 + 800b7b2: 4620 mov r0, r4 + 800b7b4: 61dd str r5, [r3, #28] + 800b7b6: e9c3 1205 strd r1, r2, [r3, #20] + 800b7ba: 681b ldr r3, [r3, #0] + 800b7bc: 4798 blx r3 + * complain here. + */ + { + struct jpeg_error_mgr * err = cinfo->err; + void * client_data = cinfo->client_data; /* ignore Purify complaint here */ + MEMZERO(cinfo, SIZEOF(struct jpeg_decompress_struct)); + 800b7be: f44f 72f4 mov.w r2, #488 ; 0x1e8 + 800b7c2: 2100 movs r1, #0 + 800b7c4: 4620 mov r0, r4 + struct jpeg_error_mgr * err = cinfo->err; + 800b7c6: 6826 ldr r6, [r4, #0] + void * client_data = cinfo->client_data; /* ignore Purify complaint here */ + 800b7c8: 68e5 ldr r5, [r4, #12] + MEMZERO(cinfo, SIZEOF(struct jpeg_decompress_struct)); + 800b7ca: f029 f8f7 bl 80349bc + cinfo->err = err; + cinfo->client_data = client_data; + } + cinfo->is_decompressor = TRUE; + 800b7ce: 2301 movs r3, #1 + + /* Initialize a memory manager instance for this object */ + jinit_memory_mgr((j_common_ptr) cinfo); + 800b7d0: 4620 mov r0, r4 + cinfo->err = err; + 800b7d2: 6026 str r6, [r4, #0] + cinfo->is_decompressor = TRUE; + 800b7d4: 6123 str r3, [r4, #16] + cinfo->client_data = client_data; + 800b7d6: 60e5 str r5, [r4, #12] + jinit_memory_mgr((j_common_ptr) cinfo); + 800b7d8: f00b fe44 bl 8017464 + + /* Zero out pointers to permanent structures. */ + cinfo->progress = NULL; + 800b7dc: 2300 movs r3, #0 + + /* Initialize marker processor so application can override methods + * for COM, APPn markers before calling jpeg_read_header. + */ + cinfo->marker_list = NULL; + jinit_marker_reader(cinfo); + 800b7de: 4620 mov r0, r4 + cinfo->progress = NULL; + 800b7e0: 60a3 str r3, [r4, #8] + cinfo->src = NULL; + 800b7e2: 61a3 str r3, [r4, #24] + cinfo->dc_huff_tbl_ptrs[i] = NULL; + 800b7e4: f8c4 30b4 str.w r3, [r4, #180] ; 0xb4 + cinfo->ac_huff_tbl_ptrs[i] = NULL; + 800b7e8: f8c4 30c4 str.w r3, [r4, #196] ; 0xc4 + cinfo->dc_huff_tbl_ptrs[i] = NULL; + 800b7ec: f8c4 30b8 str.w r3, [r4, #184] ; 0xb8 + cinfo->ac_huff_tbl_ptrs[i] = NULL; + 800b7f0: f8c4 30c8 str.w r3, [r4, #200] ; 0xc8 + cinfo->dc_huff_tbl_ptrs[i] = NULL; + 800b7f4: f8c4 30bc str.w r3, [r4, #188] ; 0xbc + cinfo->ac_huff_tbl_ptrs[i] = NULL; + 800b7f8: f8c4 30cc str.w r3, [r4, #204] ; 0xcc + cinfo->dc_huff_tbl_ptrs[i] = NULL; + 800b7fc: f8c4 30c0 str.w r3, [r4, #192] ; 0xc0 + cinfo->ac_huff_tbl_ptrs[i] = NULL; + 800b800: f8c4 30d0 str.w r3, [r4, #208] ; 0xd0 + cinfo->marker_list = NULL; + 800b804: f8c4 3134 str.w r3, [r4, #308] ; 0x134 + cinfo->quant_tbl_ptrs[i] = NULL; + 800b808: e9c4 3329 strd r3, r3, [r4, #164] ; 0xa4 + 800b80c: e9c4 332b strd r3, r3, [r4, #172] ; 0xac + jinit_marker_reader(cinfo); + 800b810: f005 f88c bl 801092c + + /* And initialize the overall input controller. */ + jinit_input_controller(cinfo); + 800b814: 4620 mov r0, r4 + 800b816: f003 fd91 bl 800f33c + + /* OK, I'm ready */ + cinfo->global_state = DSTATE_START; + 800b81a: 23c8 movs r3, #200 ; 0xc8 + 800b81c: 6163 str r3, [r4, #20] +} + 800b81e: bd70 pop {r4, r5, r6, pc} + +0800b820 : + */ + +GLOBAL(void) +jpeg_destroy_decompress (j_decompress_ptr cinfo) +{ + jpeg_destroy((j_common_ptr) cinfo); /* use common routine */ + 800b820: f7ff bf92 b.w 800b748 + +0800b824 : +jpeg_consume_input (j_decompress_ptr cinfo) +{ + int retcode = JPEG_SUSPENDED; + + /* NB: every possible DSTATE value should be listed in this switch */ + switch (cinfo->global_state) { + 800b824: 6942 ldr r2, [r0, #20] + 800b826: f1a2 03c8 sub.w r3, r2, #200 ; 0xc8 +{ + 800b82a: b570 push {r4, r5, r6, lr} + 800b82c: 4604 mov r4, r0 + switch (cinfo->global_state) { + 800b82e: 2b0a cmp r3, #10 + 800b830: f200 809f bhi.w 800b972 + 800b834: e8df f003 tbb [pc, r3] + 800b838: 97a51006 .word 0x97a51006 + 800b83c: 97979797 .word 0x97979797 + 800b840: 9d97 .short 0x9d97 + 800b842: 97 .byte 0x97 + 800b843: 00 .byte 0x00 + case DSTATE_START: + /* Start-of-datastream actions: reset appropriate modules */ + (*cinfo->inputctl->reset_input_controller) (cinfo); + 800b844: f8d0 31c8 ldr.w r3, [r0, #456] ; 0x1c8 + 800b848: 685b ldr r3, [r3, #4] + 800b84a: 4798 blx r3 + /* Initialize application's data source module */ + (*cinfo->src->init_source) (cinfo); + 800b84c: 69a3 ldr r3, [r4, #24] + 800b84e: 4620 mov r0, r4 + 800b850: 689b ldr r3, [r3, #8] + 800b852: 4798 blx r3 + cinfo->global_state = DSTATE_INHEADER; + 800b854: 23c9 movs r3, #201 ; 0xc9 + 800b856: 6163 str r3, [r4, #20] + /*FALLTHROUGH*/ + case DSTATE_INHEADER: + retcode = (*cinfo->inputctl->consume_input) (cinfo); + 800b858: f8d4 31c8 ldr.w r3, [r4, #456] ; 0x1c8 + 800b85c: 4620 mov r0, r4 + 800b85e: 681b ldr r3, [r3, #0] + 800b860: 4798 blx r3 + if (retcode == JPEG_REACHED_SOS) { /* Found SOS, prepare to decompress */ + 800b862: 2801 cmp r0, #1 + retcode = (*cinfo->inputctl->consume_input) (cinfo); + 800b864: 4606 mov r6, r0 + if (retcode == JPEG_REACHED_SOS) { /* Found SOS, prepare to decompress */ + 800b866: d12a bne.n 800b8be + switch (cinfo->num_components) { + 800b868: 6a65 ldr r5, [r4, #36] ; 0x24 + 800b86a: 2d03 cmp r5, #3 + 800b86c: d029 beq.n 800b8c2 + 800b86e: 2d04 cmp r5, #4 + 800b870: d05f beq.n 800b932 + 800b872: 2d01 cmp r5, #1 + 800b874: d173 bne.n 800b95e + break; + 800b876: 4603 mov r3, r0 + cinfo->jpeg_color_space = JCS_GRAYSCALE; + 800b878: f884 0028 strb.w r0, [r4, #40] ; 0x28 + cinfo->out_color_space = JCS_GRAYSCALE; + 800b87c: f884 3029 strb.w r3, [r4, #41] ; 0x29 + cinfo->output_gamma = 1.0; + 800b880: 2200 movs r2, #0 + cinfo->scale_num = cinfo->block_size; /* 1:1 scaling */ + 800b882: f8d4 31a8 ldr.w r3, [r4, #424] ; 0x1a8 + cinfo->dither_mode = JDITHER_FS; + 800b886: 2102 movs r1, #2 + cinfo->scale_denom = cinfo->block_size; + 800b888: e9c4 330b strd r3, r3, [r4, #44] ; 0x2c + cinfo->output_gamma = 1.0; + 800b88c: 4b3e ldr r3, [pc, #248] ; (800b988 ) + cinfo->dither_mode = JDITHER_FS; + 800b88e: f884 1058 strb.w r1, [r4, #88] ; 0x58 + cinfo->output_gamma = 1.0; + 800b892: e9c4 230e strd r2, r3, [r4, #56] ; 0x38 + cinfo->buffered_image = FALSE; + 800b896: 2300 movs r3, #0 + cinfo->do_fancy_upsampling = TRUE; + 800b898: 2201 movs r2, #1 + cinfo->raw_data_out = FALSE; + 800b89a: e9c4 3310 strd r3, r3, [r4, #64] ; 0x40 + cinfo->dct_method = JDCT_DEFAULT; + 800b89e: f884 3048 strb.w r3, [r4, #72] ; 0x48 + cinfo->quantize_colors = FALSE; + 800b8a2: 6563 str r3, [r4, #84] ; 0x54 + cinfo->two_pass_quantize = TRUE; + 800b8a4: 65e2 str r2, [r4, #92] ; 0x5c + cinfo->colormap = NULL; + 800b8a6: f8c4 3088 str.w r3, [r4, #136] ; 0x88 + cinfo->enable_2pass_quant = FALSE; + 800b8aa: 66e3 str r3, [r4, #108] ; 0x6c + cinfo->do_block_smoothing = TRUE; + 800b8ac: e9c4 2213 strd r2, r2, [r4, #76] ; 0x4c + cinfo->enable_external_quant = FALSE; + 800b8b0: e9c4 3319 strd r3, r3, [r4, #100] ; 0x64 + cinfo->desired_number_of_colors = 256; + 800b8b4: f44f 7280 mov.w r2, #256 ; 0x100 + /* Set up default parameters based on header data */ + default_decompress_parms(cinfo); + /* Set global state: ready for start_decompress */ + cinfo->global_state = DSTATE_READY; + 800b8b8: 23ca movs r3, #202 ; 0xca + cinfo->desired_number_of_colors = 256; + 800b8ba: 6622 str r2, [r4, #96] ; 0x60 + cinfo->global_state = DSTATE_READY; + 800b8bc: 6163 str r3, [r4, #20] + break; + default: + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + } + return retcode; +} + 800b8be: 4630 mov r0, r6 + 800b8c0: bd70 pop {r4, r5, r6, pc} + if (cinfo->saw_JFIF_marker) { + 800b8c2: f8d4 311c ldr.w r3, [r4, #284] ; 0x11c + 800b8c6: b983 cbnz r3, 800b8ea + } else if (cinfo->saw_Adobe_marker) { + 800b8c8: f8d4 3128 ldr.w r3, [r4, #296] ; 0x128 + 800b8cc: b18b cbz r3, 800b8f2 + switch (cinfo->Adobe_transform) { + 800b8ce: f894 212c ldrb.w r2, [r4, #300] ; 0x12c + 800b8d2: b362 cbz r2, 800b92e + 800b8d4: 2a01 cmp r2, #1 + 800b8d6: d008 beq.n 800b8ea + WARNMS1(cinfo, JWRN_ADOBE_XFORM, cinfo->Adobe_transform); + 800b8d8: 6823 ldr r3, [r4, #0] + 800b8da: 2174 movs r1, #116 ; 0x74 + 800b8dc: 4620 mov r0, r4 + switch (cinfo->Adobe_transform) { + 800b8de: e9c3 1205 strd r1, r2, [r3, #20] + WARNMS1(cinfo, JWRN_ADOBE_XFORM, cinfo->Adobe_transform); + 800b8e2: 685b ldr r3, [r3, #4] + 800b8e4: f04f 31ff mov.w r1, #4294967295 + 800b8e8: 4798 blx r3 + break; + 800b8ea: 2302 movs r3, #2 + cinfo->jpeg_color_space = JCS_YCbCr; /* JFIF implies YCbCr */ + 800b8ec: f884 5028 strb.w r5, [r4, #40] ; 0x28 + break; + 800b8f0: e7c4 b.n 800b87c + int cid0 = cinfo->comp_info[0].component_id; + 800b8f2: f8d4 30d8 ldr.w r3, [r4, #216] ; 0xd8 + 800b8f6: 6819 ldr r1, [r3, #0] + int cid1 = cinfo->comp_info[1].component_id; + 800b8f8: 6d9a ldr r2, [r3, #88] ; 0x58 + if (cid0 == 1 && cid1 == 2 && cid2 == 3) + 800b8fa: 2901 cmp r1, #1 + int cid2 = cinfo->comp_info[2].component_id; + 800b8fc: f8d3 50b0 ldr.w r5, [r3, #176] ; 0xb0 + if (cid0 == 1 && cid1 == 2 && cid2 == 3) + 800b900: d10f bne.n 800b922 + 800b902: 2a02 cmp r2, #2 + 800b904: d101 bne.n 800b90a + 800b906: 2d03 cmp r5, #3 + 800b908: d0ef beq.n 800b8ea + TRACEMS3(cinfo, 1, JTRC_UNKNOWN_IDS, cid0, cid1, cid2); + 800b90a: 6823 ldr r3, [r4, #0] + 800b90c: 4620 mov r0, r4 + 800b90e: e9c3 1206 strd r1, r2, [r3, #24] + 800b912: 2271 movs r2, #113 ; 0x71 + 800b914: 621d str r5, [r3, #32] + 800b916: 2101 movs r1, #1 + 800b918: 2503 movs r5, #3 + 800b91a: 615a str r2, [r3, #20] + 800b91c: 685b ldr r3, [r3, #4] + 800b91e: 4798 blx r3 + cinfo->jpeg_color_space = JCS_YCbCr; /* assume it's YCbCr */ + 800b920: e7e3 b.n 800b8ea + else if (cid0 == 82 && cid1 == 71 && cid2 == 66) + 800b922: 2952 cmp r1, #82 ; 0x52 + 800b924: d1f1 bne.n 800b90a + 800b926: 2a47 cmp r2, #71 ; 0x47 + 800b928: d1ef bne.n 800b90a + 800b92a: 2d42 cmp r5, #66 ; 0x42 + 800b92c: d1ed bne.n 800b90a + 800b92e: 2502 movs r5, #2 + 800b930: e7db b.n 800b8ea + if (cinfo->saw_Adobe_marker) { + 800b932: f8d4 3128 ldr.w r3, [r4, #296] ; 0x128 + 800b936: b173 cbz r3, 800b956 + switch (cinfo->Adobe_transform) { + 800b938: f894 212c ldrb.w r2, [r4, #300] ; 0x12c + 800b93c: b15a cbz r2, 800b956 + 800b93e: 2a02 cmp r2, #2 + 800b940: d008 beq.n 800b954 + WARNMS1(cinfo, JWRN_ADOBE_XFORM, cinfo->Adobe_transform); + 800b942: 6823 ldr r3, [r4, #0] + 800b944: 2174 movs r1, #116 ; 0x74 + 800b946: 4620 mov r0, r4 + switch (cinfo->Adobe_transform) { + 800b948: e9c3 1205 strd r1, r2, [r3, #20] + WARNMS1(cinfo, JWRN_ADOBE_XFORM, cinfo->Adobe_transform); + 800b94c: 685b ldr r3, [r3, #4] + 800b94e: f04f 31ff mov.w r1, #4294967295 + 800b952: 4798 blx r3 + break; + 800b954: 2505 movs r5, #5 + break; + 800b956: 2304 movs r3, #4 + cinfo->jpeg_color_space = JCS_CMYK; + 800b958: f884 5028 strb.w r5, [r4, #40] ; 0x28 + break; + 800b95c: e78e b.n 800b87c + cinfo->jpeg_color_space = JCS_UNKNOWN; + 800b95e: 2300 movs r3, #0 + 800b960: f884 3028 strb.w r3, [r4, #40] ; 0x28 + break; + 800b964: e78a b.n 800b87c + retcode = (*cinfo->inputctl->consume_input) (cinfo); + 800b966: f8d0 31c8 ldr.w r3, [r0, #456] ; 0x1c8 +} + 800b96a: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} + retcode = (*cinfo->inputctl->consume_input) (cinfo); + 800b96e: 681b ldr r3, [r3, #0] + 800b970: 4718 bx r3 + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + 800b972: 6803 ldr r3, [r0, #0] + 800b974: 2115 movs r1, #21 + int retcode = JPEG_SUSPENDED; + 800b976: 2600 movs r6, #0 + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + 800b978: e9c3 1205 strd r1, r2, [r3, #20] + 800b97c: 681b ldr r3, [r3, #0] + 800b97e: 4798 blx r3 + 800b980: e79d b.n 800b8be + switch (cinfo->global_state) { + 800b982: 2601 movs r6, #1 + return retcode; + 800b984: e79b b.n 800b8be + 800b986: bf00 nop + 800b988: 3ff00000 .word 0x3ff00000 + +0800b98c : + if (cinfo->global_state != DSTATE_START && + 800b98c: 6942 ldr r2, [r0, #20] + 800b98e: f1a2 03c8 sub.w r3, r2, #200 ; 0xc8 + 800b992: 2b01 cmp r3, #1 +{ + 800b994: b570 push {r4, r5, r6, lr} + 800b996: 4604 mov r4, r0 + 800b998: 460e mov r6, r1 + if (cinfo->global_state != DSTATE_START && + 800b99a: d905 bls.n 800b9a8 + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + 800b99c: 6803 ldr r3, [r0, #0] + 800b99e: 2115 movs r1, #21 + 800b9a0: e9c3 1205 strd r1, r2, [r3, #20] + 800b9a4: 681b ldr r3, [r3, #0] + 800b9a6: 4798 blx r3 + retcode = jpeg_consume_input(cinfo); + 800b9a8: 4620 mov r0, r4 + 800b9aa: f7ff ff3b bl 800b824 + switch (retcode) { + 800b9ae: 2801 cmp r0, #1 + retcode = jpeg_consume_input(cinfo); + 800b9b0: 4605 mov r5, r0 + switch (retcode) { + 800b9b2: d00b beq.n 800b9cc + 800b9b4: 2802 cmp r0, #2 + 800b9b6: d109 bne.n 800b9cc + if (require_image) /* Complain if application wanted an image */ + 800b9b8: b12e cbz r6, 800b9c6 + ERREXIT(cinfo, JERR_NO_IMAGE); + 800b9ba: 6823 ldr r3, [r4, #0] + 800b9bc: 2235 movs r2, #53 ; 0x35 + 800b9be: 4620 mov r0, r4 + 800b9c0: 615a str r2, [r3, #20] + 800b9c2: 681b ldr r3, [r3, #0] + 800b9c4: 4798 blx r3 + jpeg_abort((j_common_ptr) cinfo); /* sets state = DSTATE_START */ + 800b9c6: 4620 mov r0, r4 + 800b9c8: f7ff feac bl 800b724 +} + 800b9cc: 4628 mov r0, r5 + 800b9ce: bd70 pop {r4, r5, r6, pc} + +0800b9d0 : + */ + +GLOBAL(boolean) +jpeg_finish_decompress (j_decompress_ptr cinfo) +{ + if ((cinfo->global_state == DSTATE_SCANNING || + 800b9d0: 6943 ldr r3, [r0, #20] + 800b9d2: f1a3 02cd sub.w r2, r3, #205 ; 0xcd + 800b9d6: 2a01 cmp r2, #1 +{ + 800b9d8: b510 push {r4, lr} + 800b9da: 4604 mov r4, r0 + if ((cinfo->global_state == DSTATE_SCANNING || + 800b9dc: d81f bhi.n 800ba1e + cinfo->global_state == DSTATE_RAW_OK) && ! cinfo->buffered_image) { + 800b9de: 6c02 ldr r2, [r0, #64] ; 0x40 + 800b9e0: bb0a cbnz r2, 800ba26 + /* Terminate final pass of non-buffered mode */ + if (cinfo->output_scanline < cinfo->output_height) + 800b9e2: f8d0 208c ldr.w r2, [r0, #140] ; 0x8c + 800b9e6: 6f43 ldr r3, [r0, #116] ; 0x74 + 800b9e8: 429a cmp r2, r3 + 800b9ea: d204 bcs.n 800b9f6 + ERREXIT(cinfo, JERR_TOO_LITTLE_DATA); + 800b9ec: 6803 ldr r3, [r0, #0] + 800b9ee: 2245 movs r2, #69 ; 0x45 + 800b9f0: 615a str r2, [r3, #20] + 800b9f2: 681b ldr r3, [r3, #0] + 800b9f4: 4798 blx r3 + (*cinfo->master->finish_output_pass) (cinfo); + 800b9f6: f8d4 31b8 ldr.w r3, [r4, #440] ; 0x1b8 + 800b9fa: 4620 mov r0, r4 + 800b9fc: 685b ldr r3, [r3, #4] + 800b9fe: 4798 blx r3 + cinfo->global_state = DSTATE_STOPPING; + } else if (cinfo->global_state == DSTATE_BUFIMAGE) { + /* Finishing after a buffered-image operation */ + cinfo->global_state = DSTATE_STOPPING; + 800ba00: 23d2 movs r3, #210 ; 0xd2 + 800ba02: 6163 str r3, [r4, #20] + } else if (cinfo->global_state != DSTATE_STOPPING) { + /* STOPPING = repeat call after a suspension, anything else is error */ + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + } + /* Read until EOI */ + while (! cinfo->inputctl->eoi_reached) { + 800ba04: f8d4 31c8 ldr.w r3, [r4, #456] ; 0x1c8 + 800ba08: 695a ldr r2, [r3, #20] + 800ba0a: b1a2 cbz r2, 800ba36 + if ((*cinfo->inputctl->consume_input) (cinfo) == JPEG_SUSPENDED) + return FALSE; /* Suspend, come back later */ + } + /* Do final cleanup */ + (*cinfo->src->term_source) (cinfo); + 800ba0c: 69a3 ldr r3, [r4, #24] + 800ba0e: 4620 mov r0, r4 + 800ba10: 699b ldr r3, [r3, #24] + 800ba12: 4798 blx r3 + /* We can use jpeg_abort to release memory and reset global_state */ + jpeg_abort((j_common_ptr) cinfo); + 800ba14: 4620 mov r0, r4 + 800ba16: f7ff fe85 bl 800b724 + return TRUE; + 800ba1a: 2001 movs r0, #1 + 800ba1c: e010 b.n 800ba40 + } else if (cinfo->global_state == DSTATE_BUFIMAGE) { + 800ba1e: 2bcf cmp r3, #207 ; 0xcf + 800ba20: d0ee beq.n 800ba00 + } else if (cinfo->global_state != DSTATE_STOPPING) { + 800ba22: 2bd2 cmp r3, #210 ; 0xd2 + 800ba24: d0ee beq.n 800ba04 + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + 800ba26: 6822 ldr r2, [r4, #0] + 800ba28: 2115 movs r1, #21 + 800ba2a: 4620 mov r0, r4 + 800ba2c: e9c2 1305 strd r1, r3, [r2, #20] + 800ba30: 6813 ldr r3, [r2, #0] + 800ba32: 4798 blx r3 + 800ba34: e7e6 b.n 800ba04 + if ((*cinfo->inputctl->consume_input) (cinfo) == JPEG_SUSPENDED) + 800ba36: 681b ldr r3, [r3, #0] + 800ba38: 4620 mov r0, r4 + 800ba3a: 4798 blx r3 + 800ba3c: 2800 cmp r0, #0 + 800ba3e: d1e1 bne.n 800ba04 +} + 800ba40: bd10 pop {r4, pc} + +0800ba42 : + */ + +LOCAL(boolean) +output_pass_setup (j_decompress_ptr cinfo) +{ + if (cinfo->global_state != DSTATE_PRESCAN) { + 800ba42: 6943 ldr r3, [r0, #20] + 800ba44: 2bcc cmp r3, #204 ; 0xcc +{ + 800ba46: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} + 800ba4a: 4604 mov r4, r0 + if (cinfo->global_state != DSTATE_PRESCAN) { + 800ba4c: d008 beq.n 800ba60 + /* First call: do pass setup */ + (*cinfo->master->prepare_for_output_pass) (cinfo); + 800ba4e: f8d0 31b8 ldr.w r3, [r0, #440] ; 0x1b8 + 800ba52: 681b ldr r3, [r3, #0] + 800ba54: 4798 blx r3 + cinfo->output_scanline = 0; + 800ba56: 2300 movs r3, #0 + 800ba58: f8c4 308c str.w r3, [r4, #140] ; 0x8c + cinfo->global_state = DSTATE_PRESCAN; + 800ba5c: 23cc movs r3, #204 ; 0xcc + 800ba5e: 6163 str r3, [r4, #20] + cinfo->progress->pass_limit = (long) cinfo->output_height; + (*cinfo->progress->progress_monitor) ((j_common_ptr) cinfo); + } + /* Process some data */ + last_scanline = cinfo->output_scanline; + (*cinfo->main->process_data) (cinfo, (JSAMPARRAY) NULL, + 800ba60: f104 058c add.w r5, r4, #140 ; 0x8c + 800ba64: 2600 movs r6, #0 + while (cinfo->master->is_dummy_pass) { + 800ba66: f8d4 31b8 ldr.w r3, [r4, #440] ; 0x1b8 + 800ba6a: 689b ldr r3, [r3, #8] + 800ba6c: b9f3 cbnz r3, 800baac +#endif /* QUANT_2PASS_SUPPORTED */ + } + /* Ready for application to drive output pass through + * jpeg_read_scanlines or jpeg_read_raw_data. + */ + cinfo->global_state = cinfo->raw_data_out ? DSTATE_RAW_OK : DSTATE_SCANNING; + 800ba6e: 6c63 ldr r3, [r4, #68] ; 0x44 + return TRUE; + 800ba70: 2001 movs r0, #1 + cinfo->global_state = cinfo->raw_data_out ? DSTATE_RAW_OK : DSTATE_SCANNING; + 800ba72: 2b00 cmp r3, #0 + 800ba74: bf14 ite ne + 800ba76: 23ce movne r3, #206 ; 0xce + 800ba78: 23cd moveq r3, #205 ; 0xcd + 800ba7a: 6163 str r3, [r4, #20] +} + 800ba7c: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + if (cinfo->progress != NULL) { + 800ba80: 68a3 ldr r3, [r4, #8] + 800ba82: b123 cbz r3, 800ba8e + (*cinfo->progress->progress_monitor) ((j_common_ptr) cinfo); + 800ba84: 4620 mov r0, r4 + cinfo->progress->pass_limit = (long) cinfo->output_height; + 800ba86: e9c3 1201 strd r1, r2, [r3, #4] + (*cinfo->progress->progress_monitor) ((j_common_ptr) cinfo); + 800ba8a: 681b ldr r3, [r3, #0] + 800ba8c: 4798 blx r3 + (*cinfo->main->process_data) (cinfo, (JSAMPARRAY) NULL, + 800ba8e: f8d4 31bc ldr.w r3, [r4, #444] ; 0x1bc + 800ba92: 462a mov r2, r5 + 800ba94: 4620 mov r0, r4 + last_scanline = cinfo->output_scanline; + 800ba96: f8d4 708c ldr.w r7, [r4, #140] ; 0x8c + (*cinfo->main->process_data) (cinfo, (JSAMPARRAY) NULL, + 800ba9a: f8d3 8004 ldr.w r8, [r3, #4] + 800ba9e: 2300 movs r3, #0 + 800baa0: 4619 mov r1, r3 + 800baa2: 47c0 blx r8 + if (cinfo->output_scanline == last_scanline) + 800baa4: f8d4 308c ldr.w r3, [r4, #140] ; 0x8c + 800baa8: 42bb cmp r3, r7 + 800baaa: d011 beq.n 800bad0 + while (cinfo->output_scanline < cinfo->output_height) { + 800baac: f8d4 108c ldr.w r1, [r4, #140] ; 0x8c + 800bab0: 6f62 ldr r2, [r4, #116] ; 0x74 + 800bab2: 4291 cmp r1, r2 + 800bab4: d3e4 bcc.n 800ba80 + (*cinfo->master->finish_output_pass) (cinfo); + 800bab6: f8d4 31b8 ldr.w r3, [r4, #440] ; 0x1b8 + 800baba: 4620 mov r0, r4 + 800babc: 685b ldr r3, [r3, #4] + 800babe: 4798 blx r3 + (*cinfo->master->prepare_for_output_pass) (cinfo); + 800bac0: f8d4 31b8 ldr.w r3, [r4, #440] ; 0x1b8 + 800bac4: 4620 mov r0, r4 + 800bac6: 681b ldr r3, [r3, #0] + 800bac8: 4798 blx r3 + cinfo->output_scanline = 0; + 800baca: f8c4 608c str.w r6, [r4, #140] ; 0x8c + 800bace: e7ca b.n 800ba66 + return FALSE; /* No progress made, must suspend */ + 800bad0: 2000 movs r0, #0 + 800bad2: e7d3 b.n 800ba7c + +0800bad4 : + if (cinfo->global_state == DSTATE_READY) { + 800bad4: 6943 ldr r3, [r0, #20] + 800bad6: 2bca cmp r3, #202 ; 0xca +{ + 800bad8: b510 push {r4, lr} + 800bada: 4604 mov r4, r0 + if (cinfo->global_state == DSTATE_READY) { + 800badc: d109 bne.n 800baf2 + jinit_master_decompress(cinfo); + 800bade: f005 f8cf bl 8010c80 + if (cinfo->buffered_image) { + 800bae2: 6c23 ldr r3, [r4, #64] ; 0x40 + 800bae4: b11b cbz r3, 800baee + cinfo->global_state = DSTATE_BUFIMAGE; + 800bae6: 23cf movs r3, #207 ; 0xcf + return TRUE; + 800bae8: 2001 movs r0, #1 + cinfo->global_state = DSTATE_BUFIMAGE; + 800baea: 6163 str r3, [r4, #20] +} + 800baec: bd10 pop {r4, pc} + cinfo->global_state = DSTATE_PRELOAD; + 800baee: 23cb movs r3, #203 ; 0xcb + 800baf0: 6163 str r3, [r4, #20] + if (cinfo->global_state == DSTATE_PRELOAD) { + 800baf2: 6962 ldr r2, [r4, #20] + 800baf4: 2acb cmp r2, #203 ; 0xcb + 800baf6: d12c bne.n 800bb52 + if (cinfo->inputctl->has_multiple_scans) { + 800baf8: f8d4 31c8 ldr.w r3, [r4, #456] ; 0x1c8 + 800bafc: 691b ldr r3, [r3, #16] + 800bafe: b1fb cbz r3, 800bb40 + if (cinfo->progress != NULL) + 800bb00: 68a3 ldr r3, [r4, #8] + 800bb02: b113 cbz r3, 800bb0a + (*cinfo->progress->progress_monitor) ((j_common_ptr) cinfo); + 800bb04: 681b ldr r3, [r3, #0] + 800bb06: 4620 mov r0, r4 + 800bb08: 4798 blx r3 + retcode = (*cinfo->inputctl->consume_input) (cinfo); + 800bb0a: f8d4 31c8 ldr.w r3, [r4, #456] ; 0x1c8 + 800bb0e: 4620 mov r0, r4 + 800bb10: 681b ldr r3, [r3, #0] + 800bb12: 4798 blx r3 + if (retcode == JPEG_SUSPENDED) + 800bb14: 2800 cmp r0, #0 + 800bb16: d0e9 beq.n 800baec + if (retcode == JPEG_REACHED_EOI) + 800bb18: 2802 cmp r0, #2 + 800bb1a: d011 beq.n 800bb40 + if (cinfo->progress != NULL && + 800bb1c: 68a3 ldr r3, [r4, #8] + 800bb1e: 2b00 cmp r3, #0 + 800bb20: d0ee beq.n 800bb00 + (retcode == JPEG_ROW_COMPLETED || retcode == JPEG_REACHED_SOS)) { + 800bb22: f020 0002 bic.w r0, r0, #2 + 800bb26: 2801 cmp r0, #1 + 800bb28: d1ea bne.n 800bb00 + if (++cinfo->progress->pass_counter >= cinfo->progress->pass_limit) { + 800bb2a: 685a ldr r2, [r3, #4] + 800bb2c: 6899 ldr r1, [r3, #8] + 800bb2e: 3201 adds r2, #1 + 800bb30: 428a cmp r2, r1 + 800bb32: 605a str r2, [r3, #4] + 800bb34: dbe4 blt.n 800bb00 + cinfo->progress->pass_limit += (long) cinfo->total_iMCU_rows; + 800bb36: f8d4 2148 ldr.w r2, [r4, #328] ; 0x148 + 800bb3a: 440a add r2, r1 + 800bb3c: 609a str r2, [r3, #8] + 800bb3e: e7df b.n 800bb00 + cinfo->output_scan_number = cinfo->input_scan_number; + 800bb40: f8d4 3090 ldr.w r3, [r4, #144] ; 0x90 + 800bb44: f8c4 3098 str.w r3, [r4, #152] ; 0x98 + return output_pass_setup(cinfo); + 800bb48: 4620 mov r0, r4 +} + 800bb4a: e8bd 4010 ldmia.w sp!, {r4, lr} + return output_pass_setup(cinfo); + 800bb4e: f7ff bf78 b.w 800ba42 + } else if (cinfo->global_state != DSTATE_PRESCAN) + 800bb52: 2acc cmp r2, #204 ; 0xcc + 800bb54: d0f8 beq.n 800bb48 + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + 800bb56: 6823 ldr r3, [r4, #0] + 800bb58: 2115 movs r1, #21 + 800bb5a: 4620 mov r0, r4 + 800bb5c: e9c3 1205 strd r1, r2, [r3, #20] + 800bb60: 681b ldr r3, [r3, #0] + 800bb62: 4798 blx r3 + 800bb64: e7f0 b.n 800bb48 + +0800bb66 : + */ + +GLOBAL(JDIMENSION) +jpeg_read_scanlines (j_decompress_ptr cinfo, JSAMPARRAY scanlines, + JDIMENSION max_lines) +{ + 800bb66: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} + 800bb68: 4616 mov r6, r2 + JDIMENSION row_ctr; + + if (cinfo->global_state != DSTATE_SCANNING) + 800bb6a: 6942 ldr r2, [r0, #20] +{ + 800bb6c: 4604 mov r4, r0 + 800bb6e: 460d mov r5, r1 + if (cinfo->global_state != DSTATE_SCANNING) + 800bb70: 2acd cmp r2, #205 ; 0xcd + 800bb72: d005 beq.n 800bb80 + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + 800bb74: 6803 ldr r3, [r0, #0] + 800bb76: 2115 movs r1, #21 + 800bb78: e9c3 1205 strd r1, r2, [r3, #20] + 800bb7c: 681b ldr r3, [r3, #0] + 800bb7e: 4798 blx r3 + if (cinfo->output_scanline >= cinfo->output_height) { + 800bb80: f8d4 208c ldr.w r2, [r4, #140] ; 0x8c + 800bb84: 6f63 ldr r3, [r4, #116] ; 0x74 + 800bb86: 429a cmp r2, r3 + 800bb88: d30a bcc.n 800bba0 + WARNMS(cinfo, JWRN_TOO_MUCH_DATA); + 800bb8a: 6823 ldr r3, [r4, #0] + 800bb8c: 227e movs r2, #126 ; 0x7e + 800bb8e: 4620 mov r0, r4 + 800bb90: f04f 31ff mov.w r1, #4294967295 + 800bb94: 615a str r2, [r3, #20] + 800bb96: 685b ldr r3, [r3, #4] + 800bb98: 4798 blx r3 + return 0; + 800bb9a: 2000 movs r0, #0 + /* Process some data */ + row_ctr = 0; + (*cinfo->main->process_data) (cinfo, scanlines, &row_ctr, max_lines); + cinfo->output_scanline += row_ctr; + return row_ctr; +} + 800bb9c: b003 add sp, #12 + 800bb9e: bdf0 pop {r4, r5, r6, r7, pc} + if (cinfo->progress != NULL) { + 800bba0: 68a0 ldr r0, [r4, #8] + 800bba2: b120 cbz r0, 800bbae + cinfo->progress->pass_limit = (long) cinfo->output_height; + 800bba4: e9c0 2301 strd r2, r3, [r0, #4] + (*cinfo->progress->progress_monitor) ((j_common_ptr) cinfo); + 800bba8: 6803 ldr r3, [r0, #0] + 800bbaa: 4620 mov r0, r4 + 800bbac: 4798 blx r3 + row_ctr = 0; + 800bbae: 2300 movs r3, #0 + (*cinfo->main->process_data) (cinfo, scanlines, &row_ctr, max_lines); + 800bbb0: 4620 mov r0, r4 + 800bbb2: aa01 add r2, sp, #4 + 800bbb4: 4629 mov r1, r5 + row_ctr = 0; + 800bbb6: 9301 str r3, [sp, #4] + (*cinfo->main->process_data) (cinfo, scanlines, &row_ctr, max_lines); + 800bbb8: f8d4 31bc ldr.w r3, [r4, #444] ; 0x1bc + 800bbbc: 685f ldr r7, [r3, #4] + 800bbbe: 4633 mov r3, r6 + 800bbc0: 47b8 blx r7 + cinfo->output_scanline += row_ctr; + 800bbc2: f8d4 308c ldr.w r3, [r4, #140] ; 0x8c + 800bbc6: 9801 ldr r0, [sp, #4] + 800bbc8: 4403 add r3, r0 + 800bbca: f8c4 308c str.w r3, [r4, #140] ; 0x8c + return row_ctr; + 800bbce: e7e5 b.n 800bb9c + +0800bbd0 : + + +LOCAL(int) +get_byte (j_decompress_ptr cinfo) +/* Read next input byte; we do not support suspension in this module. */ +{ + 800bbd0: b538 push {r3, r4, r5, lr} + struct jpeg_source_mgr * src = cinfo->src; + 800bbd2: 6984 ldr r4, [r0, #24] +{ + 800bbd4: 4605 mov r5, r0 + + if (src->bytes_in_buffer == 0) + 800bbd6: 6863 ldr r3, [r4, #4] + 800bbd8: b943 cbnz r3, 800bbec + if (! (*src->fill_input_buffer) (cinfo)) + 800bbda: 68e3 ldr r3, [r4, #12] + 800bbdc: 4798 blx r3 + 800bbde: b928 cbnz r0, 800bbec + ERREXIT(cinfo, JERR_CANT_SUSPEND); + 800bbe0: 682b ldr r3, [r5, #0] + 800bbe2: 2219 movs r2, #25 + 800bbe4: 4628 mov r0, r5 + 800bbe6: 615a str r2, [r3, #20] + 800bbe8: 681b ldr r3, [r3, #0] + 800bbea: 4798 blx r3 + src->bytes_in_buffer--; + 800bbec: 6863 ldr r3, [r4, #4] + 800bbee: 3b01 subs r3, #1 + 800bbf0: 6063 str r3, [r4, #4] + return GETJOCTET(*src->next_input_byte++); + 800bbf2: 6823 ldr r3, [r4, #0] + 800bbf4: 1c5a adds r2, r3, #1 + 800bbf6: 6022 str r2, [r4, #0] +} + 800bbf8: 7818 ldrb r0, [r3, #0] + 800bbfa: bd38 pop {r3, r4, r5, pc} + +0800bbfc : + * derived from Markus Kuhn's JBIG implementation. + */ + +LOCAL(int) +arith_decode (j_decompress_ptr cinfo, unsigned char *st) +{ + 800bbfc: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} + 800bc00: 4680 mov r8, r0 + 800bc02: 460d mov r5, r1 + register arith_entropy_ptr e = (arith_entropy_ptr) cinfo->entropy; + 800bc04: f8d0 41d0 ldr.w r4, [r0, #464] ; 0x1d0 + e->c = (e->c << 8) | data; /* insert data into C register */ + if ((e->ct += 8) < 0) /* update bit shift counter */ + /* Need more initial bytes */ + if (++e->ct == 0) + /* Got 2 initial bytes -> re-init A and exit loop */ + e->a = 0x8000L; /* => e->a = 0x10000L after loop exit */ + 800bc08: f44f 4700 mov.w r7, #32768 ; 0x8000 + if (--e->ct < 0) { + 800bc0c: e9d4 2303 ldrd r2, r3, [r4, #12] + while (e->a < 0x8000L) { + 800bc10: f5b2 4f00 cmp.w r2, #32768 ; 0x8000 + 800bc14: db1c blt.n 800bc50 + } + + /* Fetch values from our compact representation of Table D.3(D.2): + * Qe values and probability estimation state machine + */ + sv = *st; + 800bc16: 7828 ldrb r0, [r5, #0] + qe = jpeg_aritab[sv & 0x7F]; /* => Qe_Value */ + 800bc18: 4929 ldr r1, [pc, #164] ; (800bcc0 ) + 800bc1a: f000 067f and.w r6, r0, #127 ; 0x7f + + /* Decode & estimation procedures per sections D.2.4 & D.2.5 */ + temp = e->a - qe; + e->a = temp; + temp <<= e->ct; + if (e->c >= temp) { + 800bc1e: 68a7 ldr r7, [r4, #8] + qe = jpeg_aritab[sv & 0x7F]; /* => Qe_Value */ + 800bc20: f851 1026 ldr.w r1, [r1, r6, lsl #2] + temp = e->a - qe; + 800bc24: eba2 4221 sub.w r2, r2, r1, asr #16 + nl = qe & 0xFF; qe >>= 8; /* Next_Index_LPS + Switch_MPS */ + 800bc28: ea4f 2c21 mov.w ip, r1, asr #8 + temp <<= e->ct; + 800bc2c: fa02 f303 lsl.w r3, r2, r3 + nm = qe & 0xFF; qe >>= 8; /* Next_Index_MPS */ + 800bc30: 140e asrs r6, r1, #16 + e->a = temp; + 800bc32: 60e2 str r2, [r4, #12] + if (e->c >= temp) { + 800bc34: 429f cmp r7, r3 + 800bc36: db34 blt.n 800bca2 + e->c -= temp; + 800bc38: 1aff subs r7, r7, r3 + /* Conditional LPS (less probable symbol) exchange */ + if (e->a < qe) { + 800bc3a: 4296 cmp r6, r2 + e->a = qe; + *st = (sv & 0x80) ^ nm; /* Estimate_after_MPS */ + 800bc3c: f020 037f bic.w r3, r0, #127 ; 0x7f + e->a = qe; + 800bc40: 60e6 str r6, [r4, #12] + e->c -= temp; + 800bc42: 60a7 str r7, [r4, #8] + *st = (sv & 0x80) ^ nm; /* Estimate_after_MPS */ + 800bc44: b25b sxtb r3, r3 + if (e->a < qe) { + 800bc46: dd34 ble.n 800bcb2 + /* Conditional MPS (more probable symbol) exchange */ + if (e->a < qe) { + *st = (sv & 0x80) ^ nl; /* Estimate_after_LPS */ + sv ^= 0x80; /* Exchange LPS/MPS */ + } else { + *st = (sv & 0x80) ^ nm; /* Estimate_after_MPS */ + 800bc48: ea83 030c eor.w r3, r3, ip + 800bc4c: 702b strb r3, [r5, #0] + 800bc4e: e034 b.n 800bcba + if (--e->ct < 0) { + 800bc50: 3b01 subs r3, #1 + 800bc52: 2b00 cmp r3, #0 + 800bc54: 6123 str r3, [r4, #16] + 800bc56: da1a bge.n 800bc8e + if (cinfo->unread_marker) + 800bc58: f8d8 31b4 ldr.w r3, [r8, #436] ; 0x1b4 + 800bc5c: b96b cbnz r3, 800bc7a + data = get_byte(cinfo); /* read next input byte */ + 800bc5e: 4640 mov r0, r8 + 800bc60: f7ff ffb6 bl 800bbd0 + if (data == 0xFF) { /* zero stuff or marker code */ + 800bc64: 28ff cmp r0, #255 ; 0xff + data = get_byte(cinfo); /* read next input byte */ + 800bc66: 4606 mov r6, r0 + if (data == 0xFF) { /* zero stuff or marker code */ + 800bc68: d108 bne.n 800bc7c + do data = get_byte(cinfo); + 800bc6a: 4640 mov r0, r8 + 800bc6c: f7ff ffb0 bl 800bbd0 + while (data == 0xFF); /* swallow extra 0xFF bytes */ + 800bc70: 28ff cmp r0, #255 ; 0xff + 800bc72: d0fa beq.n 800bc6a + if (data == 0) + 800bc74: b110 cbz r0, 800bc7c + cinfo->unread_marker = data; + 800bc76: f8c8 01b4 str.w r0, [r8, #436] ; 0x1b4 + data = 0; /* stuff zero data */ + 800bc7a: 2600 movs r6, #0 + e->c = (e->c << 8) | data; /* insert data into C register */ + 800bc7c: 68a3 ldr r3, [r4, #8] + 800bc7e: ea46 2603 orr.w r6, r6, r3, lsl #8 + if ((e->ct += 8) < 0) /* update bit shift counter */ + 800bc82: 6923 ldr r3, [r4, #16] + 800bc84: f113 0208 adds.w r2, r3, #8 + e->c = (e->c << 8) | data; /* insert data into C register */ + 800bc88: 60a6 str r6, [r4, #8] + if ((e->ct += 8) < 0) /* update bit shift counter */ + 800bc8a: d404 bmi.n 800bc96 + 800bc8c: 6122 str r2, [r4, #16] + e->a <<= 1; + 800bc8e: 68e3 ldr r3, [r4, #12] + 800bc90: 005b lsls r3, r3, #1 + 800bc92: 60e3 str r3, [r4, #12] + 800bc94: e7ba b.n 800bc0c + if (++e->ct == 0) + 800bc96: 3309 adds r3, #9 + 800bc98: 6123 str r3, [r4, #16] + 800bc9a: 2b00 cmp r3, #0 + 800bc9c: d1f7 bne.n 800bc8e + e->a = 0x8000L; /* => e->a = 0x10000L after loop exit */ + 800bc9e: 60e7 str r7, [r4, #12] + 800bca0: e7f5 b.n 800bc8e + } else if (e->a < 0x8000L) { + 800bca2: f5b2 4f00 cmp.w r2, #32768 ; 0x8000 + 800bca6: da08 bge.n 800bcba + *st = (sv & 0x80) ^ nm; /* Estimate_after_MPS */ + 800bca8: f020 037f bic.w r3, r0, #127 ; 0x7f + if (e->a < qe) { + 800bcac: 4296 cmp r6, r2 + *st = (sv & 0x80) ^ nm; /* Estimate_after_MPS */ + 800bcae: b25b sxtb r3, r3 + if (e->a < qe) { + 800bcb0: ddca ble.n 800bc48 + *st = (sv & 0x80) ^ nl; /* Estimate_after_LPS */ + 800bcb2: 404b eors r3, r1 + sv ^= 0x80; /* Exchange LPS/MPS */ + 800bcb4: f080 0080 eor.w r0, r0, #128 ; 0x80 + *st = (sv & 0x80) ^ nl; /* Estimate_after_LPS */ + 800bcb8: 702b strb r3, [r5, #0] + } + } + + return sv >> 7; +} + 800bcba: 09c0 lsrs r0, r0, #7 + 800bcbc: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + 800bcc0: 08037cf0 .word 0x08037cf0 + +0800bcc4 : + * Initialize for an arithmetic-compressed scan. + */ + +METHODDEF(void) +start_pass (j_decompress_ptr cinfo) +{ + 800bcc4: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} + arith_entropy_ptr entropy = (arith_entropy_ptr) cinfo->entropy; + int ci, tbl; + jpeg_component_info * compptr; + + if (cinfo->progressive_mode) { + 800bcc8: f8d0 30e0 ldr.w r3, [r0, #224] ; 0xe0 + 800bccc: f500 71a8 add.w r1, r0, #336 ; 0x150 +{ + 800bcd0: 4604 mov r4, r0 + arith_entropy_ptr entropy = (arith_entropy_ptr) cinfo->entropy; + 800bcd2: f8d0 51d0 ldr.w r5, [r0, #464] ; 0x1d0 + /* Validate progressive scan parameters */ + if (cinfo->Ss == 0) { + 800bcd6: f8d0 2198 ldr.w r2, [r0, #408] ; 0x198 + 800bcda: 9101 str r1, [sp, #4] + if (cinfo->progressive_mode) { + 800bcdc: 2b00 cmp r3, #0 + 800bcde: f000 8088 beq.w 800bdf2 + if (cinfo->Ss == 0) { + 800bce2: e9d0 1767 ldrd r1, r7, [r0, #412] ; 0x19c + 800bce6: f8d0 01a4 ldr.w r0, [r0, #420] ; 0x1a4 + 800bcea: b95a cbnz r2, 800bd04 + if (cinfo->Se != 0) + 800bcec: b1a1 cbz r1, 800bd18 + if (cinfo->Ah-1 != cinfo->Al) + goto bad; + } + if (cinfo->Al > 13) { /* need not check for < 0 */ + bad: + ERREXIT4(cinfo, JERR_BAD_PROGRESSION, + 800bcee: 6823 ldr r3, [r4, #0] + 800bcf0: 2611 movs r6, #17 + 800bcf2: e9c3 1707 strd r1, r7, [r3, #28] + 800bcf6: e9c3 6205 strd r6, r2, [r3, #20] + 800bcfa: 6258 str r0, [r3, #36] ; 0x24 + 800bcfc: 4620 mov r0, r4 + 800bcfe: 681b ldr r3, [r3, #0] + 800bd00: 4798 blx r3 + 800bd02: e00f b.n 800bd24 + if (cinfo->Se < cinfo->Ss || cinfo->Se > cinfo->lim_Se) + 800bd04: 428a cmp r2, r1 + 800bd06: dcf2 bgt.n 800bcee + 800bd08: f8d4 31b0 ldr.w r3, [r4, #432] ; 0x1b0 + 800bd0c: 428b cmp r3, r1 + 800bd0e: dbee blt.n 800bcee + if (cinfo->comps_in_scan != 1) + 800bd10: f8d4 3150 ldr.w r3, [r4, #336] ; 0x150 + 800bd14: 2b01 cmp r3, #1 + 800bd16: d1ea bne.n 800bcee + if (cinfo->Ah != 0) { + 800bd18: b117 cbz r7, 800bd20 + if (cinfo->Ah-1 != cinfo->Al) + 800bd1a: 1e7b subs r3, r7, #1 + 800bd1c: 4283 cmp r3, r0 + 800bd1e: d1e6 bne.n 800bcee + if (cinfo->Al > 13) { /* need not check for < 0 */ + 800bd20: 280d cmp r0, #13 + 800bd22: dce4 bgt.n 800bcee + 800bd24: f8dd a004 ldr.w sl, [sp, #4] +{ + 800bd28: f04f 0900 mov.w r9, #0 + */ + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + int coefi, cindex = cinfo->cur_comp_info[ci]->component_index; + int *coef_bit_ptr = & cinfo->coef_bits[cindex][0]; + if (cinfo->Ss && coef_bit_ptr[0] < 0) /* AC without prior DC scan */ + WARNMS2(cinfo, JWRN_BOGUS_PROGRESSION, cindex, 0); + 800bd2c: f04f 0b76 mov.w fp, #118 ; 0x76 + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + 800bd30: f8d4 3150 ldr.w r3, [r4, #336] ; 0x150 + if (cinfo->Ss && coef_bit_ptr[0] < 0) /* AC without prior DC scan */ + 800bd34: f8d4 2198 ldr.w r2, [r4, #408] ; 0x198 + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + 800bd38: 454b cmp r3, r9 + 800bd3a: dc1f bgt.n 800bd7c + WARNMS2(cinfo, JWRN_BOGUS_PROGRESSION, cindex, coefi); + coef_bit_ptr[coefi] = cinfo->Al; + } + } + /* Select MCU decoding routine */ + if (cinfo->Ah == 0) { + 800bd3c: f8d4 31a0 ldr.w r3, [r4, #416] ; 0x1a0 + 800bd40: 2b00 cmp r3, #0 + 800bd42: d153 bne.n 800bdec + if (cinfo->Ss == 0) + 800bd44: 4b63 ldr r3, [pc, #396] ; (800bed4 ) + 800bd46: 4964 ldr r1, [pc, #400] ; (800bed8 ) + entropy->pub.decode_mcu = decode_mcu_DC_first; + else + entropy->pub.decode_mcu = decode_mcu_AC_first; + } else { + if (cinfo->Ss == 0) + 800bd48: 2a00 cmp r2, #0 + 800bd4a: bf08 it eq + 800bd4c: 460b moveq r3, r1 + entropy->pub.decode_mcu = decode_mcu_DC_refine; + 800bd4e: f04f 0800 mov.w r8, #0 + 800bd52: f105 0914 add.w r9, r5, #20 + 800bd56: 9e01 ldr r6, [sp, #4] + if (tbl < 0 || tbl >= NUM_ARITH_TBLS) + ERREXIT1(cinfo, JERR_NO_ARITH_TABLE, tbl); + if (entropy->ac_stats[tbl] == NULL) + entropy->ac_stats[tbl] = (unsigned char *) (*cinfo->mem->alloc_small) + ((j_common_ptr) cinfo, JPOOL_IMAGE, AC_STAT_BINS); + MEMZERO(entropy->ac_stats[tbl], AC_STAT_BINS); + 800bd58: 46c2 mov sl, r8 + entropy->pub.decode_mcu = decode_mcu_DC_refine; + 800bd5a: 606b str r3, [r5, #4] + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + 800bd5c: f8d4 3150 ldr.w r3, [r4, #336] ; 0x150 + 800bd60: 4543 cmp r3, r8 + 800bd62: dc5f bgt.n 800be24 + } + } + + /* Initialize arithmetic decoding variables */ + entropy->c = 0; + 800bd64: 2300 movs r3, #0 + entropy->a = 0; + 800bd66: e9c5 3302 strd r3, r3, [r5, #8] + entropy->ct = -16; /* force reading 2 initial bytes to fill C */ + 800bd6a: f06f 030f mvn.w r3, #15 + 800bd6e: 612b str r3, [r5, #16] + + /* Initialize restart counter */ + entropy->restarts_to_go = cinfo->restart_interval; + 800bd70: f8d4 3118 ldr.w r3, [r4, #280] ; 0x118 + 800bd74: 636b str r3, [r5, #52] ; 0x34 +} + 800bd76: b003 add sp, #12 + 800bd78: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + int coefi, cindex = cinfo->cur_comp_info[ci]->component_index; + 800bd7c: f85a 3f04 ldr.w r3, [sl, #4]! + int *coef_bit_ptr = & cinfo->coef_bits[cindex][0]; + 800bd80: f8d4 10a0 ldr.w r1, [r4, #160] ; 0xa0 + int coefi, cindex = cinfo->cur_comp_info[ci]->component_index; + 800bd84: 685e ldr r6, [r3, #4] + int *coef_bit_ptr = & cinfo->coef_bits[cindex][0]; + 800bd86: 0230 lsls r0, r6, #8 + 800bd88: eb01 2806 add.w r8, r1, r6, lsl #8 + if (cinfo->Ss && coef_bit_ptr[0] < 0) /* AC without prior DC scan */ + 800bd8c: b162 cbz r2, 800bda8 + 800bd8e: 580a ldr r2, [r1, r0] + 800bd90: 2a00 cmp r2, #0 + 800bd92: da09 bge.n 800bda8 + WARNMS2(cinfo, JWRN_BOGUS_PROGRESSION, cindex, 0); + 800bd94: 6822 ldr r2, [r4, #0] + 800bd96: 2300 movs r3, #0 + 800bd98: f04f 31ff mov.w r1, #4294967295 + 800bd9c: 4620 mov r0, r4 + 800bd9e: 61d3 str r3, [r2, #28] + 800bda0: e9c2 b605 strd fp, r6, [r2, #20] + 800bda4: 6852 ldr r2, [r2, #4] + 800bda6: 4790 blx r2 + for (coefi = cinfo->Ss; coefi <= cinfo->Se; coefi++) { + 800bda8: f8d4 7198 ldr.w r7, [r4, #408] ; 0x198 + 800bdac: eb08 0887 add.w r8, r8, r7, lsl #2 + 800bdb0: f8d4 219c ldr.w r2, [r4, #412] ; 0x19c + 800bdb4: 42ba cmp r2, r7 + 800bdb6: da02 bge.n 800bdbe + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + 800bdb8: f109 0901 add.w r9, r9, #1 + 800bdbc: e7b8 b.n 800bd30 + int expected = (coef_bit_ptr[coefi] < 0) ? 0 : coef_bit_ptr[coefi]; + 800bdbe: f8d8 2000 ldr.w r2, [r8] + if (cinfo->Ah != expected) + 800bdc2: f8d4 11a0 ldr.w r1, [r4, #416] ; 0x1a0 + int expected = (coef_bit_ptr[coefi] < 0) ? 0 : coef_bit_ptr[coefi]; + 800bdc6: ea22 72e2 bic.w r2, r2, r2, asr #31 + if (cinfo->Ah != expected) + 800bdca: 4291 cmp r1, r2 + 800bdcc: d008 beq.n 800bde0 + WARNMS2(cinfo, JWRN_BOGUS_PROGRESSION, cindex, coefi); + 800bdce: 6822 ldr r2, [r4, #0] + 800bdd0: f04f 31ff mov.w r1, #4294967295 + 800bdd4: 4620 mov r0, r4 + 800bdd6: 61d7 str r7, [r2, #28] + 800bdd8: e9c2 b605 strd fp, r6, [r2, #20] + 800bddc: 6852 ldr r2, [r2, #4] + 800bdde: 4790 blx r2 + coef_bit_ptr[coefi] = cinfo->Al; + 800bde0: f8d4 21a4 ldr.w r2, [r4, #420] ; 0x1a4 + for (coefi = cinfo->Ss; coefi <= cinfo->Se; coefi++) { + 800bde4: 3701 adds r7, #1 + coef_bit_ptr[coefi] = cinfo->Al; + 800bde6: f848 2b04 str.w r2, [r8], #4 + for (coefi = cinfo->Ss; coefi <= cinfo->Se; coefi++) { + 800bdea: e7e1 b.n 800bdb0 + if (cinfo->Ss == 0) + 800bdec: 4b3b ldr r3, [pc, #236] ; (800bedc ) + 800bdee: 493c ldr r1, [pc, #240] ; (800bee0 ) + 800bdf0: e7aa b.n 800bd48 + if (cinfo->Ss != 0 || cinfo->Ah != 0 || cinfo->Al != 0 || + 800bdf2: b96a cbnz r2, 800be10 + 800bdf4: f8d0 31a0 ldr.w r3, [r0, #416] ; 0x1a0 + 800bdf8: b953 cbnz r3, 800be10 + 800bdfa: f8d0 31a4 ldr.w r3, [r0, #420] ; 0x1a4 + 800bdfe: b93b cbnz r3, 800be10 + (cinfo->Se < DCTSIZE2 && cinfo->Se != cinfo->lim_Se)) + 800be00: f8d0 319c ldr.w r3, [r0, #412] ; 0x19c + if (cinfo->Ss != 0 || cinfo->Ah != 0 || cinfo->Al != 0 || + 800be04: 2b3f cmp r3, #63 ; 0x3f + 800be06: dc0b bgt.n 800be20 + (cinfo->Se < DCTSIZE2 && cinfo->Se != cinfo->lim_Se)) + 800be08: f8d0 21b0 ldr.w r2, [r0, #432] ; 0x1b0 + 800be0c: 4293 cmp r3, r2 + 800be0e: d007 beq.n 800be20 + WARNMS(cinfo, JWRN_NOT_SEQUENTIAL); + 800be10: 6823 ldr r3, [r4, #0] + 800be12: 227d movs r2, #125 ; 0x7d + 800be14: f04f 31ff mov.w r1, #4294967295 + 800be18: 4620 mov r0, r4 + 800be1a: 615a str r2, [r3, #20] + 800be1c: 685b ldr r3, [r3, #4] + 800be1e: 4798 blx r3 + if (cinfo->Ss == 0) + 800be20: 4b30 ldr r3, [pc, #192] ; (800bee4 ) + 800be22: e794 b.n 800bd4e + if (! cinfo->progressive_mode || (cinfo->Ss == 0 && cinfo->Ah == 0)) { + 800be24: f8d4 30e0 ldr.w r3, [r4, #224] ; 0xe0 + compptr = cinfo->cur_comp_info[ci]; + 800be28: f856 bf04 ldr.w fp, [r6, #4]! + if (! cinfo->progressive_mode || (cinfo->Ss == 0 && cinfo->Ah == 0)) { + 800be2c: b133 cbz r3, 800be3c + 800be2e: f8d4 3198 ldr.w r3, [r4, #408] ; 0x198 + 800be32: bb43 cbnz r3, 800be86 + 800be34: f8d4 31a0 ldr.w r3, [r4, #416] ; 0x1a0 + 800be38: 2b00 cmp r3, #0 + 800be3a: d13a bne.n 800beb2 + tbl = compptr->dc_tbl_no; + 800be3c: f8db 7014 ldr.w r7, [fp, #20] + if (tbl < 0 || tbl >= NUM_ARITH_TBLS) + 800be40: 2f0f cmp r7, #15 + 800be42: d906 bls.n 800be52 + ERREXIT1(cinfo, JERR_NO_ARITH_TABLE, tbl); + 800be44: 6823 ldr r3, [r4, #0] + 800be46: 2232 movs r2, #50 ; 0x32 + 800be48: 4620 mov r0, r4 + 800be4a: e9c3 2705 strd r2, r7, [r3, #20] + 800be4e: 681b ldr r3, [r3, #0] + 800be50: 4798 blx r3 + if (entropy->dc_stats[tbl] == NULL) + 800be52: eb05 0787 add.w r7, r5, r7, lsl #2 + 800be56: 6bbb ldr r3, [r7, #56] ; 0x38 + 800be58: b933 cbnz r3, 800be68 + entropy->dc_stats[tbl] = (unsigned char *) (*cinfo->mem->alloc_small) + 800be5a: 6863 ldr r3, [r4, #4] + 800be5c: 2240 movs r2, #64 ; 0x40 + 800be5e: 2101 movs r1, #1 + 800be60: 4620 mov r0, r4 + 800be62: 681b ldr r3, [r3, #0] + 800be64: 4798 blx r3 + 800be66: 63b8 str r0, [r7, #56] ; 0x38 + MEMZERO(entropy->dc_stats[tbl], DC_STAT_BINS); + 800be68: 2240 movs r2, #64 ; 0x40 + 800be6a: 2100 movs r1, #0 + 800be6c: 6bb8 ldr r0, [r7, #56] ; 0x38 + 800be6e: f028 fda5 bl 80349bc + entropy->last_dc_val[ci] = 0; + 800be72: f8c9 a000 str.w sl, [r9] + entropy->dc_context[ci] = 0; + 800be76: f8c9 a010 str.w sl, [r9, #16] + if ((! cinfo->progressive_mode && cinfo->lim_Se) || + 800be7a: f8d4 30e0 ldr.w r3, [r4, #224] ; 0xe0 + 800be7e: b9eb cbnz r3, 800bebc + 800be80: f8d4 31b0 ldr.w r3, [r4, #432] ; 0x1b0 + 800be84: b1ab cbz r3, 800beb2 + tbl = compptr->ac_tbl_no; + 800be86: f8db 7018 ldr.w r7, [fp, #24] + if (tbl < 0 || tbl >= NUM_ARITH_TBLS) + 800be8a: 2f0f cmp r7, #15 + 800be8c: d819 bhi.n 800bec2 + if (entropy->ac_stats[tbl] == NULL) + 800be8e: eb05 0787 add.w r7, r5, r7, lsl #2 + 800be92: 6fbb ldr r3, [r7, #120] ; 0x78 + 800be94: b93b cbnz r3, 800bea6 + entropy->ac_stats[tbl] = (unsigned char *) (*cinfo->mem->alloc_small) + 800be96: 6863 ldr r3, [r4, #4] + 800be98: f44f 7280 mov.w r2, #256 ; 0x100 + 800be9c: 2101 movs r1, #1 + 800be9e: 4620 mov r0, r4 + 800bea0: 681b ldr r3, [r3, #0] + 800bea2: 4798 blx r3 + 800bea4: 67b8 str r0, [r7, #120] ; 0x78 + MEMZERO(entropy->ac_stats[tbl], AC_STAT_BINS); + 800bea6: f44f 7280 mov.w r2, #256 ; 0x100 + 800beaa: 2100 movs r1, #0 + 800beac: 6fb8 ldr r0, [r7, #120] ; 0x78 + 800beae: f028 fd85 bl 80349bc + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + 800beb2: f108 0801 add.w r8, r8, #1 + 800beb6: f109 0904 add.w r9, r9, #4 + 800beba: e74f b.n 800bd5c + (cinfo->progressive_mode && cinfo->Ss)) { + 800bebc: f8d4 3198 ldr.w r3, [r4, #408] ; 0x198 + 800bec0: e7e0 b.n 800be84 + ERREXIT1(cinfo, JERR_NO_ARITH_TABLE, tbl); + 800bec2: 6823 ldr r3, [r4, #0] + 800bec4: 2232 movs r2, #50 ; 0x32 + 800bec6: 4620 mov r0, r4 + 800bec8: e9c3 2705 strd r2, r7, [r3, #20] + 800becc: 681b ldr r3, [r3, #0] + 800bece: 4798 blx r3 + 800bed0: e7dd b.n 800be8e + 800bed2: bf00 nop + 800bed4: 0800c355 .word 0x0800c355 + 800bed8: 0800c489 .word 0x0800c489 + 800bedc: 0800c1dd .word 0x0800c1dd + 800bee0: 0800c303 .word 0x0800c303 + 800bee4: 0800bf8b .word 0x0800bf8b + +0800bee8 : +{ + 800bee8: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} + if (! (*cinfo->marker->read_restart_marker) (cinfo)) + 800beec: e9d0 3573 ldrd r3, r5, [r0, #460] ; 0x1cc +{ + 800bef0: 4604 mov r4, r0 + if (! (*cinfo->marker->read_restart_marker) (cinfo)) + 800bef2: 689b ldr r3, [r3, #8] + 800bef4: 4798 blx r3 + 800bef6: b928 cbnz r0, 800bf04 + ERREXIT(cinfo, JERR_CANT_SUSPEND); + 800bef8: 6823 ldr r3, [r4, #0] + 800befa: 2219 movs r2, #25 + 800befc: 4620 mov r0, r4 + 800befe: 615a str r2, [r3, #20] + 800bf00: 681b ldr r3, [r3, #0] + 800bf02: 4798 blx r3 +{ + 800bf04: 2600 movs r6, #0 + 800bf06: f105 0714 add.w r7, r5, #20 + 800bf0a: f504 78a8 add.w r8, r4, #336 ; 0x150 + MEMZERO(entropy->ac_stats[compptr->ac_tbl_no], AC_STAT_BINS); + 800bf0e: 46b1 mov r9, r6 + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + 800bf10: f8d4 3150 ldr.w r3, [r4, #336] ; 0x150 + 800bf14: 42b3 cmp r3, r6 + 800bf16: dc0a bgt.n 800bf2e + entropy->c = 0; + 800bf18: 2300 movs r3, #0 + entropy->a = 0; + 800bf1a: e9c5 3302 strd r3, r3, [r5, #8] + entropy->ct = -16; /* force reading 2 initial bytes to fill C */ + 800bf1e: f06f 030f mvn.w r3, #15 + 800bf22: 612b str r3, [r5, #16] + entropy->restarts_to_go = cinfo->restart_interval; + 800bf24: f8d4 3118 ldr.w r3, [r4, #280] ; 0x118 + 800bf28: 636b str r3, [r5, #52] ; 0x34 +} + 800bf2a: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + if (! cinfo->progressive_mode || (cinfo->Ss == 0 && cinfo->Ah == 0)) { + 800bf2e: f8d4 30e0 ldr.w r3, [r4, #224] ; 0xe0 + compptr = cinfo->cur_comp_info[ci]; + 800bf32: f858 af04 ldr.w sl, [r8, #4]! + if (! cinfo->progressive_mode || (cinfo->Ss == 0 && cinfo->Ah == 0)) { + 800bf36: b12b cbz r3, 800bf44 + 800bf38: f8d4 3198 ldr.w r3, [r4, #408] ; 0x198 + 800bf3c: b9ab cbnz r3, 800bf6a + 800bf3e: f8d4 31a0 ldr.w r3, [r4, #416] ; 0x1a0 + 800bf42: b9e3 cbnz r3, 800bf7e + MEMZERO(entropy->dc_stats[compptr->dc_tbl_no], DC_STAT_BINS); + 800bf44: f8da 3014 ldr.w r3, [sl, #20] + 800bf48: 2240 movs r2, #64 ; 0x40 + 800bf4a: 2100 movs r1, #0 + 800bf4c: 330e adds r3, #14 + 800bf4e: f855 0023 ldr.w r0, [r5, r3, lsl #2] + 800bf52: f028 fd33 bl 80349bc + entropy->last_dc_val[ci] = 0; + 800bf56: f8c7 9000 str.w r9, [r7] + entropy->dc_context[ci] = 0; + 800bf5a: f8c7 9010 str.w r9, [r7, #16] + if ((! cinfo->progressive_mode && cinfo->lim_Se) || + 800bf5e: f8d4 30e0 ldr.w r3, [r4, #224] ; 0xe0 + 800bf62: b97b cbnz r3, 800bf84 + 800bf64: f8d4 31b0 ldr.w r3, [r4, #432] ; 0x1b0 + 800bf68: b14b cbz r3, 800bf7e + MEMZERO(entropy->ac_stats[compptr->ac_tbl_no], AC_STAT_BINS); + 800bf6a: f8da 3018 ldr.w r3, [sl, #24] + 800bf6e: f44f 7280 mov.w r2, #256 ; 0x100 + 800bf72: 2100 movs r1, #0 + 800bf74: 331e adds r3, #30 + 800bf76: f855 0023 ldr.w r0, [r5, r3, lsl #2] + 800bf7a: f028 fd1f bl 80349bc + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + 800bf7e: 3601 adds r6, #1 + 800bf80: 3704 adds r7, #4 + 800bf82: e7c5 b.n 800bf10 + (cinfo->progressive_mode && cinfo->Ss)) { + 800bf84: f8d4 3198 ldr.w r3, [r4, #408] ; 0x198 + 800bf88: e7ee b.n 800bf68 + +0800bf8a : +{ + 800bf8a: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + if (cinfo->restart_interval) { + 800bf8e: f8d0 3118 ldr.w r3, [r0, #280] ; 0x118 +{ + 800bf92: 4604 mov r4, r0 + arith_entropy_ptr entropy = (arith_entropy_ptr) cinfo->entropy; + 800bf94: f8d0 51d0 ldr.w r5, [r0, #464] ; 0x1d0 +{ + 800bf98: ed2d 8b02 vpush {d8} + 800bf9c: b087 sub sp, #28 + 800bf9e: 9105 str r1, [sp, #20] + if (cinfo->restart_interval) { + 800bfa0: b133 cbz r3, 800bfb0 + if (entropy->restarts_to_go == 0) + 800bfa2: 6b6b ldr r3, [r5, #52] ; 0x34 + 800bfa4: b90b cbnz r3, 800bfaa + process_restart(cinfo); + 800bfa6: f7ff ff9f bl 800bee8 + entropy->restarts_to_go--; + 800bfaa: 6b6b ldr r3, [r5, #52] ; 0x34 + 800bfac: 3b01 subs r3, #1 + 800bfae: 636b str r3, [r5, #52] ; 0x34 + if (entropy->ct == -1) return TRUE; /* if error do nothing */ + 800bfb0: 692b ldr r3, [r5, #16] + 800bfb2: 3301 adds r3, #1 + 800bfb4: f000 80aa beq.w 800c10c + natural_order = cinfo->natural_order; + 800bfb8: f8d4 31ac ldr.w r3, [r4, #428] ; 0x1ac + for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { + 800bfbc: 2700 movs r7, #0 + natural_order = cinfo->natural_order; + 800bfbe: 9304 str r3, [sp, #16] + for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { + 800bfc0: f504 73b6 add.w r3, r4, #364 ; 0x16c + 800bfc4: 9303 str r3, [sp, #12] + sign = arith_decode(cinfo, entropy->fixed_bin); + 800bfc6: f105 03b8 add.w r3, r5, #184 ; 0xb8 + 800bfca: ee08 3a10 vmov s16, r3 + for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { + 800bfce: f8d4 316c ldr.w r3, [r4, #364] ; 0x16c + 800bfd2: 42bb cmp r3, r7 + 800bfd4: f340 809a ble.w 800c10c + block = MCU_data[blkn]; + 800bfd8: 9b05 ldr r3, [sp, #20] + if (arith_decode(cinfo, st) == 0) + 800bfda: 4620 mov r0, r4 + ci = cinfo->MCU_membership[blkn]; + 800bfdc: 9a03 ldr r2, [sp, #12] + block = MCU_data[blkn]; + 800bfde: f853 3027 ldr.w r3, [r3, r7, lsl #2] + 800bfe2: 9300 str r3, [sp, #0] + ci = cinfo->MCU_membership[blkn]; + 800bfe4: f852 3f04 ldr.w r3, [r2, #4]! + 800bfe8: 9203 str r2, [sp, #12] + compptr = cinfo->cur_comp_info[ci]; + 800bfea: eb04 0283 add.w r2, r4, r3, lsl #2 + 800bfee: eb05 0b83 add.w fp, r5, r3, lsl #2 + 800bff2: f8d2 2154 ldr.w r2, [r2, #340] ; 0x154 + st = entropy->dc_stats[tbl] + entropy->dc_context[ci]; + 800bff6: f8db 1024 ldr.w r1, [fp, #36] ; 0x24 + compptr = cinfo->cur_comp_info[ci]; + 800bffa: 9201 str r2, [sp, #4] + tbl = compptr->dc_tbl_no; + 800bffc: 6952 ldr r2, [r2, #20] + 800bffe: eb05 0982 add.w r9, r5, r2, lsl #2 + 800c002: 9202 str r2, [sp, #8] + st = entropy->dc_stats[tbl] + entropy->dc_context[ci]; + 800c004: f8d9 6038 ldr.w r6, [r9, #56] ; 0x38 + 800c008: 440e add r6, r1 + if (arith_decode(cinfo, st) == 0) + 800c00a: 4631 mov r1, r6 + 800c00c: f7ff fdf6 bl 800bbfc + 800c010: bb68 cbnz r0, 800c06e + entropy->dc_context[ci] = 0; + 800c012: f8cb 0024 str.w r0, [fp, #36] ; 0x24 + (*block)[0] = (JCOEF) entropy->last_dc_val[ci]; + 800c016: f8db 3014 ldr.w r3, [fp, #20] + 800c01a: 9a00 ldr r2, [sp, #0] + 800c01c: 8013 strh r3, [r2, #0] + if (cinfo->lim_Se == 0) continue; + 800c01e: f8d4 31b0 ldr.w r3, [r4, #432] ; 0x1b0 + 800c022: 2b00 cmp r3, #0 + 800c024: f000 80c3 beq.w 800c1ae + tbl = compptr->ac_tbl_no; + 800c028: 9b01 ldr r3, [sp, #4] + k = 0; + 800c02a: 2600 movs r6, #0 + tbl = compptr->ac_tbl_no; + 800c02c: 699b ldr r3, [r3, #24] + k = 0; + 800c02e: eb05 0b83 add.w fp, r5, r3, lsl #2 + (k <= cinfo->arith_ac_K[tbl] ? 189 : 217); + 800c032: eb04 0a03 add.w sl, r4, r3 + st = entropy->ac_stats[tbl] + 3 * k; + 800c036: f8db 1078 ldr.w r1, [fp, #120] ; 0x78 + 800c03a: eb06 0246 add.w r2, r6, r6, lsl #1 + if (arith_decode(cinfo, st)) break; /* EOB flag */ + 800c03e: 4620 mov r0, r4 + st = entropy->ac_stats[tbl] + 3 * k; + 800c040: eb01 0902 add.w r9, r1, r2 + if (arith_decode(cinfo, st)) break; /* EOB flag */ + 800c044: 4649 mov r1, r9 + 800c046: f7ff fdd9 bl 800bbfc + 800c04a: 2800 cmp r0, #0 + 800c04c: f040 80af bne.w 800c1ae + if (arith_decode(cinfo, st + 1)) break; + 800c050: f109 0101 add.w r1, r9, #1 + 800c054: 4620 mov r0, r4 + k++; + 800c056: 3601 adds r6, #1 + if (arith_decode(cinfo, st + 1)) break; + 800c058: f7ff fdd0 bl 800bbfc + 800c05c: 2800 cmp r0, #0 + 800c05e: d16d bne.n 800c13c + if (k >= cinfo->lim_Se) { + 800c060: f8d4 21b0 ldr.w r2, [r4, #432] ; 0x1b0 + st += 3; + 800c064: f109 0903 add.w r9, r9, #3 + if (k >= cinfo->lim_Se) { + 800c068: 42b2 cmp r2, r6 + 800c06a: dcf1 bgt.n 800c050 + 800c06c: e043 b.n 800c0f6 + sign = arith_decode(cinfo, st + 1); + 800c06e: 1c71 adds r1, r6, #1 + 800c070: 4620 mov r0, r4 + 800c072: f7ff fdc3 bl 800bbfc + st += 2; st += sign; + 800c076: 1c81 adds r1, r0, #2 + sign = arith_decode(cinfo, st + 1); + 800c078: 4680 mov r8, r0 + if ((m = arith_decode(cinfo, st)) != 0) { + 800c07a: 4620 mov r0, r4 + st += 2; st += sign; + 800c07c: eb06 0a01 add.w sl, r6, r1 + if ((m = arith_decode(cinfo, st)) != 0) { + 800c080: 4651 mov r1, sl + 800c082: f7ff fdbb bl 800bbfc + 800c086: 4606 mov r6, r0 + 800c088: b140 cbz r0, 800c09c + st = entropy->dc_stats[tbl] + 20; /* Table F.4: X1 = 20 */ + 800c08a: f8d9 1038 ldr.w r1, [r9, #56] ; 0x38 + 800c08e: f101 0a14 add.w sl, r1, #20 + while (arith_decode(cinfo, st)) { + 800c092: 4651 mov r1, sl + 800c094: 4620 mov r0, r4 + 800c096: f7ff fdb1 bl 800bbfc + 800c09a: bb40 cbnz r0, 800c0ee + if (m < (int) ((1L << cinfo->arith_dc_L[tbl]) >> 1)) + 800c09c: 9b02 ldr r3, [sp, #8] + 800c09e: 4423 add r3, r4 + 800c0a0: f893 20e8 ldrb.w r2, [r3, #232] ; 0xe8 + 800c0a4: 4699 mov r9, r3 + 800c0a6: 2301 movs r3, #1 + 800c0a8: fa03 f202 lsl.w r2, r3, r2 + 800c0ac: ebb6 0f62 cmp.w r6, r2, asr #1 + 800c0b0: db35 blt.n 800c11e + else if (m > (int) ((1L << cinfo->arith_dc_U[tbl]) >> 1)) + 800c0b2: f899 20f8 ldrb.w r2, [r9, #248] ; 0xf8 + 800c0b6: fa03 f202 lsl.w r2, r3, r2 + 800c0ba: ebb6 0f62 cmp.w r6, r2, asr #1 + entropy->dc_context[ci] = 12 + (sign * 4); /* large diff category */ + 800c0be: bfcc ite gt + 800c0c0: f108 0203 addgt.w r2, r8, #3 + entropy->dc_context[ci] = 4 + (sign * 4); /* small diff category */ + 800c0c4: f108 0201 addle.w r2, r8, #1 + 800c0c8: 0092 lsls r2, r2, #2 + st += 14; + 800c0ca: f10a 010e add.w r1, sl, #14 + while (m >>= 1) + 800c0ce: 46b1 mov r9, r6 + entropy->dc_context[ci] = 0; /* zero diff category */ + 800c0d0: f8cb 2024 str.w r2, [fp, #36] ; 0x24 + while (m >>= 1) + 800c0d4: 1076 asrs r6, r6, #1 + 800c0d6: d124 bne.n 800c122 + v += 1; if (sign) v = -v; + 800c0d8: f1b8 0f00 cmp.w r8, #0 + 800c0dc: d12b bne.n 800c136 + 800c0de: f109 0901 add.w r9, r9, #1 + entropy->last_dc_val[ci] += v; + 800c0e2: f8db 2014 ldr.w r2, [fp, #20] + 800c0e6: 444a add r2, r9 + 800c0e8: f8cb 2014 str.w r2, [fp, #20] + 800c0ec: e793 b.n 800c016 + if ((m <<= 1) == 0x8000) { + 800c0ee: 0076 lsls r6, r6, #1 + 800c0f0: f5b6 4f00 cmp.w r6, #32768 ; 0x8000 + 800c0f4: d110 bne.n 800c118 + WARNMS(cinfo, JWRN_ARITH_BAD_CODE); + 800c0f6: 6823 ldr r3, [r4, #0] + 800c0f8: 2275 movs r2, #117 ; 0x75 + 800c0fa: f04f 31ff mov.w r1, #4294967295 + 800c0fe: 4620 mov r0, r4 + 800c100: 615a str r2, [r3, #20] + 800c102: 685b ldr r3, [r3, #4] + 800c104: 4798 blx r3 + entropy->ct = -1; /* magnitude overflow */ + 800c106: f04f 33ff mov.w r3, #4294967295 + 800c10a: 612b str r3, [r5, #16] +} + 800c10c: 2001 movs r0, #1 + 800c10e: b007 add sp, #28 + 800c110: ecbd 8b02 vpop {d8} + 800c114: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + st += 1; + 800c118: f10a 0a01 add.w sl, sl, #1 + 800c11c: e7b9 b.n 800c092 + 800c11e: 2200 movs r2, #0 + 800c120: e7d3 b.n 800c0ca + if (arith_decode(cinfo, st)) v |= m; + 800c122: 4620 mov r0, r4 + 800c124: 9102 str r1, [sp, #8] + 800c126: f7ff fd69 bl 800bbfc + 800c12a: 9902 ldr r1, [sp, #8] + 800c12c: 2800 cmp r0, #0 + 800c12e: d0d1 beq.n 800c0d4 + 800c130: ea49 0906 orr.w r9, r9, r6 + 800c134: e7ce b.n 800c0d4 + v += 1; if (sign) v = -v; + 800c136: ea6f 0909 mvn.w r9, r9 + 800c13a: e7d2 b.n 800c0e2 + st += 2; + 800c13c: f109 0902 add.w r9, r9, #2 + sign = arith_decode(cinfo, entropy->fixed_bin); + 800c140: ee18 1a10 vmov r1, s16 + 800c144: 4620 mov r0, r4 + 800c146: f7ff fd59 bl 800bbfc + if ((m = arith_decode(cinfo, st)) != 0) { + 800c14a: 4649 mov r1, r9 + sign = arith_decode(cinfo, entropy->fixed_bin); + 800c14c: 9001 str r0, [sp, #4] + if ((m = arith_decode(cinfo, st)) != 0) { + 800c14e: 4620 mov r0, r4 + 800c150: f7ff fd54 bl 800bbfc + 800c154: 4680 mov r8, r0 + 800c156: b1a8 cbz r0, 800c184 + if (arith_decode(cinfo, st)) { + 800c158: 4649 mov r1, r9 + 800c15a: 4620 mov r0, r4 + 800c15c: f7ff fd4e bl 800bbfc + 800c160: b180 cbz r0, 800c184 + (k <= cinfo->arith_ac_K[tbl] ? 189 : 217); + 800c162: f89a 1108 ldrb.w r1, [sl, #264] ; 0x108 + m <<= 1; + 800c166: ea4f 0848 mov.w r8, r8, lsl #1 + st = entropy->ac_stats[tbl] + + 800c16a: f8db 2078 ldr.w r2, [fp, #120] ; 0x78 + (k <= cinfo->arith_ac_K[tbl] ? 189 : 217); + 800c16e: 42b1 cmp r1, r6 + 800c170: bfac ite ge + 800c172: 21bd movge r1, #189 ; 0xbd + 800c174: 21d9 movlt r1, #217 ; 0xd9 + st = entropy->ac_stats[tbl] + + 800c176: eb02 0901 add.w r9, r2, r1 + while (arith_decode(cinfo, st)) { + 800c17a: 4649 mov r1, r9 + 800c17c: 4620 mov r0, r4 + 800c17e: f7ff fd3d bl 800bbfc + 800c182: b9b0 cbnz r0, 800c1b2 + st += 14; + 800c184: f109 010e add.w r1, r9, #14 + v = m; + 800c188: 46c1 mov r9, r8 + while (m >>= 1) + 800c18a: ea5f 0868 movs.w r8, r8, asr #1 + 800c18e: d118 bne.n 800c1c2 + v += 1; if (sign) v = -v; + 800c190: 9b01 ldr r3, [sp, #4] + 800c192: bb03 cbnz r3, 800c1d6 + 800c194: f109 0201 add.w r2, r9, #1 + (*block)[natural_order[k]] = (JCOEF) v; + 800c198: 9b04 ldr r3, [sp, #16] + 800c19a: 9900 ldr r1, [sp, #0] + 800c19c: f853 3026 ldr.w r3, [r3, r6, lsl #2] + 800c1a0: f821 2013 strh.w r2, [r1, r3, lsl #1] + } while (k < cinfo->lim_Se); + 800c1a4: f8d4 31b0 ldr.w r3, [r4, #432] ; 0x1b0 + 800c1a8: 42b3 cmp r3, r6 + 800c1aa: f73f af44 bgt.w 800c036 + for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { + 800c1ae: 3701 adds r7, #1 + 800c1b0: e70d b.n 800bfce + if ((m <<= 1) == 0x8000) { + 800c1b2: ea4f 0848 mov.w r8, r8, lsl #1 + 800c1b6: f5b8 4f00 cmp.w r8, #32768 ; 0x8000 + 800c1ba: d09c beq.n 800c0f6 + st += 1; + 800c1bc: f109 0901 add.w r9, r9, #1 + 800c1c0: e7db b.n 800c17a + if (arith_decode(cinfo, st)) v |= m; + 800c1c2: 4620 mov r0, r4 + 800c1c4: 9102 str r1, [sp, #8] + 800c1c6: f7ff fd19 bl 800bbfc + 800c1ca: 9902 ldr r1, [sp, #8] + 800c1cc: 2800 cmp r0, #0 + 800c1ce: d0dc beq.n 800c18a + 800c1d0: ea49 0908 orr.w r9, r9, r8 + 800c1d4: e7d9 b.n 800c18a + v += 1; if (sign) v = -v; + 800c1d6: ea6f 0209 mvn.w r2, r9 + 800c1da: e7dd b.n 800c198 + +0800c1dc : + if (cinfo->restart_interval) { + 800c1dc: f8d0 3118 ldr.w r3, [r0, #280] ; 0x118 +{ + 800c1e0: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 800c1e4: 4604 mov r4, r0 + 800c1e6: 460d mov r5, r1 + arith_entropy_ptr entropy = (arith_entropy_ptr) cinfo->entropy; + 800c1e8: f8d0 61d0 ldr.w r6, [r0, #464] ; 0x1d0 +{ + 800c1ec: ed2d 8b02 vpush {d8} + 800c1f0: b085 sub sp, #20 + if (cinfo->restart_interval) { + 800c1f2: b133 cbz r3, 800c202 + if (entropy->restarts_to_go == 0) + 800c1f4: 6b73 ldr r3, [r6, #52] ; 0x34 + 800c1f6: b90b cbnz r3, 800c1fc + process_restart(cinfo); + 800c1f8: f7ff fe76 bl 800bee8 + entropy->restarts_to_go--; + 800c1fc: 6b73 ldr r3, [r6, #52] ; 0x34 + 800c1fe: 3b01 subs r3, #1 + 800c200: 6373 str r3, [r6, #52] ; 0x34 + if (entropy->ct == -1) return TRUE; /* if error do nothing */ + 800c202: 6933 ldr r3, [r6, #16] + 800c204: 3301 adds r3, #1 + 800c206: d076 beq.n 800c2f6 + tbl = cinfo->cur_comp_info[0]->ac_tbl_no; + 800c208: f8d4 3154 ldr.w r3, [r4, #340] ; 0x154 + p1 = 1 << cinfo->Al; /* 1 in the bit position being coded */ + 800c20c: 2101 movs r1, #1 + m1 = (-1) << cinfo->Al; /* -1 in the bit position being coded */ + 800c20e: f04f 38ff mov.w r8, #4294967295 + natural_order = cinfo->natural_order; + 800c212: f8d4 b1ac ldr.w fp, [r4, #428] ; 0x1ac + tbl = cinfo->cur_comp_info[0]->ac_tbl_no; + 800c216: 699a ldr r2, [r3, #24] + p1 = 1 << cinfo->Al; /* 1 in the bit position being coded */ + 800c218: f8d4 31a4 ldr.w r3, [r4, #420] ; 0x1a4 + block = MCU_data[0]; + 800c21c: f8d5 9000 ldr.w r9, [r5] + p1 = 1 << cinfo->Al; /* 1 in the bit position being coded */ + 800c220: 4099 lsls r1, r3 + for (kex = cinfo->Se; kex > 0; kex--) + 800c222: f8d4 719c ldr.w r7, [r4, #412] ; 0x19c + m1 = (-1) << cinfo->Al; /* -1 in the bit position being coded */ + 800c226: fa08 f303 lsl.w r3, r8, r3 + p1 = 1 << cinfo->Al; /* 1 in the bit position being coded */ + 800c22a: 9101 str r1, [sp, #4] + m1 = (-1) << cinfo->Al; /* -1 in the bit position being coded */ + 800c22c: 9302 str r3, [sp, #8] + for (kex = cinfo->Se; kex > 0; kex--) + 800c22e: 2f00 cmp r7, #0 + 800c230: dc37 bgt.n 800c2a2 + st = entropy->ac_stats[tbl] + 3 * (k - 1); + 800c232: f102 031e add.w r3, r2, #30 + for (k = cinfo->Ss; k <= cinfo->Se; k++) { + 800c236: f8d4 5198 ldr.w r5, [r4, #408] ; 0x198 + st = entropy->ac_stats[tbl] + 3 * (k - 1); + 800c23a: 9303 str r3, [sp, #12] + if (arith_decode(cinfo, entropy->fixed_bin)) + 800c23c: f106 03b8 add.w r3, r6, #184 ; 0xb8 + 800c240: ee08 3a10 vmov s16, r3 + for (k = cinfo->Ss; k <= cinfo->Se; k++) { + 800c244: f8d4 319c ldr.w r3, [r4, #412] ; 0x19c + 800c248: 42ab cmp r3, r5 + 800c24a: db54 blt.n 800c2f6 + st = entropy->ac_stats[tbl] + 3 * (k - 1); + 800c24c: 1e6b subs r3, r5, #1 + 800c24e: 9a03 ldr r2, [sp, #12] + if (k > kex) + 800c250: 42bd cmp r5, r7 + st = entropy->ac_stats[tbl] + 3 * (k - 1); + 800c252: eb03 0343 add.w r3, r3, r3, lsl #1 + 800c256: f856 2022 ldr.w r2, [r6, r2, lsl #2] + 800c25a: eb02 0a03 add.w sl, r2, r3 + if (k > kex) + 800c25e: dd05 ble.n 800c26c + if (arith_decode(cinfo, st)) break; /* EOB flag */ + 800c260: 4651 mov r1, sl + 800c262: 4620 mov r0, r4 + 800c264: f7ff fcca bl 800bbfc + 800c268: 2800 cmp r0, #0 + 800c26a: d144 bne.n 800c2f6 + thiscoef = *block + natural_order[k]; + 800c26c: f85b 1025 ldr.w r1, [fp, r5, lsl #2] + st += 3; k++; + 800c270: 3501 adds r5, #1 + thiscoef = *block + natural_order[k]; + 800c272: eb09 0841 add.w r8, r9, r1, lsl #1 + if (*thiscoef) { /* previously nonzero coef */ + 800c276: f939 1011 ldrsh.w r1, [r9, r1, lsl #1] + 800c27a: b1d1 cbz r1, 800c2b2 + if (arith_decode(cinfo, st + 2)) { + 800c27c: f10a 0102 add.w r1, sl, #2 + 800c280: 4620 mov r0, r4 + 800c282: f7ff fcbb bl 800bbfc + 800c286: 2800 cmp r0, #0 + 800c288: d0dc beq.n 800c244 + if (*thiscoef < 0) + 800c28a: f9b8 1000 ldrsh.w r1, [r8] + *thiscoef += m1; + 800c28e: f8b8 3000 ldrh.w r3, [r8] + if (*thiscoef < 0) + 800c292: 2900 cmp r1, #0 + *thiscoef += m1; + 800c294: bfb4 ite lt + 800c296: 9a02 ldrlt r2, [sp, #8] + *thiscoef += p1; + 800c298: 9a01 ldrge r2, [sp, #4] + 800c29a: 4413 add r3, r2 + 800c29c: f8a8 3000 strh.w r3, [r8] + 800c2a0: e7d0 b.n 800c244 + if ((*block)[natural_order[kex]]) break; + 800c2a2: f85b 3027 ldr.w r3, [fp, r7, lsl #2] + 800c2a6: f939 3013 ldrsh.w r3, [r9, r3, lsl #1] + 800c2aa: 2b00 cmp r3, #0 + 800c2ac: d1c1 bne.n 800c232 + for (kex = cinfo->Se; kex > 0; kex--) + 800c2ae: 3f01 subs r7, #1 + 800c2b0: e7bd b.n 800c22e + if (arith_decode(cinfo, st + 1)) { /* newly nonzero coef */ + 800c2b2: f10a 0101 add.w r1, sl, #1 + 800c2b6: 4620 mov r0, r4 + 800c2b8: f7ff fca0 bl 800bbfc + 800c2bc: b150 cbz r0, 800c2d4 + if (arith_decode(cinfo, entropy->fixed_bin)) + 800c2be: ee18 1a10 vmov r1, s16 + 800c2c2: 4620 mov r0, r4 + 800c2c4: f7ff fc9a bl 800bbfc + *thiscoef = m1; + 800c2c8: e9dd 3201 ldrd r3, r2, [sp, #4] + 800c2cc: 2800 cmp r0, #0 + 800c2ce: bf18 it ne + 800c2d0: 4613 movne r3, r2 + 800c2d2: e7e3 b.n 800c29c + if (k > cinfo->Se) { + 800c2d4: f8d4 219c ldr.w r2, [r4, #412] ; 0x19c + st += 3; k++; + 800c2d8: f10a 0a03 add.w sl, sl, #3 + if (k > cinfo->Se) { + 800c2dc: 42aa cmp r2, r5 + 800c2de: dac5 bge.n 800c26c + WARNMS(cinfo, JWRN_ARITH_BAD_CODE); + 800c2e0: 6823 ldr r3, [r4, #0] + 800c2e2: 2275 movs r2, #117 ; 0x75 + 800c2e4: f04f 31ff mov.w r1, #4294967295 + 800c2e8: 4620 mov r0, r4 + 800c2ea: 615a str r2, [r3, #20] + 800c2ec: 685b ldr r3, [r3, #4] + 800c2ee: 4798 blx r3 + entropy->ct = -1; /* spectral overflow */ + 800c2f0: f04f 33ff mov.w r3, #4294967295 + 800c2f4: 6133 str r3, [r6, #16] +} + 800c2f6: 2001 movs r0, #1 + 800c2f8: b005 add sp, #20 + 800c2fa: ecbd 8b02 vpop {d8} + 800c2fe: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + +0800c302 : + if (cinfo->restart_interval) { + 800c302: f8d0 3118 ldr.w r3, [r0, #280] ; 0x118 +{ + 800c306: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} + 800c30a: 4604 mov r4, r0 + 800c30c: 4688 mov r8, r1 + arith_entropy_ptr entropy = (arith_entropy_ptr) cinfo->entropy; + 800c30e: f8d0 61d0 ldr.w r6, [r0, #464] ; 0x1d0 + if (cinfo->restart_interval) { + 800c312: b133 cbz r3, 800c322 + if (entropy->restarts_to_go == 0) + 800c314: 6b73 ldr r3, [r6, #52] ; 0x34 + 800c316: b90b cbnz r3, 800c31c + process_restart(cinfo); + 800c318: f7ff fde6 bl 800bee8 + entropy->restarts_to_go--; + 800c31c: 6b73 ldr r3, [r6, #52] ; 0x34 + 800c31e: 3b01 subs r3, #1 + 800c320: 6373 str r3, [r6, #52] ; 0x34 + p1 = 1 << cinfo->Al; /* 1 in the bit position being coded */ + 800c322: f8d4 31a4 ldr.w r3, [r4, #420] ; 0x1a4 + 800c326: 2701 movs r7, #1 + st = entropy->fixed_bin; /* use fixed probability estimation */ + 800c328: 36b8 adds r6, #184 ; 0xb8 + for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { + 800c32a: 2500 movs r5, #0 + p1 = 1 << cinfo->Al; /* 1 in the bit position being coded */ + 800c32c: 409f lsls r7, r3 + for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { + 800c32e: f8d4 316c ldr.w r3, [r4, #364] ; 0x16c + 800c332: 42ab cmp r3, r5 + 800c334: dc02 bgt.n 800c33c +} + 800c336: 2001 movs r0, #1 + 800c338: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + if (arith_decode(cinfo, st)) + 800c33c: 4631 mov r1, r6 + 800c33e: 4620 mov r0, r4 + 800c340: f7ff fc5c bl 800bbfc + 800c344: b120 cbz r0, 800c350 + MCU_data[blkn][0][0] |= p1; + 800c346: f858 2025 ldr.w r2, [r8, r5, lsl #2] + 800c34a: 8813 ldrh r3, [r2, #0] + 800c34c: 433b orrs r3, r7 + 800c34e: 8013 strh r3, [r2, #0] + for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { + 800c350: 3501 adds r5, #1 + 800c352: e7ec b.n 800c32e + +0800c354 : + if (cinfo->restart_interval) { + 800c354: f8d0 3118 ldr.w r3, [r0, #280] ; 0x118 +{ + 800c358: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 800c35c: 4604 mov r4, r0 + 800c35e: b087 sub sp, #28 + 800c360: 460d mov r5, r1 + arith_entropy_ptr entropy = (arith_entropy_ptr) cinfo->entropy; + 800c362: f8d0 61d0 ldr.w r6, [r0, #464] ; 0x1d0 + if (cinfo->restart_interval) { + 800c366: b133 cbz r3, 800c376 + if (entropy->restarts_to_go == 0) + 800c368: 6b73 ldr r3, [r6, #52] ; 0x34 + 800c36a: b90b cbnz r3, 800c370 + process_restart(cinfo); + 800c36c: f7ff fdbc bl 800bee8 + entropy->restarts_to_go--; + 800c370: 6b73 ldr r3, [r6, #52] ; 0x34 + 800c372: 3b01 subs r3, #1 + 800c374: 6373 str r3, [r6, #52] ; 0x34 + if (entropy->ct == -1) return TRUE; /* if error do nothing */ + 800c376: 6933 ldr r3, [r6, #16] + 800c378: 3301 adds r3, #1 + 800c37a: d01d beq.n 800c3b8 + block = MCU_data[0]; + 800c37c: 682b ldr r3, [r5, #0] + sign = arith_decode(cinfo, entropy->fixed_bin); + 800c37e: f106 0bb8 add.w fp, r6, #184 ; 0xb8 + natural_order = cinfo->natural_order; + 800c382: f8d4 a1ac ldr.w sl, [r4, #428] ; 0x1ac + block = MCU_data[0]; + 800c386: 9302 str r3, [sp, #8] + tbl = cinfo->cur_comp_info[0]->ac_tbl_no; + 800c388: f8d4 3154 ldr.w r3, [r4, #340] ; 0x154 + for (k = cinfo->Ss; k <= cinfo->Se; k++) { + 800c38c: f8d4 5198 ldr.w r5, [r4, #408] ; 0x198 + tbl = cinfo->cur_comp_info[0]->ac_tbl_no; + 800c390: 699b ldr r3, [r3, #24] + 800c392: eb06 0983 add.w r9, r6, r3, lsl #2 + 800c396: 9301 str r3, [sp, #4] + for (k = cinfo->Ss; k <= cinfo->Se; k++) { + 800c398: f8d4 319c ldr.w r3, [r4, #412] ; 0x19c + 800c39c: 42ab cmp r3, r5 + 800c39e: db0b blt.n 800c3b8 + st = entropy->ac_stats[tbl] + 3 * (k - 1); + 800c3a0: 1e6b subs r3, r5, #1 + 800c3a2: f8d9 1078 ldr.w r1, [r9, #120] ; 0x78 + if (arith_decode(cinfo, st)) break; /* EOB flag */ + 800c3a6: 4620 mov r0, r4 + st = entropy->ac_stats[tbl] + 3 * (k - 1); + 800c3a8: eb03 0343 add.w r3, r3, r3, lsl #1 + 800c3ac: eb01 0803 add.w r8, r1, r3 + if (arith_decode(cinfo, st)) break; /* EOB flag */ + 800c3b0: 4641 mov r1, r8 + 800c3b2: f7ff fc23 bl 800bbfc + 800c3b6: b1b0 cbz r0, 800c3e6 +} + 800c3b8: 2001 movs r0, #1 + 800c3ba: b007 add sp, #28 + 800c3bc: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + st += 3; k++; + 800c3c0: 3501 adds r5, #1 + if (k > cinfo->Se) { + 800c3c2: f8d4 219c ldr.w r2, [r4, #412] ; 0x19c + st += 3; k++; + 800c3c6: f108 0803 add.w r8, r8, #3 + if (k > cinfo->Se) { + 800c3ca: 42aa cmp r2, r5 + 800c3cc: da0b bge.n 800c3e6 + WARNMS(cinfo, JWRN_ARITH_BAD_CODE); + 800c3ce: 6823 ldr r3, [r4, #0] + 800c3d0: 2275 movs r2, #117 ; 0x75 + 800c3d2: f04f 31ff mov.w r1, #4294967295 + 800c3d6: 4620 mov r0, r4 + 800c3d8: 615a str r2, [r3, #20] + 800c3da: 685b ldr r3, [r3, #4] + 800c3dc: 4798 blx r3 + entropy->ct = -1; /* magnitude overflow */ + 800c3de: f04f 33ff mov.w r3, #4294967295 + 800c3e2: 6133 str r3, [r6, #16] + return TRUE; + 800c3e4: e7e8 b.n 800c3b8 + while (arith_decode(cinfo, st + 1) == 0) { + 800c3e6: f108 0101 add.w r1, r8, #1 + 800c3ea: 4620 mov r0, r4 + 800c3ec: f7ff fc06 bl 800bbfc + 800c3f0: 2800 cmp r0, #0 + 800c3f2: d0e5 beq.n 800c3c0 + st += 2; + 800c3f4: f108 0802 add.w r8, r8, #2 + sign = arith_decode(cinfo, entropy->fixed_bin); + 800c3f8: 4659 mov r1, fp + 800c3fa: 4620 mov r0, r4 + 800c3fc: f7ff fbfe bl 800bbfc + if ((m = arith_decode(cinfo, st)) != 0) { + 800c400: 4641 mov r1, r8 + sign = arith_decode(cinfo, entropy->fixed_bin); + 800c402: 9003 str r0, [sp, #12] + if ((m = arith_decode(cinfo, st)) != 0) { + 800c404: 4620 mov r0, r4 + 800c406: f7ff fbf9 bl 800bbfc + 800c40a: 4607 mov r7, r0 + 800c40c: b1b0 cbz r0, 800c43c + if (arith_decode(cinfo, st)) { + 800c40e: 4641 mov r1, r8 + 800c410: 4620 mov r0, r4 + 800c412: f7ff fbf3 bl 800bbfc + 800c416: b188 cbz r0, 800c43c + (k <= cinfo->arith_ac_K[tbl] ? 189 : 217); + 800c418: 9b01 ldr r3, [sp, #4] + m <<= 1; + 800c41a: 007f lsls r7, r7, #1 + st = entropy->ac_stats[tbl] + + 800c41c: f8d9 2078 ldr.w r2, [r9, #120] ; 0x78 + (k <= cinfo->arith_ac_K[tbl] ? 189 : 217); + 800c420: 18e1 adds r1, r4, r3 + 800c422: f891 1108 ldrb.w r1, [r1, #264] ; 0x108 + 800c426: 42a9 cmp r1, r5 + 800c428: bfac ite ge + 800c42a: 21bd movge r1, #189 ; 0xbd + 800c42c: 21d9 movlt r1, #217 ; 0xd9 + st = entropy->ac_stats[tbl] + + 800c42e: eb02 0801 add.w r8, r2, r1 + while (arith_decode(cinfo, st)) { + 800c432: 4641 mov r1, r8 + 800c434: 4620 mov r0, r4 + 800c436: f7ff fbe1 bl 800bbfc + 800c43a: b988 cbnz r0, 800c460 + st += 14; + 800c43c: f108 010e add.w r1, r8, #14 + v = m; + 800c440: 463a mov r2, r7 + while (m >>= 1) + 800c442: 107f asrs r7, r7, #1 + 800c444: d113 bne.n 800c46e + v += 1; if (sign) v = -v; + 800c446: 9b03 ldr r3, [sp, #12] + 800c448: b9e3 cbnz r3, 800c484 + 800c44a: 3201 adds r2, #1 + (*block)[natural_order[k]] = (JCOEF) (v << cinfo->Al); + 800c44c: f8d4 11a4 ldr.w r1, [r4, #420] ; 0x1a4 + 800c450: f85a 3025 ldr.w r3, [sl, r5, lsl #2] + for (k = cinfo->Ss; k <= cinfo->Se; k++) { + 800c454: 3501 adds r5, #1 + (*block)[natural_order[k]] = (JCOEF) (v << cinfo->Al); + 800c456: 408a lsls r2, r1 + 800c458: 9902 ldr r1, [sp, #8] + 800c45a: f821 2013 strh.w r2, [r1, r3, lsl #1] + for (k = cinfo->Ss; k <= cinfo->Se; k++) { + 800c45e: e79b b.n 800c398 + if ((m <<= 1) == 0x8000) { + 800c460: 007f lsls r7, r7, #1 + 800c462: f5b7 4f00 cmp.w r7, #32768 ; 0x8000 + 800c466: d0b2 beq.n 800c3ce + st += 1; + 800c468: f108 0801 add.w r8, r8, #1 + 800c46c: e7e1 b.n 800c432 + if (arith_decode(cinfo, st)) v |= m; + 800c46e: 4620 mov r0, r4 + 800c470: e9cd 1204 strd r1, r2, [sp, #16] + 800c474: f7ff fbc2 bl 800bbfc + 800c478: e9dd 1204 ldrd r1, r2, [sp, #16] + 800c47c: 2800 cmp r0, #0 + 800c47e: d0e0 beq.n 800c442 + 800c480: 433a orrs r2, r7 + 800c482: e7de b.n 800c442 + v += 1; if (sign) v = -v; + 800c484: 43d2 mvns r2, r2 + 800c486: e7e1 b.n 800c44c + +0800c488 : +{ + 800c488: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + if (cinfo->restart_interval) { + 800c48c: f8d0 3118 ldr.w r3, [r0, #280] ; 0x118 +{ + 800c490: b085 sub sp, #20 + 800c492: 4604 mov r4, r0 + arith_entropy_ptr entropy = (arith_entropy_ptr) cinfo->entropy; + 800c494: f8d0 61d0 ldr.w r6, [r0, #464] ; 0x1d0 +{ + 800c498: 9103 str r1, [sp, #12] + if (cinfo->restart_interval) { + 800c49a: b133 cbz r3, 800c4aa + if (entropy->restarts_to_go == 0) + 800c49c: 6b73 ldr r3, [r6, #52] ; 0x34 + 800c49e: b90b cbnz r3, 800c4a4 + process_restart(cinfo); + 800c4a0: f7ff fd22 bl 800bee8 + entropy->restarts_to_go--; + 800c4a4: 6b73 ldr r3, [r6, #52] ; 0x34 + 800c4a6: 3b01 subs r3, #1 + 800c4a8: 6373 str r3, [r6, #52] ; 0x34 + if (entropy->ct == -1) return TRUE; /* if error do nothing */ + 800c4aa: 6933 ldr r3, [r6, #16] + 800c4ac: 3301 adds r3, #1 + 800c4ae: d07b beq.n 800c5a8 + 800c4b0: f504 73b6 add.w r3, r4, #364 ; 0x16c + for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { + 800c4b4: f04f 0900 mov.w r9, #0 + 800c4b8: 9301 str r3, [sp, #4] + 800c4ba: f8d4 316c ldr.w r3, [r4, #364] ; 0x16c + 800c4be: 454b cmp r3, r9 + 800c4c0: dd72 ble.n 800c5a8 + block = MCU_data[blkn]; + 800c4c2: 9b03 ldr r3, [sp, #12] + if (arith_decode(cinfo, st) == 0) + 800c4c4: 4620 mov r0, r4 + ci = cinfo->MCU_membership[blkn]; + 800c4c6: 9a01 ldr r2, [sp, #4] + block = MCU_data[blkn]; + 800c4c8: f853 3029 ldr.w r3, [r3, r9, lsl #2] + 800c4cc: 9302 str r3, [sp, #8] + ci = cinfo->MCU_membership[blkn]; + 800c4ce: f852 3f04 ldr.w r3, [r2, #4]! + 800c4d2: 9201 str r2, [sp, #4] + tbl = cinfo->cur_comp_info[ci]->dc_tbl_no; + 800c4d4: eb04 0283 add.w r2, r4, r3, lsl #2 + 800c4d8: eb06 0a83 add.w sl, r6, r3, lsl #2 + 800c4dc: f8d2 2154 ldr.w r2, [r2, #340] ; 0x154 + st = entropy->dc_stats[tbl] + entropy->dc_context[ci]; + 800c4e0: f8da 1024 ldr.w r1, [sl, #36] ; 0x24 + tbl = cinfo->cur_comp_info[ci]->dc_tbl_no; + 800c4e4: 6952 ldr r2, [r2, #20] + 800c4e6: eb06 0882 add.w r8, r6, r2, lsl #2 + 800c4ea: 9200 str r2, [sp, #0] + st = entropy->dc_stats[tbl] + entropy->dc_context[ci]; + 800c4ec: f8d8 5038 ldr.w r5, [r8, #56] ; 0x38 + 800c4f0: 440d add r5, r1 + if (arith_decode(cinfo, st) == 0) + 800c4f2: 4629 mov r1, r5 + 800c4f4: f7ff fb82 bl 800bbfc + 800c4f8: b958 cbnz r0, 800c512 + entropy->dc_context[ci] = 0; + 800c4fa: f8ca 0024 str.w r0, [sl, #36] ; 0x24 + (*block)[0] = (JCOEF) (entropy->last_dc_val[ci] << cinfo->Al); + 800c4fe: f8d4 21a4 ldr.w r2, [r4, #420] ; 0x1a4 + for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { + 800c502: f109 0901 add.w r9, r9, #1 + (*block)[0] = (JCOEF) (entropy->last_dc_val[ci] << cinfo->Al); + 800c506: f8da 3014 ldr.w r3, [sl, #20] + 800c50a: 4093 lsls r3, r2 + 800c50c: 9a02 ldr r2, [sp, #8] + 800c50e: 8013 strh r3, [r2, #0] + for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { + 800c510: e7d3 b.n 800c4ba + sign = arith_decode(cinfo, st + 1); + 800c512: 1c69 adds r1, r5, #1 + 800c514: 4620 mov r0, r4 + 800c516: f7ff fb71 bl 800bbfc + st += 2; st += sign; + 800c51a: 1c81 adds r1, r0, #2 + sign = arith_decode(cinfo, st + 1); + 800c51c: 4607 mov r7, r0 + if ((m = arith_decode(cinfo, st)) != 0) { + 800c51e: 4620 mov r0, r4 + st += 2; st += sign; + 800c520: eb05 0b01 add.w fp, r5, r1 + if ((m = arith_decode(cinfo, st)) != 0) { + 800c524: 4659 mov r1, fp + 800c526: f7ff fb69 bl 800bbfc + 800c52a: 4605 mov r5, r0 + 800c52c: b140 cbz r0, 800c540 + st = entropy->dc_stats[tbl] + 20; /* Table F.4: X1 = 20 */ + 800c52e: f8d8 1038 ldr.w r1, [r8, #56] ; 0x38 + 800c532: f101 0b14 add.w fp, r1, #20 + while (arith_decode(cinfo, st)) { + 800c536: 4659 mov r1, fp + 800c538: 4620 mov r0, r4 + 800c53a: f7ff fb5f bl 800bbfc + 800c53e: bb20 cbnz r0, 800c58a + if (m < (int) ((1L << cinfo->arith_dc_L[tbl]) >> 1)) + 800c540: 9b00 ldr r3, [sp, #0] + 800c542: 4423 add r3, r4 + 800c544: f893 20e8 ldrb.w r2, [r3, #232] ; 0xe8 + 800c548: 4698 mov r8, r3 + 800c54a: 2301 movs r3, #1 + 800c54c: fa03 f202 lsl.w r2, r3, r2 + 800c550: ebb5 0f62 cmp.w r5, r2, asr #1 + 800c554: db2f blt.n 800c5b6 + else if (m > (int) ((1L << cinfo->arith_dc_U[tbl]) >> 1)) + 800c556: f898 20f8 ldrb.w r2, [r8, #248] ; 0xf8 + 800c55a: fa03 f202 lsl.w r2, r3, r2 + 800c55e: ebb5 0f62 cmp.w r5, r2, asr #1 + entropy->dc_context[ci] = 12 + (sign * 4); /* large diff category */ + 800c562: bfcc ite gt + 800c564: 1cfa addgt r2, r7, #3 + entropy->dc_context[ci] = 4 + (sign * 4); /* small diff category */ + 800c566: 1c7a addle r2, r7, #1 + 800c568: 0092 lsls r2, r2, #2 + st += 14; + 800c56a: f10b 010e add.w r1, fp, #14 + while (m >>= 1) + 800c56e: 46a8 mov r8, r5 + entropy->dc_context[ci] = 0; /* zero diff category */ + 800c570: f8ca 2024 str.w r2, [sl, #36] ; 0x24 + while (m >>= 1) + 800c574: 106d asrs r5, r5, #1 + 800c576: d120 bne.n 800c5ba + v += 1; if (sign) v = -v; + 800c578: bb4f cbnz r7, 800c5ce + 800c57a: f108 0801 add.w r8, r8, #1 + entropy->last_dc_val[ci] += v; + 800c57e: f8da 2014 ldr.w r2, [sl, #20] + 800c582: 4442 add r2, r8 + 800c584: f8ca 2014 str.w r2, [sl, #20] + 800c588: e7b9 b.n 800c4fe + if ((m <<= 1) == 0x8000) { + 800c58a: 006d lsls r5, r5, #1 + 800c58c: f5b5 4f00 cmp.w r5, #32768 ; 0x8000 + 800c590: d10e bne.n 800c5b0 + WARNMS(cinfo, JWRN_ARITH_BAD_CODE); + 800c592: 6823 ldr r3, [r4, #0] + 800c594: 2275 movs r2, #117 ; 0x75 + 800c596: f04f 31ff mov.w r1, #4294967295 + 800c59a: 4620 mov r0, r4 + 800c59c: 615a str r2, [r3, #20] + 800c59e: 685b ldr r3, [r3, #4] + 800c5a0: 4798 blx r3 + entropy->ct = -1; /* magnitude overflow */ + 800c5a2: f04f 33ff mov.w r3, #4294967295 + 800c5a6: 6133 str r3, [r6, #16] +} + 800c5a8: 2001 movs r0, #1 + 800c5aa: b005 add sp, #20 + 800c5ac: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + st += 1; + 800c5b0: f10b 0b01 add.w fp, fp, #1 + 800c5b4: e7bf b.n 800c536 + 800c5b6: 2200 movs r2, #0 + 800c5b8: e7d7 b.n 800c56a + if (arith_decode(cinfo, st)) v |= m; + 800c5ba: 4620 mov r0, r4 + 800c5bc: 9100 str r1, [sp, #0] + 800c5be: f7ff fb1d bl 800bbfc + 800c5c2: 9900 ldr r1, [sp, #0] + 800c5c4: 2800 cmp r0, #0 + 800c5c6: d0d5 beq.n 800c574 + 800c5c8: ea48 0805 orr.w r8, r8, r5 + 800c5cc: e7d2 b.n 800c574 + v += 1; if (sign) v = -v; + 800c5ce: ea6f 0808 mvn.w r8, r8 + 800c5d2: e7d4 b.n 800c57e + +0800c5d4 : +{ + arith_entropy_ptr entropy; + int i; + + entropy = (arith_entropy_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 800c5d4: 6843 ldr r3, [r0, #4] + 800c5d6: 22bc movs r2, #188 ; 0xbc + 800c5d8: 2101 movs r1, #1 + 800c5da: 681b ldr r3, [r3, #0] +{ + 800c5dc: b570 push {r4, r5, r6, lr} + 800c5de: 4604 mov r4, r0 + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 800c5e0: 4798 blx r3 + SIZEOF(arith_entropy_decoder)); + cinfo->entropy = (struct jpeg_entropy_decoder *) entropy; + entropy->pub.start_pass = start_pass; + 800c5e2: 4b14 ldr r3, [pc, #80] ; (800c634 ) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 800c5e4: 4605 mov r5, r0 + cinfo->entropy = (struct jpeg_entropy_decoder *) entropy; + 800c5e6: f8c4 01d0 str.w r0, [r4, #464] ; 0x1d0 + + /* Mark tables unallocated */ + for (i = 0; i < NUM_ARITH_TBLS; i++) { + entropy->dc_stats[i] = NULL; + 800c5ea: 2280 movs r2, #128 ; 0x80 + entropy->pub.start_pass = start_pass; + 800c5ec: f840 3b38 str.w r3, [r0], #56 + entropy->dc_stats[i] = NULL; + 800c5f0: 2100 movs r1, #0 + 800c5f2: f028 f9e3 bl 80349bc + entropy->ac_stats[i] = NULL; + } + + /* Initialize index for fixed probability estimation */ + entropy->fixed_bin[0] = 113; + 800c5f6: 2371 movs r3, #113 ; 0x71 + 800c5f8: f885 30b8 strb.w r3, [r5, #184] ; 0xb8 + + if (cinfo->progressive_mode) { + 800c5fc: f8d4 30e0 ldr.w r3, [r4, #224] ; 0xe0 + 800c600: b17b cbz r3, 800c622 + /* Create progression status table */ + int *coef_bit_ptr, ci; + cinfo->coef_bits = (int (*)[DCTSIZE2]) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 800c602: 6a62 ldr r2, [r4, #36] ; 0x24 + 800c604: 2101 movs r1, #1 + 800c606: 6863 ldr r3, [r4, #4] + 800c608: 4620 mov r0, r4 + 800c60a: 0212 lsls r2, r2, #8 + cinfo->num_components*DCTSIZE2*SIZEOF(int)); + coef_bit_ptr = & cinfo->coef_bits[0][0]; + for (ci = 0; ci < cinfo->num_components; ci++) + 800c60c: 2500 movs r5, #0 + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 800c60e: 681b ldr r3, [r3, #0] + 800c610: 4798 blx r3 + 800c612: 4606 mov r6, r0 + cinfo->coef_bits = (int (*)[DCTSIZE2]) + 800c614: f8c4 00a0 str.w r0, [r4, #160] ; 0xa0 + for (ci = 0; ci < cinfo->num_components; ci++) + 800c618: 6a63 ldr r3, [r4, #36] ; 0x24 + 800c61a: eb06 2005 add.w r0, r6, r5, lsl #8 + 800c61e: 42ab cmp r3, r5 + 800c620: dc00 bgt.n 800c624 + for (i = 0; i < DCTSIZE2; i++) + *coef_bit_ptr++ = -1; + } +} + 800c622: bd70 pop {r4, r5, r6, pc} + *coef_bit_ptr++ = -1; + 800c624: f44f 7280 mov.w r2, #256 ; 0x100 + 800c628: 21ff movs r1, #255 ; 0xff + for (ci = 0; ci < cinfo->num_components; ci++) + 800c62a: 3501 adds r5, #1 + *coef_bit_ptr++ = -1; + 800c62c: f028 f9c6 bl 80349bc + for (ci = 0; ci < cinfo->num_components; ci++) + 800c630: e7f2 b.n 800c618 + 800c632: bf00 nop + 800c634: 0800bcc5 .word 0x0800bcc5 + +0800c638 : + +METHODDEF(void) +init_mem_source (j_decompress_ptr cinfo) +{ + /* no work necessary here */ +} + 800c638: 4770 bx lr + ... + +0800c63c : + + /* The whole JPEG data is expected to reside in the supplied memory + * buffer, so any request for more data beyond the given buffer size + * is treated as an error. + */ + WARNMS(cinfo, JWRN_JPEG_EOF); + 800c63c: 6803 ldr r3, [r0, #0] + 800c63e: 227b movs r2, #123 ; 0x7b + 800c640: f04f 31ff mov.w r1, #4294967295 +{ + 800c644: b510 push {r4, lr} + 800c646: 4604 mov r4, r0 + WARNMS(cinfo, JWRN_JPEG_EOF); + 800c648: 615a str r2, [r3, #20] + 800c64a: 685b ldr r3, [r3, #4] + 800c64c: 4798 blx r3 + + /* Insert a fake EOI marker */ + + cinfo->src->next_input_byte = mybuffer; + 800c64e: 69a3 ldr r3, [r4, #24] + 800c650: 4a02 ldr r2, [pc, #8] ; (800c65c ) + cinfo->src->bytes_in_buffer = 2; + + return TRUE; +} + 800c652: 2001 movs r0, #1 + cinfo->src->next_input_byte = mybuffer; + 800c654: 601a str r2, [r3, #0] + cinfo->src->bytes_in_buffer = 2; + 800c656: 2202 movs r2, #2 + 800c658: 605a str r2, [r3, #4] +} + 800c65a: bd10 pop {r4, pc} + 800c65c: 08037eb8 .word 0x08037eb8 + +0800c660 : + * buffer is the application writer's problem. + */ + +METHODDEF(void) +skip_input_data (j_decompress_ptr cinfo, long num_bytes) +{ + 800c660: b570 push {r4, r5, r6, lr} + + /* Just a dumb implementation for now. Could use fseek() except + * it doesn't work on pipes. Not clear that being smart is worth + * any trouble anyway --- large skips are infrequent. + */ + if (num_bytes > 0) { + 800c662: 1e0c subs r4, r1, #0 +{ + 800c664: 4606 mov r6, r0 + if (num_bytes > 0) { + 800c666: dd08 ble.n 800c67a + struct jpeg_source_mgr * src = cinfo->src; + 800c668: 6985 ldr r5, [r0, #24] + while (num_bytes > (long) src->bytes_in_buffer) { + 800c66a: 686b ldr r3, [r5, #4] + 800c66c: 42a3 cmp r3, r4 + 800c66e: db05 blt.n 800c67c + (void) (*src->fill_input_buffer) (cinfo); + /* note we assume that fill_input_buffer will never return FALSE, + * so suspension need not be handled. + */ + } + src->next_input_byte += (size_t) num_bytes; + 800c670: 682a ldr r2, [r5, #0] + src->bytes_in_buffer -= (size_t) num_bytes; + 800c672: 1b1b subs r3, r3, r4 + src->next_input_byte += (size_t) num_bytes; + 800c674: 4422 add r2, r4 + src->bytes_in_buffer -= (size_t) num_bytes; + 800c676: 606b str r3, [r5, #4] + src->next_input_byte += (size_t) num_bytes; + 800c678: 602a str r2, [r5, #0] + } +} + 800c67a: bd70 pop {r4, r5, r6, pc} + num_bytes -= (long) src->bytes_in_buffer; + 800c67c: 1ae4 subs r4, r4, r3 + (void) (*src->fill_input_buffer) (cinfo); + 800c67e: 4630 mov r0, r6 + 800c680: 68eb ldr r3, [r5, #12] + 800c682: 4798 blx r3 + 800c684: e7f1 b.n 800c66a + +0800c686 : + 800c686: 4770 bx lr + +0800c688 : + */ + +GLOBAL(void) +jpeg_mem_src (j_decompress_ptr cinfo, + unsigned char * inbuffer, unsigned long insize) +{ + 800c688: b570 push {r4, r5, r6, lr} + 800c68a: 4604 mov r4, r0 + 800c68c: 4616 mov r6, r2 + struct jpeg_source_mgr * src; + + if (inbuffer == NULL || insize == 0) /* Treat empty input as fatal error */ + 800c68e: 460d mov r5, r1 + 800c690: b101 cbz r1, 800c694 + 800c692: b92a cbnz r2, 800c6a0 + ERREXIT(cinfo, JERR_INPUT_EMPTY); + 800c694: 6823 ldr r3, [r4, #0] + 800c696: 222b movs r2, #43 ; 0x2b + 800c698: 4620 mov r0, r4 + 800c69a: 615a str r2, [r3, #20] + 800c69c: 681b ldr r3, [r3, #0] + 800c69e: 4798 blx r3 + + /* The source object is made permanent so that a series of JPEG images + * can be read from the same buffer by calling jpeg_mem_src only before + * the first one. + */ + if (cinfo->src == NULL) { /* first time for this JPEG object? */ + 800c6a0: 69a1 ldr r1, [r4, #24] + 800c6a2: b929 cbnz r1, 800c6b0 + cinfo->src = (struct jpeg_source_mgr *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT, + 800c6a4: 6863 ldr r3, [r4, #4] + 800c6a6: 221c movs r2, #28 + 800c6a8: 4620 mov r0, r4 + 800c6aa: 681b ldr r3, [r3, #0] + 800c6ac: 4798 blx r3 + cinfo->src = (struct jpeg_source_mgr *) + 800c6ae: 61a0 str r0, [r4, #24] + SIZEOF(struct jpeg_source_mgr)); + } + + src = cinfo->src; + 800c6b0: 69a3 ldr r3, [r4, #24] + src->init_source = init_mem_source; + 800c6b2: 4a06 ldr r2, [pc, #24] ; (800c6cc ) + 800c6b4: 609a str r2, [r3, #8] + src->fill_input_buffer = fill_mem_input_buffer; + 800c6b6: 4a06 ldr r2, [pc, #24] ; (800c6d0 ) + 800c6b8: 60da str r2, [r3, #12] + src->skip_input_data = skip_input_data; + 800c6ba: 4a06 ldr r2, [pc, #24] ; (800c6d4 ) + 800c6bc: 611a str r2, [r3, #16] + src->resync_to_restart = jpeg_resync_to_restart; /* use default method */ + 800c6be: 4a06 ldr r2, [pc, #24] ; (800c6d8 ) + 800c6c0: 615a str r2, [r3, #20] + src->term_source = term_source; + 800c6c2: 4a06 ldr r2, [pc, #24] ; (800c6dc ) + src->bytes_in_buffer = (size_t) insize; + src->next_input_byte = (JOCTET *) inbuffer; + 800c6c4: e9c3 5600 strd r5, r6, [r3] + src->term_source = term_source; + 800c6c8: 619a str r2, [r3, #24] +} + 800c6ca: bd70 pop {r4, r5, r6, pc} + 800c6cc: 0800c639 .word 0x0800c639 + 800c6d0: 0800c63d .word 0x0800c63d + 800c6d4: 0800c661 .word 0x0800c661 + 800c6d8: 0801088d .word 0x0801088d + 800c6dc: 0800c687 .word 0x0800c687 + +0800c6e0 : + + /* In an interleaved scan, an MCU row is the same as an iMCU row. + * In a noninterleaved scan, an iMCU row has v_samp_factor MCU rows. + * But at the bottom of the image, process only what's left. + */ + if (cinfo->comps_in_scan > 1) { + 800c6e0: f8d0 2150 ldr.w r2, [r0, #336] ; 0x150 + my_coef_ptr coef = (my_coef_ptr) cinfo->coef; + 800c6e4: f8d0 31c0 ldr.w r3, [r0, #448] ; 0x1c0 + if (cinfo->comps_in_scan > 1) { + 800c6e8: 2a01 cmp r2, #1 + 800c6ea: dc0f bgt.n 800c70c + coef->MCU_rows_per_iMCU_row = 1; + } else { + if (cinfo->input_iMCU_row < (cinfo->total_iMCU_rows-1)) + 800c6ec: f8d0 2148 ldr.w r2, [r0, #328] ; 0x148 + coef->MCU_rows_per_iMCU_row = cinfo->cur_comp_info[0]->v_samp_factor; + 800c6f0: f8d0 1154 ldr.w r1, [r0, #340] ; 0x154 + if (cinfo->input_iMCU_row < (cinfo->total_iMCU_rows-1)) + 800c6f4: 3a01 subs r2, #1 + 800c6f6: f8d0 0094 ldr.w r0, [r0, #148] ; 0x94 + 800c6fa: 4290 cmp r0, r2 + coef->MCU_rows_per_iMCU_row = cinfo->cur_comp_info[0]->v_samp_factor; + 800c6fc: bf34 ite cc + 800c6fe: 68ca ldrcc r2, [r1, #12] + else + coef->MCU_rows_per_iMCU_row = cinfo->cur_comp_info[0]->last_row_height; + 800c700: 6cca ldrcs r2, [r1, #76] ; 0x4c + coef->MCU_rows_per_iMCU_row = 1; + 800c702: 61da str r2, [r3, #28] + } + + coef->MCU_ctr = 0; + 800c704: 2200 movs r2, #0 + coef->MCU_vert_offset = 0; + 800c706: e9c3 2205 strd r2, r2, [r3, #20] +} + 800c70a: 4770 bx lr + 800c70c: 2201 movs r2, #1 + 800c70e: e7f8 b.n 800c702 + +0800c710 : + */ + +METHODDEF(void) +start_input_pass (j_decompress_ptr cinfo) +{ + cinfo->input_iMCU_row = 0; + 800c710: 2200 movs r2, #0 + 800c712: f8c0 2094 str.w r2, [r0, #148] ; 0x94 + start_iMCU_row(cinfo); + 800c716: f7ff bfe3 b.w 800c6e0 + +0800c71a : + +METHODDEF(int) +dummy_consume_data (j_decompress_ptr cinfo) +{ + return JPEG_SUSPENDED; /* Always indicate nothing was done */ +} + 800c71a: 2000 movs r0, #0 + 800c71c: 4770 bx lr + +0800c71e : + * Return value is JPEG_ROW_COMPLETED, JPEG_SCAN_COMPLETED, or JPEG_SUSPENDED. + */ + +METHODDEF(int) +consume_data (j_decompress_ptr cinfo) +{ + 800c71e: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 800c722: f500 7ba8 add.w fp, r0, #336 ; 0x150 + 800c726: b08f sub sp, #60 ; 0x3c + 800c728: 4604 mov r4, r0 + my_coef_ptr coef = (my_coef_ptr) cinfo->coef; + 800c72a: f8d0 51c0 ldr.w r5, [r0, #448] ; 0x1c0 + JBLOCKARRAY buffer[MAX_COMPS_IN_SCAN]; + JBLOCKROW buffer_ptr; + jpeg_component_info *compptr; + + /* Align the virtual buffers for the components used in this scan. */ + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + 800c72e: 465f mov r7, fp + 800c730: 2600 movs r6, #0 + compptr = cinfo->cur_comp_info[ci]; + buffer[ci] = (*cinfo->mem->access_virt_barray) + 800c732: f04f 0801 mov.w r8, #1 + 800c736: f10d 0928 add.w r9, sp, #40 ; 0x28 + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + 800c73a: f8d4 3150 ldr.w r3, [r4, #336] ; 0x150 + 800c73e: 42b3 cmp r3, r6 + 800c740: dc13 bgt.n 800c76a + * because we requested a pre-zeroed array. + */ + } + + /* Loop to process one whole iMCU row */ + for (yoffset = coef->MCU_vert_offset; yoffset < coef->MCU_rows_per_iMCU_row; + 800c742: 69ae ldr r6, [r5, #24] + blkn = 0; /* index of current DCT block within MCU */ + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + compptr = cinfo->cur_comp_info[ci]; + start_col = MCU_col_num * compptr->MCU_width; + for (yindex = 0; yindex < compptr->MCU_height; yindex++) { + buffer_ptr = buffer[ci][yindex+yoffset] + start_col; + 800c744: f10d 0928 add.w r9, sp, #40 ; 0x28 + for (yoffset = coef->MCU_vert_offset; yoffset < coef->MCU_rows_per_iMCU_row; + 800c748: 69eb ldr r3, [r5, #28] + 800c74a: 42b3 cmp r3, r6 + 800c74c: dc22 bgt.n 800c794 + } + /* Completed an MCU row, but perhaps not an iMCU row */ + coef->MCU_ctr = 0; + } + /* Completed the iMCU row, advance counters for next one */ + if (++(cinfo->input_iMCU_row) < cinfo->total_iMCU_rows) { + 800c74e: f8d4 3094 ldr.w r3, [r4, #148] ; 0x94 + 800c752: f8d4 2148 ldr.w r2, [r4, #328] ; 0x148 + 800c756: 3301 adds r3, #1 + 800c758: 4293 cmp r3, r2 + 800c75a: f8c4 3094 str.w r3, [r4, #148] ; 0x94 + 800c75e: d271 bcs.n 800c844 + start_iMCU_row(cinfo); + 800c760: 4620 mov r0, r4 + 800c762: f7ff ffbd bl 800c6e0 + return JPEG_ROW_COMPLETED; + 800c766: 2003 movs r0, #3 + 800c768: e044 b.n 800c7f4 + compptr = cinfo->cur_comp_info[ci]; + 800c76a: f857 1f04 ldr.w r1, [r7, #4]! + buffer[ci] = (*cinfo->mem->access_virt_barray) + 800c76e: 6860 ldr r0, [r4, #4] + cinfo->input_iMCU_row * compptr->v_samp_factor, + 800c770: 68cb ldr r3, [r1, #12] + buffer[ci] = (*cinfo->mem->access_virt_barray) + 800c772: 6849 ldr r1, [r1, #4] + 800c774: f8d4 2094 ldr.w r2, [r4, #148] ; 0x94 + 800c778: 3112 adds r1, #18 + 800c77a: f8cd 8000 str.w r8, [sp] + 800c77e: 435a muls r2, r3 + 800c780: f8d0 a020 ldr.w sl, [r0, #32] + 800c784: f855 1021 ldr.w r1, [r5, r1, lsl #2] + 800c788: 4620 mov r0, r4 + 800c78a: 47d0 blx sl + 800c78c: f849 0026 str.w r0, [r9, r6, lsl #2] + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + 800c790: 3601 adds r6, #1 + 800c792: e7d2 b.n 800c73a + for (MCU_col_num = coef->MCU_ctr; MCU_col_num < cinfo->MCUs_per_row; + 800c794: 00b3 lsls r3, r6, #2 + 800c796: 696f ldr r7, [r5, #20] + 800c798: 9308 str r3, [sp, #32] + 800c79a: f8d4 3164 ldr.w r3, [r4, #356] ; 0x164 + 800c79e: 42bb cmp r3, r7 + 800c7a0: f04f 0300 mov.w r3, #0 + 800c7a4: d94b bls.n 800c83e + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + 800c7a6: f8d4 2150 ldr.w r2, [r4, #336] ; 0x150 + 800c7aa: 46da mov sl, fp + blkn = 0; /* index of current DCT block within MCU */ + 800c7ac: 9303 str r3, [sp, #12] + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + 800c7ae: 9206 str r2, [sp, #24] + 800c7b0: e013 b.n 800c7da + compptr = cinfo->cur_comp_info[ci]; + 800c7b2: f85a 2f04 ldr.w r2, [sl, #4]! + for (yindex = 0; yindex < compptr->MCU_height; yindex++) { + 800c7b6: f04f 0c00 mov.w ip, #0 + 800c7ba: f8dd 8020 ldr.w r8, [sp, #32] + 800c7be: e9d2 e20e ldrd lr, r2, [r2, #56] ; 0x38 + 800c7c2: 9205 str r2, [sp, #20] + buffer_ptr = buffer[ci][yindex+yoffset] + start_col; + 800c7c4: fb07 f20e mul.w r2, r7, lr + 800c7c8: 01d2 lsls r2, r2, #7 + 800c7ca: 9204 str r2, [sp, #16] + 800c7cc: ea2e 72ee bic.w r2, lr, lr, asr #31 + 800c7d0: 9209 str r2, [sp, #36] ; 0x24 + for (yindex = 0; yindex < compptr->MCU_height; yindex++) { + 800c7d2: 9a05 ldr r2, [sp, #20] + 800c7d4: 4562 cmp r2, ip + 800c7d6: dc10 bgt.n 800c7fa + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + 800c7d8: 3301 adds r3, #1 + 800c7da: 9a06 ldr r2, [sp, #24] + 800c7dc: 429a cmp r2, r3 + 800c7de: dce8 bgt.n 800c7b2 + if (! (*cinfo->entropy->decode_mcu) (cinfo, coef->MCU_buffer)) { + 800c7e0: f8d4 31d0 ldr.w r3, [r4, #464] ; 0x1d0 + 800c7e4: f105 0120 add.w r1, r5, #32 + 800c7e8: 4620 mov r0, r4 + 800c7ea: 685b ldr r3, [r3, #4] + 800c7ec: 4798 blx r3 + 800c7ee: bb20 cbnz r0, 800c83a + coef->MCU_ctr = MCU_col_num; + 800c7f0: e9c5 7605 strd r7, r6, [r5, #20] + } + /* Completed the scan */ + (*cinfo->inputctl->finish_input_pass) (cinfo); + return JPEG_SCAN_COMPLETED; +} + 800c7f4: b00f add sp, #60 ; 0x3c + 800c7f6: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + buffer_ptr = buffer[ci][yindex+yoffset] + start_col; + 800c7fa: f859 2023 ldr.w r2, [r9, r3, lsl #2] + 800c7fe: 9904 ldr r1, [sp, #16] + 800c800: f852 2008 ldr.w r2, [r2, r8] + 800c804: 440a add r2, r1 + for (xindex = 0; xindex < compptr->MCU_width; xindex++) { + 800c806: 2100 movs r1, #0 + buffer_ptr = buffer[ci][yindex+yoffset] + start_col; + 800c808: 9207 str r2, [sp, #28] + for (xindex = 0; xindex < compptr->MCU_width; xindex++) { + 800c80a: 9a03 ldr r2, [sp, #12] + 800c80c: f102 4280 add.w r2, r2, #1073741824 ; 0x40000000 + 800c810: 3207 adds r2, #7 + 800c812: eb05 0282 add.w r2, r5, r2, lsl #2 + 800c816: 9807 ldr r0, [sp, #28] + 800c818: 458e cmp lr, r1 + 800c81a: eb00 10c1 add.w r0, r0, r1, lsl #7 + 800c81e: dc08 bgt.n 800c832 + 800c820: 9903 ldr r1, [sp, #12] + for (yindex = 0; yindex < compptr->MCU_height; yindex++) { + 800c822: f10c 0c01 add.w ip, ip, #1 + 800c826: 9a09 ldr r2, [sp, #36] ; 0x24 + 800c828: f108 0804 add.w r8, r8, #4 + 800c82c: 4411 add r1, r2 + 800c82e: 9103 str r1, [sp, #12] + 800c830: e7cf b.n 800c7d2 + for (xindex = 0; xindex < compptr->MCU_width; xindex++) { + 800c832: 3101 adds r1, #1 + coef->MCU_buffer[blkn++] = buffer_ptr++; + 800c834: f842 0f04 str.w r0, [r2, #4]! + for (xindex = 0; xindex < compptr->MCU_width; xindex++) { + 800c838: e7ed b.n 800c816 + MCU_col_num++) { + 800c83a: 3701 adds r7, #1 + 800c83c: e7ad b.n 800c79a + yoffset++) { + 800c83e: 3601 adds r6, #1 + coef->MCU_ctr = 0; + 800c840: 616b str r3, [r5, #20] + yoffset++) { + 800c842: e781 b.n 800c748 + (*cinfo->inputctl->finish_input_pass) (cinfo); + 800c844: f8d4 31c8 ldr.w r3, [r4, #456] ; 0x1c8 + 800c848: 4620 mov r0, r4 + 800c84a: 68db ldr r3, [r3, #12] + 800c84c: 4798 blx r3 + return JPEG_SCAN_COMPLETED; + 800c84e: 2004 movs r0, #4 + 800c850: e7d0 b.n 800c7f4 + +0800c852 : + * NB: output_buf contains a plane for each component in image. + */ + +METHODDEF(int) +decompress_data (j_decompress_ptr cinfo, JSAMPIMAGE output_buf) +{ + 800c852: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 800c856: 4604 mov r4, r0 + 800c858: b089 sub sp, #36 ; 0x24 + 800c85a: 468b mov fp, r1 + my_coef_ptr coef = (my_coef_ptr) cinfo->coef; + 800c85c: f8d0 71c0 ldr.w r7, [r0, #448] ; 0x1c0 + JDIMENSION last_iMCU_row = cinfo->total_iMCU_rows - 1; + 800c860: f8d0 5148 ldr.w r5, [r0, #328] ; 0x148 + JDIMENSION output_col; + jpeg_component_info *compptr; + inverse_DCT_method_ptr inverse_DCT; + + /* Force some input to be done if we are getting ahead of the input. */ + while (cinfo->input_scan_number < cinfo->output_scan_number || + 800c864: f8d4 2090 ldr.w r2, [r4, #144] ; 0x90 + 800c868: f8d4 3098 ldr.w r3, [r4, #152] ; 0x98 + 800c86c: 429a cmp r2, r3 + 800c86e: db1d blt.n 800c8ac + (cinfo->input_scan_number == cinfo->output_scan_number && + cinfo->input_iMCU_row <= cinfo->output_iMCU_row)) { + 800c870: f8d4 309c ldr.w r3, [r4, #156] ; 0x9c + while (cinfo->input_scan_number < cinfo->output_scan_number || + 800c874: d103 bne.n 800c87e + (cinfo->input_scan_number == cinfo->output_scan_number && + 800c876: f8d4 2094 ldr.w r2, [r4, #148] ; 0x94 + 800c87a: 429a cmp r2, r3 + 800c87c: d916 bls.n 800c8ac + JDIMENSION last_iMCU_row = cinfo->total_iMCU_rows - 1; + 800c87e: 1e6b subs r3, r5, #1 + if ((*cinfo->inputctl->consume_input)(cinfo) == JPEG_SUSPENDED) + return JPEG_SUSPENDED; + } + + /* OK, output from the virtual arrays. */ + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + 800c880: 2600 movs r6, #0 + 800c882: f8d4 50d8 ldr.w r5, [r4, #216] ; 0xd8 + JDIMENSION last_iMCU_row = cinfo->total_iMCU_rows - 1; + 800c886: 9303 str r3, [sp, #12] + ci++, compptr++) { + /* Don't bother to IDCT an uninteresting component. */ + if (! compptr->component_needed) + continue; + /* Align the virtual buffer for this component. */ + buffer = (*cinfo->mem->access_virt_barray) + 800c888: f107 0348 add.w r3, r7, #72 ; 0x48 + 800c88c: 9306 str r3, [sp, #24] + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + 800c88e: 6a63 ldr r3, [r4, #36] ; 0x24 + ((j_common_ptr) cinfo, coef->whole_image[ci], + cinfo->output_iMCU_row * compptr->v_samp_factor, + 800c890: f8d4 209c ldr.w r2, [r4, #156] ; 0x9c + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + 800c894: 42b3 cmp r3, r6 + 800c896: dc13 bgt.n 800c8c0 + } + output_ptr += compptr->DCT_v_scaled_size; + } + } + + if (++(cinfo->output_iMCU_row) < cinfo->total_iMCU_rows) + 800c898: 1c50 adds r0, r2, #1 + 800c89a: f8d4 3148 ldr.w r3, [r4, #328] ; 0x148 + 800c89e: f8c4 009c str.w r0, [r4, #156] ; 0x9c + return JPEG_ROW_COMPLETED; + 800c8a2: 4298 cmp r0, r3 + 800c8a4: bf2c ite cs + 800c8a6: 2004 movcs r0, #4 + 800c8a8: 2003 movcc r0, #3 + 800c8aa: e006 b.n 800c8ba + if ((*cinfo->inputctl->consume_input)(cinfo) == JPEG_SUSPENDED) + 800c8ac: f8d4 31c8 ldr.w r3, [r4, #456] ; 0x1c8 + 800c8b0: 4620 mov r0, r4 + 800c8b2: 681b ldr r3, [r3, #0] + 800c8b4: 4798 blx r3 + 800c8b6: 2800 cmp r0, #0 + 800c8b8: d1d4 bne.n 800c864 + return JPEG_SCAN_COMPLETED; +} + 800c8ba: b009 add sp, #36 ; 0x24 + 800c8bc: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + if (! compptr->component_needed) + 800c8c0: 6b6b ldr r3, [r5, #52] ; 0x34 + 800c8c2: b913 cbnz r3, 800c8ca + ci++, compptr++) { + 800c8c4: 3601 adds r6, #1 + 800c8c6: 3558 adds r5, #88 ; 0x58 + 800c8c8: e7e1 b.n 800c88e + buffer = (*cinfo->mem->access_virt_barray) + 800c8ca: 6861 ldr r1, [r4, #4] + 800c8cc: 2000 movs r0, #0 + cinfo->output_iMCU_row * compptr->v_samp_factor, + 800c8ce: 68eb ldr r3, [r5, #12] + buffer = (*cinfo->mem->access_virt_barray) + 800c8d0: 9000 str r0, [sp, #0] + 800c8d2: 4620 mov r0, r4 + 800c8d4: 6a0f ldr r7, [r1, #32] + 800c8d6: 435a muls r2, r3 + 800c8d8: 9906 ldr r1, [sp, #24] + 800c8da: f851 1026 ldr.w r1, [r1, r6, lsl #2] + 800c8de: 47b8 blx r7 + if (cinfo->output_iMCU_row < last_iMCU_row) + 800c8e0: f8d4 309c ldr.w r3, [r4, #156] ; 0x9c + 800c8e4: 9a03 ldr r2, [sp, #12] + buffer = (*cinfo->mem->access_virt_barray) + 800c8e6: 9004 str r0, [sp, #16] + if (cinfo->output_iMCU_row < last_iMCU_row) + 800c8e8: 4293 cmp r3, r2 + 800c8ea: 68eb ldr r3, [r5, #12] + 800c8ec: d221 bcs.n 800c932 + block_rows = compptr->v_samp_factor; + 800c8ee: 469a mov sl, r3 + inverse_DCT = cinfo->idct->inverse_DCT[ci]; + 800c8f0: f8d4 31d4 ldr.w r3, [r4, #468] ; 0x1d4 + for (block_row = 0; block_row < block_rows; block_row++) { + 800c8f4: 2200 movs r2, #0 + inverse_DCT = cinfo->idct->inverse_DCT[ci]; + 800c8f6: eb03 0386 add.w r3, r3, r6, lsl #2 + 800c8fa: 685b ldr r3, [r3, #4] + 800c8fc: 461f mov r7, r3 + output_ptr = output_buf[ci]; + 800c8fe: f85b 3026 ldr.w r3, [fp, r6, lsl #2] + for (block_row = 0; block_row < block_rows; block_row++) { + 800c902: 9202 str r2, [sp, #8] + 800c904: 9a02 ldr r2, [sp, #8] + 800c906: 4552 cmp r2, sl + 800c908: dadc bge.n 800c8c4 + buffer_ptr = buffer[block_row]; + 800c90a: 9a04 ldr r2, [sp, #16] + output_col = 0; + 800c90c: f04f 0900 mov.w r9, #0 + buffer_ptr = buffer[block_row]; + 800c910: 9902 ldr r1, [sp, #8] + for (block_num = 0; block_num < compptr->width_in_blocks; block_num++) { + 800c912: 46c8 mov r8, r9 + buffer_ptr = buffer[block_row]; + 800c914: f852 2021 ldr.w r2, [r2, r1, lsl #2] + 800c918: 9205 str r2, [sp, #20] + for (block_num = 0; block_num < compptr->width_in_blocks; block_num++) { + 800c91a: 69e9 ldr r1, [r5, #28] + 800c91c: 9a05 ldr r2, [sp, #20] + 800c91e: 4541 cmp r1, r8 + 800c920: eb02 12c8 add.w r2, r2, r8, lsl #7 + 800c924: d80f bhi.n 800c946 + output_ptr += compptr->DCT_v_scaled_size; + 800c926: 6aaa ldr r2, [r5, #40] ; 0x28 + 800c928: eb03 0382 add.w r3, r3, r2, lsl #2 + for (block_row = 0; block_row < block_rows; block_row++) { + 800c92c: 9a02 ldr r2, [sp, #8] + 800c92e: 3201 adds r2, #1 + 800c930: e7e7 b.n 800c902 + block_rows = (int) (compptr->height_in_blocks % compptr->v_samp_factor); + 800c932: 6a2a ldr r2, [r5, #32] + 800c934: fbb2 f1f3 udiv r1, r2, r3 + 800c938: fb03 2a11 mls sl, r3, r1, r2 + if (block_rows == 0) block_rows = compptr->v_samp_factor; + 800c93c: f1ba 0f00 cmp.w sl, #0 + 800c940: bf08 it eq + 800c942: 469a moveq sl, r3 + 800c944: e7d4 b.n 800c8f0 + (*inverse_DCT) (cinfo, compptr, (JCOEFPTR) buffer_ptr, + 800c946: f8cd 9000 str.w r9, [sp] + 800c94a: 4629 mov r1, r5 + 800c94c: 9307 str r3, [sp, #28] + 800c94e: 4620 mov r0, r4 + 800c950: 47b8 blx r7 + output_col += compptr->DCT_h_scaled_size; + 800c952: 6a6a ldr r2, [r5, #36] ; 0x24 + for (block_num = 0; block_num < compptr->width_in_blocks; block_num++) { + 800c954: f108 0801 add.w r8, r8, #1 + 800c958: 9b07 ldr r3, [sp, #28] + output_col += compptr->DCT_h_scaled_size; + 800c95a: 4491 add r9, r2 + for (block_num = 0; block_num < compptr->width_in_blocks; block_num++) { + 800c95c: e7dd b.n 800c91a + ... + +0800c960 : +{ + 800c960: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} + my_coef_ptr coef = (my_coef_ptr) cinfo->coef; + 800c964: f8d0 51c0 ldr.w r5, [r0, #448] ; 0x1c0 +{ + 800c968: 4604 mov r4, r0 + if (coef->pub.coef_arrays != NULL) { + 800c96a: 692b ldr r3, [r5, #16] + 800c96c: b323 cbz r3, 800c9b8 + if (cinfo->do_block_smoothing && smoothing_ok(cinfo)) + 800c96e: 6d03 ldr r3, [r0, #80] ; 0x50 + 800c970: 2b00 cmp r3, #0 + 800c972: d04b beq.n 800ca0c + jpeg_component_info *compptr; + JQUANT_TBL * qtable; + int * coef_bits; + int * coef_bits_latch; + + if (! cinfo->progressive_mode || cinfo->coef_bits == NULL) + 800c974: f8d0 30e0 ldr.w r3, [r0, #224] ; 0xe0 + 800c978: 2b00 cmp r3, #0 + 800c97a: d047 beq.n 800ca0c + 800c97c: f8d0 30a0 ldr.w r3, [r0, #160] ; 0xa0 + 800c980: 2b00 cmp r3, #0 + 800c982: d043 beq.n 800ca0c + return FALSE; + + /* Allocate latch area if not already done */ + if (coef->coef_bits_latch == NULL) + 800c984: 6f2b ldr r3, [r5, #112] ; 0x70 + 800c986: b93b cbnz r3, 800c998 + coef->coef_bits_latch = (int *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 800c988: 6a42 ldr r2, [r0, #36] ; 0x24 + 800c98a: 2118 movs r1, #24 + 800c98c: 6843 ldr r3, [r0, #4] + 800c98e: 434a muls r2, r1 + 800c990: 2101 movs r1, #1 + 800c992: 681b ldr r3, [r3, #0] + 800c994: 4798 blx r3 + coef->coef_bits_latch = (int *) + 800c996: 6728 str r0, [r5, #112] ; 0x70 + cinfo->num_components * + (SAVED_COEFS * SIZEOF(int))); + coef_bits_latch = coef->coef_bits_latch; + + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + 800c998: 2300 movs r3, #0 + coef_bits_latch = coef->coef_bits_latch; + 800c99a: f8d5 c070 ldr.w ip, [r5, #112] ; 0x70 + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + 800c99e: f8d4 00d8 ldr.w r0, [r4, #216] ; 0xd8 + 800c9a2: f04f 0e18 mov.w lr, #24 + boolean smoothing_useful = FALSE; + 800c9a6: 4619 mov r1, r3 + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + 800c9a8: 6a62 ldr r2, [r4, #36] ; 0x24 + 800c9aa: fb0e c703 mla r7, lr, r3, ip + 800c9ae: 4293 cmp r3, r2 + 800c9b0: db07 blt.n 800c9c2 + if (cinfo->do_block_smoothing && smoothing_ok(cinfo)) + 800c9b2: b359 cbz r1, 800ca0c + coef->pub.decompress_data = decompress_smooth_data; + 800c9b4: 4b16 ldr r3, [pc, #88] ; (800ca10 ) + coef->pub.decompress_data = decompress_data; + 800c9b6: 60eb str r3, [r5, #12] + cinfo->output_iMCU_row = 0; + 800c9b8: 2300 movs r3, #0 + 800c9ba: f8c4 309c str.w r3, [r4, #156] ; 0x9c +} + 800c9be: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + ci++, compptr++) { + /* All components' quantization values must already be latched. */ + if ((qtable = compptr->quant_table) == NULL) + 800c9c2: 6d02 ldr r2, [r0, #80] ; 0x50 + 800c9c4: b312 cbz r2, 800ca0c + return FALSE; + /* Verify DC & first 5 AC quantizers are nonzero to avoid zero-divide. */ + if (qtable->quantval[0] == 0 || + 800c9c6: 8816 ldrh r6, [r2, #0] + 800c9c8: b306 cbz r6, 800ca0c + 800c9ca: 8856 ldrh r6, [r2, #2] + 800c9cc: b1f6 cbz r6, 800ca0c + qtable->quantval[Q01_POS] == 0 || + 800c9ce: 8a16 ldrh r6, [r2, #16] + 800c9d0: b1e6 cbz r6, 800ca0c + qtable->quantval[Q10_POS] == 0 || + 800c9d2: 8c16 ldrh r6, [r2, #32] + 800c9d4: b1d6 cbz r6, 800ca0c + qtable->quantval[Q20_POS] == 0 || + 800c9d6: 8a56 ldrh r6, [r2, #18] + 800c9d8: b1c6 cbz r6, 800ca0c + qtable->quantval[Q11_POS] == 0 || + 800c9da: 8892 ldrh r2, [r2, #4] + 800c9dc: b1b2 cbz r2, 800ca0c + qtable->quantval[Q02_POS] == 0) + return FALSE; + /* DC values must be at least partly known for all components. */ + coef_bits = cinfo->coef_bits[ci]; + 800c9de: f8d4 60a0 ldr.w r6, [r4, #160] ; 0xa0 + 800c9e2: 021a lsls r2, r3, #8 + if (coef_bits[0] < 0) + 800c9e4: 58b2 ldr r2, [r6, r2] + coef_bits = cinfo->coef_bits[ci]; + 800c9e6: eb06 2803 add.w r8, r6, r3, lsl #8 + if (coef_bits[0] < 0) + 800c9ea: 2a00 cmp r2, #0 + 800c9ec: db0e blt.n 800ca0c + return FALSE; + /* Block smoothing is helpful if some AC coefficients remain inaccurate. */ + for (coefi = 1; coefi <= 5; coefi++) { + 800c9ee: 2201 movs r2, #1 + coef_bits_latch[coefi] = coef_bits[coefi]; + 800c9f0: f858 6022 ldr.w r6, [r8, r2, lsl #2] + if (coef_bits[coefi] != 0) + smoothing_useful = TRUE; + 800c9f4: 2e00 cmp r6, #0 + coef_bits_latch[coefi] = coef_bits[coefi]; + 800c9f6: f847 6022 str.w r6, [r7, r2, lsl #2] + for (coefi = 1; coefi <= 5; coefi++) { + 800c9fa: f102 0201 add.w r2, r2, #1 + smoothing_useful = TRUE; + 800c9fe: bf18 it ne + 800ca00: 2101 movne r1, #1 + for (coefi = 1; coefi <= 5; coefi++) { + 800ca02: 2a06 cmp r2, #6 + 800ca04: d1f4 bne.n 800c9f0 + ci++, compptr++) { + 800ca06: 3301 adds r3, #1 + 800ca08: 3058 adds r0, #88 ; 0x58 + 800ca0a: e7cd b.n 800c9a8 + coef->pub.decompress_data = decompress_data; + 800ca0c: 4b01 ldr r3, [pc, #4] ; (800ca14 ) + 800ca0e: e7d2 b.n 800c9b6 + 800ca10: 0800cb9b .word 0x0800cb9b + 800ca14: 0800c853 .word 0x0800c853 + +0800ca18 : + JDIMENSION last_MCU_col = cinfo->MCUs_per_row - 1; + 800ca18: f8d0 3164 ldr.w r3, [r0, #356] ; 0x164 +{ + 800ca1c: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + JDIMENSION last_MCU_col = cinfo->MCUs_per_row - 1; + 800ca20: 3b01 subs r3, #1 + my_coef_ptr coef = (my_coef_ptr) cinfo->coef; + 800ca22: f8d0 51c0 ldr.w r5, [r0, #448] ; 0x1c0 +{ + 800ca26: 4604 mov r4, r0 + 800ca28: ed2d 8b02 vpush {d8} + 800ca2c: b08f sub sp, #60 ; 0x3c + JDIMENSION last_MCU_col = cinfo->MCUs_per_row - 1; + 800ca2e: 9308 str r3, [sp, #32] + JDIMENSION last_iMCU_row = cinfo->total_iMCU_rows - 1; + 800ca30: f8d0 3148 ldr.w r3, [r0, #328] ; 0x148 +{ + 800ca34: 910b str r1, [sp, #44] ; 0x2c + JDIMENSION last_iMCU_row = cinfo->total_iMCU_rows - 1; + 800ca36: 3b01 subs r3, #1 + 800ca38: 9309 str r3, [sp, #36] ; 0x24 + for (yoffset = coef->MCU_vert_offset; yoffset < coef->MCU_rows_per_iMCU_row; + 800ca3a: 69ab ldr r3, [r5, #24] + 800ca3c: 9303 str r3, [sp, #12] + if (! (*cinfo->entropy->decode_mcu) (cinfo, coef->MCU_buffer)) { + 800ca3e: f105 0320 add.w r3, r5, #32 + 800ca42: ee08 3a10 vmov s16, r3 + for (yoffset = coef->MCU_vert_offset; yoffset < coef->MCU_rows_per_iMCU_row; + 800ca46: 69eb ldr r3, [r5, #28] + 800ca48: 9a03 ldr r2, [sp, #12] + 800ca4a: 4293 cmp r3, r2 + 800ca4c: dc13 bgt.n 800ca76 + cinfo->output_iMCU_row++; + 800ca4e: f8d4 309c ldr.w r3, [r4, #156] ; 0x9c + if (++(cinfo->input_iMCU_row) < cinfo->total_iMCU_rows) { + 800ca52: f8d4 2148 ldr.w r2, [r4, #328] ; 0x148 + cinfo->output_iMCU_row++; + 800ca56: 3301 adds r3, #1 + 800ca58: f8c4 309c str.w r3, [r4, #156] ; 0x9c + if (++(cinfo->input_iMCU_row) < cinfo->total_iMCU_rows) { + 800ca5c: f8d4 3094 ldr.w r3, [r4, #148] ; 0x94 + 800ca60: 3301 adds r3, #1 + 800ca62: 4293 cmp r3, r2 + 800ca64: f8c4 3094 str.w r3, [r4, #148] ; 0x94 + 800ca68: f080 8090 bcs.w 800cb8c + start_iMCU_row(cinfo); + 800ca6c: 4620 mov r0, r4 + 800ca6e: f7ff fe37 bl 800c6e0 + return JPEG_ROW_COMPLETED; + 800ca72: 2003 movs r0, #3 + 800ca74: e02a b.n 800cacc + for (MCU_col_num = coef->MCU_ctr; MCU_col_num <= last_MCU_col; + 800ca76: 696f ldr r7, [r5, #20] + 800ca78: 9b08 ldr r3, [sp, #32] + 800ca7a: 429f cmp r7, r3 + 800ca7c: d905 bls.n 800ca8a + coef->MCU_ctr = 0; + 800ca7e: 2300 movs r3, #0 + 800ca80: 616b str r3, [r5, #20] + yoffset++) { + 800ca82: 9b03 ldr r3, [sp, #12] + 800ca84: 3301 adds r3, #1 + 800ca86: 9303 str r3, [sp, #12] + 800ca88: e7dd b.n 800ca46 + if (cinfo->lim_Se) /* can bypass in DC only case */ + 800ca8a: f8d4 31b0 ldr.w r3, [r4, #432] ; 0x1b0 + 800ca8e: b133 cbz r3, 800ca9e + FMEMZERO((void FAR *) coef->MCU_buffer[0], + 800ca90: f8d4 216c ldr.w r2, [r4, #364] ; 0x16c + 800ca94: 2100 movs r1, #0 + 800ca96: 6a28 ldr r0, [r5, #32] + 800ca98: 01d2 lsls r2, r2, #7 + 800ca9a: f027 ff8f bl 80349bc + if (! (*cinfo->entropy->decode_mcu) (cinfo, coef->MCU_buffer)) { + 800ca9e: f8d4 31d0 ldr.w r3, [r4, #464] ; 0x1d0 + 800caa2: ee18 1a10 vmov r1, s16 + 800caa6: 4620 mov r0, r4 + 800caa8: 685b ldr r3, [r3, #4] + 800caaa: 4798 blx r3 + 800caac: b158 cbz r0, 800cac6 + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + 800caae: f04f 0b00 mov.w fp, #0 + 800cab2: f504 73a8 add.w r3, r4, #336 ; 0x150 + blkn = 0; /* index of current DCT block within MCU */ + 800cab6: 46da mov sl, fp + 800cab8: 9305 str r3, [sp, #20] + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + 800caba: f8d4 3150 ldr.w r3, [r4, #336] ; 0x150 + 800cabe: 455b cmp r3, fp + 800cac0: dc09 bgt.n 800cad6 + MCU_col_num++) { + 800cac2: 3701 adds r7, #1 + 800cac4: e7d8 b.n 800ca78 + coef->MCU_vert_offset = yoffset; + 800cac6: 9b03 ldr r3, [sp, #12] + coef->MCU_ctr = MCU_col_num; + 800cac8: e9c5 7305 strd r7, r3, [r5, #20] +} + 800cacc: b00f add sp, #60 ; 0x3c + 800cace: ecbd 8b02 vpop {d8} + 800cad2: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + compptr = cinfo->cur_comp_info[ci]; + 800cad6: 9b05 ldr r3, [sp, #20] + 800cad8: f853 1f04 ldr.w r1, [r3, #4]! + 800cadc: 9305 str r3, [sp, #20] + if (! compptr->component_needed) { + 800cade: 6b4b ldr r3, [r1, #52] ; 0x34 + 800cae0: b923 cbnz r3, 800caec + blkn += compptr->MCU_blocks; + 800cae2: 6c0b ldr r3, [r1, #64] ; 0x40 + 800cae4: 449a add sl, r3 + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + 800cae6: f10b 0b01 add.w fp, fp, #1 + 800caea: e7e6 b.n 800caba + inverse_DCT = cinfo->idct->inverse_DCT[compptr->component_index]; + 800caec: 684a ldr r2, [r1, #4] + for (yindex = 0; yindex < compptr->MCU_height; yindex++) { + 800caee: f04f 0900 mov.w r9, #0 + inverse_DCT = cinfo->idct->inverse_DCT[compptr->component_index]; + 800caf2: f8d4 31d4 ldr.w r3, [r4, #468] ; 0x1d4 + yoffset * compptr->DCT_v_scaled_size; + 800caf6: 9803 ldr r0, [sp, #12] + inverse_DCT = cinfo->idct->inverse_DCT[compptr->component_index]; + 800caf8: eb03 0382 add.w r3, r3, r2, lsl #2 + 800cafc: 685b ldr r3, [r3, #4] + 800cafe: 461e mov r6, r3 + : compptr->last_col_width; + 800cb00: 9b08 ldr r3, [sp, #32] + 800cb02: 429f cmp r7, r3 + 800cb04: bf34 ite cc + 800cb06: 6b8b ldrcc r3, [r1, #56] ; 0x38 + 800cb08: 6c8b ldrcs r3, [r1, #72] ; 0x48 + 800cb0a: 9306 str r3, [sp, #24] + yoffset * compptr->DCT_v_scaled_size; + 800cb0c: 6a8b ldr r3, [r1, #40] ; 0x28 + 800cb0e: 4343 muls r3, r0 + output_ptr = output_buf[compptr->component_index] + + 800cb10: 980b ldr r0, [sp, #44] ; 0x2c + 800cb12: f850 2022 ldr.w r2, [r0, r2, lsl #2] + 800cb16: eb02 0383 add.w r3, r2, r3, lsl #2 + start_col = MCU_col_num * compptr->MCU_sample_width; + 800cb1a: 6c4a ldr r2, [r1, #68] ; 0x44 + 800cb1c: 437a muls r2, r7 + 800cb1e: 920a str r2, [sp, #40] ; 0x28 + for (yindex = 0; yindex < compptr->MCU_height; yindex++) { + 800cb20: 6bca ldr r2, [r1, #60] ; 0x3c + 800cb22: 454a cmp r2, r9 + 800cb24: dddf ble.n 800cae6 + if (cinfo->input_iMCU_row < last_iMCU_row || + 800cb26: f8d4 2094 ldr.w r2, [r4, #148] ; 0x94 + 800cb2a: 9809 ldr r0, [sp, #36] ; 0x24 + 800cb2c: 4282 cmp r2, r0 + 800cb2e: d304 bcc.n 800cb3a + 800cb30: 9a03 ldr r2, [sp, #12] + 800cb32: 6cc8 ldr r0, [r1, #76] ; 0x4c + 800cb34: 444a add r2, r9 + 800cb36: 4290 cmp r0, r2 + 800cb38: dd0d ble.n 800cb56 + 800cb3a: f10a 4880 add.w r8, sl, #1073741824 ; 0x40000000 + 800cb3e: f108 0807 add.w r8, r8, #7 + 800cb42: eb05 0288 add.w r2, r5, r8, lsl #2 +{ + 800cb46: f04f 0800 mov.w r8, #0 + 800cb4a: 9207 str r2, [sp, #28] + 800cb4c: 9a0a ldr r2, [sp, #40] ; 0x28 + 800cb4e: 9204 str r2, [sp, #16] + for (xindex = 0; xindex < useful_width; xindex++) { + 800cb50: 9a06 ldr r2, [sp, #24] + 800cb52: 4590 cmp r8, r2 + 800cb54: db07 blt.n 800cb66 + blkn += compptr->MCU_width; + 800cb56: 6b8a ldr r2, [r1, #56] ; 0x38 + for (yindex = 0; yindex < compptr->MCU_height; yindex++) { + 800cb58: f109 0901 add.w r9, r9, #1 + blkn += compptr->MCU_width; + 800cb5c: 4492 add sl, r2 + output_ptr += compptr->DCT_v_scaled_size; + 800cb5e: 6a8a ldr r2, [r1, #40] ; 0x28 + 800cb60: eb03 0382 add.w r3, r3, r2, lsl #2 + for (yindex = 0; yindex < compptr->MCU_height; yindex++) { + 800cb64: e7dc b.n 800cb20 + (*inverse_DCT) (cinfo, compptr, + 800cb66: 9807 ldr r0, [sp, #28] + for (xindex = 0; xindex < useful_width; xindex++) { + 800cb68: f108 0801 add.w r8, r8, #1 + (*inverse_DCT) (cinfo, compptr, + 800cb6c: 9a04 ldr r2, [sp, #16] + 800cb6e: 930d str r3, [sp, #52] ; 0x34 + 800cb70: 9200 str r2, [sp, #0] + 800cb72: f850 2f04 ldr.w r2, [r0, #4]! + 800cb76: 910c str r1, [sp, #48] ; 0x30 + 800cb78: 9007 str r0, [sp, #28] + 800cb7a: 4620 mov r0, r4 + 800cb7c: 47b0 blx r6 + output_col += compptr->DCT_h_scaled_size; + 800cb7e: 990c ldr r1, [sp, #48] ; 0x30 + 800cb80: 9b04 ldr r3, [sp, #16] + 800cb82: 6a4a ldr r2, [r1, #36] ; 0x24 + 800cb84: 4413 add r3, r2 + 800cb86: 9304 str r3, [sp, #16] + for (xindex = 0; xindex < useful_width; xindex++) { + 800cb88: 9b0d ldr r3, [sp, #52] ; 0x34 + 800cb8a: e7e1 b.n 800cb50 + (*cinfo->inputctl->finish_input_pass) (cinfo); + 800cb8c: f8d4 31c8 ldr.w r3, [r4, #456] ; 0x1c8 + 800cb90: 4620 mov r0, r4 + 800cb92: 68db ldr r3, [r3, #12] + 800cb94: 4798 blx r3 + return JPEG_SCAN_COMPLETED; + 800cb96: 2004 movs r0, #4 + 800cb98: e798 b.n 800cacc + +0800cb9a : + * Variant of decompress_data for use when doing block smoothing. + */ + +METHODDEF(int) +decompress_smooth_data (j_decompress_ptr cinfo, JSAMPIMAGE output_buf) +{ + 800cb9a: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + my_coef_ptr coef = (my_coef_ptr) cinfo->coef; + 800cb9e: f8d0 31c0 ldr.w r3, [r0, #448] ; 0x1c0 +{ + 800cba2: b0c5 sub sp, #276 ; 0x114 + 800cba4: 4604 mov r4, r0 + JDIMENSION last_iMCU_row = cinfo->total_iMCU_rows - 1; + 800cba6: f8d0 5148 ldr.w r5, [r0, #328] ; 0x148 +{ + 800cbaa: 9122 str r1, [sp, #136] ; 0x88 + my_coef_ptr coef = (my_coef_ptr) cinfo->coef; + 800cbac: 931e str r3, [sp, #120] ; 0x78 + INT32 Q00,Q01,Q02,Q10,Q11,Q20, num; + int DC1,DC2,DC3,DC4,DC5,DC6,DC7,DC8,DC9; + int Al, pred; + + /* Force some input to be done if we are getting ahead of the input. */ + while (cinfo->input_scan_number <= cinfo->output_scan_number && + 800cbae: f8d4 3090 ldr.w r3, [r4, #144] ; 0x90 + 800cbb2: f8d4 1098 ldr.w r1, [r4, #152] ; 0x98 + 800cbb6: 428b cmp r3, r1 + 800cbb8: dc03 bgt.n 800cbc2 + ! cinfo->inputctl->eoi_reached) { + 800cbba: f8d4 21c8 ldr.w r2, [r4, #456] ; 0x1c8 + while (cinfo->input_scan_number <= cinfo->output_scan_number && + 800cbbe: 6950 ldr r0, [r2, #20] + 800cbc0: b1a8 cbz r0, 800cbee + JDIMENSION last_iMCU_row = cinfo->total_iMCU_rows - 1; + 800cbc2: 1e6b subs r3, r5, #1 + if ((*cinfo->inputctl->consume_input)(cinfo) == JPEG_SUSPENDED) + return JPEG_SUSPENDED; + } + + /* OK, output from the virtual arrays. */ + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + 800cbc4: f8d4 50d8 ldr.w r5, [r4, #216] ; 0xd8 + JDIMENSION last_iMCU_row = cinfo->total_iMCU_rows - 1; + 800cbc8: 9320 str r3, [sp, #128] ; 0x80 + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + 800cbca: 2300 movs r3, #0 + 800cbcc: 9303 str r3, [sp, #12] + 800cbce: 6a63 ldr r3, [r4, #36] ; 0x24 + 800cbd0: 9903 ldr r1, [sp, #12] + ci++, compptr++) { + /* Don't bother to IDCT an uninteresting component. */ + if (! compptr->component_needed) + continue; + /* Count non-dummy DCT block rows in this iMCU row. */ + if (cinfo->output_iMCU_row < last_iMCU_row) { + 800cbd2: f8d4 209c ldr.w r2, [r4, #156] ; 0x9c + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + 800cbd6: 428b cmp r3, r1 + 800cbd8: dc1e bgt.n 800cc18 + } + output_ptr += compptr->DCT_v_scaled_size; + } + } + + if (++(cinfo->output_iMCU_row) < cinfo->total_iMCU_rows) + 800cbda: 1c50 adds r0, r2, #1 + 800cbdc: f8d4 3148 ldr.w r3, [r4, #328] ; 0x148 + 800cbe0: f8c4 009c str.w r0, [r4, #156] ; 0x9c + return JPEG_ROW_COMPLETED; + 800cbe4: 4298 cmp r0, r3 + 800cbe6: bf2c ite cs + 800cbe8: 2004 movcs r0, #4 + 800cbea: 2003 movcc r0, #3 + 800cbec: e011 b.n 800cc12 + if (cinfo->input_scan_number == cinfo->output_scan_number) { + 800cbee: 428b cmp r3, r1 + 800cbf0: d10a bne.n 800cc08 + JDIMENSION delta = (cinfo->Ss == 0) ? 1 : 0; + 800cbf2: f8d4 1198 ldr.w r1, [r4, #408] ; 0x198 + if (cinfo->input_iMCU_row > cinfo->output_iMCU_row+delta) + 800cbf6: f8d4 309c ldr.w r3, [r4, #156] ; 0x9c + 800cbfa: 2900 cmp r1, #0 + 800cbfc: bf08 it eq + 800cbfe: 3301 addeq r3, #1 + 800cc00: f8d4 1094 ldr.w r1, [r4, #148] ; 0x94 + 800cc04: 4299 cmp r1, r3 + 800cc06: d8dc bhi.n 800cbc2 + if ((*cinfo->inputctl->consume_input)(cinfo) == JPEG_SUSPENDED) + 800cc08: 6813 ldr r3, [r2, #0] + 800cc0a: 4620 mov r0, r4 + 800cc0c: 4798 blx r3 + 800cc0e: 2800 cmp r0, #0 + 800cc10: d1cd bne.n 800cbae + return JPEG_SCAN_COMPLETED; +} + 800cc12: b045 add sp, #276 ; 0x114 + 800cc14: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + if (! compptr->component_needed) + 800cc18: 6b6b ldr r3, [r5, #52] ; 0x34 + 800cc1a: b923 cbnz r3, 800cc26 + ci++, compptr++) { + 800cc1c: 9b03 ldr r3, [sp, #12] + 800cc1e: 3558 adds r5, #88 ; 0x58 + 800cc20: 3301 adds r3, #1 + 800cc22: 9303 str r3, [sp, #12] + 800cc24: e7d3 b.n 800cbce + if (cinfo->output_iMCU_row < last_iMCU_row) { + 800cc26: 9b20 ldr r3, [sp, #128] ; 0x80 + block_rows = compptr->v_samp_factor; + 800cc28: 68e8 ldr r0, [r5, #12] + if (cinfo->output_iMCU_row < last_iMCU_row) { + 800cc2a: 4293 cmp r3, r2 + 800cc2c: f240 815a bls.w 800cee4 + access_rows = block_rows * 2; /* this and next iMCU row */ + 800cc30: 0043 lsls r3, r0, #1 + block_rows = compptr->v_samp_factor; + 800cc32: 4681 mov r9, r0 + last_row = FALSE; + 800cc34: 2100 movs r1, #0 + last_row = TRUE; + 800cc36: 910f str r1, [sp, #60] ; 0x3c + buffer = (*cinfo->mem->access_virt_barray) + 800cc38: 6861 ldr r1, [r4, #4] + 800cc3a: 9e03 ldr r6, [sp, #12] + 800cc3c: f8d1 8020 ldr.w r8, [r1, #32] + 800cc40: 991e ldr r1, [sp, #120] ; 0x78 + 800cc42: 3148 adds r1, #72 ; 0x48 + 800cc44: f851 1026 ldr.w r1, [r1, r6, lsl #2] + if (cinfo->output_iMCU_row > 0) { + 800cc48: 2a00 cmp r2, #0 + 800cc4a: f000 8159 beq.w 800cf00 + buffer = (*cinfo->mem->access_virt_barray) + 800cc4e: 2600 movs r6, #0 + (cinfo->output_iMCU_row - 1) * compptr->v_samp_factor, + 800cc50: 3a01 subs r2, #1 + buffer = (*cinfo->mem->access_virt_barray) + 800cc52: 4403 add r3, r0 + 800cc54: 4342 muls r2, r0 + 800cc56: 4620 mov r0, r4 + 800cc58: 9600 str r6, [sp, #0] + 800cc5a: 47c0 blx r8 + buffer += compptr->v_samp_factor; /* point to current iMCU row */ + 800cc5c: 68eb ldr r3, [r5, #12] + first_row = FALSE; + 800cc5e: 961d str r6, [sp, #116] ; 0x74 + buffer += compptr->v_samp_factor; /* point to current iMCU row */ + 800cc60: eb00 0083 add.w r0, r0, r3, lsl #2 + coef_bits = coef->coef_bits_latch + (ci * SAVED_COEFS); + 800cc64: 9b1e ldr r3, [sp, #120] ; 0x78 + 800cc66: 2218 movs r2, #24 + 800cc68: 9903 ldr r1, [sp, #12] + 800cc6a: 6f1b ldr r3, [r3, #112] ; 0x70 + inverse_DCT = cinfo->idct->inverse_DCT[ci]; + 800cc6c: 9f03 ldr r7, [sp, #12] + coef_bits = coef->coef_bits_latch + (ci * SAVED_COEFS); + 800cc6e: fb02 3301 mla r3, r2, r1, r3 + 800cc72: 9305 str r3, [sp, #20] + quanttbl = compptr->quant_table; + 800cc74: 6d2b ldr r3, [r5, #80] ; 0x50 + Q00 = quanttbl->quantval[0]; + 800cc76: 881a ldrh r2, [r3, #0] + Q01 = quanttbl->quantval[Q01_POS]; + 800cc78: f8b3 e002 ldrh.w lr, [r3, #2] + Q10 = quanttbl->quantval[Q10_POS]; + 800cc7c: f8b3 c010 ldrh.w ip, [r3, #16] + Q20 = quanttbl->quantval[Q20_POS]; + 800cc80: 8c1e ldrh r6, [r3, #32] + Q11 = quanttbl->quantval[Q11_POS]; + 800cc82: 8a59 ldrh r1, [r3, #18] + Q00 = quanttbl->quantval[0]; + 800cc84: 9206 str r2, [sp, #24] + Q02 = quanttbl->quantval[Q02_POS]; + 800cc86: 889a ldrh r2, [r3, #4] + inverse_DCT = cinfo->idct->inverse_DCT[ci]; + 800cc88: f8d4 31d4 ldr.w r3, [r4, #468] ; 0x1d4 + 800cc8c: eb03 0387 add.w r3, r3, r7, lsl #2 + 800cc90: 685b ldr r3, [r3, #4] + 800cc92: 9321 str r3, [sp, #132] ; 0x84 + output_ptr = output_buf[ci]; + 800cc94: 9b22 ldr r3, [sp, #136] ; 0x88 + 800cc96: f853 3027 ldr.w r3, [r3, r7, lsl #2] + 800cc9a: 930e str r3, [sp, #56] ; 0x38 + pred = (int) (((Q01<<7) - num) / (Q01<<8)); + 800cc9c: ea4f 13ce mov.w r3, lr, lsl #7 + 800cca0: 9313 str r3, [sp, #76] ; 0x4c + 800cca2: ea4f 230e mov.w r3, lr, lsl #8 + 800cca6: 9314 str r3, [sp, #80] ; 0x50 + pred = (int) (((Q10<<7) - num) / (Q10<<8)); + 800cca8: ea4f 13cc mov.w r3, ip, lsl #7 + 800ccac: 9315 str r3, [sp, #84] ; 0x54 + 800ccae: ea4f 230c mov.w r3, ip, lsl #8 + 800ccb2: 9316 str r3, [sp, #88] ; 0x58 + pred = (int) (((Q20<<7) - num) / (Q20<<8)); + 800ccb4: 01f3 lsls r3, r6, #7 + 800ccb6: 9317 str r3, [sp, #92] ; 0x5c + 800ccb8: 0233 lsls r3, r6, #8 + 800ccba: 9318 str r3, [sp, #96] ; 0x60 + pred = (int) (((Q11<<7) - num) / (Q11<<8)); + 800ccbc: 01cb lsls r3, r1, #7 + 800ccbe: 9319 str r3, [sp, #100] ; 0x64 + 800ccc0: 020b lsls r3, r1, #8 + 800ccc2: 931a str r3, [sp, #104] ; 0x68 + pred = (int) (((Q02<<7) - num) / (Q02<<8)); + 800ccc4: 01d3 lsls r3, r2, #7 + 800ccc6: 931b str r3, [sp, #108] ; 0x6c + 800ccc8: 0213 lsls r3, r2, #8 + 800ccca: 931c str r3, [sp, #112] ; 0x70 + 800cccc: 1f03 subs r3, r0, #4 + 800ccce: 930d str r3, [sp, #52] ; 0x34 + for (block_row = 0; block_row < block_rows; block_row++) { + 800ccd0: 2300 movs r3, #0 + 800ccd2: 9304 str r3, [sp, #16] + if (last_row && block_row == block_rows-1) + 800ccd4: f109 33ff add.w r3, r9, #4294967295 + 800ccd8: 9323 str r3, [sp, #140] ; 0x8c + for (block_row = 0; block_row < block_rows; block_row++) { + 800ccda: 9b04 ldr r3, [sp, #16] + 800ccdc: 454b cmp r3, r9 + 800ccde: da9d bge.n 800cc1c + buffer_ptr = buffer[block_row]; + 800cce0: 9b0d ldr r3, [sp, #52] ; 0x34 + 800cce2: f853 8f04 ldr.w r8, [r3, #4]! + 800cce6: 930d str r3, [sp, #52] ; 0x34 + if (first_row && block_row == 0) + 800cce8: 9b1d ldr r3, [sp, #116] ; 0x74 + 800ccea: b11b cbz r3, 800ccf4 + 800ccec: 9b04 ldr r3, [sp, #16] + 800ccee: 2b00 cmp r3, #0 + 800ccf0: f000 810c beq.w 800cf0c + prev_block_row = buffer[block_row-1]; + 800ccf4: 9b0d ldr r3, [sp, #52] ; 0x34 + 800ccf6: f853 3c04 ldr.w r3, [r3, #-4] + 800ccfa: 9307 str r3, [sp, #28] + if (last_row && block_row == block_rows-1) + 800ccfc: 9b0f ldr r3, [sp, #60] ; 0x3c + 800ccfe: b123 cbz r3, 800cd0a + 800cd00: 9b23 ldr r3, [sp, #140] ; 0x8c + 800cd02: 9a04 ldr r2, [sp, #16] + 800cd04: 4293 cmp r3, r2 + 800cd06: f000 8104 beq.w 800cf12 + next_block_row = buffer[block_row+1]; + 800cd0a: 9b0d ldr r3, [sp, #52] ; 0x34 + 800cd0c: 685b ldr r3, [r3, #4] + 800cd0e: 9308 str r3, [sp, #32] + DC1 = DC2 = DC3 = (int) prev_block_row[0][0]; + 800cd10: 9b07 ldr r3, [sp, #28] + jcopy_block_row(buffer_ptr, (JBLOCKROW) workspace, (JDIMENSION) 1); + 800cd12: 2601 movs r6, #1 + last_block_column = compptr->width_in_blocks - 1; + 800cd14: 69ea ldr r2, [r5, #28] + DC1 = DC2 = DC3 = (int) prev_block_row[0][0]; + 800cd16: f9b3 3000 ldrsh.w r3, [r3] + last_block_column = compptr->width_in_blocks - 1; + 800cd1a: 3a01 subs r2, #1 + DC1 = DC2 = DC3 = (int) prev_block_row[0][0]; + 800cd1c: 9312 str r3, [sp, #72] ; 0x48 + DC4 = DC5 = DC6 = (int) buffer_ptr[0][0]; + 800cd1e: f9b8 3000 ldrsh.w r3, [r8] + last_block_column = compptr->width_in_blocks - 1; + 800cd22: 921f str r2, [sp, #124] ; 0x7c + output_col = 0; + 800cd24: 2200 movs r2, #0 + DC4 = DC5 = DC6 = (int) buffer_ptr[0][0]; + 800cd26: 461f mov r7, r3 + DC7 = DC8 = DC9 = (int) next_block_row[0][0]; + 800cd28: 9b08 ldr r3, [sp, #32] + DC1 = DC2 = DC3 = (int) prev_block_row[0][0]; + 800cd2a: f8dd b048 ldr.w fp, [sp, #72] ; 0x48 + DC7 = DC8 = DC9 = (int) next_block_row[0][0]; + 800cd2e: f9b3 3000 ldrsh.w r3, [r3] + DC4 = DC5 = DC6 = (int) buffer_ptr[0][0]; + 800cd32: 46ba mov sl, r7 + DC7 = DC8 = DC9 = (int) next_block_row[0][0]; + 800cd34: 9309 str r3, [sp, #36] ; 0x24 + for (block_num = 0; block_num <= last_block_column; block_num++) { + 800cd36: e9cd 220b strd r2, r2, [sp, #44] ; 0x2c + jcopy_block_row(buffer_ptr, (JBLOCKROW) workspace, (JDIMENSION) 1); + 800cd3a: 2201 movs r2, #1 + 800cd3c: a924 add r1, sp, #144 ; 0x90 + 800cd3e: 4640 mov r0, r8 + 800cd40: 930a str r3, [sp, #40] ; 0x28 + 800cd42: f00b fdc6 bl 80188d2 + if (block_num < last_block_column) { + 800cd46: 9b1f ldr r3, [sp, #124] ; 0x7c + 800cd48: 9a0c ldr r2, [sp, #48] ; 0x30 + 800cd4a: 4293 cmp r3, r2 + 800cd4c: 9b0a ldr r3, [sp, #40] ; 0x28 + 800cd4e: f240 80ea bls.w 800cf26 + DC3 = (int) prev_block_row[1][0]; + 800cd52: 9a07 ldr r2, [sp, #28] + 800cd54: f9b2 2080 ldrsh.w r2, [r2, #128] ; 0x80 + 800cd58: 9210 str r2, [sp, #64] ; 0x40 + DC6 = (int) buffer_ptr[1][0]; + 800cd5a: f9b8 2080 ldrsh.w r2, [r8, #128] ; 0x80 + 800cd5e: 920a str r2, [sp, #40] ; 0x28 + DC9 = (int) next_block_row[1][0]; + 800cd60: 9a08 ldr r2, [sp, #32] + 800cd62: f9b2 2080 ldrsh.w r2, [r2, #128] ; 0x80 + 800cd66: 9211 str r2, [sp, #68] ; 0x44 + if ((Al=coef_bits[1]) != 0 && workspace[1] == 0) { + 800cd68: 9a05 ldr r2, [sp, #20] + 800cd6a: 6851 ldr r1, [r2, #4] + 800cd6c: b1c1 cbz r1, 800cda0 + 800cd6e: f9bd 2092 ldrsh.w r2, [sp, #146] ; 0x92 + 800cd72: b9aa cbnz r2, 800cda0 + num = 36 * Q00 * (DC4 - DC6); + 800cd74: 980a ldr r0, [sp, #40] ; 0x28 + 800cd76: 1a3a subs r2, r7, r0 + 800cd78: 9806 ldr r0, [sp, #24] + 800cd7a: 4342 muls r2, r0 + if (num >= 0) { + 800cd7c: 2024 movs r0, #36 ; 0x24 + 800cd7e: 4342 muls r2, r0 + pred = (int) (((Q01<<7) + num) / (Q01<<8)); + 800cd80: 9813 ldr r0, [sp, #76] ; 0x4c + if (num >= 0) { + 800cd82: f100 80d7 bmi.w 800cf34 + pred = (int) (((Q01<<7) + num) / (Q01<<8)); + 800cd86: 4402 add r2, r0 + if (Al > 0 && pred >= (1< 0 && pred >= (1< + 800cd92: fa06 f101 lsl.w r1, r6, r1 + 800cd96: 4291 cmp r1, r2 + 800cd98: dc00 bgt.n 800cd9c + pred = (1< + 800cda6: f9bd 20a0 ldrsh.w r2, [sp, #160] ; 0xa0 + 800cdaa: b9b2 cbnz r2, 800cdda + num = 36 * Q00 * (DC2 - DC8); + 800cdac: 9a09 ldr r2, [sp, #36] ; 0x24 + 800cdae: 9806 ldr r0, [sp, #24] + 800cdb0: ebab 0202 sub.w r2, fp, r2 + 800cdb4: 4342 muls r2, r0 + if (num >= 0) { + 800cdb6: 2024 movs r0, #36 ; 0x24 + 800cdb8: 4342 muls r2, r0 + pred = (int) (((Q10<<7) + num) / (Q10<<8)); + 800cdba: 9815 ldr r0, [sp, #84] ; 0x54 + if (num >= 0) { + 800cdbc: f100 80c8 bmi.w 800cf50 + pred = (int) (((Q10<<7) + num) / (Q10<<8)); + 800cdc0: 4402 add r2, r0 + if (Al > 0 && pred >= (1< 0 && pred >= (1< + 800cdcc: fa06 f101 lsl.w r1, r6, r1 + 800cdd0: 4291 cmp r1, r2 + 800cdd2: dc00 bgt.n 800cdd6 + pred = (1< + 800cde0: f9bd 20b0 ldrsh.w r2, [sp, #176] ; 0xb0 + 800cde4: b9ba cbnz r2, 800ce16 + num = 9 * Q00 * (DC2 + DC8 - 2*DC5); + 800cde6: 9a09 ldr r2, [sp, #36] ; 0x24 + 800cde8: 9806 ldr r0, [sp, #24] + 800cdea: 445a add r2, fp + 800cdec: eba2 024a sub.w r2, r2, sl, lsl #1 + 800cdf0: 4342 muls r2, r0 + pred = (int) (((Q20<<7) + num) / (Q20<<8)); + 800cdf2: 9817 ldr r0, [sp, #92] ; 0x5c + if (num >= 0) { + 800cdf4: eb12 02c2 adds.w r2, r2, r2, lsl #3 + 800cdf8: f100 80b8 bmi.w 800cf6c + pred = (int) (((Q20<<7) + num) / (Q20<<8)); + 800cdfc: 4402 add r2, r0 + if (Al > 0 && pred >= (1< 0 && pred >= (1< + 800ce08: fa06 f101 lsl.w r1, r6, r1 + 800ce0c: 4291 cmp r1, r2 + 800ce0e: dc00 bgt.n 800ce12 + pred = (1< + 800ce1c: f9bd 10a2 ldrsh.w r1, [sp, #162] ; 0xa2 + 800ce20: b9c9 cbnz r1, 800ce56 + num = 5 * Q00 * (DC1 - DC3 - DC7 + DC9); + 800ce22: 9912 ldr r1, [sp, #72] ; 0x48 + 800ce24: 9810 ldr r0, [sp, #64] ; 0x40 + 800ce26: 1a09 subs r1, r1, r0 + 800ce28: 1acb subs r3, r1, r3 + 800ce2a: 9911 ldr r1, [sp, #68] ; 0x44 + 800ce2c: 440b add r3, r1 + 800ce2e: 9906 ldr r1, [sp, #24] + 800ce30: 434b muls r3, r1 + pred = (int) (((Q11<<7) + num) / (Q11<<8)); + 800ce32: 9919 ldr r1, [sp, #100] ; 0x64 + if (num >= 0) { + 800ce34: eb13 0383 adds.w r3, r3, r3, lsl #2 + 800ce38: f100 80a6 bmi.w 800cf88 + pred = (int) (((Q11<<7) + num) / (Q11<<8)); + 800ce3c: 440b add r3, r1 + if (Al > 0 && pred >= (1< 0 && pred >= (1< + 800ce48: fa06 f202 lsl.w r2, r6, r2 + 800ce4c: 429a cmp r2, r3 + 800ce4e: dc00 bgt.n 800ce52 + pred = (1< + 800ce5c: f9bd 3094 ldrsh.w r3, [sp, #148] ; 0x94 + 800ce60: b9c3 cbnz r3, 800ce94 + num = 9 * Q00 * (DC4 + DC6 - 2*DC5); + 800ce62: 990a ldr r1, [sp, #40] ; 0x28 + 800ce64: 463b mov r3, r7 + 800ce66: 440b add r3, r1 + 800ce68: 9906 ldr r1, [sp, #24] + 800ce6a: eba3 034a sub.w r3, r3, sl, lsl #1 + 800ce6e: 434b muls r3, r1 + pred = (int) (((Q02<<7) + num) / (Q02<<8)); + 800ce70: 991b ldr r1, [sp, #108] ; 0x6c + if (num >= 0) { + 800ce72: eb13 03c3 adds.w r3, r3, r3, lsl #3 + 800ce76: f100 8095 bmi.w 800cfa4 + pred = (int) (((Q02<<7) + num) / (Q02<<8)); + 800ce7a: 440b add r3, r1 + if (Al > 0 && pred >= (1< 0 && pred >= (1< + 800ce86: fa06 f202 lsl.w r2, r6, r2 + 800ce8a: 429a cmp r2, r3 + 800ce8c: dc00 bgt.n 800ce90 + pred = (1<DCT_h_scaled_size; + 800ceaa: 9a0b ldr r2, [sp, #44] ; 0x2c + 800ceac: 4657 mov r7, sl + buffer_ptr++, prev_block_row++, next_block_row++; + 800ceae: 3380 adds r3, #128 ; 0x80 + 800ceb0: f8cd b048 str.w fp, [sp, #72] ; 0x48 + 800ceb4: 9307 str r3, [sp, #28] + 800ceb6: 9b08 ldr r3, [sp, #32] + 800ceb8: 3380 adds r3, #128 ; 0x80 + 800ceba: 9308 str r3, [sp, #32] + output_col += compptr->DCT_h_scaled_size; + 800cebc: 6a6b ldr r3, [r5, #36] ; 0x24 + 800cebe: 18d3 adds r3, r2, r3 + for (block_num = 0; block_num <= last_block_column; block_num++) { + 800cec0: 9a1f ldr r2, [sp, #124] ; 0x7c + output_col += compptr->DCT_h_scaled_size; + 800cec2: 930b str r3, [sp, #44] ; 0x2c + for (block_num = 0; block_num <= last_block_column; block_num++) { + 800cec4: 9b0c ldr r3, [sp, #48] ; 0x30 + 800cec6: 3301 adds r3, #1 + 800cec8: 930c str r3, [sp, #48] ; 0x30 + 800ceca: 990c ldr r1, [sp, #48] ; 0x30 + 800cecc: 9b09 ldr r3, [sp, #36] ; 0x24 + 800cece: 428a cmp r2, r1 + 800ced0: d222 bcs.n 800cf18 + output_ptr += compptr->DCT_v_scaled_size; + 800ced2: 9a0e ldr r2, [sp, #56] ; 0x38 + 800ced4: 6aab ldr r3, [r5, #40] ; 0x28 + 800ced6: eb02 0383 add.w r3, r2, r3, lsl #2 + 800ceda: 930e str r3, [sp, #56] ; 0x38 + for (block_row = 0; block_row < block_rows; block_row++) { + 800cedc: 9b04 ldr r3, [sp, #16] + 800cede: 3301 adds r3, #1 + 800cee0: 9304 str r3, [sp, #16] + 800cee2: e6fa b.n 800ccda + block_rows = (int) (compptr->height_in_blocks % compptr->v_samp_factor); + 800cee4: 6a2b ldr r3, [r5, #32] + 800cee6: fbb3 f1f0 udiv r1, r3, r0 + 800ceea: fb00 3911 mls r9, r0, r1, r3 + if (block_rows == 0) block_rows = compptr->v_samp_factor; + 800ceee: f1b9 0f00 cmp.w r9, #0 + 800cef2: d103 bne.n 800cefc + 800cef4: 4603 mov r3, r0 + 800cef6: 4681 mov r9, r0 + last_row = TRUE; + 800cef8: 2101 movs r1, #1 + 800cefa: e69c b.n 800cc36 + 800cefc: 464b mov r3, r9 + 800cefe: e7fb b.n 800cef8 + buffer = (*cinfo->mem->access_virt_barray) + 800cf00: 4620 mov r0, r4 + 800cf02: 9200 str r2, [sp, #0] + 800cf04: 47c0 blx r8 + first_row = TRUE; + 800cf06: 2301 movs r3, #1 + 800cf08: 931d str r3, [sp, #116] ; 0x74 + 800cf0a: e6ab b.n 800cc64 + buffer_ptr = buffer[block_row]; + 800cf0c: f8cd 801c str.w r8, [sp, #28] + 800cf10: e6f4 b.n 800ccfc + 800cf12: f8cd 8020 str.w r8, [sp, #32] + 800cf16: e6fb b.n 800cd10 + DC7 = DC8; DC8 = DC9; + 800cf18: 9a11 ldr r2, [sp, #68] ; 0x44 + DC4 = DC5; DC5 = DC6; + 800cf1a: f8dd a028 ldr.w sl, [sp, #40] ; 0x28 + DC1 = DC2; DC2 = DC3; + 800cf1e: f8dd b040 ldr.w fp, [sp, #64] ; 0x40 + DC7 = DC8; DC8 = DC9; + 800cf22: 9209 str r2, [sp, #36] ; 0x24 + 800cf24: e709 b.n 800cd3a + 800cf26: 9a09 ldr r2, [sp, #36] ; 0x24 + 800cf28: f8cd a028 str.w sl, [sp, #40] ; 0x28 + 800cf2c: 9211 str r2, [sp, #68] ; 0x44 + 800cf2e: f8cd b040 str.w fp, [sp, #64] ; 0x40 + 800cf32: e719 b.n 800cd68 + pred = (int) (((Q01<<7) - num) / (Q01<<8)); + 800cf34: 1a82 subs r2, r0, r2 + if (Al > 0 && pred >= (1< 0 && pred >= (1< + 800cf40: fa06 f101 lsl.w r1, r6, r1 + 800cf44: 4291 cmp r1, r2 + pred = (1< + pred = (int) (((Q10<<7) - num) / (Q10<<8)); + 800cf50: 1a82 subs r2, r0, r2 + if (Al > 0 && pred >= (1< 0 && pred >= (1< + 800cf5c: fa06 f101 lsl.w r1, r6, r1 + 800cf60: 4291 cmp r1, r2 + pred = (1< + pred = (int) (((Q20<<7) - num) / (Q20<<8)); + 800cf6c: 1a82 subs r2, r0, r2 + if (Al > 0 && pred >= (1< 0 && pred >= (1< + 800cf78: fa06 f101 lsl.w r1, r6, r1 + 800cf7c: 4291 cmp r1, r2 + pred = (1< + pred = (int) (((Q11<<7) - num) / (Q11<<8)); + 800cf88: 1acb subs r3, r1, r3 + if (Al > 0 && pred >= (1< 0 && pred >= (1< + 800cf94: fa06 f202 lsl.w r2, r6, r2 + 800cf98: 429a cmp r2, r3 + pred = (1< + pred = (int) (((Q02<<7) - num) / (Q02<<8)); + 800cfa4: 1acb subs r3, r1, r3 + if (Al > 0 && pred >= (1< 0 && pred >= (1< + 800cfb0: fa06 f202 lsl.w r2, r6, r2 + 800cfb4: 429a cmp r2, r3 + pred = (1< + +0800cfc0 : + * Initialize coefficient buffer controller. + */ + +GLOBAL(void) +jinit_d_coef_controller (j_decompress_ptr cinfo, boolean need_full_buffer) +{ + 800cfc0: e92d 47ff stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, lr} + my_coef_ptr coef; + + coef = (my_coef_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 800cfc4: 6843 ldr r3, [r0, #4] +{ + 800cfc6: 460e mov r6, r1 + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 800cfc8: 2274 movs r2, #116 ; 0x74 + 800cfca: 2101 movs r1, #1 + 800cfcc: 681b ldr r3, [r3, #0] +{ + 800cfce: 4605 mov r5, r0 + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 800cfd0: 4798 blx r3 + SIZEOF(my_coef_controller)); + cinfo->coef = (struct jpeg_d_coef_controller *) coef; + coef->pub.start_input_pass = start_input_pass; + 800cfd2: 4b2c ldr r3, [pc, #176] ; (800d084 ) + cinfo->coef = (struct jpeg_d_coef_controller *) coef; + 800cfd4: f8c5 01c0 str.w r0, [r5, #448] ; 0x1c0 + coef->pub.start_output_pass = start_output_pass; +#ifdef BLOCK_SMOOTHING_SUPPORTED + coef->coef_bits_latch = NULL; + 800cfd8: 2700 movs r7, #0 + coef->pub.start_input_pass = start_input_pass; + 800cfda: 6003 str r3, [r0, #0] + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 800cfdc: 4604 mov r4, r0 + coef->pub.start_output_pass = start_output_pass; + 800cfde: 4b2a ldr r3, [pc, #168] ; (800d088 ) + 800cfe0: f100 0844 add.w r8, r0, #68 ; 0x44 + coef->coef_bits_latch = NULL; + 800cfe4: 6707 str r7, [r0, #112] ; 0x70 + coef->pub.start_output_pass = start_output_pass; + 800cfe6: 6083 str r3, [r0, #8] +#endif + + /* Create the coefficient buffer. */ + if (need_full_buffer) { + 800cfe8: b386 cbz r6, 800d04c + /* padded to a multiple of samp_factor DCT blocks in each direction. */ + /* Note we ask for a pre-zeroed array. */ + int ci, access_rows; + jpeg_component_info *compptr; + + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + 800cfea: f8d5 60d8 ldr.w r6, [r5, #216] ; 0xd8 + 800cfee: 6a6b ldr r3, [r5, #36] ; 0x24 + 800cff0: 42bb cmp r3, r7 + 800cff2: dc09 bgt.n 800d008 + (long) compptr->v_samp_factor), + (JDIMENSION) access_rows); + } + coef->pub.consume_data = consume_data; + coef->pub.decompress_data = decompress_data; + coef->pub.coef_arrays = coef->whole_image; /* link to virtual arrays */ + 800cff4: f104 0348 add.w r3, r4, #72 ; 0x48 + 800cff8: 4924 ldr r1, [pc, #144] ; (800d08c ) + 800cffa: 4a25 ldr r2, [pc, #148] ; (800d090 ) + coef->pub.consume_data = consume_data; + 800cffc: 6061 str r1, [r4, #4] + coef->pub.coef_arrays = coef->whole_image; /* link to virtual arrays */ + 800cffe: e9c4 2303 strd r2, r3, [r4, #12] + (size_t) (D_MAX_BLOCKS_IN_MCU * SIZEOF(JBLOCK))); + coef->pub.consume_data = dummy_consume_data; + coef->pub.decompress_data = decompress_onepass; + coef->pub.coef_arrays = NULL; /* flag for no virtual arrays */ + } +} + 800d002: b004 add sp, #16 + 800d004: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + if (cinfo->progressive_mode) + 800d008: f8d5 30e0 ldr.w r3, [r5, #224] ; 0xe0 + access_rows = compptr->v_samp_factor; + 800d00c: f8d6 900c ldr.w r9, [r6, #12] + if (cinfo->progressive_mode) + 800d010: b10b cbz r3, 800d016 + access_rows *= 3; + 800d012: eb09 0949 add.w r9, r9, r9, lsl #1 + coef->whole_image[ci] = (*cinfo->mem->request_virt_barray) + 800d016: 686b ldr r3, [r5, #4] + ci++, compptr++) { + 800d018: 3701 adds r7, #1 + (JDIMENSION) jround_up((long) compptr->width_in_blocks, + 800d01a: 68b1 ldr r1, [r6, #8] + ci++, compptr++) { + 800d01c: 3658 adds r6, #88 ; 0x58 + (JDIMENSION) jround_up((long) compptr->width_in_blocks, + 800d01e: f856 0c3c ldr.w r0, [r6, #-60] + coef->whole_image[ci] = (*cinfo->mem->request_virt_barray) + 800d022: f8d3 a014 ldr.w sl, [r3, #20] + (JDIMENSION) jround_up((long) compptr->width_in_blocks, + 800d026: f00b fc3a bl 801889e + (JDIMENSION) jround_up((long) compptr->height_in_blocks, + 800d02a: f856 1c4c ldr.w r1, [r6, #-76] + (JDIMENSION) jround_up((long) compptr->width_in_blocks, + 800d02e: 9003 str r0, [sp, #12] + (JDIMENSION) jround_up((long) compptr->height_in_blocks, + 800d030: f856 0c38 ldr.w r0, [r6, #-56] + 800d034: f00b fc33 bl 801889e + coef->whole_image[ci] = (*cinfo->mem->request_virt_barray) + 800d038: 2201 movs r2, #1 + 800d03a: 9b03 ldr r3, [sp, #12] + 800d03c: 4611 mov r1, r2 + 800d03e: e9cd 0900 strd r0, r9, [sp] + 800d042: 4628 mov r0, r5 + 800d044: 47d0 blx sl + 800d046: f848 0f04 str.w r0, [r8, #4]! + ci++, compptr++) { + 800d04a: e7d0 b.n 800cfee + (*cinfo->mem->alloc_large) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 800d04c: 686b ldr r3, [r5, #4] + 800d04e: f44f 62a0 mov.w r2, #1280 ; 0x500 + 800d052: 2101 movs r1, #1 + 800d054: 4628 mov r0, r5 + 800d056: 685b ldr r3, [r3, #4] + 800d058: 4798 blx r3 + for (i = 0; i < D_MAX_BLOCKS_IN_MCU; i++) { + 800d05a: f104 031c add.w r3, r4, #28 + 800d05e: 4602 mov r2, r0 + coef->MCU_buffer[i] = buffer + i; + 800d060: f843 2f04 str.w r2, [r3, #4]! + for (i = 0; i < D_MAX_BLOCKS_IN_MCU; i++) { + 800d064: 4543 cmp r3, r8 + 800d066: f102 0280 add.w r2, r2, #128 ; 0x80 + 800d06a: d1f9 bne.n 800d060 + if (cinfo->lim_Se == 0) /* DC only case: want to bypass later */ + 800d06c: f8d5 11b0 ldr.w r1, [r5, #432] ; 0x1b0 + 800d070: b919 cbnz r1, 800d07a + FMEMZERO((void FAR *) buffer, + 800d072: f44f 62a0 mov.w r2, #1280 ; 0x500 + 800d076: f027 fca1 bl 80349bc + coef->pub.coef_arrays = NULL; /* flag for no virtual arrays */ + 800d07a: 4906 ldr r1, [pc, #24] ; (800d094 ) + 800d07c: 2300 movs r3, #0 + 800d07e: 4a06 ldr r2, [pc, #24] ; (800d098 ) + 800d080: e7bc b.n 800cffc + 800d082: bf00 nop + 800d084: 0800c711 .word 0x0800c711 + 800d088: 0800c961 .word 0x0800c961 + 800d08c: 0800c71f .word 0x0800c71f + 800d090: 0800c853 .word 0x0800c853 + 800d094: 0800c71b .word 0x0800c71b + 800d098: 0800ca19 .word 0x0800ca19 + +0800d09c : + int i; + INT32 x; + SHIFT_TEMPS + + cconvert->Cr_r_tab = (int *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 800d09c: 6843 ldr r3, [r0, #4] + 800d09e: f44f 6280 mov.w r2, #1024 ; 0x400 + 800d0a2: 2101 movs r1, #1 + 800d0a4: 681b ldr r3, [r3, #0] +{ + 800d0a6: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} + 800d0aa: 4604 mov r4, r0 + my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert; + 800d0ac: f8d0 51dc ldr.w r5, [r0, #476] ; 0x1dc + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 800d0b0: 4798 blx r3 + (MAXJSAMPLE+1) * SIZEOF(int)); + cconvert->Cb_b_tab = (int *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 800d0b2: f44f 6280 mov.w r2, #1024 ; 0x400 + 800d0b6: 6863 ldr r3, [r4, #4] + 800d0b8: 2101 movs r1, #1 + cconvert->Cr_r_tab = (int *) + 800d0ba: 60a8 str r0, [r5, #8] + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 800d0bc: 4620 mov r0, r4 + 800d0be: 681b ldr r3, [r3, #0] + 800d0c0: 4798 blx r3 + (MAXJSAMPLE+1) * SIZEOF(int)); + cconvert->Cr_g_tab = (INT32 *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 800d0c2: 6863 ldr r3, [r4, #4] + cconvert->Cb_b_tab = (int *) + 800d0c4: 60e8 str r0, [r5, #12] + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 800d0c6: f44f 6280 mov.w r2, #1024 ; 0x400 + 800d0ca: 681b ldr r3, [r3, #0] + 800d0cc: 2101 movs r1, #1 + 800d0ce: 4620 mov r0, r4 + for (i = 0, x = -CENTERJSAMPLE; i <= MAXJSAMPLE; i++, x++) { + /* i is the actual input pixel value, in the range 0..MAXJSAMPLE */ + /* The Cb or Cr value we are thinking of is x = i - CENTERJSAMPLE */ + /* Cr=>R value is nearest int to 1.40200 * x */ + cconvert->Cr_r_tab[i] = (int) + RIGHT_SHIFT(FIX(1.40200) * x + ONE_HALF, SCALEBITS); + 800d0d0: f8df 807c ldr.w r8, [pc, #124] ; 800d150 + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 800d0d4: 4798 blx r3 + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 800d0d6: 6863 ldr r3, [r4, #4] + cconvert->Cr_g_tab = (INT32 *) + 800d0d8: 6128 str r0, [r5, #16] + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 800d0da: 2101 movs r1, #1 + 800d0dc: 681b ldr r3, [r3, #0] + 800d0de: 4620 mov r0, r4 + 800d0e0: f44f 6280 mov.w r2, #1024 ; 0x400 + /* Cb=>B value is nearest int to 1.77200 * x */ + cconvert->Cb_b_tab[i] = (int) + RIGHT_SHIFT(FIX(1.77200) * x + ONE_HALF, SCALEBITS); + 800d0e4: 4f17 ldr r7, [pc, #92] ; (800d144 ) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 800d0e6: 4798 blx r3 + /* Cr=>G value is scaled-up -0.71414 * x */ + cconvert->Cr_g_tab[i] = (- FIX(0.71414)) * x; + 800d0e8: 692c ldr r4, [r5, #16] + cconvert->Cb_g_tab = (INT32 *) + 800d0ea: 6168 str r0, [r5, #20] + for (i = 0, x = -CENTERJSAMPLE; i <= MAXJSAMPLE; i++, x++) { + 800d0ec: 2300 movs r3, #0 + RIGHT_SHIFT(FIX(1.40200) * x + ONE_HALF, SCALEBITS); + 800d0ee: f8df e064 ldr.w lr, [pc, #100] ; 800d154 + /* Cb=>G value is scaled-up -0.34414 * x */ + /* We also add in ONE_HALF so that need not do it in inner loop */ + cconvert->Cb_g_tab[i] = (- FIX(0.34414)) * x + ONE_HALF; + 800d0f2: 4915 ldr r1, [pc, #84] ; (800d148 ) + cconvert->Cb_b_tab[i] = (int) + 800d0f4: e9d5 c602 ldrd ip, r6, [r5, #8] + cconvert->Cr_g_tab[i] = (- FIX(0.71414)) * x; + 800d0f8: 4d14 ldr r5, [pc, #80] ; (800d14c ) + RIGHT_SHIFT(FIX(1.40200) * x + ONE_HALF, SCALEBITS); + 800d0fa: fb08 e203 mla r2, r8, r3, lr + 800d0fe: 1412 asrs r2, r2, #16 + cconvert->Cr_r_tab[i] = (int) + 800d100: f84c 2023 str.w r2, [ip, r3, lsl #2] + RIGHT_SHIFT(FIX(1.77200) * x + ONE_HALF, SCALEBITS); + 800d104: fb07 f203 mul.w r2, r7, r3 + 800d108: f5a2 0262 sub.w r2, r2, #14811136 ; 0xe20000 + 800d10c: f5a2 42a2 sub.w r2, r2, #20736 ; 0x5100 + 800d110: 1412 asrs r2, r2, #16 + cconvert->Cb_b_tab[i] = (int) + 800d112: f846 2023 str.w r2, [r6, r3, lsl #2] + cconvert->Cr_g_tab[i] = (- FIX(0.71414)) * x; + 800d116: fb05 f203 mul.w r2, r5, r3 + 800d11a: f502 02b6 add.w r2, r2, #5963776 ; 0x5b0000 + 800d11e: f502 42d2 add.w r2, r2, #26880 ; 0x6900 + 800d122: f844 2023 str.w r2, [r4, r3, lsl #2] + cconvert->Cb_g_tab[i] = (- FIX(0.34414)) * x + ONE_HALF; + 800d126: fb01 f203 mul.w r2, r1, r3 + 800d12a: f502 1232 add.w r2, r2, #2916352 ; 0x2c8000 + 800d12e: f502 6250 add.w r2, r2, #3328 ; 0xd00 + 800d132: f840 2023 str.w r2, [r0, r3, lsl #2] + for (i = 0, x = -CENTERJSAMPLE; i <= MAXJSAMPLE; i++, x++) { + 800d136: 3301 adds r3, #1 + 800d138: f5b3 7f80 cmp.w r3, #256 ; 0x100 + 800d13c: d1dd bne.n 800d0fa + } +} + 800d13e: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + 800d142: bf00 nop + 800d144: 0001c5a2 .word 0x0001c5a2 + 800d148: ffffa7e6 .word 0xffffa7e6 + 800d14c: ffff492e .word 0xffff492e + 800d150: 000166e9 .word 0x000166e9 + 800d154: ff4d0b80 .word 0xff4d0b80 + +0800d158 : + +METHODDEF(void) +ycc_rgb_convert (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION input_row, + JSAMPARRAY output_buf, int num_rows) +{ + 800d158: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert; + 800d15c: f8d0 41dc ldr.w r4, [r0, #476] ; 0x1dc +{ + 800d160: b087 sub sp, #28 + register int y, cb, cr; + register JSAMPROW outptr; + register JSAMPROW inptr0, inptr1, inptr2; + register JDIMENSION col; + JDIMENSION num_cols = cinfo->output_width; + 800d162: 6f05 ldr r5, [r0, #112] ; 0x70 + 800d164: ebc3 0282 rsb r2, r3, r2, lsl #2 + /* copy these pointers into registers if possible */ + register JSAMPLE * range_limit = cinfo->sample_range_limit; + 800d168: f8d0 014c ldr.w r0, [r0, #332] ; 0x14c + register int * Crrtab = cconvert->Cr_r_tab; + register int * Cbbtab = cconvert->Cb_b_tab; + register INT32 * Crgtab = cconvert->Cr_g_tab; + register INT32 * Cbgtab = cconvert->Cb_g_tab; + 800d16c: f8d4 e014 ldr.w lr, [r4, #20] + register JSAMPLE * range_limit = cinfo->sample_range_limit; + 800d170: 9002 str r0, [sp, #8] + JDIMENSION num_cols = cinfo->output_width; + 800d172: 9501 str r5, [sp, #4] + register int * Crrtab = cconvert->Cr_r_tab; + 800d174: 9205 str r2, [sp, #20] + register int * Cbbtab = cconvert->Cb_b_tab; + 800d176: e9d4 6002 ldrd r6, r0, [r4, #8] + 800d17a: 9003 str r0, [sp, #12] + register INT32 * Crgtab = cconvert->Cr_g_tab; + 800d17c: 6920 ldr r0, [r4, #16] + 800d17e: 9004 str r0, [sp, #16] + SHIFT_TEMPS + + while (--num_rows >= 0) { + 800d180: 9a10 ldr r2, [sp, #64] ; 0x40 + 800d182: 3a01 subs r2, #1 + 800d184: 9210 str r2, [sp, #64] ; 0x40 + 800d186: d502 bpl.n 800d18e + SCALEBITS))]; + outptr[RGB_BLUE] = range_limit[y + Cbbtab[cb]]; + outptr += RGB_PIXELSIZE; + } + } +} + 800d188: b007 add sp, #28 + 800d18a: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + inptr0 = input_buf[0][input_row]; + 800d18e: 9a05 ldr r2, [sp, #20] + 800d190: 680c ldr r4, [r1, #0] + 800d192: 189d adds r5, r3, r2 + for (col = 0; col < num_cols; col++) { + 800d194: f853 0b04 ldr.w r0, [r3], #4 + 800d198: f854 8005 ldr.w r8, [r4, r5] + inptr1 = input_buf[1][input_row]; + 800d19c: 684c ldr r4, [r1, #4] + 800d19e: 5964 ldr r4, [r4, r5] + 800d1a0: f104 3cff add.w ip, r4, #4294967295 + inptr2 = input_buf[2][input_row]; + 800d1a4: 688c ldr r4, [r1, #8] + 800d1a6: 5967 ldr r7, [r4, r5] + 800d1a8: 9c01 ldr r4, [sp, #4] + 800d1aa: 3f01 subs r7, #1 + 800d1ac: eb04 0a08 add.w sl, r4, r8 + for (col = 0; col < num_cols; col++) { + 800d1b0: 45d0 cmp r8, sl + 800d1b2: f100 0003 add.w r0, r0, #3 + 800d1b6: d0e3 beq.n 800d180 + outptr[RGB_RED] = range_limit[y + Crrtab[cr]]; + 800d1b8: f817 9f01 ldrb.w r9, [r7, #1]! + y = GETJSAMPLE(inptr0[col]); + 800d1bc: f818 4b01 ldrb.w r4, [r8], #1 + outptr[RGB_RED] = range_limit[y + Crrtab[cr]]; + 800d1c0: 9a02 ldr r2, [sp, #8] + cb = GETJSAMPLE(inptr1[col]); + 800d1c2: f81c bf01 ldrb.w fp, [ip, #1]! + outptr[RGB_RED] = range_limit[y + Crrtab[cr]]; + 800d1c6: f856 5029 ldr.w r5, [r6, r9, lsl #2] + 800d1ca: 4414 add r4, r2 + ((int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], + 800d1cc: fa0f fb8b sxth.w fp, fp + 800d1d0: 9a04 ldr r2, [sp, #16] + outptr[RGB_RED] = range_limit[y + Crrtab[cr]]; + 800d1d2: 5d65 ldrb r5, [r4, r5] + 800d1d4: f800 5c01 strb.w r5, [r0, #-1] + ((int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], + 800d1d8: f852 5029 ldr.w r5, [r2, r9, lsl #2] + 800d1dc: f85e 202b ldr.w r2, [lr, fp, lsl #2] + 800d1e0: 4415 add r5, r2 + outptr[RGB_BLUE] = range_limit[y + Cbbtab[cb]]; + 800d1e2: 9a03 ldr r2, [sp, #12] + ((int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], + 800d1e4: 142d asrs r5, r5, #16 + outptr[RGB_GREEN] = range_limit[y + + 800d1e6: 5d65 ldrb r5, [r4, r5] + 800d1e8: f800 5c02 strb.w r5, [r0, #-2] + outptr[RGB_BLUE] = range_limit[y + Cbbtab[cb]]; + 800d1ec: f852 502b ldr.w r5, [r2, fp, lsl #2] + 800d1f0: 5d64 ldrb r4, [r4, r5] + 800d1f2: f800 4c03 strb.w r4, [r0, #-3] + for (col = 0; col < num_cols; col++) { + 800d1f6: e7db b.n 800d1b0 + +0800d1f8 : + +METHODDEF(void) +rgb_gray_convert (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION input_row, + JSAMPARRAY output_buf, int num_rows) +{ + 800d1f8: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert; + register int r, g, b; + register INT32 * ctab = cconvert->rgb_y_tab; + 800d1fc: f8d0 41dc ldr.w r4, [r0, #476] ; 0x1dc + 800d200: ebc3 0282 rsb r2, r3, r2, lsl #2 +{ + 800d204: 9d09 ldr r5, [sp, #36] ; 0x24 + register INT32 * ctab = cconvert->rgb_y_tab; + 800d206: 69a6 ldr r6, [r4, #24] + register JSAMPROW outptr; + register JSAMPROW inptr0, inptr1, inptr2; + register JDIMENSION col; + JDIMENSION num_cols = cinfo->output_width; + 800d208: 6f07 ldr r7, [r0, #112] ; 0x70 + + while (--num_rows >= 0) { + 800d20a: 3d01 subs r5, #1 + 800d20c: d501 bpl.n 800d212 + outptr[col] = (JSAMPLE) + ((ctab[r+R_Y_OFF] + ctab[g+G_Y_OFF] + ctab[b+B_Y_OFF]) + >> SCALEBITS); + } + } +} + 800d20e: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + inptr0 = input_buf[0][input_row]; + 800d212: 189c adds r4, r3, r2 + 800d214: 6808 ldr r0, [r1, #0] + outptr = *output_buf++; + 800d216: f853 9b04 ldr.w r9, [r3], #4 + inptr0 = input_buf[0][input_row]; + 800d21a: f850 c004 ldr.w ip, [r0, r4] + inptr1 = input_buf[1][input_row]; + 800d21e: 6848 ldr r0, [r1, #4] + 800d220: f850 e004 ldr.w lr, [r0, r4] + inptr2 = input_buf[2][input_row]; + 800d224: 6888 ldr r0, [r1, #8] + 800d226: f850 8004 ldr.w r8, [r0, r4] + for (col = 0; col < num_cols; col++) { + 800d22a: 2000 movs r0, #0 + 800d22c: 42b8 cmp r0, r7 + 800d22e: d0ec beq.n 800d20a + ((ctab[r+R_Y_OFF] + ctab[g+G_Y_OFF] + ctab[b+B_Y_OFF]) + 800d230: f81e 4000 ldrb.w r4, [lr, r0] + 800d234: f81c b000 ldrb.w fp, [ip, r0] + 800d238: f504 7480 add.w r4, r4, #256 ; 0x100 + 800d23c: f856 a024 ldr.w sl, [r6, r4, lsl #2] + 800d240: f856 402b ldr.w r4, [r6, fp, lsl #2] + 800d244: 4454 add r4, sl + 800d246: f818 a000 ldrb.w sl, [r8, r0] + 800d24a: f50a 7a00 add.w sl, sl, #512 ; 0x200 + 800d24e: f856 a02a ldr.w sl, [r6, sl, lsl #2] + 800d252: 4454 add r4, sl + >> SCALEBITS); + 800d254: 1424 asrs r4, r4, #16 + outptr[col] = (JSAMPLE) + 800d256: f809 4000 strb.w r4, [r9, r0] + for (col = 0; col < num_cols; col++) { + 800d25a: 3001 adds r0, #1 + 800d25c: e7e6 b.n 800d22c + +0800d25e : + +METHODDEF(void) +rgb_convert (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION input_row, + JSAMPARRAY output_buf, int num_rows) +{ + 800d25e: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} + 800d262: 9d06 ldr r5, [sp, #24] + 800d264: ebc3 0282 rsb r2, r3, r2, lsl #2 + register JSAMPROW outptr; + register JSAMPROW inptr0, inptr1, inptr2; + register JDIMENSION col; + JDIMENSION num_cols = cinfo->output_width; + 800d268: 6f06 ldr r6, [r0, #112] ; 0x70 + + while (--num_rows >= 0) { + 800d26a: 3d01 subs r5, #1 + 800d26c: d501 bpl.n 800d272 + outptr[RGB_GREEN] = inptr1[col]; + outptr[RGB_BLUE] = inptr2[col]; + outptr += RGB_PIXELSIZE; + } + } +} + 800d26e: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + inptr0 = input_buf[0][input_row]; + 800d272: 1898 adds r0, r3, r2 + 800d274: 680c ldr r4, [r1, #0] + 800d276: 5827 ldr r7, [r4, r0] + inptr1 = input_buf[1][input_row]; + 800d278: 684c ldr r4, [r1, #4] + 800d27a: f854 c000 ldr.w ip, [r4, r0] + inptr2 = input_buf[2][input_row]; + 800d27e: 688c ldr r4, [r1, #8] + 800d280: f854 e000 ldr.w lr, [r4, r0] + for (col = 0; col < num_cols; col++) { + 800d284: 2000 movs r0, #0 + 800d286: f853 4b04 ldr.w r4, [r3], #4 + 800d28a: 42b0 cmp r0, r6 + 800d28c: f104 0403 add.w r4, r4, #3 + 800d290: d0eb beq.n 800d26a + outptr[RGB_RED] = inptr0[col]; + 800d292: f817 8000 ldrb.w r8, [r7, r0] + 800d296: f804 8c01 strb.w r8, [r4, #-1] + outptr[RGB_GREEN] = inptr1[col]; + 800d29a: f81c 8000 ldrb.w r8, [ip, r0] + 800d29e: f804 8c02 strb.w r8, [r4, #-2] + outptr[RGB_BLUE] = inptr2[col]; + 800d2a2: f81e 8000 ldrb.w r8, [lr, r0] + for (col = 0; col < num_cols; col++) { + 800d2a6: 3001 adds r0, #1 + outptr[RGB_BLUE] = inptr2[col]; + 800d2a8: f804 8c03 strb.w r8, [r4, #-3] + for (col = 0; col < num_cols; col++) { + 800d2ac: e7ed b.n 800d28a + +0800d2ae : + +METHODDEF(void) +null_convert (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION input_row, + JSAMPARRAY output_buf, int num_rows) +{ + 800d2ae: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} + 800d2b2: 9e07 ldr r6, [sp, #28] + 800d2b4: ebc3 0282 rsb r2, r3, r2, lsl #2 + register JSAMPROW inptr, outptr; + register JDIMENSION count; + register int num_components = cinfo->num_components; + 800d2b8: 6a47 ldr r7, [r0, #36] ; 0x24 + JDIMENSION num_cols = cinfo->output_width; + 800d2ba: f8d0 e070 ldr.w lr, [r0, #112] ; 0x70 + int ci; + + while (--num_rows >= 0) { + 800d2be: 3e01 subs r6, #1 + 800d2c0: d418 bmi.n 800d2f4 + for (ci = 0; ci < num_components; ci++) { + inptr = input_buf[ci][input_row]; + 800d2c2: eb03 0c02 add.w ip, r3, r2 + for (ci = 0; ci < num_components; ci++) { + 800d2c6: 2000 movs r0, #0 + 800d2c8: e00a b.n 800d2e0 + inptr = input_buf[ci][input_row]; + 800d2ca: f851 4020 ldr.w r4, [r1, r0, lsl #2] + 800d2ce: f854 500c ldr.w r5, [r4, ip] + outptr = output_buf[0] + ci; + 800d2d2: 681c ldr r4, [r3, #0] + 800d2d4: eb05 080e add.w r8, r5, lr + 800d2d8: 4404 add r4, r0 + for (count = num_cols; count > 0; count--) { + 800d2da: 4545 cmp r5, r8 + 800d2dc: d104 bne.n 800d2e8 + for (ci = 0; ci < num_components; ci++) { + 800d2de: 3001 adds r0, #1 + 800d2e0: 42b8 cmp r0, r7 + 800d2e2: dbf2 blt.n 800d2ca + *outptr = *inptr++; /* needn't bother with GETJSAMPLE() here */ + outptr += num_components; + } + } + input_row++; + output_buf++; + 800d2e4: 3304 adds r3, #4 + 800d2e6: e7ea b.n 800d2be + *outptr = *inptr++; /* needn't bother with GETJSAMPLE() here */ + 800d2e8: f815 9b01 ldrb.w r9, [r5], #1 + 800d2ec: f884 9000 strb.w r9, [r4] + outptr += num_components; + 800d2f0: 443c add r4, r7 + for (count = num_cols; count > 0; count--) { + 800d2f2: e7f2 b.n 800d2da + } +} + 800d2f4: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} + +0800d2f8 : + +METHODDEF(void) +gray_rgb_convert (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION input_row, + JSAMPARRAY output_buf, int num_rows) +{ + 800d2f8: b5f0 push {r4, r5, r6, r7, lr} + 800d2fa: 9d05 ldr r5, [sp, #20] + 800d2fc: ebc3 0282 rsb r2, r3, r2, lsl #2 + register JSAMPROW inptr, outptr; + register JDIMENSION col; + JDIMENSION num_cols = cinfo->output_width; + 800d300: 6f07 ldr r7, [r0, #112] ; 0x70 + + while (--num_rows >= 0) { + 800d302: 3d01 subs r5, #1 + 800d304: d500 bpl.n 800d308 + /* We can dispense with GETJSAMPLE() here */ + outptr[RGB_RED] = outptr[RGB_GREEN] = outptr[RGB_BLUE] = inptr[col]; + outptr += RGB_PIXELSIZE; + } + } +} + 800d306: bdf0 pop {r4, r5, r6, r7, pc} + inptr = input_buf[0][input_row++]; + 800d308: 6808 ldr r0, [r1, #0] + 800d30a: 181c adds r4, r3, r0 + for (col = 0; col < num_cols; col++) { + 800d30c: f853 0b04 ldr.w r0, [r3], #4 + 800d310: 58a4 ldr r4, [r4, r2] + 800d312: eb04 0c07 add.w ip, r4, r7 + 800d316: 4564 cmp r4, ip + 800d318: f100 0003 add.w r0, r0, #3 + 800d31c: d0f1 beq.n 800d302 + outptr[RGB_RED] = outptr[RGB_GREEN] = outptr[RGB_BLUE] = inptr[col]; + 800d31e: f814 6b01 ldrb.w r6, [r4], #1 + 800d322: f800 6c03 strb.w r6, [r0, #-3] + 800d326: f800 6c02 strb.w r6, [r0, #-2] + 800d32a: f800 6c01 strb.w r6, [r0, #-1] + for (col = 0; col < num_cols; col++) { + 800d32e: e7f2 b.n 800d316 + +0800d330 : + +METHODDEF(void) +ycck_cmyk_convert (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION input_row, + JSAMPARRAY output_buf, int num_rows) +{ + 800d330: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert; + 800d334: f8d0 41dc ldr.w r4, [r0, #476] ; 0x1dc +{ + 800d338: b087 sub sp, #28 + register int y, cb, cr; + register JSAMPROW outptr; + register JSAMPROW inptr0, inptr1, inptr2, inptr3; + register JDIMENSION col; + JDIMENSION num_cols = cinfo->output_width; + 800d33a: 6f05 ldr r5, [r0, #112] ; 0x70 + 800d33c: ebc3 0882 rsb r8, r3, r2, lsl #2 + /* copy these pointers into registers if possible */ + register JSAMPLE * range_limit = cinfo->sample_range_limit; + 800d340: f8d0 614c ldr.w r6, [r0, #332] ; 0x14c + register int * Crrtab = cconvert->Cr_r_tab; + register int * Cbbtab = cconvert->Cb_b_tab; + register INT32 * Crgtab = cconvert->Cr_g_tab; + register INT32 * Cbgtab = cconvert->Cb_g_tab; + 800d344: f8d4 e014 ldr.w lr, [r4, #20] + JDIMENSION num_cols = cinfo->output_width; + 800d348: 9500 str r5, [sp, #0] + register int * Cbbtab = cconvert->Cb_b_tab; + 800d34a: e9d4 c002 ldrd ip, r0, [r4, #8] + 800d34e: 9001 str r0, [sp, #4] + register INT32 * Crgtab = cconvert->Cr_g_tab; + 800d350: 6920 ldr r0, [r4, #16] + 800d352: 9002 str r0, [sp, #8] + SHIFT_TEMPS + + while (--num_rows >= 0) { + 800d354: 9a10 ldr r2, [sp, #64] ; 0x40 + 800d356: 3a01 subs r2, #1 + 800d358: 9210 str r2, [sp, #64] ; 0x40 + 800d35a: d502 bpl.n 800d362 + /* K passes through unchanged */ + outptr[3] = inptr3[col]; /* don't need GETJSAMPLE here */ + outptr += 4; + } + } +} + 800d35c: b007 add sp, #28 + 800d35e: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + inptr0 = input_buf[0][input_row]; + 800d362: eb03 0008 add.w r0, r3, r8 + 800d366: 680a ldr r2, [r1, #0] + 800d368: f853 5b04 ldr.w r5, [r3], #4 + 800d36c: 5812 ldr r2, [r2, r0] + 800d36e: 9203 str r2, [sp, #12] + inptr1 = input_buf[1][input_row]; + 800d370: 684a ldr r2, [r1, #4] + 800d372: 5812 ldr r2, [r2, r0] + 800d374: 9204 str r2, [sp, #16] + inptr2 = input_buf[2][input_row]; + 800d376: 688a ldr r2, [r1, #8] + 800d378: f852 9000 ldr.w r9, [r2, r0] + inptr3 = input_buf[3][input_row]; + 800d37c: 68ca ldr r2, [r1, #12] + 800d37e: f852 a000 ldr.w sl, [r2, r0] + for (col = 0; col < num_cols; col++) { + 800d382: 2200 movs r2, #0 + 800d384: 9800 ldr r0, [sp, #0] + 800d386: 3504 adds r5, #4 + 800d388: 4282 cmp r2, r0 + 800d38a: d0e3 beq.n 800d354 + outptr[0] = range_limit[MAXJSAMPLE - (y + Crrtab[cr])]; /* red */ + 800d38c: f819 7002 ldrb.w r7, [r9, r2] + cb = GETJSAMPLE(inptr1[col]); + 800d390: 9c04 ldr r4, [sp, #16] + y = GETJSAMPLE(inptr0[col]); + 800d392: 9803 ldr r0, [sp, #12] + cb = GETJSAMPLE(inptr1[col]); + 800d394: f814 b002 ldrb.w fp, [r4, r2] + y = GETJSAMPLE(inptr0[col]); + 800d398: 5c80 ldrb r0, [r0, r2] + outptr[0] = range_limit[MAXJSAMPLE - (y + Crrtab[cr])]; /* red */ + 800d39a: f85c 4027 ldr.w r4, [ip, r7, lsl #2] + ((int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], + 800d39e: fa0f fb8b sxth.w fp, fp + outptr[0] = range_limit[MAXJSAMPLE - (y + Crrtab[cr])]; /* red */ + 800d3a2: 4404 add r4, r0 + 800d3a4: f1c4 04ff rsb r4, r4, #255 ; 0xff + 800d3a8: 5d34 ldrb r4, [r6, r4] + 800d3aa: f805 4c04 strb.w r4, [r5, #-4] + ((int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], + 800d3ae: f85e 402b ldr.w r4, [lr, fp, lsl #2] + 800d3b2: 9405 str r4, [sp, #20] + 800d3b4: 9c02 ldr r4, [sp, #8] + 800d3b6: f854 7027 ldr.w r7, [r4, r7, lsl #2] + 800d3ba: 9c05 ldr r4, [sp, #20] + 800d3bc: 443c add r4, r7 + outptr[1] = range_limit[MAXJSAMPLE - (y + /* green */ + 800d3be: eb00 4424 add.w r4, r0, r4, asr #16 + 800d3c2: f1c4 04ff rsb r4, r4, #255 ; 0xff + 800d3c6: 5d34 ldrb r4, [r6, r4] + 800d3c8: f805 4c03 strb.w r4, [r5, #-3] + outptr[2] = range_limit[MAXJSAMPLE - (y + Cbbtab[cb])]; /* blue */ + 800d3cc: 9c01 ldr r4, [sp, #4] + 800d3ce: f854 402b ldr.w r4, [r4, fp, lsl #2] + 800d3d2: 4420 add r0, r4 + 800d3d4: f1c0 00ff rsb r0, r0, #255 ; 0xff + 800d3d8: 5c30 ldrb r0, [r6, r0] + 800d3da: f805 0c02 strb.w r0, [r5, #-2] + outptr[3] = inptr3[col]; /* don't need GETJSAMPLE here */ + 800d3de: f81a 0002 ldrb.w r0, [sl, r2] + for (col = 0; col < num_cols; col++) { + 800d3e2: 3201 adds r2, #1 + outptr[3] = inptr3[col]; /* don't need GETJSAMPLE here */ + 800d3e4: f805 0c01 strb.w r0, [r5, #-1] + for (col = 0; col < num_cols; col++) { + 800d3e8: e7cc b.n 800d384 + +0800d3ea : + +METHODDEF(void) +start_pass_dcolor (j_decompress_ptr cinfo) +{ + /* no work needed */ +} + 800d3ea: 4770 bx lr + +0800d3ec : +{ + 800d3ec: b513 push {r0, r1, r4, lr} + 800d3ee: 460c mov r4, r1 + 800d3f0: 4611 mov r1, r2 + 800d3f2: 461a mov r2, r3 + jcopy_sample_rows(input_buf[0], (int) input_row, output_buf, 0, + 800d3f4: 6f03 ldr r3, [r0, #112] ; 0x70 + 800d3f6: 6820 ldr r0, [r4, #0] + 800d3f8: 9301 str r3, [sp, #4] + 800d3fa: 9b04 ldr r3, [sp, #16] + 800d3fc: 9300 str r3, [sp, #0] + 800d3fe: 2300 movs r3, #0 + 800d400: f00b fa55 bl 80188ae +} + 800d404: b002 add sp, #8 + 800d406: bd10 pop {r4, pc} + +0800d408 : +{ + my_cconvert_ptr cconvert; + int ci; + + cconvert = (my_cconvert_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 800d408: 6843 ldr r3, [r0, #4] + 800d40a: 221c movs r2, #28 + 800d40c: 2101 movs r1, #1 + 800d40e: 681b ldr r3, [r3, #0] +{ + 800d410: b570 push {r4, r5, r6, lr} + 800d412: 4604 mov r4, r0 + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 800d414: 4798 blx r3 + SIZEOF(my_color_deconverter)); + cinfo->cconvert = (struct jpeg_color_deconverter *) cconvert; + cconvert->pub.start_pass = start_pass_dcolor; + 800d416: 4b4a ldr r3, [pc, #296] ; (800d540 ) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 800d418: 4605 mov r5, r0 + cinfo->cconvert = (struct jpeg_color_deconverter *) cconvert; + 800d41a: f8c4 01dc str.w r0, [r4, #476] ; 0x1dc + cconvert->pub.start_pass = start_pass_dcolor; + 800d41e: 6003 str r3, [r0, #0] + + /* Make sure num_components agrees with jpeg_color_space */ + switch (cinfo->jpeg_color_space) { + 800d420: f894 3028 ldrb.w r3, [r4, #40] ; 0x28 + 800d424: 6a62 ldr r2, [r4, #36] ; 0x24 + 800d426: 2b03 cmp r3, #3 + 800d428: d821 bhi.n 800d46e + 800d42a: 2b01 cmp r3, #1 + 800d42c: d82d bhi.n 800d48a + 800d42e: d023 beq.n 800d478 + if (cinfo->num_components != 4) + ERREXIT(cinfo, JERR_BAD_J_COLORSPACE); + break; + + default: /* JCS_UNKNOWN can be anything */ + if (cinfo->num_components < 1) + 800d430: 2a00 cmp r2, #0 + 800d432: dd23 ble.n 800d47c + /* Set out_color_components and conversion method based on requested space. + * Also clear the component_needed flags for any unused components, + * so that earlier pipeline stages can avoid useless computation. + */ + + switch (cinfo->out_color_space) { + 800d434: f894 1029 ldrb.w r1, [r4, #41] ; 0x29 + case JCS_GRAYSCALE: + cinfo->out_color_components = 1; + if (cinfo->jpeg_color_space == JCS_GRAYSCALE || + 800d438: f894 3028 ldrb.w r3, [r4, #40] ; 0x28 + switch (cinfo->out_color_space) { + 800d43c: 2902 cmp r1, #2 + 800d43e: d055 beq.n 800d4ec + 800d440: 2904 cmp r1, #4 + 800d442: d066 beq.n 800d512 + 800d444: 2901 cmp r1, #1 + 800d446: d16d bne.n 800d524 + if (cinfo->jpeg_color_space == JCS_GRAYSCALE || + 800d448: f003 02fd and.w r2, r3, #253 ; 0xfd + cinfo->out_color_components = 1; + 800d44c: 67a1 str r1, [r4, #120] ; 0x78 + if (cinfo->jpeg_color_space == JCS_GRAYSCALE || + 800d44e: 2a01 cmp r2, #1 + 800d450: d124 bne.n 800d49c + cinfo->jpeg_color_space == JCS_YCbCr) { + cconvert->pub.color_convert = grayscale_convert; + 800d452: 4b3c ldr r3, [pc, #240] ; (800d544 ) + /* For color->grayscale conversion, only the Y (0) component is needed */ + for (ci = 1; ci < cinfo->num_components; ci++) + cinfo->comp_info[ci].component_needed = FALSE; + 800d454: 2058 movs r0, #88 ; 0x58 + for (ci = 1; ci < cinfo->num_components; ci++) + 800d456: 6a61 ldr r1, [r4, #36] ; 0x24 + cconvert->pub.color_convert = grayscale_convert; + 800d458: 606b str r3, [r5, #4] + for (ci = 1; ci < cinfo->num_components; ci++) + 800d45a: 4613 mov r3, r2 + cinfo->comp_info[ci].component_needed = FALSE; + 800d45c: 2500 movs r5, #0 + for (ci = 1; ci < cinfo->num_components; ci++) + 800d45e: 4299 cmp r1, r3 + 800d460: dc15 bgt.n 800d48e + } else /* unsupported non-null conversion */ + ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); + break; + } + + if (cinfo->quantize_colors) + 800d462: 6d63 ldr r3, [r4, #84] ; 0x54 + 800d464: 2b00 cmp r3, #0 + 800d466: d169 bne.n 800d53c + cinfo->output_components = 1; /* single colormapped output component */ + else + cinfo->output_components = cinfo->out_color_components; + 800d468: 6fa3 ldr r3, [r4, #120] ; 0x78 + 800d46a: 67e3 str r3, [r4, #124] ; 0x7c +} + 800d46c: bd70 pop {r4, r5, r6, pc} + switch (cinfo->jpeg_color_space) { + 800d46e: 3b04 subs r3, #4 + 800d470: 2b01 cmp r3, #1 + 800d472: d8dd bhi.n 800d430 + if (cinfo->num_components != 4) + 800d474: 2a04 cmp r2, #4 + 800d476: e000 b.n 800d47a + if (cinfo->num_components != 1) + 800d478: 2a01 cmp r2, #1 + if (cinfo->num_components != 4) + 800d47a: d0db beq.n 800d434 + ERREXIT(cinfo, JERR_BAD_J_COLORSPACE); + 800d47c: 6823 ldr r3, [r4, #0] + 800d47e: 220b movs r2, #11 + 800d480: 4620 mov r0, r4 + 800d482: 615a str r2, [r3, #20] + 800d484: 681b ldr r3, [r3, #0] + 800d486: 4798 blx r3 + 800d488: e7d4 b.n 800d434 + if (cinfo->num_components != 3) + 800d48a: 2a03 cmp r2, #3 + 800d48c: e7f5 b.n 800d47a + cinfo->comp_info[ci].component_needed = FALSE; + 800d48e: f8d4 20d8 ldr.w r2, [r4, #216] ; 0xd8 + 800d492: fb00 2203 mla r2, r0, r3, r2 + for (ci = 1; ci < cinfo->num_components; ci++) + 800d496: 3301 adds r3, #1 + cinfo->comp_info[ci].component_needed = FALSE; + 800d498: 6355 str r5, [r2, #52] ; 0x34 + for (ci = 1; ci < cinfo->num_components; ci++) + 800d49a: e7e0 b.n 800d45e + } else if (cinfo->jpeg_color_space == JCS_RGB) { + 800d49c: 2b02 cmp r3, #2 + 800d49e: d146 bne.n 800d52e + cconvert->pub.color_convert = rgb_gray_convert; + 800d4a0: 4b29 ldr r3, [pc, #164] ; (800d548 ) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 800d4a2: f44f 6240 mov.w r2, #3072 ; 0xc00 + 800d4a6: 4620 mov r0, r4 + rgb_y_tab[i+R_Y_OFF] = FIX(0.29900) * i; + 800d4a8: f644 468b movw r6, #19595 ; 0x4c8b + cconvert->pub.color_convert = rgb_gray_convert; + 800d4ac: 606b str r3, [r5, #4] + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 800d4ae: 6863 ldr r3, [r4, #4] + my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert; + 800d4b0: f8d4 51dc ldr.w r5, [r4, #476] ; 0x1dc + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 800d4b4: 681b ldr r3, [r3, #0] + 800d4b6: 4798 blx r3 + for (i = 0; i <= MAXJSAMPLE; i++) { + 800d4b8: 2300 movs r3, #0 + cconvert->rgb_y_tab = rgb_y_tab = (INT32 *) + 800d4ba: 61a8 str r0, [r5, #24] + rgb_y_tab[i+B_Y_OFF] = FIX(0.11400) * i + ONE_HALF; + 800d4bc: f641 512f movw r1, #7471 ; 0x1d2f + 800d4c0: 3804 subs r0, #4 + rgb_y_tab[i+G_Y_OFF] = FIX(0.58700) * i; + 800d4c2: f249 6546 movw r5, #38470 ; 0x9646 + rgb_y_tab[i+R_Y_OFF] = FIX(0.29900) * i; + 800d4c6: fb06 f203 mul.w r2, r6, r3 + 800d4ca: f840 2f04 str.w r2, [r0, #4]! + rgb_y_tab[i+G_Y_OFF] = FIX(0.58700) * i; + 800d4ce: fb05 f203 mul.w r2, r5, r3 + 800d4d2: f8c0 2400 str.w r2, [r0, #1024] ; 0x400 + rgb_y_tab[i+B_Y_OFF] = FIX(0.11400) * i + ONE_HALF; + 800d4d6: fb01 f203 mul.w r2, r1, r3 + for (i = 0; i <= MAXJSAMPLE; i++) { + 800d4da: 3301 adds r3, #1 + rgb_y_tab[i+B_Y_OFF] = FIX(0.11400) * i + ONE_HALF; + 800d4dc: f502 4200 add.w r2, r2, #32768 ; 0x8000 + for (i = 0; i <= MAXJSAMPLE; i++) { + 800d4e0: f5b3 7f80 cmp.w r3, #256 ; 0x100 + rgb_y_tab[i+B_Y_OFF] = FIX(0.11400) * i + ONE_HALF; + 800d4e4: f8c0 2800 str.w r2, [r0, #2048] ; 0x800 + for (i = 0; i <= MAXJSAMPLE; i++) { + 800d4e8: d1ed bne.n 800d4c6 + 800d4ea: e7ba b.n 800d462 + cinfo->out_color_components = RGB_PIXELSIZE; + 800d4ec: 2203 movs r2, #3 + if (cinfo->jpeg_color_space == JCS_YCbCr) { + 800d4ee: 4293 cmp r3, r2 + cinfo->out_color_components = RGB_PIXELSIZE; + 800d4f0: 67a2 str r2, [r4, #120] ; 0x78 + if (cinfo->jpeg_color_space == JCS_YCbCr) { + 800d4f2: d105 bne.n 800d500 + cconvert->pub.color_convert = ycc_rgb_convert; + 800d4f4: 4b15 ldr r3, [pc, #84] ; (800d54c ) + build_ycc_rgb_table(cinfo); + 800d4f6: 4620 mov r0, r4 + cconvert->pub.color_convert = ycck_cmyk_convert; + 800d4f8: 606b str r3, [r5, #4] + build_ycc_rgb_table(cinfo); + 800d4fa: f7ff fdcf bl 800d09c + 800d4fe: e7b0 b.n 800d462 + } else if (cinfo->jpeg_color_space == JCS_GRAYSCALE) { + 800d500: 2b01 cmp r3, #1 + 800d502: d102 bne.n 800d50a + cconvert->pub.color_convert = gray_rgb_convert; + 800d504: 4b12 ldr r3, [pc, #72] ; (800d550 ) + cconvert->pub.color_convert = null_convert; + 800d506: 606b str r3, [r5, #4] + 800d508: e7ab b.n 800d462 + } else if (cinfo->jpeg_color_space == JCS_RGB) { + 800d50a: 2b02 cmp r3, #2 + 800d50c: d10f bne.n 800d52e + cconvert->pub.color_convert = rgb_convert; + 800d50e: 4b11 ldr r3, [pc, #68] ; (800d554 ) + 800d510: e7f9 b.n 800d506 + if (cinfo->jpeg_color_space == JCS_YCCK) { + 800d512: 2b05 cmp r3, #5 + cinfo->out_color_components = 4; + 800d514: 67a1 str r1, [r4, #120] ; 0x78 + if (cinfo->jpeg_color_space == JCS_YCCK) { + 800d516: d101 bne.n 800d51c + cconvert->pub.color_convert = ycck_cmyk_convert; + 800d518: 4b0f ldr r3, [pc, #60] ; (800d558 ) + 800d51a: e7ec b.n 800d4f6 + } else if (cinfo->jpeg_color_space == JCS_CMYK) { + 800d51c: 2b04 cmp r3, #4 + 800d51e: d106 bne.n 800d52e + cconvert->pub.color_convert = null_convert; + 800d520: 4b0e ldr r3, [pc, #56] ; (800d55c ) + 800d522: e7f0 b.n 800d506 + if (cinfo->out_color_space == cinfo->jpeg_color_space) { + 800d524: 4299 cmp r1, r3 + 800d526: d102 bne.n 800d52e + cinfo->out_color_components = cinfo->num_components; + 800d528: 6a63 ldr r3, [r4, #36] ; 0x24 + 800d52a: 67a3 str r3, [r4, #120] ; 0x78 + 800d52c: e7f8 b.n 800d520 + ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); + 800d52e: 6823 ldr r3, [r4, #0] + 800d530: 221c movs r2, #28 + 800d532: 4620 mov r0, r4 + 800d534: 615a str r2, [r3, #20] + 800d536: 681b ldr r3, [r3, #0] + 800d538: 4798 blx r3 + 800d53a: e792 b.n 800d462 + cinfo->output_components = 1; /* single colormapped output component */ + 800d53c: 2301 movs r3, #1 + 800d53e: e794 b.n 800d46a + 800d540: 0800d3eb .word 0x0800d3eb + 800d544: 0800d3ed .word 0x0800d3ed + 800d548: 0800d1f9 .word 0x0800d1f9 + 800d54c: 0800d159 .word 0x0800d159 + 800d550: 0800d2f9 .word 0x0800d2f9 + 800d554: 0800d25f .word 0x0800d25f + 800d558: 0800d331 .word 0x0800d331 + 800d55c: 0800d2af .word 0x0800d2af + +0800d560 : + * a matching multiplier table. + */ + +METHODDEF(void) +start_pass (j_decompress_ptr cinfo) +{ + 800d560: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + my_idct_ptr idct = (my_idct_ptr) cinfo->idct; + int ci, i; + jpeg_component_info *compptr; + int method = 0; + inverse_DCT_method_ptr method_ptr = NULL; + 800d564: 2500 movs r5, #0 +{ + 800d566: 4607 mov r7, r0 + JQUANT_TBL * qtbl; + + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + 800d568: f8d0 a0d8 ldr.w sl, [r0, #216] ; 0xd8 + 800d56c: f8d0 81d4 ldr.w r8, [r0, #468] ; 0x1d4 + int method = 0; + 800d570: 462c mov r4, r5 + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + 800d572: 46ab mov fp, r5 +{ + 800d574: ed2d 8b04 vpush {d8-d9} + 800d578: b087 sub sp, #28 + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + 800d57a: 6a7b ldr r3, [r7, #36] ; 0x24 + 800d57c: 455b cmp r3, fp + 800d57e: dc04 bgt.n 800d58a + default: + ERREXIT(cinfo, JERR_NOT_COMPILED); + break; + } + } +} + 800d580: b007 add sp, #28 + 800d582: ecbd 8b04 vpop {d8-d9} + 800d586: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + switch ((compptr->DCT_h_scaled_size << 8) + compptr->DCT_v_scaled_size) { + 800d58a: e9da 1209 ldrd r1, r2, [sl, #36] ; 0x24 + 800d58e: f240 700e movw r0, #1806 ; 0x70e + 800d592: eb02 2301 add.w r3, r2, r1, lsl #8 + 800d596: 4283 cmp r3, r0 + 800d598: f000 80d9 beq.w 800d74e + 800d59c: dc5a bgt.n 800d654 + 800d59e: f240 4004 movw r0, #1028 ; 0x404 + 800d5a2: 4283 cmp r3, r0 + 800d5a4: f000 80d6 beq.w 800d754 + 800d5a8: dc2f bgt.n 800d60a + 800d5aa: f5b3 7f01 cmp.w r3, #516 ; 0x204 + 800d5ae: f000 80d3 beq.w 800d758 + 800d5b2: dc1a bgt.n 800d5ea + 800d5b4: f240 2001 movw r0, #513 ; 0x201 + 800d5b8: 4283 cmp r3, r0 + 800d5ba: f000 80cf beq.w 800d75c + 800d5be: dc0e bgt.n 800d5de + 800d5c0: f240 1001 movw r0, #257 ; 0x101 + 800d5c4: 4283 cmp r3, r0 + 800d5c6: f000 80cb beq.w 800d760 + 800d5ca: f5b3 7f81 cmp.w r3, #258 ; 0x102 + 800d5ce: f000 80c9 beq.w 800d764 + ERREXIT2(cinfo, JERR_BAD_DCTSIZE, + 800d5d2: 683b ldr r3, [r7, #0] + 800d5d4: 2007 movs r0, #7 + 800d5d6: 61da str r2, [r3, #28] + 800d5d8: e9c3 0105 strd r0, r1, [r3, #20] + 800d5dc: e0b3 b.n 800d746 + switch ((compptr->DCT_h_scaled_size << 8) + compptr->DCT_v_scaled_size) { + 800d5de: f240 2002 movw r0, #514 ; 0x202 + 800d5e2: 4283 cmp r3, r0 + 800d5e4: d1f5 bne.n 800d5d2 + 800d5e6: 4d9e ldr r5, [pc, #632] ; (800d860 ) + 800d5e8: e0b2 b.n 800d750 + 800d5ea: f240 3006 movw r0, #774 ; 0x306 + 800d5ee: 4283 cmp r3, r0 + 800d5f0: f000 80ba beq.w 800d768 + 800d5f4: f240 4002 movw r0, #1026 ; 0x402 + 800d5f8: 4283 cmp r3, r0 + 800d5fa: f000 80b7 beq.w 800d76c + 800d5fe: f240 3003 movw r0, #771 ; 0x303 + 800d602: 4283 cmp r3, r0 + 800d604: d1e5 bne.n 800d5d2 + method_ptr = jpeg_idct_3x3; + 800d606: 4d97 ldr r5, [pc, #604] ; (800d864 ) + 800d608: e0a2 b.n 800d750 + switch ((compptr->DCT_h_scaled_size << 8) + compptr->DCT_v_scaled_size) { + 800d60a: f240 6003 movw r0, #1539 ; 0x603 + 800d60e: 4283 cmp r3, r0 + 800d610: f000 80ae beq.w 800d770 + 800d614: dc0e bgt.n 800d634 + 800d616: f240 5005 movw r0, #1285 ; 0x505 + 800d61a: 4283 cmp r3, r0 + 800d61c: f000 80aa beq.w 800d774 + 800d620: f240 500a movw r0, #1290 ; 0x50a + 800d624: 4283 cmp r3, r0 + 800d626: f000 80a7 beq.w 800d778 + 800d62a: f5b3 6f81 cmp.w r3, #1032 ; 0x408 + 800d62e: d1d0 bne.n 800d5d2 + method_ptr = jpeg_idct_4x8; + 800d630: 4d8d ldr r5, [pc, #564] ; (800d868 ) + 800d632: e08d b.n 800d750 + switch ((compptr->DCT_h_scaled_size << 8) + compptr->DCT_v_scaled_size) { + 800d634: f240 600c movw r0, #1548 ; 0x60c + 800d638: 4283 cmp r3, r0 + 800d63a: f000 809f beq.w 800d77c + 800d63e: f240 7007 movw r0, #1799 ; 0x707 + 800d642: 4283 cmp r3, r0 + 800d644: f000 809c beq.w 800d780 + 800d648: f240 6006 movw r0, #1542 ; 0x606 + 800d64c: 4283 cmp r3, r0 + 800d64e: d1c0 bne.n 800d5d2 + method_ptr = jpeg_idct_6x6; + 800d650: 4d86 ldr r5, [pc, #536] ; (800d86c ) + 800d652: e07d b.n 800d750 + switch ((compptr->DCT_h_scaled_size << 8) + compptr->DCT_v_scaled_size) { + 800d654: f640 4006 movw r0, #3078 ; 0xc06 + 800d658: 4283 cmp r3, r0 + 800d65a: f000 8093 beq.w 800d784 + 800d65e: dc21 bgt.n 800d6a4 + 800d660: f640 1009 movw r0, #2313 ; 0x909 + 800d664: 4283 cmp r3, r0 + 800d666: f000 808f beq.w 800d788 + 800d66a: dc0d bgt.n 800d688 + 800d66c: f640 0008 movw r0, #2056 ; 0x808 + 800d670: 4283 cmp r3, r0 + 800d672: d039 beq.n 800d6e8 + 800d674: f5b3 6f01 cmp.w r3, #2064 ; 0x810 + 800d678: f000 8088 beq.w 800d78c + 800d67c: f640 0004 movw r0, #2052 ; 0x804 + 800d680: 4283 cmp r3, r0 + 800d682: d1a6 bne.n 800d5d2 + method_ptr = jpeg_idct_8x4; + 800d684: 4d7a ldr r5, [pc, #488] ; (800d870 ) + 800d686: e063 b.n 800d750 + switch ((compptr->DCT_h_scaled_size << 8) + compptr->DCT_v_scaled_size) { + 800d688: f640 200a movw r0, #2570 ; 0xa0a + 800d68c: 4283 cmp r3, r0 + 800d68e: d07f beq.n 800d790 + 800d690: f640 300b movw r0, #2827 ; 0xb0b + 800d694: 4283 cmp r3, r0 + 800d696: d07d beq.n 800d794 + 800d698: f640 2005 movw r0, #2565 ; 0xa05 + 800d69c: 4283 cmp r3, r0 + 800d69e: d198 bne.n 800d5d2 + method_ptr = jpeg_idct_10x5; + 800d6a0: 4d74 ldr r5, [pc, #464] ; (800d874 ) + 800d6a2: e055 b.n 800d750 + switch ((compptr->DCT_h_scaled_size << 8) + compptr->DCT_v_scaled_size) { + 800d6a4: f640 600e movw r0, #3598 ; 0xe0e + 800d6a8: 4283 cmp r3, r0 + 800d6aa: d075 beq.n 800d798 + 800d6ac: dc0d bgt.n 800d6ca + 800d6ae: f640 500d movw r0, #3341 ; 0xd0d + 800d6b2: 4283 cmp r3, r0 + 800d6b4: d072 beq.n 800d79c + 800d6b6: f640 6007 movw r0, #3591 ; 0xe07 + 800d6ba: 4283 cmp r3, r0 + 800d6bc: d070 beq.n 800d7a0 + 800d6be: f640 400c movw r0, #3084 ; 0xc0c + 800d6c2: 4283 cmp r3, r0 + 800d6c4: d185 bne.n 800d5d2 + method_ptr = jpeg_idct_12x12; + 800d6c6: 4d6c ldr r5, [pc, #432] ; (800d878 ) + 800d6c8: e042 b.n 800d750 + switch ((compptr->DCT_h_scaled_size << 8) + compptr->DCT_v_scaled_size) { + 800d6ca: f241 0008 movw r0, #4104 ; 0x1008 + 800d6ce: 4283 cmp r3, r0 + 800d6d0: d068 beq.n 800d7a4 + 800d6d2: f241 0010 movw r0, #4112 ; 0x1010 + 800d6d6: 4283 cmp r3, r0 + 800d6d8: d066 beq.n 800d7a8 + 800d6da: f640 700f movw r0, #3855 ; 0xf0f + 800d6de: 4283 cmp r3, r0 + 800d6e0: f47f af77 bne.w 800d5d2 + method_ptr = jpeg_idct_15x15; + 800d6e4: 4d65 ldr r5, [pc, #404] ; (800d87c ) + 800d6e6: e033 b.n 800d750 + switch (cinfo->dct_method) { + 800d6e8: f897 3048 ldrb.w r3, [r7, #72] ; 0x48 + 800d6ec: 2b02 cmp r3, #2 + 800d6ee: d827 bhi.n 800d740 + 800d6f0: 461c mov r4, r3 + 800d6f2: 4b63 ldr r3, [pc, #396] ; (800d880 ) + 800d6f4: f853 5024 ldr.w r5, [r3, r4, lsl #2] + if (! compptr->component_needed || idct->cur_method[ci] == method) + 800d6f8: f8da 3034 ldr.w r3, [sl, #52] ; 0x34 + idct->pub.inverse_DCT[ci] = method_ptr; + 800d6fc: f848 5f04 str.w r5, [r8, #4]! + if (! compptr->component_needed || idct->cur_method[ci] == method) + 800d700: b1cb cbz r3, 800d736 + 800d702: f8d8 3028 ldr.w r3, [r8, #40] ; 0x28 + 800d706: 42a3 cmp r3, r4 + 800d708: d015 beq.n 800d736 + qtbl = compptr->quant_table; + 800d70a: f8da 6050 ldr.w r6, [sl, #80] ; 0x50 + if (qtbl == NULL) /* happens if no data yet for component */ + 800d70e: b196 cbz r6, 800d736 + switch (method) { + 800d710: 2c01 cmp r4, #1 + idct->cur_method[ci] = method; + 800d712: f8c8 4028 str.w r4, [r8, #40] ; 0x28 + switch (method) { + 800d716: d049 beq.n 800d7ac + 800d718: 2c02 cmp r4, #2 + 800d71a: d05a beq.n 800d7d2 + 800d71c: 2c00 cmp r4, #0 + 800d71e: f040 8098 bne.w 800d852 + ISLOW_MULT_TYPE * ismtbl = (ISLOW_MULT_TYPE *) compptr->dct_table; + 800d722: f8da 2054 ldr.w r2, [sl, #84] ; 0x54 + for (i = 0; i < DCTSIZE2; i++) { + 800d726: 4623 mov r3, r4 + ismtbl[i] = (ISLOW_MULT_TYPE) qtbl->quantval[i]; + 800d728: f836 1013 ldrh.w r1, [r6, r3, lsl #1] + 800d72c: f842 1023 str.w r1, [r2, r3, lsl #2] + for (i = 0; i < DCTSIZE2; i++) { + 800d730: 3301 adds r3, #1 + 800d732: 2b40 cmp r3, #64 ; 0x40 + 800d734: d1f8 bne.n 800d728 + ci++, compptr++) { + 800d736: f10b 0b01 add.w fp, fp, #1 + 800d73a: f10a 0a58 add.w sl, sl, #88 ; 0x58 + 800d73e: e71c b.n 800d57a + ERREXIT(cinfo, JERR_NOT_COMPILED); + 800d740: 683b ldr r3, [r7, #0] + 800d742: 2231 movs r2, #49 ; 0x31 + 800d744: 615a str r2, [r3, #20] + ERREXIT2(cinfo, JERR_BAD_DCTSIZE, + 800d746: 681b ldr r3, [r3, #0] + 800d748: 4638 mov r0, r7 + 800d74a: 4798 blx r3 + break; + 800d74c: e7d4 b.n 800d6f8 + method_ptr = jpeg_idct_7x14; + 800d74e: 4d4d ldr r5, [pc, #308] ; (800d884 ) + method = JDCT_ISLOW; /* jidctint uses islow-style table */ + 800d750: 2400 movs r4, #0 + 800d752: e7d1 b.n 800d6f8 + method_ptr = jpeg_idct_4x4; + 800d754: 4d4c ldr r5, [pc, #304] ; (800d888 ) + 800d756: e7fb b.n 800d750 + method_ptr = jpeg_idct_2x4; + 800d758: 4d4c ldr r5, [pc, #304] ; (800d88c ) + 800d75a: e7f9 b.n 800d750 + method_ptr = jpeg_idct_2x1; + 800d75c: 4d4c ldr r5, [pc, #304] ; (800d890 ) + 800d75e: e7f7 b.n 800d750 + method_ptr = jpeg_idct_1x1; + 800d760: 4d4c ldr r5, [pc, #304] ; (800d894 ) + 800d762: e7f5 b.n 800d750 + method_ptr = jpeg_idct_1x2; + 800d764: 4d4c ldr r5, [pc, #304] ; (800d898 ) + 800d766: e7f3 b.n 800d750 + method_ptr = jpeg_idct_3x6; + 800d768: 4d4c ldr r5, [pc, #304] ; (800d89c ) + 800d76a: e7f1 b.n 800d750 + method_ptr = jpeg_idct_4x2; + 800d76c: 4d4c ldr r5, [pc, #304] ; (800d8a0 ) + 800d76e: e7ef b.n 800d750 + method_ptr = jpeg_idct_6x3; + 800d770: 4d4c ldr r5, [pc, #304] ; (800d8a4 ) + 800d772: e7ed b.n 800d750 + method_ptr = jpeg_idct_5x5; + 800d774: 4d4c ldr r5, [pc, #304] ; (800d8a8 ) + 800d776: e7eb b.n 800d750 + method_ptr = jpeg_idct_5x10; + 800d778: 4d4c ldr r5, [pc, #304] ; (800d8ac ) + 800d77a: e7e9 b.n 800d750 + method_ptr = jpeg_idct_6x12; + 800d77c: 4d4c ldr r5, [pc, #304] ; (800d8b0 ) + 800d77e: e7e7 b.n 800d750 + method_ptr = jpeg_idct_7x7; + 800d780: 4d4c ldr r5, [pc, #304] ; (800d8b4 ) + 800d782: e7e5 b.n 800d750 + method_ptr = jpeg_idct_12x6; + 800d784: 4d4c ldr r5, [pc, #304] ; (800d8b8 ) + 800d786: e7e3 b.n 800d750 + method_ptr = jpeg_idct_9x9; + 800d788: 4d4c ldr r5, [pc, #304] ; (800d8bc ) + 800d78a: e7e1 b.n 800d750 + method_ptr = jpeg_idct_8x16; + 800d78c: 4d4c ldr r5, [pc, #304] ; (800d8c0 ) + 800d78e: e7df b.n 800d750 + method_ptr = jpeg_idct_10x10; + 800d790: 4d4c ldr r5, [pc, #304] ; (800d8c4 ) + 800d792: e7dd b.n 800d750 + method_ptr = jpeg_idct_11x11; + 800d794: 4d4c ldr r5, [pc, #304] ; (800d8c8 ) + 800d796: e7db b.n 800d750 + method_ptr = jpeg_idct_14x14; + 800d798: 4d4c ldr r5, [pc, #304] ; (800d8cc ) + 800d79a: e7d9 b.n 800d750 + method_ptr = jpeg_idct_13x13; + 800d79c: 4d4c ldr r5, [pc, #304] ; (800d8d0 ) + 800d79e: e7d7 b.n 800d750 + method_ptr = jpeg_idct_14x7; + 800d7a0: 4d4c ldr r5, [pc, #304] ; (800d8d4 ) + 800d7a2: e7d5 b.n 800d750 + method_ptr = jpeg_idct_16x8; + 800d7a4: 4d4c ldr r5, [pc, #304] ; (800d8d8 ) + 800d7a6: e7d3 b.n 800d750 + method_ptr = jpeg_idct_16x16; + 800d7a8: 4d4c ldr r5, [pc, #304] ; (800d8dc ) + 800d7aa: e7d1 b.n 800d750 + IFAST_MULT_TYPE * ifmtbl = (IFAST_MULT_TYPE *) compptr->dct_table; + 800d7ac: f8da 0054 ldr.w r0, [sl, #84] ; 0x54 + for (i = 0; i < DCTSIZE2; i++) { + 800d7b0: 2200 movs r2, #0 + 800d7b2: 494b ldr r1, [pc, #300] ; (800d8e0 ) + DESCALE(MULTIPLY16V16((INT32) qtbl->quantval[i], + 800d7b4: f836 3012 ldrh.w r3, [r6, r2, lsl #1] + 800d7b8: f931 cb02 ldrsh.w ip, [r1], #2 + 800d7bc: fb0c f303 mul.w r3, ip, r3 + 800d7c0: f503 6300 add.w r3, r3, #2048 ; 0x800 + 800d7c4: 131b asrs r3, r3, #12 + ifmtbl[i] = (IFAST_MULT_TYPE) + 800d7c6: f840 3022 str.w r3, [r0, r2, lsl #2] + for (i = 0; i < DCTSIZE2; i++) { + 800d7ca: 3201 adds r2, #1 + 800d7cc: 2a40 cmp r2, #64 ; 0x40 + 800d7ce: d1f1 bne.n 800d7b4 + 800d7d0: e7b1 b.n 800d736 + FLOAT_MULT_TYPE * fmtbl = (FLOAT_MULT_TYPE *) compptr->dct_table; + 800d7d2: f8da 3054 ldr.w r3, [sl, #84] ; 0x54 + i = 0; + 800d7d6: f04f 0900 mov.w r9, #0 + FLOAT_MULT_TYPE * fmtbl = (FLOAT_MULT_TYPE *) compptr->dct_table; + 800d7da: 9304 str r3, [sp, #16] + 800d7dc: 4b41 ldr r3, [pc, #260] ; (800d8e4 ) + 800d7de: 9303 str r3, [sp, #12] + aanscalefactor[row] * aanscalefactor[col] * 0.125); + 800d7e0: 9b03 ldr r3, [sp, #12] + 800d7e2: ecb3 7b02 vldmia r3!, {d7} + 800d7e6: 9303 str r3, [sp, #12] + 800d7e8: eeb0 8a47 vmov.f32 s16, s14 + 800d7ec: eef0 8a67 vmov.f32 s17, s15 + 800d7f0: 9b04 ldr r3, [sp, #16] + 800d7f2: eb03 0389 add.w r3, r3, r9, lsl #2 + 800d7f6: 9301 str r3, [sp, #4] + 800d7f8: 4b3a ldr r3, [pc, #232] ; (800d8e4 ) + 800d7fa: 9302 str r3, [sp, #8] + 800d7fc: f106 0310 add.w r3, r6, #16 + 800d800: 9305 str r3, [sp, #20] + 800d802: 9b02 ldr r3, [sp, #8] + ((double) qtbl->quantval[i] * + 800d804: f836 0b02 ldrh.w r0, [r6], #2 + aanscalefactor[row] * aanscalefactor[col] * 0.125); + 800d808: ecb3 7b02 vldmia r3!, {d7} + 800d80c: eeb0 9a47 vmov.f32 s18, s14 + 800d810: eef0 9a67 vmov.f32 s19, s15 + 800d814: 9302 str r3, [sp, #8] + ((double) qtbl->quantval[i] * + 800d816: f7f2 fe8d bl 8000534 <__aeabi_ui2d> + 800d81a: ec53 2b18 vmov r2, r3, d8 + 800d81e: f7f2 ff03 bl 8000628 <__aeabi_dmul> + aanscalefactor[row] * aanscalefactor[col] * 0.125); + 800d822: ec53 2b19 vmov r2, r3, d9 + 800d826: f7f2 feff bl 8000628 <__aeabi_dmul> + 800d82a: f04f 537f mov.w r3, #1069547520 ; 0x3fc00000 + 800d82e: 2200 movs r2, #0 + 800d830: f7f2 fefa bl 8000628 <__aeabi_dmul> + fmtbl[i] = (FLOAT_MULT_TYPE) + 800d834: f7f3 f90a bl 8000a4c <__aeabi_d2f> + 800d838: 9b01 ldr r3, [sp, #4] + 800d83a: f843 0b04 str.w r0, [r3], #4 + 800d83e: 9301 str r3, [sp, #4] + for (col = 0; col < DCTSIZE; col++) { + 800d840: 9b05 ldr r3, [sp, #20] + 800d842: 429e cmp r6, r3 + 800d844: d1dd bne.n 800d802 + i++; + 800d846: f109 0908 add.w r9, r9, #8 + for (row = 0; row < DCTSIZE; row++) { + 800d84a: f1b9 0f40 cmp.w r9, #64 ; 0x40 + 800d84e: d1c7 bne.n 800d7e0 + 800d850: e771 b.n 800d736 + ERREXIT(cinfo, JERR_NOT_COMPILED); + 800d852: 683b ldr r3, [r7, #0] + 800d854: 2231 movs r2, #49 ; 0x31 + 800d856: 4638 mov r0, r7 + 800d858: 615a str r2, [r3, #20] + 800d85a: 681b ldr r3, [r3, #0] + 800d85c: 4798 blx r3 + break; + 800d85e: e76a b.n 800d736 + 800d860: 080129bd .word 0x080129bd + 800d864: 080128c9 .word 0x080128c9 + 800d868: 080167f1 .word 0x080167f1 + 800d86c: 0801246d .word 0x0801246d + 800d870: 0801576d .word 0x0801576d + 800d874: 0801551d .word 0x0801551d + 800d878: 08013421 .word 0x08013421 + 800d87c: 080140cd .word 0x080140cd + 800d880: 08037ebc .word 0x08037ebc + 800d884: 08015f91 .word 0x08015f91 + 800d888: 0801279d .word 0x0801279d + 800d88c: 08016b59 .word 0x08016b59 + 800d890: 08015b81 .word 0x08015b81 + 800d894: 08012a39 .word 0x08012a39 + 800d898: 08016c31 .word 0x08016c31 + 800d89c: 08016a09 .word 0x08016a09 + 800d8a0: 08015ab5 .word 0x08015ab5 + 800d8a4: 08015959 .word 0x08015959 + 800d8a8: 0801261d .word 0x0801261d + 800d8ac: 080165b9 .word 0x080165b9 + 800d8b0: 08016301 .word 0x08016301 + 800d8b4: 080121d9 .word 0x080121d9 + 800d8b8: 08015265 .word 0x08015265 + 800d8bc: 08012a5d .word 0x08012a5d + 800d8c0: 08015bb9 .word 0x08015bb9 + 800d8c4: 08012d21 .word 0x08012d21 + 800d8c8: 08013025 .word 0x08013025 + 800d8cc: 08013c85 .word 0x08013c85 + 800d8d0: 080137ed .word 0x080137ed + 800d8d4: 08014ed9 .word 0x08014ed9 + 800d8d8: 08014aa1 .word 0x08014aa1 + 800d8dc: 08014561 .word 0x08014561 + 800d8e0: 08037f08 .word 0x08037f08 + 800d8e4: 08037ec8 .word 0x08037ec8 + +0800d8e8 : + * Initialize IDCT manager. + */ + +GLOBAL(void) +jinit_inverse_dct (j_decompress_ptr cinfo) +{ + 800d8e8: b5f8 push {r3, r4, r5, r6, r7, lr} + my_idct_ptr idct; + int ci; + jpeg_component_info *compptr; + + idct = (my_idct_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 800d8ea: 6843 ldr r3, [r0, #4] +{ + 800d8ec: 4605 mov r5, r0 + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 800d8ee: 2254 movs r2, #84 ; 0x54 + 800d8f0: 2101 movs r1, #1 + 800d8f2: 681b ldr r3, [r3, #0] + SIZEOF(my_idct_controller)); + cinfo->idct = (struct jpeg_inverse_dct *) idct; + idct->pub.start_pass = start_pass; + + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + 800d8f4: 2600 movs r6, #0 + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 800d8f6: 4798 blx r3 + idct->pub.start_pass = start_pass; + 800d8f8: 4b0f ldr r3, [pc, #60] ; (800d938 ) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 800d8fa: 4604 mov r4, r0 + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + 800d8fc: f8d5 70d8 ldr.w r7, [r5, #216] ; 0xd8 + cinfo->idct = (struct jpeg_inverse_dct *) idct; + 800d900: f8c5 01d4 str.w r0, [r5, #468] ; 0x1d4 + idct->pub.start_pass = start_pass; + 800d904: f844 3b28 str.w r3, [r4], #40 + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + 800d908: 6a6b ldr r3, [r5, #36] ; 0x24 + 800d90a: 42b3 cmp r3, r6 + 800d90c: dc00 bgt.n 800d910 + SIZEOF(multiplier_table)); + MEMZERO(compptr->dct_table, SIZEOF(multiplier_table)); + /* Mark multiplier table not yet set up for any method */ + idct->cur_method[ci] = -1; + } +} + 800d90e: bdf8 pop {r3, r4, r5, r6, r7, pc} + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 800d910: 686b ldr r3, [r5, #4] + 800d912: f44f 7280 mov.w r2, #256 ; 0x100 + 800d916: 2101 movs r1, #1 + 800d918: 4628 mov r0, r5 + 800d91a: 681b ldr r3, [r3, #0] + ci++, compptr++) { + 800d91c: 3601 adds r6, #1 + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 800d91e: 4798 blx r3 + MEMZERO(compptr->dct_table, SIZEOF(multiplier_table)); + 800d920: f44f 7280 mov.w r2, #256 ; 0x100 + compptr->dct_table = + 800d924: 6578 str r0, [r7, #84] ; 0x54 + MEMZERO(compptr->dct_table, SIZEOF(multiplier_table)); + 800d926: 2100 movs r1, #0 + 800d928: f027 f848 bl 80349bc + idct->cur_method[ci] = -1; + 800d92c: f04f 33ff mov.w r3, #4294967295 + ci++, compptr++) { + 800d930: 3758 adds r7, #88 ; 0x58 + idct->cur_method[ci] = -1; + 800d932: f844 3f04 str.w r3, [r4, #4]! + ci++, compptr++) { + 800d936: e7e7 b.n 800d908 + 800d938: 0800d561 .word 0x0800d561 + +0800d93c : +LOCAL(boolean) +jpeg_fill_bit_buffer (bitread_working_state * state, + register bit_buf_type get_buffer, register int bits_left, + int nbits) +/* Load up the bit buffer to a depth of at least nbits */ +{ + 800d93c: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} + /* Copy heavily used state fields into locals (hopefully registers) */ + register const JOCTET * next_input_byte = state->next_input_byte; + register size_t bytes_in_buffer = state->bytes_in_buffer; + j_decompress_ptr cinfo = state->cinfo; + 800d940: 6905 ldr r5, [r0, #16] +{ + 800d942: 4607 mov r7, r0 + 800d944: 4688 mov r8, r1 + 800d946: 4616 mov r6, r2 + + /* Attempt to load at least MIN_GET_BITS bits into get_buffer. */ + /* (It is assumed that no request will be for more than that many bits.) */ + /* We fail to do so only if we hit a marker or are forced to suspend. */ + + if (cinfo->unread_marker == 0) { /* cannot advance past a marker */ + 800d948: f8d5 b1b4 ldr.w fp, [r5, #436] ; 0x1b4 +{ + 800d94c: 4699 mov r9, r3 + register size_t bytes_in_buffer = state->bytes_in_buffer; + 800d94e: e9d0 4a00 ldrd r4, sl, [r0] + if (cinfo->unread_marker == 0) { /* cannot advance past a marker */ + 800d952: f1bb 0f00 cmp.w fp, #0 + 800d956: d042 beq.n 800d9de + no_more_bytes: + /* We get here if we've read the marker that terminates the compressed + * data segment. There should be enough bits in the buffer register + * to satisfy the request; if so, no problem. + */ + if (nbits > bits_left) { + 800d958: 454e cmp r6, r9 + 800d95a: da42 bge.n 800d9e2 + /* Uh-oh. Report corrupted data to user and stuff zeroes into + * the data stream, so that we can produce some kind of image. + * We use a nonvolatile flag to ensure that only one warning message + * appears per data segment. + */ + if (! ((huff_entropy_ptr) cinfo->entropy)->insufficient_data) { + 800d95c: f8d5 31d0 ldr.w r3, [r5, #464] ; 0x1d0 + 800d960: 6a5b ldr r3, [r3, #36] ; 0x24 + 800d962: b95b cbnz r3, 800d97c + WARNMS(cinfo, JWRN_HIT_MARKER); + 800d964: 682b ldr r3, [r5, #0] + 800d966: 2278 movs r2, #120 ; 0x78 + 800d968: f04f 31ff mov.w r1, #4294967295 + 800d96c: 4628 mov r0, r5 + 800d96e: 615a str r2, [r3, #20] + 800d970: 685b ldr r3, [r3, #4] + 800d972: 4798 blx r3 + ((huff_entropy_ptr) cinfo->entropy)->insufficient_data = TRUE; + 800d974: f8d5 31d0 ldr.w r3, [r5, #464] ; 0x1d0 + 800d978: 2201 movs r2, #1 + 800d97a: 625a str r2, [r3, #36] ; 0x24 + } + /* Fill the buffer with zero bits */ + get_buffer <<= MIN_GET_BITS - bits_left; + 800d97c: f1c6 0619 rsb r6, r6, #25 + 800d980: fa08 f806 lsl.w r8, r8, r6 + bits_left = MIN_GET_BITS; + 800d984: 2619 movs r6, #25 + 800d986: e02c b.n 800d9e2 + if (bytes_in_buffer == 0) { + 800d988: f1ba 0f00 cmp.w sl, #0 + 800d98c: d107 bne.n 800d99e + if (! (*cinfo->src->fill_input_buffer) (cinfo)) + 800d98e: 69ab ldr r3, [r5, #24] + 800d990: 4628 mov r0, r5 + 800d992: 68db ldr r3, [r3, #12] + 800d994: 4798 blx r3 + 800d996: b350 cbz r0, 800d9ee + next_input_byte = cinfo->src->next_input_byte; + 800d998: 69ab ldr r3, [r5, #24] + bytes_in_buffer = cinfo->src->bytes_in_buffer; + 800d99a: e9d3 4a00 ldrd r4, sl, [r3] + c = GETJOCTET(*next_input_byte++); + 800d99e: f814 2b01 ldrb.w r2, [r4], #1 + bytes_in_buffer--; + 800d9a2: f10a 3aff add.w sl, sl, #4294967295 + if (c == 0xFF) { + 800d9a6: 2aff cmp r2, #255 ; 0xff + 800d9a8: d116 bne.n 800d9d8 + if (bytes_in_buffer == 0) { + 800d9aa: f1ba 0f00 cmp.w sl, #0 + 800d9ae: d109 bne.n 800d9c4 + if (! (*cinfo->src->fill_input_buffer) (cinfo)) + 800d9b0: 69ab ldr r3, [r5, #24] + 800d9b2: 4628 mov r0, r5 + 800d9b4: 9201 str r2, [sp, #4] + 800d9b6: 68db ldr r3, [r3, #12] + 800d9b8: 4798 blx r3 + 800d9ba: b1c0 cbz r0, 800d9ee + next_input_byte = cinfo->src->next_input_byte; + 800d9bc: 69ab ldr r3, [r5, #24] + 800d9be: 9a01 ldr r2, [sp, #4] + bytes_in_buffer = cinfo->src->bytes_in_buffer; + 800d9c0: e9d3 4a00 ldrd r4, sl, [r3] + c = GETJOCTET(*next_input_byte++); + 800d9c4: f814 3b01 ldrb.w r3, [r4], #1 + bytes_in_buffer--; + 800d9c8: f10a 3aff add.w sl, sl, #4294967295 + } while (c == 0xFF); + 800d9cc: 2bff cmp r3, #255 ; 0xff + 800d9ce: d0ec beq.n 800d9aa + if (c == 0) { + 800d9d0: b113 cbz r3, 800d9d8 + cinfo->unread_marker = c; + 800d9d2: f8c5 31b4 str.w r3, [r5, #436] ; 0x1b4 + goto no_more_bytes; + 800d9d6: e7bf b.n 800d958 + get_buffer = (get_buffer << 8) | c; + 800d9d8: ea42 2808 orr.w r8, r2, r8, lsl #8 + bits_left += 8; + 800d9dc: 3608 adds r6, #8 + while (bits_left < MIN_GET_BITS) { + 800d9de: 2e18 cmp r6, #24 + 800d9e0: ddd2 ble.n 800d988 + state->next_input_byte = next_input_byte; + state->bytes_in_buffer = bytes_in_buffer; + state->get_buffer = get_buffer; + state->bits_left = bits_left; + + return TRUE; + 800d9e2: f04f 0b01 mov.w fp, #1 + state->bytes_in_buffer = bytes_in_buffer; + 800d9e6: e9c7 4a00 strd r4, sl, [r7] + state->bits_left = bits_left; + 800d9ea: e9c7 8602 strd r8, r6, [r7, #8] +} + 800d9ee: 4658 mov r0, fp + 800d9f0: b003 add sp, #12 + 800d9f2: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + ... + +0800d9f8 : + +LOCAL(int) +jpeg_huff_decode (bitread_working_state * state, + register bit_buf_type get_buffer, register int bits_left, + d_derived_tbl * htbl, int min_bits) +{ + 800d9f8: b5f8 push {r3, r4, r5, r6, r7, lr} + 800d9fa: 9d06 ldr r5, [sp, #24] + 800d9fc: 4606 mov r6, r0 + 800d9fe: 468c mov ip, r1 + 800da00: 4614 mov r4, r2 + register INT32 code; + + /* HUFF_DECODE has determined that the code is at least min_bits */ + /* bits long, so fetch that many bits in one swoop. */ + + CHECK_BIT_BUFFER(*state, l, return -1); + 800da02: 4295 cmp r5, r2 +{ + 800da04: 461f mov r7, r3 + CHECK_BIT_BUFFER(*state, l, return -1); + 800da06: dd08 ble.n 800da1a + 800da08: 462b mov r3, r5 + 800da0a: f7ff ff97 bl 800d93c + 800da0e: b910 cbnz r0, 800da16 + 800da10: f04f 30ff mov.w r0, #4294967295 + WARNMS(state->cinfo, JWRN_HUFF_BAD_CODE); + return 0; /* fake a zero as the safest result */ + } + + return htbl->pub->huffval[ (int) (code + htbl->valoffset[l]) ]; +} + 800da14: bdf8 pop {r3, r4, r5, r6, r7, pc} + CHECK_BIT_BUFFER(*state, l, return -1); + 800da16: e9d6 c402 ldrd ip, r4, [r6, #8] + code = GET_BITS(l); + 800da1a: 1b62 subs r2, r4, r5 + 800da1c: 4b1b ldr r3, [pc, #108] ; (800da8c ) + 800da1e: fa4c f002 asr.w r0, ip, r2 + 800da22: f853 3025 ldr.w r3, [r3, r5, lsl #2] + 800da26: 4018 ands r0, r3 + while (code > htbl->maxcode[l]) { + 800da28: f857 3025 ldr.w r3, [r7, r5, lsl #2] + 800da2c: 4283 cmp r3, r0 + 800da2e: db0d blt.n 800da4c + if (l > 16) { + 800da30: 2d10 cmp r5, #16 + state->bits_left = bits_left; + 800da32: e9c6 c202 strd ip, r2, [r6, #8] + if (l > 16) { + 800da36: dd1f ble.n 800da78 + WARNMS(state->cinfo, JWRN_HUFF_BAD_CODE); + 800da38: 6930 ldr r0, [r6, #16] + 800da3a: 2279 movs r2, #121 ; 0x79 + 800da3c: f04f 31ff mov.w r1, #4294967295 + 800da40: 6803 ldr r3, [r0, #0] + 800da42: 615a str r2, [r3, #20] + 800da44: 685b ldr r3, [r3, #4] + 800da46: 4798 blx r3 + return 0; /* fake a zero as the safest result */ + 800da48: 2000 movs r0, #0 + 800da4a: e7e3 b.n 800da14 + CHECK_BIT_BUFFER(*state, 1, return -1); + 800da4c: 2a00 cmp r2, #0 + code <<= 1; + 800da4e: ea4f 0440 mov.w r4, r0, lsl #1 + CHECK_BIT_BUFFER(*state, 1, return -1); + 800da52: dc08 bgt.n 800da66 + 800da54: 2301 movs r3, #1 + 800da56: 4661 mov r1, ip + 800da58: 4630 mov r0, r6 + 800da5a: f7ff ff6f bl 800d93c + 800da5e: 2800 cmp r0, #0 + 800da60: d0d6 beq.n 800da10 + 800da62: e9d6 c202 ldrd ip, r2, [r6, #8] + code |= GET_BITS(1); + 800da66: 3a01 subs r2, #1 + l++; + 800da68: 3501 adds r5, #1 + code |= GET_BITS(1); + 800da6a: fa4c f302 asr.w r3, ip, r2 + 800da6e: f003 0301 and.w r3, r3, #1 + 800da72: ea43 0004 orr.w r0, r3, r4 + l++; + 800da76: e7d7 b.n 800da28 + return htbl->pub->huffval[ (int) (code + htbl->valoffset[l]) ]; + 800da78: f8d7 308c ldr.w r3, [r7, #140] ; 0x8c + 800da7c: 3512 adds r5, #18 + 800da7e: 4403 add r3, r0 + 800da80: f857 2025 ldr.w r2, [r7, r5, lsl #2] + 800da84: 4413 add r3, r2 + 800da86: 7c58 ldrb r0, [r3, #17] + 800da88: e7c4 b.n 800da14 + 800da8a: bf00 nop + 800da8c: 08037f88 .word 0x08037f88 + +0800da90 : + * Returns FALSE if must suspend. + */ + +LOCAL(boolean) +process_restart (j_decompress_ptr cinfo) +{ + 800da90: b570 push {r4, r5, r6, lr} + huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy; + int ci; + + /* Throw away any unused bits remaining in bit buffer; */ + /* include any full bytes in next_marker's count of discarded bytes */ + cinfo->marker->discarded_bytes += entropy->bitstate.bits_left / 8; + 800da92: e9d0 2573 ldrd r2, r5, [r0, #460] ; 0x1cc + entropy->bitstate.bits_left = 0; + 800da96: 2600 movs r6, #0 +{ + 800da98: 4604 mov r4, r0 + cinfo->marker->discarded_bytes += entropy->bitstate.bits_left / 8; + 800da9a: 68eb ldr r3, [r5, #12] + 800da9c: 6991 ldr r1, [r2, #24] + 800da9e: 2b00 cmp r3, #0 + 800daa0: bfb8 it lt + 800daa2: 3307 addlt r3, #7 + 800daa4: eb01 01e3 add.w r1, r1, r3, asr #3 + + /* Advance past the RSTn marker */ + if (! (*cinfo->marker->read_restart_marker) (cinfo)) + 800daa8: 6893 ldr r3, [r2, #8] + cinfo->marker->discarded_bytes += entropy->bitstate.bits_left / 8; + 800daaa: 6191 str r1, [r2, #24] + entropy->bitstate.bits_left = 0; + 800daac: 60ee str r6, [r5, #12] + if (! (*cinfo->marker->read_restart_marker) (cinfo)) + 800daae: 4798 blx r3 + 800dab0: b190 cbz r0, 800dad8 + return FALSE; + + /* Re-initialize DC predictions to 0 */ + for (ci = 0; ci < cinfo->comps_in_scan; ci++) + entropy->saved.last_dc_val[ci] = 0; + 800dab2: f8d4 2150 ldr.w r2, [r4, #336] ; 0x150 + 800dab6: 4631 mov r1, r6 + 800dab8: f105 0014 add.w r0, r5, #20 + 800dabc: ea22 72e2 bic.w r2, r2, r2, asr #31 + 800dac0: 0092 lsls r2, r2, #2 + 800dac2: f026 ff7b bl 80349bc + /* Re-init EOB run count, too */ + entropy->saved.EOBRUN = 0; + + /* Reset restart counter */ + entropy->restarts_to_go = cinfo->restart_interval; + 800dac6: f8d4 3118 ldr.w r3, [r4, #280] ; 0x118 + entropy->saved.EOBRUN = 0; + 800daca: 612e str r6, [r5, #16] + entropy->restarts_to_go = cinfo->restart_interval; + 800dacc: 62ab str r3, [r5, #40] ; 0x28 + /* Reset out-of-data flag, unless read_restart_marker left us smack up + * against a marker. In that case we will end up treating the next data + * segment as empty, and we can avoid producing bogus output pixels by + * leaving the flag set. + */ + if (cinfo->unread_marker == 0) + 800dace: f8d4 31b4 ldr.w r3, [r4, #436] ; 0x1b4 + 800dad2: b903 cbnz r3, 800dad6 + entropy->insufficient_data = FALSE; + 800dad4: 626b str r3, [r5, #36] ; 0x24 + + return TRUE; + 800dad6: 2001 movs r0, #1 +} + 800dad8: bd70 pop {r4, r5, r6, pc} + ... + +0800dadc : + * or first pass of successive approximation). + */ + +METHODDEF(boolean) +decode_mcu_DC_first (j_decompress_ptr cinfo, JBLOCKROW *MCU_data) +{ + 800dadc: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy; + int Al = cinfo->Al; + 800dae0: f8d0 31a4 ldr.w r3, [r0, #420] ; 0x1a4 +{ + 800dae4: b091 sub sp, #68 ; 0x44 + 800dae6: 4605 mov r5, r0 + huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy; + 800dae8: f8d0 41d0 ldr.w r4, [r0, #464] ; 0x1d0 + int Al = cinfo->Al; + 800daec: 9303 str r3, [sp, #12] + savable_state state; + d_derived_tbl * tbl; + jpeg_component_info * compptr; + + /* Process restart marker if needed; may have to suspend */ + if (cinfo->restart_interval) { + 800daee: f8d0 3118 ldr.w r3, [r0, #280] ; 0x118 +{ + 800daf2: 9105 str r1, [sp, #20] + if (cinfo->restart_interval) { + 800daf4: b933 cbnz r3, 800db04 + } + + /* If we've run out of data, just leave the MCU set to zeroes. + * This way, we return uniform gray for the remainder of the segment. + */ + if (! entropy->insufficient_data) { + 800daf6: 6a66 ldr r6, [r4, #36] ; 0x24 + 800daf8: b17e cbz r6, 800db1a + BITREAD_SAVE_STATE(cinfo,entropy->bitstate); + ASSIGN_STATE(entropy->saved, state); + } + + /* Account for restart interval (no-op if not using restarts) */ + entropy->restarts_to_go--; + 800dafa: 6aa3 ldr r3, [r4, #40] ; 0x28 + + return TRUE; + 800dafc: 2001 movs r0, #1 + entropy->restarts_to_go--; + 800dafe: 3b01 subs r3, #1 + 800db00: 62a3 str r3, [r4, #40] ; 0x28 + return TRUE; + 800db02: e007 b.n 800db14 + if (entropy->restarts_to_go == 0) + 800db04: 6aa3 ldr r3, [r4, #40] ; 0x28 + 800db06: 2b00 cmp r3, #0 + 800db08: d1f5 bne.n 800daf6 + if (! process_restart(cinfo)) + 800db0a: f7ff ffc1 bl 800da90 + 800db0e: 2800 cmp r0, #0 + 800db10: d1f1 bne.n 800daf6 + return FALSE; + 800db12: 2000 movs r0, #0 +} + 800db14: b011 add sp, #68 ; 0x44 + 800db16: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + BITREAD_LOAD_STATE(cinfo,entropy->bitstate); + 800db1a: 69ab ldr r3, [r5, #24] + ASSIGN_STATE(state, entropy->saved); + 800db1c: f104 0810 add.w r8, r4, #16 + 800db20: af0b add r7, sp, #44 ; 0x2c + 800db22: f505 79b6 add.w r9, r5, #364 ; 0x16c + BITREAD_LOAD_STATE(cinfo,entropy->bitstate); + 800db26: 681a ldr r2, [r3, #0] + 800db28: f104 0b10 add.w fp, r4, #16 + 800db2c: 685b ldr r3, [r3, #4] + 800db2e: 9206 str r2, [sp, #24] + 800db30: 9307 str r3, [sp, #28] + r = GET_BITS(s); + 800db32: f8df a118 ldr.w sl, [pc, #280] ; 800dc4c + BITREAD_LOAD_STATE(cinfo,entropy->bitstate); + 800db36: 950a str r5, [sp, #40] ; 0x28 + ASSIGN_STATE(state, entropy->saved); + 800db38: e8b8 000f ldmia.w r8!, {r0, r1, r2, r3} + BITREAD_LOAD_STATE(cinfo,entropy->bitstate); + 800db3c: e9d4 ec02 ldrd lr, ip, [r4, #8] + ASSIGN_STATE(state, entropy->saved); + 800db40: c70f stmia r7!, {r0, r1, r2, r3} + 800db42: f8d8 3000 ldr.w r3, [r8] + 800db46: 603b str r3, [r7, #0] + for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { + 800db48: f8d5 316c ldr.w r3, [r5, #364] ; 0x16c + 800db4c: 42b3 cmp r3, r6 + 800db4e: dc0d bgt.n 800db6c + BITREAD_SAVE_STATE(cinfo,entropy->bitstate); + 800db50: 69ab ldr r3, [r5, #24] + ASSIGN_STATE(entropy->saved, state); + 800db52: ae0b add r6, sp, #44 ; 0x2c + BITREAD_SAVE_STATE(cinfo,entropy->bitstate); + 800db54: 9a06 ldr r2, [sp, #24] + ASSIGN_STATE(entropy->saved, state); + 800db56: 465d mov r5, fp + BITREAD_SAVE_STATE(cinfo,entropy->bitstate); + 800db58: 601a str r2, [r3, #0] + 800db5a: 9a07 ldr r2, [sp, #28] + 800db5c: 605a str r2, [r3, #4] + ASSIGN_STATE(entropy->saved, state); + 800db5e: ce0f ldmia r6!, {r0, r1, r2, r3} + BITREAD_SAVE_STATE(cinfo,entropy->bitstate); + 800db60: e9c4 ec02 strd lr, ip, [r4, #8] + ASSIGN_STATE(entropy->saved, state); + 800db64: c50f stmia r5!, {r0, r1, r2, r3} + 800db66: 6833 ldr r3, [r6, #0] + 800db68: 602b str r3, [r5, #0] + 800db6a: e7c6 b.n 800dafa + block = MCU_data[blkn]; + 800db6c: 9b05 ldr r3, [sp, #20] + HUFF_DECODE(s, br_state, tbl, return FALSE, label1); + 800db6e: f1bc 0f07 cmp.w ip, #7 + ci = cinfo->MCU_membership[blkn]; + 800db72: f859 7f04 ldr.w r7, [r9, #4]! + block = MCU_data[blkn]; + 800db76: f853 3026 ldr.w r3, [r3, r6, lsl #2] + 800db7a: 9304 str r3, [sp, #16] + compptr = cinfo->cur_comp_info[ci]; + 800db7c: eb05 0387 add.w r3, r5, r7, lsl #2 + tbl = entropy->derived_tbls[compptr->dc_tbl_no]; + 800db80: f8d3 3154 ldr.w r3, [r3, #340] ; 0x154 + 800db84: 695b ldr r3, [r3, #20] + 800db86: eb04 0383 add.w r3, r4, r3, lsl #2 + 800db8a: f8d3 802c ldr.w r8, [r3, #44] ; 0x2c + HUFF_DECODE(s, br_state, tbl, return FALSE, label1); + 800db8e: dc0c bgt.n 800dbaa + 800db90: 2300 movs r3, #0 + 800db92: 4662 mov r2, ip + 800db94: 4671 mov r1, lr + 800db96: a806 add r0, sp, #24 + 800db98: f7ff fed0 bl 800d93c + 800db9c: 2800 cmp r0, #0 + 800db9e: d0b8 beq.n 800db12 + 800dba0: e9dd ec08 ldrd lr, ip, [sp, #32] + 800dba4: f1bc 0f07 cmp.w ip, #7 + 800dba8: dd3e ble.n 800dc28 + 800dbaa: f1ac 0308 sub.w r3, ip, #8 + 800dbae: fa4e f303 asr.w r3, lr, r3 + 800dbb2: b2db uxtb r3, r3 + 800dbb4: f103 0224 add.w r2, r3, #36 ; 0x24 + 800dbb8: f858 2022 ldr.w r2, [r8, r2, lsl #2] + 800dbbc: 2a00 cmp r2, #0 + 800dbbe: d042 beq.n 800dc46 + 800dbc0: 4443 add r3, r8 + 800dbc2: ebac 0c02 sub.w ip, ip, r2 + 800dbc6: f893 8490 ldrb.w r8, [r3, #1168] ; 0x490 + if (s) { + 800dbca: f1b8 0f00 cmp.w r8, #0 + 800dbce: d01b beq.n 800dc08 + CHECK_BIT_BUFFER(br_state, s, return FALSE); + 800dbd0: 45e0 cmp r8, ip + 800dbd2: dd09 ble.n 800dbe8 + 800dbd4: 4643 mov r3, r8 + 800dbd6: 4662 mov r2, ip + 800dbd8: 4671 mov r1, lr + 800dbda: a806 add r0, sp, #24 + 800dbdc: f7ff feae bl 800d93c + 800dbe0: 2800 cmp r0, #0 + 800dbe2: d096 beq.n 800db12 + 800dbe4: e9dd ec08 ldrd lr, ip, [sp, #32] + r = GET_BITS(s); + 800dbe8: ebac 0c08 sub.w ip, ip, r8 + 800dbec: f85a 2028 ldr.w r2, [sl, r8, lsl #2] + s = HUFF_EXTEND(r, s); + 800dbf0: f108 38ff add.w r8, r8, #4294967295 + r = GET_BITS(s); + 800dbf4: fa4e f30c asr.w r3, lr, ip + s = HUFF_EXTEND(r, s); + 800dbf8: f85a 1028 ldr.w r1, [sl, r8, lsl #2] + r = GET_BITS(s); + 800dbfc: 4013 ands r3, r2 + s = HUFF_EXTEND(r, s); + 800dbfe: 4299 cmp r1, r3 + 800dc00: bfac ite ge + 800dc02: eba3 0802 subge.w r8, r3, r2 + 800dc06: 4698 movlt r8, r3 + s += state.last_dc_val[ci]; + 800dc08: ab10 add r3, sp, #64 ; 0x40 + (*block)[0] = (JCOEF) (s << Al); + 800dc0a: 9a03 ldr r2, [sp, #12] + for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { + 800dc0c: 3601 adds r6, #1 + s += state.last_dc_val[ci]; + 800dc0e: eb03 0787 add.w r7, r3, r7, lsl #2 + 800dc12: f857 3c10 ldr.w r3, [r7, #-16] + 800dc16: 4443 add r3, r8 + (*block)[0] = (JCOEF) (s << Al); + 800dc18: fa03 f802 lsl.w r8, r3, r2 + state.last_dc_val[ci] = s; + 800dc1c: f847 3c10 str.w r3, [r7, #-16] + (*block)[0] = (JCOEF) (s << Al); + 800dc20: 9b04 ldr r3, [sp, #16] + 800dc22: f8a3 8000 strh.w r8, [r3] + for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { + 800dc26: e78f b.n 800db48 + HUFF_DECODE(s, br_state, tbl, return FALSE, label1); + 800dc28: 2301 movs r3, #1 + 800dc2a: 9300 str r3, [sp, #0] + 800dc2c: 4662 mov r2, ip + 800dc2e: 4643 mov r3, r8 + 800dc30: 4671 mov r1, lr + 800dc32: a806 add r0, sp, #24 + 800dc34: f7ff fee0 bl 800d9f8 + 800dc38: f1b0 0800 subs.w r8, r0, #0 + 800dc3c: f6ff af69 blt.w 800db12 + 800dc40: e9dd ec08 ldrd lr, ip, [sp, #32] + 800dc44: e7c1 b.n 800dbca + 800dc46: 2309 movs r3, #9 + 800dc48: e7ef b.n 800dc2a + 800dc4a: bf00 nop + 800dc4c: 08037f88 .word 0x08037f88 + +0800dc50 : + JBLOCKROW block; + BITREAD_STATE_VARS; + d_derived_tbl * tbl; + + /* Process restart marker if needed; may have to suspend */ + if (cinfo->restart_interval) { + 800dc50: f8d0 3118 ldr.w r3, [r0, #280] ; 0x118 +{ + 800dc54: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 800dc58: 4607 mov r7, r0 + 800dc5a: b08d sub sp, #52 ; 0x34 + 800dc5c: 460c mov r4, r1 + huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy; + 800dc5e: f8d0 51d0 ldr.w r5, [r0, #464] ; 0x1d0 + if (cinfo->restart_interval) { + 800dc62: b933 cbnz r3, 800dc72 + } + + /* If we've run out of data, just leave the MCU set to zeroes. + * This way, we return uniform gray for the remainder of the segment. + */ + if (! entropy->insufficient_data) { + 800dc64: 6a6b ldr r3, [r5, #36] ; 0x24 + 800dc66: b17b cbz r3, 800dc88 + /* Completed MCU, so update state */ + entropy->saved.EOBRUN = EOBRUN; /* only part of saved state we need */ + } + + /* Account for restart interval (no-op if not using restarts) */ + entropy->restarts_to_go--; + 800dc68: 6aab ldr r3, [r5, #40] ; 0x28 + + return TRUE; + 800dc6a: 2001 movs r0, #1 + entropy->restarts_to_go--; + 800dc6c: 3b01 subs r3, #1 + 800dc6e: 62ab str r3, [r5, #40] ; 0x28 + return TRUE; + 800dc70: e007 b.n 800dc82 + if (entropy->restarts_to_go == 0) + 800dc72: 6aab ldr r3, [r5, #40] ; 0x28 + 800dc74: 2b00 cmp r3, #0 + 800dc76: d1f5 bne.n 800dc64 + if (! process_restart(cinfo)) + 800dc78: f7ff ff0a bl 800da90 + 800dc7c: 2800 cmp r0, #0 + 800dc7e: d1f1 bne.n 800dc64 + return FALSE; + 800dc80: 2000 movs r0, #0 +} + 800dc82: b00d add sp, #52 ; 0x34 + 800dc84: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + Se = cinfo->Se; + 800dc88: f8d7 319c ldr.w r3, [r7, #412] ; 0x19c + EOBRUN = entropy->saved.EOBRUN; /* only part of saved state we need */ + 800dc8c: 692e ldr r6, [r5, #16] + Se = cinfo->Se; + 800dc8e: 9303 str r3, [sp, #12] + Al = cinfo->Al; + 800dc90: f8d7 31a4 ldr.w r3, [r7, #420] ; 0x1a4 + natural_order = cinfo->natural_order; + 800dc94: f8d7 b1ac ldr.w fp, [r7, #428] ; 0x1ac + Al = cinfo->Al; + 800dc98: 9304 str r3, [sp, #16] + if (EOBRUN > 0) /* if it's a band of zeroes... */ + 800dc9a: b116 cbz r6, 800dca2 + EOBRUN--; /* ...process it now (we do nothing) */ + 800dc9c: 3e01 subs r6, #1 + entropy->saved.EOBRUN = EOBRUN; /* only part of saved state we need */ + 800dc9e: 612e str r6, [r5, #16] + 800dca0: e7e2 b.n 800dc68 + BITREAD_LOAD_STATE(cinfo,entropy->bitstate); + 800dca2: 69bb ldr r3, [r7, #24] + tbl = entropy->ac_derived_tbl; + 800dca4: f8d5 903c ldr.w r9, [r5, #60] ; 0x3c + BITREAD_LOAD_STATE(cinfo,entropy->bitstate); + 800dca8: 681a ldr r2, [r3, #0] + 800dcaa: 685b ldr r3, [r3, #4] + 800dcac: 9207 str r2, [sp, #28] + 800dcae: 9308 str r3, [sp, #32] + for (k = cinfo->Ss; k <= Se; k++) { + 800dcb0: f8d7 8198 ldr.w r8, [r7, #408] ; 0x198 + block = MCU_data[0]; + 800dcb4: 6823 ldr r3, [r4, #0] + r = GET_BITS(s); + 800dcb6: f8df a0f4 ldr.w sl, [pc, #244] ; 800ddac + BITREAD_LOAD_STATE(cinfo,entropy->bitstate); + 800dcba: 970b str r7, [sp, #44] ; 0x2c + block = MCU_data[0]; + 800dcbc: 9305 str r3, [sp, #20] + BITREAD_LOAD_STATE(cinfo,entropy->bitstate); + 800dcbe: e9d5 1202 ldrd r1, r2, [r5, #8] + for (k = cinfo->Ss; k <= Se; k++) { + 800dcc2: 9b03 ldr r3, [sp, #12] + 800dcc4: 4598 cmp r8, r3 + 800dcc6: dc69 bgt.n 800dd9c + HUFF_DECODE(s, br_state, tbl, return FALSE, label2); + 800dcc8: 2a07 cmp r2, #7 + 800dcca: dc09 bgt.n 800dce0 + 800dccc: 2300 movs r3, #0 + 800dcce: a807 add r0, sp, #28 + 800dcd0: f7ff fe34 bl 800d93c + 800dcd4: 2800 cmp r0, #0 + 800dcd6: d0d3 beq.n 800dc80 + 800dcd8: e9dd 1209 ldrd r1, r2, [sp, #36] ; 0x24 + 800dcdc: 2a07 cmp r2, #7 + 800dcde: dd33 ble.n 800dd48 + 800dce0: f1a2 0308 sub.w r3, r2, #8 + 800dce4: fa41 f303 asr.w r3, r1, r3 + 800dce8: b2db uxtb r3, r3 + 800dcea: f103 0024 add.w r0, r3, #36 ; 0x24 + 800dcee: f859 0020 ldr.w r0, [r9, r0, lsl #2] + 800dcf2: b3a0 cbz r0, 800dd5e + 800dcf4: 444b add r3, r9 + 800dcf6: 1a12 subs r2, r2, r0 + 800dcf8: f893 0490 ldrb.w r0, [r3, #1168] ; 0x490 + if (s) { + 800dcfc: f010 040f ands.w r4, r0, #15 + r = s >> 4; + 800dd00: ea4f 1320 mov.w r3, r0, asr #4 + if (s) { + 800dd04: d02d beq.n 800dd62 + CHECK_BIT_BUFFER(br_state, s, return FALSE); + 800dd06: 42a2 cmp r2, r4 + k += r; + 800dd08: 4498 add r8, r3 + CHECK_BIT_BUFFER(br_state, s, return FALSE); + 800dd0a: da07 bge.n 800dd1c + 800dd0c: 4623 mov r3, r4 + 800dd0e: a807 add r0, sp, #28 + 800dd10: f7ff fe14 bl 800d93c + 800dd14: 2800 cmp r0, #0 + 800dd16: d0b3 beq.n 800dc80 + 800dd18: e9dd 1209 ldrd r1, r2, [sp, #36] ; 0x24 + r = GET_BITS(s); + 800dd1c: 1b12 subs r2, r2, r4 + 800dd1e: f85a 0024 ldr.w r0, [sl, r4, lsl #2] + s = HUFF_EXTEND(r, s); + 800dd22: 3c01 subs r4, #1 + r = GET_BITS(s); + 800dd24: fa41 f302 asr.w r3, r1, r2 + s = HUFF_EXTEND(r, s); + 800dd28: f85a 4024 ldr.w r4, [sl, r4, lsl #2] + r = GET_BITS(s); + 800dd2c: 4003 ands r3, r0 + s = HUFF_EXTEND(r, s); + 800dd2e: 429c cmp r4, r3 + (*block)[natural_order[k]] = (JCOEF) (s << Al); + 800dd30: 9c04 ldr r4, [sp, #16] + s = HUFF_EXTEND(r, s); + 800dd32: bfa8 it ge + 800dd34: 1a1b subge r3, r3, r0 + (*block)[natural_order[k]] = (JCOEF) (s << Al); + 800dd36: f85b 0028 ldr.w r0, [fp, r8, lsl #2] + 800dd3a: 40a3 lsls r3, r4 + 800dd3c: 9c05 ldr r4, [sp, #20] + 800dd3e: f824 3010 strh.w r3, [r4, r0, lsl #1] + for (k = cinfo->Ss; k <= Se; k++) { + 800dd42: f108 0801 add.w r8, r8, #1 + 800dd46: e7bc b.n 800dcc2 + HUFF_DECODE(s, br_state, tbl, return FALSE, label2); + 800dd48: 2301 movs r3, #1 + 800dd4a: 9300 str r3, [sp, #0] + 800dd4c: a807 add r0, sp, #28 + 800dd4e: 464b mov r3, r9 + 800dd50: f7ff fe52 bl 800d9f8 + 800dd54: 2800 cmp r0, #0 + 800dd56: db93 blt.n 800dc80 + 800dd58: e9dd 1209 ldrd r1, r2, [sp, #36] ; 0x24 + 800dd5c: e7ce b.n 800dcfc + 800dd5e: 2309 movs r3, #9 + 800dd60: e7f3 b.n 800dd4a + if (r == 15) { /* ZRL */ + 800dd62: 2b0f cmp r3, #15 + 800dd64: d102 bne.n 800dd6c + k += 15; /* skip 15 zeroes in band */ + 800dd66: f108 080f add.w r8, r8, #15 + 800dd6a: e7ea b.n 800dd42 + EOBRUN = 1 << r; + 800dd6c: 2601 movs r6, #1 + 800dd6e: 409e lsls r6, r3 + if (r) { /* EOBr, r > 0 */ + 800dd70: b19b cbz r3, 800dd9a + CHECK_BIT_BUFFER(br_state, r, return FALSE); + 800dd72: 429a cmp r2, r3 + 800dd74: da09 bge.n 800dd8a + 800dd76: a807 add r0, sp, #28 + 800dd78: 9303 str r3, [sp, #12] + 800dd7a: f7ff fddf bl 800d93c + 800dd7e: 2800 cmp r0, #0 + 800dd80: f43f af7e beq.w 800dc80 + 800dd84: 9b03 ldr r3, [sp, #12] + 800dd86: e9dd 1209 ldrd r1, r2, [sp, #36] ; 0x24 + r = GET_BITS(r); + 800dd8a: 1ad2 subs r2, r2, r3 + 800dd8c: 4807 ldr r0, [pc, #28] ; (800ddac ) + 800dd8e: f850 0023 ldr.w r0, [r0, r3, lsl #2] + 800dd92: fa41 f302 asr.w r3, r1, r2 + 800dd96: 4003 ands r3, r0 + EOBRUN += r; + 800dd98: 441e add r6, r3 + EOBRUN--; /* this band is processed at this moment */ + 800dd9a: 3e01 subs r6, #1 + BITREAD_SAVE_STATE(cinfo,entropy->bitstate); + 800dd9c: 69bb ldr r3, [r7, #24] + 800dd9e: 9807 ldr r0, [sp, #28] + 800dda0: 6018 str r0, [r3, #0] + 800dda2: 9808 ldr r0, [sp, #32] + 800dda4: 6058 str r0, [r3, #4] + 800dda6: e9c5 1202 strd r1, r2, [r5, #8] + 800ddaa: e778 b.n 800dc9e + 800ddac: 08037f88 .word 0x08037f88 + +0800ddb0 : + * is not very clear on the point. + */ + +METHODDEF(boolean) +decode_mcu_DC_refine (j_decompress_ptr cinfo, JBLOCKROW *MCU_data) +{ + 800ddb0: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} + huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy; + int p1 = 1 << cinfo->Al; /* 1 in the bit position being coded */ + 800ddb4: f8d0 31a4 ldr.w r3, [r0, #420] ; 0x1a4 + 800ddb8: 2701 movs r7, #1 +{ + 800ddba: b087 sub sp, #28 + 800ddbc: 4604 mov r4, r0 + int p1 = 1 << cinfo->Al; /* 1 in the bit position being coded */ + 800ddbe: 409f lsls r7, r3 + int blkn; + JBLOCKROW block; + BITREAD_STATE_VARS; + + /* Process restart marker if needed; may have to suspend */ + if (cinfo->restart_interval) { + 800ddc0: f8d0 3118 ldr.w r3, [r0, #280] ; 0x118 +{ + 800ddc4: 4688 mov r8, r1 + huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy; + 800ddc6: f8d0 51d0 ldr.w r5, [r0, #464] ; 0x1d0 + if (cinfo->restart_interval) { + 800ddca: b9c3 cbnz r3, 800ddfe + /* Not worth the cycles to check insufficient_data here, + * since we will not change the data anyway if we read zeroes. + */ + + /* Load up working state */ + BITREAD_LOAD_STATE(cinfo,entropy->bitstate); + 800ddcc: 69a3 ldr r3, [r4, #24] + + /* Outer loop handles each block in the MCU */ + + for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { + 800ddce: 2600 movs r6, #0 + BITREAD_LOAD_STATE(cinfo,entropy->bitstate); + 800ddd0: 9405 str r4, [sp, #20] + 800ddd2: 681a ldr r2, [r3, #0] + 800ddd4: 685b ldr r3, [r3, #4] + 800ddd6: 9201 str r2, [sp, #4] + 800ddd8: 9302 str r3, [sp, #8] + 800ddda: e9d5 1202 ldrd r1, r2, [r5, #8] + for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { + 800ddde: f8d4 316c ldr.w r3, [r4, #364] ; 0x16c + 800dde2: 42b3 cmp r3, r6 + 800dde4: dc16 bgt.n 800de14 + (*block)[0] |= p1; + /* Note: since we use |=, repeating the assignment later is safe */ + } + + /* Completed MCU, so update state */ + BITREAD_SAVE_STATE(cinfo,entropy->bitstate); + 800dde6: 69a3 ldr r3, [r4, #24] + 800dde8: 9801 ldr r0, [sp, #4] + 800ddea: 6018 str r0, [r3, #0] + 800ddec: 9802 ldr r0, [sp, #8] + 800ddee: 6058 str r0, [r3, #4] + + /* Account for restart interval (no-op if not using restarts) */ + entropy->restarts_to_go--; + + return TRUE; + 800ddf0: 2001 movs r0, #1 + entropy->restarts_to_go--; + 800ddf2: 6aab ldr r3, [r5, #40] ; 0x28 + 800ddf4: 3b01 subs r3, #1 + BITREAD_SAVE_STATE(cinfo,entropy->bitstate); + 800ddf6: e9c5 1202 strd r1, r2, [r5, #8] + entropy->restarts_to_go--; + 800ddfa: 62ab str r3, [r5, #40] ; 0x28 + return TRUE; + 800ddfc: e007 b.n 800de0e + if (entropy->restarts_to_go == 0) + 800ddfe: 6aab ldr r3, [r5, #40] ; 0x28 + 800de00: 2b00 cmp r3, #0 + 800de02: d1e3 bne.n 800ddcc + if (! process_restart(cinfo)) + 800de04: f7ff fe44 bl 800da90 + 800de08: 2800 cmp r0, #0 + 800de0a: d1df bne.n 800ddcc + return FALSE; + 800de0c: 2000 movs r0, #0 +} + 800de0e: b007 add sp, #28 + 800de10: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} + CHECK_BIT_BUFFER(br_state, 1, return FALSE); + 800de14: 2a00 cmp r2, #0 + block = MCU_data[blkn]; + 800de16: f858 9026 ldr.w r9, [r8, r6, lsl #2] + CHECK_BIT_BUFFER(br_state, 1, return FALSE); + 800de1a: dc07 bgt.n 800de2c + 800de1c: 2301 movs r3, #1 + 800de1e: a801 add r0, sp, #4 + 800de20: f7ff fd8c bl 800d93c + 800de24: 2800 cmp r0, #0 + 800de26: d0f1 beq.n 800de0c + 800de28: e9dd 1203 ldrd r1, r2, [sp, #12] + if (GET_BITS(1)) + 800de2c: 3a01 subs r2, #1 + for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { + 800de2e: 3601 adds r6, #1 + if (GET_BITS(1)) + 800de30: fa41 f302 asr.w r3, r1, r2 + 800de34: 07db lsls r3, r3, #31 + (*block)[0] |= p1; + 800de36: bf42 ittt mi + 800de38: f8b9 3000 ldrhmi.w r3, [r9] + 800de3c: 433b orrmi r3, r7 + 800de3e: f8a9 3000 strhmi.w r3, [r9] + for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { + 800de42: e7cc b.n 800ddde + +0800de44 : + d_derived_tbl * tbl; + int num_newnz; + int newnz_pos[DCTSIZE2]; + + /* Process restart marker if needed; may have to suspend */ + if (cinfo->restart_interval) { + 800de44: f8d0 3118 ldr.w r3, [r0, #280] ; 0x118 +{ + 800de48: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 800de4c: 4605 mov r5, r0 + 800de4e: b0d1 sub sp, #324 ; 0x144 + 800de50: 460e mov r6, r1 + huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy; + 800de52: f8d0 71d0 ldr.w r7, [r0, #464] ; 0x1d0 + if (cinfo->restart_interval) { + 800de56: b94b cbnz r3, 800de6c + return FALSE; + } + + /* If we've run out of data, don't modify the MCU. + */ + if (! entropy->insufficient_data) { + 800de58: f8d7 a024 ldr.w sl, [r7, #36] ; 0x24 + 800de5c: f1ba 0f00 cmp.w sl, #0 + 800de60: d00f beq.n 800de82 + BITREAD_SAVE_STATE(cinfo,entropy->bitstate); + entropy->saved.EOBRUN = EOBRUN; /* only part of saved state we need */ + } + + /* Account for restart interval (no-op if not using restarts) */ + entropy->restarts_to_go--; + 800de62: 6abb ldr r3, [r7, #40] ; 0x28 + + return TRUE; + 800de64: 2001 movs r0, #1 + entropy->restarts_to_go--; + 800de66: 3b01 subs r3, #1 + 800de68: 62bb str r3, [r7, #40] ; 0x28 + return TRUE; + 800de6a: e007 b.n 800de7c + if (entropy->restarts_to_go == 0) + 800de6c: 6abb ldr r3, [r7, #40] ; 0x28 + 800de6e: 2b00 cmp r3, #0 + 800de70: d1f2 bne.n 800de58 + if (! process_restart(cinfo)) + 800de72: f7ff fe0d bl 800da90 + 800de76: 2800 cmp r0, #0 + 800de78: d1ee bne.n 800de58 + return FALSE; + 800de7a: 2000 movs r0, #0 + /* Re-zero any output coefficients that we made newly nonzero */ + while (num_newnz > 0) + (*block)[newnz_pos[--num_newnz]] = 0; + + return FALSE; +} + 800de7c: b051 add sp, #324 ; 0x144 + 800de7e: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + Se = cinfo->Se; + 800de82: f8d5 319c ldr.w r3, [r5, #412] ; 0x19c + p1 = 1 << cinfo->Al; /* 1 in the bit position being coded */ + 800de86: 2201 movs r2, #1 + EOBRUN = entropy->saved.EOBRUN; /* only part of saved state we need */ + 800de88: f8d7 b010 ldr.w fp, [r7, #16] + Se = cinfo->Se; + 800de8c: 9306 str r3, [sp, #24] + p1 = 1 << cinfo->Al; /* 1 in the bit position being coded */ + 800de8e: f8d5 31a4 ldr.w r3, [r5, #420] ; 0x1a4 + block = MCU_data[0]; + 800de92: f8d6 8000 ldr.w r8, [r6] + p1 = 1 << cinfo->Al; /* 1 in the bit position being coded */ + 800de96: 409a lsls r2, r3 + k = cinfo->Ss; + 800de98: f8d5 6198 ldr.w r6, [r5, #408] ; 0x198 + BITREAD_LOAD_STATE(cinfo,entropy->bitstate); + 800de9c: 950f str r5, [sp, #60] ; 0x3c + p1 = 1 << cinfo->Al; /* 1 in the bit position being coded */ + 800de9e: 9203 str r2, [sp, #12] + m1 = (-1) << cinfo->Al; /* -1 in the bit position being coded */ + 800dea0: f04f 32ff mov.w r2, #4294967295 + 800dea4: fa02 f303 lsl.w r3, r2, r3 + 800dea8: 9307 str r3, [sp, #28] + natural_order = cinfo->natural_order; + 800deaa: f8d5 31ac ldr.w r3, [r5, #428] ; 0x1ac + 800deae: 9308 str r3, [sp, #32] + BITREAD_LOAD_STATE(cinfo,entropy->bitstate); + 800deb0: 69ab ldr r3, [r5, #24] + 800deb2: 681a ldr r2, [r3, #0] + 800deb4: 685b ldr r3, [r3, #4] + 800deb6: 920b str r2, [sp, #44] ; 0x2c + 800deb8: 930c str r3, [sp, #48] ; 0x30 + tbl = entropy->ac_derived_tbl; + 800deba: 6bfb ldr r3, [r7, #60] ; 0x3c + BITREAD_LOAD_STATE(cinfo,entropy->bitstate); + 800debc: e9d7 4202 ldrd r4, r2, [r7, #8] + tbl = entropy->ac_derived_tbl; + 800dec0: 9309 str r3, [sp, #36] ; 0x24 + if (EOBRUN == 0) { + 800dec2: f1bb 0f00 cmp.w fp, #0 + 800dec6: f000 80c3 beq.w 800e050 + for (; k <= Se; k++) { + 800deca: 9b06 ldr r3, [sp, #24] + 800decc: 429e cmp r6, r3 + 800dece: f340 80cd ble.w 800e06c + EOBRUN--; + 800ded2: f10b 3bff add.w fp, fp, #4294967295 + 800ded6: e0bf b.n 800e058 + HUFF_DECODE(s, br_state, tbl, goto undoit, label3); + 800ded8: 2a07 cmp r2, #7 + 800deda: dc0a bgt.n 800def2 + 800dedc: 2300 movs r3, #0 + 800dede: 4621 mov r1, r4 + 800dee0: a80b add r0, sp, #44 ; 0x2c + 800dee2: f7ff fd2b bl 800d93c + 800dee6: 2800 cmp r0, #0 + 800dee8: d06e beq.n 800dfc8 + 800deea: e9dd 420d ldrd r4, r2, [sp, #52] ; 0x34 + 800deee: 2a07 cmp r2, #7 + 800def0: dd61 ble.n 800dfb6 + 800def2: f1a2 0308 sub.w r3, r2, #8 + 800def6: 9809 ldr r0, [sp, #36] ; 0x24 + 800def8: fa44 f303 asr.w r3, r4, r3 + 800defc: b2db uxtb r3, r3 + 800defe: f103 0124 add.w r1, r3, #36 ; 0x24 + 800df02: f850 1021 ldr.w r1, [r0, r1, lsl #2] + 800df06: 2900 cmp r1, #0 + 800df08: d06b beq.n 800dfe2 + 800df0a: 4403 add r3, r0 + 800df0c: 1a52 subs r2, r2, r1 + 800df0e: f893 0490 ldrb.w r0, [r3, #1168] ; 0x490 + if (s) { + 800df12: f010 030f ands.w r3, r0, #15 + r = s >> 4; + 800df16: ea4f 1920 mov.w r9, r0, asr #4 + if (s) { + 800df1a: 9304 str r3, [sp, #16] + 800df1c: d066 beq.n 800dfec + if (s != 1) /* size of new coef should always be 1 */ + 800df1e: 2b01 cmp r3, #1 + 800df20: d009 beq.n 800df36 + WARNMS(cinfo, JWRN_HUFF_BAD_CODE); + 800df22: 682b ldr r3, [r5, #0] + 800df24: 2179 movs r1, #121 ; 0x79 + 800df26: 4628 mov r0, r5 + 800df28: 9204 str r2, [sp, #16] + 800df2a: 6159 str r1, [r3, #20] + 800df2c: f04f 31ff mov.w r1, #4294967295 + 800df30: 685b ldr r3, [r3, #4] + 800df32: 4798 blx r3 + 800df34: 9a04 ldr r2, [sp, #16] + CHECK_BIT_BUFFER(br_state, 1, goto undoit); + 800df36: 2a00 cmp r2, #0 + 800df38: dc08 bgt.n 800df4c + 800df3a: 2301 movs r3, #1 + 800df3c: 4621 mov r1, r4 + 800df3e: a80b add r0, sp, #44 ; 0x2c + 800df40: f7ff fcfc bl 800d93c + 800df44: 2800 cmp r0, #0 + 800df46: d03f beq.n 800dfc8 + 800df48: e9dd 420d ldrd r4, r2, [sp, #52] ; 0x34 + if (GET_BITS(1)) + 800df4c: 3a01 subs r2, #1 + s = m1; /* newly nonzero coef is negative */ + 800df4e: 9907 ldr r1, [sp, #28] + if (GET_BITS(1)) + 800df50: fa44 f302 asr.w r3, r4, r2 + s = m1; /* newly nonzero coef is negative */ + 800df54: f013 0f01 tst.w r3, #1 + 800df58: 9b03 ldr r3, [sp, #12] + 800df5a: bf08 it eq + 800df5c: 460b moveq r3, r1 + 800df5e: 9304 str r3, [sp, #16] + thiscoef = *block + natural_order[k]; + 800df60: 9b08 ldr r3, [sp, #32] + 800df62: f853 3026 ldr.w r3, [r3, r6, lsl #2] + 800df66: 9305 str r3, [sp, #20] + if (*thiscoef != 0) { + 800df68: f938 3013 ldrsh.w r3, [r8, r3, lsl #1] + 800df6c: 2b00 cmp r3, #0 + 800df6e: d05e beq.n 800e02e + CHECK_BIT_BUFFER(br_state, 1, goto undoit); + 800df70: 2a00 cmp r2, #0 + 800df72: dc07 bgt.n 800df84 + 800df74: 2301 movs r3, #1 + 800df76: 4621 mov r1, r4 + 800df78: a80b add r0, sp, #44 ; 0x2c + 800df7a: f7ff fcdf bl 800d93c + 800df7e: b318 cbz r0, 800dfc8 + 800df80: e9dd 420d ldrd r4, r2, [sp, #52] ; 0x34 + if (GET_BITS(1)) { + 800df84: 3a01 subs r2, #1 + 800df86: fa44 f302 asr.w r3, r4, r2 + 800df8a: 07d9 lsls r1, r3, #31 + 800df8c: d50e bpl.n 800dfac + if ((*thiscoef & p1) == 0) { /* do nothing if already set it */ + 800df8e: 9b05 ldr r3, [sp, #20] + 800df90: f938 1013 ldrsh.w r1, [r8, r3, lsl #1] + 800df94: 9b03 ldr r3, [sp, #12] + 800df96: 4219 tst r1, r3 + 800df98: d108 bne.n 800dfac + if (*thiscoef >= 0) + 800df9a: 2900 cmp r1, #0 + *thiscoef += p1; + 800df9c: b28b uxth r3, r1 + 800df9e: bfac ite ge + 800dfa0: 9903 ldrge r1, [sp, #12] + *thiscoef += m1; + 800dfa2: 9907 ldrlt r1, [sp, #28] + 800dfa4: 440b add r3, r1 + 800dfa6: 9905 ldr r1, [sp, #20] + 800dfa8: f828 3011 strh.w r3, [r8, r1, lsl #1] + k++; + 800dfac: 3601 adds r6, #1 + } while (k <= Se); + 800dfae: 9b06 ldr r3, [sp, #24] + 800dfb0: 42b3 cmp r3, r6 + 800dfb2: dad5 bge.n 800df60 + 800dfb4: e03e b.n 800e034 + HUFF_DECODE(s, br_state, tbl, goto undoit, label3); + 800dfb6: 2301 movs r3, #1 + 800dfb8: 9300 str r3, [sp, #0] + 800dfba: 4621 mov r1, r4 + 800dfbc: 9b09 ldr r3, [sp, #36] ; 0x24 + 800dfbe: a80b add r0, sp, #44 ; 0x2c + 800dfc0: f7ff fd1a bl 800d9f8 + 800dfc4: 2800 cmp r0, #0 + 800dfc6: da0e bge.n 800dfe6 + (*block)[newnz_pos[--num_newnz]] = 0; + 800dfc8: ab10 add r3, sp, #64 ; 0x40 + 800dfca: 2200 movs r2, #0 + while (num_newnz > 0) + 800dfcc: f1ba 0f00 cmp.w sl, #0 + 800dfd0: f43f af53 beq.w 800de7a + (*block)[newnz_pos[--num_newnz]] = 0; + 800dfd4: f10a 3aff add.w sl, sl, #4294967295 + 800dfd8: f853 102a ldr.w r1, [r3, sl, lsl #2] + 800dfdc: f828 2011 strh.w r2, [r8, r1, lsl #1] + 800dfe0: e7f4 b.n 800dfcc + HUFF_DECODE(s, br_state, tbl, goto undoit, label3); + 800dfe2: 2309 movs r3, #9 + 800dfe4: e7e8 b.n 800dfb8 + 800dfe6: e9dd 420d ldrd r4, r2, [sp, #52] ; 0x34 + 800dfea: e792 b.n 800df12 + if (r != 15) { + 800dfec: f1b9 0f0f cmp.w r9, #15 + 800dff0: d0b6 beq.n 800df60 + EOBRUN = 1 << r; /* EOBr, run length is 2^r + appended bits */ + 800dff2: 2301 movs r3, #1 + 800dff4: fa03 fb09 lsl.w fp, r3, r9 + if (r) { + 800dff8: f1b9 0f00 cmp.w r9, #0 + 800dffc: d013 beq.n 800e026 + CHECK_BIT_BUFFER(br_state, r, goto undoit); + 800dffe: 454a cmp r2, r9 + 800e000: da08 bge.n 800e014 + 800e002: 464b mov r3, r9 + 800e004: 4621 mov r1, r4 + 800e006: a80b add r0, sp, #44 ; 0x2c + 800e008: f7ff fc98 bl 800d93c + 800e00c: 2800 cmp r0, #0 + 800e00e: d0db beq.n 800dfc8 + 800e010: e9dd 420d ldrd r4, r2, [sp, #52] ; 0x34 + r = GET_BITS(r); + 800e014: 4b28 ldr r3, [pc, #160] ; (800e0b8 ) + 800e016: eba2 0209 sub.w r2, r2, r9 + 800e01a: f853 1029 ldr.w r1, [r3, r9, lsl #2] + 800e01e: fa44 f302 asr.w r3, r4, r2 + 800e022: 400b ands r3, r1 + EOBRUN += r; + 800e024: 449b add fp, r3 + if (EOBRUN > 0) { + 800e026: f1bb 0f00 cmp.w fp, #0 + 800e02a: d015 beq.n 800e058 + 800e02c: e74d b.n 800deca + if (--r < 0) + 800e02e: f1b9 0901 subs.w r9, r9, #1 + 800e032: d2bb bcs.n 800dfac + if (s) { + 800e034: 9b04 ldr r3, [sp, #16] + 800e036: b153 cbz r3, 800e04e + int pos = natural_order[k]; + 800e038: 9b08 ldr r3, [sp, #32] + (*block)[pos] = (JCOEF) s; + 800e03a: 9904 ldr r1, [sp, #16] + int pos = natural_order[k]; + 800e03c: f853 3026 ldr.w r3, [r3, r6, lsl #2] + (*block)[pos] = (JCOEF) s; + 800e040: f828 1013 strh.w r1, [r8, r3, lsl #1] + newnz_pos[num_newnz++] = pos; + 800e044: a910 add r1, sp, #64 ; 0x40 + 800e046: f841 302a str.w r3, [r1, sl, lsl #2] + 800e04a: f10a 0a01 add.w sl, sl, #1 + for (; k <= Se; k++) { + 800e04e: 3601 adds r6, #1 + 800e050: 9b06 ldr r3, [sp, #24] + 800e052: 429e cmp r6, r3 + 800e054: f77f af40 ble.w 800ded8 + BITREAD_SAVE_STATE(cinfo,entropy->bitstate); + 800e058: 69ab ldr r3, [r5, #24] + 800e05a: 990b ldr r1, [sp, #44] ; 0x2c + 800e05c: 6019 str r1, [r3, #0] + 800e05e: 990c ldr r1, [sp, #48] ; 0x30 + 800e060: 6059 str r1, [r3, #4] + entropy->saved.EOBRUN = EOBRUN; /* only part of saved state we need */ + 800e062: f8c7 b010 str.w fp, [r7, #16] + BITREAD_SAVE_STATE(cinfo,entropy->bitstate); + 800e066: e9c7 4202 strd r4, r2, [r7, #8] + entropy->saved.EOBRUN = EOBRUN; /* only part of saved state we need */ + 800e06a: e6fa b.n 800de62 + thiscoef = *block + natural_order[k]; + 800e06c: 9b08 ldr r3, [sp, #32] + 800e06e: f853 9026 ldr.w r9, [r3, r6, lsl #2] + if (*thiscoef != 0) { + 800e072: f938 3019 ldrsh.w r3, [r8, r9, lsl #1] + 800e076: b1e3 cbz r3, 800e0b2 + CHECK_BIT_BUFFER(br_state, 1, goto undoit); + 800e078: 2a00 cmp r2, #0 + 800e07a: dc08 bgt.n 800e08e + 800e07c: 2301 movs r3, #1 + 800e07e: 4621 mov r1, r4 + 800e080: a80b add r0, sp, #44 ; 0x2c + 800e082: f7ff fc5b bl 800d93c + 800e086: 2800 cmp r0, #0 + 800e088: d09e beq.n 800dfc8 + 800e08a: e9dd 420d ldrd r4, r2, [sp, #52] ; 0x34 + if (GET_BITS(1)) { + 800e08e: 3a01 subs r2, #1 + 800e090: fa44 f302 asr.w r3, r4, r2 + 800e094: 07db lsls r3, r3, #31 + 800e096: d50c bpl.n 800e0b2 + if ((*thiscoef & p1) == 0) { /* do nothing if already changed it */ + 800e098: f938 1019 ldrsh.w r1, [r8, r9, lsl #1] + 800e09c: 9b03 ldr r3, [sp, #12] + 800e09e: 4219 tst r1, r3 + 800e0a0: d107 bne.n 800e0b2 + if (*thiscoef >= 0) + 800e0a2: 2900 cmp r1, #0 + *thiscoef += p1; + 800e0a4: b28b uxth r3, r1 + 800e0a6: bfac ite ge + 800e0a8: 9903 ldrge r1, [sp, #12] + *thiscoef += m1; + 800e0aa: 9907 ldrlt r1, [sp, #28] + 800e0ac: 440b add r3, r1 + 800e0ae: f828 3019 strh.w r3, [r8, r9, lsl #1] + for (; k <= Se; k++) { + 800e0b2: 3601 adds r6, #1 + 800e0b4: e709 b.n 800deca + 800e0b6: bf00 nop + 800e0b8: 08037f88 .word 0x08037f88 + +0800e0bc : + * partial blocks. + */ + +METHODDEF(boolean) +decode_mcu_sub (j_decompress_ptr cinfo, JBLOCKROW *MCU_data) +{ + 800e0bc: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + int Se, blkn; + BITREAD_STATE_VARS; + savable_state state; + + /* Process restart marker if needed; may have to suspend */ + if (cinfo->restart_interval) { + 800e0c0: f8d0 3118 ldr.w r3, [r0, #280] ; 0x118 +{ + 800e0c4: b093 sub sp, #76 ; 0x4c + 800e0c6: 4606 mov r6, r0 + huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy; + 800e0c8: f8d0 51d0 ldr.w r5, [r0, #464] ; 0x1d0 +{ + 800e0cc: 9106 str r1, [sp, #24] + if (cinfo->restart_interval) { + 800e0ce: b933 cbnz r3, 800e0de + } + + /* If we've run out of data, just leave the MCU set to zeroes. + * This way, we return uniform gray for the remainder of the segment. + */ + if (! entropy->insufficient_data) { + 800e0d0: 6a6f ldr r7, [r5, #36] ; 0x24 + 800e0d2: b17f cbz r7, 800e0f4 + BITREAD_SAVE_STATE(cinfo,entropy->bitstate); + ASSIGN_STATE(entropy->saved, state); + } + + /* Account for restart interval (no-op if not using restarts) */ + entropy->restarts_to_go--; + 800e0d4: 6aab ldr r3, [r5, #40] ; 0x28 + + return TRUE; + 800e0d6: 2001 movs r0, #1 + entropy->restarts_to_go--; + 800e0d8: 3b01 subs r3, #1 + 800e0da: 62ab str r3, [r5, #40] ; 0x28 + return TRUE; + 800e0dc: e007 b.n 800e0ee + if (entropy->restarts_to_go == 0) + 800e0de: 6aab ldr r3, [r5, #40] ; 0x28 + 800e0e0: 2b00 cmp r3, #0 + 800e0e2: d1f5 bne.n 800e0d0 + if (! process_restart(cinfo)) + 800e0e4: f7ff fcd4 bl 800da90 + 800e0e8: 2800 cmp r0, #0 + 800e0ea: d1f1 bne.n 800e0d0 + return FALSE; + 800e0ec: 2000 movs r0, #0 +} + 800e0ee: b013 add sp, #76 ; 0x4c + 800e0f0: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + natural_order = cinfo->natural_order; + 800e0f4: f8d6 31ac ldr.w r3, [r6, #428] ; 0x1ac + ASSIGN_STATE(state, entropy->saved); + 800e0f8: f105 0810 add.w r8, r5, #16 + 800e0fc: ac0d add r4, sp, #52 ; 0x34 + 800e0fe: f105 095c add.w r9, r5, #92 ; 0x5c + natural_order = cinfo->natural_order; + 800e102: 9304 str r3, [sp, #16] + Se = cinfo->lim_Se; + 800e104: f8d6 31b0 ldr.w r3, [r6, #432] ; 0x1b0 + r = GET_BITS(s); + 800e108: f8df a29c ldr.w sl, [pc, #668] ; 800e3a8 + Se = cinfo->lim_Se; + 800e10c: 9305 str r3, [sp, #20] + BITREAD_LOAD_STATE(cinfo,entropy->bitstate); + 800e10e: 69b3 ldr r3, [r6, #24] + 800e110: 960c str r6, [sp, #48] ; 0x30 + 800e112: 681a ldr r2, [r3, #0] + 800e114: 685b ldr r3, [r3, #4] + 800e116: 9208 str r2, [sp, #32] + 800e118: 9309 str r3, [sp, #36] ; 0x24 + ASSIGN_STATE(state, entropy->saved); + 800e11a: e8b8 000f ldmia.w r8!, {r0, r1, r2, r3} + BITREAD_LOAD_STATE(cinfo,entropy->bitstate); + 800e11e: e9d5 ec02 ldrd lr, ip, [r5, #8] + ASSIGN_STATE(state, entropy->saved); + 800e122: c40f stmia r4!, {r0, r1, r2, r3} + 800e124: f8d8 3000 ldr.w r3, [r8] + 800e128: 6023 str r3, [r4, #0] + for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { + 800e12a: f8d6 316c ldr.w r3, [r6, #364] ; 0x16c + 800e12e: 42bb cmp r3, r7 + 800e130: dc0e bgt.n 800e150 + BITREAD_SAVE_STATE(cinfo,entropy->bitstate); + 800e132: 69b3 ldr r3, [r6, #24] + ASSIGN_STATE(entropy->saved, state); + 800e134: ae0d add r6, sp, #52 ; 0x34 + BITREAD_SAVE_STATE(cinfo,entropy->bitstate); + 800e136: 9a08 ldr r2, [sp, #32] + ASSIGN_STATE(entropy->saved, state); + 800e138: f105 0410 add.w r4, r5, #16 + BITREAD_SAVE_STATE(cinfo,entropy->bitstate); + 800e13c: 601a str r2, [r3, #0] + 800e13e: 9a09 ldr r2, [sp, #36] ; 0x24 + 800e140: 605a str r2, [r3, #4] + ASSIGN_STATE(entropy->saved, state); + 800e142: ce0f ldmia r6!, {r0, r1, r2, r3} + BITREAD_SAVE_STATE(cinfo,entropy->bitstate); + 800e144: e9c5 ec02 strd lr, ip, [r5, #8] + ASSIGN_STATE(entropy->saved, state); + 800e148: c40f stmia r4!, {r0, r1, r2, r3} + 800e14a: 6833 ldr r3, [r6, #0] + 800e14c: 6023 str r3, [r4, #0] + 800e14e: e7c1 b.n 800e0d4 + JBLOCKROW block = MCU_data[blkn]; + 800e150: 9b06 ldr r3, [sp, #24] + HUFF_DECODE(s, br_state, htbl, return FALSE, label1); + 800e152: f1bc 0f07 cmp.w ip, #7 + htbl = entropy->dc_cur_tbls[blkn]; + 800e156: f859 4f04 ldr.w r4, [r9, #4]! + JBLOCKROW block = MCU_data[blkn]; + 800e15a: f853 b027 ldr.w fp, [r3, r7, lsl #2] + HUFF_DECODE(s, br_state, htbl, return FALSE, label1); + 800e15e: dc0c bgt.n 800e17a + 800e160: 2300 movs r3, #0 + 800e162: 4662 mov r2, ip + 800e164: 4671 mov r1, lr + 800e166: a808 add r0, sp, #32 + 800e168: f7ff fbe8 bl 800d93c + 800e16c: 2800 cmp r0, #0 + 800e16e: d0bd beq.n 800e0ec + 800e170: e9dd ec0a ldrd lr, ip, [sp, #40] ; 0x28 + 800e174: f1bc 0f07 cmp.w ip, #7 + 800e178: dd4a ble.n 800e210 + 800e17a: f1ac 0308 sub.w r3, ip, #8 + 800e17e: fa4e f303 asr.w r3, lr, r3 + 800e182: b2db uxtb r3, r3 + 800e184: f103 0224 add.w r2, r3, #36 ; 0x24 + 800e188: f854 2022 ldr.w r2, [r4, r2, lsl #2] + 800e18c: 2a00 cmp r2, #0 + 800e18e: d04d beq.n 800e22c + 800e190: 4423 add r3, r4 + 800e192: ebac 0c02 sub.w ip, ip, r2 + 800e196: f893 4490 ldrb.w r4, [r3, #1168] ; 0x490 + coef_limit = entropy->coef_limit[blkn]; + 800e19a: f8d9 3050 ldr.w r3, [r9, #80] ; 0x50 + htbl = entropy->ac_cur_tbls[blkn]; + 800e19e: f8d9 8028 ldr.w r8, [r9, #40] ; 0x28 + coef_limit = entropy->coef_limit[blkn]; + 800e1a2: 9303 str r3, [sp, #12] + if (coef_limit) { + 800e1a4: 2b00 cmp r3, #0 + 800e1a6: f000 80a0 beq.w 800e2ea + if (s) { + 800e1aa: b1cc cbz r4, 800e1e0 + CHECK_BIT_BUFFER(br_state, s, return FALSE); + 800e1ac: 45a4 cmp ip, r4 + 800e1ae: da09 bge.n 800e1c4 + 800e1b0: 4623 mov r3, r4 + 800e1b2: 4662 mov r2, ip + 800e1b4: 4671 mov r1, lr + 800e1b6: a808 add r0, sp, #32 + 800e1b8: f7ff fbc0 bl 800d93c + 800e1bc: 2800 cmp r0, #0 + 800e1be: d095 beq.n 800e0ec + 800e1c0: e9dd ec0a ldrd lr, ip, [sp, #40] ; 0x28 + r = GET_BITS(s); + 800e1c4: ebac 0c04 sub.w ip, ip, r4 + 800e1c8: f85a 2024 ldr.w r2, [sl, r4, lsl #2] + s = HUFF_EXTEND(r, s); + 800e1cc: 3c01 subs r4, #1 + r = GET_BITS(s); + 800e1ce: fa4e f30c asr.w r3, lr, ip + s = HUFF_EXTEND(r, s); + 800e1d2: f85a 1024 ldr.w r1, [sl, r4, lsl #2] + r = GET_BITS(s); + 800e1d6: 4013 ands r3, r2 + s = HUFF_EXTEND(r, s); + 800e1d8: 4299 cmp r1, r3 + 800e1da: bfac ite ge + 800e1dc: 1a9c subge r4, r3, r2 + 800e1de: 461c movlt r4, r3 + ci = cinfo->MCU_membership[blkn]; + 800e1e0: f506 73b8 add.w r3, r6, #368 ; 0x170 + 800e1e4: f853 2027 ldr.w r2, [r3, r7, lsl #2] + s += state.last_dc_val[ci]; + 800e1e8: ab12 add r3, sp, #72 ; 0x48 + 800e1ea: eb03 0282 add.w r2, r3, r2, lsl #2 + 800e1ee: f852 3c10 ldr.w r3, [r2, #-16] + 800e1f2: 4423 add r3, r4 + k = 1; + 800e1f4: 2401 movs r4, #1 + state.last_dc_val[ci] = s; + 800e1f6: f842 3c10 str.w r3, [r2, #-16] + (*block)[0] = (JCOEF) s; + 800e1fa: f8ab 3000 strh.w r3, [fp] + for (; k < coef_limit; k++) { + 800e1fe: 9b03 ldr r3, [sp, #12] + 800e200: 429c cmp r4, r3 + 800e202: db15 blt.n 800e230 + for (; k <= Se; k++) { + 800e204: 9b05 ldr r3, [sp, #20] + 800e206: 429c cmp r4, r3 + 800e208: f340 8081 ble.w 800e30e + for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { + 800e20c: 3701 adds r7, #1 + 800e20e: e78c b.n 800e12a + HUFF_DECODE(s, br_state, htbl, return FALSE, label1); + 800e210: 2301 movs r3, #1 + 800e212: 9300 str r3, [sp, #0] + 800e214: 4662 mov r2, ip + 800e216: 4623 mov r3, r4 + 800e218: 4671 mov r1, lr + 800e21a: a808 add r0, sp, #32 + 800e21c: f7ff fbec bl 800d9f8 + 800e220: 1e04 subs r4, r0, #0 + 800e222: f6ff af63 blt.w 800e0ec + 800e226: e9dd ec0a ldrd lr, ip, [sp, #40] ; 0x28 + 800e22a: e7b6 b.n 800e19a + 800e22c: 2309 movs r3, #9 + 800e22e: e7f0 b.n 800e212 + HUFF_DECODE(s, br_state, htbl, return FALSE, label2); + 800e230: f1bc 0f07 cmp.w ip, #7 + 800e234: dc0d bgt.n 800e252 + 800e236: 2300 movs r3, #0 + 800e238: 4662 mov r2, ip + 800e23a: 4671 mov r1, lr + 800e23c: a808 add r0, sp, #32 + 800e23e: f7ff fb7d bl 800d93c + 800e242: 2800 cmp r0, #0 + 800e244: f43f af52 beq.w 800e0ec + 800e248: e9dd ec0a ldrd lr, ip, [sp, #40] ; 0x28 + 800e24c: f1bc 0f07 cmp.w ip, #7 + 800e250: dd37 ble.n 800e2c2 + 800e252: f1ac 0308 sub.w r3, ip, #8 + 800e256: fa4e f303 asr.w r3, lr, r3 + 800e25a: b2db uxtb r3, r3 + 800e25c: f103 0224 add.w r2, r3, #36 ; 0x24 + 800e260: f858 2022 ldr.w r2, [r8, r2, lsl #2] + 800e264: 2a00 cmp r2, #0 + 800e266: d03a beq.n 800e2de + 800e268: 4443 add r3, r8 + 800e26a: ebac 0c02 sub.w ip, ip, r2 + 800e26e: f893 0490 ldrb.w r0, [r3, #1168] ; 0x490 + if (s) { + 800e272: f010 030f ands.w r3, r0, #15 + r = s >> 4; + 800e276: ea4f 1220 mov.w r2, r0, asr #4 + if (s) { + 800e27a: d032 beq.n 800e2e2 + CHECK_BIT_BUFFER(br_state, s, return FALSE); + 800e27c: 459c cmp ip, r3 + k += r; + 800e27e: 4414 add r4, r2 + CHECK_BIT_BUFFER(br_state, s, return FALSE); + 800e280: da0b bge.n 800e29a + 800e282: 4662 mov r2, ip + 800e284: 4671 mov r1, lr + 800e286: a808 add r0, sp, #32 + 800e288: 9307 str r3, [sp, #28] + 800e28a: f7ff fb57 bl 800d93c + 800e28e: 2800 cmp r0, #0 + 800e290: f43f af2c beq.w 800e0ec + 800e294: 9b07 ldr r3, [sp, #28] + 800e296: e9dd ec0a ldrd lr, ip, [sp, #40] ; 0x28 + r = GET_BITS(s); + 800e29a: ebac 0c03 sub.w ip, ip, r3 + 800e29e: f85a 1023 ldr.w r1, [sl, r3, lsl #2] + s = HUFF_EXTEND(r, s); + 800e2a2: 3b01 subs r3, #1 + r = GET_BITS(s); + 800e2a4: fa4e f20c asr.w r2, lr, ip + s = HUFF_EXTEND(r, s); + 800e2a8: f85a 3023 ldr.w r3, [sl, r3, lsl #2] + r = GET_BITS(s); + 800e2ac: 400a ands r2, r1 + s = HUFF_EXTEND(r, s); + 800e2ae: 4293 cmp r3, r2 + (*block)[natural_order[k]] = (JCOEF) s; + 800e2b0: 9b04 ldr r3, [sp, #16] + s = HUFF_EXTEND(r, s); + 800e2b2: bfa8 it ge + 800e2b4: 1a52 subge r2, r2, r1 + (*block)[natural_order[k]] = (JCOEF) s; + 800e2b6: f853 3024 ldr.w r3, [r3, r4, lsl #2] + 800e2ba: f82b 2013 strh.w r2, [fp, r3, lsl #1] + for (; k < coef_limit; k++) { + 800e2be: 3401 adds r4, #1 + 800e2c0: e79d b.n 800e1fe + HUFF_DECODE(s, br_state, htbl, return FALSE, label2); + 800e2c2: 2301 movs r3, #1 + 800e2c4: 9300 str r3, [sp, #0] + 800e2c6: 4662 mov r2, ip + 800e2c8: 4643 mov r3, r8 + 800e2ca: 4671 mov r1, lr + 800e2cc: a808 add r0, sp, #32 + 800e2ce: f7ff fb93 bl 800d9f8 + 800e2d2: 2800 cmp r0, #0 + 800e2d4: f6ff af0a blt.w 800e0ec + 800e2d8: e9dd ec0a ldrd lr, ip, [sp, #40] ; 0x28 + 800e2dc: e7c9 b.n 800e272 + 800e2de: 2309 movs r3, #9 + 800e2e0: e7f0 b.n 800e2c4 + if (r != 15) + 800e2e2: 2a0f cmp r2, #15 + 800e2e4: d192 bne.n 800e20c + k += 15; + 800e2e6: 340f adds r4, #15 + 800e2e8: e7e9 b.n 800e2be + if (s) { + 800e2ea: b174 cbz r4, 800e30a + CHECK_BIT_BUFFER(br_state, s, return FALSE); + 800e2ec: 45a4 cmp ip, r4 + 800e2ee: da0a bge.n 800e306 + 800e2f0: 4623 mov r3, r4 + 800e2f2: 4662 mov r2, ip + 800e2f4: 4671 mov r1, lr + 800e2f6: a808 add r0, sp, #32 + 800e2f8: f7ff fb20 bl 800d93c + 800e2fc: 2800 cmp r0, #0 + 800e2fe: f43f aef5 beq.w 800e0ec + 800e302: e9dd ec0a ldrd lr, ip, [sp, #40] ; 0x28 + DROP_BITS(s); + 800e306: ebac 0c04 sub.w ip, ip, r4 + k = 1; + 800e30a: 2401 movs r4, #1 + 800e30c: e77a b.n 800e204 + HUFF_DECODE(s, br_state, htbl, return FALSE, label3); + 800e30e: f1bc 0f07 cmp.w ip, #7 + 800e312: dc0d bgt.n 800e330 + 800e314: 2300 movs r3, #0 + 800e316: 4662 mov r2, ip + 800e318: 4671 mov r1, lr + 800e31a: a808 add r0, sp, #32 + 800e31c: f7ff fb0e bl 800d93c + 800e320: 2800 cmp r0, #0 + 800e322: f43f aee3 beq.w 800e0ec + 800e326: e9dd ec0a ldrd lr, ip, [sp, #40] ; 0x28 + 800e32a: f1bc 0f07 cmp.w ip, #7 + 800e32e: dd25 ble.n 800e37c + 800e330: f1ac 0308 sub.w r3, ip, #8 + 800e334: fa4e f303 asr.w r3, lr, r3 + 800e338: b2db uxtb r3, r3 + 800e33a: f103 0224 add.w r2, r3, #36 ; 0x24 + 800e33e: f858 2022 ldr.w r2, [r8, r2, lsl #2] + 800e342: b34a cbz r2, 800e398 + 800e344: 4443 add r3, r8 + 800e346: ebac 0c02 sub.w ip, ip, r2 + 800e34a: f893 0490 ldrb.w r0, [r3, #1168] ; 0x490 + if (s) { + 800e34e: f010 0b0f ands.w fp, r0, #15 + r = s >> 4; + 800e352: ea4f 1320 mov.w r3, r0, asr #4 + if (s) { + 800e356: d021 beq.n 800e39c + CHECK_BIT_BUFFER(br_state, s, return FALSE); + 800e358: 45dc cmp ip, fp + k += r; + 800e35a: 441c add r4, r3 + CHECK_BIT_BUFFER(br_state, s, return FALSE); + 800e35c: da0a bge.n 800e374 + 800e35e: 465b mov r3, fp + 800e360: 4662 mov r2, ip + 800e362: 4671 mov r1, lr + 800e364: a808 add r0, sp, #32 + 800e366: f7ff fae9 bl 800d93c + 800e36a: 2800 cmp r0, #0 + 800e36c: f43f aebe beq.w 800e0ec + 800e370: e9dd ec0a ldrd lr, ip, [sp, #40] ; 0x28 + DROP_BITS(s); + 800e374: ebac 0c0b sub.w ip, ip, fp + for (; k <= Se; k++) { + 800e378: 3401 adds r4, #1 + 800e37a: e743 b.n 800e204 + HUFF_DECODE(s, br_state, htbl, return FALSE, label3); + 800e37c: 2301 movs r3, #1 + 800e37e: 9300 str r3, [sp, #0] + 800e380: 4662 mov r2, ip + 800e382: 4643 mov r3, r8 + 800e384: 4671 mov r1, lr + 800e386: a808 add r0, sp, #32 + 800e388: f7ff fb36 bl 800d9f8 + 800e38c: 2800 cmp r0, #0 + 800e38e: f6ff aead blt.w 800e0ec + 800e392: e9dd ec0a ldrd lr, ip, [sp, #40] ; 0x28 + 800e396: e7da b.n 800e34e + 800e398: 2309 movs r3, #9 + 800e39a: e7f0 b.n 800e37e + if (r != 15) + 800e39c: 2b0f cmp r3, #15 + 800e39e: f47f af35 bne.w 800e20c + k += 15; + 800e3a2: 340f adds r4, #15 + 800e3a4: e7e8 b.n 800e378 + 800e3a6: bf00 nop + 800e3a8: 08037f88 .word 0x08037f88 + +0800e3ac : + * full-size blocks. + */ + +METHODDEF(boolean) +decode_mcu (j_decompress_ptr cinfo, JBLOCKROW *MCU_data) +{ + 800e3ac: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + int blkn; + BITREAD_STATE_VARS; + savable_state state; + + /* Process restart marker if needed; may have to suspend */ + if (cinfo->restart_interval) { + 800e3b0: f8d0 3118 ldr.w r3, [r0, #280] ; 0x118 +{ + 800e3b4: b091 sub sp, #68 ; 0x44 + 800e3b6: 4606 mov r6, r0 + huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy; + 800e3b8: f8d0 51d0 ldr.w r5, [r0, #464] ; 0x1d0 +{ + 800e3bc: 9104 str r1, [sp, #16] + if (cinfo->restart_interval) { + 800e3be: b933 cbnz r3, 800e3ce + } + + /* If we've run out of data, just leave the MCU set to zeroes. + * This way, we return uniform gray for the remainder of the segment. + */ + if (! entropy->insufficient_data) { + 800e3c0: 6a6f ldr r7, [r5, #36] ; 0x24 + 800e3c2: b17f cbz r7, 800e3e4 + BITREAD_SAVE_STATE(cinfo,entropy->bitstate); + ASSIGN_STATE(entropy->saved, state); + } + + /* Account for restart interval (no-op if not using restarts) */ + entropy->restarts_to_go--; + 800e3c4: 6aab ldr r3, [r5, #40] ; 0x28 + + return TRUE; + 800e3c6: 2001 movs r0, #1 + entropy->restarts_to_go--; + 800e3c8: 3b01 subs r3, #1 + 800e3ca: 62ab str r3, [r5, #40] ; 0x28 + return TRUE; + 800e3cc: e007 b.n 800e3de + if (entropy->restarts_to_go == 0) + 800e3ce: 6aab ldr r3, [r5, #40] ; 0x28 + 800e3d0: 2b00 cmp r3, #0 + 800e3d2: d1f5 bne.n 800e3c0 + if (! process_restart(cinfo)) + 800e3d4: f7ff fb5c bl 800da90 + 800e3d8: 2800 cmp r0, #0 + 800e3da: d1f1 bne.n 800e3c0 + return FALSE; + 800e3dc: 2000 movs r0, #0 +} + 800e3de: b011 add sp, #68 ; 0x44 + 800e3e0: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + BITREAD_LOAD_STATE(cinfo,entropy->bitstate); + 800e3e4: 69b3 ldr r3, [r6, #24] + ASSIGN_STATE(state, entropy->saved); + 800e3e6: f105 0810 add.w r8, r5, #16 + 800e3ea: ac0b add r4, sp, #44 ; 0x2c + 800e3ec: f105 095c add.w r9, r5, #92 ; 0x5c + BITREAD_LOAD_STATE(cinfo,entropy->bitstate); + 800e3f0: 681a ldr r2, [r3, #0] + 800e3f2: 685b ldr r3, [r3, #4] + 800e3f4: 9206 str r2, [sp, #24] + 800e3f6: 9307 str r3, [sp, #28] + r = GET_BITS(s); + 800e3f8: f8df a290 ldr.w sl, [pc, #656] ; 800e68c + BITREAD_LOAD_STATE(cinfo,entropy->bitstate); + 800e3fc: 960a str r6, [sp, #40] ; 0x28 + ASSIGN_STATE(state, entropy->saved); + 800e3fe: e8b8 000f ldmia.w r8!, {r0, r1, r2, r3} + BITREAD_LOAD_STATE(cinfo,entropy->bitstate); + 800e402: e9d5 ec02 ldrd lr, ip, [r5, #8] + ASSIGN_STATE(state, entropy->saved); + 800e406: c40f stmia r4!, {r0, r1, r2, r3} + 800e408: f8d8 3000 ldr.w r3, [r8] + 800e40c: 6023 str r3, [r4, #0] + for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { + 800e40e: f8d6 316c ldr.w r3, [r6, #364] ; 0x16c + 800e412: 42bb cmp r3, r7 + 800e414: dc0e bgt.n 800e434 + BITREAD_SAVE_STATE(cinfo,entropy->bitstate); + 800e416: 69b3 ldr r3, [r6, #24] + ASSIGN_STATE(entropy->saved, state); + 800e418: ae0b add r6, sp, #44 ; 0x2c + BITREAD_SAVE_STATE(cinfo,entropy->bitstate); + 800e41a: 9a06 ldr r2, [sp, #24] + ASSIGN_STATE(entropy->saved, state); + 800e41c: f105 0410 add.w r4, r5, #16 + BITREAD_SAVE_STATE(cinfo,entropy->bitstate); + 800e420: 601a str r2, [r3, #0] + 800e422: 9a07 ldr r2, [sp, #28] + 800e424: 605a str r2, [r3, #4] + ASSIGN_STATE(entropy->saved, state); + 800e426: ce0f ldmia r6!, {r0, r1, r2, r3} + BITREAD_SAVE_STATE(cinfo,entropy->bitstate); + 800e428: e9c5 ec02 strd lr, ip, [r5, #8] + ASSIGN_STATE(entropy->saved, state); + 800e42c: c40f stmia r4!, {r0, r1, r2, r3} + 800e42e: 6833 ldr r3, [r6, #0] + 800e430: 6023 str r3, [r4, #0] + 800e432: e7c7 b.n 800e3c4 + JBLOCKROW block = MCU_data[blkn]; + 800e434: 9b04 ldr r3, [sp, #16] + HUFF_DECODE(s, br_state, htbl, return FALSE, label1); + 800e436: f1bc 0f07 cmp.w ip, #7 + htbl = entropy->dc_cur_tbls[blkn]; + 800e43a: f859 4f04 ldr.w r4, [r9, #4]! + JBLOCKROW block = MCU_data[blkn]; + 800e43e: f853 b027 ldr.w fp, [r3, r7, lsl #2] + HUFF_DECODE(s, br_state, htbl, return FALSE, label1); + 800e442: dc0c bgt.n 800e45e + 800e444: 2300 movs r3, #0 + 800e446: 4662 mov r2, ip + 800e448: 4671 mov r1, lr + 800e44a: a806 add r0, sp, #24 + 800e44c: f7ff fa76 bl 800d93c + 800e450: 2800 cmp r0, #0 + 800e452: d0c3 beq.n 800e3dc + 800e454: e9dd ec08 ldrd lr, ip, [sp, #32] + 800e458: f1bc 0f07 cmp.w ip, #7 + 800e45c: dd49 ble.n 800e4f2 + 800e45e: f1ac 0308 sub.w r3, ip, #8 + 800e462: fa4e f303 asr.w r3, lr, r3 + 800e466: b2db uxtb r3, r3 + 800e468: f103 0224 add.w r2, r3, #36 ; 0x24 + 800e46c: f854 2022 ldr.w r2, [r4, r2, lsl #2] + 800e470: 2a00 cmp r2, #0 + 800e472: d04c beq.n 800e50e + 800e474: 4423 add r3, r4 + 800e476: ebac 0c02 sub.w ip, ip, r2 + 800e47a: f893 4490 ldrb.w r4, [r3, #1168] ; 0x490 + coef_limit = entropy->coef_limit[blkn]; + 800e47e: f8d9 3050 ldr.w r3, [r9, #80] ; 0x50 + htbl = entropy->ac_cur_tbls[blkn]; + 800e482: f8d9 8028 ldr.w r8, [r9, #40] ; 0x28 + coef_limit = entropy->coef_limit[blkn]; + 800e486: 9303 str r3, [sp, #12] + if (coef_limit) { + 800e488: 2b00 cmp r3, #0 + 800e48a: f000 809f beq.w 800e5cc + if (s) { + 800e48e: b1cc cbz r4, 800e4c4 + CHECK_BIT_BUFFER(br_state, s, return FALSE); + 800e490: 45a4 cmp ip, r4 + 800e492: da09 bge.n 800e4a8 + 800e494: 4623 mov r3, r4 + 800e496: 4662 mov r2, ip + 800e498: 4671 mov r1, lr + 800e49a: a806 add r0, sp, #24 + 800e49c: f7ff fa4e bl 800d93c + 800e4a0: 2800 cmp r0, #0 + 800e4a2: d09b beq.n 800e3dc + 800e4a4: e9dd ec08 ldrd lr, ip, [sp, #32] + r = GET_BITS(s); + 800e4a8: ebac 0c04 sub.w ip, ip, r4 + 800e4ac: f85a 2024 ldr.w r2, [sl, r4, lsl #2] + s = HUFF_EXTEND(r, s); + 800e4b0: 3c01 subs r4, #1 + r = GET_BITS(s); + 800e4b2: fa4e f30c asr.w r3, lr, ip + s = HUFF_EXTEND(r, s); + 800e4b6: f85a 1024 ldr.w r1, [sl, r4, lsl #2] + r = GET_BITS(s); + 800e4ba: 4013 ands r3, r2 + s = HUFF_EXTEND(r, s); + 800e4bc: 4299 cmp r1, r3 + 800e4be: bfac ite ge + 800e4c0: 1a9c subge r4, r3, r2 + 800e4c2: 461c movlt r4, r3 + ci = cinfo->MCU_membership[blkn]; + 800e4c4: f506 73b8 add.w r3, r6, #368 ; 0x170 + 800e4c8: f853 2027 ldr.w r2, [r3, r7, lsl #2] + s += state.last_dc_val[ci]; + 800e4cc: ab10 add r3, sp, #64 ; 0x40 + 800e4ce: eb03 0282 add.w r2, r3, r2, lsl #2 + 800e4d2: f852 3c10 ldr.w r3, [r2, #-16] + 800e4d6: 4423 add r3, r4 + k = 1; + 800e4d8: 2401 movs r4, #1 + state.last_dc_val[ci] = s; + 800e4da: f842 3c10 str.w r3, [r2, #-16] + (*block)[0] = (JCOEF) s; + 800e4de: f8ab 3000 strh.w r3, [fp] + for (; k < coef_limit; k++) { + 800e4e2: 9b03 ldr r3, [sp, #12] + 800e4e4: 429c cmp r4, r3 + 800e4e6: db14 blt.n 800e512 + for (; k < DCTSIZE2; k++) { + 800e4e8: 2c3f cmp r4, #63 ; 0x3f + 800e4ea: f340 8081 ble.w 800e5f0 + for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { + 800e4ee: 3701 adds r7, #1 + 800e4f0: e78d b.n 800e40e + HUFF_DECODE(s, br_state, htbl, return FALSE, label1); + 800e4f2: 2301 movs r3, #1 + 800e4f4: 9300 str r3, [sp, #0] + 800e4f6: 4662 mov r2, ip + 800e4f8: 4623 mov r3, r4 + 800e4fa: 4671 mov r1, lr + 800e4fc: a806 add r0, sp, #24 + 800e4fe: f7ff fa7b bl 800d9f8 + 800e502: 1e04 subs r4, r0, #0 + 800e504: f6ff af6a blt.w 800e3dc + 800e508: e9dd ec08 ldrd lr, ip, [sp, #32] + 800e50c: e7b7 b.n 800e47e + 800e50e: 2309 movs r3, #9 + 800e510: e7f0 b.n 800e4f4 + HUFF_DECODE(s, br_state, htbl, return FALSE, label2); + 800e512: f1bc 0f07 cmp.w ip, #7 + 800e516: dc0d bgt.n 800e534 + 800e518: 2300 movs r3, #0 + 800e51a: 4662 mov r2, ip + 800e51c: 4671 mov r1, lr + 800e51e: a806 add r0, sp, #24 + 800e520: f7ff fa0c bl 800d93c + 800e524: 2800 cmp r0, #0 + 800e526: f43f af59 beq.w 800e3dc + 800e52a: e9dd ec08 ldrd lr, ip, [sp, #32] + 800e52e: f1bc 0f07 cmp.w ip, #7 + 800e532: dd37 ble.n 800e5a4 + 800e534: f1ac 0308 sub.w r3, ip, #8 + 800e538: fa4e f303 asr.w r3, lr, r3 + 800e53c: b2db uxtb r3, r3 + 800e53e: f103 0224 add.w r2, r3, #36 ; 0x24 + 800e542: f858 2022 ldr.w r2, [r8, r2, lsl #2] + 800e546: 2a00 cmp r2, #0 + 800e548: d03a beq.n 800e5c0 + 800e54a: 4443 add r3, r8 + 800e54c: ebac 0c02 sub.w ip, ip, r2 + 800e550: f893 0490 ldrb.w r0, [r3, #1168] ; 0x490 + if (s) { + 800e554: f010 030f ands.w r3, r0, #15 + r = s >> 4; + 800e558: ea4f 1220 mov.w r2, r0, asr #4 + if (s) { + 800e55c: d032 beq.n 800e5c4 + CHECK_BIT_BUFFER(br_state, s, return FALSE); + 800e55e: 459c cmp ip, r3 + k += r; + 800e560: 4414 add r4, r2 + CHECK_BIT_BUFFER(br_state, s, return FALSE); + 800e562: da0b bge.n 800e57c + 800e564: 4662 mov r2, ip + 800e566: 4671 mov r1, lr + 800e568: a806 add r0, sp, #24 + 800e56a: 9305 str r3, [sp, #20] + 800e56c: f7ff f9e6 bl 800d93c + 800e570: 2800 cmp r0, #0 + 800e572: f43f af33 beq.w 800e3dc + 800e576: 9b05 ldr r3, [sp, #20] + 800e578: e9dd ec08 ldrd lr, ip, [sp, #32] + r = GET_BITS(s); + 800e57c: ebac 0c03 sub.w ip, ip, r3 + 800e580: f85a 1023 ldr.w r1, [sl, r3, lsl #2] + s = HUFF_EXTEND(r, s); + 800e584: 3b01 subs r3, #1 + r = GET_BITS(s); + 800e586: fa4e f20c asr.w r2, lr, ip + s = HUFF_EXTEND(r, s); + 800e58a: f85a 3023 ldr.w r3, [sl, r3, lsl #2] + r = GET_BITS(s); + 800e58e: 400a ands r2, r1 + s = HUFF_EXTEND(r, s); + 800e590: 4293 cmp r3, r2 + (*block)[jpeg_natural_order[k]] = (JCOEF) s; + 800e592: 4b3d ldr r3, [pc, #244] ; (800e688 ) + s = HUFF_EXTEND(r, s); + 800e594: bfa8 it ge + 800e596: 1a52 subge r2, r2, r1 + (*block)[jpeg_natural_order[k]] = (JCOEF) s; + 800e598: f853 3024 ldr.w r3, [r3, r4, lsl #2] + 800e59c: f82b 2013 strh.w r2, [fp, r3, lsl #1] + for (; k < coef_limit; k++) { + 800e5a0: 3401 adds r4, #1 + 800e5a2: e79e b.n 800e4e2 + HUFF_DECODE(s, br_state, htbl, return FALSE, label2); + 800e5a4: 2301 movs r3, #1 + 800e5a6: 9300 str r3, [sp, #0] + 800e5a8: 4662 mov r2, ip + 800e5aa: 4643 mov r3, r8 + 800e5ac: 4671 mov r1, lr + 800e5ae: a806 add r0, sp, #24 + 800e5b0: f7ff fa22 bl 800d9f8 + 800e5b4: 2800 cmp r0, #0 + 800e5b6: f6ff af11 blt.w 800e3dc + 800e5ba: e9dd ec08 ldrd lr, ip, [sp, #32] + 800e5be: e7c9 b.n 800e554 + 800e5c0: 2309 movs r3, #9 + 800e5c2: e7f0 b.n 800e5a6 + if (r != 15) + 800e5c4: 2a0f cmp r2, #15 + 800e5c6: d192 bne.n 800e4ee + k += 15; + 800e5c8: 340f adds r4, #15 + 800e5ca: e7e9 b.n 800e5a0 + if (s) { + 800e5cc: b174 cbz r4, 800e5ec + CHECK_BIT_BUFFER(br_state, s, return FALSE); + 800e5ce: 45a4 cmp ip, r4 + 800e5d0: da0a bge.n 800e5e8 + 800e5d2: 4623 mov r3, r4 + 800e5d4: 4662 mov r2, ip + 800e5d6: 4671 mov r1, lr + 800e5d8: a806 add r0, sp, #24 + 800e5da: f7ff f9af bl 800d93c + 800e5de: 2800 cmp r0, #0 + 800e5e0: f43f aefc beq.w 800e3dc + 800e5e4: e9dd ec08 ldrd lr, ip, [sp, #32] + DROP_BITS(s); + 800e5e8: ebac 0c04 sub.w ip, ip, r4 + k = 1; + 800e5ec: 2401 movs r4, #1 + 800e5ee: e77b b.n 800e4e8 + HUFF_DECODE(s, br_state, htbl, return FALSE, label3); + 800e5f0: f1bc 0f07 cmp.w ip, #7 + 800e5f4: dc0d bgt.n 800e612 + 800e5f6: 2300 movs r3, #0 + 800e5f8: 4662 mov r2, ip + 800e5fa: 4671 mov r1, lr + 800e5fc: a806 add r0, sp, #24 + 800e5fe: f7ff f99d bl 800d93c + 800e602: 2800 cmp r0, #0 + 800e604: f43f aeea beq.w 800e3dc + 800e608: e9dd ec08 ldrd lr, ip, [sp, #32] + 800e60c: f1bc 0f07 cmp.w ip, #7 + 800e610: dd25 ble.n 800e65e + 800e612: f1ac 0308 sub.w r3, ip, #8 + 800e616: fa4e f303 asr.w r3, lr, r3 + 800e61a: b2db uxtb r3, r3 + 800e61c: f103 0224 add.w r2, r3, #36 ; 0x24 + 800e620: f858 2022 ldr.w r2, [r8, r2, lsl #2] + 800e624: b34a cbz r2, 800e67a + 800e626: 4443 add r3, r8 + 800e628: ebac 0c02 sub.w ip, ip, r2 + 800e62c: f893 0490 ldrb.w r0, [r3, #1168] ; 0x490 + if (s) { + 800e630: f010 0b0f ands.w fp, r0, #15 + r = s >> 4; + 800e634: ea4f 1320 mov.w r3, r0, asr #4 + if (s) { + 800e638: d021 beq.n 800e67e + CHECK_BIT_BUFFER(br_state, s, return FALSE); + 800e63a: 45dc cmp ip, fp + k += r; + 800e63c: 441c add r4, r3 + CHECK_BIT_BUFFER(br_state, s, return FALSE); + 800e63e: da0a bge.n 800e656 + 800e640: 465b mov r3, fp + 800e642: 4662 mov r2, ip + 800e644: 4671 mov r1, lr + 800e646: a806 add r0, sp, #24 + 800e648: f7ff f978 bl 800d93c + 800e64c: 2800 cmp r0, #0 + 800e64e: f43f aec5 beq.w 800e3dc + 800e652: e9dd ec08 ldrd lr, ip, [sp, #32] + DROP_BITS(s); + 800e656: ebac 0c0b sub.w ip, ip, fp + for (; k < DCTSIZE2; k++) { + 800e65a: 3401 adds r4, #1 + 800e65c: e744 b.n 800e4e8 + HUFF_DECODE(s, br_state, htbl, return FALSE, label3); + 800e65e: 2301 movs r3, #1 + 800e660: 9300 str r3, [sp, #0] + 800e662: 4662 mov r2, ip + 800e664: 4643 mov r3, r8 + 800e666: 4671 mov r1, lr + 800e668: a806 add r0, sp, #24 + 800e66a: f7ff f9c5 bl 800d9f8 + 800e66e: 2800 cmp r0, #0 + 800e670: f6ff aeb4 blt.w 800e3dc + 800e674: e9dd ec08 ldrd lr, ip, [sp, #32] + 800e678: e7da b.n 800e630 + 800e67a: 2309 movs r3, #9 + 800e67c: e7f0 b.n 800e660 + if (r != 15) + 800e67e: 2b0f cmp r3, #15 + 800e680: f47f af35 bne.w 800e4ee + k += 15; + 800e684: 340f adds r4, #15 + 800e686: e7e8 b.n 800e65a + 800e688: 08039860 .word 0x08039860 + 800e68c: 08037f88 .word 0x08037f88 + +0800e690 : +{ + 800e690: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + if (tblno < 0 || tblno >= NUM_HUFF_TBLS) + 800e694: 2a03 cmp r2, #3 +{ + 800e696: f2ad 5d24 subw sp, sp, #1316 ; 0x524 + 800e69a: 4604 mov r4, r0 + 800e69c: 4616 mov r6, r2 + 800e69e: 461f mov r7, r3 + 800e6a0: 9102 str r1, [sp, #8] + if (tblno < 0 || tblno >= NUM_HUFF_TBLS) + 800e6a2: d905 bls.n 800e6b0 + ERREXIT1(cinfo, JERR_NO_HUFF_TABLE, tblno); + 800e6a4: 6803 ldr r3, [r0, #0] + 800e6a6: 2234 movs r2, #52 ; 0x34 + 800e6a8: e9c3 2605 strd r2, r6, [r3, #20] + 800e6ac: 681b ldr r3, [r3, #0] + 800e6ae: 4798 blx r3 + isDC ? cinfo->dc_huff_tbl_ptrs[tblno] : cinfo->ac_huff_tbl_ptrs[tblno]; + 800e6b0: 9b02 ldr r3, [sp, #8] + 800e6b2: 2b00 cmp r3, #0 + 800e6b4: d044 beq.n 800e740 + 800e6b6: eb04 0386 add.w r3, r4, r6, lsl #2 + 800e6ba: f8d3 50b4 ldr.w r5, [r3, #180] ; 0xb4 + if (htbl == NULL) + 800e6be: b935 cbnz r5, 800e6ce + ERREXIT1(cinfo, JERR_NO_HUFF_TABLE, tblno); + 800e6c0: 6823 ldr r3, [r4, #0] + 800e6c2: 2234 movs r2, #52 ; 0x34 + 800e6c4: 4620 mov r0, r4 + 800e6c6: e9c3 2605 strd r2, r6, [r3, #20] + 800e6ca: 681b ldr r3, [r3, #0] + 800e6cc: 4798 blx r3 + if (*pdtbl == NULL) + 800e6ce: 683b ldr r3, [r7, #0] + 800e6d0: b93b cbnz r3, 800e6e2 + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 800e6d2: 6863 ldr r3, [r4, #4] + 800e6d4: f44f 62b2 mov.w r2, #1424 ; 0x590 + 800e6d8: 2101 movs r1, #1 + 800e6da: 4620 mov r0, r4 + 800e6dc: 681b ldr r3, [r3, #0] + 800e6de: 4798 blx r3 + *pdtbl = (d_derived_tbl *) + 800e6e0: 6038 str r0, [r7, #0] + dtbl = *pdtbl; + 800e6e2: f8d7 8000 ldr.w r8, [r7] + for (l = 1; l <= 16; l++) { + 800e6e6: 2601 movs r6, #1 + p = 0; + 800e6e8: 2700 movs r7, #0 + ERREXIT(cinfo, JERR_BAD_HUFF_TABLE); + 800e6ea: f04f 0b09 mov.w fp, #9 + dtbl->pub = htbl; /* fill in back link */ + 800e6ee: f8c8 508c str.w r5, [r8, #140] ; 0x8c + i = (int) htbl->bits[l]; + 800e6f2: f815 9006 ldrb.w r9, [r5, r6] + if (i < 0 || p + i > 256) /* protect against table overrun */ + 800e6f6: 46ba mov sl, r7 + 800e6f8: 444f add r7, r9 + 800e6fa: f5b7 7f80 cmp.w r7, #256 ; 0x100 + 800e6fe: dd05 ble.n 800e70c + ERREXIT(cinfo, JERR_BAD_HUFF_TABLE); + 800e700: 6823 ldr r3, [r4, #0] + 800e702: 4620 mov r0, r4 + 800e704: f8c3 b014 str.w fp, [r3, #20] + 800e708: 681b ldr r3, [r3, #0] + 800e70a: 4798 blx r3 + 800e70c: f10a 0318 add.w r3, sl, #24 + 800e710: 446b add r3, sp + while (i--) + 800e712: f1b9 0901 subs.w r9, r9, #1 + 800e716: d218 bcs.n 800e74a + for (l = 1; l <= 16; l++) { + 800e718: 3601 adds r6, #1 + 800e71a: 2e11 cmp r6, #17 + 800e71c: d1e9 bne.n 800e6f2 + huffsize[p] = 0; + 800e71e: 2200 movs r2, #0 + 800e720: ab06 add r3, sp, #24 + huffcode[p++] = code; + 800e722: f50d 7a8e add.w sl, sp, #284 ; 0x11c + if (((INT32) code) >= (((INT32) 1) << si)) + 800e726: f04f 0b01 mov.w fp, #1 + huffsize[p] = 0; + 800e72a: 55da strb r2, [r3, r7] + p = 0; + 800e72c: 4691 mov r9, r2 + si = huffsize[0]; + 800e72e: f89d 6018 ldrb.w r6, [sp, #24] + while (huffsize[p]) { + 800e732: ab06 add r3, sp, #24 + 800e734: f813 3009 ldrb.w r3, [r3, r9] + 800e738: b313 cbz r3, 800e780 + 800e73a: 4649 mov r1, r9 + 800e73c: 1a52 subs r2, r2, r1 + 800e73e: e00a b.n 800e756 + isDC ? cinfo->dc_huff_tbl_ptrs[tblno] : cinfo->ac_huff_tbl_ptrs[tblno]; + 800e740: eb04 0386 add.w r3, r4, r6, lsl #2 + 800e744: f8d3 50c4 ldr.w r5, [r3, #196] ; 0xc4 + 800e748: e7b9 b.n 800e6be + huffsize[p++] = (char) l; + 800e74a: f803 6b01 strb.w r6, [r3], #1 + 800e74e: e7e0 b.n 800e712 + huffcode[p++] = code; + 800e750: f84a 3021 str.w r3, [sl, r1, lsl #2] + code++; + 800e754: 3101 adds r1, #1 + while (((int) huffsize[p]) == si) { + 800e756: a806 add r0, sp, #24 + 800e758: 1853 adds r3, r2, r1 + 800e75a: 4689 mov r9, r1 + 800e75c: 5c40 ldrb r0, [r0, r1] + 800e75e: 42b0 cmp r0, r6 + 800e760: d0f6 beq.n 800e750 + if (((INT32) code) >= (((INT32) 1) << si)) + 800e762: fa0b f206 lsl.w r2, fp, r6 + 800e766: 429a cmp r2, r3 + 800e768: dc07 bgt.n 800e77a + ERREXIT(cinfo, JERR_BAD_HUFF_TABLE); + 800e76a: 6822 ldr r2, [r4, #0] + 800e76c: 2109 movs r1, #9 + 800e76e: 4620 mov r0, r4 + 800e770: 9300 str r3, [sp, #0] + 800e772: 6151 str r1, [r2, #20] + 800e774: 6812 ldr r2, [r2, #0] + 800e776: 4790 blx r2 + 800e778: 9b00 ldr r3, [sp, #0] + code <<= 1; + 800e77a: 005a lsls r2, r3, #1 + si++; + 800e77c: 3601 adds r6, #1 + 800e77e: e7d8 b.n 800e732 + 800e780: f105 0210 add.w r2, r5, #16 + 800e784: 4628 mov r0, r5 + 800e786: 4646 mov r6, r8 + dtbl->valoffset[l] = (INT32) p - (INT32) huffcode[p]; + 800e788: f50d 7c8e add.w ip, sp, #284 ; 0x11c + 800e78c: 9201 str r2, [sp, #4] + if (htbl->bits[l]) { + 800e78e: f810 1f01 ldrb.w r1, [r0, #1]! + 800e792: b349 cbz r1, 800e7e8 + dtbl->valoffset[l] = (INT32) p - (INT32) huffcode[p]; + 800e794: f85c 2023 ldr.w r2, [ip, r3, lsl #2] + 800e798: 1a9a subs r2, r3, r2 + p += htbl->bits[l]; + 800e79a: 440b add r3, r1 + dtbl->valoffset[l] = (INT32) p - (INT32) huffcode[p]; + 800e79c: 64f2 str r2, [r6, #76] ; 0x4c + dtbl->maxcode[l] = huffcode[p-1]; /* maximum code of length l */ + 800e79e: 1e5a subs r2, r3, #1 + 800e7a0: f85c 2022 ldr.w r2, [ip, r2, lsl #2] + 800e7a4: f846 2f04 str.w r2, [r6, #4]! + for (l = 1; l <= 16; l++) { + 800e7a8: 9a01 ldr r2, [sp, #4] + 800e7aa: 4282 cmp r2, r0 + 800e7ac: d1ef bne.n 800e78e + dtbl->maxcode[17] = 0xFFFFFL; /* ensures jpeg_huff_decode terminates */ + 800e7ae: 4b2d ldr r3, [pc, #180] ; (800e864 ) + MEMZERO(dtbl->look_nbits, SIZEOF(dtbl->look_nbits)); + 800e7b0: f44f 6280 mov.w r2, #1024 ; 0x400 + 800e7b4: 2100 movs r1, #0 + 800e7b6: f108 0090 add.w r0, r8, #144 ; 0x90 + dtbl->maxcode[17] = 0xFFFFFL; /* ensures jpeg_huff_decode terminates */ + 800e7ba: f8c8 3044 str.w r3, [r8, #68] ; 0x44 + for (l = 1; l <= HUFF_LOOKAHEAD; l++) { + 800e7be: 2601 movs r6, #1 + MEMZERO(dtbl->look_nbits, SIZEOF(dtbl->look_nbits)); + 800e7c0: f026 f8fc bl 80349bc + p = 0; + 800e7c4: f04f 0a00 mov.w sl, #0 + lookbits = huffcode[p] << (HUFF_LOOKAHEAD-l); + 800e7c8: ab47 add r3, sp, #284 ; 0x11c + for (i = 1; i <= (int) htbl->bits[l]; i++, p++) { + 800e7ca: 5daa ldrb r2, [r5, r6] + 800e7cc: f1c6 0b08 rsb fp, r6, #8 + for (ctr = 1 << (HUFF_LOOKAHEAD-l); ctr > 0; ctr--) { + 800e7d0: 46d1 mov r9, sl + for (i = 1; i <= (int) htbl->bits[l]; i++, p++) { + 800e7d2: 9200 str r2, [sp, #0] + for (ctr = 1 << (HUFF_LOOKAHEAD-l); ctr > 0; ctr--) { + 800e7d4: 2201 movs r2, #1 + 800e7d6: 9900 ldr r1, [sp, #0] + 800e7d8: fa02 f20b lsl.w r2, r2, fp + 800e7dc: 4451 add r1, sl + 800e7de: 9103 str r1, [sp, #12] + dtbl->look_sym[lookbits] = htbl->huffval[p]; + 800e7e0: f105 0111 add.w r1, r5, #17 + 800e7e4: 9104 str r1, [sp, #16] + 800e7e6: e01f b.n 800e828 + 800e7e8: f04f 32ff mov.w r2, #4294967295 + 800e7ec: e7da b.n 800e7a4 + lookbits = huffcode[p] << (HUFF_LOOKAHEAD-l); + 800e7ee: f853 0029 ldr.w r0, [r3, r9, lsl #2] + for (ctr = 1 << (HUFF_LOOKAHEAD-l); ctr > 0; ctr--) { + 800e7f2: 4696 mov lr, r2 + dtbl->look_sym[lookbits] = htbl->huffval[p]; + 800e7f4: 9904 ldr r1, [sp, #16] + lookbits = huffcode[p] << (HUFF_LOOKAHEAD-l); + 800e7f6: fa00 f00b lsl.w r0, r0, fp + dtbl->look_sym[lookbits] = htbl->huffval[p]; + 800e7fa: f811 1009 ldrb.w r1, [r1, r9] + 800e7fe: f100 4c80 add.w ip, r0, #1073741824 ; 0x40000000 + 800e802: f10c 0c23 add.w ip, ip, #35 ; 0x23 + 800e806: eb08 0c8c add.w ip, r8, ip, lsl #2 + for (ctr = 1 << (HUFF_LOOKAHEAD-l); ctr > 0; ctr--) { + 800e80a: f1be 0e01 subs.w lr, lr, #1 + dtbl->look_nbits[lookbits] = l; + 800e80e: f84c 6f04 str.w r6, [ip, #4]! + for (ctr = 1 << (HUFF_LOOKAHEAD-l); ctr > 0; ctr--) { + 800e812: d1fa bne.n 800e80a + dtbl->look_sym[lookbits] = htbl->huffval[p]; + 800e814: f500 6092 add.w r0, r0, #1168 ; 0x490 + 800e818: 9205 str r2, [sp, #20] + for (i = 1; i <= (int) htbl->bits[l]; i++, p++) { + 800e81a: f109 0901 add.w r9, r9, #1 + dtbl->look_sym[lookbits] = htbl->huffval[p]; + 800e81e: 4440 add r0, r8 + 800e820: f026 f8cc bl 80349bc + for (i = 1; i <= (int) htbl->bits[l]; i++, p++) { + 800e824: ab47 add r3, sp, #284 ; 0x11c + 800e826: 9a05 ldr r2, [sp, #20] + 800e828: 9903 ldr r1, [sp, #12] + 800e82a: 4589 cmp r9, r1 + 800e82c: d1df bne.n 800e7ee + for (l = 1; l <= HUFF_LOOKAHEAD; l++) { + 800e82e: 3601 adds r6, #1 + 800e830: 9a00 ldr r2, [sp, #0] + 800e832: 2e09 cmp r6, #9 + 800e834: 4492 add sl, r2 + 800e836: d1c8 bne.n 800e7ca + if (isDC) { + 800e838: 9b02 ldr r3, [sp, #8] + 800e83a: b123 cbz r3, 800e846 + 800e83c: 9b01 ldr r3, [sp, #4] + 800e83e: 3510 adds r5, #16 + 800e840: 441f add r7, r3 + for (i = 0; i < numsymbols; i++) { + 800e842: 42af cmp r7, r5 + 800e844: d103 bne.n 800e84e +} + 800e846: f20d 5d24 addw sp, sp, #1316 ; 0x524 + 800e84a: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + if (sym < 0 || sym > 15) + 800e84e: f815 3f01 ldrb.w r3, [r5, #1]! + 800e852: 2b0f cmp r3, #15 + 800e854: d9f5 bls.n 800e842 + ERREXIT(cinfo, JERR_BAD_HUFF_TABLE); + 800e856: 6823 ldr r3, [r4, #0] + 800e858: 4620 mov r0, r4 + 800e85a: 615e str r6, [r3, #20] + 800e85c: 681b ldr r3, [r3, #0] + 800e85e: 4798 blx r3 + for (i = 0; i < numsymbols; i++) { + 800e860: e7ef b.n 800e842 + 800e862: bf00 nop + 800e864: 000fffff .word 0x000fffff + +0800e868 : + * Initialize for a Huffman-compressed scan. + */ + +METHODDEF(void) +start_pass_huff_decoder (j_decompress_ptr cinfo) +{ + 800e868: e92d 4ff8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} + huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy; + int ci, blkn, tbl, i; + jpeg_component_info * compptr; + + if (cinfo->progressive_mode) { + 800e86c: f8d0 50e0 ldr.w r5, [r0, #224] ; 0xe0 +{ + 800e870: 4682 mov sl, r0 + huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy; + 800e872: f8d0 b1d0 ldr.w fp, [r0, #464] ; 0x1d0 + if (cinfo->progressive_mode) { + 800e876: f500 74a8 add.w r4, r0, #336 ; 0x150 + /* Validate progressive scan parameters */ + if (cinfo->Ss == 0) { + 800e87a: f8d0 2198 ldr.w r2, [r0, #408] ; 0x198 + if (cinfo->progressive_mode) { + 800e87e: 2d00 cmp r5, #0 + 800e880: f000 80af beq.w 800e9e2 + if (cinfo->Ss == 0) { + 800e884: f8d0 51a4 ldr.w r5, [r0, #420] ; 0x1a4 + 800e888: e9d0 1667 ldrd r1, r6, [r0, #412] ; 0x19c + 800e88c: b962 cbnz r2, 800e8a8 + if (cinfo->Se != 0) + 800e88e: b1a9 cbz r1, 800e8bc + * accept. Note: large Al values could result in out-of-range DC + * coefficients during early scans, leading to bizarre displays due to + * overflows in the IDCT math. But we won't crash. + */ + bad: + ERREXIT4(cinfo, JERR_BAD_PROGRESSION, + 800e890: f8da 3000 ldr.w r3, [sl] + 800e894: 2711 movs r7, #17 + 800e896: 4650 mov r0, sl + 800e898: 625d str r5, [r3, #36] ; 0x24 + 800e89a: e9c3 7205 strd r7, r2, [r3, #20] + 800e89e: e9c3 1607 strd r1, r6, [r3, #28] + 800e8a2: 681b ldr r3, [r3, #0] + 800e8a4: 4798 blx r3 + 800e8a6: e00f b.n 800e8c8 + if (cinfo->Se < cinfo->Ss || cinfo->Se > cinfo->lim_Se) + 800e8a8: 428a cmp r2, r1 + 800e8aa: dcf1 bgt.n 800e890 + 800e8ac: f8d0 31b0 ldr.w r3, [r0, #432] ; 0x1b0 + 800e8b0: 428b cmp r3, r1 + 800e8b2: dbed blt.n 800e890 + if (cinfo->comps_in_scan != 1) + 800e8b4: f8d0 3150 ldr.w r3, [r0, #336] ; 0x150 + 800e8b8: 2b01 cmp r3, #1 + 800e8ba: d1e9 bne.n 800e890 + if (cinfo->Ah != 0) { + 800e8bc: b116 cbz r6, 800e8c4 + if (cinfo->Ah-1 != cinfo->Al) + 800e8be: 1e73 subs r3, r6, #1 + 800e8c0: 42ab cmp r3, r5 + 800e8c2: d1e5 bne.n 800e890 + if (cinfo->Al > 13) { /* need not check for < 0 */ + 800e8c4: 2d0d cmp r5, #13 + 800e8c6: dce3 bgt.n 800e890 +{ + 800e8c8: 46a1 mov r9, r4 + 800e8ca: 2700 movs r7, #0 + } + /* Update progression status, and verify that scan order is legal. + * Note that inter-scan inconsistencies are treated as warnings + * not fatal errors ... not clear if this is right way to behave. + */ + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + 800e8cc: f8da 3150 ldr.w r3, [sl, #336] ; 0x150 + int coefi, cindex = cinfo->cur_comp_info[ci]->component_index; + int *coef_bit_ptr = & cinfo->coef_bits[cindex][0]; + if (cinfo->Ss && coef_bit_ptr[0] < 0) /* AC without prior DC scan */ + 800e8d0: f8da 2198 ldr.w r2, [sl, #408] ; 0x198 + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + 800e8d4: 42bb cmp r3, r7 + 800e8d6: dc20 bgt.n 800e91a + coef_bit_ptr[coefi] = cinfo->Al; + } + } + + /* Select MCU decoding routine */ + if (cinfo->Ah == 0) { + 800e8d8: f8da 31a0 ldr.w r3, [sl, #416] ; 0x1a0 + 800e8dc: 2b00 cmp r3, #0 + 800e8de: d158 bne.n 800e992 + if (cinfo->Ss == 0) + 800e8e0: 4bbb ldr r3, [pc, #748] ; (800ebd0 ) + 800e8e2: 49bc ldr r1, [pc, #752] ; (800ebd4 ) + entropy->pub.decode_mcu = decode_mcu_DC_first; + else + entropy->pub.decode_mcu = decode_mcu_AC_first; + 800e8e4: 2600 movs r6, #0 + } else { + if (cinfo->Ss == 0) + 800e8e6: 2a00 cmp r2, #0 + 800e8e8: bf08 it eq + 800e8ea: 460b moveq r3, r1 + 800e8ec: f10b 0710 add.w r7, fp, #16 + jpeg_make_d_derived_tbl(cinfo, TRUE, tbl, + & entropy->derived_tbls[tbl]); + } + } else { + tbl = compptr->ac_tbl_no; + jpeg_make_d_derived_tbl(cinfo, FALSE, tbl, + 800e8f0: 46b0 mov r8, r6 + entropy->pub.decode_mcu = decode_mcu_AC_first; + 800e8f2: f8cb 3004 str.w r3, [fp, #4] + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + 800e8f6: f8da 3150 ldr.w r3, [sl, #336] ; 0x150 + 800e8fa: 42b3 cmp r3, r6 + 800e8fc: dc4c bgt.n 800e998 + /* Initialize DC predictions to 0 */ + entropy->saved.last_dc_val[ci] = 0; + } + + /* Initialize private state variables */ + entropy->saved.EOBRUN = 0; + 800e8fe: 2300 movs r3, #0 + 800e900: f8cb 3010 str.w r3, [fp, #16] + } + } + } + + /* Initialize bitread state variables */ + entropy->bitstate.bits_left = 0; + 800e904: 2300 movs r3, #0 + entropy->bitstate.get_buffer = 0; /* unnecessary, but keeps Purify quiet */ + 800e906: e9cb 3302 strd r3, r3, [fp, #8] + entropy->insufficient_data = FALSE; + 800e90a: f8cb 3024 str.w r3, [fp, #36] ; 0x24 + + /* Initialize restart counter */ + entropy->restarts_to_go = cinfo->restart_interval; + 800e90e: f8da 3118 ldr.w r3, [sl, #280] ; 0x118 + 800e912: f8cb 3028 str.w r3, [fp, #40] ; 0x28 +} + 800e916: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} + int coefi, cindex = cinfo->cur_comp_info[ci]->component_index; + 800e91a: f859 3f04 ldr.w r3, [r9, #4]! + 800e91e: f8d3 8004 ldr.w r8, [r3, #4] + int *coef_bit_ptr = & cinfo->coef_bits[cindex][0]; + 800e922: f8da 30a0 ldr.w r3, [sl, #160] ; 0xa0 + 800e926: ea4f 2108 mov.w r1, r8, lsl #8 + 800e92a: eb03 2608 add.w r6, r3, r8, lsl #8 + if (cinfo->Ss && coef_bit_ptr[0] < 0) /* AC without prior DC scan */ + 800e92e: b172 cbz r2, 800e94e + 800e930: 585b ldr r3, [r3, r1] + 800e932: 2b00 cmp r3, #0 + 800e934: da0b bge.n 800e94e + WARNMS2(cinfo, JWRN_BOGUS_PROGRESSION, cindex, 0); + 800e936: f8da 3000 ldr.w r3, [sl] + 800e93a: 2276 movs r2, #118 ; 0x76 + 800e93c: f04f 31ff mov.w r1, #4294967295 + 800e940: 4650 mov r0, sl + 800e942: e9c3 2805 strd r2, r8, [r3, #20] + 800e946: 2200 movs r2, #0 + 800e948: 61da str r2, [r3, #28] + 800e94a: 685b ldr r3, [r3, #4] + 800e94c: 4798 blx r3 + for (coefi = cinfo->Ss; coefi <= cinfo->Se; coefi++) { + 800e94e: f8da 5198 ldr.w r5, [sl, #408] ; 0x198 + 800e952: eb06 0685 add.w r6, r6, r5, lsl #2 + 800e956: f8da 319c ldr.w r3, [sl, #412] ; 0x19c + 800e95a: 42ab cmp r3, r5 + 800e95c: da01 bge.n 800e962 + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + 800e95e: 3701 adds r7, #1 + 800e960: e7b4 b.n 800e8cc + int expected = (coef_bit_ptr[coefi] < 0) ? 0 : coef_bit_ptr[coefi]; + 800e962: 6833 ldr r3, [r6, #0] + if (cinfo->Ah != expected) + 800e964: f8da 21a0 ldr.w r2, [sl, #416] ; 0x1a0 + int expected = (coef_bit_ptr[coefi] < 0) ? 0 : coef_bit_ptr[coefi]; + 800e968: ea23 73e3 bic.w r3, r3, r3, asr #31 + if (cinfo->Ah != expected) + 800e96c: 429a cmp r2, r3 + 800e96e: d00a beq.n 800e986 + WARNMS2(cinfo, JWRN_BOGUS_PROGRESSION, cindex, coefi); + 800e970: f8da 3000 ldr.w r3, [sl] + 800e974: 2276 movs r2, #118 ; 0x76 + 800e976: f04f 31ff mov.w r1, #4294967295 + 800e97a: 4650 mov r0, sl + 800e97c: 61dd str r5, [r3, #28] + 800e97e: e9c3 2805 strd r2, r8, [r3, #20] + 800e982: 685b ldr r3, [r3, #4] + 800e984: 4798 blx r3 + coef_bit_ptr[coefi] = cinfo->Al; + 800e986: f8da 31a4 ldr.w r3, [sl, #420] ; 0x1a4 + for (coefi = cinfo->Ss; coefi <= cinfo->Se; coefi++) { + 800e98a: 3501 adds r5, #1 + coef_bit_ptr[coefi] = cinfo->Al; + 800e98c: f846 3b04 str.w r3, [r6], #4 + for (coefi = cinfo->Ss; coefi <= cinfo->Se; coefi++) { + 800e990: e7e1 b.n 800e956 + if (cinfo->Ss == 0) + 800e992: 4b91 ldr r3, [pc, #580] ; (800ebd8 ) + 800e994: 4991 ldr r1, [pc, #580] ; (800ebdc ) + 800e996: e7a5 b.n 800e8e4 + if (cinfo->Ss == 0) { + 800e998: f8da 2198 ldr.w r2, [sl, #408] ; 0x198 + compptr = cinfo->cur_comp_info[ci]; + 800e99c: f854 3f04 ldr.w r3, [r4, #4]! + if (cinfo->Ss == 0) { + 800e9a0: b97a cbnz r2, 800e9c2 + if (cinfo->Ah == 0) { /* DC refinement needs no table */ + 800e9a2: f8da 21a0 ldr.w r2, [sl, #416] ; 0x1a0 + 800e9a6: b942 cbnz r2, 800e9ba + tbl = compptr->dc_tbl_no; + 800e9a8: 695a ldr r2, [r3, #20] + jpeg_make_d_derived_tbl(cinfo, TRUE, tbl, + 800e9aa: 2101 movs r1, #1 + 800e9ac: 4650 mov r0, sl + 800e9ae: f102 030b add.w r3, r2, #11 + 800e9b2: eb0b 0383 add.w r3, fp, r3, lsl #2 + 800e9b6: f7ff fe6b bl 800e690 + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + 800e9ba: 3601 adds r6, #1 + entropy->saved.last_dc_val[ci] = 0; + 800e9bc: f847 8f04 str.w r8, [r7, #4]! + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + 800e9c0: e799 b.n 800e8f6 + tbl = compptr->ac_tbl_no; + 800e9c2: 699d ldr r5, [r3, #24] + jpeg_make_d_derived_tbl(cinfo, FALSE, tbl, + 800e9c4: 2100 movs r1, #0 + 800e9c6: 4650 mov r0, sl + 800e9c8: f105 030b add.w r3, r5, #11 + 800e9cc: 462a mov r2, r5 + entropy->ac_derived_tbl = entropy->derived_tbls[tbl]; + 800e9ce: eb0b 0585 add.w r5, fp, r5, lsl #2 + jpeg_make_d_derived_tbl(cinfo, FALSE, tbl, + 800e9d2: eb0b 0383 add.w r3, fp, r3, lsl #2 + 800e9d6: f7ff fe5b bl 800e690 + entropy->ac_derived_tbl = entropy->derived_tbls[tbl]; + 800e9da: 6aeb ldr r3, [r5, #44] ; 0x2c + 800e9dc: f8cb 303c str.w r3, [fp, #60] ; 0x3c + 800e9e0: e7eb b.n 800e9ba + if (cinfo->Ss != 0 || cinfo->Ah != 0 || cinfo->Al != 0 || + 800e9e2: b982 cbnz r2, 800ea06 + 800e9e4: f8d0 31a0 ldr.w r3, [r0, #416] ; 0x1a0 + 800e9e8: b96b cbnz r3, 800ea06 + 800e9ea: f8d0 31a4 ldr.w r3, [r0, #420] ; 0x1a4 + 800e9ee: b953 cbnz r3, 800ea06 + 800e9f0: f8d0 20dc ldr.w r2, [r0, #220] ; 0xdc + if (cinfo->Se != 0) + 800e9f4: f8d0 319c ldr.w r3, [r0, #412] ; 0x19c + if (cinfo->Ss != 0 || cinfo->Ah != 0 || cinfo->Al != 0 || + 800e9f8: b90a cbnz r2, 800e9fe + ((cinfo->is_baseline || cinfo->Se < DCTSIZE2) && + 800e9fa: 2b3f cmp r3, #63 ; 0x3f + 800e9fc: dc0c bgt.n 800ea18 + 800e9fe: f8da 21b0 ldr.w r2, [sl, #432] ; 0x1b0 + 800ea02: 429a cmp r2, r3 + 800ea04: d008 beq.n 800ea18 + WARNMS(cinfo, JWRN_NOT_SEQUENTIAL); + 800ea06: f8da 3000 ldr.w r3, [sl] + 800ea0a: 227d movs r2, #125 ; 0x7d + 800ea0c: f04f 31ff mov.w r1, #4294967295 + 800ea10: 4650 mov r0, sl + 800ea12: 615a str r2, [r3, #20] + 800ea14: 685b ldr r3, [r3, #4] + 800ea16: 4798 blx r3 + if (cinfo->lim_Se != DCTSIZE2-1) + 800ea18: f8da 11b0 ldr.w r1, [sl, #432] ; 0x1b0 + entropy->pub.decode_mcu = decode_mcu; + 800ea1c: 2600 movs r6, #0 + 800ea1e: 4b70 ldr r3, [pc, #448] ; (800ebe0 ) + 800ea20: f10b 0710 add.w r7, fp, #16 + 800ea24: 4a6f ldr r2, [pc, #444] ; (800ebe4 ) + jpeg_make_d_derived_tbl(cinfo, FALSE, tbl, + 800ea26: 46b0 mov r8, r6 + entropy->pub.decode_mcu = decode_mcu; + 800ea28: 293f cmp r1, #63 ; 0x3f + 800ea2a: bf08 it eq + 800ea2c: 4613 moveq r3, r2 + 800ea2e: f8cb 3004 str.w r3, [fp, #4] + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + 800ea32: f8da 3150 ldr.w r3, [sl, #336] ; 0x150 + 800ea36: 42b3 cmp r3, r6 + 800ea38: dc3d bgt.n 800eab6 + for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { + 800ea3a: f8da 016c ldr.w r0, [sl, #364] ; 0x16c + 800ea3e: f10b 045c add.w r4, fp, #92 ; 0x5c + 800ea42: f50a 76b6 add.w r6, sl, #364 ; 0x16c + 800ea46: f04f 0c06 mov.w ip, #6 + entropy->coef_limit[blkn] = 1 + jpeg_zigzag_order7[ci - 1][i - 1]; + 800ea4a: 4f67 ldr r7, [pc, #412] ; (800ebe8 ) + entropy->coef_limit[blkn] = 1 + jpeg_zigzag_order3[ci - 1][i - 1]; + 800ea4c: f8df 81b0 ldr.w r8, [pc, #432] ; 800ec00 + for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { + 800ea50: 42a8 cmp r0, r5 + 800ea52: f77f af57 ble.w 800e904 + compptr = cinfo->cur_comp_info[ci]; + 800ea56: f856 3f04 ldr.w r3, [r6, #4]! + 800ea5a: eb0a 0383 add.w r3, sl, r3, lsl #2 + 800ea5e: f8d3 2154 ldr.w r2, [r3, #340] ; 0x154 + entropy->dc_cur_tbls[blkn] = entropy->dc_derived_tbls[compptr->dc_tbl_no]; + 800ea62: 6953 ldr r3, [r2, #20] + 800ea64: 3310 adds r3, #16 + 800ea66: f85b 3023 ldr.w r3, [fp, r3, lsl #2] + 800ea6a: f844 3f04 str.w r3, [r4, #4]! + entropy->ac_cur_tbls[blkn] = entropy->ac_derived_tbls[compptr->ac_tbl_no]; + 800ea6e: 6993 ldr r3, [r2, #24] + 800ea70: 3314 adds r3, #20 + 800ea72: f85b 3023 ldr.w r3, [fp, r3, lsl #2] + 800ea76: 62a3 str r3, [r4, #40] ; 0x28 + if (compptr->component_needed) { + 800ea78: 6b53 ldr r3, [r2, #52] ; 0x34 + 800ea7a: 2b00 cmp r3, #0 + 800ea7c: d076 beq.n 800eb6c + switch (cinfo->lim_Se) { + 800ea7e: f8da 11b0 ldr.w r1, [sl, #432] ; 0x1b0 + 800ea82: 290f cmp r1, #15 + i = compptr->DCT_h_scaled_size; + 800ea84: e9d2 2309 ldrd r2, r3, [r2, #36] ; 0x24 + switch (cinfo->lim_Se) { + 800ea88: d073 beq.n 800eb72 + 800ea8a: dc31 bgt.n 800eaf0 + 800ea8c: 2903 cmp r1, #3 + 800ea8e: d04b beq.n 800eb28 + 800ea90: 2908 cmp r1, #8 + 800ea92: d059 beq.n 800eb48 + 800ea94: 2900 cmp r1, #0 + 800ea96: f000 8099 beq.w 800ebcc + if (ci <= 0 || ci > 8) ci = 8; + 800ea9a: 1e59 subs r1, r3, #1 + 800ea9c: 2908 cmp r1, #8 + if (i <= 0 || i > 8) i = 8; + 800ea9e: f102 31ff add.w r1, r2, #4294967295 + if (ci <= 0 || ci > 8) ci = 8; + 800eaa2: bf28 it cs + 800eaa4: 2308 movcs r3, #8 + if (i <= 0 || i > 8) i = 8; + 800eaa6: 2908 cmp r1, #8 + 800eaa8: bf28 it cs + 800eaaa: 2208 movcs r2, #8 + entropy->coef_limit[blkn] = 1 + jpeg_zigzag_order[ci - 1][i - 1]; + 800eaac: eb02 02c3 add.w r2, r2, r3, lsl #3 + 800eab0: 4b4e ldr r3, [pc, #312] ; (800ebec ) + 800eab2: 3a09 subs r2, #9 + 800eab4: e045 b.n 800eb42 + compptr = cinfo->cur_comp_info[ci]; + 800eab6: f854 9f04 ldr.w r9, [r4, #4]! + jpeg_make_d_derived_tbl(cinfo, TRUE, tbl, + 800eaba: 2101 movs r1, #1 + 800eabc: 4650 mov r0, sl + tbl = compptr->dc_tbl_no; + 800eabe: f8d9 2014 ldr.w r2, [r9, #20] + jpeg_make_d_derived_tbl(cinfo, TRUE, tbl, + 800eac2: f102 0310 add.w r3, r2, #16 + 800eac6: eb0b 0383 add.w r3, fp, r3, lsl #2 + 800eaca: f7ff fde1 bl 800e690 + if (cinfo->lim_Se) { /* AC needs no table when not present */ + 800eace: f8da 31b0 ldr.w r3, [sl, #432] ; 0x1b0 + 800ead2: b14b cbz r3, 800eae8 + tbl = compptr->ac_tbl_no; + 800ead4: f8d9 2018 ldr.w r2, [r9, #24] + jpeg_make_d_derived_tbl(cinfo, FALSE, tbl, + 800ead8: 2100 movs r1, #0 + 800eada: 4650 mov r0, sl + 800eadc: f102 0314 add.w r3, r2, #20 + 800eae0: eb0b 0383 add.w r3, fp, r3, lsl #2 + 800eae4: f7ff fdd4 bl 800e690 + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + 800eae8: 3601 adds r6, #1 + entropy->saved.last_dc_val[ci] = 0; + 800eaea: f847 8f04 str.w r8, [r7, #4]! + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + 800eaee: e7a0 b.n 800ea32 + switch (cinfo->lim_Se) { + 800eaf0: 2923 cmp r1, #35 ; 0x23 + 800eaf2: f103 3eff add.w lr, r3, #4294967295 + 800eaf6: f102 39ff add.w r9, r2, #4294967295 + 800eafa: d048 beq.n 800eb8e + 800eafc: 2930 cmp r1, #48 ; 0x30 + 800eafe: d054 beq.n 800ebaa + 800eb00: 2918 cmp r1, #24 + 800eb02: d1ca bne.n 800ea9a + if (ci <= 0 || ci > 5) ci = 5; + 800eb04: f1be 0f05 cmp.w lr, #5 + 800eb08: bf28 it cs + 800eb0a: 2305 movcs r3, #5 + if (i <= 0 || i > 5) i = 5; + 800eb0c: f1b9 0f05 cmp.w r9, #5 + entropy->coef_limit[blkn] = 1 + jpeg_zigzag_order5[ci - 1][i - 1]; + 800eb10: f103 33ff add.w r3, r3, #4294967295 + if (i <= 0 || i > 5) i = 5; + 800eb14: bf28 it cs + 800eb16: 2205 movcs r2, #5 + entropy->coef_limit[blkn] = 1 + jpeg_zigzag_order5[ci - 1][i - 1]; + 800eb18: eb03 0383 add.w r3, r3, r3, lsl #2 + 800eb1c: 3a01 subs r2, #1 + 800eb1e: 4413 add r3, r2 + 800eb20: 4a33 ldr r2, [pc, #204] ; (800ebf0 ) + 800eb22: f852 3023 ldr.w r3, [r2, r3, lsl #2] + 800eb26: e020 b.n 800eb6a + if (ci <= 0 || ci > 2) ci = 2; + 800eb28: 1e59 subs r1, r3, #1 + 800eb2a: 2902 cmp r1, #2 + if (i <= 0 || i > 2) i = 2; + 800eb2c: f102 31ff add.w r1, r2, #4294967295 + if (ci <= 0 || ci > 2) ci = 2; + 800eb30: bf28 it cs + 800eb32: 2302 movcs r3, #2 + if (i <= 0 || i > 2) i = 2; + 800eb34: 2902 cmp r1, #2 + 800eb36: bf28 it cs + 800eb38: 2202 movcs r2, #2 + entropy->coef_limit[blkn] = 1 + jpeg_zigzag_order2[ci - 1][i - 1]; + 800eb3a: eb02 0243 add.w r2, r2, r3, lsl #1 + 800eb3e: 4b2d ldr r3, [pc, #180] ; (800ebf4 ) + 800eb40: 3a03 subs r2, #3 + entropy->coef_limit[blkn] = 1 + jpeg_zigzag_order[ci - 1][i - 1]; + 800eb42: f853 3022 ldr.w r3, [r3, r2, lsl #2] + 800eb46: e010 b.n 800eb6a + if (ci <= 0 || ci > 3) ci = 3; + 800eb48: 1e59 subs r1, r3, #1 + 800eb4a: 2903 cmp r1, #3 + if (i <= 0 || i > 3) i = 3; + 800eb4c: f102 31ff add.w r1, r2, #4294967295 + if (ci <= 0 || ci > 3) ci = 3; + 800eb50: bf28 it cs + 800eb52: 2303 movcs r3, #3 + if (i <= 0 || i > 3) i = 3; + 800eb54: 2903 cmp r1, #3 + entropy->coef_limit[blkn] = 1 + jpeg_zigzag_order3[ci - 1][i - 1]; + 800eb56: f103 33ff add.w r3, r3, #4294967295 + if (i <= 0 || i > 3) i = 3; + 800eb5a: bf28 it cs + 800eb5c: 2203 movcs r2, #3 + entropy->coef_limit[blkn] = 1 + jpeg_zigzag_order3[ci - 1][i - 1]; + 800eb5e: eb03 0343 add.w r3, r3, r3, lsl #1 + 800eb62: 3a01 subs r2, #1 + 800eb64: 4413 add r3, r2 + 800eb66: f858 3023 ldr.w r3, [r8, r3, lsl #2] + entropy->coef_limit[blkn] = 1 + jpeg_zigzag_order[ci - 1][i - 1]; + 800eb6a: 3301 adds r3, #1 + for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { + 800eb6c: 3501 adds r5, #1 + entropy->coef_limit[blkn] = 1 + jpeg_zigzag_order2[ci - 1][i - 1]; + 800eb6e: 6523 str r3, [r4, #80] ; 0x50 + for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { + 800eb70: e76e b.n 800ea50 + if (ci <= 0 || ci > 4) ci = 4; + 800eb72: 1e59 subs r1, r3, #1 + 800eb74: 2904 cmp r1, #4 + if (i <= 0 || i > 4) i = 4; + 800eb76: f102 31ff add.w r1, r2, #4294967295 + if (ci <= 0 || ci > 4) ci = 4; + 800eb7a: bf28 it cs + 800eb7c: 2304 movcs r3, #4 + if (i <= 0 || i > 4) i = 4; + 800eb7e: 2904 cmp r1, #4 + 800eb80: bf28 it cs + 800eb82: 2204 movcs r2, #4 + entropy->coef_limit[blkn] = 1 + jpeg_zigzag_order4[ci - 1][i - 1]; + 800eb84: eb02 0283 add.w r2, r2, r3, lsl #2 + 800eb88: 4b1b ldr r3, [pc, #108] ; (800ebf8 ) + 800eb8a: 3a05 subs r2, #5 + 800eb8c: e7d9 b.n 800eb42 + if (ci <= 0 || ci > 6) ci = 6; + 800eb8e: f1be 0f06 cmp.w lr, #6 + 800eb92: bf28 it cs + 800eb94: 2306 movcs r3, #6 + if (i <= 0 || i > 6) i = 6; + 800eb96: f1b9 0f06 cmp.w r9, #6 + 800eb9a: bf28 it cs + 800eb9c: 2206 movcs r2, #6 + entropy->coef_limit[blkn] = 1 + jpeg_zigzag_order6[ci - 1][i - 1]; + 800eb9e: 3b01 subs r3, #1 + 800eba0: 3a01 subs r2, #1 + 800eba2: fb0c 2203 mla r2, ip, r3, r2 + 800eba6: 4b15 ldr r3, [pc, #84] ; (800ebfc ) + 800eba8: e7cb b.n 800eb42 + if (ci <= 0 || ci > 7) ci = 7; + 800ebaa: f1be 0f07 cmp.w lr, #7 + 800ebae: bf28 it cs + 800ebb0: 2307 movcs r3, #7 + if (i <= 0 || i > 7) i = 7; + 800ebb2: f1b9 0f07 cmp.w r9, #7 + entropy->coef_limit[blkn] = 1 + jpeg_zigzag_order7[ci - 1][i - 1]; + 800ebb6: f103 33ff add.w r3, r3, #4294967295 + if (i <= 0 || i > 7) i = 7; + 800ebba: bf28 it cs + 800ebbc: 2207 movcs r2, #7 + entropy->coef_limit[blkn] = 1 + jpeg_zigzag_order7[ci - 1][i - 1]; + 800ebbe: ebc3 03c3 rsb r3, r3, r3, lsl #3 + 800ebc2: 3a01 subs r2, #1 + 800ebc4: 4413 add r3, r2 + 800ebc6: f857 3023 ldr.w r3, [r7, r3, lsl #2] + 800ebca: e7ce b.n 800eb6a + switch (cinfo->lim_Se) { + 800ebcc: 2301 movs r3, #1 + 800ebce: e7cd b.n 800eb6c + 800ebd0: 0800dc51 .word 0x0800dc51 + 800ebd4: 0800dadd .word 0x0800dadd + 800ebd8: 0800de45 .word 0x0800de45 + 800ebdc: 0800ddb1 .word 0x0800ddb1 + 800ebe0: 0800e0bd .word 0x0800e0bd + 800ebe4: 0800e3ad .word 0x0800e3ad + 800ebe8: 08038230 .word 0x08038230 + 800ebec: 08037fc8 .word 0x08037fc8 + 800ebf0: 0803813c .word 0x0803813c + 800ebf4: 080380c8 .word 0x080380c8 + 800ebf8: 080380fc .word 0x080380fc + 800ebfc: 080381a0 .word 0x080381a0 + 800ec00: 080380d8 .word 0x080380d8 + +0800ec04 : + * Module initialization routine for Huffman entropy decoding. + */ + +GLOBAL(void) +jinit_huff_decoder (j_decompress_ptr cinfo) +{ + 800ec04: b5f8 push {r3, r4, r5, r6, r7, lr} + huff_entropy_ptr entropy; + int i; + + entropy = (huff_entropy_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 800ec06: 6843 ldr r3, [r0, #4] + 800ec08: 22d8 movs r2, #216 ; 0xd8 + 800ec0a: 2101 movs r1, #1 +{ + 800ec0c: 4605 mov r5, r0 + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 800ec0e: 681b ldr r3, [r3, #0] + 800ec10: 4798 blx r3 + SIZEOF(huff_entropy_decoder)); + cinfo->entropy = (struct jpeg_entropy_decoder *) entropy; + entropy->pub.start_pass = start_pass_huff_decoder; + 800ec12: 4b17 ldr r3, [pc, #92] ; (800ec70 ) + cinfo->entropy = (struct jpeg_entropy_decoder *) entropy; + 800ec14: f8c5 01d0 str.w r0, [r5, #464] ; 0x1d0 + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 800ec18: 4604 mov r4, r0 + entropy->pub.start_pass = start_pass_huff_decoder; + 800ec1a: 6003 str r3, [r0, #0] + + if (cinfo->progressive_mode) { + 800ec1c: f8d5 30e0 ldr.w r3, [r5, #224] ; 0xe0 + 800ec20: b943 cbnz r3, 800ec34 + entropy->derived_tbls[i] = NULL; + } + } else { + /* Mark tables unallocated */ + for (i = 0; i < NUM_HUFF_TBLS; i++) { + entropy->dc_derived_tbls[i] = entropy->ac_derived_tbls[i] = NULL; + 800ec22: 6503 str r3, [r0, #80] ; 0x50 + 800ec24: 6403 str r3, [r0, #64] ; 0x40 + 800ec26: 6543 str r3, [r0, #84] ; 0x54 + 800ec28: 6443 str r3, [r0, #68] ; 0x44 + 800ec2a: 6583 str r3, [r0, #88] ; 0x58 + 800ec2c: 6483 str r3, [r0, #72] ; 0x48 + 800ec2e: 65c3 str r3, [r0, #92] ; 0x5c + 800ec30: 64c3 str r3, [r0, #76] ; 0x4c + } + } +} + 800ec32: bdf8 pop {r3, r4, r5, r6, r7, pc} + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 800ec34: 6a6a ldr r2, [r5, #36] ; 0x24 + 800ec36: 2101 movs r1, #1 + 800ec38: 686b ldr r3, [r5, #4] + 800ec3a: 4628 mov r0, r5 + 800ec3c: 0212 lsls r2, r2, #8 + for (ci = 0; ci < cinfo->num_components; ci++) + 800ec3e: 2600 movs r6, #0 + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 800ec40: 681b ldr r3, [r3, #0] + 800ec42: 4798 blx r3 + 800ec44: 4607 mov r7, r0 + cinfo->coef_bits = (int (*)[DCTSIZE2]) + 800ec46: f8c5 00a0 str.w r0, [r5, #160] ; 0xa0 + for (ci = 0; ci < cinfo->num_components; ci++) + 800ec4a: 6a6b ldr r3, [r5, #36] ; 0x24 + 800ec4c: eb07 2006 add.w r0, r7, r6, lsl #8 + 800ec50: 42b3 cmp r3, r6 + 800ec52: dc05 bgt.n 800ec60 + entropy->derived_tbls[i] = NULL; + 800ec54: 2300 movs r3, #0 + 800ec56: e9c4 330b strd r3, r3, [r4, #44] ; 0x2c + 800ec5a: e9c4 330d strd r3, r3, [r4, #52] ; 0x34 +} + 800ec5e: e7e8 b.n 800ec32 + *coef_bit_ptr++ = -1; + 800ec60: f44f 7280 mov.w r2, #256 ; 0x100 + 800ec64: 21ff movs r1, #255 ; 0xff + for (ci = 0; ci < cinfo->num_components; ci++) + 800ec66: 3601 adds r6, #1 + *coef_bit_ptr++ = -1; + 800ec68: f025 fea8 bl 80349bc + for (ci = 0; ci < cinfo->num_components; ci++) + 800ec6c: e7ed b.n 800ec4a + 800ec6e: bf00 nop + 800ec70: 0800e869 .word 0x0800e869 + +0800ec74 : + */ + +METHODDEF(void) +finish_input_pass (j_decompress_ptr cinfo) +{ + cinfo->inputctl->consume_input = consume_markers; + 800ec74: f8d0 31c8 ldr.w r3, [r0, #456] ; 0x1c8 + 800ec78: 4a01 ldr r2, [pc, #4] ; (800ec80 ) + 800ec7a: 601a str r2, [r3, #0] +} + 800ec7c: 4770 bx lr + 800ec7e: bf00 nop + 800ec80: 0800ee3d .word 0x0800ee3d + +0800ec84 : + * Reset state to begin a fresh datastream. + */ + +METHODDEF(void) +reset_input_controller (j_decompress_ptr cinfo) +{ + 800ec84: b538 push {r3, r4, r5, lr} + my_inputctl_ptr inputctl = (my_inputctl_ptr) cinfo->inputctl; + + inputctl->pub.consume_input = consume_markers; + 800ec86: 4a0a ldr r2, [pc, #40] ; (800ecb0 ) + inputctl->pub.has_multiple_scans = FALSE; /* "unknown" would be better */ + 800ec88: 2500 movs r5, #0 + my_inputctl_ptr inputctl = (my_inputctl_ptr) cinfo->inputctl; + 800ec8a: f8d0 31c8 ldr.w r3, [r0, #456] ; 0x1c8 +{ + 800ec8e: 4604 mov r4, r0 + inputctl->pub.consume_input = consume_markers; + 800ec90: 601a str r2, [r3, #0] + inputctl->pub.eoi_reached = FALSE; + inputctl->inheaders = 1; + 800ec92: 2201 movs r2, #1 + inputctl->pub.eoi_reached = FALSE; + 800ec94: e9c3 5504 strd r5, r5, [r3, #16] + inputctl->inheaders = 1; + 800ec98: 619a str r2, [r3, #24] + /* Reset other modules */ + (*cinfo->err->reset_error_mgr) ((j_common_ptr) cinfo); + 800ec9a: 6803 ldr r3, [r0, #0] + 800ec9c: 691b ldr r3, [r3, #16] + 800ec9e: 4798 blx r3 + (*cinfo->marker->reset_marker_reader) (cinfo); + 800eca0: f8d4 31cc ldr.w r3, [r4, #460] ; 0x1cc + 800eca4: 4620 mov r0, r4 + 800eca6: 681b ldr r3, [r3, #0] + 800eca8: 4798 blx r3 + /* Reset progression state -- would be cleaner if entropy decoder did this */ + cinfo->coef_bits = NULL; + 800ecaa: f8c4 50a0 str.w r5, [r4, #160] ; 0xa0 +} + 800ecae: bd38 pop {r3, r4, r5, pc} + 800ecb0: 0800ee3d .word 0x0800ee3d + +0800ecb4 : + if (cinfo->comps_in_scan == 1) { + 800ecb4: f8d0 2150 ldr.w r2, [r0, #336] ; 0x150 + 800ecb8: 2a01 cmp r2, #1 +{ + 800ecba: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} + 800ecbe: 4604 mov r4, r0 + 800ecc0: f500 76a8 add.w r6, r0, #336 ; 0x150 + if (cinfo->comps_in_scan == 1) { + 800ecc4: d135 bne.n 800ed32 + compptr = cinfo->cur_comp_info[0]; + 800ecc6: f8d0 3154 ldr.w r3, [r0, #340] ; 0x154 + cinfo->MCUs_per_row = compptr->width_in_blocks; + 800ecca: 69d9 ldr r1, [r3, #28] + 800eccc: f8c0 1164 str.w r1, [r0, #356] ; 0x164 + cinfo->MCU_rows_in_scan = compptr->height_in_blocks; + 800ecd0: 6a19 ldr r1, [r3, #32] + 800ecd2: f8c0 1168 str.w r1, [r0, #360] ; 0x168 + compptr->MCU_sample_width = compptr->DCT_h_scaled_size; + 800ecd6: 6a58 ldr r0, [r3, #36] ; 0x24 + compptr->MCU_blocks = 1; + 800ecd8: 641a str r2, [r3, #64] ; 0x40 + compptr->last_col_width = 1; + 800ecda: e9c3 0211 strd r0, r2, [r3, #68] ; 0x44 + tmp = (int) (compptr->height_in_blocks % compptr->v_samp_factor); + 800ecde: 68d8 ldr r0, [r3, #12] + 800ece0: fbb1 f5f0 udiv r5, r1, r0 + 800ece4: fb00 1115 mls r1, r0, r5, r1 + if (tmp == 0) tmp = compptr->v_samp_factor; + 800ece8: 2900 cmp r1, #0 + 800ecea: bf08 it eq + 800ecec: 4601 moveq r1, r0 + compptr->MCU_height = 1; + 800ecee: e9c3 220e strd r2, r2, [r3, #56] ; 0x38 + compptr->last_row_height = tmp; + 800ecf2: 64d9 str r1, [r3, #76] ; 0x4c + cinfo->MCU_membership[0] = 0; + 800ecf4: 2300 movs r3, #0 + cinfo->blocks_in_MCU = 1; + 800ecf6: f8c4 216c str.w r2, [r4, #364] ; 0x16c + cinfo->MCU_membership[0] = 0; + 800ecfa: f8c4 3170 str.w r3, [r4, #368] ; 0x170 + 800ecfe: 46b1 mov r9, r6 + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + 800ed00: 2700 movs r7, #0 + ERREXIT1(cinfo, JERR_NO_QUANT_TABLE, qtblno); + 800ed02: f04f 0a36 mov.w sl, #54 ; 0x36 + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + 800ed06: f8d4 3150 ldr.w r3, [r4, #336] ; 0x150 + 800ed0a: 429f cmp r7, r3 + 800ed0c: db71 blt.n 800edf2 + (*cinfo->entropy->start_pass) (cinfo); + 800ed0e: f8d4 31d0 ldr.w r3, [r4, #464] ; 0x1d0 + 800ed12: 4620 mov r0, r4 + 800ed14: 681b ldr r3, [r3, #0] + 800ed16: 4798 blx r3 + (*cinfo->coef->start_input_pass) (cinfo); + 800ed18: f8d4 31c0 ldr.w r3, [r4, #448] ; 0x1c0 + 800ed1c: 4620 mov r0, r4 + 800ed1e: 681b ldr r3, [r3, #0] + 800ed20: 4798 blx r3 + cinfo->inputctl->consume_input = cinfo->coef->consume_data; + 800ed22: f8d4 21c0 ldr.w r2, [r4, #448] ; 0x1c0 + 800ed26: f8d4 31c8 ldr.w r3, [r4, #456] ; 0x1c8 + 800ed2a: 6852 ldr r2, [r2, #4] + 800ed2c: 601a str r2, [r3, #0] +} + 800ed2e: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + if (cinfo->comps_in_scan <= 0 || cinfo->comps_in_scan > MAX_COMPS_IN_SCAN) + 800ed32: 1e53 subs r3, r2, #1 + 800ed34: 2b03 cmp r3, #3 + 800ed36: d907 bls.n 800ed48 + ERREXIT2(cinfo, JERR_COMPONENT_COUNT, cinfo->comps_in_scan, + 800ed38: 6803 ldr r3, [r0, #0] + 800ed3a: 211b movs r1, #27 + 800ed3c: e9c3 1205 strd r1, r2, [r3, #20] + 800ed40: 2204 movs r2, #4 + 800ed42: 61da str r2, [r3, #28] + 800ed44: 681b ldr r3, [r3, #0] + 800ed46: 4798 blx r3 + (long) (cinfo->max_h_samp_factor * cinfo->block_size)); + 800ed48: f8d4 3138 ldr.w r3, [r4, #312] ; 0x138 + cinfo->blocks_in_MCU = 0; + 800ed4c: 2500 movs r5, #0 + (long) (cinfo->max_h_samp_factor * cinfo->block_size)); + 800ed4e: f8d4 11a8 ldr.w r1, [r4, #424] ; 0x1a8 + 800ed52: 46b0 mov r8, r6 + jdiv_round_up((long) cinfo->image_width, + 800ed54: 69e0 ldr r0, [r4, #28] + ERREXIT(cinfo, JERR_BAD_MCU_SIZE); + 800ed56: f04f 090e mov.w r9, #14 + jdiv_round_up((long) cinfo->image_width, + 800ed5a: 4359 muls r1, r3 + 800ed5c: f009 fd9a bl 8018894 + (long) (cinfo->max_v_samp_factor * cinfo->block_size)); + 800ed60: f8d4 313c ldr.w r3, [r4, #316] ; 0x13c + 800ed64: f8d4 11a8 ldr.w r1, [r4, #424] ; 0x1a8 + cinfo->MCUs_per_row = (JDIMENSION) + 800ed68: f8c4 0164 str.w r0, [r4, #356] ; 0x164 + jdiv_round_up((long) cinfo->image_height, + 800ed6c: 4359 muls r1, r3 + 800ed6e: 6a20 ldr r0, [r4, #32] + 800ed70: f009 fd90 bl 8018894 + cinfo->blocks_in_MCU = 0; + 800ed74: f8c4 516c str.w r5, [r4, #364] ; 0x16c + cinfo->MCU_rows_in_scan = (JDIMENSION) + 800ed78: f8c4 0168 str.w r0, [r4, #360] ; 0x168 + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + 800ed7c: f8d4 3150 ldr.w r3, [r4, #336] ; 0x150 + 800ed80: 429d cmp r5, r3 + 800ed82: dabc bge.n 800ecfe + compptr = cinfo->cur_comp_info[ci]; + 800ed84: f858 3f04 ldr.w r3, [r8, #4]! + compptr->MCU_width = compptr->h_samp_factor; + 800ed88: 6899 ldr r1, [r3, #8] + compptr->MCU_sample_width = compptr->MCU_width * compptr->DCT_h_scaled_size; + 800ed8a: 6a5a ldr r2, [r3, #36] ; 0x24 + compptr->MCU_height = compptr->v_samp_factor; + 800ed8c: 68d8 ldr r0, [r3, #12] + compptr->MCU_sample_width = compptr->MCU_width * compptr->DCT_h_scaled_size; + 800ed8e: 434a muls r2, r1 + compptr->MCU_blocks = compptr->MCU_width * compptr->MCU_height; + 800ed90: fb00 f701 mul.w r7, r0, r1 + compptr->MCU_sample_width = compptr->MCU_width * compptr->DCT_h_scaled_size; + 800ed94: 645a str r2, [r3, #68] ; 0x44 + tmp = (int) (compptr->width_in_blocks % compptr->MCU_width); + 800ed96: 69da ldr r2, [r3, #28] + compptr->MCU_width = compptr->h_samp_factor; + 800ed98: 6399 str r1, [r3, #56] ; 0x38 + compptr->MCU_height = compptr->v_samp_factor; + 800ed9a: 63d8 str r0, [r3, #60] ; 0x3c + compptr->MCU_blocks = compptr->MCU_width * compptr->MCU_height; + 800ed9c: 641f str r7, [r3, #64] ; 0x40 + tmp = (int) (compptr->width_in_blocks % compptr->MCU_width); + 800ed9e: fbb2 fcf1 udiv ip, r2, r1 + 800eda2: fb01 221c mls r2, r1, ip, r2 + if (tmp == 0) tmp = compptr->MCU_width; + 800eda6: 2a00 cmp r2, #0 + 800eda8: bf08 it eq + 800edaa: 460a moveq r2, r1 + compptr->last_col_width = tmp; + 800edac: 649a str r2, [r3, #72] ; 0x48 + tmp = (int) (compptr->height_in_blocks % compptr->MCU_height); + 800edae: 6a1a ldr r2, [r3, #32] + 800edb0: fbb2 f1f0 udiv r1, r2, r0 + 800edb4: fb00 2211 mls r2, r0, r1, r2 + if (tmp == 0) tmp = compptr->MCU_height; + 800edb8: 2a00 cmp r2, #0 + 800edba: bf08 it eq + 800edbc: 4602 moveq r2, r0 + compptr->last_row_height = tmp; + 800edbe: 64da str r2, [r3, #76] ; 0x4c + if (cinfo->blocks_in_MCU + mcublks > D_MAX_BLOCKS_IN_MCU) + 800edc0: f8d4 316c ldr.w r3, [r4, #364] ; 0x16c + 800edc4: 443b add r3, r7 + 800edc6: 2b0a cmp r3, #10 + 800edc8: dd05 ble.n 800edd6 + ERREXIT(cinfo, JERR_BAD_MCU_SIZE); + 800edca: 6823 ldr r3, [r4, #0] + 800edcc: 4620 mov r0, r4 + 800edce: f8c3 9014 str.w r9, [r3, #20] + 800edd2: 681b ldr r3, [r3, #0] + 800edd4: 4798 blx r3 + while (mcublks-- > 0) { + 800edd6: 2f00 cmp r7, #0 + 800edd8: dc01 bgt.n 800edde + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + 800edda: 3501 adds r5, #1 + 800eddc: e7ce b.n 800ed7c + cinfo->MCU_membership[cinfo->blocks_in_MCU++] = ci; + 800edde: f8d4 316c ldr.w r3, [r4, #364] ; 0x16c + 800ede2: 3f01 subs r7, #1 + 800ede4: 1c5a adds r2, r3, #1 + 800ede6: 335c adds r3, #92 ; 0x5c + 800ede8: f8c4 216c str.w r2, [r4, #364] ; 0x16c + 800edec: f844 5023 str.w r5, [r4, r3, lsl #2] + 800edf0: e7f1 b.n 800edd6 + compptr = cinfo->cur_comp_info[ci]; + 800edf2: f859 6f04 ldr.w r6, [r9, #4]! + if (compptr->quant_table != NULL) + 800edf6: 6d33 ldr r3, [r6, #80] ; 0x50 + 800edf8: b9eb cbnz r3, 800ee36 + qtblno = compptr->quant_tbl_no; + 800edfa: 6932 ldr r2, [r6, #16] + if (qtblno < 0 || qtblno >= NUM_QUANT_TBLS || + 800edfc: 2a03 cmp r2, #3 + 800edfe: f102 0528 add.w r5, r2, #40 ; 0x28 + 800ee02: d803 bhi.n 800ee0c + cinfo->quant_tbl_ptrs[qtblno] == NULL) + 800ee04: eb04 0385 add.w r3, r4, r5, lsl #2 + if (qtblno < 0 || qtblno >= NUM_QUANT_TBLS || + 800ee08: 685b ldr r3, [r3, #4] + 800ee0a: b92b cbnz r3, 800ee18 + ERREXIT1(cinfo, JERR_NO_QUANT_TABLE, qtblno); + 800ee0c: 6823 ldr r3, [r4, #0] + 800ee0e: 4620 mov r0, r4 + 800ee10: e9c3 a205 strd sl, r2, [r3, #20] + 800ee14: 681b ldr r3, [r3, #0] + 800ee16: 4798 blx r3 + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 800ee18: 6863 ldr r3, [r4, #4] + 800ee1a: 2284 movs r2, #132 ; 0x84 + 800ee1c: 2101 movs r1, #1 + 800ee1e: 4620 mov r0, r4 + 800ee20: 681b ldr r3, [r3, #0] + MEMCOPY(qtbl, cinfo->quant_tbl_ptrs[qtblno], SIZEOF(JQUANT_TBL)); + 800ee22: eb04 0585 add.w r5, r4, r5, lsl #2 + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 800ee26: 4798 blx r3 + 800ee28: 4680 mov r8, r0 + MEMCOPY(qtbl, cinfo->quant_tbl_ptrs[qtblno], SIZEOF(JQUANT_TBL)); + 800ee2a: 2284 movs r2, #132 ; 0x84 + 800ee2c: 6869 ldr r1, [r5, #4] + 800ee2e: f025 fea0 bl 8034b72 + compptr->quant_table = qtbl; + 800ee32: f8c6 8050 str.w r8, [r6, #80] ; 0x50 + for (ci = 0; ci < cinfo->comps_in_scan; ci++) { + 800ee36: 3701 adds r7, #1 + 800ee38: e765 b.n 800ed06 + ... + +0800ee3c : +{ + 800ee3c: e92d 4ff8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} + my_inputctl_ptr inputctl = (my_inputctl_ptr) cinfo->inputctl; + 800ee40: f8d0 61c8 ldr.w r6, [r0, #456] ; 0x1c8 +{ + 800ee44: 4604 mov r4, r0 + if (inputctl->pub.eoi_reached) /* After hitting EOI, read no further */ + 800ee46: 6973 ldr r3, [r6, #20] + 800ee48: b9eb cbnz r3, 800ee86 + cinfo->max_h_samp_factor = 1; + 800ee4a: f04f 0901 mov.w r9, #1 + cinfo->natural_order = jpeg_natural_order; + 800ee4e: 4db0 ldr r5, [pc, #704] ; (800f110 ) + val = (*cinfo->marker->read_markers) (cinfo); + 800ee50: f8d4 31cc ldr.w r3, [r4, #460] ; 0x1cc + 800ee54: 4620 mov r0, r4 + 800ee56: 685b ldr r3, [r3, #4] + 800ee58: 4798 blx r3 + switch (val) { + 800ee5a: 2801 cmp r0, #1 + val = (*cinfo->marker->read_markers) (cinfo); + 800ee5c: 4607 mov r7, r0 + switch (val) { + 800ee5e: d016 beq.n 800ee8e + 800ee60: 2802 cmp r0, #2 + 800ee62: d111 bne.n 800ee88 + inputctl->pub.eoi_reached = TRUE; + 800ee64: 2301 movs r3, #1 + 800ee66: 6173 str r3, [r6, #20] + if (inputctl->inheaders) { /* Tables-only datastream, apparently */ + 800ee68: 69b3 ldr r3, [r6, #24] + 800ee6a: 2b00 cmp r3, #0 + 800ee6c: f000 8174 beq.w 800f158 + if (cinfo->marker->saw_SOF) + 800ee70: f8d4 31cc ldr.w r3, [r4, #460] ; 0x1cc + 800ee74: 691b ldr r3, [r3, #16] + 800ee76: b133 cbz r3, 800ee86 + ERREXIT(cinfo, JERR_SOF_NO_SOS); + 800ee78: 6823 ldr r3, [r4, #0] + 800ee7a: 223d movs r2, #61 ; 0x3d + 800ee7c: 4620 mov r0, r4 + 800ee7e: 615a str r2, [r3, #20] + 800ee80: 681b ldr r3, [r3, #0] + 800ee82: 4798 blx r3 + 800ee84: e000 b.n 800ee88 + return JPEG_REACHED_EOI; + 800ee86: 2702 movs r7, #2 +} + 800ee88: 4638 mov r0, r7 + 800ee8a: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} + if (inputctl->inheaders) { /* 1st SOS */ + 800ee8e: 69b3 ldr r3, [r6, #24] + 800ee90: 2b00 cmp r3, #0 + 800ee92: f000 8150 beq.w 800f136 + if (inputctl->inheaders == 1) + 800ee96: 2b01 cmp r3, #1 + 800ee98: f040 80d8 bne.w 800f04c + if ((long) cinfo->image_height > (long) JPEG_MAX_DIMENSION || + 800ee9c: 6a22 ldr r2, [r4, #32] + 800ee9e: f64f 73dc movw r3, #65500 ; 0xffdc + 800eea2: 429a cmp r2, r3 + 800eea4: dc02 bgt.n 800eeac + 800eea6: 69e2 ldr r2, [r4, #28] + 800eea8: 429a cmp r2, r3 + 800eeaa: dd08 ble.n 800eebe + ERREXIT1(cinfo, JERR_IMAGE_TOO_BIG, (unsigned int) JPEG_MAX_DIMENSION); + 800eeac: 6823 ldr r3, [r4, #0] + 800eeae: 212a movs r1, #42 ; 0x2a + 800eeb0: f64f 72dc movw r2, #65500 ; 0xffdc + 800eeb4: 4620 mov r0, r4 + 800eeb6: e9c3 1205 strd r1, r2, [r3, #20] + 800eeba: 681b ldr r3, [r3, #0] + 800eebc: 4798 blx r3 + if (cinfo->data_precision != BITS_IN_JSAMPLE) + 800eebe: f8d4 20d4 ldr.w r2, [r4, #212] ; 0xd4 + 800eec2: 2a08 cmp r2, #8 + 800eec4: d006 beq.n 800eed4 + ERREXIT1(cinfo, JERR_BAD_PRECISION, cinfo->data_precision); + 800eec6: 6823 ldr r3, [r4, #0] + 800eec8: 2110 movs r1, #16 + 800eeca: 4620 mov r0, r4 + 800eecc: e9c3 1205 strd r1, r2, [r3, #20] + 800eed0: 681b ldr r3, [r3, #0] + 800eed2: 4798 blx r3 + if (cinfo->num_components > MAX_COMPONENTS) + 800eed4: 6a62 ldr r2, [r4, #36] ; 0x24 + 800eed6: 2a0a cmp r2, #10 + 800eed8: dd08 ble.n 800eeec + ERREXIT2(cinfo, JERR_COMPONENT_COUNT, cinfo->num_components, + 800eeda: 6823 ldr r3, [r4, #0] + 800eedc: 211b movs r1, #27 + 800eede: 4620 mov r0, r4 + 800eee0: e9c3 1205 strd r1, r2, [r3, #20] + 800eee4: 220a movs r2, #10 + 800eee6: 61da str r2, [r3, #28] + 800eee8: 681b ldr r3, [r3, #0] + 800eeea: 4798 blx r3 + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + 800eeec: f8d4 80d8 ldr.w r8, [r4, #216] ; 0xd8 + 800eef0: f04f 0a00 mov.w sl, #0 + ERREXIT(cinfo, JERR_BAD_SAMPLING); + 800eef4: f04f 0b13 mov.w fp, #19 + cinfo->max_v_samp_factor = 1; + 800eef8: e9c4 994e strd r9, r9, [r4, #312] ; 0x138 + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + 800eefc: 6a63 ldr r3, [r4, #36] ; 0x24 + 800eefe: 459a cmp sl, r3 + 800ef00: db0d blt.n 800ef1e + if (cinfo->is_baseline || (cinfo->progressive_mode && + 800ef02: f8d4 30dc ldr.w r3, [r4, #220] ; 0xdc + 800ef06: b92b cbnz r3, 800ef14 + 800ef08: f8d4 30e0 ldr.w r3, [r4, #224] ; 0xe0 + 800ef0c: b383 cbz r3, 800ef70 + 800ef0e: f8d4 3150 ldr.w r3, [r4, #336] ; 0x150 + 800ef12: b36b cbz r3, 800ef70 + cinfo->block_size = DCTSIZE; + 800ef14: 2308 movs r3, #8 + cinfo->natural_order = jpeg_natural_order; + 800ef16: e9c4 356a strd r3, r5, [r4, #424] ; 0x1a8 + cinfo->lim_Se = DCTSIZE2-1; + 800ef1a: 233f movs r3, #63 ; 0x3f + 800ef1c: e071 b.n 800f002 + if (compptr->h_samp_factor<=0 || compptr->h_samp_factor>MAX_SAMP_FACTOR || + 800ef1e: f8d8 3008 ldr.w r3, [r8, #8] + 800ef22: 3b01 subs r3, #1 + 800ef24: 2b03 cmp r3, #3 + 800ef26: d804 bhi.n 800ef32 + 800ef28: f8d8 300c ldr.w r3, [r8, #12] + 800ef2c: 3b01 subs r3, #1 + 800ef2e: 2b03 cmp r3, #3 + 800ef30: d905 bls.n 800ef3e + ERREXIT(cinfo, JERR_BAD_SAMPLING); + 800ef32: 6823 ldr r3, [r4, #0] + 800ef34: 4620 mov r0, r4 + 800ef36: f8c3 b014 str.w fp, [r3, #20] + 800ef3a: 681b ldr r3, [r3, #0] + 800ef3c: 4798 blx r3 + cinfo->max_h_samp_factor = MAX(cinfo->max_h_samp_factor, + 800ef3e: f8d8 3008 ldr.w r3, [r8, #8] + ci++, compptr++) { + 800ef42: f10a 0a01 add.w sl, sl, #1 + cinfo->max_h_samp_factor = MAX(cinfo->max_h_samp_factor, + 800ef46: f8d4 2138 ldr.w r2, [r4, #312] ; 0x138 + ci++, compptr++) { + 800ef4a: f108 0858 add.w r8, r8, #88 ; 0x58 + cinfo->max_h_samp_factor = MAX(cinfo->max_h_samp_factor, + 800ef4e: 429a cmp r2, r3 + 800ef50: bfac ite ge + 800ef52: f8c4 2138 strge.w r2, [r4, #312] ; 0x138 + 800ef56: f8c4 3138 strlt.w r3, [r4, #312] ; 0x138 + cinfo->max_v_samp_factor = MAX(cinfo->max_v_samp_factor, + 800ef5a: f8d4 213c ldr.w r2, [r4, #316] ; 0x13c + 800ef5e: f858 3c4c ldr.w r3, [r8, #-76] + 800ef62: 429a cmp r2, r3 + 800ef64: bfac ite ge + 800ef66: f8c4 213c strge.w r2, [r4, #316] ; 0x13c + 800ef6a: f8c4 313c strlt.w r3, [r4, #316] ; 0x13c + ci++, compptr++) { + 800ef6e: e7c5 b.n 800eefc + switch (cinfo->Se) { + 800ef70: f8d4 319c ldr.w r3, [r4, #412] ; 0x19c + 800ef74: 2b50 cmp r3, #80 ; 0x50 + 800ef76: f000 808a beq.w 800f08e + 800ef7a: dc2b bgt.n 800efd4 + 800ef7c: 2b18 cmp r3, #24 + 800ef7e: d078 beq.n 800f072 + 800ef80: dc1d bgt.n 800efbe + 800ef82: 2b08 cmp r3, #8 + 800ef84: d070 beq.n 800f068 + 800ef86: dc13 bgt.n 800efb0 + 800ef88: b3bb cbz r3, 800effa + 800ef8a: 2b03 cmp r3, #3 + 800ef8c: d065 beq.n 800f05a + ERREXIT4(cinfo, JERR_BAD_PROGRESSION, + 800ef8e: 6822 ldr r2, [r4, #0] + 800ef90: 2111 movs r1, #17 + 800ef92: 4620 mov r0, r4 + 800ef94: 6151 str r1, [r2, #20] + 800ef96: f8d4 1198 ldr.w r1, [r4, #408] ; 0x198 + 800ef9a: e9c2 1306 strd r1, r3, [r2, #24] + 800ef9e: f8d4 31a0 ldr.w r3, [r4, #416] ; 0x1a0 + 800efa2: 6213 str r3, [r2, #32] + 800efa4: f8d4 31a4 ldr.w r3, [r4, #420] ; 0x1a4 + 800efa8: 6253 str r3, [r2, #36] ; 0x24 + 800efaa: 6813 ldr r3, [r2, #0] + 800efac: 4798 blx r3 + break; + 800efae: e02a b.n 800f006 + switch (cinfo->Se) { + 800efb0: 2b0f cmp r3, #15 + 800efb2: d1ec bne.n 800ef8e + cinfo->block_size = 4; + 800efb4: 2204 movs r2, #4 + 800efb6: f8c4 21a8 str.w r2, [r4, #424] ; 0x1a8 + cinfo->natural_order = jpeg_natural_order4; + 800efba: 4a56 ldr r2, [pc, #344] ; (800f114 ) + 800efbc: e051 b.n 800f062 + switch (cinfo->Se) { + 800efbe: 2b30 cmp r3, #48 ; 0x30 + 800efc0: d05c beq.n 800f07c + 800efc2: 2b3f cmp r3, #63 ; 0x3f + 800efc4: d05f beq.n 800f086 + 800efc6: 2b23 cmp r3, #35 ; 0x23 + 800efc8: d1e1 bne.n 800ef8e + cinfo->block_size = 6; + 800efca: 2206 movs r2, #6 + 800efcc: f8c4 21a8 str.w r2, [r4, #424] ; 0x1a8 + cinfo->natural_order = jpeg_natural_order6; + 800efd0: 4a51 ldr r2, [pc, #324] ; (800f118 ) + 800efd2: e046 b.n 800f062 + switch (cinfo->Se) { + 800efd4: 2ba8 cmp r3, #168 ; 0xa8 + 800efd6: d060 beq.n 800f09a + 800efd8: dc07 bgt.n 800efea + 800efda: 2b78 cmp r3, #120 ; 0x78 + 800efdc: d059 beq.n 800f092 + 800efde: 2b8f cmp r3, #143 ; 0x8f + 800efe0: d059 beq.n 800f096 + 800efe2: 2b63 cmp r3, #99 ; 0x63 + 800efe4: d1d3 bne.n 800ef8e + cinfo->block_size = 10; + 800efe6: 230a movs r3, #10 + 800efe8: e795 b.n 800ef16 + switch (cinfo->Se) { + 800efea: 2be0 cmp r3, #224 ; 0xe0 + 800efec: d057 beq.n 800f09e + 800efee: 2bff cmp r3, #255 ; 0xff + 800eff0: d057 beq.n 800f0a2 + 800eff2: 2bc3 cmp r3, #195 ; 0xc3 + 800eff4: d1cb bne.n 800ef8e + cinfo->block_size = 14; + 800eff6: 230e movs r3, #14 + 800eff8: e78d b.n 800ef16 + cinfo->block_size = 1; + 800effa: f8c4 91a8 str.w r9, [r4, #424] ; 0x1a8 + cinfo->natural_order = jpeg_natural_order; /* not needed */ + 800effe: f8c4 51ac str.w r5, [r4, #428] ; 0x1ac + cinfo->lim_Se = cinfo->Se; + 800f002: f8c4 31b0 str.w r3, [r4, #432] ; 0x1b0 + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + 800f006: f04f 0a00 mov.w sl, #0 + cinfo->min_DCT_h_scaled_size = cinfo->block_size; + 800f00a: f8d4 31a8 ldr.w r3, [r4, #424] ; 0x1a8 + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + 800f00e: f8d4 80d8 ldr.w r8, [r4, #216] ; 0xd8 + compptr->quant_table = NULL; + 800f012: 46d3 mov fp, sl + cinfo->min_DCT_v_scaled_size = cinfo->block_size; + 800f014: e9c4 3350 strd r3, r3, [r4, #320] ; 0x140 + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + 800f018: 6a63 ldr r3, [r4, #36] ; 0x24 + compptr->DCT_h_scaled_size = cinfo->block_size; + 800f01a: f8d4 11a8 ldr.w r1, [r4, #424] ; 0x1a8 + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + 800f01e: 459a cmp sl, r3 + 800f020: db41 blt.n 800f0a6 + (long) (cinfo->max_v_samp_factor * cinfo->block_size)); + 800f022: f8d4 313c ldr.w r3, [r4, #316] ; 0x13c + jdiv_round_up((long) cinfo->image_height, + 800f026: 6a20 ldr r0, [r4, #32] + 800f028: 4359 muls r1, r3 + 800f02a: f009 fc33 bl 8018894 + if (cinfo->comps_in_scan < cinfo->num_components || cinfo->progressive_mode) + 800f02e: 6a63 ldr r3, [r4, #36] ; 0x24 + 800f030: f8d4 2150 ldr.w r2, [r4, #336] ; 0x150 + cinfo->total_iMCU_rows = (JDIMENSION) + 800f034: f8c4 0148 str.w r0, [r4, #328] ; 0x148 + if (cinfo->comps_in_scan < cinfo->num_components || cinfo->progressive_mode) + 800f038: 429a cmp r2, r3 + 800f03a: f8d4 31c8 ldr.w r3, [r4, #456] ; 0x1c8 + 800f03e: db03 blt.n 800f048 + 800f040: f8d4 20e0 ldr.w r2, [r4, #224] ; 0xe0 + 800f044: 2a00 cmp r2, #0 + 800f046: d071 beq.n 800f12c + cinfo->inputctl->has_multiple_scans = TRUE; + 800f048: f8c3 9010 str.w r9, [r3, #16] + if (cinfo->comps_in_scan == 0) { /* pseudo SOS marker */ + 800f04c: f8d4 3150 ldr.w r3, [r4, #336] ; 0x150 + 800f050: 2b00 cmp r3, #0 + 800f052: d16d bne.n 800f130 + inputctl->inheaders = 2; + 800f054: 2302 movs r3, #2 + 800f056: 61b3 str r3, [r6, #24] + break; + 800f058: e6fa b.n 800ee50 + cinfo->block_size = 2; + 800f05a: 2202 movs r2, #2 + 800f05c: f8c4 21a8 str.w r2, [r4, #424] ; 0x1a8 + cinfo->natural_order = jpeg_natural_order2; + 800f060: 4a2e ldr r2, [pc, #184] ; (800f11c ) + cinfo->natural_order = jpeg_natural_order7; + 800f062: f8c4 21ac str.w r2, [r4, #428] ; 0x1ac + cinfo->lim_Se = cinfo->Se; + 800f066: e7cc b.n 800f002 + cinfo->block_size = 3; + 800f068: 2203 movs r2, #3 + 800f06a: f8c4 21a8 str.w r2, [r4, #424] ; 0x1a8 + cinfo->natural_order = jpeg_natural_order3; + 800f06e: 4a2c ldr r2, [pc, #176] ; (800f120 ) + 800f070: e7f7 b.n 800f062 + cinfo->block_size = 5; + 800f072: 2205 movs r2, #5 + 800f074: f8c4 21a8 str.w r2, [r4, #424] ; 0x1a8 + cinfo->natural_order = jpeg_natural_order5; + 800f078: 4a2a ldr r2, [pc, #168] ; (800f124 ) + 800f07a: e7f2 b.n 800f062 + cinfo->block_size = 7; + 800f07c: 2207 movs r2, #7 + 800f07e: f8c4 21a8 str.w r2, [r4, #424] ; 0x1a8 + cinfo->natural_order = jpeg_natural_order7; + 800f082: 4a29 ldr r2, [pc, #164] ; (800f128 ) + 800f084: e7ed b.n 800f062 + cinfo->block_size = 8; + 800f086: 2208 movs r2, #8 + 800f088: f8c4 21a8 str.w r2, [r4, #424] ; 0x1a8 + cinfo->natural_order = jpeg_natural_order; + 800f08c: e7b7 b.n 800effe + cinfo->block_size = 9; + 800f08e: 2309 movs r3, #9 + 800f090: e741 b.n 800ef16 + cinfo->block_size = 11; + 800f092: 230b movs r3, #11 + 800f094: e73f b.n 800ef16 + cinfo->block_size = 12; + 800f096: 230c movs r3, #12 + 800f098: e73d b.n 800ef16 + cinfo->block_size = 13; + 800f09a: 230d movs r3, #13 + 800f09c: e73b b.n 800ef16 + cinfo->block_size = 15; + 800f09e: 230f movs r3, #15 + 800f0a0: e739 b.n 800ef16 + cinfo->block_size = 16; + 800f0a2: 2310 movs r3, #16 + 800f0a4: e737 b.n 800ef16 + compptr->DCT_v_scaled_size = cinfo->block_size; + 800f0a6: e9c8 1109 strd r1, r1, [r8, #36] ; 0x24 + jdiv_round_up((long) cinfo->image_width * (long) compptr->h_samp_factor, + 800f0aa: f8d8 0008 ldr.w r0, [r8, #8] + ci++, compptr++) { + 800f0ae: f10a 0a01 add.w sl, sl, #1 + (long) (cinfo->max_h_samp_factor * cinfo->block_size)); + 800f0b2: f8d4 2138 ldr.w r2, [r4, #312] ; 0x138 + jdiv_round_up((long) cinfo->image_width * (long) compptr->h_samp_factor, + 800f0b6: 69e3 ldr r3, [r4, #28] + 800f0b8: 4351 muls r1, r2 + 800f0ba: 4358 muls r0, r3 + 800f0bc: f009 fbea bl 8018894 + compptr->width_in_blocks = (JDIMENSION) + 800f0c0: f8c8 001c str.w r0, [r8, #28] + jdiv_round_up((long) cinfo->image_height * (long) compptr->v_samp_factor, + 800f0c4: f8d8 000c ldr.w r0, [r8, #12] + (long) (cinfo->max_v_samp_factor * cinfo->block_size)); + 800f0c8: f8d4 213c ldr.w r2, [r4, #316] ; 0x13c + jdiv_round_up((long) cinfo->image_height * (long) compptr->v_samp_factor, + 800f0cc: 6a23 ldr r3, [r4, #32] + (long) (cinfo->max_v_samp_factor * cinfo->block_size)); + 800f0ce: f8d4 11a8 ldr.w r1, [r4, #424] ; 0x1a8 + jdiv_round_up((long) cinfo->image_height * (long) compptr->v_samp_factor, + 800f0d2: 4358 muls r0, r3 + 800f0d4: 4351 muls r1, r2 + 800f0d6: f009 fbdd bl 8018894 + compptr->height_in_blocks = (JDIMENSION) + 800f0da: f8c8 0020 str.w r0, [r8, #32] + jdiv_round_up((long) cinfo->image_width * (long) compptr->h_samp_factor, + 800f0de: f8d8 0008 ldr.w r0, [r8, #8] + 800f0e2: 69e3 ldr r3, [r4, #28] + 800f0e4: f8d4 1138 ldr.w r1, [r4, #312] ; 0x138 + 800f0e8: 4358 muls r0, r3 + 800f0ea: f009 fbd3 bl 8018894 + compptr->downsampled_width = (JDIMENSION) + 800f0ee: f8c8 002c str.w r0, [r8, #44] ; 0x2c + jdiv_round_up((long) cinfo->image_height * (long) compptr->v_samp_factor, + 800f0f2: f8d8 000c ldr.w r0, [r8, #12] + 800f0f6: 6a23 ldr r3, [r4, #32] + 800f0f8: f8d4 113c ldr.w r1, [r4, #316] ; 0x13c + 800f0fc: 4358 muls r0, r3 + 800f0fe: f009 fbc9 bl 8018894 + compptr->quant_table = NULL; + 800f102: f8c8 b050 str.w fp, [r8, #80] ; 0x50 + compptr->component_needed = TRUE; + 800f106: e9c8 090c strd r0, r9, [r8, #48] ; 0x30 + ci++, compptr++) { + 800f10a: f108 0858 add.w r8, r8, #88 ; 0x58 + 800f10e: e783 b.n 800f018 + 800f110: 08039860 .word 0x08039860 + 800f114: 08039a54 .word 0x08039a54 + 800f118: 08039b78 .word 0x08039b78 + 800f11c: 080399a0 .word 0x080399a0 + 800f120: 080399f0 .word 0x080399f0 + 800f124: 08039ad4 .word 0x08039ad4 + 800f128: 08039c48 .word 0x08039c48 + cinfo->inputctl->has_multiple_scans = FALSE; + 800f12c: 611a str r2, [r3, #16] + 800f12e: e78d b.n 800f04c + inputctl->inheaders = 0; + 800f130: 2300 movs r3, #0 + 800f132: 61b3 str r3, [r6, #24] + 800f134: e6a8 b.n 800ee88 + if (! inputctl->pub.has_multiple_scans) + 800f136: 6933 ldr r3, [r6, #16] + 800f138: b92b cbnz r3, 800f146 + ERREXIT(cinfo, JERR_EOI_EXPECTED); /* Oops, I wasn't expecting this! */ + 800f13a: 6823 ldr r3, [r4, #0] + 800f13c: 2224 movs r2, #36 ; 0x24 + 800f13e: 4620 mov r0, r4 + 800f140: 615a str r2, [r3, #20] + 800f142: 681b ldr r3, [r3, #0] + 800f144: 4798 blx r3 + if (cinfo->comps_in_scan == 0) /* unexpected pseudo SOS marker */ + 800f146: f8d4 3150 ldr.w r3, [r4, #336] ; 0x150 + 800f14a: 2b00 cmp r3, #0 + 800f14c: f43f ae80 beq.w 800ee50 + start_input_pass(cinfo); + 800f150: 4620 mov r0, r4 + 800f152: f7ff fdaf bl 800ecb4 + 800f156: e697 b.n 800ee88 + if (cinfo->output_scan_number > cinfo->input_scan_number) + 800f158: f8d4 3090 ldr.w r3, [r4, #144] ; 0x90 + 800f15c: f8d4 2098 ldr.w r2, [r4, #152] ; 0x98 + 800f160: 429a cmp r2, r3 + 800f162: f77f ae90 ble.w 800ee86 + cinfo->output_scan_number = cinfo->input_scan_number; + 800f166: f8c4 3098 str.w r3, [r4, #152] ; 0x98 + 800f16a: e68d b.n 800ee88 + +0800f16c : + if (cinfo->scale_num * cinfo->block_size <= cinfo->scale_denom) { + 800f16c: f8d0 11a8 ldr.w r1, [r0, #424] ; 0x1a8 + 800f170: 6ac2 ldr r2, [r0, #44] ; 0x2c + 800f172: 6b03 ldr r3, [r0, #48] ; 0x30 + 800f174: 434a muls r2, r1 + 800f176: 429a cmp r2, r3 +{ + 800f178: b570 push {r4, r5, r6, lr} + 800f17a: 4604 mov r4, r0 + jdiv_round_up((long) cinfo->image_width, (long) cinfo->block_size); + 800f17c: 69c0 ldr r0, [r0, #28] + if (cinfo->scale_num * cinfo->block_size <= cinfo->scale_denom) { + 800f17e: d813 bhi.n 800f1a8 + cinfo->output_width = (JDIMENSION) + 800f180: 2501 movs r5, #1 + jdiv_round_up((long) cinfo->image_width, (long) cinfo->block_size); + 800f182: f009 fb87 bl 8018894 + jdiv_round_up((long) cinfo->image_height, (long) cinfo->block_size); + 800f186: f8d4 11a8 ldr.w r1, [r4, #424] ; 0x1a8 + cinfo->output_width = (JDIMENSION) + 800f18a: 6720 str r0, [r4, #112] ; 0x70 + jdiv_round_up((long) cinfo->image_height, (long) cinfo->block_size); + 800f18c: 6a20 ldr r0, [r4, #32] + 800f18e: f009 fb81 bl 8018894 + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + 800f192: f8d4 30d8 ldr.w r3, [r4, #216] ; 0xd8 + 800f196: 2200 movs r2, #0 + 800f198: 6a61 ldr r1, [r4, #36] ; 0x24 + cinfo->output_height = (JDIMENSION) + 800f19a: 6760 str r0, [r4, #116] ; 0x74 + cinfo->min_DCT_v_scaled_size = 1; + 800f19c: e9c4 5550 strd r5, r5, [r4, #320] ; 0x140 + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + 800f1a0: 4291 cmp r1, r2 + 800f1a2: f300 80bf bgt.w 800f324 +} + 800f1a6: bd70 pop {r4, r5, r6, pc} + } else if (cinfo->scale_num * cinfo->block_size <= cinfo->scale_denom * 2) { + 800f1a8: ebb2 0f43 cmp.w r2, r3, lsl #1 + 800f1ac: ea4f 0543 mov.w r5, r3, lsl #1 + 800f1b0: d80b bhi.n 800f1ca + jdiv_round_up((long) cinfo->image_width * 2L, (long) cinfo->block_size); + 800f1b2: 0040 lsls r0, r0, #1 + 800f1b4: 2502 movs r5, #2 + 800f1b6: f009 fb6d bl 8018894 + cinfo->output_width = (JDIMENSION) + 800f1ba: 6720 str r0, [r4, #112] ; 0x70 + jdiv_round_up((long) cinfo->image_height * 2L, (long) cinfo->block_size); + 800f1bc: 6a20 ldr r0, [r4, #32] + 800f1be: f8d4 11a8 ldr.w r1, [r4, #424] ; 0x1a8 + 800f1c2: 0040 lsls r0, r0, #1 + 800f1c4: f009 fb66 bl 8018894 + cinfo->min_DCT_v_scaled_size = 2; + 800f1c8: e7e3 b.n 800f192 + } else if (cinfo->scale_num * cinfo->block_size <= cinfo->scale_denom * 3) { + 800f1ca: 441d add r5, r3 + 800f1cc: 42aa cmp r2, r5 + 800f1ce: d80d bhi.n 800f1ec + jdiv_round_up((long) cinfo->image_width * 3L, (long) cinfo->block_size); + 800f1d0: eb00 0040 add.w r0, r0, r0, lsl #1 + 800f1d4: 2503 movs r5, #3 + 800f1d6: f009 fb5d bl 8018894 + cinfo->output_width = (JDIMENSION) + 800f1da: 6720 str r0, [r4, #112] ; 0x70 + jdiv_round_up((long) cinfo->image_height * 3L, (long) cinfo->block_size); + 800f1dc: 6a20 ldr r0, [r4, #32] + 800f1de: f8d4 11a8 ldr.w r1, [r4, #424] ; 0x1a8 + 800f1e2: eb00 0040 add.w r0, r0, r0, lsl #1 + 800f1e6: f009 fb55 bl 8018894 + cinfo->min_DCT_v_scaled_size = 3; + 800f1ea: e7d2 b.n 800f192 + } else if (cinfo->scale_num * cinfo->block_size <= cinfo->scale_denom * 4) { + 800f1ec: ebb2 0f83 cmp.w r2, r3, lsl #2 + 800f1f0: ea4f 0583 mov.w r5, r3, lsl #2 + 800f1f4: d80b bhi.n 800f20e + jdiv_round_up((long) cinfo->image_width * 4L, (long) cinfo->block_size); + 800f1f6: 0080 lsls r0, r0, #2 + 800f1f8: 2504 movs r5, #4 + 800f1fa: f009 fb4b bl 8018894 + cinfo->output_width = (JDIMENSION) + 800f1fe: 6720 str r0, [r4, #112] ; 0x70 + jdiv_round_up((long) cinfo->image_height * 4L, (long) cinfo->block_size); + 800f200: 6a20 ldr r0, [r4, #32] + 800f202: f8d4 11a8 ldr.w r1, [r4, #424] ; 0x1a8 + 800f206: 0080 lsls r0, r0, #2 + 800f208: f009 fb44 bl 8018894 + cinfo->min_DCT_v_scaled_size = 4; + 800f20c: e7c1 b.n 800f192 + } else if (cinfo->scale_num * cinfo->block_size <= cinfo->scale_denom * 5) { + 800f20e: 441d add r5, r3 + 800f210: 42aa cmp r2, r5 + 800f212: d80d bhi.n 800f230 + jdiv_round_up((long) cinfo->image_width * 5L, (long) cinfo->block_size); + 800f214: eb00 0080 add.w r0, r0, r0, lsl #2 + 800f218: 2505 movs r5, #5 + 800f21a: f009 fb3b bl 8018894 + cinfo->output_width = (JDIMENSION) + 800f21e: 6720 str r0, [r4, #112] ; 0x70 + jdiv_round_up((long) cinfo->image_height * 5L, (long) cinfo->block_size); + 800f220: 6a20 ldr r0, [r4, #32] + 800f222: f8d4 11a8 ldr.w r1, [r4, #424] ; 0x1a8 + 800f226: eb00 0080 add.w r0, r0, r0, lsl #2 + 800f22a: f009 fb33 bl 8018894 + cinfo->min_DCT_v_scaled_size = 5; + 800f22e: e7b0 b.n 800f192 + } else if (cinfo->scale_num * cinfo->block_size <= cinfo->scale_denom * 6) { + 800f230: 2506 movs r5, #6 + 800f232: fb05 f603 mul.w r6, r5, r3 + 800f236: 42b2 cmp r2, r6 + 800f238: d80a bhi.n 800f250 + jdiv_round_up((long) cinfo->image_width * 14L, (long) cinfo->block_size); + 800f23a: 4368 muls r0, r5 + 800f23c: f009 fb2a bl 8018894 + cinfo->output_width = (JDIMENSION) + 800f240: 6720 str r0, [r4, #112] ; 0x70 + jdiv_round_up((long) cinfo->image_height * 14L, (long) cinfo->block_size); + 800f242: 6a20 ldr r0, [r4, #32] + 800f244: f8d4 11a8 ldr.w r1, [r4, #424] ; 0x1a8 + 800f248: 4368 muls r0, r5 + 800f24a: f009 fb23 bl 8018894 + cinfo->min_DCT_v_scaled_size = 14; + 800f24e: e7a0 b.n 800f192 + } else if (cinfo->scale_num * cinfo->block_size <= cinfo->scale_denom * 7) { + 800f250: ebc3 06c3 rsb r6, r3, r3, lsl #3 + 800f254: 00dd lsls r5, r3, #3 + 800f256: 42b2 cmp r2, r6 + 800f258: d80d bhi.n 800f276 + jdiv_round_up((long) cinfo->image_width * 7L, (long) cinfo->block_size); + 800f25a: ebc0 00c0 rsb r0, r0, r0, lsl #3 + 800f25e: 2507 movs r5, #7 + 800f260: f009 fb18 bl 8018894 + cinfo->output_width = (JDIMENSION) + 800f264: 6720 str r0, [r4, #112] ; 0x70 + jdiv_round_up((long) cinfo->image_height * 7L, (long) cinfo->block_size); + 800f266: 6a20 ldr r0, [r4, #32] + 800f268: f8d4 11a8 ldr.w r1, [r4, #424] ; 0x1a8 + 800f26c: ebc0 00c0 rsb r0, r0, r0, lsl #3 + 800f270: f009 fb10 bl 8018894 + cinfo->min_DCT_v_scaled_size = 7; + 800f274: e78d b.n 800f192 + } else if (cinfo->scale_num * cinfo->block_size <= cinfo->scale_denom * 8) { + 800f276: 42aa cmp r2, r5 + 800f278: d80b bhi.n 800f292 + jdiv_round_up((long) cinfo->image_width * 8L, (long) cinfo->block_size); + 800f27a: 00c0 lsls r0, r0, #3 + 800f27c: 2508 movs r5, #8 + 800f27e: f009 fb09 bl 8018894 + cinfo->output_width = (JDIMENSION) + 800f282: 6720 str r0, [r4, #112] ; 0x70 + jdiv_round_up((long) cinfo->image_height * 8L, (long) cinfo->block_size); + 800f284: 6a20 ldr r0, [r4, #32] + 800f286: f8d4 11a8 ldr.w r1, [r4, #424] ; 0x1a8 + 800f28a: 00c0 lsls r0, r0, #3 + 800f28c: f009 fb02 bl 8018894 + cinfo->min_DCT_v_scaled_size = 8; + 800f290: e77f b.n 800f192 + } else if (cinfo->scale_num * cinfo->block_size <= cinfo->scale_denom * 9) { + 800f292: 441d add r5, r3 + 800f294: 42aa cmp r2, r5 + 800f296: d80d bhi.n 800f2b4 + jdiv_round_up((long) cinfo->image_width * 9L, (long) cinfo->block_size); + 800f298: eb00 00c0 add.w r0, r0, r0, lsl #3 + 800f29c: 2509 movs r5, #9 + 800f29e: f009 faf9 bl 8018894 + cinfo->output_width = (JDIMENSION) + 800f2a2: 6720 str r0, [r4, #112] ; 0x70 + jdiv_round_up((long) cinfo->image_height * 9L, (long) cinfo->block_size); + 800f2a4: 6a20 ldr r0, [r4, #32] + 800f2a6: f8d4 11a8 ldr.w r1, [r4, #424] ; 0x1a8 + 800f2aa: eb00 00c0 add.w r0, r0, r0, lsl #3 + 800f2ae: f009 faf1 bl 8018894 + cinfo->min_DCT_v_scaled_size = 9; + 800f2b2: e76e b.n 800f192 + } else if (cinfo->scale_num * cinfo->block_size <= cinfo->scale_denom * 10) { + 800f2b4: 250a movs r5, #10 + 800f2b6: fb05 f603 mul.w r6, r5, r3 + 800f2ba: 42b2 cmp r2, r6 + 800f2bc: d9bd bls.n 800f23a + } else if (cinfo->scale_num * cinfo->block_size <= cinfo->scale_denom * 11) { + 800f2be: 250b movs r5, #11 + 800f2c0: fb05 f603 mul.w r6, r5, r3 + 800f2c4: 42b2 cmp r2, r6 + 800f2c6: d9b8 bls.n 800f23a + } else if (cinfo->scale_num * cinfo->block_size <= cinfo->scale_denom * 12) { + 800f2c8: 250c movs r5, #12 + 800f2ca: fb05 f603 mul.w r6, r5, r3 + 800f2ce: 42b2 cmp r2, r6 + 800f2d0: d9b3 bls.n 800f23a + } else if (cinfo->scale_num * cinfo->block_size <= cinfo->scale_denom * 13) { + 800f2d2: 250d movs r5, #13 + 800f2d4: fb05 f603 mul.w r6, r5, r3 + 800f2d8: 42b2 cmp r2, r6 + 800f2da: d9ae bls.n 800f23a + } else if (cinfo->scale_num * cinfo->block_size <= cinfo->scale_denom * 14) { + 800f2dc: 250e movs r5, #14 + 800f2de: fb05 f603 mul.w r6, r5, r3 + 800f2e2: 42b2 cmp r2, r6 + 800f2e4: d9a9 bls.n 800f23a + } else if (cinfo->scale_num * cinfo->block_size <= cinfo->scale_denom * 15) { + 800f2e6: ebc3 1303 rsb r3, r3, r3, lsl #4 + 800f2ea: 429a cmp r2, r3 + 800f2ec: ea4f 1300 mov.w r3, r0, lsl #4 + 800f2f0: d80c bhi.n 800f30c + jdiv_round_up((long) cinfo->image_width * 15L, (long) cinfo->block_size); + 800f2f2: 1a18 subs r0, r3, r0 + 800f2f4: 250f movs r5, #15 + 800f2f6: f009 facd bl 8018894 + cinfo->output_width = (JDIMENSION) + 800f2fa: 6720 str r0, [r4, #112] ; 0x70 + jdiv_round_up((long) cinfo->image_height * 15L, (long) cinfo->block_size); + 800f2fc: 6a20 ldr r0, [r4, #32] + 800f2fe: f8d4 11a8 ldr.w r1, [r4, #424] ; 0x1a8 + 800f302: ebc0 1000 rsb r0, r0, r0, lsl #4 + 800f306: f009 fac5 bl 8018894 + cinfo->min_DCT_v_scaled_size = 15; + 800f30a: e742 b.n 800f192 + jdiv_round_up((long) cinfo->image_width * 16L, (long) cinfo->block_size); + 800f30c: 4618 mov r0, r3 + cinfo->output_height = (JDIMENSION) + 800f30e: 2510 movs r5, #16 + jdiv_round_up((long) cinfo->image_width * 16L, (long) cinfo->block_size); + 800f310: f009 fac0 bl 8018894 + cinfo->output_width = (JDIMENSION) + 800f314: 6720 str r0, [r4, #112] ; 0x70 + jdiv_round_up((long) cinfo->image_height * 16L, (long) cinfo->block_size); + 800f316: 6a20 ldr r0, [r4, #32] + 800f318: f8d4 11a8 ldr.w r1, [r4, #424] ; 0x1a8 + 800f31c: 0100 lsls r0, r0, #4 + 800f31e: f009 fab9 bl 8018894 + cinfo->min_DCT_v_scaled_size = 16; + 800f322: e736 b.n 800f192 + compptr->DCT_h_scaled_size = cinfo->min_DCT_h_scaled_size; + 800f324: f8d4 0140 ldr.w r0, [r4, #320] ; 0x140 + ci++, compptr++) { + 800f328: 3201 adds r2, #1 + 800f32a: 3358 adds r3, #88 ; 0x58 + compptr->DCT_h_scaled_size = cinfo->min_DCT_h_scaled_size; + 800f32c: f843 0c34 str.w r0, [r3, #-52] + compptr->DCT_v_scaled_size = cinfo->min_DCT_v_scaled_size; + 800f330: f8d4 0144 ldr.w r0, [r4, #324] ; 0x144 + 800f334: f843 0c30 str.w r0, [r3, #-48] + ci++, compptr++) { + 800f338: e732 b.n 800f1a0 + ... + +0800f33c : +{ + my_inputctl_ptr inputctl; + + /* Create subobject in permanent pool */ + inputctl = (my_inputctl_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT, + 800f33c: 6843 ldr r3, [r0, #4] + 800f33e: 221c movs r2, #28 + 800f340: 2100 movs r1, #0 + 800f342: 681b ldr r3, [r3, #0] +{ + 800f344: b510 push {r4, lr} + 800f346: 4604 mov r4, r0 + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT, + 800f348: 4798 blx r3 + SIZEOF(my_input_controller)); + cinfo->inputctl = (struct jpeg_input_controller *) inputctl; + /* Initialize method pointers */ + inputctl->pub.consume_input = consume_markers; + 800f34a: 4b08 ldr r3, [pc, #32] ; (800f36c ) + cinfo->inputctl = (struct jpeg_input_controller *) inputctl; + 800f34c: f8c4 01c8 str.w r0, [r4, #456] ; 0x1c8 + inputctl->pub.consume_input = consume_markers; + 800f350: 6003 str r3, [r0, #0] + inputctl->pub.reset_input_controller = reset_input_controller; + 800f352: 4b07 ldr r3, [pc, #28] ; (800f370 ) + 800f354: 6043 str r3, [r0, #4] + inputctl->pub.start_input_pass = start_input_pass; + 800f356: 4b07 ldr r3, [pc, #28] ; (800f374 ) + 800f358: 6083 str r3, [r0, #8] + inputctl->pub.finish_input_pass = finish_input_pass; + 800f35a: 4b07 ldr r3, [pc, #28] ; (800f378 ) + 800f35c: 60c3 str r3, [r0, #12] + /* Initialize state: can't use reset_input_controller since we don't + * want to try to reset other modules yet. + */ + inputctl->pub.has_multiple_scans = FALSE; /* "unknown" would be better */ + 800f35e: 2300 movs r3, #0 + inputctl->pub.eoi_reached = FALSE; + 800f360: e9c0 3304 strd r3, r3, [r0, #16] + inputctl->inheaders = 1; + 800f364: 2301 movs r3, #1 + 800f366: 6183 str r3, [r0, #24] +} + 800f368: bd10 pop {r4, pc} + 800f36a: bf00 nop + 800f36c: 0800ee3d .word 0x0800ee3d + 800f370: 0800ec85 .word 0x0800ec85 + 800f374: 0800ecb5 .word 0x0800ecb5 + 800f378: 0800ec75 .word 0x0800ec75 + +0800f37c : + * Initialize for a processing pass. + */ + +METHODDEF(void) +start_pass_main (j_decompress_ptr cinfo, J_BUF_MODE pass_mode) +{ + 800f37c: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} + my_main_ptr main = (my_main_ptr) cinfo->main; + 800f380: f8d0 31bc ldr.w r3, [r0, #444] ; 0x1bc +{ + 800f384: 4602 mov r2, r0 + + switch (pass_mode) { + 800f386: b149 cbz r1, 800f39c + 800f388: 2902 cmp r1, #2 + 800f38a: d071 beq.n 800f470 + /* For last pass of 2-pass quantization, just crank the postprocessor */ + main->pub.process_data = process_data_crank_post; + break; +#endif + default: + ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); + 800f38c: 6803 ldr r3, [r0, #0] + 800f38e: 2203 movs r2, #3 + 800f390: 615a str r2, [r3, #20] + 800f392: 681b ldr r3, [r3, #0] + break; + } +} + 800f394: b003 add sp, #12 + 800f396: e8bd 4ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); + 800f39a: 4718 bx r3 + if (cinfo->upsample->need_context_rows) { + 800f39c: f8d0 01d8 ldr.w r0, [r0, #472] ; 0x1d8 + 800f3a0: 6880 ldr r0, [r0, #8] + 800f3a2: 2800 cmp r0, #0 + 800f3a4: d061 beq.n 800f46a + int M = cinfo->min_DCT_v_scaled_size; + 800f3a6: f8d2 c144 ldr.w ip, [r2, #324] ; 0x144 + main->pub.process_data = process_data_context_main; + 800f3aa: 461f mov r7, r3 + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + 800f3ac: f8d2 60d8 ldr.w r6, [r2, #216] ; 0xd8 + 800f3b0: 6a52 ldr r2, [r2, #36] ; 0x24 + main->pub.process_data = process_data_context_main; + 800f3b2: 4831 ldr r0, [pc, #196] ; (800f478 ) + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + 800f3b4: 9200 str r2, [sp, #0] + for (i = 0; i < rgroup * (M + 2); i++) { + 800f3b6: f10c 0202 add.w r2, ip, #2 + main->pub.process_data = process_data_context_main; + 800f3ba: f847 0f04 str.w r0, [r7, #4]! + for (i = 0; i < rgroup * (M + 2); i++) { + 800f3be: 9201 str r2, [sp, #4] + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + 800f3c0: 9a00 ldr r2, [sp, #0] + 800f3c2: 4291 cmp r1, r2 + 800f3c4: db09 blt.n 800f3da + main->whichptr = 0; /* Read first iMCU row into xbuffer[0] */ + 800f3c6: 2200 movs r2, #0 + main->context_state = CTX_PREPARE_FOR_IMCU; + 800f3c8: e9c3 2210 strd r2, r2, [r3, #64] ; 0x40 + main->iMCU_row_ctr = 0; + 800f3cc: 64da str r2, [r3, #76] ; 0x4c + main->buffer_full = FALSE; /* Mark buffer empty */ + 800f3ce: 2200 movs r2, #0 + main->rowgroup_ctr = 0; + 800f3d0: e9c3 220c strd r2, r2, [r3, #48] ; 0x30 +} + 800f3d4: b003 add sp, #12 + 800f3d6: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + rgroup = (compptr->v_samp_factor * compptr->DCT_v_scaled_size) / + 800f3da: 6ab0 ldr r0, [r6, #40] ; 0x28 + 800f3dc: 68f2 ldr r2, [r6, #12] + for (i = 0; i < rgroup * (M + 2); i++) { + 800f3de: 9d01 ldr r5, [sp, #4] + rgroup = (compptr->v_samp_factor * compptr->DCT_v_scaled_size) / + 800f3e0: 4342 muls r2, r0 + xbuf0 = main->xbuffer[0][ci]; + 800f3e2: 6b98 ldr r0, [r3, #56] ; 0x38 + buf = main->buffer[ci]; + 800f3e4: f857 4f04 ldr.w r4, [r7, #4]! + xbuf0 = main->xbuffer[0][ci]; + 800f3e8: f850 e021 ldr.w lr, [r0, r1, lsl #2] + xbuf1 = main->xbuffer[1][ci]; + 800f3ec: 6bd8 ldr r0, [r3, #60] ; 0x3c + rgroup = (compptr->v_samp_factor * compptr->DCT_v_scaled_size) / + 800f3ee: fb92 f2fc sdiv r2, r2, ip + xbuf1 = main->xbuffer[1][ci]; + 800f3f2: f850 0021 ldr.w r0, [r0, r1, lsl #2] + for (i = 0; i < rgroup * (M + 2); i++) { + 800f3f6: fb02 f905 mul.w r9, r2, r5 + 800f3fa: 2500 movs r5, #0 + 800f3fc: 454d cmp r5, r9 + 800f3fe: db1c blt.n 800f43a + xbuf1[rgroup*(M-2) + i] = buf[rgroup*M + i]; + 800f400: fb02 fb0c mul.w fp, r2, ip + 800f404: f06f 0501 mvn.w r5, #1 + for (i = 0; i < rgroup * 2; i++) { + 800f408: ea4f 0a42 mov.w sl, r2, lsl #1 + xbuf1[rgroup*(M-2) + i] = buf[rgroup*M + i]; + 800f40c: fb05 b502 mla r5, r5, r2, fp + 800f410: eb04 088b add.w r8, r4, fp, lsl #2 + 800f414: eb00 0985 add.w r9, r0, r5, lsl #2 + 800f418: eb04 0585 add.w r5, r4, r5, lsl #2 + for (i = 0; i < rgroup * 2; i++) { + 800f41c: 2400 movs r4, #0 + 800f41e: eb00 008b add.w r0, r0, fp, lsl #2 + 800f422: 4554 cmp r4, sl + 800f424: db11 blt.n 800f44a + 800f426: f06f 0003 mvn.w r0, #3 + for (i = 0; i < rgroup; i++) { + 800f42a: 2400 movs r4, #0 + 800f42c: fb00 e502 mla r5, r0, r2, lr + 800f430: 42a2 cmp r2, r4 + 800f432: dc14 bgt.n 800f45e + ci++, compptr++) { + 800f434: 3101 adds r1, #1 + 800f436: 3658 adds r6, #88 ; 0x58 + 800f438: e7c2 b.n 800f3c0 + xbuf0[i] = xbuf1[i] = buf[i]; + 800f43a: f854 8025 ldr.w r8, [r4, r5, lsl #2] + 800f43e: f840 8025 str.w r8, [r0, r5, lsl #2] + 800f442: f84e 8025 str.w r8, [lr, r5, lsl #2] + for (i = 0; i < rgroup * (M + 2); i++) { + 800f446: 3501 adds r5, #1 + 800f448: e7d8 b.n 800f3fc + xbuf1[rgroup*(M-2) + i] = buf[rgroup*M + i]; + 800f44a: f858 bb04 ldr.w fp, [r8], #4 + for (i = 0; i < rgroup * 2; i++) { + 800f44e: 3401 adds r4, #1 + xbuf1[rgroup*(M-2) + i] = buf[rgroup*M + i]; + 800f450: f849 bb04 str.w fp, [r9], #4 + xbuf1[rgroup*M + i] = buf[rgroup*(M-2) + i]; + 800f454: f855 bb04 ldr.w fp, [r5], #4 + 800f458: f840 bb04 str.w fp, [r0], #4 + for (i = 0; i < rgroup * 2; i++) { + 800f45c: e7e1 b.n 800f422 + xbuf0[i - rgroup] = xbuf0[0]; + 800f45e: f8de 0000 ldr.w r0, [lr] + 800f462: f845 0024 str.w r0, [r5, r4, lsl #2] + for (i = 0; i < rgroup; i++) { + 800f466: 3401 adds r4, #1 + 800f468: e7e2 b.n 800f430 + main->pub.process_data = process_data_simple_main; + 800f46a: 4a04 ldr r2, [pc, #16] ; (800f47c ) + 800f46c: 605a str r2, [r3, #4] + 800f46e: e7ae b.n 800f3ce + main->pub.process_data = process_data_crank_post; + 800f470: 4a03 ldr r2, [pc, #12] ; (800f480 ) + 800f472: 605a str r2, [r3, #4] + break; + 800f474: e7ae b.n 800f3d4 + 800f476: bf00 nop + 800f478: 0800f4dd .word 0x0800f4dd + 800f47c: 0800f485 .word 0x0800f485 + 800f480: 0800f6d1 .word 0x0800f6d1 + +0800f484 : + +METHODDEF(void) +process_data_simple_main (j_decompress_ptr cinfo, + JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, + JDIMENSION out_rows_avail) +{ + 800f484: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} + my_main_ptr main = (my_main_ptr) cinfo->main; + 800f488: f8d0 41bc ldr.w r4, [r0, #444] ; 0x1bc +{ + 800f48c: 4698 mov r8, r3 + 800f48e: 460e mov r6, r1 + 800f490: b087 sub sp, #28 + JDIMENSION rowgroups_avail; + + /* Read input data if we haven't filled the main buffer yet */ + if (! main->buffer_full) { + 800f492: 6b23 ldr r3, [r4, #48] ; 0x30 +{ + 800f494: 4605 mov r5, r0 + 800f496: 4617 mov r7, r2 + if (! (*cinfo->coef->decompress_data) (cinfo, main->buffer)) + 800f498: f104 0108 add.w r1, r4, #8 + if (! main->buffer_full) { + 800f49c: b943 cbnz r3, 800f4b0 + if (! (*cinfo->coef->decompress_data) (cinfo, main->buffer)) + 800f49e: f8d0 31c0 ldr.w r3, [r0, #448] ; 0x1c0 + 800f4a2: 9105 str r1, [sp, #20] + 800f4a4: 68db ldr r3, [r3, #12] + 800f4a6: 4798 blx r3 + 800f4a8: b1a8 cbz r0, 800f4d6 + return; /* suspension forced, can do nothing more */ + main->buffer_full = TRUE; /* OK, we have an iMCU row to work with */ + 800f4aa: 2301 movs r3, #1 + 800f4ac: 9905 ldr r1, [sp, #20] + 800f4ae: 6323 str r3, [r4, #48] ; 0x30 + } + + /* There are always min_DCT_scaled_size row groups in an iMCU row. */ + rowgroups_avail = (JDIMENSION) cinfo->min_DCT_v_scaled_size; + 800f4b0: f8d5 9144 ldr.w r9, [r5, #324] ; 0x144 + * to the postprocessor. The postprocessor has to check for bottom + * of image anyway (at row resolution), so no point in us doing it too. + */ + + /* Feed the postprocessor */ + (*cinfo->post->post_process_data) (cinfo, main->buffer, + 800f4b4: f104 0234 add.w r2, r4, #52 ; 0x34 + 800f4b8: f8d5 31c4 ldr.w r3, [r5, #452] ; 0x1c4 + 800f4bc: 4628 mov r0, r5 + 800f4be: 9600 str r6, [sp, #0] + 800f4c0: e9cd 7801 strd r7, r8, [sp, #4] + 800f4c4: 685e ldr r6, [r3, #4] + 800f4c6: 464b mov r3, r9 + 800f4c8: 47b0 blx r6 + &main->rowgroup_ctr, rowgroups_avail, + output_buf, out_row_ctr, out_rows_avail); + + /* Has postprocessor consumed all the data yet? If so, mark buffer empty */ + if (main->rowgroup_ctr >= rowgroups_avail) { + 800f4ca: 6b63 ldr r3, [r4, #52] ; 0x34 + 800f4cc: 454b cmp r3, r9 + main->buffer_full = FALSE; + 800f4ce: bf24 itt cs + 800f4d0: 2300 movcs r3, #0 + main->rowgroup_ctr = 0; + 800f4d2: e9c4 330c strdcs r3, r3, [r4, #48] ; 0x30 + } +} + 800f4d6: b007 add sp, #28 + 800f4d8: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} + +0800f4dc : + +METHODDEF(void) +process_data_context_main (j_decompress_ptr cinfo, + JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, + JDIMENSION out_rows_avail) +{ + 800f4dc: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + my_main_ptr main = (my_main_ptr) cinfo->main; + 800f4e0: f8d0 41bc ldr.w r4, [r0, #444] ; 0x1bc +{ + 800f4e4: 4698 mov r8, r3 + 800f4e6: b08b sub sp, #44 ; 0x2c + 800f4e8: 4605 mov r5, r0 + + /* Read input data if we haven't filled the main buffer yet */ + if (! main->buffer_full) { + 800f4ea: 6b23 ldr r3, [r4, #48] ; 0x30 +{ + 800f4ec: 4689 mov r9, r1 + 800f4ee: 4617 mov r7, r2 + if (! main->buffer_full) { + 800f4f0: b973 cbnz r3, 800f510 + if (! (*cinfo->coef->decompress_data) (cinfo, + 800f4f2: 6c23 ldr r3, [r4, #64] ; 0x40 + 800f4f4: f8d0 21c0 ldr.w r2, [r0, #448] ; 0x1c0 + 800f4f8: 330e adds r3, #14 + 800f4fa: 68d2 ldr r2, [r2, #12] + 800f4fc: f854 1023 ldr.w r1, [r4, r3, lsl #2] + 800f500: 4790 blx r2 + 800f502: 2800 cmp r0, #0 + 800f504: d05a beq.n 800f5bc + main->xbuffer[main->whichptr])) + return; /* suspension forced, can do nothing more */ + main->buffer_full = TRUE; /* OK, we have an iMCU row to work with */ + 800f506: 2301 movs r3, #1 + 800f508: 6323 str r3, [r4, #48] ; 0x30 + main->iMCU_row_ctr++; /* count rows received */ + 800f50a: 6ce3 ldr r3, [r4, #76] ; 0x4c + 800f50c: 3301 adds r3, #1 + 800f50e: 64e3 str r3, [r4, #76] ; 0x4c + /* Postprocessor typically will not swallow all the input data it is handed + * in one call (due to filling the output buffer first). Must be prepared + * to exit and restart. This switch lets us keep track of how far we got. + * Note that each case falls through to the next on successful completion. + */ + switch (main->context_state) { + 800f510: 6c63 ldr r3, [r4, #68] ; 0x44 + 800f512: 2b01 cmp r3, #1 + 800f514: d011 beq.n 800f53a + 800f516: 2b02 cmp r3, #2 + 800f518: d036 beq.n 800f588 + 800f51a: 2b00 cmp r3, #0 + 800f51c: d14e bne.n 800f5bc + return; /* Postprocessor exactly filled output buf */ + /*FALLTHROUGH*/ + case CTX_PREPARE_FOR_IMCU: + /* Prepare to process first M-1 row groups of this iMCU row */ + main->rowgroup_ctr = 0; + main->rowgroups_avail = (JDIMENSION) (cinfo->min_DCT_v_scaled_size - 1); + 800f51e: f8d5 c144 ldr.w ip, [r5, #324] ; 0x144 + main->rowgroup_ctr = 0; + 800f522: 2600 movs r6, #0 + /* Check for bottom of image: if so, tweak pointers to "duplicate" + * the last sample row, and adjust rowgroups_avail to ignore padding rows. + */ + if (main->iMCU_row_ctr == cinfo->total_iMCU_rows) + 800f524: 6ce2 ldr r2, [r4, #76] ; 0x4c + main->rowgroups_avail = (JDIMENSION) (cinfo->min_DCT_v_scaled_size - 1); + 800f526: f10c 33ff add.w r3, ip, #4294967295 + main->rowgroup_ctr = 0; + 800f52a: 6366 str r6, [r4, #52] ; 0x34 + main->rowgroups_avail = (JDIMENSION) (cinfo->min_DCT_v_scaled_size - 1); + 800f52c: 64a3 str r3, [r4, #72] ; 0x48 + if (main->iMCU_row_ctr == cinfo->total_iMCU_rows) + 800f52e: f8d5 3148 ldr.w r3, [r5, #328] ; 0x148 + 800f532: 429a cmp r2, r3 + 800f534: d045 beq.n 800f5c2 + set_bottom_pointers(cinfo); + main->context_state = CTX_PROCESS_IMCU; + 800f536: 2301 movs r3, #1 + 800f538: 6463 str r3, [r4, #68] ; 0x44 + /*FALLTHROUGH*/ + case CTX_PROCESS_IMCU: + /* Call postprocessor using previously set pointers */ + (*cinfo->post->post_process_data) (cinfo, main->xbuffer[main->whichptr], + 800f53a: 6c23 ldr r3, [r4, #64] ; 0x40 + 800f53c: f104 0234 add.w r2, r4, #52 ; 0x34 + 800f540: 4628 mov r0, r5 + 800f542: f103 010e add.w r1, r3, #14 + 800f546: f8d5 31c4 ldr.w r3, [r5, #452] ; 0x1c4 + 800f54a: f8cd 9000 str.w r9, [sp] + 800f54e: e9cd 7801 strd r7, r8, [sp, #4] + 800f552: 685e ldr r6, [r3, #4] + 800f554: f854 1021 ldr.w r1, [r4, r1, lsl #2] + 800f558: 6ca3 ldr r3, [r4, #72] ; 0x48 + 800f55a: 47b0 blx r6 + &main->rowgroup_ctr, main->rowgroups_avail, + output_buf, out_row_ctr, out_rows_avail); + if (main->rowgroup_ctr < main->rowgroups_avail) + 800f55c: 6b62 ldr r2, [r4, #52] ; 0x34 + 800f55e: 6ca3 ldr r3, [r4, #72] ; 0x48 + 800f560: 429a cmp r2, r3 + 800f562: d32b bcc.n 800f5bc + return; /* Need to suspend */ + /* After the first iMCU, change wraparound pointers to normal state */ + if (main->iMCU_row_ctr == 1) + 800f564: 6ce3 ldr r3, [r4, #76] ; 0x4c + int M = cinfo->min_DCT_v_scaled_size; + 800f566: f8d5 0144 ldr.w r0, [r5, #324] ; 0x144 + if (main->iMCU_row_ctr == 1) + 800f56a: 2b01 cmp r3, #1 + 800f56c: d063 beq.n 800f636 + set_wraparound_pointers(cinfo); + /* Prepare to load new iMCU row using other xbuffer list */ + main->whichptr ^= 1; /* 0=>1 or 1=>0 */ + 800f56e: 6c23 ldr r3, [r4, #64] ; 0x40 + 800f570: f083 0301 eor.w r3, r3, #1 + 800f574: 6423 str r3, [r4, #64] ; 0x40 + main->buffer_full = FALSE; + 800f576: 2300 movs r3, #0 + 800f578: 6323 str r3, [r4, #48] ; 0x30 + /* Still need to process last row group of this iMCU row, */ + /* which is saved at index M+1 of the other xbuffer */ + main->rowgroup_ctr = (JDIMENSION) (cinfo->min_DCT_v_scaled_size + 1); + 800f57a: 1c43 adds r3, r0, #1 + main->rowgroups_avail = (JDIMENSION) (cinfo->min_DCT_v_scaled_size + 2); + 800f57c: 3002 adds r0, #2 + main->rowgroup_ctr = (JDIMENSION) (cinfo->min_DCT_v_scaled_size + 1); + 800f57e: 6363 str r3, [r4, #52] ; 0x34 + main->context_state = CTX_POSTPONED_ROW; + 800f580: 2302 movs r3, #2 + main->rowgroups_avail = (JDIMENSION) (cinfo->min_DCT_v_scaled_size + 2); + 800f582: 64a0 str r0, [r4, #72] ; 0x48 + main->context_state = CTX_POSTPONED_ROW; + 800f584: 6463 str r3, [r4, #68] ; 0x44 + 800f586: e019 b.n 800f5bc + (*cinfo->post->post_process_data) (cinfo, main->xbuffer[main->whichptr], + 800f588: 6c23 ldr r3, [r4, #64] ; 0x40 + 800f58a: f104 0234 add.w r2, r4, #52 ; 0x34 + 800f58e: 4628 mov r0, r5 + 800f590: f103 010e add.w r1, r3, #14 + 800f594: f8d5 31c4 ldr.w r3, [r5, #452] ; 0x1c4 + 800f598: f8cd 9000 str.w r9, [sp] + 800f59c: e9cd 7801 strd r7, r8, [sp, #4] + 800f5a0: 685e ldr r6, [r3, #4] + 800f5a2: f854 1021 ldr.w r1, [r4, r1, lsl #2] + 800f5a6: 6ca3 ldr r3, [r4, #72] ; 0x48 + 800f5a8: 47b0 blx r6 + if (main->rowgroup_ctr < main->rowgroups_avail) + 800f5aa: 6b62 ldr r2, [r4, #52] ; 0x34 + 800f5ac: 6ca3 ldr r3, [r4, #72] ; 0x48 + 800f5ae: 429a cmp r2, r3 + 800f5b0: d304 bcc.n 800f5bc + main->context_state = CTX_PREPARE_FOR_IMCU; + 800f5b2: 2300 movs r3, #0 + 800f5b4: 6463 str r3, [r4, #68] ; 0x44 + if (*out_row_ctr >= out_rows_avail) + 800f5b6: 683b ldr r3, [r7, #0] + 800f5b8: 4543 cmp r3, r8 + 800f5ba: d3b0 bcc.n 800f51e + } +} + 800f5bc: b00b add sp, #44 ; 0x2c + 800f5be: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + 800f5c2: 6a6a ldr r2, [r5, #36] ; 0x24 + xbuf[rows_left + i] = xbuf[rows_left-1]; + 800f5c4: f06f 4e40 mvn.w lr, #3221225472 ; 0xc0000000 + my_main_ptr main = (my_main_ptr) cinfo->main; + 800f5c8: f8d5 11bc ldr.w r1, [r5, #444] ; 0x1bc + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + 800f5cc: f8d5 30d8 ldr.w r3, [r5, #216] ; 0xd8 + 800f5d0: 9206 str r2, [sp, #24] + 800f5d2: 9a06 ldr r2, [sp, #24] + 800f5d4: 4296 cmp r6, r2 + 800f5d6: daae bge.n 800f536 + iMCUheight = compptr->v_samp_factor * compptr->DCT_v_scaled_size; + 800f5d8: 68d8 ldr r0, [r3, #12] + 800f5da: 6a9a ldr r2, [r3, #40] ; 0x28 + 800f5dc: 4342 muls r2, r0 + rows_left = (int) (compptr->downsampled_height % (JDIMENSION) iMCUheight); + 800f5de: 6b18 ldr r0, [r3, #48] ; 0x30 + 800f5e0: fbb0 fbf2 udiv fp, r0, r2 + 800f5e4: fb02 001b mls r0, r2, fp, r0 + rgroup = iMCUheight / cinfo->min_DCT_v_scaled_size; + 800f5e8: fb92 fafc sdiv sl, r2, ip + if (rows_left == 0) rows_left = iMCUheight; + 800f5ec: 2800 cmp r0, #0 + 800f5ee: bf08 it eq + 800f5f0: 4610 moveq r0, r2 + if (ci == 0) { + 800f5f2: b926 cbnz r6, 800f5fe + main->rowgroups_avail = (JDIMENSION) ((rows_left-1) / rgroup + 1); + 800f5f4: 1e42 subs r2, r0, #1 + 800f5f6: fb92 f2fa sdiv r2, r2, sl + 800f5fa: 3201 adds r2, #1 + 800f5fc: 648a str r2, [r1, #72] ; 0x48 + xbuf = main->xbuffer[main->whichptr][ci]; + 800f5fe: 6c0a ldr r2, [r1, #64] ; 0x40 + xbuf[rows_left + i] = xbuf[rows_left-1]; + 800f600: 4470 add r0, lr + for (i = 0; i < rgroup * 2; i++) { + 800f602: ea4f 0a4a mov.w sl, sl, lsl #1 + xbuf = main->xbuffer[main->whichptr][ci]; + 800f606: 320e adds r2, #14 + 800f608: f851 2022 ldr.w r2, [r1, r2, lsl #2] + 800f60c: f852 2026 ldr.w r2, [r2, r6, lsl #2] + xbuf[rows_left + i] = xbuf[rows_left-1]; + 800f610: eb02 0b80 add.w fp, r2, r0, lsl #2 + for (i = 0; i < rgroup * 2; i++) { + 800f614: 2000 movs r0, #0 + 800f616: 465a mov r2, fp + 800f618: 3204 adds r2, #4 + 800f61a: 9005 str r0, [sp, #20] + 800f61c: 9805 ldr r0, [sp, #20] + 800f61e: 4550 cmp r0, sl + 800f620: db02 blt.n 800f628 + ci++, compptr++) { + 800f622: 3601 adds r6, #1 + 800f624: 3358 adds r3, #88 ; 0x58 + 800f626: e7d4 b.n 800f5d2 + xbuf[rows_left + i] = xbuf[rows_left-1]; + 800f628: f8db 0000 ldr.w r0, [fp] + 800f62c: f842 0b04 str.w r0, [r2], #4 + for (i = 0; i < rgroup * 2; i++) { + 800f630: 9805 ldr r0, [sp, #20] + 800f632: 3001 adds r0, #1 + 800f634: e7f1 b.n 800f61a + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + 800f636: f8d5 30d8 ldr.w r3, [r5, #216] ; 0xd8 + my_main_ptr main = (my_main_ptr) cinfo->main; + 800f63a: f8d5 81bc ldr.w r8, [r5, #444] ; 0x1bc + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + 800f63e: 9305 str r3, [sp, #20] + 800f640: 6a6b ldr r3, [r5, #36] ; 0x24 + 800f642: 2500 movs r5, #0 + 800f644: 9308 str r3, [sp, #32] + main->rowgroup_ctr = (JDIMENSION) (cinfo->min_DCT_v_scaled_size + 1); + 800f646: 1c43 adds r3, r0, #1 + 800f648: 9307 str r3, [sp, #28] + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + 800f64a: 9b08 ldr r3, [sp, #32] + 800f64c: 429d cmp r5, r3 + 800f64e: da8e bge.n 800f56e + rgroup = (compptr->v_samp_factor * compptr->DCT_v_scaled_size) / + 800f650: 9b05 ldr r3, [sp, #20] + 800f652: 68da ldr r2, [r3, #12] + 800f654: 6a9b ldr r3, [r3, #40] ; 0x28 + 800f656: 435a muls r2, r3 + xbuf0 = main->xbuffer[0][ci]; + 800f658: f8d8 3038 ldr.w r3, [r8, #56] ; 0x38 + rgroup = (compptr->v_samp_factor * compptr->DCT_v_scaled_size) / + 800f65c: fb92 f2f0 sdiv r2, r2, r0 + xbuf0 = main->xbuffer[0][ci]; + 800f660: f853 7025 ldr.w r7, [r3, r5, lsl #2] + xbuf1 = main->xbuffer[1][ci]; + 800f664: f8d8 303c ldr.w r3, [r8, #60] ; 0x3c + 800f668: f853 c025 ldr.w ip, [r3, r5, lsl #2] + xbuf0[i - rgroup] = xbuf0[rgroup*(M+1) + i]; + 800f66c: 9b07 ldr r3, [sp, #28] + 800f66e: 4353 muls r3, r2 + 800f670: eb07 0183 add.w r1, r7, r3, lsl #2 + 800f674: eb0c 0a83 add.w sl, ip, r3, lsl #2 + xbuf0[rgroup*(M+2) + i] = xbuf0[i]; + 800f678: 4413 add r3, r2 + 800f67a: 9106 str r1, [sp, #24] + for (i = 0; i < rgroup; i++) { + 800f67c: 2100 movs r1, #0 + 800f67e: eb07 0983 add.w r9, r7, r3, lsl #2 + 800f682: eb0c 0383 add.w r3, ip, r3, lsl #2 + 800f686: 461e mov r6, r3 + 800f688: f06f 0303 mvn.w r3, #3 + 800f68c: fb03 fe02 mul.w lr, r3, r2 + 800f690: eb07 030e add.w r3, r7, lr + 800f694: 44e6 add lr, ip + 800f696: 9309 str r3, [sp, #36] ; 0x24 + 800f698: 428a cmp r2, r1 + 800f69a: dc04 bgt.n 800f6a6 + ci++, compptr++) { + 800f69c: 9b05 ldr r3, [sp, #20] + 800f69e: 3501 adds r5, #1 + 800f6a0: 3358 adds r3, #88 ; 0x58 + 800f6a2: 9305 str r3, [sp, #20] + 800f6a4: e7d1 b.n 800f64a + xbuf0[i - rgroup] = xbuf0[rgroup*(M+1) + i]; + 800f6a6: 9b06 ldr r3, [sp, #24] + 800f6a8: f853 bb04 ldr.w fp, [r3], #4 + 800f6ac: 9306 str r3, [sp, #24] + 800f6ae: 9b09 ldr r3, [sp, #36] ; 0x24 + 800f6b0: f843 b021 str.w fp, [r3, r1, lsl #2] + xbuf1[i - rgroup] = xbuf1[rgroup*(M+1) + i]; + 800f6b4: f85a bb04 ldr.w fp, [sl], #4 + 800f6b8: f84e b021 str.w fp, [lr, r1, lsl #2] + xbuf0[rgroup*(M+2) + i] = xbuf0[i]; + 800f6bc: f857 3021 ldr.w r3, [r7, r1, lsl #2] + 800f6c0: f849 3b04 str.w r3, [r9], #4 + xbuf1[rgroup*(M+2) + i] = xbuf1[i]; + 800f6c4: f85c 3021 ldr.w r3, [ip, r1, lsl #2] + for (i = 0; i < rgroup; i++) { + 800f6c8: 3101 adds r1, #1 + xbuf1[rgroup*(M+2) + i] = xbuf1[i]; + 800f6ca: f846 3b04 str.w r3, [r6], #4 + for (i = 0; i < rgroup; i++) { + 800f6ce: e7e3 b.n 800f698 + +0800f6d0 : + +METHODDEF(void) +process_data_crank_post (j_decompress_ptr cinfo, + JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, + JDIMENSION out_rows_avail) +{ + 800f6d0: b51f push {r0, r1, r2, r3, r4, lr} + (*cinfo->post->post_process_data) (cinfo, (JSAMPIMAGE) NULL, + 800f6d2: f8d0 41c4 ldr.w r4, [r0, #452] ; 0x1c4 + 800f6d6: 9100 str r1, [sp, #0] + 800f6d8: e9cd 2301 strd r2, r3, [sp, #4] + 800f6dc: 2300 movs r3, #0 + 800f6de: 6864 ldr r4, [r4, #4] + 800f6e0: 461a mov r2, r3 + 800f6e2: 4619 mov r1, r3 + 800f6e4: 47a0 blx r4 + (JDIMENSION *) NULL, (JDIMENSION) 0, + output_buf, out_row_ctr, out_rows_avail); +} + 800f6e6: b004 add sp, #16 + 800f6e8: bd10 pop {r4, pc} + ... + +0800f6ec : + * Initialize main buffer controller. + */ + +GLOBAL(void) +jinit_d_main_controller (j_decompress_ptr cinfo, boolean need_full_buffer) +{ + 800f6ec: e92d 4ff8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} + my_main_ptr main; + int ci, rgroup, ngroups; + jpeg_component_info *compptr; + + main = (my_main_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 800f6f0: 6843 ldr r3, [r0, #4] +{ + 800f6f2: 460d mov r5, r1 + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 800f6f4: 2250 movs r2, #80 ; 0x50 + 800f6f6: 2101 movs r1, #1 + 800f6f8: 681b ldr r3, [r3, #0] +{ + 800f6fa: 4604 mov r4, r0 + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 800f6fc: 4798 blx r3 + SIZEOF(my_main_controller)); + cinfo->main = (struct jpeg_d_main_controller *) main; + main->pub.start_pass = start_pass_main; + 800f6fe: 4b3a ldr r3, [pc, #232] ; (800f7e8 ) + cinfo->main = (struct jpeg_d_main_controller *) main; + 800f700: f8c4 01bc str.w r0, [r4, #444] ; 0x1bc + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 800f704: 4606 mov r6, r0 + main->pub.start_pass = start_pass_main; + 800f706: 6003 str r3, [r0, #0] + + if (need_full_buffer) /* shouldn't happen */ + 800f708: b12d cbz r5, 800f716 + ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); + 800f70a: 6823 ldr r3, [r4, #0] + 800f70c: 2203 movs r2, #3 + 800f70e: 4620 mov r0, r4 + 800f710: 615a str r2, [r3, #20] + 800f712: 681b ldr r3, [r3, #0] + 800f714: 4798 blx r3 + + /* Allocate the workspace. + * ngroups is the number of row groups we need. + */ + if (cinfo->upsample->need_context_rows) { + 800f716: f8d4 31d8 ldr.w r3, [r4, #472] ; 0x1d8 + if (cinfo->min_DCT_v_scaled_size < 2) /* unsupported, see comments above */ + 800f71a: f8d4 5144 ldr.w r5, [r4, #324] ; 0x144 + if (cinfo->upsample->need_context_rows) { + 800f71e: 689b ldr r3, [r3, #8] + 800f720: b31b cbz r3, 800f76a + if (cinfo->min_DCT_v_scaled_size < 2) /* unsupported, see comments above */ + 800f722: 2d01 cmp r5, #1 + 800f724: dc05 bgt.n 800f732 + ERREXIT(cinfo, JERR_NOTIMPL); + 800f726: 6823 ldr r3, [r4, #0] + 800f728: 2230 movs r2, #48 ; 0x30 + 800f72a: 4620 mov r0, r4 + 800f72c: 615a str r2, [r3, #20] + 800f72e: 681b ldr r3, [r3, #0] + 800f730: 4798 blx r3 + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 800f732: 6a62 ldr r2, [r4, #36] ; 0x24 + 800f734: 2101 movs r1, #1 + 800f736: 6863 ldr r3, [r4, #4] + 800f738: 4620 mov r0, r4 + 800f73a: 00d2 lsls r2, r2, #3 + my_main_ptr main = (my_main_ptr) cinfo->main; + 800f73c: f8d4 71bc ldr.w r7, [r4, #444] ; 0x1bc + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 800f740: 681b ldr r3, [r3, #0] + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + 800f742: f04f 0800 mov.w r8, #0 + int M = cinfo->min_DCT_v_scaled_size; + 800f746: f8d4 9144 ldr.w r9, [r4, #324] ; 0x144 + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 800f74a: 4798 blx r3 + main->xbuffer[1] = main->xbuffer[0] + cinfo->num_components; + 800f74c: 6a63 ldr r3, [r4, #36] ; 0x24 + main->xbuffer[0] = (JSAMPIMAGE) + 800f74e: 63b8 str r0, [r7, #56] ; 0x38 + 2 * (rgroup * (M + 4)) * SIZEOF(JSAMPROW)); + 800f750: f109 0904 add.w r9, r9, #4 + main->xbuffer[1] = main->xbuffer[0] + cinfo->num_components; + 800f754: eb00 0083 add.w r0, r0, r3, lsl #2 + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + 800f758: f8d4 50d8 ldr.w r5, [r4, #216] ; 0xd8 + main->xbuffer[1] = main->xbuffer[0] + cinfo->num_components; + 800f75c: 63f8 str r0, [r7, #60] ; 0x3c + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + 800f75e: 6a62 ldr r2, [r4, #36] ; 0x24 + cinfo->min_DCT_v_scaled_size; /* height of a row group of component */ + 800f760: f8d4 3144 ldr.w r3, [r4, #324] ; 0x144 + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + 800f764: 4590 cmp r8, r2 + 800f766: db0a blt.n 800f77e + alloc_funny_pointers(cinfo); /* Alloc space for xbuffer[] lists */ + ngroups = cinfo->min_DCT_v_scaled_size + 2; + 800f768: 1c9d adds r5, r3, #2 + } else { + ngroups = cinfo->min_DCT_v_scaled_size; + } + + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + 800f76a: f8d4 70d8 ldr.w r7, [r4, #216] ; 0xd8 + 800f76e: 3604 adds r6, #4 + 800f770: f04f 0800 mov.w r8, #0 + 800f774: 6a63 ldr r3, [r4, #36] ; 0x24 + 800f776: 4543 cmp r3, r8 + 800f778: dc1d bgt.n 800f7b6 + main->buffer[ci] = (*cinfo->mem->alloc_sarray) + ((j_common_ptr) cinfo, JPOOL_IMAGE, + compptr->width_in_blocks * compptr->DCT_h_scaled_size, + (JDIMENSION) (rgroup * ngroups)); + } +} + 800f77a: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} + rgroup = (compptr->v_samp_factor * compptr->DCT_v_scaled_size) / + 800f77e: 6aa9 ldr r1, [r5, #40] ; 0x28 + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 800f780: 4620 mov r0, r4 + rgroup = (compptr->v_samp_factor * compptr->DCT_v_scaled_size) / + 800f782: 68ea ldr r2, [r5, #12] + ci++, compptr++) { + 800f784: 3558 adds r5, #88 ; 0x58 + rgroup = (compptr->v_samp_factor * compptr->DCT_v_scaled_size) / + 800f786: 434a muls r2, r1 + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 800f788: 2101 movs r1, #1 + rgroup = (compptr->v_samp_factor * compptr->DCT_v_scaled_size) / + 800f78a: fb92 fbf3 sdiv fp, r2, r3 + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 800f78e: 6863 ldr r3, [r4, #4] + 2 * (rgroup * (M + 4)) * SIZEOF(JSAMPROW)); + 800f790: fb0b fa09 mul.w sl, fp, r9 + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 800f794: 681b ldr r3, [r3, #0] + 800f796: ea4f 02ca mov.w r2, sl, lsl #3 + 800f79a: 4798 blx r3 + main->xbuffer[0][ci] = xbuf; + 800f79c: 6bbb ldr r3, [r7, #56] ; 0x38 + xbuf += rgroup; /* want one row group at negative offsets */ + 800f79e: eb00 008b add.w r0, r0, fp, lsl #2 + main->xbuffer[0][ci] = xbuf; + 800f7a2: f843 0028 str.w r0, [r3, r8, lsl #2] + xbuf += rgroup * (M + 4); + 800f7a6: eb00 008a add.w r0, r0, sl, lsl #2 + main->xbuffer[1][ci] = xbuf; + 800f7aa: 6bfb ldr r3, [r7, #60] ; 0x3c + 800f7ac: f843 0028 str.w r0, [r3, r8, lsl #2] + ci++, compptr++) { + 800f7b0: f108 0801 add.w r8, r8, #1 + 800f7b4: e7d3 b.n 800f75e + rgroup = (compptr->v_samp_factor * compptr->DCT_v_scaled_size) / + 800f7b6: 6aba ldr r2, [r7, #40] ; 0x28 + ci++, compptr++) { + 800f7b8: f108 0801 add.w r8, r8, #1 + rgroup = (compptr->v_samp_factor * compptr->DCT_v_scaled_size) / + 800f7bc: 68fb ldr r3, [r7, #12] + ci++, compptr++) { + 800f7be: 3758 adds r7, #88 ; 0x58 + main->buffer[ci] = (*cinfo->mem->alloc_sarray) + 800f7c0: f857 1c34 ldr.w r1, [r7, #-52] + rgroup = (compptr->v_samp_factor * compptr->DCT_v_scaled_size) / + 800f7c4: 4353 muls r3, r2 + 800f7c6: f8d4 2144 ldr.w r2, [r4, #324] ; 0x144 + main->buffer[ci] = (*cinfo->mem->alloc_sarray) + 800f7ca: 6860 ldr r0, [r4, #4] + rgroup = (compptr->v_samp_factor * compptr->DCT_v_scaled_size) / + 800f7cc: fb93 f3f2 sdiv r3, r3, r2 + main->buffer[ci] = (*cinfo->mem->alloc_sarray) + 800f7d0: f857 2c3c ldr.w r2, [r7, #-60] + 800f7d4: 436b muls r3, r5 + 800f7d6: f8d0 9008 ldr.w r9, [r0, #8] + 800f7da: 4620 mov r0, r4 + 800f7dc: 434a muls r2, r1 + 800f7de: 2101 movs r1, #1 + 800f7e0: 47c8 blx r9 + 800f7e2: f846 0f04 str.w r0, [r6, #4]! + ci++, compptr++) { + 800f7e6: e7c5 b.n 800f774 + 800f7e8: 0800f37d .word 0x0800f37d + +0800f7ec : + +LOCAL(boolean) +get_sof (j_decompress_ptr cinfo, boolean is_baseline, boolean is_prog, + boolean is_arith) +/* Process a SOFn marker */ +{ + 800f7ec: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} + INT32 length; + int c, ci; + jpeg_component_info * compptr; + INPUT_VARS(cinfo); + 800f7f0: 6986 ldr r6, [r0, #24] +{ + 800f7f2: 4604 mov r4, r0 + INPUT_VARS(cinfo); + 800f7f4: e9d6 c500 ldrd ip, r5, [r6] + + cinfo->is_baseline = is_baseline; + cinfo->progressive_mode = is_prog; + 800f7f8: e9c0 1237 strd r1, r2, [r0, #220] ; 0xdc + cinfo->arith_code = is_arith; + 800f7fc: f8c0 30e4 str.w r3, [r0, #228] ; 0xe4 + + INPUT_2BYTES(cinfo, length, return FALSE); + 800f800: b93d cbnz r5, 800f812 + 800f802: 68f3 ldr r3, [r6, #12] + 800f804: 4798 blx r3 + 800f806: b910 cbnz r0, 800f80e + 800f808: 2000 movs r0, #0 + + cinfo->marker->saw_SOF = TRUE; + + INPUT_SYNC(cinfo); + return TRUE; +} + 800f80a: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + INPUT_2BYTES(cinfo, length, return FALSE); + 800f80e: e9d6 c500 ldrd ip, r5, [r6] + 800f812: 1e6b subs r3, r5, #1 + 800f814: f89c 7000 ldrb.w r7, [ip] + 800f818: f000 8088 beq.w 800f92c + 800f81c: f10c 0501 add.w r5, ip, #1 + INPUT_BYTE(cinfo, cinfo->data_precision, return FALSE); + 800f820: 3b01 subs r3, #1 + INPUT_2BYTES(cinfo, length, return FALSE); + 800f822: f895 8000 ldrb.w r8, [r5] + INPUT_BYTE(cinfo, cinfo->data_precision, return FALSE); + 800f826: f000 808a beq.w 800f93e + INPUT_2BYTES(cinfo, length, return FALSE); + 800f82a: 3501 adds r5, #1 + INPUT_BYTE(cinfo, cinfo->data_precision, return FALSE); + 800f82c: 782a ldrb r2, [r5, #0] + INPUT_2BYTES(cinfo, cinfo->image_height, return FALSE); + 800f82e: 3b01 subs r3, #1 + INPUT_BYTE(cinfo, cinfo->data_precision, return FALSE); + 800f830: f8c4 20d4 str.w r2, [r4, #212] ; 0xd4 + INPUT_2BYTES(cinfo, cinfo->image_height, return FALSE); + 800f834: f000 808c beq.w 800f950 + INPUT_BYTE(cinfo, cinfo->data_precision, return FALSE); + 800f838: 3501 adds r5, #1 + INPUT_2BYTES(cinfo, cinfo->image_height, return FALSE); + 800f83a: 782a ldrb r2, [r5, #0] + 800f83c: 3b01 subs r3, #1 + 800f83e: ea4f 2202 mov.w r2, r2, lsl #8 + 800f842: 6222 str r2, [r4, #32] + 800f844: f000 808d beq.w 800f962 + 800f848: 3501 adds r5, #1 + 800f84a: 7829 ldrb r1, [r5, #0] + INPUT_2BYTES(cinfo, cinfo->image_width, return FALSE); + 800f84c: 3b01 subs r3, #1 + INPUT_2BYTES(cinfo, cinfo->image_height, return FALSE); + 800f84e: 6a22 ldr r2, [r4, #32] + 800f850: 440a add r2, r1 + 800f852: 6222 str r2, [r4, #32] + INPUT_2BYTES(cinfo, cinfo->image_width, return FALSE); + 800f854: f000 808e beq.w 800f974 + INPUT_2BYTES(cinfo, cinfo->image_height, return FALSE); + 800f858: 3501 adds r5, #1 + INPUT_2BYTES(cinfo, cinfo->image_width, return FALSE); + 800f85a: 782a ldrb r2, [r5, #0] + 800f85c: 3b01 subs r3, #1 + 800f85e: ea4f 2202 mov.w r2, r2, lsl #8 + 800f862: 61e2 str r2, [r4, #28] + 800f864: f000 808f beq.w 800f986 + 800f868: 3501 adds r5, #1 + 800f86a: 7829 ldrb r1, [r5, #0] + INPUT_BYTE(cinfo, cinfo->num_components, return FALSE); + 800f86c: 3b01 subs r3, #1 + INPUT_2BYTES(cinfo, cinfo->image_width, return FALSE); + 800f86e: 69e2 ldr r2, [r4, #28] + 800f870: 440a add r2, r1 + 800f872: 61e2 str r2, [r4, #28] + INPUT_BYTE(cinfo, cinfo->num_components, return FALSE); + 800f874: f000 8090 beq.w 800f998 + INPUT_2BYTES(cinfo, cinfo->image_width, return FALSE); + 800f878: 3501 adds r5, #1 + INPUT_BYTE(cinfo, cinfo->num_components, return FALSE); + 800f87a: f103 39ff add.w r9, r3, #4294967295 + 800f87e: f815 3b01 ldrb.w r3, [r5], #1 + TRACEMS4(cinfo, 1, JTRC_SOF, cinfo->unread_marker, + 800f882: f8d4 21b4 ldr.w r2, [r4, #436] ; 0x1b4 + 800f886: 2101 movs r1, #1 + INPUT_BYTE(cinfo, cinfo->num_components, return FALSE); + 800f888: 6263 str r3, [r4, #36] ; 0x24 + TRACEMS4(cinfo, 1, JTRC_SOF, cinfo->unread_marker, + 800f88a: 4620 mov r0, r4 + 800f88c: 6823 ldr r3, [r4, #0] + INPUT_2BYTES(cinfo, length, return FALSE); + 800f88e: eb08 2807 add.w r8, r8, r7, lsl #8 + TRACEMS4(cinfo, 1, JTRC_SOF, cinfo->unread_marker, + 800f892: 619a str r2, [r3, #24] + length -= 8; + 800f894: f1a8 0808 sub.w r8, r8, #8 + TRACEMS4(cinfo, 1, JTRC_SOF, cinfo->unread_marker, + 800f898: 69e2 ldr r2, [r4, #28] + 800f89a: 61da str r2, [r3, #28] + 800f89c: 6a22 ldr r2, [r4, #32] + 800f89e: 621a str r2, [r3, #32] + 800f8a0: 6a62 ldr r2, [r4, #36] ; 0x24 + 800f8a2: 625a str r2, [r3, #36] ; 0x24 + 800f8a4: 2266 movs r2, #102 ; 0x66 + 800f8a6: 615a str r2, [r3, #20] + 800f8a8: 685b ldr r3, [r3, #4] + 800f8aa: 4798 blx r3 + if (cinfo->marker->saw_SOF) + 800f8ac: f8d4 31cc ldr.w r3, [r4, #460] ; 0x1cc + 800f8b0: 691b ldr r3, [r3, #16] + 800f8b2: b12b cbz r3, 800f8c0 + ERREXIT(cinfo, JERR_SOF_DUPLICATE); + 800f8b4: 6823 ldr r3, [r4, #0] + 800f8b6: 223c movs r2, #60 ; 0x3c + 800f8b8: 4620 mov r0, r4 + 800f8ba: 615a str r2, [r3, #20] + 800f8bc: 681b ldr r3, [r3, #0] + 800f8be: 4798 blx r3 + if (cinfo->image_height <= 0 || cinfo->image_width <= 0 + 800f8c0: 6a23 ldr r3, [r4, #32] + 800f8c2: b123 cbz r3, 800f8ce + 800f8c4: 69e3 ldr r3, [r4, #28] + 800f8c6: b113 cbz r3, 800f8ce + || cinfo->num_components <= 0) + 800f8c8: 6a63 ldr r3, [r4, #36] ; 0x24 + 800f8ca: 2b00 cmp r3, #0 + 800f8cc: dc05 bgt.n 800f8da + ERREXIT(cinfo, JERR_EMPTY_IMAGE); + 800f8ce: 6823 ldr r3, [r4, #0] + 800f8d0: 2221 movs r2, #33 ; 0x21 + 800f8d2: 4620 mov r0, r4 + 800f8d4: 615a str r2, [r3, #20] + 800f8d6: 681b ldr r3, [r3, #0] + 800f8d8: 4798 blx r3 + if (length != (cinfo->num_components * 3)) + 800f8da: 6a63 ldr r3, [r4, #36] ; 0x24 + 800f8dc: eb03 0343 add.w r3, r3, r3, lsl #1 + 800f8e0: 4543 cmp r3, r8 + 800f8e2: d005 beq.n 800f8f0 + ERREXIT(cinfo, JERR_BAD_LENGTH); + 800f8e4: 6823 ldr r3, [r4, #0] + 800f8e6: 220c movs r2, #12 + 800f8e8: 4620 mov r0, r4 + 800f8ea: 615a str r2, [r3, #20] + 800f8ec: 681b ldr r3, [r3, #0] + 800f8ee: 4798 blx r3 + if (cinfo->comp_info == NULL) /* do only once, even if suspend */ + 800f8f0: f8d4 30d8 ldr.w r3, [r4, #216] ; 0xd8 + 800f8f4: b94b cbnz r3, 800f90a + cinfo->comp_info = (jpeg_component_info *) (*cinfo->mem->alloc_small) + 800f8f6: 6a62 ldr r2, [r4, #36] ; 0x24 + 800f8f8: 2158 movs r1, #88 ; 0x58 + 800f8fa: 6863 ldr r3, [r4, #4] + 800f8fc: 4620 mov r0, r4 + 800f8fe: 434a muls r2, r1 + 800f900: 2101 movs r1, #1 + 800f902: 681b ldr r3, [r3, #0] + 800f904: 4798 blx r3 + 800f906: f8c4 00d8 str.w r0, [r4, #216] ; 0xd8 + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + 800f90a: f8d4 70d8 ldr.w r7, [r4, #216] ; 0xd8 + 800f90e: f04f 0800 mov.w r8, #0 + TRACEMS4(cinfo, 1, JTRC_SOF_COMPONENT, + 800f912: f04f 0a67 mov.w sl, #103 ; 0x67 + 800f916: 3758 adds r7, #88 ; 0x58 + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + 800f918: 6a63 ldr r3, [r4, #36] ; 0x24 + 800f91a: 4543 cmp r3, r8 + 800f91c: dc45 bgt.n 800f9aa + cinfo->marker->saw_SOF = TRUE; + 800f91e: f8d4 31cc ldr.w r3, [r4, #460] ; 0x1cc + 800f922: 2001 movs r0, #1 + 800f924: 6118 str r0, [r3, #16] + INPUT_SYNC(cinfo); + 800f926: e9c6 5900 strd r5, r9, [r6] + return TRUE; + 800f92a: e76e b.n 800f80a + INPUT_2BYTES(cinfo, length, return FALSE); + 800f92c: 68f3 ldr r3, [r6, #12] + 800f92e: 4620 mov r0, r4 + 800f930: 4798 blx r3 + 800f932: 2800 cmp r0, #0 + 800f934: f43f af68 beq.w 800f808 + 800f938: e9d6 5300 ldrd r5, r3, [r6] + 800f93c: e770 b.n 800f820 + INPUT_BYTE(cinfo, cinfo->data_precision, return FALSE); + 800f93e: 68f3 ldr r3, [r6, #12] + 800f940: 4620 mov r0, r4 + 800f942: 4798 blx r3 + 800f944: 2800 cmp r0, #0 + 800f946: f43f af5f beq.w 800f808 + 800f94a: e9d6 5300 ldrd r5, r3, [r6] + 800f94e: e76d b.n 800f82c + INPUT_2BYTES(cinfo, cinfo->image_height, return FALSE); + 800f950: 68f3 ldr r3, [r6, #12] + 800f952: 4620 mov r0, r4 + 800f954: 4798 blx r3 + 800f956: 2800 cmp r0, #0 + 800f958: f43f af56 beq.w 800f808 + 800f95c: e9d6 5300 ldrd r5, r3, [r6] + 800f960: e76b b.n 800f83a + 800f962: 68f3 ldr r3, [r6, #12] + 800f964: 4620 mov r0, r4 + 800f966: 4798 blx r3 + 800f968: 2800 cmp r0, #0 + 800f96a: f43f af4d beq.w 800f808 + 800f96e: e9d6 5300 ldrd r5, r3, [r6] + 800f972: e76a b.n 800f84a + INPUT_2BYTES(cinfo, cinfo->image_width, return FALSE); + 800f974: 68f3 ldr r3, [r6, #12] + 800f976: 4620 mov r0, r4 + 800f978: 4798 blx r3 + 800f97a: 2800 cmp r0, #0 + 800f97c: f43f af44 beq.w 800f808 + 800f980: e9d6 5300 ldrd r5, r3, [r6] + 800f984: e769 b.n 800f85a + 800f986: 68f3 ldr r3, [r6, #12] + 800f988: 4620 mov r0, r4 + 800f98a: 4798 blx r3 + 800f98c: 2800 cmp r0, #0 + 800f98e: f43f af3b beq.w 800f808 + 800f992: e9d6 5300 ldrd r5, r3, [r6] + 800f996: e768 b.n 800f86a + INPUT_BYTE(cinfo, cinfo->num_components, return FALSE); + 800f998: 68f3 ldr r3, [r6, #12] + 800f99a: 4620 mov r0, r4 + 800f99c: 4798 blx r3 + 800f99e: 2800 cmp r0, #0 + 800f9a0: f43f af32 beq.w 800f808 + 800f9a4: e9d6 5300 ldrd r5, r3, [r6] + 800f9a8: e767 b.n 800f87a + compptr->component_index = ci; + 800f9aa: f847 8c54 str.w r8, [r7, #-84] + INPUT_BYTE(cinfo, compptr->component_id, return FALSE); + 800f9ae: f1b9 0f00 cmp.w r9, #0 + 800f9b2: d107 bne.n 800f9c4 + 800f9b4: 68f3 ldr r3, [r6, #12] + 800f9b6: 4620 mov r0, r4 + 800f9b8: 4798 blx r3 + 800f9ba: 2800 cmp r0, #0 + 800f9bc: f43f af24 beq.w 800f808 + 800f9c0: e9d6 5900 ldrd r5, r9, [r6] + 800f9c4: 782b ldrb r3, [r5, #0] + 800f9c6: f847 3c58 str.w r3, [r7, #-88] + INPUT_BYTE(cinfo, c, return FALSE); + 800f9ca: f1b9 0301 subs.w r3, r9, #1 + 800f9ce: d029 beq.n 800fa24 + INPUT_BYTE(cinfo, compptr->component_id, return FALSE); + 800f9d0: 3501 adds r5, #1 + INPUT_BYTE(cinfo, c, return FALSE); + 800f9d2: 782a ldrb r2, [r5, #0] + INPUT_BYTE(cinfo, compptr->quant_tbl_no, return FALSE); + 800f9d4: 3b01 subs r3, #1 + compptr->h_samp_factor = (c >> 4) & 15; + 800f9d6: ea4f 1122 mov.w r1, r2, asr #4 + compptr->v_samp_factor = (c ) & 15; + 800f9da: f002 020f and.w r2, r2, #15 + compptr->h_samp_factor = (c >> 4) & 15; + 800f9de: f847 1c50 str.w r1, [r7, #-80] + compptr->v_samp_factor = (c ) & 15; + 800f9e2: f847 2c4c str.w r2, [r7, #-76] + INPUT_BYTE(cinfo, compptr->quant_tbl_no, return FALSE); + 800f9e6: d026 beq.n 800fa36 + INPUT_BYTE(cinfo, c, return FALSE); + 800f9e8: 3501 adds r5, #1 + INPUT_BYTE(cinfo, compptr->quant_tbl_no, return FALSE); + 800f9ea: f103 39ff add.w r9, r3, #4294967295 + 800f9ee: f815 3b01 ldrb.w r3, [r5], #1 + TRACEMS4(cinfo, 1, JTRC_SOF_COMPONENT, + 800f9f2: f857 2c58 ldr.w r2, [r7, #-88] + 800f9f6: 2101 movs r1, #1 + INPUT_BYTE(cinfo, compptr->quant_tbl_no, return FALSE); + 800f9f8: f847 3c48 str.w r3, [r7, #-72] + TRACEMS4(cinfo, 1, JTRC_SOF_COMPONENT, + 800f9fc: 4620 mov r0, r4 + 800f9fe: 6823 ldr r3, [r4, #0] + ci++, compptr++) { + 800fa00: f108 0801 add.w r8, r8, #1 + 800fa04: 3758 adds r7, #88 ; 0x58 + TRACEMS4(cinfo, 1, JTRC_SOF_COMPONENT, + 800fa06: 619a str r2, [r3, #24] + 800fa08: f857 2ca8 ldr.w r2, [r7, #-168] + 800fa0c: 61da str r2, [r3, #28] + 800fa0e: f857 2ca4 ldr.w r2, [r7, #-164] + 800fa12: 621a str r2, [r3, #32] + 800fa14: f857 2ca0 ldr.w r2, [r7, #-160] + 800fa18: f8c3 a014 str.w sl, [r3, #20] + 800fa1c: 625a str r2, [r3, #36] ; 0x24 + 800fa1e: 685b ldr r3, [r3, #4] + 800fa20: 4798 blx r3 + ci++, compptr++) { + 800fa22: e779 b.n 800f918 + INPUT_BYTE(cinfo, c, return FALSE); + 800fa24: 68f3 ldr r3, [r6, #12] + 800fa26: 4620 mov r0, r4 + 800fa28: 4798 blx r3 + 800fa2a: 2800 cmp r0, #0 + 800fa2c: f43f aeec beq.w 800f808 + 800fa30: e9d6 5300 ldrd r5, r3, [r6] + 800fa34: e7cd b.n 800f9d2 + INPUT_BYTE(cinfo, compptr->quant_tbl_no, return FALSE); + 800fa36: 68f3 ldr r3, [r6, #12] + 800fa38: 4620 mov r0, r4 + 800fa3a: 4798 blx r3 + 800fa3c: 2800 cmp r0, #0 + 800fa3e: f43f aee3 beq.w 800f808 + 800fa42: e9d6 5300 ldrd r5, r3, [r6] + 800fa46: e7d0 b.n 800f9ea + +0800fa48 : + unsigned int datalen, INT32 remaining) +/* Examine first few bytes from an APP0. + * Take appropriate action if it is a JFIF marker. + * datalen is # of bytes at data[], remaining is length of rest of marker data. + */ +{ + 800fa48: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} + INT32 totallen = (INT32) datalen + remaining; + + if (datalen >= APP0_DATA_LEN && + 800fa4c: 2a0d cmp r2, #13 +{ + 800fa4e: 460c mov r4, r1 + * (We used to treat this as an error, but now it's a nonfatal warning, + * because some bozo at Hijaak couldn't read the spec.) + * Minor version should be 0..2, but process anyway if newer. + */ + if (cinfo->JFIF_major_version != 1) + WARNMS2(cinfo, JWRN_JFIF_MAJOR, + 800fa50: 6801 ldr r1, [r0, #0] + INT32 totallen = (INT32) datalen + remaining; + 800fa52: eb02 0603 add.w r6, r2, r3 +{ + 800fa56: 4605 mov r5, r0 + WARNMS2(cinfo, JWRN_JFIF_MAJOR, + 800fa58: 684b ldr r3, [r1, #4] + if (datalen >= APP0_DATA_LEN && + 800fa5a: d96d bls.n 800fb38 + 800fa5c: 7822 ldrb r2, [r4, #0] + 800fa5e: 2a4a cmp r2, #74 ; 0x4a + 800fa60: f040 808f bne.w 800fb82 + GETJOCTET(data[0]) == 0x4A && + 800fa64: 7862 ldrb r2, [r4, #1] + 800fa66: 2a46 cmp r2, #70 ; 0x46 + 800fa68: f040 808b bne.w 800fb82 + GETJOCTET(data[1]) == 0x46 && + 800fa6c: 78a2 ldrb r2, [r4, #2] + 800fa6e: 2a49 cmp r2, #73 ; 0x49 + 800fa70: d16a bne.n 800fb48 + GETJOCTET(data[2]) == 0x49 && + 800fa72: 78e2 ldrb r2, [r4, #3] + 800fa74: 2a46 cmp r2, #70 ; 0x46 + 800fa76: d167 bne.n 800fb48 + GETJOCTET(data[3]) == 0x46 && + 800fa78: 7922 ldrb r2, [r4, #4] + 800fa7a: 2a00 cmp r2, #0 + 800fa7c: d164 bne.n 800fb48 + cinfo->saw_JFIF_marker = TRUE; + 800fa7e: 2201 movs r2, #1 + 800fa80: f8c0 211c str.w r2, [r0, #284] ; 0x11c + cinfo->JFIF_major_version = GETJOCTET(data[5]); + 800fa84: 7962 ldrb r2, [r4, #5] + 800fa86: f880 2120 strb.w r2, [r0, #288] ; 0x120 + if (cinfo->JFIF_major_version != 1) + 800fa8a: 2a01 cmp r2, #1 + cinfo->JFIF_minor_version = GETJOCTET(data[6]); + 800fa8c: f894 c006 ldrb.w ip, [r4, #6] + 800fa90: f880 c121 strb.w ip, [r0, #289] ; 0x121 + cinfo->density_unit = GETJOCTET(data[7]); + 800fa94: 79e7 ldrb r7, [r4, #7] + 800fa96: f880 7122 strb.w r7, [r0, #290] ; 0x122 + cinfo->X_density = (GETJOCTET(data[8]) << 8) + GETJOCTET(data[9]); + 800fa9a: f894 e008 ldrb.w lr, [r4, #8] + 800fa9e: 7a67 ldrb r7, [r4, #9] + 800faa0: eb07 270e add.w r7, r7, lr, lsl #8 + 800faa4: f8a0 7124 strh.w r7, [r0, #292] ; 0x124 + cinfo->Y_density = (GETJOCTET(data[10]) << 8) + GETJOCTET(data[11]); + 800faa8: f894 e00a ldrb.w lr, [r4, #10] + 800faac: 7ae7 ldrb r7, [r4, #11] + 800faae: eb07 270e add.w r7, r7, lr, lsl #8 + 800fab2: f8a0 7126 strh.w r7, [r0, #294] ; 0x126 + if (cinfo->JFIF_major_version != 1) + 800fab6: d007 beq.n 800fac8 + WARNMS2(cinfo, JWRN_JFIF_MAJOR, + 800fab8: 277a movs r7, #122 ; 0x7a + 800faba: f8c1 c01c str.w ip, [r1, #28] + 800fabe: e9c1 7205 strd r7, r2, [r1, #20] + 800fac2: f04f 31ff mov.w r1, #4294967295 + 800fac6: 4798 blx r3 + cinfo->JFIF_major_version, cinfo->JFIF_minor_version); + /* Generate trace messages */ + TRACEMS5(cinfo, 1, JTRC_JFIF, + 800fac8: 682b ldr r3, [r5, #0] + 800faca: 2101 movs r1, #1 + 800facc: f895 2120 ldrb.w r2, [r5, #288] ; 0x120 + 800fad0: 4628 mov r0, r5 + 800fad2: 619a str r2, [r3, #24] + 800fad4: f895 2121 ldrb.w r2, [r5, #289] ; 0x121 + 800fad8: 61da str r2, [r3, #28] + 800fada: f8b5 2124 ldrh.w r2, [r5, #292] ; 0x124 + 800fade: 621a str r2, [r3, #32] + 800fae0: f8b5 2126 ldrh.w r2, [r5, #294] ; 0x126 + 800fae4: 625a str r2, [r3, #36] ; 0x24 + 800fae6: f895 2122 ldrb.w r2, [r5, #290] ; 0x122 + 800faea: 629a str r2, [r3, #40] ; 0x28 + 800faec: 2259 movs r2, #89 ; 0x59 + 800faee: 615a str r2, [r3, #20] + 800faf0: 685b ldr r3, [r3, #4] + 800faf2: 4798 blx r3 + cinfo->JFIF_major_version, cinfo->JFIF_minor_version, + cinfo->X_density, cinfo->Y_density, cinfo->density_unit); + /* Validate thumbnail dimensions and issue appropriate messages */ + if (GETJOCTET(data[12]) | GETJOCTET(data[13])) + 800faf4: 7b23 ldrb r3, [r4, #12] + 800faf6: 7b62 ldrb r2, [r4, #13] + 800faf8: 4313 orrs r3, r2 + 800fafa: d00a beq.n 800fb12 + TRACEMS2(cinfo, 1, JTRC_JFIF_THUMBNAIL, + 800fafc: 682b ldr r3, [r5, #0] + 800fafe: 225c movs r2, #92 ; 0x5c + 800fb00: 2101 movs r1, #1 + 800fb02: 4628 mov r0, r5 + 800fb04: 615a str r2, [r3, #20] + 800fb06: 7b22 ldrb r2, [r4, #12] + 800fb08: 619a str r2, [r3, #24] + 800fb0a: 7b62 ldrb r2, [r4, #13] + 800fb0c: 61da str r2, [r3, #28] + 800fb0e: 685b ldr r3, [r3, #4] + 800fb10: 4798 blx r3 + GETJOCTET(data[12]), GETJOCTET(data[13])); + totallen -= APP0_DATA_LEN; + if (totallen != + ((INT32)GETJOCTET(data[12]) * (INT32)GETJOCTET(data[13]) * (INT32) 3)) + 800fb12: 7b23 ldrb r3, [r4, #12] + totallen -= APP0_DATA_LEN; + 800fb14: 3e0e subs r6, #14 + ((INT32)GETJOCTET(data[12]) * (INT32)GETJOCTET(data[13]) * (INT32) 3)) + 800fb16: 7b62 ldrb r2, [r4, #13] + 800fb18: fb13 f302 smulbb r3, r3, r2 + 800fb1c: eb03 0343 add.w r3, r3, r3, lsl #1 + if (totallen != + 800fb20: 42b3 cmp r3, r6 + 800fb22: d030 beq.n 800fb86 + TRACEMS1(cinfo, 1, JTRC_JFIF_BADTHUMBNAILSIZE, (int) totallen); + 800fb24: 682b ldr r3, [r5, #0] + 800fb26: 225a movs r2, #90 ; 0x5a + 800fb28: e9c3 2605 strd r2, r6, [r3, #20] + 800fb2c: 685b ldr r3, [r3, #4] + GETJOCTET(data[5]), (int) totallen); + break; + } + } else { + /* Start of APP0 does not match "JFIF" or "JFXX", or too short */ + TRACEMS1(cinfo, 1, JTRC_APP0, (int) totallen); + 800fb2e: 4628 mov r0, r5 + 800fb30: 2101 movs r1, #1 + } +} + 800fb32: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} + TRACEMS1(cinfo, 1, JTRC_APP0, (int) totallen); + 800fb36: 4718 bx r3 + } else if (datalen >= 6 && + 800fb38: 2a05 cmp r2, #5 + 800fb3a: d922 bls.n 800fb82 + 800fb3c: 7822 ldrb r2, [r4, #0] + 800fb3e: 2a4a cmp r2, #74 ; 0x4a + 800fb40: d11f bne.n 800fb82 + GETJOCTET(data[0]) == 0x4A && + 800fb42: 7862 ldrb r2, [r4, #1] + 800fb44: 2a46 cmp r2, #70 ; 0x46 + 800fb46: d11c bne.n 800fb82 + GETJOCTET(data[1]) == 0x46 && + 800fb48: 78a2 ldrb r2, [r4, #2] + 800fb4a: 2a58 cmp r2, #88 ; 0x58 + 800fb4c: d119 bne.n 800fb82 + GETJOCTET(data[2]) == 0x58 && + 800fb4e: 78e2 ldrb r2, [r4, #3] + 800fb50: 2a58 cmp r2, #88 ; 0x58 + 800fb52: d116 bne.n 800fb82 + GETJOCTET(data[3]) == 0x58 && + 800fb54: 7922 ldrb r2, [r4, #4] + 800fb56: b9a2 cbnz r2, 800fb82 + switch (GETJOCTET(data[5])) { + 800fb58: 7962 ldrb r2, [r4, #5] + 800fb5a: 2a11 cmp r2, #17 + 800fb5c: d007 beq.n 800fb6e + 800fb5e: 2a13 cmp r2, #19 + 800fb60: d007 beq.n 800fb72 + 800fb62: 2a10 cmp r2, #16 + 800fb64: d107 bne.n 800fb76 + TRACEMS1(cinfo, 1, JTRC_THUMB_JPEG, (int) totallen); + 800fb66: 226e movs r2, #110 ; 0x6e + TRACEMS1(cinfo, 1, JTRC_APP0, (int) totallen); + 800fb68: e9c1 2605 strd r2, r6, [r1, #20] + 800fb6c: e7df b.n 800fb2e + TRACEMS1(cinfo, 1, JTRC_THUMB_PALETTE, (int) totallen); + 800fb6e: 226f movs r2, #111 ; 0x6f + 800fb70: e7fa b.n 800fb68 + TRACEMS1(cinfo, 1, JTRC_THUMB_RGB, (int) totallen); + 800fb72: 2270 movs r2, #112 ; 0x70 + 800fb74: e7f8 b.n 800fb68 + TRACEMS2(cinfo, 1, JTRC_JFIF_EXTENSION, + 800fb76: 225b movs r2, #91 ; 0x5b + 800fb78: 614a str r2, [r1, #20] + 800fb7a: 7962 ldrb r2, [r4, #5] + 800fb7c: e9c1 2606 strd r2, r6, [r1, #24] + 800fb80: e7d5 b.n 800fb2e + TRACEMS1(cinfo, 1, JTRC_APP0, (int) totallen); + 800fb82: 224f movs r2, #79 ; 0x4f + 800fb84: e7f0 b.n 800fb68 +} + 800fb86: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + +0800fb8a : + unsigned int datalen, INT32 remaining) +/* Examine first few bytes from an APP14. + * Take appropriate action if it is an Adobe marker. + * datalen is # of bytes at data[], remaining is length of rest of marker data. + */ +{ + 800fb8a: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} + unsigned int version, flags0, flags1, transform; + + if (datalen >= APP14_DATA_LEN && + 800fb8e: 2a0b cmp r2, #11 + /* Found Adobe APP14 marker */ + version = (GETJOCTET(data[5]) << 8) + GETJOCTET(data[6]); + flags0 = (GETJOCTET(data[7]) << 8) + GETJOCTET(data[8]); + flags1 = (GETJOCTET(data[9]) << 8) + GETJOCTET(data[10]); + transform = GETJOCTET(data[11]); + TRACEMS4(cinfo, 1, JTRC_ADOBE, version, flags0, flags1, transform); + 800fb90: 6804 ldr r4, [r0, #0] +{ + 800fb92: 4605 mov r5, r0 + TRACEMS4(cinfo, 1, JTRC_ADOBE, version, flags0, flags1, transform); + 800fb94: 6866 ldr r6, [r4, #4] + if (datalen >= APP14_DATA_LEN && + 800fb96: d92b bls.n 800fbf0 + 800fb98: 780f ldrb r7, [r1, #0] + 800fb9a: 2f41 cmp r7, #65 ; 0x41 + 800fb9c: d128 bne.n 800fbf0 + GETJOCTET(data[0]) == 0x41 && + 800fb9e: 784f ldrb r7, [r1, #1] + 800fba0: 2f64 cmp r7, #100 ; 0x64 + 800fba2: d125 bne.n 800fbf0 + GETJOCTET(data[1]) == 0x64 && + 800fba4: 788f ldrb r7, [r1, #2] + 800fba6: 2f6f cmp r7, #111 ; 0x6f + 800fba8: d122 bne.n 800fbf0 + GETJOCTET(data[2]) == 0x6F && + 800fbaa: 78cf ldrb r7, [r1, #3] + 800fbac: 2f62 cmp r7, #98 ; 0x62 + 800fbae: d11f bne.n 800fbf0 + GETJOCTET(data[3]) == 0x62 && + 800fbb0: 790f ldrb r7, [r1, #4] + 800fbb2: 2f65 cmp r7, #101 ; 0x65 + 800fbb4: d11c bne.n 800fbf0 + flags0 = (GETJOCTET(data[7]) << 8) + GETJOCTET(data[8]); + 800fbb6: 79cb ldrb r3, [r1, #7] + 800fbb8: 7a0a ldrb r2, [r1, #8] + flags1 = (GETJOCTET(data[9]) << 8) + GETJOCTET(data[10]); + 800fbba: 7a4f ldrb r7, [r1, #9] + flags0 = (GETJOCTET(data[7]) << 8) + GETJOCTET(data[8]); + 800fbbc: eb02 2203 add.w r2, r2, r3, lsl #8 + flags1 = (GETJOCTET(data[9]) << 8) + GETJOCTET(data[10]); + 800fbc0: 7a8b ldrb r3, [r1, #10] + version = (GETJOCTET(data[5]) << 8) + GETJOCTET(data[6]); + 800fbc2: f891 c005 ldrb.w ip, [r1, #5] + flags1 = (GETJOCTET(data[9]) << 8) + GETJOCTET(data[10]); + 800fbc6: eb03 2307 add.w r3, r3, r7, lsl #8 + transform = GETJOCTET(data[11]); + 800fbca: 7acf ldrb r7, [r1, #11] + version = (GETJOCTET(data[5]) << 8) + GETJOCTET(data[6]); + 800fbcc: 7989 ldrb r1, [r1, #6] + TRACEMS4(cinfo, 1, JTRC_ADOBE, version, flags0, flags1, transform); + 800fbce: e9c4 3708 strd r3, r7, [r4, #32] + version = (GETJOCTET(data[5]) << 8) + GETJOCTET(data[6]); + 800fbd2: eb01 210c add.w r1, r1, ip, lsl #8 + TRACEMS4(cinfo, 1, JTRC_ADOBE, version, flags0, flags1, transform); + 800fbd6: 234e movs r3, #78 ; 0x4e + 800fbd8: e9c4 1206 strd r1, r2, [r4, #24] + 800fbdc: 6163 str r3, [r4, #20] + 800fbde: 2101 movs r1, #1 + 800fbe0: 47b0 blx r6 + cinfo->saw_Adobe_marker = TRUE; + 800fbe2: 2301 movs r3, #1 + cinfo->Adobe_transform = (UINT8) transform; + 800fbe4: f885 712c strb.w r7, [r5, #300] ; 0x12c + cinfo->saw_Adobe_marker = TRUE; + 800fbe8: f8c5 3128 str.w r3, [r5, #296] ; 0x128 + } else { + /* Start of APP14 does not match "Adobe", or too short */ + TRACEMS1(cinfo, 1, JTRC_APP14, (int) (datalen + remaining)); + } +} + 800fbec: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + TRACEMS1(cinfo, 1, JTRC_APP14, (int) (datalen + remaining)); + 800fbf0: 2150 movs r1, #80 ; 0x50 + 800fbf2: 441a add r2, r3 + 800fbf4: 4628 mov r0, r5 + 800fbf6: 4633 mov r3, r6 + 800fbf8: 6161 str r1, [r4, #20] + 800fbfa: 2101 movs r1, #1 + 800fbfc: 61a2 str r2, [r4, #24] +} + 800fbfe: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} + TRACEMS1(cinfo, 1, JTRC_APP14, (int) (datalen + remaining)); + 800fc02: 4718 bx r3 + +0800fc04 : + + +METHODDEF(boolean) +get_interesting_appn (j_decompress_ptr cinfo) +/* Process an APP0 or APP14 marker without saving it */ +{ + 800fc04: e92d 47ff stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, lr} + INT32 length; + JOCTET b[APPN_DATA_LEN]; + unsigned int i, numtoread; + INPUT_VARS(cinfo); + 800fc08: 6986 ldr r6, [r0, #24] +{ + 800fc0a: 4680 mov r8, r0 + INPUT_VARS(cinfo); + 800fc0c: e9d6 4700 ldrd r4, r7, [r6] + + INPUT_2BYTES(cinfo, length, return FALSE); + 800fc10: b947 cbnz r7, 800fc24 + 800fc12: 68f3 ldr r3, [r6, #12] + 800fc14: 4798 blx r3 + 800fc16: b918 cbnz r0, 800fc20 + 800fc18: 2000 movs r0, #0 + INPUT_SYNC(cinfo); + if (length > 0) + (*cinfo->src->skip_input_data) (cinfo, (long) length); + + return TRUE; +} + 800fc1a: b004 add sp, #16 + 800fc1c: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + INPUT_2BYTES(cinfo, length, return FALSE); + 800fc20: e9d6 4700 ldrd r4, r7, [r6] + 800fc24: f894 9000 ldrb.w r9, [r4] + 800fc28: 3f01 subs r7, #1 + 800fc2a: ea4f 2909 mov.w r9, r9, lsl #8 + 800fc2e: d02e beq.n 800fc8e + 800fc30: 3401 adds r4, #1 + 800fc32: f814 5b01 ldrb.w r5, [r4], #1 + 800fc36: 3f01 subs r7, #1 + 800fc38: 444d add r5, r9 + length -= 2; + 800fc3a: 3d02 subs r5, #2 + if (length >= APPN_DATA_LEN) + 800fc3c: 2d0d cmp r5, #13 + 800fc3e: dc2e bgt.n 800fc9e + else if (length > 0) + 800fc40: 2d00 cmp r5, #0 + 800fc42: dd2f ble.n 800fca4 + numtoread = (unsigned int) length; + 800fc44: 46a9 mov r9, r5 + for (i = 0; i < numtoread; i++) + 800fc46: f04f 0a00 mov.w sl, #0 + INPUT_BYTE(cinfo, b[i], return FALSE); + 800fc4a: b937 cbnz r7, 800fc5a + 800fc4c: 68f3 ldr r3, [r6, #12] + 800fc4e: 4640 mov r0, r8 + 800fc50: 4798 blx r3 + 800fc52: 2800 cmp r0, #0 + 800fc54: d0e0 beq.n 800fc18 + 800fc56: e9d6 4700 ldrd r4, r7, [r6] + 800fc5a: f814 3b01 ldrb.w r3, [r4], #1 + 800fc5e: 3f01 subs r7, #1 + 800fc60: f80d 300a strb.w r3, [sp, sl] + for (i = 0; i < numtoread; i++) + 800fc64: f10a 0a01 add.w sl, sl, #1 + 800fc68: 45d1 cmp r9, sl + 800fc6a: d1ee bne.n 800fc4a + switch (cinfo->unread_marker) { + 800fc6c: f8d8 21b4 ldr.w r2, [r8, #436] ; 0x1b4 + length -= numtoread; + 800fc70: eba5 0509 sub.w r5, r5, r9 + switch (cinfo->unread_marker) { + 800fc74: 2ae0 cmp r2, #224 ; 0xe0 + 800fc76: d018 beq.n 800fcaa + 800fc78: 2aee cmp r2, #238 ; 0xee + 800fc7a: d028 beq.n 800fcce + ERREXIT1(cinfo, JERR_UNKNOWN_MARKER, cinfo->unread_marker); + 800fc7c: f8d8 3000 ldr.w r3, [r8] + 800fc80: 2146 movs r1, #70 ; 0x46 + 800fc82: 4640 mov r0, r8 + 800fc84: e9c3 1205 strd r1, r2, [r3, #20] + 800fc88: 681b ldr r3, [r3, #0] + 800fc8a: 4798 blx r3 + break; + 800fc8c: e013 b.n 800fcb6 + INPUT_2BYTES(cinfo, length, return FALSE); + 800fc8e: 68f3 ldr r3, [r6, #12] + 800fc90: 4640 mov r0, r8 + 800fc92: 4798 blx r3 + 800fc94: 2800 cmp r0, #0 + 800fc96: d0bf beq.n 800fc18 + 800fc98: e9d6 4700 ldrd r4, r7, [r6] + 800fc9c: e7c9 b.n 800fc32 + numtoread = APPN_DATA_LEN; + 800fc9e: f04f 090e mov.w r9, #14 + 800fca2: e7d0 b.n 800fc46 + numtoread = 0; + 800fca4: f04f 0900 mov.w r9, #0 + 800fca8: e7e0 b.n 800fc6c + examine_app0(cinfo, (JOCTET FAR *) b, numtoread, length); + 800fcaa: 462b mov r3, r5 + 800fcac: 464a mov r2, r9 + 800fcae: 4669 mov r1, sp + 800fcb0: 4640 mov r0, r8 + 800fcb2: f7ff fec9 bl 800fa48 + if (length > 0) + 800fcb6: 2d00 cmp r5, #0 + INPUT_SYNC(cinfo); + 800fcb8: e9c6 4700 strd r4, r7, [r6] + if (length > 0) + 800fcbc: dd05 ble.n 800fcca + (*cinfo->src->skip_input_data) (cinfo, (long) length); + 800fcbe: f8d8 3018 ldr.w r3, [r8, #24] + 800fcc2: 4629 mov r1, r5 + 800fcc4: 4640 mov r0, r8 + 800fcc6: 691b ldr r3, [r3, #16] + 800fcc8: 4798 blx r3 + return TRUE; + 800fcca: 2001 movs r0, #1 + 800fccc: e7a5 b.n 800fc1a + examine_app14(cinfo, (JOCTET FAR *) b, numtoread, length); + 800fcce: 462b mov r3, r5 + 800fcd0: 464a mov r2, r9 + 800fcd2: 4669 mov r1, sp + 800fcd4: 4640 mov r0, r8 + 800fcd6: f7ff ff58 bl 800fb8a + break; + 800fcda: e7ec b.n 800fcb6 + +0800fcdc : + + +METHODDEF(boolean) +skip_variable (j_decompress_ptr cinfo) +/* Skip over an unknown or uninteresting variable-length marker */ +{ + 800fcdc: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} + INT32 length; + INPUT_VARS(cinfo); + 800fce0: 6984 ldr r4, [r0, #24] +{ + 800fce2: 4607 mov r7, r0 + INPUT_VARS(cinfo); + 800fce4: e9d4 5300 ldrd r5, r3, [r4] + + INPUT_2BYTES(cinfo, length, return FALSE); + 800fce8: b93b cbnz r3, 800fcfa + 800fcea: 68e3 ldr r3, [r4, #12] + 800fcec: 4798 blx r3 + 800fcee: b910 cbnz r0, 800fcf6 + 800fcf0: 2000 movs r0, #0 + INPUT_SYNC(cinfo); /* do before skip_input_data */ + if (length > 0) + (*cinfo->src->skip_input_data) (cinfo, (long) length); + + return TRUE; +} + 800fcf2: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} + INPUT_2BYTES(cinfo, length, return FALSE); + 800fcf6: e9d4 5300 ldrd r5, r3, [r4] + 800fcfa: f895 9000 ldrb.w r9, [r5] + 800fcfe: f1b3 0801 subs.w r8, r3, #1 + 800fd02: ea4f 2909 mov.w r9, r9, lsl #8 + 800fd06: d01c beq.n 800fd42 + 800fd08: 3501 adds r5, #1 + 800fd0a: f815 6b01 ldrb.w r6, [r5], #1 + TRACEMS2(cinfo, 1, JTRC_MISC_MARKER, cinfo->unread_marker, (int) length); + 800fd0e: 235d movs r3, #93 ; 0x5d + 800fd10: 683a ldr r2, [r7, #0] + 800fd12: 2101 movs r1, #1 + INPUT_2BYTES(cinfo, length, return FALSE); + 800fd14: 444e add r6, r9 + TRACEMS2(cinfo, 1, JTRC_MISC_MARKER, cinfo->unread_marker, (int) length); + 800fd16: 4638 mov r0, r7 + 800fd18: 6153 str r3, [r2, #20] + length -= 2; + 800fd1a: 3e02 subs r6, #2 + TRACEMS2(cinfo, 1, JTRC_MISC_MARKER, cinfo->unread_marker, (int) length); + 800fd1c: f8d7 31b4 ldr.w r3, [r7, #436] ; 0x1b4 + 800fd20: e9c2 3606 strd r3, r6, [r2, #24] + 800fd24: 6853 ldr r3, [r2, #4] + 800fd26: 4798 blx r3 + INPUT_2BYTES(cinfo, length, return FALSE); + 800fd28: f108 33ff add.w r3, r8, #4294967295 + if (length > 0) + 800fd2c: 2e00 cmp r6, #0 + INPUT_SYNC(cinfo); /* do before skip_input_data */ + 800fd2e: 6025 str r5, [r4, #0] + 800fd30: 6063 str r3, [r4, #4] + if (length > 0) + 800fd32: dd04 ble.n 800fd3e + (*cinfo->src->skip_input_data) (cinfo, (long) length); + 800fd34: 69bb ldr r3, [r7, #24] + 800fd36: 4631 mov r1, r6 + 800fd38: 4638 mov r0, r7 + 800fd3a: 691b ldr r3, [r3, #16] + 800fd3c: 4798 blx r3 + return TRUE; + 800fd3e: 2001 movs r0, #1 + 800fd40: e7d7 b.n 800fcf2 + INPUT_2BYTES(cinfo, length, return FALSE); + 800fd42: 68e3 ldr r3, [r4, #12] + 800fd44: 4638 mov r0, r7 + 800fd46: 4798 blx r3 + 800fd48: 2800 cmp r0, #0 + 800fd4a: d0d1 beq.n 800fcf0 + 800fd4c: e9d4 5800 ldrd r5, r8, [r4] + 800fd50: e7db b.n 800fd0a + +0800fd52 : + * but it will never be 0 or FF. + */ + +LOCAL(boolean) +next_marker (j_decompress_ptr cinfo) +{ + 800fd52: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} + int c; + INPUT_VARS(cinfo); + 800fd56: 6986 ldr r6, [r0, #24] +{ + 800fd58: 4680 mov r8, r0 + INPUT_VARS(cinfo); + 800fd5a: e9d6 4700 ldrd r4, r7, [r6] + + for (;;) { + INPUT_BYTE(cinfo, c, return FALSE); + 800fd5e: b987 cbnz r7, 800fd82 + 800fd60: 68f3 ldr r3, [r6, #12] + 800fd62: 4640 mov r0, r8 + 800fd64: 4798 blx r3 + 800fd66: b950 cbnz r0, 800fd7e + 800fd68: 2000 movs r0, #0 + + cinfo->unread_marker = c; + + INPUT_SYNC(cinfo); + return TRUE; +} + 800fd6a: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + cinfo->marker->discarded_bytes++; + 800fd6e: f8d8 21cc ldr.w r2, [r8, #460] ; 0x1cc + 800fd72: 6993 ldr r3, [r2, #24] + 800fd74: 3301 adds r3, #1 + cinfo->marker->discarded_bytes += 2; + 800fd76: 6193 str r3, [r2, #24] + INPUT_SYNC(cinfo); + 800fd78: e9c6 4700 strd r4, r7, [r6] + INPUT_BYTE(cinfo, c, return FALSE); + 800fd7c: e7ef b.n 800fd5e + INPUT_BYTE(cinfo, c, return FALSE); + 800fd7e: e9d6 4700 ldrd r4, r7, [r6] + 800fd82: f814 3b01 ldrb.w r3, [r4], #1 + 800fd86: 3f01 subs r7, #1 + while (c != 0xFF) { + 800fd88: 2bff cmp r3, #255 ; 0xff + 800fd8a: d1f0 bne.n 800fd6e + INPUT_BYTE(cinfo, c, return FALSE); + 800fd8c: b937 cbnz r7, 800fd9c + 800fd8e: 68f3 ldr r3, [r6, #12] + 800fd90: 4640 mov r0, r8 + 800fd92: 4798 blx r3 + 800fd94: 2800 cmp r0, #0 + 800fd96: d0e7 beq.n 800fd68 + 800fd98: e9d6 4700 ldrd r4, r7, [r6] + 800fd9c: f814 5b01 ldrb.w r5, [r4], #1 + 800fda0: 3f01 subs r7, #1 + } while (c == 0xFF); + 800fda2: 2dff cmp r5, #255 ; 0xff + 800fda4: d0f2 beq.n 800fd8c + cinfo->marker->discarded_bytes += 2; + 800fda6: f8d8 21cc ldr.w r2, [r8, #460] ; 0x1cc + 800fdaa: 6993 ldr r3, [r2, #24] + if (c != 0) + 800fdac: b90d cbnz r5, 800fdb2 + cinfo->marker->discarded_bytes += 2; + 800fdae: 3302 adds r3, #2 + 800fdb0: e7e1 b.n 800fd76 + if (cinfo->marker->discarded_bytes != 0) { + 800fdb2: b173 cbz r3, 800fdd2 + WARNMS2(cinfo, JWRN_EXTRANEOUS_DATA, cinfo->marker->discarded_bytes, c); + 800fdb4: f8d8 2000 ldr.w r2, [r8] + 800fdb8: 2177 movs r1, #119 ; 0x77 + 800fdba: 4640 mov r0, r8 + 800fdbc: 61d5 str r5, [r2, #28] + 800fdbe: e9c2 1305 strd r1, r3, [r2, #20] + 800fdc2: 6853 ldr r3, [r2, #4] + 800fdc4: f04f 31ff mov.w r1, #4294967295 + 800fdc8: 4798 blx r3 + cinfo->marker->discarded_bytes = 0; + 800fdca: f8d8 31cc ldr.w r3, [r8, #460] ; 0x1cc + 800fdce: 2200 movs r2, #0 + 800fdd0: 619a str r2, [r3, #24] + cinfo->unread_marker = c; + 800fdd2: f8c8 51b4 str.w r5, [r8, #436] ; 0x1b4 + return TRUE; + 800fdd6: 2001 movs r0, #1 + INPUT_SYNC(cinfo); + 800fdd8: e9c6 4700 strd r4, r7, [r6] + return TRUE; + 800fddc: e7c5 b.n 800fd6a + +0800fdde : +METHODDEF(boolean) +read_restart_marker (j_decompress_ptr cinfo) +{ + /* Obtain a marker unless we already did. */ + /* Note that next_marker will complain if it skips any data. */ + if (cinfo->unread_marker == 0) { + 800fdde: f8d0 31b4 ldr.w r3, [r0, #436] ; 0x1b4 +{ + 800fde2: b510 push {r4, lr} + 800fde4: 4604 mov r4, r0 + if (cinfo->unread_marker == 0) { + 800fde6: b1e3 cbz r3, 800fe22 + if (! next_marker(cinfo)) + return FALSE; + } + + if (cinfo->unread_marker == + ((int) M_RST0 + cinfo->marker->next_restart_num)) { + 800fde8: f8d4 31cc ldr.w r3, [r4, #460] ; 0x1cc + if (cinfo->unread_marker == + 800fdec: f8d4 21b4 ldr.w r2, [r4, #436] ; 0x1b4 + ((int) M_RST0 + cinfo->marker->next_restart_num)) { + 800fdf0: 6959 ldr r1, [r3, #20] + 800fdf2: f101 03d0 add.w r3, r1, #208 ; 0xd0 + if (cinfo->unread_marker == + 800fdf6: 429a cmp r2, r3 + 800fdf8: d119 bne.n 800fe2e + /* Normal case --- swallow the marker and let entropy decoder continue */ + TRACEMS1(cinfo, 3, JTRC_RST, cinfo->marker->next_restart_num); + 800fdfa: 6823 ldr r3, [r4, #0] + 800fdfc: 2264 movs r2, #100 ; 0x64 + 800fdfe: 4620 mov r0, r4 + 800fe00: e9c3 2105 strd r2, r1, [r3, #20] + 800fe04: 685b ldr r3, [r3, #4] + 800fe06: 2103 movs r1, #3 + 800fe08: 4798 blx r3 + cinfo->unread_marker = 0; + 800fe0a: 2300 movs r3, #0 + 800fe0c: f8c4 31b4 str.w r3, [r4, #436] ; 0x1b4 + cinfo->marker->next_restart_num)) + return FALSE; + } + + /* Update next-restart state */ + cinfo->marker->next_restart_num = (cinfo->marker->next_restart_num + 1) & 7; + 800fe10: f8d4 21cc ldr.w r2, [r4, #460] ; 0x1cc + + return TRUE; + 800fe14: 2001 movs r0, #1 + cinfo->marker->next_restart_num = (cinfo->marker->next_restart_num + 1) & 7; + 800fe16: 6953 ldr r3, [r2, #20] + 800fe18: 3301 adds r3, #1 + 800fe1a: f003 0307 and.w r3, r3, #7 + 800fe1e: 6153 str r3, [r2, #20] + return TRUE; + 800fe20: e004 b.n 800fe2c + if (! next_marker(cinfo)) + 800fe22: f7ff ff96 bl 800fd52 + 800fe26: 2800 cmp r0, #0 + 800fe28: d1de bne.n 800fde8 + return FALSE; + 800fe2a: 2000 movs r0, #0 +} + 800fe2c: bd10 pop {r4, pc} + if (! (*cinfo->src->resync_to_restart) (cinfo, + 800fe2e: 69a3 ldr r3, [r4, #24] + 800fe30: 4620 mov r0, r4 + 800fe32: 695b ldr r3, [r3, #20] + 800fe34: 4798 blx r3 + 800fe36: 2800 cmp r0, #0 + 800fe38: d1ea bne.n 800fe10 + 800fe3a: e7f6 b.n 800fe2a + +0800fe3c : +METHODDEF(void) +reset_marker_reader (j_decompress_ptr cinfo) +{ + my_marker_ptr marker = (my_marker_ptr) cinfo->marker; + + cinfo->comp_info = NULL; /* until allocated by get_sof */ + 800fe3c: 2300 movs r3, #0 + my_marker_ptr marker = (my_marker_ptr) cinfo->marker; + 800fe3e: f8d0 21cc ldr.w r2, [r0, #460] ; 0x1cc + cinfo->comp_info = NULL; /* until allocated by get_sof */ + 800fe42: f8c0 30d8 str.w r3, [r0, #216] ; 0xd8 + cinfo->input_scan_number = 0; /* no SOS seen yet */ + 800fe46: f8c0 3090 str.w r3, [r0, #144] ; 0x90 + cinfo->unread_marker = 0; /* no pending marker */ + 800fe4a: f8c0 31b4 str.w r3, [r0, #436] ; 0x1b4 + marker->pub.saw_SOI = FALSE; /* set internal state too */ + marker->pub.saw_SOF = FALSE; + marker->pub.discarded_bytes = 0; + 800fe4e: 6193 str r3, [r2, #24] + marker->cur_marker = NULL; + 800fe50: f8c2 30a4 str.w r3, [r2, #164] ; 0xa4 + marker->pub.saw_SOF = FALSE; + 800fe54: e9c2 3303 strd r3, r3, [r2, #12] +} + 800fe58: 4770 bx lr + +0800fe5a : +{ + 800fe5a: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + INPUT_VARS(cinfo); + 800fe5e: 6987 ldr r7, [r0, #24] +{ + 800fe60: b0c9 sub sp, #292 ; 0x124 + 800fe62: 4605 mov r5, r0 + INPUT_VARS(cinfo); + 800fe64: e9d7 4600 ldrd r4, r6, [r7] + INPUT_2BYTES(cinfo, length, return FALSE); + 800fe68: b946 cbnz r6, 800fe7c + 800fe6a: 68fb ldr r3, [r7, #12] + 800fe6c: 4798 blx r3 + 800fe6e: b918 cbnz r0, 800fe78 + 800fe70: 2000 movs r0, #0 +} + 800fe72: b049 add sp, #292 ; 0x124 + 800fe74: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + INPUT_2BYTES(cinfo, length, return FALSE); + 800fe78: e9d7 4600 ldrd r4, r6, [r7] + 800fe7c: f894 8000 ldrb.w r8, [r4] + 800fe80: 3e01 subs r6, #1 + 800fe82: ea4f 2808 mov.w r8, r8, lsl #8 + 800fe86: d018 beq.n 800feba + 800fe88: 3401 adds r4, #1 + 800fe8a: f814 9b01 ldrb.w r9, [r4], #1 + 800fe8e: 3e01 subs r6, #1 + INPUT_BYTE(cinfo, bits[i], return FALSE); + 800fe90: f10d 0b0c add.w fp, sp, #12 + INPUT_2BYTES(cinfo, length, return FALSE); + 800fe94: 44c1 add r9, r8 + length -= 2; + 800fe96: f1a9 0902 sub.w r9, r9, #2 + while (length > 16) { + 800fe9a: f1b9 0f10 cmp.w r9, #16 + 800fe9e: dc14 bgt.n 800feca + if (length != 0) + 800fea0: f1b9 0f00 cmp.w r9, #0 + 800fea4: d005 beq.n 800feb2 + ERREXIT(cinfo, JERR_BAD_LENGTH); + 800fea6: 682b ldr r3, [r5, #0] + 800fea8: 220c movs r2, #12 + 800feaa: 4628 mov r0, r5 + 800feac: 615a str r2, [r3, #20] + 800feae: 681b ldr r3, [r3, #0] + 800feb0: 4798 blx r3 + return TRUE; + 800feb2: 2001 movs r0, #1 + INPUT_SYNC(cinfo); + 800feb4: e9c7 4600 strd r4, r6, [r7] + return TRUE; + 800feb8: e7db b.n 800fe72 + INPUT_2BYTES(cinfo, length, return FALSE); + 800feba: 68fb ldr r3, [r7, #12] + 800febc: 4628 mov r0, r5 + 800febe: 4798 blx r3 + 800fec0: 2800 cmp r0, #0 + 800fec2: d0d5 beq.n 800fe70 + 800fec4: e9d7 4600 ldrd r4, r6, [r7] + 800fec8: e7df b.n 800fe8a + INPUT_BYTE(cinfo, index, return FALSE); + 800feca: b936 cbnz r6, 800feda + 800fecc: 68fa ldr r2, [r7, #12] + 800fece: 4628 mov r0, r5 + 800fed0: 4790 blx r2 + 800fed2: 2800 cmp r0, #0 + 800fed4: d0cc beq.n 800fe70 + 800fed6: e9d7 4600 ldrd r4, r6, [r7] + 800feda: f814 8b01 ldrb.w r8, [r4], #1 + TRACEMS1(cinfo, 1, JTRC_DHT, index); + 800fede: 2152 movs r1, #82 ; 0x52 + 800fee0: 682a ldr r2, [r5, #0] + 800fee2: 4628 mov r0, r5 + INPUT_BYTE(cinfo, index, return FALSE); + 800fee4: f8cd 8000 str.w r8, [sp] + 800fee8: 3e01 subs r6, #1 + count = 0; + 800feea: f04f 0a00 mov.w sl, #0 + TRACEMS1(cinfo, 1, JTRC_DHT, index); + 800feee: e9c2 1805 strd r1, r8, [r2, #20] + 800fef2: 6852 ldr r2, [r2, #4] + 800fef4: 2101 movs r1, #1 + 800fef6: 4790 blx r2 + for (i = 1; i <= 16; i++) { + 800fef8: 2201 movs r2, #1 + INPUT_BYTE(cinfo, bits[i], return FALSE); + 800fefa: b946 cbnz r6, 800ff0e + 800fefc: 68f9 ldr r1, [r7, #12] + 800fefe: 4628 mov r0, r5 + 800ff00: 9201 str r2, [sp, #4] + 800ff02: 4788 blx r1 + 800ff04: 2800 cmp r0, #0 + 800ff06: d0b3 beq.n 800fe70 + 800ff08: 9a01 ldr r2, [sp, #4] + 800ff0a: e9d7 4600 ldrd r4, r6, [r7] + 800ff0e: f814 1b01 ldrb.w r1, [r4], #1 + 800ff12: 3e01 subs r6, #1 + 800ff14: f802 100b strb.w r1, [r2, fp] + for (i = 1; i <= 16; i++) { + 800ff18: 3201 adds r2, #1 + count += bits[i]; + 800ff1a: 448a add sl, r1 + for (i = 1; i <= 16; i++) { + 800ff1c: 2a11 cmp r2, #17 + 800ff1e: d1ec bne.n 800fefa + TRACEMS8(cinfo, 2, JTRC_HUFFBITS, + 800ff20: 682a ldr r2, [r5, #0] + length -= 1 + 16; + 800ff22: f1a9 0311 sub.w r3, r9, #17 + TRACEMS8(cinfo, 2, JTRC_HUFFBITS, + 800ff26: f89b 1001 ldrb.w r1, [fp, #1] + 800ff2a: f04f 0958 mov.w r9, #88 ; 0x58 + 800ff2e: 4628 mov r0, r5 + length -= 1 + 16; + 800ff30: 9301 str r3, [sp, #4] + TRACEMS8(cinfo, 2, JTRC_HUFFBITS, + 800ff32: 6191 str r1, [r2, #24] + 800ff34: f89b 1002 ldrb.w r1, [fp, #2] + 800ff38: f8c2 9014 str.w r9, [r2, #20] + 800ff3c: 61d1 str r1, [r2, #28] + 800ff3e: f89b 1003 ldrb.w r1, [fp, #3] + 800ff42: 6211 str r1, [r2, #32] + 800ff44: f89b 1004 ldrb.w r1, [fp, #4] + 800ff48: 6251 str r1, [r2, #36] ; 0x24 + 800ff4a: f89b 1005 ldrb.w r1, [fp, #5] + 800ff4e: 6291 str r1, [r2, #40] ; 0x28 + 800ff50: f89b 1006 ldrb.w r1, [fp, #6] + 800ff54: 62d1 str r1, [r2, #44] ; 0x2c + 800ff56: f89b 1007 ldrb.w r1, [fp, #7] + 800ff5a: 6311 str r1, [r2, #48] ; 0x30 + 800ff5c: f89b 1008 ldrb.w r1, [fp, #8] + 800ff60: 6351 str r1, [r2, #52] ; 0x34 + 800ff62: 2102 movs r1, #2 + 800ff64: 6852 ldr r2, [r2, #4] + 800ff66: 4790 blx r2 + TRACEMS8(cinfo, 2, JTRC_HUFFBITS, + 800ff68: 682a ldr r2, [r5, #0] + 800ff6a: f89b 1009 ldrb.w r1, [fp, #9] + 800ff6e: 4628 mov r0, r5 + 800ff70: f8c2 9014 str.w r9, [r2, #20] + 800ff74: 6191 str r1, [r2, #24] + 800ff76: f89b 100a ldrb.w r1, [fp, #10] + 800ff7a: 61d1 str r1, [r2, #28] + 800ff7c: f89b 100b ldrb.w r1, [fp, #11] + 800ff80: 6211 str r1, [r2, #32] + 800ff82: f89b 100c ldrb.w r1, [fp, #12] + 800ff86: 6251 str r1, [r2, #36] ; 0x24 + 800ff88: f89b 100d ldrb.w r1, [fp, #13] + 800ff8c: 6291 str r1, [r2, #40] ; 0x28 + 800ff8e: f89b 100e ldrb.w r1, [fp, #14] + 800ff92: 62d1 str r1, [r2, #44] ; 0x2c + 800ff94: f89b 100f ldrb.w r1, [fp, #15] + 800ff98: 6311 str r1, [r2, #48] ; 0x30 + 800ff9a: f89b 1010 ldrb.w r1, [fp, #16] + 800ff9e: 6351 str r1, [r2, #52] ; 0x34 + 800ffa0: 2102 movs r1, #2 + 800ffa2: 6852 ldr r2, [r2, #4] + 800ffa4: 4790 blx r2 + if (count > 256 || ((INT32) count) > length) + 800ffa6: f5ba 7f80 cmp.w sl, #256 ; 0x100 + 800ffaa: dc02 bgt.n 800ffb2 + 800ffac: 9b01 ldr r3, [sp, #4] + 800ffae: 4553 cmp r3, sl + 800ffb0: da05 bge.n 800ffbe + ERREXIT(cinfo, JERR_BAD_HUFF_TABLE); + 800ffb2: 682a ldr r2, [r5, #0] + 800ffb4: 2109 movs r1, #9 + 800ffb6: 4628 mov r0, r5 + 800ffb8: 6151 str r1, [r2, #20] + 800ffba: 6812 ldr r2, [r2, #0] + 800ffbc: 4790 blx r2 + 800ffbe: f04f 0900 mov.w r9, #0 + INPUT_BYTE(cinfo, huffval[i], return FALSE); + 800ffc2: a908 add r1, sp, #32 + for (i = 0; i < count; i++) + 800ffc4: 45d1 cmp r9, sl + 800ffc6: d13f bne.n 8010048 + if (index & 0x10) { /* AC table definition */ + 800ffc8: f018 0f10 tst.w r8, #16 + length -= count; + 800ffcc: 9b01 ldr r3, [sp, #4] + 800ffce: eba3 0909 sub.w r9, r3, r9 + index -= 0x10; + 800ffd2: bf17 itett ne + 800ffd4: f1a8 0310 subne.w r3, r8, #16 + htblptr = &cinfo->dc_huff_tbl_ptrs[index]; + 800ffd8: f108 082d addeq.w r8, r8, #45 ; 0x2d + htblptr = &cinfo->ac_huff_tbl_ptrs[index]; + 800ffdc: f108 0821 addne.w r8, r8, #33 ; 0x21 + index -= 0x10; + 800ffe0: 9300 strne r3, [sp, #0] + if (index < 0 || index >= NUM_HUFF_TBLS) + 800ffe2: 9b00 ldr r3, [sp, #0] + htblptr = &cinfo->dc_huff_tbl_ptrs[index]; + 800ffe4: eb05 0888 add.w r8, r5, r8, lsl #2 + if (index < 0 || index >= NUM_HUFF_TBLS) + 800ffe8: 2b03 cmp r3, #3 + 800ffea: d906 bls.n 800fffa + ERREXIT1(cinfo, JERR_DHT_INDEX, index); + 800ffec: 682a ldr r2, [r5, #0] + 800ffee: 211f movs r1, #31 + 800fff0: 4628 mov r0, r5 + 800fff2: e9c2 1305 strd r1, r3, [r2, #20] + 800fff6: 6812 ldr r2, [r2, #0] + 800fff8: 4790 blx r2 + if (*htblptr == NULL) + 800fffa: f8d8 2000 ldr.w r2, [r8] + 800fffe: b922 cbnz r2, 801000a + *htblptr = jpeg_alloc_huff_table((j_common_ptr) cinfo); + 8010000: 4628 mov r0, r5 + 8010002: f7fb fbb5 bl 800b770 + 8010006: f8c8 0000 str.w r0, [r8] + MEMCOPY((*htblptr)->bits, bits, SIZEOF((*htblptr)->bits)); + 801000a: 2200 movs r2, #0 + 801000c: 46de mov lr, fp + 801000e: f10d 0a1c add.w sl, sp, #28 + 8010012: f88b 2000 strb.w r2, [fp] + 8010016: f8d8 2000 ldr.w r2, [r8] + 801001a: 46f4 mov ip, lr + 801001c: 3208 adds r2, #8 + 801001e: e8bc 0003 ldmia.w ip!, {r0, r1} + 8010022: 45d4 cmp ip, sl + 8010024: f842 0c08 str.w r0, [r2, #-8] + 8010028: f842 1c04 str.w r1, [r2, #-4] + 801002c: 46e6 mov lr, ip + 801002e: d1f4 bne.n 801001a + 8010030: f89c 1000 ldrb.w r1, [ip] + 8010034: 7011 strb r1, [r2, #0] + MEMCOPY((*htblptr)->huffval, huffval, SIZEOF((*htblptr)->huffval)); + 8010036: f44f 7280 mov.w r2, #256 ; 0x100 + 801003a: f8d8 0000 ldr.w r0, [r8] + 801003e: a908 add r1, sp, #32 + 8010040: 3011 adds r0, #17 + 8010042: f024 fd96 bl 8034b72 + 8010046: e728 b.n 800fe9a + INPUT_BYTE(cinfo, huffval[i], return FALSE); + 8010048: b946 cbnz r6, 801005c + 801004a: 68fa ldr r2, [r7, #12] + 801004c: 4628 mov r0, r5 + 801004e: 4790 blx r2 + 8010050: 2800 cmp r0, #0 + 8010052: f43f af0d beq.w 800fe70 + 8010056: a908 add r1, sp, #32 + 8010058: e9d7 4600 ldrd r4, r6, [r7] + 801005c: f814 2b01 ldrb.w r2, [r4], #1 + 8010060: 3e01 subs r6, #1 + 8010062: f809 2001 strb.w r2, [r9, r1] + for (i = 0; i < count; i++) + 8010066: f109 0901 add.w r9, r9, #1 + 801006a: e7ab b.n 800ffc4 + +0801006c : +{ + 801006c: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8010070: 4604 mov r4, r0 + 8010072: b085 sub sp, #20 + if (cinfo->unread_marker == 0) { + 8010074: f8d4 31b4 ldr.w r3, [r4, #436] ; 0x1b4 + 8010078: bb5b cbnz r3, 80100d2 + if (! cinfo->marker->saw_SOI) { + 801007a: f8d4 31cc ldr.w r3, [r4, #460] ; 0x1cc + 801007e: 68db ldr r3, [r3, #12] + 8010080: 2b00 cmp r3, #0 + 8010082: d17b bne.n 801017c + INPUT_VARS(cinfo); + 8010084: 69a7 ldr r7, [r4, #24] + 8010086: e9d7 5300 ldrd r5, r3, [r7] + INPUT_BYTE(cinfo, c, return FALSE); + 801008a: b933 cbnz r3, 801009a + 801008c: 68fb ldr r3, [r7, #12] + 801008e: 4620 mov r0, r4 + 8010090: 4798 blx r3 + 8010092: 2800 cmp r0, #0 + 8010094: d077 beq.n 8010186 + 8010096: e9d7 5300 ldrd r5, r3, [r7] + INPUT_BYTE(cinfo, c2, return FALSE); + 801009a: 3b01 subs r3, #1 + INPUT_BYTE(cinfo, c, return FALSE); + 801009c: f895 8000 ldrb.w r8, [r5] + INPUT_BYTE(cinfo, c2, return FALSE); + 80100a0: d065 beq.n 801016e + INPUT_BYTE(cinfo, c, return FALSE); + 80100a2: 3501 adds r5, #1 + if (c != 0xFF || c2 != (int) M_SOI) + 80100a4: f1b8 0fff cmp.w r8, #255 ; 0xff + INPUT_BYTE(cinfo, c2, return FALSE); + 80100a8: f103 36ff add.w r6, r3, #4294967295 + 80100ac: f815 9b01 ldrb.w r9, [r5], #1 + if (c != 0xFF || c2 != (int) M_SOI) + 80100b0: d102 bne.n 80100b8 + 80100b2: f1b9 0fd8 cmp.w r9, #216 ; 0xd8 + 80100b6: d008 beq.n 80100ca + ERREXIT2(cinfo, JERR_NO_SOI, c, c2); + 80100b8: 6823 ldr r3, [r4, #0] + 80100ba: 2237 movs r2, #55 ; 0x37 + 80100bc: 4620 mov r0, r4 + 80100be: f8c3 901c str.w r9, [r3, #28] + 80100c2: e9c3 2805 strd r2, r8, [r3, #20] + 80100c6: 681b ldr r3, [r3, #0] + 80100c8: 4798 blx r3 + cinfo->unread_marker = c2; + 80100ca: f8c4 91b4 str.w r9, [r4, #436] ; 0x1b4 + INPUT_SYNC(cinfo); + 80100ce: e9c7 5600 strd r5, r6, [r7] + switch (cinfo->unread_marker) { + 80100d2: f8d4 31b4 ldr.w r3, [r4, #436] ; 0x1b4 + 80100d6: 2b01 cmp r3, #1 + 80100d8: f000 83ba beq.w 8010850 + 80100dc: f1a3 02c0 sub.w r2, r3, #192 ; 0xc0 + 80100e0: 2a3e cmp r2, #62 ; 0x3e + 80100e2: f200 83c2 bhi.w 801086a + 80100e6: 2a3e cmp r2, #62 ; 0x3e + 80100e8: f200 83bf bhi.w 801086a + 80100ec: e8df f012 tbh [pc, r2, lsl #1] + 80100f0: 0094008b .word 0x0094008b + 80100f4: 00a00097 .word 0x00a00097 + 80100f8: 00a00232 .word 0x00a00232 + 80100fc: 00a000a0 .word 0x00a000a0 + 8010100: 009b00a0 .word 0x009b00a0 + 8010104: 00a0009d .word 0x00a0009d + 8010108: 00a001b9 .word 0x00a001b9 + 801010c: 00a000a0 .word 0x00a000a0 + 8010110: 03b003b0 .word 0x03b003b0 + 8010114: 03b003b0 .word 0x03b003b0 + 8010118: 03b003b0 .word 0x03b003b0 + 801011c: 03b003b0 .word 0x03b003b0 + 8010120: 01ad004d .word 0x01ad004d + 8010124: 023600a8 .word 0x023600a8 + 8010128: 035203b9 .word 0x035203b9 + 801012c: 03bd03bd .word 0x03bd03bd + 8010130: 03a403a4 .word 0x03a403a4 + 8010134: 03a403a4 .word 0x03a403a4 + 8010138: 03a403a4 .word 0x03a403a4 + 801013c: 03a403a4 .word 0x03a403a4 + 8010140: 03a403a4 .word 0x03a403a4 + 8010144: 03a403a4 .word 0x03a403a4 + 8010148: 03a403a4 .word 0x03a403a4 + 801014c: 03a403a4 .word 0x03a403a4 + 8010150: 03bd03bd .word 0x03bd03bd + 8010154: 03bd03bd .word 0x03bd03bd + 8010158: 03bd03bd .word 0x03bd03bd + 801015c: 03bd03bd .word 0x03bd03bd + 8010160: 03bd03bd .word 0x03bd03bd + 8010164: 03bd03bd .word 0x03bd03bd + 8010168: 03bd03bd .word 0x03bd03bd + 801016c: 03ac .short 0x03ac + INPUT_BYTE(cinfo, c2, return FALSE); + 801016e: 68fb ldr r3, [r7, #12] + 8010170: 4620 mov r0, r4 + 8010172: 4798 blx r3 + 8010174: b138 cbz r0, 8010186 + 8010176: e9d7 5300 ldrd r5, r3, [r7] + 801017a: e793 b.n 80100a4 + if (! next_marker(cinfo)) + 801017c: 4620 mov r0, r4 + 801017e: f7ff fde8 bl 800fd52 + 8010182: 2800 cmp r0, #0 + 8010184: d1a5 bne.n 80100d2 + return JPEG_SUSPENDED; + 8010186: 2000 movs r0, #0 + 8010188: e0ea b.n 8010360 + TRACEMS(cinfo, 1, JTRC_SOI); + 801018a: 6823 ldr r3, [r4, #0] + 801018c: 2268 movs r2, #104 ; 0x68 + 801018e: 2101 movs r1, #1 + 8010190: 4620 mov r0, r4 + 8010192: 615a str r2, [r3, #20] + 8010194: 685b ldr r3, [r3, #4] + 8010196: 4798 blx r3 + if (cinfo->marker->saw_SOI) + 8010198: f8d4 31cc ldr.w r3, [r4, #460] ; 0x1cc + 801019c: 68db ldr r3, [r3, #12] + 801019e: b12b cbz r3, 80101ac + ERREXIT(cinfo, JERR_SOI_DUPLICATE); + 80101a0: 6823 ldr r3, [r4, #0] + 80101a2: 223f movs r2, #63 ; 0x3f + 80101a4: 4620 mov r0, r4 + 80101a6: 615a str r2, [r3, #20] + 80101a8: 681b ldr r3, [r3, #0] + 80101aa: 4798 blx r3 + cinfo->arith_dc_L[i] = 0; + 80101ac: 2210 movs r2, #16 + 80101ae: 2100 movs r1, #0 + 80101b0: f104 00e8 add.w r0, r4, #232 ; 0xe8 + 80101b4: f024 fc02 bl 80349bc + cinfo->arith_dc_U[i] = 1; + 80101b8: 2210 movs r2, #16 + 80101ba: 2101 movs r1, #1 + 80101bc: f104 00f8 add.w r0, r4, #248 ; 0xf8 + 80101c0: f024 fbfc bl 80349bc + cinfo->arith_ac_K[i] = 5; + 80101c4: 2210 movs r2, #16 + 80101c6: 2105 movs r1, #5 + 80101c8: f504 7084 add.w r0, r4, #264 ; 0x108 + 80101cc: f024 fbf6 bl 80349bc + cinfo->JFIF_major_version = 1; /* set default JFIF APP0 values */ + 80101d0: f240 1201 movw r2, #257 ; 0x101 + cinfo->jpeg_color_space = JCS_UNKNOWN; + 80101d4: 2300 movs r3, #0 + cinfo->JFIF_major_version = 1; /* set default JFIF APP0 values */ + 80101d6: f8a4 2120 strh.w r2, [r4, #288] ; 0x120 + cinfo->X_density = 1; + 80101da: f04f 1201 mov.w r2, #65537 ; 0x10001 + cinfo->jpeg_color_space = JCS_UNKNOWN; + 80101de: f884 3028 strb.w r3, [r4, #40] ; 0x28 + cinfo->CCIR601_sampling = FALSE; /* Assume non-CCIR sampling??? */ + 80101e2: f8c4 3130 str.w r3, [r4, #304] ; 0x130 + cinfo->density_unit = 0; + 80101e6: f884 3122 strb.w r3, [r4, #290] ; 0x122 + cinfo->Adobe_transform = 0; + 80101ea: f884 312c strb.w r3, [r4, #300] ; 0x12c + cinfo->saw_Adobe_marker = FALSE; + 80101ee: e9c4 2349 strd r2, r3, [r4, #292] ; 0x124 + cinfo->saw_JFIF_marker = FALSE; + 80101f2: e9c4 3346 strd r3, r3, [r4, #280] ; 0x118 + cinfo->marker->saw_SOI = TRUE; + 80101f6: 2201 movs r2, #1 + 80101f8: f8d4 31cc ldr.w r3, [r4, #460] ; 0x1cc + 80101fc: 60da str r2, [r3, #12] + cinfo->unread_marker = 0; + 80101fe: 2300 movs r3, #0 + 8010200: f8c4 31b4 str.w r3, [r4, #436] ; 0x1b4 + if (cinfo->unread_marker == 0) { + 8010204: e736 b.n 8010074 + if (! get_sof(cinfo, TRUE, FALSE, FALSE)) + 8010206: 2300 movs r3, #0 + 8010208: 2101 movs r1, #1 + 801020a: 461a mov r2, r3 + if (! get_sof(cinfo, FALSE, TRUE, TRUE)) + 801020c: 4620 mov r0, r4 + 801020e: f7ff faed bl 800f7ec + if (! skip_variable(cinfo)) + 8010212: 2800 cmp r0, #0 + 8010214: d1f3 bne.n 80101fe + 8010216: e7b6 b.n 8010186 + if (! get_sof(cinfo, FALSE, FALSE, FALSE)) + 8010218: 2300 movs r3, #0 + if (! get_sof(cinfo, FALSE, FALSE, TRUE)) + 801021a: 2200 movs r2, #0 + 801021c: e001 b.n 8010222 + if (! get_sof(cinfo, FALSE, TRUE, FALSE)) + 801021e: 2300 movs r3, #0 + 8010220: 2201 movs r2, #1 + if (! get_sof(cinfo, FALSE, TRUE, TRUE)) + 8010222: 2100 movs r1, #0 + 8010224: e7f2 b.n 801020c + if (! get_sof(cinfo, FALSE, FALSE, TRUE)) + 8010226: 2301 movs r3, #1 + 8010228: e7f7 b.n 801021a + if (! get_sof(cinfo, FALSE, TRUE, TRUE)) + 801022a: 2301 movs r3, #1 + 801022c: 461a mov r2, r3 + 801022e: e7f8 b.n 8010222 + ERREXIT1(cinfo, JERR_SOF_UNSUPPORTED, cinfo->unread_marker); + 8010230: 6822 ldr r2, [r4, #0] + 8010232: 213e movs r1, #62 ; 0x3e + ERREXIT1(cinfo, JERR_UNKNOWN_MARKER, cinfo->unread_marker); + 8010234: 4620 mov r0, r4 + 8010236: e9c2 1305 strd r1, r3, [r2, #20] + 801023a: 6813 ldr r3, [r2, #0] + 801023c: 4798 blx r3 + break; + 801023e: e7de b.n 80101fe + if (! cinfo->marker->saw_SOF) + 8010240: f8d4 31cc ldr.w r3, [r4, #460] ; 0x1cc + INPUT_VARS(cinfo); + 8010244: 69a7 ldr r7, [r4, #24] + if (! cinfo->marker->saw_SOF) + 8010246: 691b ldr r3, [r3, #16] + INPUT_VARS(cinfo); + 8010248: e9d7 5600 ldrd r5, r6, [r7] + if (! cinfo->marker->saw_SOF) + 801024c: b92b cbnz r3, 801025a + ERREXIT(cinfo, JERR_SOS_NO_SOF); + 801024e: 6823 ldr r3, [r4, #0] + 8010250: 2240 movs r2, #64 ; 0x40 + 8010252: 4620 mov r0, r4 + 8010254: 615a str r2, [r3, #20] + 8010256: 681b ldr r3, [r3, #0] + 8010258: 4798 blx r3 + INPUT_2BYTES(cinfo, length, return FALSE); + 801025a: b936 cbnz r6, 801026a + 801025c: 68fb ldr r3, [r7, #12] + 801025e: 4620 mov r0, r4 + 8010260: 4798 blx r3 + 8010262: 2800 cmp r0, #0 + 8010264: d08f beq.n 8010186 + 8010266: e9d7 5600 ldrd r5, r6, [r7] + 801026a: f895 9000 ldrb.w r9, [r5] + 801026e: 3e01 subs r6, #1 + 8010270: ea4f 2909 mov.w r9, r9, lsl #8 + 8010274: d077 beq.n 8010366 + 8010276: 3501 adds r5, #1 + 8010278: f895 8000 ldrb.w r8, [r5] + INPUT_BYTE(cinfo, n, return FALSE); /* Number of components */ + 801027c: 3e01 subs r6, #1 + INPUT_2BYTES(cinfo, length, return FALSE); + 801027e: 44c8 add r8, r9 + INPUT_BYTE(cinfo, n, return FALSE); /* Number of components */ + 8010280: d07a beq.n 8010378 + INPUT_2BYTES(cinfo, length, return FALSE); + 8010282: 3501 adds r5, #1 + INPUT_BYTE(cinfo, n, return FALSE); /* Number of components */ + 8010284: f815 9b01 ldrb.w r9, [r5], #1 + TRACEMS1(cinfo, 1, JTRC_SOS, n); + 8010288: 2269 movs r2, #105 ; 0x69 + 801028a: 6823 ldr r3, [r4, #0] + 801028c: 2101 movs r1, #1 + 801028e: 4620 mov r0, r4 + INPUT_BYTE(cinfo, n, return FALSE); /* Number of components */ + 8010290: 3e01 subs r6, #1 + TRACEMS1(cinfo, 1, JTRC_SOS, n); + 8010292: e9c3 2905 strd r2, r9, [r3, #20] + 8010296: 685b ldr r3, [r3, #4] + 8010298: 4798 blx r3 + if (length != (n * 2 + 6) || n > MAX_COMPS_IN_SCAN || + 801029a: f109 0303 add.w r3, r9, #3 + 801029e: ebb8 0f43 cmp.w r8, r3, lsl #1 + 80102a2: d108 bne.n 80102b6 + 80102a4: f1b9 0f04 cmp.w r9, #4 + 80102a8: dc05 bgt.n 80102b6 + 80102aa: f1b9 0f00 cmp.w r9, #0 + 80102ae: d108 bne.n 80102c2 + (n == 0 && !cinfo->progressive_mode)) + 80102b0: f8d4 30e0 ldr.w r3, [r4, #224] ; 0xe0 + 80102b4: b92b cbnz r3, 80102c2 + ERREXIT(cinfo, JERR_BAD_LENGTH); + 80102b6: 6823 ldr r3, [r4, #0] + 80102b8: 220c movs r2, #12 + 80102ba: 4620 mov r0, r4 + 80102bc: 615a str r2, [r3, #20] + 80102be: 681b ldr r3, [r3, #0] + 80102c0: 4798 blx r3 + cinfo->comps_in_scan = n; + 80102c2: f504 73a8 add.w r3, r4, #336 ; 0x150 + for (i = 0; i < n; i++) { + 80102c6: f04f 0a00 mov.w sl, #0 + cinfo->comps_in_scan = n; + 80102ca: f8c4 9150 str.w r9, [r4, #336] ; 0x150 + for (i = 0; i < n; i++) { + 80102ce: 9301 str r3, [sp, #4] + 80102d0: 45d1 cmp r9, sl + 80102d2: dc5a bgt.n 801038a + INPUT_BYTE(cinfo, c, return FALSE); + 80102d4: b93e cbnz r6, 80102e6 + 80102d6: 68fb ldr r3, [r7, #12] + 80102d8: 4620 mov r0, r4 + 80102da: 4798 blx r3 + 80102dc: 2800 cmp r0, #0 + 80102de: f43f af52 beq.w 8010186 + 80102e2: e9d7 5600 ldrd r5, r6, [r7] + 80102e6: 782b ldrb r3, [r5, #0] + INPUT_BYTE(cinfo, c, return FALSE); + 80102e8: 3e01 subs r6, #1 + INPUT_BYTE(cinfo, c, return FALSE); + 80102ea: f8c4 3198 str.w r3, [r4, #408] ; 0x198 + INPUT_BYTE(cinfo, c, return FALSE); + 80102ee: f000 809a beq.w 8010426 + INPUT_BYTE(cinfo, c, return FALSE); + 80102f2: 3501 adds r5, #1 + INPUT_BYTE(cinfo, c, return FALSE); + 80102f4: 782b ldrb r3, [r5, #0] + INPUT_BYTE(cinfo, c, return FALSE); + 80102f6: 3e01 subs r6, #1 + INPUT_BYTE(cinfo, c, return FALSE); + 80102f8: f8c4 319c str.w r3, [r4, #412] ; 0x19c + INPUT_BYTE(cinfo, c, return FALSE); + 80102fc: f000 809c beq.w 8010438 + INPUT_BYTE(cinfo, c, return FALSE); + 8010300: 3501 adds r5, #1 + INPUT_BYTE(cinfo, c, return FALSE); + 8010302: f815 3b01 ldrb.w r3, [r5], #1 + TRACEMS4(cinfo, 1, JTRC_SOS_PARAMS, cinfo->Ss, cinfo->Se, + 8010306: 2101 movs r1, #1 + 8010308: 4620 mov r0, r4 + INPUT_BYTE(cinfo, c, return FALSE); + 801030a: 3e01 subs r6, #1 + cinfo->Ah = (c >> 4) & 15; + 801030c: 111a asrs r2, r3, #4 + cinfo->Al = (c ) & 15; + 801030e: f003 030f and.w r3, r3, #15 + cinfo->Ah = (c >> 4) & 15; + 8010312: f8c4 21a0 str.w r2, [r4, #416] ; 0x1a0 + cinfo->Al = (c ) & 15; + 8010316: f8c4 31a4 str.w r3, [r4, #420] ; 0x1a4 + TRACEMS4(cinfo, 1, JTRC_SOS_PARAMS, cinfo->Ss, cinfo->Se, + 801031a: f8d4 2198 ldr.w r2, [r4, #408] ; 0x198 + 801031e: 6823 ldr r3, [r4, #0] + 8010320: 619a str r2, [r3, #24] + 8010322: f8d4 219c ldr.w r2, [r4, #412] ; 0x19c + 8010326: 61da str r2, [r3, #28] + 8010328: f8d4 21a0 ldr.w r2, [r4, #416] ; 0x1a0 + 801032c: 621a str r2, [r3, #32] + 801032e: f8d4 21a4 ldr.w r2, [r4, #420] ; 0x1a4 + 8010332: 625a str r2, [r3, #36] ; 0x24 + 8010334: 226b movs r2, #107 ; 0x6b + 8010336: 615a str r2, [r3, #20] + 8010338: 685b ldr r3, [r3, #4] + 801033a: 4798 blx r3 + cinfo->marker->next_restart_num = 0; + 801033c: f8d4 31cc ldr.w r3, [r4, #460] ; 0x1cc + 8010340: 2200 movs r2, #0 + 8010342: 615a str r2, [r3, #20] + if (n) cinfo->input_scan_number++; + 8010344: f1b9 0f00 cmp.w r9, #0 + 8010348: d004 beq.n 8010354 + 801034a: f8d4 3090 ldr.w r3, [r4, #144] ; 0x90 + 801034e: 3301 adds r3, #1 + 8010350: f8c4 3090 str.w r3, [r4, #144] ; 0x90 + cinfo->unread_marker = 0; /* processed the marker */ + 8010354: 2300 movs r3, #0 + return JPEG_REACHED_SOS; + 8010356: 2001 movs r0, #1 + INPUT_SYNC(cinfo); + 8010358: e9c7 5600 strd r5, r6, [r7] + cinfo->unread_marker = 0; /* processed the marker */ + 801035c: f8c4 31b4 str.w r3, [r4, #436] ; 0x1b4 +} + 8010360: b005 add sp, #20 + 8010362: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + INPUT_2BYTES(cinfo, length, return FALSE); + 8010366: 68fb ldr r3, [r7, #12] + 8010368: 4620 mov r0, r4 + 801036a: 4798 blx r3 + 801036c: 2800 cmp r0, #0 + 801036e: f43f af0a beq.w 8010186 + 8010372: e9d7 5600 ldrd r5, r6, [r7] + 8010376: e77f b.n 8010278 + INPUT_BYTE(cinfo, n, return FALSE); /* Number of components */ + 8010378: 68fb ldr r3, [r7, #12] + 801037a: 4620 mov r0, r4 + 801037c: 4798 blx r3 + 801037e: 2800 cmp r0, #0 + 8010380: f43f af01 beq.w 8010186 + 8010384: e9d7 5600 ldrd r5, r6, [r7] + 8010388: e77c b.n 8010284 + INPUT_BYTE(cinfo, cc, return FALSE); + 801038a: b93e cbnz r6, 801039c + 801038c: 68fb ldr r3, [r7, #12] + 801038e: 4620 mov r0, r4 + 8010390: 4798 blx r3 + 8010392: 2800 cmp r0, #0 + 8010394: f43f aef7 beq.w 8010186 + 8010398: e9d7 5600 ldrd r5, r6, [r7] + INPUT_BYTE(cinfo, c, return FALSE); + 801039c: 3e01 subs r6, #1 + INPUT_BYTE(cinfo, cc, return FALSE); + 801039e: f895 b000 ldrb.w fp, [r5] + INPUT_BYTE(cinfo, c, return FALSE); + 80103a2: d02f beq.n 8010404 + INPUT_BYTE(cinfo, cc, return FALSE); + 80103a4: 3501 adds r5, #1 + INPUT_BYTE(cinfo, c, return FALSE); + 80103a6: 3e01 subs r6, #1 + 80103a8: f815 3b01 ldrb.w r3, [r5], #1 + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + 80103ac: f8d4 80d8 ldr.w r8, [r4, #216] ; 0xd8 + 80103b0: 2000 movs r0, #0 + 80103b2: 6a62 ldr r2, [r4, #36] ; 0x24 + 80103b4: 4290 cmp r0, r2 + 80103b6: db2e blt.n 8010416 + ERREXIT1(cinfo, JERR_BAD_COMPONENT_ID, cc); + 80103b8: 6821 ldr r1, [r4, #0] + 80103ba: 4620 mov r0, r4 + 80103bc: 9302 str r3, [sp, #8] + 80103be: 2304 movs r3, #4 + 80103c0: e9c1 3b05 strd r3, fp, [r1, #20] + 80103c4: 6809 ldr r1, [r1, #0] + 80103c6: 4788 blx r1 + 80103c8: 9b02 ldr r3, [sp, #8] + cinfo->cur_comp_info[i] = compptr; + 80103ca: 9a01 ldr r2, [sp, #4] + compptr->dc_tbl_no = (c >> 4) & 15; + 80103cc: 1119 asrs r1, r3, #4 + compptr->ac_tbl_no = (c ) & 15; + 80103ce: f003 030f and.w r3, r3, #15 + TRACEMS3(cinfo, 1, JTRC_SOS_COMPONENT, cc, + 80103d2: 4620 mov r0, r4 + cinfo->cur_comp_info[i] = compptr; + 80103d4: f842 8f04 str.w r8, [r2, #4]! + for (i = 0; i < n; i++) { + 80103d8: f10a 0a01 add.w sl, sl, #1 + compptr->dc_tbl_no = (c >> 4) & 15; + 80103dc: f8c8 1014 str.w r1, [r8, #20] + TRACEMS3(cinfo, 1, JTRC_SOS_COMPONENT, cc, + 80103e0: 6821 ldr r1, [r4, #0] + compptr->ac_tbl_no = (c ) & 15; + 80103e2: f8c8 3018 str.w r3, [r8, #24] + TRACEMS3(cinfo, 1, JTRC_SOS_COMPONENT, cc, + 80103e6: f8c1 b018 str.w fp, [r1, #24] + 80103ea: f8d8 3014 ldr.w r3, [r8, #20] + cinfo->cur_comp_info[i] = compptr; + 80103ee: 9201 str r2, [sp, #4] + TRACEMS3(cinfo, 1, JTRC_SOS_COMPONENT, cc, + 80103f0: 61cb str r3, [r1, #28] + 80103f2: f8d8 3018 ldr.w r3, [r8, #24] + 80103f6: 620b str r3, [r1, #32] + 80103f8: 236a movs r3, #106 ; 0x6a + 80103fa: 614b str r3, [r1, #20] + 80103fc: 684b ldr r3, [r1, #4] + 80103fe: 2101 movs r1, #1 + 8010400: 4798 blx r3 + for (i = 0; i < n; i++) { + 8010402: e765 b.n 80102d0 + INPUT_BYTE(cinfo, c, return FALSE); + 8010404: 68fb ldr r3, [r7, #12] + 8010406: 4620 mov r0, r4 + 8010408: 4798 blx r3 + 801040a: 2800 cmp r0, #0 + 801040c: f43f aebb beq.w 8010186 + 8010410: e9d7 5600 ldrd r5, r6, [r7] + 8010414: e7c7 b.n 80103a6 + if (cc == compptr->component_id) + 8010416: f8d8 1000 ldr.w r1, [r8] + 801041a: 458b cmp fp, r1 + 801041c: d0d5 beq.n 80103ca + ci++, compptr++) { + 801041e: 3001 adds r0, #1 + 8010420: f108 0858 add.w r8, r8, #88 ; 0x58 + 8010424: e7c6 b.n 80103b4 + INPUT_BYTE(cinfo, c, return FALSE); + 8010426: 68fb ldr r3, [r7, #12] + 8010428: 4620 mov r0, r4 + 801042a: 4798 blx r3 + 801042c: 2800 cmp r0, #0 + 801042e: f43f aeaa beq.w 8010186 + 8010432: e9d7 5600 ldrd r5, r6, [r7] + 8010436: e75d b.n 80102f4 + INPUT_BYTE(cinfo, c, return FALSE); + 8010438: 68fb ldr r3, [r7, #12] + 801043a: 4620 mov r0, r4 + 801043c: 4798 blx r3 + 801043e: 2800 cmp r0, #0 + 8010440: f43f aea1 beq.w 8010186 + 8010444: e9d7 5600 ldrd r5, r6, [r7] + 8010448: e75b b.n 8010302 + TRACEMS(cinfo, 1, JTRC_EOI); + 801044a: 6823 ldr r3, [r4, #0] + 801044c: 2257 movs r2, #87 ; 0x57 + 801044e: 4620 mov r0, r4 + 8010450: 2101 movs r1, #1 + 8010452: 615a str r2, [r3, #20] + 8010454: 685b ldr r3, [r3, #4] + 8010456: 4798 blx r3 + cinfo->unread_marker = 0; /* processed the marker */ + 8010458: 2300 movs r3, #0 + return JPEG_REACHED_EOI; + 801045a: 2002 movs r0, #2 + cinfo->unread_marker = 0; /* processed the marker */ + 801045c: f8c4 31b4 str.w r3, [r4, #436] ; 0x1b4 + return JPEG_REACHED_EOI; + 8010460: e77e b.n 8010360 + INPUT_VARS(cinfo); + 8010462: 69a7 ldr r7, [r4, #24] + 8010464: e9d7 5600 ldrd r5, r6, [r7] + INPUT_2BYTES(cinfo, length, return FALSE); + 8010468: b93e cbnz r6, 801047a + 801046a: 68fb ldr r3, [r7, #12] + 801046c: 4620 mov r0, r4 + 801046e: 4798 blx r3 + 8010470: 2800 cmp r0, #0 + 8010472: f43f ae88 beq.w 8010186 + 8010476: e9d7 5600 ldrd r5, r6, [r7] + 801047a: f895 8000 ldrb.w r8, [r5] + 801047e: 3e01 subs r6, #1 + 8010480: ea4f 2808 mov.w r8, r8, lsl #8 + 8010484: d015 beq.n 80104b2 + 8010486: 3501 adds r5, #1 + 8010488: f815 9b01 ldrb.w r9, [r5], #1 + 801048c: 3e01 subs r6, #1 + ERREXIT1(cinfo, JERR_DAC_INDEX, index); + 801048e: f04f 0b1d mov.w fp, #29 + INPUT_2BYTES(cinfo, length, return FALSE); + 8010492: 44c1 add r9, r8 + length -= 2; + 8010494: f1a9 0902 sub.w r9, r9, #2 + while (length > 0) { + 8010498: f1b9 0f00 cmp.w r9, #0 + 801049c: dc12 bgt.n 80104c4 + if (length != 0) + 801049e: d005 beq.n 80104ac + ERREXIT(cinfo, JERR_BAD_LENGTH); + 80104a0: 6823 ldr r3, [r4, #0] + 80104a2: 220c movs r2, #12 + 80104a4: 4620 mov r0, r4 + 80104a6: 615a str r2, [r3, #20] + 80104a8: 681b ldr r3, [r3, #0] + 80104aa: 4798 blx r3 + INPUT_SYNC(cinfo); + 80104ac: 603d str r5, [r7, #0] + INPUT_SYNC(cinfo); + 80104ae: 607e str r6, [r7, #4] + return TRUE; + 80104b0: e6a5 b.n 80101fe + INPUT_2BYTES(cinfo, length, return FALSE); + 80104b2: 68fb ldr r3, [r7, #12] + 80104b4: 4620 mov r0, r4 + 80104b6: 4798 blx r3 + 80104b8: 2800 cmp r0, #0 + 80104ba: f43f ae64 beq.w 8010186 + 80104be: e9d7 5600 ldrd r5, r6, [r7] + 80104c2: e7e1 b.n 8010488 + INPUT_BYTE(cinfo, index, return FALSE); + 80104c4: b93e cbnz r6, 80104d6 + 80104c6: 68fb ldr r3, [r7, #12] + 80104c8: 4620 mov r0, r4 + 80104ca: 4798 blx r3 + 80104cc: 2800 cmp r0, #0 + 80104ce: f43f ae5a beq.w 8010186 + 80104d2: e9d7 5600 ldrd r5, r6, [r7] + INPUT_BYTE(cinfo, val, return FALSE); + 80104d6: 3e01 subs r6, #1 + INPUT_BYTE(cinfo, index, return FALSE); + 80104d8: f895 8000 ldrb.w r8, [r5] + INPUT_BYTE(cinfo, val, return FALSE); + 80104dc: d01f beq.n 801051e + INPUT_BYTE(cinfo, index, return FALSE); + 80104de: 3501 adds r5, #1 + TRACEMS2(cinfo, 1, JTRC_DAC, index, val); + 80104e0: 6822 ldr r2, [r4, #0] + 80104e2: 2351 movs r3, #81 ; 0x51 + INPUT_BYTE(cinfo, val, return FALSE); + 80104e4: f815 ab01 ldrb.w sl, [r5], #1 + TRACEMS2(cinfo, 1, JTRC_DAC, index, val); + 80104e8: 2101 movs r1, #1 + 80104ea: 4620 mov r0, r4 + INPUT_BYTE(cinfo, val, return FALSE); + 80104ec: 3e01 subs r6, #1 + TRACEMS2(cinfo, 1, JTRC_DAC, index, val); + 80104ee: f8c2 a01c str.w sl, [r2, #28] + length -= 2; + 80104f2: f1a9 0902 sub.w r9, r9, #2 + TRACEMS2(cinfo, 1, JTRC_DAC, index, val); + 80104f6: e9c2 3805 strd r3, r8, [r2, #20] + 80104fa: 6852 ldr r2, [r2, #4] + 80104fc: 4790 blx r2 + if (index < 0 || index >= (2*NUM_ARITH_TBLS)) + 80104fe: f1b8 0f1f cmp.w r8, #31 + 8010502: d905 bls.n 8010510 + ERREXIT1(cinfo, JERR_DAC_INDEX, index); + 8010504: 6822 ldr r2, [r4, #0] + 8010506: 4620 mov r0, r4 + 8010508: e9c2 b805 strd fp, r8, [r2, #20] + 801050c: 6812 ldr r2, [r2, #0] + 801050e: 4790 blx r2 + if (index >= NUM_ARITH_TBLS) { /* define AC table */ + 8010510: f1b8 0f0f cmp.w r8, #15 + 8010514: 44a0 add r8, r4 + 8010516: dd0b ble.n 8010530 + cinfo->arith_ac_K[index-NUM_ARITH_TBLS] = (UINT8) val; + 8010518: f888 a0f8 strb.w sl, [r8, #248] ; 0xf8 + 801051c: e7bc b.n 8010498 + INPUT_BYTE(cinfo, val, return FALSE); + 801051e: 68fb ldr r3, [r7, #12] + 8010520: 4620 mov r0, r4 + 8010522: 4798 blx r3 + 8010524: 2800 cmp r0, #0 + 8010526: f43f ae2e beq.w 8010186 + 801052a: e9d7 5600 ldrd r5, r6, [r7] + 801052e: e7d7 b.n 80104e0 + cinfo->arith_dc_L[index] = (UINT8) (val & 0x0F); + 8010530: f00a 010f and.w r1, sl, #15 + cinfo->arith_dc_U[index] = (UINT8) (val >> 4); + 8010534: ea4f 121a mov.w r2, sl, lsr #4 + if (cinfo->arith_dc_L[index] > cinfo->arith_dc_U[index]) + 8010538: 4291 cmp r1, r2 + cinfo->arith_dc_L[index] = (UINT8) (val & 0x0F); + 801053a: f888 10e8 strb.w r1, [r8, #232] ; 0xe8 + cinfo->arith_dc_U[index] = (UINT8) (val >> 4); + 801053e: f888 20f8 strb.w r2, [r8, #248] ; 0xf8 + if (cinfo->arith_dc_L[index] > cinfo->arith_dc_U[index]) + 8010542: d9a9 bls.n 8010498 + ERREXIT1(cinfo, JERR_DAC_VALUE, val); + 8010544: 6822 ldr r2, [r4, #0] + 8010546: 211e movs r1, #30 + 8010548: 4620 mov r0, r4 + 801054a: 6813 ldr r3, [r2, #0] + 801054c: e9c2 1a05 strd r1, sl, [r2, #20] + 8010550: 4798 blx r3 + 8010552: e7a1 b.n 8010498 + if (! get_dht(cinfo)) + 8010554: 4620 mov r0, r4 + 8010556: f7ff fc80 bl 800fe5a + 801055a: e65a b.n 8010212 + INPUT_VARS(cinfo); + 801055c: 69a6 ldr r6, [r4, #24] + 801055e: e9d6 5300 ldrd r5, r3, [r6] + INPUT_2BYTES(cinfo, length, return FALSE); + 8010562: b93b cbnz r3, 8010574 + 8010564: 68f3 ldr r3, [r6, #12] + 8010566: 4620 mov r0, r4 + 8010568: 4798 blx r3 + 801056a: 2800 cmp r0, #0 + 801056c: f43f ae0b beq.w 8010186 + 8010570: e9d6 5300 ldrd r5, r3, [r6] + 8010574: 782f ldrb r7, [r5, #0] + 8010576: 3b01 subs r3, #1 + 8010578: ea4f 2707 mov.w r7, r7, lsl #8 + 801057c: d014 beq.n 80105a8 + 801057e: 3501 adds r5, #1 + 8010580: f815 8b01 ldrb.w r8, [r5], #1 + 8010584: f103 3aff add.w sl, r3, #4294967295 + 8010588: 44b8 add r8, r7 + length -= 2; + 801058a: f1a8 0802 sub.w r8, r8, #2 + while (length > 0) { + 801058e: f1b8 0f00 cmp.w r8, #0 + 8010592: dc12 bgt.n 80105ba + if (length != 0) + 8010594: d005 beq.n 80105a2 + ERREXIT(cinfo, JERR_BAD_LENGTH); + 8010596: 6822 ldr r2, [r4, #0] + 8010598: 210c movs r1, #12 + 801059a: 4620 mov r0, r4 + 801059c: 6151 str r1, [r2, #20] + 801059e: 6812 ldr r2, [r2, #0] + 80105a0: 4790 blx r2 + INPUT_SYNC(cinfo); + 80105a2: e9c6 5a00 strd r5, sl, [r6] + return TRUE; + 80105a6: e62a b.n 80101fe + INPUT_2BYTES(cinfo, length, return FALSE); + 80105a8: 68f3 ldr r3, [r6, #12] + 80105aa: 4620 mov r0, r4 + 80105ac: 4798 blx r3 + 80105ae: 2800 cmp r0, #0 + 80105b0: f43f ade9 beq.w 8010186 + 80105b4: e9d6 5300 ldrd r5, r3, [r6] + 80105b8: e7e2 b.n 8010580 + length--; + 80105ba: f108 38ff add.w r8, r8, #4294967295 + INPUT_BYTE(cinfo, n, return FALSE); + 80105be: f1ba 0f00 cmp.w sl, #0 + 80105c2: d107 bne.n 80105d4 + 80105c4: 68f3 ldr r3, [r6, #12] + 80105c6: 4620 mov r0, r4 + 80105c8: 4798 blx r3 + 80105ca: 2800 cmp r0, #0 + 80105cc: f43f addb beq.w 8010186 + 80105d0: e9d6 5a00 ldrd r5, sl, [r6] + 80105d4: f815 9b01 ldrb.w r9, [r5], #1 + TRACEMS2(cinfo, 1, JTRC_DQT, n, prec); + 80105d8: 2153 movs r1, #83 ; 0x53 + 80105da: 6822 ldr r2, [r4, #0] + 80105dc: 4620 mov r0, r4 + prec = n >> 4; + 80105de: ea4f 1329 mov.w r3, r9, asr #4 + 80105e2: f009 070f and.w r7, r9, #15 + INPUT_BYTE(cinfo, n, return FALSE); + 80105e6: f10a 3aff add.w sl, sl, #4294967295 + TRACEMS2(cinfo, 1, JTRC_DQT, n, prec); + 80105ea: 61d3 str r3, [r2, #28] + prec = n >> 4; + 80105ec: 9301 str r3, [sp, #4] + TRACEMS2(cinfo, 1, JTRC_DQT, n, prec); + 80105ee: e9c2 1705 strd r1, r7, [r2, #20] + 80105f2: 6852 ldr r2, [r2, #4] + 80105f4: 2101 movs r1, #1 + 80105f6: 4790 blx r2 + if (n >= NUM_QUANT_TBLS) + 80105f8: f019 0f0c tst.w r9, #12 + 80105fc: d006 beq.n 801060c + ERREXIT1(cinfo, JERR_DQT_INDEX, n); + 80105fe: 6822 ldr r2, [r4, #0] + 8010600: 2120 movs r1, #32 + 8010602: 4620 mov r0, r4 + 8010604: e9c2 1705 strd r1, r7, [r2, #20] + 8010608: 6812 ldr r2, [r2, #0] + 801060a: 4790 blx r2 + if (cinfo->quant_tbl_ptrs[n] == NULL) + 801060c: eb04 0787 add.w r7, r4, r7, lsl #2 + 8010610: f8d7 20a4 ldr.w r2, [r7, #164] ; 0xa4 + 8010614: b922 cbnz r2, 8010620 + cinfo->quant_tbl_ptrs[n] = jpeg_alloc_quant_table((j_common_ptr) cinfo); + 8010616: 4620 mov r0, r4 + 8010618: f7fb f8a0 bl 800b75c + 801061c: f8c7 00a4 str.w r0, [r7, #164] ; 0xa4 + if (prec) { + 8010620: 9b01 ldr r3, [sp, #4] + quant_ptr = cinfo->quant_tbl_ptrs[n]; + 8010622: f8d7 b0a4 ldr.w fp, [r7, #164] ; 0xa4 + if (prec) { + 8010626: 2b00 cmp r3, #0 + 8010628: d057 beq.n 80106da + if (length < DCTSIZE2 * 2) { + 801062a: f1b8 0f7f cmp.w r8, #127 ; 0x7f + 801062e: dc6c bgt.n 801070a + 8010630: f1ab 0202 sub.w r2, fp, #2 + 8010634: f10b 017e add.w r1, fp, #126 ; 0x7e + quant_ptr->quantval[i] = 1; + 8010638: 2001 movs r0, #1 + 801063a: f822 0f02 strh.w r0, [r2, #2]! + for (i = 0; i < DCTSIZE2; i++) { + 801063e: 4291 cmp r1, r2 + 8010640: d1fb bne.n 801063a + count = length >> 1; + 8010642: ea4f 0968 mov.w r9, r8, asr #1 + switch (count) { + 8010646: f1b9 0f19 cmp.w r9, #25 + 801064a: d062 beq.n 8010712 + 801064c: dc53 bgt.n 80106f6 + 801064e: f1b9 0f09 cmp.w r9, #9 + 8010652: d060 beq.n 8010716 + 8010654: f1b9 0f10 cmp.w r9, #16 + 8010658: d05f beq.n 801071a + default: natural_order = jpeg_natural_order; break; + 801065a: 4f85 ldr r7, [pc, #532] ; (8010870 ) + 801065c: 4a85 ldr r2, [pc, #532] ; (8010874 ) + 801065e: f1b9 0f04 cmp.w r9, #4 + 8010662: bf18 it ne + 8010664: 4617 movne r7, r2 + for (i = 0; i < count; i++) { + 8010666: eb07 0389 add.w r3, r7, r9, lsl #2 + 801066a: 9302 str r3, [sp, #8] + 801066c: 9b02 ldr r3, [sp, #8] + 801066e: 42bb cmp r3, r7 + 8010670: d157 bne.n 8010722 + if (cinfo->err->trace_level >= 2) { + 8010672: 6822 ldr r2, [r4, #0] + 8010674: 6e92 ldr r2, [r2, #104] ; 0x68 + 8010676: 2a01 cmp r2, #1 + 8010678: dd26 ble.n 80106c8 + 801067a: f10b 0380 add.w r3, fp, #128 ; 0x80 + TRACEMS8(cinfo, 2, JTRC_QUANTVALS, + 801067e: 275f movs r7, #95 ; 0x5f + 8010680: f8bb 1000 ldrh.w r1, [fp] + 8010684: 4620 mov r0, r4 + 8010686: 6822 ldr r2, [r4, #0] + for (i = 0; i < DCTSIZE2; i += 8) { + 8010688: f10b 0b10 add.w fp, fp, #16 + 801068c: 9302 str r3, [sp, #8] + TRACEMS8(cinfo, 2, JTRC_QUANTVALS, + 801068e: 6191 str r1, [r2, #24] + 8010690: f83b 1c0e ldrh.w r1, [fp, #-14] + 8010694: 61d1 str r1, [r2, #28] + 8010696: f83b 1c0c ldrh.w r1, [fp, #-12] + 801069a: 6211 str r1, [r2, #32] + 801069c: f83b 1c0a ldrh.w r1, [fp, #-10] + 80106a0: 6251 str r1, [r2, #36] ; 0x24 + 80106a2: f83b 1c08 ldrh.w r1, [fp, #-8] + 80106a6: 6291 str r1, [r2, #40] ; 0x28 + 80106a8: f83b 1c06 ldrh.w r1, [fp, #-6] + 80106ac: 62d1 str r1, [r2, #44] ; 0x2c + 80106ae: f83b 1c04 ldrh.w r1, [fp, #-4] + 80106b2: 6311 str r1, [r2, #48] ; 0x30 + 80106b4: f83b 1c02 ldrh.w r1, [fp, #-2] + 80106b8: 6157 str r7, [r2, #20] + 80106ba: 6351 str r1, [r2, #52] ; 0x34 + 80106bc: 2102 movs r1, #2 + 80106be: 6852 ldr r2, [r2, #4] + 80106c0: 4790 blx r2 + for (i = 0; i < DCTSIZE2; i += 8) { + 80106c2: 9b02 ldr r3, [sp, #8] + 80106c4: 459b cmp fp, r3 + 80106c6: d1db bne.n 8010680 + if (prec) length -= count; + 80106c8: 9b01 ldr r3, [sp, #4] + length -= count; + 80106ca: eba8 0809 sub.w r8, r8, r9 + if (prec) length -= count; + 80106ce: 2b00 cmp r3, #0 + 80106d0: f43f af5d beq.w 801058e + 80106d4: eba8 0809 sub.w r8, r8, r9 + 80106d8: e759 b.n 801058e + if (length < DCTSIZE2) { + 80106da: f1b8 0f3f cmp.w r8, #63 ; 0x3f + 80106de: dc14 bgt.n 801070a + 80106e0: f1ab 0202 sub.w r2, fp, #2 + 80106e4: f10b 017e add.w r1, fp, #126 ; 0x7e + quant_ptr->quantval[i] = 1; + 80106e8: 2001 movs r0, #1 + 80106ea: f822 0f02 strh.w r0, [r2, #2]! + for (i = 0; i < DCTSIZE2; i++) { + 80106ee: 4291 cmp r1, r2 + 80106f0: d1fb bne.n 80106ea + 80106f2: 46c1 mov r9, r8 + 80106f4: e7a7 b.n 8010646 + switch (count) { + 80106f6: f1b9 0f24 cmp.w r9, #36 ; 0x24 + 80106fa: d010 beq.n 801071e + default: natural_order = jpeg_natural_order; break; + 80106fc: 4f5d ldr r7, [pc, #372] ; (8010874 ) + 80106fe: 4b5e ldr r3, [pc, #376] ; (8010878 ) + 8010700: f1b9 0f31 cmp.w r9, #49 ; 0x31 + 8010704: bf08 it eq + 8010706: 461f moveq r7, r3 + 8010708: e7ad b.n 8010666 + count = DCTSIZE2; + 801070a: f04f 0940 mov.w r9, #64 ; 0x40 + default: natural_order = jpeg_natural_order; break; + 801070e: 4f59 ldr r7, [pc, #356] ; (8010874 ) + 8010710: e7a9 b.n 8010666 + case (5*5): natural_order = jpeg_natural_order5; break; + 8010712: 4f5a ldr r7, [pc, #360] ; (801087c ) + 8010714: e7a7 b.n 8010666 + case (3*3): natural_order = jpeg_natural_order3; break; + 8010716: 4f5a ldr r7, [pc, #360] ; (8010880 ) + 8010718: e7a5 b.n 8010666 + case (4*4): natural_order = jpeg_natural_order4; break; + 801071a: 4f5a ldr r7, [pc, #360] ; (8010884 ) + 801071c: e7a3 b.n 8010666 + case (6*6): natural_order = jpeg_natural_order6; break; + 801071e: 4f5a ldr r7, [pc, #360] ; (8010888 ) + 8010720: e7a1 b.n 8010666 + if (prec) + 8010722: 9b01 ldr r3, [sp, #4] + 8010724: b333 cbz r3, 8010774 + INPUT_2BYTES(cinfo, tmp, return FALSE); + 8010726: f1ba 0f00 cmp.w sl, #0 + 801072a: d107 bne.n 801073c + 801072c: 68f3 ldr r3, [r6, #12] + 801072e: 4620 mov r0, r4 + 8010730: 4798 blx r3 + 8010732: 2800 cmp r0, #0 + 8010734: f43f ad27 beq.w 8010186 + 8010738: e9d6 5a00 ldrd r5, sl, [r6] + 801073c: 782a ldrb r2, [r5, #0] + 801073e: f1ba 0301 subs.w r3, sl, #1 + 8010742: ea4f 2202 mov.w r2, r2, lsl #8 + 8010746: d00a beq.n 801075e + 8010748: 3501 adds r5, #1 + 801074a: f815 1b01 ldrb.w r1, [r5], #1 + 801074e: f103 3aff add.w sl, r3, #4294967295 + 8010752: 440a add r2, r1 + quant_ptr->quantval[natural_order[i]] = (UINT16) tmp; + 8010754: f857 1b04 ldr.w r1, [r7], #4 + 8010758: f82b 2011 strh.w r2, [fp, r1, lsl #1] + for (i = 0; i < count; i++) { + 801075c: e786 b.n 801066c + INPUT_2BYTES(cinfo, tmp, return FALSE); + 801075e: 68f3 ldr r3, [r6, #12] + 8010760: 4620 mov r0, r4 + 8010762: 9203 str r2, [sp, #12] + 8010764: 4798 blx r3 + 8010766: 2800 cmp r0, #0 + 8010768: f43f ad0d beq.w 8010186 + 801076c: 9a03 ldr r2, [sp, #12] + 801076e: e9d6 5300 ldrd r5, r3, [r6] + 8010772: e7ea b.n 801074a + INPUT_BYTE(cinfo, tmp, return FALSE); + 8010774: f1ba 0f00 cmp.w sl, #0 + 8010778: d107 bne.n 801078a + 801077a: 68f3 ldr r3, [r6, #12] + 801077c: 4620 mov r0, r4 + 801077e: 4798 blx r3 + 8010780: 2800 cmp r0, #0 + 8010782: f43f ad00 beq.w 8010186 + 8010786: e9d6 5a00 ldrd r5, sl, [r6] + 801078a: f10a 3aff add.w sl, sl, #4294967295 + 801078e: f815 2b01 ldrb.w r2, [r5], #1 + 8010792: e7df b.n 8010754 + INPUT_VARS(cinfo); + 8010794: 69a7 ldr r7, [r4, #24] + 8010796: e9d7 5300 ldrd r5, r3, [r7] + INPUT_2BYTES(cinfo, length, return FALSE); + 801079a: b93b cbnz r3, 80107ac + 801079c: 68fb ldr r3, [r7, #12] + 801079e: 4620 mov r0, r4 + 80107a0: 4798 blx r3 + 80107a2: 2800 cmp r0, #0 + 80107a4: f43f acef beq.w 8010186 + 80107a8: e9d7 5300 ldrd r5, r3, [r7] + 80107ac: f895 8000 ldrb.w r8, [r5] + 80107b0: 3b01 subs r3, #1 + 80107b2: ea4f 2808 mov.w r8, r8, lsl #8 + 80107b6: d024 beq.n 8010802 + 80107b8: 3501 adds r5, #1 + 80107ba: 782a ldrb r2, [r5, #0] + 80107bc: 1e5e subs r6, r3, #1 + 80107be: 4442 add r2, r8 + if (length != 4) + 80107c0: 2a04 cmp r2, #4 + 80107c2: d005 beq.n 80107d0 + ERREXIT(cinfo, JERR_BAD_LENGTH); + 80107c4: 6823 ldr r3, [r4, #0] + 80107c6: 220c movs r2, #12 + 80107c8: 4620 mov r0, r4 + 80107ca: 615a str r2, [r3, #20] + 80107cc: 681b ldr r3, [r3, #0] + 80107ce: 4798 blx r3 + INPUT_2BYTES(cinfo, tmp, return FALSE); + 80107d0: b306 cbz r6, 8010814 + INPUT_2BYTES(cinfo, length, return FALSE); + 80107d2: 3501 adds r5, #1 + INPUT_2BYTES(cinfo, tmp, return FALSE); + 80107d4: f895 9000 ldrb.w r9, [r5] + 80107d8: 3e01 subs r6, #1 + 80107da: ea4f 2909 mov.w r9, r9, lsl #8 + 80107de: d022 beq.n 8010826 + 80107e0: 3501 adds r5, #1 + 80107e2: f815 8b01 ldrb.w r8, [r5], #1 + TRACEMS1(cinfo, 1, JTRC_DRI, tmp); + 80107e6: 2254 movs r2, #84 ; 0x54 + 80107e8: 6823 ldr r3, [r4, #0] + 80107ea: 2101 movs r1, #1 + INPUT_2BYTES(cinfo, tmp, return FALSE); + 80107ec: 44c8 add r8, r9 + TRACEMS1(cinfo, 1, JTRC_DRI, tmp); + 80107ee: 4620 mov r0, r4 + INPUT_2BYTES(cinfo, tmp, return FALSE); + 80107f0: 3e01 subs r6, #1 + TRACEMS1(cinfo, 1, JTRC_DRI, tmp); + 80107f2: e9c3 2805 strd r2, r8, [r3, #20] + 80107f6: 685b ldr r3, [r3, #4] + 80107f8: 4798 blx r3 + cinfo->restart_interval = tmp; + 80107fa: f8c4 8118 str.w r8, [r4, #280] ; 0x118 + INPUT_SYNC(cinfo); + 80107fe: 603d str r5, [r7, #0] + 8010800: e655 b.n 80104ae + INPUT_2BYTES(cinfo, length, return FALSE); + 8010802: 68fb ldr r3, [r7, #12] + 8010804: 4620 mov r0, r4 + 8010806: 4798 blx r3 + 8010808: 2800 cmp r0, #0 + 801080a: f43f acbc beq.w 8010186 + 801080e: e9d7 5300 ldrd r5, r3, [r7] + 8010812: e7d2 b.n 80107ba + INPUT_2BYTES(cinfo, tmp, return FALSE); + 8010814: 68fb ldr r3, [r7, #12] + 8010816: 4620 mov r0, r4 + 8010818: 4798 blx r3 + 801081a: 2800 cmp r0, #0 + 801081c: f43f acb3 beq.w 8010186 + 8010820: e9d7 5600 ldrd r5, r6, [r7] + 8010824: e7d6 b.n 80107d4 + 8010826: 68fb ldr r3, [r7, #12] + 8010828: 4620 mov r0, r4 + 801082a: 4798 blx r3 + 801082c: 2800 cmp r0, #0 + 801082e: f43f acaa beq.w 8010186 + 8010832: e9d7 5600 ldrd r5, r6, [r7] + 8010836: e7d4 b.n 80107e2 + if (! (*((my_marker_ptr) cinfo->marker)->process_APPn[ + 8010838: f8d4 21cc ldr.w r2, [r4, #460] ; 0x1cc + 801083c: 3bd8 subs r3, #216 ; 0xd8 + 801083e: f852 3023 ldr.w r3, [r2, r3, lsl #2] + if (! (*((my_marker_ptr) cinfo->marker)->process_COM) (cinfo)) + 8010842: 4620 mov r0, r4 + 8010844: 4798 blx r3 + 8010846: e4e4 b.n 8010212 + 8010848: f8d4 31cc ldr.w r3, [r4, #460] ; 0x1cc + 801084c: 69db ldr r3, [r3, #28] + 801084e: e7f8 b.n 8010842 + TRACEMS1(cinfo, 1, JTRC_PARMLESS_MARKER, cinfo->unread_marker); + 8010850: 6822 ldr r2, [r4, #0] + 8010852: 215e movs r1, #94 ; 0x5e + 8010854: 4620 mov r0, r4 + 8010856: e9c2 1305 strd r1, r3, [r2, #20] + 801085a: 6853 ldr r3, [r2, #4] + 801085c: 2101 movs r1, #1 + 801085e: 4798 blx r3 + break; + 8010860: e4cd b.n 80101fe + if (! skip_variable(cinfo)) + 8010862: 4620 mov r0, r4 + 8010864: f7ff fa3a bl 800fcdc + 8010868: e4d3 b.n 8010212 + ERREXIT1(cinfo, JERR_UNKNOWN_MARKER, cinfo->unread_marker); + 801086a: 6822 ldr r2, [r4, #0] + 801086c: 2146 movs r1, #70 ; 0x46 + 801086e: e4e1 b.n 8010234 + 8010870: 080399a0 .word 0x080399a0 + 8010874: 08039860 .word 0x08039860 + 8010878: 08039c48 .word 0x08039c48 + 801087c: 08039ad4 .word 0x08039ad4 + 8010880: 080399f0 .word 0x080399f0 + 8010884: 08039a54 .word 0x08039a54 + 8010888: 08039b78 .word 0x08039b78 + +0801088c : +{ + 801088c: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} + 8010890: 460f mov r7, r1 + WARNMS2(cinfo, JWRN_MUST_RESYNC, marker, desired); + 8010892: 6803 ldr r3, [r0, #0] + int marker = cinfo->unread_marker; + 8010894: f8d0 51b4 ldr.w r5, [r0, #436] ; 0x1b4 + WARNMS2(cinfo, JWRN_MUST_RESYNC, marker, desired); + 8010898: 227c movs r2, #124 ; 0x7c + if (marker == ((int) M_RST0 + ((desired+1) & 7)) || + 801089a: f107 0801 add.w r8, r7, #1 + WARNMS2(cinfo, JWRN_MUST_RESYNC, marker, desired); + 801089e: 61d9 str r1, [r3, #28] + 80108a0: f04f 31ff mov.w r1, #4294967295 +{ + 80108a4: 4606 mov r6, r0 + if (marker == ((int) M_RST0 + ((desired+1) & 7)) || + 80108a6: f008 0807 and.w r8, r8, #7 + 80108aa: f108 08d0 add.w r8, r8, #208 ; 0xd0 + WARNMS2(cinfo, JWRN_MUST_RESYNC, marker, desired); + 80108ae: e9c3 2505 strd r2, r5, [r3, #20] + 80108b2: 685b ldr r3, [r3, #4] + 80108b4: 4798 blx r3 + if (marker < (int) M_SOF0) + 80108b6: 2dbf cmp r5, #191 ; 0xbf + 80108b8: dd2e ble.n 8010918 + else if (marker < (int) M_RST0 || marker > (int) M_RST7) + 80108ba: f1a5 03d0 sub.w r3, r5, #208 ; 0xd0 + 80108be: 2b07 cmp r3, #7 + 80108c0: d828 bhi.n 8010914 + if (marker == ((int) M_RST0 + ((desired+1) & 7)) || + 80108c2: 4545 cmp r5, r8 + 80108c4: d026 beq.n 8010914 + marker == ((int) M_RST0 + ((desired+2) & 7))) + 80108c6: 1cbb adds r3, r7, #2 + 80108c8: f003 0307 and.w r3, r3, #7 + 80108cc: 33d0 adds r3, #208 ; 0xd0 + if (marker == ((int) M_RST0 + ((desired+1) & 7)) || + 80108ce: 429d cmp r5, r3 + 80108d0: d020 beq.n 8010914 + else if (marker == ((int) M_RST0 + ((desired-1) & 7)) || + 80108d2: 1e7b subs r3, r7, #1 + 80108d4: f003 0307 and.w r3, r3, #7 + 80108d8: 33d0 adds r3, #208 ; 0xd0 + 80108da: 429d cmp r5, r3 + 80108dc: d01c beq.n 8010918 + marker == ((int) M_RST0 + ((desired-2) & 7))) + 80108de: 1ebc subs r4, r7, #2 + 80108e0: f004 0407 and.w r4, r4, #7 + 80108e4: 34d0 adds r4, #208 ; 0xd0 + action = 2; /* a prior restart, so advance */ + 80108e6: 42a5 cmp r5, r4 + 80108e8: bf14 ite ne + 80108ea: 2401 movne r4, #1 + 80108ec: 2402 moveq r4, #2 + TRACEMS2(cinfo, 4, JTRC_RECOVERY_ACTION, marker, action); + 80108ee: 6833 ldr r3, [r6, #0] + 80108f0: 2263 movs r2, #99 ; 0x63 + 80108f2: 2104 movs r1, #4 + 80108f4: 4630 mov r0, r6 + 80108f6: 61dc str r4, [r3, #28] + 80108f8: e9c3 2505 strd r2, r5, [r3, #20] + 80108fc: 685b ldr r3, [r3, #4] + 80108fe: 4798 blx r3 + switch (action) { + 8010900: 2c02 cmp r4, #2 + 8010902: d00b beq.n 801091c + 8010904: 2c03 cmp r4, #3 + 8010906: d002 beq.n 801090e + cinfo->unread_marker = 0; + 8010908: 2300 movs r3, #0 + 801090a: f8c6 31b4 str.w r3, [r6, #436] ; 0x1b4 + switch (action) { + 801090e: 2001 movs r0, #1 +} + 8010910: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + action = 3; /* valid non-restart marker */ + 8010914: 2403 movs r4, #3 + 8010916: e7ea b.n 80108ee + action = 2; /* a prior restart, so advance */ + 8010918: 2402 movs r4, #2 + 801091a: e7e8 b.n 80108ee + if (! next_marker(cinfo)) + 801091c: 4630 mov r0, r6 + 801091e: f7ff fa18 bl 800fd52 + 8010922: 2800 cmp r0, #0 + 8010924: d0f4 beq.n 8010910 + marker = cinfo->unread_marker; + 8010926: f8d6 51b4 ldr.w r5, [r6, #436] ; 0x1b4 + break; + 801092a: e7c4 b.n 80108b6 + +0801092c : + * This is called only once, when the decompression object is created. + */ + +GLOBAL(void) +jinit_marker_reader (j_decompress_ptr cinfo) +{ + 801092c: b538 push {r3, r4, r5, lr} + my_marker_ptr marker; + int i; + + /* Create subobject in permanent pool */ + marker = (my_marker_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT, + 801092e: 6843 ldr r3, [r0, #4] + 8010930: 22ac movs r2, #172 ; 0xac + 8010932: 2100 movs r1, #0 +{ + 8010934: 4605 mov r5, r0 + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT, + 8010936: 681b ldr r3, [r3, #0] + 8010938: 4798 blx r3 + SIZEOF(my_marker_reader)); + cinfo->marker = (struct jpeg_marker_reader *) marker; + /* Initialize public method pointers */ + marker->pub.reset_marker_reader = reset_marker_reader; + 801093a: 4b11 ldr r3, [pc, #68] ; (8010980 ) + cinfo->marker = (struct jpeg_marker_reader *) marker; + 801093c: f8c5 01cc str.w r0, [r5, #460] ; 0x1cc + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT, + 8010940: 4604 mov r4, r0 + marker->pub.reset_marker_reader = reset_marker_reader; + 8010942: 6003 str r3, [r0, #0] + marker->pub.read_markers = read_markers; + 8010944: f100 015c add.w r1, r0, #92 ; 0x5c + 8010948: 4b0e ldr r3, [pc, #56] ; (8010984 ) + marker->pub.read_restart_marker = read_restart_marker; + /* Initialize COM/APPn processing. + * By default, we examine and then discard APP0 and APP14, + * but simply discard COM and all other APPn. + */ + marker->process_COM = skip_variable; + 801094a: 4a0f ldr r2, [pc, #60] ; (8010988 ) + marker->pub.read_markers = read_markers; + 801094c: 6043 str r3, [r0, #4] + marker->pub.read_restart_marker = read_restart_marker; + 801094e: 4b0f ldr r3, [pc, #60] ; (801098c ) + marker->process_COM = skip_variable; + 8010950: 61c2 str r2, [r0, #28] + marker->pub.read_restart_marker = read_restart_marker; + 8010952: 6083 str r3, [r0, #8] + marker->length_limit_COM = 0; + 8010954: 2300 movs r3, #0 + 8010956: 6603 str r3, [r0, #96] ; 0x60 + for (i = 0; i < 16; i++) { + 8010958: f100 031c add.w r3, r0, #28 + marker->process_APPn[i] = skip_variable; + 801095c: f843 2f04 str.w r2, [r3, #4]! + for (i = 0; i < 16; i++) { + 8010960: 4299 cmp r1, r3 + 8010962: d1fb bne.n 801095c + marker->length_limit_APPn[i] = 0; + 8010964: f104 0064 add.w r0, r4, #100 ; 0x64 + 8010968: 2240 movs r2, #64 ; 0x40 + 801096a: 2100 movs r1, #0 + 801096c: f024 f826 bl 80349bc + } + marker->process_APPn[0] = get_interesting_appn; + 8010970: 4b07 ldr r3, [pc, #28] ; (8010990 ) + marker->process_APPn[14] = get_interesting_appn; + /* Reset marker processing state */ + reset_marker_reader(cinfo); + 8010972: 4628 mov r0, r5 + marker->process_APPn[0] = get_interesting_appn; + 8010974: 6223 str r3, [r4, #32] + marker->process_APPn[14] = get_interesting_appn; + 8010976: 65a3 str r3, [r4, #88] ; 0x58 +} + 8010978: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} + reset_marker_reader(cinfo); + 801097c: f7ff ba5e b.w 800fe3c + 8010980: 0800fe3d .word 0x0800fe3d + 8010984: 0801006d .word 0x0801006d + 8010988: 0800fcdd .word 0x0800fcdd + 801098c: 0800fddf .word 0x0800fddf + 8010990: 0800fc05 .word 0x0800fc05 + +08010994 : + * (In the latter case, jdapistd.c will crank the pass to completion.) + */ + +METHODDEF(void) +prepare_for_output_pass (j_decompress_ptr cinfo) +{ + 8010994: b538 push {r3, r4, r5, lr} + my_master_ptr master = (my_master_ptr) cinfo->master; + 8010996: f8d0 51b8 ldr.w r5, [r0, #440] ; 0x1b8 +{ + 801099a: 4604 mov r4, r0 + + if (master->pub.is_dummy_pass) { + 801099c: 68ab ldr r3, [r5, #8] + 801099e: 2b00 cmp r3, #0 + 80109a0: d02a beq.n 80109f8 +#ifdef QUANT_2PASS_SUPPORTED + /* Final pass of 2-pass quantization */ + master->pub.is_dummy_pass = FALSE; + 80109a2: 2100 movs r1, #0 + (*cinfo->cquantize->start_pass) (cinfo, FALSE); + 80109a4: f8d0 31e0 ldr.w r3, [r0, #480] ; 0x1e0 + master->pub.is_dummy_pass = FALSE; + 80109a8: 60a9 str r1, [r5, #8] + (*cinfo->cquantize->start_pass) (cinfo, FALSE); + 80109aa: 681b ldr r3, [r3, #0] + 80109ac: 4798 blx r3 + (*cinfo->post->start_pass) (cinfo, JBUF_CRANK_DEST); + 80109ae: f8d4 31c4 ldr.w r3, [r4, #452] ; 0x1c4 + 80109b2: 2102 movs r1, #2 + 80109b4: 4620 mov r0, r4 + 80109b6: 681b ldr r3, [r3, #0] + 80109b8: 4798 blx r3 + (*cinfo->main->start_pass) (cinfo, JBUF_CRANK_DEST); + 80109ba: f8d4 31bc ldr.w r3, [r4, #444] ; 0x1bc + 80109be: 2102 movs r1, #2 + 80109c0: 681b ldr r3, [r3, #0] + (*cinfo->upsample->start_pass) (cinfo); + if (cinfo->quantize_colors) + (*cinfo->cquantize->start_pass) (cinfo, master->pub.is_dummy_pass); + (*cinfo->post->start_pass) (cinfo, + (master->pub.is_dummy_pass ? JBUF_SAVE_AND_PASS : JBUF_PASS_THRU)); + (*cinfo->main->start_pass) (cinfo, JBUF_PASS_THRU); + 80109c2: 4620 mov r0, r4 + 80109c4: 4798 blx r3 + } + } + + /* Set up progress monitor's pass info if present */ + if (cinfo->progress != NULL) { + 80109c6: 68a2 ldr r2, [r4, #8] + 80109c8: b1aa cbz r2, 80109f6 + cinfo->progress->completed_passes = master->pass_number; + cinfo->progress->total_passes = master->pass_number + + (master->pub.is_dummy_pass ? 2 : 1); + 80109ca: 68a9 ldr r1, [r5, #8] + cinfo->progress->completed_passes = master->pass_number; + 80109cc: 68eb ldr r3, [r5, #12] + (master->pub.is_dummy_pass ? 2 : 1); + 80109ce: 2900 cmp r1, #0 + cinfo->progress->completed_passes = master->pass_number; + 80109d0: 60d3 str r3, [r2, #12] + (master->pub.is_dummy_pass ? 2 : 1); + 80109d2: bf14 ite ne + 80109d4: 2102 movne r1, #2 + 80109d6: 2101 moveq r1, #1 + cinfo->progress->total_passes = master->pass_number + + 80109d8: 440b add r3, r1 + /* In buffered-image mode, we assume one more output pass if EOI not + * yet reached, but no more passes if EOI has been reached. + */ + if (cinfo->buffered_image && ! cinfo->inputctl->eoi_reached) { + 80109da: 6c21 ldr r1, [r4, #64] ; 0x40 + cinfo->progress->total_passes = master->pass_number + + 80109dc: 6113 str r3, [r2, #16] + if (cinfo->buffered_image && ! cinfo->inputctl->eoi_reached) { + 80109de: b151 cbz r1, 80109f6 + 80109e0: f8d4 11c8 ldr.w r1, [r4, #456] ; 0x1c8 + 80109e4: 6949 ldr r1, [r1, #20] + 80109e6: b931 cbnz r1, 80109f6 + cinfo->progress->total_passes += (cinfo->enable_2pass_quant ? 2 : 1); + 80109e8: 6ee1 ldr r1, [r4, #108] ; 0x6c + 80109ea: 2900 cmp r1, #0 + 80109ec: bf14 ite ne + 80109ee: 2102 movne r1, #2 + 80109f0: 2101 moveq r1, #1 + 80109f2: 440b add r3, r1 + 80109f4: 6113 str r3, [r2, #16] + } + } +} + 80109f6: bd38 pop {r3, r4, r5, pc} + if (cinfo->quantize_colors && cinfo->colormap == NULL) { + 80109f8: 6d43 ldr r3, [r0, #84] ; 0x54 + 80109fa: b16b cbz r3, 8010a18 + 80109fc: f8d0 3088 ldr.w r3, [r0, #136] ; 0x88 + 8010a00: b953 cbnz r3, 8010a18 + if (cinfo->two_pass_quantize && cinfo->enable_2pass_quant) { + 8010a02: 6dc3 ldr r3, [r0, #92] ; 0x5c + 8010a04: 2b00 cmp r3, #0 + 8010a06: d037 beq.n 8010a78 + 8010a08: 6ec3 ldr r3, [r0, #108] ; 0x6c + 8010a0a: 2b00 cmp r3, #0 + 8010a0c: d034 beq.n 8010a78 + cinfo->cquantize = master->quantizer_2pass; + 8010a0e: 69ab ldr r3, [r5, #24] + 8010a10: f8c0 31e0 str.w r3, [r0, #480] ; 0x1e0 + master->pub.is_dummy_pass = TRUE; + 8010a14: 2301 movs r3, #1 + 8010a16: 60ab str r3, [r5, #8] + (*cinfo->idct->start_pass) (cinfo); + 8010a18: f8d4 31d4 ldr.w r3, [r4, #468] ; 0x1d4 + 8010a1c: 4620 mov r0, r4 + 8010a1e: 681b ldr r3, [r3, #0] + 8010a20: 4798 blx r3 + (*cinfo->coef->start_output_pass) (cinfo); + 8010a22: f8d4 31c0 ldr.w r3, [r4, #448] ; 0x1c0 + 8010a26: 4620 mov r0, r4 + 8010a28: 689b ldr r3, [r3, #8] + 8010a2a: 4798 blx r3 + if (! cinfo->raw_data_out) { + 8010a2c: 6c63 ldr r3, [r4, #68] ; 0x44 + 8010a2e: 2b00 cmp r3, #0 + 8010a30: d1c9 bne.n 80109c6 + if (! master->using_merged_upsample) + 8010a32: 692b ldr r3, [r5, #16] + 8010a34: b923 cbnz r3, 8010a40 + (*cinfo->cconvert->start_pass) (cinfo); + 8010a36: f8d4 31dc ldr.w r3, [r4, #476] ; 0x1dc + 8010a3a: 4620 mov r0, r4 + 8010a3c: 681b ldr r3, [r3, #0] + 8010a3e: 4798 blx r3 + (*cinfo->upsample->start_pass) (cinfo); + 8010a40: f8d4 31d8 ldr.w r3, [r4, #472] ; 0x1d8 + 8010a44: 4620 mov r0, r4 + 8010a46: 681b ldr r3, [r3, #0] + 8010a48: 4798 blx r3 + if (cinfo->quantize_colors) + 8010a4a: 6d63 ldr r3, [r4, #84] ; 0x54 + 8010a4c: b12b cbz r3, 8010a5a + (*cinfo->cquantize->start_pass) (cinfo, master->pub.is_dummy_pass); + 8010a4e: f8d4 31e0 ldr.w r3, [r4, #480] ; 0x1e0 + 8010a52: 4620 mov r0, r4 + 8010a54: 68a9 ldr r1, [r5, #8] + 8010a56: 681b ldr r3, [r3, #0] + 8010a58: 4798 blx r3 + (*cinfo->post->start_pass) (cinfo, + 8010a5a: 68aa ldr r2, [r5, #8] + 8010a5c: 4620 mov r0, r4 + 8010a5e: f8d4 31c4 ldr.w r3, [r4, #452] ; 0x1c4 + 8010a62: 2a00 cmp r2, #0 + 8010a64: 681b ldr r3, [r3, #0] + 8010a66: bf14 ite ne + 8010a68: 2103 movne r1, #3 + 8010a6a: 2100 moveq r1, #0 + 8010a6c: 4798 blx r3 + (*cinfo->main->start_pass) (cinfo, JBUF_PASS_THRU); + 8010a6e: f8d4 31bc ldr.w r3, [r4, #444] ; 0x1bc + 8010a72: 2100 movs r1, #0 + 8010a74: 681b ldr r3, [r3, #0] + 8010a76: e7a4 b.n 80109c2 + } else if (cinfo->enable_1pass_quant) { + 8010a78: 6e63 ldr r3, [r4, #100] ; 0x64 + 8010a7a: b11b cbz r3, 8010a84 + cinfo->cquantize = master->quantizer_1pass; + 8010a7c: 696b ldr r3, [r5, #20] + 8010a7e: f8c4 31e0 str.w r3, [r4, #480] ; 0x1e0 + 8010a82: e7c9 b.n 8010a18 + ERREXIT(cinfo, JERR_MODE_CHANGE); + 8010a84: 6823 ldr r3, [r4, #0] + 8010a86: 222f movs r2, #47 ; 0x2f + 8010a88: 4620 mov r0, r4 + 8010a8a: 615a str r2, [r3, #20] + 8010a8c: 681b ldr r3, [r3, #0] + 8010a8e: 4798 blx r3 + 8010a90: e7c2 b.n 8010a18 + +08010a92 : +METHODDEF(void) +finish_output_pass (j_decompress_ptr cinfo) +{ + my_master_ptr master = (my_master_ptr) cinfo->master; + + if (cinfo->quantize_colors) + 8010a92: 6d42 ldr r2, [r0, #84] ; 0x54 +{ + 8010a94: b510 push {r4, lr} + my_master_ptr master = (my_master_ptr) cinfo->master; + 8010a96: f8d0 41b8 ldr.w r4, [r0, #440] ; 0x1b8 + if (cinfo->quantize_colors) + 8010a9a: b11a cbz r2, 8010aa4 + (*cinfo->cquantize->finish_pass) (cinfo); + 8010a9c: f8d0 31e0 ldr.w r3, [r0, #480] ; 0x1e0 + 8010aa0: 689b ldr r3, [r3, #8] + 8010aa2: 4798 blx r3 + master->pass_number++; + 8010aa4: 68e3 ldr r3, [r4, #12] + 8010aa6: 3301 adds r3, #1 + 8010aa8: 60e3 str r3, [r4, #12] +} + 8010aaa: bd10 pop {r4, pc} + +08010aac : + if (cinfo->do_fancy_upsampling || cinfo->CCIR601_sampling) + 8010aac: 6cc3 ldr r3, [r0, #76] ; 0x4c +{ + 8010aae: 4602 mov r2, r0 + 8010ab0: b510 push {r4, lr} + if (cinfo->do_fancy_upsampling || cinfo->CCIR601_sampling) + 8010ab2: 2b00 cmp r3, #0 + 8010ab4: d142 bne.n 8010b3c + 8010ab6: f8d0 0130 ldr.w r0, [r0, #304] ; 0x130 + 8010aba: 2800 cmp r0, #0 + 8010abc: d140 bne.n 8010b40 + if (cinfo->jpeg_color_space != JCS_YCbCr || cinfo->num_components != 3 || + 8010abe: f892 3028 ldrb.w r3, [r2, #40] ; 0x28 + 8010ac2: 2b03 cmp r3, #3 + 8010ac4: d139 bne.n 8010b3a + 8010ac6: 6a53 ldr r3, [r2, #36] ; 0x24 + 8010ac8: 2b03 cmp r3, #3 + 8010aca: d136 bne.n 8010b3a + 8010acc: f892 3029 ldrb.w r3, [r2, #41] ; 0x29 + 8010ad0: 2b02 cmp r3, #2 + 8010ad2: d132 bne.n 8010b3a + cinfo->out_color_space != JCS_RGB || + 8010ad4: 6f93 ldr r3, [r2, #120] ; 0x78 + 8010ad6: 2b03 cmp r3, #3 + 8010ad8: d12f bne.n 8010b3a + if (cinfo->comp_info[0].h_samp_factor != 2 || + 8010ada: f8d2 30d8 ldr.w r3, [r2, #216] ; 0xd8 + 8010ade: 6899 ldr r1, [r3, #8] + 8010ae0: 2902 cmp r1, #2 + 8010ae2: d12a bne.n 8010b3a + 8010ae4: 6e19 ldr r1, [r3, #96] ; 0x60 + 8010ae6: 2901 cmp r1, #1 + 8010ae8: d127 bne.n 8010b3a + cinfo->comp_info[1].h_samp_factor != 1 || + 8010aea: f8d3 10b8 ldr.w r1, [r3, #184] ; 0xb8 + 8010aee: 2901 cmp r1, #1 + 8010af0: d123 bne.n 8010b3a + cinfo->comp_info[2].h_samp_factor != 1 || + 8010af2: 68d9 ldr r1, [r3, #12] + 8010af4: 2902 cmp r1, #2 + 8010af6: dc20 bgt.n 8010b3a + cinfo->comp_info[0].v_samp_factor > 2 || + 8010af8: 6e59 ldr r1, [r3, #100] ; 0x64 + 8010afa: 2901 cmp r1, #1 + 8010afc: d11d bne.n 8010b3a + cinfo->comp_info[1].v_samp_factor != 1 || + 8010afe: f8d3 10bc ldr.w r1, [r3, #188] ; 0xbc + 8010b02: 2901 cmp r1, #1 + 8010b04: d119 bne.n 8010b3a + if (cinfo->comp_info[0].DCT_h_scaled_size != cinfo->min_DCT_h_scaled_size || + 8010b06: f8d2 4140 ldr.w r4, [r2, #320] ; 0x140 + 8010b0a: 6a59 ldr r1, [r3, #36] ; 0x24 + 8010b0c: 42a1 cmp r1, r4 + 8010b0e: d114 bne.n 8010b3a + 8010b10: 6fdc ldr r4, [r3, #124] ; 0x7c + 8010b12: 42a1 cmp r1, r4 + 8010b14: d111 bne.n 8010b3a + cinfo->comp_info[1].DCT_h_scaled_size != cinfo->min_DCT_h_scaled_size || + 8010b16: f8d3 40d4 ldr.w r4, [r3, #212] ; 0xd4 + 8010b1a: 42a1 cmp r1, r4 + 8010b1c: d10d bne.n 8010b3a + cinfo->comp_info[0].DCT_v_scaled_size != cinfo->min_DCT_v_scaled_size || + 8010b1e: f8d2 1144 ldr.w r1, [r2, #324] ; 0x144 + cinfo->comp_info[2].DCT_h_scaled_size != cinfo->min_DCT_h_scaled_size || + 8010b22: 6a9a ldr r2, [r3, #40] ; 0x28 + 8010b24: 428a cmp r2, r1 + 8010b26: d108 bne.n 8010b3a + cinfo->comp_info[0].DCT_v_scaled_size != cinfo->min_DCT_v_scaled_size || + 8010b28: f8d3 1080 ldr.w r1, [r3, #128] ; 0x80 + 8010b2c: 428a cmp r2, r1 + 8010b2e: d104 bne.n 8010b3a + cinfo->comp_info[1].DCT_v_scaled_size != cinfo->min_DCT_v_scaled_size || + 8010b30: f8d3 00d8 ldr.w r0, [r3, #216] ; 0xd8 + 8010b34: 1a83 subs r3, r0, r2 + 8010b36: 4258 negs r0, r3 + 8010b38: 4158 adcs r0, r3 +} + 8010b3a: bd10 pop {r4, pc} + return FALSE; + 8010b3c: 2000 movs r0, #0 + 8010b3e: e7fc b.n 8010b3a + 8010b40: 4618 mov r0, r3 + 8010b42: e7fa b.n 8010b3a + +08010b44 : + if (cinfo->global_state != DSTATE_READY) + 8010b44: 6942 ldr r2, [r0, #20] + 8010b46: 2aca cmp r2, #202 ; 0xca +{ + 8010b48: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} + 8010b4c: 4604 mov r4, r0 + if (cinfo->global_state != DSTATE_READY) + 8010b4e: d005 beq.n 8010b5c + ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + 8010b50: 6803 ldr r3, [r0, #0] + 8010b52: 2115 movs r1, #21 + 8010b54: e9c3 1205 strd r1, r2, [r3, #20] + 8010b58: 681b ldr r3, [r3, #0] + 8010b5a: 4798 blx r3 + jpeg_core_output_dimensions(cinfo); + 8010b5c: 4620 mov r0, r4 + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + 8010b5e: 2600 movs r6, #0 + jpeg_core_output_dimensions(cinfo); + 8010b60: f7fe fb04 bl 800f16c + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + 8010b64: f8d4 50d8 ldr.w r5, [r4, #216] ; 0xd8 + 8010b68: f8d4 c024 ldr.w ip, [r4, #36] ; 0x24 + 8010b6c: 462b mov r3, r5 + 8010b6e: 45b4 cmp ip, r6 + 8010b70: dd7a ble.n 8010c68 + 8010b72: 6ce2 ldr r2, [r4, #76] ; 0x4c + int ssize = 1; + 8010b74: 2101 movs r1, #1 + while (cinfo->min_DCT_h_scaled_size * ssize <= + 8010b76: f8d4 8140 ldr.w r8, [r4, #320] ; 0x140 + 8010b7a: 2a00 cmp r2, #0 + 8010b7c: bf14 ite ne + 8010b7e: 2708 movne r7, #8 + 8010b80: 2704 moveq r7, #4 + 8010b82: e000 b.n 8010b86 + ssize = ssize * 2; + 8010b84: 0049 lsls r1, r1, #1 + while (cinfo->min_DCT_h_scaled_size * ssize <= + 8010b86: fb01 f008 mul.w r0, r1, r8 + (cinfo->do_fancy_upsampling ? DCTSIZE : DCTSIZE / 2) && + 8010b8a: 42b8 cmp r0, r7 + 8010b8c: dc0a bgt.n 8010ba4 + (cinfo->max_h_samp_factor % (compptr->h_samp_factor * ssize * 2)) == 0) { + 8010b8e: 689a ldr r2, [r3, #8] + 8010b90: f8d4 e138 ldr.w lr, [r4, #312] ; 0x138 + 8010b94: 434a muls r2, r1 + 8010b96: 0052 lsls r2, r2, #1 + 8010b98: fb9e f9f2 sdiv r9, lr, r2 + 8010b9c: fb02 e219 mls r2, r2, r9, lr + (cinfo->do_fancy_upsampling ? DCTSIZE : DCTSIZE / 2) && + 8010ba0: 2a00 cmp r2, #0 + 8010ba2: d0ef beq.n 8010b84 + compptr->DCT_h_scaled_size = cinfo->min_DCT_h_scaled_size * ssize; + 8010ba4: 6258 str r0, [r3, #36] ; 0x24 + ssize = 1; + 8010ba6: f04f 0801 mov.w r8, #1 + while (cinfo->min_DCT_v_scaled_size * ssize <= + 8010baa: f8d4 9144 ldr.w r9, [r4, #324] ; 0x144 + 8010bae: fb08 f109 mul.w r1, r8, r9 + (cinfo->do_fancy_upsampling ? DCTSIZE : DCTSIZE / 2) && + 8010bb2: 42b9 cmp r1, r7 + 8010bb4: dc0a bgt.n 8010bcc + (cinfo->max_v_samp_factor % (compptr->v_samp_factor * ssize * 2)) == 0) { + 8010bb6: 68da ldr r2, [r3, #12] + 8010bb8: f8d4 e13c ldr.w lr, [r4, #316] ; 0x13c + 8010bbc: fb02 f208 mul.w r2, r2, r8 + 8010bc0: 0052 lsls r2, r2, #1 + 8010bc2: fb9e faf2 sdiv sl, lr, r2 + 8010bc6: fb02 e21a mls r2, r2, sl, lr + (cinfo->do_fancy_upsampling ? DCTSIZE : DCTSIZE / 2) && + 8010bca: b14a cbz r2, 8010be0 + if (compptr->DCT_h_scaled_size > compptr->DCT_v_scaled_size * 2) + 8010bcc: ebb0 0f41 cmp.w r0, r1, lsl #1 + compptr->DCT_v_scaled_size = cinfo->min_DCT_v_scaled_size * ssize; + 8010bd0: 6299 str r1, [r3, #40] ; 0x28 + if (compptr->DCT_h_scaled_size > compptr->DCT_v_scaled_size * 2) + 8010bd2: ea4f 0241 mov.w r2, r1, lsl #1 + 8010bd6: dd06 ble.n 8010be6 + compptr->DCT_h_scaled_size = compptr->DCT_v_scaled_size * 2; + 8010bd8: 625a str r2, [r3, #36] ; 0x24 + ci++, compptr++) { + 8010bda: 3601 adds r6, #1 + 8010bdc: 3358 adds r3, #88 ; 0x58 + 8010bde: e7c6 b.n 8010b6e + ssize = ssize * 2; + 8010be0: ea4f 0848 mov.w r8, r8, lsl #1 + 8010be4: e7e3 b.n 8010bae + else if (compptr->DCT_v_scaled_size > compptr->DCT_h_scaled_size * 2) + 8010be6: 0042 lsls r2, r0, #1 + 8010be8: ebb1 0f40 cmp.w r1, r0, lsl #1 + compptr->DCT_v_scaled_size = compptr->DCT_h_scaled_size * 2; + 8010bec: bfc8 it gt + 8010bee: 629a strgt r2, [r3, #40] ; 0x28 + 8010bf0: e7f3 b.n 8010bda + (long) (compptr->h_samp_factor * compptr->DCT_h_scaled_size), + 8010bf2: 6a6b ldr r3, [r5, #36] ; 0x24 + ci++, compptr++) { + 8010bf4: 3601 adds r6, #1 + (long) (compptr->h_samp_factor * compptr->DCT_h_scaled_size), + 8010bf6: 68a8 ldr r0, [r5, #8] + ci++, compptr++) { + 8010bf8: 3558 adds r5, #88 ; 0x58 + (long) (cinfo->max_h_samp_factor * cinfo->block_size)); + 8010bfa: f8d4 2138 ldr.w r2, [r4, #312] ; 0x138 + 8010bfe: f8d4 11a8 ldr.w r1, [r4, #424] ; 0x1a8 + (long) (compptr->h_samp_factor * compptr->DCT_h_scaled_size), + 8010c02: 4358 muls r0, r3 + jdiv_round_up((long) cinfo->image_width * + 8010c04: 69e3 ldr r3, [r4, #28] + 8010c06: 4351 muls r1, r2 + 8010c08: 4358 muls r0, r3 + 8010c0a: f007 fe43 bl 8018894 + (long) (compptr->v_samp_factor * compptr->DCT_v_scaled_size), + 8010c0e: f855 3c30 ldr.w r3, [r5, #-48] + compptr->downsampled_width = (JDIMENSION) + 8010c12: f845 0c2c str.w r0, [r5, #-44] + (long) (compptr->v_samp_factor * compptr->DCT_v_scaled_size), + 8010c16: f855 0c4c ldr.w r0, [r5, #-76] + (long) (cinfo->max_v_samp_factor * cinfo->block_size)); + 8010c1a: f8d4 213c ldr.w r2, [r4, #316] ; 0x13c + 8010c1e: f8d4 11a8 ldr.w r1, [r4, #424] ; 0x1a8 + (long) (compptr->v_samp_factor * compptr->DCT_v_scaled_size), + 8010c22: 4358 muls r0, r3 + jdiv_round_up((long) cinfo->image_height * + 8010c24: 6a23 ldr r3, [r4, #32] + 8010c26: 4351 muls r1, r2 + 8010c28: 4358 muls r0, r3 + 8010c2a: f007 fe33 bl 8018894 + compptr->downsampled_height = (JDIMENSION) + 8010c2e: f845 0c28 str.w r0, [r5, #-40] + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + 8010c32: 6a63 ldr r3, [r4, #36] ; 0x24 + 8010c34: 42b3 cmp r3, r6 + 8010c36: dcdc bgt.n 8010bf2 + switch (cinfo->out_color_space) { + 8010c38: f894 2029 ldrb.w r2, [r4, #41] ; 0x29 + 8010c3c: 2a03 cmp r2, #3 + 8010c3e: d815 bhi.n 8010c6c + 8010c40: 2a01 cmp r2, #1 + 8010c42: d818 bhi.n 8010c76 + 8010c44: d100 bne.n 8010c48 + 8010c46: 4613 mov r3, r2 + cinfo->output_components = (cinfo->quantize_colors ? 1 : + 8010c48: 6d62 ldr r2, [r4, #84] ; 0x54 + if (use_merged_upsample(cinfo)) + 8010c4a: 4620 mov r0, r4 + cinfo->out_color_components = 1; + 8010c4c: 67a3 str r3, [r4, #120] ; 0x78 + cinfo->output_components = (cinfo->quantize_colors ? 1 : + 8010c4e: 2a00 cmp r2, #0 + 8010c50: bf18 it ne + 8010c52: 2301 movne r3, #1 + 8010c54: 67e3 str r3, [r4, #124] ; 0x7c + if (use_merged_upsample(cinfo)) + 8010c56: f7ff ff29 bl 8010aac + 8010c5a: b170 cbz r0, 8010c7a + cinfo->rec_outbuf_height = cinfo->max_v_samp_factor; + 8010c5c: f8d4 313c ldr.w r3, [r4, #316] ; 0x13c + 8010c60: f8c4 3080 str.w r3, [r4, #128] ; 0x80 +} + 8010c64: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + 8010c68: 2600 movs r6, #0 + 8010c6a: e7e2 b.n 8010c32 + switch (cinfo->out_color_space) { + 8010c6c: 3a04 subs r2, #4 + 8010c6e: 2a01 cmp r2, #1 + 8010c70: bf98 it ls + 8010c72: 2304 movls r3, #4 + 8010c74: e7e8 b.n 8010c48 + 8010c76: 2303 movs r3, #3 + 8010c78: e7e6 b.n 8010c48 + cinfo->rec_outbuf_height = 1; + 8010c7a: 2301 movs r3, #1 + 8010c7c: e7f0 b.n 8010c60 + ... + +08010c80 : + * This is performed at the start of jpeg_start_decompress. + */ + +GLOBAL(void) +jinit_master_decompress (j_decompress_ptr cinfo) +{ + 8010c80: b5f8 push {r3, r4, r5, r6, r7, lr} + my_master_ptr master; + + master = (my_master_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 8010c82: 6843 ldr r3, [r0, #4] + 8010c84: 221c movs r2, #28 + 8010c86: 2101 movs r1, #1 +{ + 8010c88: 4604 mov r4, r0 + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 8010c8a: 681b ldr r3, [r3, #0] + SIZEOF(my_decomp_master)); + cinfo->master = (struct jpeg_decomp_master *) master; + master->pub.prepare_for_output_pass = prepare_for_output_pass; + master->pub.finish_output_pass = finish_output_pass; + + master->pub.is_dummy_pass = FALSE; + 8010c8c: 2600 movs r6, #0 + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 8010c8e: 4798 blx r3 + master->pub.prepare_for_output_pass = prepare_for_output_pass; + 8010c90: 4b6d ldr r3, [pc, #436] ; (8010e48 ) + cinfo->master = (struct jpeg_decomp_master *) master; + 8010c92: f8c4 01b8 str.w r0, [r4, #440] ; 0x1b8 + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 8010c96: 4605 mov r5, r0 + master->pub.prepare_for_output_pass = prepare_for_output_pass; + 8010c98: 6003 str r3, [r0, #0] + master->pub.finish_output_pass = finish_output_pass; + 8010c9a: 4b6c ldr r3, [pc, #432] ; (8010e4c ) + master->pub.is_dummy_pass = FALSE; + 8010c9c: 6086 str r6, [r0, #8] + master->pub.finish_output_pass = finish_output_pass; + 8010c9e: 6043 str r3, [r0, #4] + jpeg_calc_output_dimensions(cinfo); + 8010ca0: 4620 mov r0, r4 + 8010ca2: f7ff ff4f bl 8010b44 + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 8010ca6: 6863 ldr r3, [r4, #4] + 8010ca8: f44f 62b0 mov.w r2, #1408 ; 0x580 + 8010cac: 2101 movs r1, #1 + 8010cae: 681b ldr r3, [r3, #0] + 8010cb0: 4620 mov r0, r4 + 8010cb2: 4798 blx r3 + table += (MAXJSAMPLE+1); /* allow negative subscripts of simple table */ + 8010cb4: f500 7380 add.w r3, r0, #256 ; 0x100 + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 8010cb8: 4607 mov r7, r0 + MEMZERO(table - (MAXJSAMPLE+1), (MAXJSAMPLE+1) * SIZEOF(JSAMPLE)); + 8010cba: 4631 mov r1, r6 + cinfo->sample_range_limit = table; + 8010cbc: f8c4 314c str.w r3, [r4, #332] ; 0x14c + MEMZERO(table - (MAXJSAMPLE+1), (MAXJSAMPLE+1) * SIZEOF(JSAMPLE)); + 8010cc0: f44f 7280 mov.w r2, #256 ; 0x100 + 8010cc4: f023 fe7a bl 80349bc + for (i = 0; i <= MAXJSAMPLE; i++) + 8010cc8: f107 03ff add.w r3, r7, #255 ; 0xff + 8010ccc: 4631 mov r1, r6 + table[i] = (JSAMPLE) i; + 8010cce: f803 1f01 strb.w r1, [r3, #1]! + for (i = 0; i <= MAXJSAMPLE; i++) + 8010cd2: 3101 adds r1, #1 + 8010cd4: f5b1 7f80 cmp.w r1, #256 ; 0x100 + 8010cd8: d1f9 bne.n 8010cce + table[i] = MAXJSAMPLE; + 8010cda: f44f 72c0 mov.w r2, #384 ; 0x180 + 8010cde: 21ff movs r1, #255 ; 0xff + 8010ce0: f507 7000 add.w r0, r7, #512 ; 0x200 + master->pass_number = 0; + 8010ce4: 2600 movs r6, #0 + table[i] = MAXJSAMPLE; + 8010ce6: f023 fe69 bl 80349bc + MEMZERO(table + (2 * (MAXJSAMPLE+1)), + 8010cea: f44f 72c0 mov.w r2, #384 ; 0x180 + 8010cee: 2100 movs r1, #0 + 8010cf0: f507 7060 add.w r0, r7, #896 ; 0x380 + 8010cf4: f023 fe62 bl 80349bc + MEMCOPY(table + (4 * (MAXJSAMPLE+1) - CENTERJSAMPLE), + 8010cf8: 2280 movs r2, #128 ; 0x80 + 8010cfa: f8d4 114c ldr.w r1, [r4, #332] ; 0x14c + 8010cfe: f507 60a0 add.w r0, r7, #1280 ; 0x500 + 8010d02: f023 ff36 bl 8034b72 + master->using_merged_upsample = use_merged_upsample(cinfo); + 8010d06: 4620 mov r0, r4 + master->pass_number = 0; + 8010d08: 60ee str r6, [r5, #12] + master->using_merged_upsample = use_merged_upsample(cinfo); + 8010d0a: f7ff fecf bl 8010aac + if (! cinfo->quantize_colors || ! cinfo->buffered_image) { + 8010d0e: 6d63 ldr r3, [r4, #84] ; 0x54 + master->quantizer_2pass = NULL; + 8010d10: 61ae str r6, [r5, #24] + master->quantizer_1pass = NULL; + 8010d12: e9c5 0604 strd r0, r6, [r5, #16] + if (! cinfo->quantize_colors || ! cinfo->buffered_image) { + 8010d16: b1b3 cbz r3, 8010d46 + 8010d18: 6c22 ldr r2, [r4, #64] ; 0x40 + 8010d1a: b1a2 cbz r2, 8010d46 + if (cinfo->raw_data_out) + 8010d1c: 6c63 ldr r3, [r4, #68] ; 0x44 + 8010d1e: 2b00 cmp r3, #0 + 8010d20: d166 bne.n 8010df0 + if (cinfo->out_color_components != 3) { + 8010d22: 6fa3 ldr r3, [r4, #120] ; 0x78 + 8010d24: 2b03 cmp r3, #3 + 8010d26: f04f 0301 mov.w r3, #1 + 8010d2a: d068 beq.n 8010dfe + cinfo->enable_1pass_quant = TRUE; + 8010d2c: 6663 str r3, [r4, #100] ; 0x64 + cinfo->enable_external_quant = FALSE; + 8010d2e: 2300 movs r3, #0 + cinfo->enable_2pass_quant = FALSE; + 8010d30: e9c4 331a strd r3, r3, [r4, #104] ; 0x68 + cinfo->colormap = NULL; + 8010d34: f8c4 3088 str.w r3, [r4, #136] ; 0x88 + jinit_1pass_quantizer(cinfo); + 8010d38: 4620 mov r0, r4 + 8010d3a: f006 feb9 bl 8017ab0 + master->quantizer_1pass = cinfo->cquantize; + 8010d3e: f8d4 31e0 ldr.w r3, [r4, #480] ; 0x1e0 + 8010d42: 616b str r3, [r5, #20] + 8010d44: e062 b.n 8010e0c + cinfo->enable_external_quant = FALSE; + 8010d46: e9c4 6619 strd r6, r6, [r4, #100] ; 0x64 + cinfo->enable_2pass_quant = FALSE; + 8010d4a: 66e6 str r6, [r4, #108] ; 0x6c + if (cinfo->quantize_colors) { + 8010d4c: 2b00 cmp r3, #0 + 8010d4e: d1e5 bne.n 8010d1c + if (! cinfo->raw_data_out) { + 8010d50: 6c63 ldr r3, [r4, #68] ; 0x44 + 8010d52: b94b cbnz r3, 8010d68 + if (master->using_merged_upsample) { + 8010d54: 692b ldr r3, [r5, #16] + jinit_merged_upsampler(cinfo); /* does color conversion too */ + 8010d56: 4620 mov r0, r4 + if (master->using_merged_upsample) { + 8010d58: 2b00 cmp r3, #0 + 8010d5a: d069 beq.n 8010e30 + jinit_merged_upsampler(cinfo); /* does color conversion too */ + 8010d5c: f000 fa1e bl 801119c + jinit_d_post_controller(cinfo, cinfo->enable_2pass_quant); + 8010d60: 6ee1 ldr r1, [r4, #108] ; 0x6c + 8010d62: 4620 mov r0, r4 + 8010d64: f000 fb9a bl 801149c + jinit_inverse_dct(cinfo); + 8010d68: 4620 mov r0, r4 + 8010d6a: f7fc fdbd bl 800d8e8 + if (cinfo->arith_code) + 8010d6e: f8d4 30e4 ldr.w r3, [r4, #228] ; 0xe4 + jinit_arith_decoder(cinfo); + 8010d72: 4620 mov r0, r4 + if (cinfo->arith_code) + 8010d74: 2b00 cmp r3, #0 + 8010d76: d061 beq.n 8010e3c + jinit_arith_decoder(cinfo); + 8010d78: f7fb fc2c bl 800c5d4 + use_c_buffer = cinfo->inputctl->has_multiple_scans || cinfo->buffered_image; + 8010d7c: f8d4 31c8 ldr.w r3, [r4, #456] ; 0x1c8 + 8010d80: 691b ldr r3, [r3, #16] + 8010d82: 2b00 cmp r3, #0 + 8010d84: d15d bne.n 8010e42 + 8010d86: 6c21 ldr r1, [r4, #64] ; 0x40 + 8010d88: 3900 subs r1, #0 + 8010d8a: bf18 it ne + 8010d8c: 2101 movne r1, #1 + jinit_d_coef_controller(cinfo, use_c_buffer); + 8010d8e: 4620 mov r0, r4 + 8010d90: f7fc f916 bl 800cfc0 + if (! cinfo->raw_data_out) + 8010d94: 6c61 ldr r1, [r4, #68] ; 0x44 + 8010d96: b911 cbnz r1, 8010d9e + jinit_d_main_controller(cinfo, FALSE /* never need full buffer here */); + 8010d98: 4620 mov r0, r4 + 8010d9a: f7fe fca7 bl 800f6ec + (*cinfo->mem->realize_virt_arrays) ((j_common_ptr) cinfo); + 8010d9e: 6863 ldr r3, [r4, #4] + 8010da0: 4620 mov r0, r4 + 8010da2: 699b ldr r3, [r3, #24] + 8010da4: 4798 blx r3 + (*cinfo->inputctl->start_input_pass) (cinfo); + 8010da6: f8d4 31c8 ldr.w r3, [r4, #456] ; 0x1c8 + 8010daa: 4620 mov r0, r4 + 8010dac: 689b ldr r3, [r3, #8] + 8010dae: 4798 blx r3 + if (cinfo->progress != NULL && ! cinfo->buffered_image && + 8010db0: 68a2 ldr r2, [r4, #8] + 8010db2: b1e2 cbz r2, 8010dee + 8010db4: 6c23 ldr r3, [r4, #64] ; 0x40 + 8010db6: b9d3 cbnz r3, 8010dee + cinfo->inputctl->has_multiple_scans) { + 8010db8: f8d4 31c8 ldr.w r3, [r4, #456] ; 0x1c8 + if (cinfo->progress != NULL && ! cinfo->buffered_image && + 8010dbc: 691b ldr r3, [r3, #16] + 8010dbe: b1b3 cbz r3, 8010dee + if (cinfo->progressive_mode) { + 8010dc0: f8d4 10e0 ldr.w r1, [r4, #224] ; 0xe0 + nscans = 2 + 3 * cinfo->num_components; + 8010dc4: 6a63 ldr r3, [r4, #36] ; 0x24 + if (cinfo->progressive_mode) { + 8010dc6: b111 cbz r1, 8010dce + nscans = 2 + 3 * cinfo->num_components; + 8010dc8: eb03 0343 add.w r3, r3, r3, lsl #1 + 8010dcc: 3302 adds r3, #2 + cinfo->progress->pass_limit = (long) cinfo->total_iMCU_rows * nscans; + 8010dce: f8d4 1148 ldr.w r1, [r4, #328] ; 0x148 + cinfo->progress->pass_counter = 0L; + 8010dd2: 2000 movs r0, #0 + cinfo->progress->pass_limit = (long) cinfo->total_iMCU_rows * nscans; + 8010dd4: 4359 muls r1, r3 + cinfo->progress->total_passes = (cinfo->enable_2pass_quant ? 3 : 2); + 8010dd6: 6ee3 ldr r3, [r4, #108] ; 0x6c + cinfo->progress->pass_counter = 0L; + 8010dd8: 6050 str r0, [r2, #4] + cinfo->progress->total_passes = (cinfo->enable_2pass_quant ? 3 : 2); + 8010dda: 4283 cmp r3, r0 + 8010ddc: bf14 ite ne + 8010dde: 2303 movne r3, #3 + 8010de0: 2302 moveq r3, #2 + 8010de2: 6113 str r3, [r2, #16] + master->pass_number++; + 8010de4: 68eb ldr r3, [r5, #12] + 8010de6: 3301 adds r3, #1 + cinfo->progress->completed_passes = 0; + 8010de8: e9c2 1002 strd r1, r0, [r2, #8] + master->pass_number++; + 8010dec: 60eb str r3, [r5, #12] + + master_selection(cinfo); +} + 8010dee: bdf8 pop {r3, r4, r5, r6, r7, pc} + ERREXIT(cinfo, JERR_NOTIMPL); + 8010df0: 6823 ldr r3, [r4, #0] + 8010df2: 2230 movs r2, #48 ; 0x30 + 8010df4: 4620 mov r0, r4 + 8010df6: 615a str r2, [r3, #20] + 8010df8: 681b ldr r3, [r3, #0] + 8010dfa: 4798 blx r3 + 8010dfc: e791 b.n 8010d22 + } else if (cinfo->colormap != NULL) { + 8010dfe: f8d4 2088 ldr.w r2, [r4, #136] ; 0x88 + 8010e02: b17a cbz r2, 8010e24 + cinfo->enable_external_quant = TRUE; + 8010e04: 66a3 str r3, [r4, #104] ; 0x68 + if (cinfo->enable_1pass_quant) { + 8010e06: 6e63 ldr r3, [r4, #100] ; 0x64 + 8010e08: 2b00 cmp r3, #0 + 8010e0a: d195 bne.n 8010d38 + if (cinfo->enable_2pass_quant || cinfo->enable_external_quant) { + 8010e0c: 6ee3 ldr r3, [r4, #108] ; 0x6c + 8010e0e: b913 cbnz r3, 8010e16 + 8010e10: 6ea3 ldr r3, [r4, #104] ; 0x68 + 8010e12: 2b00 cmp r3, #0 + 8010e14: d09c beq.n 8010d50 + jinit_2pass_quantizer(cinfo); + 8010e16: 4620 mov r0, r4 + 8010e18: f007 fcd0 bl 80187bc + master->quantizer_2pass = cinfo->cquantize; + 8010e1c: f8d4 31e0 ldr.w r3, [r4, #480] ; 0x1e0 + 8010e20: 61ab str r3, [r5, #24] + 8010e22: e795 b.n 8010d50 + } else if (cinfo->two_pass_quantize) { + 8010e24: 6de2 ldr r2, [r4, #92] ; 0x5c + 8010e26: b10a cbz r2, 8010e2c + cinfo->enable_2pass_quant = TRUE; + 8010e28: 66e3 str r3, [r4, #108] ; 0x6c + 8010e2a: e7ec b.n 8010e06 + cinfo->enable_1pass_quant = TRUE; + 8010e2c: 6663 str r3, [r4, #100] ; 0x64 + 8010e2e: e783 b.n 8010d38 + jinit_color_deconverter(cinfo); + 8010e30: f7fc faea bl 800d408 + jinit_upsampler(cinfo); + 8010e34: 4620 mov r0, r4 + 8010e36: f000 fc4f bl 80116d8 + 8010e3a: e791 b.n 8010d60 + jinit_huff_decoder(cinfo); + 8010e3c: f7fd fee2 bl 800ec04 + 8010e40: e79c b.n 8010d7c + use_c_buffer = cinfo->inputctl->has_multiple_scans || cinfo->buffered_image; + 8010e42: 2101 movs r1, #1 + 8010e44: e7a3 b.n 8010d8e + 8010e46: bf00 nop + 8010e48: 08010995 .word 0x08010995 + 8010e4c: 08010a93 .word 0x08010a93 + +08010e50 : + */ + +METHODDEF(void) +start_pass_merged_upsample (j_decompress_ptr cinfo) +{ + my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample; + 8010e50: f8d0 31d8 ldr.w r3, [r0, #472] ; 0x1d8 + + /* Mark the spare buffer empty */ + upsample->spare_full = FALSE; + 8010e54: 2200 movs r2, #0 + 8010e56: 625a str r2, [r3, #36] ; 0x24 + /* Initialize total-height counter for detecting bottom of image */ + upsample->rows_to_go = cinfo->output_height; + 8010e58: 6f42 ldr r2, [r0, #116] ; 0x74 + 8010e5a: 62da str r2, [r3, #44] ; 0x2c +} + 8010e5c: 4770 bx lr + +08010e5e : + JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr, + JDIMENSION in_row_groups_avail, + JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, + JDIMENSION out_rows_avail) +/* 1:1 vertical sampling case: much easier, never need a spare row. */ +{ + 8010e5e: b570 push {r4, r5, r6, lr} + 8010e60: 9d05 ldr r5, [sp, #20] + 8010e62: 4614 mov r4, r2 + my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample; + + /* Just do the upsampling. */ + (*upsample->upmethod) (cinfo, input_buf, *in_row_group_ctr, + 8010e64: f8d0 31d8 ldr.w r3, [r0, #472] ; 0x1d8 + output_buf + *out_row_ctr); + 8010e68: 682a ldr r2, [r5, #0] + (*upsample->upmethod) (cinfo, input_buf, *in_row_group_ctr, + 8010e6a: 68de ldr r6, [r3, #12] + 8010e6c: 9b04 ldr r3, [sp, #16] + 8010e6e: eb03 0382 add.w r3, r3, r2, lsl #2 + 8010e72: 6822 ldr r2, [r4, #0] + 8010e74: 47b0 blx r6 + /* Adjust counts */ + (*out_row_ctr)++; + 8010e76: 682b ldr r3, [r5, #0] + 8010e78: 3301 adds r3, #1 + 8010e7a: 602b str r3, [r5, #0] + (*in_row_group_ctr)++; + 8010e7c: 6823 ldr r3, [r4, #0] + 8010e7e: 3301 adds r3, #1 + 8010e80: 6023 str r3, [r4, #0] +} + 8010e82: bd70 pop {r4, r5, r6, pc} + +08010e84 : + +METHODDEF(void) +h2v1_merged_upsample (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr, + JSAMPARRAY output_buf) +{ + 8010e84: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample; + 8010e88: f8d0 51d8 ldr.w r5, [r0, #472] ; 0x1d8 +{ + 8010e8c: b089 sub sp, #36 ; 0x24 + SHIFT_TEMPS + + inptr0 = input_buf[0][in_row_group_ctr]; + inptr1 = input_buf[1][in_row_group_ctr]; + inptr2 = input_buf[2][in_row_group_ctr]; + outptr = output_buf[0]; + 8010e8e: f8d3 c000 ldr.w ip, [r3] + int * Crrtab = upsample->Cr_r_tab; + 8010e92: 692e ldr r6, [r5, #16] + INT32 * Cbgtab = upsample->Cb_g_tab; + 8010e94: f8d5 801c ldr.w r8, [r5, #28] + 8010e98: 4663 mov r3, ip + int * Crrtab = upsample->Cr_r_tab; + 8010e9a: 9601 str r6, [sp, #4] + int * Cbbtab = upsample->Cb_b_tab; + 8010e9c: 696e ldr r6, [r5, #20] + register JSAMPLE * range_limit = cinfo->sample_range_limit; + 8010e9e: f8d0 414c ldr.w r4, [r0, #332] ; 0x14c + int * Cbbtab = upsample->Cb_b_tab; + 8010ea2: 9602 str r6, [sp, #8] + INT32 * Crgtab = upsample->Cr_g_tab; + 8010ea4: 69ae ldr r6, [r5, #24] + inptr0 = input_buf[0][in_row_group_ctr]; + 8010ea6: 680d ldr r5, [r1, #0] + INT32 * Crgtab = upsample->Cr_g_tab; + 8010ea8: 9603 str r6, [sp, #12] + inptr0 = input_buf[0][in_row_group_ctr]; + 8010eaa: f855 5022 ldr.w r5, [r5, r2, lsl #2] + 8010eae: 9504 str r5, [sp, #16] + inptr1 = input_buf[1][in_row_group_ctr]; + 8010eb0: 684d ldr r5, [r1, #4] + inptr2 = input_buf[2][in_row_group_ctr]; + 8010eb2: 6889 ldr r1, [r1, #8] + inptr1 = input_buf[1][in_row_group_ctr]; + 8010eb4: f855 5022 ldr.w r5, [r5, r2, lsl #2] + inptr2 = input_buf[2][in_row_group_ctr]; + 8010eb8: f851 2022 ldr.w r2, [r1, r2, lsl #2] + 8010ebc: 9904 ldr r1, [sp, #16] + 8010ebe: 9205 str r2, [sp, #20] + /* Loop for each pair of output pixels */ + for (col = cinfo->output_width >> 1; col > 0; col--) { + 8010ec0: 6f02 ldr r2, [r0, #112] ; 0x70 + inptr2 = input_buf[2][in_row_group_ctr]; + 8010ec2: f8dd 9014 ldr.w r9, [sp, #20] + for (col = cinfo->output_width >> 1; col > 0; col--) { + 8010ec6: ea4f 0e52 mov.w lr, r2, lsr #1 + 8010eca: eb05 0252 add.w r2, r5, r2, lsr #1 + 8010ece: 9206 str r2, [sp, #24] + 8010ed0: 9a06 ldr r2, [sp, #24] + 8010ed2: 3306 adds r3, #6 + 8010ed4: 3102 adds r1, #2 + 8010ed6: 4295 cmp r5, r2 + 8010ed8: d128 bne.n 8010f2c + 8010eda: 2306 movs r3, #6 + outptr[RGB_GREEN] = range_limit[y + cgreen]; + outptr[RGB_BLUE] = range_limit[y + cblue]; + outptr += RGB_PIXELSIZE; + } + /* If image width is odd, do the last output column separately */ + if (cinfo->output_width & 1) { + 8010edc: 6f02 ldr r2, [r0, #112] ; 0x70 + 8010ede: fb03 f30e mul.w r3, r3, lr + 8010ee2: 07d2 lsls r2, r2, #31 + 8010ee4: eb0c 0103 add.w r1, ip, r3 + 8010ee8: d51d bpl.n 8010f26 + cb = GETJSAMPLE(*inptr1); + cr = GETJSAMPLE(*inptr2); + cred = Crrtab[cr]; + 8010eea: 9a05 ldr r2, [sp, #20] + cgreen = (int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS); + cblue = Cbbtab[cb]; + y = GETJSAMPLE(*inptr0); + outptr[RGB_RED] = range_limit[y + cred]; + 8010eec: 9f01 ldr r7, [sp, #4] + cred = Crrtab[cr]; + 8010eee: f812 600e ldrb.w r6, [r2, lr] + cgreen = (int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS); + 8010ef2: 782a ldrb r2, [r5, #0] + 8010ef4: 9d03 ldr r5, [sp, #12] + 8010ef6: f858 0022 ldr.w r0, [r8, r2, lsl #2] + 8010efa: f855 5026 ldr.w r5, [r5, r6, lsl #2] + outptr[RGB_RED] = range_limit[y + cred]; + 8010efe: f857 6026 ldr.w r6, [r7, r6, lsl #2] + cgreen = (int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS); + 8010f02: 4428 add r0, r5 + cblue = Cbbtab[cb]; + 8010f04: 9d02 ldr r5, [sp, #8] + 8010f06: f855 5022 ldr.w r5, [r5, r2, lsl #2] + outptr[RGB_GREEN] = range_limit[y + cgreen]; + 8010f0a: eb04 4020 add.w r0, r4, r0, asr #16 + y = GETJSAMPLE(*inptr0); + 8010f0e: 9a04 ldr r2, [sp, #16] + 8010f10: f812 201e ldrb.w r2, [r2, lr, lsl #1] + outptr[RGB_RED] = range_limit[y + cred]; + 8010f14: 18a7 adds r7, r4, r2 + outptr[RGB_BLUE] = range_limit[y + cblue]; + 8010f16: 442c add r4, r5 + outptr[RGB_RED] = range_limit[y + cred]; + 8010f18: 5dbe ldrb r6, [r7, r6] + 8010f1a: 708e strb r6, [r1, #2] + outptr[RGB_GREEN] = range_limit[y + cgreen]; + 8010f1c: 5c80 ldrb r0, [r0, r2] + 8010f1e: 7048 strb r0, [r1, #1] + outptr[RGB_BLUE] = range_limit[y + cblue]; + 8010f20: 5ca2 ldrb r2, [r4, r2] + 8010f22: f80c 2003 strb.w r2, [ip, r3] + } +} + 8010f26: b009 add sp, #36 ; 0x24 + 8010f28: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + cgreen = (int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS); + 8010f2c: f815 ab01 ldrb.w sl, [r5], #1 + cred = Crrtab[cr]; + 8010f30: f819 2b01 ldrb.w r2, [r9], #1 + 8010f34: 9e01 ldr r6, [sp, #4] + 8010f36: f856 7022 ldr.w r7, [r6, r2, lsl #2] + cgreen = (int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS); + 8010f3a: f858 602a ldr.w r6, [r8, sl, lsl #2] + outptr[RGB_RED] = range_limit[y + cred]; + 8010f3e: 4427 add r7, r4 + cgreen = (int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS); + 8010f40: 9607 str r6, [sp, #28] + 8010f42: 9e03 ldr r6, [sp, #12] + 8010f44: f856 2022 ldr.w r2, [r6, r2, lsl #2] + 8010f48: 9e07 ldr r6, [sp, #28] + 8010f4a: 4432 add r2, r6 + cblue = Cbbtab[cb]; + 8010f4c: 9e02 ldr r6, [sp, #8] + 8010f4e: f856 602a ldr.w r6, [r6, sl, lsl #2] + outptr[RGB_GREEN] = range_limit[y + cgreen]; + 8010f52: eb04 4222 add.w r2, r4, r2, asr #16 + y = GETJSAMPLE(*inptr0++); + 8010f56: f811 ac02 ldrb.w sl, [r1, #-2] + outptr[RGB_BLUE] = range_limit[y + cblue]; + 8010f5a: 4426 add r6, r4 + outptr[RGB_RED] = range_limit[y + cred]; + 8010f5c: f817 b00a ldrb.w fp, [r7, sl] + 8010f60: f803 bc04 strb.w fp, [r3, #-4] + outptr[RGB_GREEN] = range_limit[y + cgreen]; + 8010f64: f812 b00a ldrb.w fp, [r2, sl] + 8010f68: f803 bc05 strb.w fp, [r3, #-5] + outptr[RGB_BLUE] = range_limit[y + cblue]; + 8010f6c: f816 a00a ldrb.w sl, [r6, sl] + 8010f70: f803 ac06 strb.w sl, [r3, #-6] + y = GETJSAMPLE(*inptr0++); + 8010f74: f811 ac01 ldrb.w sl, [r1, #-1] + outptr[RGB_RED] = range_limit[y + cred]; + 8010f78: f817 700a ldrb.w r7, [r7, sl] + 8010f7c: f803 7c01 strb.w r7, [r3, #-1] + outptr[RGB_GREEN] = range_limit[y + cgreen]; + 8010f80: f812 200a ldrb.w r2, [r2, sl] + 8010f84: f803 2c02 strb.w r2, [r3, #-2] + outptr[RGB_BLUE] = range_limit[y + cblue]; + 8010f88: f816 200a ldrb.w r2, [r6, sl] + 8010f8c: f803 2c03 strb.w r2, [r3, #-3] + for (col = cinfo->output_width >> 1; col > 0; col--) { + 8010f90: e79e b.n 8010ed0 + +08010f92 : + +METHODDEF(void) +h2v2_merged_upsample (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr, + JSAMPARRAY output_buf) +{ + 8010f92: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample; + 8010f96: f8d0 51d8 ldr.w r5, [r0, #472] ; 0x1d8 +{ + 8010f9a: b08d sub sp, #52 ; 0x34 + int cb, cr; + register JSAMPROW outptr0, outptr1; + JSAMPROW inptr00, inptr01, inptr1, inptr2; + JDIMENSION col; + /* copy these pointers into registers if possible */ + register JSAMPLE * range_limit = cinfo->sample_range_limit; + 8010f9c: f8d0 414c ldr.w r4, [r0, #332] ; 0x14c + int * Crrtab = upsample->Cr_r_tab; + 8010fa0: 692e ldr r6, [r5, #16] + int * Cbbtab = upsample->Cb_b_tab; + INT32 * Crgtab = upsample->Cr_g_tab; + INT32 * Cbgtab = upsample->Cb_g_tab; + 8010fa2: f8d5 a01c ldr.w sl, [r5, #28] + int * Crrtab = upsample->Cr_r_tab; + 8010fa6: 9604 str r6, [sp, #16] + int * Cbbtab = upsample->Cb_b_tab; + 8010fa8: 696e ldr r6, [r5, #20] + 8010faa: 9605 str r6, [sp, #20] + INT32 * Crgtab = upsample->Cr_g_tab; + 8010fac: 69ae ldr r6, [r5, #24] + SHIFT_TEMPS + + inptr00 = input_buf[0][in_row_group_ctr*2]; + 8010fae: 680d ldr r5, [r1, #0] + INT32 * Crgtab = upsample->Cr_g_tab; + 8010fb0: 9606 str r6, [sp, #24] + inptr00 = input_buf[0][in_row_group_ctr*2]; + 8010fb2: f855 6032 ldr.w r6, [r5, r2, lsl #3] + inptr01 = input_buf[0][in_row_group_ctr*2 + 1]; + 8010fb6: eb05 05c2 add.w r5, r5, r2, lsl #3 + 8010fba: 686d ldr r5, [r5, #4] + 8010fbc: 46b6 mov lr, r6 + inptr00 = input_buf[0][in_row_group_ctr*2]; + 8010fbe: 9607 str r6, [sp, #28] + inptr01 = input_buf[0][in_row_group_ctr*2 + 1]; + 8010fc0: 9508 str r5, [sp, #32] + inptr1 = input_buf[1][in_row_group_ctr]; + 8010fc2: 684d ldr r5, [r1, #4] + inptr2 = input_buf[2][in_row_group_ctr]; + 8010fc4: 6889 ldr r1, [r1, #8] + inptr1 = input_buf[1][in_row_group_ctr]; + 8010fc6: f855 8022 ldr.w r8, [r5, r2, lsl #2] + inptr2 = input_buf[2][in_row_group_ctr]; + 8010fca: f851 2022 ldr.w r2, [r1, r2, lsl #2] + outptr0 = output_buf[0]; + outptr1 = output_buf[1]; + /* Loop for each group of output pixels */ + for (col = cinfo->output_width >> 1; col > 0; col--) { + 8010fce: 6f01 ldr r1, [r0, #112] ; 0x70 + inptr2 = input_buf[2][in_row_group_ctr]; + 8010fd0: 9209 str r2, [sp, #36] ; 0x24 + for (col = cinfo->output_width >> 1; col > 0; col--) { + 8010fd2: 084f lsrs r7, r1, #1 + outptr0 = output_buf[0]; + 8010fd4: 681a ldr r2, [r3, #0] + 8010fd6: eb08 0151 add.w r1, r8, r1, lsr #1 + outptr1 = output_buf[1]; + 8010fda: 685b ldr r3, [r3, #4] + 8010fdc: f8dd c020 ldr.w ip, [sp, #32] + 8010fe0: 910a str r1, [sp, #40] ; 0x28 + inptr2 = input_buf[2][in_row_group_ctr]; + 8010fe2: 9909 ldr r1, [sp, #36] ; 0x24 + outptr0 = output_buf[0]; + 8010fe4: 9201 str r2, [sp, #4] + outptr1 = output_buf[1]; + 8010fe6: 9302 str r3, [sp, #8] + inptr2 = input_buf[2][in_row_group_ctr]; + 8010fe8: 9103 str r1, [sp, #12] + for (col = cinfo->output_width >> 1; col > 0; col--) { + 8010fea: 990a ldr r1, [sp, #40] ; 0x28 + 8010fec: 3206 adds r2, #6 + 8010fee: 3306 adds r3, #6 + 8010ff0: f10e 0e02 add.w lr, lr, #2 + 8010ff4: 4588 cmp r8, r1 + 8010ff6: f10c 0c02 add.w ip, ip, #2 + 8010ffa: d139 bne.n 8011070 + 8010ffc: 2306 movs r3, #6 + 8010ffe: 9a01 ldr r2, [sp, #4] + outptr1[RGB_GREEN] = range_limit[y + cgreen]; + outptr1[RGB_BLUE] = range_limit[y + cblue]; + outptr1 += RGB_PIXELSIZE; + } + /* If image width is odd, do the last output column separately */ + if (cinfo->output_width & 1) { + 8011000: 6f00 ldr r0, [r0, #112] ; 0x70 + 8011002: 437b muls r3, r7 + 8011004: 07c0 lsls r0, r0, #31 + 8011006: eb02 0103 add.w r1, r2, r3 + 801100a: 9a02 ldr r2, [sp, #8] + 801100c: 441a add r2, r3 + 801100e: d52c bpl.n 801106a + cb = GETJSAMPLE(*inptr1); + cr = GETJSAMPLE(*inptr2); + cred = Crrtab[cr]; + 8011010: 9809 ldr r0, [sp, #36] ; 0x24 + 8011012: 9d04 ldr r5, [sp, #16] + 8011014: 5dc0 ldrb r0, [r0, r7] + cgreen = (int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS); + 8011016: f898 6000 ldrb.w r6, [r8] + cred = Crrtab[cr]; + 801101a: f855 e020 ldr.w lr, [r5, r0, lsl #2] + cgreen = (int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS); + 801101e: 9d06 ldr r5, [sp, #24] + 8011020: f85a c026 ldr.w ip, [sl, r6, lsl #2] + 8011024: f855 0020 ldr.w r0, [r5, r0, lsl #2] + cblue = Cbbtab[cb]; + 8011028: 9d05 ldr r5, [sp, #20] + cgreen = (int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS); + 801102a: 4460 add r0, ip + cblue = Cbbtab[cb]; + 801102c: f855 c026 ldr.w ip, [r5, r6, lsl #2] + y = GETJSAMPLE(*inptr00); + 8011030: 9d07 ldr r5, [sp, #28] + outptr0[RGB_RED] = range_limit[y + cred]; + outptr0[RGB_GREEN] = range_limit[y + cgreen]; + 8011032: eb04 4020 add.w r0, r4, r0, asr #16 + y = GETJSAMPLE(*inptr00); + 8011036: f815 6017 ldrb.w r6, [r5, r7, lsl #1] + outptr0[RGB_RED] = range_limit[y + cred]; + 801103a: eb0e 0504 add.w r5, lr, r4 + outptr0[RGB_BLUE] = range_limit[y + cblue]; + 801103e: 4464 add r4, ip + outptr0[RGB_RED] = range_limit[y + cred]; + 8011040: f815 e006 ldrb.w lr, [r5, r6] + 8011044: f881 e002 strb.w lr, [r1, #2] + outptr0[RGB_GREEN] = range_limit[y + cgreen]; + 8011048: f810 e006 ldrb.w lr, [r0, r6] + 801104c: f881 e001 strb.w lr, [r1, #1] + outptr0[RGB_BLUE] = range_limit[y + cblue]; + 8011050: 5da1 ldrb r1, [r4, r6] + 8011052: 9e01 ldr r6, [sp, #4] + 8011054: 54f1 strb r1, [r6, r3] + y = GETJSAMPLE(*inptr01); + 8011056: 9908 ldr r1, [sp, #32] + 8011058: f811 1017 ldrb.w r1, [r1, r7, lsl #1] + outptr1[RGB_RED] = range_limit[y + cred]; + 801105c: 5c6d ldrb r5, [r5, r1] + 801105e: 7095 strb r5, [r2, #2] + outptr1[RGB_GREEN] = range_limit[y + cgreen]; + 8011060: 5c40 ldrb r0, [r0, r1] + 8011062: 7050 strb r0, [r2, #1] + outptr1[RGB_BLUE] = range_limit[y + cblue]; + 8011064: 5c62 ldrb r2, [r4, r1] + 8011066: 9902 ldr r1, [sp, #8] + 8011068: 54ca strb r2, [r1, r3] + } +} + 801106a: b00d add sp, #52 ; 0x34 + 801106c: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + cred = Crrtab[cr]; + 8011070: 9d03 ldr r5, [sp, #12] + cgreen = (int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS); + 8011072: f818 9b01 ldrb.w r9, [r8], #1 + cred = Crrtab[cr]; + 8011076: f815 1b01 ldrb.w r1, [r5], #1 + 801107a: 9503 str r5, [sp, #12] + 801107c: 9d04 ldr r5, [sp, #16] + 801107e: f855 6021 ldr.w r6, [r5, r1, lsl #2] + cgreen = (int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS); + 8011082: f85a 5029 ldr.w r5, [sl, r9, lsl #2] + outptr0[RGB_RED] = range_limit[y + cred]; + 8011086: 4426 add r6, r4 + cgreen = (int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS); + 8011088: 950b str r5, [sp, #44] ; 0x2c + 801108a: 9d06 ldr r5, [sp, #24] + 801108c: f855 1021 ldr.w r1, [r5, r1, lsl #2] + 8011090: 9d0b ldr r5, [sp, #44] ; 0x2c + 8011092: 4429 add r1, r5 + cblue = Cbbtab[cb]; + 8011094: 9d05 ldr r5, [sp, #20] + 8011096: f855 5029 ldr.w r5, [r5, r9, lsl #2] + outptr0[RGB_GREEN] = range_limit[y + cgreen]; + 801109a: eb04 4121 add.w r1, r4, r1, asr #16 + y = GETJSAMPLE(*inptr00++); + 801109e: f81e 9c02 ldrb.w r9, [lr, #-2] + outptr0[RGB_BLUE] = range_limit[y + cblue]; + 80110a2: 4425 add r5, r4 + outptr0[RGB_RED] = range_limit[y + cred]; + 80110a4: f816 b009 ldrb.w fp, [r6, r9] + 80110a8: f802 bc04 strb.w fp, [r2, #-4] + outptr0[RGB_GREEN] = range_limit[y + cgreen]; + 80110ac: f811 b009 ldrb.w fp, [r1, r9] + 80110b0: f802 bc05 strb.w fp, [r2, #-5] + outptr0[RGB_BLUE] = range_limit[y + cblue]; + 80110b4: f815 9009 ldrb.w r9, [r5, r9] + 80110b8: f802 9c06 strb.w r9, [r2, #-6] + y = GETJSAMPLE(*inptr00++); + 80110bc: f81e 9c01 ldrb.w r9, [lr, #-1] + outptr0[RGB_RED] = range_limit[y + cred]; + 80110c0: f816 b009 ldrb.w fp, [r6, r9] + 80110c4: f802 bc01 strb.w fp, [r2, #-1] + outptr0[RGB_GREEN] = range_limit[y + cgreen]; + 80110c8: f811 b009 ldrb.w fp, [r1, r9] + 80110cc: f802 bc02 strb.w fp, [r2, #-2] + outptr0[RGB_BLUE] = range_limit[y + cblue]; + 80110d0: f815 9009 ldrb.w r9, [r5, r9] + 80110d4: f802 9c03 strb.w r9, [r2, #-3] + y = GETJSAMPLE(*inptr01++); + 80110d8: f81c 9c02 ldrb.w r9, [ip, #-2] + outptr1[RGB_RED] = range_limit[y + cred]; + 80110dc: f816 b009 ldrb.w fp, [r6, r9] + 80110e0: f803 bc04 strb.w fp, [r3, #-4] + outptr1[RGB_GREEN] = range_limit[y + cgreen]; + 80110e4: f811 b009 ldrb.w fp, [r1, r9] + 80110e8: f803 bc05 strb.w fp, [r3, #-5] + outptr1[RGB_BLUE] = range_limit[y + cblue]; + 80110ec: f815 9009 ldrb.w r9, [r5, r9] + 80110f0: f803 9c06 strb.w r9, [r3, #-6] + y = GETJSAMPLE(*inptr01++); + 80110f4: f81c 9c01 ldrb.w r9, [ip, #-1] + outptr1[RGB_RED] = range_limit[y + cred]; + 80110f8: f816 6009 ldrb.w r6, [r6, r9] + 80110fc: f803 6c01 strb.w r6, [r3, #-1] + outptr1[RGB_GREEN] = range_limit[y + cgreen]; + 8011100: f811 1009 ldrb.w r1, [r1, r9] + 8011104: f803 1c02 strb.w r1, [r3, #-2] + outptr1[RGB_BLUE] = range_limit[y + cblue]; + 8011108: f815 1009 ldrb.w r1, [r5, r9] + 801110c: f803 1c03 strb.w r1, [r3, #-3] + for (col = cinfo->output_width >> 1; col > 0; col--) { + 8011110: e76b b.n 8010fea + +08011112 : +{ + 8011112: e92d 41ff stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, lr} + my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample; + 8011116: f8d0 41d8 ldr.w r4, [r0, #472] ; 0x1d8 +{ + 801111a: 4616 mov r6, r2 + 801111c: e9dd c80a ldrd ip, r8, [sp, #40] ; 0x28 + if (upsample->spare_full) { + 8011120: 6a65 ldr r5, [r4, #36] ; 0x24 + jcopy_sample_rows(& upsample->spare_row, 0, output_buf + *out_row_ctr, 0, + 8011122: f8d8 3000 ldr.w r3, [r8] + 8011126: eb0c 0283 add.w r2, ip, r3, lsl #2 + if (upsample->spare_full) { + 801112a: b1dd cbz r5, 8011164 + jcopy_sample_rows(& upsample->spare_row, 0, output_buf + *out_row_ctr, 0, + 801112c: 6aa3 ldr r3, [r4, #40] ; 0x28 + 801112e: 2501 movs r5, #1 + 8011130: f104 0020 add.w r0, r4, #32 + 8011134: 9301 str r3, [sp, #4] + 8011136: 2300 movs r3, #0 + 8011138: 9500 str r5, [sp, #0] + 801113a: 4619 mov r1, r3 + 801113c: f007 fbb7 bl 80188ae + upsample->spare_full = FALSE; + 8011140: 2300 movs r3, #0 + 8011142: 6263 str r3, [r4, #36] ; 0x24 + *out_row_ctr += num_rows; + 8011144: f8d8 3000 ldr.w r3, [r8] + 8011148: 442b add r3, r5 + 801114a: f8c8 3000 str.w r3, [r8] + upsample->rows_to_go -= num_rows; + 801114e: 6ae3 ldr r3, [r4, #44] ; 0x2c + 8011150: 1b5b subs r3, r3, r5 + 8011152: 62e3 str r3, [r4, #44] ; 0x2c + if (! upsample->spare_full) + 8011154: 6a63 ldr r3, [r4, #36] ; 0x24 + 8011156: b913 cbnz r3, 801115e + (*in_row_group_ctr)++; + 8011158: 6833 ldr r3, [r6, #0] + 801115a: 3301 adds r3, #1 + 801115c: 6033 str r3, [r6, #0] +} + 801115e: b004 add sp, #16 + 8011160: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + if (num_rows > upsample->rows_to_go) + 8011164: 6ae7 ldr r7, [r4, #44] ; 0x2c + out_rows_avail -= *out_row_ctr; + 8011166: 9d0c ldr r5, [sp, #48] ; 0x30 + num_rows = 2; + 8011168: 2f02 cmp r7, #2 + out_rows_avail -= *out_row_ctr; + 801116a: eba5 0503 sub.w r5, r5, r3 + work_ptrs[0] = output_buf[*out_row_ctr]; + 801116e: f85c 3023 ldr.w r3, [ip, r3, lsl #2] + num_rows = 2; + 8011172: bf28 it cs + 8011174: 2702 movcs r7, #2 + work_ptrs[0] = output_buf[*out_row_ctr]; + 8011176: 9302 str r3, [sp, #8] + 8011178: 42bd cmp r5, r7 + 801117a: bf28 it cs + 801117c: 463d movcs r5, r7 + (*upsample->upmethod) (cinfo, input_buf, *in_row_group_ctr, work_ptrs); + 801117e: 68e7 ldr r7, [r4, #12] + if (num_rows > 1) { + 8011180: 2d02 cmp r5, #2 + work_ptrs[1] = upsample->spare_row; + 8011182: bf17 itett ne + 8011184: 6a23 ldrne r3, [r4, #32] + work_ptrs[1] = output_buf[*out_row_ctr + 1]; + 8011186: 6853 ldreq r3, [r2, #4] + work_ptrs[1] = upsample->spare_row; + 8011188: 9303 strne r3, [sp, #12] + upsample->spare_full = TRUE; + 801118a: 2301 movne r3, #1 + work_ptrs[1] = output_buf[*out_row_ctr + 1]; + 801118c: bf0c ite eq + 801118e: 9303 streq r3, [sp, #12] + upsample->spare_full = TRUE; + 8011190: 6263 strne r3, [r4, #36] ; 0x24 + (*upsample->upmethod) (cinfo, input_buf, *in_row_group_ctr, work_ptrs); + 8011192: ab02 add r3, sp, #8 + 8011194: 6832 ldr r2, [r6, #0] + 8011196: 47b8 blx r7 + 8011198: e7d4 b.n 8011144 + ... + +0801119c : +jinit_merged_upsampler (j_decompress_ptr cinfo) +{ + my_upsample_ptr upsample; + + upsample = (my_upsample_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 801119c: 6843 ldr r3, [r0, #4] + 801119e: 2230 movs r2, #48 ; 0x30 + 80111a0: 2101 movs r1, #1 + 80111a2: 681b ldr r3, [r3, #0] +{ + 80111a4: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} + 80111a8: 4604 mov r4, r0 + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 80111aa: 4798 blx r3 + SIZEOF(my_upsampler)); + cinfo->upsample = (struct jpeg_upsampler *) upsample; + upsample->pub.start_pass = start_pass_merged_upsample; + 80111ac: 4b37 ldr r3, [pc, #220] ; (801128c ) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 80111ae: 4605 mov r5, r0 + cinfo->upsample = (struct jpeg_upsampler *) upsample; + 80111b0: f8c4 01d8 str.w r0, [r4, #472] ; 0x1d8 + upsample->pub.need_context_rows = FALSE; + + upsample->out_row_width = cinfo->output_width * cinfo->out_color_components; + 80111b4: 6f22 ldr r2, [r4, #112] ; 0x70 + upsample->pub.start_pass = start_pass_merged_upsample; + 80111b6: 6003 str r3, [r0, #0] + upsample->pub.need_context_rows = FALSE; + 80111b8: 2000 movs r0, #0 + upsample->out_row_width = cinfo->output_width * cinfo->out_color_components; + 80111ba: 6fa3 ldr r3, [r4, #120] ; 0x78 + upsample->pub.need_context_rows = FALSE; + 80111bc: 60a8 str r0, [r5, #8] + upsample->out_row_width = cinfo->output_width * cinfo->out_color_components; + 80111be: 435a muls r2, r3 + + if (cinfo->max_v_samp_factor == 2) { + 80111c0: f8d4 313c ldr.w r3, [r4, #316] ; 0x13c + 80111c4: 2b02 cmp r3, #2 + upsample->out_row_width = cinfo->output_width * cinfo->out_color_components; + 80111c6: 62aa str r2, [r5, #40] ; 0x28 + if (cinfo->max_v_samp_factor == 2) { + 80111c8: d15a bne.n 8011280 + upsample->pub.upsample = merged_2v_upsample; + 80111ca: 4b31 ldr r3, [pc, #196] ; (8011290 ) + upsample->upmethod = h2v2_merged_upsample; + /* Allocate a spare row buffer */ + upsample->spare_row = (JSAMPROW) + (*cinfo->mem->alloc_large) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 80111cc: 2101 movs r1, #1 + 80111ce: 4620 mov r0, r4 + upsample->pub.upsample = merged_2v_upsample; + 80111d0: 606b str r3, [r5, #4] + upsample->upmethod = h2v2_merged_upsample; + 80111d2: 4b30 ldr r3, [pc, #192] ; (8011294 ) + 80111d4: 60eb str r3, [r5, #12] + (*cinfo->mem->alloc_large) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 80111d6: 6863 ldr r3, [r4, #4] + 80111d8: 685b ldr r3, [r3, #4] + 80111da: 4798 blx r3 + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 80111dc: 6863 ldr r3, [r4, #4] + 80111de: f44f 6280 mov.w r2, #1024 ; 0x400 + upsample->spare_row = (JSAMPROW) + 80111e2: 6228 str r0, [r5, #32] + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 80111e4: 2101 movs r1, #1 + 80111e6: 681b ldr r3, [r3, #0] + 80111e8: 4620 mov r0, r4 + my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample; + 80111ea: f8d4 51d8 ldr.w r5, [r4, #472] ; 0x1d8 + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 80111ee: 4798 blx r3 + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 80111f0: 6863 ldr r3, [r4, #4] + 80111f2: f44f 6280 mov.w r2, #1024 ; 0x400 + upsample->Cr_r_tab = (int *) + 80111f6: 6128 str r0, [r5, #16] + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 80111f8: 2101 movs r1, #1 + 80111fa: 681b ldr r3, [r3, #0] + 80111fc: 4620 mov r0, r4 + 80111fe: 4798 blx r3 + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 8011200: 6863 ldr r3, [r4, #4] + upsample->Cb_b_tab = (int *) + 8011202: 6168 str r0, [r5, #20] + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 8011204: f44f 6280 mov.w r2, #1024 ; 0x400 + 8011208: 681b ldr r3, [r3, #0] + 801120a: 2101 movs r1, #1 + 801120c: 4620 mov r0, r4 + RIGHT_SHIFT(FIX(1.40200) * x + ONE_HALF, SCALEBITS); + 801120e: f8df 809c ldr.w r8, [pc, #156] ; 80112ac + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 8011212: 4798 blx r3 + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 8011214: 6863 ldr r3, [r4, #4] + upsample->Cr_g_tab = (INT32 *) + 8011216: 61a8 str r0, [r5, #24] + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 8011218: 2101 movs r1, #1 + 801121a: 681b ldr r3, [r3, #0] + 801121c: 4620 mov r0, r4 + 801121e: f44f 6280 mov.w r2, #1024 ; 0x400 + RIGHT_SHIFT(FIX(1.77200) * x + ONE_HALF, SCALEBITS); + 8011222: 4f1d ldr r7, [pc, #116] ; (8011298 ) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 8011224: 4798 blx r3 + upsample->Cr_g_tab[i] = (- FIX(0.71414)) * x; + 8011226: 69ac ldr r4, [r5, #24] + upsample->Cb_g_tab = (INT32 *) + 8011228: 61e8 str r0, [r5, #28] + for (i = 0, x = -CENTERJSAMPLE; i <= MAXJSAMPLE; i++, x++) { + 801122a: 2300 movs r3, #0 + RIGHT_SHIFT(FIX(1.40200) * x + ONE_HALF, SCALEBITS); + 801122c: f8df e080 ldr.w lr, [pc, #128] ; 80112b0 + upsample->Cb_g_tab[i] = (- FIX(0.34414)) * x + ONE_HALF; + 8011230: 491a ldr r1, [pc, #104] ; (801129c ) + upsample->Cb_b_tab[i] = (int) + 8011232: e9d5 c604 ldrd ip, r6, [r5, #16] + upsample->Cr_g_tab[i] = (- FIX(0.71414)) * x; + 8011236: 4d1a ldr r5, [pc, #104] ; (80112a0 ) + RIGHT_SHIFT(FIX(1.40200) * x + ONE_HALF, SCALEBITS); + 8011238: fb08 e203 mla r2, r8, r3, lr + 801123c: 1412 asrs r2, r2, #16 + upsample->Cr_r_tab[i] = (int) + 801123e: f84c 2023 str.w r2, [ip, r3, lsl #2] + RIGHT_SHIFT(FIX(1.77200) * x + ONE_HALF, SCALEBITS); + 8011242: fb07 f203 mul.w r2, r7, r3 + 8011246: f5a2 0262 sub.w r2, r2, #14811136 ; 0xe20000 + 801124a: f5a2 42a2 sub.w r2, r2, #20736 ; 0x5100 + 801124e: 1412 asrs r2, r2, #16 + upsample->Cb_b_tab[i] = (int) + 8011250: f846 2023 str.w r2, [r6, r3, lsl #2] + upsample->Cr_g_tab[i] = (- FIX(0.71414)) * x; + 8011254: fb05 f203 mul.w r2, r5, r3 + 8011258: f502 02b6 add.w r2, r2, #5963776 ; 0x5b0000 + 801125c: f502 42d2 add.w r2, r2, #26880 ; 0x6900 + 8011260: f844 2023 str.w r2, [r4, r3, lsl #2] + upsample->Cb_g_tab[i] = (- FIX(0.34414)) * x + ONE_HALF; + 8011264: fb01 f203 mul.w r2, r1, r3 + 8011268: f502 1232 add.w r2, r2, #2916352 ; 0x2c8000 + 801126c: f502 6250 add.w r2, r2, #3328 ; 0xd00 + 8011270: f840 2023 str.w r2, [r0, r3, lsl #2] + for (i = 0, x = -CENTERJSAMPLE; i <= MAXJSAMPLE; i++, x++) { + 8011274: 3301 adds r3, #1 + 8011276: f5b3 7f80 cmp.w r3, #256 ; 0x100 + 801127a: d1dd bne.n 8011238 + /* No spare row needed */ + upsample->spare_row = NULL; + } + + build_ycc_rgb_table(cinfo); +} + 801127c: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + upsample->pub.upsample = merged_1v_upsample; + 8011280: 4b08 ldr r3, [pc, #32] ; (80112a4 ) + 8011282: 606b str r3, [r5, #4] + upsample->upmethod = h2v1_merged_upsample; + 8011284: 4b08 ldr r3, [pc, #32] ; (80112a8 ) + 8011286: 60eb str r3, [r5, #12] + upsample->spare_row = NULL; + 8011288: e7a8 b.n 80111dc + 801128a: bf00 nop + 801128c: 08010e51 .word 0x08010e51 + 8011290: 08011113 .word 0x08011113 + 8011294: 08010f93 .word 0x08010f93 + 8011298: 0001c5a2 .word 0x0001c5a2 + 801129c: ffffa7e6 .word 0xffffa7e6 + 80112a0: ffff492e .word 0xffff492e + 80112a4: 08010e5f .word 0x08010e5f + 80112a8: 08010e85 .word 0x08010e85 + 80112ac: 000166e9 .word 0x000166e9 + 80112b0: ff4d0b80 .word 0xff4d0b80 + +080112b4 : +METHODDEF(void) +start_pass_dpost (j_decompress_ptr cinfo, J_BUF_MODE pass_mode) +{ + my_post_ptr post = (my_post_ptr) cinfo->post; + + switch (pass_mode) { + 80112b4: 2902 cmp r1, #2 +{ + 80112b6: b537 push {r0, r1, r2, r4, r5, lr} + my_post_ptr post = (my_post_ptr) cinfo->post; + 80112b8: f8d0 41c4 ldr.w r4, [r0, #452] ; 0x1c4 + switch (pass_mode) { + 80112bc: d023 beq.n 8011306 + 80112be: 2903 cmp r1, #3 + 80112c0: d019 beq.n 80112f6 + 80112c2: 2900 cmp r1, #0 + 80112c4: d128 bne.n 8011318 + case JBUF_PASS_THRU: + if (cinfo->quantize_colors) { + 80112c6: 6d42 ldr r2, [r0, #84] ; 0x54 + 80112c8: b182 cbz r2, 80112ec + /* Single-pass processing with color quantization. */ + post->pub.post_process_data = post_process_1pass; + 80112ca: 4a16 ldr r2, [pc, #88] ; (8011324 ) + 80112cc: 6062 str r2, [r4, #4] + /* We could be doing buffered-image output before starting a 2-pass + * color quantization; in that case, jinit_d_post_controller did not + * allocate a strip buffer. Use the virtual-array buffer as workspace. + */ + if (post->buffer == NULL) { + 80112ce: 68e2 ldr r2, [r4, #12] + 80112d0: b93a cbnz r2, 80112e2 + post->buffer = (*cinfo->mem->access_virt_sarray) + 80112d2: 6843 ldr r3, [r0, #4] + 80112d4: 2101 movs r1, #1 + 80112d6: 9100 str r1, [sp, #0] + 80112d8: 69dd ldr r5, [r3, #28] + 80112da: 68a1 ldr r1, [r4, #8] + 80112dc: 6923 ldr r3, [r4, #16] + 80112de: 47a8 blx r5 + 80112e0: 60e0 str r0, [r4, #12] +#endif /* QUANT_2PASS_SUPPORTED */ + default: + ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); + break; + } + post->starting_row = post->next_row = 0; + 80112e2: 2300 movs r3, #0 + 80112e4: e9c4 3305 strd r3, r3, [r4, #20] +} + 80112e8: b003 add sp, #12 + 80112ea: bd30 pop {r4, r5, pc} + post->pub.post_process_data = cinfo->upsample->upsample; + 80112ec: f8d0 31d8 ldr.w r3, [r0, #472] ; 0x1d8 + 80112f0: 685b ldr r3, [r3, #4] + post->pub.post_process_data = post_process_prepass; + 80112f2: 6063 str r3, [r4, #4] + break; + 80112f4: e7f5 b.n 80112e2 + if (post->whole_image == NULL) + 80112f6: 68a2 ldr r2, [r4, #8] + 80112f8: b91a cbnz r2, 8011302 + ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); + 80112fa: 6803 ldr r3, [r0, #0] + 80112fc: 6159 str r1, [r3, #20] + 80112fe: 681b ldr r3, [r3, #0] + 8011300: 4798 blx r3 + post->pub.post_process_data = post_process_prepass; + 8011302: 4b09 ldr r3, [pc, #36] ; (8011328 ) + 8011304: e7f5 b.n 80112f2 + if (post->whole_image == NULL) + 8011306: 68a2 ldr r2, [r4, #8] + 8011308: b922 cbnz r2, 8011314 + ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); + 801130a: 6803 ldr r3, [r0, #0] + 801130c: 2203 movs r2, #3 + 801130e: 615a str r2, [r3, #20] + 8011310: 681b ldr r3, [r3, #0] + 8011312: 4798 blx r3 + post->pub.post_process_data = post_process_2pass; + 8011314: 4b05 ldr r3, [pc, #20] ; (801132c ) + 8011316: e7ec b.n 80112f2 + ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); + 8011318: 6803 ldr r3, [r0, #0] + 801131a: 2203 movs r2, #3 + 801131c: 615a str r2, [r3, #20] + 801131e: 681b ldr r3, [r3, #0] + 8011320: 4798 blx r3 + break; + 8011322: e7de b.n 80112e2 + 8011324: 08011331 .word 0x08011331 + 8011328: 08011391 .word 0x08011391 + 801132c: 0801141f .word 0x0801141f + +08011330 : +post_process_1pass (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr, + JDIMENSION in_row_groups_avail, + JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, + JDIMENSION out_rows_avail) +{ + 8011330: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} + 8011334: b088 sub sp, #32 + my_post_ptr post = (my_post_ptr) cinfo->post; + 8011336: f8d0 81c4 ldr.w r8, [r0, #452] ; 0x1c4 +{ + 801133a: 4604 mov r4, r0 + 801133c: 9d0f ldr r5, [sp, #60] ; 0x3c + JDIMENSION num_rows, max_rows; + + /* Fill the buffer, but not more than what we can dump out in one go. */ + /* Note we rely on the upsampler to detect bottom of image. */ + max_rows = out_rows_avail - *out_row_ctr; + 801133e: 9e10 ldr r6, [sp, #64] ; 0x40 + 8011340: 682f ldr r7, [r5, #0] + 8011342: 1bf6 subs r6, r6, r7 + if (max_rows > post->strip_height) + max_rows = post->strip_height; + num_rows = 0; + 8011344: 2700 movs r7, #0 + 8011346: 9707 str r7, [sp, #28] + (*cinfo->upsample->upsample) (cinfo, + 8011348: f8d0 71d8 ldr.w r7, [r0, #472] ; 0x1d8 + 801134c: 9705 str r7, [sp, #20] + 801134e: f8d8 7010 ldr.w r7, [r8, #16] + 8011352: 42be cmp r6, r7 + 8011354: bf94 ite ls + 8011356: 9602 strls r6, [sp, #8] + 8011358: 9702 strhi r7, [sp, #8] + 801135a: ae07 add r6, sp, #28 + 801135c: 9601 str r6, [sp, #4] + 801135e: f8d8 600c ldr.w r6, [r8, #12] + 8011362: 9600 str r6, [sp, #0] + 8011364: 9e05 ldr r6, [sp, #20] + 8011366: 6876 ldr r6, [r6, #4] + 8011368: 47b0 blx r6 + input_buf, in_row_group_ctr, in_row_groups_avail, + post->buffer, &num_rows, max_rows); + /* Quantize and emit data. */ + (*cinfo->cquantize->color_quantize) (cinfo, + post->buffer, output_buf + *out_row_ctr, (int) num_rows); + 801136a: 6829 ldr r1, [r5, #0] + (*cinfo->cquantize->color_quantize) (cinfo, + 801136c: f8d4 31e0 ldr.w r3, [r4, #480] ; 0x1e0 + 8011370: 4620 mov r0, r4 + 8011372: 9a0e ldr r2, [sp, #56] ; 0x38 + 8011374: 685e ldr r6, [r3, #4] + 8011376: eb02 0281 add.w r2, r2, r1, lsl #2 + 801137a: 9b07 ldr r3, [sp, #28] + 801137c: f8d8 100c ldr.w r1, [r8, #12] + 8011380: 47b0 blx r6 + *out_row_ctr += num_rows; + 8011382: 682b ldr r3, [r5, #0] + 8011384: 9a07 ldr r2, [sp, #28] + 8011386: 4413 add r3, r2 + 8011388: 602b str r3, [r5, #0] +} + 801138a: b008 add sp, #32 + 801138c: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + +08011390 : +post_process_prepass (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr, + JDIMENSION in_row_groups_avail, + JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, + JDIMENSION out_rows_avail) +{ + 8011390: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + my_post_ptr post = (my_post_ptr) cinfo->post; + 8011394: f8d0 41c4 ldr.w r4, [r0, #452] ; 0x1c4 +{ + 8011398: b085 sub sp, #20 + 801139a: 469a mov sl, r3 + 801139c: 4605 mov r5, r0 + JDIMENSION old_next_row, num_rows; + + /* Reposition virtual buffer if at start of strip. */ + if (post->next_row == 0) { + 801139e: 69a3 ldr r3, [r4, #24] +{ + 80113a0: 460e mov r6, r1 + 80113a2: 4691 mov r9, r2 + 80113a4: f8dd 803c ldr.w r8, [sp, #60] ; 0x3c + if (post->next_row == 0) { + 80113a8: b943 cbnz r3, 80113bc + post->buffer = (*cinfo->mem->access_virt_sarray) + 80113aa: 6843 ldr r3, [r0, #4] + 80113ac: 2201 movs r2, #1 + 80113ae: 9200 str r2, [sp, #0] + 80113b0: 69df ldr r7, [r3, #28] + 80113b2: 68a1 ldr r1, [r4, #8] + 80113b4: e9d4 3204 ldrd r3, r2, [r4, #16] + 80113b8: 47b8 blx r7 + 80113ba: 60e0 str r0, [r4, #12] + post->starting_row, post->strip_height, TRUE); + } + + /* Upsample some data (up to a strip height's worth). */ + old_next_row = post->next_row; + (*cinfo->upsample->upsample) (cinfo, + 80113bc: 6922 ldr r2, [r4, #16] + 80113be: 4631 mov r1, r6 + old_next_row = post->next_row; + 80113c0: 69a7 ldr r7, [r4, #24] + (*cinfo->upsample->upsample) (cinfo, + 80113c2: 4628 mov r0, r5 + 80113c4: 9202 str r2, [sp, #8] + 80113c6: f104 0218 add.w r2, r4, #24 + 80113ca: f8d5 31d8 ldr.w r3, [r5, #472] ; 0x1d8 + 80113ce: 9201 str r2, [sp, #4] + 80113d0: 68e2 ldr r2, [r4, #12] + 80113d2: 9200 str r2, [sp, #0] + 80113d4: 464a mov r2, r9 + 80113d6: f8d3 b004 ldr.w fp, [r3, #4] + 80113da: 4653 mov r3, sl + 80113dc: 47d8 blx fp + input_buf, in_row_group_ctr, in_row_groups_avail, + post->buffer, &post->next_row, post->strip_height); + + /* Allow quantizer to scan new data. No data is emitted, */ + /* but we advance out_row_ctr so outer loop can tell when we're done. */ + if (post->next_row > old_next_row) { + 80113de: 69a6 ldr r6, [r4, #24] + 80113e0: 42be cmp r6, r7 + 80113e2: d910 bls.n 8011406 + num_rows = post->next_row - old_next_row; + (*cinfo->cquantize->color_quantize) (cinfo, post->buffer + old_next_row, + 80113e4: f8d5 31e0 ldr.w r3, [r5, #480] ; 0x1e0 + num_rows = post->next_row - old_next_row; + 80113e8: 1bf6 subs r6, r6, r7 + (*cinfo->cquantize->color_quantize) (cinfo, post->buffer + old_next_row, + 80113ea: 68e1 ldr r1, [r4, #12] + 80113ec: 2200 movs r2, #0 + 80113ee: f8d3 9004 ldr.w r9, [r3, #4] + 80113f2: 4628 mov r0, r5 + 80113f4: 4633 mov r3, r6 + 80113f6: eb01 0187 add.w r1, r1, r7, lsl #2 + 80113fa: 47c8 blx r9 + (JSAMPARRAY) NULL, (int) num_rows); + *out_row_ctr += num_rows; + 80113fc: f8d8 3000 ldr.w r3, [r8] + 8011400: 4433 add r3, r6 + 8011402: f8c8 3000 str.w r3, [r8] + } + + /* Advance if we filled the strip. */ + if (post->next_row >= post->strip_height) { + 8011406: 6922 ldr r2, [r4, #16] + 8011408: 69a3 ldr r3, [r4, #24] + 801140a: 4293 cmp r3, r2 + 801140c: d304 bcc.n 8011418 + post->starting_row += post->strip_height; + 801140e: 6963 ldr r3, [r4, #20] + 8011410: 4413 add r3, r2 + 8011412: 6163 str r3, [r4, #20] + post->next_row = 0; + 8011414: 2300 movs r3, #0 + 8011416: 61a3 str r3, [r4, #24] + } +} + 8011418: b005 add sp, #20 + 801141a: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + +0801141e : +post_process_2pass (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr, + JDIMENSION in_row_groups_avail, + JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, + JDIMENSION out_rows_avail) +{ + 801141e: e92d 41ff stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, lr} + my_post_ptr post = (my_post_ptr) cinfo->post; + 8011422: f8d0 41c4 ldr.w r4, [r0, #452] ; 0x1c4 +{ + 8011426: 4606 mov r6, r0 + 8011428: 9f0b ldr r7, [sp, #44] ; 0x2c + JDIMENSION num_rows, max_rows; + + /* Reposition virtual buffer if at start of strip. */ + if (post->next_row == 0) { + 801142a: 69a3 ldr r3, [r4, #24] + 801142c: b93b cbnz r3, 801143e + post->buffer = (*cinfo->mem->access_virt_sarray) + 801142e: 6842 ldr r2, [r0, #4] + 8011430: 9300 str r3, [sp, #0] + 8011432: 69d5 ldr r5, [r2, #28] + 8011434: 68a1 ldr r1, [r4, #8] + 8011436: e9d4 3204 ldrd r3, r2, [r4, #16] + 801143a: 47a8 blx r5 + 801143c: 60e0 str r0, [r4, #12] + num_rows = post->strip_height - post->next_row; /* available in strip */ + max_rows = out_rows_avail - *out_row_ctr; /* available in output area */ + if (num_rows > max_rows) + num_rows = max_rows; + /* We have to check bottom of image here, can't depend on upsampler. */ + max_rows = cinfo->output_height - post->starting_row; + 801143e: 6963 ldr r3, [r4, #20] + 8011440: 6f75 ldr r5, [r6, #116] ; 0x74 + num_rows = post->strip_height - post->next_row; /* available in strip */ + 8011442: 69a1 ldr r1, [r4, #24] + max_rows = cinfo->output_height - post->starting_row; + 8011444: 1aed subs r5, r5, r3 + num_rows = post->strip_height - post->next_row; /* available in strip */ + 8011446: 6923 ldr r3, [r4, #16] + max_rows = out_rows_avail - *out_row_ctr; /* available in output area */ + 8011448: 683a ldr r2, [r7, #0] + num_rows = post->strip_height - post->next_row; /* available in strip */ + 801144a: 1a5b subs r3, r3, r1 + if (num_rows > max_rows) + num_rows = max_rows; + + /* Quantize and emit data. */ + (*cinfo->cquantize->color_quantize) (cinfo, + 801144c: 980a ldr r0, [sp, #40] ; 0x28 + 801144e: 429d cmp r5, r3 + 8011450: bf28 it cs + 8011452: 461d movcs r5, r3 + max_rows = out_rows_avail - *out_row_ctr; /* available in output area */ + 8011454: 9b0c ldr r3, [sp, #48] ; 0x30 + 8011456: 1a9b subs r3, r3, r2 + (*cinfo->cquantize->color_quantize) (cinfo, + 8011458: eb00 0282 add.w r2, r0, r2, lsl #2 + 801145c: 429d cmp r5, r3 + 801145e: bf28 it cs + 8011460: 461d movcs r5, r3 + 8011462: 68e3 ldr r3, [r4, #12] + 8011464: 9303 str r3, [sp, #12] + 8011466: 9803 ldr r0, [sp, #12] + 8011468: f8d6 31e0 ldr.w r3, [r6, #480] ; 0x1e0 + 801146c: eb00 0181 add.w r1, r0, r1, lsl #2 + 8011470: 4630 mov r0, r6 + 8011472: f8d3 8004 ldr.w r8, [r3, #4] + 8011476: 462b mov r3, r5 + 8011478: 47c0 blx r8 + post->buffer + post->next_row, output_buf + *out_row_ctr, + (int) num_rows); + *out_row_ctr += num_rows; + 801147a: 683b ldr r3, [r7, #0] + 801147c: 442b add r3, r5 + 801147e: 603b str r3, [r7, #0] + + /* Advance if we filled the strip. */ + post->next_row += num_rows; + 8011480: 69a3 ldr r3, [r4, #24] + if (post->next_row >= post->strip_height) { + 8011482: 6922 ldr r2, [r4, #16] + post->next_row += num_rows; + 8011484: 441d add r5, r3 + if (post->next_row >= post->strip_height) { + 8011486: 4295 cmp r5, r2 + post->next_row += num_rows; + 8011488: 61a5 str r5, [r4, #24] + if (post->next_row >= post->strip_height) { + 801148a: d304 bcc.n 8011496 + post->starting_row += post->strip_height; + 801148c: 6963 ldr r3, [r4, #20] + 801148e: 4413 add r3, r2 + 8011490: 6163 str r3, [r4, #20] + post->next_row = 0; + 8011492: 2300 movs r3, #0 + 8011494: 61a3 str r3, [r4, #24] + } +} + 8011496: b004 add sp, #16 + 8011498: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + +0801149c : +jinit_d_post_controller (j_decompress_ptr cinfo, boolean need_full_buffer) +{ + my_post_ptr post; + + post = (my_post_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 801149c: 6843 ldr r3, [r0, #4] + 801149e: 221c movs r2, #28 +{ + 80114a0: b5f0 push {r4, r5, r6, r7, lr} + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 80114a2: 681b ldr r3, [r3, #0] +{ + 80114a4: b085 sub sp, #20 + 80114a6: 460f mov r7, r1 + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 80114a8: 2101 movs r1, #1 +{ + 80114aa: 4604 mov r4, r0 + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 80114ac: 4798 blx r3 + SIZEOF(my_post_controller)); + cinfo->post = (struct jpeg_d_post_controller *) post; + post->pub.start_pass = start_pass_dpost; + 80114ae: 4b15 ldr r3, [pc, #84] ; (8011504 ) + post->whole_image = NULL; /* flag for no virtual arrays */ + 80114b0: 2600 movs r6, #0 + cinfo->post = (struct jpeg_d_post_controller *) post; + 80114b2: f8c4 01c4 str.w r0, [r4, #452] ; 0x1c4 + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 80114b6: 4605 mov r5, r0 + post->pub.start_pass = start_pass_dpost; + 80114b8: 6003 str r3, [r0, #0] + post->buffer = NULL; /* flag for no strip buffer */ + + /* Create the quantization buffer, if needed */ + if (cinfo->quantize_colors) { + 80114ba: 6d63 ldr r3, [r4, #84] ; 0x54 + post->buffer = NULL; /* flag for no strip buffer */ + 80114bc: e9c0 6602 strd r6, r6, [r0, #8] + if (cinfo->quantize_colors) { + 80114c0: b1bb cbz r3, 80114f2 + /* The buffer strip height is max_v_samp_factor, which is typically + * an efficient number of rows for upsampling to return. + * (In the presence of output rescaling, we might want to be smarter?) + */ + post->strip_height = (JDIMENSION) cinfo->max_v_samp_factor; + 80114c2: f8d4 313c ldr.w r3, [r4, #316] ; 0x13c + if (need_full_buffer) { + /* Two-pass color quantization: need full-image storage. */ + /* We round up the number of rows to a multiple of the strip height. */ +#ifdef QUANT_2PASS_SUPPORTED + post->whole_image = (*cinfo->mem->request_virt_sarray) + 80114c6: 6f22 ldr r2, [r4, #112] ; 0x70 + post->strip_height = (JDIMENSION) cinfo->max_v_samp_factor; + 80114c8: 6103 str r3, [r0, #16] + post->whole_image = (*cinfo->mem->request_virt_sarray) + 80114ca: 6fa0 ldr r0, [r4, #120] ; 0x78 + 80114cc: 6861 ldr r1, [r4, #4] + 80114ce: 4342 muls r2, r0 + if (need_full_buffer) { + 80114d0: b18f cbz r7, 80114f6 + post->whole_image = (*cinfo->mem->request_virt_sarray) + 80114d2: 690f ldr r7, [r1, #16] + ((j_common_ptr) cinfo, JPOOL_IMAGE, FALSE, + cinfo->output_width * cinfo->out_color_components, + (JDIMENSION) jround_up((long) cinfo->output_height, + 80114d4: 4619 mov r1, r3 + 80114d6: 6f60 ldr r0, [r4, #116] ; 0x74 + 80114d8: 9203 str r2, [sp, #12] + 80114da: f007 f9e0 bl 801889e + post->whole_image = (*cinfo->mem->request_virt_sarray) + 80114de: 692b ldr r3, [r5, #16] + 80114e0: 2101 movs r1, #1 + 80114e2: 9a03 ldr r2, [sp, #12] + 80114e4: e9cd 0300 strd r0, r3, [sp] + 80114e8: 4613 mov r3, r2 + 80114ea: 4620 mov r0, r4 + 80114ec: 4632 mov r2, r6 + 80114ee: 47b8 blx r7 + 80114f0: 60a8 str r0, [r5, #8] + ((j_common_ptr) cinfo, JPOOL_IMAGE, + cinfo->output_width * cinfo->out_color_components, + post->strip_height); + } + } +} + 80114f2: b005 add sp, #20 + 80114f4: bdf0 pop {r4, r5, r6, r7, pc} + post->buffer = (*cinfo->mem->alloc_sarray) + 80114f6: 688e ldr r6, [r1, #8] + 80114f8: 4620 mov r0, r4 + 80114fa: 2101 movs r1, #1 + 80114fc: 47b0 blx r6 + 80114fe: 60e8 str r0, [r5, #12] +} + 8011500: e7f7 b.n 80114f2 + 8011502: bf00 nop + 8011504: 080112b5 .word 0x080112b5 + +08011508 : +start_pass_upsample (j_decompress_ptr cinfo) +{ + my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample; + + /* Mark the conversion buffer empty */ + upsample->next_row_out = cinfo->max_v_samp_factor; + 8011508: f8d0 213c ldr.w r2, [r0, #316] ; 0x13c + my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample; + 801150c: f8d0 31d8 ldr.w r3, [r0, #472] ; 0x1d8 + upsample->next_row_out = cinfo->max_v_samp_factor; + 8011510: 65da str r2, [r3, #92] ; 0x5c + /* Initialize total-height counter for detecting bottom of image */ + upsample->rows_to_go = cinfo->output_height; + 8011512: 6f42 ldr r2, [r0, #116] ; 0x74 + 8011514: 661a str r2, [r3, #96] ; 0x60 +} + 8011516: 4770 bx lr + +08011518 : +sep_upsample (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr, + JDIMENSION in_row_groups_avail, + JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, + JDIMENSION out_rows_avail) +{ + 8011518: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample; + 801151c: f8d0 41d8 ldr.w r4, [r0, #472] ; 0x1d8 +{ + 8011520: 4615 mov r5, r2 + int ci; + jpeg_component_info * compptr; + JDIMENSION num_rows; + + /* Fill the conversion buffer, if it's empty */ + if (upsample->next_row_out >= cinfo->max_v_samp_factor) { + 8011522: f8d0 313c ldr.w r3, [r0, #316] ; 0x13c +{ + 8011526: b085 sub sp, #20 + if (upsample->next_row_out >= cinfo->max_v_samp_factor) { + 8011528: 6de2 ldr r2, [r4, #92] ; 0x5c +{ + 801152a: 4683 mov fp, r0 + 801152c: 4688 mov r8, r1 + if (upsample->next_row_out >= cinfo->max_v_samp_factor) { + 801152e: 429a cmp r2, r3 + 8011530: db10 blt.n 8011554 + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + 8011532: f8d0 30d8 ldr.w r3, [r0, #216] ; 0xd8 + 8011536: 2600 movs r6, #0 + 8011538: f04f 0a58 mov.w sl, #88 ; 0x58 + 801153c: 9303 str r3, [sp, #12] + 801153e: f104 0330 add.w r3, r4, #48 ; 0x30 + 8011542: 9a03 ldr r2, [sp, #12] + 8011544: fb0a 2106 mla r1, sl, r6, r2 + 8011548: f8db 2024 ldr.w r2, [fp, #36] ; 0x24 + 801154c: 42b2 cmp r2, r6 + 801154e: dc31 bgt.n 80115b4 + */ + (*upsample->methods[ci]) (cinfo, compptr, + input_buf[ci] + (*in_row_group_ctr * upsample->rowgroup_height[ci]), + upsample->color_buf + ci); + } + upsample->next_row_out = 0; + 8011550: 2300 movs r3, #0 + 8011552: 65e3 str r3, [r4, #92] ; 0x5c + * in case the image height is not a multiple of max_v_samp_factor: + */ + if (num_rows > upsample->rows_to_go) + num_rows = upsample->rows_to_go; + /* And not more than what the client can accept: */ + out_rows_avail -= *out_row_ctr; + 8011554: 9b0f ldr r3, [sp, #60] ; 0x3c + if (num_rows > out_rows_avail) + num_rows = out_rows_avail; + + (*cinfo->cconvert->color_convert) (cinfo, upsample->color_buf, + 8011556: 4658 mov r0, fp + out_rows_avail -= *out_row_ctr; + 8011558: 9e10 ldr r6, [sp, #64] ; 0x40 + 801155a: 681b ldr r3, [r3, #0] + 801155c: 6e21 ldr r1, [r4, #96] ; 0x60 + 801155e: 1af6 subs r6, r6, r3 + num_rows = (JDIMENSION) (cinfo->max_v_samp_factor - upsample->next_row_out); + 8011560: 6de2 ldr r2, [r4, #92] ; 0x5c + if (num_rows > out_rows_avail) + 8011562: 428e cmp r6, r1 + 8011564: bf28 it cs + 8011566: 460e movcs r6, r1 + num_rows = (JDIMENSION) (cinfo->max_v_samp_factor - upsample->next_row_out); + 8011568: f8db 113c ldr.w r1, [fp, #316] ; 0x13c + 801156c: 1a89 subs r1, r1, r2 + 801156e: 428e cmp r6, r1 + 8011570: bf28 it cs + 8011572: 460e movcs r6, r1 + (*cinfo->cconvert->color_convert) (cinfo, upsample->color_buf, + 8011574: f8db 11dc ldr.w r1, [fp, #476] ; 0x1dc + 8011578: 9600 str r6, [sp, #0] + 801157a: f8d1 8004 ldr.w r8, [r1, #4] + 801157e: 990e ldr r1, [sp, #56] ; 0x38 + 8011580: eb01 0383 add.w r3, r1, r3, lsl #2 + 8011584: f104 010c add.w r1, r4, #12 + 8011588: 47c0 blx r8 + (JDIMENSION) upsample->next_row_out, + output_buf + *out_row_ctr, + (int) num_rows); + + /* Adjust counts */ + *out_row_ctr += num_rows; + 801158a: 9b0f ldr r3, [sp, #60] ; 0x3c + 801158c: 9a0f ldr r2, [sp, #60] ; 0x3c + 801158e: 681b ldr r3, [r3, #0] + 8011590: 4433 add r3, r6 + 8011592: 6013 str r3, [r2, #0] + upsample->rows_to_go -= num_rows; + 8011594: 6e23 ldr r3, [r4, #96] ; 0x60 + 8011596: 1b9b subs r3, r3, r6 + 8011598: 6623 str r3, [r4, #96] ; 0x60 + upsample->next_row_out += num_rows; + 801159a: 6de3 ldr r3, [r4, #92] ; 0x5c + 801159c: 441e add r6, r3 + /* When the buffer is emptied, declare this input row group consumed */ + if (upsample->next_row_out >= cinfo->max_v_samp_factor) + 801159e: f8db 313c ldr.w r3, [fp, #316] ; 0x13c + 80115a2: 429e cmp r6, r3 + upsample->next_row_out += num_rows; + 80115a4: 65e6 str r6, [r4, #92] ; 0x5c + (*in_row_group_ctr)++; + 80115a6: bfa2 ittt ge + 80115a8: 682b ldrge r3, [r5, #0] + 80115aa: 3301 addge r3, #1 + 80115ac: 602b strge r3, [r5, #0] +} + 80115ae: b005 add sp, #20 + 80115b0: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + input_buf[ci] + (*in_row_group_ctr * upsample->rowgroup_height[ci]), + 80115b4: 6b58 ldr r0, [r3, #52] ; 0x34 + (*upsample->methods[ci]) (cinfo, compptr, + 80115b6: f103 0904 add.w r9, r3, #4 + input_buf[ci] + (*in_row_group_ctr * upsample->rowgroup_height[ci]), + 80115ba: 682a ldr r2, [r5, #0] + (*upsample->methods[ci]) (cinfo, compptr, + 80115bc: 3b24 subs r3, #36 ; 0x24 + input_buf[ci] + (*in_row_group_ctr * upsample->rowgroup_height[ci]), + 80115be: 4342 muls r2, r0 + (*upsample->methods[ci]) (cinfo, compptr, + 80115c0: 6a98 ldr r0, [r3, #40] ; 0x28 + 80115c2: 4607 mov r7, r0 + 80115c4: f858 0026 ldr.w r0, [r8, r6, lsl #2] + ci++, compptr++) { + 80115c8: 3601 adds r6, #1 + (*upsample->methods[ci]) (cinfo, compptr, + 80115ca: eb00 0282 add.w r2, r0, r2, lsl #2 + 80115ce: 4658 mov r0, fp + 80115d0: 47b8 blx r7 + ci++, compptr++) { + 80115d2: 464b mov r3, r9 + 80115d4: e7b5 b.n 8011542 + +080115d6 : + +METHODDEF(void) +fullsize_upsample (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JSAMPARRAY input_data, JSAMPARRAY * output_data_ptr) +{ + *output_data_ptr = input_data; + 80115d6: 601a str r2, [r3, #0] +} + 80115d8: 4770 bx lr + +080115da : + +METHODDEF(void) +noop_upsample (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JSAMPARRAY input_data, JSAMPARRAY * output_data_ptr) +{ + *output_data_ptr = NULL; /* safety check */ + 80115da: 2200 movs r2, #0 + 80115dc: 601a str r2, [r3, #0] +} + 80115de: 4770 bx lr + +080115e0 : + */ + +METHODDEF(void) +h2v1_upsample (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JSAMPARRAY input_data, JSAMPARRAY * output_data_ptr) +{ + 80115e0: b5f0 push {r4, r5, r6, r7, lr} + JSAMPARRAY output_data = *output_data_ptr; + 80115e2: 681f ldr r7, [r3, #0] + register JSAMPROW inptr, outptr; + register JSAMPLE invalue; + JSAMPROW outend; + int outrow; + + for (outrow = 0; outrow < cinfo->max_v_samp_factor; outrow++) { + 80115e4: 2300 movs r3, #0 + 80115e6: f8d0 113c ldr.w r1, [r0, #316] ; 0x13c + 80115ea: 4299 cmp r1, r3 + 80115ec: dc00 bgt.n 80115f0 + invalue = *inptr++; /* don't need GETJSAMPLE() here */ + *outptr++ = invalue; + *outptr++ = invalue; + } + } +} + 80115ee: bdf0 pop {r4, r5, r6, r7, pc} + outptr = output_data[outrow]; + 80115f0: f857 1023 ldr.w r1, [r7, r3, lsl #2] + outend = outptr + cinfo->output_width; + 80115f4: 6f04 ldr r4, [r0, #112] ; 0x70 + inptr = input_data[outrow]; + 80115f6: f852 5023 ldr.w r5, [r2, r3, lsl #2] + outend = outptr + cinfo->output_width; + 80115fa: 440c add r4, r1 + while (outptr < outend) { + 80115fc: 42a1 cmp r1, r4 + 80115fe: d301 bcc.n 8011604 + for (outrow = 0; outrow < cinfo->max_v_samp_factor; outrow++) { + 8011600: 3301 adds r3, #1 + 8011602: e7f0 b.n 80115e6 + invalue = *inptr++; /* don't need GETJSAMPLE() here */ + 8011604: f815 6b01 ldrb.w r6, [r5], #1 + *outptr++ = invalue; + 8011608: f801 6b02 strb.w r6, [r1], #2 + *outptr++ = invalue; + 801160c: f801 6c01 strb.w r6, [r1, #-1] + 8011610: e7f4 b.n 80115fc + +08011612 : +{ + 8011612: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8011616: 4605 mov r5, r0 + JSAMPARRAY output_data = *output_data_ptr; + 8011618: 681f ldr r7, [r3, #0] + my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample; + 801161a: f8d0 01d8 ldr.w r0, [r0, #472] ; 0x1d8 +{ + 801161e: b085 sub sp, #20 + h_expand = upsample->h_expand[compptr->component_index]; + 8011620: 684b ldr r3, [r1, #4] + 8011622: 1f16 subs r6, r2, #4 + inrow = outrow = 0; + 8011624: 2400 movs r4, #0 + h_expand = upsample->h_expand[compptr->component_index]; + 8011626: 4403 add r3, r0 + v_expand = upsample->v_expand[compptr->component_index]; + 8011628: f893 8096 ldrb.w r8, [r3, #150] ; 0x96 + h_expand = upsample->h_expand[compptr->component_index]; + 801162c: f893 a08c ldrb.w sl, [r3, #140] ; 0x8c + jcopy_sample_rows(output_data, outrow, output_data, outrow+1, + 8011630: f108 33ff add.w r3, r8, #4294967295 + 8011634: 9303 str r3, [sp, #12] + while (outrow < cinfo->max_v_samp_factor) { + 8011636: f8d5 313c ldr.w r3, [r5, #316] ; 0x13c + 801163a: 42a3 cmp r3, r4 + 801163c: dc02 bgt.n 8011644 +} + 801163e: b005 add sp, #20 + 8011640: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + outptr = output_data[outrow]; + 8011644: f857 3024 ldr.w r3, [r7, r4, lsl #2] + outend = outptr + cinfo->output_width; + 8011648: 6f2a ldr r2, [r5, #112] ; 0x70 + inptr = input_data[inrow]; + 801164a: f856 bf04 ldr.w fp, [r6, #4]! + outend = outptr + cinfo->output_width; + 801164e: eb03 0902 add.w r9, r3, r2 + while (outptr < outend) { + 8011652: 454b cmp r3, r9 + 8011654: d30e bcc.n 8011674 + if (v_expand > 1) { + 8011656: f1b8 0f01 cmp.w r8, #1 + 801165a: dd09 ble.n 8011670 + jcopy_sample_rows(output_data, outrow, output_data, outrow+1, + 801165c: 6f2b ldr r3, [r5, #112] ; 0x70 + 801165e: 463a mov r2, r7 + 8011660: 4621 mov r1, r4 + 8011662: 4638 mov r0, r7 + 8011664: 9301 str r3, [sp, #4] + 8011666: 9b03 ldr r3, [sp, #12] + 8011668: 9300 str r3, [sp, #0] + 801166a: 1c63 adds r3, r4, #1 + 801166c: f007 f91f bl 80188ae + outrow += v_expand; + 8011670: 4444 add r4, r8 + 8011672: e7e0 b.n 8011636 + *outptr++ = invalue; + 8011674: 4618 mov r0, r3 + 8011676: 4652 mov r2, sl + 8011678: f81b 1b01 ldrb.w r1, [fp], #1 + 801167c: f023 f99e bl 80349bc + 8011680: 4603 mov r3, r0 + 8011682: 4453 add r3, sl + 8011684: e7e5 b.n 8011652 + +08011686 : + */ + +METHODDEF(void) +h2v2_upsample (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JSAMPARRAY input_data, JSAMPARRAY * output_data_ptr) +{ + 8011686: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr} + 801168a: 4605 mov r5, r0 + 801168c: 4617 mov r7, r2 + JSAMPARRAY output_data = *output_data_ptr; + 801168e: 681e ldr r6, [r3, #0] + register JSAMPROW inptr, outptr; + register JSAMPLE invalue; + JSAMPROW outend; + int inrow, outrow; + + inrow = outrow = 0; + 8011690: 2400 movs r4, #0 + while (outptr < outend) { + invalue = *inptr++; /* don't need GETJSAMPLE() here */ + *outptr++ = invalue; + *outptr++ = invalue; + } + jcopy_sample_rows(output_data, outrow, output_data, outrow+1, + 8011692: f04f 0801 mov.w r8, #1 + while (outrow < cinfo->max_v_samp_factor) { + 8011696: f8d5 313c ldr.w r3, [r5, #316] ; 0x13c + 801169a: 42a3 cmp r3, r4 + 801169c: dc02 bgt.n 80116a4 + 1, cinfo->output_width); + inrow++; + outrow += 2; + } +} + 801169e: b002 add sp, #8 + 80116a0: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + outptr = output_data[outrow]; + 80116a4: f856 3024 ldr.w r3, [r6, r4, lsl #2] + outend = outptr + cinfo->output_width; + 80116a8: 6f2a ldr r2, [r5, #112] ; 0x70 + inptr = input_data[inrow]; + 80116aa: f857 1014 ldr.w r1, [r7, r4, lsl #1] + outend = outptr + cinfo->output_width; + 80116ae: 441a add r2, r3 + while (outptr < outend) { + 80116b0: 4293 cmp r3, r2 + 80116b2: d30a bcc.n 80116ca + jcopy_sample_rows(output_data, outrow, output_data, outrow+1, + 80116b4: 6f2b ldr r3, [r5, #112] ; 0x70 + 80116b6: 4621 mov r1, r4 + 80116b8: 4632 mov r2, r6 + 80116ba: 4630 mov r0, r6 + 80116bc: e9cd 8300 strd r8, r3, [sp] + 80116c0: 1c63 adds r3, r4, #1 + outrow += 2; + 80116c2: 3402 adds r4, #2 + jcopy_sample_rows(output_data, outrow, output_data, outrow+1, + 80116c4: f007 f8f3 bl 80188ae + outrow += 2; + 80116c8: e7e5 b.n 8011696 + invalue = *inptr++; /* don't need GETJSAMPLE() here */ + 80116ca: f811 0b01 ldrb.w r0, [r1], #1 + *outptr++ = invalue; + 80116ce: f803 0b02 strb.w r0, [r3], #2 + *outptr++ = invalue; + 80116d2: f803 0c01 strb.w r0, [r3, #-1] + 80116d6: e7eb b.n 80116b0 + +080116d8 : + * Module initialization routine for upsampling. + */ + +GLOBAL(void) +jinit_upsampler (j_decompress_ptr cinfo) +{ + 80116d8: e92d 4ff8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} + jpeg_component_info * compptr; + boolean need_buffer; + int h_in_group, v_in_group, h_out_group, v_out_group; + + upsample = (my_upsample_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 80116dc: 6843 ldr r3, [r0, #4] + 80116de: 22a0 movs r2, #160 ; 0xa0 + 80116e0: 2101 movs r1, #1 +{ + 80116e2: 4604 mov r4, r0 + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 80116e4: 681b ldr r3, [r3, #0] + 80116e6: 4798 blx r3 + SIZEOF(my_upsampler)); + cinfo->upsample = (struct jpeg_upsampler *) upsample; + upsample->pub.start_pass = start_pass_upsample; + 80116e8: 4b3f ldr r3, [pc, #252] ; (80117e8 ) + cinfo->upsample = (struct jpeg_upsampler *) upsample; + 80116ea: f8c4 01d8 str.w r0, [r4, #472] ; 0x1d8 + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 80116ee: 4605 mov r5, r0 + upsample->pub.start_pass = start_pass_upsample; + 80116f0: 6003 str r3, [r0, #0] + upsample->pub.upsample = sep_upsample; + 80116f2: 4b3e ldr r3, [pc, #248] ; (80117ec ) + 80116f4: 6043 str r3, [r0, #4] + upsample->pub.need_context_rows = FALSE; /* until we find out differently */ + 80116f6: 2300 movs r3, #0 + 80116f8: 6083 str r3, [r0, #8] + + if (cinfo->CCIR601_sampling) /* this isn't supported */ + 80116fa: f8d4 3130 ldr.w r3, [r4, #304] ; 0x130 + 80116fe: b12b cbz r3, 801170c + ERREXIT(cinfo, JERR_CCIR601_NOTIMPL); + 8011700: 6823 ldr r3, [r4, #0] + 8011702: 221a movs r2, #26 + 8011704: 4620 mov r0, r4 + 8011706: 615a str r2, [r3, #20] + 8011708: 681b ldr r3, [r3, #0] + 801170a: 4798 blx r3 + + /* Verify we can handle the sampling factors, select per-component methods, + * and create storage as needed. + */ + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + 801170c: f105 060c add.w r6, r5, #12 + 8011710: f105 088c add.w r8, r5, #140 ; 0x8c + 8011714: f1c5 25ff rsb r5, r5, #4278255360 ; 0xff00ff00 + 8011718: f8d4 70d8 ldr.w r7, [r4, #216] ; 0xd8 + /* Special case for 2h2v upsampling */ + upsample->methods[ci] = h2v2_upsample; + } else if ((h_out_group % h_in_group) == 0 && + (v_out_group % v_in_group) == 0) { + /* Generic integral-factors upsampling method */ + upsample->methods[ci] = int_upsample; + 801171c: f8df 90dc ldr.w r9, [pc, #220] ; 80117fc + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + 8011720: f505 057f add.w r5, r5, #16711680 ; 0xff0000 + upsample->methods[ci] = h2v2_upsample; + 8011724: f8df a0d8 ldr.w sl, [pc, #216] ; 8011800 + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + 8011728: 3574 adds r5, #116 ; 0x74 + 801172a: eb05 0308 add.w r3, r5, r8 + 801172e: 6a62 ldr r2, [r4, #36] ; 0x24 + 8011730: 429a cmp r2, r3 + 8011732: dc01 bgt.n 8011738 + (JDIMENSION) jround_up((long) cinfo->output_width, + (long) cinfo->max_h_samp_factor), + (JDIMENSION) cinfo->max_v_samp_factor); + } + } +} + 8011734: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} + v_in_group = (compptr->v_samp_factor * compptr->DCT_v_scaled_size) / + 8011738: 6ab8 ldr r0, [r7, #40] ; 0x28 + 801173a: 68fb ldr r3, [r7, #12] + h_in_group = (compptr->h_samp_factor * compptr->DCT_h_scaled_size) / + 801173c: f8d7 e008 ldr.w lr, [r7, #8] + v_in_group = (compptr->v_samp_factor * compptr->DCT_v_scaled_size) / + 8011740: 4343 muls r3, r0 + 8011742: f8d4 0144 ldr.w r0, [r4, #324] ; 0x144 + h_in_group = (compptr->h_samp_factor * compptr->DCT_h_scaled_size) / + 8011746: f8d7 c024 ldr.w ip, [r7, #36] ; 0x24 + cinfo->min_DCT_h_scaled_size; + 801174a: f8d4 1140 ldr.w r1, [r4, #320] ; 0x140 + v_in_group = (compptr->v_samp_factor * compptr->DCT_v_scaled_size) / + 801174e: fb93 f3f0 sdiv r3, r3, r0 + v_out_group = cinfo->max_v_samp_factor; + 8011752: e9d4 b04e ldrd fp, r0, [r4, #312] ; 0x138 + upsample->rowgroup_height[ci] = v_in_group; /* save for use later */ + 8011756: 65b3 str r3, [r6, #88] ; 0x58 + if (! compptr->component_needed) { + 8011758: 6b7a ldr r2, [r7, #52] ; 0x34 + 801175a: b932 cbnz r2, 801176a + upsample->methods[ci] = noop_upsample; + 801175c: 4b24 ldr r3, [pc, #144] ; (80117f0 ) + upsample->methods[ci] = fullsize_upsample; + 801175e: 62b3 str r3, [r6, #40] ; 0x28 + ci++, compptr++) { + 8011760: 3758 adds r7, #88 ; 0x58 + 8011762: 3604 adds r6, #4 + 8011764: f108 0801 add.w r8, r8, #1 + 8011768: e7df b.n 801172a + h_in_group = (compptr->h_samp_factor * compptr->DCT_h_scaled_size) / + 801176a: fb0c f20e mul.w r2, ip, lr + 801176e: fb92 f2f1 sdiv r2, r2, r1 + } else if (h_in_group == h_out_group && v_in_group == v_out_group) { + 8011772: 455a cmp r2, fp + 8011774: d103 bne.n 801177e + 8011776: 4283 cmp r3, r0 + 8011778: d101 bne.n 801177e + upsample->methods[ci] = fullsize_upsample; + 801177a: 4b1e ldr r3, [pc, #120] ; (80117f4 ) + 801177c: e7ef b.n 801175e + } else if (h_in_group * 2 == h_out_group && + 801177e: ebbb 0f42 cmp.w fp, r2, lsl #1 + 8011782: d119 bne.n 80117b8 + 8011784: 4283 cmp r3, r0 + 8011786: d111 bne.n 80117ac + upsample->methods[ci] = h2v1_upsample; + 8011788: 4b1b ldr r3, [pc, #108] ; (80117f8 ) + 801178a: 62b3 str r3, [r6, #40] ; 0x28 + upsample->color_buf[ci] = (*cinfo->mem->alloc_sarray) + 801178c: 6863 ldr r3, [r4, #4] + (JDIMENSION) jround_up((long) cinfo->output_width, + 801178e: f8d4 1138 ldr.w r1, [r4, #312] ; 0x138 + 8011792: 6f20 ldr r0, [r4, #112] ; 0x70 + upsample->color_buf[ci] = (*cinfo->mem->alloc_sarray) + 8011794: f8d3 b008 ldr.w fp, [r3, #8] + (JDIMENSION) jround_up((long) cinfo->output_width, + 8011798: f007 f881 bl 801889e + upsample->color_buf[ci] = (*cinfo->mem->alloc_sarray) + 801179c: f8d4 313c ldr.w r3, [r4, #316] ; 0x13c + (JDIMENSION) jround_up((long) cinfo->output_width, + 80117a0: 4602 mov r2, r0 + upsample->color_buf[ci] = (*cinfo->mem->alloc_sarray) + 80117a2: 2101 movs r1, #1 + 80117a4: 4620 mov r0, r4 + 80117a6: 47d8 blx fp + 80117a8: 6030 str r0, [r6, #0] + 80117aa: e7d9 b.n 8011760 + } else if (h_in_group * 2 == h_out_group && + 80117ac: ebb0 0f43 cmp.w r0, r3, lsl #1 + 80117b0: d102 bne.n 80117b8 + upsample->methods[ci] = h2v2_upsample; + 80117b2: f8c6 a028 str.w sl, [r6, #40] ; 0x28 + if (need_buffer) { + 80117b6: e7e9 b.n 801178c + } else if ((h_out_group % h_in_group) == 0 && + 80117b8: fb9b f1f2 sdiv r1, fp, r2 + 80117bc: fb02 b211 mls r2, r2, r1, fp + 80117c0: b95a cbnz r2, 80117da + (v_out_group % v_in_group) == 0) { + 80117c2: fb90 f2f3 sdiv r2, r0, r3 + 80117c6: fb03 0312 mls r3, r3, r2, r0 + } else if ((h_out_group % h_in_group) == 0 && + 80117ca: b933 cbnz r3, 80117da + upsample->methods[ci] = int_upsample; + 80117cc: f8c6 9028 str.w r9, [r6, #40] ; 0x28 + upsample->h_expand[ci] = (UINT8) (h_out_group / h_in_group); + 80117d0: f888 1000 strb.w r1, [r8] + upsample->v_expand[ci] = (UINT8) (v_out_group / v_in_group); + 80117d4: f888 200a strb.w r2, [r8, #10] + if (need_buffer) { + 80117d8: e7d8 b.n 801178c + ERREXIT(cinfo, JERR_FRACT_SAMPLE_NOTIMPL); + 80117da: 6823 ldr r3, [r4, #0] + 80117dc: 2227 movs r2, #39 ; 0x27 + 80117de: 4620 mov r0, r4 + 80117e0: 615a str r2, [r3, #20] + 80117e2: 681b ldr r3, [r3, #0] + 80117e4: 4798 blx r3 + if (need_buffer) { + 80117e6: e7d1 b.n 801178c + 80117e8: 08011509 .word 0x08011509 + 80117ec: 08011519 .word 0x08011519 + 80117f0: 080115db .word 0x080115db + 80117f4: 080115d7 .word 0x080115d7 + 80117f8: 080115e1 .word 0x080115e1 + 80117fc: 08011613 .word 0x08011613 + 8011800: 08011687 .word 0x08011687 + +08011804 : + * not just not use this routine. + */ + +METHODDEF(void) +output_message (j_common_ptr cinfo) +{ + 8011804: b500 push {lr} + char buffer[JMSG_LENGTH_MAX]; + + /* Create the message */ + (*cinfo->err->format_message) (cinfo, buffer); + 8011806: 6803 ldr r3, [r0, #0] +{ + 8011808: b0b3 sub sp, #204 ; 0xcc + (*cinfo->err->format_message) (cinfo, buffer); + 801180a: 68db ldr r3, [r3, #12] + 801180c: 4669 mov r1, sp + 801180e: 4798 blx r3 +#else + /* Send it to stderr, adding a newline */ +// fprintf(stderr, "%s\n", buffer); +// printf( "%s\n", buffer); +#endif +} + 8011810: b033 add sp, #204 ; 0xcc + 8011812: f85d fb04 ldr.w pc, [sp], #4 + +08011816 : +METHODDEF(void) +emit_message (j_common_ptr cinfo, int msg_level) +{ + struct jpeg_error_mgr * err = cinfo->err; + + if (msg_level < 0) { + 8011816: 2900 cmp r1, #0 +{ + 8011818: 4603 mov r3, r0 + 801181a: b510 push {r4, lr} + struct jpeg_error_mgr * err = cinfo->err; + 801181c: 6804 ldr r4, [r0, #0] + if (msg_level < 0) { + 801181e: da0b bge.n 8011838 + /* It's a warning message. Since corrupt files may generate many warnings, + * the policy implemented here is to show only the first warning, + * unless trace_level >= 3. + */ + if (err->num_warnings == 0 || err->trace_level >= 3) + 8011820: 6ee2 ldr r2, [r4, #108] ; 0x6c + 8011822: b112 cbz r2, 801182a + 8011824: 6ea2 ldr r2, [r4, #104] ; 0x68 + 8011826: 2a02 cmp r2, #2 + 8011828: dd02 ble.n 8011830 + (*err->output_message) (cinfo); + 801182a: 68a2 ldr r2, [r4, #8] + 801182c: 4618 mov r0, r3 + 801182e: 4790 blx r2 + /* Always count warnings in num_warnings. */ + err->num_warnings++; + 8011830: 6ee3 ldr r3, [r4, #108] ; 0x6c + 8011832: 3301 adds r3, #1 + 8011834: 66e3 str r3, [r4, #108] ; 0x6c + } else { + /* It's a trace message. Show it if trace_level >= msg_level. */ + if (err->trace_level >= msg_level) + (*err->output_message) (cinfo); + } +} + 8011836: bd10 pop {r4, pc} + if (err->trace_level >= msg_level) + 8011838: 6ea3 ldr r3, [r4, #104] ; 0x68 + 801183a: 428b cmp r3, r1 + 801183c: dbfb blt.n 8011836 + (*err->output_message) (cinfo); + 801183e: 68a3 ldr r3, [r4, #8] +} + 8011840: e8bd 4010 ldmia.w sp!, {r4, lr} + (*err->output_message) (cinfo); + 8011844: 4718 bx r3 + +08011846 : + */ + +METHODDEF(void) +reset_error_mgr (j_common_ptr cinfo) +{ + cinfo->err->num_warnings = 0; + 8011846: 6803 ldr r3, [r0, #0] + 8011848: 2200 movs r2, #0 + 801184a: 66da str r2, [r3, #108] ; 0x6c + /* trace_level is not reset since it is an application-supplied parameter */ + cinfo->err->msg_code = 0; /* may be useful as a flag for "no error" */ + 801184c: 615a str r2, [r3, #20] +} + 801184e: 4770 bx lr + +08011850 : +{ + 8011850: 4603 mov r3, r0 + 8011852: 4608 mov r0, r1 + struct jpeg_error_mgr * err = cinfo->err; + 8011854: 681a ldr r2, [r3, #0] + int msg_code = err->msg_code; + 8011856: 6953 ldr r3, [r2, #20] + if (msg_code > 0 && msg_code <= err->last_jpeg_message) { + 8011858: 2b00 cmp r3, #0 +{ + 801185a: b530 push {r4, r5, lr} + 801185c: b087 sub sp, #28 + if (msg_code > 0 && msg_code <= err->last_jpeg_message) { + 801185e: dd1f ble.n 80118a0 + 8011860: 6f51 ldr r1, [r2, #116] ; 0x74 + 8011862: 4299 cmp r1, r3 + 8011864: db1c blt.n 80118a0 + msgtext = err->jpeg_message_table[msg_code]; + 8011866: 6f11 ldr r1, [r2, #112] ; 0x70 + 8011868: f851 1023 ldr.w r1, [r1, r3, lsl #2] + if (msgtext == NULL) { + 801186c: b911 cbnz r1, 8011874 + err->msg_parm.i[0] = msg_code; + 801186e: 6193 str r3, [r2, #24] + msgtext = err->jpeg_message_table[0]; + 8011870: 6f13 ldr r3, [r2, #112] ; 0x70 + 8011872: 6819 ldr r1, [r3, #0] + msgptr = msgtext; + 8011874: 460b mov r3, r1 + while ((ch = *msgptr++) != '\0') { + 8011876: f813 4b01 ldrb.w r4, [r3], #1 + 801187a: b9fc cbnz r4, 80118bc + sprintf(buffer, msgtext, + 801187c: 6b53 ldr r3, [r2, #52] ; 0x34 + 801187e: 9305 str r3, [sp, #20] + 8011880: 6b13 ldr r3, [r2, #48] ; 0x30 + 8011882: 9304 str r3, [sp, #16] + 8011884: 6ad3 ldr r3, [r2, #44] ; 0x2c + 8011886: 9303 str r3, [sp, #12] + 8011888: 6a93 ldr r3, [r2, #40] ; 0x28 + 801188a: 9302 str r3, [sp, #8] + 801188c: 6a53 ldr r3, [r2, #36] ; 0x24 + 801188e: 9301 str r3, [sp, #4] + 8011890: 6a13 ldr r3, [r2, #32] + 8011892: 9300 str r3, [sp, #0] + 8011894: e9d2 2306 ldrd r2, r3, [r2, #24] + 8011898: f022 ff6e bl 8034778 +} + 801189c: b007 add sp, #28 + 801189e: bd30 pop {r4, r5, pc} + } else if (err->addon_message_table != NULL && + 80118a0: 6f94 ldr r4, [r2, #120] ; 0x78 + 80118a2: 2c00 cmp r4, #0 + 80118a4: d0e3 beq.n 801186e + msg_code >= err->first_addon_message && + 80118a6: 6fd1 ldr r1, [r2, #124] ; 0x7c + } else if (err->addon_message_table != NULL && + 80118a8: 4299 cmp r1, r3 + 80118aa: dce0 bgt.n 801186e + msg_code >= err->first_addon_message && + 80118ac: f8d2 5080 ldr.w r5, [r2, #128] ; 0x80 + 80118b0: 429d cmp r5, r3 + 80118b2: dbdc blt.n 801186e + msgtext = err->addon_message_table[msg_code - err->first_addon_message]; + 80118b4: 1a59 subs r1, r3, r1 + 80118b6: f854 1021 ldr.w r1, [r4, r1, lsl #2] + 80118ba: e7d7 b.n 801186c + if (ch == '%') { + 80118bc: 2c25 cmp r4, #37 ; 0x25 + 80118be: d1da bne.n 8011876 + if (*msgptr == 's') isstring = TRUE; + 80118c0: 781b ldrb r3, [r3, #0] + 80118c2: 2b73 cmp r3, #115 ; 0x73 + 80118c4: d1da bne.n 801187c + sprintf(buffer, msgtext, err->msg_parm.s); + 80118c6: 3218 adds r2, #24 +} + 80118c8: b007 add sp, #28 + 80118ca: e8bd 4030 ldmia.w sp!, {r4, r5, lr} + sprintf(buffer, msgtext, err->msg_parm.s); + 80118ce: f022 bf53 b.w 8034778 + +080118d2 : + (*cinfo->err->output_message) (cinfo); + 80118d2: 6803 ldr r3, [r0, #0] +{ + 80118d4: b510 push {r4, lr} + 80118d6: 4604 mov r4, r0 + (*cinfo->err->output_message) (cinfo); + 80118d8: 689b ldr r3, [r3, #8] + 80118da: 4798 blx r3 + jpeg_destroy(cinfo); + 80118dc: 4620 mov r0, r4 +} + 80118de: e8bd 4010 ldmia.w sp!, {r4, lr} + jpeg_destroy(cinfo); + 80118e2: f7f9 bf31 b.w 800b748 + ... + +080118e8 : + */ + +GLOBAL(struct jpeg_error_mgr *) +jpeg_std_error (struct jpeg_error_mgr * err) +{ + err->error_exit = error_exit; + 80118e8: 4a0a ldr r2, [pc, #40] ; (8011914 ) + err->trace_level = 0; /* default = no tracing */ + err->num_warnings = 0; /* no warnings emitted yet */ + err->msg_code = 0; /* may be useful as a flag for "no error" */ + + /* Initialize message table pointers */ + err->jpeg_message_table = jpeg_std_message_table; + 80118ea: 490b ldr r1, [pc, #44] ; (8011918 ) + err->error_exit = error_exit; + 80118ec: 6002 str r2, [r0, #0] + err->emit_message = emit_message; + 80118ee: 4a0b ldr r2, [pc, #44] ; (801191c ) + err->jpeg_message_table = jpeg_std_message_table; + 80118f0: 6701 str r1, [r0, #112] ; 0x70 + err->last_jpeg_message = (int) JMSG_LASTMSGCODE - 1; + 80118f2: 217e movs r1, #126 ; 0x7e + err->emit_message = emit_message; + 80118f4: 6042 str r2, [r0, #4] + err->output_message = output_message; + 80118f6: 4a0a ldr r2, [pc, #40] ; (8011920 ) + 80118f8: 6082 str r2, [r0, #8] + err->format_message = format_message; + 80118fa: 4a0a ldr r2, [pc, #40] ; (8011924 ) + 80118fc: 60c2 str r2, [r0, #12] + err->reset_error_mgr = reset_error_mgr; + 80118fe: 4a0a ldr r2, [pc, #40] ; (8011928 ) + 8011900: 6102 str r2, [r0, #16] + err->trace_level = 0; /* default = no tracing */ + 8011902: 2200 movs r2, #0 + err->num_warnings = 0; /* no warnings emitted yet */ + 8011904: e9c0 221a strd r2, r2, [r0, #104] ; 0x68 + err->msg_code = 0; /* may be useful as a flag for "no error" */ + 8011908: 6142 str r2, [r0, #20] + + err->addon_message_table = NULL; + 801190a: e9c0 121d strd r1, r2, [r0, #116] ; 0x74 + err->first_addon_message = 0; /* for safety */ + err->last_addon_message = 0; + 801190e: e9c0 221f strd r2, r2, [r0, #124] ; 0x7c + + return err; +} + 8011912: 4770 bx lr + 8011914: 080118d3 .word 0x080118d3 + 8011918: 08039544 .word 0x08039544 + 801191c: 08011817 .word 0x08011817 + 8011920: 08011805 .word 0x08011805 + 8011924: 08011851 .word 0x08011851 + 8011928: 08011847 .word 0x08011847 + +0801192c : + +GLOBAL(void) +jpeg_idct_float (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + 801192c: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + FAST_FLOAT workspace[DCTSIZE2]; /* buffers data between passes */ + + /* Pass 1: process columns from input, store into work array. */ + + inptr = coef_block; + quantptr = (FLOAT_MULT_TYPE *) compptr->dct_table; + 8011930: f8d1 c054 ldr.w ip, [r1, #84] ; 0x54 +{ + 8011934: b0c1 sub sp, #260 ; 0x104 + JSAMPLE *range_limit = cinfo->sample_range_limit; + 8011936: f8d0 614c ldr.w r6, [r0, #332] ; 0x14c + wsptr = workspace; + for (ctr = DCTSIZE; ctr > 0; ctr--) { + 801193a: 3a02 subs r2, #2 + 801193c: f10c 0a20 add.w sl, ip, #32 + wsptr = workspace; + 8011940: 466c mov r4, sp + + tmp10 = tmp0 + tmp2; /* phase 3 */ + tmp11 = tmp0 - tmp2; + + tmp13 = tmp1 + tmp3; /* phases 5-3 */ + tmp12 = (tmp1 - tmp3) * ((FAST_FLOAT) 1.414213562) - tmp13; /* 2*c4 */ + 8011942: ed9f 5abc vldr s10, [pc, #752] ; 8011c34 + + tmp7 = z11 + z13; /* phase 5 */ + tmp11 = (z11 - z13) * ((FAST_FLOAT) 1.414213562); /* 2*c4 */ + + z5 = (z10 + z12) * ((FAST_FLOAT) 1.847759065); /* 2*c2 */ + tmp10 = z5 - z12 * ((FAST_FLOAT) 1.082392200); /* 2*(c2-c6) */ + 8011946: ed9f 4abc vldr s8, [pc, #752] ; 8011c38 + 801194a: eddf 4abc vldr s9, [pc, #752] ; 8011c3c + tmp12 = z5 - z10 * ((FAST_FLOAT) 2.613125930); /* 2*(c2+c6) */ + 801194e: eddf 3abc vldr s7, [pc, #752] ; 8011c40 + if (inptr[DCTSIZE*1] == 0 && inptr[DCTSIZE*2] == 0 && + 8011952: f9b2 e012 ldrsh.w lr, [r2, #18] + wsptr++; + 8011956: 3404 adds r4, #4 + if (inptr[DCTSIZE*1] == 0 && inptr[DCTSIZE*2] == 0 && + 8011958: f9b2 9022 ldrsh.w r9, [r2, #34] ; 0x22 + inptr[DCTSIZE*3] == 0 && inptr[DCTSIZE*4] == 0 && + 801195c: f9b2 8032 ldrsh.w r8, [r2, #50] ; 0x32 + 8011960: f9b2 7042 ldrsh.w r7, [r2, #66] ; 0x42 + inptr[DCTSIZE*5] == 0 && inptr[DCTSIZE*6] == 0 && + 8011964: f9b2 1052 ldrsh.w r1, [r2, #82] ; 0x52 + 8011968: f9b2 5062 ldrsh.w r5, [r2, #98] ; 0x62 + inptr[DCTSIZE*7] == 0) { + 801196c: f9b2 0072 ldrsh.w r0, [r2, #114] ; 0x72 + FAST_FLOAT dcval = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 8011970: f932 bf02 ldrsh.w fp, [r2, #2]! + 8011974: ecbc 7a01 vldmia ip!, {s14} + 8011978: ee07 ba90 vmov s15, fp + inptr[DCTSIZE*5] == 0 && inptr[DCTSIZE*6] == 0 && + 801197c: ea4e 0b09 orr.w fp, lr, r9 + 8011980: ea48 0b0b orr.w fp, r8, fp + FAST_FLOAT dcval = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 8011984: eef8 7ae7 vcvt.f32.s32 s15, s15 + inptr[DCTSIZE*5] == 0 && inptr[DCTSIZE*6] == 0 && + 8011988: ea47 0b0b orr.w fp, r7, fp + FAST_FLOAT dcval = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 801198c: ee67 7a87 vmul.f32 s15, s15, s14 + inptr[DCTSIZE*5] == 0 && inptr[DCTSIZE*6] == 0 && + 8011990: ea41 0b0b orr.w fp, r1, fp + 8011994: ea45 0b0b orr.w fp, r5, fp + 8011998: ea50 0b0b orrs.w fp, r0, fp + 801199c: f040 80bf bne.w 8011b1e + wsptr[DCTSIZE*0] = dcval; + 80119a0: ed44 7a01 vstr s15, [r4, #-4] + wsptr[DCTSIZE*1] = dcval; + 80119a4: edc4 7a07 vstr s15, [r4, #28] + wsptr[DCTSIZE*2] = dcval; + 80119a8: edc4 7a0f vstr s15, [r4, #60] ; 0x3c + wsptr[DCTSIZE*3] = dcval; + 80119ac: edc4 7a17 vstr s15, [r4, #92] ; 0x5c + wsptr[DCTSIZE*4] = dcval; + 80119b0: edc4 7a1f vstr s15, [r4, #124] ; 0x7c + wsptr[DCTSIZE*5] = dcval; + 80119b4: edc4 7a27 vstr s15, [r4, #156] ; 0x9c + wsptr[DCTSIZE*6] = dcval; + 80119b8: edc4 7a2f vstr s15, [r4, #188] ; 0xbc + wsptr[DCTSIZE*7] = dcval; + 80119bc: edc4 7a37 vstr s15, [r4, #220] ; 0xdc + for (ctr = DCTSIZE; ctr > 0; ctr--) { + 80119c0: 45e2 cmp sl, ip + 80119c2: d1c6 bne.n 8011952 + 80119c4: 1f1c subs r4, r3, #4 + wsptr++; + } + + /* Pass 2: process rows from work array, store into output array. */ + + wsptr = workspace; + 80119c6: 4669 mov r1, sp + 80119c8: 331c adds r3, #28 + */ + + /* Even part */ + + /* Apply signed->unsigned and prepare float->int conversion */ + z5 = wsptr[0] + ((FAST_FLOAT) CENTERJSAMPLE + (FAST_FLOAT) 0.5); + 80119ca: eddf 2a9e vldr s5, [pc, #632] ; 8011c44 + tmp10 = z5 + wsptr[4]; + tmp11 = z5 - wsptr[4]; + + tmp13 = wsptr[2] + wsptr[6]; + tmp12 = (wsptr[2] - wsptr[6]) * ((FAST_FLOAT) 1.414213562) - tmp13; + 80119ce: eddf 4a99 vldr s9, [pc, #612] ; 8011c34 + + tmp7 = z11 + z13; + tmp11 = (z11 - z13) * ((FAST_FLOAT) 1.414213562); + + z5 = (z10 + z12) * ((FAST_FLOAT) 1.847759065); /* 2*c2 */ + tmp10 = z5 - z12 * ((FAST_FLOAT) 1.082392200); /* 2*(c2-c6) */ + 80119d2: ed9f 3a99 vldr s6, [pc, #612] ; 8011c38 + 80119d6: ed9f 4a99 vldr s8, [pc, #612] ; 8011c3c + tmp12 = z5 - z10 * ((FAST_FLOAT) 2.613125930); /* 2*(c2+c6) */ + 80119da: eddf 3a99 vldr s7, [pc, #612] ; 8011c40 + z5 = wsptr[0] + ((FAST_FLOAT) CENTERJSAMPLE + (FAST_FLOAT) 0.5); + 80119de: edd1 6a00 vldr s13, [r1] + outptr[2] = range_limit[((int) (tmp2 + tmp5)) & RANGE_MASK]; + outptr[5] = range_limit[((int) (tmp2 - tmp5)) & RANGE_MASK]; + outptr[3] = range_limit[((int) (tmp3 + tmp4)) & RANGE_MASK]; + outptr[4] = range_limit[((int) (tmp3 - tmp4)) & RANGE_MASK]; + + wsptr += DCTSIZE; /* advance pointer to next row */ + 80119e2: 3120 adds r1, #32 + tmp10 = z5 + wsptr[4]; + 80119e4: ed11 7a04 vldr s14, [r1, #-16] + z5 = wsptr[0] + ((FAST_FLOAT) CENTERJSAMPLE + (FAST_FLOAT) 0.5); + 80119e8: ee76 6aa2 vadd.f32 s13, s13, s5 + tmp13 = wsptr[2] + wsptr[6]; + 80119ec: ed51 5a02 vldr s11, [r1, #-8] + z11 = wsptr[1] + wsptr[7]; + 80119f0: ed11 1a01 vldr s2, [r1, #-4] + outptr = output_buf[ctr] + output_col; + 80119f4: f854 5f04 ldr.w r5, [r4, #4]! + tmp10 = z5 + wsptr[4]; + 80119f8: ee77 7a26 vadd.f32 s15, s14, s13 + outptr = output_buf[ctr] + output_col; + 80119fc: 9a4a ldr r2, [sp, #296] ; 0x128 + tmp11 = z5 - wsptr[4]; + 80119fe: ee76 6ac7 vsub.f32 s13, s13, s14 + tmp13 = wsptr[2] + wsptr[6]; + 8011a02: ed11 7a06 vldr s14, [r1, #-24] ; 0xffffffe8 + outptr = output_buf[ctr] + output_col; + 8011a06: 18a8 adds r0, r5, r2 + outptr[0] = range_limit[((int) (tmp0 + tmp7)) & RANGE_MASK]; + 8011a08: 9f4a ldr r7, [sp, #296] ; 0x128 + tmp13 = wsptr[2] + wsptr[6]; + 8011a0a: ee37 6a25 vadd.f32 s12, s14, s11 + for (ctr = 0; ctr < DCTSIZE; ctr++) { + 8011a0e: 42a3 cmp r3, r4 + tmp12 = (wsptr[2] - wsptr[6]) * ((FAST_FLOAT) 1.414213562) - tmp13; + 8011a10: ee37 7a65 vsub.f32 s14, s14, s11 + 8011a14: eeb0 2a46 vmov.f32 s4, s12 + tmp0 = tmp10 + tmp13; + 8011a18: ee77 5a86 vadd.f32 s11, s15, s12 + tmp3 = tmp10 - tmp13; + 8011a1c: ee37 5ac6 vsub.f32 s10, s15, s12 + z13 = wsptr[5] + wsptr[3]; + 8011a20: ed51 7a03 vldr s15, [r1, #-12] + tmp12 = (wsptr[2] - wsptr[6]) * ((FAST_FLOAT) 1.414213562) - tmp13; + 8011a24: ee97 2a24 vfnms.f32 s4, s14, s9 + z13 = wsptr[5] + wsptr[3]; + 8011a28: ed11 7a05 vldr s14, [r1, #-20] ; 0xffffffec + 8011a2c: ee77 1a87 vadd.f32 s3, s15, s14 + z10 = wsptr[5] - wsptr[3]; + 8011a30: ee77 7ac7 vsub.f32 s15, s15, s14 + z11 = wsptr[1] + wsptr[7]; + 8011a34: ed11 7a07 vldr s14, [r1, #-28] ; 0xffffffe4 + tmp1 = tmp11 + tmp12; + 8011a38: ee36 6a82 vadd.f32 s12, s13, s4 + tmp2 = tmp11 - tmp12; + 8011a3c: ee76 6ac2 vsub.f32 s13, s13, s4 + z11 = wsptr[1] + wsptr[7]; + 8011a40: ee37 2a01 vadd.f32 s4, s14, s2 + z12 = wsptr[1] - wsptr[7]; + 8011a44: ee37 7a41 vsub.f32 s14, s14, s2 + tmp7 = z11 + z13; + 8011a48: ee31 1a82 vadd.f32 s2, s3, s4 + tmp11 = (z11 - z13) * ((FAST_FLOAT) 1.414213562); + 8011a4c: ee32 2a61 vsub.f32 s4, s4, s3 + z5 = (z10 + z12) * ((FAST_FLOAT) 1.847759065); /* 2*c2 */ + 8011a50: ee77 1a87 vadd.f32 s3, s15, s14 + tmp12 = z5 - z10 * ((FAST_FLOAT) 2.613125930); /* 2*(c2+c6) */ + 8011a54: ee63 7ae7 vnmul.f32 s15, s7, s15 + tmp10 = z5 - z12 * ((FAST_FLOAT) 1.082392200); /* 2*(c2-c6) */ + 8011a58: ee23 7a47 vnmul.f32 s14, s6, s14 + tmp12 = z5 - z10 * ((FAST_FLOAT) 2.613125930); /* 2*(c2+c6) */ + 8011a5c: eee1 7a84 vfma.f32 s15, s3, s8 + tmp10 = z5 - z12 * ((FAST_FLOAT) 1.082392200); /* 2*(c2-c6) */ + 8011a60: eea1 7a84 vfma.f32 s14, s3, s8 + tmp6 = tmp12 - tmp7; + 8011a64: ee77 7ac1 vsub.f32 s15, s15, s2 + tmp5 = tmp11 - tmp6; + 8011a68: eef0 1a67 vmov.f32 s3, s15 + 8011a6c: eed2 1a24 vfnms.f32 s3, s4, s9 + outptr[0] = range_limit[((int) (tmp0 + tmp7)) & RANGE_MASK]; + 8011a70: ee35 2a81 vadd.f32 s4, s11, s2 + outptr[7] = range_limit[((int) (tmp0 - tmp7)) & RANGE_MASK]; + 8011a74: ee75 5ac1 vsub.f32 s11, s11, s2 + outptr[0] = range_limit[((int) (tmp0 + tmp7)) & RANGE_MASK]; + 8011a78: eebd 2ac2 vcvt.s32.f32 s4, s4 + outptr[7] = range_limit[((int) (tmp0 - tmp7)) & RANGE_MASK]; + 8011a7c: eefd 5ae5 vcvt.s32.f32 s11, s11 + tmp4 = tmp10 - tmp5; + 8011a80: ee37 7a61 vsub.f32 s14, s14, s3 + outptr[0] = range_limit[((int) (tmp0 + tmp7)) & RANGE_MASK]; + 8011a84: ee12 2a10 vmov r2, s4 + 8011a88: f3c2 0209 ubfx r2, r2, #0, #10 + 8011a8c: 5cb2 ldrb r2, [r6, r2] + 8011a8e: 55ea strb r2, [r5, r7] + outptr[7] = range_limit[((int) (tmp0 - tmp7)) & RANGE_MASK]; + 8011a90: ee15 2a90 vmov r2, s11 + outptr[1] = range_limit[((int) (tmp1 + tmp6)) & RANGE_MASK]; + 8011a94: ee76 5a27 vadd.f32 s11, s12, s15 + outptr[7] = range_limit[((int) (tmp0 - tmp7)) & RANGE_MASK]; + 8011a98: f3c2 0209 ubfx r2, r2, #0, #10 + outptr[6] = range_limit[((int) (tmp1 - tmp6)) & RANGE_MASK]; + 8011a9c: ee36 6a67 vsub.f32 s12, s12, s15 + outptr[1] = range_limit[((int) (tmp1 + tmp6)) & RANGE_MASK]; + 8011aa0: eefd 5ae5 vcvt.s32.f32 s11, s11 + outptr[7] = range_limit[((int) (tmp0 - tmp7)) & RANGE_MASK]; + 8011aa4: 5cb2 ldrb r2, [r6, r2] + outptr[6] = range_limit[((int) (tmp1 - tmp6)) & RANGE_MASK]; + 8011aa6: eefd 7ac6 vcvt.s32.f32 s15, s12 + outptr[7] = range_limit[((int) (tmp0 - tmp7)) & RANGE_MASK]; + 8011aaa: 71c2 strb r2, [r0, #7] + outptr[1] = range_limit[((int) (tmp1 + tmp6)) & RANGE_MASK]; + 8011aac: ee15 2a90 vmov r2, s11 + 8011ab0: f3c2 0209 ubfx r2, r2, #0, #10 + 8011ab4: 5cb2 ldrb r2, [r6, r2] + 8011ab6: 7042 strb r2, [r0, #1] + outptr[6] = range_limit[((int) (tmp1 - tmp6)) & RANGE_MASK]; + 8011ab8: ee17 2a90 vmov r2, s15 + outptr[2] = range_limit[((int) (tmp2 + tmp5)) & RANGE_MASK]; + 8011abc: ee76 7aa1 vadd.f32 s15, s13, s3 + outptr[6] = range_limit[((int) (tmp1 - tmp6)) & RANGE_MASK]; + 8011ac0: f3c2 0209 ubfx r2, r2, #0, #10 + outptr[5] = range_limit[((int) (tmp2 - tmp5)) & RANGE_MASK]; + 8011ac4: ee76 6ae1 vsub.f32 s13, s13, s3 + outptr[2] = range_limit[((int) (tmp2 + tmp5)) & RANGE_MASK]; + 8011ac8: eefd 7ae7 vcvt.s32.f32 s15, s15 + outptr[6] = range_limit[((int) (tmp1 - tmp6)) & RANGE_MASK]; + 8011acc: 5cb2 ldrb r2, [r6, r2] + 8011ace: 7182 strb r2, [r0, #6] + outptr[2] = range_limit[((int) (tmp2 + tmp5)) & RANGE_MASK]; + 8011ad0: ee17 2a90 vmov r2, s15 + outptr[5] = range_limit[((int) (tmp2 - tmp5)) & RANGE_MASK]; + 8011ad4: eefd 7ae6 vcvt.s32.f32 s15, s13 + outptr[2] = range_limit[((int) (tmp2 + tmp5)) & RANGE_MASK]; + 8011ad8: f3c2 0209 ubfx r2, r2, #0, #10 + 8011adc: 5cb2 ldrb r2, [r6, r2] + 8011ade: 7082 strb r2, [r0, #2] + outptr[5] = range_limit[((int) (tmp2 - tmp5)) & RANGE_MASK]; + 8011ae0: ee17 2a90 vmov r2, s15 + outptr[3] = range_limit[((int) (tmp3 + tmp4)) & RANGE_MASK]; + 8011ae4: ee75 7a07 vadd.f32 s15, s10, s14 + outptr[5] = range_limit[((int) (tmp2 - tmp5)) & RANGE_MASK]; + 8011ae8: f3c2 0209 ubfx r2, r2, #0, #10 + outptr[3] = range_limit[((int) (tmp3 + tmp4)) & RANGE_MASK]; + 8011aec: eefd 7ae7 vcvt.s32.f32 s15, s15 + outptr[5] = range_limit[((int) (tmp2 - tmp5)) & RANGE_MASK]; + 8011af0: 5cb2 ldrb r2, [r6, r2] + 8011af2: 7142 strb r2, [r0, #5] + outptr[3] = range_limit[((int) (tmp3 + tmp4)) & RANGE_MASK]; + 8011af4: ee17 2a90 vmov r2, s15 + outptr[4] = range_limit[((int) (tmp3 - tmp4)) & RANGE_MASK]; + 8011af8: ee75 7a47 vsub.f32 s15, s10, s14 + outptr[3] = range_limit[((int) (tmp3 + tmp4)) & RANGE_MASK]; + 8011afc: f3c2 0209 ubfx r2, r2, #0, #10 + outptr[4] = range_limit[((int) (tmp3 - tmp4)) & RANGE_MASK]; + 8011b00: eefd 7ae7 vcvt.s32.f32 s15, s15 + outptr[3] = range_limit[((int) (tmp3 + tmp4)) & RANGE_MASK]; + 8011b04: 5cb2 ldrb r2, [r6, r2] + 8011b06: 70c2 strb r2, [r0, #3] + outptr[4] = range_limit[((int) (tmp3 - tmp4)) & RANGE_MASK]; + 8011b08: ee17 2a90 vmov r2, s15 + 8011b0c: f3c2 0209 ubfx r2, r2, #0, #10 + 8011b10: 5cb2 ldrb r2, [r6, r2] + 8011b12: 7102 strb r2, [r0, #4] + for (ctr = 0; ctr < DCTSIZE; ctr++) { + 8011b14: f47f af63 bne.w 80119de + } +} + 8011b18: b041 add sp, #260 ; 0x104 + 8011b1a: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + tmp1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + 8011b1e: ee07 9a10 vmov s14, r9 + tmp3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + 8011b22: ed9c 3a2f vldr s6, [ip, #188] ; 0xbc + tmp2 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + 8011b26: eddc 2a1f vldr s5, [ip, #124] ; 0x7c + tmp1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + 8011b2a: eef8 6ac7 vcvt.f32.s32 s13, s14 + tmp2 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + 8011b2e: ee07 7a10 vmov s14, r7 + tmp1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + 8011b32: eddc 5a0f vldr s11, [ip, #60] ; 0x3c + tmp2 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + 8011b36: eeb8 6ac7 vcvt.f32.s32 s12, s14 + tmp3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + 8011b3a: ee07 5a10 vmov s14, r5 + tmp7 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + 8011b3e: ed9c 1a37 vldr s2, [ip, #220] ; 0xdc + tmp3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + 8011b42: eeb8 7ac7 vcvt.f32.s32 s14, s14 + tmp4 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 8011b46: eddc 1a07 vldr s3, [ip, #28] + tmp5 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + 8011b4a: eddc 0a17 vldr s1, [ip, #92] ; 0x5c + tmp3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + 8011b4e: ee27 7a03 vmul.f32 s14, s14, s6 + tmp10 = tmp0 + tmp2; /* phase 3 */ + 8011b52: eeb0 3a67 vmov.f32 s6, s15 + tmp11 = tmp0 - tmp2; + 8011b56: eee6 7a62 vfms.f32 s15, s12, s5 + tmp10 = tmp0 + tmp2; /* phase 3 */ + 8011b5a: eea6 3a22 vfma.f32 s6, s12, s5 + tmp13 = tmp1 + tmp3; /* phases 5-3 */ + 8011b5e: eeb0 6a47 vmov.f32 s12, s14 + tmp12 = (tmp1 - tmp3) * ((FAST_FLOAT) 1.414213562) - tmp13; /* 2*c4 */ + 8011b62: ee96 7aa5 vfnms.f32 s14, s13, s11 + tmp13 = tmp1 + tmp3; /* phases 5-3 */ + 8011b66: eea6 6aa5 vfma.f32 s12, s13, s11 + tmp12 = (tmp1 - tmp3) * ((FAST_FLOAT) 1.414213562) - tmp13; /* 2*c4 */ + 8011b6a: eef0 6a46 vmov.f32 s13, s12 + tmp0 = tmp10 + tmp13; /* phase 2 */ + 8011b6e: ee33 2a06 vadd.f32 s4, s6, s12 + tmp3 = tmp10 - tmp13; + 8011b72: ee33 3a46 vsub.f32 s6, s6, s12 + tmp12 = (tmp1 - tmp3) * ((FAST_FLOAT) 1.414213562) - tmp13; /* 2*c4 */ + 8011b76: eed7 6a05 vfnms.f32 s13, s14, s10 + tmp6 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + 8011b7a: ed9c 7a27 vldr s14, [ip, #156] ; 0x9c + tmp1 = tmp11 + tmp12; + 8011b7e: ee77 2aa6 vadd.f32 s5, s15, s13 + tmp2 = tmp11 - tmp12; + 8011b82: ee77 6ae6 vsub.f32 s13, s15, s13 + tmp4 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 8011b86: ee07 ea90 vmov s15, lr + 8011b8a: eeb8 6ae7 vcvt.f32.s32 s12, s15 + tmp5 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + 8011b8e: ee07 8a90 vmov s15, r8 + 8011b92: eef8 5ae7 vcvt.f32.s32 s11, s15 + tmp6 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + 8011b96: ee07 1a90 vmov s15, r1 + 8011b9a: eef8 7ae7 vcvt.f32.s32 s15, s15 + 8011b9e: ee67 7a87 vmul.f32 s15, s15, s14 + tmp7 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + 8011ba2: ee07 0a10 vmov s14, r0 + 8011ba6: eeb8 7ac7 vcvt.f32.s32 s14, s14 + 8011baa: ee27 7a01 vmul.f32 s14, s14, s2 + z13 = tmp6 + tmp5; /* phase 6 */ + 8011bae: eeb0 1a67 vmov.f32 s2, s15 + z10 = tmp6 - tmp5; + 8011bb2: eee5 7ae0 vfms.f32 s15, s11, s1 + z13 = tmp6 + tmp5; /* phase 6 */ + 8011bb6: eea5 1aa0 vfma.f32 s2, s11, s1 + z11 = tmp4 + tmp7; + 8011bba: eef0 5a47 vmov.f32 s11, s14 + z12 = tmp4 - tmp7; + 8011bbe: ee96 7a21 vfnms.f32 s14, s12, s3 + z11 = tmp4 + tmp7; + 8011bc2: eee6 5a21 vfma.f32 s11, s12, s3 + z5 = (z10 + z12) * ((FAST_FLOAT) 1.847759065); /* 2*c2 */ + 8011bc6: ee37 6a87 vadd.f32 s12, s15, s14 + tmp12 = z5 - z10 * ((FAST_FLOAT) 2.613125930); /* 2*(c2+c6) */ + 8011bca: ee63 7ae7 vnmul.f32 s15, s7, s15 + tmp7 = z11 + z13; /* phase 5 */ + 8011bce: ee71 1a25 vadd.f32 s3, s2, s11 + tmp10 = z5 - z12 * ((FAST_FLOAT) 1.082392200); /* 2*(c2-c6) */ + 8011bd2: ee24 7a47 vnmul.f32 s14, s8, s14 + tmp12 = z5 - z10 * ((FAST_FLOAT) 2.613125930); /* 2*(c2+c6) */ + 8011bd6: eee6 7a24 vfma.f32 s15, s12, s9 + tmp11 = (z11 - z13) * ((FAST_FLOAT) 1.414213562); /* 2*c4 */ + 8011bda: ee75 5ac1 vsub.f32 s11, s11, s2 + tmp10 = z5 - z12 * ((FAST_FLOAT) 1.082392200); /* 2*(c2-c6) */ + 8011bde: eea6 7a24 vfma.f32 s14, s12, s9 + tmp6 = tmp12 - tmp7; /* phase 2 */ + 8011be2: ee77 7ae1 vsub.f32 s15, s15, s3 + tmp5 = tmp11 - tmp6; + 8011be6: eeb0 6a67 vmov.f32 s12, s15 + 8011bea: ee95 6a85 vfnms.f32 s12, s11, s10 + wsptr[DCTSIZE*0] = tmp0 + tmp7; + 8011bee: ee72 5a21 vadd.f32 s11, s4, s3 + wsptr[DCTSIZE*7] = tmp0 - tmp7; + 8011bf2: ee32 2a61 vsub.f32 s4, s4, s3 + wsptr[DCTSIZE*0] = tmp0 + tmp7; + 8011bf6: ed44 5a01 vstr s11, [r4, #-4] + wsptr[DCTSIZE*1] = tmp1 + tmp6; + 8011bfa: ee72 5aa7 vadd.f32 s11, s5, s15 + wsptr[DCTSIZE*6] = tmp1 - tmp6; + 8011bfe: ee72 2ae7 vsub.f32 s5, s5, s15 + wsptr[DCTSIZE*7] = tmp0 - tmp7; + 8011c02: ed84 2a37 vstr s4, [r4, #220] ; 0xdc + wsptr[DCTSIZE*2] = tmp2 + tmp5; + 8011c06: ee76 7a86 vadd.f32 s15, s13, s12 + tmp4 = tmp10 - tmp5; + 8011c0a: ee37 7a46 vsub.f32 s14, s14, s12 + wsptr[DCTSIZE*1] = tmp1 + tmp6; + 8011c0e: edc4 5a07 vstr s11, [r4, #28] + wsptr[DCTSIZE*5] = tmp2 - tmp5; + 8011c12: ee76 6ac6 vsub.f32 s13, s13, s12 + wsptr[DCTSIZE*6] = tmp1 - tmp6; + 8011c16: edc4 2a2f vstr s5, [r4, #188] ; 0xbc + wsptr[DCTSIZE*2] = tmp2 + tmp5; + 8011c1a: edc4 7a0f vstr s15, [r4, #60] ; 0x3c + wsptr[DCTSIZE*3] = tmp3 + tmp4; + 8011c1e: ee73 7a07 vadd.f32 s15, s6, s14 + wsptr[DCTSIZE*5] = tmp2 - tmp5; + 8011c22: edc4 6a27 vstr s13, [r4, #156] ; 0x9c + wsptr[DCTSIZE*3] = tmp3 + tmp4; + 8011c26: edc4 7a17 vstr s15, [r4, #92] ; 0x5c + wsptr[DCTSIZE*4] = tmp3 - tmp4; + 8011c2a: ee73 7a47 vsub.f32 s15, s6, s14 + 8011c2e: edc4 7a1f vstr s15, [r4, #124] ; 0x7c + wsptr++; + 8011c32: e6c5 b.n 80119c0 + 8011c34: 3fb504f3 .word 0x3fb504f3 + 8011c38: 3f8a8bd4 .word 0x3f8a8bd4 + 8011c3c: 3fec835e .word 0x3fec835e + 8011c40: 40273d75 .word 0x40273d75 + 8011c44: 43008000 .word 0x43008000 + +08011c48 : + +GLOBAL(void) +jpeg_idct_ifast (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + 8011c48: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8011c4c: b0c5 sub sp, #276 ; 0x114 + ISHIFT_TEMPS /* for IDESCALE */ + + /* Pass 1: process columns from input, store into work array. */ + + inptr = coef_block; + quantptr = (IFAST_MULT_TYPE *) compptr->dct_table; + 8011c4e: 6d4d ldr r5, [r1, #84] ; 0x54 + 8011c50: 3a02 subs r2, #2 +{ + 8011c52: 9302 str r3, [sp, #8] + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + 8011c54: f8d0 314c ldr.w r3, [r0, #332] ; 0x14c + 8011c58: f103 0980 add.w r9, r3, #128 ; 0x80 + wsptr = workspace; + for (ctr = DCTSIZE; ctr > 0; ctr--) { + 8011c5c: f105 0320 add.w r3, r5, #32 + 8011c60: 9303 str r3, [sp, #12] + wsptr = workspace; + 8011c62: ab04 add r3, sp, #16 + * DC coefficient (with scale factor as needed). + * With typical images and quantization tables, half or more of the + * column DCT calculations can be simplified this way. + */ + + if (inptr[DCTSIZE*1] == 0 && inptr[DCTSIZE*2] == 0 && + 8011c64: f9b2 6012 ldrsh.w r6, [r2, #18] + wsptr[DCTSIZE*6] = dcval; + wsptr[DCTSIZE*7] = dcval; + + inptr++; /* advance pointers to next column */ + quantptr++; + wsptr++; + 8011c68: 3304 adds r3, #4 + if (inptr[DCTSIZE*1] == 0 && inptr[DCTSIZE*2] == 0 && + 8011c6a: f9b2 c022 ldrsh.w ip, [r2, #34] ; 0x22 + inptr[DCTSIZE*3] == 0 && inptr[DCTSIZE*4] == 0 && + 8011c6e: f9b2 7032 ldrsh.w r7, [r2, #50] ; 0x32 + 8011c72: f9b2 a042 ldrsh.w sl, [r2, #66] ; 0x42 + inptr[DCTSIZE*5] == 0 && inptr[DCTSIZE*6] == 0 && + 8011c76: f9b2 1052 ldrsh.w r1, [r2, #82] ; 0x52 + 8011c7a: f9b2 e062 ldrsh.w lr, [r2, #98] ; 0x62 + inptr[DCTSIZE*7] == 0) { + 8011c7e: f9b2 8072 ldrsh.w r8, [r2, #114] ; 0x72 + int dcval = (int) DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 8011c82: f855 0b04 ldr.w r0, [r5], #4 + 8011c86: f932 4f02 ldrsh.w r4, [r2, #2]! + 8011c8a: 4344 muls r4, r0 + inptr[DCTSIZE*5] == 0 && inptr[DCTSIZE*6] == 0 && + 8011c8c: ea46 000c orr.w r0, r6, ip + 8011c90: 4338 orrs r0, r7 + 8011c92: ea4a 0000 orr.w r0, sl, r0 + 8011c96: 4308 orrs r0, r1 + 8011c98: ea4e 0000 orr.w r0, lr, r0 + 8011c9c: ea58 0000 orrs.w r0, r8, r0 + 8011ca0: d13f bne.n 8011d22 + wsptr[DCTSIZE*0] = dcval; + 8011ca2: f843 4c04 str.w r4, [r3, #-4] + wsptr[DCTSIZE*1] = dcval; + 8011ca6: 61dc str r4, [r3, #28] + wsptr[DCTSIZE*2] = dcval; + 8011ca8: 63dc str r4, [r3, #60] ; 0x3c + wsptr[DCTSIZE*3] = dcval; + 8011caa: 65dc str r4, [r3, #92] ; 0x5c + wsptr[DCTSIZE*4] = dcval; + 8011cac: 67dc str r4, [r3, #124] ; 0x7c + wsptr[DCTSIZE*5] = dcval; + 8011cae: f8c3 409c str.w r4, [r3, #156] ; 0x9c + wsptr[DCTSIZE*6] = dcval; + 8011cb2: f8c3 40bc str.w r4, [r3, #188] ; 0xbc + wsptr[DCTSIZE*7] = dcval; + 8011cb6: f8c3 40dc str.w r4, [r3, #220] ; 0xdc + for (ctr = DCTSIZE; ctr > 0; ctr--) { + 8011cba: 9903 ldr r1, [sp, #12] + 8011cbc: 42a9 cmp r1, r5 + 8011cbe: d1d1 bne.n 8011c64 + 8011cc0: 9b02 ldr r3, [sp, #8] + + /* Pass 2: process rows from work array, store into output array. */ + /* Note that we must descale the results by a factor of 8 == 2**3, */ + /* and also undo the PASS1_BITS scaling. */ + + wsptr = workspace; + 8011cc2: ad04 add r5, sp, #16 + 8011cc4: f1a3 0b04 sub.w fp, r3, #4 + 8011cc8: 331c adds r3, #28 + 8011cca: 9303 str r3, [sp, #12] + for (ctr = 0; ctr < DCTSIZE; ctr++) { + outptr = output_buf[ctr] + output_col; + 8011ccc: 9b4e ldr r3, [sp, #312] ; 0x138 + 8011cce: f85b af04 ldr.w sl, [fp, #4]! + * may be commented out. + */ + +#ifndef NO_ZERO_ROW_TEST + if (wsptr[1] == 0 && wsptr[2] == 0 && wsptr[3] == 0 && wsptr[4] == 0 && + wsptr[5] == 0 && wsptr[6] == 0 && wsptr[7] == 0) { + 8011cd2: 69ea ldr r2, [r5, #28] + outptr = output_buf[ctr] + output_col; + 8011cd4: eb0a 0003 add.w r0, sl, r3 + if (wsptr[1] == 0 && wsptr[2] == 0 && wsptr[3] == 0 && wsptr[4] == 0 && + 8011cd8: e9d5 e801 ldrd lr, r8, [r5, #4] + 8011cdc: e9d5 4703 ldrd r4, r7, [r5, #12] + wsptr[5] == 0 && wsptr[6] == 0 && wsptr[7] == 0) { + 8011ce0: ea4e 0608 orr.w r6, lr, r8 + 8011ce4: 4326 orrs r6, r4 + 8011ce6: e9d5 3c05 ldrd r3, ip, [r5, #20] + 8011cea: 433e orrs r6, r7 + /* AC terms all zero */ + JSAMPLE dcval = range_limit[IDESCALE(wsptr[0], PASS1_BITS+3) + 8011cec: f855 1b20 ldr.w r1, [r5], #32 + wsptr[5] == 0 && wsptr[6] == 0 && wsptr[7] == 0) { + 8011cf0: 431e orrs r6, r3 + 8011cf2: ea46 060c orr.w r6, r6, ip + 8011cf6: 4316 orrs r6, r2 + 8011cf8: d17e bne.n 8011df8 + & RANGE_MASK]; + 8011cfa: f3c1 1149 ubfx r1, r1, #5, #10 + + outptr[0] = dcval; + 8011cfe: 9a4e ldr r2, [sp, #312] ; 0x138 + JSAMPLE dcval = range_limit[IDESCALE(wsptr[0], PASS1_BITS+3) + 8011d00: f819 3001 ldrb.w r3, [r9, r1] + outptr[0] = dcval; + 8011d04: f80a 3002 strb.w r3, [sl, r2] + outptr[1] = dcval; + 8011d08: 7043 strb r3, [r0, #1] + outptr[2] = dcval; + 8011d0a: 7083 strb r3, [r0, #2] + outptr[3] = dcval; + 8011d0c: 70c3 strb r3, [r0, #3] + outptr[4] = dcval; + 8011d0e: 7103 strb r3, [r0, #4] + outptr[5] = dcval; + 8011d10: 7143 strb r3, [r0, #5] + outptr[6] = dcval; + 8011d12: 7183 strb r3, [r0, #6] + outptr[7] = dcval; + 8011d14: 71c3 strb r3, [r0, #7] + for (ctr = 0; ctr < DCTSIZE; ctr++) { + 8011d16: 9b03 ldr r3, [sp, #12] + 8011d18: 455b cmp r3, fp + 8011d1a: d1d7 bne.n 8011ccc + outptr[3] = range_limit[IDESCALE(tmp3 - tmp4, PASS1_BITS+3) + & RANGE_MASK]; + + wsptr += DCTSIZE; /* advance pointer to next row */ + } +} + 8011d1c: b045 add sp, #276 ; 0x114 + 8011d1e: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + tmp1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + 8011d22: 6be8 ldr r0, [r5, #60] ; 0x3c + 8011d24: fb00 fc0c mul.w ip, r0, ip + tmp2 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + 8011d28: 6fe8 ldr r0, [r5, #124] ; 0x7c + 8011d2a: fb00 fa0a mul.w sl, r0, sl + tmp3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + 8011d2e: f8d5 00bc ldr.w r0, [r5, #188] ; 0xbc + 8011d32: fb00 fe0e mul.w lr, r0, lr + tmp10 = tmp0 + tmp2; /* phase 3 */ + 8011d36: eb0a 0004 add.w r0, sl, r4 + tmp11 = tmp0 - tmp2; + 8011d3a: eba4 040a sub.w r4, r4, sl + tmp12 = MULTIPLY(tmp1 - tmp3, FIX_1_414213562) - tmp13; /* 2*c4 */ + 8011d3e: ebac 0b0e sub.w fp, ip, lr + tmp13 = tmp1 + tmp3; /* phases 5-3 */ + 8011d42: eb0c 0a0e add.w sl, ip, lr + tmp12 = MULTIPLY(tmp1 - tmp3, FIX_1_414213562) - tmp13; /* 2*c4 */ + 8011d46: f44f 7cb5 mov.w ip, #362 ; 0x16a + tmp0 = tmp10 + tmp13; /* phase 2 */ + 8011d4a: eb00 0e0a add.w lr, r0, sl + tmp12 = MULTIPLY(tmp1 - tmp3, FIX_1_414213562) - tmp13; /* 2*c4 */ + 8011d4e: fb0c fb0b mul.w fp, ip, fp + 8011d52: ebca 2b2b rsb fp, sl, fp, asr #8 + tmp3 = tmp10 - tmp13; + 8011d56: eba0 0a0a sub.w sl, r0, sl + tmp2 = tmp11 - tmp12; + 8011d5a: eba4 000b sub.w r0, r4, fp + tmp1 = tmp11 + tmp12; + 8011d5e: eb04 0c0b add.w ip, r4, fp + tmp2 = tmp11 - tmp12; + 8011d62: 9001 str r0, [sp, #4] + tmp4 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 8011d64: 69e8 ldr r0, [r5, #28] + 8011d66: 4346 muls r6, r0 + tmp5 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + 8011d68: 6de8 ldr r0, [r5, #92] ; 0x5c + 8011d6a: 4347 muls r7, r0 + tmp6 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + 8011d6c: f8d5 009c ldr.w r0, [r5, #156] ; 0x9c + 8011d70: 4341 muls r1, r0 + tmp7 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + 8011d72: f8d5 00dc ldr.w r0, [r5, #220] ; 0xdc + 8011d76: fb00 f008 mul.w r0, r0, r8 + z13 = tmp6 + tmp5; /* phase 6 */ + 8011d7a: eb07 0801 add.w r8, r7, r1 + z10 = tmp6 - tmp5; + 8011d7e: 1bc9 subs r1, r1, r7 + z11 = tmp4 + tmp7; + 8011d80: 1837 adds r7, r6, r0 + z12 = tmp4 - tmp7; + 8011d82: 1a30 subs r0, r6, r0 + z5 = MULTIPLY(z10 + z12, FIX_1_847759065); /* 2*c2 */ + 8011d84: 180e adds r6, r1, r0 + z12 = tmp4 - tmp7; + 8011d86: 4604 mov r4, r0 + z5 = MULTIPLY(z10 + z12, FIX_1_847759065); /* 2*c2 */ + 8011d88: f240 10d9 movw r0, #473 ; 0x1d9 + tmp7 = z11 + z13; /* phase 5 */ + 8011d8c: eb08 0b07 add.w fp, r8, r7 + tmp11 = MULTIPLY(z11 - z13, FIX_1_414213562); /* 2*c4 */ + 8011d90: eba7 0708 sub.w r7, r7, r8 + z5 = MULTIPLY(z10 + z12, FIX_1_847759065); /* 2*c2 */ + 8011d94: 4346 muls r6, r0 + tmp12 = MULTIPLY(z10, - FIX_2_613125930) + z5; /* -2*(c2+c6) */ + 8011d96: f46f 7027 mvn.w r0, #668 ; 0x29c + 8011d9a: 4341 muls r1, r0 + tmp11 = MULTIPLY(z11 - z13, FIX_1_414213562); /* 2*c4 */ + 8011d9c: f44f 70b5 mov.w r0, #362 ; 0x16a + 8011da0: 4347 muls r7, r0 + tmp10 = MULTIPLY(z12, FIX_1_082392200) - z5; /* 2*(c2-c6) */ + 8011da2: f240 1015 movw r0, #277 ; 0x115 + tmp12 = MULTIPLY(z10, - FIX_2_613125930) + z5; /* -2*(c2+c6) */ + 8011da6: 1209 asrs r1, r1, #8 + tmp10 = MULTIPLY(z12, FIX_1_082392200) - z5; /* 2*(c2-c6) */ + 8011da8: 4344 muls r4, r0 + tmp12 = MULTIPLY(z10, - FIX_2_613125930) + z5; /* -2*(c2+c6) */ + 8011daa: eb01 2126 add.w r1, r1, r6, asr #8 + tmp10 = MULTIPLY(z12, FIX_1_082392200) - z5; /* 2*(c2-c6) */ + 8011dae: 1220 asrs r0, r4, #8 + tmp6 = tmp12 - tmp7; /* phase 2 */ + 8011db0: eba1 010b sub.w r1, r1, fp + tmp10 = MULTIPLY(z12, FIX_1_082392200) - z5; /* 2*(c2-c6) */ + 8011db4: eba0 2026 sub.w r0, r0, r6, asr #8 + wsptr[DCTSIZE*0] = (int) (tmp0 + tmp7); + 8011db8: eb0e 060b add.w r6, lr, fp + tmp5 = tmp11 - tmp6; + 8011dbc: ebc1 2727 rsb r7, r1, r7, asr #8 + wsptr[DCTSIZE*0] = (int) (tmp0 + tmp7); + 8011dc0: f843 6c04 str.w r6, [r3, #-4] + wsptr[DCTSIZE*7] = (int) (tmp0 - tmp7); + 8011dc4: ebae 060b sub.w r6, lr, fp + tmp4 = tmp10 + tmp5; + 8011dc8: 4438 add r0, r7 + wsptr[DCTSIZE*7] = (int) (tmp0 - tmp7); + 8011dca: f8c3 60dc str.w r6, [r3, #220] ; 0xdc + wsptr[DCTSIZE*1] = (int) (tmp1 + tmp6); + 8011dce: eb0c 0601 add.w r6, ip, r1 + wsptr[DCTSIZE*6] = (int) (tmp1 - tmp6); + 8011dd2: ebac 0101 sub.w r1, ip, r1 + wsptr[DCTSIZE*1] = (int) (tmp1 + tmp6); + 8011dd6: 61de str r6, [r3, #28] + wsptr[DCTSIZE*6] = (int) (tmp1 - tmp6); + 8011dd8: f8c3 10bc str.w r1, [r3, #188] ; 0xbc + wsptr[DCTSIZE*2] = (int) (tmp2 + tmp5); + 8011ddc: 9901 ldr r1, [sp, #4] + 8011dde: 4439 add r1, r7 + 8011de0: 63d9 str r1, [r3, #60] ; 0x3c + wsptr[DCTSIZE*5] = (int) (tmp2 - tmp5); + 8011de2: 9901 ldr r1, [sp, #4] + 8011de4: 1bcc subs r4, r1, r7 + wsptr[DCTSIZE*4] = (int) (tmp3 + tmp4); + 8011de6: eb0a 0100 add.w r1, sl, r0 + wsptr[DCTSIZE*3] = (int) (tmp3 - tmp4); + 8011dea: ebaa 0000 sub.w r0, sl, r0 + wsptr[DCTSIZE*5] = (int) (tmp2 - tmp5); + 8011dee: f8c3 409c str.w r4, [r3, #156] ; 0x9c + wsptr[DCTSIZE*4] = (int) (tmp3 + tmp4); + 8011df2: 67d9 str r1, [r3, #124] ; 0x7c + wsptr[DCTSIZE*3] = (int) (tmp3 - tmp4); + 8011df4: 65d8 str r0, [r3, #92] ; 0x5c + wsptr++; + 8011df6: e760 b.n 8011cba + tmp10 = ((DCTELEM) wsptr[0] + (DCTELEM) wsptr[4]); + 8011df8: 187e adds r6, r7, r1 + tmp11 = ((DCTELEM) wsptr[0] - (DCTELEM) wsptr[4]); + 8011dfa: 1bc9 subs r1, r1, r7 + tmp13 = ((DCTELEM) wsptr[2] + (DCTELEM) wsptr[6]); + 8011dfc: eb08 070c add.w r7, r8, ip + tmp12 = MULTIPLY((DCTELEM) wsptr[2] - (DCTELEM) wsptr[6], FIX_1_414213562) + 8011e00: eba8 080c sub.w r8, r8, ip + 8011e04: f44f 7cb5 mov.w ip, #362 ; 0x16a + 8011e08: fb0c f808 mul.w r8, ip, r8 + tmp0 = tmp10 + tmp13; + 8011e0c: eb06 0c07 add.w ip, r6, r7 + tmp3 = tmp10 - tmp13; + 8011e10: 1bf6 subs r6, r6, r7 + tmp12 = MULTIPLY((DCTELEM) wsptr[2] - (DCTELEM) wsptr[6], FIX_1_414213562) + 8011e12: ebc7 2828 rsb r8, r7, r8, asr #8 + tmp1 = tmp11 + tmp12; + 8011e16: eb01 0708 add.w r7, r1, r8 + tmp2 = tmp11 - tmp12; + 8011e1a: eba1 0108 sub.w r1, r1, r8 + 8011e1e: 9101 str r1, [sp, #4] + z13 = (DCTELEM) wsptr[5] + (DCTELEM) wsptr[3]; + 8011e20: 18e1 adds r1, r4, r3 + z10 = (DCTELEM) wsptr[5] - (DCTELEM) wsptr[3]; + 8011e22: 1b1b subs r3, r3, r4 + z11 = (DCTELEM) wsptr[1] + (DCTELEM) wsptr[7]; + 8011e24: eb0e 0402 add.w r4, lr, r2 + z12 = (DCTELEM) wsptr[1] - (DCTELEM) wsptr[7]; + 8011e28: ebae 0202 sub.w r2, lr, r2 + z13 = (DCTELEM) wsptr[5] + (DCTELEM) wsptr[3]; + 8011e2c: 9102 str r1, [sp, #8] + tmp7 = z11 + z13; /* phase 5 */ + 8011e2e: eb01 0804 add.w r8, r1, r4 + z5 = MULTIPLY(z10 + z12, FIX_1_847759065); /* 2*c2 */ + 8011e32: f240 11d9 movw r1, #473 ; 0x1d9 + 8011e36: eb03 0e02 add.w lr, r3, r2 + 8011e3a: fb01 fe0e mul.w lr, r1, lr + tmp12 = MULTIPLY(z10, - FIX_2_613125930) + z5; /* -2*(c2+c6) */ + 8011e3e: f46f 7127 mvn.w r1, #668 ; 0x29c + 8011e42: 434b muls r3, r1 + tmp11 = MULTIPLY(z11 - z13, FIX_1_414213562); /* 2*c4 */ + 8011e44: 9902 ldr r1, [sp, #8] + 8011e46: 1a64 subs r4, r4, r1 + 8011e48: f44f 71b5 mov.w r1, #362 ; 0x16a + tmp12 = MULTIPLY(z10, - FIX_2_613125930) + z5; /* -2*(c2+c6) */ + 8011e4c: 121b asrs r3, r3, #8 + tmp11 = MULTIPLY(z11 - z13, FIX_1_414213562); /* 2*c4 */ + 8011e4e: 434c muls r4, r1 + tmp10 = MULTIPLY(z12, FIX_1_082392200) - z5; /* 2*(c2-c6) */ + 8011e50: f240 1115 movw r1, #277 ; 0x115 + tmp12 = MULTIPLY(z10, - FIX_2_613125930) + z5; /* -2*(c2+c6) */ + 8011e54: eb03 232e add.w r3, r3, lr, asr #8 + tmp10 = MULTIPLY(z12, FIX_1_082392200) - z5; /* 2*(c2-c6) */ + 8011e58: 434a muls r2, r1 + outptr[0] = range_limit[IDESCALE(tmp0 + tmp7, PASS1_BITS+3) + 8011e5a: 994e ldr r1, [sp, #312] ; 0x138 + tmp6 = tmp12 - tmp7; /* phase 2 */ + 8011e5c: eba3 0308 sub.w r3, r3, r8 + tmp10 = MULTIPLY(z12, FIX_1_082392200) - z5; /* 2*(c2-c6) */ + 8011e60: 1212 asrs r2, r2, #8 + tmp5 = tmp11 - tmp6; + 8011e62: ebc3 2424 rsb r4, r3, r4, asr #8 + tmp10 = MULTIPLY(z12, FIX_1_082392200) - z5; /* 2*(c2-c6) */ + 8011e66: eba2 222e sub.w r2, r2, lr, asr #8 + outptr[0] = range_limit[IDESCALE(tmp0 + tmp7, PASS1_BITS+3) + 8011e6a: eb0c 0e08 add.w lr, ip, r8 + outptr[7] = range_limit[IDESCALE(tmp0 - tmp7, PASS1_BITS+3) + 8011e6e: ebac 0c08 sub.w ip, ip, r8 + & RANGE_MASK]; + 8011e72: f3ce 1e49 ubfx lr, lr, #5, #10 + tmp4 = tmp10 + tmp5; + 8011e76: 4422 add r2, r4 + & RANGE_MASK]; + 8011e78: f3cc 1c49 ubfx ip, ip, #5, #10 + outptr[0] = range_limit[IDESCALE(tmp0 + tmp7, PASS1_BITS+3) + 8011e7c: f819 e00e ldrb.w lr, [r9, lr] + 8011e80: f80a e001 strb.w lr, [sl, r1] + outptr[7] = range_limit[IDESCALE(tmp0 - tmp7, PASS1_BITS+3) + 8011e84: f819 c00c ldrb.w ip, [r9, ip] + 8011e88: f880 c007 strb.w ip, [r0, #7] + outptr[1] = range_limit[IDESCALE(tmp1 + tmp6, PASS1_BITS+3) + 8011e8c: eb07 0c03 add.w ip, r7, r3 + outptr[6] = range_limit[IDESCALE(tmp1 - tmp6, PASS1_BITS+3) + 8011e90: 1aff subs r7, r7, r3 + & RANGE_MASK]; + 8011e92: f3cc 1c49 ubfx ip, ip, #5, #10 + & RANGE_MASK]; + 8011e96: f3c7 1749 ubfx r7, r7, #5, #10 + outptr[1] = range_limit[IDESCALE(tmp1 + tmp6, PASS1_BITS+3) + 8011e9a: f819 c00c ldrb.w ip, [r9, ip] + 8011e9e: f880 c001 strb.w ip, [r0, #1] + outptr[6] = range_limit[IDESCALE(tmp1 - tmp6, PASS1_BITS+3) + 8011ea2: f819 3007 ldrb.w r3, [r9, r7] + 8011ea6: 7183 strb r3, [r0, #6] + outptr[2] = range_limit[IDESCALE(tmp2 + tmp5, PASS1_BITS+3) + 8011ea8: 9b01 ldr r3, [sp, #4] + 8011eaa: 4423 add r3, r4 + & RANGE_MASK]; + 8011eac: f3c3 1349 ubfx r3, r3, #5, #10 + outptr[2] = range_limit[IDESCALE(tmp2 + tmp5, PASS1_BITS+3) + 8011eb0: f819 3003 ldrb.w r3, [r9, r3] + 8011eb4: 7083 strb r3, [r0, #2] + outptr[5] = range_limit[IDESCALE(tmp2 - tmp5, PASS1_BITS+3) + 8011eb6: 9b01 ldr r3, [sp, #4] + 8011eb8: 1b19 subs r1, r3, r4 + & RANGE_MASK]; + 8011eba: f3c1 1149 ubfx r1, r1, #5, #10 + outptr[5] = range_limit[IDESCALE(tmp2 - tmp5, PASS1_BITS+3) + 8011ebe: f819 3001 ldrb.w r3, [r9, r1] + 8011ec2: 7143 strb r3, [r0, #5] + outptr[4] = range_limit[IDESCALE(tmp3 + tmp4, PASS1_BITS+3) + 8011ec4: 18b3 adds r3, r6, r2 + outptr[3] = range_limit[IDESCALE(tmp3 - tmp4, PASS1_BITS+3) + 8011ec6: 1ab6 subs r6, r6, r2 + & RANGE_MASK]; + 8011ec8: f3c3 1349 ubfx r3, r3, #5, #10 + & RANGE_MASK]; + 8011ecc: f3c6 1649 ubfx r6, r6, #5, #10 + outptr[4] = range_limit[IDESCALE(tmp3 + tmp4, PASS1_BITS+3) + 8011ed0: f819 3003 ldrb.w r3, [r9, r3] + 8011ed4: 7103 strb r3, [r0, #4] + outptr[3] = range_limit[IDESCALE(tmp3 - tmp4, PASS1_BITS+3) + 8011ed6: f819 3006 ldrb.w r3, [r9, r6] + 8011eda: 70c3 strb r3, [r0, #3] + wsptr += DCTSIZE; /* advance pointer to next row */ + 8011edc: e71b b.n 8011d16 + ... + +08011ee0 : + +GLOBAL(void) +jpeg_idct_islow (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + 8011ee0: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8011ee4: b0c7 sub sp, #284 ; 0x11c + /* Pass 1: process columns from input, store into work array. */ + /* Note results are scaled up by sqrt(8) compared to a true IDCT; */ + /* furthermore, we scale the results by 2**PASS1_BITS. */ + + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + 8011ee6: 6d4d ldr r5, [r1, #84] ; 0x54 +{ + 8011ee8: 9303 str r3, [sp, #12] + wsptr = workspace; + 8011eea: a906 add r1, sp, #24 + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + 8011eec: f8d0 314c ldr.w r3, [r0, #332] ; 0x14c + 8011ef0: 3380 adds r3, #128 ; 0x80 + 8011ef2: 9301 str r3, [sp, #4] + for (ctr = DCTSIZE; ctr > 0; ctr--) { + 8011ef4: 1e93 subs r3, r2, #2 + 8011ef6: 9300 str r3, [sp, #0] + 8011ef8: f105 0320 add.w r3, r5, #32 + 8011efc: 9304 str r3, [sp, #16] + * DC coefficient (with scale factor as needed). + * With typical images and quantization tables, half or more of the + * column DCT calculations can be simplified this way. + */ + + if (inptr[DCTSIZE*1] == 0 && inptr[DCTSIZE*2] == 0 && + 8011efe: 9b00 ldr r3, [sp, #0] + wsptr[DCTSIZE*6] = dcval; + wsptr[DCTSIZE*7] = dcval; + + inptr++; /* advance pointers to next column */ + quantptr++; + wsptr++; + 8011f00: 3104 adds r1, #4 + int dcval = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]) << PASS1_BITS; + 8011f02: f855 0b04 ldr.w r0, [r5], #4 + 8011f06: 461a mov r2, r3 + if (inptr[DCTSIZE*1] == 0 && inptr[DCTSIZE*2] == 0 && + 8011f08: f9b3 a012 ldrsh.w sl, [r3, #18] + 8011f0c: f9b3 7022 ldrsh.w r7, [r3, #34] ; 0x22 + inptr[DCTSIZE*3] == 0 && inptr[DCTSIZE*4] == 0 && + 8011f10: f9b3 e032 ldrsh.w lr, [r3, #50] ; 0x32 + 8011f14: f9b3 6042 ldrsh.w r6, [r3, #66] ; 0x42 + inptr[DCTSIZE*5] == 0 && inptr[DCTSIZE*6] == 0 && + 8011f18: f9b3 8052 ldrsh.w r8, [r3, #82] ; 0x52 + 8011f1c: f9b3 4062 ldrsh.w r4, [r3, #98] ; 0x62 + inptr[DCTSIZE*7] == 0) { + 8011f20: f9b3 9072 ldrsh.w r9, [r3, #114] ; 0x72 + int dcval = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]) << PASS1_BITS; + 8011f24: f932 3f02 ldrsh.w r3, [r2, #2]! + 8011f28: 4343 muls r3, r0 + inptr[DCTSIZE*5] == 0 && inptr[DCTSIZE*6] == 0 && + 8011f2a: ea4a 0007 orr.w r0, sl, r7 + int dcval = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]) << PASS1_BITS; + 8011f2e: 9200 str r2, [sp, #0] + inptr[DCTSIZE*5] == 0 && inptr[DCTSIZE*6] == 0 && + 8011f30: ea4e 0000 orr.w r0, lr, r0 + 8011f34: 4330 orrs r0, r6 + 8011f36: ea48 0000 orr.w r0, r8, r0 + 8011f3a: 4320 orrs r0, r4 + 8011f3c: ea59 0000 orrs.w r0, r9, r0 + 8011f40: d146 bne.n 8011fd0 + int dcval = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]) << PASS1_BITS; + 8011f42: 009b lsls r3, r3, #2 + wsptr[DCTSIZE*0] = dcval; + 8011f44: f841 3c04 str.w r3, [r1, #-4] + wsptr[DCTSIZE*1] = dcval; + 8011f48: 61cb str r3, [r1, #28] + wsptr[DCTSIZE*2] = dcval; + 8011f4a: 63cb str r3, [r1, #60] ; 0x3c + wsptr[DCTSIZE*3] = dcval; + 8011f4c: 65cb str r3, [r1, #92] ; 0x5c + wsptr[DCTSIZE*4] = dcval; + 8011f4e: 67cb str r3, [r1, #124] ; 0x7c + wsptr[DCTSIZE*5] = dcval; + 8011f50: f8c1 309c str.w r3, [r1, #156] ; 0x9c + wsptr[DCTSIZE*6] = dcval; + 8011f54: f8c1 30bc str.w r3, [r1, #188] ; 0xbc + wsptr[DCTSIZE*7] = dcval; + 8011f58: f8c1 30dc str.w r3, [r1, #220] ; 0xdc + for (ctr = DCTSIZE; ctr > 0; ctr--) { + 8011f5c: 9b04 ldr r3, [sp, #16] + 8011f5e: 42ab cmp r3, r5 + 8011f60: d1cd bne.n 8011efe + 8011f62: 9b03 ldr r3, [sp, #12] + + /* Pass 2: process rows from work array, store into output array. */ + /* Note that we must descale the results by a factor of 8 == 2**3, */ + /* and also undo the PASS1_BITS scaling. */ + + wsptr = workspace; + 8011f64: ad06 add r5, sp, #24 + 8011f66: f1a3 0904 sub.w r9, r3, #4 + 8011f6a: 331c adds r3, #28 + 8011f6c: 9305 str r3, [sp, #20] + for (ctr = 0; ctr < DCTSIZE; ctr++) { + outptr = output_buf[ctr] + output_col; + 8011f6e: f859 3f04 ldr.w r3, [r9, #4]! + * may be commented out. + */ + +#ifndef NO_ZERO_ROW_TEST + if (wsptr[1] == 0 && wsptr[2] == 0 && wsptr[3] == 0 && wsptr[4] == 0 && + wsptr[5] == 0 && wsptr[6] == 0 && wsptr[7] == 0) { + 8011f72: f8d5 b01c ldr.w fp, [r5, #28] + outptr = output_buf[ctr] + output_col; + 8011f76: 9300 str r3, [sp, #0] + 8011f78: 9a00 ldr r2, [sp, #0] + 8011f7a: 9b50 ldr r3, [sp, #320] ; 0x140 + if (wsptr[1] == 0 && wsptr[2] == 0 && wsptr[3] == 0 && wsptr[4] == 0 && + 8011f7c: e9d5 a001 ldrd sl, r0, [r5, #4] + 8011f80: e9d5 e603 ldrd lr, r6, [r5, #12] + outptr = output_buf[ctr] + output_col; + 8011f84: 4413 add r3, r2 + wsptr[5] == 0 && wsptr[6] == 0 && wsptr[7] == 0) { + 8011f86: ea4a 0200 orr.w r2, sl, r0 + 8011f8a: ea42 020e orr.w r2, r2, lr + 8011f8e: e9d5 8405 ldrd r8, r4, [r5, #20] + 8011f92: 4332 orrs r2, r6 + /* AC terms all zero */ + JSAMPLE dcval = range_limit[(int) DESCALE((INT32) wsptr[0], PASS1_BITS+3) + 8011f94: f855 1b20 ldr.w r1, [r5], #32 + wsptr[5] == 0 && wsptr[6] == 0 && wsptr[7] == 0) { + 8011f98: ea42 0208 orr.w r2, r2, r8 + JSAMPLE dcval = range_limit[(int) DESCALE((INT32) wsptr[0], PASS1_BITS+3) + 8011f9c: 3110 adds r1, #16 + wsptr[5] == 0 && wsptr[6] == 0 && wsptr[7] == 0) { + 8011f9e: 4322 orrs r2, r4 + 8011fa0: ea52 020b orrs.w r2, r2, fp + 8011fa4: f040 8092 bne.w 80120cc + & RANGE_MASK]; + 8011fa8: f3c1 1149 ubfx r1, r1, #5, #10 + JSAMPLE dcval = range_limit[(int) DESCALE((INT32) wsptr[0], PASS1_BITS+3) + 8011fac: 9a01 ldr r2, [sp, #4] + + outptr[0] = dcval; + 8011fae: 9800 ldr r0, [sp, #0] + JSAMPLE dcval = range_limit[(int) DESCALE((INT32) wsptr[0], PASS1_BITS+3) + 8011fb0: 5c52 ldrb r2, [r2, r1] + outptr[0] = dcval; + 8011fb2: 9950 ldr r1, [sp, #320] ; 0x140 + 8011fb4: 5442 strb r2, [r0, r1] + outptr[1] = dcval; + 8011fb6: 705a strb r2, [r3, #1] + outptr[2] = dcval; + 8011fb8: 709a strb r2, [r3, #2] + outptr[3] = dcval; + 8011fba: 70da strb r2, [r3, #3] + outptr[4] = dcval; + 8011fbc: 711a strb r2, [r3, #4] + outptr[5] = dcval; + 8011fbe: 715a strb r2, [r3, #5] + outptr[6] = dcval; + 8011fc0: 719a strb r2, [r3, #6] + outptr[7] = dcval; + 8011fc2: 71da strb r2, [r3, #7] + for (ctr = 0; ctr < DCTSIZE; ctr++) { + 8011fc4: 9b05 ldr r3, [sp, #20] + 8011fc6: 454b cmp r3, r9 + 8011fc8: d1d1 bne.n 8011f6e + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + + wsptr += DCTSIZE; /* advance pointer to next row */ + } +} + 8011fca: b047 add sp, #284 ; 0x11c + 8011fcc: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + z2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + 8011fd0: 6be8 ldr r0, [r5, #60] ; 0x3c + z1 = MULTIPLY(z2 + z3, FIX_0_541196100); + 8011fd2: f241 1251 movw r2, #4433 ; 0x1151 + z2 <<= CONST_BITS; + 8011fd6: 035b lsls r3, r3, #13 + z2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + 8011fd8: 4347 muls r7, r0 + z3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + 8011fda: f8d5 00bc ldr.w r0, [r5, #188] ; 0xbc + z2 += ONE << (CONST_BITS-PASS1_BITS-1); + 8011fde: f503 6380 add.w r3, r3, #1024 ; 0x400 + z3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + 8011fe2: 4360 muls r0, r4 + z1 = MULTIPLY(z2 + z3, FIX_0_541196100); + 8011fe4: 183c adds r4, r7, r0 + 8011fe6: 4354 muls r4, r2 + tmp2 = z1 + MULTIPLY(z2, FIX_0_765366865); + 8011fe8: f641 027e movw r2, #6270 ; 0x187e + 8011fec: fb02 4707 mla r7, r2, r7, r4 + tmp3 = z1 - MULTIPLY(z3, FIX_1_847759065); + 8011ff0: 4a74 ldr r2, [pc, #464] ; (80121c4 ) + 8011ff2: fb02 4400 mla r4, r2, r0, r4 + z3 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + 8011ff6: 6fe8 ldr r0, [r5, #124] ; 0x7c + 8011ff8: 4346 muls r6, r0 + tmp0 = z2 + z3; + 8011ffa: eb03 3046 add.w r0, r3, r6, lsl #13 + tmp1 = z2 - z3; + 8011ffe: eba3 3346 sub.w r3, r3, r6, lsl #13 + tmp10 = tmp0 + tmp2; + 8012002: eb07 0c00 add.w ip, r7, r0 + tmp13 = tmp0 - tmp2; + 8012006: 1bc2 subs r2, r0, r7 + tmp0 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + 8012008: f8d5 00dc ldr.w r0, [r5, #220] ; 0xdc + tmp11 = tmp1 + tmp3; + 801200c: 18e7 adds r7, r4, r3 + tmp12 = tmp1 - tmp3; + 801200e: 1b1b subs r3, r3, r4 + tmp3 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 8012010: 69ec ldr r4, [r5, #28] + tmp0 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + 8012012: fb00 f909 mul.w r9, r0, r9 + tmp1 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + 8012016: f8d5 009c ldr.w r0, [r5, #156] ; 0x9c + tmp3 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 801201a: fb04 fa0a mul.w sl, r4, sl + tmp1 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + 801201e: fb00 f808 mul.w r8, r0, r8 + tmp2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + 8012022: 6de8 ldr r0, [r5, #92] ; 0x5c + tmp13 = tmp0 - tmp2; + 8012024: 9202 str r2, [sp, #8] + z1 = MULTIPLY(z2 + z3, FIX_1_175875602); /* sqrt(2) * c3 */ + 8012026: f242 52a1 movw r2, #9633 ; 0x25a1 + tmp2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + 801202a: fb00 fe0e mul.w lr, r0, lr + z3 = tmp1 + tmp3; + 801202e: eb08 040a add.w r4, r8, sl + z2 = tmp0 + tmp2; + 8012032: eb09 060e add.w r6, r9, lr + z1 = MULTIPLY(z2 + z3, FIX_1_175875602); /* sqrt(2) * c3 */ + 8012036: 1930 adds r0, r6, r4 + 8012038: 4350 muls r0, r2 + z2 += z1; + 801203a: 4a63 ldr r2, [pc, #396] ; (80121c8 ) + 801203c: fb02 0606 mla r6, r2, r6, r0 + z3 += z1; + 8012040: 4a62 ldr r2, [pc, #392] ; (80121cc ) + 8012042: fb02 0004 mla r0, r2, r4, r0 + z1 = MULTIPLY(tmp0 + tmp3, - FIX_0_899976223); /* sqrt(2) * (c7-c3) */ + 8012046: eb09 040a add.w r4, r9, sl + 801204a: 4a61 ldr r2, [pc, #388] ; (80121d0 ) + 801204c: 4354 muls r4, r2 + tmp0 += z1 + z2; + 801204e: f640 128e movw r2, #2446 ; 0x98e + 8012052: eb06 0b04 add.w fp, r6, r4 + tmp3 += z1 + z3; + 8012056: 4404 add r4, r0 + tmp0 += z1 + z2; + 8012058: fb02 b909 mla r9, r2, r9, fp + tmp3 += z1 + z3; + 801205c: f243 0b0b movw fp, #12299 ; 0x300b + z1 = MULTIPLY(tmp1 + tmp2, - FIX_2_562915447); /* sqrt(2) * (-c1-c3) */ + 8012060: 4a5c ldr r2, [pc, #368] ; (80121d4 ) + tmp3 += z1 + z3; + 8012062: fb0b 440a mla r4, fp, sl, r4 + z1 = MULTIPLY(tmp1 + tmp2, - FIX_2_562915447); /* sqrt(2) * (-c1-c3) */ + 8012066: eb08 0a0e add.w sl, r8, lr + tmp1 += z1 + z3; + 801206a: f244 1bb3 movw fp, #16819 ; 0x41b3 + z1 = MULTIPLY(tmp1 + tmp2, - FIX_2_562915447); /* sqrt(2) * (-c1-c3) */ + 801206e: fb02 fa0a mul.w sl, r2, sl + tmp1 += z1 + z3; + 8012072: 4450 add r0, sl + tmp2 += z1 + z2; + 8012074: 4456 add r6, sl + tmp1 += z1 + z3; + 8012076: fb0b 0008 mla r0, fp, r8, r0 + tmp2 += z1 + z2; + 801207a: f246 2854 movw r8, #25172 ; 0x6254 + 801207e: fb08 6e0e mla lr, r8, lr, r6 + wsptr[DCTSIZE*0] = (int) RIGHT_SHIFT(tmp10 + tmp3, CONST_BITS-PASS1_BITS); + 8012082: eb0c 0604 add.w r6, ip, r4 + wsptr[DCTSIZE*7] = (int) RIGHT_SHIFT(tmp10 - tmp3, CONST_BITS-PASS1_BITS); + 8012086: ebac 0c04 sub.w ip, ip, r4 + wsptr[DCTSIZE*0] = (int) RIGHT_SHIFT(tmp10 + tmp3, CONST_BITS-PASS1_BITS); + 801208a: 12f6 asrs r6, r6, #11 + wsptr[DCTSIZE*7] = (int) RIGHT_SHIFT(tmp10 - tmp3, CONST_BITS-PASS1_BITS); + 801208c: ea4f 24ec mov.w r4, ip, asr #11 + wsptr[DCTSIZE*0] = (int) RIGHT_SHIFT(tmp10 + tmp3, CONST_BITS-PASS1_BITS); + 8012090: f841 6c04 str.w r6, [r1, #-4] + wsptr[DCTSIZE*7] = (int) RIGHT_SHIFT(tmp10 - tmp3, CONST_BITS-PASS1_BITS); + 8012094: f8c1 40dc str.w r4, [r1, #220] ; 0xdc + wsptr[DCTSIZE*1] = (int) RIGHT_SHIFT(tmp11 + tmp2, CONST_BITS-PASS1_BITS); + 8012098: eb07 040e add.w r4, r7, lr + wsptr[DCTSIZE*6] = (int) RIGHT_SHIFT(tmp11 - tmp2, CONST_BITS-PASS1_BITS); + 801209c: eba7 070e sub.w r7, r7, lr + wsptr[DCTSIZE*1] = (int) RIGHT_SHIFT(tmp11 + tmp2, CONST_BITS-PASS1_BITS); + 80120a0: 12e4 asrs r4, r4, #11 + wsptr[DCTSIZE*6] = (int) RIGHT_SHIFT(tmp11 - tmp2, CONST_BITS-PASS1_BITS); + 80120a2: 12ff asrs r7, r7, #11 + wsptr[DCTSIZE*1] = (int) RIGHT_SHIFT(tmp11 + tmp2, CONST_BITS-PASS1_BITS); + 80120a4: 61cc str r4, [r1, #28] + wsptr[DCTSIZE*2] = (int) RIGHT_SHIFT(tmp12 + tmp1, CONST_BITS-PASS1_BITS); + 80120a6: 181c adds r4, r3, r0 + wsptr[DCTSIZE*5] = (int) RIGHT_SHIFT(tmp12 - tmp1, CONST_BITS-PASS1_BITS); + 80120a8: 1a1b subs r3, r3, r0 + wsptr[DCTSIZE*6] = (int) RIGHT_SHIFT(tmp11 - tmp2, CONST_BITS-PASS1_BITS); + 80120aa: f8c1 70bc str.w r7, [r1, #188] ; 0xbc + wsptr[DCTSIZE*2] = (int) RIGHT_SHIFT(tmp12 + tmp1, CONST_BITS-PASS1_BITS); + 80120ae: 12e4 asrs r4, r4, #11 + wsptr[DCTSIZE*5] = (int) RIGHT_SHIFT(tmp12 - tmp1, CONST_BITS-PASS1_BITS); + 80120b0: 12db asrs r3, r3, #11 + wsptr[DCTSIZE*2] = (int) RIGHT_SHIFT(tmp12 + tmp1, CONST_BITS-PASS1_BITS); + 80120b2: 63cc str r4, [r1, #60] ; 0x3c + wsptr[DCTSIZE*5] = (int) RIGHT_SHIFT(tmp12 - tmp1, CONST_BITS-PASS1_BITS); + 80120b4: f8c1 309c str.w r3, [r1, #156] ; 0x9c + wsptr[DCTSIZE*3] = (int) RIGHT_SHIFT(tmp13 + tmp0, CONST_BITS-PASS1_BITS); + 80120b8: 9b02 ldr r3, [sp, #8] + 80120ba: 444b add r3, r9 + 80120bc: 12db asrs r3, r3, #11 + 80120be: 65cb str r3, [r1, #92] ; 0x5c + wsptr[DCTSIZE*4] = (int) RIGHT_SHIFT(tmp13 - tmp0, CONST_BITS-PASS1_BITS); + 80120c0: 9b02 ldr r3, [sp, #8] + 80120c2: eba3 0309 sub.w r3, r3, r9 + 80120c6: 12db asrs r3, r3, #11 + 80120c8: 67cb str r3, [r1, #124] ; 0x7c + wsptr++; + 80120ca: e747 b.n 8011f5c + z1 = MULTIPLY(z2 + z3, FIX_0_541196100); + 80120cc: 1902 adds r2, r0, r4 + 80120ce: f241 1751 movw r7, #4433 ; 0x1151 + 80120d2: 437a muls r2, r7 + tmp2 = z1 + MULTIPLY(z2, FIX_0_765366865); + 80120d4: f641 077e movw r7, #6270 ; 0x187e + 80120d8: fb07 2000 mla r0, r7, r0, r2 + tmp3 = z1 - MULTIPLY(z3, FIX_1_847759065); + 80120dc: 4f39 ldr r7, [pc, #228] ; (80121c4 ) + 80120de: fb07 2204 mla r2, r7, r4, r2 + tmp0 = (z2 + z3) << CONST_BITS; + 80120e2: 1874 adds r4, r6, r1 + tmp1 = (z2 - z3) << CONST_BITS; + 80120e4: 1b89 subs r1, r1, r6 + z1 = MULTIPLY(z2 + z3, FIX_1_175875602); /* sqrt(2) * c3 */ + 80120e6: f242 57a1 movw r7, #9633 ; 0x25a1 + tmp10 = tmp0 + tmp2; + 80120ea: eb00 3644 add.w r6, r0, r4, lsl #13 + tmp13 = tmp0 - tmp2; + 80120ee: ebc0 3044 rsb r0, r0, r4, lsl #13 + z2 = tmp0 + tmp2; + 80120f2: eb0e 040b add.w r4, lr, fp + tmp10 = tmp0 + tmp2; + 80120f6: 9602 str r6, [sp, #8] + tmp11 = tmp1 + tmp3; + 80120f8: eb02 3641 add.w r6, r2, r1, lsl #13 + tmp13 = tmp0 - tmp2; + 80120fc: 9003 str r0, [sp, #12] + z3 = tmp1 + tmp3; + 80120fe: eb0a 0008 add.w r0, sl, r8 + tmp12 = tmp1 - tmp3; + 8012102: ebc2 3241 rsb r2, r2, r1, lsl #13 + z1 = MULTIPLY(z2 + z3, FIX_1_175875602); /* sqrt(2) * c3 */ + 8012106: 1821 adds r1, r4, r0 + tmp12 = tmp1 - tmp3; + 8012108: 9204 str r2, [sp, #16] + z1 = MULTIPLY(z2 + z3, FIX_1_175875602); /* sqrt(2) * c3 */ + 801210a: 4379 muls r1, r7 + z2 += z1; + 801210c: 4f2e ldr r7, [pc, #184] ; (80121c8 ) + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp3, + 801210e: 9a00 ldr r2, [sp, #0] + z2 += z1; + 8012110: fb07 1404 mla r4, r7, r4, r1 + z3 += z1; + 8012114: 4f2d ldr r7, [pc, #180] ; (80121cc ) + 8012116: fb07 1100 mla r1, r7, r0, r1 + z1 = MULTIPLY(tmp0 + tmp3, - FIX_0_899976223); /* sqrt(2) * (c7-c3) */ + 801211a: eb0a 000b add.w r0, sl, fp + 801211e: 4f2c ldr r7, [pc, #176] ; (80121d0 ) + 8012120: 4378 muls r0, r7 + tmp0 += z1 + z2; + 8012122: f640 178e movw r7, #2446 ; 0x98e + 8012126: eb04 0c00 add.w ip, r4, r0 + tmp3 += z1 + z3; + 801212a: 4408 add r0, r1 + tmp0 += z1 + z2; + 801212c: fb07 cc0b mla ip, r7, fp, ip + tmp3 += z1 + z3; + 8012130: f243 0b0b movw fp, #12299 ; 0x300b + z1 = MULTIPLY(tmp1 + tmp2, - FIX_2_562915447); /* sqrt(2) * (-c1-c3) */ + 8012134: 4f27 ldr r7, [pc, #156] ; (80121d4 ) + tmp3 += z1 + z3; + 8012136: fb0b 000a mla r0, fp, sl, r0 + z1 = MULTIPLY(tmp1 + tmp2, - FIX_2_562915447); /* sqrt(2) * (-c1-c3) */ + 801213a: eb0e 0a08 add.w sl, lr, r8 + tmp1 += z1 + z3; + 801213e: f244 1bb3 movw fp, #16819 ; 0x41b3 + z1 = MULTIPLY(tmp1 + tmp2, - FIX_2_562915447); /* sqrt(2) * (-c1-c3) */ + 8012142: fb07 fa0a mul.w sl, r7, sl + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp3, + 8012146: 9f02 ldr r7, [sp, #8] + tmp1 += z1 + z3; + 8012148: 4451 add r1, sl + tmp2 += z1 + z2; + 801214a: 4454 add r4, sl + tmp1 += z1 + z3; + 801214c: fb0b 1108 mla r1, fp, r8, r1 + tmp2 += z1 + z2; + 8012150: f246 2854 movw r8, #25172 ; 0x6254 + 8012154: fb08 440e mla r4, r8, lr, r4 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp3, + 8012158: eb07 0e00 add.w lr, r7, r0 + 801215c: 9f01 ldr r7, [sp, #4] + & RANGE_MASK]; + 801215e: f3ce 4e89 ubfx lr, lr, #18, #10 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp3, + 8012162: f817 e00e ldrb.w lr, [r7, lr] + 8012166: 9f50 ldr r7, [sp, #320] ; 0x140 + 8012168: f802 e007 strb.w lr, [r2, r7] + outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp3, + 801216c: 9f02 ldr r7, [sp, #8] + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp12 + tmp1, + 801216e: 9a04 ldr r2, [sp, #16] + outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp3, + 8012170: 1a3f subs r7, r7, r0 + 8012172: 9801 ldr r0, [sp, #4] + & RANGE_MASK]; + 8012174: f3c7 4789 ubfx r7, r7, #18, #10 + outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp3, + 8012178: 5dc0 ldrb r0, [r0, r7] + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp11 + tmp2, + 801217a: 9f01 ldr r7, [sp, #4] + outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp3, + 801217c: 71d8 strb r0, [r3, #7] + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp11 + tmp2, + 801217e: 1930 adds r0, r6, r4 + outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp11 - tmp2, + 8012180: 1b36 subs r6, r6, r4 + & RANGE_MASK]; + 8012182: f3c0 4089 ubfx r0, r0, #18, #10 + & RANGE_MASK]; + 8012186: f3c6 4689 ubfx r6, r6, #18, #10 + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp11 + tmp2, + 801218a: 5c38 ldrb r0, [r7, r0] + 801218c: 7058 strb r0, [r3, #1] + outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp11 - tmp2, + 801218e: 5db8 ldrb r0, [r7, r6] + 8012190: 7198 strb r0, [r3, #6] + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp12 + tmp1, + 8012192: 1850 adds r0, r2, r1 + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp12 - tmp1, + 8012194: 1a52 subs r2, r2, r1 + & RANGE_MASK]; + 8012196: f3c0 4089 ubfx r0, r0, #18, #10 + & RANGE_MASK]; + 801219a: f3c2 4289 ubfx r2, r2, #18, #10 + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp12 + tmp1, + 801219e: 5c38 ldrb r0, [r7, r0] + 80121a0: 7098 strb r0, [r3, #2] + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp12 - tmp1, + 80121a2: 5cba ldrb r2, [r7, r2] + 80121a4: 715a strb r2, [r3, #5] + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp13 + tmp0, + 80121a6: 9a03 ldr r2, [sp, #12] + 80121a8: 4462 add r2, ip + & RANGE_MASK]; + 80121aa: f3c2 4289 ubfx r2, r2, #18, #10 + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp13 + tmp0, + 80121ae: 5cba ldrb r2, [r7, r2] + 80121b0: 70da strb r2, [r3, #3] + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp13 - tmp0, + 80121b2: 9a03 ldr r2, [sp, #12] + 80121b4: eba2 020c sub.w r2, r2, ip + & RANGE_MASK]; + 80121b8: f3c2 4289 ubfx r2, r2, #18, #10 + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp13 - tmp0, + 80121bc: 5cba ldrb r2, [r7, r2] + 80121be: 711a strb r2, [r3, #4] + wsptr += DCTSIZE; /* advance pointer to next row */ + 80121c0: e700 b.n 8011fc4 + 80121c2: bf00 nop + 80121c4: ffffc4df .word 0xffffc4df + 80121c8: ffffc13b .word 0xffffc13b + 80121cc: fffff384 .word 0xfffff384 + 80121d0: ffffe333 .word 0xffffe333 + 80121d4: ffffadfd .word 0xffffadfd + +080121d8 : + +GLOBAL(void) +jpeg_idct_7x7 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + 80121d8: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 80121dc: b0b9 sub sp, #228 ; 0xe4 + 80121de: 6d4d ldr r5, [r1, #84] ; 0x54 + 80121e0: 1e96 subs r6, r2, #2 + 80121e2: 9303 str r3, [sp, #12] + 80121e4: 3d04 subs r5, #4 + INT32 z1, z2, z3; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + int * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + 80121e6: f8d0 314c ldr.w r3, [r0, #332] ; 0x14c + + /* Pass 1: process columns from input, store into work array. */ + + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + 80121ea: f10d 0c1c add.w ip, sp, #28 + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + 80121ee: f103 0880 add.w r8, r3, #128 ; 0x80 + for (ctr = 0; ctr < 7; ctr++, inptr++, quantptr++, wsptr++) { + 80121f2: f102 030c add.w r3, r2, #12 + 80121f6: 9305 str r3, [sp, #20] + /* Even part */ + + tmp13 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 80121f8: f936 3f02 ldrsh.w r3, [r6, #2]! + z1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + z2 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + z3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + + tmp10 = MULTIPLY(z2 - z3, FIX(0.881747734)); /* c4 */ + tmp12 = MULTIPLY(z1 - z2, FIX(0.314692123)); /* c6 */ + 80121fc: f640 2112 movw r1, #2578 ; 0xa12 + tmp13 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 8012200: f855 2f04 ldr.w r2, [r5, #4]! + tmp11 = tmp10 + tmp12 + tmp13 - MULTIPLY(z2, FIX(1.841218003)); /* c2+c4-c6 */ + tmp0 = z1 + z3; + z2 -= tmp0; + tmp0 = MULTIPLY(tmp0, FIX(1.274162392)) + tmp13; /* c2 */ + 8012204: f642 09c6 movw r9, #10438 ; 0x28c6 + z1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + 8012208: f9b6 4020 ldrsh.w r4, [r6, #32] + for (ctr = 0; ctr < 7; ctr++, inptr++, quantptr++, wsptr++) { + 801220c: f10c 0c04 add.w ip, ip, #4 + tmp13 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 8012210: 4353 muls r3, r2 + z2 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + 8012212: f9b6 e040 ldrsh.w lr, [r6, #64] ; 0x40 + z3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + 8012216: f9b6 2060 ldrsh.w r2, [r6, #96] ; 0x60 + tmp13 <<= CONST_BITS; + 801221a: 035b lsls r3, r3, #13 + tmp13 += ONE << (CONST_BITS-PASS1_BITS-1); + 801221c: f503 6380 add.w r3, r3, #1024 ; 0x400 + 8012220: 9301 str r3, [sp, #4] + z1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + 8012222: 6c2b ldr r3, [r5, #64] ; 0x40 + 8012224: 435c muls r4, r3 + z2 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + 8012226: f8d5 3080 ldr.w r3, [r5, #128] ; 0x80 + 801222a: fb03 fe0e mul.w lr, r3, lr + z3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + 801222e: f8d5 30c0 ldr.w r3, [r5, #192] ; 0xc0 + 8012232: 435a muls r2, r3 + tmp10 = MULTIPLY(z2 - z3, FIX(0.881747734)); /* c4 */ + 8012234: f641 4337 movw r3, #7223 ; 0x1c37 + 8012238: ebae 0702 sub.w r7, lr, r2 + 801223c: 435f muls r7, r3 + tmp12 = MULTIPLY(z1 - z2, FIX(0.314692123)); /* c6 */ + 801223e: eba4 030e sub.w r3, r4, lr + 8012242: 434b muls r3, r1 + tmp11 = tmp10 + tmp12 + tmp13 - MULTIPLY(z2, FIX(1.841218003)); /* c2+c4-c6 */ + 8012244: 9901 ldr r1, [sp, #4] + 8012246: 18f8 adds r0, r7, r3 + 8012248: 4408 add r0, r1 + 801224a: 4985 ldr r1, [pc, #532] ; (8012460 ) + 801224c: fb01 010e mla r1, r1, lr, r0 + tmp0 = MULTIPLY(tmp0, FIX(1.274162392)) + tmp13; /* c2 */ + 8012250: 18a0 adds r0, r4, r2 + tmp11 = tmp10 + tmp12 + tmp13 - MULTIPLY(z2, FIX(1.841218003)); /* c2+c4-c6 */ + 8012252: 9102 str r1, [sp, #8] + tmp0 = z1 + z3; + 8012254: 18a1 adds r1, r4, r2 + 8012256: 9104 str r1, [sp, #16] + tmp0 = MULTIPLY(tmp0, FIX(1.274162392)) + tmp13; /* c2 */ + 8012258: 9901 ldr r1, [sp, #4] + 801225a: fb09 1100 mla r1, r9, r0, r1 + tmp10 += tmp0 - MULTIPLY(z3, FIX(0.077722536)); /* c2-c4-c6 */ + 801225e: f46f 701f mvn.w r0, #636 ; 0x27c + + /* Odd part */ + + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + 8012262: f9b6 9050 ldrsh.w r9, [r6, #80] ; 0x50 + tmp10 += tmp0 - MULTIPLY(z3, FIX(0.077722536)); /* c2-c4-c6 */ + 8012266: fb00 1202 mla r2, r0, r2, r1 + tmp12 += tmp0 - MULTIPLY(z1, FIX(2.470602249)); /* c2+c4+c6 */ + 801226a: 487e ldr r0, [pc, #504] ; (8012464 ) + 801226c: fb00 1104 mla r1, r0, r4, r1 + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 8012270: 6a2c ldr r4, [r5, #32] + tmp10 += tmp0 - MULTIPLY(z3, FIX(0.077722536)); /* c2-c4-c6 */ + 8012272: 443a add r2, r7 + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + 8012274: 6e2f ldr r7, [r5, #96] ; 0x60 + tmp12 += tmp0 - MULTIPLY(z1, FIX(2.470602249)); /* c2+c4+c6 */ + 8012276: 4419 add r1, r3 + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 8012278: f9b6 3010 ldrsh.w r3, [r6, #16] + + tmp1 = MULTIPLY(z1 + z2, FIX(0.935414347)); /* (c3+c1-c5)/2 */ + 801227c: f641 50ef movw r0, #7663 ; 0x1def + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 8012280: 4363 muls r3, r4 + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + 8012282: f9b6 4030 ldrsh.w r4, [r6, #48] ; 0x30 + 8012286: 437c muls r4, r7 + z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + 8012288: f8d5 70a0 ldr.w r7, [r5, #160] ; 0xa0 + tmp1 = MULTIPLY(z1 + z2, FIX(0.935414347)); /* (c3+c1-c5)/2 */ + 801228c: eb03 0b04 add.w fp, r3, r4 + z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + 8012290: fb07 f909 mul.w r9, r7, r9 + tmp2 = MULTIPLY(z1 - z2, FIX(0.170262339)); /* (c3+c5-c1)/2 */ + 8012294: 1b1f subs r7, r3, r4 + tmp1 = MULTIPLY(z1 + z2, FIX(0.935414347)); /* (c3+c1-c5)/2 */ + 8012296: fb00 fb0b mul.w fp, r0, fp + tmp2 = MULTIPLY(z1 - z2, FIX(0.170262339)); /* (c3+c5-c1)/2 */ + 801229a: f240 5073 movw r0, #1395 ; 0x573 + tmp0 = tmp1 - tmp2; + tmp1 += tmp2; + tmp2 = MULTIPLY(z2 + z3, - FIX(1.378756276)); /* -c1 */ + tmp1 += tmp2; + z2 = MULTIPLY(z1 + z3, FIX(0.613604268)); /* c5 */ + 801229e: 444b add r3, r9 + tmp2 = MULTIPLY(z2 + z3, - FIX(1.378756276)); /* -c1 */ + 80122a0: 444c add r4, r9 + tmp2 = MULTIPLY(z1 - z2, FIX(0.170262339)); /* (c3+c5-c1)/2 */ + 80122a2: 4347 muls r7, r0 + tmp2 = MULTIPLY(z2 + z3, - FIX(1.378756276)); /* -c1 */ + 80122a4: 4870 ldr r0, [pc, #448] ; (8012468 ) + tmp0 = tmp1 - tmp2; + 80122a6: ebab 0a07 sub.w sl, fp, r7 + tmp1 += tmp2; + 80122aa: 445f add r7, fp + z2 = MULTIPLY(z1 + z3, FIX(0.613604268)); /* c5 */ + 80122ac: f241 3ba3 movw fp, #5027 ; 0x13a3 + tmp2 = MULTIPLY(z2 + z3, - FIX(1.378756276)); /* -c1 */ + 80122b0: 4344 muls r4, r0 + z2 = MULTIPLY(z1 + z3, FIX(0.613604268)); /* c5 */ + 80122b2: fb0b f303 mul.w r3, fp, r3 + tmp0 += z2; + tmp2 += z2 + MULTIPLY(z3, FIX(1.870828693)); /* c3+c1-c5 */ + 80122b6: f643 3bde movw fp, #15326 ; 0x3bde + tmp1 += tmp2; + 80122ba: 4427 add r7, r4 + tmp0 += z2; + 80122bc: 449a add sl, r3 + tmp2 += z2 + MULTIPLY(z3, FIX(1.870828693)); /* c3+c1-c5 */ + 80122be: fb0b 3309 mla r3, fp, r9, r3 + 80122c2: 4423 add r3, r4 + + /* Final output stage */ + + wsptr[7*0] = (int) RIGHT_SHIFT(tmp10 + tmp0, CONST_BITS-PASS1_BITS); + 80122c4: eb02 040a add.w r4, r2, sl + wsptr[7*6] = (int) RIGHT_SHIFT(tmp10 - tmp0, CONST_BITS-PASS1_BITS); + 80122c8: eba2 020a sub.w r2, r2, sl + wsptr[7*0] = (int) RIGHT_SHIFT(tmp10 + tmp0, CONST_BITS-PASS1_BITS); + 80122cc: 12e4 asrs r4, r4, #11 + wsptr[7*6] = (int) RIGHT_SHIFT(tmp10 - tmp0, CONST_BITS-PASS1_BITS); + 80122ce: 12d2 asrs r2, r2, #11 + wsptr[7*0] = (int) RIGHT_SHIFT(tmp10 + tmp0, CONST_BITS-PASS1_BITS); + 80122d0: f84c 4c04 str.w r4, [ip, #-4] + wsptr[7*6] = (int) RIGHT_SHIFT(tmp10 - tmp0, CONST_BITS-PASS1_BITS); + 80122d4: f8cc 20a4 str.w r2, [ip, #164] ; 0xa4 + wsptr[7*1] = (int) RIGHT_SHIFT(tmp11 + tmp1, CONST_BITS-PASS1_BITS); + 80122d8: 9a02 ldr r2, [sp, #8] + 80122da: 443a add r2, r7 + 80122dc: 12d2 asrs r2, r2, #11 + 80122de: f8cc 2018 str.w r2, [ip, #24] + wsptr[7*5] = (int) RIGHT_SHIFT(tmp11 - tmp1, CONST_BITS-PASS1_BITS); + 80122e2: 9a02 ldr r2, [sp, #8] + 80122e4: 1bd0 subs r0, r2, r7 + wsptr[7*2] = (int) RIGHT_SHIFT(tmp12 + tmp2, CONST_BITS-PASS1_BITS); + 80122e6: 18ca adds r2, r1, r3 + wsptr[7*4] = (int) RIGHT_SHIFT(tmp12 - tmp2, CONST_BITS-PASS1_BITS); + 80122e8: 1ac9 subs r1, r1, r3 + z2 -= tmp0; + 80122ea: 9b04 ldr r3, [sp, #16] + wsptr[7*2] = (int) RIGHT_SHIFT(tmp12 + tmp2, CONST_BITS-PASS1_BITS); + 80122ec: 12d2 asrs r2, r2, #11 + z2 -= tmp0; + 80122ee: ebae 0e03 sub.w lr, lr, r3 + tmp13 += MULTIPLY(z2, FIX(1.414213562)); /* c0 */ + 80122f2: f642 5341 movw r3, #11585 ; 0x2d41 + wsptr[7*2] = (int) RIGHT_SHIFT(tmp12 + tmp2, CONST_BITS-PASS1_BITS); + 80122f6: f8cc 2034 str.w r2, [ip, #52] ; 0x34 + wsptr[7*5] = (int) RIGHT_SHIFT(tmp11 - tmp1, CONST_BITS-PASS1_BITS); + 80122fa: 12c0 asrs r0, r0, #11 + tmp13 += MULTIPLY(z2, FIX(1.414213562)); /* c0 */ + 80122fc: 9a01 ldr r2, [sp, #4] + wsptr[7*4] = (int) RIGHT_SHIFT(tmp12 - tmp2, CONST_BITS-PASS1_BITS); + 80122fe: 12c9 asrs r1, r1, #11 + wsptr[7*5] = (int) RIGHT_SHIFT(tmp11 - tmp1, CONST_BITS-PASS1_BITS); + 8012300: f8cc 0088 str.w r0, [ip, #136] ; 0x88 + tmp13 += MULTIPLY(z2, FIX(1.414213562)); /* c0 */ + 8012304: fb03 230e mla r3, r3, lr, r2 + wsptr[7*4] = (int) RIGHT_SHIFT(tmp12 - tmp2, CONST_BITS-PASS1_BITS); + 8012308: f8cc 106c str.w r1, [ip, #108] ; 0x6c + wsptr[7*3] = (int) RIGHT_SHIFT(tmp13, CONST_BITS-PASS1_BITS); + 801230c: 12db asrs r3, r3, #11 + 801230e: f8cc 3050 str.w r3, [ip, #80] ; 0x50 + for (ctr = 0; ctr < 7; ctr++, inptr++, quantptr++, wsptr++) { + 8012312: 9b05 ldr r3, [sp, #20] + 8012314: 42b3 cmp r3, r6 + 8012316: f47f af6f bne.w 80121f8 + 801231a: 9b03 ldr r3, [sp, #12] + } + + /* Pass 2: process 7 rows from work array, store into output array. */ + + wsptr = workspace; + 801231c: ac07 add r4, sp, #28 + 801231e: f1a3 0904 sub.w r9, r3, #4 + 8012322: 3318 adds r3, #24 + 8012324: 9305 str r3, [sp, #20] + for (ctr = 0; ctr < 7; ctr++) { + outptr = output_buf[ctr] + output_col; + 8012326: f859 3f04 ldr.w r3, [r9, #4]! + & RANGE_MASK]; + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp13, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + + wsptr += 7; /* advance pointer to next row */ + 801232a: 341c adds r4, #28 + tmp13 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + 801232c: f854 7c1c ldr.w r7, [r4, #-28] + outptr = output_buf[ctr] + output_col; + 8012330: 9a42 ldr r2, [sp, #264] ; 0x108 + 8012332: 9303 str r3, [sp, #12] + 8012334: 189e adds r6, r3, r2 + tmp13 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + 8012336: f107 0310 add.w r3, r7, #16 + z3 = (INT32) wsptr[6]; + 801233a: f854 1c04 ldr.w r1, [r4, #-4] + tmp13 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + 801233e: 9301 str r3, [sp, #4] + tmp10 = MULTIPLY(z2 - z3, FIX(0.881747734)); /* c4 */ + 8012340: f854 3c0c ldr.w r3, [r4, #-12] + z1 = (INT32) wsptr[2]; + 8012344: f854 5c14 ldr.w r5, [r4, #-20] + tmp10 = MULTIPLY(z2 - z3, FIX(0.881747734)); /* c4 */ + 8012348: eba3 0c01 sub.w ip, r3, r1 + 801234c: f641 4337 movw r3, #7223 ; 0x1c37 + tmp11 = tmp10 + tmp12 + tmp13 - MULTIPLY(z2, FIX(1.841218003)); /* c2+c4-c6 */ + 8012350: 4f43 ldr r7, [pc, #268] ; (8012460 ) + tmp10 = MULTIPLY(z2 - z3, FIX(0.881747734)); /* c4 */ + 8012352: fb03 fc0c mul.w ip, r3, ip + tmp12 = MULTIPLY(z1 - z2, FIX(0.314692123)); /* c6 */ + 8012356: f854 3c0c ldr.w r3, [r4, #-12] + z2 = (INT32) wsptr[3]; + 801235a: f854 ac10 ldr.w sl, [r4, #-16] + tmp12 = MULTIPLY(z1 - z2, FIX(0.314692123)); /* c6 */ + 801235e: 1aea subs r2, r5, r3 + 8012360: f640 2312 movw r3, #2578 ; 0xa12 + z3 = (INT32) wsptr[5]; + 8012364: f854 ec08 ldr.w lr, [r4, #-8] + tmp12 = MULTIPLY(z1 - z2, FIX(0.314692123)); /* c6 */ + 8012368: 435a muls r2, r3 + tmp11 = tmp10 + tmp12 + tmp13 - MULTIPLY(z2, FIX(1.841218003)); /* c2+c4-c6 */ + 801236a: 9b01 ldr r3, [sp, #4] + 801236c: eb0c 0002 add.w r0, ip, r2 + 8012370: eb00 3043 add.w r0, r0, r3, lsl #13 + 8012374: f854 3c0c ldr.w r3, [r4, #-12] + 8012378: fb07 0003 mla r0, r7, r3, r0 + tmp0 = z1 + z3; + 801237c: 186b adds r3, r5, r1 + tmp0 = MULTIPLY(tmp0, FIX(1.274162392)) + tmp13; /* c2 */ + 801237e: f642 07c6 movw r7, #10438 ; 0x28c6 + tmp0 = z1 + z3; + 8012382: 9304 str r3, [sp, #16] + tmp0 = MULTIPLY(tmp0, FIX(1.274162392)) + tmp13; /* c2 */ + 8012384: 437b muls r3, r7 + 8012386: 9f01 ldr r7, [sp, #4] + 8012388: eb03 3347 add.w r3, r3, r7, lsl #13 + tmp10 += tmp0 - MULTIPLY(z3, FIX(0.077722536)); /* c2-c4-c6 */ + 801238c: f46f 771f mvn.w r7, #636 ; 0x27c + 8012390: fb07 3101 mla r1, r7, r1, r3 + tmp12 += tmp0 - MULTIPLY(z1, FIX(2.470602249)); /* c2+c4+c6 */ + 8012394: 4f33 ldr r7, [pc, #204] ; (8012464 ) + 8012396: fb07 3305 mla r3, r7, r5, r3 + tmp2 = MULTIPLY(z1 - z2, FIX(0.170262339)); /* (c3+c5-c1)/2 */ + 801239a: f240 5773 movw r7, #1395 ; 0x573 + tmp10 += tmp0 - MULTIPLY(z3, FIX(0.077722536)); /* c2-c4-c6 */ + 801239e: 4461 add r1, ip + tmp12 += tmp0 - MULTIPLY(z1, FIX(2.470602249)); /* c2+c4+c6 */ + 80123a0: 4413 add r3, r2 + z1 = (INT32) wsptr[1]; + 80123a2: f854 2c18 ldr.w r2, [r4, #-24] + tmp12 += tmp0 - MULTIPLY(z1, FIX(2.470602249)); /* c2+c4+c6 */ + 80123a6: 9302 str r3, [sp, #8] + tmp1 = MULTIPLY(z1 + z2, FIX(0.935414347)); /* (c3+c1-c5)/2 */ + 80123a8: eb02 0b0a add.w fp, r2, sl + tmp2 = MULTIPLY(z1 - z2, FIX(0.170262339)); /* (c3+c5-c1)/2 */ + 80123ac: eba2 050a sub.w r5, r2, sl + tmp1 = MULTIPLY(z1 + z2, FIX(0.935414347)); /* (c3+c1-c5)/2 */ + 80123b0: f641 53ef movw r3, #7663 ; 0x1def + z2 = MULTIPLY(z1 + z3, FIX(0.613604268)); /* c5 */ + 80123b4: 4472 add r2, lr + tmp2 = MULTIPLY(z2 + z3, - FIX(1.378756276)); /* -c1 */ + 80123b6: 44f2 add sl, lr + tmp1 = MULTIPLY(z1 + z2, FIX(0.935414347)); /* (c3+c1-c5)/2 */ + 80123b8: fb03 fb0b mul.w fp, r3, fp + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0, + 80123bc: 9b42 ldr r3, [sp, #264] ; 0x108 + tmp2 = MULTIPLY(z1 - z2, FIX(0.170262339)); /* (c3+c5-c1)/2 */ + 80123be: 437d muls r5, r7 + tmp2 = MULTIPLY(z2 + z3, - FIX(1.378756276)); /* -c1 */ + 80123c0: 4f29 ldr r7, [pc, #164] ; (8012468 ) + tmp0 = tmp1 - tmp2; + 80123c2: ebab 0c05 sub.w ip, fp, r5 + tmp1 += tmp2; + 80123c6: 445d add r5, fp + z2 = MULTIPLY(z1 + z3, FIX(0.613604268)); /* c5 */ + 80123c8: f241 3ba3 movw fp, #5027 ; 0x13a3 + tmp2 = MULTIPLY(z2 + z3, - FIX(1.378756276)); /* -c1 */ + 80123cc: fb07 fa0a mul.w sl, r7, sl + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0, + 80123d0: 9f03 ldr r7, [sp, #12] + z2 = MULTIPLY(z1 + z3, FIX(0.613604268)); /* c5 */ + 80123d2: fb0b f202 mul.w r2, fp, r2 + tmp2 += z2 + MULTIPLY(z3, FIX(1.870828693)); /* c3+c1-c5 */ + 80123d6: f643 3bde movw fp, #15326 ; 0x3bde + tmp1 += tmp2; + 80123da: 4455 add r5, sl + tmp0 += z2; + 80123dc: 4494 add ip, r2 + tmp2 += z2 + MULTIPLY(z3, FIX(1.870828693)); /* c3+c1-c5 */ + 80123de: fb0b 220e mla r2, fp, lr, r2 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0, + 80123e2: eb01 0e0c add.w lr, r1, ip + outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp0, + 80123e6: eba1 010c sub.w r1, r1, ip + tmp2 += z2 + MULTIPLY(z3, FIX(1.870828693)); /* c3+c1-c5 */ + 80123ea: 4452 add r2, sl + & RANGE_MASK]; + 80123ec: f3ce 4e89 ubfx lr, lr, #18, #10 + & RANGE_MASK]; + 80123f0: f3c1 4189 ubfx r1, r1, #18, #10 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0, + 80123f4: f818 e00e ldrb.w lr, [r8, lr] + 80123f8: f807 e003 strb.w lr, [r7, r3] + outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp0, + 80123fc: f818 1001 ldrb.w r1, [r8, r1] + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp12 + tmp2, + 8012400: 9b02 ldr r3, [sp, #8] + outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp0, + 8012402: 71b1 strb r1, [r6, #6] + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp11 + tmp1, + 8012404: 1941 adds r1, r0, r5 + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp11 - tmp1, + 8012406: 1b40 subs r0, r0, r5 + & RANGE_MASK]; + 8012408: f3c1 4189 ubfx r1, r1, #18, #10 + & RANGE_MASK]; + 801240c: f3c0 4089 ubfx r0, r0, #18, #10 + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp11 + tmp1, + 8012410: f818 1001 ldrb.w r1, [r8, r1] + 8012414: 7071 strb r1, [r6, #1] + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp11 - tmp1, + 8012416: f818 1000 ldrb.w r1, [r8, r0] + 801241a: 7171 strb r1, [r6, #5] + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp12 + tmp2, + 801241c: 1899 adds r1, r3, r2 + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp12 - tmp2, + 801241e: 1a9b subs r3, r3, r2 + & RANGE_MASK]; + 8012420: f3c1 4189 ubfx r1, r1, #18, #10 + & RANGE_MASK]; + 8012424: f3c3 4389 ubfx r3, r3, #18, #10 + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp12 + tmp2, + 8012428: f818 1001 ldrb.w r1, [r8, r1] + 801242c: 70b1 strb r1, [r6, #2] + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp12 - tmp2, + 801242e: f818 3003 ldrb.w r3, [r8, r3] + 8012432: 7133 strb r3, [r6, #4] + z2 -= tmp0; + 8012434: f854 3c0c ldr.w r3, [r4, #-12] + 8012438: 9a04 ldr r2, [sp, #16] + 801243a: 1a9b subs r3, r3, r2 + tmp13 += MULTIPLY(z2, FIX(1.414213562)); /* c0 */ + 801243c: f642 5241 movw r2, #11585 ; 0x2d41 + 8012440: 4353 muls r3, r2 + 8012442: 9a01 ldr r2, [sp, #4] + 8012444: eb03 3342 add.w r3, r3, r2, lsl #13 + & RANGE_MASK]; + 8012448: f3c3 4389 ubfx r3, r3, #18, #10 + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp13, + 801244c: f818 3003 ldrb.w r3, [r8, r3] + 8012450: 70f3 strb r3, [r6, #3] + for (ctr = 0; ctr < 7; ctr++) { + 8012452: 9b05 ldr r3, [sp, #20] + 8012454: 454b cmp r3, r9 + 8012456: f47f af66 bne.w 8012326 + } +} + 801245a: b039 add sp, #228 ; 0xe4 + 801245c: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 8012460: ffffc515 .word 0xffffc515 + 8012464: ffffb0f1 .word 0xffffb0f1 + 8012468: ffffd3e1 .word 0xffffd3e1 + +0801246c : + +GLOBAL(void) +jpeg_idct_6x6 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + 801246c: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + INT32 z1, z2, z3; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + int * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + 8012470: f8d0 014c ldr.w r0, [r0, #332] ; 0x14c +{ + 8012474: b0a7 sub sp, #156 ; 0x9c + 8012476: 6d4d ldr r5, [r1, #84] ; 0x54 + 8012478: 1e96 subs r6, r2, #2 + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + 801247a: 3080 adds r0, #128 ; 0x80 + 801247c: 320a adds r2, #10 + 801247e: 3d04 subs r5, #4 + + /* Pass 1: process columns from input, store into work array. */ + + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + 8012480: af02 add r7, sp, #8 + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + 8012482: 9000 str r0, [sp, #0] + for (ctr = 0; ctr < 6; ctr++, inptr++, quantptr++, wsptr++) { + 8012484: 9201 str r2, [sp, #4] + /* Even part */ + + tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 8012486: f936 1f02 ldrsh.w r1, [r6, #2]! + tmp2 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + tmp10 = MULTIPLY(tmp2, FIX(0.707106781)); /* c4 */ + tmp1 = tmp0 + tmp10; + tmp11 = RIGHT_SHIFT(tmp0 - tmp10 - tmp10, CONST_BITS-PASS1_BITS); + tmp10 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + tmp0 = MULTIPLY(tmp10, FIX(1.224744871)); /* c2 */ + 801248a: f242 7031 movw r0, #10033 ; 0x2731 + tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 801248e: f855 2f04 ldr.w r2, [r5, #4]! + for (ctr = 0; ctr < 6; ctr++, inptr++, quantptr++, wsptr++) { + 8012492: 3704 adds r7, #4 + tmp2 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + 8012494: f9b6 4040 ldrsh.w r4, [r6, #64] ; 0x40 + tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 8012498: 4351 muls r1, r2 + tmp2 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + 801249a: f8d5 2080 ldr.w r2, [r5, #128] ; 0x80 + tmp10 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + 801249e: f9b6 c020 ldrsh.w ip, [r6, #32] + tmp2 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + 80124a2: 4362 muls r2, r4 + tmp0 <<= CONST_BITS; + 80124a4: 0349 lsls r1, r1, #13 + tmp10 = MULTIPLY(tmp2, FIX(0.707106781)); /* c4 */ + 80124a6: f241 64a1 movw r4, #5793 ; 0x16a1 + tmp12 = tmp1 - tmp0; + + /* Odd part */ + + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + 80124aa: f9b6 9030 ldrsh.w r9, [r6, #48] ; 0x30 + tmp0 += ONE << (CONST_BITS-PASS1_BITS-1); + 80124ae: f501 6180 add.w r1, r1, #1024 ; 0x400 + z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + 80124b2: f9b6 8050 ldrsh.w r8, [r6, #80] ; 0x50 + tmp10 = MULTIPLY(tmp2, FIX(0.707106781)); /* c4 */ + 80124b6: 4362 muls r2, r4 + tmp1 = tmp0 + tmp10; + 80124b8: 188c adds r4, r1, r2 + tmp11 = RIGHT_SHIFT(tmp0 - tmp10 - tmp10, CONST_BITS-PASS1_BITS); + 80124ba: eba1 0142 sub.w r1, r1, r2, lsl #1 + tmp10 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + 80124be: 6c2a ldr r2, [r5, #64] ; 0x40 + 80124c0: fb02 f20c mul.w r2, r2, ip + tmp0 = MULTIPLY(tmp10, FIX(1.224744871)); /* c2 */ + 80124c4: 4342 muls r2, r0 + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 80124c6: 6a28 ldr r0, [r5, #32] + tmp10 = tmp1 + tmp0; + 80124c8: eb04 0e02 add.w lr, r4, r2 + tmp12 = tmp1 - tmp0; + 80124cc: 1aa4 subs r4, r4, r2 + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 80124ce: f9b6 2010 ldrsh.w r2, [r6, #16] + 80124d2: 4342 muls r2, r0 + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + 80124d4: 6e28 ldr r0, [r5, #96] ; 0x60 + 80124d6: fb00 f909 mul.w r9, r0, r9 + z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + 80124da: f8d5 00a0 ldr.w r0, [r5, #160] ; 0xa0 + 80124de: fb00 f808 mul.w r8, r0, r8 + tmp1 = MULTIPLY(z1 + z3, FIX(0.366025404)); /* c5 */ + 80124e2: f640 30b6 movw r0, #2998 ; 0xbb6 + tmp0 = tmp1 + ((z1 + z2) << CONST_BITS); + 80124e6: eb02 0a09 add.w sl, r2, r9 + tmp1 = MULTIPLY(z1 + z3, FIX(0.366025404)); /* c5 */ + 80124ea: eb02 0c08 add.w ip, r2, r8 + tmp2 = tmp1 + ((z3 - z2) << CONST_BITS); + tmp1 = (z1 - z2 - z3) << PASS1_BITS; + 80124ee: eba2 0209 sub.w r2, r2, r9 + tmp2 = tmp1 + ((z3 - z2) << CONST_BITS); + 80124f2: eba8 0b09 sub.w fp, r8, r9 + tmp1 = MULTIPLY(z1 + z3, FIX(0.366025404)); /* c5 */ + 80124f6: fb00 fc0c mul.w ip, r0, ip + tmp1 = (z1 - z2 - z3) << PASS1_BITS; + 80124fa: eba2 0208 sub.w r2, r2, r8 + tmp0 = tmp1 + ((z1 + z2) << CONST_BITS); + 80124fe: eb0c 3a4a add.w sl, ip, sl, lsl #13 + tmp1 = (z1 - z2 - z3) << PASS1_BITS; + 8012502: 0092 lsls r2, r2, #2 + + /* Final output stage */ + + wsptr[6*0] = (int) RIGHT_SHIFT(tmp10 + tmp0, CONST_BITS-PASS1_BITS); + 8012504: eb0e 080a add.w r8, lr, sl + wsptr[6*5] = (int) RIGHT_SHIFT(tmp10 - tmp0, CONST_BITS-PASS1_BITS); + 8012508: ebae 0e0a sub.w lr, lr, sl + tmp2 = tmp1 + ((z3 - z2) << CONST_BITS); + 801250c: eb0c 3c4b add.w ip, ip, fp, lsl #13 + wsptr[6*5] = (int) RIGHT_SHIFT(tmp10 - tmp0, CONST_BITS-PASS1_BITS); + 8012510: ea4f 2eee mov.w lr, lr, asr #11 + wsptr[6*0] = (int) RIGHT_SHIFT(tmp10 + tmp0, CONST_BITS-PASS1_BITS); + 8012514: ea4f 28e8 mov.w r8, r8, asr #11 + wsptr[6*5] = (int) RIGHT_SHIFT(tmp10 - tmp0, CONST_BITS-PASS1_BITS); + 8012518: f8c7 e074 str.w lr, [r7, #116] ; 0x74 + wsptr[6*1] = (int) (tmp11 + tmp1); + 801251c: eb02 2ee1 add.w lr, r2, r1, asr #11 + wsptr[6*4] = (int) (tmp11 - tmp1); + 8012520: ebc2 22e1 rsb r2, r2, r1, asr #11 + wsptr[6*0] = (int) RIGHT_SHIFT(tmp10 + tmp0, CONST_BITS-PASS1_BITS); + 8012524: f847 8c04 str.w r8, [r7, #-4] + wsptr[6*1] = (int) (tmp11 + tmp1); + 8012528: f8c7 e014 str.w lr, [r7, #20] + wsptr[6*4] = (int) (tmp11 - tmp1); + 801252c: 65fa str r2, [r7, #92] ; 0x5c + wsptr[6*2] = (int) RIGHT_SHIFT(tmp12 + tmp2, CONST_BITS-PASS1_BITS); + 801252e: eb04 020c add.w r2, r4, ip + wsptr[6*3] = (int) RIGHT_SHIFT(tmp12 - tmp2, CONST_BITS-PASS1_BITS); + 8012532: eba4 040c sub.w r4, r4, ip + wsptr[6*2] = (int) RIGHT_SHIFT(tmp12 + tmp2, CONST_BITS-PASS1_BITS); + 8012536: 12d2 asrs r2, r2, #11 + wsptr[6*3] = (int) RIGHT_SHIFT(tmp12 - tmp2, CONST_BITS-PASS1_BITS); + 8012538: 12e4 asrs r4, r4, #11 + wsptr[6*2] = (int) RIGHT_SHIFT(tmp12 + tmp2, CONST_BITS-PASS1_BITS); + 801253a: 62fa str r2, [r7, #44] ; 0x2c + for (ctr = 0; ctr < 6; ctr++, inptr++, quantptr++, wsptr++) { + 801253c: 9a01 ldr r2, [sp, #4] + wsptr[6*3] = (int) RIGHT_SHIFT(tmp12 - tmp2, CONST_BITS-PASS1_BITS); + 801253e: 647c str r4, [r7, #68] ; 0x44 + for (ctr = 0; ctr < 6; ctr++, inptr++, quantptr++, wsptr++) { + 8012540: 42b2 cmp r2, r6 + 8012542: d1a0 bne.n 8012486 + 8012544: f1a3 0e04 sub.w lr, r3, #4 + 8012548: f103 0914 add.w r9, r3, #20 + } + + /* Pass 2: process 6 rows from work array, store into output array. */ + + wsptr = workspace; + 801254c: a902 add r1, sp, #8 + for (ctr = 0; ctr < 6; ctr++) { + outptr = output_buf[ctr] + output_col; + 801254e: f85e af04 ldr.w sl, [lr, #4]! + + /* Add fudge factor here for final descale. */ + tmp0 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + tmp0 <<= CONST_BITS; + tmp2 = (INT32) wsptr[4]; + tmp10 = MULTIPLY(tmp2, FIX(0.707106781)); /* c4 */ + 8012552: f241 60a1 movw r0, #5793 ; 0x16a1 + outptr = output_buf[ctr] + output_col; + 8012556: 9b30 ldr r3, [sp, #192] ; 0xc0 + & RANGE_MASK]; + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp12 - tmp2, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + + wsptr += 6; /* advance pointer to next row */ + 8012558: 3118 adds r1, #24 + tmp10 = MULTIPLY(tmp2, FIX(0.707106781)); /* c4 */ + 801255a: f851 2c08 ldr.w r2, [r1, #-8] + for (ctr = 0; ctr < 6; ctr++) { + 801255e: 45f1 cmp r9, lr + outptr = output_buf[ctr] + output_col; + 8012560: eb0a 0703 add.w r7, sl, r3 + tmp0 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + 8012564: f851 3c18 ldr.w r3, [r1, #-24] + tmp10 = MULTIPLY(tmp2, FIX(0.707106781)); /* c4 */ + 8012568: fb00 f402 mul.w r4, r0, r2 + tmp0 = MULTIPLY(tmp10, FIX(1.224744871)); /* c2 */ + 801256c: f242 7031 movw r0, #10033 ; 0x2731 + tmp0 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + 8012570: f103 0310 add.w r3, r3, #16 + z3 = (INT32) wsptr[5]; + 8012574: f851 8c04 ldr.w r8, [r1, #-4] + tmp1 = tmp0 + tmp10; + 8012578: eb04 3243 add.w r2, r4, r3, lsl #13 + tmp11 = tmp0 - tmp10 - tmp10; + 801257c: ebc4 3343 rsb r3, r4, r3, lsl #13 + 8012580: eba3 0304 sub.w r3, r3, r4 + tmp0 = MULTIPLY(tmp10, FIX(1.224744871)); /* c2 */ + 8012584: f851 4c10 ldr.w r4, [r1, #-16] + 8012588: fb00 f404 mul.w r4, r0, r4 + tmp1 = MULTIPLY(z1 + z3, FIX(0.366025404)); /* c5 */ + 801258c: f640 30b6 movw r0, #2998 ; 0xbb6 + tmp10 = tmp1 + tmp0; + 8012590: eb02 0604 add.w r6, r2, r4 + tmp12 = tmp1 - tmp0; + 8012594: eba2 0204 sub.w r2, r2, r4 + z1 = (INT32) wsptr[1]; + 8012598: f851 4c14 ldr.w r4, [r1, #-20] + tmp1 = MULTIPLY(z1 + z3, FIX(0.366025404)); /* c5 */ + 801259c: eb04 0508 add.w r5, r4, r8 + 80125a0: fb00 f505 mul.w r5, r0, r5 + tmp0 = tmp1 + ((z1 + z2) << CONST_BITS); + 80125a4: f851 0c0c ldr.w r0, [r1, #-12] + 80125a8: eb04 0c00 add.w ip, r4, r0 + tmp1 = (z1 - z2 - z3) << CONST_BITS; + 80125ac: eba4 0400 sub.w r4, r4, r0 + tmp2 = tmp1 + ((z3 - z2) << CONST_BITS); + 80125b0: eba8 0b00 sub.w fp, r8, r0 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0, + 80125b4: 9800 ldr r0, [sp, #0] + tmp0 = tmp1 + ((z1 + z2) << CONST_BITS); + 80125b6: eb05 3c4c add.w ip, r5, ip, lsl #13 + tmp1 = (z1 - z2 - z3) << CONST_BITS; + 80125ba: eba4 0408 sub.w r4, r4, r8 + tmp2 = tmp1 + ((z3 - z2) << CONST_BITS); + 80125be: eb05 354b add.w r5, r5, fp, lsl #13 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0, + 80125c2: eb06 080c add.w r8, r6, ip + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp0, + 80125c6: eba6 060c sub.w r6, r6, ip + & RANGE_MASK]; + 80125ca: f3c8 4889 ubfx r8, r8, #18, #10 + & RANGE_MASK]; + 80125ce: f3c6 4689 ubfx r6, r6, #18, #10 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0, + 80125d2: f810 8008 ldrb.w r8, [r0, r8] + 80125d6: 9830 ldr r0, [sp, #192] ; 0xc0 + 80125d8: f80a 8000 strb.w r8, [sl, r0] + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp0, + 80125dc: 9800 ldr r0, [sp, #0] + 80125de: 5d86 ldrb r6, [r0, r6] + 80125e0: 717e strb r6, [r7, #5] + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp11 + tmp1, + 80125e2: eb03 3644 add.w r6, r3, r4, lsl #13 + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp11 - tmp1, + 80125e6: eba3 3344 sub.w r3, r3, r4, lsl #13 + & RANGE_MASK]; + 80125ea: f3c6 4689 ubfx r6, r6, #18, #10 + & RANGE_MASK]; + 80125ee: f3c3 4389 ubfx r3, r3, #18, #10 + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp11 + tmp1, + 80125f2: 5d86 ldrb r6, [r0, r6] + 80125f4: 707e strb r6, [r7, #1] + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp11 - tmp1, + 80125f6: 5cc3 ldrb r3, [r0, r3] + 80125f8: 713b strb r3, [r7, #4] + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp12 + tmp2, + 80125fa: eb02 0305 add.w r3, r2, r5 + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp12 - tmp2, + 80125fe: eba2 0205 sub.w r2, r2, r5 + & RANGE_MASK]; + 8012602: f3c3 4389 ubfx r3, r3, #18, #10 + & RANGE_MASK]; + 8012606: f3c2 4289 ubfx r2, r2, #18, #10 + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp12 + tmp2, + 801260a: 5cc3 ldrb r3, [r0, r3] + 801260c: 70bb strb r3, [r7, #2] + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp12 - tmp2, + 801260e: 5c83 ldrb r3, [r0, r2] + 8012610: 70fb strb r3, [r7, #3] + for (ctr = 0; ctr < 6; ctr++) { + 8012612: d19c bne.n 801254e + } +} + 8012614: b027 add sp, #156 ; 0x9c + 8012616: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + ... + +0801261c : + +GLOBAL(void) +jpeg_idct_5x5 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + 801261c: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + INT32 z1, z2, z3; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + int * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + 8012620: f8d0 014c ldr.w r0, [r0, #332] ; 0x14c +{ + 8012624: b09d sub sp, #116 ; 0x74 + 8012626: 6d4d ldr r5, [r1, #84] ; 0x54 + 8012628: 1e96 subs r6, r2, #2 + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + 801262a: 3080 adds r0, #128 ; 0x80 + 801262c: 3208 adds r2, #8 + 801262e: 3d04 subs r5, #4 + + /* Pass 1: process columns from input, store into work array. */ + + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + 8012630: af03 add r7, sp, #12 + tmp12 <<= CONST_BITS; + /* Add fudge factor here for final descale. */ + tmp12 += ONE << (CONST_BITS-PASS1_BITS-1); + tmp0 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + tmp1 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + z1 = MULTIPLY(tmp0 + tmp1, FIX(0.790569415)); /* (c2+c4)/2 */ + 8012632: f641 1e4c movw lr, #6476 ; 0x194c + z2 = MULTIPLY(tmp0 - tmp1, FIX(0.353553391)); /* (c2-c4)/2 */ + 8012636: f44f 6c35 mov.w ip, #2896 ; 0xb50 + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + 801263a: 9000 str r0, [sp, #0] + for (ctr = 0; ctr < 5; ctr++, inptr++, quantptr++, wsptr++) { + 801263c: 9201 str r2, [sp, #4] + tmp12 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 801263e: f936 2f02 ldrsh.w r2, [r6, #2]! + for (ctr = 0; ctr < 5; ctr++, inptr++, quantptr++, wsptr++) { + 8012642: 3704 adds r7, #4 + tmp12 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 8012644: f855 1f04 ldr.w r1, [r5, #4]! + tmp1 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + 8012648: f9b6 8040 ldrsh.w r8, [r6, #64] ; 0x40 + tmp12 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 801264c: 434a muls r2, r1 + tmp0 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + 801264e: 6c2c ldr r4, [r5, #64] ; 0x40 + 8012650: f9b6 1020 ldrsh.w r1, [r6, #32] + tmp11 = z3 - z1; + tmp12 -= z2 << 2; + + /* Odd part */ + + z2 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 8012654: 6a28 ldr r0, [r5, #32] + tmp12 <<= CONST_BITS; + 8012656: 0352 lsls r2, r2, #13 + tmp0 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + 8012658: 4361 muls r1, r4 + tmp1 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + 801265a: f8d5 4080 ldr.w r4, [r5, #128] ; 0x80 + z2 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 801265e: f9b6 a010 ldrsh.w sl, [r6, #16] + tmp12 += ONE << (CONST_BITS-PASS1_BITS-1); + 8012662: f502 6280 add.w r2, r2, #1024 ; 0x400 + tmp1 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + 8012666: fb04 f408 mul.w r4, r4, r8 + z3 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + 801266a: f9b6 b030 ldrsh.w fp, [r6, #48] ; 0x30 + z2 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 801266e: fb00 fa0a mul.w sl, r0, sl + z3 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + 8012672: 6e28 ldr r0, [r5, #96] ; 0x60 + z1 = MULTIPLY(tmp0 + tmp1, FIX(0.790569415)); /* (c2+c4)/2 */ + 8012674: eb01 0804 add.w r8, r1, r4 + z2 = MULTIPLY(tmp0 - tmp1, FIX(0.353553391)); /* (c2-c4)/2 */ + 8012678: 1b09 subs r1, r1, r4 + z3 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + 801267a: fb00 fb0b mul.w fp, r0, fp + + z1 = MULTIPLY(z2 + z3, FIX(0.831253876)); /* c3 */ + 801267e: f641 209a movw r0, #6810 ; 0x1a9a + z2 = MULTIPLY(tmp0 - tmp1, FIX(0.353553391)); /* (c2-c4)/2 */ + 8012682: fb0c f101 mul.w r1, ip, r1 + z1 = MULTIPLY(tmp0 + tmp1, FIX(0.790569415)); /* (c2+c4)/2 */ + 8012686: fb0e f808 mul.w r8, lr, r8 + z3 = tmp12 + z2; + 801268a: 1854 adds r4, r2, r1 + tmp12 -= z2 << 2; + 801268c: eba2 0281 sub.w r2, r2, r1, lsl #2 + tmp10 = z3 + z1; + 8012690: eb08 0904 add.w r9, r8, r4 + tmp11 = z3 - z1; + 8012694: eba4 0408 sub.w r4, r4, r8 + z1 = MULTIPLY(z2 + z3, FIX(0.831253876)); /* c3 */ + 8012698: eb0a 080b add.w r8, sl, fp + + wsptr[5*0] = (int) RIGHT_SHIFT(tmp10 + tmp0, CONST_BITS-PASS1_BITS); + wsptr[5*4] = (int) RIGHT_SHIFT(tmp10 - tmp0, CONST_BITS-PASS1_BITS); + wsptr[5*1] = (int) RIGHT_SHIFT(tmp11 + tmp1, CONST_BITS-PASS1_BITS); + wsptr[5*3] = (int) RIGHT_SHIFT(tmp11 - tmp1, CONST_BITS-PASS1_BITS); + wsptr[5*2] = (int) RIGHT_SHIFT(tmp12, CONST_BITS-PASS1_BITS); + 801269c: 12d2 asrs r2, r2, #11 + z1 = MULTIPLY(z2 + z3, FIX(0.831253876)); /* c3 */ + 801269e: fb00 f808 mul.w r8, r0, r8 + tmp0 = z1 + MULTIPLY(z2, FIX(0.513743148)); /* c1-c3 */ + 80126a2: f241 0071 movw r0, #4209 ; 0x1071 + wsptr[5*2] = (int) RIGHT_SHIFT(tmp12, CONST_BITS-PASS1_BITS); + 80126a6: 627a str r2, [r7, #36] ; 0x24 + tmp0 = z1 + MULTIPLY(z2, FIX(0.513743148)); /* c1-c3 */ + 80126a8: fb00 8a0a mla sl, r0, sl, r8 + tmp1 = z1 - MULTIPLY(z3, FIX(2.176250899)); /* c1+c3 */ + 80126ac: 483a ldr r0, [pc, #232] ; (8012798 ) + for (ctr = 0; ctr < 5; ctr++, inptr++, quantptr++, wsptr++) { + 80126ae: 9a01 ldr r2, [sp, #4] + tmp1 = z1 - MULTIPLY(z3, FIX(2.176250899)); /* c1+c3 */ + 80126b0: fb00 880b mla r8, r0, fp, r8 + wsptr[5*0] = (int) RIGHT_SHIFT(tmp10 + tmp0, CONST_BITS-PASS1_BITS); + 80126b4: eb09 0b0a add.w fp, r9, sl + wsptr[5*4] = (int) RIGHT_SHIFT(tmp10 - tmp0, CONST_BITS-PASS1_BITS); + 80126b8: eba9 090a sub.w r9, r9, sl + for (ctr = 0; ctr < 5; ctr++, inptr++, quantptr++, wsptr++) { + 80126bc: 42b2 cmp r2, r6 + wsptr[5*0] = (int) RIGHT_SHIFT(tmp10 + tmp0, CONST_BITS-PASS1_BITS); + 80126be: ea4f 2beb mov.w fp, fp, asr #11 + wsptr[5*4] = (int) RIGHT_SHIFT(tmp10 - tmp0, CONST_BITS-PASS1_BITS); + 80126c2: ea4f 29e9 mov.w r9, r9, asr #11 + wsptr[5*0] = (int) RIGHT_SHIFT(tmp10 + tmp0, CONST_BITS-PASS1_BITS); + 80126c6: f847 bc04 str.w fp, [r7, #-4] + wsptr[5*4] = (int) RIGHT_SHIFT(tmp10 - tmp0, CONST_BITS-PASS1_BITS); + 80126ca: f8c7 904c str.w r9, [r7, #76] ; 0x4c + wsptr[5*1] = (int) RIGHT_SHIFT(tmp11 + tmp1, CONST_BITS-PASS1_BITS); + 80126ce: eb04 0908 add.w r9, r4, r8 + wsptr[5*3] = (int) RIGHT_SHIFT(tmp11 - tmp1, CONST_BITS-PASS1_BITS); + 80126d2: eba4 0408 sub.w r4, r4, r8 + wsptr[5*1] = (int) RIGHT_SHIFT(tmp11 + tmp1, CONST_BITS-PASS1_BITS); + 80126d6: ea4f 29e9 mov.w r9, r9, asr #11 + wsptr[5*3] = (int) RIGHT_SHIFT(tmp11 - tmp1, CONST_BITS-PASS1_BITS); + 80126da: ea4f 24e4 mov.w r4, r4, asr #11 + wsptr[5*1] = (int) RIGHT_SHIFT(tmp11 + tmp1, CONST_BITS-PASS1_BITS); + 80126de: f8c7 9010 str.w r9, [r7, #16] + wsptr[5*3] = (int) RIGHT_SHIFT(tmp11 - tmp1, CONST_BITS-PASS1_BITS); + 80126e2: 63bc str r4, [r7, #56] ; 0x38 + for (ctr = 0; ctr < 5; ctr++, inptr++, quantptr++, wsptr++) { + 80126e4: d1ab bne.n 801263e + 80126e6: f1a3 0e04 sub.w lr, r3, #4 + } + + /* Pass 2: process 5 rows from work array, store into output array. */ + + wsptr = workspace; + 80126ea: a903 add r1, sp, #12 + 80126ec: 3310 adds r3, #16 + /* Add fudge factor here for final descale. */ + tmp12 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + tmp12 <<= CONST_BITS; + tmp0 = (INT32) wsptr[2]; + tmp1 = (INT32) wsptr[4]; + z1 = MULTIPLY(tmp0 + tmp1, FIX(0.790569415)); /* (c2+c4)/2 */ + 80126ee: f641 1a4c movw sl, #6476 ; 0x194c + z2 = MULTIPLY(tmp0 - tmp1, FIX(0.353553391)); /* (c2-c4)/2 */ + 80126f2: f44f 6935 mov.w r9, #2896 ; 0xb50 + 80126f6: 9301 str r3, [sp, #4] + outptr = output_buf[ctr] + output_col; + 80126f8: f85e 8f04 ldr.w r8, [lr, #4]! + /* Odd part */ + + z2 = (INT32) wsptr[1]; + z3 = (INT32) wsptr[3]; + + z1 = MULTIPLY(z2 + z3, FIX(0.831253876)); /* c3 */ + 80126fc: f641 209a movw r0, #6810 ; 0x1a9a + outptr = output_buf[ctr] + output_col; + 8012700: 9b26 ldr r3, [sp, #152] ; 0x98 + & RANGE_MASK]; + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp12, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + + wsptr += 5; /* advance pointer to next row */ + 8012702: 3114 adds r1, #20 + tmp1 = (INT32) wsptr[4]; + 8012704: f851 2c04 ldr.w r2, [r1, #-4] + outptr = output_buf[ctr] + output_col; + 8012708: eb08 0703 add.w r7, r8, r3 + tmp12 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + 801270c: f851 3c14 ldr.w r3, [r1, #-20] + z3 = (INT32) wsptr[3]; + 8012710: f851 bc08 ldr.w fp, [r1, #-8] + tmp12 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + 8012714: f103 0c10 add.w ip, r3, #16 + tmp0 = (INT32) wsptr[2]; + 8012718: f851 3c0c ldr.w r3, [r1, #-12] + z2 = (INT32) wsptr[1]; + 801271c: f851 6c10 ldr.w r6, [r1, #-16] + z1 = MULTIPLY(tmp0 + tmp1, FIX(0.790569415)); /* (c2+c4)/2 */ + 8012720: 189c adds r4, r3, r2 + z2 = MULTIPLY(tmp0 - tmp1, FIX(0.353553391)); /* (c2-c4)/2 */ + 8012722: 1a9b subs r3, r3, r2 + 8012724: fb09 f303 mul.w r3, r9, r3 + z1 = MULTIPLY(tmp0 + tmp1, FIX(0.790569415)); /* (c2+c4)/2 */ + 8012728: fb0a f404 mul.w r4, sl, r4 + z3 = tmp12 + z2; + 801272c: eb03 324c add.w r2, r3, ip, lsl #13 + tmp12 -= z2 << 2; + 8012730: 009b lsls r3, r3, #2 + tmp10 = z3 + z1; + 8012732: 18a5 adds r5, r4, r2 + tmp11 = z3 - z1; + 8012734: 1b12 subs r2, r2, r4 + z1 = MULTIPLY(z2 + z3, FIX(0.831253876)); /* c3 */ + 8012736: eb06 040b add.w r4, r6, fp + tmp12 -= z2 << 2; + 801273a: ebc3 334c rsb r3, r3, ip, lsl #13 + z1 = MULTIPLY(z2 + z3, FIX(0.831253876)); /* c3 */ + 801273e: 4344 muls r4, r0 + tmp0 = z1 + MULTIPLY(z2, FIX(0.513743148)); /* c1-c3 */ + 8012740: f241 0071 movw r0, #4209 ; 0x1071 + & RANGE_MASK]; + 8012744: f3c3 4389 ubfx r3, r3, #18, #10 + tmp0 = z1 + MULTIPLY(z2, FIX(0.513743148)); /* c1-c3 */ + 8012748: fb00 4606 mla r6, r0, r6, r4 + tmp1 = z1 - MULTIPLY(z3, FIX(2.176250899)); /* c1+c3 */ + 801274c: 4812 ldr r0, [pc, #72] ; (8012798 ) + 801274e: fb00 440b mla r4, r0, fp, r4 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0, + 8012752: eb05 0b06 add.w fp, r5, r6 + 8012756: 9800 ldr r0, [sp, #0] + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp0, + 8012758: 1bad subs r5, r5, r6 + & RANGE_MASK]; + 801275a: f3cb 4b89 ubfx fp, fp, #18, #10 + & RANGE_MASK]; + 801275e: f3c5 4589 ubfx r5, r5, #18, #10 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0, + 8012762: f810 b00b ldrb.w fp, [r0, fp] + 8012766: 9826 ldr r0, [sp, #152] ; 0x98 + 8012768: f808 b000 strb.w fp, [r8, r0] + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp0, + 801276c: 9800 ldr r0, [sp, #0] + 801276e: 5d45 ldrb r5, [r0, r5] + 8012770: 713d strb r5, [r7, #4] + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp11 + tmp1, + 8012772: 1915 adds r5, r2, r4 + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp11 - tmp1, + 8012774: 1b12 subs r2, r2, r4 + & RANGE_MASK]; + 8012776: f3c5 4589 ubfx r5, r5, #18, #10 + & RANGE_MASK]; + 801277a: f3c2 4289 ubfx r2, r2, #18, #10 + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp11 + tmp1, + 801277e: 5d45 ldrb r5, [r0, r5] + 8012780: 707d strb r5, [r7, #1] + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp11 - tmp1, + 8012782: 5c82 ldrb r2, [r0, r2] + 8012784: 70fa strb r2, [r7, #3] + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp12, + 8012786: 5cc3 ldrb r3, [r0, r3] + 8012788: 70bb strb r3, [r7, #2] + for (ctr = 0; ctr < 5; ctr++) { + 801278a: 9b01 ldr r3, [sp, #4] + 801278c: 4573 cmp r3, lr + 801278e: d1b3 bne.n 80126f8 + } +} + 8012790: b01d add sp, #116 ; 0x74 + 8012792: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 8012796: bf00 nop + 8012798: ffffba5c .word 0xffffba5c + +0801279c : + +GLOBAL(void) +jpeg_idct_4x4 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + 801279c: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + INT32 z1, z2, z3; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + int * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + 80127a0: f8d0 614c ldr.w r6, [r0, #332] ; 0x14c +{ + 80127a4: b093 sub sp, #76 ; 0x4c + 80127a6: 6d4d ldr r5, [r1, #84] ; 0x54 + 80127a8: 1e97 subs r7, r2, #2 + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + 80127aa: 3680 adds r6, #128 ; 0x80 + /* Pass 1: process columns from input, store into work array. */ + + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + for (ctr = 0; ctr < 4; ctr++, inptr++, quantptr++, wsptr++) { + 80127ac: 3206 adds r2, #6 + 80127ae: 3d04 subs r5, #4 + wsptr = workspace; + 80127b0: a802 add r0, sp, #8 + /* Same rotation as in the even part of the 8x8 LL&M IDCT */ + + z2 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + z3 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + + z1 = MULTIPLY(z2 + z3, FIX_0_541196100); /* c6 */ + 80127b2: f241 1851 movw r8, #4433 ; 0x1151 + /* Add fudge factor here for final descale. */ + z1 += ONE << (CONST_BITS-PASS1_BITS-1); + tmp0 = RIGHT_SHIFT(z1 + MULTIPLY(z2, FIX_0_765366865), /* c2-c6 */ + 80127b6: f641 0e7e movw lr, #6270 ; 0x187e + CONST_BITS-PASS1_BITS); + tmp2 = RIGHT_SHIFT(z1 - MULTIPLY(z3, FIX_1_847759065), /* c2+c6 */ + 80127ba: f8df c108 ldr.w ip, [pc, #264] ; 80128c4 + tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 80127be: f937 4f02 ldrsh.w r4, [r7, #2]! + for (ctr = 0; ctr < 4; ctr++, inptr++, quantptr++, wsptr++) { + 80127c2: 3004 adds r0, #4 + tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 80127c4: f855 1f04 ldr.w r1, [r5, #4]! + tmp2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + 80127c8: f9b7 9020 ldrsh.w r9, [r7, #32] + for (ctr = 0; ctr < 4; ctr++, inptr++, quantptr++, wsptr++) { + 80127cc: 42ba cmp r2, r7 + tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 80127ce: fb01 f404 mul.w r4, r1, r4 + tmp2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + 80127d2: 6c29 ldr r1, [r5, #64] ; 0x40 + z2 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 80127d4: f9b7 a010 ldrsh.w sl, [r7, #16] + tmp2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + 80127d8: fb01 f109 mul.w r1, r1, r9 + z3 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + 80127dc: f9b7 b030 ldrsh.w fp, [r7, #48] ; 0x30 + tmp10 = (tmp0 + tmp2) << PASS1_BITS; + 80127e0: eb04 0901 add.w r9, r4, r1 + tmp12 = (tmp0 - tmp2) << PASS1_BITS; + 80127e4: eba4 0401 sub.w r4, r4, r1 + z2 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 80127e8: 6a29 ldr r1, [r5, #32] + 80127ea: fb01 fa0a mul.w sl, r1, sl + z3 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + 80127ee: 6e29 ldr r1, [r5, #96] ; 0x60 + 80127f0: fb01 fb0b mul.w fp, r1, fp + z1 = MULTIPLY(z2 + z3, FIX_0_541196100); /* c6 */ + 80127f4: eb0a 010b add.w r1, sl, fp + 80127f8: fb08 f101 mul.w r1, r8, r1 + z1 += ONE << (CONST_BITS-PASS1_BITS-1); + 80127fc: f501 6180 add.w r1, r1, #1024 ; 0x400 + tmp0 = RIGHT_SHIFT(z1 + MULTIPLY(z2, FIX_0_765366865), /* c2-c6 */ + 8012800: fb0e 1a0a mla sl, lr, sl, r1 + tmp2 = RIGHT_SHIFT(z1 - MULTIPLY(z3, FIX_1_847759065), /* c2+c6 */ + 8012804: fb0c 110b mla r1, ip, fp, r1 + tmp0 = RIGHT_SHIFT(z1 + MULTIPLY(z2, FIX_0_765366865), /* c2-c6 */ + 8012808: ea4f 2aea mov.w sl, sl, asr #11 + tmp2 = RIGHT_SHIFT(z1 - MULTIPLY(z3, FIX_1_847759065), /* c2+c6 */ + 801280c: ea4f 21e1 mov.w r1, r1, asr #11 + CONST_BITS-PASS1_BITS); + + /* Final output stage */ + + wsptr[4*0] = (int) (tmp10 + tmp0); + 8012810: eb0a 0b89 add.w fp, sl, r9, lsl #2 + wsptr[4*3] = (int) (tmp10 - tmp0); + 8012814: ebca 0a89 rsb sl, sl, r9, lsl #2 + wsptr[4*1] = (int) (tmp12 + tmp2); + 8012818: eb01 0984 add.w r9, r1, r4, lsl #2 + wsptr[4*0] = (int) (tmp10 + tmp0); + 801281c: f840 bc04 str.w fp, [r0, #-4] + wsptr[4*2] = (int) (tmp12 - tmp2); + 8012820: ebc1 0184 rsb r1, r1, r4, lsl #2 + wsptr[4*3] = (int) (tmp10 - tmp0); + 8012824: f8c0 a02c str.w sl, [r0, #44] ; 0x2c + wsptr[4*1] = (int) (tmp12 + tmp2); + 8012828: f8c0 900c str.w r9, [r0, #12] + wsptr[4*2] = (int) (tmp12 - tmp2); + 801282c: 61c1 str r1, [r0, #28] + for (ctr = 0; ctr < 4; ctr++, inptr++, quantptr++, wsptr++) { + 801282e: d1c6 bne.n 80127be + 8012830: 1f1d subs r5, r3, #4 + 8012832: f103 0c0c add.w ip, r3, #12 + } + + /* Pass 2: process 4 rows from work array, store into output array. */ + + wsptr = workspace; + 8012836: ac02 add r4, sp, #8 + /* Same rotation as in the even part of the 8x8 LL&M IDCT */ + + z2 = (INT32) wsptr[1]; + z3 = (INT32) wsptr[3]; + + z1 = MULTIPLY(z2 + z3, FIX_0_541196100); /* c6 */ + 8012838: f241 1951 movw r9, #4433 ; 0x1151 + tmp0 = z1 + MULTIPLY(z2, FIX_0_765366865); /* c2-c6 */ + 801283c: f641 087e movw r8, #6270 ; 0x187e + tmp2 = z1 - MULTIPLY(z3, FIX_1_847759065); /* c2+c6 */ + 8012840: f8df e080 ldr.w lr, [pc, #128] ; 80128c4 + outptr = output_buf[ctr] + output_col; + 8012844: f855 3f04 ldr.w r3, [r5, #4]! + & RANGE_MASK]; + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp12 - tmp2, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + + wsptr += 4; /* advance pointer to next row */ + 8012848: 3410 adds r4, #16 + outptr = output_buf[ctr] + output_col; + 801284a: 9a1c ldr r2, [sp, #112] ; 0x70 + tmp0 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + 801284c: f854 0c10 ldr.w r0, [r4, #-16] + for (ctr = 0; ctr < 4; ctr++) { + 8012850: 45ac cmp ip, r5 + outptr = output_buf[ctr] + output_col; + 8012852: eb03 0702 add.w r7, r3, r2 + z3 = (INT32) wsptr[3]; + 8012856: f854 bc04 ldr.w fp, [r4, #-4] + tmp2 = (INT32) wsptr[2]; + 801285a: f854 2c08 ldr.w r2, [r4, #-8] + tmp0 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + 801285e: f100 0010 add.w r0, r0, #16 + z2 = (INT32) wsptr[1]; + 8012862: f854 1c0c ldr.w r1, [r4, #-12] + tmp10 = (tmp0 + tmp2) << CONST_BITS; + 8012866: eb00 0a02 add.w sl, r0, r2 + tmp12 = (tmp0 - tmp2) << CONST_BITS; + 801286a: eba0 0002 sub.w r0, r0, r2 + z1 = MULTIPLY(z2 + z3, FIX_0_541196100); /* c6 */ + 801286e: eb01 020b add.w r2, r1, fp + 8012872: fb09 f202 mul.w r2, r9, r2 + tmp0 = z1 + MULTIPLY(z2, FIX_0_765366865); /* c2-c6 */ + 8012876: fb08 2101 mla r1, r8, r1, r2 + tmp2 = z1 - MULTIPLY(z3, FIX_1_847759065); /* c2+c6 */ + 801287a: fb0e 220b mla r2, lr, fp, r2 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0, + 801287e: eb01 3b4a add.w fp, r1, sl, lsl #13 + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp0, + 8012882: ebc1 314a rsb r1, r1, sl, lsl #13 + tmp2 = z1 - MULTIPLY(z3, FIX_1_847759065); /* c2+c6 */ + 8012886: 9201 str r2, [sp, #4] + & RANGE_MASK]; + 8012888: f3cb 4b89 ubfx fp, fp, #18, #10 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0, + 801288c: 9a1c ldr r2, [sp, #112] ; 0x70 + & RANGE_MASK]; + 801288e: f3c1 4189 ubfx r1, r1, #18, #10 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0, + 8012892: f816 b00b ldrb.w fp, [r6, fp] + 8012896: f803 b002 strb.w fp, [r3, r2] + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp0, + 801289a: 5c73 ldrb r3, [r6, r1] + 801289c: 70fb strb r3, [r7, #3] + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp12 + tmp2, + 801289e: 9b01 ldr r3, [sp, #4] + 80128a0: eb03 3340 add.w r3, r3, r0, lsl #13 + & RANGE_MASK]; + 80128a4: f3c3 4389 ubfx r3, r3, #18, #10 + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp12 + tmp2, + 80128a8: 5cf3 ldrb r3, [r6, r3] + 80128aa: 707b strb r3, [r7, #1] + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp12 - tmp2, + 80128ac: 9b01 ldr r3, [sp, #4] + 80128ae: ebc3 3240 rsb r2, r3, r0, lsl #13 + & RANGE_MASK]; + 80128b2: f3c2 4289 ubfx r2, r2, #18, #10 + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp12 - tmp2, + 80128b6: 5cb3 ldrb r3, [r6, r2] + 80128b8: 70bb strb r3, [r7, #2] + for (ctr = 0; ctr < 4; ctr++) { + 80128ba: d1c3 bne.n 8012844 + } +} + 80128bc: b013 add sp, #76 ; 0x4c + 80128be: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 80128c2: bf00 nop + 80128c4: ffffc4df .word 0xffffc4df + +080128c8 : + +GLOBAL(void) +jpeg_idct_3x3 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + 80128c8: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 80128cc: b08b sub sp, #44 ; 0x2c + INT32 tmp0, tmp2, tmp10, tmp12; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + int * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + 80128ce: f8d0 014c ldr.w r0, [r0, #332] ; 0x14c + 80128d2: 6d49 ldr r1, [r1, #84] ; 0x54 + 80128d4: f1a2 0802 sub.w r8, r2, #2 + + /* Pass 1: process columns from input, store into work array. */ + + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + 80128d8: ac01 add r4, sp, #4 + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + 80128da: f100 0e80 add.w lr, r0, #128 ; 0x80 + for (ctr = 0; ctr < 3; ctr++, inptr++, quantptr++, wsptr++) { + 80128de: f1a1 0c04 sub.w ip, r1, #4 + 80128e2: 3204 adds r2, #4 + 80128e4: 4620 mov r0, r4 + tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + tmp0 <<= CONST_BITS; + /* Add fudge factor here for final descale. */ + tmp0 += ONE << (CONST_BITS-PASS1_BITS-1); + tmp2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + tmp12 = MULTIPLY(tmp2, FIX(0.707106781)); /* c2 */ + 80128e6: f241 6aa1 movw sl, #5793 ; 0x16a1 + tmp2 = tmp0 - tmp12 - tmp12; + + /* Odd part */ + + tmp12 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + tmp0 = MULTIPLY(tmp12, FIX(1.224744871)); /* c1 */ + 80128ea: f242 7931 movw r9, #10033 ; 0x2731 + tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 80128ee: f938 1f02 ldrsh.w r1, [r8, #2]! + for (ctr = 0; ctr < 3; ctr++, inptr++, quantptr++, wsptr++) { + 80128f2: 3404 adds r4, #4 + tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 80128f4: f85c 5f04 ldr.w r5, [ip, #4]! + tmp12 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 80128f8: f9b8 b010 ldrsh.w fp, [r8, #16] + for (ctr = 0; ctr < 3; ctr++, inptr++, quantptr++, wsptr++) { + 80128fc: 4542 cmp r2, r8 + tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 80128fe: fb05 f101 mul.w r1, r5, r1 + tmp2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + 8012902: f8dc 6040 ldr.w r6, [ip, #64] ; 0x40 + 8012906: f9b8 5020 ldrsh.w r5, [r8, #32] + tmp0 <<= CONST_BITS; + 801290a: ea4f 3141 mov.w r1, r1, lsl #13 + tmp12 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 801290e: f8dc 7020 ldr.w r7, [ip, #32] + tmp2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + 8012912: fb06 f505 mul.w r5, r6, r5 + tmp0 += ONE << (CONST_BITS-PASS1_BITS-1); + 8012916: f501 6180 add.w r1, r1, #1024 ; 0x400 + tmp12 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 801291a: fb07 f70b mul.w r7, r7, fp + tmp12 = MULTIPLY(tmp2, FIX(0.707106781)); /* c2 */ + 801291e: fb0a f505 mul.w r5, sl, r5 + tmp0 = MULTIPLY(tmp12, FIX(1.224744871)); /* c1 */ + 8012922: fb09 f707 mul.w r7, r9, r7 + tmp10 = tmp0 + tmp12; + 8012926: eb01 0605 add.w r6, r1, r5 + tmp2 = tmp0 - tmp12 - tmp12; + 801292a: eba1 0145 sub.w r1, r1, r5, lsl #1 + + /* Final output stage */ + + wsptr[3*0] = (int) RIGHT_SHIFT(tmp10 + tmp0, CONST_BITS-PASS1_BITS); + 801292e: eb06 0b07 add.w fp, r6, r7 + wsptr[3*2] = (int) RIGHT_SHIFT(tmp10 - tmp0, CONST_BITS-PASS1_BITS); + 8012932: eba6 0607 sub.w r6, r6, r7 + wsptr[3*1] = (int) RIGHT_SHIFT(tmp2, CONST_BITS-PASS1_BITS); + 8012936: ea4f 21e1 mov.w r1, r1, asr #11 + wsptr[3*0] = (int) RIGHT_SHIFT(tmp10 + tmp0, CONST_BITS-PASS1_BITS); + 801293a: ea4f 2beb mov.w fp, fp, asr #11 + wsptr[3*2] = (int) RIGHT_SHIFT(tmp10 - tmp0, CONST_BITS-PASS1_BITS); + 801293e: ea4f 26e6 mov.w r6, r6, asr #11 + wsptr[3*1] = (int) RIGHT_SHIFT(tmp2, CONST_BITS-PASS1_BITS); + 8012942: 60a1 str r1, [r4, #8] + wsptr[3*0] = (int) RIGHT_SHIFT(tmp10 + tmp0, CONST_BITS-PASS1_BITS); + 8012944: f844 bc04 str.w fp, [r4, #-4] + wsptr[3*2] = (int) RIGHT_SHIFT(tmp10 - tmp0, CONST_BITS-PASS1_BITS); + 8012948: 6166 str r6, [r4, #20] + for (ctr = 0; ctr < 3; ctr++, inptr++, quantptr++, wsptr++) { + 801294a: d1d0 bne.n 80128ee + 801294c: 1f1d subs r5, r3, #4 + + /* Add fudge factor here for final descale. */ + tmp0 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + tmp0 <<= CONST_BITS; + tmp2 = (INT32) wsptr[2]; + tmp12 = MULTIPLY(tmp2, FIX(0.707106781)); /* c2 */ + 801294e: f241 6ca1 movw ip, #5793 ; 0x16a1 + 8012952: 3308 adds r3, #8 + tmp2 = tmp0 - tmp12 - tmp12; + + /* Odd part */ + + tmp12 = (INT32) wsptr[1]; + tmp0 = MULTIPLY(tmp12, FIX(1.224744871)); /* c1 */ + 8012954: f242 7b31 movw fp, #10033 ; 0x2731 + outptr = output_buf[ctr] + output_col; + 8012958: f855 9f04 ldr.w r9, [r5, #4]! + & RANGE_MASK]; + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp2, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + + wsptr += 3; /* advance pointer to next row */ + 801295c: 300c adds r0, #12 + outptr = output_buf[ctr] + output_col; + 801295e: 9a14 ldr r2, [sp, #80] ; 0x50 + tmp12 = MULTIPLY(tmp2, FIX(0.707106781)); /* c2 */ + 8012960: f850 1c04 ldr.w r1, [r0, #-4] + for (ctr = 0; ctr < 3; ctr++) { + 8012964: 42ab cmp r3, r5 + outptr = output_buf[ctr] + output_col; + 8012966: eb09 0602 add.w r6, r9, r2 + tmp0 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + 801296a: f850 2c0c ldr.w r2, [r0, #-12] + tmp12 = MULTIPLY(tmp2, FIX(0.707106781)); /* c2 */ + 801296e: fb0c f101 mul.w r1, ip, r1 + tmp0 = MULTIPLY(tmp12, FIX(1.224744871)); /* c1 */ + 8012972: f850 4c08 ldr.w r4, [r0, #-8] + tmp0 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + 8012976: f102 0210 add.w r2, r2, #16 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0, + 801297a: 9f14 ldr r7, [sp, #80] ; 0x50 + tmp0 = MULTIPLY(tmp12, FIX(1.224744871)); /* c1 */ + 801297c: fb0b f404 mul.w r4, fp, r4 + tmp10 = tmp0 + tmp12; + 8012980: eb01 3842 add.w r8, r1, r2, lsl #13 + tmp2 = tmp0 - tmp12 - tmp12; + 8012984: ebc1 3242 rsb r2, r1, r2, lsl #13 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0, + 8012988: eb08 0a04 add.w sl, r8, r4 + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp0, + 801298c: eba8 0804 sub.w r8, r8, r4 + tmp2 = tmp0 - tmp12 - tmp12; + 8012990: eba2 0201 sub.w r2, r2, r1 + & RANGE_MASK]; + 8012994: f3ca 4a89 ubfx sl, sl, #18, #10 + & RANGE_MASK]; + 8012998: f3c8 4889 ubfx r8, r8, #18, #10 + & RANGE_MASK]; + 801299c: f3c2 4289 ubfx r2, r2, #18, #10 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0, + 80129a0: f81e a00a ldrb.w sl, [lr, sl] + 80129a4: f809 a007 strb.w sl, [r9, r7] + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp0, + 80129a8: f81e 4008 ldrb.w r4, [lr, r8] + 80129ac: 70b4 strb r4, [r6, #2] + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp2, + 80129ae: f81e 2002 ldrb.w r2, [lr, r2] + 80129b2: 7072 strb r2, [r6, #1] + for (ctr = 0; ctr < 3; ctr++) { + 80129b4: d1d0 bne.n 8012958 + } +} + 80129b6: b00b add sp, #44 ; 0x2c + 80129b8: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + +080129bc : + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + SHIFT_TEMPS + + /* Pass 1: process columns from input. */ + + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + 80129bc: f8d1 c054 ldr.w ip, [r1, #84] ; 0x54 + + /* Column 0 */ + tmp4 = DEQUANTIZE(coef_block[DCTSIZE*0], quantptr[DCTSIZE*0]); + 80129c0: f9b2 1000 ldrsh.w r1, [r2] +{ + 80129c4: b5f0 push {r4, r5, r6, r7, lr} + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + 80129c6: f8d0 614c ldr.w r6, [r0, #332] ; 0x14c + tmp4 = DEQUANTIZE(coef_block[DCTSIZE*0], quantptr[DCTSIZE*0]); + 80129ca: f8dc 0000 ldr.w r0, [ip] + tmp5 = DEQUANTIZE(coef_block[DCTSIZE*1], quantptr[DCTSIZE*1]); + 80129ce: f9b2 4010 ldrsh.w r4, [r2, #16] + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + 80129d2: 3680 adds r6, #128 ; 0x80 + tmp4 = DEQUANTIZE(coef_block[DCTSIZE*0], quantptr[DCTSIZE*0]); + 80129d4: 4341 muls r1, r0 + tmp5 = DEQUANTIZE(coef_block[DCTSIZE*1], quantptr[DCTSIZE*1]); + 80129d6: f8dc 0020 ldr.w r0, [ip, #32] + + tmp0 = tmp4 + tmp5; + tmp2 = tmp4 - tmp5; + + /* Column 1 */ + tmp4 = DEQUANTIZE(coef_block[DCTSIZE*0+1], quantptr[DCTSIZE*0+1]); + 80129da: f9b2 5002 ldrsh.w r5, [r2, #2] + tmp5 = DEQUANTIZE(coef_block[DCTSIZE*1], quantptr[DCTSIZE*1]); + 80129de: 4344 muls r4, r0 + tmp4 += ONE << 2; + 80129e0: 3104 adds r1, #4 +{ + 80129e2: 9f05 ldr r7, [sp, #20] + tmp0 = tmp4 + tmp5; + 80129e4: 1860 adds r0, r4, r1 + tmp2 = tmp4 - tmp5; + 80129e6: 1b09 subs r1, r1, r4 + tmp4 = DEQUANTIZE(coef_block[DCTSIZE*0+1], quantptr[DCTSIZE*0+1]); + 80129e8: f8dc 4004 ldr.w r4, [ip, #4] + 80129ec: 4365 muls r5, r4 + tmp5 = DEQUANTIZE(coef_block[DCTSIZE*1+1], quantptr[DCTSIZE*1+1]); + 80129ee: f9b2 4012 ldrsh.w r4, [r2, #18] + 80129f2: f8dc 2024 ldr.w r2, [ip, #36] ; 0x24 + 80129f6: 4354 muls r4, r2 + + tmp1 = tmp4 + tmp5; + 80129f8: eb05 0c04 add.w ip, r5, r4 + tmp3 = tmp4 - tmp5; + 80129fc: 1b2a subs r2, r5, r4 + + /* Pass 2: process 2 rows, store into output array. */ + + /* Row 0 */ + outptr = output_buf[0] + output_col; + 80129fe: 681d ldr r5, [r3, #0] + + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp0 + tmp1, 3) & RANGE_MASK]; + 8012a00: eb00 040c add.w r4, r0, ip + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp0 - tmp1, 3) & RANGE_MASK]; + 8012a04: eba0 000c sub.w r0, r0, ip + outptr = output_buf[0] + output_col; + 8012a08: eb05 0e07 add.w lr, r5, r7 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp0 + tmp1, 3) & RANGE_MASK]; + 8012a0c: f3c4 04c9 ubfx r4, r4, #3, #10 + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp0 - tmp1, 3) & RANGE_MASK]; + 8012a10: f3c0 00c9 ubfx r0, r0, #3, #10 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp0 + tmp1, 3) & RANGE_MASK]; + 8012a14: 5d34 ldrb r4, [r6, r4] + 8012a16: 55ec strb r4, [r5, r7] + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp0 - tmp1, 3) & RANGE_MASK]; + 8012a18: 5c30 ldrb r0, [r6, r0] + 8012a1a: f88e 0001 strb.w r0, [lr, #1] + + /* Row 1 */ + outptr = output_buf[1] + output_col; + 8012a1e: 6858 ldr r0, [r3, #4] + + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp2 + tmp3, 3) & RANGE_MASK]; + 8012a20: 188b adds r3, r1, r2 + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp2 - tmp3, 3) & RANGE_MASK]; + 8012a22: 1a89 subs r1, r1, r2 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp2 + tmp3, 3) & RANGE_MASK]; + 8012a24: f3c3 03c9 ubfx r3, r3, #3, #10 + outptr = output_buf[1] + output_col; + 8012a28: 19c4 adds r4, r0, r7 + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp2 - tmp3, 3) & RANGE_MASK]; + 8012a2a: f3c1 01c9 ubfx r1, r1, #3, #10 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp2 + tmp3, 3) & RANGE_MASK]; + 8012a2e: 5cf3 ldrb r3, [r6, r3] + 8012a30: 55c3 strb r3, [r0, r7] + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp2 - tmp3, 3) & RANGE_MASK]; + 8012a32: 5c73 ldrb r3, [r6, r1] + 8012a34: 7063 strb r3, [r4, #1] +} + 8012a36: bdf0 pop {r4, r5, r6, r7, pc} + +08012a38 : + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + SHIFT_TEMPS + + /* 1x1 is trivial: just take the DC coefficient divided by 8. */ + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + dcval = DEQUANTIZE(coef_block[0], quantptr[0]); + 8012a38: 6d49 ldr r1, [r1, #84] ; 0x54 + 8012a3a: f9b2 2000 ldrsh.w r2, [r2] + 8012a3e: 6809 ldr r1, [r1, #0] + 8012a40: 434a muls r2, r1 + dcval = (int) DESCALE((INT32) dcval, 3); + + output_buf[0][output_col] = range_limit[dcval & RANGE_MASK]; + 8012a42: f8d0 114c ldr.w r1, [r0, #332] ; 0x14c + dcval = (int) DESCALE((INT32) dcval, 3); + 8012a46: 3204 adds r2, #4 + output_buf[0][output_col] = range_limit[dcval & RANGE_MASK]; + 8012a48: f3c2 02c9 ubfx r2, r2, #3, #10 + 8012a4c: 440a add r2, r1 + 8012a4e: f892 1080 ldrb.w r1, [r2, #128] ; 0x80 + 8012a52: 681a ldr r2, [r3, #0] + 8012a54: 9b00 ldr r3, [sp, #0] + 8012a56: 54d1 strb r1, [r2, r3] +} + 8012a58: 4770 bx lr + ... + +08012a5c : + +GLOBAL(void) +jpeg_idct_9x9 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + 8012a5c: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8012a60: b0d1 sub sp, #324 ; 0x144 + 8012a62: 6d4c ldr r4, [r1, #84] ; 0x54 + 8012a64: f1a2 0e02 sub.w lr, r2, #2 + 8012a68: 9306 str r3, [sp, #24] + 8012a6a: 3c04 subs r4, #4 + INT32 z1, z2, z3, z4; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + int * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + 8012a6c: f8d0 314c ldr.w r3, [r0, #332] ; 0x14c + + /* Pass 1: process columns from input, store into work array. */ + + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + 8012a70: a808 add r0, sp, #32 + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + 8012a72: f103 0a80 add.w sl, r3, #128 ; 0x80 + for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) { + 8012a76: f102 030e add.w r3, r2, #14 + 8012a7a: 9307 str r3, [sp, #28] + /* Even part */ + + tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 8012a7c: f93e 5f02 ldrsh.w r5, [lr, #2]! + for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) { + 8012a80: 3004 adds r0, #4 + tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 8012a82: f854 3f04 ldr.w r3, [r4, #4]! + tmp0 <<= CONST_BITS; + /* Add fudge factor here for final descale. */ + tmp0 += ONE << (CONST_BITS-PASS1_BITS-1); + + z1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + 8012a86: f9be 1020 ldrsh.w r1, [lr, #32] + tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 8012a8a: 435d muls r5, r3 + z1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + 8012a8c: 6c23 ldr r3, [r4, #64] ; 0x40 + z2 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + 8012a8e: f9be 2040 ldrsh.w r2, [lr, #64] ; 0x40 + z1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + 8012a92: 4359 muls r1, r3 + z2 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + 8012a94: f8d4 3080 ldr.w r3, [r4, #128] ; 0x80 + z3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + 8012a98: f9be 6060 ldrsh.w r6, [lr, #96] ; 0x60 + tmp0 <<= CONST_BITS; + 8012a9c: 036d lsls r5, r5, #13 + z2 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + 8012a9e: 435a muls r2, r3 + z3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + 8012aa0: f8d4 30c0 ldr.w r3, [r4, #192] ; 0xc0 + tmp0 += ONE << (CONST_BITS-PASS1_BITS-1); + 8012aa4: f505 6580 add.w r5, r5, #1024 ; 0x400 + + /* Odd part */ + + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + 8012aa8: f9be c050 ldrsh.w ip, [lr, #80] ; 0x50 + z3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + 8012aac: 4373 muls r3, r6 + tmp3 = MULTIPLY(z3, FIX(0.707106781)); /* c6 */ + 8012aae: f241 66a1 movw r6, #5793 ; 0x16a1 + 8012ab2: 4373 muls r3, r6 + tmp1 = tmp0 + tmp3; + 8012ab4: 18ef adds r7, r5, r3 + tmp2 = tmp0 - tmp3 - tmp3; + 8012ab6: eba5 0343 sub.w r3, r5, r3, lsl #1 + 8012aba: 9301 str r3, [sp, #4] + tmp0 = MULTIPLY(z1 - z2, FIX(0.707106781)); /* c6 */ + 8012abc: 1a8b subs r3, r1, r2 + 8012abe: 4373 muls r3, r6 + 8012ac0: 9302 str r3, [sp, #8] + tmp11 = tmp2 + tmp0; + 8012ac2: e9dd 3501 ldrd r3, r5, [sp, #4] + 8012ac6: 195e adds r6, r3, r5 + tmp0 = MULTIPLY(z1 + z2, FIX(1.328926049)); /* c2 */ + 8012ac8: 188b adds r3, r1, r2 + 8012aca: f642 2587 movw r5, #10887 ; 0x2a87 + 8012ace: 436b muls r3, r5 + tmp2 = MULTIPLY(z1, FIX(1.083350441)); /* c4 */ + 8012ad0: f242 25ab movw r5, #8875 ; 0x22ab + 8012ad4: 4369 muls r1, r5 + tmp3 = MULTIPLY(z2, FIX(0.245575608)); /* c8 */ + 8012ad6: f240 75dc movw r5, #2012 ; 0x7dc + 8012ada: 436a muls r2, r5 + tmp10 = tmp1 + tmp0 - tmp3; + 8012adc: 18fd adds r5, r7, r3 + tmp12 = tmp1 - tmp0 + tmp2; + 8012ade: 1afb subs r3, r7, r3 + tmp13 = tmp1 - tmp2 + tmp3; + 8012ae0: 1a7f subs r7, r7, r1 + tmp10 = tmp1 + tmp0 - tmp3; + 8012ae2: 1aad subs r5, r5, r2 + tmp13 = tmp1 - tmp2 + tmp3; + 8012ae4: 18ba adds r2, r7, r2 + tmp12 = tmp1 - tmp0 + tmp2; + 8012ae6: 440b add r3, r1 + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 8012ae8: f9be 1010 ldrsh.w r1, [lr, #16] + tmp13 = tmp1 - tmp2 + tmp3; + 8012aec: 9205 str r2, [sp, #20] + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 8012aee: 6a22 ldr r2, [r4, #32] + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + 8012af0: 6e27 ldr r7, [r4, #96] ; 0x60 + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 8012af2: 4351 muls r1, r2 + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + 8012af4: f9be 2030 ldrsh.w r2, [lr, #48] ; 0x30 + tmp12 = tmp1 - tmp0 + tmp2; + 8012af8: 9304 str r3, [sp, #16] + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + 8012afa: 437a muls r2, r7 + z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + 8012afc: f8d4 70a0 ldr.w r7, [r4, #160] ; 0xa0 + z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + 8012b00: f8d4 30e0 ldr.w r3, [r4, #224] ; 0xe0 + z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + 8012b04: fb07 fc0c mul.w ip, r7, ip + z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + 8012b08: f9be 7070 ldrsh.w r7, [lr, #112] ; 0x70 + tmp10 = tmp1 + tmp0 - tmp3; + 8012b0c: 9503 str r5, [sp, #12] + z2 = MULTIPLY(z2, - FIX(1.224744871)); /* -c3 */ + + tmp2 = MULTIPLY(z1 + z3, FIX(0.909038955)); /* c5 */ + tmp3 = MULTIPLY(z1 + z4, FIX(0.483689525)); /* c7 */ + tmp0 = tmp2 + tmp3 - z2; + tmp1 = MULTIPLY(z3 - z4, FIX(1.392728481)); /* c1 */ + 8012b0e: f642 4591 movw r5, #11409 ; 0x2c91 + z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + 8012b12: 435f muls r7, r3 + z2 = MULTIPLY(z2, - FIX(1.224744871)); /* -c3 */ + 8012b14: 4b81 ldr r3, [pc, #516] ; (8012d1c ) + tmp2 = MULTIPLY(z1 + z3, FIX(0.909038955)); /* c5 */ + 8012b16: eb01 0b0c add.w fp, r1, ip + z2 = MULTIPLY(z2, - FIX(1.224744871)); /* -c3 */ + 8012b1a: 435a muls r2, r3 + tmp2 = MULTIPLY(z1 + z3, FIX(0.909038955)); /* c5 */ + 8012b1c: f641 5317 movw r3, #7447 ; 0x1d17 + tmp3 = MULTIPLY(z1 + z4, FIX(0.483689525)); /* c7 */ + 8012b20: eb01 0907 add.w r9, r1, r7 + tmp2 += z2 - tmp1; + tmp3 += z2 + tmp1; + tmp1 = MULTIPLY(z1 - z3 - z4, FIX(1.224744871)); /* c3 */ + 8012b24: eba1 010c sub.w r1, r1, ip + tmp2 = MULTIPLY(z1 + z3, FIX(0.909038955)); /* c5 */ + 8012b28: fb03 fb0b mul.w fp, r3, fp + tmp3 = MULTIPLY(z1 + z4, FIX(0.483689525)); /* c7 */ + 8012b2c: f640 737a movw r3, #3962 ; 0xf7a + tmp1 = MULTIPLY(z1 - z3 - z4, FIX(1.224744871)); /* c3 */ + 8012b30: 1bc9 subs r1, r1, r7 + tmp3 = MULTIPLY(z1 + z4, FIX(0.483689525)); /* c7 */ + 8012b32: fb03 f909 mul.w r9, r3, r9 + tmp1 = MULTIPLY(z3 - z4, FIX(1.392728481)); /* c1 */ + 8012b36: ebac 0307 sub.w r3, ip, r7 + 8012b3a: 436b muls r3, r5 + tmp0 = tmp2 + tmp3 - z2; + 8012b3c: eb0b 0809 add.w r8, fp, r9 + tmp1 = MULTIPLY(z3 - z4, FIX(1.392728481)); /* c1 */ + 8012b40: 461d mov r5, r3 + tmp2 += z2 - tmp1; + 8012b42: 1ad3 subs r3, r2, r3 + tmp0 = tmp2 + tmp3 - z2; + 8012b44: eba8 0802 sub.w r8, r8, r2 + tmp2 += z2 - tmp1; + 8012b48: 449b add fp, r3 + tmp1 = MULTIPLY(z1 - z3 - z4, FIX(1.224744871)); /* c3 */ + 8012b4a: f242 7331 movw r3, #10033 ; 0x2731 + tmp3 += z2 + tmp1; + 8012b4e: 442a add r2, r5 + tmp1 = MULTIPLY(z1 - z3 - z4, FIX(1.224744871)); /* c3 */ + 8012b50: 4359 muls r1, r3 + + /* Final output stage */ + + wsptr[8*0] = (int) RIGHT_SHIFT(tmp10 + tmp0, CONST_BITS-PASS1_BITS); + 8012b52: 9b03 ldr r3, [sp, #12] + tmp3 += z2 + tmp1; + 8012b54: 444a add r2, r9 + wsptr[8*8] = (int) RIGHT_SHIFT(tmp10 - tmp0, CONST_BITS-PASS1_BITS); + 8012b56: eba3 0508 sub.w r5, r3, r8 + wsptr[8*0] = (int) RIGHT_SHIFT(tmp10 + tmp0, CONST_BITS-PASS1_BITS); + 8012b5a: eb03 0708 add.w r7, r3, r8 + wsptr[8*1] = (int) RIGHT_SHIFT(tmp11 + tmp1, CONST_BITS-PASS1_BITS); + wsptr[8*7] = (int) RIGHT_SHIFT(tmp11 - tmp1, CONST_BITS-PASS1_BITS); + wsptr[8*2] = (int) RIGHT_SHIFT(tmp12 + tmp2, CONST_BITS-PASS1_BITS); + 8012b5e: 9b04 ldr r3, [sp, #16] + wsptr[8*8] = (int) RIGHT_SHIFT(tmp10 - tmp0, CONST_BITS-PASS1_BITS); + 8012b60: 12ed asrs r5, r5, #11 + wsptr[8*0] = (int) RIGHT_SHIFT(tmp10 + tmp0, CONST_BITS-PASS1_BITS); + 8012b62: 12ff asrs r7, r7, #11 + wsptr[8*8] = (int) RIGHT_SHIFT(tmp10 - tmp0, CONST_BITS-PASS1_BITS); + 8012b64: f8c0 50fc str.w r5, [r0, #252] ; 0xfc + wsptr[8*1] = (int) RIGHT_SHIFT(tmp11 + tmp1, CONST_BITS-PASS1_BITS); + 8012b68: 1875 adds r5, r6, r1 + wsptr[8*7] = (int) RIGHT_SHIFT(tmp11 - tmp1, CONST_BITS-PASS1_BITS); + 8012b6a: 1a76 subs r6, r6, r1 + wsptr[8*2] = (int) RIGHT_SHIFT(tmp12 + tmp2, CONST_BITS-PASS1_BITS); + 8012b6c: eb03 010b add.w r1, r3, fp + wsptr[8*6] = (int) RIGHT_SHIFT(tmp12 - tmp2, CONST_BITS-PASS1_BITS); + 8012b70: eba3 030b sub.w r3, r3, fp + wsptr[8*1] = (int) RIGHT_SHIFT(tmp11 + tmp1, CONST_BITS-PASS1_BITS); + 8012b74: 12ed asrs r5, r5, #11 + wsptr[8*7] = (int) RIGHT_SHIFT(tmp11 - tmp1, CONST_BITS-PASS1_BITS); + 8012b76: 12f6 asrs r6, r6, #11 + wsptr[8*0] = (int) RIGHT_SHIFT(tmp10 + tmp0, CONST_BITS-PASS1_BITS); + 8012b78: f840 7c04 str.w r7, [r0, #-4] + wsptr[8*6] = (int) RIGHT_SHIFT(tmp12 - tmp2, CONST_BITS-PASS1_BITS); + 8012b7c: 12db asrs r3, r3, #11 + wsptr[8*1] = (int) RIGHT_SHIFT(tmp11 + tmp1, CONST_BITS-PASS1_BITS); + 8012b7e: 61c5 str r5, [r0, #28] + wsptr[8*2] = (int) RIGHT_SHIFT(tmp12 + tmp2, CONST_BITS-PASS1_BITS); + 8012b80: 12c9 asrs r1, r1, #11 + wsptr[8*7] = (int) RIGHT_SHIFT(tmp11 - tmp1, CONST_BITS-PASS1_BITS); + 8012b82: f8c0 60dc str.w r6, [r0, #220] ; 0xdc + wsptr[8*6] = (int) RIGHT_SHIFT(tmp12 - tmp2, CONST_BITS-PASS1_BITS); + 8012b86: f8c0 30bc str.w r3, [r0, #188] ; 0xbc + wsptr[8*3] = (int) RIGHT_SHIFT(tmp13 + tmp3, CONST_BITS-PASS1_BITS); + 8012b8a: 9b05 ldr r3, [sp, #20] + wsptr[8*2] = (int) RIGHT_SHIFT(tmp12 + tmp2, CONST_BITS-PASS1_BITS); + 8012b8c: 63c1 str r1, [r0, #60] ; 0x3c + wsptr[8*3] = (int) RIGHT_SHIFT(tmp13 + tmp3, CONST_BITS-PASS1_BITS); + 8012b8e: 4413 add r3, r2 + 8012b90: 12db asrs r3, r3, #11 + 8012b92: 65c3 str r3, [r0, #92] ; 0x5c + wsptr[8*5] = (int) RIGHT_SHIFT(tmp13 - tmp3, CONST_BITS-PASS1_BITS); + 8012b94: 9b05 ldr r3, [sp, #20] + 8012b96: 1a9b subs r3, r3, r2 + 8012b98: 12db asrs r3, r3, #11 + 8012b9a: f8c0 309c str.w r3, [r0, #156] ; 0x9c + tmp14 = tmp2 - tmp0 - tmp0; + 8012b9e: e9dd 3201 ldrd r3, r2, [sp, #4] + 8012ba2: eba3 0342 sub.w r3, r3, r2, lsl #1 + wsptr[8*4] = (int) RIGHT_SHIFT(tmp14, CONST_BITS-PASS1_BITS); + 8012ba6: 12db asrs r3, r3, #11 + 8012ba8: 67c3 str r3, [r0, #124] ; 0x7c + for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) { + 8012baa: 9b07 ldr r3, [sp, #28] + 8012bac: 4573 cmp r3, lr + 8012bae: f47f af65 bne.w 8012a7c + 8012bb2: 9b06 ldr r3, [sp, #24] + } + + /* Pass 2: process 9 rows from work array, store into output array. */ + + wsptr = workspace; + 8012bb4: aa08 add r2, sp, #32 + 8012bb6: f1a3 0904 sub.w r9, r3, #4 + 8012bba: 3320 adds r3, #32 + 8012bbc: 9306 str r3, [sp, #24] + for (ctr = 0; ctr < 9; ctr++) { + outptr = output_buf[ctr] + output_col; + 8012bbe: f859 3f04 ldr.w r3, [r9, #4]! + + z1 = (INT32) wsptr[2]; + z2 = (INT32) wsptr[4]; + z3 = (INT32) wsptr[6]; + + tmp3 = MULTIPLY(z3, FIX(0.707106781)); /* c6 */ + 8012bc2: f241 6ca1 movw ip, #5793 ; 0x16a1 + outptr = output_buf[ctr] + output_col; + 8012bc6: 995a ldr r1, [sp, #360] ; 0x168 + & RANGE_MASK]; + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp14, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + + wsptr += 8; /* advance pointer to next row */ + 8012bc8: 3220 adds r2, #32 + outptr = output_buf[ctr] + output_col; + 8012bca: 9305 str r3, [sp, #20] + 8012bcc: 185c adds r4, r3, r1 + tmp0 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + 8012bce: f852 3c20 ldr.w r3, [r2, #-32] + z1 = (INT32) wsptr[2]; + 8012bd2: f852 0c18 ldr.w r0, [r2, #-24] + tmp0 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + 8012bd6: f103 0510 add.w r5, r3, #16 + tmp3 = MULTIPLY(z3, FIX(0.707106781)); /* c6 */ + 8012bda: f852 3c08 ldr.w r3, [r2, #-8] + z2 = (INT32) wsptr[4]; + 8012bde: f852 1c10 ldr.w r1, [r2, #-16] + tmp3 = MULTIPLY(z3, FIX(0.707106781)); /* c6 */ + 8012be2: fb0c f603 mul.w r6, ip, r3 + tmp2 = tmp0 - tmp3 - tmp3; + 8012be6: ebc6 3345 rsb r3, r6, r5, lsl #13 + tmp1 = tmp0 + tmp3; + 8012bea: eb06 3745 add.w r7, r6, r5, lsl #13 + tmp2 = tmp0 - tmp3 - tmp3; + 8012bee: 1b9b subs r3, r3, r6 + 8012bf0: 9301 str r3, [sp, #4] + tmp0 = MULTIPLY(z1 - z2, FIX(0.707106781)); /* c6 */ + 8012bf2: 1a43 subs r3, r0, r1 + 8012bf4: fb0c f303 mul.w r3, ip, r3 + 8012bf8: 9302 str r3, [sp, #8] + tmp11 = tmp2 + tmp0; + 8012bfa: e9dd 3501 ldrd r3, r5, [sp, #4] + 8012bfe: 195e adds r6, r3, r5 + tmp0 = MULTIPLY(z1 + z2, FIX(1.328926049)); /* c2 */ + 8012c00: 1843 adds r3, r0, r1 + 8012c02: f642 2587 movw r5, #10887 ; 0x2a87 + 8012c06: 436b muls r3, r5 + tmp2 = MULTIPLY(z1, FIX(1.083350441)); /* c4 */ + 8012c08: f242 25ab movw r5, #8875 ; 0x22ab + 8012c0c: 4368 muls r0, r5 + tmp3 = MULTIPLY(z2, FIX(0.245575608)); /* c8 */ + 8012c0e: f240 75dc movw r5, #2012 ; 0x7dc + 8012c12: 4369 muls r1, r5 + tmp10 = tmp1 + tmp0 - tmp3; + 8012c14: 18fd adds r5, r7, r3 + tmp12 = tmp1 - tmp0 + tmp2; + 8012c16: 1afb subs r3, r7, r3 + tmp13 = tmp1 - tmp2 + tmp3; + 8012c18: 1a3f subs r7, r7, r0 + tmp10 = tmp1 + tmp0 - tmp3; + 8012c1a: 1a6d subs r5, r5, r1 + tmp13 = tmp1 - tmp2 + tmp3; + 8012c1c: 1879 adds r1, r7, r1 + z2 = MULTIPLY(z2, - FIX(1.224744871)); /* -c3 */ + 8012c1e: 4f3f ldr r7, [pc, #252] ; (8012d1c ) + tmp12 = tmp1 - tmp0 + tmp2; + 8012c20: 4403 add r3, r0 + z1 = (INT32) wsptr[1]; + 8012c22: f852 0c1c ldr.w r0, [r2, #-28] + tmp13 = tmp1 - tmp2 + tmp3; + 8012c26: 9104 str r1, [sp, #16] + z2 = (INT32) wsptr[3]; + 8012c28: f852 1c14 ldr.w r1, [r2, #-20] + tmp12 = tmp1 - tmp0 + tmp2; + 8012c2c: 9303 str r3, [sp, #12] + tmp2 = MULTIPLY(z1 + z3, FIX(0.909038955)); /* c5 */ + 8012c2e: f641 5317 movw r3, #7447 ; 0x1d17 + z2 = MULTIPLY(z2, - FIX(1.224744871)); /* -c3 */ + 8012c32: 4379 muls r1, r7 + tmp2 = MULTIPLY(z1 + z3, FIX(0.909038955)); /* c5 */ + 8012c34: f852 7c0c ldr.w r7, [r2, #-12] + 8012c38: eb00 0b07 add.w fp, r0, r7 + tmp3 = MULTIPLY(z1 + z4, FIX(0.483689525)); /* c7 */ + 8012c3c: f852 7c04 ldr.w r7, [r2, #-4] + tmp2 = MULTIPLY(z1 + z3, FIX(0.909038955)); /* c5 */ + 8012c40: fb03 fb0b mul.w fp, r3, fp + tmp3 = MULTIPLY(z1 + z4, FIX(0.483689525)); /* c7 */ + 8012c44: eb00 0e07 add.w lr, r0, r7 + 8012c48: f640 737a movw r3, #3962 ; 0xf7a + tmp1 = MULTIPLY(z3 - z4, FIX(1.392728481)); /* c1 */ + 8012c4c: f852 7c0c ldr.w r7, [r2, #-12] + tmp3 = MULTIPLY(z1 + z4, FIX(0.483689525)); /* c7 */ + 8012c50: fb03 fe0e mul.w lr, r3, lr + tmp1 = MULTIPLY(z3 - z4, FIX(1.392728481)); /* c1 */ + 8012c54: f852 3c04 ldr.w r3, [r2, #-4] + 8012c58: eba7 0803 sub.w r8, r7, r3 + 8012c5c: f642 4391 movw r3, #11409 ; 0x2c91 + tmp0 = tmp2 + tmp3 - z2; + 8012c60: eb0b 0c0e add.w ip, fp, lr + tmp1 = MULTIPLY(z3 - z4, FIX(1.392728481)); /* c1 */ + 8012c64: fb03 f808 mul.w r8, r3, r8 + tmp1 = MULTIPLY(z1 - z3 - z4, FIX(1.224744871)); /* c3 */ + 8012c68: f852 3c0c ldr.w r3, [r2, #-12] + tmp0 = tmp2 + tmp3 - z2; + 8012c6c: ebac 0c01 sub.w ip, ip, r1 + tmp2 += z2 - tmp1; + 8012c70: eba1 0708 sub.w r7, r1, r8 + tmp3 += z2 + tmp1; + 8012c74: 4441 add r1, r8 + tmp1 = MULTIPLY(z1 - z3 - z4, FIX(1.224744871)); /* c3 */ + 8012c76: 1ac0 subs r0, r0, r3 + 8012c78: f852 3c04 ldr.w r3, [r2, #-4] + tmp3 += z2 + tmp1; + 8012c7c: eb01 080e add.w r8, r1, lr + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0, + 8012c80: eb05 0e0c add.w lr, r5, ip + tmp1 = MULTIPLY(z1 - z3 - z4, FIX(1.224744871)); /* c3 */ + 8012c84: 1ac0 subs r0, r0, r3 + outptr[8] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp0, + 8012c86: eba5 050c sub.w r5, r5, ip + tmp1 = MULTIPLY(z1 - z3 - z4, FIX(1.224744871)); /* c3 */ + 8012c8a: f242 7331 movw r3, #10033 ; 0x2731 + & RANGE_MASK]; + 8012c8e: f3ce 4e89 ubfx lr, lr, #18, #10 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0, + 8012c92: 995a ldr r1, [sp, #360] ; 0x168 + & RANGE_MASK]; + 8012c94: f3c5 4589 ubfx r5, r5, #18, #10 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0, + 8012c98: f81a e00e ldrb.w lr, [sl, lr] + tmp1 = MULTIPLY(z1 - z3 - z4, FIX(1.224744871)); /* c3 */ + 8012c9c: 4358 muls r0, r3 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0, + 8012c9e: 9b05 ldr r3, [sp, #20] + tmp2 += z2 - tmp1; + 8012ca0: 445f add r7, fp + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0, + 8012ca2: f803 e001 strb.w lr, [r3, r1] + outptr[8] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp0, + 8012ca6: f81a 5005 ldrb.w r5, [sl, r5] + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp12 + tmp2, + 8012caa: 9b03 ldr r3, [sp, #12] + outptr[8] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp0, + 8012cac: 7225 strb r5, [r4, #8] + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp11 + tmp1, + 8012cae: 1835 adds r5, r6, r0 + outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp11 - tmp1, + 8012cb0: 1a36 subs r6, r6, r0 + & RANGE_MASK]; + 8012cb2: f3c5 4589 ubfx r5, r5, #18, #10 + & RANGE_MASK]; + 8012cb6: f3c6 4689 ubfx r6, r6, #18, #10 + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp11 + tmp1, + 8012cba: f81a 5005 ldrb.w r5, [sl, r5] + 8012cbe: 7065 strb r5, [r4, #1] + outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp11 - tmp1, + 8012cc0: f81a 0006 ldrb.w r0, [sl, r6] + 8012cc4: 71e0 strb r0, [r4, #7] + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp12 + tmp2, + 8012cc6: 19d8 adds r0, r3, r7 + outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp12 - tmp2, + 8012cc8: 1bdb subs r3, r3, r7 + & RANGE_MASK]; + 8012cca: f3c0 4089 ubfx r0, r0, #18, #10 + & RANGE_MASK]; + 8012cce: f3c3 4389 ubfx r3, r3, #18, #10 + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp12 + tmp2, + 8012cd2: f81a 0000 ldrb.w r0, [sl, r0] + 8012cd6: 70a0 strb r0, [r4, #2] + outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp12 - tmp2, + 8012cd8: f81a 3003 ldrb.w r3, [sl, r3] + 8012cdc: 71a3 strb r3, [r4, #6] + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp13 + tmp3, + 8012cde: 9b04 ldr r3, [sp, #16] + 8012ce0: 4443 add r3, r8 + & RANGE_MASK]; + 8012ce2: f3c3 4389 ubfx r3, r3, #18, #10 + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp13 + tmp3, + 8012ce6: f81a 3003 ldrb.w r3, [sl, r3] + 8012cea: 70e3 strb r3, [r4, #3] + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp13 - tmp3, + 8012cec: 9b04 ldr r3, [sp, #16] + 8012cee: eba3 0308 sub.w r3, r3, r8 + & RANGE_MASK]; + 8012cf2: f3c3 4389 ubfx r3, r3, #18, #10 + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp13 - tmp3, + 8012cf6: f81a 3003 ldrb.w r3, [sl, r3] + 8012cfa: 7163 strb r3, [r4, #5] + tmp14 = tmp2 - tmp0 - tmp0; + 8012cfc: e9dd 3101 ldrd r3, r1, [sp, #4] + 8012d00: eba3 0341 sub.w r3, r3, r1, lsl #1 + & RANGE_MASK]; + 8012d04: f3c3 4389 ubfx r3, r3, #18, #10 + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp14, + 8012d08: f81a 3003 ldrb.w r3, [sl, r3] + 8012d0c: 7123 strb r3, [r4, #4] + for (ctr = 0; ctr < 9; ctr++) { + 8012d0e: 9b06 ldr r3, [sp, #24] + 8012d10: 454b cmp r3, r9 + 8012d12: f47f af54 bne.w 8012bbe + } +} + 8012d16: b051 add sp, #324 ; 0x144 + 8012d18: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 8012d1c: ffffd8cf .word 0xffffd8cf + +08012d20 : + +GLOBAL(void) +jpeg_idct_10x10 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + 8012d20: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + INT32 z1, z2, z3, z4, z5; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + int * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + 8012d24: f8d0 014c ldr.w r0, [r0, #332] ; 0x14c +{ + 8012d28: b0d9 sub sp, #356 ; 0x164 + 8012d2a: 6d4c ldr r4, [r1, #84] ; 0x54 + 8012d2c: f1a2 0b02 sub.w fp, r2, #2 + 8012d30: 9304 str r3, [sp, #16] + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + 8012d32: f100 0380 add.w r3, r0, #128 ; 0x80 + 8012d36: 3c04 subs r4, #4 + + /* Pass 1: process columns from input, store into work array. */ + + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + 8012d38: a908 add r1, sp, #32 + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + 8012d3a: 9301 str r3, [sp, #4] + for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) { + 8012d3c: f102 030e add.w r3, r2, #14 + 8012d40: 9306 str r3, [sp, #24] + /* Even part */ + + z3 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 8012d42: f93b 6f02 ldrsh.w r6, [fp, #2]! + CONST_BITS-PASS1_BITS); + + z2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + z3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + + z1 = MULTIPLY(z2 + z3, FIX(0.831253876)); /* c6 */ + 8012d46: f641 209a movw r0, #6810 ; 0x1a9a + z3 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 8012d4a: f854 3f04 ldr.w r3, [r4, #4]! + for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) { + 8012d4e: 3104 adds r1, #4 + z4 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + 8012d50: f9bb 2040 ldrsh.w r2, [fp, #64] ; 0x40 + z3 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 8012d54: 435e muls r6, r3 + z4 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + 8012d56: f8d4 3080 ldr.w r3, [r4, #128] ; 0x80 + + /* Odd part */ + + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + 8012d5a: f9bb e050 ldrsh.w lr, [fp, #80] ; 0x50 + z4 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + 8012d5e: 4353 muls r3, r2 + z1 = MULTIPLY(z4, FIX(1.144122806)); /* c4 */ + 8012d60: f242 429d movw r2, #9373 ; 0x249d + z3 <<= CONST_BITS; + 8012d64: 0376 lsls r6, r6, #13 + z1 = MULTIPLY(z4, FIX(1.144122806)); /* c4 */ + 8012d66: fb02 f703 mul.w r7, r2, r3 + z2 = MULTIPLY(z4, FIX(0.437016024)); /* c8 */ + 8012d6a: f640 52fc movw r2, #3580 ; 0xdfc + z3 += ONE << (CONST_BITS-PASS1_BITS-1); + 8012d6e: f506 6680 add.w r6, r6, #1024 ; 0x400 + z2 = MULTIPLY(z4, FIX(0.437016024)); /* c8 */ + 8012d72: 4353 muls r3, r2 + tmp10 = z3 + z1; + 8012d74: 19f5 adds r5, r6, r7 + tmp22 = RIGHT_SHIFT(z3 - ((z1 - z2) << 1), /* c0 = (c4-c8)*2 */ + 8012d76: 1aff subs r7, r7, r3 + tmp11 = z3 - z2; + 8012d78: 1af2 subs r2, r6, r3 + tmp22 = RIGHT_SHIFT(z3 - ((z1 - z2) << 1), /* c0 = (c4-c8)*2 */ + 8012d7a: eba6 0347 sub.w r3, r6, r7, lsl #1 + z2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + 8012d7e: f9bb 6020 ldrsh.w r6, [fp, #32] + z3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + 8012d82: f9bb 7060 ldrsh.w r7, [fp, #96] ; 0x60 + tmp22 = RIGHT_SHIFT(z3 - ((z1 - z2) << 1), /* c0 = (c4-c8)*2 */ + 8012d86: 9305 str r3, [sp, #20] + z2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + 8012d88: 6c23 ldr r3, [r4, #64] ; 0x40 + 8012d8a: 435e muls r6, r3 + z3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + 8012d8c: f8d4 30c0 ldr.w r3, [r4, #192] ; 0xc0 + 8012d90: 435f muls r7, r3 + z1 = MULTIPLY(z2 + z3, FIX(0.831253876)); /* c6 */ + 8012d92: 19f3 adds r3, r6, r7 + 8012d94: 4343 muls r3, r0 + tmp12 = z1 + MULTIPLY(z2, FIX(0.513743148)); /* c2-c6 */ + 8012d96: f241 0071 movw r0, #4209 ; 0x1071 + 8012d9a: fb00 3606 mla r6, r0, r6, r3 + tmp13 = z1 - MULTIPLY(z3, FIX(2.176250899)); /* c2+c6 */ + 8012d9e: 48a0 ldr r0, [pc, #640] ; (8013020 ) + 8012da0: fb00 3307 mla r3, r0, r7, r3 + tmp20 = tmp10 + tmp12; + 8012da4: eb05 0c06 add.w ip, r5, r6 + tmp24 = tmp10 - tmp12; + 8012da8: 1ba8 subs r0, r5, r6 + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + 8012daa: 6e25 ldr r5, [r4, #96] ; 0x60 + tmp21 = tmp11 + tmp13; + 8012dac: 18d7 adds r7, r2, r3 + tmp23 = tmp11 - tmp13; + 8012dae: 1ad3 subs r3, r2, r3 + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 8012db0: f9bb 2010 ldrsh.w r2, [fp, #16] + tmp23 = tmp11 - tmp13; + 8012db4: 9303 str r3, [sp, #12] + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 8012db6: 6a23 ldr r3, [r4, #32] + z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + 8012db8: f9bb 6070 ldrsh.w r6, [fp, #112] ; 0x70 + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 8012dbc: 435a muls r2, r3 + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + 8012dbe: f9bb 3030 ldrsh.w r3, [fp, #48] ; 0x30 + tmp24 = tmp10 - tmp12; + 8012dc2: 9002 str r0, [sp, #8] + + tmp11 = z2 + z4; + tmp13 = z2 - z4; + + tmp12 = MULTIPLY(tmp13, FIX(0.309016994)); /* (c3-c7)/2 */ + 8012dc4: f640 10e3 movw r0, #2531 ; 0x9e3 + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + 8012dc8: 436b muls r3, r5 + z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + 8012dca: f8d4 50a0 ldr.w r5, [r4, #160] ; 0xa0 + 8012dce: fb05 fe0e mul.w lr, r5, lr + z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + 8012dd2: f8d4 50e0 ldr.w r5, [r4, #224] ; 0xe0 + 8012dd6: 4375 muls r5, r6 + tmp11 = z2 + z4; + 8012dd8: eb03 0905 add.w r9, r3, r5 + tmp13 = z2 - z4; + 8012ddc: 1b5b subs r3, r3, r5 + tmp12 = MULTIPLY(tmp13, FIX(0.309016994)); /* (c3-c7)/2 */ + 8012dde: fb00 f503 mul.w r5, r0, r3 + z5 = z3 << CONST_BITS; + + z2 = MULTIPLY(tmp11, FIX(0.951056516)); /* (c3+c7)/2 */ + 8012de2: f641 606f movw r0, #7791 ; 0x1e6f + 8012de6: fb00 f609 mul.w r6, r0, r9 + z4 = z5 + tmp12; + + tmp10 = MULTIPLY(z1, FIX(1.396802247)) + z2 + z4; /* c1 */ + 8012dea: f642 40b3 movw r0, #11443 ; 0x2cb3 + z4 = z5 + tmp12; + 8012dee: eb05 3a4e add.w sl, r5, lr, lsl #13 + tmp10 = MULTIPLY(z1, FIX(1.396802247)) + z2 + z4; /* c1 */ + 8012df2: fb00 6802 mla r8, r0, r2, r6 + tmp14 = MULTIPLY(z1, FIX(0.221231742)) - z2 + z4; /* c9 */ + 8012df6: f240 7014 movw r0, #1812 ; 0x714 + + z2 = MULTIPLY(tmp11, FIX(0.587785252)); /* (c1-c9)/2 */ + z4 = z5 - tmp12 - (tmp13 << (CONST_BITS - 1)); + 8012dfa: ebc5 354e rsb r5, r5, lr, lsl #13 + tmp14 = MULTIPLY(z1, FIX(0.221231742)) - z2 + z4; /* c9 */ + 8012dfe: 4350 muls r0, r2 + tmp10 = MULTIPLY(z1, FIX(1.396802247)) + z2 + z4; /* c1 */ + 8012e00: 44d0 add r8, sl + z4 = z5 - tmp12 - (tmp13 << (CONST_BITS - 1)); + 8012e02: eba5 3503 sub.w r5, r5, r3, lsl #12 + + tmp12 = (z1 - tmp13 - z3) << PASS1_BITS; + 8012e06: 1ad3 subs r3, r2, r3 + tmp14 = MULTIPLY(z1, FIX(0.221231742)) - z2 + z4; /* c9 */ + 8012e08: 1b86 subs r6, r0, r6 + + wsptr[8*0] = (int) RIGHT_SHIFT(tmp20 + tmp10, CONST_BITS-PASS1_BITS); + wsptr[8*9] = (int) RIGHT_SHIFT(tmp20 - tmp10, CONST_BITS-PASS1_BITS); + wsptr[8*1] = (int) RIGHT_SHIFT(tmp21 + tmp11, CONST_BITS-PASS1_BITS); + wsptr[8*8] = (int) RIGHT_SHIFT(tmp21 - tmp11, CONST_BITS-PASS1_BITS); + wsptr[8*2] = (int) (tmp22 + tmp12); + 8012e0a: 9805 ldr r0, [sp, #20] + tmp12 = (z1 - tmp13 - z3) << PASS1_BITS; + 8012e0c: eba3 030e sub.w r3, r3, lr + tmp11 = MULTIPLY(z1, FIX(1.260073511)) - z2 - z4; /* c3 */ + 8012e10: f642 0e53 movw lr, #10323 ; 0x2853 + tmp14 = MULTIPLY(z1, FIX(0.221231742)) - z2 + z4; /* c9 */ + 8012e14: 4456 add r6, sl + z2 = MULTIPLY(tmp11, FIX(0.587785252)); /* (c1-c9)/2 */ + 8012e16: f241 2acf movw sl, #4815 ; 0x12cf + tmp11 = MULTIPLY(z1, FIX(1.260073511)) - z2 - z4; /* c3 */ + 8012e1a: fb0e fe02 mul.w lr, lr, r2 + tmp12 = (z1 - tmp13 - z3) << PASS1_BITS; + 8012e1e: 009b lsls r3, r3, #2 + z2 = MULTIPLY(tmp11, FIX(0.587785252)); /* (c1-c9)/2 */ + 8012e20: fb0a f909 mul.w r9, sl, r9 + tmp13 = MULTIPLY(z1, FIX(0.642039522)) - z2 + z4; /* c7 */ + 8012e24: f241 4a8c movw sl, #5260 ; 0x148c + 8012e28: fb0a f202 mul.w r2, sl, r2 + tmp11 = MULTIPLY(z1, FIX(1.260073511)) - z2 - z4; /* c3 */ + 8012e2c: ebae 0e09 sub.w lr, lr, r9 + tmp13 = MULTIPLY(z1, FIX(0.642039522)) - z2 + z4; /* c7 */ + 8012e30: eba2 0209 sub.w r2, r2, r9 + tmp11 = MULTIPLY(z1, FIX(1.260073511)) - z2 - z4; /* c3 */ + 8012e34: ebae 0e05 sub.w lr, lr, r5 + tmp13 = MULTIPLY(z1, FIX(0.642039522)) - z2 + z4; /* c7 */ + 8012e38: 442a add r2, r5 + wsptr[8*0] = (int) RIGHT_SHIFT(tmp20 + tmp10, CONST_BITS-PASS1_BITS); + 8012e3a: eb0c 0508 add.w r5, ip, r8 + wsptr[8*9] = (int) RIGHT_SHIFT(tmp20 - tmp10, CONST_BITS-PASS1_BITS); + 8012e3e: ebac 0c08 sub.w ip, ip, r8 + wsptr[8*0] = (int) RIGHT_SHIFT(tmp20 + tmp10, CONST_BITS-PASS1_BITS); + 8012e42: 12ed asrs r5, r5, #11 + 8012e44: f841 5c04 str.w r5, [r1, #-4] + wsptr[8*9] = (int) RIGHT_SHIFT(tmp20 - tmp10, CONST_BITS-PASS1_BITS); + 8012e48: ea4f 25ec mov.w r5, ip, asr #11 + 8012e4c: f8c1 511c str.w r5, [r1, #284] ; 0x11c + wsptr[8*1] = (int) RIGHT_SHIFT(tmp21 + tmp11, CONST_BITS-PASS1_BITS); + 8012e50: eb07 050e add.w r5, r7, lr + wsptr[8*8] = (int) RIGHT_SHIFT(tmp21 - tmp11, CONST_BITS-PASS1_BITS); + 8012e54: eba7 070e sub.w r7, r7, lr + wsptr[8*1] = (int) RIGHT_SHIFT(tmp21 + tmp11, CONST_BITS-PASS1_BITS); + 8012e58: 12ed asrs r5, r5, #11 + wsptr[8*8] = (int) RIGHT_SHIFT(tmp21 - tmp11, CONST_BITS-PASS1_BITS); + 8012e5a: 12ff asrs r7, r7, #11 + wsptr[8*1] = (int) RIGHT_SHIFT(tmp21 + tmp11, CONST_BITS-PASS1_BITS); + 8012e5c: 61cd str r5, [r1, #28] + wsptr[8*2] = (int) (tmp22 + tmp12); + 8012e5e: eb03 25e0 add.w r5, r3, r0, asr #11 + wsptr[8*7] = (int) (tmp22 - tmp12); + 8012e62: ebc3 23e0 rsb r3, r3, r0, asr #11 + wsptr[8*8] = (int) RIGHT_SHIFT(tmp21 - tmp11, CONST_BITS-PASS1_BITS); + 8012e66: f8c1 70fc str.w r7, [r1, #252] ; 0xfc + wsptr[8*2] = (int) (tmp22 + tmp12); + 8012e6a: 63cd str r5, [r1, #60] ; 0x3c + wsptr[8*7] = (int) (tmp22 - tmp12); + 8012e6c: f8c1 30dc str.w r3, [r1, #220] ; 0xdc + wsptr[8*3] = (int) RIGHT_SHIFT(tmp23 + tmp13, CONST_BITS-PASS1_BITS); + 8012e70: 9b03 ldr r3, [sp, #12] + 8012e72: 4413 add r3, r2 + 8012e74: 12db asrs r3, r3, #11 + 8012e76: 65cb str r3, [r1, #92] ; 0x5c + wsptr[8*6] = (int) RIGHT_SHIFT(tmp23 - tmp13, CONST_BITS-PASS1_BITS); + 8012e78: 9b03 ldr r3, [sp, #12] + 8012e7a: 1a9b subs r3, r3, r2 + 8012e7c: 12db asrs r3, r3, #11 + 8012e7e: f8c1 30bc str.w r3, [r1, #188] ; 0xbc + wsptr[8*4] = (int) RIGHT_SHIFT(tmp24 + tmp14, CONST_BITS-PASS1_BITS); + 8012e82: 9b02 ldr r3, [sp, #8] + 8012e84: 4433 add r3, r6 + 8012e86: 12db asrs r3, r3, #11 + 8012e88: 67cb str r3, [r1, #124] ; 0x7c + wsptr[8*5] = (int) RIGHT_SHIFT(tmp24 - tmp14, CONST_BITS-PASS1_BITS); + 8012e8a: 9b02 ldr r3, [sp, #8] + 8012e8c: 1b9b subs r3, r3, r6 + 8012e8e: 12db asrs r3, r3, #11 + 8012e90: f8c1 309c str.w r3, [r1, #156] ; 0x9c + for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) { + 8012e94: 9b06 ldr r3, [sp, #24] + 8012e96: 455b cmp r3, fp + 8012e98: f47f af53 bne.w 8012d42 + 8012e9c: 9b04 ldr r3, [sp, #16] + } + + /* Pass 2: process 10 rows from work array, store into output array. */ + + wsptr = workspace; + 8012e9e: a908 add r1, sp, #32 + 8012ea0: f1a3 0b04 sub.w fp, r3, #4 + 8012ea4: 3324 adds r3, #36 ; 0x24 + 8012ea6: 9307 str r3, [sp, #28] + for (ctr = 0; ctr < 10; ctr++) { + outptr = output_buf[ctr] + output_col; + 8012ea8: f85b 3f04 ldr.w r3, [fp, #4]! + tmp22 = z3 - ((z1 - z2) << 1); /* c0 = (c4-c8)*2 */ + + z2 = (INT32) wsptr[2]; + z3 = (INT32) wsptr[6]; + + z1 = MULTIPLY(z2 + z3, FIX(0.831253876)); /* c6 */ + 8012eac: f641 209a movw r0, #6810 ; 0x1a9a + outptr = output_buf[ctr] + output_col; + 8012eb0: 9a62 ldr r2, [sp, #392] ; 0x188 + & RANGE_MASK]; + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp24 - tmp14, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + + wsptr += 8; /* advance pointer to next row */ + 8012eb2: 3120 adds r1, #32 + z4 = (INT32) wsptr[4]; + 8012eb4: f851 7c10 ldr.w r7, [r1, #-16] + outptr = output_buf[ctr] + output_col; + 8012eb8: 189c adds r4, r3, r2 + z1 = MULTIPLY(z4, FIX(1.144122806)); /* c4 */ + 8012eba: f242 429d movw r2, #9373 ; 0x249d + outptr = output_buf[ctr] + output_col; + 8012ebe: 9306 str r3, [sp, #24] + z1 = MULTIPLY(z4, FIX(1.144122806)); /* c4 */ + 8012ec0: fb02 f507 mul.w r5, r2, r7 + z3 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + 8012ec4: f851 3c20 ldr.w r3, [r1, #-32] + z2 = MULTIPLY(z4, FIX(0.437016024)); /* c8 */ + 8012ec8: f640 52fc movw r2, #3580 ; 0xdfc + z3 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + 8012ecc: 3310 adds r3, #16 + z2 = MULTIPLY(z4, FIX(0.437016024)); /* c8 */ + 8012ece: 4357 muls r7, r2 + tmp10 = z3 + z1; + 8012ed0: eb05 3643 add.w r6, r5, r3, lsl #13 + tmp22 = z3 - ((z1 - z2) << 1); /* c0 = (c4-c8)*2 */ + 8012ed4: 1bed subs r5, r5, r7 + tmp11 = z3 - z2; + 8012ed6: ebc7 3243 rsb r2, r7, r3, lsl #13 + z3 = (INT32) wsptr[6]; + 8012eda: f851 7c08 ldr.w r7, [r1, #-8] + tmp22 = z3 - ((z1 - z2) << 1); /* c0 = (c4-c8)*2 */ + 8012ede: 006d lsls r5, r5, #1 + 8012ee0: ebc5 3343 rsb r3, r5, r3, lsl #13 + z2 = (INT32) wsptr[2]; + 8012ee4: f851 5c18 ldr.w r5, [r1, #-24] + tmp22 = z3 - ((z1 - z2) << 1); /* c0 = (c4-c8)*2 */ + 8012ee8: 9302 str r3, [sp, #8] + z1 = MULTIPLY(z2 + z3, FIX(0.831253876)); /* c6 */ + 8012eea: 19eb adds r3, r5, r7 + 8012eec: 4343 muls r3, r0 + tmp12 = z1 + MULTIPLY(z2, FIX(0.513743148)); /* c2-c6 */ + 8012eee: f241 0071 movw r0, #4209 ; 0x1071 + 8012ef2: fb00 3505 mla r5, r0, r5, r3 + tmp13 = z1 - MULTIPLY(z3, FIX(2.176250899)); /* c2+c6 */ + 8012ef6: 484a ldr r0, [pc, #296] ; (8013020 ) + 8012ef8: fb00 3307 mla r3, r0, r7, r3 + tmp20 = tmp10 + tmp12; + 8012efc: eb06 0c05 add.w ip, r6, r5 + tmp24 = tmp10 - tmp12; + 8012f00: 1b70 subs r0, r6, r5 + z4 = (INT32) wsptr[7]; + 8012f02: f851 5c04 ldr.w r5, [r1, #-4] + tmp21 = tmp11 + tmp13; + 8012f06: 18d7 adds r7, r2, r3 + tmp23 = tmp11 - tmp13; + 8012f08: 1ad3 subs r3, r2, r3 + tmp24 = tmp10 - tmp12; + 8012f0a: 9003 str r0, [sp, #12] + tmp12 = MULTIPLY(tmp13, FIX(0.309016994)); /* (c3-c7)/2 */ + 8012f0c: f640 10e3 movw r0, #2531 ; 0x9e3 + tmp23 = tmp11 - tmp13; + 8012f10: 9304 str r3, [sp, #16] + z2 = (INT32) wsptr[3]; + 8012f12: f851 3c14 ldr.w r3, [r1, #-20] + z1 = (INT32) wsptr[1]; + 8012f16: f851 2c1c ldr.w r2, [r1, #-28] + tmp11 = z2 + z4; + 8012f1a: eb03 0905 add.w r9, r3, r5 + tmp13 = z2 - z4; + 8012f1e: 1b5b subs r3, r3, r5 + tmp12 = MULTIPLY(tmp13, FIX(0.309016994)); /* (c3-c7)/2 */ + 8012f20: fb00 f503 mul.w r5, r0, r3 + z2 = MULTIPLY(tmp11, FIX(0.951056516)); /* (c3+c7)/2 */ + 8012f24: f641 606f movw r0, #7791 ; 0x1e6f + 8012f28: fb00 f809 mul.w r8, r0, r9 + z4 = z3 + tmp12; + 8012f2c: f851 0c0c ldr.w r0, [r1, #-12] + 8012f30: eb05 3a40 add.w sl, r5, r0, lsl #13 + tmp10 = MULTIPLY(z1, FIX(1.396802247)) + z2 + z4; /* c1 */ + 8012f34: f642 40b3 movw r0, #11443 ; 0x2cb3 + 8012f38: fb00 8e02 mla lr, r0, r2, r8 + tmp14 = MULTIPLY(z1, FIX(0.221231742)) - z2 + z4; /* c9 */ + 8012f3c: f240 7014 movw r0, #1812 ; 0x714 + 8012f40: fb00 f602 mul.w r6, r0, r2 + tmp10 = MULTIPLY(z1, FIX(1.396802247)) + z2 + z4; /* c1 */ + 8012f44: 44d6 add lr, sl + z4 = z3 - tmp12 - (tmp13 << (CONST_BITS - 1)); + 8012f46: f851 0c0c ldr.w r0, [r1, #-12] + tmp14 = MULTIPLY(z1, FIX(0.221231742)) - z2 + z4; /* c9 */ + 8012f4a: eba6 0608 sub.w r6, r6, r8 + tmp11 = MULTIPLY(z1, FIX(1.260073511)) - z2 - z4; /* c3 */ + 8012f4e: f642 0853 movw r8, #10323 ; 0x2853 + z4 = z3 - tmp12 - (tmp13 << (CONST_BITS - 1)); + 8012f52: ebc5 3540 rsb r5, r5, r0, lsl #13 + tmp14 = MULTIPLY(z1, FIX(0.221231742)) - z2 + z4; /* c9 */ + 8012f56: 4456 add r6, sl + z2 = MULTIPLY(tmp11, FIX(0.587785252)); /* (c1-c9)/2 */ + 8012f58: f241 2acf movw sl, #4815 ; 0x12cf + z4 = z3 - tmp12 - (tmp13 << (CONST_BITS - 1)); + 8012f5c: eba5 3503 sub.w r5, r5, r3, lsl #12 + tmp11 = MULTIPLY(z1, FIX(1.260073511)) - z2 - z4; /* c3 */ + 8012f60: fb08 f802 mul.w r8, r8, r2 + z2 = MULTIPLY(tmp11, FIX(0.587785252)); /* (c1-c9)/2 */ + 8012f64: fb0a f909 mul.w r9, sl, r9 + tmp13 = MULTIPLY(z1, FIX(0.642039522)) - z2 + z4; /* c7 */ + 8012f68: f241 4a8c movw sl, #5260 ; 0x148c + tmp12 = ((z1 - tmp13) << CONST_BITS) - z3; + 8012f6c: 1ad3 subs r3, r2, r3 + tmp13 = MULTIPLY(z1, FIX(0.642039522)) - z2 + z4; /* c7 */ + 8012f6e: fb0a f202 mul.w r2, sl, r2 + tmp11 = MULTIPLY(z1, FIX(1.260073511)) - z2 - z4; /* c3 */ + 8012f72: eba8 0809 sub.w r8, r8, r9 + tmp12 = ((z1 - tmp13) << CONST_BITS) - z3; + 8012f76: 035b lsls r3, r3, #13 + tmp13 = MULTIPLY(z1, FIX(0.642039522)) - z2 + z4; /* c7 */ + 8012f78: eba2 0209 sub.w r2, r2, r9 + tmp11 = MULTIPLY(z1, FIX(1.260073511)) - z2 - z4; /* c3 */ + 8012f7c: eba8 0805 sub.w r8, r8, r5 + tmp12 = ((z1 - tmp13) << CONST_BITS) - z3; + 8012f80: eba3 3340 sub.w r3, r3, r0, lsl #13 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp10, + 8012f84: 9806 ldr r0, [sp, #24] + tmp13 = MULTIPLY(z1, FIX(0.642039522)) - z2 + z4; /* c7 */ + 8012f86: 442a add r2, r5 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp10, + 8012f88: eb0c 050e add.w r5, ip, lr + tmp12 = ((z1 - tmp13) << CONST_BITS) - z3; + 8012f8c: 9305 str r3, [sp, #20] + outptr[9] = range_limit[(int) RIGHT_SHIFT(tmp20 - tmp10, + 8012f8e: ebac 0c0e sub.w ip, ip, lr + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp10, + 8012f92: 9b01 ldr r3, [sp, #4] + & RANGE_MASK]; + 8012f94: f3c5 4589 ubfx r5, r5, #18, #10 + & RANGE_MASK]; + 8012f98: f3cc 4c89 ubfx ip, ip, #18, #10 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp10, + 8012f9c: 5d5d ldrb r5, [r3, r5] + 8012f9e: 9b62 ldr r3, [sp, #392] ; 0x188 + 8012fa0: 54c5 strb r5, [r0, r3] + outptr[9] = range_limit[(int) RIGHT_SHIFT(tmp20 - tmp10, + 8012fa2: 9b01 ldr r3, [sp, #4] + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp12, + 8012fa4: 9805 ldr r0, [sp, #20] + outptr[9] = range_limit[(int) RIGHT_SHIFT(tmp20 - tmp10, + 8012fa6: f813 500c ldrb.w r5, [r3, ip] + 8012faa: 7265 strb r5, [r4, #9] + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp11, + 8012fac: eb07 0508 add.w r5, r7, r8 + outptr[8] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp11, + 8012fb0: eba7 0708 sub.w r7, r7, r8 + & RANGE_MASK]; + 8012fb4: f3c5 4589 ubfx r5, r5, #18, #10 + & RANGE_MASK]; + 8012fb8: f3c7 4789 ubfx r7, r7, #18, #10 + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp11, + 8012fbc: 5d5d ldrb r5, [r3, r5] + 8012fbe: 7065 strb r5, [r4, #1] + outptr[8] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp11, + 8012fc0: 5ddd ldrb r5, [r3, r7] + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp12, + 8012fc2: 9b02 ldr r3, [sp, #8] + outptr[8] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp11, + 8012fc4: 7225 strb r5, [r4, #8] + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp12, + 8012fc6: 181d adds r5, r3, r0 + 8012fc8: 9b01 ldr r3, [sp, #4] + & RANGE_MASK]; + 8012fca: f3c5 4589 ubfx r5, r5, #18, #10 + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp12, + 8012fce: 5d5d ldrb r5, [r3, r5] + 8012fd0: 70a5 strb r5, [r4, #2] + outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp12, + 8012fd2: 9b02 ldr r3, [sp, #8] + 8012fd4: 1a1b subs r3, r3, r0 + 8012fd6: 9801 ldr r0, [sp, #4] + & RANGE_MASK]; + 8012fd8: f3c3 4389 ubfx r3, r3, #18, #10 + outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp12, + 8012fdc: 5cc3 ldrb r3, [r0, r3] + 8012fde: 71e3 strb r3, [r4, #7] + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp23 + tmp13, + 8012fe0: 9b04 ldr r3, [sp, #16] + 8012fe2: 4413 add r3, r2 + & RANGE_MASK]; + 8012fe4: f3c3 4389 ubfx r3, r3, #18, #10 + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp23 + tmp13, + 8012fe8: 5cc3 ldrb r3, [r0, r3] + 8012fea: 70e3 strb r3, [r4, #3] + outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp23 - tmp13, + 8012fec: 9b04 ldr r3, [sp, #16] + 8012fee: 1a9b subs r3, r3, r2 + & RANGE_MASK]; + 8012ff0: f3c3 4389 ubfx r3, r3, #18, #10 + outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp23 - tmp13, + 8012ff4: 5cc3 ldrb r3, [r0, r3] + 8012ff6: 71a3 strb r3, [r4, #6] + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp24 + tmp14, + 8012ff8: 9b03 ldr r3, [sp, #12] + 8012ffa: 4433 add r3, r6 + & RANGE_MASK]; + 8012ffc: f3c3 4389 ubfx r3, r3, #18, #10 + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp24 + tmp14, + 8013000: 5cc3 ldrb r3, [r0, r3] + 8013002: 7123 strb r3, [r4, #4] + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp24 - tmp14, + 8013004: 9b03 ldr r3, [sp, #12] + 8013006: 1b9b subs r3, r3, r6 + & RANGE_MASK]; + 8013008: f3c3 4389 ubfx r3, r3, #18, #10 + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp24 - tmp14, + 801300c: 5cc3 ldrb r3, [r0, r3] + 801300e: 7163 strb r3, [r4, #5] + for (ctr = 0; ctr < 10; ctr++) { + 8013010: 9b07 ldr r3, [sp, #28] + 8013012: 455b cmp r3, fp + 8013014: f47f af48 bne.w 8012ea8 + } +} + 8013018: b059 add sp, #356 ; 0x164 + 801301a: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 801301e: bf00 nop + 8013020: ffffba5c .word 0xffffba5c + +08013024 : + +GLOBAL(void) +jpeg_idct_11x11 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + 8013024: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8013028: b0e5 sub sp, #404 ; 0x194 + 801302a: 6d49 ldr r1, [r1, #84] ; 0x54 + 801302c: f1a2 0b02 sub.w fp, r2, #2 + 8013030: 9308 str r3, [sp, #32] + INT32 z1, z2, z3, z4; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + int * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + 8013032: f8d0 314c ldr.w r3, [r0, #332] ; 0x14c + 8013036: 3380 adds r3, #128 ; 0x80 + 8013038: 9301 str r3, [sp, #4] + /* Pass 1: process columns from input, store into work array. */ + + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) { + 801303a: 1f0b subs r3, r1, #4 + 801303c: 9302 str r3, [sp, #8] + 801303e: f102 030e add.w r3, r2, #14 + wsptr = workspace; + 8013042: aa0c add r2, sp, #48 ; 0x30 + 8013044: 930a str r3, [sp, #40] ; 0x28 + /* Even part */ + + tmp10 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 8013046: 9902 ldr r1, [sp, #8] + tmp20 = MULTIPLY(z2 - z3, FIX(2.546640132)); /* c2+c4 */ + tmp23 = MULTIPLY(z2 - z1, FIX(0.430815045)); /* c2-c6 */ + z4 = z1 + z3; + tmp24 = MULTIPLY(z4, - FIX(1.155664402)); /* -(c2-c10) */ + z4 -= z2; + tmp25 = tmp10 + MULTIPLY(z4, FIX(1.356927976)); /* c2 */ + 8013048: f642 3e6c movw lr, #11116 ; 0x2b6c + tmp10 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 801304c: f93b 3f02 ldrsh.w r3, [fp, #2]! + tmp12 = MULTIPLY(z1 + z3, FIX(0.670361295)); /* c5-c9 */ + tmp13 = tmp14 + MULTIPLY(z1 + z4, FIX(0.366151574)); /* c7-c9 */ + tmp10 = tmp11 + tmp12 + tmp13 - + MULTIPLY(z1, FIX(0.923107866)); /* c7+c5+c3-c1-2*c9 */ + z1 = tmp14 - MULTIPLY(z2 + z3, FIX(1.163011579)); /* c7+c9 */ + tmp11 += z1 + MULTIPLY(z2, FIX(2.073276588)); /* c1+c7+3*c9-c3 */ + 8013050: f244 2958 movw r9, #16984 ; 0x4258 + tmp10 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 8013054: f851 0f04 ldr.w r0, [r1, #4]! + for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) { + 8013058: 3204 adds r2, #4 + z3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + 801305a: f9bb 6060 ldrsh.w r6, [fp, #96] ; 0x60 + z1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + 801305e: 6c0c ldr r4, [r1, #64] ; 0x40 + tmp10 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 8013060: 4343 muls r3, r0 + z1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + 8013062: f9bb 0020 ldrsh.w r0, [fp, #32] + z2 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + 8013066: f8d1 5080 ldr.w r5, [r1, #128] ; 0x80 + tmp10 <<= CONST_BITS; + 801306a: 035b lsls r3, r3, #13 + z1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + 801306c: 4360 muls r0, r4 + z2 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + 801306e: f9bb 4040 ldrsh.w r4, [fp, #64] ; 0x40 + tmp10 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 8013072: 9102 str r1, [sp, #8] + tmp10 += ONE << (CONST_BITS-PASS1_BITS-1); + 8013074: f503 6380 add.w r3, r3, #1024 ; 0x400 + z2 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + 8013078: 436c muls r4, r5 + z3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + 801307a: f8d1 50c0 ldr.w r5, [r1, #192] ; 0xc0 + 801307e: 436e muls r6, r5 + tmp20 = MULTIPLY(z2 - z3, FIX(2.546640132)); /* c2+c4 */ + 8013080: f245 157e movw r5, #20862 ; 0x517e + tmp23 = MULTIPLY(z2 - z1, FIX(0.430815045)); /* c2-c6 */ + 8013084: 1a27 subs r7, r4, r0 + tmp20 = MULTIPLY(z2 - z3, FIX(2.546640132)); /* c2+c4 */ + 8013086: eba4 0c06 sub.w ip, r4, r6 + 801308a: fb05 fc0c mul.w ip, r5, ip + tmp23 = MULTIPLY(z2 - z1, FIX(0.430815045)); /* c2-c6 */ + 801308e: f640 55c9 movw r5, #3529 ; 0xdc9 + 8013092: 436f muls r7, r5 + z4 = z1 + z3; + 8013094: 1985 adds r5, r0, r6 + z4 -= z2; + 8013096: 1b29 subs r1, r5, r4 + tmp25 = tmp10 + MULTIPLY(z4, FIX(1.356927976)); /* c2 */ + 8013098: fb0e 3301 mla r3, lr, r1, r3 + tmp21 = tmp20 + tmp23 + tmp25 - + 801309c: eb0c 0e07 add.w lr, ip, r7 + z4 -= z2; + 80130a0: 9109 str r1, [sp, #36] ; 0x24 + tmp21 = tmp20 + tmp23 + tmp25 - + 80130a2: 449e add lr, r3 + 80130a4: 49d0 ldr r1, [pc, #832] ; (80133e8 ) + 80130a6: fb01 e104 mla r1, r1, r4, lr + tmp20 += tmp25 + MULTIPLY(z3, FIX(2.115825087)); /* c4+c6 */ + 80130aa: f244 3eb5 movw lr, #17333 ; 0x43b5 + 80130ae: fb0e 3e06 mla lr, lr, r6, r3 + tmp21 = tmp20 + tmp23 + tmp25 - + 80130b2: 9103 str r1, [sp, #12] + tmp20 += tmp25 + MULTIPLY(z3, FIX(2.115825087)); /* c4+c6 */ + 80130b4: eb0e 010c add.w r1, lr, ip + tmp14 = MULTIPLY(tmp11 + z3 + z4, FIX(0.398430003)); /* c9 */ + 80130b8: f44f 6e4c mov.w lr, #3264 ; 0xcc0 + tmp20 += tmp25 + MULTIPLY(z3, FIX(2.115825087)); /* c4+c6 */ + 80130bc: 9104 str r1, [sp, #16] + tmp23 += tmp25 - MULTIPLY(z1, FIX(1.513598477)); /* c6+c8 */ + 80130be: 49cb ldr r1, [pc, #812] ; (80133ec ) + 80130c0: fb01 3c00 mla ip, r1, r0, r3 + 80130c4: eb0c 0107 add.w r1, ip, r7 + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + 80130c8: f9bb 7030 ldrsh.w r7, [fp, #48] ; 0x30 + z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + 80130cc: f9bb c050 ldrsh.w ip, [fp, #80] ; 0x50 + tmp23 += tmp25 - MULTIPLY(z1, FIX(1.513598477)); /* c6+c8 */ + 80130d0: 9105 str r1, [sp, #20] + tmp24 += tmp25; + 80130d2: 49c7 ldr r1, [pc, #796] ; (80133f0 ) + 80130d4: fb01 3505 mla r5, r1, r5, r3 + tmp22 = tmp24 - MULTIPLY(z3, FIX(0.788749120)); /* c8+c10 */ + 80130d8: f601 31be addw r1, r1, #3006 ; 0xbbe + 80130dc: fb01 5106 mla r1, r1, r6, r5 + tmp24 += MULTIPLY(z2, FIX(1.944413522)) - /* c2+c8 */ + 80130e0: f643 6639 movw r6, #15929 ; 0x3e39 + tmp22 = tmp24 - MULTIPLY(z3, FIX(0.788749120)); /* c8+c10 */ + 80130e4: 9106 str r1, [sp, #24] + MULTIPLY(z1, FIX(1.390975730)); /* c4+c10 */ + 80130e6: 49c3 ldr r1, [pc, #780] ; (80133f4 ) + 80130e8: 4348 muls r0, r1 + tmp24 += MULTIPLY(z2, FIX(1.944413522)) - /* c2+c8 */ + 80130ea: fb06 0004 mla r0, r6, r4, r0 + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 80130ee: f9bb 4010 ldrsh.w r4, [fp, #16] + z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + 80130f2: f9bb 6070 ldrsh.w r6, [fp, #112] ; 0x70 + tmp24 += MULTIPLY(z2, FIX(1.944413522)) - /* c2+c8 */ + 80130f6: 1941 adds r1, r0, r5 + 80130f8: 9107 str r1, [sp, #28] + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 80130fa: 9902 ldr r1, [sp, #8] + 80130fc: 6a08 ldr r0, [r1, #32] + 80130fe: 4344 muls r4, r0 + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + 8013100: 6e08 ldr r0, [r1, #96] ; 0x60 + 8013102: 4347 muls r7, r0 + z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + 8013104: f8d1 00a0 ldr.w r0, [r1, #160] ; 0xa0 + 8013108: fb00 fc0c mul.w ip, r0, ip + z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + 801310c: f8d1 00e0 ldr.w r0, [r1, #224] ; 0xe0 + tmp10 = tmp11 + tmp12 + tmp13 - + 8013110: 49b9 ldr r1, [pc, #740] ; (80133f8 ) + z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + 8013112: 4346 muls r6, r0 + tmp11 = z1 + z2; + 8013114: 19e0 adds r0, r4, r7 + tmp12 = MULTIPLY(z1 + z3, FIX(0.670361295)); /* c5-c9 */ + 8013116: eb04 0a0c add.w sl, r4, ip + tmp14 = MULTIPLY(tmp11 + z3 + z4, FIX(0.398430003)); /* c9 */ + 801311a: eb0c 0500 add.w r5, ip, r0 + tmp13 = tmp14 + MULTIPLY(z1 + z4, FIX(0.366151574)); /* c7-c9 */ + 801311e: eb04 0806 add.w r8, r4, r6 + tmp14 = MULTIPLY(tmp11 + z3 + z4, FIX(0.398430003)); /* c9 */ + 8013122: 4435 add r5, r6 + 8013124: fb0e f505 mul.w r5, lr, r5 + tmp11 = MULTIPLY(tmp11, FIX(0.887983902)); /* c3-c9 */ + 8013128: f641 4e6a movw lr, #7274 ; 0x1c6a + 801312c: fb0e f000 mul.w r0, lr, r0 + tmp12 = MULTIPLY(z1 + z3, FIX(0.670361295)); /* c5-c9 */ + 8013130: f241 5e74 movw lr, #5492 ; 0x1574 + 8013134: fb0e fa0a mul.w sl, lr, sl + tmp13 = tmp14 + MULTIPLY(z1 + z4, FIX(0.366151574)); /* c7-c9 */ + 8013138: f640 3eb8 movw lr, #3000 ; 0xbb8 + 801313c: fb0e 5808 mla r8, lr, r8, r5 + tmp10 = tmp11 + tmp12 + tmp13 - + 8013140: eb00 0e0a add.w lr, r0, sl + 8013144: 44c6 add lr, r8 + 8013146: fb01 ee04 mla lr, r1, r4, lr + z1 = tmp14 - MULTIPLY(z2 + z3, FIX(1.163011579)); /* c7+c9 */ + 801314a: eb07 040c add.w r4, r7, ip + 801314e: f2a1 71ad subw r1, r1, #1965 ; 0x7ad + 8013152: fb01 5404 mla r4, r1, r4, r5 + tmp12 += z1 - MULTIPLY(z3, FIX(1.192193623)); /* c3+c5-c7-c9 */ + 8013156: 39ef subs r1, #239 ; 0xef + tmp11 += z1 + MULTIPLY(z2, FIX(2.073276588)); /* c1+c7+3*c9-c3 */ + 8013158: fb09 4907 mla r9, r9, r7, r4 + tmp12 += z1 - MULTIPLY(z3, FIX(1.192193623)); /* c3+c5-c7-c9 */ + 801315c: fb01 440c mla r4, r1, ip, r4 + z1 = MULTIPLY(z2 + z4, - FIX(1.798248910)); /* -(c1+c9) */ + 8013160: 49a6 ldr r1, [pc, #664] ; (80133fc ) + tmp11 += z1 + MULTIPLY(z2, FIX(2.073276588)); /* c1+c7+3*c9-c3 */ + 8013162: 4481 add r9, r0 + z1 = MULTIPLY(z2 + z4, - FIX(1.798248910)); /* -(c1+c9) */ + 8013164: 19b8 adds r0, r7, r6 + tmp12 += z1 - MULTIPLY(z3, FIX(1.192193623)); /* c3+c5-c7-c9 */ + 8013166: 4454 add r4, sl + tmp11 += z1; + tmp13 += z1 + MULTIPLY(z4, FIX(2.102458632)); /* c1+c5+c9-c7 */ + 8013168: f244 3a47 movw sl, #17223 ; 0x4347 + z1 = MULTIPLY(z2 + z4, - FIX(1.798248910)); /* -(c1+c9) */ + 801316c: 4348 muls r0, r1 + MULTIPLY(z3, FIX(1.001388905)) - /* c1-c9 */ + MULTIPLY(z4, FIX(1.684843907)); /* c3+c9 */ + + /* Final output stage */ + + wsptr[8*0] = (int) RIGHT_SHIFT(tmp20 + tmp10, CONST_BITS-PASS1_BITS); + 801316e: 9904 ldr r1, [sp, #16] + tmp11 += z1; + 8013170: 4481 add r9, r0 + tmp13 += z1 + MULTIPLY(z4, FIX(2.102458632)); /* c1+c5+c9-c7 */ + 8013172: fb0a 0006 mla r0, sl, r6, r0 + 8013176: 4440 add r0, r8 + MULTIPLY(z3, FIX(1.001388905)) - /* c1-c9 */ + 8013178: f242 080b movw r8, #8203 ; 0x200b + 801317c: fb08 fc0c mul.w ip, r8, ip + tmp14 += MULTIPLY(z2, - FIX(1.467221301)) + /* -(c5+c9) */ + 8013180: f8df 8280 ldr.w r8, [pc, #640] ; 8013404 + 8013184: fb08 cc07 mla ip, r8, r7, ip + MULTIPLY(z3, FIX(1.001388905)) - /* c1-c9 */ + 8013188: 4f9d ldr r7, [pc, #628] ; (8013400 ) + 801318a: fb07 cc06 mla ip, r7, r6, ip + tmp14 += MULTIPLY(z2, - FIX(1.467221301)) + /* -(c5+c9) */ + 801318e: 44ac add ip, r5 + wsptr[8*0] = (int) RIGHT_SHIFT(tmp20 + tmp10, CONST_BITS-PASS1_BITS); + 8013190: eb01 050e add.w r5, r1, lr + 8013194: 12ed asrs r5, r5, #11 + 8013196: f842 5c04 str.w r5, [r2, #-4] + wsptr[8*10] = (int) RIGHT_SHIFT(tmp20 - tmp10, CONST_BITS-PASS1_BITS); + 801319a: eba1 050e sub.w r5, r1, lr + wsptr[8*1] = (int) RIGHT_SHIFT(tmp21 + tmp11, CONST_BITS-PASS1_BITS); + 801319e: 9903 ldr r1, [sp, #12] + wsptr[8*10] = (int) RIGHT_SHIFT(tmp20 - tmp10, CONST_BITS-PASS1_BITS); + 80131a0: 12ed asrs r5, r5, #11 + 80131a2: f8c2 513c str.w r5, [r2, #316] ; 0x13c + wsptr[8*1] = (int) RIGHT_SHIFT(tmp21 + tmp11, CONST_BITS-PASS1_BITS); + 80131a6: eb01 0509 add.w r5, r1, r9 + 80131aa: 12ed asrs r5, r5, #11 + 80131ac: 61d5 str r5, [r2, #28] + wsptr[8*9] = (int) RIGHT_SHIFT(tmp21 - tmp11, CONST_BITS-PASS1_BITS); + 80131ae: eba1 0509 sub.w r5, r1, r9 + wsptr[8*2] = (int) RIGHT_SHIFT(tmp22 + tmp12, CONST_BITS-PASS1_BITS); + 80131b2: 9906 ldr r1, [sp, #24] + wsptr[8*9] = (int) RIGHT_SHIFT(tmp21 - tmp11, CONST_BITS-PASS1_BITS); + 80131b4: 12ed asrs r5, r5, #11 + 80131b6: f8c2 511c str.w r5, [r2, #284] ; 0x11c + wsptr[8*2] = (int) RIGHT_SHIFT(tmp22 + tmp12, CONST_BITS-PASS1_BITS); + 80131ba: 190d adds r5, r1, r4 + wsptr[8*8] = (int) RIGHT_SHIFT(tmp22 - tmp12, CONST_BITS-PASS1_BITS); + 80131bc: 1b0c subs r4, r1, r4 + wsptr[8*2] = (int) RIGHT_SHIFT(tmp22 + tmp12, CONST_BITS-PASS1_BITS); + 80131be: 12ed asrs r5, r5, #11 + wsptr[8*8] = (int) RIGHT_SHIFT(tmp22 - tmp12, CONST_BITS-PASS1_BITS); + 80131c0: 12e4 asrs r4, r4, #11 + wsptr[8*2] = (int) RIGHT_SHIFT(tmp22 + tmp12, CONST_BITS-PASS1_BITS); + 80131c2: 63d5 str r5, [r2, #60] ; 0x3c + wsptr[8*3] = (int) RIGHT_SHIFT(tmp23 + tmp13, CONST_BITS-PASS1_BITS); + 80131c4: 9905 ldr r1, [sp, #20] + wsptr[8*8] = (int) RIGHT_SHIFT(tmp22 - tmp12, CONST_BITS-PASS1_BITS); + 80131c6: f8c2 40fc str.w r4, [r2, #252] ; 0xfc + wsptr[8*3] = (int) RIGHT_SHIFT(tmp23 + tmp13, CONST_BITS-PASS1_BITS); + 80131ca: 180c adds r4, r1, r0 + wsptr[8*7] = (int) RIGHT_SHIFT(tmp23 - tmp13, CONST_BITS-PASS1_BITS); + 80131cc: 1a08 subs r0, r1, r0 + wsptr[8*4] = (int) RIGHT_SHIFT(tmp24 + tmp14, CONST_BITS-PASS1_BITS); + 80131ce: 9907 ldr r1, [sp, #28] + wsptr[8*7] = (int) RIGHT_SHIFT(tmp23 - tmp13, CONST_BITS-PASS1_BITS); + 80131d0: 12c0 asrs r0, r0, #11 + wsptr[8*3] = (int) RIGHT_SHIFT(tmp23 + tmp13, CONST_BITS-PASS1_BITS); + 80131d2: 12e4 asrs r4, r4, #11 + wsptr[8*7] = (int) RIGHT_SHIFT(tmp23 - tmp13, CONST_BITS-PASS1_BITS); + 80131d4: f8c2 00dc str.w r0, [r2, #220] ; 0xdc + wsptr[8*4] = (int) RIGHT_SHIFT(tmp24 + tmp14, CONST_BITS-PASS1_BITS); + 80131d8: eb01 000c add.w r0, r1, ip + wsptr[8*3] = (int) RIGHT_SHIFT(tmp23 + tmp13, CONST_BITS-PASS1_BITS); + 80131dc: 65d4 str r4, [r2, #92] ; 0x5c + wsptr[8*4] = (int) RIGHT_SHIFT(tmp24 + tmp14, CONST_BITS-PASS1_BITS); + 80131de: 12c0 asrs r0, r0, #11 + 80131e0: 67d0 str r0, [r2, #124] ; 0x7c + wsptr[8*6] = (int) RIGHT_SHIFT(tmp24 - tmp14, CONST_BITS-PASS1_BITS); + 80131e2: eba1 000c sub.w r0, r1, ip + tmp25 = tmp10 - MULTIPLY(z4, FIX(1.414213562)); /* c0 */ + 80131e6: 9909 ldr r1, [sp, #36] ; 0x24 + wsptr[8*6] = (int) RIGHT_SHIFT(tmp24 - tmp14, CONST_BITS-PASS1_BITS); + 80131e8: 12c0 asrs r0, r0, #11 + 80131ea: f8c2 00bc str.w r0, [r2, #188] ; 0xbc + tmp25 = tmp10 - MULTIPLY(z4, FIX(1.414213562)); /* c0 */ + 80131ee: f645 00ad movw r0, #22701 ; 0x58ad + 80131f2: fb00 3311 mls r3, r0, r1, r3 + wsptr[8*5] = (int) RIGHT_SHIFT(tmp25, CONST_BITS-PASS1_BITS); + 80131f6: 12db asrs r3, r3, #11 + 80131f8: f8c2 309c str.w r3, [r2, #156] ; 0x9c + for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) { + 80131fc: 9b0a ldr r3, [sp, #40] ; 0x28 + 80131fe: 455b cmp r3, fp + 8013200: f47f af21 bne.w 8013046 + 8013204: 9b08 ldr r3, [sp, #32] + 8013206: 3b04 subs r3, #4 + 8013208: 9303 str r3, [sp, #12] + 801320a: 9b08 ldr r3, [sp, #32] + 801320c: 3328 adds r3, #40 ; 0x28 + 801320e: 930b str r3, [sp, #44] ; 0x2c + } + + /* Pass 2: process 11 rows from work array, store into output array. */ + + wsptr = workspace; + 8013210: ab0c add r3, sp, #48 ; 0x30 + 8013212: 9302 str r3, [sp, #8] + for (ctr = 0; ctr < 11; ctr++) { + outptr = output_buf[ctr] + output_col; + 8013214: 9b03 ldr r3, [sp, #12] + + z1 = (INT32) wsptr[2]; + z2 = (INT32) wsptr[4]; + z3 = (INT32) wsptr[6]; + + tmp20 = MULTIPLY(z2 - z3, FIX(2.546640132)); /* c2+c4 */ + 8013216: f245 107e movw r0, #20862 ; 0x517e + z1 = (INT32) wsptr[2]; + 801321a: 9a02 ldr r2, [sp, #8] + tmp12 = MULTIPLY(z1 + z3, FIX(0.670361295)); /* c5-c9 */ + tmp13 = tmp14 + MULTIPLY(z1 + z4, FIX(0.366151574)); /* c7-c9 */ + tmp10 = tmp11 + tmp12 + tmp13 - + MULTIPLY(z1, FIX(0.923107866)); /* c7+c5+c3-c1-2*c9 */ + z1 = tmp14 - MULTIPLY(z2 + z3, FIX(1.163011579)); /* c7+c9 */ + tmp11 += z1 + MULTIPLY(z2, FIX(2.073276588)); /* c1+c7+3*c9-c3 */ + 801321c: f244 2a58 movw sl, #16984 ; 0x4258 + outptr = output_buf[ctr] + output_col; + 8013220: f853 1f04 ldr.w r1, [r3, #4]! + z2 = (INT32) wsptr[4]; + 8013224: 6916 ldr r6, [r2, #16] + z3 = (INT32) wsptr[6]; + 8013226: 6997 ldr r7, [r2, #24] + outptr = output_buf[ctr] + output_col; + 8013228: 9109 str r1, [sp, #36] ; 0x24 + 801322a: 9303 str r3, [sp, #12] + 801322c: 460b mov r3, r1 + 801322e: 996e ldr r1, [sp, #440] ; 0x1b8 + tmp20 = MULTIPLY(z2 - z3, FIX(2.546640132)); /* c2+c4 */ + 8013230: eba6 0e07 sub.w lr, r6, r7 + z1 = (INT32) wsptr[2]; + 8013234: 6894 ldr r4, [r2, #8] + outptr = output_buf[ctr] + output_col; + 8013236: 1859 adds r1, r3, r1 + tmp10 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + 8013238: 9b02 ldr r3, [sp, #8] + z4 = z1 + z3; + 801323a: 19e5 adds r5, r4, r7 + tmp20 = MULTIPLY(z2 - z3, FIX(2.546640132)); /* c2+c4 */ + 801323c: fb00 fe0e mul.w lr, r0, lr + tmp23 = MULTIPLY(z2 - z1, FIX(0.430815045)); /* c2-c6 */ + 8013240: eba6 0c04 sub.w ip, r6, r4 + tmp10 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + 8013244: 681b ldr r3, [r3, #0] + tmp23 = MULTIPLY(z2 - z1, FIX(0.430815045)); /* c2-c6 */ + 8013246: f640 50c9 movw r0, #3529 ; 0xdc9 + tmp25 = tmp10 + MULTIPLY(z4, FIX(1.356927976)); /* c2 */ + 801324a: 1baa subs r2, r5, r6 + tmp10 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + 801324c: 3310 adds r3, #16 + tmp23 = MULTIPLY(z2 - z1, FIX(0.430815045)); /* c2-c6 */ + 801324e: fb00 fc0c mul.w ip, r0, ip + z4 -= z2; + 8013252: 1ba8 subs r0, r5, r6 + tmp10 <<= CONST_BITS; + 8013254: 035b lsls r3, r3, #13 + z4 -= z2; + 8013256: 900a str r0, [sp, #40] ; 0x28 + tmp25 = tmp10 + MULTIPLY(z4, FIX(1.356927976)); /* c2 */ + 8013258: f642 306c movw r0, #11116 ; 0x2b6c + 801325c: fb00 3302 mla r3, r0, r2, r3 + tmp21 = tmp20 + tmp23 + tmp25 - + 8013260: eb0e 000c add.w r0, lr, ip + 8013264: 4a60 ldr r2, [pc, #384] ; (80133e8 ) + 8013266: 4418 add r0, r3 + 8013268: fb02 0206 mla r2, r2, r6, r0 + tmp20 += tmp25 + MULTIPLY(z3, FIX(2.115825087)); /* c4+c6 */ + 801326c: f244 30b5 movw r0, #17333 ; 0x43b5 + 8013270: fb00 3007 mla r0, r0, r7, r3 + tmp21 = tmp20 + tmp23 + tmp25 - + 8013274: 9204 str r2, [sp, #16] + tmp20 += tmp25 + MULTIPLY(z3, FIX(2.115825087)); /* c4+c6 */ + 8013276: eb00 020e add.w r2, r0, lr + MULTIPLY(z3, FIX(1.001388905)) - /* c1-c9 */ + MULTIPLY(z4, FIX(1.684843907)); /* c3+c9 */ + + /* Final output stage */ + + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp10, + 801327a: 986e ldr r0, [sp, #440] ; 0x1b8 + tmp20 += tmp25 + MULTIPLY(z3, FIX(2.115825087)); /* c4+c6 */ + 801327c: 9205 str r2, [sp, #20] + tmp23 += tmp25 - MULTIPLY(z1, FIX(1.513598477)); /* c6+c8 */ + 801327e: 4a5b ldr r2, [pc, #364] ; (80133ec ) + 8013280: fb02 3e04 mla lr, r2, r4, r3 + 8013284: eb0e 020c add.w r2, lr, ip + 8013288: 9206 str r2, [sp, #24] + tmp24 += tmp25; + 801328a: 4a59 ldr r2, [pc, #356] ; (80133f0 ) + 801328c: fb02 3505 mla r5, r2, r5, r3 + tmp22 = tmp24 - MULTIPLY(z3, FIX(0.788749120)); /* c8+c10 */ + 8013290: f602 32be addw r2, r2, #3006 ; 0xbbe + 8013294: fb02 5207 mla r2, r2, r7, r5 + tmp24 += MULTIPLY(z2, FIX(1.944413522)) - /* c2+c8 */ + 8013298: f643 6739 movw r7, #15929 ; 0x3e39 + tmp22 = tmp24 - MULTIPLY(z3, FIX(0.788749120)); /* c8+c10 */ + 801329c: 9207 str r2, [sp, #28] + MULTIPLY(z1, FIX(1.390975730)); /* c4+c10 */ + 801329e: 4a55 ldr r2, [pc, #340] ; (80133f4 ) + 80132a0: 4354 muls r4, r2 + tmp24 += MULTIPLY(z2, FIX(1.944413522)) - /* c2+c8 */ + 80132a2: fb07 4406 mla r4, r7, r6, r4 + tmp14 = MULTIPLY(tmp11 + z3 + z4, FIX(0.398430003)); /* c9 */ + 80132a6: f44f 674c mov.w r7, #3264 ; 0xcc0 + tmp24 += MULTIPLY(z2, FIX(1.944413522)) - /* c2+c8 */ + 80132aa: 1962 adds r2, r4, r5 + 80132ac: 9208 str r2, [sp, #32] + z1 = (INT32) wsptr[1]; + 80132ae: 9a02 ldr r2, [sp, #8] + z2 = (INT32) wsptr[3]; + 80132b0: f8d2 e00c ldr.w lr, [r2, #12] + z1 = (INT32) wsptr[1]; + 80132b4: 6855 ldr r5, [r2, #4] + z3 = (INT32) wsptr[5]; + 80132b6: f8d2 8014 ldr.w r8, [r2, #20] + tmp11 = z1 + z2; + 80132ba: eb05 040e add.w r4, r5, lr + z4 = (INT32) wsptr[7]; + 80132be: f8d2 c01c ldr.w ip, [r2, #28] + tmp12 = MULTIPLY(z1 + z3, FIX(0.670361295)); /* c5-c9 */ + 80132c2: eb05 0b08 add.w fp, r5, r8 + tmp10 = tmp11 + tmp12 + tmp13 - + 80132c6: 4a4c ldr r2, [pc, #304] ; (80133f8 ) + tmp14 = MULTIPLY(tmp11 + z3 + z4, FIX(0.398430003)); /* c9 */ + 80132c8: eb08 0604 add.w r6, r8, r4 + tmp13 = tmp14 + MULTIPLY(z1 + z4, FIX(0.366151574)); /* c7-c9 */ + 80132cc: eb05 090c add.w r9, r5, ip + tmp14 = MULTIPLY(tmp11 + z3 + z4, FIX(0.398430003)); /* c9 */ + 80132d0: 4466 add r6, ip + 80132d2: 437e muls r6, r7 + tmp11 = MULTIPLY(tmp11, FIX(0.887983902)); /* c3-c9 */ + 80132d4: f641 476a movw r7, #7274 ; 0x1c6a + 80132d8: 437c muls r4, r7 + tmp12 = MULTIPLY(z1 + z3, FIX(0.670361295)); /* c5-c9 */ + 80132da: f241 5774 movw r7, #5492 ; 0x1574 + 80132de: fb07 fb0b mul.w fp, r7, fp + tmp13 = tmp14 + MULTIPLY(z1 + z4, FIX(0.366151574)); /* c7-c9 */ + 80132e2: f640 37b8 movw r7, #3000 ; 0xbb8 + 80132e6: fb07 6909 mla r9, r7, r9, r6 + tmp10 = tmp11 + tmp12 + tmp13 - + 80132ea: eb04 070b add.w r7, r4, fp + 80132ee: 444f add r7, r9 + 80132f0: fb02 7705 mla r7, r2, r5, r7 + z1 = tmp14 - MULTIPLY(z2 + z3, FIX(1.163011579)); /* c7+c9 */ + 80132f4: eb0e 0508 add.w r5, lr, r8 + 80132f8: f2a2 72ad subw r2, r2, #1965 ; 0x7ad + 80132fc: fb02 6505 mla r5, r2, r5, r6 + tmp12 += z1 - MULTIPLY(z3, FIX(1.192193623)); /* c3+c5-c7-c9 */ + 8013300: 3aef subs r2, #239 ; 0xef + tmp11 += z1 + MULTIPLY(z2, FIX(2.073276588)); /* c1+c7+3*c9-c3 */ + 8013302: fb0a 5a0e mla sl, sl, lr, r5 + tmp12 += z1 - MULTIPLY(z3, FIX(1.192193623)); /* c3+c5-c7-c9 */ + 8013306: fb02 5508 mla r5, r2, r8, r5 + z1 = MULTIPLY(z2 + z4, - FIX(1.798248910)); /* -(c1+c9) */ + 801330a: 4a3c ldr r2, [pc, #240] ; (80133fc ) + tmp11 += z1 + MULTIPLY(z2, FIX(2.073276588)); /* c1+c7+3*c9-c3 */ + 801330c: 44a2 add sl, r4 + z1 = MULTIPLY(z2 + z4, - FIX(1.798248910)); /* -(c1+c9) */ + 801330e: eb0e 040c add.w r4, lr, ip + tmp12 += z1 - MULTIPLY(z3, FIX(1.192193623)); /* c3+c5-c7-c9 */ + 8013312: 445d add r5, fp + tmp13 += z1 + MULTIPLY(z4, FIX(2.102458632)); /* c1+c5+c9-c7 */ + 8013314: f244 3b47 movw fp, #17223 ; 0x4347 + z1 = MULTIPLY(z2 + z4, - FIX(1.798248910)); /* -(c1+c9) */ + 8013318: 4354 muls r4, r2 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp10, + 801331a: 9a05 ldr r2, [sp, #20] + tmp11 += z1; + 801331c: 44a2 add sl, r4 + tmp13 += z1 + MULTIPLY(z4, FIX(2.102458632)); /* c1+c5+c9-c7 */ + 801331e: fb0b 440c mla r4, fp, ip, r4 + 8013322: 444c add r4, r9 + MULTIPLY(z3, FIX(1.001388905)) - /* c1-c9 */ + 8013324: f242 090b movw r9, #8203 ; 0x200b + 8013328: fb09 f808 mul.w r8, r9, r8 + tmp14 += MULTIPLY(z2, - FIX(1.467221301)) + /* -(c5+c9) */ + 801332c: f8df 90d4 ldr.w r9, [pc, #212] ; 8013404 + 8013330: fb09 880e mla r8, r9, lr, r8 + MULTIPLY(z3, FIX(1.001388905)) - /* c1-c9 */ + 8013334: f8df e0c8 ldr.w lr, [pc, #200] ; 8013400 + 8013338: fb0e 880c mla r8, lr, ip, r8 + tmp14 += MULTIPLY(z2, - FIX(1.467221301)) + /* -(c5+c9) */ + 801333c: 44b0 add r8, r6 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp10, + 801333e: 19d6 adds r6, r2, r7 + 8013340: 9a01 ldr r2, [sp, #4] + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + 8013342: f3c6 4689 ubfx r6, r6, #18, #10 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp10, + 8013346: 5d96 ldrb r6, [r2, r6] + 8013348: 9a09 ldr r2, [sp, #36] ; 0x24 + 801334a: 5416 strb r6, [r2, r0] + outptr[10] = range_limit[(int) RIGHT_SHIFT(tmp20 - tmp10, + 801334c: 9a05 ldr r2, [sp, #20] + 801334e: 1bd0 subs r0, r2, r7 + 8013350: 9a01 ldr r2, [sp, #4] + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + 8013352: f3c0 4089 ubfx r0, r0, #18, #10 + outptr[10] = range_limit[(int) RIGHT_SHIFT(tmp20 - tmp10, + 8013356: 5c10 ldrb r0, [r2, r0] + 8013358: 7288 strb r0, [r1, #10] + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp11, + 801335a: 9a04 ldr r2, [sp, #16] + 801335c: eb02 000a add.w r0, r2, sl + 8013360: 9a01 ldr r2, [sp, #4] + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + 8013362: f3c0 4089 ubfx r0, r0, #18, #10 + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp11, + 8013366: 5c10 ldrb r0, [r2, r0] + outptr[9] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp11, + 8013368: 9a04 ldr r2, [sp, #16] + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp11, + 801336a: 7048 strb r0, [r1, #1] + outptr[9] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp11, + 801336c: eba2 000a sub.w r0, r2, sl + 8013370: 9a01 ldr r2, [sp, #4] + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + 8013372: f3c0 4089 ubfx r0, r0, #18, #10 + outptr[9] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp11, + 8013376: 5c10 ldrb r0, [r2, r0] + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp12, + 8013378: 9a07 ldr r2, [sp, #28] + outptr[9] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp11, + 801337a: 7248 strb r0, [r1, #9] + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp12, + 801337c: 1950 adds r0, r2, r5 + 801337e: 9a01 ldr r2, [sp, #4] + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + 8013380: f3c0 4089 ubfx r0, r0, #18, #10 + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp12, + 8013384: 5c10 ldrb r0, [r2, r0] + outptr[8] = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp12, + 8013386: 9a07 ldr r2, [sp, #28] + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp12, + 8013388: 7088 strb r0, [r1, #2] + outptr[8] = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp12, + 801338a: 1b50 subs r0, r2, r5 + 801338c: 9a01 ldr r2, [sp, #4] + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + 801338e: f3c0 4089 ubfx r0, r0, #18, #10 + outptr[8] = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp12, + 8013392: 5c10 ldrb r0, [r2, r0] + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp23 + tmp13, + 8013394: 9a06 ldr r2, [sp, #24] + outptr[8] = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp12, + 8013396: 7208 strb r0, [r1, #8] + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp23 + tmp13, + 8013398: 1910 adds r0, r2, r4 + 801339a: 9a01 ldr r2, [sp, #4] + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + 801339c: f3c0 4089 ubfx r0, r0, #18, #10 + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp23 + tmp13, + 80133a0: 5c10 ldrb r0, [r2, r0] + outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp23 - tmp13, + 80133a2: 9a06 ldr r2, [sp, #24] + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp23 + tmp13, + 80133a4: 70c8 strb r0, [r1, #3] + outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp23 - tmp13, + 80133a6: 1b10 subs r0, r2, r4 + 80133a8: 9a01 ldr r2, [sp, #4] + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + 80133aa: f3c0 4089 ubfx r0, r0, #18, #10 + outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp23 - tmp13, + 80133ae: 5c10 ldrb r0, [r2, r0] + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp24 + tmp14, + 80133b0: 9a08 ldr r2, [sp, #32] + outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp23 - tmp13, + 80133b2: 71c8 strb r0, [r1, #7] + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp24 + tmp14, + 80133b4: eb02 0008 add.w r0, r2, r8 + 80133b8: 9a01 ldr r2, [sp, #4] + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + 80133ba: f3c0 4089 ubfx r0, r0, #18, #10 + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp24 + tmp14, + 80133be: 5c10 ldrb r0, [r2, r0] + outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp24 - tmp14, + 80133c0: 9a08 ldr r2, [sp, #32] + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp24 + tmp14, + 80133c2: 7108 strb r0, [r1, #4] + outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp24 - tmp14, + 80133c4: eba2 0008 sub.w r0, r2, r8 + 80133c8: 9a01 ldr r2, [sp, #4] + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + 80133ca: f3c0 4089 ubfx r0, r0, #18, #10 + outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp24 - tmp14, + 80133ce: 5c10 ldrb r0, [r2, r0] + 80133d0: 7188 strb r0, [r1, #6] + tmp25 = tmp10 - MULTIPLY(z4, FIX(1.414213562)); /* c0 */ + 80133d2: f645 00ad movw r0, #22701 ; 0x58ad + 80133d6: 9a0a ldr r2, [sp, #40] ; 0x28 + 80133d8: fb00 3312 mls r3, r0, r2, r3 + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp25, + 80133dc: 9a01 ldr r2, [sp, #4] + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + 80133de: f3c3 4389 ubfx r3, r3, #18, #10 + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp25, + 80133e2: 5cd3 ldrb r3, [r2, r3] + 80133e4: e010 b.n 8013408 + 80133e6: bf00 nop + 80133e8: ffffc5b4 .word 0xffffc5b4 + 80133ec: ffffcf91 .word 0xffffcf91 + 80133f0: ffffdb05 .word 0xffffdb05 + 80133f4: ffffd37d .word 0xffffd37d + 80133f8: ffffe276 .word 0xffffe276 + 80133fc: ffffc675 .word 0xffffc675 + 8013400: ffffca16 .word 0xffffca16 + 8013404: ffffd10d .word 0xffffd10d + for (ctr = 0; ctr < 11; ctr++) { + 8013408: 9a03 ldr r2, [sp, #12] + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp25, + 801340a: 714b strb r3, [r1, #5] + + wsptr += 8; /* advance pointer to next row */ + 801340c: 9b02 ldr r3, [sp, #8] + 801340e: 3320 adds r3, #32 + 8013410: 9302 str r3, [sp, #8] + for (ctr = 0; ctr < 11; ctr++) { + 8013412: 9b0b ldr r3, [sp, #44] ; 0x2c + 8013414: 4293 cmp r3, r2 + 8013416: f47f aefd bne.w 8013214 + } +} + 801341a: b065 add sp, #404 ; 0x194 + 801341c: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + +08013420 : + +GLOBAL(void) +jpeg_idct_12x12 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + 8013420: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8013424: b0eb sub sp, #428 ; 0x1ac + 8013426: 6d49 ldr r1, [r1, #84] ; 0x54 + 8013428: f1a2 0802 sub.w r8, r2, #2 + 801342c: 9308 str r3, [sp, #32] + INT32 z1, z2, z3, z4; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + int * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + 801342e: f8d0 314c ldr.w r3, [r0, #332] ; 0x14c + 8013432: f103 0980 add.w r9, r3, #128 ; 0x80 + /* Pass 1: process columns from input, store into work array. */ + + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) { + 8013436: 1f0b subs r3, r1, #4 + 8013438: 9300 str r3, [sp, #0] + 801343a: f102 030e add.w r3, r2, #14 + 801343e: 9309 str r3, [sp, #36] ; 0x24 + wsptr = workspace; + 8013440: ab0a add r3, sp, #40 ; 0x28 + /* Even part */ + + z3 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 8013442: 9900 ldr r1, [sp, #0] + for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) { + 8013444: 3304 adds r3, #4 + z3 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 8013446: f938 cf02 ldrsh.w ip, [r8, #2]! + 801344a: f851 2f04 ldr.w r2, [r1, #4]! + z4 = MULTIPLY(z4, FIX(1.224744871)); /* c4 */ + + tmp10 = z3 + z4; + tmp11 = z3 - z4; + + z1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + 801344e: f9b8 6020 ldrsh.w r6, [r8, #32] + z4 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + 8013452: f8d1 0080 ldr.w r0, [r1, #128] ; 0x80 + z3 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 8013456: fb02 fc0c mul.w ip, r2, ip + z4 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + 801345a: f9b8 2040 ldrsh.w r2, [r8, #64] ; 0x40 + z3 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 801345e: 9100 str r1, [sp, #0] + z3 <<= CONST_BITS; + 8013460: ea4f 3c4c mov.w ip, ip, lsl #13 + z4 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + 8013464: 4342 muls r2, r0 + z4 = MULTIPLY(z4, FIX(1.224744871)); /* c4 */ + 8013466: f242 7031 movw r0, #10033 ; 0x2731 + z4 = MULTIPLY(z1, FIX(1.366025404)); /* c2 */ + z1 <<= CONST_BITS; + z2 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + 801346a: f9b8 4060 ldrsh.w r4, [r8, #96] ; 0x60 + z3 += ONE << (CONST_BITS-PASS1_BITS-1); + 801346e: f50c 6c80 add.w ip, ip, #1024 ; 0x400 + z4 = MULTIPLY(z4, FIX(1.224744871)); /* c4 */ + 8013472: 4342 muls r2, r0 + z1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + 8013474: 6c08 ldr r0, [r1, #64] ; 0x40 + z4 = MULTIPLY(z1, FIX(1.366025404)); /* c2 */ + 8013476: f642 31b6 movw r1, #11190 ; 0x2bb6 + z1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + 801347a: 4346 muls r6, r0 + tmp10 = z3 + z4; + 801347c: eb0c 0702 add.w r7, ip, r2 + tmp11 = z3 - z4; + 8013480: ebac 0202 sub.w r2, ip, r2 + z4 = MULTIPLY(z1, FIX(1.366025404)); /* c2 */ + 8013484: fb01 f006 mul.w r0, r1, r6 + z2 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + 8013488: 9900 ldr r1, [sp, #0] + 801348a: f8d1 50c0 ldr.w r5, [r1, #192] ; 0xc0 + 801348e: 436c muls r4, r5 + z2 <<= CONST_BITS; + 8013490: 0364 lsls r4, r4, #13 + + tmp12 = z1 - z2; + 8013492: ebc4 3546 rsb r5, r4, r6, lsl #13 + + tmp21 = z3 + tmp12; + 8013496: eb0c 0105 add.w r1, ip, r5 + 801349a: 9101 str r1, [sp, #4] + tmp24 = z3 - tmp12; + 801349c: ebac 0105 sub.w r1, ip, r5 + + tmp12 = z4 + z2; + 80134a0: 1905 adds r5, r0, r4 + + tmp20 = tmp10 + tmp12; + tmp25 = tmp10 - tmp12; + + tmp12 = z4 - z1 - z2; + 80134a2: eba0 3046 sub.w r0, r0, r6, lsl #13 + tmp24 = z3 - tmp12; + 80134a6: 9102 str r1, [sp, #8] + + tmp11 = MULTIPLY(z2, FIX(1.306562965)); /* c3 */ + tmp14 = MULTIPLY(z2, - FIX_0_541196100); /* -c9 */ + + tmp10 = z1 + z3; + tmp15 = MULTIPLY(tmp10 + z4, FIX(0.860918669)); /* c7 */ + 80134a8: f641 368d movw r6, #7053 ; 0x1b8d + tmp25 = tmp10 - tmp12; + 80134ac: 1b79 subs r1, r7, r5 + tmp12 = z4 - z1 - z2; + 80134ae: 1b00 subs r0, r0, r4 + tmp20 = tmp10 + tmp12; + 80134b0: eb07 0b05 add.w fp, r7, r5 + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 80134b4: f9b8 7010 ldrsh.w r7, [r8, #16] + tmp25 = tmp10 - tmp12; + 80134b8: 9103 str r1, [sp, #12] + tmp22 = tmp11 + tmp12; + 80134ba: 1811 adds r1, r2, r0 + tmp23 = tmp11 - tmp12; + 80134bc: 1a12 subs r2, r2, r0 + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + 80134be: f9b8 c030 ldrsh.w ip, [r8, #48] ; 0x30 + z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + 80134c2: f9b8 5050 ldrsh.w r5, [r8, #80] ; 0x50 + tmp23 = tmp11 - tmp12; + 80134c6: 9205 str r2, [sp, #20] + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 80134c8: 9a00 ldr r2, [sp, #0] + tmp22 = tmp11 + tmp12; + 80134ca: 9104 str r1, [sp, #16] + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 80134cc: 6a12 ldr r2, [r2, #32] + z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + 80134ce: 9900 ldr r1, [sp, #0] + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 80134d0: 4357 muls r7, r2 + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + 80134d2: 9a00 ldr r2, [sp, #0] + z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + 80134d4: f8d1 00e0 ldr.w r0, [r1, #224] ; 0xe0 + tmp11 = MULTIPLY(z2, FIX(1.306562965)); /* c3 */ + 80134d8: f642 11cf movw r1, #10703 ; 0x29cf + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + 80134dc: 6e12 ldr r2, [r2, #96] ; 0x60 + 80134de: fb02 fc0c mul.w ip, r2, ip + z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + 80134e2: 9a00 ldr r2, [sp, #0] + 80134e4: f8d2 20a0 ldr.w r2, [r2, #160] ; 0xa0 + tmp11 = MULTIPLY(z2, FIX(1.306562965)); /* c3 */ + 80134e8: fb01 f40c mul.w r4, r1, ip + tmp14 = MULTIPLY(z2, - FIX_0_541196100); /* -c9 */ + 80134ec: 49b9 ldr r1, [pc, #740] ; (80137d4 ) + z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + 80134ee: 4355 muls r5, r2 + z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + 80134f0: f9b8 2070 ldrsh.w r2, [r8, #112] ; 0x70 + tmp10 = z1 + z3; + 80134f4: eb07 0a05 add.w sl, r7, r5 + z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + 80134f8: 4342 muls r2, r0 + tmp14 = MULTIPLY(z2, - FIX_0_541196100); /* -c9 */ + 80134fa: fb01 f00c mul.w r0, r1, ip + tmp15 = MULTIPLY(tmp10 + z4, FIX(0.860918669)); /* c7 */ + 80134fe: eb02 0e0a add.w lr, r2, sl + 8013502: fb06 fe0e mul.w lr, r6, lr + tmp12 = tmp15 + MULTIPLY(tmp10, FIX(0.261052384)); /* c5-c7 */ + 8013506: f640 065b movw r6, #2139 ; 0x85b + 801350a: fb06 ea0a mla sl, r6, sl, lr + tmp10 = tmp12 + tmp11 + MULTIPLY(z1, FIX(0.280143716)); /* c1-c5 */ + 801350e: f640 06f7 movw r6, #2295 ; 0x8f7 + 8013512: eb04 010a add.w r1, r4, sl + tmp13 = MULTIPLY(z3 + z4, - FIX(1.045510580)); /* -(c7+c11) */ + tmp12 += tmp13 + tmp14 - MULTIPLY(z3, FIX(1.478575242)); /* c1+c5-c7-c11 */ + tmp13 += tmp15 - tmp11 + MULTIPLY(z4, FIX(1.586706681)); /* c1+c11 */ + 8013516: ebae 0404 sub.w r4, lr, r4 + tmp10 = tmp12 + tmp11 + MULTIPLY(z1, FIX(0.280143716)); /* c1-c5 */ + 801351a: fb06 1107 mla r1, r6, r7, r1 + tmp13 = MULTIPLY(z3 + z4, - FIX(1.045510580)); /* -(c7+c11) */ + 801351e: 18ae adds r6, r5, r2 + tmp10 = tmp12 + tmp11 + MULTIPLY(z1, FIX(0.280143716)); /* c1-c5 */ + 8013520: 9106 str r1, [sp, #24] + tmp13 = MULTIPLY(z3 + z4, - FIX(1.045510580)); /* -(c7+c11) */ + 8013522: 49ad ldr r1, [pc, #692] ; (80137d8 ) + 8013524: 4371 muls r1, r6 + tmp12 += tmp13 + tmp14 - MULTIPLY(z3, FIX(1.478575242)); /* c1+c5-c7-c11 */ + 8013526: 1846 adds r6, r0, r1 + tmp13 = MULTIPLY(z3 + z4, - FIX(1.045510580)); /* -(c7+c11) */ + 8013528: 9107 str r1, [sp, #28] + tmp12 += tmp13 + tmp14 - MULTIPLY(z3, FIX(1.478575242)); /* c1+c5-c7-c11 */ + 801352a: 49ac ldr r1, [pc, #688] ; (80137dc ) + 801352c: fb01 6605 mla r6, r1, r5, r6 + tmp13 += tmp15 - tmp11 + MULTIPLY(z4, FIX(1.586706681)); /* c1+c11 */ + 8013530: 9907 ldr r1, [sp, #28] + tmp15 += tmp14 - MULTIPLY(z1, FIX(0.676326758)) - /* c7-c11 */ + MULTIPLY(z4, FIX(1.982889723)); /* c5+c7 */ + + z1 -= z4; + z2 -= z3; + 8013532: ebac 0505 sub.w r5, ip, r5 + z3 = MULTIPLY(z1 + z2, FIX_0_541196100); /* c9 */ + 8013536: f241 1c51 movw ip, #4433 ; 0x1151 + tmp12 += tmp13 + tmp14 - MULTIPLY(z3, FIX(1.478575242)); /* c1+c5-c7-c11 */ + 801353a: 4456 add r6, sl + tmp13 += tmp15 - tmp11 + MULTIPLY(z4, FIX(1.586706681)); /* c1+c11 */ + 801353c: f243 2ac6 movw sl, #12998 ; 0x32c6 + 8013540: fb0a 4402 mla r4, sl, r2, r4 + 8013544: 440c add r4, r1 + tmp15 += tmp14 - MULTIPLY(z1, FIX(0.676326758)) - /* c7-c11 */ + 8013546: 49a6 ldr r1, [pc, #664] ; (80137e0 ) + 8013548: fb01 0007 mla r0, r1, r7, r0 + 801354c: 49a5 ldr r1, [pc, #660] ; (80137e4 ) + 801354e: fb01 0002 mla r0, r1, r2, r0 + z1 -= z4; + 8013552: 1aba subs r2, r7, r2 + z3 = MULTIPLY(z1 + z2, FIX_0_541196100); /* c9 */ + 8013554: 1957 adds r7, r2, r5 + tmp15 += tmp14 - MULTIPLY(z1, FIX(0.676326758)) - /* c7-c11 */ + 8013556: 4470 add r0, lr + z3 = MULTIPLY(z1 + z2, FIX_0_541196100); /* c9 */ + 8013558: fb0c f707 mul.w r7, ip, r7 + tmp11 = z3 + MULTIPLY(z1, FIX_0_765366865); /* c3-c9 */ + 801355c: f641 0c7e movw ip, #6270 ; 0x187e + 8013560: fb0c 7c02 mla ip, ip, r2, r7 + tmp14 = z3 - MULTIPLY(z2, FIX_1_847759065); /* c3+c9 */ + 8013564: 4aa0 ldr r2, [pc, #640] ; (80137e8 ) + 8013566: fb02 7705 mla r7, r2, r5, r7 + + /* Final output stage */ + + wsptr[8*0] = (int) RIGHT_SHIFT(tmp20 + tmp10, CONST_BITS-PASS1_BITS); + 801356a: 9a06 ldr r2, [sp, #24] + 801356c: 445a add r2, fp + 801356e: 12d2 asrs r2, r2, #11 + 8013570: f843 2c04 str.w r2, [r3, #-4] + wsptr[8*11] = (int) RIGHT_SHIFT(tmp20 - tmp10, CONST_BITS-PASS1_BITS); + 8013574: 9a06 ldr r2, [sp, #24] + 8013576: ebab 0b02 sub.w fp, fp, r2 + 801357a: ea4f 22eb mov.w r2, fp, asr #11 + 801357e: f8c3 215c str.w r2, [r3, #348] ; 0x15c + wsptr[8*1] = (int) RIGHT_SHIFT(tmp21 + tmp11, CONST_BITS-PASS1_BITS); + 8013582: 9a01 ldr r2, [sp, #4] + 8013584: 4462 add r2, ip + 8013586: 12d2 asrs r2, r2, #11 + 8013588: 61da str r2, [r3, #28] + wsptr[8*10] = (int) RIGHT_SHIFT(tmp21 - tmp11, CONST_BITS-PASS1_BITS); + 801358a: 9a01 ldr r2, [sp, #4] + 801358c: eba2 020c sub.w r2, r2, ip + 8013590: 12d2 asrs r2, r2, #11 + 8013592: f8c3 213c str.w r2, [r3, #316] ; 0x13c + wsptr[8*2] = (int) RIGHT_SHIFT(tmp22 + tmp12, CONST_BITS-PASS1_BITS); + 8013596: 9a04 ldr r2, [sp, #16] + 8013598: 4432 add r2, r6 + 801359a: 12d2 asrs r2, r2, #11 + 801359c: 63da str r2, [r3, #60] ; 0x3c + wsptr[8*9] = (int) RIGHT_SHIFT(tmp22 - tmp12, CONST_BITS-PASS1_BITS); + 801359e: 9a04 ldr r2, [sp, #16] + 80135a0: 1b92 subs r2, r2, r6 + 80135a2: 12d2 asrs r2, r2, #11 + 80135a4: f8c3 211c str.w r2, [r3, #284] ; 0x11c + wsptr[8*3] = (int) RIGHT_SHIFT(tmp23 + tmp13, CONST_BITS-PASS1_BITS); + 80135a8: 9a05 ldr r2, [sp, #20] + 80135aa: 4422 add r2, r4 + 80135ac: 12d2 asrs r2, r2, #11 + 80135ae: 65da str r2, [r3, #92] ; 0x5c + wsptr[8*8] = (int) RIGHT_SHIFT(tmp23 - tmp13, CONST_BITS-PASS1_BITS); + 80135b0: 9a05 ldr r2, [sp, #20] + 80135b2: 1b12 subs r2, r2, r4 + 80135b4: 12d2 asrs r2, r2, #11 + 80135b6: f8c3 20fc str.w r2, [r3, #252] ; 0xfc + wsptr[8*4] = (int) RIGHT_SHIFT(tmp24 + tmp14, CONST_BITS-PASS1_BITS); + 80135ba: 9a02 ldr r2, [sp, #8] + 80135bc: 443a add r2, r7 + 80135be: 12d2 asrs r2, r2, #11 + 80135c0: 67da str r2, [r3, #124] ; 0x7c + wsptr[8*7] = (int) RIGHT_SHIFT(tmp24 - tmp14, CONST_BITS-PASS1_BITS); + 80135c2: 9a02 ldr r2, [sp, #8] + 80135c4: 1bd2 subs r2, r2, r7 + 80135c6: 12d2 asrs r2, r2, #11 + 80135c8: f8c3 20dc str.w r2, [r3, #220] ; 0xdc + wsptr[8*5] = (int) RIGHT_SHIFT(tmp25 + tmp15, CONST_BITS-PASS1_BITS); + 80135cc: 9a03 ldr r2, [sp, #12] + 80135ce: 4402 add r2, r0 + 80135d0: 12d2 asrs r2, r2, #11 + 80135d2: f8c3 209c str.w r2, [r3, #156] ; 0x9c + wsptr[8*6] = (int) RIGHT_SHIFT(tmp25 - tmp15, CONST_BITS-PASS1_BITS); + 80135d6: 9a03 ldr r2, [sp, #12] + 80135d8: 1a12 subs r2, r2, r0 + 80135da: 12d2 asrs r2, r2, #11 + 80135dc: f8c3 20bc str.w r2, [r3, #188] ; 0xbc + for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) { + 80135e0: 9a09 ldr r2, [sp, #36] ; 0x24 + 80135e2: 4542 cmp r2, r8 + 80135e4: f47f af2d bne.w 8013442 + 80135e8: 9b08 ldr r3, [sp, #32] + } + + /* Pass 2: process 12 rows from work array, store into output array. */ + + wsptr = workspace; + 80135ea: aa0a add r2, sp, #40 ; 0x28 + 80135ec: f1a3 0a04 sub.w sl, r3, #4 + 80135f0: 332c adds r3, #44 ; 0x2c + 80135f2: 9307 str r3, [sp, #28] + for (ctr = 0; ctr < 12; ctr++) { + outptr = output_buf[ctr] + output_col; + 80135f4: f85a 3f04 ldr.w r3, [sl, #4]! + & RANGE_MASK]; + outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp25 - tmp15, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + + wsptr += 8; /* advance pointer to next row */ + 80135f8: 3220 adds r2, #32 + outptr = output_buf[ctr] + output_col; + 80135fa: 9974 ldr r1, [sp, #464] ; 0x1d0 + z2 = (INT32) wsptr[6]; + 80135fc: f852 4c08 ldr.w r4, [r2, #-8] + z1 = (INT32) wsptr[2]; + 8013600: f852 5c18 ldr.w r5, [r2, #-24] + z2 <<= CONST_BITS; + 8013604: 0364 lsls r4, r4, #13 + outptr = output_buf[ctr] + output_col; + 8013606: 9306 str r3, [sp, #24] + z3 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + 8013608: f852 7c20 ldr.w r7, [r2, #-32] + outptr = output_buf[ctr] + output_col; + 801360c: 440b add r3, r1 + tmp12 = z1 - z2; + 801360e: ebc4 3c45 rsb ip, r4, r5, lsl #13 + z4 = (INT32) wsptr[4]; + 8013612: f852 0c10 ldr.w r0, [r2, #-16] + z3 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + 8013616: 3710 adds r7, #16 + outptr = output_buf[ctr] + output_col; + 8013618: 9300 str r3, [sp, #0] + z4 = MULTIPLY(z4, FIX(1.224744871)); /* c4 */ + 801361a: f242 7131 movw r1, #10033 ; 0x2731 + z4 = MULTIPLY(z1, FIX(1.366025404)); /* c2 */ + 801361e: f642 33b6 movw r3, #11190 ; 0x2bb6 + z4 = MULTIPLY(z4, FIX(1.224744871)); /* c4 */ + 8013622: 4348 muls r0, r1 + z4 = MULTIPLY(z1, FIX(1.366025404)); /* c2 */ + 8013624: fb03 f105 mul.w r1, r3, r5 + tmp21 = z3 + tmp12; + 8013628: eb0c 3347 add.w r3, ip, r7, lsl #13 + tmp10 = z3 + z4; + 801362c: eb00 3647 add.w r6, r0, r7, lsl #13 + tmp21 = z3 + tmp12; + 8013630: 9301 str r3, [sp, #4] + tmp24 = z3 - tmp12; + 8013632: ebcc 3347 rsb r3, ip, r7, lsl #13 + tmp12 = z4 + z2; + 8013636: eb01 0c04 add.w ip, r1, r4 + tmp12 = z4 - z1 - z2; + 801363a: eba1 3145 sub.w r1, r1, r5, lsl #13 + tmp11 = z3 - z4; + 801363e: ebc0 3047 rsb r0, r0, r7, lsl #13 + tmp24 = z3 - tmp12; + 8013642: 9302 str r3, [sp, #8] + tmp12 = z4 - z1 - z2; + 8013644: 1b09 subs r1, r1, r4 + tmp25 = tmp10 - tmp12; + 8013646: eba6 030c sub.w r3, r6, ip + z3 = (INT32) wsptr[5]; + 801364a: f852 5c0c ldr.w r5, [r2, #-12] + tmp20 = tmp10 + tmp12; + 801364e: eb06 070c add.w r7, r6, ip + tmp25 = tmp10 - tmp12; + 8013652: 9303 str r3, [sp, #12] + tmp22 = tmp11 + tmp12; + 8013654: 1843 adds r3, r0, r1 + z4 = (INT32) wsptr[7]; + 8013656: f852 4c04 ldr.w r4, [r2, #-4] + tmp15 = MULTIPLY(tmp10 + z4, FIX(0.860918669)); /* c7 */ + 801365a: f641 368d movw r6, #7053 ; 0x1b8d + tmp22 = tmp11 + tmp12; + 801365e: 9304 str r3, [sp, #16] + tmp23 = tmp11 - tmp12; + 8013660: 1a43 subs r3, r0, r1 + tmp11 = MULTIPLY(z2, FIX(1.306562965)); /* c3 */ + 8013662: f642 11cf movw r1, #10703 ; 0x29cf + tmp23 = tmp11 - tmp12; + 8013666: 9305 str r3, [sp, #20] + tmp11 = MULTIPLY(z2, FIX(1.306562965)); /* c3 */ + 8013668: f852 3c14 ldr.w r3, [r2, #-20] + 801366c: fb01 f003 mul.w r0, r1, r3 + tmp14 = MULTIPLY(z2, - FIX_0_541196100); /* -c9 */ + 8013670: 4958 ldr r1, [pc, #352] ; (80137d4 ) + 8013672: 4359 muls r1, r3 + tmp10 = z1 + z3; + 8013674: f852 3c1c ldr.w r3, [r2, #-28] + 8013678: eb03 0b05 add.w fp, r3, r5 + tmp15 = MULTIPLY(tmp10 + z4, FIX(0.860918669)); /* c7 */ + 801367c: eb04 0c0b add.w ip, r4, fp + 8013680: fb06 fc0c mul.w ip, r6, ip + tmp12 = tmp15 + MULTIPLY(tmp10, FIX(0.261052384)); /* c5-c7 */ + 8013684: f640 065b movw r6, #2139 ; 0x85b + 8013688: fb06 cb0b mla fp, r6, fp, ip + tmp10 = tmp12 + tmp11 + MULTIPLY(z1, FIX(0.280143716)); /* c1-c5 */ + 801368c: f640 06f7 movw r6, #2295 ; 0x8f7 + 8013690: eb00 0e0b add.w lr, r0, fp + tmp13 += tmp15 - tmp11 + MULTIPLY(z4, FIX(1.586706681)); /* c1+c11 */ + 8013694: ebac 0000 sub.w r0, ip, r0 + tmp10 = tmp12 + tmp11 + MULTIPLY(z1, FIX(0.280143716)); /* c1-c5 */ + 8013698: fb06 ee03 mla lr, r6, r3, lr + tmp13 = MULTIPLY(z3 + z4, - FIX(1.045510580)); /* -(c7+c11) */ + 801369c: 192e adds r6, r5, r4 + 801369e: 4b4e ldr r3, [pc, #312] ; (80137d8 ) + 80136a0: fb03 f806 mul.w r8, r3, r6 + tmp12 += tmp13 + tmp14 - MULTIPLY(z3, FIX(1.478575242)); /* c1+c5-c7-c11 */ + 80136a4: f6a3 53db subw r3, r3, #3547 ; 0xddb + 80136a8: eb01 0608 add.w r6, r1, r8 + 80136ac: fb03 6605 mla r6, r3, r5, r6 + tmp15 += tmp14 - MULTIPLY(z1, FIX(0.676326758)) - /* c7-c11 */ + 80136b0: f852 3c1c ldr.w r3, [r2, #-28] + tmp12 += tmp13 + tmp14 - MULTIPLY(z3, FIX(1.478575242)); /* c1+c5-c7-c11 */ + 80136b4: 445e add r6, fp + tmp13 += tmp15 - tmp11 + MULTIPLY(z4, FIX(1.586706681)); /* c1+c11 */ + 80136b6: f243 2bc6 movw fp, #12998 ; 0x32c6 + 80136ba: fb0b 0004 mla r0, fp, r4, r0 + 80136be: eb00 0b08 add.w fp, r0, r8 + tmp15 += tmp14 - MULTIPLY(z1, FIX(0.676326758)) - /* c7-c11 */ + 80136c2: 4847 ldr r0, [pc, #284] ; (80137e0 ) + z3 = MULTIPLY(z1 + z2, FIX_0_541196100); /* c9 */ + 80136c4: f241 1851 movw r8, #4433 ; 0x1151 + tmp15 += tmp14 - MULTIPLY(z1, FIX(0.676326758)) - /* c7-c11 */ + 80136c8: fb00 1103 mla r1, r0, r3, r1 + 80136cc: 4b45 ldr r3, [pc, #276] ; (80137e4 ) + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp10, + 80136ce: 9874 ldr r0, [sp, #464] ; 0x1d0 + tmp15 += tmp14 - MULTIPLY(z1, FIX(0.676326758)) - /* c7-c11 */ + 80136d0: fb03 1104 mla r1, r3, r4, r1 + z1 -= z4; + 80136d4: f852 3c1c ldr.w r3, [r2, #-28] + 80136d8: 1b1c subs r4, r3, r4 + z2 -= z3; + 80136da: f852 3c14 ldr.w r3, [r2, #-20] + tmp15 += tmp14 - MULTIPLY(z1, FIX(0.676326758)) - /* c7-c11 */ + 80136de: 4461 add r1, ip + z2 -= z3; + 80136e0: 1b5d subs r5, r3, r5 + tmp14 = z3 - MULTIPLY(z2, FIX_1_847759065); /* c3+c9 */ + 80136e2: 4b41 ldr r3, [pc, #260] ; (80137e8 ) + z3 = MULTIPLY(z1 + z2, FIX_0_541196100); /* c9 */ + 80136e4: eb04 0c05 add.w ip, r4, r5 + 80136e8: fb08 fc0c mul.w ip, r8, ip + tmp11 = z3 + MULTIPLY(z1, FIX_0_765366865); /* c3-c9 */ + 80136ec: f641 087e movw r8, #6270 ; 0x187e + 80136f0: fb08 c804 mla r8, r8, r4, ip + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp10, + 80136f4: eb07 040e add.w r4, r7, lr + outptr[11] = range_limit[(int) RIGHT_SHIFT(tmp20 - tmp10, + 80136f8: eba7 070e sub.w r7, r7, lr + tmp14 = z3 - MULTIPLY(z2, FIX_1_847759065); /* c3+c9 */ + 80136fc: fb03 cc05 mla ip, r3, r5, ip + & RANGE_MASK]; + 8013700: f3c4 4489 ubfx r4, r4, #18, #10 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp10, + 8013704: 9b06 ldr r3, [sp, #24] + & RANGE_MASK]; + 8013706: f3c7 4789 ubfx r7, r7, #18, #10 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp10, + 801370a: f819 4004 ldrb.w r4, [r9, r4] + 801370e: 541c strb r4, [r3, r0] + outptr[11] = range_limit[(int) RIGHT_SHIFT(tmp20 - tmp10, + 8013710: 9b00 ldr r3, [sp, #0] + 8013712: f819 4007 ldrb.w r4, [r9, r7] + 8013716: 72dc strb r4, [r3, #11] + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp11, + 8013718: 9b01 ldr r3, [sp, #4] + 801371a: eb03 0408 add.w r4, r3, r8 + 801371e: 9b00 ldr r3, [sp, #0] + & RANGE_MASK]; + 8013720: f3c4 4489 ubfx r4, r4, #18, #10 + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp11, + 8013724: f819 4004 ldrb.w r4, [r9, r4] + 8013728: 705c strb r4, [r3, #1] + outptr[10] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp11, + 801372a: 9b01 ldr r3, [sp, #4] + 801372c: eba3 0408 sub.w r4, r3, r8 + & RANGE_MASK]; + 8013730: f3c4 4489 ubfx r4, r4, #18, #10 + outptr[10] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp11, + 8013734: f819 4004 ldrb.w r4, [r9, r4] + 8013738: 9b00 ldr r3, [sp, #0] + 801373a: 729c strb r4, [r3, #10] + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp12, + 801373c: 9b04 ldr r3, [sp, #16] + 801373e: 199c adds r4, r3, r6 + 8013740: 9b00 ldr r3, [sp, #0] + & RANGE_MASK]; + 8013742: f3c4 4489 ubfx r4, r4, #18, #10 + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp12, + 8013746: f819 4004 ldrb.w r4, [r9, r4] + 801374a: 709c strb r4, [r3, #2] + outptr[9] = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp12, + 801374c: 9b04 ldr r3, [sp, #16] + 801374e: 1b9c subs r4, r3, r6 + 8013750: 9b00 ldr r3, [sp, #0] + & RANGE_MASK]; + 8013752: f3c4 4489 ubfx r4, r4, #18, #10 + outptr[9] = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp12, + 8013756: f819 4004 ldrb.w r4, [r9, r4] + 801375a: 725c strb r4, [r3, #9] + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp23 + tmp13, + 801375c: 9b05 ldr r3, [sp, #20] + 801375e: eb03 040b add.w r4, r3, fp + 8013762: 9b00 ldr r3, [sp, #0] + & RANGE_MASK]; + 8013764: f3c4 4489 ubfx r4, r4, #18, #10 + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp23 + tmp13, + 8013768: f819 4004 ldrb.w r4, [r9, r4] + 801376c: 70dc strb r4, [r3, #3] + outptr[8] = range_limit[(int) RIGHT_SHIFT(tmp23 - tmp13, + 801376e: 9b05 ldr r3, [sp, #20] + 8013770: eba3 000b sub.w r0, r3, fp + 8013774: 9b00 ldr r3, [sp, #0] + & RANGE_MASK]; + 8013776: f3c0 4089 ubfx r0, r0, #18, #10 + outptr[8] = range_limit[(int) RIGHT_SHIFT(tmp23 - tmp13, + 801377a: f819 0000 ldrb.w r0, [r9, r0] + 801377e: 7218 strb r0, [r3, #8] + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp24 + tmp14, + 8013780: 9b02 ldr r3, [sp, #8] + 8013782: eb03 000c add.w r0, r3, ip + 8013786: 9b00 ldr r3, [sp, #0] + & RANGE_MASK]; + 8013788: f3c0 4089 ubfx r0, r0, #18, #10 + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp24 + tmp14, + 801378c: f819 0000 ldrb.w r0, [r9, r0] + 8013790: 7118 strb r0, [r3, #4] + outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp24 - tmp14, + 8013792: 9b02 ldr r3, [sp, #8] + 8013794: eba3 000c sub.w r0, r3, ip + 8013798: 9b00 ldr r3, [sp, #0] + & RANGE_MASK]; + 801379a: f3c0 4089 ubfx r0, r0, #18, #10 + outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp24 - tmp14, + 801379e: f819 0000 ldrb.w r0, [r9, r0] + 80137a2: 71d8 strb r0, [r3, #7] + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp25 + tmp15, + 80137a4: 9b03 ldr r3, [sp, #12] + 80137a6: 1858 adds r0, r3, r1 + 80137a8: 9b00 ldr r3, [sp, #0] + & RANGE_MASK]; + 80137aa: f3c0 4089 ubfx r0, r0, #18, #10 + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp25 + tmp15, + 80137ae: f819 0000 ldrb.w r0, [r9, r0] + 80137b2: 7158 strb r0, [r3, #5] + outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp25 - tmp15, + 80137b4: 9b03 ldr r3, [sp, #12] + 80137b6: 1a59 subs r1, r3, r1 + & RANGE_MASK]; + 80137b8: f3c1 4189 ubfx r1, r1, #18, #10 + outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp25 - tmp15, + 80137bc: f819 1001 ldrb.w r1, [r9, r1] + 80137c0: 9b00 ldr r3, [sp, #0] + 80137c2: 7199 strb r1, [r3, #6] + for (ctr = 0; ctr < 12; ctr++) { + 80137c4: 9b07 ldr r3, [sp, #28] + 80137c6: 4553 cmp r3, sl + 80137c8: f47f af14 bne.w 80135f4 + } +} + 80137cc: b06b add sp, #428 ; 0x1ac + 80137ce: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 80137d2: bf00 nop + 80137d4: ffffeeaf .word 0xffffeeaf + 80137d8: ffffde8b .word 0xffffde8b + 80137dc: ffffd0b0 .word 0xffffd0b0 + 80137e0: ffffea5c .word 0xffffea5c + 80137e4: ffffc08c .word 0xffffc08c + 80137e8: ffffc4df .word 0xffffc4df + +080137ec : + +GLOBAL(void) +jpeg_idct_13x13 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + 80137ec: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 80137f0: b0f7 sub sp, #476 ; 0x1dc + 80137f2: f1a2 0902 sub.w r9, r2, #2 + 80137f6: 930c str r3, [sp, #48] ; 0x30 + INT32 z1, z2, z3, z4; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + int * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + 80137f8: f8d0 314c ldr.w r3, [r0, #332] ; 0x14c + 80137fc: f103 0880 add.w r8, r3, #128 ; 0x80 + /* Pass 1: process columns from input, store into work array. */ + + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) { + 8013800: 6d4b ldr r3, [r1, #84] ; 0x54 + 8013802: f1a3 0e04 sub.w lr, r3, #4 + 8013806: f102 030e add.w r3, r2, #14 + wsptr = workspace; + 801380a: aa0e add r2, sp, #56 ; 0x38 + 801380c: 930d str r3, [sp, #52] ; 0x34 + /* Even part */ + + z1 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 801380e: f939 3f02 ldrsh.w r3, [r9, #2]! + z4 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + + tmp10 = z3 + z4; + tmp11 = z3 - z4; + + tmp12 = MULTIPLY(tmp10, FIX(1.155388986)); /* (c4+c6)/2 */ + 8013812: f242 45f9 movw r5, #9465 ; 0x24f9 + z1 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 8013816: f85e 1f04 ldr.w r1, [lr, #4]! + for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) { + 801381a: 3204 adds r2, #4 + z2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + 801381c: f9b9 4020 ldrsh.w r4, [r9, #32] + z1 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 8013820: 434b muls r3, r1 + z3 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + 8013822: f9b9 1040 ldrsh.w r1, [r9, #64] ; 0x40 + z4 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + 8013826: f9b9 0060 ldrsh.w r0, [r9, #96] ; 0x60 + z1 <<= CONST_BITS; + 801382a: 035b lsls r3, r3, #13 + + /* Odd part */ + + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + 801382c: f9b9 7050 ldrsh.w r7, [r9, #80] ; 0x50 + z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + 8013830: f9b9 c070 ldrsh.w ip, [r9, #112] ; 0x70 + z1 += ONE << (CONST_BITS-PASS1_BITS-1); + 8013834: f503 6380 add.w r3, r3, #1024 ; 0x400 + 8013838: 9303 str r3, [sp, #12] + z2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + 801383a: f8de 3040 ldr.w r3, [lr, #64] ; 0x40 + 801383e: 4363 muls r3, r4 + 8013840: 9301 str r3, [sp, #4] + z3 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + 8013842: f8de 3080 ldr.w r3, [lr, #128] ; 0x80 + tmp20 = MULTIPLY(z2, FIX(1.373119086)) + tmp12 + tmp13; /* c2 */ + 8013846: 9c01 ldr r4, [sp, #4] + z3 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + 8013848: 4359 muls r1, r3 + z4 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + 801384a: f8de 30c0 ldr.w r3, [lr, #192] ; 0xc0 + 801384e: 4358 muls r0, r3 + tmp10 = z3 + z4; + 8013850: 180b adds r3, r1, r0 + tmp11 = z3 - z4; + 8013852: 1a09 subs r1, r1, r0 + 8013854: 9102 str r1, [sp, #8] + tmp13 = MULTIPLY(tmp11, FIX(0.096834934)) + z1; /* (c4-c6)/2 */ + 8013856: f240 3119 movw r1, #793 ; 0x319 + tmp12 = MULTIPLY(tmp10, FIX(1.155388986)); /* (c4+c6)/2 */ + 801385a: 435d muls r5, r3 + tmp13 = MULTIPLY(tmp11, FIX(0.096834934)) + z1; /* (c4-c6)/2 */ + 801385c: e9dd 6002 ldrd r6, r0, [sp, #8] + 8013860: fb01 0106 mla r1, r1, r6, r0 + tmp20 = MULTIPLY(z2, FIX(1.373119086)) + tmp12 + tmp13; /* c2 */ + 8013864: f642 30f1 movw r0, #11249 ; 0x2bf1 + 8013868: fb00 5004 mla r0, r0, r4, r5 + 801386c: 4408 add r0, r1 + 801386e: 9004 str r0, [sp, #16] + tmp22 = MULTIPLY(z2, FIX(0.501487041)) - tmp12 + tmp13; /* c10 */ + 8013870: f241 000c movw r0, #4108 ; 0x100c + 8013874: 4360 muls r0, r4 + 8013876: 1b40 subs r0, r0, r5 + tmp13 = MULTIPLY(tmp11, FIX(0.486914739)) + z1; /* (c8+c12)/2 */ + 8013878: f640 457c movw r5, #3196 ; 0xc7c + tmp22 = MULTIPLY(z2, FIX(0.501487041)) - tmp12 + tmp13; /* c10 */ + 801387c: 4408 add r0, r1 + tmp13 = MULTIPLY(tmp11, FIX(0.486914739)) + z1; /* (c8+c12)/2 */ + 801387e: fb05 1106 mla r1, r5, r6, r1 + tmp21 = MULTIPLY(z2, FIX(1.058554052)) - tmp12 + tmp13; /* c6 */ + 8013882: f242 15e0 movw r5, #8672 ; 0x21e0 + tmp22 = MULTIPLY(z2, FIX(0.501487041)) - tmp12 + tmp13; /* c10 */ + 8013886: 9005 str r0, [sp, #20] + tmp12 = MULTIPLY(tmp10, FIX(0.316450131)); /* (c8-c12)/2 */ + 8013888: f44f 6022 mov.w r0, #2592 ; 0xa20 + tmp21 = MULTIPLY(z2, FIX(1.058554052)) - tmp12 + tmp13; /* c6 */ + 801388c: 4365 muls r5, r4 + tmp12 = MULTIPLY(tmp10, FIX(0.316450131)); /* (c8-c12)/2 */ + 801388e: 4358 muls r0, r3 + tmp21 = MULTIPLY(z2, FIX(1.058554052)) - tmp12 + tmp13; /* c6 */ + 8013890: 1a2d subs r5, r5, r0 + 8013892: 440d add r5, r1 + 8013894: 9506 str r5, [sp, #24] + tmp25 = MULTIPLY(z2, - FIX(1.252223920)) + tmp12 + tmp13; /* c4 */ + 8013896: 4dd9 ldr r5, [pc, #868] ; (8013bfc ) + 8013898: fb05 0004 mla r0, r5, r4, r0 + 801389c: 1841 adds r1, r0, r1 + tmp13 = MULTIPLY(tmp11, FIX(0.937303064)) - z1; /* (c2+c10)/2 */ + 801389e: 9803 ldr r0, [sp, #12] + tmp25 = MULTIPLY(z2, - FIX(1.252223920)) + tmp12 + tmp13; /* c4 */ + 80138a0: 9107 str r1, [sp, #28] + tmp12 = MULTIPLY(tmp10, FIX(0.435816023)); /* (c2-c10)/2 */ + 80138a2: f640 51f2 movw r1, #3570 ; 0xdf2 + 80138a6: 434b muls r3, r1 + tmp13 = MULTIPLY(tmp11, FIX(0.937303064)) - z1; /* (c2+c10)/2 */ + 80138a8: f641 51fe movw r1, #7678 ; 0x1dfe + 80138ac: 4371 muls r1, r6 + + tmp11 = MULTIPLY(z1 + z2, FIX(1.322312651)); /* c3 */ + tmp12 = MULTIPLY(z1 + z3, FIX(1.163874945)); /* c5 */ + tmp15 = z1 + z4; + tmp13 = MULTIPLY(tmp15, FIX(0.937797057)); /* c7 */ + tmp10 = tmp11 + tmp12 + tmp13 - + 80138ae: 4ed4 ldr r6, [pc, #848] ; (8013c00 ) + tmp13 = MULTIPLY(tmp11, FIX(0.937303064)) - z1; /* (c2+c10)/2 */ + 80138b0: 1a09 subs r1, r1, r0 + tmp23 = MULTIPLY(z2, - FIX(0.170464608)) - tmp12 - tmp13; /* c12 */ + 80138b2: 48d4 ldr r0, [pc, #848] ; (8013c04 ) + 80138b4: 4360 muls r0, r4 + 80138b6: 1ac0 subs r0, r0, r3 + 80138b8: 1a40 subs r0, r0, r1 + 80138ba: 9008 str r0, [sp, #32] + tmp24 = MULTIPLY(z2, - FIX(0.803364869)) + tmp12 - tmp13; /* c8 */ + 80138bc: 48d2 ldr r0, [pc, #840] ; (8013c08 ) + 80138be: fb00 3304 mla r3, r0, r4, r3 + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + 80138c2: f8de 0060 ldr.w r0, [lr, #96] ; 0x60 + tmp13 = MULTIPLY(tmp15, FIX(0.937797057)); /* c7 */ + 80138c6: f641 6402 movw r4, #7682 ; 0x1e02 + tmp24 = MULTIPLY(z2, - FIX(0.803364869)) + tmp12 - tmp13; /* c8 */ + 80138ca: 1a5b subs r3, r3, r1 + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 80138cc: f9b9 1010 ldrsh.w r1, [r9, #16] + tmp24 = MULTIPLY(z2, - FIX(0.803364869)) + tmp12 - tmp13; /* c8 */ + 80138d0: 9309 str r3, [sp, #36] ; 0x24 + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 80138d2: f8de 3020 ldr.w r3, [lr, #32] + 80138d6: 4359 muls r1, r3 + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + 80138d8: f9b9 3030 ldrsh.w r3, [r9, #48] ; 0x30 + 80138dc: 4343 muls r3, r0 + z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + 80138de: f8de 00a0 ldr.w r0, [lr, #160] ; 0xa0 + 80138e2: 4347 muls r7, r0 + z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + 80138e4: f8de 00e0 ldr.w r0, [lr, #224] ; 0xe0 + tmp11 = MULTIPLY(z1 + z2, FIX(1.322312651)); /* c3 */ + 80138e8: eb01 0b03 add.w fp, r1, r3 + z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + 80138ec: fb00 fc0c mul.w ip, r0, ip + tmp11 = MULTIPLY(z1 + z2, FIX(1.322312651)); /* c3 */ + 80138f0: f642 2050 movw r0, #10832 ; 0x2a50 + tmp12 = MULTIPLY(z1 + z3, FIX(1.163874945)); /* c5 */ + 80138f4: 19cd adds r5, r1, r7 + tmp11 = MULTIPLY(z1 + z2, FIX(1.322312651)); /* c3 */ + 80138f6: fb00 fb0b mul.w fp, r0, fp + tmp12 = MULTIPLY(z1 + z3, FIX(1.163874945)); /* c5 */ + 80138fa: f242 503e movw r0, #9534 ; 0x253e + 80138fe: 4345 muls r5, r0 + tmp15 = z1 + z4; + 8013900: eb01 000c add.w r0, r1, ip + tmp13 = MULTIPLY(tmp15, FIX(0.937797057)); /* c7 */ + 8013904: fb04 fa00 mul.w sl, r4, r0 + MULTIPLY(z1, FIX(2.020082300)); /* c7+c5+c3-c1 */ + tmp14 = MULTIPLY(z2 + z3, - FIX(0.338443458)); /* -c11 */ + tmp11 += tmp14 + MULTIPLY(z2, FIX(0.837223564)); /* c5+c9+c11-c3 */ + tmp12 += tmp14 - MULTIPLY(z3, FIX(1.572116027)); /* c1+c5-c9-c11 */ + 8013908: 4cc0 ldr r4, [pc, #768] ; (8013c0c ) + tmp15 = z1 + z4; + 801390a: 900a str r0, [sp, #40] ; 0x28 + tmp10 = tmp11 + tmp12 + tmp13 - + 801390c: eb0b 0005 add.w r0, fp, r5 + 8013910: 4450 add r0, sl + 8013912: fb06 0001 mla r0, r6, r1, r0 + tmp14 = MULTIPLY(z2 + z3, - FIX(0.338443458)); /* -c11 */ + 8013916: 4ebe ldr r6, [pc, #760] ; (8013c10 ) + tmp10 = tmp11 + tmp12 + tmp13 - + 8013918: 900b str r0, [sp, #44] ; 0x2c + tmp14 = MULTIPLY(z2 + z3, - FIX(0.338443458)); /* -c11 */ + 801391a: 19d8 adds r0, r3, r7 + 801391c: 4370 muls r0, r6 + tmp11 += tmp14 + MULTIPLY(z2, FIX(0.837223564)); /* c5+c9+c11-c3 */ + 801391e: f641 26cb movw r6, #6859 ; 0x1acb + 8013922: fb06 0603 mla r6, r6, r3, r0 + tmp12 += tmp14 - MULTIPLY(z3, FIX(1.572116027)); /* c1+c5-c9-c11 */ + 8013926: fb04 0007 mla r0, r4, r7, r0 + tmp14 = MULTIPLY(z2 + z4, - FIX(1.163874945)); /* -c5 */ + 801392a: f604 5411 addw r4, r4, #3345 ; 0xd11 + tmp11 += tmp14 + MULTIPLY(z2, FIX(0.837223564)); /* c5+c9+c11-c3 */ + 801392e: 445e add r6, fp + tmp11 += tmp14; + tmp13 += tmp14 + MULTIPLY(z4, FIX(2.205608352)); /* c3+c5+c9-c7 */ + 8013930: f244 6b94 movw fp, #18068 ; 0x4694 + tmp12 += tmp14 - MULTIPLY(z3, FIX(1.572116027)); /* c1+c5-c9-c11 */ + 8013934: 4428 add r0, r5 + tmp14 = MULTIPLY(z2 + z4, - FIX(1.163874945)); /* -c5 */ + 8013936: eb03 050c add.w r5, r3, ip + 801393a: 4365 muls r5, r4 + tmp14 = MULTIPLY(z3 + z4, - FIX(0.657217813)); /* -c9 */ + 801393c: 4cb5 ldr r4, [pc, #724] ; (8013c14 ) + tmp11 += tmp14; + 801393e: 442e add r6, r5 + tmp13 += tmp14 + MULTIPLY(z4, FIX(2.205608352)); /* c3+c5+c9-c7 */ + 8013940: fb0b 550c mla r5, fp, ip, r5 + tmp12 += tmp14; + tmp13 += tmp14; + tmp15 = MULTIPLY(tmp15, FIX(0.338443458)); /* c11 */ + tmp14 = tmp15 + MULTIPLY(z1, FIX(0.318774355)) - /* c9-c11 */ + 8013944: f640 2b33 movw fp, #2611 ; 0xa33 + tmp13 += tmp14 + MULTIPLY(z4, FIX(2.205608352)); /* c3+c5+c9-c7 */ + 8013948: 4455 add r5, sl + tmp14 = MULTIPLY(z3 + z4, - FIX(0.657217813)); /* -c9 */ + 801394a: eb07 0a0c add.w sl, r7, ip + 801394e: fb04 fa0a mul.w sl, r4, sl + tmp15 = MULTIPLY(tmp15, FIX(0.338443458)); /* c11 */ + 8013952: 9c0a ldr r4, [sp, #40] ; 0x28 + tmp12 += tmp14; + 8013954: 4450 add r0, sl + tmp13 += tmp14; + 8013956: 44aa add sl, r5 + tmp15 = MULTIPLY(tmp15, FIX(0.338443458)); /* c11 */ + 8013958: f640 25d5 movw r5, #2773 ; 0xad5 + 801395c: 4365 muls r5, r4 + tmp14 = tmp15 + MULTIPLY(z1, FIX(0.318774355)) - /* c9-c11 */ + 801395e: 4cae ldr r4, [pc, #696] ; (8013c18 ) + 8013960: fb0b 5101 mla r1, fp, r1, r5 + MULTIPLY(z2, FIX(0.466105296)); /* c1-c7 */ + z1 = MULTIPLY(z3 - z2, FIX(0.937797057)); /* c7 */ + tmp14 += z1; + tmp15 += z1 + MULTIPLY(z3, FIX(0.384515595)) - /* c3-c7 */ + 8013964: f640 4b4e movw fp, #3150 ; 0xc4e + tmp14 = tmp15 + MULTIPLY(z1, FIX(0.318774355)) - /* c9-c11 */ + 8013968: fb04 1103 mla r1, r4, r3, r1 + z1 = MULTIPLY(z3 - z2, FIX(0.937797057)); /* c7 */ + 801396c: 1afb subs r3, r7, r3 + 801396e: f641 6402 movw r4, #7682 ; 0x1e02 + 8013972: 4363 muls r3, r4 + MULTIPLY(z4, FIX(1.742345811)); /* c1+c11 */ + + /* Final output stage */ + + wsptr[8*0] = (int) RIGHT_SHIFT(tmp20 + tmp10, CONST_BITS-PASS1_BITS); + 8013974: 9c04 ldr r4, [sp, #16] + tmp14 += z1; + 8013976: 4419 add r1, r3 + tmp15 += z1 + MULTIPLY(z3, FIX(0.384515595)) - /* c3-c7 */ + 8013978: fb0b 3307 mla r3, fp, r7, r3 + 801397c: f46f 575f mvn.w r7, #14272 ; 0x37c0 + 8013980: fb07 330c mla r3, r7, ip, r3 + 8013984: 442b add r3, r5 + wsptr[8*0] = (int) RIGHT_SHIFT(tmp20 + tmp10, CONST_BITS-PASS1_BITS); + 8013986: 9d0b ldr r5, [sp, #44] ; 0x2c + 8013988: 1965 adds r5, r4, r5 + 801398a: 12ed asrs r5, r5, #11 + 801398c: f842 5c04 str.w r5, [r2, #-4] + wsptr[8*12] = (int) RIGHT_SHIFT(tmp20 - tmp10, CONST_BITS-PASS1_BITS); + 8013990: 9d0b ldr r5, [sp, #44] ; 0x2c + 8013992: 1b65 subs r5, r4, r5 + wsptr[8*1] = (int) RIGHT_SHIFT(tmp21 + tmp11, CONST_BITS-PASS1_BITS); + 8013994: 9c06 ldr r4, [sp, #24] + wsptr[8*12] = (int) RIGHT_SHIFT(tmp20 - tmp10, CONST_BITS-PASS1_BITS); + 8013996: 12ed asrs r5, r5, #11 + 8013998: f8c2 517c str.w r5, [r2, #380] ; 0x17c + wsptr[8*1] = (int) RIGHT_SHIFT(tmp21 + tmp11, CONST_BITS-PASS1_BITS); + 801399c: 19a5 adds r5, r4, r6 + 801399e: 12ed asrs r5, r5, #11 + 80139a0: 61d5 str r5, [r2, #28] + wsptr[8*11] = (int) RIGHT_SHIFT(tmp21 - tmp11, CONST_BITS-PASS1_BITS); + 80139a2: 1ba5 subs r5, r4, r6 + wsptr[8*2] = (int) RIGHT_SHIFT(tmp22 + tmp12, CONST_BITS-PASS1_BITS); + 80139a4: 9c05 ldr r4, [sp, #20] + wsptr[8*11] = (int) RIGHT_SHIFT(tmp21 - tmp11, CONST_BITS-PASS1_BITS); + 80139a6: 12ed asrs r5, r5, #11 + 80139a8: f8c2 515c str.w r5, [r2, #348] ; 0x15c + wsptr[8*2] = (int) RIGHT_SHIFT(tmp22 + tmp12, CONST_BITS-PASS1_BITS); + 80139ac: 1825 adds r5, r4, r0 + wsptr[8*10] = (int) RIGHT_SHIFT(tmp22 - tmp12, CONST_BITS-PASS1_BITS); + 80139ae: 1a20 subs r0, r4, r0 + wsptr[8*2] = (int) RIGHT_SHIFT(tmp22 + tmp12, CONST_BITS-PASS1_BITS); + 80139b0: 12ed asrs r5, r5, #11 + wsptr[8*10] = (int) RIGHT_SHIFT(tmp22 - tmp12, CONST_BITS-PASS1_BITS); + 80139b2: 12c0 asrs r0, r0, #11 + wsptr[8*2] = (int) RIGHT_SHIFT(tmp22 + tmp12, CONST_BITS-PASS1_BITS); + 80139b4: 63d5 str r5, [r2, #60] ; 0x3c + wsptr[8*10] = (int) RIGHT_SHIFT(tmp22 - tmp12, CONST_BITS-PASS1_BITS); + 80139b6: f8c2 013c str.w r0, [r2, #316] ; 0x13c + wsptr[8*3] = (int) RIGHT_SHIFT(tmp23 + tmp13, CONST_BITS-PASS1_BITS); + 80139ba: 9808 ldr r0, [sp, #32] + 80139bc: 4450 add r0, sl + 80139be: 12c0 asrs r0, r0, #11 + 80139c0: 65d0 str r0, [r2, #92] ; 0x5c + wsptr[8*9] = (int) RIGHT_SHIFT(tmp23 - tmp13, CONST_BITS-PASS1_BITS); + 80139c2: 9808 ldr r0, [sp, #32] + 80139c4: eba0 000a sub.w r0, r0, sl + 80139c8: 12c0 asrs r0, r0, #11 + 80139ca: f8c2 011c str.w r0, [r2, #284] ; 0x11c + wsptr[8*4] = (int) RIGHT_SHIFT(tmp24 + tmp14, CONST_BITS-PASS1_BITS); + 80139ce: 9809 ldr r0, [sp, #36] ; 0x24 + 80139d0: 4408 add r0, r1 + 80139d2: 12c0 asrs r0, r0, #11 + 80139d4: 67d0 str r0, [r2, #124] ; 0x7c + wsptr[8*8] = (int) RIGHT_SHIFT(tmp24 - tmp14, CONST_BITS-PASS1_BITS); + 80139d6: 9809 ldr r0, [sp, #36] ; 0x24 + 80139d8: 1a41 subs r1, r0, r1 + tmp26 = MULTIPLY(tmp11 - z2, FIX(1.414213562)) + z1; /* c0 */ + 80139da: 9803 ldr r0, [sp, #12] + wsptr[8*8] = (int) RIGHT_SHIFT(tmp24 - tmp14, CONST_BITS-PASS1_BITS); + 80139dc: 12c9 asrs r1, r1, #11 + 80139de: f8c2 10fc str.w r1, [r2, #252] ; 0xfc + wsptr[8*5] = (int) RIGHT_SHIFT(tmp25 + tmp15, CONST_BITS-PASS1_BITS); + 80139e2: 9907 ldr r1, [sp, #28] + 80139e4: 4419 add r1, r3 + 80139e6: 12c9 asrs r1, r1, #11 + 80139e8: f8c2 109c str.w r1, [r2, #156] ; 0x9c + wsptr[8*7] = (int) RIGHT_SHIFT(tmp25 - tmp15, CONST_BITS-PASS1_BITS); + 80139ec: 9907 ldr r1, [sp, #28] + 80139ee: 1acb subs r3, r1, r3 + 80139f0: 12db asrs r3, r3, #11 + 80139f2: f8c2 30dc str.w r3, [r2, #220] ; 0xdc + tmp26 = MULTIPLY(tmp11 - z2, FIX(1.414213562)) + z1; /* c0 */ + 80139f6: e9dd 1301 ldrd r1, r3, [sp, #4] + 80139fa: 1a5b subs r3, r3, r1 + 80139fc: f642 5141 movw r1, #11585 ; 0x2d41 + 8013a00: fb01 0303 mla r3, r1, r3, r0 + wsptr[8*6] = (int) RIGHT_SHIFT(tmp26, CONST_BITS-PASS1_BITS); + 8013a04: 12db asrs r3, r3, #11 + 8013a06: f8c2 30bc str.w r3, [r2, #188] ; 0xbc + for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) { + 8013a0a: 9b0d ldr r3, [sp, #52] ; 0x34 + 8013a0c: 454b cmp r3, r9 + 8013a0e: f47f aefe bne.w 801380e + 8013a12: 9b0c ldr r3, [sp, #48] ; 0x30 + } + + /* Pass 2: process 13 rows from work array, store into output array. */ + + wsptr = workspace; + 8013a14: ac0e add r4, sp, #56 ; 0x38 + 8013a16: 3b04 subs r3, #4 + 8013a18: 9303 str r3, [sp, #12] + 8013a1a: 9b0c ldr r3, [sp, #48] ; 0x30 + 8013a1c: 3330 adds r3, #48 ; 0x30 + 8013a1e: 930c str r3, [sp, #48] ; 0x30 + for (ctr = 0; ctr < 13; ctr++) { + outptr = output_buf[ctr] + output_col; + 8013a20: 9b03 ldr r3, [sp, #12] + z4 = (INT32) wsptr[6]; + + tmp10 = z3 + z4; + tmp11 = z3 - z4; + + tmp12 = MULTIPLY(tmp10, FIX(1.155388986)); /* (c4+c6)/2 */ + 8013a22: f242 45f9 movw r5, #9465 ; 0x24f9 + z3 = (INT32) wsptr[4]; + 8013a26: 6920 ldr r0, [r4, #16] + z4 = (INT32) wsptr[7]; + + tmp11 = MULTIPLY(z1 + z2, FIX(1.322312651)); /* c3 */ + tmp12 = MULTIPLY(z1 + z3, FIX(1.163874945)); /* c5 */ + tmp15 = z1 + z4; + tmp13 = MULTIPLY(tmp15, FIX(0.937797057)); /* c7 */ + 8013a28: f641 6702 movw r7, #7682 ; 0x1e02 + outptr = output_buf[ctr] + output_col; + 8013a2c: f853 2f04 ldr.w r2, [r3, #4]! + & RANGE_MASK]; + outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp26, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + + wsptr += 8; /* advance pointer to next row */ + 8013a30: 3420 adds r4, #32 + z4 = (INT32) wsptr[6]; + 8013a32: f854 1c08 ldr.w r1, [r4, #-8] + outptr = output_buf[ctr] + output_col; + 8013a36: 920b str r2, [sp, #44] ; 0x2c + 8013a38: 9303 str r3, [sp, #12] + 8013a3a: 4613 mov r3, r2 + 8013a3c: 9a80 ldr r2, [sp, #512] ; 0x200 + z2 = (INT32) wsptr[2]; + 8013a3e: f854 ec18 ldr.w lr, [r4, #-24] + outptr = output_buf[ctr] + output_col; + 8013a42: 189a adds r2, r3, r2 + z1 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + 8013a44: f854 3c20 ldr.w r3, [r4, #-32] + z3 = (INT32) wsptr[5]; + 8013a48: f854 cc0c ldr.w ip, [r4, #-12] + z1 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + 8013a4c: 3310 adds r3, #16 + 8013a4e: 9302 str r3, [sp, #8] + tmp10 = z3 + z4; + 8013a50: 1843 adds r3, r0, r1 + tmp11 = z3 - z4; + 8013a52: 1a41 subs r1, r0, r1 + tmp12 = MULTIPLY(tmp10, FIX(1.155388986)); /* (c4+c6)/2 */ + 8013a54: 435d muls r5, r3 + tmp11 = z3 - z4; + 8013a56: 9101 str r1, [sp, #4] + tmp13 = MULTIPLY(tmp11, FIX(0.096834934)) + z1; /* (c4-c6)/2 */ + 8013a58: f240 3119 movw r1, #793 ; 0x319 + 8013a5c: 9801 ldr r0, [sp, #4] + tmp13 = MULTIPLY(tmp11, FIX(0.486914739)) + z1; /* (c8+c12)/2 */ + 8013a5e: 9e01 ldr r6, [sp, #4] + tmp13 = MULTIPLY(tmp11, FIX(0.096834934)) + z1; /* (c4-c6)/2 */ + 8013a60: 4341 muls r1, r0 + 8013a62: 9802 ldr r0, [sp, #8] + 8013a64: eb01 3140 add.w r1, r1, r0, lsl #13 + tmp20 = MULTIPLY(z2, FIX(1.373119086)) + tmp12 + tmp13; /* c2 */ + 8013a68: f642 30f1 movw r0, #11249 ; 0x2bf1 + 8013a6c: fb00 500e mla r0, r0, lr, r5 + 8013a70: 4408 add r0, r1 + 8013a72: 9004 str r0, [sp, #16] + tmp22 = MULTIPLY(z2, FIX(0.501487041)) - tmp12 + tmp13; /* c10 */ + 8013a74: f241 000c movw r0, #4108 ; 0x100c + 8013a78: fb00 f00e mul.w r0, r0, lr + 8013a7c: 1b40 subs r0, r0, r5 + tmp13 = MULTIPLY(tmp11, FIX(0.486914739)) + z1; /* (c8+c12)/2 */ + 8013a7e: f640 457c movw r5, #3196 ; 0xc7c + tmp22 = MULTIPLY(z2, FIX(0.501487041)) - tmp12 + tmp13; /* c10 */ + 8013a82: 4408 add r0, r1 + tmp13 = MULTIPLY(tmp11, FIX(0.486914739)) + z1; /* (c8+c12)/2 */ + 8013a84: fb05 1106 mla r1, r5, r6, r1 + tmp21 = MULTIPLY(z2, FIX(1.058554052)) - tmp12 + tmp13; /* c6 */ + 8013a88: f242 15e0 movw r5, #8672 ; 0x21e0 + tmp22 = MULTIPLY(z2, FIX(0.501487041)) - tmp12 + tmp13; /* c10 */ + 8013a8c: 9005 str r0, [sp, #20] + tmp12 = MULTIPLY(tmp10, FIX(0.316450131)); /* (c8-c12)/2 */ + 8013a8e: f44f 6022 mov.w r0, #2592 ; 0xa20 + tmp21 = MULTIPLY(z2, FIX(1.058554052)) - tmp12 + tmp13; /* c6 */ + 8013a92: fb05 f50e mul.w r5, r5, lr + tmp12 = MULTIPLY(tmp10, FIX(0.316450131)); /* (c8-c12)/2 */ + 8013a96: 4358 muls r0, r3 + tmp21 = MULTIPLY(z2, FIX(1.058554052)) - tmp12 + tmp13; /* c6 */ + 8013a98: 1a2d subs r5, r5, r0 + 8013a9a: 440d add r5, r1 + 8013a9c: 9506 str r5, [sp, #24] + tmp25 = MULTIPLY(z2, - FIX(1.252223920)) + tmp12 + tmp13; /* c4 */ + 8013a9e: 4d57 ldr r5, [pc, #348] ; (8013bfc ) + 8013aa0: fb05 000e mla r0, r5, lr, r0 + 8013aa4: 1841 adds r1, r0, r1 + tmp13 = MULTIPLY(tmp11, FIX(0.937303064)) - z1; /* (c2+c10)/2 */ + 8013aa6: 9802 ldr r0, [sp, #8] + tmp25 = MULTIPLY(z2, - FIX(1.252223920)) + tmp12 + tmp13; /* c4 */ + 8013aa8: 9107 str r1, [sp, #28] + tmp12 = MULTIPLY(tmp10, FIX(0.435816023)); /* (c2-c10)/2 */ + 8013aaa: f640 51f2 movw r1, #3570 ; 0xdf2 + 8013aae: 434b muls r3, r1 + tmp13 = MULTIPLY(tmp11, FIX(0.937303064)) - z1; /* (c2+c10)/2 */ + 8013ab0: f641 51fe movw r1, #7678 ; 0x1dfe + 8013ab4: 4371 muls r1, r6 + tmp14 = MULTIPLY(z2 + z3, - FIX(0.338443458)); /* -c11 */ + 8013ab6: 4e56 ldr r6, [pc, #344] ; (8013c10 ) + tmp13 = MULTIPLY(tmp11, FIX(0.937303064)) - z1; /* (c2+c10)/2 */ + 8013ab8: eba1 3140 sub.w r1, r1, r0, lsl #13 + tmp23 = MULTIPLY(z2, - FIX(0.170464608)) - tmp12 - tmp13; /* c12 */ + 8013abc: 4851 ldr r0, [pc, #324] ; (8013c04 ) + 8013abe: fb00 f00e mul.w r0, r0, lr + 8013ac2: 1ac0 subs r0, r0, r3 + 8013ac4: 1a40 subs r0, r0, r1 + 8013ac6: 9008 str r0, [sp, #32] + tmp24 = MULTIPLY(z2, - FIX(0.803364869)) + tmp12 - tmp13; /* c8 */ + 8013ac8: 484f ldr r0, [pc, #316] ; (8013c08 ) + 8013aca: fb00 330e mla r3, r0, lr, r3 + tmp11 = MULTIPLY(z1 + z2, FIX(1.322312651)); /* c3 */ + 8013ace: f642 2050 movw r0, #10832 ; 0x2a50 + tmp24 = MULTIPLY(z2, - FIX(0.803364869)) + tmp12 - tmp13; /* c8 */ + 8013ad2: 1a5b subs r3, r3, r1 + z1 = (INT32) wsptr[1]; + 8013ad4: f854 1c1c ldr.w r1, [r4, #-28] + tmp24 = MULTIPLY(z2, - FIX(0.803364869)) + tmp12 - tmp13; /* c8 */ + 8013ad8: 9309 str r3, [sp, #36] ; 0x24 + tmp12 = MULTIPLY(z1 + z3, FIX(1.163874945)); /* c5 */ + 8013ada: eb01 050c add.w r5, r1, ip + z2 = (INT32) wsptr[3]; + 8013ade: f854 3c14 ldr.w r3, [r4, #-20] + tmp11 = MULTIPLY(z1 + z2, FIX(1.322312651)); /* c3 */ + 8013ae2: eb01 0b03 add.w fp, r1, r3 + 8013ae6: fb00 fb0b mul.w fp, r0, fp + tmp12 = MULTIPLY(z1 + z3, FIX(1.163874945)); /* c5 */ + 8013aea: f242 503e movw r0, #9534 ; 0x253e + 8013aee: 4345 muls r5, r0 + tmp15 = z1 + z4; + 8013af0: f854 0c04 ldr.w r0, [r4, #-4] + 8013af4: eb01 0900 add.w r9, r1, r0 + tmp10 = tmp11 + tmp12 + tmp13 - + 8013af8: 4841 ldr r0, [pc, #260] ; (8013c00 ) + tmp13 = MULTIPLY(tmp15, FIX(0.937797057)); /* c7 */ + 8013afa: fb07 fa09 mul.w sl, r7, r9 + tmp10 = tmp11 + tmp12 + tmp13 - + 8013afe: eb0b 0705 add.w r7, fp, r5 + 8013b02: 4457 add r7, sl + 8013b04: fb00 7001 mla r0, r0, r1, r7 + tmp12 += tmp14 - MULTIPLY(z3, FIX(1.572116027)); /* c1+c5-c9-c11 */ + 8013b08: 4f40 ldr r7, [pc, #256] ; (8013c0c ) + tmp10 = tmp11 + tmp12 + tmp13 - + 8013b0a: 900a str r0, [sp, #40] ; 0x28 + tmp14 = MULTIPLY(z2 + z3, - FIX(0.338443458)); /* -c11 */ + 8013b0c: eb03 000c add.w r0, r3, ip + 8013b10: 4370 muls r0, r6 + tmp11 += tmp14 + MULTIPLY(z2, FIX(0.837223564)); /* c5+c9+c11-c3 */ + 8013b12: f641 26cb movw r6, #6859 ; 0x1acb + 8013b16: fb06 0603 mla r6, r6, r3, r0 + tmp12 += tmp14 - MULTIPLY(z3, FIX(1.572116027)); /* c1+c5-c9-c11 */ + 8013b1a: fb07 000c mla r0, r7, ip, r0 + tmp14 = MULTIPLY(z2 + z4, - FIX(1.163874945)); /* -c5 */ + 8013b1e: f607 5711 addw r7, r7, #3345 ; 0xd11 + tmp11 += tmp14 + MULTIPLY(z2, FIX(0.837223564)); /* c5+c9+c11-c3 */ + 8013b22: 445e add r6, fp + tmp13 += tmp14 + MULTIPLY(z4, FIX(2.205608352)); /* c3+c5+c9-c7 */ + 8013b24: f244 6b94 movw fp, #18068 ; 0x4694 + tmp12 += tmp14 - MULTIPLY(z3, FIX(1.572116027)); /* c1+c5-c9-c11 */ + 8013b28: 4428 add r0, r5 + tmp14 = MULTIPLY(z2 + z4, - FIX(1.163874945)); /* -c5 */ + 8013b2a: f854 5c04 ldr.w r5, [r4, #-4] + 8013b2e: 195d adds r5, r3, r5 + 8013b30: 437d muls r5, r7 + tmp13 += tmp14 + MULTIPLY(z4, FIX(2.205608352)); /* c3+c5+c9-c7 */ + 8013b32: f854 7c04 ldr.w r7, [r4, #-4] + tmp11 += tmp14; + 8013b36: 442e add r6, r5 + tmp13 += tmp14 + MULTIPLY(z4, FIX(2.205608352)); /* c3+c5+c9-c7 */ + 8013b38: fb0b 5507 mla r5, fp, r7, r5 + 8013b3c: 4455 add r5, sl + tmp14 = MULTIPLY(z3 + z4, - FIX(0.657217813)); /* -c9 */ + 8013b3e: eb0c 0a07 add.w sl, ip, r7 + 8013b42: 4f34 ldr r7, [pc, #208] ; (8013c14 ) + 8013b44: fb07 fa0a mul.w sl, r7, sl + tmp14 = tmp15 + MULTIPLY(z1, FIX(0.318774355)) - /* c9-c11 */ + 8013b48: f207 671e addw r7, r7, #1566 ; 0x61e + tmp12 += tmp14; + 8013b4c: 4450 add r0, sl + tmp13 += tmp14; + 8013b4e: 44aa add sl, r5 + tmp15 = MULTIPLY(tmp15, FIX(0.338443458)); /* c11 */ + 8013b50: f640 25d5 movw r5, #2773 ; 0xad5 + 8013b54: fb05 f509 mul.w r5, r5, r9 + tmp14 = tmp15 + MULTIPLY(z1, FIX(0.318774355)) - /* c9-c11 */ + 8013b58: f640 2933 movw r9, #2611 ; 0xa33 + 8013b5c: fb09 5101 mla r1, r9, r1, r5 + tmp15 += z1 + MULTIPLY(z3, FIX(0.384515595)) - /* c3-c7 */ + 8013b60: f640 494e movw r9, #3150 ; 0xc4e + tmp14 = tmp15 + MULTIPLY(z1, FIX(0.318774355)) - /* c9-c11 */ + 8013b64: fb07 1103 mla r1, r7, r3, r1 + z1 = MULTIPLY(z3 - z2, FIX(0.937797057)); /* c7 */ + 8013b68: ebac 0303 sub.w r3, ip, r3 + 8013b6c: f641 6702 movw r7, #7682 ; 0x1e02 + 8013b70: 437b muls r3, r7 + tmp15 += z1 + MULTIPLY(z3, FIX(0.384515595)) - /* c3-c7 */ + 8013b72: f854 7c04 ldr.w r7, [r4, #-4] + tmp14 += z1; + 8013b76: 4419 add r1, r3 + tmp15 += z1 + MULTIPLY(z3, FIX(0.384515595)) - /* c3-c7 */ + 8013b78: fb09 330c mla r3, r9, ip, r3 + 8013b7c: f46f 5c5f mvn.w ip, #14272 ; 0x37c0 + 8013b80: fb0c 3307 mla r3, ip, r7, r3 + 8013b84: eb03 0c05 add.w ip, r3, r5 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp10, + 8013b88: 9b0a ldr r3, [sp, #40] ; 0x28 + 8013b8a: 9d04 ldr r5, [sp, #16] + 8013b8c: 441d add r5, r3 + & RANGE_MASK]; + 8013b8e: f3c5 4589 ubfx r5, r5, #18, #10 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp10, + 8013b92: f818 5005 ldrb.w r5, [r8, r5] + 8013b96: 9f0b ldr r7, [sp, #44] ; 0x2c + 8013b98: 9b80 ldr r3, [sp, #512] ; 0x200 + 8013b9a: 54fd strb r5, [r7, r3] + outptr[12] = range_limit[(int) RIGHT_SHIFT(tmp20 - tmp10, + 8013b9c: 9b04 ldr r3, [sp, #16] + 8013b9e: 9d0a ldr r5, [sp, #40] ; 0x28 + 8013ba0: 1b5d subs r5, r3, r5 + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp11, + 8013ba2: 9b06 ldr r3, [sp, #24] + & RANGE_MASK]; + 8013ba4: f3c5 4589 ubfx r5, r5, #18, #10 + outptr[12] = range_limit[(int) RIGHT_SHIFT(tmp20 - tmp10, + 8013ba8: f818 5005 ldrb.w r5, [r8, r5] + 8013bac: 7315 strb r5, [r2, #12] + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp11, + 8013bae: 199d adds r5, r3, r6 + & RANGE_MASK]; + 8013bb0: f3c5 4589 ubfx r5, r5, #18, #10 + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp11, + 8013bb4: f818 5005 ldrb.w r5, [r8, r5] + 8013bb8: 7055 strb r5, [r2, #1] + outptr[11] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp11, + 8013bba: 1b9d subs r5, r3, r6 + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp12, + 8013bbc: 9b05 ldr r3, [sp, #20] + & RANGE_MASK]; + 8013bbe: f3c5 4589 ubfx r5, r5, #18, #10 + outptr[11] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp11, + 8013bc2: f818 5005 ldrb.w r5, [r8, r5] + 8013bc6: 72d5 strb r5, [r2, #11] + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp12, + 8013bc8: 181d adds r5, r3, r0 + outptr[10] = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp12, + 8013bca: 1a18 subs r0, r3, r0 + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp23 + tmp13, + 8013bcc: 9b08 ldr r3, [sp, #32] + & RANGE_MASK]; + 8013bce: f3c5 4589 ubfx r5, r5, #18, #10 + & RANGE_MASK]; + 8013bd2: f3c0 4089 ubfx r0, r0, #18, #10 + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp12, + 8013bd6: f818 5005 ldrb.w r5, [r8, r5] + 8013bda: 7095 strb r5, [r2, #2] + outptr[10] = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp12, + 8013bdc: f818 0000 ldrb.w r0, [r8, r0] + 8013be0: 7290 strb r0, [r2, #10] + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp23 + tmp13, + 8013be2: eb03 000a add.w r0, r3, sl + & RANGE_MASK]; + 8013be6: f3c0 4089 ubfx r0, r0, #18, #10 + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp23 + tmp13, + 8013bea: f818 0000 ldrb.w r0, [r8, r0] + 8013bee: 70d0 strb r0, [r2, #3] + outptr[9] = range_limit[(int) RIGHT_SHIFT(tmp23 - tmp13, + 8013bf0: eba3 000a sub.w r0, r3, sl + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp24 + tmp14, + 8013bf4: 9b09 ldr r3, [sp, #36] ; 0x24 + & RANGE_MASK]; + 8013bf6: f3c0 4089 ubfx r0, r0, #18, #10 + 8013bfa: e00f b.n 8013c1c + 8013bfc: ffffd7ee .word 0xffffd7ee + 8013c00: ffffbf5b .word 0xffffbf5b + 8013c04: fffffa8c .word 0xfffffa8c + 8013c08: ffffe64b .word 0xffffe64b + 8013c0c: ffffcdb1 .word 0xffffcdb1 + 8013c10: fffff52b .word 0xfffff52b + 8013c14: ffffeaf8 .word 0xffffeaf8 + 8013c18: fffff116 .word 0xfffff116 + outptr[9] = range_limit[(int) RIGHT_SHIFT(tmp23 - tmp13, + 8013c1c: f818 0000 ldrb.w r0, [r8, r0] + 8013c20: 7250 strb r0, [r2, #9] + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp24 + tmp14, + 8013c22: 1858 adds r0, r3, r1 + outptr[8] = range_limit[(int) RIGHT_SHIFT(tmp24 - tmp14, + 8013c24: 1a59 subs r1, r3, r1 + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp25 + tmp15, + 8013c26: 9b07 ldr r3, [sp, #28] + & RANGE_MASK]; + 8013c28: f3c0 4089 ubfx r0, r0, #18, #10 + & RANGE_MASK]; + 8013c2c: f3c1 4189 ubfx r1, r1, #18, #10 + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp24 + tmp14, + 8013c30: f818 0000 ldrb.w r0, [r8, r0] + 8013c34: 7110 strb r0, [r2, #4] + outptr[8] = range_limit[(int) RIGHT_SHIFT(tmp24 - tmp14, + 8013c36: f818 1001 ldrb.w r1, [r8, r1] + 8013c3a: 7211 strb r1, [r2, #8] + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp25 + tmp15, + 8013c3c: eb03 010c add.w r1, r3, ip + outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp25 - tmp15, + 8013c40: eba3 030c sub.w r3, r3, ip + & RANGE_MASK]; + 8013c44: f3c1 4189 ubfx r1, r1, #18, #10 + & RANGE_MASK]; + 8013c48: f3c3 4389 ubfx r3, r3, #18, #10 + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp25 + tmp15, + 8013c4c: f818 1001 ldrb.w r1, [r8, r1] + 8013c50: 7151 strb r1, [r2, #5] + tmp26 = MULTIPLY(tmp11 - z2, FIX(1.414213562)) + z1; /* c0 */ + 8013c52: f642 5141 movw r1, #11585 ; 0x2d41 + outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp25 - tmp15, + 8013c56: f818 3003 ldrb.w r3, [r8, r3] + 8013c5a: 71d3 strb r3, [r2, #7] + tmp26 = MULTIPLY(tmp11 - z2, FIX(1.414213562)) + z1; /* c0 */ + 8013c5c: 9b01 ldr r3, [sp, #4] + 8013c5e: eba3 030e sub.w r3, r3, lr + 8013c62: 434b muls r3, r1 + 8013c64: 9902 ldr r1, [sp, #8] + 8013c66: eb03 3341 add.w r3, r3, r1, lsl #13 + & RANGE_MASK]; + 8013c6a: f3c3 4389 ubfx r3, r3, #18, #10 + outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp26, + 8013c6e: f818 3003 ldrb.w r3, [r8, r3] + 8013c72: 7193 strb r3, [r2, #6] + for (ctr = 0; ctr < 13; ctr++) { + 8013c74: 9b0c ldr r3, [sp, #48] ; 0x30 + 8013c76: 9a03 ldr r2, [sp, #12] + 8013c78: 4293 cmp r3, r2 + 8013c7a: f47f aed1 bne.w 8013a20 + } +} + 8013c7e: b077 add sp, #476 ; 0x1dc + 8013c80: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + +08013c84 : + +GLOBAL(void) +jpeg_idct_14x14 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + 8013c84: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8013c88: b0fd sub sp, #500 ; 0x1f4 + 8013c8a: f1a2 0b02 sub.w fp, r2, #2 + 8013c8e: 9309 str r3, [sp, #36] ; 0x24 + INT32 z1, z2, z3, z4; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + int * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + 8013c90: f8d0 314c ldr.w r3, [r0, #332] ; 0x14c + 8013c94: 6d48 ldr r0, [r1, #84] ; 0x54 + 8013c96: f103 0980 add.w r9, r3, #128 ; 0x80 + /* Pass 1: process columns from input, store into work array. */ + + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) { + 8013c9a: 1f03 subs r3, r0, #4 + 8013c9c: 9300 str r3, [sp, #0] + 8013c9e: f102 030e add.w r3, r2, #14 + 8013ca2: 930b str r3, [sp, #44] ; 0x2c + wsptr = workspace; + 8013ca4: ab0c add r3, sp, #48 ; 0x30 + /* Even part */ + + z1 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 8013ca6: 9900 ldr r1, [sp, #0] + + z3 = MULTIPLY(z1 + z2, FIX(1.105676686)); /* c6 */ + + tmp13 = z3 + MULTIPLY(z1, FIX(0.273079590)); /* c2-c6 */ + tmp14 = z3 - MULTIPLY(z2, FIX(1.719280954)); /* c6+c10 */ + tmp15 = MULTIPLY(z1, FIX(0.613604268)) - /* c10 */ + 8013ca8: f241 3ea3 movw lr, #5027 ; 0x13a3 + z1 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 8013cac: f93b 4f02 ldrsh.w r4, [fp, #2]! + tmp12 = MULTIPLY(tmp14, FIX(1.197448846)); /* c5 */ + tmp10 = tmp11 + tmp12 + tmp13 - MULTIPLY(z1, FIX(1.126980169)); /* c3+c5-c1 */ + tmp14 = MULTIPLY(tmp14, FIX(0.752406978)); /* c9 */ + tmp16 = tmp14 - MULTIPLY(z1, FIX(1.061150426)); /* c9+c11-c13 */ + z1 -= z2; + tmp15 = MULTIPLY(z1, FIX(0.467085129)) - tmp13; /* c11 */ + 8013cb0: f640 68f2 movw r8, #3826 ; 0xef2 + z1 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 8013cb4: f851 2f04 ldr.w r2, [r1, #4]! + for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) { + 8013cb8: 3304 adds r3, #4 + z1 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 8013cba: 9100 str r1, [sp, #0] + 8013cbc: 4354 muls r4, r2 + z4 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + 8013cbe: 9a00 ldr r2, [sp, #0] + 8013cc0: f9bb 1040 ldrsh.w r1, [fp, #64] ; 0x40 + 8013cc4: f8d2 2080 ldr.w r2, [r2, #128] ; 0x80 + z1 <<= CONST_BITS; + 8013cc8: 0364 lsls r4, r4, #13 + z2 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + 8013cca: 9800 ldr r0, [sp, #0] + z4 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + 8013ccc: 434a muls r2, r1 + z2 = MULTIPLY(z4, FIX(1.274162392)); /* c4 */ + 8013cce: f642 01c6 movw r1, #10438 ; 0x28c6 + z1 += ONE << (CONST_BITS-PASS1_BITS-1); + 8013cd2: f504 6480 add.w r4, r4, #1024 ; 0x400 + z2 = MULTIPLY(z4, FIX(1.274162392)); /* c4 */ + 8013cd6: fb01 f702 mul.w r7, r1, r2 + z3 = MULTIPLY(z4, FIX(0.314692123)); /* c12 */ + 8013cda: f640 2112 movw r1, #2578 ; 0xa12 + 8013cde: fb01 fc02 mul.w ip, r1, r2 + z4 = MULTIPLY(z4, FIX(0.881747734)); /* c8 */ + 8013ce2: f641 4137 movw r1, #7223 ; 0x1c37 + tmp10 = z1 + z2; + 8013ce6: 19e6 adds r6, r4, r7 + z4 = MULTIPLY(z4, FIX(0.881747734)); /* c8 */ + 8013ce8: 434a muls r2, r1 + tmp23 = RIGHT_SHIFT(z1 - ((z2 + z3 - z4) << 1), /* c0 = (c4+c12-c8)*2 */ + 8013cea: 4467 add r7, ip + tmp11 = z1 + z3; + 8013cec: eb04 050c add.w r5, r4, ip + z1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + 8013cf0: f9bb c020 ldrsh.w ip, [fp, #32] + tmp23 = RIGHT_SHIFT(z1 - ((z2 + z3 - z4) << 1), /* c0 = (c4+c12-c8)*2 */ + 8013cf4: 1abf subs r7, r7, r2 + tmp12 = z1 - z4; + 8013cf6: 1aa1 subs r1, r4, r2 + tmp23 = RIGHT_SHIFT(z1 - ((z2 + z3 - z4) << 1), /* c0 = (c4+c12-c8)*2 */ + 8013cf8: eba4 0247 sub.w r2, r4, r7, lsl #1 + z2 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + 8013cfc: f8d0 40c0 ldr.w r4, [r0, #192] ; 0xc0 + z3 = MULTIPLY(z1 + z2, FIX(1.105676686)); /* c6 */ + 8013d00: f242 3762 movw r7, #9058 ; 0x2362 + tmp14 = z3 - MULTIPLY(z2, FIX(1.719280954)); /* c6+c10 */ + 8013d04: 48d6 ldr r0, [pc, #856] ; (8014060 ) + tmp23 = RIGHT_SHIFT(z1 - ((z2 + z3 - z4) << 1), /* c0 = (c4+c12-c8)*2 */ + 8013d06: 920a str r2, [sp, #40] ; 0x28 + z1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + 8013d08: 9a00 ldr r2, [sp, #0] + 8013d0a: 6c12 ldr r2, [r2, #64] ; 0x40 + 8013d0c: fb02 fc0c mul.w ip, r2, ip + z2 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + 8013d10: f9bb 2060 ldrsh.w r2, [fp, #96] ; 0x60 + 8013d14: 4362 muls r2, r4 + z3 = MULTIPLY(z1 + z2, FIX(1.105676686)); /* c6 */ + 8013d16: eb0c 0402 add.w r4, ip, r2 + 8013d1a: 437c muls r4, r7 + tmp13 = z3 + MULTIPLY(z1, FIX(0.273079590)); /* c2-c6 */ + 8013d1c: f640 07bd movw r7, #2237 ; 0x8bd + 8013d20: fb07 470c mla r7, r7, ip, r4 + tmp14 = z3 - MULTIPLY(z2, FIX(1.719280954)); /* c6+c10 */ + 8013d24: fb00 4402 mla r4, r0, r2, r4 + MULTIPLY(z2, FIX(1.378756276)); /* c2 */ + 8013d28: f600 20e5 addw r0, r0, #2789 ; 0xae5 + 8013d2c: 4342 muls r2, r0 + tmp20 = tmp10 + tmp13; + 8013d2e: 19f0 adds r0, r6, r7 + 8013d30: 9001 str r0, [sp, #4] + tmp26 = tmp10 - tmp13; + 8013d32: 1bf0 subs r0, r6, r7 + tmp15 = MULTIPLY(z1, FIX(0.613604268)) - /* c10 */ + 8013d34: fb0e 220c mla r2, lr, ip, r2 + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + 8013d38: f9bb 7030 ldrsh.w r7, [fp, #48] ; 0x30 + tmp26 = tmp10 - tmp13; + 8013d3c: 9002 str r0, [sp, #8] + tmp21 = tmp11 + tmp14; + 8013d3e: 1928 adds r0, r5, r4 + z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + 8013d40: f9bb 6050 ldrsh.w r6, [fp, #80] ; 0x50 + tmp21 = tmp11 + tmp14; + 8013d44: 9003 str r0, [sp, #12] + tmp25 = tmp11 - tmp14; + 8013d46: 1b28 subs r0, r5, r4 + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 8013d48: f9bb 4010 ldrsh.w r4, [fp, #16] + tmp12 = MULTIPLY(tmp14, FIX(1.197448846)); /* c5 */ + 8013d4c: f242 6552 movw r5, #9810 ; 0x2652 + tmp25 = tmp11 - tmp14; + 8013d50: 9004 str r0, [sp, #16] + tmp22 = tmp12 + tmp15; + 8013d52: 1888 adds r0, r1, r2 + tmp24 = tmp12 - tmp15; + 8013d54: 1a8a subs r2, r1, r2 + z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + 8013d56: 9900 ldr r1, [sp, #0] + tmp22 = tmp12 + tmp15; + 8013d58: 9005 str r0, [sp, #20] + tmp16 += tmp15; + z1 += z4; + z4 = MULTIPLY(z2 + z3, - FIX(0.158341681)) - tmp13; /* -c13 */ + 8013d5a: f46f 60a2 mvn.w r0, #1296 ; 0x510 + tmp24 = tmp12 - tmp15; + 8013d5e: 9206 str r2, [sp, #24] + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 8013d60: 9a00 ldr r2, [sp, #0] + z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + 8013d62: f8d1 10e0 ldr.w r1, [r1, #224] ; 0xe0 + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 8013d66: 6a12 ldr r2, [r2, #32] + 8013d68: 4354 muls r4, r2 + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + 8013d6a: 9a00 ldr r2, [sp, #0] + 8013d6c: 6e12 ldr r2, [r2, #96] ; 0x60 + 8013d6e: 4357 muls r7, r2 + z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + 8013d70: 9a00 ldr r2, [sp, #0] + 8013d72: f8d2 20a0 ldr.w r2, [r2, #160] ; 0xa0 + tmp11 = MULTIPLY(z1 + z2, FIX(1.334852607)); /* c3 */ + 8013d76: eb04 0c07 add.w ip, r4, r7 + z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + 8013d7a: 4356 muls r6, r2 + z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + 8013d7c: f9bb 2070 ldrsh.w r2, [fp, #112] ; 0x70 + tmp14 = z1 + z3; + 8013d80: eb04 0a06 add.w sl, r4, r6 + z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + 8013d84: 434a muls r2, r1 + tmp11 = MULTIPLY(z1 + z2, FIX(1.334852607)); /* c3 */ + 8013d86: f642 21b7 movw r1, #10935 ; 0x2ab7 + tmp12 = MULTIPLY(tmp14, FIX(1.197448846)); /* c5 */ + 8013d8a: fb05 f50a mul.w r5, r5, sl + tmp11 = MULTIPLY(z1 + z2, FIX(1.334852607)); /* c3 */ + 8013d8e: fb01 fc0c mul.w ip, r1, ip + tmp10 = tmp11 + tmp12 + tmp13 - MULTIPLY(z1, FIX(1.126980169)); /* c3+c5-c1 */ + 8013d92: 49b4 ldr r1, [pc, #720] ; (8014064 ) + 8013d94: eb0c 0e05 add.w lr, ip, r5 + 8013d98: eb0e 3e42 add.w lr, lr, r2, lsl #13 + 8013d9c: fb01 ee04 mla lr, r1, r4, lr + tmp14 = MULTIPLY(tmp14, FIX(0.752406978)); /* c9 */ + 8013da0: f641 0114 movw r1, #6164 ; 0x1814 + 8013da4: fb01 fa0a mul.w sl, r1, sl + tmp16 = tmp14 - MULTIPLY(z1, FIX(1.061150426)); /* c9+c11-c13 */ + 8013da8: 49af ldr r1, [pc, #700] ; (8014068 ) + 8013daa: fb01 a104 mla r1, r1, r4, sl + z1 -= z2; + 8013dae: 1be4 subs r4, r4, r7 + tmp15 = MULTIPLY(z1, FIX(0.467085129)) - tmp13; /* c11 */ + 8013db0: fb08 f804 mul.w r8, r8, r4 + 8013db4: eba8 3842 sub.w r8, r8, r2, lsl #13 + tmp16 += tmp15; + 8013db8: 4441 add r1, r8 + 8013dba: 9107 str r1, [sp, #28] + z4 = MULTIPLY(z2 + z3, - FIX(0.158341681)) - tmp13; /* -c13 */ + 8013dbc: 19b9 adds r1, r7, r6 + 8013dbe: 4341 muls r1, r0 + tmp11 += z4 - MULTIPLY(z2, FIX(0.424103948)); /* c3-c9-c13 */ + 8013dc0: f6a0 0081 subw r0, r0, #2177 ; 0x881 + z4 = MULTIPLY(z2 + z3, - FIX(0.158341681)) - tmp13; /* -c13 */ + 8013dc4: eba1 3142 sub.w r1, r1, r2, lsl #13 + tmp11 += z4 - MULTIPLY(z2, FIX(0.424103948)); /* c3-c9-c13 */ + 8013dc8: fb00 1007 mla r0, r0, r7, r1 + 8013dcc: 4460 add r0, ip + tmp12 += z4 - MULTIPLY(z3, FIX(2.373959773)); /* c3+c5-c13 */ + z4 = MULTIPLY(z3 - z2, FIX(1.405321284)); /* c1 */ + 8013dce: f642 4cf8 movw ip, #11512 ; 0x2cf8 + tmp11 += z4 - MULTIPLY(z2, FIX(0.424103948)); /* c3-c9-c13 */ + 8013dd2: 9008 str r0, [sp, #32] + tmp12 += z4 - MULTIPLY(z3, FIX(2.373959773)); /* c3+c5-c13 */ + 8013dd4: 48a5 ldr r0, [pc, #660] ; (801406c ) + 8013dd6: fb00 1106 mla r1, r0, r6, r1 + tmp14 += z4 + tmp13 - MULTIPLY(z3, FIX(1.6906431334)); /* c1+c9-c11 */ + 8013dda: 48a5 ldr r0, [pc, #660] ; (8014070 ) + tmp12 += z4 - MULTIPLY(z3, FIX(2.373959773)); /* c3+c5-c13 */ + 8013ddc: 4429 add r1, r5 + z4 = MULTIPLY(z3 - z2, FIX(1.405321284)); /* c1 */ + 8013dde: 1bf5 subs r5, r6, r7 + 8013de0: fb0c f505 mul.w r5, ip, r5 + tmp14 += z4 + tmp13 - MULTIPLY(z3, FIX(1.6906431334)); /* c1+c9-c11 */ + 8013de4: eb05 3c42 add.w ip, r5, r2, lsl #13 + z1 += z4; + 8013de8: 4422 add r2, r4 + tmp14 += z4 + tmp13 - MULTIPLY(z3, FIX(1.6906431334)); /* c1+c9-c11 */ + 8013dea: fb00 cc06 mla ip, r0, r6, ip + + tmp13 = (z1 - z3) << PASS1_BITS; + + /* Final output stage */ + + wsptr[8*0] = (int) RIGHT_SHIFT(tmp20 + tmp10, CONST_BITS-PASS1_BITS); + 8013dee: 9801 ldr r0, [sp, #4] + tmp13 = (z1 - z3) << PASS1_BITS; + 8013df0: 1b92 subs r2, r2, r6 + wsptr[8*0] = (int) RIGHT_SHIFT(tmp20 + tmp10, CONST_BITS-PASS1_BITS); + 8013df2: eb00 040e add.w r4, r0, lr + tmp14 += z4 + tmp13 - MULTIPLY(z3, FIX(1.6906431334)); /* c1+c9-c11 */ + 8013df6: 44d4 add ip, sl + tmp13 = (z1 - z3) << PASS1_BITS; + 8013df8: 0092 lsls r2, r2, #2 + tmp15 += z4 + MULTIPLY(z2, FIX(0.674957567)); /* c1+c11-c5 */ + 8013dfa: f241 5a99 movw sl, #5529 ; 0x1599 + wsptr[8*0] = (int) RIGHT_SHIFT(tmp20 + tmp10, CONST_BITS-PASS1_BITS); + 8013dfe: 12e4 asrs r4, r4, #11 + tmp15 += z4 + MULTIPLY(z2, FIX(0.674957567)); /* c1+c11-c5 */ + 8013e00: fb0a 5507 mla r5, sl, r7, r5 + wsptr[8*0] = (int) RIGHT_SHIFT(tmp20 + tmp10, CONST_BITS-PASS1_BITS); + 8013e04: f843 4c04 str.w r4, [r3, #-4] + wsptr[8*13] = (int) RIGHT_SHIFT(tmp20 - tmp10, CONST_BITS-PASS1_BITS); + 8013e08: eba0 040e sub.w r4, r0, lr + wsptr[8*1] = (int) RIGHT_SHIFT(tmp21 + tmp11, CONST_BITS-PASS1_BITS); + 8013e0c: 9803 ldr r0, [sp, #12] + tmp15 += z4 + MULTIPLY(z2, FIX(0.674957567)); /* c1+c11-c5 */ + 8013e0e: 4445 add r5, r8 + wsptr[8*13] = (int) RIGHT_SHIFT(tmp20 - tmp10, CONST_BITS-PASS1_BITS); + 8013e10: 12e4 asrs r4, r4, #11 + 8013e12: f8c3 419c str.w r4, [r3, #412] ; 0x19c + wsptr[8*1] = (int) RIGHT_SHIFT(tmp21 + tmp11, CONST_BITS-PASS1_BITS); + 8013e16: 9c08 ldr r4, [sp, #32] + 8013e18: 1904 adds r4, r0, r4 + 8013e1a: 12e4 asrs r4, r4, #11 + 8013e1c: 61dc str r4, [r3, #28] + wsptr[8*12] = (int) RIGHT_SHIFT(tmp21 - tmp11, CONST_BITS-PASS1_BITS); + 8013e1e: 9c08 ldr r4, [sp, #32] + 8013e20: 1b04 subs r4, r0, r4 + wsptr[8*2] = (int) RIGHT_SHIFT(tmp22 + tmp12, CONST_BITS-PASS1_BITS); + 8013e22: 9805 ldr r0, [sp, #20] + wsptr[8*12] = (int) RIGHT_SHIFT(tmp21 - tmp11, CONST_BITS-PASS1_BITS); + 8013e24: 12e4 asrs r4, r4, #11 + 8013e26: f8c3 417c str.w r4, [r3, #380] ; 0x17c + wsptr[8*2] = (int) RIGHT_SHIFT(tmp22 + tmp12, CONST_BITS-PASS1_BITS); + 8013e2a: 1844 adds r4, r0, r1 + wsptr[8*11] = (int) RIGHT_SHIFT(tmp22 - tmp12, CONST_BITS-PASS1_BITS); + 8013e2c: 1a41 subs r1, r0, r1 + wsptr[8*2] = (int) RIGHT_SHIFT(tmp22 + tmp12, CONST_BITS-PASS1_BITS); + 8013e2e: 12e4 asrs r4, r4, #11 + wsptr[8*11] = (int) RIGHT_SHIFT(tmp22 - tmp12, CONST_BITS-PASS1_BITS); + 8013e30: 12c9 asrs r1, r1, #11 + wsptr[8*2] = (int) RIGHT_SHIFT(tmp22 + tmp12, CONST_BITS-PASS1_BITS); + 8013e32: 63dc str r4, [r3, #60] ; 0x3c + wsptr[8*11] = (int) RIGHT_SHIFT(tmp22 - tmp12, CONST_BITS-PASS1_BITS); + 8013e34: f8c3 115c str.w r1, [r3, #348] ; 0x15c + wsptr[8*3] = (int) (tmp23 + tmp13); + 8013e38: 990a ldr r1, [sp, #40] ; 0x28 + 8013e3a: eb02 21e1 add.w r1, r2, r1, asr #11 + 8013e3e: 65d9 str r1, [r3, #92] ; 0x5c + wsptr[8*10] = (int) (tmp23 - tmp13); + 8013e40: 990a ldr r1, [sp, #40] ; 0x28 + 8013e42: ebc2 22e1 rsb r2, r2, r1, asr #11 + wsptr[8*4] = (int) RIGHT_SHIFT(tmp24 + tmp14, CONST_BITS-PASS1_BITS); + wsptr[8*9] = (int) RIGHT_SHIFT(tmp24 - tmp14, CONST_BITS-PASS1_BITS); + wsptr[8*5] = (int) RIGHT_SHIFT(tmp25 + tmp15, CONST_BITS-PASS1_BITS); + wsptr[8*8] = (int) RIGHT_SHIFT(tmp25 - tmp15, CONST_BITS-PASS1_BITS); + wsptr[8*6] = (int) RIGHT_SHIFT(tmp26 + tmp16, CONST_BITS-PASS1_BITS); + 8013e46: 9907 ldr r1, [sp, #28] + wsptr[8*10] = (int) (tmp23 - tmp13); + 8013e48: f8c3 213c str.w r2, [r3, #316] ; 0x13c + wsptr[8*4] = (int) RIGHT_SHIFT(tmp24 + tmp14, CONST_BITS-PASS1_BITS); + 8013e4c: 9a06 ldr r2, [sp, #24] + 8013e4e: 4462 add r2, ip + 8013e50: 12d2 asrs r2, r2, #11 + 8013e52: 67da str r2, [r3, #124] ; 0x7c + wsptr[8*9] = (int) RIGHT_SHIFT(tmp24 - tmp14, CONST_BITS-PASS1_BITS); + 8013e54: 9a06 ldr r2, [sp, #24] + 8013e56: eba2 020c sub.w r2, r2, ip + 8013e5a: 12d2 asrs r2, r2, #11 + 8013e5c: f8c3 211c str.w r2, [r3, #284] ; 0x11c + wsptr[8*5] = (int) RIGHT_SHIFT(tmp25 + tmp15, CONST_BITS-PASS1_BITS); + 8013e60: 9a04 ldr r2, [sp, #16] + 8013e62: 442a add r2, r5 + 8013e64: 12d2 asrs r2, r2, #11 + 8013e66: f8c3 209c str.w r2, [r3, #156] ; 0x9c + wsptr[8*8] = (int) RIGHT_SHIFT(tmp25 - tmp15, CONST_BITS-PASS1_BITS); + 8013e6a: 9a04 ldr r2, [sp, #16] + 8013e6c: 1b52 subs r2, r2, r5 + 8013e6e: 12d2 asrs r2, r2, #11 + 8013e70: f8c3 20fc str.w r2, [r3, #252] ; 0xfc + wsptr[8*6] = (int) RIGHT_SHIFT(tmp26 + tmp16, CONST_BITS-PASS1_BITS); + 8013e74: 9a02 ldr r2, [sp, #8] + 8013e76: 440a add r2, r1 + 8013e78: 12d2 asrs r2, r2, #11 + 8013e7a: f8c3 20bc str.w r2, [r3, #188] ; 0xbc + wsptr[8*7] = (int) RIGHT_SHIFT(tmp26 - tmp16, CONST_BITS-PASS1_BITS); + 8013e7e: 9a02 ldr r2, [sp, #8] + 8013e80: 1a52 subs r2, r2, r1 + 8013e82: 12d2 asrs r2, r2, #11 + 8013e84: f8c3 20dc str.w r2, [r3, #220] ; 0xdc + for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) { + 8013e88: 9a0b ldr r2, [sp, #44] ; 0x2c + 8013e8a: 455a cmp r2, fp + 8013e8c: f47f af0b bne.w 8013ca6 + 8013e90: 9b09 ldr r3, [sp, #36] ; 0x24 + } + + /* Pass 2: process 14 rows from work array, store into output array. */ + + wsptr = workspace; + 8013e92: a80c add r0, sp, #48 ; 0x30 + 8013e94: 3b04 subs r3, #4 + 8013e96: 9300 str r3, [sp, #0] + 8013e98: 9b09 ldr r3, [sp, #36] ; 0x24 + 8013e9a: 3334 adds r3, #52 ; 0x34 + 8013e9c: 930b str r3, [sp, #44] ; 0x2c + for (ctr = 0; ctr < 14; ctr++) { + outptr = output_buf[ctr] + output_col; + 8013e9e: 9b00 ldr r3, [sp, #0] + /* Add fudge factor here for final descale. */ + z1 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + z1 <<= CONST_BITS; + z4 = (INT32) wsptr[4]; + z2 = MULTIPLY(z4, FIX(1.274162392)); /* c4 */ + z3 = MULTIPLY(z4, FIX(0.314692123)); /* c12 */ + 8013ea0: f640 2412 movw r4, #2578 ; 0xa12 + z4 = (INT32) wsptr[4]; + 8013ea4: 6906 ldr r6, [r0, #16] + + z3 = MULTIPLY(z1 + z2, FIX(1.105676686)); /* c6 */ + + tmp13 = z3 + MULTIPLY(z1, FIX(0.273079590)); /* c2-c6 */ + tmp14 = z3 - MULTIPLY(z2, FIX(1.719280954)); /* c6+c10 */ + tmp15 = MULTIPLY(z1, FIX(0.613604268)) - /* c10 */ + 8013ea6: f241 3ea3 movw lr, #5027 ; 0x13a3 + outptr = output_buf[ctr] + output_col; + 8013eaa: f853 2f04 ldr.w r2, [r3, #4]! + tmp14 = MULTIPLY(tmp14, FIX(0.752406978)); /* c9 */ + tmp16 = tmp14 - MULTIPLY(z1, FIX(1.061150426)); /* c9+c11-c13 */ + z1 -= z2; + tmp15 = MULTIPLY(z1, FIX(0.467085129)) - z4; /* c11 */ + tmp16 += tmp15; + tmp13 = MULTIPLY(z2 + z3, - FIX(0.158341681)) - z4; /* -c13 */ + 8013eae: f46f 6aa2 mvn.w sl, #1296 ; 0x510 + z1 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + 8013eb2: 6801 ldr r1, [r0, #0] + z3 = MULTIPLY(z4, FIX(0.314692123)); /* c12 */ + 8013eb4: fb04 f706 mul.w r7, r4, r6 + outptr = output_buf[ctr] + output_col; + 8013eb8: 920a str r2, [sp, #40] ; 0x28 + z4 = MULTIPLY(z4, FIX(0.881747734)); /* c8 */ + 8013eba: f641 4437 movw r4, #7223 ; 0x1c37 + outptr = output_buf[ctr] + output_col; + 8013ebe: 9300 str r3, [sp, #0] + 8013ec0: 4613 mov r3, r2 + 8013ec2: 9a86 ldr r2, [sp, #536] ; 0x218 + z1 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + 8013ec4: 3110 adds r1, #16 + & RANGE_MASK]; + outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp26 - tmp16, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + + wsptr += 8; /* advance pointer to next row */ + 8013ec6: 3020 adds r0, #32 + outptr = output_buf[ctr] + output_col; + 8013ec8: 189a adds r2, r3, r2 + z2 = MULTIPLY(z4, FIX(1.274162392)); /* c4 */ + 8013eca: f642 03c6 movw r3, #10438 ; 0x28c6 + tmp11 = z1 + z3; + 8013ece: eb07 3541 add.w r5, r7, r1, lsl #13 + z2 = MULTIPLY(z4, FIX(1.274162392)); /* c4 */ + 8013ed2: 4373 muls r3, r6 + z4 = MULTIPLY(z4, FIX(0.881747734)); /* c8 */ + 8013ed4: 4366 muls r6, r4 + tmp14 = z3 - MULTIPLY(z2, FIX(1.719280954)); /* c6+c10 */ + 8013ed6: 4c62 ldr r4, [pc, #392] ; (8014060 ) + tmp10 = z1 + z2; + 8013ed8: eb03 3c41 add.w ip, r3, r1, lsl #13 + tmp23 = z1 - ((z2 + z3 - z4) << 1); /* c0 = (c4+c12-c8)*2 */ + 8013edc: 443b add r3, r7 + tmp12 = z1 - z4; + 8013ede: ebc6 3841 rsb r8, r6, r1, lsl #13 + z3 = MULTIPLY(z1 + z2, FIX(1.105676686)); /* c6 */ + 8013ee2: f242 3762 movw r7, #9058 ; 0x2362 + tmp23 = z1 - ((z2 + z3 - z4) << 1); /* c0 = (c4+c12-c8)*2 */ + 8013ee6: 1b9b subs r3, r3, r6 + z1 = (INT32) wsptr[2]; + 8013ee8: f850 6c18 ldr.w r6, [r0, #-24] + tmp23 = z1 - ((z2 + z3 - z4) << 1); /* c0 = (c4+c12-c8)*2 */ + 8013eec: 005b lsls r3, r3, #1 + 8013eee: ebc3 3341 rsb r3, r3, r1, lsl #13 + 8013ef2: 9301 str r3, [sp, #4] + z2 = (INT32) wsptr[6]; + 8013ef4: f850 3c08 ldr.w r3, [r0, #-8] + z3 = MULTIPLY(z1 + z2, FIX(1.105676686)); /* c6 */ + 8013ef8: 18f1 adds r1, r6, r3 + 8013efa: 4379 muls r1, r7 + tmp13 = z3 + MULTIPLY(z1, FIX(0.273079590)); /* c2-c6 */ + 8013efc: f640 07bd movw r7, #2237 ; 0x8bd + 8013f00: fb07 1706 mla r7, r7, r6, r1 + tmp14 = z3 - MULTIPLY(z2, FIX(1.719280954)); /* c6+c10 */ + 8013f04: fb04 1103 mla r1, r4, r3, r1 + MULTIPLY(z2, FIX(1.378756276)); /* c2 */ + 8013f08: f604 24e5 addw r4, r4, #2789 ; 0xae5 + 8013f0c: 4363 muls r3, r4 + tmp20 = tmp10 + tmp13; + 8013f0e: eb0c 0407 add.w r4, ip, r7 + 8013f12: 9402 str r4, [sp, #8] + tmp26 = tmp10 - tmp13; + 8013f14: ebac 0407 sub.w r4, ip, r7 + tmp15 = MULTIPLY(z1, FIX(0.613604268)) - /* c10 */ + 8013f18: fb0e 3306 mla r3, lr, r6, r3 + z3 = (INT32) wsptr[5]; + 8013f1c: f850 cc0c ldr.w ip, [r0, #-12] + tmp26 = tmp10 - tmp13; + 8013f20: 9403 str r4, [sp, #12] + tmp21 = tmp11 + tmp14; + 8013f22: 186c adds r4, r5, r1 + tmp25 = tmp11 - tmp14; + 8013f24: 1a69 subs r1, r5, r1 + z4 = (INT32) wsptr[7]; + 8013f26: f850 6c04 ldr.w r6, [r0, #-4] + tmp21 = tmp11 + tmp14; + 8013f2a: 9404 str r4, [sp, #16] + tmp12 = MULTIPLY(tmp14, FIX(1.197448846)); /* c5 */ + 8013f2c: f242 6452 movw r4, #9810 ; 0x2652 + tmp25 = tmp11 - tmp14; + 8013f30: 9105 str r1, [sp, #20] + tmp22 = tmp12 + tmp15; + 8013f32: eb08 0103 add.w r1, r8, r3 + tmp24 = tmp12 - tmp15; + 8013f36: eba8 0303 sub.w r3, r8, r3 + z2 = (INT32) wsptr[3]; + 8013f3a: f850 8c14 ldr.w r8, [r0, #-20] + tmp22 = tmp12 + tmp15; + 8013f3e: 9106 str r1, [sp, #24] + tmp11 = MULTIPLY(z1 + z2, FIX(1.334852607)); /* c3 */ + 8013f40: f642 21b7 movw r1, #10935 ; 0x2ab7 + tmp24 = tmp12 - tmp15; + 8013f44: 9307 str r3, [sp, #28] + tmp15 = MULTIPLY(z1, FIX(0.467085129)) - z4; /* c11 */ + 8013f46: f640 6ef2 movw lr, #3826 ; 0xef2 + z1 = (INT32) wsptr[1]; + 8013f4a: f850 3c1c ldr.w r3, [r0, #-28] + tmp14 = z1 + z3; + 8013f4e: eb03 0b0c add.w fp, r3, ip + tmp11 = MULTIPLY(z1 + z2, FIX(1.334852607)); /* c3 */ + 8013f52: eb03 0508 add.w r5, r3, r8 + tmp12 = MULTIPLY(tmp14, FIX(1.197448846)); /* c5 */ + 8013f56: fb04 f40b mul.w r4, r4, fp + tmp11 = MULTIPLY(z1 + z2, FIX(1.334852607)); /* c3 */ + 8013f5a: 434d muls r5, r1 + tmp10 = tmp11 + tmp12 + z4 - MULTIPLY(z1, FIX(1.126980169)); /* c3+c5-c1 */ + 8013f5c: 4941 ldr r1, [pc, #260] ; (8014064 ) + 8013f5e: 192f adds r7, r5, r4 + 8013f60: eb07 3746 add.w r7, r7, r6, lsl #13 + 8013f64: fb01 7703 mla r7, r1, r3, r7 + tmp14 = MULTIPLY(tmp14, FIX(0.752406978)); /* c9 */ + 8013f68: f641 0114 movw r1, #6164 ; 0x1814 + 8013f6c: fb01 fb0b mul.w fp, r1, fp + tmp16 = tmp14 - MULTIPLY(z1, FIX(1.061150426)); /* c9+c11-c13 */ + 8013f70: 493d ldr r1, [pc, #244] ; (8014068 ) + 8013f72: fb01 b103 mla r1, r1, r3, fp + z1 -= z2; + 8013f76: eba3 0308 sub.w r3, r3, r8 + tmp15 = MULTIPLY(z1, FIX(0.467085129)) - z4; /* c11 */ + 8013f7a: fb0e fe03 mul.w lr, lr, r3 + z1 -= z2; + 8013f7e: 9308 str r3, [sp, #32] + tmp15 = MULTIPLY(z1, FIX(0.467085129)) - z4; /* c11 */ + 8013f80: ebae 3e46 sub.w lr, lr, r6, lsl #13 + tmp11 += tmp13 - MULTIPLY(z2, FIX(0.424103948)); /* c3-c9-c13 */ + 8013f84: 4b3b ldr r3, [pc, #236] ; (8014074 ) + tmp16 += tmp15; + 8013f86: 4471 add r1, lr + 8013f88: 9109 str r1, [sp, #36] ; 0x24 + tmp13 = MULTIPLY(z2 + z3, - FIX(0.158341681)) - z4; /* -c13 */ + 8013f8a: eb08 010c add.w r1, r8, ip + 8013f8e: fb0a f101 mul.w r1, sl, r1 + 8013f92: eba1 3146 sub.w r1, r1, r6, lsl #13 + tmp11 += tmp13 - MULTIPLY(z2, FIX(0.424103948)); /* c3-c9-c13 */ + 8013f96: fb03 1a08 mla sl, r3, r8, r1 + tmp12 += tmp13 - MULTIPLY(z3, FIX(2.373959773)); /* c3+c5-c13 */ + 8013f9a: 4b34 ldr r3, [pc, #208] ; (801406c ) + 8013f9c: fb03 110c mla r1, r3, ip, r1 + tmp11 += tmp13 - MULTIPLY(z2, FIX(0.424103948)); /* c3-c9-c13 */ + 8013fa0: 44aa add sl, r5 + tmp13 = MULTIPLY(z3 - z2, FIX(1.405321284)); /* c1 */ + 8013fa2: f642 45f8 movw r5, #11512 ; 0x2cf8 + tmp14 += tmp13 + z4 - MULTIPLY(z3, FIX(1.6906431334)); /* c1+c9-c11 */ + 8013fa6: 4b32 ldr r3, [pc, #200] ; (8014070 ) + tmp12 += tmp13 - MULTIPLY(z3, FIX(2.373959773)); /* c3+c5-c13 */ + 8013fa8: 4421 add r1, r4 + tmp13 = MULTIPLY(z3 - z2, FIX(1.405321284)); /* c1 */ + 8013faa: ebac 0408 sub.w r4, ip, r8 + 8013fae: 436c muls r4, r5 + tmp14 += tmp13 + z4 - MULTIPLY(z3, FIX(1.6906431334)); /* c1+c9-c11 */ + 8013fb0: eb04 3546 add.w r5, r4, r6, lsl #13 + 8013fb4: fb03 550c mla r5, r3, ip, r5 + tmp13 = ((z1 - z3) << CONST_BITS) + z4; + 8013fb8: 9b08 ldr r3, [sp, #32] + tmp14 += tmp13 + z4 - MULTIPLY(z3, FIX(1.6906431334)); /* c1+c9-c11 */ + 8013fba: 445d add r5, fp + tmp13 = ((z1 - z3) << CONST_BITS) + z4; + 8013fbc: eba3 030c sub.w r3, r3, ip + tmp15 += tmp13 + MULTIPLY(z2, FIX(0.674957567)); /* c1+c11-c5 */ + 8013fc0: f241 5b99 movw fp, #5529 ; 0x1599 + tmp13 = ((z1 - z3) << CONST_BITS) + z4; + 8013fc4: 035b lsls r3, r3, #13 + tmp15 += tmp13 + MULTIPLY(z2, FIX(0.674957567)); /* c1+c11-c5 */ + 8013fc6: fb0b 4408 mla r4, fp, r8, r4 + 8013fca: 4474 add r4, lr + tmp13 = ((z1 - z3) << CONST_BITS) + z4; + 8013fcc: eb03 3e46 add.w lr, r3, r6, lsl #13 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp10, + 8013fd0: 9e02 ldr r6, [sp, #8] + 8013fd2: 9b86 ldr r3, [sp, #536] ; 0x218 + 8013fd4: eb06 0c07 add.w ip, r6, r7 + 8013fd8: 9e0a ldr r6, [sp, #40] ; 0x28 + & RANGE_MASK]; + 8013fda: f3cc 4c89 ubfx ip, ip, #18, #10 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp10, + 8013fde: f819 c00c ldrb.w ip, [r9, ip] + 8013fe2: f806 c003 strb.w ip, [r6, r3] + outptr[13] = range_limit[(int) RIGHT_SHIFT(tmp20 - tmp10, + 8013fe6: 9b02 ldr r3, [sp, #8] + 8013fe8: 1bde subs r6, r3, r7 + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp11, + 8013fea: 9b04 ldr r3, [sp, #16] + & RANGE_MASK]; + 8013fec: f3c6 4689 ubfx r6, r6, #18, #10 + outptr[13] = range_limit[(int) RIGHT_SHIFT(tmp20 - tmp10, + 8013ff0: f819 6006 ldrb.w r6, [r9, r6] + 8013ff4: 7356 strb r6, [r2, #13] + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp11, + 8013ff6: eb03 060a add.w r6, r3, sl + & RANGE_MASK]; + 8013ffa: f3c6 4689 ubfx r6, r6, #18, #10 + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp11, + 8013ffe: f819 6006 ldrb.w r6, [r9, r6] + 8014002: 7056 strb r6, [r2, #1] + outptr[12] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp11, + 8014004: eba3 060a sub.w r6, r3, sl + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp12, + 8014008: 9b06 ldr r3, [sp, #24] + & RANGE_MASK]; + 801400a: f3c6 4689 ubfx r6, r6, #18, #10 + outptr[12] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp11, + 801400e: f819 6006 ldrb.w r6, [r9, r6] + 8014012: 7316 strb r6, [r2, #12] + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp12, + 8014014: 185e adds r6, r3, r1 + outptr[11] = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp12, + 8014016: 1a59 subs r1, r3, r1 + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp23 + tmp13, + 8014018: 9b01 ldr r3, [sp, #4] + & RANGE_MASK]; + 801401a: f3c6 4689 ubfx r6, r6, #18, #10 + & RANGE_MASK]; + 801401e: f3c1 4189 ubfx r1, r1, #18, #10 + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp12, + 8014022: f819 6006 ldrb.w r6, [r9, r6] + 8014026: 7096 strb r6, [r2, #2] + outptr[11] = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp12, + 8014028: f819 1001 ldrb.w r1, [r9, r1] + 801402c: 72d1 strb r1, [r2, #11] + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp23 + tmp13, + 801402e: eb03 010e add.w r1, r3, lr + outptr[10] = range_limit[(int) RIGHT_SHIFT(tmp23 - tmp13, + 8014032: eba3 030e sub.w r3, r3, lr + & RANGE_MASK]; + 8014036: f3c1 4189 ubfx r1, r1, #18, #10 + & RANGE_MASK]; + 801403a: f3c3 4389 ubfx r3, r3, #18, #10 + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp23 + tmp13, + 801403e: f819 1001 ldrb.w r1, [r9, r1] + 8014042: 70d1 strb r1, [r2, #3] + outptr[10] = range_limit[(int) RIGHT_SHIFT(tmp23 - tmp13, + 8014044: f819 3003 ldrb.w r3, [r9, r3] + outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp26 + tmp16, + 8014048: 9909 ldr r1, [sp, #36] ; 0x24 + outptr[10] = range_limit[(int) RIGHT_SHIFT(tmp23 - tmp13, + 801404a: 7293 strb r3, [r2, #10] + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp24 + tmp14, + 801404c: 9b07 ldr r3, [sp, #28] + 801404e: 442b add r3, r5 + & RANGE_MASK]; + 8014050: f3c3 4389 ubfx r3, r3, #18, #10 + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp24 + tmp14, + 8014054: f819 3003 ldrb.w r3, [r9, r3] + 8014058: 7113 strb r3, [r2, #4] + outptr[9] = range_limit[(int) RIGHT_SHIFT(tmp24 - tmp14, + 801405a: 9b07 ldr r3, [sp, #28] + 801405c: 1b5b subs r3, r3, r5 + 801405e: e00b b.n 8014078 + 8014060: ffffc8fc .word 0xffffc8fc + 8014064: ffffdbf0 .word 0xffffdbf0 + 8014068: ffffde0b .word 0xffffde0b + 801406c: ffffb409 .word 0xffffb409 + 8014070: ffffc9e6 .word 0xffffc9e6 + 8014074: fffff26e .word 0xfffff26e + & RANGE_MASK]; + 8014078: f3c3 4389 ubfx r3, r3, #18, #10 + outptr[9] = range_limit[(int) RIGHT_SHIFT(tmp24 - tmp14, + 801407c: f819 3003 ldrb.w r3, [r9, r3] + 8014080: 7253 strb r3, [r2, #9] + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp25 + tmp15, + 8014082: 9b05 ldr r3, [sp, #20] + 8014084: 4423 add r3, r4 + & RANGE_MASK]; + 8014086: f3c3 4389 ubfx r3, r3, #18, #10 + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp25 + tmp15, + 801408a: f819 3003 ldrb.w r3, [r9, r3] + 801408e: 7153 strb r3, [r2, #5] + outptr[8] = range_limit[(int) RIGHT_SHIFT(tmp25 - tmp15, + 8014090: 9b05 ldr r3, [sp, #20] + 8014092: 1b1b subs r3, r3, r4 + & RANGE_MASK]; + 8014094: f3c3 4389 ubfx r3, r3, #18, #10 + outptr[8] = range_limit[(int) RIGHT_SHIFT(tmp25 - tmp15, + 8014098: f819 3003 ldrb.w r3, [r9, r3] + 801409c: 7213 strb r3, [r2, #8] + outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp26 + tmp16, + 801409e: 9b03 ldr r3, [sp, #12] + 80140a0: 440b add r3, r1 + & RANGE_MASK]; + 80140a2: f3c3 4389 ubfx r3, r3, #18, #10 + outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp26 + tmp16, + 80140a6: f819 3003 ldrb.w r3, [r9, r3] + 80140aa: 7193 strb r3, [r2, #6] + outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp26 - tmp16, + 80140ac: 9b03 ldr r3, [sp, #12] + 80140ae: 1a5b subs r3, r3, r1 + & RANGE_MASK]; + 80140b0: f3c3 4389 ubfx r3, r3, #18, #10 + outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp26 - tmp16, + 80140b4: f819 3003 ldrb.w r3, [r9, r3] + 80140b8: 71d3 strb r3, [r2, #7] + for (ctr = 0; ctr < 14; ctr++) { + 80140ba: 9b0b ldr r3, [sp, #44] ; 0x2c + 80140bc: 9a00 ldr r2, [sp, #0] + 80140be: 4293 cmp r3, r2 + 80140c0: f47f aeed bne.w 8013e9e + } +} + 80140c4: b07d add sp, #500 ; 0x1f4 + 80140c6: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 80140ca: bf00 nop + +080140cc : + +GLOBAL(void) +jpeg_idct_15x15 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + 80140cc: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 80140d0: f5ad 7d07 sub.w sp, sp, #540 ; 0x21c + 80140d4: f1a2 0a02 sub.w sl, r2, #2 + 80140d8: 930c str r3, [sp, #48] ; 0x30 + INT32 z1, z2, z3, z4; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + int * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + 80140da: f8d0 314c ldr.w r3, [r0, #332] ; 0x14c + 80140de: 6d48 ldr r0, [r1, #84] ; 0x54 + 80140e0: f103 0980 add.w r9, r3, #128 ; 0x80 + /* Pass 1: process columns from input, store into work array. */ + + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) { + 80140e4: 1f03 subs r3, r0, #4 + 80140e6: 9300 str r3, [sp, #0] + 80140e8: f102 030e add.w r3, r2, #14 + 80140ec: 930d str r3, [sp, #52] ; 0x34 + wsptr = workspace; + 80140ee: ab0e add r3, sp, #56 ; 0x38 + /* Even part */ + + z1 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 80140f0: 9900 ldr r1, [sp, #0] + + z4 = z2 - z3; + z3 += z2; + tmp10 = MULTIPLY(z3, FIX(1.337628990)); /* (c2+c4)/2 */ + tmp11 = MULTIPLY(z4, FIX(0.045680613)); /* (c2-c4)/2 */ + z2 = MULTIPLY(z2, FIX(1.439773946)); /* c4+c14 */ + 80140f2: f642 6e13 movw lr, #11795 ; 0x2e13 + z1 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 80140f6: f93a 5f02 ldrsh.w r5, [sl, #2]! + tmp12 = z3 + MULTIPLY(z2, FIX(1.406466353)); /* c1 */ + + tmp10 = tmp12 + MULTIPLY(z4, FIX(2.457431844)) - tmp15; /* c1+c7 */ + tmp16 = tmp12 - MULTIPLY(z1, FIX(1.112434820)) + tmp13; /* c1-c13 */ + tmp12 = MULTIPLY(z2, FIX(1.224744871)) - z3; /* c5 */ + z2 = MULTIPLY(z1 + z4, FIX(0.575212477)); /* c11 */ + 80140fa: f241 2b68 movw fp, #4712 ; 0x1268 + z1 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 80140fe: f851 2f04 ldr.w r2, [r1, #4]! + tmp10 = tmp12 + MULTIPLY(z4, FIX(2.457431844)) - tmp15; /* c1+c7 */ + 8014102: f644 68a3 movw r8, #20131 ; 0x4ea3 + z4 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + 8014106: f9ba 6060 ldrsh.w r6, [sl, #96] ; 0x60 + for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) { + 801410a: 3304 adds r3, #4 + z1 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 801410c: 9100 str r1, [sp, #0] + 801410e: 4355 muls r5, r2 + z2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + 8014110: 9a00 ldr r2, [sp, #0] + z3 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + 8014112: 9800 ldr r0, [sp, #0] + z2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + 8014114: 6c12 ldr r2, [r2, #64] ; 0x40 + z1 <<= CONST_BITS; + 8014116: 036d lsls r5, r5, #13 + z2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + 8014118: f9ba 1020 ldrsh.w r1, [sl, #32] + z3 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + 801411c: f8d0 4080 ldr.w r4, [r0, #128] ; 0x80 + z1 += ONE << (CONST_BITS-PASS1_BITS-1); + 8014120: f505 6580 add.w r5, r5, #1024 ; 0x400 + z2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + 8014124: 4351 muls r1, r2 + z3 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + 8014126: f9ba 2040 ldrsh.w r2, [sl, #64] ; 0x40 + 801412a: 4362 muls r2, r4 + z4 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + 801412c: f8d0 40c0 ldr.w r4, [r0, #192] ; 0xc0 + tmp10 = MULTIPLY(z4, FIX(0.437016024)); /* c12 */ + 8014130: f640 50fc movw r0, #3580 ; 0xdfc + z4 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + 8014134: 4374 muls r4, r6 + tmp11 = MULTIPLY(z4, FIX(1.144122806)); /* c6 */ + 8014136: f242 469d movw r6, #9373 ; 0x249d + tmp10 = MULTIPLY(z4, FIX(0.437016024)); /* c12 */ + 801413a: fb00 fc04 mul.w ip, r0, r4 + tmp10 = MULTIPLY(z3, FIX(1.337628990)); /* (c2+c4)/2 */ + 801413e: f642 20ce movw r0, #10958 ; 0x2ace + tmp11 = MULTIPLY(z4, FIX(1.144122806)); /* c6 */ + 8014142: 4374 muls r4, r6 + tmp12 = z1 - tmp10; + 8014144: eba5 070c sub.w r7, r5, ip + tmp13 = z1 + tmp11; + 8014148: 192e adds r6, r5, r4 + z1 -= (tmp11 - tmp10) << 1; /* c0 = (c6-c12)*2 */ + 801414a: eba4 040c sub.w r4, r4, ip + 801414e: eba5 0444 sub.w r4, r5, r4, lsl #1 + z4 = z2 - z3; + 8014152: 1a8d subs r5, r1, r2 + z3 += z2; + 8014154: 440a add r2, r1 + z2 = MULTIPLY(z2, FIX(1.439773946)); /* c4+c14 */ + 8014156: fb0e f101 mul.w r1, lr, r1 + z1 -= (tmp11 - tmp10) << 1; /* c0 = (c6-c12)*2 */ + 801415a: 9401 str r4, [sp, #4] + tmp10 = MULTIPLY(z3, FIX(1.337628990)); /* (c2+c4)/2 */ + 801415c: fb00 f402 mul.w r4, r0, r2 + tmp11 = MULTIPLY(z4, FIX(0.045680613)); /* (c2-c4)/2 */ + 8014160: f44f 70bb mov.w r0, #374 ; 0x176 + tmp20 = tmp13 + tmp10 + tmp11; + 8014164: eb06 0e04 add.w lr, r6, r4 + tmp11 = MULTIPLY(z4, FIX(0.045680613)); /* (c2-c4)/2 */ + 8014168: fb00 fc05 mul.w ip, r0, r5 + tmp23 = tmp12 - tmp10 + tmp11 + z2; + 801416c: 1b3c subs r4, r7, r4 + tmp20 = tmp13 + tmp10 + tmp11; + 801416e: eb0e 000c add.w r0, lr, ip + tmp23 = tmp12 - tmp10 + tmp11 + z2; + 8014172: 4464 add r4, ip + tmp11 = MULTIPLY(z4, FIX(0.399234004)); /* (c8-c14)/2 */ + 8014174: f640 4cc7 movw ip, #3271 ; 0xcc7 + tmp20 = tmp13 + tmp10 + tmp11; + 8014178: 9002 str r0, [sp, #8] + tmp23 = tmp12 - tmp10 + tmp11 + z2; + 801417a: 1860 adds r0, r4, r1 + tmp10 = MULTIPLY(z3, FIX(0.547059574)); /* (c8+c14)/2 */ + 801417c: f241 1482 movw r4, #4482 ; 0x1182 + tmp11 = MULTIPLY(z4, FIX(0.399234004)); /* (c8-c14)/2 */ + 8014180: fb0c fc05 mul.w ip, ip, r5 + tmp10 = MULTIPLY(z3, FIX(0.547059574)); /* (c8+c14)/2 */ + 8014184: 4354 muls r4, r2 + tmp23 = tmp12 - tmp10 + tmp11 + z2; + 8014186: 9003 str r0, [sp, #12] + tmp25 = tmp13 - tmp10 - tmp11; + 8014188: eba6 0e04 sub.w lr, r6, r4 + tmp26 = tmp12 + tmp10 - tmp11 - z2; + 801418c: 443c add r4, r7 + 801418e: eba4 040c sub.w r4, r4, ip + tmp25 = tmp13 - tmp10 - tmp11; + 8014192: ebae 000c sub.w r0, lr, ip + tmp15 = MULTIPLY(z1 + tmp13, FIX(0.831253876)); /* c9 */ + 8014196: f641 2c9a movw ip, #6810 ; 0x1a9a + tmp26 = tmp12 + tmp10 - tmp11 - z2; + 801419a: 1a61 subs r1, r4, r1 + tmp25 = tmp13 - tmp10 - tmp11; + 801419c: 9004 str r0, [sp, #16] + tmp26 = tmp12 + tmp10 - tmp11 - z2; + 801419e: 9105 str r1, [sp, #20] + tmp10 = MULTIPLY(z3, FIX(0.790569415)); /* (c6+c12)/2 */ + 80141a0: f641 114c movw r1, #6476 ; 0x194c + 80141a4: 4351 muls r1, r2 + tmp11 = MULTIPLY(z4, FIX(0.353553391)); /* (c6-c12)/2 */ + 80141a6: f44f 6235 mov.w r2, #2896 ; 0xb50 + tmp21 = tmp12 + tmp10 + tmp11; + 80141aa: 440f add r7, r1 + tmp11 = MULTIPLY(z4, FIX(0.353553391)); /* (c6-c12)/2 */ + 80141ac: 436a muls r2, r5 + tmp24 = tmp13 - tmp10 + tmp11; + 80141ae: 1a76 subs r6, r6, r1 + tmp21 = tmp12 + tmp10 + tmp11; + 80141b0: 18b8 adds r0, r7, r2 + tmp24 = tmp13 - tmp10 + tmp11; + 80141b2: 18b2 adds r2, r6, r2 + z4 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + 80141b4: f9ba 6050 ldrsh.w r6, [sl, #80] ; 0x50 + tmp21 = tmp12 + tmp10 + tmp11; + 80141b8: 9006 str r0, [sp, #24] + tmp24 = tmp13 - tmp10 + tmp11; + 80141ba: 9207 str r2, [sp, #28] + tmp11 += tmp11; + 80141bc: f44f 52b5 mov.w r2, #5792 ; 0x16a0 + 80141c0: 436a muls r2, r5 + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + 80141c2: f9ba 5030 ldrsh.w r5, [sl, #48] ; 0x30 + tmp11 += tmp11; + 80141c6: 9208 str r2, [sp, #32] + tmp22 = z1 + tmp11; /* c10 = c6-c12 */ + 80141c8: 9908 ldr r1, [sp, #32] + 80141ca: 9a01 ldr r2, [sp, #4] + 80141cc: 440a add r2, r1 + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 80141ce: 9900 ldr r1, [sp, #0] + tmp22 = z1 + tmp11; /* c10 = c6-c12 */ + 80141d0: 9209 str r2, [sp, #36] ; 0x24 + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 80141d2: 6a09 ldr r1, [r1, #32] + 80141d4: f9ba 2010 ldrsh.w r2, [sl, #16] + 80141d8: 434a muls r2, r1 + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + 80141da: 9900 ldr r1, [sp, #0] + 80141dc: 6e09 ldr r1, [r1, #96] ; 0x60 + 80141de: 434d muls r5, r1 + z4 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + 80141e0: 9900 ldr r1, [sp, #0] + 80141e2: f8d1 10a0 ldr.w r1, [r1, #160] ; 0xa0 + z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + 80141e6: f9ba e070 ldrsh.w lr, [sl, #112] ; 0x70 + 80141ea: 9800 ldr r0, [sp, #0] + z4 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + 80141ec: 434e muls r6, r1 + z3 = MULTIPLY(z4, FIX(1.224744871)); /* c5 */ + 80141ee: f242 7131 movw r1, #10033 ; 0x2731 + z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + 80141f2: f8d0 40e0 ldr.w r4, [r0, #224] ; 0xe0 + z3 = MULTIPLY(z4, FIX(1.224744871)); /* c5 */ + 80141f6: 434e muls r6, r1 + z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + 80141f8: fb04 fe0e mul.w lr, r4, lr + tmp13 = z2 - z4; + 80141fc: eba5 040e sub.w r4, r5, lr + tmp15 = MULTIPLY(z1 + tmp13, FIX(0.831253876)); /* c9 */ + 8014200: 1917 adds r7, r2, r4 + 8014202: fb0c f707 mul.w r7, ip, r7 + tmp11 = tmp15 + MULTIPLY(z1, FIX(0.513743148)); /* c3-c9 */ + 8014206: f241 0c71 movw ip, #4209 ; 0x1071 + 801420a: fb0c 7002 mla r0, ip, r2, r7 + z2 = z1 - z4; + 801420e: eba2 0c0e sub.w ip, r2, lr + tmp11 = tmp15 + MULTIPLY(z1, FIX(0.513743148)); /* c3-c9 */ + 8014212: 900a str r0, [sp, #40] ; 0x28 + tmp14 = tmp15 - MULTIPLY(tmp13, FIX(2.176250899)); /* c3+c9 */ + 8014214: 48cd ldr r0, [pc, #820] ; (801454c ) + 8014216: fb00 7704 mla r7, r0, r4, r7 + tmp13 = MULTIPLY(z2, - FIX(0.831253876)); /* -c9 */ + 801421a: 48cd ldr r0, [pc, #820] ; (8014550 ) + tmp12 = z3 + MULTIPLY(z2, FIX(1.406466353)); /* c1 */ + 801421c: f642 5402 movw r4, #11522 ; 0x2d02 + tmp13 = MULTIPLY(z2, - FIX(0.831253876)); /* -c9 */ + 8014220: 4368 muls r0, r5 + tmp12 = z3 + MULTIPLY(z2, FIX(1.406466353)); /* c1 */ + 8014222: fb04 640c mla r4, r4, ip, r6 + tmp13 = MULTIPLY(z2, - FIX(0.831253876)); /* -c9 */ + 8014226: 900b str r0, [sp, #44] ; 0x2c + tmp12 = MULTIPLY(z2, FIX(1.224744871)) - z3; /* c5 */ + 8014228: fb01 fc0c mul.w ip, r1, ip + tmp15 = MULTIPLY(z2, - FIX(1.344997024)); /* -c3 */ + 801422c: 48c9 ldr r0, [pc, #804] ; (8014554 ) + z2 = MULTIPLY(z1 + z4, FIX(0.575212477)); /* c11 */ + 801422e: eb02 010e add.w r1, r2, lr + tmp10 = tmp12 + MULTIPLY(z4, FIX(2.457431844)) - tmp15; /* c1+c7 */ + 8014232: fb08 480e mla r8, r8, lr, r4 + tmp15 = MULTIPLY(z2, - FIX(1.344997024)); /* -c3 */ + 8014236: 4345 muls r5, r0 + tmp16 = tmp12 - MULTIPLY(z1, FIX(1.112434820)) + tmp13; /* c1-c13 */ + 8014238: f200 7071 addw r0, r0, #1905 ; 0x771 + z2 = MULTIPLY(z1 + z4, FIX(0.575212477)); /* c11 */ + 801423c: fb0b f101 mul.w r1, fp, r1 + tmp13 += z2 + MULTIPLY(z1, FIX(0.475753014)) - z3; /* c7-c11 */ + 8014240: f640 7b39 movw fp, #3897 ; 0xf39 + tmp16 = tmp12 - MULTIPLY(z1, FIX(1.112434820)) + tmp13; /* c1-c13 */ + 8014244: fb00 4402 mla r4, r0, r2, r4 + 8014248: 980b ldr r0, [sp, #44] ; 0x2c + tmp13 += z2 + MULTIPLY(z1, FIX(0.475753014)) - z3; /* c7-c11 */ + 801424a: fb0b 1202 mla r2, fp, r2, r1 + tmp10 = tmp12 + MULTIPLY(z4, FIX(2.457431844)) - tmp15; /* c1+c7 */ + 801424e: eba8 0805 sub.w r8, r8, r5 + tmp16 = tmp12 - MULTIPLY(z1, FIX(1.112434820)) + tmp13; /* c1-c13 */ + 8014252: 4404 add r4, r0 + tmp12 = MULTIPLY(z2, FIX(1.224744871)) - z3; /* c5 */ + 8014254: ebac 0c06 sub.w ip, ip, r6 + tmp13 += z2 + MULTIPLY(z1, FIX(0.475753014)) - z3; /* c7-c11 */ + 8014258: 1b92 subs r2, r2, r6 + 801425a: 4402 add r2, r0 + tmp15 += z2 - MULTIPLY(z4, FIX(0.869244010)) + z3; /* c11+c13 */ + 801425c: 48be ldr r0, [pc, #760] ; (8014558 ) + 801425e: fb00 110e mla r1, r0, lr, r1 + + /* Final output stage */ + + wsptr[8*0] = (int) RIGHT_SHIFT(tmp20 + tmp10, CONST_BITS-PASS1_BITS); + 8014262: 9802 ldr r0, [sp, #8] + tmp15 += z2 - MULTIPLY(z4, FIX(0.869244010)) + z3; /* c11+c13 */ + 8014264: 4431 add r1, r6 + 8014266: 4429 add r1, r5 + wsptr[8*0] = (int) RIGHT_SHIFT(tmp20 + tmp10, CONST_BITS-PASS1_BITS); + 8014268: eb00 0508 add.w r5, r0, r8 + 801426c: 12ed asrs r5, r5, #11 + 801426e: f843 5c04 str.w r5, [r3, #-4] + wsptr[8*14] = (int) RIGHT_SHIFT(tmp20 - tmp10, CONST_BITS-PASS1_BITS); + 8014272: eba0 0508 sub.w r5, r0, r8 + wsptr[8*1] = (int) RIGHT_SHIFT(tmp21 + tmp11, CONST_BITS-PASS1_BITS); + 8014276: 9806 ldr r0, [sp, #24] + wsptr[8*14] = (int) RIGHT_SHIFT(tmp20 - tmp10, CONST_BITS-PASS1_BITS); + 8014278: 12ed asrs r5, r5, #11 + 801427a: f8c3 51bc str.w r5, [r3, #444] ; 0x1bc + wsptr[8*1] = (int) RIGHT_SHIFT(tmp21 + tmp11, CONST_BITS-PASS1_BITS); + 801427e: 9d0a ldr r5, [sp, #40] ; 0x28 + 8014280: 1945 adds r5, r0, r5 + 8014282: 12ed asrs r5, r5, #11 + 8014284: 61dd str r5, [r3, #28] + wsptr[8*13] = (int) RIGHT_SHIFT(tmp21 - tmp11, CONST_BITS-PASS1_BITS); + 8014286: 9d0a ldr r5, [sp, #40] ; 0x28 + 8014288: 1b45 subs r5, r0, r5 + wsptr[8*2] = (int) RIGHT_SHIFT(tmp22 + tmp12, CONST_BITS-PASS1_BITS); + 801428a: 9809 ldr r0, [sp, #36] ; 0x24 + wsptr[8*13] = (int) RIGHT_SHIFT(tmp21 - tmp11, CONST_BITS-PASS1_BITS); + 801428c: 12ed asrs r5, r5, #11 + 801428e: f8c3 519c str.w r5, [r3, #412] ; 0x19c + wsptr[8*2] = (int) RIGHT_SHIFT(tmp22 + tmp12, CONST_BITS-PASS1_BITS); + 8014292: eb00 050c add.w r5, r0, ip + 8014296: 12ed asrs r5, r5, #11 + 8014298: 63dd str r5, [r3, #60] ; 0x3c + wsptr[8*12] = (int) RIGHT_SHIFT(tmp22 - tmp12, CONST_BITS-PASS1_BITS); + 801429a: eba0 050c sub.w r5, r0, ip + wsptr[8*3] = (int) RIGHT_SHIFT(tmp23 + tmp13, CONST_BITS-PASS1_BITS); + 801429e: 9803 ldr r0, [sp, #12] + wsptr[8*12] = (int) RIGHT_SHIFT(tmp22 - tmp12, CONST_BITS-PASS1_BITS); + 80142a0: 12ed asrs r5, r5, #11 + 80142a2: f8c3 517c str.w r5, [r3, #380] ; 0x17c + wsptr[8*3] = (int) RIGHT_SHIFT(tmp23 + tmp13, CONST_BITS-PASS1_BITS); + 80142a6: 1885 adds r5, r0, r2 + wsptr[8*11] = (int) RIGHT_SHIFT(tmp23 - tmp13, CONST_BITS-PASS1_BITS); + 80142a8: 1a82 subs r2, r0, r2 + wsptr[8*3] = (int) RIGHT_SHIFT(tmp23 + tmp13, CONST_BITS-PASS1_BITS); + 80142aa: 12ed asrs r5, r5, #11 + wsptr[8*11] = (int) RIGHT_SHIFT(tmp23 - tmp13, CONST_BITS-PASS1_BITS); + 80142ac: 12d2 asrs r2, r2, #11 + wsptr[8*3] = (int) RIGHT_SHIFT(tmp23 + tmp13, CONST_BITS-PASS1_BITS); + 80142ae: 65dd str r5, [r3, #92] ; 0x5c + wsptr[8*11] = (int) RIGHT_SHIFT(tmp23 - tmp13, CONST_BITS-PASS1_BITS); + 80142b0: f8c3 215c str.w r2, [r3, #348] ; 0x15c + wsptr[8*4] = (int) RIGHT_SHIFT(tmp24 + tmp14, CONST_BITS-PASS1_BITS); + 80142b4: 9a07 ldr r2, [sp, #28] + 80142b6: 443a add r2, r7 + 80142b8: 12d2 asrs r2, r2, #11 + 80142ba: 67da str r2, [r3, #124] ; 0x7c + wsptr[8*10] = (int) RIGHT_SHIFT(tmp24 - tmp14, CONST_BITS-PASS1_BITS); + 80142bc: 9a07 ldr r2, [sp, #28] + 80142be: 1bd2 subs r2, r2, r7 + 80142c0: 12d2 asrs r2, r2, #11 + 80142c2: f8c3 213c str.w r2, [r3, #316] ; 0x13c + wsptr[8*5] = (int) RIGHT_SHIFT(tmp25 + tmp15, CONST_BITS-PASS1_BITS); + 80142c6: 9a04 ldr r2, [sp, #16] + 80142c8: 440a add r2, r1 + 80142ca: 12d2 asrs r2, r2, #11 + 80142cc: f8c3 209c str.w r2, [r3, #156] ; 0x9c + wsptr[8*9] = (int) RIGHT_SHIFT(tmp25 - tmp15, CONST_BITS-PASS1_BITS); + 80142d0: 9a04 ldr r2, [sp, #16] + 80142d2: 1a52 subs r2, r2, r1 + 80142d4: 12d2 asrs r2, r2, #11 + 80142d6: f8c3 211c str.w r2, [r3, #284] ; 0x11c + wsptr[8*6] = (int) RIGHT_SHIFT(tmp26 + tmp16, CONST_BITS-PASS1_BITS); + 80142da: 9a05 ldr r2, [sp, #20] + 80142dc: 4422 add r2, r4 + 80142de: 12d2 asrs r2, r2, #11 + 80142e0: f8c3 20bc str.w r2, [r3, #188] ; 0xbc + wsptr[8*8] = (int) RIGHT_SHIFT(tmp26 - tmp16, CONST_BITS-PASS1_BITS); + 80142e4: 9a05 ldr r2, [sp, #20] + 80142e6: 1b12 subs r2, r2, r4 + 80142e8: 12d2 asrs r2, r2, #11 + 80142ea: f8c3 20fc str.w r2, [r3, #252] ; 0xfc + tmp27 = z1 - tmp11 - tmp11; /* c0 = (c6-c12)*2 */ + 80142ee: 9a01 ldr r2, [sp, #4] + 80142f0: 9908 ldr r1, [sp, #32] + 80142f2: eba2 0241 sub.w r2, r2, r1, lsl #1 + wsptr[8*7] = (int) RIGHT_SHIFT(tmp27, CONST_BITS-PASS1_BITS); + 80142f6: 12d2 asrs r2, r2, #11 + 80142f8: f8c3 20dc str.w r2, [r3, #220] ; 0xdc + for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) { + 80142fc: 9a0d ldr r2, [sp, #52] ; 0x34 + 80142fe: 4552 cmp r2, sl + 8014300: f47f aef6 bne.w 80140f0 + 8014304: 9b0c ldr r3, [sp, #48] ; 0x30 + 8014306: 3b04 subs r3, #4 + 8014308: 9301 str r3, [sp, #4] + 801430a: 9b0c ldr r3, [sp, #48] ; 0x30 + 801430c: 3338 adds r3, #56 ; 0x38 + 801430e: 930d str r3, [sp, #52] ; 0x34 + } + + /* Pass 2: process 15 rows from work array, store into output array. */ + + wsptr = workspace; + 8014310: ab0e add r3, sp, #56 ; 0x38 + 8014312: 9300 str r3, [sp, #0] + for (ctr = 0; ctr < 15; ctr++) { + outptr = output_buf[ctr] + output_col; + 8014314: 9b01 ldr r3, [sp, #4] + + z2 = (INT32) wsptr[2]; + z3 = (INT32) wsptr[4]; + z4 = (INT32) wsptr[6]; + + tmp10 = MULTIPLY(z4, FIX(0.437016024)); /* c12 */ + 8014316: f640 51fc movw r1, #3580 ; 0xdfc + z1 -= (tmp11 - tmp10) << 1; /* c0 = (c6-c12)*2 */ + + z4 = z2 - z3; + z3 += z2; + tmp10 = MULTIPLY(z3, FIX(1.337628990)); /* (c2+c4)/2 */ + tmp11 = MULTIPLY(z4, FIX(0.045680613)); /* (c2-c4)/2 */ + 801431a: f44f 74bb mov.w r4, #374 ; 0x176 + z2 = MULTIPLY(z2, FIX(1.439773946)); /* c4+c14 */ + 801431e: f642 6e13 movw lr, #11795 ; 0x2e13 + outptr = output_buf[ctr] + output_col; + 8014322: f853 2f04 ldr.w r2, [r3, #4]! + /* Odd part */ + + z1 = (INT32) wsptr[1]; + z2 = (INT32) wsptr[3]; + z4 = (INT32) wsptr[5]; + z3 = MULTIPLY(z4, FIX(1.224744871)); /* c5 */ + 8014326: f242 7a31 movw sl, #10033 ; 0x2731 + z4 = (INT32) wsptr[7]; + + tmp13 = z2 - z4; + tmp15 = MULTIPLY(z1 + tmp13, FIX(0.831253876)); /* c9 */ + tmp11 = tmp15 + MULTIPLY(z1, FIX(0.513743148)); /* c3-c9 */ + 801432a: f241 0871 movw r8, #4209 ; 0x1071 + outptr = output_buf[ctr] + output_col; + 801432e: 920c str r2, [sp, #48] ; 0x30 + 8014330: 9301 str r3, [sp, #4] + 8014332: 4613 mov r3, r2 + 8014334: 9a90 ldr r2, [sp, #576] ; 0x240 + 8014336: 4413 add r3, r2 + z1 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + 8014338: 9a00 ldr r2, [sp, #0] + z2 = (INT32) wsptr[2]; + 801433a: 6895 ldr r5, [r2, #8] + z3 = (INT32) wsptr[4]; + 801433c: 6910 ldr r0, [r2, #16] + z1 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + 801433e: 6816 ldr r6, [r2, #0] + z4 = (INT32) wsptr[6]; + 8014340: 6992 ldr r2, [r2, #24] + z1 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + 8014342: 3610 adds r6, #16 + tmp10 = MULTIPLY(z4, FIX(0.437016024)); /* c12 */ + 8014344: fb01 fc02 mul.w ip, r1, r2 + tmp11 = MULTIPLY(z4, FIX(1.144122806)); /* c6 */ + 8014348: f242 419d movw r1, #9373 ; 0x249d + 801434c: 434a muls r2, r1 + tmp12 = z1 - tmp10; + 801434e: ebcc 3146 rsb r1, ip, r6, lsl #13 + tmp13 = z1 + tmp11; + 8014352: eb02 3746 add.w r7, r2, r6, lsl #13 + z1 -= (tmp11 - tmp10) << 1; /* c0 = (c6-c12)*2 */ + 8014356: eba2 020c sub.w r2, r2, ip + 801435a: 0052 lsls r2, r2, #1 + 801435c: ebc2 3246 rsb r2, r2, r6, lsl #13 + z4 = z2 - z3; + 8014360: 1a2e subs r6, r5, r0 + z3 += z2; + 8014362: 4428 add r0, r5 + z2 = MULTIPLY(z2, FIX(1.439773946)); /* c4+c14 */ + 8014364: fb0e f505 mul.w r5, lr, r5 + z1 -= (tmp11 - tmp10) << 1; /* c0 = (c6-c12)*2 */ + 8014368: 9202 str r2, [sp, #8] + tmp10 = MULTIPLY(z3, FIX(1.337628990)); /* (c2+c4)/2 */ + 801436a: f642 22ce movw r2, #10958 ; 0x2ace + tmp11 = MULTIPLY(z4, FIX(0.045680613)); /* (c2-c4)/2 */ + 801436e: fb04 fc06 mul.w ip, r4, r6 + tmp10 = MULTIPLY(z3, FIX(1.337628990)); /* (c2+c4)/2 */ + 8014372: 4342 muls r2, r0 + tmp20 = tmp13 + tmp10 + tmp11; + 8014374: eb07 0e02 add.w lr, r7, r2 + tmp23 = tmp12 - tmp10 + tmp11 + z2; + 8014378: 1a8a subs r2, r1, r2 + 801437a: 4462 add r2, ip + tmp20 = tmp13 + tmp10 + tmp11; + 801437c: eb0e 040c add.w r4, lr, ip + tmp11 = MULTIPLY(z4, FIX(0.399234004)); /* (c8-c14)/2 */ + 8014380: f640 4cc7 movw ip, #3271 ; 0xcc7 + tmp23 = tmp12 - tmp10 + tmp11 + z2; + 8014384: 442a add r2, r5 + tmp20 = tmp13 + tmp10 + tmp11; + 8014386: 9403 str r4, [sp, #12] + tmp11 = MULTIPLY(z4, FIX(0.399234004)); /* (c8-c14)/2 */ + 8014388: fb0c fc06 mul.w ip, ip, r6 + tmp23 = tmp12 - tmp10 + tmp11 + z2; + 801438c: 9204 str r2, [sp, #16] + tmp10 = MULTIPLY(z3, FIX(0.547059574)); /* (c8+c14)/2 */ + 801438e: f241 1282 movw r2, #4482 ; 0x1182 + 8014392: 4342 muls r2, r0 + tmp25 = tmp13 - tmp10 - tmp11; + 8014394: eba7 0e02 sub.w lr, r7, r2 + tmp26 = tmp12 + tmp10 - tmp11 - z2; + 8014398: 440a add r2, r1 + 801439a: eba2 020c sub.w r2, r2, ip + tmp25 = tmp13 - tmp10 - tmp11; + 801439e: ebae 040c sub.w r4, lr, ip + tmp26 = tmp12 + tmp10 - tmp11 - z2; + 80143a2: 1b52 subs r2, r2, r5 + tmp25 = tmp13 - tmp10 - tmp11; + 80143a4: 9405 str r4, [sp, #20] + tmp14 = tmp15 - MULTIPLY(tmp13, FIX(2.176250899)); /* c3+c9 */ + 80143a6: 4c69 ldr r4, [pc, #420] ; (801454c ) + tmp26 = tmp12 + tmp10 - tmp11 - z2; + 80143a8: 9206 str r2, [sp, #24] + tmp10 = MULTIPLY(z3, FIX(0.790569415)); /* (c6+c12)/2 */ + 80143aa: f641 124c movw r2, #6476 ; 0x194c + 80143ae: 4350 muls r0, r2 + tmp11 = MULTIPLY(z4, FIX(0.353553391)); /* (c6-c12)/2 */ + 80143b0: f44f 6235 mov.w r2, #2896 ; 0xb50 + tmp24 = tmp13 - tmp10 + tmp11; + 80143b4: 1a3f subs r7, r7, r0 + tmp11 = MULTIPLY(z4, FIX(0.353553391)); /* (c6-c12)/2 */ + 80143b6: 4372 muls r2, r6 + tmp21 = tmp12 + tmp10 + tmp11; + 80143b8: 4401 add r1, r0 + 80143ba: 4411 add r1, r2 + tmp24 = tmp13 - tmp10 + tmp11; + 80143bc: 18ba adds r2, r7, r2 + 80143be: 9207 str r2, [sp, #28] + tmp11 += tmp11; + 80143c0: f44f 52b5 mov.w r2, #5792 ; 0x16a0 + 80143c4: 4372 muls r2, r6 + tmp15 = MULTIPLY(z1 + tmp13, FIX(0.831253876)); /* c9 */ + 80143c6: f641 269a movw r6, #6810 ; 0x1a9a + tmp11 += tmp11; + 80143ca: 9208 str r2, [sp, #32] + tmp22 = z1 + tmp11; /* c10 = c6-c12 */ + 80143cc: 9808 ldr r0, [sp, #32] + 80143ce: 9a02 ldr r2, [sp, #8] + 80143d0: eb02 0b00 add.w fp, r2, r0 + z2 = (INT32) wsptr[3]; + 80143d4: 9800 ldr r0, [sp, #0] + z1 = (INT32) wsptr[1]; + 80143d6: 9a00 ldr r2, [sp, #0] + z2 = (INT32) wsptr[3]; + 80143d8: 68c7 ldr r7, [r0, #12] + z3 = MULTIPLY(z4, FIX(1.224744871)); /* c5 */ + 80143da: 6940 ldr r0, [r0, #20] + z1 = (INT32) wsptr[1]; + 80143dc: 6852 ldr r2, [r2, #4] + z3 = MULTIPLY(z4, FIX(1.224744871)); /* c5 */ + 80143de: fb0a fc00 mul.w ip, sl, r0 + z4 = (INT32) wsptr[7]; + 80143e2: 9800 ldr r0, [sp, #0] + 80143e4: f8d0 e01c ldr.w lr, [r0, #28] + tmp13 = z2 - z4; + 80143e8: eba7 050e sub.w r5, r7, lr + tmp15 = MULTIPLY(z1 + tmp13, FIX(0.831253876)); /* c9 */ + 80143ec: 1950 adds r0, r2, r5 + 80143ee: 4370 muls r0, r6 + tmp13 = MULTIPLY(z2, - FIX(0.831253876)); /* -c9 */ + tmp15 = MULTIPLY(z2, - FIX(1.344997024)); /* -c3 */ + z2 = z1 - z4; + tmp12 = z3 + MULTIPLY(z2, FIX(1.406466353)); /* c1 */ + + tmp10 = tmp12 + MULTIPLY(z4, FIX(2.457431844)) - tmp15; /* c1+c7 */ + 80143f0: f644 66a3 movw r6, #20131 ; 0x4ea3 + tmp11 = tmp15 + MULTIPLY(z1, FIX(0.513743148)); /* c3-c9 */ + 80143f4: fb08 0802 mla r8, r8, r2, r0 + tmp14 = tmp15 - MULTIPLY(tmp13, FIX(2.176250899)); /* c3+c9 */ + 80143f8: fb04 0005 mla r0, r4, r5, r0 + z2 = z1 - z4; + 80143fc: eba2 050e sub.w r5, r2, lr + tmp16 = tmp12 - MULTIPLY(z1, FIX(1.112434820)) + tmp13; /* c1-c13 */ + 8014400: 4c56 ldr r4, [pc, #344] ; (801455c ) + tmp14 = tmp15 - MULTIPLY(tmp13, FIX(2.176250899)); /* c3+c9 */ + 8014402: 9009 str r0, [sp, #36] ; 0x24 + tmp13 = MULTIPLY(z2, - FIX(0.831253876)); /* -c9 */ + 8014404: 4852 ldr r0, [pc, #328] ; (8014550 ) + 8014406: 4378 muls r0, r7 + 8014408: 900a str r0, [sp, #40] ; 0x28 + tmp15 = MULTIPLY(z2, - FIX(1.344997024)); /* -c3 */ + 801440a: 4852 ldr r0, [pc, #328] ; (8014554 ) + 801440c: 4347 muls r7, r0 + tmp12 = z3 + MULTIPLY(z2, FIX(1.406466353)); /* c1 */ + 801440e: f642 5002 movw r0, #11522 ; 0x2d02 + 8014412: fb00 c005 mla r0, r0, r5, ip + tmp12 = MULTIPLY(z2, FIX(1.224744871)) - z3; /* c5 */ + 8014416: fb0a f505 mul.w r5, sl, r5 + z2 = MULTIPLY(z1 + z4, FIX(0.575212477)); /* c11 */ + 801441a: f241 2a68 movw sl, #4712 ; 0x1268 + tmp10 = tmp12 + MULTIPLY(z4, FIX(2.457431844)) - tmp15; /* c1+c7 */ + 801441e: fb06 060e mla r6, r6, lr, r0 + tmp16 = tmp12 - MULTIPLY(z1, FIX(1.112434820)) + tmp13; /* c1-c13 */ + 8014422: fb04 0002 mla r0, r4, r2, r0 + 8014426: 9c0a ldr r4, [sp, #40] ; 0x28 + tmp10 = tmp12 + MULTIPLY(z4, FIX(2.457431844)) - tmp15; /* c1+c7 */ + 8014428: 1bf6 subs r6, r6, r7 + tmp12 = MULTIPLY(z2, FIX(1.224744871)) - z3; /* c5 */ + 801442a: eba5 050c sub.w r5, r5, ip + tmp16 = tmp12 - MULTIPLY(z1, FIX(1.112434820)) + tmp13; /* c1-c13 */ + 801442e: 4420 add r0, r4 + 8014430: 900b str r0, [sp, #44] ; 0x2c + z2 = MULTIPLY(z1 + z4, FIX(0.575212477)); /* c11 */ + 8014432: eb02 000e add.w r0, r2, lr + 8014436: fb0a f000 mul.w r0, sl, r0 + tmp13 += z2 + MULTIPLY(z1, FIX(0.475753014)) - z3; /* c7-c11 */ + 801443a: f640 7a39 movw sl, #3897 ; 0xf39 + 801443e: fb0a 0202 mla r2, sl, r2, r0 + 8014442: eba2 020c sub.w r2, r2, ip + 8014446: eb02 0a04 add.w sl, r2, r4 + tmp15 += z2 - MULTIPLY(z4, FIX(0.869244010)) + z3; /* c11+c13 */ + 801444a: 4c43 ldr r4, [pc, #268] ; (8014558 ) + 801444c: fb04 000e mla r0, r4, lr, r0 + + /* Final output stage */ + + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp10, + 8014450: 9c03 ldr r4, [sp, #12] + tmp15 += z2 - MULTIPLY(z4, FIX(0.869244010)) + z3; /* c11+c13 */ + 8014452: 4460 add r0, ip + 8014454: 4438 add r0, r7 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp10, + 8014456: 19a7 adds r7, r4, r6 + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + 8014458: f3c7 4789 ubfx r7, r7, #18, #10 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp10, + 801445c: f819 7007 ldrb.w r7, [r9, r7] + 8014460: 9c0c ldr r4, [sp, #48] ; 0x30 + 8014462: 9a90 ldr r2, [sp, #576] ; 0x240 + 8014464: 54a7 strb r7, [r4, r2] + outptr[14] = range_limit[(int) RIGHT_SHIFT(tmp20 - tmp10, + 8014466: 9a03 ldr r2, [sp, #12] + 8014468: 1b96 subs r6, r2, r6 + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[12] = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp12, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp23 + tmp13, + 801446a: 9a04 ldr r2, [sp, #16] + & RANGE_MASK]; + 801446c: f3c6 4689 ubfx r6, r6, #18, #10 + outptr[14] = range_limit[(int) RIGHT_SHIFT(tmp20 - tmp10, + 8014470: f819 6006 ldrb.w r6, [r9, r6] + 8014474: 739e strb r6, [r3, #14] + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp11, + 8014476: eb01 0608 add.w r6, r1, r8 + outptr[13] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp11, + 801447a: eba1 0108 sub.w r1, r1, r8 + & RANGE_MASK]; + 801447e: f3c6 4689 ubfx r6, r6, #18, #10 + & RANGE_MASK]; + 8014482: f3c1 4189 ubfx r1, r1, #18, #10 + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp11, + 8014486: f819 6006 ldrb.w r6, [r9, r6] + 801448a: 705e strb r6, [r3, #1] + outptr[13] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp11, + 801448c: f819 1001 ldrb.w r1, [r9, r1] + 8014490: 7359 strb r1, [r3, #13] + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp12, + 8014492: eb0b 0105 add.w r1, fp, r5 + outptr[12] = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp12, + 8014496: ebab 0b05 sub.w fp, fp, r5 + & RANGE_MASK]; + 801449a: f3c1 4189 ubfx r1, r1, #18, #10 + & RANGE_MASK]; + 801449e: f3cb 4b89 ubfx fp, fp, #18, #10 + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp12, + 80144a2: f819 1001 ldrb.w r1, [r9, r1] + 80144a6: 7099 strb r1, [r3, #2] + outptr[12] = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp12, + 80144a8: f819 100b ldrb.w r1, [r9, fp] + 80144ac: 7319 strb r1, [r3, #12] + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp23 + tmp13, + 80144ae: eb02 010a add.w r1, r2, sl + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[11] = range_limit[(int) RIGHT_SHIFT(tmp23 - tmp13, + 80144b2: eba2 020a sub.w r2, r2, sl + & RANGE_MASK]; + 80144b6: f3c1 4189 ubfx r1, r1, #18, #10 + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + 80144ba: f3c2 4289 ubfx r2, r2, #18, #10 + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp23 + tmp13, + 80144be: f819 1001 ldrb.w r1, [r9, r1] + 80144c2: 70d9 strb r1, [r3, #3] + outptr[11] = range_limit[(int) RIGHT_SHIFT(tmp23 - tmp13, + 80144c4: f819 2002 ldrb.w r2, [r9, r2] + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp24 + tmp14, + 80144c8: 9909 ldr r1, [sp, #36] ; 0x24 + outptr[11] = range_limit[(int) RIGHT_SHIFT(tmp23 - tmp13, + 80144ca: 72da strb r2, [r3, #11] + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp24 + tmp14, + 80144cc: 9a07 ldr r2, [sp, #28] + 80144ce: 440a add r2, r1 + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + 80144d0: f3c2 4289 ubfx r2, r2, #18, #10 + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp24 + tmp14, + 80144d4: f819 2002 ldrb.w r2, [r9, r2] + 80144d8: 711a strb r2, [r3, #4] + outptr[10] = range_limit[(int) RIGHT_SHIFT(tmp24 - tmp14, + 80144da: 9a07 ldr r2, [sp, #28] + 80144dc: 1a52 subs r2, r2, r1 + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + 80144de: f3c2 4289 ubfx r2, r2, #18, #10 + outptr[10] = range_limit[(int) RIGHT_SHIFT(tmp24 - tmp14, + 80144e2: f819 2002 ldrb.w r2, [r9, r2] + 80144e6: 729a strb r2, [r3, #10] + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp25 + tmp15, + 80144e8: 9a05 ldr r2, [sp, #20] + 80144ea: 4402 add r2, r0 + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + 80144ec: f3c2 4289 ubfx r2, r2, #18, #10 + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp25 + tmp15, + 80144f0: f819 2002 ldrb.w r2, [r9, r2] + 80144f4: 715a strb r2, [r3, #5] + outptr[9] = range_limit[(int) RIGHT_SHIFT(tmp25 - tmp15, + 80144f6: 9a05 ldr r2, [sp, #20] + 80144f8: 1a12 subs r2, r2, r0 + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + 80144fa: f3c2 4289 ubfx r2, r2, #18, #10 + outptr[9] = range_limit[(int) RIGHT_SHIFT(tmp25 - tmp15, + 80144fe: f819 2002 ldrb.w r2, [r9, r2] + 8014502: 725a strb r2, [r3, #9] + outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp26 + tmp16, + 8014504: 9a06 ldr r2, [sp, #24] + 8014506: 990b ldr r1, [sp, #44] ; 0x2c + 8014508: 440a add r2, r1 + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + 801450a: f3c2 4289 ubfx r2, r2, #18, #10 + outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp26 + tmp16, + 801450e: f819 2002 ldrb.w r2, [r9, r2] + 8014512: 719a strb r2, [r3, #6] + outptr[8] = range_limit[(int) RIGHT_SHIFT(tmp26 - tmp16, + 8014514: 9a06 ldr r2, [sp, #24] + 8014516: 1a52 subs r2, r2, r1 + tmp27 = z1 - tmp11 - tmp11; /* c0 = (c6-c12)*2 */ + 8014518: 9908 ldr r1, [sp, #32] + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + 801451a: f3c2 4289 ubfx r2, r2, #18, #10 + outptr[8] = range_limit[(int) RIGHT_SHIFT(tmp26 - tmp16, + 801451e: f819 2002 ldrb.w r2, [r9, r2] + 8014522: 721a strb r2, [r3, #8] + tmp27 = z1 - tmp11 - tmp11; /* c0 = (c6-c12)*2 */ + 8014524: 9a02 ldr r2, [sp, #8] + 8014526: eba2 0241 sub.w r2, r2, r1, lsl #1 + outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp27, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + 801452a: f3c2 4289 ubfx r2, r2, #18, #10 + outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp27, + 801452e: f819 2002 ldrb.w r2, [r9, r2] + 8014532: 71da strb r2, [r3, #7] + + wsptr += 8; /* advance pointer to next row */ + 8014534: 9b00 ldr r3, [sp, #0] + for (ctr = 0; ctr < 15; ctr++) { + 8014536: 9a01 ldr r2, [sp, #4] + wsptr += 8; /* advance pointer to next row */ + 8014538: 3320 adds r3, #32 + 801453a: 9300 str r3, [sp, #0] + for (ctr = 0; ctr < 15; ctr++) { + 801453c: 9b0d ldr r3, [sp, #52] ; 0x34 + 801453e: 4293 cmp r3, r2 + 8014540: f47f aee8 bne.w 8014314 + } +} + 8014544: f50d 7d07 add.w sp, sp, #540 ; 0x21c + 8014548: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 801454c: ffffba5c .word 0xffffba5c + 8014550: ffffe566 .word 0xffffe566 + 8014554: ffffd4f6 .word 0xffffd4f6 + 8014558: ffffe42f .word 0xffffe42f + 801455c: ffffdc67 .word 0xffffdc67 + +08014560 : + +GLOBAL(void) +jpeg_idct_16x16 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + 8014560: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8014564: f5ad 7d0f sub.w sp, sp, #572 ; 0x23c + 8014568: f1a2 0b02 sub.w fp, r2, #2 + 801456c: 930c str r3, [sp, #48] ; 0x30 + INT32 z1, z2, z3, z4; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + int * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + 801456e: f8d0 314c ldr.w r3, [r0, #332] ; 0x14c + 8014572: f103 0880 add.w r8, r3, #128 ; 0x80 + /* Pass 1: process columns from input, store into work array. */ + + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) { + 8014576: 6d4b ldr r3, [r1, #84] ; 0x54 + 8014578: f1a3 0a04 sub.w sl, r3, #4 + 801457c: f102 030e add.w r3, r2, #14 + 8014580: 930d str r3, [sp, #52] ; 0x34 + wsptr = workspace; + 8014582: ab0e add r3, sp, #56 ; 0x38 + 8014584: 9300 str r3, [sp, #0] + /* Even part */ + + tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 8014586: f93b 2f02 ldrsh.w r2, [fp, #2]! + /* Add fudge factor here for final descale. */ + tmp0 += 1 << (CONST_BITS-PASS1_BITS-1); + + z1 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + tmp1 = MULTIPLY(z1, FIX(1.306562965)); /* c4[16] = c2[8] */ + tmp2 = MULTIPLY(z1, FIX_0_541196100); /* c12[16] = c6[8] */ + 801458a: f241 1451 movw r4, #4433 ; 0x1151 + tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 801458e: f85a 1f04 ldr.w r1, [sl, #4]! + + z1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + z2 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + z3 = z1 - z2; + z4 = MULTIPLY(z3, FIX(0.275899379)); /* c14[16] = c7[8] */ + z3 = MULTIPLY(z3, FIX(1.387039845)); /* c2[16] = c1[8] */ + 8014592: f642 4563 movw r5, #11363 ; 0x2c63 + z1 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + 8014596: f9bb 0040 ldrsh.w r0, [fp, #64] ; 0x40 + + tmp0 = z3 + MULTIPLY(z2, FIX_2_562915447); /* (c6+c2)[16] = (c3+c1)[8] */ + 801459a: f245 2e03 movw lr, #20995 ; 0x5203 + tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 801459e: 434a muls r2, r1 + z1 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + 80145a0: f8da 1080 ldr.w r1, [sl, #128] ; 0x80 + z2 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + 80145a4: f9bb c060 ldrsh.w ip, [fp, #96] ; 0x60 + z1 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + 80145a8: 4341 muls r1, r0 + tmp0 <<= CONST_BITS; + 80145aa: 0352 lsls r2, r2, #13 + tmp1 = MULTIPLY(z1, FIX(1.306562965)); /* c4[16] = c2[8] */ + 80145ac: f642 10cf movw r0, #10703 ; 0x29cf + tmp1 = z4 + MULTIPLY(z1, FIX_0_899976223); /* (c6-c14)[16] = (c3-c7)[8] */ + tmp2 = z3 - MULTIPLY(z1, FIX(0.601344887)); /* (c2-c10)[16] = (c1-c5)[8] */ + 80145b0: 4bcd ldr r3, [pc, #820] ; (80148e8 ) + tmp0 += 1 << (CONST_BITS-PASS1_BITS-1); + 80145b2: f502 6280 add.w r2, r2, #1024 ; 0x400 + tmp1 = MULTIPLY(z1, FIX(1.306562965)); /* c4[16] = c2[8] */ + 80145b6: 4348 muls r0, r1 + tmp2 = MULTIPLY(z1, FIX_0_541196100); /* c12[16] = c6[8] */ + 80145b8: 4361 muls r1, r4 + z1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + 80145ba: f9bb 4020 ldrsh.w r4, [fp, #32] + tmp10 = tmp0 + tmp1; + 80145be: 1817 adds r7, r2, r0 + tmp11 = tmp0 - tmp1; + 80145c0: 1a10 subs r0, r2, r0 + tmp12 = tmp0 + tmp2; + 80145c2: 1856 adds r6, r2, r1 + tmp13 = tmp0 - tmp2; + 80145c4: 1a52 subs r2, r2, r1 + z1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + 80145c6: f8da 1040 ldr.w r1, [sl, #64] ; 0x40 + 80145ca: fb01 f904 mul.w r9, r1, r4 + z2 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + 80145ce: f8da 10c0 ldr.w r1, [sl, #192] ; 0xc0 + 80145d2: fb01 fc0c mul.w ip, r1, ip + z4 = MULTIPLY(z3, FIX(0.275899379)); /* c14[16] = c7[8] */ + 80145d6: f640 01d4 movw r1, #2260 ; 0x8d4 + z3 = z1 - z2; + 80145da: eba9 040c sub.w r4, r9, ip + z4 = MULTIPLY(z3, FIX(0.275899379)); /* c14[16] = c7[8] */ + 80145de: 4361 muls r1, r4 + z3 = MULTIPLY(z3, FIX(1.387039845)); /* c2[16] = c1[8] */ + 80145e0: 436c muls r4, r5 + tmp1 = z4 + MULTIPLY(z1, FIX_0_899976223); /* (c6-c14)[16] = (c3-c7)[8] */ + 80145e2: f641 45cd movw r5, #7373 ; 0x1ccd + tmp0 = z3 + MULTIPLY(z2, FIX_2_562915447); /* (c6+c2)[16] = (c3+c1)[8] */ + 80145e6: fb0e 4e0c mla lr, lr, ip, r4 + tmp2 = z3 - MULTIPLY(z1, FIX(0.601344887)); /* (c2-c10)[16] = (c1-c5)[8] */ + 80145ea: fb03 4409 mla r4, r3, r9, r4 + tmp3 = z4 - MULTIPLY(z2, FIX(0.509795579)); /* (c10-c14)[16] = (c5-c7)[8] */ + 80145ee: f203 23ee addw r3, r3, #750 ; 0x2ee + tmp1 = z4 + MULTIPLY(z1, FIX_0_899976223); /* (c6-c14)[16] = (c3-c7)[8] */ + 80145f2: fb05 1509 mla r5, r5, r9, r1 + z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + + tmp11 = z1 + z3; + + tmp1 = MULTIPLY(z1 + z2, FIX(1.353318001)); /* c3 */ + tmp2 = MULTIPLY(tmp11, FIX(1.247225013)); /* c5 */ + 80145f6: f242 79e9 movw r9, #10217 ; 0x27e9 + tmp3 = z4 - MULTIPLY(z2, FIX(0.509795579)); /* (c10-c14)[16] = (c5-c7)[8] */ + 80145fa: fb03 110c mla r1, r3, ip, r1 + tmp20 = tmp10 + tmp0; + 80145fe: eb07 030e add.w r3, r7, lr + 8014602: 9301 str r3, [sp, #4] + tmp27 = tmp10 - tmp0; + 8014604: eba7 030e sub.w r3, r7, lr + 8014608: 9302 str r3, [sp, #8] + tmp21 = tmp12 + tmp1; + 801460a: 1973 adds r3, r6, r5 + 801460c: 9303 str r3, [sp, #12] + tmp26 = tmp12 - tmp1; + 801460e: 1b73 subs r3, r6, r5 + z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + 8014610: f9bb 5050 ldrsh.w r5, [fp, #80] ; 0x50 + tmp26 = tmp12 - tmp1; + 8014614: 9304 str r3, [sp, #16] + tmp22 = tmp13 + tmp2; + 8014616: 1913 adds r3, r2, r4 + 8014618: 9305 str r3, [sp, #20] + tmp25 = tmp13 - tmp2; + 801461a: 1b13 subs r3, r2, r4 + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 801461c: f8da 2020 ldr.w r2, [sl, #32] + tmp25 = tmp13 - tmp2; + 8014620: 9306 str r3, [sp, #24] + tmp23 = tmp11 + tmp3; + 8014622: 1843 adds r3, r0, r1 + z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + 8014624: f8da 40e0 ldr.w r4, [sl, #224] ; 0xe0 + tmp23 = tmp11 + tmp3; + 8014628: 9307 str r3, [sp, #28] + tmp24 = tmp11 - tmp3; + 801462a: 1a43 subs r3, r0, r1 + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 801462c: f9bb 1010 ldrsh.w r1, [fp, #16] + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + 8014630: f8da 0060 ldr.w r0, [sl, #96] ; 0x60 + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 8014634: 4351 muls r1, r2 + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + 8014636: f9bb 2030 ldrsh.w r2, [fp, #48] ; 0x30 + tmp24 = tmp11 - tmp3; + 801463a: 9308 str r3, [sp, #32] + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + 801463c: 4342 muls r2, r0 + z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + 801463e: f8da 00a0 ldr.w r0, [sl, #160] ; 0xa0 + 8014642: 4345 muls r5, r0 + z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + 8014644: f9bb 0070 ldrsh.w r0, [fp, #112] ; 0x70 + tmp1 = MULTIPLY(z1 + z2, FIX(1.353318001)); /* c3 */ + 8014648: 188e adds r6, r1, r2 + z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + 801464a: 4360 muls r0, r4 + tmp1 = MULTIPLY(z1 + z2, FIX(1.353318001)); /* c3 */ + 801464c: f642 344e movw r4, #11086 ; 0x2b4e + tmp11 = z1 + z3; + 8014650: 194f adds r7, r1, r5 + tmp1 = MULTIPLY(z1 + z2, FIX(1.353318001)); /* c3 */ + 8014652: 4366 muls r6, r4 + tmp3 = MULTIPLY(z1 + z4, FIX(1.093201867)); /* c7 */ + 8014654: eb01 0e00 add.w lr, r1, r0 + 8014658: f242 24fc movw r4, #8956 ; 0x22fc + tmp10 = MULTIPLY(z1 - z4, FIX(0.897167586)); /* c9 */ + 801465c: eba1 0c00 sub.w ip, r1, r0 + tmp2 = MULTIPLY(tmp11, FIX(1.247225013)); /* c5 */ + 8014660: fb09 f907 mul.w r9, r9, r7 + tmp3 = MULTIPLY(z1 + z4, FIX(1.093201867)); /* c7 */ + 8014664: fb04 fe0e mul.w lr, r4, lr + tmp10 = MULTIPLY(z1 - z4, FIX(0.897167586)); /* c9 */ + 8014668: f641 44b6 movw r4, #7350 ; 0x1cb6 + 801466c: fb04 fc0c mul.w ip, r4, ip + tmp11 = MULTIPLY(tmp11, FIX(0.666655658)); /* c11 */ + 8014670: f241 5455 movw r4, #5461 ; 0x1555 + 8014674: fb04 f307 mul.w r3, r4, r7 + tmp12 = MULTIPLY(z1 - z2, FIX(0.410524528)); /* c13 */ + 8014678: 1a8c subs r4, r1, r2 + tmp0 = tmp1 + tmp2 + tmp3 - + 801467a: eb06 0709 add.w r7, r6, r9 + tmp11 = MULTIPLY(tmp11, FIX(0.666655658)); /* c11 */ + 801467e: 9309 str r3, [sp, #36] ; 0x24 + tmp12 = MULTIPLY(z1 - z2, FIX(0.410524528)); /* c13 */ + 8014680: f640 5323 movw r3, #3363 ; 0xd23 + tmp0 = tmp1 + tmp2 + tmp3 - + 8014684: 4477 add r7, lr + tmp12 = MULTIPLY(z1 - z2, FIX(0.410524528)); /* c13 */ + 8014686: 435c muls r4, r3 + tmp0 = tmp1 + tmp2 + tmp3 - + 8014688: 4b98 ldr r3, [pc, #608] ; (80148ec ) + 801468a: fb03 7701 mla r7, r3, r1, r7 + MULTIPLY(z1, FIX(2.286341144)); /* c7+c5+c3-c1 */ + tmp13 = tmp10 + tmp11 + tmp12 - + 801468e: 9b09 ldr r3, [sp, #36] ; 0x24 + tmp12 = MULTIPLY(z1 - z2, FIX(0.410524528)); /* c13 */ + 8014690: 940a str r4, [sp, #40] ; 0x28 + tmp13 = tmp10 + tmp11 + tmp12 - + 8014692: eb0c 0403 add.w r4, ip, r3 + 8014696: 9b0a ldr r3, [sp, #40] ; 0x28 + 8014698: 441c add r4, r3 + 801469a: 4b95 ldr r3, [pc, #596] ; (80148f0 ) + 801469c: fb03 4101 mla r1, r3, r1, r4 + MULTIPLY(z1, FIX(1.835730603)); /* c9+c11+c13-c15 */ + z1 = MULTIPLY(z2 + z3, FIX(0.138617169)); /* c15 */ + 80146a0: 1954 adds r4, r2, r5 + tmp1 += z1 + MULTIPLY(z2, FIX(0.071888074)); /* c9+c11-c3-c15 */ + tmp2 += z1 - MULTIPLY(z3, FIX(1.125726048)); /* c5+c7+c15-c3 */ + 80146a2: 4b94 ldr r3, [pc, #592] ; (80148f4 ) + tmp13 = tmp10 + tmp11 + tmp12 - + 80146a4: 910b str r1, [sp, #44] ; 0x2c + z1 = MULTIPLY(z2 + z3, FIX(0.138617169)); /* c15 */ + 80146a6: f44f 618e mov.w r1, #1136 ; 0x470 + 80146aa: 434c muls r4, r1 + tmp1 += z1 + MULTIPLY(z2, FIX(0.071888074)); /* c9+c11-c3-c15 */ + 80146ac: f240 214d movw r1, #589 ; 0x24d + 80146b0: fb01 4102 mla r1, r1, r2, r4 + tmp2 += z1 - MULTIPLY(z3, FIX(1.125726048)); /* c5+c7+c15-c3 */ + 80146b4: fb03 4405 mla r4, r3, r5, r4 + z1 = MULTIPLY(z3 - z2, FIX(1.407403738)); /* c1 */ + tmp11 += z1 - MULTIPLY(z3, FIX(0.766367282)); /* c1+c11-c9-c13 */ + 80146b8: f503 6338 add.w r3, r3, #2944 ; 0xb80 + tmp1 += z1 + MULTIPLY(z2, FIX(0.071888074)); /* c9+c11-c3-c15 */ + 80146bc: 440e add r6, r1 + z1 = MULTIPLY(z3 - z2, FIX(1.407403738)); /* c1 */ + 80146be: 1aa9 subs r1, r5, r2 + tmp2 += z1 - MULTIPLY(z3, FIX(1.125726048)); /* c5+c7+c15-c3 */ + 80146c0: 444c add r4, r9 + z1 = MULTIPLY(z3 - z2, FIX(1.407403738)); /* c1 */ + 80146c2: f642 5909 movw r9, #11529 ; 0x2d09 + 80146c6: fb09 f101 mul.w r1, r9, r1 + tmp11 += z1 - MULTIPLY(z3, FIX(0.766367282)); /* c1+c11-c9-c13 */ + 80146ca: fb03 1905 mla r9, r3, r5, r1 + 80146ce: 9b09 ldr r3, [sp, #36] ; 0x24 + 80146d0: 4499 add r9, r3 + tmp12 += z1 + MULTIPLY(z2, FIX(1.971951411)); /* c1+c5+c13-c7 */ + 80146d2: f643 731a movw r3, #16154 ; 0x3f1a + 80146d6: fb03 1102 mla r1, r3, r2, r1 + 80146da: 9b0a ldr r3, [sp, #40] ; 0x28 + z2 += z4; + 80146dc: 4402 add r2, r0 + tmp12 += z1 + MULTIPLY(z2, FIX(1.971951411)); /* c1+c5+c13-c7 */ + 80146de: 18cb adds r3, r1, r3 + 80146e0: 9309 str r3, [sp, #36] ; 0x24 + z1 = MULTIPLY(z2, - FIX(0.666655658)); /* -c11 */ + 80146e2: 4b85 ldr r3, [pc, #532] ; (80148f8 ) + 80146e4: fb03 f102 mul.w r1, r3, r2 + tmp1 += z1; + tmp3 += z1 + MULTIPLY(z4, FIX(1.065388962)); /* c3+c11+c15-c7 */ + 80146e8: f242 2318 movw r3, #8728 ; 0x2218 + tmp1 += z1; + 80146ec: 440e add r6, r1 + tmp3 += z1 + MULTIPLY(z4, FIX(1.065388962)); /* c3+c11+c15-c7 */ + 80146ee: fb03 1100 mla r1, r3, r0, r1 + z2 = MULTIPLY(z2, - FIX(1.247225013)); /* -c5 */ + 80146f2: 4b82 ldr r3, [pc, #520] ; (80148fc ) + tmp3 += z1 + MULTIPLY(z4, FIX(1.065388962)); /* c3+c11+c15-c7 */ + 80146f4: 4471 add r1, lr + tmp10 += z2 + MULTIPLY(z4, FIX(3.141271809)); /* c1+c5+c9-c13 */ + 80146f6: f246 4e85 movw lr, #25733 ; 0x6485 + z2 = MULTIPLY(z2, - FIX(1.247225013)); /* -c5 */ + 80146fa: 435a muls r2, r3 + tmp12 += z2; + 80146fc: 9b09 ldr r3, [sp, #36] ; 0x24 + tmp10 += z2 + MULTIPLY(z4, FIX(3.141271809)); /* c1+c5+c9-c13 */ + 80146fe: fb0e 2e00 mla lr, lr, r0, r2 + tmp12 += z2; + 8014702: 441a add r2, r3 + z2 = MULTIPLY(z3 + z4, - FIX(1.353318001)); /* -c3 */ + 8014704: 4b7e ldr r3, [pc, #504] ; (8014900 ) + tmp10 += z2 + MULTIPLY(z4, FIX(3.141271809)); /* c1+c5+c9-c13 */ + 8014706: 44e6 add lr, ip + z2 = MULTIPLY(z3 + z4, - FIX(1.353318001)); /* -c3 */ + 8014708: eb05 0c00 add.w ip, r5, r0 + tmp2 += z2; + tmp3 += z2; + z2 = MULTIPLY(z4 - z3, FIX(0.410524528)); /* c13 */ + 801470c: 1b40 subs r0, r0, r5 + z2 = MULTIPLY(z3 + z4, - FIX(1.353318001)); /* -c3 */ + 801470e: fb03 fc0c mul.w ip, r3, ip + z2 = MULTIPLY(z4 - z3, FIX(0.410524528)); /* c13 */ + 8014712: f640 5323 movw r3, #3363 ; 0xd23 + 8014716: 4358 muls r0, r3 + tmp10 += z2; + tmp11 += z2; + + /* Final output stage */ + + wsptr[8*0] = (int) RIGHT_SHIFT(tmp20 + tmp0, CONST_BITS-PASS1_BITS); + 8014718: 9b01 ldr r3, [sp, #4] + tmp2 += z2; + 801471a: 4464 add r4, ip + tmp3 += z2; + 801471c: 4461 add r1, ip + wsptr[8*0] = (int) RIGHT_SHIFT(tmp20 + tmp0, CONST_BITS-PASS1_BITS); + 801471e: 19dd adds r5, r3, r7 + 8014720: 9b00 ldr r3, [sp, #0] + tmp10 += z2; + 8014722: 4486 add lr, r0 + tmp11 += z2; + 8014724: 4448 add r0, r9 + wsptr[8*0] = (int) RIGHT_SHIFT(tmp20 + tmp0, CONST_BITS-PASS1_BITS); + 8014726: 12ed asrs r5, r5, #11 + 8014728: 601d str r5, [r3, #0] + wsptr[8*15] = (int) RIGHT_SHIFT(tmp20 - tmp0, CONST_BITS-PASS1_BITS); + 801472a: 9b01 ldr r3, [sp, #4] + 801472c: 1bdd subs r5, r3, r7 + 801472e: 9b00 ldr r3, [sp, #0] + 8014730: 12ed asrs r5, r5, #11 + 8014732: f8c3 51e0 str.w r5, [r3, #480] ; 0x1e0 + wsptr[8*1] = (int) RIGHT_SHIFT(tmp21 + tmp1, CONST_BITS-PASS1_BITS); + 8014736: 9b03 ldr r3, [sp, #12] + 8014738: 199d adds r5, r3, r6 + 801473a: 9b00 ldr r3, [sp, #0] + 801473c: 12ed asrs r5, r5, #11 + 801473e: 621d str r5, [r3, #32] + wsptr[8*14] = (int) RIGHT_SHIFT(tmp21 - tmp1, CONST_BITS-PASS1_BITS); + 8014740: 9b03 ldr r3, [sp, #12] + 8014742: 1b9d subs r5, r3, r6 + 8014744: 9b00 ldr r3, [sp, #0] + 8014746: 12ed asrs r5, r5, #11 + 8014748: f8c3 51c0 str.w r5, [r3, #448] ; 0x1c0 + wsptr[8*2] = (int) RIGHT_SHIFT(tmp22 + tmp2, CONST_BITS-PASS1_BITS); + 801474c: 9b05 ldr r3, [sp, #20] + 801474e: 191d adds r5, r3, r4 + 8014750: 9b00 ldr r3, [sp, #0] + 8014752: 12ed asrs r5, r5, #11 + 8014754: 641d str r5, [r3, #64] ; 0x40 + wsptr[8*13] = (int) RIGHT_SHIFT(tmp22 - tmp2, CONST_BITS-PASS1_BITS); + 8014756: 9b05 ldr r3, [sp, #20] + 8014758: 1b1c subs r4, r3, r4 + 801475a: 9b00 ldr r3, [sp, #0] + 801475c: 12e4 asrs r4, r4, #11 + 801475e: f8c3 41a0 str.w r4, [r3, #416] ; 0x1a0 + wsptr[8*3] = (int) RIGHT_SHIFT(tmp23 + tmp3, CONST_BITS-PASS1_BITS); + 8014762: 9b07 ldr r3, [sp, #28] + 8014764: 185c adds r4, r3, r1 + 8014766: 9b00 ldr r3, [sp, #0] + 8014768: 12e4 asrs r4, r4, #11 + 801476a: 661c str r4, [r3, #96] ; 0x60 + wsptr[8*12] = (int) RIGHT_SHIFT(tmp23 - tmp3, CONST_BITS-PASS1_BITS); + 801476c: 9b07 ldr r3, [sp, #28] + 801476e: 1a59 subs r1, r3, r1 + 8014770: 9b00 ldr r3, [sp, #0] + 8014772: 12c9 asrs r1, r1, #11 + 8014774: f8c3 1180 str.w r1, [r3, #384] ; 0x180 + wsptr[8*4] = (int) RIGHT_SHIFT(tmp24 + tmp10, CONST_BITS-PASS1_BITS); + 8014778: 9b08 ldr r3, [sp, #32] + 801477a: eb03 010e add.w r1, r3, lr + 801477e: 9b00 ldr r3, [sp, #0] + 8014780: 12c9 asrs r1, r1, #11 + 8014782: f8c3 1080 str.w r1, [r3, #128] ; 0x80 + wsptr[8*11] = (int) RIGHT_SHIFT(tmp24 - tmp10, CONST_BITS-PASS1_BITS); + 8014786: 9b08 ldr r3, [sp, #32] + 8014788: eba3 010e sub.w r1, r3, lr + 801478c: 9b00 ldr r3, [sp, #0] + 801478e: 12c9 asrs r1, r1, #11 + 8014790: f8c3 1160 str.w r1, [r3, #352] ; 0x160 + wsptr[8*5] = (int) RIGHT_SHIFT(tmp25 + tmp11, CONST_BITS-PASS1_BITS); + 8014794: 9b06 ldr r3, [sp, #24] + 8014796: 1819 adds r1, r3, r0 + 8014798: 9b00 ldr r3, [sp, #0] + 801479a: 12c9 asrs r1, r1, #11 + 801479c: f8c3 10a0 str.w r1, [r3, #160] ; 0xa0 + wsptr[8*10] = (int) RIGHT_SHIFT(tmp25 - tmp11, CONST_BITS-PASS1_BITS); + 80147a0: 9b06 ldr r3, [sp, #24] + 80147a2: 1a19 subs r1, r3, r0 + 80147a4: 9b00 ldr r3, [sp, #0] + 80147a6: 12c9 asrs r1, r1, #11 + 80147a8: f8c3 1140 str.w r1, [r3, #320] ; 0x140 + wsptr[8*6] = (int) RIGHT_SHIFT(tmp26 + tmp12, CONST_BITS-PASS1_BITS); + 80147ac: 9b04 ldr r3, [sp, #16] + 80147ae: 1899 adds r1, r3, r2 + 80147b0: 9b00 ldr r3, [sp, #0] + 80147b2: 12c9 asrs r1, r1, #11 + 80147b4: f8c3 10c0 str.w r1, [r3, #192] ; 0xc0 + wsptr[8*9] = (int) RIGHT_SHIFT(tmp26 - tmp12, CONST_BITS-PASS1_BITS); + 80147b8: 9b04 ldr r3, [sp, #16] + 80147ba: 1a9a subs r2, r3, r2 + 80147bc: 9b00 ldr r3, [sp, #0] + 80147be: 12d2 asrs r2, r2, #11 + 80147c0: f8c3 2120 str.w r2, [r3, #288] ; 0x120 + wsptr[8*7] = (int) RIGHT_SHIFT(tmp27 + tmp13, CONST_BITS-PASS1_BITS); + 80147c4: 9b02 ldr r3, [sp, #8] + 80147c6: 9a0b ldr r2, [sp, #44] ; 0x2c + 80147c8: 189a adds r2, r3, r2 + 80147ca: 9b00 ldr r3, [sp, #0] + 80147cc: 12d2 asrs r2, r2, #11 + 80147ce: f8c3 20e0 str.w r2, [r3, #224] ; 0xe0 + wsptr[8*8] = (int) RIGHT_SHIFT(tmp27 - tmp13, CONST_BITS-PASS1_BITS); + 80147d2: 9b02 ldr r3, [sp, #8] + 80147d4: 9a0b ldr r2, [sp, #44] ; 0x2c + 80147d6: 1a9a subs r2, r3, r2 + 80147d8: 9b00 ldr r3, [sp, #0] + 80147da: 12d2 asrs r2, r2, #11 + for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) { + 80147dc: 3304 adds r3, #4 + wsptr[8*8] = (int) RIGHT_SHIFT(tmp27 - tmp13, CONST_BITS-PASS1_BITS); + 80147de: f8c3 20fc str.w r2, [r3, #252] ; 0xfc + for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) { + 80147e2: 9300 str r3, [sp, #0] + 80147e4: 9b0d ldr r3, [sp, #52] ; 0x34 + 80147e6: 455b cmp r3, fp + 80147e8: f47f aecd bne.w 8014586 + 80147ec: 9b0c ldr r3, [sp, #48] ; 0x30 + 80147ee: 3b04 subs r3, #4 + 80147f0: 9301 str r3, [sp, #4] + 80147f2: 9b0c ldr r3, [sp, #48] ; 0x30 + 80147f4: 333c adds r3, #60 ; 0x3c + 80147f6: 930d str r3, [sp, #52] ; 0x34 + } + + /* Pass 2: process 16 rows from work array, store into output array. */ + + wsptr = workspace; + 80147f8: ab0e add r3, sp, #56 ; 0x38 + 80147fa: 9300 str r3, [sp, #0] + for (ctr = 0; ctr < 16; ctr++) { + outptr = output_buf[ctr] + output_col; + 80147fc: 9b01 ldr r3, [sp, #4] + tmp0 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + tmp0 <<= CONST_BITS; + + z1 = (INT32) wsptr[4]; + tmp1 = MULTIPLY(z1, FIX(1.306562965)); /* c4[16] = c2[8] */ + tmp2 = MULTIPLY(z1, FIX_0_541196100); /* c12[16] = c6[8] */ + 80147fe: f241 1051 movw r0, #4433 ; 0x1151 + tmp1 = MULTIPLY(z1, FIX(1.306562965)); /* c4[16] = c2[8] */ + 8014802: f642 14cf movw r4, #10703 ; 0x29cf + + z1 = (INT32) wsptr[2]; + z2 = (INT32) wsptr[6]; + z3 = z1 - z2; + z4 = MULTIPLY(z3, FIX(0.275899379)); /* c14[16] = c7[8] */ + z3 = MULTIPLY(z3, FIX(1.387039845)); /* c2[16] = c1[8] */ + 8014806: f642 4663 movw r6, #11363 ; 0x2c63 + outptr = output_buf[ctr] + output_col; + 801480a: f853 2f04 ldr.w r2, [r3, #4]! + + tmp0 = z3 + MULTIPLY(z2, FIX_2_562915447); /* (c6+c2)[16] = (c3+c1)[8] */ + 801480e: f245 2703 movw r7, #20995 ; 0x5203 + tmp1 = z4 + MULTIPLY(z1, FIX_0_899976223); /* (c6-c14)[16] = (c3-c7)[8] */ + tmp2 = z3 - MULTIPLY(z1, FIX(0.601344887)); /* (c2-c10)[16] = (c1-c5)[8] */ + 8014812: 4d35 ldr r5, [pc, #212] ; (80148e8 ) + outptr = output_buf[ctr] + output_col; + 8014814: 920c str r2, [sp, #48] ; 0x30 + 8014816: 9301 str r3, [sp, #4] + 8014818: 4613 mov r3, r2 + 801481a: 9a98 ldr r2, [sp, #608] ; 0x260 + 801481c: 1899 adds r1, r3, r2 + tmp0 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + 801481e: 9b00 ldr r3, [sp, #0] + z1 = (INT32) wsptr[4]; + 8014820: 9a00 ldr r2, [sp, #0] + tmp0 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + 8014822: 681b ldr r3, [r3, #0] + z1 = (INT32) wsptr[4]; + 8014824: 6912 ldr r2, [r2, #16] + tmp0 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + 8014826: 3310 adds r3, #16 + tmp1 = MULTIPLY(z1, FIX(1.306562965)); /* c4[16] = c2[8] */ + 8014828: 4354 muls r4, r2 + tmp2 = MULTIPLY(z1, FIX_0_541196100); /* c12[16] = c6[8] */ + 801482a: 4342 muls r2, r0 + z4 = MULTIPLY(z3, FIX(0.275899379)); /* c14[16] = c7[8] */ + 801482c: f640 00d4 movw r0, #2260 ; 0x8d4 + tmp10 = tmp0 + tmp1; + 8014830: eb04 3e43 add.w lr, r4, r3, lsl #13 + tmp12 = tmp0 + tmp2; + 8014834: eb02 3c43 add.w ip, r2, r3, lsl #13 + tmp11 = tmp0 - tmp1; + 8014838: ebc4 3443 rsb r4, r4, r3, lsl #13 + tmp13 = tmp0 - tmp2; + 801483c: ebc2 3243 rsb r2, r2, r3, lsl #13 + z1 = (INT32) wsptr[2]; + 8014840: 9b00 ldr r3, [sp, #0] + 8014842: f8d3 9008 ldr.w r9, [r3, #8] + z2 = (INT32) wsptr[6]; + 8014846: f8d3 a018 ldr.w sl, [r3, #24] + z3 = z1 - z2; + 801484a: eba9 030a sub.w r3, r9, sl + z4 = MULTIPLY(z3, FIX(0.275899379)); /* c14[16] = c7[8] */ + 801484e: 4358 muls r0, r3 + z3 = MULTIPLY(z3, FIX(1.387039845)); /* c2[16] = c1[8] */ + 8014850: 4373 muls r3, r6 + tmp1 = z4 + MULTIPLY(z1, FIX_0_899976223); /* (c6-c14)[16] = (c3-c7)[8] */ + 8014852: f641 46cd movw r6, #7373 ; 0x1ccd + tmp0 = z3 + MULTIPLY(z2, FIX_2_562915447); /* (c6+c2)[16] = (c3+c1)[8] */ + 8014856: fb07 370a mla r7, r7, sl, r3 + tmp2 = z3 - MULTIPLY(z1, FIX(0.601344887)); /* (c2-c10)[16] = (c1-c5)[8] */ + 801485a: fb05 3309 mla r3, r5, r9, r3 + tmp3 = z4 - MULTIPLY(z2, FIX(0.509795579)); /* (c10-c14)[16] = (c5-c7)[8] */ + 801485e: f205 25ee addw r5, r5, #750 ; 0x2ee + tmp1 = z4 + MULTIPLY(z1, FIX_0_899976223); /* (c6-c14)[16] = (c3-c7)[8] */ + 8014862: fb06 0609 mla r6, r6, r9, r0 + z4 = (INT32) wsptr[7]; + + tmp11 = z1 + z3; + + tmp1 = MULTIPLY(z1 + z2, FIX(1.353318001)); /* c3 */ + tmp2 = MULTIPLY(tmp11, FIX(1.247225013)); /* c5 */ + 8014866: f242 79e9 movw r9, #10217 ; 0x27e9 + tmp3 = z4 - MULTIPLY(z2, FIX(0.509795579)); /* (c10-c14)[16] = (c5-c7)[8] */ + 801486a: fb05 000a mla r0, r5, sl, r0 + tmp20 = tmp10 + tmp0; + 801486e: eb0e 0507 add.w r5, lr, r7 + 8014872: 9502 str r5, [sp, #8] + tmp27 = tmp10 - tmp0; + 8014874: ebae 0507 sub.w r5, lr, r7 + 8014878: 9503 str r5, [sp, #12] + tmp21 = tmp12 + tmp1; + 801487a: eb0c 0506 add.w r5, ip, r6 + 801487e: 9504 str r5, [sp, #16] + tmp26 = tmp12 - tmp1; + 8014880: ebac 0506 sub.w r5, ip, r6 + 8014884: 9505 str r5, [sp, #20] + tmp22 = tmp13 + tmp2; + 8014886: 18d5 adds r5, r2, r3 + tmp25 = tmp13 - tmp2; + 8014888: 1ad3 subs r3, r2, r3 + tmp22 = tmp13 + tmp2; + 801488a: 9506 str r5, [sp, #24] + tmp3 = MULTIPLY(z1 + z4, FIX(1.093201867)); /* c7 */ + tmp10 = MULTIPLY(z1 - z4, FIX(0.897167586)); /* c9 */ + tmp11 = MULTIPLY(tmp11, FIX(0.666655658)); /* c11 */ + tmp12 = MULTIPLY(z1 - z2, FIX(0.410524528)); /* c13 */ + 801488c: f640 5523 movw r5, #3363 ; 0xd23 + tmp25 = tmp13 - tmp2; + 8014890: 9307 str r3, [sp, #28] + tmp23 = tmp11 + tmp3; + 8014892: 1823 adds r3, r4, r0 + 8014894: 9308 str r3, [sp, #32] + tmp24 = tmp11 - tmp3; + 8014896: 1a23 subs r3, r4, r0 + z3 = (INT32) wsptr[5]; + 8014898: 9800 ldr r0, [sp, #0] + tmp1 = MULTIPLY(z1 + z2, FIX(1.353318001)); /* c3 */ + 801489a: f642 344e movw r4, #11086 ; 0x2b4e + tmp24 = tmp11 - tmp3; + 801489e: 9309 str r3, [sp, #36] ; 0x24 + z1 = (INT32) wsptr[1]; + 80148a0: 9b00 ldr r3, [sp, #0] + z3 = (INT32) wsptr[5]; + 80148a2: 6947 ldr r7, [r0, #20] + z1 = (INT32) wsptr[1]; + 80148a4: 685a ldr r2, [r3, #4] + z2 = (INT32) wsptr[3]; + 80148a6: 68db ldr r3, [r3, #12] + z4 = (INT32) wsptr[7]; + 80148a8: 69c0 ldr r0, [r0, #28] + tmp11 = z1 + z3; + 80148aa: eb02 0a07 add.w sl, r2, r7 + tmp1 = MULTIPLY(z1 + z2, FIX(1.353318001)); /* c3 */ + 80148ae: 18d6 adds r6, r2, r3 + tmp12 = MULTIPLY(z1 - z2, FIX(0.410524528)); /* c13 */ + 80148b0: eba2 0b03 sub.w fp, r2, r3 + tmp3 = MULTIPLY(z1 + z4, FIX(1.093201867)); /* c7 */ + 80148b4: eb02 0e00 add.w lr, r2, r0 + tmp10 = MULTIPLY(z1 - z4, FIX(0.897167586)); /* c9 */ + 80148b8: eba2 0c00 sub.w ip, r2, r0 + tmp1 = MULTIPLY(z1 + z2, FIX(1.353318001)); /* c3 */ + 80148bc: 4366 muls r6, r4 + tmp3 = MULTIPLY(z1 + z4, FIX(1.093201867)); /* c7 */ + 80148be: f242 24fc movw r4, #8956 ; 0x22fc + tmp2 = MULTIPLY(tmp11, FIX(1.247225013)); /* c5 */ + 80148c2: fb09 f90a mul.w r9, r9, sl + tmp3 = MULTIPLY(z1 + z4, FIX(1.093201867)); /* c7 */ + 80148c6: fb04 fe0e mul.w lr, r4, lr + tmp10 = MULTIPLY(z1 - z4, FIX(0.897167586)); /* c9 */ + 80148ca: f641 44b6 movw r4, #7350 ; 0x1cb6 + tmp12 = MULTIPLY(z1 - z2, FIX(0.410524528)); /* c13 */ + 80148ce: fb05 fb0b mul.w fp, r5, fp + tmp0 = tmp1 + tmp2 + tmp3 - + 80148d2: 4d06 ldr r5, [pc, #24] ; (80148ec ) + tmp10 = MULTIPLY(z1 - z4, FIX(0.897167586)); /* c9 */ + 80148d4: fb04 fc0c mul.w ip, r4, ip + tmp11 = MULTIPLY(tmp11, FIX(0.666655658)); /* c11 */ + 80148d8: f241 5455 movw r4, #5461 ; 0x1555 + 80148dc: fb04 fa0a mul.w sl, r4, sl + tmp0 = tmp1 + tmp2 + tmp3 - + 80148e0: eb06 0409 add.w r4, r6, r9 + 80148e4: 4474 add r4, lr + 80148e6: e00d b.n 8014904 + 80148e8: ffffecc2 .word 0xffffecc2 + 80148ec: ffffb6d6 .word 0xffffb6d6 + 80148f0: ffffc542 .word 0xffffc542 + 80148f4: ffffdbfa .word 0xffffdbfa + 80148f8: ffffeaab .word 0xffffeaab + 80148fc: ffffd817 .word 0xffffd817 + 8014900: ffffd4b2 .word 0xffffd4b2 + 8014904: fb05 4402 mla r4, r5, r2, r4 + MULTIPLY(z1, FIX(2.286341144)); /* c7+c5+c3-c1 */ + tmp13 = tmp10 + tmp11 + tmp12 - + 8014908: f605 656c addw r5, r5, #3692 ; 0xe6c + tmp0 = tmp1 + tmp2 + tmp3 - + 801490c: 940a str r4, [sp, #40] ; 0x28 + tmp13 = tmp10 + tmp11 + tmp12 - + 801490e: eb0c 040a add.w r4, ip, sl + 8014912: 445c add r4, fp + 8014914: fb05 4202 mla r2, r5, r2, r4 + MULTIPLY(z1, FIX(1.835730603)); /* c9+c11+c13-c15 */ + z1 = MULTIPLY(z2 + z3, FIX(0.138617169)); /* c15 */ + 8014918: 19dc adds r4, r3, r7 + tmp1 += z1 + MULTIPLY(z2, FIX(0.071888074)); /* c9+c11-c3-c15 */ + tmp2 += z1 - MULTIPLY(z3, FIX(1.125726048)); /* c5+c7+c15-c3 */ + z1 = MULTIPLY(z3 - z2, FIX(1.407403738)); /* c1 */ + tmp11 += z1 - MULTIPLY(z3, FIX(0.766367282)); /* c1+c11-c9-c13 */ + 801491a: 4d5e ldr r5, [pc, #376] ; (8014a94 ) + tmp13 = tmp10 + tmp11 + tmp12 - + 801491c: 920b str r2, [sp, #44] ; 0x2c + z1 = MULTIPLY(z2 + z3, FIX(0.138617169)); /* c15 */ + 801491e: f44f 628e mov.w r2, #1136 ; 0x470 + 8014922: 4354 muls r4, r2 + tmp1 += z1 + MULTIPLY(z2, FIX(0.071888074)); /* c9+c11-c3-c15 */ + 8014924: f240 224d movw r2, #589 ; 0x24d + 8014928: fb02 4203 mla r2, r2, r3, r4 + 801492c: 4416 add r6, r2 + tmp2 += z1 - MULTIPLY(z3, FIX(1.125726048)); /* c5+c7+c15-c3 */ + 801492e: 4a5a ldr r2, [pc, #360] ; (8014a98 ) + 8014930: fb02 4407 mla r4, r2, r7, r4 + z1 = MULTIPLY(z3 - z2, FIX(1.407403738)); /* c1 */ + 8014934: 1afa subs r2, r7, r3 + tmp2 += z1 - MULTIPLY(z3, FIX(1.125726048)); /* c5+c7+c15-c3 */ + 8014936: 444c add r4, r9 + z1 = MULTIPLY(z3 - z2, FIX(1.407403738)); /* c1 */ + 8014938: f642 5909 movw r9, #11529 ; 0x2d09 + 801493c: fb09 f202 mul.w r2, r9, r2 + tmp11 += z1 - MULTIPLY(z3, FIX(0.766367282)); /* c1+c11-c9-c13 */ + 8014940: fb05 2907 mla r9, r5, r7, r2 + tmp12 += z1 + MULTIPLY(z2, FIX(1.971951411)); /* c1+c5+c13-c7 */ + z2 += z4; + z1 = MULTIPLY(z2, - FIX(0.666655658)); /* -c11 */ + tmp1 += z1; + tmp3 += z1 + MULTIPLY(z4, FIX(1.065388962)); /* c3+c11+c15-c7 */ + z2 = MULTIPLY(z2, - FIX(1.247225013)); /* -c5 */ + 8014944: f6a5 7563 subw r5, r5, #3939 ; 0xf63 + tmp11 += z1 - MULTIPLY(z3, FIX(0.766367282)); /* c1+c11-c9-c13 */ + 8014948: 44d1 add r9, sl + tmp12 += z1 + MULTIPLY(z2, FIX(1.971951411)); /* c1+c5+c13-c7 */ + 801494a: f643 7a1a movw sl, #16154 ; 0x3f1a + 801494e: fb0a 2203 mla r2, sl, r3, r2 + z2 += z4; + 8014952: 4403 add r3, r0 + tmp12 += z1 + MULTIPLY(z2, FIX(1.971951411)); /* c1+c5+c13-c7 */ + 8014954: eb02 0a0b add.w sl, r2, fp + z1 = MULTIPLY(z2, - FIX(0.666655658)); /* -c11 */ + 8014958: 4a50 ldr r2, [pc, #320] ; (8014a9c ) + tmp3 += z1 + MULTIPLY(z4, FIX(1.065388962)); /* c3+c11+c15-c7 */ + 801495a: f242 2b18 movw fp, #8728 ; 0x2218 + z1 = MULTIPLY(z2, - FIX(0.666655658)); /* -c11 */ + 801495e: 435a muls r2, r3 + z2 = MULTIPLY(z2, - FIX(1.247225013)); /* -c5 */ + 8014960: 436b muls r3, r5 + tmp1 += z1; + 8014962: 4416 add r6, r2 + tmp3 += z1 + MULTIPLY(z4, FIX(1.065388962)); /* c3+c11+c15-c7 */ + 8014964: fb0b 2200 mla r2, fp, r0, r2 + tmp10 += z2 + MULTIPLY(z4, FIX(3.141271809)); /* c1+c5+c9-c13 */ + tmp12 += z2; + 8014968: 449a add sl, r3 + tmp3 += z1 + MULTIPLY(z4, FIX(1.065388962)); /* c3+c11+c15-c7 */ + 801496a: 4472 add r2, lr + tmp10 += z2 + MULTIPLY(z4, FIX(3.141271809)); /* c1+c5+c9-c13 */ + 801496c: f246 4e85 movw lr, #25733 ; 0x6485 + 8014970: fb0e 3e00 mla lr, lr, r0, r3 + z2 = MULTIPLY(z3 + z4, - FIX(1.353318001)); /* -c3 */ + 8014974: f46f 7359 mvn.w r3, #868 ; 0x364 + tmp10 += z2 + MULTIPLY(z4, FIX(3.141271809)); /* c1+c5+c9-c13 */ + 8014978: 44e6 add lr, ip + z2 = MULTIPLY(z3 + z4, - FIX(1.353318001)); /* -c3 */ + 801497a: 441d add r5, r3 + 801497c: eb07 0c00 add.w ip, r7, r0 + tmp2 += z2; + tmp3 += z2; + z2 = MULTIPLY(z4 - z3, FIX(0.410524528)); /* c13 */ + 8014980: 1bc0 subs r0, r0, r7 + tmp10 += z2; + tmp11 += z2; + + /* Final output stage */ + + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp0, + 8014982: 9f0a ldr r7, [sp, #40] ; 0x28 + z2 = MULTIPLY(z3 + z4, - FIX(1.353318001)); /* -c3 */ + 8014984: fb05 fc0c mul.w ip, r5, ip + z2 = MULTIPLY(z4 - z3, FIX(0.410524528)); /* c13 */ + 8014988: f640 5523 movw r5, #3363 ; 0xd23 + 801498c: 4368 muls r0, r5 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp0, + 801498e: 9d02 ldr r5, [sp, #8] + tmp2 += z2; + 8014990: 4464 add r4, ip + tmp3 += z2; + 8014992: 4462 add r2, ip + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp0, + 8014994: 19ef adds r7, r5, r7 + 8014996: 9d0c ldr r5, [sp, #48] ; 0x30 + tmp10 += z2; + 8014998: 4486 add lr, r0 + tmp11 += z2; + 801499a: 4448 add r0, r9 + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + 801499c: f3c7 4789 ubfx r7, r7, #18, #10 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp0, + 80149a0: f818 7007 ldrb.w r7, [r8, r7] + 80149a4: 9b98 ldr r3, [sp, #608] ; 0x260 + 80149a6: 54ef strb r7, [r5, r3] + outptr[15] = range_limit[(int) RIGHT_SHIFT(tmp20 - tmp0, + 80149a8: 9b02 ldr r3, [sp, #8] + 80149aa: 9d0a ldr r5, [sp, #40] ; 0x28 + 80149ac: 1b5f subs r7, r3, r5 + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp1, + 80149ae: 9b04 ldr r3, [sp, #16] + & RANGE_MASK]; + 80149b0: f3c7 4789 ubfx r7, r7, #18, #10 + outptr[15] = range_limit[(int) RIGHT_SHIFT(tmp20 - tmp0, + 80149b4: f818 7007 ldrb.w r7, [r8, r7] + 80149b8: 73cf strb r7, [r1, #15] + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp1, + 80149ba: 199f adds r7, r3, r6 + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[14] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp1, + 80149bc: 1b9e subs r6, r3, r6 + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp2, + 80149be: 9b06 ldr r3, [sp, #24] + & RANGE_MASK]; + 80149c0: f3c7 4789 ubfx r7, r7, #18, #10 + & RANGE_MASK]; + 80149c4: f3c6 4689 ubfx r6, r6, #18, #10 + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp1, + 80149c8: f818 7007 ldrb.w r7, [r8, r7] + 80149cc: 704f strb r7, [r1, #1] + outptr[14] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp1, + 80149ce: f818 6006 ldrb.w r6, [r8, r6] + 80149d2: 738e strb r6, [r1, #14] + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp2, + 80149d4: 191e adds r6, r3, r4 + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[13] = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp2, + 80149d6: 1b1c subs r4, r3, r4 + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp23 + tmp3, + 80149d8: 9b08 ldr r3, [sp, #32] + & RANGE_MASK]; + 80149da: f3c6 4689 ubfx r6, r6, #18, #10 + & RANGE_MASK]; + 80149de: f3c4 4489 ubfx r4, r4, #18, #10 + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp2, + 80149e2: f818 6006 ldrb.w r6, [r8, r6] + 80149e6: 708e strb r6, [r1, #2] + outptr[13] = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp2, + 80149e8: f818 4004 ldrb.w r4, [r8, r4] + 80149ec: 734c strb r4, [r1, #13] + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp23 + tmp3, + 80149ee: 189c adds r4, r3, r2 + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[12] = range_limit[(int) RIGHT_SHIFT(tmp23 - tmp3, + 80149f0: 1a9a subs r2, r3, r2 + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp24 + tmp10, + 80149f2: 9b09 ldr r3, [sp, #36] ; 0x24 + & RANGE_MASK]; + 80149f4: f3c4 4489 ubfx r4, r4, #18, #10 + & RANGE_MASK]; + 80149f8: f3c2 4289 ubfx r2, r2, #18, #10 + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp23 + tmp3, + 80149fc: f818 4004 ldrb.w r4, [r8, r4] + 8014a00: 70cc strb r4, [r1, #3] + outptr[12] = range_limit[(int) RIGHT_SHIFT(tmp23 - tmp3, + 8014a02: f818 2002 ldrb.w r2, [r8, r2] + 8014a06: 730a strb r2, [r1, #12] + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp24 + tmp10, + 8014a08: eb03 020e add.w r2, r3, lr + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + 8014a0c: f3c2 4289 ubfx r2, r2, #18, #10 + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp24 + tmp10, + 8014a10: f818 2002 ldrb.w r2, [r8, r2] + 8014a14: 710a strb r2, [r1, #4] + outptr[11] = range_limit[(int) RIGHT_SHIFT(tmp24 - tmp10, + 8014a16: eba3 020e sub.w r2, r3, lr + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp25 + tmp11, + 8014a1a: 9b07 ldr r3, [sp, #28] + & RANGE_MASK]; + 8014a1c: f3c2 4289 ubfx r2, r2, #18, #10 + outptr[11] = range_limit[(int) RIGHT_SHIFT(tmp24 - tmp10, + 8014a20: f818 2002 ldrb.w r2, [r8, r2] + 8014a24: 72ca strb r2, [r1, #11] + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp25 + tmp11, + 8014a26: 181a adds r2, r3, r0 + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + 8014a28: f3c2 4289 ubfx r2, r2, #18, #10 + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp25 + tmp11, + 8014a2c: f818 2002 ldrb.w r2, [r8, r2] + 8014a30: 714a strb r2, [r1, #5] + outptr[10] = range_limit[(int) RIGHT_SHIFT(tmp25 - tmp11, + 8014a32: 1a1a subs r2, r3, r0 + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp26 + tmp12, + 8014a34: 9b05 ldr r3, [sp, #20] + & RANGE_MASK]; + 8014a36: f3c2 4289 ubfx r2, r2, #18, #10 + outptr[10] = range_limit[(int) RIGHT_SHIFT(tmp25 - tmp11, + 8014a3a: f818 2002 ldrb.w r2, [r8, r2] + 8014a3e: 728a strb r2, [r1, #10] + outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp26 + tmp12, + 8014a40: eb03 020a add.w r2, r3, sl + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[9] = range_limit[(int) RIGHT_SHIFT(tmp26 - tmp12, + 8014a44: eba3 030a sub.w r3, r3, sl + & RANGE_MASK]; + 8014a48: f3c2 4289 ubfx r2, r2, #18, #10 + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + 8014a4c: f3c3 4389 ubfx r3, r3, #18, #10 + outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp26 + tmp12, + 8014a50: f818 2002 ldrb.w r2, [r8, r2] + 8014a54: 718a strb r2, [r1, #6] + outptr[9] = range_limit[(int) RIGHT_SHIFT(tmp26 - tmp12, + 8014a56: f818 3003 ldrb.w r3, [r8, r3] + outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp27 + tmp13, + 8014a5a: 9a0b ldr r2, [sp, #44] ; 0x2c + outptr[9] = range_limit[(int) RIGHT_SHIFT(tmp26 - tmp12, + 8014a5c: 724b strb r3, [r1, #9] + outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp27 + tmp13, + 8014a5e: 9b03 ldr r3, [sp, #12] + 8014a60: 4413 add r3, r2 + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + 8014a62: f3c3 4389 ubfx r3, r3, #18, #10 + outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp27 + tmp13, + 8014a66: f818 3003 ldrb.w r3, [r8, r3] + 8014a6a: 71cb strb r3, [r1, #7] + outptr[8] = range_limit[(int) RIGHT_SHIFT(tmp27 - tmp13, + 8014a6c: 9b03 ldr r3, [sp, #12] + 8014a6e: 1a9b subs r3, r3, r2 + for (ctr = 0; ctr < 16; ctr++) { + 8014a70: 9a01 ldr r2, [sp, #4] + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + 8014a72: f3c3 4389 ubfx r3, r3, #18, #10 + outptr[8] = range_limit[(int) RIGHT_SHIFT(tmp27 - tmp13, + 8014a76: f818 3003 ldrb.w r3, [r8, r3] + 8014a7a: 720b strb r3, [r1, #8] + + wsptr += 8; /* advance pointer to next row */ + 8014a7c: 9b00 ldr r3, [sp, #0] + 8014a7e: 3320 adds r3, #32 + 8014a80: 9300 str r3, [sp, #0] + for (ctr = 0; ctr < 16; ctr++) { + 8014a82: 9b0d ldr r3, [sp, #52] ; 0x34 + 8014a84: 4293 cmp r3, r2 + 8014a86: f47f aeb9 bne.w 80147fc + } +} + 8014a8a: f50d 7d0f add.w sp, sp, #572 ; 0x23c + 8014a8e: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 8014a92: bf00 nop + 8014a94: ffffe77a .word 0xffffe77a + 8014a98: ffffdbfa .word 0xffffdbfa + 8014a9c: ffffeaab .word 0xffffeaab + +08014aa0 : + +GLOBAL(void) +jpeg_idct_16x8 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + 8014aa0: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8014aa4: b0d1 sub sp, #324 ; 0x144 + /* Pass 1: process columns from input, store into work array. */ + /* Note results are scaled up by sqrt(8) compared to a true IDCT; */ + /* furthermore, we scale the results by 2**PASS1_BITS. */ + + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + 8014aa6: 6d4d ldr r5, [r1, #84] ; 0x54 +{ + 8014aa8: 9304 str r3, [sp, #16] + wsptr = workspace; + 8014aaa: a910 add r1, sp, #64 ; 0x40 + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + 8014aac: f8d0 314c ldr.w r3, [r0, #332] ; 0x14c + 8014ab0: f103 0b80 add.w fp, r3, #128 ; 0x80 + for (ctr = DCTSIZE; ctr > 0; ctr--) { + 8014ab4: 1e93 subs r3, r2, #2 + 8014ab6: 9301 str r3, [sp, #4] + 8014ab8: f105 0320 add.w r3, r5, #32 + 8014abc: 9305 str r3, [sp, #20] + * DC coefficient (with scale factor as needed). + * With typical images and quantization tables, half or more of the + * column DCT calculations can be simplified this way. + */ + + if (inptr[DCTSIZE*1] == 0 && inptr[DCTSIZE*2] == 0 && + 8014abe: 9b01 ldr r3, [sp, #4] + wsptr[DCTSIZE*6] = dcval; + wsptr[DCTSIZE*7] = dcval; + + inptr++; /* advance pointers to next column */ + quantptr++; + wsptr++; + 8014ac0: 3104 adds r1, #4 + int dcval = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]) << PASS1_BITS; + 8014ac2: f855 0b04 ldr.w r0, [r5], #4 + 8014ac6: 461a mov r2, r3 + if (inptr[DCTSIZE*1] == 0 && inptr[DCTSIZE*2] == 0 && + 8014ac8: f9b3 a012 ldrsh.w sl, [r3, #18] + 8014acc: f9b3 7022 ldrsh.w r7, [r3, #34] ; 0x22 + inptr[DCTSIZE*3] == 0 && inptr[DCTSIZE*4] == 0 && + 8014ad0: f9b3 e032 ldrsh.w lr, [r3, #50] ; 0x32 + 8014ad4: f9b3 6042 ldrsh.w r6, [r3, #66] ; 0x42 + inptr[DCTSIZE*5] == 0 && inptr[DCTSIZE*6] == 0 && + 8014ad8: f9b3 8052 ldrsh.w r8, [r3, #82] ; 0x52 + 8014adc: f9b3 4062 ldrsh.w r4, [r3, #98] ; 0x62 + inptr[DCTSIZE*7] == 0) { + 8014ae0: f9b3 9072 ldrsh.w r9, [r3, #114] ; 0x72 + int dcval = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]) << PASS1_BITS; + 8014ae4: f932 3f02 ldrsh.w r3, [r2, #2]! + 8014ae8: 4343 muls r3, r0 + inptr[DCTSIZE*5] == 0 && inptr[DCTSIZE*6] == 0 && + 8014aea: ea4a 0007 orr.w r0, sl, r7 + int dcval = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]) << PASS1_BITS; + 8014aee: 9201 str r2, [sp, #4] + inptr[DCTSIZE*5] == 0 && inptr[DCTSIZE*6] == 0 && + 8014af0: ea4e 0000 orr.w r0, lr, r0 + 8014af4: 4330 orrs r0, r6 + 8014af6: ea48 0000 orr.w r0, r8, r0 + 8014afa: 4320 orrs r0, r4 + 8014afc: ea59 0000 orrs.w r0, r9, r0 + 8014b00: f040 8152 bne.w 8014da8 + int dcval = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]) << PASS1_BITS; + 8014b04: 009b lsls r3, r3, #2 + wsptr[DCTSIZE*0] = dcval; + 8014b06: f841 3c04 str.w r3, [r1, #-4] + wsptr[DCTSIZE*1] = dcval; + 8014b0a: 61cb str r3, [r1, #28] + wsptr[DCTSIZE*2] = dcval; + 8014b0c: 63cb str r3, [r1, #60] ; 0x3c + wsptr[DCTSIZE*3] = dcval; + 8014b0e: 65cb str r3, [r1, #92] ; 0x5c + wsptr[DCTSIZE*4] = dcval; + 8014b10: 67cb str r3, [r1, #124] ; 0x7c + wsptr[DCTSIZE*5] = dcval; + 8014b12: f8c1 309c str.w r3, [r1, #156] ; 0x9c + wsptr[DCTSIZE*6] = dcval; + 8014b16: f8c1 30bc str.w r3, [r1, #188] ; 0xbc + wsptr[DCTSIZE*7] = dcval; + 8014b1a: f8c1 30dc str.w r3, [r1, #220] ; 0xdc + for (ctr = DCTSIZE; ctr > 0; ctr--) { + 8014b1e: 9b05 ldr r3, [sp, #20] + 8014b20: 42ab cmp r3, r5 + 8014b22: d1cc bne.n 8014abe + 8014b24: 9b04 ldr r3, [sp, #16] + 8014b26: 3b04 subs r3, #4 + 8014b28: 9302 str r3, [sp, #8] + 8014b2a: 9b04 ldr r3, [sp, #16] + 8014b2c: 331c adds r3, #28 + 8014b2e: 930f str r3, [sp, #60] ; 0x3c + } + + /* Pass 2: process 8 rows from work array, store into output array. + * 16-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/32). + */ + wsptr = workspace; + 8014b30: ab10 add r3, sp, #64 ; 0x40 + 8014b32: 9301 str r3, [sp, #4] + for (ctr = 0; ctr < 8; ctr++) { + outptr = output_buf[ctr] + output_col; + 8014b34: 9b02 ldr r3, [sp, #8] + tmp0 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + tmp0 <<= CONST_BITS; + + z1 = (INT32) wsptr[4]; + tmp1 = MULTIPLY(z1, FIX(1.306562965)); /* c4[16] = c2[8] */ + tmp2 = MULTIPLY(z1, FIX_0_541196100); /* c12[16] = c6[8] */ + 8014b36: f241 1051 movw r0, #4433 ; 0x1151 + tmp1 = MULTIPLY(z1, FIX(1.306562965)); /* c4[16] = c2[8] */ + 8014b3a: f642 14cf movw r4, #10703 ; 0x29cf + + z1 = (INT32) wsptr[2]; + z2 = (INT32) wsptr[6]; + z3 = z1 - z2; + z4 = MULTIPLY(z3, FIX(0.275899379)); /* c14[16] = c7[8] */ + z3 = MULTIPLY(z3, FIX(1.387039845)); /* c2[16] = c1[8] */ + 8014b3e: f642 4663 movw r6, #11363 ; 0x2c63 + outptr = output_buf[ctr] + output_col; + 8014b42: f853 2f04 ldr.w r2, [r3, #4]! + + tmp0 = z3 + MULTIPLY(z2, FIX_2_562915447); /* (c6+c2)[16] = (c3+c1)[8] */ + 8014b46: f245 2703 movw r7, #20995 ; 0x5203 + tmp1 = z4 + MULTIPLY(z1, FIX_0_899976223); /* (c6-c14)[16] = (c3-c7)[8] */ + tmp2 = z3 - MULTIPLY(z1, FIX(0.601344887)); /* (c2-c10)[16] = (c1-c5)[8] */ + 8014b4a: 4dd7 ldr r5, [pc, #860] ; (8014ea8 ) + outptr = output_buf[ctr] + output_col; + 8014b4c: 920e str r2, [sp, #56] ; 0x38 + 8014b4e: 9302 str r3, [sp, #8] + 8014b50: 4613 mov r3, r2 + 8014b52: 9a5a ldr r2, [sp, #360] ; 0x168 + 8014b54: 1899 adds r1, r3, r2 + tmp0 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + 8014b56: 9b01 ldr r3, [sp, #4] + z1 = (INT32) wsptr[4]; + 8014b58: 9a01 ldr r2, [sp, #4] + tmp0 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + 8014b5a: 681b ldr r3, [r3, #0] + z1 = (INT32) wsptr[4]; + 8014b5c: 6912 ldr r2, [r2, #16] + tmp0 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + 8014b5e: 3310 adds r3, #16 + tmp1 = MULTIPLY(z1, FIX(1.306562965)); /* c4[16] = c2[8] */ + 8014b60: 4354 muls r4, r2 + tmp2 = MULTIPLY(z1, FIX_0_541196100); /* c12[16] = c6[8] */ + 8014b62: 4342 muls r2, r0 + z4 = MULTIPLY(z3, FIX(0.275899379)); /* c14[16] = c7[8] */ + 8014b64: f640 00d4 movw r0, #2260 ; 0x8d4 + tmp10 = tmp0 + tmp1; + 8014b68: eb04 3e43 add.w lr, r4, r3, lsl #13 + tmp12 = tmp0 + tmp2; + 8014b6c: eb02 3c43 add.w ip, r2, r3, lsl #13 + tmp11 = tmp0 - tmp1; + 8014b70: ebc4 3443 rsb r4, r4, r3, lsl #13 + tmp13 = tmp0 - tmp2; + 8014b74: ebc2 3243 rsb r2, r2, r3, lsl #13 + z1 = (INT32) wsptr[2]; + 8014b78: 9b01 ldr r3, [sp, #4] + 8014b7a: f8d3 9008 ldr.w r9, [r3, #8] + z2 = (INT32) wsptr[6]; + 8014b7e: f8d3 8018 ldr.w r8, [r3, #24] + z3 = z1 - z2; + 8014b82: eba9 0308 sub.w r3, r9, r8 + z4 = MULTIPLY(z3, FIX(0.275899379)); /* c14[16] = c7[8] */ + 8014b86: 4358 muls r0, r3 + z3 = MULTIPLY(z3, FIX(1.387039845)); /* c2[16] = c1[8] */ + 8014b88: 4373 muls r3, r6 + tmp1 = z4 + MULTIPLY(z1, FIX_0_899976223); /* (c6-c14)[16] = (c3-c7)[8] */ + 8014b8a: f641 46cd movw r6, #7373 ; 0x1ccd + tmp0 = z3 + MULTIPLY(z2, FIX_2_562915447); /* (c6+c2)[16] = (c3+c1)[8] */ + 8014b8e: fb07 3708 mla r7, r7, r8, r3 + tmp2 = z3 - MULTIPLY(z1, FIX(0.601344887)); /* (c2-c10)[16] = (c1-c5)[8] */ + 8014b92: fb05 3309 mla r3, r5, r9, r3 + tmp3 = z4 - MULTIPLY(z2, FIX(0.509795579)); /* (c10-c14)[16] = (c5-c7)[8] */ + 8014b96: f205 25ee addw r5, r5, #750 ; 0x2ee + tmp1 = z4 + MULTIPLY(z1, FIX_0_899976223); /* (c6-c14)[16] = (c3-c7)[8] */ + 8014b9a: fb06 0609 mla r6, r6, r9, r0 + z4 = (INT32) wsptr[7]; + + tmp11 = z1 + z3; + + tmp1 = MULTIPLY(z1 + z2, FIX(1.353318001)); /* c3 */ + tmp2 = MULTIPLY(tmp11, FIX(1.247225013)); /* c5 */ + 8014b9e: f242 79e9 movw r9, #10217 ; 0x27e9 + tmp3 = z4 - MULTIPLY(z2, FIX(0.509795579)); /* (c10-c14)[16] = (c5-c7)[8] */ + 8014ba2: fb05 0008 mla r0, r5, r8, r0 + tmp20 = tmp10 + tmp0; + 8014ba6: eb0e 0507 add.w r5, lr, r7 + tmp3 = MULTIPLY(z1 + z4, FIX(1.093201867)); /* c7 */ + tmp10 = MULTIPLY(z1 - z4, FIX(0.897167586)); /* c9 */ + tmp11 = MULTIPLY(tmp11, FIX(0.666655658)); /* c11 */ + tmp12 = MULTIPLY(z1 - z2, FIX(0.410524528)); /* c13 */ + 8014baa: f640 5823 movw r8, #3363 ; 0xd23 + tmp20 = tmp10 + tmp0; + 8014bae: 9503 str r5, [sp, #12] + tmp27 = tmp10 - tmp0; + 8014bb0: ebae 0507 sub.w r5, lr, r7 + 8014bb4: 9504 str r5, [sp, #16] + tmp21 = tmp12 + tmp1; + 8014bb6: eb0c 0506 add.w r5, ip, r6 + 8014bba: 9505 str r5, [sp, #20] + tmp26 = tmp12 - tmp1; + 8014bbc: ebac 0506 sub.w r5, ip, r6 + 8014bc0: 9506 str r5, [sp, #24] + tmp22 = tmp13 + tmp2; + 8014bc2: 18d5 adds r5, r2, r3 + tmp25 = tmp13 - tmp2; + 8014bc4: 1ad3 subs r3, r2, r3 + tmp22 = tmp13 + tmp2; + 8014bc6: 9507 str r5, [sp, #28] + tmp25 = tmp13 - tmp2; + 8014bc8: 9308 str r3, [sp, #32] + tmp23 = tmp11 + tmp3; + 8014bca: 1823 adds r3, r4, r0 + tmp0 = tmp1 + tmp2 + tmp3 - + 8014bcc: 4db7 ldr r5, [pc, #732] ; (8014eac ) + tmp23 = tmp11 + tmp3; + 8014bce: 9309 str r3, [sp, #36] ; 0x24 + tmp24 = tmp11 - tmp3; + 8014bd0: 1a23 subs r3, r4, r0 + z3 = (INT32) wsptr[5]; + 8014bd2: 9801 ldr r0, [sp, #4] + tmp1 = MULTIPLY(z1 + z2, FIX(1.353318001)); /* c3 */ + 8014bd4: f642 344e movw r4, #11086 ; 0x2b4e + tmp24 = tmp11 - tmp3; + 8014bd8: 930a str r3, [sp, #40] ; 0x28 + z1 = (INT32) wsptr[1]; + 8014bda: 9b01 ldr r3, [sp, #4] + z3 = (INT32) wsptr[5]; + 8014bdc: 6947 ldr r7, [r0, #20] + z1 = (INT32) wsptr[1]; + 8014bde: 685a ldr r2, [r3, #4] + z2 = (INT32) wsptr[3]; + 8014be0: 68db ldr r3, [r3, #12] + z4 = (INT32) wsptr[7]; + 8014be2: 69c0 ldr r0, [r0, #28] + tmp11 = z1 + z3; + 8014be4: eb02 0a07 add.w sl, r2, r7 + tmp1 = MULTIPLY(z1 + z2, FIX(1.353318001)); /* c3 */ + 8014be8: 18d6 adds r6, r2, r3 + tmp3 = MULTIPLY(z1 + z4, FIX(1.093201867)); /* c7 */ + 8014bea: eb02 0e00 add.w lr, r2, r0 + tmp10 = MULTIPLY(z1 - z4, FIX(0.897167586)); /* c9 */ + 8014bee: eba2 0c00 sub.w ip, r2, r0 + tmp1 = MULTIPLY(z1 + z2, FIX(1.353318001)); /* c3 */ + 8014bf2: 4366 muls r6, r4 + tmp3 = MULTIPLY(z1 + z4, FIX(1.093201867)); /* c7 */ + 8014bf4: f242 24fc movw r4, #8956 ; 0x22fc + tmp2 = MULTIPLY(tmp11, FIX(1.247225013)); /* c5 */ + 8014bf8: fb09 f90a mul.w r9, r9, sl + tmp3 = MULTIPLY(z1 + z4, FIX(1.093201867)); /* c7 */ + 8014bfc: fb04 fe0e mul.w lr, r4, lr + tmp10 = MULTIPLY(z1 - z4, FIX(0.897167586)); /* c9 */ + 8014c00: f641 44b6 movw r4, #7350 ; 0x1cb6 + 8014c04: fb04 fc0c mul.w ip, r4, ip + tmp11 = MULTIPLY(tmp11, FIX(0.666655658)); /* c11 */ + 8014c08: f241 5455 movw r4, #5461 ; 0x1555 + 8014c0c: fb04 fa0a mul.w sl, r4, sl + tmp12 = MULTIPLY(z1 - z2, FIX(0.410524528)); /* c13 */ + 8014c10: 1ad4 subs r4, r2, r3 + 8014c12: fb08 f404 mul.w r4, r8, r4 + 8014c16: 940b str r4, [sp, #44] ; 0x2c + tmp0 = tmp1 + tmp2 + tmp3 - + 8014c18: eb06 0409 add.w r4, r6, r9 + 8014c1c: 4474 add r4, lr + 8014c1e: fb05 4402 mla r4, r5, r2, r4 + MULTIPLY(z1, FIX(2.286341144)); /* c7+c5+c3-c1 */ + tmp13 = tmp10 + tmp11 + tmp12 - + 8014c22: 9d0b ldr r5, [sp, #44] ; 0x2c + tmp0 = tmp1 + tmp2 + tmp3 - + 8014c24: 940c str r4, [sp, #48] ; 0x30 + tmp13 = tmp10 + tmp11 + tmp12 - + 8014c26: eb0c 040a add.w r4, ip, sl + 8014c2a: 442c add r4, r5 + 8014c2c: 4da0 ldr r5, [pc, #640] ; (8014eb0 ) + 8014c2e: fb05 4202 mla r2, r5, r2, r4 + MULTIPLY(z1, FIX(1.835730603)); /* c9+c11+c13-c15 */ + z1 = MULTIPLY(z2 + z3, FIX(0.138617169)); /* c15 */ + 8014c32: 19dc adds r4, r3, r7 + tmp1 += z1 + MULTIPLY(z2, FIX(0.071888074)); /* c9+c11-c3-c15 */ + tmp2 += z1 - MULTIPLY(z3, FIX(1.125726048)); /* c5+c7+c15-c3 */ + z1 = MULTIPLY(z3 - z2, FIX(1.407403738)); /* c1 */ + tmp11 += z1 - MULTIPLY(z3, FIX(0.766367282)); /* c1+c11-c9-c13 */ + 8014c34: 4d9f ldr r5, [pc, #636] ; (8014eb4 ) + tmp13 = tmp10 + tmp11 + tmp12 - + 8014c36: 920d str r2, [sp, #52] ; 0x34 + z1 = MULTIPLY(z2 + z3, FIX(0.138617169)); /* c15 */ + 8014c38: f44f 628e mov.w r2, #1136 ; 0x470 + 8014c3c: 4354 muls r4, r2 + tmp1 += z1 + MULTIPLY(z2, FIX(0.071888074)); /* c9+c11-c3-c15 */ + 8014c3e: f240 224d movw r2, #589 ; 0x24d + 8014c42: fb02 4203 mla r2, r2, r3, r4 + 8014c46: 4416 add r6, r2 + tmp2 += z1 - MULTIPLY(z3, FIX(1.125726048)); /* c5+c7+c15-c3 */ + 8014c48: 4a9b ldr r2, [pc, #620] ; (8014eb8 ) + 8014c4a: fb02 4407 mla r4, r2, r7, r4 + z1 = MULTIPLY(z3 - z2, FIX(1.407403738)); /* c1 */ + 8014c4e: 1afa subs r2, r7, r3 + tmp2 += z1 - MULTIPLY(z3, FIX(1.125726048)); /* c5+c7+c15-c3 */ + 8014c50: 444c add r4, r9 + z1 = MULTIPLY(z3 - z2, FIX(1.407403738)); /* c1 */ + 8014c52: f642 5909 movw r9, #11529 ; 0x2d09 + 8014c56: fb09 f202 mul.w r2, r9, r2 + tmp11 += z1 - MULTIPLY(z3, FIX(0.766367282)); /* c1+c11-c9-c13 */ + 8014c5a: fb05 2907 mla r9, r5, r7, r2 + tmp12 += z1 + MULTIPLY(z2, FIX(1.971951411)); /* c1+c5+c13-c7 */ + 8014c5e: 9d0b ldr r5, [sp, #44] ; 0x2c + tmp11 += z1 - MULTIPLY(z3, FIX(0.766367282)); /* c1+c11-c9-c13 */ + 8014c60: 44d1 add r9, sl + tmp12 += z1 + MULTIPLY(z2, FIX(1.971951411)); /* c1+c5+c13-c7 */ + 8014c62: f643 7a1a movw sl, #16154 ; 0x3f1a + 8014c66: fb0a 2203 mla r2, sl, r3, r2 + z2 += z4; + 8014c6a: 4403 add r3, r0 + tmp12 += z1 + MULTIPLY(z2, FIX(1.971951411)); /* c1+c5+c13-c7 */ + 8014c6c: eb02 0a05 add.w sl, r2, r5 + z1 = MULTIPLY(z2, - FIX(0.666655658)); /* -c11 */ + 8014c70: 4a92 ldr r2, [pc, #584] ; (8014ebc ) + tmp1 += z1; + tmp3 += z1 + MULTIPLY(z4, FIX(1.065388962)); /* c3+c11+c15-c7 */ + 8014c72: f242 2518 movw r5, #8728 ; 0x2218 + z1 = MULTIPLY(z2, - FIX(0.666655658)); /* -c11 */ + 8014c76: 435a muls r2, r3 + tmp1 += z1; + 8014c78: 4416 add r6, r2 + tmp3 += z1 + MULTIPLY(z4, FIX(1.065388962)); /* c3+c11+c15-c7 */ + 8014c7a: fb05 2200 mla r2, r5, r0, r2 + z2 = MULTIPLY(z2, - FIX(1.247225013)); /* -c5 */ + 8014c7e: 4d90 ldr r5, [pc, #576] ; (8014ec0 ) + tmp3 += z1 + MULTIPLY(z4, FIX(1.065388962)); /* c3+c11+c15-c7 */ + 8014c80: 4472 add r2, lr + tmp10 += z2 + MULTIPLY(z4, FIX(3.141271809)); /* c1+c5+c9-c13 */ + 8014c82: f246 4e85 movw lr, #25733 ; 0x6485 + z2 = MULTIPLY(z2, - FIX(1.247225013)); /* -c5 */ + 8014c86: 436b muls r3, r5 + tmp10 += z2 + MULTIPLY(z4, FIX(3.141271809)); /* c1+c5+c9-c13 */ + 8014c88: fb0e 3e00 mla lr, lr, r0, r3 + tmp12 += z2; + 8014c8c: 449a add sl, r3 + z2 = MULTIPLY(z3 + z4, - FIX(1.353318001)); /* -c3 */ + 8014c8e: f46f 7359 mvn.w r3, #868 ; 0x364 + tmp10 += z2 + MULTIPLY(z4, FIX(3.141271809)); /* c1+c5+c9-c13 */ + 8014c92: 44e6 add lr, ip + z2 = MULTIPLY(z3 + z4, - FIX(1.353318001)); /* -c3 */ + 8014c94: eb07 0c00 add.w ip, r7, r0 + 8014c98: 441d add r5, r3 + tmp2 += z2; + tmp3 += z2; + z2 = MULTIPLY(z4 - z3, FIX(0.410524528)); /* c13 */ + 8014c9a: 1bc0 subs r0, r0, r7 + z2 = MULTIPLY(z3 + z4, - FIX(1.353318001)); /* -c3 */ + 8014c9c: fb05 fc0c mul.w ip, r5, ip + tmp10 += z2; + tmp11 += z2; + + /* Final output stage */ + + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp0, + 8014ca0: 9d03 ldr r5, [sp, #12] + 8014ca2: 9f0c ldr r7, [sp, #48] ; 0x30 + z2 = MULTIPLY(z4 - z3, FIX(0.410524528)); /* c13 */ + 8014ca4: fb08 f000 mul.w r0, r8, r0 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp0, + 8014ca8: 9b5a ldr r3, [sp, #360] ; 0x168 + tmp2 += z2; + 8014caa: 4464 add r4, ip + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp0, + 8014cac: 19ef adds r7, r5, r7 + 8014cae: 9d0e ldr r5, [sp, #56] ; 0x38 + tmp3 += z2; + 8014cb0: 4462 add r2, ip + tmp10 += z2; + 8014cb2: 4486 add lr, r0 + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + 8014cb4: f3c7 4789 ubfx r7, r7, #18, #10 + tmp11 += z2; + 8014cb8: 4448 add r0, r9 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp0, + 8014cba: f81b 7007 ldrb.w r7, [fp, r7] + 8014cbe: 54ef strb r7, [r5, r3] + outptr[15] = range_limit[(int) RIGHT_SHIFT(tmp20 - tmp0, + 8014cc0: 9b03 ldr r3, [sp, #12] + 8014cc2: 9d0c ldr r5, [sp, #48] ; 0x30 + 8014cc4: 1b5f subs r7, r3, r5 + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp1, + 8014cc6: 9b05 ldr r3, [sp, #20] + & RANGE_MASK]; + 8014cc8: f3c7 4789 ubfx r7, r7, #18, #10 + outptr[15] = range_limit[(int) RIGHT_SHIFT(tmp20 - tmp0, + 8014ccc: f81b 7007 ldrb.w r7, [fp, r7] + 8014cd0: 73cf strb r7, [r1, #15] + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp1, + 8014cd2: 199f adds r7, r3, r6 + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[14] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp1, + 8014cd4: 1b9e subs r6, r3, r6 + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp2, + 8014cd6: 9b07 ldr r3, [sp, #28] + & RANGE_MASK]; + 8014cd8: f3c7 4789 ubfx r7, r7, #18, #10 + & RANGE_MASK]; + 8014cdc: f3c6 4689 ubfx r6, r6, #18, #10 + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp1, + 8014ce0: f81b 7007 ldrb.w r7, [fp, r7] + 8014ce4: 704f strb r7, [r1, #1] + outptr[14] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp1, + 8014ce6: f81b 6006 ldrb.w r6, [fp, r6] + 8014cea: 738e strb r6, [r1, #14] + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp2, + 8014cec: 191e adds r6, r3, r4 + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[13] = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp2, + 8014cee: 1b1c subs r4, r3, r4 + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp23 + tmp3, + 8014cf0: 9b09 ldr r3, [sp, #36] ; 0x24 + & RANGE_MASK]; + 8014cf2: f3c6 4689 ubfx r6, r6, #18, #10 + & RANGE_MASK]; + 8014cf6: f3c4 4489 ubfx r4, r4, #18, #10 + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp2, + 8014cfa: f81b 6006 ldrb.w r6, [fp, r6] + 8014cfe: 708e strb r6, [r1, #2] + outptr[13] = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp2, + 8014d00: f81b 4004 ldrb.w r4, [fp, r4] + 8014d04: 734c strb r4, [r1, #13] + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp23 + tmp3, + 8014d06: 189c adds r4, r3, r2 + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[12] = range_limit[(int) RIGHT_SHIFT(tmp23 - tmp3, + 8014d08: 1a9a subs r2, r3, r2 + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp24 + tmp10, + 8014d0a: 9b0a ldr r3, [sp, #40] ; 0x28 + & RANGE_MASK]; + 8014d0c: f3c4 4489 ubfx r4, r4, #18, #10 + & RANGE_MASK]; + 8014d10: f3c2 4289 ubfx r2, r2, #18, #10 + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp23 + tmp3, + 8014d14: f81b 4004 ldrb.w r4, [fp, r4] + 8014d18: 70cc strb r4, [r1, #3] + outptr[12] = range_limit[(int) RIGHT_SHIFT(tmp23 - tmp3, + 8014d1a: f81b 2002 ldrb.w r2, [fp, r2] + 8014d1e: 730a strb r2, [r1, #12] + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp24 + tmp10, + 8014d20: eb03 020e add.w r2, r3, lr + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + 8014d24: f3c2 4289 ubfx r2, r2, #18, #10 + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp24 + tmp10, + 8014d28: f81b 2002 ldrb.w r2, [fp, r2] + 8014d2c: 710a strb r2, [r1, #4] + outptr[11] = range_limit[(int) RIGHT_SHIFT(tmp24 - tmp10, + 8014d2e: eba3 020e sub.w r2, r3, lr + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp25 + tmp11, + 8014d32: 9b08 ldr r3, [sp, #32] + & RANGE_MASK]; + 8014d34: f3c2 4289 ubfx r2, r2, #18, #10 + outptr[11] = range_limit[(int) RIGHT_SHIFT(tmp24 - tmp10, + 8014d38: f81b 2002 ldrb.w r2, [fp, r2] + 8014d3c: 72ca strb r2, [r1, #11] + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp25 + tmp11, + 8014d3e: 181a adds r2, r3, r0 + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + 8014d40: f3c2 4289 ubfx r2, r2, #18, #10 + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp25 + tmp11, + 8014d44: f81b 2002 ldrb.w r2, [fp, r2] + 8014d48: 714a strb r2, [r1, #5] + outptr[10] = range_limit[(int) RIGHT_SHIFT(tmp25 - tmp11, + 8014d4a: 1a1a subs r2, r3, r0 + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + 8014d4c: f3c2 4289 ubfx r2, r2, #18, #10 + outptr[10] = range_limit[(int) RIGHT_SHIFT(tmp25 - tmp11, + 8014d50: f81b 2002 ldrb.w r2, [fp, r2] + outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp26 + tmp12, + 8014d54: 9b06 ldr r3, [sp, #24] + outptr[10] = range_limit[(int) RIGHT_SHIFT(tmp25 - tmp11, + 8014d56: 728a strb r2, [r1, #10] + outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp26 + tmp12, + 8014d58: eb03 020a add.w r2, r3, sl + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[9] = range_limit[(int) RIGHT_SHIFT(tmp26 - tmp12, + 8014d5c: eba3 030a sub.w r3, r3, sl + & RANGE_MASK]; + 8014d60: f3c2 4289 ubfx r2, r2, #18, #10 + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + 8014d64: f3c3 4389 ubfx r3, r3, #18, #10 + outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp26 + tmp12, + 8014d68: f81b 2002 ldrb.w r2, [fp, r2] + 8014d6c: 718a strb r2, [r1, #6] + outptr[9] = range_limit[(int) RIGHT_SHIFT(tmp26 - tmp12, + 8014d6e: f81b 3003 ldrb.w r3, [fp, r3] + outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp27 + tmp13, + 8014d72: 9a0d ldr r2, [sp, #52] ; 0x34 + outptr[9] = range_limit[(int) RIGHT_SHIFT(tmp26 - tmp12, + 8014d74: 724b strb r3, [r1, #9] + outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp27 + tmp13, + 8014d76: 9b04 ldr r3, [sp, #16] + 8014d78: 4413 add r3, r2 + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + 8014d7a: f3c3 4389 ubfx r3, r3, #18, #10 + outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp27 + tmp13, + 8014d7e: f81b 3003 ldrb.w r3, [fp, r3] + 8014d82: 71cb strb r3, [r1, #7] + outptr[8] = range_limit[(int) RIGHT_SHIFT(tmp27 - tmp13, + 8014d84: 9b04 ldr r3, [sp, #16] + 8014d86: 1a9b subs r3, r3, r2 + for (ctr = 0; ctr < 8; ctr++) { + 8014d88: 9a02 ldr r2, [sp, #8] + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + 8014d8a: f3c3 4389 ubfx r3, r3, #18, #10 + outptr[8] = range_limit[(int) RIGHT_SHIFT(tmp27 - tmp13, + 8014d8e: f81b 3003 ldrb.w r3, [fp, r3] + 8014d92: 720b strb r3, [r1, #8] + + wsptr += 8; /* advance pointer to next row */ + 8014d94: 9b01 ldr r3, [sp, #4] + 8014d96: 3320 adds r3, #32 + 8014d98: 9301 str r3, [sp, #4] + for (ctr = 0; ctr < 8; ctr++) { + 8014d9a: 9b0f ldr r3, [sp, #60] ; 0x3c + 8014d9c: 4293 cmp r3, r2 + 8014d9e: f47f aec9 bne.w 8014b34 + } +} + 8014da2: b051 add sp, #324 ; 0x144 + 8014da4: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + z2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + 8014da8: 6be8 ldr r0, [r5, #60] ; 0x3c + z1 = MULTIPLY(z2 + z3, FIX_0_541196100); + 8014daa: f241 1251 movw r2, #4433 ; 0x1151 + z2 <<= CONST_BITS; + 8014dae: 035b lsls r3, r3, #13 + z2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + 8014db0: 4347 muls r7, r0 + z3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + 8014db2: f8d5 00bc ldr.w r0, [r5, #188] ; 0xbc + z2 += ONE << (CONST_BITS-PASS1_BITS-1); + 8014db6: f503 6380 add.w r3, r3, #1024 ; 0x400 + z3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + 8014dba: 4360 muls r0, r4 + z1 = MULTIPLY(z2 + z3, FIX_0_541196100); + 8014dbc: 183c adds r4, r7, r0 + 8014dbe: 4354 muls r4, r2 + tmp2 = z1 + MULTIPLY(z2, FIX_0_765366865); + 8014dc0: f641 027e movw r2, #6270 ; 0x187e + 8014dc4: fb02 4707 mla r7, r2, r7, r4 + tmp3 = z1 - MULTIPLY(z3, FIX_1_847759065); + 8014dc8: 4a3e ldr r2, [pc, #248] ; (8014ec4 ) + 8014dca: fb02 4400 mla r4, r2, r0, r4 + z3 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + 8014dce: 6fe8 ldr r0, [r5, #124] ; 0x7c + 8014dd0: 4346 muls r6, r0 + tmp0 = z2 + z3; + 8014dd2: eb03 3046 add.w r0, r3, r6, lsl #13 + tmp1 = z2 - z3; + 8014dd6: eba3 3346 sub.w r3, r3, r6, lsl #13 + tmp10 = tmp0 + tmp2; + 8014dda: eb07 0c00 add.w ip, r7, r0 + tmp13 = tmp0 - tmp2; + 8014dde: 1bc2 subs r2, r0, r7 + tmp0 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + 8014de0: f8d5 00dc ldr.w r0, [r5, #220] ; 0xdc + tmp11 = tmp1 + tmp3; + 8014de4: 18e7 adds r7, r4, r3 + tmp12 = tmp1 - tmp3; + 8014de6: 1b1b subs r3, r3, r4 + tmp3 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 8014de8: 69ec ldr r4, [r5, #28] + tmp0 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + 8014dea: fb00 f909 mul.w r9, r0, r9 + tmp1 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + 8014dee: f8d5 009c ldr.w r0, [r5, #156] ; 0x9c + tmp3 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 8014df2: fb04 fa0a mul.w sl, r4, sl + tmp1 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + 8014df6: fb00 f808 mul.w r8, r0, r8 + tmp2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + 8014dfa: 6de8 ldr r0, [r5, #92] ; 0x5c + tmp13 = tmp0 - tmp2; + 8014dfc: 9202 str r2, [sp, #8] + z1 = MULTIPLY(z2 + z3, FIX_1_175875602); /* sqrt(2) * c3 */ + 8014dfe: f242 52a1 movw r2, #9633 ; 0x25a1 + tmp2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + 8014e02: fb00 fe0e mul.w lr, r0, lr + z3 = tmp1 + tmp3; + 8014e06: eb08 040a add.w r4, r8, sl + tmp12 = tmp1 - tmp3; + 8014e0a: 9303 str r3, [sp, #12] + tmp0 += z1 + z2; + 8014e0c: f640 138e movw r3, #2446 ; 0x98e + z2 = tmp0 + tmp2; + 8014e10: eb09 060e add.w r6, r9, lr + z1 = MULTIPLY(z2 + z3, FIX_1_175875602); /* sqrt(2) * c3 */ + 8014e14: 1930 adds r0, r6, r4 + 8014e16: 4350 muls r0, r2 + z2 += z1; + 8014e18: 4a2b ldr r2, [pc, #172] ; (8014ec8 ) + 8014e1a: fb02 0606 mla r6, r2, r6, r0 + z3 += z1; + 8014e1e: 4a2b ldr r2, [pc, #172] ; (8014ecc ) + 8014e20: fb02 0004 mla r0, r2, r4, r0 + z1 = MULTIPLY(tmp0 + tmp3, - FIX_0_899976223); /* sqrt(2) * (c7-c3) */ + 8014e24: eb09 040a add.w r4, r9, sl + 8014e28: 4a29 ldr r2, [pc, #164] ; (8014ed0 ) + 8014e2a: 4354 muls r4, r2 + tmp0 += z1 + z2; + 8014e2c: 1932 adds r2, r6, r4 + tmp3 += z1 + z3; + 8014e2e: 4404 add r4, r0 + tmp0 += z1 + z2; + 8014e30: fb03 2909 mla r9, r3, r9, r2 + tmp3 += z1 + z3; + 8014e34: f243 030b movw r3, #12299 ; 0x300b + z1 = MULTIPLY(tmp1 + tmp2, - FIX_2_562915447); /* sqrt(2) * (-c1-c3) */ + 8014e38: 4a26 ldr r2, [pc, #152] ; (8014ed4 ) + tmp3 += z1 + z3; + 8014e3a: fb03 440a mla r4, r3, sl, r4 + z1 = MULTIPLY(tmp1 + tmp2, - FIX_2_562915447); /* sqrt(2) * (-c1-c3) */ + 8014e3e: eb08 0a0e add.w sl, r8, lr + tmp1 += z1 + z3; + 8014e42: f244 13b3 movw r3, #16819 ; 0x41b3 + z1 = MULTIPLY(tmp1 + tmp2, - FIX_2_562915447); /* sqrt(2) * (-c1-c3) */ + 8014e46: fb02 fa0a mul.w sl, r2, sl + tmp1 += z1 + z3; + 8014e4a: 4450 add r0, sl + tmp2 += z1 + z2; + 8014e4c: 4456 add r6, sl + tmp1 += z1 + z3; + 8014e4e: fb03 0008 mla r0, r3, r8, r0 + tmp2 += z1 + z2; + 8014e52: f246 2854 movw r8, #25172 ; 0x6254 + wsptr[DCTSIZE*2] = (int) RIGHT_SHIFT(tmp12 + tmp1, CONST_BITS-PASS1_BITS); + 8014e56: 9b03 ldr r3, [sp, #12] + tmp2 += z1 + z2; + 8014e58: fb08 6e0e mla lr, r8, lr, r6 + wsptr[DCTSIZE*0] = (int) RIGHT_SHIFT(tmp10 + tmp3, CONST_BITS-PASS1_BITS); + 8014e5c: eb0c 0604 add.w r6, ip, r4 + wsptr[DCTSIZE*7] = (int) RIGHT_SHIFT(tmp10 - tmp3, CONST_BITS-PASS1_BITS); + 8014e60: ebac 0c04 sub.w ip, ip, r4 + wsptr[DCTSIZE*0] = (int) RIGHT_SHIFT(tmp10 + tmp3, CONST_BITS-PASS1_BITS); + 8014e64: 12f6 asrs r6, r6, #11 + wsptr[DCTSIZE*7] = (int) RIGHT_SHIFT(tmp10 - tmp3, CONST_BITS-PASS1_BITS); + 8014e66: ea4f 24ec mov.w r4, ip, asr #11 + wsptr[DCTSIZE*0] = (int) RIGHT_SHIFT(tmp10 + tmp3, CONST_BITS-PASS1_BITS); + 8014e6a: f841 6c04 str.w r6, [r1, #-4] + wsptr[DCTSIZE*7] = (int) RIGHT_SHIFT(tmp10 - tmp3, CONST_BITS-PASS1_BITS); + 8014e6e: f8c1 40dc str.w r4, [r1, #220] ; 0xdc + wsptr[DCTSIZE*1] = (int) RIGHT_SHIFT(tmp11 + tmp2, CONST_BITS-PASS1_BITS); + 8014e72: eb07 040e add.w r4, r7, lr + wsptr[DCTSIZE*6] = (int) RIGHT_SHIFT(tmp11 - tmp2, CONST_BITS-PASS1_BITS); + 8014e76: eba7 070e sub.w r7, r7, lr + wsptr[DCTSIZE*1] = (int) RIGHT_SHIFT(tmp11 + tmp2, CONST_BITS-PASS1_BITS); + 8014e7a: 12e4 asrs r4, r4, #11 + wsptr[DCTSIZE*6] = (int) RIGHT_SHIFT(tmp11 - tmp2, CONST_BITS-PASS1_BITS); + 8014e7c: 12ff asrs r7, r7, #11 + wsptr[DCTSIZE*1] = (int) RIGHT_SHIFT(tmp11 + tmp2, CONST_BITS-PASS1_BITS); + 8014e7e: 61cc str r4, [r1, #28] + wsptr[DCTSIZE*2] = (int) RIGHT_SHIFT(tmp12 + tmp1, CONST_BITS-PASS1_BITS); + 8014e80: 181c adds r4, r3, r0 + wsptr[DCTSIZE*5] = (int) RIGHT_SHIFT(tmp12 - tmp1, CONST_BITS-PASS1_BITS); + 8014e82: 1a1b subs r3, r3, r0 + wsptr[DCTSIZE*6] = (int) RIGHT_SHIFT(tmp11 - tmp2, CONST_BITS-PASS1_BITS); + 8014e84: f8c1 70bc str.w r7, [r1, #188] ; 0xbc + wsptr[DCTSIZE*2] = (int) RIGHT_SHIFT(tmp12 + tmp1, CONST_BITS-PASS1_BITS); + 8014e88: 12e4 asrs r4, r4, #11 + wsptr[DCTSIZE*5] = (int) RIGHT_SHIFT(tmp12 - tmp1, CONST_BITS-PASS1_BITS); + 8014e8a: 12db asrs r3, r3, #11 + wsptr[DCTSIZE*2] = (int) RIGHT_SHIFT(tmp12 + tmp1, CONST_BITS-PASS1_BITS); + 8014e8c: 63cc str r4, [r1, #60] ; 0x3c + wsptr[DCTSIZE*5] = (int) RIGHT_SHIFT(tmp12 - tmp1, CONST_BITS-PASS1_BITS); + 8014e8e: f8c1 309c str.w r3, [r1, #156] ; 0x9c + wsptr[DCTSIZE*3] = (int) RIGHT_SHIFT(tmp13 + tmp0, CONST_BITS-PASS1_BITS); + 8014e92: 9b02 ldr r3, [sp, #8] + 8014e94: 444b add r3, r9 + 8014e96: 12db asrs r3, r3, #11 + 8014e98: 65cb str r3, [r1, #92] ; 0x5c + wsptr[DCTSIZE*4] = (int) RIGHT_SHIFT(tmp13 - tmp0, CONST_BITS-PASS1_BITS); + 8014e9a: 9b02 ldr r3, [sp, #8] + 8014e9c: eba3 0309 sub.w r3, r3, r9 + 8014ea0: 12db asrs r3, r3, #11 + 8014ea2: 67cb str r3, [r1, #124] ; 0x7c + wsptr++; + 8014ea4: e63b b.n 8014b1e + 8014ea6: bf00 nop + 8014ea8: ffffecc2 .word 0xffffecc2 + 8014eac: ffffb6d6 .word 0xffffb6d6 + 8014eb0: ffffc542 .word 0xffffc542 + 8014eb4: ffffe77a .word 0xffffe77a + 8014eb8: ffffdbfa .word 0xffffdbfa + 8014ebc: ffffeaab .word 0xffffeaab + 8014ec0: ffffd817 .word 0xffffd817 + 8014ec4: ffffc4df .word 0xffffc4df + 8014ec8: ffffc13b .word 0xffffc13b + 8014ecc: fffff384 .word 0xfffff384 + 8014ed0: ffffe333 .word 0xffffe333 + 8014ed4: ffffadfd .word 0xffffadfd + +08014ed8 : + +GLOBAL(void) +jpeg_idct_14x7 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + 8014ed8: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8014edc: b0c5 sub sp, #276 ; 0x114 + 8014ede: 6d4e ldr r6, [r1, #84] ; 0x54 + 8014ee0: f1a2 0c02 sub.w ip, r2, #2 + 8014ee4: 320e adds r2, #14 + 8014ee6: 9303 str r3, [sp, #12] + 8014ee8: 3e04 subs r6, #4 + INT32 z1, z2, z3, z4; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + int * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + 8014eea: f8d0 314c ldr.w r3, [r0, #332] ; 0x14c + /* Pass 1: process columns from input, store into work array. + * 7-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/14). + */ + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + 8014eee: f10d 0e30 add.w lr, sp, #48 ; 0x30 + 8014ef2: 9205 str r2, [sp, #20] + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + 8014ef4: 3380 adds r3, #128 ; 0x80 + 8014ef6: 9301 str r3, [sp, #4] + for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) { + /* Even part */ + + tmp23 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 8014ef8: f93c 2f02 ldrsh.w r2, [ip, #2]! + z1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + z2 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + z3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + + tmp20 = MULTIPLY(z2 - z3, FIX(0.881747734)); /* c4 */ + tmp22 = MULTIPLY(z1 - z2, FIX(0.314692123)); /* c6 */ + 8014efc: f640 2012 movw r0, #2578 ; 0xa12 + tmp23 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 8014f00: f856 1f04 ldr.w r1, [r6, #4]! + tmp21 = tmp20 + tmp22 + tmp23 - MULTIPLY(z2, FIX(1.841218003)); /* c2+c4-c6 */ + tmp10 = z1 + z3; + z2 -= tmp10; + tmp10 = MULTIPLY(tmp10, FIX(1.274162392)) + tmp23; /* c2 */ + 8014f04: f642 09c6 movw r9, #10438 ; 0x28c6 + z1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + 8014f08: f9bc 5020 ldrsh.w r5, [ip, #32] + for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) { + 8014f0c: f10e 0e04 add.w lr, lr, #4 + tmp23 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 8014f10: 434a muls r2, r1 + z2 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + 8014f12: f9bc 8040 ldrsh.w r8, [ip, #64] ; 0x40 + z3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + 8014f16: f9bc 1060 ldrsh.w r1, [ip, #96] ; 0x60 + tmp23 <<= CONST_BITS; + 8014f1a: 0352 lsls r2, r2, #13 + tmp23 += ONE << (CONST_BITS-PASS1_BITS-1); + 8014f1c: f502 6280 add.w r2, r2, #1024 ; 0x400 + 8014f20: 9202 str r2, [sp, #8] + z1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + 8014f22: 6c32 ldr r2, [r6, #64] ; 0x40 + 8014f24: 4355 muls r5, r2 + z2 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + 8014f26: f8d6 2080 ldr.w r2, [r6, #128] ; 0x80 + 8014f2a: fb02 f808 mul.w r8, r2, r8 + z3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + 8014f2e: f8d6 20c0 ldr.w r2, [r6, #192] ; 0xc0 + 8014f32: 4351 muls r1, r2 + tmp20 = MULTIPLY(z2 - z3, FIX(0.881747734)); /* c4 */ + 8014f34: f641 4237 movw r2, #7223 ; 0x1c37 + 8014f38: eba8 0701 sub.w r7, r8, r1 + tmp10 = MULTIPLY(tmp10, FIX(1.274162392)) + tmp23; /* c2 */ + 8014f3c: 186b adds r3, r5, r1 + tmp20 = MULTIPLY(z2 - z3, FIX(0.881747734)); /* c4 */ + 8014f3e: 4357 muls r7, r2 + tmp22 = MULTIPLY(z1 - z2, FIX(0.314692123)); /* c6 */ + 8014f40: eba5 0208 sub.w r2, r5, r8 + 8014f44: 4342 muls r2, r0 + tmp21 = tmp20 + tmp22 + tmp23 - MULTIPLY(z2, FIX(1.841218003)); /* c2+c4-c6 */ + 8014f46: 9802 ldr r0, [sp, #8] + 8014f48: 18bc adds r4, r7, r2 + 8014f4a: 4404 add r4, r0 + 8014f4c: 48bd ldr r0, [pc, #756] ; (8015244 ) + 8014f4e: fb00 4408 mla r4, r0, r8, r4 + tmp10 = z1 + z3; + 8014f52: 1868 adds r0, r5, r1 + 8014f54: 9004 str r0, [sp, #16] + tmp10 = MULTIPLY(tmp10, FIX(1.274162392)) + tmp23; /* c2 */ + 8014f56: 9802 ldr r0, [sp, #8] + 8014f58: fb09 0003 mla r0, r9, r3, r0 + tmp20 += tmp10 - MULTIPLY(z3, FIX(0.077722536)); /* c2-c4-c6 */ + 8014f5c: f46f 731f mvn.w r3, #636 ; 0x27c + + /* Odd part */ + + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + 8014f60: f9bc 9050 ldrsh.w r9, [ip, #80] ; 0x50 + tmp20 += tmp10 - MULTIPLY(z3, FIX(0.077722536)); /* c2-c4-c6 */ + 8014f64: fb03 0101 mla r1, r3, r1, r0 + tmp22 += tmp10 - MULTIPLY(z1, FIX(2.470602249)); /* c2+c4+c6 */ + 8014f68: 4bb7 ldr r3, [pc, #732] ; (8015248 ) + 8014f6a: fb03 0005 mla r0, r3, r5, r0 + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 8014f6e: 6a35 ldr r5, [r6, #32] + tmp20 += tmp10 - MULTIPLY(z3, FIX(0.077722536)); /* c2-c4-c6 */ + 8014f70: 4439 add r1, r7 + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + 8014f72: 6e37 ldr r7, [r6, #96] ; 0x60 + tmp22 += tmp10 - MULTIPLY(z1, FIX(2.470602249)); /* c2+c4+c6 */ + 8014f74: 4410 add r0, r2 + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 8014f76: f9bc 2010 ldrsh.w r2, [ip, #16] + + tmp11 = MULTIPLY(z1 + z2, FIX(0.935414347)); /* (c3+c1-c5)/2 */ + 8014f7a: f641 53ef movw r3, #7663 ; 0x1def + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 8014f7e: 436a muls r2, r5 + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + 8014f80: f9bc 5030 ldrsh.w r5, [ip, #48] ; 0x30 + 8014f84: 437d muls r5, r7 + z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + 8014f86: f8d6 70a0 ldr.w r7, [r6, #160] ; 0xa0 + tmp11 = MULTIPLY(z1 + z2, FIX(0.935414347)); /* (c3+c1-c5)/2 */ + 8014f8a: eb02 0b05 add.w fp, r2, r5 + z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + 8014f8e: fb07 f909 mul.w r9, r7, r9 + tmp12 = MULTIPLY(z1 - z2, FIX(0.170262339)); /* (c3+c5-c1)/2 */ + 8014f92: 1b57 subs r7, r2, r5 + tmp11 = MULTIPLY(z1 + z2, FIX(0.935414347)); /* (c3+c1-c5)/2 */ + 8014f94: fb03 fb0b mul.w fp, r3, fp + tmp12 = MULTIPLY(z1 - z2, FIX(0.170262339)); /* (c3+c5-c1)/2 */ + 8014f98: f240 5373 movw r3, #1395 ; 0x573 + tmp10 = tmp11 - tmp12; + tmp11 += tmp12; + tmp12 = MULTIPLY(z2 + z3, - FIX(1.378756276)); /* -c1 */ + tmp11 += tmp12; + z2 = MULTIPLY(z1 + z3, FIX(0.613604268)); /* c5 */ + 8014f9c: 444a add r2, r9 + tmp12 = MULTIPLY(z2 + z3, - FIX(1.378756276)); /* -c1 */ + 8014f9e: 444d add r5, r9 + tmp12 = MULTIPLY(z1 - z2, FIX(0.170262339)); /* (c3+c5-c1)/2 */ + 8014fa0: 435f muls r7, r3 + tmp12 = MULTIPLY(z2 + z3, - FIX(1.378756276)); /* -c1 */ + 8014fa2: 4baa ldr r3, [pc, #680] ; (801524c ) + tmp10 = tmp11 - tmp12; + 8014fa4: ebab 0a07 sub.w sl, fp, r7 + tmp11 += tmp12; + 8014fa8: 445f add r7, fp + z2 = MULTIPLY(z1 + z3, FIX(0.613604268)); /* c5 */ + 8014faa: f241 3ba3 movw fp, #5027 ; 0x13a3 + tmp12 = MULTIPLY(z2 + z3, - FIX(1.378756276)); /* -c1 */ + 8014fae: 435d muls r5, r3 + z2 -= tmp10; + 8014fb0: 9b04 ldr r3, [sp, #16] + z2 = MULTIPLY(z1 + z3, FIX(0.613604268)); /* c5 */ + 8014fb2: fb0b f202 mul.w r2, fp, r2 + tmp10 += z2; + tmp12 += z2 + MULTIPLY(z3, FIX(1.870828693)); /* c3+c1-c5 */ + 8014fb6: f643 3bde movw fp, #15326 ; 0x3bde + tmp11 += tmp12; + 8014fba: 442f add r7, r5 + z2 -= tmp10; + 8014fbc: eba8 0803 sub.w r8, r8, r3 + tmp10 += z2; + 8014fc0: 4492 add sl, r2 + tmp12 += z2 + MULTIPLY(z3, FIX(1.870828693)); /* c3+c1-c5 */ + 8014fc2: fb0b 2209 mla r2, fp, r9, r2 + tmp23 += MULTIPLY(z2, FIX(1.414213562)); /* c0 */ + 8014fc6: 9b02 ldr r3, [sp, #8] + tmp12 += z2 + MULTIPLY(z3, FIX(1.870828693)); /* c3+c1-c5 */ + 8014fc8: 442a add r2, r5 + + /* Final output stage */ + + wsptr[8*0] = (int) RIGHT_SHIFT(tmp20 + tmp10, CONST_BITS-PASS1_BITS); + 8014fca: eb01 050a add.w r5, r1, sl + wsptr[8*6] = (int) RIGHT_SHIFT(tmp20 - tmp10, CONST_BITS-PASS1_BITS); + 8014fce: eba1 010a sub.w r1, r1, sl + wsptr[8*0] = (int) RIGHT_SHIFT(tmp20 + tmp10, CONST_BITS-PASS1_BITS); + 8014fd2: 12ed asrs r5, r5, #11 + wsptr[8*6] = (int) RIGHT_SHIFT(tmp20 - tmp10, CONST_BITS-PASS1_BITS); + 8014fd4: 12c9 asrs r1, r1, #11 + wsptr[8*0] = (int) RIGHT_SHIFT(tmp20 + tmp10, CONST_BITS-PASS1_BITS); + 8014fd6: f84e 5c04 str.w r5, [lr, #-4] + wsptr[8*6] = (int) RIGHT_SHIFT(tmp20 - tmp10, CONST_BITS-PASS1_BITS); + 8014fda: f8ce 10bc str.w r1, [lr, #188] ; 0xbc + wsptr[8*1] = (int) RIGHT_SHIFT(tmp21 + tmp11, CONST_BITS-PASS1_BITS); + 8014fde: 19e1 adds r1, r4, r7 + wsptr[8*5] = (int) RIGHT_SHIFT(tmp21 - tmp11, CONST_BITS-PASS1_BITS); + 8014fe0: 1be4 subs r4, r4, r7 + wsptr[8*1] = (int) RIGHT_SHIFT(tmp21 + tmp11, CONST_BITS-PASS1_BITS); + 8014fe2: 12c9 asrs r1, r1, #11 + wsptr[8*5] = (int) RIGHT_SHIFT(tmp21 - tmp11, CONST_BITS-PASS1_BITS); + 8014fe4: 12e4 asrs r4, r4, #11 + wsptr[8*1] = (int) RIGHT_SHIFT(tmp21 + tmp11, CONST_BITS-PASS1_BITS); + 8014fe6: f8ce 101c str.w r1, [lr, #28] + wsptr[8*2] = (int) RIGHT_SHIFT(tmp22 + tmp12, CONST_BITS-PASS1_BITS); + 8014fea: 1881 adds r1, r0, r2 + wsptr[8*4] = (int) RIGHT_SHIFT(tmp22 - tmp12, CONST_BITS-PASS1_BITS); + 8014fec: 1a80 subs r0, r0, r2 + tmp23 += MULTIPLY(z2, FIX(1.414213562)); /* c0 */ + 8014fee: f642 5241 movw r2, #11585 ; 0x2d41 + wsptr[8*2] = (int) RIGHT_SHIFT(tmp22 + tmp12, CONST_BITS-PASS1_BITS); + 8014ff2: 12c9 asrs r1, r1, #11 + wsptr[8*5] = (int) RIGHT_SHIFT(tmp21 - tmp11, CONST_BITS-PASS1_BITS); + 8014ff4: f8ce 409c str.w r4, [lr, #156] ; 0x9c + tmp23 += MULTIPLY(z2, FIX(1.414213562)); /* c0 */ + 8014ff8: fb02 3208 mla r2, r2, r8, r3 + for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) { + 8014ffc: 9b05 ldr r3, [sp, #20] + wsptr[8*4] = (int) RIGHT_SHIFT(tmp22 - tmp12, CONST_BITS-PASS1_BITS); + 8014ffe: 12c0 asrs r0, r0, #11 + wsptr[8*2] = (int) RIGHT_SHIFT(tmp22 + tmp12, CONST_BITS-PASS1_BITS); + 8015000: f8ce 103c str.w r1, [lr, #60] ; 0x3c + wsptr[8*3] = (int) RIGHT_SHIFT(tmp23, CONST_BITS-PASS1_BITS); + 8015004: 12d2 asrs r2, r2, #11 + for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) { + 8015006: 4563 cmp r3, ip + wsptr[8*4] = (int) RIGHT_SHIFT(tmp22 - tmp12, CONST_BITS-PASS1_BITS); + 8015008: f8ce 007c str.w r0, [lr, #124] ; 0x7c + wsptr[8*3] = (int) RIGHT_SHIFT(tmp23, CONST_BITS-PASS1_BITS); + 801500c: f8ce 205c str.w r2, [lr, #92] ; 0x5c + for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) { + 8015010: f47f af72 bne.w 8014ef8 + 8015014: 9b03 ldr r3, [sp, #12] + } + + /* Pass 2: process 7 rows from work array, store into output array. + * 14-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/28). + */ + wsptr = workspace; + 8015016: ac0c add r4, sp, #48 ; 0x30 + 8015018: f1a3 0904 sub.w r9, r3, #4 + 801501c: 3318 adds r3, #24 + 801501e: 930b str r3, [sp, #44] ; 0x2c + for (ctr = 0; ctr < 7; ctr++) { + outptr = output_buf[ctr] + output_col; + 8015020: f859 3f04 ldr.w r3, [r9, #4]! + z1 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + z1 <<= CONST_BITS; + z4 = (INT32) wsptr[4]; + z2 = MULTIPLY(z4, FIX(1.274162392)); /* c4 */ + z3 = MULTIPLY(z4, FIX(0.314692123)); /* c12 */ + z4 = MULTIPLY(z4, FIX(0.881747734)); /* c8 */ + 8015024: f641 4537 movw r5, #7223 ; 0x1c37 + outptr = output_buf[ctr] + output_col; + 8015028: 9a4e ldr r2, [sp, #312] ; 0x138 + + z3 = MULTIPLY(z1 + z2, FIX(1.105676686)); /* c6 */ + + tmp13 = z3 + MULTIPLY(z1, FIX(0.273079590)); /* c2-c6 */ + tmp14 = z3 - MULTIPLY(z2, FIX(1.719280954)); /* c6+c10 */ + tmp15 = MULTIPLY(z1, FIX(0.613604268)) - /* c10 */ + 801502a: f241 38a3 movw r8, #5027 ; 0x13a3 + z4 = (INT32) wsptr[4]; + 801502e: 6927 ldr r7, [r4, #16] + tmp14 = MULTIPLY(tmp14, FIX(0.752406978)); /* c9 */ + tmp16 = tmp14 - MULTIPLY(z1, FIX(1.061150426)); /* c9+c11-c13 */ + z1 -= z2; + tmp15 = MULTIPLY(z1, FIX(0.467085129)) - z4; /* c11 */ + tmp16 += tmp15; + tmp13 = MULTIPLY(z2 + z3, - FIX(0.158341681)) - z4; /* -c13 */ + 8015030: f46f 6aa2 mvn.w sl, #1296 ; 0x510 + outptr = output_buf[ctr] + output_col; + 8015034: 1899 adds r1, r3, r2 + 8015036: 930a str r3, [sp, #40] ; 0x28 + z2 = MULTIPLY(z4, FIX(1.274162392)); /* c4 */ + 8015038: f642 03c6 movw r3, #10438 ; 0x28c6 + z1 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + 801503c: 6820 ldr r0, [r4, #0] + & RANGE_MASK]; + outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp26 - tmp16, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + + wsptr += 8; /* advance pointer to next row */ + 801503e: 3420 adds r4, #32 + z2 = MULTIPLY(z4, FIX(1.274162392)); /* c4 */ + 8015040: fb03 f207 mul.w r2, r3, r7 + z3 = MULTIPLY(z4, FIX(0.314692123)); /* c12 */ + 8015044: f640 2312 movw r3, #2578 ; 0xa12 + z1 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + 8015048: 3010 adds r0, #16 + z3 = MULTIPLY(z4, FIX(0.314692123)); /* c12 */ + 801504a: fb03 fe07 mul.w lr, r3, r7 + tmp10 = z1 + z2; + 801504e: eb02 3c40 add.w ip, r2, r0, lsl #13 + z4 = MULTIPLY(z4, FIX(0.881747734)); /* c8 */ + 8015052: 436f muls r7, r5 + tmp23 = z1 - ((z2 + z3 - z4) << 1); /* c0 = (c4+c12-c8)*2 */ + 8015054: 4472 add r2, lr + tmp11 = z1 + z3; + 8015056: eb0e 3640 add.w r6, lr, r0, lsl #13 + z1 = (INT32) wsptr[2]; + 801505a: f854 ec18 ldr.w lr, [r4, #-24] + tmp12 = z1 - z4; + 801505e: ebc7 3540 rsb r5, r7, r0, lsl #13 + tmp23 = z1 - ((z2 + z3 - z4) << 1); /* c0 = (c4+c12-c8)*2 */ + 8015062: 1bd2 subs r2, r2, r7 + z3 = MULTIPLY(z1 + z2, FIX(1.105676686)); /* c6 */ + 8015064: f242 3762 movw r7, #9058 ; 0x2362 + tmp23 = z1 - ((z2 + z3 - z4) << 1); /* c0 = (c4+c12-c8)*2 */ + 8015068: 0052 lsls r2, r2, #1 + 801506a: ebc2 3340 rsb r3, r2, r0, lsl #13 + z2 = (INT32) wsptr[6]; + 801506e: f854 2c08 ldr.w r2, [r4, #-8] + z3 = MULTIPLY(z1 + z2, FIX(1.105676686)); /* c6 */ + 8015072: eb0e 0002 add.w r0, lr, r2 + tmp23 = z1 - ((z2 + z3 - z4) << 1); /* c0 = (c4+c12-c8)*2 */ + 8015076: 9302 str r3, [sp, #8] + tmp14 = z3 - MULTIPLY(z2, FIX(1.719280954)); /* c6+c10 */ + 8015078: 4b75 ldr r3, [pc, #468] ; (8015250 ) + z3 = MULTIPLY(z1 + z2, FIX(1.105676686)); /* c6 */ + 801507a: 4378 muls r0, r7 + tmp13 = z3 + MULTIPLY(z1, FIX(0.273079590)); /* c2-c6 */ + 801507c: f640 07bd movw r7, #2237 ; 0x8bd + 8015080: fb07 070e mla r7, r7, lr, r0 + tmp14 = z3 - MULTIPLY(z2, FIX(1.719280954)); /* c6+c10 */ + 8015084: fb03 0002 mla r0, r3, r2, r0 + MULTIPLY(z2, FIX(1.378756276)); /* c2 */ + 8015088: f603 23e5 addw r3, r3, #2789 ; 0xae5 + 801508c: 435a muls r2, r3 + tmp20 = tmp10 + tmp13; + 801508e: eb0c 0307 add.w r3, ip, r7 + 8015092: 9303 str r3, [sp, #12] + tmp26 = tmp10 - tmp13; + 8015094: ebac 0307 sub.w r3, ip, r7 + tmp15 = MULTIPLY(z1, FIX(0.613604268)) - /* c10 */ + 8015098: fb08 220e mla r2, r8, lr, r2 + z3 = (INT32) wsptr[5]; + 801509c: f854 cc0c ldr.w ip, [r4, #-12] + tmp26 = tmp10 - tmp13; + 80150a0: 9304 str r3, [sp, #16] + tmp21 = tmp11 + tmp14; + 80150a2: 1833 adds r3, r6, r0 + z2 = (INT32) wsptr[3]; + 80150a4: f854 8c14 ldr.w r8, [r4, #-20] + tmp15 = MULTIPLY(z1, FIX(0.467085129)) - z4; /* c11 */ + 80150a8: f640 6ef2 movw lr, #3826 ; 0xef2 + tmp21 = tmp11 + tmp14; + 80150ac: 9305 str r3, [sp, #20] + tmp25 = tmp11 - tmp14; + 80150ae: 1a33 subs r3, r6, r0 + tmp11 = MULTIPLY(z1 + z2, FIX(1.334852607)); /* c3 */ + 80150b0: f642 20b7 movw r0, #10935 ; 0x2ab7 + tmp25 = tmp11 - tmp14; + 80150b4: 9306 str r3, [sp, #24] + tmp22 = tmp12 + tmp15; + 80150b6: 18ab adds r3, r5, r2 + 80150b8: 9307 str r3, [sp, #28] + tmp24 = tmp12 - tmp15; + 80150ba: 1aab subs r3, r5, r2 + z1 = (INT32) wsptr[1]; + 80150bc: f854 2c1c ldr.w r2, [r4, #-28] + tmp12 = MULTIPLY(tmp14, FIX(1.197448846)); /* c5 */ + 80150c0: f242 6552 movw r5, #9810 ; 0x2652 + tmp24 = tmp12 - tmp15; + 80150c4: 9308 str r3, [sp, #32] + tmp14 = z1 + z3; + 80150c6: eb02 0b0c add.w fp, r2, ip + tmp11 = MULTIPLY(z1 + z2, FIX(1.334852607)); /* c3 */ + 80150ca: eb02 0608 add.w r6, r2, r8 + tmp10 = tmp11 + tmp12 + z4 - MULTIPLY(z1, FIX(1.126980169)); /* c3+c5-c1 */ + 80150ce: f854 3c04 ldr.w r3, [r4, #-4] + tmp11 = MULTIPLY(z1 + z2, FIX(1.334852607)); /* c3 */ + 80150d2: 4346 muls r6, r0 + tmp14 = MULTIPLY(tmp14, FIX(0.752406978)); /* c9 */ + 80150d4: f641 0014 movw r0, #6164 ; 0x1814 + tmp12 = MULTIPLY(tmp14, FIX(1.197448846)); /* c5 */ + 80150d8: fb05 f50b mul.w r5, r5, fp + tmp14 = MULTIPLY(tmp14, FIX(0.752406978)); /* c9 */ + 80150dc: fb00 fb0b mul.w fp, r0, fp + tmp10 = tmp11 + tmp12 + z4 - MULTIPLY(z1, FIX(1.126980169)); /* c3+c5-c1 */ + 80150e0: 1977 adds r7, r6, r5 + 80150e2: eb07 3743 add.w r7, r7, r3, lsl #13 + 80150e6: 4b5b ldr r3, [pc, #364] ; (8015254 ) + 80150e8: fb03 7702 mla r7, r3, r2, r7 + tmp16 = tmp14 - MULTIPLY(z1, FIX(1.061150426)); /* c9+c11-c13 */ + 80150ec: f203 231b addw r3, r3, #539 ; 0x21b + 80150f0: fb03 b002 mla r0, r3, r2, fp + z1 -= z2; + 80150f4: eba2 0208 sub.w r2, r2, r8 + tmp15 = MULTIPLY(z1, FIX(0.467085129)) - z4; /* c11 */ + 80150f8: f854 3c04 ldr.w r3, [r4, #-4] + 80150fc: fb0e fe02 mul.w lr, lr, r2 + tmp13 = ((z1 - z3) << CONST_BITS) + z4; + 8015100: eba2 020c sub.w r2, r2, ip + tmp15 = MULTIPLY(z1, FIX(0.467085129)) - z4; /* c11 */ + 8015104: ebae 3e43 sub.w lr, lr, r3, lsl #13 + tmp13 = ((z1 - z3) << CONST_BITS) + z4; + 8015108: 0352 lsls r2, r2, #13 + tmp16 += tmp15; + 801510a: eb00 030e add.w r3, r0, lr + tmp13 = MULTIPLY(z2 + z3, - FIX(0.158341681)) - z4; /* -c13 */ + 801510e: eb08 000c add.w r0, r8, ip + tmp16 += tmp15; + 8015112: 9309 str r3, [sp, #36] ; 0x24 + tmp13 = MULTIPLY(z2 + z3, - FIX(0.158341681)) - z4; /* -c13 */ + 8015114: fb0a f000 mul.w r0, sl, r0 + 8015118: f854 3c04 ldr.w r3, [r4, #-4] + 801511c: eba0 3043 sub.w r0, r0, r3, lsl #13 + tmp11 += tmp13 - MULTIPLY(z2, FIX(0.424103948)); /* c3-c9-c13 */ + 8015120: 4b4d ldr r3, [pc, #308] ; (8015258 ) + 8015122: fb03 0a08 mla sl, r3, r8, r0 + tmp12 += tmp13 - MULTIPLY(z3, FIX(2.373959773)); /* c3+c5-c13 */ + 8015126: 4b4d ldr r3, [pc, #308] ; (801525c ) + 8015128: fb03 000c mla r0, r3, ip, r0 + tmp11 += tmp13 - MULTIPLY(z2, FIX(0.424103948)); /* c3-c9-c13 */ + 801512c: 44b2 add sl, r6 + tmp13 = MULTIPLY(z3 - z2, FIX(1.405321284)); /* c1 */ + 801512e: f642 46f8 movw r6, #11512 ; 0x2cf8 + tmp14 += tmp13 + z4 - MULTIPLY(z3, FIX(1.6906431334)); /* c1+c9-c11 */ + 8015132: f854 3c04 ldr.w r3, [r4, #-4] + tmp12 += tmp13 - MULTIPLY(z3, FIX(2.373959773)); /* c3+c5-c13 */ + 8015136: 4428 add r0, r5 + tmp13 = MULTIPLY(z3 - z2, FIX(1.405321284)); /* c1 */ + 8015138: ebac 0508 sub.w r5, ip, r8 + 801513c: 4375 muls r5, r6 + tmp14 += tmp13 + z4 - MULTIPLY(z3, FIX(1.6906431334)); /* c1+c9-c11 */ + 801513e: eb05 3643 add.w r6, r5, r3, lsl #13 + 8015142: 4b47 ldr r3, [pc, #284] ; (8015260 ) + 8015144: fb03 660c mla r6, r3, ip, r6 + tmp13 = ((z1 - z3) << CONST_BITS) + z4; + 8015148: f854 3c04 ldr.w r3, [r4, #-4] + tmp14 += tmp13 + z4 - MULTIPLY(z3, FIX(1.6906431334)); /* c1+c9-c11 */ + 801514c: 445e add r6, fp + tmp15 += tmp13 + MULTIPLY(z2, FIX(0.674957567)); /* c1+c11-c5 */ + 801514e: f241 5b99 movw fp, #5529 ; 0x1599 + 8015152: fb0b 5508 mla r5, fp, r8, r5 + 8015156: 4475 add r5, lr + tmp13 = ((z1 - z3) << CONST_BITS) + z4; + 8015158: eb02 3e43 add.w lr, r2, r3, lsl #13 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp10, + 801515c: 9b03 ldr r3, [sp, #12] + 801515e: 9a4e ldr r2, [sp, #312] ; 0x138 + 8015160: eb03 0c07 add.w ip, r3, r7 + 8015164: 9b01 ldr r3, [sp, #4] + & RANGE_MASK]; + 8015166: f3cc 4c89 ubfx ip, ip, #18, #10 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp10, + 801516a: f813 c00c ldrb.w ip, [r3, ip] + 801516e: 9b0a ldr r3, [sp, #40] ; 0x28 + 8015170: f803 c002 strb.w ip, [r3, r2] + outptr[13] = range_limit[(int) RIGHT_SHIFT(tmp20 - tmp10, + 8015174: 9b03 ldr r3, [sp, #12] + 8015176: 1bdf subs r7, r3, r7 + 8015178: 9b01 ldr r3, [sp, #4] + & RANGE_MASK]; + 801517a: f3c7 4789 ubfx r7, r7, #18, #10 + outptr[13] = range_limit[(int) RIGHT_SHIFT(tmp20 - tmp10, + 801517e: 5ddf ldrb r7, [r3, r7] + 8015180: 734f strb r7, [r1, #13] + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp11, + 8015182: 9b05 ldr r3, [sp, #20] + 8015184: eb03 070a add.w r7, r3, sl + 8015188: 9b01 ldr r3, [sp, #4] + & RANGE_MASK]; + 801518a: f3c7 4789 ubfx r7, r7, #18, #10 + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp11, + 801518e: 5ddf ldrb r7, [r3, r7] + outptr[12] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp11, + 8015190: 9b05 ldr r3, [sp, #20] + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp11, + 8015192: 704f strb r7, [r1, #1] + outptr[12] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp11, + 8015194: eba3 070a sub.w r7, r3, sl + 8015198: 9b01 ldr r3, [sp, #4] + & RANGE_MASK]; + 801519a: f3c7 4789 ubfx r7, r7, #18, #10 + outptr[12] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp11, + 801519e: 5ddf ldrb r7, [r3, r7] + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp12, + 80151a0: 9b07 ldr r3, [sp, #28] + outptr[12] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp11, + 80151a2: 730f strb r7, [r1, #12] + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp12, + 80151a4: 181f adds r7, r3, r0 + 80151a6: 9b01 ldr r3, [sp, #4] + & RANGE_MASK]; + 80151a8: f3c7 4789 ubfx r7, r7, #18, #10 + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp12, + 80151ac: 5ddf ldrb r7, [r3, r7] + outptr[11] = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp12, + 80151ae: 9b07 ldr r3, [sp, #28] + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp12, + 80151b0: 708f strb r7, [r1, #2] + outptr[11] = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp12, + 80151b2: 1a18 subs r0, r3, r0 + 80151b4: 9b01 ldr r3, [sp, #4] + & RANGE_MASK]; + 80151b6: f3c0 4089 ubfx r0, r0, #18, #10 + outptr[11] = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp12, + 80151ba: 5c18 ldrb r0, [r3, r0] + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp23 + tmp13, + 80151bc: 9b02 ldr r3, [sp, #8] + outptr[11] = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp12, + 80151be: 72c8 strb r0, [r1, #11] + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp23 + tmp13, + 80151c0: eb03 000e add.w r0, r3, lr + 80151c4: 9b01 ldr r3, [sp, #4] + & RANGE_MASK]; + 80151c6: f3c0 4089 ubfx r0, r0, #18, #10 + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp23 + tmp13, + 80151ca: 5c18 ldrb r0, [r3, r0] + outptr[10] = range_limit[(int) RIGHT_SHIFT(tmp23 - tmp13, + 80151cc: 9b02 ldr r3, [sp, #8] + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp23 + tmp13, + 80151ce: 70c8 strb r0, [r1, #3] + outptr[10] = range_limit[(int) RIGHT_SHIFT(tmp23 - tmp13, + 80151d0: eba3 020e sub.w r2, r3, lr + 80151d4: 9b01 ldr r3, [sp, #4] + & RANGE_MASK]; + 80151d6: f3c2 4289 ubfx r2, r2, #18, #10 + outptr[10] = range_limit[(int) RIGHT_SHIFT(tmp23 - tmp13, + 80151da: 5c9a ldrb r2, [r3, r2] + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp24 + tmp14, + 80151dc: 9b08 ldr r3, [sp, #32] + outptr[10] = range_limit[(int) RIGHT_SHIFT(tmp23 - tmp13, + 80151de: 728a strb r2, [r1, #10] + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp24 + tmp14, + 80151e0: 199a adds r2, r3, r6 + 80151e2: 9b01 ldr r3, [sp, #4] + & RANGE_MASK]; + 80151e4: f3c2 4289 ubfx r2, r2, #18, #10 + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp24 + tmp14, + 80151e8: 5c9a ldrb r2, [r3, r2] + outptr[9] = range_limit[(int) RIGHT_SHIFT(tmp24 - tmp14, + 80151ea: 9b08 ldr r3, [sp, #32] + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp24 + tmp14, + 80151ec: 710a strb r2, [r1, #4] + outptr[9] = range_limit[(int) RIGHT_SHIFT(tmp24 - tmp14, + 80151ee: 1b9a subs r2, r3, r6 + 80151f0: 9b01 ldr r3, [sp, #4] + & RANGE_MASK]; + 80151f2: f3c2 4289 ubfx r2, r2, #18, #10 + outptr[9] = range_limit[(int) RIGHT_SHIFT(tmp24 - tmp14, + 80151f6: 5c9a ldrb r2, [r3, r2] + 80151f8: 724a strb r2, [r1, #9] + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp25 + tmp15, + 80151fa: 9b06 ldr r3, [sp, #24] + 80151fc: 195a adds r2, r3, r5 + 80151fe: 9b01 ldr r3, [sp, #4] + & RANGE_MASK]; + 8015200: f3c2 4289 ubfx r2, r2, #18, #10 + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp25 + tmp15, + 8015204: 5c9a ldrb r2, [r3, r2] + outptr[8] = range_limit[(int) RIGHT_SHIFT(tmp25 - tmp15, + 8015206: 9b06 ldr r3, [sp, #24] + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp25 + tmp15, + 8015208: 714a strb r2, [r1, #5] + outptr[8] = range_limit[(int) RIGHT_SHIFT(tmp25 - tmp15, + 801520a: 1b5a subs r2, r3, r5 + 801520c: 9b01 ldr r3, [sp, #4] + & RANGE_MASK]; + 801520e: f3c2 4289 ubfx r2, r2, #18, #10 + outptr[8] = range_limit[(int) RIGHT_SHIFT(tmp25 - tmp15, + 8015212: 5c9a ldrb r2, [r3, r2] + outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp26 + tmp16, + 8015214: 9b04 ldr r3, [sp, #16] + outptr[8] = range_limit[(int) RIGHT_SHIFT(tmp25 - tmp15, + 8015216: 720a strb r2, [r1, #8] + outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp26 + tmp16, + 8015218: 9a09 ldr r2, [sp, #36] ; 0x24 + 801521a: 189a adds r2, r3, r2 + 801521c: 9b01 ldr r3, [sp, #4] + & RANGE_MASK]; + 801521e: f3c2 4289 ubfx r2, r2, #18, #10 + outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp26 + tmp16, + 8015222: 5c9a ldrb r2, [r3, r2] + outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp26 - tmp16, + 8015224: 9b04 ldr r3, [sp, #16] + outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp26 + tmp16, + 8015226: 718a strb r2, [r1, #6] + outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp26 - tmp16, + 8015228: 9a09 ldr r2, [sp, #36] ; 0x24 + 801522a: 1a9a subs r2, r3, r2 + 801522c: 9b01 ldr r3, [sp, #4] + & RANGE_MASK]; + 801522e: f3c2 4289 ubfx r2, r2, #18, #10 + outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp26 - tmp16, + 8015232: 5c9a ldrb r2, [r3, r2] + for (ctr = 0; ctr < 7; ctr++) { + 8015234: 9b0b ldr r3, [sp, #44] ; 0x2c + outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp26 - tmp16, + 8015236: 71ca strb r2, [r1, #7] + for (ctr = 0; ctr < 7; ctr++) { + 8015238: 454b cmp r3, r9 + 801523a: f47f aef1 bne.w 8015020 + } +} + 801523e: b045 add sp, #276 ; 0x114 + 8015240: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 8015244: ffffc515 .word 0xffffc515 + 8015248: ffffb0f1 .word 0xffffb0f1 + 801524c: ffffd3e1 .word 0xffffd3e1 + 8015250: ffffc8fc .word 0xffffc8fc + 8015254: ffffdbf0 .word 0xffffdbf0 + 8015258: fffff26e .word 0xfffff26e + 801525c: ffffb409 .word 0xffffb409 + 8015260: ffffc9e6 .word 0xffffc9e6 + +08015264 : + +GLOBAL(void) +jpeg_idct_12x6 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + 8015264: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + INT32 z1, z2, z3, z4; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + int * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + 8015268: f8d0 014c ldr.w r0, [r0, #332] ; 0x14c +{ + 801526c: b0bb sub sp, #236 ; 0xec + 801526e: 6d4d ldr r5, [r1, #84] ; 0x54 + 8015270: 1e96 subs r6, r2, #2 + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + 8015272: 3080 adds r0, #128 ; 0x80 + 8015274: 320e adds r2, #14 + 8015276: 3d04 subs r5, #4 + /* Pass 1: process columns from input, store into work array. + * 6-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/12). + */ + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + 8015278: af0a add r7, sp, #40 ; 0x28 + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + 801527a: 9001 str r0, [sp, #4] + for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) { + 801527c: 9202 str r2, [sp, #8] + /* Even part */ + + tmp10 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 801527e: f936 1f02 ldrsh.w r1, [r6, #2]! + tmp12 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + tmp20 = MULTIPLY(tmp12, FIX(0.707106781)); /* c4 */ + tmp11 = tmp10 + tmp20; + tmp21 = RIGHT_SHIFT(tmp10 - tmp20 - tmp20, CONST_BITS-PASS1_BITS); + tmp20 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + tmp10 = MULTIPLY(tmp20, FIX(1.224744871)); /* c2 */ + 8015282: f242 7031 movw r0, #10033 ; 0x2731 + tmp10 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 8015286: f855 2f04 ldr.w r2, [r5, #4]! + for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) { + 801528a: 3704 adds r7, #4 + tmp12 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + 801528c: f9b6 4040 ldrsh.w r4, [r6, #64] ; 0x40 + tmp10 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 8015290: 4351 muls r1, r2 + tmp12 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + 8015292: f8d5 2080 ldr.w r2, [r5, #128] ; 0x80 + tmp20 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + 8015296: f9b6 c020 ldrsh.w ip, [r6, #32] + tmp12 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + 801529a: 4362 muls r2, r4 + tmp10 <<= CONST_BITS; + 801529c: 0349 lsls r1, r1, #13 + tmp20 = MULTIPLY(tmp12, FIX(0.707106781)); /* c4 */ + 801529e: f241 64a1 movw r4, #5793 ; 0x16a1 + tmp22 = tmp11 - tmp10; + + /* Odd part */ + + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + 80152a2: f9b6 9030 ldrsh.w r9, [r6, #48] ; 0x30 + tmp10 += ONE << (CONST_BITS-PASS1_BITS-1); + 80152a6: f501 6180 add.w r1, r1, #1024 ; 0x400 + z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + 80152aa: f9b6 8050 ldrsh.w r8, [r6, #80] ; 0x50 + tmp20 = MULTIPLY(tmp12, FIX(0.707106781)); /* c4 */ + 80152ae: 4362 muls r2, r4 + tmp11 = tmp10 + tmp20; + 80152b0: 188c adds r4, r1, r2 + tmp21 = RIGHT_SHIFT(tmp10 - tmp20 - tmp20, CONST_BITS-PASS1_BITS); + 80152b2: eba1 0142 sub.w r1, r1, r2, lsl #1 + tmp20 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + 80152b6: 6c2a ldr r2, [r5, #64] ; 0x40 + 80152b8: fb02 f20c mul.w r2, r2, ip + tmp10 = MULTIPLY(tmp20, FIX(1.224744871)); /* c2 */ + 80152bc: 4342 muls r2, r0 + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 80152be: 6a28 ldr r0, [r5, #32] + tmp20 = tmp11 + tmp10; + 80152c0: eb04 0e02 add.w lr, r4, r2 + tmp22 = tmp11 - tmp10; + 80152c4: 1aa4 subs r4, r4, r2 + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 80152c6: f9b6 2010 ldrsh.w r2, [r6, #16] + 80152ca: 4342 muls r2, r0 + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + 80152cc: 6e28 ldr r0, [r5, #96] ; 0x60 + 80152ce: fb00 f909 mul.w r9, r0, r9 + z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + 80152d2: f8d5 00a0 ldr.w r0, [r5, #160] ; 0xa0 + 80152d6: fb00 f808 mul.w r8, r0, r8 + tmp11 = MULTIPLY(z1 + z3, FIX(0.366025404)); /* c5 */ + 80152da: f640 30b6 movw r0, #2998 ; 0xbb6 + tmp10 = tmp11 + ((z1 + z2) << CONST_BITS); + 80152de: eb02 0a09 add.w sl, r2, r9 + tmp11 = MULTIPLY(z1 + z3, FIX(0.366025404)); /* c5 */ + 80152e2: eb02 0c08 add.w ip, r2, r8 + tmp12 = tmp11 + ((z3 - z2) << CONST_BITS); + tmp11 = (z1 - z2 - z3) << PASS1_BITS; + 80152e6: eba2 0209 sub.w r2, r2, r9 + tmp12 = tmp11 + ((z3 - z2) << CONST_BITS); + 80152ea: eba8 0b09 sub.w fp, r8, r9 + tmp11 = MULTIPLY(z1 + z3, FIX(0.366025404)); /* c5 */ + 80152ee: fb00 fc0c mul.w ip, r0, ip + tmp11 = (z1 - z2 - z3) << PASS1_BITS; + 80152f2: eba2 0208 sub.w r2, r2, r8 + tmp10 = tmp11 + ((z1 + z2) << CONST_BITS); + 80152f6: eb0c 3a4a add.w sl, ip, sl, lsl #13 + tmp11 = (z1 - z2 - z3) << PASS1_BITS; + 80152fa: 0092 lsls r2, r2, #2 + + /* Final output stage */ + + wsptr[8*0] = (int) RIGHT_SHIFT(tmp20 + tmp10, CONST_BITS-PASS1_BITS); + 80152fc: eb0e 080a add.w r8, lr, sl + wsptr[8*5] = (int) RIGHT_SHIFT(tmp20 - tmp10, CONST_BITS-PASS1_BITS); + 8015300: ebae 0e0a sub.w lr, lr, sl + tmp12 = tmp11 + ((z3 - z2) << CONST_BITS); + 8015304: eb0c 3c4b add.w ip, ip, fp, lsl #13 + wsptr[8*5] = (int) RIGHT_SHIFT(tmp20 - tmp10, CONST_BITS-PASS1_BITS); + 8015308: ea4f 2eee mov.w lr, lr, asr #11 + wsptr[8*0] = (int) RIGHT_SHIFT(tmp20 + tmp10, CONST_BITS-PASS1_BITS); + 801530c: ea4f 28e8 mov.w r8, r8, asr #11 + wsptr[8*5] = (int) RIGHT_SHIFT(tmp20 - tmp10, CONST_BITS-PASS1_BITS); + 8015310: f8c7 e09c str.w lr, [r7, #156] ; 0x9c + wsptr[8*1] = (int) (tmp21 + tmp11); + 8015314: eb02 2ee1 add.w lr, r2, r1, asr #11 + wsptr[8*4] = (int) (tmp21 - tmp11); + 8015318: ebc2 22e1 rsb r2, r2, r1, asr #11 + wsptr[8*0] = (int) RIGHT_SHIFT(tmp20 + tmp10, CONST_BITS-PASS1_BITS); + 801531c: f847 8c04 str.w r8, [r7, #-4] + wsptr[8*1] = (int) (tmp21 + tmp11); + 8015320: f8c7 e01c str.w lr, [r7, #28] + wsptr[8*4] = (int) (tmp21 - tmp11); + 8015324: 67fa str r2, [r7, #124] ; 0x7c + wsptr[8*2] = (int) RIGHT_SHIFT(tmp22 + tmp12, CONST_BITS-PASS1_BITS); + 8015326: eb04 020c add.w r2, r4, ip + wsptr[8*3] = (int) RIGHT_SHIFT(tmp22 - tmp12, CONST_BITS-PASS1_BITS); + 801532a: eba4 040c sub.w r4, r4, ip + wsptr[8*2] = (int) RIGHT_SHIFT(tmp22 + tmp12, CONST_BITS-PASS1_BITS); + 801532e: 12d2 asrs r2, r2, #11 + wsptr[8*3] = (int) RIGHT_SHIFT(tmp22 - tmp12, CONST_BITS-PASS1_BITS); + 8015330: 12e4 asrs r4, r4, #11 + wsptr[8*2] = (int) RIGHT_SHIFT(tmp22 + tmp12, CONST_BITS-PASS1_BITS); + 8015332: 63fa str r2, [r7, #60] ; 0x3c + for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) { + 8015334: 9a02 ldr r2, [sp, #8] + wsptr[8*3] = (int) RIGHT_SHIFT(tmp22 - tmp12, CONST_BITS-PASS1_BITS); + 8015336: 65fc str r4, [r7, #92] ; 0x5c + for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) { + 8015338: 42b2 cmp r2, r6 + 801533a: d1a0 bne.n 801527e + 801533c: f1a3 0a04 sub.w sl, r3, #4 + } + + /* Pass 2: process 6 rows from work array, store into output array. + * 12-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/24). + */ + wsptr = workspace; + 8015340: aa0a add r2, sp, #40 ; 0x28 + 8015342: 3314 adds r3, #20 + 8015344: 9309 str r3, [sp, #36] ; 0x24 + for (ctr = 0; ctr < 6; ctr++) { + outptr = output_buf[ctr] + output_col; + 8015346: f85a 3f04 ldr.w r3, [sl, #4]! + & RANGE_MASK]; + outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp25 - tmp15, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + + wsptr += 8; /* advance pointer to next row */ + 801534a: 3220 adds r2, #32 + outptr = output_buf[ctr] + output_col; + 801534c: 9944 ldr r1, [sp, #272] ; 0x110 + 801534e: 9308 str r3, [sp, #32] + z2 = (INT32) wsptr[6]; + 8015350: f852 5c08 ldr.w r5, [r2, #-8] + outptr = output_buf[ctr] + output_col; + 8015354: 440b add r3, r1 + z3 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + 8015356: f852 1c20 ldr.w r1, [r2, #-32] + z1 = (INT32) wsptr[2]; + 801535a: f852 6c18 ldr.w r6, [r2, #-24] + z2 <<= CONST_BITS; + 801535e: 036d lsls r5, r5, #13 + z3 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + 8015360: f101 0c10 add.w ip, r1, #16 + z4 = (INT32) wsptr[4]; + 8015364: f852 4c10 ldr.w r4, [r2, #-16] + z4 = MULTIPLY(z4, FIX(1.224744871)); /* c4 */ + 8015368: f242 7131 movw r1, #10033 ; 0x2731 + tmp12 = z1 - z2; + 801536c: ebc5 3e46 rsb lr, r5, r6, lsl #13 + z1 = (INT32) wsptr[1]; + 8015370: f852 8c1c ldr.w r8, [r2, #-28] + z4 = MULTIPLY(z4, FIX(1.224744871)); /* c4 */ + 8015374: 434c muls r4, r1 + z4 = MULTIPLY(z1, FIX(1.366025404)); /* c2 */ + 8015376: f642 31b6 movw r1, #11190 ; 0x2bb6 + tmp21 = z3 + tmp12; + 801537a: eb0e 304c add.w r0, lr, ip, lsl #13 + z4 = MULTIPLY(z1, FIX(1.366025404)); /* c2 */ + 801537e: 4371 muls r1, r6 + tmp10 = z3 + z4; + 8015380: eb04 374c add.w r7, r4, ip, lsl #13 + tmp21 = z3 + tmp12; + 8015384: 9002 str r0, [sp, #8] + tmp11 = z3 - z4; + 8015386: ebc4 344c rsb r4, r4, ip, lsl #13 + tmp24 = z3 - tmp12; + 801538a: ebce 304c rsb r0, lr, ip, lsl #13 + tmp12 = z4 + z2; + 801538e: eb01 0c05 add.w ip, r1, r5 + tmp12 = z4 - z1 - z2; + 8015392: eba1 3146 sub.w r1, r1, r6, lsl #13 + z3 = (INT32) wsptr[5]; + 8015396: f852 6c0c ldr.w r6, [r2, #-12] + tmp24 = z3 - tmp12; + 801539a: 9003 str r0, [sp, #12] + tmp20 = tmp10 + tmp12; + 801539c: eb07 000c add.w r0, r7, ip + tmp12 = z4 - z1 - z2; + 80153a0: 1b49 subs r1, r1, r5 + tmp10 = z1 + z3; + 80153a2: eb08 0b06 add.w fp, r8, r6 + tmp20 = tmp10 + tmp12; + 80153a6: 9004 str r0, [sp, #16] + tmp25 = tmp10 - tmp12; + 80153a8: eba7 000c sub.w r0, r7, ip + z4 = (INT32) wsptr[7]; + 80153ac: f852 5c04 ldr.w r5, [r2, #-4] + tmp15 = MULTIPLY(tmp10 + z4, FIX(0.860918669)); /* c7 */ + 80153b0: f641 378d movw r7, #7053 ; 0x1b8d + tmp25 = tmp10 - tmp12; + 80153b4: 9005 str r0, [sp, #20] + tmp22 = tmp11 + tmp12; + 80153b6: 1860 adds r0, r4, r1 + tmp23 = tmp11 - tmp12; + 80153b8: 1a61 subs r1, r4, r1 + tmp15 = MULTIPLY(tmp10 + z4, FIX(0.860918669)); /* c7 */ + 80153ba: eb05 0c0b add.w ip, r5, fp + tmp22 = tmp11 + tmp12; + 80153be: 9006 str r0, [sp, #24] + tmp11 = MULTIPLY(z2, FIX(1.306562965)); /* c3 */ + 80153c0: f642 10cf movw r0, #10703 ; 0x29cf + tmp23 = tmp11 - tmp12; + 80153c4: 9107 str r1, [sp, #28] + tmp13 = MULTIPLY(z3 + z4, - FIX(1.045510580)); /* -(c7+c11) */ + 80153c6: eb06 0905 add.w r9, r6, r5 + tmp11 = MULTIPLY(z2, FIX(1.306562965)); /* c3 */ + 80153ca: f852 1c14 ldr.w r1, [r2, #-20] + tmp15 = MULTIPLY(tmp10 + z4, FIX(0.860918669)); /* c7 */ + 80153ce: fb07 fc0c mul.w ip, r7, ip + tmp12 = tmp15 + MULTIPLY(tmp10, FIX(0.261052384)); /* c5-c7 */ + 80153d2: f640 075b movw r7, #2139 ; 0x85b + tmp11 = MULTIPLY(z2, FIX(1.306562965)); /* c3 */ + 80153d6: fb00 f401 mul.w r4, r0, r1 + tmp14 = MULTIPLY(z2, - FIX_0_541196100); /* -c9 */ + 80153da: 484b ldr r0, [pc, #300] ; (8015508 ) + tmp12 = tmp15 + MULTIPLY(tmp10, FIX(0.261052384)); /* c5-c7 */ + 80153dc: fb07 cb0b mla fp, r7, fp, ip + tmp10 = tmp12 + tmp11 + MULTIPLY(z1, FIX(0.280143716)); /* c1-c5 */ + 80153e0: f640 07f7 movw r7, #2295 ; 0x8f7 + tmp14 = MULTIPLY(z2, - FIX_0_541196100); /* -c9 */ + 80153e4: 4341 muls r1, r0 + tmp13 = MULTIPLY(z3 + z4, - FIX(1.045510580)); /* -(c7+c11) */ + 80153e6: 4849 ldr r0, [pc, #292] ; (801550c ) + tmp10 = tmp12 + tmp11 + MULTIPLY(z1, FIX(0.280143716)); /* c1-c5 */ + 80153e8: eb04 0e0b add.w lr, r4, fp + tmp13 += tmp15 - tmp11 + MULTIPLY(z4, FIX(1.586706681)); /* c1+c11 */ + 80153ec: ebac 0404 sub.w r4, ip, r4 + tmp13 = MULTIPLY(z3 + z4, - FIX(1.045510580)); /* -(c7+c11) */ + 80153f0: fb00 f909 mul.w r9, r0, r9 + tmp12 += tmp13 + tmp14 - MULTIPLY(z3, FIX(1.478575242)); /* c1+c5-c7-c11 */ + 80153f4: f6a0 50db subw r0, r0, #3547 ; 0xddb + tmp10 = tmp12 + tmp11 + MULTIPLY(z1, FIX(0.280143716)); /* c1-c5 */ + 80153f8: fb07 ee08 mla lr, r7, r8, lr + tmp12 += tmp13 + tmp14 - MULTIPLY(z3, FIX(1.478575242)); /* c1+c5-c7-c11 */ + 80153fc: eb01 0709 add.w r7, r1, r9 + 8015400: fb00 7706 mla r7, r0, r6, r7 + tmp15 += tmp14 - MULTIPLY(z1, FIX(0.676326758)) - /* c7-c11 */ + 8015404: 4842 ldr r0, [pc, #264] ; (8015510 ) + 8015406: fb00 1108 mla r1, r0, r8, r1 + 801540a: 4842 ldr r0, [pc, #264] ; (8015514 ) + tmp12 += tmp13 + tmp14 - MULTIPLY(z3, FIX(1.478575242)); /* c1+c5-c7-c11 */ + 801540c: 445f add r7, fp + tmp13 += tmp15 - tmp11 + MULTIPLY(z4, FIX(1.586706681)); /* c1+c11 */ + 801540e: f243 2bc6 movw fp, #12998 ; 0x32c6 + tmp15 += tmp14 - MULTIPLY(z1, FIX(0.676326758)) - /* c7-c11 */ + 8015412: fb00 1105 mla r1, r0, r5, r1 + z2 -= z3; + 8015416: f852 0c14 ldr.w r0, [r2, #-20] + tmp13 += tmp15 - tmp11 + MULTIPLY(z4, FIX(1.586706681)); /* c1+c11 */ + 801541a: fb0b 4405 mla r4, fp, r5, r4 + z1 -= z4; + 801541e: eba8 0505 sub.w r5, r8, r5 + z2 -= z3; + 8015422: 1b86 subs r6, r0, r6 + tmp15 += tmp14 - MULTIPLY(z1, FIX(0.676326758)) - /* c7-c11 */ + 8015424: 4461 add r1, ip + z3 = MULTIPLY(z1 + z2, FIX_0_541196100); /* c9 */ + 8015426: f241 1851 movw r8, #4433 ; 0x1151 + tmp14 = z3 - MULTIPLY(z2, FIX_1_847759065); /* c3+c9 */ + 801542a: 483b ldr r0, [pc, #236] ; (8015518 ) + z3 = MULTIPLY(z1 + z2, FIX_0_541196100); /* c9 */ + 801542c: eb05 0c06 add.w ip, r5, r6 + tmp13 += tmp15 - tmp11 + MULTIPLY(z4, FIX(1.586706681)); /* c1+c11 */ + 8015430: 444c add r4, r9 + z3 = MULTIPLY(z1 + z2, FIX_0_541196100); /* c9 */ + 8015432: fb08 fc0c mul.w ip, r8, ip + tmp11 = z3 + MULTIPLY(z1, FIX_0_765366865); /* c3-c9 */ + 8015436: f641 087e movw r8, #6270 ; 0x187e + 801543a: fb08 c805 mla r8, r8, r5, ip + tmp14 = z3 - MULTIPLY(z2, FIX_1_847759065); /* c3+c9 */ + 801543e: fb00 cc06 mla ip, r0, r6, ip + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp10, + 8015442: 9804 ldr r0, [sp, #16] + 8015444: 9e44 ldr r6, [sp, #272] ; 0x110 + 8015446: eb00 050e add.w r5, r0, lr + 801544a: 9801 ldr r0, [sp, #4] + & RANGE_MASK]; + 801544c: f3c5 4589 ubfx r5, r5, #18, #10 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp10, + 8015450: 5d45 ldrb r5, [r0, r5] + 8015452: 9808 ldr r0, [sp, #32] + 8015454: 5585 strb r5, [r0, r6] + outptr[11] = range_limit[(int) RIGHT_SHIFT(tmp20 - tmp10, + 8015456: 9804 ldr r0, [sp, #16] + 8015458: eba0 050e sub.w r5, r0, lr + 801545c: 9801 ldr r0, [sp, #4] + & RANGE_MASK]; + 801545e: f3c5 4589 ubfx r5, r5, #18, #10 + outptr[11] = range_limit[(int) RIGHT_SHIFT(tmp20 - tmp10, + 8015462: 5d45 ldrb r5, [r0, r5] + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp11, + 8015464: 9802 ldr r0, [sp, #8] + outptr[11] = range_limit[(int) RIGHT_SHIFT(tmp20 - tmp10, + 8015466: 72dd strb r5, [r3, #11] + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp11, + 8015468: eb00 0508 add.w r5, r0, r8 + 801546c: 9801 ldr r0, [sp, #4] + & RANGE_MASK]; + 801546e: f3c5 4589 ubfx r5, r5, #18, #10 + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp11, + 8015472: 5d45 ldrb r5, [r0, r5] + 8015474: 705d strb r5, [r3, #1] + outptr[10] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp11, + 8015476: 9802 ldr r0, [sp, #8] + 8015478: eba0 0508 sub.w r5, r0, r8 + 801547c: 9801 ldr r0, [sp, #4] + & RANGE_MASK]; + 801547e: f3c5 4589 ubfx r5, r5, #18, #10 + outptr[10] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp11, + 8015482: 5d45 ldrb r5, [r0, r5] + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp12, + 8015484: 9806 ldr r0, [sp, #24] + outptr[10] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp11, + 8015486: 729d strb r5, [r3, #10] + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp12, + 8015488: 19c5 adds r5, r0, r7 + 801548a: 9801 ldr r0, [sp, #4] + & RANGE_MASK]; + 801548c: f3c5 4589 ubfx r5, r5, #18, #10 + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp12, + 8015490: 5d45 ldrb r5, [r0, r5] + outptr[9] = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp12, + 8015492: 9806 ldr r0, [sp, #24] + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp12, + 8015494: 709d strb r5, [r3, #2] + outptr[9] = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp12, + 8015496: 1bc5 subs r5, r0, r7 + 8015498: 9801 ldr r0, [sp, #4] + & RANGE_MASK]; + 801549a: f3c5 4589 ubfx r5, r5, #18, #10 + outptr[9] = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp12, + 801549e: 5d45 ldrb r5, [r0, r5] + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp23 + tmp13, + 80154a0: 9807 ldr r0, [sp, #28] + outptr[9] = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp12, + 80154a2: 725d strb r5, [r3, #9] + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp23 + tmp13, + 80154a4: 1905 adds r5, r0, r4 + 80154a6: 9801 ldr r0, [sp, #4] + & RANGE_MASK]; + 80154a8: f3c5 4589 ubfx r5, r5, #18, #10 + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp23 + tmp13, + 80154ac: 5d45 ldrb r5, [r0, r5] + outptr[8] = range_limit[(int) RIGHT_SHIFT(tmp23 - tmp13, + 80154ae: 9807 ldr r0, [sp, #28] + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp23 + tmp13, + 80154b0: 70dd strb r5, [r3, #3] + outptr[8] = range_limit[(int) RIGHT_SHIFT(tmp23 - tmp13, + 80154b2: 1b04 subs r4, r0, r4 + 80154b4: 9801 ldr r0, [sp, #4] + & RANGE_MASK]; + 80154b6: f3c4 4489 ubfx r4, r4, #18, #10 + outptr[8] = range_limit[(int) RIGHT_SHIFT(tmp23 - tmp13, + 80154ba: 5d04 ldrb r4, [r0, r4] + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp24 + tmp14, + 80154bc: 9803 ldr r0, [sp, #12] + outptr[8] = range_limit[(int) RIGHT_SHIFT(tmp23 - tmp13, + 80154be: 721c strb r4, [r3, #8] + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp24 + tmp14, + 80154c0: eb00 040c add.w r4, r0, ip + 80154c4: 9801 ldr r0, [sp, #4] + & RANGE_MASK]; + 80154c6: f3c4 4489 ubfx r4, r4, #18, #10 + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp24 + tmp14, + 80154ca: 5d04 ldrb r4, [r0, r4] + outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp24 - tmp14, + 80154cc: 9803 ldr r0, [sp, #12] + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp24 + tmp14, + 80154ce: 711c strb r4, [r3, #4] + outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp24 - tmp14, + 80154d0: eba0 040c sub.w r4, r0, ip + 80154d4: 9801 ldr r0, [sp, #4] + & RANGE_MASK]; + 80154d6: f3c4 4489 ubfx r4, r4, #18, #10 + outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp24 - tmp14, + 80154da: 5d04 ldrb r4, [r0, r4] + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp25 + tmp15, + 80154dc: 9805 ldr r0, [sp, #20] + outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp24 - tmp14, + 80154de: 71dc strb r4, [r3, #7] + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp25 + tmp15, + 80154e0: 1844 adds r4, r0, r1 + 80154e2: 9801 ldr r0, [sp, #4] + & RANGE_MASK]; + 80154e4: f3c4 4489 ubfx r4, r4, #18, #10 + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp25 + tmp15, + 80154e8: 5d04 ldrb r4, [r0, r4] + 80154ea: 715c strb r4, [r3, #5] + outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp25 - tmp15, + 80154ec: 9805 ldr r0, [sp, #20] + 80154ee: 1a41 subs r1, r0, r1 + 80154f0: 9801 ldr r0, [sp, #4] + & RANGE_MASK]; + 80154f2: f3c1 4189 ubfx r1, r1, #18, #10 + outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp25 - tmp15, + 80154f6: 5c41 ldrb r1, [r0, r1] + 80154f8: 7199 strb r1, [r3, #6] + for (ctr = 0; ctr < 6; ctr++) { + 80154fa: 9b09 ldr r3, [sp, #36] ; 0x24 + 80154fc: 4553 cmp r3, sl + 80154fe: f47f af22 bne.w 8015346 + } +} + 8015502: b03b add sp, #236 ; 0xec + 8015504: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 8015508: ffffeeaf .word 0xffffeeaf + 801550c: ffffde8b .word 0xffffde8b + 8015510: ffffea5c .word 0xffffea5c + 8015514: ffffc08c .word 0xffffc08c + 8015518: ffffc4df .word 0xffffc4df + +0801551c : + +GLOBAL(void) +jpeg_idct_10x5 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + 801551c: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + INT32 z1, z2, z3, z4; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + int * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + 8015520: f8d0 014c ldr.w r0, [r0, #332] ; 0x14c +{ + 8015524: b0b1 sub sp, #196 ; 0xc4 + 8015526: 6d4d ldr r5, [r1, #84] ; 0x54 + 8015528: 1e96 subs r6, r2, #2 + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + 801552a: 3080 adds r0, #128 ; 0x80 + 801552c: 320e adds r2, #14 + 801552e: 3d04 subs r5, #4 + /* Pass 1: process columns from input, store into work array. + * 5-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/10). + */ + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + 8015530: af08 add r7, sp, #32 + tmp12 <<= CONST_BITS; + /* Add fudge factor here for final descale. */ + tmp12 += ONE << (CONST_BITS-PASS1_BITS-1); + tmp13 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + tmp14 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + z1 = MULTIPLY(tmp13 + tmp14, FIX(0.790569415)); /* (c2+c4)/2 */ + 8015532: f641 1e4c movw lr, #6476 ; 0x194c + z2 = MULTIPLY(tmp13 - tmp14, FIX(0.353553391)); /* (c2-c4)/2 */ + 8015536: f44f 6c35 mov.w ip, #2896 ; 0xb50 + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + 801553a: 9001 str r0, [sp, #4] + for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) { + 801553c: 9202 str r2, [sp, #8] + tmp12 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 801553e: f936 2f02 ldrsh.w r2, [r6, #2]! + for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) { + 8015542: 3704 adds r7, #4 + tmp12 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 8015544: f855 1f04 ldr.w r1, [r5, #4]! + tmp14 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + 8015548: f9b6 8040 ldrsh.w r8, [r6, #64] ; 0x40 + tmp12 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 801554c: 434a muls r2, r1 + tmp13 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + 801554e: 6c2c ldr r4, [r5, #64] ; 0x40 + 8015550: f9b6 1020 ldrsh.w r1, [r6, #32] + tmp11 = z3 - z1; + tmp12 -= z2 << 2; + + /* Odd part */ + + z2 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 8015554: 6a28 ldr r0, [r5, #32] + tmp12 <<= CONST_BITS; + 8015556: 0352 lsls r2, r2, #13 + tmp13 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + 8015558: 4361 muls r1, r4 + tmp14 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + 801555a: f8d5 4080 ldr.w r4, [r5, #128] ; 0x80 + z2 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 801555e: f9b6 a010 ldrsh.w sl, [r6, #16] + tmp12 += ONE << (CONST_BITS-PASS1_BITS-1); + 8015562: f502 6280 add.w r2, r2, #1024 ; 0x400 + tmp14 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + 8015566: fb04 f408 mul.w r4, r4, r8 + z3 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + 801556a: f9b6 b030 ldrsh.w fp, [r6, #48] ; 0x30 + z2 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 801556e: fb00 fa0a mul.w sl, r0, sl + z3 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + 8015572: 6e28 ldr r0, [r5, #96] ; 0x60 + z1 = MULTIPLY(tmp13 + tmp14, FIX(0.790569415)); /* (c2+c4)/2 */ + 8015574: eb01 0804 add.w r8, r1, r4 + z2 = MULTIPLY(tmp13 - tmp14, FIX(0.353553391)); /* (c2-c4)/2 */ + 8015578: 1b09 subs r1, r1, r4 + z3 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + 801557a: fb00 fb0b mul.w fp, r0, fp + + z1 = MULTIPLY(z2 + z3, FIX(0.831253876)); /* c3 */ + 801557e: f641 209a movw r0, #6810 ; 0x1a9a + z2 = MULTIPLY(tmp13 - tmp14, FIX(0.353553391)); /* (c2-c4)/2 */ + 8015582: fb0c f101 mul.w r1, ip, r1 + z1 = MULTIPLY(tmp13 + tmp14, FIX(0.790569415)); /* (c2+c4)/2 */ + 8015586: fb0e f808 mul.w r8, lr, r8 + z3 = tmp12 + z2; + 801558a: 1854 adds r4, r2, r1 + tmp12 -= z2 << 2; + 801558c: eba2 0281 sub.w r2, r2, r1, lsl #2 + tmp10 = z3 + z1; + 8015590: eb08 0904 add.w r9, r8, r4 + tmp11 = z3 - z1; + 8015594: eba4 0408 sub.w r4, r4, r8 + z1 = MULTIPLY(z2 + z3, FIX(0.831253876)); /* c3 */ + 8015598: eb0a 080b add.w r8, sl, fp + + wsptr[8*0] = (int) RIGHT_SHIFT(tmp10 + tmp13, CONST_BITS-PASS1_BITS); + wsptr[8*4] = (int) RIGHT_SHIFT(tmp10 - tmp13, CONST_BITS-PASS1_BITS); + wsptr[8*1] = (int) RIGHT_SHIFT(tmp11 + tmp14, CONST_BITS-PASS1_BITS); + wsptr[8*3] = (int) RIGHT_SHIFT(tmp11 - tmp14, CONST_BITS-PASS1_BITS); + wsptr[8*2] = (int) RIGHT_SHIFT(tmp12, CONST_BITS-PASS1_BITS); + 801559c: 12d2 asrs r2, r2, #11 + z1 = MULTIPLY(z2 + z3, FIX(0.831253876)); /* c3 */ + 801559e: fb00 f808 mul.w r8, r0, r8 + tmp13 = z1 + MULTIPLY(z2, FIX(0.513743148)); /* c1-c3 */ + 80155a2: f241 0071 movw r0, #4209 ; 0x1071 + wsptr[8*2] = (int) RIGHT_SHIFT(tmp12, CONST_BITS-PASS1_BITS); + 80155a6: 63fa str r2, [r7, #60] ; 0x3c + tmp13 = z1 + MULTIPLY(z2, FIX(0.513743148)); /* c1-c3 */ + 80155a8: fb00 8a0a mla sl, r0, sl, r8 + tmp14 = z1 - MULTIPLY(z3, FIX(2.176250899)); /* c1+c3 */ + 80155ac: 486e ldr r0, [pc, #440] ; (8015768 ) + for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) { + 80155ae: 9a02 ldr r2, [sp, #8] + tmp14 = z1 - MULTIPLY(z3, FIX(2.176250899)); /* c1+c3 */ + 80155b0: fb00 880b mla r8, r0, fp, r8 + wsptr[8*0] = (int) RIGHT_SHIFT(tmp10 + tmp13, CONST_BITS-PASS1_BITS); + 80155b4: eb09 0b0a add.w fp, r9, sl + wsptr[8*4] = (int) RIGHT_SHIFT(tmp10 - tmp13, CONST_BITS-PASS1_BITS); + 80155b8: eba9 090a sub.w r9, r9, sl + for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) { + 80155bc: 42b2 cmp r2, r6 + wsptr[8*0] = (int) RIGHT_SHIFT(tmp10 + tmp13, CONST_BITS-PASS1_BITS); + 80155be: ea4f 2beb mov.w fp, fp, asr #11 + wsptr[8*4] = (int) RIGHT_SHIFT(tmp10 - tmp13, CONST_BITS-PASS1_BITS); + 80155c2: ea4f 29e9 mov.w r9, r9, asr #11 + wsptr[8*0] = (int) RIGHT_SHIFT(tmp10 + tmp13, CONST_BITS-PASS1_BITS); + 80155c6: f847 bc04 str.w fp, [r7, #-4] + wsptr[8*4] = (int) RIGHT_SHIFT(tmp10 - tmp13, CONST_BITS-PASS1_BITS); + 80155ca: f8c7 907c str.w r9, [r7, #124] ; 0x7c + wsptr[8*1] = (int) RIGHT_SHIFT(tmp11 + tmp14, CONST_BITS-PASS1_BITS); + 80155ce: eb04 0908 add.w r9, r4, r8 + wsptr[8*3] = (int) RIGHT_SHIFT(tmp11 - tmp14, CONST_BITS-PASS1_BITS); + 80155d2: eba4 0408 sub.w r4, r4, r8 + wsptr[8*1] = (int) RIGHT_SHIFT(tmp11 + tmp14, CONST_BITS-PASS1_BITS); + 80155d6: ea4f 29e9 mov.w r9, r9, asr #11 + wsptr[8*3] = (int) RIGHT_SHIFT(tmp11 - tmp14, CONST_BITS-PASS1_BITS); + 80155da: ea4f 24e4 mov.w r4, r4, asr #11 + wsptr[8*1] = (int) RIGHT_SHIFT(tmp11 + tmp14, CONST_BITS-PASS1_BITS); + 80155de: f8c7 901c str.w r9, [r7, #28] + wsptr[8*3] = (int) RIGHT_SHIFT(tmp11 - tmp14, CONST_BITS-PASS1_BITS); + 80155e2: 65fc str r4, [r7, #92] ; 0x5c + for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) { + 80155e4: d1ab bne.n 801553e + 80155e6: f1a3 0b04 sub.w fp, r3, #4 + } + + /* Pass 2: process 5 rows from work array, store into output array. + * 10-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/20). + */ + wsptr = workspace; + 80155ea: a908 add r1, sp, #32 + 80155ec: 3310 adds r3, #16 + 80155ee: 9307 str r3, [sp, #28] + for (ctr = 0; ctr < 5; ctr++) { + outptr = output_buf[ctr] + output_col; + 80155f0: f85b 3f04 ldr.w r3, [fp, #4]! + tmp22 = z3 - ((z1 - z2) << 1); /* c0 = (c4-c8)*2 */ + + z2 = (INT32) wsptr[2]; + z3 = (INT32) wsptr[6]; + + z1 = MULTIPLY(z2 + z3, FIX(0.831253876)); /* c6 */ + 80155f4: f641 209a movw r0, #6810 ; 0x1a9a + outptr = output_buf[ctr] + output_col; + 80155f8: 9a3a ldr r2, [sp, #232] ; 0xe8 + & RANGE_MASK]; + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp24 - tmp14, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + + wsptr += 8; /* advance pointer to next row */ + 80155fa: 3120 adds r1, #32 + z4 = (INT32) wsptr[4]; + 80155fc: f851 7c10 ldr.w r7, [r1, #-16] + outptr = output_buf[ctr] + output_col; + 8015600: 189c adds r4, r3, r2 + z1 = MULTIPLY(z4, FIX(1.144122806)); /* c4 */ + 8015602: f242 429d movw r2, #9373 ; 0x249d + outptr = output_buf[ctr] + output_col; + 8015606: 9306 str r3, [sp, #24] + z1 = MULTIPLY(z4, FIX(1.144122806)); /* c4 */ + 8015608: fb02 f507 mul.w r5, r2, r7 + z3 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + 801560c: f851 3c20 ldr.w r3, [r1, #-32] + z2 = MULTIPLY(z4, FIX(0.437016024)); /* c8 */ + 8015610: f640 52fc movw r2, #3580 ; 0xdfc + z3 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + 8015614: 3310 adds r3, #16 + z2 = MULTIPLY(z4, FIX(0.437016024)); /* c8 */ + 8015616: 4357 muls r7, r2 + tmp10 = z3 + z1; + 8015618: eb05 3643 add.w r6, r5, r3, lsl #13 + tmp22 = z3 - ((z1 - z2) << 1); /* c0 = (c4-c8)*2 */ + 801561c: 1bed subs r5, r5, r7 + tmp11 = z3 - z2; + 801561e: ebc7 3243 rsb r2, r7, r3, lsl #13 + z3 = (INT32) wsptr[6]; + 8015622: f851 7c08 ldr.w r7, [r1, #-8] + tmp22 = z3 - ((z1 - z2) << 1); /* c0 = (c4-c8)*2 */ + 8015626: 006d lsls r5, r5, #1 + 8015628: ebc5 3343 rsb r3, r5, r3, lsl #13 + z2 = (INT32) wsptr[2]; + 801562c: f851 5c18 ldr.w r5, [r1, #-24] + tmp22 = z3 - ((z1 - z2) << 1); /* c0 = (c4-c8)*2 */ + 8015630: 9302 str r3, [sp, #8] + z1 = MULTIPLY(z2 + z3, FIX(0.831253876)); /* c6 */ + 8015632: 19eb adds r3, r5, r7 + 8015634: 4343 muls r3, r0 + tmp12 = z1 + MULTIPLY(z2, FIX(0.513743148)); /* c2-c6 */ + 8015636: f241 0071 movw r0, #4209 ; 0x1071 + 801563a: fb00 3505 mla r5, r0, r5, r3 + tmp13 = z1 - MULTIPLY(z3, FIX(2.176250899)); /* c2+c6 */ + 801563e: 484a ldr r0, [pc, #296] ; (8015768 ) + 8015640: fb00 3307 mla r3, r0, r7, r3 + tmp20 = tmp10 + tmp12; + 8015644: eb06 0c05 add.w ip, r6, r5 + tmp24 = tmp10 - tmp12; + 8015648: 1b70 subs r0, r6, r5 + z4 = (INT32) wsptr[7]; + 801564a: f851 5c04 ldr.w r5, [r1, #-4] + tmp21 = tmp11 + tmp13; + 801564e: 18d7 adds r7, r2, r3 + tmp23 = tmp11 - tmp13; + 8015650: 1ad3 subs r3, r2, r3 + tmp24 = tmp10 - tmp12; + 8015652: 9003 str r0, [sp, #12] + tmp12 = MULTIPLY(tmp13, FIX(0.309016994)); /* (c3-c7)/2 */ + 8015654: f640 10e3 movw r0, #2531 ; 0x9e3 + tmp23 = tmp11 - tmp13; + 8015658: 9304 str r3, [sp, #16] + z2 = (INT32) wsptr[3]; + 801565a: f851 3c14 ldr.w r3, [r1, #-20] + z1 = (INT32) wsptr[1]; + 801565e: f851 2c1c ldr.w r2, [r1, #-28] + tmp11 = z2 + z4; + 8015662: eb03 0905 add.w r9, r3, r5 + tmp13 = z2 - z4; + 8015666: 1b5b subs r3, r3, r5 + tmp12 = MULTIPLY(tmp13, FIX(0.309016994)); /* (c3-c7)/2 */ + 8015668: fb00 f503 mul.w r5, r0, r3 + z2 = MULTIPLY(tmp11, FIX(0.951056516)); /* (c3+c7)/2 */ + 801566c: f641 606f movw r0, #7791 ; 0x1e6f + 8015670: fb00 f809 mul.w r8, r0, r9 + z4 = z3 + tmp12; + 8015674: f851 0c0c ldr.w r0, [r1, #-12] + 8015678: eb05 3a40 add.w sl, r5, r0, lsl #13 + tmp10 = MULTIPLY(z1, FIX(1.396802247)) + z2 + z4; /* c1 */ + 801567c: f642 40b3 movw r0, #11443 ; 0x2cb3 + 8015680: fb00 8e02 mla lr, r0, r2, r8 + tmp14 = MULTIPLY(z1, FIX(0.221231742)) - z2 + z4; /* c9 */ + 8015684: f240 7014 movw r0, #1812 ; 0x714 + 8015688: fb00 f602 mul.w r6, r0, r2 + tmp10 = MULTIPLY(z1, FIX(1.396802247)) + z2 + z4; /* c1 */ + 801568c: 44d6 add lr, sl + z4 = z3 - tmp12 - (tmp13 << (CONST_BITS - 1)); + 801568e: f851 0c0c ldr.w r0, [r1, #-12] + tmp14 = MULTIPLY(z1, FIX(0.221231742)) - z2 + z4; /* c9 */ + 8015692: eba6 0608 sub.w r6, r6, r8 + tmp11 = MULTIPLY(z1, FIX(1.260073511)) - z2 - z4; /* c3 */ + 8015696: f642 0853 movw r8, #10323 ; 0x2853 + z4 = z3 - tmp12 - (tmp13 << (CONST_BITS - 1)); + 801569a: ebc5 3540 rsb r5, r5, r0, lsl #13 + tmp14 = MULTIPLY(z1, FIX(0.221231742)) - z2 + z4; /* c9 */ + 801569e: 4456 add r6, sl + z2 = MULTIPLY(tmp11, FIX(0.587785252)); /* (c1-c9)/2 */ + 80156a0: f241 2acf movw sl, #4815 ; 0x12cf + z4 = z3 - tmp12 - (tmp13 << (CONST_BITS - 1)); + 80156a4: eba5 3503 sub.w r5, r5, r3, lsl #12 + tmp11 = MULTIPLY(z1, FIX(1.260073511)) - z2 - z4; /* c3 */ + 80156a8: fb08 f802 mul.w r8, r8, r2 + z2 = MULTIPLY(tmp11, FIX(0.587785252)); /* (c1-c9)/2 */ + 80156ac: fb0a f909 mul.w r9, sl, r9 + tmp13 = MULTIPLY(z1, FIX(0.642039522)) - z2 + z4; /* c7 */ + 80156b0: f241 4a8c movw sl, #5260 ; 0x148c + tmp12 = ((z1 - tmp13) << CONST_BITS) - z3; + 80156b4: 1ad3 subs r3, r2, r3 + tmp13 = MULTIPLY(z1, FIX(0.642039522)) - z2 + z4; /* c7 */ + 80156b6: fb0a f202 mul.w r2, sl, r2 + tmp11 = MULTIPLY(z1, FIX(1.260073511)) - z2 - z4; /* c3 */ + 80156ba: eba8 0809 sub.w r8, r8, r9 + tmp12 = ((z1 - tmp13) << CONST_BITS) - z3; + 80156be: 035b lsls r3, r3, #13 + tmp13 = MULTIPLY(z1, FIX(0.642039522)) - z2 + z4; /* c7 */ + 80156c0: eba2 0209 sub.w r2, r2, r9 + tmp11 = MULTIPLY(z1, FIX(1.260073511)) - z2 - z4; /* c3 */ + 80156c4: eba8 0805 sub.w r8, r8, r5 + tmp12 = ((z1 - tmp13) << CONST_BITS) - z3; + 80156c8: eba3 3340 sub.w r3, r3, r0, lsl #13 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp10, + 80156cc: 9806 ldr r0, [sp, #24] + tmp13 = MULTIPLY(z1, FIX(0.642039522)) - z2 + z4; /* c7 */ + 80156ce: 442a add r2, r5 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp10, + 80156d0: eb0c 050e add.w r5, ip, lr + tmp12 = ((z1 - tmp13) << CONST_BITS) - z3; + 80156d4: 9305 str r3, [sp, #20] + outptr[9] = range_limit[(int) RIGHT_SHIFT(tmp20 - tmp10, + 80156d6: ebac 0c0e sub.w ip, ip, lr + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp10, + 80156da: 9b01 ldr r3, [sp, #4] + & RANGE_MASK]; + 80156dc: f3c5 4589 ubfx r5, r5, #18, #10 + & RANGE_MASK]; + 80156e0: f3cc 4c89 ubfx ip, ip, #18, #10 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp10, + 80156e4: 5d5d ldrb r5, [r3, r5] + 80156e6: 9b3a ldr r3, [sp, #232] ; 0xe8 + 80156e8: 54c5 strb r5, [r0, r3] + outptr[9] = range_limit[(int) RIGHT_SHIFT(tmp20 - tmp10, + 80156ea: 9b01 ldr r3, [sp, #4] + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp12, + 80156ec: 9805 ldr r0, [sp, #20] + outptr[9] = range_limit[(int) RIGHT_SHIFT(tmp20 - tmp10, + 80156ee: f813 500c ldrb.w r5, [r3, ip] + 80156f2: 7265 strb r5, [r4, #9] + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp11, + 80156f4: eb07 0508 add.w r5, r7, r8 + outptr[8] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp11, + 80156f8: eba7 0708 sub.w r7, r7, r8 + & RANGE_MASK]; + 80156fc: f3c5 4589 ubfx r5, r5, #18, #10 + & RANGE_MASK]; + 8015700: f3c7 4789 ubfx r7, r7, #18, #10 + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp11, + 8015704: 5d5d ldrb r5, [r3, r5] + 8015706: 7065 strb r5, [r4, #1] + outptr[8] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp11, + 8015708: 5ddd ldrb r5, [r3, r7] + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp12, + 801570a: 9b02 ldr r3, [sp, #8] + outptr[8] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp11, + 801570c: 7225 strb r5, [r4, #8] + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp12, + 801570e: 181d adds r5, r3, r0 + 8015710: 9b01 ldr r3, [sp, #4] + & RANGE_MASK]; + 8015712: f3c5 4589 ubfx r5, r5, #18, #10 + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp12, + 8015716: 5d5d ldrb r5, [r3, r5] + 8015718: 70a5 strb r5, [r4, #2] + outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp12, + 801571a: 9b02 ldr r3, [sp, #8] + 801571c: 1a1b subs r3, r3, r0 + 801571e: 9801 ldr r0, [sp, #4] + & RANGE_MASK]; + 8015720: f3c3 4389 ubfx r3, r3, #18, #10 + outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp12, + 8015724: 5cc3 ldrb r3, [r0, r3] + 8015726: 71e3 strb r3, [r4, #7] + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp23 + tmp13, + 8015728: 9b04 ldr r3, [sp, #16] + 801572a: 4413 add r3, r2 + & RANGE_MASK]; + 801572c: f3c3 4389 ubfx r3, r3, #18, #10 + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp23 + tmp13, + 8015730: 5cc3 ldrb r3, [r0, r3] + 8015732: 70e3 strb r3, [r4, #3] + outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp23 - tmp13, + 8015734: 9b04 ldr r3, [sp, #16] + 8015736: 1a9b subs r3, r3, r2 + & RANGE_MASK]; + 8015738: f3c3 4389 ubfx r3, r3, #18, #10 + outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp23 - tmp13, + 801573c: 5cc3 ldrb r3, [r0, r3] + 801573e: 71a3 strb r3, [r4, #6] + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp24 + tmp14, + 8015740: 9b03 ldr r3, [sp, #12] + 8015742: 4433 add r3, r6 + & RANGE_MASK]; + 8015744: f3c3 4389 ubfx r3, r3, #18, #10 + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp24 + tmp14, + 8015748: 5cc3 ldrb r3, [r0, r3] + 801574a: 7123 strb r3, [r4, #4] + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp24 - tmp14, + 801574c: 9b03 ldr r3, [sp, #12] + 801574e: 1b9b subs r3, r3, r6 + & RANGE_MASK]; + 8015750: f3c3 4389 ubfx r3, r3, #18, #10 + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp24 - tmp14, + 8015754: 5cc3 ldrb r3, [r0, r3] + 8015756: 7163 strb r3, [r4, #5] + for (ctr = 0; ctr < 5; ctr++) { + 8015758: 9b07 ldr r3, [sp, #28] + 801575a: 455b cmp r3, fp + 801575c: f47f af48 bne.w 80155f0 + } +} + 8015760: b031 add sp, #196 ; 0xc4 + 8015762: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 8015766: bf00 nop + 8015768: ffffba5c .word 0xffffba5c + +0801576c : + +GLOBAL(void) +jpeg_idct_8x4 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + 801576c: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8015770: b0a5 sub sp, #148 ; 0x94 + INT32 z1, z2, z3; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + int * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + 8015772: f8d0 014c ldr.w r0, [r0, #332] ; 0x14c + 8015776: 6d4e ldr r6, [r1, #84] ; 0x54 + 8015778: 1e97 subs r7, r2, #2 + /* Pass 1: process columns from input, store into work array. + * 4-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/16). + */ + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + 801577a: ac04 add r4, sp, #16 + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + 801577c: f100 0e80 add.w lr, r0, #128 ; 0x80 + for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) { + 8015780: 320e adds r2, #14 + 8015782: 3e04 subs r6, #4 + 8015784: 4620 mov r0, r4 + /* Same rotation as in the even part of the 8x8 LL&M IDCT */ + + z2 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + z3 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + + z1 = MULTIPLY(z2 + z3, FIX_0_541196100); /* c6 */ + 8015786: f241 1851 movw r8, #4433 ; 0x1151 + /* Add fudge factor here for final descale. */ + z1 += ONE << (CONST_BITS-PASS1_BITS-1); + tmp0 = RIGHT_SHIFT(z1 + MULTIPLY(z2, FIX_0_765366865), /* c2-c6 */ + 801578a: f641 0c7e movw ip, #6270 ; 0x187e + 801578e: 9200 str r2, [sp, #0] + tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 8015790: f937 5f02 ldrsh.w r5, [r7, #2]! + for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) { + 8015794: 3404 adds r4, #4 + tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 8015796: f856 1f04 ldr.w r1, [r6, #4]! + tmp2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + 801579a: f9b7 9020 ldrsh.w r9, [r7, #32] + tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 801579e: 434d muls r5, r1 + tmp2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + 80157a0: 6c31 ldr r1, [r6, #64] ; 0x40 + z2 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 80157a2: f9b7 a010 ldrsh.w sl, [r7, #16] + tmp2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + 80157a6: fb01 f109 mul.w r1, r1, r9 + z3 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + 80157aa: f9b7 b030 ldrsh.w fp, [r7, #48] ; 0x30 + CONST_BITS-PASS1_BITS); + tmp2 = RIGHT_SHIFT(z1 - MULTIPLY(z3, FIX_1_847759065), /* c2+c6 */ + 80157ae: 4a65 ldr r2, [pc, #404] ; (8015944 ) + tmp10 = (tmp0 + tmp2) << PASS1_BITS; + 80157b0: eb05 0901 add.w r9, r5, r1 + tmp12 = (tmp0 - tmp2) << PASS1_BITS; + 80157b4: 1a6d subs r5, r5, r1 + z2 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 80157b6: 6a31 ldr r1, [r6, #32] + 80157b8: fb01 fa0a mul.w sl, r1, sl + z3 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + 80157bc: 6e31 ldr r1, [r6, #96] ; 0x60 + 80157be: fb01 fb0b mul.w fp, r1, fp + z1 = MULTIPLY(z2 + z3, FIX_0_541196100); /* c6 */ + 80157c2: eb0a 010b add.w r1, sl, fp + 80157c6: fb08 f101 mul.w r1, r8, r1 + z1 += ONE << (CONST_BITS-PASS1_BITS-1); + 80157ca: f501 6180 add.w r1, r1, #1024 ; 0x400 + tmp0 = RIGHT_SHIFT(z1 + MULTIPLY(z2, FIX_0_765366865), /* c2-c6 */ + 80157ce: fb0c 1a0a mla sl, ip, sl, r1 + tmp2 = RIGHT_SHIFT(z1 - MULTIPLY(z3, FIX_1_847759065), /* c2+c6 */ + 80157d2: fb02 110b mla r1, r2, fp, r1 + for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) { + 80157d6: 9a00 ldr r2, [sp, #0] + tmp0 = RIGHT_SHIFT(z1 + MULTIPLY(z2, FIX_0_765366865), /* c2-c6 */ + 80157d8: ea4f 2aea mov.w sl, sl, asr #11 + tmp2 = RIGHT_SHIFT(z1 - MULTIPLY(z3, FIX_1_847759065), /* c2+c6 */ + 80157dc: 12c9 asrs r1, r1, #11 + for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) { + 80157de: 42ba cmp r2, r7 + CONST_BITS-PASS1_BITS); + + /* Final output stage */ + + wsptr[8*0] = (int) (tmp10 + tmp0); + 80157e0: eb0a 0b89 add.w fp, sl, r9, lsl #2 + wsptr[8*3] = (int) (tmp10 - tmp0); + 80157e4: ebca 0a89 rsb sl, sl, r9, lsl #2 + wsptr[8*1] = (int) (tmp12 + tmp2); + 80157e8: eb01 0985 add.w r9, r1, r5, lsl #2 + wsptr[8*0] = (int) (tmp10 + tmp0); + 80157ec: f844 bc04 str.w fp, [r4, #-4] + wsptr[8*2] = (int) (tmp12 - tmp2); + 80157f0: ebc1 0185 rsb r1, r1, r5, lsl #2 + wsptr[8*3] = (int) (tmp10 - tmp0); + 80157f4: f8c4 a05c str.w sl, [r4, #92] ; 0x5c + wsptr[8*1] = (int) (tmp12 + tmp2); + 80157f8: f8c4 901c str.w r9, [r4, #28] + wsptr[8*2] = (int) (tmp12 - tmp2); + 80157fc: 63e1 str r1, [r4, #60] ; 0x3c + for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) { + 80157fe: d1c7 bne.n 8015790 + 8015800: f1a3 0804 sub.w r8, r3, #4 + 8015804: 330c adds r3, #12 + 8015806: 9303 str r3, [sp, #12] + /* Note that we must descale the results by a factor of 8 == 2**3, */ + /* and also undo the PASS1_BITS scaling. */ + + wsptr = workspace; + for (ctr = 0; ctr < 4; ctr++) { + outptr = output_buf[ctr] + output_col; + 8015808: f858 3f04 ldr.w r3, [r8, #4]! + /* The rotator is sqrt(2)*c(-6). */ + + z2 = (INT32) wsptr[2]; + z3 = (INT32) wsptr[6]; + + z1 = MULTIPLY(z2 + z3, FIX_0_541196100); + 801580c: f241 1551 movw r5, #4433 ; 0x1151 + outptr = output_buf[ctr] + output_col; + 8015810: 9a2e ldr r2, [sp, #184] ; 0xb8 + & RANGE_MASK]; + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp13 - tmp0, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + + wsptr += DCTSIZE; /* advance pointer to next row */ + 8015812: 3020 adds r0, #32 + z2 = (INT32) wsptr[2]; + 8015814: f850 1c18 ldr.w r1, [r0, #-24] + outptr = output_buf[ctr] + output_col; + 8015818: 189c adds r4, r3, r2 + 801581a: 9302 str r3, [sp, #8] + z3 = (INT32) wsptr[6]; + 801581c: f850 3c08 ldr.w r3, [r0, #-8] + z3 = (INT32) wsptr[4]; + 8015820: f850 6c10 ldr.w r6, [r0, #-16] + z1 = MULTIPLY(z2 + z3, FIX_0_541196100); + 8015824: 18ca adds r2, r1, r3 + tmp2 = (INT32) wsptr[3]; + 8015826: f850 cc14 ldr.w ip, [r0, #-20] + tmp3 = (INT32) wsptr[1]; + 801582a: f850 9c1c ldr.w r9, [r0, #-28] + z1 = MULTIPLY(z2 + z3, FIX_0_541196100); + 801582e: 436a muls r2, r5 + tmp2 = z1 + MULTIPLY(z2, FIX_0_765366865); + 8015830: f641 057e movw r5, #6270 ; 0x187e + tmp0 = (INT32) wsptr[7]; + 8015834: f850 7c04 ldr.w r7, [r0, #-4] + tmp2 = z1 + MULTIPLY(z2, FIX_0_765366865); + 8015838: fb05 2101 mla r1, r5, r1, r2 + tmp3 = z1 - MULTIPLY(z3, FIX_1_847759065); + 801583c: 4d41 ldr r5, [pc, #260] ; (8015944 ) + 801583e: fb05 2203 mla r2, r5, r3, r2 + z2 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + 8015842: f850 3c20 ldr.w r3, [r0, #-32] + 8015846: 3310 adds r3, #16 + tmp0 = (z2 + z3) << CONST_BITS; + 8015848: 199d adds r5, r3, r6 + tmp1 = (z2 - z3) << CONST_BITS; + 801584a: 1b9b subs r3, r3, r6 + tmp10 = tmp0 + tmp2; + 801584c: eb01 3645 add.w r6, r1, r5, lsl #13 + tmp13 = tmp0 - tmp2; + 8015850: ebc1 3145 rsb r1, r1, r5, lsl #13 + z1 = MULTIPLY(z2 + z3, FIX_1_175875602); /* sqrt(2) * c3 */ + 8015854: f242 55a1 movw r5, #9633 ; 0x25a1 + tmp12 = tmp1 - tmp3; + 8015858: ebc2 3b43 rsb fp, r2, r3, lsl #13 + tmp13 = tmp0 - tmp2; + 801585c: 9100 str r1, [sp, #0] + tmp11 = tmp1 + tmp3; + 801585e: eb02 3143 add.w r1, r2, r3, lsl #13 + z3 = tmp1 + tmp3; + 8015862: f850 3c0c ldr.w r3, [r0, #-12] + tmp11 = tmp1 + tmp3; + 8015866: 9101 str r1, [sp, #4] + z2 = tmp0 + tmp2; + 8015868: eb07 010c add.w r1, r7, ip + z3 = tmp1 + tmp3; + 801586c: eb03 0209 add.w r2, r3, r9 + z1 = MULTIPLY(z2 + z3, FIX_1_175875602); /* sqrt(2) * c3 */ + 8015870: 188b adds r3, r1, r2 + 8015872: 436b muls r3, r5 + z2 += z1; + 8015874: 4d34 ldr r5, [pc, #208] ; (8015948 ) + 8015876: fb05 3101 mla r1, r5, r1, r3 + z3 += z1; + 801587a: 4d34 ldr r5, [pc, #208] ; (801594c ) + 801587c: fb05 3302 mla r3, r5, r2, r3 + z1 = MULTIPLY(tmp0 + tmp3, - FIX_0_899976223); /* sqrt(2) * (c7-c3) */ + 8015880: eb07 0209 add.w r2, r7, r9 + 8015884: 4d32 ldr r5, [pc, #200] ; (8015950 ) + 8015886: 436a muls r2, r5 + tmp0 += z1 + z2; + 8015888: f640 158e movw r5, #2446 ; 0x98e + 801588c: eb01 0a02 add.w sl, r1, r2 + tmp3 += z1 + z3; + 8015890: 441a add r2, r3 + tmp0 += z1 + z2; + 8015892: fb05 a707 mla r7, r5, r7, sl + z1 = MULTIPLY(tmp1 + tmp2, - FIX_2_562915447); /* sqrt(2) * (-c1-c3) */ + 8015896: f850 5c0c ldr.w r5, [r0, #-12] + tmp3 += z1 + z3; + 801589a: f243 0a0b movw sl, #12299 ; 0x300b + 801589e: fb0a 2209 mla r2, sl, r9, r2 + z1 = MULTIPLY(tmp1 + tmp2, - FIX_2_562915447); /* sqrt(2) * (-c1-c3) */ + 80158a2: eb05 090c add.w r9, r5, ip + 80158a6: 4d2b ldr r5, [pc, #172] ; (8015954 ) + tmp1 += z1 + z3; + 80158a8: f244 1ab3 movw sl, #16819 ; 0x41b3 + z1 = MULTIPLY(tmp1 + tmp2, - FIX_2_562915447); /* sqrt(2) * (-c1-c3) */ + 80158ac: fb05 f909 mul.w r9, r5, r9 + tmp1 += z1 + z3; + 80158b0: f850 5c0c ldr.w r5, [r0, #-12] + 80158b4: 444b add r3, r9 + tmp2 += z1 + z2; + 80158b6: 4449 add r1, r9 + 80158b8: f246 2954 movw r9, #25172 ; 0x6254 + tmp1 += z1 + z3; + 80158bc: fb0a 3a05 mla sl, sl, r5, r3 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp3, + 80158c0: 9d02 ldr r5, [sp, #8] + tmp2 += z1 + z2; + 80158c2: fb09 110c mla r1, r9, ip, r1 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp3, + 80158c6: eb06 0c02 add.w ip, r6, r2 + outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp3, + 80158ca: 1ab6 subs r6, r6, r2 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp3, + 80158cc: 9b2e ldr r3, [sp, #184] ; 0xb8 + & RANGE_MASK]; + 80158ce: f3cc 4c89 ubfx ip, ip, #18, #10 + & RANGE_MASK]; + 80158d2: f3c6 4689 ubfx r6, r6, #18, #10 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp3, + 80158d6: f81e c00c ldrb.w ip, [lr, ip] + 80158da: f805 c003 strb.w ip, [r5, r3] + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp11 + tmp2, + 80158de: 9b01 ldr r3, [sp, #4] + outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp3, + 80158e0: f81e 2006 ldrb.w r2, [lr, r6] + outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp11 - tmp2, + 80158e4: 1a5d subs r5, r3, r1 + outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp3, + 80158e6: 71e2 strb r2, [r4, #7] + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp11 + tmp2, + 80158e8: 185a adds r2, r3, r1 + & RANGE_MASK]; + 80158ea: f3c5 4589 ubfx r5, r5, #18, #10 + & RANGE_MASK]; + 80158ee: f3c2 4289 ubfx r2, r2, #18, #10 + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp11 + tmp2, + 80158f2: f81e 2002 ldrb.w r2, [lr, r2] + 80158f6: 7062 strb r2, [r4, #1] + outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp11 - tmp2, + 80158f8: f81e 2005 ldrb.w r2, [lr, r5] + 80158fc: 71a2 strb r2, [r4, #6] + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp12 + tmp1, + 80158fe: eb0b 020a add.w r2, fp, sl + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp12 - tmp1, + 8015902: ebab 0b0a sub.w fp, fp, sl + & RANGE_MASK]; + 8015906: f3c2 4289 ubfx r2, r2, #18, #10 + & RANGE_MASK]; + 801590a: f3cb 4b89 ubfx fp, fp, #18, #10 + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp12 + tmp1, + 801590e: f81e 2002 ldrb.w r2, [lr, r2] + 8015912: 70a2 strb r2, [r4, #2] + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp12 - tmp1, + 8015914: f81e 300b ldrb.w r3, [lr, fp] + 8015918: 7163 strb r3, [r4, #5] + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp13 + tmp0, + 801591a: 9b00 ldr r3, [sp, #0] + 801591c: 443b add r3, r7 + & RANGE_MASK]; + 801591e: f3c3 4389 ubfx r3, r3, #18, #10 + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp13 + tmp0, + 8015922: f81e 3003 ldrb.w r3, [lr, r3] + 8015926: 70e3 strb r3, [r4, #3] + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp13 - tmp0, + 8015928: 9b00 ldr r3, [sp, #0] + 801592a: 1bdb subs r3, r3, r7 + & RANGE_MASK]; + 801592c: f3c3 4389 ubfx r3, r3, #18, #10 + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp13 - tmp0, + 8015930: f81e 3003 ldrb.w r3, [lr, r3] + 8015934: 7123 strb r3, [r4, #4] + for (ctr = 0; ctr < 4; ctr++) { + 8015936: 9b03 ldr r3, [sp, #12] + 8015938: 4543 cmp r3, r8 + 801593a: f47f af65 bne.w 8015808 + } +} + 801593e: b025 add sp, #148 ; 0x94 + 8015940: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 8015944: ffffc4df .word 0xffffc4df + 8015948: ffffc13b .word 0xffffc13b + 801594c: fffff384 .word 0xfffff384 + 8015950: ffffe333 .word 0xffffe333 + 8015954: ffffadfd .word 0xffffadfd + +08015958 : + +GLOBAL(void) +jpeg_idct_6x3 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + 8015958: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 801595c: b095 sub sp, #84 ; 0x54 + INT32 z1, z2, z3; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + int * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + 801595e: f8d0 014c ldr.w r0, [r0, #332] ; 0x14c + 8015962: 6d49 ldr r1, [r1, #84] ; 0x54 + 8015964: f1a2 0e02 sub.w lr, r2, #2 + /* Pass 1: process columns from input, store into work array. + * 3-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/6). + */ + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + 8015968: ad02 add r5, sp, #8 + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + 801596a: 3080 adds r0, #128 ; 0x80 + 801596c: f102 040a add.w r4, r2, #10 + 8015970: f1a1 0c04 sub.w ip, r1, #4 + 8015974: 462a mov r2, r5 + tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + tmp0 <<= CONST_BITS; + /* Add fudge factor here for final descale. */ + tmp0 += ONE << (CONST_BITS-PASS1_BITS-1); + tmp2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + tmp12 = MULTIPLY(tmp2, FIX(0.707106781)); /* c2 */ + 8015976: f241 69a1 movw r9, #5793 ; 0x16a1 + tmp2 = tmp0 - tmp12 - tmp12; + + /* Odd part */ + + tmp12 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + tmp0 = MULTIPLY(tmp12, FIX(1.224744871)); /* c1 */ + 801597a: f242 7831 movw r8, #10033 ; 0x2731 + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + 801597e: 9001 str r0, [sp, #4] + tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 8015980: f93e 1f02 ldrsh.w r1, [lr, #2]! + for (ctr = 0; ctr < 6; ctr++, inptr++, quantptr++, wsptr++) { + 8015984: 3504 adds r5, #4 + tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 8015986: f85c 6f04 ldr.w r6, [ip, #4]! + tmp12 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 801598a: f9be a010 ldrsh.w sl, [lr, #16] + for (ctr = 0; ctr < 6; ctr++, inptr++, quantptr++, wsptr++) { + 801598e: 4574 cmp r4, lr + tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 8015990: fb06 f101 mul.w r1, r6, r1 + tmp2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + 8015994: f8dc 7040 ldr.w r7, [ip, #64] ; 0x40 + 8015998: f9be 6020 ldrsh.w r6, [lr, #32] + tmp0 <<= CONST_BITS; + 801599c: ea4f 3141 mov.w r1, r1, lsl #13 + tmp12 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 80159a0: f8dc 0020 ldr.w r0, [ip, #32] + tmp2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + 80159a4: fb07 f606 mul.w r6, r7, r6 + tmp0 += ONE << (CONST_BITS-PASS1_BITS-1); + 80159a8: f501 6180 add.w r1, r1, #1024 ; 0x400 + tmp12 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 80159ac: fb00 fa0a mul.w sl, r0, sl + tmp12 = MULTIPLY(tmp2, FIX(0.707106781)); /* c2 */ + 80159b0: fb09 f606 mul.w r6, r9, r6 + tmp0 = MULTIPLY(tmp12, FIX(1.224744871)); /* c1 */ + 80159b4: fb08 fa0a mul.w sl, r8, sl + tmp10 = tmp0 + tmp12; + 80159b8: eb01 0706 add.w r7, r1, r6 + tmp2 = tmp0 - tmp12 - tmp12; + 80159bc: eba1 0146 sub.w r1, r1, r6, lsl #1 + + /* Final output stage */ + + wsptr[6*0] = (int) RIGHT_SHIFT(tmp10 + tmp0, CONST_BITS-PASS1_BITS); + 80159c0: eb07 0b0a add.w fp, r7, sl + wsptr[6*2] = (int) RIGHT_SHIFT(tmp10 - tmp0, CONST_BITS-PASS1_BITS); + 80159c4: eba7 070a sub.w r7, r7, sl + wsptr[6*1] = (int) RIGHT_SHIFT(tmp2, CONST_BITS-PASS1_BITS); + 80159c8: ea4f 21e1 mov.w r1, r1, asr #11 + wsptr[6*0] = (int) RIGHT_SHIFT(tmp10 + tmp0, CONST_BITS-PASS1_BITS); + 80159cc: ea4f 2beb mov.w fp, fp, asr #11 + wsptr[6*2] = (int) RIGHT_SHIFT(tmp10 - tmp0, CONST_BITS-PASS1_BITS); + 80159d0: ea4f 27e7 mov.w r7, r7, asr #11 + wsptr[6*1] = (int) RIGHT_SHIFT(tmp2, CONST_BITS-PASS1_BITS); + 80159d4: 6169 str r1, [r5, #20] + wsptr[6*0] = (int) RIGHT_SHIFT(tmp10 + tmp0, CONST_BITS-PASS1_BITS); + 80159d6: f845 bc04 str.w fp, [r5, #-4] + wsptr[6*2] = (int) RIGHT_SHIFT(tmp10 - tmp0, CONST_BITS-PASS1_BITS); + 80159da: 62ef str r7, [r5, #44] ; 0x2c + for (ctr = 0; ctr < 6; ctr++, inptr++, quantptr++, wsptr++) { + 80159dc: d1d0 bne.n 8015980 + 80159de: f1a3 0e04 sub.w lr, r3, #4 + 80159e2: f103 0908 add.w r9, r3, #8 + /* Pass 2: process 3 rows from work array, store into output array. + * 6-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/12). + */ + wsptr = workspace; + for (ctr = 0; ctr < 3; ctr++) { + outptr = output_buf[ctr] + output_col; + 80159e6: f85e af04 ldr.w sl, [lr, #4]! + + /* Add fudge factor here for final descale. */ + tmp0 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + tmp0 <<= CONST_BITS; + tmp2 = (INT32) wsptr[4]; + tmp10 = MULTIPLY(tmp2, FIX(0.707106781)); /* c4 */ + 80159ea: f241 60a1 movw r0, #5793 ; 0x16a1 + outptr = output_buf[ctr] + output_col; + 80159ee: 9b1e ldr r3, [sp, #120] ; 0x78 + & RANGE_MASK]; + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp12 - tmp2, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + + wsptr += 6; /* advance pointer to next row */ + 80159f0: 3218 adds r2, #24 + tmp10 = MULTIPLY(tmp2, FIX(0.707106781)); /* c4 */ + 80159f2: f852 1c08 ldr.w r1, [r2, #-8] + for (ctr = 0; ctr < 3; ctr++) { + 80159f6: 45f1 cmp r9, lr + outptr = output_buf[ctr] + output_col; + 80159f8: eb0a 0703 add.w r7, sl, r3 + tmp0 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + 80159fc: f852 3c18 ldr.w r3, [r2, #-24] + tmp10 = MULTIPLY(tmp2, FIX(0.707106781)); /* c4 */ + 8015a00: fb00 f401 mul.w r4, r0, r1 + tmp0 = MULTIPLY(tmp10, FIX(1.224744871)); /* c2 */ + 8015a04: f242 7031 movw r0, #10033 ; 0x2731 + tmp0 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + 8015a08: f103 0310 add.w r3, r3, #16 + z3 = (INT32) wsptr[5]; + 8015a0c: f852 8c04 ldr.w r8, [r2, #-4] + tmp1 = tmp0 + tmp10; + 8015a10: eb04 3143 add.w r1, r4, r3, lsl #13 + tmp11 = tmp0 - tmp10 - tmp10; + 8015a14: ebc4 3343 rsb r3, r4, r3, lsl #13 + 8015a18: eba3 0304 sub.w r3, r3, r4 + tmp0 = MULTIPLY(tmp10, FIX(1.224744871)); /* c2 */ + 8015a1c: f852 4c10 ldr.w r4, [r2, #-16] + 8015a20: fb00 f404 mul.w r4, r0, r4 + tmp1 = MULTIPLY(z1 + z3, FIX(0.366025404)); /* c5 */ + 8015a24: f640 30b6 movw r0, #2998 ; 0xbb6 + tmp10 = tmp1 + tmp0; + 8015a28: eb01 0604 add.w r6, r1, r4 + tmp12 = tmp1 - tmp0; + 8015a2c: eba1 0104 sub.w r1, r1, r4 + z1 = (INT32) wsptr[1]; + 8015a30: f852 4c14 ldr.w r4, [r2, #-20] + tmp1 = MULTIPLY(z1 + z3, FIX(0.366025404)); /* c5 */ + 8015a34: eb04 0508 add.w r5, r4, r8 + 8015a38: fb00 f505 mul.w r5, r0, r5 + tmp0 = tmp1 + ((z1 + z2) << CONST_BITS); + 8015a3c: f852 0c0c ldr.w r0, [r2, #-12] + 8015a40: eb04 0c00 add.w ip, r4, r0 + tmp1 = (z1 - z2 - z3) << CONST_BITS; + 8015a44: eba4 0400 sub.w r4, r4, r0 + tmp2 = tmp1 + ((z3 - z2) << CONST_BITS); + 8015a48: eba8 0b00 sub.w fp, r8, r0 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0, + 8015a4c: 9801 ldr r0, [sp, #4] + tmp0 = tmp1 + ((z1 + z2) << CONST_BITS); + 8015a4e: eb05 3c4c add.w ip, r5, ip, lsl #13 + tmp1 = (z1 - z2 - z3) << CONST_BITS; + 8015a52: eba4 0408 sub.w r4, r4, r8 + tmp2 = tmp1 + ((z3 - z2) << CONST_BITS); + 8015a56: eb05 354b add.w r5, r5, fp, lsl #13 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0, + 8015a5a: eb06 080c add.w r8, r6, ip + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp0, + 8015a5e: eba6 060c sub.w r6, r6, ip + & RANGE_MASK]; + 8015a62: f3c8 4889 ubfx r8, r8, #18, #10 + & RANGE_MASK]; + 8015a66: f3c6 4689 ubfx r6, r6, #18, #10 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0, + 8015a6a: f810 8008 ldrb.w r8, [r0, r8] + 8015a6e: 981e ldr r0, [sp, #120] ; 0x78 + 8015a70: f80a 8000 strb.w r8, [sl, r0] + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp0, + 8015a74: 9801 ldr r0, [sp, #4] + 8015a76: 5d86 ldrb r6, [r0, r6] + 8015a78: 717e strb r6, [r7, #5] + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp11 + tmp1, + 8015a7a: eb03 3644 add.w r6, r3, r4, lsl #13 + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp11 - tmp1, + 8015a7e: eba3 3344 sub.w r3, r3, r4, lsl #13 + & RANGE_MASK]; + 8015a82: f3c6 4689 ubfx r6, r6, #18, #10 + & RANGE_MASK]; + 8015a86: f3c3 4389 ubfx r3, r3, #18, #10 + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp11 + tmp1, + 8015a8a: 5d86 ldrb r6, [r0, r6] + 8015a8c: 707e strb r6, [r7, #1] + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp11 - tmp1, + 8015a8e: 5cc3 ldrb r3, [r0, r3] + 8015a90: 713b strb r3, [r7, #4] + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp12 + tmp2, + 8015a92: eb01 0305 add.w r3, r1, r5 + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp12 - tmp2, + 8015a96: eba1 0105 sub.w r1, r1, r5 + & RANGE_MASK]; + 8015a9a: f3c3 4389 ubfx r3, r3, #18, #10 + & RANGE_MASK]; + 8015a9e: f3c1 4189 ubfx r1, r1, #18, #10 + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp12 + tmp2, + 8015aa2: 5cc3 ldrb r3, [r0, r3] + 8015aa4: 70bb strb r3, [r7, #2] + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp12 - tmp2, + 8015aa6: 5c43 ldrb r3, [r0, r1] + 8015aa8: 70fb strb r3, [r7, #3] + for (ctr = 0; ctr < 3; ctr++) { + 8015aaa: d19c bne.n 80159e6 + } +} + 8015aac: b015 add sp, #84 ; 0x54 + 8015aae: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + ... + +08015ab4 : + +GLOBAL(void) +jpeg_idct_4x2 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + 8015ab4: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8015ab8: b08b sub sp, #44 ; 0x2c + INT32 z1, z2, z3; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + INT32 * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + 8015aba: f8d0 514c ldr.w r5, [r0, #332] ; 0x14c + 8015abe: 6d4e ldr r6, [r1, #84] ; 0x54 + 8015ac0: 1e97 subs r7, r2, #2 + 8015ac2: f10d 0c08 add.w ip, sp, #8 + 8015ac6: 3580 adds r5, #128 ; 0x80 + /* Pass 1: process columns from input, store into work array. */ + + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + for (ctr = 0; ctr < 4; ctr++, inptr++, quantptr++, wsptr++) { + 8015ac8: 3e04 subs r6, #4 + 8015aca: 3206 adds r2, #6 + 8015acc: 4660 mov r0, ip +{ + 8015ace: 9301 str r3, [sp, #4] + /* Even part */ + + tmp10 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 8015ad0: f937 1f02 ldrsh.w r1, [r7, #2]! + 8015ad4: f856 4f04 ldr.w r4, [r6, #4]! + for (ctr = 0; ctr < 4; ctr++, inptr++, quantptr++, wsptr++) { + 8015ad8: 42ba cmp r2, r7 + tmp10 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 8015ada: fb04 f101 mul.w r1, r4, r1 + + /* Odd part */ + + tmp0 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 8015ade: 6a33 ldr r3, [r6, #32] + 8015ae0: f9b7 4010 ldrsh.w r4, [r7, #16] + 8015ae4: fb03 f404 mul.w r4, r3, r4 + + /* Final output stage */ + + wsptr[4*0] = tmp10 + tmp0; + 8015ae8: eb01 0e04 add.w lr, r1, r4 + wsptr[4*1] = tmp10 - tmp0; + 8015aec: eba1 0104 sub.w r1, r1, r4 + wsptr[4*0] = tmp10 + tmp0; + 8015af0: f84c eb04 str.w lr, [ip], #4 + wsptr[4*1] = tmp10 - tmp0; + 8015af4: f8cc 100c str.w r1, [ip, #12] + for (ctr = 0; ctr < 4; ctr++, inptr++, quantptr++, wsptr++) { + 8015af8: d1ea bne.n 8015ad0 + 8015afa: 9b01 ldr r3, [sp, #4] + /* Same rotation as in the even part of the 8x8 LL&M IDCT */ + + z2 = wsptr[1]; + z3 = wsptr[3]; + + z1 = MULTIPLY(z2 + z3, FIX_0_541196100); /* c6 */ + 8015afc: f241 1a51 movw sl, #4433 ; 0x1151 + tmp0 = z1 + MULTIPLY(z2, FIX_0_765366865); /* c2-c6 */ + 8015b00: f641 097e movw r9, #6270 ; 0x187e + 8015b04: f1a3 0c04 sub.w ip, r3, #4 + tmp0 = wsptr[0] + (ONE << 2); + 8015b08: 6804 ldr r4, [r0, #0] + 8015b0a: 46e0 mov r8, ip + tmp2 = wsptr[2]; + 8015b0c: 6882 ldr r2, [r0, #8] + & RANGE_MASK]; + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp12 - tmp2, + CONST_BITS+3) + & RANGE_MASK]; + + wsptr += 4; /* advance pointer to next row */ + 8015b0e: 3010 adds r0, #16 + z3 = wsptr[3]; + 8015b10: f850 7c04 ldr.w r7, [r0, #-4] + tmp0 = wsptr[0] + (ONE << 2); + 8015b14: 3404 adds r4, #4 + z2 = wsptr[1]; + 8015b16: f850 1c0c ldr.w r1, [r0, #-12] + tmp10 = (tmp0 + tmp2) << CONST_BITS; + 8015b1a: eb04 0b02 add.w fp, r4, r2 + tmp12 = (tmp0 - tmp2) << CONST_BITS; + 8015b1e: 1aa4 subs r4, r4, r2 + z1 = MULTIPLY(z2 + z3, FIX_0_541196100); /* c6 */ + 8015b20: 19ca adds r2, r1, r7 + outptr = output_buf[ctr] + output_col; + 8015b22: f85c ef04 ldr.w lr, [ip, #4]! + 8015b26: 9b14 ldr r3, [sp, #80] ; 0x50 + z1 = MULTIPLY(z2 + z3, FIX_0_541196100); /* c6 */ + 8015b28: fb0a f202 mul.w r2, sl, r2 + outptr = output_buf[ctr] + output_col; + 8015b2c: eb0e 0603 add.w r6, lr, r3 + tmp2 = z1 - MULTIPLY(z3, FIX_1_847759065); /* c2+c6 */ + 8015b30: 4b12 ldr r3, [pc, #72] ; (8015b7c ) + tmp0 = z1 + MULTIPLY(z2, FIX_0_765366865); /* c2-c6 */ + 8015b32: fb09 2101 mla r1, r9, r1, r2 + tmp2 = z1 - MULTIPLY(z3, FIX_1_847759065); /* c2+c6 */ + 8015b36: fb03 2207 mla r2, r3, r7, r2 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0, + 8015b3a: 9b14 ldr r3, [sp, #80] ; 0x50 + 8015b3c: eb01 374b add.w r7, r1, fp, lsl #13 + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp0, + 8015b40: ebc1 314b rsb r1, r1, fp, lsl #13 + & RANGE_MASK]; + 8015b44: f3c7 4709 ubfx r7, r7, #16, #10 + & RANGE_MASK]; + 8015b48: f3c1 4109 ubfx r1, r1, #16, #10 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0, + 8015b4c: 5def ldrb r7, [r5, r7] + 8015b4e: f80e 7003 strb.w r7, [lr, r3] + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp0, + 8015b52: 5c69 ldrb r1, [r5, r1] + for (ctr = 0; ctr < 2; ctr++) { + 8015b54: 9b01 ldr r3, [sp, #4] + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp0, + 8015b56: 70f1 strb r1, [r6, #3] + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp12 + tmp2, + 8015b58: eb02 3144 add.w r1, r2, r4, lsl #13 + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp12 - tmp2, + 8015b5c: ebc2 3244 rsb r2, r2, r4, lsl #13 + for (ctr = 0; ctr < 2; ctr++) { + 8015b60: 4543 cmp r3, r8 + & RANGE_MASK]; + 8015b62: f3c1 4109 ubfx r1, r1, #16, #10 + & RANGE_MASK]; + 8015b66: f3c2 4209 ubfx r2, r2, #16, #10 + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp12 + tmp2, + 8015b6a: 5c69 ldrb r1, [r5, r1] + 8015b6c: 7071 strb r1, [r6, #1] + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp12 - tmp2, + 8015b6e: 5caa ldrb r2, [r5, r2] + 8015b70: 70b2 strb r2, [r6, #2] + for (ctr = 0; ctr < 2; ctr++) { + 8015b72: d1c9 bne.n 8015b08 + } +} + 8015b74: b00b add sp, #44 ; 0x2c + 8015b76: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 8015b7a: bf00 nop + 8015b7c: ffffc4df .word 0xffffc4df + +08015b80 : + + /* Pass 1: empty. */ + + /* Pass 2: process 1 row from input, store into output array. */ + + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + 8015b80: 6d49 ldr r1, [r1, #84] ; 0x54 + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + 8015b82: f8d0 014c ldr.w r0, [r0, #332] ; 0x14c +{ + 8015b86: b5f0 push {r4, r5, r6, r7, lr} + outptr = output_buf[0] + output_col; + 8015b88: 681d ldr r5, [r3, #0] + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + 8015b8a: 3080 adds r0, #128 ; 0x80 + + /* Even part */ + + tmp10 = DEQUANTIZE(coef_block[0], quantptr[0]); + 8015b8c: f9b2 3000 ldrsh.w r3, [r2] + 8015b90: 680f ldr r7, [r1, #0] + /* Add fudge factor here for final descale. */ + tmp10 += ONE << 2; + + /* Odd part */ + + tmp0 = DEQUANTIZE(coef_block[1], quantptr[1]); + 8015b92: f9b2 2002 ldrsh.w r2, [r2, #2] + 8015b96: 6849 ldr r1, [r1, #4] + tmp10 = DEQUANTIZE(coef_block[0], quantptr[0]); + 8015b98: 437b muls r3, r7 +{ + 8015b9a: 9c05 ldr r4, [sp, #20] + tmp10 += ONE << 2; + 8015b9c: 3304 adds r3, #4 + tmp0 = DEQUANTIZE(coef_block[1], quantptr[1]); + 8015b9e: 434a muls r2, r1 + outptr = output_buf[0] + output_col; + 8015ba0: 192e adds r6, r5, r4 + + /* Final output stage */ + + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0, 3) & RANGE_MASK]; + 8015ba2: 1899 adds r1, r3, r2 + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp0, 3) & RANGE_MASK]; + 8015ba4: 1a9b subs r3, r3, r2 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0, 3) & RANGE_MASK]; + 8015ba6: f3c1 01c9 ubfx r1, r1, #3, #10 + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp0, 3) & RANGE_MASK]; + 8015baa: f3c3 03c9 ubfx r3, r3, #3, #10 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0, 3) & RANGE_MASK]; + 8015bae: 5c41 ldrb r1, [r0, r1] + 8015bb0: 5529 strb r1, [r5, r4] + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp0, 3) & RANGE_MASK]; + 8015bb2: 5cc3 ldrb r3, [r0, r3] + 8015bb4: 7073 strb r3, [r6, #1] +} + 8015bb6: bdf0 pop {r4, r5, r6, r7, pc} + +08015bb8 : + +GLOBAL(void) +jpeg_idct_8x16 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + 8015bb8: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8015bbc: f5ad 7d0f sub.w sp, sp, #572 ; 0x23c + 8015bc0: f1a2 0b02 sub.w fp, r2, #2 + 8015bc4: 930c str r3, [sp, #48] ; 0x30 + INT32 z1, z2, z3, z4; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + int * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + 8015bc6: f8d0 314c ldr.w r3, [r0, #332] ; 0x14c + 8015bca: 3380 adds r3, #128 ; 0x80 + 8015bcc: 9300 str r3, [sp, #0] + * 16-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/32). + */ + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) { + 8015bce: 6d4b ldr r3, [r1, #84] ; 0x54 + 8015bd0: f1a3 0804 sub.w r8, r3, #4 + 8015bd4: f102 030e add.w r3, r2, #14 + 8015bd8: 930d str r3, [sp, #52] ; 0x34 + wsptr = workspace; + 8015bda: ab0e add r3, sp, #56 ; 0x38 + /* Even part */ + + tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 8015bdc: f93b 2f02 ldrsh.w r2, [fp, #2]! + /* Add fudge factor here for final descale. */ + tmp0 += ONE << (CONST_BITS-PASS1_BITS-1); + + z1 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + tmp1 = MULTIPLY(z1, FIX(1.306562965)); /* c4[16] = c2[8] */ + tmp2 = MULTIPLY(z1, FIX_0_541196100); /* c12[16] = c6[8] */ + 8015be0: f241 1451 movw r4, #4433 ; 0x1151 + tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 8015be4: f858 1f04 ldr.w r1, [r8, #4]! + + z1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + z2 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + z3 = z1 - z2; + z4 = MULTIPLY(z3, FIX(0.275899379)); /* c14[16] = c7[8] */ + z3 = MULTIPLY(z3, FIX(1.387039845)); /* c2[16] = c1[8] */ + 8015be8: f642 4563 movw r5, #11363 ; 0x2c63 + z1 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + 8015bec: f9bb 0040 ldrsh.w r0, [fp, #64] ; 0x40 + + tmp0 = z3 + MULTIPLY(z2, FIX_2_562915447); /* (c6+c2)[16] = (c3+c1)[8] */ + 8015bf0: f245 2e03 movw lr, #20995 ; 0x5203 + tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 8015bf4: 434a muls r2, r1 + z1 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + 8015bf6: f8d8 1080 ldr.w r1, [r8, #128] ; 0x80 + z2 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + 8015bfa: f9bb c060 ldrsh.w ip, [fp, #96] ; 0x60 + for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) { + 8015bfe: 3304 adds r3, #4 + z1 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + 8015c00: 4341 muls r1, r0 + tmp0 <<= CONST_BITS; + 8015c02: 0352 lsls r2, r2, #13 + tmp1 = MULTIPLY(z1, FIX(1.306562965)); /* c4[16] = c2[8] */ + 8015c04: f642 10cf movw r0, #10703 ; 0x29cf + tmp0 += ONE << (CONST_BITS-PASS1_BITS-1); + 8015c08: f502 6280 add.w r2, r2, #1024 ; 0x400 + tmp1 = MULTIPLY(z1, FIX(1.306562965)); /* c4[16] = c2[8] */ + 8015c0c: 4348 muls r0, r1 + tmp2 = MULTIPLY(z1, FIX_0_541196100); /* c12[16] = c6[8] */ + 8015c0e: 4361 muls r1, r4 + z1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + 8015c10: f9bb 4020 ldrsh.w r4, [fp, #32] + tmp10 = tmp0 + tmp1; + 8015c14: 1817 adds r7, r2, r0 + tmp11 = tmp0 - tmp1; + 8015c16: 1a10 subs r0, r2, r0 + tmp12 = tmp0 + tmp2; + 8015c18: 1856 adds r6, r2, r1 + tmp13 = tmp0 - tmp2; + 8015c1a: eba2 0a01 sub.w sl, r2, r1 + z1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + 8015c1e: f8d8 1040 ldr.w r1, [r8, #64] ; 0x40 + tmp1 = z4 + MULTIPLY(z1, FIX_0_899976223); /* (c6-c14)[16] = (c3-c7)[8] */ + tmp2 = z3 - MULTIPLY(z1, FIX(0.601344887)); /* (c2-c10)[16] = (c1-c5)[8] */ + 8015c22: 4acf ldr r2, [pc, #828] ; (8015f60 ) + z1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + 8015c24: fb01 f904 mul.w r9, r1, r4 + z2 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + 8015c28: f8d8 10c0 ldr.w r1, [r8, #192] ; 0xc0 + 8015c2c: fb01 fc0c mul.w ip, r1, ip + z4 = MULTIPLY(z3, FIX(0.275899379)); /* c14[16] = c7[8] */ + 8015c30: f640 01d4 movw r1, #2260 ; 0x8d4 + z3 = z1 - z2; + 8015c34: eba9 040c sub.w r4, r9, ip + z4 = MULTIPLY(z3, FIX(0.275899379)); /* c14[16] = c7[8] */ + 8015c38: 4361 muls r1, r4 + z3 = MULTIPLY(z3, FIX(1.387039845)); /* c2[16] = c1[8] */ + 8015c3a: 436c muls r4, r5 + tmp1 = z4 + MULTIPLY(z1, FIX_0_899976223); /* (c6-c14)[16] = (c3-c7)[8] */ + 8015c3c: f641 45cd movw r5, #7373 ; 0x1ccd + tmp0 = z3 + MULTIPLY(z2, FIX_2_562915447); /* (c6+c2)[16] = (c3+c1)[8] */ + 8015c40: fb0e 4e0c mla lr, lr, ip, r4 + tmp2 = z3 - MULTIPLY(z1, FIX(0.601344887)); /* (c2-c10)[16] = (c1-c5)[8] */ + 8015c44: fb02 4409 mla r4, r2, r9, r4 + tmp3 = z4 - MULTIPLY(z2, FIX(0.509795579)); /* (c10-c14)[16] = (c5-c7)[8] */ + 8015c48: f202 22ee addw r2, r2, #750 ; 0x2ee + tmp1 = z4 + MULTIPLY(z1, FIX_0_899976223); /* (c6-c14)[16] = (c3-c7)[8] */ + 8015c4c: fb05 1509 mla r5, r5, r9, r1 + z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + + tmp11 = z1 + z3; + + tmp1 = MULTIPLY(z1 + z2, FIX(1.353318001)); /* c3 */ + tmp2 = MULTIPLY(tmp11, FIX(1.247225013)); /* c5 */ + 8015c50: f242 79e9 movw r9, #10217 ; 0x27e9 + tmp3 = z4 - MULTIPLY(z2, FIX(0.509795579)); /* (c10-c14)[16] = (c5-c7)[8] */ + 8015c54: fb02 110c mla r1, r2, ip, r1 + tmp20 = tmp10 + tmp0; + 8015c58: eb07 020e add.w r2, r7, lr + 8015c5c: 9201 str r2, [sp, #4] + tmp27 = tmp10 - tmp0; + 8015c5e: eba7 020e sub.w r2, r7, lr + tmp3 = MULTIPLY(z1 + z4, FIX(1.093201867)); /* c7 */ + tmp10 = MULTIPLY(z1 - z4, FIX(0.897167586)); /* c9 */ + tmp11 = MULTIPLY(tmp11, FIX(0.666655658)); /* c11 */ + tmp12 = MULTIPLY(z1 - z2, FIX(0.410524528)); /* c13 */ + 8015c62: f640 5723 movw r7, #3363 ; 0xd23 + tmp27 = tmp10 - tmp0; + 8015c66: 9202 str r2, [sp, #8] + tmp21 = tmp12 + tmp1; + 8015c68: 1972 adds r2, r6, r5 + 8015c6a: 9203 str r2, [sp, #12] + tmp26 = tmp12 - tmp1; + 8015c6c: 1b72 subs r2, r6, r5 + z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + 8015c6e: f9bb 5050 ldrsh.w r5, [fp, #80] ; 0x50 + tmp26 = tmp12 - tmp1; + 8015c72: 9204 str r2, [sp, #16] + tmp22 = tmp13 + tmp2; + 8015c74: eb0a 0204 add.w r2, sl, r4 + 8015c78: 9205 str r2, [sp, #20] + tmp25 = tmp13 - tmp2; + 8015c7a: ebaa 0204 sub.w r2, sl, r4 + z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + 8015c7e: f8d8 40e0 ldr.w r4, [r8, #224] ; 0xe0 + tmp25 = tmp13 - tmp2; + 8015c82: 9206 str r2, [sp, #24] + tmp23 = tmp11 + tmp3; + 8015c84: 1842 adds r2, r0, r1 + 8015c86: 9207 str r2, [sp, #28] + tmp24 = tmp11 - tmp3; + 8015c88: 1a42 subs r2, r0, r1 + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 8015c8a: f9bb 1010 ldrsh.w r1, [fp, #16] + tmp24 = tmp11 - tmp3; + 8015c8e: 9208 str r2, [sp, #32] + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 8015c90: f8d8 2020 ldr.w r2, [r8, #32] + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + 8015c94: f8d8 0060 ldr.w r0, [r8, #96] ; 0x60 + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 8015c98: 4351 muls r1, r2 + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + 8015c9a: f9bb 2030 ldrsh.w r2, [fp, #48] ; 0x30 + 8015c9e: 4342 muls r2, r0 + z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + 8015ca0: f8d8 00a0 ldr.w r0, [r8, #160] ; 0xa0 + 8015ca4: 4345 muls r5, r0 + z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + 8015ca6: f9bb 0070 ldrsh.w r0, [fp, #112] ; 0x70 + tmp1 = MULTIPLY(z1 + z2, FIX(1.353318001)); /* c3 */ + 8015caa: 188e adds r6, r1, r2 + z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + 8015cac: 4360 muls r0, r4 + tmp1 = MULTIPLY(z1 + z2, FIX(1.353318001)); /* c3 */ + 8015cae: f642 344e movw r4, #11086 ; 0x2b4e + tmp11 = z1 + z3; + 8015cb2: eb01 0a05 add.w sl, r1, r5 + tmp1 = MULTIPLY(z1 + z2, FIX(1.353318001)); /* c3 */ + 8015cb6: 4366 muls r6, r4 + tmp3 = MULTIPLY(z1 + z4, FIX(1.093201867)); /* c7 */ + 8015cb8: eb01 0e00 add.w lr, r1, r0 + 8015cbc: f242 24fc movw r4, #8956 ; 0x22fc + tmp10 = MULTIPLY(z1 - z4, FIX(0.897167586)); /* c9 */ + 8015cc0: eba1 0c00 sub.w ip, r1, r0 + tmp2 = MULTIPLY(tmp11, FIX(1.247225013)); /* c5 */ + 8015cc4: fb09 f90a mul.w r9, r9, sl + tmp3 = MULTIPLY(z1 + z4, FIX(1.093201867)); /* c7 */ + 8015cc8: fb04 fe0e mul.w lr, r4, lr + tmp10 = MULTIPLY(z1 - z4, FIX(0.897167586)); /* c9 */ + 8015ccc: f641 44b6 movw r4, #7350 ; 0x1cb6 + 8015cd0: fb04 fc0c mul.w ip, r4, ip + tmp11 = MULTIPLY(tmp11, FIX(0.666655658)); /* c11 */ + 8015cd4: f241 5455 movw r4, #5461 ; 0x1555 + 8015cd8: fb04 fa0a mul.w sl, r4, sl + tmp12 = MULTIPLY(z1 - z2, FIX(0.410524528)); /* c13 */ + 8015cdc: 1a8c subs r4, r1, r2 + 8015cde: 437c muls r4, r7 + tmp0 = tmp1 + tmp2 + tmp3 - + 8015ce0: eb06 0709 add.w r7, r6, r9 + tmp12 = MULTIPLY(z1 - z2, FIX(0.410524528)); /* c13 */ + 8015ce4: 9409 str r4, [sp, #36] ; 0x24 + tmp0 = tmp1 + tmp2 + tmp3 - + 8015ce6: 4477 add r7, lr + 8015ce8: 4c9e ldr r4, [pc, #632] ; (8015f64 ) + 8015cea: fb04 7401 mla r4, r4, r1, r7 + MULTIPLY(z1, FIX(2.286341144)); /* c7+c5+c3-c1 */ + tmp13 = tmp10 + tmp11 + tmp12 - + 8015cee: 9f09 ldr r7, [sp, #36] ; 0x24 + tmp0 = tmp1 + tmp2 + tmp3 - + 8015cf0: 940a str r4, [sp, #40] ; 0x28 + tmp13 = tmp10 + tmp11 + tmp12 - + 8015cf2: eb0c 040a add.w r4, ip, sl + 8015cf6: 443c add r4, r7 + 8015cf8: 4f9b ldr r7, [pc, #620] ; (8015f68 ) + 8015cfa: fb07 4101 mla r1, r7, r1, r4 + MULTIPLY(z1, FIX(1.835730603)); /* c9+c11+c13-c15 */ + z1 = MULTIPLY(z2 + z3, FIX(0.138617169)); /* c15 */ + 8015cfe: 1954 adds r4, r2, r5 + tmp1 += z1 + MULTIPLY(z2, FIX(0.071888074)); /* c9+c11-c3-c15 */ + tmp2 += z1 - MULTIPLY(z3, FIX(1.125726048)); /* c5+c7+c15-c3 */ + z1 = MULTIPLY(z3 - z2, FIX(1.407403738)); /* c1 */ + tmp11 += z1 - MULTIPLY(z3, FIX(0.766367282)); /* c1+c11-c9-c13 */ + 8015d00: 4f9a ldr r7, [pc, #616] ; (8015f6c ) + tmp13 = tmp10 + tmp11 + tmp12 - + 8015d02: 910b str r1, [sp, #44] ; 0x2c + z1 = MULTIPLY(z2 + z3, FIX(0.138617169)); /* c15 */ + 8015d04: f44f 618e mov.w r1, #1136 ; 0x470 + 8015d08: 434c muls r4, r1 + tmp1 += z1 + MULTIPLY(z2, FIX(0.071888074)); /* c9+c11-c3-c15 */ + 8015d0a: f240 214d movw r1, #589 ; 0x24d + 8015d0e: fb01 4102 mla r1, r1, r2, r4 + 8015d12: 440e add r6, r1 + tmp2 += z1 - MULTIPLY(z3, FIX(1.125726048)); /* c5+c7+c15-c3 */ + 8015d14: 4996 ldr r1, [pc, #600] ; (8015f70 ) + 8015d16: fb01 4405 mla r4, r1, r5, r4 + z1 = MULTIPLY(z3 - z2, FIX(1.407403738)); /* c1 */ + 8015d1a: 1aa9 subs r1, r5, r2 + tmp2 += z1 - MULTIPLY(z3, FIX(1.125726048)); /* c5+c7+c15-c3 */ + 8015d1c: 444c add r4, r9 + z1 = MULTIPLY(z3 - z2, FIX(1.407403738)); /* c1 */ + 8015d1e: f642 5909 movw r9, #11529 ; 0x2d09 + 8015d22: fb09 f101 mul.w r1, r9, r1 + tmp11 += z1 - MULTIPLY(z3, FIX(0.766367282)); /* c1+c11-c9-c13 */ + 8015d26: fb07 1905 mla r9, r7, r5, r1 + tmp12 += z1 + MULTIPLY(z2, FIX(1.971951411)); /* c1+c5+c13-c7 */ + 8015d2a: 9f09 ldr r7, [sp, #36] ; 0x24 + tmp11 += z1 - MULTIPLY(z3, FIX(0.766367282)); /* c1+c11-c9-c13 */ + 8015d2c: 44d1 add r9, sl + tmp12 += z1 + MULTIPLY(z2, FIX(1.971951411)); /* c1+c5+c13-c7 */ + 8015d2e: f643 7a1a movw sl, #16154 ; 0x3f1a + 8015d32: fb0a 1102 mla r1, sl, r2, r1 + z2 += z4; + 8015d36: 4402 add r2, r0 + tmp12 += z1 + MULTIPLY(z2, FIX(1.971951411)); /* c1+c5+c13-c7 */ + 8015d38: eb01 0a07 add.w sl, r1, r7 + z1 = MULTIPLY(z2, - FIX(0.666655658)); /* -c11 */ + 8015d3c: 498d ldr r1, [pc, #564] ; (8015f74 ) + tmp1 += z1; + tmp3 += z1 + MULTIPLY(z4, FIX(1.065388962)); /* c3+c11+c15-c7 */ + 8015d3e: f242 2718 movw r7, #8728 ; 0x2218 + z1 = MULTIPLY(z2, - FIX(0.666655658)); /* -c11 */ + 8015d42: 4351 muls r1, r2 + tmp1 += z1; + 8015d44: 440e add r6, r1 + tmp3 += z1 + MULTIPLY(z4, FIX(1.065388962)); /* c3+c11+c15-c7 */ + 8015d46: fb07 1100 mla r1, r7, r0, r1 + z2 = MULTIPLY(z2, - FIX(1.247225013)); /* -c5 */ + 8015d4a: 4f8b ldr r7, [pc, #556] ; (8015f78 ) + tmp3 += z1 + MULTIPLY(z4, FIX(1.065388962)); /* c3+c11+c15-c7 */ + 8015d4c: 4471 add r1, lr + tmp10 += z2 + MULTIPLY(z4, FIX(3.141271809)); /* c1+c5+c9-c13 */ + 8015d4e: f246 4e85 movw lr, #25733 ; 0x6485 + z2 = MULTIPLY(z2, - FIX(1.247225013)); /* -c5 */ + 8015d52: 437a muls r2, r7 + tmp10 += z2 + MULTIPLY(z4, FIX(3.141271809)); /* c1+c5+c9-c13 */ + 8015d54: fb0e 2e00 mla lr, lr, r0, r2 + tmp12 += z2; + 8015d58: 4452 add r2, sl + z2 = MULTIPLY(z3 + z4, - FIX(1.353318001)); /* -c3 */ + 8015d5a: f46f 7a59 mvn.w sl, #868 ; 0x364 + tmp10 += z2 + MULTIPLY(z4, FIX(3.141271809)); /* c1+c5+c9-c13 */ + 8015d5e: 44e6 add lr, ip + z2 = MULTIPLY(z3 + z4, - FIX(1.353318001)); /* -c3 */ + 8015d60: eb05 0c00 add.w ip, r5, r0 + 8015d64: 4457 add r7, sl + tmp2 += z2; + tmp3 += z2; + z2 = MULTIPLY(z4 - z3, FIX(0.410524528)); /* c13 */ + 8015d66: 1b40 subs r0, r0, r5 + 8015d68: f640 5523 movw r5, #3363 ; 0xd23 + z2 = MULTIPLY(z3 + z4, - FIX(1.353318001)); /* -c3 */ + 8015d6c: fb07 fc0c mul.w ip, r7, ip + tmp10 += z2; + tmp11 += z2; + + /* Final output stage */ + + wsptr[8*0] = (int) RIGHT_SHIFT(tmp20 + tmp0, CONST_BITS-PASS1_BITS); + 8015d70: 9f0a ldr r7, [sp, #40] ; 0x28 + z2 = MULTIPLY(z4 - z3, FIX(0.410524528)); /* c13 */ + 8015d72: 4368 muls r0, r5 + wsptr[8*0] = (int) RIGHT_SHIFT(tmp20 + tmp0, CONST_BITS-PASS1_BITS); + 8015d74: 9d01 ldr r5, [sp, #4] + tmp2 += z2; + 8015d76: 4464 add r4, ip + tmp3 += z2; + 8015d78: 4461 add r1, ip + wsptr[8*0] = (int) RIGHT_SHIFT(tmp20 + tmp0, CONST_BITS-PASS1_BITS); + 8015d7a: 443d add r5, r7 + tmp10 += z2; + 8015d7c: 4486 add lr, r0 + tmp11 += z2; + 8015d7e: 4448 add r0, r9 + wsptr[8*0] = (int) RIGHT_SHIFT(tmp20 + tmp0, CONST_BITS-PASS1_BITS); + 8015d80: 12ed asrs r5, r5, #11 + 8015d82: f843 5c04 str.w r5, [r3, #-4] + wsptr[8*15] = (int) RIGHT_SHIFT(tmp20 - tmp0, CONST_BITS-PASS1_BITS); + 8015d86: 9d01 ldr r5, [sp, #4] + 8015d88: 1bed subs r5, r5, r7 + 8015d8a: 12ed asrs r5, r5, #11 + 8015d8c: f8c3 51dc str.w r5, [r3, #476] ; 0x1dc + wsptr[8*1] = (int) RIGHT_SHIFT(tmp21 + tmp1, CONST_BITS-PASS1_BITS); + 8015d90: 9d03 ldr r5, [sp, #12] + 8015d92: 4435 add r5, r6 + 8015d94: 12ed asrs r5, r5, #11 + 8015d96: 61dd str r5, [r3, #28] + wsptr[8*14] = (int) RIGHT_SHIFT(tmp21 - tmp1, CONST_BITS-PASS1_BITS); + 8015d98: 9d03 ldr r5, [sp, #12] + 8015d9a: 1bad subs r5, r5, r6 + 8015d9c: 12ed asrs r5, r5, #11 + 8015d9e: f8c3 51bc str.w r5, [r3, #444] ; 0x1bc + wsptr[8*2] = (int) RIGHT_SHIFT(tmp22 + tmp2, CONST_BITS-PASS1_BITS); + 8015da2: 9d05 ldr r5, [sp, #20] + 8015da4: 4425 add r5, r4 + 8015da6: 12ed asrs r5, r5, #11 + 8015da8: 63dd str r5, [r3, #60] ; 0x3c + wsptr[8*13] = (int) RIGHT_SHIFT(tmp22 - tmp2, CONST_BITS-PASS1_BITS); + 8015daa: 9d05 ldr r5, [sp, #20] + 8015dac: 1b2c subs r4, r5, r4 + 8015dae: 12e4 asrs r4, r4, #11 + 8015db0: f8c3 419c str.w r4, [r3, #412] ; 0x19c + wsptr[8*3] = (int) RIGHT_SHIFT(tmp23 + tmp3, CONST_BITS-PASS1_BITS); + 8015db4: 9c07 ldr r4, [sp, #28] + 8015db6: 440c add r4, r1 + 8015db8: 12e4 asrs r4, r4, #11 + 8015dba: 65dc str r4, [r3, #92] ; 0x5c + wsptr[8*12] = (int) RIGHT_SHIFT(tmp23 - tmp3, CONST_BITS-PASS1_BITS); + 8015dbc: 9c07 ldr r4, [sp, #28] + 8015dbe: 1a61 subs r1, r4, r1 + 8015dc0: 12c9 asrs r1, r1, #11 + 8015dc2: f8c3 117c str.w r1, [r3, #380] ; 0x17c + wsptr[8*4] = (int) RIGHT_SHIFT(tmp24 + tmp10, CONST_BITS-PASS1_BITS); + 8015dc6: 9908 ldr r1, [sp, #32] + 8015dc8: 4471 add r1, lr + 8015dca: 12c9 asrs r1, r1, #11 + 8015dcc: 67d9 str r1, [r3, #124] ; 0x7c + wsptr[8*11] = (int) RIGHT_SHIFT(tmp24 - tmp10, CONST_BITS-PASS1_BITS); + 8015dce: 9908 ldr r1, [sp, #32] + 8015dd0: eba1 010e sub.w r1, r1, lr + 8015dd4: 12c9 asrs r1, r1, #11 + 8015dd6: f8c3 115c str.w r1, [r3, #348] ; 0x15c + wsptr[8*5] = (int) RIGHT_SHIFT(tmp25 + tmp11, CONST_BITS-PASS1_BITS); + 8015dda: 9906 ldr r1, [sp, #24] + 8015ddc: 4401 add r1, r0 + 8015dde: 12c9 asrs r1, r1, #11 + 8015de0: f8c3 109c str.w r1, [r3, #156] ; 0x9c + wsptr[8*10] = (int) RIGHT_SHIFT(tmp25 - tmp11, CONST_BITS-PASS1_BITS); + 8015de4: 9906 ldr r1, [sp, #24] + 8015de6: 1a09 subs r1, r1, r0 + 8015de8: 12c9 asrs r1, r1, #11 + 8015dea: f8c3 113c str.w r1, [r3, #316] ; 0x13c + wsptr[8*6] = (int) RIGHT_SHIFT(tmp26 + tmp12, CONST_BITS-PASS1_BITS); + 8015dee: 9904 ldr r1, [sp, #16] + 8015df0: 4411 add r1, r2 + 8015df2: 12c9 asrs r1, r1, #11 + 8015df4: f8c3 10bc str.w r1, [r3, #188] ; 0xbc + wsptr[8*9] = (int) RIGHT_SHIFT(tmp26 - tmp12, CONST_BITS-PASS1_BITS); + 8015df8: 9904 ldr r1, [sp, #16] + 8015dfa: 1a8a subs r2, r1, r2 + wsptr[8*7] = (int) RIGHT_SHIFT(tmp27 + tmp13, CONST_BITS-PASS1_BITS); + 8015dfc: 990b ldr r1, [sp, #44] ; 0x2c + wsptr[8*9] = (int) RIGHT_SHIFT(tmp26 - tmp12, CONST_BITS-PASS1_BITS); + 8015dfe: 12d2 asrs r2, r2, #11 + 8015e00: f8c3 211c str.w r2, [r3, #284] ; 0x11c + wsptr[8*7] = (int) RIGHT_SHIFT(tmp27 + tmp13, CONST_BITS-PASS1_BITS); + 8015e04: 9a02 ldr r2, [sp, #8] + 8015e06: 440a add r2, r1 + 8015e08: 12d2 asrs r2, r2, #11 + 8015e0a: f8c3 20dc str.w r2, [r3, #220] ; 0xdc + wsptr[8*8] = (int) RIGHT_SHIFT(tmp27 - tmp13, CONST_BITS-PASS1_BITS); + 8015e0e: 9a02 ldr r2, [sp, #8] + 8015e10: 1a52 subs r2, r2, r1 + 8015e12: 12d2 asrs r2, r2, #11 + 8015e14: f8c3 20fc str.w r2, [r3, #252] ; 0xfc + for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) { + 8015e18: 9a0d ldr r2, [sp, #52] ; 0x34 + 8015e1a: 455a cmp r2, fp + 8015e1c: f47f aede bne.w 8015bdc + 8015e20: 9b0c ldr r3, [sp, #48] ; 0x30 + + /* Pass 2: process rows from work array, store into output array. */ + /* Note that we must descale the results by a factor of 8 == 2**3, */ + /* and also undo the PASS1_BITS scaling. */ + + wsptr = workspace; + 8015e22: a80e add r0, sp, #56 ; 0x38 + 8015e24: f1a3 0904 sub.w r9, r3, #4 + 8015e28: 333c adds r3, #60 ; 0x3c + 8015e2a: 9304 str r3, [sp, #16] + for (ctr = 0; ctr < 16; ctr++) { + outptr = output_buf[ctr] + output_col; + 8015e2c: f859 3f04 ldr.w r3, [r9, #4]! + /* The rotator is sqrt(2)*c(-6). */ + + z2 = (INT32) wsptr[2]; + z3 = (INT32) wsptr[6]; + + z1 = MULTIPLY(z2 + z3, FIX_0_541196100); + 8015e30: f241 1451 movw r4, #4433 ; 0x1151 + outptr = output_buf[ctr] + output_col; + 8015e34: 9a98 ldr r2, [sp, #608] ; 0x260 + & RANGE_MASK]; + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp13 - tmp0, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + + wsptr += DCTSIZE; /* advance pointer to next row */ + 8015e36: 3020 adds r0, #32 + z2 = (INT32) wsptr[2]; + 8015e38: f850 1c18 ldr.w r1, [r0, #-24] + outptr = output_buf[ctr] + output_col; + 8015e3c: 189d adds r5, r3, r2 + z3 = (INT32) wsptr[6]; + 8015e3e: f850 2c08 ldr.w r2, [r0, #-8] + outptr = output_buf[ctr] + output_col; + 8015e42: 9303 str r3, [sp, #12] + z1 = MULTIPLY(z2 + z3, FIX_0_541196100); + 8015e44: 188b adds r3, r1, r2 + z3 = (INT32) wsptr[4]; + 8015e46: f850 6c10 ldr.w r6, [r0, #-16] + tmp0 = (INT32) wsptr[7]; + 8015e4a: f850 bc04 ldr.w fp, [r0, #-4] + z1 = MULTIPLY(z2 + z3, FIX_0_541196100); + 8015e4e: 4363 muls r3, r4 + tmp2 = z1 + MULTIPLY(z2, FIX_0_765366865); + 8015e50: f641 047e movw r4, #6270 ; 0x187e + tmp1 = (INT32) wsptr[5]; + 8015e54: f850 8c0c ldr.w r8, [r0, #-12] + tmp2 = z1 + MULTIPLY(z2, FIX_0_765366865); + 8015e58: fb04 3101 mla r1, r4, r1, r3 + tmp3 = z1 - MULTIPLY(z3, FIX_1_847759065); + 8015e5c: 4c47 ldr r4, [pc, #284] ; (8015f7c ) + tmp2 = (INT32) wsptr[3]; + 8015e5e: f850 ec14 ldr.w lr, [r0, #-20] + tmp3 = z1 - MULTIPLY(z3, FIX_1_847759065); + 8015e62: fb04 3302 mla r3, r4, r2, r3 + z2 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + 8015e66: f850 2c20 ldr.w r2, [r0, #-32] + tmp3 = (INT32) wsptr[1]; + 8015e6a: f850 ac1c ldr.w sl, [r0, #-28] + z2 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + 8015e6e: 3210 adds r2, #16 + tmp0 = (z2 + z3) << CONST_BITS; + 8015e70: 1994 adds r4, r2, r6 + tmp1 = (z2 - z3) << CONST_BITS; + 8015e72: 1b92 subs r2, r2, r6 + tmp10 = tmp0 + tmp2; + 8015e74: eb01 3744 add.w r7, r1, r4, lsl #13 + tmp13 = tmp0 - tmp2; + 8015e78: ebc1 3144 rsb r1, r1, r4, lsl #13 + z2 = tmp0 + tmp2; + 8015e7c: eb0b 040e add.w r4, fp, lr + tmp11 = tmp1 + tmp3; + 8015e80: eb03 3642 add.w r6, r3, r2, lsl #13 + tmp13 = tmp0 - tmp2; + 8015e84: 9101 str r1, [sp, #4] + tmp12 = tmp1 - tmp3; + 8015e86: ebc3 3342 rsb r3, r3, r2, lsl #13 + z3 = tmp1 + tmp3; + 8015e8a: eb08 010a add.w r1, r8, sl + tmp12 = tmp1 - tmp3; + 8015e8e: 9302 str r3, [sp, #8] + z1 = MULTIPLY(z2 + z3, FIX_1_175875602); /* sqrt(2) * c3 */ + 8015e90: f242 53a1 movw r3, #9633 ; 0x25a1 + 8015e94: 1862 adds r2, r4, r1 + 8015e96: 435a muls r2, r3 + z2 += z1; + 8015e98: 4b39 ldr r3, [pc, #228] ; (8015f80 ) + 8015e9a: fb03 2404 mla r4, r3, r4, r2 + z3 += z1; + 8015e9e: 4b39 ldr r3, [pc, #228] ; (8015f84 ) + 8015ea0: fb03 2201 mla r2, r3, r1, r2 + z1 = MULTIPLY(tmp0 + tmp3, - FIX_0_899976223); /* sqrt(2) * (c7-c3) */ + 8015ea4: eb0b 010a add.w r1, fp, sl + 8015ea8: 4b37 ldr r3, [pc, #220] ; (8015f88 ) + 8015eaa: 4359 muls r1, r3 + tmp0 += z1 + z2; + 8015eac: f640 138e movw r3, #2446 ; 0x98e + 8015eb0: eb04 0c01 add.w ip, r4, r1 + tmp3 += z1 + z3; + 8015eb4: 4411 add r1, r2 + tmp0 += z1 + z2; + 8015eb6: fb03 cc0b mla ip, r3, fp, ip + tmp3 += z1 + z3; + 8015eba: f243 0b0b movw fp, #12299 ; 0x300b + z1 = MULTIPLY(tmp1 + tmp2, - FIX_2_562915447); /* sqrt(2) * (-c1-c3) */ + 8015ebe: 4b33 ldr r3, [pc, #204] ; (8015f8c ) + tmp3 += z1 + z3; + 8015ec0: fb0b 110a mla r1, fp, sl, r1 + z1 = MULTIPLY(tmp1 + tmp2, - FIX_2_562915447); /* sqrt(2) * (-c1-c3) */ + 8015ec4: eb08 0a0e add.w sl, r8, lr + tmp1 += z1 + z3; + 8015ec8: f244 1bb3 movw fp, #16819 ; 0x41b3 + z1 = MULTIPLY(tmp1 + tmp2, - FIX_2_562915447); /* sqrt(2) * (-c1-c3) */ + 8015ecc: fb03 fa0a mul.w sl, r3, sl + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp3, + 8015ed0: 9b00 ldr r3, [sp, #0] + tmp1 += z1 + z3; + 8015ed2: 4452 add r2, sl + tmp2 += z1 + z2; + 8015ed4: 4454 add r4, sl + tmp1 += z1 + z3; + 8015ed6: fb0b 2b08 mla fp, fp, r8, r2 + tmp2 += z1 + z2; + 8015eda: f246 2854 movw r8, #25172 ; 0x6254 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp3, + 8015ede: 9a98 ldr r2, [sp, #608] ; 0x260 + tmp2 += z1 + z2; + 8015ee0: fb08 440e mla r4, r8, lr, r4 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp3, + 8015ee4: eb07 0e01 add.w lr, r7, r1 + outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp3, + 8015ee8: 1a7f subs r7, r7, r1 + & RANGE_MASK]; + 8015eea: f3ce 4e89 ubfx lr, lr, #18, #10 + & RANGE_MASK]; + 8015eee: f3c7 4789 ubfx r7, r7, #18, #10 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp3, + 8015ef2: f813 e00e ldrb.w lr, [r3, lr] + 8015ef6: 9b03 ldr r3, [sp, #12] + 8015ef8: f803 e002 strb.w lr, [r3, r2] + outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp3, + 8015efc: 9b00 ldr r3, [sp, #0] + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp12 - tmp1, + 8015efe: 9a00 ldr r2, [sp, #0] + outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp3, + 8015f00: 5dd9 ldrb r1, [r3, r7] + 8015f02: 71e9 strb r1, [r5, #7] + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp11 + tmp2, + 8015f04: 1931 adds r1, r6, r4 + outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp11 - tmp2, + 8015f06: 1b36 subs r6, r6, r4 + & RANGE_MASK]; + 8015f08: f3c1 4189 ubfx r1, r1, #18, #10 + & RANGE_MASK]; + 8015f0c: f3c6 4689 ubfx r6, r6, #18, #10 + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp11 + tmp2, + 8015f10: 5c59 ldrb r1, [r3, r1] + 8015f12: 7069 strb r1, [r5, #1] + outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp11 - tmp2, + 8015f14: 5d99 ldrb r1, [r3, r6] + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp12 + tmp1, + 8015f16: 9b02 ldr r3, [sp, #8] + outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp11 - tmp2, + 8015f18: 71a9 strb r1, [r5, #6] + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp12 + tmp1, + 8015f1a: eb03 010b add.w r1, r3, fp + 8015f1e: 9b00 ldr r3, [sp, #0] + & RANGE_MASK]; + 8015f20: f3c1 4189 ubfx r1, r1, #18, #10 + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp12 + tmp1, + 8015f24: 5c59 ldrb r1, [r3, r1] + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp12 - tmp1, + 8015f26: 9b02 ldr r3, [sp, #8] + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp12 + tmp1, + 8015f28: 70a9 strb r1, [r5, #2] + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp12 - tmp1, + 8015f2a: eba3 030b sub.w r3, r3, fp + & RANGE_MASK]; + 8015f2e: f3c3 4389 ubfx r3, r3, #18, #10 + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp12 - tmp1, + 8015f32: 5cd3 ldrb r3, [r2, r3] + 8015f34: 716b strb r3, [r5, #5] + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp13 + tmp0, + 8015f36: 9b01 ldr r3, [sp, #4] + 8015f38: 4463 add r3, ip + & RANGE_MASK]; + 8015f3a: f3c3 4389 ubfx r3, r3, #18, #10 + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp13 + tmp0, + 8015f3e: 5cd3 ldrb r3, [r2, r3] + 8015f40: 70eb strb r3, [r5, #3] + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp13 - tmp0, + 8015f42: 9b01 ldr r3, [sp, #4] + 8015f44: eba3 030c sub.w r3, r3, ip + & RANGE_MASK]; + 8015f48: f3c3 4389 ubfx r3, r3, #18, #10 + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp13 - tmp0, + 8015f4c: 5cd3 ldrb r3, [r2, r3] + 8015f4e: 712b strb r3, [r5, #4] + for (ctr = 0; ctr < 16; ctr++) { + 8015f50: 9b04 ldr r3, [sp, #16] + 8015f52: 454b cmp r3, r9 + 8015f54: f47f af6a bne.w 8015e2c + } +} + 8015f58: f50d 7d0f add.w sp, sp, #572 ; 0x23c + 8015f5c: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 8015f60: ffffecc2 .word 0xffffecc2 + 8015f64: ffffb6d6 .word 0xffffb6d6 + 8015f68: ffffc542 .word 0xffffc542 + 8015f6c: ffffe77a .word 0xffffe77a + 8015f70: ffffdbfa .word 0xffffdbfa + 8015f74: ffffeaab .word 0xffffeaab + 8015f78: ffffd817 .word 0xffffd817 + 8015f7c: ffffc4df .word 0xffffc4df + 8015f80: ffffc13b .word 0xffffc13b + 8015f84: fffff384 .word 0xfffff384 + 8015f88: ffffe333 .word 0xffffe333 + 8015f8c: ffffadfd .word 0xffffadfd + +08015f90 : + +GLOBAL(void) +jpeg_idct_7x14 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + 8015f90: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8015f94: b0ef sub sp, #444 ; 0x1bc + 8015f96: f1a2 0e02 sub.w lr, r2, #2 + 8015f9a: 9309 str r3, [sp, #36] ; 0x24 + INT32 z1, z2, z3, z4; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + int * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + 8015f9c: f8d0 314c ldr.w r3, [r0, #332] ; 0x14c + 8015fa0: 6d48 ldr r0, [r1, #84] ; 0x54 + 8015fa2: 3380 adds r3, #128 ; 0x80 + 8015fa4: 3804 subs r0, #4 + 8015fa6: 9300 str r3, [sp, #0] + * 14-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/28). + */ + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + for (ctr = 0; ctr < 7; ctr++, inptr++, quantptr++, wsptr++) { + 8015fa8: f102 030c add.w r3, r2, #12 + 8015fac: 930b str r3, [sp, #44] ; 0x2c + wsptr = workspace; + 8015fae: ab0c add r3, sp, #48 ; 0x30 + /* Even part */ + + z1 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 8015fb0: f93e 2f02 ldrsh.w r2, [lr, #2]! + + z3 = MULTIPLY(z1 + z2, FIX(1.105676686)); /* c6 */ + + tmp13 = z3 + MULTIPLY(z1, FIX(0.273079590)); /* c2-c6 */ + tmp14 = z3 - MULTIPLY(z2, FIX(1.719280954)); /* c6+c10 */ + tmp15 = MULTIPLY(z1, FIX(0.613604268)) - /* c10 */ + 8015fb4: f241 38a3 movw r8, #5027 ; 0x13a3 + z1 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 8015fb8: f850 1f04 ldr.w r1, [r0, #4]! + tmp16 = tmp14 - MULTIPLY(z1, FIX(1.061150426)); /* c9+c11-c13 */ + z1 -= z2; + tmp15 = MULTIPLY(z1, FIX(0.467085129)) - tmp13; /* c11 */ + tmp16 += tmp15; + z1 += z4; + z4 = MULTIPLY(z2 + z3, - FIX(0.158341681)) - tmp13; /* -c13 */ + 8015fbc: f46f 6aa2 mvn.w sl, #1296 ; 0x510 + z4 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + 8015fc0: f9be 4040 ldrsh.w r4, [lr, #64] ; 0x40 + for (ctr = 0; ctr < 7; ctr++, inptr++, quantptr++, wsptr++) { + 8015fc4: 3304 adds r3, #4 + z1 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 8015fc6: 434a muls r2, r1 + z4 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + 8015fc8: f8d0 1080 ldr.w r1, [r0, #128] ; 0x80 + 8015fcc: 434c muls r4, r1 + z2 = MULTIPLY(z4, FIX(1.274162392)); /* c4 */ + 8015fce: f642 01c6 movw r1, #10438 ; 0x28c6 + z1 <<= CONST_BITS; + 8015fd2: 0352 lsls r2, r2, #13 + z2 = MULTIPLY(z4, FIX(1.274162392)); /* c4 */ + 8015fd4: fb01 f704 mul.w r7, r1, r4 + z3 = MULTIPLY(z4, FIX(0.314692123)); /* c12 */ + 8015fd8: f640 2112 movw r1, #2578 ; 0xa12 + z1 += ONE << (CONST_BITS-PASS1_BITS-1); + 8015fdc: f502 6280 add.w r2, r2, #1024 ; 0x400 + z3 = MULTIPLY(z4, FIX(0.314692123)); /* c12 */ + 8015fe0: fb01 fc04 mul.w ip, r1, r4 + z4 = MULTIPLY(z4, FIX(0.881747734)); /* c8 */ + 8015fe4: f641 4137 movw r1, #7223 ; 0x1c37 + tmp10 = z1 + z2; + 8015fe8: 19d6 adds r6, r2, r7 + z4 = MULTIPLY(z4, FIX(0.881747734)); /* c8 */ + 8015fea: 434c muls r4, r1 + tmp23 = RIGHT_SHIFT(z1 - ((z2 + z3 - z4) << 1), /* c0 = (c4+c12-c8)*2 */ + 8015fec: 4467 add r7, ip + tmp11 = z1 + z3; + 8015fee: eb02 050c add.w r5, r2, ip + z1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + 8015ff2: f9be c020 ldrsh.w ip, [lr, #32] + tmp23 = RIGHT_SHIFT(z1 - ((z2 + z3 - z4) << 1), /* c0 = (c4+c12-c8)*2 */ + 8015ff6: 1b3f subs r7, r7, r4 + tmp12 = z1 - z4; + 8015ff8: eba2 0904 sub.w r9, r2, r4 + z2 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + 8015ffc: f8d0 40c0 ldr.w r4, [r0, #192] ; 0xc0 + tmp23 = RIGHT_SHIFT(z1 - ((z2 + z3 - z4) << 1), /* c0 = (c4+c12-c8)*2 */ + 8016000: eba2 0247 sub.w r2, r2, r7, lsl #1 + z3 = MULTIPLY(z1 + z2, FIX(1.105676686)); /* c6 */ + 8016004: f242 3762 movw r7, #9058 ; 0x2362 + tmp14 = z3 - MULTIPLY(z2, FIX(1.719280954)); /* c6+c10 */ + 8016008: 49b4 ldr r1, [pc, #720] ; (80162dc ) + tmp23 = RIGHT_SHIFT(z1 - ((z2 + z3 - z4) << 1), /* c0 = (c4+c12-c8)*2 */ + 801600a: 920a str r2, [sp, #40] ; 0x28 + z1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + 801600c: 6c02 ldr r2, [r0, #64] ; 0x40 + 801600e: fb02 fc0c mul.w ip, r2, ip + z2 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + 8016012: f9be 2060 ldrsh.w r2, [lr, #96] ; 0x60 + 8016016: 4362 muls r2, r4 + z3 = MULTIPLY(z1 + z2, FIX(1.105676686)); /* c6 */ + 8016018: eb0c 0402 add.w r4, ip, r2 + 801601c: 437c muls r4, r7 + tmp13 = z3 + MULTIPLY(z1, FIX(0.273079590)); /* c2-c6 */ + 801601e: f640 07bd movw r7, #2237 ; 0x8bd + 8016022: fb07 470c mla r7, r7, ip, r4 + tmp14 = z3 - MULTIPLY(z2, FIX(1.719280954)); /* c6+c10 */ + 8016026: fb01 4402 mla r4, r1, r2, r4 + MULTIPLY(z2, FIX(1.378756276)); /* c2 */ + 801602a: f601 21e5 addw r1, r1, #2789 ; 0xae5 + 801602e: 434a muls r2, r1 + tmp20 = tmp10 + tmp13; + 8016030: 19f1 adds r1, r6, r7 + 8016032: 9101 str r1, [sp, #4] + tmp26 = tmp10 - tmp13; + 8016034: 1bf1 subs r1, r6, r7 + tmp15 = MULTIPLY(z1, FIX(0.613604268)) - /* c10 */ + 8016036: fb08 220c mla r2, r8, ip, r2 + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + 801603a: f9be 7030 ldrsh.w r7, [lr, #48] ; 0x30 + tmp26 = tmp10 - tmp13; + 801603e: 9102 str r1, [sp, #8] + tmp21 = tmp11 + tmp14; + 8016040: 1929 adds r1, r5, r4 + z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + 8016042: f9be 6050 ldrsh.w r6, [lr, #80] ; 0x50 + tmp21 = tmp11 + tmp14; + 8016046: 9103 str r1, [sp, #12] + tmp25 = tmp11 - tmp14; + 8016048: 1b29 subs r1, r5, r4 + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 801604a: f9be 4010 ldrsh.w r4, [lr, #16] + tmp12 = MULTIPLY(tmp14, FIX(1.197448846)); /* c5 */ + 801604e: f242 6552 movw r5, #9810 ; 0x2652 + tmp25 = tmp11 - tmp14; + 8016052: 9104 str r1, [sp, #16] + tmp22 = tmp12 + tmp15; + 8016054: eb09 0102 add.w r1, r9, r2 + tmp24 = tmp12 - tmp15; + 8016058: eba9 0202 sub.w r2, r9, r2 + tmp15 = MULTIPLY(z1, FIX(0.467085129)) - tmp13; /* c11 */ + 801605c: f640 69f2 movw r9, #3826 ; 0xef2 + tmp22 = tmp12 + tmp15; + 8016060: 9105 str r1, [sp, #20] + tmp24 = tmp12 - tmp15; + 8016062: 9206 str r2, [sp, #24] + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 8016064: 6a02 ldr r2, [r0, #32] + z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + 8016066: f8d0 10e0 ldr.w r1, [r0, #224] ; 0xe0 + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 801606a: 4354 muls r4, r2 + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + 801606c: 6e02 ldr r2, [r0, #96] ; 0x60 + 801606e: 4357 muls r7, r2 + z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + 8016070: f8d0 20a0 ldr.w r2, [r0, #160] ; 0xa0 + 8016074: 4356 muls r6, r2 + z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + 8016076: f9be 2070 ldrsh.w r2, [lr, #112] ; 0x70 + tmp11 = MULTIPLY(z1 + z2, FIX(1.334852607)); /* c3 */ + 801607a: eb04 0c07 add.w ip, r4, r7 + z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + 801607e: 434a muls r2, r1 + tmp14 = z1 + z3; + 8016080: eb04 0b06 add.w fp, r4, r6 + tmp11 = MULTIPLY(z1 + z2, FIX(1.334852607)); /* c3 */ + 8016084: f642 21b7 movw r1, #10935 ; 0x2ab7 + tmp12 = MULTIPLY(tmp14, FIX(1.197448846)); /* c5 */ + 8016088: fb05 f50b mul.w r5, r5, fp + tmp11 = MULTIPLY(z1 + z2, FIX(1.334852607)); /* c3 */ + 801608c: fb01 fc0c mul.w ip, r1, ip + tmp10 = tmp11 + tmp12 + tmp13 - MULTIPLY(z1, FIX(1.126980169)); /* c3+c5-c1 */ + 8016090: 4993 ldr r1, [pc, #588] ; (80162e0 ) + 8016092: eb0c 0805 add.w r8, ip, r5 + 8016096: eb08 3842 add.w r8, r8, r2, lsl #13 + 801609a: fb01 8804 mla r8, r1, r4, r8 + tmp14 = MULTIPLY(tmp14, FIX(0.752406978)); /* c9 */ + 801609e: f641 0114 movw r1, #6164 ; 0x1814 + 80160a2: fb01 fb0b mul.w fp, r1, fp + tmp16 = tmp14 - MULTIPLY(z1, FIX(1.061150426)); /* c9+c11-c13 */ + 80160a6: 498f ldr r1, [pc, #572] ; (80162e4 ) + 80160a8: fb01 b104 mla r1, r1, r4, fp + z1 -= z2; + 80160ac: 1be4 subs r4, r4, r7 + tmp15 = MULTIPLY(z1, FIX(0.467085129)) - tmp13; /* c11 */ + 80160ae: fb09 f904 mul.w r9, r9, r4 + z1 -= z2; + 80160b2: 9407 str r4, [sp, #28] + tmp15 = MULTIPLY(z1, FIX(0.467085129)) - tmp13; /* c11 */ + 80160b4: eba9 3942 sub.w r9, r9, r2, lsl #13 + tmp11 += z4 - MULTIPLY(z2, FIX(0.424103948)); /* c3-c9-c13 */ + 80160b8: 4c8b ldr r4, [pc, #556] ; (80162e8 ) + tmp16 += tmp15; + 80160ba: 4449 add r1, r9 + 80160bc: 9108 str r1, [sp, #32] + z4 = MULTIPLY(z2 + z3, - FIX(0.158341681)) - tmp13; /* -c13 */ + 80160be: 19b9 adds r1, r7, r6 + 80160c0: fb0a f101 mul.w r1, sl, r1 + 80160c4: eba1 3142 sub.w r1, r1, r2, lsl #13 + tmp11 += z4 - MULTIPLY(z2, FIX(0.424103948)); /* c3-c9-c13 */ + 80160c8: fb04 1a07 mla sl, r4, r7, r1 + tmp12 += z4 - MULTIPLY(z3, FIX(2.373959773)); /* c3+c5-c13 */ + 80160cc: 4c87 ldr r4, [pc, #540] ; (80162ec ) + 80160ce: fb04 1106 mla r1, r4, r6, r1 + tmp11 += z4 - MULTIPLY(z2, FIX(0.424103948)); /* c3-c9-c13 */ + 80160d2: 44e2 add sl, ip + z4 = MULTIPLY(z3 - z2, FIX(1.405321284)); /* c1 */ + 80160d4: f642 4cf8 movw ip, #11512 ; 0x2cf8 + tmp14 += z4 + tmp13 - MULTIPLY(z3, FIX(1.6906431334)); /* c1+c9-c11 */ + 80160d8: 4c85 ldr r4, [pc, #532] ; (80162f0 ) + tmp12 += z4 - MULTIPLY(z3, FIX(2.373959773)); /* c3+c5-c13 */ + 80160da: 4429 add r1, r5 + z4 = MULTIPLY(z3 - z2, FIX(1.405321284)); /* c1 */ + 80160dc: 1bf5 subs r5, r6, r7 + 80160de: fb0c f505 mul.w r5, ip, r5 + tmp14 += z4 + tmp13 - MULTIPLY(z3, FIX(1.6906431334)); /* c1+c9-c11 */ + 80160e2: eb05 3c42 add.w ip, r5, r2, lsl #13 + 80160e6: fb04 cc06 mla ip, r4, r6, ip + z1 += z4; + 80160ea: 9c07 ldr r4, [sp, #28] + 80160ec: 4422 add r2, r4 + + tmp13 = (z1 - z3) << PASS1_BITS; + + /* Final output stage */ + + wsptr[7*0] = (int) RIGHT_SHIFT(tmp20 + tmp10, CONST_BITS-PASS1_BITS); + 80160ee: 9c01 ldr r4, [sp, #4] + tmp14 += z4 + tmp13 - MULTIPLY(z3, FIX(1.6906431334)); /* c1+c9-c11 */ + 80160f0: 44dc add ip, fp + tmp15 += z4 + MULTIPLY(z2, FIX(0.674957567)); /* c1+c11-c5 */ + 80160f2: f241 5b99 movw fp, #5529 ; 0x1599 + wsptr[7*0] = (int) RIGHT_SHIFT(tmp20 + tmp10, CONST_BITS-PASS1_BITS); + 80160f6: 4444 add r4, r8 + tmp13 = (z1 - z3) << PASS1_BITS; + 80160f8: 1b92 subs r2, r2, r6 + tmp15 += z4 + MULTIPLY(z2, FIX(0.674957567)); /* c1+c11-c5 */ + 80160fa: fb0b 5507 mla r5, fp, r7, r5 + wsptr[7*0] = (int) RIGHT_SHIFT(tmp20 + tmp10, CONST_BITS-PASS1_BITS); + 80160fe: 12e4 asrs r4, r4, #11 + tmp13 = (z1 - z3) << PASS1_BITS; + 8016100: 0092 lsls r2, r2, #2 + tmp15 += z4 + MULTIPLY(z2, FIX(0.674957567)); /* c1+c11-c5 */ + 8016102: 444d add r5, r9 + wsptr[7*0] = (int) RIGHT_SHIFT(tmp20 + tmp10, CONST_BITS-PASS1_BITS); + 8016104: f843 4c04 str.w r4, [r3, #-4] + wsptr[7*13] = (int) RIGHT_SHIFT(tmp20 - tmp10, CONST_BITS-PASS1_BITS); + 8016108: 9c01 ldr r4, [sp, #4] + 801610a: eba4 0408 sub.w r4, r4, r8 + 801610e: 12e4 asrs r4, r4, #11 + 8016110: f8c3 4168 str.w r4, [r3, #360] ; 0x168 + wsptr[7*1] = (int) RIGHT_SHIFT(tmp21 + tmp11, CONST_BITS-PASS1_BITS); + 8016114: 9c03 ldr r4, [sp, #12] + 8016116: 4454 add r4, sl + 8016118: 12e4 asrs r4, r4, #11 + 801611a: 619c str r4, [r3, #24] + wsptr[7*12] = (int) RIGHT_SHIFT(tmp21 - tmp11, CONST_BITS-PASS1_BITS); + 801611c: 9c03 ldr r4, [sp, #12] + 801611e: eba4 040a sub.w r4, r4, sl + 8016122: 12e4 asrs r4, r4, #11 + 8016124: f8c3 414c str.w r4, [r3, #332] ; 0x14c + wsptr[7*2] = (int) RIGHT_SHIFT(tmp22 + tmp12, CONST_BITS-PASS1_BITS); + 8016128: 9c05 ldr r4, [sp, #20] + 801612a: 440c add r4, r1 + 801612c: 12e4 asrs r4, r4, #11 + 801612e: 635c str r4, [r3, #52] ; 0x34 + wsptr[7*11] = (int) RIGHT_SHIFT(tmp22 - tmp12, CONST_BITS-PASS1_BITS); + 8016130: 9c05 ldr r4, [sp, #20] + 8016132: 1a61 subs r1, r4, r1 + 8016134: 12c9 asrs r1, r1, #11 + 8016136: f8c3 1130 str.w r1, [r3, #304] ; 0x130 + wsptr[7*3] = (int) (tmp23 + tmp13); + 801613a: 990a ldr r1, [sp, #40] ; 0x28 + 801613c: eb02 21e1 add.w r1, r2, r1, asr #11 + 8016140: 6519 str r1, [r3, #80] ; 0x50 + wsptr[7*10] = (int) (tmp23 - tmp13); + 8016142: 990a ldr r1, [sp, #40] ; 0x28 + 8016144: ebc2 22e1 rsb r2, r2, r1, asr #11 + wsptr[7*4] = (int) RIGHT_SHIFT(tmp24 + tmp14, CONST_BITS-PASS1_BITS); + wsptr[7*9] = (int) RIGHT_SHIFT(tmp24 - tmp14, CONST_BITS-PASS1_BITS); + wsptr[7*5] = (int) RIGHT_SHIFT(tmp25 + tmp15, CONST_BITS-PASS1_BITS); + wsptr[7*8] = (int) RIGHT_SHIFT(tmp25 - tmp15, CONST_BITS-PASS1_BITS); + wsptr[7*6] = (int) RIGHT_SHIFT(tmp26 + tmp16, CONST_BITS-PASS1_BITS); + 8016148: 9908 ldr r1, [sp, #32] + wsptr[7*10] = (int) (tmp23 - tmp13); + 801614a: f8c3 2114 str.w r2, [r3, #276] ; 0x114 + wsptr[7*4] = (int) RIGHT_SHIFT(tmp24 + tmp14, CONST_BITS-PASS1_BITS); + 801614e: 9a06 ldr r2, [sp, #24] + 8016150: 4462 add r2, ip + 8016152: 12d2 asrs r2, r2, #11 + 8016154: 66da str r2, [r3, #108] ; 0x6c + wsptr[7*9] = (int) RIGHT_SHIFT(tmp24 - tmp14, CONST_BITS-PASS1_BITS); + 8016156: 9a06 ldr r2, [sp, #24] + 8016158: eba2 020c sub.w r2, r2, ip + 801615c: 12d2 asrs r2, r2, #11 + 801615e: f8c3 20f8 str.w r2, [r3, #248] ; 0xf8 + wsptr[7*5] = (int) RIGHT_SHIFT(tmp25 + tmp15, CONST_BITS-PASS1_BITS); + 8016162: 9a04 ldr r2, [sp, #16] + 8016164: 442a add r2, r5 + 8016166: 12d2 asrs r2, r2, #11 + 8016168: f8c3 2088 str.w r2, [r3, #136] ; 0x88 + wsptr[7*8] = (int) RIGHT_SHIFT(tmp25 - tmp15, CONST_BITS-PASS1_BITS); + 801616c: 9a04 ldr r2, [sp, #16] + 801616e: 1b52 subs r2, r2, r5 + 8016170: 12d2 asrs r2, r2, #11 + 8016172: f8c3 20dc str.w r2, [r3, #220] ; 0xdc + wsptr[7*6] = (int) RIGHT_SHIFT(tmp26 + tmp16, CONST_BITS-PASS1_BITS); + 8016176: 9a02 ldr r2, [sp, #8] + 8016178: 440a add r2, r1 + 801617a: 12d2 asrs r2, r2, #11 + 801617c: f8c3 20a4 str.w r2, [r3, #164] ; 0xa4 + wsptr[7*7] = (int) RIGHT_SHIFT(tmp26 - tmp16, CONST_BITS-PASS1_BITS); + 8016180: 9a02 ldr r2, [sp, #8] + 8016182: 1a52 subs r2, r2, r1 + 8016184: 12d2 asrs r2, r2, #11 + 8016186: f8c3 20c0 str.w r2, [r3, #192] ; 0xc0 + for (ctr = 0; ctr < 7; ctr++, inptr++, quantptr++, wsptr++) { + 801618a: 9a0b ldr r2, [sp, #44] ; 0x2c + 801618c: 4572 cmp r2, lr + 801618e: f47f af0f bne.w 8015fb0 + 8016192: 9b09 ldr r3, [sp, #36] ; 0x24 + } + + /* Pass 2: process 14 rows from work array, store into output array. + * 7-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/14). + */ + wsptr = workspace; + 8016194: ac0c add r4, sp, #48 ; 0x30 + 8016196: f1a3 0904 sub.w r9, r3, #4 + 801619a: 3334 adds r3, #52 ; 0x34 + 801619c: 9304 str r3, [sp, #16] + for (ctr = 0; ctr < 14; ctr++) { + outptr = output_buf[ctr] + output_col; + 801619e: f859 3f04 ldr.w r3, [r9, #4]! + & RANGE_MASK]; + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp23, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + + wsptr += 7; /* advance pointer to next row */ + 80161a2: 341c adds r4, #28 + tmp23 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + 80161a4: f854 7c1c ldr.w r7, [r4, #-28] + outptr = output_buf[ctr] + output_col; + 80161a8: 9a78 ldr r2, [sp, #480] ; 0x1e0 + 80161aa: 9303 str r3, [sp, #12] + 80161ac: 189e adds r6, r3, r2 + tmp23 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + 80161ae: f107 0310 add.w r3, r7, #16 + z3 = (INT32) wsptr[6]; + 80161b2: f854 1c04 ldr.w r1, [r4, #-4] + tmp23 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + 80161b6: 9301 str r3, [sp, #4] + tmp20 = MULTIPLY(z2 - z3, FIX(0.881747734)); /* c4 */ + 80161b8: f854 3c0c ldr.w r3, [r4, #-12] + z1 = (INT32) wsptr[2]; + 80161bc: f854 5c14 ldr.w r5, [r4, #-20] + tmp20 = MULTIPLY(z2 - z3, FIX(0.881747734)); /* c4 */ + 80161c0: eba3 0c01 sub.w ip, r3, r1 + 80161c4: f641 4337 movw r3, #7223 ; 0x1c37 + tmp21 = tmp20 + tmp22 + tmp23 - MULTIPLY(z2, FIX(1.841218003)); /* c2+c4-c6 */ + 80161c8: 4f4a ldr r7, [pc, #296] ; (80162f4 ) + tmp10 = z1 + z3; + 80161ca: eb05 0801 add.w r8, r5, r1 + tmp20 = MULTIPLY(z2 - z3, FIX(0.881747734)); /* c4 */ + 80161ce: fb03 fc0c mul.w ip, r3, ip + tmp22 = MULTIPLY(z1 - z2, FIX(0.314692123)); /* c6 */ + 80161d2: f854 3c0c ldr.w r3, [r4, #-12] + z2 = (INT32) wsptr[3]; + 80161d6: f854 ac10 ldr.w sl, [r4, #-16] + tmp22 = MULTIPLY(z1 - z2, FIX(0.314692123)); /* c6 */ + 80161da: 1aea subs r2, r5, r3 + 80161dc: f640 2312 movw r3, #2578 ; 0xa12 + z3 = (INT32) wsptr[5]; + 80161e0: f854 ec08 ldr.w lr, [r4, #-8] + tmp22 = MULTIPLY(z1 - z2, FIX(0.314692123)); /* c6 */ + 80161e4: 435a muls r2, r3 + tmp21 = tmp20 + tmp22 + tmp23 - MULTIPLY(z2, FIX(1.841218003)); /* c2+c4-c6 */ + 80161e6: 9b01 ldr r3, [sp, #4] + 80161e8: eb0c 0002 add.w r0, ip, r2 + 80161ec: eb00 3043 add.w r0, r0, r3, lsl #13 + 80161f0: f854 3c0c ldr.w r3, [r4, #-12] + 80161f4: fb07 0003 mla r0, r7, r3, r0 + tmp10 = MULTIPLY(tmp10, FIX(1.274162392)) + tmp23; /* c2 */ + 80161f8: f642 03c6 movw r3, #10438 ; 0x28c6 + 80161fc: 9f01 ldr r7, [sp, #4] + 80161fe: fb03 f308 mul.w r3, r3, r8 + 8016202: eb03 3347 add.w r3, r3, r7, lsl #13 + tmp20 += tmp10 - MULTIPLY(z3, FIX(0.077722536)); /* c2-c4-c6 */ + 8016206: f46f 771f mvn.w r7, #636 ; 0x27c + 801620a: fb07 3101 mla r1, r7, r1, r3 + tmp22 += tmp10 - MULTIPLY(z1, FIX(2.470602249)); /* c2+c4+c6 */ + 801620e: 4f3a ldr r7, [pc, #232] ; (80162f8 ) + 8016210: fb07 3305 mla r3, r7, r5, r3 + tmp12 = MULTIPLY(z1 - z2, FIX(0.170262339)); /* (c3+c5-c1)/2 */ + 8016214: f240 5773 movw r7, #1395 ; 0x573 + tmp20 += tmp10 - MULTIPLY(z3, FIX(0.077722536)); /* c2-c4-c6 */ + 8016218: 4461 add r1, ip + tmp22 += tmp10 - MULTIPLY(z1, FIX(2.470602249)); /* c2+c4+c6 */ + 801621a: 4413 add r3, r2 + z1 = (INT32) wsptr[1]; + 801621c: f854 2c18 ldr.w r2, [r4, #-24] + tmp22 += tmp10 - MULTIPLY(z1, FIX(2.470602249)); /* c2+c4+c6 */ + 8016220: 9302 str r3, [sp, #8] + tmp11 = MULTIPLY(z1 + z2, FIX(0.935414347)); /* (c3+c1-c5)/2 */ + 8016222: eb02 0b0a add.w fp, r2, sl + tmp12 = MULTIPLY(z1 - z2, FIX(0.170262339)); /* (c3+c5-c1)/2 */ + 8016226: eba2 050a sub.w r5, r2, sl + tmp11 = MULTIPLY(z1 + z2, FIX(0.935414347)); /* (c3+c1-c5)/2 */ + 801622a: f641 53ef movw r3, #7663 ; 0x1def + z2 = MULTIPLY(z1 + z3, FIX(0.613604268)); /* c5 */ + 801622e: 4472 add r2, lr + tmp12 = MULTIPLY(z2 + z3, - FIX(1.378756276)); /* -c1 */ + 8016230: 44f2 add sl, lr + tmp11 = MULTIPLY(z1 + z2, FIX(0.935414347)); /* (c3+c1-c5)/2 */ + 8016232: fb03 fb0b mul.w fp, r3, fp + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp10, + 8016236: 9b78 ldr r3, [sp, #480] ; 0x1e0 + tmp12 = MULTIPLY(z1 - z2, FIX(0.170262339)); /* (c3+c5-c1)/2 */ + 8016238: 437d muls r5, r7 + tmp12 = MULTIPLY(z2 + z3, - FIX(1.378756276)); /* -c1 */ + 801623a: 4f30 ldr r7, [pc, #192] ; (80162fc ) + tmp10 = tmp11 - tmp12; + 801623c: ebab 0c05 sub.w ip, fp, r5 + tmp11 += tmp12; + 8016240: 445d add r5, fp + z2 = MULTIPLY(z1 + z3, FIX(0.613604268)); /* c5 */ + 8016242: f241 3ba3 movw fp, #5027 ; 0x13a3 + tmp12 = MULTIPLY(z2 + z3, - FIX(1.378756276)); /* -c1 */ + 8016246: fb07 fa0a mul.w sl, r7, sl + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp10, + 801624a: 9f00 ldr r7, [sp, #0] + z2 = MULTIPLY(z1 + z3, FIX(0.613604268)); /* c5 */ + 801624c: fb0b f202 mul.w r2, fp, r2 + tmp12 += z2 + MULTIPLY(z3, FIX(1.870828693)); /* c3+c1-c5 */ + 8016250: f643 3bde movw fp, #15326 ; 0x3bde + tmp11 += tmp12; + 8016254: 4455 add r5, sl + tmp10 += z2; + 8016256: 4494 add ip, r2 + tmp12 += z2 + MULTIPLY(z3, FIX(1.870828693)); /* c3+c1-c5 */ + 8016258: fb0b 220e mla r2, fp, lr, r2 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp10, + 801625c: eb01 0e0c add.w lr, r1, ip + outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp20 - tmp10, + 8016260: eba1 010c sub.w r1, r1, ip + tmp12 += z2 + MULTIPLY(z3, FIX(1.870828693)); /* c3+c1-c5 */ + 8016264: 4452 add r2, sl + & RANGE_MASK]; + 8016266: f3ce 4e89 ubfx lr, lr, #18, #10 + & RANGE_MASK]; + 801626a: f3c1 4189 ubfx r1, r1, #18, #10 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp10, + 801626e: f817 e00e ldrb.w lr, [r7, lr] + 8016272: 9f03 ldr r7, [sp, #12] + 8016274: f807 e003 strb.w lr, [r7, r3] + outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp20 - tmp10, + 8016278: 9b00 ldr r3, [sp, #0] + 801627a: 5c59 ldrb r1, [r3, r1] + 801627c: 71b1 strb r1, [r6, #6] + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp11, + 801627e: 1941 adds r1, r0, r5 + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp11, + 8016280: 1b40 subs r0, r0, r5 + & RANGE_MASK]; + 8016282: f3c1 4189 ubfx r1, r1, #18, #10 + & RANGE_MASK]; + 8016286: f3c0 4089 ubfx r0, r0, #18, #10 + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp11, + 801628a: 5c59 ldrb r1, [r3, r1] + 801628c: 7071 strb r1, [r6, #1] + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp11, + 801628e: 5c19 ldrb r1, [r3, r0] + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp12, + 8016290: 9b02 ldr r3, [sp, #8] + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp11, + 8016292: 7171 strb r1, [r6, #5] + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp12, + 8016294: 1899 adds r1, r3, r2 + 8016296: 9b00 ldr r3, [sp, #0] + & RANGE_MASK]; + 8016298: f3c1 4189 ubfx r1, r1, #18, #10 + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp12, + 801629c: 5c59 ldrb r1, [r3, r1] + 801629e: 70b1 strb r1, [r6, #2] + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp12, + 80162a0: 9b02 ldr r3, [sp, #8] + 80162a2: 1a9b subs r3, r3, r2 + 80162a4: 9a00 ldr r2, [sp, #0] + & RANGE_MASK]; + 80162a6: f3c3 4389 ubfx r3, r3, #18, #10 + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp12, + 80162aa: 5cd3 ldrb r3, [r2, r3] + tmp23 += MULTIPLY(z2, FIX(1.414213562)); /* c0 */ + 80162ac: f642 5241 movw r2, #11585 ; 0x2d41 + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp12, + 80162b0: 7133 strb r3, [r6, #4] + z2 -= tmp10; + 80162b2: f854 3c0c ldr.w r3, [r4, #-12] + 80162b6: eba3 0308 sub.w r3, r3, r8 + tmp23 += MULTIPLY(z2, FIX(1.414213562)); /* c0 */ + 80162ba: 4353 muls r3, r2 + 80162bc: 9a01 ldr r2, [sp, #4] + 80162be: eb03 3342 add.w r3, r3, r2, lsl #13 + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp23, + 80162c2: 9a00 ldr r2, [sp, #0] + & RANGE_MASK]; + 80162c4: f3c3 4389 ubfx r3, r3, #18, #10 + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp23, + 80162c8: 5cd3 ldrb r3, [r2, r3] + 80162ca: 70f3 strb r3, [r6, #3] + for (ctr = 0; ctr < 14; ctr++) { + 80162cc: 9b04 ldr r3, [sp, #16] + 80162ce: 454b cmp r3, r9 + 80162d0: f47f af65 bne.w 801619e + } +} + 80162d4: b06f add sp, #444 ; 0x1bc + 80162d6: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 80162da: bf00 nop + 80162dc: ffffc8fc .word 0xffffc8fc + 80162e0: ffffdbf0 .word 0xffffdbf0 + 80162e4: ffffde0b .word 0xffffde0b + 80162e8: fffff26e .word 0xfffff26e + 80162ec: ffffb409 .word 0xffffb409 + 80162f0: ffffc9e6 .word 0xffffc9e6 + 80162f4: ffffc515 .word 0xffffc515 + 80162f8: ffffb0f1 .word 0xffffb0f1 + 80162fc: ffffd3e1 .word 0xffffd3e1 + +08016300 : + +GLOBAL(void) +jpeg_idct_6x12 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + 8016300: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8016304: b0d3 sub sp, #332 ; 0x14c + 8016306: 6d49 ldr r1, [r1, #84] ; 0x54 + 8016308: f1a2 0902 sub.w r9, r2, #2 + 801630c: 9308 str r3, [sp, #32] + 801630e: 3904 subs r1, #4 + INT32 z1, z2, z3, z4; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + int * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + 8016310: f8d0 314c ldr.w r3, [r0, #332] ; 0x14c + 8016314: 3380 adds r3, #128 ; 0x80 + 8016316: 9300 str r3, [sp, #0] + * 12-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/24). + */ + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + for (ctr = 0; ctr < 6; ctr++, inptr++, quantptr++, wsptr++) { + 8016318: f102 030a add.w r3, r2, #10 + 801631c: 9309 str r3, [sp, #36] ; 0x24 + wsptr = workspace; + 801631e: ab0a add r3, sp, #40 ; 0x28 + /* Even part */ + + z3 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 8016320: f939 7f02 ldrsh.w r7, [r9, #2]! + for (ctr = 0; ctr < 6; ctr++, inptr++, quantptr++, wsptr++) { + 8016324: 3304 adds r3, #4 + z3 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 8016326: f851 2f04 ldr.w r2, [r1, #4]! + tmp11 = z3 - z4; + + z1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + z4 = MULTIPLY(z1, FIX(1.366025404)); /* c2 */ + z1 <<= CONST_BITS; + z2 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + 801632a: f9b9 4060 ldrsh.w r4, [r9, #96] ; 0x60 + z4 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + 801632e: f8d1 0080 ldr.w r0, [r1, #128] ; 0x80 + z3 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 8016332: 4357 muls r7, r2 + z4 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + 8016334: f9b9 2040 ldrsh.w r2, [r9, #64] ; 0x40 + z2 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + 8016338: f8d1 50c0 ldr.w r5, [r1, #192] ; 0xc0 + z3 <<= CONST_BITS; + 801633c: 037f lsls r7, r7, #13 + z4 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + 801633e: 4342 muls r2, r0 + z4 = MULTIPLY(z4, FIX(1.224744871)); /* c4 */ + 8016340: f242 7031 movw r0, #10033 ; 0x2731 + z1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + 8016344: f9b9 6020 ldrsh.w r6, [r9, #32] + z2 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + 8016348: 436c muls r4, r5 + z4 = MULTIPLY(z4, FIX(1.224744871)); /* c4 */ + 801634a: 4342 muls r2, r0 + z1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + 801634c: 6c08 ldr r0, [r1, #64] ; 0x40 + z3 += ONE << (CONST_BITS-PASS1_BITS-1); + 801634e: f507 6780 add.w r7, r7, #1024 ; 0x400 + z2 <<= CONST_BITS; + 8016352: 0364 lsls r4, r4, #13 + z1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + 8016354: 4346 muls r6, r0 + tmp10 = z3 + z4; + 8016356: eb07 0c02 add.w ip, r7, r2 + tmp11 = z3 - z4; + 801635a: eba7 0e02 sub.w lr, r7, r2 + + tmp12 = z1 - z2; + 801635e: ebc4 3546 rsb r5, r4, r6, lsl #13 + z4 = MULTIPLY(z1, FIX(1.366025404)); /* c2 */ + 8016362: f642 32b6 movw r2, #11190 ; 0x2bb6 + 8016366: fb02 f006 mul.w r0, r2, r6 + + tmp21 = z3 + tmp12; + 801636a: 197a adds r2, r7, r5 + 801636c: 9201 str r2, [sp, #4] + tmp24 = z3 - tmp12; + 801636e: 1b7a subs r2, r7, r5 + + tmp12 = z4 + z2; + 8016370: 1905 adds r5, r0, r4 + + tmp20 = tmp10 + tmp12; + tmp25 = tmp10 - tmp12; + + tmp12 = z4 - z1 - z2; + 8016372: eba0 3046 sub.w r0, r0, r6, lsl #13 + tmp24 = z3 - tmp12; + 8016376: 9202 str r2, [sp, #8] + + tmp11 = MULTIPLY(z2, FIX(1.306562965)); /* c3 */ + tmp14 = MULTIPLY(z2, - FIX_0_541196100); /* -c9 */ + + tmp10 = z1 + z3; + tmp15 = MULTIPLY(tmp10 + z4, FIX(0.860918669)); /* c7 */ + 8016378: f641 368d movw r6, #7053 ; 0x1b8d + tmp20 = tmp10 + tmp12; + 801637c: eb0c 0205 add.w r2, ip, r5 + tmp12 = z4 - z1 - z2; + 8016380: 1b00 subs r0, r0, r4 + tmp12 = tmp15 + MULTIPLY(tmp10, FIX(0.261052384)); /* c5-c7 */ + tmp10 = tmp12 + tmp11 + MULTIPLY(z1, FIX(0.280143716)); /* c1-c5 */ + tmp13 = MULTIPLY(z3 + z4, - FIX(1.045510580)); /* -(c7+c11) */ + tmp12 += tmp13 + tmp14 - MULTIPLY(z3, FIX(1.478575242)); /* c1+c5-c7-c11 */ + 8016382: 4f87 ldr r7, [pc, #540] ; (80165a0 ) + tmp20 = tmp10 + tmp12; + 8016384: 9203 str r2, [sp, #12] + tmp25 = tmp10 - tmp12; + 8016386: ebac 0205 sub.w r2, ip, r5 + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 801638a: f9b9 c010 ldrsh.w ip, [r9, #16] + tmp25 = tmp10 - tmp12; + 801638e: 9204 str r2, [sp, #16] + tmp22 = tmp11 + tmp12; + 8016390: eb0e 0200 add.w r2, lr, r0 + z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + 8016394: f9b9 5050 ldrsh.w r5, [r9, #80] ; 0x50 + tmp22 = tmp11 + tmp12; + 8016398: 9205 str r2, [sp, #20] + tmp23 = tmp11 - tmp12; + 801639a: ebae 0200 sub.w r2, lr, r0 + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + 801639e: f9b9 e030 ldrsh.w lr, [r9, #48] ; 0x30 + tmp23 = tmp11 - tmp12; + 80163a2: 9206 str r2, [sp, #24] + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 80163a4: 6a0a ldr r2, [r1, #32] + z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + 80163a6: f8d1 00e0 ldr.w r0, [r1, #224] ; 0xe0 + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 80163aa: fb02 fc0c mul.w ip, r2, ip + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + 80163ae: 6e0a ldr r2, [r1, #96] ; 0x60 + 80163b0: fb02 fe0e mul.w lr, r2, lr + z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + 80163b4: f8d1 20a0 ldr.w r2, [r1, #160] ; 0xa0 + 80163b8: 4355 muls r5, r2 + z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + 80163ba: f9b9 2070 ldrsh.w r2, [r9, #112] ; 0x70 + tmp10 = z1 + z3; + 80163be: eb0c 0b05 add.w fp, ip, r5 + z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + 80163c2: 4342 muls r2, r0 + tmp11 = MULTIPLY(z2, FIX(1.306562965)); /* c3 */ + 80163c4: f642 10cf movw r0, #10703 ; 0x29cf + tmp15 = MULTIPLY(tmp10 + z4, FIX(0.860918669)); /* c7 */ + 80163c8: eb02 080b add.w r8, r2, fp + tmp11 = MULTIPLY(z2, FIX(1.306562965)); /* c3 */ + 80163cc: fb00 f40e mul.w r4, r0, lr + tmp14 = MULTIPLY(z2, - FIX_0_541196100); /* -c9 */ + 80163d0: 4874 ldr r0, [pc, #464] ; (80165a4 ) + tmp15 = MULTIPLY(tmp10 + z4, FIX(0.860918669)); /* c7 */ + 80163d2: fb06 f808 mul.w r8, r6, r8 + tmp12 = tmp15 + MULTIPLY(tmp10, FIX(0.261052384)); /* c5-c7 */ + 80163d6: f640 065b movw r6, #2139 ; 0x85b + tmp14 = MULTIPLY(z2, - FIX_0_541196100); /* -c9 */ + 80163da: fb00 f00e mul.w r0, r0, lr + tmp12 = tmp15 + MULTIPLY(tmp10, FIX(0.261052384)); /* c5-c7 */ + 80163de: fb06 8b0b mla fp, r6, fp, r8 + tmp10 = tmp12 + tmp11 + MULTIPLY(z1, FIX(0.280143716)); /* c1-c5 */ + 80163e2: f640 06f7 movw r6, #2295 ; 0x8f7 + 80163e6: eb04 0a0b add.w sl, r4, fp + tmp13 += tmp15 - tmp11 + MULTIPLY(z4, FIX(1.586706681)); /* c1+c11 */ + 80163ea: eba8 0404 sub.w r4, r8, r4 + tmp10 = tmp12 + tmp11 + MULTIPLY(z1, FIX(0.280143716)); /* c1-c5 */ + 80163ee: fb06 a60c mla r6, r6, ip, sl + tmp13 = MULTIPLY(z3 + z4, - FIX(1.045510580)); /* -(c7+c11) */ + 80163f2: eb05 0a02 add.w sl, r5, r2 + tmp10 = tmp12 + tmp11 + MULTIPLY(z1, FIX(0.280143716)); /* c1-c5 */ + 80163f6: 9607 str r6, [sp, #28] + tmp13 = MULTIPLY(z3 + z4, - FIX(1.045510580)); /* -(c7+c11) */ + 80163f8: 4e6b ldr r6, [pc, #428] ; (80165a8 ) + 80163fa: fb06 fa0a mul.w sl, r6, sl + tmp12 += tmp13 + tmp14 - MULTIPLY(z3, FIX(1.478575242)); /* c1+c5-c7-c11 */ + 80163fe: eb00 060a add.w r6, r0, sl + 8016402: fb07 6605 mla r6, r7, r5, r6 + tmp15 += tmp14 - MULTIPLY(z1, FIX(0.676326758)) - /* c7-c11 */ + 8016406: 4f69 ldr r7, [pc, #420] ; (80165ac ) + MULTIPLY(z4, FIX(1.982889723)); /* c5+c7 */ + + z1 -= z4; + z2 -= z3; + 8016408: ebae 0505 sub.w r5, lr, r5 + z3 = MULTIPLY(z1 + z2, FIX_0_541196100); /* c9 */ + 801640c: f241 1e51 movw lr, #4433 ; 0x1151 + tmp12 += tmp13 + tmp14 - MULTIPLY(z3, FIX(1.478575242)); /* c1+c5-c7-c11 */ + 8016410: 445e add r6, fp + tmp15 += tmp14 - MULTIPLY(z1, FIX(0.676326758)) - /* c7-c11 */ + 8016412: fb07 000c mla r0, r7, ip, r0 + tmp13 += tmp15 - tmp11 + MULTIPLY(z4, FIX(1.586706681)); /* c1+c11 */ + 8016416: f243 2bc6 movw fp, #12998 ; 0x32c6 + tmp15 += tmp14 - MULTIPLY(z1, FIX(0.676326758)) - /* c7-c11 */ + 801641a: 4f65 ldr r7, [pc, #404] ; (80165b0 ) + tmp13 += tmp15 - tmp11 + MULTIPLY(z4, FIX(1.586706681)); /* c1+c11 */ + 801641c: fb0b 4402 mla r4, fp, r2, r4 + tmp15 += tmp14 - MULTIPLY(z1, FIX(0.676326758)) - /* c7-c11 */ + 8016420: fb07 0002 mla r0, r7, r2, r0 + z1 -= z4; + 8016424: ebac 0202 sub.w r2, ip, r2 + tmp13 += tmp15 - tmp11 + MULTIPLY(z4, FIX(1.586706681)); /* c1+c11 */ + 8016428: 4454 add r4, sl + z3 = MULTIPLY(z1 + z2, FIX_0_541196100); /* c9 */ + 801642a: eb02 0c05 add.w ip, r2, r5 + tmp15 += tmp14 - MULTIPLY(z1, FIX(0.676326758)) - /* c7-c11 */ + 801642e: 4440 add r0, r8 + z3 = MULTIPLY(z1 + z2, FIX_0_541196100); /* c9 */ + 8016430: fb0e fc0c mul.w ip, lr, ip + tmp11 = z3 + MULTIPLY(z1, FIX_0_765366865); /* c3-c9 */ + 8016434: f641 0e7e movw lr, #6270 ; 0x187e + 8016438: fb0e ce02 mla lr, lr, r2, ip + tmp14 = z3 - MULTIPLY(z2, FIX_1_847759065); /* c3+c9 */ + 801643c: 4a5d ldr r2, [pc, #372] ; (80165b4 ) + 801643e: fb02 cc05 mla ip, r2, r5, ip + + /* Final output stage */ + + wsptr[6*0] = (int) RIGHT_SHIFT(tmp20 + tmp10, CONST_BITS-PASS1_BITS); + 8016442: 9d03 ldr r5, [sp, #12] + 8016444: 9a07 ldr r2, [sp, #28] + 8016446: 442a add r2, r5 + 8016448: 12d2 asrs r2, r2, #11 + 801644a: f843 2c04 str.w r2, [r3, #-4] + wsptr[6*11] = (int) RIGHT_SHIFT(tmp20 - tmp10, CONST_BITS-PASS1_BITS); + 801644e: 9a07 ldr r2, [sp, #28] + 8016450: 1aaf subs r7, r5, r2 + wsptr[6*1] = (int) RIGHT_SHIFT(tmp21 + tmp11, CONST_BITS-PASS1_BITS); + 8016452: 9a01 ldr r2, [sp, #4] + 8016454: 4472 add r2, lr + wsptr[6*11] = (int) RIGHT_SHIFT(tmp20 - tmp10, CONST_BITS-PASS1_BITS); + 8016456: 12ff asrs r7, r7, #11 + wsptr[6*1] = (int) RIGHT_SHIFT(tmp21 + tmp11, CONST_BITS-PASS1_BITS); + 8016458: 12d2 asrs r2, r2, #11 + wsptr[6*11] = (int) RIGHT_SHIFT(tmp20 - tmp10, CONST_BITS-PASS1_BITS); + 801645a: f8c3 7104 str.w r7, [r3, #260] ; 0x104 + wsptr[6*1] = (int) RIGHT_SHIFT(tmp21 + tmp11, CONST_BITS-PASS1_BITS); + 801645e: 615a str r2, [r3, #20] + wsptr[6*10] = (int) RIGHT_SHIFT(tmp21 - tmp11, CONST_BITS-PASS1_BITS); + 8016460: 9a01 ldr r2, [sp, #4] + 8016462: eba2 020e sub.w r2, r2, lr + 8016466: 12d2 asrs r2, r2, #11 + 8016468: f8c3 20ec str.w r2, [r3, #236] ; 0xec + wsptr[6*2] = (int) RIGHT_SHIFT(tmp22 + tmp12, CONST_BITS-PASS1_BITS); + 801646c: 9a05 ldr r2, [sp, #20] + 801646e: 4432 add r2, r6 + 8016470: 12d2 asrs r2, r2, #11 + 8016472: 62da str r2, [r3, #44] ; 0x2c + wsptr[6*9] = (int) RIGHT_SHIFT(tmp22 - tmp12, CONST_BITS-PASS1_BITS); + 8016474: 9a05 ldr r2, [sp, #20] + 8016476: 1b92 subs r2, r2, r6 + 8016478: 12d2 asrs r2, r2, #11 + 801647a: f8c3 20d4 str.w r2, [r3, #212] ; 0xd4 + wsptr[6*3] = (int) RIGHT_SHIFT(tmp23 + tmp13, CONST_BITS-PASS1_BITS); + 801647e: 9a06 ldr r2, [sp, #24] + 8016480: 4422 add r2, r4 + 8016482: 12d2 asrs r2, r2, #11 + 8016484: 645a str r2, [r3, #68] ; 0x44 + wsptr[6*8] = (int) RIGHT_SHIFT(tmp23 - tmp13, CONST_BITS-PASS1_BITS); + 8016486: 9a06 ldr r2, [sp, #24] + 8016488: 1b12 subs r2, r2, r4 + 801648a: 12d2 asrs r2, r2, #11 + 801648c: f8c3 20bc str.w r2, [r3, #188] ; 0xbc + wsptr[6*4] = (int) RIGHT_SHIFT(tmp24 + tmp14, CONST_BITS-PASS1_BITS); + 8016490: 9a02 ldr r2, [sp, #8] + 8016492: 4462 add r2, ip + 8016494: 12d2 asrs r2, r2, #11 + 8016496: 65da str r2, [r3, #92] ; 0x5c + wsptr[6*7] = (int) RIGHT_SHIFT(tmp24 - tmp14, CONST_BITS-PASS1_BITS); + 8016498: 9a02 ldr r2, [sp, #8] + 801649a: eba2 020c sub.w r2, r2, ip + 801649e: 12d2 asrs r2, r2, #11 + 80164a0: f8c3 20a4 str.w r2, [r3, #164] ; 0xa4 + wsptr[6*5] = (int) RIGHT_SHIFT(tmp25 + tmp15, CONST_BITS-PASS1_BITS); + 80164a4: 9a04 ldr r2, [sp, #16] + 80164a6: 4402 add r2, r0 + 80164a8: 12d2 asrs r2, r2, #11 + 80164aa: 675a str r2, [r3, #116] ; 0x74 + wsptr[6*6] = (int) RIGHT_SHIFT(tmp25 - tmp15, CONST_BITS-PASS1_BITS); + 80164ac: 9a04 ldr r2, [sp, #16] + 80164ae: 1a12 subs r2, r2, r0 + 80164b0: 12d2 asrs r2, r2, #11 + 80164b2: f8c3 208c str.w r2, [r3, #140] ; 0x8c + for (ctr = 0; ctr < 6; ctr++, inptr++, quantptr++, wsptr++) { + 80164b6: 9a09 ldr r2, [sp, #36] ; 0x24 + 80164b8: 454a cmp r2, r9 + 80164ba: f47f af31 bne.w 8016320 + 80164be: 9b08 ldr r3, [sp, #32] + } + + /* Pass 2: process 12 rows from work array, store into output array. + * 6-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/12). + */ + wsptr = workspace; + 80164c0: a90a add r1, sp, #40 ; 0x28 + + /* Add fudge factor here for final descale. */ + tmp10 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + tmp10 <<= CONST_BITS; + tmp12 = (INT32) wsptr[4]; + tmp20 = MULTIPLY(tmp12, FIX(0.707106781)); /* c4 */ + 80164c2: f241 6ba1 movw fp, #5793 ; 0x16a1 + 80164c6: f1a3 0c04 sub.w ip, r3, #4 + 80164ca: f103 082c add.w r8, r3, #44 ; 0x2c + outptr = output_buf[ctr] + output_col; + 80164ce: f85c 9f04 ldr.w r9, [ip, #4]! + tmp11 = tmp10 + tmp20; + tmp21 = tmp10 - tmp20 - tmp20; + tmp20 = (INT32) wsptr[2]; + tmp10 = MULTIPLY(tmp20, FIX(1.224744871)); /* c2 */ + 80164d2: f242 7431 movw r4, #10033 ; 0x2731 + outptr = output_buf[ctr] + output_col; + 80164d6: 9b5c ldr r3, [sp, #368] ; 0x170 + /* Odd part */ + + z1 = (INT32) wsptr[1]; + z2 = (INT32) wsptr[3]; + z3 = (INT32) wsptr[5]; + tmp11 = MULTIPLY(z1 + z3, FIX(0.366025404)); /* c5 */ + 80164d8: f640 37b6 movw r7, #2998 ; 0xbb6 + tmp20 = MULTIPLY(tmp12, FIX(0.707106781)); /* c4 */ + 80164dc: 690a ldr r2, [r1, #16] + for (ctr = 0; ctr < 12; ctr++) { + 80164de: 45e0 cmp r8, ip + outptr = output_buf[ctr] + output_col; + 80164e0: eb09 0603 add.w r6, r9, r3 + tmp10 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + 80164e4: 680b ldr r3, [r1, #0] + tmp20 = MULTIPLY(tmp12, FIX(0.707106781)); /* c4 */ + 80164e6: fb0b f002 mul.w r0, fp, r2 + z3 = (INT32) wsptr[5]; + 80164ea: f8d1 e014 ldr.w lr, [r1, #20] + tmp10 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + 80164ee: f103 0310 add.w r3, r3, #16 + & RANGE_MASK]; + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp12, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + + wsptr += 6; /* advance pointer to next row */ + 80164f2: f101 0118 add.w r1, r1, #24 + tmp11 = tmp10 + tmp20; + 80164f6: eb00 3243 add.w r2, r0, r3, lsl #13 + tmp21 = tmp10 - tmp20 - tmp20; + 80164fa: ebc0 3343 rsb r3, r0, r3, lsl #13 + 80164fe: eba3 0300 sub.w r3, r3, r0 + tmp10 = MULTIPLY(tmp20, FIX(1.224744871)); /* c2 */ + 8016502: f851 0c10 ldr.w r0, [r1, #-16] + 8016506: fb04 f000 mul.w r0, r4, r0 + tmp21 = tmp10 - tmp20 - tmp20; + 801650a: 9301 str r3, [sp, #4] + tmp20 = tmp11 + tmp10; + 801650c: eb02 0500 add.w r5, r2, r0 + tmp22 = tmp11 - tmp10; + 8016510: eba2 0200 sub.w r2, r2, r0 + z1 = (INT32) wsptr[1]; + 8016514: f851 0c14 ldr.w r0, [r1, #-20] + tmp12 = tmp11 + ((z3 - z2) << CONST_BITS); + 8016518: f851 3c0c ldr.w r3, [r1, #-12] + tmp11 = MULTIPLY(z1 + z3, FIX(0.366025404)); /* c5 */ + 801651c: eb00 040e add.w r4, r0, lr + tmp12 = tmp11 + ((z3 - z2) << CONST_BITS); + 8016520: ebae 0a03 sub.w sl, lr, r3 + tmp11 = MULTIPLY(z1 + z3, FIX(0.366025404)); /* c5 */ + 8016524: fb07 f404 mul.w r4, r7, r4 + tmp10 = tmp11 + ((z1 + z2) << CONST_BITS); + 8016528: f851 7c0c ldr.w r7, [r1, #-12] + 801652c: 4407 add r7, r0 + tmp11 = (z1 - z2 - z3) << CONST_BITS; + 801652e: eba0 0003 sub.w r0, r0, r3 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp10, + 8016532: 9b00 ldr r3, [sp, #0] + tmp10 = tmp11 + ((z1 + z2) << CONST_BITS); + 8016534: eb04 3747 add.w r7, r4, r7, lsl #13 + tmp11 = (z1 - z2 - z3) << CONST_BITS; + 8016538: eba0 000e sub.w r0, r0, lr + tmp12 = tmp11 + ((z3 - z2) << CONST_BITS); + 801653c: eb04 344a add.w r4, r4, sl, lsl #13 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp10, + 8016540: eb05 0e07 add.w lr, r5, r7 + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp20 - tmp10, + 8016544: eba5 0507 sub.w r5, r5, r7 + & RANGE_MASK]; + 8016548: f3ce 4e89 ubfx lr, lr, #18, #10 + & RANGE_MASK]; + 801654c: f3c5 4589 ubfx r5, r5, #18, #10 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp10, + 8016550: f813 e00e ldrb.w lr, [r3, lr] + 8016554: 9b5c ldr r3, [sp, #368] ; 0x170 + 8016556: f809 e003 strb.w lr, [r9, r3] + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp20 - tmp10, + 801655a: 9b00 ldr r3, [sp, #0] + 801655c: 5d5d ldrb r5, [r3, r5] + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp11, + 801655e: 9b01 ldr r3, [sp, #4] + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp20 - tmp10, + 8016560: 7175 strb r5, [r6, #5] + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp11, + 8016562: eb03 3540 add.w r5, r3, r0, lsl #13 + 8016566: 9b00 ldr r3, [sp, #0] + & RANGE_MASK]; + 8016568: f3c5 4589 ubfx r5, r5, #18, #10 + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp11, + 801656c: 5d5d ldrb r5, [r3, r5] + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp11, + 801656e: 9b01 ldr r3, [sp, #4] + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp11, + 8016570: 7075 strb r5, [r6, #1] + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp11, + 8016572: eba3 3340 sub.w r3, r3, r0, lsl #13 + 8016576: 9800 ldr r0, [sp, #0] + & RANGE_MASK]; + 8016578: f3c3 4389 ubfx r3, r3, #18, #10 + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp11, + 801657c: 5cc3 ldrb r3, [r0, r3] + 801657e: 7133 strb r3, [r6, #4] + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp12, + 8016580: eb02 0304 add.w r3, r2, r4 + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp12, + 8016584: eba2 0204 sub.w r2, r2, r4 + & RANGE_MASK]; + 8016588: f3c3 4389 ubfx r3, r3, #18, #10 + & RANGE_MASK]; + 801658c: f3c2 4289 ubfx r2, r2, #18, #10 + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp12, + 8016590: 5cc3 ldrb r3, [r0, r3] + 8016592: 70b3 strb r3, [r6, #2] + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp12, + 8016594: 5c83 ldrb r3, [r0, r2] + 8016596: 70f3 strb r3, [r6, #3] + for (ctr = 0; ctr < 12; ctr++) { + 8016598: d199 bne.n 80164ce + } +} + 801659a: b053 add sp, #332 ; 0x14c + 801659c: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 80165a0: ffffd0b0 .word 0xffffd0b0 + 80165a4: ffffeeaf .word 0xffffeeaf + 80165a8: ffffde8b .word 0xffffde8b + 80165ac: ffffea5c .word 0xffffea5c + 80165b0: ffffc08c .word 0xffffc08c + 80165b4: ffffc4df .word 0xffffc4df + +080165b8 : + +GLOBAL(void) +jpeg_idct_5x10 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + 80165b8: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 80165bc: b0b9 sub sp, #228 ; 0xe4 + 80165be: 1e94 subs r4, r2, #2 + 80165c0: 9303 str r3, [sp, #12] + INT32 z1, z2, z3, z4, z5; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + int * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + 80165c2: f8d0 314c ldr.w r3, [r0, #332] ; 0x14c + 80165c6: 6d48 ldr r0, [r1, #84] ; 0x54 + /* Pass 1: process columns from input, store into work array. + * 10-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/20). + */ + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + 80165c8: a906 add r1, sp, #24 + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + 80165ca: 3380 adds r3, #128 ; 0x80 + 80165cc: 3804 subs r0, #4 + 80165ce: 9300 str r3, [sp, #0] + for (ctr = 0; ctr < 5; ctr++, inptr++, quantptr++, wsptr++) { + 80165d0: f102 0308 add.w r3, r2, #8 + 80165d4: 9305 str r3, [sp, #20] + /* Even part */ + + z3 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 80165d6: f934 6f02 ldrsh.w r6, [r4, #2]! + for (ctr = 0; ctr < 5; ctr++, inptr++, quantptr++, wsptr++) { + 80165da: 3104 adds r1, #4 + z3 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 80165dc: f850 3f04 ldr.w r3, [r0, #4]! + z3 <<= CONST_BITS; + /* Add fudge factor here for final descale. */ + z3 += ONE << (CONST_BITS-PASS1_BITS-1); + z4 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + 80165e0: f9b4 2040 ldrsh.w r2, [r4, #64] ; 0x40 + z3 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 80165e4: 435e muls r6, r3 + z4 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + 80165e6: f8d0 3080 ldr.w r3, [r0, #128] ; 0x80 + 80165ea: 4353 muls r3, r2 + z1 = MULTIPLY(z4, FIX(1.144122806)); /* c4 */ + 80165ec: f242 429d movw r2, #9373 ; 0x249d + z3 <<= CONST_BITS; + 80165f0: 0376 lsls r6, r6, #13 + z1 = MULTIPLY(z4, FIX(1.144122806)); /* c4 */ + 80165f2: fb02 f703 mul.w r7, r2, r3 + z2 = MULTIPLY(z4, FIX(0.437016024)); /* c8 */ + 80165f6: f640 52fc movw r2, #3580 ; 0xdfc + z3 += ONE << (CONST_BITS-PASS1_BITS-1); + 80165fa: f506 6680 add.w r6, r6, #1024 ; 0x400 + z2 = MULTIPLY(z4, FIX(0.437016024)); /* c8 */ + 80165fe: 4353 muls r3, r2 + CONST_BITS-PASS1_BITS); + + z2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + z3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + + z1 = MULTIPLY(z2 + z3, FIX(0.831253876)); /* c6 */ + 8016600: f641 229a movw r2, #6810 ; 0x1a9a + tmp10 = z3 + z1; + 8016604: 19f5 adds r5, r6, r7 + tmp22 = RIGHT_SHIFT(z3 - ((z1 - z2) << 1), /* c0 = (c4-c8)*2 */ + 8016606: 1aff subs r7, r7, r3 + tmp11 = z3 - z2; + 8016608: eba6 0e03 sub.w lr, r6, r3 + tmp22 = RIGHT_SHIFT(z3 - ((z1 - z2) << 1), /* c0 = (c4-c8)*2 */ + 801660c: eba6 0347 sub.w r3, r6, r7, lsl #1 + z2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + 8016610: f9b4 6020 ldrsh.w r6, [r4, #32] + z3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + 8016614: f9b4 7060 ldrsh.w r7, [r4, #96] ; 0x60 + tmp22 = RIGHT_SHIFT(z3 - ((z1 - z2) << 1), /* c0 = (c4-c8)*2 */ + 8016618: 9304 str r3, [sp, #16] + z2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + 801661a: 6c03 ldr r3, [r0, #64] ; 0x40 + 801661c: 435e muls r6, r3 + z3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + 801661e: f8d0 30c0 ldr.w r3, [r0, #192] ; 0xc0 + 8016622: 435f muls r7, r3 + z1 = MULTIPLY(z2 + z3, FIX(0.831253876)); /* c6 */ + 8016624: 19f3 adds r3, r6, r7 + 8016626: 4353 muls r3, r2 + tmp12 = z1 + MULTIPLY(z2, FIX(0.513743148)); /* c2-c6 */ + 8016628: f241 0271 movw r2, #4209 ; 0x1071 + 801662c: fb02 3606 mla r6, r2, r6, r3 + tmp13 = z1 - MULTIPLY(z3, FIX(2.176250899)); /* c2+c6 */ + 8016630: 4a6e ldr r2, [pc, #440] ; (80167ec ) + 8016632: fb02 3307 mla r3, r2, r7, r3 + + tmp20 = tmp10 + tmp12; + tmp24 = tmp10 - tmp12; + 8016636: 1baa subs r2, r5, r6 + tmp20 = tmp10 + tmp12; + 8016638: eb05 0c06 add.w ip, r5, r6 + tmp23 = tmp11 - tmp13; + + /* Odd part */ + + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + 801663c: 6e05 ldr r5, [r0, #96] ; 0x60 + tmp21 = tmp11 + tmp13; + 801663e: eb0e 0703 add.w r7, lr, r3 + tmp23 = tmp11 - tmp13; + 8016642: ebae 0303 sub.w r3, lr, r3 + tmp24 = tmp10 - tmp12; + 8016646: 9201 str r2, [sp, #4] + tmp23 = tmp11 - tmp13; + 8016648: 9302 str r3, [sp, #8] + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 801664a: f9b4 2010 ldrsh.w r2, [r4, #16] + 801664e: 6a03 ldr r3, [r0, #32] + z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + 8016650: f9b4 e050 ldrsh.w lr, [r4, #80] ; 0x50 + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 8016654: 435a muls r2, r3 + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + 8016656: f9b4 3030 ldrsh.w r3, [r4, #48] ; 0x30 + z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + 801665a: f9b4 6070 ldrsh.w r6, [r4, #112] ; 0x70 + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + 801665e: 436b muls r3, r5 + z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + 8016660: f8d0 50a0 ldr.w r5, [r0, #160] ; 0xa0 + 8016664: fb05 fe0e mul.w lr, r5, lr + z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + 8016668: f8d0 50e0 ldr.w r5, [r0, #224] ; 0xe0 + 801666c: 4375 muls r5, r6 + tmp13 = z2 - z4; + + tmp12 = MULTIPLY(tmp13, FIX(0.309016994)); /* (c3-c7)/2 */ + z5 = z3 << CONST_BITS; + + z2 = MULTIPLY(tmp11, FIX(0.951056516)); /* (c3+c7)/2 */ + 801666e: f641 666f movw r6, #7791 ; 0x1e6f + tmp11 = z2 + z4; + 8016672: eb03 0905 add.w r9, r3, r5 + tmp13 = z2 - z4; + 8016676: 1b5b subs r3, r3, r5 + tmp12 = MULTIPLY(tmp13, FIX(0.309016994)); /* (c3-c7)/2 */ + 8016678: f640 15e3 movw r5, #2531 ; 0x9e3 + z2 = MULTIPLY(tmp11, FIX(0.951056516)); /* (c3+c7)/2 */ + 801667c: fb06 fb09 mul.w fp, r6, r9 + z4 = z5 + tmp12; + + tmp10 = MULTIPLY(z1, FIX(1.396802247)) + z2 + z4; /* c1 */ + 8016680: f642 46b3 movw r6, #11443 ; 0x2cb3 + tmp12 = MULTIPLY(tmp13, FIX(0.309016994)); /* (c3-c7)/2 */ + 8016684: 435d muls r5, r3 + tmp10 = MULTIPLY(z1, FIX(1.396802247)) + z2 + z4; /* c1 */ + 8016686: fb06 b802 mla r8, r6, r2, fp + tmp14 = MULTIPLY(z1, FIX(0.221231742)) - z2 + z4; /* c9 */ + 801668a: f240 7614 movw r6, #1812 ; 0x714 + z4 = z5 + tmp12; + 801668e: eb05 3a4e add.w sl, r5, lr, lsl #13 + tmp14 = MULTIPLY(z1, FIX(0.221231742)) - z2 + z4; /* c9 */ + 8016692: 4356 muls r6, r2 + + z2 = MULTIPLY(tmp11, FIX(0.587785252)); /* (c1-c9)/2 */ + z4 = z5 - tmp12 - (tmp13 << (CONST_BITS - 1)); + 8016694: ebc5 354e rsb r5, r5, lr, lsl #13 + tmp10 = MULTIPLY(z1, FIX(1.396802247)) + z2 + z4; /* c1 */ + 8016698: 44d0 add r8, sl + tmp14 = MULTIPLY(z1, FIX(0.221231742)) - z2 + z4; /* c9 */ + 801669a: eba6 060b sub.w r6, r6, fp + z4 = z5 - tmp12 - (tmp13 << (CONST_BITS - 1)); + 801669e: eba5 3503 sub.w r5, r5, r3, lsl #12 + + tmp12 = (z1 - tmp13 - z3) << PASS1_BITS; + 80166a2: 1ad3 subs r3, r2, r3 + tmp14 = MULTIPLY(z1, FIX(0.221231742)) - z2 + z4; /* c9 */ + 80166a4: 4456 add r6, sl + z2 = MULTIPLY(tmp11, FIX(0.587785252)); /* (c1-c9)/2 */ + 80166a6: f241 2acf movw sl, #4815 ; 0x12cf + tmp12 = (z1 - tmp13 - z3) << PASS1_BITS; + 80166aa: eba3 030e sub.w r3, r3, lr + + tmp11 = MULTIPLY(z1, FIX(1.260073511)) - z2 - z4; /* c3 */ + 80166ae: f642 0e53 movw lr, #10323 ; 0x2853 + z2 = MULTIPLY(tmp11, FIX(0.587785252)); /* (c1-c9)/2 */ + 80166b2: fb0a f909 mul.w r9, sl, r9 + tmp13 = MULTIPLY(z1, FIX(0.642039522)) - z2 + z4; /* c7 */ + 80166b6: f241 4a8c movw sl, #5260 ; 0x148c + tmp11 = MULTIPLY(z1, FIX(1.260073511)) - z2 - z4; /* c3 */ + 80166ba: fb0e fe02 mul.w lr, lr, r2 + tmp12 = (z1 - tmp13 - z3) << PASS1_BITS; + 80166be: 009b lsls r3, r3, #2 + tmp13 = MULTIPLY(z1, FIX(0.642039522)) - z2 + z4; /* c7 */ + 80166c0: fb0a f202 mul.w r2, sl, r2 + tmp11 = MULTIPLY(z1, FIX(1.260073511)) - z2 - z4; /* c3 */ + 80166c4: ebae 0e09 sub.w lr, lr, r9 + tmp13 = MULTIPLY(z1, FIX(0.642039522)) - z2 + z4; /* c7 */ + 80166c8: eba2 0209 sub.w r2, r2, r9 + tmp11 = MULTIPLY(z1, FIX(1.260073511)) - z2 - z4; /* c3 */ + 80166cc: ebae 0e05 sub.w lr, lr, r5 + tmp13 = MULTIPLY(z1, FIX(0.642039522)) - z2 + z4; /* c7 */ + 80166d0: 442a add r2, r5 + + /* Final output stage */ + + wsptr[5*0] = (int) RIGHT_SHIFT(tmp20 + tmp10, CONST_BITS-PASS1_BITS); + 80166d2: eb0c 0508 add.w r5, ip, r8 + wsptr[5*9] = (int) RIGHT_SHIFT(tmp20 - tmp10, CONST_BITS-PASS1_BITS); + 80166d6: ebac 0c08 sub.w ip, ip, r8 + wsptr[5*0] = (int) RIGHT_SHIFT(tmp20 + tmp10, CONST_BITS-PASS1_BITS); + 80166da: 12ed asrs r5, r5, #11 + 80166dc: f841 5c04 str.w r5, [r1, #-4] + wsptr[5*9] = (int) RIGHT_SHIFT(tmp20 - tmp10, CONST_BITS-PASS1_BITS); + 80166e0: ea4f 25ec mov.w r5, ip, asr #11 + 80166e4: f8c1 50b0 str.w r5, [r1, #176] ; 0xb0 + wsptr[5*1] = (int) RIGHT_SHIFT(tmp21 + tmp11, CONST_BITS-PASS1_BITS); + 80166e8: eb07 050e add.w r5, r7, lr + wsptr[5*8] = (int) RIGHT_SHIFT(tmp21 - tmp11, CONST_BITS-PASS1_BITS); + 80166ec: eba7 070e sub.w r7, r7, lr + wsptr[5*1] = (int) RIGHT_SHIFT(tmp21 + tmp11, CONST_BITS-PASS1_BITS); + 80166f0: 12ed asrs r5, r5, #11 + wsptr[5*8] = (int) RIGHT_SHIFT(tmp21 - tmp11, CONST_BITS-PASS1_BITS); + 80166f2: 12ff asrs r7, r7, #11 + wsptr[5*1] = (int) RIGHT_SHIFT(tmp21 + tmp11, CONST_BITS-PASS1_BITS); + 80166f4: 610d str r5, [r1, #16] + wsptr[5*2] = (int) (tmp22 + tmp12); + 80166f6: 9d04 ldr r5, [sp, #16] + wsptr[5*8] = (int) RIGHT_SHIFT(tmp21 - tmp11, CONST_BITS-PASS1_BITS); + 80166f8: f8c1 709c str.w r7, [r1, #156] ; 0x9c + wsptr[5*2] = (int) (tmp22 + tmp12); + 80166fc: eb03 25e5 add.w r5, r3, r5, asr #11 + 8016700: 624d str r5, [r1, #36] ; 0x24 + wsptr[5*7] = (int) (tmp22 - tmp12); + 8016702: 9d04 ldr r5, [sp, #16] + 8016704: ebc3 23e5 rsb r3, r3, r5, asr #11 + 8016708: f8c1 3088 str.w r3, [r1, #136] ; 0x88 + wsptr[5*3] = (int) RIGHT_SHIFT(tmp23 + tmp13, CONST_BITS-PASS1_BITS); + 801670c: 9b02 ldr r3, [sp, #8] + 801670e: 4413 add r3, r2 + 8016710: 12db asrs r3, r3, #11 + 8016712: 638b str r3, [r1, #56] ; 0x38 + wsptr[5*6] = (int) RIGHT_SHIFT(tmp23 - tmp13, CONST_BITS-PASS1_BITS); + 8016714: 9b02 ldr r3, [sp, #8] + 8016716: 1a9b subs r3, r3, r2 + 8016718: 12db asrs r3, r3, #11 + 801671a: 674b str r3, [r1, #116] ; 0x74 + wsptr[5*4] = (int) RIGHT_SHIFT(tmp24 + tmp14, CONST_BITS-PASS1_BITS); + 801671c: 9b01 ldr r3, [sp, #4] + 801671e: 4433 add r3, r6 + 8016720: 12db asrs r3, r3, #11 + 8016722: 64cb str r3, [r1, #76] ; 0x4c + wsptr[5*5] = (int) RIGHT_SHIFT(tmp24 - tmp14, CONST_BITS-PASS1_BITS); + 8016724: 9b01 ldr r3, [sp, #4] + 8016726: 1b9b subs r3, r3, r6 + 8016728: 12db asrs r3, r3, #11 + 801672a: 660b str r3, [r1, #96] ; 0x60 + for (ctr = 0; ctr < 5; ctr++, inptr++, quantptr++, wsptr++) { + 801672c: 9b05 ldr r3, [sp, #20] + 801672e: 42a3 cmp r3, r4 + 8016730: f47f af51 bne.w 80165d6 + 8016734: 9b03 ldr r3, [sp, #12] + } + + /* Pass 2: process 10 rows from work array, store into output array. + * 5-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/10). + */ + wsptr = workspace; + 8016736: a906 add r1, sp, #24 + /* Add fudge factor here for final descale. */ + tmp12 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + tmp12 <<= CONST_BITS; + tmp13 = (INT32) wsptr[2]; + tmp14 = (INT32) wsptr[4]; + z1 = MULTIPLY(tmp13 + tmp14, FIX(0.790569415)); /* (c2+c4)/2 */ + 8016738: f641 1a4c movw sl, #6476 ; 0x194c + z2 = MULTIPLY(tmp13 - tmp14, FIX(0.353553391)); /* (c2-c4)/2 */ + 801673c: f44f 6935 mov.w r9, #2896 ; 0xb50 + 8016740: f1a3 0c04 sub.w ip, r3, #4 + /* Odd part */ + + z2 = (INT32) wsptr[1]; + z3 = (INT32) wsptr[3]; + + z1 = MULTIPLY(z2 + z3, FIX(0.831253876)); /* c3 */ + 8016744: f641 289a movw r8, #6810 ; 0x1a9a + 8016748: 3324 adds r3, #36 ; 0x24 + 801674a: 9302 str r3, [sp, #8] + outptr = output_buf[ctr] + output_col; + 801674c: f85c ef04 ldr.w lr, [ip, #4]! + & RANGE_MASK]; + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp12, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + + wsptr += 5; /* advance pointer to next row */ + 8016750: 3114 adds r1, #20 + outptr = output_buf[ctr] + output_col; + 8016752: 9b42 ldr r3, [sp, #264] ; 0x108 + tmp14 = (INT32) wsptr[4]; + 8016754: f851 2c04 ldr.w r2, [r1, #-4] + outptr = output_buf[ctr] + output_col; + 8016758: eb0e 0603 add.w r6, lr, r3 + tmp13 = (INT32) wsptr[2]; + 801675c: f851 3c0c ldr.w r3, [r1, #-12] + tmp12 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + 8016760: f851 7c14 ldr.w r7, [r1, #-20] + z1 = MULTIPLY(tmp13 + tmp14, FIX(0.790569415)); /* (c2+c4)/2 */ + 8016764: 1898 adds r0, r3, r2 + z2 = MULTIPLY(tmp13 - tmp14, FIX(0.353553391)); /* (c2-c4)/2 */ + 8016766: 1a9b subs r3, r3, r2 + tmp12 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + 8016768: 3710 adds r7, #16 + z3 = (INT32) wsptr[3]; + 801676a: f851 bc08 ldr.w fp, [r1, #-8] + z2 = MULTIPLY(tmp13 - tmp14, FIX(0.353553391)); /* (c2-c4)/2 */ + 801676e: fb09 f303 mul.w r3, r9, r3 + z2 = (INT32) wsptr[1]; + 8016772: f851 5c10 ldr.w r5, [r1, #-16] + z1 = MULTIPLY(tmp13 + tmp14, FIX(0.790569415)); /* (c2+c4)/2 */ + 8016776: fb0a f000 mul.w r0, sl, r0 + z3 = tmp12 + z2; + 801677a: eb03 3247 add.w r2, r3, r7, lsl #13 + z2 = MULTIPLY(tmp13 - tmp14, FIX(0.353553391)); /* (c2-c4)/2 */ + 801677e: 9301 str r3, [sp, #4] + tmp13 = z1 + MULTIPLY(z2, FIX(0.513743148)); /* c1-c3 */ + 8016780: f241 0371 movw r3, #4209 ; 0x1071 + tmp10 = z3 + z1; + 8016784: 1884 adds r4, r0, r2 + tmp11 = z3 - z1; + 8016786: 1a12 subs r2, r2, r0 + z1 = MULTIPLY(z2 + z3, FIX(0.831253876)); /* c3 */ + 8016788: eb05 000b add.w r0, r5, fp + 801678c: fb08 f000 mul.w r0, r8, r0 + tmp13 = z1 + MULTIPLY(z2, FIX(0.513743148)); /* c1-c3 */ + 8016790: fb03 0505 mla r5, r3, r5, r0 + tmp14 = z1 - MULTIPLY(z3, FIX(2.176250899)); /* c1+c3 */ + 8016794: 4b15 ldr r3, [pc, #84] ; (80167ec ) + 8016796: fb03 000b mla r0, r3, fp, r0 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp13, + 801679a: eb04 0b05 add.w fp, r4, r5 + 801679e: 9b00 ldr r3, [sp, #0] + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp13, + 80167a0: 1b64 subs r4, r4, r5 + & RANGE_MASK]; + 80167a2: f3cb 4b89 ubfx fp, fp, #18, #10 + & RANGE_MASK]; + 80167a6: f3c4 4489 ubfx r4, r4, #18, #10 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp13, + 80167aa: f813 b00b ldrb.w fp, [r3, fp] + 80167ae: 9b42 ldr r3, [sp, #264] ; 0x108 + 80167b0: f80e b003 strb.w fp, [lr, r3] + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp13, + 80167b4: 9b00 ldr r3, [sp, #0] + 80167b6: 5d1c ldrb r4, [r3, r4] + 80167b8: 7134 strb r4, [r6, #4] + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp11 + tmp14, + 80167ba: 1814 adds r4, r2, r0 + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp11 - tmp14, + 80167bc: 1a12 subs r2, r2, r0 + & RANGE_MASK]; + 80167be: f3c4 4489 ubfx r4, r4, #18, #10 + & RANGE_MASK]; + 80167c2: f3c2 4289 ubfx r2, r2, #18, #10 + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp11 + tmp14, + 80167c6: 5d1c ldrb r4, [r3, r4] + 80167c8: 7074 strb r4, [r6, #1] + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp11 - tmp14, + 80167ca: 5c9a ldrb r2, [r3, r2] + tmp12 -= z2 << 2; + 80167cc: 9b01 ldr r3, [sp, #4] + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp11 - tmp14, + 80167ce: 70f2 strb r2, [r6, #3] + tmp12 -= z2 << 2; + 80167d0: 009b lsls r3, r3, #2 + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp12, + 80167d2: 9a00 ldr r2, [sp, #0] + tmp12 -= z2 << 2; + 80167d4: ebc3 3347 rsb r3, r3, r7, lsl #13 + & RANGE_MASK]; + 80167d8: f3c3 4389 ubfx r3, r3, #18, #10 + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp12, + 80167dc: 5cd3 ldrb r3, [r2, r3] + 80167de: 70b3 strb r3, [r6, #2] + for (ctr = 0; ctr < 10; ctr++) { + 80167e0: 9b02 ldr r3, [sp, #8] + 80167e2: 4563 cmp r3, ip + 80167e4: d1b2 bne.n 801674c + } +} + 80167e6: b039 add sp, #228 ; 0xe4 + 80167e8: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 80167ec: ffffba5c .word 0xffffba5c + +080167f0 : + +GLOBAL(void) +jpeg_idct_4x8 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + 80167f0: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 80167f4: b0a7 sub sp, #156 ; 0x9c + /* Pass 1: process columns from input, store into work array. */ + /* Note results are scaled up by sqrt(8) compared to a true IDCT; */ + /* furthermore, we scale the results by 2**PASS1_BITS. */ + + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + 80167f6: 6d4d ldr r5, [r1, #84] ; 0x54 +{ + 80167f8: 9304 str r3, [sp, #16] + wsptr = workspace; + 80167fa: a906 add r1, sp, #24 + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + 80167fc: f8d0 314c ldr.w r3, [r0, #332] ; 0x14c + 8016800: 3380 adds r3, #128 ; 0x80 + 8016802: 9302 str r3, [sp, #8] + for (ctr = 4; ctr > 0; ctr--) { + 8016804: 1e93 subs r3, r2, #2 + 8016806: 9301 str r3, [sp, #4] + 8016808: f105 0310 add.w r3, r5, #16 + 801680c: 9305 str r3, [sp, #20] + * DC coefficient (with scale factor as needed). + * With typical images and quantization tables, half or more of the + * column DCT calculations can be simplified this way. + */ + + if (inptr[DCTSIZE*1] == 0 && inptr[DCTSIZE*2] == 0 && + 801680e: 9b01 ldr r3, [sp, #4] + wsptr[4*6] = dcval; + wsptr[4*7] = dcval; + + inptr++; /* advance pointers to next column */ + quantptr++; + wsptr++; + 8016810: 3104 adds r1, #4 + int dcval = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]) << PASS1_BITS; + 8016812: f855 0b04 ldr.w r0, [r5], #4 + 8016816: 461a mov r2, r3 + if (inptr[DCTSIZE*1] == 0 && inptr[DCTSIZE*2] == 0 && + 8016818: f9b3 a012 ldrsh.w sl, [r3, #18] + 801681c: f9b3 7022 ldrsh.w r7, [r3, #34] ; 0x22 + inptr[DCTSIZE*3] == 0 && inptr[DCTSIZE*4] == 0 && + 8016820: f9b3 e032 ldrsh.w lr, [r3, #50] ; 0x32 + 8016824: f9b3 6042 ldrsh.w r6, [r3, #66] ; 0x42 + inptr[DCTSIZE*5] == 0 && inptr[DCTSIZE*6] == 0 && + 8016828: f9b3 8052 ldrsh.w r8, [r3, #82] ; 0x52 + 801682c: f9b3 4062 ldrsh.w r4, [r3, #98] ; 0x62 + inptr[DCTSIZE*7] == 0) { + 8016830: f9b3 9072 ldrsh.w r9, [r3, #114] ; 0x72 + int dcval = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]) << PASS1_BITS; + 8016834: f932 3f02 ldrsh.w r3, [r2, #2]! + 8016838: 4343 muls r3, r0 + inptr[DCTSIZE*5] == 0 && inptr[DCTSIZE*6] == 0 && + 801683a: ea4a 0007 orr.w r0, sl, r7 + int dcval = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]) << PASS1_BITS; + 801683e: 9201 str r2, [sp, #4] + inptr[DCTSIZE*5] == 0 && inptr[DCTSIZE*6] == 0 && + 8016840: ea4e 0000 orr.w r0, lr, r0 + 8016844: 4330 orrs r0, r6 + 8016846: ea48 0000 orr.w r0, r8, r0 + 801684a: 4320 orrs r0, r4 + 801684c: ea59 0000 orrs.w r0, r9, r0 + 8016850: d155 bne.n 80168fe + int dcval = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]) << PASS1_BITS; + 8016852: 009b lsls r3, r3, #2 + wsptr[4*0] = dcval; + 8016854: f841 3c04 str.w r3, [r1, #-4] + wsptr[4*1] = dcval; + 8016858: 60cb str r3, [r1, #12] + wsptr[4*2] = dcval; + 801685a: 61cb str r3, [r1, #28] + wsptr[4*3] = dcval; + 801685c: 62cb str r3, [r1, #44] ; 0x2c + wsptr[4*4] = dcval; + 801685e: 63cb str r3, [r1, #60] ; 0x3c + wsptr[4*5] = dcval; + 8016860: 64cb str r3, [r1, #76] ; 0x4c + wsptr[4*6] = dcval; + 8016862: 65cb str r3, [r1, #92] ; 0x5c + wsptr[4*7] = dcval; + 8016864: 66cb str r3, [r1, #108] ; 0x6c + for (ctr = 4; ctr > 0; ctr--) { + 8016866: 9b05 ldr r3, [sp, #20] + 8016868: 42ab cmp r3, r5 + 801686a: d1d0 bne.n 801680e + 801686c: 9b04 ldr r3, [sp, #16] + } + + /* Pass 2: process 8 rows from work array, store into output array. + * 4-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/16). + */ + wsptr = workspace; + 801686e: a806 add r0, sp, #24 + /* Same rotation as in the even part of the 8x8 LL&M IDCT */ + + z2 = (INT32) wsptr[1]; + z3 = (INT32) wsptr[3]; + + z1 = MULTIPLY(z2 + z3, FIX_0_541196100); /* c6 */ + 8016870: f241 1851 movw r8, #4433 ; 0x1151 + tmp0 = z1 + MULTIPLY(z2, FIX_0_765366865); /* c2-c6 */ + 8016874: f641 0e7e movw lr, #6270 ; 0x187e + 8016878: 1f1c subs r4, r3, #4 + 801687a: f103 0b1c add.w fp, r3, #28 + tmp2 = z1 - MULTIPLY(z3, FIX_1_847759065); /* c2+c6 */ + 801687e: f8df c174 ldr.w ip, [pc, #372] ; 80169f4 + outptr = output_buf[ctr] + output_col; + 8016882: f854 6f04 ldr.w r6, [r4, #4]! + & RANGE_MASK]; + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp12 - tmp2, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + + wsptr += 4; /* advance pointer to next row */ + 8016886: 3010 adds r0, #16 + outptr = output_buf[ctr] + output_col; + 8016888: 9b30 ldr r3, [sp, #192] ; 0xc0 + tmp0 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + 801688a: f850 1c10 ldr.w r1, [r0, #-16] + for (ctr = 0; ctr < 8; ctr++) { + 801688e: 45a3 cmp fp, r4 + outptr = output_buf[ctr] + output_col; + 8016890: eb06 0503 add.w r5, r6, r3 + z3 = (INT32) wsptr[3]; + 8016894: f850 ac04 ldr.w sl, [r0, #-4] + tmp2 = (INT32) wsptr[2]; + 8016898: f850 3c08 ldr.w r3, [r0, #-8] + tmp0 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + 801689c: f101 0110 add.w r1, r1, #16 + z2 = (INT32) wsptr[1]; + 80168a0: f850 2c0c ldr.w r2, [r0, #-12] + tmp10 = (tmp0 + tmp2) << CONST_BITS; + 80168a4: eb01 0903 add.w r9, r1, r3 + tmp12 = (tmp0 - tmp2) << CONST_BITS; + 80168a8: eba1 0103 sub.w r1, r1, r3 + z1 = MULTIPLY(z2 + z3, FIX_0_541196100); /* c6 */ + 80168ac: eb02 030a add.w r3, r2, sl + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0, + 80168b0: 9f02 ldr r7, [sp, #8] + z1 = MULTIPLY(z2 + z3, FIX_0_541196100); /* c6 */ + 80168b2: fb08 f303 mul.w r3, r8, r3 + tmp0 = z1 + MULTIPLY(z2, FIX_0_765366865); /* c2-c6 */ + 80168b6: fb0e 3202 mla r2, lr, r2, r3 + tmp2 = z1 - MULTIPLY(z3, FIX_1_847759065); /* c2+c6 */ + 80168ba: fb0c 330a mla r3, ip, sl, r3 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0, + 80168be: eb02 3a49 add.w sl, r2, r9, lsl #13 + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp0, + 80168c2: ebc2 3249 rsb r2, r2, r9, lsl #13 + & RANGE_MASK]; + 80168c6: f3ca 4a89 ubfx sl, sl, #18, #10 + & RANGE_MASK]; + 80168ca: f3c2 4289 ubfx r2, r2, #18, #10 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0, + 80168ce: f817 a00a ldrb.w sl, [r7, sl] + 80168d2: 9f30 ldr r7, [sp, #192] ; 0xc0 + 80168d4: f806 a007 strb.w sl, [r6, r7] + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp0, + 80168d8: 9e02 ldr r6, [sp, #8] + 80168da: 5cb2 ldrb r2, [r6, r2] + 80168dc: 70ea strb r2, [r5, #3] + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp12 + tmp2, + 80168de: eb03 3241 add.w r2, r3, r1, lsl #13 + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp12 - tmp2, + 80168e2: ebc3 3341 rsb r3, r3, r1, lsl #13 + & RANGE_MASK]; + 80168e6: f3c2 4289 ubfx r2, r2, #18, #10 + & RANGE_MASK]; + 80168ea: f3c3 4389 ubfx r3, r3, #18, #10 + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp12 + tmp2, + 80168ee: 5cb2 ldrb r2, [r6, r2] + 80168f0: 706a strb r2, [r5, #1] + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp12 - tmp2, + 80168f2: 5cf3 ldrb r3, [r6, r3] + 80168f4: 70ab strb r3, [r5, #2] + for (ctr = 0; ctr < 8; ctr++) { + 80168f6: d1c4 bne.n 8016882 + } +} + 80168f8: b027 add sp, #156 ; 0x9c + 80168fa: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + z2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + 80168fe: 6be8 ldr r0, [r5, #60] ; 0x3c + z1 = MULTIPLY(z2 + z3, FIX_0_541196100); + 8016900: f241 1251 movw r2, #4433 ; 0x1151 + z2 <<= CONST_BITS; + 8016904: 035b lsls r3, r3, #13 + z2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + 8016906: 4347 muls r7, r0 + z3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + 8016908: f8d5 00bc ldr.w r0, [r5, #188] ; 0xbc + z2 += ONE << (CONST_BITS-PASS1_BITS-1); + 801690c: f503 6380 add.w r3, r3, #1024 ; 0x400 + z3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + 8016910: 4360 muls r0, r4 + z1 = MULTIPLY(z2 + z3, FIX_0_541196100); + 8016912: 183c adds r4, r7, r0 + 8016914: 4354 muls r4, r2 + tmp2 = z1 + MULTIPLY(z2, FIX_0_765366865); + 8016916: f641 027e movw r2, #6270 ; 0x187e + 801691a: fb02 4707 mla r7, r2, r7, r4 + tmp3 = z1 - MULTIPLY(z3, FIX_1_847759065); + 801691e: 4a35 ldr r2, [pc, #212] ; (80169f4 ) + 8016920: fb02 4400 mla r4, r2, r0, r4 + z3 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + 8016924: 6fe8 ldr r0, [r5, #124] ; 0x7c + 8016926: 4346 muls r6, r0 + tmp0 = z2 + z3; + 8016928: eb03 3046 add.w r0, r3, r6, lsl #13 + tmp1 = z2 - z3; + 801692c: eba3 3346 sub.w r3, r3, r6, lsl #13 + tmp10 = tmp0 + tmp2; + 8016930: eb07 0c00 add.w ip, r7, r0 + tmp13 = tmp0 - tmp2; + 8016934: 1bc2 subs r2, r0, r7 + tmp0 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + 8016936: f8d5 00dc ldr.w r0, [r5, #220] ; 0xdc + tmp11 = tmp1 + tmp3; + 801693a: 18e7 adds r7, r4, r3 + tmp12 = tmp1 - tmp3; + 801693c: 1b1b subs r3, r3, r4 + tmp3 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 801693e: 69ec ldr r4, [r5, #28] + tmp0 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + 8016940: fb00 f909 mul.w r9, r0, r9 + tmp1 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + 8016944: f8d5 009c ldr.w r0, [r5, #156] ; 0x9c + tmp3 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 8016948: fb04 fa0a mul.w sl, r4, sl + tmp1 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + 801694c: fb00 f808 mul.w r8, r0, r8 + tmp2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + 8016950: 6de8 ldr r0, [r5, #92] ; 0x5c + tmp13 = tmp0 - tmp2; + 8016952: 9203 str r2, [sp, #12] + z1 = MULTIPLY(z2 + z3, FIX_1_175875602); /* sqrt(2) * c3 */ + 8016954: f242 52a1 movw r2, #9633 ; 0x25a1 + tmp2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + 8016958: fb00 fe0e mul.w lr, r0, lr + z3 = tmp1 + tmp3; + 801695c: eb08 040a add.w r4, r8, sl + z2 = tmp0 + tmp2; + 8016960: eb09 060e add.w r6, r9, lr + z1 = MULTIPLY(z2 + z3, FIX_1_175875602); /* sqrt(2) * c3 */ + 8016964: 1930 adds r0, r6, r4 + 8016966: 4350 muls r0, r2 + z2 += z1; + 8016968: 4a23 ldr r2, [pc, #140] ; (80169f8 ) + 801696a: fb02 0606 mla r6, r2, r6, r0 + z3 += z1; + 801696e: 4a23 ldr r2, [pc, #140] ; (80169fc ) + 8016970: fb02 0004 mla r0, r2, r4, r0 + z1 = MULTIPLY(tmp0 + tmp3, - FIX_0_899976223); /* sqrt(2) * (c7-c3) */ + 8016974: eb09 040a add.w r4, r9, sl + 8016978: 4a21 ldr r2, [pc, #132] ; (8016a00 ) + 801697a: 4354 muls r4, r2 + tmp0 += z1 + z2; + 801697c: f640 128e movw r2, #2446 ; 0x98e + 8016980: eb06 0b04 add.w fp, r6, r4 + tmp3 += z1 + z3; + 8016984: 4404 add r4, r0 + tmp0 += z1 + z2; + 8016986: fb02 b909 mla r9, r2, r9, fp + tmp3 += z1 + z3; + 801698a: f243 0b0b movw fp, #12299 ; 0x300b + z1 = MULTIPLY(tmp1 + tmp2, - FIX_2_562915447); /* sqrt(2) * (-c1-c3) */ + 801698e: 4a1d ldr r2, [pc, #116] ; (8016a04 ) + tmp3 += z1 + z3; + 8016990: fb0b 440a mla r4, fp, sl, r4 + z1 = MULTIPLY(tmp1 + tmp2, - FIX_2_562915447); /* sqrt(2) * (-c1-c3) */ + 8016994: eb08 0a0e add.w sl, r8, lr + tmp1 += z1 + z3; + 8016998: f244 1bb3 movw fp, #16819 ; 0x41b3 + z1 = MULTIPLY(tmp1 + tmp2, - FIX_2_562915447); /* sqrt(2) * (-c1-c3) */ + 801699c: fb02 fa0a mul.w sl, r2, sl + tmp1 += z1 + z3; + 80169a0: 4450 add r0, sl + tmp2 += z1 + z2; + 80169a2: 4456 add r6, sl + tmp1 += z1 + z3; + 80169a4: fb0b 0008 mla r0, fp, r8, r0 + tmp2 += z1 + z2; + 80169a8: f246 2854 movw r8, #25172 ; 0x6254 + 80169ac: fb08 6e0e mla lr, r8, lr, r6 + wsptr[4*0] = (int) RIGHT_SHIFT(tmp10 + tmp3, CONST_BITS-PASS1_BITS); + 80169b0: eb0c 0604 add.w r6, ip, r4 + wsptr[4*7] = (int) RIGHT_SHIFT(tmp10 - tmp3, CONST_BITS-PASS1_BITS); + 80169b4: ebac 0c04 sub.w ip, ip, r4 + wsptr[4*0] = (int) RIGHT_SHIFT(tmp10 + tmp3, CONST_BITS-PASS1_BITS); + 80169b8: 12f6 asrs r6, r6, #11 + wsptr[4*7] = (int) RIGHT_SHIFT(tmp10 - tmp3, CONST_BITS-PASS1_BITS); + 80169ba: ea4f 24ec mov.w r4, ip, asr #11 + wsptr[4*0] = (int) RIGHT_SHIFT(tmp10 + tmp3, CONST_BITS-PASS1_BITS); + 80169be: f841 6c04 str.w r6, [r1, #-4] + wsptr[4*7] = (int) RIGHT_SHIFT(tmp10 - tmp3, CONST_BITS-PASS1_BITS); + 80169c2: 66cc str r4, [r1, #108] ; 0x6c + wsptr[4*1] = (int) RIGHT_SHIFT(tmp11 + tmp2, CONST_BITS-PASS1_BITS); + 80169c4: eb07 040e add.w r4, r7, lr + wsptr[4*6] = (int) RIGHT_SHIFT(tmp11 - tmp2, CONST_BITS-PASS1_BITS); + 80169c8: eba7 070e sub.w r7, r7, lr + wsptr[4*1] = (int) RIGHT_SHIFT(tmp11 + tmp2, CONST_BITS-PASS1_BITS); + 80169cc: 12e4 asrs r4, r4, #11 + wsptr[4*6] = (int) RIGHT_SHIFT(tmp11 - tmp2, CONST_BITS-PASS1_BITS); + 80169ce: 12ff asrs r7, r7, #11 + wsptr[4*1] = (int) RIGHT_SHIFT(tmp11 + tmp2, CONST_BITS-PASS1_BITS); + 80169d0: 60cc str r4, [r1, #12] + wsptr[4*2] = (int) RIGHT_SHIFT(tmp12 + tmp1, CONST_BITS-PASS1_BITS); + 80169d2: 181c adds r4, r3, r0 + wsptr[4*5] = (int) RIGHT_SHIFT(tmp12 - tmp1, CONST_BITS-PASS1_BITS); + 80169d4: 1a1b subs r3, r3, r0 + wsptr[4*6] = (int) RIGHT_SHIFT(tmp11 - tmp2, CONST_BITS-PASS1_BITS); + 80169d6: 65cf str r7, [r1, #92] ; 0x5c + wsptr[4*2] = (int) RIGHT_SHIFT(tmp12 + tmp1, CONST_BITS-PASS1_BITS); + 80169d8: 12e4 asrs r4, r4, #11 + wsptr[4*5] = (int) RIGHT_SHIFT(tmp12 - tmp1, CONST_BITS-PASS1_BITS); + 80169da: 12db asrs r3, r3, #11 + wsptr[4*2] = (int) RIGHT_SHIFT(tmp12 + tmp1, CONST_BITS-PASS1_BITS); + 80169dc: 61cc str r4, [r1, #28] + wsptr[4*5] = (int) RIGHT_SHIFT(tmp12 - tmp1, CONST_BITS-PASS1_BITS); + 80169de: 64cb str r3, [r1, #76] ; 0x4c + wsptr[4*3] = (int) RIGHT_SHIFT(tmp13 + tmp0, CONST_BITS-PASS1_BITS); + 80169e0: 9b03 ldr r3, [sp, #12] + 80169e2: 444b add r3, r9 + 80169e4: 12db asrs r3, r3, #11 + 80169e6: 62cb str r3, [r1, #44] ; 0x2c + wsptr[4*4] = (int) RIGHT_SHIFT(tmp13 - tmp0, CONST_BITS-PASS1_BITS); + 80169e8: 9b03 ldr r3, [sp, #12] + 80169ea: eba3 0309 sub.w r3, r3, r9 + 80169ee: 12db asrs r3, r3, #11 + 80169f0: 63cb str r3, [r1, #60] ; 0x3c + wsptr++; + 80169f2: e738 b.n 8016866 + 80169f4: ffffc4df .word 0xffffc4df + 80169f8: ffffc13b .word 0xffffc13b + 80169fc: fffff384 .word 0xfffff384 + 8016a00: ffffe333 .word 0xffffe333 + 8016a04: ffffadfd .word 0xffffadfd + +08016a08 : + +GLOBAL(void) +jpeg_idct_3x6 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + 8016a08: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + INT32 z1, z2, z3; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + int * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + 8016a0c: f8d0 014c ldr.w r0, [r0, #332] ; 0x14c +{ + 8016a10: b095 sub sp, #84 ; 0x54 + 8016a12: 6d4c ldr r4, [r1, #84] ; 0x54 + 8016a14: 1e95 subs r5, r2, #2 + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + 8016a16: f100 0e80 add.w lr, r0, #128 ; 0x80 + * 6-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/12). + */ + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + for (ctr = 0; ctr < 3; ctr++, inptr++, quantptr++, wsptr++) { + 8016a1a: 3204 adds r2, #4 + 8016a1c: 3c04 subs r4, #4 + wsptr = workspace; + 8016a1e: ae02 add r6, sp, #8 +{ + 8016a20: 9300 str r3, [sp, #0] + 8016a22: 9201 str r2, [sp, #4] + /* Even part */ + + tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 8016a24: f935 1f02 ldrsh.w r1, [r5, #2]! + /* Odd part */ + + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + tmp1 = MULTIPLY(z1 + z3, FIX(0.366025404)); /* c5 */ + 8016a28: f640 33b6 movw r3, #2998 ; 0xbb6 + tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 8016a2c: f854 2f04 ldr.w r2, [r4, #4]! + for (ctr = 0; ctr < 3; ctr++, inptr++, quantptr++, wsptr++) { + 8016a30: 3604 adds r6, #4 + tmp2 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + 8016a32: f9b5 0040 ldrsh.w r0, [r5, #64] ; 0x40 + tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 8016a36: 4351 muls r1, r2 + tmp2 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + 8016a38: f8d4 2080 ldr.w r2, [r4, #128] ; 0x80 + tmp10 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + 8016a3c: f9b5 7020 ldrsh.w r7, [r5, #32] + tmp2 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + 8016a40: 4342 muls r2, r0 + tmp0 <<= CONST_BITS; + 8016a42: 0349 lsls r1, r1, #13 + tmp10 = MULTIPLY(tmp2, FIX(0.707106781)); /* c4 */ + 8016a44: f241 60a1 movw r0, #5793 ; 0x16a1 + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + 8016a48: f9b5 9030 ldrsh.w r9, [r5, #48] ; 0x30 + tmp0 += ONE << (CONST_BITS-PASS1_BITS-1); + 8016a4c: f501 6180 add.w r1, r1, #1024 ; 0x400 + z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + 8016a50: f9b5 8050 ldrsh.w r8, [r5, #80] ; 0x50 + tmp10 = MULTIPLY(tmp2, FIX(0.707106781)); /* c4 */ + 8016a54: 4342 muls r2, r0 + tmp1 = tmp0 + tmp10; + 8016a56: 1888 adds r0, r1, r2 + tmp11 = RIGHT_SHIFT(tmp0 - tmp10 - tmp10, CONST_BITS-PASS1_BITS); + 8016a58: eba1 0142 sub.w r1, r1, r2, lsl #1 + tmp10 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + 8016a5c: 6c22 ldr r2, [r4, #64] ; 0x40 + 8016a5e: 437a muls r2, r7 + tmp0 = MULTIPLY(tmp10, FIX(1.224744871)); /* c2 */ + 8016a60: f242 7731 movw r7, #10033 ; 0x2731 + 8016a64: 437a muls r2, r7 + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 8016a66: 6a27 ldr r7, [r4, #32] + tmp10 = tmp1 + tmp0; + 8016a68: eb00 0c02 add.w ip, r0, r2 + tmp12 = tmp1 - tmp0; + 8016a6c: 1a80 subs r0, r0, r2 + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 8016a6e: f9b5 2010 ldrsh.w r2, [r5, #16] + 8016a72: 437a muls r2, r7 + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + 8016a74: 6e27 ldr r7, [r4, #96] ; 0x60 + 8016a76: fb07 f909 mul.w r9, r7, r9 + z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + 8016a7a: f8d4 70a0 ldr.w r7, [r4, #160] ; 0xa0 + 8016a7e: fb07 f808 mul.w r8, r7, r8 + tmp0 = tmp1 + ((z1 + z2) << CONST_BITS); + 8016a82: eb02 0a09 add.w sl, r2, r9 + tmp1 = MULTIPLY(z1 + z3, FIX(0.366025404)); /* c5 */ + 8016a86: eb02 0708 add.w r7, r2, r8 + tmp2 = tmp1 + ((z3 - z2) << CONST_BITS); + tmp1 = (z1 - z2 - z3) << PASS1_BITS; + 8016a8a: eba2 0209 sub.w r2, r2, r9 + tmp2 = tmp1 + ((z3 - z2) << CONST_BITS); + 8016a8e: eba8 0b09 sub.w fp, r8, r9 + tmp1 = MULTIPLY(z1 + z3, FIX(0.366025404)); /* c5 */ + 8016a92: 435f muls r7, r3 + tmp1 = (z1 - z2 - z3) << PASS1_BITS; + 8016a94: eba2 0208 sub.w r2, r2, r8 + for (ctr = 0; ctr < 3; ctr++, inptr++, quantptr++, wsptr++) { + 8016a98: 9b01 ldr r3, [sp, #4] + tmp0 = tmp1 + ((z1 + z2) << CONST_BITS); + 8016a9a: eb07 3a4a add.w sl, r7, sl, lsl #13 + tmp1 = (z1 - z2 - z3) << PASS1_BITS; + 8016a9e: 0092 lsls r2, r2, #2 + for (ctr = 0; ctr < 3; ctr++, inptr++, quantptr++, wsptr++) { + 8016aa0: 42ab cmp r3, r5 + + /* Final output stage */ + + wsptr[3*0] = (int) RIGHT_SHIFT(tmp10 + tmp0, CONST_BITS-PASS1_BITS); + 8016aa2: eb0c 080a add.w r8, ip, sl + wsptr[3*5] = (int) RIGHT_SHIFT(tmp10 - tmp0, CONST_BITS-PASS1_BITS); + 8016aa6: ebac 0c0a sub.w ip, ip, sl + tmp2 = tmp1 + ((z3 - z2) << CONST_BITS); + 8016aaa: eb07 374b add.w r7, r7, fp, lsl #13 + wsptr[3*5] = (int) RIGHT_SHIFT(tmp10 - tmp0, CONST_BITS-PASS1_BITS); + 8016aae: ea4f 2cec mov.w ip, ip, asr #11 + wsptr[3*0] = (int) RIGHT_SHIFT(tmp10 + tmp0, CONST_BITS-PASS1_BITS); + 8016ab2: ea4f 28e8 mov.w r8, r8, asr #11 + wsptr[3*5] = (int) RIGHT_SHIFT(tmp10 - tmp0, CONST_BITS-PASS1_BITS); + 8016ab6: f8c6 c038 str.w ip, [r6, #56] ; 0x38 + wsptr[3*1] = (int) (tmp11 + tmp1); + 8016aba: eb02 2ce1 add.w ip, r2, r1, asr #11 + wsptr[3*4] = (int) (tmp11 - tmp1); + 8016abe: ebc2 22e1 rsb r2, r2, r1, asr #11 + wsptr[3*0] = (int) RIGHT_SHIFT(tmp10 + tmp0, CONST_BITS-PASS1_BITS); + 8016ac2: f846 8c04 str.w r8, [r6, #-4] + wsptr[3*1] = (int) (tmp11 + tmp1); + 8016ac6: f8c6 c008 str.w ip, [r6, #8] + wsptr[3*4] = (int) (tmp11 - tmp1); + 8016aca: 62f2 str r2, [r6, #44] ; 0x2c + wsptr[3*2] = (int) RIGHT_SHIFT(tmp12 + tmp2, CONST_BITS-PASS1_BITS); + 8016acc: eb00 0207 add.w r2, r0, r7 + wsptr[3*3] = (int) RIGHT_SHIFT(tmp12 - tmp2, CONST_BITS-PASS1_BITS); + 8016ad0: eba0 0007 sub.w r0, r0, r7 + wsptr[3*2] = (int) RIGHT_SHIFT(tmp12 + tmp2, CONST_BITS-PASS1_BITS); + 8016ad4: ea4f 22e2 mov.w r2, r2, asr #11 + wsptr[3*3] = (int) RIGHT_SHIFT(tmp12 - tmp2, CONST_BITS-PASS1_BITS); + 8016ad8: ea4f 20e0 mov.w r0, r0, asr #11 + wsptr[3*2] = (int) RIGHT_SHIFT(tmp12 + tmp2, CONST_BITS-PASS1_BITS); + 8016adc: 6172 str r2, [r6, #20] + wsptr[3*3] = (int) RIGHT_SHIFT(tmp12 - tmp2, CONST_BITS-PASS1_BITS); + 8016ade: 6230 str r0, [r6, #32] + for (ctr = 0; ctr < 3; ctr++, inptr++, quantptr++, wsptr++) { + 8016ae0: d1a0 bne.n 8016a24 + 8016ae2: 9b00 ldr r3, [sp, #0] + } + + /* Pass 2: process 6 rows from work array, store into output array. + * 3-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/6). + */ + wsptr = workspace; + 8016ae4: a902 add r1, sp, #8 + + /* Add fudge factor here for final descale. */ + tmp0 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + tmp0 <<= CONST_BITS; + tmp2 = (INT32) wsptr[2]; + tmp12 = MULTIPLY(tmp2, FIX(0.707106781)); /* c2 */ + 8016ae6: f241 6ca1 movw ip, #5793 ; 0x16a1 + tmp2 = tmp0 - tmp12 - tmp12; + + /* Odd part */ + + tmp12 = (INT32) wsptr[1]; + tmp0 = MULTIPLY(tmp12, FIX(1.224744871)); /* c1 */ + 8016aea: f242 7b31 movw fp, #10033 ; 0x2731 + 8016aee: 1f1d subs r5, r3, #4 + 8016af0: 3314 adds r3, #20 + outptr = output_buf[ctr] + output_col; + 8016af2: f855 9f04 ldr.w r9, [r5, #4]! + & RANGE_MASK]; + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp2, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + + wsptr += 3; /* advance pointer to next row */ + 8016af6: 310c adds r1, #12 + outptr = output_buf[ctr] + output_col; + 8016af8: 9a1e ldr r2, [sp, #120] ; 0x78 + tmp12 = MULTIPLY(tmp2, FIX(0.707106781)); /* c2 */ + 8016afa: f851 0c04 ldr.w r0, [r1, #-4] + for (ctr = 0; ctr < 6; ctr++) { + 8016afe: 42ab cmp r3, r5 + outptr = output_buf[ctr] + output_col; + 8016b00: eb09 0602 add.w r6, r9, r2 + tmp0 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + 8016b04: f851 2c0c ldr.w r2, [r1, #-12] + tmp12 = MULTIPLY(tmp2, FIX(0.707106781)); /* c2 */ + 8016b08: fb0c f000 mul.w r0, ip, r0 + tmp0 = MULTIPLY(tmp12, FIX(1.224744871)); /* c1 */ + 8016b0c: f851 4c08 ldr.w r4, [r1, #-8] + tmp0 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + 8016b10: f102 0210 add.w r2, r2, #16 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0, + 8016b14: 9f1e ldr r7, [sp, #120] ; 0x78 + tmp0 = MULTIPLY(tmp12, FIX(1.224744871)); /* c1 */ + 8016b16: fb0b f404 mul.w r4, fp, r4 + tmp10 = tmp0 + tmp12; + 8016b1a: eb00 3842 add.w r8, r0, r2, lsl #13 + tmp2 = tmp0 - tmp12 - tmp12; + 8016b1e: ebc0 3242 rsb r2, r0, r2, lsl #13 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0, + 8016b22: eb08 0a04 add.w sl, r8, r4 + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp0, + 8016b26: eba8 0804 sub.w r8, r8, r4 + tmp2 = tmp0 - tmp12 - tmp12; + 8016b2a: eba2 0200 sub.w r2, r2, r0 + & RANGE_MASK]; + 8016b2e: f3ca 4a89 ubfx sl, sl, #18, #10 + & RANGE_MASK]; + 8016b32: f3c8 4889 ubfx r8, r8, #18, #10 + & RANGE_MASK]; + 8016b36: f3c2 4289 ubfx r2, r2, #18, #10 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0, + 8016b3a: f81e a00a ldrb.w sl, [lr, sl] + 8016b3e: f809 a007 strb.w sl, [r9, r7] + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp0, + 8016b42: f81e 4008 ldrb.w r4, [lr, r8] + 8016b46: 70b4 strb r4, [r6, #2] + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp2, + 8016b48: f81e 2002 ldrb.w r2, [lr, r2] + 8016b4c: 7072 strb r2, [r6, #1] + for (ctr = 0; ctr < 6; ctr++) { + 8016b4e: d1d0 bne.n 8016af2 + } +} + 8016b50: b015 add sp, #84 ; 0x54 + 8016b52: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + ... + +08016b58 : + +GLOBAL(void) +jpeg_idct_2x4 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + 8016b58: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + INT32 z1, z2, z3; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + INT32 * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + 8016b5c: f8d0 714c ldr.w r7, [r0, #332] ; 0x14c +{ + 8016b60: b08b sub sp, #44 ; 0x2c + 8016b62: 6d4c ldr r4, [r1, #84] ; 0x54 + 8016b64: 1e96 subs r6, r2, #2 + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + 8016b66: f107 0080 add.w r0, r7, #128 ; 0x80 + * 4-point IDCT kernel, + * cK represents sqrt(2) * cos(K*pi/16) [refers to 8-point IDCT]. + */ + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + 8016b6a: ad02 add r5, sp, #8 + 8016b6c: 3c04 subs r4, #4 + /* Same rotation as in the even part of the 8x8 LL&M IDCT */ + + z2 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + z3 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + + z1 = MULTIPLY(z2 + z3, FIX_0_541196100); /* c6 */ + 8016b6e: f241 1851 movw r8, #4433 ; 0x1151 + tmp0 = z1 + MULTIPLY(z2, FIX_0_765366865); /* c2-c6 */ + 8016b72: f641 0e7e movw lr, #6270 ; 0x187e + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + 8016b76: 9001 str r0, [sp, #4] + tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 8016b78: f854 1f04 ldr.w r1, [r4, #4]! + 8016b7c: 46b4 mov ip, r6 + 8016b7e: f936 0f02 ldrsh.w r0, [r6, #2]! + for (ctr = 0; ctr < 2; ctr++, inptr++, quantptr++, wsptr++) { + 8016b82: 3504 adds r5, #4 + tmp2 = z1 - MULTIPLY(z3, FIX_1_847759065); /* c2+c6 */ + 8016b84: 4f29 ldr r7, [pc, #164] ; (8016c2c ) + for (ctr = 0; ctr < 2; ctr++, inptr++, quantptr++, wsptr++) { + 8016b86: 4562 cmp r2, ip + tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + 8016b88: fb01 f000 mul.w r0, r1, r0 + tmp2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + 8016b8c: f9b6 9020 ldrsh.w r9, [r6, #32] + 8016b90: 6c21 ldr r1, [r4, #64] ; 0x40 + z2 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 8016b92: f9b6 a010 ldrsh.w sl, [r6, #16] + tmp2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + 8016b96: fb01 f109 mul.w r1, r1, r9 + z3 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + 8016b9a: f9b6 b030 ldrsh.w fp, [r6, #48] ; 0x30 + tmp10 = (tmp0 + tmp2) << CONST_BITS; + 8016b9e: eb00 0901 add.w r9, r0, r1 + tmp12 = (tmp0 - tmp2) << CONST_BITS; + 8016ba2: eba0 0001 sub.w r0, r0, r1 + z2 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + 8016ba6: 6a21 ldr r1, [r4, #32] + 8016ba8: fb01 fa0a mul.w sl, r1, sl + z3 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + 8016bac: 6e21 ldr r1, [r4, #96] ; 0x60 + 8016bae: fb01 fb0b mul.w fp, r1, fp + z1 = MULTIPLY(z2 + z3, FIX_0_541196100); /* c6 */ + 8016bb2: eb0a 010b add.w r1, sl, fp + 8016bb6: fb08 f101 mul.w r1, r8, r1 + tmp0 = z1 + MULTIPLY(z2, FIX_0_765366865); /* c2-c6 */ + 8016bba: fb0e 1a0a mla sl, lr, sl, r1 + tmp2 = z1 - MULTIPLY(z3, FIX_1_847759065); /* c2+c6 */ + 8016bbe: fb07 110b mla r1, r7, fp, r1 + + /* Final output stage */ + + wsptr[2*0] = tmp10 + tmp0; + 8016bc2: eb0a 3b49 add.w fp, sl, r9, lsl #13 + wsptr[2*3] = tmp10 - tmp0; + 8016bc6: ebca 3a49 rsb sl, sl, r9, lsl #13 + wsptr[2*1] = tmp12 + tmp2; + 8016bca: eb01 3940 add.w r9, r1, r0, lsl #13 + wsptr[2*0] = tmp10 + tmp0; + 8016bce: f845 bc04 str.w fp, [r5, #-4] + wsptr[2*2] = tmp12 - tmp2; + 8016bd2: ebc1 3140 rsb r1, r1, r0, lsl #13 + wsptr[2*3] = tmp10 - tmp0; + 8016bd6: f8c5 a014 str.w sl, [r5, #20] + wsptr[2*1] = tmp12 + tmp2; + 8016bda: f8c5 9004 str.w r9, [r5, #4] + wsptr[2*2] = tmp12 - tmp2; + 8016bde: 60e9 str r1, [r5, #12] + for (ctr = 0; ctr < 2; ctr++, inptr++, quantptr++, wsptr++) { + 8016be0: d1ca bne.n 8016b78 + 8016be2: 1f18 subs r0, r3, #4 + } + + /* Pass 2: process 4 rows from work array, store into output array. */ + + wsptr = workspace; + 8016be4: a902 add r1, sp, #8 + 8016be6: 330c adds r3, #12 + for (ctr = 0; ctr < 4; ctr++) { + outptr = output_buf[ctr] + output_col; + 8016be8: f850 6f04 ldr.w r6, [r0, #4]! + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0, CONST_BITS+3) + & RANGE_MASK]; + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp0, CONST_BITS+3) + & RANGE_MASK]; + + wsptr += 2; /* advance pointer to next row */ + 8016bec: 3108 adds r1, #8 + outptr = output_buf[ctr] + output_col; + 8016bee: 9a14 ldr r2, [sp, #80] ; 0x50 + tmp0 = wsptr[1]; + 8016bf0: f851 5c04 ldr.w r5, [r1, #-4] + for (ctr = 0; ctr < 4; ctr++) { + 8016bf4: 4283 cmp r3, r0 + outptr = output_buf[ctr] + output_col; + 8016bf6: eb06 0c02 add.w ip, r6, r2 + tmp10 = wsptr[0] + (ONE << (CONST_BITS+2)); + 8016bfa: f851 2c08 ldr.w r2, [r1, #-8] + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0, CONST_BITS+3) + 8016bfe: 9f01 ldr r7, [sp, #4] + tmp10 = wsptr[0] + (ONE << (CONST_BITS+2)); + 8016c00: f502 4200 add.w r2, r2, #32768 ; 0x8000 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0, CONST_BITS+3) + 8016c04: eb02 0405 add.w r4, r2, r5 + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp0, CONST_BITS+3) + 8016c08: eba2 0205 sub.w r2, r2, r5 + & RANGE_MASK]; + 8016c0c: f3c4 4409 ubfx r4, r4, #16, #10 + & RANGE_MASK]; + 8016c10: f3c2 4209 ubfx r2, r2, #16, #10 + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0, CONST_BITS+3) + 8016c14: 5d3c ldrb r4, [r7, r4] + 8016c16: 9f14 ldr r7, [sp, #80] ; 0x50 + 8016c18: 55f4 strb r4, [r6, r7] + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp0, CONST_BITS+3) + 8016c1a: 9c01 ldr r4, [sp, #4] + 8016c1c: 5ca2 ldrb r2, [r4, r2] + 8016c1e: f88c 2001 strb.w r2, [ip, #1] + for (ctr = 0; ctr < 4; ctr++) { + 8016c22: d1e1 bne.n 8016be8 + } +} + 8016c24: b00b add sp, #44 ; 0x2c + 8016c26: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 8016c2a: bf00 nop + 8016c2c: ffffc4df .word 0xffffc4df + +08016c30 : + +GLOBAL(void) +jpeg_idct_1x2 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + 8016c30: b570 push {r4, r5, r6, lr} + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + SHIFT_TEMPS + + /* Process 1 column from input, store into output array. */ + + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + 8016c32: 6d4c ldr r4, [r1, #84] ; 0x54 + + /* Even part */ + + tmp10 = DEQUANTIZE(coef_block[DCTSIZE*0], quantptr[DCTSIZE*0]); + 8016c34: f9b2 1000 ldrsh.w r1, [r2] + 8016c38: 6826 ldr r6, [r4, #0] + /* Add fudge factor here for final descale. */ + tmp10 += ONE << 2; + + /* Odd part */ + + tmp0 = DEQUANTIZE(coef_block[DCTSIZE*1], quantptr[DCTSIZE*1]); + 8016c3a: f9b2 2010 ldrsh.w r2, [r2, #16] + 8016c3e: 6a24 ldr r4, [r4, #32] + tmp10 = DEQUANTIZE(coef_block[DCTSIZE*0], quantptr[DCTSIZE*0]); + 8016c40: 4371 muls r1, r6 + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + 8016c42: f8d0 014c ldr.w r0, [r0, #332] ; 0x14c + tmp0 = DEQUANTIZE(coef_block[DCTSIZE*1], quantptr[DCTSIZE*1]); + 8016c46: 4362 muls r2, r4 + tmp10 += ONE << 2; + 8016c48: 3104 adds r1, #4 + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + 8016c4a: 3080 adds r0, #128 ; 0x80 +{ + 8016c4c: 9d04 ldr r5, [sp, #16] + + /* Final output stage */ + + output_buf[0][output_col] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0, 3) + 8016c4e: 188c adds r4, r1, r2 + & RANGE_MASK]; + output_buf[1][output_col] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp0, 3) + 8016c50: 1a89 subs r1, r1, r2 + & RANGE_MASK]; + 8016c52: f3c4 04c9 ubfx r4, r4, #3, #10 + & RANGE_MASK]; + 8016c56: f3c1 01c9 ubfx r1, r1, #3, #10 + output_buf[0][output_col] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0, 3) + 8016c5a: 5d06 ldrb r6, [r0, r4] + 8016c5c: 681c ldr r4, [r3, #0] + 8016c5e: 5566 strb r6, [r4, r5] + output_buf[1][output_col] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp0, 3) + 8016c60: 5c42 ldrb r2, [r0, r1] + 8016c62: 685b ldr r3, [r3, #4] + 8016c64: 555a strb r2, [r3, r5] +} + 8016c66: bd70 pop {r4, r5, r6, pc} + +08016c68 : +/* If we compiled MEM_STATS support, report alloc requests before dying */ +{ +#ifdef MEM_STATS + cinfo->err->trace_level = 2; /* force self_destruct to report stats */ +#endif + ERREXIT1(cinfo, JERR_OUT_OF_MEMORY, which); + 8016c68: 6803 ldr r3, [r0, #0] + 8016c6a: 2238 movs r2, #56 ; 0x38 + 8016c6c: e9c3 2105 strd r2, r1, [r3, #20] + 8016c70: 681b ldr r3, [r3, #0] + 8016c72: 4718 bx r3 + +08016c74 : +do_barray_io (j_common_ptr cinfo, jvirt_barray_ptr ptr, boolean writing) +/* Do backing store read or write of a virtual coefficient-block array */ +{ + long bytesperrow, file_offset, byte_count, rows, thisrow, i; + + bytesperrow = (long) ptr->blocksperrow * SIZEOF(JBLOCK); + 8016c74: 688b ldr r3, [r1, #8] +{ + 8016c76: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + bytesperrow = (long) ptr->blocksperrow * SIZEOF(JBLOCK); + 8016c7a: ea4f 18c3 mov.w r8, r3, lsl #7 + file_offset = ptr->cur_start_row * bytesperrow; + 8016c7e: 698b ldr r3, [r1, #24] +{ + 8016c80: b085 sub sp, #20 + 8016c82: 4681 mov r9, r0 + 8016c84: 460c mov r4, r1 + 8016c86: 4692 mov sl, r2 + file_offset = ptr->cur_start_row * bytesperrow; + 8016c88: fb03 f708 mul.w r7, r3, r8 + /* Loop to read or write each allocation chunk in mem_buffer */ + for (i = 0; i < (long) ptr->rows_in_mem; i += ptr->rowsperchunk) { + 8016c8c: 2600 movs r6, #0 + rows = MIN(rows, (long) ptr->rows_in_array - thisrow); + if (rows <= 0) /* this chunk might be past end of file! */ + break; + byte_count = rows * bytesperrow; + if (writing) + (*ptr->b_s_info.write_backing_store) (cinfo, & ptr->b_s_info, + 8016c8e: f101 0b30 add.w fp, r1, #48 ; 0x30 + for (i = 0; i < (long) ptr->rows_in_mem; i += ptr->rowsperchunk) { + 8016c92: 6922 ldr r2, [r4, #16] + 8016c94: 42b2 cmp r2, r6 + 8016c96: dc02 bgt.n 8016c9e + (*ptr->b_s_info.read_backing_store) (cinfo, & ptr->b_s_info, + (void FAR *) ptr->mem_buffer[i], + file_offset, byte_count); + file_offset += byte_count; + } +} + 8016c98: b005 add sp, #20 + 8016c9a: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + rows = MIN((long) ptr->rowsperchunk, (long) ptr->rows_in_mem - i); + 8016c9e: 1b92 subs r2, r2, r6 + 8016ca0: 6961 ldr r1, [r4, #20] + thisrow = (long) ptr->cur_start_row + i; + 8016ca2: 69a0 ldr r0, [r4, #24] + rows = MIN((long) ptr->rowsperchunk, (long) ptr->rows_in_mem - i); + 8016ca4: 428a cmp r2, r1 + rows = MIN(rows, (long) ptr->rows_in_array - thisrow); + 8016ca6: 6865 ldr r5, [r4, #4] + thisrow = (long) ptr->cur_start_row + i; + 8016ca8: 4430 add r0, r6 + rows = MIN((long) ptr->rowsperchunk, (long) ptr->rows_in_mem - i); + 8016caa: bfa8 it ge + 8016cac: 460a movge r2, r1 + rows = MIN(rows, (long) ptr->first_undef_row - thisrow); + 8016cae: 69e1 ldr r1, [r4, #28] + rows = MIN(rows, (long) ptr->rows_in_array - thisrow); + 8016cb0: 1a2d subs r5, r5, r0 + rows = MIN(rows, (long) ptr->first_undef_row - thisrow); + 8016cb2: 1a09 subs r1, r1, r0 + 8016cb4: 4291 cmp r1, r2 + 8016cb6: bfa8 it ge + 8016cb8: 4611 movge r1, r2 + rows = MIN(rows, (long) ptr->rows_in_array - thisrow); + 8016cba: 428d cmp r5, r1 + 8016cbc: bfa8 it ge + 8016cbe: 460d movge r5, r1 + if (rows <= 0) /* this chunk might be past end of file! */ + 8016cc0: 2d00 cmp r5, #0 + 8016cc2: dde9 ble.n 8016c98 + byte_count = rows * bytesperrow; + 8016cc4: fb05 f308 mul.w r3, r5, r8 + (*ptr->b_s_info.write_backing_store) (cinfo, & ptr->b_s_info, + 8016cc8: 6822 ldr r2, [r4, #0] + byte_count = rows * bytesperrow; + 8016cca: 9303 str r3, [sp, #12] + (*ptr->b_s_info.write_backing_store) (cinfo, & ptr->b_s_info, + 8016ccc: f852 2026 ldr.w r2, [r2, r6, lsl #2] + if (writing) + 8016cd0: f1ba 0f00 cmp.w sl, #0 + 8016cd4: d00a beq.n 8016cec + (*ptr->b_s_info.write_backing_store) (cinfo, & ptr->b_s_info, + 8016cd6: 9300 str r3, [sp, #0] + 8016cd8: 4659 mov r1, fp + 8016cda: 463b mov r3, r7 + 8016cdc: 4648 mov r0, r9 + 8016cde: 6b65 ldr r5, [r4, #52] ; 0x34 + (*ptr->b_s_info.read_backing_store) (cinfo, & ptr->b_s_info, + 8016ce0: 47a8 blx r5 + file_offset += byte_count; + 8016ce2: 9b03 ldr r3, [sp, #12] + for (i = 0; i < (long) ptr->rows_in_mem; i += ptr->rowsperchunk) { + 8016ce4: 6962 ldr r2, [r4, #20] + file_offset += byte_count; + 8016ce6: 441f add r7, r3 + for (i = 0; i < (long) ptr->rows_in_mem; i += ptr->rowsperchunk) { + 8016ce8: 4416 add r6, r2 + 8016cea: e7d2 b.n 8016c92 + (*ptr->b_s_info.read_backing_store) (cinfo, & ptr->b_s_info, + 8016cec: 9b03 ldr r3, [sp, #12] + 8016cee: 4659 mov r1, fp + 8016cf0: 4648 mov r0, r9 + 8016cf2: 6b25 ldr r5, [r4, #48] ; 0x30 + 8016cf4: 9300 str r3, [sp, #0] + 8016cf6: 463b mov r3, r7 + 8016cf8: e7f2 b.n 8016ce0 + ... + +08016cfc : +{ + 8016cfc: e92d 4ff8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} + if (sizeofobject > (size_t) (MAX_ALLOC_CHUNK-SIZEOF(small_pool_hdr))) + 8016d00: f64f 73f0 movw r3, #65520 ; 0xfff0 +{ + 8016d04: 4606 mov r6, r0 + 8016d06: 460d mov r5, r1 + 8016d08: 4614 mov r4, r2 + if (sizeofobject > (size_t) (MAX_ALLOC_CHUNK-SIZEOF(small_pool_hdr))) + 8016d0a: 429a cmp r2, r3 + my_mem_ptr mem = (my_mem_ptr) cinfo->mem; + 8016d0c: 6847 ldr r7, [r0, #4] + if (sizeofobject > (size_t) (MAX_ALLOC_CHUNK-SIZEOF(small_pool_hdr))) + 8016d0e: d902 bls.n 8016d16 + out_of_memory(cinfo, 1); /* request exceeds malloc's ability */ + 8016d10: 2101 movs r1, #1 + 8016d12: f7ff ffa9 bl 8016c68 + if (odd_bytes > 0) + 8016d16: f014 0307 ands.w r3, r4, #7 + sizeofobject += SIZEOF(ALIGN_TYPE) - odd_bytes; + 8016d1a: bf1c itt ne + 8016d1c: 3408 addne r4, #8 + 8016d1e: 1ae4 subne r4, r4, r3 + if (pool_id < 0 || pool_id >= JPOOL_NUMPOOLS) + 8016d20: 2d01 cmp r5, #1 + 8016d22: d906 bls.n 8016d32 + ERREXIT1(cinfo, JERR_BAD_POOL_ID, pool_id); /* safety check */ + 8016d24: 6833 ldr r3, [r6, #0] + 8016d26: 220f movs r2, #15 + 8016d28: 4630 mov r0, r6 + 8016d2a: e9c3 2505 strd r2, r5, [r3, #20] + 8016d2e: 681b ldr r3, [r3, #0] + 8016d30: 4798 blx r3 + hdr_ptr = mem->small_list[pool_id]; + 8016d32: eb07 0885 add.w r8, r7, r5, lsl #2 + prev_hdr_ptr = NULL; + 8016d36: f04f 0a00 mov.w sl, #0 + hdr_ptr = mem->small_list[pool_id]; + 8016d3a: f8d8 0034 ldr.w r0, [r8, #52] ; 0x34 + while (hdr_ptr != NULL) { + 8016d3e: b9e8 cbnz r0, 8016d7c + min_request = sizeofobject + SIZEOF(small_pool_hdr); + 8016d40: f104 0910 add.w r9, r4, #16 + if (prev_hdr_ptr == NULL) /* first pool in class? */ + 8016d44: f1ba 0f00 cmp.w sl, #0 + 8016d48: d11e bne.n 8016d88 + slop = first_pool_slop[pool_id]; + 8016d4a: 4b1d ldr r3, [pc, #116] ; (8016dc0 ) + slop = extra_pool_slop[pool_id]; + 8016d4c: f853 3025 ldr.w r3, [r3, r5, lsl #2] + if (slop > (size_t) (MAX_ALLOC_CHUNK-min_request)) + 8016d50: f5c9 3580 rsb r5, r9, #65536 ; 0x10000 + 8016d54: 429d cmp r5, r3 + 8016d56: bf28 it cs + 8016d58: 461d movcs r5, r3 + hdr_ptr = (small_pool_ptr) jpeg_get_small(cinfo, min_request + slop); + 8016d5a: eb05 0b09 add.w fp, r5, r9 + 8016d5e: 4630 mov r0, r6 + 8016d60: 4659 mov r1, fp + 8016d62: f000 fbd1 bl 8017508 + if (hdr_ptr != NULL) + 8016d66: b988 cbnz r0, 8016d8c + if (slop < MIN_SLOP) /* give up when it gets real small */ + 8016d68: 2d63 cmp r5, #99 ; 0x63 + slop /= 2; + 8016d6a: ea4f 0b55 mov.w fp, r5, lsr #1 + if (slop < MIN_SLOP) /* give up when it gets real small */ + 8016d6e: d803 bhi.n 8016d78 + out_of_memory(cinfo, 2); /* jpeg_get_small failed */ + 8016d70: 2102 movs r1, #2 + 8016d72: 4630 mov r0, r6 + 8016d74: f7ff ff78 bl 8016c68 + hdr_ptr = hdr_ptr->hdr.next; + 8016d78: 465d mov r5, fp + 8016d7a: e7ee b.n 8016d5a + if (hdr_ptr->hdr.bytes_left >= sizeofobject) + 8016d7c: 6883 ldr r3, [r0, #8] + 8016d7e: 42a3 cmp r3, r4 + 8016d80: d211 bcs.n 8016da6 + hdr_ptr = hdr_ptr->hdr.next; + 8016d82: 4682 mov sl, r0 + 8016d84: 6800 ldr r0, [r0, #0] + 8016d86: e7da b.n 8016d3e + slop = extra_pool_slop[pool_id]; + 8016d88: 4b0e ldr r3, [pc, #56] ; (8016dc4 ) + 8016d8a: e7df b.n 8016d4c + mem->total_space_allocated += min_request + slop; + 8016d8c: 6cfb ldr r3, [r7, #76] ; 0x4c + hdr_ptr->hdr.bytes_left = sizeofobject + slop; + 8016d8e: 4425 add r5, r4 + mem->total_space_allocated += min_request + slop; + 8016d90: 445b add r3, fp + 8016d92: 64fb str r3, [r7, #76] ; 0x4c + hdr_ptr->hdr.next = NULL; + 8016d94: 2300 movs r3, #0 + hdr_ptr->hdr.bytes_left = sizeofobject + slop; + 8016d96: 6085 str r5, [r0, #8] + hdr_ptr->hdr.bytes_used = 0; + 8016d98: e9c0 3300 strd r3, r3, [r0] + if (prev_hdr_ptr == NULL) /* first pool in class? */ + 8016d9c: f1ba 0f00 cmp.w sl, #0 + 8016da0: d10b bne.n 8016dba + mem->small_list[pool_id] = hdr_ptr; + 8016da2: f8c8 0034 str.w r0, [r8, #52] ; 0x34 + data_ptr += hdr_ptr->hdr.bytes_used; /* point to place for object */ + 8016da6: 6843 ldr r3, [r0, #4] + hdr_ptr->hdr.bytes_used += sizeofobject; + 8016da8: 191a adds r2, r3, r4 + data_ptr += hdr_ptr->hdr.bytes_used; /* point to place for object */ + 8016daa: 3310 adds r3, #16 + hdr_ptr->hdr.bytes_used += sizeofobject; + 8016dac: 6042 str r2, [r0, #4] + hdr_ptr->hdr.bytes_left -= sizeofobject; + 8016dae: 6882 ldr r2, [r0, #8] + 8016db0: 1b12 subs r2, r2, r4 + 8016db2: 6082 str r2, [r0, #8] + data_ptr += hdr_ptr->hdr.bytes_used; /* point to place for object */ + 8016db4: 4418 add r0, r3 +} + 8016db6: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} + prev_hdr_ptr->hdr.next = hdr_ptr; + 8016dba: f8ca 0000 str.w r0, [sl] + 8016dbe: e7f2 b.n 8016da6 + 8016dc0: 0803974c .word 0x0803974c + 8016dc4: 08039744 .word 0x08039744 + +08016dc8 : + if (pool_id != JPOOL_IMAGE) + 8016dc8: 2901 cmp r1, #1 +{ + 8016dca: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} + 8016dce: 4604 mov r4, r0 + 8016dd0: 460d mov r5, r1 + 8016dd2: 4616 mov r6, r2 + 8016dd4: 461f mov r7, r3 + my_mem_ptr mem = (my_mem_ptr) cinfo->mem; + 8016dd6: f8d0 8004 ldr.w r8, [r0, #4] + if (pool_id != JPOOL_IMAGE) + 8016dda: d005 beq.n 8016de8 + ERREXIT1(cinfo, JERR_BAD_POOL_ID, pool_id); /* safety check */ + 8016ddc: 6803 ldr r3, [r0, #0] + 8016dde: 220f movs r2, #15 + 8016de0: e9c3 2105 strd r2, r1, [r3, #20] + 8016de4: 681b ldr r3, [r3, #0] + 8016de6: 4798 blx r3 + result = (jvirt_barray_ptr) alloc_small(cinfo, pool_id, + 8016de8: 223c movs r2, #60 ; 0x3c + 8016dea: 4629 mov r1, r5 + 8016dec: 4620 mov r0, r4 + 8016dee: f7ff ff85 bl 8016cfc + result->mem_buffer = NULL; /* marks array not yet realized */ + 8016df2: 2300 movs r3, #0 + result->rows_in_array = numrows; + 8016df4: 9a06 ldr r2, [sp, #24] + result->mem_buffer = NULL; /* marks array not yet realized */ + 8016df6: 6003 str r3, [r0, #0] + result->b_s_open = FALSE; /* no associated backing-store object */ + 8016df8: 6283 str r3, [r0, #40] ; 0x28 + result->next = mem->virt_barray_list; /* add to list of virtual arrays */ + 8016dfa: f8d8 3048 ldr.w r3, [r8, #72] ; 0x48 + result->pre_zero = pre_zero; + 8016dfe: 6206 str r6, [r0, #32] + result->next = mem->virt_barray_list; /* add to list of virtual arrays */ + 8016e00: 62c3 str r3, [r0, #44] ; 0x2c + result->blocksperrow = blocksperrow; + 8016e02: e9c0 2701 strd r2, r7, [r0, #4] + result->maxaccess = maxaccess; + 8016e06: 9a07 ldr r2, [sp, #28] + 8016e08: 60c2 str r2, [r0, #12] + mem->virt_barray_list = result; + 8016e0a: f8c8 0048 str.w r0, [r8, #72] ; 0x48 +} + 8016e0e: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + +08016e12 : + if (pool_id != JPOOL_IMAGE) + 8016e12: 2901 cmp r1, #1 +{ + 8016e14: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} + 8016e18: 4604 mov r4, r0 + 8016e1a: 460d mov r5, r1 + 8016e1c: 4616 mov r6, r2 + 8016e1e: 461f mov r7, r3 + my_mem_ptr mem = (my_mem_ptr) cinfo->mem; + 8016e20: f8d0 8004 ldr.w r8, [r0, #4] + if (pool_id != JPOOL_IMAGE) + 8016e24: d005 beq.n 8016e32 + ERREXIT1(cinfo, JERR_BAD_POOL_ID, pool_id); /* safety check */ + 8016e26: 6803 ldr r3, [r0, #0] + 8016e28: 220f movs r2, #15 + 8016e2a: e9c3 2105 strd r2, r1, [r3, #20] + 8016e2e: 681b ldr r3, [r3, #0] + 8016e30: 4798 blx r3 + result = (jvirt_sarray_ptr) alloc_small(cinfo, pool_id, + 8016e32: 223c movs r2, #60 ; 0x3c + 8016e34: 4629 mov r1, r5 + 8016e36: 4620 mov r0, r4 + 8016e38: f7ff ff60 bl 8016cfc + result->mem_buffer = NULL; /* marks array not yet realized */ + 8016e3c: 2300 movs r3, #0 + result->rows_in_array = numrows; + 8016e3e: 9a06 ldr r2, [sp, #24] + result->mem_buffer = NULL; /* marks array not yet realized */ + 8016e40: 6003 str r3, [r0, #0] + result->b_s_open = FALSE; /* no associated backing-store object */ + 8016e42: 6283 str r3, [r0, #40] ; 0x28 + result->next = mem->virt_sarray_list; /* add to list of virtual arrays */ + 8016e44: f8d8 3044 ldr.w r3, [r8, #68] ; 0x44 + result->pre_zero = pre_zero; + 8016e48: 6206 str r6, [r0, #32] + result->next = mem->virt_sarray_list; /* add to list of virtual arrays */ + 8016e4a: 62c3 str r3, [r0, #44] ; 0x2c + result->samplesperrow = samplesperrow; + 8016e4c: e9c0 2701 strd r2, r7, [r0, #4] + result->maxaccess = maxaccess; + 8016e50: 9a07 ldr r2, [sp, #28] + 8016e52: 60c2 str r2, [r0, #12] + mem->virt_sarray_list = result; + 8016e54: f8c8 0044 str.w r0, [r8, #68] ; 0x44 +} + 8016e58: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + +08016e5c : + my_mem_ptr mem = (my_mem_ptr) cinfo->mem; + small_pool_ptr shdr_ptr; + large_pool_ptr lhdr_ptr; + size_t space_freed; + + if (pool_id < 0 || pool_id >= JPOOL_NUMPOOLS) + 8016e5c: 2901 cmp r1, #1 +{ + 8016e5e: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} + 8016e62: 4606 mov r6, r0 + 8016e64: 4688 mov r8, r1 + my_mem_ptr mem = (my_mem_ptr) cinfo->mem; + 8016e66: 6845 ldr r5, [r0, #4] + if (pool_id < 0 || pool_id >= JPOOL_NUMPOOLS) + 8016e68: d910 bls.n 8016e8c + ERREXIT1(cinfo, JERR_BAD_POOL_ID, pool_id); /* safety check */ + 8016e6a: 6803 ldr r3, [r0, #0] + 8016e6c: 220f movs r2, #15 + 8016e6e: e9c3 2105 strd r2, r1, [r3, #20] + 8016e72: 681b ldr r3, [r3, #0] + 8016e74: 4798 blx r3 + } + mem->virt_barray_list = NULL; + } + + /* Release large objects */ + lhdr_ptr = mem->large_list[pool_id]; + 8016e76: eb05 0488 add.w r4, r5, r8, lsl #2 + mem->large_list[pool_id] = NULL; + 8016e7a: 2200 movs r2, #0 + lhdr_ptr = mem->large_list[pool_id]; + 8016e7c: 6be3 ldr r3, [r4, #60] ; 0x3c + mem->large_list[pool_id] = NULL; + 8016e7e: 63e2 str r2, [r4, #60] ; 0x3c + + while (lhdr_ptr != NULL) { + 8016e80: bb0b cbnz r3, 8016ec6 + mem->total_space_allocated -= space_freed; + lhdr_ptr = next_lhdr_ptr; + } + + /* Release small objects */ + shdr_ptr = mem->small_list[pool_id]; + 8016e82: 6b61 ldr r1, [r4, #52] ; 0x34 + mem->small_list[pool_id] = NULL; + 8016e84: 6363 str r3, [r4, #52] ; 0x34 + + while (shdr_ptr != NULL) { + 8016e86: bb69 cbnz r1, 8016ee4 + SIZEOF(small_pool_hdr); + jpeg_free_small(cinfo, (void *) shdr_ptr, space_freed); + mem->total_space_allocated -= space_freed; + shdr_ptr = next_shdr_ptr; + } +} + 8016e88: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + if (pool_id == JPOOL_IMAGE) { + 8016e8c: d1f3 bne.n 8016e76 + for (sptr = mem->virt_sarray_list; sptr != NULL; sptr = sptr->next) { + 8016e8e: 6c6c ldr r4, [r5, #68] ; 0x44 + sptr->b_s_open = FALSE; /* prevent recursive close if error */ + 8016e90: 2700 movs r7, #0 + for (sptr = mem->virt_sarray_list; sptr != NULL; sptr = sptr->next) { + 8016e92: b924 cbnz r4, 8016e9e + for (bptr = mem->virt_barray_list; bptr != NULL; bptr = bptr->next) { + 8016e94: 6caf ldr r7, [r5, #72] ; 0x48 + mem->virt_sarray_list = NULL; + 8016e96: 646c str r4, [r5, #68] ; 0x44 + for (bptr = mem->virt_barray_list; bptr != NULL; bptr = bptr->next) { + 8016e98: b95f cbnz r7, 8016eb2 + mem->virt_barray_list = NULL; + 8016e9a: 64af str r7, [r5, #72] ; 0x48 + 8016e9c: e7eb b.n 8016e76 + if (sptr->b_s_open) { /* there may be no backing store */ + 8016e9e: 6aa3 ldr r3, [r4, #40] ; 0x28 + 8016ea0: b12b cbz r3, 8016eae + (*sptr->b_s_info.close_backing_store) (cinfo, & sptr->b_s_info); + 8016ea2: 6ba3 ldr r3, [r4, #56] ; 0x38 + 8016ea4: f104 0130 add.w r1, r4, #48 ; 0x30 + 8016ea8: 4630 mov r0, r6 + sptr->b_s_open = FALSE; /* prevent recursive close if error */ + 8016eaa: 62a7 str r7, [r4, #40] ; 0x28 + (*sptr->b_s_info.close_backing_store) (cinfo, & sptr->b_s_info); + 8016eac: 4798 blx r3 + for (sptr = mem->virt_sarray_list; sptr != NULL; sptr = sptr->next) { + 8016eae: 6ae4 ldr r4, [r4, #44] ; 0x2c + 8016eb0: e7ef b.n 8016e92 + if (bptr->b_s_open) { /* there may be no backing store */ + 8016eb2: 6abb ldr r3, [r7, #40] ; 0x28 + 8016eb4: b12b cbz r3, 8016ec2 + (*bptr->b_s_info.close_backing_store) (cinfo, & bptr->b_s_info); + 8016eb6: 6bbb ldr r3, [r7, #56] ; 0x38 + 8016eb8: f107 0130 add.w r1, r7, #48 ; 0x30 + 8016ebc: 4630 mov r0, r6 + bptr->b_s_open = FALSE; /* prevent recursive close if error */ + 8016ebe: 62bc str r4, [r7, #40] ; 0x28 + (*bptr->b_s_info.close_backing_store) (cinfo, & bptr->b_s_info); + 8016ec0: 4798 blx r3 + for (bptr = mem->virt_barray_list; bptr != NULL; bptr = bptr->next) { + 8016ec2: 6aff ldr r7, [r7, #44] ; 0x2c + 8016ec4: e7e8 b.n 8016e98 + space_freed = lhdr_ptr->hdr.bytes_used + + 8016ec6: e9d3 8700 ldrd r8, r7, [r3] + 8016eca: 689a ldr r2, [r3, #8] + jpeg_free_large(cinfo, (void FAR *) lhdr_ptr, space_freed); + 8016ecc: 4619 mov r1, r3 + 8016ece: 4630 mov r0, r6 + space_freed = lhdr_ptr->hdr.bytes_used + + 8016ed0: 4417 add r7, r2 + 8016ed2: 3710 adds r7, #16 + jpeg_free_large(cinfo, (void FAR *) lhdr_ptr, space_freed); + 8016ed4: 463a mov r2, r7 + 8016ed6: f000 fb20 bl 801751a + mem->total_space_allocated -= space_freed; + 8016eda: 6ceb ldr r3, [r5, #76] ; 0x4c + 8016edc: 1bdb subs r3, r3, r7 + 8016ede: 64eb str r3, [r5, #76] ; 0x4c + lhdr_ptr = next_lhdr_ptr; + 8016ee0: 4643 mov r3, r8 + 8016ee2: e7cd b.n 8016e80 + space_freed = shdr_ptr->hdr.bytes_used + + 8016ee4: 688b ldr r3, [r1, #8] + jpeg_free_small(cinfo, (void *) shdr_ptr, space_freed); + 8016ee6: 4630 mov r0, r6 + space_freed = shdr_ptr->hdr.bytes_used + + 8016ee8: e9d1 7400 ldrd r7, r4, [r1] + 8016eec: 441c add r4, r3 + 8016eee: 3410 adds r4, #16 + jpeg_free_small(cinfo, (void *) shdr_ptr, space_freed); + 8016ef0: 4622 mov r2, r4 + 8016ef2: f000 fb0c bl 801750e + mem->total_space_allocated -= space_freed; + 8016ef6: 6ceb ldr r3, [r5, #76] ; 0x4c + shdr_ptr = next_shdr_ptr; + 8016ef8: 4639 mov r1, r7 + mem->total_space_allocated -= space_freed; + 8016efa: 1b1b subs r3, r3, r4 + 8016efc: 64eb str r3, [r5, #76] ; 0x4c + shdr_ptr = next_shdr_ptr; + 8016efe: e7c2 b.n 8016e86 + +08016f00 : + * Note that this cannot be called unless cinfo->mem is non-NULL. + */ + +METHODDEF(void) +self_destruct (j_common_ptr cinfo) +{ + 8016f00: b510 push {r4, lr} + 8016f02: 4604 mov r4, r0 + /* Close all backing store, release all memory. + * Releasing pools in reverse order might help avoid fragmentation + * with some (brain-damaged) malloc libraries. + */ + for (pool = JPOOL_NUMPOOLS-1; pool >= JPOOL_PERMANENT; pool--) { + free_pool(cinfo, pool); + 8016f04: 2101 movs r1, #1 + 8016f06: f7ff ffa9 bl 8016e5c + 8016f0a: 2100 movs r1, #0 + 8016f0c: 4620 mov r0, r4 + 8016f0e: f7ff ffa5 bl 8016e5c + } + + /* Release the memory manager control block too. */ + jpeg_free_small(cinfo, (void *) cinfo->mem, SIZEOF(my_memory_mgr)); + 8016f12: 4620 mov r0, r4 + 8016f14: 6861 ldr r1, [r4, #4] + 8016f16: 2254 movs r2, #84 ; 0x54 + 8016f18: f000 faf9 bl 801750e + cinfo->mem = NULL; /* ensures I will be called only once */ + 8016f1c: 2300 movs r3, #0 + + jpeg_mem_term(cinfo); /* system-dependent cleanup */ + 8016f1e: 4620 mov r0, r4 + cinfo->mem = NULL; /* ensures I will be called only once */ + 8016f20: 6063 str r3, [r4, #4] +} + 8016f22: e8bd 4010 ldmia.w sp!, {r4, lr} + jpeg_mem_term(cinfo); /* system-dependent cleanup */ + 8016f26: f000 bb04 b.w 8017532 + +08016f2a : +{ + 8016f2a: e92d 43f7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, lr} + JDIMENSION end_row = start_row + num_rows; + 8016f2e: 18d7 adds r7, r2, r3 +{ + 8016f30: 4615 mov r5, r2 + if (end_row > ptr->rows_in_array || num_rows > ptr->maxaccess || + 8016f32: 684a ldr r2, [r1, #4] +{ + 8016f34: 460c mov r4, r1 + 8016f36: f8dd 8028 ldr.w r8, [sp, #40] ; 0x28 + if (end_row > ptr->rows_in_array || num_rows > ptr->maxaccess || + 8016f3a: 42ba cmp r2, r7 + 8016f3c: d304 bcc.n 8016f48 + 8016f3e: 68ca ldr r2, [r1, #12] + 8016f40: 429a cmp r2, r3 + 8016f42: d301 bcc.n 8016f48 + 8016f44: 680b ldr r3, [r1, #0] + 8016f46: b933 cbnz r3, 8016f56 + ERREXIT(cinfo, JERR_BAD_VIRTUAL_ACCESS); + 8016f48: 6803 ldr r3, [r0, #0] + 8016f4a: 2217 movs r2, #23 + 8016f4c: 9001 str r0, [sp, #4] + 8016f4e: 615a str r2, [r3, #20] + 8016f50: 681b ldr r3, [r3, #0] + 8016f52: 4798 blx r3 + 8016f54: 9801 ldr r0, [sp, #4] + if (start_row < ptr->cur_start_row || + 8016f56: 69a3 ldr r3, [r4, #24] + 8016f58: 42ab cmp r3, r5 + 8016f5a: d803 bhi.n 8016f64 + end_row > ptr->cur_start_row+ptr->rows_in_mem) { + 8016f5c: 6922 ldr r2, [r4, #16] + 8016f5e: 4413 add r3, r2 + if (start_row < ptr->cur_start_row || + 8016f60: 42bb cmp r3, r7 + 8016f62: d221 bcs.n 8016fa8 + if (! ptr->b_s_open) + 8016f64: 6aa3 ldr r3, [r4, #40] ; 0x28 + 8016f66: b933 cbnz r3, 8016f76 + ERREXIT(cinfo, JERR_VIRTUAL_BUG); + 8016f68: 6803 ldr r3, [r0, #0] + 8016f6a: 2247 movs r2, #71 ; 0x47 + 8016f6c: 9001 str r0, [sp, #4] + 8016f6e: 615a str r2, [r3, #20] + 8016f70: 681b ldr r3, [r3, #0] + 8016f72: 4798 blx r3 + 8016f74: 9801 ldr r0, [sp, #4] + if (ptr->dirty) { + 8016f76: 6a63 ldr r3, [r4, #36] ; 0x24 + 8016f78: b13b cbz r3, 8016f8a + do_barray_io(cinfo, ptr, TRUE); + 8016f7a: 2201 movs r2, #1 + 8016f7c: 4621 mov r1, r4 + 8016f7e: 9001 str r0, [sp, #4] + 8016f80: f7ff fe78 bl 8016c74 + ptr->dirty = FALSE; + 8016f84: 2300 movs r3, #0 + 8016f86: 9801 ldr r0, [sp, #4] + 8016f88: 6263 str r3, [r4, #36] ; 0x24 + if (start_row > ptr->cur_start_row) { + 8016f8a: 69a3 ldr r3, [r4, #24] + do_barray_io(cinfo, ptr, FALSE); + 8016f8c: 2200 movs r2, #0 + 8016f8e: 4621 mov r1, r4 + 8016f90: 9001 str r0, [sp, #4] + if (start_row > ptr->cur_start_row) { + 8016f92: 42ab cmp r3, r5 + ltemp = (long) end_row - (long) ptr->rows_in_mem; + 8016f94: bf29 itett cs + 8016f96: 6923 ldrcs r3, [r4, #16] + 8016f98: 462b movcc r3, r5 + 8016f9a: 1afb subcs r3, r7, r3 + ptr->cur_start_row = (JDIMENSION) ltemp; + 8016f9c: ea23 73e3 biccs.w r3, r3, r3, asr #31 + 8016fa0: 61a3 str r3, [r4, #24] + do_barray_io(cinfo, ptr, FALSE); + 8016fa2: f7ff fe67 bl 8016c74 + 8016fa6: 9801 ldr r0, [sp, #4] + if (ptr->first_undef_row < end_row) { + 8016fa8: 69e6 ldr r6, [r4, #28] + 8016faa: 42be cmp r6, r7 + 8016fac: d21c bcs.n 8016fe8 + if (ptr->first_undef_row < start_row) { + 8016fae: 42ae cmp r6, r5 + 8016fb0: d20c bcs.n 8016fcc + if (writable) /* writer skipped over a section of array */ + 8016fb2: f1b8 0f00 cmp.w r8, #0 + 8016fb6: d01b beq.n 8016ff0 + ERREXIT(cinfo, JERR_BAD_VIRTUAL_ACCESS); + 8016fb8: 6803 ldr r3, [r0, #0] + 8016fba: 2217 movs r2, #23 + 8016fbc: 9001 str r0, [sp, #4] + 8016fbe: 462e mov r6, r5 + 8016fc0: 615a str r2, [r3, #20] + 8016fc2: 681b ldr r3, [r3, #0] + 8016fc4: 4798 blx r3 + if (writable) + 8016fc6: 9801 ldr r0, [sp, #4] + ptr->first_undef_row = end_row; + 8016fc8: 61e7 str r7, [r4, #28] + 8016fca: e002 b.n 8016fd2 + if (writable) + 8016fcc: f1b8 0f00 cmp.w r8, #0 + 8016fd0: d1fa bne.n 8016fc8 + if (ptr->pre_zero) { + 8016fd2: 6a22 ldr r2, [r4, #32] + 8016fd4: b1b2 cbz r2, 8017004 + size_t bytesperrow = (size_t) ptr->blocksperrow * SIZEOF(JBLOCK); + 8016fd6: 68a2 ldr r2, [r4, #8] + 8016fd8: ea4f 19c2 mov.w r9, r2, lsl #7 + undef_row -= ptr->cur_start_row; /* make indexes relative to buffer */ + 8016fdc: 69a2 ldr r2, [r4, #24] + 8016fde: 1ab6 subs r6, r6, r2 + end_row -= ptr->cur_start_row; + 8016fe0: 1abf subs r7, r7, r2 + while (undef_row < end_row) { + 8016fe2: 42be cmp r6, r7 + FMEMZERO((void FAR *) ptr->mem_buffer[undef_row], bytesperrow); + 8016fe4: 6823 ldr r3, [r4, #0] + while (undef_row < end_row) { + 8016fe6: d305 bcc.n 8016ff4 + if (writable) + 8016fe8: f1b8 0f00 cmp.w r8, #0 + 8016fec: d10d bne.n 801700a + 8016fee: e00e b.n 801700e + 8016ff0: 462e mov r6, r5 + 8016ff2: e7ee b.n 8016fd2 + FMEMZERO((void FAR *) ptr->mem_buffer[undef_row], bytesperrow); + 8016ff4: f853 0026 ldr.w r0, [r3, r6, lsl #2] + 8016ff8: 464a mov r2, r9 + 8016ffa: 2100 movs r1, #0 + undef_row++; + 8016ffc: 3601 adds r6, #1 + FMEMZERO((void FAR *) ptr->mem_buffer[undef_row], bytesperrow); + 8016ffe: f01d fcdd bl 80349bc + undef_row++; + 8017002: e7ee b.n 8016fe2 + if (! writable) /* reader looking at undefined data */ + 8017004: f1b8 0f00 cmp.w r8, #0 + 8017008: d009 beq.n 801701e + ptr->dirty = TRUE; + 801700a: 2301 movs r3, #1 + 801700c: 6263 str r3, [r4, #36] ; 0x24 + return ptr->mem_buffer + (start_row - ptr->cur_start_row); + 801700e: 69a3 ldr r3, [r4, #24] + 8017010: 6820 ldr r0, [r4, #0] + 8017012: 1aed subs r5, r5, r3 +} + 8017014: eb00 0085 add.w r0, r0, r5, lsl #2 + 8017018: b003 add sp, #12 + 801701a: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} + ERREXIT(cinfo, JERR_BAD_VIRTUAL_ACCESS); + 801701e: 6803 ldr r3, [r0, #0] + 8017020: 2217 movs r2, #23 + 8017022: 615a str r2, [r3, #20] + 8017024: 681b ldr r3, [r3, #0] + 8017026: 4798 blx r3 + if (writable) + 8017028: e7f1 b.n 801700e + +0801702a : + if (sizeofobject > (size_t) (MAX_ALLOC_CHUNK-SIZEOF(large_pool_hdr))) + 801702a: f64f 73f0 movw r3, #65520 ; 0xfff0 + 801702e: 429a cmp r2, r3 +{ + 8017030: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} + 8017034: 4606 mov r6, r0 + 8017036: 4688 mov r8, r1 + 8017038: 4614 mov r4, r2 + my_mem_ptr mem = (my_mem_ptr) cinfo->mem; + 801703a: 6847 ldr r7, [r0, #4] + if (sizeofobject > (size_t) (MAX_ALLOC_CHUNK-SIZEOF(large_pool_hdr))) + 801703c: d902 bls.n 8017044 + out_of_memory(cinfo, 3); /* request exceeds malloc's ability */ + 801703e: 2103 movs r1, #3 + 8017040: f7ff fe12 bl 8016c68 + if (odd_bytes > 0) + 8017044: f014 0307 ands.w r3, r4, #7 + sizeofobject += SIZEOF(ALIGN_TYPE) - odd_bytes; + 8017048: bf1c itt ne + 801704a: 3408 addne r4, #8 + 801704c: 1ae4 subne r4, r4, r3 + if (pool_id < 0 || pool_id >= JPOOL_NUMPOOLS) + 801704e: f1b8 0f01 cmp.w r8, #1 + 8017052: d906 bls.n 8017062 + ERREXIT1(cinfo, JERR_BAD_POOL_ID, pool_id); /* safety check */ + 8017054: 6833 ldr r3, [r6, #0] + 8017056: 220f movs r2, #15 + 8017058: 4630 mov r0, r6 + 801705a: e9c3 2805 strd r2, r8, [r3, #20] + 801705e: 681b ldr r3, [r3, #0] + 8017060: 4798 blx r3 + hdr_ptr = (large_pool_ptr) jpeg_get_large(cinfo, sizeofobject + + 8017062: f104 0110 add.w r1, r4, #16 + 8017066: 4630 mov r0, r6 + 8017068: f000 fa54 bl 8017514 + if (hdr_ptr == NULL) + 801706c: 4605 mov r5, r0 + 801706e: b918 cbnz r0, 8017078 + out_of_memory(cinfo, 4); /* jpeg_get_large failed */ + 8017070: 2104 movs r1, #4 + 8017072: 4630 mov r0, r6 + 8017074: f7ff fdf8 bl 8016c68 + mem->total_space_allocated += sizeofobject + SIZEOF(large_pool_hdr); + 8017078: 6cfb ldr r3, [r7, #76] ; 0x4c + 801707a: eb07 0188 add.w r1, r7, r8, lsl #2 +} + 801707e: f105 0010 add.w r0, r5, #16 + mem->total_space_allocated += sizeofobject + SIZEOF(large_pool_hdr); + 8017082: 3310 adds r3, #16 + 8017084: 4423 add r3, r4 + 8017086: 64fb str r3, [r7, #76] ; 0x4c + hdr_ptr->hdr.next = mem->large_list[pool_id]; + 8017088: 6bcb ldr r3, [r1, #60] ; 0x3c + hdr_ptr->hdr.bytes_used = sizeofobject; + 801708a: e9c5 3400 strd r3, r4, [r5] + hdr_ptr->hdr.bytes_left = 0; + 801708e: 2300 movs r3, #0 + 8017090: 60ab str r3, [r5, #8] + mem->large_list[pool_id] = hdr_ptr; + 8017092: 63cd str r5, [r1, #60] ; 0x3c +} + 8017094: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + +08017098 : +{ + 8017098: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} + ((long) blocksperrow * SIZEOF(JBLOCK)); + 801709c: 01d7 lsls r7, r2, #7 +{ + 801709e: 461d mov r5, r3 + ltemp = (MAX_ALLOC_CHUNK-SIZEOF(large_pool_hdr)) / + 80170a0: f64f 73f0 movw r3, #65520 ; 0xfff0 +{ + 80170a4: 4680 mov r8, r0 + 80170a6: 468a mov sl, r1 + my_mem_ptr mem = (my_mem_ptr) cinfo->mem; + 80170a8: 6846 ldr r6, [r0, #4] + if (ltemp <= 0) + 80170aa: 429f cmp r7, r3 + ltemp = (MAX_ALLOC_CHUNK-SIZEOF(large_pool_hdr)) / + 80170ac: fbb3 f4f7 udiv r4, r3, r7 + if (ltemp <= 0) + 80170b0: d904 bls.n 80170bc + ERREXIT(cinfo, JERR_WIDTH_OVERFLOW); + 80170b2: 6803 ldr r3, [r0, #0] + 80170b4: 2248 movs r2, #72 ; 0x48 + 80170b6: 615a str r2, [r3, #20] + 80170b8: 681b ldr r3, [r3, #0] + 80170ba: 4798 blx r3 + if (ltemp < (long) numrows) + 80170bc: 42ac cmp r4, r5 + result = (JBLOCKARRAY) alloc_small(cinfo, pool_id, + 80170be: ea4f 0285 mov.w r2, r5, lsl #2 + 80170c2: 4651 mov r1, sl + 80170c4: 4640 mov r0, r8 + if (ltemp < (long) numrows) + 80170c6: bfa8 it ge + 80170c8: 462c movge r4, r5 + mem->last_rowsperchunk = rowsperchunk; + 80170ca: 6534 str r4, [r6, #80] ; 0x50 + currow = 0; + 80170cc: 2600 movs r6, #0 + result = (JBLOCKARRAY) alloc_small(cinfo, pool_id, + 80170ce: f7ff fe15 bl 8016cfc + 80170d2: 4681 mov r9, r0 + while (currow < numrows) { + 80170d4: 42ae cmp r6, r5 + 80170d6: d302 bcc.n 80170de +} + 80170d8: 4648 mov r0, r9 + 80170da: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + rowsperchunk = MIN(rowsperchunk, numrows - currow); + 80170de: 1bab subs r3, r5, r6 + workspace = (JBLOCKROW) alloc_large(cinfo, pool_id, + 80170e0: 4651 mov r1, sl + 80170e2: 4640 mov r0, r8 + rowsperchunk = MIN(rowsperchunk, numrows - currow); + 80170e4: 429c cmp r4, r3 + 80170e6: bf28 it cs + 80170e8: 461c movcs r4, r3 + workspace = (JBLOCKROW) alloc_large(cinfo, pool_id, + 80170ea: fb04 f207 mul.w r2, r4, r7 + 80170ee: f7ff ff9c bl 801702a + for (i = rowsperchunk; i > 0; i--) { + 80170f2: eb09 0386 add.w r3, r9, r6, lsl #2 + 80170f6: 4426 add r6, r4 + 80170f8: eb09 0286 add.w r2, r9, r6, lsl #2 + 80170fc: 4293 cmp r3, r2 + 80170fe: d0e9 beq.n 80170d4 + result[currow++] = workspace; + 8017100: f843 0b04 str.w r0, [r3], #4 + workspace += blocksperrow; + 8017104: 4438 add r0, r7 + for (i = rowsperchunk; i > 0; i--) { + 8017106: e7f9 b.n 80170fc + +08017108 : +{ + 8017108: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} + 801710c: 461d mov r5, r3 + ltemp = (MAX_ALLOC_CHUNK-SIZEOF(large_pool_hdr)) / + 801710e: f64f 73f0 movw r3, #65520 ; 0xfff0 +{ + 8017112: 4607 mov r7, r0 + 8017114: 468a mov sl, r1 + if (ltemp <= 0) + 8017116: 429a cmp r2, r3 +{ + 8017118: 4690 mov r8, r2 + my_mem_ptr mem = (my_mem_ptr) cinfo->mem; + 801711a: 6846 ldr r6, [r0, #4] + ltemp = (MAX_ALLOC_CHUNK-SIZEOF(large_pool_hdr)) / + 801711c: fbb3 f4f2 udiv r4, r3, r2 + if (ltemp <= 0) + 8017120: d904 bls.n 801712c + ERREXIT(cinfo, JERR_WIDTH_OVERFLOW); + 8017122: 6803 ldr r3, [r0, #0] + 8017124: 2248 movs r2, #72 ; 0x48 + 8017126: 615a str r2, [r3, #20] + 8017128: 681b ldr r3, [r3, #0] + 801712a: 4798 blx r3 + if (ltemp < (long) numrows) + 801712c: 42ac cmp r4, r5 + result = (JSAMPARRAY) alloc_small(cinfo, pool_id, + 801712e: ea4f 0285 mov.w r2, r5, lsl #2 + 8017132: 4651 mov r1, sl + 8017134: 4638 mov r0, r7 + if (ltemp < (long) numrows) + 8017136: bfa8 it ge + 8017138: 462c movge r4, r5 + mem->last_rowsperchunk = rowsperchunk; + 801713a: 6534 str r4, [r6, #80] ; 0x50 + currow = 0; + 801713c: 2600 movs r6, #0 + result = (JSAMPARRAY) alloc_small(cinfo, pool_id, + 801713e: f7ff fddd bl 8016cfc + 8017142: 4681 mov r9, r0 + while (currow < numrows) { + 8017144: 42ae cmp r6, r5 + 8017146: d302 bcc.n 801714e +} + 8017148: 4648 mov r0, r9 + 801714a: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + rowsperchunk = MIN(rowsperchunk, numrows - currow); + 801714e: 1bab subs r3, r5, r6 + workspace = (JSAMPROW) alloc_large(cinfo, pool_id, + 8017150: 4651 mov r1, sl + 8017152: 4638 mov r0, r7 + rowsperchunk = MIN(rowsperchunk, numrows - currow); + 8017154: 429c cmp r4, r3 + 8017156: bf28 it cs + 8017158: 461c movcs r4, r3 + workspace = (JSAMPROW) alloc_large(cinfo, pool_id, + 801715a: fb04 f208 mul.w r2, r4, r8 + 801715e: f7ff ff64 bl 801702a + for (i = rowsperchunk; i > 0; i--) { + 8017162: eb09 0386 add.w r3, r9, r6, lsl #2 + 8017166: 4426 add r6, r4 + 8017168: eb09 0286 add.w r2, r9, r6, lsl #2 + 801716c: 4293 cmp r3, r2 + 801716e: d0e9 beq.n 8017144 + result[currow++] = workspace; + 8017170: f843 0b04 str.w r0, [r3], #4 + workspace += samplesperrow; + 8017174: 4440 add r0, r8 + for (i = rowsperchunk; i > 0; i--) { + 8017176: e7f9 b.n 801716c + +08017178 : +{ + 8017178: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} + my_mem_ptr mem = (my_mem_ptr) cinfo->mem; + 801717c: f8d0 8004 ldr.w r8, [r0, #4] + maximum_space = 0; + 8017180: 2500 movs r5, #0 +{ + 8017182: 4607 mov r7, r0 + for (sptr = mem->virt_sarray_list; sptr != NULL; sptr = sptr->next) { + 8017184: f8d8 3044 ldr.w r3, [r8, #68] ; 0x44 + space_per_minheight = 0; + 8017188: 462e mov r6, r5 + for (sptr = mem->virt_sarray_list; sptr != NULL; sptr = sptr->next) { + 801718a: bb03 cbnz r3, 80171ce + for (bptr = mem->virt_barray_list; bptr != NULL; bptr = bptr->next) { + 801718c: f8d8 3048 ldr.w r3, [r8, #72] ; 0x48 + 8017190: bb43 cbnz r3, 80171e4 + if (space_per_minheight <= 0) + 8017192: 2e00 cmp r6, #0 + 8017194: dd19 ble.n 80171ca + avail_mem = jpeg_mem_available(cinfo, space_per_minheight, maximum_space, + 8017196: f8d8 304c ldr.w r3, [r8, #76] ; 0x4c + 801719a: 462a mov r2, r5 + 801719c: 4631 mov r1, r6 + 801719e: 4638 mov r0, r7 + 80171a0: f000 f9be bl 8017520 + if (avail_mem >= maximum_space) + 80171a4: 4285 cmp r5, r0 + 80171a6: dd2a ble.n 80171fe + max_minheights = avail_mem / space_per_minheight; + 80171a8: fb90 f6f6 sdiv r6, r0, r6 + 80171ac: 2e01 cmp r6, #1 + 80171ae: bfb8 it lt + 80171b0: 2601 movlt r6, #1 + for (sptr = mem->virt_sarray_list; sptr != NULL; sptr = sptr->next) { + 80171b2: f8d8 4044 ldr.w r4, [r8, #68] ; 0x44 + sptr->mem_buffer = alloc_sarray(cinfo, JPOOL_IMAGE, + 80171b6: f04f 0901 mov.w r9, #1 + sptr->cur_start_row = 0; + 80171ba: 2500 movs r5, #0 + for (sptr = mem->virt_sarray_list; sptr != NULL; sptr = sptr->next) { + 80171bc: bb0c cbnz r4, 8017202 + for (bptr = mem->virt_barray_list; bptr != NULL; bptr = bptr->next) { + 80171be: f8d8 5048 ldr.w r5, [r8, #72] ; 0x48 + bptr->mem_buffer = alloc_barray(cinfo, JPOOL_IMAGE, + 80171c2: f04f 0901 mov.w r9, #1 + for (bptr = mem->virt_barray_list; bptr != NULL; bptr = bptr->next) { + 80171c6: 2d00 cmp r5, #0 + 80171c8: d141 bne.n 801724e +} + 80171ca: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} + if (sptr->mem_buffer == NULL) { /* if not realized yet */ + 80171ce: 681a ldr r2, [r3, #0] + 80171d0: b932 cbnz r2, 80171e0 + space_per_minheight += (long) sptr->maxaccess * + 80171d2: e9d3 2102 ldrd r2, r1, [r3, #8] + 80171d6: fb01 6602 mla r6, r1, r2, r6 + maximum_space += (long) sptr->rows_in_array * + 80171da: 6859 ldr r1, [r3, #4] + 80171dc: fb01 5502 mla r5, r1, r2, r5 + for (sptr = mem->virt_sarray_list; sptr != NULL; sptr = sptr->next) { + 80171e0: 6adb ldr r3, [r3, #44] ; 0x2c + 80171e2: e7d2 b.n 801718a + if (bptr->mem_buffer == NULL) { /* if not realized yet */ + 80171e4: 681a ldr r2, [r3, #0] + 80171e6: b942 cbnz r2, 80171fa + space_per_minheight += (long) bptr->maxaccess * + 80171e8: e9d3 2102 ldrd r2, r1, [r3, #8] + 80171ec: 4351 muls r1, r2 + 80171ee: eb06 16c1 add.w r6, r6, r1, lsl #7 + maximum_space += (long) bptr->rows_in_array * + 80171f2: 6859 ldr r1, [r3, #4] + 80171f4: 434a muls r2, r1 + 80171f6: eb05 15c2 add.w r5, r5, r2, lsl #7 + for (bptr = mem->virt_barray_list; bptr != NULL; bptr = bptr->next) { + 80171fa: 6adb ldr r3, [r3, #44] ; 0x2c + 80171fc: e7c8 b.n 8017190 + max_minheights = 1000000000L; + 80171fe: 4e27 ldr r6, [pc, #156] ; (801729c ) + 8017200: e7d7 b.n 80171b2 + if (sptr->mem_buffer == NULL) { /* if not realized yet */ + 8017202: 6823 ldr r3, [r4, #0] + 8017204: b9b3 cbnz r3, 8017234 + minheights = ((long) sptr->rows_in_array - 1L) / sptr->maxaccess + 1L; + 8017206: 6862 ldr r2, [r4, #4] + (long) sptr->samplesperrow * + 8017208: e9d4 0102 ldrd r0, r1, [r4, #8] + minheights = ((long) sptr->rows_in_array - 1L) / sptr->maxaccess + 1L; + 801720c: 1e53 subs r3, r2, #1 + 801720e: fbb3 f3f1 udiv r3, r3, r1 + 8017212: 3301 adds r3, #1 + if (minheights <= max_minheights) { + 8017214: 429e cmp r6, r3 + 8017216: db0f blt.n 8017238 + sptr->rows_in_mem = sptr->rows_in_array; + 8017218: 6122 str r2, [r4, #16] + sptr->mem_buffer = alloc_sarray(cinfo, JPOOL_IMAGE, + 801721a: 6923 ldr r3, [r4, #16] + 801721c: 2101 movs r1, #1 + 801721e: 68a2 ldr r2, [r4, #8] + 8017220: 4638 mov r0, r7 + 8017222: f7ff ff71 bl 8017108 + sptr->rowsperchunk = mem->last_rowsperchunk; + 8017226: f8d8 3050 ldr.w r3, [r8, #80] ; 0x50 + sptr->mem_buffer = alloc_sarray(cinfo, JPOOL_IMAGE, + 801722a: 6020 str r0, [r4, #0] + sptr->first_undef_row = 0; + 801722c: 61e5 str r5, [r4, #28] + sptr->dirty = FALSE; + 801722e: 6265 str r5, [r4, #36] ; 0x24 + sptr->cur_start_row = 0; + 8017230: e9c4 3505 strd r3, r5, [r4, #20] + for (sptr = mem->virt_sarray_list; sptr != NULL; sptr = sptr->next) { + 8017234: 6ae4 ldr r4, [r4, #44] ; 0x2c + 8017236: e7c1 b.n 80171bc + sptr->rows_in_mem = (JDIMENSION) (max_minheights * sptr->maxaccess); + 8017238: 4371 muls r1, r6 + jpeg_open_backing_store(cinfo, & sptr->b_s_info, + 801723a: 4342 muls r2, r0 + 801723c: 4638 mov r0, r7 + sptr->rows_in_mem = (JDIMENSION) (max_minheights * sptr->maxaccess); + 801723e: 6121 str r1, [r4, #16] + jpeg_open_backing_store(cinfo, & sptr->b_s_info, + 8017240: f104 0130 add.w r1, r4, #48 ; 0x30 + 8017244: f000 f96e bl 8017524 + sptr->b_s_open = TRUE; + 8017248: f8c4 9028 str.w r9, [r4, #40] ; 0x28 + 801724c: e7e5 b.n 801721a + if (bptr->mem_buffer == NULL) { /* if not realized yet */ + 801724e: 682b ldr r3, [r5, #0] + 8017250: b9b3 cbnz r3, 8017280 + minheights = ((long) bptr->rows_in_array - 1L) / bptr->maxaccess + 1L; + 8017252: 6868 ldr r0, [r5, #4] + (long) bptr->blocksperrow * + 8017254: e9d5 2102 ldrd r2, r1, [r5, #8] + minheights = ((long) bptr->rows_in_array - 1L) / bptr->maxaccess + 1L; + 8017258: 1e43 subs r3, r0, #1 + 801725a: fbb3 f3f1 udiv r3, r3, r1 + 801725e: 3301 adds r3, #1 + if (minheights <= max_minheights) { + 8017260: 429e cmp r6, r3 + 8017262: db0f blt.n 8017284 + bptr->rows_in_mem = bptr->rows_in_array; + 8017264: 6128 str r0, [r5, #16] + bptr->mem_buffer = alloc_barray(cinfo, JPOOL_IMAGE, + 8017266: 692b ldr r3, [r5, #16] + 8017268: 2101 movs r1, #1 + 801726a: 68aa ldr r2, [r5, #8] + 801726c: 4638 mov r0, r7 + 801726e: f7ff ff13 bl 8017098 + bptr->rowsperchunk = mem->last_rowsperchunk; + 8017272: f8d8 3050 ldr.w r3, [r8, #80] ; 0x50 + bptr->mem_buffer = alloc_barray(cinfo, JPOOL_IMAGE, + 8017276: 6028 str r0, [r5, #0] + bptr->first_undef_row = 0; + 8017278: 61ec str r4, [r5, #28] + bptr->dirty = FALSE; + 801727a: 626c str r4, [r5, #36] ; 0x24 + bptr->cur_start_row = 0; + 801727c: e9c5 3405 strd r3, r4, [r5, #20] + for (bptr = mem->virt_barray_list; bptr != NULL; bptr = bptr->next) { + 8017280: 6aed ldr r5, [r5, #44] ; 0x2c + 8017282: e7a0 b.n 80171c6 + bptr->rows_in_mem = (JDIMENSION) (max_minheights * bptr->maxaccess); + 8017284: 4371 muls r1, r6 + (long) bptr->rows_in_array * + 8017286: 4342 muls r2, r0 + jpeg_open_backing_store(cinfo, & bptr->b_s_info, + 8017288: 4638 mov r0, r7 + bptr->rows_in_mem = (JDIMENSION) (max_minheights * bptr->maxaccess); + 801728a: 6129 str r1, [r5, #16] + jpeg_open_backing_store(cinfo, & bptr->b_s_info, + 801728c: f105 0130 add.w r1, r5, #48 ; 0x30 + 8017290: 01d2 lsls r2, r2, #7 + 8017292: f000 f947 bl 8017524 + bptr->b_s_open = TRUE; + 8017296: f8c5 9028 str.w r9, [r5, #40] ; 0x28 + 801729a: e7e4 b.n 8017266 + 801729c: 3b9aca00 .word 0x3b9aca00 + +080172a0 : +{ + 80172a0: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + JDIMENSION end_row = start_row + num_rows; + 80172a4: eb02 0803 add.w r8, r2, r3 +{ + 80172a8: 4615 mov r5, r2 + if (end_row > ptr->rows_in_array || num_rows > ptr->maxaccess || + 80172aa: 684a ldr r2, [r1, #4] +{ + 80172ac: b087 sub sp, #28 + 80172ae: 460c mov r4, r1 + if (end_row > ptr->rows_in_array || num_rows > ptr->maxaccess || + 80172b0: 4542 cmp r2, r8 +{ + 80172b2: f8dd a040 ldr.w sl, [sp, #64] ; 0x40 + if (end_row > ptr->rows_in_array || num_rows > ptr->maxaccess || + 80172b6: d304 bcc.n 80172c2 + 80172b8: 68ca ldr r2, [r1, #12] + 80172ba: 429a cmp r2, r3 + 80172bc: d301 bcc.n 80172c2 + 80172be: 680b ldr r3, [r1, #0] + 80172c0: b933 cbnz r3, 80172d0 + ERREXIT(cinfo, JERR_BAD_VIRTUAL_ACCESS); + 80172c2: 6803 ldr r3, [r0, #0] + 80172c4: 2217 movs r2, #23 + 80172c6: 9003 str r0, [sp, #12] + 80172c8: 615a str r2, [r3, #20] + 80172ca: 681b ldr r3, [r3, #0] + 80172cc: 4798 blx r3 + 80172ce: 9803 ldr r0, [sp, #12] + if (start_row < ptr->cur_start_row || + 80172d0: 69a3 ldr r3, [r4, #24] + 80172d2: 42ab cmp r3, r5 + 80172d4: d80c bhi.n 80172f0 + end_row > ptr->cur_start_row+ptr->rows_in_mem) { + 80172d6: 6922 ldr r2, [r4, #16] + 80172d8: 4413 add r3, r2 + if (start_row < ptr->cur_start_row || + 80172da: 4543 cmp r3, r8 + 80172dc: d308 bcc.n 80172f0 + if (ptr->first_undef_row < end_row) { + 80172de: 69e6 ldr r6, [r4, #28] + 80172e0: 4546 cmp r6, r8 + 80172e2: f0c0 8083 bcc.w 80173ec + if (writable) + 80172e6: f1ba 0f00 cmp.w sl, #0 + 80172ea: f040 80aa bne.w 8017442 + 80172ee: e0aa b.n 8017446 + if (! ptr->b_s_open) + 80172f0: 6aa3 ldr r3, [r4, #40] ; 0x28 + 80172f2: b933 cbnz r3, 8017302 + ERREXIT(cinfo, JERR_VIRTUAL_BUG); + 80172f4: 6803 ldr r3, [r0, #0] + 80172f6: 2247 movs r2, #71 ; 0x47 + 80172f8: 9003 str r0, [sp, #12] + 80172fa: 615a str r2, [r3, #20] + 80172fc: 681b ldr r3, [r3, #0] + 80172fe: 4798 blx r3 + 8017300: 9803 ldr r0, [sp, #12] + if (ptr->dirty) { + 8017302: 6a63 ldr r3, [r4, #36] ; 0x24 + 8017304: b17b cbz r3, 8017326 + bytesperrow = (long) ptr->samplesperrow * SIZEOF(JSAMPLE); + 8017306: f8d4 b008 ldr.w fp, [r4, #8] + for (i = 0; i < (long) ptr->rows_in_mem; i += ptr->rowsperchunk) { + 801730a: f04f 0900 mov.w r9, #0 + file_offset = ptr->cur_start_row * bytesperrow; + 801730e: 69a3 ldr r3, [r4, #24] + (*ptr->b_s_info.write_backing_store) (cinfo, & ptr->b_s_info, + 8017310: f104 0130 add.w r1, r4, #48 ; 0x30 + file_offset = ptr->cur_start_row * bytesperrow; + 8017314: fb03 f30b mul.w r3, r3, fp + for (i = 0; i < (long) ptr->rows_in_mem; i += ptr->rowsperchunk) { + 8017318: 6922 ldr r2, [r4, #16] + 801731a: 454a cmp r2, r9 + rows = MIN(rows, (long) ptr->first_undef_row - thisrow); + 801731c: e9d4 7e06 ldrd r7, lr, [r4, #24] + for (i = 0; i < (long) ptr->rows_in_mem; i += ptr->rowsperchunk) { + 8017320: dc3d bgt.n 801739e + ptr->dirty = FALSE; + 8017322: 2300 movs r3, #0 + 8017324: 6263 str r3, [r4, #36] ; 0x24 + if (start_row > ptr->cur_start_row) { + 8017326: 69a2 ldr r2, [r4, #24] + for (i = 0; i < (long) ptr->rows_in_mem; i += ptr->rowsperchunk) { + 8017328: f04f 0900 mov.w r9, #0 + ltemp = (long) end_row - (long) ptr->rows_in_mem; + 801732c: 6923 ldr r3, [r4, #16] + (*ptr->b_s_info.read_backing_store) (cinfo, & ptr->b_s_info, + 801732e: f104 0130 add.w r1, r4, #48 ; 0x30 + if (start_row > ptr->cur_start_row) { + 8017332: 42aa cmp r2, r5 + bytesperrow = (long) ptr->samplesperrow * SIZEOF(JSAMPLE); + 8017334: f8d4 b008 ldr.w fp, [r4, #8] + ltemp = (long) end_row - (long) ptr->rows_in_mem; + 8017338: bf2a itet cs + 801733a: eba8 0303 subcs.w r3, r8, r3 + 801733e: 462b movcc r3, r5 + ptr->cur_start_row = (JDIMENSION) ltemp; + 8017340: ea23 73e3 biccs.w r3, r3, r3, asr #31 + 8017344: 61a3 str r3, [r4, #24] + file_offset = ptr->cur_start_row * bytesperrow; + 8017346: fb0b f303 mul.w r3, fp, r3 + for (i = 0; i < (long) ptr->rows_in_mem; i += ptr->rowsperchunk) { + 801734a: 6922 ldr r2, [r4, #16] + rows = MIN(rows, (long) ptr->first_undef_row - thisrow); + 801734c: 69e6 ldr r6, [r4, #28] + for (i = 0; i < (long) ptr->rows_in_mem; i += ptr->rowsperchunk) { + 801734e: 454a cmp r2, r9 + 8017350: ddc5 ble.n 80172de + rows = MIN((long) ptr->rowsperchunk, (long) ptr->rows_in_mem - i); + 8017352: eba2 0209 sub.w r2, r2, r9 + 8017356: 6967 ldr r7, [r4, #20] + 8017358: 42ba cmp r2, r7 + 801735a: bfa8 it ge + 801735c: 463a movge r2, r7 + thisrow = (long) ptr->cur_start_row + i; + 801735e: 69a7 ldr r7, [r4, #24] + 8017360: 444f add r7, r9 + rows = MIN(rows, (long) ptr->first_undef_row - thisrow); + 8017362: eba6 0c07 sub.w ip, r6, r7 + 8017366: 4594 cmp ip, r2 + 8017368: bfa8 it ge + 801736a: 4694 movge ip, r2 + rows = MIN(rows, (long) ptr->rows_in_array - thisrow); + 801736c: 6862 ldr r2, [r4, #4] + 801736e: 1bd6 subs r6, r2, r7 + 8017370: 4566 cmp r6, ip + 8017372: bfa8 it ge + 8017374: 4666 movge r6, ip + if (rows <= 0) /* this chunk might be past end of file! */ + 8017376: 2e00 cmp r6, #0 + 8017378: ddb1 ble.n 80172de + byte_count = rows * bytesperrow; + 801737a: fb06 f60b mul.w r6, r6, fp + (*ptr->b_s_info.read_backing_store) (cinfo, & ptr->b_s_info, + 801737e: 6822 ldr r2, [r4, #0] + 8017380: 6b27 ldr r7, [r4, #48] ; 0x30 + 8017382: 9600 str r6, [sp, #0] + 8017384: f852 2029 ldr.w r2, [r2, r9, lsl #2] + 8017388: 9305 str r3, [sp, #20] + 801738a: e9cd 0103 strd r0, r1, [sp, #12] + 801738e: 47b8 blx r7 + file_offset += byte_count; + 8017390: 9b05 ldr r3, [sp, #20] + for (i = 0; i < (long) ptr->rows_in_mem; i += ptr->rowsperchunk) { + 8017392: 6962 ldr r2, [r4, #20] + file_offset += byte_count; + 8017394: 4433 add r3, r6 + for (i = 0; i < (long) ptr->rows_in_mem; i += ptr->rowsperchunk) { + 8017396: 4491 add r9, r2 + 8017398: e9dd 0103 ldrd r0, r1, [sp, #12] + 801739c: e7d5 b.n 801734a + rows = MIN((long) ptr->rowsperchunk, (long) ptr->rows_in_mem - i); + 801739e: eba2 0209 sub.w r2, r2, r9 + 80173a2: 6966 ldr r6, [r4, #20] + thisrow = (long) ptr->cur_start_row + i; + 80173a4: eb07 0c09 add.w ip, r7, r9 + rows = MIN((long) ptr->rowsperchunk, (long) ptr->rows_in_mem - i); + 80173a8: 42b2 cmp r2, r6 + 80173aa: bfa8 it ge + 80173ac: 4632 movge r2, r6 + rows = MIN(rows, (long) ptr->first_undef_row - thisrow); + 80173ae: ebae 060c sub.w r6, lr, ip + 80173b2: 4296 cmp r6, r2 + 80173b4: bfa8 it ge + 80173b6: 4616 movge r6, r2 + rows = MIN(rows, (long) ptr->rows_in_array - thisrow); + 80173b8: 6862 ldr r2, [r4, #4] + 80173ba: eba2 070c sub.w r7, r2, ip + 80173be: 42b7 cmp r7, r6 + 80173c0: bfa8 it ge + 80173c2: 4637 movge r7, r6 + if (rows <= 0) /* this chunk might be past end of file! */ + 80173c4: 2f00 cmp r7, #0 + 80173c6: ddac ble.n 8017322 + byte_count = rows * bytesperrow; + 80173c8: fb07 f70b mul.w r7, r7, fp + (*ptr->b_s_info.write_backing_store) (cinfo, & ptr->b_s_info, + 80173cc: 6822 ldr r2, [r4, #0] + 80173ce: 6b66 ldr r6, [r4, #52] ; 0x34 + 80173d0: 9700 str r7, [sp, #0] + 80173d2: f852 2029 ldr.w r2, [r2, r9, lsl #2] + 80173d6: 9305 str r3, [sp, #20] + 80173d8: e9cd 0103 strd r0, r1, [sp, #12] + 80173dc: 47b0 blx r6 + file_offset += byte_count; + 80173de: 9b05 ldr r3, [sp, #20] + for (i = 0; i < (long) ptr->rows_in_mem; i += ptr->rowsperchunk) { + 80173e0: 6962 ldr r2, [r4, #20] + file_offset += byte_count; + 80173e2: 443b add r3, r7 + for (i = 0; i < (long) ptr->rows_in_mem; i += ptr->rowsperchunk) { + 80173e4: 4491 add r9, r2 + 80173e6: e9dd 0103 ldrd r0, r1, [sp, #12] + 80173ea: e795 b.n 8017318 + if (ptr->first_undef_row < start_row) { + 80173ec: 42ae cmp r6, r5 + 80173ee: d20d bcs.n 801740c + if (writable) /* writer skipped over a section of array */ + 80173f0: f1ba 0f00 cmp.w sl, #0 + 80173f4: d020 beq.n 8017438 + ERREXIT(cinfo, JERR_BAD_VIRTUAL_ACCESS); + 80173f6: 6803 ldr r3, [r0, #0] + 80173f8: 2217 movs r2, #23 + 80173fa: 9003 str r0, [sp, #12] + 80173fc: 462e mov r6, r5 + 80173fe: 615a str r2, [r3, #20] + 8017400: 681b ldr r3, [r3, #0] + 8017402: 4798 blx r3 + if (writable) + 8017404: 9803 ldr r0, [sp, #12] + ptr->first_undef_row = end_row; + 8017406: f8c4 801c str.w r8, [r4, #28] + 801740a: e002 b.n 8017412 + if (writable) + 801740c: f1ba 0f00 cmp.w sl, #0 + 8017410: d1f9 bne.n 8017406 + if (ptr->pre_zero) { + 8017412: 6a22 ldr r2, [r4, #32] + 8017414: b192 cbz r2, 801743c + undef_row -= ptr->cur_start_row; /* make indexes relative to buffer */ + 8017416: 69a1 ldr r1, [r4, #24] + size_t bytesperrow = (size_t) ptr->samplesperrow * SIZEOF(JSAMPLE); + 8017418: 68a7 ldr r7, [r4, #8] + undef_row -= ptr->cur_start_row; /* make indexes relative to buffer */ + 801741a: 1a76 subs r6, r6, r1 + end_row -= ptr->cur_start_row; + 801741c: eba8 0801 sub.w r8, r8, r1 + while (undef_row < end_row) { + 8017420: 4546 cmp r6, r8 + FMEMZERO((void FAR *) ptr->mem_buffer[undef_row], bytesperrow); + 8017422: 6823 ldr r3, [r4, #0] + while (undef_row < end_row) { + 8017424: f4bf af5f bcs.w 80172e6 + FMEMZERO((void FAR *) ptr->mem_buffer[undef_row], bytesperrow); + 8017428: f853 0026 ldr.w r0, [r3, r6, lsl #2] + 801742c: 463a mov r2, r7 + 801742e: 2100 movs r1, #0 + undef_row++; + 8017430: 3601 adds r6, #1 + FMEMZERO((void FAR *) ptr->mem_buffer[undef_row], bytesperrow); + 8017432: f01d fac3 bl 80349bc + undef_row++; + 8017436: e7f3 b.n 8017420 + 8017438: 462e mov r6, r5 + 801743a: e7ea b.n 8017412 + if (! writable) /* reader looking at undefined data */ + 801743c: f1ba 0f00 cmp.w sl, #0 + 8017440: d009 beq.n 8017456 + ptr->dirty = TRUE; + 8017442: 2301 movs r3, #1 + 8017444: 6263 str r3, [r4, #36] ; 0x24 + return ptr->mem_buffer + (start_row - ptr->cur_start_row); + 8017446: 69a3 ldr r3, [r4, #24] + 8017448: 6820 ldr r0, [r4, #0] + 801744a: 1aed subs r5, r5, r3 +} + 801744c: eb00 0085 add.w r0, r0, r5, lsl #2 + 8017450: b007 add sp, #28 + 8017452: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + ERREXIT(cinfo, JERR_BAD_VIRTUAL_ACCESS); + 8017456: 6803 ldr r3, [r0, #0] + 8017458: 2217 movs r2, #23 + 801745a: 615a str r2, [r3, #20] + 801745c: 681b ldr r3, [r3, #0] + 801745e: 4798 blx r3 + if (writable) + 8017460: e7f1 b.n 8017446 + ... + +08017464 : + my_mem_ptr mem; + long max_to_use; + int pool; + size_t test_mac; + + cinfo->mem = NULL; /* for safety if init fails */ + 8017464: 2300 movs r3, #0 +{ + 8017466: b570 push {r4, r5, r6, lr} + 8017468: 4605 mov r5, r0 + cinfo->mem = NULL; /* for safety if init fails */ + 801746a: 6043 str r3, [r0, #4] + test_mac = (size_t) MAX_ALLOC_CHUNK; + if ((long) test_mac != MAX_ALLOC_CHUNK || + (MAX_ALLOC_CHUNK % SIZEOF(ALIGN_TYPE)) != 0) + ERREXIT(cinfo, JERR_BAD_ALLOC_CHUNK); + + max_to_use = jpeg_mem_init(cinfo); /* system-dependent initialization */ + 801746c: f000 f85f bl 801752e + + /* Attempt to allocate memory manager's control block */ + mem = (my_mem_ptr) jpeg_get_small(cinfo, SIZEOF(my_memory_mgr)); + 8017470: 2154 movs r1, #84 ; 0x54 + max_to_use = jpeg_mem_init(cinfo); /* system-dependent initialization */ + 8017472: 4606 mov r6, r0 + mem = (my_mem_ptr) jpeg_get_small(cinfo, SIZEOF(my_memory_mgr)); + 8017474: 4628 mov r0, r5 + 8017476: f000 f847 bl 8017508 + + if (mem == NULL) { + 801747a: 4604 mov r4, r0 + 801747c: b948 cbnz r0, 8017492 + jpeg_mem_term(cinfo); /* system-dependent cleanup */ + 801747e: 4628 mov r0, r5 + 8017480: f000 f857 bl 8017532 + ERREXIT1(cinfo, JERR_OUT_OF_MEMORY, 0); + 8017484: 682b ldr r3, [r5, #0] + 8017486: 2238 movs r2, #56 ; 0x38 + 8017488: 4628 mov r0, r5 + 801748a: e9c3 2405 strd r2, r4, [r3, #20] + 801748e: 681b ldr r3, [r3, #0] + 8017490: 4798 blx r3 + } + + /* OK, fill in the method pointers */ + mem->pub.alloc_small = alloc_small; + 8017492: 4b12 ldr r3, [pc, #72] ; (80174dc ) + 8017494: 6023 str r3, [r4, #0] + mem->pub.alloc_large = alloc_large; + 8017496: 4b12 ldr r3, [pc, #72] ; (80174e0 ) + 8017498: 6063 str r3, [r4, #4] + mem->pub.alloc_sarray = alloc_sarray; + 801749a: 4b12 ldr r3, [pc, #72] ; (80174e4 ) + 801749c: 60a3 str r3, [r4, #8] + mem->pub.alloc_barray = alloc_barray; + 801749e: 4b12 ldr r3, [pc, #72] ; (80174e8 ) + 80174a0: 60e3 str r3, [r4, #12] + mem->pub.request_virt_sarray = request_virt_sarray; + 80174a2: 4b12 ldr r3, [pc, #72] ; (80174ec ) + 80174a4: 6123 str r3, [r4, #16] + mem->pub.request_virt_barray = request_virt_barray; + 80174a6: 4b12 ldr r3, [pc, #72] ; (80174f0 ) + 80174a8: 6163 str r3, [r4, #20] + mem->pub.realize_virt_arrays = realize_virt_arrays; + 80174aa: 4b12 ldr r3, [pc, #72] ; (80174f4 ) + 80174ac: 61a3 str r3, [r4, #24] + mem->pub.access_virt_sarray = access_virt_sarray; + 80174ae: 4b12 ldr r3, [pc, #72] ; (80174f8 ) + 80174b0: 61e3 str r3, [r4, #28] + mem->pub.access_virt_barray = access_virt_barray; + 80174b2: 4b12 ldr r3, [pc, #72] ; (80174fc ) + 80174b4: 6223 str r3, [r4, #32] + mem->pub.free_pool = free_pool; + 80174b6: 4b12 ldr r3, [pc, #72] ; (8017500 ) + 80174b8: 6263 str r3, [r4, #36] ; 0x24 + mem->pub.self_destruct = self_destruct; + 80174ba: 4b12 ldr r3, [pc, #72] ; (8017504 ) + 80174bc: 62a3 str r3, [r4, #40] ; 0x28 + + /* Make MAX_ALLOC_CHUNK accessible to other modules */ + mem->pub.max_alloc_chunk = MAX_ALLOC_CHUNK; + 80174be: f44f 3380 mov.w r3, #65536 ; 0x10000 + + /* Initialize working state */ + mem->pub.max_memory_to_use = max_to_use; + 80174c2: e9c4 630b strd r6, r3, [r4, #44] ; 0x2c + + for (pool = JPOOL_NUMPOOLS-1; pool >= JPOOL_PERMANENT; pool--) { + mem->small_list[pool] = NULL; + 80174c6: 2300 movs r3, #0 + 80174c8: 63a3 str r3, [r4, #56] ; 0x38 + mem->large_list[pool] = NULL; + 80174ca: 6423 str r3, [r4, #64] ; 0x40 + mem->small_list[pool] = NULL; + 80174cc: 6363 str r3, [r4, #52] ; 0x34 + mem->large_list[pool] = NULL; + 80174ce: 63e3 str r3, [r4, #60] ; 0x3c + } + mem->virt_sarray_list = NULL; + mem->virt_barray_list = NULL; + 80174d0: e9c4 3311 strd r3, r3, [r4, #68] ; 0x44 + + mem->total_space_allocated = SIZEOF(my_memory_mgr); + 80174d4: 2354 movs r3, #84 ; 0x54 + 80174d6: 64e3 str r3, [r4, #76] ; 0x4c + + /* Declare ourselves open for business */ + cinfo->mem = & mem->pub; + 80174d8: 606c str r4, [r5, #4] + } + } + } +#endif + +} + 80174da: bd70 pop {r4, r5, r6, pc} + 80174dc: 08016cfd .word 0x08016cfd + 80174e0: 0801702b .word 0x0801702b + 80174e4: 08017109 .word 0x08017109 + 80174e8: 08017099 .word 0x08017099 + 80174ec: 08016e13 .word 0x08016e13 + 80174f0: 08016dc9 .word 0x08016dc9 + 80174f4: 08017179 .word 0x08017179 + 80174f8: 080172a1 .word 0x080172a1 + 80174fc: 08016f2b .word 0x08016f2b + 8017500: 08016e5d .word 0x08016e5d + 8017504: 08016f01 .word 0x08016f01 + +08017508 : + */ + +GLOBAL(void *) +jpeg_get_small (j_common_ptr cinfo, size_t sizeofobject) +{ + return (void *) JMALLOC(sizeofobject); + 8017508: 4608 mov r0, r1 + 801750a: f7f2 b907 b.w 800971c + +0801750e : +} + +GLOBAL(void) +jpeg_free_small (j_common_ptr cinfo, void * object, size_t sizeofobject) +{ + JFREE(object); + 801750e: 4608 mov r0, r1 + 8017510: f7f2 b99a b.w 8009848 + +08017514 : + 8017514: 4608 mov r0, r1 + 8017516: f7f2 b901 b.w 800971c + +0801751a : + 801751a: 4608 mov r0, r1 + 801751c: f7f2 b994 b.w 8009848 + +08017520 : +GLOBAL(long) +jpeg_mem_available (j_common_ptr cinfo, long min_bytes_needed, + long max_bytes_needed, long already_allocated) +{ + return max_bytes_needed; +} + 8017520: 4610 mov r0, r2 + 8017522: 4770 bx lr + +08017524 : + +GLOBAL(void) +jpeg_open_backing_store (j_common_ptr cinfo, backing_store_ptr info, + long total_bytes_needed) +{ + ERREXIT(cinfo, JERR_NO_BACKING_STORE); + 8017524: 6803 ldr r3, [r0, #0] + 8017526: 2233 movs r2, #51 ; 0x33 + 8017528: 615a str r2, [r3, #20] + 801752a: 681b ldr r3, [r3, #0] + 801752c: 4718 bx r3 + +0801752e : + +GLOBAL(long) +jpeg_mem_init (j_common_ptr cinfo) +{ + return 0; /* just set max_memory_to_use to 0 */ +} + 801752e: 2000 movs r0, #0 + 8017530: 4770 bx lr + +08017532 : + +GLOBAL(void) +jpeg_mem_term (j_common_ptr cinfo) +{ +} + 8017532: 4770 bx lr + +08017534 : + * Create the color index table. + */ + +LOCAL(void) +create_colorindex (j_decompress_ptr cinfo) +{ + 8017534: e92d 4ff8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} + /* For ordered dither, we pad the color index tables by MAXJSAMPLE in + * each direction (input index values can be -MAXJSAMPLE .. 2*MAXJSAMPLE). + * This is not necessary in the other dithering modes. However, we + * flag whether it was done in case user changes dithering mode. + */ + if (cinfo->dither_mode == JDITHER_ORDERED) { + 8017538: f890 3058 ldrb.w r3, [r0, #88] ; 0x58 + } else { + pad = 0; + cquantize->is_padded = FALSE; + } + + cquantize->colorindex = (*cinfo->mem->alloc_sarray) + 801753c: 2101 movs r1, #1 + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + 801753e: f8d0 51e0 ldr.w r5, [r0, #480] ; 0x1e0 +{ + 8017542: 4604 mov r4, r0 + if (cinfo->dither_mode == JDITHER_ORDERED) { + 8017544: 2b01 cmp r3, #1 + return (int) (((INT32) (2*j + 1) * MAXJSAMPLE + maxj) / (2*maxj)); + 8017546: f44f 78ff mov.w r8, #510 ; 0x1fe + cquantize->is_padded = FALSE; + 801754a: bf16 itet ne + 801754c: 2300 movne r3, #0 + pad = MAXJSAMPLE*2; + 801754e: f44f 76ff moveq.w r6, #510 ; 0x1fe + pad = 0; + 8017552: 461e movne r6, r3 + 8017554: 61eb str r3, [r5, #28] + cquantize->colorindex = (*cinfo->mem->alloc_sarray) + 8017556: 6843 ldr r3, [r0, #4] + 8017558: f506 7280 add.w r2, r6, #256 ; 0x100 + 801755c: 689f ldr r7, [r3, #8] + 801755e: 6f83 ldr r3, [r0, #120] ; 0x78 + 8017560: 47b8 blx r7 + ((j_common_ptr) cinfo, JPOOL_IMAGE, + (JDIMENSION) (MAXJSAMPLE+1 + pad), + (JDIMENSION) cinfo->out_color_components); + + /* blksize is number of adjacent repeated entries for a component */ + blksize = cquantize->sv_actual; + 8017562: f8d5 c014 ldr.w ip, [r5, #20] + 8017566: f105 0e1c add.w lr, r5, #28 + + for (i = 0; i < cinfo->out_color_components; i++) { + 801756a: 2300 movs r3, #0 + cquantize->colorindex = (*cinfo->mem->alloc_sarray) + 801756c: 61a8 str r0, [r5, #24] + for (i = 0; i < cinfo->out_color_components; i++) { + 801756e: 6fa2 ldr r2, [r4, #120] ; 0x78 + 8017570: 429a cmp r2, r3 + 8017572: dc01 bgt.n 8017578 + for (j = 1; j <= MAXJSAMPLE; j++) { + indexptr[-j] = indexptr[0]; + indexptr[MAXJSAMPLE+j] = indexptr[MAXJSAMPLE]; + } + } +} + 8017574: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} + nci = cquantize->Ncolors[i]; /* # of distinct values for this color */ + 8017578: f85e 1f04 ldr.w r1, [lr, #4]! + cquantize->colorindex[i] += MAXJSAMPLE; + 801757c: 009f lsls r7, r3, #2 + 801757e: 69a8 ldr r0, [r5, #24] + blksize = blksize / nci; + 8017580: fb9c fcf1 sdiv ip, ip, r1 + if (pad) + 8017584: b126 cbz r6, 8017590 + cquantize->colorindex[i] += MAXJSAMPLE; + 8017586: f850 2023 ldr.w r2, [r0, r3, lsl #2] + 801758a: 32ff adds r2, #255 ; 0xff + 801758c: f840 2023 str.w r2, [r0, r3, lsl #2] + k = largest_input_value(cinfo, i, 0, nci-1); + 8017590: f101 39ff add.w r9, r1, #4294967295 + return (int) (((INT32) (2*j + 1) * MAXJSAMPLE + maxj) / (2*maxj)); + 8017594: f101 0afe add.w sl, r1, #254 ; 0xfe + indexptr = cquantize->colorindex[i]; + 8017598: 59c2 ldr r2, [r0, r7] + val = 0; + 801759a: 2000 movs r0, #0 + return (int) (((INT32) (2*j + 1) * MAXJSAMPLE + maxj) / (2*maxj)); + 801759c: ea4f 0949 mov.w r9, r9, lsl #1 + for (j = 0; j <= MAXJSAMPLE; j++) { + 80175a0: 4601 mov r1, r0 + return (int) (((INT32) (2*j + 1) * MAXJSAMPLE + maxj) / (2*maxj)); + 80175a2: fb9a f7f9 sdiv r7, sl, r9 + while (j > k) /* advance val if past boundary */ + 80175a6: 428f cmp r7, r1 + 80175a8: db0a blt.n 80175c0 + indexptr[j] = (JSAMPLE) (val * blksize); + 80175aa: fb10 fb0c smulbb fp, r0, ip + 80175ae: f802 b001 strb.w fp, [r2, r1] + for (j = 0; j <= MAXJSAMPLE; j++) { + 80175b2: 3101 adds r1, #1 + 80175b4: f5b1 7f80 cmp.w r1, #256 ; 0x100 + 80175b8: d1f5 bne.n 80175a6 + if (pad) + 80175ba: b93e cbnz r6, 80175cc + for (i = 0; i < cinfo->out_color_components; i++) { + 80175bc: 3301 adds r3, #1 + 80175be: e7d6 b.n 801756e + k = largest_input_value(cinfo, i, ++val, nci-1); + 80175c0: 3001 adds r0, #1 + return (int) (((INT32) (2*j + 1) * MAXJSAMPLE + maxj) / (2*maxj)); + 80175c2: fb08 a700 mla r7, r8, r0, sl + 80175c6: fb97 f7f9 sdiv r7, r7, r9 + 80175ca: e7ec b.n 80175a6 + 80175cc: 4611 mov r1, r2 + 80175ce: f102 00ff add.w r0, r2, #255 ; 0xff + 80175d2: f1a2 07ff sub.w r7, r2, #255 ; 0xff + indexptr[-j] = indexptr[0]; + 80175d6: f892 9000 ldrb.w r9, [r2] + 80175da: f801 9d01 strb.w r9, [r1, #-1]! + for (j = 1; j <= MAXJSAMPLE; j++) { + 80175de: 42b9 cmp r1, r7 + indexptr[MAXJSAMPLE+j] = indexptr[MAXJSAMPLE]; + 80175e0: f892 90ff ldrb.w r9, [r2, #255] ; 0xff + 80175e4: f800 9f01 strb.w r9, [r0, #1]! + for (j = 1; j <= MAXJSAMPLE; j++) { + 80175e8: d1f5 bne.n 80175d6 + 80175ea: e7e7 b.n 80175bc + +080175ec : + +METHODDEF(void) +color_quantize (j_decompress_ptr cinfo, JSAMPARRAY input_buf, + JSAMPARRAY output_buf, int num_rows) +/* General case, no dithering */ +{ + 80175ec: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} + register int pixcode, ci; + register JSAMPROW ptrin, ptrout; + int row; + JDIMENSION col; + JDIMENSION width = cinfo->output_width; + register int nc = cinfo->out_color_components; + 80175f0: f8d0 c078 ldr.w ip, [r0, #120] ; 0x78 +{ + 80175f4: 4698 mov r8, r3 + JSAMPARRAY colorindex = cquantize->colorindex; + 80175f6: f8d0 31e0 ldr.w r3, [r0, #480] ; 0x1e0 + 80175fa: ea2c 79ec bic.w r9, ip, ip, asr #31 + 80175fe: f8d3 e018 ldr.w lr, [r3, #24] + JDIMENSION width = cinfo->output_width; + 8017602: 6f03 ldr r3, [r0, #112] ; 0x70 + + for (row = 0; row < num_rows; row++) { + 8017604: 2000 movs r0, #0 + JDIMENSION width = cinfo->output_width; + 8017606: 9301 str r3, [sp, #4] + for (row = 0; row < num_rows; row++) { + 8017608: 4540 cmp r0, r8 + 801760a: db02 blt.n 8017612 + pixcode += GETJSAMPLE(colorindex[ci][GETJSAMPLE(*ptrin++)]); + } + *ptrout++ = (JSAMPLE) pixcode; + } + } +} + 801760c: b003 add sp, #12 + 801760e: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + ptrout = output_buf[row]; + 8017612: f852 4020 ldr.w r4, [r2, r0, lsl #2] + 8017616: 9b01 ldr r3, [sp, #4] + ptrin = input_buf[row]; + 8017618: f851 5020 ldr.w r5, [r1, r0, lsl #2] + for (col = width; col > 0; col--) { + 801761c: eb04 0a03 add.w sl, r4, r3 + 8017620: 4554 cmp r4, sl + 8017622: d10f bne.n 8017644 + for (row = 0; row < num_rows; row++) { + 8017624: 3001 adds r0, #1 + 8017626: e7ef b.n 8017608 + pixcode += GETJSAMPLE(colorindex[ci][GETJSAMPLE(*ptrin++)]); + 8017628: f815 b003 ldrb.w fp, [r5, r3] + 801762c: f85e 7023 ldr.w r7, [lr, r3, lsl #2] + for (ci = 0; ci < nc; ci++) { + 8017630: 3301 adds r3, #1 + pixcode += GETJSAMPLE(colorindex[ci][GETJSAMPLE(*ptrin++)]); + 8017632: f817 700b ldrb.w r7, [r7, fp] + 8017636: 443e add r6, r7 + for (ci = 0; ci < nc; ci++) { + 8017638: 4563 cmp r3, ip + 801763a: dbf5 blt.n 8017628 + 801763c: 444d add r5, r9 + *ptrout++ = (JSAMPLE) pixcode; + 801763e: f804 6b01 strb.w r6, [r4], #1 + for (col = width; col > 0; col--) { + 8017642: e7ed b.n 8017620 + for (ci = 0; ci < nc; ci++) { + 8017644: 2300 movs r3, #0 + pixcode = 0; + 8017646: 461e mov r6, r3 + 8017648: e7f6 b.n 8017638 + +0801764a : + +METHODDEF(void) +color_quantize3 (j_decompress_ptr cinfo, JSAMPARRAY input_buf, + JSAMPARRAY output_buf, int num_rows) +/* Fast path for out_color_components==3, no dithering */ +{ + 801764a: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + register int pixcode; + register JSAMPROW ptrin, ptrout; + JSAMPROW colorindex0 = cquantize->colorindex[0]; + 801764e: f8d0 41e0 ldr.w r4, [r0, #480] ; 0x1e0 + JSAMPROW colorindex1 = cquantize->colorindex[1]; + JSAMPROW colorindex2 = cquantize->colorindex[2]; + int row; + JDIMENSION col; + JDIMENSION width = cinfo->output_width; + 8017652: f8d0 9070 ldr.w r9, [r0, #112] ; 0x70 + + for (row = 0; row < num_rows; row++) { + 8017656: 2000 movs r0, #0 + JSAMPROW colorindex0 = cquantize->colorindex[0]; + 8017658: 69a4 ldr r4, [r4, #24] + JSAMPROW colorindex1 = cquantize->colorindex[1]; + 801765a: e9d4 ce00 ldrd ip, lr, [r4] + JSAMPROW colorindex2 = cquantize->colorindex[2]; + 801765e: f8d4 8008 ldr.w r8, [r4, #8] + for (row = 0; row < num_rows; row++) { + 8017662: 4298 cmp r0, r3 + 8017664: db01 blt.n 801766a + pixcode += GETJSAMPLE(colorindex1[GETJSAMPLE(*ptrin++)]); + pixcode += GETJSAMPLE(colorindex2[GETJSAMPLE(*ptrin++)]); + *ptrout++ = (JSAMPLE) pixcode; + } + } +} + 8017666: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + ptrout = output_buf[row]; + 801766a: f852 5020 ldr.w r5, [r2, r0, lsl #2] + for (col = width; col > 0; col--) { + 801766e: f851 4020 ldr.w r4, [r1, r0, lsl #2] + 8017672: eb05 0a09 add.w sl, r5, r9 + 8017676: 4555 cmp r5, sl + 8017678: f104 0403 add.w r4, r4, #3 + 801767c: d101 bne.n 8017682 + for (row = 0; row < num_rows; row++) { + 801767e: 3001 adds r0, #1 + 8017680: e7ef b.n 8017662 + pixcode = GETJSAMPLE(colorindex0[GETJSAMPLE(*ptrin++)]); + 8017682: f814 6c03 ldrb.w r6, [r4, #-3] + pixcode += GETJSAMPLE(colorindex1[GETJSAMPLE(*ptrin++)]); + 8017686: f814 7c02 ldrb.w r7, [r4, #-2] + pixcode = GETJSAMPLE(colorindex0[GETJSAMPLE(*ptrin++)]); + 801768a: f81c 6006 ldrb.w r6, [ip, r6] + pixcode += GETJSAMPLE(colorindex1[GETJSAMPLE(*ptrin++)]); + 801768e: f81e 7007 ldrb.w r7, [lr, r7] + 8017692: 4437 add r7, r6 + pixcode += GETJSAMPLE(colorindex2[GETJSAMPLE(*ptrin++)]); + 8017694: f814 6c01 ldrb.w r6, [r4, #-1] + 8017698: f818 6006 ldrb.w r6, [r8, r6] + 801769c: 443e add r6, r7 + *ptrout++ = (JSAMPLE) pixcode; + 801769e: f805 6b01 strb.w r6, [r5], #1 + for (col = width; col > 0; col--) { + 80176a2: e7e8 b.n 8017676 + +080176a4 : + +METHODDEF(void) +quantize3_ord_dither (j_decompress_ptr cinfo, JSAMPARRAY input_buf, + JSAMPARRAY output_buf, int num_rows) +/* Fast path for out_color_components==3, with ordered dithering */ +{ + 80176a4: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 80176a8: 469a mov sl, r3 + 80176aa: b08b sub sp, #44 ; 0x2c + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + 80176ac: f8d0 31e0 ldr.w r3, [r0, #480] ; 0x1e0 +{ + 80176b0: e9cd 1208 strd r1, r2, [sp, #32] + register int pixcode; + register JSAMPROW input_ptr; + register JSAMPROW output_ptr; + JSAMPROW colorindex0 = cquantize->colorindex[0]; + 80176b4: 699a ldr r2, [r3, #24] + 80176b6: 6811 ldr r1, [r2, #0] + 80176b8: 9104 str r1, [sp, #16] + JSAMPROW colorindex1 = cquantize->colorindex[1]; + 80176ba: 6851 ldr r1, [r2, #4] + JSAMPROW colorindex2 = cquantize->colorindex[2]; + 80176bc: 6892 ldr r2, [r2, #8] + JSAMPROW colorindex1 = cquantize->colorindex[1]; + 80176be: 9105 str r1, [sp, #20] + int row_index, col_index; /* current indexes into dither matrix */ + int row; + JDIMENSION col; + JDIMENSION width = cinfo->output_width; + + for (row = 0; row < num_rows; row++) { + 80176c0: 2100 movs r1, #0 + JSAMPROW colorindex2 = cquantize->colorindex[2]; + 80176c2: 9206 str r2, [sp, #24] + JDIMENSION width = cinfo->output_width; + 80176c4: 6f02 ldr r2, [r0, #112] ; 0x70 + 80176c6: 9207 str r2, [sp, #28] + for (row = 0; row < num_rows; row++) { + 80176c8: 4551 cmp r1, sl + 80176ca: db02 blt.n 80176d2 + col_index = (col_index + 1) & ODITHER_MASK; + } + row_index = (row_index + 1) & ODITHER_MASK; + cquantize->row_index = row_index; + } +} + 80176cc: b00b add sp, #44 ; 0x2c + 80176ce: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + row_index = cquantize->row_index; + 80176d2: 6b1a ldr r2, [r3, #48] ; 0x30 + output_ptr = output_buf[row]; + 80176d4: 9809 ldr r0, [sp, #36] ; 0x24 + 80176d6: 9c07 ldr r4, [sp, #28] + 80176d8: f850 5021 ldr.w r5, [r0, r1, lsl #2] + dither0 = cquantize->odither[0][row_index]; + 80176dc: 0190 lsls r0, r2, #6 + 80176de: f8d3 8034 ldr.w r8, [r3, #52] ; 0x34 + 80176e2: 9002 str r0, [sp, #8] + 80176e4: eb05 0e04 add.w lr, r5, r4 + col_index = 0; + 80176e8: 2400 movs r4, #0 + row_index = cquantize->row_index; + 80176ea: 9201 str r2, [sp, #4] + dither2 = cquantize->odither[2][row_index]; + 80176ec: e9d3 900e ldrd r9, r0, [r3, #56] ; 0x38 + 80176f0: 9003 str r0, [sp, #12] + for (col = width; col > 0; col--) { + 80176f2: 9808 ldr r0, [sp, #32] + 80176f4: f850 0021 ldr.w r0, [r0, r1, lsl #2] + 80176f8: 4575 cmp r5, lr + 80176fa: f100 0003 add.w r0, r0, #3 + 80176fe: d106 bne.n 801770e + row_index = (row_index + 1) & ODITHER_MASK; + 8017700: 9a01 ldr r2, [sp, #4] + for (row = 0; row < num_rows; row++) { + 8017702: 3101 adds r1, #1 + row_index = (row_index + 1) & ODITHER_MASK; + 8017704: 3201 adds r2, #1 + 8017706: f002 020f and.w r2, r2, #15 + cquantize->row_index = row_index; + 801770a: 631a str r2, [r3, #48] ; 0x30 + for (row = 0; row < num_rows; row++) { + 801770c: e7dc b.n 80176c8 + pixcode = GETJSAMPLE(colorindex0[GETJSAMPLE(*input_ptr++) + + 801770e: 9e02 ldr r6, [sp, #8] + 8017710: f810 cc03 ldrb.w ip, [r0, #-3] + 8017714: eb06 0684 add.w r6, r6, r4, lsl #2 + 8017718: 9a04 ldr r2, [sp, #16] + col_index = (col_index + 1) & ODITHER_MASK; + 801771a: 3401 adds r4, #1 + pixcode = GETJSAMPLE(colorindex0[GETJSAMPLE(*input_ptr++) + + 801771c: f858 7006 ldr.w r7, [r8, r6] + 8017720: 4494 add ip, r2 + pixcode += GETJSAMPLE(colorindex1[GETJSAMPLE(*input_ptr++) + + 8017722: 9a05 ldr r2, [sp, #20] + col_index = (col_index + 1) & ODITHER_MASK; + 8017724: f004 040f and.w r4, r4, #15 + pixcode = GETJSAMPLE(colorindex0[GETJSAMPLE(*input_ptr++) + + 8017728: f81c b007 ldrb.w fp, [ip, r7] + pixcode += GETJSAMPLE(colorindex1[GETJSAMPLE(*input_ptr++) + + 801772c: f810 cc02 ldrb.w ip, [r0, #-2] + 8017730: f859 7006 ldr.w r7, [r9, r6] + 8017734: 4494 add ip, r2 + pixcode += GETJSAMPLE(colorindex2[GETJSAMPLE(*input_ptr++) + + 8017736: 9a03 ldr r2, [sp, #12] + pixcode += GETJSAMPLE(colorindex1[GETJSAMPLE(*input_ptr++) + + 8017738: f81c 7007 ldrb.w r7, [ip, r7] + pixcode += GETJSAMPLE(colorindex2[GETJSAMPLE(*input_ptr++) + + 801773c: 5996 ldr r6, [r2, r6] + 801773e: f810 cc01 ldrb.w ip, [r0, #-1] + pixcode += GETJSAMPLE(colorindex1[GETJSAMPLE(*input_ptr++) + + 8017742: 445f add r7, fp + pixcode += GETJSAMPLE(colorindex2[GETJSAMPLE(*input_ptr++) + + 8017744: 9a06 ldr r2, [sp, #24] + 8017746: 4494 add ip, r2 + 8017748: f81c 6006 ldrb.w r6, [ip, r6] + 801774c: 443e add r6, r7 + *output_ptr++ = (JSAMPLE) pixcode; + 801774e: f805 6b01 strb.w r6, [r5], #1 + for (col = width; col > 0; col--) { + 8017752: e7d1 b.n 80176f8 + +08017754 : +{ + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + size_t arraysize; + int i; + + arraysize = (size_t) ((cinfo->output_width + 2) * SIZEOF(FSERROR)); + 8017754: 6f02 ldr r2, [r0, #112] ; 0x70 +{ + 8017756: b5f8 push {r3, r4, r5, r6, r7, lr} + arraysize = (size_t) ((cinfo->output_width + 2) * SIZEOF(FSERROR)); + 8017758: 3202 adds r2, #2 + 801775a: f8d0 61e0 ldr.w r6, [r0, #480] ; 0x1e0 +{ + 801775e: 4604 mov r4, r0 + for (i = 0; i < cinfo->out_color_components; i++) { + 8017760: 2700 movs r7, #0 + arraysize = (size_t) ((cinfo->output_width + 2) * SIZEOF(FSERROR)); + 8017762: 0055 lsls r5, r2, #1 + for (i = 0; i < cinfo->out_color_components; i++) { + 8017764: 3640 adds r6, #64 ; 0x40 + 8017766: 6fa3 ldr r3, [r4, #120] ; 0x78 + 8017768: 42bb cmp r3, r7 + 801776a: dc00 bgt.n 801776e + cquantize->fserrors[i] = (FSERRPTR) + (*cinfo->mem->alloc_large)((j_common_ptr) cinfo, JPOOL_IMAGE, arraysize); + } +} + 801776c: bdf8 pop {r3, r4, r5, r6, r7, pc} + (*cinfo->mem->alloc_large)((j_common_ptr) cinfo, JPOOL_IMAGE, arraysize); + 801776e: 6863 ldr r3, [r4, #4] + 8017770: 462a mov r2, r5 + 8017772: 2101 movs r1, #1 + 8017774: 4620 mov r0, r4 + 8017776: 685b ldr r3, [r3, #4] + for (i = 0; i < cinfo->out_color_components; i++) { + 8017778: 3701 adds r7, #1 + (*cinfo->mem->alloc_large)((j_common_ptr) cinfo, JPOOL_IMAGE, arraysize); + 801777a: 4798 blx r3 + cquantize->fserrors[i] = (FSERRPTR) + 801777c: f846 0f04 str.w r0, [r6, #4]! + for (i = 0; i < cinfo->out_color_components; i++) { + 8017780: e7f1 b.n 8017766 + +08017782 : + +METHODDEF(void) +finish_pass_1_quant (j_decompress_ptr cinfo) +{ + /* no work in 1-pass case */ +} + 8017782: 4770 bx lr + +08017784 : + */ + +METHODDEF(void) +new_color_map_1_quant (j_decompress_ptr cinfo) +{ + ERREXIT(cinfo, JERR_MODE_CHANGE); + 8017784: 6803 ldr r3, [r0, #0] + 8017786: 222f movs r2, #47 ; 0x2f + 8017788: 615a str r2, [r3, #20] + 801778a: 681b ldr r3, [r3, #0] + 801778c: 4718 bx r3 + ... + +08017790 : +{ + 8017790: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + 8017794: f8d0 51e0 ldr.w r5, [r0, #480] ; 0x1e0 +{ + 8017798: 4604 mov r4, r0 + cinfo->colormap = cquantize->sv_colormap; + 801779a: 692b ldr r3, [r5, #16] + 801779c: f8c0 3088 str.w r3, [r0, #136] ; 0x88 + cinfo->actual_number_of_colors = cquantize->sv_actual; + 80177a0: 696b ldr r3, [r5, #20] + 80177a2: f8c0 3084 str.w r3, [r0, #132] ; 0x84 + switch (cinfo->dither_mode) { + 80177a6: f890 3058 ldrb.w r3, [r0, #88] ; 0x58 + 80177aa: 2b01 cmp r3, #1 + 80177ac: d00b beq.n 80177c6 + 80177ae: 2b02 cmp r3, #2 + 80177b0: d05e beq.n 8017870 + 80177b2: 2b00 cmp r3, #0 + 80177b4: d174 bne.n 80178a0 + if (cinfo->out_color_components == 3) + 80177b6: 6f83 ldr r3, [r0, #120] ; 0x78 + 80177b8: 2b03 cmp r3, #3 + cquantize->pub.color_quantize = color_quantize3; + 80177ba: bf0c ite eq + 80177bc: 4b3c ldreq r3, [pc, #240] ; (80178b0 ) + cquantize->pub.color_quantize = color_quantize; + 80177be: 4b3d ldrne r3, [pc, #244] ; (80178b4 ) + 80177c0: 606b str r3, [r5, #4] +} + 80177c2: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + if (cinfo->out_color_components == 3) + 80177c6: 6f81 ldr r1, [r0, #120] ; 0x78 + cquantize->pub.color_quantize = quantize_ord_dither; + 80177c8: 4b3b ldr r3, [pc, #236] ; (80178b8 ) + 80177ca: 4a3c ldr r2, [pc, #240] ; (80178bc ) + 80177cc: 2903 cmp r1, #3 + 80177ce: bf18 it ne + 80177d0: 4613 movne r3, r2 + 80177d2: 606b str r3, [r5, #4] + cquantize->row_index = 0; /* initialize state for ordered dither */ + 80177d4: 2300 movs r3, #0 + 80177d6: 632b str r3, [r5, #48] ; 0x30 + if (! cquantize->is_padded) + 80177d8: 69eb ldr r3, [r5, #28] + 80177da: b90b cbnz r3, 80177e0 + create_colorindex(cinfo); + 80177dc: f7ff feaa bl 8017534 + if (cquantize->odither[0] == NULL) + 80177e0: 6b6d ldr r5, [r5, #52] ; 0x34 + 80177e2: 2d00 cmp r5, #0 + 80177e4: d1ed bne.n 80177c2 + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + 80177e6: f8d4 71e0 ldr.w r7, [r4, #480] ; 0x1e0 + for (i = 0; i < cinfo->out_color_components; i++) { + 80177ea: f107 081c add.w r8, r7, #28 + 80177ee: 4646 mov r6, r8 + 80177f0: 6fa3 ldr r3, [r4, #120] ; 0x78 + 80177f2: 429d cmp r5, r3 + 80177f4: dae5 bge.n 80177c2 + nci = cquantize->Ncolors[i]; /* # of distinct values for this color */ + 80177f6: f856 9f04 ldr.w r9, [r6, #4]! + for (j = 0; j < i; j++) { + 80177fa: 4642 mov r2, r8 + 80177fc: 2300 movs r3, #0 + 80177fe: 429d cmp r5, r3 + 8017800: d007 beq.n 8017812 + if (nci == cquantize->Ncolors[j]) { + 8017802: f852 1f04 ldr.w r1, [r2, #4]! + 8017806: 4589 cmp r9, r1 + 8017808: d130 bne.n 801786c + odither = cquantize->odither[j]; + 801780a: eb07 0383 add.w r3, r7, r3, lsl #2 + 801780e: 6b58 ldr r0, [r3, #52] ; 0x34 + if (odither == NULL) /* need a new table? */ + 8017810: bb48 cbnz r0, 8017866 + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 8017812: 6863 ldr r3, [r4, #4] + 8017814: f44f 6280 mov.w r2, #1024 ; 0x400 + 8017818: 2101 movs r1, #1 + 801781a: 4620 mov r0, r4 + 801781c: 681b ldr r3, [r3, #0] + 801781e: 4798 blx r3 + den = 2 * ODITHER_CELLS * ((INT32) (ncolors - 1)); + 8017820: f109 32ff add.w r2, r9, #4294967295 + 8017824: f100 013c add.w r1, r0, #60 ; 0x3c + 8017828: f8df c098 ldr.w ip, [pc, #152] ; 80178c4 + 801782c: 0252 lsls r2, r2, #9 + for (j = 0; j < ODITHER_SIZE; j++) { + 801782e: f200 4a3c addw sl, r0, #1084 ; 0x43c + for (k = 0; k < ODITHER_SIZE; k++) { + 8017832: f1a1 0e40 sub.w lr, r1, #64 ; 0x40 + for (j = 0; j < i; j++) { + 8017836: 46e1 mov r9, ip + num = ((INT32) (ODITHER_CELLS-1 - 2*((int)base_dither_matrix[j][k]))) + 8017838: f819 3b01 ldrb.w r3, [r9], #1 + 801783c: 005b lsls r3, r3, #1 + 801783e: f1c3 03ff rsb r3, r3, #255 ; 0xff + odither[j][k] = (int) (num<0 ? -((-num)/den) : num/den); + 8017842: ebd3 2303 rsbs r3, r3, r3, lsl #8 + 8017846: bf45 ittet mi + 8017848: 425b negmi r3, r3 + 801784a: fb93 f3f2 sdivmi r3, r3, r2 + 801784e: fb93 f3f2 sdivpl r3, r3, r2 + 8017852: 425b negmi r3, r3 + 8017854: f84e 3f04 str.w r3, [lr, #4]! + for (k = 0; k < ODITHER_SIZE; k++) { + 8017858: 458e cmp lr, r1 + 801785a: d1ed bne.n 8017838 + for (j = 0; j < ODITHER_SIZE; j++) { + 801785c: 3140 adds r1, #64 ; 0x40 + 801785e: f10c 0c10 add.w ip, ip, #16 + 8017862: 458a cmp sl, r1 + 8017864: d1e5 bne.n 8017832 + for (i = 0; i < cinfo->out_color_components; i++) { + 8017866: 3501 adds r5, #1 + cquantize->odither[i] = odither; + 8017868: 6170 str r0, [r6, #20] + for (i = 0; i < cinfo->out_color_components; i++) { + 801786a: e7c1 b.n 80177f0 + for (j = 0; j < i; j++) { + 801786c: 3301 adds r3, #1 + 801786e: e7c6 b.n 80177fe + cquantize->pub.color_quantize = quantize_fs_dither; + 8017870: 4b13 ldr r3, [pc, #76] ; (80178c0 ) + 8017872: 606b str r3, [r5, #4] + cquantize->on_odd_row = FALSE; /* initialize state for F-S dither */ + 8017874: 2300 movs r3, #0 + 8017876: 656b str r3, [r5, #84] ; 0x54 + if (cquantize->fserrors[0] == NULL) + 8017878: 6c6b ldr r3, [r5, #68] ; 0x44 + 801787a: b90b cbnz r3, 8017880 + alloc_fs_workspace(cinfo); + 801787c: f7ff ff6a bl 8017754 + arraysize = (size_t) ((cinfo->output_width + 2) * SIZEOF(FSERROR)); + 8017880: 6f22 ldr r2, [r4, #112] ; 0x70 + 8017882: 3540 adds r5, #64 ; 0x40 + for (i = 0; i < cinfo->out_color_components; i++) + 8017884: 2700 movs r7, #0 + arraysize = (size_t) ((cinfo->output_width + 2) * SIZEOF(FSERROR)); + 8017886: 3202 adds r2, #2 + 8017888: 0056 lsls r6, r2, #1 + for (i = 0; i < cinfo->out_color_components; i++) + 801788a: 6fa3 ldr r3, [r4, #120] ; 0x78 + 801788c: 42bb cmp r3, r7 + 801788e: dd98 ble.n 80177c2 + FMEMZERO((void FAR *) cquantize->fserrors[i], arraysize); + 8017890: 4632 mov r2, r6 + 8017892: 2100 movs r1, #0 + 8017894: f855 0f04 ldr.w r0, [r5, #4]! + for (i = 0; i < cinfo->out_color_components; i++) + 8017898: 3701 adds r7, #1 + FMEMZERO((void FAR *) cquantize->fserrors[i], arraysize); + 801789a: f01d f88f bl 80349bc + for (i = 0; i < cinfo->out_color_components; i++) + 801789e: e7f4 b.n 801788a + ERREXIT(cinfo, JERR_NOT_COMPILED); + 80178a0: 6803 ldr r3, [r0, #0] + 80178a2: 2231 movs r2, #49 ; 0x31 +} + 80178a4: e8bd 47f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, lr} + ERREXIT(cinfo, JERR_NOT_COMPILED); + 80178a8: 615a str r2, [r3, #20] + 80178aa: 681b ldr r3, [r3, #0] + 80178ac: 4718 bx r3 + 80178ae: bf00 nop + 80178b0: 0801764b .word 0x0801764b + 80178b4: 080175ed .word 0x080175ed + 80178b8: 080176a5 .word 0x080176a5 + 80178bc: 08017a01 .word 0x08017a01 + 80178c0: 080178c9 .word 0x080178c9 + 80178c4: 08039760 .word 0x08039760 + +080178c8 : +{ + 80178c8: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 80178cc: b091 sub sp, #68 ; 0x44 + JDIMENSION width = cinfo->output_width; + 80178ce: 6f05 ldr r5, [r0, #112] ; 0x70 + int nc = cinfo->out_color_components; + 80178d0: f8d0 9078 ldr.w r9, [r0, #120] ; 0x78 + 80178d4: f1a2 0b04 sub.w fp, r2, #4 + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + 80178d8: f8d0 41e0 ldr.w r4, [r0, #480] ; 0x1e0 +{ + 80178dc: e9cd 130d strd r1, r3, [sp, #52] ; 0x34 + JSAMPLE *range_limit = cinfo->sample_range_limit; + 80178e0: f8d0 314c ldr.w r3, [r0, #332] ; 0x14c + 80178e4: 930a str r3, [sp, #40] ; 0x28 + input_ptr += (width-1) * nc; /* so point to rightmost pixel */ + 80178e6: 1e6b subs r3, r5, #1 + 80178e8: 9305 str r3, [sp, #20] + 80178ea: fb03 f309 mul.w r3, r3, r9 + 80178ee: 9308 str r3, [sp, #32] + errorptr = cquantize->fserrors[ci] + (width+1); /* => entry after last column */ + 80178f0: 1c6b adds r3, r5, #1 + 80178f2: 005b lsls r3, r3, #1 + 80178f4: 9309 str r3, [sp, #36] ; 0x24 + for (row = 0; row < num_rows; row++) { + 80178f6: 2300 movs r3, #0 + 80178f8: 9300 str r3, [sp, #0] + 80178fa: 9a00 ldr r2, [sp, #0] + 80178fc: 9b0e ldr r3, [sp, #56] ; 0x38 + 80178fe: 429a cmp r2, r3 + 8017900: db02 blt.n 8017908 +} + 8017902: b011 add sp, #68 ; 0x44 + 8017904: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + FMEMZERO((void FAR *) output_buf[row], + 8017908: 2100 movs r1, #0 + 801790a: 462a mov r2, r5 + 801790c: f85b 0f04 ldr.w r0, [fp, #4]! + 8017910: f01d f854 bl 80349bc + for (ci = 0; ci < nc; ci++) { + 8017914: f104 0340 add.w r3, r4, #64 ; 0x40 + 8017918: 2100 movs r1, #0 + 801791a: 9304 str r3, [sp, #16] + dirnc = -nc; + 801791c: f1c9 0300 rsb r3, r9, #0 + 8017920: 930f str r3, [sp, #60] ; 0x3c + for (ci = 0; ci < nc; ci++) { + 8017922: 4549 cmp r1, r9 + if (cquantize->on_odd_row) { + 8017924: 6d62 ldr r2, [r4, #84] ; 0x54 + for (ci = 0; ci < nc; ci++) { + 8017926: db06 blt.n 8017936 + cquantize->on_odd_row = (cquantize->on_odd_row ? FALSE : TRUE); + 8017928: fab2 f282 clz r2, r2 + for (row = 0; row < num_rows; row++) { + 801792c: 9b00 ldr r3, [sp, #0] + cquantize->on_odd_row = (cquantize->on_odd_row ? FALSE : TRUE); + 801792e: 0952 lsrs r2, r2, #5 + for (row = 0; row < num_rows; row++) { + 8017930: 3301 adds r3, #1 + cquantize->on_odd_row = (cquantize->on_odd_row ? FALSE : TRUE); + 8017932: 6562 str r2, [r4, #84] ; 0x54 + for (row = 0; row < num_rows; row++) { + 8017934: e7e0 b.n 80178f8 + input_ptr = input_buf[row] + ci; + 8017936: 9800 ldr r0, [sp, #0] + 8017938: 9b0d ldr r3, [sp, #52] ; 0x34 + 801793a: f853 3020 ldr.w r3, [r3, r0, lsl #2] + output_ptr = output_buf[row]; + 801793e: f8db 0000 ldr.w r0, [fp] + input_ptr = input_buf[row] + ci; + 8017942: eb03 0e01 add.w lr, r3, r1 + errorptr = cquantize->fserrors[ci] + (width+1); /* => entry after last column */ + 8017946: 9b04 ldr r3, [sp, #16] + 8017948: f853 cf04 ldr.w ip, [r3, #4]! + 801794c: 9304 str r3, [sp, #16] + if (cquantize->on_odd_row) { + 801794e: b312 cbz r2, 8017996 + input_ptr += (width-1) * nc; /* so point to rightmost pixel */ + 8017950: 9b08 ldr r3, [sp, #32] + 8017952: 449e add lr, r3 + output_ptr += width-1; + 8017954: 9b05 ldr r3, [sp, #20] + 8017956: 4418 add r0, r3 + dirnc = -nc; + 8017958: 9b0f ldr r3, [sp, #60] ; 0x3c + 801795a: 9307 str r3, [sp, #28] + errorptr = cquantize->fserrors[ci] + (width+1); /* => entry after last column */ + 801795c: 9b09 ldr r3, [sp, #36] ; 0x24 + 801795e: 449c add ip, r3 + dir = -1; + 8017960: f04f 33ff mov.w r3, #4294967295 + dir = 1; + 8017964: 9302 str r3, [sp, #8] + for (col = width; col > 0; col--) { + 8017966: 4667 mov r7, ip + colorindex_ci = cquantize->colorindex[ci]; + 8017968: 69a3 ldr r3, [r4, #24] + for (col = width; col > 0; col--) { + 801796a: 9503 str r5, [sp, #12] + colorindex_ci = cquantize->colorindex[ci]; + 801796c: f853 3021 ldr.w r3, [r3, r1, lsl #2] + 8017970: 930b str r3, [sp, #44] ; 0x2c + colormap_ci = cquantize->sv_colormap[ci]; + 8017972: 6923 ldr r3, [r4, #16] + 8017974: f853 3021 ldr.w r3, [r3, r1, lsl #2] + 8017978: 930c str r3, [sp, #48] ; 0x30 + cur = RIGHT_SHIFT(cur + errorptr[dir] + 8, 4); + 801797a: 9b02 ldr r3, [sp, #8] + 801797c: 005b lsls r3, r3, #1 + 801797e: 9301 str r3, [sp, #4] + belowerr = bpreverr = 0; + 8017980: 2300 movs r3, #0 + cur = 0; + 8017982: 4698 mov r8, r3 + belowerr = bpreverr = 0; + 8017984: 9306 str r3, [sp, #24] + for (col = width; col > 0; col--) { + 8017986: 9a03 ldr r2, [sp, #12] + 8017988: b94a cbnz r2, 801799e + errorptr[0] = (FSERROR) bpreverr; /* unload prev err into array */ + 801798a: 9a01 ldr r2, [sp, #4] + for (ci = 0; ci < nc; ci++) { + 801798c: 3101 adds r1, #1 + errorptr[0] = (FSERROR) bpreverr; /* unload prev err into array */ + 801798e: 436a muls r2, r5 + 8017990: f82c 3002 strh.w r3, [ip, r2] + for (ci = 0; ci < nc; ci++) { + 8017994: e7c5 b.n 8017922 + dir = 1; + 8017996: 2301 movs r3, #1 + 8017998: f8cd 901c str.w r9, [sp, #28] + 801799c: e7e2 b.n 8017964 + cur = RIGHT_SHIFT(cur + errorptr[dir] + 8, 4); + 801799e: 9a01 ldr r2, [sp, #4] + 80179a0: f937 a002 ldrsh.w sl, [r7, r2] + cur = GETJSAMPLE(range_limit[cur]); + 80179a4: 9a0a ldr r2, [sp, #40] ; 0x28 + cur = RIGHT_SHIFT(cur + errorptr[dir] + 8, 4); + 80179a6: 44d0 add r8, sl + cur += GETJSAMPLE(*input_ptr); + 80179a8: f89e a000 ldrb.w sl, [lr] + cur = RIGHT_SHIFT(cur + errorptr[dir] + 8, 4); + 80179ac: f108 0808 add.w r8, r8, #8 + cur = GETJSAMPLE(range_limit[cur]); + 80179b0: eb02 1828 add.w r8, r2, r8, asr #4 + pixcode = GETJSAMPLE(colorindex_ci[cur]); + 80179b4: 9a0b ldr r2, [sp, #44] ; 0x2c + cur = GETJSAMPLE(range_limit[cur]); + 80179b6: f818 a00a ldrb.w sl, [r8, sl] + *output_ptr += (JSAMPLE) pixcode; + 80179ba: f890 8000 ldrb.w r8, [r0] + pixcode = GETJSAMPLE(colorindex_ci[cur]); + 80179be: f812 200a ldrb.w r2, [r2, sl] + *output_ptr += (JSAMPLE) pixcode; + 80179c2: 4490 add r8, r2 + pixcode = GETJSAMPLE(colorindex_ci[cur]); + 80179c4: 4616 mov r6, r2 + cur -= GETJSAMPLE(colormap_ci[pixcode]); + 80179c6: 9a0c ldr r2, [sp, #48] ; 0x30 + *output_ptr += (JSAMPLE) pixcode; + 80179c8: f880 8000 strb.w r8, [r0] + cur -= GETJSAMPLE(colormap_ci[pixcode]); + 80179cc: f812 8006 ldrb.w r8, [r2, r6] + input_ptr += dirnc; /* advance input ptr to next column */ + 80179d0: 9a07 ldr r2, [sp, #28] + cur -= GETJSAMPLE(colormap_ci[pixcode]); + 80179d2: ebaa 0a08 sub.w sl, sl, r8 + input_ptr += dirnc; /* advance input ptr to next column */ + 80179d6: 4496 add lr, r2 + output_ptr += dir; /* advance output ptr to next column */ + 80179d8: 9a02 ldr r2, [sp, #8] + cur += delta; /* form error * 3 */ + 80179da: eb0a 084a add.w r8, sl, sl, lsl #1 + output_ptr += dir; /* advance output ptr to next column */ + 80179de: 4410 add r0, r2 + for (col = width; col > 0; col--) { + 80179e0: 9a03 ldr r2, [sp, #12] + errorptr[0] = (FSERROR) (bpreverr + cur); + 80179e2: 4443 add r3, r8 + cur += delta; /* form error * 5 */ + 80179e4: eb08 084a add.w r8, r8, sl, lsl #1 + for (col = width; col > 0; col--) { + 80179e8: 3a01 subs r2, #1 + errorptr[0] = (FSERROR) (bpreverr + cur); + 80179ea: 803b strh r3, [r7, #0] + for (col = width; col > 0; col--) { + 80179ec: 9203 str r2, [sp, #12] + bpreverr = belowerr + cur; + 80179ee: 9b06 ldr r3, [sp, #24] + for (col = width; col > 0; col--) { + 80179f0: 9a01 ldr r2, [sp, #4] + bpreverr = belowerr + cur; + 80179f2: 4443 add r3, r8 + belowerr = bnexterr; + 80179f4: f8cd a018 str.w sl, [sp, #24] + cur += delta; /* form error * 7 */ + 80179f8: eb08 084a add.w r8, r8, sl, lsl #1 + for (col = width; col > 0; col--) { + 80179fc: 4417 add r7, r2 + 80179fe: e7c2 b.n 8017986 + +08017a00 : +{ + 8017a00: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8017a04: b089 sub sp, #36 ; 0x24 + 8017a06: 4688 mov r8, r1 + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + 8017a08: f8d0 91e0 ldr.w r9, [r0, #480] ; 0x1e0 + int nc = cinfo->out_color_components; + 8017a0c: 1f14 subs r4, r2, #4 +{ + 8017a0e: 9307 str r3, [sp, #28] + for (row = 0; row < num_rows; row++) { + 8017a10: 2700 movs r7, #0 + int nc = cinfo->out_color_components; + 8017a12: 6f83 ldr r3, [r0, #120] ; 0x78 + JDIMENSION width = cinfo->output_width; + 8017a14: f8d0 a070 ldr.w sl, [r0, #112] ; 0x70 + int nc = cinfo->out_color_components; + 8017a18: 9301 str r3, [sp, #4] + for (row = 0; row < num_rows; row++) { + 8017a1a: 9b07 ldr r3, [sp, #28] + 8017a1c: 429f cmp r7, r3 + 8017a1e: db02 blt.n 8017a26 +} + 8017a20: b009 add sp, #36 ; 0x24 + 8017a22: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + FMEMZERO((void FAR *) output_buf[row], + 8017a26: 4652 mov r2, sl + 8017a28: 2100 movs r1, #0 + 8017a2a: f854 0f04 ldr.w r0, [r4, #4]! + 8017a2e: f01c ffc5 bl 80349bc + row_index = cquantize->row_index; + 8017a32: 4649 mov r1, r9 + for (ci = 0; ci < nc; ci++) { + 8017a34: 2000 movs r0, #0 + row_index = cquantize->row_index; + 8017a36: f851 3f30 ldr.w r3, [r1, #48]! + dither = cquantize->odither[ci][row_index]; + 8017a3a: 019a lsls r2, r3, #6 + 8017a3c: 9203 str r2, [sp, #12] + for (ci = 0; ci < nc; ci++) { + 8017a3e: 9a01 ldr r2, [sp, #4] + 8017a40: 4290 cmp r0, r2 + 8017a42: db06 blt.n 8017a52 + row_index = (row_index + 1) & ODITHER_MASK; + 8017a44: 3301 adds r3, #1 + for (row = 0; row < num_rows; row++) { + 8017a46: 3701 adds r7, #1 + row_index = (row_index + 1) & ODITHER_MASK; + 8017a48: f003 030f and.w r3, r3, #15 + cquantize->row_index = row_index; + 8017a4c: f8c9 3030 str.w r3, [r9, #48] ; 0x30 + for (row = 0; row < num_rows; row++) { + 8017a50: e7e3 b.n 8017a1a + colorindex_ci = cquantize->colorindex[ci]; + 8017a52: f8d9 2018 ldr.w r2, [r9, #24] + col_index = 0; + 8017a56: 2600 movs r6, #0 + input_ptr = input_buf[row] + ci; + 8017a58: f858 5027 ldr.w r5, [r8, r7, lsl #2] + colorindex_ci = cquantize->colorindex[ci]; + 8017a5c: f852 2020 ldr.w r2, [r2, r0, lsl #2] + input_ptr = input_buf[row] + ci; + 8017a60: eb05 0c00 add.w ip, r5, r0 + colorindex_ci = cquantize->colorindex[ci]; + 8017a64: 6825 ldr r5, [r4, #0] + 8017a66: 9205 str r2, [sp, #20] + dither = cquantize->odither[ci][row_index]; + 8017a68: f851 2f04 ldr.w r2, [r1, #4]! + 8017a6c: 9202 str r2, [sp, #8] + for (col = width; col > 0; col--) { + 8017a6e: eb0a 0205 add.w r2, sl, r5 + 8017a72: 9206 str r2, [sp, #24] + 8017a74: 9a06 ldr r2, [sp, #24] + 8017a76: 4295 cmp r5, r2 + 8017a78: d101 bne.n 8017a7e + for (ci = 0; ci < nc; ci++) { + 8017a7a: 3001 adds r0, #1 + 8017a7c: e7df b.n 8017a3e + *output_ptr += colorindex_ci[GETJSAMPLE(*input_ptr)+dither[col_index]]; + 8017a7e: 782a ldrb r2, [r5, #0] + 8017a80: f89c e000 ldrb.w lr, [ip] + 8017a84: 9204 str r2, [sp, #16] + 8017a86: 9a02 ldr r2, [sp, #8] + 8017a88: eb02 0b86 add.w fp, r2, r6, lsl #2 + 8017a8c: 9a03 ldr r2, [sp, #12] + col_index = (col_index + 1) & ODITHER_MASK; + 8017a8e: 3601 adds r6, #1 + *output_ptr += colorindex_ci[GETJSAMPLE(*input_ptr)+dither[col_index]]; + 8017a90: f85b b002 ldr.w fp, [fp, r2] + 8017a94: 9a05 ldr r2, [sp, #20] + col_index = (col_index + 1) & ODITHER_MASK; + 8017a96: f006 060f and.w r6, r6, #15 + *output_ptr += colorindex_ci[GETJSAMPLE(*input_ptr)+dither[col_index]]; + 8017a9a: 4496 add lr, r2 + 8017a9c: 9a04 ldr r2, [sp, #16] + 8017a9e: f81e e00b ldrb.w lr, [lr, fp] + 8017aa2: 4472 add r2, lr + 8017aa4: f805 2b01 strb.w r2, [r5], #1 + input_ptr += nc; + 8017aa8: 9a01 ldr r2, [sp, #4] + 8017aaa: 4494 add ip, r2 + for (col = width; col > 0; col--) { + 8017aac: e7e2 b.n 8017a74 + ... + +08017ab0 : +jinit_1pass_quantizer (j_decompress_ptr cinfo) +{ + my_cquantize_ptr cquantize; + + cquantize = (my_cquantize_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 8017ab0: 6843 ldr r3, [r0, #4] + 8017ab2: 2258 movs r2, #88 ; 0x58 + 8017ab4: 2101 movs r1, #1 + 8017ab6: 681b ldr r3, [r3, #0] +{ + 8017ab8: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8017abc: b085 sub sp, #20 + 8017abe: 4604 mov r4, r0 + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 8017ac0: 4798 blx r3 + SIZEOF(my_cquantizer)); + cinfo->cquantize = (struct jpeg_color_quantizer *) cquantize; + cquantize->pub.start_pass = start_pass_1_quant; + 8017ac2: 4b68 ldr r3, [pc, #416] ; (8017c64 ) + cinfo->cquantize = (struct jpeg_color_quantizer *) cquantize; + 8017ac4: f8c4 01e0 str.w r0, [r4, #480] ; 0x1e0 + cquantize->pub.start_pass = start_pass_1_quant; + 8017ac8: 6003 str r3, [r0, #0] + cquantize->pub.finish_pass = finish_pass_1_quant; + 8017aca: 4b67 ldr r3, [pc, #412] ; (8017c68 ) + 8017acc: 6083 str r3, [r0, #8] + cquantize->pub.new_color_map = new_color_map_1_quant; + 8017ace: 4b67 ldr r3, [pc, #412] ; (8017c6c ) + 8017ad0: 60c3 str r3, [r0, #12] + cquantize->fserrors[0] = NULL; /* Flag FS workspace not allocated */ + 8017ad2: 2300 movs r3, #0 + 8017ad4: 6443 str r3, [r0, #68] ; 0x44 + cquantize->odither[0] = NULL; /* Also flag odither arrays not allocated */ + 8017ad6: 6343 str r3, [r0, #52] ; 0x34 + + /* Make sure my internal arrays won't overflow */ + if (cinfo->out_color_components > MAX_Q_COMPS) + 8017ad8: 6fa3 ldr r3, [r4, #120] ; 0x78 + 8017ada: 2b04 cmp r3, #4 + 8017adc: dd07 ble.n 8017aee + ERREXIT1(cinfo, JERR_QUANT_COMPONENTS, MAX_Q_COMPS); + 8017ade: 6823 ldr r3, [r4, #0] + 8017ae0: 2039 movs r0, #57 ; 0x39 + 8017ae2: 2204 movs r2, #4 + 8017ae4: e9c3 0205 strd r0, r2, [r3, #20] + 8017ae8: 681b ldr r3, [r3, #0] + 8017aea: 4620 mov r0, r4 + 8017aec: 4798 blx r3 + /* Make sure colormap indexes can be represented by JSAMPLEs */ + if (cinfo->desired_number_of_colors > (MAXJSAMPLE+1)) + 8017aee: 6e23 ldr r3, [r4, #96] ; 0x60 + 8017af0: f5b3 7f80 cmp.w r3, #256 ; 0x100 + 8017af4: dd08 ble.n 8017b08 + ERREXIT1(cinfo, JERR_QUANT_MANY_COLORS, MAXJSAMPLE+1); + 8017af6: 6823 ldr r3, [r4, #0] + 8017af8: 213b movs r1, #59 ; 0x3b + 8017afa: f44f 7280 mov.w r2, #256 ; 0x100 + 8017afe: 4620 mov r0, r4 + 8017b00: e9c3 1205 strd r1, r2, [r3, #20] + 8017b04: 681b ldr r3, [r3, #0] + 8017b06: 4798 blx r3 + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + 8017b08: f8d4 61e0 ldr.w r6, [r4, #480] ; 0x1e0 + iroot = 1; + 8017b0c: 2301 movs r3, #1 + int nc = cinfo->out_color_components; /* number of color components */ + 8017b0e: f8d4 8078 ldr.w r8, [r4, #120] ; 0x78 + total_colors = select_ncolors(cinfo, cquantize->Ncolors); + 8017b12: f106 0920 add.w r9, r6, #32 + int max_colors = cinfo->desired_number_of_colors; + 8017b16: f8d4 a060 ldr.w sl, [r4, #96] ; 0x60 + iroot++; + 8017b1a: 469b mov fp, r3 + 8017b1c: 3301 adds r3, #1 + for (i = 1; i < nc; i++) + 8017b1e: 2101 movs r1, #1 + temp = iroot; /* set temp = iroot ** nc */ + 8017b20: 461a mov r2, r3 + for (i = 1; i < nc; i++) + 8017b22: 4588 cmp r8, r1 + 8017b24: dc49 bgt.n 8017bba + } while (temp <= (long) max_colors); /* repeat till iroot exceeds root */ + 8017b26: 4592 cmp sl, r2 + 8017b28: daf7 bge.n 8017b1a + if (iroot < 2) + 8017b2a: f1bb 0f01 cmp.w fp, #1 + 8017b2e: d106 bne.n 8017b3e + ERREXIT1(cinfo, JERR_QUANT_FEW_COLORS, (int) temp); + 8017b30: 6823 ldr r3, [r4, #0] + 8017b32: 213a movs r1, #58 ; 0x3a + 8017b34: 4620 mov r0, r4 + 8017b36: e9c3 1205 strd r1, r2, [r3, #20] + 8017b3a: 681b ldr r3, [r3, #0] + 8017b3c: 4798 blx r3 + 8017b3e: f106 071c add.w r7, r6, #28 + for (i = 1; i < nc; i++) + 8017b42: 2300 movs r3, #0 + 8017b44: 2501 movs r5, #1 + 8017b46: 463a mov r2, r7 + for (i = 0; i < nc; i++) { + 8017b48: 4598 cmp r8, r3 + 8017b4a: dc39 bgt.n 8017bc0 + j = (cinfo->out_color_space == JCS_RGB ? RGB_order[i] : i); + 8017b4c: f8df c120 ldr.w ip, [pc, #288] ; 8017c70 + changed = FALSE; + 8017b50: 2100 movs r1, #0 + for (i = 0; i < nc; i++) { + 8017b52: 460b mov r3, r1 + 8017b54: 4598 cmp r8, r3 + 8017b56: dc39 bgt.n 8017bcc + } while (changed); + 8017b58: 2900 cmp r1, #0 + 8017b5a: d1f9 bne.n 8017b50 + if (cinfo->out_color_components == 3) + 8017b5c: 6fa1 ldr r1, [r4, #120] ; 0x78 + TRACEMS4(cinfo, 1, JTRC_QUANT_3_NCOLORS, + 8017b5e: 6823 ldr r3, [r4, #0] + if (cinfo->out_color_components == 3) + 8017b60: 2903 cmp r1, #3 + TRACEMS4(cinfo, 1, JTRC_QUANT_3_NCOLORS, + 8017b62: 685a ldr r2, [r3, #4] + if (cinfo->out_color_components == 3) + 8017b64: d149 bne.n 8017bfa + TRACEMS4(cinfo, 1, JTRC_QUANT_3_NCOLORS, + 8017b66: 619d str r5, [r3, #24] + 8017b68: 6a31 ldr r1, [r6, #32] + 8017b6a: 61d9 str r1, [r3, #28] + 8017b6c: 6a71 ldr r1, [r6, #36] ; 0x24 + 8017b6e: 6219 str r1, [r3, #32] + 8017b70: 6ab1 ldr r1, [r6, #40] ; 0x28 + 8017b72: 6259 str r1, [r3, #36] ; 0x24 + 8017b74: 2160 movs r1, #96 ; 0x60 + 8017b76: 6159 str r1, [r3, #20] + TRACEMS1(cinfo, 1, JTRC_QUANT_NCOLORS, total_colors); + 8017b78: 2101 movs r1, #1 + 8017b7a: 4620 mov r0, r4 + 8017b7c: 4790 blx r2 + colormap = (*cinfo->mem->alloc_sarray) + 8017b7e: 6863 ldr r3, [r4, #4] + 8017b80: 462a mov r2, r5 + 8017b82: 2101 movs r1, #1 + 8017b84: f8d3 8008 ldr.w r8, [r3, #8] + 8017b88: 4620 mov r0, r4 + 8017b8a: 6fa3 ldr r3, [r4, #120] ; 0x78 + 8017b8c: 47c0 blx r8 + for (i = 0; i < cinfo->out_color_components; i++) { + 8017b8e: 46a8 mov r8, r5 + 8017b90: 2200 movs r2, #0 + colormap = (*cinfo->mem->alloc_sarray) + 8017b92: 9001 str r0, [sp, #4] + for (i = 0; i < cinfo->out_color_components; i++) { + 8017b94: 6fa3 ldr r3, [r4, #120] ; 0x78 + 8017b96: 429a cmp r2, r3 + 8017b98: db33 blt.n 8017c02 + cquantize->sv_colormap = colormap; + 8017b9a: 9b01 ldr r3, [sp, #4] + + /* Create the colormap and color index table. */ + create_colormap(cinfo); + create_colorindex(cinfo); + 8017b9c: 4620 mov r0, r4 + cquantize->sv_actual = total_colors; + 8017b9e: e9c6 3504 strd r3, r5, [r6, #16] + create_colorindex(cinfo); + 8017ba2: f7ff fcc7 bl 8017534 + * We do this now since it is FAR storage and may affect the memory + * manager's space calculations. If the user changes to FS dither + * mode in a later pass, we will allocate the space then, and will + * possibly overrun the max_memory_to_use setting. + */ + if (cinfo->dither_mode == JDITHER_FS) + 8017ba6: f894 3058 ldrb.w r3, [r4, #88] ; 0x58 + 8017baa: 2b02 cmp r3, #2 + 8017bac: d156 bne.n 8017c5c + alloc_fs_workspace(cinfo); + 8017bae: 4620 mov r0, r4 +} + 8017bb0: b005 add sp, #20 + 8017bb2: e8bd 4ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + alloc_fs_workspace(cinfo); + 8017bb6: f7ff bdcd b.w 8017754 + temp *= iroot; + 8017bba: 435a muls r2, r3 + for (i = 1; i < nc; i++) + 8017bbc: 3101 adds r1, #1 + 8017bbe: e7b0 b.n 8017b22 + total_colors *= iroot; + 8017bc0: fb0b f505 mul.w r5, fp, r5 + for (i = 0; i < nc; i++) { + 8017bc4: 3301 adds r3, #1 + Ncolors[i] = iroot; + 8017bc6: f842 bf04 str.w fp, [r2, #4]! + for (i = 0; i < nc; i++) { + 8017bca: e7bd b.n 8017b48 + j = (cinfo->out_color_space == JCS_RGB ? RGB_order[i] : i); + 8017bcc: f894 2029 ldrb.w r2, [r4, #41] ; 0x29 + 8017bd0: 2a02 cmp r2, #2 + 8017bd2: bf0c ite eq + 8017bd4: f85c 0023 ldreq.w r0, [ip, r3, lsl #2] + 8017bd8: 4618 movne r0, r3 + temp = total_colors / Ncolors[j]; + 8017bda: f859 b020 ldr.w fp, [r9, r0, lsl #2] + 8017bde: fb95 f2fb sdiv r2, r5, fp + temp *= Ncolors[j]+1; /* done in long arith to avoid oflo */ + 8017be2: fb0b 2202 mla r2, fp, r2, r2 + 8017be6: f10b 0e01 add.w lr, fp, #1 + if (temp > (long) max_colors) + 8017bea: 4592 cmp sl, r2 + 8017bec: dbb4 blt.n 8017b58 + for (i = 0; i < nc; i++) { + 8017bee: 3301 adds r3, #1 + 8017bf0: 4615 mov r5, r2 + changed = TRUE; + 8017bf2: 2101 movs r1, #1 + Ncolors[j]++; /* OK, apply the increment */ + 8017bf4: f849 e020 str.w lr, [r9, r0, lsl #2] + for (i = 0; i < nc; i++) { + 8017bf8: e7ac b.n 8017b54 + TRACEMS1(cinfo, 1, JTRC_QUANT_NCOLORS, total_colors); + 8017bfa: 2161 movs r1, #97 ; 0x61 + 8017bfc: e9c3 1505 strd r1, r5, [r3, #20] + 8017c00: e7ba b.n 8017b78 + nci = cquantize->Ncolors[i]; /* # of distinct values for this color */ + 8017c02: f857 af04 ldr.w sl, [r7, #4]! + val = output_value(cinfo, i, j, nci-1); + 8017c06: f10a 33ff add.w r3, sl, #4294967295 + 8017c0a: 9302 str r3, [sp, #8] + return (int) (((INT32) j * MAXJSAMPLE + maxj/2) / maxj); + 8017c0c: 105b asrs r3, r3, #1 + blksize = blkdist / nci; + 8017c0e: fb98 f9fa sdiv r9, r8, sl + return (int) (((INT32) j * MAXJSAMPLE + maxj/2) / maxj); + 8017c12: 9303 str r3, [sp, #12] + for (j = 0; j < nci; j++) { + 8017c14: 2300 movs r3, #0 + 8017c16: 469b mov fp, r3 + 8017c18: 459a cmp sl, r3 + 8017c1a: dc02 bgt.n 8017c22 + for (i = 0; i < cinfo->out_color_components; i++) { + 8017c1c: 3201 adds r2, #1 + blkdist = blksize; /* blksize of this color is blkdist of next */ + 8017c1e: 46c8 mov r8, r9 + 8017c20: e7b8 b.n 8017b94 + return (int) (((INT32) j * MAXJSAMPLE + maxj/2) / maxj); + 8017c22: 9803 ldr r0, [sp, #12] + 8017c24: ebc3 2103 rsb r1, r3, r3, lsl #8 + for (ptr = j * blksize; ptr < total_colors; ptr += blkdist) { + 8017c28: 46dc mov ip, fp + return (int) (((INT32) j * MAXJSAMPLE + maxj/2) / maxj); + 8017c2a: 4401 add r1, r0 + 8017c2c: 9802 ldr r0, [sp, #8] + 8017c2e: fb91 f1f0 sdiv r1, r1, r0 + 8017c32: 4608 mov r0, r1 + for (ptr = j * blksize; ptr < total_colors; ptr += blkdist) { + 8017c34: 45ac cmp ip, r5 + 8017c36: db0e blt.n 8017c56 + for (j = 0; j < nci; j++) { + 8017c38: 3301 adds r3, #1 + 8017c3a: 44cb add fp, r9 + 8017c3c: e7ec b.n 8017c18 + colormap[i][ptr+k] = (JSAMPLE) val; + 8017c3e: 9901 ldr r1, [sp, #4] + 8017c40: f851 1022 ldr.w r1, [r1, r2, lsl #2] + 8017c44: 4471 add r1, lr + for (k = 0; k < blksize; k++) + 8017c46: f10e 0e01 add.w lr, lr, #1 + colormap[i][ptr+k] = (JSAMPLE) val; + 8017c4a: f801 000c strb.w r0, [r1, ip] + for (k = 0; k < blksize; k++) + 8017c4e: 45f1 cmp r9, lr + 8017c50: dcf5 bgt.n 8017c3e + for (ptr = j * blksize; ptr < total_colors; ptr += blkdist) { + 8017c52: 44c4 add ip, r8 + 8017c54: e7ee b.n 8017c34 + for (k = 0; k < blksize; k++) + 8017c56: f04f 0e00 mov.w lr, #0 + 8017c5a: e7f8 b.n 8017c4e +} + 8017c5c: b005 add sp, #20 + 8017c5e: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 8017c62: bf00 nop + 8017c64: 08017791 .word 0x08017791 + 8017c68: 08017783 .word 0x08017783 + 8017c6c: 08017785 .word 0x08017785 + 8017c70: 08039754 .word 0x08039754 + +08017c74 : + JSAMPARRAY output_buf, int num_rows) +{ + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + register JSAMPROW ptr; + register histptr histp; + register hist3d histogram = cquantize->histogram; + 8017c74: f8d0 21e0 ldr.w r2, [r0, #480] ; 0x1e0 + int row; + JDIMENSION col; + JDIMENSION width = cinfo->output_width; + 8017c78: f8d0 c070 ldr.w ip, [r0, #112] ; 0x70 +{ + 8017c7c: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} + register hist3d histogram = cquantize->histogram; + 8017c80: 6997 ldr r7, [r2, #24] + + for (row = 0; row < num_rows; row++) { + 8017c82: 2500 movs r5, #0 + 8017c84: f04f 0e02 mov.w lr, #2 + histp = & histogram[GETJSAMPLE(ptr[0]) >> C0_SHIFT] + [GETJSAMPLE(ptr[1]) >> C1_SHIFT] + [GETJSAMPLE(ptr[2]) >> C2_SHIFT]; + /* increment, check for overflow and undo increment if so. */ + if (++(*histp) <= 0) + (*histp)--; + 8017c88: f64f 78ff movw r8, #65535 ; 0xffff + for (row = 0; row < num_rows; row++) { + 8017c8c: 429d cmp r5, r3 + 8017c8e: db01 blt.n 8017c94 + ptr += 3; + } + } +} + 8017c90: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} + for (col = width; col > 0; col--) { + 8017c94: f851 0025 ldr.w r0, [r1, r5, lsl #2] + 8017c98: 4666 mov r6, ip + 8017c9a: 3003 adds r0, #3 + 8017c9c: b90e cbnz r6, 8017ca2 + for (row = 0; row < num_rows; row++) { + 8017c9e: 3501 adds r5, #1 + 8017ca0: e7f4 b.n 8017c8c + [GETJSAMPLE(ptr[1]) >> C1_SHIFT] + 8017ca2: f810 2c02 ldrb.w r2, [r0, #-2] + for (col = width; col > 0; col--) { + 8017ca6: 3e01 subs r6, #1 + histp = & histogram[GETJSAMPLE(ptr[0]) >> C0_SHIFT] + 8017ca8: f810 9c03 ldrb.w r9, [r0, #-3] + 8017cac: 3003 adds r0, #3 + [GETJSAMPLE(ptr[2]) >> C2_SHIFT]; + 8017cae: f810 4c04 ldrb.w r4, [r0, #-4] + [GETJSAMPLE(ptr[1]) >> C1_SHIFT] + 8017cb2: 0892 lsrs r2, r2, #2 + histp = & histogram[GETJSAMPLE(ptr[0]) >> C0_SHIFT] + 8017cb4: ea4f 09d9 mov.w r9, r9, lsr #3 + [GETJSAMPLE(ptr[1]) >> C1_SHIFT] + 8017cb8: 0192 lsls r2, r2, #6 + 8017cba: 08e4 lsrs r4, r4, #3 + 8017cbc: f857 9029 ldr.w r9, [r7, r9, lsl #2] + 8017cc0: fb1e 2404 smlabb r4, lr, r4, r2 + if (++(*histp) <= 0) + 8017cc4: f839 2004 ldrh.w r2, [r9, r4] + 8017cc8: 3201 adds r2, #1 + 8017cca: b292 uxth r2, r2 + (*histp)--; + 8017ccc: 2a00 cmp r2, #0 + 8017cce: bf08 it eq + 8017cd0: 4642 moveq r2, r8 + 8017cd2: f829 2004 strh.w r2, [r9, r4] + for (col = width; col > 0; col--) { + 8017cd6: e7e1 b.n 8017c9c + +08017cd8 : +LOCAL(void) +fill_inverse_cmap (j_decompress_ptr cinfo, int c0, int c1, int c2) +/* Fill the inverse-colormap entries in the update box that contains */ +/* histogram cell c0/c1/c2. (Only that one cell MUST be filled, but */ +/* we can fill as many others as we wish.) */ +{ + 8017cd8: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8017cdc: f2ad 5dcc subw sp, sp, #1484 ; 0x5cc + 8017ce0: 4680 mov r8, r0 + for (i = 0; i < numcolors; i++) { + 8017ce2: 2500 movs r5, #0 +{ + 8017ce4: 930b str r3, [sp, #44] ; 0x2c + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + hist3d histogram = cquantize->histogram; + 8017ce6: f8d0 31e0 ldr.w r3, [r0, #480] ; 0x1e0 + /* This array holds the actually closest colormap index for each cell. */ + JSAMPLE bestcolor[BOX_C0_ELEMS * BOX_C1_ELEMS * BOX_C2_ELEMS]; + + /* Convert cell coordinates to update box ID */ + c0 >>= BOX_C0_LOG; + c1 >>= BOX_C1_LOG; + 8017cea: 10d0 asrs r0, r2, #3 + hist3d histogram = cquantize->histogram; + 8017cec: 699b ldr r3, [r3, #24] + /* Compute true coordinates of update box's origin corner. + * Actually we compute the coordinates of the center of the corner + * histogram cell, which are the lower bounds of the volume we care about. + */ + minc0 = (c0 << BOX_C0_SHIFT) + ((1 << C0_SHIFT) >> 1); + minc1 = (c1 << BOX_C1_SHIFT) + ((1 << C1_SHIFT) >> 1); + 8017cee: 0140 lsls r0, r0, #5 +{ + 8017cf0: e9cd 1209 strd r1, r2, [sp, #36] ; 0x24 + c0 >>= BOX_C0_LOG; + 8017cf4: 1089 asrs r1, r1, #2 + hist3d histogram = cquantize->histogram; + 8017cf6: 9306 str r3, [sp, #24] + c2 >>= BOX_C2_LOG; + 8017cf8: 9b0b ldr r3, [sp, #44] ; 0x2c + minc1 = (c1 << BOX_C1_SHIFT) + ((1 << C1_SHIFT) >> 1); + 8017cfa: f100 0a02 add.w sl, r0, #2 + minc0 = (c0 << BOX_C0_SHIFT) + ((1 << C0_SHIFT) >> 1); + 8017cfe: 0149 lsls r1, r1, #5 + maxc1 = minc1 + ((1 << BOX_C1_SHIFT) - (1 << C1_SHIFT)); + 8017d00: 301e adds r0, #30 + c2 >>= BOX_C2_LOG; + 8017d02: 109c asrs r4, r3, #2 + int numcolors = cinfo->actual_number_of_colors; + 8017d04: f8d8 3084 ldr.w r3, [r8, #132] ; 0x84 + minc0 = (c0 << BOX_C0_SHIFT) + ((1 << C0_SHIFT) >> 1); + 8017d08: f101 0904 add.w r9, r1, #4 + maxc0 = minc0 + ((1 << BOX_C0_SHIFT) - (1 << C0_SHIFT)); + 8017d0c: 311c adds r1, #28 + int numcolors = cinfo->actual_number_of_colors; + 8017d0e: 9302 str r3, [sp, #8] + minc2 = (c2 << BOX_C2_SHIFT) + ((1 << C2_SHIFT) >> 1); + 8017d10: 0164 lsls r4, r4, #5 + centerc0 = (minc0 + maxc0) >> 1; + 8017d12: eb09 0301 add.w r3, r9, r1 + minc2 = (c2 << BOX_C2_SHIFT) + ((1 << C2_SHIFT) >> 1); + 8017d16: f104 0b04 add.w fp, r4, #4 + maxc2 = minc2 + ((1 << BOX_C2_SHIFT) - (1 << C2_SHIFT)); + 8017d1a: 341c adds r4, #28 + centerc0 = (minc0 + maxc0) >> 1; + 8017d1c: 105b asrs r3, r3, #1 + 8017d1e: 9303 str r3, [sp, #12] + centerc1 = (minc1 + maxc1) >> 1; + 8017d20: eb0a 0300 add.w r3, sl, r0 + 8017d24: 105b asrs r3, r3, #1 + 8017d26: 9304 str r3, [sp, #16] + centerc2 = (minc2 + maxc2) >> 1; + 8017d28: eb0b 0304 add.w r3, fp, r4 + 8017d2c: 105b asrs r3, r3, #1 + 8017d2e: 9305 str r3, [sp, #20] + minmaxdist = 0x7FFFFFFFL; + 8017d30: f06f 4300 mvn.w r3, #2147483648 ; 0x80000000 + 8017d34: 9301 str r3, [sp, #4] + for (i = 0; i < numcolors; i++) { + 8017d36: 9b02 ldr r3, [sp, #8] + 8017d38: 42ab cmp r3, r5 + 8017d3a: dc43 bgt.n 8017dc4 + ncolors = 0; + 8017d3c: 2200 movs r2, #0 + 8017d3e: a972 add r1, sp, #456 ; 0x1c8 + colorlist[ncolors++] = (JSAMPLE) i; + 8017d40: a832 add r0, sp, #200 ; 0xc8 + for (i = 0; i < numcolors; i++) { + 8017d42: 4613 mov r3, r2 + 8017d44: 9c02 ldr r4, [sp, #8] + 8017d46: 429c cmp r4, r3 + 8017d48: f300 809d bgt.w 8017e86 + for (i = BOX_C0_ELEMS*BOX_C1_ELEMS*BOX_C2_ELEMS-1; i >= 0; i--) + 8017d4c: 2380 movs r3, #128 ; 0x80 + bptr = bestdist; + 8017d4e: a972 add r1, sp, #456 ; 0x1c8 + *bptr++ = 0x7FFFFFFFL; + 8017d50: f06f 4000 mvn.w r0, #2147483648 ; 0x80000000 + for (i = BOX_C0_ELEMS*BOX_C1_ELEMS*BOX_C2_ELEMS-1; i >= 0; i--) + 8017d54: 3b01 subs r3, #1 + *bptr++ = 0x7FFFFFFFL; + 8017d56: f841 0b04 str.w r0, [r1], #4 + for (i = BOX_C0_ELEMS*BOX_C1_ELEMS*BOX_C2_ELEMS-1; i >= 0; i--) + 8017d5a: d1fb bne.n 8017d54 + 8017d5c: a932 add r1, sp, #200 ; 0xc8 + 8017d5e: 9108 str r1, [sp, #32] + for (i = 0; i < numcolors; i++) { + 8017d60: 9301 str r3, [sp, #4] + 8017d62: 9b01 ldr r3, [sp, #4] + 8017d64: 4293 cmp r3, r2 + 8017d66: f040 8097 bne.w 8017e98 + /* Determine the actually nearest colors. */ + find_best_colors(cinfo, minc0, minc1, minc2, numcolors, colorlist, + bestcolor); + + /* Save the best color numbers (plus 1) in the main cache array */ + c0 <<= BOX_C0_LOG; /* convert ID back to base cell indexes */ + 8017d6a: 9b09 ldr r3, [sp, #36] ; 0x24 + c1 <<= BOX_C1_LOG; + c2 <<= BOX_C2_LOG; + cptr = bestcolor; + 8017d6c: a912 add r1, sp, #72 ; 0x48 + c0 <<= BOX_C0_LOG; /* convert ID back to base cell indexes */ + 8017d6e: f023 0003 bic.w r0, r3, #3 + 8017d72: 9b06 ldr r3, [sp, #24] + 8017d74: eb03 0580 add.w r5, r3, r0, lsl #2 + c2 <<= BOX_C2_LOG; + 8017d78: 9b0b ldr r3, [sp, #44] ; 0x2c + 8017d7a: f023 0203 bic.w r2, r3, #3 + c1 <<= BOX_C1_LOG; + 8017d7e: 9b0a ldr r3, [sp, #40] ; 0x28 + 8017d80: 4628 mov r0, r5 + 8017d82: f023 0307 bic.w r3, r3, #7 + 8017d86: 3010 adds r0, #16 + 8017d88: 019b lsls r3, r3, #6 + 8017d8a: eb03 0342 add.w r3, r3, r2, lsl #1 + for (ic0 = 0; ic0 < BOX_C0_ELEMS; ic0++) { + for (ic1 = 0; ic1 < BOX_C1_ELEMS; ic1++) { + cachep = & histogram[c0+ic0][c1+ic1][c2]; + 8017d8e: f855 4b04 ldr.w r4, [r5], #4 + for (ic1 = 0; ic1 < BOX_C1_ELEMS; ic1++) { + 8017d92: f101 0720 add.w r7, r1, #32 + 8017d96: 441c add r4, r3 + cachep = & histogram[c0+ic0][c1+ic1][c2]; + 8017d98: 4626 mov r6, r4 + 8017d9a: 460a mov r2, r1 + for (ic2 = 0; ic2 < BOX_C2_ELEMS; ic2++) { + 8017d9c: f101 0c04 add.w ip, r1, #4 + *cachep++ = (histcell) (GETJSAMPLE(*cptr++) + 1); + 8017da0: f812 1b01 ldrb.w r1, [r2], #1 + 8017da4: 3101 adds r1, #1 + for (ic2 = 0; ic2 < BOX_C2_ELEMS; ic2++) { + 8017da6: 4562 cmp r2, ip + *cachep++ = (histcell) (GETJSAMPLE(*cptr++) + 1); + 8017da8: f826 1b02 strh.w r1, [r6], #2 + for (ic2 = 0; ic2 < BOX_C2_ELEMS; ic2++) { + 8017dac: d1f8 bne.n 8017da0 + for (ic1 = 0; ic1 < BOX_C1_ELEMS; ic1++) { + 8017dae: 42ba cmp r2, r7 + *cachep++ = (histcell) (GETJSAMPLE(*cptr++) + 1); + 8017db0: 4611 mov r1, r2 + for (ic1 = 0; ic1 < BOX_C1_ELEMS; ic1++) { + 8017db2: f104 0440 add.w r4, r4, #64 ; 0x40 + 8017db6: d1ef bne.n 8017d98 + for (ic0 = 0; ic0 < BOX_C0_ELEMS; ic0++) { + 8017db8: 4285 cmp r5, r0 + 8017dba: d1e8 bne.n 8017d8e + } + } + } +} + 8017dbc: f20d 5dcc addw sp, sp, #1484 ; 0x5cc + 8017dc0: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + x = GETJSAMPLE(cinfo->colormap[0][i]); + 8017dc4: f8d8 7088 ldr.w r7, [r8, #136] ; 0x88 + 8017dc8: 683b ldr r3, [r7, #0] + 8017dca: 5d5a ldrb r2, [r3, r5] + if (x < minc0) { + 8017dcc: 4591 cmp r9, r2 + 8017dce: dd2b ble.n 8017e28 + tdist = (x - minc0) * C0_SCALE; + 8017dd0: eba2 0c09 sub.w ip, r2, r9 + tdist = (x - maxc0) * C0_SCALE; + 8017dd4: 1a52 subs r2, r2, r1 + min_dist = tdist*tdist; + 8017dd6: fb0c fc0c mul.w ip, ip, ip + max_dist = tdist*tdist; + 8017dda: 4352 muls r2, r2 + x = GETJSAMPLE(cinfo->colormap[1][i]); + 8017ddc: 687b ldr r3, [r7, #4] + 8017dde: 5d5b ldrb r3, [r3, r5] + if (x < minc1) { + 8017de0: 459a cmp sl, r3 + 8017de2: dd34 ble.n 8017e4e + tdist = (x - minc1) * C1_SCALE; + 8017de4: eba3 0e0a sub.w lr, r3, sl + 8017de8: eb0e 0e4e add.w lr, lr, lr, lsl #1 + min_dist += tdist*tdist; + 8017dec: fb0e cc0e mla ip, lr, lr, ip + tdist = (x - maxc1) * C1_SCALE; + 8017df0: 1a1b subs r3, r3, r0 + tdist = (x - minc1) * C1_SCALE; + 8017df2: eb03 0343 add.w r3, r3, r3, lsl #1 + max_dist += tdist*tdist; + 8017df6: fb03 2303 mla r3, r3, r3, r2 + x = GETJSAMPLE(cinfo->colormap[2][i]); + 8017dfa: 68ba ldr r2, [r7, #8] + 8017dfc: 5d52 ldrb r2, [r2, r5] + if (x < minc2) { + 8017dfe: 4593 cmp fp, r2 + 8017e00: dd34 ble.n 8017e6c + tdist = (x - minc2) * C2_SCALE; + 8017e02: eba2 070b sub.w r7, r2, fp + 8017e06: 007f lsls r7, r7, #1 + min_dist += tdist*tdist; + 8017e08: fb07 cc07 mla ip, r7, r7, ip + tdist = (x - maxc2) * C2_SCALE; + 8017e0c: 1b12 subs r2, r2, r4 + tdist = (x - minc2) * C2_SCALE; + 8017e0e: 0052 lsls r2, r2, #1 + max_dist += tdist*tdist; + 8017e10: fb02 3302 mla r3, r2, r2, r3 + mindist[i] = min_dist; /* save away the results */ + 8017e14: aa72 add r2, sp, #456 ; 0x1c8 + 8017e16: f842 c025 str.w ip, [r2, r5, lsl #2] + for (i = 0; i < numcolors; i++) { + 8017e1a: 3501 adds r5, #1 + 8017e1c: 9a01 ldr r2, [sp, #4] + 8017e1e: 429a cmp r2, r3 + 8017e20: bfa8 it ge + 8017e22: 461a movge r2, r3 + 8017e24: 9201 str r2, [sp, #4] + 8017e26: e786 b.n 8017d36 + } else if (x > maxc0) { + 8017e28: 4291 cmp r1, r2 + 8017e2a: da06 bge.n 8017e3a + tdist = (x - maxc0) * C0_SCALE; + 8017e2c: eba2 0c01 sub.w ip, r2, r1 + tdist = (x - minc0) * C0_SCALE; + 8017e30: eba2 0209 sub.w r2, r2, r9 + min_dist = tdist*tdist; + 8017e34: fb0c fc0c mul.w ip, ip, ip + tdist = (x - minc0) * C0_SCALE; + 8017e38: e7cf b.n 8017dda + if (x <= centerc0) { + 8017e3a: 9b03 ldr r3, [sp, #12] + min_dist = 0; + 8017e3c: f04f 0c00 mov.w ip, #0 + if (x <= centerc0) { + 8017e40: 4293 cmp r3, r2 + tdist = (x - maxc0) * C0_SCALE; + 8017e42: bfac ite ge + 8017e44: 1a52 subge r2, r2, r1 + tdist = (x - minc0) * C0_SCALE; + 8017e46: eba2 0209 sublt.w r2, r2, r9 + max_dist = tdist*tdist; + 8017e4a: 4352 muls r2, r2 + 8017e4c: e7c6 b.n 8017ddc + } else if (x > maxc1) { + 8017e4e: 4298 cmp r0, r3 + 8017e50: da08 bge.n 8017e64 + tdist = (x - maxc1) * C1_SCALE; + 8017e52: eba3 0e00 sub.w lr, r3, r0 + 8017e56: eb0e 0e4e add.w lr, lr, lr, lsl #1 + min_dist += tdist*tdist; + 8017e5a: fb0e cc0e mla ip, lr, lr, ip + tdist = (x - minc1) * C1_SCALE; + 8017e5e: eba3 030a sub.w r3, r3, sl + 8017e62: e7c6 b.n 8017df2 + if (x <= centerc1) { + 8017e64: 9e04 ldr r6, [sp, #16] + 8017e66: 429e cmp r6, r3 + 8017e68: dbf9 blt.n 8017e5e + 8017e6a: e7c1 b.n 8017df0 + } else if (x > maxc2) { + 8017e6c: 4294 cmp r4, r2 + 8017e6e: da06 bge.n 8017e7e + tdist = (x - maxc2) * C2_SCALE; + 8017e70: 1b17 subs r7, r2, r4 + 8017e72: 007f lsls r7, r7, #1 + min_dist += tdist*tdist; + 8017e74: fb07 cc07 mla ip, r7, r7, ip + tdist = (x - minc2) * C2_SCALE; + 8017e78: eba2 020b sub.w r2, r2, fp + 8017e7c: e7c7 b.n 8017e0e + if (x <= centerc2) { + 8017e7e: 9e05 ldr r6, [sp, #20] + 8017e80: 4296 cmp r6, r2 + 8017e82: dbf9 blt.n 8017e78 + 8017e84: e7c2 b.n 8017e0c + if (mindist[i] <= minmaxdist) + 8017e86: f851 4b04 ldr.w r4, [r1], #4 + 8017e8a: 9d01 ldr r5, [sp, #4] + 8017e8c: 42a5 cmp r5, r4 + colorlist[ncolors++] = (JSAMPLE) i; + 8017e8e: bfa4 itt ge + 8017e90: 5483 strbge r3, [r0, r2] + 8017e92: 3201 addge r2, #1 + for (i = 0; i < numcolors; i++) { + 8017e94: 3301 adds r3, #1 + 8017e96: e755 b.n 8017d44 + icolor = GETJSAMPLE(colorlist[i]); + 8017e98: 9b08 ldr r3, [sp, #32] + cptr = bestcolor; + 8017e9a: f10d 0e48 add.w lr, sp, #72 ; 0x48 + inc0 = (minc0 - GETJSAMPLE(cinfo->colormap[0][icolor])) * C0_SCALE; + 8017e9e: f8d8 1088 ldr.w r1, [r8, #136] ; 0x88 + icolor = GETJSAMPLE(colorlist[i]); + 8017ea2: f813 4b01 ldrb.w r4, [r3], #1 + 8017ea6: 9308 str r3, [sp, #32] + inc0 = (minc0 - GETJSAMPLE(cinfo->colormap[0][icolor])) * C0_SCALE; + 8017ea8: 680b ldr r3, [r1, #0] + 8017eaa: 5d1d ldrb r5, [r3, r4] + inc1 = (minc1 - GETJSAMPLE(cinfo->colormap[1][icolor])) * C1_SCALE; + 8017eac: 684b ldr r3, [r1, #4] + inc2 = (minc2 - GETJSAMPLE(cinfo->colormap[2][icolor])) * C2_SCALE; + 8017eae: 6889 ldr r1, [r1, #8] + inc0 = (minc0 - GETJSAMPLE(cinfo->colormap[0][icolor])) * C0_SCALE; + 8017eb0: eba9 0505 sub.w r5, r9, r5 + inc1 = (minc1 - GETJSAMPLE(cinfo->colormap[1][icolor])) * C1_SCALE; + 8017eb4: 5d18 ldrb r0, [r3, r4] + inc2 = (minc2 - GETJSAMPLE(cinfo->colormap[2][icolor])) * C2_SCALE; + 8017eb6: 5d09 ldrb r1, [r1, r4] + inc1 = (minc1 - GETJSAMPLE(cinfo->colormap[1][icolor])) * C1_SCALE; + 8017eb8: ebaa 0000 sub.w r0, sl, r0 + inc2 = (minc2 - GETJSAMPLE(cinfo->colormap[2][icolor])) * C2_SCALE; + 8017ebc: ebab 0101 sub.w r1, fp, r1 + inc1 = (minc1 - GETJSAMPLE(cinfo->colormap[1][icolor])) * C1_SCALE; + 8017ec0: eb00 0340 add.w r3, r0, r0, lsl #1 + inc2 = (minc2 - GETJSAMPLE(cinfo->colormap[2][icolor])) * C2_SCALE; + 8017ec4: 0049 lsls r1, r1, #1 + dist0 += inc1*inc1; + 8017ec6: 435b muls r3, r3 + 8017ec8: fb05 3305 mla r3, r5, r5, r3 + inc0 = inc0 * (2 * STEP_C0) + STEP_C0 * STEP_C0; + 8017ecc: 3504 adds r5, #4 + dist0 += inc2*inc2; + 8017ece: fb01 3301 mla r3, r1, r1, r3 + inc2 = inc2 * (2 * STEP_C2) + STEP_C2 * STEP_C2; + 8017ed2: 3108 adds r1, #8 + dist0 += inc2*inc2; + 8017ed4: 9304 str r3, [sp, #16] + inc0 = inc0 * (2 * STEP_C0) + STEP_C0 * STEP_C0; + 8017ed6: 012b lsls r3, r5, #4 + 8017ed8: 930c str r3, [sp, #48] ; 0x30 + inc1 = inc1 * (2 * STEP_C1) + STEP_C1 * STEP_C1; + 8017eda: 2348 movs r3, #72 ; 0x48 + 8017edc: 4358 muls r0, r3 + 8017ede: f100 0390 add.w r3, r0, #144 ; 0x90 + 8017ee2: 930d str r3, [sp, #52] ; 0x34 + inc2 = inc2 * (2 * STEP_C2) + STEP_C2 * STEP_C2; + 8017ee4: 014b lsls r3, r1, #5 + 8017ee6: 2100 movs r1, #0 + 8017ee8: 9307 str r3, [sp, #28] + for (ic0 = BOX_C0_ELEMS-1; ic0 >= 0; ic0--) { + 8017eea: f500 6319 add.w r3, r0, #2448 ; 0x990 + 8017eee: 930f str r3, [sp, #60] ; 0x3c + 8017ef0: 9b07 ldr r3, [sp, #28] + 8017ef2: f503 6300 add.w r3, r3, #2048 ; 0x800 + 8017ef6: 930e str r3, [sp, #56] ; 0x38 + 8017ef8: ab72 add r3, sp, #456 ; 0x1c8 + xx2 = inc2; + 8017efa: 46f4 mov ip, lr + xx1 = inc1; + 8017efc: 980d ldr r0, [sp, #52] ; 0x34 + 8017efe: 440b add r3, r1 + 8017f00: 9305 str r3, [sp, #20] + 8017f02: 9b0c ldr r3, [sp, #48] ; 0x30 + 8017f04: 440b add r3, r1 + 8017f06: 9310 str r3, [sp, #64] ; 0x40 + 8017f08: 9b04 ldr r3, [sp, #16] + 8017f0a: 9303 str r3, [sp, #12] + 8017f0c: e023 b.n 8017f56 + if (dist2 < *bptr) { + 8017f0e: 463b mov r3, r7 + 8017f10: f853 7f04 ldr.w r7, [r3, #4]! + 8017f14: 9711 str r7, [sp, #68] ; 0x44 + 8017f16: 461f mov r7, r3 + 8017f18: 9b11 ldr r3, [sp, #68] ; 0x44 + 8017f1a: 42ab cmp r3, r5 + *bptr = dist2; + 8017f1c: bfc4 itt gt + 8017f1e: 463b movgt r3, r7 + 8017f20: 601d strgt r5, [r3, #0] + dist2 += xx2; + 8017f22: 4435 add r5, r6 + *cptr = (JSAMPLE) icolor; + 8017f24: bfc8 it gt + 8017f26: 9b02 ldrgt r3, [sp, #8] + xx2 += 2 * STEP_C2 * STEP_C2; + 8017f28: f506 7600 add.w r6, r6, #512 ; 0x200 + *cptr = (JSAMPLE) icolor; + 8017f2c: bfc8 it gt + 8017f2e: 701c strbgt r4, [r3, #0] + cptr++; + 8017f30: 9b02 ldr r3, [sp, #8] + 8017f32: 3301 adds r3, #1 + 8017f34: 9302 str r3, [sp, #8] + for (ic2 = BOX_C2_ELEMS-1; ic2 >= 0; ic2--) { + 8017f36: 9b0e ldr r3, [sp, #56] ; 0x38 + 8017f38: 42b3 cmp r3, r6 + 8017f3a: d1e8 bne.n 8017f0e + bptr++; + 8017f3c: 9b05 ldr r3, [sp, #20] + cptr++; + 8017f3e: f10c 0c04 add.w ip, ip, #4 + bptr++; + 8017f42: 3310 adds r3, #16 + 8017f44: 9305 str r3, [sp, #20] + dist1 += xx1; + 8017f46: 9b03 ldr r3, [sp, #12] + 8017f48: 4403 add r3, r0 + xx1 += 2 * STEP_C1 * STEP_C1; + 8017f4a: f500 7090 add.w r0, r0, #288 ; 0x120 + dist1 += xx1; + 8017f4e: 9303 str r3, [sp, #12] + for (ic1 = BOX_C1_ELEMS-1; ic1 >= 0; ic1--) { + 8017f50: 9b0f ldr r3, [sp, #60] ; 0x3c + 8017f52: 4298 cmp r0, r3 + 8017f54: d007 beq.n 8017f66 + for (ic2 = BOX_C2_ELEMS-1; ic2 >= 0; ic2--) { + 8017f56: 9b05 ldr r3, [sp, #20] + xx2 = inc2; + 8017f58: 9e07 ldr r6, [sp, #28] + 8017f5a: 3b04 subs r3, #4 + 8017f5c: 9d03 ldr r5, [sp, #12] + 8017f5e: f8cd c008 str.w ip, [sp, #8] + 8017f62: 461f mov r7, r3 + 8017f64: e7d3 b.n 8017f0e + dist0 += xx0; + 8017f66: 9804 ldr r0, [sp, #16] + for (ic0 = BOX_C0_ELEMS-1; ic0 >= 0; ic0--) { + 8017f68: 3180 adds r1, #128 ; 0x80 + dist0 += xx0; + 8017f6a: 9b10 ldr r3, [sp, #64] ; 0x40 + cptr++; + 8017f6c: f10e 0e20 add.w lr, lr, #32 + for (ic0 = BOX_C0_ELEMS-1; ic0 >= 0; ic0--) { + 8017f70: f5b1 7f00 cmp.w r1, #512 ; 0x200 + dist0 += xx0; + 8017f74: 4418 add r0, r3 + 8017f76: 9004 str r0, [sp, #16] + for (ic0 = BOX_C0_ELEMS-1; ic0 >= 0; ic0--) { + 8017f78: d1be bne.n 8017ef8 + for (i = 0; i < numcolors; i++) { + 8017f7a: 9b01 ldr r3, [sp, #4] + 8017f7c: 3301 adds r3, #1 + 8017f7e: e6ef b.n 8017d60 + +08017f80 : + +METHODDEF(void) +pass2_no_dither (j_decompress_ptr cinfo, + JSAMPARRAY input_buf, JSAMPARRAY output_buf, int num_rows) +/* This version performs no dithering */ +{ + 8017f80: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8017f84: 469a mov sl, r3 + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + hist3d histogram = cquantize->histogram; + 8017f86: f8d0 31e0 ldr.w r3, [r0, #480] ; 0x1e0 +{ + 8017f8a: b085 sub sp, #20 + 8017f8c: 4688 mov r8, r1 + hist3d histogram = cquantize->histogram; + 8017f8e: 699b ldr r3, [r3, #24] +{ + 8017f90: 4691 mov r9, r2 + register int c0, c1, c2; + int row; + JDIMENSION col; + JDIMENSION width = cinfo->output_width; + + for (row = 0; row < num_rows; row++) { + 8017f92: 2500 movs r5, #0 + hist3d histogram = cquantize->histogram; + 8017f94: 9300 str r3, [sp, #0] + JDIMENSION width = cinfo->output_width; + 8017f96: 6f03 ldr r3, [r0, #112] ; 0x70 + 8017f98: 9301 str r3, [sp, #4] + for (row = 0; row < num_rows; row++) { + 8017f9a: 4555 cmp r5, sl + 8017f9c: db02 blt.n 8017fa4 + fill_inverse_cmap(cinfo, c0,c1,c2); + /* Now emit the colormap index for this cell */ + *outptr++ = (JSAMPLE) (*cachep - 1); + } + } +} + 8017f9e: b005 add sp, #20 + 8017fa0: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + outptr = output_buf[row]; + 8017fa4: f859 6025 ldr.w r6, [r9, r5, lsl #2] + for (col = width; col > 0; col--) { + 8017fa8: f858 4025 ldr.w r4, [r8, r5, lsl #2] + 8017fac: 9b01 ldr r3, [sp, #4] + 8017fae: 3403 adds r4, #3 + 8017fb0: eb06 0b03 add.w fp, r6, r3 + 8017fb4: 455e cmp r6, fp + 8017fb6: d101 bne.n 8017fbc + for (row = 0; row < num_rows; row++) { + 8017fb8: 3501 adds r5, #1 + 8017fba: e7ee b.n 8017f9a + c0 = GETJSAMPLE(*inptr++) >> C0_SHIFT; + 8017fbc: f814 cc03 ldrb.w ip, [r4, #-3] + c1 = GETJSAMPLE(*inptr++) >> C1_SHIFT; + 8017fc0: f814 7c02 ldrb.w r7, [r4, #-2] + c0 = GETJSAMPLE(*inptr++) >> C0_SHIFT; + 8017fc4: ea4f 01dc mov.w r1, ip, lsr #3 + cachep = & histogram[c0][c1][c2]; + 8017fc8: 9a00 ldr r2, [sp, #0] + c1 = GETJSAMPLE(*inptr++) >> C1_SHIFT; + 8017fca: ea4f 0e97 mov.w lr, r7, lsr #2 + c2 = GETJSAMPLE(*inptr++) >> C2_SHIFT; + 8017fce: f814 3c01 ldrb.w r3, [r4, #-1] + cachep = & histogram[c0][c1][c2]; + 8017fd2: f852 c021 ldr.w ip, [r2, r1, lsl #2] + c2 = GETJSAMPLE(*inptr++) >> C2_SHIFT; + 8017fd6: 08db lsrs r3, r3, #3 + cachep = & histogram[c0][c1][c2]; + 8017fd8: eb0c 178e add.w r7, ip, lr, lsl #6 + if (*cachep == 0) + 8017fdc: f837 c013 ldrh.w ip, [r7, r3, lsl #1] + 8017fe0: f1bc 0f00 cmp.w ip, #0 + 8017fe4: d106 bne.n 8017ff4 + fill_inverse_cmap(cinfo, c0,c1,c2); + 8017fe6: 4672 mov r2, lr + 8017fe8: 9303 str r3, [sp, #12] + 8017fea: 9002 str r0, [sp, #8] + 8017fec: f7ff fe74 bl 8017cd8 + 8017ff0: e9dd 0302 ldrd r0, r3, [sp, #8] + *outptr++ = (JSAMPLE) (*cachep - 1); + 8017ff4: f837 3013 ldrh.w r3, [r7, r3, lsl #1] + 8017ff8: 3403 adds r4, #3 + 8017ffa: 3b01 subs r3, #1 + 8017ffc: f806 3b01 strb.w r3, [r6], #1 + for (col = width; col > 0; col--) { + 8018000: e7d8 b.n 8017fb4 + +08018002 : + +METHODDEF(void) +pass2_fs_dither (j_decompress_ptr cinfo, + JSAMPARRAY input_buf, JSAMPARRAY output_buf, int num_rows) +/* This version performs Floyd-Steinberg dithering */ +{ + 8018002: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + 8018006: f8d0 a1e0 ldr.w sl, [r0, #480] ; 0x1e0 +{ + 801800a: b09f sub sp, #124 ; 0x7c + histptr cachep; + int dir; /* +1 or -1 depending on direction */ + int dir3; /* 3*dir, for advancing inptr & errorptr */ + int row; + JDIMENSION col; + JDIMENSION width = cinfo->output_width; + 801800c: f8d0 b070 ldr.w fp, [r0, #112] ; 0x70 + JSAMPROW colormap0 = cinfo->colormap[0]; + JSAMPROW colormap1 = cinfo->colormap[1]; + JSAMPROW colormap2 = cinfo->colormap[2]; + SHIFT_TEMPS + + for (row = 0; row < num_rows; row++) { + 8018010: f04f 0900 mov.w r9, #0 +{ + 8018014: 931b str r3, [sp, #108] ; 0x6c + hist3d histogram = cquantize->histogram; + 8018016: f8da 3018 ldr.w r3, [sl, #24] + 801801a: 9315 str r3, [sp, #84] ; 0x54 + JSAMPLE *range_limit = cinfo->sample_range_limit; + 801801c: f8d0 314c ldr.w r3, [r0, #332] ; 0x14c + 8018020: 9308 str r3, [sp, #32] + int *error_limit = cquantize->error_limiter; + 8018022: f8da 3028 ldr.w r3, [sl, #40] ; 0x28 + 8018026: 9309 str r3, [sp, #36] ; 0x24 + JSAMPROW colormap0 = cinfo->colormap[0]; + 8018028: f8d0 3088 ldr.w r3, [r0, #136] ; 0x88 +{ + 801802c: e9cd 1219 strd r1, r2, [sp, #100] ; 0x64 + JSAMPROW colormap0 = cinfo->colormap[0]; + 8018030: 681a ldr r2, [r3, #0] + 8018032: 9216 str r2, [sp, #88] ; 0x58 + JSAMPROW colormap1 = cinfo->colormap[1]; + 8018034: 685a ldr r2, [r3, #4] + JSAMPROW colormap2 = cinfo->colormap[2]; + 8018036: 689b ldr r3, [r3, #8] + JSAMPROW colormap1 = cinfo->colormap[1]; + 8018038: 9217 str r2, [sp, #92] ; 0x5c + JSAMPROW colormap2 = cinfo->colormap[2]; + 801803a: 9318 str r3, [sp, #96] ; 0x60 + inptr = input_buf[row]; + outptr = output_buf[row]; + if (cquantize->on_odd_row) { + /* work right to left in this row */ + inptr += (width-1) * 3; /* so point to rightmost pixel */ + 801803c: eb0b 034b add.w r3, fp, fp, lsl #1 + 8018040: 3b03 subs r3, #3 + 8018042: 9310 str r3, [sp, #64] ; 0x40 + outptr += width-1; + dir = -1; + dir3 = -3; + errorptr = cquantize->fserrors + (width+1)*3; /* => entry after last column */ + 8018044: 2306 movs r3, #6 + 8018046: fb0b 3303 mla r3, fp, r3, r3 + 801804a: 9312 str r3, [sp, #72] ; 0x48 + for (row = 0; row < num_rows; row++) { + 801804c: 9b1b ldr r3, [sp, #108] ; 0x6c + 801804e: 4599 cmp r9, r3 + 8018050: db02 blt.n 8018058 + */ + errorptr[0] = (FSERROR) bpreverr0; /* unload prev errs into array */ + errorptr[1] = (FSERROR) bpreverr1; + errorptr[2] = (FSERROR) bpreverr2; + } +} + 8018052: b01f add sp, #124 ; 0x7c + 8018054: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + inptr = input_buf[row]; + 8018058: 9b19 ldr r3, [sp, #100] ; 0x64 + 801805a: f853 3029 ldr.w r3, [r3, r9, lsl #2] + 801805e: 9301 str r3, [sp, #4] + outptr = output_buf[row]; + 8018060: 9b1a ldr r3, [sp, #104] ; 0x68 + 8018062: f853 3029 ldr.w r3, [r3, r9, lsl #2] + 8018066: 9303 str r3, [sp, #12] + errorptr = cquantize->fserrors + (width+1)*3; /* => entry after last column */ + 8018068: f8da 3020 ldr.w r3, [sl, #32] + 801806c: 9302 str r3, [sp, #8] + if (cquantize->on_odd_row) { + 801806e: f8da 3024 ldr.w r3, [sl, #36] ; 0x24 + 8018072: 2b00 cmp r3, #0 + 8018074: d036 beq.n 80180e4 + inptr += (width-1) * 3; /* so point to rightmost pixel */ + 8018076: 9b10 ldr r3, [sp, #64] ; 0x40 + 8018078: 9a01 ldr r2, [sp, #4] + 801807a: 441a add r2, r3 + outptr += width-1; + 801807c: f10b 33ff add.w r3, fp, #4294967295 + inptr += (width-1) * 3; /* so point to rightmost pixel */ + 8018080: 9201 str r2, [sp, #4] + outptr += width-1; + 8018082: 9a03 ldr r2, [sp, #12] + 8018084: 441a add r2, r3 + errorptr = cquantize->fserrors + (width+1)*3; /* => entry after last column */ + 8018086: 9b02 ldr r3, [sp, #8] + outptr += width-1; + 8018088: 9203 str r2, [sp, #12] + errorptr = cquantize->fserrors + (width+1)*3; /* => entry after last column */ + 801808a: 9a12 ldr r2, [sp, #72] ; 0x48 + 801808c: 4413 add r3, r2 + dir3 = -3; + 801808e: f06f 0202 mvn.w r2, #2 + errorptr = cquantize->fserrors + (width+1)*3; /* => entry after last column */ + 8018092: 9302 str r3, [sp, #8] + cquantize->on_odd_row = FALSE; /* flip for next time */ + 8018094: 2300 movs r3, #0 + dir3 = -3; + 8018096: 9206 str r2, [sp, #24] + dir = -1; + 8018098: f04f 32ff mov.w r2, #4294967295 + 801809c: 920d str r2, [sp, #52] ; 0x34 + 801809e: f8ca 3024 str.w r3, [sl, #36] ; 0x24 + bpreverr0 = bpreverr1 = bpreverr2 = 0; + 80180a2: 2400 movs r4, #0 + cur0 = RIGHT_SHIFT(cur0 + errorptr[dir3+0] + 8, 4); + 80180a4: 9b06 ldr r3, [sp, #24] + 80180a6: 9e02 ldr r6, [sp, #8] + cur0 = cur1 = cur2 = 0; + 80180a8: 4621 mov r1, r4 + cur0 = RIGHT_SHIFT(cur0 + errorptr[dir3+0] + 8, 4); + 80180aa: 005d lsls r5, r3, #1 + cur0 = cur1 = cur2 = 0; + 80180ac: 4622 mov r2, r4 + for (col = width; col > 0; col--) { + 80180ae: f8cd b01c str.w fp, [sp, #28] + cur1 = RIGHT_SHIFT(cur1 + errorptr[dir3+1] + 8, 4); + 80180b2: 1cab adds r3, r5, #2 + belowerr0 = belowerr1 = belowerr2 = 0; + 80180b4: 940a str r4, [sp, #40] ; 0x28 + cur1 = RIGHT_SHIFT(cur1 + errorptr[dir3+1] + 8, 4); + 80180b6: 9313 str r3, [sp, #76] ; 0x4c + cur2 = RIGHT_SHIFT(cur2 + errorptr[dir3+2] + 8, 4); + 80180b8: 1d2b adds r3, r5, #4 + 80180ba: 9314 str r3, [sp, #80] ; 0x50 + cur0 = cur1 = cur2 = 0; + 80180bc: 4623 mov r3, r4 + bpreverr0 = bpreverr1 = bpreverr2 = 0; + 80180be: e9cd 4404 strd r4, r4, [sp, #16] + belowerr0 = belowerr1 = belowerr2 = 0; + 80180c2: e9cd 440b strd r4, r4, [sp, #44] ; 0x2c + for (col = width; col > 0; col--) { + 80180c6: 9f07 ldr r7, [sp, #28] + 80180c8: b98f cbnz r7, 80180ee + 80180ca: fb0b f505 mul.w r5, fp, r5 + errorptr[0] = (FSERROR) bpreverr0; /* unload prev errs into array */ + 80180ce: 9a02 ldr r2, [sp, #8] + 80180d0: 9b02 ldr r3, [sp, #8] + for (row = 0; row < num_rows; row++) { + 80180d2: f109 0901 add.w r9, r9, #1 + errorptr[0] = (FSERROR) bpreverr0; /* unload prev errs into array */ + 80180d6: 9904 ldr r1, [sp, #16] + 80180d8: 442b add r3, r5 + 80180da: 5351 strh r1, [r2, r5] + errorptr[1] = (FSERROR) bpreverr1; + 80180dc: 9a05 ldr r2, [sp, #20] + errorptr[2] = (FSERROR) bpreverr2; + 80180de: 809c strh r4, [r3, #4] + errorptr[1] = (FSERROR) bpreverr1; + 80180e0: 805a strh r2, [r3, #2] + for (row = 0; row < num_rows; row++) { + 80180e2: e7b3 b.n 801804c + cquantize->on_odd_row = TRUE; /* flip for next time */ + 80180e4: 2301 movs r3, #1 + dir3 = 3; + 80180e6: 2203 movs r2, #3 + dir = 1; + 80180e8: 930d str r3, [sp, #52] ; 0x34 + dir3 = 3; + 80180ea: 9206 str r2, [sp, #24] + 80180ec: e7d7 b.n 801809e + cur0 = RIGHT_SHIFT(cur0 + errorptr[dir3+0] + 8, 4); + 80180ee: f936 c005 ldrsh.w ip, [r6, r5] + 80180f2: 1977 adds r7, r6, r5 + 80180f4: 449c add ip, r3 + cur1 = RIGHT_SHIFT(cur1 + errorptr[dir3+1] + 8, 4); + 80180f6: 9b13 ldr r3, [sp, #76] ; 0x4c + 80180f8: 9711 str r7, [sp, #68] ; 0x44 + 80180fa: 5ef3 ldrsh r3, [r6, r3] + cur0 = RIGHT_SHIFT(cur0 + errorptr[dir3+0] + 8, 4); + 80180fc: f10c 0c08 add.w ip, ip, #8 + cur0 = error_limit[cur0]; + 8018100: 9f09 ldr r7, [sp, #36] ; 0x24 + cur1 = RIGHT_SHIFT(cur1 + errorptr[dir3+1] + 8, 4); + 8018102: 441a add r2, r3 + cur2 = RIGHT_SHIFT(cur2 + errorptr[dir3+2] + 8, 4); + 8018104: 9b14 ldr r3, [sp, #80] ; 0x50 + 8018106: 5ef3 ldrsh r3, [r6, r3] + cur1 = RIGHT_SHIFT(cur1 + errorptr[dir3+1] + 8, 4); + 8018108: 3208 adds r2, #8 + cur2 = RIGHT_SHIFT(cur2 + errorptr[dir3+2] + 8, 4); + 801810a: 440b add r3, r1 + cur1 = RIGHT_SHIFT(cur1 + errorptr[dir3+1] + 8, 4); + 801810c: 1112 asrs r2, r2, #4 + cur0 = RIGHT_SHIFT(cur0 + errorptr[dir3+0] + 8, 4); + 801810e: ea4f 112c mov.w r1, ip, asr #4 + cur2 = RIGHT_SHIFT(cur2 + errorptr[dir3+2] + 8, 4); + 8018112: 3308 adds r3, #8 + cur1 = error_limit[cur1]; + 8018114: f857 2022 ldr.w r2, [r7, r2, lsl #2] + cur0 = error_limit[cur0]; + 8018118: f857 1021 ldr.w r1, [r7, r1, lsl #2] + cur2 = RIGHT_SHIFT(cur2 + errorptr[dir3+2] + 8, 4); + 801811c: 111b asrs r3, r3, #4 + cur2 = error_limit[cur2]; + 801811e: f857 3023 ldr.w r3, [r7, r3, lsl #2] + cur0 += GETJSAMPLE(inptr[0]); + 8018122: 9f01 ldr r7, [sp, #4] + 8018124: f897 c000 ldrb.w ip, [r7] + cur0 = GETJSAMPLE(range_limit[cur0]); + 8018128: 9f08 ldr r7, [sp, #32] + 801812a: 4439 add r1, r7 + cur1 = GETJSAMPLE(range_limit[cur1]); + 801812c: 443a add r2, r7 + cur0 = GETJSAMPLE(range_limit[cur0]); + 801812e: f811 100c ldrb.w r1, [r1, ip] + 8018132: 910e str r1, [sp, #56] ; 0x38 + cur1 += GETJSAMPLE(inptr[1]); + 8018134: 9901 ldr r1, [sp, #4] + 8018136: 7849 ldrb r1, [r1, #1] + cur1 = GETJSAMPLE(range_limit[cur1]); + 8018138: 5c52 ldrb r2, [r2, r1] + cur2 = GETJSAMPLE(range_limit[cur2]); + 801813a: 9908 ldr r1, [sp, #32] + cur1 = GETJSAMPLE(range_limit[cur1]); + 801813c: 4617 mov r7, r2 + cur2 += GETJSAMPLE(inptr[2]); + 801813e: 9a01 ldr r2, [sp, #4] + cur2 = GETJSAMPLE(range_limit[cur2]); + 8018140: 440b add r3, r1 + cur2 += GETJSAMPLE(inptr[2]); + 8018142: 7892 ldrb r2, [r2, #2] + cur2 = GETJSAMPLE(range_limit[cur2]); + 8018144: 5c9b ldrb r3, [r3, r2] + cachep = & histogram[cur0>>C0_SHIFT][cur1>>C1_SHIFT][cur2>>C2_SHIFT]; + 8018146: 10ba asrs r2, r7, #2 + cur2 = GETJSAMPLE(range_limit[cur2]); + 8018148: 930f str r3, [sp, #60] ; 0x3c + cachep = & histogram[cur0>>C0_SHIFT][cur1>>C1_SHIFT][cur2>>C2_SHIFT]; + 801814a: 9b0e ldr r3, [sp, #56] ; 0x38 + 801814c: 10d9 asrs r1, r3, #3 + 801814e: 9b15 ldr r3, [sp, #84] ; 0x54 + 8018150: f853 3021 ldr.w r3, [r3, r1, lsl #2] + 8018154: eb03 1882 add.w r8, r3, r2, lsl #6 + 8018158: 9b0f ldr r3, [sp, #60] ; 0x3c + 801815a: 10db asrs r3, r3, #3 + if (*cachep == 0) + 801815c: f838 c013 ldrh.w ip, [r8, r3, lsl #1] + 8018160: f1bc 0f00 cmp.w ip, #0 + 8018164: d105 bne.n 8018172 + fill_inverse_cmap(cinfo, cur0>>C0_SHIFT,cur1>>C1_SHIFT,cur2>>C2_SHIFT); + 8018166: e9cd 031c strd r0, r3, [sp, #112] ; 0x70 + 801816a: f7ff fdb5 bl 8017cd8 + 801816e: e9dd 031c ldrd r0, r3, [sp, #112] ; 0x70 + { register int pixcode = *cachep - 1; + 8018172: f838 3013 ldrh.w r3, [r8, r3, lsl #1] + *outptr = (JSAMPLE) pixcode; + 8018176: 9a03 ldr r2, [sp, #12] + { register int pixcode = *cachep - 1; + 8018178: 3b01 subs r3, #1 + errorptr[1] = (FSERROR) (bpreverr1 + cur1); + 801817a: 9905 ldr r1, [sp, #20] + *outptr = (JSAMPLE) pixcode; + 801817c: 7013 strb r3, [r2, #0] + cur0 -= GETJSAMPLE(colormap0[pixcode]); + 801817e: 9a16 ldr r2, [sp, #88] ; 0x58 + 8018180: f812 c003 ldrb.w ip, [r2, r3] + 8018184: 9a0e ldr r2, [sp, #56] ; 0x38 + 8018186: eba2 0c0c sub.w ip, r2, ip + cur1 -= GETJSAMPLE(colormap1[pixcode]); + 801818a: 9a17 ldr r2, [sp, #92] ; 0x5c + 801818c: f812 e003 ldrb.w lr, [r2, r3] + cur2 -= GETJSAMPLE(colormap2[pixcode]); + 8018190: 9a18 ldr r2, [sp, #96] ; 0x60 + cur1 -= GETJSAMPLE(colormap1[pixcode]); + 8018192: eba7 0e0e sub.w lr, r7, lr + inptr += dir3; /* Advance pixel pointers to next column */ + 8018196: 9f01 ldr r7, [sp, #4] + cur2 -= GETJSAMPLE(colormap2[pixcode]); + 8018198: f812 8003 ldrb.w r8, [r2, r3] + 801819c: 9b0f ldr r3, [sp, #60] ; 0x3c + errorptr[0] = (FSERROR) (bpreverr0 + cur0); + 801819e: 9a04 ldr r2, [sp, #16] + cur2 -= GETJSAMPLE(colormap2[pixcode]); + 80181a0: eba3 0808 sub.w r8, r3, r8 + cur0 += delta; /* form error * 3 */ + 80181a4: eb0c 034c add.w r3, ip, ip, lsl #1 + errorptr[0] = (FSERROR) (bpreverr0 + cur0); + 80181a8: 441a add r2, r3 + cur0 += delta; /* form error * 5 */ + 80181aa: eb03 034c add.w r3, r3, ip, lsl #1 + errorptr[0] = (FSERROR) (bpreverr0 + cur0); + 80181ae: 8032 strh r2, [r6, #0] + bpreverr0 = belowerr0 + cur0; + 80181b0: 9a0a ldr r2, [sp, #40] ; 0x28 + 80181b2: 441a add r2, r3 + cur0 += delta; /* form error * 7 */ + 80181b4: eb03 034c add.w r3, r3, ip, lsl #1 + bpreverr0 = belowerr0 + cur0; + 80181b8: 9204 str r2, [sp, #16] + cur1 += delta; /* form error * 3 */ + 80181ba: eb0e 024e add.w r2, lr, lr, lsl #1 + errorptr[1] = (FSERROR) (bpreverr1 + cur1); + 80181be: 4411 add r1, r2 + cur1 += delta; /* form error * 5 */ + 80181c0: eb02 024e add.w r2, r2, lr, lsl #1 + errorptr[1] = (FSERROR) (bpreverr1 + cur1); + 80181c4: 8071 strh r1, [r6, #2] + bpreverr1 = belowerr1 + cur1; + 80181c6: 990b ldr r1, [sp, #44] ; 0x2c + 80181c8: 4411 add r1, r2 + cur1 += delta; /* form error * 7 */ + 80181ca: eb02 024e add.w r2, r2, lr, lsl #1 + bpreverr1 = belowerr1 + cur1; + 80181ce: 9105 str r1, [sp, #20] + cur2 += delta; /* form error * 3 */ + 80181d0: eb08 0148 add.w r1, r8, r8, lsl #1 + errorptr[2] = (FSERROR) (bpreverr2 + cur2); + 80181d4: 440c add r4, r1 + cur2 += delta; /* form error * 5 */ + 80181d6: eb01 0148 add.w r1, r1, r8, lsl #1 + errorptr[2] = (FSERROR) (bpreverr2 + cur2); + 80181da: 80b4 strh r4, [r6, #4] + inptr += dir3; /* Advance pixel pointers to next column */ + 80181dc: 9e06 ldr r6, [sp, #24] + bpreverr2 = belowerr2 + cur2; + 80181de: 9c0c ldr r4, [sp, #48] ; 0x30 + inptr += dir3; /* Advance pixel pointers to next column */ + 80181e0: 4437 add r7, r6 + outptr += dir; + 80181e2: 9e03 ldr r6, [sp, #12] + bpreverr2 = belowerr2 + cur2; + 80181e4: 440c add r4, r1 + cur2 += delta; /* form error * 7 */ + 80181e6: eb01 0148 add.w r1, r1, r8, lsl #1 + inptr += dir3; /* Advance pixel pointers to next column */ + 80181ea: 9701 str r7, [sp, #4] + outptr += dir; + 80181ec: 9f0d ldr r7, [sp, #52] ; 0x34 + 80181ee: 443e add r6, r7 + 80181f0: 9603 str r6, [sp, #12] + for (col = width; col > 0; col--) { + 80181f2: 9e07 ldr r6, [sp, #28] + 80181f4: 3e01 subs r6, #1 + belowerr1 = bnexterr; + 80181f6: e9cd e80b strd lr, r8, [sp, #44] ; 0x2c + for (col = width; col > 0; col--) { + 80181fa: 9607 str r6, [sp, #28] + 80181fc: 9e11 ldr r6, [sp, #68] ; 0x44 + belowerr0 = bnexterr; + 80181fe: f8cd c028 str.w ip, [sp, #40] ; 0x28 + 8018202: e760 b.n 80180c6 + +08018204 : + */ + +LOCAL(void) +init_error_limit (j_decompress_ptr cinfo) +/* Allocate and fill in the error_limiter table */ +{ + 8018204: b538 push {r3, r4, r5, lr} + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + int * table; + int in, out; + + table = (int *) (*cinfo->mem->alloc_small) + 8018206: 6843 ldr r3, [r0, #4] + 8018208: f240 72fc movw r2, #2044 ; 0x7fc + 801820c: 2101 movs r1, #1 + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + 801820e: f8d0 41e0 ldr.w r4, [r0, #480] ; 0x1e0 + table = (int *) (*cinfo->mem->alloc_small) + 8018212: 681b ldr r3, [r3, #0] + 8018214: 4798 blx r3 + ((j_common_ptr) cinfo, JPOOL_IMAGE, (MAXJSAMPLE*2+1) * SIZEOF(int)); + table += MAXJSAMPLE; /* so can index -MAXJSAMPLE .. +MAXJSAMPLE */ + 8018216: f500 737f add.w r3, r0, #1020 ; 0x3fc + 801821a: f500 717e add.w r1, r0, #1016 ; 0x3f8 + 801821e: f500 6280 add.w r2, r0, #1024 ; 0x400 + cquantize->error_limiter = table; + 8018222: 62a3 str r3, [r4, #40] ; 0x28 + +#define STEPSIZE ((MAXJSAMPLE+1)/16) + /* Map errors 1:1 up to +- MAXJSAMPLE/16 */ + out = 0; + for (in = 0; in < STEPSIZE; in++, out++) { + 8018224: 2300 movs r3, #0 + table[in] = out; table[-in] = -out; + 8018226: 425c negs r4, r3 + 8018228: f841 3f04 str.w r3, [r1, #4]! + for (in = 0; in < STEPSIZE; in++, out++) { + 801822c: 3301 adds r3, #1 + table[in] = out; table[-in] = -out; + 801822e: f842 4d04 str.w r4, [r2, #-4]! + for (in = 0; in < STEPSIZE; in++, out++) { + 8018232: 2b10 cmp r3, #16 + 8018234: d1f7 bne.n 8018226 + 8018236: f500 6487 add.w r4, r0, #1080 ; 0x438 + 801823a: f500 7170 add.w r1, r0, #960 ; 0x3c0 + 801823e: f06f 0211 mvn.w r2, #17 + } + /* Map errors 1:2 up to +- 3*MAXJSAMPLE/16 */ + for (; in < STEPSIZE*3; in++, out += (in&1) ? 0 : 1) { + table[in] = out; table[-in] = -out; + 8018242: 425d negs r5, r3 + 8018244: f844 3f04 str.w r3, [r4, #4]! + 8018248: f841 5d04 str.w r5, [r1, #-4]! + for (; in < STEPSIZE*3; in++, out += (in&1) ? 0 : 1) { + 801824c: f002 0501 and.w r5, r2, #1 + 8018250: 3a01 subs r2, #1 + 8018252: 442b add r3, r5 + 8018254: f112 0f32 cmn.w r2, #50 ; 0x32 + 8018258: d1f3 bne.n 8018242 + 801825a: f500 6197 add.w r1, r0, #1208 ; 0x4b8 + 801825e: f500 7250 add.w r2, r0, #832 ; 0x340 + } + /* Clamp the rest to final out value (which is (MAXJSAMPLE+1)/8) */ + for (; in <= MAXJSAMPLE; in++) { + table[in] = out; table[-in] = -out; + 8018262: 425c negs r4, r3 + 8018264: f841 3f04 str.w r3, [r1, #4]! + 8018268: f842 4d04 str.w r4, [r2, #-4]! + for (; in <= MAXJSAMPLE; in++) { + 801826c: 4282 cmp r2, r0 + 801826e: d1f9 bne.n 8018264 + } +#undef STEPSIZE +} + 8018270: bd38 pop {r3, r4, r5, pc} + +08018272 : + +METHODDEF(void) +finish_pass2 (j_decompress_ptr cinfo) +{ + /* no work */ +} + 8018272: 4770 bx lr + +08018274 : +new_color_map_2_quant (j_decompress_ptr cinfo) +{ + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + + /* Reset the inverse color map */ + cquantize->needs_zeroed = TRUE; + 8018274: f8d0 31e0 ldr.w r3, [r0, #480] ; 0x1e0 + 8018278: 2201 movs r2, #1 + 801827a: 61da str r2, [r3, #28] +} + 801827c: 4770 bx lr + ... + +08018280 : +{ + 8018280: b573 push {r0, r1, r4, r5, r6, lr} + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + 8018282: f8d0 51e0 ldr.w r5, [r0, #480] ; 0x1e0 +{ + 8018286: 4604 mov r4, r0 + if (cinfo->dither_mode != JDITHER_NONE) + 8018288: f890 3058 ldrb.w r3, [r0, #88] ; 0x58 + hist3d histogram = cquantize->histogram; + 801828c: 69ae ldr r6, [r5, #24] + if (cinfo->dither_mode != JDITHER_NONE) + 801828e: 2b00 cmp r3, #0 + 8018290: d050 beq.n 8018334 + cinfo->dither_mode = JDITHER_FS; + 8018292: 2302 movs r3, #2 + 8018294: f880 3058 strb.w r3, [r0, #88] ; 0x58 + if (is_pre_scan) { + 8018298: b189 cbz r1, 80182be + cquantize->pub.color_quantize = prescan_quantize; + 801829a: 4b28 ldr r3, [pc, #160] ; (801833c ) + 801829c: 606b str r3, [r5, #4] + cquantize->pub.finish_pass = finish_pass1; + 801829e: 4b28 ldr r3, [pc, #160] ; (8018340 ) + 80182a0: 60ab str r3, [r5, #8] + if (cquantize->needs_zeroed) { + 80182a2: 1f34 subs r4, r6, #4 + 80182a4: 367c adds r6, #124 ; 0x7c + FMEMZERO((void FAR *) histogram[i], + 80182a6: f854 0f04 ldr.w r0, [r4, #4]! + 80182aa: f44f 5280 mov.w r2, #4096 ; 0x1000 + 80182ae: 2100 movs r1, #0 + 80182b0: f01c fb84 bl 80349bc + for (i = 0; i < HIST_C0_ELEMS; i++) { + 80182b4: 42a6 cmp r6, r4 + 80182b6: d1f6 bne.n 80182a6 + cquantize->needs_zeroed = FALSE; + 80182b8: 2300 movs r3, #0 + 80182ba: 61eb str r3, [r5, #28] +} + 80182bc: e02f b.n 801831e + cquantize->pub.color_quantize = pass2_fs_dither; + 80182be: 4b21 ldr r3, [pc, #132] ; (8018344 ) + 80182c0: 606b str r3, [r5, #4] + cquantize->pub.finish_pass = finish_pass2; + 80182c2: 4b21 ldr r3, [pc, #132] ; (8018348 ) + 80182c4: 60ab str r3, [r5, #8] + i = cinfo->actual_number_of_colors; + 80182c6: f8d4 3084 ldr.w r3, [r4, #132] ; 0x84 + if (i < 1) + 80182ca: 2b00 cmp r3, #0 + 80182cc: dc29 bgt.n 8018322 + ERREXIT1(cinfo, JERR_QUANT_FEW_COLORS, 1); + 80182ce: 223a movs r2, #58 ; 0x3a + 80182d0: 6823 ldr r3, [r4, #0] + 80182d2: 615a str r2, [r3, #20] + 80182d4: 2201 movs r2, #1 + ERREXIT1(cinfo, JERR_QUANT_MANY_COLORS, MAXNUMCOLORS); + 80182d6: 619a str r2, [r3, #24] + 80182d8: 4620 mov r0, r4 + 80182da: 681b ldr r3, [r3, #0] + 80182dc: 4798 blx r3 + if (cinfo->dither_mode == JDITHER_FS) { + 80182de: f894 3058 ldrb.w r3, [r4, #88] ; 0x58 + 80182e2: 2b02 cmp r3, #2 + 80182e4: d118 bne.n 8018318 + size_t arraysize = (size_t) ((cinfo->output_width + 2) * + 80182e6: 2306 movs r3, #6 + 80182e8: 6f22 ldr r2, [r4, #112] ; 0x70 + 80182ea: 435a muls r2, r3 + if (cquantize->fserrors == NULL) + 80182ec: 6a2b ldr r3, [r5, #32] + size_t arraysize = (size_t) ((cinfo->output_width + 2) * + 80182ee: 320c adds r2, #12 + if (cquantize->fserrors == NULL) + 80182f0: b93b cbnz r3, 8018302 + cquantize->fserrors = (FSERRPTR) (*cinfo->mem->alloc_large) + 80182f2: 6863 ldr r3, [r4, #4] + 80182f4: 2101 movs r1, #1 + 80182f6: 4620 mov r0, r4 + 80182f8: 9201 str r2, [sp, #4] + 80182fa: 685b ldr r3, [r3, #4] + 80182fc: 4798 blx r3 + 80182fe: 9a01 ldr r2, [sp, #4] + 8018300: 6228 str r0, [r5, #32] + FMEMZERO((void FAR *) cquantize->fserrors, arraysize); + 8018302: 2100 movs r1, #0 + 8018304: 6a28 ldr r0, [r5, #32] + 8018306: f01c fb59 bl 80349bc + if (cquantize->error_limiter == NULL) + 801830a: 6aab ldr r3, [r5, #40] ; 0x28 + 801830c: b913 cbnz r3, 8018314 + init_error_limit(cinfo); + 801830e: 4620 mov r0, r4 + 8018310: f7ff ff78 bl 8018204 + cquantize->on_odd_row = FALSE; + 8018314: 2300 movs r3, #0 + 8018316: 626b str r3, [r5, #36] ; 0x24 + if (cquantize->needs_zeroed) { + 8018318: 69eb ldr r3, [r5, #28] + 801831a: 2b00 cmp r3, #0 + 801831c: d1c1 bne.n 80182a2 +} + 801831e: b002 add sp, #8 + 8018320: bd70 pop {r4, r5, r6, pc} + if (i > MAXNUMCOLORS) + 8018322: f5b3 7f80 cmp.w r3, #256 ; 0x100 + 8018326: ddda ble.n 80182de + ERREXIT1(cinfo, JERR_QUANT_MANY_COLORS, MAXNUMCOLORS); + 8018328: 223b movs r2, #59 ; 0x3b + 801832a: 6823 ldr r3, [r4, #0] + 801832c: 615a str r2, [r3, #20] + 801832e: f44f 7280 mov.w r2, #256 ; 0x100 + 8018332: e7d0 b.n 80182d6 + if (is_pre_scan) { + 8018334: 2900 cmp r1, #0 + 8018336: d1b0 bne.n 801829a + cquantize->pub.color_quantize = pass2_no_dither; + 8018338: 4b04 ldr r3, [pc, #16] ; (801834c ) + 801833a: e7c1 b.n 80182c0 + 801833c: 08017c75 .word 0x08017c75 + 8018340: 0801857b .word 0x0801857b + 8018344: 08018003 .word 0x08018003 + 8018348: 08018273 .word 0x08018273 + 801834c: 08017f81 .word 0x08017f81 + +08018350 : +update_box (j_decompress_ptr cinfo, boxptr boxp) + 8018350: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} + hist3d histogram = cquantize->histogram; + 8018354: f8d0 c018 ldr.w ip, [r0, #24] + c2min = boxp->c2min; c2max = boxp->c2max; + 8018358: 690b ldr r3, [r1, #16] + 801835a: 694d ldr r5, [r1, #20] + 801835c: ea4f 0843 mov.w r8, r3, lsl #1 + 8018360: 9301 str r3, [sp, #4] + c0min = boxp->c0min; c0max = boxp->c0max; + 8018362: e9d1 7000 ldrd r7, r0, [r1] + c1min = boxp->c1min; c1max = boxp->c1max; + 8018366: e9d1 e402 ldrd lr, r4, [r1, #8] + if (c0max > c0min) + 801836a: 4287 cmp r7, r0 + 801836c: 463b mov r3, r7 + 801836e: db34 blt.n 80183da + if (c1max > c1min) + 8018370: 45a6 cmp lr, r4 + 8018372: 4672 mov r2, lr + 8018374: db6e blt.n 8018454 + if (c2max > c2min) + 8018376: 9e01 ldr r6, [sp, #4] + 8018378: 42ae cmp r6, r5 + 801837a: f2c0 80c1 blt.w 8018500 + have_c2min: + 801837e: 46b6 mov lr, r6 + dist1 = ((c1max - c1min) << C1_SHIFT) * C1_SCALE; + 8018380: 1aa6 subs r6, r4, r2 + dist0 = ((c0max - c0min) << C0_SHIFT) * C0_SCALE; + 8018382: 1ac7 subs r7, r0, r3 + 8018384: ea4f 0a4e mov.w sl, lr, lsl #1 + dist1 = ((c1max - c1min) << C1_SHIFT) * C1_SCALE; + 8018388: ea4f 08c6 mov.w r8, r6, lsl #3 + dist0 = ((c0max - c0min) << C0_SHIFT) * C0_SCALE; + 801838c: 00ff lsls r7, r7, #3 + dist1 = ((c1max - c1min) << C1_SHIFT) * C1_SCALE; + 801838e: eb08 0886 add.w r8, r8, r6, lsl #2 + dist2 = ((c2max - c2min) << C2_SHIFT) * C2_SCALE; + 8018392: eba5 060e sub.w r6, r5, lr + boxp->volume = dist0*dist0 + dist1*dist1 + dist2*dist2; + 8018396: fb08 f808 mul.w r8, r8, r8 + dist2 = ((c2max - c2min) << C2_SHIFT) * C2_SCALE; + 801839a: 0136 lsls r6, r6, #4 + boxp->volume = dist0*dist0 + dist1*dist1 + dist2*dist2; + 801839c: fb07 8707 mla r7, r7, r7, r8 + ccount = 0; + 80183a0: f04f 0800 mov.w r8, #0 + boxp->volume = dist0*dist0 + dist1*dist1 + dist2*dist2; + 80183a4: fb06 7606 mla r6, r6, r6, r7 + 80183a8: 618e str r6, [r1, #24] + for (c0 = c0min; c0 <= c0max; c0++) + 80183aa: 4298 cmp r0, r3 + 80183ac: f280 80e3 bge.w 8018576 + boxp->colorcount = ccount; + 80183b0: f8c1 801c str.w r8, [r1, #28] +} + 80183b4: b003 add sp, #12 + 80183b6: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + histp = & histogram[c0][c1][c2min]; + 80183ba: eb08 1a89 add.w sl, r8, r9, lsl #6 + 80183be: f85c 2023 ldr.w r2, [ip, r3, lsl #2] + 80183c2: 4452 add r2, sl + c2min = boxp->c2min; c2max = boxp->c2max; + 80183c4: f8dd a004 ldr.w sl, [sp, #4] + for (c2 = c2min; c2 <= c2max; c2++) + 80183c8: 4555 cmp r5, sl + 80183ca: da08 bge.n 80183de + for (c1 = c1min; c1 <= c1max; c1++) { + 80183cc: f109 0901 add.w r9, r9, #1 + 80183d0: 454c cmp r4, r9 + 80183d2: daf2 bge.n 80183ba + for (c0 = c0min; c0 <= c0max; c0++) + 80183d4: 3301 adds r3, #1 + 80183d6: 4298 cmp r0, r3 + 80183d8: db0f blt.n 80183fa + c1min = boxp->c1min; c1max = boxp->c1max; + 80183da: 46f1 mov r9, lr + 80183dc: e7f8 b.n 80183d0 + if (*histp++ != 0) { + 80183de: f832 bb02 ldrh.w fp, [r2], #2 + 80183e2: f1bb 0f00 cmp.w fp, #0 + 80183e6: d005 beq.n 80183f4 + if (c0max > c0min) + 80183e8: 4298 cmp r0, r3 + boxp->c0min = c0min = c0; + 80183ea: 600b str r3, [r1, #0] + if (c0max > c0min) + 80183ec: ddc0 ble.n 8018370 + c1min = boxp->c1min; c1max = boxp->c1max; + 80183ee: 4607 mov r7, r0 + 80183f0: 46f1 mov r9, lr + 80183f2: e00f b.n 8018414 + for (c2 = c2min; c2 <= c2max; c2++) + 80183f4: f10a 0a01 add.w sl, sl, #1 + 80183f8: e7e6 b.n 80183c8 + have_c0min: + 80183fa: 463b mov r3, r7 + 80183fc: e7f7 b.n 80183ee + histp = & histogram[c0][c1][c2min]; + 80183fe: eb08 1a89 add.w sl, r8, r9, lsl #6 + 8018402: f85c 2027 ldr.w r2, [ip, r7, lsl #2] + 8018406: 4452 add r2, sl + c2min = boxp->c2min; c2max = boxp->c2max; + 8018408: f8dd a004 ldr.w sl, [sp, #4] + for (c2 = c2min; c2 <= c2max; c2++) + 801840c: 4555 cmp r5, sl + 801840e: da07 bge.n 8018420 + for (c1 = c1min; c1 <= c1max; c1++) { + 8018410: f109 0901 add.w r9, r9, #1 + 8018414: 454c cmp r4, r9 + 8018416: daf2 bge.n 80183fe + for (c0 = c0max; c0 >= c0min; c0--) + 8018418: 3f01 subs r7, #1 + 801841a: 429f cmp r7, r3 + 801841c: dba8 blt.n 8018370 + 801841e: e7e7 b.n 80183f0 + if (*histp++ != 0) { + 8018420: f832 bb02 ldrh.w fp, [r2], #2 + 8018424: f1bb 0f00 cmp.w fp, #0 + 8018428: d002 beq.n 8018430 + goto have_c0max; + 801842a: 4638 mov r0, r7 + boxp->c0max = c0max = c0; + 801842c: 604f str r7, [r1, #4] + goto have_c0max; + 801842e: e79f b.n 8018370 + for (c2 = c2min; c2 <= c2max; c2++) + 8018430: f10a 0a01 add.w sl, sl, #1 + 8018434: e7ea b.n 801840c + histp = & histogram[c0][c1][c2min]; + 8018436: f85c 7029 ldr.w r7, [ip, r9, lsl #2] + c2min = boxp->c2min; c2max = boxp->c2max; + 801843a: f8dd a004 ldr.w sl, [sp, #4] + histp = & histogram[c0][c1][c2min]; + 801843e: eb07 060b add.w r6, r7, fp + for (c2 = c2min; c2 <= c2max; c2++) + 8018442: 4555 cmp r5, sl + 8018444: da0a bge.n 801845c + for (c0 = c0min; c0 <= c0max; c0++) { + 8018446: f109 0901 add.w r9, r9, #1 + 801844a: 4581 cmp r9, r0 + 801844c: ddf3 ble.n 8018436 + for (c1 = c1min; c1 <= c1max; c1++) + 801844e: 3201 adds r2, #1 + 8018450: 4294 cmp r4, r2 + 8018452: db11 blt.n 8018478 + c2min = boxp->c2min; c2max = boxp->c2max; + 8018454: 4699 mov r9, r3 + histp = & histogram[c0][c1][c2min]; + 8018456: eb08 1b82 add.w fp, r8, r2, lsl #6 + 801845a: e7f6 b.n 801844a + if (*histp++ != 0) { + 801845c: f836 7b02 ldrh.w r7, [r6], #2 + 8018460: b13f cbz r7, 8018472 + if (c1max > c1min) + 8018462: 4294 cmp r4, r2 + boxp->c1min = c1min = c1; + 8018464: 608a str r2, [r1, #8] + if (c1max > c1min) + 8018466: dd86 ble.n 8018376 + c2min = boxp->c2min; c2max = boxp->c2max; + 8018468: 46a6 mov lr, r4 + 801846a: 4699 mov r9, r3 + histp = & histogram[c0][c1][c2min]; + 801846c: eb08 1b8e add.w fp, r8, lr, lsl #6 + 8018470: e00e b.n 8018490 + for (c2 = c2min; c2 <= c2max; c2++) + 8018472: f10a 0a01 add.w sl, sl, #1 + 8018476: e7e4 b.n 8018442 + have_c1min: + 8018478: 4672 mov r2, lr + 801847a: e7f5 b.n 8018468 + histp = & histogram[c0][c1][c2min]; + 801847c: f85c 7029 ldr.w r7, [ip, r9, lsl #2] + c2min = boxp->c2min; c2max = boxp->c2max; + 8018480: f8dd a004 ldr.w sl, [sp, #4] + histp = & histogram[c0][c1][c2min]; + 8018484: eb07 060b add.w r6, r7, fp + for (c2 = c2min; c2 <= c2max; c2++) + 8018488: 4555 cmp r5, sl + 801848a: da09 bge.n 80184a0 + for (c0 = c0min; c0 <= c0max; c0++) { + 801848c: f109 0901 add.w r9, r9, #1 + 8018490: 4548 cmp r0, r9 + 8018492: daf3 bge.n 801847c + for (c1 = c1max; c1 >= c1min; c1--) + 8018494: f10e 3eff add.w lr, lr, #4294967295 + 8018498: 4596 cmp lr, r2 + 801849a: f6ff af6c blt.w 8018376 + 801849e: e7e4 b.n 801846a + if (*histp++ != 0) { + 80184a0: f836 7b02 ldrh.w r7, [r6], #2 + 80184a4: b11f cbz r7, 80184ae + goto have_c1max; + 80184a6: 4674 mov r4, lr + boxp->c1max = c1max = c1; + 80184a8: f8c1 e00c str.w lr, [r1, #12] + goto have_c1max; + 80184ac: e763 b.n 8018376 + for (c2 = c2min; c2 <= c2max; c2++) + 80184ae: f10a 0a01 add.w sl, sl, #1 + 80184b2: e7e9 b.n 8018488 + for (c1 = c1min; c1 <= c1max; c1++, histp += HIST_C2_ELEMS) + 80184b4: f85c 7028 ldr.w r7, [ip, r8, lsl #2] + 80184b8: 4691 mov r9, r2 + 80184ba: 4457 add r7, sl + 80184bc: 45a1 cmp r9, r4 + 80184be: dd0b ble.n 80184d8 + for (c0 = c0min; c0 <= c0max; c0++) { + 80184c0: f108 0801 add.w r8, r8, #1 + 80184c4: 4540 cmp r0, r8 + 80184c6: daf5 bge.n 80184b4 + for (c2 = c2min; c2 <= c2max; c2++) + 80184c8: f10e 0e01 add.w lr, lr, #1 + 80184cc: 4575 cmp r5, lr + 80184ce: db1a blt.n 8018506 + 80184d0: ea4f 0a4e mov.w sl, lr, lsl #1 + for (c1 = c1min; c1 <= c1max; c1++, histp += HIST_C2_ELEMS) + 80184d4: 4698 mov r8, r3 + 80184d6: e7f5 b.n 80184c4 + if (*histp != 0) { + 80184d8: ea4f 1b89 mov.w fp, r9, lsl #6 + 80184dc: f837 b00b ldrh.w fp, [r7, fp] + 80184e0: f1bb 0f00 cmp.w fp, #0 + 80184e4: d009 beq.n 80184fa + if (c2max > c2min) + 80184e6: 4575 cmp r5, lr + boxp->c2min = c2min = c2; + 80184e8: f8c1 e010 str.w lr, [r1, #16] + if (c2max > c2min) + 80184ec: f77f af48 ble.w 8018380 + for (c1 = c1min; c1 <= c1max; c1++, histp += HIST_C2_ELEMS) + 80184f0: 462f mov r7, r5 + 80184f2: ea4f 0a47 mov.w sl, r7, lsl #1 + 80184f6: 4698 mov r8, r3 + 80184f8: e010 b.n 801851c + for (c1 = c1min; c1 <= c1max; c1++, histp += HIST_C2_ELEMS) + 80184fa: f109 0901 add.w r9, r9, #1 + 80184fe: e7dd b.n 80184bc + 8018500: f8dd e004 ldr.w lr, [sp, #4] + 8018504: e7e4 b.n 80184d0 + have_c2min: + 8018506: f8dd e004 ldr.w lr, [sp, #4] + 801850a: e7f1 b.n 80184f0 + for (c1 = c1min; c1 <= c1max; c1++, histp += HIST_C2_ELEMS) + 801850c: f85c 6028 ldr.w r6, [ip, r8, lsl #2] + 8018510: 4691 mov r9, r2 + 8018512: 4456 add r6, sl + 8018514: 454c cmp r4, r9 + 8018516: da08 bge.n 801852a + for (c0 = c0min; c0 <= c0max; c0++) { + 8018518: f108 0801 add.w r8, r8, #1 + 801851c: 4540 cmp r0, r8 + 801851e: daf5 bge.n 801850c + for (c2 = c2max; c2 >= c2min; c2--) + 8018520: 3f01 subs r7, #1 + 8018522: 4577 cmp r7, lr + 8018524: f6ff af2c blt.w 8018380 + 8018528: e7e3 b.n 80184f2 + if (*histp != 0) { + 801852a: ea4f 1b89 mov.w fp, r9, lsl #6 + 801852e: f836 b00b ldrh.w fp, [r6, fp] + 8018532: f1bb 0f00 cmp.w fp, #0 + 8018536: d002 beq.n 801853e + goto have_c2max; + 8018538: 463d mov r5, r7 + boxp->c2max = c2max = c2; + 801853a: 614f str r7, [r1, #20] + goto have_c2max; + 801853c: e720 b.n 8018380 + for (c1 = c1min; c1 <= c1max; c1++, histp += HIST_C2_ELEMS) + 801853e: f109 0901 add.w r9, r9, #1 + 8018542: e7e7 b.n 8018514 + for (c2 = c2min; c2 <= c2max; c2++, histp++) + 8018544: eb0a 1987 add.w r9, sl, r7, lsl #6 + 8018548: f85c 6023 ldr.w r6, [ip, r3, lsl #2] + 801854c: f1a9 0902 sub.w r9, r9, #2 + 8018550: 444e add r6, r9 + 8018552: 46f1 mov r9, lr + 8018554: 454d cmp r5, r9 + 8018556: da04 bge.n 8018562 + for (c1 = c1min; c1 <= c1max; c1++) { + 8018558: 3701 adds r7, #1 + 801855a: 42bc cmp r4, r7 + 801855c: daf2 bge.n 8018544 + for (c0 = c0min; c0 <= c0max; c0++) + 801855e: 3301 adds r3, #1 + 8018560: e723 b.n 80183aa + if (*histp != 0) { + 8018562: f836 bf02 ldrh.w fp, [r6, #2]! + 8018566: f1bb 0f00 cmp.w fp, #0 + 801856a: d001 beq.n 8018570 + ccount++; + 801856c: f108 0801 add.w r8, r8, #1 + for (c2 = c2min; c2 <= c2max; c2++, histp++) + 8018570: f109 0901 add.w r9, r9, #1 + 8018574: e7ee b.n 8018554 + 8018576: 4617 mov r7, r2 + 8018578: e7ef b.n 801855a + +0801857a : +{ + 801857a: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + 801857e: f8d0 31e0 ldr.w r3, [r0, #480] ; 0x1e0 +{ + 8018582: b08b sub sp, #44 ; 0x2c + boxlist = (boxptr) (*cinfo->mem->alloc_small) + 8018584: 2101 movs r1, #1 + update_box(cinfo, & boxlist[0]); + 8018586: f04f 0b01 mov.w fp, #1 + my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize; + 801858a: 9302 str r3, [sp, #8] + cinfo->colormap = cquantize->sv_colormap; + 801858c: 691b ldr r3, [r3, #16] +{ + 801858e: 9000 str r0, [sp, #0] + cinfo->colormap = cquantize->sv_colormap; + 8018590: f8c0 3088 str.w r3, [r0, #136] ; 0x88 + select_colors(cinfo, cquantize->desired); + 8018594: 9b02 ldr r3, [sp, #8] + 8018596: 695b ldr r3, [r3, #20] + 8018598: 9301 str r3, [sp, #4] + boxlist = (boxptr) (*cinfo->mem->alloc_small) + 801859a: 9a01 ldr r2, [sp, #4] + 801859c: 6843 ldr r3, [r0, #4] + 801859e: 0152 lsls r2, r2, #5 + 80185a0: 681b ldr r3, [r3, #0] + 80185a2: 4798 blx r3 + boxlist[0].c0max = MAXJSAMPLE >> C0_SHIFT; + 80185a4: 2300 movs r3, #0 + 80185a6: 221f movs r2, #31 + boxlist[0].c1max = MAXJSAMPLE >> C1_SHIFT; + 80185a8: 213f movs r1, #63 ; 0x3f + boxlist[0].c1min = 0; + 80185aa: 6083 str r3, [r0, #8] + boxlist = (boxptr) (*cinfo->mem->alloc_small) + 80185ac: 4604 mov r4, r0 + boxlist[0].c2max = MAXJSAMPLE >> C2_SHIFT; + 80185ae: 6142 str r2, [r0, #20] + 80185b0: 46a0 mov r8, r4 + update_box(cinfo, & boxlist[0]); + 80185b2: 4627 mov r7, r4 + boxlist[0].c2min = 0; + 80185b4: e9c0 1303 strd r1, r3, [r0, #12] + boxlist[0].c0max = MAXJSAMPLE >> C0_SHIFT; + 80185b8: e9c0 3200 strd r3, r2, [r0] + update_box(cinfo, & boxlist[0]); + 80185bc: 9b00 ldr r3, [sp, #0] + 80185be: 4601 mov r1, r0 + 80185c0: f8d3 a1e0 ldr.w sl, [r3, #480] ; 0x1e0 + 80185c4: 4650 mov r0, sl + 80185c6: f7ff fec3 bl 8018350 + while (numboxes < desired_colors) { + 80185ca: 9b01 ldr r3, [sp, #4] + 80185cc: 455b cmp r3, fp + 80185ce: dc24 bgt.n 801861a + 80185d0: 2100 movs r1, #0 + hist3d histogram = cquantize->histogram; + 80185d2: 9b00 ldr r3, [sp, #0] + 80185d4: f8d3 31e0 ldr.w r3, [r3, #480] ; 0x1e0 + 80185d8: 699b ldr r3, [r3, #24] + 80185da: 9303 str r3, [sp, #12] + c0min = boxp->c0min; c0max = boxp->c0max; + 80185dc: e9d8 7300 ldrd r7, r3, [r8] + 80185e0: 9304 str r3, [sp, #16] + c1min = boxp->c1min; c1max = boxp->c1max; + 80185e2: f8d8 3008 ldr.w r3, [r8, #8] + 80185e6: 9305 str r3, [sp, #20] + 80185e8: f8d8 300c ldr.w r3, [r8, #12] + 80185ec: 9306 str r3, [sp, #24] + c2min = boxp->c2min; c2max = boxp->c2max; + 80185ee: f8d8 3010 ldr.w r3, [r8, #16] + 80185f2: 9301 str r3, [sp, #4] + 80185f4: f8d8 3014 ldr.w r3, [r8, #20] + 80185f8: 9307 str r3, [sp, #28] + for (c0 = c0min; c0 <= c0max; c0++) + 80185fa: 9b01 ldr r3, [sp, #4] + 80185fc: 005b lsls r3, r3, #1 + 80185fe: 9309 str r3, [sp, #36] ; 0x24 + long c2total = 0; + 8018600: 2300 movs r3, #0 + long c1total = 0; + 8018602: 469a mov sl, r3 + long c0total = 0; + 8018604: 4699 mov r9, r3 + long total = 0; + 8018606: 461a mov r2, r3 + for (c0 = c0min; c0 <= c0max; c0++) + 8018608: 9804 ldr r0, [sp, #16] + 801860a: 42b8 cmp r0, r7 + 801860c: f2c0 8097 blt.w 801873e + 8018610: 00f8 lsls r0, r7, #3 + for (c1 = c1min; c1 <= c1max; c1++) { + 8018612: 9e05 ldr r6, [sp, #20] + 8018614: 3004 adds r0, #4 + 8018616: 9008 str r0, [sp, #32] + 8018618: e07b b.n 8018712 + if (numboxes*2 <= desired_colors) { + 801861a: 9b01 ldr r3, [sp, #4] + 801861c: ebb3 0f4b cmp.w r3, fp, lsl #1 + 8018620: db4e blt.n 80186c0 + boxptr which = NULL; + 8018622: 2100 movs r1, #0 + 8018624: 4622 mov r2, r4 + for (i = 0, boxp = boxlist; i < numboxes; i++, boxp++) { + 8018626: 4608 mov r0, r1 + register long maxc = 0; + 8018628: 460e mov r6, r1 + if (boxp->colorcount > maxc && boxp->volume > 0) { + 801862a: 69d3 ldr r3, [r2, #28] + 801862c: 42b3 cmp r3, r6 + 801862e: dd04 ble.n 801863a + 8018630: 6995 ldr r5, [r2, #24] + 8018632: 2d00 cmp r5, #0 + 8018634: bfc4 itt gt + 8018636: 4611 movgt r1, r2 + 8018638: 461e movgt r6, r3 + for (i = 0, boxp = boxlist; i < numboxes; i++, boxp++) { + 801863a: 3001 adds r0, #1 + 801863c: 3220 adds r2, #32 + 801863e: 4583 cmp fp, r0 + 8018640: d1f3 bne.n 801862a + if (b1 == NULL) /* no splittable boxes left! */ + 8018642: 2900 cmp r1, #0 + 8018644: d0c5 beq.n 80185d2 + b2 = &boxlist[numboxes]; /* where new box will go */ + 8018646: f107 0320 add.w r3, r7, #32 + 801864a: ee07 3a90 vmov s15, r3 + b2->c0max = b1->c0max; b2->c1max = b1->c1max; b2->c2max = b1->c2max; + 801864e: 684b ldr r3, [r1, #4] + 8018650: 627b str r3, [r7, #36] ; 0x24 + 8018652: 68ca ldr r2, [r1, #12] + 8018654: 62fa str r2, [r7, #44] ; 0x2c + 8018656: 694a ldr r2, [r1, #20] + 8018658: 637a str r2, [r7, #52] ; 0x34 + b2->c0min = b1->c0min; b2->c1min = b1->c1min; b2->c2min = b1->c2min; + 801865a: 680a ldr r2, [r1, #0] + 801865c: 623a str r2, [r7, #32] + 801865e: 688a ldr r2, [r1, #8] + 8018660: 62ba str r2, [r7, #40] ; 0x28 + 8018662: 6908 ldr r0, [r1, #16] + 8018664: 6338 str r0, [r7, #48] ; 0x30 + c0 = ((b1->c0max - b1->c0min) << C0_SHIFT) * C0_SCALE; + 8018666: 680a ldr r2, [r1, #0] + c1 = ((b1->c1max - b1->c1min) << C1_SHIFT) * C1_SCALE; + 8018668: 688e ldr r6, [r1, #8] + c0 = ((b1->c0max - b1->c0min) << C0_SHIFT) * C0_SCALE; + 801866a: 9203 str r2, [sp, #12] + 801866c: 1a9a subs r2, r3, r2 + 801866e: ea4f 09c2 mov.w r9, r2, lsl #3 + c1 = ((b1->c1max - b1->c1min) << C1_SHIFT) * C1_SCALE; + 8018672: 68ca ldr r2, [r1, #12] + 8018674: 9204 str r2, [sp, #16] + 8018676: 1b92 subs r2, r2, r6 + 8018678: ea4f 0cc2 mov.w ip, r2, lsl #3 + 801867c: eb0c 0c82 add.w ip, ip, r2, lsl #2 + c2 = ((b1->c2max - b1->c2min) << C2_SHIFT) * C2_SCALE; + 8018680: 694a ldr r2, [r1, #20] + 8018682: eba2 0e00 sub.w lr, r2, r0 + if (c2 > cmax) { cmax = c2; n = 2; } + 8018686: ebbc 1f0e cmp.w ip, lr, lsl #4 + c2 = ((b1->c2max - b1->c2min) << C2_SHIFT) * C2_SCALE; + 801868a: ea4f 150e mov.w r5, lr, lsl #4 + if (c2 > cmax) { cmax = c2; n = 2; } + 801868e: f2c0 808a blt.w 80187a6 + if (c0 > cmax) { n = 0; } + 8018692: 45e1 cmp r9, ip + 8018694: dd23 ble.n 80186de + lb = (b1->c0max + b1->c0min) / 2; + 8018696: 9a03 ldr r2, [sp, #12] + 8018698: 4413 add r3, r2 + 801869a: eb03 73d3 add.w r3, r3, r3, lsr #31 + 801869e: 105b asrs r3, r3, #1 + b1->c0max = lb; + 80186a0: 604b str r3, [r1, #4] + b2->c0min = lb+1; + 80186a2: 3301 adds r3, #1 + 80186a4: 623b str r3, [r7, #32] + update_box(cinfo, b1); + 80186a6: 4650 mov r0, sl + numboxes++; + 80186a8: f10b 0b01 add.w fp, fp, #1 + update_box(cinfo, b1); + 80186ac: f7ff fe50 bl 8018350 + update_box(cinfo, b2); + 80186b0: ee17 1a90 vmov r1, s15 + 80186b4: 4650 mov r0, sl + numboxes++; + 80186b6: ee17 7a90 vmov r7, s15 + update_box(cinfo, b2); + 80186ba: f7ff fe49 bl 8018350 + numboxes++; + 80186be: e784 b.n 80185ca + boxptr which = NULL; + 80186c0: 2100 movs r1, #0 + 80186c2: 4623 mov r3, r4 + for (i = 0, boxp = boxlist; i < numboxes; i++, boxp++) { + 80186c4: 460a mov r2, r1 + register INT32 maxv = 0; + 80186c6: 4608 mov r0, r1 + if (boxp->volume > maxv) { + 80186c8: 699e ldr r6, [r3, #24] + for (i = 0, boxp = boxlist; i < numboxes; i++, boxp++) { + 80186ca: 3201 adds r2, #1 + if (boxp->volume > maxv) { + 80186cc: 4286 cmp r6, r0 + 80186ce: bfc4 itt gt + 80186d0: 4619 movgt r1, r3 + 80186d2: 4630 movgt r0, r6 + for (i = 0, boxp = boxlist; i < numboxes; i++, boxp++) { + 80186d4: 4593 cmp fp, r2 + 80186d6: f103 0320 add.w r3, r3, #32 + 80186da: d1f5 bne.n 80186c8 + 80186dc: e7b1 b.n 8018642 + lb = (b1->c1max + b1->c1min) / 2; + 80186de: 9b04 ldr r3, [sp, #16] + 80186e0: 4433 add r3, r6 + 80186e2: eb03 76d3 add.w r6, r3, r3, lsr #31 + 80186e6: 1076 asrs r6, r6, #1 + b1->c1max = lb; + 80186e8: 60ce str r6, [r1, #12] + b2->c1min = lb+1; + 80186ea: 3601 adds r6, #1 + 80186ec: 62be str r6, [r7, #40] ; 0x28 + break; + 80186ee: e7da b.n 80186a6 + histp = & histogram[c0][c1][c2min]; + 80186f0: 9809 ldr r0, [sp, #36] ; 0x24 + 80186f2: ea4f 0e86 mov.w lr, r6, lsl #2 + 80186f6: 9c03 ldr r4, [sp, #12] + 80186f8: eb00 1086 add.w r0, r0, r6, lsl #6 + 80186fc: f10e 0e02 add.w lr, lr, #2 + 8018700: f854 4027 ldr.w r4, [r4, r7, lsl #2] + for (c2 = c2min; c2 <= c2max; c2++) { + 8018704: f8dd c004 ldr.w ip, [sp, #4] + histp = & histogram[c0][c1][c2min]; + 8018708: 4420 add r0, r4 + for (c2 = c2min; c2 <= c2max; c2++) { + 801870a: 9c07 ldr r4, [sp, #28] + 801870c: 4564 cmp r4, ip + 801870e: da05 bge.n 801871c + for (c1 = c1min; c1 <= c1max; c1++) { + 8018710: 3601 adds r6, #1 + 8018712: 9806 ldr r0, [sp, #24] + 8018714: 42b0 cmp r0, r6 + 8018716: daeb bge.n 80186f0 + for (c0 = c0min; c0 <= c0max; c0++) + 8018718: 3701 adds r7, #1 + 801871a: e775 b.n 8018608 + if ((count = *histp++) != 0) { + 801871c: f830 4b02 ldrh.w r4, [r0], #2 + 8018720: b154 cbz r4, 8018738 + c0total += ((c0 << C0_SHIFT) + ((1<>1)) * count; + 8018722: 9d08 ldr r5, [sp, #32] + total += count; + 8018724: 4422 add r2, r4 + c1total += ((c1 << C1_SHIFT) + ((1<>1)) * count; + 8018726: fb0e aa04 mla sl, lr, r4, sl + c0total += ((c0 << C0_SHIFT) + ((1<>1)) * count; + 801872a: fb05 9904 mla r9, r5, r4, r9 + c2total += ((c2 << C2_SHIFT) + ((1<>1)) * count; + 801872e: ea4f 05cc mov.w r5, ip, lsl #3 + 8018732: 3504 adds r5, #4 + 8018734: fb04 3305 mla r3, r4, r5, r3 + for (c2 = c2min; c2 <= c2max; c2++) { + 8018738: f10c 0c01 add.w ip, ip, #1 + 801873c: e7e5 b.n 801870a + cinfo->colormap[0][icolor] = (JSAMPLE) ((c0total + (total>>1)) / total); + 801873e: 9800 ldr r0, [sp, #0] + 8018740: eb09 0962 add.w r9, r9, r2, asr #1 + cinfo->colormap[1][icolor] = (JSAMPLE) ((c1total + (total>>1)) / total); + 8018744: eb0a 0a62 add.w sl, sl, r2, asr #1 + for (i = 0; i < numboxes; i++) + 8018748: f108 0820 add.w r8, r8, #32 + cinfo->colormap[0][icolor] = (JSAMPLE) ((c0total + (total>>1)) / total); + 801874c: f8d0 0088 ldr.w r0, [r0, #136] ; 0x88 + cinfo->colormap[2][icolor] = (JSAMPLE) ((c2total + (total>>1)) / total); + 8018750: eb03 0362 add.w r3, r3, r2, asr #1 + cinfo->colormap[0][icolor] = (JSAMPLE) ((c0total + (total>>1)) / total); + 8018754: fb99 f9f2 sdiv r9, r9, r2 + 8018758: 6800 ldr r0, [r0, #0] + 801875a: f800 9001 strb.w r9, [r0, r1] + cinfo->colormap[1][icolor] = (JSAMPLE) ((c1total + (total>>1)) / total); + 801875e: 9800 ldr r0, [sp, #0] + 8018760: fb9a faf2 sdiv sl, sl, r2 + 8018764: f8d0 0088 ldr.w r0, [r0, #136] ; 0x88 + 8018768: 6840 ldr r0, [r0, #4] + 801876a: f800 a001 strb.w sl, [r0, r1] + cinfo->colormap[2][icolor] = (JSAMPLE) ((c2total + (total>>1)) / total); + 801876e: 9800 ldr r0, [sp, #0] + 8018770: fb93 f3f2 sdiv r3, r3, r2 + 8018774: f8d0 0088 ldr.w r0, [r0, #136] ; 0x88 + 8018778: 6880 ldr r0, [r0, #8] + 801877a: 5443 strb r3, [r0, r1] + for (i = 0; i < numboxes; i++) + 801877c: 3101 adds r1, #1 + 801877e: 4559 cmp r1, fp + 8018780: f47f af27 bne.w 80185d2 + cinfo->actual_number_of_colors = numboxes; + 8018784: 9b00 ldr r3, [sp, #0] + TRACEMS1(cinfo, 1, JTRC_QUANT_SELECTED, numboxes); + 8018786: 2262 movs r2, #98 ; 0x62 + 8018788: 9800 ldr r0, [sp, #0] + cinfo->actual_number_of_colors = numboxes; + 801878a: f8c3 1084 str.w r1, [r3, #132] ; 0x84 + TRACEMS1(cinfo, 1, JTRC_QUANT_SELECTED, numboxes); + 801878e: 681b ldr r3, [r3, #0] + 8018790: e9c3 2105 strd r2, r1, [r3, #20] + 8018794: 685b ldr r3, [r3, #4] + 8018796: 2101 movs r1, #1 + 8018798: 4798 blx r3 + cquantize->needs_zeroed = TRUE; + 801879a: 2301 movs r3, #1 + 801879c: 9a02 ldr r2, [sp, #8] + 801879e: 61d3 str r3, [r2, #28] +} + 80187a0: b00b add sp, #44 ; 0x2c + 80187a2: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + if (c0 > cmax) { n = 0; } + 80187a6: 45a9 cmp r9, r5 + 80187a8: f73f af75 bgt.w 8018696 + lb = (b1->c2max + b1->c2min) / 2; + 80187ac: 4402 add r2, r0 + 80187ae: eb02 72d2 add.w r2, r2, r2, lsr #31 + 80187b2: 1052 asrs r2, r2, #1 + b1->c2max = lb; + 80187b4: 614a str r2, [r1, #20] + b2->c2min = lb+1; + 80187b6: 3201 adds r2, #1 + 80187b8: 633a str r2, [r7, #48] ; 0x30 + break; + 80187ba: e774 b.n 80186a6 + +080187bc : + * Module initialization routine for 2-pass color quantization. + */ + +GLOBAL(void) +jinit_2pass_quantizer (j_decompress_ptr cinfo) +{ + 80187bc: b5f8 push {r3, r4, r5, r6, r7, lr} + my_cquantize_ptr cquantize; + int i; + + cquantize = (my_cquantize_ptr) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 80187be: 6843 ldr r3, [r0, #4] + 80187c0: 222c movs r2, #44 ; 0x2c + 80187c2: 2101 movs r1, #1 +{ + 80187c4: 4604 mov r4, r0 + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 80187c6: 681b ldr r3, [r3, #0] + 80187c8: 4798 blx r3 + SIZEOF(my_cquantizer)); + cinfo->cquantize = (struct jpeg_color_quantizer *) cquantize; + cquantize->pub.start_pass = start_pass_2_quant; + 80187ca: 4b30 ldr r3, [pc, #192] ; (801888c ) + cinfo->cquantize = (struct jpeg_color_quantizer *) cquantize; + 80187cc: f8c4 01e0 str.w r0, [r4, #480] ; 0x1e0 + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + 80187d0: 4605 mov r5, r0 + cquantize->pub.start_pass = start_pass_2_quant; + 80187d2: 6003 str r3, [r0, #0] + cquantize->pub.new_color_map = new_color_map_2_quant; + 80187d4: 4b2e ldr r3, [pc, #184] ; (8018890 ) + 80187d6: 60c3 str r3, [r0, #12] + cquantize->fserrors = NULL; /* flag optional arrays not allocated */ + 80187d8: 2300 movs r3, #0 + 80187da: 6203 str r3, [r0, #32] + cquantize->error_limiter = NULL; + 80187dc: 6283 str r3, [r0, #40] ; 0x28 + + /* Make sure jdmaster didn't give me a case I can't handle */ + if (cinfo->out_color_components != 3) + 80187de: 6fa3 ldr r3, [r4, #120] ; 0x78 + 80187e0: 2b03 cmp r3, #3 + 80187e2: d005 beq.n 80187f0 + ERREXIT(cinfo, JERR_NOTIMPL); + 80187e4: 6823 ldr r3, [r4, #0] + 80187e6: 2230 movs r2, #48 ; 0x30 + 80187e8: 4620 mov r0, r4 + 80187ea: 615a str r2, [r3, #20] + 80187ec: 681b ldr r3, [r3, #0] + 80187ee: 4798 blx r3 + + /* Allocate the histogram/inverse colormap storage */ + cquantize->histogram = (hist3d) (*cinfo->mem->alloc_small) + 80187f0: 6863 ldr r3, [r4, #4] + 80187f2: 2600 movs r6, #0 + 80187f4: 2280 movs r2, #128 ; 0x80 + 80187f6: 2101 movs r1, #1 + 80187f8: 681b ldr r3, [r3, #0] + 80187fa: 4620 mov r0, r4 + 80187fc: 4798 blx r3 + 80187fe: 61a8 str r0, [r5, #24] + ((j_common_ptr) cinfo, JPOOL_IMAGE, HIST_C0_ELEMS * SIZEOF(hist2d)); + for (i = 0; i < HIST_C0_ELEMS; i++) { + cquantize->histogram[i] = (hist2d) (*cinfo->mem->alloc_large) + 8018800: 6863 ldr r3, [r4, #4] + 8018802: f44f 5280 mov.w r2, #4096 ; 0x1000 + 8018806: 69af ldr r7, [r5, #24] + 8018808: 2101 movs r1, #1 + 801880a: 685b ldr r3, [r3, #4] + 801880c: 4620 mov r0, r4 + 801880e: 4798 blx r3 + 8018810: 51b8 str r0, [r7, r6] + for (i = 0; i < HIST_C0_ELEMS; i++) { + 8018812: 3604 adds r6, #4 + 8018814: 2e80 cmp r6, #128 ; 0x80 + 8018816: d1f3 bne.n 8018800 + ((j_common_ptr) cinfo, JPOOL_IMAGE, + HIST_C1_ELEMS*HIST_C2_ELEMS * SIZEOF(histcell)); + } + cquantize->needs_zeroed = TRUE; /* histogram is garbage now */ + 8018818: 2301 movs r3, #1 + 801881a: 61eb str r3, [r5, #28] + + /* Allocate storage for the completed colormap, if required. + * We do this now since it is FAR storage and may affect + * the memory manager's space calculations. + */ + if (cinfo->enable_2pass_quant) { + 801881c: 6ee3 ldr r3, [r4, #108] ; 0x6c + 801881e: 2b00 cmp r3, #0 + 8018820: d031 beq.n 8018886 + /* Make sure color count is acceptable */ + int desired = cinfo->desired_number_of_colors; + 8018822: 6e26 ldr r6, [r4, #96] ; 0x60 + /* Lower bound on # of colors ... somewhat arbitrary as long as > 0 */ + if (desired < 8) + 8018824: 2e07 cmp r6, #7 + 8018826: dc25 bgt.n 8018874 + ERREXIT1(cinfo, JERR_QUANT_FEW_COLORS, 8); + 8018828: 223a movs r2, #58 ; 0x3a + 801882a: 6823 ldr r3, [r4, #0] + 801882c: 615a str r2, [r3, #20] + 801882e: 2208 movs r2, #8 + /* Make sure colormap indexes can be represented by JSAMPLEs */ + if (desired > MAXNUMCOLORS) + ERREXIT1(cinfo, JERR_QUANT_MANY_COLORS, MAXNUMCOLORS); + 8018830: 619a str r2, [r3, #24] + 8018832: 4620 mov r0, r4 + 8018834: 681b ldr r3, [r3, #0] + 8018836: 4798 blx r3 + cquantize->sv_colormap = (*cinfo->mem->alloc_sarray) + 8018838: 6863 ldr r3, [r4, #4] + 801883a: 4632 mov r2, r6 + 801883c: 2101 movs r1, #1 + 801883e: 4620 mov r0, r4 + 8018840: 689f ldr r7, [r3, #8] + 8018842: 2303 movs r3, #3 + 8018844: 47b8 blx r7 + ((j_common_ptr) cinfo,JPOOL_IMAGE, (JDIMENSION) desired, (JDIMENSION) 3); + cquantize->desired = desired; + 8018846: e9c5 0604 strd r0, r6, [r5, #16] + } else + cquantize->sv_colormap = NULL; + + /* Only F-S dithering or no dithering is supported. */ + /* If user asks for ordered dither, give him F-S. */ + if (cinfo->dither_mode != JDITHER_NONE) + 801884a: f894 3058 ldrb.w r3, [r4, #88] ; 0x58 + 801884e: b1e3 cbz r3, 801888a + cinfo->dither_mode = JDITHER_FS; + 8018850: 2302 movs r3, #2 + * This isn't really needed until pass 2, but again it is FAR storage. + * Although we will cope with a later change in dither_mode, + * we do not promise to honor max_memory_to_use if dither_mode changes. + */ + if (cinfo->dither_mode == JDITHER_FS) { + cquantize->fserrors = (FSERRPTR) (*cinfo->mem->alloc_large) + 8018852: 6f22 ldr r2, [r4, #112] ; 0x70 + 8018854: 4620 mov r0, r4 + 8018856: 2101 movs r1, #1 + cinfo->dither_mode = JDITHER_FS; + 8018858: f884 3058 strb.w r3, [r4, #88] ; 0x58 + cquantize->fserrors = (FSERRPTR) (*cinfo->mem->alloc_large) + 801885c: 2306 movs r3, #6 + 801885e: 435a muls r2, r3 + 8018860: 6863 ldr r3, [r4, #4] + 8018862: 320c adds r2, #12 + 8018864: 685b ldr r3, [r3, #4] + 8018866: 4798 blx r3 + 8018868: 6228 str r0, [r5, #32] + ((j_common_ptr) cinfo, JPOOL_IMAGE, + (size_t) ((cinfo->output_width + 2) * (3 * SIZEOF(FSERROR)))); + /* Might as well create the error-limiting table too. */ + init_error_limit(cinfo); + 801886a: 4620 mov r0, r4 + } +} + 801886c: e8bd 40f8 ldmia.w sp!, {r3, r4, r5, r6, r7, lr} + init_error_limit(cinfo); + 8018870: f7ff bcc8 b.w 8018204 + if (desired > MAXNUMCOLORS) + 8018874: f5b6 7f80 cmp.w r6, #256 ; 0x100 + 8018878: ddde ble.n 8018838 + ERREXIT1(cinfo, JERR_QUANT_MANY_COLORS, MAXNUMCOLORS); + 801887a: 223b movs r2, #59 ; 0x3b + 801887c: 6823 ldr r3, [r4, #0] + 801887e: 615a str r2, [r3, #20] + 8018880: f44f 7280 mov.w r2, #256 ; 0x100 + 8018884: e7d4 b.n 8018830 + cquantize->sv_colormap = NULL; + 8018886: 612b str r3, [r5, #16] + 8018888: e7df b.n 801884a +} + 801888a: bdf8 pop {r3, r4, r5, r6, r7, pc} + 801888c: 08018281 .word 0x08018281 + 8018890: 08018275 .word 0x08018275 + +08018894 : +GLOBAL(long) +jdiv_round_up (long a, long b) +/* Compute a/b rounded up to next integer, ie, ceil(a/b) */ +/* Assumes a >= 0, b > 0 */ +{ + return (a + b - 1L) / b; + 8018894: 1843 adds r3, r0, r1 + 8018896: 3b01 subs r3, #1 +} + 8018898: fb93 f0f1 sdiv r0, r3, r1 + 801889c: 4770 bx lr + +0801889e : +GLOBAL(long) +jround_up (long a, long b) +/* Compute a rounded up to next multiple of b, ie, ceil(a/b)*b */ +/* Assumes a >= 0, b > 0 */ +{ + a += b - 1L; + 801889e: 1e4b subs r3, r1, #1 + 80188a0: 4418 add r0, r3 + return a - (a % b); + 80188a2: fb90 f3f1 sdiv r3, r0, r1 + 80188a6: fb01 0313 mls r3, r1, r3, r0 +} + 80188aa: 1ac0 subs r0, r0, r3 + 80188ac: 4770 bx lr + +080188ae : +/* Copy some rows of samples from one place to another. + * num_rows rows are copied from input_array[source_row++] + * to output_array[dest_row++]; these areas may overlap for duplication. + * The source and destination arrays must be at least as wide as num_cols. + */ +{ + 80188ae: b570 push {r4, r5, r6, lr} + 80188b0: 9e04 ldr r6, [sp, #16] +#else + register JDIMENSION count; +#endif + register int row; + + input_array += source_row; + 80188b2: eb00 0481 add.w r4, r0, r1, lsl #2 + output_array += dest_row; + 80188b6: eb02 0583 add.w r5, r2, r3, lsl #2 + + for (row = num_rows; row > 0; row--) { + 80188ba: 2e00 cmp r6, #0 + 80188bc: dc00 bgt.n 80188c0 +#else + for (count = num_cols; count > 0; count--) + *outptr++ = *inptr++; /* needn't bother with GETJSAMPLE() here */ +#endif + } +} + 80188be: bd70 pop {r4, r5, r6, pc} + FMEMCOPY(outptr, inptr, count); + 80188c0: 9a05 ldr r2, [sp, #20] + for (row = num_rows; row > 0; row--) { + 80188c2: 3e01 subs r6, #1 + FMEMCOPY(outptr, inptr, count); + 80188c4: f854 1b04 ldr.w r1, [r4], #4 + 80188c8: f855 0b04 ldr.w r0, [r5], #4 + 80188cc: f01c f951 bl 8034b72 + for (row = num_rows; row > 0; row--) { + 80188d0: e7f3 b.n 80188ba + +080188d2 : + +GLOBAL(void) +jcopy_block_row (JBLOCKROW input_row, JBLOCKROW output_row, + JDIMENSION num_blocks) +/* Copy a row of coefficient blocks from one place to another. */ +{ + 80188d2: 460b mov r3, r1 +#ifdef FMEMCOPY + FMEMCOPY(output_row, input_row, num_blocks * (DCTSIZE2 * SIZEOF(JCOEF))); + 80188d4: 01d2 lsls r2, r2, #7 + 80188d6: 4601 mov r1, r0 + 80188d8: 4618 mov r0, r3 + 80188da: f01c b94a b.w 8034b72 + +080188de : + * @return n in network byte order + */ +u16_t +lwip_htons(u16_t n) +{ + return PP_HTONS(n); + 80188de: ba40 rev16 r0, r0 +} + 80188e0: b280 uxth r0, r0 + 80188e2: 4770 bx lr + +080188e4 : + */ +u32_t +lwip_htonl(u32_t n) +{ + return PP_HTONL(n); +} + 80188e4: ba00 rev r0, r0 + 80188e6: 4770 bx lr + +080188e8 : + * If the state changed, reset the number of tries. + */ +static void +dhcp_set_state(struct dhcp *dhcp, u8_t new_state) +{ + if (new_state != dhcp->state) { + 80188e8: 7943 ldrb r3, [r0, #5] + 80188ea: 428b cmp r3, r1 + dhcp->state = new_state; + dhcp->tries = 0; + 80188ec: bf1f itttt ne + 80188ee: 2300 movne r3, #0 + dhcp->state = new_state; + 80188f0: 7141 strbne r1, [r0, #5] + dhcp->tries = 0; + 80188f2: 7183 strbne r3, [r0, #6] + dhcp->request_timeout = 0; + 80188f4: 8103 strhne r3, [r0, #8] + } +} + 80188f6: 4770 bx lr + +080188f8 : + return options_out_len; +} + +static u16_t +dhcp_option_short(u16_t options_out_len, u8_t *options, u16_t value) +{ + 80188f8: b5f8 push {r3, r4, r5, r6, r7, lr} + LWIP_ASSERT("dhcp_option_short: options_out_len + 2 <= DHCP_OPTIONS_LEN", options_out_len + 2U <= DHCP_OPTIONS_LEN); + 80188fa: 1c87 adds r7, r0, #2 +{ + 80188fc: 4604 mov r4, r0 + 80188fe: 460d mov r5, r1 + 8018900: 4616 mov r6, r2 + LWIP_ASSERT("dhcp_option_short: options_out_len + 2 <= DHCP_OPTIONS_LEN", options_out_len + 2U <= DHCP_OPTIONS_LEN); + 8018902: 2f44 cmp r7, #68 ; 0x44 + 8018904: d906 bls.n 8018914 + 8018906: 4b07 ldr r3, [pc, #28] ; (8018924 ) + 8018908: f240 52ae movw r2, #1454 ; 0x5ae + 801890c: 4906 ldr r1, [pc, #24] ; (8018928 ) + 801890e: 4807 ldr r0, [pc, #28] ; (801892c ) + 8018910: f01b ff20 bl 8034754 + options[options_out_len++] = (u8_t)((value & 0xff00U) >> 8); + 8018914: 0a33 lsrs r3, r6, #8 + options[options_out_len++] = (u8_t) (value & 0x00ffU); + return options_out_len; +} + 8018916: b2b8 uxth r0, r7 + options[options_out_len++] = (u8_t)((value & 0xff00U) >> 8); + 8018918: 552b strb r3, [r5, r4] + 801891a: 3401 adds r4, #1 + options[options_out_len++] = (u8_t) (value & 0x00ffU); + 801891c: b2a4 uxth r4, r4 + 801891e: 552e strb r6, [r5, r4] +} + 8018920: bdf8 pop {r3, r4, r5, r6, r7, pc} + 8018922: bf00 nop + 8018924: 08039d4c .word 0x08039d4c + 8018928: 08039dd2 .word 0x08039dd2 + 801892c: 08035999 .word 0x08035999 + +08018930 : +{ + 8018930: b5f8 push {r3, r4, r5, r6, r7, lr} + 8018932: 461e mov r6, r3 + LWIP_ASSERT("dhcp_option: options_out_len + 2 + option_len <= DHCP_OPTIONS_LEN", options_out_len + 2U + option_len <= DHCP_OPTIONS_LEN); + 8018934: 3302 adds r3, #2 +{ + 8018936: 4604 mov r4, r0 + 8018938: 460d mov r5, r1 + LWIP_ASSERT("dhcp_option: options_out_len + 2 + option_len <= DHCP_OPTIONS_LEN", options_out_len + 2U + option_len <= DHCP_OPTIONS_LEN); + 801893a: fa50 f383 uxtab r3, r0, r3 +{ + 801893e: 4617 mov r7, r2 + LWIP_ASSERT("dhcp_option: options_out_len + 2 + option_len <= DHCP_OPTIONS_LEN", options_out_len + 2U + option_len <= DHCP_OPTIONS_LEN); + 8018940: 2b44 cmp r3, #68 ; 0x44 + 8018942: d906 bls.n 8018952 + 8018944: 4b06 ldr r3, [pc, #24] ; (8018960 ) + 8018946: f240 529a movw r2, #1434 ; 0x59a + 801894a: 4906 ldr r1, [pc, #24] ; (8018964 ) + 801894c: 4806 ldr r0, [pc, #24] ; (8018968 ) + 801894e: f01b ff01 bl 8034754 + options[options_out_len++] = option_type; + 8018952: 1c63 adds r3, r4, #1 + options[options_out_len++] = option_len; + 8018954: 1ca0 adds r0, r4, #2 + options[options_out_len++] = option_type; + 8018956: 552f strb r7, [r5, r4] + options[options_out_len++] = option_len; + 8018958: b29b uxth r3, r3 +} + 801895a: b280 uxth r0, r0 + options[options_out_len++] = option_len; + 801895c: 54ee strb r6, [r5, r3] +} + 801895e: bdf8 pop {r3, r4, r5, r6, r7, pc} + 8018960: 08039d4c .word 0x08039d4c + 8018964: 08039e0d .word 0x08039e0d + 8018968: 08035999 .word 0x08035999 + +0801896c : + LWIP_ASSERT("dhcp_option_byte: options_out_len < DHCP_OPTIONS_LEN", options_out_len < DHCP_OPTIONS_LEN); + 801896c: 2843 cmp r0, #67 ; 0x43 +{ + 801896e: b570 push {r4, r5, r6, lr} + 8018970: 4604 mov r4, r0 + 8018972: 460d mov r5, r1 + 8018974: 4616 mov r6, r2 + LWIP_ASSERT("dhcp_option_byte: options_out_len < DHCP_OPTIONS_LEN", options_out_len < DHCP_OPTIONS_LEN); + 8018976: d906 bls.n 8018986 + 8018978: 4b05 ldr r3, [pc, #20] ; (8018990 ) + 801897a: f240 52a6 movw r2, #1446 ; 0x5a6 + 801897e: 4905 ldr r1, [pc, #20] ; (8018994 ) + 8018980: 4805 ldr r0, [pc, #20] ; (8018998 ) + 8018982: f01b fee7 bl 8034754 + options[options_out_len++] = value; + 8018986: 1c60 adds r0, r4, #1 + 8018988: 552e strb r6, [r5, r4] +} + 801898a: b280 uxth r0, r0 + 801898c: bd70 pop {r4, r5, r6, pc} + 801898e: bf00 nop + 8018990: 08039d4c .word 0x08039d4c + 8018994: 08039e4f .word 0x08039e4f + 8018998: 08035999 .word 0x08035999 + +0801899c : + +static u16_t +dhcp_option_long(u16_t options_out_len, u8_t *options, u32_t value) +{ + 801899c: b5f8 push {r3, r4, r5, r6, r7, lr} + LWIP_ASSERT("dhcp_option_long: options_out_len + 4 <= DHCP_OPTIONS_LEN", options_out_len + 4U <= DHCP_OPTIONS_LEN); + 801899e: 1d07 adds r7, r0, #4 +{ + 80189a0: 4604 mov r4, r0 + 80189a2: 460d mov r5, r1 + 80189a4: 4616 mov r6, r2 + LWIP_ASSERT("dhcp_option_long: options_out_len + 4 <= DHCP_OPTIONS_LEN", options_out_len + 4U <= DHCP_OPTIONS_LEN); + 80189a6: 2f44 cmp r7, #68 ; 0x44 + 80189a8: d906 bls.n 80189b8 + 80189aa: 4b0b ldr r3, [pc, #44] ; (80189d8 ) + 80189ac: f240 52b7 movw r2, #1463 ; 0x5b7 + 80189b0: 490a ldr r1, [pc, #40] ; (80189dc ) + 80189b2: 480b ldr r0, [pc, #44] ; (80189e0 ) + 80189b4: f01b fece bl 8034754 + options[options_out_len++] = (u8_t)((value & 0xff000000UL) >> 24); + 80189b8: 0e33 lsrs r3, r6, #24 + options[options_out_len++] = (u8_t)((value & 0x00ff0000UL) >> 16); + 80189ba: 0c32 lsrs r2, r6, #16 + options[options_out_len++] = (u8_t)((value & 0xff000000UL) >> 24); + 80189bc: 552b strb r3, [r5, r4] + 80189be: 1c63 adds r3, r4, #1 + options[options_out_len++] = (u8_t)((value & 0x0000ff00UL) >> 8); + options[options_out_len++] = (u8_t)((value & 0x000000ffUL)); + return options_out_len; +} + 80189c0: b2b8 uxth r0, r7 + options[options_out_len++] = (u8_t)((value & 0x00ff0000UL) >> 16); + 80189c2: b29b uxth r3, r3 + 80189c4: 54ea strb r2, [r5, r3] + 80189c6: 1ca3 adds r3, r4, #2 + options[options_out_len++] = (u8_t)((value & 0x0000ff00UL) >> 8); + 80189c8: 3403 adds r4, #3 + 80189ca: 0a32 lsrs r2, r6, #8 + 80189cc: b29b uxth r3, r3 + options[options_out_len++] = (u8_t)((value & 0x000000ffUL)); + 80189ce: b2a4 uxth r4, r4 + options[options_out_len++] = (u8_t)((value & 0x0000ff00UL) >> 8); + 80189d0: 54ea strb r2, [r5, r3] + options[options_out_len++] = (u8_t)((value & 0x000000ffUL)); + 80189d2: 552e strb r6, [r5, r4] +} + 80189d4: bdf8 pop {r3, r4, r5, r6, r7, pc} + 80189d6: bf00 nop + 80189d8: 08039d4c .word 0x08039d4c + 80189dc: 08039e84 .word 0x08039e84 + 80189e0: 08035999 .word 0x08035999 + +080189e4 : + * @param dhcp dhcp control struct + * @param message_type message type of the request + */ +static struct pbuf * +dhcp_create_msg(struct netif *netif, struct dhcp *dhcp, u8_t message_type, u16_t *options_out_len) +{ + 80189e4: e92d 43f7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, lr} + 80189e8: 460e mov r6, r1 + 80189ea: 4690 mov r8, r2 + 80189ec: 4699 mov r9, r3 + if (!xid_initialised) { + xid = DHCP_GLOBAL_XID; + xid_initialised = !xid_initialised; + } +#endif + LWIP_ERROR("dhcp_create_msg: netif != NULL", (netif != NULL), return NULL;); + 80189ee: 4605 mov r5, r0 + 80189f0: b958 cbnz r0, 8018a0a + 80189f2: 462f mov r7, r5 + 80189f4: 4b3e ldr r3, [pc, #248] ; (8018af0 ) + 80189f6: f240 7269 movw r2, #1897 ; 0x769 + 80189fa: 493e ldr r1, [pc, #248] ; (8018af4 ) + 80189fc: 483e ldr r0, [pc, #248] ; (8018af8 ) + 80189fe: f01b fea9 bl 8034754 + options_out_len_loc = dhcp_option_byte(options_out_len_loc, msg_out->options, message_type); + if (options_out_len) { + *options_out_len = options_out_len_loc; + } + return p_out; +} + 8018a02: 4638 mov r0, r7 + 8018a04: b003 add sp, #12 + 8018a06: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} + LWIP_ERROR("dhcp_create_msg: dhcp != NULL", (dhcp != NULL), return NULL;); + 8018a0a: b941 cbnz r1, 8018a1e + 8018a0c: 4b38 ldr r3, [pc, #224] ; (8018af0 ) + 8018a0e: f240 726a movw r2, #1898 ; 0x76a + 8018a12: 493a ldr r1, [pc, #232] ; (8018afc ) + 8018a14: 4637 mov r7, r6 + 8018a16: 4838 ldr r0, [pc, #224] ; (8018af8 ) + 8018a18: f01b fe9c bl 8034754 + 8018a1c: e7f1 b.n 8018a02 + p_out = pbuf_alloc(PBUF_TRANSPORT, sizeof(struct dhcp_msg), PBUF_RAM); + 8018a1e: f44f 7220 mov.w r2, #640 ; 0x280 + 8018a22: f44f 719a mov.w r1, #308 ; 0x134 + 8018a26: 2036 movs r0, #54 ; 0x36 + 8018a28: f003 f8ee bl 801bc08 + if (p_out == NULL) { + 8018a2c: 4607 mov r7, r0 + 8018a2e: 2800 cmp r0, #0 + 8018a30: d0e7 beq.n 8018a02 + LWIP_ASSERT("dhcp_create_msg: check that first pbuf can hold struct dhcp_msg", + 8018a32: 8943 ldrh r3, [r0, #10] + 8018a34: f5b3 7f9a cmp.w r3, #308 ; 0x134 + 8018a38: d206 bcs.n 8018a48 + 8018a3a: 4b2d ldr r3, [pc, #180] ; (8018af0 ) + 8018a3c: f240 7271 movw r2, #1905 ; 0x771 + 8018a40: 492f ldr r1, [pc, #188] ; (8018b00 ) + 8018a42: 482d ldr r0, [pc, #180] ; (8018af8 ) + 8018a44: f01b fe86 bl 8034754 + if ((message_type != DHCP_REQUEST) || (dhcp->state == DHCP_STATE_REBOOTING)) { + 8018a48: f1b8 0f03 cmp.w r8, #3 + 8018a4c: d102 bne.n 8018a54 + 8018a4e: 7973 ldrb r3, [r6, #5] + 8018a50: 2b03 cmp r3, #3 + 8018a52: d107 bne.n 8018a64 + if (dhcp->tries == 0) { + 8018a54: 79b3 ldrb r3, [r6, #6] + 8018a56: 4c2b ldr r4, [pc, #172] ; (8018b04 ) + 8018a58: b913 cbnz r3, 8018a60 + xid = LWIP_RAND(); + 8018a5a: f01b fd5b bl 8034514 + 8018a5e: 6020 str r0, [r4, #0] + dhcp->xid = xid; + 8018a60: 6823 ldr r3, [r4, #0] + 8018a62: 6033 str r3, [r6, #0] + msg_out = (struct dhcp_msg *)p_out->payload; + 8018a64: 687c ldr r4, [r7, #4] + memset(msg_out, 0, sizeof(struct dhcp_msg)); + 8018a66: f44f 729a mov.w r2, #308 ; 0x134 + 8018a6a: 2100 movs r1, #0 + 8018a6c: 4620 mov r0, r4 + 8018a6e: f01b ffa5 bl 80349bc + msg_out->op = DHCP_BOOTREQUEST; + 8018a72: 2301 movs r3, #1 + 8018a74: 7023 strb r3, [r4, #0] + msg_out->htype = LWIP_IANA_HWTYPE_ETHERNET; + 8018a76: 7063 strb r3, [r4, #1] + msg_out->hlen = netif->hwaddr_len; + 8018a78: f895 3030 ldrb.w r3, [r5, #48] ; 0x30 + 8018a7c: 70a3 strb r3, [r4, #2] + msg_out->xid = lwip_htonl(dhcp->xid); + 8018a7e: 6830 ldr r0, [r6, #0] + 8018a80: f7ff ff30 bl 80188e4 + if ((message_type == DHCP_INFORM) || (message_type == DHCP_DECLINE) || (message_type == DHCP_RELEASE) || + 8018a84: f44f 73c8 mov.w r3, #400 ; 0x190 + msg_out->xid = lwip_htonl(dhcp->xid); + 8018a88: 6060 str r0, [r4, #4] + if ((message_type == DHCP_INFORM) || (message_type == DHCP_DECLINE) || (message_type == DHCP_RELEASE) || + 8018a8a: fa23 f308 lsr.w r3, r3, r8 + 8018a8e: 07db lsls r3, r3, #31 + 8018a90: d406 bmi.n 8018aa0 + 8018a92: f1b8 0f03 cmp.w r8, #3 + 8018a96: d105 bne.n 8018aa4 + ((dhcp->state == DHCP_STATE_RENEWING) || dhcp->state == DHCP_STATE_REBINDING))) { + 8018a98: 7973 ldrb r3, [r6, #5] + ((message_type == DHCP_REQUEST) && /* DHCP_STATE_BOUND not used for sending! */ + 8018a9a: 3b04 subs r3, #4 + 8018a9c: 2b01 cmp r3, #1 + 8018a9e: d801 bhi.n 8018aa4 + ip4_addr_copy(msg_out->ciaddr, *netif_ip4_addr(netif)); + 8018aa0: 686b ldr r3, [r5, #4] + 8018aa2: 60e3 str r3, [r4, #12] + 8018aa4: f105 0329 add.w r3, r5, #41 ; 0x29 + 8018aa8: f104 021b add.w r2, r4, #27 + 8018aac: 352f adds r5, #47 ; 0x2f + msg_out->chaddr[i] = netif->hwaddr[i]; + 8018aae: f813 1f01 ldrb.w r1, [r3, #1]! + for (i = 0; i < LWIP_MIN(DHCP_CHADDR_LEN, NETIF_MAX_HWADDR_LEN); i++) { + 8018ab2: 42ab cmp r3, r5 + msg_out->chaddr[i] = netif->hwaddr[i]; + 8018ab4: f802 1f01 strb.w r1, [r2, #1]! + for (i = 0; i < LWIP_MIN(DHCP_CHADDR_LEN, NETIF_MAX_HWADDR_LEN); i++) { + 8018ab8: d1f9 bne.n 8018aae + msg_out->cookie = PP_HTONL(DHCP_MAGIC_COOKIE); + 8018aba: f06f 027d mvn.w r2, #125 ; 0x7d + 8018abe: 2363 movs r3, #99 ; 0x63 + options_out_len_loc = dhcp_option(0, msg_out->options, DHCP_OPTION_MESSAGE_TYPE, DHCP_OPTION_MESSAGE_TYPE_LEN); + 8018ac0: f104 01f0 add.w r1, r4, #240 ; 0xf0 + 8018ac4: 2000 movs r0, #0 + msg_out->cookie = PP_HTONL(DHCP_MAGIC_COOKIE); + 8018ac6: f884 20ed strb.w r2, [r4, #237] ; 0xed + 8018aca: 2253 movs r2, #83 ; 0x53 + 8018acc: f884 30ec strb.w r3, [r4, #236] ; 0xec + 8018ad0: f884 20ee strb.w r2, [r4, #238] ; 0xee + options_out_len_loc = dhcp_option(0, msg_out->options, DHCP_OPTION_MESSAGE_TYPE, DHCP_OPTION_MESSAGE_TYPE_LEN); + 8018ad4: 2235 movs r2, #53 ; 0x35 + msg_out->cookie = PP_HTONL(DHCP_MAGIC_COOKIE); + 8018ad6: f884 30ef strb.w r3, [r4, #239] ; 0xef + options_out_len_loc = dhcp_option(0, msg_out->options, DHCP_OPTION_MESSAGE_TYPE, DHCP_OPTION_MESSAGE_TYPE_LEN); + 8018ada: 2301 movs r3, #1 + 8018adc: 9101 str r1, [sp, #4] + 8018ade: f7ff ff27 bl 8018930 + options_out_len_loc = dhcp_option_byte(options_out_len_loc, msg_out->options, message_type); + 8018ae2: 4642 mov r2, r8 + 8018ae4: 9901 ldr r1, [sp, #4] + 8018ae6: f7ff ff41 bl 801896c + *options_out_len = options_out_len_loc; + 8018aea: f8a9 0000 strh.w r0, [r9] + 8018aee: e788 b.n 8018a02 + 8018af0: 08039d4c .word 0x08039d4c + 8018af4: 08039ebe .word 0x08039ebe + 8018af8: 08035999 .word 0x08035999 + 8018afc: 08039edd .word 0x08039edd + 8018b00: 08039efb .word 0x08039efb + 8018b04: 2001ae3c .word 0x2001ae3c + +08018b08 : + * Adds the END option to the DHCP message, and if + * necessary, up to three padding bytes. + */ +static void +dhcp_option_trailer(u16_t options_out_len, u8_t *options, struct pbuf *p_out) +{ + 8018b08: b5f8 push {r3, r4, r5, r6, r7, lr} + 8018b0a: 4604 mov r4, r0 + options[options_out_len++] = DHCP_OPTION_END; + 8018b0c: 23ff movs r3, #255 ; 0xff +{ + 8018b0e: 4608 mov r0, r1 + 8018b10: 4617 mov r7, r2 + options[options_out_len++] = DHCP_OPTION_END; + 8018b12: 1c66 adds r6, r4, #1 + /* packet is too small, or not 4 byte aligned? */ + while (((options_out_len < DHCP_MIN_OPTIONS_LEN) || (options_out_len & 3)) && + (options_out_len < DHCP_OPTIONS_LEN)) { + /* add a fill/padding byte */ + options[options_out_len++] = 0; + 8018b14: f1c4 0543 rsb r5, r4, #67 ; 0x43 + options[options_out_len++] = DHCP_OPTION_END; + 8018b18: 550b strb r3, [r1, r4] + options[options_out_len++] = 0; + 8018b1a: 2100 movs r1, #0 + options[options_out_len++] = DHCP_OPTION_END; + 8018b1c: b2b6 uxth r6, r6 + options[options_out_len++] = 0; + 8018b1e: b2ad uxth r5, r5 + 8018b20: 2e44 cmp r6, #68 ; 0x44 + 8018b22: 4430 add r0, r6 + 8018b24: bf94 ite ls + 8018b26: 462a movls r2, r5 + 8018b28: 2200 movhi r2, #0 + 8018b2a: f01b ff47 bl 80349bc + } + /* shrink the pbuf to the actual content length */ + pbuf_realloc(p_out, (u16_t)(sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN + options_out_len)); + 8018b2e: 2e44 cmp r6, #68 ; 0x44 + 8018b30: f104 01f1 add.w r1, r4, #241 ; 0xf1 + 8018b34: 4638 mov r0, r7 + 8018b36: bf88 it hi + 8018b38: 2500 movhi r5, #0 + 8018b3a: 4429 add r1, r5 +} + 8018b3c: e8bd 40f8 ldmia.w sp!, {r3, r4, r5, r6, r7, lr} + pbuf_realloc(p_out, (u16_t)(sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN + options_out_len)); + 8018b40: b289 uxth r1, r1 + 8018b42: f003 b8f3 b.w 801bd2c + ... + +08018b48 : +{ + 8018b48: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} + ip4_addr_set_any(&dhcp->offered_ip_addr); + 8018b4c: 2300 movs r3, #0 + struct dhcp *dhcp = netif_dhcp_data(netif); + 8018b4e: 6a44 ldr r4, [r0, #36] ; 0x24 +{ + 8018b50: b086 sub sp, #24 + 8018b52: 4606 mov r6, r0 + dhcp_set_state(dhcp, DHCP_STATE_SELECTING); + 8018b54: 2106 movs r1, #6 + 8018b56: 4620 mov r0, r4 + ip4_addr_set_any(&dhcp->offered_ip_addr); + 8018b58: 61e3 str r3, [r4, #28] + p_out = dhcp_create_msg(netif, dhcp, DHCP_DISCOVER, &options_out_len); + 8018b5a: 2201 movs r2, #1 + dhcp_set_state(dhcp, DHCP_STATE_SELECTING); + 8018b5c: f7ff fec4 bl 80188e8 + p_out = dhcp_create_msg(netif, dhcp, DHCP_DISCOVER, &options_out_len); + 8018b60: f10d 0316 add.w r3, sp, #22 + 8018b64: 4621 mov r1, r4 + 8018b66: 4630 mov r0, r6 + 8018b68: f7ff ff3c bl 80189e4 + if (p_out != NULL) { + 8018b6c: 4605 mov r5, r0 + 8018b6e: 2800 cmp r0, #0 + 8018b70: d039 beq.n 8018be6 + options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN); + 8018b72: 6841 ldr r1, [r0, #4] + 8018b74: 2302 movs r3, #2 + 8018b76: 2239 movs r2, #57 ; 0x39 + 8018b78: f8bd 0016 ldrh.w r0, [sp, #22] + 8018b7c: 31f0 adds r1, #240 ; 0xf0 + 8018b7e: f8df 80b4 ldr.w r8, [pc, #180] ; 8018c34 + options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_PARAMETER_REQUEST_LIST, LWIP_ARRAYSIZE(dhcp_discover_request_options)); + 8018b82: 2703 movs r7, #3 + options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN); + 8018b84: 9103 str r1, [sp, #12] + 8018b86: f7ff fed3 bl 8018930 + options_out_len = dhcp_option_short(options_out_len, msg_out->options, DHCP_MAX_MSG_LEN(netif)); + 8018b8a: 8d32 ldrh r2, [r6, #40] ; 0x28 + 8018b8c: 9903 ldr r1, [sp, #12] + options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN); + 8018b8e: f8ad 0016 strh.w r0, [sp, #22] + options_out_len = dhcp_option_short(options_out_len, msg_out->options, DHCP_MAX_MSG_LEN(netif)); + 8018b92: f7ff feb1 bl 80188f8 + options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_PARAMETER_REQUEST_LIST, LWIP_ARRAYSIZE(dhcp_discover_request_options)); + 8018b96: 9903 ldr r1, [sp, #12] + 8018b98: 2303 movs r3, #3 + 8018b9a: 2237 movs r2, #55 ; 0x37 + options_out_len = dhcp_option_short(options_out_len, msg_out->options, DHCP_MAX_MSG_LEN(netif)); + 8018b9c: f8ad 0016 strh.w r0, [sp, #22] + options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_PARAMETER_REQUEST_LIST, LWIP_ARRAYSIZE(dhcp_discover_request_options)); + 8018ba0: f7ff fec6 bl 8018930 + 8018ba4: 9903 ldr r1, [sp, #12] + 8018ba6: f8ad 0016 strh.w r0, [sp, #22] + for (i = 0; i < LWIP_ARRAYSIZE(dhcp_discover_request_options); i++) { + 8018baa: 3f01 subs r7, #1 + options_out_len = dhcp_option_byte(options_out_len, msg_out->options, dhcp_discover_request_options[i]); + 8018bac: f818 2b01 ldrb.w r2, [r8], #1 + 8018bb0: f8bd 0016 ldrh.w r0, [sp, #22] + 8018bb4: 9103 str r1, [sp, #12] + 8018bb6: f7ff fed9 bl 801896c + for (i = 0; i < LWIP_ARRAYSIZE(dhcp_discover_request_options); i++) { + 8018bba: f017 07ff ands.w r7, r7, #255 ; 0xff + 8018bbe: 9903 ldr r1, [sp, #12] + options_out_len = dhcp_option_byte(options_out_len, msg_out->options, dhcp_discover_request_options[i]); + 8018bc0: f8ad 0016 strh.w r0, [sp, #22] + for (i = 0; i < LWIP_ARRAYSIZE(dhcp_discover_request_options); i++) { + 8018bc4: d1f1 bne.n 8018baa + dhcp_option_trailer(options_out_len, msg_out->options, p_out); + 8018bc6: 462a mov r2, r5 + 8018bc8: f7ff ff9e bl 8018b08 + udp_sendto_if_src(dhcp_pcb, p_out, IP_ADDR_BROADCAST, LWIP_IANA_PORT_DHCP_SERVER, netif, IP4_ADDR_ANY); + 8018bcc: 4b16 ldr r3, [pc, #88] ; (8018c28 ) + 8018bce: 4817 ldr r0, [pc, #92] ; (8018c2c ) + 8018bd0: 4629 mov r1, r5 + 8018bd2: 4a17 ldr r2, [pc, #92] ; (8018c30 ) + 8018bd4: e9cd 6300 strd r6, r3, [sp] + 8018bd8: 2343 movs r3, #67 ; 0x43 + 8018bda: 6800 ldr r0, [r0, #0] + 8018bdc: f006 fe5c bl 801f898 + pbuf_free(p_out); + 8018be0: 4628 mov r0, r5 + 8018be2: f002 ffa9 bl 801bb38 + if (dhcp->tries < 255) { + 8018be6: 79a3 ldrb r3, [r4, #6] +} + 8018be8: 2000 movs r0, #0 + if (dhcp->tries < 255) { + 8018bea: 2bff cmp r3, #255 ; 0xff + dhcp->tries++; + 8018bec: bf1c itt ne + 8018bee: 3301 addne r3, #1 + 8018bf0: 71a3 strbne r3, [r4, #6] + msecs = (u16_t)((dhcp->tries < 6 ? 1 << dhcp->tries : 60) * 1000); + 8018bf2: 79a2 ldrb r2, [r4, #6] + 8018bf4: 2a05 cmp r2, #5 + 8018bf6: bf97 itett ls + 8018bf8: 2301 movls r3, #1 + 8018bfa: f64e 2360 movwhi r3, #60000 ; 0xea60 + 8018bfe: 4093 lslls r3, r2 + 8018c00: ebc3 1243 rsbls r2, r3, r3, lsl #5 + 8018c04: bf98 it ls + 8018c06: eb03 0382 addls.w r3, r3, r2, lsl #2 + dhcp->request_timeout = (u16_t)((msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS); + 8018c0a: f44f 72fa mov.w r2, #500 ; 0x1f4 + msecs = (u16_t)((dhcp->tries < 6 ? 1 << dhcp->tries : 60) * 1000); + 8018c0e: bf9c itt ls + 8018c10: 00db lslls r3, r3, #3 + 8018c12: b29b uxthls r3, r3 + dhcp->request_timeout = (u16_t)((msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS); + 8018c14: f203 13f3 addw r3, r3, #499 ; 0x1f3 + 8018c18: b29b uxth r3, r3 + 8018c1a: fbb3 f3f2 udiv r3, r3, r2 + 8018c1e: 8123 strh r3, [r4, #8] +} + 8018c20: b006 add sp, #24 + 8018c22: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + 8018c26: bf00 nop + 8018c28: 0803a528 .word 0x0803a528 + 8018c2c: 2001ae0c .word 0x2001ae0c + 8018c30: 0803a52c .word 0x0803a52c + 8018c34: 0803a0b5 .word 0x0803a0b5 + +08018c38 : +{ + 8018c38: b538 push {r3, r4, r5, lr} + struct dhcp *dhcp = netif_dhcp_data(netif); + 8018c3a: 6a44 ldr r4, [r0, #36] ; 0x24 +{ + 8018c3c: 4605 mov r5, r0 + dhcp_set_state(dhcp, DHCP_STATE_CHECKING); + 8018c3e: 2108 movs r1, #8 + result = etharp_query(netif, &dhcp->offered_ip_addr, NULL); + 8018c40: 2200 movs r2, #0 + dhcp_set_state(dhcp, DHCP_STATE_CHECKING); + 8018c42: 4620 mov r0, r4 + 8018c44: f7ff fe50 bl 80188e8 + result = etharp_query(netif, &dhcp->offered_ip_addr, NULL); + 8018c48: f104 011c add.w r1, r4, #28 + 8018c4c: 4628 mov r0, r5 + 8018c4e: f001 f993 bl 8019f78 + if (dhcp->tries < 255) { + 8018c52: 79a3 ldrb r3, [r4, #6] + 8018c54: 2bff cmp r3, #255 ; 0xff + dhcp->tries++; + 8018c56: bf1c itt ne + 8018c58: 3301 addne r3, #1 + 8018c5a: 71a3 strbne r3, [r4, #6] + dhcp->request_timeout = (u16_t)((msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS); + 8018c5c: 2301 movs r3, #1 + 8018c5e: 8123 strh r3, [r4, #8] +} + 8018c60: bd38 pop {r3, r4, r5, pc} + ... + +08018c64 : +{ + 8018c64: b513 push {r0, r1, r4, lr} + LWIP_ERROR("dhcp_bind: netif != NULL", (netif != NULL), return;); + 8018c66: 4604 mov r4, r0 + 8018c68: b948 cbnz r0, 8018c7e + 8018c6a: 4b3b ldr r3, [pc, #236] ; (8018d58 ) + 8018c6c: f240 4215 movw r2, #1045 ; 0x415 + 8018c70: 493a ldr r1, [pc, #232] ; (8018d5c ) + LWIP_ERROR("dhcp_bind: dhcp != NULL", (dhcp != NULL), return;); + 8018c72: 483b ldr r0, [pc, #236] ; (8018d60 ) +} + 8018c74: b002 add sp, #8 + 8018c76: e8bd 4010 ldmia.w sp!, {r4, lr} + LWIP_ERROR("dhcp_bind: dhcp != NULL", (dhcp != NULL), return;); + 8018c7a: f01b bd6b b.w 8034754 + dhcp = netif_dhcp_data(netif); + 8018c7e: 6a40 ldr r0, [r0, #36] ; 0x24 + LWIP_ERROR("dhcp_bind: dhcp != NULL", (dhcp != NULL), return;); + 8018c80: b920 cbnz r0, 8018c8c + 8018c82: 4b35 ldr r3, [pc, #212] ; (8018d58 ) + 8018c84: f240 4217 movw r2, #1047 ; 0x417 + 8018c88: 4936 ldr r1, [pc, #216] ; (8018d64 ) + 8018c8a: e7f2 b.n 8018c72 + dhcp->lease_used = 0; + 8018c8c: 2300 movs r3, #0 + 8018c8e: 8243 strh r3, [r0, #18] + if (dhcp->offered_t0_lease != 0xffffffffUL) { + 8018c90: 6a83 ldr r3, [r0, #40] ; 0x28 + 8018c92: 1c5a adds r2, r3, #1 + 8018c94: d00c beq.n 8018cb0 + timeout = (dhcp->offered_t0_lease + DHCP_COARSE_TIMER_SECS / 2) / DHCP_COARSE_TIMER_SECS; + 8018c96: 331e adds r3, #30 + if (timeout > 0xffff) { + 8018c98: f5b3 1f70 cmp.w r3, #3932160 ; 0x3c0000 + timeout = (dhcp->offered_t0_lease + DHCP_COARSE_TIMER_SECS / 2) / DHCP_COARSE_TIMER_SECS; + 8018c9c: bf36 itet cc + 8018c9e: 223c movcc r2, #60 ; 0x3c + timeout = 0xffff; + 8018ca0: f64f 73ff movwcs r3, #65535 ; 0xffff + timeout = (dhcp->offered_t0_lease + DHCP_COARSE_TIMER_SECS / 2) / DHCP_COARSE_TIMER_SECS; + 8018ca4: fbb3 f3f2 udivcc r3, r3, r2 + dhcp->t0_timeout = (u16_t)timeout; + 8018ca8: b29a uxth r2, r3 + if (dhcp->t0_timeout == 0) { + 8018caa: 2b00 cmp r3, #0 + 8018cac: d043 beq.n 8018d36 + dhcp->t0_timeout = (u16_t)timeout; + 8018cae: 8282 strh r2, [r0, #20] + if (dhcp->offered_t1_renew != 0xffffffffUL) { + 8018cb0: 6ac3 ldr r3, [r0, #44] ; 0x2c + 8018cb2: 1c59 adds r1, r3, #1 + 8018cb4: d00e beq.n 8018cd4 + timeout = (dhcp->offered_t1_renew + DHCP_COARSE_TIMER_SECS / 2) / DHCP_COARSE_TIMER_SECS; + 8018cb6: 331e adds r3, #30 + if (timeout > 0xffff) { + 8018cb8: f5b3 1f70 cmp.w r3, #3932160 ; 0x3c0000 + timeout = (dhcp->offered_t1_renew + DHCP_COARSE_TIMER_SECS / 2) / DHCP_COARSE_TIMER_SECS; + 8018cbc: bf36 itet cc + 8018cbe: 223c movcc r2, #60 ; 0x3c + timeout = 0xffff; + 8018cc0: f64f 73ff movwcs r3, #65535 ; 0xffff + timeout = (dhcp->offered_t1_renew + DHCP_COARSE_TIMER_SECS / 2) / DHCP_COARSE_TIMER_SECS; + 8018cc4: fbb3 f3f2 udivcc r3, r3, r2 + if (dhcp->t1_timeout == 0) { + 8018cc8: b29b uxth r3, r3 + 8018cca: 2b01 cmp r3, #1 + 8018ccc: bf38 it cc + 8018cce: 2301 movcc r3, #1 + 8018cd0: 8143 strh r3, [r0, #10] + dhcp->t1_renew_time = dhcp->t1_timeout; + 8018cd2: 81c3 strh r3, [r0, #14] + if (dhcp->offered_t2_rebind != 0xffffffffUL) { + 8018cd4: 6b03 ldr r3, [r0, #48] ; 0x30 + 8018cd6: 1c5a adds r2, r3, #1 + 8018cd8: d00e beq.n 8018cf8 + timeout = (dhcp->offered_t2_rebind + DHCP_COARSE_TIMER_SECS / 2) / DHCP_COARSE_TIMER_SECS; + 8018cda: 331e adds r3, #30 + if (timeout > 0xffff) { + 8018cdc: f5b3 1f70 cmp.w r3, #3932160 ; 0x3c0000 + timeout = (dhcp->offered_t2_rebind + DHCP_COARSE_TIMER_SECS / 2) / DHCP_COARSE_TIMER_SECS; + 8018ce0: bf36 itet cc + 8018ce2: 223c movcc r2, #60 ; 0x3c + timeout = 0xffff; + 8018ce4: f64f 73ff movwcs r3, #65535 ; 0xffff + timeout = (dhcp->offered_t2_rebind + DHCP_COARSE_TIMER_SECS / 2) / DHCP_COARSE_TIMER_SECS; + 8018ce8: fbb3 f3f2 udivcc r3, r3, r2 + if (dhcp->t2_timeout == 0) { + 8018cec: b29b uxth r3, r3 + 8018cee: 2b01 cmp r3, #1 + 8018cf0: bf38 it cc + 8018cf2: 2301 movcc r3, #1 + 8018cf4: 8183 strh r3, [r0, #12] + dhcp->t2_rebind_time = dhcp->t2_timeout; + 8018cf6: 8203 strh r3, [r0, #16] + if ((dhcp->t1_timeout >= dhcp->t2_timeout) && (dhcp->t2_timeout > 0)) { + 8018cf8: 8983 ldrh r3, [r0, #12] + 8018cfa: 8942 ldrh r2, [r0, #10] + 8018cfc: 429a cmp r2, r3 + 8018cfe: d302 bcc.n 8018d06 + 8018d00: b10b cbz r3, 8018d06 + dhcp->t1_timeout = 0; + 8018d02: 2300 movs r3, #0 + 8018d04: 8143 strh r3, [r0, #10] + if (dhcp->subnet_mask_given) { + 8018d06: 79c3 ldrb r3, [r0, #7] + 8018d08: b1c3 cbz r3, 8018d3c + ip4_addr_copy(sn_mask, dhcp->offered_sn_mask); + 8018d0a: 6a03 ldr r3, [r0, #32] + ip4_addr_copy(gw_addr, dhcp->offered_gw_addr); + 8018d0c: 6a42 ldr r2, [r0, #36] ; 0x24 + ip4_addr_copy(sn_mask, dhcp->offered_sn_mask); + 8018d0e: 9300 str r3, [sp, #0] + ip4_addr_copy(gw_addr, dhcp->offered_gw_addr); + 8018d10: 9201 str r2, [sp, #4] + if (ip4_addr_isany_val(gw_addr)) { + 8018d12: b922 cbnz r2, 8018d1e + ip4_addr_get_network(&gw_addr, &dhcp->offered_ip_addr, &sn_mask); + 8018d14: 69c2 ldr r2, [r0, #28] + 8018d16: 4013 ands r3, r2 + ip4_addr_set_u32(&gw_addr, ip4_addr_get_u32(&gw_addr) | PP_HTONL(0x00000001UL)); + 8018d18: f043 7380 orr.w r3, r3, #16777216 ; 0x1000000 + 8018d1c: 9301 str r3, [sp, #4] + dhcp_set_state(dhcp, DHCP_STATE_BOUND); + 8018d1e: 210a movs r1, #10 + netif_set_addr(netif, &dhcp->offered_ip_addr, &sn_mask, &gw_addr); + 8018d20: 466a mov r2, sp + dhcp_set_state(dhcp, DHCP_STATE_BOUND); + 8018d22: f7ff fde1 bl 80188e8 + netif_set_addr(netif, &dhcp->offered_ip_addr, &sn_mask, &gw_addr); + 8018d26: f100 011c add.w r1, r0, #28 + 8018d2a: ab01 add r3, sp, #4 + 8018d2c: 4620 mov r0, r4 + 8018d2e: f002 fcef bl 801b710 +} + 8018d32: b002 add sp, #8 + 8018d34: bd10 pop {r4, pc} + dhcp->t0_timeout = 1; + 8018d36: 2301 movs r3, #1 + 8018d38: 8283 strh r3, [r0, #20] + 8018d3a: e7b9 b.n 8018cb0 + if (first_octet <= 127) { + 8018d3c: f990 201c ldrsb.w r2, [r0, #28] + u8_t first_octet = ip4_addr1(&dhcp->offered_ip_addr); + 8018d40: 7f03 ldrb r3, [r0, #28] + if (first_octet <= 127) { + 8018d42: 2a00 cmp r2, #0 + 8018d44: da06 bge.n 8018d54 + } else if (first_octet >= 192) { + 8018d46: 2bc0 cmp r3, #192 ; 0xc0 + 8018d48: f64f 73ff movw r3, #65535 ; 0xffff + 8018d4c: bf28 it cs + 8018d4e: f06f 437f mvncs.w r3, #4278190080 ; 0xff000000 + 8018d52: e7db b.n 8018d0c + 8018d54: 23ff movs r3, #255 ; 0xff + 8018d56: e7d9 b.n 8018d0c + 8018d58: 08039d4c .word 0x08039d4c + 8018d5c: 08039f3b .word 0x08039f3b + 8018d60: 08035999 .word 0x08035999 + 8018d64: 08039f54 .word 0x08039f54 + +08018d68 : +{ + 8018d68: b538 push {r3, r4, r5, lr} + if (dhcp_pcb_refcount == 0) { + 8018d6a: 4d15 ldr r5, [pc, #84] ; (8018dc0 ) + 8018d6c: 782b ldrb r3, [r5, #0] + 8018d6e: b9f3 cbnz r3, 8018dae + LWIP_ASSERT("dhcp_inc_pcb_refcount(): memory leak", dhcp_pcb == NULL); + 8018d70: 4c14 ldr r4, [pc, #80] ; (8018dc4 ) + 8018d72: 6823 ldr r3, [r4, #0] + 8018d74: b12b cbz r3, 8018d82 + 8018d76: 4b14 ldr r3, [pc, #80] ; (8018dc8 ) + 8018d78: 22e5 movs r2, #229 ; 0xe5 + 8018d7a: 4914 ldr r1, [pc, #80] ; (8018dcc ) + 8018d7c: 4814 ldr r0, [pc, #80] ; (8018dd0 ) + 8018d7e: f01b fce9 bl 8034754 + dhcp_pcb = udp_new(); + 8018d82: f006 fed5 bl 801fb30 + 8018d86: 6020 str r0, [r4, #0] + if (dhcp_pcb == NULL) { + 8018d88: b1b0 cbz r0, 8018db8 + ip_set_option(dhcp_pcb, SOF_BROADCAST); + 8018d8a: 7a42 ldrb r2, [r0, #9] + udp_bind(dhcp_pcb, IP4_ADDR_ANY, LWIP_IANA_PORT_DHCP_CLIENT); + 8018d8c: 4911 ldr r1, [pc, #68] ; (8018dd4 ) + ip_set_option(dhcp_pcb, SOF_BROADCAST); + 8018d8e: f042 0220 orr.w r2, r2, #32 + 8018d92: 7242 strb r2, [r0, #9] + udp_bind(dhcp_pcb, IP4_ADDR_ANY, LWIP_IANA_PORT_DHCP_CLIENT); + 8018d94: 2244 movs r2, #68 ; 0x44 + 8018d96: f006 fd1f bl 801f7d8 + udp_connect(dhcp_pcb, IP4_ADDR_ANY, LWIP_IANA_PORT_DHCP_SERVER); + 8018d9a: 2243 movs r2, #67 ; 0x43 + 8018d9c: 490d ldr r1, [pc, #52] ; (8018dd4 ) + 8018d9e: 6820 ldr r0, [r4, #0] + 8018da0: f006 fe52 bl 801fa48 + udp_recv(dhcp_pcb, dhcp_recv, NULL); + 8018da4: 2200 movs r2, #0 + 8018da6: 490c ldr r1, [pc, #48] ; (8018dd8 ) + 8018da8: 6820 ldr r0, [r4, #0] + 8018daa: f006 fe89 bl 801fac0 + dhcp_pcb_refcount++; + 8018dae: 782b ldrb r3, [r5, #0] + return ERR_OK; + 8018db0: 2000 movs r0, #0 + dhcp_pcb_refcount++; + 8018db2: 3301 adds r3, #1 + 8018db4: 702b strb r3, [r5, #0] +} + 8018db6: bd38 pop {r3, r4, r5, pc} + return ERR_MEM; + 8018db8: f04f 30ff mov.w r0, #4294967295 + 8018dbc: e7fb b.n 8018db6 + 8018dbe: bf00 nop + 8018dc0: 2001ae10 .word 0x2001ae10 + 8018dc4: 2001ae0c .word 0x2001ae0c + 8018dc8: 08039d4c .word 0x08039d4c + 8018dcc: 08039f6c .word 0x08039f6c + 8018dd0: 08035999 .word 0x08035999 + 8018dd4: 0803a528 .word 0x0803a528 + 8018dd8: 080190e9 .word 0x080190e9 + +08018ddc : +{ + 8018ddc: b538 push {r3, r4, r5, lr} + LWIP_ASSERT("dhcp_pcb_refcount(): refcount error", (dhcp_pcb_refcount > 0)); + 8018dde: 4d0a ldr r5, [pc, #40] ; (8018e08 ) + 8018de0: 782b ldrb r3, [r5, #0] + 8018de2: b92b cbnz r3, 8018df0 + 8018de4: 4b09 ldr r3, [pc, #36] ; (8018e0c ) + 8018de6: 22ff movs r2, #255 ; 0xff + 8018de8: 4909 ldr r1, [pc, #36] ; (8018e10 ) + 8018dea: 480a ldr r0, [pc, #40] ; (8018e14 ) + 8018dec: f01b fcb2 bl 8034754 + dhcp_pcb_refcount--; + 8018df0: 782c ldrb r4, [r5, #0] + 8018df2: 3c01 subs r4, #1 + 8018df4: b2e4 uxtb r4, r4 + 8018df6: 702c strb r4, [r5, #0] + if (dhcp_pcb_refcount == 0) { + 8018df8: b924 cbnz r4, 8018e04 + udp_remove(dhcp_pcb); + 8018dfa: 4d07 ldr r5, [pc, #28] ; (8018e18 ) + 8018dfc: 6828 ldr r0, [r5, #0] + 8018dfe: f006 fe71 bl 801fae4 + dhcp_pcb = NULL; + 8018e02: 602c str r4, [r5, #0] +} + 8018e04: bd38 pop {r3, r4, r5, pc} + 8018e06: bf00 nop + 8018e08: 2001ae10 .word 0x2001ae10 + 8018e0c: 08039d4c .word 0x08039d4c + 8018e10: 08039f91 .word 0x08039f91 + 8018e14: 08035999 .word 0x08035999 + 8018e18: 2001ae0c .word 0x2001ae0c + +08018e1c : +dhcp_reboot(struct netif *netif) + 8018e1c: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} + struct dhcp *dhcp = netif_dhcp_data(netif); + 8018e20: 6a44 ldr r4, [r0, #36] ; 0x24 +dhcp_reboot(struct netif *netif) + 8018e22: b086 sub sp, #24 + dhcp_set_state(dhcp, DHCP_STATE_REBOOTING); + 8018e24: 2103 movs r1, #3 +dhcp_reboot(struct netif *netif) + 8018e26: 4606 mov r6, r0 + dhcp_set_state(dhcp, DHCP_STATE_REBOOTING); + 8018e28: 4620 mov r0, r4 + 8018e2a: f7ff fd5d bl 80188e8 + p_out = dhcp_create_msg(netif, dhcp, DHCP_REQUEST, &options_out_len); + 8018e2e: 460a mov r2, r1 + 8018e30: f10d 0316 add.w r3, sp, #22 + 8018e34: 4621 mov r1, r4 + 8018e36: 4630 mov r0, r6 + 8018e38: f7ff fdd4 bl 80189e4 + if (p_out != NULL) { + 8018e3c: 4605 mov r5, r0 + 8018e3e: 2800 cmp r0, #0 + 8018e40: d04a beq.n 8018ed8 + options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN); + 8018e42: 6841 ldr r1, [r0, #4] + 8018e44: 2302 movs r3, #2 + 8018e46: 2239 movs r2, #57 ; 0x39 + 8018e48: f8bd 0016 ldrh.w r0, [sp, #22] + 8018e4c: 31f0 adds r1, #240 ; 0xf0 + 8018e4e: f8df 80c8 ldr.w r8, [pc, #200] ; 8018f18 + 8018e52: 9103 str r1, [sp, #12] + 8018e54: f7ff fd6c bl 8018930 + options_out_len = dhcp_option_short(options_out_len, msg_out->options, DHCP_MAX_MSG_LEN_MIN_REQUIRED); + 8018e58: f44f 7210 mov.w r2, #576 ; 0x240 + 8018e5c: 9903 ldr r1, [sp, #12] + options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN); + 8018e5e: f8ad 0016 strh.w r0, [sp, #22] + options_out_len = dhcp_option_short(options_out_len, msg_out->options, DHCP_MAX_MSG_LEN_MIN_REQUIRED); + 8018e62: f7ff fd49 bl 80188f8 + options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_REQUESTED_IP, 4); + 8018e66: 2304 movs r3, #4 + 8018e68: 2232 movs r2, #50 ; 0x32 + 8018e6a: 9903 ldr r1, [sp, #12] + options_out_len = dhcp_option_short(options_out_len, msg_out->options, DHCP_MAX_MSG_LEN_MIN_REQUIRED); + 8018e6c: f8ad 0016 strh.w r0, [sp, #22] + options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_REQUESTED_IP, 4); + 8018e70: f7ff fd5e bl 8018930 + 8018e74: 4607 mov r7, r0 + 8018e76: f8ad 0016 strh.w r0, [sp, #22] + options_out_len = dhcp_option_long(options_out_len, msg_out->options, lwip_ntohl(ip4_addr_get_u32(&dhcp->offered_ip_addr))); + 8018e7a: 69e0 ldr r0, [r4, #28] + 8018e7c: f7ff fd32 bl 80188e4 + 8018e80: 9903 ldr r1, [sp, #12] + 8018e82: 4602 mov r2, r0 + 8018e84: 4638 mov r0, r7 + 8018e86: f7ff fd89 bl 801899c + options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_PARAMETER_REQUEST_LIST, LWIP_ARRAYSIZE(dhcp_discover_request_options)); + 8018e8a: 9903 ldr r1, [sp, #12] + 8018e8c: 2303 movs r3, #3 + 8018e8e: 2237 movs r2, #55 ; 0x37 + options_out_len = dhcp_option_long(options_out_len, msg_out->options, lwip_ntohl(ip4_addr_get_u32(&dhcp->offered_ip_addr))); + 8018e90: f8ad 0016 strh.w r0, [sp, #22] + options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_PARAMETER_REQUEST_LIST, LWIP_ARRAYSIZE(dhcp_discover_request_options)); + 8018e94: 2703 movs r7, #3 + 8018e96: f7ff fd4b bl 8018930 + 8018e9a: 9903 ldr r1, [sp, #12] + 8018e9c: f8ad 0016 strh.w r0, [sp, #22] + for (i = 0; i < LWIP_ARRAYSIZE(dhcp_discover_request_options); i++) { + 8018ea0: 3f01 subs r7, #1 + options_out_len = dhcp_option_byte(options_out_len, msg_out->options, dhcp_discover_request_options[i]); + 8018ea2: f818 2b01 ldrb.w r2, [r8], #1 + 8018ea6: f8bd 0016 ldrh.w r0, [sp, #22] + 8018eaa: 9103 str r1, [sp, #12] + 8018eac: f7ff fd5e bl 801896c + for (i = 0; i < LWIP_ARRAYSIZE(dhcp_discover_request_options); i++) { + 8018eb0: f017 07ff ands.w r7, r7, #255 ; 0xff + 8018eb4: 9903 ldr r1, [sp, #12] + options_out_len = dhcp_option_byte(options_out_len, msg_out->options, dhcp_discover_request_options[i]); + 8018eb6: f8ad 0016 strh.w r0, [sp, #22] + for (i = 0; i < LWIP_ARRAYSIZE(dhcp_discover_request_options); i++) { + 8018eba: d1f1 bne.n 8018ea0 + dhcp_option_trailer(options_out_len, msg_out->options, p_out); + 8018ebc: 462a mov r2, r5 + 8018ebe: f7ff fe23 bl 8018b08 + result = udp_sendto_if(dhcp_pcb, p_out, IP_ADDR_BROADCAST, LWIP_IANA_PORT_DHCP_SERVER, netif); + 8018ec2: 4813 ldr r0, [pc, #76] ; (8018f10 ) + 8018ec4: 9600 str r6, [sp, #0] + 8018ec6: 2343 movs r3, #67 ; 0x43 + 8018ec8: 4a12 ldr r2, [pc, #72] ; (8018f14 ) + 8018eca: 4629 mov r1, r5 + 8018ecc: 6800 ldr r0, [r0, #0] + 8018ece: f006 fd7b bl 801f9c8 + pbuf_free(p_out); + 8018ed2: 4628 mov r0, r5 + 8018ed4: f002 fe30 bl 801bb38 + if (dhcp->tries < 255) { + 8018ed8: 79a3 ldrb r3, [r4, #6] + 8018eda: 2bff cmp r3, #255 ; 0xff + dhcp->tries++; + 8018edc: bf1c itt ne + 8018ede: 3301 addne r3, #1 + 8018ee0: 71a3 strbne r3, [r4, #6] + msecs = (u16_t)(dhcp->tries < 10 ? dhcp->tries * 1000 : 10 * 1000); + 8018ee2: 79a3 ldrb r3, [r4, #6] + 8018ee4: 2b09 cmp r3, #9 + 8018ee6: bf96 itet ls + 8018ee8: ebc3 1243 rsbls r2, r3, r3, lsl #5 + 8018eec: f242 7310 movwhi r3, #10000 ; 0x2710 + 8018ef0: eb03 0382 addls.w r3, r3, r2, lsl #2 + dhcp->request_timeout = (u16_t)((msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS); + 8018ef4: f44f 72fa mov.w r2, #500 ; 0x1f4 + msecs = (u16_t)(dhcp->tries < 10 ? dhcp->tries * 1000 : 10 * 1000); + 8018ef8: bf9c itt ls + 8018efa: 00db lslls r3, r3, #3 + 8018efc: b29b uxthls r3, r3 + dhcp->request_timeout = (u16_t)((msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS); + 8018efe: f203 13f3 addw r3, r3, #499 ; 0x1f3 + 8018f02: b29b uxth r3, r3 + 8018f04: fbb3 f3f2 udiv r3, r3, r2 + 8018f08: 8123 strh r3, [r4, #8] +} + 8018f0a: b006 add sp, #24 + 8018f0c: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + 8018f10: 2001ae0c .word 0x2001ae0c + 8018f14: 0803a52c .word 0x0803a52c + 8018f18: 0803a0b5 .word 0x0803a0b5 + +08018f1c : +dhcp_handle_ack(struct netif *netif, struct dhcp_msg *msg_in) + 8018f1c: b538 push {r3, r4, r5, lr} + ip4_addr_set_zero(&dhcp->offered_sn_mask); + 8018f1e: 2300 movs r3, #0 + if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_LEASE_TIME)) { + 8018f20: 4d16 ldr r5, [pc, #88] ; (8018f7c ) +dhcp_handle_ack(struct netif *netif, struct dhcp_msg *msg_in) + 8018f22: 4604 mov r4, r0 + ip4_addr_set_zero(&dhcp->offered_gw_addr); + 8018f24: e9c0 3308 strd r3, r3, [r0, #32] + if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_LEASE_TIME)) { + 8018f28: 78eb ldrb r3, [r5, #3] + 8018f2a: b113 cbz r3, 8018f32 + dhcp->offered_t0_lease = dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_LEASE_TIME); + 8018f2c: 4b14 ldr r3, [pc, #80] ; (8018f80 ) + 8018f2e: 68db ldr r3, [r3, #12] + 8018f30: 6283 str r3, [r0, #40] ; 0x28 + if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_T1)) { + 8018f32: 792b ldrb r3, [r5, #4] + 8018f34: b1d3 cbz r3, 8018f6c + dhcp->offered_t1_renew = dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_T1); + 8018f36: 4b12 ldr r3, [pc, #72] ; (8018f80 ) + 8018f38: 691b ldr r3, [r3, #16] + 8018f3a: 62e3 str r3, [r4, #44] ; 0x2c + if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_T2)) { + 8018f3c: 796b ldrb r3, [r5, #5] + 8018f3e: b1c3 cbz r3, 8018f72 + dhcp->offered_t2_rebind = dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_T2); + 8018f40: 4b0f ldr r3, [pc, #60] ; (8018f80 ) + 8018f42: 695b ldr r3, [r3, #20] + 8018f44: 6323 str r3, [r4, #48] ; 0x30 + ip4_addr_copy(dhcp->offered_ip_addr, msg_in->yiaddr); + 8018f46: 690b ldr r3, [r1, #16] + 8018f48: 61e3 str r3, [r4, #28] + if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_SUBNET_MASK)) { + 8018f4a: 79ab ldrb r3, [r5, #6] + 8018f4c: b12b cbz r3, 8018f5a + ip4_addr_set_u32(&dhcp->offered_sn_mask, lwip_htonl(dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_SUBNET_MASK))); + 8018f4e: 4b0c ldr r3, [pc, #48] ; (8018f80 ) + 8018f50: 6998 ldr r0, [r3, #24] + 8018f52: f7ff fcc7 bl 80188e4 + 8018f56: 2301 movs r3, #1 + 8018f58: 6220 str r0, [r4, #32] + dhcp->subnet_mask_given = 1; + 8018f5a: 71e3 strb r3, [r4, #7] + if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_ROUTER)) { + 8018f5c: 79eb ldrb r3, [r5, #7] + 8018f5e: b123 cbz r3, 8018f6a + ip4_addr_set_u32(&dhcp->offered_gw_addr, lwip_htonl(dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_ROUTER))); + 8018f60: 4b07 ldr r3, [pc, #28] ; (8018f80 ) + 8018f62: 69d8 ldr r0, [r3, #28] + 8018f64: f7ff fcbe bl 80188e4 + 8018f68: 6260 str r0, [r4, #36] ; 0x24 +} + 8018f6a: bd38 pop {r3, r4, r5, pc} + dhcp->offered_t1_renew = dhcp->offered_t0_lease / 2; + 8018f6c: 6aa3 ldr r3, [r4, #40] ; 0x28 + 8018f6e: 085b lsrs r3, r3, #1 + 8018f70: e7e3 b.n 8018f3a + dhcp->offered_t2_rebind = (dhcp->offered_t0_lease * 7U) / 8U; + 8018f72: 6aa3 ldr r3, [r4, #40] ; 0x28 + 8018f74: ebc3 03c3 rsb r3, r3, r3, lsl #3 + 8018f78: 08db lsrs r3, r3, #3 + 8018f7a: e7e3 b.n 8018f44 + 8018f7c: 2001ae11 .word 0x2001ae11 + 8018f80: 2001ae1c .word 0x2001ae1c + +08018f84 : +dhcp_select(struct netif *netif) + 8018f84: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} + LWIP_ERROR("dhcp_select: netif != NULL", (netif != NULL), return ERR_ARG;); + 8018f88: 4607 mov r7, r0 +dhcp_select(struct netif *netif) + 8018f8a: b085 sub sp, #20 + LWIP_ERROR("dhcp_select: netif != NULL", (netif != NULL), return ERR_ARG;); + 8018f8c: b948 cbnz r0, 8018fa2 + 8018f8e: 4b4e ldr r3, [pc, #312] ; (80190c8 ) + 8018f90: f240 1277 movw r2, #375 ; 0x177 + 8018f94: 494d ldr r1, [pc, #308] ; (80190cc ) + LWIP_ERROR("dhcp_select: dhcp != NULL", (dhcp != NULL), return ERR_VAL;); + 8018f96: 484e ldr r0, [pc, #312] ; (80190d0 ) +} + 8018f98: b005 add sp, #20 + 8018f9a: e8bd 43f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, lr} + LWIP_ERROR("dhcp_select: dhcp != NULL", (dhcp != NULL), return ERR_VAL;); + 8018f9e: f01b bbd9 b.w 8034754 + dhcp = netif_dhcp_data(netif); + 8018fa2: 6a44 ldr r4, [r0, #36] ; 0x24 + LWIP_ERROR("dhcp_select: dhcp != NULL", (dhcp != NULL), return ERR_VAL;); + 8018fa4: b924 cbnz r4, 8018fb0 + 8018fa6: 4b48 ldr r3, [pc, #288] ; (80190c8 ) + 8018fa8: f240 1279 movw r2, #377 ; 0x179 + 8018fac: 4949 ldr r1, [pc, #292] ; (80190d4 ) + 8018fae: e7f2 b.n 8018f96 + dhcp_set_state(dhcp, DHCP_STATE_REQUESTING); + 8018fb0: 2101 movs r1, #1 + 8018fb2: 4620 mov r0, r4 + 8018fb4: f7ff fc98 bl 80188e8 + p_out = dhcp_create_msg(netif, dhcp, DHCP_REQUEST, &options_out_len); + 8018fb8: 2203 movs r2, #3 + 8018fba: f10d 030e add.w r3, sp, #14 + 8018fbe: 4621 mov r1, r4 + 8018fc0: 4638 mov r0, r7 + 8018fc2: f7ff fd0f bl 80189e4 + if (p_out != NULL) { + 8018fc6: 4606 mov r6, r0 + 8018fc8: 2800 cmp r0, #0 + 8018fca: d05e beq.n 801908a + options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN); + 8018fcc: 6845 ldr r5, [r0, #4] + 8018fce: 2302 movs r3, #2 + 8018fd0: 2239 movs r2, #57 ; 0x39 + 8018fd2: f8bd 000e ldrh.w r0, [sp, #14] + 8018fd6: 35f0 adds r5, #240 ; 0xf0 + 8018fd8: f8df 9108 ldr.w r9, [pc, #264] ; 80190e4 + 8018fdc: 4629 mov r1, r5 + 8018fde: f7ff fca7 bl 8018930 + options_out_len = dhcp_option_short(options_out_len, msg_out->options, DHCP_MAX_MSG_LEN(netif)); + 8018fe2: 8d3a ldrh r2, [r7, #40] ; 0x28 + 8018fe4: 4629 mov r1, r5 + options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN); + 8018fe6: f8ad 000e strh.w r0, [sp, #14] + options_out_len = dhcp_option_short(options_out_len, msg_out->options, DHCP_MAX_MSG_LEN(netif)); + 8018fea: f7ff fc85 bl 80188f8 + options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_REQUESTED_IP, 4); + 8018fee: 2304 movs r3, #4 + 8018ff0: 2232 movs r2, #50 ; 0x32 + 8018ff2: 4629 mov r1, r5 + options_out_len = dhcp_option_short(options_out_len, msg_out->options, DHCP_MAX_MSG_LEN(netif)); + 8018ff4: f8ad 000e strh.w r0, [sp, #14] + options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_REQUESTED_IP, 4); + 8018ff8: f7ff fc9a bl 8018930 + 8018ffc: 4680 mov r8, r0 + 8018ffe: f8ad 000e strh.w r0, [sp, #14] + options_out_len = dhcp_option_long(options_out_len, msg_out->options, lwip_ntohl(ip4_addr_get_u32(&dhcp->offered_ip_addr))); + 8019002: 69e0 ldr r0, [r4, #28] + 8019004: f7ff fc6e bl 80188e4 + 8019008: 4629 mov r1, r5 + 801900a: 4602 mov r2, r0 + 801900c: 4640 mov r0, r8 + 801900e: f7ff fcc5 bl 801899c + options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_SERVER_ID, 4); + 8019012: 2304 movs r3, #4 + 8019014: 2236 movs r2, #54 ; 0x36 + 8019016: 4629 mov r1, r5 + options_out_len = dhcp_option_long(options_out_len, msg_out->options, lwip_ntohl(ip4_addr_get_u32(&dhcp->offered_ip_addr))); + 8019018: f8ad 000e strh.w r0, [sp, #14] + options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_SERVER_ID, 4); + 801901c: f7ff fc88 bl 8018930 + 8019020: 4680 mov r8, r0 + 8019022: f8ad 000e strh.w r0, [sp, #14] + options_out_len = dhcp_option_long(options_out_len, msg_out->options, lwip_ntohl(ip4_addr_get_u32(ip_2_ip4(&dhcp->server_ip_addr)))); + 8019026: 69a0 ldr r0, [r4, #24] + 8019028: f7ff fc5c bl 80188e4 + 801902c: 4629 mov r1, r5 + 801902e: 4602 mov r2, r0 + 8019030: 4640 mov r0, r8 + options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_PARAMETER_REQUEST_LIST, LWIP_ARRAYSIZE(dhcp_discover_request_options)); + 8019032: f04f 0803 mov.w r8, #3 + options_out_len = dhcp_option_long(options_out_len, msg_out->options, lwip_ntohl(ip4_addr_get_u32(ip_2_ip4(&dhcp->server_ip_addr)))); + 8019036: f7ff fcb1 bl 801899c + options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_PARAMETER_REQUEST_LIST, LWIP_ARRAYSIZE(dhcp_discover_request_options)); + 801903a: 2303 movs r3, #3 + 801903c: 2237 movs r2, #55 ; 0x37 + 801903e: 4629 mov r1, r5 + options_out_len = dhcp_option_long(options_out_len, msg_out->options, lwip_ntohl(ip4_addr_get_u32(ip_2_ip4(&dhcp->server_ip_addr)))); + 8019040: f8ad 000e strh.w r0, [sp, #14] + options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_PARAMETER_REQUEST_LIST, LWIP_ARRAYSIZE(dhcp_discover_request_options)); + 8019044: f7ff fc74 bl 8018930 + 8019048: f8ad 000e strh.w r0, [sp, #14] + for (i = 0; i < LWIP_ARRAYSIZE(dhcp_discover_request_options); i++) { + 801904c: f108 38ff add.w r8, r8, #4294967295 + options_out_len = dhcp_option_byte(options_out_len, msg_out->options, dhcp_discover_request_options[i]); + 8019050: f819 2b01 ldrb.w r2, [r9], #1 + 8019054: 4629 mov r1, r5 + 8019056: f8bd 000e ldrh.w r0, [sp, #14] + 801905a: f7ff fc87 bl 801896c + for (i = 0; i < LWIP_ARRAYSIZE(dhcp_discover_request_options); i++) { + 801905e: f018 08ff ands.w r8, r8, #255 ; 0xff + options_out_len = dhcp_option_byte(options_out_len, msg_out->options, dhcp_discover_request_options[i]); + 8019062: f8ad 000e strh.w r0, [sp, #14] + for (i = 0; i < LWIP_ARRAYSIZE(dhcp_discover_request_options); i++) { + 8019066: d1f1 bne.n 801904c + dhcp_option_trailer(options_out_len, msg_out->options, p_out); + 8019068: 4632 mov r2, r6 + 801906a: 4629 mov r1, r5 + 801906c: f7ff fd4c bl 8018b08 + result = udp_sendto_if_src(dhcp_pcb, p_out, IP_ADDR_BROADCAST, LWIP_IANA_PORT_DHCP_SERVER, netif, IP4_ADDR_ANY); + 8019070: 4b19 ldr r3, [pc, #100] ; (80190d8 ) + 8019072: 481a ldr r0, [pc, #104] ; (80190dc ) + 8019074: 4631 mov r1, r6 + 8019076: 4a1a ldr r2, [pc, #104] ; (80190e0 ) + 8019078: e9cd 7300 strd r7, r3, [sp] + 801907c: 2343 movs r3, #67 ; 0x43 + 801907e: 6800 ldr r0, [r0, #0] + 8019080: f006 fc0a bl 801f898 + pbuf_free(p_out); + 8019084: 4630 mov r0, r6 + 8019086: f002 fd57 bl 801bb38 + if (dhcp->tries < 255) { + 801908a: 79a3 ldrb r3, [r4, #6] + 801908c: 2bff cmp r3, #255 ; 0xff + dhcp->tries++; + 801908e: bf1c itt ne + 8019090: 3301 addne r3, #1 + 8019092: 71a3 strbne r3, [r4, #6] + msecs = (u16_t)((dhcp->tries < 6 ? 1 << dhcp->tries : 60) * 1000); + 8019094: 79a2 ldrb r2, [r4, #6] + 8019096: 2a05 cmp r2, #5 + 8019098: bf97 itett ls + 801909a: 2301 movls r3, #1 + 801909c: f64e 2360 movwhi r3, #60000 ; 0xea60 + 80190a0: 4093 lslls r3, r2 + 80190a2: ebc3 1243 rsbls r2, r3, r3, lsl #5 + 80190a6: bf98 it ls + 80190a8: eb03 0382 addls.w r3, r3, r2, lsl #2 + dhcp->request_timeout = (u16_t)((msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS); + 80190ac: f44f 72fa mov.w r2, #500 ; 0x1f4 + msecs = (u16_t)((dhcp->tries < 6 ? 1 << dhcp->tries : 60) * 1000); + 80190b0: bf9c itt ls + 80190b2: 00db lslls r3, r3, #3 + 80190b4: b29b uxthls r3, r3 + dhcp->request_timeout = (u16_t)((msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS); + 80190b6: f203 13f3 addw r3, r3, #499 ; 0x1f3 + 80190ba: b29b uxth r3, r3 + 80190bc: fbb3 f3f2 udiv r3, r3, r2 + 80190c0: 8123 strh r3, [r4, #8] +} + 80190c2: b005 add sp, #20 + 80190c4: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} + 80190c8: 08039d4c .word 0x08039d4c + 80190cc: 08039fb5 .word 0x08039fb5 + 80190d0: 08035999 .word 0x08035999 + 80190d4: 08039fd0 .word 0x08039fd0 + 80190d8: 0803a528 .word 0x0803a528 + 80190dc: 2001ae0c .word 0x2001ae0c + 80190e0: 0803a52c .word 0x0803a52c + 80190e4: 0803a0b5 .word 0x0803a0b5 + +080190e8 : + struct netif *netif = ip_current_input_netif(); + 80190e8: 4b9e ldr r3, [pc, #632] ; (8019364 ) +{ + 80190ea: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + struct netif *netif = ip_current_input_netif(); + 80190ee: 685d ldr r5, [r3, #4] +{ + 80190f0: b089 sub sp, #36 ; 0x24 + struct dhcp *dhcp = netif_dhcp_data(netif); + 80190f2: 6a6b ldr r3, [r5, #36] ; 0x24 +{ + 80190f4: 9201 str r2, [sp, #4] + struct dhcp *dhcp = netif_dhcp_data(netif); + 80190f6: 9302 str r3, [sp, #8] + if ((dhcp == NULL) || (dhcp->pcb_allocated == 0)) { + 80190f8: 9b02 ldr r3, [sp, #8] + struct dhcp_msg *reply_msg = (struct dhcp_msg *)p->payload; + 80190fa: 6852 ldr r2, [r2, #4] + if ((dhcp == NULL) || (dhcp->pcb_allocated == 0)) { + 80190fc: 2b00 cmp r3, #0 + 80190fe: d03c beq.n 801917a + 8019100: 791b ldrb r3, [r3, #4] + 8019102: 2b00 cmp r3, #0 + 8019104: d039 beq.n 801917a + if (p->len < DHCP_MIN_REPLY_LEN) { + 8019106: 9b01 ldr r3, [sp, #4] + 8019108: 895b ldrh r3, [r3, #10] + 801910a: 2b2b cmp r3, #43 ; 0x2b + 801910c: d935 bls.n 801917a + if (reply_msg->op != DHCP_BOOTREPLY) { + 801910e: 7813 ldrb r3, [r2, #0] + 8019110: 2b02 cmp r3, #2 + 8019112: d132 bne.n 801917a + for (i = 0; i < netif->hwaddr_len && i < LWIP_MIN(DHCP_CHADDR_LEN, NETIF_MAX_HWADDR_LEN); i++) { + 8019114: f895 4030 ldrb.w r4, [r5, #48] ; 0x30 + 8019118: f105 0029 add.w r0, r5, #41 ; 0x29 + 801911c: f102 011b add.w r1, r2, #27 + 8019120: 2300 movs r3, #0 + 8019122: b2de uxtb r6, r3 + 8019124: 42b4 cmp r4, r6 + 8019126: d901 bls.n 801912c + 8019128: 2b06 cmp r3, #6 + 801912a: d11f bne.n 801916c + if (lwip_ntohl(reply_msg->xid) != dhcp->xid) { + 801912c: 6850 ldr r0, [r2, #4] + 801912e: f7ff fbd9 bl 80188e4 + 8019132: 9b02 ldr r3, [sp, #8] + 8019134: 681b ldr r3, [r3, #0] + 8019136: 4298 cmp r0, r3 + 8019138: d11f bne.n 801917a + dhcp_clear_all_options(dhcp); + 801913a: f8df b254 ldr.w fp, [pc, #596] ; 8019390 + 801913e: 2300 movs r3, #0 + if (p->len < DHCP_SNAME_OFS) { + 8019140: 9a01 ldr r2, [sp, #4] + dhcp_clear_all_options(dhcp); + 8019142: f8cb 3004 str.w r3, [fp, #4] + if (p->len < DHCP_SNAME_OFS) { + 8019146: 8952 ldrh r2, [r2, #10] + dhcp_clear_all_options(dhcp); + 8019148: f8cb 3000 str.w r3, [fp] + if (p->len < DHCP_SNAME_OFS) { + 801914c: 2a2b cmp r2, #43 ; 0x2b + 801914e: d914 bls.n 801917a + options_idx_max = p->tot_len; + 8019150: 9a01 ldr r2, [sp, #4] + options_idx = DHCP_OPTIONS_OFS; + 8019152: f04f 0af0 mov.w sl, #240 ; 0xf0 + int parse_sname_as_options = 0; + 8019156: 9303 str r3, [sp, #12] + options_idx_max = p->tot_len; + 8019158: f8b2 9008 ldrh.w r9, [r2, #8] + options_idx = DHCP_OPTIONS_OFS; + 801915c: 9e01 ldr r6, [sp, #4] + while ((q != NULL) && (options_idx >= q->len)) { + 801915e: 8973 ldrh r3, [r6, #10] + 8019160: 4553 cmp r3, sl + 8019162: d910 bls.n 8019186 + options = (u8_t *)q->payload; + 8019164: 6873 ldr r3, [r6, #4] + while ((q != NULL) && (offset < offset_max) && (options[offset] != DHCP_OPTION_END)) { + 8019166: 4654 mov r4, sl + options = (u8_t *)q->payload; + 8019168: 9305 str r3, [sp, #20] + while ((q != NULL) && (offset < offset_max) && (options[offset] != DHCP_OPTION_END)) { + 801916a: e0d2 b.n 8019312 + if (netif->hwaddr[i] != reply_msg->chaddr[i]) { + 801916c: f810 7f01 ldrb.w r7, [r0, #1]! + 8019170: 3301 adds r3, #1 + 8019172: f811 6f01 ldrb.w r6, [r1, #1]! + 8019176: 42b7 cmp r7, r6 + 8019178: d0d3 beq.n 8019122 + pbuf_free(p); + 801917a: 9801 ldr r0, [sp, #4] +} + 801917c: b009 add sp, #36 ; 0x24 + 801917e: e8bd 4ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + pbuf_free(p); + 8019182: f002 bcd9 b.w 801bb38 + options_idx = (u16_t)(options_idx - q->len); + 8019186: ebaa 0203 sub.w r2, sl, r3 + q = q->next; + 801918a: 6836 ldr r6, [r6, #0] + options_idx_max = (u16_t)(options_idx_max - q->len); + 801918c: eba9 0303 sub.w r3, r9, r3 + options_idx = (u16_t)(options_idx - q->len); + 8019190: fa1f fa82 uxth.w sl, r2 + options_idx_max = (u16_t)(options_idx_max - q->len); + 8019194: fa1f f983 uxth.w r9, r3 + while ((q != NULL) && (options_idx >= q->len)) { + 8019198: 2e00 cmp r6, #0 + 801919a: d1e0 bne.n 801915e + 801919c: e7ed b.n 801917a + u16_t val_offset = (u16_t)(offset + 2); + 801919e: 1ca3 adds r3, r4, #2 + 80191a0: b29b uxth r3, r3 + if (val_offset < offset) { + 80191a2: 429c cmp r4, r3 + u16_t val_offset = (u16_t)(offset + 2); + 80191a4: 9304 str r3, [sp, #16] + if (val_offset < offset) { + 80191a6: d8e8 bhi.n 801917a + if ((offset + 1) < q->len) { + 80191a8: 1c60 adds r0, r4, #1 + 80191aa: 8973 ldrh r3, [r6, #10] + 80191ac: 4298 cmp r0, r3 + 80191ae: da16 bge.n 80191de + len = options[offset + 1]; + 80191b0: 9b05 ldr r3, [sp, #20] + 80191b2: 4423 add r3, r4 + 80191b4: 785b ldrb r3, [r3, #1] + switch (op) { + 80191b6: 293b cmp r1, #59 ; 0x3b + 80191b8: d854 bhi.n 8019264 + 80191ba: 2932 cmp r1, #50 ; 0x32 + 80191bc: f200 8183 bhi.w 80194c6 + 80191c0: 2901 cmp r1, #1 + 80191c2: d013 beq.n 80191ec + 80191c4: 2903 cmp r1, #3 + 80191c6: d14d bne.n 8019264 + LWIP_ERROR("len >= decode_len", len >= decode_len, return ERR_VAL;); + 80191c8: 2b03 cmp r3, #3 + 80191ca: f200 8165 bhi.w 8019498 + 80191ce: 4b66 ldr r3, [pc, #408] ; (8019368 ) + 80191d0: f240 6233 movw r2, #1587 ; 0x633 + 80191d4: 4965 ldr r1, [pc, #404] ; (801936c ) + LWIP_ERROR("len == 4", len == 4, return ERR_VAL;); + 80191d6: 4866 ldr r0, [pc, #408] ; (8019370 ) + 80191d8: f01b fabc bl 8034754 + 80191dc: e7cd b.n 801917a + len = (q->next != NULL ? ((u8_t *)q->next->payload)[0] : 0); + 80191de: 6833 ldr r3, [r6, #0] + 80191e0: 2b00 cmp r3, #0 + 80191e2: f000 812f beq.w 8019444 + 80191e6: 685b ldr r3, [r3, #4] + 80191e8: 781b ldrb r3, [r3, #0] + 80191ea: e7e4 b.n 80191b6 + LWIP_ERROR("len == 4", len == 4, return ERR_VAL;); + 80191ec: 2b04 cmp r3, #4 + 80191ee: f000 814f beq.w 8019490 + 80191f2: 4b5d ldr r3, [pc, #372] ; (8019368 ) + 80191f4: f240 622e movw r2, #1582 ; 0x62e + LWIP_ERROR("len == 4", len == 4, return ERR_VAL;); + 80191f8: 495e ldr r1, [pc, #376] ; (8019374 ) + 80191fa: e7ec b.n 80191d6 + 80191fc: 2b04 cmp r3, #4 + 80191fe: f000 814f beq.w 80194a0 + 8019202: 4b59 ldr r3, [pc, #356] ; (8019368 ) + 8019204: f240 6241 movw r2, #1601 ; 0x641 + 8019208: e7f6 b.n 80191f8 + LWIP_ERROR("len == 1", len == 1, return ERR_VAL;); + 801920a: 2b01 cmp r3, #1 + 801920c: d004 beq.n 8019218 + 801920e: 4b56 ldr r3, [pc, #344] ; (8019368 ) + 8019210: f240 624f movw r2, #1615 ; 0x64f + LWIP_ERROR("len == 1", len == 1, return ERR_VAL;); + 8019214: 4958 ldr r1, [pc, #352] ; (8019378 ) + 8019216: e7de b.n 80191d6 + LWIP_ERROR("overload in file/sname", options_idx == DHCP_OPTIONS_OFS, return ERR_VAL;); + 8019218: f1ba 0ff0 cmp.w sl, #240 ; 0xf0 + 801921c: f000 8144 beq.w 80194a8 + 8019220: 4b51 ldr r3, [pc, #324] ; (8019368 ) + 8019222: f240 6251 movw r2, #1617 ; 0x651 + 8019226: 4955 ldr r1, [pc, #340] ; (801937c ) + 8019228: e7d5 b.n 80191d6 + LWIP_ERROR("len == 1", len == 1, return ERR_VAL;); + 801922a: 2b01 cmp r3, #1 + 801922c: f000 8144 beq.w 80194b8 + 8019230: 4b4d ldr r3, [pc, #308] ; (8019368 ) + 8019232: f240 6255 movw r2, #1621 ; 0x655 + 8019236: e7ed b.n 8019214 + LWIP_ERROR("len == 4", len == 4, return ERR_VAL;); + 8019238: 2b04 cmp r3, #4 + 801923a: f000 8139 beq.w 80194b0 + 801923e: 4b4a ldr r3, [pc, #296] ; (8019368 ) + 8019240: f240 6259 movw r2, #1625 ; 0x659 + 8019244: e7d8 b.n 80191f8 + LWIP_ERROR("len == 4", len == 4, return ERR_VAL;); + 8019246: 2b04 cmp r3, #4 + 8019248: f000 8136 beq.w 80194b8 + 801924c: 4b46 ldr r3, [pc, #280] ; (8019368 ) + 801924e: f240 625d movw r2, #1629 ; 0x65d + 8019252: e7d1 b.n 80191f8 + LWIP_ERROR("len == 4", len == 4, return ERR_VAL;); + 8019254: 2b04 cmp r3, #4 + 8019256: f000 8132 beq.w 80194be + 801925a: 4b43 ldr r3, [pc, #268] ; (8019368 ) + 801925c: f240 6261 movw r2, #1633 ; 0x661 + 8019260: e7ca b.n 80191f8 + switch (op) { + 8019262: 2300 movs r3, #0 + if (op == DHCP_OPTION_PAD) { + 8019264: b9a1 cbnz r1, 8019290 + offset++; + 8019266: b284 uxth r4, r0 + if (offset >= q->len) { + 8019268: 8973 ldrh r3, [r6, #10] + 801926a: 42a3 cmp r3, r4 + 801926c: d851 bhi.n 8019312 + offset = (u16_t)(offset - q->len); + 801926e: 1ae4 subs r4, r4, r3 + offset_max = (u16_t)(offset_max - q->len); + 8019270: eba9 0303 sub.w r3, r9, r3 + offset = (u16_t)(offset - q->len); + 8019274: b2a4 uxth r4, r4 + offset_max = (u16_t)(offset_max - q->len); + 8019276: fa1f f983 uxth.w r9, r3 + if (offset < offset_max) { + 801927a: 454c cmp r4, r9 + 801927c: f4bf af7d bcs.w 801917a + q = q->next; + 8019280: 6836 ldr r6, [r6, #0] + LWIP_ERROR("next pbuf was null", q != NULL, return ERR_VAL;); + 8019282: 2e00 cmp r6, #0 + 8019284: d143 bne.n 801930e + 8019286: 4b38 ldr r3, [pc, #224] ; (8019368 ) + 8019288: f240 629d movw r2, #1693 ; 0x69d + 801928c: 493c ldr r1, [pc, #240] ; (8019380 ) + 801928e: e7a2 b.n 80191d6 + 8019290: f04f 38ff mov.w r8, #4294967295 + 8019294: 2700 movs r7, #0 + if (offset + len + 2 > 0xFFFF) { + 8019296: 441c add r4, r3 + 8019298: f64f 72fd movw r2, #65533 ; 0xfffd + 801929c: 4294 cmp r4, r2 + 801929e: f73f af6c bgt.w 801917a + offset = (u16_t)(offset + len + 2); + 80192a2: 9a04 ldr r2, [sp, #16] + 80192a4: 4413 add r3, r2 + 80192a6: b29c uxth r4, r3 + if (decode_len > 0) { + 80192a8: 2f00 cmp r7, #0 + 80192aa: d0dd beq.n 8019268 + u32_t value = 0; + 80192ac: 2300 movs r3, #0 + LWIP_ASSERT("check decode_idx", decode_idx >= 0 && decode_idx < DHCP_OPTION_IDX_MAX); + 80192ae: f1b8 0f07 cmp.w r8, #7 + u32_t value = 0; + 80192b2: 9307 str r3, [sp, #28] + LWIP_ASSERT("check decode_idx", decode_idx >= 0 && decode_idx < DHCP_OPTION_IDX_MAX); + 80192b4: d906 bls.n 80192c4 + 80192b6: 4b2c ldr r3, [pc, #176] ; (8019368 ) + 80192b8: f44f 62cf mov.w r2, #1656 ; 0x678 + 80192bc: 4931 ldr r1, [pc, #196] ; (8019384 ) + 80192be: 482c ldr r0, [pc, #176] ; (8019370 ) + 80192c0: f01b fa48 bl 8034754 + if (!dhcp_option_given(dhcp, decode_idx)) { + 80192c4: f81b 3008 ldrb.w r3, [fp, r8] + 80192c8: 2b00 cmp r3, #0 + 80192ca: d1cd bne.n 8019268 + copy_len = LWIP_MIN(decode_len, 4); + 80192cc: b2ba uxth r2, r7 + if (pbuf_copy_partial(q, &value, copy_len, val_offset) != copy_len) { + 80192ce: 9b04 ldr r3, [sp, #16] + 80192d0: a907 add r1, sp, #28 + 80192d2: 4630 mov r0, r6 + 80192d4: 9204 str r2, [sp, #16] + 80192d6: f002 fe6b bl 801bfb0 + 80192da: 9a04 ldr r2, [sp, #16] + 80192dc: 4282 cmp r2, r0 + 80192de: f47f af4c bne.w 801917a + } else if (decode_len == 4) { + 80192e2: 2f04 cmp r7, #4 + 80192e4: d109 bne.n 80192fa + value = lwip_ntohl(value); + 80192e6: 9807 ldr r0, [sp, #28] + 80192e8: f7ff fafc bl 80188e4 + dhcp_got_option(dhcp, decode_idx); + 80192ec: 2301 movs r3, #1 + 80192ee: f80b 3008 strb.w r3, [fp, r8] + dhcp_set_option_value(dhcp, decode_idx, value); + 80192f2: 4b25 ldr r3, [pc, #148] ; (8019388 ) + 80192f4: f843 0028 str.w r0, [r3, r8, lsl #2] + 80192f8: e7b6 b.n 8019268 + LWIP_ERROR("invalid decode_len", decode_len == 1, return ERR_VAL;); + 80192fa: 2f01 cmp r7, #1 + 80192fc: d004 beq.n 8019308 + 80192fe: 4b1a ldr r3, [pc, #104] ; (8019368 ) + 8019300: f44f 62d2 mov.w r2, #1680 ; 0x690 + 8019304: 4921 ldr r1, [pc, #132] ; (801938c ) + 8019306: e766 b.n 80191d6 + value = ((u8_t *)&value)[0]; + 8019308: f89d 001c ldrb.w r0, [sp, #28] + 801930c: e7ee b.n 80192ec + options = (u8_t *)q->payload; + 801930e: 6873 ldr r3, [r6, #4] + 8019310: 9305 str r3, [sp, #20] + while ((q != NULL) && (offset < offset_max) && (options[offset] != DHCP_OPTION_END)) { + 8019312: 454c cmp r4, r9 + 8019314: d204 bcs.n 8019320 + 8019316: 9b05 ldr r3, [sp, #20] + 8019318: 5d19 ldrb r1, [r3, r4] + 801931a: 29ff cmp r1, #255 ; 0xff + 801931c: f47f af3f bne.w 801919e + if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_OVERLOAD)) { + 8019320: f89b 3000 ldrb.w r3, [fp] + 8019324: 2b00 cmp r3, #0 + 8019326: d135 bne.n 8019394 + } else if (parse_sname_as_options) { + 8019328: 9b03 ldr r3, [sp, #12] + 801932a: 2b00 cmp r3, #0 + 801932c: d13b bne.n 80193a6 + if (!dhcp_option_given(dhcp, DHCP_OPTION_IDX_MSG_TYPE)) { + 801932e: f89b 3001 ldrb.w r3, [fp, #1] + 8019332: 2b00 cmp r3, #0 + 8019334: f43f af21 beq.w 801917a + msg_in = (struct dhcp_msg *)p->payload; + 8019338: 9b01 ldr r3, [sp, #4] + msg_type = (u8_t)dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_MSG_TYPE); + 801933a: 4a13 ldr r2, [pc, #76] ; (8019388 ) + msg_in = (struct dhcp_msg *)p->payload; + 801933c: 6859 ldr r1, [r3, #4] + msg_type = (u8_t)dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_MSG_TYPE); + 801933e: 7913 ldrb r3, [r2, #4] + if (msg_type == DHCP_ACK) { + 8019340: 2b05 cmp r3, #5 + 8019342: d14b bne.n 80193dc + if (dhcp->state == DHCP_STATE_REQUESTING) { + 8019344: 9b02 ldr r3, [sp, #8] + 8019346: 795b ldrb r3, [r3, #5] + 8019348: 2b01 cmp r3, #1 + 801934a: d13c bne.n 80193c6 + dhcp_handle_ack(netif, msg_in); + 801934c: 6a68 ldr r0, [r5, #36] ; 0x24 + 801934e: f7ff fde5 bl 8018f1c + if ((netif->flags & NETIF_FLAG_ETHARP) != 0) { + 8019352: f895 3031 ldrb.w r3, [r5, #49] ; 0x31 + dhcp_check(netif); + 8019356: 4628 mov r0, r5 + if ((netif->flags & NETIF_FLAG_ETHARP) != 0) { + 8019358: 071b lsls r3, r3, #28 + 801935a: d53c bpl.n 80193d6 + dhcp_check(netif); + 801935c: f7ff fc6c bl 8018c38 + 8019360: e70b b.n 801917a + 8019362: bf00 nop + 8019364: 2001af34 .word 0x2001af34 + 8019368: 08039d4c .word 0x08039d4c + 801936c: 08039ff3 .word 0x08039ff3 + 8019370: 08035999 .word 0x08035999 + 8019374: 08039fea .word 0x08039fea + 8019378: 0803a005 .word 0x0803a005 + 801937c: 0803a00e .word 0x0803a00e + 8019380: 0803a049 .word 0x0803a049 + 8019384: 0803a025 .word 0x0803a025 + 8019388: 2001ae1c .word 0x2001ae1c + 801938c: 0803a036 .word 0x0803a036 + 8019390: 2001ae11 .word 0x2001ae11 + u32_t overload = dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_OVERLOAD); + 8019394: 4b59 ldr r3, [pc, #356] ; (80194fc ) + dhcp_clear_option(dhcp, DHCP_OPTION_IDX_OVERLOAD); + 8019396: 2200 movs r2, #0 + u32_t overload = dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_OVERLOAD); + 8019398: 681b ldr r3, [r3, #0] + dhcp_clear_option(dhcp, DHCP_OPTION_IDX_OVERLOAD); + 801939a: f88b 2000 strb.w r2, [fp] + if (overload == DHCP_OVERLOAD_FILE) { + 801939e: 2b01 cmp r3, #1 + 80193a0: d00c beq.n 80193bc + } else if (overload == DHCP_OVERLOAD_SNAME) { + 80193a2: 2b02 cmp r3, #2 + 80193a4: d106 bne.n 80193b4 + parse_sname_as_options = 0; + 80193a6: 2300 movs r3, #0 + options_idx_max = DHCP_SNAME_OFS + DHCP_SNAME_LEN; + 80193a8: f04f 096c mov.w r9, #108 ; 0x6c + options_idx = DHCP_SNAME_OFS; + 80193ac: f04f 0a2c mov.w sl, #44 ; 0x2c + parse_sname_as_options = 0; + 80193b0: 9303 str r3, [sp, #12] + 80193b2: e6d3 b.n 801915c + } else if (overload == DHCP_OVERLOAD_SNAME_FILE) { + 80193b4: 2b03 cmp r3, #3 + 80193b6: d1b7 bne.n 8019328 + parse_sname_as_options = 1; + 80193b8: 2301 movs r3, #1 + 80193ba: 9303 str r3, [sp, #12] + options_idx_max = DHCP_FILE_OFS + DHCP_FILE_LEN; + 80193bc: f04f 09ec mov.w r9, #236 ; 0xec + options_idx = DHCP_FILE_OFS; + 80193c0: f04f 0a6c mov.w sl, #108 ; 0x6c + 80193c4: e6ca b.n 801915c + else if ((dhcp->state == DHCP_STATE_REBOOTING) || (dhcp->state == DHCP_STATE_REBINDING) || + 80193c6: 3b03 subs r3, #3 + 80193c8: 2b02 cmp r3, #2 + 80193ca: f63f aed6 bhi.w 801917a + dhcp_handle_ack(netif, msg_in); + 80193ce: 6a68 ldr r0, [r5, #36] ; 0x24 + 80193d0: f7ff fda4 bl 8018f1c + dhcp_bind(netif); + 80193d4: 4628 mov r0, r5 + 80193d6: f7ff fc45 bl 8018c64 + 80193da: e6ce b.n 801917a + else if ((msg_type == DHCP_NAK) && + 80193dc: 2b06 cmp r3, #6 + 80193de: d115 bne.n 801940c + ((dhcp->state == DHCP_STATE_REBOOTING) || (dhcp->state == DHCP_STATE_REQUESTING) || + 80193e0: 9b02 ldr r3, [sp, #8] + 80193e2: 795b ldrb r3, [r3, #5] + else if ((msg_type == DHCP_NAK) && + 80193e4: 1eda subs r2, r3, #3 + 80193e6: 2a02 cmp r2, #2 + 80193e8: d902 bls.n 80193f0 + ((dhcp->state == DHCP_STATE_REBOOTING) || (dhcp->state == DHCP_STATE_REQUESTING) || + 80193ea: 2b01 cmp r3, #1 + 80193ec: f47f aec5 bne.w 801917a + dhcp_set_state(dhcp, DHCP_STATE_BACKING_OFF); + 80193f0: 6a68 ldr r0, [r5, #36] ; 0x24 + 80193f2: 210c movs r1, #12 + 80193f4: f7ff fa78 bl 80188e8 + netif_set_addr(netif, IP4_ADDR_ANY4, IP4_ADDR_ANY4, IP4_ADDR_ANY4); + 80193f8: 4b41 ldr r3, [pc, #260] ; (8019500 ) + 80193fa: 4628 mov r0, r5 + 80193fc: 461a mov r2, r3 + 80193fe: 4619 mov r1, r3 + 8019400: f002 f986 bl 801b710 + dhcp_discover(netif); + 8019404: 4628 mov r0, r5 + 8019406: f7ff fb9f bl 8018b48 +} + 801940a: e6b6 b.n 801917a + else if ((msg_type == DHCP_OFFER) && (dhcp->state == DHCP_STATE_SELECTING)) { + 801940c: 2b02 cmp r3, #2 + 801940e: f47f aeb4 bne.w 801917a + 8019412: 9b02 ldr r3, [sp, #8] + 8019414: 795b ldrb r3, [r3, #5] + 8019416: 2b06 cmp r3, #6 + 8019418: f47f aeaf bne.w 801917a + if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_SERVER_ID)) { + 801941c: f89b 3002 ldrb.w r3, [fp, #2] + struct dhcp *dhcp = netif_dhcp_data(netif); + 8019420: 6a6c ldr r4, [r5, #36] ; 0x24 + if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_SERVER_ID)) { + 8019422: 2b00 cmp r3, #0 + 8019424: f43f aea9 beq.w 801917a + dhcp->request_timeout = 0; /* stop timer */ + 8019428: 9b03 ldr r3, [sp, #12] + ip_addr_set_ip4_u32(&dhcp->server_ip_addr, lwip_htonl(dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_SERVER_ID))); + 801942a: 6890 ldr r0, [r2, #8] + dhcp->request_timeout = 0; /* stop timer */ + 801942c: 8123 strh r3, [r4, #8] + 801942e: 9102 str r1, [sp, #8] + ip_addr_set_ip4_u32(&dhcp->server_ip_addr, lwip_htonl(dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_SERVER_ID))); + 8019430: f7ff fa58 bl 80188e4 + ip4_addr_copy(dhcp->offered_ip_addr, msg_in->yiaddr); + 8019434: 9902 ldr r1, [sp, #8] + ip_addr_set_ip4_u32(&dhcp->server_ip_addr, lwip_htonl(dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_SERVER_ID))); + 8019436: 61a0 str r0, [r4, #24] + dhcp_select(netif); + 8019438: 4628 mov r0, r5 + ip4_addr_copy(dhcp->offered_ip_addr, msg_in->yiaddr); + 801943a: 690b ldr r3, [r1, #16] + 801943c: 61e3 str r3, [r4, #28] + dhcp_select(netif); + 801943e: f7ff fda1 bl 8018f84 + 8019442: e69a b.n 801917a + switch (op) { + 8019444: 293b cmp r1, #59 ; 0x3b + 8019446: f63f af0d bhi.w 8019264 + 801944a: 2932 cmp r1, #50 ; 0x32 + 801944c: d806 bhi.n 801945c + 801944e: 2901 cmp r1, #1 + 8019450: f43f aecf beq.w 80191f2 + 8019454: 2903 cmp r1, #3 + 8019456: f43f aeba beq.w 80191ce + 801945a: e703 b.n 8019264 + 801945c: f1a1 0333 sub.w r3, r1, #51 ; 0x33 + 8019460: 2b08 cmp r3, #8 + 8019462: f63f aefe bhi.w 8019262 + 8019466: a201 add r2, pc, #4 ; (adr r2, 801946c ) + 8019468: f852 f023 ldr.w pc, [r2, r3, lsl #2] + 801946c: 08019203 .word 0x08019203 + 8019470: 0801920f .word 0x0801920f + 8019474: 08019231 .word 0x08019231 + 8019478: 0801923f .word 0x0801923f + 801947c: 08019263 .word 0x08019263 + 8019480: 08019263 .word 0x08019263 + 8019484: 08019263 .word 0x08019263 + 8019488: 0801924d .word 0x0801924d + 801948c: 0801925b .word 0x0801925b + decode_len = len; + 8019490: 461f mov r7, r3 + decode_idx = DHCP_OPTION_IDX_SUBNET_MASK; + 8019492: f04f 0806 mov.w r8, #6 + 8019496: e6fe b.n 8019296 + decode_idx = DHCP_OPTION_IDX_ROUTER; + 8019498: f04f 0807 mov.w r8, #7 + decode_len = 4; /* only copy the first given router */ + 801949c: 2704 movs r7, #4 + 801949e: e6fa b.n 8019296 + decode_len = len; + 80194a0: 461f mov r7, r3 + decode_idx = DHCP_OPTION_IDX_LEASE_TIME; + 80194a2: f04f 0803 mov.w r8, #3 + 80194a6: e6f6 b.n 8019296 + decode_len = len; + 80194a8: 461f mov r7, r3 + decode_idx = DHCP_OPTION_IDX_OVERLOAD; + 80194aa: f04f 0800 mov.w r8, #0 + 80194ae: e6f2 b.n 8019296 + decode_len = len; + 80194b0: 461f mov r7, r3 + decode_idx = DHCP_OPTION_IDX_SERVER_ID; + 80194b2: f04f 0802 mov.w r8, #2 + 80194b6: e6ee b.n 8019296 + decode_len = len; + 80194b8: 461f mov r7, r3 + decode_idx = DHCP_OPTION_IDX_T1; + 80194ba: 4698 mov r8, r3 + 80194bc: e6eb b.n 8019296 + decode_len = len; + 80194be: 461f mov r7, r3 + decode_idx = DHCP_OPTION_IDX_T2; + 80194c0: f04f 0805 mov.w r8, #5 + if (op == DHCP_OPTION_PAD) { + 80194c4: e6e7 b.n 8019296 + switch (op) { + 80194c6: f1a1 0233 sub.w r2, r1, #51 ; 0x33 + 80194ca: 2a08 cmp r2, #8 + 80194cc: f63f aeca bhi.w 8019264 + 80194d0: a701 add r7, pc, #4 ; (adr r7, 80194d8 ) + 80194d2: f857 f022 ldr.w pc, [r7, r2, lsl #2] + 80194d6: bf00 nop + 80194d8: 080191fd .word 0x080191fd + 80194dc: 0801920b .word 0x0801920b + 80194e0: 0801922b .word 0x0801922b + 80194e4: 08019239 .word 0x08019239 + 80194e8: 08019265 .word 0x08019265 + 80194ec: 08019265 .word 0x08019265 + 80194f0: 08019265 .word 0x08019265 + 80194f4: 08019247 .word 0x08019247 + 80194f8: 08019255 .word 0x08019255 + 80194fc: 2001ae1c .word 0x2001ae1c + 8019500: 0803a528 .word 0x0803a528 + +08019504 : +{ + 8019504: b538 push {r3, r4, r5, lr} + struct dhcp *dhcp = netif_dhcp_data(netif); + 8019506: 6a45 ldr r5, [r0, #36] ; 0x24 +{ + 8019508: 4604 mov r4, r0 + if (!dhcp) { + 801950a: b1fd cbz r5, 801954c + switch (dhcp->state) { + 801950c: 796b ldrb r3, [r5, #5] + 801950e: 2b05 cmp r3, #5 + 8019510: d809 bhi.n 8019526 + 8019512: 2b02 cmp r3, #2 + 8019514: d809 bhi.n 801952a + 8019516: b1cb cbz r3, 801954c + dhcp->tries = 0; + 8019518: 2300 movs r3, #0 + dhcp_discover(netif); + 801951a: 4620 mov r0, r4 + dhcp->tries = 0; + 801951c: 71ab strb r3, [r5, #6] +} + 801951e: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} + dhcp_discover(netif); + 8019522: f7ff bb11 b.w 8018b48 + switch (dhcp->state) { + 8019526: 2b0a cmp r3, #10 + 8019528: d106 bne.n 8019538 + dhcp->tries = 0; + 801952a: 2300 movs r3, #0 + dhcp_reboot(netif); + 801952c: 4620 mov r0, r4 + dhcp->tries = 0; + 801952e: 71ab strb r3, [r5, #6] +} + 8019530: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} + dhcp_reboot(netif); + 8019534: f7ff bc72 b.w 8018e1c + LWIP_ASSERT("invalid dhcp->state", dhcp->state <= DHCP_STATE_BACKING_OFF); + 8019538: 2b0c cmp r3, #12 + 801953a: d9ed bls.n 8019518 + 801953c: 4b04 ldr r3, [pc, #16] ; (8019550 ) + 801953e: f240 326d movw r2, #877 ; 0x36d + 8019542: 4904 ldr r1, [pc, #16] ; (8019554 ) + 8019544: 4804 ldr r0, [pc, #16] ; (8019558 ) + 8019546: f01b f905 bl 8034754 + 801954a: e7e5 b.n 8019518 +} + 801954c: bd38 pop {r3, r4, r5, pc} + 801954e: bf00 nop + 8019550: 08039d4c .word 0x08039d4c + 8019554: 0803a080 .word 0x0803a080 + 8019558: 08035999 .word 0x08035999 + +0801955c : +{ + 801955c: b5f0 push {r4, r5, r6, r7, lr} + LWIP_ERROR("netif != NULL", (netif != NULL), return;); + 801955e: 4606 mov r6, r0 +{ + 8019560: b087 sub sp, #28 + LWIP_ERROR("netif != NULL", (netif != NULL), return;); + 8019562: b948 cbnz r0, 8019578 + 8019564: 4b28 ldr r3, [pc, #160] ; (8019608 ) + 8019566: f240 328b movw r2, #907 ; 0x38b + 801956a: 4928 ldr r1, [pc, #160] ; (801960c ) + 801956c: 4828 ldr r0, [pc, #160] ; (8019610 ) +} + 801956e: b007 add sp, #28 + 8019570: e8bd 40f0 ldmia.w sp!, {r4, r5, r6, r7, lr} + LWIP_ERROR("netif != NULL", (netif != NULL), return;); + 8019574: f01b b8ee b.w 8034754 + dhcp = netif_dhcp_data(netif); + 8019578: 6a44 ldr r4, [r0, #36] ; 0x24 + if ((dhcp != NULL) && (dhcp->state == DHCP_STATE_CHECKING)) { + 801957a: 2c00 cmp r4, #0 + 801957c: d041 beq.n 8019602 + 801957e: 7963 ldrb r3, [r4, #5] + 8019580: 2b08 cmp r3, #8 + 8019582: d13e bne.n 8019602 + if (ip4_addr_cmp(addr, &dhcp->offered_ip_addr)) { + 8019584: 680a ldr r2, [r1, #0] + 8019586: 69e3 ldr r3, [r4, #28] + 8019588: 429a cmp r2, r3 + 801958a: d13a bne.n 8019602 + dhcp_set_state(dhcp, DHCP_STATE_BACKING_OFF); + 801958c: 210c movs r1, #12 + 801958e: 4620 mov r0, r4 + 8019590: f7ff f9aa bl 80188e8 + p_out = dhcp_create_msg(netif, dhcp, DHCP_DECLINE, &options_out_len); + 8019594: 2204 movs r2, #4 + 8019596: f10d 0316 add.w r3, sp, #22 + 801959a: 4621 mov r1, r4 + 801959c: 4630 mov r0, r6 + 801959e: f7ff fa21 bl 80189e4 + if (p_out != NULL) { + 80195a2: 4605 mov r5, r0 + 80195a4: b330 cbz r0, 80195f4 + options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_REQUESTED_IP, 4); + 80195a6: 6841 ldr r1, [r0, #4] + 80195a8: 2304 movs r3, #4 + 80195aa: 2232 movs r2, #50 ; 0x32 + 80195ac: f8bd 0016 ldrh.w r0, [sp, #22] + 80195b0: 31f0 adds r1, #240 ; 0xf0 + 80195b2: 9103 str r1, [sp, #12] + 80195b4: f7ff f9bc bl 8018930 + 80195b8: 4607 mov r7, r0 + 80195ba: f8ad 0016 strh.w r0, [sp, #22] + options_out_len = dhcp_option_long(options_out_len, msg_out->options, lwip_ntohl(ip4_addr_get_u32(&dhcp->offered_ip_addr))); + 80195be: 69e0 ldr r0, [r4, #28] + 80195c0: f7ff f990 bl 80188e4 + 80195c4: 9903 ldr r1, [sp, #12] + 80195c6: 4602 mov r2, r0 + 80195c8: 4638 mov r0, r7 + 80195ca: f7ff f9e7 bl 801899c + dhcp_option_trailer(options_out_len, msg_out->options, p_out); + 80195ce: 462a mov r2, r5 + 80195d0: 9903 ldr r1, [sp, #12] + options_out_len = dhcp_option_long(options_out_len, msg_out->options, lwip_ntohl(ip4_addr_get_u32(&dhcp->offered_ip_addr))); + 80195d2: f8ad 0016 strh.w r0, [sp, #22] + dhcp_option_trailer(options_out_len, msg_out->options, p_out); + 80195d6: f7ff fa97 bl 8018b08 + result = udp_sendto_if_src(dhcp_pcb, p_out, IP_ADDR_BROADCAST, LWIP_IANA_PORT_DHCP_SERVER, netif, IP4_ADDR_ANY); + 80195da: 4b0e ldr r3, [pc, #56] ; (8019614 ) + 80195dc: 4629 mov r1, r5 + 80195de: 480e ldr r0, [pc, #56] ; (8019618 ) + 80195e0: 4a0e ldr r2, [pc, #56] ; (801961c ) + 80195e2: e9cd 6300 strd r6, r3, [sp] + 80195e6: 2343 movs r3, #67 ; 0x43 + 80195e8: 6800 ldr r0, [r0, #0] + 80195ea: f006 f955 bl 801f898 + pbuf_free(p_out); + 80195ee: 4628 mov r0, r5 + 80195f0: f002 faa2 bl 801bb38 + if (dhcp->tries < 255) { + 80195f4: 79a3 ldrb r3, [r4, #6] + 80195f6: 2bff cmp r3, #255 ; 0xff + dhcp->tries++; + 80195f8: bf1c itt ne + 80195fa: 3301 addne r3, #1 + 80195fc: 71a3 strbne r3, [r4, #6] + dhcp->request_timeout = (u16_t)((msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS); + 80195fe: 2314 movs r3, #20 + 8019600: 8123 strh r3, [r4, #8] +} + 8019602: b007 add sp, #28 + 8019604: bdf0 pop {r4, r5, r6, r7, pc} + 8019606: bf00 nop + 8019608: 08039d4c .word 0x08039d4c + 801960c: 08039f46 .word 0x08039f46 + 8019610: 08035999 .word 0x08035999 + 8019614: 0803a528 .word 0x0803a528 + 8019618: 2001ae0c .word 0x2001ae0c + 801961c: 0803a52c .word 0x0803a52c + +08019620 : +{ + 8019620: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} + struct dhcp *dhcp = netif_dhcp_data(netif); + 8019624: 6a44 ldr r4, [r0, #36] ; 0x24 +{ + 8019626: b086 sub sp, #24 + 8019628: 4606 mov r6, r0 + dhcp_set_state(dhcp, DHCP_STATE_RENEWING); + 801962a: 2105 movs r1, #5 + 801962c: 4620 mov r0, r4 + p_out = dhcp_create_msg(netif, dhcp, DHCP_REQUEST, &options_out_len); + 801962e: 2203 movs r2, #3 + dhcp_set_state(dhcp, DHCP_STATE_RENEWING); + 8019630: f7ff f95a bl 80188e8 + p_out = dhcp_create_msg(netif, dhcp, DHCP_REQUEST, &options_out_len); + 8019634: f10d 0316 add.w r3, sp, #22 + 8019638: 4621 mov r1, r4 + 801963a: 4630 mov r0, r6 + 801963c: f7ff f9d2 bl 80189e4 + if (p_out != NULL) { + 8019640: 4605 mov r5, r0 + 8019642: 2800 cmp r0, #0 + 8019644: d056 beq.n 80196f4 + options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN); + 8019646: 6841 ldr r1, [r0, #4] + 8019648: 2302 movs r3, #2 + 801964a: 2239 movs r2, #57 ; 0x39 + 801964c: f8bd 0016 ldrh.w r0, [sp, #22] + 8019650: 31f0 adds r1, #240 ; 0xf0 + 8019652: f8df 80ac ldr.w r8, [pc, #172] ; 8019700 + options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_PARAMETER_REQUEST_LIST, LWIP_ARRAYSIZE(dhcp_discover_request_options)); + 8019656: 2703 movs r7, #3 + options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN); + 8019658: 9103 str r1, [sp, #12] + 801965a: f7ff f969 bl 8018930 + options_out_len = dhcp_option_short(options_out_len, msg_out->options, DHCP_MAX_MSG_LEN(netif)); + 801965e: 8d32 ldrh r2, [r6, #40] ; 0x28 + 8019660: 9903 ldr r1, [sp, #12] + options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN); + 8019662: f8ad 0016 strh.w r0, [sp, #22] + options_out_len = dhcp_option_short(options_out_len, msg_out->options, DHCP_MAX_MSG_LEN(netif)); + 8019666: f7ff f947 bl 80188f8 + options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_PARAMETER_REQUEST_LIST, LWIP_ARRAYSIZE(dhcp_discover_request_options)); + 801966a: 9903 ldr r1, [sp, #12] + 801966c: 2303 movs r3, #3 + 801966e: 2237 movs r2, #55 ; 0x37 + options_out_len = dhcp_option_short(options_out_len, msg_out->options, DHCP_MAX_MSG_LEN(netif)); + 8019670: f8ad 0016 strh.w r0, [sp, #22] + options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_PARAMETER_REQUEST_LIST, LWIP_ARRAYSIZE(dhcp_discover_request_options)); + 8019674: f7ff f95c bl 8018930 + 8019678: 9903 ldr r1, [sp, #12] + 801967a: f8ad 0016 strh.w r0, [sp, #22] + for (i = 0; i < LWIP_ARRAYSIZE(dhcp_discover_request_options); i++) { + 801967e: 3f01 subs r7, #1 + options_out_len = dhcp_option_byte(options_out_len, msg_out->options, dhcp_discover_request_options[i]); + 8019680: f818 2b01 ldrb.w r2, [r8], #1 + 8019684: f8bd 0016 ldrh.w r0, [sp, #22] + 8019688: 9103 str r1, [sp, #12] + 801968a: f7ff f96f bl 801896c + for (i = 0; i < LWIP_ARRAYSIZE(dhcp_discover_request_options); i++) { + 801968e: f017 07ff ands.w r7, r7, #255 ; 0xff + 8019692: 9903 ldr r1, [sp, #12] + options_out_len = dhcp_option_byte(options_out_len, msg_out->options, dhcp_discover_request_options[i]); + 8019694: f8ad 0016 strh.w r0, [sp, #22] + for (i = 0; i < LWIP_ARRAYSIZE(dhcp_discover_request_options); i++) { + 8019698: d1f1 bne.n 801967e + dhcp_option_trailer(options_out_len, msg_out->options, p_out); + 801969a: 462a mov r2, r5 + 801969c: f7ff fa34 bl 8018b08 + result = udp_sendto_if(dhcp_pcb, p_out, &dhcp->server_ip_addr, LWIP_IANA_PORT_DHCP_SERVER, netif); + 80196a0: 4816 ldr r0, [pc, #88] ; (80196fc ) + 80196a2: 9600 str r6, [sp, #0] + 80196a4: 2343 movs r3, #67 ; 0x43 + 80196a6: f104 0218 add.w r2, r4, #24 + 80196aa: 4629 mov r1, r5 + 80196ac: 6800 ldr r0, [r0, #0] + 80196ae: f006 f98b bl 801f9c8 + 80196b2: 4606 mov r6, r0 + pbuf_free(p_out); + 80196b4: 4628 mov r0, r5 + 80196b6: f002 fa3f bl 801bb38 + if (dhcp->tries < 255) { + 80196ba: 79a3 ldrb r3, [r4, #6] +} + 80196bc: 4630 mov r0, r6 + if (dhcp->tries < 255) { + 80196be: 2bff cmp r3, #255 ; 0xff + dhcp->tries++; + 80196c0: bf1c itt ne + 80196c2: 3301 addne r3, #1 + 80196c4: 71a3 strbne r3, [r4, #6] + msecs = (u16_t)(dhcp->tries < 10 ? dhcp->tries * 2000 : 20 * 1000); + 80196c6: 79a3 ldrb r3, [r4, #6] + 80196c8: 2b09 cmp r3, #9 + 80196ca: bf96 itet ls + 80196cc: ebc3 1243 rsbls r2, r3, r3, lsl #5 + 80196d0: f644 6320 movwhi r3, #20000 ; 0x4e20 + 80196d4: eb03 0382 addls.w r3, r3, r2, lsl #2 + dhcp->request_timeout = (u16_t)((msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS); + 80196d8: f44f 72fa mov.w r2, #500 ; 0x1f4 + msecs = (u16_t)(dhcp->tries < 10 ? dhcp->tries * 2000 : 20 * 1000); + 80196dc: bf9c itt ls + 80196de: 011b lslls r3, r3, #4 + 80196e0: b29b uxthls r3, r3 + dhcp->request_timeout = (u16_t)((msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS); + 80196e2: f203 13f3 addw r3, r3, #499 ; 0x1f3 + 80196e6: b29b uxth r3, r3 + 80196e8: fbb3 f3f2 udiv r3, r3, r2 + 80196ec: 8123 strh r3, [r4, #8] +} + 80196ee: b006 add sp, #24 + 80196f0: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + result = ERR_MEM; + 80196f4: f04f 36ff mov.w r6, #4294967295 + 80196f8: e7df b.n 80196ba + 80196fa: bf00 nop + 80196fc: 2001ae0c .word 0x2001ae0c + 8019700: 0803a0b5 .word 0x0803a0b5 + +08019704 : + * 0 otherwise + */ +u8_t +dhcp_supplied_address(const struct netif *netif) +{ + if ((netif != NULL) && (netif_dhcp_data(netif) != NULL)) { + 8019704: b150 cbz r0, 801971c + 8019706: 6a40 ldr r0, [r0, #36] ; 0x24 + 8019708: b140 cbz r0, 801971c + struct dhcp *dhcp = netif_dhcp_data(netif); + return (dhcp->state == DHCP_STATE_BOUND) || (dhcp->state == DHCP_STATE_RENEWING) || + 801970a: 7940 ldrb r0, [r0, #5] + 801970c: 280a cmp r0, #10 + 801970e: d006 beq.n 801971e + 8019710: 3804 subs r0, #4 + 8019712: 2801 cmp r0, #1 + 8019714: bf8c ite hi + 8019716: 2000 movhi r0, #0 + 8019718: 2001 movls r0, #1 + 801971a: b2c0 uxtb r0, r0 + (dhcp->state == DHCP_STATE_REBINDING); + } + return 0; +} + 801971c: 4770 bx lr + return (dhcp->state == DHCP_STATE_BOUND) || (dhcp->state == DHCP_STATE_RENEWING) || + 801971e: 2001 movs r0, #1 + 8019720: e7fb b.n 801971a + ... + +08019724 : +{ + 8019724: b5f0 push {r4, r5, r6, r7, lr} + struct dhcp *dhcp = netif_dhcp_data(netif); + 8019726: 6a44 ldr r4, [r0, #36] ; 0x24 +{ + 8019728: b087 sub sp, #28 + 801972a: 4606 mov r6, r0 + if (dhcp == NULL) { + 801972c: 2c00 cmp r4, #0 + 801972e: d050 beq.n 80197d2 + if (dhcp->state == DHCP_STATE_OFF) { + 8019730: 7963 ldrb r3, [r4, #5] + 8019732: 2b00 cmp r3, #0 + 8019734: d04d beq.n 80197d2 + ip_addr_copy(server_ip_addr, dhcp->server_ip_addr); + 8019736: 69a3 ldr r3, [r4, #24] + 8019738: 9305 str r3, [sp, #20] + ip_addr_set_zero_ip4(&dhcp->server_ip_addr); + 801973a: 2300 movs r3, #0 + ip4_addr_set_zero(&dhcp->offered_ip_addr); + 801973c: e9c4 3306 strd r3, r3, [r4, #24] + ip4_addr_set_zero(&dhcp->offered_gw_addr); + 8019740: e9c4 3308 strd r3, r3, [r4, #32] + dhcp->offered_t0_lease = dhcp->offered_t1_renew = dhcp->offered_t2_rebind = 0; + 8019744: e9c4 330b strd r3, r3, [r4, #44] ; 0x2c + 8019748: 62a3 str r3, [r4, #40] ; 0x28 + dhcp->t1_renew_time = dhcp->t2_rebind_time = dhcp->lease_used = dhcp->t0_timeout = 0; + 801974a: 81e3 strh r3, [r4, #14] + 801974c: 6123 str r3, [r4, #16] + 801974e: 82a3 strh r3, [r4, #20] + if (dhcp_supplied_address(netif)) { + 8019750: f7ff ffd8 bl 8019704 + 8019754: b368 cbz r0, 80197b2 + p_out = dhcp_create_msg(netif, dhcp, DHCP_RELEASE, &options_out_len); + 8019756: f10d 0312 add.w r3, sp, #18 + 801975a: 2207 movs r2, #7 + 801975c: 4621 mov r1, r4 + 801975e: 4630 mov r0, r6 + 8019760: f7ff f940 bl 80189e4 + if (p_out != NULL) { + 8019764: 4605 mov r5, r0 + 8019766: b320 cbz r0, 80197b2 + options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_SERVER_ID, 4); + 8019768: 6841 ldr r1, [r0, #4] + 801976a: 2304 movs r3, #4 + 801976c: 2236 movs r2, #54 ; 0x36 + 801976e: f8bd 0012 ldrh.w r0, [sp, #18] + 8019772: 31f0 adds r1, #240 ; 0xf0 + 8019774: 9103 str r1, [sp, #12] + 8019776: f7ff f8db bl 8018930 + 801977a: 4607 mov r7, r0 + 801977c: f8ad 0012 strh.w r0, [sp, #18] + options_out_len = dhcp_option_long(options_out_len, msg_out->options, lwip_ntohl(ip4_addr_get_u32(ip_2_ip4(&server_ip_addr)))); + 8019780: 9805 ldr r0, [sp, #20] + 8019782: f7ff f8af bl 80188e4 + 8019786: 9903 ldr r1, [sp, #12] + 8019788: 4602 mov r2, r0 + 801978a: 4638 mov r0, r7 + 801978c: f7ff f906 bl 801899c + dhcp_option_trailer(options_out_len, msg_out->options, p_out); + 8019790: 462a mov r2, r5 + 8019792: 9903 ldr r1, [sp, #12] + options_out_len = dhcp_option_long(options_out_len, msg_out->options, lwip_ntohl(ip4_addr_get_u32(ip_2_ip4(&server_ip_addr)))); + 8019794: f8ad 0012 strh.w r0, [sp, #18] + dhcp_option_trailer(options_out_len, msg_out->options, p_out); + 8019798: f7ff f9b6 bl 8018b08 + udp_sendto_if(dhcp_pcb, p_out, &server_ip_addr, LWIP_IANA_PORT_DHCP_SERVER, netif); + 801979c: 480e ldr r0, [pc, #56] ; (80197d8 ) + 801979e: 2343 movs r3, #67 ; 0x43 + 80197a0: 9600 str r6, [sp, #0] + 80197a2: aa05 add r2, sp, #20 + 80197a4: 4629 mov r1, r5 + 80197a6: 6800 ldr r0, [r0, #0] + 80197a8: f006 f90e bl 801f9c8 + pbuf_free(p_out); + 80197ac: 4628 mov r0, r5 + 80197ae: f002 f9c3 bl 801bb38 + netif_set_addr(netif, IP4_ADDR_ANY4, IP4_ADDR_ANY4, IP4_ADDR_ANY4); + 80197b2: 4b0a ldr r3, [pc, #40] ; (80197dc ) + 80197b4: 4630 mov r0, r6 + 80197b6: 4619 mov r1, r3 + 80197b8: 461a mov r2, r3 + 80197ba: f001 ffa9 bl 801b710 + dhcp_set_state(dhcp, DHCP_STATE_OFF); + 80197be: 2100 movs r1, #0 + 80197c0: 4620 mov r0, r4 + 80197c2: f7ff f891 bl 80188e8 + if (dhcp->pcb_allocated != 0) { + 80197c6: 7923 ldrb r3, [r4, #4] + 80197c8: b11b cbz r3, 80197d2 + dhcp_dec_pcb_refcount(); /* free DHCP PCB if not needed any more */ + 80197ca: f7ff fb07 bl 8018ddc + dhcp->pcb_allocated = 0; + 80197ce: 2300 movs r3, #0 + 80197d0: 7123 strb r3, [r4, #4] +} + 80197d2: b007 add sp, #28 + 80197d4: bdf0 pop {r4, r5, r6, r7, pc} + 80197d6: bf00 nop + 80197d8: 2001ae0c .word 0x2001ae0c + 80197dc: 0803a528 .word 0x0803a528 + +080197e0 : +{ + 80197e0: b538 push {r3, r4, r5, lr} + LWIP_ERROR("netif != NULL", (netif != NULL), return ERR_ARG;); + 80197e2: 4604 mov r4, r0 + 80197e4: b950 cbnz r0, 80197fc + 80197e6: 4b24 ldr r3, [pc, #144] ; (8019878 ) + 80197e8: f240 22e7 movw r2, #743 ; 0x2e7 + 80197ec: 4923 ldr r1, [pc, #140] ; (801987c ) + LWIP_ERROR("netif is not up, old style port?", netif_is_up(netif), return ERR_ARG;); + 80197ee: 4824 ldr r0, [pc, #144] ; (8019880 ) + 80197f0: f01a ffb0 bl 8034754 + 80197f4: f06f 020f mvn.w r2, #15 +} + 80197f8: 4610 mov r0, r2 + 80197fa: bd38 pop {r3, r4, r5, pc} + LWIP_ERROR("netif is not up, old style port?", netif_is_up(netif), return ERR_ARG;); + 80197fc: f890 3031 ldrb.w r3, [r0, #49] ; 0x31 + 8019800: 07da lsls r2, r3, #31 + 8019802: d404 bmi.n 801980e + 8019804: 4b1c ldr r3, [pc, #112] ; (8019878 ) + 8019806: f44f 723a mov.w r2, #744 ; 0x2e8 + 801980a: 491e ldr r1, [pc, #120] ; (8019884 ) + 801980c: e7ef b.n 80197ee + if (netif->mtu < DHCP_MAX_MSG_LEN_MIN_REQUIRED) { + 801980e: 8d03 ldrh r3, [r0, #40] ; 0x28 + dhcp = netif_dhcp_data(netif); + 8019810: 6a45 ldr r5, [r0, #36] ; 0x24 + if (netif->mtu < DHCP_MAX_MSG_LEN_MIN_REQUIRED) { + 8019812: f5b3 7f10 cmp.w r3, #576 ; 0x240 + 8019816: d202 bcs.n 801981e + return ERR_MEM; + 8019818: f04f 32ff mov.w r2, #4294967295 + 801981c: e7ec b.n 80197f8 + if (dhcp == NULL) { + 801981e: b9dd cbnz r5, 8019858 + dhcp = (struct dhcp *)mem_malloc(sizeof(struct dhcp)); + 8019820: 2034 movs r0, #52 ; 0x34 + 8019822: f001 fdbb bl 801b39c + if (dhcp == NULL) { + 8019826: 4605 mov r5, r0 + 8019828: 2800 cmp r0, #0 + 801982a: d0f5 beq.n 8019818 + netif_set_client_data(netif, LWIP_NETIF_CLIENT_DATA_INDEX_DHCP, dhcp); + 801982c: 6260 str r0, [r4, #36] ; 0x24 + memset(dhcp, 0, sizeof(struct dhcp)); + 801982e: 2234 movs r2, #52 ; 0x34 + 8019830: 2100 movs r1, #0 + 8019832: 4628 mov r0, r5 + 8019834: f01b f8c2 bl 80349bc + if (dhcp_inc_pcb_refcount() != ERR_OK) { /* ensure DHCP PCB is allocated */ + 8019838: f7ff fa96 bl 8018d68 + 801983c: 4602 mov r2, r0 + 801983e: 2800 cmp r0, #0 + 8019840: d1ea bne.n 8019818 + dhcp->pcb_allocated = 1; + 8019842: 2301 movs r3, #1 + 8019844: 712b strb r3, [r5, #4] + if (!netif_is_link_up(netif)) { + 8019846: f894 3031 ldrb.w r3, [r4, #49] ; 0x31 + 801984a: 075b lsls r3, r3, #29 + 801984c: d40a bmi.n 8019864 + dhcp_set_state(dhcp, DHCP_STATE_INIT); + 801984e: 2102 movs r1, #2 + 8019850: 4628 mov r0, r5 + 8019852: f7ff f849 bl 80188e8 + return ERR_OK; + 8019856: e7cf b.n 80197f8 + if (dhcp->pcb_allocated != 0) { + 8019858: 792b ldrb r3, [r5, #4] + 801985a: 2b00 cmp r3, #0 + 801985c: d0e7 beq.n 801982e + dhcp_dec_pcb_refcount(); /* free DHCP PCB if not needed any more */ + 801985e: f7ff fabd bl 8018ddc + 8019862: e7e4 b.n 801982e + result = dhcp_discover(netif); + 8019864: 4620 mov r0, r4 + 8019866: f7ff f96f bl 8018b48 + if (result != ERR_OK) { + 801986a: 4602 mov r2, r0 + 801986c: 2800 cmp r0, #0 + 801986e: d0c3 beq.n 80197f8 + dhcp_release_and_stop(netif); + 8019870: 4620 mov r0, r4 + 8019872: f7ff ff57 bl 8019724 + 8019876: e7cf b.n 8019818 + 8019878: 08039d4c .word 0x08039d4c + 801987c: 08039f46 .word 0x08039f46 + 8019880: 08035999 .word 0x08035999 + 8019884: 0803a094 .word 0x0803a094 + +08019888 : + NETIF_FOREACH(netif) { + 8019888: 4b58 ldr r3, [pc, #352] ; (80199ec ) +{ + 801988a: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + NETIF_FOREACH(netif) { + 801988e: 681d ldr r5, [r3, #0] +{ + 8019890: b087 sub sp, #28 + if ((dhcp->state == DHCP_STATE_REQUESTING) || (dhcp->state == DHCP_STATE_BOUND) || + 8019892: 4e57 ldr r6, [pc, #348] ; (80199f0 ) + result = udp_sendto_if(dhcp_pcb, p_out, IP_ADDR_BROADCAST, LWIP_IANA_PORT_DHCP_SERVER, netif); + 8019894: 4f57 ldr r7, [pc, #348] ; (80199f4 ) + 8019896: f8df 8160 ldr.w r8, [pc, #352] ; 80199f8 + NETIF_FOREACH(netif) { + 801989a: b915 cbnz r5, 80198a2 +} + 801989c: b007 add sp, #28 + 801989e: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + struct dhcp *dhcp = netif_dhcp_data(netif); + 80198a2: 6a6c ldr r4, [r5, #36] ; 0x24 + if ((dhcp != NULL) && (dhcp->state != DHCP_STATE_OFF)) { + 80198a4: b17c cbz r4, 80198c6 + 80198a6: 7963 ldrb r3, [r4, #5] + 80198a8: b16b cbz r3, 80198c6 + if (dhcp->t0_timeout && (++dhcp->lease_used == dhcp->t0_timeout)) { + 80198aa: 8aa1 ldrh r1, [r4, #20] + 80198ac: b169 cbz r1, 80198ca + 80198ae: 8a62 ldrh r2, [r4, #18] + 80198b0: 3201 adds r2, #1 + 80198b2: b292 uxth r2, r2 + 80198b4: 4291 cmp r1, r2 + 80198b6: 8262 strh r2, [r4, #18] + 80198b8: d107 bne.n 80198ca + dhcp_release_and_stop(netif); + 80198ba: 4628 mov r0, r5 + 80198bc: f7ff ff32 bl 8019724 + dhcp_start(netif); + 80198c0: 4628 mov r0, r5 + 80198c2: f7ff ff8d bl 80197e0 + NETIF_FOREACH(netif) { + 80198c6: 682d ldr r5, [r5, #0] + 80198c8: e7e7 b.n 801989a + } else if (dhcp->t2_rebind_time && (dhcp->t2_rebind_time-- == 1)) { + 80198ca: 8a22 ldrh r2, [r4, #16] + 80198cc: 2a00 cmp r2, #0 + 80198ce: d073 beq.n 80199b8 + 80198d0: 1e51 subs r1, r2, #1 + 80198d2: 2a01 cmp r2, #1 + 80198d4: 8221 strh r1, [r4, #16] + 80198d6: d16f bne.n 80199b8 + if ((dhcp->state == DHCP_STATE_REQUESTING) || (dhcp->state == DHCP_STATE_BOUND) || + 80198d8: 3b01 subs r3, #1 + 80198da: b2db uxtb r3, r3 + 80198dc: 2b09 cmp r3, #9 + 80198de: d8f2 bhi.n 80198c6 + 80198e0: fa46 f303 asr.w r3, r6, r3 + 80198e4: 07db lsls r3, r3, #31 + 80198e6: d4ee bmi.n 80198c6 + dhcp_set_state(dhcp, DHCP_STATE_REBINDING); + 80198e8: 2104 movs r1, #4 + 80198ea: 4620 mov r0, r4 + 80198ec: f7fe fffc bl 80188e8 + p_out = dhcp_create_msg(netif, dhcp, DHCP_REQUEST, &options_out_len); + 80198f0: 2203 movs r2, #3 + 80198f2: f10d 0316 add.w r3, sp, #22 + 80198f6: 4621 mov r1, r4 + 80198f8: 4628 mov r0, r5 + 80198fa: f7ff f873 bl 80189e4 + if (p_out != NULL) { + 80198fe: 4681 mov r9, r0 + 8019900: 2800 cmp r0, #0 + 8019902: d038 beq.n 8019976 + options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN); + 8019904: 6841 ldr r1, [r0, #4] + 8019906: 2302 movs r3, #2 + 8019908: 2239 movs r2, #57 ; 0x39 + 801990a: f8bd 0016 ldrh.w r0, [sp, #22] + 801990e: 31f0 adds r1, #240 ; 0xf0 + 8019910: f8df b0e8 ldr.w fp, [pc, #232] ; 80199fc + options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_PARAMETER_REQUEST_LIST, LWIP_ARRAYSIZE(dhcp_discover_request_options)); + 8019914: f04f 0a03 mov.w sl, #3 + options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN); + 8019918: 9103 str r1, [sp, #12] + 801991a: f7ff f809 bl 8018930 + options_out_len = dhcp_option_short(options_out_len, msg_out->options, DHCP_MAX_MSG_LEN(netif)); + 801991e: 8d2a ldrh r2, [r5, #40] ; 0x28 + 8019920: 9903 ldr r1, [sp, #12] + options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN); + 8019922: f8ad 0016 strh.w r0, [sp, #22] + options_out_len = dhcp_option_short(options_out_len, msg_out->options, DHCP_MAX_MSG_LEN(netif)); + 8019926: f7fe ffe7 bl 80188f8 + options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_PARAMETER_REQUEST_LIST, LWIP_ARRAYSIZE(dhcp_discover_request_options)); + 801992a: 9903 ldr r1, [sp, #12] + 801992c: 2303 movs r3, #3 + 801992e: 2237 movs r2, #55 ; 0x37 + options_out_len = dhcp_option_short(options_out_len, msg_out->options, DHCP_MAX_MSG_LEN(netif)); + 8019930: f8ad 0016 strh.w r0, [sp, #22] + options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_PARAMETER_REQUEST_LIST, LWIP_ARRAYSIZE(dhcp_discover_request_options)); + 8019934: f7fe fffc bl 8018930 + 8019938: 9903 ldr r1, [sp, #12] + 801993a: f8ad 0016 strh.w r0, [sp, #22] + for (i = 0; i < LWIP_ARRAYSIZE(dhcp_discover_request_options); i++) { + 801993e: f10a 3aff add.w sl, sl, #4294967295 + options_out_len = dhcp_option_byte(options_out_len, msg_out->options, dhcp_discover_request_options[i]); + 8019942: f81b 2b01 ldrb.w r2, [fp], #1 + 8019946: f8bd 0016 ldrh.w r0, [sp, #22] + 801994a: 9103 str r1, [sp, #12] + 801994c: f7ff f80e bl 801896c + for (i = 0; i < LWIP_ARRAYSIZE(dhcp_discover_request_options); i++) { + 8019950: f01a 0aff ands.w sl, sl, #255 ; 0xff + 8019954: 9903 ldr r1, [sp, #12] + options_out_len = dhcp_option_byte(options_out_len, msg_out->options, dhcp_discover_request_options[i]); + 8019956: f8ad 0016 strh.w r0, [sp, #22] + for (i = 0; i < LWIP_ARRAYSIZE(dhcp_discover_request_options); i++) { + 801995a: d1f0 bne.n 801993e + dhcp_option_trailer(options_out_len, msg_out->options, p_out); + 801995c: 464a mov r2, r9 + 801995e: f7ff f8d3 bl 8018b08 + result = udp_sendto_if(dhcp_pcb, p_out, IP_ADDR_BROADCAST, LWIP_IANA_PORT_DHCP_SERVER, netif); + 8019962: 2343 movs r3, #67 ; 0x43 + 8019964: 4642 mov r2, r8 + 8019966: 4649 mov r1, r9 + 8019968: 6838 ldr r0, [r7, #0] + 801996a: 9500 str r5, [sp, #0] + 801996c: f006 f82c bl 801f9c8 + pbuf_free(p_out); + 8019970: 4648 mov r0, r9 + 8019972: f002 f8e1 bl 801bb38 + if (dhcp->tries < 255) { + 8019976: 79a3 ldrb r3, [r4, #6] + 8019978: 2bff cmp r3, #255 ; 0xff + dhcp->tries++; + 801997a: bf1c itt ne + 801997c: 3301 addne r3, #1 + 801997e: 71a3 strbne r3, [r4, #6] + msecs = (u16_t)(dhcp->tries < 10 ? dhcp->tries * 1000 : 10 * 1000); + 8019980: 79a3 ldrb r3, [r4, #6] + 8019982: 2b09 cmp r3, #9 + 8019984: bf96 itet ls + 8019986: ebc3 1243 rsbls r2, r3, r3, lsl #5 + 801998a: f242 7310 movwhi r3, #10000 ; 0x2710 + 801998e: eb03 0382 addls.w r3, r3, r2, lsl #2 + dhcp->request_timeout = (u16_t)((msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS); + 8019992: f44f 72fa mov.w r2, #500 ; 0x1f4 + msecs = (u16_t)(dhcp->tries < 10 ? dhcp->tries * 1000 : 10 * 1000); + 8019996: bf9c itt ls + 8019998: 00db lslls r3, r3, #3 + 801999a: b29b uxthls r3, r3 + dhcp->request_timeout = (u16_t)((msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS); + 801999c: f203 13f3 addw r3, r3, #499 ; 0x1f3 + 80199a0: b29b uxth r3, r3 + 80199a2: fbb3 f3f2 udiv r3, r3, r2 + if (((dhcp->t0_timeout - dhcp->lease_used) / 2) >= ((60 + DHCP_COARSE_TIMER_SECS / 2) / DHCP_COARSE_TIMER_SECS)) { + 80199a6: 8a62 ldrh r2, [r4, #18] + dhcp->request_timeout = (u16_t)((msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS); + 80199a8: 8123 strh r3, [r4, #8] + if (((dhcp->t0_timeout - dhcp->lease_used) / 2) >= ((60 + DHCP_COARSE_TIMER_SECS / 2) / DHCP_COARSE_TIMER_SECS)) { + 80199aa: 8aa3 ldrh r3, [r4, #20] + 80199ac: 1a9b subs r3, r3, r2 + 80199ae: 2b01 cmp r3, #1 + 80199b0: dd89 ble.n 80198c6 + dhcp->t2_rebind_time = (u16_t)((dhcp->t0_timeout - dhcp->lease_used) / 2); + 80199b2: 105b asrs r3, r3, #1 + 80199b4: 8223 strh r3, [r4, #16] + 80199b6: e786 b.n 80198c6 + } else if (dhcp->t1_renew_time && (dhcp->t1_renew_time-- == 1)) { + 80199b8: 89e2 ldrh r2, [r4, #14] + 80199ba: 2a00 cmp r2, #0 + 80199bc: d083 beq.n 80198c6 + 80199be: 1e51 subs r1, r2, #1 + 80199c0: 2a01 cmp r2, #1 + 80199c2: 81e1 strh r1, [r4, #14] + 80199c4: f47f af7f bne.w 80198c6 + if ((dhcp->state == DHCP_STATE_REQUESTING) || (dhcp->state == DHCP_STATE_BOUND) || + 80199c8: f003 02fb and.w r2, r3, #251 ; 0xfb + 80199cc: 2a01 cmp r2, #1 + 80199ce: d002 beq.n 80199d6 + 80199d0: 2b0a cmp r3, #10 + 80199d2: f47f af78 bne.w 80198c6 + dhcp_renew(netif); + 80199d6: 4628 mov r0, r5 + 80199d8: f7ff fe22 bl 8019620 + if (((dhcp->t2_timeout - dhcp->lease_used) / 2) >= ((60 + DHCP_COARSE_TIMER_SECS / 2) / DHCP_COARSE_TIMER_SECS)) { + 80199dc: 89a3 ldrh r3, [r4, #12] + 80199de: 8a62 ldrh r2, [r4, #18] + 80199e0: 1a9b subs r3, r3, r2 + 80199e2: 2b01 cmp r3, #1 + dhcp->t1_renew_time = (u16_t)((dhcp->t2_timeout - dhcp->lease_used) / 2); + 80199e4: bfc4 itt gt + 80199e6: 105b asrgt r3, r3, #1 + 80199e8: 81e3 strhgt r3, [r4, #14] + 80199ea: e76c b.n 80198c6 + 80199ec: 2001e69c .word 0x2001e69c + 80199f0: fffffde6 .word 0xfffffde6 + 80199f4: 2001ae0c .word 0x2001ae0c + 80199f8: 0803a52c .word 0x0803a52c + 80199fc: 0803a0b5 .word 0x0803a0b5 + +08019a00 : +{ + 8019a00: b538 push {r3, r4, r5, lr} + NETIF_FOREACH(netif) { + 8019a02: 4b25 ldr r3, [pc, #148] ; (8019a98 ) + dhcp->request_timeout--; + 8019a04: 2500 movs r5, #0 + NETIF_FOREACH(netif) { + 8019a06: 681c ldr r4, [r3, #0] + 8019a08: b904 cbnz r4, 8019a0c +} + 8019a0a: bd38 pop {r3, r4, r5, pc} + struct dhcp *dhcp = netif_dhcp_data(netif); + 8019a0c: 6a63 ldr r3, [r4, #36] ; 0x24 + if (dhcp != NULL) { + 8019a0e: b123 cbz r3, 8019a1a + if (dhcp->request_timeout > 1) { + 8019a10: 891a ldrh r2, [r3, #8] + 8019a12: 2a01 cmp r2, #1 + 8019a14: d903 bls.n 8019a1e + dhcp->request_timeout--; + 8019a16: 3a01 subs r2, #1 + 8019a18: 811a strh r2, [r3, #8] + NETIF_FOREACH(netif) { + 8019a1a: 6824 ldr r4, [r4, #0] + 8019a1c: e7f4 b.n 8019a08 + } else if (dhcp->request_timeout == 1) { + 8019a1e: d1fc bne.n 8019a1a + if ((dhcp->state == DHCP_STATE_BACKING_OFF) || (dhcp->state == DHCP_STATE_SELECTING)) { + 8019a20: 795a ldrb r2, [r3, #5] + dhcp->request_timeout--; + 8019a22: 811d strh r5, [r3, #8] + if ((dhcp->state == DHCP_STATE_BACKING_OFF) || (dhcp->state == DHCP_STATE_SELECTING)) { + 8019a24: 2a0c cmp r2, #12 + 8019a26: d015 beq.n 8019a54 + 8019a28: 3a01 subs r2, #1 + 8019a2a: 2a07 cmp r2, #7 + 8019a2c: d8f5 bhi.n 8019a1a + 8019a2e: a101 add r1, pc, #4 ; (adr r1, 8019a34 ) + 8019a30: f851 f022 ldr.w pc, [r1, r2, lsl #2] + 8019a34: 08019a5d .word 0x08019a5d + 8019a38: 08019a1b .word 0x08019a1b + 8019a3c: 08019a8b .word 0x08019a8b + 8019a40: 08019a1b .word 0x08019a1b + 8019a44: 08019a1b .word 0x08019a1b + 8019a48: 08019a55 .word 0x08019a55 + 8019a4c: 08019a1b .word 0x08019a1b + 8019a50: 08019a77 .word 0x08019a77 + dhcp_discover(netif); + 8019a54: 4620 mov r0, r4 + dhcp_discover(netif); + 8019a56: f7ff f877 bl 8018b48 + 8019a5a: e7de b.n 8019a1a + if (dhcp->tries <= 5) { + 8019a5c: 799b ldrb r3, [r3, #6] + dhcp_select(netif); + 8019a5e: 4620 mov r0, r4 + if (dhcp->tries <= 5) { + 8019a60: 2b05 cmp r3, #5 + 8019a62: d802 bhi.n 8019a6a + dhcp_select(netif); + 8019a64: f7ff fa8e bl 8018f84 + 8019a68: e7d7 b.n 8019a1a + dhcp_release_and_stop(netif); + 8019a6a: f7ff fe5b bl 8019724 + dhcp_start(netif); + 8019a6e: 4620 mov r0, r4 + 8019a70: f7ff feb6 bl 80197e0 + 8019a74: e7d1 b.n 8019a1a + if (dhcp->tries <= 1) { + 8019a76: 799b ldrb r3, [r3, #6] + dhcp_check(netif); + 8019a78: 4620 mov r0, r4 + if (dhcp->tries <= 1) { + 8019a7a: 2b01 cmp r3, #1 + 8019a7c: d802 bhi.n 8019a84 + dhcp_check(netif); + 8019a7e: f7ff f8db bl 8018c38 + 8019a82: e7ca b.n 8019a1a + dhcp_bind(netif); + 8019a84: f7ff f8ee bl 8018c64 + 8019a88: e7c7 b.n 8019a1a + if (dhcp->tries < REBOOT_TRIES) { + 8019a8a: 799b ldrb r3, [r3, #6] + dhcp_reboot(netif); + 8019a8c: 4620 mov r0, r4 + if (dhcp->tries < REBOOT_TRIES) { + 8019a8e: 2b01 cmp r3, #1 + 8019a90: d8e1 bhi.n 8019a56 + dhcp_reboot(netif); + 8019a92: f7ff f9c3 bl 8018e1c + 8019a96: e7c0 b.n 8019a1a + 8019a98: 2001e69c .word 0x2001e69c + +08019a9c : +#endif /* ARP_QUEUEING */ + +/** Clean up ARP table entries */ +static void +etharp_free_entry(int i) +{ + 8019a9c: b570 push {r4, r5, r6, lr} + /* remove from SNMP ARP index tree */ + mib2_remove_arp_entry(arp_table[i].netif, &arp_table[i].ipaddr); + /* and empty packet queue */ + if (arp_table[i].q != NULL) { + 8019a9e: 2618 movs r6, #24 + 8019aa0: 4c07 ldr r4, [pc, #28] ; (8019ac0 ) +{ + 8019aa2: 4605 mov r5, r0 + if (arp_table[i].q != NULL) { + 8019aa4: 4346 muls r6, r0 + 8019aa6: 59a0 ldr r0, [r4, r6] + 8019aa8: b118 cbz r0, 8019ab2 + /* remove all queued packets */ + LWIP_DEBUGF(ETHARP_DEBUG, ("etharp_free_entry: freeing entry %"U16_F", packet queue %p.\n", (u16_t)i, (void *)(arp_table[i].q))); + free_etharp_q(arp_table[i].q); + 8019aaa: f002 f845 bl 801bb38 + arp_table[i].q = NULL; + 8019aae: 2300 movs r3, #0 + 8019ab0: 51a3 str r3, [r4, r6] + } + /* recycle entry for re-use */ + arp_table[i].state = ETHARP_STATE_EMPTY; + 8019ab2: 2318 movs r3, #24 + 8019ab4: fb03 4005 mla r0, r3, r5, r4 + 8019ab8: 2300 movs r3, #0 + 8019aba: 7503 strb r3, [r0, #20] + arp_table[i].ctime = 0; + arp_table[i].netif = NULL; + ip4_addr_set_zero(&arp_table[i].ipaddr); + arp_table[i].ethaddr = ethzero; +#endif /* LWIP_DEBUG */ +} + 8019abc: bd70 pop {r4, r5, r6, pc} + 8019abe: bf00 nop + 8019ac0: 2001ae40 .word 0x2001ae40 + +08019ac4 : + * @return The ARP entry index that matched or is created, ERR_MEM if no + * entry is found or could be recycled. + */ +static s16_t +etharp_find_entry(const ip4_addr_t *ipaddr, u8_t flags, struct netif *netif) +{ + 8019ac4: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8019ac8: f04f 0c00 mov.w ip, #0 + s16_t old_pending = ARP_TABLE_SIZE, old_stable = ARP_TABLE_SIZE; + s16_t empty = ARP_TABLE_SIZE; + s16_t i = 0; + /* oldest entry with packets on queue */ + s16_t old_queue = ARP_TABLE_SIZE; + 8019acc: f04f 0e0a mov.w lr, #10 +{ + 8019ad0: 4606 mov r6, r0 + 8019ad2: 4617 mov r7, r2 + 8019ad4: 4b40 ldr r3, [pc, #256] ; (8019bd8 ) + /* its age */ + u16_t age_queue = 0, age_pending = 0, age_stable = 0; + 8019ad6: 46e1 mov r9, ip + 8019ad8: 46e3 mov fp, ip + s16_t empty = ARP_TABLE_SIZE; + 8019ada: 4674 mov r4, lr + s16_t old_pending = ARP_TABLE_SIZE, old_stable = ARP_TABLE_SIZE; + 8019adc: 4675 mov r5, lr + 8019ade: 46f0 mov r8, lr +{ + 8019ae0: 9101 str r1, [sp, #4] + u16_t age_queue = 0, age_pending = 0, age_stable = 0; + 8019ae2: f8cd c000 str.w ip, [sp] + */ + + for (i = 0; i < ARP_TABLE_SIZE; ++i) { + u8_t state = arp_table[i].state; + /* no empty entry found yet and now we do find one? */ + if ((empty == ARP_TABLE_SIZE) && (state == ETHARP_STATE_EMPTY)) { + 8019ae6: 2c0a cmp r4, #10 + 8019ae8: fa0f f08c sxth.w r0, ip + u8_t state = arp_table[i].state; + 8019aec: f893 a014 ldrb.w sl, [r3, #20] + if ((empty == ARP_TABLE_SIZE) && (state == ETHARP_STATE_EMPTY)) { + 8019af0: d119 bne.n 8019b26 + 8019af2: f1ba 0f00 cmp.w sl, #0 + 8019af6: d05f beq.n 8019bb8 + empty = i; + } else if (state != ETHARP_STATE_EMPTY) { + LWIP_ASSERT("state == ETHARP_STATE_PENDING || state >= ETHARP_STATE_STABLE", + state == ETHARP_STATE_PENDING || state >= ETHARP_STATE_STABLE); + /* if given, does IP address match IP address in ARP entry? */ + if (ipaddr && ip4_addr_cmp(ipaddr, &arp_table[i].ipaddr) + 8019af8: b146 cbz r6, 8019b0c + 8019afa: 6831 ldr r1, [r6, #0] + 8019afc: 685a ldr r2, [r3, #4] + 8019afe: 4291 cmp r1, r2 + 8019b00: d104 bne.n 8019b0c +#if ETHARP_TABLE_MATCH_NETIF + && ((netif == NULL) || (netif == arp_table[i].netif)) + 8019b02: 2f00 cmp r7, #0 + 8019b04: d04b beq.n 8019b9e + 8019b06: 6899 ldr r1, [r3, #8] + 8019b08: 42b9 cmp r1, r7 + 8019b0a: d048 beq.n 8019b9e + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_find_entry: found matching entry %d\n", (int)i)); + /* found exact IP address match, simply bail out */ + return i; + } + /* pending entry? */ + if (state == ETHARP_STATE_PENDING) { + 8019b0c: f1ba 0f01 cmp.w sl, #1 + /* pending with queued packets? */ + if (arp_table[i].q != NULL) { + if (arp_table[i].ctime >= age_queue) { + 8019b10: 8a59 ldrh r1, [r3, #18] + if (state == ETHARP_STATE_PENDING) { + 8019b12: d14c bne.n 8019bae + if (arp_table[i].q != NULL) { + 8019b14: 681a ldr r2, [r3, #0] + 8019b16: 2a00 cmp r2, #0 + 8019b18: d044 beq.n 8019ba4 + if (arp_table[i].ctime >= age_queue) { + 8019b1a: 9a00 ldr r2, [sp, #0] + 8019b1c: 4291 cmp r1, r2 + 8019b1e: d305 bcc.n 8019b2c + 8019b20: 4686 mov lr, r0 + 8019b22: 9100 str r1, [sp, #0] + 8019b24: e002 b.n 8019b2c + } else if (state != ETHARP_STATE_EMPTY) { + 8019b26: f1ba 0f00 cmp.w sl, #0 + 8019b2a: d1e5 bne.n 8019af8 + for (i = 0; i < ARP_TABLE_SIZE; ++i) { + 8019b2c: f10c 0c01 add.w ip, ip, #1 + 8019b30: 3318 adds r3, #24 + 8019b32: f1bc 0f0a cmp.w ip, #10 + 8019b36: d1d6 bne.n 8019ae6 + } + } + /* { we have no match } => try to create a new entry */ + + /* don't create new entry, only search? */ + if (((flags & ETHARP_FLAG_FIND_ONLY) != 0) || + 8019b38: 9b01 ldr r3, [sp, #4] + 8019b3a: 2b01 cmp r3, #1 + 8019b3c: d148 bne.n 8019bd0 + 8019b3e: 2c0a cmp r4, #10 + 8019b40: d111 bne.n 8019b66 + if (empty < ARP_TABLE_SIZE) { + i = empty; + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_find_entry: selecting empty entry %d\n", (int)i)); + } else { + /* 2) found recyclable stable entry? */ + if (old_stable < ARP_TABLE_SIZE) { + 8019b42: 2d0a cmp r5, #10 + 8019b44: d03a beq.n 8019bbc + /* recycle oldest stable*/ + i = old_stable; + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_find_entry: selecting oldest stable entry %d\n", (int)i)); + /* no queued packets should exist on stable entries */ + LWIP_ASSERT("arp_table[i].q == NULL", arp_table[i].q == NULL); + 8019b46: 2318 movs r3, #24 + 8019b48: 4a23 ldr r2, [pc, #140] ; (8019bd8 ) + 8019b4a: 436b muls r3, r5 + 8019b4c: 58d3 ldr r3, [r2, r3] + 8019b4e: b133 cbz r3, 8019b5e + 8019b50: 4b22 ldr r3, [pc, #136] ; (8019bdc ) + 8019b52: f240 126d movw r2, #365 ; 0x16d + 8019b56: 4922 ldr r1, [pc, #136] ; (8019be0 ) + 8019b58: 4822 ldr r0, [pc, #136] ; (8019be4 ) + 8019b5a: f01a fdfb bl 8034754 + return (s16_t)ERR_MEM; + } + + /* { empty or recyclable entry found } */ + LWIP_ASSERT("i < ARP_TABLE_SIZE", i < ARP_TABLE_SIZE); + etharp_free_entry(i); + 8019b5e: 462c mov r4, r5 + 8019b60: 4628 mov r0, r5 + 8019b62: f7ff ff9b bl 8019a9c + } + + LWIP_ASSERT("i < ARP_TABLE_SIZE", i < ARP_TABLE_SIZE); + LWIP_ASSERT("arp_table[i].state == ETHARP_STATE_EMPTY", + 8019b66: 2318 movs r3, #24 + 8019b68: 4a1b ldr r2, [pc, #108] ; (8019bd8 ) + 8019b6a: fb03 2304 mla r3, r3, r4, r2 + 8019b6e: 7d1b ldrb r3, [r3, #20] + 8019b70: b133 cbz r3, 8019b80 + 8019b72: 4b1a ldr r3, [pc, #104] ; (8019bdc ) + 8019b74: f44f 72c2 mov.w r2, #388 ; 0x184 + 8019b78: 491b ldr r1, [pc, #108] ; (8019be8 ) + 8019b7a: 481a ldr r0, [pc, #104] ; (8019be4 ) + 8019b7c: f01a fdea bl 8034754 + arp_table[i].state == ETHARP_STATE_EMPTY); + + /* IP address given? */ + if (ipaddr != NULL) { + 8019b80: b12e cbz r6, 8019b8e + /* set IP address */ + ip4_addr_copy(arp_table[i].ipaddr, *ipaddr); + 8019b82: 4b15 ldr r3, [pc, #84] ; (8019bd8 ) + 8019b84: 2118 movs r1, #24 + 8019b86: 6832 ldr r2, [r6, #0] + 8019b88: fb01 3304 mla r3, r1, r4, r3 + 8019b8c: 605a str r2, [r3, #4] + } + arp_table[i].ctime = 0; + 8019b8e: 4a12 ldr r2, [pc, #72] ; (8019bd8 ) + 8019b90: 2318 movs r3, #24 +#if ETHARP_TABLE_MATCH_NETIF + arp_table[i].netif = netif; +#endif /* ETHARP_TABLE_MATCH_NETIF */ + return (s16_t)i; + 8019b92: 4620 mov r0, r4 + arp_table[i].ctime = 0; + 8019b94: fb03 2304 mla r3, r3, r4, r2 + 8019b98: 2200 movs r2, #0 + arp_table[i].netif = netif; + 8019b9a: 609f str r7, [r3, #8] + arp_table[i].ctime = 0; + 8019b9c: 825a strh r2, [r3, #18] +} + 8019b9e: b003 add sp, #12 + 8019ba0: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + if (arp_table[i].ctime >= age_pending) { + 8019ba4: 4559 cmp r1, fp + 8019ba6: d3c1 bcc.n 8019b2c + 8019ba8: 468b mov fp, r1 + 8019baa: 4680 mov r8, r0 + 8019bac: e7be b.n 8019b2c + if (arp_table[i].ctime >= age_stable) { + 8019bae: 4549 cmp r1, r9 + 8019bb0: d3bc bcc.n 8019b2c + 8019bb2: 4689 mov r9, r1 + 8019bb4: 4605 mov r5, r0 + 8019bb6: e7b9 b.n 8019b2c + 8019bb8: 4604 mov r4, r0 + 8019bba: e7b7 b.n 8019b2c + } else if (old_pending < ARP_TABLE_SIZE) { + 8019bbc: f1b8 0f0a cmp.w r8, #10 + 8019bc0: d104 bne.n 8019bcc + } else if (old_queue < ARP_TABLE_SIZE) { + 8019bc2: f1be 0f0a cmp.w lr, #10 + 8019bc6: d003 beq.n 8019bd0 + 8019bc8: 4675 mov r5, lr + 8019bca: e7c8 b.n 8019b5e + 8019bcc: 4645 mov r5, r8 + 8019bce: e7c6 b.n 8019b5e + return (s16_t)ERR_MEM; + 8019bd0: f04f 30ff mov.w r0, #4294967295 + 8019bd4: e7e3 b.n 8019b9e + 8019bd6: bf00 nop + 8019bd8: 2001ae40 .word 0x2001ae40 + 8019bdc: 0803a0b8 .word 0x0803a0b8 + 8019be0: 0803a140 .word 0x0803a140 + 8019be4: 08035999 .word 0x08035999 + 8019be8: 0803a157 .word 0x0803a157 + +08019bec : +etharp_raw(struct netif *netif, const struct eth_addr *ethsrc_addr, + const struct eth_addr *ethdst_addr, + const struct eth_addr *hwsrc_addr, const ip4_addr_t *ipsrc_addr, + const struct eth_addr *hwdst_addr, const ip4_addr_t *ipdst_addr, + const u16_t opcode) +{ + 8019bec: e92d 47f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, r9, sl, lr} + 8019bf0: f8dd a02c ldr.w sl, [sp, #44] ; 0x2c + 8019bf4: 4688 mov r8, r1 + 8019bf6: 4691 mov r9, r2 + 8019bf8: 461e mov r6, r3 + struct pbuf *p; + err_t result = ERR_OK; + struct etharp_hdr *hdr; + + LWIP_ASSERT("netif != NULL", netif != NULL); + 8019bfa: 4607 mov r7, r0 + 8019bfc: b930 cbnz r0, 8019c0c + 8019bfe: 4b2d ldr r3, [pc, #180] ; (8019cb4 ) + 8019c00: f240 4257 movw r2, #1111 ; 0x457 + 8019c04: 492c ldr r1, [pc, #176] ; (8019cb8 ) + 8019c06: 482d ldr r0, [pc, #180] ; (8019cbc ) + 8019c08: f01a fda4 bl 8034754 + + /* allocate a pbuf for the outgoing ARP request packet */ + p = pbuf_alloc(PBUF_LINK, SIZEOF_ETHARP_HDR, PBUF_RAM); + 8019c0c: f44f 7220 mov.w r2, #640 ; 0x280 + 8019c10: 211c movs r1, #28 + 8019c12: 200e movs r0, #14 + 8019c14: f001 fff8 bl 801bc08 + /* could allocate a pbuf for an ARP request? */ + if (p == NULL) { + 8019c18: 4605 mov r5, r0 + 8019c1a: 2800 cmp r0, #0 + 8019c1c: d047 beq.n 8019cae + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, + ("etharp_raw: could not allocate pbuf for ARP request.\n")); + ETHARP_STATS_INC(etharp.memerr); + return ERR_MEM; + } + LWIP_ASSERT("check that first pbuf can hold struct etharp_hdr", + 8019c1e: 8943 ldrh r3, [r0, #10] + 8019c20: 2b1b cmp r3, #27 + 8019c22: d806 bhi.n 8019c32 + 8019c24: 4b23 ldr r3, [pc, #140] ; (8019cb4 ) + 8019c26: f240 4262 movw r2, #1122 ; 0x462 + 8019c2a: 4925 ldr r1, [pc, #148] ; (8019cc0 ) + 8019c2c: 4823 ldr r0, [pc, #140] ; (8019cbc ) + 8019c2e: f01a fd91 bl 8034754 + (p->len >= SIZEOF_ETHARP_HDR)); + + hdr = (struct etharp_hdr *)p->payload; + 8019c32: 686c ldr r4, [r5, #4] + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_raw: sending raw ARP packet.\n")); + hdr->opcode = lwip_htons(opcode); + 8019c34: f8bd 0034 ldrh.w r0, [sp, #52] ; 0x34 + 8019c38: f7fe fe51 bl 80188de + 8019c3c: 80e0 strh r0, [r4, #6] + + LWIP_ASSERT("netif->hwaddr_len must be the same as ETH_HWADDR_LEN for etharp!", + 8019c3e: f897 3030 ldrb.w r3, [r7, #48] ; 0x30 + 8019c42: 2b06 cmp r3, #6 + 8019c44: d006 beq.n 8019c54 + 8019c46: 4b1b ldr r3, [pc, #108] ; (8019cb4 ) + 8019c48: f240 4269 movw r2, #1129 ; 0x469 + 8019c4c: 491d ldr r1, [pc, #116] ; (8019cc4 ) + 8019c4e: 481b ldr r0, [pc, #108] ; (8019cbc ) + 8019c50: f01a fd80 bl 8034754 + (netif->hwaddr_len == ETH_HWADDR_LEN)); + + /* Write the ARP MAC-Addresses */ + SMEMCPY(&hdr->shwaddr, hwsrc_addr, ETH_HWADDR_LEN); + 8019c54: 6833 ldr r3, [r6, #0] + if (ip4_addr_islinklocal(ipsrc_addr)) { + ethernet_output(netif, p, ethsrc_addr, ðbroadcast, ETHTYPE_ARP); + } else +#endif /* LWIP_AUTOIP */ + { + ethernet_output(netif, p, ethsrc_addr, ethdst_addr, ETHTYPE_ARP); + 8019c56: 4642 mov r2, r8 + 8019c58: 4629 mov r1, r5 + 8019c5a: 4638 mov r0, r7 + SMEMCPY(&hdr->shwaddr, hwsrc_addr, ETH_HWADDR_LEN); + 8019c5c: 60a3 str r3, [r4, #8] + 8019c5e: 88b3 ldrh r3, [r6, #4] + hdr->hwtype = PP_HTONS(LWIP_IANA_HWTYPE_ETHERNET); + 8019c60: 2600 movs r6, #0 + SMEMCPY(&hdr->shwaddr, hwsrc_addr, ETH_HWADDR_LEN); + 8019c62: 81a3 strh r3, [r4, #12] + SMEMCPY(&hdr->dhwaddr, hwdst_addr, ETH_HWADDR_LEN); + 8019c64: f8da 3000 ldr.w r3, [sl] + 8019c68: f8c4 3012 str.w r3, [r4, #18] + 8019c6c: f8ba 3004 ldrh.w r3, [sl, #4] + 8019c70: 82e3 strh r3, [r4, #22] + IPADDR_WORDALIGNED_COPY_FROM_IP4_ADDR_T(&hdr->sipaddr, ipsrc_addr); + 8019c72: 9b0a ldr r3, [sp, #40] ; 0x28 + 8019c74: 681b ldr r3, [r3, #0] + 8019c76: f8c4 300e str.w r3, [r4, #14] + IPADDR_WORDALIGNED_COPY_FROM_IP4_ADDR_T(&hdr->dipaddr, ipdst_addr); + 8019c7a: 9b0c ldr r3, [sp, #48] ; 0x30 + 8019c7c: 681b ldr r3, [r3, #0] + hdr->hwtype = PP_HTONS(LWIP_IANA_HWTYPE_ETHERNET); + 8019c7e: 7026 strb r6, [r4, #0] + IPADDR_WORDALIGNED_COPY_FROM_IP4_ADDR_T(&hdr->dipaddr, ipdst_addr); + 8019c80: 61a3 str r3, [r4, #24] + hdr->hwtype = PP_HTONS(LWIP_IANA_HWTYPE_ETHERNET); + 8019c82: 2301 movs r3, #1 + hdr->proto = PP_HTONS(ETHTYPE_IP); + 8019c84: 70e6 strb r6, [r4, #3] + hdr->hwtype = PP_HTONS(LWIP_IANA_HWTYPE_ETHERNET); + 8019c86: 7063 strb r3, [r4, #1] + hdr->proto = PP_HTONS(ETHTYPE_IP); + 8019c88: 2308 movs r3, #8 + 8019c8a: 70a3 strb r3, [r4, #2] + hdr->hwlen = ETH_HWADDR_LEN; + 8019c8c: 2306 movs r3, #6 + 8019c8e: 7123 strb r3, [r4, #4] + hdr->protolen = sizeof(ip4_addr_t); + 8019c90: 2304 movs r3, #4 + 8019c92: 7163 strb r3, [r4, #5] + ethernet_output(netif, p, ethsrc_addr, ethdst_addr, ETHTYPE_ARP); + 8019c94: f640 0306 movw r3, #2054 ; 0x806 + 8019c98: 9300 str r3, [sp, #0] + 8019c9a: 464b mov r3, r9 + 8019c9c: f000 faf4 bl 801a288 + } + + ETHARP_STATS_INC(etharp.xmit); + /* free ARP query packet */ + pbuf_free(p); + 8019ca0: 4628 mov r0, r5 + 8019ca2: f001 ff49 bl 801bb38 + p = NULL; + /* could not allocate pbuf for ARP request */ + + return result; + 8019ca6: 4630 mov r0, r6 +} + 8019ca8: b002 add sp, #8 + 8019caa: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + return ERR_MEM; + 8019cae: f04f 30ff mov.w r0, #4294967295 + 8019cb2: e7f9 b.n 8019ca8 + 8019cb4: 0803a0b8 .word 0x0803a0b8 + 8019cb8: 08039f46 .word 0x08039f46 + 8019cbc: 08035999 .word 0x08035999 + 8019cc0: 0803a180 .word 0x0803a180 + 8019cc4: 0803a1b1 .word 0x0803a1b1 + +08019cc8 : +{ + 8019cc8: b570 push {r4, r5, r6, lr} + 8019cca: 4606 mov r6, r0 + 8019ccc: 4d07 ldr r5, [pc, #28] ; (8019cec ) + for (i = 0; i < ARP_TABLE_SIZE; ++i) { + 8019cce: 2400 movs r4, #0 + if ((state != ETHARP_STATE_EMPTY) && (arp_table[i].netif == netif)) { + 8019cd0: 7d2b ldrb r3, [r5, #20] + 8019cd2: b12b cbz r3, 8019ce0 + 8019cd4: 68ab ldr r3, [r5, #8] + 8019cd6: 42b3 cmp r3, r6 + 8019cd8: d102 bne.n 8019ce0 + etharp_free_entry(i); + 8019cda: 4620 mov r0, r4 + 8019cdc: f7ff fede bl 8019a9c + for (i = 0; i < ARP_TABLE_SIZE; ++i) { + 8019ce0: 3401 adds r4, #1 + 8019ce2: 3518 adds r5, #24 + 8019ce4: 2c0a cmp r4, #10 + 8019ce6: d1f3 bne.n 8019cd0 +} + 8019ce8: bd70 pop {r4, r5, r6, pc} + 8019cea: bf00 nop + 8019cec: 2001ae40 .word 0x2001ae40 + +08019cf0 : +{ + 8019cf0: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} + 8019cf4: 4607 mov r7, r0 + 8019cf6: b088 sub sp, #32 + LWIP_ERROR("netif != NULL", (netif != NULL), return;); + 8019cf8: 460c mov r4, r1 + 8019cfa: b949 cbnz r1, 8019d10 + 8019cfc: 4b4e ldr r3, [pc, #312] ; (8019e38 ) + 8019cfe: f240 228a movw r2, #650 ; 0x28a + 8019d02: 494e ldr r1, [pc, #312] ; (8019e3c ) + 8019d04: 484e ldr r0, [pc, #312] ; (8019e40 ) +} + 8019d06: b008 add sp, #32 + 8019d08: e8bd 47f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, lr} + LWIP_ERROR("netif != NULL", (netif != NULL), return;); + 8019d0c: f01a bd22 b.w 8034754 + hdr = (struct etharp_hdr *)p->payload; + 8019d10: 6845 ldr r5, [r0, #4] + if ((hdr->hwtype != PP_HTONS(LWIP_IANA_HWTYPE_ETHERNET)) || + 8019d12: 882b ldrh r3, [r5, #0] + 8019d14: f5b3 7f80 cmp.w r3, #256 ; 0x100 + 8019d18: d108 bne.n 8019d2c + 8019d1a: 792b ldrb r3, [r5, #4] + 8019d1c: 2b06 cmp r3, #6 + 8019d1e: d105 bne.n 8019d2c + (hdr->hwlen != ETH_HWADDR_LEN) || + 8019d20: 796b ldrb r3, [r5, #5] + 8019d22: 2b04 cmp r3, #4 + 8019d24: d102 bne.n 8019d2c + (hdr->protolen != sizeof(ip4_addr_t)) || + 8019d26: 886b ldrh r3, [r5, #2] + 8019d28: 2b08 cmp r3, #8 + 8019d2a: d005 beq.n 8019d38 + pbuf_free(p); + 8019d2c: 4638 mov r0, r7 +} + 8019d2e: b008 add sp, #32 + 8019d30: e8bd 47f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, lr} + pbuf_free(p); + 8019d34: f001 bf00 b.w 801bb38 + IPADDR_WORDALIGNED_COPY_TO_IP4_ADDR_T(&sipaddr, &hdr->sipaddr); + 8019d38: f8d5 300e ldr.w r3, [r5, #14] + etharp_update_arp_entry(netif, &sipaddr, &(hdr->shwaddr), + 8019d3c: f105 0808 add.w r8, r5, #8 + if (ip4_addr_isany_val(*netif_ip4_addr(netif))) { + 8019d40: 684e ldr r6, [r1, #4] + IPADDR_WORDALIGNED_COPY_TO_IP4_ADDR_T(&sipaddr, &hdr->sipaddr); + 8019d42: 9307 str r3, [sp, #28] + IPADDR_WORDALIGNED_COPY_TO_IP4_ADDR_T(&dipaddr, &hdr->dipaddr); + 8019d44: 69ab ldr r3, [r5, #24] + if (ip4_addr_isany_val(*netif_ip4_addr(netif))) { + 8019d46: 2e00 cmp r6, #0 + 8019d48: d05c beq.n 8019e04 + etharp_update_arp_entry(netif, &sipaddr, &(hdr->shwaddr), + 8019d4a: 429e cmp r6, r3 + 8019d4c: d159 bne.n 8019e02 + for_us = (u8_t)ip4_addr_cmp(&dipaddr, netif_ip4_addr(netif)); + 8019d4e: 2601 movs r6, #1 + etharp_update_arp_entry(netif, &sipaddr, &(hdr->shwaddr), + 8019d50: 46b2 mov sl, r6 + LWIP_ASSERT("netif->hwaddr_len == ETH_HWADDR_LEN", netif->hwaddr_len == ETH_HWADDR_LEN); + 8019d52: f894 3030 ldrb.w r3, [r4, #48] ; 0x30 + 8019d56: 2b06 cmp r3, #6 + 8019d58: d006 beq.n 8019d68 + 8019d5a: 4b37 ldr r3, [pc, #220] ; (8019e38 ) + 8019d5c: f240 12a9 movw r2, #425 ; 0x1a9 + 8019d60: 4938 ldr r1, [pc, #224] ; (8019e44 ) + 8019d62: 4837 ldr r0, [pc, #220] ; (8019e40 ) + 8019d64: f01a fcf6 bl 8034754 + if (ip4_addr_isany(ipaddr) || + 8019d68: 9807 ldr r0, [sp, #28] + 8019d6a: 2800 cmp r0, #0 + 8019d6c: d03c beq.n 8019de8 + ip4_addr_isbroadcast(ipaddr, netif) || + 8019d6e: 4621 mov r1, r4 + 8019d70: f000 fd53 bl 801a81a + if (ip4_addr_isany(ipaddr) || + 8019d74: 4681 mov r9, r0 + 8019d76: bbb8 cbnz r0, 8019de8 + ip4_addr_ismulticast(ipaddr)) { + 8019d78: 9b07 ldr r3, [sp, #28] + 8019d7a: f003 03f0 and.w r3, r3, #240 ; 0xf0 + ip4_addr_isbroadcast(ipaddr, netif) || + 8019d7e: 2be0 cmp r3, #224 ; 0xe0 + 8019d80: d032 beq.n 8019de8 + i = etharp_find_entry(ipaddr, flags, netif); + 8019d82: 4622 mov r2, r4 + 8019d84: 4651 mov r1, sl + 8019d86: a807 add r0, sp, #28 + 8019d88: f7ff fe9c bl 8019ac4 + if (i < 0) { + 8019d8c: 1e03 subs r3, r0, #0 + 8019d8e: db2b blt.n 8019de8 + arp_table[i].state = ETHARP_STATE_STABLE; + 8019d90: 2018 movs r0, #24 + 8019d92: 4a2d ldr r2, [pc, #180] ; (8019e48 ) + 8019d94: f04f 0e02 mov.w lr, #2 + 8019d98: fb00 fc03 mul.w ip, r0, r3 + 8019d9c: eb02 010c add.w r1, r2, ip + 8019da0: f881 e014 strb.w lr, [r1, #20] + SMEMCPY(&arp_table[i].ethaddr, ethaddr, ETH_HWADDR_LEN); + 8019da4: f04f 0e0c mov.w lr, #12 + arp_table[i].netif = netif; + 8019da8: 608c str r4, [r1, #8] + SMEMCPY(&arp_table[i].ethaddr, ethaddr, ETH_HWADDR_LEN); + 8019daa: fb13 e300 smlabb r3, r3, r0, lr + 8019dae: 68a8 ldr r0, [r5, #8] + 8019db0: eb02 0e03 add.w lr, r2, r3 + 8019db4: 50d0 str r0, [r2, r3] + 8019db6: f8b8 3004 ldrh.w r3, [r8, #4] + 8019dba: f8ae 3004 strh.w r3, [lr, #4] + arp_table[i].ctime = 0; + 8019dbe: f8a1 9012 strh.w r9, [r1, #18] + if (arp_table[i].q != NULL) { + 8019dc2: f852 100c ldr.w r1, [r2, ip] + 8019dc6: b179 cbz r1, 8019de8 + ethernet_output(netif, p, (struct eth_addr *)(netif->hwaddr), ethaddr, ETHTYPE_IP); + 8019dc8: f44f 6300 mov.w r3, #2048 ; 0x800 + arp_table[i].q = NULL; + 8019dcc: f842 900c str.w r9, [r2, ip] + ethernet_output(netif, p, (struct eth_addr *)(netif->hwaddr), ethaddr, ETHTYPE_IP); + 8019dd0: 4620 mov r0, r4 + 8019dd2: f104 022a add.w r2, r4, #42 ; 0x2a + 8019dd6: 9300 str r3, [sp, #0] + 8019dd8: 4643 mov r3, r8 + 8019dda: 9105 str r1, [sp, #20] + 8019ddc: f000 fa54 bl 801a288 + pbuf_free(p); + 8019de0: 9905 ldr r1, [sp, #20] + 8019de2: 4608 mov r0, r1 + 8019de4: f001 fea8 bl 801bb38 + switch (hdr->opcode) { + 8019de8: 88eb ldrh r3, [r5, #6] + 8019dea: f5b3 7f80 cmp.w r3, #256 ; 0x100 + 8019dee: d00c beq.n 8019e0a + 8019df0: f5b3 7f00 cmp.w r3, #512 ; 0x200 + 8019df4: d01a beq.n 8019e2c + pbuf_free(p); + 8019df6: 4638 mov r0, r7 + 8019df8: f001 fe9e bl 801bb38 +} + 8019dfc: b008 add sp, #32 + 8019dfe: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + 8019e02: 2600 movs r6, #0 + etharp_update_arp_entry(netif, &sipaddr, &(hdr->shwaddr), + 8019e04: f04f 0a02 mov.w sl, #2 + 8019e08: e7a3 b.n 8019d52 + if (for_us) { + 8019e0a: 2e00 cmp r6, #0 + 8019e0c: d0f3 beq.n 8019df6 + etharp_raw(netif, + 8019e0e: 2202 movs r2, #2 + (struct eth_addr *)netif->hwaddr, &hdr->shwaddr, + 8019e10: f104 032a add.w r3, r4, #42 ; 0x2a + etharp_raw(netif, + 8019e14: 4620 mov r0, r4 + 8019e16: 9203 str r2, [sp, #12] + 8019e18: aa07 add r2, sp, #28 + 8019e1a: 4619 mov r1, r3 + 8019e1c: e9cd 8201 strd r8, r2, [sp, #4] + (struct eth_addr *)netif->hwaddr, netif_ip4_addr(netif), + 8019e20: 1d22 adds r2, r4, #4 + etharp_raw(netif, + 8019e22: 9200 str r2, [sp, #0] + 8019e24: 4642 mov r2, r8 + 8019e26: f7ff fee1 bl 8019bec + 8019e2a: e7e4 b.n 8019df6 + dhcp_arp_reply(netif, &sipaddr); + 8019e2c: a907 add r1, sp, #28 + 8019e2e: 4620 mov r0, r4 + 8019e30: f7ff fb94 bl 801955c + break; + 8019e34: e7df b.n 8019df6 + 8019e36: bf00 nop + 8019e38: 0803a0b8 .word 0x0803a0b8 + 8019e3c: 08039f46 .word 0x08039f46 + 8019e40: 08035999 .word 0x08035999 + 8019e44: 0803a211 .word 0x0803a211 + 8019e48: 2001ae40 .word 0x2001ae40 + +08019e4c : + * ERR_MEM if the ARP packet couldn't be allocated + * any other err_t on failure + */ +err_t +etharp_request(struct netif *netif, const ip4_addr_t *ipaddr) +{ + 8019e4c: b51f push {r0, r1, r2, r3, r4, lr} + 8019e4e: 4602 mov r2, r0 + return etharp_raw(netif, (struct eth_addr *)netif->hwaddr, hw_dst_addr, + 8019e50: 2401 movs r4, #1 + 8019e52: f100 032a add.w r3, r0, #42 ; 0x2a + (struct eth_addr *)netif->hwaddr, netif_ip4_addr(netif), ðzero, + 8019e56: 3204 adds r2, #4 + return etharp_raw(netif, (struct eth_addr *)netif->hwaddr, hw_dst_addr, + 8019e58: e9cd 1402 strd r1, r4, [sp, #8] + 8019e5c: 4904 ldr r1, [pc, #16] ; (8019e70 ) + 8019e5e: 9200 str r2, [sp, #0] + 8019e60: 9101 str r1, [sp, #4] + 8019e62: 4619 mov r1, r3 + 8019e64: 4a03 ldr r2, [pc, #12] ; (8019e74 ) + 8019e66: f7ff fec1 bl 8019bec + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_request: sending ARP request.\n")); + return etharp_request_dst(netif, ipaddr, ðbroadcast); +} + 8019e6a: b004 add sp, #16 + 8019e6c: bd10 pop {r4, pc} + 8019e6e: bf00 nop + 8019e70: 0803a34a .word 0x0803a34a + 8019e74: 0803a344 .word 0x0803a344 + +08019e78 : +{ + 8019e78: b5f8 push {r3, r4, r5, r6, r7, lr} + 8019e7a: 4c13 ldr r4, [pc, #76] ; (8019ec8 ) + for (i = 0; i < ARP_TABLE_SIZE; ++i) { + 8019e7c: 2500 movs r5, #0 + arp_table[i].state = ETHARP_STATE_STABLE; + 8019e7e: 2602 movs r6, #2 + arp_table[i].state = ETHARP_STATE_STABLE_REREQUESTING_2; + 8019e80: 2704 movs r7, #4 + u8_t state = arp_table[i].state; + 8019e82: 7d22 ldrb r2, [r4, #20] + if (state != ETHARP_STATE_EMPTY + 8019e84: b16a cbz r2, 8019ea2 + arp_table[i].ctime++; + 8019e86: 8a63 ldrh r3, [r4, #18] + 8019e88: 3301 adds r3, #1 + 8019e8a: b29b uxth r3, r3 + if ((arp_table[i].ctime >= ARP_MAXAGE) || + 8019e8c: f5b3 7f96 cmp.w r3, #300 ; 0x12c + arp_table[i].ctime++; + 8019e90: 8263 strh r3, [r4, #18] + if ((arp_table[i].ctime >= ARP_MAXAGE) || + 8019e92: d203 bcs.n 8019e9c + 8019e94: 2a01 cmp r2, #1 + 8019e96: d109 bne.n 8019eac + ((arp_table[i].state == ETHARP_STATE_PENDING) && + 8019e98: 2b04 cmp r3, #4 + 8019e9a: d90f bls.n 8019ebc + etharp_free_entry(i); + 8019e9c: 4628 mov r0, r5 + 8019e9e: f7ff fdfd bl 8019a9c + for (i = 0; i < ARP_TABLE_SIZE; ++i) { + 8019ea2: 3501 adds r5, #1 + 8019ea4: 3418 adds r4, #24 + 8019ea6: 2d0a cmp r5, #10 + 8019ea8: d1eb bne.n 8019e82 +} + 8019eaa: bdf8 pop {r3, r4, r5, r6, r7, pc} + } else if (arp_table[i].state == ETHARP_STATE_STABLE_REREQUESTING_1) { + 8019eac: 2a03 cmp r2, #3 + 8019eae: d101 bne.n 8019eb4 + arp_table[i].state = ETHARP_STATE_STABLE_REREQUESTING_2; + 8019eb0: 7527 strb r7, [r4, #20] + 8019eb2: e7f6 b.n 8019ea2 + } else if (arp_table[i].state == ETHARP_STATE_STABLE_REREQUESTING_2) { + 8019eb4: 2a04 cmp r2, #4 + 8019eb6: d1f4 bne.n 8019ea2 + arp_table[i].state = ETHARP_STATE_STABLE; + 8019eb8: 7526 strb r6, [r4, #20] + 8019eba: e7f2 b.n 8019ea2 + etharp_request(arp_table[i].netif, &arp_table[i].ipaddr); + 8019ebc: 1d21 adds r1, r4, #4 + 8019ebe: 68a0 ldr r0, [r4, #8] + 8019ec0: f7ff ffc4 bl 8019e4c + 8019ec4: e7ed b.n 8019ea2 + 8019ec6: bf00 nop + 8019ec8: 2001ae40 .word 0x2001ae40 + +08019ecc : +{ + 8019ecc: e92d 47ff stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, lr} + LWIP_ASSERT("arp_table[arp_idx].state >= ETHARP_STATE_STABLE", + 8019ed0: 4f24 ldr r7, [pc, #144] ; (8019f64 ) + 8019ed2: 2318 movs r3, #24 +{ + 8019ed4: 4606 mov r6, r0 + 8019ed6: 4688 mov r8, r1 + LWIP_ASSERT("arp_table[arp_idx].state >= ETHARP_STATE_STABLE", + 8019ed8: fb03 7302 mla r3, r3, r2, r7 +{ + 8019edc: 4614 mov r4, r2 + LWIP_ASSERT("arp_table[arp_idx].state >= ETHARP_STATE_STABLE", + 8019ede: 7d1b ldrb r3, [r3, #20] + 8019ee0: 2b01 cmp r3, #1 + 8019ee2: d806 bhi.n 8019ef2 + 8019ee4: 4b20 ldr r3, [pc, #128] ; (8019f68 ) + 8019ee6: f240 22ee movw r2, #750 ; 0x2ee + 8019eea: 4920 ldr r1, [pc, #128] ; (8019f6c ) + 8019eec: 4820 ldr r0, [pc, #128] ; (8019f70 ) + 8019eee: f01a fc31 bl 8034754 + if (arp_table[arp_idx].state == ETHARP_STATE_STABLE) { + 8019ef2: 2318 movs r3, #24 + 8019ef4: eb04 0544 add.w r5, r4, r4, lsl #1 + return etharp_raw(netif, (struct eth_addr *)netif->hwaddr, hw_dst_addr, + 8019ef8: f106 092a add.w r9, r6, #42 ; 0x2a + if (arp_table[arp_idx].state == ETHARP_STATE_STABLE) { + 8019efc: fb03 7404 mla r4, r3, r4, r7 + 8019f00: 00ed lsls r5, r5, #3 + 8019f02: 7d23 ldrb r3, [r4, #20] + if (etharp_request_dst(netif, &arp_table[arp_idx].ipaddr, &arp_table[arp_idx].ethaddr) == ERR_OK) { + 8019f04: f105 0a0c add.w sl, r5, #12 + if (arp_table[arp_idx].state == ETHARP_STATE_STABLE) { + 8019f08: 2b02 cmp r3, #2 + if (etharp_request_dst(netif, &arp_table[arp_idx].ipaddr, &arp_table[arp_idx].ethaddr) == ERR_OK) { + 8019f0a: 44ba add sl, r7 + if (arp_table[arp_idx].state == ETHARP_STATE_STABLE) { + 8019f0c: d10b bne.n 8019f26 + if (arp_table[arp_idx].ctime >= ARP_AGE_REREQUEST_USED_BROADCAST) { + 8019f0e: 8a63 ldrh r3, [r4, #18] + 8019f10: f5b3 7f8e cmp.w r3, #284 ; 0x11c + 8019f14: d913 bls.n 8019f3e + if (etharp_request(netif, &arp_table[arp_idx].ipaddr) == ERR_OK) { + 8019f16: 3504 adds r5, #4 + 8019f18: 4630 mov r0, r6 + 8019f1a: 1979 adds r1, r7, r5 + 8019f1c: f7ff ff96 bl 8019e4c + if (etharp_request_dst(netif, &arp_table[arp_idx].ipaddr, &arp_table[arp_idx].ethaddr) == ERR_OK) { + 8019f20: b908 cbnz r0, 8019f26 + arp_table[arp_idx].state = ETHARP_STATE_STABLE_REREQUESTING_1; + 8019f22: 2303 movs r3, #3 + 8019f24: 7523 strb r3, [r4, #20] + return ethernet_output(netif, q, (struct eth_addr *)(netif->hwaddr), &arp_table[arp_idx].ethaddr, ETHTYPE_IP); + 8019f26: f44f 6300 mov.w r3, #2048 ; 0x800 + 8019f2a: 464a mov r2, r9 + 8019f2c: 4641 mov r1, r8 + 8019f2e: 4630 mov r0, r6 + 8019f30: 9300 str r3, [sp, #0] + 8019f32: 4653 mov r3, sl + 8019f34: f000 f9a8 bl 801a288 +} + 8019f38: b004 add sp, #16 + 8019f3a: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + } else if (arp_table[arp_idx].ctime >= ARP_AGE_REREQUEST_USED_UNICAST) { + 8019f3e: f5b3 7f87 cmp.w r3, #270 ; 0x10e + 8019f42: d3f0 bcc.n 8019f26 + return etharp_raw(netif, (struct eth_addr *)netif->hwaddr, hw_dst_addr, + 8019f44: 2301 movs r3, #1 + if (etharp_request_dst(netif, &arp_table[arp_idx].ipaddr, &arp_table[arp_idx].ethaddr) == ERR_OK) { + 8019f46: 3504 adds r5, #4 + return etharp_raw(netif, (struct eth_addr *)netif->hwaddr, hw_dst_addr, + 8019f48: 4652 mov r2, sl + 8019f4a: 4649 mov r1, r9 + 8019f4c: 9303 str r3, [sp, #12] + if (etharp_request_dst(netif, &arp_table[arp_idx].ipaddr, &arp_table[arp_idx].ethaddr) == ERR_OK) { + 8019f4e: 442f add r7, r5 + return etharp_raw(netif, (struct eth_addr *)netif->hwaddr, hw_dst_addr, + 8019f50: 4b08 ldr r3, [pc, #32] ; (8019f74 ) + 8019f52: 4630 mov r0, r6 + 8019f54: 9702 str r7, [sp, #8] + 8019f56: 9301 str r3, [sp, #4] + (struct eth_addr *)netif->hwaddr, netif_ip4_addr(netif), ðzero, + 8019f58: 1d33 adds r3, r6, #4 + return etharp_raw(netif, (struct eth_addr *)netif->hwaddr, hw_dst_addr, + 8019f5a: 9300 str r3, [sp, #0] + 8019f5c: 464b mov r3, r9 + 8019f5e: f7ff fe45 bl 8019bec + 8019f62: e7dd b.n 8019f20 + 8019f64: 2001ae40 .word 0x2001ae40 + 8019f68: 0803a0b8 .word 0x0803a0b8 + 8019f6c: 0803a235 .word 0x0803a235 + 8019f70: 08035999 .word 0x08035999 + 8019f74: 0803a34a .word 0x0803a34a + +08019f78 : +{ + 8019f78: e92d 47f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, r9, sl, lr} + 8019f7c: 4688 mov r8, r1 + 8019f7e: 4606 mov r6, r0 + if (ip4_addr_isbroadcast(ipaddr, netif) || + 8019f80: 4601 mov r1, r0 +{ + 8019f82: 4615 mov r5, r2 + if (ip4_addr_isbroadcast(ipaddr, netif) || + 8019f84: f8d8 0000 ldr.w r0, [r8] + 8019f88: f000 fc47 bl 801a81a + 8019f8c: 2800 cmp r0, #0 + 8019f8e: d16c bne.n 801a06a + ip4_addr_ismulticast(ipaddr) || + 8019f90: f8d8 3000 ldr.w r3, [r8] + 8019f94: f003 02f0 and.w r2, r3, #240 ; 0xf0 + if (ip4_addr_isbroadcast(ipaddr, netif) || + 8019f98: 2ae0 cmp r2, #224 ; 0xe0 + 8019f9a: d066 beq.n 801a06a + ip4_addr_isany(ipaddr)) { + 8019f9c: 2b00 cmp r3, #0 + 8019f9e: d064 beq.n 801a06a + i_err = etharp_find_entry(ipaddr, ETHARP_FLAG_TRY_HARD, netif); + 8019fa0: 4632 mov r2, r6 + 8019fa2: 2101 movs r1, #1 + 8019fa4: 4640 mov r0, r8 + 8019fa6: f7ff fd8d bl 8019ac4 + if (i_err < 0) { + 8019faa: 1e07 subs r7, r0, #0 + 8019fac: da03 bge.n 8019fb6 + return (err_t)i_err; + 8019fae: b278 sxtb r0, r7 +} + 8019fb0: b002 add sp, #8 + 8019fb2: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + LWIP_ASSERT("type overflow", (size_t)i_err < NETIF_ADDR_IDX_MAX); + 8019fb6: 2f7e cmp r7, #126 ; 0x7e + 8019fb8: dd06 ble.n 8019fc8 + 8019fba: 4b36 ldr r3, [pc, #216] ; (801a094 ) + 8019fbc: f240 32c1 movw r2, #961 ; 0x3c1 + 8019fc0: 4935 ldr r1, [pc, #212] ; (801a098 ) + 8019fc2: 4836 ldr r0, [pc, #216] ; (801a09c ) + 8019fc4: f01a fbc6 bl 8034754 + i = (netif_addr_idx_t)i_err; + 8019fc8: b2ff uxtb r7, r7 + if (arp_table[i].state == ETHARP_STATE_EMPTY) { + 8019fca: f8df 90d8 ldr.w r9, [pc, #216] ; 801a0a4 + 8019fce: 2318 movs r3, #24 + 8019fd0: fb03 9307 mla r3, r3, r7, r9 + 8019fd4: 7d1a ldrb r2, [r3, #20] + 8019fd6: 2a00 cmp r2, #0 + 8019fd8: d156 bne.n 801a088 + arp_table[i].state = ETHARP_STATE_PENDING; + 8019fda: 2201 movs r2, #1 + arp_table[i].netif = netif; + 8019fdc: 609e str r6, [r3, #8] + arp_table[i].state = ETHARP_STATE_PENDING; + 8019fde: 751a strb r2, [r3, #20] + result = etharp_request(netif, ipaddr); + 8019fe0: 4641 mov r1, r8 + 8019fe2: 4630 mov r0, r6 + 8019fe4: f7ff ff32 bl 8019e4c + if (q == NULL) { + 8019fe8: 2d00 cmp r5, #0 + 8019fea: d0e1 beq.n 8019fb0 + if (arp_table[i].state >= ETHARP_STATE_STABLE) { + 8019fec: 2318 movs r3, #24 + 8019fee: fb03 9207 mla r2, r3, r7, r9 + 8019ff2: 7d12 ldrb r2, [r2, #20] + 8019ff4: 2a01 cmp r2, #1 + 8019ff6: d90e bls.n 801a016 + ETHARP_SET_ADDRHINT(netif, i); + 8019ff8: 4a29 ldr r2, [pc, #164] ; (801a0a0 ) + result = ethernet_output(netif, q, srcaddr, &(arp_table[i].ethaddr), ETHTYPE_IP); + 8019ffa: fb03 9307 mla r3, r3, r7, r9 + 8019ffe: 4629 mov r1, r5 + 801a000: 4630 mov r0, r6 + ETHARP_SET_ADDRHINT(netif, i); + 801a002: 7017 strb r7, [r2, #0] + result = ethernet_output(netif, q, srcaddr, &(arp_table[i].ethaddr), ETHTYPE_IP); + 801a004: f44f 6200 mov.w r2, #2048 ; 0x800 + 801a008: 330c adds r3, #12 + 801a00a: 9200 str r2, [sp, #0] + 801a00c: f106 022a add.w r2, r6, #42 ; 0x2a + 801a010: f000 f93a bl 801a288 + 801a014: e7cc b.n 8019fb0 + } else if (arp_table[i].state == ETHARP_STATE_PENDING) { + 801a016: d1cb bne.n 8019fb0 + 801a018: 462c mov r4, r5 + LWIP_ASSERT("no packet queues allowed!", (p->len != p->tot_len) || (p->next == 0)); + 801a01a: 4e1e ldr r6, [pc, #120] ; (801a094 ) + 801a01c: f8df 8088 ldr.w r8, [pc, #136] ; 801a0a8 + 801a020: f8df a078 ldr.w sl, [pc, #120] ; 801a09c + 801a024: 8962 ldrh r2, [r4, #10] + 801a026: 8923 ldrh r3, [r4, #8] + 801a028: 429a cmp r2, r3 + 801a02a: d108 bne.n 801a03e + 801a02c: 6823 ldr r3, [r4, #0] + 801a02e: b133 cbz r3, 801a03e + 801a030: 4633 mov r3, r6 + 801a032: f240 32f1 movw r2, #1009 ; 0x3f1 + 801a036: 4641 mov r1, r8 + 801a038: 4650 mov r0, sl + 801a03a: f01a fb8b bl 8034754 + if (PBUF_NEEDS_COPY(p)) { + 801a03e: 7b23 ldrb r3, [r4, #12] + 801a040: 065b lsls r3, r3, #25 + 801a042: d415 bmi.n 801a070 + p = p->next; + 801a044: 6824 ldr r4, [r4, #0] + while (p) { + 801a046: 2c00 cmp r4, #0 + 801a048: d1ec bne.n 801a024 + pbuf_ref(p); + 801a04a: 4628 mov r0, r5 + 801a04c: f001 fece bl 801bdec + if (arp_table[i].q != NULL) { + 801a050: 2418 movs r4, #24 + 801a052: fb04 f307 mul.w r3, r4, r7 + 801a056: f859 0003 ldr.w r0, [r9, r3] + 801a05a: b108 cbz r0, 801a060 + pbuf_free(arp_table[i].q); + 801a05c: f001 fd6c bl 801bb38 + arp_table[i].q = p; + 801a060: 437c muls r4, r7 + result = ERR_OK; + 801a062: 2000 movs r0, #0 + arp_table[i].q = p; + 801a064: f849 5004 str.w r5, [r9, r4] + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_query: queued packet %p on ARP entry %"U16_F"\n", (void *)q, (u16_t)i)); + 801a068: e7a2 b.n 8019fb0 + return ERR_ARG; + 801a06a: f06f 000f mvn.w r0, #15 + 801a06e: e79f b.n 8019fb0 + p = pbuf_clone(PBUF_LINK, PBUF_RAM, q); + 801a070: 462a mov r2, r5 + 801a072: f44f 7120 mov.w r1, #640 ; 0x280 + 801a076: 200e movs r0, #14 + 801a078: f001 ffe0 bl 801c03c + if (p != NULL) { + 801a07c: 4605 mov r5, r0 + 801a07e: 2800 cmp r0, #0 + 801a080: d1e6 bne.n 801a050 + result = ERR_MEM; + 801a082: f04f 30ff mov.w r0, #4294967295 + 801a086: e793 b.n 8019fb0 + if (is_new_entry || (q == NULL)) { + 801a088: 2d00 cmp r5, #0 + 801a08a: d0a9 beq.n 8019fe0 + err_t result = ERR_MEM; + 801a08c: f04f 30ff mov.w r0, #4294967295 + 801a090: e7ac b.n 8019fec + 801a092: bf00 nop + 801a094: 0803a0b8 .word 0x0803a0b8 + 801a098: 0803a265 .word 0x0803a265 + 801a09c: 08035999 .word 0x08035999 + 801a0a0: 2001af30 .word 0x2001af30 + 801a0a4: 2001ae40 .word 0x2001ae40 + 801a0a8: 0803a273 .word 0x0803a273 + +0801a0ac : +{ + 801a0ac: b5f0 push {r4, r5, r6, r7, lr} + 801a0ae: 460e mov r6, r1 + 801a0b0: b085 sub sp, #20 + 801a0b2: 4615 mov r5, r2 + LWIP_ASSERT("netif != NULL", netif != NULL); + 801a0b4: 4604 mov r4, r0 + 801a0b6: b930 cbnz r0, 801a0c6 + 801a0b8: 4b43 ldr r3, [pc, #268] ; (801a1c8 ) + 801a0ba: f240 321e movw r2, #798 ; 0x31e + 801a0be: 4943 ldr r1, [pc, #268] ; (801a1cc ) + 801a0c0: 4843 ldr r0, [pc, #268] ; (801a1d0 ) + 801a0c2: f01a fb47 bl 8034754 + LWIP_ASSERT("q != NULL", q != NULL); + 801a0c6: b936 cbnz r6, 801a0d6 + 801a0c8: 4b3f ldr r3, [pc, #252] ; (801a1c8 ) + 801a0ca: f240 321f movw r2, #799 ; 0x31f + 801a0ce: 4941 ldr r1, [pc, #260] ; (801a1d4 ) + 801a0d0: 483f ldr r0, [pc, #252] ; (801a1d0 ) + 801a0d2: f01a fb3f bl 8034754 + LWIP_ASSERT("ipaddr != NULL", ipaddr != NULL); + 801a0d6: b935 cbnz r5, 801a0e6 + 801a0d8: 4b3b ldr r3, [pc, #236] ; (801a1c8 ) + 801a0da: f44f 7248 mov.w r2, #800 ; 0x320 + 801a0de: 493e ldr r1, [pc, #248] ; (801a1d8 ) + 801a0e0: 483b ldr r0, [pc, #236] ; (801a1d0 ) + 801a0e2: f01a fb37 bl 8034754 + if (ip4_addr_isbroadcast(ipaddr, netif)) { + 801a0e6: 4621 mov r1, r4 + 801a0e8: 6828 ldr r0, [r5, #0] + 801a0ea: f000 fb96 bl 801a81a + 801a0ee: 2800 cmp r0, #0 + 801a0f0: d165 bne.n 801a1be + } else if (ip4_addr_ismulticast(ipaddr)) { + 801a0f2: 682b ldr r3, [r5, #0] + 801a0f4: f003 02f0 and.w r2, r3, #240 ; 0xf0 + 801a0f8: 2ae0 cmp r2, #224 ; 0xe0 + 801a0fa: d11c bne.n 801a136 + mcastaddr.addr[0] = LL_IP4_MULTICAST_ADDR_0; + 801a0fc: 2301 movs r3, #1 + 801a0fe: f8ad 3008 strh.w r3, [sp, #8] + mcastaddr.addr[2] = LL_IP4_MULTICAST_ADDR_2; + 801a102: 235e movs r3, #94 ; 0x5e + 801a104: f88d 300a strb.w r3, [sp, #10] + mcastaddr.addr[3] = ip4_addr2(ipaddr) & 0x7f; + 801a108: 786b ldrb r3, [r5, #1] + 801a10a: f003 037f and.w r3, r3, #127 ; 0x7f + 801a10e: f88d 300b strb.w r3, [sp, #11] + mcastaddr.addr[4] = ip4_addr3(ipaddr); + 801a112: 78ab ldrb r3, [r5, #2] + 801a114: f88d 300c strb.w r3, [sp, #12] + mcastaddr.addr[5] = ip4_addr4(ipaddr); + 801a118: 78eb ldrb r3, [r5, #3] + 801a11a: f88d 300d strb.w r3, [sp, #13] + dest = &mcastaddr; + 801a11e: ab02 add r3, sp, #8 + return ethernet_output(netif, q, (struct eth_addr *)(netif->hwaddr), dest, ETHTYPE_IP); + 801a120: f44f 6200 mov.w r2, #2048 ; 0x800 + 801a124: 4631 mov r1, r6 + 801a126: 4620 mov r0, r4 + 801a128: 9200 str r2, [sp, #0] + 801a12a: f104 022a add.w r2, r4, #42 ; 0x2a + 801a12e: f000 f8ab bl 801a288 +} + 801a132: b005 add sp, #20 + 801a134: bdf0 pop {r4, r5, r6, r7, pc} + if (!ip4_addr_netcmp(ipaddr, netif_ip4_addr(netif), netif_ip4_netmask(netif)) && + 801a136: 6862 ldr r2, [r4, #4] + 801a138: 68a1 ldr r1, [r4, #8] + 801a13a: 405a eors r2, r3 + 801a13c: 420a tst r2, r1 + 801a13e: d009 beq.n 801a154 + !ip4_addr_islinklocal(ipaddr)) { + 801a140: b29b uxth r3, r3 + if (!ip4_addr_netcmp(ipaddr, netif_ip4_addr(netif), netif_ip4_netmask(netif)) && + 801a142: f64f 62a9 movw r2, #65193 ; 0xfea9 + 801a146: 4293 cmp r3, r2 + 801a148: d004 beq.n 801a154 + if (!ip4_addr_isany_val(*netif_ip4_gw(netif))) { + 801a14a: 68e3 ldr r3, [r4, #12] + 801a14c: 2b00 cmp r3, #0 + 801a14e: d038 beq.n 801a1c2 + dst_addr = netif_ip4_gw(netif); + 801a150: f104 050c add.w r5, r4, #12 + if ((arp_table[etharp_cached_entry].state >= ETHARP_STATE_STABLE) && + 801a154: f8df c08c ldr.w ip, [pc, #140] ; 801a1e4 + 801a158: 2118 movs r1, #24 + 801a15a: 4b20 ldr r3, [pc, #128] ; (801a1dc ) + 801a15c: f89c 2000 ldrb.w r2, [ip] + 801a160: fb01 3302 mla r3, r1, r2, r3 + 801a164: 7d19 ldrb r1, [r3, #20] + 801a166: 2901 cmp r1, #1 + 801a168: d90d bls.n 801a186 + 801a16a: 6899 ldr r1, [r3, #8] + 801a16c: 42a1 cmp r1, r4 + 801a16e: d10a bne.n 801a186 + (arp_table[etharp_cached_entry].netif == netif) && + 801a170: 6829 ldr r1, [r5, #0] + 801a172: 685b ldr r3, [r3, #4] + 801a174: 4299 cmp r1, r3 + 801a176: d106 bne.n 801a186 + return etharp_output_to_arp_index(netif, q, i); + 801a178: 4631 mov r1, r6 + 801a17a: 4620 mov r0, r4 +} + 801a17c: b005 add sp, #20 + 801a17e: e8bd 40f0 ldmia.w sp!, {r4, r5, r6, r7, lr} + return etharp_output_to_arp_index(netif, q, i); + 801a182: f7ff bea3 b.w 8019ecc + 801a186: 4b15 ldr r3, [pc, #84] ; (801a1dc ) +{ + 801a188: 2100 movs r1, #0 + if ((arp_table[i].state >= ETHARP_STATE_STABLE) && + 801a18a: 7d1f ldrb r7, [r3, #20] + 801a18c: b2ca uxtb r2, r1 + 801a18e: 2f01 cmp r7, #1 + 801a190: d909 bls.n 801a1a6 + 801a192: 689f ldr r7, [r3, #8] + 801a194: 42a7 cmp r7, r4 + 801a196: d106 bne.n 801a1a6 + (arp_table[i].netif == netif) && + 801a198: 685f ldr r7, [r3, #4] + 801a19a: 6828 ldr r0, [r5, #0] + 801a19c: 42b8 cmp r0, r7 + 801a19e: d102 bne.n 801a1a6 + ETHARP_SET_ADDRHINT(netif, i); + 801a1a0: f88c 2000 strb.w r2, [ip] + 801a1a4: e7e8 b.n 801a178 + for (i = 0; i < ARP_TABLE_SIZE; i++) { + 801a1a6: 3101 adds r1, #1 + 801a1a8: 3318 adds r3, #24 + 801a1aa: 290a cmp r1, #10 + 801a1ac: d1ed bne.n 801a18a + return etharp_query(netif, dst_addr, q); + 801a1ae: 4632 mov r2, r6 + 801a1b0: 4629 mov r1, r5 + 801a1b2: 4620 mov r0, r4 +} + 801a1b4: b005 add sp, #20 + 801a1b6: e8bd 40f0 ldmia.w sp!, {r4, r5, r6, r7, lr} + return etharp_query(netif, dst_addr, q); + 801a1ba: f7ff bedd b.w 8019f78 + dest = (const struct eth_addr *)ðbroadcast; + 801a1be: 4b08 ldr r3, [pc, #32] ; (801a1e0 ) + 801a1c0: e7ae b.n 801a120 + return ERR_RTE; + 801a1c2: f06f 0003 mvn.w r0, #3 + 801a1c6: e7b4 b.n 801a132 + 801a1c8: 0803a0b8 .word 0x0803a0b8 + 801a1cc: 08039f46 .word 0x08039f46 + 801a1d0: 08035999 .word 0x08035999 + 801a1d4: 0803ae97 .word 0x0803ae97 + 801a1d8: 0803a1f2 .word 0x0803a1f2 + 801a1dc: 2001ae40 .word 0x2001ae40 + 801a1e0: 0803a344 .word 0x0803a344 + 801a1e4: 2001af30 .word 0x2001af30 + +0801a1e8 : + u16_t next_hdr_offset = SIZEOF_ETH_HDR; +#endif /* LWIP_ARP || ETHARP_SUPPORT_VLAN */ + + LWIP_ASSERT_CORE_LOCKED(); + + if (p->len <= SIZEOF_ETH_HDR) { + 801a1e8: 8943 ldrh r3, [r0, #10] + 801a1ea: 2b0e cmp r3, #14 +{ + 801a1ec: b570 push {r4, r5, r6, lr} + 801a1ee: 4604 mov r4, r0 + 801a1f0: 460d mov r5, r1 + if (p->len <= SIZEOF_ETH_HDR) { + 801a1f2: d91a bls.n 801a22a + ETHARP_STATS_INC(etharp.drop); + MIB2_STATS_NETIF_INC(netif, ifinerrors); + goto free_and_return; + } + + if (p->if_idx == NETIF_NO_INDEX) { + 801a1f4: 7bc3 ldrb r3, [r0, #15] + 801a1f6: b91b cbnz r3, 801a200 + p->if_idx = netif_get_index(netif); + 801a1f8: f891 3034 ldrb.w r3, [r1, #52] ; 0x34 + 801a1fc: 3301 adds r3, #1 + 801a1fe: 73c3 strb r3, [r0, #15] + } + + /* points to packet payload, which starts with an Ethernet header */ + ethhdr = (struct eth_hdr *)p->payload; + 801a200: 6860 ldr r0, [r4, #4] + +#if LWIP_ARP_FILTER_NETIF + netif = LWIP_ARP_FILTER_NETIF_FN(p, netif, lwip_htons(type)); +#endif /* LWIP_ARP_FILTER_NETIF*/ + + if (ethhdr->dest.addr[0] & 1) { + 801a202: 7803 ldrb r3, [r0, #0] + type = ethhdr->type; + 801a204: 8986 ldrh r6, [r0, #12] + if (ethhdr->dest.addr[0] & 1) { + 801a206: 07d9 lsls r1, r3, #31 + 801a208: d50a bpl.n 801a220 + /* this might be a multicast or broadcast packet */ + if (ethhdr->dest.addr[0] == LL_IP4_MULTICAST_ADDR_0) { + 801a20a: 2b01 cmp r3, #1 + 801a20c: d111 bne.n 801a232 +#if LWIP_IPV4 + if ((ethhdr->dest.addr[1] == LL_IP4_MULTICAST_ADDR_1) && + 801a20e: 7843 ldrb r3, [r0, #1] + 801a210: b933 cbnz r3, 801a220 + 801a212: 7883 ldrb r3, [r0, #2] + 801a214: 2b5e cmp r3, #94 ; 0x5e + 801a216: d103 bne.n 801a220 + (ethhdr->dest.addr[2] == LL_IP4_MULTICAST_ADDR_2)) { + /* mark the pbuf as link-layer multicast */ + p->flags |= PBUF_FLAG_LLMCAST; + 801a218: 7b63 ldrb r3, [r4, #13] + 801a21a: f043 0310 orr.w r3, r3, #16 + p->flags |= PBUF_FLAG_LLMCAST; + } +#endif /* LWIP_IPV6 */ + else if (eth_addr_cmp(ðhdr->dest, ðbroadcast)) { + /* mark the pbuf as link-layer broadcast */ + p->flags |= PBUF_FLAG_LLBCAST; + 801a21e: 7363 strb r3, [r4, #13] + } + } + + switch (type) { + 801a220: 2e08 cmp r6, #8 + 801a222: d010 beq.n 801a246 + 801a224: f5b6 6fc1 cmp.w r6, #1544 ; 0x608 + 801a228: d01d beq.n 801a266 + /* This means the pbuf is freed or consumed, + so the caller doesn't have to free it again */ + return ERR_OK; + +free_and_return: + pbuf_free(p); + 801a22a: 4620 mov r0, r4 + 801a22c: f001 fc84 bl 801bb38 + return ERR_OK; + 801a230: e017 b.n 801a262 + else if (eth_addr_cmp(ðhdr->dest, ðbroadcast)) { + 801a232: 2206 movs r2, #6 + 801a234: 4913 ldr r1, [pc, #76] ; (801a284 ) + 801a236: f01a fb97 bl 8034968 + 801a23a: 2800 cmp r0, #0 + 801a23c: d1f0 bne.n 801a220 + p->flags |= PBUF_FLAG_LLBCAST; + 801a23e: 7b63 ldrb r3, [r4, #13] + 801a240: f043 0308 orr.w r3, r3, #8 + 801a244: e7eb b.n 801a21e + if (!(netif->flags & NETIF_FLAG_ETHARP)) { + 801a246: f895 3031 ldrb.w r3, [r5, #49] ; 0x31 + 801a24a: 071a lsls r2, r3, #28 + 801a24c: d5ed bpl.n 801a22a + if (pbuf_remove_header(p, next_hdr_offset)) { + 801a24e: 210e movs r1, #14 + 801a250: 4620 mov r0, r4 + 801a252: f001 fc3d bl 801bad0 + 801a256: 2800 cmp r0, #0 + 801a258: d1e7 bne.n 801a22a + ip4_input(p, netif); + 801a25a: 4629 mov r1, r5 + 801a25c: 4620 mov r0, r4 + 801a25e: f000 f98b bl 801a578 +} + 801a262: 2000 movs r0, #0 + 801a264: bd70 pop {r4, r5, r6, pc} + if (!(netif->flags & NETIF_FLAG_ETHARP)) { + 801a266: f895 3031 ldrb.w r3, [r5, #49] ; 0x31 + 801a26a: 071b lsls r3, r3, #28 + 801a26c: d5dd bpl.n 801a22a + if (pbuf_remove_header(p, next_hdr_offset)) { + 801a26e: 210e movs r1, #14 + 801a270: 4620 mov r0, r4 + 801a272: f001 fc2d bl 801bad0 + 801a276: 2800 cmp r0, #0 + 801a278: d1d7 bne.n 801a22a + etharp_input(p, netif); + 801a27a: 4629 mov r1, r5 + 801a27c: 4620 mov r0, r4 + 801a27e: f7ff fd37 bl 8019cf0 + break; + 801a282: e7ee b.n 801a262 + 801a284: 0803a344 .word 0x0803a344 + +0801a288 : + * @return ERR_OK if the packet was sent, any other err_t on failure + */ +err_t +ethernet_output(struct netif * netif, struct pbuf * p, + const struct eth_addr * src, const struct eth_addr * dst, + u16_t eth_type) { + 801a288: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} + 801a28c: 460d mov r5, r1 + 801a28e: 4604 mov r4, r0 + struct eth_hdr *ethhdr; + u16_t eth_type_be = lwip_htons(eth_type); + 801a290: f8bd 0018 ldrh.w r0, [sp, #24] + u16_t eth_type) { + 801a294: 4616 mov r6, r2 + 801a296: 461f mov r7, r3 + u16_t eth_type_be = lwip_htons(eth_type); + 801a298: f7fe fb21 bl 80188de + + eth_type_be = PP_HTONS(ETHTYPE_VLAN); + } else +#endif /* ETHARP_SUPPORT_VLAN && defined(LWIP_HOOK_VLAN_SET) */ + { + if (pbuf_add_header(p, SIZEOF_ETH_HDR) != 0) { + 801a29c: 210e movs r1, #14 + u16_t eth_type_be = lwip_htons(eth_type); + 801a29e: 4680 mov r8, r0 + if (pbuf_add_header(p, SIZEOF_ETH_HDR) != 0) { + 801a2a0: 4628 mov r0, r5 + 801a2a2: f001 fc11 bl 801bac8 + 801a2a6: b9e0 cbnz r0, 801a2e2 + } + } + + LWIP_ASSERT_CORE_LOCKED(); + + ethhdr = (struct eth_hdr *)p->payload; + 801a2a8: 6869 ldr r1, [r5, #4] + ethhdr->type = eth_type_be; + 801a2aa: f8a1 800c strh.w r8, [r1, #12] + SMEMCPY(ðhdr->dest, dst, ETH_HWADDR_LEN); + 801a2ae: 683b ldr r3, [r7, #0] + 801a2b0: 600b str r3, [r1, #0] + 801a2b2: 88bb ldrh r3, [r7, #4] + 801a2b4: 808b strh r3, [r1, #4] + SMEMCPY(ðhdr->src, src, ETH_HWADDR_LEN); + 801a2b6: 6833 ldr r3, [r6, #0] + 801a2b8: f8c1 3006 str.w r3, [r1, #6] + 801a2bc: 88b3 ldrh r3, [r6, #4] + 801a2be: 814b strh r3, [r1, #10] + + LWIP_ASSERT("netif->hwaddr_len must be 6 for ethernet_output!", + 801a2c0: f894 3030 ldrb.w r3, [r4, #48] ; 0x30 + 801a2c4: 2b06 cmp r3, #6 + 801a2c6: d006 beq.n 801a2d6 + 801a2c8: 4b08 ldr r3, [pc, #32] ; (801a2ec ) + 801a2ca: f44f 7299 mov.w r2, #306 ; 0x132 + 801a2ce: 4908 ldr r1, [pc, #32] ; (801a2f0 ) + 801a2d0: 4808 ldr r0, [pc, #32] ; (801a2f4 ) + 801a2d2: f01a fa3f bl 8034754 + (netif->hwaddr_len == ETH_HWADDR_LEN)); + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, + ("ethernet_output: sending packet %p\n", (void *)p)); + + /* send the packet */ + return netif->linkoutput(netif, p); + 801a2d6: 69a3 ldr r3, [r4, #24] + 801a2d8: 4629 mov r1, r5 + 801a2da: 4620 mov r0, r4 +pbuf_header_failed: + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, + ("ethernet_output: could not allocate room for header.\n")); + LINK_STATS_INC(link.lenerr); + return ERR_BUF; +} + 801a2dc: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} + return netif->linkoutput(netif, p); + 801a2e0: 4718 bx r3 +} + 801a2e2: f06f 0001 mvn.w r0, #1 + 801a2e6: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + 801a2ea: bf00 nop + 801a2ec: 0803a28d .word 0x0803a28d + 801a2f0: 0803a313 .word 0x0803a313 + 801a2f4: 08035999 .word 0x08035999 + +0801a2f8 : + * @param type Type of the ICMP header + * @param code Code of the ICMP header + */ +static void +icmp_send_response(struct pbuf *p, u8_t type, u8_t code) +{ + 801a2f8: b5f0 push {r4, r5, r6, r7, lr} + 801a2fa: 4604 mov r4, r0 + 801a2fc: b087 sub sp, #28 + 801a2fe: 460f mov r7, r1 + 801a300: 4616 mov r6, r2 + + /* increase number of messages attempted to send */ + MIB2_STATS_INC(mib2.icmpoutmsgs); + + /* ICMP header + IP header + 8 bytes of data */ + q = pbuf_alloc(PBUF_IP, sizeof(struct icmp_echo_hdr) + IP_HLEN + ICMP_DEST_UNREACH_DATASIZE, + 801a302: 2124 movs r1, #36 ; 0x24 + 801a304: f44f 7220 mov.w r2, #640 ; 0x280 + 801a308: 2022 movs r0, #34 ; 0x22 + 801a30a: f001 fc7d bl 801bc08 + PBUF_RAM); + if (q == NULL) { + 801a30e: 4605 mov r5, r0 + 801a310: b390 cbz r0, 801a378 + LWIP_DEBUGF(ICMP_DEBUG, ("icmp_time_exceeded: failed to allocate pbuf for ICMP packet.\n")); + MIB2_STATS_INC(mib2.icmpouterrors); + return; + } + LWIP_ASSERT("check that first pbuf can hold icmp message", + 801a312: 8943 ldrh r3, [r0, #10] + 801a314: 2b23 cmp r3, #35 ; 0x23 + 801a316: d806 bhi.n 801a326 + 801a318: 4b18 ldr r3, [pc, #96] ; (801a37c ) + 801a31a: f44f 72b4 mov.w r2, #360 ; 0x168 + 801a31e: 4918 ldr r1, [pc, #96] ; (801a380 ) + 801a320: 4818 ldr r0, [pc, #96] ; (801a384 ) + 801a322: f01a fa17 bl 8034754 + (q->len >= (sizeof(struct icmp_echo_hdr) + IP_HLEN + ICMP_DEST_UNREACH_DATASIZE))); + + iphdr = (struct ip_hdr *)p->payload; + 801a326: 6860 ldr r0, [r4, #4] + LWIP_DEBUGF(ICMP_DEBUG, ("\n")); + + icmphdr = (struct icmp_echo_hdr *)q->payload; + icmphdr->type = type; + icmphdr->code = code; + icmphdr->id = 0; + 801a328: 2300 movs r3, #0 + icmphdr = (struct icmp_echo_hdr *)q->payload; + 801a32a: 686c ldr r4, [r5, #4] + icmphdr->seqno = 0; + + /* copy fields from original packet */ + SMEMCPY((u8_t *)q->payload + sizeof(struct icmp_echo_hdr), (u8_t *)p->payload, + 801a32c: f100 011c add.w r1, r0, #28 + icmphdr->id = 0; + 801a330: 7123 strb r3, [r4, #4] + SMEMCPY((u8_t *)q->payload + sizeof(struct icmp_echo_hdr), (u8_t *)p->payload, + 801a332: f104 0208 add.w r2, r4, #8 + icmphdr->id = 0; + 801a336: 7163 strb r3, [r4, #5] + icmphdr->seqno = 0; + 801a338: 71a3 strb r3, [r4, #6] + 801a33a: 71e3 strb r3, [r4, #7] + SMEMCPY((u8_t *)q->payload + sizeof(struct icmp_echo_hdr), (u8_t *)p->payload, + 801a33c: 4603 mov r3, r0 + icmphdr->type = type; + 801a33e: 7027 strb r7, [r4, #0] + icmphdr->code = code; + 801a340: 7066 strb r6, [r4, #1] + SMEMCPY((u8_t *)q->payload + sizeof(struct icmp_echo_hdr), (u8_t *)p->payload, + 801a342: f853 6b04 ldr.w r6, [r3], #4 + 801a346: 428b cmp r3, r1 + 801a348: f842 6b04 str.w r6, [r2], #4 + 801a34c: d1f9 bne.n 801a342 + IP_HLEN + ICMP_DEST_UNREACH_DATASIZE); + + ip4_addr_copy(iphdr_src, iphdr->src); + 801a34e: 68c3 ldr r3, [r0, #12] + ip4_addr_t iphdr_dst; + ip4_addr_copy(iphdr_dst, iphdr->dest); + netif = ip4_route_src(&iphdr_dst, &iphdr_src); + } +#else + netif = ip4_route(&iphdr_src); + 801a350: a805 add r0, sp, #20 + ip4_addr_copy(iphdr_src, iphdr->src); + 801a352: 9305 str r3, [sp, #20] + netif = ip4_route(&iphdr_src); + 801a354: f000 f8e2 bl 801a51c +#endif + if (netif != NULL) { + 801a358: b158 cbz r0, 801a372 + /* calculate checksum */ + icmphdr->chksum = 0; + 801a35a: 2100 movs r1, #0 + IF__NETIF_CHECKSUM_ENABLED(netif, NETIF_CHECKSUM_GEN_ICMP) { + icmphdr->chksum = inet_chksum(icmphdr, q->len); + } +#endif + ICMP_STATS_INC(icmp.xmit); + ip4_output_if(q, NULL, &iphdr_src, ICMP_TTL, 0, IP_PROTO_ICMP, netif); + 801a35c: 2301 movs r3, #1 + 801a35e: aa05 add r2, sp, #20 + icmphdr->chksum = 0; + 801a360: 70a1 strb r1, [r4, #2] + 801a362: 70e1 strb r1, [r4, #3] + ip4_output_if(q, NULL, &iphdr_src, ICMP_TTL, 0, IP_PROTO_ICMP, netif); + 801a364: 9002 str r0, [sp, #8] + 801a366: 4628 mov r0, r5 + 801a368: e9cd 1300 strd r1, r3, [sp] + 801a36c: 23ff movs r3, #255 ; 0xff + 801a36e: f000 fa43 bl 801a7f8 + } + pbuf_free(q); + 801a372: 4628 mov r0, r5 + 801a374: f001 fbe0 bl 801bb38 +} + 801a378: b007 add sp, #28 + 801a37a: bdf0 pop {r4, r5, r6, r7, pc} + 801a37c: 0803a350 .word 0x0803a350 + 801a380: 0803a3d6 .word 0x0803a3d6 + 801a384: 08035999 .word 0x08035999 + +0801a388 : +{ + 801a388: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} + iphdr_in = ip4_current_header(); + 801a38c: 4f43 ldr r7, [pc, #268] ; (801a49c ) +{ + 801a38e: b087 sub sp, #28 + 801a390: 4604 mov r4, r0 + 801a392: 4688 mov r8, r1 + iphdr_in = ip4_current_header(); + 801a394: f8d7 9008 ldr.w r9, [r7, #8] + hlen = IPH_HL_BYTES(iphdr_in); + 801a398: f899 5000 ldrb.w r5, [r9] + 801a39c: f005 050f and.w r5, r5, #15 + 801a3a0: 00ad lsls r5, r5, #2 + if (hlen < IP_HLEN) { + 801a3a2: 2d13 cmp r5, #19 + 801a3a4: d92f bls.n 801a406 + if (p->len < sizeof(u16_t) * 2) { + 801a3a6: 8943 ldrh r3, [r0, #10] + 801a3a8: 2b03 cmp r3, #3 + 801a3aa: d92c bls.n 801a406 + type = *((u8_t *)p->payload); + 801a3ac: 6843 ldr r3, [r0, #4] + switch (type) { + 801a3ae: 781b ldrb r3, [r3, #0] + 801a3b0: 2b08 cmp r3, #8 + 801a3b2: d128 bne.n 801a406 + if (ip4_addr_ismulticast(ip4_current_dest_addr())) { + 801a3b4: 6978 ldr r0, [r7, #20] + 801a3b6: f000 03f0 and.w r3, r0, #240 ; 0xf0 + 801a3ba: 2be0 cmp r3, #224 ; 0xe0 + 801a3bc: d023 beq.n 801a406 + if (ip4_addr_isbroadcast(ip4_current_dest_addr(), ip_current_netif())) { + 801a3be: 6839 ldr r1, [r7, #0] + 801a3c0: f000 fa2b bl 801a81a + 801a3c4: b9f8 cbnz r0, 801a406 + if (p->tot_len < sizeof(struct icmp_echo_hdr)) { + 801a3c6: 8923 ldrh r3, [r4, #8] + 801a3c8: 2b07 cmp r3, #7 + 801a3ca: d91c bls.n 801a406 + if (pbuf_add_header(p, hlen + PBUF_LINK_HLEN + PBUF_LINK_ENCAPSULATION_HLEN)) { + 801a3cc: f105 010e add.w r1, r5, #14 + 801a3d0: 4620 mov r0, r4 + 801a3d2: 9105 str r1, [sp, #20] + 801a3d4: f001 fb78 bl 801bac8 + 801a3d8: 9905 ldr r1, [sp, #20] + 801a3da: 2800 cmp r0, #0 + 801a3dc: d052 beq.n 801a484 + u16_t alloc_len = (u16_t)(p->tot_len + hlen); + 801a3de: 8923 ldrh r3, [r4, #8] + 801a3e0: 1959 adds r1, r3, r5 + 801a3e2: b289 uxth r1, r1 + if (alloc_len < p->tot_len) { + 801a3e4: 428b cmp r3, r1 + 801a3e6: d80e bhi.n 801a406 + r = pbuf_alloc(PBUF_LINK, alloc_len, PBUF_RAM); + 801a3e8: f44f 7220 mov.w r2, #640 ; 0x280 + 801a3ec: 200e movs r0, #14 + 801a3ee: f001 fc0b bl 801bc08 + if (r == NULL) { + 801a3f2: 4606 mov r6, r0 + 801a3f4: b138 cbz r0, 801a406 + if (r->len < hlen + sizeof(struct icmp_echo_hdr)) { + 801a3f6: 8942 ldrh r2, [r0, #10] + 801a3f8: f105 0308 add.w r3, r5, #8 + 801a3fc: 429a cmp r2, r3 + 801a3fe: d208 bcs.n 801a412 + pbuf_free(r); + 801a400: 4630 mov r0, r6 + 801a402: f001 fb99 bl 801bb38 + pbuf_free(p); + 801a406: 4620 mov r0, r4 +} + 801a408: b007 add sp, #28 + 801a40a: e8bd 43f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, lr} + pbuf_free(p); + 801a40e: f001 bb93 b.w 801bb38 + MEMCPY(r->payload, iphdr_in, hlen); + 801a412: 4649 mov r1, r9 + 801a414: 462a mov r2, r5 + 801a416: 6840 ldr r0, [r0, #4] + 801a418: f01a fbab bl 8034b72 + if (pbuf_remove_header(r, hlen)) { + 801a41c: 4629 mov r1, r5 + 801a41e: 4630 mov r0, r6 + 801a420: f001 fb56 bl 801bad0 + 801a424: b130 cbz r0, 801a434 + LWIP_ASSERT("icmp_input: moving r->payload to icmp header failed\n", 0); + 801a426: 4b1e ldr r3, [pc, #120] ; (801a4a0 ) + 801a428: 22b6 movs r2, #182 ; 0xb6 + 801a42a: 491e ldr r1, [pc, #120] ; (801a4a4 ) + 801a42c: 481e ldr r0, [pc, #120] ; (801a4a8 ) + 801a42e: f01a f991 bl 8034754 + pbuf_free(r); + 801a432: e7e5 b.n 801a400 + if (pbuf_copy(r, p) != ERR_OK) { + 801a434: 4621 mov r1, r4 + 801a436: 4630 mov r0, r6 + 801a438: f001 fd38 bl 801beac + 801a43c: 2800 cmp r0, #0 + 801a43e: d1df bne.n 801a400 + pbuf_free(p); + 801a440: 4620 mov r0, r4 + 801a442: 4634 mov r4, r6 + 801a444: f001 fb78 bl 801bb38 + if (pbuf_add_header(p, hlen)) { + 801a448: 4629 mov r1, r5 + 801a44a: 4620 mov r0, r4 + iecho = (struct icmp_echo_hdr *)p->payload; + 801a44c: 6866 ldr r6, [r4, #4] + if (pbuf_add_header(p, hlen)) { + 801a44e: f001 fb3b bl 801bac8 + 801a452: 4602 mov r2, r0 + 801a454: 2800 cmp r0, #0 + 801a456: d1d6 bne.n 801a406 + struct ip_hdr *iphdr = (struct ip_hdr *)p->payload; + 801a458: 6860 ldr r0, [r4, #4] + ret = ip4_output_if(p, src, LWIP_IP_HDRINCL, + 801a45a: 2101 movs r1, #1 + ip4_addr_copy(iphdr->src, *src); + 801a45c: 697b ldr r3, [r7, #20] + 801a45e: 60c3 str r3, [r0, #12] + ip4_addr_copy(iphdr->dest, *ip4_current_src_addr()); + 801a460: 693b ldr r3, [r7, #16] + 801a462: 6103 str r3, [r0, #16] + IPH_TTL_SET(iphdr, ICMP_TTL); + 801a464: 23ff movs r3, #255 ; 0xff + ICMPH_TYPE_SET(iecho, ICMP_ER); + 801a466: 7032 strb r2, [r6, #0] + iecho->chksum = 0; + 801a468: 70b2 strb r2, [r6, #2] + 801a46a: 70f2 strb r2, [r6, #3] + IPH_TTL_SET(iphdr, ICMP_TTL); + 801a46c: 7203 strb r3, [r0, #8] + IPH_CHKSUM_SET(iphdr, 0); + 801a46e: 7282 strb r2, [r0, #10] + 801a470: 72c2 strb r2, [r0, #11] + ret = ip4_output_if(p, src, LWIP_IP_HDRINCL, + 801a472: 4620 mov r0, r4 + 801a474: f8cd 8008 str.w r8, [sp, #8] + 801a478: e9cd 2100 strd r2, r1, [sp] + 801a47c: 490b ldr r1, [pc, #44] ; (801a4ac ) + 801a47e: f000 f9bb bl 801a7f8 + pbuf_free(p); + 801a482: e7c0 b.n 801a406 + if (pbuf_remove_header(p, hlen + PBUF_LINK_HLEN + PBUF_LINK_ENCAPSULATION_HLEN)) { + 801a484: 4620 mov r0, r4 + 801a486: f001 fb23 bl 801bad0 + 801a48a: 2800 cmp r0, #0 + 801a48c: d0dc beq.n 801a448 + LWIP_ASSERT("icmp_input: restoring original p->payload failed\n", 0); + 801a48e: 4b04 ldr r3, [pc, #16] ; (801a4a0 ) + 801a490: 22c7 movs r2, #199 ; 0xc7 + 801a492: 4907 ldr r1, [pc, #28] ; (801a4b0 ) + 801a494: 4804 ldr r0, [pc, #16] ; (801a4a8 ) + 801a496: f01a f95d bl 8034754 + goto icmperr; + 801a49a: e7b4 b.n 801a406 + 801a49c: 2001af34 .word 0x2001af34 + 801a4a0: 0803a350 .word 0x0803a350 + 801a4a4: 0803a402 .word 0x0803a402 + 801a4a8: 08035999 .word 0x08035999 + 801a4ac: 2001af48 .word 0x2001af48 + 801a4b0: 0803a437 .word 0x0803a437 + +0801a4b4 : +{ + 801a4b4: 460a mov r2, r1 + icmp_send_response(p, ICMP_DUR, t); + 801a4b6: 2103 movs r1, #3 + 801a4b8: f7ff bf1e b.w 801a2f8 + +0801a4bc : +{ + 801a4bc: 460a mov r2, r1 + icmp_send_response(p, ICMP_TE, t); + 801a4be: 210b movs r1, #11 + 801a4c0: f7ff bf1a b.w 801a2f8 + +0801a4c4 : + * Initialize all modules. + * Use this in NO_SYS mode. Use tcpip_init() otherwise. + */ +void +lwip_init(void) +{ + 801a4c4: b508 push {r3, lr} +#endif + + /* Modules initialization */ + stats_init(); +#if !NO_SYS + sys_init(); + 801a4c6: f001 fe15 bl 801c0f4 +#endif /* !NO_SYS */ + mem_init(); + 801a4ca: f000 fd9d bl 801b008 + memp_init(); + 801a4ce: f001 f863 bl 801b598 + pbuf_init(); + netif_init(); + 801a4d2: f001 f91b bl 801b70c +#endif /* LWIP_IPV4 */ +#if LWIP_RAW + raw_init(); +#endif /* LWIP_RAW */ +#if LWIP_UDP + udp_init(); + 801a4d6: f005 f89b bl 801f610 +#endif /* LWIP_UDP */ +#if LWIP_TCP + tcp_init(); + 801a4da: f001 fe81 bl 801c1e0 +#endif + +#if LWIP_TIMERS + sys_timeouts_init(); +#endif /* LWIP_TIMERS */ +} + 801a4de: e8bd 4008 ldmia.w sp!, {r3, lr} + sys_timeouts_init(); + 801a4e2: f005 b84f b.w 801f584 + ... + +0801a4e8 : +#endif /* IP_FORWARD */ + +/** Return true if the current input packet should be accepted on this netif */ +static int +ip4_input_accept(struct netif *netif) +{ + 801a4e8: b508 push {r3, lr} + ip4_addr_get_u32(ip4_current_dest_addr()) & ip4_addr_get_u32(netif_ip4_netmask(netif)), + ip4_addr_get_u32(netif_ip4_addr(netif)) & ip4_addr_get_u32(netif_ip4_netmask(netif)), + ip4_addr_get_u32(ip4_current_dest_addr()) & ~ip4_addr_get_u32(netif_ip4_netmask(netif)))); + + /* interface is up and configured? */ + if ((netif_is_up(netif)) && (!ip4_addr_isany_val(*netif_ip4_addr(netif)))) { + 801a4ea: f890 3031 ldrb.w r3, [r0, #49] ; 0x31 +{ + 801a4ee: 4601 mov r1, r0 + if ((netif_is_up(netif)) && (!ip4_addr_isany_val(*netif_ip4_addr(netif)))) { + 801a4f0: f013 0301 ands.w r3, r3, #1 + 801a4f4: d00b beq.n 801a50e + 801a4f6: 6843 ldr r3, [r0, #4] + 801a4f8: b14b cbz r3, 801a50e + /* unicast to this interface address? */ + if (ip4_addr_cmp(ip4_current_dest_addr(), netif_ip4_addr(netif)) || + 801a4fa: 4a07 ldr r2, [pc, #28] ; (801a518 ) + 801a4fc: 6950 ldr r0, [r2, #20] + 801a4fe: 4283 cmp r3, r0 + 801a500: d007 beq.n 801a512 + /* or broadcast on this interface network address? */ + ip4_addr_isbroadcast(ip4_current_dest_addr(), netif) + 801a502: f000 f98a bl 801a81a + if (ip4_addr_cmp(ip4_current_dest_addr(), netif_ip4_addr(netif)) || + 801a506: 3800 subs r0, #0 + 801a508: bf18 it ne + 801a50a: 2001 movne r0, #1 + return 1; + } +#endif /* LWIP_AUTOIP */ + } + return 0; +} + 801a50c: bd08 pop {r3, pc} + return 0; + 801a50e: 4618 mov r0, r3 + 801a510: e7fc b.n 801a50c + return 1; + 801a512: 2001 movs r0, #1 + 801a514: e7fa b.n 801a50c + 801a516: bf00 nop + 801a518: 2001af34 .word 0x2001af34 + +0801a51c : + NETIF_FOREACH(netif) { + 801a51c: 4b14 ldr r3, [pc, #80] ; (801a570 ) +{ + 801a51e: b530 push {r4, r5, lr} + NETIF_FOREACH(netif) { + 801a520: 681b ldr r3, [r3, #0] + 801a522: b97b cbnz r3, 801a544 + if ((netif_default == NULL) || !netif_is_up(netif_default) || !netif_is_link_up(netif_default) || + 801a524: 4a13 ldr r2, [pc, #76] ; (801a574 ) + 801a526: 6812 ldr r2, [r2, #0] + 801a528: b1fa cbz r2, 801a56a + 801a52a: f892 1031 ldrb.w r1, [r2, #49] ; 0x31 + 801a52e: f001 0105 and.w r1, r1, #5 + 801a532: 2905 cmp r1, #5 + 801a534: d119 bne.n 801a56a + 801a536: 6851 ldr r1, [r2, #4] + 801a538: b1b9 cbz r1, 801a56a + ip4_addr_isany_val(*netif_ip4_addr(netif_default)) || ip4_addr_isloopback(dest)) { + 801a53a: 7801 ldrb r1, [r0, #0] + 801a53c: 297f cmp r1, #127 ; 0x7f + 801a53e: bf18 it ne + 801a540: 4613 movne r3, r2 + 801a542: e012 b.n 801a56a + if (netif_is_up(netif) && netif_is_link_up(netif) && !ip4_addr_isany_val(*netif_ip4_addr(netif))) { + 801a544: f893 1031 ldrb.w r1, [r3, #49] ; 0x31 + 801a548: 07cd lsls r5, r1, #31 + 801a54a: d5e9 bpl.n 801a520 + 801a54c: 074c lsls r4, r1, #29 + 801a54e: d5e7 bpl.n 801a520 + 801a550: 685a ldr r2, [r3, #4] + 801a552: 2a00 cmp r2, #0 + 801a554: d0e4 beq.n 801a520 + if (ip4_addr_netcmp(dest, netif_ip4_addr(netif), netif_ip4_netmask(netif))) { + 801a556: 6804 ldr r4, [r0, #0] + 801a558: 689d ldr r5, [r3, #8] + 801a55a: 4062 eors r2, r4 + 801a55c: 422a tst r2, r5 + 801a55e: d004 beq.n 801a56a + if (((netif->flags & NETIF_FLAG_BROADCAST) == 0) && ip4_addr_cmp(dest, netif_ip4_gw(netif))) { + 801a560: 078a lsls r2, r1, #30 + 801a562: d4dd bmi.n 801a520 + 801a564: 68da ldr r2, [r3, #12] + 801a566: 4294 cmp r4, r2 + 801a568: d1da bne.n 801a520 +} + 801a56a: 4618 mov r0, r3 + 801a56c: bd30 pop {r4, r5, pc} + 801a56e: bf00 nop + 801a570: 2001e69c .word 0x2001e69c + 801a574: 2001e698 .word 0x2001e698 + +0801a578 : + * @return ERR_OK if the packet was processed (could return ERR_* if it wasn't + * processed, but currently always returns ERR_OK) + */ +err_t +ip4_input(struct pbuf *p, struct netif *inp) +{ + 801a578: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} + + IP_STATS_INC(ip.recv); + MIB2_STATS_INC(mib2.ipinreceives); + + /* identify the IP header */ + iphdr = (struct ip_hdr *)p->payload; + 801a57c: f8d0 8004 ldr.w r8, [r0, #4] +{ + 801a580: 4604 mov r4, r0 + 801a582: 460e mov r6, r1 + if (IPH_V(iphdr) != 4) { + 801a584: f898 5000 ldrb.w r5, [r8] + 801a588: 092b lsrs r3, r5, #4 + 801a58a: 2b04 cmp r3, #4 + 801a58c: d005 beq.n 801a59a + LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_WARNING, ("IP packet dropped due to bad version number %"U16_F"\n", (u16_t)IPH_V(iphdr))); + ip4_debug_print(p); + pbuf_free(p); + 801a58e: 4620 mov r0, r4 + 801a590: f001 fad2 bl 801bb38 + ip_data.current_ip_header_tot_len = 0; + ip4_addr_set_any(ip4_current_src_addr()); + ip4_addr_set_any(ip4_current_dest_addr()); + + return ERR_OK; +} + 801a594: 2000 movs r0, #0 + 801a596: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} + iphdr_len = lwip_ntohs(IPH_LEN(iphdr)); + 801a59a: f8b8 0002 ldrh.w r0, [r8, #2] + iphdr_hlen = IPH_HL_BYTES(iphdr); + 801a59e: f005 050f and.w r5, r5, #15 + iphdr_len = lwip_ntohs(IPH_LEN(iphdr)); + 801a5a2: f7fe f99c bl 80188de + if (iphdr_len < p->tot_len) { + 801a5a6: 8923 ldrh r3, [r4, #8] + iphdr_hlen = IPH_HL_BYTES(iphdr); + 801a5a8: ea4f 0985 mov.w r9, r5, lsl #2 + iphdr_len = lwip_ntohs(IPH_LEN(iphdr)); + 801a5ac: 4607 mov r7, r0 + if (iphdr_len < p->tot_len) { + 801a5ae: 4283 cmp r3, r0 + iphdr_hlen = IPH_HL_BYTES(iphdr); + 801a5b0: 464d mov r5, r9 + if (iphdr_len < p->tot_len) { + 801a5b2: d903 bls.n 801a5bc + pbuf_realloc(p, iphdr_len); + 801a5b4: 4601 mov r1, r0 + 801a5b6: 4620 mov r0, r4 + 801a5b8: f001 fbb8 bl 801bd2c + if ((iphdr_hlen > p->len) || (iphdr_len > p->tot_len) || (iphdr_hlen < IP_HLEN)) { + 801a5bc: 8963 ldrh r3, [r4, #10] + 801a5be: 42ab cmp r3, r5 + 801a5c0: d3e5 bcc.n 801a58e + 801a5c2: 8923 ldrh r3, [r4, #8] + 801a5c4: 42bb cmp r3, r7 + 801a5c6: d3e2 bcc.n 801a58e + 801a5c8: 2d13 cmp r5, #19 + 801a5ca: d9e0 bls.n 801a58e + ip_addr_copy_from_ip4(ip_data.current_iphdr_dest, iphdr->dest); + 801a5cc: f8d8 3010 ldr.w r3, [r8, #16] + 801a5d0: 4d49 ldr r5, [pc, #292] ; (801a6f8 ) + 801a5d2: 616b str r3, [r5, #20] + if (ip4_addr_ismulticast(ip4_current_dest_addr())) { + 801a5d4: f003 03f0 and.w r3, r3, #240 ; 0xf0 + ip_addr_copy_from_ip4(ip_data.current_iphdr_src, iphdr->src); + 801a5d8: f8d8 200c ldr.w r2, [r8, #12] + if (ip4_addr_ismulticast(ip4_current_dest_addr())) { + 801a5dc: 2be0 cmp r3, #224 ; 0xe0 + ip_addr_copy_from_ip4(ip_data.current_iphdr_src, iphdr->src); + 801a5de: 612a str r2, [r5, #16] + if (ip4_addr_ismulticast(ip4_current_dest_addr())) { + 801a5e0: d143 bne.n 801a66a + if ((netif_is_up(inp)) && (!ip4_addr_isany_val(*netif_ip4_addr(inp)))) { + 801a5e2: f896 3031 ldrb.w r3, [r6, #49] ; 0x31 + 801a5e6: 07db lsls r3, r3, #31 + 801a5e8: d405 bmi.n 801a5f6 + if (IPH_PROTO(iphdr) == IP_PROTO_UDP) { + 801a5ea: f898 3009 ldrb.w r3, [r8, #9] + 801a5ee: 2b11 cmp r3, #17 + 801a5f0: d053 beq.n 801a69a + 801a5f2: 2700 movs r7, #0 + 801a5f4: e003 b.n 801a5fe + if ((netif_is_up(inp)) && (!ip4_addr_isany_val(*netif_ip4_addr(inp)))) { + 801a5f6: 6873 ldr r3, [r6, #4] + 801a5f8: 2b00 cmp r3, #0 + 801a5fa: d0f6 beq.n 801a5ea +{ + 801a5fc: 4637 mov r7, r6 + && !ip4_addr_isany_val(*ip4_current_src_addr()) + 801a5fe: 6928 ldr r0, [r5, #16] + 801a600: b148 cbz r0, 801a616 + if ((ip4_addr_isbroadcast(ip4_current_src_addr(), inp)) || + 801a602: 4631 mov r1, r6 + 801a604: f000 f909 bl 801a81a + 801a608: 2800 cmp r0, #0 + 801a60a: d1c0 bne.n 801a58e + (ip4_addr_ismulticast(ip4_current_src_addr()))) { + 801a60c: 692b ldr r3, [r5, #16] + 801a60e: f003 03f0 and.w r3, r3, #240 ; 0xf0 + if ((ip4_addr_isbroadcast(ip4_current_src_addr(), inp)) || + 801a612: 2be0 cmp r3, #224 ; 0xe0 + 801a614: d0bb beq.n 801a58e + if (netif == NULL) { + 801a616: 2f00 cmp r7, #0 + 801a618: d0b9 beq.n 801a58e + if ((IPH_OFFSET(iphdr) & PP_HTONS(IP_OFFMASK | IP_MF)) != 0) { + 801a61a: f8b8 3006 ldrh.w r3, [r8, #6] + 801a61e: f023 03c0 bic.w r3, r3, #192 ; 0xc0 + 801a622: b13b cbz r3, 801a634 + p = ip4_reass(p); + 801a624: 4620 mov r0, r4 + 801a626: f000 fa2b bl 801aa80 + if (p == NULL) { + 801a62a: 4604 mov r4, r0 + 801a62c: 2800 cmp r0, #0 + 801a62e: d0b1 beq.n 801a594 + iphdr = (const struct ip_hdr *)p->payload; + 801a630: f8d0 8004 ldr.w r8, [r0, #4] + ip_data.current_ip4_header = iphdr; + 801a634: f8c5 8008 str.w r8, [r5, #8] + pbuf_remove_header(p, iphdr_hlen); /* Move to payload, no check necessary. */ + 801a638: 4649 mov r1, r9 + 801a63a: 4620 mov r0, r4 + ip_data.current_input_netif = inp; + 801a63c: e9c5 7600 strd r7, r6, [r5] + ip_data.current_ip_header_tot_len = IPH_HL_BYTES(iphdr); + 801a640: f898 3000 ldrb.w r3, [r8] + 801a644: f003 030f and.w r3, r3, #15 + 801a648: 009b lsls r3, r3, #2 + 801a64a: 81ab strh r3, [r5, #12] + pbuf_remove_header(p, iphdr_hlen); /* Move to payload, no check necessary. */ + 801a64c: f001 fa40 bl 801bad0 + switch (IPH_PROTO(iphdr)) { + 801a650: f898 3009 ldrb.w r3, [r8, #9] + 801a654: 2b06 cmp r3, #6 + 801a656: d034 beq.n 801a6c2 + 801a658: 2b11 cmp r3, #17 + 801a65a: d026 beq.n 801a6aa + 801a65c: 2b01 cmp r3, #1 + 801a65e: d135 bne.n 801a6cc + icmp_input(p, inp); + 801a660: 4631 mov r1, r6 + 801a662: 4620 mov r0, r4 + 801a664: f7ff fe90 bl 801a388 + break; + 801a668: e023 b.n 801a6b2 + if (ip4_input_accept(inp)) { + 801a66a: 4630 mov r0, r6 + 801a66c: f7ff ff3c bl 801a4e8 + 801a670: b980 cbnz r0, 801a694 + if (!ip4_addr_isloopback(ip4_current_dest_addr())) + 801a672: 7d2b ldrb r3, [r5, #20] + 801a674: 2b7f cmp r3, #127 ; 0x7f + 801a676: d0b8 beq.n 801a5ea + NETIF_FOREACH(netif) { + 801a678: 4b20 ldr r3, [pc, #128] ; (801a6fc ) + 801a67a: 681f ldr r7, [r3, #0] + 801a67c: 2f00 cmp r7, #0 + 801a67e: d0b4 beq.n 801a5ea + if (netif == inp) { + 801a680: 42b7 cmp r7, r6 + 801a682: d101 bne.n 801a688 + NETIF_FOREACH(netif) { + 801a684: 683f ldr r7, [r7, #0] + 801a686: e7f9 b.n 801a67c + if (ip4_input_accept(netif)) { + 801a688: 4638 mov r0, r7 + 801a68a: f7ff ff2d bl 801a4e8 + 801a68e: 2800 cmp r0, #0 + 801a690: d0f8 beq.n 801a684 + 801a692: e7b4 b.n 801a5fe + if (netif == NULL) { + 801a694: 2e00 cmp r6, #0 + 801a696: d1b1 bne.n 801a5fc + 801a698: e7a7 b.n 801a5ea + if (IP_ACCEPT_LINK_LAYER_ADDRESSED_PORT(udphdr->dest)) { + 801a69a: eb08 0309 add.w r3, r8, r9 + 801a69e: 885b ldrh r3, [r3, #2] + 801a6a0: f5b3 4f88 cmp.w r3, #17408 ; 0x4400 + 801a6a4: d1a5 bne.n 801a5f2 + 801a6a6: 4637 mov r7, r6 + 801a6a8: e7b5 b.n 801a616 + udp_input(p, inp); + 801a6aa: 4631 mov r1, r6 + 801a6ac: 4620 mov r0, r4 + 801a6ae: f004 ffbb bl 801f628 + ip_data.current_netif = NULL; + 801a6b2: 2300 movs r3, #0 + ip_data.current_input_netif = NULL; + 801a6b4: e9c5 3300 strd r3, r3, [r5] + ip_data.current_ip4_header = NULL; + 801a6b8: 60ab str r3, [r5, #8] + ip_data.current_ip_header_tot_len = 0; + 801a6ba: 81ab strh r3, [r5, #12] + ip4_addr_set_any(ip4_current_dest_addr()); + 801a6bc: e9c5 3304 strd r3, r3, [r5, #16] + return ERR_OK; + 801a6c0: e768 b.n 801a594 + tcp_input(p, inp); + 801a6c2: 4631 mov r1, r6 + 801a6c4: 4620 mov r0, r4 + 801a6c6: f003 f9c5 bl 801da54 + break; + 801a6ca: e7f2 b.n 801a6b2 + if (!ip4_addr_isbroadcast(ip4_current_dest_addr(), netif) && + 801a6cc: 4639 mov r1, r7 + 801a6ce: 6968 ldr r0, [r5, #20] + 801a6d0: f000 f8a3 bl 801a81a + 801a6d4: b960 cbnz r0, 801a6f0 + !ip4_addr_ismulticast(ip4_current_dest_addr())) { + 801a6d6: 696b ldr r3, [r5, #20] + 801a6d8: f003 03f0 and.w r3, r3, #240 ; 0xf0 + if (!ip4_addr_isbroadcast(ip4_current_dest_addr(), netif) && + 801a6dc: 2be0 cmp r3, #224 ; 0xe0 + 801a6de: d007 beq.n 801a6f0 + pbuf_header_force(p, (s16_t)iphdr_hlen); /* Move to ip header, no check necessary. */ + 801a6e0: 4649 mov r1, r9 + 801a6e2: 4620 mov r0, r4 + 801a6e4: f001 fa20 bl 801bb28 + icmp_dest_unreach(p, ICMP_DUR_PROTO); + 801a6e8: 2102 movs r1, #2 + 801a6ea: 4620 mov r0, r4 + 801a6ec: f7ff fee2 bl 801a4b4 + pbuf_free(p); + 801a6f0: 4620 mov r0, r4 + 801a6f2: f001 fa21 bl 801bb38 + break; + 801a6f6: e7dc b.n 801a6b2 + 801a6f8: 2001af34 .word 0x2001af34 + 801a6fc: 2001e69c .word 0x2001e69c + +0801a700 : + */ +err_t +ip4_output_if_src(struct pbuf *p, const ip4_addr_t *src, const ip4_addr_t *dest, + u8_t ttl, u8_t tos, + u8_t proto, struct netif *netif) +{ + 801a700: e92d 47f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, r9, sl, lr} + 801a704: 4698 mov r8, r3 +#if CHECKSUM_GEN_IP_INLINE + u32_t chk_sum = 0; +#endif /* CHECKSUM_GEN_IP_INLINE */ + + LWIP_ASSERT_CORE_LOCKED(); + LWIP_IP_CHECK_PBUF_REF_COUNT_FOR_TX(p); + 801a706: 7b83 ldrb r3, [r0, #14] +{ + 801a708: 4604 mov r4, r0 + 801a70a: 4689 mov r9, r1 + LWIP_IP_CHECK_PBUF_REF_COUNT_FOR_TX(p); + 801a70c: 2b01 cmp r3, #1 +{ + 801a70e: 4616 mov r6, r2 + 801a710: 9f0c ldr r7, [sp, #48] ; 0x30 + LWIP_IP_CHECK_PBUF_REF_COUNT_FOR_TX(p); + 801a712: d006 beq.n 801a722 + 801a714: 4b32 ldr r3, [pc, #200] ; (801a7e0 ) + 801a716: f44f 7255 mov.w r2, #852 ; 0x354 + 801a71a: 4932 ldr r1, [pc, #200] ; (801a7e4 ) + 801a71c: 4832 ldr r0, [pc, #200] ; (801a7e8 ) + 801a71e: f01a f819 bl 8034754 + + MIB2_STATS_INC(mib2.ipoutrequests); + + /* Should the IP header be generated or is it already included in p? */ + if (dest != LWIP_IP_HDRINCL) { + 801a722: 2e00 cmp r6, #0 + 801a724: d04e beq.n 801a7c4 + } +#endif /* CHECKSUM_GEN_IP_INLINE */ + } +#endif /* IP_OPTIONS_SEND */ + /* generate IP header */ + if (pbuf_add_header(p, IP_HLEN)) { + 801a726: 2114 movs r1, #20 + 801a728: 4620 mov r0, r4 + 801a72a: f001 f9cd bl 801bac8 + 801a72e: b120 cbz r0, 801a73a + LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("ip4_output: not enough room for IP header in pbuf\n")); + + IP_STATS_INC(ip.err); + MIB2_STATS_INC(mib2.ipoutdiscards); + return ERR_BUF; + 801a730: f06f 0001 mvn.w r0, #1 + } +#endif /* IP_FRAG */ + + LWIP_DEBUGF(IP_DEBUG, ("ip4_output_if: call netif->output()\n")); + return netif->output(netif, p, dest); +} + 801a734: b002 add sp, #8 + 801a736: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + LWIP_ASSERT("check that first pbuf can hold struct ip_hdr", + 801a73a: 8963 ldrh r3, [r4, #10] + iphdr = (struct ip_hdr *)p->payload; + 801a73c: 6865 ldr r5, [r4, #4] + LWIP_ASSERT("check that first pbuf can hold struct ip_hdr", + 801a73e: 2b13 cmp r3, #19 + 801a740: d806 bhi.n 801a750 + 801a742: 4b27 ldr r3, [pc, #156] ; (801a7e0 ) + 801a744: f44f 7262 mov.w r2, #904 ; 0x388 + 801a748: 4928 ldr r1, [pc, #160] ; (801a7ec ) + 801a74a: 4827 ldr r0, [pc, #156] ; (801a7e8 ) + 801a74c: f01a f802 bl 8034754 + IPH_PROTO_SET(iphdr, proto); + 801a750: f89d 302c ldrb.w r3, [sp, #44] ; 0x2c + IPH_TTL_SET(iphdr, ttl); + 801a754: f885 8008 strb.w r8, [r5, #8] + IPH_OFFSET_SET(iphdr, 0); + 801a758: f04f 0800 mov.w r8, #0 + IPH_PROTO_SET(iphdr, proto); + 801a75c: 726b strb r3, [r5, #9] + ip4_addr_copy(iphdr->dest, *dest); + 801a75e: 6833 ldr r3, [r6, #0] + IPH_ID_SET(iphdr, lwip_htons(ip_id)); + 801a760: f8df a090 ldr.w sl, [pc, #144] ; 801a7f4 + ip4_addr_copy(iphdr->dest, *dest); + 801a764: 612b str r3, [r5, #16] + IPH_VHL_SET(iphdr, 4, ip_hlen / 4); + 801a766: 2345 movs r3, #69 ; 0x45 + 801a768: 702b strb r3, [r5, #0] + IPH_TOS_SET(iphdr, tos); + 801a76a: f89d 3028 ldrb.w r3, [sp, #40] ; 0x28 + 801a76e: 706b strb r3, [r5, #1] + IPH_LEN_SET(iphdr, lwip_htons(p->tot_len)); + 801a770: 8920 ldrh r0, [r4, #8] + 801a772: f7fe f8b4 bl 80188de + IPH_OFFSET_SET(iphdr, 0); + 801a776: f885 8006 strb.w r8, [r5, #6] + IPH_LEN_SET(iphdr, lwip_htons(p->tot_len)); + 801a77a: 8068 strh r0, [r5, #2] + IPH_OFFSET_SET(iphdr, 0); + 801a77c: f885 8007 strb.w r8, [r5, #7] + IPH_ID_SET(iphdr, lwip_htons(ip_id)); + 801a780: f8ba 0000 ldrh.w r0, [sl] + 801a784: f7fe f8ab bl 80188de + ++ip_id; + 801a788: f8ba 3000 ldrh.w r3, [sl] + IPH_ID_SET(iphdr, lwip_htons(ip_id)); + 801a78c: 80a8 strh r0, [r5, #4] + ++ip_id; + 801a78e: 3301 adds r3, #1 + 801a790: f8aa 3000 strh.w r3, [sl] + if (src == NULL) { + 801a794: f1b9 0f00 cmp.w r9, #0 + 801a798: d111 bne.n 801a7be + ip4_addr_copy(iphdr->src, *IP4_ADDR_ANY4); + 801a79a: 4b15 ldr r3, [pc, #84] ; (801a7f0 ) + 801a79c: 681b ldr r3, [r3, #0] + 801a79e: 60eb str r3, [r5, #12] + IPH_CHKSUM_SET(iphdr, 0); + 801a7a0: f885 800a strb.w r8, [r5, #10] + 801a7a4: f885 800b strb.w r8, [r5, #11] + if (netif->mtu && (p->tot_len > netif->mtu)) { + 801a7a8: 8d3b ldrh r3, [r7, #40] ; 0x28 + 801a7aa: b19b cbz r3, 801a7d4 + 801a7ac: 8922 ldrh r2, [r4, #8] + 801a7ae: 429a cmp r2, r3 + 801a7b0: d910 bls.n 801a7d4 + return ip4_frag(p, netif, dest); + 801a7b2: 4632 mov r2, r6 + 801a7b4: 4639 mov r1, r7 + 801a7b6: 4620 mov r0, r4 + 801a7b8: f000 fb3a bl 801ae30 + 801a7bc: e7ba b.n 801a734 + ip4_addr_copy(iphdr->src, *src); + 801a7be: f8d9 3000 ldr.w r3, [r9] + 801a7c2: e7ec b.n 801a79e + if (p->len < IP_HLEN) { + 801a7c4: 8963 ldrh r3, [r4, #10] + 801a7c6: 2b13 cmp r3, #19 + 801a7c8: d9b2 bls.n 801a730 + ip4_addr_copy(dest_addr, iphdr->dest); + 801a7ca: 6863 ldr r3, [r4, #4] + dest = &dest_addr; + 801a7cc: ae01 add r6, sp, #4 + ip4_addr_copy(dest_addr, iphdr->dest); + 801a7ce: 691b ldr r3, [r3, #16] + 801a7d0: 9301 str r3, [sp, #4] + dest = &dest_addr; + 801a7d2: e7e9 b.n 801a7a8 + return netif->output(netif, p, dest); + 801a7d4: 697b ldr r3, [r7, #20] + 801a7d6: 4632 mov r2, r6 + 801a7d8: 4621 mov r1, r4 + 801a7da: 4638 mov r0, r7 + 801a7dc: 4798 blx r3 + 801a7de: e7a9 b.n 801a734 + 801a7e0: 0803a469 .word 0x0803a469 + 801a7e4: 0803a4ee .word 0x0803a4ee + 801a7e8: 08035999 .word 0x08035999 + 801a7ec: 0803a4fa .word 0x0803a4fa + 801a7f0: 0803a528 .word 0x0803a528 + 801a7f4: 2001af4c .word 0x2001af4c + +0801a7f8 : +{ + 801a7f8: b4f0 push {r4, r5, r6, r7} + 801a7fa: 9c06 ldr r4, [sp, #24] + 801a7fc: f89d 5010 ldrb.w r5, [sp, #16] + 801a800: f89d 6014 ldrb.w r6, [sp, #20] + if (dest != LWIP_IP_HDRINCL) { + 801a804: b11a cbz r2, 801a80e + if (ip4_addr_isany(src)) { + 801a806: b109 cbz r1, 801a80c + 801a808: 680f ldr r7, [r1, #0] + 801a80a: b907 cbnz r7, 801a80e + src_used = netif_ip4_addr(netif); + 801a80c: 1d21 adds r1, r4, #4 + return ip4_output_if_src(p, src_used, dest, ttl, tos, proto, netif); + 801a80e: 9504 str r5, [sp, #16] + 801a810: e9cd 6405 strd r6, r4, [sp, #20] +} + 801a814: bcf0 pop {r4, r5, r6, r7} + return ip4_output_if_src(p, src_used, dest, ttl, tos, proto, netif); + 801a816: f7ff bf73 b.w 801a700 + +0801a81a : +{ + ip4_addr_t ipaddr; + ip4_addr_set_u32(&ipaddr, addr); + + /* all ones (broadcast) or all zeroes (old skool broadcast) */ + if ((~addr == IPADDR_ANY) || + 801a81a: 1e43 subs r3, r0, #1 + 801a81c: 3303 adds r3, #3 + 801a81e: d813 bhi.n 801a848 + (addr == IPADDR_ANY)) { + return 1; + /* no broadcast support on this network interface? */ + } else if ((netif->flags & NETIF_FLAG_BROADCAST) == 0) { + 801a820: f891 3031 ldrb.w r3, [r1, #49] ; 0x31 + 801a824: f013 0302 ands.w r3, r3, #2 + 801a828: d00c beq.n 801a844 + /* the given address cannot be a broadcast address + * nor can we check against any broadcast addresses */ + return 0; + /* address matches network interface address exactly? => no broadcast */ + } else if (addr == ip4_addr_get_u32(netif_ip4_addr(netif))) { + 801a82a: 684b ldr r3, [r1, #4] + 801a82c: 4283 cmp r3, r0 + 801a82e: d00d beq.n 801a84c + return 0; + /* on the same (sub) network... */ + } else if (ip4_addr_netcmp(&ipaddr, netif_ip4_addr(netif), netif_ip4_netmask(netif)) + 801a830: 688a ldr r2, [r1, #8] + 801a832: 4043 eors r3, r0 + 801a834: 4213 tst r3, r2 + 801a836: d109 bne.n 801a84c + /* ...and host identifier bits are all ones? =>... */ + && ((addr & ~ip4_addr_get_u32(netif_ip4_netmask(netif))) == + 801a838: 43d3 mvns r3, r2 + 801a83a: ea20 0002 bic.w r0, r0, r2 + return 1; + 801a83e: 1ac2 subs r2, r0, r3 + 801a840: 4253 negs r3, r2 + 801a842: 4153 adcs r3, r2 + /* => network broadcast address */ + return 1; + } else { + return 0; + } +} + 801a844: 4618 mov r0, r3 + 801a846: 4770 bx lr + return 1; + 801a848: 2301 movs r3, #1 + 801a84a: e7fb b.n 801a844 + return 0; + 801a84c: 2300 movs r3, #0 + 801a84e: e7f9 b.n 801a844 + +0801a850 : + * Dequeues a datagram from the datagram queue. Doesn't deallocate the pbufs. + * @param ipr points to the queue entry to dequeue + */ +static void +ip_reass_dequeue_datagram(struct ip_reassdata *ipr, struct ip_reassdata *prev) +{ + 801a850: b538 push {r3, r4, r5, lr} + /* dequeue the reass struct */ + if (reassdatagrams == ipr) { + 801a852: 4b0c ldr r3, [pc, #48] ; (801a884 ) +{ + 801a854: 4604 mov r4, r0 + 801a856: 460d mov r5, r1 + if (reassdatagrams == ipr) { + 801a858: 681a ldr r2, [r3, #0] + 801a85a: 4282 cmp r2, r0 + 801a85c: d107 bne.n 801a86e + /* it was the first in the list */ + reassdatagrams = ipr->next; + 801a85e: 6802 ldr r2, [r0, #0] + 801a860: 601a str r2, [r3, #0] + LWIP_ASSERT("sanity check linked list", prev != NULL); + prev->next = ipr->next; + } + + /* now we can free the ip_reassdata struct */ + memp_free(MEMP_REASSDATA, ipr); + 801a862: 4621 mov r1, r4 + 801a864: 2004 movs r0, #4 +} + 801a866: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} + memp_free(MEMP_REASSDATA, ipr); + 801a86a: f000 bee9 b.w 801b640 + LWIP_ASSERT("sanity check linked list", prev != NULL); + 801a86e: b931 cbnz r1, 801a87e + 801a870: 4b05 ldr r3, [pc, #20] ; (801a888 ) + 801a872: f240 1245 movw r2, #325 ; 0x145 + 801a876: 4905 ldr r1, [pc, #20] ; (801a88c ) + 801a878: 4805 ldr r0, [pc, #20] ; (801a890 ) + 801a87a: f019 ff6b bl 8034754 + prev->next = ipr->next; + 801a87e: 6823 ldr r3, [r4, #0] + 801a880: 602b str r3, [r5, #0] + 801a882: e7ee b.n 801a862 + 801a884: 2001af50 .word 0x2001af50 + 801a888: 0803a530 .word 0x0803a530 + 801a88c: 0803a5ba .word 0x0803a5ba + 801a890: 08035999 .word 0x08035999 + +0801a894 : + LWIP_ASSERT("prev != ipr", prev != ipr); + 801a894: 4281 cmp r1, r0 +{ + 801a896: e92d 4ff8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} + 801a89a: 4604 mov r4, r0 + 801a89c: 460e mov r6, r1 + LWIP_ASSERT("prev != ipr", prev != ipr); + 801a89e: d105 bne.n 801a8ac + 801a8a0: 4b2f ldr r3, [pc, #188] ; (801a960 ) + 801a8a2: 22ab movs r2, #171 ; 0xab + 801a8a4: 492f ldr r1, [pc, #188] ; (801a964 ) + 801a8a6: 4830 ldr r0, [pc, #192] ; (801a968 ) + 801a8a8: f019 ff54 bl 8034754 + if (prev != NULL) { + 801a8ac: b146 cbz r6, 801a8c0 + LWIP_ASSERT("prev->next == ipr", prev->next == ipr); + 801a8ae: 6833 ldr r3, [r6, #0] + 801a8b0: 42a3 cmp r3, r4 + 801a8b2: d005 beq.n 801a8c0 + 801a8b4: 4b2a ldr r3, [pc, #168] ; (801a960 ) + 801a8b6: 22ad movs r2, #173 ; 0xad + 801a8b8: 492c ldr r1, [pc, #176] ; (801a96c ) + 801a8ba: 482b ldr r0, [pc, #172] ; (801a968 ) + 801a8bc: f019 ff4a bl 8034754 + iprh = (struct ip_reass_helper *)ipr->p->payload; + 801a8c0: 6867 ldr r7, [r4, #4] + 801a8c2: 687b ldr r3, [r7, #4] + if (iprh->start == 0) { + 801a8c4: 889a ldrh r2, [r3, #4] + 801a8c6: bb92 cbnz r2, 801a92e + ipr->p = iprh->next_pbuf; + 801a8c8: 681a ldr r2, [r3, #0] + SMEMCPY(p->payload, &ipr->iphdr, IP_HLEN); + 801a8ca: f104 011c add.w r1, r4, #28 + ipr->p = iprh->next_pbuf; + 801a8ce: 6062 str r2, [r4, #4] + SMEMCPY(p->payload, &ipr->iphdr, IP_HLEN); + 801a8d0: f104 0208 add.w r2, r4, #8 + 801a8d4: f852 0b04 ldr.w r0, [r2], #4 + 801a8d8: 428a cmp r2, r1 + 801a8da: f843 0b04 str.w r0, [r3], #4 + 801a8de: d1f9 bne.n 801a8d4 + icmp_time_exceeded(p, ICMP_TE_FRAG); + 801a8e0: 2101 movs r1, #1 + 801a8e2: 4638 mov r0, r7 + 801a8e4: f7ff fdea bl 801a4bc + clen = pbuf_clen(p); + 801a8e8: 4638 mov r0, r7 + 801a8ea: f001 fa77 bl 801bddc + 801a8ee: 4605 mov r5, r0 + pbuf_free(p); + 801a8f0: 4638 mov r0, r7 + 801a8f2: f001 f921 bl 801bb38 + p = ipr->p; + 801a8f6: 6867 ldr r7, [r4, #4] + LWIP_ASSERT("pbufs_freed + clen <= 0xffff", pbufs_freed + clen <= 0xffff); + 801a8f8: f8df 8064 ldr.w r8, [pc, #100] ; 801a960 + 801a8fc: f8df 9078 ldr.w r9, [pc, #120] ; 801a978 + 801a900: f8df a064 ldr.w sl, [pc, #100] ; 801a968 + while (p != NULL) { + 801a904: b9af cbnz r7, 801a932 + ip_reass_dequeue_datagram(ipr, prev); + 801a906: 4620 mov r0, r4 + LWIP_ASSERT("ip_reass_pbufcount >= pbufs_freed", ip_reass_pbufcount >= pbufs_freed); + 801a908: 4c19 ldr r4, [pc, #100] ; (801a970 ) + ip_reass_dequeue_datagram(ipr, prev); + 801a90a: 4631 mov r1, r6 + 801a90c: f7ff ffa0 bl 801a850 + LWIP_ASSERT("ip_reass_pbufcount >= pbufs_freed", ip_reass_pbufcount >= pbufs_freed); + 801a910: 8823 ldrh r3, [r4, #0] + 801a912: 42ab cmp r3, r5 + 801a914: d205 bcs.n 801a922 + 801a916: 4b12 ldr r3, [pc, #72] ; (801a960 ) + 801a918: 22d2 movs r2, #210 ; 0xd2 + 801a91a: 4916 ldr r1, [pc, #88] ; (801a974 ) + 801a91c: 4812 ldr r0, [pc, #72] ; (801a968 ) + 801a91e: f019 ff19 bl 8034754 + ip_reass_pbufcount = (u16_t)(ip_reass_pbufcount - pbufs_freed); + 801a922: 8823 ldrh r3, [r4, #0] +} + 801a924: 4628 mov r0, r5 + ip_reass_pbufcount = (u16_t)(ip_reass_pbufcount - pbufs_freed); + 801a926: 1b5b subs r3, r3, r5 + 801a928: 8023 strh r3, [r4, #0] +} + 801a92a: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} + u16_t pbufs_freed = 0; + 801a92e: 2500 movs r5, #0 + 801a930: e7e1 b.n 801a8f6 + iprh = (struct ip_reass_helper *)p->payload; + 801a932: 687b ldr r3, [r7, #4] + clen = pbuf_clen(pcur); + 801a934: 4638 mov r0, r7 + p = iprh->next_pbuf; + 801a936: f8d3 b000 ldr.w fp, [r3] + clen = pbuf_clen(pcur); + 801a93a: f001 fa4f bl 801bddc + LWIP_ASSERT("pbufs_freed + clen <= 0xffff", pbufs_freed + clen <= 0xffff); + 801a93e: 4405 add r5, r0 + 801a940: f5b5 3f80 cmp.w r5, #65536 ; 0x10000 + 801a944: db05 blt.n 801a952 + 801a946: 4643 mov r3, r8 + 801a948: 22cc movs r2, #204 ; 0xcc + 801a94a: 4649 mov r1, r9 + 801a94c: 4650 mov r0, sl + 801a94e: f019 ff01 bl 8034754 + pbuf_free(pcur); + 801a952: 4638 mov r0, r7 + pbufs_freed = (u16_t)(pbufs_freed + clen); + 801a954: b2ad uxth r5, r5 + p = iprh->next_pbuf; + 801a956: 465f mov r7, fp + pbuf_free(pcur); + 801a958: f001 f8ee bl 801bb38 + 801a95c: e7d2 b.n 801a904 + 801a95e: bf00 nop + 801a960: 0803a530 .word 0x0803a530 + 801a964: 0803a5d3 .word 0x0803a5d3 + 801a968: 08035999 .word 0x08035999 + 801a96c: 0803a5df .word 0x0803a5df + 801a970: 2001af4e .word 0x2001af4e + 801a974: 0803a60e .word 0x0803a60e + 801a978: 0803a5f1 .word 0x0803a5f1 + +0801a97c : +{ + 801a97c: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} + 801a980: 4605 mov r5, r0 + 801a982: 460f mov r7, r1 + int pbufs_freed = 0, pbufs_freed_current; + 801a984: 2600 movs r6, #0 + r = reassdatagrams; + 801a986: f8df 8068 ldr.w r8, [pc, #104] ; 801a9f0 + other_datagrams = 0; + 801a98a: 2400 movs r4, #0 + r = reassdatagrams; + 801a98c: f8d8 3000 ldr.w r3, [r8] + oldest_prev = NULL; + 801a990: 4621 mov r1, r4 + prev = NULL; + 801a992: 46a4 mov ip, r4 + oldest = NULL; + 801a994: 4620 mov r0, r4 + while (r != NULL) { + 801a996: b953 cbnz r3, 801a9ae + if (oldest != NULL) { + 801a998: b110 cbz r0, 801a9a0 + pbufs_freed_current = ip_reass_free_complete_datagram(oldest, oldest_prev); + 801a99a: f7ff ff7b bl 801a894 + pbufs_freed += pbufs_freed_current; + 801a99e: 4406 add r6, r0 + } while ((pbufs_freed < pbufs_needed) && (other_datagrams > 1)); + 801a9a0: 42be cmp r6, r7 + 801a9a2: da01 bge.n 801a9a8 + 801a9a4: 2c01 cmp r4, #1 + 801a9a6: dcf0 bgt.n 801a98a +} + 801a9a8: 4630 mov r0, r6 + 801a9aa: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + if (!IP_ADDRESSES_AND_ID_MATCH(&r->iphdr, fraghdr)) { + 801a9ae: f8d5 e00c ldr.w lr, [r5, #12] + 801a9b2: 695a ldr r2, [r3, #20] + 801a9b4: 4572 cmp r2, lr + 801a9b6: d109 bne.n 801a9cc + 801a9b8: f8d5 e010 ldr.w lr, [r5, #16] + 801a9bc: 699a ldr r2, [r3, #24] + 801a9be: 4572 cmp r2, lr + 801a9c0: d104 bne.n 801a9cc + 801a9c2: f8b3 e00c ldrh.w lr, [r3, #12] + 801a9c6: 88aa ldrh r2, [r5, #4] + 801a9c8: 4596 cmp lr, r2 + 801a9ca: d008 beq.n 801a9de + other_datagrams++; + 801a9cc: 3401 adds r4, #1 + if (oldest == NULL) { + 801a9ce: b160 cbz r0, 801a9ea + } else if (r->timer <= oldest->timer) { + 801a9d0: 7fc2 ldrb r2, [r0, #31] + 801a9d2: f893 e01f ldrb.w lr, [r3, #31] + oldest_prev = prev; + 801a9d6: 4596 cmp lr, r2 + 801a9d8: bf9c itt ls + 801a9da: 4661 movls r1, ip + 801a9dc: 4618 movls r0, r3 + if (r->next != NULL) { + 801a9de: 681a ldr r2, [r3, #0] + 801a9e0: 2a00 cmp r2, #0 + 801a9e2: bf18 it ne + 801a9e4: 469c movne ip, r3 + 801a9e6: 4613 mov r3, r2 + 801a9e8: e7d5 b.n 801a996 + oldest_prev = prev; + 801a9ea: 4661 mov r1, ip + 801a9ec: 4618 mov r0, r3 + 801a9ee: e7f6 b.n 801a9de + 801a9f0: 2001af50 .word 0x2001af50 + +0801a9f4 : +} + +/** Free a struct pbuf_custom_ref */ +static void +ip_frag_free_pbuf_custom_ref(struct pbuf_custom_ref *p) +{ + 801a9f4: b510 push {r4, lr} + LWIP_ASSERT("p != NULL", p != NULL); + 801a9f6: 4604 mov r4, r0 + 801a9f8: b930 cbnz r0, 801aa08 + 801a9fa: 4b06 ldr r3, [pc, #24] ; (801aa14 ) + 801a9fc: f44f 7231 mov.w r2, #708 ; 0x2c4 + 801aa00: 4905 ldr r1, [pc, #20] ; (801aa18 ) + 801aa02: 4806 ldr r0, [pc, #24] ; (801aa1c ) + 801aa04: f019 fea6 bl 8034754 + memp_free(MEMP_FRAG_PBUF, p); + 801aa08: 4621 mov r1, r4 + 801aa0a: 2005 movs r0, #5 +} + 801aa0c: e8bd 4010 ldmia.w sp!, {r4, lr} + memp_free(MEMP_FRAG_PBUF, p); + 801aa10: f000 be16 b.w 801b640 + 801aa14: 0803a530 .word 0x0803a530 + 801aa18: 0803ae7f .word 0x0803ae7f + 801aa1c: 08035999 .word 0x08035999 + +0801aa20 : + +/** Free-callback function to free a 'struct pbuf_custom_ref', called by + * pbuf_free. */ +static void +ipfrag_free_pbuf_custom(struct pbuf *p) +{ + 801aa20: b510 push {r4, lr} + struct pbuf_custom_ref *pcr = (struct pbuf_custom_ref *)p; + LWIP_ASSERT("pcr != NULL", pcr != NULL); + 801aa22: 4604 mov r4, r0 + 801aa24: b930 cbnz r0, 801aa34 + 801aa26: 4b08 ldr r3, [pc, #32] ; (801aa48 ) + 801aa28: f240 22ce movw r2, #718 ; 0x2ce + 801aa2c: 4907 ldr r1, [pc, #28] ; (801aa4c ) + 801aa2e: 4808 ldr r0, [pc, #32] ; (801aa50 ) + 801aa30: f019 fe90 bl 8034754 + LWIP_ASSERT("pcr == p", (void *)pcr == (void *)p); + if (pcr->original != NULL) { + 801aa34: 6960 ldr r0, [r4, #20] + 801aa36: b108 cbz r0, 801aa3c + pbuf_free(pcr->original); + 801aa38: f001 f87e bl 801bb38 + } + ip_frag_free_pbuf_custom_ref(pcr); + 801aa3c: 4620 mov r0, r4 +} + 801aa3e: e8bd 4010 ldmia.w sp!, {r4, lr} + ip_frag_free_pbuf_custom_ref(pcr); + 801aa42: f7ff bfd7 b.w 801a9f4 + 801aa46: bf00 nop + 801aa48: 0803a530 .word 0x0803a530 + 801aa4c: 0803a630 .word 0x0803a630 + 801aa50: 08035999 .word 0x08035999 + +0801aa54 : +{ + 801aa54: b538 push {r3, r4, r5, lr} + r = reassdatagrams; + 801aa56: 4b09 ldr r3, [pc, #36] ; (801aa7c ) + struct ip_reassdata *r, *prev = NULL; + 801aa58: 2400 movs r4, #0 + r = reassdatagrams; + 801aa5a: 6818 ldr r0, [r3, #0] + while (r != NULL) { + 801aa5c: b900 cbnz r0, 801aa60 +} + 801aa5e: bd38 pop {r3, r4, r5, pc} + if (r->timer > 0) { + 801aa60: 7fc3 ldrb r3, [r0, #31] + r = r->next; + 801aa62: 6805 ldr r5, [r0, #0] + if (r->timer > 0) { + 801aa64: b123 cbz r3, 801aa70 + r->timer--; + 801aa66: 3b01 subs r3, #1 + 801aa68: 77c3 strb r3, [r0, #31] + ip_reass_free_complete_datagram(tmp, prev); + 801aa6a: 4604 mov r4, r0 + 801aa6c: 4628 mov r0, r5 + 801aa6e: e7f5 b.n 801aa5c + 801aa70: 4621 mov r1, r4 + 801aa72: f7ff ff0f bl 801a894 + 801aa76: 4620 mov r0, r4 + 801aa78: e7f7 b.n 801aa6a + 801aa7a: bf00 nop + 801aa7c: 2001af50 .word 0x2001af50 + +0801aa80 : +{ + 801aa80: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} + fraghdr = (struct ip_hdr *)p->payload; + 801aa84: 6845 ldr r5, [r0, #4] +{ + 801aa86: 4680 mov r8, r0 + if (IPH_HL_BYTES(fraghdr) != IP_HLEN) { + 801aa88: 782b ldrb r3, [r5, #0] + 801aa8a: f003 030f and.w r3, r3, #15 + 801aa8e: 2b05 cmp r3, #5 + 801aa90: f040 80a1 bne.w 801abd6 + offset = IPH_OFFSET_BYTES(fraghdr); + 801aa94: 88e8 ldrh r0, [r5, #6] + 801aa96: f7fd ff22 bl 80188de + 801aa9a: 4607 mov r7, r0 + len = lwip_ntohs(IPH_LEN(fraghdr)); + 801aa9c: 8868 ldrh r0, [r5, #2] + 801aa9e: f7fd ff1e bl 80188de + hlen = IPH_HL_BYTES(fraghdr); + 801aaa2: 782b ldrb r3, [r5, #0] + 801aaa4: f003 030f and.w r3, r3, #15 + if (hlen > len) { + 801aaa8: ebb0 0f83 cmp.w r0, r3, lsl #2 + 801aaac: ea4f 0283 mov.w r2, r3, lsl #2 + 801aab0: f0c0 8091 bcc.w 801abd6 + len = (u16_t)(len - hlen); + 801aab4: 1a83 subs r3, r0, r2 + if ((ip_reass_pbufcount + clen) > IP_REASS_MAX_PBUFS) { + 801aab6: 4cb5 ldr r4, [pc, #724] ; (801ad8c ) + clen = pbuf_clen(p); + 801aab8: 4640 mov r0, r8 + len = (u16_t)(len - hlen); + 801aaba: b29b uxth r3, r3 + 801aabc: 9301 str r3, [sp, #4] + clen = pbuf_clen(p); + 801aabe: f001 f98d bl 801bddc + if ((ip_reass_pbufcount + clen) > IP_REASS_MAX_PBUFS) { + 801aac2: 8823 ldrh r3, [r4, #0] + clen = pbuf_clen(p); + 801aac4: 4681 mov r9, r0 + if ((ip_reass_pbufcount + clen) > IP_REASS_MAX_PBUFS) { + 801aac6: 4403 add r3, r0 + 801aac8: 2b0a cmp r3, #10 + 801aaca: dc7a bgt.n 801abc2 + for (ipr = reassdatagrams; ipr != NULL; ipr = ipr->next) { + 801aacc: 4eb0 ldr r6, [pc, #704] ; (801ad90 ) + 801aace: 6834 ldr r4, [r6, #0] + 801aad0: 2c00 cmp r4, #0 + 801aad2: f040 8085 bne.w 801abe0 + ipr = (struct ip_reassdata *)memp_malloc(MEMP_REASSDATA); + 801aad6: 2004 movs r0, #4 + 801aad8: f000 fd82 bl 801b5e0 + if (ipr == NULL) { + 801aadc: 4604 mov r4, r0 + 801aade: b958 cbnz r0, 801aaf8 + if (ip_reass_remove_oldest_datagram(fraghdr, clen) >= clen) { + 801aae0: 4649 mov r1, r9 + 801aae2: 4628 mov r0, r5 + 801aae4: f7ff ff4a bl 801a97c + 801aae8: 4581 cmp r9, r0 + 801aaea: dc74 bgt.n 801abd6 + ipr = (struct ip_reassdata *)memp_malloc(MEMP_REASSDATA); + 801aaec: 2004 movs r0, #4 + 801aaee: f000 fd77 bl 801b5e0 + if (ipr == NULL) + 801aaf2: 4604 mov r4, r0 + 801aaf4: 2800 cmp r0, #0 + 801aaf6: d06e beq.n 801abd6 + memset(ipr, 0, sizeof(struct ip_reassdata)); + 801aaf8: 221c movs r2, #28 + 801aafa: 2100 movs r1, #0 + 801aafc: 1d20 adds r0, r4, #4 + 801aafe: f019 ff5d bl 80349bc + ipr->timer = IP_REASS_MAXAGE; + 801ab02: 230f movs r3, #15 + SMEMCPY(&(ipr->iphdr), fraghdr, IP_HLEN); + 801ab04: f104 0208 add.w r2, r4, #8 + 801ab08: f105 0114 add.w r1, r5, #20 + ipr->timer = IP_REASS_MAXAGE; + 801ab0c: 77e3 strb r3, [r4, #31] + ipr->next = reassdatagrams; + 801ab0e: 6833 ldr r3, [r6, #0] + reassdatagrams = ipr; + 801ab10: 6034 str r4, [r6, #0] + ipr->next = reassdatagrams; + 801ab12: 6023 str r3, [r4, #0] + SMEMCPY(&(ipr->iphdr), fraghdr, IP_HLEN); + 801ab14: 462b mov r3, r5 + 801ab16: f853 0b04 ldr.w r0, [r3], #4 + 801ab1a: 428b cmp r3, r1 + 801ab1c: f842 0b04 str.w r0, [r2], #4 + 801ab20: d1f9 bne.n 801ab16 + is_last = (IPH_OFFSET(fraghdr) & PP_NTOHS(IP_MF)) == 0; + 801ab22: f8b5 b006 ldrh.w fp, [r5, #6] + offset = IPH_OFFSET_BYTES(fraghdr); + 801ab26: f3c7 070c ubfx r7, r7, #0, #13 + if (is_last) { + 801ab2a: f01b 0b20 ands.w fp, fp, #32 + offset = IPH_OFFSET_BYTES(fraghdr); + 801ab2e: ea4f 07c7 mov.w r7, r7, lsl #3 + if (is_last) { + 801ab32: d10a bne.n 801ab4a + u16_t datagram_len = (u16_t)(offset + len); + 801ab34: 9b01 ldr r3, [sp, #4] + 801ab36: 18fb adds r3, r7, r3 + 801ab38: b29b uxth r3, r3 + if ((datagram_len < offset) || (datagram_len > (0xFFFF - IP_HLEN))) { + 801ab3a: 429f cmp r7, r3 + 801ab3c: f200 8138 bhi.w 801adb0 + 801ab40: f64f 72eb movw r2, #65515 ; 0xffeb + 801ab44: 4293 cmp r3, r2 + 801ab46: f200 8133 bhi.w 801adb0 + fraghdr = (struct ip_hdr *)new_p->payload; + 801ab4a: f8d8 5004 ldr.w r5, [r8, #4] + len = lwip_ntohs(IPH_LEN(fraghdr)); + 801ab4e: 8868 ldrh r0, [r5, #2] + 801ab50: f7fd fec5 bl 80188de + hlen = IPH_HL_BYTES(fraghdr); + 801ab54: 782b ldrb r3, [r5, #0] + 801ab56: f003 030f and.w r3, r3, #15 + if (hlen > len) { + 801ab5a: ebb0 0f83 cmp.w r0, r3, lsl #2 + 801ab5e: ea4f 0283 mov.w r2, r3, lsl #2 + 801ab62: f0c0 8125 bcc.w 801adb0 + len = (u16_t)(len - hlen); + 801ab66: 1a80 subs r0, r0, r2 + 801ab68: fa1f fa80 uxth.w sl, r0 + offset = IPH_OFFSET_BYTES(fraghdr); + 801ab6c: 88e8 ldrh r0, [r5, #6] + 801ab6e: f7fd feb6 bl 80188de + 801ab72: f3c0 000c ubfx r0, r0, #0, #13 + iprh = (struct ip_reass_helper *)new_p->payload; + 801ab76: f8d8 6004 ldr.w r6, [r8, #4] + iprh->next_pbuf = NULL; + 801ab7a: 2500 movs r5, #0 + offset = IPH_OFFSET_BYTES(fraghdr); + 801ab7c: 00c3 lsls r3, r0, #3 + iprh->next_pbuf = NULL; + 801ab7e: 7035 strb r5, [r6, #0] + iprh->end = (u16_t)(offset + len); + 801ab80: eb0a 0003 add.w r0, sl, r3 + iprh->next_pbuf = NULL; + 801ab84: 7075 strb r5, [r6, #1] + 801ab86: 70b5 strb r5, [r6, #2] + iprh->end = (u16_t)(offset + len); + 801ab88: fa1f fc80 uxth.w ip, r0 + iprh->next_pbuf = NULL; + 801ab8c: 70f5 strb r5, [r6, #3] + iprh->start = offset; + 801ab8e: 80b3 strh r3, [r6, #4] + if (iprh->end < offset) { + 801ab90: 4563 cmp r3, ip + iprh->end = (u16_t)(offset + len); + 801ab92: 80f0 strh r0, [r6, #6] + if (iprh->end < offset) { + 801ab94: f200 810c bhi.w 801adb0 + for (q = ipr->p; q != NULL;) { + 801ab98: f8d4 e004 ldr.w lr, [r4, #4] + int valid = 1; + 801ab9c: f04f 0a01 mov.w sl, #1 + for (q = ipr->p; q != NULL;) { + 801aba0: 4670 mov r0, lr + 801aba2: bb60 cbnz r0, 801abfe + if (iprh_prev != NULL) { + 801aba4: 2d00 cmp r5, #0 + 801aba6: f040 80a9 bne.w 801acfc + LWIP_ASSERT("no previous fragment, this must be the first fragment!", + 801abaa: f1be 0f00 cmp.w lr, #0 + 801abae: f000 8095 beq.w 801acdc + 801abb2: 4b78 ldr r3, [pc, #480] ; (801ad94 ) + 801abb4: f44f 72df mov.w r2, #446 ; 0x1be + 801abb8: 4977 ldr r1, [pc, #476] ; (801ad98 ) + 801abba: 4878 ldr r0, [pc, #480] ; (801ad9c ) + 801abbc: f019 fdca bl 8034754 + 801abc0: e08c b.n 801acdc + if (!ip_reass_remove_oldest_datagram(fraghdr, clen) || + 801abc2: 4601 mov r1, r0 + 801abc4: 4628 mov r0, r5 + 801abc6: f7ff fed9 bl 801a97c + 801abca: b120 cbz r0, 801abd6 + ((ip_reass_pbufcount + clen) > IP_REASS_MAX_PBUFS)) + 801abcc: 8823 ldrh r3, [r4, #0] + 801abce: 444b add r3, r9 + if (!ip_reass_remove_oldest_datagram(fraghdr, clen) || + 801abd0: 2b0a cmp r3, #10 + 801abd2: f77f af7b ble.w 801aacc + pbuf_free(p); + 801abd6: 4640 mov r0, r8 + 801abd8: f000 ffae bl 801bb38 + return NULL; + 801abdc: 2700 movs r7, #0 + 801abde: e077 b.n 801acd0 + if (IP_ADDRESSES_AND_ID_MATCH(&ipr->iphdr, fraghdr)) { + 801abe0: 68eb ldr r3, [r5, #12] + 801abe2: 6962 ldr r2, [r4, #20] + 801abe4: 429a cmp r2, r3 + 801abe6: d108 bne.n 801abfa + 801abe8: 692b ldr r3, [r5, #16] + 801abea: 69a2 ldr r2, [r4, #24] + 801abec: 429a cmp r2, r3 + 801abee: d104 bne.n 801abfa + 801abf0: 89a2 ldrh r2, [r4, #12] + 801abf2: 88ab ldrh r3, [r5, #4] + 801abf4: 429a cmp r2, r3 + 801abf6: f000 80ef beq.w 801add8 + for (ipr = reassdatagrams; ipr != NULL; ipr = ipr->next) { + 801abfa: 6824 ldr r4, [r4, #0] + 801abfc: e768 b.n 801aad0 + iprh_tmp = (struct ip_reass_helper *)q->payload; + 801abfe: 6842 ldr r2, [r0, #4] + if (iprh->start < iprh_tmp->start) { + 801ac00: 8891 ldrh r1, [r2, #4] + 801ac02: 428b cmp r3, r1 + 801ac04: d26d bcs.n 801ace2 + iprh->next_pbuf = q; + 801ac06: 6030 str r0, [r6, #0] + if (iprh_prev != NULL) { + 801ac08: 2d00 cmp r5, #0 + 801ac0a: d065 beq.n 801acd8 + if ((iprh->start < iprh_prev->end) || (iprh->end > iprh_tmp->start)) { + 801ac0c: 88ea ldrh r2, [r5, #6] + 801ac0e: 4293 cmp r3, r2 + 801ac10: f0c0 80ce bcc.w 801adb0 + 801ac14: 458c cmp ip, r1 + 801ac16: f200 80cb bhi.w 801adb0 + if (iprh_prev->end != iprh->start) { + 801ac1a: 4293 cmp r3, r2 + iprh_prev->next_pbuf = new_p; + 801ac1c: f8c5 8000 str.w r8, [r5] + if (iprh_prev->end != iprh->start) { + 801ac20: f040 80f6 bne.w 801ae10 + if (is_last || ((ipr->flags & IP_REASS_FLAG_LASTFRAG) != 0)) { + 801ac24: f1bb 0f00 cmp.w fp, #0 + 801ac28: d004 beq.n 801ac34 + 801ac2a: 7fa3 ldrb r3, [r4, #30] + 801ac2c: f013 0301 ands.w r3, r3, #1 + 801ac30: f000 809b beq.w 801ad6a + if (valid) { + 801ac34: f1ba 0f00 cmp.w sl, #0 + 801ac38: d170 bne.n 801ad1c + q = iprh->next_pbuf; + 801ac3a: f04f 0a00 mov.w sl, #0 + ip_reass_pbufcount = (u16_t)(ip_reass_pbufcount + clen); + 801ac3e: 4e53 ldr r6, [pc, #332] ; (801ad8c ) + 801ac40: 8833 ldrh r3, [r6, #0] + 801ac42: 444b add r3, r9 + 801ac44: 8033 strh r3, [r6, #0] + if (is_last) { + 801ac46: f1bb 0f00 cmp.w fp, #0 + 801ac4a: d106 bne.n 801ac5a + u16_t datagram_len = (u16_t)(offset + len); + 801ac4c: 9b01 ldr r3, [sp, #4] + 801ac4e: 441f add r7, r3 + ipr->flags |= IP_REASS_FLAG_LASTFRAG; + 801ac50: 7fa3 ldrb r3, [r4, #30] + 801ac52: f043 0301 orr.w r3, r3, #1 + ipr->datagram_len = datagram_len; + 801ac56: 83a7 strh r7, [r4, #28] + ipr->flags |= IP_REASS_FLAG_LASTFRAG; + 801ac58: 77a3 strb r3, [r4, #30] + if (valid == IP_REASS_VALIDATE_TELEGRAM_FINISHED) { + 801ac5a: f1ba 0f01 cmp.w sl, #1 + 801ac5e: d1bd bne.n 801abdc + r = ((struct ip_reass_helper *)ipr->p->payload)->next_pbuf; + 801ac60: 6863 ldr r3, [r4, #4] + SMEMCPY(fraghdr, &ipr->iphdr, IP_HLEN); + 801ac62: f104 011c add.w r1, r4, #28 + u16_t datagram_len = (u16_t)(ipr->datagram_len + IP_HLEN); + 801ac66: 8ba0 ldrh r0, [r4, #28] + r = ((struct ip_reass_helper *)ipr->p->payload)->next_pbuf; + 801ac68: 685f ldr r7, [r3, #4] + SMEMCPY(fraghdr, &ipr->iphdr, IP_HLEN); + 801ac6a: f104 0308 add.w r3, r4, #8 + u16_t datagram_len = (u16_t)(ipr->datagram_len + IP_HLEN); + 801ac6e: 3014 adds r0, #20 + r = ((struct ip_reass_helper *)ipr->p->payload)->next_pbuf; + 801ac70: 683d ldr r5, [r7, #0] + SMEMCPY(fraghdr, &ipr->iphdr, IP_HLEN); + 801ac72: 463a mov r2, r7 + u16_t datagram_len = (u16_t)(ipr->datagram_len + IP_HLEN); + 801ac74: b280 uxth r0, r0 + SMEMCPY(fraghdr, &ipr->iphdr, IP_HLEN); + 801ac76: f853 cb04 ldr.w ip, [r3], #4 + 801ac7a: 428b cmp r3, r1 + 801ac7c: f842 cb04 str.w ip, [r2], #4 + 801ac80: d1f9 bne.n 801ac76 + IPH_LEN_SET(fraghdr, lwip_htons(datagram_len)); + 801ac82: f7fd fe2c bl 80188de + IPH_OFFSET_SET(fraghdr, 0); + 801ac86: 2300 movs r3, #0 + IPH_LEN_SET(fraghdr, lwip_htons(datagram_len)); + 801ac88: 8078 strh r0, [r7, #2] + IPH_OFFSET_SET(fraghdr, 0); + 801ac8a: 71bb strb r3, [r7, #6] + 801ac8c: 71fb strb r3, [r7, #7] + IPH_CHKSUM_SET(fraghdr, 0); + 801ac8e: 72bb strb r3, [r7, #10] + 801ac90: 72fb strb r3, [r7, #11] + p = ipr->p; + 801ac92: 6867 ldr r7, [r4, #4] + while (r != NULL) { + 801ac94: 2d00 cmp r5, #0 + 801ac96: d16a bne.n 801ad6e + if (ipr == reassdatagrams) { + 801ac98: 4b3d ldr r3, [pc, #244] ; (801ad90 ) + 801ac9a: 681b ldr r3, [r3, #0] + if (ipr_prev->next == ipr) { + 801ac9c: 42a3 cmp r3, r4 + 801ac9e: d002 beq.n 801aca6 + 801aca0: 461d mov r5, r3 + for (ipr_prev = reassdatagrams; ipr_prev != NULL; ipr_prev = ipr_prev->next) { + 801aca2: 2b00 cmp r3, #0 + 801aca4: d170 bne.n 801ad88 + ip_reass_dequeue_datagram(ipr, ipr_prev); + 801aca6: 4620 mov r0, r4 + 801aca8: 4629 mov r1, r5 + 801acaa: f7ff fdd1 bl 801a850 + clen = pbuf_clen(p); + 801acae: 4638 mov r0, r7 + 801acb0: f001 f894 bl 801bddc + LWIP_ASSERT("ip_reass_pbufcount >= clen", ip_reass_pbufcount >= clen); + 801acb4: 8833 ldrh r3, [r6, #0] + clen = pbuf_clen(p); + 801acb6: 4604 mov r4, r0 + LWIP_ASSERT("ip_reass_pbufcount >= clen", ip_reass_pbufcount >= clen); + 801acb8: 4283 cmp r3, r0 + 801acba: d206 bcs.n 801acca + 801acbc: 4b35 ldr r3, [pc, #212] ; (801ad94 ) + 801acbe: f240 229b movw r2, #667 ; 0x29b + 801acc2: 4937 ldr r1, [pc, #220] ; (801ada0 ) + 801acc4: 4835 ldr r0, [pc, #212] ; (801ad9c ) + 801acc6: f019 fd45 bl 8034754 + ip_reass_pbufcount = (u16_t)(ip_reass_pbufcount - clen); + 801acca: 8833 ldrh r3, [r6, #0] + 801accc: 1b1b subs r3, r3, r4 + 801acce: 8033 strh r3, [r6, #0] +} + 801acd0: 4638 mov r0, r7 + 801acd2: b003 add sp, #12 + 801acd4: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + if (iprh->end > iprh_tmp->start) { + 801acd8: 458c cmp ip, r1 + 801acda: d869 bhi.n 801adb0 + ipr->p = new_p; + 801acdc: f8c4 8004 str.w r8, [r4, #4] + 801ace0: e7a0 b.n 801ac24 + } else if (iprh->start == iprh_tmp->start) { + 801ace2: d065 beq.n 801adb0 + } else if (iprh->start < iprh_tmp->end) { + 801ace4: 88d0 ldrh r0, [r2, #6] + 801ace6: 4298 cmp r0, r3 + 801ace8: d862 bhi.n 801adb0 + if (iprh_prev != NULL) { + 801acea: b125 cbz r5, 801acf6 + if (iprh_prev->end != iprh_tmp->start) { + 801acec: 88e8 ldrh r0, [r5, #6] + valid = 0; + 801acee: 4288 cmp r0, r1 + 801acf0: bf18 it ne + 801acf2: f04f 0a00 movne.w sl, #0 + q = iprh_tmp->next_pbuf; + 801acf6: 6810 ldr r0, [r2, #0] + 801acf8: 4615 mov r5, r2 + 801acfa: e752 b.n 801aba2 + LWIP_ASSERT("check fragments don't overlap", iprh_prev->end <= iprh->start); + 801acfc: 88ea ldrh r2, [r5, #6] + 801acfe: 429a cmp r2, r3 + 801ad00: d906 bls.n 801ad10 + 801ad02: 4b24 ldr r3, [pc, #144] ; (801ad94 ) + 801ad04: f44f 72db mov.w r2, #438 ; 0x1b6 + 801ad08: 4926 ldr r1, [pc, #152] ; (801ada4 ) + 801ad0a: 4824 ldr r0, [pc, #144] ; (801ad9c ) + 801ad0c: f019 fd22 bl 8034754 + if (iprh_prev->end != iprh->start) { + 801ad10: 88ea ldrh r2, [r5, #6] + iprh_prev->next_pbuf = new_p; + 801ad12: f8c5 8000 str.w r8, [r5] + if (iprh_prev->end != iprh->start) { + 801ad16: 88b3 ldrh r3, [r6, #4] + 801ad18: 429a cmp r2, r3 + 801ad1a: e781 b.n 801ac20 + if ((ipr->p == NULL) || (((struct ip_reass_helper *)ipr->p->payload)->start != 0)) { + 801ad1c: 6863 ldr r3, [r4, #4] + 801ad1e: 2b00 cmp r3, #0 + 801ad20: d08b beq.n 801ac3a + 801ad22: 6859 ldr r1, [r3, #4] + 801ad24: 888b ldrh r3, [r1, #4] + 801ad26: 2b00 cmp r3, #0 + 801ad28: d187 bne.n 801ac3a + q = iprh->next_pbuf; + 801ad2a: 6833 ldr r3, [r6, #0] + while (q != NULL) { + 801ad2c: b9a3 cbnz r3, 801ad58 + LWIP_ASSERT("sanity check", + 801ad2e: 42b1 cmp r1, r6 + 801ad30: d106 bne.n 801ad40 + 801ad32: 4b18 ldr r3, [pc, #96] ; (801ad94 ) + 801ad34: f44f 72f0 mov.w r2, #480 ; 0x1e0 + 801ad38: 491b ldr r1, [pc, #108] ; (801ada8 ) + 801ad3a: 4818 ldr r0, [pc, #96] ; (801ad9c ) + 801ad3c: f019 fd0a bl 8034754 + LWIP_ASSERT("validate_datagram:next_pbuf!=NULL", + 801ad40: 6833 ldr r3, [r6, #0] + 801ad42: 2b00 cmp r3, #0 + 801ad44: f43f af7b beq.w 801ac3e + 801ad48: 4b12 ldr r3, [pc, #72] ; (801ad94 ) + 801ad4a: f44f 72f1 mov.w r2, #482 ; 0x1e2 + 801ad4e: 4917 ldr r1, [pc, #92] ; (801adac ) + 801ad50: 4812 ldr r0, [pc, #72] ; (801ad9c ) + 801ad52: f019 fcff bl 8034754 + if (valid == IP_REASS_VALIDATE_PBUF_DROPPED) { + 801ad56: e772 b.n 801ac3e + iprh = (struct ip_reass_helper *)q->payload; + 801ad58: 685a ldr r2, [r3, #4] + if (iprh_prev->end != iprh->start) { + 801ad5a: 88f0 ldrh r0, [r6, #6] + 801ad5c: 8893 ldrh r3, [r2, #4] + 801ad5e: 4298 cmp r0, r3 + 801ad60: f47f af6b bne.w 801ac3a + q = iprh->next_pbuf; + 801ad64: 6813 ldr r3, [r2, #0] + 801ad66: 4616 mov r6, r2 + 801ad68: e7e0 b.n 801ad2c + return IP_REASS_VALIDATE_PBUF_QUEUED; /* not yet valid! */ + 801ad6a: 469a mov sl, r3 + 801ad6c: e767 b.n 801ac3e + iprh = (struct ip_reass_helper *)r->payload; + 801ad6e: f8d5 8004 ldr.w r8, [r5, #4] + pbuf_remove_header(r, IP_HLEN); + 801ad72: 2114 movs r1, #20 + 801ad74: 4628 mov r0, r5 + 801ad76: f000 feab bl 801bad0 + pbuf_cat(p, r); + 801ad7a: 4629 mov r1, r5 + 801ad7c: 4638 mov r0, r7 + 801ad7e: f001 f851 bl 801be24 + r = iprh->next_pbuf; + 801ad82: f8d8 5000 ldr.w r5, [r8] + 801ad86: e785 b.n 801ac94 + if (ipr_prev->next == ipr) { + 801ad88: 682b ldr r3, [r5, #0] + 801ad8a: e787 b.n 801ac9c + 801ad8c: 2001af4e .word 0x2001af4e + 801ad90: 2001af50 .word 0x2001af50 + 801ad94: 0803a530 .word 0x0803a530 + 801ad98: 0803a65a .word 0x0803a65a + 801ad9c: 08035999 .word 0x08035999 + 801ada0: 0803a6c0 .word 0x0803a6c0 + 801ada4: 0803a63c .word 0x0803a63c + 801ada8: 0803a691 .word 0x0803a691 + 801adac: 0803a69e .word 0x0803a69e + if (ipr->p == NULL) { + 801adb0: 6863 ldr r3, [r4, #4] + 801adb2: 2b00 cmp r3, #0 + 801adb4: f47f af0f bne.w 801abd6 + LWIP_ASSERT("not firstalthough just enqueued", ipr == reassdatagrams); + 801adb8: 4b19 ldr r3, [pc, #100] ; (801ae20 ) + 801adba: 681b ldr r3, [r3, #0] + 801adbc: 42a3 cmp r3, r4 + 801adbe: d006 beq.n 801adce + 801adc0: 4b18 ldr r3, [pc, #96] ; (801ae24 ) + 801adc2: f240 22ab movw r2, #683 ; 0x2ab + 801adc6: 4918 ldr r1, [pc, #96] ; (801ae28 ) + 801adc8: 4818 ldr r0, [pc, #96] ; (801ae2c ) + 801adca: f019 fcc3 bl 8034754 + ip_reass_dequeue_datagram(ipr, NULL); + 801adce: 2100 movs r1, #0 + 801add0: 4620 mov r0, r4 + 801add2: f7ff fd3d bl 801a850 + 801add6: e6fe b.n 801abd6 + if (((lwip_ntohs(IPH_OFFSET(fraghdr)) & IP_OFFMASK) == 0) && + 801add8: 88e8 ldrh r0, [r5, #6] + 801adda: f7fd fd80 bl 80188de + 801adde: f3c0 000c ubfx r0, r0, #0, #13 + 801ade2: 2800 cmp r0, #0 + 801ade4: f47f ae9d bne.w 801ab22 + ((lwip_ntohs(IPH_OFFSET(&ipr->iphdr)) & IP_OFFMASK) != 0)) { + 801ade8: 89e0 ldrh r0, [r4, #14] + 801adea: f7fd fd78 bl 80188de + if (((lwip_ntohs(IPH_OFFSET(fraghdr)) & IP_OFFMASK) == 0) && + 801adee: f3c0 000c ubfx r0, r0, #0, #13 + 801adf2: 2800 cmp r0, #0 + 801adf4: f43f ae95 beq.w 801ab22 + SMEMCPY(&ipr->iphdr, fraghdr, IP_HLEN); + 801adf8: 462b mov r3, r5 + 801adfa: f104 0208 add.w r2, r4, #8 + 801adfe: f105 0114 add.w r1, r5, #20 + 801ae02: f853 0b04 ldr.w r0, [r3], #4 + 801ae06: 428b cmp r3, r1 + 801ae08: f842 0b04 str.w r0, [r2], #4 + 801ae0c: d1f9 bne.n 801ae02 + 801ae0e: e688 b.n 801ab22 + if (is_last || ((ipr->flags & IP_REASS_FLAG_LASTFRAG) != 0)) { + 801ae10: f1bb 0f00 cmp.w fp, #0 + 801ae14: f43f af11 beq.w 801ac3a + 801ae18: f04f 0a00 mov.w sl, #0 + 801ae1c: e705 b.n 801ac2a + 801ae1e: bf00 nop + 801ae20: 2001af50 .word 0x2001af50 + 801ae24: 0803a530 .word 0x0803a530 + 801ae28: 0803a6db .word 0x0803a6db + 801ae2c: 08035999 .word 0x08035999 + +0801ae30 : + u16_t newpbuflen = 0; + u16_t left_to_copy; +#endif + struct ip_hdr *original_iphdr; + struct ip_hdr *iphdr; + const u16_t nfb = (u16_t)((netif->mtu - IP_HLEN) / 8); + 801ae30: 8d0b ldrh r3, [r1, #40] ; 0x28 +{ + 801ae32: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 801ae36: ed2d 8b02 vpush {d8} + 801ae3a: ee08 2a10 vmov s16, r2 + const u16_t nfb = (u16_t)((netif->mtu - IP_HLEN) / 8); + 801ae3e: f1b3 0214 subs.w r2, r3, #20 +{ + 801ae42: b08b sub sp, #44 ; 0x2c + 801ae44: 4605 mov r5, r0 + const u16_t nfb = (u16_t)((netif->mtu - IP_HLEN) / 8); + 801ae46: bf48 it mi + 801ae48: f1a3 020d submi.w r2, r3, #13 +{ + 801ae4c: 468a mov sl, r1 + const u16_t nfb = (u16_t)((netif->mtu - IP_HLEN) / 8); + 801ae4e: f3c2 03cf ubfx r3, r2, #3, #16 + 801ae52: 9305 str r3, [sp, #20] + int last; + u16_t poff = IP_HLEN; + u16_t tmp; + int mf_set; + + original_iphdr = (struct ip_hdr *)p->payload; + 801ae54: 6843 ldr r3, [r0, #4] + 801ae56: 9302 str r3, [sp, #8] + iphdr = original_iphdr; + if (IPH_HL_BYTES(iphdr) != IP_HLEN) { + 801ae58: 781b ldrb r3, [r3, #0] + 801ae5a: f003 030f and.w r3, r3, #15 + 801ae5e: 2b05 cmp r3, #5 + 801ae60: ea4f 0783 mov.w r7, r3, lsl #2 + 801ae64: d109 bne.n 801ae7a + /* ip4_frag() does not support IP options */ + return ERR_VAL; + } + LWIP_ERROR("ip4_frag(): pbuf too short", p->len >= IP_HLEN, return ERR_VAL); + 801ae66: 8943 ldrh r3, [r0, #10] + 801ae68: 2b13 cmp r3, #19 + 801ae6a: d809 bhi.n 801ae80 + 801ae6c: 4b60 ldr r3, [pc, #384] ; (801aff0 ) + 801ae6e: f44f 723f mov.w r2, #764 ; 0x2fc + 801ae72: 4960 ldr r1, [pc, #384] ; (801aff4 ) + 801ae74: 4860 ldr r0, [pc, #384] ; (801aff8 ) + 801ae76: f019 fc6d bl 8034754 + return ERR_VAL; + 801ae7a: f06f 0005 mvn.w r0, #5 + 801ae7e: e013 b.n 801aea8 + + /* Save original offset */ + tmp = lwip_ntohs(IPH_OFFSET(iphdr)); + 801ae80: 9b02 ldr r3, [sp, #8] + u16_t newpbuflen = 0; + 801ae82: 2600 movs r6, #0 + tmp = lwip_ntohs(IPH_OFFSET(iphdr)); + 801ae84: 88d8 ldrh r0, [r3, #6] + 801ae86: f7fd fd2a bl 80188de + ofo = tmp & IP_OFFMASK; + 801ae8a: f3c0 030c ubfx r3, r0, #0, #13 + /* already fragmented? if so, the last fragment we create must have MF, too */ + mf_set = tmp & IP_MF; + + left = (u16_t)(p->tot_len - IP_HLEN); + 801ae8e: 892c ldrh r4, [r5, #8] + ofo = tmp & IP_OFFMASK; + 801ae90: 9303 str r3, [sp, #12] + mf_set = tmp & IP_MF; + 801ae92: f400 5300 and.w r3, r0, #8192 ; 0x2000 + left = (u16_t)(p->tot_len - IP_HLEN); + 801ae96: 3c14 subs r4, #20 + 801ae98: 9307 str r3, [sp, #28] + + while (left) { + /* Fill this fragment */ + fragsize = LWIP_MIN(left, (u16_t)(nfb * 8)); + 801ae9a: 9b05 ldr r3, [sp, #20] + left = (u16_t)(p->tot_len - IP_HLEN); + 801ae9c: b2a4 uxth r4, r4 + fragsize = LWIP_MIN(left, (u16_t)(nfb * 8)); + 801ae9e: 00db lsls r3, r3, #3 + 801aea0: b29b uxth r3, r3 + 801aea2: 9306 str r3, [sp, #24] + while (left) { + 801aea4: b92c cbnz r4, 801aeb2 + pbuf_free(rambuf); + left = (u16_t)(left - fragsize); + ofo = (u16_t)(ofo + nfb); + } + MIB2_STATS_INC(mib2.ipfragoks); + return ERR_OK; + 801aea6: 4620 mov r0, r4 +memerr: + MIB2_STATS_INC(mib2.ipfragfails); + return ERR_MEM; +} + 801aea8: b00b add sp, #44 ; 0x2c + 801aeaa: ecbd 8b02 vpop {d8} + 801aeae: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + fragsize = LWIP_MIN(left, (u16_t)(nfb * 8)); + 801aeb2: 9b06 ldr r3, [sp, #24] + rambuf = pbuf_alloc(PBUF_LINK, IP_HLEN, PBUF_RAM); + 801aeb4: f44f 7220 mov.w r2, #640 ; 0x280 + 801aeb8: 2114 movs r1, #20 + 801aeba: 200e movs r0, #14 + fragsize = LWIP_MIN(left, (u16_t)(nfb * 8)); + 801aebc: 42a3 cmp r3, r4 + 801aebe: bf28 it cs + 801aec0: 4623 movcs r3, r4 + 801aec2: 9304 str r3, [sp, #16] + rambuf = pbuf_alloc(PBUF_LINK, IP_HLEN, PBUF_RAM); + 801aec4: f000 fea0 bl 801bc08 + if (rambuf == NULL) { + 801aec8: 4680 mov r8, r0 + 801aeca: 2800 cmp r0, #0 + 801aecc: d036 beq.n 801af3c + LWIP_ASSERT("this needs a pbuf in one piece!", + 801aece: 8943 ldrh r3, [r0, #10] + 801aed0: 2b13 cmp r3, #19 + 801aed2: d806 bhi.n 801aee2 + 801aed4: 4b46 ldr r3, [pc, #280] ; (801aff0 ) + 801aed6: f44f 7249 mov.w r2, #804 ; 0x324 + 801aeda: 4948 ldr r1, [pc, #288] ; (801affc ) + 801aedc: 4846 ldr r0, [pc, #280] ; (801aff8 ) + 801aede: f019 fc39 bl 8034754 + SMEMCPY(rambuf->payload, original_iphdr, IP_HLEN); + 801aee2: 9b02 ldr r3, [sp, #8] + 801aee4: f8d8 2004 ldr.w r2, [r8, #4] + 801aee8: 4619 mov r1, r3 + 801aeea: 3114 adds r1, #20 + 801aeec: f853 0b04 ldr.w r0, [r3], #4 + 801aef0: 428b cmp r3, r1 + 801aef2: f842 0b04 str.w r0, [r2], #4 + 801aef6: d1f9 bne.n 801aeec + iphdr = (struct ip_hdr *)rambuf->payload; + 801aef8: f8d8 b004 ldr.w fp, [r8, #4] + left_to_copy = fragsize; + 801aefc: f8dd 9010 ldr.w r9, [sp, #16] + while (left_to_copy) { + 801af00: f1b9 0f00 cmp.w r9, #0 + 801af04: d041 beq.n 801af8a + u16_t plen = (u16_t)(p->len - poff); + 801af06: 896b ldrh r3, [r5, #10] + 801af08: 1bde subs r6, r3, r7 + LWIP_ASSERT("p->len >= poff", p->len >= poff); + 801af0a: 42bb cmp r3, r7 + u16_t plen = (u16_t)(p->len - poff); + 801af0c: b2b6 uxth r6, r6 + LWIP_ASSERT("p->len >= poff", p->len >= poff); + 801af0e: d206 bcs.n 801af1e + 801af10: 4b37 ldr r3, [pc, #220] ; (801aff0 ) + 801af12: f240 322d movw r2, #813 ; 0x32d + 801af16: 493a ldr r1, [pc, #232] ; (801b000 ) + 801af18: 4837 ldr r0, [pc, #220] ; (801aff8 ) + 801af1a: f019 fc1b bl 8034754 + newpbuflen = LWIP_MIN(left_to_copy, plen); + 801af1e: 454e cmp r6, r9 + 801af20: bf28 it cs + 801af22: 464e movcs r6, r9 + if (!newpbuflen) { + 801af24: b916 cbnz r6, 801af2c + p = p->next; + 801af26: 682d ldr r5, [r5, #0] + poff = 0; + 801af28: 2700 movs r7, #0 + 801af2a: e7e9 b.n 801af00 + return (struct pbuf_custom_ref *)memp_malloc(MEMP_FRAG_PBUF); + 801af2c: 2005 movs r0, #5 + 801af2e: f000 fb57 bl 801b5e0 + if (pcr == NULL) { + 801af32: 4603 mov r3, r0 + 801af34: b928 cbnz r0, 801af42 + pbuf_free(rambuf); + 801af36: 4640 mov r0, r8 + 801af38: f000 fdfe bl 801bb38 + return ERR_MEM; + 801af3c: f04f 30ff mov.w r0, #4294967295 + 801af40: e7b2 b.n 801aea8 + newpbuf = pbuf_alloced_custom(PBUF_RAW, newpbuflen, PBUF_REF, &pcr->pc, + 801af42: 9601 str r6, [sp, #4] + 801af44: 4631 mov r1, r6 + 801af46: 686a ldr r2, [r5, #4] + 801af48: 9008 str r0, [sp, #32] + 801af4a: 2000 movs r0, #0 + 801af4c: 443a add r2, r7 + 801af4e: 9200 str r2, [sp, #0] + 801af50: 2241 movs r2, #65 ; 0x41 + 801af52: f000 fd9f bl 801ba94 + if (newpbuf == NULL) { + 801af56: 9b08 ldr r3, [sp, #32] + 801af58: b918 cbnz r0, 801af62 + ip_frag_free_pbuf_custom_ref(pcr); + 801af5a: 4618 mov r0, r3 + 801af5c: f7ff fd4a bl 801a9f4 + 801af60: e7e9 b.n 801af36 + 801af62: e9cd 0308 strd r0, r3, [sp, #32] + left_to_copy = (u16_t)(left_to_copy - newpbuflen); + 801af66: eba9 0906 sub.w r9, r9, r6 + pbuf_ref(p); + 801af6a: 4628 mov r0, r5 + 801af6c: f000 ff3e bl 801bdec + pcr->original = p; + 801af70: 9b09 ldr r3, [sp, #36] ; 0x24 + pcr->pc.custom_free_function = ipfrag_free_pbuf_custom; + 801af72: 4a24 ldr r2, [pc, #144] ; (801b004 ) + left_to_copy = (u16_t)(left_to_copy - newpbuflen); + 801af74: fa1f f989 uxth.w r9, r9 + pbuf_cat(rambuf, newpbuf); + 801af78: 9908 ldr r1, [sp, #32] + 801af7a: 4640 mov r0, r8 + pcr->original = p; + 801af7c: 615d str r5, [r3, #20] + pcr->pc.custom_free_function = ipfrag_free_pbuf_custom; + 801af7e: 611a str r2, [r3, #16] + pbuf_cat(rambuf, newpbuf); + 801af80: f000 ff50 bl 801be24 + if (left_to_copy) { + 801af84: f1b9 0f00 cmp.w r9, #0 + 801af88: d1cd bne.n 801af26 + tmp = (IP_OFFMASK & (ofo)); + 801af8a: 9b03 ldr r3, [sp, #12] + poff = (u16_t)(poff + newpbuflen); + 801af8c: 4437 add r7, r6 + tmp = (IP_OFFMASK & (ofo)); + 801af8e: f3c3 000c ubfx r0, r3, #0, #13 + last = (left <= netif->mtu - IP_HLEN); + 801af92: f8ba 3028 ldrh.w r3, [sl, #40] ; 0x28 + poff = (u16_t)(poff + newpbuflen); + 801af96: b2bf uxth r7, r7 + last = (left <= netif->mtu - IP_HLEN); + 801af98: 3b13 subs r3, #19 + if (!last || mf_set) { + 801af9a: 42a3 cmp r3, r4 + 801af9c: dd01 ble.n 801afa2 + 801af9e: 9b07 ldr r3, [sp, #28] + 801afa0: b10b cbz r3, 801afa6 + tmp = tmp | IP_MF; + 801afa2: f440 5000 orr.w r0, r0, #8192 ; 0x2000 + IPH_OFFSET_SET(iphdr, lwip_htons(tmp)); + 801afa6: f7fd fc9a bl 80188de + IPH_LEN_SET(iphdr, lwip_htons((u16_t)(fragsize + IP_HLEN))); + 801afaa: 9b04 ldr r3, [sp, #16] + IPH_OFFSET_SET(iphdr, lwip_htons(tmp)); + 801afac: f8ab 0006 strh.w r0, [fp, #6] + IPH_LEN_SET(iphdr, lwip_htons((u16_t)(fragsize + IP_HLEN))); + 801afb0: f103 0014 add.w r0, r3, #20 + 801afb4: b280 uxth r0, r0 + 801afb6: f7fd fc92 bl 80188de + IPH_CHKSUM_SET(iphdr, 0); + 801afba: 2300 movs r3, #0 + netif->output(netif, rambuf, dest); + 801afbc: ee18 2a10 vmov r2, s16 + 801afc0: 4641 mov r1, r8 + IPH_LEN_SET(iphdr, lwip_htons((u16_t)(fragsize + IP_HLEN))); + 801afc2: f8ab 0002 strh.w r0, [fp, #2] + netif->output(netif, rambuf, dest); + 801afc6: 4650 mov r0, sl + IPH_CHKSUM_SET(iphdr, 0); + 801afc8: f88b 300a strb.w r3, [fp, #10] + 801afcc: f88b 300b strb.w r3, [fp, #11] + netif->output(netif, rambuf, dest); + 801afd0: f8da 3014 ldr.w r3, [sl, #20] + 801afd4: 4798 blx r3 + pbuf_free(rambuf); + 801afd6: 4640 mov r0, r8 + 801afd8: f000 fdae bl 801bb38 + left = (u16_t)(left - fragsize); + 801afdc: 9b04 ldr r3, [sp, #16] + ofo = (u16_t)(ofo + nfb); + 801afde: 9a05 ldr r2, [sp, #20] + left = (u16_t)(left - fragsize); + 801afe0: 1ae3 subs r3, r4, r3 + 801afe2: b29c uxth r4, r3 + ofo = (u16_t)(ofo + nfb); + 801afe4: 9b03 ldr r3, [sp, #12] + 801afe6: 4413 add r3, r2 + 801afe8: b29b uxth r3, r3 + 801afea: 9303 str r3, [sp, #12] + 801afec: e75a b.n 801aea4 + 801afee: bf00 nop + 801aff0: 0803a530 .word 0x0803a530 + 801aff4: 0803a6fb .word 0x0803a6fb + 801aff8: 08035999 .word 0x08035999 + 801affc: 0803a716 .word 0x0803a716 + 801b000: 0803a736 .word 0x0803a736 + 801b004: 0801aa21 .word 0x0801aa21 + +0801b008 : + + LWIP_ASSERT("Sanity check alignment", + (SIZEOF_STRUCT_MEM & (MEM_ALIGNMENT - 1)) == 0); + + /* align the heap */ + ram = (u8_t *)LWIP_MEM_ALIGN(LWIP_RAM_HEAP_POINTER); + 801b008: 4b12 ldr r3, [pc, #72] ; (801b054 ) + 801b00a: 4a13 ldr r2, [pc, #76] ; (801b058 ) + 801b00c: f023 0303 bic.w r3, r3, #3 + /* initialize the lowest-free pointer to the start of the heap */ + lfree = (struct mem *)(void *)ram; + + MEM_STATS_AVAIL(avail, MEM_SIZE_ALIGNED); + + if (sys_mutex_new(&mem_mutex) != ERR_OK) { + 801b010: 4812 ldr r0, [pc, #72] ; (801b05c ) +{ + 801b012: b510 push {r4, lr} + ram = (u8_t *)LWIP_MEM_ALIGN(LWIP_RAM_HEAP_POINTER); + 801b014: 6013 str r3, [r2, #0] + mem->next = MEM_SIZE_ALIGNED; + 801b016: f44f 62c8 mov.w r2, #1600 ; 0x640 + return (struct mem *)(void *)&ram[ptr]; + 801b01a: f503 61c8 add.w r1, r3, #1600 ; 0x640 + mem->next = MEM_SIZE_ALIGNED; + 801b01e: 601a str r2, [r3, #0] + mem->used = 0; + 801b020: 2200 movs r2, #0 + 801b022: 711a strb r2, [r3, #4] + ram_end = ptr_to_mem(MEM_SIZE_ALIGNED); + 801b024: 4a0e ldr r2, [pc, #56] ; (801b060 ) + 801b026: 6011 str r1, [r2, #0] + ram_end->next = MEM_SIZE_ALIGNED; + 801b028: 4a0e ldr r2, [pc, #56] ; (801b064 ) + 801b02a: f8c3 2640 str.w r2, [r3, #1600] ; 0x640 + ram_end->used = 1; + 801b02e: 2201 movs r2, #1 + 801b030: f883 2644 strb.w r2, [r3, #1604] ; 0x644 + lfree = (struct mem *)(void *)ram; + 801b034: 4a0c ldr r2, [pc, #48] ; (801b068 ) + 801b036: 6013 str r3, [r2, #0] + if (sys_mutex_new(&mem_mutex) != ERR_OK) { + 801b038: f001 f866 bl 801c108 + 801b03c: b140 cbz r0, 801b050 + LWIP_ASSERT("failed to create mem_mutex", 0); + 801b03e: 4b0b ldr r3, [pc, #44] ; (801b06c ) + 801b040: f240 221f movw r2, #543 ; 0x21f + 801b044: 490a ldr r1, [pc, #40] ; (801b070 ) + 801b046: 480b ldr r0, [pc, #44] ; (801b074 ) + } +} + 801b048: e8bd 4010 ldmia.w sp!, {r4, lr} + LWIP_ASSERT("failed to create mem_mutex", 0); + 801b04c: f019 bb82 b.w 8034754 +} + 801b050: bd10 pop {r4, pc} + 801b052: bf00 nop + 801b054: 2001af67 .word 0x2001af67 + 801b058: 2001af5c .word 0x2001af5c + 801b05c: 2001af58 .word 0x2001af58 + 801b060: 2001af60 .word 0x2001af60 + 801b064: 06400640 .word 0x06400640 + 801b068: 2001af54 .word 0x2001af54 + 801b06c: 0803a745 .word 0x0803a745 + 801b070: 0803a7c5 .word 0x0803a7c5 + 801b074: 08035999 .word 0x08035999 + +0801b078 : + * @param rmem is the data portion of a struct mem as returned by a previous + * call to mem_malloc() + */ +void +mem_free(void *rmem) +{ + 801b078: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} + struct mem *mem; + LWIP_MEM_FREE_DECL_PROTECT(); + + if (rmem == NULL) { + 801b07c: 4604 mov r4, r0 + 801b07e: 2800 cmp r0, #0 + 801b080: f000 80b7 beq.w 801b1f2 + LWIP_DEBUGF(MEM_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("mem_free(p == NULL) was called.\n")); + return; + } + if ((((mem_ptr_t)rmem) & (MEM_ALIGNMENT - 1)) != 0) { + 801b084: 0783 lsls r3, r0, #30 + 801b086: d00c beq.n 801b0a2 + LWIP_MEM_ILLEGAL_FREE("mem_free: sanity check alignment"); + 801b088: 4b5b ldr r3, [pc, #364] ; (801b1f8 ) + 801b08a: f240 2273 movw r2, #627 ; 0x273 + 801b08e: 495b ldr r1, [pc, #364] ; (801b1fc ) + /* Get the corresponding struct mem: */ + /* cast through void* to get rid of alignment warnings */ + mem = (struct mem *)(void *)((u8_t *)rmem - (SIZEOF_STRUCT_MEM + MEM_SANITY_OFFSET)); + + if ((u8_t *)mem < ram || (u8_t *)rmem + MIN_SIZE_ALIGNED > (u8_t *)ram_end) { + LWIP_MEM_ILLEGAL_FREE("mem_free: illegal memory"); + 801b090: 485b ldr r0, [pc, #364] ; (801b200 ) + 801b092: f019 fb5f bl 8034754 + LWIP_DEBUGF(MEM_DEBUG | LWIP_DBG_LEVEL_SEVERE, ("mem_free: illegal memory\n")); + /* protect mem stats from concurrent access */ + MEM_STATS_INC_LOCKED(illegal); + 801b096: f001 f861 bl 801c15c + MEM_SANITY(); +#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT + mem_free_count = 1; +#endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */ + LWIP_MEM_FREE_UNPROTECT(); +} + 801b09a: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} + MEM_STATS_INC_LOCKED(illegal); + 801b09e: f001 b869 b.w 801c174 + if ((u8_t *)mem < ram || (u8_t *)rmem + MIN_SIZE_ALIGNED > (u8_t *)ram_end) { + 801b0a2: f8df 8188 ldr.w r8, [pc, #392] ; 801b22c + mem = (struct mem *)(void *)((u8_t *)rmem - (SIZEOF_STRUCT_MEM + MEM_SANITY_OFFSET)); + 801b0a6: f1a0 0508 sub.w r5, r0, #8 + if ((u8_t *)mem < ram || (u8_t *)rmem + MIN_SIZE_ALIGNED > (u8_t *)ram_end) { + 801b0aa: f8d8 3000 ldr.w r3, [r8] + 801b0ae: 42ab cmp r3, r5 + 801b0b0: d805 bhi.n 801b0be + 801b0b2: 4f54 ldr r7, [pc, #336] ; (801b204 ) + 801b0b4: f100 030c add.w r3, r0, #12 + 801b0b8: 683a ldr r2, [r7, #0] + 801b0ba: 429a cmp r2, r3 + 801b0bc: d204 bcs.n 801b0c8 + LWIP_MEM_ILLEGAL_FREE("mem_free: illegal memory"); + 801b0be: 4b4e ldr r3, [pc, #312] ; (801b1f8 ) + 801b0c0: f240 227f movw r2, #639 ; 0x27f + 801b0c4: 4950 ldr r1, [pc, #320] ; (801b208 ) + 801b0c6: e7e3 b.n 801b090 + LWIP_MEM_FREE_PROTECT(); + 801b0c8: 4850 ldr r0, [pc, #320] ; (801b20c ) + 801b0ca: f001 f828 bl 801c11e + if (!mem->used) { + 801b0ce: f814 3c04 ldrb.w r3, [r4, #-4] + 801b0d2: b953 cbnz r3, 801b0ea + LWIP_MEM_ILLEGAL_FREE("mem_free: illegal memory: double free"); + 801b0d4: 4b48 ldr r3, [pc, #288] ; (801b1f8 ) + 801b0d6: f44f 7223 mov.w r2, #652 ; 0x28c + 801b0da: 494d ldr r1, [pc, #308] ; (801b210 ) + LWIP_MEM_ILLEGAL_FREE("mem_free: illegal memory: non-linked: double free"); + 801b0dc: 4848 ldr r0, [pc, #288] ; (801b200 ) + 801b0de: f019 fb39 bl 8034754 + LWIP_MEM_FREE_UNPROTECT(); + 801b0e2: 484a ldr r0, [pc, #296] ; (801b20c ) + 801b0e4: f001 f820 bl 801c128 + MEM_STATS_INC_LOCKED(illegal); + 801b0e8: e7d5 b.n 801b096 + nmem = ptr_to_mem(mem->next); + 801b0ea: f834 2c08 ldrh.w r2, [r4, #-8] + return (mem_size_t)((u8_t *)mem - ram); + 801b0ee: f8d8 1000 ldr.w r1, [r8] + if ((mem->next > MEM_SIZE_ALIGNED) || (mem->prev > MEM_SIZE_ALIGNED) || + 801b0f2: f5b2 6fc8 cmp.w r2, #1600 ; 0x640 + pmem = ptr_to_mem(mem->prev); + 801b0f6: f834 0c06 ldrh.w r0, [r4, #-6] + if ((mem->next > MEM_SIZE_ALIGNED) || (mem->prev > MEM_SIZE_ALIGNED) || + 801b0fa: d810 bhi.n 801b11e + 801b0fc: f5b0 6fc8 cmp.w r0, #1600 ; 0x640 + 801b100: d80d bhi.n 801b11e + return (mem_size_t)((u8_t *)mem - ram); + 801b102: 1a6b subs r3, r5, r1 + 801b104: b29b uxth r3, r3 + if ((mem->next > MEM_SIZE_ALIGNED) || (mem->prev > MEM_SIZE_ALIGNED) || + 801b106: 4283 cmp r3, r0 + 801b108: d002 beq.n 801b110 + ((mem->prev != rmem_idx) && (pmem->next != rmem_idx)) || + 801b10a: 5a08 ldrh r0, [r1, r0] + 801b10c: 4298 cmp r0, r3 + 801b10e: d106 bne.n 801b11e + return (struct mem *)(void *)&ram[ptr]; + 801b110: 440a add r2, r1 + ((mem->prev != rmem_idx) && (pmem->next != rmem_idx)) || + 801b112: 6838 ldr r0, [r7, #0] + 801b114: 4282 cmp r2, r0 + 801b116: d007 beq.n 801b128 + ((nmem != ram_end) && (nmem->prev != rmem_idx))) { + 801b118: 8852 ldrh r2, [r2, #2] + 801b11a: 429a cmp r2, r3 + 801b11c: d004 beq.n 801b128 + LWIP_MEM_ILLEGAL_FREE("mem_free: illegal memory: non-linked: double free"); + 801b11e: 4b36 ldr r3, [pc, #216] ; (801b1f8 ) + 801b120: f240 2295 movw r2, #661 ; 0x295 + 801b124: 493b ldr r1, [pc, #236] ; (801b214 ) + 801b126: e7d9 b.n 801b0dc + mem->used = 0; + 801b128: 2300 movs r3, #0 + if (mem < lfree) { + 801b12a: 4e3b ldr r6, [pc, #236] ; (801b218 ) + mem->used = 0; + 801b12c: f804 3c04 strb.w r3, [r4, #-4] + if (mem < lfree) { + 801b130: 6833 ldr r3, [r6, #0] + 801b132: 42ab cmp r3, r5 + lfree = mem; + 801b134: bf88 it hi + 801b136: 6035 strhi r5, [r6, #0] + LWIP_ASSERT("plug_holes: mem >= ram", (u8_t *)mem >= ram); + 801b138: 428d cmp r5, r1 + 801b13a: d206 bcs.n 801b14a + 801b13c: 4b2e ldr r3, [pc, #184] ; (801b1f8 ) + 801b13e: f240 12df movw r2, #479 ; 0x1df + 801b142: 4936 ldr r1, [pc, #216] ; (801b21c ) + 801b144: 482e ldr r0, [pc, #184] ; (801b200 ) + 801b146: f019 fb05 bl 8034754 + LWIP_ASSERT("plug_holes: mem < ram_end", (u8_t *)mem < (u8_t *)ram_end); + 801b14a: 683b ldr r3, [r7, #0] + 801b14c: 429d cmp r5, r3 + 801b14e: d306 bcc.n 801b15e + 801b150: 4b29 ldr r3, [pc, #164] ; (801b1f8 ) + 801b152: f44f 72f0 mov.w r2, #480 ; 0x1e0 + 801b156: 4932 ldr r1, [pc, #200] ; (801b220 ) + 801b158: 4829 ldr r0, [pc, #164] ; (801b200 ) + 801b15a: f019 fafb bl 8034754 + LWIP_ASSERT("plug_holes: mem->used == 0", mem->used == 0); + 801b15e: f814 3c04 ldrb.w r3, [r4, #-4] + 801b162: b133 cbz r3, 801b172 + 801b164: 4b24 ldr r3, [pc, #144] ; (801b1f8 ) + 801b166: f240 12e1 movw r2, #481 ; 0x1e1 + 801b16a: 492e ldr r1, [pc, #184] ; (801b224 ) + 801b16c: 4824 ldr r0, [pc, #144] ; (801b200 ) + 801b16e: f019 faf1 bl 8034754 + LWIP_ASSERT("plug_holes: mem->next <= MEM_SIZE_ALIGNED", mem->next <= MEM_SIZE_ALIGNED); + 801b172: f834 3c08 ldrh.w r3, [r4, #-8] + 801b176: f5b3 6fc8 cmp.w r3, #1600 ; 0x640 + 801b17a: d906 bls.n 801b18a + 801b17c: 4b1e ldr r3, [pc, #120] ; (801b1f8 ) + 801b17e: f44f 72f2 mov.w r2, #484 ; 0x1e4 + 801b182: 4929 ldr r1, [pc, #164] ; (801b228 ) + 801b184: 481e ldr r0, [pc, #120] ; (801b200 ) + 801b186: f019 fae5 bl 8034754 + return (struct mem *)(void *)&ram[ptr]; + 801b18a: f8d8 3000 ldr.w r3, [r8] + 801b18e: f834 1c08 ldrh.w r1, [r4, #-8] + 801b192: 185a adds r2, r3, r1 + if (mem != nmem && nmem->used == 0 && (u8_t *)nmem != (u8_t *)ram_end) { + 801b194: 4295 cmp r5, r2 + 801b196: d012 beq.n 801b1be + 801b198: 7910 ldrb r0, [r2, #4] + 801b19a: b980 cbnz r0, 801b1be + 801b19c: 6838 ldr r0, [r7, #0] + 801b19e: 4282 cmp r2, r0 + 801b1a0: d00d beq.n 801b1be + if (lfree == nmem) { + 801b1a2: 6830 ldr r0, [r6, #0] + 801b1a4: 4282 cmp r2, r0 + mem->next = nmem->next; + 801b1a6: 5a5a ldrh r2, [r3, r1] + 801b1a8: f824 2c08 strh.w r2, [r4, #-8] + if (nmem->next != MEM_SIZE_ALIGNED) { + 801b1ac: 5a5a ldrh r2, [r3, r1] + lfree = mem; + 801b1ae: bf08 it eq + 801b1b0: 6035 streq r5, [r6, #0] + if (nmem->next != MEM_SIZE_ALIGNED) { + 801b1b2: f5b2 6fc8 cmp.w r2, #1600 ; 0x640 + ptr_to_mem(nmem->next)->prev = mem_to_ptr(mem); + 801b1b6: bf1e ittt ne + 801b1b8: 18d2 addne r2, r2, r3 + return (mem_size_t)((u8_t *)mem - ram); + 801b1ba: 1ae9 subne r1, r5, r3 + 801b1bc: 8051 strhne r1, [r2, #2] + pmem = ptr_to_mem(mem->prev); + 801b1be: f834 2c06 ldrh.w r2, [r4, #-6] + return (struct mem *)(void *)&ram[ptr]; + 801b1c2: 1899 adds r1, r3, r2 + if (pmem != mem && pmem->used == 0) { + 801b1c4: 428d cmp r5, r1 + 801b1c6: d00f beq.n 801b1e8 + 801b1c8: 7908 ldrb r0, [r1, #4] + 801b1ca: b968 cbnz r0, 801b1e8 + if (lfree == mem) { + 801b1cc: 6830 ldr r0, [r6, #0] + 801b1ce: 4285 cmp r5, r0 + lfree = pmem; + 801b1d0: bf08 it eq + 801b1d2: 6031 streq r1, [r6, #0] + pmem->next = mem->next; + 801b1d4: f834 1c08 ldrh.w r1, [r4, #-8] + 801b1d8: 5299 strh r1, [r3, r2] + if (mem->next != MEM_SIZE_ALIGNED) { + 801b1da: f834 1c08 ldrh.w r1, [r4, #-8] + 801b1de: f5b1 6fc8 cmp.w r1, #1600 ; 0x640 + ptr_to_mem(mem->next)->prev = mem_to_ptr(pmem); + 801b1e2: bf1c itt ne + 801b1e4: 185b addne r3, r3, r1 + 801b1e6: 805a strhne r2, [r3, #2] + LWIP_MEM_FREE_UNPROTECT(); + 801b1e8: 4808 ldr r0, [pc, #32] ; (801b20c ) +} + 801b1ea: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} + LWIP_MEM_FREE_UNPROTECT(); + 801b1ee: f000 bf9b b.w 801c128 +} + 801b1f2: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + 801b1f6: bf00 nop + 801b1f8: 0803a745 .word 0x0803a745 + 801b1fc: 0803a7e0 .word 0x0803a7e0 + 801b200: 08035999 .word 0x08035999 + 801b204: 2001af60 .word 0x2001af60 + 801b208: 0803a801 .word 0x0803a801 + 801b20c: 2001af58 .word 0x2001af58 + 801b210: 0803a81a .word 0x0803a81a + 801b214: 0803a840 .word 0x0803a840 + 801b218: 2001af54 .word 0x2001af54 + 801b21c: 0803a872 .word 0x0803a872 + 801b220: 0803a889 .word 0x0803a889 + 801b224: 0803a8a3 .word 0x0803a8a3 + 801b228: 0803a8be .word 0x0803a8be + 801b22c: 2001af5c .word 0x2001af5c + +0801b230 : + * or NULL if newsize is > old size, in which case rmem is NOT touched + * or freed! + */ +void * +mem_trim(void *rmem, mem_size_t new_size) +{ + 801b230: e92d 4ff8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} + /* use the FREE_PROTECT here: it protects with sem OR SYS_ARCH_PROTECT */ + LWIP_MEM_FREE_DECL_PROTECT(); + + /* Expand the size of the allocated memory region so that we can + adjust for alignment. */ + newsize = (mem_size_t)LWIP_MEM_ALIGN_SIZE(new_size); + 801b234: 1ccc adds r4, r1, #3 +{ + 801b236: 4605 mov r5, r0 + newsize = (mem_size_t)LWIP_MEM_ALIGN_SIZE(new_size); + 801b238: f024 0403 bic.w r4, r4, #3 + 801b23c: b2a4 uxth r4, r4 + if (newsize < MIN_SIZE_ALIGNED) { + 801b23e: 2c0b cmp r4, #11 + 801b240: d904 bls.n 801b24c + newsize = MIN_SIZE_ALIGNED; + } +#if MEM_OVERFLOW_CHECK + newsize += MEM_SANITY_REGION_BEFORE_ALIGNED + MEM_SANITY_REGION_AFTER_ALIGNED; +#endif + if ((newsize > MEM_SIZE_ALIGNED) || (newsize < new_size)) { + 801b242: f5b4 6fc8 cmp.w r4, #1600 ; 0x640 + 801b246: d902 bls.n 801b24e + return NULL; + 801b248: 2500 movs r5, #0 + 801b24a: e01f b.n 801b28c + newsize = MIN_SIZE_ALIGNED; + 801b24c: 240c movs r4, #12 + if ((newsize > MEM_SIZE_ALIGNED) || (newsize < new_size)) { + 801b24e: 42a1 cmp r1, r4 + 801b250: d8fa bhi.n 801b248 + } + + LWIP_ASSERT("mem_trim: legal memory", (u8_t *)rmem >= (u8_t *)ram && + 801b252: f8df 8144 ldr.w r8, [pc, #324] ; 801b398 + 801b256: f8d8 3000 ldr.w r3, [r8] + 801b25a: 42ab cmp r3, r5 + 801b25c: d803 bhi.n 801b266 + 801b25e: 4b46 ldr r3, [pc, #280] ; (801b378 ) + 801b260: 681b ldr r3, [r3, #0] + 801b262: 42ab cmp r3, r5 + 801b264: d806 bhi.n 801b274 + 801b266: 4b45 ldr r3, [pc, #276] ; (801b37c ) + 801b268: f240 22d1 movw r2, #721 ; 0x2d1 + 801b26c: 4944 ldr r1, [pc, #272] ; (801b380 ) + 801b26e: 4845 ldr r0, [pc, #276] ; (801b384 ) + 801b270: f019 fa70 bl 8034754 + (u8_t *)rmem < (u8_t *)ram_end); + + if ((u8_t *)rmem < (u8_t *)ram || (u8_t *)rmem >= (u8_t *)ram_end) { + 801b274: f8d8 3000 ldr.w r3, [r8] + 801b278: 42ab cmp r3, r5 + 801b27a: d803 bhi.n 801b284 + 801b27c: 4a3e ldr r2, [pc, #248] ; (801b378 ) + 801b27e: 6812 ldr r2, [r2, #0] + 801b280: 42aa cmp r2, r5 + 801b282: d806 bhi.n 801b292 + LWIP_DEBUGF(MEM_DEBUG | LWIP_DBG_LEVEL_SEVERE, ("mem_trim: illegal memory\n")); + /* protect mem stats from concurrent access */ + MEM_STATS_INC_LOCKED(illegal); + 801b284: f000 ff6a bl 801c15c + 801b288: f000 ff74 bl 801c174 +#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT + mem_free_count = 1; +#endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */ + LWIP_MEM_FREE_UNPROTECT(); + return rmem; +} + 801b28c: 4628 mov r0, r5 + 801b28e: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} + mem = (struct mem *)(void *)((u8_t *)rmem - (SIZEOF_STRUCT_MEM + MEM_SANITY_OFFSET)); + 801b292: f1a5 0608 sub.w r6, r5, #8 + size = (mem_size_t)((mem_size_t)(mem->next - ptr) - (SIZEOF_STRUCT_MEM + MEM_SANITY_OVERHEAD)); + 801b296: f835 7c08 ldrh.w r7, [r5, #-8] + return (mem_size_t)((u8_t *)mem - ram); + 801b29a: 1af6 subs r6, r6, r3 + size = (mem_size_t)((mem_size_t)(mem->next - ptr) - (SIZEOF_STRUCT_MEM + MEM_SANITY_OVERHEAD)); + 801b29c: 3f08 subs r7, #8 + return (mem_size_t)((u8_t *)mem - ram); + 801b29e: b2b6 uxth r6, r6 + size = (mem_size_t)((mem_size_t)(mem->next - ptr) - (SIZEOF_STRUCT_MEM + MEM_SANITY_OVERHEAD)); + 801b2a0: 1bbf subs r7, r7, r6 + 801b2a2: b2bf uxth r7, r7 + LWIP_ASSERT("mem_trim can only shrink memory", newsize <= size); + 801b2a4: 42a7 cmp r7, r4 + 801b2a6: d207 bcs.n 801b2b8 + 801b2a8: 4b34 ldr r3, [pc, #208] ; (801b37c ) + 801b2aa: f44f 7239 mov.w r2, #740 ; 0x2e4 + 801b2ae: 4936 ldr r1, [pc, #216] ; (801b388 ) + 801b2b0: 4834 ldr r0, [pc, #208] ; (801b384 ) + 801b2b2: f019 fa4f bl 8034754 + if (newsize > size) { + 801b2b6: e7c7 b.n 801b248 + if (newsize == size) { + 801b2b8: d0e8 beq.n 801b28c + LWIP_MEM_FREE_PROTECT(); + 801b2ba: 4834 ldr r0, [pc, #208] ; (801b38c ) + 801b2bc: f000 ff2f bl 801c11e + mem2 = ptr_to_mem(mem->next); + 801b2c0: f835 9c08 ldrh.w r9, [r5, #-8] + return (struct mem *)(void *)&ram[ptr]; + 801b2c4: f8d8 b000 ldr.w fp, [r8] + 801b2c8: eb0b 0a09 add.w sl, fp, r9 + if (mem2->used == 0) { + 801b2cc: f89a 3004 ldrb.w r3, [sl, #4] + 801b2d0: bb43 cbnz r3, 801b324 + LWIP_ASSERT("invalid next ptr", mem->next != MEM_SIZE_ALIGNED); + 801b2d2: f5b9 6fc8 cmp.w r9, #1600 ; 0x640 + 801b2d6: d106 bne.n 801b2e6 + 801b2d8: 4b28 ldr r3, [pc, #160] ; (801b37c ) + 801b2da: f240 22f5 movw r2, #757 ; 0x2f5 + 801b2de: 492c ldr r1, [pc, #176] ; (801b390 ) + 801b2e0: 4828 ldr r0, [pc, #160] ; (801b384 ) + 801b2e2: f019 fa37 bl 8034754 + if (lfree == mem2) { + 801b2e6: 482b ldr r0, [pc, #172] ; (801b394 ) + ptr2 = (mem_size_t)(ptr + SIZEOF_STRUCT_MEM + newsize); + 801b2e8: f106 0308 add.w r3, r6, #8 + return (struct mem *)(void *)&ram[ptr]; + 801b2ec: f8d8 2000 ldr.w r2, [r8] + ptr2 = (mem_size_t)(ptr + SIZEOF_STRUCT_MEM + newsize); + 801b2f0: 4423 add r3, r4 + if (lfree == mem2) { + 801b2f2: 6804 ldr r4, [r0, #0] + next = mem2->next; + 801b2f4: f83b 7009 ldrh.w r7, [fp, r9] + ptr2 = (mem_size_t)(ptr + SIZEOF_STRUCT_MEM + newsize); + 801b2f8: b299 uxth r1, r3 + if (lfree == mem2) { + 801b2fa: 4554 cmp r4, sl + return (struct mem *)(void *)&ram[ptr]; + 801b2fc: fa12 f383 uxtah r3, r2, r3 + lfree = ptr_to_mem(ptr2); + 801b300: bf08 it eq + 801b302: 6003 streq r3, [r0, #0] + mem2->used = 0; + 801b304: 2000 movs r0, #0 + 801b306: 7118 strb r0, [r3, #4] + mem2->next = next; + 801b308: 5257 strh r7, [r2, r1] + mem2->prev = ptr; + 801b30a: 805e strh r6, [r3, #2] + mem->next = ptr2; + 801b30c: f825 1c08 strh.w r1, [r5, #-8] + if (mem2->next != MEM_SIZE_ALIGNED) { + 801b310: 5a53 ldrh r3, [r2, r1] + 801b312: f5b3 6fc8 cmp.w r3, #1600 ; 0x640 + 801b316: d001 beq.n 801b31c + ptr_to_mem(mem2->next)->prev = ptr2; + 801b318: 441a add r2, r3 + 801b31a: 8051 strh r1, [r2, #2] + LWIP_MEM_FREE_UNPROTECT(); + 801b31c: 481b ldr r0, [pc, #108] ; (801b38c ) + 801b31e: f000 ff03 bl 801c128 + return rmem; + 801b322: e7b3 b.n 801b28c + } else if (newsize + SIZEOF_STRUCT_MEM + MIN_SIZE_ALIGNED <= size) { + 801b324: f104 0314 add.w r3, r4, #20 + 801b328: b29b uxth r3, r3 + 801b32a: 429f cmp r7, r3 + 801b32c: d3f6 bcc.n 801b31c + ptr2 = (mem_size_t)(ptr + SIZEOF_STRUCT_MEM + newsize); + 801b32e: f106 0308 add.w r3, r6, #8 + LWIP_ASSERT("invalid next ptr", mem->next != MEM_SIZE_ALIGNED); + 801b332: f5b9 6fc8 cmp.w r9, #1600 ; 0x640 + ptr2 = (mem_size_t)(ptr + SIZEOF_STRUCT_MEM + newsize); + 801b336: 441c add r4, r3 + 801b338: b2a4 uxth r4, r4 + LWIP_ASSERT("invalid next ptr", mem->next != MEM_SIZE_ALIGNED); + 801b33a: d106 bne.n 801b34a + 801b33c: 4b0f ldr r3, [pc, #60] ; (801b37c ) + 801b33e: f240 3216 movw r2, #790 ; 0x316 + 801b342: 4913 ldr r1, [pc, #76] ; (801b390 ) + 801b344: 480f ldr r0, [pc, #60] ; (801b384 ) + 801b346: f019 fa05 bl 8034754 + return (struct mem *)(void *)&ram[ptr]; + 801b34a: f8d8 3000 ldr.w r3, [r8] + if (mem2 < lfree) { + 801b34e: 4911 ldr r1, [pc, #68] ; (801b394 ) + return (struct mem *)(void *)&ram[ptr]; + 801b350: 191a adds r2, r3, r4 + if (mem2 < lfree) { + 801b352: 6808 ldr r0, [r1, #0] + 801b354: 4290 cmp r0, r2 + lfree = mem2; + 801b356: bf88 it hi + 801b358: 600a strhi r2, [r1, #0] + mem2->used = 0; + 801b35a: 2100 movs r1, #0 + 801b35c: 7111 strb r1, [r2, #4] + mem2->next = mem->next; + 801b35e: f835 1c08 ldrh.w r1, [r5, #-8] + 801b362: 5319 strh r1, [r3, r4] + mem2->prev = ptr; + 801b364: 8056 strh r6, [r2, #2] + mem->next = ptr2; + 801b366: f825 4c08 strh.w r4, [r5, #-8] + if (mem2->next != MEM_SIZE_ALIGNED) { + 801b36a: 5b1a ldrh r2, [r3, r4] + 801b36c: f5b2 6fc8 cmp.w r2, #1600 ; 0x640 + ptr_to_mem(mem2->next)->prev = ptr2; + 801b370: bf1c itt ne + 801b372: 189b addne r3, r3, r2 + 801b374: 805c strhne r4, [r3, #2] + 801b376: e7d1 b.n 801b31c + 801b378: 2001af60 .word 0x2001af60 + 801b37c: 0803a745 .word 0x0803a745 + 801b380: 0803a8e8 .word 0x0803a8e8 + 801b384: 08035999 .word 0x08035999 + 801b388: 0803a8ff .word 0x0803a8ff + 801b38c: 2001af58 .word 0x2001af58 + 801b390: 0803a91f .word 0x0803a91f + 801b394: 2001af54 .word 0x2001af54 + 801b398: 2001af5c .word 0x2001af5c + +0801b39c : + * + * Note that the returned value will always be aligned (as defined by MEM_ALIGNMENT). + */ +void * +mem_malloc(mem_size_t size_in) +{ + 801b39c: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} +#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT + u8_t local_mem_free_count = 0; +#endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */ + LWIP_MEM_ALLOC_DECL_PROTECT(); + + if (size_in == 0) { + 801b3a0: 2800 cmp r0, #0 + 801b3a2: f000 808a beq.w 801b4ba + return NULL; + } + + /* Expand the size of the allocated memory region so that we can + adjust for alignment. */ + size = (mem_size_t)LWIP_MEM_ALIGN_SIZE(size_in); + 801b3a6: 1cc5 adds r5, r0, #3 + 801b3a8: f025 0503 bic.w r5, r5, #3 + 801b3ac: b2ad uxth r5, r5 + if (size < MIN_SIZE_ALIGNED) { + 801b3ae: 2d0b cmp r5, #11 + 801b3b0: d904 bls.n 801b3bc + size = MIN_SIZE_ALIGNED; + } +#if MEM_OVERFLOW_CHECK + size += MEM_SANITY_REGION_BEFORE_ALIGNED + MEM_SANITY_REGION_AFTER_ALIGNED; +#endif + if ((size > MEM_SIZE_ALIGNED) || (size < size_in)) { + 801b3b2: f5b5 6fc8 cmp.w r5, #1600 ; 0x640 + 801b3b6: d902 bls.n 801b3be + return NULL; + 801b3b8: 2000 movs r0, #0 + 801b3ba: e07e b.n 801b4ba + size = MIN_SIZE_ALIGNED; + 801b3bc: 250c movs r5, #12 + if ((size > MEM_SIZE_ALIGNED) || (size < size_in)) { + 801b3be: 42a8 cmp r0, r5 + 801b3c0: d8fa bhi.n 801b3b8 + return (mem_size_t)((u8_t *)mem - ram); + 801b3c2: f8df 9130 ldr.w r9, [pc, #304] ; 801b4f4 + break; + } +#endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */ + + if ((!mem->used) && + (mem->next - (ptr + SIZEOF_STRUCT_MEM)) >= size) { + 801b3c6: f06f 0707 mvn.w r7, #7 + for (ptr = mem_to_ptr(lfree); ptr < MEM_SIZE_ALIGNED - size; + 801b3ca: f8df 812c ldr.w r8, [pc, #300] ; 801b4f8 + sys_mutex_lock(&mem_mutex); + 801b3ce: 4840 ldr r0, [pc, #256] ; (801b4d0 ) + 801b3d0: f000 fea5 bl 801c11e + return (mem_size_t)((u8_t *)mem - ram); + 801b3d4: f8d9 2000 ldr.w r2, [r9] + 801b3d8: f8d8 6000 ldr.w r6, [r8] + for (ptr = mem_to_ptr(lfree); ptr < MEM_SIZE_ALIGNED - size; + 801b3dc: f5c5 60c8 rsb r0, r5, #1600 ; 0x640 + return (mem_size_t)((u8_t *)mem - ram); + 801b3e0: 1ab6 subs r6, r6, r2 + 801b3e2: b2b6 uxth r6, r6 + for (ptr = mem_to_ptr(lfree); ptr < MEM_SIZE_ALIGNED - size; + 801b3e4: 4286 cmp r6, r0 + 801b3e6: d303 bcc.n 801b3f0 + /* if we got interrupted by a mem_free, try again */ + } while (local_mem_free_count != 0); +#endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */ + MEM_STATS_INC(err); + LWIP_MEM_ALLOC_UNPROTECT(); + sys_mutex_unlock(&mem_mutex); + 801b3e8: 4839 ldr r0, [pc, #228] ; (801b4d0 ) + 801b3ea: f000 fe9d bl 801c128 + LWIP_DEBUGF(MEM_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("mem_malloc: could not allocate %"S16_F" bytes\n", (s16_t)size)); + return NULL; + 801b3ee: e7e3 b.n 801b3b8 + return (struct mem *)(void *)&ram[ptr]; + 801b3f0: 1994 adds r4, r2, r6 + (mem->next - (ptr + SIZEOF_STRUCT_MEM)) >= size) { + 801b3f2: 5b91 ldrh r1, [r2, r6] + if ((!mem->used) && + 801b3f4: 7923 ldrb r3, [r4, #4] + 801b3f6: 2b00 cmp r3, #0 + 801b3f8: d167 bne.n 801b4ca + (mem->next - (ptr + SIZEOF_STRUCT_MEM)) >= size) { + 801b3fa: 1bbb subs r3, r7, r6 + 801b3fc: 440b add r3, r1 + if ((!mem->used) && + 801b3fe: 42ab cmp r3, r5 + 801b400: d363 bcc.n 801b4ca + if (mem->next - (ptr + SIZEOF_STRUCT_MEM) >= (size + SIZEOF_STRUCT_MEM + MIN_SIZE_ALIGNED)) { + 801b402: f105 0214 add.w r2, r5, #20 + 801b406: 4293 cmp r3, r2 + 801b408: d359 bcc.n 801b4be + ptr2 = (mem_size_t)(ptr + SIZEOF_STRUCT_MEM + size); + 801b40a: f105 0708 add.w r7, r5, #8 + 801b40e: 4437 add r7, r6 + 801b410: b2bf uxth r7, r7 + LWIP_ASSERT("invalid next ptr",ptr2 != MEM_SIZE_ALIGNED); + 801b412: f5b7 6fc8 cmp.w r7, #1600 ; 0x640 + 801b416: d106 bne.n 801b426 + 801b418: 4b2e ldr r3, [pc, #184] ; (801b4d4 ) + 801b41a: f240 3287 movw r2, #903 ; 0x387 + 801b41e: 492e ldr r1, [pc, #184] ; (801b4d8 ) + 801b420: 482e ldr r0, [pc, #184] ; (801b4dc ) + 801b422: f019 f997 bl 8034754 + return (struct mem *)(void *)&ram[ptr]; + 801b426: f8d9 3000 ldr.w r3, [r9] + mem2->used = 0; + 801b42a: 2100 movs r1, #0 + return (struct mem *)(void *)&ram[ptr]; + 801b42c: 19da adds r2, r3, r7 + mem2->used = 0; + 801b42e: 7111 strb r1, [r2, #4] + mem2->next = mem->next; + 801b430: 8821 ldrh r1, [r4, #0] + 801b432: 53d9 strh r1, [r3, r7] + mem2->prev = ptr; + 801b434: 8056 strh r6, [r2, #2] + mem->used = 1; + 801b436: 2201 movs r2, #1 + mem->next = ptr2; + 801b438: 8027 strh r7, [r4, #0] + mem->used = 1; + 801b43a: 7122 strb r2, [r4, #4] + if (mem2->next != MEM_SIZE_ALIGNED) { + 801b43c: 5bda ldrh r2, [r3, r7] + 801b43e: f5b2 6fc8 cmp.w r2, #1600 ; 0x640 + 801b442: d001 beq.n 801b448 + ptr_to_mem(mem2->next)->prev = ptr2; + 801b444: 4413 add r3, r2 + 801b446: 805f strh r7, [r3, #2] + if (mem == lfree) { + 801b448: f8d8 3000 ldr.w r3, [r8] + 801b44c: 4e24 ldr r6, [pc, #144] ; (801b4e0 ) + 801b44e: 42a3 cmp r3, r4 + 801b450: d112 bne.n 801b478 + while (cur->used && cur != ram_end) { + 801b452: 6831 ldr r1, [r6, #0] + return (struct mem *)(void *)&ram[ptr]; + 801b454: f8d9 0000 ldr.w r0, [r9] + while (cur->used && cur != ram_end) { + 801b458: 791a ldrb r2, [r3, #4] + 801b45a: b10a cbz r2, 801b460 + 801b45c: 4299 cmp r1, r3 + 801b45e: d131 bne.n 801b4c4 + LWIP_ASSERT("mem_malloc: !lfree->used", ((lfree == ram_end) || (!lfree->used))); + 801b460: 4299 cmp r1, r3 + lfree = cur; + 801b462: f8c8 3000 str.w r3, [r8] + LWIP_ASSERT("mem_malloc: !lfree->used", ((lfree == ram_end) || (!lfree->used))); + 801b466: d007 beq.n 801b478 + 801b468: b132 cbz r2, 801b478 + 801b46a: 4b1a ldr r3, [pc, #104] ; (801b4d4 ) + 801b46c: f240 32b5 movw r2, #949 ; 0x3b5 + 801b470: 491c ldr r1, [pc, #112] ; (801b4e4 ) + 801b472: 481a ldr r0, [pc, #104] ; (801b4dc ) + 801b474: f019 f96e bl 8034754 + LWIP_ASSERT("mem_malloc: allocated memory not above ram_end.", + 801b478: 3508 adds r5, #8 + sys_mutex_unlock(&mem_mutex); + 801b47a: 4815 ldr r0, [pc, #84] ; (801b4d0 ) + 801b47c: f000 fe54 bl 801c128 + LWIP_ASSERT("mem_malloc: allocated memory not above ram_end.", + 801b480: 6833 ldr r3, [r6, #0] + 801b482: 4425 add r5, r4 + 801b484: 42ab cmp r3, r5 + 801b486: d206 bcs.n 801b496 + 801b488: 4b12 ldr r3, [pc, #72] ; (801b4d4 ) + 801b48a: f240 32b9 movw r2, #953 ; 0x3b9 + 801b48e: 4916 ldr r1, [pc, #88] ; (801b4e8 ) + 801b490: 4812 ldr r0, [pc, #72] ; (801b4dc ) + 801b492: f019 f95f bl 8034754 + LWIP_ASSERT("mem_malloc: allocated memory properly aligned.", + 801b496: 07a3 lsls r3, r4, #30 + 801b498: d00d beq.n 801b4b6 + 801b49a: 4b0e ldr r3, [pc, #56] ; (801b4d4 ) + 801b49c: f240 32bb movw r2, #955 ; 0x3bb + 801b4a0: 4912 ldr r1, [pc, #72] ; (801b4ec ) + 801b4a2: 480e ldr r0, [pc, #56] ; (801b4dc ) + 801b4a4: f019 f956 bl 8034754 + LWIP_ASSERT("mem_malloc: sanity check alignment", + 801b4a8: 4b0a ldr r3, [pc, #40] ; (801b4d4 ) + 801b4aa: f240 32bd movw r2, #957 ; 0x3bd + 801b4ae: 4910 ldr r1, [pc, #64] ; (801b4f0 ) + 801b4b0: 480a ldr r0, [pc, #40] ; (801b4dc ) + 801b4b2: f019 f94f bl 8034754 + return (u8_t *)mem + SIZEOF_STRUCT_MEM + MEM_SANITY_OFFSET; + 801b4b6: f104 0008 add.w r0, r4, #8 +} + 801b4ba: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} + mem->used = 1; + 801b4be: 2301 movs r3, #1 + 801b4c0: 7123 strb r3, [r4, #4] + 801b4c2: e7c1 b.n 801b448 + return (struct mem *)(void *)&ram[ptr]; + 801b4c4: 881b ldrh r3, [r3, #0] + 801b4c6: 4403 add r3, r0 + 801b4c8: e7c6 b.n 801b458 + 801b4ca: 460e mov r6, r1 + 801b4cc: e78a b.n 801b3e4 + 801b4ce: bf00 nop + 801b4d0: 2001af58 .word 0x2001af58 + 801b4d4: 0803a745 .word 0x0803a745 + 801b4d8: 0803a91f .word 0x0803a91f + 801b4dc: 08035999 .word 0x08035999 + 801b4e0: 2001af60 .word 0x2001af60 + 801b4e4: 0803a930 .word 0x0803a930 + 801b4e8: 0803a949 .word 0x0803a949 + 801b4ec: 0803a979 .word 0x0803a979 + 801b4f0: 0803a9a8 .word 0x0803a9a8 + 801b4f4: 2001af5c .word 0x2001af5c + 801b4f8: 2001af54 .word 0x2001af54 + +0801b4fc : +#if !MEMP_OVERFLOW_CHECK +do_memp_malloc_pool(const struct memp_desc *desc) +#else +do_memp_malloc_pool_fn(const struct memp_desc *desc, const char *file, const int line) +#endif +{ + 801b4fc: b538 push {r3, r4, r5, lr} + 801b4fe: 4604 mov r4, r0 + +#if MEMP_MEM_MALLOC + memp = (struct memp *)mem_malloc(MEMP_SIZE + MEMP_ALIGN_SIZE(desc->size)); + SYS_ARCH_PROTECT(old_level); +#else /* MEMP_MEM_MALLOC */ + SYS_ARCH_PROTECT(old_level); + 801b500: f000 fe2c bl 801c15c + 801b504: 4605 mov r5, r0 + + memp = *desc->tab; + 801b506: 68a3 ldr r3, [r4, #8] + 801b508: 681c ldr r4, [r3, #0] +#endif /* MEMP_MEM_MALLOC */ + + if (memp != NULL) { + 801b50a: b15c cbz r4, 801b524 +#if !MEMP_MEM_MALLOC +#if MEMP_OVERFLOW_CHECK == 1 + memp_overflow_check_element(memp, desc); +#endif /* MEMP_OVERFLOW_CHECK */ + + *desc->tab = memp->next; + 801b50c: 6822 ldr r2, [r4, #0] + 801b50e: 601a str r2, [r3, #0] + memp->line = line; +#if MEMP_MEM_MALLOC + memp_overflow_init_element(memp, desc); +#endif /* MEMP_MEM_MALLOC */ +#endif /* MEMP_OVERFLOW_CHECK */ + LWIP_ASSERT("memp_malloc: memp properly aligned", + 801b510: 07a3 lsls r3, r4, #30 + 801b512: d006 beq.n 801b522 + 801b514: 4b05 ldr r3, [pc, #20] ; (801b52c ) + 801b516: f44f 728c mov.w r2, #280 ; 0x118 + 801b51a: 4905 ldr r1, [pc, #20] ; (801b530 ) + 801b51c: 4805 ldr r0, [pc, #20] ; (801b534 ) + 801b51e: f019 f919 bl 8034754 + desc->stats->used++; + if (desc->stats->used > desc->stats->max) { + desc->stats->max = desc->stats->used; + } +#endif + SYS_ARCH_UNPROTECT(old_level); + 801b522: 4628 mov r0, r5 + return ((u8_t *)memp + MEMP_SIZE); + } else { +#if MEMP_STATS + desc->stats->err++; +#endif + SYS_ARCH_UNPROTECT(old_level); + 801b524: f000 fe26 bl 801c174 + LWIP_DEBUGF(MEMP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("memp_malloc: out of memory in pool %s\n", desc->desc)); + } + + return NULL; +} + 801b528: 4620 mov r0, r4 + 801b52a: bd38 pop {r3, r4, r5, pc} + 801b52c: 0803a9cb .word 0x0803a9cb + 801b530: 0803aa4c .word 0x0803aa4c + 801b534: 08035999 .word 0x08035999 + +0801b538 : + return memp; +} + +static void +do_memp_free_pool(const struct memp_desc *desc, void *mem) +{ + 801b538: b538 push {r3, r4, r5, lr} + struct memp *memp; + SYS_ARCH_DECL_PROTECT(old_level); + + LWIP_ASSERT("memp_free: mem properly aligned", + 801b53a: 078b lsls r3, r1, #30 +{ + 801b53c: 4605 mov r5, r0 + 801b53e: 460c mov r4, r1 + LWIP_ASSERT("memp_free: mem properly aligned", + 801b540: d006 beq.n 801b550 + 801b542: 4b08 ldr r3, [pc, #32] ; (801b564 ) + 801b544: f44f 72b6 mov.w r2, #364 ; 0x16c + 801b548: 4907 ldr r1, [pc, #28] ; (801b568 ) + 801b54a: 4808 ldr r0, [pc, #32] ; (801b56c ) + 801b54c: f019 f902 bl 8034754 + ((mem_ptr_t)mem % MEM_ALIGNMENT) == 0); + + /* cast through void* to get rid of alignment warnings */ + memp = (struct memp *)(void *)((u8_t *)mem - MEMP_SIZE); + + SYS_ARCH_PROTECT(old_level); + 801b550: f000 fe04 bl 801c15c +#if MEMP_MEM_MALLOC + LWIP_UNUSED_ARG(desc); + SYS_ARCH_UNPROTECT(old_level); + mem_free(memp); +#else /* MEMP_MEM_MALLOC */ + memp->next = *desc->tab; + 801b554: 68ab ldr r3, [r5, #8] + 801b556: 681a ldr r2, [r3, #0] + 801b558: 6022 str r2, [r4, #0] + *desc->tab = memp; + 801b55a: 601c str r4, [r3, #0] + LWIP_ASSERT("memp sanity", memp_sanity(desc)); +#endif /* MEMP_SANITY_CHECK */ + + SYS_ARCH_UNPROTECT(old_level); +#endif /* !MEMP_MEM_MALLOC */ +} + 801b55c: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} + SYS_ARCH_UNPROTECT(old_level); + 801b560: f000 be08 b.w 801c174 + 801b564: 0803a9cb .word 0x0803a9cb + 801b568: 0803aa6f .word 0x0803aa6f + 801b56c: 08035999 .word 0x08035999 + +0801b570 : + memp = (struct memp *)LWIP_MEM_ALIGN(desc->base); + 801b570: 6843 ldr r3, [r0, #4] + *desc->tab = NULL; + 801b572: 2200 movs r2, #0 + 801b574: 6881 ldr r1, [r0, #8] + memp = (struct memp *)LWIP_MEM_ALIGN(desc->base); + 801b576: 3303 adds r3, #3 +{ + 801b578: b530 push {r4, r5, lr} + memp = (struct memp *)LWIP_MEM_ALIGN(desc->base); + 801b57a: f023 0303 bic.w r3, r3, #3 + for (i = 0; i < desc->num; ++i) { + 801b57e: 8844 ldrh r4, [r0, #2] + *desc->tab = NULL; + 801b580: 600a str r2, [r1, #0] + for (i = 0; i < desc->num; ++i) { + 801b582: 4294 cmp r4, r2 + 801b584: dc00 bgt.n 801b588 +} + 801b586: bd30 pop {r4, r5, pc} + memp->next = *desc->tab; + 801b588: 680d ldr r5, [r1, #0] + for (i = 0; i < desc->num; ++i) { + 801b58a: 3201 adds r2, #1 + memp->next = *desc->tab; + 801b58c: 601d str r5, [r3, #0] + memp = (struct memp *)(void *)((u8_t *)memp + MEMP_SIZE + desc->size + 801b58e: 8805 ldrh r5, [r0, #0] + *desc->tab = memp; + 801b590: 600b str r3, [r1, #0] + memp = (struct memp *)(void *)((u8_t *)memp + MEMP_SIZE + desc->size + 801b592: 442b add r3, r5 + for (i = 0; i < desc->num; ++i) { + 801b594: e7f5 b.n 801b582 + ... + +0801b598 : +{ + 801b598: b538 push {r3, r4, r5, lr} + 801b59a: 4d05 ldr r5, [pc, #20] ; (801b5b0 ) + 801b59c: 240d movs r4, #13 + for (i = 0; i < LWIP_ARRAYSIZE(memp_pools); i++) { + 801b59e: 3c01 subs r4, #1 + memp_init_pool(memp_pools[i]); + 801b5a0: f855 0b04 ldr.w r0, [r5], #4 + 801b5a4: f7ff ffe4 bl 801b570 + for (i = 0; i < LWIP_ARRAYSIZE(memp_pools); i++) { + 801b5a8: b2a4 uxth r4, r4 + 801b5aa: 2c00 cmp r4, #0 + 801b5ac: d1f7 bne.n 801b59e +} + 801b5ae: bd38 pop {r3, r4, r5, pc} + 801b5b0: 0803ab78 .word 0x0803ab78 + +0801b5b4 : +{ + 801b5b4: b510 push {r4, lr} + LWIP_ASSERT("invalid pool desc", desc != NULL); + 801b5b6: 4604 mov r4, r0 + 801b5b8: b118 cbz r0, 801b5c2 +} + 801b5ba: e8bd 4010 ldmia.w sp!, {r4, lr} + return do_memp_malloc_pool(desc); + 801b5be: f7ff bf9d b.w 801b4fc + LWIP_ASSERT("invalid pool desc", desc != NULL); + 801b5c2: 4b04 ldr r3, [pc, #16] ; (801b5d4 ) + 801b5c4: f44f 729e mov.w r2, #316 ; 0x13c + 801b5c8: 4903 ldr r1, [pc, #12] ; (801b5d8 ) + 801b5ca: 4804 ldr r0, [pc, #16] ; (801b5dc ) + 801b5cc: f019 f8c2 bl 8034754 +} + 801b5d0: 4620 mov r0, r4 + 801b5d2: bd10 pop {r4, pc} + 801b5d4: 0803a9cb .word 0x0803a9cb + 801b5d8: 0803aa8f .word 0x0803aa8f + 801b5dc: 08035999 .word 0x08035999 + +0801b5e0 : + LWIP_ERROR("memp_malloc: type < MEMP_MAX", (type < MEMP_MAX), return NULL;); + 801b5e0: 280c cmp r0, #12 +{ + 801b5e2: b508 push {r3, lr} + LWIP_ERROR("memp_malloc: type < MEMP_MAX", (type < MEMP_MAX), return NULL;); + 801b5e4: d806 bhi.n 801b5f4 + memp = do_memp_malloc_pool(memp_pools[type]); + 801b5e6: 4b08 ldr r3, [pc, #32] ; (801b608 ) + 801b5e8: f853 0020 ldr.w r0, [r3, r0, lsl #2] +} + 801b5ec: e8bd 4008 ldmia.w sp!, {r3, lr} + memp = do_memp_malloc_pool(memp_pools[type]); + 801b5f0: f7ff bf84 b.w 801b4fc + LWIP_ERROR("memp_malloc: type < MEMP_MAX", (type < MEMP_MAX), return NULL;); + 801b5f4: 4b05 ldr r3, [pc, #20] ; (801b60c ) + 801b5f6: f240 1257 movw r2, #343 ; 0x157 + 801b5fa: 4905 ldr r1, [pc, #20] ; (801b610 ) + 801b5fc: 4805 ldr r0, [pc, #20] ; (801b614 ) + 801b5fe: f019 f8a9 bl 8034754 +} + 801b602: 2000 movs r0, #0 + 801b604: bd08 pop {r3, pc} + 801b606: bf00 nop + 801b608: 0803ab78 .word 0x0803ab78 + 801b60c: 0803a9cb .word 0x0803a9cb + 801b610: 0803aaa1 .word 0x0803aaa1 + 801b614: 08035999 .word 0x08035999 + +0801b618 : + * @param mem the memp element to free + */ +void +memp_free_pool(const struct memp_desc *desc, void *mem) +{ + LWIP_ASSERT("invalid pool desc", desc != NULL); + 801b618: b940 cbnz r0, 801b62c + 801b61a: 4b06 ldr r3, [pc, #24] ; (801b634 ) + 801b61c: f240 1295 movw r2, #405 ; 0x195 + 801b620: 4905 ldr r1, [pc, #20] ; (801b638 ) + 801b622: 4806 ldr r0, [pc, #24] ; (801b63c ) + 801b624: f019 b896 b.w 8034754 + if ((desc == NULL) || (mem == NULL)) { + return; + } + + do_memp_free_pool(desc, mem); + 801b628: f7ff bf86 b.w 801b538 + if ((desc == NULL) || (mem == NULL)) { + 801b62c: 2900 cmp r1, #0 + 801b62e: d1fb bne.n 801b628 +} + 801b630: 4770 bx lr + 801b632: bf00 nop + 801b634: 0803a9cb .word 0x0803a9cb + 801b638: 0803aa8f .word 0x0803aa8f + 801b63c: 08035999 .word 0x08035999 + +0801b640 : +{ +#ifdef LWIP_HOOK_MEMP_AVAILABLE + struct memp *old_first; +#endif + + LWIP_ERROR("memp_free: type < MEMP_MAX", (type < MEMP_MAX), return;); + 801b640: 280c cmp r0, #12 + 801b642: d906 bls.n 801b652 + 801b644: 4b06 ldr r3, [pc, #24] ; (801b660 ) + 801b646: f44f 72d5 mov.w r2, #426 ; 0x1aa + 801b64a: 4906 ldr r1, [pc, #24] ; (801b664 ) + 801b64c: 4806 ldr r0, [pc, #24] ; (801b668 ) + 801b64e: f019 b881 b.w 8034754 + + if (mem == NULL) { + 801b652: b121 cbz r1, 801b65e + +#ifdef LWIP_HOOK_MEMP_AVAILABLE + old_first = *memp_pools[type]->tab; +#endif + + do_memp_free_pool(memp_pools[type], mem); + 801b654: 4b05 ldr r3, [pc, #20] ; (801b66c ) + 801b656: f853 0020 ldr.w r0, [r3, r0, lsl #2] + 801b65a: f7ff bf6d b.w 801b538 +#ifdef LWIP_HOOK_MEMP_AVAILABLE + if (old_first == NULL) { + LWIP_HOOK_MEMP_AVAILABLE(type); + } +#endif +} + 801b65e: 4770 bx lr + 801b660: 0803a9cb .word 0x0803a9cb + 801b664: 0803aabe .word 0x0803aabe + 801b668: 08035999 .word 0x08035999 + 801b66c: 0803ab78 .word 0x0803ab78 + +0801b670 : + LWIP_UNUSED_ARG(netif); + LWIP_UNUSED_ARG(p); + LWIP_UNUSED_ARG(ipaddr); + + return ERR_IF; +} + 801b670: f06f 000b mvn.w r0, #11 + 801b674: 4770 bx lr + ... + +0801b678 : +{ + 801b678: b510 push {r4, lr} + LWIP_ASSERT("netif_issue_reports: invalid netif", netif != NULL); + 801b67a: 4604 mov r4, r0 + 801b67c: b930 cbnz r0, 801b68c + 801b67e: 4b0c ldr r3, [pc, #48] ; (801b6b0 ) + 801b680: f240 326d movw r2, #877 ; 0x36d + 801b684: 490b ldr r1, [pc, #44] ; (801b6b4 ) + 801b686: 480c ldr r0, [pc, #48] ; (801b6b8 ) + 801b688: f019 f864 bl 8034754 + if (!(netif->flags & NETIF_FLAG_LINK_UP) || + 801b68c: f894 3031 ldrb.w r3, [r4, #49] ; 0x31 + 801b690: f003 0205 and.w r2, r3, #5 + 801b694: 2a05 cmp r2, #5 + 801b696: d109 bne.n 801b6ac + if ((report_type & NETIF_REPORT_TYPE_IPV4) && + 801b698: 6862 ldr r2, [r4, #4] + 801b69a: b13a cbz r2, 801b6ac + if (netif->flags & (NETIF_FLAG_ETHARP)) { + 801b69c: 071b lsls r3, r3, #28 + 801b69e: d505 bpl.n 801b6ac + etharp_gratuitous(netif); + 801b6a0: 1d21 adds r1, r4, #4 + 801b6a2: 4620 mov r0, r4 +} + 801b6a4: e8bd 4010 ldmia.w sp!, {r4, lr} + etharp_gratuitous(netif); + 801b6a8: f7fe bbd0 b.w 8019e4c +} + 801b6ac: bd10 pop {r4, pc} + 801b6ae: bf00 nop + 801b6b0: 0803abac .word 0x0803abac + 801b6b4: 0803ac2e .word 0x0803ac2e + 801b6b8: 08035999 .word 0x08035999 + +0801b6bc : +netif_do_set_ipaddr(struct netif *netif, const ip4_addr_t *ipaddr, ip_addr_t *old_addr) + 801b6bc: b573 push {r0, r1, r4, r5, r6, lr} + 801b6be: 4605 mov r5, r0 + 801b6c0: 4616 mov r6, r2 + LWIP_ASSERT("invalid pointer", ipaddr != NULL); + 801b6c2: 460c mov r4, r1 + 801b6c4: b931 cbnz r1, 801b6d4 + 801b6c6: 4b0e ldr r3, [pc, #56] ; (801b700 ) + 801b6c8: f240 12cb movw r2, #459 ; 0x1cb + 801b6cc: 490d ldr r1, [pc, #52] ; (801b704 ) + 801b6ce: 480e ldr r0, [pc, #56] ; (801b708 ) + 801b6d0: f019 f840 bl 8034754 + if (ip4_addr_cmp(ipaddr, netif_ip4_addr(netif)) == 0) { + 801b6d4: 686b ldr r3, [r5, #4] + 801b6d6: 6822 ldr r2, [r4, #0] + 801b6d8: 429a cmp r2, r3 + 801b6da: d00f beq.n 801b6fc + ip_addr_copy(*old_addr, *netif_ip_addr4(netif)); + 801b6dc: 6033 str r3, [r6, #0] + tcp_netif_ip_addr_changed(old_addr, new_addr); + 801b6de: a901 add r1, sp, #4 + 801b6e0: 4630 mov r0, r6 + *ip_2_ip4(&new_addr) = *ipaddr; + 801b6e2: 9201 str r2, [sp, #4] + tcp_netif_ip_addr_changed(old_addr, new_addr); + 801b6e4: f000 ffcc bl 801c680 + udp_netif_ip_addr_changed(old_addr, new_addr); + 801b6e8: a901 add r1, sp, #4 + 801b6ea: 4630 mov r0, r6 + 801b6ec: f004 fa2e bl 801fb4c + ip4_addr_set(ip_2_ip4(&netif->ip_addr), ipaddr); + 801b6f0: 6823 ldr r3, [r4, #0] + netif_issue_reports(netif, NETIF_REPORT_TYPE_IPV4); + 801b6f2: 2101 movs r1, #1 + 801b6f4: 4628 mov r0, r5 + ip4_addr_set(ip_2_ip4(&netif->ip_addr), ipaddr); + 801b6f6: 606b str r3, [r5, #4] + netif_issue_reports(netif, NETIF_REPORT_TYPE_IPV4); + 801b6f8: f7ff ffbe bl 801b678 +} + 801b6fc: b002 add sp, #8 + 801b6fe: bd70 pop {r4, r5, r6, pc} + 801b700: 0803abac .word 0x0803abac + 801b704: 0803ac51 .word 0x0803ac51 + 801b708: 08035999 .word 0x08035999 + +0801b70c : +} + 801b70c: 4770 bx lr + ... + +0801b710 : +{ + 801b710: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} + ipaddr = IP4_ADDR_ANY4; + 801b712: 4d14 ldr r5, [pc, #80] ; (801b764 ) +{ + 801b714: 4604 mov r4, r0 + ipaddr = IP4_ADDR_ANY4; + 801b716: 2900 cmp r1, #0 + 801b718: bf14 ite ne + 801b71a: 460e movne r6, r1 + 801b71c: 462e moveq r6, r5 + netmask = IP4_ADDR_ANY4; + 801b71e: 2a00 cmp r2, #0 + 801b720: bf14 ite ne + 801b722: 4617 movne r7, r2 + 801b724: 462f moveq r7, r5 + gw = IP4_ADDR_ANY4; + 801b726: 2b00 cmp r3, #0 + 801b728: bf18 it ne + 801b72a: 461d movne r5, r3 + remove = ip4_addr_isany(ipaddr); + 801b72c: 6833 ldr r3, [r6, #0] + 801b72e: b9b3 cbnz r3, 801b75e + if (netif_do_set_ipaddr(netif, ipaddr, &old_addr)) { + 801b730: aa01 add r2, sp, #4 + 801b732: 4631 mov r1, r6 + 801b734: f7ff ffc2 bl 801b6bc + 801b738: 2301 movs r3, #1 + if (ip4_addr_cmp(netmask, netif_ip4_netmask(netif)) == 0) { + 801b73a: 683a ldr r2, [r7, #0] + 801b73c: 68a1 ldr r1, [r4, #8] + 801b73e: 428a cmp r2, r1 + if (ip4_addr_cmp(gw, netif_ip4_gw(netif)) == 0) { + 801b740: 68e1 ldr r1, [r4, #12] + ip4_addr_set(ip_2_ip4(&netif->netmask), netmask); + 801b742: bf18 it ne + 801b744: 60a2 strne r2, [r4, #8] + if (ip4_addr_cmp(gw, netif_ip4_gw(netif)) == 0) { + 801b746: 682a ldr r2, [r5, #0] + 801b748: 428a cmp r2, r1 + ip4_addr_set(ip_2_ip4(&netif->gw), gw); + 801b74a: bf18 it ne + 801b74c: 60e2 strne r2, [r4, #12] + if (!remove) { + 801b74e: b923 cbnz r3, 801b75a + if (netif_do_set_ipaddr(netif, ipaddr, &old_addr)) { + 801b750: aa01 add r2, sp, #4 + 801b752: 4631 mov r1, r6 + 801b754: 4620 mov r0, r4 + 801b756: f7ff ffb1 bl 801b6bc +} + 801b75a: b003 add sp, #12 + 801b75c: bdf0 pop {r4, r5, r6, r7, pc} + remove = ip4_addr_isany(ipaddr); + 801b75e: 2300 movs r3, #0 + 801b760: e7eb b.n 801b73a + 801b762: bf00 nop + 801b764: 0803a528 .word 0x0803a528 + +0801b768 : +{ + 801b768: e92d 4ff8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} + 801b76c: f8dd 802c ldr.w r8, [sp, #44] ; 0x2c + LWIP_ERROR("netif_add: invalid netif", netif != NULL, return NULL); + 801b770: 4604 mov r4, r0 + 801b772: b948 cbnz r0, 801b788 + 801b774: 4b3d ldr r3, [pc, #244] ; (801b86c ) + 801b776: f240 1227 movw r2, #295 ; 0x127 + 801b77a: 493d ldr r1, [pc, #244] ; (801b870 ) + 801b77c: 483d ldr r0, [pc, #244] ; (801b874 ) + 801b77e: f018 ffe9 bl 8034754 +} + 801b782: 4620 mov r0, r4 + 801b784: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} + LWIP_ERROR("netif_add: No init function given", init != NULL, return NULL); + 801b788: f1b8 0f00 cmp.w r8, #0 + 801b78c: d108 bne.n 801b7a0 + 801b78e: 4b37 ldr r3, [pc, #220] ; (801b86c ) + 801b790: f44f 7294 mov.w r2, #296 ; 0x128 + 801b794: 4938 ldr r1, [pc, #224] ; (801b878 ) + 801b796: 4644 mov r4, r8 + 801b798: 4836 ldr r0, [pc, #216] ; (801b874 ) + 801b79a: f018 ffdb bl 8034754 + 801b79e: e7f0 b.n 801b782 + netif->output = netif_null_output_ip4; + 801b7a0: 4e36 ldr r6, [pc, #216] ; (801b87c ) + ip_addr_set_zero_ip4(&netif->ip_addr); + 801b7a2: 2500 movs r5, #0 + ipaddr = ip_2_ip4(IP4_ADDR_ANY); + 801b7a4: f8df c0e4 ldr.w ip, [pc, #228] ; 801b88c + netif->output = netif_null_output_ip4; + 801b7a8: 6146 str r6, [r0, #20] + netif->state = state; + 801b7aa: 9e0a ldr r6, [sp, #40] ; 0x28 + netif_set_addr(netif, ipaddr, netmask, gw); + 801b7ac: 42ab cmp r3, r5 + 801b7ae: bf08 it eq + 801b7b0: 4663 moveq r3, ip + ip_addr_set_zero_ip4(&netif->gw); + 801b7b2: 60c5 str r5, [r0, #12] + netif_set_addr(netif, ipaddr, netmask, gw); + 801b7b4: 42aa cmp r2, r5 + 801b7b6: bf08 it eq + 801b7b8: 4662 moveq r2, ip + netif->state = state; + 801b7ba: 6206 str r6, [r0, #32] + netif_set_addr(netif, ipaddr, netmask, gw); + 801b7bc: 42a9 cmp r1, r5 + 801b7be: bf08 it eq + 801b7c0: 4661 moveq r1, ip + netif->num = netif_num; + 801b7c2: 4e2f ldr r6, [pc, #188] ; (801b880 ) + netif->mtu = 0; + 801b7c4: 8505 strh r5, [r0, #40] ; 0x28 + netif->num = netif_num; + 801b7c6: 7837 ldrb r7, [r6, #0] + netif->flags = 0; + 801b7c8: f880 5031 strb.w r5, [r0, #49] ; 0x31 + netif->num = netif_num; + 801b7cc: f880 7034 strb.w r7, [r0, #52] ; 0x34 + netif->input = input; + 801b7d0: 9f0c ldr r7, [sp, #48] ; 0x30 + memset(netif->client_data, 0, sizeof(netif->client_data)); + 801b7d2: 6245 str r5, [r0, #36] ; 0x24 + netif->link_callback = NULL; + 801b7d4: 61c5 str r5, [r0, #28] + netif->input = input; + 801b7d6: 6107 str r7, [r0, #16] + ip_addr_set_zero_ip4(&netif->netmask); + 801b7d8: e9c0 5501 strd r5, r5, [r0, #4] + netif_set_addr(netif, ipaddr, netmask, gw); + 801b7dc: f7ff ff98 bl 801b710 + if (init(netif) != ERR_OK) { + 801b7e0: 4620 mov r0, r4 + 801b7e2: 47c0 blx r8 + 801b7e4: 2800 cmp r0, #0 + 801b7e6: d13f bne.n 801b868 + for (netif2 = netif_list; netif2 != NULL; netif2 = netif2->next) { + 801b7e8: 4f26 ldr r7, [pc, #152] ; (801b884 ) + LWIP_ASSERT("netif already added", netif2 != netif); + 801b7ea: f8df b080 ldr.w fp, [pc, #128] ; 801b86c + if (netif->num == 255) { + 801b7ee: f894 3034 ldrb.w r3, [r4, #52] ; 0x34 + num_netifs = 0; + 801b7f2: f04f 0800 mov.w r8, #0 + for (netif2 = netif_list; netif2 != NULL; netif2 = netif2->next) { + 801b7f6: 683d ldr r5, [r7, #0] + if (netif->num == 255) { + 801b7f8: 2bff cmp r3, #255 ; 0xff + LWIP_ASSERT("netif already added", netif2 != netif); + 801b7fa: f8df a094 ldr.w sl, [pc, #148] ; 801b890 + 801b7fe: f8df 9074 ldr.w r9, [pc, #116] ; 801b874 + netif->num = 0; + 801b802: bf04 itt eq + 801b804: 2300 moveq r3, #0 + 801b806: f884 3034 strbeq.w r3, [r4, #52] ; 0x34 + for (netif2 = netif_list; netif2 != NULL; netif2 = netif2->next) { + 801b80a: b92d cbnz r5, 801b818 + if (netif->num == 254) { + 801b80c: f894 3034 ldrb.w r3, [r4, #52] ; 0x34 + 801b810: 2bfe cmp r3, #254 ; 0xfe + 801b812: d122 bne.n 801b85a + netif_num = 0; + 801b814: 462b mov r3, r5 + 801b816: e022 b.n 801b85e + LWIP_ASSERT("netif already added", netif2 != netif); + 801b818: 42a5 cmp r5, r4 + 801b81a: d106 bne.n 801b82a + 801b81c: 465b mov r3, fp + 801b81e: f240 128b movw r2, #395 ; 0x18b + 801b822: 4651 mov r1, sl + 801b824: 4648 mov r0, r9 + 801b826: f018 ff95 bl 8034754 + num_netifs++; + 801b82a: f108 0801 add.w r8, r8, #1 + LWIP_ASSERT("too many netifs, max. supported number is 255", num_netifs <= 255); + 801b82e: f1b8 0fff cmp.w r8, #255 ; 0xff + 801b832: dd06 ble.n 801b842 + 801b834: 465b mov r3, fp + 801b836: f240 128d movw r2, #397 ; 0x18d + 801b83a: 4913 ldr r1, [pc, #76] ; (801b888 ) + 801b83c: 4648 mov r0, r9 + 801b83e: f018 ff89 bl 8034754 + if (netif2->num == netif->num) { + 801b842: f894 3034 ldrb.w r3, [r4, #52] ; 0x34 + 801b846: f895 2034 ldrb.w r2, [r5, #52] ; 0x34 + 801b84a: 429a cmp r2, r3 + 801b84c: d103 bne.n 801b856 + netif->num++; + 801b84e: 3201 adds r2, #1 + 801b850: f884 2034 strb.w r2, [r4, #52] ; 0x34 + } while (netif2 != NULL); + 801b854: e7cb b.n 801b7ee + for (netif2 = netif_list; netif2 != NULL; netif2 = netif2->next) { + 801b856: 682d ldr r5, [r5, #0] + 801b858: e7d7 b.n 801b80a + netif_num = (u8_t)(netif->num + 1); + 801b85a: 3301 adds r3, #1 + 801b85c: b2db uxtb r3, r3 + 801b85e: 7033 strb r3, [r6, #0] + netif->next = netif_list; + 801b860: 683b ldr r3, [r7, #0] + 801b862: 6023 str r3, [r4, #0] + netif_list = netif; + 801b864: 603c str r4, [r7, #0] + return netif; + 801b866: e78c b.n 801b782 + return NULL; + 801b868: 462c mov r4, r5 + 801b86a: e78a b.n 801b782 + 801b86c: 0803abac .word 0x0803abac + 801b870: 0803ac61 .word 0x0803ac61 + 801b874: 08035999 .word 0x08035999 + 801b878: 0803ac7a .word 0x0803ac7a + 801b87c: 0801b671 .word 0x0801b671 + 801b880: 2001e6a0 .word 0x2001e6a0 + 801b884: 2001e69c .word 0x2001e69c + 801b888: 0803acb0 .word 0x0803acb0 + 801b88c: 0803a528 .word 0x0803a528 + 801b890: 0803ac9c .word 0x0803ac9c + +0801b894 : + netif_default = netif; + 801b894: 4b01 ldr r3, [pc, #4] ; (801b89c ) + 801b896: 6018 str r0, [r3, #0] +} + 801b898: 4770 bx lr + 801b89a: bf00 nop + 801b89c: 2001e698 .word 0x2001e698 + +0801b8a0 : + LWIP_ERROR("netif_set_up: invalid netif", netif != NULL, return); + 801b8a0: b930 cbnz r0, 801b8b0 + 801b8a2: 4b09 ldr r3, [pc, #36] ; (801b8c8 ) + 801b8a4: f44f 7254 mov.w r2, #848 ; 0x350 + 801b8a8: 4908 ldr r1, [pc, #32] ; (801b8cc ) + 801b8aa: 4809 ldr r0, [pc, #36] ; (801b8d0 ) + 801b8ac: f018 bf52 b.w 8034754 + if (!(netif->flags & NETIF_FLAG_UP)) { + 801b8b0: f890 2031 ldrb.w r2, [r0, #49] ; 0x31 + 801b8b4: 07d1 lsls r1, r2, #31 + 801b8b6: d406 bmi.n 801b8c6 + netif_set_flags(netif, NETIF_FLAG_UP); + 801b8b8: f042 0201 orr.w r2, r2, #1 + netif_issue_reports(netif, NETIF_REPORT_TYPE_IPV4 | NETIF_REPORT_TYPE_IPV6); + 801b8bc: 2103 movs r1, #3 + netif_set_flags(netif, NETIF_FLAG_UP); + 801b8be: f880 2031 strb.w r2, [r0, #49] ; 0x31 + netif_issue_reports(netif, NETIF_REPORT_TYPE_IPV4 | NETIF_REPORT_TYPE_IPV6); + 801b8c2: f7ff bed9 b.w 801b678 +} + 801b8c6: 4770 bx lr + 801b8c8: 0803abac .word 0x0803abac + 801b8cc: 0803acde .word 0x0803acde + 801b8d0: 08035999 .word 0x08035999 + +0801b8d4 : + LWIP_ERROR("netif_set_down: invalid netif", netif != NULL, return); + 801b8d4: b930 cbnz r0, 801b8e4 + 801b8d6: 4b0a ldr r3, [pc, #40] ; (801b900 ) + 801b8d8: f240 329b movw r2, #923 ; 0x39b + 801b8dc: 4909 ldr r1, [pc, #36] ; (801b904 ) + 801b8de: 480a ldr r0, [pc, #40] ; (801b908 ) + 801b8e0: f018 bf38 b.w 8034754 + if (netif->flags & NETIF_FLAG_UP) { + 801b8e4: f890 2031 ldrb.w r2, [r0, #49] ; 0x31 + 801b8e8: 07d1 lsls r1, r2, #31 + 801b8ea: d507 bpl.n 801b8fc + netif_clear_flags(netif, NETIF_FLAG_UP); + 801b8ec: f022 0101 bic.w r1, r2, #1 + if (netif->flags & NETIF_FLAG_ETHARP) { + 801b8f0: 0713 lsls r3, r2, #28 + netif_clear_flags(netif, NETIF_FLAG_UP); + 801b8f2: f880 1031 strb.w r1, [r0, #49] ; 0x31 + if (netif->flags & NETIF_FLAG_ETHARP) { + 801b8f6: d501 bpl.n 801b8fc + etharp_cleanup_netif(netif); + 801b8f8: f7fe b9e6 b.w 8019cc8 +} + 801b8fc: 4770 bx lr + 801b8fe: bf00 nop + 801b900: 0803abac .word 0x0803abac + 801b904: 0803acfa .word 0x0803acfa + 801b908: 08035999 .word 0x08035999 + +0801b90c : +{ + 801b90c: b510 push {r4, lr} + LWIP_ERROR("netif_set_link_up: invalid netif", netif != NULL, return); + 801b90e: 4604 mov r4, r0 + 801b910: b940 cbnz r0, 801b924 + 801b912: 4b0f ldr r3, [pc, #60] ; (801b950 ) + 801b914: f44f 7278 mov.w r2, #992 ; 0x3e0 + 801b918: 490e ldr r1, [pc, #56] ; (801b954 ) + 801b91a: 480f ldr r0, [pc, #60] ; (801b958 ) +} + 801b91c: e8bd 4010 ldmia.w sp!, {r4, lr} + LWIP_ERROR("netif_set_link_up: invalid netif", netif != NULL, return); + 801b920: f018 bf18 b.w 8034754 + if (!(netif->flags & NETIF_FLAG_LINK_UP)) { + 801b924: f890 3031 ldrb.w r3, [r0, #49] ; 0x31 + 801b928: 075a lsls r2, r3, #29 + 801b92a: d40f bmi.n 801b94c + netif_set_flags(netif, NETIF_FLAG_LINK_UP); + 801b92c: f043 0304 orr.w r3, r3, #4 + 801b930: f880 3031 strb.w r3, [r0, #49] ; 0x31 + dhcp_network_changed(netif); + 801b934: f7fd fde6 bl 8019504 + netif_issue_reports(netif, NETIF_REPORT_TYPE_IPV4 | NETIF_REPORT_TYPE_IPV6); + 801b938: 2103 movs r1, #3 + 801b93a: 4620 mov r0, r4 + 801b93c: f7ff fe9c bl 801b678 + NETIF_LINK_CALLBACK(netif); + 801b940: 69e3 ldr r3, [r4, #28] + 801b942: b11b cbz r3, 801b94c + 801b944: 4620 mov r0, r4 +} + 801b946: e8bd 4010 ldmia.w sp!, {r4, lr} + NETIF_LINK_CALLBACK(netif); + 801b94a: 4718 bx r3 +} + 801b94c: bd10 pop {r4, pc} + 801b94e: bf00 nop + 801b950: 0803abac .word 0x0803abac + 801b954: 0803ad18 .word 0x0803ad18 + 801b958: 08035999 .word 0x08035999 + +0801b95c : + LWIP_ERROR("netif_set_link_down: invalid netif", netif != NULL, return); + 801b95c: b930 cbnz r0, 801b96c + 801b95e: 4b09 ldr r3, [pc, #36] ; (801b984 ) + 801b960: f240 4206 movw r2, #1030 ; 0x406 + 801b964: 4908 ldr r1, [pc, #32] ; (801b988 ) + 801b966: 4809 ldr r0, [pc, #36] ; (801b98c ) + 801b968: f018 bef4 b.w 8034754 + if (netif->flags & NETIF_FLAG_LINK_UP) { + 801b96c: f890 2031 ldrb.w r2, [r0, #49] ; 0x31 + 801b970: 0751 lsls r1, r2, #29 + 801b972: d506 bpl.n 801b982 + netif_clear_flags(netif, NETIF_FLAG_LINK_UP); + 801b974: f022 0204 bic.w r2, r2, #4 + NETIF_LINK_CALLBACK(netif); + 801b978: 69c3 ldr r3, [r0, #28] + netif_clear_flags(netif, NETIF_FLAG_LINK_UP); + 801b97a: f880 2031 strb.w r2, [r0, #49] ; 0x31 + NETIF_LINK_CALLBACK(netif); + 801b97e: b103 cbz r3, 801b982 + 801b980: 4718 bx r3 +} + 801b982: 4770 bx lr + 801b984: 0803abac .word 0x0803abac + 801b988: 0803ad39 .word 0x0803ad39 + 801b98c: 08035999 .word 0x08035999 + +0801b990 : + if (netif) { + 801b990: b100 cbz r0, 801b994 + netif->link_callback = link_callback; + 801b992: 61c1 str r1, [r0, #28] +} + 801b994: 4770 bx lr + ... + +0801b998 : +{ + struct netif *netif; + + LWIP_ASSERT_CORE_LOCKED(); + + if (idx != NETIF_NO_INDEX) { + 801b998: b150 cbz r0, 801b9b0 + NETIF_FOREACH(netif) { + 801b99a: 4b06 ldr r3, [pc, #24] ; (801b9b4 ) + 801b99c: 681b ldr r3, [r3, #0] + 801b99e: b12b cbz r3, 801b9ac + if (idx == netif_get_index(netif)) { + 801b9a0: f893 2034 ldrb.w r2, [r3, #52] ; 0x34 + 801b9a4: 3201 adds r2, #1 + 801b9a6: b2d2 uxtb r2, r2 + 801b9a8: 4282 cmp r2, r0 + 801b9aa: d1f7 bne.n 801b99c + } + } + } + + return NULL; +} + 801b9ac: 4618 mov r0, r3 + 801b9ae: 4770 bx lr + return NULL; + 801b9b0: 4603 mov r3, r0 + 801b9b2: e7fb b.n 801b9ac + 801b9b4: 2001e69c .word 0x2001e69c + +0801b9b8 : +/** + * Just a callback function for tcpip_callback() that calls pbuf_free_ooseq(). + */ +static void +pbuf_free_ooseq_callback(void *arg) +{ + 801b9b8: b508 push {r3, lr} + SYS_ARCH_SET(pbuf_free_ooseq_pending, 0); + 801b9ba: f000 fbcf bl 801c15c + 801b9be: 4b08 ldr r3, [pc, #32] ; (801b9e0 ) + 801b9c0: 2200 movs r2, #0 + 801b9c2: 701a strb r2, [r3, #0] + 801b9c4: f000 fbd6 bl 801c174 + for (pcb = tcp_active_pcbs; NULL != pcb; pcb = pcb->next) { + 801b9c8: 4b06 ldr r3, [pc, #24] ; (801b9e4 ) + 801b9ca: 6818 ldr r0, [r3, #0] + 801b9cc: b900 cbnz r0, 801b9d0 + LWIP_UNUSED_ARG(arg); + pbuf_free_ooseq(); +} + 801b9ce: bd08 pop {r3, pc} + if (pcb->ooseq != NULL) { + 801b9d0: 6f43 ldr r3, [r0, #116] ; 0x74 + 801b9d2: b11b cbz r3, 801b9dc +} + 801b9d4: e8bd 4008 ldmia.w sp!, {r3, lr} + tcp_free_ooseq(pcb); + 801b9d8: f000 bd0c b.w 801c3f4 + for (pcb = tcp_active_pcbs; NULL != pcb; pcb = pcb->next) { + 801b9dc: 68c0 ldr r0, [r0, #12] + 801b9de: e7f5 b.n 801b9cc + 801b9e0: 2001e6a1 .word 0x2001e6a1 + 801b9e4: 2001e6ac .word 0x2001e6ac + +0801b9e8 : + * @return non-zero on failure, zero on success. + * + */ +static u8_t +pbuf_add_header_impl(struct pbuf *p, size_t header_size_increment, u8_t force) +{ + 801b9e8: b538 push {r3, r4, r5, lr} + u16_t type_internal; + void *payload; + u16_t increment_magnitude; + + LWIP_ASSERT("p != NULL", p != NULL); + 801b9ea: b968 cbnz r0, 801ba08 + 801b9ec: 4b14 ldr r3, [pc, #80] ; (801ba40 ) + 801b9ee: f240 12df movw r2, #479 ; 0x1df + 801b9f2: 4914 ldr r1, [pc, #80] ; (801ba44 ) + 801b9f4: 4814 ldr r0, [pc, #80] ; (801ba48 ) + 801b9f6: f018 fead bl 8034754 + } + + increment_magnitude = (u16_t)header_size_increment; + /* Do not allow tot_len to wrap as a result. */ + if ((u16_t)(increment_magnitude + p->tot_len) < increment_magnitude) { + return 1; + 801b9fa: 2001 movs r0, #1 + 801b9fc: e01f b.n 801ba3e + return 1; + } + /* pbuf types referring to external payloads? */ + } else { + /* hide a header in the payload? */ + if (force) { + 801b9fe: 2a00 cmp r2, #0 + 801ba00: d0fb beq.n 801b9fa + payload = (u8_t *)p->payload - header_size_increment; + 801ba02: 6842 ldr r2, [r0, #4] + 801ba04: 1a51 subs r1, r2, r1 + 801ba06: e014 b.n 801ba32 + if ((p == NULL) || (header_size_increment > 0xFFFF)) { + 801ba08: f5b1 3f80 cmp.w r1, #65536 ; 0x10000 + 801ba0c: d2f5 bcs.n 801b9fa + if (header_size_increment == 0) { + 801ba0e: b1a9 cbz r1, 801ba3c + if ((u16_t)(increment_magnitude + p->tot_len) < increment_magnitude) { + 801ba10: 8903 ldrh r3, [r0, #8] + increment_magnitude = (u16_t)header_size_increment; + 801ba12: b28c uxth r4, r1 + if ((u16_t)(increment_magnitude + p->tot_len) < increment_magnitude) { + 801ba14: fa13 f381 uxtah r3, r3, r1 + 801ba18: b29b uxth r3, r3 + 801ba1a: 429c cmp r4, r3 + 801ba1c: d8ed bhi.n 801b9fa + if (type_internal & PBUF_TYPE_FLAG_STRUCT_DATA_CONTIGUOUS) { + 801ba1e: f990 500c ldrsb.w r5, [r0, #12] + 801ba22: 2d00 cmp r5, #0 + 801ba24: daeb bge.n 801b9fe + payload = (u8_t *)p->payload - header_size_increment; + 801ba26: 6842 ldr r2, [r0, #4] + 801ba28: 1a51 subs r1, r2, r1 + if ((u8_t *)payload < (u8_t *)p + SIZEOF_STRUCT_PBUF) { + 801ba2a: f100 0210 add.w r2, r0, #16 + 801ba2e: 4291 cmp r1, r2 + 801ba30: d3e3 bcc.n 801b9fa + LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_add_header: old %p new %p (%"U16_F")\n", + (void *)p->payload, (void *)payload, increment_magnitude)); + + /* modify pbuf fields */ + p->payload = payload; + p->len = (u16_t)(p->len + increment_magnitude); + 801ba32: 8942 ldrh r2, [r0, #10] + p->payload = payload; + 801ba34: 6041 str r1, [r0, #4] + p->len = (u16_t)(p->len + increment_magnitude); + 801ba36: 4414 add r4, r2 + p->tot_len = (u16_t)(p->tot_len + increment_magnitude); + 801ba38: 8103 strh r3, [r0, #8] + p->len = (u16_t)(p->len + increment_magnitude); + 801ba3a: 8144 strh r4, [r0, #10] + + + return 0; + 801ba3c: 2000 movs r0, #0 +} + 801ba3e: bd38 pop {r3, r4, r5, pc} + 801ba40: 0803ad5c .word 0x0803ad5c + 801ba44: 0803ae7f .word 0x0803ae7f + 801ba48: 08035999 .word 0x08035999 + +0801ba4c : + LWIP_ASSERT("invalid pbuf_type", (type == PBUF_REF) || (type == PBUF_ROM)); + 801ba4c: f022 0340 bic.w r3, r2, #64 ; 0x40 + 801ba50: 2b01 cmp r3, #1 +{ + 801ba52: b570 push {r4, r5, r6, lr} + 801ba54: 4606 mov r6, r0 + 801ba56: 460d mov r5, r1 + 801ba58: 4614 mov r4, r2 + LWIP_ASSERT("invalid pbuf_type", (type == PBUF_REF) || (type == PBUF_ROM)); + 801ba5a: d006 beq.n 801ba6a + 801ba5c: 4b0a ldr r3, [pc, #40] ; (801ba88 ) + 801ba5e: f44f 72a5 mov.w r2, #330 ; 0x14a + 801ba62: 490a ldr r1, [pc, #40] ; (801ba8c ) + 801ba64: 480a ldr r0, [pc, #40] ; (801ba90 ) + 801ba66: f018 fe75 bl 8034754 + p = (struct pbuf *)memp_malloc(MEMP_PBUF); + 801ba6a: 200b movs r0, #11 + 801ba6c: f7ff fdb8 bl 801b5e0 + if (p == NULL) { + 801ba70: b140 cbz r0, 801ba84 + p->next = NULL; + 801ba72: 2300 movs r3, #0 + p->tot_len = tot_len; + 801ba74: 8105 strh r5, [r0, #8] + p->len = len; + 801ba76: 8145 strh r5, [r0, #10] + p->flags = flags; + 801ba78: 7343 strb r3, [r0, #13] + p->type_internal = (u8_t)type; + 801ba7a: 7304 strb r4, [r0, #12] + p->payload = payload; + 801ba7c: e9c0 3600 strd r3, r6, [r0] + p->ref = 1; + 801ba80: 2301 movs r3, #1 + 801ba82: 81c3 strh r3, [r0, #14] +} + 801ba84: bd70 pop {r4, r5, r6, pc} + 801ba86: bf00 nop + 801ba88: 0803ad5c .word 0x0803ad5c + 801ba8c: 0803addd .word 0x0803addd + 801ba90: 08035999 .word 0x08035999 + +0801ba94 : + if (LWIP_MEM_ALIGN_SIZE(offset) + length > payload_mem_len) { + 801ba94: 3003 adds r0, #3 + 801ba96: f020 0003 bic.w r0, r0, #3 +{ + 801ba9a: b570 push {r4, r5, r6, lr} + if (LWIP_MEM_ALIGN_SIZE(offset) + length > payload_mem_len) { + 801ba9c: 180e adds r6, r1, r0 + 801ba9e: f8bd 5014 ldrh.w r5, [sp, #20] +{ + 801baa2: 9c04 ldr r4, [sp, #16] + if (LWIP_MEM_ALIGN_SIZE(offset) + length > payload_mem_len) { + 801baa4: 42ae cmp r6, r5 + 801baa6: d80d bhi.n 801bac4 + if (payload_mem != NULL) { + 801baa8: b104 cbz r4, 801baac + payload = (u8_t *)payload_mem + LWIP_MEM_ALIGN_SIZE(offset); + 801baaa: 4404 add r4, r0 + pbuf_init_alloced_pbuf(&p->pbuf, payload, length, length, type, PBUF_FLAG_IS_CUSTOM); + 801baac: 4618 mov r0, r3 + p->next = NULL; + 801baae: 2300 movs r3, #0 + p->payload = payload; + 801bab0: e9c0 3400 strd r3, r4, [r0] + p->flags = flags; + 801bab4: 2302 movs r3, #2 + p->tot_len = tot_len; + 801bab6: 8101 strh r1, [r0, #8] + p->len = len; + 801bab8: 8141 strh r1, [r0, #10] + p->flags = flags; + 801baba: 7343 strb r3, [r0, #13] + p->ref = 1; + 801babc: 2301 movs r3, #1 + p->type_internal = (u8_t)type; + 801babe: 7302 strb r2, [r0, #12] + p->ref = 1; + 801bac0: 81c3 strh r3, [r0, #14] +} + 801bac2: bd70 pop {r4, r5, r6, pc} + return NULL; + 801bac4: 2000 movs r0, #0 + 801bac6: e7fc b.n 801bac2 + +0801bac8 : + * + */ +u8_t +pbuf_add_header(struct pbuf *p, size_t header_size_increment) +{ + return pbuf_add_header_impl(p, header_size_increment, 0); + 801bac8: 2200 movs r2, #0 + 801baca: f7ff bf8d b.w 801b9e8 + ... + +0801bad0 : + * @return non-zero on failure, zero on success. + * + */ +u8_t +pbuf_remove_header(struct pbuf *p, size_t header_size_decrement) +{ + 801bad0: b510 push {r4, lr} + void *payload; + u16_t increment_magnitude; + + LWIP_ASSERT("p != NULL", p != NULL); + 801bad2: b990 cbnz r0, 801bafa + 801bad4: 4b10 ldr r3, [pc, #64] ; (801bb18 ) + 801bad6: f240 224b movw r2, #587 ; 0x24b + 801bada: 4910 ldr r1, [pc, #64] ; (801bb1c ) + return 0; + } + + increment_magnitude = (u16_t)header_size_decrement; + /* Check that we aren't going to move off the end of the pbuf */ + LWIP_ERROR("increment_magnitude <= p->len", (increment_magnitude <= p->len), return 1;); + 801badc: 4810 ldr r0, [pc, #64] ; (801bb20 ) + 801bade: f018 fe39 bl 8034754 + return 1; + 801bae2: 2001 movs r0, #1 + 801bae4: e008 b.n 801baf8 + LWIP_UNUSED_ARG(payload); /* only used in LWIP_DEBUGF below */ + + /* increase payload pointer (guarded by length check above) */ + p->payload = (u8_t *)p->payload + header_size_decrement; + /* modify pbuf length fields */ + p->len = (u16_t)(p->len - increment_magnitude); + 801bae6: 1a9b subs r3, r3, r2 + p->payload = (u8_t *)p->payload + header_size_decrement; + 801bae8: 6844 ldr r4, [r0, #4] + p->len = (u16_t)(p->len - increment_magnitude); + 801baea: 8143 strh r3, [r0, #10] + p->payload = (u8_t *)p->payload + header_size_decrement; + 801baec: 440c add r4, r1 + p->tot_len = (u16_t)(p->tot_len - increment_magnitude); + 801baee: 8903 ldrh r3, [r0, #8] + p->payload = (u8_t *)p->payload + header_size_decrement; + 801baf0: 6044 str r4, [r0, #4] + p->tot_len = (u16_t)(p->tot_len - increment_magnitude); + 801baf2: 1a9b subs r3, r3, r2 + 801baf4: 8103 strh r3, [r0, #8] + + LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_remove_header: old %p new %p (%"U16_F")\n", + (void *)payload, (void *)p->payload, increment_magnitude)); + + return 0; + 801baf6: 2000 movs r0, #0 +} + 801baf8: bd10 pop {r4, pc} + if ((p == NULL) || (header_size_decrement > 0xFFFF)) { + 801bafa: f5b1 3f80 cmp.w r1, #65536 ; 0x10000 + 801bafe: d2f0 bcs.n 801bae2 + if (header_size_decrement == 0) { + 801bb00: 2900 cmp r1, #0 + 801bb02: d0f8 beq.n 801baf6 + increment_magnitude = (u16_t)header_size_decrement; + 801bb04: b28a uxth r2, r1 + LWIP_ERROR("increment_magnitude <= p->len", (increment_magnitude <= p->len), return 1;); + 801bb06: 8943 ldrh r3, [r0, #10] + 801bb08: 429a cmp r2, r3 + 801bb0a: d9ec bls.n 801bae6 + 801bb0c: 4b02 ldr r3, [pc, #8] ; (801bb18 ) + 801bb0e: f240 2255 movw r2, #597 ; 0x255 + 801bb12: 4904 ldr r1, [pc, #16] ; (801bb24 ) + 801bb14: e7e2 b.n 801badc + 801bb16: bf00 nop + 801bb18: 0803ad5c .word 0x0803ad5c + 801bb1c: 0803ae7f .word 0x0803ae7f + 801bb20: 08035999 .word 0x08035999 + 801bb24: 0803adef .word 0x0803adef + +0801bb28 : + +static u8_t +pbuf_header_impl(struct pbuf *p, s16_t header_size_increment, u8_t force) +{ + if (header_size_increment < 0) { + 801bb28: 1e0b subs r3, r1, #0 + 801bb2a: da02 bge.n 801bb32 + return pbuf_remove_header(p, (size_t) - header_size_increment); + 801bb2c: 4259 negs r1, r3 + 801bb2e: f7ff bfcf b.w 801bad0 + } else { + return pbuf_add_header_impl(p, (size_t)header_size_increment, force); + 801bb32: 2201 movs r2, #1 + 801bb34: f7ff bf58 b.w 801b9e8 + +0801bb38 : + * 1->1->1 becomes ....... + * + */ +u8_t +pbuf_free(struct pbuf *p) +{ + 801bb38: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} + u8_t alloc_src; + struct pbuf *q; + u8_t count; + + if (p == NULL) { + 801bb3c: 4604 mov r4, r0 + 801bb3e: b950 cbnz r0, 801bb56 + LWIP_ASSERT("p != NULL", p != NULL); + /* if assertions are disabled, proceed with debug output */ + LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_LEVEL_SERIOUS, + ("pbuf_free(p == NULL) was called.\n")); + return 0; + 801bb40: 4625 mov r5, r4 + LWIP_ASSERT("p != NULL", p != NULL); + 801bb42: 4b2b ldr r3, [pc, #172] ; (801bbf0 ) + 801bb44: f44f 7237 mov.w r2, #732 ; 0x2dc + 801bb48: 492a ldr r1, [pc, #168] ; (801bbf4 ) + 801bb4a: 482b ldr r0, [pc, #172] ; (801bbf8 ) + 801bb4c: f018 fe02 bl 8034754 + } + } + PERF_STOP("pbuf_free"); + /* return number of de-allocated pbufs */ + return count; +} + 801bb50: 4628 mov r0, r5 + 801bb52: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + count = 0; + 801bb56: 2500 movs r5, #0 + LWIP_ASSERT("pbuf_free: p->ref > 0", p->ref > 0); + 801bb58: 4f25 ldr r7, [pc, #148] ; (801bbf0 ) + 801bb5a: f8df a0a8 ldr.w sl, [pc, #168] ; 801bc04 + 801bb5e: f8df 8098 ldr.w r8, [pc, #152] ; 801bbf8 + SYS_ARCH_PROTECT(old_level); + 801bb62: f000 fafb bl 801c15c + LWIP_ASSERT("pbuf_free: p->ref > 0", p->ref > 0); + 801bb66: 7ba3 ldrb r3, [r4, #14] + SYS_ARCH_PROTECT(old_level); + 801bb68: 4681 mov r9, r0 + LWIP_ASSERT("pbuf_free: p->ref > 0", p->ref > 0); + 801bb6a: b933 cbnz r3, 801bb7a + 801bb6c: 463b mov r3, r7 + 801bb6e: f240 22f1 movw r2, #753 ; 0x2f1 + 801bb72: 4651 mov r1, sl + 801bb74: 4640 mov r0, r8 + 801bb76: f018 fded bl 8034754 + ref = --(p->ref); + 801bb7a: 7ba6 ldrb r6, [r4, #14] + SYS_ARCH_UNPROTECT(old_level); + 801bb7c: 4648 mov r0, r9 + ref = --(p->ref); + 801bb7e: 3e01 subs r6, #1 + 801bb80: b2f6 uxtb r6, r6 + 801bb82: 73a6 strb r6, [r4, #14] + SYS_ARCH_UNPROTECT(old_level); + 801bb84: f000 faf6 bl 801c174 + if (ref == 0) { + 801bb88: 2e00 cmp r6, #0 + 801bb8a: d1e1 bne.n 801bb50 + if ((p->flags & PBUF_FLAG_IS_CUSTOM) != 0) { + 801bb8c: 7b62 ldrb r2, [r4, #13] + q = p->next; + 801bb8e: 6826 ldr r6, [r4, #0] + if ((p->flags & PBUF_FLAG_IS_CUSTOM) != 0) { + 801bb90: 0792 lsls r2, r2, #30 + alloc_src = pbuf_get_allocsrc(p); + 801bb92: 7b23 ldrb r3, [r4, #12] + if ((p->flags & PBUF_FLAG_IS_CUSTOM) != 0) { + 801bb94: d511 bpl.n 801bbba + LWIP_ASSERT("pc->custom_free_function != NULL", pc->custom_free_function != NULL); + 801bb96: 6923 ldr r3, [r4, #16] + 801bb98: b933 cbnz r3, 801bba8 + 801bb9a: 463b mov r3, r7 + 801bb9c: f240 22ff movw r2, #767 ; 0x2ff + 801bba0: 4916 ldr r1, [pc, #88] ; (801bbfc ) + 801bba2: 4640 mov r0, r8 + 801bba4: f018 fdd6 bl 8034754 + pc->custom_free_function(p); + 801bba8: 6923 ldr r3, [r4, #16] + 801bbaa: 4620 mov r0, r4 + 801bbac: 4798 blx r3 + count++; + 801bbae: 3501 adds r5, #1 + 801bbb0: b2ed uxtb r5, r5 + while (p != NULL) { + 801bbb2: 2e00 cmp r6, #0 + 801bbb4: d0cc beq.n 801bb50 + 801bbb6: 4634 mov r4, r6 + 801bbb8: e7d3 b.n 801bb62 + alloc_src = pbuf_get_allocsrc(p); + 801bbba: f003 030f and.w r3, r3, #15 + if (alloc_src == PBUF_TYPE_ALLOC_SRC_MASK_STD_MEMP_PBUF_POOL) { + 801bbbe: 2b02 cmp r3, #2 + 801bbc0: d104 bne.n 801bbcc + memp_free(MEMP_PBUF_POOL, p); + 801bbc2: 4621 mov r1, r4 + 801bbc4: 200c movs r0, #12 + memp_free(MEMP_PBUF, p); + 801bbc6: f7ff fd3b bl 801b640 + 801bbca: e7f0 b.n 801bbae + } else if (alloc_src == PBUF_TYPE_ALLOC_SRC_MASK_STD_MEMP_PBUF) { + 801bbcc: 2b01 cmp r3, #1 + 801bbce: d102 bne.n 801bbd6 + memp_free(MEMP_PBUF, p); + 801bbd0: 4621 mov r1, r4 + 801bbd2: 200b movs r0, #11 + 801bbd4: e7f7 b.n 801bbc6 + } else if (alloc_src == PBUF_TYPE_ALLOC_SRC_MASK_STD_HEAP) { + 801bbd6: b91b cbnz r3, 801bbe0 + mem_free(p); + 801bbd8: 4620 mov r0, r4 + 801bbda: f7ff fa4d bl 801b078 + 801bbde: e7e6 b.n 801bbae + LWIP_ASSERT("invalid pbuf type", 0); + 801bbe0: 463b mov r3, r7 + 801bbe2: f240 320f movw r2, #783 ; 0x30f + 801bbe6: 4906 ldr r1, [pc, #24] ; (801bc00 ) + 801bbe8: 4640 mov r0, r8 + 801bbea: f018 fdb3 bl 8034754 + 801bbee: e7de b.n 801bbae + 801bbf0: 0803ad5c .word 0x0803ad5c + 801bbf4: 0803ae7f .word 0x0803ae7f + 801bbf8: 08035999 .word 0x08035999 + 801bbfc: 0803ae23 .word 0x0803ae23 + 801bc00: 0803ae44 .word 0x0803ae44 + 801bc04: 0803ae0d .word 0x0803ae0d + +0801bc08 : + switch (type) { + 801bc08: f5b2 7fc1 cmp.w r2, #386 ; 0x182 +{ + 801bc0c: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} + 801bc10: 4606 mov r6, r0 + 801bc12: 460f mov r7, r1 + u16_t offset = (u16_t)layer; + 801bc14: b284 uxth r4, r0 + switch (type) { + 801bc16: d014 beq.n 801bc42 + 801bc18: d808 bhi.n 801bc2c + 801bc1a: f022 0340 bic.w r3, r2, #64 ; 0x40 + 801bc1e: 2b01 cmp r3, #1 + 801bc20: d107 bne.n 801bc32 + p = pbuf_alloc_reference(NULL, length, type); + 801bc22: 2000 movs r0, #0 +} + 801bc24: e8bd 47f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, lr} + p = pbuf_alloc_reference(NULL, length, type); + 801bc28: f7ff bf10 b.w 801ba4c + switch (type) { + 801bc2c: f5b2 7f20 cmp.w r2, #640 ; 0x280 + 801bc30: d04e beq.n 801bcd0 + LWIP_ASSERT("pbuf_alloc: erroneous type", 0); + 801bc32: 4b37 ldr r3, [pc, #220] ; (801bd10 ) + 801bc34: f240 1227 movw r2, #295 ; 0x127 + 801bc38: 4936 ldr r1, [pc, #216] ; (801bd14 ) + 801bc3a: 4837 ldr r0, [pc, #220] ; (801bd18 ) + 801bc3c: f018 fd8a bl 8034754 + 801bc40: e01f b.n 801bc82 + switch (type) { + 801bc42: 2600 movs r6, #0 + p->type_internal = (u8_t)type; + 801bc44: f8df 90e0 ldr.w r9, [pc, #224] ; 801bd28 + switch (type) { + 801bc48: 4635 mov r5, r6 + p->next = NULL; + 801bc4a: 46b0 mov r8, r6 + q = (struct pbuf *)memp_malloc(MEMP_PBUF_POOL); + 801bc4c: 200c movs r0, #12 + 801bc4e: 46b2 mov sl, r6 + 801bc50: f7ff fcc6 bl 801b5e0 + if (q == NULL) { + 801bc54: 4606 mov r6, r0 + 801bc56: b9d0 cbnz r0, 801bc8e + queued = pbuf_free_ooseq_pending; + 801bc58: 4c30 ldr r4, [pc, #192] ; (801bd1c ) + SYS_ARCH_PROTECT(old_level); + 801bc5a: f000 fa7f bl 801c15c + pbuf_free_ooseq_pending = 1; + 801bc5e: 2301 movs r3, #1 + queued = pbuf_free_ooseq_pending; + 801bc60: 7827 ldrb r7, [r4, #0] + pbuf_free_ooseq_pending = 1; + 801bc62: 7023 strb r3, [r4, #0] + queued = pbuf_free_ooseq_pending; + 801bc64: b2ff uxtb r7, r7 + SYS_ARCH_UNPROTECT(old_level); + 801bc66: f000 fa85 bl 801c174 + if (!queued) { + 801bc6a: b94f cbnz r7, 801bc80 + PBUF_POOL_FREE_OOSEQ_QUEUE_CALL(); + 801bc6c: 4631 mov r1, r6 + 801bc6e: 482c ldr r0, [pc, #176] ; (801bd20 ) + 801bc70: f003 fb7c bl 801f36c + 801bc74: b120 cbz r0, 801bc80 + 801bc76: f000 fa71 bl 801c15c + 801bc7a: 7026 strb r6, [r4, #0] + 801bc7c: f000 fa7a bl 801c174 + if (p) { + 801bc80: b90d cbnz r5, 801bc86 + return NULL; + 801bc82: 2500 movs r5, #0 + 801bc84: e01f b.n 801bcc6 + pbuf_free(p); + 801bc86: 4628 mov r0, r5 + 801bc88: f7ff ff56 bl 801bb38 + 801bc8c: e7f9 b.n 801bc82 + qlen = LWIP_MIN(rem_len, (u16_t)(PBUF_POOL_BUFSIZE_ALIGNED - LWIP_MEM_ALIGN_SIZE(offset))); + 801bc8e: 1ce3 adds r3, r4, #3 + pbuf_init_alloced_pbuf(q, LWIP_MEM_ALIGN((void *)((u8_t *)q + SIZEOF_STRUCT_PBUF + offset)), + 801bc90: 4404 add r4, r0 + p->next = NULL; + 801bc92: f8c0 8000 str.w r8, [r0] + qlen = LWIP_MIN(rem_len, (u16_t)(PBUF_POOL_BUFSIZE_ALIGNED - LWIP_MEM_ALIGN_SIZE(offset))); + 801bc96: f023 0303 bic.w r3, r3, #3 + pbuf_init_alloced_pbuf(q, LWIP_MEM_ALIGN((void *)((u8_t *)q + SIZEOF_STRUCT_PBUF + offset)), + 801bc9a: 3413 adds r4, #19 + p->tot_len = tot_len; + 801bc9c: 8107 strh r7, [r0, #8] + qlen = LWIP_MIN(rem_len, (u16_t)(PBUF_POOL_BUFSIZE_ALIGNED - LWIP_MEM_ALIGN_SIZE(offset))); + 801bc9e: f5c3 7314 rsb r3, r3, #592 ; 0x250 + pbuf_init_alloced_pbuf(q, LWIP_MEM_ALIGN((void *)((u8_t *)q + SIZEOF_STRUCT_PBUF + offset)), + 801bca2: f024 0403 bic.w r4, r4, #3 + p->type_internal = (u8_t)type; + 801bca6: f8c0 900c str.w r9, [r0, #12] + qlen = LWIP_MIN(rem_len, (u16_t)(PBUF_POOL_BUFSIZE_ALIGNED - LWIP_MEM_ALIGN_SIZE(offset))); + 801bcaa: b29b uxth r3, r3 + p->payload = payload; + 801bcac: 6044 str r4, [r0, #4] + qlen = LWIP_MIN(rem_len, (u16_t)(PBUF_POOL_BUFSIZE_ALIGNED - LWIP_MEM_ALIGN_SIZE(offset))); + 801bcae: 42bb cmp r3, r7 + 801bcb0: bf28 it cs + 801bcb2: 463b movcs r3, r7 + p->len = len; + 801bcb4: 8143 strh r3, [r0, #10] + if (p == NULL) { + 801bcb6: b14d cbz r5, 801bccc + last->next = q; + 801bcb8: f8ca 0000 str.w r0, [sl] + rem_len = (u16_t)(rem_len - qlen); + 801bcbc: 1af9 subs r1, r7, r3 + offset = 0; + 801bcbe: 2400 movs r4, #0 + rem_len = (u16_t)(rem_len - qlen); + 801bcc0: b28f uxth r7, r1 + } while (rem_len > 0); + 801bcc2: 2f00 cmp r7, #0 + 801bcc4: d1c2 bne.n 801bc4c +} + 801bcc6: 4628 mov r0, r5 + 801bcc8: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + 801bccc: 4605 mov r5, r0 + 801bcce: e7f5 b.n 801bcbc + u16_t payload_len = (u16_t)(LWIP_MEM_ALIGN_SIZE(offset) + LWIP_MEM_ALIGN_SIZE(length)); + 801bcd0: 3403 adds r4, #3 + 801bcd2: 1ccb adds r3, r1, #3 + 801bcd4: f024 0403 bic.w r4, r4, #3 + 801bcd8: f023 0303 bic.w r3, r3, #3 + 801bcdc: 441c add r4, r3 + 801bcde: b2a4 uxth r4, r4 + mem_size_t alloc_len = (mem_size_t)(LWIP_MEM_ALIGN_SIZE(SIZEOF_STRUCT_PBUF) + payload_len); + 801bce0: f104 0010 add.w r0, r4, #16 + if ((payload_len < LWIP_MEM_ALIGN_SIZE(length)) || + 801bce4: 429c cmp r4, r3 + mem_size_t alloc_len = (mem_size_t)(LWIP_MEM_ALIGN_SIZE(SIZEOF_STRUCT_PBUF) + payload_len); + 801bce6: b280 uxth r0, r0 + if ((payload_len < LWIP_MEM_ALIGN_SIZE(length)) || + 801bce8: d3cb bcc.n 801bc82 + 801bcea: 4283 cmp r3, r0 + 801bcec: d8c9 bhi.n 801bc82 + p = (struct pbuf *)mem_malloc(alloc_len); + 801bcee: f7ff fb55 bl 801b39c + if (p == NULL) { + 801bcf2: 4605 mov r5, r0 + 801bcf4: 2800 cmp r0, #0 + 801bcf6: d0e6 beq.n 801bcc6 + pbuf_init_alloced_pbuf(p, LWIP_MEM_ALIGN((void *)((u8_t *)p + SIZEOF_STRUCT_PBUF + offset)), + 801bcf8: 4406 add r6, r0 + p->next = NULL; + 801bcfa: 2300 movs r3, #0 + p->tot_len = tot_len; + 801bcfc: 8107 strh r7, [r0, #8] + pbuf_init_alloced_pbuf(p, LWIP_MEM_ALIGN((void *)((u8_t *)p + SIZEOF_STRUCT_PBUF + offset)), + 801bcfe: 3613 adds r6, #19 + p->next = NULL; + 801bd00: 6003 str r3, [r0, #0] + p->type_internal = (u8_t)type; + 801bd02: 4b08 ldr r3, [pc, #32] ; (801bd24 ) + pbuf_init_alloced_pbuf(p, LWIP_MEM_ALIGN((void *)((u8_t *)p + SIZEOF_STRUCT_PBUF + offset)), + 801bd04: f026 0603 bic.w r6, r6, #3 + p->len = len; + 801bd08: 8147 strh r7, [r0, #10] + p->type_internal = (u8_t)type; + 801bd0a: 60c3 str r3, [r0, #12] + p->payload = payload; + 801bd0c: 6046 str r6, [r0, #4] + LWIP_ASSERT("pbuf_alloc: pbuf->payload properly aligned", + 801bd0e: e7da b.n 801bcc6 + 801bd10: 0803ad5c .word 0x0803ad5c + 801bd14: 0803ae56 .word 0x0803ae56 + 801bd18: 08035999 .word 0x08035999 + 801bd1c: 2001e6a1 .word 0x2001e6a1 + 801bd20: 0801b9b9 .word 0x0801b9b9 + 801bd24: 00010080 .word 0x00010080 + 801bd28: 00010082 .word 0x00010082 + +0801bd2c : +{ + 801bd2c: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} + 801bd30: 460e mov r6, r1 + LWIP_ASSERT("pbuf_realloc: p != NULL", p != NULL); + 801bd32: 4604 mov r4, r0 + 801bd34: b930 cbnz r0, 801bd44 + 801bd36: 4b24 ldr r3, [pc, #144] ; (801bdc8 ) + 801bd38: f44f 72cc mov.w r2, #408 ; 0x198 + 801bd3c: 4923 ldr r1, [pc, #140] ; (801bdcc ) + 801bd3e: 4824 ldr r0, [pc, #144] ; (801bdd0 ) + 801bd40: f018 fd08 bl 8034754 + if (new_len >= p->tot_len) { + 801bd44: 8927 ldrh r7, [r4, #8] + 801bd46: 42b7 cmp r7, r6 + 801bd48: d93c bls.n 801bdc4 + 801bd4a: 4635 mov r5, r6 + LWIP_ASSERT("pbuf_realloc: q != NULL", q != NULL); + 801bd4c: f8df 8078 ldr.w r8, [pc, #120] ; 801bdc8 + 801bd50: f8df a084 ldr.w sl, [pc, #132] ; 801bdd8 + 801bd54: f8df 9078 ldr.w r9, [pc, #120] ; 801bdd0 + while (rem_len > q->len) { + 801bd58: 8962 ldrh r2, [r4, #10] + 801bd5a: 42aa cmp r2, r5 + 801bd5c: d319 bcc.n 801bd92 + if (pbuf_match_allocsrc(q, PBUF_TYPE_ALLOC_SRC_MASK_STD_HEAP) && (rem_len != q->len) + 801bd5e: 7b23 ldrb r3, [r4, #12] + 801bd60: 0719 lsls r1, r3, #28 + 801bd62: d127 bne.n 801bdb4 + 801bd64: 42aa cmp r2, r5 + 801bd66: d025 beq.n 801bdb4 + && ((q->flags & PBUF_FLAG_IS_CUSTOM) == 0) + 801bd68: 7b63 ldrb r3, [r4, #13] + 801bd6a: 079b lsls r3, r3, #30 + 801bd6c: d422 bmi.n 801bdb4 + q = (struct pbuf *)mem_trim(q, (mem_size_t)(((u8_t *)q->payload - (u8_t *)q) + rem_len)); + 801bd6e: 6861 ldr r1, [r4, #4] + 801bd70: 4620 mov r0, r4 + 801bd72: 1b09 subs r1, r1, r4 + 801bd74: 4429 add r1, r5 + 801bd76: b289 uxth r1, r1 + 801bd78: f7ff fa5a bl 801b230 + LWIP_ASSERT("mem_trim returned q == NULL", q != NULL); + 801bd7c: 4604 mov r4, r0 + 801bd7e: b9c8 cbnz r0, 801bdb4 + 801bd80: 4b11 ldr r3, [pc, #68] ; (801bdc8 ) + 801bd82: f240 12bd movw r2, #445 ; 0x1bd + 801bd86: 4913 ldr r1, [pc, #76] ; (801bdd4 ) + 801bd88: 4811 ldr r0, [pc, #68] ; (801bdd0 ) + 801bd8a: f018 fce3 bl 8034754 + q->len = rem_len; + 801bd8e: 8164 strh r4, [r4, #10] + 801bd90: deff udf #255 ; 0xff + rem_len = (u16_t)(rem_len - q->len); + 801bd92: 1aaa subs r2, r5, r2 + q->tot_len = (u16_t)(q->tot_len - shrink); + 801bd94: 1bf3 subs r3, r6, r7 + rem_len = (u16_t)(rem_len - q->len); + 801bd96: b295 uxth r5, r2 + q->tot_len = (u16_t)(q->tot_len - shrink); + 801bd98: 8922 ldrh r2, [r4, #8] + 801bd9a: 4413 add r3, r2 + 801bd9c: 8123 strh r3, [r4, #8] + q = q->next; + 801bd9e: 6824 ldr r4, [r4, #0] + LWIP_ASSERT("pbuf_realloc: q != NULL", q != NULL); + 801bda0: 2c00 cmp r4, #0 + 801bda2: d1d9 bne.n 801bd58 + 801bda4: 4643 mov r3, r8 + 801bda6: f240 12af movw r2, #431 ; 0x1af + 801bdaa: 4651 mov r1, sl + 801bdac: 4648 mov r0, r9 + 801bdae: f018 fcd1 bl 8034754 + 801bdb2: e7d1 b.n 801bd58 + if (q->next != NULL) { + 801bdb4: 6820 ldr r0, [r4, #0] + q->len = rem_len; + 801bdb6: 8165 strh r5, [r4, #10] + q->tot_len = q->len; + 801bdb8: 8125 strh r5, [r4, #8] + if (q->next != NULL) { + 801bdba: b108 cbz r0, 801bdc0 + pbuf_free(q->next); + 801bdbc: f7ff febc bl 801bb38 + q->next = NULL; + 801bdc0: 2300 movs r3, #0 + 801bdc2: 6023 str r3, [r4, #0] +} + 801bdc4: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + 801bdc8: 0803ad5c .word 0x0803ad5c + 801bdcc: 0803ae71 .word 0x0803ae71 + 801bdd0: 08035999 .word 0x08035999 + 801bdd4: 0803aea1 .word 0x0803aea1 + 801bdd8: 0803ae89 .word 0x0803ae89 + +0801bddc : + * @param p first pbuf of chain + * @return the number of pbufs in a chain + */ +u16_t +pbuf_clen(const struct pbuf *p) +{ + 801bddc: 4603 mov r3, r0 + u16_t len; + + len = 0; + while (p != NULL) { + 801bdde: 2200 movs r2, #0 + 801bde0: b290 uxth r0, r2 + 801bde2: 3201 adds r2, #1 + 801bde4: b903 cbnz r3, 801bde8 + ++len; + p = p->next; + } + return len; +} + 801bde6: 4770 bx lr + p = p->next; + 801bde8: 681b ldr r3, [r3, #0] + 801bdea: e7f9 b.n 801bde0 + +0801bdec : + * @param p pbuf to increase reference counter of + * + */ +void +pbuf_ref(struct pbuf *p) +{ + 801bdec: b510 push {r4, lr} + /* pbuf given? */ + if (p != NULL) { + 801bdee: 4604 mov r4, r0 + 801bdf0: b188 cbz r0, 801be16 + SYS_ARCH_SET(p->ref, (LWIP_PBUF_REF_T)(p->ref + 1)); + 801bdf2: f000 f9b3 bl 801c15c + 801bdf6: 7ba3 ldrb r3, [r4, #14] + 801bdf8: 3301 adds r3, #1 + 801bdfa: 73a3 strb r3, [r4, #14] + 801bdfc: f000 f9ba bl 801c174 + LWIP_ASSERT("pbuf ref overflow", p->ref > 0); + 801be00: 7ba3 ldrb r3, [r4, #14] + 801be02: b943 cbnz r3, 801be16 + 801be04: 4b04 ldr r3, [pc, #16] ; (801be18 ) + 801be06: f240 3242 movw r2, #834 ; 0x342 + 801be0a: 4904 ldr r1, [pc, #16] ; (801be1c ) + 801be0c: 4804 ldr r0, [pc, #16] ; (801be20 ) + } +} + 801be0e: e8bd 4010 ldmia.w sp!, {r4, lr} + LWIP_ASSERT("pbuf ref overflow", p->ref > 0); + 801be12: f018 bc9f b.w 8034754 +} + 801be16: bd10 pop {r4, pc} + 801be18: 0803ad5c .word 0x0803ad5c + 801be1c: 0803aebd .word 0x0803aebd + 801be20: 08035999 .word 0x08035999 + +0801be24 : + * + * @see pbuf_chain() + */ +void +pbuf_cat(struct pbuf *h, struct pbuf *t) +{ + 801be24: b570 push {r4, r5, r6, lr} + 801be26: 460d mov r5, r1 + struct pbuf *p; + + LWIP_ERROR("(h != NULL) && (t != NULL) (programmer violates API)", + 801be28: 4604 mov r4, r0 + 801be2a: b100 cbz r0, 801be2e + 801be2c: b961 cbnz r1, 801be48 + 801be2e: 4b15 ldr r3, [pc, #84] ; (801be84 ) + 801be30: f240 3259 movw r2, #857 ; 0x359 + 801be34: 4914 ldr r1, [pc, #80] ; (801be88 ) + 801be36: 4815 ldr r0, [pc, #84] ; (801be8c ) + /* chain last pbuf of head (p) with first of tail (t) */ + p->next = t; + /* p->next now references t, but the caller will drop its reference to t, + * so netto there is no change to the reference count of t. + */ +} + 801be38: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} + LWIP_ERROR("(h != NULL) && (t != NULL) (programmer violates API)", + 801be3c: f018 bc8a b.w 8034754 + p->tot_len = (u16_t)(p->tot_len + t->tot_len); + 801be40: 8929 ldrh r1, [r5, #8] + 801be42: 440b add r3, r1 + 801be44: 8123 strh r3, [r4, #8] + 801be46: 4614 mov r4, r2 + for (p = h; p->next != NULL; p = p->next) { + 801be48: 6822 ldr r2, [r4, #0] + p->tot_len = (u16_t)(p->tot_len + t->tot_len); + 801be4a: 8923 ldrh r3, [r4, #8] + for (p = h; p->next != NULL; p = p->next) { + 801be4c: 2a00 cmp r2, #0 + 801be4e: d1f7 bne.n 801be40 + LWIP_ASSERT("p->tot_len == p->len (of last pbuf in chain)", p->tot_len == p->len); + 801be50: 8962 ldrh r2, [r4, #10] + 801be52: 429a cmp r2, r3 + 801be54: d00f beq.n 801be76 + 801be56: 4b0b ldr r3, [pc, #44] ; (801be84 ) + 801be58: f240 3262 movw r2, #866 ; 0x362 + 801be5c: 490c ldr r1, [pc, #48] ; (801be90 ) + 801be5e: 480b ldr r0, [pc, #44] ; (801be8c ) + 801be60: f018 fc78 bl 8034754 + LWIP_ASSERT("p->next == NULL", p->next == NULL); + 801be64: 6823 ldr r3, [r4, #0] + 801be66: b133 cbz r3, 801be76 + 801be68: 4b06 ldr r3, [pc, #24] ; (801be84 ) + 801be6a: f240 3263 movw r2, #867 ; 0x363 + 801be6e: 4909 ldr r1, [pc, #36] ; (801be94 ) + 801be70: 4806 ldr r0, [pc, #24] ; (801be8c ) + 801be72: f018 fc6f bl 8034754 + p->tot_len = (u16_t)(p->tot_len + t->tot_len); + 801be76: 892a ldrh r2, [r5, #8] + 801be78: 8923 ldrh r3, [r4, #8] + p->next = t; + 801be7a: 6025 str r5, [r4, #0] + p->tot_len = (u16_t)(p->tot_len + t->tot_len); + 801be7c: 4413 add r3, r2 + 801be7e: 8123 strh r3, [r4, #8] +} + 801be80: bd70 pop {r4, r5, r6, pc} + 801be82: bf00 nop + 801be84: 0803ad5c .word 0x0803ad5c + 801be88: 0803aecf .word 0x0803aecf + 801be8c: 08035999 .word 0x08035999 + 801be90: 0803af04 .word 0x0803af04 + 801be94: 0803af31 .word 0x0803af31 + +0801be98 : + * The ->ref field of the first pbuf of the tail chain is adjusted. + * + */ +void +pbuf_chain(struct pbuf *h, struct pbuf *t) +{ + 801be98: b510 push {r4, lr} + 801be9a: 460c mov r4, r1 + pbuf_cat(h, t); + 801be9c: f7ff ffc2 bl 801be24 + /* t is now referenced by h */ + pbuf_ref(t); + 801bea0: 4620 mov r0, r4 + LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_chain: %p references %p\n", (void *)h, (void *)t)); +} + 801bea2: e8bd 4010 ldmia.w sp!, {r4, lr} + pbuf_ref(t); + 801bea6: f7ff bfa1 b.w 801bdec + ... + +0801beac : + * ERR_ARG if one of the pbufs is NULL or p_to is not big + * enough to hold p_from + */ +err_t +pbuf_copy(struct pbuf *p_to, const struct pbuf *p_from) +{ + 801beac: e92d 4ff8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} + 801beb0: 460c mov r4, r1 + + LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_copy(%p, %p)\n", + (const void *)p_to, (const void *)p_from)); + + /* is the target big enough to hold the source? */ + LWIP_ERROR("pbuf_copy: target not big enough to hold source", ((p_to != NULL) && + 801beb2: 4605 mov r5, r0 + 801beb4: b120 cbz r0, 801bec0 + 801beb6: b119 cbz r1, 801bec0 + 801beb8: 8902 ldrh r2, [r0, #8] + 801beba: 890b ldrh r3, [r1, #8] + 801bebc: 429a cmp r2, r3 + 801bebe: d20a bcs.n 801bed6 + 801bec0: 4b34 ldr r3, [pc, #208] ; (801bf94 ) + 801bec2: f240 32c9 movw r2, #969 ; 0x3c9 + 801bec6: 4934 ldr r1, [pc, #208] ; (801bf98 ) + } + if (offset_to == p_to->len) { + /* on to next p_to (if any) */ + offset_to = 0; + p_to = p_to->next; + LWIP_ERROR("p_to != NULL", (p_to != NULL) || (p_from == NULL), return ERR_ARG;); + 801bec8: 4834 ldr r0, [pc, #208] ; (801bf9c ) + 801beca: f018 fc43 bl 8034754 + 801bece: f06f 000f mvn.w r0, #15 + (p_to->next == NULL), return ERR_VAL;); + } + } while (p_from); + LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_copy: end of chain reached.\n")); + return ERR_OK; +} + 801bed2: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} + size_t offset_to = 0, offset_from = 0, len; + 801bed6: 2600 movs r6, #0 + LWIP_ASSERT("offset_to <= p_to->len", offset_to <= p_to->len); + 801bed8: f8df b0b8 ldr.w fp, [pc, #184] ; 801bf94 + 801bedc: f8df a0cc ldr.w sl, [pc, #204] ; 801bfac + size_t offset_to = 0, offset_from = 0, len; + 801bee0: 4637 mov r7, r6 + LWIP_ASSERT("offset_to <= p_to->len", offset_to <= p_to->len); + 801bee2: f8df 90b8 ldr.w r9, [pc, #184] ; 801bf9c + if ((p_to->len - offset_to) >= (p_from->len - offset_from)) { + 801bee6: f8b5 800a ldrh.w r8, [r5, #10] + 801beea: 8963 ldrh r3, [r4, #10] + 801beec: eba8 0807 sub.w r8, r8, r7 + MEMCPY((u8_t *)p_to->payload + offset_to, (u8_t *)p_from->payload + offset_from, len); + 801bef0: 6868 ldr r0, [r5, #4] + if ((p_to->len - offset_to) >= (p_from->len - offset_from)) { + 801bef2: 1b9b subs r3, r3, r6 + MEMCPY((u8_t *)p_to->payload + offset_to, (u8_t *)p_from->payload + offset_from, len); + 801bef4: 6861 ldr r1, [r4, #4] + 801bef6: 4438 add r0, r7 + 801bef8: 4598 cmp r8, r3 + 801befa: 4431 add r1, r6 + 801befc: bf28 it cs + 801befe: 4698 movcs r8, r3 + 801bf00: 4642 mov r2, r8 + offset_to += len; + 801bf02: 4447 add r7, r8 + MEMCPY((u8_t *)p_to->payload + offset_to, (u8_t *)p_from->payload + offset_from, len); + 801bf04: f018 fe35 bl 8034b72 + LWIP_ASSERT("offset_to <= p_to->len", offset_to <= p_to->len); + 801bf08: 896b ldrh r3, [r5, #10] + offset_from += len; + 801bf0a: 4446 add r6, r8 + LWIP_ASSERT("offset_to <= p_to->len", offset_to <= p_to->len); + 801bf0c: 429f cmp r7, r3 + 801bf0e: d906 bls.n 801bf1e + 801bf10: 465b mov r3, fp + 801bf12: f240 32d9 movw r2, #985 ; 0x3d9 + 801bf16: 4651 mov r1, sl + 801bf18: 4648 mov r0, r9 + 801bf1a: f018 fc1b bl 8034754 + LWIP_ASSERT("offset_from <= p_from->len", offset_from <= p_from->len); + 801bf1e: 8963 ldrh r3, [r4, #10] + 801bf20: 429e cmp r6, r3 + 801bf22: d906 bls.n 801bf32 + 801bf24: 465b mov r3, fp + 801bf26: f240 32da movw r2, #986 ; 0x3da + 801bf2a: 491d ldr r1, [pc, #116] ; (801bfa0 ) + 801bf2c: 4648 mov r0, r9 + 801bf2e: f018 fc11 bl 8034754 + if (offset_from >= p_from->len) { + 801bf32: 8963 ldrh r3, [r4, #10] + 801bf34: 429e cmp r6, r3 + if (offset_to == p_to->len) { + 801bf36: 896b ldrh r3, [r5, #10] + p_from = p_from->next; + 801bf38: bf24 itt cs + 801bf3a: 6824 ldrcs r4, [r4, #0] + offset_from = 0; + 801bf3c: 2600 movcs r6, #0 + if (offset_to == p_to->len) { + 801bf3e: 429f cmp r7, r3 + 801bf40: d108 bne.n 801bf54 + p_to = p_to->next; + 801bf42: 682d ldr r5, [r5, #0] + LWIP_ERROR("p_to != NULL", (p_to != NULL) || (p_from == NULL), return ERR_ARG;); + 801bf44: b92d cbnz r5, 801bf52 + 801bf46: b314 cbz r4, 801bf8e + 801bf48: 4b12 ldr r3, [pc, #72] ; (801bf94 ) + 801bf4a: f44f 7279 mov.w r2, #996 ; 0x3e4 + 801bf4e: 4915 ldr r1, [pc, #84] ; (801bfa4 ) + 801bf50: e7ba b.n 801bec8 + offset_to = 0; + 801bf52: 2700 movs r7, #0 + if ((p_from != NULL) && (p_from->len == p_from->tot_len)) { + 801bf54: b17c cbz r4, 801bf76 + 801bf56: 8962 ldrh r2, [r4, #10] + 801bf58: 8923 ldrh r3, [r4, #8] + 801bf5a: 429a cmp r2, r3 + 801bf5c: d10b bne.n 801bf76 + LWIP_ERROR("pbuf_copy() does not allow packet queues!", + 801bf5e: 6823 ldr r3, [r4, #0] + 801bf60: b14b cbz r3, 801bf76 + 801bf62: 4b0c ldr r3, [pc, #48] ; (801bf94 ) + 801bf64: f240 32e9 movw r2, #1001 ; 0x3e9 + LWIP_ERROR("pbuf_copy() does not allow packet queues!", + 801bf68: 490f ldr r1, [pc, #60] ; (801bfa8 ) + 801bf6a: 480c ldr r0, [pc, #48] ; (801bf9c ) + 801bf6c: f018 fbf2 bl 8034754 + 801bf70: f06f 0005 mvn.w r0, #5 + 801bf74: e7ad b.n 801bed2 + if ((p_to != NULL) && (p_to->len == p_to->tot_len)) { + 801bf76: 896a ldrh r2, [r5, #10] + 801bf78: 892b ldrh r3, [r5, #8] + 801bf7a: 429a cmp r2, r3 + 801bf7c: d105 bne.n 801bf8a + LWIP_ERROR("pbuf_copy() does not allow packet queues!", + 801bf7e: 682b ldr r3, [r5, #0] + 801bf80: b11b cbz r3, 801bf8a + 801bf82: 4b04 ldr r3, [pc, #16] ; (801bf94 ) + 801bf84: f240 32ee movw r2, #1006 ; 0x3ee + 801bf88: e7ee b.n 801bf68 + } while (p_from); + 801bf8a: 2c00 cmp r4, #0 + 801bf8c: d1ab bne.n 801bee6 + return ERR_OK; + 801bf8e: 4620 mov r0, r4 + 801bf90: e79f b.n 801bed2 + 801bf92: bf00 nop + 801bf94: 0803ad5c .word 0x0803ad5c + 801bf98: 0803af41 .word 0x0803af41 + 801bf9c: 08035999 .word 0x08035999 + 801bfa0: 0803af88 .word 0x0803af88 + 801bfa4: 0803afa3 .word 0x0803afa3 + 801bfa8: 0803afb0 .word 0x0803afb0 + 801bfac: 0803af71 .word 0x0803af71 + +0801bfb0 : + * @param offset offset into the packet buffer from where to begin copying len bytes + * @return the number of bytes copied, or 0 on failure + */ +u16_t +pbuf_copy_partial(const struct pbuf *buf, void *dataptr, u16_t len, u16_t offset) +{ + 801bfb0: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} + 801bfb4: 460f mov r7, r1 + 801bfb6: 4690 mov r8, r2 + const struct pbuf *p; + u16_t left = 0; + u16_t buf_copy_len; + u16_t copied_total = 0; + + LWIP_ERROR("pbuf_copy_partial: invalid buf", (buf != NULL), return 0;); + 801bfb8: 4605 mov r5, r0 + 801bfba: b950 cbnz r0, 801bfd2 + 801bfbc: 462e mov r6, r5 + 801bfbe: 4b1b ldr r3, [pc, #108] ; (801c02c ) + 801bfc0: f240 420a movw r2, #1034 ; 0x40a + 801bfc4: 491a ldr r1, [pc, #104] ; (801c030 ) + 801bfc6: 481b ldr r0, [pc, #108] ; (801c034 ) + 801bfc8: f018 fbc4 bl 8034754 + len = (u16_t)(len - buf_copy_len); + offset = 0; + } + } + return copied_total; +} + 801bfcc: 4630 mov r0, r6 + 801bfce: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + LWIP_ERROR("pbuf_copy_partial: invalid dataptr", (dataptr != NULL), return 0;); + 801bfd2: bb41 cbnz r1, 801c026 + 801bfd4: 4b15 ldr r3, [pc, #84] ; (801c02c ) + 801bfd6: f240 420b movw r2, #1035 ; 0x40b + 801bfda: 4917 ldr r1, [pc, #92] ; (801c038 ) + 801bfdc: 463e mov r6, r7 + 801bfde: 4815 ldr r0, [pc, #84] ; (801c034 ) + 801bfe0: f018 fbb8 bl 8034754 + 801bfe4: e7f2 b.n 801bfcc + if ((offset != 0) && (offset >= p->len)) { + 801bfe6: 896c ldrh r4, [r5, #10] + 801bfe8: b153 cbz r3, 801c000 + 801bfea: 42a3 cmp r3, r4 + 801bfec: d308 bcc.n 801c000 + offset = (u16_t)(offset - p->len); + 801bfee: 1b1b subs r3, r3, r4 + 801bff0: b29b uxth r3, r3 + for (p = buf; len != 0 && p != NULL; p = p->next) { + 801bff2: 682d ldr r5, [r5, #0] + 801bff4: f1b8 0f00 cmp.w r8, #0 + 801bff8: d0e8 beq.n 801bfcc + 801bffa: 2d00 cmp r5, #0 + 801bffc: d1f3 bne.n 801bfe6 + 801bffe: e7e5 b.n 801bfcc + buf_copy_len = (u16_t)(p->len - offset); + 801c000: 1ae4 subs r4, r4, r3 + MEMCPY(&((char *)dataptr)[left], &((char *)p->payload)[offset], buf_copy_len); + 801c002: 6869 ldr r1, [r5, #4] + 801c004: 19b8 adds r0, r7, r6 + 801c006: b2a4 uxth r4, r4 + 801c008: 4419 add r1, r3 + 801c00a: 4544 cmp r4, r8 + 801c00c: bf28 it cs + 801c00e: 4644 movcs r4, r8 + 801c010: 4622 mov r2, r4 + copied_total = (u16_t)(copied_total + buf_copy_len); + 801c012: 4426 add r6, r4 + MEMCPY(&((char *)dataptr)[left], &((char *)p->payload)[offset], buf_copy_len); + 801c014: f018 fdad bl 8034b72 + len = (u16_t)(len - buf_copy_len); + 801c018: eba8 0204 sub.w r2, r8, r4 + copied_total = (u16_t)(copied_total + buf_copy_len); + 801c01c: b2b6 uxth r6, r6 + offset = 0; + 801c01e: 2300 movs r3, #0 + len = (u16_t)(len - buf_copy_len); + 801c020: fa1f f882 uxth.w r8, r2 + offset = 0; + 801c024: e7e5 b.n 801bff2 + u16_t left = 0; + 801c026: 2600 movs r6, #0 + 801c028: e7e4 b.n 801bff4 + 801c02a: bf00 nop + 801c02c: 0803ad5c .word 0x0803ad5c + 801c030: 0803afda .word 0x0803afda + 801c034: 08035999 .word 0x08035999 + 801c038: 0803aff9 .word 0x0803aff9 + +0801c03c : + * + * @return a new pbuf or NULL if allocation fails + */ +struct pbuf * +pbuf_clone(pbuf_layer layer, pbuf_type type, struct pbuf *p) +{ + 801c03c: b538 push {r3, r4, r5, lr} + 801c03e: 4615 mov r5, r2 + struct pbuf *q; + err_t err; + q = pbuf_alloc(layer, p->tot_len, type); + 801c040: 460a mov r2, r1 + 801c042: 8929 ldrh r1, [r5, #8] + 801c044: f7ff fde0 bl 801bc08 + if (q == NULL) { + 801c048: 4604 mov r4, r0 + 801c04a: b150 cbz r0, 801c062 + return NULL; + } + err = pbuf_copy(q, p); + 801c04c: 4629 mov r1, r5 + 801c04e: f7ff ff2d bl 801beac + LWIP_UNUSED_ARG(err); /* in case of LWIP_NOASSERT */ + LWIP_ASSERT("pbuf_copy failed", err == ERR_OK); + 801c052: b130 cbz r0, 801c062 + 801c054: 4b04 ldr r3, [pc, #16] ; (801c068 ) + 801c056: f240 5224 movw r2, #1316 ; 0x524 + 801c05a: 4904 ldr r1, [pc, #16] ; (801c06c ) + 801c05c: 4804 ldr r0, [pc, #16] ; (801c070 ) + 801c05e: f018 fb79 bl 8034754 + return q; +} + 801c062: 4620 mov r0, r4 + 801c064: bd38 pop {r3, r4, r5, pc} + 801c066: bf00 nop + 801c068: 0803ad5c .word 0x0803ad5c + 801c06c: 0803b01c .word 0x0803b01c + 801c070: 08035999 .word 0x08035999 + +0801c074 : +#endif + +/*-----------------------------------------------------------------------------------*/ +// Creates an empty mailbox. +err_t sys_mbox_new(sys_mbox_t *mbox, int size) +{ + 801c074: b510 push {r4, lr} + 801c076: 4604 mov r4, r0 +#if (osCMSIS < 0x20000U) + osMessageQDef(QUEUE, size, void *); + *mbox = osMessageCreate(osMessageQ(QUEUE), NULL); +#else + *mbox = osMessageQueueNew(size, sizeof(void *), NULL); + 801c078: 2200 movs r2, #0 +{ + 801c07a: 4608 mov r0, r1 + *mbox = osMessageQueueNew(size, sizeof(void *), NULL); + 801c07c: 2104 movs r1, #4 + 801c07e: f7ed fa47 bl 8009510 + 801c082: 6020 str r0, [r4, #0] + if(lwip_stats.sys.mbox.max < lwip_stats.sys.mbox.used) + { + lwip_stats.sys.mbox.max = lwip_stats.sys.mbox.used; + } +#endif /* SYS_STATS */ + if(*mbox == NULL) + 801c084: fab0 f080 clz r0, r0 + 801c088: 0940 lsrs r0, r0, #5 + return ERR_MEM; + + return ERR_OK; +} + 801c08a: 4240 negs r0, r0 + 801c08c: bd10 pop {r4, pc} + +0801c08e : +{ + err_t result; +#if (osCMSIS < 0x20000U) + if(osMessagePut(*mbox, (uint32_t)msg, 0) == osOK) +#else + if(osMessageQueuePut(*mbox, &msg, 0, 0) == osOK) + 801c08e: 2300 movs r3, #0 +{ + 801c090: b507 push {r0, r1, r2, lr} + if(osMessageQueuePut(*mbox, &msg, 0, 0) == osOK) + 801c092: 461a mov r2, r3 +{ + 801c094: 9101 str r1, [sp, #4] + if(osMessageQueuePut(*mbox, &msg, 0, 0) == osOK) + 801c096: 6800 ldr r0, [r0, #0] + 801c098: a901 add r1, sp, #4 + 801c09a: f7ed fa7f bl 800959c + 801c09e: 3800 subs r0, #0 + 801c0a0: bf18 it ne + 801c0a2: 2001 movne r0, #1 + lwip_stats.sys.mbox.err++; +#endif /* SYS_STATS */ + } + + return result; +} + 801c0a4: 4240 negs r0, r0 + 801c0a6: b003 add sp, #12 + 801c0a8: f85d fb04 ldr.w pc, [sp], #4 + +0801c0ac : + + Note that a function with a similar name, sys_mbox_fetch(), is + implemented by lwIP. +*/ +u32_t sys_arch_mbox_fetch(sys_mbox_t *mbox, void **msg, u32_t timeout) +{ + 801c0ac: b537 push {r0, r1, r2, r4, r5, lr} + 801c0ae: 4605 mov r5, r0 + 801c0b0: e9cd 2100 strd r2, r1, [sp] +#if (osCMSIS < 0x20000U) + osEvent event; + uint32_t starttime = osKernelSysTick(); +#else + osStatus_t status; + uint32_t starttime = osKernelGetTickCount(); + 801c0b4: f7ed f846 bl 8009144 + 801c0b8: 4604 mov r4, r0 +#endif + if(timeout != 0) + 801c0ba: e9dd 2100 ldrd r2, r1, [sp] + 801c0be: b152 cbz r2, 801c0d6 + { + *msg = (void *)event.value.v; + return (osKernelSysTick() - starttime); + } +#else + status = osMessageQueueGet(*mbox, msg, 0, timeout); + 801c0c0: 4613 mov r3, r2 + 801c0c2: 6828 ldr r0, [r5, #0] + 801c0c4: 2200 movs r2, #0 + 801c0c6: f7ed faab bl 8009620 + if (status == osOK) + 801c0ca: b950 cbnz r0, 801c0e2 + event = osMessageGet (*mbox, osWaitForever); + *msg = (void *)event.value.v; + return (osKernelSysTick() - starttime); +#else + osMessageQueueGet(*mbox, msg, 0, osWaitForever ); + return (osKernelGetTickCount() - starttime); + 801c0cc: f7ed f83a bl 8009144 + 801c0d0: 1b00 subs r0, r0, r4 +#endif + } +} + 801c0d2: b003 add sp, #12 + 801c0d4: bd30 pop {r4, r5, pc} + osMessageQueueGet(*mbox, msg, 0, osWaitForever ); + 801c0d6: f04f 33ff mov.w r3, #4294967295 + 801c0da: 6828 ldr r0, [r5, #0] + 801c0dc: f7ed faa0 bl 8009620 + 801c0e0: e7f4 b.n 801c0cc + return SYS_ARCH_TIMEOUT; + 801c0e2: f04f 30ff mov.w r0, #4294967295 + 801c0e6: e7f4 b.n 801c0d2 + +0801c0e8 : + 801c0e8: 6800 ldr r0, [r0, #0] + 801c0ea: 3800 subs r0, #0 + 801c0ec: bf18 it ne + 801c0ee: 2001 movne r0, #1 + 801c0f0: 4770 bx lr + ... + +0801c0f4 : +#else +osMutexId_t lwip_sys_mutex; +#endif +// Initialize sys arch +void sys_init(void) +{ + 801c0f4: b508 push {r3, lr} +#if (osCMSIS < 0x20000U) + lwip_sys_mutex = osMutexCreate(osMutex(lwip_sys_mutex)); +#else + lwip_sys_mutex = osMutexNew(NULL); + 801c0f6: 2000 movs r0, #0 + 801c0f8: f7ed f8a6 bl 8009248 + 801c0fc: 4b01 ldr r3, [pc, #4] ; (801c104 ) + 801c0fe: 6018 str r0, [r3, #0] +#endif +} + 801c100: bd08 pop {r3, pc} + 801c102: bf00 nop + 801c104: 2001e6a8 .word 0x2001e6a8 + +0801c108 : + /* Mutexes*/ +/*-----------------------------------------------------------------------------------*/ +/*-----------------------------------------------------------------------------------*/ +#if LWIP_COMPAT_MUTEX == 0 +/* Create a new mutex*/ +err_t sys_mutex_new(sys_mutex_t *mutex) { + 801c108: b510 push {r4, lr} + 801c10a: 4604 mov r4, r0 + +#if (osCMSIS < 0x20000U) + osMutexDef(MUTEX); + *mutex = osMutexCreate(osMutex(MUTEX)); +#else + *mutex = osMutexNew(NULL); + 801c10c: 2000 movs r0, #0 + 801c10e: f7ed f89b bl 8009248 + 801c112: 6020 str r0, [r4, #0] +#endif + + if(*mutex == NULL) + 801c114: fab0 f080 clz r0, r0 + 801c118: 0940 lsrs r0, r0, #5 + if (lwip_stats.sys.mutex.max < lwip_stats.sys.mutex.used) { + lwip_stats.sys.mutex.max = lwip_stats.sys.mutex.used; + } +#endif /* SYS_STATS */ + return ERR_OK; +} + 801c11a: 4240 negs r0, r0 + 801c11c: bd10 pop {r4, pc} + +0801c11e : +void sys_mutex_lock(sys_mutex_t *mutex) +{ +#if (osCMSIS < 0x20000U) + osMutexWait(*mutex, osWaitForever); +#else + osMutexAcquire(*mutex, osWaitForever); + 801c11e: f04f 31ff mov.w r1, #4294967295 + 801c122: 6800 ldr r0, [r0, #0] + 801c124: f7ed b8d4 b.w 80092d0 + +0801c128 : + +/*-----------------------------------------------------------------------------------*/ +/* Unlock a mutex*/ +void sys_mutex_unlock(sys_mutex_t *mutex) +{ + osMutexRelease(*mutex); + 801c128: 6800 ldr r0, [r0, #0] + 801c12a: f7ed b901 b.w 8009330 + +0801c12e : + function "thread()". The "arg" argument will be passed as an argument to the + thread() function. The id of the new thread is returned. Both the id and + the priority are system dependent. +*/ +sys_thread_t sys_thread_new(const char *name, lwip_thread_fn thread , void *arg, int stacksize, int prio) +{ + 801c12e: b5f0 push {r4, r5, r6, r7, lr} + 801c130: b08b sub sp, #44 ; 0x2c + 801c132: 4615 mov r5, r2 + 801c134: 4607 mov r7, r0 + 801c136: 460c mov r4, r1 +#if (osCMSIS < 0x20000U) + const osThreadDef_t os_thread_def = { (char *)name, (os_pthread)thread, (osPriority)prio, 0, stacksize}; + return osThreadCreate(&os_thread_def, arg); +#else + const osThreadAttr_t attributes = { + 801c138: 2220 movs r2, #32 + 801c13a: 2100 movs r1, #0 + 801c13c: a802 add r0, sp, #8 +{ + 801c13e: 461e mov r6, r3 + const osThreadAttr_t attributes = { + 801c140: f018 fc3c bl 80349bc + 801c144: 9b10 ldr r3, [sp, #64] ; 0x40 + .name = name, + .stack_size = stacksize, + .priority = (osPriority_t)prio, + }; + return osThreadNew(thread, arg, &attributes); + 801c146: aa01 add r2, sp, #4 + 801c148: 4629 mov r1, r5 + 801c14a: 4620 mov r0, r4 + const osThreadAttr_t attributes = { + 801c14c: 9701 str r7, [sp, #4] + 801c14e: 9606 str r6, [sp, #24] + 801c150: 9307 str r3, [sp, #28] + return osThreadNew(thread, arg, &attributes); + 801c152: f7ed f80b bl 800916c +#endif +} + 801c156: b00b add sp, #44 ; 0x2c + 801c158: bdf0 pop {r4, r5, r6, r7, pc} + ... + +0801c15c : + + Note: This function is based on FreeRTOS API, because no equivalent CMSIS-RTOS + API is available +*/ +sys_prot_t sys_arch_protect(void) +{ + 801c15c: b508 push {r3, lr} +#if (osCMSIS < 0x20000U) + osMutexWait(lwip_sys_mutex, osWaitForever); +#else + osMutexAcquire(lwip_sys_mutex, osWaitForever); + 801c15e: 4b04 ldr r3, [pc, #16] ; (801c170 ) + 801c160: f04f 31ff mov.w r1, #4294967295 + 801c164: 6818 ldr r0, [r3, #0] + 801c166: f7ed f8b3 bl 80092d0 +#endif + return (sys_prot_t)1; +} + 801c16a: 2001 movs r0, #1 + 801c16c: bd08 pop {r3, pc} + 801c16e: bf00 nop + 801c170: 2001e6a8 .word 0x2001e6a8 + +0801c174 : + API is available +*/ +void sys_arch_unprotect(sys_prot_t pval) +{ + ( void ) pval; + osMutexRelease(lwip_sys_mutex); + 801c174: 4b01 ldr r3, [pc, #4] ; (801c17c ) + 801c176: 6818 ldr r0, [r3, #0] + 801c178: f7ed b8da b.w 8009330 + 801c17c: 2001e6a8 .word 0x2001e6a8 + +0801c180 : + return ERR_OK; +} + +static err_t +tcp_close_shutdown_fin(struct tcp_pcb *pcb) +{ + 801c180: b510 push {r4, lr} + err_t err; + LWIP_ASSERT("pcb != NULL", pcb != NULL); + 801c182: 4604 mov r4, r0 + 801c184: b930 cbnz r0, 801c194 + 801c186: 4b13 ldr r3, [pc, #76] ; (801c1d4 ) + 801c188: f44f 72ce mov.w r2, #412 ; 0x19c + 801c18c: 4912 ldr r1, [pc, #72] ; (801c1d8 ) + 801c18e: 4813 ldr r0, [pc, #76] ; (801c1dc ) + 801c190: f018 fae0 bl 8034754 + + switch (pcb->state) { + 801c194: 7d23 ldrb r3, [r4, #20] + 801c196: 2b04 cmp r3, #4 + 801c198: d003 beq.n 801c1a2 + 801c19a: 2b07 cmp r3, #7 + 801c19c: d00c beq.n 801c1b8 + 801c19e: 2b03 cmp r3, #3 + 801c1a0: d108 bne.n 801c1b4 + case SYN_RCVD: + err = tcp_send_fin(pcb); + 801c1a2: 4620 mov r0, r4 + 801c1a4: f002 fc74 bl 801ea90 + if (err == ERR_OK) { + 801c1a8: b960 cbnz r0, 801c1c4 + default: + /* Has already been closed, do nothing. */ + return ERR_OK; + } + + if (err == ERR_OK) { + 801c1aa: 2305 movs r3, #5 + /* To ensure all data has been sent when tcp_close returns, we have + to make sure tcp_output doesn't fail. + Since we don't really have to ensure all data has been sent when tcp_close + returns (unsent data is sent from tcp timer functions, also), we don't care + for the return value of tcp_output for now. */ + tcp_output(pcb); + 801c1ac: 4620 mov r0, r4 + pcb->state = LAST_ACK; + 801c1ae: 7523 strb r3, [r4, #20] + tcp_output(pcb); + 801c1b0: f002 fdce bl 801ed50 + switch (pcb->state) { + 801c1b4: 2000 movs r0, #0 + actually freeing the pcb, either (it is left in closure states for + remote ACK or timeout) */ + return ERR_OK; + } + return err; +} + 801c1b6: bd10 pop {r4, pc} + err = tcp_send_fin(pcb); + 801c1b8: 4620 mov r0, r4 + 801c1ba: f002 fc69 bl 801ea90 + if (err == ERR_OK) { + 801c1be: b908 cbnz r0, 801c1c4 + 801c1c0: 2309 movs r3, #9 + 801c1c2: e7f3 b.n 801c1ac + } else if (err == ERR_MEM) { + 801c1c4: 1c43 adds r3, r0, #1 + 801c1c6: d1f6 bne.n 801c1b6 + tcp_set_flags(pcb, TF_CLOSEPEND); + 801c1c8: 8b63 ldrh r3, [r4, #26] + 801c1ca: f043 0308 orr.w r3, r3, #8 + 801c1ce: 8363 strh r3, [r4, #26] + return ERR_OK; + 801c1d0: e7f0 b.n 801c1b4 + 801c1d2: bf00 nop + 801c1d4: 0803b02d .word 0x0803b02d + 801c1d8: 0803b0ad .word 0x0803b0ad + 801c1dc: 08035999 .word 0x08035999 + +0801c1e0 : +{ + 801c1e0: b508 push {r3, lr} + tcp_port = TCP_ENSURE_LOCAL_PORT_RANGE(LWIP_RAND()); + 801c1e2: f018 f997 bl 8034514 + 801c1e6: ea6f 4080 mvn.w r0, r0, lsl #18 + 801c1ea: 4b02 ldr r3, [pc, #8] ; (801c1f4 ) + 801c1ec: ea6f 4090 mvn.w r0, r0, lsr #18 + 801c1f0: 8018 strh r0, [r3, #0] +} + 801c1f2: bd08 pop {r3, pc} + 801c1f4: 2000005c .word 0x2000005c + +0801c1f8 : +{ + 801c1f8: b510 push {r4, lr} + LWIP_ASSERT("tcp_free: LISTEN", pcb->state != LISTEN); + 801c1fa: 7d03 ldrb r3, [r0, #20] +{ + 801c1fc: 4604 mov r4, r0 + LWIP_ASSERT("tcp_free: LISTEN", pcb->state != LISTEN); + 801c1fe: 2b01 cmp r3, #1 + 801c200: d105 bne.n 801c20e + 801c202: 4b06 ldr r3, [pc, #24] ; (801c21c ) + 801c204: 22d4 movs r2, #212 ; 0xd4 + 801c206: 4906 ldr r1, [pc, #24] ; (801c220 ) + 801c208: 4806 ldr r0, [pc, #24] ; (801c224 ) + 801c20a: f018 faa3 bl 8034754 + memp_free(MEMP_TCP_PCB, pcb); + 801c20e: 4621 mov r1, r4 + 801c210: 2001 movs r0, #1 +} + 801c212: e8bd 4010 ldmia.w sp!, {r4, lr} + memp_free(MEMP_TCP_PCB, pcb); + 801c216: f7ff ba13 b.w 801b640 + 801c21a: bf00 nop + 801c21c: 0803b02d .word 0x0803b02d + 801c220: 0803b0b9 .word 0x0803b0b9 + 801c224: 08035999 .word 0x08035999 + +0801c228 : + * Returns how much extra window would be advertised if we sent an + * update now. + */ +u32_t +tcp_update_rcv_ann_wnd(struct tcp_pcb *pcb) +{ + 801c228: b570 push {r4, r5, r6, lr} + u32_t new_right_edge; + + LWIP_ASSERT("tcp_update_rcv_ann_wnd: invalid pcb", pcb != NULL); + 801c22a: 4604 mov r4, r0 + 801c22c: b930 cbnz r0, 801c23c + 801c22e: 4b15 ldr r3, [pc, #84] ; (801c284 ) + 801c230: f240 32a6 movw r2, #934 ; 0x3a6 + 801c234: 4914 ldr r1, [pc, #80] ; (801c288 ) + 801c236: 4815 ldr r0, [pc, #84] ; (801c28c ) + 801c238: f018 fa8c bl 8034754 + new_right_edge = pcb->rcv_nxt + pcb->rcv_wnd; + 801c23c: 8d23 ldrh r3, [r4, #40] ; 0x28 + + if (TCP_SEQ_GEQ(new_right_edge, pcb->rcv_ann_right_edge + LWIP_MIN((TCP_WND / 2), pcb->mss))) { + 801c23e: 6ae1 ldr r1, [r4, #44] ; 0x2c + 801c240: 8e66 ldrh r6, [r4, #50] ; 0x32 + new_right_edge = pcb->rcv_nxt + pcb->rcv_wnd; + 801c242: 6a62 ldr r2, [r4, #36] ; 0x24 + if (TCP_SEQ_GEQ(new_right_edge, pcb->rcv_ann_right_edge + LWIP_MIN((TCP_WND / 2), pcb->mss))) { + 801c244: 1a58 subs r0, r3, r1 + 801c246: f5b6 6f86 cmp.w r6, #1072 ; 0x430 + 801c24a: 4410 add r0, r2 + 801c24c: bf94 ite ls + 801c24e: 1b85 subls r5, r0, r6 + 801c250: f5a0 6586 subhi.w r5, r0, #1072 ; 0x430 + 801c254: 2d00 cmp r5, #0 + 801c256: da0f bge.n 801c278 + /* we can advertise more window */ + pcb->rcv_ann_wnd = pcb->rcv_wnd; + return new_right_edge - pcb->rcv_ann_right_edge; + } else { + if (TCP_SEQ_GT(pcb->rcv_nxt, pcb->rcv_ann_right_edge)) { + 801c258: 1a53 subs r3, r2, r1 + 801c25a: 2b00 cmp r3, #0 + 801c25c: dc0e bgt.n 801c27c + /* Can happen due to other end sending out of advertised window, + * but within actual available (but not yet advertised) window */ + pcb->rcv_ann_wnd = 0; + } else { + /* keep the right edge of window constant */ + u32_t new_rcv_ann_wnd = pcb->rcv_ann_right_edge - pcb->rcv_nxt; + 801c25e: 1a8d subs r5, r1, r2 +#if !LWIP_WND_SCALE + LWIP_ASSERT("new_rcv_ann_wnd <= 0xffff", new_rcv_ann_wnd <= 0xffff); + 801c260: f5b5 3f80 cmp.w r5, #65536 ; 0x10000 + 801c264: d306 bcc.n 801c274 + 801c266: 4b07 ldr r3, [pc, #28] ; (801c284 ) + 801c268: f240 32b6 movw r2, #950 ; 0x3b6 + 801c26c: 4908 ldr r1, [pc, #32] ; (801c290 ) + 801c26e: 4807 ldr r0, [pc, #28] ; (801c28c ) + 801c270: f018 fa70 bl 8034754 +#endif + pcb->rcv_ann_wnd = (tcpwnd_size_t)new_rcv_ann_wnd; + 801c274: b2ab uxth r3, r5 + } + return 0; + 801c276: 2000 movs r0, #0 + pcb->rcv_ann_wnd = pcb->rcv_wnd; + 801c278: 8563 strh r3, [r4, #42] ; 0x2a + } +} + 801c27a: bd70 pop {r4, r5, r6, pc} + 801c27c: 2300 movs r3, #0 + return 0; + 801c27e: 4618 mov r0, r3 + 801c280: e7fa b.n 801c278 + 801c282: bf00 nop + 801c284: 0803b02d .word 0x0803b02d + 801c288: 0803b0ca .word 0x0803b0ca + 801c28c: 08035999 .word 0x08035999 + 801c290: 0803b0ee .word 0x0803b0ee + +0801c294 : + * @param pcb the tcp_pcb for which data is read + * @param len the amount of bytes that have been read by the application + */ +void +tcp_recved(struct tcp_pcb *pcb, u16_t len) +{ + 801c294: b570 push {r4, r5, r6, lr} + 801c296: 460c mov r4, r1 + u32_t wnd_inflation; + tcpwnd_size_t rcv_wnd; + + LWIP_ASSERT_CORE_LOCKED(); + + LWIP_ERROR("tcp_recved: invalid pcb", pcb != NULL, return); + 801c298: 4605 mov r5, r0 + 801c29a: b940 cbnz r0, 801c2ae + 801c29c: 4b18 ldr r3, [pc, #96] ; (801c300 ) + 801c29e: f240 32cf movw r2, #975 ; 0x3cf + 801c2a2: 4918 ldr r1, [pc, #96] ; (801c304 ) + 801c2a4: 4818 ldr r0, [pc, #96] ; (801c308 ) + tcp_output(pcb); + } + + LWIP_DEBUGF(TCP_DEBUG, ("tcp_recved: received %"U16_F" bytes, wnd %"TCPWNDSIZE_F" (%"TCPWNDSIZE_F").\n", + len, pcb->rcv_wnd, (u16_t)(TCP_WND_MAX(pcb) - pcb->rcv_wnd))); +} + 801c2a6: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} + LWIP_ERROR("tcp_recved: invalid pcb", pcb != NULL, return); + 801c2aa: f018 ba53 b.w 8034754 + LWIP_ASSERT("don't call tcp_recved for listen-pcbs", + 801c2ae: 7d03 ldrb r3, [r0, #20] + 801c2b0: 2b01 cmp r3, #1 + 801c2b2: d106 bne.n 801c2c2 + 801c2b4: 4b12 ldr r3, [pc, #72] ; (801c300 ) + 801c2b6: f240 32d2 movw r2, #978 ; 0x3d2 + 801c2ba: 4914 ldr r1, [pc, #80] ; (801c30c ) + 801c2bc: 4812 ldr r0, [pc, #72] ; (801c308 ) + 801c2be: f018 fa49 bl 8034754 + rcv_wnd = (tcpwnd_size_t)(pcb->rcv_wnd + len); + 801c2c2: 8d2b ldrh r3, [r5, #40] ; 0x28 + 801c2c4: 1919 adds r1, r3, r4 + 801c2c6: b289 uxth r1, r1 + if ((rcv_wnd > TCP_WND_MAX(pcb)) || (rcv_wnd < pcb->rcv_wnd)) { + 801c2c8: f5b1 6f06 cmp.w r1, #2144 ; 0x860 + 801c2cc: d813 bhi.n 801c2f6 + pcb->rcv_wnd = TCP_WND_MAX(pcb); + 801c2ce: 428b cmp r3, r1 + 801c2d0: bf88 it hi + 801c2d2: f44f 6106 movhi.w r1, #2144 ; 0x860 + wnd_inflation = tcp_update_rcv_ann_wnd(pcb); + 801c2d6: 4628 mov r0, r5 + 801c2d8: 8529 strh r1, [r5, #40] ; 0x28 + 801c2da: f7ff ffa5 bl 801c228 + if (wnd_inflation >= TCP_WND_UPDATE_THRESHOLD) { + 801c2de: f5b0 7f06 cmp.w r0, #536 ; 0x218 + 801c2e2: d30b bcc.n 801c2fc + tcp_ack_now(pcb); + 801c2e4: 8b6b ldrh r3, [r5, #26] + tcp_output(pcb); + 801c2e6: 4628 mov r0, r5 + tcp_ack_now(pcb); + 801c2e8: f043 0302 orr.w r3, r3, #2 + 801c2ec: 836b strh r3, [r5, #26] +} + 801c2ee: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} + tcp_output(pcb); + 801c2f2: f002 bd2d b.w 801ed50 + pcb->rcv_wnd = TCP_WND_MAX(pcb); + 801c2f6: f44f 6106 mov.w r1, #2144 ; 0x860 + 801c2fa: e7ec b.n 801c2d6 +} + 801c2fc: bd70 pop {r4, r5, r6, pc} + 801c2fe: bf00 nop + 801c300: 0803b02d .word 0x0803b02d + 801c304: 0803b108 .word 0x0803b108 + 801c308: 08035999 .word 0x08035999 + 801c30c: 0803b120 .word 0x0803b120 + +0801c310 : + * + * @param seg single tcp_seg to free + */ +void +tcp_seg_free(struct tcp_seg *seg) +{ + 801c310: b510 push {r4, lr} + if (seg != NULL) { + 801c312: 4604 mov r4, r0 + 801c314: b148 cbz r0, 801c32a + if (seg->p != NULL) { + 801c316: 6840 ldr r0, [r0, #4] + 801c318: b108 cbz r0, 801c31e + pbuf_free(seg->p); + 801c31a: f7ff fc0d bl 801bb38 +#if TCP_DEBUG + seg->p = NULL; +#endif /* TCP_DEBUG */ + } + memp_free(MEMP_TCP_SEG, seg); + 801c31e: 4621 mov r1, r4 + 801c320: 2003 movs r0, #3 + } +} + 801c322: e8bd 4010 ldmia.w sp!, {r4, lr} + memp_free(MEMP_TCP_SEG, seg); + 801c326: f7ff b98b b.w 801b640 +} + 801c32a: bd10 pop {r4, pc} + +0801c32c : +{ + 801c32c: b510 push {r4, lr} + while (seg != NULL) { + 801c32e: b900 cbnz r0, 801c332 +} + 801c330: bd10 pop {r4, pc} + struct tcp_seg *next = seg->next; + 801c332: 6804 ldr r4, [r0, #0] + tcp_seg_free(seg); + 801c334: f7ff ffec bl 801c310 + seg = next; + 801c338: 4620 mov r0, r4 + 801c33a: e7f8 b.n 801c32e + +0801c33c : + * @param seg the old tcp_seg + * @return a copy of seg + */ +struct tcp_seg * +tcp_seg_copy(struct tcp_seg *seg) +{ + 801c33c: b538 push {r3, r4, r5, lr} + struct tcp_seg *cseg; + + LWIP_ASSERT("tcp_seg_copy: invalid seg", seg != NULL); + 801c33e: 4604 mov r4, r0 + 801c340: b930 cbnz r0, 801c350 + 801c342: 4b0d ldr r3, [pc, #52] ; (801c378 ) + 801c344: f240 6282 movw r2, #1666 ; 0x682 + 801c348: 490c ldr r1, [pc, #48] ; (801c37c ) + 801c34a: 480d ldr r0, [pc, #52] ; (801c380 ) + 801c34c: f018 fa02 bl 8034754 + + cseg = (struct tcp_seg *)memp_malloc(MEMP_TCP_SEG); + 801c350: 2003 movs r0, #3 + 801c352: f7ff f945 bl 801b5e0 + if (cseg == NULL) { + 801c356: 4605 mov r5, r0 + 801c358: b160 cbz r0, 801c374 + return NULL; + } + SMEMCPY((u8_t *)cseg, (const u8_t *)seg, sizeof(struct tcp_seg)); + 801c35a: 4623 mov r3, r4 + 801c35c: 4602 mov r2, r0 + 801c35e: f104 0110 add.w r1, r4, #16 + 801c362: f853 0b04 ldr.w r0, [r3], #4 + 801c366: 428b cmp r3, r1 + 801c368: f842 0b04 str.w r0, [r2], #4 + 801c36c: d1f9 bne.n 801c362 + pbuf_ref(cseg->p); + 801c36e: 6868 ldr r0, [r5, #4] + 801c370: f7ff fd3c bl 801bdec + return cseg; +} + 801c374: 4628 mov r0, r5 + 801c376: bd38 pop {r3, r4, r5, pc} + 801c378: 0803b02d .word 0x0803b02d + 801c37c: 0803b146 .word 0x0803b146 + 801c380: 08035999 .word 0x08035999 + +0801c384 : + * + * @return u32_t pseudo random sequence number + */ +u32_t +tcp_next_iss(struct tcp_pcb *pcb) +{ + 801c384: b508 push {r3, lr} + LWIP_ASSERT("tcp_next_iss: invalid pcb", pcb != NULL); + return LWIP_HOOK_TCP_ISN(&pcb->local_ip, pcb->local_port, &pcb->remote_ip, pcb->remote_port); +#else /* LWIP_HOOK_TCP_ISN */ + static u32_t iss = 6510; + + LWIP_ASSERT("tcp_next_iss: invalid pcb", pcb != NULL); + 801c386: b930 cbnz r0, 801c396 + 801c388: 4b06 ldr r3, [pc, #24] ; (801c3a4 ) + 801c38a: f640 02af movw r2, #2223 ; 0x8af + 801c38e: 4906 ldr r1, [pc, #24] ; (801c3a8 ) + 801c390: 4806 ldr r0, [pc, #24] ; (801c3ac ) + 801c392: f018 f9df bl 8034754 + LWIP_UNUSED_ARG(pcb); + + iss += tcp_ticks; /* XXX */ + 801c396: 4b06 ldr r3, [pc, #24] ; (801c3b0 ) + 801c398: 4a06 ldr r2, [pc, #24] ; (801c3b4 ) + 801c39a: 6818 ldr r0, [r3, #0] + 801c39c: 6812 ldr r2, [r2, #0] + 801c39e: 4410 add r0, r2 + 801c3a0: 6018 str r0, [r3, #0] + return iss; +#endif /* LWIP_HOOK_TCP_ISN */ +} + 801c3a2: bd08 pop {r3, pc} + 801c3a4: 0803b02d .word 0x0803b02d + 801c3a8: 0803b160 .word 0x0803b160 + 801c3ac: 08035999 .word 0x08035999 + 801c3b0: 20000058 .word 0x20000058 + 801c3b4: 2001e6bc .word 0x2001e6bc + +0801c3b8 : + * by calculating the minimum of TCP_MSS and the mtu (if set) of the target + * netif (if not NULL). + */ +u16_t +tcp_eff_send_mss_netif(u16_t sendmss, struct netif *outif, const ip_addr_t *dest) +{ + 801c3b8: b538 push {r3, r4, r5, lr} + 801c3ba: 4604 mov r4, r0 + 801c3bc: 460d mov r5, r1 + u16_t mss_s; + u16_t mtu; + + LWIP_UNUSED_ARG(dest); /* in case IPv6 is disabled */ + + LWIP_ASSERT("tcp_eff_send_mss_netif: invalid dst_ip", dest != NULL); + 801c3be: b932 cbnz r2, 801c3ce + 801c3c0: 4b09 ldr r3, [pc, #36] ; (801c3e8 ) + 801c3c2: f640 02c5 movw r2, #2245 ; 0x8c5 + 801c3c6: 4909 ldr r1, [pc, #36] ; (801c3ec ) + 801c3c8: 4809 ldr r0, [pc, #36] ; (801c3f0 ) + 801c3ca: f018 f9c3 bl 8034754 + else +#endif /* LWIP_IPV4 */ +#endif /* LWIP_IPV6 */ +#if LWIP_IPV4 + { + if (outif == NULL) { + 801c3ce: b14d cbz r5, 801c3e4 + return sendmss; + } + mtu = outif->mtu; + 801c3d0: 8d2b ldrh r3, [r5, #40] ; 0x28 + } +#endif /* LWIP_IPV4 */ + + if (mtu != 0) { + 801c3d2: b13b cbz r3, 801c3e4 +#if LWIP_IPV4 + { + offset = IP_HLEN + TCP_HLEN; + } +#endif /* LWIP_IPV4 */ + mss_s = (mtu > offset) ? (u16_t)(mtu - offset) : 0; + 801c3d4: 2b28 cmp r3, #40 ; 0x28 + 801c3d6: bf8a itet hi + 801c3d8: 3b28 subhi r3, #40 ; 0x28 + 801c3da: 2300 movls r3, #0 + 801c3dc: b29b uxthhi r3, r3 + /* RFC 1122, chap 4.2.2.6: + * Eff.snd.MSS = min(SendMSS+20, MMS_S) - TCPhdrsize - IPoptionsize + * We correct for TCP options in tcp_write(), and don't support IP options. + */ + sendmss = LWIP_MIN(sendmss, mss_s); + 801c3de: 429c cmp r4, r3 + 801c3e0: bf28 it cs + 801c3e2: 461c movcs r4, r3 + } + return sendmss; +} + 801c3e4: 4620 mov r0, r4 + 801c3e6: bd38 pop {r3, r4, r5, pc} + 801c3e8: 0803b02d .word 0x0803b02d + 801c3ec: 0803b17a .word 0x0803b17a + 801c3f0: 08035999 .word 0x08035999 + +0801c3f4 : + +#if TCP_QUEUE_OOSEQ +/* Free all ooseq pbufs (and possibly reset SACK state) */ +void +tcp_free_ooseq(struct tcp_pcb *pcb) +{ + 801c3f4: b510 push {r4, lr} + 801c3f6: 4604 mov r4, r0 + if (pcb->ooseq) { + 801c3f8: 6f40 ldr r0, [r0, #116] ; 0x74 + 801c3fa: b118 cbz r0, 801c404 + tcp_segs_free(pcb->ooseq); + 801c3fc: f7ff ff96 bl 801c32c + pcb->ooseq = NULL; + 801c400: 2300 movs r3, #0 + 801c402: 6763 str r3, [r4, #116] ; 0x74 +#if LWIP_TCP_SACK_OUT + memset(pcb->rcv_sacks, 0, sizeof(pcb->rcv_sacks)); +#endif /* LWIP_TCP_SACK_OUT */ + } +} + 801c404: bd10 pop {r4, pc} + ... + +0801c408 : +{ + 801c408: b510 push {r4, lr} + LWIP_ERROR("tcp_pcb_purge: invalid pcb", pcb != NULL, return); + 801c40a: 4604 mov r4, r0 + 801c40c: b940 cbnz r0, 801c420 + 801c40e: 4b14 ldr r3, [pc, #80] ; (801c460 ) + 801c410: f640 0251 movw r2, #2129 ; 0x851 + 801c414: 4913 ldr r1, [pc, #76] ; (801c464 ) + 801c416: 4814 ldr r0, [pc, #80] ; (801c468 ) +} + 801c418: e8bd 4010 ldmia.w sp!, {r4, lr} + LWIP_ERROR("tcp_pcb_purge: invalid pcb", pcb != NULL, return); + 801c41c: f018 b99a b.w 8034754 + if (pcb->state != CLOSED && + 801c420: 7d03 ldrb r3, [r0, #20] + 801c422: 2b01 cmp r3, #1 + 801c424: d91a bls.n 801c45c + 801c426: 2b0a cmp r3, #10 + 801c428: d018 beq.n 801c45c + if (pcb->refused_data != NULL) { + 801c42a: 6f80 ldr r0, [r0, #120] ; 0x78 + 801c42c: b118 cbz r0, 801c436 + pbuf_free(pcb->refused_data); + 801c42e: f7ff fb83 bl 801bb38 + pcb->refused_data = NULL; + 801c432: 2300 movs r3, #0 + 801c434: 67a3 str r3, [r4, #120] ; 0x78 + if (pcb->ooseq != NULL) { + 801c436: 6f63 ldr r3, [r4, #116] ; 0x74 + 801c438: b113 cbz r3, 801c440 + tcp_free_ooseq(pcb); + 801c43a: 4620 mov r0, r4 + 801c43c: f7ff ffda bl 801c3f4 + pcb->rtime = -1; + 801c440: f64f 73ff movw r3, #65535 ; 0xffff + tcp_segs_free(pcb->unsent); + 801c444: 6ee0 ldr r0, [r4, #108] ; 0x6c + pcb->rtime = -1; + 801c446: 8623 strh r3, [r4, #48] ; 0x30 + tcp_segs_free(pcb->unsent); + 801c448: f7ff ff70 bl 801c32c + tcp_segs_free(pcb->unacked); + 801c44c: 6f20 ldr r0, [r4, #112] ; 0x70 + 801c44e: f7ff ff6d bl 801c32c + pcb->unacked = pcb->unsent = NULL; + 801c452: 2300 movs r3, #0 + 801c454: e9c4 331b strd r3, r3, [r4, #108] ; 0x6c + pcb->unsent_oversize = 0; + 801c458: f8a4 3068 strh.w r3, [r4, #104] ; 0x68 +} + 801c45c: bd10 pop {r4, pc} + 801c45e: bf00 nop + 801c460: 0803b02d .word 0x0803b02d + 801c464: 0803b1a1 .word 0x0803b1a1 + 801c468: 08035999 .word 0x08035999 + +0801c46c : +{ + 801c46c: b538 push {r3, r4, r5, lr} + 801c46e: 4605 mov r5, r0 + LWIP_ASSERT("tcp_pcb_remove: invalid pcb", pcb != NULL); + 801c470: 460c mov r4, r1 + 801c472: b931 cbnz r1, 801c482 + 801c474: 4b29 ldr r3, [pc, #164] ; (801c51c ) + 801c476: f640 0283 movw r2, #2179 ; 0x883 + 801c47a: 4929 ldr r1, [pc, #164] ; (801c520 ) + 801c47c: 4829 ldr r0, [pc, #164] ; (801c524 ) + 801c47e: f018 f969 bl 8034754 + LWIP_ASSERT("tcp_pcb_remove: invalid pcblist", pcblist != NULL); + 801c482: b935 cbnz r5, 801c492 + 801c484: 4b25 ldr r3, [pc, #148] ; (801c51c ) + 801c486: f640 0284 movw r2, #2180 ; 0x884 + 801c48a: 4927 ldr r1, [pc, #156] ; (801c528 ) + 801c48c: 4825 ldr r0, [pc, #148] ; (801c524 ) + 801c48e: f018 f961 bl 8034754 + TCP_RMV(pcblist, pcb); + 801c492: 682b ldr r3, [r5, #0] + 801c494: 42a3 cmp r3, r4 + 801c496: d11f bne.n 801c4d8 + 801c498: 68e3 ldr r3, [r4, #12] + 801c49a: 602b str r3, [r5, #0] + 801c49c: 2300 movs r3, #0 + tcp_pcb_purge(pcb); + 801c49e: 4620 mov r0, r4 + TCP_RMV(pcblist, pcb); + 801c4a0: 60e3 str r3, [r4, #12] + tcp_pcb_purge(pcb); + 801c4a2: f7ff ffb1 bl 801c408 + if ((pcb->state != TIME_WAIT) && + 801c4a6: 7d23 ldrb r3, [r4, #20] + 801c4a8: 2b0a cmp r3, #10 + 801c4aa: d11d bne.n 801c4e8 + LWIP_ASSERT("unsent segments leaking", pcb->unsent == NULL); + 801c4ac: 6ee3 ldr r3, [r4, #108] ; 0x6c + 801c4ae: bb6b cbnz r3, 801c50c + LWIP_ASSERT("unacked segments leaking", pcb->unacked == NULL); + 801c4b0: 6f23 ldr r3, [r4, #112] ; 0x70 + 801c4b2: b133 cbz r3, 801c4c2 + 801c4b4: 4b19 ldr r3, [pc, #100] ; (801c51c ) + 801c4b6: f640 0294 movw r2, #2196 ; 0x894 + 801c4ba: 491c ldr r1, [pc, #112] ; (801c52c ) + 801c4bc: 4819 ldr r0, [pc, #100] ; (801c524 ) + 801c4be: f018 f949 bl 8034754 + LWIP_ASSERT("ooseq segments leaking", pcb->ooseq == NULL); + 801c4c2: 6f63 ldr r3, [r4, #116] ; 0x74 + 801c4c4: b1f3 cbz r3, 801c504 + 801c4c6: 4b15 ldr r3, [pc, #84] ; (801c51c ) + 801c4c8: f640 0296 movw r2, #2198 ; 0x896 + 801c4cc: 4918 ldr r1, [pc, #96] ; (801c530 ) + 801c4ce: 4815 ldr r0, [pc, #84] ; (801c524 ) + 801c4d0: f018 f940 bl 8034754 + 801c4d4: e016 b.n 801c504 + 801c4d6: 4613 mov r3, r2 + TCP_RMV(pcblist, pcb); + 801c4d8: 2b00 cmp r3, #0 + 801c4da: d0df beq.n 801c49c + 801c4dc: 68da ldr r2, [r3, #12] + 801c4de: 42a2 cmp r2, r4 + 801c4e0: d1f9 bne.n 801c4d6 + 801c4e2: 68e2 ldr r2, [r4, #12] + 801c4e4: 60da str r2, [r3, #12] + 801c4e6: e7d9 b.n 801c49c + if ((pcb->state != TIME_WAIT) && + 801c4e8: 2b01 cmp r3, #1 + 801c4ea: d00b beq.n 801c504 + (pcb->flags & TF_ACK_DELAY)) { + 801c4ec: 8b63 ldrh r3, [r4, #26] + (pcb->state != LISTEN) && + 801c4ee: 07da lsls r2, r3, #31 + 801c4f0: d5dc bpl.n 801c4ac + tcp_ack_now(pcb); + 801c4f2: f043 0302 orr.w r3, r3, #2 + tcp_output(pcb); + 801c4f6: 4620 mov r0, r4 + tcp_ack_now(pcb); + 801c4f8: 8363 strh r3, [r4, #26] + tcp_output(pcb); + 801c4fa: f002 fc29 bl 801ed50 + if (pcb->state != LISTEN) { + 801c4fe: 7d23 ldrb r3, [r4, #20] + 801c500: 2b01 cmp r3, #1 + 801c502: d1d3 bne.n 801c4ac + pcb->state = CLOSED; + 801c504: 2300 movs r3, #0 + 801c506: 7523 strb r3, [r4, #20] + pcb->local_port = 0; + 801c508: 82e3 strh r3, [r4, #22] +} + 801c50a: bd38 pop {r3, r4, r5, pc} + LWIP_ASSERT("unsent segments leaking", pcb->unsent == NULL); + 801c50c: 4b03 ldr r3, [pc, #12] ; (801c51c ) + 801c50e: f640 0293 movw r2, #2195 ; 0x893 + 801c512: 4908 ldr r1, [pc, #32] ; (801c534 ) + 801c514: 4803 ldr r0, [pc, #12] ; (801c524 ) + 801c516: f018 f91d bl 8034754 + 801c51a: e7c9 b.n 801c4b0 + 801c51c: 0803b02d .word 0x0803b02d + 801c520: 0803b1bc .word 0x0803b1bc + 801c524: 08035999 .word 0x08035999 + 801c528: 0803b1d8 .word 0x0803b1d8 + 801c52c: 0803b210 .word 0x0803b210 + 801c530: 0803b229 .word 0x0803b229 + 801c534: 0803b1f8 .word 0x0803b1f8 + +0801c538 : +{ + 801c538: e92d 47ff stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, lr} + 801c53c: 460e mov r6, r1 + LWIP_ERROR("tcp_abandon: invalid pcb", pcb != NULL, return); + 801c53e: 4604 mov r4, r0 + 801c540: b948 cbnz r0, 801c556 + 801c542: 4b36 ldr r3, [pc, #216] ; (801c61c ) + 801c544: f240 223d movw r2, #573 ; 0x23d + 801c548: 4935 ldr r1, [pc, #212] ; (801c620 ) + 801c54a: 4836 ldr r0, [pc, #216] ; (801c624 ) +} + 801c54c: b004 add sp, #16 + 801c54e: e8bd 47f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, lr} + LWIP_ERROR("tcp_abandon: invalid pcb", pcb != NULL, return); + 801c552: f018 b8ff b.w 8034754 + LWIP_ASSERT("don't call tcp_abort/tcp_abandon for listen-pcbs", + 801c556: 7d03 ldrb r3, [r0, #20] + 801c558: 2b01 cmp r3, #1 + 801c55a: d106 bne.n 801c56a + 801c55c: 4b2f ldr r3, [pc, #188] ; (801c61c ) + 801c55e: f44f 7210 mov.w r2, #576 ; 0x240 + 801c562: 4931 ldr r1, [pc, #196] ; (801c628 ) + 801c564: 482f ldr r0, [pc, #188] ; (801c624 ) + 801c566: f018 f8f5 bl 8034754 + if (pcb->state == TIME_WAIT) { + 801c56a: 7d23 ldrb r3, [r4, #20] + 801c56c: 2b0a cmp r3, #10 + 801c56e: d109 bne.n 801c584 + tcp_pcb_remove(&tcp_tw_pcbs, pcb); + 801c570: 4621 mov r1, r4 + 801c572: 482e ldr r0, [pc, #184] ; (801c62c ) + 801c574: f7ff ff7a bl 801c46c + tcp_free(pcb); + 801c578: 4620 mov r0, r4 +} + 801c57a: b004 add sp, #16 + 801c57c: e8bd 47f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, lr} + tcp_free(pcb); + 801c580: f7ff be3a b.w 801c1f8 + seqno = pcb->snd_nxt; + 801c584: f8d4 9050 ldr.w r9, [r4, #80] ; 0x50 + ackno = pcb->rcv_nxt; + 801c588: f8d4 a024 ldr.w sl, [r4, #36] ; 0x24 + errf = pcb->errf; + 801c58c: f8d4 7090 ldr.w r7, [r4, #144] ; 0x90 + errf_arg = pcb->callback_arg; + 801c590: f8d4 8010 ldr.w r8, [r4, #16] + if (pcb->local_port != 0) { + 801c594: 8ae5 ldrh r5, [r4, #22] + if (pcb->state == CLOSED) { + 801c596: b99b cbnz r3, 801c5c0 + if (pcb->local_port != 0) { + 801c598: b13d cbz r5, 801c5aa + TCP_RMV(&tcp_bound_pcbs, pcb); + 801c59a: 4a25 ldr r2, [pc, #148] ; (801c630 ) + 801c59c: 6813 ldr r3, [r2, #0] + 801c59e: 42a3 cmp r3, r4 + 801c5a0: d106 bne.n 801c5b0 + 801c5a2: 68e3 ldr r3, [r4, #12] + 801c5a4: 6013 str r3, [r2, #0] + 801c5a6: 2500 movs r5, #0 + 801c5a8: 60e5 str r5, [r4, #12] + int send_rst = 0; + 801c5aa: 462e mov r6, r5 + 801c5ac: e00f b.n 801c5ce + 801c5ae: 4613 mov r3, r2 + TCP_RMV(&tcp_bound_pcbs, pcb); + 801c5b0: 2b00 cmp r3, #0 + 801c5b2: d0f8 beq.n 801c5a6 + 801c5b4: 68da ldr r2, [r3, #12] + 801c5b6: 42a2 cmp r2, r4 + 801c5b8: d1f9 bne.n 801c5ae + 801c5ba: 68e2 ldr r2, [r4, #12] + 801c5bc: 60da str r2, [r3, #12] + 801c5be: e7f2 b.n 801c5a6 + TCP_PCB_REMOVE_ACTIVE(pcb); + 801c5c0: 4621 mov r1, r4 + 801c5c2: 481c ldr r0, [pc, #112] ; (801c634 ) + 801c5c4: f7ff ff52 bl 801c46c + 801c5c8: 4b1b ldr r3, [pc, #108] ; (801c638 ) + 801c5ca: 2201 movs r2, #1 + 801c5cc: 701a strb r2, [r3, #0] + if (pcb->unacked != NULL) { + 801c5ce: 6f20 ldr r0, [r4, #112] ; 0x70 + 801c5d0: b108 cbz r0, 801c5d6 + tcp_segs_free(pcb->unacked); + 801c5d2: f7ff feab bl 801c32c + if (pcb->unsent != NULL) { + 801c5d6: 6ee0 ldr r0, [r4, #108] ; 0x6c + 801c5d8: b108 cbz r0, 801c5de + tcp_segs_free(pcb->unsent); + 801c5da: f7ff fea7 bl 801c32c + if (pcb->ooseq != NULL) { + 801c5de: 6f60 ldr r0, [r4, #116] ; 0x74 + 801c5e0: b108 cbz r0, 801c5e6 + tcp_segs_free(pcb->ooseq); + 801c5e2: f7ff fea3 bl 801c32c + if (send_rst) { + 801c5e6: b156 cbz r6, 801c5fe + tcp_rst(pcb, seqno, ackno, &pcb->local_ip, &pcb->remote_ip, local_port, pcb->remote_port); + 801c5e8: 8b23 ldrh r3, [r4, #24] + 801c5ea: 4652 mov r2, sl + 801c5ec: 4649 mov r1, r9 + 801c5ee: 4620 mov r0, r4 + 801c5f0: e9cd 5301 strd r5, r3, [sp, #4] + 801c5f4: 1d23 adds r3, r4, #4 + 801c5f6: 9300 str r3, [sp, #0] + 801c5f8: 4623 mov r3, r4 + 801c5fa: f002 fb31 bl 801ec60 + tcp_free(pcb); + 801c5fe: 4620 mov r0, r4 + 801c600: f7ff fdfa bl 801c1f8 + TCP_EVENT_ERR(last_state, errf, errf_arg, ERR_ABRT); + 801c604: b13f cbz r7, 801c616 + 801c606: f06f 010c mvn.w r1, #12 + 801c60a: 4640 mov r0, r8 + 801c60c: 463b mov r3, r7 +} + 801c60e: b004 add sp, #16 + 801c610: e8bd 47f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, lr} + TCP_EVENT_ERR(last_state, errf, errf_arg, ERR_ABRT); + 801c614: 4718 bx r3 +} + 801c616: b004 add sp, #16 + 801c618: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + 801c61c: 0803b02d .word 0x0803b02d + 801c620: 0803b240 .word 0x0803b240 + 801c624: 08035999 .word 0x08035999 + 801c628: 0803b259 .word 0x0803b259 + 801c62c: 2001e6c4 .word 0x2001e6c4 + 801c630: 2001e6b4 .word 0x2001e6b4 + 801c634: 2001e6ac .word 0x2001e6ac + 801c638: 2001e6b0 .word 0x2001e6b0 + +0801c63c : + tcp_abandon(pcb, 1); + 801c63c: 2101 movs r1, #1 + 801c63e: f7ff bf7b b.w 801c538 + ... + +0801c644 : +{ + 801c644: b570 push {r4, r5, r6, lr} + 801c646: 460c mov r4, r1 + LWIP_ASSERT("tcp_netif_ip_addr_changed_pcblist: invalid old_addr", old_addr != NULL); + 801c648: 4605 mov r5, r0 + 801c64a: b930 cbnz r0, 801c65a + 801c64c: 4b09 ldr r3, [pc, #36] ; (801c674 ) + 801c64e: f44f 6210 mov.w r2, #2304 ; 0x900 + 801c652: 4909 ldr r1, [pc, #36] ; (801c678 ) + 801c654: 4809 ldr r0, [pc, #36] ; (801c67c ) + 801c656: f018 f87d bl 8034754 + while (pcb != NULL) { + 801c65a: b904 cbnz r4, 801c65e +} + 801c65c: bd70 pop {r4, r5, r6, pc} + if (ip_addr_cmp(&pcb->local_ip, old_addr) + 801c65e: 6822 ldr r2, [r4, #0] + 801c660: 682b ldr r3, [r5, #0] + struct tcp_pcb *next = pcb->next; + 801c662: 68e6 ldr r6, [r4, #12] + if (ip_addr_cmp(&pcb->local_ip, old_addr) + 801c664: 429a cmp r2, r3 + 801c666: d102 bne.n 801c66e + tcp_abort(pcb); + 801c668: 4620 mov r0, r4 + 801c66a: f7ff ffe7 bl 801c63c +{ + 801c66e: 4634 mov r4, r6 + 801c670: e7f3 b.n 801c65a + 801c672: bf00 nop + 801c674: 0803b02d .word 0x0803b02d + 801c678: 0803b28a .word 0x0803b28a + 801c67c: 08035999 .word 0x08035999 + +0801c680 : +{ + 801c680: b538 push {r3, r4, r5, lr} + 801c682: 460d mov r5, r1 + if (!ip_addr_isany(old_addr)) { + 801c684: 4604 mov r4, r0 + 801c686: b180 cbz r0, 801c6aa + 801c688: 6803 ldr r3, [r0, #0] + 801c68a: b173 cbz r3, 801c6aa + tcp_netif_ip_addr_changed_pcblist(old_addr, tcp_active_pcbs); + 801c68c: 4b0b ldr r3, [pc, #44] ; (801c6bc ) + 801c68e: 6819 ldr r1, [r3, #0] + 801c690: f7ff ffd8 bl 801c644 + tcp_netif_ip_addr_changed_pcblist(old_addr, tcp_bound_pcbs); + 801c694: 4b0a ldr r3, [pc, #40] ; (801c6c0 ) + 801c696: 4620 mov r0, r4 + 801c698: 6819 ldr r1, [r3, #0] + 801c69a: f7ff ffd3 bl 801c644 + if (!ip_addr_isany(new_addr)) { + 801c69e: b125 cbz r5, 801c6aa + 801c6a0: 682b ldr r3, [r5, #0] + 801c6a2: b113 cbz r3, 801c6aa + for (lpcb = tcp_listen_pcbs.listen_pcbs; lpcb != NULL; lpcb = lpcb->next) { + 801c6a4: 4b07 ldr r3, [pc, #28] ; (801c6c4 ) + 801c6a6: 681b ldr r3, [r3, #0] + 801c6a8: b903 cbnz r3, 801c6ac +} + 801c6aa: bd38 pop {r3, r4, r5, pc} + if (ip_addr_cmp(&lpcb->local_ip, old_addr)) { + 801c6ac: 6819 ldr r1, [r3, #0] + 801c6ae: 6822 ldr r2, [r4, #0] + 801c6b0: 4291 cmp r1, r2 + ip_addr_copy(lpcb->local_ip, *new_addr); + 801c6b2: bf04 itt eq + 801c6b4: 682a ldreq r2, [r5, #0] + 801c6b6: 601a streq r2, [r3, #0] + for (lpcb = tcp_listen_pcbs.listen_pcbs; lpcb != NULL; lpcb = lpcb->next) { + 801c6b8: 68db ldr r3, [r3, #12] + 801c6ba: e7f5 b.n 801c6a8 + 801c6bc: 2001e6ac .word 0x2001e6ac + 801c6c0: 2001e6b4 .word 0x2001e6b4 + 801c6c4: 2001e6b8 .word 0x2001e6b8 + +0801c6c8 : + for (pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) { + 801c6c8: 4b0c ldr r3, [pc, #48] ; (801c6fc ) +{ + 801c6ca: b430 push {r4, r5} + for (pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) { + 801c6cc: 6819 ldr r1, [r3, #0] + inactivity = 0; + 801c6ce: 2400 movs r4, #0 + if ((u32_t)(tcp_ticks - pcb->tmr) >= inactivity) { + 801c6d0: 4b0b ldr r3, [pc, #44] ; (801c700 ) + inactive = NULL; + 801c6d2: 4622 mov r2, r4 + if ((u32_t)(tcp_ticks - pcb->tmr) >= inactivity) { + 801c6d4: 681d ldr r5, [r3, #0] + for (pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) { + 801c6d6: b921 cbnz r1, 801c6e2 + if (inactive != NULL) { + 801c6d8: b172 cbz r2, 801c6f8 + tcp_abandon(inactive, 0); + 801c6da: 4610 mov r0, r2 +} + 801c6dc: bc30 pop {r4, r5} + tcp_abandon(inactive, 0); + 801c6de: f7ff bf2b b.w 801c538 + if (pcb->state == state) { + 801c6e2: 7d0b ldrb r3, [r1, #20] + 801c6e4: 4283 cmp r3, r0 + 801c6e6: d105 bne.n 801c6f4 + if ((u32_t)(tcp_ticks - pcb->tmr) >= inactivity) { + 801c6e8: 6a0b ldr r3, [r1, #32] + 801c6ea: 1aeb subs r3, r5, r3 + 801c6ec: 42a3 cmp r3, r4 + 801c6ee: bf24 itt cs + 801c6f0: 461c movcs r4, r3 + 801c6f2: 460a movcs r2, r1 + for (pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) { + 801c6f4: 68c9 ldr r1, [r1, #12] + 801c6f6: e7ee b.n 801c6d6 +} + 801c6f8: bc30 pop {r4, r5} + 801c6fa: 4770 bx lr + 801c6fc: 2001e6ac .word 0x2001e6ac + 801c700: 2001e6bc .word 0x2001e6bc + +0801c704 : +{ + 801c704: b5f8 push {r3, r4, r5, r6, r7, lr} + 801c706: 4604 mov r4, r0 + pcb = (struct tcp_pcb *)memp_malloc(MEMP_TCP_PCB); + 801c708: 2001 movs r0, #1 + 801c70a: f7fe ff69 bl 801b5e0 + if (pcb == NULL) { + 801c70e: 4603 mov r3, r0 + 801c710: 2800 cmp r0, #0 + 801c712: d136 bne.n 801c782 + struct tcp_pcb *pcb = tcp_active_pcbs; + 801c714: 4e3f ldr r6, [pc, #252] ; (801c814 ) + 801c716: 6830 ldr r0, [r6, #0] + while (pcb != NULL) { + 801c718: 2800 cmp r0, #0 + 801c71a: d157 bne.n 801c7cc + for (pcb = tcp_tw_pcbs; pcb != NULL; pcb = pcb->next) { + 801c71c: 4b3e ldr r3, [pc, #248] ; (801c818 ) + inactivity = 0; + 801c71e: 4601 mov r1, r0 + if ((u32_t)(tcp_ticks - pcb->tmr) >= inactivity) { + 801c720: 4d3e ldr r5, [pc, #248] ; (801c81c ) + for (pcb = tcp_tw_pcbs; pcb != NULL; pcb = pcb->next) { + 801c722: 681b ldr r3, [r3, #0] + if ((u32_t)(tcp_ticks - pcb->tmr) >= inactivity) { + 801c724: 682f ldr r7, [r5, #0] + for (pcb = tcp_tw_pcbs; pcb != NULL; pcb = pcb->next) { + 801c726: 2b00 cmp r3, #0 + 801c728: d15b bne.n 801c7e2 + if (inactive != NULL) { + 801c72a: b108 cbz r0, 801c730 + tcp_abort(inactive); + 801c72c: f7ff ff86 bl 801c63c + pcb = (struct tcp_pcb *)memp_malloc(MEMP_TCP_PCB); + 801c730: 2001 movs r0, #1 + 801c732: f7fe ff55 bl 801b5e0 + if (pcb == NULL) { + 801c736: 4603 mov r3, r0 + 801c738: bb18 cbnz r0, 801c782 + tcp_kill_state(LAST_ACK); + 801c73a: 2009 movs r0, #9 + 801c73c: f7ff ffc4 bl 801c6c8 + pcb = (struct tcp_pcb *)memp_malloc(MEMP_TCP_PCB); + 801c740: 2001 movs r0, #1 + 801c742: f7fe ff4d bl 801b5e0 + if (pcb == NULL) { + 801c746: 4603 mov r3, r0 + 801c748: b9d8 cbnz r0, 801c782 + tcp_kill_state(CLOSING); + 801c74a: 2008 movs r0, #8 + 801c74c: f7ff ffbc bl 801c6c8 + pcb = (struct tcp_pcb *)memp_malloc(MEMP_TCP_PCB); + 801c750: 2001 movs r0, #1 + 801c752: f7fe ff45 bl 801b5e0 + if (pcb == NULL) { + 801c756: 4603 mov r3, r0 + 801c758: b998 cbnz r0, 801c782 + mprio = LWIP_MIN(TCP_PRIO_MAX, prio); + 801c75a: 0622 lsls r2, r4, #24 + 801c75c: d449 bmi.n 801c7f2 + if (mprio == 0) { + 801c75e: b15c cbz r4, 801c778 + 801c760: 4621 mov r1, r4 + mprio--; + 801c762: 3901 subs r1, #1 + for (pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) { + 801c764: 6832 ldr r2, [r6, #0] + inactivity = 0; + 801c766: 2000 movs r0, #0 + ((pcb->prio == mprio) && ((u32_t)(tcp_ticks - pcb->tmr) >= inactivity))) { + 801c768: 682e ldr r6, [r5, #0] + mprio--; + 801c76a: b2c9 uxtb r1, r1 + for (pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) { + 801c76c: 2a00 cmp r2, #0 + 801c76e: d142 bne.n 801c7f6 + if (inactive != NULL) { + 801c770: b113 cbz r3, 801c778 + tcp_abort(inactive); + 801c772: 4618 mov r0, r3 + 801c774: f7ff ff62 bl 801c63c + pcb = (struct tcp_pcb *)memp_malloc(MEMP_TCP_PCB); + 801c778: 2001 movs r0, #1 + 801c77a: f7fe ff31 bl 801b5e0 + if (pcb != NULL) { + 801c77e: 4603 mov r3, r0 + 801c780: b310 cbz r0, 801c7c8 + memset(pcb, 0, sizeof(struct tcp_pcb)); + 801c782: 229c movs r2, #156 ; 0x9c + 801c784: 4618 mov r0, r3 + 801c786: 2100 movs r1, #0 + 801c788: f018 f918 bl 80349bc + pcb->snd_buf = TCP_SND_BUF; + 801c78c: f44f 6286 mov.w r2, #1072 ; 0x430 + memset(pcb, 0, sizeof(struct tcp_pcb)); + 801c790: 4603 mov r3, r0 + pcb->prio = prio; + 801c792: 7544 strb r4, [r0, #21] + pcb->snd_buf = TCP_SND_BUF; + 801c794: f8a0 2064 strh.w r2, [r0, #100] ; 0x64 + pcb->rcv_wnd = pcb->rcv_ann_wnd = TCPWND_MIN16(TCP_WND); + 801c798: 4a21 ldr r2, [pc, #132] ; (801c820 ) + 801c79a: 6282 str r2, [r0, #40] ; 0x28 + pcb->ttl = TCP_TTL; + 801c79c: 22ff movs r2, #255 ; 0xff + 801c79e: 72c2 strb r2, [r0, #11] + pcb->rto = 3000 / TCP_SLOW_INTERVAL; + 801c7a0: 2206 movs r2, #6 + 801c7a2: f8a0 2040 strh.w r2, [r0, #64] ; 0x40 + pcb->sv = 3000 / TCP_SLOW_INTERVAL; + 801c7a6: 87c2 strh r2, [r0, #62] ; 0x3e + pcb->rtime = -1; + 801c7a8: 4a1e ldr r2, [pc, #120] ; (801c824 ) + 801c7aa: 6302 str r2, [r0, #48] ; 0x30 + pcb->tmr = tcp_ticks; + 801c7ac: 4a1b ldr r2, [pc, #108] ; (801c81c ) + 801c7ae: 6812 ldr r2, [r2, #0] + 801c7b0: 6202 str r2, [r0, #32] + pcb->last_timer = tcp_timer_ctr; + 801c7b2: 4a1d ldr r2, [pc, #116] ; (801c828 ) + 801c7b4: 7812 ldrb r2, [r2, #0] + 801c7b6: 7782 strb r2, [r0, #30] + pcb->cwnd = 1; + 801c7b8: 4a1c ldr r2, [pc, #112] ; (801c82c ) + 801c7ba: 6482 str r2, [r0, #72] ; 0x48 + pcb->recv = tcp_recv_null; + 801c7bc: 4a1c ldr r2, [pc, #112] ; (801c830 ) + 801c7be: f8c0 2084 str.w r2, [r0, #132] ; 0x84 + pcb->keep_idle = TCP_KEEPIDLE_DEFAULT; + 801c7c2: 4a1c ldr r2, [pc, #112] ; (801c834 ) + 801c7c4: f8c0 2094 str.w r2, [r0, #148] ; 0x94 +} + 801c7c8: 4618 mov r0, r3 + 801c7ca: bdf8 pop {r3, r4, r5, r6, r7, pc} + if (pcb->flags & TF_CLOSEPEND) { + 801c7cc: 8b43 ldrh r3, [r0, #26] + struct tcp_pcb *next = pcb->next; + 801c7ce: 68c5 ldr r5, [r0, #12] + if (pcb->flags & TF_CLOSEPEND) { + 801c7d0: 0719 lsls r1, r3, #28 + 801c7d2: d504 bpl.n 801c7de + tcp_clear_flags(pcb, TF_CLOSEPEND); + 801c7d4: f023 0308 bic.w r3, r3, #8 + 801c7d8: 8343 strh r3, [r0, #26] + tcp_close_shutdown_fin(pcb); + 801c7da: f7ff fcd1 bl 801c180 +{ + 801c7de: 4628 mov r0, r5 + 801c7e0: e79a b.n 801c718 + if ((u32_t)(tcp_ticks - pcb->tmr) >= inactivity) { + 801c7e2: 6a1a ldr r2, [r3, #32] + 801c7e4: 1aba subs r2, r7, r2 + 801c7e6: 428a cmp r2, r1 + 801c7e8: bf24 itt cs + 801c7ea: 4618 movcs r0, r3 + 801c7ec: 4611 movcs r1, r2 + for (pcb = tcp_tw_pcbs; pcb != NULL; pcb = pcb->next) { + 801c7ee: 68db ldr r3, [r3, #12] + 801c7f0: e799 b.n 801c726 + mprio = LWIP_MIN(TCP_PRIO_MAX, prio); + 801c7f2: 217f movs r1, #127 ; 0x7f + 801c7f4: e7b5 b.n 801c762 + if ((pcb->prio < mprio) || + 801c7f6: 7d57 ldrb r7, [r2, #21] + 801c7f8: 428f cmp r7, r1 + 801c7fa: d304 bcc.n 801c806 + 801c7fc: d107 bne.n 801c80e + ((pcb->prio == mprio) && ((u32_t)(tcp_ticks - pcb->tmr) >= inactivity))) { + 801c7fe: 6a15 ldr r5, [r2, #32] + 801c800: 1b75 subs r5, r6, r5 + 801c802: 4285 cmp r5, r0 + 801c804: d303 bcc.n 801c80e + inactivity = tcp_ticks - pcb->tmr; + 801c806: 6a10 ldr r0, [r2, #32] + if ((pcb->prio < mprio) || + 801c808: 4639 mov r1, r7 + inactivity = tcp_ticks - pcb->tmr; + 801c80a: 4613 mov r3, r2 + 801c80c: 1a30 subs r0, r6, r0 + for (pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) { + 801c80e: 68d2 ldr r2, [r2, #12] + 801c810: e7ac b.n 801c76c + 801c812: bf00 nop + 801c814: 2001e6ac .word 0x2001e6ac + 801c818: 2001e6c4 .word 0x2001e6c4 + 801c81c: 2001e6bc .word 0x2001e6bc + 801c820: 08600860 .word 0x08600860 + 801c824: 0218ffff .word 0x0218ffff + 801c828: 2001e6c1 .word 0x2001e6c1 + 801c82c: 04300001 .word 0x04300001 + 801c830: 0801c9d9 .word 0x0801c9d9 + 801c834: 006ddd00 .word 0x006ddd00 + +0801c838 : +{ + 801c838: b530 push {r4, r5, lr} + 801c83a: 460d mov r5, r1 + 801c83c: b085 sub sp, #20 + LWIP_ASSERT("tcp_close_shutdown: invalid pcb", pcb != NULL); + 801c83e: 4604 mov r4, r0 + 801c840: b930 cbnz r0, 801c850 + 801c842: 4b4b ldr r3, [pc, #300] ; (801c970 ) + 801c844: f44f 72af mov.w r2, #350 ; 0x15e + 801c848: 494a ldr r1, [pc, #296] ; (801c974 ) + 801c84a: 484b ldr r0, [pc, #300] ; (801c978 ) + 801c84c: f017 ff82 bl 8034754 + if (rst_on_unacked_data && ((pcb->state == ESTABLISHED) || (pcb->state == CLOSE_WAIT))) { + 801c850: 7d23 ldrb r3, [r4, #20] + 801c852: 2d00 cmp r5, #0 + 801c854: d03f beq.n 801c8d6 + 801c856: 2b04 cmp r3, #4 + 801c858: d001 beq.n 801c85e + 801c85a: 2b07 cmp r3, #7 + 801c85c: d13b bne.n 801c8d6 + if ((pcb->refused_data != NULL) || (pcb->rcv_wnd != TCP_WND_MAX(pcb))) { + 801c85e: 6fa2 ldr r2, [r4, #120] ; 0x78 + 801c860: b91a cbnz r2, 801c86a + 801c862: 8d22 ldrh r2, [r4, #40] ; 0x28 + 801c864: f5b2 6f06 cmp.w r2, #2144 ; 0x860 + 801c868: d035 beq.n 801c8d6 + LWIP_ASSERT("pcb->flags & TF_RXCLOSED", pcb->flags & TF_RXCLOSED); + 801c86a: 8b63 ldrh r3, [r4, #26] + 801c86c: 06db lsls r3, r3, #27 + 801c86e: d406 bmi.n 801c87e + 801c870: 4b3f ldr r3, [pc, #252] ; (801c970 ) + 801c872: f44f 72b2 mov.w r2, #356 ; 0x164 + 801c876: 4941 ldr r1, [pc, #260] ; (801c97c ) + 801c878: 483f ldr r0, [pc, #252] ; (801c978 ) + 801c87a: f017 ff6b bl 8034754 + tcp_rst(pcb, pcb->snd_nxt, pcb->rcv_nxt, &pcb->local_ip, &pcb->remote_ip, + 801c87e: 8b23 ldrh r3, [r4, #24] + 801c880: 4620 mov r0, r4 + 801c882: 9302 str r3, [sp, #8] + 801c884: 8ae3 ldrh r3, [r4, #22] + 801c886: 9301 str r3, [sp, #4] + 801c888: 1d23 adds r3, r4, #4 + 801c88a: 9300 str r3, [sp, #0] + 801c88c: 4623 mov r3, r4 + 801c88e: 6a62 ldr r2, [r4, #36] ; 0x24 + 801c890: 6d21 ldr r1, [r4, #80] ; 0x50 + 801c892: f002 f9e5 bl 801ec60 + tcp_pcb_purge(pcb); + 801c896: 4620 mov r0, r4 + 801c898: f7ff fdb6 bl 801c408 + TCP_RMV_ACTIVE(pcb); + 801c89c: 4a38 ldr r2, [pc, #224] ; (801c980 ) + 801c89e: 6813 ldr r3, [r2, #0] + 801c8a0: 42a3 cmp r3, r4 + 801c8a2: d110 bne.n 801c8c6 + 801c8a4: 68e3 ldr r3, [r4, #12] + 801c8a6: 6013 str r3, [r2, #0] + 801c8a8: 2300 movs r3, #0 + 801c8aa: 2201 movs r2, #1 + 801c8ac: 60e3 str r3, [r4, #12] + 801c8ae: 4b35 ldr r3, [pc, #212] ; (801c984 ) + 801c8b0: 701a strb r2, [r3, #0] + if (tcp_input_pcb == pcb) { + 801c8b2: 4b35 ldr r3, [pc, #212] ; (801c988 ) + 801c8b4: 681b ldr r3, [r3, #0] + 801c8b6: 42a3 cmp r3, r4 + 801c8b8: d11d bne.n 801c8f6 + tcp_trigger_input_pcb_close(); + 801c8ba: f001 fe49 bl 801e550 +} + 801c8be: 2000 movs r0, #0 + 801c8c0: b005 add sp, #20 + 801c8c2: bd30 pop {r4, r5, pc} + 801c8c4: 4613 mov r3, r2 + TCP_RMV_ACTIVE(pcb); + 801c8c6: 2b00 cmp r3, #0 + 801c8c8: d0ee beq.n 801c8a8 + 801c8ca: 68da ldr r2, [r3, #12] + 801c8cc: 42a2 cmp r2, r4 + 801c8ce: d1f9 bne.n 801c8c4 + 801c8d0: 68e2 ldr r2, [r4, #12] + 801c8d2: 60da str r2, [r3, #12] + 801c8d4: e7e8 b.n 801c8a8 + switch (pcb->state) { + 801c8d6: 2b01 cmp r3, #1 + 801c8d8: d01a beq.n 801c910 + 801c8da: 2b02 cmp r3, #2 + 801c8dc: d039 beq.n 801c952 + 801c8de: 2b00 cmp r3, #0 + 801c8e0: d13f bne.n 801c962 + if (pcb->local_port != 0) { + 801c8e2: 8ae3 ldrh r3, [r4, #22] + 801c8e4: b13b cbz r3, 801c8f6 + TCP_RMV(&tcp_bound_pcbs, pcb); + 801c8e6: 4a29 ldr r2, [pc, #164] ; (801c98c ) + 801c8e8: 6813 ldr r3, [r2, #0] + 801c8ea: 42a3 cmp r3, r4 + 801c8ec: d108 bne.n 801c900 + 801c8ee: 68e3 ldr r3, [r4, #12] + 801c8f0: 6013 str r3, [r2, #0] + 801c8f2: 2300 movs r3, #0 + 801c8f4: 60e3 str r3, [r4, #12] + tcp_free(pcb); + 801c8f6: 4620 mov r0, r4 + 801c8f8: f7ff fc7e bl 801c1f8 + break; + 801c8fc: e7df b.n 801c8be + 801c8fe: 4613 mov r3, r2 + TCP_RMV(&tcp_bound_pcbs, pcb); + 801c900: 2b00 cmp r3, #0 + 801c902: d0f6 beq.n 801c8f2 + 801c904: 68da ldr r2, [r3, #12] + 801c906: 42a2 cmp r2, r4 + 801c908: d1f9 bne.n 801c8fe + 801c90a: 68e2 ldr r2, [r4, #12] + 801c90c: 60da str r2, [r3, #12] + 801c90e: e7f0 b.n 801c8f2 + 801c910: 491f ldr r1, [pc, #124] ; (801c990 ) + pcb->listener = NULL; + 801c912: 2000 movs r0, #0 + tcp_remove_listener(*tcp_pcb_lists[i], (struct tcp_pcb_listen *)pcb); + 801c914: f851 2f04 ldr.w r2, [r1, #4]! + 801c918: 6812 ldr r2, [r2, #0] + for (pcb = list; pcb != NULL; pcb = pcb->next) { + 801c91a: b9a2 cbnz r2, 801c946 + for (i = 1; i < LWIP_ARRAYSIZE(tcp_pcb_lists); i++) { + 801c91c: 3301 adds r3, #1 + 801c91e: 2b04 cmp r3, #4 + 801c920: d1f8 bne.n 801c914 + tcp_pcb_remove(&tcp_listen_pcbs.pcbs, pcb); + 801c922: 4621 mov r1, r4 + 801c924: 481b ldr r0, [pc, #108] ; (801c994 ) + 801c926: f7ff fda1 bl 801c46c + LWIP_ASSERT("tcp_free_listen: !LISTEN", pcb->state != LISTEN); + 801c92a: 7d23 ldrb r3, [r4, #20] + 801c92c: 2b01 cmp r3, #1 + 801c92e: d105 bne.n 801c93c + 801c930: 4b0f ldr r3, [pc, #60] ; (801c970 ) + 801c932: 22df movs r2, #223 ; 0xdf + 801c934: 4918 ldr r1, [pc, #96] ; (801c998 ) + 801c936: 4810 ldr r0, [pc, #64] ; (801c978 ) + 801c938: f017 ff0c bl 8034754 + memp_free(MEMP_TCP_PCB_LISTEN, pcb); + 801c93c: 4621 mov r1, r4 + 801c93e: 2002 movs r0, #2 + 801c940: f7fe fe7e bl 801b640 +} + 801c944: e7bb b.n 801c8be + if (pcb->listener == lpcb) { + 801c946: 6fd5 ldr r5, [r2, #124] ; 0x7c + 801c948: 42ac cmp r4, r5 + pcb->listener = NULL; + 801c94a: bf08 it eq + 801c94c: 67d0 streq r0, [r2, #124] ; 0x7c + for (pcb = list; pcb != NULL; pcb = pcb->next) { + 801c94e: 68d2 ldr r2, [r2, #12] + 801c950: e7e3 b.n 801c91a + TCP_PCB_REMOVE_ACTIVE(pcb); + 801c952: 4621 mov r1, r4 + 801c954: 480a ldr r0, [pc, #40] ; (801c980 ) + 801c956: f7ff fd89 bl 801c46c + 801c95a: 4b0a ldr r3, [pc, #40] ; (801c984 ) + 801c95c: 2201 movs r2, #1 + 801c95e: 701a strb r2, [r3, #0] + 801c960: e7c9 b.n 801c8f6 + return tcp_close_shutdown_fin(pcb); + 801c962: 4620 mov r0, r4 +} + 801c964: b005 add sp, #20 + 801c966: e8bd 4030 ldmia.w sp!, {r4, r5, lr} + return tcp_close_shutdown_fin(pcb); + 801c96a: f7ff bc09 b.w 801c180 + 801c96e: bf00 nop + 801c970: 0803b02d .word 0x0803b02d + 801c974: 0803b2be .word 0x0803b2be + 801c978: 08035999 .word 0x08035999 + 801c97c: 0803b2de .word 0x0803b2de + 801c980: 2001e6ac .word 0x2001e6ac + 801c984: 2001e6b0 .word 0x2001e6b0 + 801c988: 2001e6f0 .word 0x2001e6f0 + 801c98c: 2001e6b4 .word 0x2001e6b4 + 801c990: 0803b530 .word 0x0803b530 + 801c994: 2001e6b8 .word 0x2001e6b8 + 801c998: 0803b2f7 .word 0x0803b2f7 + +0801c99c : +{ + 801c99c: b508 push {r3, lr} + LWIP_ERROR("tcp_close: invalid pcb", pcb != NULL, return ERR_ARG); + 801c99e: b158 cbz r0, 801c9b8 + if (pcb->state != LISTEN) { + 801c9a0: 7d03 ldrb r3, [r0, #20] + return tcp_close_shutdown(pcb, 1); + 801c9a2: 2101 movs r1, #1 + if (pcb->state != LISTEN) { + 801c9a4: 2b01 cmp r3, #1 + tcp_set_flags(pcb, TF_RXCLOSED); + 801c9a6: bf1e ittt ne + 801c9a8: 8b43 ldrhne r3, [r0, #26] + 801c9aa: f043 0310 orrne.w r3, r3, #16 + 801c9ae: 8343 strhne r3, [r0, #26] +} + 801c9b0: e8bd 4008 ldmia.w sp!, {r3, lr} + return tcp_close_shutdown(pcb, 1); + 801c9b4: f7ff bf40 b.w 801c838 + LWIP_ERROR("tcp_close: invalid pcb", pcb != NULL, return ERR_ARG); + 801c9b8: 4b04 ldr r3, [pc, #16] ; (801c9cc ) + 801c9ba: f44f 72f4 mov.w r2, #488 ; 0x1e8 + 801c9be: 4904 ldr r1, [pc, #16] ; (801c9d0 ) + 801c9c0: 4804 ldr r0, [pc, #16] ; (801c9d4 ) + 801c9c2: f017 fec7 bl 8034754 +} + 801c9c6: f06f 000f mvn.w r0, #15 + 801c9ca: bd08 pop {r3, pc} + 801c9cc: 0803b02d .word 0x0803b02d + 801c9d0: 0803b310 .word 0x0803b310 + 801c9d4: 08035999 .word 0x08035999 + +0801c9d8 : +{ + 801c9d8: b510 push {r4, lr} + LWIP_ERROR("tcp_recv_null: invalid pcb", pcb != NULL, return ERR_ARG); + 801c9da: 4608 mov r0, r1 +{ + 801c9dc: 4614 mov r4, r2 + LWIP_ERROR("tcp_recv_null: invalid pcb", pcb != NULL, return ERR_ARG); + 801c9de: b949 cbnz r1, 801c9f4 + 801c9e0: 4b0c ldr r3, [pc, #48] ; (801ca14 ) + 801c9e2: f44f 62d3 mov.w r2, #1688 ; 0x698 + 801c9e6: 490c ldr r1, [pc, #48] ; (801ca18 ) + 801c9e8: 480c ldr r0, [pc, #48] ; (801ca1c ) + 801c9ea: f017 feb3 bl 8034754 + 801c9ee: f06f 000f mvn.w r0, #15 +} + 801c9f2: bd10 pop {r4, pc} + if (p != NULL) { + 801c9f4: b13a cbz r2, 801ca06 + tcp_recved(pcb, p->tot_len); + 801c9f6: 8911 ldrh r1, [r2, #8] + 801c9f8: f7ff fc4c bl 801c294 + pbuf_free(p); + 801c9fc: 4620 mov r0, r4 + 801c9fe: f7ff f89b bl 801bb38 + return ERR_OK; + 801ca02: 2000 movs r0, #0 + 801ca04: e7f5 b.n 801c9f2 + } else if (err == ERR_OK) { + 801ca06: b91b cbnz r3, 801ca10 +} + 801ca08: e8bd 4010 ldmia.w sp!, {r4, lr} + return tcp_close(pcb); + 801ca0c: f7ff bfc6 b.w 801c99c + return ERR_OK; + 801ca10: 4610 mov r0, r2 + 801ca12: e7ee b.n 801c9f2 + 801ca14: 0803b02d .word 0x0803b02d + 801ca18: 0803b327 .word 0x0803b327 + 801ca1c: 08035999 .word 0x08035999 + +0801ca20 : +{ + 801ca20: b5f8 push {r3, r4, r5, r6, r7, lr} + LWIP_ERROR("tcp_process_refused_data: invalid pcb", pcb != NULL, return ERR_ARG); + 801ca22: 4604 mov r4, r0 + 801ca24: b950 cbnz r0, 801ca3c + 801ca26: f06f 050f mvn.w r5, #15 + 801ca2a: 4b1c ldr r3, [pc, #112] ; (801ca9c ) + 801ca2c: f240 6209 movw r2, #1545 ; 0x609 + 801ca30: 491b ldr r1, [pc, #108] ; (801caa0 ) + 801ca32: 481c ldr r0, [pc, #112] ; (801caa4 ) + 801ca34: f017 fe8e bl 8034754 +} + 801ca38: 4628 mov r0, r5 + 801ca3a: bdf8 pop {r3, r4, r5, r6, r7, pc} + u8_t refused_flags = pcb->refused_data->flags; + 801ca3c: 6f86 ldr r6, [r0, #120] ; 0x78 + pcb->refused_data = NULL; + 801ca3e: 2300 movs r3, #0 + TCP_EVENT_RECV(pcb, refused_data, ERR_OK, err); + 801ca40: f8d0 5084 ldr.w r5, [r0, #132] ; 0x84 + u8_t refused_flags = pcb->refused_data->flags; + 801ca44: 7b77 ldrb r7, [r6, #13] + pcb->refused_data = NULL; + 801ca46: 6783 str r3, [r0, #120] ; 0x78 + TCP_EVENT_RECV(pcb, refused_data, ERR_OK, err); + 801ca48: b1dd cbz r5, 801ca82 + 801ca4a: 4601 mov r1, r0 + 801ca4c: 4632 mov r2, r6 + 801ca4e: 6900 ldr r0, [r0, #16] + 801ca50: 47a8 blx r5 + 801ca52: 4605 mov r5, r0 + if (err == ERR_OK) { + 801ca54: b9e0 cbnz r0, 801ca90 + if ((refused_flags & PBUF_FLAG_TCP_FIN) + 801ca56: 06bb lsls r3, r7, #26 + 801ca58: d5ee bpl.n 801ca38 + if (pcb->rcv_wnd != TCP_WND_MAX(pcb)) { + 801ca5a: 8d23 ldrh r3, [r4, #40] ; 0x28 + TCP_EVENT_CLOSED(pcb, err); + 801ca5c: f8d4 6084 ldr.w r6, [r4, #132] ; 0x84 + if (pcb->rcv_wnd != TCP_WND_MAX(pcb)) { + 801ca60: f5b3 6f06 cmp.w r3, #2144 ; 0x860 + pcb->rcv_wnd++; + 801ca64: bf1c itt ne + 801ca66: 3301 addne r3, #1 + 801ca68: 8523 strhne r3, [r4, #40] ; 0x28 + TCP_EVENT_CLOSED(pcb, err); + 801ca6a: 2e00 cmp r6, #0 + 801ca6c: d0e4 beq.n 801ca38 + 801ca6e: 2300 movs r3, #0 + 801ca70: 4621 mov r1, r4 + 801ca72: 6920 ldr r0, [r4, #16] + 801ca74: 461a mov r2, r3 + 801ca76: 47b0 blx r6 + if (err == ERR_ABRT) { + 801ca78: 300d adds r0, #13 + 801ca7a: d1dd bne.n 801ca38 + return ERR_ABRT; + 801ca7c: f06f 050c mvn.w r5, #12 + 801ca80: e7da b.n 801ca38 + TCP_EVENT_RECV(pcb, refused_data, ERR_OK, err); + 801ca82: 4601 mov r1, r0 + 801ca84: 462b mov r3, r5 + 801ca86: 4632 mov r2, r6 + 801ca88: 4628 mov r0, r5 + 801ca8a: f7ff ffa5 bl 801c9d8 + 801ca8e: e7e0 b.n 801ca52 + } else if (err == ERR_ABRT) { + 801ca90: 350d adds r5, #13 + 801ca92: d0f3 beq.n 801ca7c + return ERR_INPROGRESS; + 801ca94: f06f 0504 mvn.w r5, #4 + pcb->refused_data = refused_data; + 801ca98: 67a6 str r6, [r4, #120] ; 0x78 + return ERR_INPROGRESS; + 801ca9a: e7cd b.n 801ca38 + 801ca9c: 0803b02d .word 0x0803b02d + 801caa0: 0803b342 .word 0x0803b342 + 801caa4: 08035999 .word 0x08035999 + +0801caa8 : +{ + 801caa8: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} + ++tcp_timer_ctr; + 801caac: 4d1b ldr r5, [pc, #108] ; (801cb1c ) + pcb = tcp_active_pcbs; + 801caae: 4f1c ldr r7, [pc, #112] ; (801cb20 ) + ++tcp_timer_ctr; + 801cab0: 782b ldrb r3, [r5, #0] + tcp_active_pcbs_changed = 0; + 801cab2: 4e1c ldr r6, [pc, #112] ; (801cb24 ) + ++tcp_timer_ctr; + 801cab4: 3301 adds r3, #1 + 801cab6: 702b strb r3, [r5, #0] + pcb = tcp_active_pcbs; + 801cab8: 683c ldr r4, [r7, #0] + tcp_active_pcbs_changed = 0; + 801caba: f04f 0800 mov.w r8, #0 + while (pcb != NULL) { + 801cabe: b90c cbnz r4, 801cac4 +} + 801cac0: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} + if (pcb->last_timer != tcp_timer_ctr) { + 801cac4: 782b ldrb r3, [r5, #0] + 801cac6: 7fa2 ldrb r2, [r4, #30] + 801cac8: 429a cmp r2, r3 + 801caca: d024 beq.n 801cb16 + pcb->last_timer = tcp_timer_ctr; + 801cacc: 77a3 strb r3, [r4, #30] + if (pcb->flags & TF_ACK_DELAY) { + 801cace: 8b63 ldrh r3, [r4, #26] + 801cad0: 07d9 lsls r1, r3, #31 + 801cad2: d509 bpl.n 801cae8 + tcp_ack_now(pcb); + 801cad4: f043 0302 orr.w r3, r3, #2 + tcp_output(pcb); + 801cad8: 4620 mov r0, r4 + tcp_ack_now(pcb); + 801cada: 8363 strh r3, [r4, #26] + tcp_output(pcb); + 801cadc: f002 f938 bl 801ed50 + tcp_clear_flags(pcb, TF_ACK_DELAY | TF_ACK_NOW); + 801cae0: 8b63 ldrh r3, [r4, #26] + 801cae2: f023 0303 bic.w r3, r3, #3 + 801cae6: 8363 strh r3, [r4, #26] + if (pcb->flags & TF_CLOSEPEND) { + 801cae8: 8b63 ldrh r3, [r4, #26] + 801caea: 071a lsls r2, r3, #28 + 801caec: d505 bpl.n 801cafa + tcp_clear_flags(pcb, TF_CLOSEPEND); + 801caee: f023 0308 bic.w r3, r3, #8 + tcp_close_shutdown_fin(pcb); + 801caf2: 4620 mov r0, r4 + tcp_clear_flags(pcb, TF_CLOSEPEND); + 801caf4: 8363 strh r3, [r4, #26] + tcp_close_shutdown_fin(pcb); + 801caf6: f7ff fb43 bl 801c180 + if (pcb->refused_data != NULL) { + 801cafa: 6fa3 ldr r3, [r4, #120] ; 0x78 + next = pcb->next; + 801cafc: f8d4 900c ldr.w r9, [r4, #12] + if (pcb->refused_data != NULL) { + 801cb00: b13b cbz r3, 801cb12 + tcp_process_refused_data(pcb); + 801cb02: 4620 mov r0, r4 + tcp_active_pcbs_changed = 0; + 801cb04: f886 8000 strb.w r8, [r6] + tcp_process_refused_data(pcb); + 801cb08: f7ff ff8a bl 801ca20 + if (tcp_active_pcbs_changed) { + 801cb0c: 7833 ldrb r3, [r6, #0] + 801cb0e: 2b00 cmp r3, #0 + 801cb10: d1d2 bne.n 801cab8 +{ + 801cb12: 464c mov r4, r9 + 801cb14: e7d3 b.n 801cabe + pcb = pcb->next; + 801cb16: f8d4 900c ldr.w r9, [r4, #12] + 801cb1a: e7fa b.n 801cb12 + 801cb1c: 2001e6c1 .word 0x2001e6c1 + 801cb20: 2001e6ac .word 0x2001e6ac + 801cb24: 2001e6b0 .word 0x2001e6b0 + +0801cb28 : +{ + 801cb28: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + ++tcp_ticks; + 801cb2c: 4e91 ldr r6, [pc, #580] ; (801cd74 ) +{ + 801cb2e: b087 sub sp, #28 + ++tcp_timer_ctr; + 801cb30: 4a91 ldr r2, [pc, #580] ; (801cd78 ) + ++tcp_ticks; + 801cb32: 6833 ldr r3, [r6, #0] + pcb = tcp_active_pcbs; + 801cb34: f8df a26c ldr.w sl, [pc, #620] ; 801cda4 + ++tcp_ticks; + 801cb38: 3301 adds r3, #1 + LWIP_ASSERT("tcp_slowtmr: active pcb->state != CLOSED\n", pcb->state != CLOSED); + 801cb3a: 4f90 ldr r7, [pc, #576] ; (801cd7c ) + ++tcp_ticks; + 801cb3c: 6033 str r3, [r6, #0] + ++tcp_timer_ctr; + 801cb3e: 7813 ldrb r3, [r2, #0] + 801cb40: 3301 adds r3, #1 + 801cb42: 7013 strb r3, [r2, #0] + pcb = tcp_active_pcbs; + 801cb44: f8da 4000 ldr.w r4, [sl] + prev = NULL; + 801cb48: f04f 0900 mov.w r9, #0 + LWIP_ASSERT("tcp_slowtmr: active pcb->state != CLOSED\n", pcb->state != CLOSED); + 801cb4c: f8df 8258 ldr.w r8, [pc, #600] ; 801cda8 + while (pcb != NULL) { + 801cb50: b96c cbnz r4, 801cb6e + pcb = tcp_tw_pcbs; + 801cb52: 4f8b ldr r7, [pc, #556] ; (801cd80 ) + LWIP_ASSERT("tcp_slowtmr: TIME-WAIT pcb->state == TIME-WAIT", pcb->state == TIME_WAIT); + 801cb54: f8df 8224 ldr.w r8, [pc, #548] ; 801cd7c + pcb = tcp_tw_pcbs; + 801cb58: 683d ldr r5, [r7, #0] + LWIP_ASSERT("tcp_slowtmr: TIME-WAIT pcb->state == TIME-WAIT", pcb->state == TIME_WAIT); + 801cb5a: f8df a250 ldr.w sl, [pc, #592] ; 801cdac + 801cb5e: f8df 9248 ldr.w r9, [pc, #584] ; 801cda8 + while (pcb != NULL) { + 801cb62: 2d00 cmp r5, #0 + 801cb64: f040 81b8 bne.w 801ced8 +} + 801cb68: b007 add sp, #28 + 801cb6a: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + LWIP_ASSERT("tcp_slowtmr: active pcb->state != CLOSED\n", pcb->state != CLOSED); + 801cb6e: 7d23 ldrb r3, [r4, #20] + 801cb70: b933 cbnz r3, 801cb80 + 801cb72: 463b mov r3, r7 + 801cb74: f240 42be movw r2, #1214 ; 0x4be + 801cb78: 4982 ldr r1, [pc, #520] ; (801cd84 ) + 801cb7a: 4640 mov r0, r8 + 801cb7c: f017 fdea bl 8034754 + LWIP_ASSERT("tcp_slowtmr: active pcb->state != LISTEN\n", pcb->state != LISTEN); + 801cb80: 7d23 ldrb r3, [r4, #20] + 801cb82: 2b01 cmp r3, #1 + 801cb84: d106 bne.n 801cb94 + 801cb86: 463b mov r3, r7 + 801cb88: f240 42bf movw r2, #1215 ; 0x4bf + 801cb8c: 497e ldr r1, [pc, #504] ; (801cd88 ) + 801cb8e: 4640 mov r0, r8 + 801cb90: f017 fde0 bl 8034754 + LWIP_ASSERT("tcp_slowtmr: active pcb->state != TIME-WAIT\n", pcb->state != TIME_WAIT); + 801cb94: 7d23 ldrb r3, [r4, #20] + 801cb96: 2b0a cmp r3, #10 + 801cb98: d106 bne.n 801cba8 + 801cb9a: 463b mov r3, r7 + 801cb9c: f44f 6298 mov.w r2, #1216 ; 0x4c0 + 801cba0: 497a ldr r1, [pc, #488] ; (801cd8c ) + 801cba2: 4640 mov r0, r8 + 801cba4: f017 fdd6 bl 8034754 + if (pcb->last_timer == tcp_timer_ctr) { + 801cba8: 4b73 ldr r3, [pc, #460] ; (801cd78 ) + 801cbaa: 7fa2 ldrb r2, [r4, #30] + 801cbac: 781b ldrb r3, [r3, #0] + 801cbae: 429a cmp r2, r3 + 801cbb0: d103 bne.n 801cbba + pcb = pcb->next; + 801cbb2: 68e5 ldr r5, [r4, #12] + continue; + 801cbb4: 46a1 mov r9, r4 + 801cbb6: 462c mov r4, r5 + 801cbb8: e7ca b.n 801cb50 + if (pcb->state == SYN_SENT && pcb->nrtx >= TCP_SYNMAXRTX) { + 801cbba: 7d22 ldrb r2, [r4, #20] + pcb->last_timer = tcp_timer_ctr; + 801cbbc: 77a3 strb r3, [r4, #30] + if (pcb->state == SYN_SENT && pcb->nrtx >= TCP_SYNMAXRTX) { + 801cbbe: 2a02 cmp r2, #2 + 801cbc0: f894 3042 ldrb.w r3, [r4, #66] ; 0x42 + 801cbc4: f040 8089 bne.w 801ccda + 801cbc8: 2b05 cmp r3, #5 + 801cbca: f240 8088 bls.w 801ccde + ++pcb_remove; + 801cbce: f04f 0b01 mov.w fp, #1 + if (pcb->state == FIN_WAIT_2) { + 801cbd2: 7d22 ldrb r2, [r4, #20] + 801cbd4: 2a06 cmp r2, #6 + 801cbd6: d10b bne.n 801cbf0 + if (pcb->flags & TF_RXCLOSED) { + 801cbd8: 8b61 ldrh r1, [r4, #26] + 801cbda: 06cb lsls r3, r1, #27 + 801cbdc: d508 bpl.n 801cbf0 + if ((u32_t)(tcp_ticks - pcb->tmr) > + 801cbde: 6831 ldr r1, [r6, #0] + 801cbe0: 6a20 ldr r0, [r4, #32] + 801cbe2: 1a09 subs r1, r1, r0 + 801cbe4: 2928 cmp r1, #40 ; 0x28 + ++pcb_remove; + 801cbe6: bf84 itt hi + 801cbe8: f10b 0301 addhi.w r3, fp, #1 + 801cbec: fa5f fb83 uxtbhi.w fp, r3 + if (ip_get_option(pcb, SOF_KEEPALIVE) && + 801cbf0: 7a65 ldrb r5, [r4, #9] + 801cbf2: f015 0508 ands.w r5, r5, #8 + 801cbf6: d019 beq.n 801cc2c + 801cbf8: 2a04 cmp r2, #4 + 801cbfa: d002 beq.n 801cc02 + ((pcb->state == ESTABLISHED) || + 801cbfc: 2a07 cmp r2, #7 + 801cbfe: f040 8132 bne.w 801ce66 + if ((u32_t)(tcp_ticks - pcb->tmr) > + 801cc02: 6a22 ldr r2, [r4, #32] + (pcb->keep_idle + TCP_KEEP_DUR(pcb)) / TCP_SLOW_INTERVAL) { + 801cc04: f44f 75fa mov.w r5, #500 ; 0x1f4 + if ((u32_t)(tcp_ticks - pcb->tmr) > + 801cc08: 6830 ldr r0, [r6, #0] + 801cc0a: 1a80 subs r0, r0, r2 + (pcb->keep_idle + TCP_KEEP_DUR(pcb)) / TCP_SLOW_INTERVAL) { + 801cc0c: f8d4 2094 ldr.w r2, [r4, #148] ; 0x94 + 801cc10: f502 2124 add.w r1, r2, #671744 ; 0xa4000 + 801cc14: f601 41b8 addw r1, r1, #3256 ; 0xcb8 + 801cc18: fbb1 f1f5 udiv r1, r1, r5 + if ((u32_t)(tcp_ticks - pcb->tmr) > + 801cc1c: 4288 cmp r0, r1 + 801cc1e: f240 8110 bls.w 801ce42 + ++pcb_remove; + 801cc22: f10b 0301 add.w r3, fp, #1 + ++pcb_reset; + 801cc26: 2501 movs r5, #1 + ++pcb_remove; + 801cc28: fa5f fb83 uxtb.w fp, r3 + if (pcb->ooseq != NULL && + 801cc2c: 6f62 ldr r2, [r4, #116] ; 0x74 + 801cc2e: b162 cbz r2, 801cc4a + (tcp_ticks - pcb->tmr >= (u32_t)pcb->rto * TCP_OOSEQ_TIMEOUT)) { + 801cc30: 6832 ldr r2, [r6, #0] + 801cc32: 6a21 ldr r1, [r4, #32] + 801cc34: 1a51 subs r1, r2, r1 + 801cc36: f9b4 2040 ldrsh.w r2, [r4, #64] ; 0x40 + 801cc3a: eb02 0242 add.w r2, r2, r2, lsl #1 + if (pcb->ooseq != NULL && + 801cc3e: ebb1 0f42 cmp.w r1, r2, lsl #1 + 801cc42: d302 bcc.n 801cc4a + tcp_free_ooseq(pcb); + 801cc44: 4620 mov r0, r4 + 801cc46: f7ff fbd5 bl 801c3f4 + if (pcb->state == SYN_RCVD) { + 801cc4a: 7d22 ldrb r2, [r4, #20] + 801cc4c: 2a03 cmp r2, #3 + 801cc4e: f040 810c bne.w 801ce6a + if ((u32_t)(tcp_ticks - pcb->tmr) > + 801cc52: 6832 ldr r2, [r6, #0] + 801cc54: 6a21 ldr r1, [r4, #32] + 801cc56: 1a52 subs r2, r2, r1 + 801cc58: 2a28 cmp r2, #40 ; 0x28 + if ((u32_t)(tcp_ticks - pcb->tmr) > 2 * TCP_MSL / TCP_SLOW_INTERVAL) { + 801cc5a: d803 bhi.n 801cc64 + if (pcb_remove) { + 801cc5c: f1bb 0f00 cmp.w fp, #0 + 801cc60: f000 8118 beq.w 801ce94 + tcp_pcb_purge(pcb); + 801cc64: 4620 mov r0, r4 + tcp_err_fn err_fn = pcb->errf; + 801cc66: f8d4 b090 ldr.w fp, [r4, #144] ; 0x90 + tcp_pcb_purge(pcb); + 801cc6a: f7ff fbcd bl 801c408 + LWIP_ASSERT("tcp_slowtmr: middle tcp != tcp_active_pcbs", pcb != tcp_active_pcbs); + 801cc6e: f8da 3000 ldr.w r3, [sl] + if (prev != NULL) { + 801cc72: f1b9 0f00 cmp.w r9, #0 + 801cc76: f000 8100 beq.w 801ce7a + LWIP_ASSERT("tcp_slowtmr: middle tcp != tcp_active_pcbs", pcb != tcp_active_pcbs); + 801cc7a: 42a3 cmp r3, r4 + 801cc7c: d106 bne.n 801cc8c + 801cc7e: 463b mov r3, r7 + 801cc80: f240 526d movw r2, #1389 ; 0x56d + 801cc84: 4942 ldr r1, [pc, #264] ; (801cd90 ) + 801cc86: 4640 mov r0, r8 + 801cc88: f017 fd64 bl 8034754 + prev->next = pcb->next; + 801cc8c: 68e3 ldr r3, [r4, #12] + 801cc8e: f8c9 300c str.w r3, [r9, #12] + if (pcb_reset) { + 801cc92: b15d cbz r5, 801ccac + tcp_rst(pcb, pcb->snd_nxt, pcb->rcv_nxt, &pcb->local_ip, &pcb->remote_ip, + 801cc94: 8b23 ldrh r3, [r4, #24] + 801cc96: 4620 mov r0, r4 + 801cc98: 9302 str r3, [sp, #8] + 801cc9a: 8ae3 ldrh r3, [r4, #22] + 801cc9c: 9301 str r3, [sp, #4] + 801cc9e: 1d23 adds r3, r4, #4 + 801cca0: 9300 str r3, [sp, #0] + 801cca2: 4623 mov r3, r4 + 801cca4: 6a62 ldr r2, [r4, #36] ; 0x24 + 801cca6: 6d21 ldr r1, [r4, #80] ; 0x50 + 801cca8: f001 ffda bl 801ec60 + err_arg = pcb->callback_arg; + 801ccac: 6923 ldr r3, [r4, #16] + tcp_free(pcb2); + 801ccae: 4620 mov r0, r4 + pcb = pcb->next; + 801ccb0: 68e5 ldr r5, [r4, #12] + err_arg = pcb->callback_arg; + 801ccb2: 9305 str r3, [sp, #20] + tcp_free(pcb2); + 801ccb4: f7ff faa0 bl 801c1f8 + tcp_active_pcbs_changed = 0; + 801ccb8: 4c36 ldr r4, [pc, #216] ; (801cd94 ) + 801ccba: 2200 movs r2, #0 + 801ccbc: 7022 strb r2, [r4, #0] + TCP_EVENT_ERR(last_state, err_fn, err_arg, ERR_ABRT); + 801ccbe: f1bb 0f00 cmp.w fp, #0 + 801ccc2: d008 beq.n 801ccd6 + 801ccc4: 9b05 ldr r3, [sp, #20] + 801ccc6: f06f 010c mvn.w r1, #12 + 801ccca: 4618 mov r0, r3 + 801cccc: 47d8 blx fp + if (tcp_active_pcbs_changed) { + 801ccce: 7823 ldrb r3, [r4, #0] + 801ccd0: 2b00 cmp r3, #0 + 801ccd2: f47f af37 bne.w 801cb44 + 801ccd6: 464c mov r4, r9 + 801ccd8: e76c b.n 801cbb4 + } else if (pcb->nrtx >= TCP_MAXRTX) { + 801ccda: 2b0b cmp r3, #11 + 801ccdc: e775 b.n 801cbca + if (pcb->persist_backoff > 0) { + 801ccde: f894 b099 ldrb.w fp, [r4, #153] ; 0x99 + 801cce2: f1bb 0f00 cmp.w fp, #0 + 801cce6: d063 beq.n 801cdb0 + LWIP_ASSERT("tcp_slowtimr: persist ticking with in-flight data", pcb->unacked == NULL); + 801cce8: 6f23 ldr r3, [r4, #112] ; 0x70 + 801ccea: b133 cbz r3, 801ccfa + 801ccec: 463b mov r3, r7 + 801ccee: f240 42d4 movw r2, #1236 ; 0x4d4 + 801ccf2: 4929 ldr r1, [pc, #164] ; (801cd98 ) + 801ccf4: 4640 mov r0, r8 + 801ccf6: f017 fd2d bl 8034754 + LWIP_ASSERT("tcp_slowtimr: persist ticking with empty send buffer", pcb->unsent != NULL); + 801ccfa: 6ee3 ldr r3, [r4, #108] ; 0x6c + 801ccfc: b933 cbnz r3, 801cd0c + 801ccfe: 463b mov r3, r7 + 801cd00: f240 42d5 movw r2, #1237 ; 0x4d5 + 801cd04: 4925 ldr r1, [pc, #148] ; (801cd9c ) + 801cd06: 4640 mov r0, r8 + 801cd08: f017 fd24 bl 8034754 + if (pcb->persist_probe >= TCP_MAXRTX) { + 801cd0c: f894 309a ldrb.w r3, [r4, #154] ; 0x9a + 801cd10: 2b0b cmp r3, #11 + 801cd12: f63f af5c bhi.w 801cbce + u8_t backoff_cnt = tcp_persist_backoff[pcb->persist_backoff - 1]; + 801cd16: f894 2099 ldrb.w r2, [r4, #153] ; 0x99 + 801cd1a: 4b21 ldr r3, [pc, #132] ; (801cda0 ) + 801cd1c: 4413 add r3, r2 + 801cd1e: f813 2c01 ldrb.w r2, [r3, #-1] + if (pcb->persist_cnt < backoff_cnt) { + 801cd22: f894 3098 ldrb.w r3, [r4, #152] ; 0x98 + 801cd26: 4293 cmp r3, r2 + 801cd28: d30b bcc.n 801cd42 + if (pcb->snd_wnd == 0) { + 801cd2a: f8b4 1060 ldrh.w r1, [r4, #96] ; 0x60 + 801cd2e: b189 cbz r1, 801cd54 + if (tcp_split_unsent_seg(pcb, (u16_t)pcb->snd_wnd) == ERR_OK) { + 801cd30: 4620 mov r0, r4 + 801cd32: f001 fd4d bl 801e7d0 + 801cd36: b990 cbnz r0, 801cd5e + if (tcp_output(pcb) == ERR_OK) { + 801cd38: 4620 mov r0, r4 + 801cd3a: f002 f809 bl 801ed50 + 801cd3e: b130 cbz r0, 801cd4e + 801cd40: e00d b.n 801cd5e + pcb->persist_cnt++; + 801cd42: 3301 adds r3, #1 + 801cd44: b2db uxtb r3, r3 + if (pcb->persist_cnt >= backoff_cnt) { + 801cd46: 4293 cmp r3, r2 + pcb->persist_cnt++; + 801cd48: f884 3098 strb.w r3, [r4, #152] ; 0x98 + if (pcb->persist_cnt >= backoff_cnt) { + 801cd4c: d2ed bcs.n 801cd2a + pcb_remove = 0; + 801cd4e: f04f 0b00 mov.w fp, #0 + 801cd52: e73e b.n 801cbd2 + if (tcp_zero_window_probe(pcb) != ERR_OK) { + 801cd54: 4620 mov r0, r4 + 801cd56: f002 fa03 bl 801f160 + 801cd5a: 2800 cmp r0, #0 + 801cd5c: d1f7 bne.n 801cd4e + if (pcb->persist_backoff < sizeof(tcp_persist_backoff)) { + 801cd5e: f894 2099 ldrb.w r2, [r4, #153] ; 0x99 + pcb->persist_cnt = 0; + 801cd62: 2300 movs r3, #0 + if (pcb->persist_backoff < sizeof(tcp_persist_backoff)) { + 801cd64: 2a06 cmp r2, #6 + pcb->persist_cnt = 0; + 801cd66: f884 3098 strb.w r3, [r4, #152] ; 0x98 + if (pcb->persist_backoff < sizeof(tcp_persist_backoff)) { + 801cd6a: d8f0 bhi.n 801cd4e + pcb->persist_backoff++; + 801cd6c: 3201 adds r2, #1 + 801cd6e: f884 2099 strb.w r2, [r4, #153] ; 0x99 + 801cd72: e7ec b.n 801cd4e + 801cd74: 2001e6bc .word 0x2001e6bc + 801cd78: 2001e6c1 .word 0x2001e6c1 + 801cd7c: 0803b02d .word 0x0803b02d + 801cd80: 2001e6c4 .word 0x2001e6c4 + 801cd84: 0803b368 .word 0x0803b368 + 801cd88: 0803b392 .word 0x0803b392 + 801cd8c: 0803b3bc .word 0x0803b3bc + 801cd90: 0803b450 .word 0x0803b450 + 801cd94: 2001e6b0 .word 0x2001e6b0 + 801cd98: 0803b3e9 .word 0x0803b3e9 + 801cd9c: 0803b41b .word 0x0803b41b + 801cda0: 0803b540 .word 0x0803b540 + 801cda4: 2001e6ac .word 0x2001e6ac + 801cda8: 08035999 .word 0x08035999 + 801cdac: 0803b4a5 .word 0x0803b4a5 + if ((pcb->rtime >= 0) && (pcb->rtime < 0x7FFF)) { + 801cdb0: 8e22 ldrh r2, [r4, #48] ; 0x30 + 801cdb2: f647 71fe movw r1, #32766 ; 0x7ffe + 801cdb6: 428a cmp r2, r1 + ++pcb->rtime; + 801cdb8: bf9c itt ls + 801cdba: 3201 addls r2, #1 + 801cdbc: 8622 strhls r2, [r4, #48] ; 0x30 + if (pcb->rtime >= pcb->rto) { + 801cdbe: f9b4 2040 ldrsh.w r2, [r4, #64] ; 0x40 + 801cdc2: f9b4 1030 ldrsh.w r1, [r4, #48] ; 0x30 + 801cdc6: 4291 cmp r1, r2 + 801cdc8: dbc1 blt.n 801cd4e + if ((tcp_rexmit_rto_prepare(pcb) == ERR_OK) || ((pcb->unacked == NULL) && (pcb->unsent != NULL))) { + 801cdca: 4620 mov r0, r4 + 801cdcc: f001 fe90 bl 801eaf0 + 801cdd0: b128 cbz r0, 801cdde + 801cdd2: 6f22 ldr r2, [r4, #112] ; 0x70 + 801cdd4: 2a00 cmp r2, #0 + 801cdd6: d1ba bne.n 801cd4e + 801cdd8: 6ee2 ldr r2, [r4, #108] ; 0x6c + 801cdda: 2a00 cmp r2, #0 + 801cddc: d0b7 beq.n 801cd4e + if (pcb->state != SYN_SENT) { + 801cdde: 7d22 ldrb r2, [r4, #20] + 801cde0: 2a02 cmp r2, #2 + 801cde2: d014 beq.n 801ce0e + int calc_rto = ((pcb->sa >> 3) + pcb->sv) << tcp_backoff[backoff_idx]; + 801cde4: f9b4 103c ldrsh.w r1, [r4, #60] ; 0x3c + 801cde8: f9b4 203e ldrsh.w r2, [r4, #62] ; 0x3e + 801cdec: 4855 ldr r0, [pc, #340] ; (801cf44 ) + 801cdee: eb02 02e1 add.w r2, r2, r1, asr #3 + u8_t backoff_idx = LWIP_MIN(pcb->nrtx, sizeof(tcp_backoff) - 1); + 801cdf2: f894 1042 ldrb.w r1, [r4, #66] ; 0x42 + int calc_rto = ((pcb->sa >> 3) + pcb->sv) << tcp_backoff[backoff_idx]; + 801cdf6: 290c cmp r1, #12 + 801cdf8: bf28 it cs + 801cdfa: 210c movcs r1, #12 + 801cdfc: 5c41 ldrb r1, [r0, r1] + 801cdfe: 408a lsls r2, r1 + pcb->rto = (s16_t)LWIP_MIN(calc_rto, 0x7FFF); + 801ce00: f647 71ff movw r1, #32767 ; 0x7fff + 801ce04: 428a cmp r2, r1 + 801ce06: bfa8 it ge + 801ce08: 460a movge r2, r1 + 801ce0a: f8a4 2040 strh.w r2, [r4, #64] ; 0x40 + eff_wnd = LWIP_MIN(pcb->cwnd, pcb->snd_wnd); + 801ce0e: f8b4 5048 ldrh.w r5, [r4, #72] ; 0x48 + pcb->rtime = 0; + 801ce12: 2100 movs r1, #0 + eff_wnd = LWIP_MIN(pcb->cwnd, pcb->snd_wnd); + 801ce14: f8b4 2060 ldrh.w r2, [r4, #96] ; 0x60 + if (pcb->ssthresh < (tcpwnd_size_t)(pcb->mss << 1)) { + 801ce18: 8e60 ldrh r0, [r4, #50] ; 0x32 + pcb->ssthresh = eff_wnd >> 1; + 801ce1a: 42aa cmp r2, r5 + pcb->rtime = 0; + 801ce1c: 8621 strh r1, [r4, #48] ; 0x30 + pcb->cwnd = pcb->mss; + 801ce1e: f8a4 0048 strh.w r0, [r4, #72] ; 0x48 + pcb->ssthresh = eff_wnd >> 1; + 801ce22: bf28 it cs + 801ce24: 462a movcs r2, r5 + if (pcb->ssthresh < (tcpwnd_size_t)(pcb->mss << 1)) { + 801ce26: 0045 lsls r5, r0, #1 + pcb->bytes_acked = 0; + 801ce28: f8a4 106a strh.w r1, [r4, #106] ; 0x6a + tcp_rexmit_rto_commit(pcb); + 801ce2c: 4620 mov r0, r4 + 801ce2e: 0852 lsrs r2, r2, #1 + 801ce30: b2ad uxth r5, r5 + 801ce32: 42aa cmp r2, r5 + 801ce34: bf38 it cc + 801ce36: 462a movcc r2, r5 + 801ce38: f8a4 204a strh.w r2, [r4, #74] ; 0x4a + 801ce3c: f002 f932 bl 801f0a4 + 801ce40: e6c7 b.n 801cbd2 + (pcb->keep_idle + pcb->keep_cnt_sent * TCP_KEEP_INTVL(pcb)) + 801ce42: f894 109b ldrb.w r1, [r4, #155] ; 0x9b + 801ce46: 4b40 ldr r3, [pc, #256] ; (801cf48 ) + 801ce48: fb03 2201 mla r2, r3, r1, r2 + / TCP_SLOW_INTERVAL) { + 801ce4c: fbb2 f2f5 udiv r2, r2, r5 + } else if ((u32_t)(tcp_ticks - pcb->tmr) > + 801ce50: 4290 cmp r0, r2 + 801ce52: d908 bls.n 801ce66 + err = tcp_keepalive(pcb); + 801ce54: 4620 mov r0, r4 + 801ce56: f002 f95b bl 801f110 + if (err == ERR_OK) { + 801ce5a: b920 cbnz r0, 801ce66 + pcb->keep_cnt_sent++; + 801ce5c: f894 209b ldrb.w r2, [r4, #155] ; 0x9b + 801ce60: 3201 adds r2, #1 + 801ce62: f884 209b strb.w r2, [r4, #155] ; 0x9b + pcb_reset = 0; + 801ce66: 2500 movs r5, #0 + 801ce68: e6e0 b.n 801cc2c + if (pcb->state == LAST_ACK) { + 801ce6a: 2a09 cmp r2, #9 + 801ce6c: f47f aef6 bne.w 801cc5c + if ((u32_t)(tcp_ticks - pcb->tmr) > 2 * TCP_MSL / TCP_SLOW_INTERVAL) { + 801ce70: 6832 ldr r2, [r6, #0] + 801ce72: 6a21 ldr r1, [r4, #32] + 801ce74: 1a52 subs r2, r2, r1 + 801ce76: 2af0 cmp r2, #240 ; 0xf0 + 801ce78: e6ef b.n 801cc5a + LWIP_ASSERT("tcp_slowtmr: first pcb == tcp_active_pcbs", tcp_active_pcbs == pcb); + 801ce7a: 42a3 cmp r3, r4 + 801ce7c: d006 beq.n 801ce8c + 801ce7e: 463b mov r3, r7 + 801ce80: f240 5271 movw r2, #1393 ; 0x571 + 801ce84: 4931 ldr r1, [pc, #196] ; (801cf4c ) + 801ce86: 4640 mov r0, r8 + 801ce88: f017 fc64 bl 8034754 + tcp_active_pcbs = pcb->next; + 801ce8c: 68e3 ldr r3, [r4, #12] + 801ce8e: f8ca 3000 str.w r3, [sl] + 801ce92: e6fe b.n 801cc92 + ++prev->polltmr; + 801ce94: 7f22 ldrb r2, [r4, #28] + if (prev->polltmr >= prev->pollinterval) { + 801ce96: 7f61 ldrb r1, [r4, #29] + ++prev->polltmr; + 801ce98: 3201 adds r2, #1 + pcb = pcb->next; + 801ce9a: 68e5 ldr r5, [r4, #12] + ++prev->polltmr; + 801ce9c: b2d2 uxtb r2, r2 + if (prev->polltmr >= prev->pollinterval) { + 801ce9e: 4291 cmp r1, r2 + ++prev->polltmr; + 801cea0: 7722 strb r2, [r4, #28] + if (prev->polltmr >= prev->pollinterval) { + 801cea2: f63f ae87 bhi.w 801cbb4 + tcp_active_pcbs_changed = 0; + 801cea6: f8df 90b0 ldr.w r9, [pc, #176] ; 801cf58 + TCP_EVENT_POLL(prev, err); + 801ceaa: f8d4 308c ldr.w r3, [r4, #140] ; 0x8c + prev->polltmr = 0; + 801ceae: f884 b01c strb.w fp, [r4, #28] + tcp_active_pcbs_changed = 0; + 801ceb2: f889 b000 strb.w fp, [r9] + TCP_EVENT_POLL(prev, err); + 801ceb6: b91b cbnz r3, 801cec0 + tcp_output(prev); + 801ceb8: 4620 mov r0, r4 + 801ceba: f001 ff49 bl 801ed50 + 801cebe: e679 b.n 801cbb4 + TCP_EVENT_POLL(prev, err); + 801cec0: 4621 mov r1, r4 + 801cec2: 6920 ldr r0, [r4, #16] + 801cec4: 4798 blx r3 + if (tcp_active_pcbs_changed) { + 801cec6: f899 3000 ldrb.w r3, [r9] + 801ceca: 2b00 cmp r3, #0 + 801cecc: f47f ae3a bne.w 801cb44 + if (err == ERR_OK) { + 801ced0: 2800 cmp r0, #0 + 801ced2: f47f ae6f bne.w 801cbb4 + 801ced6: e7ef b.n 801ceb8 + LWIP_ASSERT("tcp_slowtmr: TIME-WAIT pcb->state == TIME-WAIT", pcb->state == TIME_WAIT); + 801ced8: 7d2b ldrb r3, [r5, #20] + 801ceda: 2b0a cmp r3, #10 + 801cedc: d006 beq.n 801ceec + 801cede: 4643 mov r3, r8 + 801cee0: f240 52a1 movw r2, #1441 ; 0x5a1 + 801cee4: 4651 mov r1, sl + 801cee6: 4648 mov r0, r9 + 801cee8: f017 fc34 bl 8034754 + if ((u32_t)(tcp_ticks - pcb->tmr) > 2 * TCP_MSL / TCP_SLOW_INTERVAL) { + 801ceec: 6833 ldr r3, [r6, #0] + 801ceee: 6a2a ldr r2, [r5, #32] + 801cef0: 1a9b subs r3, r3, r2 + 801cef2: 2bf0 cmp r3, #240 ; 0xf0 + 801cef4: d910 bls.n 801cf18 + tcp_pcb_purge(pcb); + 801cef6: 4628 mov r0, r5 + 801cef8: f7ff fa86 bl 801c408 + if (prev != NULL) { + 801cefc: b97c cbnz r4, 801cf1e + LWIP_ASSERT("tcp_slowtmr: first pcb == tcp_tw_pcbs", tcp_tw_pcbs == pcb); + 801cefe: 683b ldr r3, [r7, #0] + 801cf00: 42ab cmp r3, r5 + 801cf02: d006 beq.n 801cf12 + 801cf04: 4643 mov r3, r8 + 801cf06: f240 52b3 movw r2, #1459 ; 0x5b3 + 801cf0a: 4911 ldr r1, [pc, #68] ; (801cf50 ) + 801cf0c: 4648 mov r0, r9 + 801cf0e: f017 fc21 bl 8034754 + tcp_tw_pcbs = pcb->next; + 801cf12: 68eb ldr r3, [r5, #12] + 801cf14: 603b str r3, [r7, #0] + 801cf16: e00e b.n 801cf36 + pcb = pcb->next; + 801cf18: 462c mov r4, r5 + 801cf1a: 68ed ldr r5, [r5, #12] + 801cf1c: e621 b.n 801cb62 + LWIP_ASSERT("tcp_slowtmr: middle tcp != tcp_tw_pcbs", pcb != tcp_tw_pcbs); + 801cf1e: 683b ldr r3, [r7, #0] + 801cf20: 42ab cmp r3, r5 + 801cf22: d106 bne.n 801cf32 + 801cf24: 4643 mov r3, r8 + 801cf26: f240 52af movw r2, #1455 ; 0x5af + 801cf2a: 490a ldr r1, [pc, #40] ; (801cf54 ) + 801cf2c: 4648 mov r0, r9 + 801cf2e: f017 fc11 bl 8034754 + prev->next = pcb->next; + 801cf32: 68eb ldr r3, [r5, #12] + 801cf34: 60e3 str r3, [r4, #12] + pcb = pcb->next; + 801cf36: f8d5 b00c ldr.w fp, [r5, #12] + tcp_free(pcb2); + 801cf3a: 4628 mov r0, r5 + 801cf3c: f7ff f95c bl 801c1f8 + pcb = pcb->next; + 801cf40: 465d mov r5, fp + 801cf42: e60e b.n 801cb62 + 801cf44: 0803b521 .word 0x0803b521 + 801cf48: 000124f8 .word 0x000124f8 + 801cf4c: 0803b47b .word 0x0803b47b + 801cf50: 0803b4fb .word 0x0803b4fb + 801cf54: 0803b4d4 .word 0x0803b4d4 + 801cf58: 2001e6b0 .word 0x2001e6b0 + +0801cf5c : +{ + 801cf5c: b508 push {r3, lr} + tcp_fasttmr(); + 801cf5e: f7ff fda3 bl 801caa8 + if (++tcp_timer & 1) { + 801cf62: 4a06 ldr r2, [pc, #24] ; (801cf7c ) + 801cf64: 7813 ldrb r3, [r2, #0] + 801cf66: 3301 adds r3, #1 + 801cf68: b2db uxtb r3, r3 + 801cf6a: 7013 strb r3, [r2, #0] + 801cf6c: 07db lsls r3, r3, #31 + 801cf6e: d503 bpl.n 801cf78 +} + 801cf70: e8bd 4008 ldmia.w sp!, {r3, lr} + tcp_slowtmr(); + 801cf74: f7ff bdd8 b.w 801cb28 +} + 801cf78: bd08 pop {r3, pc} + 801cf7a: bf00 nop + 801cf7c: 2001e6c0 .word 0x2001e6c0 + +0801cf80 : +} + +static u8_t +tcp_get_next_optbyte(void) +{ + u16_t optidx = tcp_optidx++; + 801cf80: 4a09 ldr r2, [pc, #36] ; (801cfa8 ) + 801cf82: 8813 ldrh r3, [r2, #0] + 801cf84: 1c59 adds r1, r3, #1 + 801cf86: 8011 strh r1, [r2, #0] + if ((tcphdr_opt2 == NULL) || (optidx < tcphdr_opt1len)) { + 801cf88: 4a08 ldr r2, [pc, #32] ; (801cfac ) + 801cf8a: 6812 ldr r2, [r2, #0] + 801cf8c: b11a cbz r2, 801cf96 + 801cf8e: 4908 ldr r1, [pc, #32] ; (801cfb0 ) + 801cf90: 8809 ldrh r1, [r1, #0] + 801cf92: 428b cmp r3, r1 + 801cf94: d204 bcs.n 801cfa0 + u8_t *opts = (u8_t *)tcphdr + TCP_HLEN; + 801cf96: 4a07 ldr r2, [pc, #28] ; (801cfb4 ) + return opts[optidx]; + 801cf98: 6812 ldr r2, [r2, #0] + 801cf9a: 4413 add r3, r2 + 801cf9c: 7d18 ldrb r0, [r3, #20] + 801cf9e: 4770 bx lr + } else { + u8_t idx = (u8_t)(optidx - tcphdr_opt1len); + 801cfa0: 1a5b subs r3, r3, r1 + return tcphdr_opt2[idx]; + 801cfa2: b2db uxtb r3, r3 + 801cfa4: 5cd0 ldrb r0, [r2, r3] + } +} + 801cfa6: 4770 bx lr + 801cfa8: 2001e6f4 .word 0x2001e6f4 + 801cfac: 2001e700 .word 0x2001e700 + 801cfb0: 2001e6fc .word 0x2001e6fc + 801cfb4: 2001e6f8 .word 0x2001e6f8 + +0801cfb8 : +{ + 801cfb8: b5f8 push {r3, r4, r5, r6, r7, lr} + 801cfba: 460c mov r4, r1 + LWIP_ASSERT("tcp_oos_insert_segment: invalid cseg", cseg != NULL); + 801cfbc: 4605 mov r5, r0 + 801cfbe: b930 cbnz r0, 801cfce + 801cfc0: 4b1e ldr r3, [pc, #120] ; (801d03c ) + 801cfc2: f240 421f movw r2, #1055 ; 0x41f + 801cfc6: 491e ldr r1, [pc, #120] ; (801d040 ) + 801cfc8: 481e ldr r0, [pc, #120] ; (801d044 ) + 801cfca: f017 fbc3 bl 8034754 + if (TCPH_FLAGS(cseg->tcphdr) & TCP_FIN) { + 801cfce: 68eb ldr r3, [r5, #12] + 801cfd0: 8998 ldrh r0, [r3, #12] + 801cfd2: f7fb fc84 bl 80188de + 801cfd6: 07c2 lsls r2, r0, #31 + 801cfd8: d414 bmi.n 801d004 + TCP_SEQ_GEQ((seqno + cseg->len), + 801cfda: 4e1b ldr r6, [pc, #108] ; (801d048 ) + 801cfdc: 68e7 ldr r7, [r4, #12] + 801cfde: 6830 ldr r0, [r6, #0] + 801cfe0: 892b ldrh r3, [r5, #8] + 801cfe2: 6879 ldr r1, [r7, #4] + 801cfe4: 8922 ldrh r2, [r4, #8] + 801cfe6: 4403 add r3, r0 + 801cfe8: 440a add r2, r1 + 801cfea: 1a9a subs r2, r3, r2 + while (next && + 801cfec: 2a00 cmp r2, #0 + 801cfee: da0f bge.n 801d010 + TCP_SEQ_GT(seqno + cseg->len, next->tcphdr->seqno)) { + 801cff0: 1a5b subs r3, r3, r1 + if (next && + 801cff2: 2b00 cmp r3, #0 + 801cff4: dd0a ble.n 801d00c + cseg->len = (u16_t)(next->tcphdr->seqno - seqno); + 801cff6: 1a09 subs r1, r1, r0 + pbuf_realloc(cseg->p, cseg->len); + 801cff8: 6868 ldr r0, [r5, #4] + cseg->len = (u16_t)(next->tcphdr->seqno - seqno); + 801cffa: b289 uxth r1, r1 + 801cffc: 8129 strh r1, [r5, #8] + pbuf_realloc(cseg->p, cseg->len); + 801cffe: f7fe fe95 bl 801bd2c + 801d002: e003 b.n 801d00c + tcp_segs_free(next); + 801d004: 4620 mov r0, r4 + next = NULL; + 801d006: 2400 movs r4, #0 + tcp_segs_free(next); + 801d008: f7ff f990 bl 801c32c + cseg->next = next; + 801d00c: 602c str r4, [r5, #0] +} + 801d00e: bdf8 pop {r3, r4, r5, r6, r7, pc} + if (TCPH_FLAGS(next->tcphdr) & TCP_FIN) { + 801d010: 89b8 ldrh r0, [r7, #12] + 801d012: f7fb fc64 bl 80188de + 801d016: 07c3 lsls r3, r0, #31 + 801d018: d507 bpl.n 801d02a + TCPH_SET_FLAG(cseg->tcphdr, TCP_FIN); + 801d01a: 68eb ldr r3, [r5, #12] + 801d01c: 2001 movs r0, #1 + 801d01e: 899f ldrh r7, [r3, #12] + 801d020: f7fb fc5d bl 80188de + 801d024: 68eb ldr r3, [r5, #12] + 801d026: 4338 orrs r0, r7 + 801d028: 8198 strh r0, [r3, #12] + next = next->next; + 801d02a: 6827 ldr r7, [r4, #0] + tcp_seg_free(old_seg); + 801d02c: 4620 mov r0, r4 + 801d02e: f7ff f96f bl 801c310 + while (next && + 801d032: 463c mov r4, r7 + 801d034: 2f00 cmp r7, #0 + 801d036: d1d1 bne.n 801cfdc + 801d038: e7e8 b.n 801d00c + 801d03a: bf00 nop + 801d03c: 0803b547 .word 0x0803b547 + 801d040: 0803b5ca .word 0x0803b5ca + 801d044: 08035999 .word 0x08035999 + 801d048: 2001e6ec .word 0x2001e6ec + +0801d04c : + * + * @param pcb the tcp_pcb for which a segment arrived + */ +static void +tcp_parseopt(struct tcp_pcb *pcb) +{ + 801d04c: b5f8 push {r3, r4, r5, r6, r7, lr} + u16_t mss; +#if LWIP_TCP_TIMESTAMPS + u32_t tsval; +#endif + + LWIP_ASSERT("tcp_parseopt: invalid pcb", pcb != NULL); + 801d04e: 4606 mov r6, r0 + 801d050: b930 cbnz r0, 801d060 + 801d052: 4b1d ldr r3, [pc, #116] ; (801d0c8 ) + 801d054: f240 727d movw r2, #1917 ; 0x77d + 801d058: 491c ldr r1, [pc, #112] ; (801d0cc ) + 801d05a: 481d ldr r0, [pc, #116] ; (801d0d0 ) + 801d05c: f017 fb7a bl 8034754 + + /* Parse the TCP MSS option, if present. */ + if (tcphdr_optlen != 0) { + 801d060: 4b1c ldr r3, [pc, #112] ; (801d0d4 ) + 801d062: 881f ldrh r7, [r3, #0] + 801d064: b167 cbz r7, 801d080 + for (tcp_optidx = 0; tcp_optidx < tcphdr_optlen; ) { + 801d066: 4d1c ldr r5, [pc, #112] ; (801d0d8 ) + 801d068: 2300 movs r3, #0 + 801d06a: 802b strh r3, [r5, #0] + 801d06c: 882b ldrh r3, [r5, #0] + 801d06e: 42bb cmp r3, r7 + 801d070: d206 bcs.n 801d080 + u8_t opt = tcp_get_next_optbyte(); + 801d072: f7ff ff85 bl 801cf80 + switch (opt) { + 801d076: 2801 cmp r0, #1 + 801d078: d0f8 beq.n 801d06c + 801d07a: 2802 cmp r0, #2 + 801d07c: d001 beq.n 801d082 + 801d07e: b9c8 cbnz r0, 801d0b4 + can skip past them. */ + tcp_optidx += data - 2; + } + } + } +} + 801d080: bdf8 pop {r3, r4, r5, r6, r7, pc} + if (tcp_get_next_optbyte() != LWIP_TCP_OPT_LEN_MSS || (tcp_optidx - 2 + LWIP_TCP_OPT_LEN_MSS) > tcphdr_optlen) { + 801d082: f7ff ff7d bl 801cf80 + 801d086: 2804 cmp r0, #4 + 801d088: d1fa bne.n 801d080 + 801d08a: 882b ldrh r3, [r5, #0] + 801d08c: 3301 adds r3, #1 + 801d08e: 42bb cmp r3, r7 + 801d090: daf6 bge.n 801d080 + mss = (u16_t)(tcp_get_next_optbyte() << 8); + 801d092: f7ff ff75 bl 801cf80 + 801d096: 0204 lsls r4, r0, #8 + mss |= tcp_get_next_optbyte(); + 801d098: f7ff ff72 bl 801cf80 + mss = (u16_t)(tcp_get_next_optbyte() << 8); + 801d09c: b2a4 uxth r4, r4 + mss |= tcp_get_next_optbyte(); + 801d09e: ea44 0300 orr.w r3, r4, r0 + 801d0a2: b29b uxth r3, r3 + pcb->mss = ((mss > TCP_MSS) || (mss == 0)) ? TCP_MSS : mss; + 801d0a4: 1e5a subs r2, r3, #1 + 801d0a6: f5b2 7f06 cmp.w r2, #536 ; 0x218 + 801d0aa: bf28 it cs + 801d0ac: f44f 7306 movcs.w r3, #536 ; 0x218 + 801d0b0: 8673 strh r3, [r6, #50] ; 0x32 + break; + 801d0b2: e7db b.n 801d06c + data = tcp_get_next_optbyte(); + 801d0b4: f7ff ff64 bl 801cf80 + if (data < 2) { + 801d0b8: 2801 cmp r0, #1 + 801d0ba: d9e1 bls.n 801d080 + tcp_optidx += data - 2; + 801d0bc: 882b ldrh r3, [r5, #0] + 801d0be: 3b02 subs r3, #2 + 801d0c0: 4418 add r0, r3 + 801d0c2: 8028 strh r0, [r5, #0] + 801d0c4: e7d2 b.n 801d06c + 801d0c6: bf00 nop + 801d0c8: 0803b547 .word 0x0803b547 + 801d0cc: 0803b5ef .word 0x0803b5ef + 801d0d0: 08035999 .word 0x08035999 + 801d0d4: 2001e704 .word 0x2001e704 + 801d0d8: 2001e6f4 .word 0x2001e6f4 + +0801d0dc : +{ + 801d0dc: b510 push {r4, lr} + LWIP_ASSERT("tcp_input_delayed_close: invalid pcb", pcb != NULL); + 801d0de: 4604 mov r4, r0 + 801d0e0: b930 cbnz r0, 801d0f0 + 801d0e2: 4b0f ldr r3, [pc, #60] ; (801d120 ) + 801d0e4: f240 225a movw r2, #602 ; 0x25a + 801d0e8: 490e ldr r1, [pc, #56] ; (801d124 ) + 801d0ea: 480f ldr r0, [pc, #60] ; (801d128 ) + 801d0ec: f017 fb32 bl 8034754 + if (recv_flags & TF_CLOSED) { + 801d0f0: 4b0e ldr r3, [pc, #56] ; (801d12c ) + 801d0f2: 7818 ldrb r0, [r3, #0] + 801d0f4: f010 0010 ands.w r0, r0, #16 + 801d0f8: d011 beq.n 801d11e + if (!(pcb->flags & TF_RXCLOSED)) { + 801d0fa: 8b63 ldrh r3, [r4, #26] + 801d0fc: 06db lsls r3, r3, #27 + 801d0fe: d406 bmi.n 801d10e + TCP_EVENT_ERR(pcb->state, pcb->errf, pcb->callback_arg, ERR_CLSD); + 801d100: f8d4 3090 ldr.w r3, [r4, #144] ; 0x90 + 801d104: b11b cbz r3, 801d10e + 801d106: f06f 010e mvn.w r1, #14 + 801d10a: 6920 ldr r0, [r4, #16] + 801d10c: 4798 blx r3 + tcp_pcb_remove(&tcp_active_pcbs, pcb); + 801d10e: 4621 mov r1, r4 + 801d110: 4807 ldr r0, [pc, #28] ; (801d130 ) + 801d112: f7ff f9ab bl 801c46c + tcp_free(pcb); + 801d116: 4620 mov r0, r4 + 801d118: f7ff f86e bl 801c1f8 + 801d11c: 2001 movs r0, #1 +} + 801d11e: bd10 pop {r4, pc} + 801d120: 0803b547 .word 0x0803b547 + 801d124: 0803b609 .word 0x0803b609 + 801d128: 08035999 .word 0x08035999 + 801d12c: 2001e6e8 .word 0x2001e6e8 + 801d130: 2001e6ac .word 0x2001e6ac + +0801d134 : +tcp_free_acked_segments(struct tcp_pcb *pcb, struct tcp_seg *seg_list, const char *dbg_list_name, + 801d134: e92d 4ff8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} + 801d138: 4606 mov r6, r0 + 801d13a: 4617 mov r7, r2 + seg_list = seg_list->next; + 801d13c: 460c mov r4, r1 + TCP_SEQ_LEQ(lwip_ntohl(seg_list->tcphdr->seqno) + + 801d13e: f8df 80b0 ldr.w r8, [pc, #176] ; 801d1f0 + LWIP_ASSERT("pcb->snd_queuelen >= pbuf_clen(next->p)", (pcb->snd_queuelen >= clen)); + 801d142: f8df 90a4 ldr.w r9, [pc, #164] ; 801d1e8 + 801d146: f8df a0ac ldr.w sl, [pc, #172] ; 801d1f4 + while (seg_list != NULL && + 801d14a: 2c00 cmp r4, #0 + 801d14c: d039 beq.n 801d1c2 + TCP_SEQ_LEQ(lwip_ntohl(seg_list->tcphdr->seqno) + + 801d14e: 68e3 ldr r3, [r4, #12] + 801d150: 6858 ldr r0, [r3, #4] + 801d152: f7fb fbc7 bl 80188e4 + 801d156: 68e3 ldr r3, [r4, #12] + 801d158: 4683 mov fp, r0 + 801d15a: 8925 ldrh r5, [r4, #8] + 801d15c: 8998 ldrh r0, [r3, #12] + 801d15e: f7fb fbbe bl 80188de + 801d162: f8d8 3000 ldr.w r3, [r8] + 801d166: f010 0003 ands.w r0, r0, #3 + 801d16a: eba5 0503 sub.w r5, r5, r3 + 801d16e: bf18 it ne + 801d170: 2001 movne r0, #1 + 801d172: 445d add r5, fp + 801d174: 4405 add r5, r0 + while (seg_list != NULL && + 801d176: 2d00 cmp r5, #0 + 801d178: dc24 bgt.n 801d1c4 + clen = pbuf_clen(next->p); + 801d17a: e9d4 b000 ldrd fp, r0, [r4] + 801d17e: f7fe fe2d bl 801bddc + LWIP_ASSERT("pcb->snd_queuelen >= pbuf_clen(next->p)", (pcb->snd_queuelen >= clen)); + 801d182: f8b6 3066 ldrh.w r3, [r6, #102] ; 0x66 + clen = pbuf_clen(next->p); + 801d186: 4605 mov r5, r0 + LWIP_ASSERT("pcb->snd_queuelen >= pbuf_clen(next->p)", (pcb->snd_queuelen >= clen)); + 801d188: 4283 cmp r3, r0 + 801d18a: d206 bcs.n 801d19a + 801d18c: 464b mov r3, r9 + 801d18e: f240 4257 movw r2, #1111 ; 0x457 + 801d192: 4651 mov r1, sl + 801d194: 4812 ldr r0, [pc, #72] ; (801d1e0 ) + 801d196: f017 fadd bl 8034754 + pcb->snd_queuelen = (u16_t)(pcb->snd_queuelen - clen); + 801d19a: f8b6 3066 ldrh.w r3, [r6, #102] ; 0x66 + tcp_seg_free(next); + 801d19e: 4620 mov r0, r4 + recv_acked = (tcpwnd_size_t)(recv_acked + next->len); + 801d1a0: 4a10 ldr r2, [pc, #64] ; (801d1e4 ) + pcb->snd_queuelen = (u16_t)(pcb->snd_queuelen - clen); + 801d1a2: 1b5b subs r3, r3, r5 + recv_acked = (tcpwnd_size_t)(recv_acked + next->len); + 801d1a4: 8811 ldrh r1, [r2, #0] + pcb->snd_queuelen = (u16_t)(pcb->snd_queuelen - clen); + 801d1a6: f8a6 3066 strh.w r3, [r6, #102] ; 0x66 + recv_acked = (tcpwnd_size_t)(recv_acked + next->len); + 801d1aa: 8923 ldrh r3, [r4, #8] + 801d1ac: 440b add r3, r1 + 801d1ae: 8013 strh r3, [r2, #0] + tcp_seg_free(next); + 801d1b0: f7ff f8ae bl 801c310 + if (pcb->snd_queuelen != 0) { + 801d1b4: f8b6 3066 ldrh.w r3, [r6, #102] ; 0x66 + 801d1b8: b17b cbz r3, 801d1da + LWIP_ASSERT("tcp_receive: valid queue length", + 801d1ba: f1bb 0f00 cmp.w fp, #0 + 801d1be: d10c bne.n 801d1da + 801d1c0: b11f cbz r7, 801d1ca + 801d1c2: 2400 movs r4, #0 +} + 801d1c4: 4620 mov r0, r4 + 801d1c6: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} + LWIP_ASSERT("tcp_receive: valid queue length", + 801d1ca: 4b07 ldr r3, [pc, #28] ; (801d1e8 ) + 801d1cc: f240 4261 movw r2, #1121 ; 0x461 + 801d1d0: 4906 ldr r1, [pc, #24] ; (801d1ec ) + 801d1d2: 4803 ldr r0, [pc, #12] ; (801d1e0 ) + 801d1d4: f017 fabe bl 8034754 + while (seg_list != NULL && + 801d1d8: e7f3 b.n 801d1c2 + seg_list = seg_list->next; + 801d1da: 465c mov r4, fp + 801d1dc: e7b5 b.n 801d14a + 801d1de: bf00 nop + 801d1e0: 08035999 .word 0x08035999 + 801d1e4: 2001e6e0 .word 0x2001e6e0 + 801d1e8: 0803b547 .word 0x0803b547 + 801d1ec: 0803b656 .word 0x0803b656 + 801d1f0: 2001e6c8 .word 0x2001e6c8 + 801d1f4: 0803b62e .word 0x0803b62e + +0801d1f8 : +{ + 801d1f8: e92d 4ff8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} + LWIP_ASSERT("tcp_receive: invalid pcb", pcb != NULL); + 801d1fc: 4604 mov r4, r0 + 801d1fe: b930 cbnz r0, 801d20e + 801d200: 4b3b ldr r3, [pc, #236] ; (801d2f0 ) + 801d202: f240 427b movw r2, #1147 ; 0x47b + 801d206: 493b ldr r1, [pc, #236] ; (801d2f4 ) + 801d208: 483b ldr r0, [pc, #236] ; (801d2f8 ) + 801d20a: f017 faa3 bl 8034754 + LWIP_ASSERT("tcp_receive: wrong state", pcb->state >= ESTABLISHED); + 801d20e: 7d23 ldrb r3, [r4, #20] + 801d210: 2b03 cmp r3, #3 + 801d212: d806 bhi.n 801d222 + 801d214: 4b36 ldr r3, [pc, #216] ; (801d2f0 ) + 801d216: f240 427c movw r2, #1148 ; 0x47c + 801d21a: 4938 ldr r1, [pc, #224] ; (801d2fc ) + 801d21c: 4836 ldr r0, [pc, #216] ; (801d2f8 ) + 801d21e: f017 fa99 bl 8034754 + if (flags & TCP_ACK) { + 801d222: 4a37 ldr r2, [pc, #220] ; (801d300 ) + if (TCP_SEQ_LT(pcb->snd_wl1, seqno) || + 801d224: 4e37 ldr r6, [pc, #220] ; (801d304 ) + if (flags & TCP_ACK) { + 801d226: 7812 ldrb r2, [r2, #0] + if (TCP_SEQ_LT(pcb->snd_wl1, seqno) || + 801d228: 6833 ldr r3, [r6, #0] + if (flags & TCP_ACK) { + 801d22a: f012 0f10 tst.w r2, #16 + 801d22e: 4f36 ldr r7, [pc, #216] ; (801d308 ) + 801d230: f000 809b beq.w 801d36a + (pcb->snd_wl1 == seqno && TCP_SEQ_LT(pcb->snd_wl2, ackno)) || + 801d234: f8df 90d8 ldr.w r9, [pc, #216] ; 801d310 + right_wnd_edge = pcb->snd_wnd + pcb->snd_wl2; + 801d238: f8b4 1060 ldrh.w r1, [r4, #96] ; 0x60 + (pcb->snd_wl1 == seqno && TCP_SEQ_LT(pcb->snd_wl2, ackno)) || + 801d23c: f8d9 2000 ldr.w r2, [r9] + if (TCP_SEQ_LT(pcb->snd_wl1, seqno) || + 801d240: e9d4 0c15 ldrd r0, ip, [r4, #84] ; 0x54 + 801d244: eba0 0e03 sub.w lr, r0, r3 + 801d248: f1be 0f00 cmp.w lr, #0 + 801d24c: db0c blt.n 801d268 + 801d24e: 4298 cmp r0, r3 + 801d250: d103 bne.n 801d25a + (pcb->snd_wl1 == seqno && TCP_SEQ_LT(pcb->snd_wl2, ackno)) || + 801d252: ebac 0002 sub.w r0, ip, r2 + 801d256: 2800 cmp r0, #0 + 801d258: db06 blt.n 801d268 + 801d25a: 4594 cmp ip, r2 + 801d25c: d113 bne.n 801d286 + (pcb->snd_wl2 == ackno && (u32_t)SND_WND_SCALE(pcb, tcphdr->wnd) > pcb->snd_wnd)) { + 801d25e: 482b ldr r0, [pc, #172] ; (801d30c ) + 801d260: 6800 ldr r0, [r0, #0] + 801d262: 89c0 ldrh r0, [r0, #14] + 801d264: 4288 cmp r0, r1 + 801d266: d90e bls.n 801d286 + pcb->snd_wnd = SND_WND_SCALE(pcb, tcphdr->wnd); + 801d268: 4828 ldr r0, [pc, #160] ; (801d30c ) + if (pcb->snd_wnd_max < pcb->snd_wnd) { + 801d26a: f8b4 8062 ldrh.w r8, [r4, #98] ; 0x62 + pcb->snd_wnd = SND_WND_SCALE(pcb, tcphdr->wnd); + 801d26e: 6800 ldr r0, [r0, #0] + 801d270: 89c0 ldrh r0, [r0, #14] + 801d272: fa1f fe80 uxth.w lr, r0 + 801d276: f8a4 0060 strh.w r0, [r4, #96] ; 0x60 + if (pcb->snd_wnd_max < pcb->snd_wnd) { + 801d27a: 45f0 cmp r8, lr + pcb->snd_wl2 = ackno; + 801d27c: e9c4 3215 strd r3, r2, [r4, #84] ; 0x54 + pcb->snd_wnd_max = pcb->snd_wnd; + 801d280: bf38 it cc + 801d282: f8a4 0062 strhcc.w r0, [r4, #98] ; 0x62 + if (TCP_SEQ_LEQ(ackno, pcb->lastack)) { + 801d286: 6c60 ldr r0, [r4, #68] ; 0x44 + 801d288: 1a13 subs r3, r2, r0 + 801d28a: 2b00 cmp r3, #0 + 801d28c: f300 8179 bgt.w 801d582 + if (tcplen == 0) { + 801d290: 883b ldrh r3, [r7, #0] + 801d292: 2b00 cmp r3, #0 + 801d294: f040 8171 bne.w 801d57a + if (pcb->snd_wl2 + pcb->snd_wnd == right_wnd_edge) { + 801d298: f8b4 3060 ldrh.w r3, [r4, #96] ; 0x60 + right_wnd_edge = pcb->snd_wnd + pcb->snd_wl2; + 801d29c: 4461 add r1, ip + if (pcb->snd_wl2 + pcb->snd_wnd == right_wnd_edge) { + 801d29e: 6da5 ldr r5, [r4, #88] ; 0x58 + 801d2a0: 442b add r3, r5 + 801d2a2: 428b cmp r3, r1 + 801d2a4: f040 8169 bne.w 801d57a + if (pcb->rtime >= 0) { + 801d2a8: f9b4 3030 ldrsh.w r3, [r4, #48] ; 0x30 + 801d2ac: 2b00 cmp r3, #0 + 801d2ae: f2c0 8164 blt.w 801d57a + if (pcb->lastack == ackno) { + 801d2b2: 4290 cmp r0, r2 + 801d2b4: f040 8161 bne.w 801d57a + if ((u8_t)(pcb->dupacks + 1) > pcb->dupacks) { + 801d2b8: f894 3043 ldrb.w r3, [r4, #67] ; 0x43 + 801d2bc: 2bff cmp r3, #255 ; 0xff + ++pcb->dupacks; + 801d2be: bf1c itt ne + 801d2c0: 3301 addne r3, #1 + 801d2c2: f884 3043 strbne.w r3, [r4, #67] ; 0x43 + if (pcb->dupacks > 3) { + 801d2c6: f894 3043 ldrb.w r3, [r4, #67] ; 0x43 + 801d2ca: 2b03 cmp r3, #3 + 801d2cc: d922 bls.n 801d314 + TCP_WND_INC(pcb->cwnd, pcb->mss); + 801d2ce: f8b4 2048 ldrh.w r2, [r4, #72] ; 0x48 + 801d2d2: f64f 71ff movw r1, #65535 ; 0xffff + 801d2d6: 8e63 ldrh r3, [r4, #50] ; 0x32 + 801d2d8: 4413 add r3, r2 + 801d2da: b29b uxth r3, r3 + 801d2dc: 429a cmp r2, r3 + 801d2de: bf88 it hi + 801d2e0: 460b movhi r3, r1 + 801d2e2: f8a4 3048 strh.w r3, [r4, #72] ; 0x48 + tcp_rexmit_fast(pcb); + 801d2e6: 4620 mov r0, r4 + 801d2e8: f001 fc86 bl 801ebf8 + if (!found_dupack) { + 801d2ec: e013 b.n 801d316 + 801d2ee: bf00 nop + 801d2f0: 0803b547 .word 0x0803b547 + 801d2f4: 0803b676 .word 0x0803b676 + 801d2f8: 08035999 .word 0x08035999 + 801d2fc: 0803b68f .word 0x0803b68f + 801d300: 2001e6cc .word 0x2001e6cc + 801d304: 2001e6ec .word 0x2001e6ec + 801d308: 2001e706 .word 0x2001e706 + 801d30c: 2001e6f8 .word 0x2001e6f8 + 801d310: 2001e6c8 .word 0x2001e6c8 + if (pcb->dupacks >= 3) { + 801d314: d0e7 beq.n 801d2e6 + if (pcb->rttest && TCP_SEQ_LT(pcb->rtseq, ackno)) { + 801d316: 6b63 ldr r3, [r4, #52] ; 0x34 + 801d318: b33b cbz r3, 801d36a + 801d31a: 6ba2 ldr r2, [r4, #56] ; 0x38 + 801d31c: f8d9 1000 ldr.w r1, [r9] + 801d320: 1a52 subs r2, r2, r1 + 801d322: 2a00 cmp r2, #0 + 801d324: da21 bge.n 801d36a + m = (s16_t)(tcp_ticks - pcb->rttest); + 801d326: 4ab6 ldr r2, [pc, #728] ; (801d600 ) + 801d328: b29b uxth r3, r3 + m = (s16_t)(m - (pcb->sa >> 3)); + 801d32a: f9b4 c03c ldrsh.w ip, [r4, #60] ; 0x3c + m = (s16_t)(tcp_ticks - pcb->rttest); + 801d32e: 8815 ldrh r5, [r2, #0] + m = (s16_t)(m - (pcb->sa >> 3)); + 801d330: f3cc 01cf ubfx r1, ip, #3, #16 + m = (s16_t)(tcp_ticks - pcb->rttest); + 801d334: 1aea subs r2, r5, r3 + m = (s16_t)(m - (pcb->sa >> 3)); + 801d336: 1a52 subs r2, r2, r1 + 801d338: b210 sxth r0, r2 + pcb->sa = (s16_t)(pcb->sa + m); + 801d33a: fa1c f282 uxtah r2, ip, r2 + if (m < 0) { + 801d33e: 2800 cmp r0, #0 + pcb->sa = (s16_t)(pcb->sa + m); + 801d340: b212 sxth r2, r2 + m = (s16_t) - m; + 801d342: bfb8 it lt + 801d344: 1b5b sublt r3, r3, r5 + pcb->sa = (s16_t)(pcb->sa + m); + 801d346: 87a2 strh r2, [r4, #60] ; 0x3c + m = (s16_t) - m; + 801d348: bfb8 it lt + 801d34a: 18c9 addlt r1, r1, r3 + m = (s16_t)(m - (pcb->sv >> 2)); + 801d34c: f9b4 303e ldrsh.w r3, [r4, #62] ; 0x3e + m = (s16_t) - m; + 801d350: bfb8 it lt + 801d352: b208 sxthlt r0, r1 + pcb->sv = (s16_t)(pcb->sv + m); + 801d354: eba3 03a3 sub.w r3, r3, r3, asr #2 + 801d358: 4403 add r3, r0 + 801d35a: b29b uxth r3, r3 + 801d35c: 87e3 strh r3, [r4, #62] ; 0x3e + pcb->rto = (s16_t)((pcb->sa >> 3) + pcb->sv); + 801d35e: eb03 03e2 add.w r3, r3, r2, asr #3 + 801d362: f8a4 3040 strh.w r3, [r4, #64] ; 0x40 + pcb->rttest = 0; + 801d366: 2300 movs r3, #0 + 801d368: 6363 str r3, [r4, #52] ; 0x34 + if ((tcplen > 0) && (pcb->state < CLOSE_WAIT)) { + 801d36a: 8838 ldrh r0, [r7, #0] + if (TCP_SEQ_BETWEEN(pcb->rcv_nxt, seqno + 1, seqno + tcplen - 1)) { + 801d36c: 6833 ldr r3, [r6, #0] + 801d36e: 6a62 ldr r2, [r4, #36] ; 0x24 + if ((tcplen > 0) && (pcb->state < CLOSE_WAIT)) { + 801d370: 2800 cmp r0, #0 + 801d372: f000 835a beq.w 801da2a + 801d376: 7d21 ldrb r1, [r4, #20] + 801d378: 2906 cmp r1, #6 + 801d37a: f200 8356 bhi.w 801da2a + if (TCP_SEQ_BETWEEN(pcb->rcv_nxt, seqno + 1, seqno + tcplen - 1)) { + 801d37e: 1ad5 subs r5, r2, r3 + 801d380: 2d01 cmp r5, #1 + 801d382: f100 81a8 bmi.w 801d6d6 + 801d386: f1c3 0101 rsb r1, r3, #1 + 801d38a: 1a09 subs r1, r1, r0 + 801d38c: 4411 add r1, r2 + 801d38e: 2900 cmp r1, #0 + 801d390: f300 81a1 bgt.w 801d6d6 + struct pbuf *p = inseg.p; + 801d394: f8df 9280 ldr.w r9, [pc, #640] ; 801d618 + 801d398: f8d9 8004 ldr.w r8, [r9, #4] + LWIP_ASSERT("inseg.p != NULL", inseg.p); + 801d39c: f1b8 0f00 cmp.w r8, #0 + 801d3a0: d106 bne.n 801d3b0 + 801d3a2: 4b98 ldr r3, [pc, #608] ; (801d604 ) + 801d3a4: f240 5294 movw r2, #1428 ; 0x594 + 801d3a8: 4997 ldr r1, [pc, #604] ; (801d608 ) + 801d3aa: 4898 ldr r0, [pc, #608] ; (801d60c ) + 801d3ac: f017 f9d2 bl 8034754 + LWIP_ASSERT("insane offset!", (off32 < 0xffff)); + 801d3b0: f64f 73fe movw r3, #65534 ; 0xfffe + 801d3b4: 429d cmp r5, r3 + 801d3b6: d906 bls.n 801d3c6 + 801d3b8: 4b92 ldr r3, [pc, #584] ; (801d604 ) + 801d3ba: f240 5295 movw r2, #1429 ; 0x595 + 801d3be: 4994 ldr r1, [pc, #592] ; (801d610 ) + 801d3c0: 4892 ldr r0, [pc, #584] ; (801d60c ) + 801d3c2: f017 f9c7 bl 8034754 + LWIP_ASSERT("pbuf too short!", (((s32_t)inseg.p->tot_len) >= off)); + 801d3c6: f8d9 3004 ldr.w r3, [r9, #4] + off = (u16_t)off32; + 801d3ca: b2ad uxth r5, r5 + LWIP_ASSERT("pbuf too short!", (((s32_t)inseg.p->tot_len) >= off)); + 801d3cc: 891b ldrh r3, [r3, #8] + 801d3ce: 42ab cmp r3, r5 + 801d3d0: d206 bcs.n 801d3e0 + 801d3d2: 4b8c ldr r3, [pc, #560] ; (801d604 ) + 801d3d4: f240 5297 movw r2, #1431 ; 0x597 + 801d3d8: 498e ldr r1, [pc, #568] ; (801d614 ) + 801d3da: 488c ldr r0, [pc, #560] ; (801d60c ) + 801d3dc: f017 f9ba bl 8034754 + inseg.len -= off; + 801d3e0: f8b9 3008 ldrh.w r3, [r9, #8] + p->len = 0; + 801d3e4: 2100 movs r1, #0 + inseg.len -= off; + 801d3e6: 1b5b subs r3, r3, r5 + 801d3e8: f8a9 3008 strh.w r3, [r9, #8] + new_tot_len = (u16_t)(inseg.p->tot_len - off); + 801d3ec: f8d9 3004 ldr.w r3, [r9, #4] + 801d3f0: 891b ldrh r3, [r3, #8] + 801d3f2: 1b5b subs r3, r3, r5 + 801d3f4: b29b uxth r3, r3 + while (p->len < off) { + 801d3f6: f8b8 200a ldrh.w r2, [r8, #10] + 801d3fa: 42aa cmp r2, r5 + 801d3fc: f0c0 8162 bcc.w 801d6c4 + pbuf_remove_header(p, off); + 801d400: 4629 mov r1, r5 + 801d402: 4640 mov r0, r8 + 801d404: f7fe fb64 bl 801bad0 + inseg.tcphdr->seqno = seqno = pcb->rcv_nxt; + 801d408: 6a63 ldr r3, [r4, #36] ; 0x24 + 801d40a: f8d9 200c ldr.w r2, [r9, #12] + 801d40e: 6033 str r3, [r6, #0] + 801d410: 6053 str r3, [r2, #4] + if (TCP_SEQ_BETWEEN(seqno, pcb->rcv_nxt, + 801d412: 6833 ldr r3, [r6, #0] + 801d414: 6a62 ldr r2, [r4, #36] ; 0x24 + 801d416: 1a99 subs r1, r3, r2 + 801d418: 2900 cmp r1, #0 + 801d41a: f2c0 8231 blt.w 801d880 + 801d41e: 1c58 adds r0, r3, #1 + 801d420: 8d25 ldrh r5, [r4, #40] ; 0x28 + 801d422: 1a81 subs r1, r0, r2 + 801d424: 1b49 subs r1, r1, r5 + 801d426: 2900 cmp r1, #0 + 801d428: f300 822a bgt.w 801d880 + if (pcb->rcv_nxt == seqno) { + 801d42c: 4293 cmp r3, r2 + 801d42e: f040 8221 bne.w 801d874 + tcplen = TCP_TCPLEN(&inseg); + 801d432: 4d79 ldr r5, [pc, #484] ; (801d618 ) + 801d434: 68eb ldr r3, [r5, #12] + 801d436: f8b5 8008 ldrh.w r8, [r5, #8] + 801d43a: 8998 ldrh r0, [r3, #12] + 801d43c: f7fb fa4f bl 80188de + 801d440: f010 0003 ands.w r0, r0, #3 + if (tcplen > pcb->rcv_wnd) { + 801d444: 8d22 ldrh r2, [r4, #40] ; 0x28 + tcplen = TCP_TCPLEN(&inseg); + 801d446: bf18 it ne + 801d448: 2001 movne r0, #1 + 801d44a: eb08 0300 add.w r3, r8, r0 + 801d44e: b29b uxth r3, r3 + if (tcplen > pcb->rcv_wnd) { + 801d450: 429a cmp r2, r3 + tcplen = TCP_TCPLEN(&inseg); + 801d452: 803b strh r3, [r7, #0] + if (tcplen > pcb->rcv_wnd) { + 801d454: d241 bcs.n 801d4da + if (TCPH_FLAGS(inseg.tcphdr) & TCP_FIN) { + 801d456: 68eb ldr r3, [r5, #12] + 801d458: 8998 ldrh r0, [r3, #12] + 801d45a: f7fb fa40 bl 80188de + 801d45e: 07c2 lsls r2, r0, #31 + 801d460: d50f bpl.n 801d482 + TCPH_FLAGS_SET(inseg.tcphdr, TCPH_FLAGS(inseg.tcphdr) & ~(unsigned int)TCP_FIN); + 801d462: 68eb ldr r3, [r5, #12] + 801d464: f8b3 800c ldrh.w r8, [r3, #12] + 801d468: 4640 mov r0, r8 + 801d46a: f428 587c bic.w r8, r8, #16128 ; 0x3f00 + 801d46e: f7fb fa36 bl 80188de + 801d472: f000 003e and.w r0, r0, #62 ; 0x3e + 801d476: f7fb fa32 bl 80188de + 801d47a: 68eb ldr r3, [r5, #12] + 801d47c: ea40 0008 orr.w r0, r0, r8 + 801d480: 8198 strh r0, [r3, #12] + inseg.len = (u16_t)pcb->rcv_wnd; + 801d482: 8d23 ldrh r3, [r4, #40] ; 0x28 + 801d484: 812b strh r3, [r5, #8] + if (TCPH_FLAGS(inseg.tcphdr) & TCP_SYN) { + 801d486: 68eb ldr r3, [r5, #12] + 801d488: 8998 ldrh r0, [r3, #12] + 801d48a: f7fb fa28 bl 80188de + 801d48e: 0783 lsls r3, r0, #30 + pbuf_realloc(inseg.p, inseg.len); + 801d490: 6868 ldr r0, [r5, #4] + inseg.len -= 1; + 801d492: bf42 ittt mi + 801d494: 892b ldrhmi r3, [r5, #8] + 801d496: f103 33ff addmi.w r3, r3, #4294967295 + 801d49a: 812b strhmi r3, [r5, #8] + pbuf_realloc(inseg.p, inseg.len); + 801d49c: 8929 ldrh r1, [r5, #8] + 801d49e: f7fe fc45 bl 801bd2c + tcplen = TCP_TCPLEN(&inseg); + 801d4a2: 68eb ldr r3, [r5, #12] + 801d4a4: f8b5 8008 ldrh.w r8, [r5, #8] + 801d4a8: 8998 ldrh r0, [r3, #12] + 801d4aa: f7fb fa18 bl 80188de + 801d4ae: f010 0003 ands.w r0, r0, #3 + LWIP_ASSERT("tcp_receive: segment not trimmed correctly to rcv_wnd\n", + 801d4b2: 6832 ldr r2, [r6, #0] + tcplen = TCP_TCPLEN(&inseg); + 801d4b4: bf18 it ne + 801d4b6: 2001 movne r0, #1 + LWIP_ASSERT("tcp_receive: segment not trimmed correctly to rcv_wnd\n", + 801d4b8: 6a61 ldr r1, [r4, #36] ; 0x24 + tcplen = TCP_TCPLEN(&inseg); + 801d4ba: eb08 0300 add.w r3, r8, r0 + 801d4be: b29b uxth r3, r3 + 801d4c0: 803b strh r3, [r7, #0] + LWIP_ASSERT("tcp_receive: segment not trimmed correctly to rcv_wnd\n", + 801d4c2: 4413 add r3, r2 + 801d4c4: 8d22 ldrh r2, [r4, #40] ; 0x28 + 801d4c6: 440a add r2, r1 + 801d4c8: 4293 cmp r3, r2 + 801d4ca: d006 beq.n 801d4da + 801d4cc: 4b4d ldr r3, [pc, #308] ; (801d604 ) + 801d4ce: f240 52cb movw r2, #1483 ; 0x5cb + 801d4d2: 4952 ldr r1, [pc, #328] ; (801d61c ) + 801d4d4: 484d ldr r0, [pc, #308] ; (801d60c ) + 801d4d6: f017 f93d bl 8034754 + if (pcb->ooseq != NULL) { + 801d4da: 6f63 ldr r3, [r4, #116] ; 0x74 + 801d4dc: 2b00 cmp r3, #0 + 801d4de: f000 8109 beq.w 801d6f4 + if (TCPH_FLAGS(inseg.tcphdr) & TCP_FIN) { + 801d4e2: 68eb ldr r3, [r5, #12] + 801d4e4: 8998 ldrh r0, [r3, #12] + 801d4e6: f7fb f9fa bl 80188de + 801d4ea: 07c0 lsls r0, r0, #31 + 801d4ec: f100 80ff bmi.w 801d6ee + struct tcp_seg *next = pcb->ooseq; + 801d4f0: f8d4 8074 ldr.w r8, [r4, #116] ; 0x74 + TCP_SEQ_GEQ(seqno + tcplen, + 801d4f4: 6830 ldr r0, [r6, #0] + 801d4f6: 883b ldrh r3, [r7, #0] + 801d4f8: 4403 add r3, r0 + while (next && + 801d4fa: f1b8 0f00 cmp.w r8, #0 + 801d4fe: d039 beq.n 801d574 + TCP_SEQ_GEQ(seqno + tcplen, + 801d500: f8d8 c00c ldr.w ip, [r8, #12] + 801d504: f8b8 1008 ldrh.w r1, [r8, #8] + 801d508: f8dc 2004 ldr.w r2, [ip, #4] + 801d50c: 4411 add r1, r2 + 801d50e: 1a59 subs r1, r3, r1 + while (next && + 801d510: 2900 cmp r1, #0 + 801d512: f280 811c bge.w 801d74e + TCP_SEQ_GT(seqno + tcplen, + 801d516: 1a9b subs r3, r3, r2 + if (next && + 801d518: 2b00 cmp r3, #0 + 801d51a: dd2b ble.n 801d574 + if (TCPH_FLAGS(inseg.tcphdr) & TCP_SYN) { + 801d51c: 68eb ldr r3, [r5, #12] + inseg.len = (u16_t)(next->tcphdr->seqno - seqno); + 801d51e: 1a12 subs r2, r2, r0 + 801d520: 812a strh r2, [r5, #8] + if (TCPH_FLAGS(inseg.tcphdr) & TCP_SYN) { + 801d522: 8998 ldrh r0, [r3, #12] + 801d524: f7fb f9db bl 80188de + 801d528: 0783 lsls r3, r0, #30 + pbuf_realloc(inseg.p, inseg.len); + 801d52a: 6868 ldr r0, [r5, #4] + inseg.len -= 1; + 801d52c: bf42 ittt mi + 801d52e: 892b ldrhmi r3, [r5, #8] + 801d530: f103 33ff addmi.w r3, r3, #4294967295 + 801d534: 812b strhmi r3, [r5, #8] + pbuf_realloc(inseg.p, inseg.len); + 801d536: 8929 ldrh r1, [r5, #8] + 801d538: f7fe fbf8 bl 801bd2c + tcplen = TCP_TCPLEN(&inseg); + 801d53c: 68eb ldr r3, [r5, #12] + 801d53e: f8b5 9008 ldrh.w r9, [r5, #8] + 801d542: 8998 ldrh r0, [r3, #12] + 801d544: f7fb f9cb bl 80188de + 801d548: f010 0003 ands.w r0, r0, #3 + LWIP_ASSERT("tcp_receive: segment not trimmed correctly to ooseq queue\n", + 801d54c: 6832 ldr r2, [r6, #0] + tcplen = TCP_TCPLEN(&inseg); + 801d54e: bf18 it ne + 801d550: 2001 movne r0, #1 + 801d552: eb09 0300 add.w r3, r9, r0 + 801d556: b29b uxth r3, r3 + 801d558: 803b strh r3, [r7, #0] + LWIP_ASSERT("tcp_receive: segment not trimmed correctly to ooseq queue\n", + 801d55a: 4413 add r3, r2 + 801d55c: f8d8 200c ldr.w r2, [r8, #12] + 801d560: 6852 ldr r2, [r2, #4] + 801d562: 4293 cmp r3, r2 + 801d564: d006 beq.n 801d574 + 801d566: 4b27 ldr r3, [pc, #156] ; (801d604 ) + 801d568: f240 52fc movw r2, #1532 ; 0x5fc + 801d56c: 492c ldr r1, [pc, #176] ; (801d620 ) + 801d56e: 4827 ldr r0, [pc, #156] ; (801d60c ) + 801d570: f017 f8f0 bl 8034754 + pcb->ooseq = next; + 801d574: f8c4 8074 str.w r8, [r4, #116] ; 0x74 + 801d578: e0bc b.n 801d6f4 + pcb->dupacks = 0; + 801d57a: 2300 movs r3, #0 + 801d57c: f884 3043 strb.w r3, [r4, #67] ; 0x43 + 801d580: e6c9 b.n 801d316 + } else if (TCP_SEQ_BETWEEN(ackno, pcb->lastack + 1, pcb->snd_nxt)) { + 801d582: 6d21 ldr r1, [r4, #80] ; 0x50 + 801d584: 1a51 subs r1, r2, r1 + 801d586: 2900 cmp r1, #0 + 801d588: f300 8098 bgt.w 801d6bc + if (pcb->flags & TF_INFR) { + 801d58c: 8b61 ldrh r1, [r4, #26] + 801d58e: 0748 lsls r0, r1, #29 + 801d590: d509 bpl.n 801d5a6 + tcp_clear_flags(pcb, TF_INFR); + 801d592: f021 0104 bic.w r1, r1, #4 + 801d596: 8361 strh r1, [r4, #26] + pcb->cwnd = pcb->ssthresh; + 801d598: f8b4 104a ldrh.w r1, [r4, #74] ; 0x4a + 801d59c: f8a4 1048 strh.w r1, [r4, #72] ; 0x48 + pcb->bytes_acked = 0; + 801d5a0: 2100 movs r1, #0 + 801d5a2: f8a4 106a strh.w r1, [r4, #106] ; 0x6a + pcb->rto = (s16_t)((pcb->sa >> 3) + pcb->sv); + 801d5a6: f9b4 003c ldrsh.w r0, [r4, #60] ; 0x3c + 801d5aa: 8fe1 ldrh r1, [r4, #62] ; 0x3e + pcb->lastack = ackno; + 801d5ac: 6462 str r2, [r4, #68] ; 0x44 + pcb->rto = (s16_t)((pcb->sa >> 3) + pcb->sv); + 801d5ae: eb01 01e0 add.w r1, r1, r0, asr #3 + if (pcb->state >= ESTABLISHED) { + 801d5b2: 7d22 ldrb r2, [r4, #20] + pcb->rto = (s16_t)((pcb->sa >> 3) + pcb->sv); + 801d5b4: f8a4 1040 strh.w r1, [r4, #64] ; 0x40 + if (pcb->state >= ESTABLISHED) { + 801d5b8: 2a03 cmp r2, #3 + pcb->nrtx = 0; + 801d5ba: f04f 0100 mov.w r1, #0 + 801d5be: f8a4 1042 strh.w r1, [r4, #66] ; 0x42 + if (pcb->state >= ESTABLISHED) { + 801d5c2: d939 bls.n 801d638 + if (pcb->cwnd < pcb->ssthresh) { + 801d5c4: f8b4 2048 ldrh.w r2, [r4, #72] ; 0x48 + acked = (tcpwnd_size_t)(ackno - pcb->lastack); + 801d5c8: b29b uxth r3, r3 + if (pcb->cwnd < pcb->ssthresh) { + 801d5ca: f8b4 104a ldrh.w r1, [r4, #74] ; 0x4a + 801d5ce: 4291 cmp r1, r2 + 801d5d0: d928 bls.n 801d624 + u8_t num_seg = (pcb->flags & TF_RTO) ? 1 : 2; + 801d5d2: 8b61 ldrh r1, [r4, #26] + 801d5d4: f411 6f00 tst.w r1, #2048 ; 0x800 + increase = LWIP_MIN(acked, (tcpwnd_size_t)(num_seg * pcb->mss)); + 801d5d8: 8e61 ldrh r1, [r4, #50] ; 0x32 + u8_t num_seg = (pcb->flags & TF_RTO) ? 1 : 2; + 801d5da: bf14 ite ne + 801d5dc: 2001 movne r0, #1 + 801d5de: 2002 moveq r0, #2 + increase = LWIP_MIN(acked, (tcpwnd_size_t)(num_seg * pcb->mss)); + 801d5e0: fb11 f100 smulbb r1, r1, r0 + 801d5e4: b289 uxth r1, r1 + TCP_WND_INC(pcb->cwnd, increase); + 801d5e6: 4299 cmp r1, r3 + 801d5e8: bf94 ite ls + 801d5ea: 1850 addls r0, r2, r1 + 801d5ec: 18d0 addhi r0, r2, r3 + 801d5ee: b283 uxth r3, r0 + TCP_WND_INC(pcb->cwnd, pcb->mss); + 801d5f0: 429a cmp r2, r3 + 801d5f2: d901 bls.n 801d5f8 + TCP_WND_INC(pcb->cwnd, increase); + 801d5f4: f64f 73ff movw r3, #65535 ; 0xffff + TCP_WND_INC(pcb->cwnd, pcb->mss); + 801d5f8: f8a4 3048 strh.w r3, [r4, #72] ; 0x48 + 801d5fc: e01c b.n 801d638 + 801d5fe: bf00 nop + 801d600: 2001e6bc .word 0x2001e6bc + 801d604: 0803b547 .word 0x0803b547 + 801d608: 0803b6a8 .word 0x0803b6a8 + 801d60c: 08035999 .word 0x08035999 + 801d610: 0803b6b8 .word 0x0803b6b8 + 801d614: 0803b6c7 .word 0x0803b6c7 + 801d618: 2001e6d0 .word 0x2001e6d0 + 801d61c: 0803b6d7 .word 0x0803b6d7 + 801d620: 0803b70e .word 0x0803b70e + TCP_WND_INC(pcb->bytes_acked, acked); + 801d624: f8b4 106a ldrh.w r1, [r4, #106] ; 0x6a + 801d628: 440b add r3, r1 + 801d62a: b29b uxth r3, r3 + 801d62c: 4299 cmp r1, r3 + 801d62e: d82c bhi.n 801d68a + if (pcb->bytes_acked >= pcb->cwnd) { + 801d630: 429a cmp r2, r3 + 801d632: d92c bls.n 801d68e + 801d634: f8a4 306a strh.w r3, [r4, #106] ; 0x6a + pcb->unacked = tcp_free_acked_segments(pcb, pcb->unacked, "unacked", pcb->unsent); + 801d638: 4620 mov r0, r4 + 801d63a: e9d4 211b ldrd r2, r1, [r4, #108] ; 0x6c + 801d63e: f7ff fd79 bl 801d134 + pcb->unsent = tcp_free_acked_segments(pcb, pcb->unsent, "unsent", pcb->unacked); + 801d642: 6ee1 ldr r1, [r4, #108] ; 0x6c + pcb->unacked = tcp_free_acked_segments(pcb, pcb->unacked, "unacked", pcb->unsent); + 801d644: 4602 mov r2, r0 + 801d646: 6720 str r0, [r4, #112] ; 0x70 + pcb->unsent = tcp_free_acked_segments(pcb, pcb->unsent, "unsent", pcb->unacked); + 801d648: 4620 mov r0, r4 + 801d64a: f7ff fd73 bl 801d134 + if (pcb->unacked == NULL) { + 801d64e: 6f22 ldr r2, [r4, #112] ; 0x70 + pcb->unsent = tcp_free_acked_segments(pcb, pcb->unsent, "unsent", pcb->unacked); + 801d650: 66e0 str r0, [r4, #108] ; 0x6c + if (pcb->unacked == NULL) { + 801d652: fab2 f382 clz r3, r2 + 801d656: 095b lsrs r3, r3, #5 + 801d658: 425b negs r3, r3 + 801d65a: 8623 strh r3, [r4, #48] ; 0x30 + pcb->polltmr = 0; + 801d65c: 2300 movs r3, #0 + 801d65e: 7723 strb r3, [r4, #28] + if (pcb->unsent == NULL) { + 801d660: b908 cbnz r0, 801d666 + pcb->unsent_oversize = 0; + 801d662: f8a4 0068 strh.w r0, [r4, #104] ; 0x68 + pcb->snd_buf = (tcpwnd_size_t)(pcb->snd_buf + recv_acked); + 801d666: 499f ldr r1, [pc, #636] ; (801d8e4 ) + 801d668: f8b4 3064 ldrh.w r3, [r4, #100] ; 0x64 + 801d66c: 8809 ldrh r1, [r1, #0] + 801d66e: 440b add r3, r1 + 801d670: f8a4 3064 strh.w r3, [r4, #100] ; 0x64 + if (pcb->flags & TF_RTO) { + 801d674: 8b63 ldrh r3, [r4, #26] + 801d676: 0519 lsls r1, r3, #20 + 801d678: f57f ae4d bpl.w 801d316 + if (pcb->unacked == NULL) { + 801d67c: b9d2 cbnz r2, 801d6b4 + if ((pcb->unsent == NULL) || + 801d67e: b968 cbnz r0, 801d69c + tcp_clear_flags(pcb, TF_RTO); + 801d680: 8b63 ldrh r3, [r4, #26] + 801d682: f423 6300 bic.w r3, r3, #2048 ; 0x800 + 801d686: 8363 strh r3, [r4, #26] + 801d688: e645 b.n 801d316 + TCP_WND_INC(pcb->bytes_acked, acked); + 801d68a: f64f 73ff movw r3, #65535 ; 0xffff + pcb->bytes_acked = (tcpwnd_size_t)(pcb->bytes_acked - pcb->cwnd); + 801d68e: 1a9b subs r3, r3, r2 + 801d690: f8a4 306a strh.w r3, [r4, #106] ; 0x6a + TCP_WND_INC(pcb->cwnd, pcb->mss); + 801d694: 8e63 ldrh r3, [r4, #50] ; 0x32 + 801d696: 4413 add r3, r2 + 801d698: b29b uxth r3, r3 + 801d69a: e7a9 b.n 801d5f0 + (TCP_SEQ_LEQ(pcb->rto_end, lwip_ntohl(pcb->unsent->tcphdr->seqno)))) { + 801d69c: f8d4 804c ldr.w r8, [r4, #76] ; 0x4c + 801d6a0: 68c3 ldr r3, [r0, #12] + } else if (TCP_SEQ_LEQ(pcb->rto_end, lwip_ntohl(pcb->unacked->tcphdr->seqno))) { + 801d6a2: 6858 ldr r0, [r3, #4] + 801d6a4: f7fb f91e bl 80188e4 + 801d6a8: eba8 0000 sub.w r0, r8, r0 + 801d6ac: 2800 cmp r0, #0 + 801d6ae: f73f ae32 bgt.w 801d316 + 801d6b2: e7e5 b.n 801d680 + 801d6b4: f8d4 804c ldr.w r8, [r4, #76] ; 0x4c + 801d6b8: 68d3 ldr r3, [r2, #12] + 801d6ba: e7f2 b.n 801d6a2 + tcp_send_empty_ack(pcb); + 801d6bc: 4620 mov r0, r4 + 801d6be: f001 fb15 bl 801ecec + 801d6c2: e628 b.n 801d316 + off -= p->len; + 801d6c4: 1aaa subs r2, r5, r2 + p->tot_len = new_tot_len; + 801d6c6: f8a8 3008 strh.w r3, [r8, #8] + p->len = 0; + 801d6ca: f8a8 100a strh.w r1, [r8, #10] + off -= p->len; + 801d6ce: b295 uxth r5, r2 + p = p->next; + 801d6d0: f8d8 8000 ldr.w r8, [r8] + 801d6d4: e68f b.n 801d3f6 + if (TCP_SEQ_LT(seqno, pcb->rcv_nxt)) { + 801d6d6: 1a9b subs r3, r3, r2 + 801d6d8: 2b00 cmp r3, #0 + tcp_ack_now(pcb); + 801d6da: bfbe ittt lt + 801d6dc: 8b63 ldrhlt r3, [r4, #26] + 801d6de: f043 0302 orrlt.w r3, r3, #2 + 801d6e2: 8363 strhlt r3, [r4, #26] + 801d6e4: e695 b.n 801d412 + pcb->ooseq = pcb->ooseq->next; + 801d6e6: 6803 ldr r3, [r0, #0] + 801d6e8: 6763 str r3, [r4, #116] ; 0x74 + tcp_seg_free(old_ooseq); + 801d6ea: f7fe fe11 bl 801c310 + while (pcb->ooseq != NULL) { + 801d6ee: 6f60 ldr r0, [r4, #116] ; 0x74 + 801d6f0: 2800 cmp r0, #0 + 801d6f2: d1f8 bne.n 801d6e6 + pcb->rcv_nxt = seqno + tcplen; + 801d6f4: 883a ldrh r2, [r7, #0] + 801d6f6: 6833 ldr r3, [r6, #0] + 801d6f8: 4413 add r3, r2 + 801d6fa: 6263 str r3, [r4, #36] ; 0x24 + LWIP_ASSERT("tcp_receive: tcplen > rcv_wnd\n", pcb->rcv_wnd >= tcplen); + 801d6fc: 8d23 ldrh r3, [r4, #40] ; 0x28 + 801d6fe: 4293 cmp r3, r2 + 801d700: d206 bcs.n 801d710 + 801d702: 4b79 ldr r3, [pc, #484] ; (801d8e8 ) + 801d704: f240 6207 movw r2, #1543 ; 0x607 + 801d708: 4978 ldr r1, [pc, #480] ; (801d8ec ) + 801d70a: 4879 ldr r0, [pc, #484] ; (801d8f0 ) + 801d70c: f017 f822 bl 8034754 + pcb->rcv_wnd -= tcplen; + 801d710: 8d23 ldrh r3, [r4, #40] ; 0x28 + tcp_update_rcv_ann_wnd(pcb); + 801d712: 4620 mov r0, r4 + pcb->rcv_wnd -= tcplen; + 801d714: 883a ldrh r2, [r7, #0] + 801d716: 1a9b subs r3, r3, r2 + 801d718: 8523 strh r3, [r4, #40] ; 0x28 + tcp_update_rcv_ann_wnd(pcb); + 801d71a: f7fe fd85 bl 801c228 + if (inseg.p->tot_len > 0) { + 801d71e: 686b ldr r3, [r5, #4] + 801d720: 891a ldrh r2, [r3, #8] + 801d722: b11a cbz r2, 801d72c + recv_data = inseg.p; + 801d724: 4a73 ldr r2, [pc, #460] ; (801d8f4 ) + 801d726: 6013 str r3, [r2, #0] + inseg.p = NULL; + 801d728: 2300 movs r3, #0 + 801d72a: 606b str r3, [r5, #4] + if (TCPH_FLAGS(inseg.tcphdr) & TCP_FIN) { + 801d72c: 68eb ldr r3, [r5, #12] + 801d72e: 8998 ldrh r0, [r3, #12] + 801d730: f7fb f8d5 bl 80188de + 801d734: 07c5 lsls r5, r0, #31 + 801d736: d504 bpl.n 801d742 + recv_flags |= TF_GOT_FIN; + 801d738: 4a6f ldr r2, [pc, #444] ; (801d8f8 ) + 801d73a: 7813 ldrb r3, [r2, #0] + 801d73c: f043 0320 orr.w r3, r3, #32 + 801d740: 7013 strb r3, [r2, #0] + LWIP_ASSERT("tcp_receive: ooseq tcplen > rcv_wnd\n", + 801d742: 4f69 ldr r7, [pc, #420] ; (801d8e8 ) + 801d744: f8df 81b8 ldr.w r8, [pc, #440] ; 801d900 + 801d748: f8df 91a4 ldr.w r9, [pc, #420] ; 801d8f0 + 801d74c: e07c b.n 801d848 + if ((TCPH_FLAGS(next->tcphdr) & TCP_FIN) != 0 && + 801d74e: f8bc 000c ldrh.w r0, [ip, #12] + 801d752: f7fb f8c4 bl 80188de + 801d756: 07c1 lsls r1, r0, #31 + 801d758: d51b bpl.n 801d792 + (TCPH_FLAGS(inseg.tcphdr) & TCP_SYN) == 0) { + 801d75a: 68eb ldr r3, [r5, #12] + 801d75c: 8998 ldrh r0, [r3, #12] + 801d75e: f7fb f8be bl 80188de + if ((TCPH_FLAGS(next->tcphdr) & TCP_FIN) != 0 && + 801d762: 0782 lsls r2, r0, #30 + 801d764: d415 bmi.n 801d792 + TCPH_SET_FLAG(inseg.tcphdr, TCP_FIN); + 801d766: 68eb ldr r3, [r5, #12] + 801d768: 2001 movs r0, #1 + 801d76a: f8b3 900c ldrh.w r9, [r3, #12] + 801d76e: f7fb f8b6 bl 80188de + 801d772: 68eb ldr r3, [r5, #12] + 801d774: ea49 0000 orr.w r0, r9, r0 + tcplen = TCP_TCPLEN(&inseg); + 801d778: f8b5 9008 ldrh.w r9, [r5, #8] + TCPH_SET_FLAG(inseg.tcphdr, TCP_FIN); + 801d77c: 8198 strh r0, [r3, #12] + tcplen = TCP_TCPLEN(&inseg); + 801d77e: b280 uxth r0, r0 + 801d780: f7fb f8ad bl 80188de + 801d784: f010 0003 ands.w r0, r0, #3 + 801d788: bf18 it ne + 801d78a: 2001 movne r0, #1 + 801d78c: 4481 add r9, r0 + 801d78e: f8a7 9000 strh.w r9, [r7] + next = next->next; + 801d792: f8d8 9000 ldr.w r9, [r8] + tcp_seg_free(tmp); + 801d796: 4640 mov r0, r8 + 801d798: f7fe fdba bl 801c310 + next = next->next; + 801d79c: 46c8 mov r8, r9 + 801d79e: e6a9 b.n 801d4f4 + seqno = pcb->ooseq->tcphdr->seqno; + 801d7a0: 6033 str r3, [r6, #0] + pcb->rcv_nxt += TCP_TCPLEN(cseg); + 801d7a2: 8990 ldrh r0, [r2, #12] + 801d7a4: f8b5 a008 ldrh.w sl, [r5, #8] + 801d7a8: f7fb f899 bl 80188de + 801d7ac: 6a63 ldr r3, [r4, #36] ; 0x24 + 801d7ae: f010 0003 ands.w r0, r0, #3 + LWIP_ASSERT("tcp_receive: ooseq tcplen > rcv_wnd\n", + 801d7b2: f8b5 b008 ldrh.w fp, [r5, #8] + pcb->rcv_nxt += TCP_TCPLEN(cseg); + 801d7b6: bf18 it ne + 801d7b8: 2001 movne r0, #1 + 801d7ba: 449a add sl, r3 + LWIP_ASSERT("tcp_receive: ooseq tcplen > rcv_wnd\n", + 801d7bc: 68eb ldr r3, [r5, #12] + pcb->rcv_nxt += TCP_TCPLEN(cseg); + 801d7be: 4450 add r0, sl + LWIP_ASSERT("tcp_receive: ooseq tcplen > rcv_wnd\n", + 801d7c0: f8b4 a028 ldrh.w sl, [r4, #40] ; 0x28 + pcb->rcv_nxt += TCP_TCPLEN(cseg); + 801d7c4: 6260 str r0, [r4, #36] ; 0x24 + LWIP_ASSERT("tcp_receive: ooseq tcplen > rcv_wnd\n", + 801d7c6: 8998 ldrh r0, [r3, #12] + 801d7c8: f7fb f889 bl 80188de + 801d7cc: f010 0003 ands.w r0, r0, #3 + 801d7d0: bf18 it ne + 801d7d2: 2001 movne r0, #1 + 801d7d4: 4458 add r0, fp + 801d7d6: 4582 cmp sl, r0 + 801d7d8: d206 bcs.n 801d7e8 + 801d7da: 463b mov r3, r7 + 801d7dc: f240 622b movw r2, #1579 ; 0x62b + 801d7e0: 4641 mov r1, r8 + 801d7e2: 4648 mov r0, r9 + 801d7e4: f016 ffb6 bl 8034754 + pcb->rcv_wnd -= TCP_TCPLEN(cseg); + 801d7e8: 68eb ldr r3, [r5, #12] + 801d7ea: f8b5 a008 ldrh.w sl, [r5, #8] + 801d7ee: 8998 ldrh r0, [r3, #12] + 801d7f0: f7fb f875 bl 80188de + 801d7f4: f010 0003 ands.w r0, r0, #3 + 801d7f8: 8d23 ldrh r3, [r4, #40] ; 0x28 + 801d7fa: bf18 it ne + 801d7fc: 2001 movne r0, #1 + 801d7fe: 4450 add r0, sl + 801d800: 1a1b subs r3, r3, r0 + tcp_update_rcv_ann_wnd(pcb); + 801d802: 4620 mov r0, r4 + pcb->rcv_wnd -= TCP_TCPLEN(cseg); + 801d804: 8523 strh r3, [r4, #40] ; 0x28 + tcp_update_rcv_ann_wnd(pcb); + 801d806: f7fe fd0f bl 801c228 + if (cseg->p->tot_len > 0) { + 801d80a: 6869 ldr r1, [r5, #4] + 801d80c: 890b ldrh r3, [r1, #8] + 801d80e: b133 cbz r3, 801d81e + if (recv_data) { + 801d810: 4b38 ldr r3, [pc, #224] ; (801d8f4 ) + 801d812: 6818 ldr r0, [r3, #0] + 801d814: b338 cbz r0, 801d866 + pbuf_cat(recv_data, cseg->p); + 801d816: f7fe fb05 bl 801be24 + cseg->p = NULL; + 801d81a: 2300 movs r3, #0 + 801d81c: 606b str r3, [r5, #4] + if (TCPH_FLAGS(cseg->tcphdr) & TCP_FIN) { + 801d81e: 68eb ldr r3, [r5, #12] + 801d820: 8998 ldrh r0, [r3, #12] + 801d822: f7fb f85c bl 80188de + 801d826: 07c0 lsls r0, r0, #31 + 801d828: d509 bpl.n 801d83e + recv_flags |= TF_GOT_FIN; + 801d82a: 4a33 ldr r2, [pc, #204] ; (801d8f8 ) + 801d82c: 7813 ldrb r3, [r2, #0] + 801d82e: f043 0320 orr.w r3, r3, #32 + 801d832: 7013 strb r3, [r2, #0] + if (pcb->state == ESTABLISHED) { /* force passive close or we can move to active close */ + 801d834: 7d23 ldrb r3, [r4, #20] + 801d836: 2b04 cmp r3, #4 + pcb->state = CLOSE_WAIT; + 801d838: bf04 itt eq + 801d83a: 2307 moveq r3, #7 + 801d83c: 7523 strbeq r3, [r4, #20] + pcb->ooseq = cseg->next; + 801d83e: 682b ldr r3, [r5, #0] + tcp_seg_free(cseg); + 801d840: 4628 mov r0, r5 + pcb->ooseq = cseg->next; + 801d842: 6763 str r3, [r4, #116] ; 0x74 + tcp_seg_free(cseg); + 801d844: f7fe fd64 bl 801c310 + while (pcb->ooseq != NULL && + 801d848: 6f65 ldr r5, [r4, #116] ; 0x74 + 801d84a: b125 cbz r5, 801d856 + pcb->ooseq->tcphdr->seqno == pcb->rcv_nxt) { + 801d84c: 68ea ldr r2, [r5, #12] + while (pcb->ooseq != NULL && + 801d84e: 6a61 ldr r1, [r4, #36] ; 0x24 + pcb->ooseq->tcphdr->seqno == pcb->rcv_nxt) { + 801d850: 6853 ldr r3, [r2, #4] + while (pcb->ooseq != NULL && + 801d852: 428b cmp r3, r1 + 801d854: d0a4 beq.n 801d7a0 + tcp_ack(pcb); + 801d856: 8b63 ldrh r3, [r4, #26] + 801d858: 07d9 lsls r1, r3, #31 + 801d85a: d506 bpl.n 801d86a + 801d85c: f023 0301 bic.w r3, r3, #1 + tcp_ack_now(pcb); + 801d860: f043 0302 orr.w r3, r3, #2 + 801d864: e003 b.n 801d86e + recv_data = cseg->p; + 801d866: 6019 str r1, [r3, #0] + 801d868: e7d7 b.n 801d81a + tcp_ack(pcb); + 801d86a: f043 0301 orr.w r3, r3, #1 + tcp_ack_now(pcb); + 801d86e: 8363 strh r3, [r4, #26] +} + 801d870: e8bd 8ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc} + if (pcb->ooseq == NULL) { + 801d874: 6f65 ldr r5, [r4, #116] ; 0x74 + 801d876: b945 cbnz r5, 801d88a + pcb->ooseq = tcp_seg_copy(&inseg); + 801d878: 4820 ldr r0, [pc, #128] ; (801d8fc ) + 801d87a: f7fe fd5f bl 801c33c + 801d87e: 6760 str r0, [r4, #116] ; 0x74 + tcp_send_empty_ack(pcb); + 801d880: 4620 mov r0, r4 +} + 801d882: e8bd 4ff8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr} + tcp_send_empty_ack(pcb); + 801d886: f001 ba31 b.w 801ecec + struct tcp_seg *next, *prev = NULL; + 801d88a: f04f 0800 mov.w r8, #0 + if (TCP_SEQ_BETWEEN(seqno, prev->tcphdr->seqno + 1, next->tcphdr->seqno - 1)) { + 801d88e: f103 3eff add.w lr, r3, #4294967295 + if (seqno == next->tcphdr->seqno) { + 801d892: f8d5 c00c ldr.w ip, [r5, #12] + 801d896: f8dc 2004 ldr.w r2, [ip, #4] + 801d89a: 4293 cmp r3, r2 + 801d89c: d115 bne.n 801d8ca + if (inseg.len > next->len) { + 801d89e: 4817 ldr r0, [pc, #92] ; (801d8fc ) + 801d8a0: 892b ldrh r3, [r5, #8] + 801d8a2: 8902 ldrh r2, [r0, #8] + 801d8a4: 429a cmp r2, r3 + 801d8a6: d9eb bls.n 801d880 + struct tcp_seg *cseg = tcp_seg_copy(&inseg); + 801d8a8: f7fe fd48 bl 801c33c + if (cseg != NULL) { + 801d8ac: 2800 cmp r0, #0 + 801d8ae: d0e7 beq.n 801d880 + if (prev != NULL) { + 801d8b0: f1b8 0f00 cmp.w r8, #0 + 801d8b4: d007 beq.n 801d8c6 + prev->next = cseg; + 801d8b6: f8c8 0000 str.w r0, [r8] + tcp_oos_insert_segment(cseg, next); + 801d8ba: 4629 mov r1, r5 + 801d8bc: f7ff fb7c bl 801cfb8 + 801d8c0: e7de b.n 801d880 + 801d8c2: 460d mov r5, r1 + 801d8c4: e7e5 b.n 801d892 + pcb->ooseq = cseg; + 801d8c6: 6760 str r0, [r4, #116] ; 0x74 + tcp_oos_insert_segment(cseg, next); + 801d8c8: e7f7 b.n 801d8ba + if (prev == NULL) { + 801d8ca: f1b8 0f00 cmp.w r8, #0 + 801d8ce: d119 bne.n 801d904 + if (TCP_SEQ_LT(seqno, next->tcphdr->seqno)) { + 801d8d0: 1a99 subs r1, r3, r2 + 801d8d2: 2900 cmp r1, #0 + 801d8d4: da3d bge.n 801d952 + struct tcp_seg *cseg = tcp_seg_copy(&inseg); + 801d8d6: 4809 ldr r0, [pc, #36] ; (801d8fc ) + 801d8d8: f7fe fd30 bl 801c33c + if (cseg != NULL) { + 801d8dc: 2800 cmp r0, #0 + 801d8de: d0cf beq.n 801d880 + pcb->ooseq = cseg; + 801d8e0: 6760 str r0, [r4, #116] ; 0x74 + 801d8e2: e7ea b.n 801d8ba + 801d8e4: 2001e6e0 .word 0x2001e6e0 + 801d8e8: 0803b547 .word 0x0803b547 + 801d8ec: 0803b749 .word 0x0803b749 + 801d8f0: 08035999 .word 0x08035999 + 801d8f4: 2001e6e4 .word 0x2001e6e4 + 801d8f8: 2001e6e8 .word 0x2001e6e8 + 801d8fc: 2001e6d0 .word 0x2001e6d0 + 801d900: 0803b768 .word 0x0803b768 + if (TCP_SEQ_BETWEEN(seqno, prev->tcphdr->seqno + 1, next->tcphdr->seqno - 1)) { + 801d904: f8d8 100c ldr.w r1, [r8, #12] + 801d908: 6849 ldr r1, [r1, #4] + 801d90a: ebae 0101 sub.w r1, lr, r1 + 801d90e: 2900 cmp r1, #0 + 801d910: db1f blt.n 801d952 + 801d912: 1a81 subs r1, r0, r2 + 801d914: 2900 cmp r1, #0 + 801d916: dc1c bgt.n 801d952 + struct tcp_seg *cseg = tcp_seg_copy(&inseg); + 801d918: 484a ldr r0, [pc, #296] ; (801da44 ) + 801d91a: f7fe fd0f bl 801c33c + if (cseg != NULL) { + 801d91e: 4607 mov r7, r0 + 801d920: 2800 cmp r0, #0 + 801d922: d0ad beq.n 801d880 + if (TCP_SEQ_GT(prev->tcphdr->seqno + prev->len, seqno)) { + 801d924: f8d8 300c ldr.w r3, [r8, #12] + 801d928: 6831 ldr r1, [r6, #0] + 801d92a: 685a ldr r2, [r3, #4] + 801d92c: f8b8 3008 ldrh.w r3, [r8, #8] + 801d930: 4413 add r3, r2 + 801d932: 1a5b subs r3, r3, r1 + 801d934: 2b00 cmp r3, #0 + 801d936: dd07 ble.n 801d948 + prev->len = (u16_t)(seqno - prev->tcphdr->seqno); + 801d938: 1a89 subs r1, r1, r2 + pbuf_realloc(prev->p, prev->len); + 801d93a: f8d8 0004 ldr.w r0, [r8, #4] + prev->len = (u16_t)(seqno - prev->tcphdr->seqno); + 801d93e: b289 uxth r1, r1 + 801d940: f8a8 1008 strh.w r1, [r8, #8] + pbuf_realloc(prev->p, prev->len); + 801d944: f7fe f9f2 bl 801bd2c + tcp_oos_insert_segment(cseg, next); + 801d948: 4629 mov r1, r5 + 801d94a: 4638 mov r0, r7 + prev->next = cseg; + 801d94c: f8c8 7000 str.w r7, [r8] + tcp_oos_insert_segment(cseg, next); + 801d950: e7b4 b.n 801d8bc + if (next->next == NULL && + 801d952: 6829 ldr r1, [r5, #0] + 801d954: 46a8 mov r8, r5 + 801d956: 2900 cmp r1, #0 + 801d958: d1b3 bne.n 801d8c2 + TCP_SEQ_GT(seqno, next->tcphdr->seqno)) { + 801d95a: 1a9b subs r3, r3, r2 + if (next->next == NULL && + 801d95c: 2b00 cmp r3, #0 + 801d95e: dd8f ble.n 801d880 + if (TCPH_FLAGS(next->tcphdr) & TCP_FIN) { + 801d960: f8bc 000c ldrh.w r0, [ip, #12] + 801d964: f7fa ffbb bl 80188de + 801d968: 07c2 lsls r2, r0, #31 + 801d96a: d489 bmi.n 801d880 + next->next = tcp_seg_copy(&inseg); + 801d96c: 4835 ldr r0, [pc, #212] ; (801da44 ) + 801d96e: f7fe fce5 bl 801c33c + 801d972: 6028 str r0, [r5, #0] + if (next->next != NULL) { + 801d974: 2800 cmp r0, #0 + 801d976: d083 beq.n 801d880 + if (TCP_SEQ_GT(next->tcphdr->seqno + next->len, seqno)) { + 801d978: 68eb ldr r3, [r5, #12] + 801d97a: 6831 ldr r1, [r6, #0] + 801d97c: 685a ldr r2, [r3, #4] + 801d97e: 892b ldrh r3, [r5, #8] + 801d980: 4413 add r3, r2 + 801d982: 1a5b subs r3, r3, r1 + 801d984: 2b00 cmp r3, #0 + 801d986: dd05 ble.n 801d994 + next->len = (u16_t)(seqno - next->tcphdr->seqno); + 801d988: 1a89 subs r1, r1, r2 + pbuf_realloc(next->p, next->len); + 801d98a: 6868 ldr r0, [r5, #4] + next->len = (u16_t)(seqno - next->tcphdr->seqno); + 801d98c: b289 uxth r1, r1 + 801d98e: 8129 strh r1, [r5, #8] + pbuf_realloc(next->p, next->len); + 801d990: f7fe f9cc bl 801bd2c + if (TCP_SEQ_GT((u32_t)tcplen + seqno, pcb->rcv_nxt + (u32_t)pcb->rcv_wnd)) { + 801d994: 6832 ldr r2, [r6, #0] + 801d996: 883b ldrh r3, [r7, #0] + 801d998: 4413 add r3, r2 + 801d99a: 6a62 ldr r2, [r4, #36] ; 0x24 + 801d99c: 1a9b subs r3, r3, r2 + 801d99e: 8d22 ldrh r2, [r4, #40] ; 0x28 + 801d9a0: 1a9b subs r3, r3, r2 + 801d9a2: 2b00 cmp r3, #0 + 801d9a4: f77f af6c ble.w 801d880 + if (TCPH_FLAGS(next->next->tcphdr) & TCP_FIN) { + 801d9a8: 682b ldr r3, [r5, #0] + 801d9aa: 68db ldr r3, [r3, #12] + 801d9ac: 8998 ldrh r0, [r3, #12] + 801d9ae: f7fa ff96 bl 80188de + 801d9b2: 07c3 lsls r3, r0, #31 + 801d9b4: d511 bpl.n 801d9da + TCPH_FLAGS_SET(next->next->tcphdr, TCPH_FLAGS(next->next->tcphdr) & ~TCP_FIN); + 801d9b6: 682b ldr r3, [r5, #0] + 801d9b8: 68db ldr r3, [r3, #12] + 801d9ba: f8b3 800c ldrh.w r8, [r3, #12] + 801d9be: 4640 mov r0, r8 + 801d9c0: f428 587c bic.w r8, r8, #16128 ; 0x3f00 + 801d9c4: f7fa ff8b bl 80188de + 801d9c8: f000 003e and.w r0, r0, #62 ; 0x3e + 801d9cc: f7fa ff87 bl 80188de + 801d9d0: 682b ldr r3, [r5, #0] + 801d9d2: ea40 0008 orr.w r0, r0, r8 + 801d9d6: 68db ldr r3, [r3, #12] + 801d9d8: 8198 strh r0, [r3, #12] + next->next->len = (u16_t)(pcb->rcv_nxt + pcb->rcv_wnd - seqno); + 801d9da: 6832 ldr r2, [r6, #0] + 801d9dc: 8d21 ldrh r1, [r4, #40] ; 0x28 + 801d9de: 682b ldr r3, [r5, #0] + 801d9e0: 1a89 subs r1, r1, r2 + 801d9e2: 6a62 ldr r2, [r4, #36] ; 0x24 + pbuf_realloc(next->next->p, next->next->len); + 801d9e4: 6858 ldr r0, [r3, #4] + next->next->len = (u16_t)(pcb->rcv_nxt + pcb->rcv_wnd - seqno); + 801d9e6: 4411 add r1, r2 + 801d9e8: b289 uxth r1, r1 + 801d9ea: 8119 strh r1, [r3, #8] + pbuf_realloc(next->next->p, next->next->len); + 801d9ec: f7fe f99e bl 801bd2c + tcplen = TCP_TCPLEN(next->next); + 801d9f0: 682b ldr r3, [r5, #0] + 801d9f2: 891d ldrh r5, [r3, #8] + 801d9f4: 68db ldr r3, [r3, #12] + 801d9f6: 8998 ldrh r0, [r3, #12] + 801d9f8: f7fa ff71 bl 80188de + 801d9fc: f010 0003 ands.w r0, r0, #3 + LWIP_ASSERT("tcp_receive: segment not trimmed correctly to rcv_wnd\n", + 801da00: 6832 ldr r2, [r6, #0] + tcplen = TCP_TCPLEN(next->next); + 801da02: bf18 it ne + 801da04: 2001 movne r0, #1 + LWIP_ASSERT("tcp_receive: segment not trimmed correctly to rcv_wnd\n", + 801da06: 6a61 ldr r1, [r4, #36] ; 0x24 + tcplen = TCP_TCPLEN(next->next); + 801da08: 182b adds r3, r5, r0 + 801da0a: b29b uxth r3, r3 + 801da0c: 803b strh r3, [r7, #0] + LWIP_ASSERT("tcp_receive: segment not trimmed correctly to rcv_wnd\n", + 801da0e: 4413 add r3, r2 + 801da10: 8d22 ldrh r2, [r4, #40] ; 0x28 + 801da12: 440a add r2, r1 + 801da14: 4293 cmp r3, r2 + 801da16: f43f af33 beq.w 801d880 + 801da1a: 4b0b ldr r3, [pc, #44] ; (801da48 ) + 801da1c: f44f 62df mov.w r2, #1784 ; 0x6f8 + 801da20: 490a ldr r1, [pc, #40] ; (801da4c ) + 801da22: 480b ldr r0, [pc, #44] ; (801da50 ) + 801da24: f016 fe96 bl 8034754 + 801da28: e72a b.n 801d880 + if (!TCP_SEQ_BETWEEN(seqno, pcb->rcv_nxt, pcb->rcv_nxt + pcb->rcv_wnd - 1)) { + 801da2a: 1a99 subs r1, r3, r2 + 801da2c: 2900 cmp r1, #0 + 801da2e: db06 blt.n 801da3e + 801da30: 3301 adds r3, #1 + 801da32: 1a9b subs r3, r3, r2 + 801da34: 8d22 ldrh r2, [r4, #40] ; 0x28 + 801da36: 1a9b subs r3, r3, r2 + 801da38: 2b00 cmp r3, #0 + 801da3a: f77f af19 ble.w 801d870 + tcp_ack_now(pcb); + 801da3e: 8b63 ldrh r3, [r4, #26] + 801da40: e70e b.n 801d860 + 801da42: bf00 nop + 801da44: 2001e6d0 .word 0x2001e6d0 + 801da48: 0803b547 .word 0x0803b547 + 801da4c: 0803b6d7 .word 0x0803b6d7 + 801da50: 08035999 .word 0x08035999 + +0801da54 : +{ + 801da54: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + LWIP_ASSERT("tcp_input: invalid pbuf", p != NULL); + 801da58: 4605 mov r5, r0 +{ + 801da5a: b087 sub sp, #28 + LWIP_ASSERT("tcp_input: invalid pbuf", p != NULL); + 801da5c: b928 cbnz r0, 801da6a + 801da5e: 4b63 ldr r3, [pc, #396] ; (801dbec ) + 801da60: 2283 movs r2, #131 ; 0x83 + 801da62: 4963 ldr r1, [pc, #396] ; (801dbf0 ) + 801da64: 4863 ldr r0, [pc, #396] ; (801dbf4 ) + 801da66: f016 fe75 bl 8034754 + tcphdr = (struct tcp_hdr *)p->payload; + 801da6a: 686b ldr r3, [r5, #4] + 801da6c: 4e62 ldr r6, [pc, #392] ; (801dbf8 ) + 801da6e: 6033 str r3, [r6, #0] + if (p->len < TCP_HLEN) { + 801da70: 896b ldrh r3, [r5, #10] + 801da72: 2b13 cmp r3, #19 + 801da74: f240 80b3 bls.w 801dbde + if (ip_addr_isbroadcast(ip_current_dest_addr(), ip_current_netif()) || + 801da78: 4f60 ldr r7, [pc, #384] ; (801dbfc ) + 801da7a: 6839 ldr r1, [r7, #0] + 801da7c: 6978 ldr r0, [r7, #20] + 801da7e: f7fc fecc bl 801a81a + 801da82: 4604 mov r4, r0 + 801da84: 2800 cmp r0, #0 + 801da86: f040 80aa bne.w 801dbde + ip_addr_ismulticast(ip_current_dest_addr())) { + 801da8a: 697b ldr r3, [r7, #20] + 801da8c: f003 03f0 and.w r3, r3, #240 ; 0xf0 + if (ip_addr_isbroadcast(ip_current_dest_addr(), ip_current_netif()) || + 801da90: 2be0 cmp r3, #224 ; 0xe0 + 801da92: f000 80a4 beq.w 801dbde + hdrlen_bytes = TCPH_HDRLEN_BYTES(tcphdr); + 801da96: 6833 ldr r3, [r6, #0] + 801da98: 8998 ldrh r0, [r3, #12] + 801da9a: f7fa ff20 bl 80188de + 801da9e: 0a81 lsrs r1, r0, #10 + 801daa0: f001 01fc and.w r1, r1, #252 ; 0xfc + if ((hdrlen_bytes < TCP_HLEN) || (hdrlen_bytes > p->tot_len)) { + 801daa4: 2913 cmp r1, #19 + 801daa6: f240 809a bls.w 801dbde + 801daaa: 892b ldrh r3, [r5, #8] + 801daac: b28a uxth r2, r1 + 801daae: 428b cmp r3, r1 + 801dab0: f0c0 8095 bcc.w 801dbde + tcphdr_optlen = (u16_t)(hdrlen_bytes - TCP_HLEN); + 801dab4: f1a2 0314 sub.w r3, r2, #20 + if (p->len >= hdrlen_bytes) { + 801dab8: 8968 ldrh r0, [r5, #10] + tcphdr_optlen = (u16_t)(hdrlen_bytes - TCP_HLEN); + 801daba: f8df 8160 ldr.w r8, [pc, #352] ; 801dc1c + 801dabe: b29b uxth r3, r3 + tcphdr_opt2 = NULL; + 801dac0: f8df a15c ldr.w sl, [pc, #348] ; 801dc20 + if (p->len >= hdrlen_bytes) { + 801dac4: 4290 cmp r0, r2 + 801dac6: f8df 915c ldr.w r9, [pc, #348] ; 801dc24 + tcphdr_optlen = (u16_t)(hdrlen_bytes - TCP_HLEN); + 801daca: f8a8 3000 strh.w r3, [r8] + tcphdr_opt2 = NULL; + 801dace: f8ca 4000 str.w r4, [sl] + if (p->len >= hdrlen_bytes) { + 801dad2: d342 bcc.n 801db5a + pbuf_remove_header(p, hdrlen_bytes); /* cannot fail */ + 801dad4: 4628 mov r0, r5 + tcphdr_opt1len = tcphdr_optlen; + 801dad6: f8a9 3000 strh.w r3, [r9] + pbuf_remove_header(p, hdrlen_bytes); /* cannot fail */ + 801dada: f7fd fff9 bl 801bad0 + tcphdr->src = lwip_ntohs(tcphdr->src); + 801dade: 6834 ldr r4, [r6, #0] + ackno = tcphdr->ackno = lwip_ntohl(tcphdr->ackno); + 801dae0: f8df b144 ldr.w fp, [pc, #324] ; 801dc28 + tcphdr->src = lwip_ntohs(tcphdr->src); + 801dae4: 8820 ldrh r0, [r4, #0] + 801dae6: f7fa fefa bl 80188de + 801daea: 8020 strh r0, [r4, #0] + tcphdr->dest = lwip_ntohs(tcphdr->dest); + 801daec: 6834 ldr r4, [r6, #0] + 801daee: 8860 ldrh r0, [r4, #2] + 801daf0: f7fa fef5 bl 80188de + 801daf4: 8060 strh r0, [r4, #2] + seqno = tcphdr->seqno = lwip_ntohl(tcphdr->seqno); + 801daf6: 6834 ldr r4, [r6, #0] + 801daf8: 6860 ldr r0, [r4, #4] + 801dafa: f7fa fef3 bl 80188e4 + 801dafe: 4b40 ldr r3, [pc, #256] ; (801dc00 ) + 801db00: 6060 str r0, [r4, #4] + ackno = tcphdr->ackno = lwip_ntohl(tcphdr->ackno); + 801db02: 6834 ldr r4, [r6, #0] + seqno = tcphdr->seqno = lwip_ntohl(tcphdr->seqno); + 801db04: 6018 str r0, [r3, #0] + ackno = tcphdr->ackno = lwip_ntohl(tcphdr->ackno); + 801db06: 68a0 ldr r0, [r4, #8] + 801db08: f7fa feec bl 80188e4 + 801db0c: 60a0 str r0, [r4, #8] + tcphdr->wnd = lwip_ntohs(tcphdr->wnd); + 801db0e: 6834 ldr r4, [r6, #0] + ackno = tcphdr->ackno = lwip_ntohl(tcphdr->ackno); + 801db10: f8cb 0000 str.w r0, [fp] + tcphdr->wnd = lwip_ntohs(tcphdr->wnd); + 801db14: 89e0 ldrh r0, [r4, #14] + 801db16: f7fa fee2 bl 80188de + flags = TCPH_FLAGS(tcphdr); + 801db1a: 6833 ldr r3, [r6, #0] + tcphdr->wnd = lwip_ntohs(tcphdr->wnd); + 801db1c: 81e0 strh r0, [r4, #14] + flags = TCPH_FLAGS(tcphdr); + 801db1e: 8998 ldrh r0, [r3, #12] + 801db20: f7fa fedd bl 80188de + 801db24: 4a37 ldr r2, [pc, #220] ; (801dc04 ) + 801db26: f000 033f and.w r3, r0, #63 ; 0x3f + 801db2a: 7013 strb r3, [r2, #0] + if (flags & (TCP_FIN | TCP_SYN)) { + 801db2c: 0783 lsls r3, r0, #30 + tcplen = p->tot_len; + 801db2e: 892a ldrh r2, [r5, #8] + if (flags & (TCP_FIN | TCP_SYN)) { + 801db30: d14f bne.n 801dbd2 + tcplen = p->tot_len; + 801db32: 4b35 ldr r3, [pc, #212] ; (801dc08 ) + 801db34: 801a strh r2, [r3, #0] + for (pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) { + 801db36: f8df 80f4 ldr.w r8, [pc, #244] ; 801dc2c + prev = NULL; + 801db3a: f04f 0a00 mov.w sl, #0 + LWIP_ASSERT("tcp_input: active pcb->state != CLOSED", pcb->state != CLOSED); + 801db3e: 4b2b ldr r3, [pc, #172] ; (801dbec ) + for (pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) { + 801db40: f8d8 4000 ldr.w r4, [r8] + LWIP_ASSERT("tcp_input: active pcb->state != CLOSED", pcb->state != CLOSED); + 801db44: f8df 90ac ldr.w r9, [pc, #172] ; 801dbf4 + for (pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) { + 801db48: 2c00 cmp r4, #0 + 801db4a: d173 bne.n 801dc34 + for (pcb = tcp_tw_pcbs; pcb != NULL; pcb = pcb->next) { + 801db4c: 4b2f ldr r3, [pc, #188] ; (801dc0c ) + LWIP_ASSERT("tcp_input: TIME-WAIT pcb->state == TIME-WAIT", pcb->state == TIME_WAIT); + 801db4e: f8df a0e0 ldr.w sl, [pc, #224] ; 801dc30 + for (pcb = tcp_tw_pcbs; pcb != NULL; pcb = pcb->next) { + 801db52: 681c ldr r4, [r3, #0] + LWIP_ASSERT("tcp_input: TIME-WAIT pcb->state == TIME-WAIT", pcb->state == TIME_WAIT); + 801db54: f8df 909c ldr.w r9, [pc, #156] ; 801dbf4 + for (pcb = tcp_tw_pcbs; pcb != NULL; pcb = pcb->next) { + 801db58: e15a b.n 801de10 + LWIP_ASSERT("p->next != NULL", p->next != NULL); + 801db5a: 682b ldr r3, [r5, #0] + 801db5c: b92b cbnz r3, 801db6a + 801db5e: 4b23 ldr r3, [pc, #140] ; (801dbec ) + 801db60: 22c2 movs r2, #194 ; 0xc2 + 801db62: 492b ldr r1, [pc, #172] ; (801dc10 ) + 801db64: 4823 ldr r0, [pc, #140] ; (801dbf4 ) + 801db66: f016 fdf5 bl 8034754 + pbuf_remove_header(p, TCP_HLEN); + 801db6a: 2114 movs r1, #20 + 801db6c: 4628 mov r0, r5 + 801db6e: f7fd ffaf bl 801bad0 + tcphdr_opt1len = p->len; + 801db72: 896c ldrh r4, [r5, #10] + pbuf_remove_header(p, tcphdr_opt1len); + 801db74: 4628 mov r0, r5 + tcphdr_opt1len = p->len; + 801db76: f8a9 4000 strh.w r4, [r9] + pbuf_remove_header(p, tcphdr_opt1len); + 801db7a: 4621 mov r1, r4 + opt2len = (u16_t)(tcphdr_optlen - tcphdr_opt1len); + 801db7c: f8b8 9000 ldrh.w r9, [r8] + pbuf_remove_header(p, tcphdr_opt1len); + 801db80: f7fd ffa6 bl 801bad0 + if (opt2len > p->next->len) { + 801db84: 6828 ldr r0, [r5, #0] + opt2len = (u16_t)(tcphdr_optlen - tcphdr_opt1len); + 801db86: eba9 0804 sub.w r8, r9, r4 + if (opt2len > p->next->len) { + 801db8a: 8943 ldrh r3, [r0, #10] + opt2len = (u16_t)(tcphdr_optlen - tcphdr_opt1len); + 801db8c: fa1f f888 uxth.w r8, r8 + if (opt2len > p->next->len) { + 801db90: 4543 cmp r3, r8 + 801db92: d324 bcc.n 801dbde + tcphdr_opt2 = (u8_t *)p->next->payload; + 801db94: 6843 ldr r3, [r0, #4] + pbuf_remove_header(p->next, opt2len); + 801db96: 4641 mov r1, r8 + tcphdr_opt2 = (u8_t *)p->next->payload; + 801db98: f8ca 3000 str.w r3, [sl] + pbuf_remove_header(p->next, opt2len); + 801db9c: f7fd ff98 bl 801bad0 + p->tot_len = (u16_t)(p->tot_len - opt2len); + 801dba0: 892b ldrh r3, [r5, #8] + 801dba2: 441c add r4, r3 + LWIP_ASSERT("p->len == 0", p->len == 0); + 801dba4: 896b ldrh r3, [r5, #10] + p->tot_len = (u16_t)(p->tot_len - opt2len); + 801dba6: eba4 0409 sub.w r4, r4, r9 + 801dbaa: 812c strh r4, [r5, #8] + LWIP_ASSERT("p->len == 0", p->len == 0); + 801dbac: b12b cbz r3, 801dbba + 801dbae: 4b0f ldr r3, [pc, #60] ; (801dbec ) + 801dbb0: 22df movs r2, #223 ; 0xdf + 801dbb2: 4918 ldr r1, [pc, #96] ; (801dc14 ) + 801dbb4: 480f ldr r0, [pc, #60] ; (801dbf4 ) + 801dbb6: f016 fdcd bl 8034754 + LWIP_ASSERT("p->tot_len == p->next->tot_len", p->tot_len == p->next->tot_len); + 801dbba: 682b ldr r3, [r5, #0] + 801dbbc: 892a ldrh r2, [r5, #8] + 801dbbe: 891b ldrh r3, [r3, #8] + 801dbc0: 429a cmp r2, r3 + 801dbc2: d08c beq.n 801dade + 801dbc4: 4b09 ldr r3, [pc, #36] ; (801dbec ) + 801dbc6: 22e0 movs r2, #224 ; 0xe0 + 801dbc8: 4913 ldr r1, [pc, #76] ; (801dc18 ) + 801dbca: 480a ldr r0, [pc, #40] ; (801dbf4 ) + 801dbcc: f016 fdc2 bl 8034754 + 801dbd0: e785 b.n 801dade + tcplen++; + 801dbd2: 1c53 adds r3, r2, #1 + 801dbd4: 490c ldr r1, [pc, #48] ; (801dc08 ) + 801dbd6: b29b uxth r3, r3 + if (tcplen < p->tot_len) { + 801dbd8: 429a cmp r2, r3 + tcplen++; + 801dbda: 800b strh r3, [r1, #0] + if (tcplen < p->tot_len) { + 801dbdc: d9ab bls.n 801db36 + pbuf_free(p); + 801dbde: 4628 mov r0, r5 +} + 801dbe0: b007 add sp, #28 + 801dbe2: e8bd 4ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + pbuf_free(p); + 801dbe6: f7fd bfa7 b.w 801bb38 + 801dbea: bf00 nop + 801dbec: 0803b547 .word 0x0803b547 + 801dbf0: 0803b78d .word 0x0803b78d + 801dbf4: 08035999 .word 0x08035999 + 801dbf8: 2001e6f8 .word 0x2001e6f8 + 801dbfc: 2001af34 .word 0x2001af34 + 801dc00: 2001e6ec .word 0x2001e6ec + 801dc04: 2001e6cc .word 0x2001e6cc + 801dc08: 2001e706 .word 0x2001e706 + 801dc0c: 2001e6c4 .word 0x2001e6c4 + 801dc10: 0803b7a5 .word 0x0803b7a5 + 801dc14: 0803b7b5 .word 0x0803b7b5 + 801dc18: 0803b7c1 .word 0x0803b7c1 + 801dc1c: 2001e704 .word 0x2001e704 + 801dc20: 2001e700 .word 0x2001e700 + 801dc24: 2001e6fc .word 0x2001e6fc + 801dc28: 2001e6c8 .word 0x2001e6c8 + 801dc2c: 2001e6ac .word 0x2001e6ac + 801dc30: 0803b8ad .word 0x0803b8ad + LWIP_ASSERT("tcp_input: active pcb->state != CLOSED", pcb->state != CLOSED); + 801dc34: 7d22 ldrb r2, [r4, #20] + 801dc36: b92a cbnz r2, 801dc44 + 801dc38: 22fb movs r2, #251 ; 0xfb + 801dc3a: 499d ldr r1, [pc, #628] ; (801deb0 ) + 801dc3c: 4648 mov r0, r9 + 801dc3e: f016 fd89 bl 8034754 + 801dc42: 4b9c ldr r3, [pc, #624] ; (801deb4 ) + LWIP_ASSERT("tcp_input: active pcb->state != TIME-WAIT", pcb->state != TIME_WAIT); + 801dc44: 7d22 ldrb r2, [r4, #20] + 801dc46: 2a0a cmp r2, #10 + 801dc48: d105 bne.n 801dc56 + 801dc4a: 22fc movs r2, #252 ; 0xfc + 801dc4c: 499a ldr r1, [pc, #616] ; (801deb8 ) + 801dc4e: 4648 mov r0, r9 + 801dc50: f016 fd80 bl 8034754 + 801dc54: 4b97 ldr r3, [pc, #604] ; (801deb4 ) + LWIP_ASSERT("tcp_input: active pcb->state != LISTEN", pcb->state != LISTEN); + 801dc56: 7d22 ldrb r2, [r4, #20] + 801dc58: 2a01 cmp r2, #1 + 801dc5a: d105 bne.n 801dc68 + 801dc5c: 22fd movs r2, #253 ; 0xfd + 801dc5e: 4997 ldr r1, [pc, #604] ; (801debc ) + 801dc60: 4648 mov r0, r9 + 801dc62: f016 fd77 bl 8034754 + 801dc66: 4b93 ldr r3, [pc, #588] ; (801deb4 ) + if ((pcb->netif_idx != NETIF_NO_INDEX) && + 801dc68: 7a20 ldrb r0, [r4, #8] + 801dc6a: 68e1 ldr r1, [r4, #12] + 801dc6c: b130 cbz r0, 801dc7c + (pcb->netif_idx != netif_get_index(ip_data.current_input_netif))) { + 801dc6e: 687a ldr r2, [r7, #4] + 801dc70: f892 2034 ldrb.w r2, [r2, #52] ; 0x34 + 801dc74: 3201 adds r2, #1 + if ((pcb->netif_idx != NETIF_NO_INDEX) && + 801dc76: b2d2 uxtb r2, r2 + 801dc78: 4290 cmp r0, r2 + 801dc7a: d173 bne.n 801dd64 + if (pcb->remote_port == tcphdr->src && + 801dc7c: 6832 ldr r2, [r6, #0] + 801dc7e: f8b4 c018 ldrh.w ip, [r4, #24] + 801dc82: 8810 ldrh r0, [r2, #0] + 801dc84: 4584 cmp ip, r0 + 801dc86: d16d bne.n 801dd64 + 801dc88: 8ae0 ldrh r0, [r4, #22] + 801dc8a: 8852 ldrh r2, [r2, #2] + 801dc8c: 4290 cmp r0, r2 + 801dc8e: d169 bne.n 801dd64 + pcb->local_port == tcphdr->dest && + 801dc90: 6860 ldr r0, [r4, #4] + 801dc92: 693a ldr r2, [r7, #16] + 801dc94: 4290 cmp r0, r2 + 801dc96: d165 bne.n 801dd64 + ip_addr_cmp(&pcb->remote_ip, ip_current_src_addr()) && + 801dc98: 6820 ldr r0, [r4, #0] + 801dc9a: 697a ldr r2, [r7, #20] + 801dc9c: 4290 cmp r0, r2 + 801dc9e: d161 bne.n 801dd64 + LWIP_ASSERT("tcp_input: pcb->next != pcb (before cache)", pcb->next != pcb); + 801dca0: 42a1 cmp r1, r4 + 801dca2: f040 8445 bne.w 801e530 + 801dca6: 4b83 ldr r3, [pc, #524] ; (801deb4 ) + 801dca8: f240 120d movw r2, #269 ; 0x10d + 801dcac: 4984 ldr r1, [pc, #528] ; (801dec0 ) + 801dcae: 4885 ldr r0, [pc, #532] ; (801dec4 ) + 801dcb0: f016 fd50 bl 8034754 + if (prev != NULL) { + 801dcb4: f1ba 0f00 cmp.w sl, #0 + 801dcb8: d007 beq.n 801dcca + prev->next = pcb->next; + 801dcba: 68e3 ldr r3, [r4, #12] + 801dcbc: f8ca 300c str.w r3, [sl, #12] + pcb->next = tcp_active_pcbs; + 801dcc0: f8d8 3000 ldr.w r3, [r8] + tcp_active_pcbs = pcb; + 801dcc4: f8c8 4000 str.w r4, [r8] + pcb->next = tcp_active_pcbs; + 801dcc8: 60e3 str r3, [r4, #12] + LWIP_ASSERT("tcp_input: pcb->next != pcb (after cache)", pcb->next != pcb); + 801dcca: 68e3 ldr r3, [r4, #12] + 801dccc: 42a3 cmp r3, r4 + 801dcce: d106 bne.n 801dcde + 801dcd0: 4b78 ldr r3, [pc, #480] ; (801deb4 ) + 801dcd2: f240 1215 movw r2, #277 ; 0x115 + 801dcd6: 497c ldr r1, [pc, #496] ; (801dec8 ) + 801dcd8: 487a ldr r0, [pc, #488] ; (801dec4 ) + 801dcda: f016 fd3b bl 8034754 + inseg.next = NULL; + 801dcde: f8df 9210 ldr.w r9, [pc, #528] ; 801def0 + 801dce2: 2300 movs r3, #0 + inseg.len = p->tot_len; + 801dce4: 892a ldrh r2, [r5, #8] + recv_data = NULL; + 801dce6: f8df a20c ldr.w sl, [pc, #524] ; 801def4 + inseg.len = p->tot_len; + 801dcea: f8a9 2008 strh.w r2, [r9, #8] + inseg.tcphdr = tcphdr; + 801dcee: 6832 ldr r2, [r6, #0] + recv_flags = 0; + 801dcf0: 4f76 ldr r7, [pc, #472] ; (801decc ) + inseg.tcphdr = tcphdr; + 801dcf2: f8c9 200c str.w r2, [r9, #12] + recv_acked = 0; + 801dcf6: 4a76 ldr r2, [pc, #472] ; (801ded0 ) + inseg.next = NULL; + 801dcf8: f8c9 3000 str.w r3, [r9] + recv_data = NULL; + 801dcfc: f8ca 3000 str.w r3, [sl] + recv_flags = 0; + 801dd00: 703b strb r3, [r7, #0] + recv_acked = 0; + 801dd02: 8013 strh r3, [r2, #0] + if (flags & TCP_PSH) { + 801dd04: 4b73 ldr r3, [pc, #460] ; (801ded4 ) + inseg.p = p; + 801dd06: f8c9 5004 str.w r5, [r9, #4] + if (flags & TCP_PSH) { + 801dd0a: 781b ldrb r3, [r3, #0] + 801dd0c: 071b lsls r3, r3, #28 + 801dd0e: d503 bpl.n 801dd18 + p->flags |= PBUF_FLAG_PUSH; + 801dd10: 7b6b ldrb r3, [r5, #13] + 801dd12: f043 0301 orr.w r3, r3, #1 + 801dd16: 736b strb r3, [r5, #13] + if (pcb->refused_data != NULL) { + 801dd18: 6fa3 ldr r3, [r4, #120] ; 0x78 + 801dd1a: 4d6f ldr r5, [pc, #444] ; (801ded8 ) + 801dd1c: 2b00 cmp r3, #0 + 801dd1e: f000 814c beq.w 801dfba + if ((tcp_process_refused_data(pcb) == ERR_ABRT) || + 801dd22: 4620 mov r0, r4 + 801dd24: f7fe fe7c bl 801ca20 + 801dd28: 300d adds r0, #13 + 801dd2a: d008 beq.n 801dd3e + 801dd2c: 6fa3 ldr r3, [r4, #120] ; 0x78 + 801dd2e: 2b00 cmp r3, #0 + 801dd30: f000 8143 beq.w 801dfba + ((pcb->refused_data != NULL) && (tcplen > 0))) { + 801dd34: 4b69 ldr r3, [pc, #420] ; (801dedc ) + 801dd36: 881b ldrh r3, [r3, #0] + 801dd38: 2b00 cmp r3, #0 + 801dd3a: f000 813e beq.w 801dfba + if (pcb->rcv_ann_wnd == 0) { + 801dd3e: 8d63 ldrh r3, [r4, #42] ; 0x2a + 801dd40: b913 cbnz r3, 801dd48 + tcp_send_empty_ack(pcb); + 801dd42: 4620 mov r0, r4 + 801dd44: f000 ffd2 bl 801ecec + tcp_input_pcb = NULL; + 801dd48: 2400 movs r4, #0 + if (inseg.p != NULL) { + 801dd4a: f8d9 0004 ldr.w r0, [r9, #4] + tcp_input_pcb = NULL; + 801dd4e: 602c str r4, [r5, #0] + recv_data = NULL; + 801dd50: f8ca 4000 str.w r4, [sl] + if (inseg.p != NULL) { + 801dd54: b118 cbz r0, 801dd5e + pbuf_free(inseg.p); + 801dd56: f7fd feef bl 801bb38 + inseg.p = NULL; + 801dd5a: f8c9 4004 str.w r4, [r9, #4] +} + 801dd5e: b007 add sp, #28 + 801dd60: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + for (pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) { + 801dd64: 46a2 mov sl, r4 + 801dd66: 460c mov r4, r1 + 801dd68: e6ee b.n 801db48 + LWIP_ASSERT("tcp_input: TIME-WAIT pcb->state == TIME-WAIT", pcb->state == TIME_WAIT); + 801dd6a: 7d23 ldrb r3, [r4, #20] + 801dd6c: 2b0a cmp r3, #10 + 801dd6e: d006 beq.n 801dd7e + 801dd70: 4b50 ldr r3, [pc, #320] ; (801deb4 ) + 801dd72: f240 121f movw r2, #287 ; 0x11f + 801dd76: 4651 mov r1, sl + 801dd78: 4648 mov r0, r9 + 801dd7a: f016 fceb bl 8034754 + if ((pcb->netif_idx != NETIF_NO_INDEX) && + 801dd7e: 7a22 ldrb r2, [r4, #8] + 801dd80: b132 cbz r2, 801dd90 + (pcb->netif_idx != netif_get_index(ip_data.current_input_netif))) { + 801dd82: 687b ldr r3, [r7, #4] + 801dd84: f893 3034 ldrb.w r3, [r3, #52] ; 0x34 + 801dd88: 3301 adds r3, #1 + if ((pcb->netif_idx != NETIF_NO_INDEX) && + 801dd8a: b2db uxtb r3, r3 + 801dd8c: 429a cmp r2, r3 + 801dd8e: d13e bne.n 801de0e + if (pcb->remote_port == tcphdr->src && + 801dd90: 6833 ldr r3, [r6, #0] + 801dd92: 8b20 ldrh r0, [r4, #24] + 801dd94: 881a ldrh r2, [r3, #0] + 801dd96: 4290 cmp r0, r2 + 801dd98: d139 bne.n 801de0e + pcb->local_port == tcphdr->dest && + 801dd9a: 885b ldrh r3, [r3, #2] + if (pcb->remote_port == tcphdr->src && + 801dd9c: 8ae1 ldrh r1, [r4, #22] + 801dd9e: 4299 cmp r1, r3 + 801dda0: d135 bne.n 801de0e + pcb->local_port == tcphdr->dest && + 801dda2: 6862 ldr r2, [r4, #4] + 801dda4: 693b ldr r3, [r7, #16] + 801dda6: 429a cmp r2, r3 + 801dda8: d131 bne.n 801de0e + ip_addr_cmp(&pcb->remote_ip, ip_current_src_addr()) && + 801ddaa: 6822 ldr r2, [r4, #0] + 801ddac: 697b ldr r3, [r7, #20] + 801ddae: 429a cmp r2, r3 + 801ddb0: d12d bne.n 801de0e + if (flags & TCP_RST) { + 801ddb2: 4b48 ldr r3, [pc, #288] ; (801ded4 ) + 801ddb4: 781b ldrb r3, [r3, #0] + 801ddb6: 075e lsls r6, r3, #29 + 801ddb8: f53f af11 bmi.w 801dbde + tcp_rst(pcb, ackno, seqno + tcplen, ip_current_dest_addr(), + 801ddbc: 4a47 ldr r2, [pc, #284] ; (801dedc ) + 801ddbe: 8816 ldrh r6, [r2, #0] + if (flags & TCP_SYN) { + 801ddc0: 079a lsls r2, r3, #30 + 801ddc2: d514 bpl.n 801ddee + if (TCP_SEQ_BETWEEN(seqno, pcb->rcv_nxt, pcb->rcv_nxt + pcb->rcv_wnd)) { + 801ddc4: 4b46 ldr r3, [pc, #280] ; (801dee0 ) + 801ddc6: 681a ldr r2, [r3, #0] + 801ddc8: 6a63 ldr r3, [r4, #36] ; 0x24 + 801ddca: 1ad3 subs r3, r2, r3 + 801ddcc: d414 bmi.n 801ddf8 + 801ddce: 8d27 ldrh r7, [r4, #40] ; 0x28 + 801ddd0: 1bdb subs r3, r3, r7 + 801ddd2: 2b00 cmp r3, #0 + 801ddd4: dc10 bgt.n 801ddf8 + tcp_rst(pcb, ackno, seqno + tcplen, ip_current_dest_addr(), + 801ddd6: 4b43 ldr r3, [pc, #268] ; (801dee4 ) + 801ddd8: 4432 add r2, r6 + 801ddda: e9cd 1001 strd r1, r0, [sp, #4] + 801ddde: 9300 str r3, [sp, #0] + 801dde0: 4620 mov r0, r4 + 801dde2: 3304 adds r3, #4 + 801dde4: f8db 1000 ldr.w r1, [fp] + tcp_rst((const struct tcp_pcb *)pcb, ackno, seqno + tcplen, ip_current_dest_addr(), + 801dde8: f000 ff3a bl 801ec60 + 801ddec: e6f7 b.n 801dbde + } else if (flags & TCP_FIN) { + 801ddee: 07df lsls r7, r3, #31 + pcb->tmr = tcp_ticks; + 801ddf0: bf42 ittt mi + 801ddf2: 4b3d ldrmi r3, [pc, #244] ; (801dee8 ) + 801ddf4: 681b ldrmi r3, [r3, #0] + 801ddf6: 6223 strmi r3, [r4, #32] + if ((tcplen > 0)) { + 801ddf8: 2e00 cmp r6, #0 + 801ddfa: f43f aef0 beq.w 801dbde + tcp_ack_now(pcb); + 801ddfe: 8b63 ldrh r3, [r4, #26] + tcp_output(pcb); + 801de00: 4620 mov r0, r4 + tcp_ack_now(pcb); + 801de02: f043 0302 orr.w r3, r3, #2 + 801de06: 8363 strh r3, [r4, #26] + tcp_output(pcb); + 801de08: f000 ffa2 bl 801ed50 + pbuf_free(p); + 801de0c: e6e7 b.n 801dbde + for (pcb = tcp_tw_pcbs; pcb != NULL; pcb = pcb->next) { + 801de0e: 68e4 ldr r4, [r4, #12] + 801de10: 2c00 cmp r4, #0 + 801de12: d1aa bne.n 801dd6a + for (lpcb = tcp_listen_pcbs.listen_pcbs; lpcb != NULL; lpcb = lpcb->next) { + 801de14: 4b35 ldr r3, [pc, #212] ; (801deec ) + (lpcb->netif_idx != netif_get_index(ip_data.current_input_netif))) { + 801de16: f8d7 c004 ldr.w ip, [r7, #4] + for (lpcb = tcp_listen_pcbs.listen_pcbs; lpcb != NULL; lpcb = lpcb->next) { + 801de1a: 681a ldr r2, [r3, #0] + if (lpcb->local_port == tcphdr->dest) { + 801de1c: 6831 ldr r1, [r6, #0] + if (ip_addr_cmp(&lpcb->local_ip, ip_current_dest_addr())) { + 801de1e: f8d7 e014 ldr.w lr, [r7, #20] + for (lpcb = tcp_listen_pcbs.listen_pcbs; lpcb != NULL; lpcb = lpcb->next) { + 801de22: 4691 mov r9, r2 + 801de24: f1b9 0f00 cmp.w r9, #0 + 801de28: d113 bne.n 801de52 + if (!(TCPH_FLAGS(tcphdr) & TCP_RST)) { + 801de2a: 8988 ldrh r0, [r1, #12] + 801de2c: f7fa fd57 bl 80188de + 801de30: 0742 lsls r2, r0, #29 + 801de32: f53f aed4 bmi.w 801dbde + ip_current_src_addr(), tcphdr->dest, tcphdr->src); + 801de36: 6833 ldr r3, [r6, #0] + tcp_rst(NULL, ackno, seqno + tcplen, ip_current_dest_addr(), + 801de38: 4a28 ldr r2, [pc, #160] ; (801dedc ) + 801de3a: 8818 ldrh r0, [r3, #0] + 801de3c: 8811 ldrh r1, [r2, #0] + 801de3e: 4a28 ldr r2, [pc, #160] ; (801dee0 ) + 801de40: 6812 ldr r2, [r2, #0] + 801de42: 9002 str r0, [sp, #8] + 801de44: 885b ldrh r3, [r3, #2] + 801de46: 440a add r2, r1 + 801de48: 9301 str r3, [sp, #4] + 801de4a: 4b26 ldr r3, [pc, #152] ; (801dee4 ) + 801de4c: 9300 str r3, [sp, #0] + 801de4e: 3304 adds r3, #4 + 801de50: e36a b.n 801e528 + if ((lpcb->netif_idx != NETIF_NO_INDEX) && + 801de52: f899 0008 ldrb.w r0, [r9, #8] + 801de56: b128 cbz r0, 801de64 + (lpcb->netif_idx != netif_get_index(ip_data.current_input_netif))) { + 801de58: f89c 3034 ldrb.w r3, [ip, #52] ; 0x34 + 801de5c: 3301 adds r3, #1 + if ((lpcb->netif_idx != NETIF_NO_INDEX) && + 801de5e: b2db uxtb r3, r3 + 801de60: 4298 cmp r0, r3 + 801de62: d10c bne.n 801de7e + if (lpcb->local_port == tcphdr->dest) { + 801de64: 8848 ldrh r0, [r1, #2] + 801de66: f8b9 3016 ldrh.w r3, [r9, #22] + 801de6a: 4283 cmp r3, r0 + 801de6c: d107 bne.n 801de7e + if (ip_addr_cmp(&lpcb->local_ip, ip_current_dest_addr())) { + 801de6e: f8d9 3000 ldr.w r3, [r9] + 801de72: 4573 cmp r3, lr + 801de74: f000 833b beq.w 801e4ee + } else if (ip_addr_isany(&lpcb->local_ip)) { + 801de78: 2b00 cmp r3, #0 + 801de7a: f000 8338 beq.w 801e4ee + for (lpcb = tcp_listen_pcbs.listen_pcbs; lpcb != NULL; lpcb = lpcb->next) { + 801de7e: 464c mov r4, r9 + 801de80: f8d9 900c ldr.w r9, [r9, #12] + 801de84: e7ce b.n 801de24 + } else if (flags & TCP_SYN) { + 801de86: 0798 lsls r0, r3, #30 + 801de88: f57f aea9 bpl.w 801dbde + npcb = tcp_alloc(pcb->prio); + 801de8c: f899 0015 ldrb.w r0, [r9, #21] + 801de90: f7fe fc38 bl 801c704 + if (npcb == NULL) { + 801de94: 4682 mov sl, r0 + 801de96: bb78 cbnz r0, 801def8 + TCP_EVENT_ACCEPT(pcb, NULL, pcb->callback_arg, ERR_MEM, err); + 801de98: f8d9 3018 ldr.w r3, [r9, #24] + 801de9c: 2b00 cmp r3, #0 + 801de9e: f43f ae9e beq.w 801dbde + 801dea2: 4601 mov r1, r0 + 801dea4: f04f 32ff mov.w r2, #4294967295 + 801dea8: f8d9 0010 ldr.w r0, [r9, #16] + 801deac: 4798 blx r3 + 801deae: e696 b.n 801dbde + 801deb0: 0803b7e0 .word 0x0803b7e0 + 801deb4: 0803b547 .word 0x0803b547 + 801deb8: 0803b807 .word 0x0803b807 + 801debc: 0803b831 .word 0x0803b831 + 801dec0: 0803b858 .word 0x0803b858 + 801dec4: 08035999 .word 0x08035999 + 801dec8: 0803b883 .word 0x0803b883 + 801decc: 2001e6e8 .word 0x2001e6e8 + 801ded0: 2001e6e0 .word 0x2001e6e0 + 801ded4: 2001e6cc .word 0x2001e6cc + 801ded8: 2001e6f0 .word 0x2001e6f0 + 801dedc: 2001e706 .word 0x2001e706 + 801dee0: 2001e6ec .word 0x2001e6ec + 801dee4: 2001af44 .word 0x2001af44 + 801dee8: 2001e6bc .word 0x2001e6bc + 801deec: 2001e6b8 .word 0x2001e6b8 + 801def0: 2001e6d0 .word 0x2001e6d0 + 801def4: 2001e6e4 .word 0x2001e6e4 + ip_addr_copy(npcb->local_ip, *ip_current_dest_addr()); + 801def8: 697b ldr r3, [r7, #20] + npcb->remote_port = tcphdr->src; + 801defa: 6832 ldr r2, [r6, #0] + ip_addr_copy(npcb->local_ip, *ip_current_dest_addr()); + 801defc: 6003 str r3, [r0, #0] + ip_addr_copy(npcb->remote_ip, *ip_current_src_addr()); + 801defe: 693b ldr r3, [r7, #16] + npcb->rcv_nxt = seqno + 1; + 801df00: 4fa8 ldr r7, [pc, #672] ; (801e1a4 ) + ip_addr_copy(npcb->remote_ip, *ip_current_src_addr()); + 801df02: 6043 str r3, [r0, #4] + npcb->local_port = pcb->local_port; + 801df04: f8b9 3016 ldrh.w r3, [r9, #22] + 801df08: 82c3 strh r3, [r0, #22] + npcb->remote_port = tcphdr->src; + 801df0a: 7813 ldrb r3, [r2, #0] + 801df0c: 7852 ldrb r2, [r2, #1] + 801df0e: ea43 2302 orr.w r3, r3, r2, lsl #8 + 801df12: 8303 strh r3, [r0, #24] + npcb->state = SYN_RCVD; + 801df14: 2303 movs r3, #3 + 801df16: 7503 strb r3, [r0, #20] + npcb->rcv_nxt = seqno + 1; + 801df18: 683b ldr r3, [r7, #0] + 801df1a: 3301 adds r3, #1 + 801df1c: 6243 str r3, [r0, #36] ; 0x24 + npcb->rcv_ann_right_edge = npcb->rcv_nxt; + 801df1e: 62c3 str r3, [r0, #44] ; 0x2c + iss = tcp_next_iss(npcb); + 801df20: f7fe fa30 bl 801c384 + npcb->snd_wl1 = seqno - 1;/* initialise to seqno-1 to force window update */ + 801df24: 683b ldr r3, [r7, #0] + npcb->snd_wl2 = iss; + 801df26: f8ca 0058 str.w r0, [sl, #88] ; 0x58 + npcb->snd_wl1 = seqno - 1;/* initialise to seqno-1 to force window update */ + 801df2a: 3b01 subs r3, #1 + npcb->snd_nxt = iss; + 801df2c: f8ca 0050 str.w r0, [sl, #80] ; 0x50 + npcb->lastack = iss; + 801df30: f8ca 0044 str.w r0, [sl, #68] ; 0x44 + npcb->snd_wl1 = seqno - 1;/* initialise to seqno-1 to force window update */ + 801df34: f8ca 3054 str.w r3, [sl, #84] ; 0x54 + npcb->callback_arg = pcb->callback_arg; + 801df38: f8d9 3010 ldr.w r3, [r9, #16] + npcb->snd_lbb = iss; + 801df3c: f8ca 005c str.w r0, [sl, #92] ; 0x5c + npcb->callback_arg = pcb->callback_arg; + 801df40: f8ca 3010 str.w r3, [sl, #16] + npcb->listener = pcb; + 801df44: f8ca 907c str.w r9, [sl, #124] ; 0x7c + npcb->so_options = pcb->so_options & SOF_INHERITED; + 801df48: f899 3009 ldrb.w r3, [r9, #9] + 801df4c: f003 030c and.w r3, r3, #12 + 801df50: f88a 3009 strb.w r3, [sl, #9] + npcb->netif_idx = pcb->netif_idx; + 801df54: f899 3008 ldrb.w r3, [r9, #8] + 801df58: f88a 3008 strb.w r3, [sl, #8] + TCP_REG_ACTIVE(npcb); + 801df5c: f8d8 3000 ldr.w r3, [r8] + 801df60: f8c8 a000 str.w sl, [r8] + 801df64: f8ca 300c str.w r3, [sl, #12] + 801df68: f001 fad6 bl 801f518 + 801df6c: 4b8e ldr r3, [pc, #568] ; (801e1a8 ) + 801df6e: 2201 movs r2, #1 + tcp_parseopt(npcb); + 801df70: 4650 mov r0, sl + TCP_REG_ACTIVE(npcb); + 801df72: 701a strb r2, [r3, #0] + tcp_parseopt(npcb); + 801df74: f7ff f86a bl 801d04c + npcb->snd_wnd = tcphdr->wnd; + 801df78: 6833 ldr r3, [r6, #0] + npcb->mss = tcp_eff_send_mss(npcb->mss, &npcb->local_ip, &npcb->remote_ip); + 801df7a: f10a 0204 add.w r2, sl, #4 + 801df7e: f8ba 6032 ldrh.w r6, [sl, #50] ; 0x32 + npcb->snd_wnd = tcphdr->wnd; + 801df82: 89db ldrh r3, [r3, #14] + npcb->mss = tcp_eff_send_mss(npcb->mss, &npcb->local_ip, &npcb->remote_ip); + 801df84: 4610 mov r0, r2 + 801df86: 9205 str r2, [sp, #20] + npcb->snd_wnd = tcphdr->wnd; + 801df88: f8aa 3060 strh.w r3, [sl, #96] ; 0x60 + npcb->snd_wnd_max = npcb->snd_wnd; + 801df8c: f8aa 3062 strh.w r3, [sl, #98] ; 0x62 + npcb->mss = tcp_eff_send_mss(npcb->mss, &npcb->local_ip, &npcb->remote_ip); + 801df90: f7fc fac4 bl 801a51c + 801df94: 9a05 ldr r2, [sp, #20] + 801df96: 4601 mov r1, r0 + 801df98: 4630 mov r0, r6 + 801df9a: f7fe fa0d bl 801c3b8 + rc = tcp_enqueue_flags(npcb, TCP_SYN | TCP_ACK); + 801df9e: 2112 movs r1, #18 + npcb->mss = tcp_eff_send_mss(npcb->mss, &npcb->local_ip, &npcb->remote_ip); + 801dfa0: f8aa 0032 strh.w r0, [sl, #50] ; 0x32 + rc = tcp_enqueue_flags(npcb, TCP_SYN | TCP_ACK); + 801dfa4: 4650 mov r0, sl + 801dfa6: f000 fcdf bl 801e968 + if (rc != ERR_OK) { + 801dfaa: b120 cbz r0, 801dfb6 + tcp_abandon(npcb, 0); + 801dfac: 4621 mov r1, r4 + 801dfae: 4650 mov r0, sl + 801dfb0: f7fe fac2 bl 801c538 + return; + 801dfb4: e613 b.n 801dbde + tcp_output(npcb); + 801dfb6: 4650 mov r0, sl + 801dfb8: e726 b.n 801de08 + if (flags & TCP_RST) { + 801dfba: 4b7c ldr r3, [pc, #496] ; (801e1ac ) + tcp_input_pcb = pcb; + 801dfbc: 602c str r4, [r5, #0] + if (flags & TCP_RST) { + 801dfbe: 781a ldrb r2, [r3, #0] + 801dfc0: 0751 lsls r1, r2, #29 + 801dfc2: d539 bpl.n 801e038 + if (pcb->state == SYN_SENT) { + 801dfc4: 7d21 ldrb r1, [r4, #20] + 801dfc6: 2902 cmp r1, #2 + 801dfc8: d11f bne.n 801e00a + if (ackno == pcb->snd_nxt) { + 801dfca: 6d22 ldr r2, [r4, #80] ; 0x50 + 801dfcc: f8db 3000 ldr.w r3, [fp] + 801dfd0: 429a cmp r2, r3 + 801dfd2: d107 bne.n 801dfe4 + recv_flags |= TF_RESET; + 801dfd4: 783b ldrb r3, [r7, #0] + 801dfd6: f043 0308 orr.w r3, r3, #8 + 801dfda: 703b strb r3, [r7, #0] + tcp_clear_flags(pcb, TF_ACK_DELAY); + 801dfdc: 8b63 ldrh r3, [r4, #26] + 801dfde: f023 0301 bic.w r3, r3, #1 + 801dfe2: 8363 strh r3, [r4, #26] + if (recv_flags & TF_RESET) { + 801dfe4: 783b ldrb r3, [r7, #0] + 801dfe6: 0718 lsls r0, r3, #28 + 801dfe8: f140 8204 bpl.w 801e3f4 + TCP_EVENT_ERR(pcb->state, pcb->errf, pcb->callback_arg, ERR_RST); + 801dfec: f8d4 3090 ldr.w r3, [r4, #144] ; 0x90 + 801dff0: b11b cbz r3, 801dffa + 801dff2: f06f 010d mvn.w r1, #13 + 801dff6: 6920 ldr r0, [r4, #16] + 801dff8: 4798 blx r3 + tcp_pcb_remove(&tcp_active_pcbs, pcb); + 801dffa: 4621 mov r1, r4 + 801dffc: 486c ldr r0, [pc, #432] ; (801e1b0 ) + 801dffe: f7fe fa35 bl 801c46c + tcp_free(pcb); + 801e002: 4620 mov r0, r4 + 801e004: f7fe f8f8 bl 801c1f8 + 801e008: e69e b.n 801dd48 + if (seqno == pcb->rcv_nxt) { + 801e00a: 4b66 ldr r3, [pc, #408] ; (801e1a4 ) + 801e00c: 6a62 ldr r2, [r4, #36] ; 0x24 + 801e00e: 681b ldr r3, [r3, #0] + 801e010: 429a cmp r2, r3 + 801e012: d007 beq.n 801e024 + } else if (TCP_SEQ_BETWEEN(seqno, pcb->rcv_nxt, + 801e014: 1a9b subs r3, r3, r2 + 801e016: d4e5 bmi.n 801dfe4 + 801e018: 8d22 ldrh r2, [r4, #40] ; 0x28 + 801e01a: 1a9b subs r3, r3, r2 + 801e01c: 2b00 cmp r3, #0 + 801e01e: dce1 bgt.n 801dfe4 + tcp_ack_now(pcb); + 801e020: 8b63 ldrh r3, [r4, #26] + 801e022: e010 b.n 801e046 + LWIP_ASSERT("tcp_input: pcb->state != CLOSED", pcb->state != CLOSED); + 801e024: 2900 cmp r1, #0 + 801e026: d1d5 bne.n 801dfd4 + 801e028: 4b62 ldr r3, [pc, #392] ; (801e1b4 ) + 801e02a: f44f 724e mov.w r2, #824 ; 0x338 + 801e02e: 4962 ldr r1, [pc, #392] ; (801e1b8 ) + 801e030: 4862 ldr r0, [pc, #392] ; (801e1bc ) + 801e032: f016 fb8f bl 8034754 + 801e036: e7cd b.n 801dfd4 + if ((flags & TCP_SYN) && (pcb->state != SYN_SENT && pcb->state != SYN_RCVD)) { + 801e038: 0792 lsls r2, r2, #30 + tcp_ack_now(pcb); + 801e03a: 8b63 ldrh r3, [r4, #26] + if ((flags & TCP_SYN) && (pcb->state != SYN_SENT && pcb->state != SYN_RCVD)) { + 801e03c: d506 bpl.n 801e04c + 801e03e: 7d22 ldrb r2, [r4, #20] + 801e040: 3a02 subs r2, #2 + 801e042: 2a01 cmp r2, #1 + 801e044: d902 bls.n 801e04c + tcp_ack_now(pcb); + 801e046: f043 0302 orr.w r3, r3, #2 + 801e04a: e7ca b.n 801dfe2 + if ((pcb->flags & TF_RXCLOSED) == 0) { + 801e04c: 06d8 lsls r0, r3, #27 + tcp_parseopt(pcb); + 801e04e: 4620 mov r0, r4 + pcb->tmr = tcp_ticks; + 801e050: bf5e ittt pl + 801e052: 4b5b ldrpl r3, [pc, #364] ; (801e1c0 ) + 801e054: 681b ldrpl r3, [r3, #0] + 801e056: 6223 strpl r3, [r4, #32] + pcb->persist_probe = 0; + 801e058: 2300 movs r3, #0 + 801e05a: f8a4 309a strh.w r3, [r4, #154] ; 0x9a + tcp_parseopt(pcb); + 801e05e: f7fe fff5 bl 801d04c + switch (pcb->state) { + 801e062: 7d23 ldrb r3, [r4, #20] + 801e064: 3b02 subs r3, #2 + 801e066: 2b07 cmp r3, #7 + 801e068: d8bc bhi.n 801dfe4 + 801e06a: e8df f013 tbh [pc, r3, lsl #1] + 801e06e: 0008 .short 0x0008 + 801e070: 012400b3 .word 0x012400b3 + 801e074: 01730128 .word 0x01730128 + 801e078: 018c0124 .word 0x018c0124 + 801e07c: 01ac .short 0x01ac + if ((flags & TCP_ACK) && (flags & TCP_SYN) + 801e07e: 4b4b ldr r3, [pc, #300] ; (801e1ac ) + 801e080: 781b ldrb r3, [r3, #0] + 801e082: f003 0212 and.w r2, r3, #18 + 801e086: 2a12 cmp r2, #18 + 801e088: d16c bne.n 801e164 + && (ackno == pcb->lastack + 1)) { + 801e08a: 6c62 ldr r2, [r4, #68] ; 0x44 + 801e08c: f8db 1000 ldr.w r1, [fp] + 801e090: 3201 adds r2, #1 + 801e092: 428a cmp r2, r1 + 801e094: d166 bne.n 801e164 + pcb->rcv_nxt = seqno + 1; + 801e096: 4b43 ldr r3, [pc, #268] ; (801e1a4 ) + pcb->lastack = ackno; + 801e098: 6462 str r2, [r4, #68] ; 0x44 + pcb->rcv_nxt = seqno + 1; + 801e09a: 681b ldr r3, [r3, #0] + pcb->snd_wnd = tcphdr->wnd; + 801e09c: 6832 ldr r2, [r6, #0] + pcb->rcv_nxt = seqno + 1; + 801e09e: 1c59 adds r1, r3, #1 + pcb->snd_wl1 = seqno - 1; /* initialise to seqno - 1 to force window update */ + 801e0a0: 3b01 subs r3, #1 + pcb->mss = tcp_eff_send_mss(pcb->mss, &pcb->local_ip, &pcb->remote_ip); + 801e0a2: 8e66 ldrh r6, [r4, #50] ; 0x32 + pcb->rcv_nxt = seqno + 1; + 801e0a4: 6261 str r1, [r4, #36] ; 0x24 + pcb->rcv_ann_right_edge = pcb->rcv_nxt; + 801e0a6: 62e1 str r1, [r4, #44] ; 0x2c + pcb->snd_wnd = tcphdr->wnd; + 801e0a8: 89d2 ldrh r2, [r2, #14] + pcb->snd_wl1 = seqno - 1; /* initialise to seqno - 1 to force window update */ + 801e0aa: 6563 str r3, [r4, #84] ; 0x54 + pcb->state = ESTABLISHED; + 801e0ac: 2304 movs r3, #4 + pcb->snd_wnd = tcphdr->wnd; + 801e0ae: f8a4 2060 strh.w r2, [r4, #96] ; 0x60 + pcb->snd_wnd_max = pcb->snd_wnd; + 801e0b2: f8a4 2062 strh.w r2, [r4, #98] ; 0x62 + pcb->mss = tcp_eff_send_mss(pcb->mss, &pcb->local_ip, &pcb->remote_ip); + 801e0b6: 18e2 adds r2, r4, r3 + pcb->state = ESTABLISHED; + 801e0b8: 7523 strb r3, [r4, #20] + pcb->mss = tcp_eff_send_mss(pcb->mss, &pcb->local_ip, &pcb->remote_ip); + 801e0ba: 4610 mov r0, r2 + 801e0bc: 9205 str r2, [sp, #20] + 801e0be: f7fc fa2d bl 801a51c + 801e0c2: 9a05 ldr r2, [sp, #20] + 801e0c4: 4601 mov r1, r0 + 801e0c6: 4630 mov r0, r6 + 801e0c8: f7fe f976 bl 801c3b8 + pcb->cwnd = LWIP_TCP_CALC_INITIAL_CWND(pcb->mss); + 801e0cc: f241 131c movw r3, #4380 ; 0x111c + 801e0d0: 0042 lsls r2, r0, #1 + pcb->mss = tcp_eff_send_mss(pcb->mss, &pcb->local_ip, &pcb->remote_ip); + 801e0d2: 8660 strh r0, [r4, #50] ; 0x32 + pcb->cwnd = LWIP_TCP_CALC_INITIAL_CWND(pcb->mss); + 801e0d4: 0081 lsls r1, r0, #2 + 801e0d6: 429a cmp r2, r3 + 801e0d8: 4616 mov r6, r2 + 801e0da: bf38 it cc + 801e0dc: 461e movcc r6, r3 + 801e0de: ebb6 0f80 cmp.w r6, r0, lsl #2 + 801e0e2: d933 bls.n 801e14c + 801e0e4: b28b uxth r3, r1 + 801e0e6: f8a4 3048 strh.w r3, [r4, #72] ; 0x48 + LWIP_ASSERT("pcb->snd_queuelen > 0", (pcb->snd_queuelen > 0)); + 801e0ea: f8b4 3066 ldrh.w r3, [r4, #102] ; 0x66 + 801e0ee: b933 cbnz r3, 801e0fe + 801e0f0: 4b30 ldr r3, [pc, #192] ; (801e1b4 ) + 801e0f2: f44f 725b mov.w r2, #876 ; 0x36c + 801e0f6: 4933 ldr r1, [pc, #204] ; (801e1c4 ) + 801e0f8: 4830 ldr r0, [pc, #192] ; (801e1bc ) + 801e0fa: f016 fb2b bl 8034754 + --pcb->snd_queuelen; + 801e0fe: f8b4 3066 ldrh.w r3, [r4, #102] ; 0x66 + rseg = pcb->unacked; + 801e102: 6f26 ldr r6, [r4, #112] ; 0x70 + --pcb->snd_queuelen; + 801e104: 3b01 subs r3, #1 + 801e106: f8a4 3066 strh.w r3, [r4, #102] ; 0x66 + if (rseg == NULL) { + 801e10a: bb1e cbnz r6, 801e154 + rseg = pcb->unsent; + 801e10c: 6ee6 ldr r6, [r4, #108] ; 0x6c + LWIP_ASSERT("no segment to free", rseg != NULL); + 801e10e: b936 cbnz r6, 801e11e + 801e110: 4b28 ldr r3, [pc, #160] ; (801e1b4 ) + 801e112: f44f 725d mov.w r2, #884 ; 0x374 + 801e116: 492c ldr r1, [pc, #176] ; (801e1c8 ) + 801e118: 4828 ldr r0, [pc, #160] ; (801e1bc ) + 801e11a: f016 fb1b bl 8034754 + pcb->unsent = rseg->next; + 801e11e: 6833 ldr r3, [r6, #0] + 801e120: 66e3 str r3, [r4, #108] ; 0x6c + tcp_seg_free(rseg); + 801e122: 4630 mov r0, r6 + 801e124: f7fe f8f4 bl 801c310 + if (pcb->unacked == NULL) { + 801e128: 6f23 ldr r3, [r4, #112] ; 0x70 + 801e12a: b9b3 cbnz r3, 801e15a + pcb->rtime = -1; + 801e12c: f64f 73ff movw r3, #65535 ; 0xffff + 801e130: 8623 strh r3, [r4, #48] ; 0x30 + TCP_EVENT_CONNECTED(pcb, ERR_OK, err); + 801e132: f8d4 3088 ldr.w r3, [r4, #136] ; 0x88 + 801e136: 2b00 cmp r3, #0 + 801e138: f43f af72 beq.w 801e020 + 801e13c: 2200 movs r2, #0 + 801e13e: 4621 mov r1, r4 + 801e140: 6920 ldr r0, [r4, #16] + 801e142: 4798 blx r3 + if (err == ERR_ABRT) { + 801e144: 300d adds r0, #13 + 801e146: f47f af6b bne.w 801e020 + 801e14a: e5fd b.n 801dd48 + pcb->cwnd = LWIP_TCP_CALC_INITIAL_CWND(pcb->mss); + 801e14c: 429a cmp r2, r3 + 801e14e: bf88 it hi + 801e150: b293 uxthhi r3, r2 + 801e152: e7c8 b.n 801e0e6 + pcb->unacked = rseg->next; + 801e154: 6833 ldr r3, [r6, #0] + 801e156: 6723 str r3, [r4, #112] ; 0x70 + 801e158: e7e3 b.n 801e122 + pcb->rtime = 0; + 801e15a: 2300 movs r3, #0 + 801e15c: 8623 strh r3, [r4, #48] ; 0x30 + pcb->nrtx = 0; + 801e15e: f884 3042 strb.w r3, [r4, #66] ; 0x42 + 801e162: e7e6 b.n 801e132 + else if (flags & TCP_ACK) { + 801e164: 06d9 lsls r1, r3, #27 + 801e166: f57f af3d bpl.w 801dfe4 + ip_current_src_addr(), tcphdr->dest, tcphdr->src); + 801e16a: 6833 ldr r3, [r6, #0] + tcp_rst(pcb, ackno, seqno + tcplen, ip_current_dest_addr(), + 801e16c: 4a17 ldr r2, [pc, #92] ; (801e1cc ) + 801e16e: 8818 ldrh r0, [r3, #0] + 801e170: 8811 ldrh r1, [r2, #0] + 801e172: 4a0c ldr r2, [pc, #48] ; (801e1a4 ) + 801e174: 6812 ldr r2, [r2, #0] + 801e176: 9002 str r0, [sp, #8] + 801e178: 4620 mov r0, r4 + 801e17a: 885b ldrh r3, [r3, #2] + 801e17c: 440a add r2, r1 + 801e17e: f8db 1000 ldr.w r1, [fp] + 801e182: 9301 str r3, [sp, #4] + 801e184: 4b12 ldr r3, [pc, #72] ; (801e1d0 ) + 801e186: 9300 str r3, [sp, #0] + 801e188: 3304 adds r3, #4 + 801e18a: f000 fd69 bl 801ec60 + if (pcb->nrtx < TCP_SYNMAXRTX) { + 801e18e: f894 3042 ldrb.w r3, [r4, #66] ; 0x42 + 801e192: 2b05 cmp r3, #5 + 801e194: f63f af26 bhi.w 801dfe4 + pcb->rtime = 0; + 801e198: 2300 movs r3, #0 + tcp_rexmit_rto(pcb); + 801e19a: 4620 mov r0, r4 + pcb->rtime = 0; + 801e19c: 8623 strh r3, [r4, #48] ; 0x30 + tcp_rexmit_rto(pcb); + 801e19e: f000 ff9d bl 801f0dc + if (err != ERR_ABRT) { + 801e1a2: e71f b.n 801dfe4 + 801e1a4: 2001e6ec .word 0x2001e6ec + 801e1a8: 2001e6b0 .word 0x2001e6b0 + 801e1ac: 2001e6cc .word 0x2001e6cc + 801e1b0: 2001e6ac .word 0x2001e6ac + 801e1b4: 0803b547 .word 0x0803b547 + 801e1b8: 0803b8da .word 0x0803b8da + 801e1bc: 08035999 .word 0x08035999 + 801e1c0: 2001e6bc .word 0x2001e6bc + 801e1c4: 0803b8fa .word 0x0803b8fa + 801e1c8: 0803b910 .word 0x0803b910 + 801e1cc: 2001e706 .word 0x2001e706 + 801e1d0: 2001af44 .word 0x2001af44 + if (flags & TCP_ACK) { + 801e1d4: 4b9d ldr r3, [pc, #628] ; (801e44c ) + 801e1d6: 781b ldrb r3, [r3, #0] + 801e1d8: 06da lsls r2, r3, #27 + 801e1da: d55e bpl.n 801e29a + if (TCP_SEQ_BETWEEN(ackno, pcb->lastack + 1, pcb->snd_nxt)) { + 801e1dc: 6c63 ldr r3, [r4, #68] ; 0x44 + 801e1de: f8db 1000 ldr.w r1, [fp] + 801e1e2: 43db mvns r3, r3 + 801e1e4: 42cb cmn r3, r1 + 801e1e6: d447 bmi.n 801e278 + 801e1e8: 6d23 ldr r3, [r4, #80] ; 0x50 + 801e1ea: 1acb subs r3, r1, r3 + 801e1ec: 2b00 cmp r3, #0 + 801e1ee: dc43 bgt.n 801e278 + pcb->state = ESTABLISHED; + 801e1f0: 2304 movs r3, #4 + 801e1f2: 7523 strb r3, [r4, #20] + if (pcb->listener == NULL) { + 801e1f4: 6fe3 ldr r3, [r4, #124] ; 0x7c + 801e1f6: b91b cbnz r3, 801e200 + tcp_abort(pcb); + 801e1f8: 4620 mov r0, r4 + 801e1fa: f7fe fa1f bl 801c63c + goto aborted; + 801e1fe: e5a3 b.n 801dd48 + LWIP_ASSERT("pcb->listener->accept != NULL", pcb->listener->accept != NULL); + 801e200: 699b ldr r3, [r3, #24] + 801e202: b933 cbnz r3, 801e212 + 801e204: 4b92 ldr r3, [pc, #584] ; (801e450 ) + 801e206: f44f 726a mov.w r2, #936 ; 0x3a8 + 801e20a: 4992 ldr r1, [pc, #584] ; (801e454 ) + 801e20c: 4892 ldr r0, [pc, #584] ; (801e458 ) + 801e20e: f016 faa1 bl 8034754 + TCP_EVENT_ACCEPT(pcb->listener, pcb, pcb->callback_arg, ERR_OK, err); + 801e212: 6fe3 ldr r3, [r4, #124] ; 0x7c + 801e214: 699b ldr r3, [r3, #24] + 801e216: 2b00 cmp r3, #0 + 801e218: d0ee beq.n 801e1f8 + 801e21a: 2200 movs r2, #0 + 801e21c: 4621 mov r1, r4 + 801e21e: 6920 ldr r0, [r4, #16] + 801e220: 4798 blx r3 + if (err != ERR_OK) { + 801e222: b118 cbz r0, 801e22c + if (err != ERR_ABRT) { + 801e224: 300d adds r0, #13 + 801e226: f43f ad8f beq.w 801dd48 + 801e22a: e7e5 b.n 801e1f8 + tcp_receive(pcb); + 801e22c: 4620 mov r0, r4 + 801e22e: f7fe ffe3 bl 801d1f8 + if (recv_acked != 0) { + 801e232: 4a8a ldr r2, [pc, #552] ; (801e45c ) + 801e234: 8813 ldrh r3, [r2, #0] + 801e236: b10b cbz r3, 801e23c + recv_acked--; + 801e238: 3b01 subs r3, #1 + 801e23a: 8013 strh r3, [r2, #0] + pcb->cwnd = LWIP_TCP_CALC_INITIAL_CWND(pcb->mss); + 801e23c: 8e61 ldrh r1, [r4, #50] ; 0x32 + 801e23e: f241 131c movw r3, #4380 ; 0x111c + 801e242: 004a lsls r2, r1, #1 + 801e244: 0088 lsls r0, r1, #2 + 801e246: 429a cmp r2, r3 + 801e248: 4616 mov r6, r2 + 801e24a: bf38 it cc + 801e24c: 461e movcc r6, r3 + 801e24e: ebb6 0f81 cmp.w r6, r1, lsl #2 + 801e252: d90d bls.n 801e270 + 801e254: b283 uxth r3, r0 + 801e256: f8a4 3048 strh.w r3, [r4, #72] ; 0x48 + if (recv_flags & TF_GOT_FIN) { /* passive close */ + 801e25a: 783b ldrb r3, [r7, #0] + 801e25c: 0698 lsls r0, r3, #26 + 801e25e: f57f aec1 bpl.w 801dfe4 + tcp_ack_now(pcb); + 801e262: 8b63 ldrh r3, [r4, #26] + 801e264: f043 0302 orr.w r3, r3, #2 + 801e268: 8363 strh r3, [r4, #26] + pcb->state = CLOSE_WAIT; + 801e26a: 2307 movs r3, #7 + pcb->state = FIN_WAIT_2; + 801e26c: 7523 strb r3, [r4, #20] + if (err != ERR_ABRT) { + 801e26e: e6b9 b.n 801dfe4 + pcb->cwnd = LWIP_TCP_CALC_INITIAL_CWND(pcb->mss); + 801e270: 429a cmp r2, r3 + 801e272: bf88 it hi + 801e274: b293 uxthhi r3, r2 + 801e276: e7ee b.n 801e256 + ip_current_src_addr(), tcphdr->dest, tcphdr->src); + 801e278: 6833 ldr r3, [r6, #0] + tcp_rst(pcb, ackno, seqno + tcplen, ip_current_dest_addr(), + 801e27a: 4a79 ldr r2, [pc, #484] ; (801e460 ) + 801e27c: 881e ldrh r6, [r3, #0] + 801e27e: 8810 ldrh r0, [r2, #0] + 801e280: 4a78 ldr r2, [pc, #480] ; (801e464 ) + 801e282: 6812 ldr r2, [r2, #0] + 801e284: 9602 str r6, [sp, #8] + 801e286: 885b ldrh r3, [r3, #2] + 801e288: 4402 add r2, r0 + 801e28a: 4620 mov r0, r4 + 801e28c: 9301 str r3, [sp, #4] + 801e28e: 4b76 ldr r3, [pc, #472] ; (801e468 ) + 801e290: 9300 str r3, [sp, #0] + 801e292: 3304 adds r3, #4 + 801e294: f000 fce4 bl 801ec60 + if (err != ERR_ABRT) { + 801e298: e6a4 b.n 801dfe4 + } else if ((flags & TCP_SYN) && (seqno == pcb->rcv_nxt - 1)) { + 801e29a: 079e lsls r6, r3, #30 + 801e29c: f57f aea2 bpl.w 801dfe4 + 801e2a0: 6a63 ldr r3, [r4, #36] ; 0x24 + 801e2a2: 4a70 ldr r2, [pc, #448] ; (801e464 ) + 801e2a4: 3b01 subs r3, #1 + 801e2a6: 6812 ldr r2, [r2, #0] + 801e2a8: 4293 cmp r3, r2 + 801e2aa: f47f ae9b bne.w 801dfe4 + tcp_rexmit(pcb); + 801e2ae: 4620 mov r0, r4 + 801e2b0: f000 fc62 bl 801eb78 + if (err != ERR_ABRT) { + 801e2b4: e696 b.n 801dfe4 + tcp_receive(pcb); + 801e2b6: 4620 mov r0, r4 + 801e2b8: f7fe ff9e bl 801d1f8 + 801e2bc: e7cd b.n 801e25a + tcp_receive(pcb); + 801e2be: 4620 mov r0, r4 + 801e2c0: f7fe ff9a bl 801d1f8 + if (recv_flags & TF_GOT_FIN) { + 801e2c4: 783b ldrb r3, [r7, #0] + 801e2c6: f013 0f20 tst.w r3, #32 + if ((flags & TCP_ACK) && (ackno == pcb->snd_nxt) && + 801e2ca: 4b60 ldr r3, [pc, #384] ; (801e44c ) + 801e2cc: 781b ldrb r3, [r3, #0] + if (recv_flags & TF_GOT_FIN) { + 801e2ce: d032 beq.n 801e336 + if ((flags & TCP_ACK) && (ackno == pcb->snd_nxt) && + 801e2d0: f013 0f10 tst.w r3, #16 + 801e2d4: 8b63 ldrh r3, [r4, #26] + 801e2d6: d029 beq.n 801e32c + 801e2d8: 6d21 ldr r1, [r4, #80] ; 0x50 + 801e2da: f8db 2000 ldr.w r2, [fp] + 801e2de: 4291 cmp r1, r2 + 801e2e0: d124 bne.n 801e32c + 801e2e2: 6ee2 ldr r2, [r4, #108] ; 0x6c + 801e2e4: bb12 cbnz r2, 801e32c + tcp_ack_now(pcb); + 801e2e6: f043 0302 orr.w r3, r3, #2 + tcp_pcb_purge(pcb); + 801e2ea: 4620 mov r0, r4 + tcp_ack_now(pcb); + 801e2ec: 8363 strh r3, [r4, #26] + tcp_pcb_purge(pcb); + 801e2ee: f7fe f88b bl 801c408 + TCP_RMV_ACTIVE(pcb); + 801e2f2: f8d8 3000 ldr.w r3, [r8] + 801e2f6: 429c cmp r4, r3 + 801e2f8: d10a bne.n 801e310 + TCP_RMV_ACTIVE(pcb); + 801e2fa: 68e3 ldr r3, [r4, #12] + 801e2fc: f8c8 3000 str.w r3, [r8] + 801e300: e008 b.n 801e314 + TCP_RMV_ACTIVE(pcb); + 801e302: 68da ldr r2, [r3, #12] + 801e304: 4294 cmp r4, r2 + 801e306: d102 bne.n 801e30e + TCP_RMV_ACTIVE(pcb); + 801e308: 68e2 ldr r2, [r4, #12] + 801e30a: 60da str r2, [r3, #12] + 801e30c: e002 b.n 801e314 + 801e30e: 4613 mov r3, r2 + TCP_RMV_ACTIVE(pcb); + 801e310: 2b00 cmp r3, #0 + 801e312: d1f6 bne.n 801e302 + TCP_RMV_ACTIVE(pcb); + 801e314: 4b55 ldr r3, [pc, #340] ; (801e46c ) + 801e316: 2201 movs r2, #1 + 801e318: 701a strb r2, [r3, #0] + pcb->state = TIME_WAIT; + 801e31a: 230a movs r3, #10 + 801e31c: 7523 strb r3, [r4, #20] + TCP_REG(&tcp_tw_pcbs, pcb); + 801e31e: 4b54 ldr r3, [pc, #336] ; (801e470 ) + 801e320: 681a ldr r2, [r3, #0] + 801e322: 601c str r4, [r3, #0] + 801e324: 60e2 str r2, [r4, #12] + 801e326: f001 f8f7 bl 801f518 + if (err != ERR_ABRT) { + 801e32a: e65b b.n 801dfe4 + tcp_ack_now(pcb); + 801e32c: f043 0302 orr.w r3, r3, #2 + 801e330: 8363 strh r3, [r4, #26] + pcb->state = CLOSING; + 801e332: 2308 movs r3, #8 + 801e334: e79a b.n 801e26c + } else if ((flags & TCP_ACK) && (ackno == pcb->snd_nxt) && + 801e336: 06d9 lsls r1, r3, #27 + 801e338: f57f ae54 bpl.w 801dfe4 + 801e33c: 6d22 ldr r2, [r4, #80] ; 0x50 + 801e33e: f8db 3000 ldr.w r3, [fp] + 801e342: 429a cmp r2, r3 + 801e344: f47f ae4e bne.w 801dfe4 + 801e348: 6ee3 ldr r3, [r4, #108] ; 0x6c + 801e34a: 2b00 cmp r3, #0 + 801e34c: f47f ae4a bne.w 801dfe4 + pcb->state = FIN_WAIT_2; + 801e350: 2306 movs r3, #6 + 801e352: e78b b.n 801e26c + tcp_receive(pcb); + 801e354: 4620 mov r0, r4 + 801e356: f7fe ff4f bl 801d1f8 + if (recv_flags & TF_GOT_FIN) { + 801e35a: 783b ldrb r3, [r7, #0] + 801e35c: 069a lsls r2, r3, #26 + 801e35e: f57f ae41 bpl.w 801dfe4 + tcp_ack_now(pcb); + 801e362: 8b63 ldrh r3, [r4, #26] + tcp_pcb_purge(pcb); + 801e364: 4620 mov r0, r4 + tcp_ack_now(pcb); + 801e366: f043 0302 orr.w r3, r3, #2 + 801e36a: 8363 strh r3, [r4, #26] + tcp_pcb_purge(pcb); + 801e36c: f7fe f84c bl 801c408 + TCP_RMV_ACTIVE(pcb); + 801e370: f8d8 3000 ldr.w r3, [r8] + 801e374: 429c cmp r4, r3 + 801e376: d0c0 beq.n 801e2fa + 801e378: 2b00 cmp r3, #0 + 801e37a: d0cb beq.n 801e314 + 801e37c: 68da ldr r2, [r3, #12] + 801e37e: 4294 cmp r4, r2 + 801e380: d0c2 beq.n 801e308 + 801e382: 4613 mov r3, r2 + 801e384: e7f8 b.n 801e378 + tcp_receive(pcb); + 801e386: 4620 mov r0, r4 + 801e388: f7fe ff36 bl 801d1f8 + if ((flags & TCP_ACK) && ackno == pcb->snd_nxt && pcb->unsent == NULL) { + 801e38c: 4b2f ldr r3, [pc, #188] ; (801e44c ) + 801e38e: 781b ldrb r3, [r3, #0] + 801e390: 06db lsls r3, r3, #27 + 801e392: f57f ae27 bpl.w 801dfe4 + 801e396: 6d22 ldr r2, [r4, #80] ; 0x50 + 801e398: f8db 3000 ldr.w r3, [fp] + 801e39c: 429a cmp r2, r3 + 801e39e: f47f ae21 bne.w 801dfe4 + 801e3a2: 6ee3 ldr r3, [r4, #108] ; 0x6c + 801e3a4: 2b00 cmp r3, #0 + 801e3a6: f47f ae1d bne.w 801dfe4 + tcp_pcb_purge(pcb); + 801e3aa: 4620 mov r0, r4 + 801e3ac: f7fe f82c bl 801c408 + TCP_RMV_ACTIVE(pcb); + 801e3b0: f8d8 3000 ldr.w r3, [r8] + 801e3b4: 429c cmp r4, r3 + 801e3b6: d0a0 beq.n 801e2fa + 801e3b8: 2b00 cmp r3, #0 + 801e3ba: d0ab beq.n 801e314 + 801e3bc: 68da ldr r2, [r3, #12] + 801e3be: 4294 cmp r4, r2 + 801e3c0: d0a2 beq.n 801e308 + 801e3c2: 4613 mov r3, r2 + 801e3c4: e7f8 b.n 801e3b8 + tcp_receive(pcb); + 801e3c6: 4620 mov r0, r4 + 801e3c8: f7fe ff16 bl 801d1f8 + if ((flags & TCP_ACK) && ackno == pcb->snd_nxt && pcb->unsent == NULL) { + 801e3cc: 4b1f ldr r3, [pc, #124] ; (801e44c ) + 801e3ce: 781b ldrb r3, [r3, #0] + 801e3d0: 06de lsls r6, r3, #27 + 801e3d2: f57f ae07 bpl.w 801dfe4 + 801e3d6: 6d21 ldr r1, [r4, #80] ; 0x50 + 801e3d8: f8db 2000 ldr.w r2, [fp] + recv_flags |= TF_CLOSED; + 801e3dc: 783b ldrb r3, [r7, #0] + if ((flags & TCP_ACK) && ackno == pcb->snd_nxt && pcb->unsent == NULL) { + 801e3de: 4291 cmp r1, r2 + 801e3e0: f47f ae00 bne.w 801dfe4 + 801e3e4: 6ee2 ldr r2, [r4, #108] ; 0x6c + 801e3e6: 2a00 cmp r2, #0 + 801e3e8: f47f adfc bne.w 801dfe4 + recv_flags |= TF_CLOSED; + 801e3ec: f043 0310 orr.w r3, r3, #16 + 801e3f0: 703b strb r3, [r7, #0] + if (err != ERR_ABRT) { + 801e3f2: e5f7 b.n 801dfe4 + if (recv_acked > 0) { + 801e3f4: 4b19 ldr r3, [pc, #100] ; (801e45c ) + 801e3f6: 881a ldrh r2, [r3, #0] + 801e3f8: b12a cbz r2, 801e406 + TCP_EVENT_SENT(pcb, (u16_t)acked16, err); + 801e3fa: f8d4 3080 ldr.w r3, [r4, #128] ; 0x80 + 801e3fe: b9fb cbnz r3, 801e440 + recv_acked = 0; + 801e400: 2300 movs r3, #0 + 801e402: 4a16 ldr r2, [pc, #88] ; (801e45c ) + 801e404: 8013 strh r3, [r2, #0] + if (tcp_input_delayed_close(pcb)) { + 801e406: 4620 mov r0, r4 + 801e408: f7fe fe68 bl 801d0dc + 801e40c: 2800 cmp r0, #0 + 801e40e: f47f ac9b bne.w 801dd48 + if (recv_data != NULL) { + 801e412: f8da 3000 ldr.w r3, [sl] + 801e416: 2b00 cmp r3, #0 + 801e418: d03c beq.n 801e494 + LWIP_ASSERT("pcb->refused_data == NULL", pcb->refused_data == NULL); + 801e41a: 6fa3 ldr r3, [r4, #120] ; 0x78 + 801e41c: b133 cbz r3, 801e42c + 801e41e: 4b0c ldr r3, [pc, #48] ; (801e450 ) + 801e420: f44f 72f3 mov.w r2, #486 ; 0x1e6 + 801e424: 4913 ldr r1, [pc, #76] ; (801e474 ) + 801e426: 480c ldr r0, [pc, #48] ; (801e458 ) + 801e428: f016 f994 bl 8034754 + if (pcb->flags & TF_RXCLOSED) { + 801e42c: 8b63 ldrh r3, [r4, #26] + pbuf_free(recv_data); + 801e42e: f8da 2000 ldr.w r2, [sl] + if (pcb->flags & TF_RXCLOSED) { + 801e432: f013 0310 ands.w r3, r3, #16 + 801e436: d01f beq.n 801e478 + pbuf_free(recv_data); + 801e438: 4610 mov r0, r2 + 801e43a: f7fd fb7d bl 801bb38 + 801e43e: e6db b.n 801e1f8 + TCP_EVENT_SENT(pcb, (u16_t)acked16, err); + 801e440: 4621 mov r1, r4 + 801e442: 6920 ldr r0, [r4, #16] + 801e444: 4798 blx r3 + if (err == ERR_ABRT) { + 801e446: 300d adds r0, #13 + 801e448: d1da bne.n 801e400 + 801e44a: e47d b.n 801dd48 + 801e44c: 2001e6cc .word 0x2001e6cc + 801e450: 0803b547 .word 0x0803b547 + 801e454: 0803b923 .word 0x0803b923 + 801e458: 08035999 .word 0x08035999 + 801e45c: 2001e6e0 .word 0x2001e6e0 + 801e460: 2001e706 .word 0x2001e706 + 801e464: 2001e6ec .word 0x2001e6ec + 801e468: 2001af44 .word 0x2001af44 + 801e46c: 2001e6b0 .word 0x2001e6b0 + 801e470: 2001e6c4 .word 0x2001e6c4 + 801e474: 0803b941 .word 0x0803b941 + TCP_EVENT_RECV(pcb, recv_data, ERR_OK, err); + 801e478: f8d4 6084 ldr.w r6, [r4, #132] ; 0x84 + 801e47c: b1fe cbz r6, 801e4be + 801e47e: 4621 mov r1, r4 + 801e480: 6920 ldr r0, [r4, #16] + 801e482: 47b0 blx r6 + if (err == ERR_ABRT) { + 801e484: f110 0f0d cmn.w r0, #13 + 801e488: f43f ac5e beq.w 801dd48 + if (err != ERR_OK) { + 801e48c: b110 cbz r0, 801e494 + pcb->refused_data = recv_data; + 801e48e: f8da 3000 ldr.w r3, [sl] + 801e492: 67a3 str r3, [r4, #120] ; 0x78 + if (recv_flags & TF_GOT_FIN) { + 801e494: 783b ldrb r3, [r7, #0] + 801e496: 0699 lsls r1, r3, #26 + 801e498: d505 bpl.n 801e4a6 + if (pcb->refused_data != NULL) { + 801e49a: 6fa3 ldr r3, [r4, #120] ; 0x78 + 801e49c: b1ab cbz r3, 801e4ca + pcb->refused_data->flags |= PBUF_FLAG_TCP_FIN; + 801e49e: 7b5a ldrb r2, [r3, #13] + 801e4a0: f042 0220 orr.w r2, r2, #32 + 801e4a4: 735a strb r2, [r3, #13] + tcp_input_pcb = NULL; + 801e4a6: 2300 movs r3, #0 + if (tcp_input_delayed_close(pcb)) { + 801e4a8: 4620 mov r0, r4 + tcp_input_pcb = NULL; + 801e4aa: 602b str r3, [r5, #0] + if (tcp_input_delayed_close(pcb)) { + 801e4ac: f7fe fe16 bl 801d0dc + 801e4b0: 2800 cmp r0, #0 + 801e4b2: f47f ac49 bne.w 801dd48 + tcp_output(pcb); + 801e4b6: 4620 mov r0, r4 + 801e4b8: f000 fc4a bl 801ed50 + 801e4bc: e444 b.n 801dd48 + TCP_EVENT_RECV(pcb, recv_data, ERR_OK, err); + 801e4be: 4633 mov r3, r6 + 801e4c0: 4621 mov r1, r4 + 801e4c2: 4630 mov r0, r6 + 801e4c4: f7fe fa88 bl 801c9d8 + 801e4c8: e7dc b.n 801e484 + if (pcb->rcv_wnd != TCP_WND_MAX(pcb)) { + 801e4ca: 8d23 ldrh r3, [r4, #40] ; 0x28 + TCP_EVENT_CLOSED(pcb, err); + 801e4cc: f8d4 6084 ldr.w r6, [r4, #132] ; 0x84 + if (pcb->rcv_wnd != TCP_WND_MAX(pcb)) { + 801e4d0: f5b3 6f06 cmp.w r3, #2144 ; 0x860 + pcb->rcv_wnd++; + 801e4d4: bf1c itt ne + 801e4d6: 3301 addne r3, #1 + 801e4d8: 8523 strhne r3, [r4, #40] ; 0x28 + TCP_EVENT_CLOSED(pcb, err); + 801e4da: 2e00 cmp r6, #0 + 801e4dc: d0e3 beq.n 801e4a6 + 801e4de: 2300 movs r3, #0 + 801e4e0: 4621 mov r1, r4 + 801e4e2: 6920 ldr r0, [r4, #16] + 801e4e4: 461a mov r2, r3 + 801e4e6: 47b0 blx r6 + if (err == ERR_ABRT) { + 801e4e8: 300d adds r0, #13 + 801e4ea: d1dc bne.n 801e4a6 + 801e4ec: e42c b.n 801dd48 + if (prev != NULL) { + 801e4ee: b13c cbz r4, 801e500 + ((struct tcp_pcb_listen *)prev)->next = lpcb->next; + 801e4f0: f8d9 300c ldr.w r3, [r9, #12] + 801e4f4: 60e3 str r3, [r4, #12] + tcp_listen_pcbs.listen_pcbs = lpcb; + 801e4f6: 4b11 ldr r3, [pc, #68] ; (801e53c ) + lpcb->next = tcp_listen_pcbs.listen_pcbs; + 801e4f8: f8c9 200c str.w r2, [r9, #12] + tcp_listen_pcbs.listen_pcbs = lpcb; + 801e4fc: f8c3 9000 str.w r9, [r3] + if (flags & TCP_RST) { + 801e500: 4b0f ldr r3, [pc, #60] ; (801e540 ) + 801e502: 781b ldrb r3, [r3, #0] + 801e504: 075c lsls r4, r3, #29 + 801e506: f53f ab6a bmi.w 801dbde + if (flags & TCP_ACK) { + 801e50a: f013 0410 ands.w r4, r3, #16 + 801e50e: f43f acba beq.w 801de86 + tcp_rst((const struct tcp_pcb *)pcb, ackno, seqno + tcplen, ip_current_dest_addr(), + 801e512: 4b0c ldr r3, [pc, #48] ; (801e544 ) + 801e514: 881c ldrh r4, [r3, #0] + 801e516: 4b0c ldr r3, [pc, #48] ; (801e548 ) + 801e518: 681a ldr r2, [r3, #0] + 801e51a: 880b ldrh r3, [r1, #0] + 801e51c: 4422 add r2, r4 + 801e51e: e9cd 0301 strd r0, r3, [sp, #4] + 801e522: 4b0a ldr r3, [pc, #40] ; (801e54c ) + 801e524: 9300 str r3, [sp, #0] + 801e526: 3304 adds r3, #4 + 801e528: f8db 1000 ldr.w r1, [fp] + 801e52c: 4648 mov r0, r9 + 801e52e: e45b b.n 801dde8 + if (prev != NULL) { + 801e530: f1ba 0f00 cmp.w sl, #0 + 801e534: f47f abc1 bne.w 801dcba + 801e538: f7ff bbd1 b.w 801dcde + 801e53c: 2001e6b8 .word 0x2001e6b8 + 801e540: 2001e6cc .word 0x2001e6cc + 801e544: 2001e706 .word 0x2001e706 + 801e548: 2001e6ec .word 0x2001e6ec + 801e54c: 2001af44 .word 0x2001af44 + +0801e550 : + +void +tcp_trigger_input_pcb_close(void) +{ + recv_flags |= TF_CLOSED; + 801e550: 4a02 ldr r2, [pc, #8] ; (801e55c ) + 801e552: 7813 ldrb r3, [r2, #0] + 801e554: f043 0310 orr.w r3, r3, #16 + 801e558: 7013 strb r3, [r2, #0] +} + 801e55a: 4770 bx lr + 801e55c: 2001e6e8 .word 0x2001e6e8 + +0801e560 : + * @arg seg the tcp segment to check + * @return 1 if ref != 1, 0 if ref == 1 + */ +static int +tcp_output_segment_busy(const struct tcp_seg *seg) +{ + 801e560: b510 push {r4, lr} + LWIP_ASSERT("tcp_output_segment_busy: invalid seg", seg != NULL); + 801e562: 4604 mov r4, r0 + 801e564: b930 cbnz r0, 801e574 + 801e566: 4b06 ldr r3, [pc, #24] ; (801e580 ) + 801e568: f240 529a movw r2, #1434 ; 0x59a + 801e56c: 4905 ldr r1, [pc, #20] ; (801e584 ) + 801e56e: 4806 ldr r0, [pc, #24] ; (801e588 ) + 801e570: f016 f8f0 bl 8034754 + + /* We only need to check the first pbuf here: + If a pbuf is queued for transmission, a driver calls pbuf_ref(), + which only changes the ref count of the first pbuf */ + if (seg->p->ref != 1) { + 801e574: 6863 ldr r3, [r4, #4] + 801e576: 7b98 ldrb r0, [r3, #14] + /* other reference found */ + return 1; + } + /* no other references found */ + return 0; +} + 801e578: 3801 subs r0, #1 + 801e57a: bf18 it ne + 801e57c: 2001 movne r0, #1 + 801e57e: bd10 pop {r4, pc} + 801e580: 0803b95b .word 0x0803b95b + 801e584: 0803b9df .word 0x0803b9df + 801e588: 08035999 .word 0x08035999 + +0801e58c : +{ + 801e58c: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} + 801e590: 460e mov r6, r1 + 801e592: 4690 mov r8, r2 + 801e594: 4699 mov r9, r3 + 801e596: f89d a020 ldrb.w sl, [sp, #32] + LWIP_ASSERT("tcp_create_segment: invalid pcb", pcb != NULL); + 801e59a: 4607 mov r7, r0 + 801e59c: b928 cbnz r0, 801e5aa + 801e59e: 4b2f ldr r3, [pc, #188] ; (801e65c ) + 801e5a0: 22a3 movs r2, #163 ; 0xa3 + 801e5a2: 492f ldr r1, [pc, #188] ; (801e660 ) + 801e5a4: 482f ldr r0, [pc, #188] ; (801e664 ) + 801e5a6: f016 f8d5 bl 8034754 + LWIP_ASSERT("tcp_create_segment: invalid pbuf", p != NULL); + 801e5aa: b92e cbnz r6, 801e5b8 + 801e5ac: 4b2b ldr r3, [pc, #172] ; (801e65c ) + 801e5ae: 22a4 movs r2, #164 ; 0xa4 + 801e5b0: 492d ldr r1, [pc, #180] ; (801e668 ) + 801e5b2: 482c ldr r0, [pc, #176] ; (801e664 ) + 801e5b4: f016 f8ce bl 8034754 + optlen = LWIP_TCP_OPT_LENGTH_SEGMENT(optflags, pcb); + 801e5b8: ea4f 058a mov.w r5, sl, lsl #2 + if ((seg = (struct tcp_seg *)memp_malloc(MEMP_TCP_SEG)) == NULL) { + 801e5bc: 2003 movs r0, #3 + 801e5be: f7fd f80f bl 801b5e0 + 801e5c2: 4604 mov r4, r0 + optlen = LWIP_TCP_OPT_LENGTH_SEGMENT(optflags, pcb); + 801e5c4: f005 0504 and.w r5, r5, #4 + if ((seg = (struct tcp_seg *)memp_malloc(MEMP_TCP_SEG)) == NULL) { + 801e5c8: b928 cbnz r0, 801e5d6 + pbuf_free(p); + 801e5ca: 4630 mov r0, r6 + 801e5cc: f7fd fab4 bl 801bb38 +} + 801e5d0: 4620 mov r0, r4 + 801e5d2: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + seg->next = NULL; + 801e5d6: 2300 movs r3, #0 + seg->flags = optflags; + 801e5d8: f880 a00a strb.w sl, [r0, #10] + LWIP_ASSERT("p->tot_len >= optlen", p->tot_len >= optlen); + 801e5dc: fa1f fa85 uxth.w sl, r5 + seg->p = p; + 801e5e0: e9c0 3600 strd r3, r6, [r0] + LWIP_ASSERT("p->tot_len >= optlen", p->tot_len >= optlen); + 801e5e4: 8933 ldrh r3, [r6, #8] + 801e5e6: 42ab cmp r3, r5 + 801e5e8: d205 bcs.n 801e5f6 + 801e5ea: 4b1c ldr r3, [pc, #112] ; (801e65c ) + 801e5ec: 22b0 movs r2, #176 ; 0xb0 + 801e5ee: 491f ldr r1, [pc, #124] ; (801e66c ) + 801e5f0: 481c ldr r0, [pc, #112] ; (801e664 ) + 801e5f2: f016 f8af bl 8034754 + seg->len = p->tot_len - optlen; + 801e5f6: 8933 ldrh r3, [r6, #8] + if (pbuf_add_header(p, TCP_HLEN)) { + 801e5f8: 4630 mov r0, r6 + 801e5fa: 2114 movs r1, #20 + seg->len = p->tot_len - optlen; + 801e5fc: eba3 030a sub.w r3, r3, sl + 801e600: 8123 strh r3, [r4, #8] + if (pbuf_add_header(p, TCP_HLEN)) { + 801e602: f7fd fa61 bl 801bac8 + 801e606: 4606 mov r6, r0 + 801e608: b120 cbz r0, 801e614 + tcp_seg_free(seg); + 801e60a: 4620 mov r0, r4 + return NULL; + 801e60c: 2400 movs r4, #0 + tcp_seg_free(seg); + 801e60e: f7fd fe7f bl 801c310 + return NULL; + 801e612: e7dd b.n 801e5d0 + seg->tcphdr = (struct tcp_hdr *)seg->p->payload; + 801e614: 6863 ldr r3, [r4, #4] + TCPH_HDRLEN_FLAGS_SET(seg->tcphdr, (5 + optlen / 4), hdrflags); + 801e616: 02ad lsls r5, r5, #10 + seg->tcphdr->src = lwip_htons(pcb->local_port); + 801e618: 8af8 ldrh r0, [r7, #22] + seg->tcphdr = (struct tcp_hdr *)seg->p->payload; + 801e61a: f8d3 a004 ldr.w sl, [r3, #4] + TCPH_HDRLEN_FLAGS_SET(seg->tcphdr, (5 + optlen / 4), hdrflags); + 801e61e: f505 45a0 add.w r5, r5, #20480 ; 0x5000 + seg->tcphdr = (struct tcp_hdr *)seg->p->payload; + 801e622: f8c4 a00c str.w sl, [r4, #12] + seg->tcphdr->src = lwip_htons(pcb->local_port); + 801e626: f7fa f95a bl 80188de + 801e62a: f8aa 0000 strh.w r0, [sl] + seg->tcphdr->dest = lwip_htons(pcb->remote_port); + 801e62e: f8d4 a00c ldr.w sl, [r4, #12] + 801e632: 8b38 ldrh r0, [r7, #24] + 801e634: f7fa f953 bl 80188de + seg->tcphdr->seqno = lwip_htonl(seqno); + 801e638: 68e7 ldr r7, [r4, #12] + seg->tcphdr->dest = lwip_htons(pcb->remote_port); + 801e63a: f8aa 0002 strh.w r0, [sl, #2] + seg->tcphdr->seqno = lwip_htonl(seqno); + 801e63e: 4648 mov r0, r9 + 801e640: f7fa f950 bl 80188e4 + 801e644: 6078 str r0, [r7, #4] + TCPH_HDRLEN_FLAGS_SET(seg->tcphdr, (5 + optlen / 4), hdrflags); + 801e646: ea45 0008 orr.w r0, r5, r8 + 801e64a: 68e7 ldr r7, [r4, #12] + 801e64c: f7fa f947 bl 80188de + seg->tcphdr->urgp = 0; + 801e650: 68e3 ldr r3, [r4, #12] + TCPH_HDRLEN_FLAGS_SET(seg->tcphdr, (5 + optlen / 4), hdrflags); + 801e652: 81b8 strh r0, [r7, #12] + seg->tcphdr->urgp = 0; + 801e654: 749e strb r6, [r3, #18] + 801e656: 74de strb r6, [r3, #19] + return seg; + 801e658: e7ba b.n 801e5d0 + 801e65a: bf00 nop + 801e65c: 0803b95b .word 0x0803b95b + 801e660: 0803ba04 .word 0x0803ba04 + 801e664: 08035999 .word 0x08035999 + 801e668: 0803ba24 .word 0x0803ba24 + 801e66c: 0803ba45 .word 0x0803ba45 + +0801e670 : + u16_t src_port, u16_t dst_port, u8_t flags, u16_t wnd) +{ + struct tcp_hdr *tcphdr; + struct pbuf *p; + + p = pbuf_alloc(PBUF_IP, TCP_HLEN + optlen + datalen, PBUF_RAM); + 801e670: 3114 adds r1, #20 +tcp_output_alloc_header_common(u32_t ackno, u16_t optlen, u16_t datalen, + 801e672: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} + p = pbuf_alloc(PBUF_IP, TCP_HLEN + optlen + datalen, PBUF_RAM); + 801e676: b289 uxth r1, r1 +tcp_output_alloc_header_common(u32_t ackno, u16_t optlen, u16_t datalen, + 801e678: 4606 mov r6, r0 + 801e67a: 4617 mov r7, r2 + p = pbuf_alloc(PBUF_IP, TCP_HLEN + optlen + datalen, PBUF_RAM); + 801e67c: 2022 movs r0, #34 ; 0x22 + 801e67e: f44f 7220 mov.w r2, #640 ; 0x280 +tcp_output_alloc_header_common(u32_t ackno, u16_t optlen, u16_t datalen, + 801e682: 4698 mov r8, r3 + p = pbuf_alloc(PBUF_IP, TCP_HLEN + optlen + datalen, PBUF_RAM); + 801e684: f7fd fac0 bl 801bc08 + if (p != NULL) { + 801e688: 4605 mov r5, r0 + 801e68a: b348 cbz r0, 801e6e0 + LWIP_ASSERT("check that first pbuf can hold struct tcp_hdr", + 801e68c: 8943 ldrh r3, [r0, #10] + 801e68e: 2b13 cmp r3, #19 + 801e690: d806 bhi.n 801e6a0 + 801e692: 4b15 ldr r3, [pc, #84] ; (801e6e8 ) + 801e694: f240 7223 movw r2, #1827 ; 0x723 + 801e698: 4914 ldr r1, [pc, #80] ; (801e6ec ) + 801e69a: 4815 ldr r0, [pc, #84] ; (801e6f0 ) + 801e69c: f016 f85a bl 8034754 + (p->len >= TCP_HLEN + optlen)); + tcphdr = (struct tcp_hdr *)p->payload; + 801e6a0: 686c ldr r4, [r5, #4] + tcphdr->src = lwip_htons(src_port); + 801e6a2: 4640 mov r0, r8 + 801e6a4: f7fa f91b bl 80188de + 801e6a8: 8020 strh r0, [r4, #0] + tcphdr->dest = lwip_htons(dst_port); + 801e6aa: f8bd 0018 ldrh.w r0, [sp, #24] + 801e6ae: f7fa f916 bl 80188de + tcphdr->seqno = seqno_be; + 801e6b2: 6067 str r7, [r4, #4] + tcphdr->dest = lwip_htons(dst_port); + 801e6b4: 8060 strh r0, [r4, #2] + tcphdr->ackno = lwip_htonl(ackno); + 801e6b6: 4630 mov r0, r6 + 801e6b8: f7fa f914 bl 80188e4 + 801e6bc: 60a0 str r0, [r4, #8] + TCPH_HDRLEN_FLAGS_SET(tcphdr, (5 + optlen / 4), flags); + 801e6be: f89d 001c ldrb.w r0, [sp, #28] + 801e6c2: f440 40a0 orr.w r0, r0, #20480 ; 0x5000 + 801e6c6: f7fa f90a bl 80188de + 801e6ca: 81a0 strh r0, [r4, #12] + tcphdr->wnd = lwip_htons(wnd); + 801e6cc: f8bd 0020 ldrh.w r0, [sp, #32] + 801e6d0: f7fa f905 bl 80188de + tcphdr->chksum = 0; + 801e6d4: 2300 movs r3, #0 + tcphdr->wnd = lwip_htons(wnd); + 801e6d6: 81e0 strh r0, [r4, #14] + tcphdr->chksum = 0; + 801e6d8: 7423 strb r3, [r4, #16] + 801e6da: 7463 strb r3, [r4, #17] + tcphdr->urgp = 0; + 801e6dc: 74a3 strb r3, [r4, #18] + 801e6de: 74e3 strb r3, [r4, #19] + } + return p; +} + 801e6e0: 4628 mov r0, r5 + 801e6e2: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + 801e6e6: bf00 nop + 801e6e8: 0803b95b .word 0x0803b95b + 801e6ec: 0803ba5a .word 0x0803ba5a + 801e6f0: 08035999 .word 0x08035999 + +0801e6f4 : + * @param datalen length of tcp data to reserve in pbuf + * @param seqno_be seqno in network byte order (big-endian) + * @return pbuf with p->payload being the tcp_hdr + */ +static struct pbuf * +tcp_output_alloc_header(struct tcp_pcb *pcb, u16_t optlen, u16_t datalen, + 801e6f4: b57f push {r0, r1, r2, r3, r4, r5, r6, lr} + 801e6f6: 460d mov r5, r1 + 801e6f8: 4616 mov r6, r2 + u32_t seqno_be /* already in network byte order */) +{ + struct pbuf *p; + + LWIP_ASSERT("tcp_output_alloc_header: invalid pcb", pcb != NULL); + 801e6fa: 4604 mov r4, r0 + 801e6fc: b930 cbnz r0, 801e70c + 801e6fe: 4b0d ldr r3, [pc, #52] ; (801e734 ) + 801e700: f240 7242 movw r2, #1858 ; 0x742 + 801e704: 490c ldr r1, [pc, #48] ; (801e738 ) + 801e706: 480d ldr r0, [pc, #52] ; (801e73c ) + 801e708: f016 f824 bl 8034754 + + p = tcp_output_alloc_header_common(pcb->rcv_nxt, optlen, datalen, + 801e70c: 8d63 ldrh r3, [r4, #42] ; 0x2a + 801e70e: 4632 mov r2, r6 + 801e710: 4629 mov r1, r5 + 801e712: 9302 str r3, [sp, #8] + 801e714: 2310 movs r3, #16 + 801e716: 9301 str r3, [sp, #4] + 801e718: 8b23 ldrh r3, [r4, #24] + 801e71a: 9300 str r3, [sp, #0] + 801e71c: 8ae3 ldrh r3, [r4, #22] + 801e71e: 6a60 ldr r0, [r4, #36] ; 0x24 + 801e720: f7ff ffa6 bl 801e670 + seqno_be, pcb->local_port, pcb->remote_port, TCP_ACK, + TCPWND_MIN16(RCV_WND_SCALE(pcb, pcb->rcv_ann_wnd))); + if (p != NULL) { + 801e724: b118 cbz r0, 801e72e + /* If we're sending a packet, update the announced right window edge */ + pcb->rcv_ann_right_edge = pcb->rcv_nxt + pcb->rcv_ann_wnd; + 801e726: 8d62 ldrh r2, [r4, #42] ; 0x2a + 801e728: 6a63 ldr r3, [r4, #36] ; 0x24 + 801e72a: 4413 add r3, r2 + 801e72c: 62e3 str r3, [r4, #44] ; 0x2c + } + return p; +} + 801e72e: b004 add sp, #16 + 801e730: bd70 pop {r4, r5, r6, pc} + 801e732: bf00 nop + 801e734: 0803b95b .word 0x0803b95b + 801e738: 0803ba88 .word 0x0803ba88 + 801e73c: 08035999 .word 0x08035999 + +0801e740 : +{ + struct tcp_hdr *tcphdr; + u32_t *opts; + u16_t sacks_len = 0; + + LWIP_ASSERT("tcp_output_fill_options: invalid pbuf", p != NULL); + 801e740: b930 cbnz r0, 801e750 + 801e742: 4b04 ldr r3, [pc, #16] ; (801e754 ) + 801e744: f240 7256 movw r2, #1878 ; 0x756 + 801e748: 4903 ldr r1, [pc, #12] ; (801e758 ) + 801e74a: 4804 ldr r0, [pc, #16] ; (801e75c ) + 801e74c: f016 b802 b.w 8034754 + LWIP_UNUSED_ARG(pcb); + LWIP_UNUSED_ARG(sacks_len); + LWIP_ASSERT("options not filled", (u8_t *)opts == ((u8_t *)(tcphdr + 1)) + sacks_len * 4 + LWIP_TCP_OPT_LENGTH_SEGMENT(optflags, pcb)); + LWIP_UNUSED_ARG(optflags); /* for LWIP_NOASSERT */ + LWIP_UNUSED_ARG(opts); /* for LWIP_NOASSERT */ +} + 801e750: 4770 bx lr + 801e752: bf00 nop + 801e754: 0803b95b .word 0x0803b95b + 801e758: 0803baad .word 0x0803baad + 801e75c: 08035999 .word 0x08035999 + +0801e760 : + * header checksum and calling ip_output_if while handling netif hints and stats. + */ +static err_t +tcp_output_control_segment(const struct tcp_pcb *pcb, struct pbuf *p, + const ip_addr_t *src, const ip_addr_t *dst) +{ + 801e760: b5f0 push {r4, r5, r6, r7, lr} + 801e762: 4604 mov r4, r0 + 801e764: b085 sub sp, #20 + 801e766: 4617 mov r7, r2 + 801e768: 461e mov r6, r3 + err_t err; + struct netif *netif; + + LWIP_ASSERT("tcp_output_control_segment: invalid pbuf", p != NULL); + 801e76a: 460d mov r5, r1 + 801e76c: b931 cbnz r1, 801e77c + 801e76e: 4b15 ldr r3, [pc, #84] ; (801e7c4 ) + 801e770: f240 7287 movw r2, #1927 ; 0x787 + 801e774: 4914 ldr r1, [pc, #80] ; (801e7c8 ) + 801e776: 4815 ldr r0, [pc, #84] ; (801e7cc ) + 801e778: f015 ffec bl 8034754 + if ((pcb != NULL) && (pcb->netif_idx != NETIF_NO_INDEX)) { + 801e77c: b164 cbz r4, 801e798 + 801e77e: 7a20 ldrb r0, [r4, #8] + 801e780: b150 cbz r0, 801e798 + return netif_get_by_index(pcb->netif_idx); + 801e782: f7fd f909 bl 801b998 + + netif = tcp_route(pcb, src, dst); + if (netif == NULL) { + 801e786: b968 cbnz r0, 801e7a4 + err = ERR_RTE; + 801e788: f06f 0403 mvn.w r4, #3 + } + TCP_STATS_INC(tcp.xmit); + err = ip_output_if(p, src, dst, ttl, tos, IP_PROTO_TCP, netif); + NETIF_RESET_HINTS(netif); + } + pbuf_free(p); + 801e78c: 4628 mov r0, r5 + 801e78e: f7fd f9d3 bl 801bb38 + return err; +} + 801e792: 4620 mov r0, r4 + 801e794: b005 add sp, #20 + 801e796: bdf0 pop {r4, r5, r6, r7, pc} + return ip_route(src, dst); + 801e798: 4630 mov r0, r6 + 801e79a: f7fb febf bl 801a51c + if (netif == NULL) { + 801e79e: 2800 cmp r0, #0 + 801e7a0: d0f2 beq.n 801e788 + if (pcb != NULL) { + 801e7a2: b164 cbz r4, 801e7be + ttl = pcb->ttl; + 801e7a4: 7ae3 ldrb r3, [r4, #11] + tos = pcb->tos; + 801e7a6: 7aa4 ldrb r4, [r4, #10] + err = ip_output_if(p, src, dst, ttl, tos, IP_PROTO_TCP, netif); + 801e7a8: 2206 movs r2, #6 + 801e7aa: 9002 str r0, [sp, #8] + 801e7ac: 4639 mov r1, r7 + 801e7ae: 4628 mov r0, r5 + 801e7b0: e9cd 4200 strd r4, r2, [sp] + 801e7b4: 4632 mov r2, r6 + 801e7b6: f7fc f81f bl 801a7f8 + 801e7ba: 4604 mov r4, r0 + 801e7bc: e7e6 b.n 801e78c + ttl = TCP_TTL; + 801e7be: 23ff movs r3, #255 ; 0xff + 801e7c0: e7f2 b.n 801e7a8 + 801e7c2: bf00 nop + 801e7c4: 0803b95b .word 0x0803b95b + 801e7c8: 0803bad3 .word 0x0803bad3 + 801e7cc: 08035999 .word 0x08035999 + +0801e7d0 : +{ + 801e7d0: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} + 801e7d4: 460d mov r5, r1 + LWIP_ASSERT("tcp_split_unsent_seg: invalid pcb", pcb != NULL); + 801e7d6: 4606 mov r6, r0 + 801e7d8: b930 cbnz r0, 801e7e8 + 801e7da: 4b5d ldr r3, [pc, #372] ; (801e950 ) + 801e7dc: f240 324b movw r2, #843 ; 0x34b + 801e7e0: 495c ldr r1, [pc, #368] ; (801e954 ) + 801e7e2: 485d ldr r0, [pc, #372] ; (801e958 ) + 801e7e4: f015 ffb6 bl 8034754 + useg = pcb->unsent; + 801e7e8: 6ef4 ldr r4, [r6, #108] ; 0x6c + if (useg == NULL) { + 801e7ea: b914 cbnz r4, 801e7f2 + return ERR_MEM; + 801e7ec: f04f 30ff mov.w r0, #4294967295 + 801e7f0: e009 b.n 801e806 + if (split == 0) { + 801e7f2: b95d cbnz r5, 801e80c + LWIP_ASSERT("Can't split segment into length 0", 0); + 801e7f4: 4b56 ldr r3, [pc, #344] ; (801e950 ) + 801e7f6: f240 3253 movw r2, #851 ; 0x353 + 801e7fa: 4958 ldr r1, [pc, #352] ; (801e95c ) + 801e7fc: 4856 ldr r0, [pc, #344] ; (801e958 ) + 801e7fe: f015 ffa9 bl 8034754 + return ERR_VAL; + 801e802: f06f 0005 mvn.w r0, #5 +} + 801e806: b003 add sp, #12 + 801e808: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + if (useg->len <= split) { + 801e80c: 8923 ldrh r3, [r4, #8] + 801e80e: 42ab cmp r3, r5 + 801e810: d801 bhi.n 801e816 + return ERR_OK; + 801e812: 2000 movs r0, #0 + 801e814: e7f7 b.n 801e806 + LWIP_ASSERT("split <= mss", split <= pcb->mss); + 801e816: 8e73 ldrh r3, [r6, #50] ; 0x32 + 801e818: 42ab cmp r3, r5 + 801e81a: d20f bcs.n 801e83c + 801e81c: 4b4c ldr r3, [pc, #304] ; (801e950 ) + 801e81e: f240 325b movw r2, #859 ; 0x35b + 801e822: 494f ldr r1, [pc, #316] ; (801e960 ) + 801e824: 484c ldr r0, [pc, #304] ; (801e958 ) + 801e826: f015 ff95 bl 8034754 + LWIP_ASSERT("useg->len > 0", useg->len > 0); + 801e82a: 8923 ldrh r3, [r4, #8] + 801e82c: b933 cbnz r3, 801e83c + 801e82e: 4b48 ldr r3, [pc, #288] ; (801e950 ) + 801e830: f44f 7257 mov.w r2, #860 ; 0x35c + 801e834: 494b ldr r1, [pc, #300] ; (801e964 ) + 801e836: 4848 ldr r0, [pc, #288] ; (801e958 ) + 801e838: f015 ff8c bl 8034754 + optflags = useg->flags; + 801e83c: f894 b00a ldrb.w fp, [r4, #10] + p = pbuf_alloc(PBUF_TRANSPORT, remainder + optlen, PBUF_RAM); + 801e840: f44f 7220 mov.w r2, #640 ; 0x280 + remainder = useg->len - split; + 801e844: f8b4 a008 ldrh.w sl, [r4, #8] + p = pbuf_alloc(PBUF_TRANSPORT, remainder + optlen, PBUF_RAM); + 801e848: 2036 movs r0, #54 ; 0x36 + optlen = LWIP_TCP_OPT_LENGTH(optflags); + 801e84a: ea4f 078b mov.w r7, fp, lsl #2 + remainder = useg->len - split; + 801e84e: ebaa 0105 sub.w r1, sl, r5 + optlen = LWIP_TCP_OPT_LENGTH(optflags); + 801e852: f007 0704 and.w r7, r7, #4 + remainder = useg->len - split; + 801e856: fa1f f881 uxth.w r8, r1 + p = pbuf_alloc(PBUF_TRANSPORT, remainder + optlen, PBUF_RAM); + 801e85a: fa17 f181 uxtah r1, r7, r1 + 801e85e: b289 uxth r1, r1 + 801e860: f7fd f9d2 bl 801bc08 + if (p == NULL) { + 801e864: 4681 mov r9, r0 + 801e866: 2800 cmp r0, #0 + 801e868: d0c0 beq.n 801e7ec + offset = useg->p->tot_len - useg->len + split; + 801e86a: 6860 ldr r0, [r4, #4] + 801e86c: 8922 ldrh r2, [r4, #8] + 801e86e: 8903 ldrh r3, [r0, #8] + if (pbuf_copy_partial(useg->p, (u8_t *)p->payload + optlen, remainder, offset ) != remainder) { + 801e870: f8d9 1004 ldr.w r1, [r9, #4] + offset = useg->p->tot_len - useg->len + split; + 801e874: 1a9b subs r3, r3, r2 + if (pbuf_copy_partial(useg->p, (u8_t *)p->payload + optlen, remainder, offset ) != remainder) { + 801e876: 4642 mov r2, r8 + 801e878: 4439 add r1, r7 + offset = useg->p->tot_len - useg->len + split; + 801e87a: 442b add r3, r5 + if (pbuf_copy_partial(useg->p, (u8_t *)p->payload + optlen, remainder, offset ) != remainder) { + 801e87c: b29b uxth r3, r3 + 801e87e: f7fd fb97 bl 801bfb0 + 801e882: 4540 cmp r0, r8 + 801e884: d160 bne.n 801e948 + split_flags = TCPH_FLAGS(useg->tcphdr); + 801e886: 68e3 ldr r3, [r4, #12] + 801e888: 8998 ldrh r0, [r3, #12] + 801e88a: f7fa f828 bl 80188de + if (split_flags & TCP_PSH) { + 801e88e: f010 0808 ands.w r8, r0, #8 + split_flags = TCPH_FLAGS(useg->tcphdr); + 801e892: b2c7 uxtb r7, r0 + remainder_flags |= TCP_PSH; + 801e894: bf16 itet ne + 801e896: f04f 0808 movne.w r8, #8 + split_flags = TCPH_FLAGS(useg->tcphdr); + 801e89a: f007 073f andeq.w r7, r7, #63 ; 0x3f + split_flags &= ~TCP_PSH; + 801e89e: f007 0737 andne.w r7, r7, #55 ; 0x37 + if (split_flags & TCP_FIN) { + 801e8a2: 07fb lsls r3, r7, #31 + seg = tcp_create_segment(pcb, p, remainder_flags, lwip_ntohl(useg->tcphdr->seqno) + split, optflags); + 801e8a4: 68e3 ldr r3, [r4, #12] + remainder_flags |= TCP_FIN; + 801e8a6: bf48 it mi + 801e8a8: f048 0801 orrmi.w r8, r8, #1 + seg = tcp_create_segment(pcb, p, remainder_flags, lwip_ntohl(useg->tcphdr->seqno) + split, optflags); + 801e8ac: 6858 ldr r0, [r3, #4] + split_flags &= ~TCP_FIN; + 801e8ae: bf48 it mi + 801e8b0: f007 07fe andmi.w r7, r7, #254 ; 0xfe + seg = tcp_create_segment(pcb, p, remainder_flags, lwip_ntohl(useg->tcphdr->seqno) + split, optflags); + 801e8b4: f7fa f816 bl 80188e4 + 801e8b8: 4642 mov r2, r8 + 801e8ba: 182b adds r3, r5, r0 + 801e8bc: 4649 mov r1, r9 + 801e8be: 4630 mov r0, r6 + 801e8c0: f8cd b000 str.w fp, [sp] + 801e8c4: f7ff fe62 bl 801e58c + if (seg == NULL) { + 801e8c8: 4680 mov r8, r0 + 801e8ca: 2800 cmp r0, #0 + 801e8cc: d03c beq.n 801e948 + pcb->snd_queuelen -= pbuf_clen(useg->p); + 801e8ce: 6860 ldr r0, [r4, #4] + 801e8d0: eba5 050a sub.w r5, r5, sl + 801e8d4: f7fd fa82 bl 801bddc + 801e8d8: f8b6 3066 ldrh.w r3, [r6, #102] ; 0x66 + 801e8dc: fa1f f985 uxth.w r9, r5 + 801e8e0: 1a18 subs r0, r3, r0 + 801e8e2: f8a6 0066 strh.w r0, [r6, #102] ; 0x66 + pbuf_realloc(useg->p, useg->p->tot_len - remainder); + 801e8e6: 6860 ldr r0, [r4, #4] + 801e8e8: 8903 ldrh r3, [r0, #8] + 801e8ea: fa13 f585 uxtah r5, r3, r5 + 801e8ee: b2a9 uxth r1, r5 + 801e8f0: f7fd fa1c bl 801bd2c + useg->len -= remainder; + 801e8f4: 8923 ldrh r3, [r4, #8] + TCPH_SET_FLAG(useg->tcphdr, split_flags); + 801e8f6: 4638 mov r0, r7 + useg->len -= remainder; + 801e8f8: 4499 add r9, r3 + TCPH_SET_FLAG(useg->tcphdr, split_flags); + 801e8fa: 68e3 ldr r3, [r4, #12] + useg->len -= remainder; + 801e8fc: f8a4 9008 strh.w r9, [r4, #8] + TCPH_SET_FLAG(useg->tcphdr, split_flags); + 801e900: 899d ldrh r5, [r3, #12] + 801e902: f7f9 ffec bl 80188de + 801e906: 68e3 ldr r3, [r4, #12] + 801e908: 4328 orrs r0, r5 + 801e90a: 8198 strh r0, [r3, #12] + pcb->snd_queuelen += pbuf_clen(useg->p); + 801e90c: 6860 ldr r0, [r4, #4] + 801e90e: f7fd fa65 bl 801bddc + 801e912: f8b6 3066 ldrh.w r3, [r6, #102] ; 0x66 + 801e916: 4418 add r0, r3 + 801e918: f8a6 0066 strh.w r0, [r6, #102] ; 0x66 + pcb->snd_queuelen += pbuf_clen(seg->p); + 801e91c: f8d8 0004 ldr.w r0, [r8, #4] + 801e920: f7fd fa5c bl 801bddc + 801e924: f8b6 3066 ldrh.w r3, [r6, #102] ; 0x66 + 801e928: 4418 add r0, r3 + seg->next = useg->next; + 801e92a: 6823 ldr r3, [r4, #0] + pcb->snd_queuelen += pbuf_clen(seg->p); + 801e92c: f8a6 0066 strh.w r0, [r6, #102] ; 0x66 + seg->next = useg->next; + 801e930: f8c8 3000 str.w r3, [r8] + useg->next = seg; + 801e934: f8c4 8000 str.w r8, [r4] + if (seg->next == NULL) { + 801e938: f8d8 0000 ldr.w r0, [r8] + 801e93c: 2800 cmp r0, #0 + 801e93e: f47f af68 bne.w 801e812 + pcb->unsent_oversize = 0; + 801e942: f8a6 0068 strh.w r0, [r6, #104] ; 0x68 + 801e946: e75e b.n 801e806 + pbuf_free(p); + 801e948: 4648 mov r0, r9 + 801e94a: f7fd f8f5 bl 801bb38 + 801e94e: e74d b.n 801e7ec + 801e950: 0803b95b .word 0x0803b95b + 801e954: 0803bafc .word 0x0803bafc + 801e958: 08035999 .word 0x08035999 + 801e95c: 0803bb1e .word 0x0803bb1e + 801e960: 0803bb40 .word 0x0803bb40 + 801e964: 0803bb4d .word 0x0803bb4d + +0801e968 : +{ + 801e968: e92d 43f7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, lr} + LWIP_ASSERT("tcp_enqueue_flags: need either TCP_SYN or TCP_FIN in flags (programmer violates API)", + 801e96c: f011 0803 ands.w r8, r1, #3 +{ + 801e970: 4604 mov r4, r0 + 801e972: 460e mov r6, r1 + LWIP_ASSERT("tcp_enqueue_flags: need either TCP_SYN or TCP_FIN in flags (programmer violates API)", + 801e974: d106 bne.n 801e984 + 801e976: 4b3e ldr r3, [pc, #248] ; (801ea70 ) + 801e978: f240 4211 movw r2, #1041 ; 0x411 + 801e97c: 493d ldr r1, [pc, #244] ; (801ea74 ) + 801e97e: 483e ldr r0, [pc, #248] ; (801ea78 ) + 801e980: f015 fee8 bl 8034754 + LWIP_ASSERT("tcp_enqueue_flags: invalid pcb", pcb != NULL); + 801e984: b934 cbnz r4, 801e994 + 801e986: 4b3a ldr r3, [pc, #232] ; (801ea70 ) + 801e988: f240 4213 movw r2, #1043 ; 0x413 + 801e98c: 493b ldr r1, [pc, #236] ; (801ea7c ) + 801e98e: 483a ldr r0, [pc, #232] ; (801ea78 ) + 801e990: f015 fee0 bl 8034754 + if (flags & TCP_SYN) { + 801e994: f3c6 0740 ubfx r7, r6, #1, #1 + if ((p = pbuf_alloc(PBUF_TRANSPORT, optlen, PBUF_RAM)) == NULL) { + 801e998: f44f 7220 mov.w r2, #640 ; 0x280 + 801e99c: 2036 movs r0, #54 ; 0x36 + 801e99e: ea4f 0987 mov.w r9, r7, lsl #2 + 801e9a2: 4649 mov r1, r9 + 801e9a4: f7fd f930 bl 801bc08 + 801e9a8: 4605 mov r5, r0 + 801e9aa: b940 cbnz r0, 801e9be + tcp_set_flags(pcb, TF_NAGLEMEMERR); + 801e9ac: 8b63 ldrh r3, [r4, #26] + return ERR_MEM; + 801e9ae: f04f 30ff mov.w r0, #4294967295 + tcp_set_flags(pcb, TF_NAGLEMEMERR); + 801e9b2: f043 0380 orr.w r3, r3, #128 ; 0x80 + 801e9b6: 8363 strh r3, [r4, #26] +} + 801e9b8: b003 add sp, #12 + 801e9ba: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} + LWIP_ASSERT("tcp_enqueue_flags: check that first pbuf can hold optlen", + 801e9be: 8943 ldrh r3, [r0, #10] + 801e9c0: 454b cmp r3, r9 + 801e9c2: d206 bcs.n 801e9d2 + 801e9c4: 4b2a ldr r3, [pc, #168] ; (801ea70 ) + 801e9c6: f240 4239 movw r2, #1081 ; 0x439 + 801e9ca: 492d ldr r1, [pc, #180] ; (801ea80 ) + 801e9cc: 482a ldr r0, [pc, #168] ; (801ea78 ) + 801e9ce: f015 fec1 bl 8034754 + if ((seg = tcp_create_segment(pcb, p, flags, pcb->snd_lbb, optflags)) == NULL) { + 801e9d2: 4629 mov r1, r5 + 801e9d4: 9700 str r7, [sp, #0] + 801e9d6: 4632 mov r2, r6 + 801e9d8: 6de3 ldr r3, [r4, #92] ; 0x5c + 801e9da: 4620 mov r0, r4 + 801e9dc: f7ff fdd6 bl 801e58c + 801e9e0: 4605 mov r5, r0 + 801e9e2: 2800 cmp r0, #0 + 801e9e4: d0e2 beq.n 801e9ac + LWIP_ASSERT("seg->tcphdr not aligned", ((mem_ptr_t)seg->tcphdr % LWIP_MIN(MEM_ALIGNMENT, 4)) == 0); + 801e9e6: 68c3 ldr r3, [r0, #12] + 801e9e8: 079a lsls r2, r3, #30 + 801e9ea: d006 beq.n 801e9fa + 801e9ec: 4b20 ldr r3, [pc, #128] ; (801ea70 ) + 801e9ee: f240 4242 movw r2, #1090 ; 0x442 + 801e9f2: 4924 ldr r1, [pc, #144] ; (801ea84 ) + 801e9f4: 4820 ldr r0, [pc, #128] ; (801ea78 ) + 801e9f6: f015 fead bl 8034754 + LWIP_ASSERT("tcp_enqueue_flags: invalid segment length", seg->len == 0); + 801e9fa: 892b ldrh r3, [r5, #8] + 801e9fc: b133 cbz r3, 801ea0c + 801e9fe: 4b1c ldr r3, [pc, #112] ; (801ea70 ) + 801ea00: f240 4243 movw r2, #1091 ; 0x443 + 801ea04: 4920 ldr r1, [pc, #128] ; (801ea88 ) + 801ea06: 481c ldr r0, [pc, #112] ; (801ea78 ) + 801ea08: f015 fea4 bl 8034754 + if (pcb->unsent == NULL) { + 801ea0c: 6ee3 ldr r3, [r4, #108] ; 0x6c + 801ea0e: bb43 cbnz r3, 801ea62 + pcb->unsent = seg; + 801ea10: 66e5 str r5, [r4, #108] ; 0x6c + pcb->unsent_oversize = 0; + 801ea12: 2300 movs r3, #0 + 801ea14: f8a4 3068 strh.w r3, [r4, #104] ; 0x68 + if ((flags & TCP_SYN) || (flags & TCP_FIN)) { + 801ea18: f1b8 0f00 cmp.w r8, #0 + 801ea1c: d002 beq.n 801ea24 + pcb->snd_lbb++; + 801ea1e: 6de3 ldr r3, [r4, #92] ; 0x5c + 801ea20: 3301 adds r3, #1 + 801ea22: 65e3 str r3, [r4, #92] ; 0x5c + if (flags & TCP_FIN) { + 801ea24: 07f3 lsls r3, r6, #31 + pcb->snd_queuelen += pbuf_clen(seg->p); + 801ea26: 6868 ldr r0, [r5, #4] + tcp_set_flags(pcb, TF_FIN); + 801ea28: bf42 ittt mi + 801ea2a: 8b63 ldrhmi r3, [r4, #26] + 801ea2c: f043 0320 orrmi.w r3, r3, #32 + 801ea30: 8363 strhmi r3, [r4, #26] + pcb->snd_queuelen += pbuf_clen(seg->p); + 801ea32: f7fd f9d3 bl 801bddc + 801ea36: f8b4 3066 ldrh.w r3, [r4, #102] ; 0x66 + 801ea3a: 4418 add r0, r3 + 801ea3c: b280 uxth r0, r0 + 801ea3e: f8a4 0066 strh.w r0, [r4, #102] ; 0x66 + if (pcb->snd_queuelen != 0) { + 801ea42: 2800 cmp r0, #0 + 801ea44: d0b8 beq.n 801e9b8 + LWIP_ASSERT("tcp_enqueue_flags: invalid queue length", + 801ea46: 6f20 ldr r0, [r4, #112] ; 0x70 + 801ea48: b948 cbnz r0, 801ea5e + 801ea4a: 6ee4 ldr r4, [r4, #108] ; 0x6c + 801ea4c: 2c00 cmp r4, #0 + 801ea4e: d1b3 bne.n 801e9b8 + 801ea50: 4b07 ldr r3, [pc, #28] ; (801ea70 ) + 801ea52: f240 4265 movw r2, #1125 ; 0x465 + 801ea56: 490d ldr r1, [pc, #52] ; (801ea8c ) + 801ea58: 4807 ldr r0, [pc, #28] ; (801ea78 ) + 801ea5a: f015 fe7b bl 8034754 + return ERR_OK; + 801ea5e: 2000 movs r0, #0 + 801ea60: e7aa b.n 801e9b8 + for (useg = pcb->unsent; useg->next != NULL; useg = useg->next); + 801ea62: 461a mov r2, r3 + 801ea64: 681b ldr r3, [r3, #0] + 801ea66: 2b00 cmp r3, #0 + 801ea68: d1fb bne.n 801ea62 + useg->next = seg; + 801ea6a: 6015 str r5, [r2, #0] + 801ea6c: e7d1 b.n 801ea12 + 801ea6e: bf00 nop + 801ea70: 0803b95b .word 0x0803b95b + 801ea74: 0803bb5b .word 0x0803bb5b + 801ea78: 08035999 .word 0x08035999 + 801ea7c: 0803bbb0 .word 0x0803bbb0 + 801ea80: 0803bbcf .word 0x0803bbcf + 801ea84: 0803bc08 .word 0x0803bc08 + 801ea88: 0803bc20 .word 0x0803bc20 + 801ea8c: 0803bc4a .word 0x0803bc4a + +0801ea90 : +{ + 801ea90: b5f8 push {r3, r4, r5, r6, r7, lr} + LWIP_ASSERT("tcp_send_fin: invalid pcb", pcb != NULL); + 801ea92: 4604 mov r4, r0 + 801ea94: b930 cbnz r0, 801eaa4 + 801ea96: 4b13 ldr r3, [pc, #76] ; (801eae4 ) + 801ea98: f240 32eb movw r2, #1003 ; 0x3eb + 801ea9c: 4912 ldr r1, [pc, #72] ; (801eae8 ) + 801ea9e: 4813 ldr r0, [pc, #76] ; (801eaec ) + 801eaa0: f015 fe58 bl 8034754 + if (pcb->unsent != NULL) { + 801eaa4: 6ee5 ldr r5, [r4, #108] ; 0x6c + 801eaa6: b14d cbz r5, 801eabc + for (last_unsent = pcb->unsent; last_unsent->next != NULL; + 801eaa8: 462f mov r7, r5 + 801eaaa: 682d ldr r5, [r5, #0] + 801eaac: 2d00 cmp r5, #0 + 801eaae: d1fb bne.n 801eaa8 + if ((TCPH_FLAGS(last_unsent->tcphdr) & (TCP_SYN | TCP_FIN | TCP_RST)) == 0) { + 801eab0: 68fb ldr r3, [r7, #12] + 801eab2: 8998 ldrh r0, [r3, #12] + 801eab4: f7f9 ff13 bl 80188de + 801eab8: 0743 lsls r3, r0, #29 + 801eaba: d005 beq.n 801eac8 + return tcp_enqueue_flags(pcb, TCP_FIN); + 801eabc: 4620 mov r0, r4 + 801eabe: 2101 movs r1, #1 +} + 801eac0: e8bd 40f8 ldmia.w sp!, {r3, r4, r5, r6, r7, lr} + return tcp_enqueue_flags(pcb, TCP_FIN); + 801eac4: f7ff bf50 b.w 801e968 + TCPH_SET_FLAG(last_unsent->tcphdr, TCP_FIN); + 801eac8: 68fb ldr r3, [r7, #12] + 801eaca: 2001 movs r0, #1 + 801eacc: 899e ldrh r6, [r3, #12] + 801eace: f7f9 ff06 bl 80188de + 801ead2: 68fb ldr r3, [r7, #12] + 801ead4: 4330 orrs r0, r6 + 801ead6: 8198 strh r0, [r3, #12] +} + 801ead8: 4628 mov r0, r5 + tcp_set_flags(pcb, TF_FIN); + 801eada: 8b63 ldrh r3, [r4, #26] + 801eadc: f043 0320 orr.w r3, r3, #32 + 801eae0: 8363 strh r3, [r4, #26] +} + 801eae2: bdf8 pop {r3, r4, r5, r6, r7, pc} + 801eae4: 0803b95b .word 0x0803b95b + 801eae8: 0803bc72 .word 0x0803bc72 + 801eaec: 08035999 .word 0x08035999 + +0801eaf0 : +{ + 801eaf0: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} + LWIP_ASSERT("tcp_rexmit_rto_prepare: invalid pcb", pcb != NULL); + 801eaf4: 4604 mov r4, r0 + 801eaf6: b930 cbnz r0, 801eb06 + 801eaf8: 4b1c ldr r3, [pc, #112] ; (801eb6c ) + 801eafa: f240 6263 movw r2, #1635 ; 0x663 + 801eafe: 491c ldr r1, [pc, #112] ; (801eb70 ) + 801eb00: 481c ldr r0, [pc, #112] ; (801eb74 ) + 801eb02: f015 fe27 bl 8034754 + if (pcb->unacked == NULL) { + 801eb06: 6f25 ldr r5, [r4, #112] ; 0x70 + 801eb08: b945 cbnz r5, 801eb1c + return ERR_VAL; + 801eb0a: f06f 0005 mvn.w r0, #5 +} + 801eb0e: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + if (tcp_output_segment_busy(seg)) { + 801eb12: f7ff fd25 bl 801e560 + 801eb16: 2800 cmp r0, #0 + 801eb18: d1f7 bne.n 801eb0a + for (seg = pcb->unacked; seg->next != NULL; seg = seg->next) { + 801eb1a: 682d ldr r5, [r5, #0] + 801eb1c: 682b ldr r3, [r5, #0] + if (tcp_output_segment_busy(seg)) { + 801eb1e: 4628 mov r0, r5 + for (seg = pcb->unacked; seg->next != NULL; seg = seg->next) { + 801eb20: 2b00 cmp r3, #0 + 801eb22: d1f6 bne.n 801eb12 + if (tcp_output_segment_busy(seg)) { + 801eb24: f7ff fd1c bl 801e560 + 801eb28: 4606 mov r6, r0 + 801eb2a: 2800 cmp r0, #0 + 801eb2c: d1ed bne.n 801eb0a + seg->next = pcb->unsent; + 801eb2e: 6ee3 ldr r3, [r4, #108] ; 0x6c + 801eb30: 602b str r3, [r5, #0] + pcb->unsent = pcb->unacked; + 801eb32: 6f23 ldr r3, [r4, #112] ; 0x70 + pcb->unacked = NULL; + 801eb34: e9c4 301b strd r3, r0, [r4, #108] ; 0x6c + tcp_set_flags(pcb, TF_RTO); + 801eb38: 8b63 ldrh r3, [r4, #26] + 801eb3a: f443 6300 orr.w r3, r3, #2048 ; 0x800 + 801eb3e: 8363 strh r3, [r4, #26] + pcb->rto_end = lwip_ntohl(seg->tcphdr->seqno) + TCP_TCPLEN(seg); + 801eb40: 68eb ldr r3, [r5, #12] + 801eb42: 6858 ldr r0, [r3, #4] + 801eb44: f7f9 fece bl 80188e4 + 801eb48: 68eb ldr r3, [r5, #12] + 801eb4a: 4607 mov r7, r0 + 801eb4c: f8b5 8008 ldrh.w r8, [r5, #8] + 801eb50: 8998 ldrh r0, [r3, #12] + 801eb52: f7f9 fec4 bl 80188de + 801eb56: f010 0303 ands.w r3, r0, #3 + 801eb5a: 4447 add r7, r8 + return ERR_OK; + 801eb5c: 4630 mov r0, r6 + pcb->rto_end = lwip_ntohl(seg->tcphdr->seqno) + TCP_TCPLEN(seg); + 801eb5e: bf18 it ne + 801eb60: 2301 movne r3, #1 + pcb->rttest = 0; + 801eb62: 6366 str r6, [r4, #52] ; 0x34 + pcb->rto_end = lwip_ntohl(seg->tcphdr->seqno) + TCP_TCPLEN(seg); + 801eb64: 443b add r3, r7 + 801eb66: 64e3 str r3, [r4, #76] ; 0x4c + return ERR_OK; + 801eb68: e7d1 b.n 801eb0e + 801eb6a: bf00 nop + 801eb6c: 0803b95b .word 0x0803b95b + 801eb70: 0803bc8c .word 0x0803bc8c + 801eb74: 08035999 .word 0x08035999 + +0801eb78 : +{ + 801eb78: b5f8 push {r3, r4, r5, r6, r7, lr} + LWIP_ASSERT("tcp_rexmit: invalid pcb", pcb != NULL); + 801eb7a: 4604 mov r4, r0 + 801eb7c: b930 cbnz r0, 801eb8c + 801eb7e: 4b1b ldr r3, [pc, #108] ; (801ebec ) + 801eb80: f240 62c1 movw r2, #1729 ; 0x6c1 + 801eb84: 491a ldr r1, [pc, #104] ; (801ebf0 ) + 801eb86: 481b ldr r0, [pc, #108] ; (801ebf4 ) + 801eb88: f015 fde4 bl 8034754 + if (pcb->unacked == NULL) { + 801eb8c: 6f25 ldr r5, [r4, #112] ; 0x70 + 801eb8e: b915 cbnz r5, 801eb96 + return ERR_VAL; + 801eb90: f06f 0005 mvn.w r0, #5 +} + 801eb94: bdf8 pop {r3, r4, r5, r6, r7, pc} + if (tcp_output_segment_busy(seg)) { + 801eb96: 4628 mov r0, r5 + 801eb98: f7ff fce2 bl 801e560 + 801eb9c: 2800 cmp r0, #0 + 801eb9e: d1f7 bne.n 801eb90 + pcb->unacked = seg->next; + 801eba0: 682b ldr r3, [r5, #0] + cur_seg = &(pcb->unsent); + 801eba2: f104 066c add.w r6, r4, #108 ; 0x6c + pcb->unacked = seg->next; + 801eba6: 6723 str r3, [r4, #112] ; 0x70 + while (*cur_seg && + 801eba8: 6833 ldr r3, [r6, #0] + 801ebaa: b983 cbnz r3, 801ebce + seg->next = *cur_seg; + 801ebac: 6833 ldr r3, [r6, #0] + 801ebae: 602b str r3, [r5, #0] + *cur_seg = seg; + 801ebb0: 6035 str r5, [r6, #0] + if (seg->next == NULL) { + 801ebb2: 682b ldr r3, [r5, #0] + 801ebb4: b90b cbnz r3, 801ebba + pcb->unsent_oversize = 0; + 801ebb6: f8a4 3068 strh.w r3, [r4, #104] ; 0x68 + if (pcb->nrtx < 0xFF) { + 801ebba: f894 3042 ldrb.w r3, [r4, #66] ; 0x42 + pcb->rttest = 0; + 801ebbe: 2000 movs r0, #0 + if (pcb->nrtx < 0xFF) { + 801ebc0: 2bff cmp r3, #255 ; 0xff + pcb->rttest = 0; + 801ebc2: 6360 str r0, [r4, #52] ; 0x34 + ++pcb->nrtx; + 801ebc4: bf1c itt ne + 801ebc6: 3301 addne r3, #1 + 801ebc8: f884 3042 strbne.w r3, [r4, #66] ; 0x42 + return ERR_OK; + 801ebcc: e7e2 b.n 801eb94 + TCP_SEQ_LT(lwip_ntohl((*cur_seg)->tcphdr->seqno), lwip_ntohl(seg->tcphdr->seqno))) { + 801ebce: 68db ldr r3, [r3, #12] + 801ebd0: 6858 ldr r0, [r3, #4] + 801ebd2: f7f9 fe87 bl 80188e4 + 801ebd6: 68eb ldr r3, [r5, #12] + 801ebd8: 4607 mov r7, r0 + 801ebda: 6858 ldr r0, [r3, #4] + 801ebdc: f7f9 fe82 bl 80188e4 + 801ebe0: 1a38 subs r0, r7, r0 + while (*cur_seg && + 801ebe2: 2800 cmp r0, #0 + 801ebe4: dae2 bge.n 801ebac + cur_seg = &((*cur_seg)->next ); + 801ebe6: 6836 ldr r6, [r6, #0] + 801ebe8: e7de b.n 801eba8 + 801ebea: bf00 nop + 801ebec: 0803b95b .word 0x0803b95b + 801ebf0: 0803bcb0 .word 0x0803bcb0 + 801ebf4: 08035999 .word 0x08035999 + +0801ebf8 : +{ + 801ebf8: b538 push {r3, r4, r5, lr} + LWIP_ASSERT("tcp_rexmit_fast: invalid pcb", pcb != NULL); + 801ebfa: 4604 mov r4, r0 + 801ebfc: b930 cbnz r0, 801ec0c + 801ebfe: 4b15 ldr r3, [pc, #84] ; (801ec54 ) + 801ec00: f240 62f9 movw r2, #1785 ; 0x6f9 + 801ec04: 4914 ldr r1, [pc, #80] ; (801ec58 ) + 801ec06: 4815 ldr r0, [pc, #84] ; (801ec5c ) + 801ec08: f015 fda4 bl 8034754 + if (pcb->unacked != NULL && !(pcb->flags & TF_INFR)) { + 801ec0c: 6f23 ldr r3, [r4, #112] ; 0x70 + 801ec0e: b1fb cbz r3, 801ec50 + 801ec10: 8b63 ldrh r3, [r4, #26] + 801ec12: 075b lsls r3, r3, #29 + 801ec14: d41c bmi.n 801ec50 + if (tcp_rexmit(pcb) == ERR_OK) { + 801ec16: 4620 mov r0, r4 + 801ec18: f7ff ffae bl 801eb78 + 801ec1c: b9c0 cbnz r0, 801ec50 + pcb->ssthresh = LWIP_MIN(pcb->cwnd, pcb->snd_wnd) / 2; + 801ec1e: f8b4 1060 ldrh.w r1, [r4, #96] ; 0x60 + 801ec22: f8b4 3048 ldrh.w r3, [r4, #72] ; 0x48 + pcb->rtime = 0; + 801ec26: 8620 strh r0, [r4, #48] ; 0x30 + pcb->ssthresh = LWIP_MIN(pcb->cwnd, pcb->snd_wnd) / 2; + 801ec28: 4299 cmp r1, r3 + 801ec2a: bf28 it cs + 801ec2c: 4619 movcs r1, r3 + if (pcb->ssthresh < (2U * pcb->mss)) { + 801ec2e: 8e63 ldrh r3, [r4, #50] ; 0x32 + 801ec30: 005d lsls r5, r3, #1 + pcb->ssthresh = LWIP_MIN(pcb->cwnd, pcb->snd_wnd) / 2; + 801ec32: 104a asrs r2, r1, #1 + pcb->ssthresh = 2 * pcb->mss; + 801ec34: ebb5 0f51 cmp.w r5, r1, lsr #1 + pcb->cwnd = pcb->ssthresh + 3 * pcb->mss; + 801ec38: 442b add r3, r5 + pcb->ssthresh = 2 * pcb->mss; + 801ec3a: bf88 it hi + 801ec3c: 462a movhi r2, r5 + pcb->cwnd = pcb->ssthresh + 3 * pcb->mss; + 801ec3e: 4413 add r3, r2 + pcb->ssthresh = 2 * pcb->mss; + 801ec40: f8a4 204a strh.w r2, [r4, #74] ; 0x4a + pcb->cwnd = pcb->ssthresh + 3 * pcb->mss; + 801ec44: f8a4 3048 strh.w r3, [r4, #72] ; 0x48 + tcp_set_flags(pcb, TF_INFR); + 801ec48: 8b63 ldrh r3, [r4, #26] + 801ec4a: f043 0304 orr.w r3, r3, #4 + 801ec4e: 8363 strh r3, [r4, #26] +} + 801ec50: bd38 pop {r3, r4, r5, pc} + 801ec52: bf00 nop + 801ec54: 0803b95b .word 0x0803b95b + 801ec58: 0803bcc8 .word 0x0803bcc8 + 801ec5c: 08035999 .word 0x08035999 + +0801ec60 : + */ +void +tcp_rst(const struct tcp_pcb *pcb, u32_t seqno, u32_t ackno, + const ip_addr_t *local_ip, const ip_addr_t *remote_ip, + u16_t local_port, u16_t remote_port) +{ + 801ec60: e92d 47ff stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, lr} + 801ec64: f8dd 8030 ldr.w r8, [sp, #48] ; 0x30 + 801ec68: 4606 mov r6, r0 + 801ec6a: 460f mov r7, r1 + 801ec6c: 4614 mov r4, r2 + 801ec6e: f8bd 9034 ldrh.w r9, [sp, #52] ; 0x34 + struct pbuf *p; + u16_t wnd; + u8_t optlen; + + LWIP_ASSERT("tcp_rst: invalid local_ip", local_ip != NULL); + 801ec72: 461d mov r5, r3 +{ + 801ec74: f8bd a038 ldrh.w sl, [sp, #56] ; 0x38 + LWIP_ASSERT("tcp_rst: invalid local_ip", local_ip != NULL); + 801ec78: b933 cbnz r3, 801ec88 + 801ec7a: 4b18 ldr r3, [pc, #96] ; (801ecdc ) + 801ec7c: f240 72c4 movw r2, #1988 ; 0x7c4 + 801ec80: 4917 ldr r1, [pc, #92] ; (801ece0 ) + 801ec82: 4818 ldr r0, [pc, #96] ; (801ece4 ) + 801ec84: f015 fd66 bl 8034754 + LWIP_ASSERT("tcp_rst: invalid remote_ip", remote_ip != NULL); + 801ec88: f1b8 0f00 cmp.w r8, #0 + 801ec8c: d106 bne.n 801ec9c + 801ec8e: 4b13 ldr r3, [pc, #76] ; (801ecdc ) + 801ec90: f240 72c5 movw r2, #1989 ; 0x7c5 + 801ec94: 4914 ldr r1, [pc, #80] ; (801ece8 ) + 801ec96: 4813 ldr r0, [pc, #76] ; (801ece4 ) + 801ec98: f015 fd5c bl 8034754 + wnd = PP_HTONS(((TCP_WND >> TCP_RCV_SCALE) & 0xFFFF)); +#else + wnd = PP_HTONS(TCP_WND); +#endif + + p = tcp_output_alloc_header_common(ackno, optlen, 0, lwip_htonl(seqno), local_port, + 801ec9c: 4638 mov r0, r7 + 801ec9e: f7f9 fe21 bl 80188e4 + 801eca2: 2314 movs r3, #20 + 801eca4: f246 0108 movw r1, #24584 ; 0x6008 + 801eca8: 4602 mov r2, r0 + 801ecaa: f8cd a000 str.w sl, [sp] + 801ecae: 4620 mov r0, r4 + 801ecb0: e9cd 3101 strd r3, r1, [sp, #4] + 801ecb4: 464b mov r3, r9 + 801ecb6: 2100 movs r1, #0 + 801ecb8: f7ff fcda bl 801e670 + remote_port, TCP_RST | TCP_ACK, wnd); + if (p == NULL) { + 801ecbc: 4604 mov r4, r0 + 801ecbe: b150 cbz r0, 801ecd6 + LWIP_DEBUGF(TCP_DEBUG, ("tcp_rst: could not allocate memory for pbuf\n")); + return; + } + tcp_output_fill_options(pcb, p, 0, optlen); + 801ecc0: f7ff fd3e bl 801e740 + + MIB2_STATS_INC(mib2.tcpoutrsts); + + tcp_output_control_segment(pcb, p, local_ip, remote_ip); + 801ecc4: 4643 mov r3, r8 + 801ecc6: 462a mov r2, r5 + 801ecc8: 4621 mov r1, r4 + 801ecca: 4630 mov r0, r6 + LWIP_DEBUGF(TCP_RST_DEBUG, ("tcp_rst: seqno %"U32_F" ackno %"U32_F".\n", seqno, ackno)); +} + 801eccc: b004 add sp, #16 + 801ecce: e8bd 47f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, lr} + tcp_output_control_segment(pcb, p, local_ip, remote_ip); + 801ecd2: f7ff bd45 b.w 801e760 +} + 801ecd6: b004 add sp, #16 + 801ecd8: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + 801ecdc: 0803b95b .word 0x0803b95b + 801ece0: 0803bce5 .word 0x0803bce5 + 801ece4: 08035999 .word 0x08035999 + 801ece8: 0803bcff .word 0x0803bcff + +0801ecec : + * + * @param pcb Protocol control block for the TCP connection to send the ACK + */ +err_t +tcp_send_empty_ack(struct tcp_pcb *pcb) +{ + 801ecec: b538 push {r3, r4, r5, lr} + err_t err; + struct pbuf *p; + u8_t optlen, optflags = 0; + u8_t num_sacks = 0; + + LWIP_ASSERT("tcp_send_empty_ack: invalid pcb", pcb != NULL); + 801ecee: 4604 mov r4, r0 + 801ecf0: b930 cbnz r0, 801ed00 + 801ecf2: 4b14 ldr r3, [pc, #80] ; (801ed44 ) + 801ecf4: f240 72ea movw r2, #2026 ; 0x7ea + 801ecf8: 4913 ldr r1, [pc, #76] ; (801ed48 ) + 801ecfa: 4814 ldr r0, [pc, #80] ; (801ed4c ) + 801ecfc: f015 fd2a bl 8034754 + if ((num_sacks = tcp_get_num_sacks(pcb, optlen)) > 0) { + optlen += 4 + num_sacks * 8; /* 4 bytes for header (including 2*NOP), plus 8B for each SACK */ + } +#endif + + p = tcp_output_alloc_header(pcb, optlen, 0, lwip_htonl(pcb->snd_nxt)); + 801ed00: 6d20 ldr r0, [r4, #80] ; 0x50 + 801ed02: f7f9 fdef bl 80188e4 + 801ed06: 2100 movs r1, #0 + 801ed08: 4602 mov r2, r0 + 801ed0a: 4620 mov r0, r4 + 801ed0c: f7ff fcf2 bl 801e6f4 + if (p == NULL) { + 801ed10: 4605 mov r5, r0 + 801ed12: b930 cbnz r0, 801ed22 + /* let tcp_fasttmr retry sending this ACK */ + tcp_set_flags(pcb, TF_ACK_DELAY | TF_ACK_NOW); + 801ed14: 8b63 ldrh r3, [r4, #26] + LWIP_DEBUGF(TCP_OUTPUT_DEBUG, ("tcp_output: (ACK) could not allocate pbuf\n")); + return ERR_BUF; + 801ed16: f06f 0001 mvn.w r0, #1 + tcp_set_flags(pcb, TF_ACK_DELAY | TF_ACK_NOW); + 801ed1a: f043 0303 orr.w r3, r3, #3 + 801ed1e: 8363 strh r3, [r4, #26] + /* remove ACK flags from the PCB, as we sent an empty ACK now */ + tcp_clear_flags(pcb, TF_ACK_DELAY | TF_ACK_NOW); + } + + return err; +} + 801ed20: bd38 pop {r3, r4, r5, pc} + tcp_output_fill_options(pcb, p, optflags, num_sacks); + 801ed22: f7ff fd0d bl 801e740 + err = tcp_output_control_segment(pcb, p, &pcb->local_ip, &pcb->remote_ip); + 801ed26: 1d23 adds r3, r4, #4 + 801ed28: 4622 mov r2, r4 + 801ed2a: 4629 mov r1, r5 + 801ed2c: 4620 mov r0, r4 + 801ed2e: f7ff fd17 bl 801e760 + if (err != ERR_OK) { + 801ed32: 8b63 ldrh r3, [r4, #26] + 801ed34: b118 cbz r0, 801ed3e + tcp_set_flags(pcb, TF_ACK_DELAY | TF_ACK_NOW); + 801ed36: f043 0303 orr.w r3, r3, #3 + tcp_clear_flags(pcb, TF_ACK_DELAY | TF_ACK_NOW); + 801ed3a: b29b uxth r3, r3 + 801ed3c: e7ef b.n 801ed1e + 801ed3e: f023 0303 bic.w r3, r3, #3 + 801ed42: e7fa b.n 801ed3a + 801ed44: 0803b95b .word 0x0803b95b + 801ed48: 0803bd1a .word 0x0803bd1a + 801ed4c: 08035999 .word 0x08035999 + +0801ed50 : +{ + 801ed50: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + LWIP_ASSERT("tcp_output: invalid pcb", pcb != NULL); + 801ed54: 4604 mov r4, r0 +{ + 801ed56: b087 sub sp, #28 + LWIP_ASSERT("tcp_output: invalid pcb", pcb != NULL); + 801ed58: b930 cbnz r0, 801ed68 + 801ed5a: 4b8f ldr r3, [pc, #572] ; (801ef98 ) + 801ed5c: f240 42e1 movw r2, #1249 ; 0x4e1 + 801ed60: 498e ldr r1, [pc, #568] ; (801ef9c ) + 801ed62: 488f ldr r0, [pc, #572] ; (801efa0 ) + 801ed64: f015 fcf6 bl 8034754 + LWIP_ASSERT("don't call tcp_output for listen-pcbs", + 801ed68: 7d23 ldrb r3, [r4, #20] + 801ed6a: 2b01 cmp r3, #1 + 801ed6c: d106 bne.n 801ed7c + 801ed6e: 4b8a ldr r3, [pc, #552] ; (801ef98 ) + 801ed70: f240 42e3 movw r2, #1251 ; 0x4e3 + 801ed74: 498b ldr r1, [pc, #556] ; (801efa4 ) + 801ed76: 488a ldr r0, [pc, #552] ; (801efa0 ) + 801ed78: f015 fcec bl 8034754 + if (tcp_input_pcb == pcb) { + 801ed7c: 4b8a ldr r3, [pc, #552] ; (801efa8 ) + 801ed7e: 681b ldr r3, [r3, #0] + 801ed80: 42a3 cmp r3, r4 + 801ed82: f000 8171 beq.w 801f068 + seg = pcb->unsent; + 801ed86: 6ee5 ldr r5, [r4, #108] ; 0x6c + wnd = LWIP_MIN(pcb->snd_wnd, pcb->cwnd); + 801ed88: f8b4 8048 ldrh.w r8, [r4, #72] ; 0x48 + 801ed8c: f8b4 6060 ldrh.w r6, [r4, #96] ; 0x60 + if (seg == NULL) { + 801ed90: b94d cbnz r5, 801eda6 + if (pcb->flags & TF_ACK_NOW) { + 801ed92: 8b63 ldrh r3, [r4, #26] + 801ed94: 0798 lsls r0, r3, #30 + 801ed96: f140 8163 bpl.w 801f060 + return tcp_send_empty_ack(pcb); + 801ed9a: 4620 mov r0, r4 +} + 801ed9c: b007 add sp, #28 + 801ed9e: e8bd 4ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + return tcp_send_empty_ack(pcb); + 801eda2: f7ff bfa3 b.w 801ecec + if ((pcb != NULL) && (pcb->netif_idx != NETIF_NO_INDEX)) { + 801eda6: 7a20 ldrb r0, [r4, #8] + netif = tcp_route(pcb, &pcb->local_ip, &pcb->remote_ip); + 801eda8: f104 0904 add.w r9, r4, #4 + if ((pcb != NULL) && (pcb->netif_idx != NETIF_NO_INDEX)) { + 801edac: b340 cbz r0, 801ee00 + return netif_get_by_index(pcb->netif_idx); + 801edae: f7fc fdf3 bl 801b998 + return ip_route(src, dst); + 801edb2: 4607 mov r7, r0 + if (netif == NULL) { + 801edb4: 2800 cmp r0, #0 + 801edb6: f000 8170 beq.w 801f09a + if (ip_addr_isany(&pcb->local_ip)) { + 801edba: 6823 ldr r3, [r4, #0] + 801edbc: b90b cbnz r3, 801edc2 + ip_addr_copy(pcb->local_ip, *local_ip); + 801edbe: 6843 ldr r3, [r0, #4] + 801edc0: 6023 str r3, [r4, #0] + if (lwip_ntohl(seg->tcphdr->seqno) - pcb->lastack + seg->len > wnd) { + 801edc2: 68eb ldr r3, [r5, #12] + wnd = LWIP_MIN(pcb->snd_wnd, pcb->cwnd); + 801edc4: 45b0 cmp r8, r6 + if (lwip_ntohl(seg->tcphdr->seqno) - pcb->lastack + seg->len > wnd) { + 801edc6: 6858 ldr r0, [r3, #4] + wnd = LWIP_MIN(pcb->snd_wnd, pcb->cwnd); + 801edc8: bf28 it cs + 801edca: 46b0 movcs r8, r6 + if (lwip_ntohl(seg->tcphdr->seqno) - pcb->lastack + seg->len > wnd) { + 801edcc: f7f9 fd8a bl 80188e4 + 801edd0: 892b ldrh r3, [r5, #8] + 801edd2: 6c62 ldr r2, [r4, #68] ; 0x44 + 801edd4: 1a9b subs r3, r3, r2 + 801edd6: 4418 add r0, r3 + 801edd8: 4540 cmp r0, r8 + 801edda: d915 bls.n 801ee08 + if (wnd == pcb->snd_wnd && pcb->unacked == NULL && pcb->persist_backoff == 0) { + 801eddc: f8b4 3060 ldrh.w r3, [r4, #96] ; 0x60 + 801ede0: 4543 cmp r3, r8 + 801ede2: d1d6 bne.n 801ed92 + 801ede4: 6f23 ldr r3, [r4, #112] ; 0x70 + 801ede6: 2b00 cmp r3, #0 + 801ede8: d1d3 bne.n 801ed92 + 801edea: f894 3099 ldrb.w r3, [r4, #153] ; 0x99 + 801edee: 2b00 cmp r3, #0 + 801edf0: d1cf bne.n 801ed92 + pcb->persist_cnt = 0; + 801edf2: f44f 7280 mov.w r2, #256 ; 0x100 + pcb->persist_probe = 0; + 801edf6: f884 309a strb.w r3, [r4, #154] ; 0x9a + pcb->persist_cnt = 0; + 801edfa: f8a4 2098 strh.w r2, [r4, #152] ; 0x98 + 801edfe: e7c8 b.n 801ed92 + return ip_route(src, dst); + 801ee00: 4648 mov r0, r9 + 801ee02: f7fb fb8b bl 801a51c + 801ee06: e7d4 b.n 801edb2 + pcb->persist_backoff = 0; + 801ee08: 2300 movs r3, #0 + useg = pcb->unacked; + 801ee0a: 6f26 ldr r6, [r4, #112] ; 0x70 + pcb->persist_backoff = 0; + 801ee0c: f884 3099 strb.w r3, [r4, #153] ; 0x99 + if (useg != NULL) { + 801ee10: b126 cbz r6, 801ee1c + for (; useg->next != NULL; useg = useg->next); + 801ee12: 4633 mov r3, r6 + 801ee14: 6836 ldr r6, [r6, #0] + 801ee16: 2e00 cmp r6, #0 + 801ee18: d1fb bne.n 801ee12 + 801ee1a: 461e mov r6, r3 + LWIP_ASSERT("RST not expected here!", + 801ee1c: f8df a178 ldr.w sl, [pc, #376] ; 801ef98 + 801ee20: f8df b17c ldr.w fp, [pc, #380] ; 801efa0 + 801ee24: e0de b.n 801efe4 + if (pcb->state != SYN_SENT) { + 801ee26: 7d23 ldrb r3, [r4, #20] + 801ee28: 2b02 cmp r3, #2 + 801ee2a: d009 beq.n 801ee40 + TCPH_SET_FLAG(seg->tcphdr, TCP_ACK); + 801ee2c: 68eb ldr r3, [r5, #12] + 801ee2e: 2010 movs r0, #16 + 801ee30: 899b ldrh r3, [r3, #12] + 801ee32: 9304 str r3, [sp, #16] + 801ee34: f7f9 fd53 bl 80188de + 801ee38: 9b04 ldr r3, [sp, #16] + 801ee3a: 68ea ldr r2, [r5, #12] + 801ee3c: 4318 orrs r0, r3 + 801ee3e: 8190 strh r0, [r2, #12] + if (tcp_output_segment_busy(seg)) { + 801ee40: 4628 mov r0, r5 + 801ee42: f7ff fb8d bl 801e560 + 801ee46: 2800 cmp r0, #0 + 801ee48: d170 bne.n 801ef2c + seg->tcphdr->ackno = lwip_htonl(pcb->rcv_nxt); + 801ee4a: 68eb ldr r3, [r5, #12] + 801ee4c: 6a60 ldr r0, [r4, #36] ; 0x24 + 801ee4e: 9304 str r3, [sp, #16] + 801ee50: f7f9 fd48 bl 80188e4 + 801ee54: 9b04 ldr r3, [sp, #16] + 801ee56: 6098 str r0, [r3, #8] + seg->tcphdr->wnd = lwip_htons(TCPWND_MIN16(RCV_WND_SCALE(pcb, pcb->rcv_ann_wnd))); + 801ee58: 68eb ldr r3, [r5, #12] + 801ee5a: 8d60 ldrh r0, [r4, #42] ; 0x2a + 801ee5c: 9304 str r3, [sp, #16] + 801ee5e: f7f9 fd3e bl 80188de + 801ee62: 9b04 ldr r3, [sp, #16] + pcb->rcv_ann_right_edge = pcb->rcv_nxt + pcb->rcv_ann_wnd; + 801ee64: 8d62 ldrh r2, [r4, #42] ; 0x2a + seg->tcphdr->wnd = lwip_htons(TCPWND_MIN16(RCV_WND_SCALE(pcb, pcb->rcv_ann_wnd))); + 801ee66: 81d8 strh r0, [r3, #14] + pcb->rcv_ann_right_edge = pcb->rcv_nxt + pcb->rcv_ann_wnd; + 801ee68: 6a63 ldr r3, [r4, #36] ; 0x24 + 801ee6a: 4413 add r3, r2 + 801ee6c: 62e3 str r3, [r4, #44] ; 0x2c + if (seg->flags & TF_SEG_OPTS_MSS) { + 801ee6e: 7aaa ldrb r2, [r5, #10] + opts = (u32_t *)(void *)(seg->tcphdr + 1); + 801ee70: 68eb ldr r3, [r5, #12] + if (seg->flags & TF_SEG_OPTS_MSS) { + 801ee72: 07d2 lsls r2, r2, #31 + 801ee74: d44a bmi.n 801ef0c + opts = (u32_t *)(void *)(seg->tcphdr + 1); + 801ee76: f103 0214 add.w r2, r3, #20 + if (pcb->rtime < 0) { + 801ee7a: f9b4 3030 ldrsh.w r3, [r4, #48] ; 0x30 + 801ee7e: 2b00 cmp r3, #0 + pcb->rtime = 0; + 801ee80: bfbc itt lt + 801ee82: 2300 movlt r3, #0 + 801ee84: 8623 strhlt r3, [r4, #48] ; 0x30 + if (pcb->rttest == 0) { + 801ee86: 6b63 ldr r3, [r4, #52] ; 0x34 + 801ee88: b94b cbnz r3, 801ee9e + pcb->rttest = tcp_ticks; + 801ee8a: 4948 ldr r1, [pc, #288] ; (801efac ) + pcb->rtseq = lwip_ntohl(seg->tcphdr->seqno); + 801ee8c: 68eb ldr r3, [r5, #12] + pcb->rttest = tcp_ticks; + 801ee8e: 6809 ldr r1, [r1, #0] + 801ee90: 9204 str r2, [sp, #16] + 801ee92: 6361 str r1, [r4, #52] ; 0x34 + pcb->rtseq = lwip_ntohl(seg->tcphdr->seqno); + 801ee94: 6858 ldr r0, [r3, #4] + 801ee96: f7f9 fd25 bl 80188e4 + 801ee9a: 9a04 ldr r2, [sp, #16] + 801ee9c: 63a0 str r0, [r4, #56] ; 0x38 + len = (u16_t)((u8_t *)seg->tcphdr - (u8_t *)seg->p->payload); + 801ee9e: 6869 ldr r1, [r5, #4] + 801eea0: 68eb ldr r3, [r5, #12] + 801eea2: 6848 ldr r0, [r1, #4] + seg->p->len -= len; + 801eea4: f8b1 c00a ldrh.w ip, [r1, #10] + len = (u16_t)((u8_t *)seg->tcphdr - (u8_t *)seg->p->payload); + 801eea8: 1a18 subs r0, r3, r0 + seg->p->payload = seg->tcphdr; + 801eeaa: 604b str r3, [r1, #4] + len = (u16_t)((u8_t *)seg->tcphdr - (u8_t *)seg->p->payload); + 801eeac: b280 uxth r0, r0 + seg->p->len -= len; + 801eeae: ebac 0c00 sub.w ip, ip, r0 + 801eeb2: f8a1 c00a strh.w ip, [r1, #10] + seg->p->tot_len -= len; + 801eeb6: f8b1 c008 ldrh.w ip, [r1, #8] + 801eeba: ebac 0000 sub.w r0, ip, r0 + 801eebe: 8108 strh r0, [r1, #8] + seg->tcphdr->chksum = 0; + 801eec0: 2100 movs r1, #0 + 801eec2: 7419 strb r1, [r3, #16] + 801eec4: 7459 strb r1, [r3, #17] + LWIP_ASSERT("options not filled", (u8_t *)opts == ((u8_t *)(seg->tcphdr + 1)) + LWIP_TCP_OPT_LENGTH_SEGMENT(seg->flags, pcb)); + 801eec6: 7aa9 ldrb r1, [r5, #10] + 801eec8: f011 0f01 tst.w r1, #1 + 801eecc: bf14 ite ne + 801eece: 2118 movne r1, #24 + 801eed0: 2114 moveq r1, #20 + 801eed2: 440b add r3, r1 + 801eed4: 429a cmp r2, r3 + 801eed6: d006 beq.n 801eee6 + 801eed8: 4653 mov r3, sl + 801eeda: f240 621c movw r2, #1564 ; 0x61c + 801eede: 4934 ldr r1, [pc, #208] ; (801efb0 ) + 801eee0: 4658 mov r0, fp + 801eee2: f015 fc37 bl 8034754 + err = ip_output_if(seg->p, &pcb->local_ip, &pcb->remote_ip, pcb->ttl, + 801eee6: 2306 movs r3, #6 + 801eee8: 9702 str r7, [sp, #8] + 801eeea: 464a mov r2, r9 + 801eeec: 4621 mov r1, r4 + 801eeee: 9301 str r3, [sp, #4] + 801eef0: 7aa3 ldrb r3, [r4, #10] + 801eef2: 9300 str r3, [sp, #0] + 801eef4: 7ae3 ldrb r3, [r4, #11] + 801eef6: 6868 ldr r0, [r5, #4] + 801eef8: f7fb fc7e bl 801a7f8 + if (err != ERR_OK) { + 801eefc: b1b0 cbz r0, 801ef2c + tcp_set_flags(pcb, TF_NAGLEMEMERR); + 801eefe: 8b63 ldrh r3, [r4, #26] + 801ef00: f043 0380 orr.w r3, r3, #128 ; 0x80 + 801ef04: 8363 strh r3, [r4, #26] +} + 801ef06: b007 add sp, #28 + 801ef08: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + mss = tcp_eff_send_mss_netif(TCP_MSS, netif, &pcb->remote_ip); + 801ef0c: 464a mov r2, r9 + 801ef0e: 4639 mov r1, r7 + 801ef10: f44f 7006 mov.w r0, #536 ; 0x218 + 801ef14: 9304 str r3, [sp, #16] + 801ef16: f7fd fa4f bl 801c3b8 + *opts = TCP_BUILD_MSS_OPTION(mss); + 801ef1a: f040 7001 orr.w r0, r0, #33816576 ; 0x2040000 + 801ef1e: f7f9 fce1 bl 80188e4 + 801ef22: 9b04 ldr r3, [sp, #16] + opts += 1; + 801ef24: f103 0218 add.w r2, r3, #24 + *opts = TCP_BUILD_MSS_OPTION(mss); + 801ef28: 6158 str r0, [r3, #20] + opts += 1; + 801ef2a: e7a6 b.n 801ee7a + pcb->unsent = seg->next; + 801ef2c: 682b ldr r3, [r5, #0] + 801ef2e: 66e3 str r3, [r4, #108] ; 0x6c + if (pcb->state != SYN_SENT) { + 801ef30: 7d23 ldrb r3, [r4, #20] + 801ef32: 2b02 cmp r3, #2 + tcp_clear_flags(pcb, TF_ACK_DELAY | TF_ACK_NOW); + 801ef34: bf1e ittt ne + 801ef36: 8b63 ldrhne r3, [r4, #26] + 801ef38: f023 0303 bicne.w r3, r3, #3 + 801ef3c: 8363 strhne r3, [r4, #26] + snd_nxt = lwip_ntohl(seg->tcphdr->seqno) + TCP_TCPLEN(seg); + 801ef3e: 68eb ldr r3, [r5, #12] + 801ef40: 6858 ldr r0, [r3, #4] + 801ef42: f7f9 fccf bl 80188e4 + 801ef46: 8929 ldrh r1, [r5, #8] + 801ef48: 68eb ldr r3, [r5, #12] + 801ef4a: 9104 str r1, [sp, #16] + 801ef4c: 9005 str r0, [sp, #20] + 801ef4e: 8998 ldrh r0, [r3, #12] + 801ef50: f7f9 fcc5 bl 80188de + 801ef54: f010 0303 ands.w r3, r0, #3 + 801ef58: e9dd 1204 ldrd r1, r2, [sp, #16] + 801ef5c: bf18 it ne + 801ef5e: 2301 movne r3, #1 + 801ef60: 440a add r2, r1 + 801ef62: 441a add r2, r3 + if (TCP_SEQ_LT(pcb->snd_nxt, snd_nxt)) { + 801ef64: 6d23 ldr r3, [r4, #80] ; 0x50 + 801ef66: 1a9b subs r3, r3, r2 + 801ef68: 2b00 cmp r3, #0 + if (TCP_TCPLEN(seg) > 0) { + 801ef6a: 892b ldrh r3, [r5, #8] + pcb->snd_nxt = snd_nxt; + 801ef6c: bfb8 it lt + 801ef6e: 6522 strlt r2, [r4, #80] ; 0x50 + if (TCP_TCPLEN(seg) > 0) { + 801ef70: 68ea ldr r2, [r5, #12] + 801ef72: 9304 str r3, [sp, #16] + 801ef74: 8990 ldrh r0, [r2, #12] + 801ef76: f7f9 fcb2 bl 80188de + 801ef7a: f010 0003 ands.w r0, r0, #3 + 801ef7e: 9b04 ldr r3, [sp, #16] + 801ef80: bf18 it ne + 801ef82: 2001 movne r0, #1 + 801ef84: 42d8 cmn r0, r3 + 801ef86: f000 8084 beq.w 801f092 + seg->next = NULL; + 801ef8a: 2300 movs r3, #0 + 801ef8c: 602b str r3, [r5, #0] + if (pcb->unacked == NULL) { + 801ef8e: 6f23 ldr r3, [r4, #112] ; 0x70 + 801ef90: b983 cbnz r3, 801efb4 + pcb->unacked = seg; + 801ef92: 6725 str r5, [r4, #112] ; 0x70 + useg->next = seg; + 801ef94: 462e mov r6, r5 + 801ef96: e022 b.n 801efde + 801ef98: 0803b95b .word 0x0803b95b + 801ef9c: 0803bd3a .word 0x0803bd3a + 801efa0: 08035999 .word 0x08035999 + 801efa4: 0803bd52 .word 0x0803bd52 + 801efa8: 2001e6f0 .word 0x2001e6f0 + 801efac: 2001e6bc .word 0x2001e6bc + 801efb0: 0803bd8f .word 0x0803bd8f + if (TCP_SEQ_LT(lwip_ntohl(seg->tcphdr->seqno), lwip_ntohl(useg->tcphdr->seqno))) { + 801efb4: 68eb ldr r3, [r5, #12] + 801efb6: 6858 ldr r0, [r3, #4] + 801efb8: f7f9 fc94 bl 80188e4 + 801efbc: 68f2 ldr r2, [r6, #12] + 801efbe: 9004 str r0, [sp, #16] + 801efc0: 6850 ldr r0, [r2, #4] + 801efc2: f7f9 fc8f bl 80188e4 + 801efc6: 9b04 ldr r3, [sp, #16] + 801efc8: 1a18 subs r0, r3, r0 + 801efca: 2800 cmp r0, #0 + 801efcc: da5f bge.n 801f08e + struct tcp_seg **cur_seg = &(pcb->unacked); + 801efce: f104 0370 add.w r3, r4, #112 ; 0x70 + while (*cur_seg && + 801efd2: 681a ldr r2, [r3, #0] + 801efd4: 2a00 cmp r2, #0 + 801efd6: d149 bne.n 801f06c + seg->next = (*cur_seg); + 801efd8: 681a ldr r2, [r3, #0] + 801efda: 602a str r2, [r5, #0] + (*cur_seg) = seg; + 801efdc: 601d str r5, [r3, #0] + seg = pcb->unsent; + 801efde: 6ee5 ldr r5, [r4, #108] ; 0x6c + while (seg != NULL && + 801efe0: 2d00 cmp r5, #0 + 801efe2: d03a beq.n 801f05a + lwip_ntohl(seg->tcphdr->seqno) - pcb->lastack + seg->len <= wnd) { + 801efe4: 68eb ldr r3, [r5, #12] + 801efe6: 6858 ldr r0, [r3, #4] + 801efe8: f7f9 fc7c bl 80188e4 + 801efec: 6c63 ldr r3, [r4, #68] ; 0x44 + 801efee: 1ac0 subs r0, r0, r3 + 801eff0: 892b ldrh r3, [r5, #8] + 801eff2: 4418 add r0, r3 + while (seg != NULL && + 801eff4: 4540 cmp r0, r8 + 801eff6: d82e bhi.n 801f056 + LWIP_ASSERT("RST not expected here!", + 801eff8: 68eb ldr r3, [r5, #12] + 801effa: 8998 ldrh r0, [r3, #12] + 801effc: f7f9 fc6f bl 80188de + 801f000: 0741 lsls r1, r0, #29 + 801f002: d506 bpl.n 801f012 + 801f004: 4653 mov r3, sl + 801f006: f240 5236 movw r2, #1334 ; 0x536 + 801f00a: 4925 ldr r1, [pc, #148] ; (801f0a0 ) + 801f00c: 4658 mov r0, fp + 801f00e: f015 fba1 bl 8034754 + if ((tcp_do_output_nagle(pcb) == 0) && + 801f012: 6f23 ldr r3, [r4, #112] ; 0x70 + 801f014: 2b00 cmp r3, #0 + 801f016: f43f af06 beq.w 801ee26 + 801f01a: 8b62 ldrh r2, [r4, #26] + 801f01c: f012 0f44 tst.w r2, #68 ; 0x44 + 801f020: f47f af01 bne.w 801ee26 + 801f024: 6ee3 ldr r3, [r4, #108] ; 0x6c + 801f026: b143 cbz r3, 801f03a + 801f028: 6819 ldr r1, [r3, #0] + 801f02a: 2900 cmp r1, #0 + 801f02c: f47f aefb bne.w 801ee26 + 801f030: 8919 ldrh r1, [r3, #8] + 801f032: 8e63 ldrh r3, [r4, #50] ; 0x32 + 801f034: 4299 cmp r1, r3 + 801f036: f4bf aef6 bcs.w 801ee26 + 801f03a: f8b4 3064 ldrh.w r3, [r4, #100] ; 0x64 + 801f03e: 2b00 cmp r3, #0 + 801f040: f43f aef1 beq.w 801ee26 + 801f044: f8b4 3066 ldrh.w r3, [r4, #102] ; 0x66 + 801f048: 2b08 cmp r3, #8 + 801f04a: f63f aeec bhi.w 801ee26 + 801f04e: f012 0fa0 tst.w r2, #160 ; 0xa0 + 801f052: f47f aee8 bne.w 801ee26 + if (pcb->unsent == NULL) { + 801f056: 6ee3 ldr r3, [r4, #108] ; 0x6c + 801f058: b913 cbnz r3, 801f060 + pcb->unsent_oversize = 0; + 801f05a: 2300 movs r3, #0 + 801f05c: f8a4 3068 strh.w r3, [r4, #104] ; 0x68 + tcp_clear_flags(pcb, TF_NAGLEMEMERR); + 801f060: 8b63 ldrh r3, [r4, #26] + 801f062: f023 0380 bic.w r3, r3, #128 ; 0x80 + 801f066: 8363 strh r3, [r4, #26] + return ERR_OK; + 801f068: 2000 movs r0, #0 + 801f06a: e74c b.n 801ef06 + TCP_SEQ_LT(lwip_ntohl((*cur_seg)->tcphdr->seqno), lwip_ntohl(seg->tcphdr->seqno))) { + 801f06c: 68d2 ldr r2, [r2, #12] + 801f06e: 9305 str r3, [sp, #20] + 801f070: 6850 ldr r0, [r2, #4] + 801f072: f7f9 fc37 bl 80188e4 + 801f076: 68e9 ldr r1, [r5, #12] + 801f078: 9004 str r0, [sp, #16] + 801f07a: 6848 ldr r0, [r1, #4] + 801f07c: f7f9 fc32 bl 80188e4 + 801f080: 9a04 ldr r2, [sp, #16] + while (*cur_seg && + 801f082: 9b05 ldr r3, [sp, #20] + TCP_SEQ_LT(lwip_ntohl((*cur_seg)->tcphdr->seqno), lwip_ntohl(seg->tcphdr->seqno))) { + 801f084: 1a10 subs r0, r2, r0 + while (*cur_seg && + 801f086: 2800 cmp r0, #0 + 801f088: daa6 bge.n 801efd8 + cur_seg = &((*cur_seg)->next ); + 801f08a: 681b ldr r3, [r3, #0] + 801f08c: e7a1 b.n 801efd2 + useg->next = seg; + 801f08e: 6035 str r5, [r6, #0] + 801f090: e780 b.n 801ef94 + tcp_seg_free(seg); + 801f092: 4628 mov r0, r5 + 801f094: f7fd f93c bl 801c310 + 801f098: e7a1 b.n 801efde + return ERR_RTE; + 801f09a: f06f 0003 mvn.w r0, #3 + 801f09e: e732 b.n 801ef06 + 801f0a0: 0803bd78 .word 0x0803bd78 + +0801f0a4 : +{ + 801f0a4: b510 push {r4, lr} + LWIP_ASSERT("tcp_rexmit_rto_commit: invalid pcb", pcb != NULL); + 801f0a6: 4604 mov r4, r0 + 801f0a8: b930 cbnz r0, 801f0b8 + 801f0aa: 4b09 ldr r3, [pc, #36] ; (801f0d0 ) + 801f0ac: f44f 62d3 mov.w r2, #1688 ; 0x698 + 801f0b0: 4908 ldr r1, [pc, #32] ; (801f0d4 ) + 801f0b2: 4809 ldr r0, [pc, #36] ; (801f0d8 ) + 801f0b4: f015 fb4e bl 8034754 + if (pcb->nrtx < 0xFF) { + 801f0b8: f894 3042 ldrb.w r3, [r4, #66] ; 0x42 + tcp_output(pcb); + 801f0bc: 4620 mov r0, r4 + if (pcb->nrtx < 0xFF) { + 801f0be: 2bff cmp r3, #255 ; 0xff + ++pcb->nrtx; + 801f0c0: bf1c itt ne + 801f0c2: 3301 addne r3, #1 + 801f0c4: f884 3042 strbne.w r3, [r4, #66] ; 0x42 +} + 801f0c8: e8bd 4010 ldmia.w sp!, {r4, lr} + tcp_output(pcb); + 801f0cc: f7ff be40 b.w 801ed50 + 801f0d0: 0803b95b .word 0x0803b95b + 801f0d4: 0803bda2 .word 0x0803bda2 + 801f0d8: 08035999 .word 0x08035999 + +0801f0dc : +{ + 801f0dc: b510 push {r4, lr} + LWIP_ASSERT("tcp_rexmit_rto: invalid pcb", pcb != NULL); + 801f0de: 4604 mov r4, r0 + 801f0e0: b930 cbnz r0, 801f0f0 + 801f0e2: 4b08 ldr r3, [pc, #32] ; (801f104 ) + 801f0e4: f240 62ad movw r2, #1709 ; 0x6ad + 801f0e8: 4907 ldr r1, [pc, #28] ; (801f108 ) + 801f0ea: 4808 ldr r0, [pc, #32] ; (801f10c ) + 801f0ec: f015 fb32 bl 8034754 + if (tcp_rexmit_rto_prepare(pcb) == ERR_OK) { + 801f0f0: 4620 mov r0, r4 + 801f0f2: f7ff fcfd bl 801eaf0 + 801f0f6: b920 cbnz r0, 801f102 + tcp_rexmit_rto_commit(pcb); + 801f0f8: 4620 mov r0, r4 +} + 801f0fa: e8bd 4010 ldmia.w sp!, {r4, lr} + tcp_rexmit_rto_commit(pcb); + 801f0fe: f7ff bfd1 b.w 801f0a4 +} + 801f102: bd10 pop {r4, pc} + 801f104: 0803b95b .word 0x0803b95b + 801f108: 0803bdc5 .word 0x0803bdc5 + 801f10c: 08035999 .word 0x08035999 + +0801f110 : + * + * @param pcb the tcp_pcb for which to send a keepalive packet + */ +err_t +tcp_keepalive(struct tcp_pcb *pcb) +{ + 801f110: b570 push {r4, r5, r6, lr} + err_t err; + struct pbuf *p; + u8_t optlen = LWIP_TCP_OPT_LENGTH_SEGMENT(0, pcb); + + LWIP_ASSERT("tcp_keepalive: invalid pcb", pcb != NULL); + 801f112: 4604 mov r4, r0 + 801f114: b930 cbnz r0, 801f124 + 801f116: 4b0f ldr r3, [pc, #60] ; (801f154 ) + 801f118: f640 0224 movw r2, #2084 ; 0x824 + 801f11c: 490e ldr r1, [pc, #56] ; (801f158 ) + 801f11e: 480f ldr r0, [pc, #60] ; (801f15c ) + 801f120: f015 fb18 bl 8034754 + LWIP_DEBUGF(TCP_DEBUG, ("\n")); + + LWIP_DEBUGF(TCP_DEBUG, ("tcp_keepalive: tcp_ticks %"U32_F" pcb->tmr %"U32_F" pcb->keep_cnt_sent %"U16_F"\n", + tcp_ticks, pcb->tmr, (u16_t)pcb->keep_cnt_sent)); + + p = tcp_output_alloc_header(pcb, optlen, 0, lwip_htonl(pcb->snd_nxt - 1)); + 801f124: 6d20 ldr r0, [r4, #80] ; 0x50 + 801f126: 3801 subs r0, #1 + 801f128: f7f9 fbdc bl 80188e4 + 801f12c: 2100 movs r1, #0 + 801f12e: 4602 mov r2, r0 + 801f130: 4620 mov r0, r4 + 801f132: f7ff fadf bl 801e6f4 + if (p == NULL) { + 801f136: 4605 mov r5, r0 + 801f138: b148 cbz r0, 801f14e + LWIP_DEBUGF(TCP_DEBUG, + ("tcp_keepalive: could not allocate memory for pbuf\n")); + return ERR_MEM; + } + tcp_output_fill_options(pcb, p, 0, optlen); + 801f13a: f7ff fb01 bl 801e740 + err = tcp_output_control_segment(pcb, p, &pcb->local_ip, &pcb->remote_ip); + 801f13e: 1d23 adds r3, r4, #4 + 801f140: 4622 mov r2, r4 + 801f142: 4629 mov r1, r5 + 801f144: 4620 mov r0, r4 + + LWIP_DEBUGF(TCP_DEBUG, ("tcp_keepalive: seqno %"U32_F" ackno %"U32_F" err %d.\n", + pcb->snd_nxt - 1, pcb->rcv_nxt, (int)err)); + return err; +} + 801f146: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} + err = tcp_output_control_segment(pcb, p, &pcb->local_ip, &pcb->remote_ip); + 801f14a: f7ff bb09 b.w 801e760 +} + 801f14e: f04f 30ff mov.w r0, #4294967295 + 801f152: bd70 pop {r4, r5, r6, pc} + 801f154: 0803b95b .word 0x0803b95b + 801f158: 0803bde1 .word 0x0803bde1 + 801f15c: 08035999 .word 0x08035999 + +0801f160 : + * + * @param pcb the tcp_pcb for which to send a zero-window probe packet + */ +err_t +tcp_zero_window_probe(struct tcp_pcb *pcb) +{ + 801f160: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} + u16_t len; + u8_t is_fin; + u32_t snd_nxt; + u8_t optlen = LWIP_TCP_OPT_LENGTH_SEGMENT(0, pcb); + + LWIP_ASSERT("tcp_zero_window_probe: invalid pcb", pcb != NULL); + 801f164: 4606 mov r6, r0 + 801f166: b930 cbnz r0, 801f176 + 801f168: 4b2c ldr r3, [pc, #176] ; (801f21c ) + 801f16a: f640 024f movw r2, #2127 ; 0x84f + 801f16e: 492c ldr r1, [pc, #176] ; (801f220 ) + 801f170: 482c ldr r0, [pc, #176] ; (801f224 ) + 801f172: f015 faef bl 8034754 + ("tcp_zero_window_probe: tcp_ticks %"U32_F + " pcb->tmr %"U32_F" pcb->keep_cnt_sent %"U16_F"\n", + tcp_ticks, pcb->tmr, (u16_t)pcb->keep_cnt_sent)); + + /* Only consider unsent, persist timer should be off when there is data in-flight */ + seg = pcb->unsent; + 801f176: 6ef5 ldr r5, [r6, #108] ; 0x6c + if (seg == NULL) { + 801f178: 2d00 cmp r5, #0 + 801f17a: d048 beq.n 801f20e + + /* increment probe count. NOTE: we record probe even if it fails + to actually transmit due to an error. This ensures memory exhaustion/ + routing problem doesn't leave a zero-window pcb as an indefinite zombie. + RTO mechanism has similar behavior, see pcb->nrtx */ + if (pcb->persist_probe < 0xFF) { + 801f17c: f896 309a ldrb.w r3, [r6, #154] ; 0x9a + 801f180: 2bff cmp r3, #255 ; 0xff + ++pcb->persist_probe; + 801f182: bf1c itt ne + 801f184: 3301 addne r3, #1 + 801f186: f886 309a strbne.w r3, [r6, #154] ; 0x9a + } + + is_fin = ((TCPH_FLAGS(seg->tcphdr) & TCP_FIN) != 0) && (seg->len == 0); + 801f18a: 68eb ldr r3, [r5, #12] + 801f18c: 8998 ldrh r0, [r3, #12] + 801f18e: f7f9 fba6 bl 80188de + 801f192: f010 0401 ands.w r4, r0, #1 + /* we want to send one seqno: either FIN or data (no options) */ + len = is_fin ? 0 : 1; + + p = tcp_output_alloc_header(pcb, optlen, len, seg->tcphdr->seqno); + 801f196: 68eb ldr r3, [r5, #12] + 801f198: 4630 mov r0, r6 + is_fin = ((TCPH_FLAGS(seg->tcphdr) & TCP_FIN) != 0) && (seg->len == 0); + 801f19a: bf18 it ne + 801f19c: 892c ldrhne r4, [r5, #8] + p = tcp_output_alloc_header(pcb, optlen, len, seg->tcphdr->seqno); + 801f19e: 685a ldr r2, [r3, #4] + is_fin = ((TCPH_FLAGS(seg->tcphdr) & TCP_FIN) != 0) && (seg->len == 0); + 801f1a0: bf1c itt ne + 801f1a2: fab4 f484 clzne r4, r4 + 801f1a6: 0964 lsrne r4, r4, #5 + p = tcp_output_alloc_header(pcb, optlen, len, seg->tcphdr->seqno); + 801f1a8: f084 0101 eor.w r1, r4, #1 + 801f1ac: f7ff faa2 bl 801e6f4 + if (p == NULL) { + 801f1b0: 4607 mov r7, r0 + 801f1b2: b378 cbz r0, 801f214 + LWIP_DEBUGF(TCP_DEBUG, ("tcp_zero_window_probe: no memory for pbuf\n")); + return ERR_MEM; + } + tcphdr = (struct tcp_hdr *)p->payload; + 801f1b4: f8d0 8004 ldr.w r8, [r0, #4] + + if (is_fin) { + 801f1b8: b1f4 cbz r4, 801f1f8 + /* FIN segment, no data */ + TCPH_FLAGS_SET(tcphdr, TCP_ACK | TCP_FIN); + 801f1ba: f9b8 400c ldrsh.w r4, [r8, #12] + 801f1be: 2011 movs r0, #17 + 801f1c0: f7f9 fb8d bl 80188de + 801f1c4: f424 547c bic.w r4, r4, #16128 ; 0x3f00 + 801f1c8: 4320 orrs r0, r4 + 801f1ca: f8a8 000c strh.w r0, [r8, #12] + Ensure we copy the first TCP data byte: */ + pbuf_copy_partial(seg->p, d, 1, seg->p->tot_len - seg->len); + } + + /* The byte may be acknowledged without the window being opened. */ + snd_nxt = lwip_ntohl(seg->tcphdr->seqno) + 1; + 801f1ce: 68eb ldr r3, [r5, #12] + 801f1d0: 6858 ldr r0, [r3, #4] + 801f1d2: f7f9 fb87 bl 80188e4 + if (TCP_SEQ_LT(pcb->snd_nxt, snd_nxt)) { + 801f1d6: 6d33 ldr r3, [r6, #80] ; 0x50 + snd_nxt = lwip_ntohl(seg->tcphdr->seqno) + 1; + 801f1d8: 3001 adds r0, #1 + if (TCP_SEQ_LT(pcb->snd_nxt, snd_nxt)) { + 801f1da: 1a1b subs r3, r3, r0 + 801f1dc: 2b00 cmp r3, #0 + pcb->snd_nxt = snd_nxt; + 801f1de: bfb8 it lt + 801f1e0: 6530 strlt r0, [r6, #80] ; 0x50 + } + tcp_output_fill_options(pcb, p, 0, optlen); + 801f1e2: 4638 mov r0, r7 + 801f1e4: f7ff faac bl 801e740 + + err = tcp_output_control_segment(pcb, p, &pcb->local_ip, &pcb->remote_ip); + 801f1e8: 1d33 adds r3, r6, #4 + 801f1ea: 4632 mov r2, r6 + 801f1ec: 4639 mov r1, r7 + 801f1ee: 4630 mov r0, r6 + + LWIP_DEBUGF(TCP_DEBUG, ("tcp_zero_window_probe: seqno %"U32_F + " ackno %"U32_F" err %d.\n", + pcb->snd_nxt - 1, pcb->rcv_nxt, (int)err)); + return err; +} + 801f1f0: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} + err = tcp_output_control_segment(pcb, p, &pcb->local_ip, &pcb->remote_ip); + 801f1f4: f7ff bab4 b.w 801e760 + pbuf_copy_partial(seg->p, d, 1, seg->p->tot_len - seg->len); + 801f1f8: 6868 ldr r0, [r5, #4] + 801f1fa: f108 0114 add.w r1, r8, #20 + 801f1fe: 892a ldrh r2, [r5, #8] + 801f200: 8903 ldrh r3, [r0, #8] + 801f202: 1a9b subs r3, r3, r2 + 801f204: 2201 movs r2, #1 + 801f206: b29b uxth r3, r3 + 801f208: f7fc fed2 bl 801bfb0 + 801f20c: e7df b.n 801f1ce + return ERR_OK; + 801f20e: 4628 mov r0, r5 +} + 801f210: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + return ERR_MEM; + 801f214: f04f 30ff mov.w r0, #4294967295 + 801f218: e7fa b.n 801f210 + 801f21a: bf00 nop + 801f21c: 0803b95b .word 0x0803b95b + 801f220: 0803bdfc .word 0x0803bdfc + 801f224: 08035999 .word 0x08035999 + +0801f228 : + * + * @param arg unused argument + */ +static void +tcpip_thread(void *arg) +{ + 801f228: b583 push {r0, r1, r7, lr} + struct tcpip_msg *msg; + LWIP_UNUSED_ARG(arg); + + LWIP_MARK_TCPIP_THREAD(); + + LOCK_TCPIP_CORE(); + 801f22a: 482c ldr r0, [pc, #176] ; (801f2dc ) + 801f22c: f7fc ff77 bl 801c11e + if (tcpip_init_done != NULL) { + 801f230: 4b2b ldr r3, [pc, #172] ; (801f2e0 ) + 801f232: 681b ldr r3, [r3, #0] + 801f234: b113 cbz r3, 801f23c + tcpip_init_done(tcpip_init_done_arg); + 801f236: 4a2b ldr r2, [pc, #172] ; (801f2e4 ) + 801f238: 6810 ldr r0, [r2, #0] + 801f23a: 4798 blx r3 + UNLOCK_TCPIP_CORE(); + 801f23c: 4d27 ldr r5, [pc, #156] ; (801f2dc ) + res = sys_arch_mbox_fetch(mbox, msg, sleeptime); + 801f23e: 4f2a ldr r7, [pc, #168] ; (801f2e8 ) + msg->msg.cb.function(msg->msg.cb.ctx); + break; + + default: + LWIP_DEBUGF(TCPIP_DEBUG, ("tcpip_thread: invalid message: %d\n", msg->type)); + LWIP_ASSERT("tcpip_thread: invalid message", 0); + 801f240: 4e2a ldr r6, [pc, #168] ; (801f2ec ) + sleeptime = sys_timeouts_sleeptime(); + 801f242: f000 f9d3 bl 801f5ec + if (sleeptime == SYS_TIMEOUTS_SLEEPTIME_INFINITE) { + 801f246: 1c43 adds r3, r0, #1 + sleeptime = sys_timeouts_sleeptime(); + 801f248: 4604 mov r4, r0 + if (sleeptime == SYS_TIMEOUTS_SLEEPTIME_INFINITE) { + 801f24a: d113 bne.n 801f274 + UNLOCK_TCPIP_CORE(); + 801f24c: 4628 mov r0, r5 + 801f24e: f7fc ff6b bl 801c128 + sys_arch_mbox_fetch(mbox, msg, 0); + 801f252: 2200 movs r2, #0 + 801f254: a901 add r1, sp, #4 + 801f256: 4638 mov r0, r7 + 801f258: f7fc ff28 bl 801c0ac + LOCK_TCPIP_CORE(); + 801f25c: 4628 mov r0, r5 + 801f25e: f7fc ff5e bl 801c11e + if (msg == NULL) { + 801f262: 9c01 ldr r4, [sp, #4] + 801f264: b9cc cbnz r4, 801f29a + LWIP_ASSERT("tcpip_thread: invalid message", 0); + 801f266: 4633 mov r3, r6 + 801f268: 2291 movs r2, #145 ; 0x91 + LWIP_ASSERT("tcpip_thread: invalid message", 0); + 801f26a: 4921 ldr r1, [pc, #132] ; (801f2f0 ) + 801f26c: 4821 ldr r0, [pc, #132] ; (801f2f4 ) + 801f26e: f015 fa71 bl 8034754 + break; + 801f272: e7e6 b.n 801f242 + } else if (sleeptime == 0) { + 801f274: b910 cbnz r0, 801f27c + sys_check_timeouts(); + 801f276: f000 f997 bl 801f5a8 + goto again; + 801f27a: e7e2 b.n 801f242 + UNLOCK_TCPIP_CORE(); + 801f27c: 4628 mov r0, r5 + 801f27e: f7fc ff53 bl 801c128 + res = sys_arch_mbox_fetch(mbox, msg, sleeptime); + 801f282: 4622 mov r2, r4 + 801f284: a901 add r1, sp, #4 + 801f286: 4638 mov r0, r7 + 801f288: f7fc ff10 bl 801c0ac + 801f28c: 4604 mov r4, r0 + LOCK_TCPIP_CORE(); + 801f28e: 4628 mov r0, r5 + 801f290: f7fc ff45 bl 801c11e + if (res == SYS_ARCH_TIMEOUT) { + 801f294: 3401 adds r4, #1 + 801f296: d0ee beq.n 801f276 + 801f298: e7e3 b.n 801f262 + switch (msg->type) { + 801f29a: 7823 ldrb r3, [r4, #0] + 801f29c: 2b01 cmp r3, #1 + 801f29e: d00f beq.n 801f2c0 + 801f2a0: 2b02 cmp r3, #2 + 801f2a2: d013 beq.n 801f2cc + 801f2a4: b9b3 cbnz r3, 801f2d4 + if (msg->msg.inp.input_fn(msg->msg.inp.p, msg->msg.inp.netif) != ERR_OK) { + 801f2a6: 6860 ldr r0, [r4, #4] + 801f2a8: e9d4 1302 ldrd r1, r3, [r4, #8] + 801f2ac: 4798 blx r3 + 801f2ae: b110 cbz r0, 801f2b6 + pbuf_free(msg->msg.inp.p); + 801f2b0: 6860 ldr r0, [r4, #4] + 801f2b2: f7fc fc41 bl 801bb38 + memp_free(MEMP_TCPIP_MSG_INPKT, msg); + 801f2b6: 4621 mov r1, r4 + 801f2b8: 2009 movs r0, #9 + memp_free(MEMP_TCPIP_MSG_API, msg); + 801f2ba: f7fc f9c1 bl 801b640 + break; + 801f2be: e7c0 b.n 801f242 + msg->msg.cb.function(msg->msg.cb.ctx); + 801f2c0: e9d4 3001 ldrd r3, r0, [r4, #4] + 801f2c4: 4798 blx r3 + memp_free(MEMP_TCPIP_MSG_API, msg); + 801f2c6: 4621 mov r1, r4 + 801f2c8: 2008 movs r0, #8 + 801f2ca: e7f6 b.n 801f2ba + msg->msg.cb.function(msg->msg.cb.ctx); + 801f2cc: e9d4 3001 ldrd r3, r0, [r4, #4] + 801f2d0: 4798 blx r3 + break; + 801f2d2: e7b6 b.n 801f242 + LWIP_ASSERT("tcpip_thread: invalid message", 0); + 801f2d4: 4633 mov r3, r6 + 801f2d6: 22cf movs r2, #207 ; 0xcf + 801f2d8: e7c7 b.n 801f26a + 801f2da: bf00 nop + 801f2dc: 2001e708 .word 0x2001e708 + 801f2e0: 2001e70c .word 0x2001e70c + 801f2e4: 2001e710 .word 0x2001e710 + 801f2e8: 2001e714 .word 0x2001e714 + 801f2ec: 0803be1f .word 0x0803be1f + 801f2f0: 0803bea0 .word 0x0803bea0 + 801f2f4: 08035999 .word 0x08035999 + +0801f2f8 : + * @param inp the network interface on which the packet was received + * @param input_fn input function to call + */ +err_t +tcpip_inpkt(struct pbuf *p, struct netif *inp, netif_input_fn input_fn) +{ + 801f2f8: b5f8 push {r3, r4, r5, r6, r7, lr} + 801f2fa: 4607 mov r7, r0 + UNLOCK_TCPIP_CORE(); + return ret; +#else /* LWIP_TCPIP_CORE_LOCKING_INPUT */ + struct tcpip_msg *msg; + + LWIP_ASSERT("Invalid mbox", sys_mbox_valid_val(tcpip_mbox)); + 801f2fc: 4810 ldr r0, [pc, #64] ; (801f340 ) +{ + 801f2fe: 460e mov r6, r1 + 801f300: 4615 mov r5, r2 + LWIP_ASSERT("Invalid mbox", sys_mbox_valid_val(tcpip_mbox)); + 801f302: f7fc fef1 bl 801c0e8 + 801f306: b928 cbnz r0, 801f314 + 801f308: 4b0e ldr r3, [pc, #56] ; (801f344 ) + 801f30a: 22fc movs r2, #252 ; 0xfc + 801f30c: 490e ldr r1, [pc, #56] ; (801f348 ) + 801f30e: 480f ldr r0, [pc, #60] ; (801f34c ) + 801f310: f015 fa20 bl 8034754 + + msg = (struct tcpip_msg *)memp_malloc(MEMP_TCPIP_MSG_INPKT); + 801f314: 2009 movs r0, #9 + 801f316: f7fc f963 bl 801b5e0 + if (msg == NULL) { + 801f31a: 4604 mov r4, r0 + 801f31c: b168 cbz r0, 801f33a + return ERR_MEM; + } + + msg->type = TCPIP_MSG_INPKT; + 801f31e: 2300 movs r3, #0 + msg->msg.inp.p = p; + msg->msg.inp.netif = inp; + msg->msg.inp.input_fn = input_fn; + if (sys_mbox_trypost(&tcpip_mbox, msg) != ERR_OK) { + 801f320: 4601 mov r1, r0 + msg->msg.inp.input_fn = input_fn; + 801f322: 60c5 str r5, [r0, #12] + msg->type = TCPIP_MSG_INPKT; + 801f324: 7003 strb r3, [r0, #0] + msg->msg.inp.netif = inp; + 801f326: e9c0 7601 strd r7, r6, [r0, #4] + if (sys_mbox_trypost(&tcpip_mbox, msg) != ERR_OK) { + 801f32a: 4805 ldr r0, [pc, #20] ; (801f340 ) + 801f32c: f7fc feaf bl 801c08e + 801f330: b128 cbz r0, 801f33e + memp_free(MEMP_TCPIP_MSG_INPKT, msg); + 801f332: 4621 mov r1, r4 + 801f334: 2009 movs r0, #9 + 801f336: f7fc f983 bl 801b640 + return ERR_MEM; + 801f33a: f04f 30ff mov.w r0, #4294967295 + return ERR_MEM; + } + return ERR_OK; +#endif /* LWIP_TCPIP_CORE_LOCKING_INPUT */ +} + 801f33e: bdf8 pop {r3, r4, r5, r6, r7, pc} + 801f340: 2001e714 .word 0x2001e714 + 801f344: 0803be1f .word 0x0803be1f + 801f348: 0803bebe .word 0x0803bebe + 801f34c: 08035999 .word 0x08035999 + +0801f350 : + */ +err_t +tcpip_input(struct pbuf *p, struct netif *inp) +{ +#if LWIP_ETHERNET + if (inp->flags & (NETIF_FLAG_ETHARP | NETIF_FLAG_ETHERNET)) { + 801f350: f891 3031 ldrb.w r3, [r1, #49] ; 0x31 + 801f354: f013 0f18 tst.w r3, #24 + return tcpip_inpkt(p, inp, ethernet_input); + 801f358: bf14 ite ne + 801f35a: 4a02 ldrne r2, [pc, #8] ; (801f364 ) + } else +#endif /* LWIP_ETHERNET */ + return tcpip_inpkt(p, inp, ip_input); + 801f35c: 4a02 ldreq r2, [pc, #8] ; (801f368 ) + 801f35e: f7ff bfcb b.w 801f2f8 + 801f362: bf00 nop + 801f364: 0801a1e9 .word 0x0801a1e9 + 801f368: 0801a579 .word 0x0801a579 + +0801f36c : + * + * @see tcpip_callback + */ +err_t +tcpip_try_callback(tcpip_callback_fn function, void *ctx) +{ + 801f36c: b570 push {r4, r5, r6, lr} + 801f36e: 4606 mov r6, r0 + struct tcpip_msg *msg; + + LWIP_ASSERT("Invalid mbox", sys_mbox_valid_val(tcpip_mbox)); + 801f370: 4810 ldr r0, [pc, #64] ; (801f3b4 ) +{ + 801f372: 460d mov r5, r1 + LWIP_ASSERT("Invalid mbox", sys_mbox_valid_val(tcpip_mbox)); + 801f374: f7fc feb8 bl 801c0e8 + 801f378: b930 cbnz r0, 801f388 + 801f37a: 4b0f ldr r3, [pc, #60] ; (801f3b8 ) + 801f37c: f240 125d movw r2, #349 ; 0x15d + 801f380: 490e ldr r1, [pc, #56] ; (801f3bc ) + 801f382: 480f ldr r0, [pc, #60] ; (801f3c0 ) + 801f384: f015 f9e6 bl 8034754 + + msg = (struct tcpip_msg *)memp_malloc(MEMP_TCPIP_MSG_API); + 801f388: 2008 movs r0, #8 + 801f38a: f7fc f929 bl 801b5e0 + if (msg == NULL) { + 801f38e: 4604 mov r4, r0 + 801f390: b160 cbz r0, 801f3ac + return ERR_MEM; + } + + msg->type = TCPIP_MSG_CALLBACK; + 801f392: 2301 movs r3, #1 + msg->msg.cb.function = function; + msg->msg.cb.ctx = ctx; + + if (sys_mbox_trypost(&tcpip_mbox, msg) != ERR_OK) { + 801f394: 4601 mov r1, r0 + msg->type = TCPIP_MSG_CALLBACK; + 801f396: 7003 strb r3, [r0, #0] + msg->msg.cb.ctx = ctx; + 801f398: e9c0 6501 strd r6, r5, [r0, #4] + if (sys_mbox_trypost(&tcpip_mbox, msg) != ERR_OK) { + 801f39c: 4805 ldr r0, [pc, #20] ; (801f3b4 ) + 801f39e: f7fc fe76 bl 801c08e + 801f3a2: b128 cbz r0, 801f3b0 + memp_free(MEMP_TCPIP_MSG_API, msg); + 801f3a4: 4621 mov r1, r4 + 801f3a6: 2008 movs r0, #8 + 801f3a8: f7fc f94a bl 801b640 + return ERR_MEM; + 801f3ac: f04f 30ff mov.w r0, #4294967295 + return ERR_MEM; + } + return ERR_OK; +} + 801f3b0: bd70 pop {r4, r5, r6, pc} + 801f3b2: bf00 nop + 801f3b4: 2001e714 .word 0x2001e714 + 801f3b8: 0803be1f .word 0x0803be1f + 801f3bc: 0803bebe .word 0x0803bebe + 801f3c0: 08035999 .word 0x08035999 + +0801f3c4 : + * @param initfunc a function to call when tcpip_thread is running and finished initializing + * @param arg argument to pass to initfunc + */ +void +tcpip_init(tcpip_init_done_fn initfunc, void *arg) +{ + 801f3c4: b537 push {r0, r1, r2, r4, r5, lr} + 801f3c6: 4605 mov r5, r0 + 801f3c8: 460c mov r4, r1 + lwip_init(); + 801f3ca: f7fb f87b bl 801a4c4 + + tcpip_init_done = initfunc; + 801f3ce: 4b13 ldr r3, [pc, #76] ; (801f41c ) + tcpip_init_done_arg = arg; + if (sys_mbox_new(&tcpip_mbox, TCPIP_MBOX_SIZE) != ERR_OK) { + 801f3d0: 2106 movs r1, #6 + 801f3d2: 4813 ldr r0, [pc, #76] ; (801f420 ) + tcpip_init_done = initfunc; + 801f3d4: 601d str r5, [r3, #0] + tcpip_init_done_arg = arg; + 801f3d6: 4b13 ldr r3, [pc, #76] ; (801f424 ) + 801f3d8: 601c str r4, [r3, #0] + if (sys_mbox_new(&tcpip_mbox, TCPIP_MBOX_SIZE) != ERR_OK) { + 801f3da: f7fc fe4b bl 801c074 + 801f3de: b130 cbz r0, 801f3ee + LWIP_ASSERT("failed to create tcpip_thread mbox", 0); + 801f3e0: 4b11 ldr r3, [pc, #68] ; (801f428 ) + 801f3e2: f240 2261 movw r2, #609 ; 0x261 + 801f3e6: 4911 ldr r1, [pc, #68] ; (801f42c ) + 801f3e8: 4811 ldr r0, [pc, #68] ; (801f430 ) + 801f3ea: f015 f9b3 bl 8034754 + } +#if LWIP_TCPIP_CORE_LOCKING + if (sys_mutex_new(&lock_tcpip_core) != ERR_OK) { + 801f3ee: 4811 ldr r0, [pc, #68] ; (801f434 ) + 801f3f0: f7fc fe8a bl 801c108 + 801f3f4: b130 cbz r0, 801f404 + LWIP_ASSERT("failed to create lock_tcpip_core", 0); + 801f3f6: 4b0c ldr r3, [pc, #48] ; (801f428 ) + 801f3f8: f240 2265 movw r2, #613 ; 0x265 + 801f3fc: 490e ldr r1, [pc, #56] ; (801f438 ) + 801f3fe: 480c ldr r0, [pc, #48] ; (801f430 ) + 801f400: f015 f9a8 bl 8034754 + } +#endif /* LWIP_TCPIP_CORE_LOCKING */ + + sys_thread_new(TCPIP_THREAD_NAME, tcpip_thread, NULL, TCPIP_THREAD_STACKSIZE, TCPIP_THREAD_PRIO); + 801f404: 2318 movs r3, #24 + 801f406: 2200 movs r2, #0 + 801f408: 490c ldr r1, [pc, #48] ; (801f43c ) + 801f40a: 9300 str r3, [sp, #0] + 801f40c: f44f 6380 mov.w r3, #1024 ; 0x400 + 801f410: 480b ldr r0, [pc, #44] ; (801f440 ) + 801f412: f7fc fe8c bl 801c12e +} + 801f416: b003 add sp, #12 + 801f418: bd30 pop {r4, r5, pc} + 801f41a: bf00 nop + 801f41c: 2001e70c .word 0x2001e70c + 801f420: 2001e714 .word 0x2001e714 + 801f424: 2001e710 .word 0x2001e710 + 801f428: 0803be1f .word 0x0803be1f + 801f42c: 0803becb .word 0x0803becb + 801f430: 08035999 .word 0x08035999 + 801f434: 2001e708 .word 0x2001e708 + 801f438: 0803beee .word 0x0803beee + 801f43c: 0801f229 .word 0x0801f229 + 801f440: 0803bf0f .word 0x0803bf0f + +0801f444 : +#if LWIP_DEBUG_TIMERNAMES +sys_timeout_abs(u32_t abs_time, sys_timeout_handler handler, void *arg, const char *handler_name) +#else /* LWIP_DEBUG_TIMERNAMES */ +sys_timeout_abs(u32_t abs_time, sys_timeout_handler handler, void *arg) +#endif +{ + 801f444: b570 push {r4, r5, r6, lr} + 801f446: 4604 mov r4, r0 + struct sys_timeo *timeout, *t; + + timeout = (struct sys_timeo *)memp_malloc(MEMP_SYS_TIMEOUT); + 801f448: 200a movs r0, #10 +{ + 801f44a: 460e mov r6, r1 + 801f44c: 4615 mov r5, r2 + timeout = (struct sys_timeo *)memp_malloc(MEMP_SYS_TIMEOUT); + 801f44e: f7fc f8c7 bl 801b5e0 + if (timeout == NULL) { + 801f452: b938 cbnz r0, 801f464 + LWIP_ASSERT("sys_timeout: timeout != NULL, pool MEMP_SYS_TIMEOUT is empty", timeout != NULL); + 801f454: 4b10 ldr r3, [pc, #64] ; (801f498 ) + 801f456: 22be movs r2, #190 ; 0xbe + 801f458: 4910 ldr r1, [pc, #64] ; (801f49c ) + 801f45a: 4811 ldr r0, [pc, #68] ; (801f4a0 ) + t->next = timeout; + break; + } + } + } +} + 801f45c: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} + LWIP_ASSERT("sys_timeout: timeout != NULL, pool MEMP_SYS_TIMEOUT is empty", timeout != NULL); + 801f460: f015 b978 b.w 8034754 + timeout->next = NULL; + 801f464: 2300 movs r3, #0 + if (next_timeout == NULL) { + 801f466: 4a0f ldr r2, [pc, #60] ; (801f4a4 ) + timeout->time = abs_time; + 801f468: 6044 str r4, [r0, #4] + timeout->next = NULL; + 801f46a: 6003 str r3, [r0, #0] + if (next_timeout == NULL) { + 801f46c: 6813 ldr r3, [r2, #0] + timeout->arg = arg; + 801f46e: e9c0 6502 strd r6, r5, [r0, #8] + if (next_timeout == NULL) { + 801f472: b90b cbnz r3, 801f478 + next_timeout = timeout; + 801f474: 6010 str r0, [r2, #0] +} + 801f476: bd70 pop {r4, r5, r6, pc} + if (TIME_LESS_THAN(timeout->time, next_timeout->time)) { + 801f478: 6859 ldr r1, [r3, #4] + 801f47a: 1a61 subs r1, r4, r1 + 801f47c: 2900 cmp r1, #0 + 801f47e: da01 bge.n 801f484 + timeout->next = next_timeout; + 801f480: 6003 str r3, [r0, #0] + 801f482: e7f7 b.n 801f474 + if ((t->next == NULL) || TIME_LESS_THAN(timeout->time, t->next->time)) { + 801f484: 4619 mov r1, r3 + 801f486: 681b ldr r3, [r3, #0] + 801f488: b11b cbz r3, 801f492 + 801f48a: 685a ldr r2, [r3, #4] + 801f48c: 1aa2 subs r2, r4, r2 + 801f48e: 2a00 cmp r2, #0 + 801f490: daf8 bge.n 801f484 + timeout->next = t->next; + 801f492: 6003 str r3, [r0, #0] + t->next = timeout; + 801f494: 6008 str r0, [r1, #0] + break; + 801f496: e7ee b.n 801f476 + 801f498: 0803bf1c .word 0x0803bf1c + 801f49c: 0803bfa1 .word 0x0803bfa1 + 801f4a0: 08035999 .word 0x08035999 + 801f4a4: 2001e71c .word 0x2001e71c + +0801f4a8 : +#if !LWIP_TESTMODE +static +#endif +void +lwip_cyclic_timer(void *arg) +{ + 801f4a8: b538 push {r3, r4, r5, lr} + const struct lwip_cyclic_timer *cyclic = (const struct lwip_cyclic_timer *)arg; + +#if LWIP_DEBUG_TIMERNAMES + LWIP_DEBUGF(TIMERS_DEBUG, ("tcpip: %s()\n", cyclic->handler_name)); +#endif + cyclic->handler(); + 801f4aa: 6843 ldr r3, [r0, #4] +{ + 801f4ac: 4604 mov r4, r0 + cyclic->handler(); + 801f4ae: 4798 blx r3 + + now = sys_now(); + 801f4b0: f7e2 fee6 bl 8002280 + next_timeout_time = (u32_t)(current_timeout_due_time + cyclic->interval_ms); /* overflow handled by TIME_LESS_THAN macro */ + 801f4b4: 4b07 ldr r3, [pc, #28] ; (801f4d4 ) + 801f4b6: 6825 ldr r5, [r4, #0] + 801f4b8: 681b ldr r3, [r3, #0] + if (TIME_LESS_THAN(next_timeout_time, now)) { + /* timer would immediately expire again -> "overload" -> restart without any correction */ +#if LWIP_DEBUG_TIMERNAMES + sys_timeout_abs((u32_t)(now + cyclic->interval_ms), lwip_cyclic_timer, arg, cyclic->handler_name); +#else + sys_timeout_abs((u32_t)(now + cyclic->interval_ms), lwip_cyclic_timer, arg); + 801f4ba: 4907 ldr r1, [pc, #28] ; (801f4d8 ) + next_timeout_time = (u32_t)(current_timeout_due_time + cyclic->interval_ms); /* overflow handled by TIME_LESS_THAN macro */ + 801f4bc: 442b add r3, r5 + if (TIME_LESS_THAN(next_timeout_time, now)) { + 801f4be: 1a1a subs r2, r3, r0 + 801f4c0: 2a00 cmp r2, #0 + sys_timeout_abs((u32_t)(now + cyclic->interval_ms), lwip_cyclic_timer, arg); + 801f4c2: 4622 mov r2, r4 + 801f4c4: bfb4 ite lt + 801f4c6: 1940 addlt r0, r0, r5 + } else { + /* correct cyclic interval with handler execution delay and sys_check_timeouts jitter */ +#if LWIP_DEBUG_TIMERNAMES + sys_timeout_abs(next_timeout_time, lwip_cyclic_timer, arg, cyclic->handler_name); +#else + sys_timeout_abs(next_timeout_time, lwip_cyclic_timer, arg); + 801f4c8: 4618 movge r0, r3 +#endif + } +} + 801f4ca: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} + sys_timeout_abs(next_timeout_time, lwip_cyclic_timer, arg); + 801f4ce: f7ff bfb9 b.w 801f444 + 801f4d2: bf00 nop + 801f4d4: 2001e718 .word 0x2001e718 + 801f4d8: 0801f4a9 .word 0x0801f4a9 + +0801f4dc : +{ + u32_t next_timeout_time; + + LWIP_ASSERT_CORE_LOCKED(); + + LWIP_ASSERT("Timeout time too long, max is LWIP_UINT32_MAX/4 msecs", msecs <= (LWIP_UINT32_MAX / 4)); + 801f4dc: f1b0 4f80 cmp.w r0, #1073741824 ; 0x40000000 +{ + 801f4e0: b570 push {r4, r5, r6, lr} + 801f4e2: 4604 mov r4, r0 + 801f4e4: 460d mov r5, r1 + 801f4e6: 4616 mov r6, r2 + LWIP_ASSERT("Timeout time too long, max is LWIP_UINT32_MAX/4 msecs", msecs <= (LWIP_UINT32_MAX / 4)); + 801f4e8: d306 bcc.n 801f4f8 + 801f4ea: 4b08 ldr r3, [pc, #32] ; (801f50c ) + 801f4ec: f240 1229 movw r2, #297 ; 0x129 + 801f4f0: 4907 ldr r1, [pc, #28] ; (801f510 ) + 801f4f2: 4808 ldr r0, [pc, #32] ; (801f514 ) + 801f4f4: f015 f92e bl 8034754 + + next_timeout_time = (u32_t)(sys_now() + msecs); /* overflow handled by TIME_LESS_THAN macro */ + 801f4f8: f7e2 fec2 bl 8002280 + +#if LWIP_DEBUG_TIMERNAMES + sys_timeout_abs(next_timeout_time, handler, arg, handler_name); +#else + sys_timeout_abs(next_timeout_time, handler, arg); + 801f4fc: 4632 mov r2, r6 + 801f4fe: 4629 mov r1, r5 + 801f500: 4420 add r0, r4 +#endif +} + 801f502: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} + sys_timeout_abs(next_timeout_time, handler, arg); + 801f506: f7ff bf9d b.w 801f444 + 801f50a: bf00 nop + 801f50c: 0803bf1c .word 0x0803bf1c + 801f510: 0803bfde .word 0x0803bfde + 801f514: 08035999 .word 0x08035999 + +0801f518 : + if (!tcpip_tcp_timer_active && (tcp_active_pcbs || tcp_tw_pcbs)) { + 801f518: 4b08 ldr r3, [pc, #32] ; (801f53c ) + 801f51a: 681a ldr r2, [r3, #0] + 801f51c: b962 cbnz r2, 801f538 + 801f51e: 4a08 ldr r2, [pc, #32] ; (801f540 ) + 801f520: 6812 ldr r2, [r2, #0] + 801f522: b912 cbnz r2, 801f52a + 801f524: 4a07 ldr r2, [pc, #28] ; (801f544 ) + 801f526: 6812 ldr r2, [r2, #0] + 801f528: b132 cbz r2, 801f538 + tcpip_tcp_timer_active = 1; + 801f52a: 2201 movs r2, #1 + sys_timeout(TCP_TMR_INTERVAL, tcpip_tcp_timer, NULL); + 801f52c: 4906 ldr r1, [pc, #24] ; (801f548 ) + 801f52e: 20fa movs r0, #250 ; 0xfa + tcpip_tcp_timer_active = 1; + 801f530: 601a str r2, [r3, #0] + sys_timeout(TCP_TMR_INTERVAL, tcpip_tcp_timer, NULL); + 801f532: 2200 movs r2, #0 + 801f534: f7ff bfd2 b.w 801f4dc +} + 801f538: 4770 bx lr + 801f53a: bf00 nop + 801f53c: 2001e720 .word 0x2001e720 + 801f540: 2001e6ac .word 0x2001e6ac + 801f544: 2001e6c4 .word 0x2001e6c4 + 801f548: 0801f54d .word 0x0801f54d + +0801f54c : +{ + 801f54c: b508 push {r3, lr} + tcp_tmr(); + 801f54e: f7fd fd05 bl 801cf5c + if (tcp_active_pcbs || tcp_tw_pcbs) { + 801f552: 4b08 ldr r3, [pc, #32] ; (801f574 ) + 801f554: 681b ldr r3, [r3, #0] + 801f556: b913 cbnz r3, 801f55e + 801f558: 4b07 ldr r3, [pc, #28] ; (801f578 ) + 801f55a: 681b ldr r3, [r3, #0] + 801f55c: b133 cbz r3, 801f56c + sys_timeout(TCP_TMR_INTERVAL, tcpip_tcp_timer, NULL); + 801f55e: 2200 movs r2, #0 + 801f560: 4906 ldr r1, [pc, #24] ; (801f57c ) + 801f562: 20fa movs r0, #250 ; 0xfa +} + 801f564: e8bd 4008 ldmia.w sp!, {r3, lr} + sys_timeout(TCP_TMR_INTERVAL, tcpip_tcp_timer, NULL); + 801f568: f7ff bfb8 b.w 801f4dc + tcpip_tcp_timer_active = 0; + 801f56c: 4a04 ldr r2, [pc, #16] ; (801f580 ) + 801f56e: 6013 str r3, [r2, #0] +} + 801f570: bd08 pop {r3, pc} + 801f572: bf00 nop + 801f574: 2001e6ac .word 0x2001e6ac + 801f578: 2001e6c4 .word 0x2001e6c4 + 801f57c: 0801f54d .word 0x0801f54d + 801f580: 2001e720 .word 0x2001e720 + +0801f584 : +{ + 801f584: b570 push {r4, r5, r6, lr} + 801f586: 4d06 ldr r5, [pc, #24] ; (801f5a0 ) + for (i = (LWIP_TCP ? 1 : 0); i < LWIP_ARRAYSIZE(lwip_cyclic_timers); i++) { + 801f588: 2401 movs r4, #1 + sys_timeout(lwip_cyclic_timers[i].interval_ms, lwip_cyclic_timer, LWIP_CONST_CAST(void *, &lwip_cyclic_timers[i])); + 801f58a: 4e06 ldr r6, [pc, #24] ; (801f5a4 ) + 801f58c: f855 0f08 ldr.w r0, [r5, #8]! + for (i = (LWIP_TCP ? 1 : 0); i < LWIP_ARRAYSIZE(lwip_cyclic_timers); i++) { + 801f590: 3401 adds r4, #1 + sys_timeout(lwip_cyclic_timers[i].interval_ms, lwip_cyclic_timer, LWIP_CONST_CAST(void *, &lwip_cyclic_timers[i])); + 801f592: 4631 mov r1, r6 + 801f594: 462a mov r2, r5 + 801f596: f7ff ffa1 bl 801f4dc + for (i = (LWIP_TCP ? 1 : 0); i < LWIP_ARRAYSIZE(lwip_cyclic_timers); i++) { + 801f59a: 2c05 cmp r4, #5 + 801f59c: d1f6 bne.n 801f58c +} + 801f59e: bd70 pop {r4, r5, r6, pc} + 801f5a0: 0803c014 .word 0x0803c014 + 801f5a4: 0801f4a9 .word 0x0801f4a9 + +0801f5a8 : + * + * Must be called periodically from your main loop. + */ +void +sys_check_timeouts(void) +{ + 801f5a8: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} + u32_t now; + + LWIP_ASSERT_CORE_LOCKED(); + + /* Process only timers expired at the start of the function. */ + now = sys_now(); + 801f5ac: f7e2 fe68 bl 8002280 + sys_timeout_handler handler; + void *arg; + + PBUF_CHECK_FREE_OOSEQ(); + + tmptimeout = next_timeout; + 801f5b0: 4e0c ldr r6, [pc, #48] ; (801f5e4 ) + now = sys_now(); + 801f5b2: 4604 mov r4, r0 + + /* Timeout has expired */ + next_timeout = tmptimeout->next; + handler = tmptimeout->h; + arg = tmptimeout->arg; + current_timeout_due_time = tmptimeout->time; + 801f5b4: f8df 8030 ldr.w r8, [pc, #48] ; 801f5e8 + tmptimeout = next_timeout; + 801f5b8: 6831 ldr r1, [r6, #0] + if (tmptimeout == NULL) { + 801f5ba: b189 cbz r1, 801f5e0 + if (TIME_LESS_THAN(now, tmptimeout->time)) { + 801f5bc: 684b ldr r3, [r1, #4] + 801f5be: 1ae2 subs r2, r4, r3 + 801f5c0: 2a00 cmp r2, #0 + 801f5c2: db0d blt.n 801f5e0 + next_timeout = tmptimeout->next; + 801f5c4: 680a ldr r2, [r1, #0] + if (handler != NULL) { + LWIP_DEBUGF(TIMERS_DEBUG, ("sct calling h=%s t=%"U32_F" arg=%p\n", + tmptimeout->handler_name, sys_now() - tmptimeout->time, arg)); + } +#endif /* LWIP_DEBUG_TIMERNAMES */ + memp_free(MEMP_SYS_TIMEOUT, tmptimeout); + 801f5c6: 200a movs r0, #10 + current_timeout_due_time = tmptimeout->time; + 801f5c8: f8c8 3000 str.w r3, [r8] + next_timeout = tmptimeout->next; + 801f5cc: 6032 str r2, [r6, #0] + arg = tmptimeout->arg; + 801f5ce: e9d1 5702 ldrd r5, r7, [r1, #8] + memp_free(MEMP_SYS_TIMEOUT, tmptimeout); + 801f5d2: f7fc f835 bl 801b640 + if (handler != NULL) { + 801f5d6: 2d00 cmp r5, #0 + 801f5d8: d0ee beq.n 801f5b8 + handler(arg); + 801f5da: 4638 mov r0, r7 + 801f5dc: 47a8 blx r5 + 801f5de: e7eb b.n 801f5b8 + } + LWIP_TCPIP_THREAD_ALIVE(); + + /* Repeat until all expired timers have been called */ + } while (1); +} + 801f5e0: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + 801f5e4: 2001e71c .word 0x2001e71c + 801f5e8: 2001e718 .word 0x2001e718 + +0801f5ec : +/** Return the time left before the next timeout is due. If no timeouts are + * enqueued, returns 0xffffffff + */ +u32_t +sys_timeouts_sleeptime(void) +{ + 801f5ec: b510 push {r4, lr} + u32_t now; + + LWIP_ASSERT_CORE_LOCKED(); + + if (next_timeout == NULL) { + 801f5ee: 4c07 ldr r4, [pc, #28] ; (801f60c ) + 801f5f0: 6823 ldr r3, [r4, #0] + 801f5f2: b13b cbz r3, 801f604 + return SYS_TIMEOUTS_SLEEPTIME_INFINITE; + } + now = sys_now(); + 801f5f4: f7e2 fe44 bl 8002280 + if (TIME_LESS_THAN(next_timeout->time, now)) { + 801f5f8: 6823 ldr r3, [r4, #0] + 801f5fa: 685b ldr r3, [r3, #4] + return 0; + 801f5fc: 1a18 subs r0, r3, r0 + 801f5fe: bf48 it mi + 801f600: 2000 movmi r0, #0 + } else { + u32_t ret = (u32_t)(next_timeout->time - now); + LWIP_ASSERT("invalid sleeptime", ret <= LWIP_MAX_TIMEOUT); + return ret; + } +} + 801f602: bd10 pop {r4, pc} + return SYS_TIMEOUTS_SLEEPTIME_INFINITE; + 801f604: f04f 30ff mov.w r0, #4294967295 + 801f608: e7fb b.n 801f602 + 801f60a: bf00 nop + 801f60c: 2001e71c .word 0x2001e71c + +0801f610 : +/** + * Initialize this module. + */ +void +udp_init(void) +{ + 801f610: b508 push {r3, lr} +#ifdef LWIP_RAND + udp_port = UDP_ENSURE_LOCAL_PORT_RANGE(LWIP_RAND()); + 801f612: f014 ff7f bl 8034514 + 801f616: ea6f 4080 mvn.w r0, r0, lsl #18 + 801f61a: 4b02 ldr r3, [pc, #8] ; (801f624 ) + 801f61c: ea6f 4090 mvn.w r0, r0, lsr #18 + 801f620: 8018 strh r0, [r3, #0] +#endif /* LWIP_RAND */ +} + 801f622: bd08 pop {r3, pc} + 801f624: 2000005e .word 0x2000005e + +0801f628 : + * @param inp network interface on which the datagram was received. + * + */ +void +udp_input(struct pbuf *p, struct netif *inp) +{ + 801f628: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 801f62c: 4688 mov r8, r1 + 801f62e: b085 sub sp, #20 + + LWIP_UNUSED_ARG(inp); + + LWIP_ASSERT_CORE_LOCKED(); + + LWIP_ASSERT("udp_input: invalid pbuf", p != NULL); + 801f630: 4606 mov r6, r0 + 801f632: b928 cbnz r0, 801f640 + 801f634: 4b5f ldr r3, [pc, #380] ; (801f7b4 ) + 801f636: 22cf movs r2, #207 ; 0xcf + 801f638: 495f ldr r1, [pc, #380] ; (801f7b8 ) + 801f63a: 4860 ldr r0, [pc, #384] ; (801f7bc ) + 801f63c: f015 f88a bl 8034754 + LWIP_ASSERT("udp_input: invalid netif", inp != NULL); + 801f640: f1b8 0f00 cmp.w r8, #0 + 801f644: d105 bne.n 801f652 + 801f646: 4b5b ldr r3, [pc, #364] ; (801f7b4 ) + 801f648: 22d0 movs r2, #208 ; 0xd0 + 801f64a: 495d ldr r1, [pc, #372] ; (801f7c0 ) + 801f64c: 485b ldr r0, [pc, #364] ; (801f7bc ) + 801f64e: f015 f881 bl 8034754 + PERF_START; + + UDP_STATS_INC(udp.recv); + + /* Check minimum length (UDP header) */ + if (p->len < UDP_HLEN) { + 801f652: 8973 ldrh r3, [r6, #10] + 801f654: 2b07 cmp r3, #7 + 801f656: d805 bhi.n 801f664 + if (pbuf_remove_header(p, UDP_HLEN)) { + /* Can we cope with this failing? Just assert for now */ + LWIP_ASSERT("pbuf_remove_header failed\n", 0); + UDP_STATS_INC(udp.drop); + MIB2_STATS_INC(mib2.udpinerrors); + pbuf_free(p); + 801f658: 4630 mov r0, r6 + UDP_STATS_INC(udp.drop); + MIB2_STATS_INC(mib2.udpinerrors); + pbuf_free(p); + PERF_STOP("udp_input"); +#endif /* CHECKSUM_CHECK_UDP */ +} + 801f65a: b005 add sp, #20 + 801f65c: e8bd 4ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + pbuf_free(p); + 801f660: f7fc ba6a b.w 801bb38 + broadcast = ip_addr_isbroadcast(ip_current_dest_addr(), ip_current_netif()); + 801f664: 4f57 ldr r7, [pc, #348] ; (801f7c4 ) + uncon_pcb = NULL; + 801f666: 2500 movs r5, #0 + udphdr = (struct udp_hdr *)p->payload; + 801f668: 6874 ldr r4, [r6, #4] + broadcast = ip_addr_isbroadcast(ip_current_dest_addr(), ip_current_netif()); + 801f66a: 6839 ldr r1, [r7, #0] + prev = NULL; + 801f66c: 46aa mov sl, r5 + broadcast = ip_addr_isbroadcast(ip_current_dest_addr(), ip_current_netif()); + 801f66e: 6978 ldr r0, [r7, #20] + 801f670: f7fb f8d3 bl 801a81a + for (pcb = udp_pcbs; pcb != NULL; pcb = pcb->next) { + 801f674: f8df b15c ldr.w fp, [pc, #348] ; 801f7d4 + broadcast = ip_addr_isbroadcast(ip_current_dest_addr(), ip_current_netif()); + 801f678: 4681 mov r9, r0 + src = lwip_ntohs(udphdr->src); + 801f67a: 8820 ldrh r0, [r4, #0] + 801f67c: f7f9 f92f bl 80188de + 801f680: 9002 str r0, [sp, #8] + dest = lwip_ntohs(udphdr->dest); + 801f682: 8860 ldrh r0, [r4, #2] + 801f684: f7f9 f92b bl 80188de + for (pcb = udp_pcbs; pcb != NULL; pcb = pcb->next) { + 801f688: f8db 4000 ldr.w r4, [fp] + LWIP_ASSERT("udp_input_local_match: invalid netif", inp != NULL); + 801f68c: f8df c124 ldr.w ip, [pc, #292] ; 801f7b4 + 801f690: 494d ldr r1, [pc, #308] ; (801f7c8 ) + dest = lwip_ntohs(udphdr->dest); + 801f692: 9003 str r0, [sp, #12] + for (pcb = udp_pcbs; pcb != NULL; pcb = pcb->next) { + 801f694: b99c cbnz r4, 801f6be + if (pcb != NULL) { + 801f696: b925 cbnz r5, 801f6a2 + if (for_us) { + 801f698: f8d8 2004 ldr.w r2, [r8, #4] + 801f69c: 697b ldr r3, [r7, #20] + 801f69e: 429a cmp r2, r3 + 801f6a0: d1da bne.n 801f658 + if (pbuf_remove_header(p, UDP_HLEN)) { + 801f6a2: 2108 movs r1, #8 + 801f6a4: 4630 mov r0, r6 + 801f6a6: f7fc fa13 bl 801bad0 + 801f6aa: 2800 cmp r0, #0 + 801f6ac: d05e beq.n 801f76c + LWIP_ASSERT("pbuf_remove_header failed\n", 0); + 801f6ae: 4b41 ldr r3, [pc, #260] ; (801f7b4 ) + 801f6b0: f44f 72b8 mov.w r2, #368 ; 0x170 + 801f6b4: 4945 ldr r1, [pc, #276] ; (801f7cc ) + 801f6b6: 4841 ldr r0, [pc, #260] ; (801f7bc ) + 801f6b8: f015 f84c bl 8034754 + 801f6bc: e7cc b.n 801f658 + if ((pcb->local_port == dest) && + 801f6be: 8a62 ldrh r2, [r4, #18] + 801f6c0: 9803 ldr r0, [sp, #12] + 801f6c2: 4282 cmp r2, r0 + 801f6c4: d14d bne.n 801f762 + LWIP_ASSERT("udp_input_local_match: invalid netif", inp != NULL); + 801f6c6: f1b8 0f00 cmp.w r8, #0 + 801f6ca: d107 bne.n 801f6dc + 801f6cc: 4663 mov r3, ip + 801f6ce: 2288 movs r2, #136 ; 0x88 + 801f6d0: 483a ldr r0, [pc, #232] ; (801f7bc ) + 801f6d2: f015 f83f bl 8034754 + 801f6d6: f8df c0dc ldr.w ip, [pc, #220] ; 801f7b4 + 801f6da: 493b ldr r1, [pc, #236] ; (801f7c8 ) + if ((pcb->netif_idx != NETIF_NO_INDEX) && + 801f6dc: 7a20 ldrb r0, [r4, #8] + 801f6de: b130 cbz r0, 801f6ee + (pcb->netif_idx != netif_get_index(ip_data.current_input_netif))) { + 801f6e0: 687a ldr r2, [r7, #4] + 801f6e2: f892 2034 ldrb.w r2, [r2, #52] ; 0x34 + 801f6e6: 3201 adds r2, #1 + if ((pcb->netif_idx != NETIF_NO_INDEX) && + 801f6e8: b2d2 uxtb r2, r2 + 801f6ea: 4290 cmp r0, r2 + 801f6ec: d139 bne.n 801f762 + if (ip4_addr_isany(ip_2_ip4(&pcb->local_ip)) || + 801f6ee: 6822 ldr r2, [r4, #0] + if (broadcast != 0) { + 801f6f0: f1b9 0f00 cmp.w r9, #0 + 801f6f4: d030 beq.n 801f758 + if (ip4_addr_isany(ip_2_ip4(&pcb->local_ip)) || + 801f6f6: b13a cbz r2, 801f708 + ((ip4_current_dest_addr()->addr == IPADDR_BROADCAST)) || + 801f6f8: 6978 ldr r0, [r7, #20] + if (ip4_addr_isany(ip_2_ip4(&pcb->local_ip)) || + 801f6fa: 1c43 adds r3, r0, #1 + 801f6fc: d004 beq.n 801f708 + ip4_addr_netcmp(ip_2_ip4(&pcb->local_ip), ip4_current_dest_addr(), netif_ip4_netmask(inp))) { + 801f6fe: 4050 eors r0, r2 + ((ip4_current_dest_addr()->addr == IPADDR_BROADCAST)) || + 801f700: f8d8 3008 ldr.w r3, [r8, #8] + 801f704: 4218 tst r0, r3 + 801f706: d12c bne.n 801f762 + if ((pcb->flags & UDP_FLAGS_CONNECTED) == 0) { + 801f708: 7c20 ldrb r0, [r4, #16] + 801f70a: 0743 lsls r3, r0, #29 + 801f70c: d40e bmi.n 801f72c + if (uncon_pcb == NULL) { + 801f70e: b35d cbz r5, 801f768 + } else if (broadcast && ip4_current_dest_addr()->addr == IPADDR_BROADCAST) { + 801f710: f1b9 0f00 cmp.w r9, #0 + 801f714: d00a beq.n 801f72c + 801f716: 6978 ldr r0, [r7, #20] + 801f718: 3001 adds r0, #1 + 801f71a: d107 bne.n 801f72c + if (!IP_IS_V4_VAL(uncon_pcb->local_ip) || !ip4_addr_cmp(ip_2_ip4(&uncon_pcb->local_ip), netif_ip4_addr(inp))) { + 801f71c: f8d8 0004 ldr.w r0, [r8, #4] + 801f720: 682b ldr r3, [r5, #0] + 801f722: 4283 cmp r3, r0 + 801f724: d002 beq.n 801f72c + if (IP_IS_V4_VAL(pcb->local_ip) && ip4_addr_cmp(ip_2_ip4(&pcb->local_ip), netif_ip4_addr(inp))) { + 801f726: 4290 cmp r0, r2 + 801f728: bf08 it eq + 801f72a: 4625 moveq r5, r4 + if ((pcb->remote_port == src) && + 801f72c: 8aa2 ldrh r2, [r4, #20] + 801f72e: 9b02 ldr r3, [sp, #8] + 801f730: 429a cmp r2, r3 + 801f732: d116 bne.n 801f762 + (ip_addr_isany_val(pcb->remote_ip) || + 801f734: 6862 ldr r2, [r4, #4] + if ((pcb->remote_port == src) && + 801f736: b112 cbz r2, 801f73e + (ip_addr_isany_val(pcb->remote_ip) || + 801f738: 6938 ldr r0, [r7, #16] + 801f73a: 4282 cmp r2, r0 + 801f73c: d111 bne.n 801f762 + if (prev != NULL) { + 801f73e: f1ba 0f00 cmp.w sl, #0 + 801f742: d007 beq.n 801f754 + prev->next = pcb->next; + 801f744: 68e3 ldr r3, [r4, #12] + 801f746: f8ca 300c str.w r3, [sl, #12] + pcb->next = udp_pcbs; + 801f74a: f8db 3000 ldr.w r3, [fp] + udp_pcbs = pcb; + 801f74e: f8cb 4000 str.w r4, [fp] + pcb->next = udp_pcbs; + 801f752: 60e3 str r3, [r4, #12] + udp_pcbs = pcb; + 801f754: 4625 mov r5, r4 + 801f756: e7a4 b.n 801f6a2 + if (ip_addr_isany(&pcb->local_ip) || ip_addr_cmp(&pcb->local_ip, ip_current_dest_addr())) { + 801f758: 2a00 cmp r2, #0 + 801f75a: d0d5 beq.n 801f708 + 801f75c: 6978 ldr r0, [r7, #20] + 801f75e: 4290 cmp r0, r2 + 801f760: d0d2 beq.n 801f708 + for (pcb = udp_pcbs; pcb != NULL; pcb = pcb->next) { + 801f762: 46a2 mov sl, r4 + 801f764: 68e4 ldr r4, [r4, #12] + 801f766: e795 b.n 801f694 + 801f768: 4625 mov r5, r4 + 801f76a: e7df b.n 801f72c + if (pcb != NULL) { + 801f76c: b16d cbz r5, 801f78a + if (pcb->recv != NULL) { + 801f76e: 69ac ldr r4, [r5, #24] + 801f770: 2c00 cmp r4, #0 + 801f772: f43f af71 beq.w 801f658 + pcb->recv(pcb->recv_arg, pcb, p, ip_current_src_addr(), src); + 801f776: 9b02 ldr r3, [sp, #8] + 801f778: 4632 mov r2, r6 + 801f77a: 4629 mov r1, r5 + 801f77c: 9300 str r3, [sp, #0] + 801f77e: 4b14 ldr r3, [pc, #80] ; (801f7d0 ) + 801f780: 69e8 ldr r0, [r5, #28] + 801f782: 47a0 blx r4 +} + 801f784: b005 add sp, #20 + 801f786: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + if (!broadcast && !ip_addr_ismulticast(ip_current_dest_addr())) { + 801f78a: f1b9 0f00 cmp.w r9, #0 + 801f78e: f47f af63 bne.w 801f658 + 801f792: 697b ldr r3, [r7, #20] + 801f794: f003 03f0 and.w r3, r3, #240 ; 0xf0 + 801f798: 2be0 cmp r3, #224 ; 0xe0 + 801f79a: f43f af5d beq.w 801f658 + pbuf_header_force(p, (s16_t)(ip_current_header_tot_len() + UDP_HLEN)); + 801f79e: 89b9 ldrh r1, [r7, #12] + 801f7a0: 4630 mov r0, r6 + 801f7a2: 3108 adds r1, #8 + 801f7a4: b209 sxth r1, r1 + 801f7a6: f7fc f9bf bl 801bb28 + icmp_port_unreach(ip_current_is_v6(), p); + 801f7aa: 2103 movs r1, #3 + 801f7ac: 4630 mov r0, r6 + 801f7ae: f7fa fe81 bl 801a4b4 + 801f7b2: e751 b.n 801f658 + 801f7b4: 0803c03c .word 0x0803c03c + 801f7b8: 0803c0bc .word 0x0803c0bc + 801f7bc: 08035999 .word 0x08035999 + 801f7c0: 0803c0d4 .word 0x0803c0d4 + 801f7c4: 2001af34 .word 0x2001af34 + 801f7c8: 0803c0ed .word 0x0803c0ed + 801f7cc: 0803c112 .word 0x0803c112 + 801f7d0: 2001af44 .word 0x2001af44 + 801f7d4: 2001e724 .word 0x2001e724 + +0801f7d8 : + * + * @see udp_disconnect() + */ +err_t +udp_bind(struct udp_pcb *pcb, const ip_addr_t *ipaddr, u16_t port) +{ + 801f7d8: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} + LWIP_ASSERT_CORE_LOCKED(); + +#if LWIP_IPV4 + /* Don't propagate NULL pointer (IPv4 ANY) to subsequent functions */ + if (ipaddr == NULL) { + ipaddr = IP4_ADDR_ANY; + 801f7dc: 4d28 ldr r5, [pc, #160] ; (801f880 ) + 801f7de: 2900 cmp r1, #0 + 801f7e0: bf18 it ne + 801f7e2: 460d movne r5, r1 + } +#else /* LWIP_IPV4 */ + LWIP_ERROR("udp_bind: invalid ipaddr", ipaddr != NULL, return ERR_ARG); +#endif /* LWIP_IPV4 */ + + LWIP_ERROR("udp_bind: invalid pcb", pcb != NULL, return ERR_ARG); + 801f7e4: b950 cbnz r0, 801f7fc + 801f7e6: 4b27 ldr r3, [pc, #156] ; (801f884 ) + 801f7e8: f240 32b7 movw r2, #951 ; 0x3b7 + 801f7ec: 4926 ldr r1, [pc, #152] ; (801f888 ) + 801f7ee: 4827 ldr r0, [pc, #156] ; (801f88c ) + 801f7f0: f014 ffb0 bl 8034754 + 801f7f4: f06f 000f mvn.w r0, #15 + } + LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("udp_bind: bound to ")); + ip_addr_debug_print_val(UDP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, pcb->local_ip); + LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, (", port %"U16_F")\n", pcb->local_port)); + return ERR_OK; +} + 801f7f8: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + for (ipcb = udp_pcbs; ipcb != NULL; ipcb = ipcb->next) { + 801f7fc: f8df c094 ldr.w ip, [pc, #148] ; 801f894 + 801f800: f8dc 4000 ldr.w r4, [ip] + 801f804: 4621 mov r1, r4 + 801f806: b979 cbnz r1, 801f828 + if (port == 0) { + 801f808: b1a2 cbz r2, 801f834 + ip_addr_set_ipaddr(&pcb->local_ip, ipaddr); + 801f80a: 682e ldr r6, [r5, #0] + for (ipcb = udp_pcbs; ipcb != NULL; ipcb = ipcb->next) { + 801f80c: 4623 mov r3, r4 + 801f80e: b303 cbz r3, 801f852 + if (pcb != ipcb) { + 801f810: 4283 cmp r3, r0 + 801f812: d007 beq.n 801f824 + if ((ipcb->local_port == port) && + 801f814: 8a5f ldrh r7, [r3, #18] + 801f816: 4297 cmp r7, r2 + 801f818: d104 bne.n 801f824 + (ip_addr_cmp(&ipcb->local_ip, ipaddr) || ip_addr_isany(ipaddr) || + 801f81a: 681f ldr r7, [r3, #0] + if ((ipcb->local_port == port) && + 801f81c: 42b7 cmp r7, r6 + 801f81e: d02a beq.n 801f876 + (ip_addr_cmp(&ipcb->local_ip, ipaddr) || ip_addr_isany(ipaddr) || + 801f820: b34e cbz r6, 801f876 + ip_addr_isany(&ipcb->local_ip))) { + 801f822: b347 cbz r7, 801f876 + for (ipcb = udp_pcbs; ipcb != NULL; ipcb = ipcb->next) { + 801f824: 68db ldr r3, [r3, #12] + 801f826: e7f2 b.n 801f80e + if (pcb == ipcb) { + 801f828: 4281 cmp r1, r0 + 801f82a: d001 beq.n 801f830 + for (ipcb = udp_pcbs; ipcb != NULL; ipcb = ipcb->next) { + 801f82c: 68c9 ldr r1, [r1, #12] + 801f82e: e7ea b.n 801f806 + rebind = 1; + 801f830: 2101 movs r1, #1 + 801f832: e7e9 b.n 801f808 + 801f834: 4f16 ldr r7, [pc, #88] ; (801f890 ) + if (port == 0) { + 801f836: f44f 4380 mov.w r3, #16384 ; 0x4000 + if (udp_port++ == UDP_LOCAL_PORT_RANGE_END) { + 801f83a: f64f 7eff movw lr, #65535 ; 0xffff + 801f83e: 883a ldrh r2, [r7, #0] + 801f840: 4572 cmp r2, lr + for (pcb = udp_pcbs; pcb != NULL; pcb = pcb->next) { + 801f842: 4626 mov r6, r4 + if (udp_port++ == UDP_LOCAL_PORT_RANGE_END) { + 801f844: bf16 itet ne + 801f846: 3201 addne r2, #1 + udp_port = UDP_LOCAL_PORT_RANGE_START; + 801f848: f44f 4240 moveq.w r2, #49152 ; 0xc000 + if (udp_port++ == UDP_LOCAL_PORT_RANGE_END) { + 801f84c: b292 uxthne r2, r2 + for (pcb = udp_pcbs; pcb != NULL; pcb = pcb->next) { + 801f84e: b94e cbnz r6, 801f864 + 801f850: 803a strh r2, [r7, #0] + ip_addr_set_ipaddr(&pcb->local_ip, ipaddr); + 801f852: 682b ldr r3, [r5, #0] + pcb->local_port = port; + 801f854: 8242 strh r2, [r0, #18] + ip_addr_set_ipaddr(&pcb->local_ip, ipaddr); + 801f856: 6003 str r3, [r0, #0] + if (rebind == 0) { + 801f858: b911 cbnz r1, 801f860 + pcb->next = udp_pcbs; + 801f85a: 60c4 str r4, [r0, #12] + udp_pcbs = pcb; + 801f85c: f8cc 0000 str.w r0, [ip] + return ERR_OK; + 801f860: 2000 movs r0, #0 + 801f862: e7c9 b.n 801f7f8 + if (pcb->local_port == udp_port) { + 801f864: f8b6 8012 ldrh.w r8, [r6, #18] + 801f868: 4590 cmp r8, r2 + 801f86a: d107 bne.n 801f87c + if (++n > (UDP_LOCAL_PORT_RANGE_END - UDP_LOCAL_PORT_RANGE_START)) { + 801f86c: 3b01 subs r3, #1 + 801f86e: b29b uxth r3, r3 + 801f870: 2b00 cmp r3, #0 + 801f872: d1e5 bne.n 801f840 + 801f874: 803a strh r2, [r7, #0] + return ERR_USE; + 801f876: f06f 0007 mvn.w r0, #7 + 801f87a: e7bd b.n 801f7f8 + for (pcb = udp_pcbs; pcb != NULL; pcb = pcb->next) { + 801f87c: 68f6 ldr r6, [r6, #12] + 801f87e: e7e6 b.n 801f84e + 801f880: 0803a528 .word 0x0803a528 + 801f884: 0803c03c .word 0x0803c03c + 801f888: 0803c12d .word 0x0803c12d + 801f88c: 08035999 .word 0x08035999 + 801f890: 2000005e .word 0x2000005e + 801f894: 2001e724 .word 0x2001e724 + +0801f898 : +{ + 801f898: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 801f89c: b085 sub sp, #20 + 801f89e: 460e mov r6, r1 + 801f8a0: 4690 mov r8, r2 + 801f8a2: 4699 mov r9, r3 + LWIP_ERROR("udp_sendto_if_src: invalid pcb", pcb != NULL, return ERR_ARG); + 801f8a4: 4607 mov r7, r0 +{ + 801f8a6: e9dd ba0e ldrd fp, sl, [sp, #56] ; 0x38 + LWIP_ERROR("udp_sendto_if_src: invalid pcb", pcb != NULL, return ERR_ARG); + 801f8aa: b960 cbnz r0, 801f8c6 + 801f8ac: 4b3e ldr r3, [pc, #248] ; (801f9a8 ) + 801f8ae: f240 22d1 movw r2, #721 ; 0x2d1 + 801f8b2: 493e ldr r1, [pc, #248] ; (801f9ac ) + LWIP_ERROR("udp_sendto_if_src: invalid pbuf", p != NULL, return ERR_ARG); + 801f8b4: f06f 040f mvn.w r4, #15 + 801f8b8: 483d ldr r0, [pc, #244] ; (801f9b0 ) + 801f8ba: f014 ff4b bl 8034754 +} + 801f8be: 4620 mov r0, r4 + 801f8c0: b005 add sp, #20 + 801f8c2: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + LWIP_ERROR("udp_sendto_if_src: invalid pbuf", p != NULL, return ERR_ARG); + 801f8c6: b921 cbnz r1, 801f8d2 + 801f8c8: 4b37 ldr r3, [pc, #220] ; (801f9a8 ) + 801f8ca: f240 22d2 movw r2, #722 ; 0x2d2 + 801f8ce: 4939 ldr r1, [pc, #228] ; (801f9b4 ) + 801f8d0: e7f0 b.n 801f8b4 + LWIP_ERROR("udp_sendto_if_src: invalid dst_ip", dst_ip != NULL, return ERR_ARG); + 801f8d2: b922 cbnz r2, 801f8de + 801f8d4: 4b34 ldr r3, [pc, #208] ; (801f9a8 ) + 801f8d6: f240 22d3 movw r2, #723 ; 0x2d3 + 801f8da: 4937 ldr r1, [pc, #220] ; (801f9b8 ) + 801f8dc: e7ea b.n 801f8b4 + LWIP_ERROR("udp_sendto_if_src: invalid src_ip", src_ip != NULL, return ERR_ARG); + 801f8de: f1ba 0f00 cmp.w sl, #0 + 801f8e2: d104 bne.n 801f8ee + 801f8e4: 4b30 ldr r3, [pc, #192] ; (801f9a8 ) + 801f8e6: f44f 7235 mov.w r2, #724 ; 0x2d4 + 801f8ea: 4934 ldr r1, [pc, #208] ; (801f9bc ) + 801f8ec: e7e2 b.n 801f8b4 + LWIP_ERROR("udp_sendto_if_src: invalid netif", netif != NULL, return ERR_ARG); + 801f8ee: f1bb 0f00 cmp.w fp, #0 + 801f8f2: d104 bne.n 801f8fe + 801f8f4: 4b2c ldr r3, [pc, #176] ; (801f9a8 ) + 801f8f6: f240 22d5 movw r2, #725 ; 0x2d5 + 801f8fa: 4931 ldr r1, [pc, #196] ; (801f9c0 ) + 801f8fc: e7da b.n 801f8b4 + if (pcb->local_port == 0) { + 801f8fe: 8a42 ldrh r2, [r0, #18] + 801f900: b13a cbz r2, 801f912 + if ((u16_t)(p->tot_len + UDP_HLEN) < p->tot_len) { + 801f902: 8932 ldrh r2, [r6, #8] + 801f904: f64f 73f7 movw r3, #65527 ; 0xfff7 + 801f908: 429a cmp r2, r3 + 801f90a: d909 bls.n 801f920 + return ERR_MEM; + 801f90c: f04f 34ff mov.w r4, #4294967295 + 801f910: e7d5 b.n 801f8be + err = udp_bind(pcb, &pcb->local_ip, pcb->local_port); + 801f912: 4601 mov r1, r0 + 801f914: f7ff ff60 bl 801f7d8 + if (err != ERR_OK) { + 801f918: 4604 mov r4, r0 + 801f91a: 2800 cmp r0, #0 + 801f91c: d0f1 beq.n 801f902 + 801f91e: e7ce b.n 801f8be + if (pbuf_add_header(p, UDP_HLEN)) { + 801f920: 2108 movs r1, #8 + 801f922: 4630 mov r0, r6 + 801f924: f7fc f8d0 bl 801bac8 + 801f928: 2800 cmp r0, #0 + 801f92a: d03a beq.n 801f9a2 + q = pbuf_alloc(PBUF_IP, UDP_HLEN, PBUF_RAM); + 801f92c: f44f 7220 mov.w r2, #640 ; 0x280 + 801f930: 2108 movs r1, #8 + 801f932: 2022 movs r0, #34 ; 0x22 + 801f934: f7fc f968 bl 801bc08 + if (q == NULL) { + 801f938: 4605 mov r5, r0 + 801f93a: 2800 cmp r0, #0 + 801f93c: d0e6 beq.n 801f90c + if (p->tot_len != 0) { + 801f93e: 8933 ldrh r3, [r6, #8] + 801f940: b113 cbz r3, 801f948 + pbuf_chain(q, p); + 801f942: 4631 mov r1, r6 + 801f944: f7fc faa8 bl 801be98 + LWIP_ASSERT("check that first pbuf can hold struct udp_hdr", + 801f948: 896b ldrh r3, [r5, #10] + 801f94a: 2b07 cmp r3, #7 + 801f94c: d806 bhi.n 801f95c + 801f94e: 4b16 ldr r3, [pc, #88] ; (801f9a8 ) + 801f950: f240 320d movw r2, #781 ; 0x30d + 801f954: 491b ldr r1, [pc, #108] ; (801f9c4 ) + 801f956: 4816 ldr r0, [pc, #88] ; (801f9b0 ) + 801f958: f014 fefc bl 8034754 + udphdr = (struct udp_hdr *)q->payload; + 801f95c: 686c ldr r4, [r5, #4] + udphdr->src = lwip_htons(pcb->local_port); + 801f95e: 8a78 ldrh r0, [r7, #18] + 801f960: f7f8 ffbd bl 80188de + 801f964: 8020 strh r0, [r4, #0] + udphdr->dest = lwip_htons(dst_port); + 801f966: 4648 mov r0, r9 + 801f968: f7f8 ffb9 bl 80188de + udphdr->chksum = 0x0000; + 801f96c: 2300 movs r3, #0 + udphdr->dest = lwip_htons(dst_port); + 801f96e: 8060 strh r0, [r4, #2] + udphdr->chksum = 0x0000; + 801f970: 71a3 strb r3, [r4, #6] + 801f972: 71e3 strb r3, [r4, #7] + udphdr->len = lwip_htons(q->tot_len); + 801f974: 8928 ldrh r0, [r5, #8] + 801f976: f7f8 ffb2 bl 80188de + err = ip_output_if_src(q, src_ip, dst_ip, ttl, pcb->tos, ip_proto, netif); + 801f97a: 2311 movs r3, #17 + udphdr->len = lwip_htons(q->tot_len); + 801f97c: 80a0 strh r0, [r4, #4] + err = ip_output_if_src(q, src_ip, dst_ip, ttl, pcb->tos, ip_proto, netif); + 801f97e: 4642 mov r2, r8 + 801f980: f8cd b008 str.w fp, [sp, #8] + 801f984: 4651 mov r1, sl + 801f986: 9301 str r3, [sp, #4] + 801f988: 4628 mov r0, r5 + 801f98a: 7abb ldrb r3, [r7, #10] + 801f98c: 9300 str r3, [sp, #0] + 801f98e: 7afb ldrb r3, [r7, #11] + 801f990: f7fa feb6 bl 801a700 + if (q != p) { + 801f994: 42b5 cmp r5, r6 + err = ip_output_if_src(q, src_ip, dst_ip, ttl, pcb->tos, ip_proto, netif); + 801f996: 4604 mov r4, r0 + if (q != p) { + 801f998: d091 beq.n 801f8be + pbuf_free(q); + 801f99a: 4628 mov r0, r5 + 801f99c: f7fc f8cc bl 801bb38 + q = NULL; + 801f9a0: e78d b.n 801f8be + 801f9a2: 4635 mov r5, r6 + 801f9a4: e7d0 b.n 801f948 + 801f9a6: bf00 nop + 801f9a8: 0803c03c .word 0x0803c03c + 801f9ac: 0803c143 .word 0x0803c143 + 801f9b0: 08035999 .word 0x08035999 + 801f9b4: 0803c162 .word 0x0803c162 + 801f9b8: 0803c182 .word 0x0803c182 + 801f9bc: 0803c1a4 .word 0x0803c1a4 + 801f9c0: 0803c1c6 .word 0x0803c1c6 + 801f9c4: 0803c1e7 .word 0x0803c1e7 + +0801f9c8 : +{ + 801f9c8: b573 push {r0, r1, r4, r5, r6, lr} + 801f9ca: 9c06 ldr r4, [sp, #24] + LWIP_ERROR("udp_sendto_if: invalid pcb", pcb != NULL, return ERR_ARG); + 801f9cc: b950 cbnz r0, 801f9e4 + 801f9ce: 4b18 ldr r3, [pc, #96] ; (801fa30 ) + 801f9d0: f44f 7220 mov.w r2, #640 ; 0x280 + 801f9d4: 4917 ldr r1, [pc, #92] ; (801fa34 ) + LWIP_ERROR("udp_sendto_if: invalid netif", netif != NULL, return ERR_ARG); + 801f9d6: 4818 ldr r0, [pc, #96] ; (801fa38 ) + 801f9d8: f014 febc bl 8034754 + 801f9dc: f06f 000f mvn.w r0, #15 +} + 801f9e0: b002 add sp, #8 + 801f9e2: bd70 pop {r4, r5, r6, pc} + LWIP_ERROR("udp_sendto_if: invalid pbuf", p != NULL, return ERR_ARG); + 801f9e4: b921 cbnz r1, 801f9f0 + 801f9e6: 4b12 ldr r3, [pc, #72] ; (801fa30 ) + 801f9e8: f240 2281 movw r2, #641 ; 0x281 + 801f9ec: 4913 ldr r1, [pc, #76] ; (801fa3c ) + 801f9ee: e7f2 b.n 801f9d6 + LWIP_ERROR("udp_sendto_if: invalid dst_ip", dst_ip != NULL, return ERR_ARG); + 801f9f0: b922 cbnz r2, 801f9fc + 801f9f2: 4b0f ldr r3, [pc, #60] ; (801fa30 ) + 801f9f4: f240 2282 movw r2, #642 ; 0x282 + 801f9f8: 4911 ldr r1, [pc, #68] ; (801fa40 ) + 801f9fa: e7ec b.n 801f9d6 + LWIP_ERROR("udp_sendto_if: invalid netif", netif != NULL, return ERR_ARG); + 801f9fc: b924 cbnz r4, 801fa08 + 801f9fe: 4b0c ldr r3, [pc, #48] ; (801fa30 ) + 801fa00: f240 2283 movw r2, #643 ; 0x283 + 801fa04: 490f ldr r1, [pc, #60] ; (801fa44 ) + 801fa06: e7e6 b.n 801f9d6 + if (ip4_addr_isany(ip_2_ip4(&pcb->local_ip)) || + 801fa08: 6805 ldr r5, [r0, #0] + 801fa0a: b11d cbz r5, 801fa14 + ip4_addr_ismulticast(ip_2_ip4(&pcb->local_ip))) { + 801fa0c: f005 06f0 and.w r6, r5, #240 ; 0xf0 + if (ip4_addr_isany(ip_2_ip4(&pcb->local_ip)) || + 801fa10: 2ee0 cmp r6, #224 ; 0xe0 + 801fa12: d105 bne.n 801fa20 + src_ip = netif_ip_addr4(netif); + 801fa14: 1d25 adds r5, r4, #4 + return udp_sendto_if_src(pcb, p, dst_ip, dst_port, netif, src_ip); + 801fa16: e9cd 4500 strd r4, r5, [sp] + 801fa1a: f7ff ff3d bl 801f898 + 801fa1e: e7df b.n 801f9e0 + if (!ip4_addr_cmp(ip_2_ip4(&(pcb->local_ip)), netif_ip4_addr(netif))) { + 801fa20: 6866 ldr r6, [r4, #4] + 801fa22: 42b5 cmp r5, r6 + 801fa24: d101 bne.n 801fa2a + if (ip4_addr_isany(ip_2_ip4(&pcb->local_ip)) || + 801fa26: 4605 mov r5, r0 + 801fa28: e7f5 b.n 801fa16 + return ERR_RTE; + 801fa2a: f06f 0003 mvn.w r0, #3 + 801fa2e: e7d7 b.n 801f9e0 + 801fa30: 0803c03c .word 0x0803c03c + 801fa34: 0803c215 .word 0x0803c215 + 801fa38: 08035999 .word 0x08035999 + 801fa3c: 0803c230 .word 0x0803c230 + 801fa40: 0803c24c .word 0x0803c24c + 801fa44: 0803c26a .word 0x0803c26a + +0801fa48 : + * + * @see udp_disconnect() + */ +err_t +udp_connect(struct udp_pcb *pcb, const ip_addr_t *ipaddr, u16_t port) +{ + 801fa48: b570 push {r4, r5, r6, lr} + 801fa4a: 460d mov r5, r1 + 801fa4c: 4616 mov r6, r2 + struct udp_pcb *ipcb; + + LWIP_ASSERT_CORE_LOCKED(); + + LWIP_ERROR("udp_connect: invalid pcb", pcb != NULL, return ERR_ARG); + 801fa4e: 4604 mov r4, r0 + 801fa50: b948 cbnz r0, 801fa66 + 801fa52: 4b16 ldr r3, [pc, #88] ; (801faac ) + 801fa54: f240 4235 movw r2, #1077 ; 0x435 + 801fa58: 4915 ldr r1, [pc, #84] ; (801fab0 ) + LWIP_ERROR("udp_connect: invalid ipaddr", ipaddr != NULL, return ERR_ARG); + 801fa5a: 4816 ldr r0, [pc, #88] ; (801fab4 ) + 801fa5c: f014 fe7a bl 8034754 + 801fa60: f06f 000f mvn.w r0, #15 + } + /* PCB not yet on the list, add PCB now */ + pcb->next = udp_pcbs; + udp_pcbs = pcb; + return ERR_OK; +} + 801fa64: bd70 pop {r4, r5, r6, pc} + LWIP_ERROR("udp_connect: invalid ipaddr", ipaddr != NULL, return ERR_ARG); + 801fa66: b921 cbnz r1, 801fa72 + 801fa68: 4b10 ldr r3, [pc, #64] ; (801faac ) + 801fa6a: f240 4236 movw r2, #1078 ; 0x436 + 801fa6e: 4912 ldr r1, [pc, #72] ; (801fab8 ) + 801fa70: e7f3 b.n 801fa5a + if (pcb->local_port == 0) { + 801fa72: 8a42 ldrh r2, [r0, #18] + 801fa74: b16a cbz r2, 801fa92 + ip_addr_set_ipaddr(&pcb->remote_ip, ipaddr); + 801fa76: 682b ldr r3, [r5, #0] + pcb->remote_port = port; + 801fa78: 82a6 strh r6, [r4, #20] + ip_addr_set_ipaddr(&pcb->remote_ip, ipaddr); + 801fa7a: 6063 str r3, [r4, #4] + pcb->flags |= UDP_FLAGS_CONNECTED; + 801fa7c: 7c23 ldrb r3, [r4, #16] + 801fa7e: f043 0304 orr.w r3, r3, #4 + 801fa82: 7423 strb r3, [r4, #16] + for (ipcb = udp_pcbs; ipcb != NULL; ipcb = ipcb->next) { + 801fa84: 4b0d ldr r3, [pc, #52] ; (801fabc ) + 801fa86: 681a ldr r2, [r3, #0] + 801fa88: 4610 mov r0, r2 + 801fa8a: b940 cbnz r0, 801fa9e + pcb->next = udp_pcbs; + 801fa8c: 60e2 str r2, [r4, #12] + udp_pcbs = pcb; + 801fa8e: 601c str r4, [r3, #0] + return ERR_OK; + 801fa90: e7e8 b.n 801fa64 + err_t err = udp_bind(pcb, &pcb->local_ip, pcb->local_port); + 801fa92: 4601 mov r1, r0 + 801fa94: f7ff fea0 bl 801f7d8 + if (err != ERR_OK) { + 801fa98: 2800 cmp r0, #0 + 801fa9a: d0ec beq.n 801fa76 + 801fa9c: e7e2 b.n 801fa64 + if (pcb == ipcb) { + 801fa9e: 42a0 cmp r0, r4 + 801faa0: d001 beq.n 801faa6 + for (ipcb = udp_pcbs; ipcb != NULL; ipcb = ipcb->next) { + 801faa2: 68c0 ldr r0, [r0, #12] + 801faa4: e7f1 b.n 801fa8a + return ERR_OK; + 801faa6: 2000 movs r0, #0 + 801faa8: e7dc b.n 801fa64 + 801faaa: bf00 nop + 801faac: 0803c03c .word 0x0803c03c + 801fab0: 0803c287 .word 0x0803c287 + 801fab4: 08035999 .word 0x08035999 + 801fab8: 0803c2a0 .word 0x0803c2a0 + 801fabc: 2001e724 .word 0x2001e724 + +0801fac0 : +void +udp_recv(struct udp_pcb *pcb, udp_recv_fn recv, void *recv_arg) +{ + LWIP_ASSERT_CORE_LOCKED(); + + LWIP_ERROR("udp_recv: invalid pcb", pcb != NULL, return); + 801fac0: b930 cbnz r0, 801fad0 + 801fac2: 4b05 ldr r3, [pc, #20] ; (801fad8 ) + 801fac4: f240 428a movw r2, #1162 ; 0x48a + 801fac8: 4904 ldr r1, [pc, #16] ; (801fadc ) + 801faca: 4805 ldr r0, [pc, #20] ; (801fae0 ) + 801facc: f014 be42 b.w 8034754 + + /* remember recv() callback and user data */ + pcb->recv = recv; + pcb->recv_arg = recv_arg; + 801fad0: e9c0 1206 strd r1, r2, [r0, #24] +} + 801fad4: 4770 bx lr + 801fad6: bf00 nop + 801fad8: 0803c03c .word 0x0803c03c + 801fadc: 0803c2bc .word 0x0803c2bc + 801fae0: 08035999 .word 0x08035999 + +0801fae4 : +{ + struct udp_pcb *pcb2; + + LWIP_ASSERT_CORE_LOCKED(); + + LWIP_ERROR("udp_remove: invalid pcb", pcb != NULL, return); + 801fae4: 4601 mov r1, r0 + 801fae6: b930 cbnz r0, 801faf6 + 801fae8: 4b0d ldr r3, [pc, #52] ; (801fb20 ) + 801faea: f240 42a1 movw r2, #1185 ; 0x4a1 + 801faee: 490d ldr r1, [pc, #52] ; (801fb24 ) + 801faf0: 480d ldr r0, [pc, #52] ; (801fb28 ) + 801faf2: f014 be2f b.w 8034754 + + mib2_udp_unbind(pcb); + /* pcb to be removed is first in list? */ + if (udp_pcbs == pcb) { + 801faf6: 4a0d ldr r2, [pc, #52] ; (801fb2c ) + 801faf8: 6813 ldr r3, [r2, #0] + 801fafa: 4283 cmp r3, r0 + 801fafc: d105 bne.n 801fb0a + /* make list start at 2nd pcb */ + udp_pcbs = udp_pcbs->next; + 801fafe: 68c3 ldr r3, [r0, #12] + 801fb00: 6013 str r3, [r2, #0] + pcb2->next = pcb->next; + break; + } + } + } + memp_free(MEMP_UDP_PCB, pcb); + 801fb02: 2000 movs r0, #0 + 801fb04: f7fb bd9c b.w 801b640 + 801fb08: 4613 mov r3, r2 + for (pcb2 = udp_pcbs; pcb2 != NULL; pcb2 = pcb2->next) { + 801fb0a: 2b00 cmp r3, #0 + 801fb0c: d0f9 beq.n 801fb02 + if (pcb2->next != NULL && pcb2->next == pcb) { + 801fb0e: 68da ldr r2, [r3, #12] + 801fb10: 2a00 cmp r2, #0 + 801fb12: d0f6 beq.n 801fb02 + 801fb14: 428a cmp r2, r1 + 801fb16: d1f7 bne.n 801fb08 + pcb2->next = pcb->next; + 801fb18: 68ca ldr r2, [r1, #12] + 801fb1a: 60da str r2, [r3, #12] + break; + 801fb1c: e7f1 b.n 801fb02 + 801fb1e: bf00 nop + 801fb20: 0803c03c .word 0x0803c03c + 801fb24: 0803c2d2 .word 0x0803c2d2 + 801fb28: 08035999 .word 0x08035999 + 801fb2c: 2001e724 .word 0x2001e724 + +0801fb30 : + * + * @see udp_remove() + */ +struct udp_pcb * +udp_new(void) +{ + 801fb30: b510 push {r4, lr} + struct udp_pcb *pcb; + + LWIP_ASSERT_CORE_LOCKED(); + + pcb = (struct udp_pcb *)memp_malloc(MEMP_UDP_PCB); + 801fb32: 2000 movs r0, #0 + 801fb34: f7fb fd54 bl 801b5e0 + /* could allocate UDP PCB? */ + if (pcb != NULL) { + 801fb38: 4604 mov r4, r0 + 801fb3a: b128 cbz r0, 801fb48 + /* UDP Lite: by initializing to all zeroes, chksum_len is set to 0 + * which means checksum is generated over the whole datagram per default + * (recommended as default by RFC 3828). */ + /* initialize PCB to all zeroes */ + memset(pcb, 0, sizeof(struct udp_pcb)); + 801fb3c: 2220 movs r2, #32 + 801fb3e: 2100 movs r1, #0 + 801fb40: f014 ff3c bl 80349bc + pcb->ttl = UDP_TTL; + 801fb44: 23ff movs r3, #255 ; 0xff + 801fb46: 72e3 strb r3, [r4, #11] +#if LWIP_MULTICAST_TX_OPTIONS + udp_set_multicast_ttl(pcb, UDP_TTL); +#endif /* LWIP_MULTICAST_TX_OPTIONS */ + } + return pcb; +} + 801fb48: 4620 mov r0, r4 + 801fb4a: bd10 pop {r4, pc} + +0801fb4c : + * + * @param old_addr IP address of the netif before change + * @param new_addr IP address of the netif after change + */ +void udp_netif_ip_addr_changed(const ip_addr_t *old_addr, const ip_addr_t *new_addr) +{ + 801fb4c: b510 push {r4, lr} + struct udp_pcb *upcb; + + if (!ip_addr_isany(old_addr) && !ip_addr_isany(new_addr)) { + 801fb4e: b138 cbz r0, 801fb60 + 801fb50: 6803 ldr r3, [r0, #0] + 801fb52: b12b cbz r3, 801fb60 + 801fb54: b121 cbz r1, 801fb60 + 801fb56: 680b ldr r3, [r1, #0] + 801fb58: b113 cbz r3, 801fb60 + for (upcb = udp_pcbs; upcb != NULL; upcb = upcb->next) { + 801fb5a: 4b06 ldr r3, [pc, #24] ; (801fb74 ) + 801fb5c: 681b ldr r3, [r3, #0] + 801fb5e: b903 cbnz r3, 801fb62 + * is set to bound to the new one instead */ + ip_addr_copy(upcb->local_ip, *new_addr); + } + } + } +} + 801fb60: bd10 pop {r4, pc} + if (ip_addr_cmp(&upcb->local_ip, old_addr)) { + 801fb62: 681c ldr r4, [r3, #0] + 801fb64: 6802 ldr r2, [r0, #0] + 801fb66: 4294 cmp r4, r2 + ip_addr_copy(upcb->local_ip, *new_addr); + 801fb68: bf04 itt eq + 801fb6a: 680a ldreq r2, [r1, #0] + 801fb6c: 601a streq r2, [r3, #0] + for (upcb = udp_pcbs; upcb != NULL; upcb = upcb->next) { + 801fb6e: 68db ldr r3, [r3, #12] + 801fb70: e7f5 b.n 801fb5e + 801fb72: bf00 nop + 801fb74: 2001e724 .word 0x2001e724 + +0801fb78 <_ZNK8touchgfx17AbstractPartition18getAllocationCountEv>: + 801fb78: 8880 ldrh r0, [r0, #4] + 801fb7a: 4770 bx lr + +0801fb7c <_ZN8touchgfx17AbstractPartition7indexOfEPKv>: + 801fb7c: b570 push {r4, r5, r6, lr} + 801fb7e: 6803 ldr r3, [r0, #0] + 801fb80: 460c mov r4, r1 + 801fb82: 2100 movs r1, #0 + 801fb84: 4605 mov r5, r0 + 801fb86: 6a5b ldr r3, [r3, #36] ; 0x24 + 801fb88: 4798 blx r3 + 801fb8a: 4606 mov r6, r0 + 801fb8c: 682b ldr r3, [r5, #0] + 801fb8e: 4628 mov r0, r5 + 801fb90: 1ba4 subs r4, r4, r6 + 801fb92: 6a1b ldr r3, [r3, #32] + 801fb94: b2a4 uxth r4, r4 + 801fb96: 4798 blx r3 + 801fb98: fbb4 f0f0 udiv r0, r4, r0 + 801fb9c: bd70 pop {r4, r5, r6, pc} + +0801fb9e <_ZN8touchgfx17AbstractPartition5clearEv>: + 801fb9e: 2300 movs r3, #0 + 801fba0: 8083 strh r3, [r0, #4] + 801fba2: 4770 bx lr + +0801fba4 <_ZN8touchgfx17AbstractPartition8allocateEt>: + 801fba4: b510 push {r4, lr} + 801fba6: 6803 ldr r3, [r0, #0] + 801fba8: 4604 mov r4, r0 + 801fbaa: 8881 ldrh r1, [r0, #4] + 801fbac: 6a5b ldr r3, [r3, #36] ; 0x24 + 801fbae: 4798 blx r3 + 801fbb0: 88a3 ldrh r3, [r4, #4] + 801fbb2: 3301 adds r3, #1 + 801fbb4: 80a3 strh r3, [r4, #4] + 801fbb6: bd10 pop {r4, pc} + +0801fbb8 <_ZN8touchgfx17AbstractPartition10allocateAtEtt>: + 801fbb8: 6803 ldr r3, [r0, #0] + 801fbba: 6a5b ldr r3, [r3, #36] ; 0x24 + 801fbbc: 4718 bx r3 + +0801fbbe <_ZN8touchgfx17AbstractPartitionD1Ev>: + 801fbbe: 4770 bx lr + +0801fbc0 <_ZN8touchgfx17AbstractPartitionC1Ev>: + 801fbc0: 4a02 ldr r2, [pc, #8] ; (801fbcc <_ZN8touchgfx17AbstractPartitionC1Ev+0xc>) + 801fbc2: 6002 str r2, [r0, #0] + 801fbc4: 2200 movs r2, #0 + 801fbc6: 8082 strh r2, [r0, #4] + 801fbc8: 4770 bx lr + 801fbca: bf00 nop + 801fbcc: 0803c2f4 .word 0x0803c2f4 + +0801fbd0 <_ZN8touchgfx9Container8containsERKNS_8DrawableE>: + 801fbd0: 6a83 ldr r3, [r0, #40] ; 0x28 + 801fbd2: 2000 movs r0, #0 + 801fbd4: b12b cbz r3, 801fbe2 <_ZN8touchgfx9Container8containsERKNS_8DrawableE+0x12> + 801fbd6: b920 cbnz r0, 801fbe2 <_ZN8touchgfx9Container8containsERKNS_8DrawableE+0x12> + 801fbd8: 1a5a subs r2, r3, r1 + 801fbda: 699b ldr r3, [r3, #24] + 801fbdc: 4250 negs r0, r2 + 801fbde: 4150 adcs r0, r2 + 801fbe0: e7f8 b.n 801fbd4 <_ZN8touchgfx9Container8containsERKNS_8DrawableE+0x4> + 801fbe2: 4770 bx lr + +0801fbe4 <_ZN8touchgfx9Container3addERNS_8DrawableE>: + 801fbe4: 2300 movs r3, #0 + 801fbe6: 6148 str r0, [r1, #20] + 801fbe8: 618b str r3, [r1, #24] + 801fbea: 6a83 ldr r3, [r0, #40] ; 0x28 + 801fbec: b913 cbnz r3, 801fbf4 <_ZN8touchgfx9Container3addERNS_8DrawableE+0x10> + 801fbee: 6281 str r1, [r0, #40] ; 0x28 + 801fbf0: 4770 bx lr + 801fbf2: 4613 mov r3, r2 + 801fbf4: 699a ldr r2, [r3, #24] + 801fbf6: 2a00 cmp r2, #0 + 801fbf8: d1fb bne.n 801fbf2 <_ZN8touchgfx9Container3addERNS_8DrawableE+0xe> + 801fbfa: 6199 str r1, [r3, #24] + 801fbfc: 4770 bx lr + +0801fbfe <_ZN8touchgfx9Container9removeAllEv>: + 801fbfe: 2200 movs r2, #0 + 801fc00: 6a83 ldr r3, [r0, #40] ; 0x28 + 801fc02: b123 cbz r3, 801fc0e <_ZN8touchgfx9Container9removeAllEv+0x10> + 801fc04: 6999 ldr r1, [r3, #24] + 801fc06: 6281 str r1, [r0, #40] ; 0x28 + 801fc08: e9c3 2205 strd r2, r2, [r3, #20] + 801fc0c: e7f8 b.n 801fc00 <_ZN8touchgfx9Container9removeAllEv+0x2> + 801fc0e: 4770 bx lr + +0801fc10 <_ZN8touchgfx9Container6unlinkEv>: + 801fc10: 2300 movs r3, #0 + 801fc12: 6283 str r3, [r0, #40] ; 0x28 + 801fc14: 4770 bx lr + +0801fc16 <_ZNK8touchgfx9Container12getSolidRectEv>: + 801fc16: 2200 movs r2, #0 + 801fc18: 8002 strh r2, [r0, #0] + 801fc1a: 8042 strh r2, [r0, #2] + 801fc1c: 8082 strh r2, [r0, #4] + 801fc1e: 80c2 strh r2, [r0, #6] + 801fc20: 4770 bx lr + +0801fc22 <_ZN8touchgfx9Container20moveChildrenRelativeEss>: + 801fc22: b570 push {r4, r5, r6, lr} + 801fc24: 460d mov r5, r1 + 801fc26: 4616 mov r6, r2 + 801fc28: 6a84 ldr r4, [r0, #40] ; 0x28 + 801fc2a: b13c cbz r4, 801fc3c <_ZN8touchgfx9Container20moveChildrenRelativeEss+0x1a> + 801fc2c: 6823 ldr r3, [r4, #0] + 801fc2e: 4620 mov r0, r4 + 801fc30: 4632 mov r2, r6 + 801fc32: 4629 mov r1, r5 + 801fc34: 6d5b ldr r3, [r3, #84] ; 0x54 + 801fc36: 4798 blx r3 + 801fc38: 69a4 ldr r4, [r4, #24] + 801fc3a: e7f6 b.n 801fc2a <_ZN8touchgfx9Container20moveChildrenRelativeEss+0x8> + 801fc3c: bd70 pop {r4, r5, r6, pc} + +0801fc3e <_ZN8touchgfx9Container12forEachChildEPNS_15GenericCallbackIRNS_8DrawableEvvEE>: + 801fc3e: b538 push {r3, r4, r5, lr} + 801fc40: 460d mov r5, r1 + 801fc42: 6a84 ldr r4, [r0, #40] ; 0x28 + 801fc44: b134 cbz r4, 801fc54 <_ZN8touchgfx9Container12forEachChildEPNS_15GenericCallbackIRNS_8DrawableEvvEE+0x16> + 801fc46: 682b ldr r3, [r5, #0] + 801fc48: 4621 mov r1, r4 + 801fc4a: 4628 mov r0, r5 + 801fc4c: 689b ldr r3, [r3, #8] + 801fc4e: 4798 blx r3 + 801fc50: 69a4 ldr r4, [r4, #24] + 801fc52: e7f7 b.n 801fc44 <_ZN8touchgfx9Container12forEachChildEPNS_15GenericCallbackIRNS_8DrawableEvvEE+0x6> + 801fc54: bd38 pop {r3, r4, r5, pc} + +0801fc56 <_ZN8touchgfx9ContainerD1Ev>: + 801fc56: 4770 bx lr + +0801fc58 <_ZN8touchgfx9ContainerD0Ev>: + 801fc58: b510 push {r4, lr} + 801fc5a: 4604 mov r4, r0 + 801fc5c: 212c movs r1, #44 ; 0x2c + 801fc5e: f014 fb4a bl 80342f6 <_ZdlPvj> + 801fc62: 4620 mov r0, r4 + 801fc64: bd10 pop {r4, pc} + +0801fc66 <_ZN8touchgfx9Container6removeERNS_8DrawableE>: + 801fc66: 6a83 ldr r3, [r0, #40] ; 0x28 + 801fc68: b19b cbz r3, 801fc92 <_ZN8touchgfx9Container6removeERNS_8DrawableE+0x2c> + 801fc6a: 428b cmp r3, r1 + 801fc6c: d109 bne.n 801fc82 <_ZN8touchgfx9Container6removeERNS_8DrawableE+0x1c> + 801fc6e: 699a ldr r2, [r3, #24] + 801fc70: 2100 movs r1, #0 + 801fc72: 6159 str r1, [r3, #20] + 801fc74: 6282 str r2, [r0, #40] ; 0x28 + 801fc76: b902 cbnz r2, 801fc7a <_ZN8touchgfx9Container6removeERNS_8DrawableE+0x14> + 801fc78: 4770 bx lr + 801fc7a: 6199 str r1, [r3, #24] + 801fc7c: 4770 bx lr + 801fc7e: 4613 mov r3, r2 + 801fc80: b13a cbz r2, 801fc92 <_ZN8touchgfx9Container6removeERNS_8DrawableE+0x2c> + 801fc82: 699a ldr r2, [r3, #24] + 801fc84: 428a cmp r2, r1 + 801fc86: d1fa bne.n 801fc7e <_ZN8touchgfx9Container6removeERNS_8DrawableE+0x18> + 801fc88: 698a ldr r2, [r1, #24] + 801fc8a: 619a str r2, [r3, #24] + 801fc8c: 2300 movs r3, #0 + 801fc8e: e9c1 3305 strd r3, r3, [r1, #20] + 801fc92: 4770 bx lr + +0801fc94 <_ZN8touchgfx9Container6insertEPNS_8DrawableERS1_>: + 801fc94: b410 push {r4} + 801fc96: 6a83 ldr r3, [r0, #40] ; 0x28 + 801fc98: 4604 mov r4, r0 + 801fc9a: b92b cbnz r3, 801fca8 <_ZN8touchgfx9Container6insertEPNS_8DrawableERS1_+0x14> + 801fc9c: 6803 ldr r3, [r0, #0] + 801fc9e: 4611 mov r1, r2 + 801fca0: f85d 4b04 ldr.w r4, [sp], #4 + 801fca4: 6e1b ldr r3, [r3, #96] ; 0x60 + 801fca6: 4718 bx r3 + 801fca8: b941 cbnz r1, 801fcbc <_ZN8touchgfx9Container6insertEPNS_8DrawableERS1_+0x28> + 801fcaa: 6193 str r3, [r2, #24] + 801fcac: 6282 str r2, [r0, #40] ; 0x28 + 801fcae: 6154 str r4, [r2, #20] + 801fcb0: f85d 4b04 ldr.w r4, [sp], #4 + 801fcb4: 4770 bx lr + 801fcb6: 4603 mov r3, r0 + 801fcb8: 2800 cmp r0, #0 + 801fcba: d0f9 beq.n 801fcb0 <_ZN8touchgfx9Container6insertEPNS_8DrawableERS1_+0x1c> + 801fcbc: 4299 cmp r1, r3 + 801fcbe: 6998 ldr r0, [r3, #24] + 801fcc0: d1f9 bne.n 801fcb6 <_ZN8touchgfx9Container6insertEPNS_8DrawableERS1_+0x22> + 801fcc2: 6190 str r0, [r2, #24] + 801fcc4: 618a str r2, [r1, #24] + 801fcc6: e7f2 b.n 801fcae <_ZN8touchgfx9Container6insertEPNS_8DrawableERS1_+0x1a> + +0801fcc8 <_ZN8touchgfx9Container12getLastChildEssPPNS_8DrawableE>: + 801fcc8: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} + 801fccc: 461f mov r7, r3 + 801fcce: f890 3024 ldrb.w r3, [r0, #36] ; 0x24 + 801fcd2: 460d mov r5, r1 + 801fcd4: 4616 mov r6, r2 + 801fcd6: b103 cbz r3, 801fcda <_ZN8touchgfx9Container12getLastChildEssPPNS_8DrawableE+0x12> + 801fcd8: 6038 str r0, [r7, #0] + 801fcda: 6a84 ldr r4, [r0, #40] ; 0x28 + 801fcdc: b314 cbz r4, 801fd24 <_ZN8touchgfx9Container12getLastChildEssPPNS_8DrawableE+0x5c> + 801fcde: f894 3025 ldrb.w r3, [r4, #37] ; 0x25 + 801fce2: b1eb cbz r3, 801fd20 <_ZN8touchgfx9Container12getLastChildEssPPNS_8DrawableE+0x58> + 801fce4: f9b4 1004 ldrsh.w r1, [r4, #4] + 801fce8: 428d cmp r5, r1 + 801fcea: db19 blt.n 801fd20 <_ZN8touchgfx9Container12getLastChildEssPPNS_8DrawableE+0x58> + 801fcec: b289 uxth r1, r1 + 801fcee: 8923 ldrh r3, [r4, #8] + 801fcf0: 440b add r3, r1 + 801fcf2: b21b sxth r3, r3 + 801fcf4: 429d cmp r5, r3 + 801fcf6: da13 bge.n 801fd20 <_ZN8touchgfx9Container12getLastChildEssPPNS_8DrawableE+0x58> + 801fcf8: f9b4 2006 ldrsh.w r2, [r4, #6] + 801fcfc: 4296 cmp r6, r2 + 801fcfe: db0f blt.n 801fd20 <_ZN8touchgfx9Container12getLastChildEssPPNS_8DrawableE+0x58> + 801fd00: b292 uxth r2, r2 + 801fd02: 8963 ldrh r3, [r4, #10] + 801fd04: 4413 add r3, r2 + 801fd06: b21b sxth r3, r3 + 801fd08: 429e cmp r6, r3 + 801fd0a: da09 bge.n 801fd20 <_ZN8touchgfx9Container12getLastChildEssPPNS_8DrawableE+0x58> + 801fd0c: 6823 ldr r3, [r4, #0] + 801fd0e: 1ab2 subs r2, r6, r2 + 801fd10: 1a69 subs r1, r5, r1 + 801fd12: 4620 mov r0, r4 + 801fd14: f8d3 8024 ldr.w r8, [r3, #36] ; 0x24 + 801fd18: b212 sxth r2, r2 + 801fd1a: 463b mov r3, r7 + 801fd1c: b209 sxth r1, r1 + 801fd1e: 47c0 blx r8 + 801fd20: 69a4 ldr r4, [r4, #24] + 801fd22: e7db b.n 801fcdc <_ZN8touchgfx9Container12getLastChildEssPPNS_8DrawableE+0x14> + 801fd24: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + +0801fd28 <_ZN8touchgfx9Container16getLastChildNearEssPPNS_8DrawableEPsS4_>: + 801fd28: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 801fd2c: 4c6d ldr r4, [pc, #436] ; (801fee4 <_ZN8touchgfx9Container16getLastChildNearEssPPNS_8DrawableEPsS4_+0x1bc>) + 801fd2e: b0a1 sub sp, #132 ; 0x84 + 801fd30: 4606 mov r6, r0 + 801fd32: 6824 ldr r4, [r4, #0] + 801fd34: 9d2a ldr r5, [sp, #168] ; 0xa8 + 801fd36: f894 9049 ldrb.w r9, [r4, #73] ; 0x49 + 801fd3a: 2400 movs r4, #0 + 801fd3c: 9303 str r3, [sp, #12] + 801fd3e: 802c strh r4, [r5, #0] + 801fd40: 9d2b ldr r5, [sp, #172] ; 0xac + 801fd42: 802c strh r4, [r5, #0] + 801fd44: 601c str r4, [r3, #0] + 801fd46: e9cd 1201 strd r1, r2, [sp, #4] + 801fd4a: f7ff ffbd bl 801fcc8 <_ZN8touchgfx9Container12getLastChildEssPPNS_8DrawableE> + 801fd4e: f1b9 0f03 cmp.w r9, #3 + 801fd52: f340 80c1 ble.w 801fed8 <_ZN8touchgfx9Container16getLastChildNearEssPPNS_8DrawableEPsS4_+0x1b0> + 801fd56: 4631 mov r1, r6 + 801fd58: a80c add r0, sp, #48 ; 0x30 + 801fd5a: f004 fe59 bl 8024a10 <_ZNK8touchgfx8Drawable15getAbsoluteRectEv> + 801fd5e: f9bd 3030 ldrsh.w r3, [sp, #48] ; 0x30 + 801fd62: 9306 str r3, [sp, #24] + 801fd64: f9bd 3032 ldrsh.w r3, [sp, #50] ; 0x32 + 801fd68: 9307 str r3, [sp, #28] + 801fd6a: 9b03 ldr r3, [sp, #12] + 801fd6c: f8d3 a000 ldr.w sl, [r3] + 801fd70: f1ba 0f00 cmp.w sl, #0 + 801fd74: f000 80b3 beq.w 801fede <_ZN8touchgfx9Container16getLastChildNearEssPPNS_8DrawableEPsS4_+0x1b6> + 801fd78: 4651 mov r1, sl + 801fd7a: a810 add r0, sp, #64 ; 0x40 + 801fd7c: f004 fe48 bl 8024a10 <_ZNK8touchgfx8Drawable15getAbsoluteRectEv> + 801fd80: 2002 movs r0, #2 + 801fd82: f9bd 1044 ldrsh.w r1, [sp, #68] ; 0x44 + 801fd86: 9b01 ldr r3, [sp, #4] + 801fd88: 9a06 ldr r2, [sp, #24] + 801fd8a: fb91 f1f0 sdiv r1, r1, r0 + 801fd8e: 189d adds r5, r3, r2 + 801fd90: f9bd 3040 ldrsh.w r3, [sp, #64] ; 0x40 + 801fd94: 9a07 ldr r2, [sp, #28] + 801fd96: 4419 add r1, r3 + 801fd98: 9b02 ldr r3, [sp, #8] + 801fd9a: 4413 add r3, r2 + 801fd9c: f9bd 2046 ldrsh.w r2, [sp, #70] ; 0x46 + 801fda0: 1a6d subs r5, r5, r1 + 801fda2: f9bd 1042 ldrsh.w r1, [sp, #66] ; 0x42 + 801fda6: fb92 f2f0 sdiv r2, r2, r0 + 801fdaa: 440a add r2, r1 + 801fdac: 1a9b subs r3, r3, r2 + 801fdae: 435b muls r3, r3 + 801fdb0: fb05 3505 mla r5, r5, r5, r3 + 801fdb4: 4f4c ldr r7, [pc, #304] ; (801fee8 <_ZN8touchgfx9Container16getLastChildNearEssPPNS_8DrawableEPsS4_+0x1c0>) + 801fdb6: ac10 add r4, sp, #64 ; 0x40 + 801fdb8: f1b9 0f0c cmp.w r9, #12 + 801fdbc: cf0f ldmia r7!, {r0, r1, r2, r3} + 801fdbe: c40f stmia r4!, {r0, r1, r2, r3} + 801fdc0: cf0f ldmia r7!, {r0, r1, r2, r3} + 801fdc2: c40f stmia r4!, {r0, r1, r2, r3} + 801fdc4: cf0f ldmia r7!, {r0, r1, r2, r3} + 801fdc6: c40f stmia r4!, {r0, r1, r2, r3} + 801fdc8: e897 000f ldmia.w r7, {r0, r1, r2, r3} + 801fdcc: e884 000f stmia.w r4, {r0, r1, r2, r3} + 801fdd0: f04f 0303 mov.w r3, #3 + 801fdd4: bfd8 it le + 801fdd6: f109 32ff addle.w r2, r9, #4294967295 + 801fdda: f04f 0400 mov.w r4, #0 + 801fdde: f8cd 9000 str.w r9, [sp] + 801fde2: bfcc ite gt + 801fde4: 4698 movgt r8, r3 + 801fde6: fb92 f8f3 sdivle r8, r2, r3 + 801fdea: 1c63 adds r3, r4, #1 + 801fdec: aa10 add r2, sp, #64 ; 0x40 + 801fdee: f004 0401 and.w r4, r4, #1 + 801fdf2: f04f 0b00 mov.w fp, #0 + 801fdf6: 9308 str r3, [sp, #32] + 801fdf8: 9b00 ldr r3, [sp, #0] + 801fdfa: eb02 1444 add.w r4, r2, r4, lsl #5 + 801fdfe: fb93 f3f8 sdiv r3, r3, r8 + 801fe02: 3404 adds r4, #4 + 801fe04: b29b uxth r3, r3 + 801fe06: 9304 str r3, [sp, #16] + 801fe08: 9a04 ldr r2, [sp, #16] + 801fe0a: f854 3c04 ldr.w r3, [r4, #-4] + 801fe0e: fb13 f302 smulbb r3, r3, r2 + 801fe12: 9a01 ldr r2, [sp, #4] + 801fe14: b29b uxth r3, r3 + 801fe16: 1899 adds r1, r3, r2 + 801fe18: 9305 str r3, [sp, #20] + 801fe1a: f9b6 3004 ldrsh.w r3, [r6, #4] + 801fe1e: b209 sxth r1, r1 + 801fe20: 4299 cmp r1, r3 + 801fe22: db4d blt.n 801fec0 <_ZN8touchgfx9Container16getLastChildNearEssPPNS_8DrawableEPsS4_+0x198> + 801fe24: 8932 ldrh r2, [r6, #8] + 801fe26: 4413 add r3, r2 + 801fe28: b21b sxth r3, r3 + 801fe2a: 4299 cmp r1, r3 + 801fe2c: da48 bge.n 801fec0 <_ZN8touchgfx9Container16getLastChildNearEssPPNS_8DrawableEPsS4_+0x198> + 801fe2e: 9b04 ldr r3, [sp, #16] + 801fe30: 6827 ldr r7, [r4, #0] + 801fe32: fb17 f703 smulbb r7, r7, r3 + 801fe36: 9b02 ldr r3, [sp, #8] + 801fe38: b2bf uxth r7, r7 + 801fe3a: 18fa adds r2, r7, r3 + 801fe3c: f9b6 3006 ldrsh.w r3, [r6, #6] + 801fe40: b212 sxth r2, r2 + 801fe42: 429a cmp r2, r3 + 801fe44: db3c blt.n 801fec0 <_ZN8touchgfx9Container16getLastChildNearEssPPNS_8DrawableEPsS4_+0x198> + 801fe46: 8970 ldrh r0, [r6, #10] + 801fe48: 4403 add r3, r0 + 801fe4a: b21b sxth r3, r3 + 801fe4c: 429a cmp r2, r3 + 801fe4e: da37 bge.n 801fec0 <_ZN8touchgfx9Container16getLastChildNearEssPPNS_8DrawableEPsS4_+0x198> + 801fe50: 2300 movs r3, #0 + 801fe52: 4630 mov r0, r6 + 801fe54: 930b str r3, [sp, #44] ; 0x2c + 801fe56: ab0b add r3, sp, #44 ; 0x2c + 801fe58: f7ff ff36 bl 801fcc8 <_ZN8touchgfx9Container12getLastChildEssPPNS_8DrawableE> + 801fe5c: 9a0b ldr r2, [sp, #44] ; 0x2c + 801fe5e: b37a cbz r2, 801fec0 <_ZN8touchgfx9Container16getLastChildNearEssPPNS_8DrawableEPsS4_+0x198> + 801fe60: 4552 cmp r2, sl + 801fe62: d02d beq.n 801fec0 <_ZN8touchgfx9Container16getLastChildNearEssPPNS_8DrawableEPsS4_+0x198> + 801fe64: 4611 mov r1, r2 + 801fe66: a80e add r0, sp, #56 ; 0x38 + 801fe68: 9209 str r2, [sp, #36] ; 0x24 + 801fe6a: f004 fdd1 bl 8024a10 <_ZNK8touchgfx8Drawable15getAbsoluteRectEv> + 801fe6e: f04f 0e02 mov.w lr, #2 + 801fe72: f9bd 103c ldrsh.w r1, [sp, #60] ; 0x3c + 801fe76: 9a06 ldr r2, [sp, #24] + 801fe78: f9bd 0038 ldrsh.w r0, [sp, #56] ; 0x38 + 801fe7c: 9b01 ldr r3, [sp, #4] + 801fe7e: f9bd c03e ldrsh.w ip, [sp, #62] ; 0x3e + 801fe82: 4413 add r3, r2 + 801fe84: 9a07 ldr r2, [sp, #28] + 801fe86: fb91 f1fe sdiv r1, r1, lr + 801fe8a: fb9c fcfe sdiv ip, ip, lr + 801fe8e: 4401 add r1, r0 + 801fe90: 1a58 subs r0, r3, r1 + 801fe92: 9b02 ldr r3, [sp, #8] + 801fe94: f9bd 103a ldrsh.w r1, [sp, #58] ; 0x3a + 801fe98: 4413 add r3, r2 + 801fe9a: 9a09 ldr r2, [sp, #36] ; 0x24 + 801fe9c: 448c add ip, r1 + 801fe9e: eba3 030c sub.w r3, r3, ip + 801fea2: 435b muls r3, r3 + 801fea4: fb00 3300 mla r3, r0, r0, r3 + 801fea8: 42ab cmp r3, r5 + 801feaa: d208 bcs.n 801febe <_ZN8touchgfx9Container16getLastChildNearEssPPNS_8DrawableEPsS4_+0x196> + 801feac: 990b ldr r1, [sp, #44] ; 0x2c + 801feae: 461d mov r5, r3 + 801feb0: 9803 ldr r0, [sp, #12] + 801feb2: 6001 str r1, [r0, #0] + 801feb4: 992a ldr r1, [sp, #168] ; 0xa8 + 801feb6: 9805 ldr r0, [sp, #20] + 801feb8: 8008 strh r0, [r1, #0] + 801feba: 992b ldr r1, [sp, #172] ; 0xac + 801febc: 800f strh r7, [r1, #0] + 801febe: 4692 mov sl, r2 + 801fec0: f10b 0b01 add.w fp, fp, #1 + 801fec4: 3408 adds r4, #8 + 801fec6: f1bb 0f04 cmp.w fp, #4 + 801feca: d19d bne.n 801fe08 <_ZN8touchgfx9Container16getLastChildNearEssPPNS_8DrawableEPsS4_+0xe0> + 801fecc: 9b00 ldr r3, [sp, #0] + 801fece: 9c08 ldr r4, [sp, #32] + 801fed0: 444b add r3, r9 + 801fed2: 4544 cmp r4, r8 + 801fed4: 9300 str r3, [sp, #0] + 801fed6: d188 bne.n 801fdea <_ZN8touchgfx9Container16getLastChildNearEssPPNS_8DrawableEPsS4_+0xc2> + 801fed8: b021 add sp, #132 ; 0x84 + 801feda: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 801fede: f04f 35ff mov.w r5, #4294967295 + 801fee2: e767 b.n 801fdb4 <_ZN8touchgfx9Container16getLastChildNearEssPPNS_8DrawableEPsS4_+0x8c> + 801fee4: 2001e734 .word 0x2001e734 + 801fee8: 08035828 .word 0x08035828 + +0801feec <_ZN8touchgfx4RectaNERKS0_>: + 801feec: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} + 801fef0: f9b1 7000 ldrsh.w r7, [r1] + 801fef4: 888c ldrh r4, [r1, #4] + 801fef6: f9b0 9000 ldrsh.w r9, [r0] + 801fefa: 443c add r4, r7 + 801fefc: b2a4 uxth r4, r4 + 801fefe: fa0f f884 sxth.w r8, r4 + 801ff02: 45c1 cmp r9, r8 + 801ff04: da2f bge.n 801ff66 <_ZN8touchgfx4RectaNERKS0_+0x7a> + 801ff06: 8882 ldrh r2, [r0, #4] + 801ff08: 444a add r2, r9 + 801ff0a: b292 uxth r2, r2 + 801ff0c: fa0f fe82 sxth.w lr, r2 + 801ff10: 4577 cmp r7, lr + 801ff12: da28 bge.n 801ff66 <_ZN8touchgfx4RectaNERKS0_+0x7a> + 801ff14: f9b1 5002 ldrsh.w r5, [r1, #2] + 801ff18: 88cb ldrh r3, [r1, #6] + 801ff1a: f9b0 6002 ldrsh.w r6, [r0, #2] + 801ff1e: 442b add r3, r5 + 801ff20: b21b sxth r3, r3 + 801ff22: 429e cmp r6, r3 + 801ff24: da1f bge.n 801ff66 <_ZN8touchgfx4RectaNERKS0_+0x7a> + 801ff26: 88c3 ldrh r3, [r0, #6] + 801ff28: 4433 add r3, r6 + 801ff2a: b29b uxth r3, r3 + 801ff2c: fa0f fc83 sxth.w ip, r3 + 801ff30: 4565 cmp r5, ip + 801ff32: da18 bge.n 801ff66 <_ZN8touchgfx4RectaNERKS0_+0x7a> + 801ff34: 454f cmp r7, r9 + 801ff36: bfb8 it lt + 801ff38: 464f movlt r7, r9 + 801ff3a: 42b5 cmp r5, r6 + 801ff3c: bfb8 it lt + 801ff3e: 4635 movlt r5, r6 + 801ff40: 45f0 cmp r8, lr + 801ff42: bfd8 it le + 801ff44: 4622 movle r2, r4 + 801ff46: 1bd2 subs r2, r2, r7 + 801ff48: 8082 strh r2, [r0, #4] + 801ff4a: 884a ldrh r2, [r1, #2] + 801ff4c: 88c9 ldrh r1, [r1, #6] + 801ff4e: 8007 strh r7, [r0, #0] + 801ff50: 440a add r2, r1 + 801ff52: 8045 strh r5, [r0, #2] + 801ff54: b292 uxth r2, r2 + 801ff56: b211 sxth r1, r2 + 801ff58: 458c cmp ip, r1 + 801ff5a: bfa8 it ge + 801ff5c: 4613 movge r3, r2 + 801ff5e: 1b5b subs r3, r3, r5 + 801ff60: 80c3 strh r3, [r0, #6] + 801ff62: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} + 801ff66: 2300 movs r3, #0 + 801ff68: 8003 strh r3, [r0, #0] + 801ff6a: 8043 strh r3, [r0, #2] + 801ff6c: 8083 strh r3, [r0, #4] + 801ff6e: 80c3 strh r3, [r0, #6] + 801ff70: e7f7 b.n 801ff62 <_ZN8touchgfx4RectaNERKS0_+0x76> + +0801ff72 <_ZNK8touchgfx4Rect7isEmptyEv>: + 801ff72: f9b0 3004 ldrsh.w r3, [r0, #4] + 801ff76: 2b00 cmp r3, #0 + 801ff78: dd06 ble.n 801ff88 <_ZNK8touchgfx4Rect7isEmptyEv+0x16> + 801ff7a: f9b0 0006 ldrsh.w r0, [r0, #6] + 801ff7e: 2800 cmp r0, #0 + 801ff80: bfcc ite gt + 801ff82: 2000 movgt r0, #0 + 801ff84: 2001 movle r0, #1 + 801ff86: 4770 bx lr + 801ff88: 2001 movs r0, #1 + 801ff8a: 4770 bx lr + +0801ff8c <_ZNK8touchgfx9Container16getContainedAreaEv>: + 801ff8c: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} + 801ff90: 2300 movs r3, #0 + 801ff92: 4604 mov r4, r0 + 801ff94: 6a8d ldr r5, [r1, #40] ; 0x28 + 801ff96: 8003 strh r3, [r0, #0] + 801ff98: 8043 strh r3, [r0, #2] + 801ff9a: 8083 strh r3, [r0, #4] + 801ff9c: 80c3 strh r3, [r0, #6] + 801ff9e: 2d00 cmp r5, #0 + 801ffa0: d040 beq.n 8020024 <_ZNK8touchgfx9Container16getContainedAreaEv+0x98> + 801ffa2: 1d28 adds r0, r5, #4 + 801ffa4: f7ff ffe5 bl 801ff72 <_ZNK8touchgfx4Rect7isEmptyEv> + 801ffa8: b988 cbnz r0, 801ffce <_ZNK8touchgfx9Container16getContainedAreaEv+0x42> + 801ffaa: 4620 mov r0, r4 + 801ffac: f7ff ffe1 bl 801ff72 <_ZNK8touchgfx4Rect7isEmptyEv> + 801ffb0: f9b5 2004 ldrsh.w r2, [r5, #4] + 801ffb4: f9b5 3006 ldrsh.w r3, [r5, #6] + 801ffb8: f9b5 e008 ldrsh.w lr, [r5, #8] + 801ffbc: f9b5 c00a ldrsh.w ip, [r5, #10] + 801ffc0: b138 cbz r0, 801ffd2 <_ZNK8touchgfx9Container16getContainedAreaEv+0x46> + 801ffc2: 8022 strh r2, [r4, #0] + 801ffc4: 8063 strh r3, [r4, #2] + 801ffc6: f8a4 e004 strh.w lr, [r4, #4] + 801ffca: f8a4 c006 strh.w ip, [r4, #6] + 801ffce: 69ad ldr r5, [r5, #24] + 801ffd0: e7e5 b.n 801ff9e <_ZNK8touchgfx9Container16getContainedAreaEv+0x12> + 801ffd2: f9b4 0000 ldrsh.w r0, [r4] + 801ffd6: f9b4 1002 ldrsh.w r1, [r4, #2] + 801ffda: 4290 cmp r0, r2 + 801ffdc: 4607 mov r7, r0 + 801ffde: f8b4 8004 ldrh.w r8, [r4, #4] + 801ffe2: 460e mov r6, r1 + 801ffe4: bfa8 it ge + 801ffe6: 4617 movge r7, r2 + 801ffe8: 4299 cmp r1, r3 + 801ffea: 4472 add r2, lr + 801ffec: f8b4 e006 ldrh.w lr, [r4, #6] + 801fff0: bfa8 it ge + 801fff2: 461e movge r6, r3 + 801fff4: 4440 add r0, r8 + 801fff6: 4471 add r1, lr + 801fff8: 4463 add r3, ip + 801fffa: b200 sxth r0, r0 + 801fffc: 8027 strh r7, [r4, #0] + 801fffe: b212 sxth r2, r2 + 8020000: 8066 strh r6, [r4, #2] + 8020002: b209 sxth r1, r1 + 8020004: b21b sxth r3, r3 + 8020006: 4290 cmp r0, r2 + 8020008: bfac ite ge + 802000a: ebc7 0200 rsbge r2, r7, r0 + 802000e: ebc7 0202 rsblt r2, r7, r2 + 8020012: 4299 cmp r1, r3 + 8020014: bfac ite ge + 8020016: ebc6 0301 rsbge r3, r6, r1 + 802001a: ebc6 0303 rsblt r3, r6, r3 + 802001e: 80a2 strh r2, [r4, #4] + 8020020: 80e3 strh r3, [r4, #6] + 8020022: e7d4 b.n 801ffce <_ZNK8touchgfx9Container16getContainedAreaEv+0x42> + 8020024: 4620 mov r0, r4 + 8020026: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + +0802002a <_ZNK8touchgfx9Container4drawERKNS_4RectE>: + 802002a: e92d 41f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, lr} + 802002e: f890 3025 ldrb.w r3, [r0, #37] ; 0x25 + 8020032: b383 cbz r3, 8020096 <_ZNK8touchgfx9Container4drawERKNS_4RectE+0x6c> + 8020034: 6a84 ldr r4, [r0, #40] ; 0x28 + 8020036: b374 cbz r4, 8020096 <_ZNK8touchgfx9Container4drawERKNS_4RectE+0x6c> + 8020038: f9b1 5000 ldrsh.w r5, [r1] + 802003c: f9b1 6002 ldrsh.w r6, [r1, #2] + 8020040: f9b1 7004 ldrsh.w r7, [r1, #4] + 8020044: f9b1 8006 ldrsh.w r8, [r1, #6] + 8020048: f894 3025 ldrb.w r3, [r4, #37] ; 0x25 + 802004c: b303 cbz r3, 8020090 <_ZNK8touchgfx9Container4drawERKNS_4RectE+0x66> + 802004e: 4668 mov r0, sp + 8020050: 1d21 adds r1, r4, #4 + 8020052: f8ad 5000 strh.w r5, [sp] + 8020056: f8ad 6002 strh.w r6, [sp, #2] + 802005a: f8ad 7004 strh.w r7, [sp, #4] + 802005e: f8ad 8006 strh.w r8, [sp, #6] + 8020062: f7ff ff43 bl 801feec <_ZN8touchgfx4RectaNERKS0_> + 8020066: 4668 mov r0, sp + 8020068: f7ff ff83 bl 801ff72 <_ZNK8touchgfx4Rect7isEmptyEv> + 802006c: b980 cbnz r0, 8020090 <_ZNK8touchgfx9Container4drawERKNS_4RectE+0x66> + 802006e: f8bd 3000 ldrh.w r3, [sp] + 8020072: 4669 mov r1, sp + 8020074: 88a2 ldrh r2, [r4, #4] + 8020076: 4620 mov r0, r4 + 8020078: 1a9b subs r3, r3, r2 + 802007a: 88e2 ldrh r2, [r4, #6] + 802007c: f8ad 3000 strh.w r3, [sp] + 8020080: f8bd 3002 ldrh.w r3, [sp, #2] + 8020084: 1a9b subs r3, r3, r2 + 8020086: f8ad 3002 strh.w r3, [sp, #2] + 802008a: 6823 ldr r3, [r4, #0] + 802008c: 689b ldr r3, [r3, #8] + 802008e: 4798 blx r3 + 8020090: 69a4 ldr r4, [r4, #24] + 8020092: 2c00 cmp r4, #0 + 8020094: d1d8 bne.n 8020048 <_ZNK8touchgfx9Container4drawERKNS_4RectE+0x1e> + 8020096: b002 add sp, #8 + 8020098: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + +0802009c <_ZN8touchgfx9Container14setupDrawChainERKNS_4RectEPPNS_8DrawableE>: + 802009c: b573 push {r0, r1, r4, r5, r6, lr} + 802009e: f890 3025 ldrb.w r3, [r0, #37] ; 0x25 + 80200a2: 460d mov r5, r1 + 80200a4: 4616 mov r6, r2 + 80200a6: b323 cbz r3, 80200f2 <_ZN8touchgfx9Container14setupDrawChainERKNS_4RectEPPNS_8DrawableE+0x56> + 80200a8: 6a84 ldr r4, [r0, #40] ; 0x28 + 80200aa: b314 cbz r4, 80200f2 <_ZN8touchgfx9Container14setupDrawChainERKNS_4RectEPPNS_8DrawableE+0x56> + 80200ac: f894 3025 ldrb.w r3, [r4, #37] ; 0x25 + 80200b0: b1eb cbz r3, 80200ee <_ZN8touchgfx9Container14setupDrawChainERKNS_4RectEPPNS_8DrawableE+0x52> + 80200b2: 6828 ldr r0, [r5, #0] + 80200b4: 466b mov r3, sp + 80200b6: 6869 ldr r1, [r5, #4] + 80200b8: c303 stmia r3!, {r0, r1} + 80200ba: 4668 mov r0, sp + 80200bc: 1d21 adds r1, r4, #4 + 80200be: f7ff ff15 bl 801feec <_ZN8touchgfx4RectaNERKS0_> + 80200c2: 4668 mov r0, sp + 80200c4: f7ff ff55 bl 801ff72 <_ZNK8touchgfx4Rect7isEmptyEv> + 80200c8: b988 cbnz r0, 80200ee <_ZN8touchgfx9Container14setupDrawChainERKNS_4RectEPPNS_8DrawableE+0x52> + 80200ca: f8bd 3000 ldrh.w r3, [sp] + 80200ce: 4669 mov r1, sp + 80200d0: 88a2 ldrh r2, [r4, #4] + 80200d2: 4620 mov r0, r4 + 80200d4: 1a9b subs r3, r3, r2 + 80200d6: 88e2 ldrh r2, [r4, #6] + 80200d8: f8ad 3000 strh.w r3, [sp] + 80200dc: f8bd 3002 ldrh.w r3, [sp, #2] + 80200e0: 1a9b subs r3, r3, r2 + 80200e2: 4632 mov r2, r6 + 80200e4: f8ad 3002 strh.w r3, [sp, #2] + 80200e8: 6823 ldr r3, [r4, #0] + 80200ea: 6ddb ldr r3, [r3, #92] ; 0x5c + 80200ec: 4798 blx r3 + 80200ee: 69a4 ldr r4, [r4, #24] + 80200f0: e7db b.n 80200aa <_ZN8touchgfx9Container14setupDrawChainERKNS_4RectEPPNS_8DrawableE+0xe> + 80200f2: b002 add sp, #8 + 80200f4: bd70 pop {r4, r5, r6, pc} + +080200f6 <_ZNK8touchgfx6Slider15getIndicatorMinEv>: + 80200f6: f9b0 00e4 ldrsh.w r0, [r0, #228] ; 0xe4 + 80200fa: 4770 bx lr + +080200fc <_ZNK8touchgfx6Slider15getIndicatorMaxEv>: + 80200fc: f9b0 00e6 ldrsh.w r0, [r0, #230] ; 0xe6 + 8020100: 4770 bx lr + +08020102 <_ZNK8touchgfx6Slider11getMinValueEv>: + 8020102: f9b0 0030 ldrsh.w r0, [r0, #48] ; 0x30 + 8020106: 4770 bx lr + +08020108 <_ZNK8touchgfx6Slider11getMaxValueEv>: + 8020108: f9b0 0032 ldrsh.w r0, [r0, #50] ; 0x32 + 802010c: 4770 bx lr + +0802010e <_ZN8touchgfx6Slider8setValueEs>: + 802010e: b570 push {r4, r5, r6, lr} + 8020110: 6803 ldr r3, [r0, #0] + 8020112: 4604 mov r4, r0 + 8020114: e9d3 532b ldrd r5, r3, [r3, #172] ; 0xac + 8020118: 4798 blx r3 + 802011a: 4601 mov r1, r0 + 802011c: 462b mov r3, r5 + 802011e: 4620 mov r0, r4 + 8020120: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} + 8020124: 4718 bx r3 + +08020126 <_ZN8touchgfx6Slider15handleDragEventERKNS_9DragEventE>: + 8020126: b570 push {r4, r5, r6, lr} + 8020128: 6803 ldr r3, [r0, #0] + 802012a: 4604 mov r4, r0 + 802012c: f890 202c ldrb.w r2, [r0, #44] ; 0x2c + 8020130: f8d3 60ac ldr.w r6, [r3, #172] ; 0xac + 8020134: b95a cbnz r2, 802014e <_ZN8touchgfx6Slider15handleDragEventERKNS_9DragEventE+0x28> + 8020136: 894d ldrh r5, [r1, #10] + 8020138: f8d3 30b8 ldr.w r3, [r3, #184] ; 0xb8 + 802013c: 4620 mov r0, r4 + 802013e: 4798 blx r3 + 8020140: 1a29 subs r1, r5, r0 + 8020142: 4633 mov r3, r6 + 8020144: 4620 mov r0, r4 + 8020146: b209 sxth r1, r1 + 8020148: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} + 802014c: 4718 bx r3 + 802014e: 898d ldrh r5, [r1, #12] + 8020150: e7f2 b.n 8020138 <_ZN8touchgfx6Slider15handleDragEventERKNS_9DragEventE+0x12> + +08020152 <_ZNK8touchgfx6Slider18getIndicatorRadiusEv>: + 8020152: f890 202c ldrb.w r2, [r0, #44] ; 0x2c + 8020156: 2302 movs r3, #2 + 8020158: b922 cbnz r2, 8020164 <_ZNK8touchgfx6Slider18getIndicatorRadiusEv+0x12> + 802015a: f9b0 0094 ldrsh.w r0, [r0, #148] ; 0x94 + 802015e: fb90 f0f3 sdiv r0, r0, r3 + 8020162: 4770 bx lr + 8020164: f9b0 0096 ldrsh.w r0, [r0, #150] ; 0x96 + 8020168: e7f9 b.n 802015e <_ZNK8touchgfx6Slider18getIndicatorRadiusEv+0xc> + +0802016a <_ZN8touchgfx6Slider13setValueRangeEsss>: + 802016a: 8642 strh r2, [r0, #50] ; 0x32 + 802016c: 6802 ldr r2, [r0, #0] + 802016e: 8601 strh r1, [r0, #48] ; 0x30 + 8020170: 4619 mov r1, r3 + 8020172: b410 push {r4} + 8020174: f85d 4b04 ldr.w r4, [sp], #4 + 8020178: f8d2 20a8 ldr.w r2, [r2, #168] ; 0xa8 + 802017c: 4710 bx r2 + +0802017e <_ZN8touchgfx6Slider13setValueRangeEss>: + 802017e: f9b0 302e ldrsh.w r3, [r0, #46] ; 0x2e + 8020182: 428b cmp r3, r1 + 8020184: b410 push {r4} + 8020186: db09 blt.n 802019c <_ZN8touchgfx6Slider13setValueRangeEss+0x1e> + 8020188: 4293 cmp r3, r2 + 802018a: bfa8 it ge + 802018c: 4613 movge r3, r2 + 802018e: 6804 ldr r4, [r0, #0] + 8020190: f8d4 4098 ldr.w r4, [r4, #152] ; 0x98 + 8020194: 46a4 mov ip, r4 + 8020196: f85d 4b04 ldr.w r4, [sp], #4 + 802019a: 4760 bx ip + 802019c: 460b mov r3, r1 + 802019e: e7f6 b.n 802018e <_ZN8touchgfx6Slider13setValueRangeEss+0x10> + +080201a0 <_ZNK8touchgfx6Slider29getIndicatorPositionRangeSizeEv>: + 80201a0: f9b0 20e6 ldrsh.w r2, [r0, #230] ; 0xe6 + 80201a4: f9b0 00e4 ldrsh.w r0, [r0, #228] ; 0xe4 + 80201a8: 1a10 subs r0, r2, r0 + 80201aa: 4770 bx lr + +080201ac <_ZNK8touchgfx6Slider17getValueRangeSizeEv>: + 80201ac: f9b0 2032 ldrsh.w r2, [r0, #50] ; 0x32 + 80201b0: f9b0 0030 ldrsh.w r0, [r0, #48] ; 0x30 + 80201b4: 1a10 subs r0, r2, r0 + 80201b6: 4770 bx lr + +080201b8 <_ZN8touchgfx6SliderD1Ev>: + 80201b8: 4770 bx lr + +080201ba <_ZN8touchgfx6SliderD0Ev>: + 80201ba: b510 push {r4, lr} + 80201bc: 4604 mov r4, r0 + 80201be: 21f4 movs r1, #244 ; 0xf4 + 80201c0: f014 f899 bl 80342f6 <_ZdlPvj> + 80201c4: 4620 mov r0, r4 + 80201c6: bd10 pop {r4, pc} + +080201c8 <_ZNK8touchgfx6Slider15valueToPositionEi>: + 80201c8: b570 push {r4, r5, r6, lr} + 80201ca: f9b0 5032 ldrsh.w r5, [r0, #50] ; 0x32 + 80201ce: 4604 mov r4, r0 + 80201d0: f9b0 3030 ldrsh.w r3, [r0, #48] ; 0x30 + 80201d4: 428d cmp r5, r1 + 80201d6: bfa8 it ge + 80201d8: 460d movge r5, r1 + 80201da: 429d cmp r5, r3 + 80201dc: bfac ite ge + 80201de: ebc3 0505 rsbge r5, r3, r5 + 80201e2: ebc3 0503 rsblt r5, r3, r3 + 80201e6: 6803 ldr r3, [r0, #0] + 80201e8: f8d3 30bc ldr.w r3, [r3, #188] ; 0xbc + 80201ec: 4798 blx r3 + 80201ee: 6823 ldr r3, [r4, #0] + 80201f0: 4606 mov r6, r0 + 80201f2: 4620 mov r0, r4 + 80201f4: f8d3 30c0 ldr.w r3, [r3, #192] ; 0xc0 + 80201f8: 4798 blx r3 + 80201fa: 4631 mov r1, r6 + 80201fc: 4602 mov r2, r0 + 80201fe: 4628 mov r0, r5 + 8020200: f004 fd35 bl 8024c6e <_ZN8touchgfx6muldivElll> + 8020204: f894 302c ldrb.w r3, [r4, #44] ; 0x2c + 8020208: 2b01 cmp r3, #1 + 802020a: bf0b itete eq + 802020c: f8b4 30e6 ldrheq.w r3, [r4, #230] ; 0xe6 + 8020210: f8b4 30e4 ldrhne.w r3, [r4, #228] ; 0xe4 + 8020214: 1a18 subeq r0, r3, r0 + 8020216: 18c0 addne r0, r0, r3 + 8020218: b200 sxth r0, r0 + 802021a: bd70 pop {r4, r5, r6, pc} + +0802021c <_ZNK8touchgfx6Slider15positionToValueEs>: + 802021c: b5f8 push {r3, r4, r5, r6, r7, lr} + 802021e: f9b0 30e6 ldrsh.w r3, [r0, #230] ; 0xe6 + 8020222: 4605 mov r5, r0 + 8020224: f9b0 40e4 ldrsh.w r4, [r0, #228] ; 0xe4 + 8020228: 4299 cmp r1, r3 + 802022a: f890 202c ldrb.w r2, [r0, #44] ; 0x2c + 802022e: f9b0 6030 ldrsh.w r6, [r0, #48] ; 0x30 + 8020232: bfa8 it ge + 8020234: 4619 movge r1, r3 + 8020236: 42a1 cmp r1, r4 + 8020238: bfb8 it lt + 802023a: 4621 movlt r1, r4 + 802023c: 2a01 cmp r2, #1 + 802023e: b289 uxth r1, r1 + 8020240: bf08 it eq + 8020242: 1a5c subeq r4, r3, r1 + 8020244: 6803 ldr r3, [r0, #0] + 8020246: bf18 it ne + 8020248: 1b0c subne r4, r1, r4 + 802024a: f8d3 30c0 ldr.w r3, [r3, #192] ; 0xc0 + 802024e: 4798 blx r3 + 8020250: 682b ldr r3, [r5, #0] + 8020252: 4607 mov r7, r0 + 8020254: b224 sxth r4, r4 + 8020256: f8d3 30bc ldr.w r3, [r3, #188] ; 0xbc + 802025a: 4628 mov r0, r5 + 802025c: 4798 blx r3 + 802025e: 4639 mov r1, r7 + 8020260: 4602 mov r2, r0 + 8020262: 4620 mov r0, r4 + 8020264: f004 fd03 bl 8024c6e <_ZN8touchgfx6muldivElll> + 8020268: 4430 add r0, r6 + 802026a: bdf8 pop {r3, r4, r5, r6, r7, pc} + +0802026c <_ZN8touchgfx6Slider16handleClickEventERKNS_10ClickEventE>: + 802026c: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} + 8020270: 790b ldrb r3, [r1, #4] + 8020272: 4604 mov r4, r0 + 8020274: 460d mov r5, r1 + 8020276: b32b cbz r3, 80202c4 <_ZN8touchgfx6Slider16handleClickEventERKNS_10ClickEventE+0x58> + 8020278: 2b01 cmp r3, #1 + 802027a: d137 bne.n 80202ec <_ZN8touchgfx6Slider16handleClickEventERKNS_10ClickEventE+0x80> + 802027c: 6823 ldr r3, [r4, #0] + 802027e: f894 202c ldrb.w r2, [r4, #44] ; 0x2c + 8020282: f8d3 70ac ldr.w r7, [r3, #172] ; 0xac + 8020286: 2a00 cmp r2, #0 + 8020288: d12e bne.n 80202e8 <_ZN8touchgfx6Slider16handleClickEventERKNS_10ClickEventE+0x7c> + 802028a: 88ee ldrh r6, [r5, #6] + 802028c: f8d3 30b8 ldr.w r3, [r3, #184] ; 0xb8 + 8020290: 4620 mov r0, r4 + 8020292: 4798 blx r3 + 8020294: 1a31 subs r1, r6, r0 + 8020296: 4620 mov r0, r4 + 8020298: b209 sxth r1, r1 + 802029a: 47b8 blx r7 + 802029c: 792b ldrb r3, [r5, #4] + 802029e: 2b01 cmp r3, #1 + 80202a0: d124 bne.n 80202ec <_ZN8touchgfx6Slider16handleClickEventERKNS_10ClickEventE+0x80> + 80202a2: f8d4 00ec ldr.w r0, [r4, #236] ; 0xec + 80202a6: b308 cbz r0, 80202ec <_ZN8touchgfx6Slider16handleClickEventERKNS_10ClickEventE+0x80> + 80202a8: 6803 ldr r3, [r0, #0] + 80202aa: 68db ldr r3, [r3, #12] + 80202ac: 4798 blx r3 + 80202ae: b1e8 cbz r0, 80202ec <_ZN8touchgfx6Slider16handleClickEventERKNS_10ClickEventE+0x80> + 80202b0: f8d4 00ec ldr.w r0, [r4, #236] ; 0xec + 80202b4: 4621 mov r1, r4 + 80202b6: f9b4 202e ldrsh.w r2, [r4, #46] ; 0x2e + 80202ba: 6803 ldr r3, [r0, #0] + 80202bc: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} + 80202c0: 689b ldr r3, [r3, #8] + 80202c2: 4718 bx r3 + 80202c4: f8d0 00e8 ldr.w r0, [r0, #232] ; 0xe8 + 80202c8: 2800 cmp r0, #0 + 80202ca: d0d7 beq.n 802027c <_ZN8touchgfx6Slider16handleClickEventERKNS_10ClickEventE+0x10> + 80202cc: 6803 ldr r3, [r0, #0] + 80202ce: 68db ldr r3, [r3, #12] + 80202d0: 4798 blx r3 + 80202d2: 2800 cmp r0, #0 + 80202d4: d0d2 beq.n 802027c <_ZN8touchgfx6Slider16handleClickEventERKNS_10ClickEventE+0x10> + 80202d6: f8d4 00e8 ldr.w r0, [r4, #232] ; 0xe8 + 80202da: 4621 mov r1, r4 + 80202dc: f9b4 202e ldrsh.w r2, [r4, #46] ; 0x2e + 80202e0: 6803 ldr r3, [r0, #0] + 80202e2: 689b ldr r3, [r3, #8] + 80202e4: 4798 blx r3 + 80202e6: e7c9 b.n 802027c <_ZN8touchgfx6Slider16handleClickEventERKNS_10ClickEventE+0x10> + 80202e8: 892e ldrh r6, [r5, #8] + 80202ea: e7cf b.n 802028c <_ZN8touchgfx6Slider16handleClickEventERKNS_10ClickEventE+0x20> + 80202ec: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + +080202f0 <_ZN8touchgfx8DrawableC1Ev>: + 80202f0: 4a0a ldr r2, [pc, #40] ; (802031c <_ZN8touchgfx8DrawableC1Ev+0x2c>) + 80202f2: 6002 str r2, [r0, #0] + 80202f4: 2200 movs r2, #0 + 80202f6: 8082 strh r2, [r0, #4] + 80202f8: 80c2 strh r2, [r0, #6] + 80202fa: 8102 strh r2, [r0, #8] + 80202fc: 8142 strh r2, [r0, #10] + 80202fe: 8182 strh r2, [r0, #12] + 8020300: 81c2 strh r2, [r0, #14] + 8020302: 8202 strh r2, [r0, #16] + 8020304: 8242 strh r2, [r0, #18] + 8020306: 61c2 str r2, [r0, #28] + 8020308: 8402 strh r2, [r0, #32] + 802030a: 8442 strh r2, [r0, #34] ; 0x22 + 802030c: f880 2024 strb.w r2, [r0, #36] ; 0x24 + 8020310: e9c0 2205 strd r2, r2, [r0, #20] + 8020314: 2201 movs r2, #1 + 8020316: f880 2025 strb.w r2, [r0, #37] ; 0x25 + 802031a: 4770 bx lr + 802031c: 0803c66c .word 0x0803c66c + +08020320 <_ZN8touchgfx8Drawable14setWidthHeightEss>: + 8020320: b570 push {r4, r5, r6, lr} + 8020322: 6803 ldr r3, [r0, #0] + 8020324: 4604 mov r4, r0 + 8020326: 4615 mov r5, r2 + 8020328: 6b9b ldr r3, [r3, #56] ; 0x38 + 802032a: 4798 blx r3 + 802032c: 6823 ldr r3, [r4, #0] + 802032e: 4629 mov r1, r5 + 8020330: 4620 mov r0, r4 + 8020332: 6bdb ldr r3, [r3, #60] ; 0x3c + 8020334: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} + 8020338: 4718 bx r3 + +0802033a <_ZN8touchgfx6Slider23updateIndicatorPositionEs>: + 802033a: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} + 802033e: f9b0 80e4 ldrsh.w r8, [r0, #228] ; 0xe4 + 8020342: 4604 mov r4, r0 + 8020344: 308c adds r0, #140 ; 0x8c + 8020346: 4588 cmp r8, r1 + 8020348: f894 302c ldrb.w r3, [r4, #44] ; 0x2c + 802034c: f104 06b8 add.w r6, r4, #184 ; 0xb8 + 8020350: bfb8 it lt + 8020352: 4688 movlt r8, r1 + 8020354: f9b0 105a ldrsh.w r1, [r0, #90] ; 0x5a + 8020358: 4588 cmp r8, r1 + 802035a: bfa8 it ge + 802035c: 4688 movge r8, r1 + 802035e: fa1f f788 uxth.w r7, r8 + 8020362: 2b00 cmp r3, #0 + 8020364: d130 bne.n 80203c8 <_ZN8touchgfx6Slider23updateIndicatorPositionEs+0x8e> + 8020366: f9b4 2092 ldrsh.w r2, [r4, #146] ; 0x92 + 802036a: 4641 mov r1, r8 + 802036c: f7e3 ff7b bl 8004266 <_ZN8touchgfx8Drawable6moveToEss> + 8020370: 4630 mov r0, r6 + 8020372: f004 fab2 bl 80248da <_ZNK8touchgfx8Drawable10invalidateEv> + 8020376: f8b4 20bc ldrh.w r2, [r4, #188] ; 0xbc + 802037a: 6823 ldr r3, [r4, #0] + 802037c: 4620 mov r0, r4 + 802037e: 1abf subs r7, r7, r2 + 8020380: f8d3 30b8 ldr.w r3, [r3, #184] ; 0xb8 + 8020384: b2bf uxth r7, r7 + 8020386: 4798 blx r3 + 8020388: 4407 add r7, r0 + 802038a: f8a4 70c0 strh.w r7, [r4, #192] ; 0xc0 + 802038e: 4630 mov r0, r6 + 8020390: f004 faa3 bl 80248da <_ZNK8touchgfx8Drawable10invalidateEv> + 8020394: 6823 ldr r3, [r4, #0] + 8020396: 4641 mov r1, r8 + 8020398: 4620 mov r0, r4 + 802039a: f8d3 30b4 ldr.w r3, [r3, #180] ; 0xb4 + 802039e: 4798 blx r3 + 80203a0: 85e0 strh r0, [r4, #46] ; 0x2e + 80203a2: f8d4 00f0 ldr.w r0, [r4, #240] ; 0xf0 + 80203a6: 2800 cmp r0, #0 + 80203a8: d03c beq.n 8020424 <_ZN8touchgfx6Slider23updateIndicatorPositionEs+0xea> + 80203aa: 6803 ldr r3, [r0, #0] + 80203ac: 68db ldr r3, [r3, #12] + 80203ae: 4798 blx r3 + 80203b0: 2800 cmp r0, #0 + 80203b2: d037 beq.n 8020424 <_ZN8touchgfx6Slider23updateIndicatorPositionEs+0xea> + 80203b4: f8d4 00f0 ldr.w r0, [r4, #240] ; 0xf0 + 80203b8: 4621 mov r1, r4 + 80203ba: f9b4 202e ldrsh.w r2, [r4, #46] ; 0x2e + 80203be: 6803 ldr r3, [r0, #0] + 80203c0: e8bd 47f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, lr} + 80203c4: 689b ldr r3, [r3, #8] + 80203c6: 4718 bx r3 + 80203c8: 4642 mov r2, r8 + 80203ca: f9b4 1090 ldrsh.w r1, [r4, #144] ; 0x90 + 80203ce: f7e3 ff4a bl 8004266 <_ZN8touchgfx8Drawable6moveToEss> + 80203d2: 4630 mov r0, r6 + 80203d4: f004 fa81 bl 80248da <_ZNK8touchgfx8Drawable10invalidateEv> + 80203d8: 8f60 ldrh r0, [r4, #58] ; 0x3a + 80203da: 8fe5 ldrh r5, [r4, #62] ; 0x3e + 80203dc: 6823 ldr r3, [r4, #0] + 80203de: 4405 add r5, r0 + 80203e0: 4620 mov r0, r4 + 80203e2: f8d3 30b8 ldr.w r3, [r3, #184] ; 0xb8 + 80203e6: b2ad uxth r5, r5 + 80203e8: 4798 blx r3 + 80203ea: 6823 ldr r3, [r4, #0] + 80203ec: 1bed subs r5, r5, r7 + 80203ee: f9b4 a0bc ldrsh.w sl, [r4, #188] ; 0xbc + 80203f2: f8d3 30b8 ldr.w r3, [r3, #184] ; 0xb8 + 80203f6: 1a2d subs r5, r5, r0 + 80203f8: 4620 mov r0, r4 + 80203fa: 4798 blx r3 + 80203fc: 4438 add r0, r7 + 80203fe: b2ad uxth r5, r5 + 8020400: f9b4 90c0 ldrsh.w r9, [r4, #192] ; 0xc0 + 8020404: b202 sxth r2, r0 + 8020406: 4651 mov r1, sl + 8020408: 4630 mov r0, r6 + 802040a: f7e3 ffbc bl 8004386 <_ZN8touchgfx8Drawable5setXYEss> + 802040e: 4630 mov r0, r6 + 8020410: b22a sxth r2, r5 + 8020412: 4649 mov r1, r9 + 8020414: f7ff ff84 bl 8020320 <_ZN8touchgfx8Drawable14setWidthHeightEss> + 8020418: f8b4 006a ldrh.w r0, [r4, #106] ; 0x6a + 802041c: 1a2d subs r5, r5, r0 + 802041e: f8a4 5066 strh.w r5, [r4, #102] ; 0x66 + 8020422: e7b4 b.n 802038e <_ZN8touchgfx6Slider23updateIndicatorPositionEs+0x54> + 8020424: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + +08020428 <_ZN8touchgfx8Drawable11setPositionERKS0_>: + 8020428: b570 push {r4, r5, r6, lr} + 802042a: 4604 mov r4, r0 + 802042c: f9b1 5008 ldrsh.w r5, [r1, #8] + 8020430: f9b1 600a ldrsh.w r6, [r1, #10] + 8020434: f9b1 2006 ldrsh.w r2, [r1, #6] + 8020438: f9b1 1004 ldrsh.w r1, [r1, #4] + 802043c: f7e3 ffa3 bl 8004386 <_ZN8touchgfx8Drawable5setXYEss> + 8020440: 4632 mov r2, r6 + 8020442: 4629 mov r1, r5 + 8020444: 4620 mov r0, r4 + 8020446: f7ff ff6b bl 8020320 <_ZN8touchgfx8Drawable14setWidthHeightEss> + 802044a: bd70 pop {r4, r5, r6, pc} + +0802044c <_ZN8touchgfx6Slider21setupHorizontalSliderEsssss>: + 802044c: e92d 4ff1 stmdb sp!, {r0, r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8020450: f04f 0a00 mov.w sl, #0 + 8020454: f100 0b34 add.w fp, r0, #52 ; 0x34 + 8020458: 4604 mov r4, r0 + 802045a: 461d mov r5, r3 + 802045c: f880 a02c strb.w sl, [r0, #44] ; 0x2c + 8020460: 4658 mov r0, fp + 8020462: 4690 mov r8, r2 + 8020464: f9bd 602c ldrsh.w r6, [sp, #44] ; 0x2c + 8020468: 4689 mov r9, r1 + 802046a: f9bd 7028 ldrsh.w r7, [sp, #40] ; 0x28 + 802046e: f7e3 ff8a bl 8004386 <_ZN8touchgfx8Drawable5setXYEss> + 8020472: 4659 mov r1, fp + 8020474: f104 00b8 add.w r0, r4, #184 ; 0xb8 + 8020478: f7ff ffd6 bl 8020428 <_ZN8touchgfx8Drawable11setPositionERKS0_> + 802047c: 4652 mov r2, sl + 802047e: 4651 mov r1, sl + 8020480: f104 0060 add.w r0, r4, #96 ; 0x60 + 8020484: f7e3 ff7f bl 8004386 <_ZN8touchgfx8Drawable5setXYEss> + 8020488: 8fe2 ldrh r2, [r4, #62] ; 0x3e + 802048a: 8fa1 ldrh r1, [r4, #60] ; 0x3c + 802048c: 4620 mov r0, r4 + 802048e: 4490 add r8, r2 + 8020490: f8b4 2096 ldrh.w r2, [r4, #150] ; 0x96 + 8020494: f8a4 5092 strh.w r5, [r4, #146] ; 0x92 + 8020498: 4489 add r9, r1 + 802049a: 4415 add r5, r2 + 802049c: f8b4 1094 ldrh.w r1, [r4, #148] ; 0x94 + 80204a0: fa0f f288 sxth.w r2, r8 + 80204a4: f8a4 70e4 strh.w r7, [r4, #228] ; 0xe4 + 80204a8: 1873 adds r3, r6, r1 + 80204aa: b22d sxth r5, r5 + 80204ac: fa0f f989 sxth.w r9, r9 + 80204b0: f8a4 60e6 strh.w r6, [r4, #230] ; 0xe6 + 80204b4: b219 sxth r1, r3 + 80204b6: 42aa cmp r2, r5 + 80204b8: bfb8 it lt + 80204ba: 462a movlt r2, r5 + 80204bc: 4549 cmp r1, r9 + 80204be: bfb8 it lt + 80204c0: 4649 movlt r1, r9 + 80204c2: f7ff ff2d bl 8020320 <_ZN8touchgfx8Drawable14setWidthHeightEss> + 80204c6: 6823 ldr r3, [r4, #0] + 80204c8: f9b4 102e ldrsh.w r1, [r4, #46] ; 0x2e + 80204cc: 4620 mov r0, r4 + 80204ce: f8d3 30a8 ldr.w r3, [r3, #168] ; 0xa8 + 80204d2: b001 add sp, #4 + 80204d4: e8bd 4ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 80204d8: 4718 bx r3 + +080204da <_ZN8touchgfx6Slider19setupVerticalSliderEsssss>: + 80204da: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} + 80204de: 461d mov r5, r3 + 80204e0: f100 0a34 add.w sl, r0, #52 ; 0x34 + 80204e4: 2301 movs r3, #1 + 80204e6: 4604 mov r4, r0 + 80204e8: 4617 mov r7, r2 + 80204ea: f9bd 8024 ldrsh.w r8, [sp, #36] ; 0x24 + 80204ee: f880 302c strb.w r3, [r0, #44] ; 0x2c + 80204f2: 4650 mov r0, sl + 80204f4: 460e mov r6, r1 + 80204f6: f9bd 9020 ldrsh.w r9, [sp, #32] + 80204fa: f7e3 ff44 bl 8004386 <_ZN8touchgfx8Drawable5setXYEss> + 80204fe: 4651 mov r1, sl + 8020500: f104 00b8 add.w r0, r4, #184 ; 0xb8 + 8020504: f7ff ff90 bl 8020428 <_ZN8touchgfx8Drawable11setPositionERKS0_> + 8020508: 8fa1 ldrh r1, [r4, #60] ; 0x3c + 802050a: 8fe2 ldrh r2, [r4, #62] ; 0x3e + 802050c: 4620 mov r0, r4 + 802050e: f8b4 3096 ldrh.w r3, [r4, #150] ; 0x96 + 8020512: 440e add r6, r1 + 8020514: 443a add r2, r7 + 8020516: f8b4 1094 ldrh.w r1, [r4, #148] ; 0x94 + 802051a: 4443 add r3, r8 + 802051c: f8a4 5090 strh.w r5, [r4, #144] ; 0x90 + 8020520: b212 sxth r2, r2 + 8020522: 440d add r5, r1 + 8020524: b21b sxth r3, r3 + 8020526: f8a4 90e4 strh.w r9, [r4, #228] ; 0xe4 + 802052a: b231 sxth r1, r6 + 802052c: f8a4 80e6 strh.w r8, [r4, #230] ; 0xe6 + 8020530: 429a cmp r2, r3 + 8020532: b22d sxth r5, r5 + 8020534: bfb8 it lt + 8020536: 461a movlt r2, r3 + 8020538: 42a9 cmp r1, r5 + 802053a: bfb8 it lt + 802053c: 4629 movlt r1, r5 + 802053e: f7ff feef bl 8020320 <_ZN8touchgfx8Drawable14setWidthHeightEss> + 8020542: 6823 ldr r3, [r4, #0] + 8020544: f9b4 102e ldrsh.w r1, [r4, #46] ; 0x2e + 8020548: 4620 mov r0, r4 + 802054a: f8d3 30a8 ldr.w r3, [r3, #168] ; 0xa8 + 802054e: e8bd 47f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, lr} + 8020552: 4718 bx r3 + +08020554 <_ZN8touchgfx5ImageC1ERKNS_6BitmapE>: + 8020554: b538 push {r3, r4, r5, lr} + 8020556: 4604 mov r4, r0 + 8020558: 460d mov r5, r1 + 802055a: 2226 movs r2, #38 ; 0x26 + 802055c: 2100 movs r1, #0 + 802055e: f014 fa2d bl 80349bc + 8020562: 4620 mov r0, r4 + 8020564: f7ff fec4 bl 80202f0 <_ZN8touchgfx8DrawableC1Ev> + 8020568: 4b06 ldr r3, [pc, #24] ; (8020584 <_ZN8touchgfx5ImageC1ERKNS_6BitmapE+0x30>) + 802056a: 4620 mov r0, r4 + 802056c: 4629 mov r1, r5 + 802056e: 6023 str r3, [r4, #0] + 8020570: 882b ldrh r3, [r5, #0] + 8020572: 84e3 strh r3, [r4, #38] ; 0x26 + 8020574: 23ff movs r3, #255 ; 0xff + 8020576: f884 3028 strb.w r3, [r4, #40] ; 0x28 + 802057a: f001 fbea bl 8021d52 <_ZN8touchgfx5Image9setBitmapERKNS_6BitmapE> + 802057e: 4620 mov r0, r4 + 8020580: bd38 pop {r3, r4, r5, pc} + 8020582: bf00 nop + 8020584: 0803c5ac .word 0x0803c5ac + +08020588 <_ZN8touchgfx6SliderC1Ev>: + 8020588: e92d 47f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, r9, sl, lr} + 802058c: 4604 mov r4, r0 + 802058e: f7ff feaf bl 80202f0 <_ZN8touchgfx8DrawableC1Ev> + 8020592: 4b28 ldr r3, [pc, #160] ; (8020634 <_ZN8touchgfx6SliderC1Ev+0xac>) + 8020594: 2500 movs r5, #0 + 8020596: ae02 add r6, sp, #8 + 8020598: f64f 77ff movw r7, #65535 ; 0xffff + 802059c: 6023 str r3, [r4, #0] + 802059e: f104 0934 add.w r9, r4, #52 ; 0x34 + 80205a2: 2364 movs r3, #100 ; 0x64 + 80205a4: f104 0a60 add.w sl, r4, #96 ; 0x60 + 80205a8: f826 7d04 strh.w r7, [r6, #-4]! + 80205ac: 4648 mov r0, r9 + 80205ae: 8663 strh r3, [r4, #50] ; 0x32 + 80205b0: 4631 mov r1, r6 + 80205b2: 62a5 str r5, [r4, #40] ; 0x28 + 80205b4: f104 088c add.w r8, r4, #140 ; 0x8c + 80205b8: f884 502c strb.w r5, [r4, #44] ; 0x2c + 80205bc: 85e5 strh r5, [r4, #46] ; 0x2e + 80205be: 8625 strh r5, [r4, #48] ; 0x30 + 80205c0: f7ff ffc8 bl 8020554 <_ZN8touchgfx5ImageC1ERKNS_6BitmapE> + 80205c4: 4631 mov r1, r6 + 80205c6: 4650 mov r0, sl + 80205c8: f8ad 7004 strh.w r7, [sp, #4] + 80205cc: f7ff ffc2 bl 8020554 <_ZN8touchgfx5ImageC1ERKNS_6BitmapE> + 80205d0: 4631 mov r1, r6 + 80205d2: f104 06b8 add.w r6, r4, #184 ; 0xb8 + 80205d6: 4640 mov r0, r8 + 80205d8: f8ad 7004 strh.w r7, [sp, #4] + 80205dc: f7ff ffba bl 8020554 <_ZN8touchgfx5ImageC1ERKNS_6BitmapE> + 80205e0: 4630 mov r0, r6 + 80205e2: f7ff fe85 bl 80202f0 <_ZN8touchgfx8DrawableC1Ev> + 80205e6: 4b14 ldr r3, [pc, #80] ; (8020638 <_ZN8touchgfx6SliderC1Ev+0xb0>) + 80205e8: 4651 mov r1, sl + 80205ea: 4630 mov r0, r6 + 80205ec: f8c4 30b8 str.w r3, [r4, #184] ; 0xb8 + 80205f0: f44f 3380 mov.w r3, #65536 ; 0x10000 + 80205f4: f8c4 50e0 str.w r5, [r4, #224] ; 0xe0 + 80205f8: e9c4 3539 strd r3, r5, [r4, #228] ; 0xe4 + 80205fc: 2301 movs r3, #1 + 80205fe: e9c4 553b strd r5, r5, [r4, #236] ; 0xec + 8020602: f884 3024 strb.w r3, [r4, #36] ; 0x24 + 8020606: f7ff faed bl 801fbe4 <_ZN8touchgfx9Container3addERNS_8DrawableE> + 802060a: 4649 mov r1, r9 + 802060c: 4620 mov r0, r4 + 802060e: f7ff fae9 bl 801fbe4 <_ZN8touchgfx9Container3addERNS_8DrawableE> + 8020612: 4631 mov r1, r6 + 8020614: 4620 mov r0, r4 + 8020616: f7ff fae5 bl 801fbe4 <_ZN8touchgfx9Container3addERNS_8DrawableE> + 802061a: 4641 mov r1, r8 + 802061c: 4620 mov r0, r4 + 802061e: f7ff fae1 bl 801fbe4 <_ZN8touchgfx9Container3addERNS_8DrawableE> + 8020622: 4620 mov r0, r4 + 8020624: f9b4 10e4 ldrsh.w r1, [r4, #228] ; 0xe4 + 8020628: f7ff fe87 bl 802033a <_ZN8touchgfx6Slider23updateIndicatorPositionEs> + 802062c: 4620 mov r0, r4 + 802062e: b002 add sp, #8 + 8020630: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + 8020634: 0803c3b8 .word 0x0803c3b8 + 8020638: 0803c328 .word 0x0803c328 + +0802063c <_ZN8touchgfx6Slider10setBitmapsERKNS_6BitmapES3_S3_>: + 802063c: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} + 8020640: 4604 mov r4, r0 + 8020642: f100 0634 add.w r6, r0, #52 ; 0x34 + 8020646: 4689 mov r9, r1 + 8020648: 461f mov r7, r3 + 802064a: f104 058c add.w r5, r4, #140 ; 0x8c + 802064e: 4630 mov r0, r6 + 8020650: 4690 mov r8, r2 + 8020652: f004 f942 bl 80248da <_ZNK8touchgfx8Drawable10invalidateEv> + 8020656: 4628 mov r0, r5 + 8020658: f004 f93f bl 80248da <_ZNK8touchgfx8Drawable10invalidateEv> + 802065c: 4649 mov r1, r9 + 802065e: 4630 mov r0, r6 + 8020660: f001 fb77 bl 8021d52 <_ZN8touchgfx5Image9setBitmapERKNS_6BitmapE> + 8020664: 4641 mov r1, r8 + 8020666: f104 0060 add.w r0, r4, #96 ; 0x60 + 802066a: f001 fb72 bl 8021d52 <_ZN8touchgfx5Image9setBitmapERKNS_6BitmapE> + 802066e: 4639 mov r1, r7 + 8020670: 4628 mov r0, r5 + 8020672: f001 fb6e bl 8021d52 <_ZN8touchgfx5Image9setBitmapERKNS_6BitmapE> + 8020676: f9b4 206a ldrsh.w r2, [r4, #106] ; 0x6a + 802067a: f9b4 1068 ldrsh.w r1, [r4, #104] ; 0x68 + 802067e: f104 00b8 add.w r0, r4, #184 ; 0xb8 + 8020682: f7ff fe4d bl 8020320 <_ZN8touchgfx8Drawable14setWidthHeightEss> + 8020686: 6823 ldr r3, [r4, #0] + 8020688: f9b4 102e ldrsh.w r1, [r4, #46] ; 0x2e + 802068c: 4620 mov r0, r4 + 802068e: f8d3 30a8 ldr.w r3, [r3, #168] ; 0xa8 + 8020692: 4798 blx r3 + 8020694: 4630 mov r0, r6 + 8020696: f004 f920 bl 80248da <_ZNK8touchgfx8Drawable10invalidateEv> + 802069a: 4628 mov r0, r5 + 802069c: e8bd 43f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, lr} + 80206a0: f004 b91b b.w 80248da <_ZNK8touchgfx8Drawable10invalidateEv> + +080206a4 <_ZN8touchgfx3HAL27drawDrawableInDynamicBitmapERNS_8DrawableEt>: + 80206a4: 6803 ldr r3, [r0, #0] + 80206a6: b513 push {r0, r1, r4, lr} + 80206a8: f8d3 40a8 ldr.w r4, [r3, #168] ; 0xa8 + 80206ac: 2300 movs r3, #0 + 80206ae: e9cd 3300 strd r3, r3, [sp] + 80206b2: 466b mov r3, sp + 80206b4: 47a0 blx r4 + 80206b6: b002 add sp, #8 + 80206b8: bd10 pop {r4, pc} + +080206ba <_ZN8touchgfx3HAL16flushFrameBufferEv>: + 80206ba: 2301 movs r3, #1 + 80206bc: f880 304b strb.w r3, [r0, #75] ; 0x4b + 80206c0: f880 306d strb.w r3, [r0, #109] ; 0x6d + 80206c4: 4770 bx lr + +080206c6 <_ZN8touchgfx3HAL16flushFrameBufferERKNS_4RectE>: + 80206c6: 2301 movs r3, #1 + 80206c8: f880 304b strb.w r3, [r0, #75] ; 0x4b + 80206cc: f880 306d strb.w r3, [r0, #109] ; 0x6d + 80206d0: 4770 bx lr + +080206d2 <_ZN8touchgfx3HAL17allowDMATransfersEv>: + 80206d2: 6843 ldr r3, [r0, #4] + 80206d4: 2201 movs r2, #1 + 80206d6: 725a strb r2, [r3, #9] + 80206d8: 6840 ldr r0, [r0, #4] + 80206da: 6803 ldr r3, [r0, #0] + 80206dc: 691b ldr r3, [r3, #16] + 80206de: 4718 bx r3 + +080206e0 <_ZN8touchgfx3HAL8flushDMAEv>: + 80206e0: 6840 ldr r0, [r0, #4] + 80206e2: 6803 ldr r3, [r0, #0] + 80206e4: 689b ldr r3, [r3, #8] + 80206e6: 4718 bx r3 + +080206e8 <_ZN8touchgfx3HAL8blitCopyEPKtttttthbtNS_6Bitmap12BitmapFormatES4_b>: + 80206e8: b530 push {r4, r5, lr} + 80206ea: b08b sub sp, #44 ; 0x2c + 80206ec: 6804 ldr r4, [r0, #0] + 80206ee: f89d 5058 ldrb.w r5, [sp, #88] ; 0x58 + 80206f2: 9509 str r5, [sp, #36] ; 0x24 + 80206f4: f89d 5054 ldrb.w r5, [sp, #84] ; 0x54 + 80206f8: 9508 str r5, [sp, #32] + 80206fa: f89d 5050 ldrb.w r5, [sp, #80] ; 0x50 + 80206fe: 9507 str r5, [sp, #28] + 8020700: f8bd 504c ldrh.w r5, [sp, #76] ; 0x4c + 8020704: 9506 str r5, [sp, #24] + 8020706: f89d 5048 ldrb.w r5, [sp, #72] ; 0x48 + 802070a: 9505 str r5, [sp, #20] + 802070c: f89d 5044 ldrb.w r5, [sp, #68] ; 0x44 + 8020710: 9504 str r5, [sp, #16] + 8020712: f8bd 5040 ldrh.w r5, [sp, #64] ; 0x40 + 8020716: 9503 str r5, [sp, #12] + 8020718: f8bd 503c ldrh.w r5, [sp, #60] ; 0x3c + 802071c: 9502 str r5, [sp, #8] + 802071e: f8bd 5038 ldrh.w r5, [sp, #56] ; 0x38 + 8020722: e9cd 3500 strd r3, r5, [sp] + 8020726: 4613 mov r3, r2 + 8020728: 6be4 ldr r4, [r4, #60] ; 0x3c + 802072a: 2200 movs r2, #0 + 802072c: 47a0 blx r4 + 802072e: b00b add sp, #44 ; 0x2c + 8020730: bd30 pop {r4, r5, pc} + ... + +08020734 <_ZN8touchgfx3HAL10beginFrameEv>: + 8020734: 4b04 ldr r3, [pc, #16] ; (8020748 <_ZN8touchgfx3HAL10beginFrameEv+0x14>) + 8020736: 781b ldrb r3, [r3, #0] + 8020738: b123 cbz r3, 8020744 <_ZN8touchgfx3HAL10beginFrameEv+0x10> + 802073a: f890 006e ldrb.w r0, [r0, #110] ; 0x6e + 802073e: f080 0001 eor.w r0, r0, #1 + 8020742: 4770 bx lr + 8020744: 2001 movs r0, #1 + 8020746: 4770 bx lr + 8020748: 2001e732 .word 0x2001e732 + +0802074c <_ZN8touchgfx3HAL8endFrameEv>: + 802074c: b510 push {r4, lr} + 802074e: 4604 mov r4, r0 + 8020750: 6840 ldr r0, [r0, #4] + 8020752: 6803 ldr r3, [r0, #0] + 8020754: 689b ldr r3, [r3, #8] + 8020756: 4798 blx r3 + 8020758: f894 306d ldrb.w r3, [r4, #109] ; 0x6d + 802075c: b113 cbz r3, 8020764 <_ZN8touchgfx3HAL8endFrameEv+0x18> + 802075e: 2301 movs r3, #1 + 8020760: f884 306e strb.w r3, [r4, #110] ; 0x6e + 8020764: bd10 pop {r4, pc} + +08020766 <_ZN8touchgfx3HAL10initializeEv>: + 8020766: b510 push {r4, lr} + 8020768: 4604 mov r4, r0 + 802076a: f7e2 f935 bl 80029d8 <_ZN8touchgfx10OSWrappers10initializeEv> + 802076e: f7e2 f811 bl 8002794 <_ZN8touchgfx4GPIO4initEv> + 8020772: 6860 ldr r0, [r4, #4] + 8020774: 6803 ldr r3, [r0, #0] + 8020776: 68db ldr r3, [r3, #12] + 8020778: 4798 blx r3 + 802077a: 68e0 ldr r0, [r4, #12] + 802077c: 6803 ldr r3, [r0, #0] + 802077e: 689b ldr r3, [r3, #8] + 8020780: 4798 blx r3 + 8020782: 6823 ldr r3, [r4, #0] + 8020784: 4620 mov r0, r4 + 8020786: 6f5b ldr r3, [r3, #116] ; 0x74 + 8020788: e8bd 4010 ldmia.w sp!, {r4, lr} + 802078c: 4718 bx r3 + +0802078e <_ZN8touchgfx3HAL9taskEntryEv>: + 802078e: b508 push {r3, lr} + 8020790: 6803 ldr r3, [r0, #0] + 8020792: 4604 mov r4, r0 + 8020794: f8d3 3080 ldr.w r3, [r3, #128] ; 0x80 + 8020798: 4798 blx r3 + 802079a: 6823 ldr r3, [r4, #0] + 802079c: 6f9b ldr r3, [r3, #120] ; 0x78 + 802079e: 4620 mov r0, r4 + 80207a0: 4798 blx r3 + 80207a2: f7e2 f965 bl 8002a70 <_ZN8touchgfx10OSWrappers12waitForVSyncEv> + 80207a6: 6823 ldr r3, [r4, #0] + 80207a8: 6f1b ldr r3, [r3, #112] ; 0x70 + 80207aa: e7f8 b.n 802079e <_ZN8touchgfx3HAL9taskEntryEv+0x10> + +080207ac <_ZN8touchgfx3HAL4tickEv>: + 80207ac: b57f push {r0, r1, r2, r3, r4, r5, r6, lr} + 80207ae: 6803 ldr r3, [r0, #0] + 80207b0: 4604 mov r4, r0 + 80207b2: 4d5b ldr r5, [pc, #364] ; (8020920 <_ZN8touchgfx3HAL4tickEv+0x174>) + 80207b4: f8d3 30b0 ldr.w r3, [r3, #176] ; 0xb0 + 80207b8: 4798 blx r3 + 80207ba: 2800 cmp r0, #0 + 80207bc: f000 8095 beq.w 80208ea <_ZN8touchgfx3HAL4tickEv+0x13e> + 80207c0: 2001 movs r0, #1 + 80207c2: 2600 movs r6, #0 + 80207c4: f7e1 ff4c bl 8002660 <_ZN8touchgfx4GPIO3setENS0_7GPIO_IDE> + 80207c8: f894 306a ldrb.w r3, [r4, #106] ; 0x6a + 80207cc: f884 604b strb.w r6, [r4, #75] ; 0x4b + 80207d0: f884 306b strb.w r3, [r4, #107] ; 0x6b + 80207d4: f894 3079 ldrb.w r3, [r4, #121] ; 0x79 + 80207d8: f884 606a strb.w r6, [r4, #106] ; 0x6a + 80207dc: b133 cbz r3, 80207ec <_ZN8touchgfx3HAL4tickEv+0x40> + 80207de: 6823 ldr r3, [r4, #0] + 80207e0: 4620 mov r0, r4 + 80207e2: f8d3 30c4 ldr.w r3, [r3, #196] ; 0xc4 + 80207e6: 4798 blx r3 + 80207e8: f884 6079 strb.w r6, [r4, #121] ; 0x79 + 80207ec: f894 304a ldrb.w r3, [r4, #74] ; 0x4a + 80207f0: 2601 movs r6, #1 + 80207f2: 6862 ldr r2, [r4, #4] + 80207f4: f083 0301 eor.w r3, r3, #1 + 80207f8: 702e strb r6, [r5, #0] + 80207fa: 7253 strb r3, [r2, #9] + 80207fc: f002 fff4 bl 80237e8 <_ZN8touchgfx11Application11getInstanceEv> + 8020800: 6803 ldr r3, [r0, #0] + 8020802: 6b5b ldr r3, [r3, #52] ; 0x34 + 8020804: 4798 blx r3 + 8020806: f894 306b ldrb.w r3, [r4, #107] ; 0x6b + 802080a: b90b cbnz r3, 8020810 <_ZN8touchgfx3HAL4tickEv+0x64> + 802080c: f884 606b strb.w r6, [r4, #107] ; 0x6b + 8020810: f002 ffea bl 80237e8 <_ZN8touchgfx11Application11getInstanceEv> + 8020814: 6803 ldr r3, [r0, #0] + 8020816: 695b ldr r3, [r3, #20] + 8020818: 4798 blx r3 + 802081a: 6de0 ldr r0, [r4, #92] ; 0x5c + 802081c: 6803 ldr r3, [r0, #0] + 802081e: 691b ldr r3, [r3, #16] + 8020820: 4798 blx r3 + 8020822: f894 306b ldrb.w r3, [r4, #107] ; 0x6b + 8020826: f894 206c ldrb.w r2, [r4, #108] ; 0x6c + 802082a: 3b01 subs r3, #1 + 802082c: b2db uxtb r3, r3 + 802082e: f884 306b strb.w r3, [r4, #107] ; 0x6b + 8020832: b10a cbz r2, 8020838 <_ZN8touchgfx3HAL4tickEv+0x8c> + 8020834: 2b00 cmp r3, #0 + 8020836: d1eb bne.n 8020810 <_ZN8touchgfx3HAL4tickEv+0x64> + 8020838: 4a3a ldr r2, [pc, #232] ; (8020924 <_ZN8touchgfx3HAL4tickEv+0x178>) + 802083a: f994 1068 ldrsb.w r1, [r4, #104] ; 0x68 + 802083e: 7813 ldrb r3, [r2, #0] + 8020840: 3301 adds r3, #1 + 8020842: b25b sxtb r3, r3 + 8020844: 4299 cmp r1, r3 + 8020846: 7013 strb r3, [r2, #0] + 8020848: dc10 bgt.n 802086c <_ZN8touchgfx3HAL4tickEv+0xc0> + 802084a: 2300 movs r3, #0 + 802084c: 68e0 ldr r0, [r4, #12] + 802084e: a902 add r1, sp, #8 + 8020850: 7013 strb r3, [r2, #0] + 8020852: aa03 add r2, sp, #12 + 8020854: 6803 ldr r3, [r0, #0] + 8020856: 68db ldr r3, [r3, #12] + 8020858: 4798 blx r3 + 802085a: 6823 ldr r3, [r4, #0] + 802085c: 2800 cmp r0, #0 + 802085e: d050 beq.n 8020902 <_ZN8touchgfx3HAL4tickEv+0x156> + 8020860: f8d3 30bc ldr.w r3, [r3, #188] ; 0xbc + 8020864: 4620 mov r0, r4 + 8020866: e9dd 1202 ldrd r1, r2, [sp, #8] + 802086a: 4798 blx r3 + 802086c: 2300 movs r3, #0 + 802086e: 6960 ldr r0, [r4, #20] + 8020870: f88d 3007 strb.w r3, [sp, #7] + 8020874: b158 cbz r0, 802088e <_ZN8touchgfx3HAL4tickEv+0xe2> + 8020876: 6803 ldr r3, [r0, #0] + 8020878: f10d 0107 add.w r1, sp, #7 + 802087c: 68db ldr r3, [r3, #12] + 802087e: 4798 blx r3 + 8020880: b128 cbz r0, 802088e <_ZN8touchgfx3HAL4tickEv+0xe2> + 8020882: 6de0 ldr r0, [r4, #92] ; 0x5c + 8020884: f89d 1007 ldrb.w r1, [sp, #7] + 8020888: 6803 ldr r3, [r0, #0] + 802088a: 68db ldr r3, [r3, #12] + 802088c: 4798 blx r3 + 802088e: f104 001c add.w r0, r4, #28 + 8020892: f013 fc7b bl 803418c <_ZN8touchgfx8Gestures4tickEv> + 8020896: f894 3070 ldrb.w r3, [r4, #112] ; 0x70 + 802089a: b30b cbz r3, 80208e0 <_ZN8touchgfx3HAL4tickEv+0x134> + 802089c: 6920 ldr r0, [r4, #16] + 802089e: 6803 ldr r3, [r0, #0] + 80208a0: 691b ldr r3, [r3, #16] + 80208a2: 4798 blx r3 + 80208a4: 6f63 ldr r3, [r4, #116] ; 0x74 + 80208a6: 4606 mov r6, r0 + 80208a8: b903 cbnz r3, 80208ac <_ZN8touchgfx3HAL4tickEv+0x100> + 80208aa: 6760 str r0, [r4, #116] ; 0x74 + 80208ac: 6f63 ldr r3, [r4, #116] ; 0x74 + 80208ae: 4a1e ldr r2, [pc, #120] ; (8020928 <_ZN8touchgfx3HAL4tickEv+0x17c>) + 80208b0: 1af3 subs r3, r6, r3 + 80208b2: 4293 cmp r3, r2 + 80208b4: d914 bls.n 80208e0 <_ZN8touchgfx3HAL4tickEv+0x134> + 80208b6: 6920 ldr r0, [r4, #16] + 80208b8: 6803 ldr r3, [r0, #0] + 80208ba: 699b ldr r3, [r3, #24] + 80208bc: 4798 blx r3 + 80208be: 6f63 ldr r3, [r4, #116] ; 0x74 + 80208c0: 2264 movs r2, #100 ; 0x64 + 80208c2: 1af3 subs r3, r6, r3 + 80208c4: fbb3 f3f2 udiv r3, r3, r2 + 80208c8: fbb0 f0f3 udiv r0, r0, r3 + 80208cc: 2800 cmp r0, #0 + 80208ce: dc1d bgt.n 802090c <_ZN8touchgfx3HAL4tickEv+0x160> + 80208d0: f884 2069 strb.w r2, [r4, #105] ; 0x69 + 80208d4: 6920 ldr r0, [r4, #16] + 80208d6: 2100 movs r1, #0 + 80208d8: 6803 ldr r3, [r0, #0] + 80208da: 69db ldr r3, [r3, #28] + 80208dc: 4798 blx r3 + 80208de: 6766 str r6, [r4, #116] ; 0x74 + 80208e0: f002 ff82 bl 80237e8 <_ZN8touchgfx11Application11getInstanceEv> + 80208e4: 6803 ldr r3, [r0, #0] + 80208e6: 6b9b ldr r3, [r3, #56] ; 0x38 + 80208e8: 4798 blx r3 + 80208ea: 6823 ldr r3, [r4, #0] + 80208ec: 4620 mov r0, r4 + 80208ee: f8d3 30b4 ldr.w r3, [r3, #180] ; 0xb4 + 80208f2: 4798 blx r3 + 80208f4: 2001 movs r0, #1 + 80208f6: f7e1 fee3 bl 80026c0 <_ZN8touchgfx4GPIO5clearENS0_7GPIO_IDE> + 80208fa: 2300 movs r3, #0 + 80208fc: 702b strb r3, [r5, #0] + 80208fe: b004 add sp, #16 + 8020900: bd70 pop {r4, r5, r6, pc} + 8020902: f8d3 30c0 ldr.w r3, [r3, #192] ; 0xc0 + 8020906: 4620 mov r0, r4 + 8020908: 4798 blx r3 + 802090a: e7af b.n 802086c <_ZN8touchgfx3HAL4tickEv+0xc0> + 802090c: 2863 cmp r0, #99 ; 0x63 + 802090e: bfcb itete gt + 8020910: 2300 movgt r3, #0 + 8020912: f1c0 0064 rsble r0, r0, #100 ; 0x64 + 8020916: f884 3069 strbgt.w r3, [r4, #105] ; 0x69 + 802091a: f884 0069 strble.w r0, [r4, #105] ; 0x69 + 802091e: e7d9 b.n 80208d4 <_ZN8touchgfx3HAL4tickEv+0x128> + 8020920: 2001e738 .word 0x2001e738 + 8020924: 2001e739 .word 0x2001e739 + 8020928: 05f5e100 .word 0x05f5e100 + +0802092c <_ZN8touchgfx3HAL17unlockFrameBufferEv>: + 802092c: b510 push {r4, lr} + 802092e: 4604 mov r4, r0 + 8020930: f7e2 f882 bl 8002a38 <_ZN8touchgfx10OSWrappers24giveFrameBufferSemaphoreEv> + 8020934: 2200 movs r2, #0 + 8020936: 6863 ldr r3, [r4, #4] + 8020938: 729a strb r2, [r3, #10] + 802093a: bd10 pop {r4, pc} + +0802093c <_ZN8touchgfx3HAL21registerEventListenerERNS_15UIEventListenerE>: + 802093c: 65c1 str r1, [r0, #92] ; 0x5c + 802093e: 301c adds r0, #28 + 8020940: f013 bc22 b.w 8034188 <_ZN8touchgfx8Gestures21registerEventListenerERNS_15UIEventListenerE> + +08020944 <_ZN8touchgfx3HAL5touchEll>: + 8020944: b530 push {r4, r5, lr} + 8020946: b087 sub sp, #28 + 8020948: 4604 mov r4, r0 + 802094a: a804 add r0, sp, #16 + 802094c: e9cd 1204 strd r1, r2, [sp, #16] + 8020950: f002 fd32 bl 80233b8 <_ZN8touchgfx16TouchCalibration14translatePointERNS_5PointE> + 8020954: 9b04 ldr r3, [sp, #16] + 8020956: a906 add r1, sp, #24 + 8020958: a803 add r0, sp, #12 + 802095a: f8ad 300c strh.w r3, [sp, #12] + 802095e: 9b05 ldr r3, [sp, #20] + 8020960: f821 3d0a strh.w r3, [r1, #-10]! + 8020964: f002 fd7a bl 802345c <_ZN8touchgfx21DisplayTransformation29transformFrameBufferToDisplayERsS1_> + 8020968: f894 106f ldrb.w r1, [r4, #111] ; 0x6f + 802096c: f104 001c add.w r0, r4, #28 + 8020970: f8bd 200c ldrh.w r2, [sp, #12] + 8020974: f8bd 300e ldrh.w r3, [sp, #14] + 8020978: b189 cbz r1, 802099e <_ZN8touchgfx3HAL5touchEll+0x5a> + 802097a: f8b4 5064 ldrh.w r5, [r4, #100] ; 0x64 + 802097e: 9300 str r3, [sp, #0] + 8020980: 4613 mov r3, r2 + 8020982: f8b4 1060 ldrh.w r1, [r4, #96] ; 0x60 + 8020986: 462a mov r2, r5 + 8020988: f013 fc0e bl 80341a8 <_ZN8touchgfx8Gestures17registerDragEventEtttt> + 802098c: b128 cbz r0, 802099a <_ZN8touchgfx3HAL5touchEll+0x56> + 802098e: f9bd 300c ldrsh.w r3, [sp, #12] + 8020992: 6623 str r3, [r4, #96] ; 0x60 + 8020994: f9bd 300e ldrsh.w r3, [sp, #14] + 8020998: 6663 str r3, [r4, #100] ; 0x64 + 802099a: b007 add sp, #28 + 802099c: bd30 pop {r4, r5, pc} + 802099e: f013 fc43 bl 8034228 <_ZN8touchgfx8Gestures18registerClickEventENS_10ClickEvent14ClickEventTypeEtt> + 80209a2: 2301 movs r3, #1 + 80209a4: f884 306f strb.w r3, [r4, #111] ; 0x6f + 80209a8: e7f1 b.n 802098e <_ZN8touchgfx3HAL5touchEll+0x4a> + +080209aa <_ZN8touchgfx3HAL9blockCopyEPvPKvm>: + 80209aa: b510 push {r4, lr} + 80209ac: 2b00 cmp r3, #0 + 80209ae: d046 beq.n 8020a3e <_ZN8touchgfx3HAL9blockCopyEPvPKvm+0x94> + 80209b0: ea81 0002 eor.w r0, r1, r2 + 80209b4: 07c4 lsls r4, r0, #31 + 80209b6: d508 bpl.n 80209ca <_ZN8touchgfx3HAL9blockCopyEPvPKvm+0x20> + 80209b8: 440b add r3, r1 + 80209ba: 3a01 subs r2, #1 + 80209bc: 428b cmp r3, r1 + 80209be: d93e bls.n 8020a3e <_ZN8touchgfx3HAL9blockCopyEPvPKvm+0x94> + 80209c0: f812 0f01 ldrb.w r0, [r2, #1]! + 80209c4: f801 0b01 strb.w r0, [r1], #1 + 80209c8: e7f8 b.n 80209bc <_ZN8touchgfx3HAL9blockCopyEPvPKvm+0x12> + 80209ca: 07d0 lsls r0, r2, #31 + 80209cc: bf42 ittt mi + 80209ce: f812 0b01 ldrbmi.w r0, [r2], #1 + 80209d2: f103 33ff addmi.w r3, r3, #4294967295 + 80209d6: f801 0b01 strbmi.w r0, [r1], #1 + 80209da: 2b01 cmp r3, #1 + 80209dc: d911 bls.n 8020a02 <_ZN8touchgfx3HAL9blockCopyEPvPKvm+0x58> + 80209de: ea81 0402 eor.w r4, r1, r2 + 80209e2: 4610 mov r0, r2 + 80209e4: 07a4 lsls r4, r4, #30 + 80209e6: d022 beq.n 8020a2e <_ZN8touchgfx3HAL9blockCopyEPvPKvm+0x84> + 80209e8: f023 0401 bic.w r4, r3, #1 + 80209ec: 440c add r4, r1 + 80209ee: 428c cmp r4, r1 + 80209f0: 4602 mov r2, r0 + 80209f2: d904 bls.n 80209fe <_ZN8touchgfx3HAL9blockCopyEPvPKvm+0x54> + 80209f4: 8812 ldrh r2, [r2, #0] + 80209f6: 3002 adds r0, #2 + 80209f8: f821 2b02 strh.w r2, [r1], #2 + 80209fc: e7f7 b.n 80209ee <_ZN8touchgfx3HAL9blockCopyEPvPKvm+0x44> + 80209fe: f003 0301 and.w r3, r3, #1 + 8020a02: f023 0003 bic.w r0, r3, #3 + 8020a06: 4408 add r0, r1 + 8020a08: 4288 cmp r0, r1 + 8020a0a: 4614 mov r4, r2 + 8020a0c: d904 bls.n 8020a18 <_ZN8touchgfx3HAL9blockCopyEPvPKvm+0x6e> + 8020a0e: 6824 ldr r4, [r4, #0] + 8020a10: 3204 adds r2, #4 + 8020a12: f841 4b04 str.w r4, [r1], #4 + 8020a16: e7f7 b.n 8020a08 <_ZN8touchgfx3HAL9blockCopyEPvPKvm+0x5e> + 8020a18: f003 0303 and.w r3, r3, #3 + 8020a1c: 3a01 subs r2, #1 + 8020a1e: 440b add r3, r1 + 8020a20: 428b cmp r3, r1 + 8020a22: d90c bls.n 8020a3e <_ZN8touchgfx3HAL9blockCopyEPvPKvm+0x94> + 8020a24: f812 0f01 ldrb.w r0, [r2, #1]! + 8020a28: f801 0b01 strb.w r0, [r1], #1 + 8020a2c: e7f8 b.n 8020a20 <_ZN8touchgfx3HAL9blockCopyEPvPKvm+0x76> + 8020a2e: 0790 lsls r0, r2, #30 + 8020a30: d0e7 beq.n 8020a02 <_ZN8touchgfx3HAL9blockCopyEPvPKvm+0x58> + 8020a32: f832 0b02 ldrh.w r0, [r2], #2 + 8020a36: 3b02 subs r3, #2 + 8020a38: f821 0b02 strh.w r0, [r1], #2 + 8020a3c: e7e1 b.n 8020a02 <_ZN8touchgfx3HAL9blockCopyEPvPKvm+0x58> + 8020a3e: 2001 movs r0, #1 + 8020a40: bd10 pop {r4, pc} + +08020a42 <_ZN8touchgfx3HAL7noTouchEv>: + 8020a42: b510 push {r4, lr} + 8020a44: f890 306f ldrb.w r3, [r0, #111] ; 0x6f + 8020a48: 4604 mov r4, r0 + 8020a4a: b153 cbz r3, 8020a62 <_ZN8touchgfx3HAL7noTouchEv+0x20> + 8020a4c: f8b0 3064 ldrh.w r3, [r0, #100] ; 0x64 + 8020a50: 2101 movs r1, #1 + 8020a52: f8b0 2060 ldrh.w r2, [r0, #96] ; 0x60 + 8020a56: 301c adds r0, #28 + 8020a58: f013 fbe6 bl 8034228 <_ZN8touchgfx8Gestures18registerClickEventENS_10ClickEvent14ClickEventTypeEtt> + 8020a5c: 2300 movs r3, #0 + 8020a5e: f884 306f strb.w r3, [r4, #111] ; 0x6f + 8020a62: bd10 pop {r4, pc} + +08020a64 <_ZN8touchgfx3HAL27configurePartialFrameBufferEtttt>: + 8020a64: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} + 8020a68: b085 sub sp, #20 + 8020a6a: 4604 mov r4, r0 + 8020a6c: 2000 movs r0, #0 + 8020a6e: 4699 mov r9, r3 + 8020a70: ad04 add r5, sp, #16 + 8020a72: 460f mov r7, r1 + 8020a74: 4690 mov r8, r2 + 8020a76: f845 0d04 str.w r0, [r5, #-4]! + 8020a7a: 69a0 ldr r0, [r4, #24] + 8020a7c: 6806 ldr r6, [r0, #0] + 8020a7e: 9501 str r5, [sp, #4] + 8020a80: f8bd 5030 ldrh.w r5, [sp, #48] ; 0x30 + 8020a84: 9500 str r5, [sp, #0] + 8020a86: 6835 ldr r5, [r6, #0] + 8020a88: 47a8 blx r5 + 8020a8a: 4d10 ldr r5, [pc, #64] ; (8020acc <_ZN8touchgfx3HAL27configurePartialFrameBufferEtttt+0x68>) + 8020a8c: 4606 mov r6, r0 + 8020a8e: f8a5 9000 strh.w r9, [r5] + 8020a92: f7e3 fb2b bl 80040ec <_ZN8touchgfx3HAL3lcdEv> + 8020a96: 6803 ldr r3, [r0, #0] + 8020a98: 6adb ldr r3, [r3, #44] ; 0x2c + 8020a9a: 4798 blx r3 + 8020a9c: b128 cbz r0, 8020aaa <_ZN8touchgfx3HAL27configurePartialFrameBufferEtttt+0x46> + 8020a9e: 2801 cmp r0, #1 + 8020aa0: d00b beq.n 8020aba <_ZN8touchgfx3HAL27configurePartialFrameBufferEtttt+0x56> + 8020aa2: 4630 mov r0, r6 + 8020aa4: b005 add sp, #20 + 8020aa6: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} + 8020aaa: 882b ldrh r3, [r5, #0] + 8020aac: fb08 7203 mla r2, r8, r3, r7 + 8020ab0: 9b03 ldr r3, [sp, #12] + 8020ab2: eba3 0342 sub.w r3, r3, r2, lsl #1 + 8020ab6: 63e3 str r3, [r4, #60] ; 0x3c + 8020ab8: e7f3 b.n 8020aa2 <_ZN8touchgfx3HAL27configurePartialFrameBufferEtttt+0x3e> + 8020aba: 882a ldrh r2, [r5, #0] + 8020abc: 9b03 ldr r3, [sp, #12] + 8020abe: fb08 7202 mla r2, r8, r2, r7 + 8020ac2: eb02 0242 add.w r2, r2, r2, lsl #1 + 8020ac6: 1a9a subs r2, r3, r2 + 8020ac8: 63e2 str r2, [r4, #60] ; 0x3c + 8020aca: e7ea b.n 8020aa2 <_ZN8touchgfx3HAL27configurePartialFrameBufferEtttt+0x3e> + 8020acc: 2001e72e .word 0x2001e72e + +08020ad0 <_ZN8touchgfx3HAL8blitCopyEPKtttttthbb>: + 8020ad0: b5f0 push {r4, r5, r6, r7, lr} + 8020ad2: b08b sub sp, #44 ; 0x2c + 8020ad4: 4617 mov r7, r2 + 8020ad6: 4604 mov r4, r0 + 8020ad8: 460e mov r6, r1 + 8020ada: 461d mov r5, r3 + 8020adc: f7e3 fb06 bl 80040ec <_ZN8touchgfx3HAL3lcdEv> + 8020ae0: 6803 ldr r3, [r0, #0] + 8020ae2: 6adb ldr r3, [r3, #44] ; 0x2c + 8020ae4: 4798 blx r3 + 8020ae6: f89d 3054 ldrb.w r3, [sp, #84] ; 0x54 + 8020aea: 9007 str r0, [sp, #28] + 8020aec: 4631 mov r1, r6 + 8020aee: 6822 ldr r2, [r4, #0] + 8020af0: e9cd 0308 strd r0, r3, [sp, #32] + 8020af4: 4b0c ldr r3, [pc, #48] ; (8020b28 <_ZN8touchgfx3HAL8blitCopyEPKtttttthbb+0x58>) + 8020af6: 4620 mov r0, r4 + 8020af8: 881b ldrh r3, [r3, #0] + 8020afa: 9306 str r3, [sp, #24] + 8020afc: f89d 3050 ldrb.w r3, [sp, #80] ; 0x50 + 8020b00: 9305 str r3, [sp, #20] + 8020b02: f89d 304c ldrb.w r3, [sp, #76] ; 0x4c + 8020b06: 9304 str r3, [sp, #16] + 8020b08: f8bd 3048 ldrh.w r3, [sp, #72] ; 0x48 + 8020b0c: 9303 str r3, [sp, #12] + 8020b0e: f8bd 3044 ldrh.w r3, [sp, #68] ; 0x44 + 8020b12: 9302 str r3, [sp, #8] + 8020b14: f8bd 3040 ldrh.w r3, [sp, #64] ; 0x40 + 8020b18: e9cd 5300 strd r5, r3, [sp] + 8020b1c: 463b mov r3, r7 + 8020b1e: 6bd5 ldr r5, [r2, #60] ; 0x3c + 8020b20: 2200 movs r2, #0 + 8020b22: 47a8 blx r5 + 8020b24: b00b add sp, #44 ; 0x2c + 8020b26: bdf0 pop {r4, r5, r6, r7, pc} + 8020b28: 2001e72e .word 0x2001e72e + +08020b2c <_ZN8touchgfx3HAL16blitCopyARGB8888EPKtttttthb>: + 8020b2c: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} + 8020b30: 4698 mov r8, r3 + 8020b32: 6803 ldr r3, [r0, #0] + 8020b34: b08b sub sp, #44 ; 0x2c + 8020b36: 4617 mov r7, r2 + 8020b38: 6bdd ldr r5, [r3, #60] ; 0x3c + 8020b3a: 460e mov r6, r1 + 8020b3c: 4b13 ldr r3, [pc, #76] ; (8020b8c <_ZN8touchgfx3HAL16blitCopyARGB8888EPKtttttthb+0x60>) + 8020b3e: 4604 mov r4, r0 + 8020b40: f8b3 9000 ldrh.w r9, [r3] + 8020b44: f7e3 fad2 bl 80040ec <_ZN8touchgfx3HAL3lcdEv> + 8020b48: 6803 ldr r3, [r0, #0] + 8020b4a: 6adb ldr r3, [r3, #44] ; 0x2c + 8020b4c: 4798 blx r3 + 8020b4e: f89d 3058 ldrb.w r3, [sp, #88] ; 0x58 + 8020b52: 2200 movs r2, #0 + 8020b54: 4631 mov r1, r6 + 8020b56: e9cd 0308 strd r0, r3, [sp, #32] + 8020b5a: 2302 movs r3, #2 + 8020b5c: 4620 mov r0, r4 + 8020b5e: e9cd 9306 strd r9, r3, [sp, #24] + 8020b62: 2301 movs r3, #1 + 8020b64: 9305 str r3, [sp, #20] + 8020b66: f89d 3054 ldrb.w r3, [sp, #84] ; 0x54 + 8020b6a: 9304 str r3, [sp, #16] + 8020b6c: f8bd 3050 ldrh.w r3, [sp, #80] ; 0x50 + 8020b70: 9303 str r3, [sp, #12] + 8020b72: f8bd 304c ldrh.w r3, [sp, #76] ; 0x4c + 8020b76: 9302 str r3, [sp, #8] + 8020b78: f8bd 3048 ldrh.w r3, [sp, #72] ; 0x48 + 8020b7c: e9cd 8300 strd r8, r3, [sp] + 8020b80: 463b mov r3, r7 + 8020b82: 47a8 blx r5 + 8020b84: b00b add sp, #44 ; 0x2c + 8020b86: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} + 8020b8a: bf00 nop + 8020b8c: 2001e72e .word 0x2001e72e + +08020b90 <_ZN8touchgfx3HAL8blitFillENS_9colortypeEtttthb>: + 8020b90: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} + 8020b94: 4698 mov r8, r3 + 8020b96: 6803 ldr r3, [r0, #0] + 8020b98: b087 sub sp, #28 + 8020b9a: 460e mov r6, r1 + 8020b9c: 6d9d ldr r5, [r3, #88] ; 0x58 + 8020b9e: 4617 mov r7, r2 + 8020ba0: 4b0f ldr r3, [pc, #60] ; (8020be0 <_ZN8touchgfx3HAL8blitFillENS_9colortypeEtttthb+0x50>) + 8020ba2: 4604 mov r4, r0 + 8020ba4: f8b3 9000 ldrh.w r9, [r3] + 8020ba8: f7e3 faa0 bl 80040ec <_ZN8touchgfx3HAL3lcdEv> + 8020bac: 6803 ldr r3, [r0, #0] + 8020bae: 6adb ldr r3, [r3, #44] ; 0x2c + 8020bb0: 4798 blx r3 + 8020bb2: f89d 3044 ldrb.w r3, [sp, #68] ; 0x44 + 8020bb6: 463a mov r2, r7 + 8020bb8: 4631 mov r1, r6 + 8020bba: f8cd 900c str.w r9, [sp, #12] + 8020bbe: e9cd 0304 strd r0, r3, [sp, #16] + 8020bc2: f89d 3040 ldrb.w r3, [sp, #64] ; 0x40 + 8020bc6: 4620 mov r0, r4 + 8020bc8: 9302 str r3, [sp, #8] + 8020bca: f8bd 303c ldrh.w r3, [sp, #60] ; 0x3c + 8020bce: 9301 str r3, [sp, #4] + 8020bd0: f8bd 3038 ldrh.w r3, [sp, #56] ; 0x38 + 8020bd4: 9300 str r3, [sp, #0] + 8020bd6: 4643 mov r3, r8 + 8020bd8: 47a8 blx r5 + 8020bda: b007 add sp, #28 + 8020bdc: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} + 8020be0: 2001e72e .word 0x2001e72e + +08020be4 <_ZN8touchgfx3HAL27drawDrawableInDynamicBitmapERNS_8DrawableEtRKNS_4RectE>: + 8020be4: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8020be8: 4604 mov r4, r0 + 8020bea: b08f sub sp, #60 ; 0x3c + 8020bec: 4610 mov r0, r2 + 8020bee: 460d mov r5, r1 + 8020bf0: 4691 mov r9, r2 + 8020bf2: 461e mov r6, r3 + 8020bf4: f005 fe9c bl 8026930 <_ZN8touchgfx6Bitmap23dynamicBitmapGetAddressEt> + 8020bf8: 2800 cmp r0, #0 + 8020bfa: f000 809d beq.w 8020d38 <_ZN8touchgfx3HAL27drawDrawableInDynamicBitmapERNS_8DrawableEtRKNS_4RectE+0x154> + 8020bfe: 6823 ldr r3, [r4, #0] + 8020c00: 4620 mov r0, r4 + 8020c02: f8df b198 ldr.w fp, [pc, #408] ; 8020d9c <_ZN8touchgfx3HAL27drawDrawableInDynamicBitmapERNS_8DrawableEtRKNS_4RectE+0x1b8> + 8020c06: f10d 0838 add.w r8, sp, #56 ; 0x38 + 8020c0a: 6a9b ldr r3, [r3, #40] ; 0x28 + 8020c0c: 4798 blx r3 + 8020c0e: 6823 ldr r3, [r4, #0] + 8020c10: 4620 mov r0, r4 + 8020c12: f8df a18c ldr.w sl, [pc, #396] ; 8020da0 <_ZN8touchgfx3HAL27drawDrawableInDynamicBitmapERNS_8DrawableEtRKNS_4RectE+0x1bc> + 8020c16: 6adb ldr r3, [r3, #44] ; 0x2c + 8020c18: 4798 blx r3 + 8020c1a: f8bb 3000 ldrh.w r3, [fp] + 8020c1e: 4f5c ldr r7, [pc, #368] ; (8020d90 <_ZN8touchgfx3HAL27drawDrawableInDynamicBitmapERNS_8DrawableEtRKNS_4RectE+0x1ac>) + 8020c20: 9301 str r3, [sp, #4] + 8020c22: f8ba 3000 ldrh.w r3, [sl] + 8020c26: f828 9d1c strh.w r9, [r8, #-28]! + 8020c2a: 4640 mov r0, r8 + 8020c2c: 9302 str r3, [sp, #8] + 8020c2e: 883b ldrh r3, [r7, #0] + 8020c30: 9303 str r3, [sp, #12] + 8020c32: 4b58 ldr r3, [pc, #352] ; (8020d94 <_ZN8touchgfx3HAL27drawDrawableInDynamicBitmapERNS_8DrawableEtRKNS_4RectE+0x1b0>) + 8020c34: 881a ldrh r2, [r3, #0] + 8020c36: 9305 str r3, [sp, #20] + 8020c38: 9204 str r2, [sp, #16] + 8020c3a: f005 ff0d bl 8026a58 <_ZNK8touchgfx6Bitmap8getWidthEv> + 8020c3e: 8038 strh r0, [r7, #0] + 8020c40: 4640 mov r0, r8 + 8020c42: f005 ff3d bl 8026ac0 <_ZNK8touchgfx6Bitmap9getHeightEv> + 8020c46: 9b05 ldr r3, [sp, #20] + 8020c48: b280 uxth r0, r0 + 8020c4a: 8018 strh r0, [r3, #0] + 8020c4c: 4b52 ldr r3, [pc, #328] ; (8020d98 <_ZN8touchgfx3HAL27drawDrawableInDynamicBitmapERNS_8DrawableEtRKNS_4RectE+0x1b4>) + 8020c4e: 781b ldrb r3, [r3, #0] + 8020c50: 2b00 cmp r3, #0 + 8020c52: d174 bne.n 8020d3e <_ZN8touchgfx3HAL27drawDrawableInDynamicBitmapERNS_8DrawableEtRKNS_4RectE+0x15a> + 8020c54: 883b ldrh r3, [r7, #0] + 8020c56: f8aa 0000 strh.w r0, [sl] + 8020c5a: f8ab 3000 strh.w r3, [fp] + 8020c5e: 4648 mov r0, r9 + 8020c60: e9d4 870f ldrd r8, r7, [r4, #60] ; 0x3c + 8020c64: f005 fe64 bl 8026930 <_ZN8touchgfx6Bitmap23dynamicBitmapGetAddressEt> + 8020c68: 2200 movs r2, #0 + 8020c6a: e9c4 000f strd r0, r0, [r4, #60] ; 0x3c + 8020c6e: 4611 mov r1, r2 + 8020c70: 4628 mov r0, r5 + 8020c72: f9b5 9004 ldrsh.w r9, [r5, #4] + 8020c76: f9b5 a006 ldrsh.w sl, [r5, #6] + 8020c7a: f7e3 fb84 bl 8004386 <_ZN8touchgfx8Drawable5setXYEss> + 8020c7e: 2301 movs r3, #1 + 8020c80: f895 b025 ldrb.w fp, [r5, #37] ; 0x25 + 8020c84: f885 3025 strb.w r3, [r5, #37] ; 0x25 + 8020c88: f9b6 3004 ldrsh.w r3, [r6, #4] + 8020c8c: 2b00 cmp r3, #0 + 8020c8e: dd5c ble.n 8020d4a <_ZN8touchgfx3HAL27drawDrawableInDynamicBitmapERNS_8DrawableEtRKNS_4RectE+0x166> + 8020c90: f9b6 3006 ldrsh.w r3, [r6, #6] + 8020c94: 2b00 cmp r3, #0 + 8020c96: dd58 ble.n 8020d4a <_ZN8touchgfx3HAL27drawDrawableInDynamicBitmapERNS_8DrawableEtRKNS_4RectE+0x166> + 8020c98: 462a mov r2, r5 + 8020c9a: ab0a add r3, sp, #40 ; 0x28 + 8020c9c: f852 0f04 ldr.w r0, [r2, #4]! + 8020ca0: 6851 ldr r1, [r2, #4] + 8020ca2: c303 stmia r3!, {r0, r1} + 8020ca4: 4631 mov r1, r6 + 8020ca6: a80a add r0, sp, #40 ; 0x28 + 8020ca8: f7ff f920 bl 801feec <_ZN8touchgfx4RectaNERKS0_> + 8020cac: 4b38 ldr r3, [pc, #224] ; (8020d90 <_ZN8touchgfx3HAL27drawDrawableInDynamicBitmapERNS_8DrawableEtRKNS_4RectE+0x1ac>) + 8020cae: 2100 movs r1, #0 + 8020cb0: f9b3 2000 ldrsh.w r2, [r3] + 8020cb4: 4b37 ldr r3, [pc, #220] ; (8020d94 <_ZN8touchgfx3HAL27drawDrawableInDynamicBitmapERNS_8DrawableEtRKNS_4RectE+0x1b0>) + 8020cb6: f8ad 2034 strh.w r2, [sp, #52] ; 0x34 + 8020cba: aa0a add r2, sp, #40 ; 0x28 + 8020cbc: f9b3 3000 ldrsh.w r3, [r3] + 8020cc0: 910c str r1, [sp, #48] ; 0x30 + 8020cc2: f8ad 3036 strh.w r3, [sp, #54] ; 0x36 + 8020cc6: ab08 add r3, sp, #32 + 8020cc8: e892 0003 ldmia.w r2, {r0, r1} + 8020ccc: e883 0003 stmia.w r3, {r0, r1} + 8020cd0: 4618 mov r0, r3 + 8020cd2: a90c add r1, sp, #48 ; 0x30 + 8020cd4: f7ff f90a bl 801feec <_ZN8touchgfx4RectaNERKS0_> + 8020cd8: 6ce3 ldr r3, [r4, #76] ; 0x4c + 8020cda: 2b00 cmp r3, #0 + 8020cdc: d13c bne.n 8020d58 <_ZN8touchgfx3HAL27drawDrawableInDynamicBitmapERNS_8DrawableEtRKNS_4RectE+0x174> + 8020cde: 2000 movs r0, #0 + 8020ce0: f884 0058 strb.w r0, [r4, #88] ; 0x58 + 8020ce4: 2600 movs r6, #0 + 8020ce6: 696b ldr r3, [r5, #20] + 8020ce8: a908 add r1, sp, #32 + 8020cea: 682a ldr r2, [r5, #0] + 8020cec: 4628 mov r0, r5 + 8020cee: 9305 str r3, [sp, #20] + 8020cf0: 616e str r6, [r5, #20] + 8020cf2: 6892 ldr r2, [r2, #8] + 8020cf4: 4790 blx r2 + 8020cf6: 9b05 ldr r3, [sp, #20] + 8020cf8: 4652 mov r2, sl + 8020cfa: 4649 mov r1, r9 + 8020cfc: 616b str r3, [r5, #20] + 8020cfe: 4628 mov r0, r5 + 8020d00: f884 6058 strb.w r6, [r4, #88] ; 0x58 + 8020d04: f885 b025 strb.w fp, [r5, #37] ; 0x25 + 8020d08: f7e3 fb3d bl 8004386 <_ZN8touchgfx8Drawable5setXYEss> + 8020d0c: 9a01 ldr r2, [sp, #4] + 8020d0e: 4b23 ldr r3, [pc, #140] ; (8020d9c <_ZN8touchgfx3HAL27drawDrawableInDynamicBitmapERNS_8DrawableEtRKNS_4RectE+0x1b8>) + 8020d10: 4620 mov r0, r4 + 8020d12: 801a strh r2, [r3, #0] + 8020d14: 9a02 ldr r2, [sp, #8] + 8020d16: 4b22 ldr r3, [pc, #136] ; (8020da0 <_ZN8touchgfx3HAL27drawDrawableInDynamicBitmapERNS_8DrawableEtRKNS_4RectE+0x1bc>) + 8020d18: 801a strh r2, [r3, #0] + 8020d1a: 9a03 ldr r2, [sp, #12] + 8020d1c: 4b1c ldr r3, [pc, #112] ; (8020d90 <_ZN8touchgfx3HAL27drawDrawableInDynamicBitmapERNS_8DrawableEtRKNS_4RectE+0x1ac>) + 8020d1e: 801a strh r2, [r3, #0] + 8020d20: 4b1c ldr r3, [pc, #112] ; (8020d94 <_ZN8touchgfx3HAL27drawDrawableInDynamicBitmapERNS_8DrawableEtRKNS_4RectE+0x1b0>) + 8020d22: 9a04 ldr r2, [sp, #16] + 8020d24: 801a strh r2, [r3, #0] + 8020d26: 6823 ldr r3, [r4, #0] + 8020d28: e9c4 870f strd r8, r7, [r4, #60] ; 0x3c + 8020d2c: 6a9b ldr r3, [r3, #40] ; 0x28 + 8020d2e: 4798 blx r3 + 8020d30: 6823 ldr r3, [r4, #0] + 8020d32: 4620 mov r0, r4 + 8020d34: 6adb ldr r3, [r3, #44] ; 0x2c + 8020d36: 4798 blx r3 + 8020d38: b00f add sp, #60 ; 0x3c + 8020d3a: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 8020d3e: 883b ldrh r3, [r7, #0] + 8020d40: f8ab 0000 strh.w r0, [fp] + 8020d44: f8aa 3000 strh.w r3, [sl] + 8020d48: e789 b.n 8020c5e <_ZN8touchgfx3HAL27drawDrawableInDynamicBitmapERNS_8DrawableEtRKNS_4RectE+0x7a> + 8020d4a: 462a mov r2, r5 + 8020d4c: ab0a add r3, sp, #40 ; 0x28 + 8020d4e: f852 0f04 ldr.w r0, [r2, #4]! + 8020d52: 6851 ldr r1, [r2, #4] + 8020d54: c303 stmia r3!, {r0, r1} + 8020d56: e7a9 b.n 8020cac <_ZN8touchgfx3HAL27drawDrawableInDynamicBitmapERNS_8DrawableEtRKNS_4RectE+0xc8> + 8020d58: a807 add r0, sp, #28 + 8020d5a: f005 ffed bl 8026d38 <_ZNK8touchgfx6Bitmap9getFormatEv> + 8020d5e: 4606 mov r6, r0 + 8020d60: 6ce0 ldr r0, [r4, #76] ; 0x4c + 8020d62: 6803 ldr r3, [r0, #0] + 8020d64: 6adb ldr r3, [r3, #44] ; 0x2c + 8020d66: 4798 blx r3 + 8020d68: 4286 cmp r6, r0 + 8020d6a: d1b8 bne.n 8020cde <_ZN8touchgfx3HAL27drawDrawableInDynamicBitmapERNS_8DrawableEtRKNS_4RectE+0xfa> + 8020d6c: f7e3 f9be bl 80040ec <_ZN8touchgfx3HAL3lcdEv> + 8020d70: 6803 ldr r3, [r0, #0] + 8020d72: 4606 mov r6, r0 + 8020d74: a807 add r0, sp, #28 + 8020d76: 6b5b ldr r3, [r3, #52] ; 0x34 + 8020d78: 9305 str r3, [sp, #20] + 8020d7a: f005 ffdd bl 8026d38 <_ZNK8touchgfx6Bitmap9getFormatEv> + 8020d7e: 9b05 ldr r3, [sp, #20] + 8020d80: 4601 mov r1, r0 + 8020d82: 4630 mov r0, r6 + 8020d84: 4798 blx r3 + 8020d86: f080 0001 eor.w r0, r0, #1 + 8020d8a: b2c0 uxtb r0, r0 + 8020d8c: e7a8 b.n 8020ce0 <_ZN8touchgfx3HAL27drawDrawableInDynamicBitmapERNS_8DrawableEtRKNS_4RectE+0xfc> + 8020d8e: bf00 nop + 8020d90: 2001e728 .word 0x2001e728 + 8020d94: 2001e72a .word 0x2001e72a + 8020d98: 2001e72c .word 0x2001e72c + 8020d9c: 2001e72e .word 0x2001e72e + 8020da0: 2001e730 .word 0x2001e730 + +08020da4 <_ZN8touchgfx3HAL20getClientFrameBufferEv>: + 8020da4: 4b07 ldr r3, [pc, #28] ; (8020dc4 <_ZN8touchgfx3HAL20getClientFrameBufferEv+0x20>) + 8020da6: b510 push {r4, lr} + 8020da8: 781b ldrb r3, [r3, #0] + 8020daa: 4604 mov r4, r0 + 8020dac: b13b cbz r3, 8020dbe <_ZN8touchgfx3HAL20getClientFrameBufferEv+0x1a> + 8020dae: 6803 ldr r3, [r0, #0] + 8020db0: 6b1b ldr r3, [r3, #48] ; 0x30 + 8020db2: 4798 blx r3 + 8020db4: 6be3 ldr r3, [r4, #60] ; 0x3c + 8020db6: 4283 cmp r3, r0 + 8020db8: d101 bne.n 8020dbe <_ZN8touchgfx3HAL20getClientFrameBufferEv+0x1a> + 8020dba: 6c20 ldr r0, [r4, #64] ; 0x40 + 8020dbc: bd10 pop {r4, pc} + 8020dbe: 6be0 ldr r0, [r4, #60] ; 0x3c + 8020dc0: e7fc b.n 8020dbc <_ZN8touchgfx3HAL20getClientFrameBufferEv+0x18> + 8020dc2: bf00 nop + 8020dc4: 2001e732 .word 0x2001e732 + +08020dc8 <_ZN8touchgfx3HAL12blitCopyWordEPKttttttt>: + 8020dc8: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} + 8020dcc: 461d mov r5, r3 + 8020dce: b08a sub sp, #40 ; 0x28 + 8020dd0: f44f 6380 mov.w r3, #1024 ; 0x400 + 8020dd4: 4690 mov r8, r2 + 8020dd6: f8bd 604c ldrh.w r6, [sp, #76] ; 0x4c + 8020dda: 2400 movs r4, #0 + 8020ddc: 4607 mov r7, r0 + 8020dde: fb06 8505 mla r5, r6, r5, r8 + 8020de2: 9404 str r4, [sp, #16] + 8020de4: f88d 4020 strb.w r4, [sp, #32] + 8020de8: e9cd 3101 strd r3, r1, [sp, #4] + 8020dec: f8bd 3040 ldrh.w r3, [sp, #64] ; 0x40 + 8020df0: f8ad 3018 strh.w r3, [sp, #24] + 8020df4: f8bd 3044 ldrh.w r3, [sp, #68] ; 0x44 + 8020df8: f8ad 301a strh.w r3, [sp, #26] + 8020dfc: f8bd 3048 ldrh.w r3, [sp, #72] ; 0x48 + 8020e00: f8ad 301c strh.w r3, [sp, #28] + 8020e04: f7ff ffce bl 8020da4 <_ZN8touchgfx3HAL20getClientFrameBufferEv> + 8020e08: eb00 0545 add.w r5, r0, r5, lsl #1 + 8020e0c: 6878 ldr r0, [r7, #4] + 8020e0e: f8ad 601e strh.w r6, [sp, #30] + 8020e12: a901 add r1, sp, #4 + 8020e14: 9505 str r5, [sp, #20] + 8020e16: f88d 4022 strb.w r4, [sp, #34] ; 0x22 + 8020e1a: f88d 4021 strb.w r4, [sp, #33] ; 0x21 + 8020e1e: f88d 4023 strb.w r4, [sp, #35] ; 0x23 + 8020e22: f88d 4024 strb.w r4, [sp, #36] ; 0x24 + 8020e26: 6803 ldr r3, [r0, #0] + 8020e28: 685b ldr r3, [r3, #4] + 8020e2a: 4798 blx r3 + 8020e2c: b00a add sp, #40 ; 0x28 + 8020e2e: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + +08020e32 <_ZN8touchgfx3HAL12blitFillWordEtttttt>: + 8020e32: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} + 8020e36: b08b sub sp, #44 ; 0x2c + 8020e38: 2400 movs r4, #0 + 8020e3a: 4691 mov r9, r2 + 8020e3c: 461d mov r5, r3 + 8020e3e: f8bd 6050 ldrh.w r6, [sp, #80] ; 0x50 + 8020e42: f44f 6300 mov.w r3, #2048 ; 0x800 + 8020e46: 4688 mov r8, r1 + 8020e48: 4607 mov r7, r0 + 8020e4a: 9404 str r4, [sp, #16] + 8020e4c: fb06 9505 mla r5, r6, r5, r9 + 8020e50: e9cd 3401 strd r3, r4, [sp, #4] + 8020e54: f7ff ffa6 bl 8020da4 <_ZN8touchgfx3HAL20getClientFrameBufferEv> + 8020e58: f8bd 3048 ldrh.w r3, [sp, #72] ; 0x48 + 8020e5c: eb00 0545 add.w r5, r0, r5, lsl #1 + 8020e60: 6878 ldr r0, [r7, #4] + 8020e62: f8ad 3018 strh.w r3, [sp, #24] + 8020e66: a901 add r1, sp, #4 + 8020e68: f8bd 304c ldrh.w r3, [sp, #76] ; 0x4c + 8020e6c: 9505 str r5, [sp, #20] + 8020e6e: f8ad 301a strh.w r3, [sp, #26] + 8020e72: f8ad 401c strh.w r4, [sp, #28] + 8020e76: f8ad 601e strh.w r6, [sp, #30] + 8020e7a: f8cd 8010 str.w r8, [sp, #16] + 8020e7e: f8ad 4020 strh.w r4, [sp, #32] + 8020e82: f88d 4022 strb.w r4, [sp, #34] ; 0x22 + 8020e86: f88d 4023 strb.w r4, [sp, #35] ; 0x23 + 8020e8a: f88d 4024 strb.w r4, [sp, #36] ; 0x24 + 8020e8e: 6803 ldr r3, [r0, #0] + 8020e90: 685b ldr r3, [r3, #4] + 8020e92: 4798 blx r3 + 8020e94: b00b add sp, #44 ; 0x2c + 8020e96: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} + ... + +08020e9c <_ZN8touchgfx3HAL8blitCopyEPKtPKhttttthbtNS_6Bitmap12BitmapFormatES6_b>: + 8020e9c: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} + 8020ea0: b08a sub sp, #40 ; 0x28 + 8020ea2: 4698 mov r8, r3 + 8020ea4: 2300 movs r3, #0 + 8020ea6: 4606 mov r6, r0 + 8020ea8: f89d 505c ldrb.w r5, [sp, #92] ; 0x5c + 8020eac: f89d 0050 ldrb.w r0, [sp, #80] ; 0x50 + 8020eb0: 2d0b cmp r5, #11 + 8020eb2: f89d c054 ldrb.w ip, [sp, #84] ; 0x54 + 8020eb6: f8bd 7058 ldrh.w r7, [sp, #88] ; 0x58 + 8020eba: f89d 4060 ldrb.w r4, [sp, #96] ; 0x60 + 8020ebe: 9304 str r3, [sp, #16] + 8020ec0: d137 bne.n 8020f32 <_ZN8touchgfx3HAL8blitCopyEPKtPKhttttthbtNS_6Bitmap12BitmapFormatES6_b+0x96> + 8020ec2: 2380 movs r3, #128 ; 0x80 + 8020ec4: f88d 0020 strb.w r0, [sp, #32] + 8020ec8: 4630 mov r0, r6 + 8020eca: 9203 str r2, [sp, #12] + 8020ecc: e9cd 3101 strd r3, r1, [sp, #4] + 8020ed0: f8bd 3044 ldrh.w r3, [sp, #68] ; 0x44 + 8020ed4: f8ad 3018 strh.w r3, [sp, #24] + 8020ed8: f8bd 3048 ldrh.w r3, [sp, #72] ; 0x48 + 8020edc: f8ad 301a strh.w r3, [sp, #26] + 8020ee0: f8bd 304c ldrh.w r3, [sp, #76] ; 0x4c + 8020ee4: f8ad 301c strh.w r3, [sp, #28] + 8020ee8: f7ff ff5c bl 8020da4 <_ZN8touchgfx3HAL20getClientFrameBufferEv> + 8020eec: 2c0b cmp r4, #11 + 8020eee: f8bd 2040 ldrh.w r2, [sp, #64] ; 0x40 + 8020ef2: f8ad 701e strh.w r7, [sp, #30] + 8020ef6: bf94 ite ls + 8020ef8: 4b19 ldrls r3, [pc, #100] ; (8020f60 <_ZN8touchgfx3HAL8blitCopyEPKtPKhttttthbtNS_6Bitmap12BitmapFormatES6_b+0xc4>) + 8020efa: 2100 movhi r1, #0 + 8020efc: f88d 5021 strb.w r5, [sp, #33] ; 0x21 + 8020f00: bf98 it ls + 8020f02: 5d19 ldrbls r1, [r3, r4] + 8020f04: fb02 8307 mla r3, r2, r7, r8 + 8020f08: f88d 4022 strb.w r4, [sp, #34] ; 0x22 + 8020f0c: 10c9 asrs r1, r1, #3 + 8020f0e: fb01 0003 mla r0, r1, r3, r0 + 8020f12: f89d 3064 ldrb.w r3, [sp, #100] ; 0x64 + 8020f16: a901 add r1, sp, #4 + 8020f18: 9005 str r0, [sp, #20] + 8020f1a: f88d 3023 strb.w r3, [sp, #35] ; 0x23 + 8020f1e: 2300 movs r3, #0 + 8020f20: 6870 ldr r0, [r6, #4] + 8020f22: f88d 3024 strb.w r3, [sp, #36] ; 0x24 + 8020f26: 6803 ldr r3, [r0, #0] + 8020f28: 685b ldr r3, [r3, #4] + 8020f2a: 4798 blx r3 + 8020f2c: b00a add sp, #40 ; 0x28 + 8020f2e: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + 8020f32: 2d02 cmp r5, #2 + 8020f34: d109 bne.n 8020f4a <_ZN8touchgfx3HAL8blitCopyEPKtPKhttttthbtNS_6Bitmap12BitmapFormatES6_b+0xae> + 8020f36: 28ff cmp r0, #255 ; 0xff + 8020f38: d105 bne.n 8020f46 <_ZN8touchgfx3HAL8blitCopyEPKtPKhttttthbtNS_6Bitmap12BitmapFormatES6_b+0xaa> + 8020f3a: f1bc 0f00 cmp.w ip, #0 + 8020f3e: bf14 ite ne + 8020f40: 2340 movne r3, #64 ; 0x40 + 8020f42: 2320 moveq r3, #32 + 8020f44: e7be b.n 8020ec4 <_ZN8touchgfx3HAL8blitCopyEPKtPKhttttthbtNS_6Bitmap12BitmapFormatES6_b+0x28> + 8020f46: 2340 movs r3, #64 ; 0x40 + 8020f48: e7bc b.n 8020ec4 <_ZN8touchgfx3HAL8blitCopyEPKtPKhttttthbtNS_6Bitmap12BitmapFormatES6_b+0x28> + 8020f4a: 28ff cmp r0, #255 ; 0xff + 8020f4c: d105 bne.n 8020f5a <_ZN8touchgfx3HAL8blitCopyEPKtPKhttttthbtNS_6Bitmap12BitmapFormatES6_b+0xbe> + 8020f4e: f1bc 0f00 cmp.w ip, #0 + 8020f52: bf14 ite ne + 8020f54: 2304 movne r3, #4 + 8020f56: 2301 moveq r3, #1 + 8020f58: e7b4 b.n 8020ec4 <_ZN8touchgfx3HAL8blitCopyEPKtPKhttttthbtNS_6Bitmap12BitmapFormatES6_b+0x28> + 8020f5a: 2304 movs r3, #4 + 8020f5c: e7b2 b.n 8020ec4 <_ZN8touchgfx3HAL8blitCopyEPKtPKhttttthbtNS_6Bitmap12BitmapFormatES6_b+0x28> + 8020f5e: bf00 nop + 8020f60: 0803c47c .word 0x0803c47c + +08020f64 <_ZN8touchgfx3HAL8blitFillENS_9colortypeEtttthtNS_6Bitmap12BitmapFormatEb>: + 8020f64: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8020f68: b08b sub sp, #44 ; 0x2c + 8020f6a: 461d mov r5, r3 + 8020f6c: 2400 movs r4, #0 + 8020f6e: 4688 mov r8, r1 + 8020f70: f89d 9058 ldrb.w r9, [sp, #88] ; 0x58 + 8020f74: 4693 mov fp, r2 + 8020f76: f89d 6060 ldrb.w r6, [sp, #96] ; 0x60 + 8020f7a: 4607 mov r7, r0 + 8020f7c: f1b9 0fff cmp.w r9, #255 ; 0xff + 8020f80: f8bd a05c ldrh.w sl, [sp, #92] ; 0x5c + 8020f84: 9404 str r4, [sp, #16] + 8020f86: bf14 ite ne + 8020f88: 2308 movne r3, #8 + 8020f8a: 2302 moveq r3, #2 + 8020f8c: fb05 b50a mla r5, r5, sl, fp + 8020f90: e9cd 3401 strd r3, r4, [sp, #4] + 8020f94: f7ff ff06 bl 8020da4 <_ZN8touchgfx3HAL20getClientFrameBufferEv> + 8020f98: 2e0b cmp r6, #11 + 8020f9a: f89d 2064 ldrb.w r2, [sp, #100] ; 0x64 + 8020f9e: a901 add r1, sp, #4 + 8020fa0: bf98 it ls + 8020fa2: 4b13 ldrls r3, [pc, #76] ; (8020ff0 <_ZN8touchgfx3HAL8blitFillENS_9colortypeEtttthtNS_6Bitmap12BitmapFormatEb+0x8c>) + 8020fa4: f8ad a01e strh.w sl, [sp, #30] + 8020fa8: bf98 it ls + 8020faa: 5d9c ldrbls r4, [r3, r6] + 8020fac: f8bd 3050 ldrh.w r3, [sp, #80] ; 0x50 + 8020fb0: 10e4 asrs r4, r4, #3 + 8020fb2: f8cd 8010 str.w r8, [sp, #16] + 8020fb6: f8ad 3018 strh.w r3, [sp, #24] + 8020fba: f8bd 3054 ldrh.w r3, [sp, #84] ; 0x54 + 8020fbe: fb04 0405 mla r4, r4, r5, r0 + 8020fc2: 6878 ldr r0, [r7, #4] + 8020fc4: f8ad 301a strh.w r3, [sp, #26] + 8020fc8: 2300 movs r3, #0 + 8020fca: 9405 str r4, [sp, #20] + 8020fcc: f8ad 301c strh.w r3, [sp, #28] + 8020fd0: f88d 9020 strb.w r9, [sp, #32] + 8020fd4: f88d 2023 strb.w r2, [sp, #35] ; 0x23 + 8020fd8: f88d 3024 strb.w r3, [sp, #36] ; 0x24 + 8020fdc: f88d 6021 strb.w r6, [sp, #33] ; 0x21 + 8020fe0: f88d 6022 strb.w r6, [sp, #34] ; 0x22 + 8020fe4: 6803 ldr r3, [r0, #0] + 8020fe6: 685b ldr r3, [r3, #4] + 8020fe8: 4798 blx r3 + 8020fea: b00b add sp, #44 ; 0x2c + 8020fec: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 8020ff0: 0803c47c .word 0x0803c47c + +08020ff4 <_ZNK8touchgfx3HAL13getDstAddressEttPt>: + 8020ff4: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} + 8020ff8: 461e mov r6, r3 + 8020ffa: 4b0a ldr r3, [pc, #40] ; (8021024 <_ZNK8touchgfx3HAL13getDstAddressEttPt+0x30>) + 8020ffc: 460f mov r7, r1 + 8020ffe: 4690 mov r8, r2 + 8021000: 881d ldrh r5, [r3, #0] + 8021002: f7e3 f873 bl 80040ec <_ZN8touchgfx3HAL3lcdEv> + 8021006: 6803 ldr r3, [r0, #0] + 8021008: 6adb ldr r3, [r3, #44] ; 0x2c + 802100a: 4798 blx r3 + 802100c: 280b cmp r0, #11 + 802100e: bf96 itet ls + 8021010: 4b05 ldrls r3, [pc, #20] ; (8021028 <_ZNK8touchgfx3HAL13getDstAddressEttPt+0x34>) + 8021012: 2400 movhi r4, #0 + 8021014: 5c1c ldrbls r4, [r3, r0] + 8021016: fb08 7005 mla r0, r8, r5, r7 + 802101a: 10e4 asrs r4, r4, #3 + 802101c: fb04 6000 mla r0, r4, r0, r6 + 8021020: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + 8021024: 2001e72e .word 0x2001e72e + 8021028: 0803c47c .word 0x0803c47c + +0802102c <_ZN8touchgfx3HAL13blitCopyGlyphEPKhtttttNS_9colortypeEhNS_14BlitOperationsEb>: + 802102c: b5f0 push {r4, r5, r6, r7, lr} + 802102e: b08b sub sp, #44 ; 0x2c + 8021030: 461f mov r7, r3 + 8021032: 4604 mov r4, r0 + 8021034: 4616 mov r6, r2 + 8021036: f8bd 3054 ldrh.w r3, [sp, #84] ; 0x54 + 802103a: 2500 movs r5, #0 + 802103c: e9cd 3101 strd r3, r1, [sp, #4] + 8021040: f8bd 3040 ldrh.w r3, [sp, #64] ; 0x40 + 8021044: 9504 str r5, [sp, #16] + 8021046: f8ad 3018 strh.w r3, [sp, #24] + 802104a: f8bd 3044 ldrh.w r3, [sp, #68] ; 0x44 + 802104e: f8ad 301a strh.w r3, [sp, #26] + 8021052: f8bd 3048 ldrh.w r3, [sp, #72] ; 0x48 + 8021056: f8ad 301c strh.w r3, [sp, #28] + 802105a: f89d 3050 ldrb.w r3, [sp, #80] ; 0x50 + 802105e: f88d 3020 strb.w r3, [sp, #32] + 8021062: f7ff fe9f bl 8020da4 <_ZN8touchgfx3HAL20getClientFrameBufferEv> + 8021066: 463a mov r2, r7 + 8021068: 4631 mov r1, r6 + 802106a: 4603 mov r3, r0 + 802106c: 4620 mov r0, r4 + 802106e: f7ff ffc1 bl 8020ff4 <_ZNK8touchgfx3HAL13getDstAddressEttPt> + 8021072: 4b0e ldr r3, [pc, #56] ; (80210ac <_ZN8touchgfx3HAL13blitCopyGlyphEPKhtttttNS_9colortypeEhNS_14BlitOperationsEb+0x80>) + 8021074: 9005 str r0, [sp, #20] + 8021076: 881b ldrh r3, [r3, #0] + 8021078: f8ad 301e strh.w r3, [sp, #30] + 802107c: f7e3 f836 bl 80040ec <_ZN8touchgfx3HAL3lcdEv> + 8021080: 6803 ldr r3, [r0, #0] + 8021082: 6adb ldr r3, [r3, #44] ; 0x2c + 8021084: 4798 blx r3 + 8021086: 9b13 ldr r3, [sp, #76] ; 0x4c + 8021088: f88d 0022 strb.w r0, [sp, #34] ; 0x22 + 802108c: a901 add r1, sp, #4 + 802108e: f88d 0021 strb.w r0, [sp, #33] ; 0x21 + 8021092: 9304 str r3, [sp, #16] + 8021094: 6860 ldr r0, [r4, #4] + 8021096: f89d 3058 ldrb.w r3, [sp, #88] ; 0x58 + 802109a: f88d 5024 strb.w r5, [sp, #36] ; 0x24 + 802109e: f88d 3023 strb.w r3, [sp, #35] ; 0x23 + 80210a2: 6803 ldr r3, [r0, #0] + 80210a4: 685b ldr r3, [r3, #4] + 80210a6: 4798 blx r3 + 80210a8: b00b add sp, #44 ; 0x2c + 80210aa: bdf0 pop {r4, r5, r6, r7, pc} + 80210ac: 2001e72e .word 0x2001e72e + +080210b0 <_ZN8touchgfx3HAL20copyFBRegionToMemoryENS_4RectE>: + 80210b0: b5f0 push {r4, r5, r6, r7, lr} + 80210b2: b08d sub sp, #52 ; 0x34 + 80210b4: 2501 movs r5, #1 + 80210b6: 4604 mov r4, r0 + 80210b8: 466b mov r3, sp + 80210ba: 9503 str r5, [sp, #12] + 80210bc: e883 0006 stmia.w r3, {r1, r2} + 80210c0: 2300 movs r3, #0 + 80210c2: f8bd 6000 ldrh.w r6, [sp] + 80210c6: f8bd 7002 ldrh.w r7, [sp, #2] + 80210ca: 9306 str r3, [sp, #24] + 80210cc: 6803 ldr r3, [r0, #0] + 80210ce: 6b1b ldr r3, [r3, #48] ; 0x30 + 80210d0: 4798 blx r3 + 80210d2: 463a mov r2, r7 + 80210d4: 4631 mov r1, r6 + 80210d6: 4603 mov r3, r0 + 80210d8: 4620 mov r0, r4 + 80210da: f7ff ff8b bl 8020ff4 <_ZNK8touchgfx3HAL13getDstAddressEttPt> + 80210de: 6c63 ldr r3, [r4, #68] ; 0x44 + 80210e0: 9004 str r0, [sp, #16] + 80210e2: 9307 str r3, [sp, #28] + 80210e4: f8bd 3004 ldrh.w r3, [sp, #4] + 80210e8: f8ad 3020 strh.w r3, [sp, #32] + 80210ec: f8bd 3006 ldrh.w r3, [sp, #6] + 80210f0: f8ad 3022 strh.w r3, [sp, #34] ; 0x22 + 80210f4: 4b0e ldr r3, [pc, #56] ; (8021130 <_ZN8touchgfx3HAL20copyFBRegionToMemoryENS_4RectE+0x80>) + 80210f6: 881b ldrh r3, [r3, #0] + 80210f8: f8ad 3024 strh.w r3, [sp, #36] ; 0x24 + 80210fc: f8ad 3026 strh.w r3, [sp, #38] ; 0x26 + 8021100: f7e2 fff4 bl 80040ec <_ZN8touchgfx3HAL3lcdEv> + 8021104: 6803 ldr r3, [r0, #0] + 8021106: 6adb ldr r3, [r3, #44] ; 0x2c + 8021108: 4798 blx r3 + 802110a: 23ff movs r3, #255 ; 0xff + 802110c: f88d 0029 strb.w r0, [sp, #41] ; 0x29 + 8021110: a903 add r1, sp, #12 + 8021112: f88d 002a strb.w r0, [sp, #42] ; 0x2a + 8021116: 6860 ldr r0, [r4, #4] + 8021118: f88d 3028 strb.w r3, [sp, #40] ; 0x28 + 802111c: f88d 502b strb.w r5, [sp, #43] ; 0x2b + 8021120: f88d 502c strb.w r5, [sp, #44] ; 0x2c + 8021124: 6803 ldr r3, [r0, #0] + 8021126: 685b ldr r3, [r3, #4] + 8021128: 4798 blx r3 + 802112a: 6c60 ldr r0, [r4, #68] ; 0x44 + 802112c: b00d add sp, #52 ; 0x34 + 802112e: bdf0 pop {r4, r5, r6, r7, pc} + 8021130: 2001e72e .word 0x2001e72e + +08021134 <_ZN8touchgfx3HAL20copyFBRegionToMemoryENS_4RectEPtm>: + 8021134: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} + 8021138: b08c sub sp, #48 ; 0x30 + 802113a: 461e mov r6, r3 + 802113c: 2300 movs r3, #0 + 802113e: 4604 mov r4, r0 + 8021140: 466d mov r5, sp + 8021142: 9306 str r3, [sp, #24] + 8021144: 6803 ldr r3, [r0, #0] + 8021146: e885 0006 stmia.w r5, {r1, r2} + 802114a: 2501 movs r5, #1 + 802114c: f8bd 7000 ldrh.w r7, [sp] + 8021150: f8bd 8002 ldrh.w r8, [sp, #2] + 8021154: 9503 str r5, [sp, #12] + 8021156: 6b1b ldr r3, [r3, #48] ; 0x30 + 8021158: 4798 blx r3 + 802115a: 4642 mov r2, r8 + 802115c: 4639 mov r1, r7 + 802115e: 4603 mov r3, r0 + 8021160: 4620 mov r0, r4 + 8021162: f7ff ff47 bl 8020ff4 <_ZNK8touchgfx3HAL13getDstAddressEttPt> + 8021166: f8bd 3004 ldrh.w r3, [sp, #4] + 802116a: 9004 str r0, [sp, #16] + 802116c: f8ad 3020 strh.w r3, [sp, #32] + 8021170: f8bd 3006 ldrh.w r3, [sp, #6] + 8021174: 9607 str r6, [sp, #28] + 8021176: f8ad 3022 strh.w r3, [sp, #34] ; 0x22 + 802117a: 4b10 ldr r3, [pc, #64] ; (80211bc <_ZN8touchgfx3HAL20copyFBRegionToMemoryENS_4RectEPtm+0x88>) + 802117c: 881b ldrh r3, [r3, #0] + 802117e: f8ad 3024 strh.w r3, [sp, #36] ; 0x24 + 8021182: 9b12 ldr r3, [sp, #72] ; 0x48 + 8021184: f8ad 3026 strh.w r3, [sp, #38] ; 0x26 + 8021188: f7e2 ffb0 bl 80040ec <_ZN8touchgfx3HAL3lcdEv> + 802118c: 6803 ldr r3, [r0, #0] + 802118e: 6adb ldr r3, [r3, #44] ; 0x2c + 8021190: 4798 blx r3 + 8021192: 23ff movs r3, #255 ; 0xff + 8021194: f88d 0029 strb.w r0, [sp, #41] ; 0x29 + 8021198: a903 add r1, sp, #12 + 802119a: f88d 002a strb.w r0, [sp, #42] ; 0x2a + 802119e: 6860 ldr r0, [r4, #4] + 80211a0: f88d 3028 strb.w r3, [sp, #40] ; 0x28 + 80211a4: f88d 502b strb.w r5, [sp, #43] ; 0x2b + 80211a8: f88d 502c strb.w r5, [sp, #44] ; 0x2c + 80211ac: 6803 ldr r3, [r0, #0] + 80211ae: 685b ldr r3, [r3, #4] + 80211b0: 4798 blx r3 + 80211b2: 4630 mov r0, r6 + 80211b4: b00c add sp, #48 ; 0x30 + 80211b6: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + 80211ba: bf00 nop + 80211bc: 2001e72e .word 0x2001e72e + +080211c0 <_ZN8touchgfx3HAL25copyFromTFTToClientBufferENS_4RectE>: + 80211c0: b5f0 push {r4, r5, r6, r7, lr} + 80211c2: b085 sub sp, #20 + 80211c4: 4605 mov r5, r0 + 80211c6: ac02 add r4, sp, #8 + 80211c8: e884 0006 stmia.w r4, {r1, r2} + 80211cc: f8bd 6008 ldrh.w r6, [sp, #8] + 80211d0: f8bd 700a ldrh.w r7, [sp, #10] + 80211d4: f7ff fde6 bl 8020da4 <_ZN8touchgfx3HAL20getClientFrameBufferEv> + 80211d8: 4631 mov r1, r6 + 80211da: 4603 mov r3, r0 + 80211dc: 463a mov r2, r7 + 80211de: 4628 mov r0, r5 + 80211e0: f7ff ff08 bl 8020ff4 <_ZNK8touchgfx3HAL13getDstAddressEttPt> + 80211e4: 4a05 ldr r2, [pc, #20] ; (80211fc <_ZN8touchgfx3HAL25copyFromTFTToClientBufferENS_4RectE+0x3c>) + 80211e6: 682b ldr r3, [r5, #0] + 80211e8: 8812 ldrh r2, [r2, #0] + 80211ea: 9200 str r2, [sp, #0] + 80211ec: 6ede ldr r6, [r3, #108] ; 0x6c + 80211ee: 4603 mov r3, r0 + 80211f0: 4628 mov r0, r5 + 80211f2: e894 0006 ldmia.w r4, {r1, r2} + 80211f6: 47b0 blx r6 + 80211f8: b005 add sp, #20 + 80211fa: bdf0 pop {r4, r5, r6, r7, pc} + 80211fc: 2001e72e .word 0x2001e72e + +08021200 <_ZN8touchgfx3HAL16swapFrameBuffersEv>: + 8021200: b570 push {r4, r5, r6, lr} + 8021202: f890 306e ldrb.w r3, [r0, #110] ; 0x6e + 8021206: 4604 mov r4, r0 + 8021208: b19b cbz r3, 8021232 <_ZN8touchgfx3HAL16swapFrameBuffersEv+0x32> + 802120a: 2002 movs r0, #2 + 802120c: f7e1 fa88 bl 8002720 <_ZN8touchgfx4GPIO6toggleENS0_7GPIO_IDE> + 8021210: 2300 movs r3, #0 + 8021212: 4620 mov r0, r4 + 8021214: f884 306e strb.w r3, [r4, #110] ; 0x6e + 8021218: f884 306d strb.w r3, [r4, #109] ; 0x6d + 802121c: 6823 ldr r3, [r4, #0] + 802121e: f8d3 50b8 ldr.w r5, [r3, #184] ; 0xb8 + 8021222: f7ff fdbf bl 8020da4 <_ZN8touchgfx3HAL20getClientFrameBufferEv> + 8021226: 4601 mov r1, r0 + 8021228: 4620 mov r0, r4 + 802122a: 462b mov r3, r5 + 802122c: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} + 8021230: 4718 bx r3 + 8021232: bd70 pop {r4, r5, r6, pc} + +08021234 <_ZN8touchgfx3HAL12setMCUActiveEb>: + 8021234: b570 push {r4, r5, r6, lr} + 8021236: 4605 mov r5, r0 + 8021238: 460c mov r4, r1 + 802123a: 2003 movs r0, #3 + 802123c: b149 cbz r1, 8021252 <_ZN8touchgfx3HAL12setMCUActiveEb+0x1e> + 802123e: f7e1 fa0f bl 8002660 <_ZN8touchgfx4GPIO3setENS0_7GPIO_IDE> + 8021242: 6928 ldr r0, [r5, #16] + 8021244: b168 cbz r0, 8021262 <_ZN8touchgfx3HAL12setMCUActiveEb+0x2e> + 8021246: 6803 ldr r3, [r0, #0] + 8021248: 2101 movs r1, #1 + 802124a: 695b ldr r3, [r3, #20] + 802124c: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} + 8021250: 4718 bx r3 + 8021252: f7e1 fa35 bl 80026c0 <_ZN8touchgfx4GPIO5clearENS0_7GPIO_IDE> + 8021256: 6928 ldr r0, [r5, #16] + 8021258: b118 cbz r0, 8021262 <_ZN8touchgfx3HAL12setMCUActiveEb+0x2e> + 802125a: 6803 ldr r3, [r0, #0] + 802125c: 4621 mov r1, r4 + 802125e: 695b ldr r3, [r3, #20] + 8021260: e7f4 b.n 802124c <_ZN8touchgfx3HAL12setMCUActiveEb+0x18> + 8021262: bd70 pop {r4, r5, r6, pc} + +08021264 <_ZN8touchgfx3HAL18setRenderingMethodENS0_15RenderingMethodE>: + 8021264: b538 push {r3, r4, r5, lr} + 8021266: f890 307b ldrb.w r3, [r0, #123] ; 0x7b + 802126a: 4604 mov r4, r0 + 802126c: 460d mov r5, r1 + 802126e: 428b cmp r3, r1 + 8021270: d006 beq.n 8021280 <_ZN8touchgfx3HAL18setRenderingMethodENS0_15RenderingMethodE+0x1c> + 8021272: 6803 ldr r3, [r0, #0] + 8021274: b929 cbnz r1, 8021282 <_ZN8touchgfx3HAL18setRenderingMethodENS0_15RenderingMethodE+0x1e> + 8021276: f8d3 30c8 ldr.w r3, [r3, #200] ; 0xc8 + 802127a: 4798 blx r3 + 802127c: f884 507b strb.w r5, [r4, #123] ; 0x7b + 8021280: bd38 pop {r3, r4, r5, pc} + 8021282: f8d3 30cc ldr.w r3, [r3, #204] ; 0xcc + 8021286: e7f8 b.n 802127a <_ZN8touchgfx3HAL18setRenderingMethodENS0_15RenderingMethodE+0x16> + +08021288 <_ZN8touchgfx3HAL15lockFrameBufferEv>: + 8021288: 4b0d ldr r3, [pc, #52] ; (80212c0 <_ZN8touchgfx3HAL15lockFrameBufferEv+0x38>) + 802128a: b510 push {r4, lr} + 802128c: 781b ldrb r3, [r3, #0] + 802128e: 4604 mov r4, r0 + 8021290: b95b cbnz r3, 80212aa <_ZN8touchgfx3HAL15lockFrameBufferEv+0x22> + 8021292: f890 3048 ldrb.w r3, [r0, #72] ; 0x48 + 8021296: 2b02 cmp r3, #2 + 8021298: d007 beq.n 80212aa <_ZN8touchgfx3HAL15lockFrameBufferEv+0x22> + 802129a: 6840 ldr r0, [r0, #4] + 802129c: f000 f912 bl 80214c4 <_ZN8touchgfx13DMA_Interface15isDmaQueueEmptyEv> + 80212a0: b118 cbz r0, 80212aa <_ZN8touchgfx3HAL15lockFrameBufferEv+0x22> + 80212a2: 6862 ldr r2, [r4, #4] + 80212a4: 7a53 ldrb r3, [r2, #9] + 80212a6: 2b00 cmp r3, #0 + 80212a8: d0fc beq.n 80212a4 <_ZN8touchgfx3HAL15lockFrameBufferEv+0x1c> + 80212aa: f7e1 fbbd bl 8002a28 <_ZN8touchgfx10OSWrappers24takeFrameBufferSemaphoreEv> + 80212ae: 4620 mov r0, r4 + 80212b0: 2100 movs r1, #0 + 80212b2: f7ff ffd7 bl 8021264 <_ZN8touchgfx3HAL18setRenderingMethodENS0_15RenderingMethodE> + 80212b6: 4620 mov r0, r4 + 80212b8: f7ff fd74 bl 8020da4 <_ZN8touchgfx3HAL20getClientFrameBufferEv> + 80212bc: bd10 pop {r4, pc} + 80212be: bf00 nop + 80212c0: 2001e732 .word 0x2001e732 + +080212c4 <_ZN8touchgfx17LockFreeDMA_Queue7isEmptyEv>: + 80212c4: e9d0 2003 ldrd r2, r0, [r0, #12] + 80212c8: 1a13 subs r3, r2, r0 + 80212ca: 4258 negs r0, r3 + 80212cc: 4158 adcs r0, r3 + 80212ce: 4770 bx lr + +080212d0 <_ZN8touchgfx17LockFreeDMA_Queue6isFullEv>: + 80212d0: e9d0 2303 ldrd r2, r3, [r0, #12] + 80212d4: 1a9b subs r3, r3, r2 + 80212d6: 2b00 cmp r3, #0 + 80212d8: bfdc itt le + 80212da: 6882 ldrle r2, [r0, #8] + 80212dc: 189b addle r3, r3, r2 + 80212de: 2b01 cmp r3, #1 + 80212e0: bfcc ite gt + 80212e2: 2000 movgt r0, #0 + 80212e4: 2001 movle r0, #1 + 80212e6: 4770 bx lr + +080212e8 <_ZN8touchgfx17LockFreeDMA_Queue5firstEv>: + 80212e8: 6902 ldr r2, [r0, #16] + 80212ea: 6843 ldr r3, [r0, #4] + 80212ec: 2024 movs r0, #36 ; 0x24 + 80212ee: fb00 3002 mla r0, r0, r2, r3 + 80212f2: 4770 bx lr + +080212f4 <_ZN8touchgfx13DMA_Interface13seedExecutionEv>: + 80212f4: 6803 ldr r3, [r0, #0] + 80212f6: 691b ldr r3, [r3, #16] + 80212f8: 4718 bx r3 + +080212fa <_ZN8touchgfx13DMA_Interface7executeEv>: + 80212fa: 2301 movs r3, #1 + 80212fc: b570 push {r4, r5, r6, lr} + 80212fe: 7203 strb r3, [r0, #8] + 8021300: 4604 mov r4, r0 + 8021302: 6840 ldr r0, [r0, #4] + 8021304: 6803 ldr r3, [r0, #0] + 8021306: 699b ldr r3, [r3, #24] + 8021308: 4798 blx r3 + 802130a: 6803 ldr r3, [r0, #0] + 802130c: 4605 mov r5, r0 + 802130e: 2b40 cmp r3, #64 ; 0x40 + 8021310: d00c beq.n 802132c <_ZN8touchgfx13DMA_Interface7executeEv+0x32> + 8021312: d810 bhi.n 8021336 <_ZN8touchgfx13DMA_Interface7executeEv+0x3c> + 8021314: 2b04 cmp r3, #4 + 8021316: d01d beq.n 8021354 <_ZN8touchgfx13DMA_Interface7executeEv+0x5a> + 8021318: d804 bhi.n 8021324 <_ZN8touchgfx13DMA_Interface7executeEv+0x2a> + 802131a: 2b01 cmp r3, #1 + 802131c: d006 beq.n 802132c <_ZN8touchgfx13DMA_Interface7executeEv+0x32> + 802131e: 2b02 cmp r3, #2 + 8021320: d02c beq.n 802137c <_ZN8touchgfx13DMA_Interface7executeEv+0x82> + 8021322: bd70 pop {r4, r5, r6, pc} + 8021324: 2b08 cmp r3, #8 + 8021326: d01d beq.n 8021364 <_ZN8touchgfx13DMA_Interface7executeEv+0x6a> + 8021328: 2b20 cmp r3, #32 + 802132a: d1fa bne.n 8021322 <_ZN8touchgfx13DMA_Interface7executeEv+0x28> + 802132c: 6823 ldr r3, [r4, #0] + 802132e: 4620 mov r0, r4 + 8021330: 6bdb ldr r3, [r3, #60] ; 0x3c + 8021332: 4798 blx r3 + 8021334: e013 b.n 802135e <_ZN8touchgfx13DMA_Interface7executeEv+0x64> + 8021336: f5b3 7f00 cmp.w r3, #512 ; 0x200 + 802133a: d0f7 beq.n 802132c <_ZN8touchgfx13DMA_Interface7executeEv+0x32> + 802133c: d804 bhi.n 8021348 <_ZN8touchgfx13DMA_Interface7executeEv+0x4e> + 802133e: 2b80 cmp r3, #128 ; 0x80 + 8021340: d0f4 beq.n 802132c <_ZN8touchgfx13DMA_Interface7executeEv+0x32> + 8021342: f5b3 7f80 cmp.w r3, #256 ; 0x100 + 8021346: e7f0 b.n 802132a <_ZN8touchgfx13DMA_Interface7executeEv+0x30> + 8021348: f5b3 6f80 cmp.w r3, #1024 ; 0x400 + 802134c: d0ee beq.n 802132c <_ZN8touchgfx13DMA_Interface7executeEv+0x32> + 802134e: f5b3 6f00 cmp.w r3, #2048 ; 0x800 + 8021352: e7e5 b.n 8021320 <_ZN8touchgfx13DMA_Interface7executeEv+0x26> + 8021354: 6823 ldr r3, [r4, #0] + 8021356: 7f01 ldrb r1, [r0, #28] + 8021358: 4620 mov r0, r4 + 802135a: 6b9b ldr r3, [r3, #56] ; 0x38 + 802135c: 4798 blx r3 + 802135e: 6823 ldr r3, [r4, #0] + 8021360: 6b1b ldr r3, [r3, #48] ; 0x30 + 8021362: e006 b.n 8021372 <_ZN8touchgfx13DMA_Interface7executeEv+0x78> + 8021364: 6823 ldr r3, [r4, #0] + 8021366: 7f01 ldrb r1, [r0, #28] + 8021368: 4620 mov r0, r4 + 802136a: 6b9b ldr r3, [r3, #56] ; 0x38 + 802136c: 4798 blx r3 + 802136e: 6823 ldr r3, [r4, #0] + 8021370: 6b5b ldr r3, [r3, #52] ; 0x34 + 8021372: 4629 mov r1, r5 + 8021374: 4620 mov r0, r4 + 8021376: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} + 802137a: 4718 bx r3 + 802137c: 6823 ldr r3, [r4, #0] + 802137e: 4620 mov r0, r4 + 8021380: 6bdb ldr r3, [r3, #60] ; 0x3c + 8021382: 4798 blx r3 + 8021384: e7f3 b.n 802136e <_ZN8touchgfx13DMA_Interface7executeEv+0x74> + +08021386 <_ZN8touchgfx13DMA_Interface11enableAlphaEh>: + 8021386: 4770 bx lr + +08021388 <_ZN8touchgfx13DMA_Interface12disableAlphaEv>: + 8021388: 4770 bx lr + +0802138a <_ZN8touchgfx17LockFreeDMA_QueueD1Ev>: + 802138a: 4770 bx lr + +0802138c <_ZN8touchgfx17LockFreeDMA_Queue10pushCopyOfERKNS_6BlitOpE>: + 802138c: e9d0 3203 ldrd r3, r2, [r0, #12] + 8021390: b510 push {r4, lr} + 8021392: 1ad2 subs r2, r2, r3 + 8021394: 2a00 cmp r2, #0 + 8021396: bfdc itt le + 8021398: 6884 ldrle r4, [r0, #8] + 802139a: 1912 addle r2, r2, r4 + 802139c: 2a01 cmp r2, #1 + 802139e: dd16 ble.n 80213ce <_ZN8touchgfx17LockFreeDMA_Queue10pushCopyOfERKNS_6BlitOpE+0x42> + 80213a0: 6842 ldr r2, [r0, #4] + 80213a2: 2424 movs r4, #36 ; 0x24 + 80213a4: fb04 2303 mla r3, r4, r3, r2 + 80213a8: f101 0220 add.w r2, r1, #32 + 80213ac: f851 4b04 ldr.w r4, [r1], #4 + 80213b0: 4291 cmp r1, r2 + 80213b2: f843 4b04 str.w r4, [r3], #4 + 80213b6: d1f9 bne.n 80213ac <_ZN8touchgfx17LockFreeDMA_Queue10pushCopyOfERKNS_6BlitOpE+0x20> + 80213b8: 780a ldrb r2, [r1, #0] + 80213ba: 701a strb r2, [r3, #0] + 80213bc: 68c3 ldr r3, [r0, #12] + 80213be: 6882 ldr r2, [r0, #8] + 80213c0: f3bf 8f5b dmb ish + 80213c4: 3301 adds r3, #1 + 80213c6: 429a cmp r2, r3 + 80213c8: bfd8 it le + 80213ca: 1a9b suble r3, r3, r2 + 80213cc: 60c3 str r3, [r0, #12] + 80213ce: bd10 pop {r4, pc} + +080213d0 <_ZN8touchgfx17LockFreeDMA_Queue3popEv>: + 80213d0: 6903 ldr r3, [r0, #16] + 80213d2: 6882 ldr r2, [r0, #8] + 80213d4: f3bf 8f5b dmb ish + 80213d8: 3301 adds r3, #1 + 80213da: 429a cmp r2, r3 + 80213dc: bfd8 it le + 80213de: 1a9b suble r3, r3, r2 + 80213e0: 6103 str r3, [r0, #16] + 80213e2: 4770 bx lr + +080213e4 <_ZN8touchgfx13DMA_Interface10addToQueueERKNS_6BlitOpE>: + 80213e4: b570 push {r4, r5, r6, lr} + 80213e6: 4604 mov r4, r0 + 80213e8: 460e mov r6, r1 + 80213ea: 6860 ldr r0, [r4, #4] + 80213ec: 6803 ldr r3, [r0, #0] + 80213ee: 685b ldr r3, [r3, #4] + 80213f0: 4798 blx r3 + 80213f2: 2800 cmp r0, #0 + 80213f4: d1f9 bne.n 80213ea <_ZN8touchgfx13DMA_Interface10addToQueueERKNS_6BlitOpE+0x6> + 80213f6: 4d0d ldr r5, [pc, #52] ; (802142c <_ZN8touchgfx13DMA_Interface10addToQueueERKNS_6BlitOpE+0x48>) + 80213f8: 6828 ldr r0, [r5, #0] + 80213fa: 6803 ldr r3, [r0, #0] + 80213fc: 6fdb ldr r3, [r3, #124] ; 0x7c + 80213fe: 4798 blx r3 + 8021400: f7e1 fb20 bl 8002a44 <_ZN8touchgfx10OSWrappers27tryTakeFrameBufferSemaphoreEv> + 8021404: 6828 ldr r0, [r5, #0] + 8021406: 2101 movs r1, #1 + 8021408: f7ff ff2c bl 8021264 <_ZN8touchgfx3HAL18setRenderingMethodENS0_15RenderingMethodE> + 802140c: 6860 ldr r0, [r4, #4] + 802140e: 4631 mov r1, r6 + 8021410: 6803 ldr r3, [r0, #0] + 8021412: 689b ldr r3, [r3, #8] + 8021414: 4798 blx r3 + 8021416: 6823 ldr r3, [r4, #0] + 8021418: 4620 mov r0, r4 + 802141a: 6adb ldr r3, [r3, #44] ; 0x2c + 802141c: 4798 blx r3 + 802141e: 6828 ldr r0, [r5, #0] + 8021420: 6803 ldr r3, [r0, #0] + 8021422: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} + 8021426: 6f9b ldr r3, [r3, #120] ; 0x78 + 8021428: 4718 bx r3 + 802142a: bf00 nop + 802142c: 2001e734 .word 0x2001e734 + +08021430 <_ZN8touchgfx13DMA_Interface27waitForFrameBufferSemaphoreEv>: + 8021430: b508 push {r3, lr} + 8021432: f7e1 faf9 bl 8002a28 <_ZN8touchgfx10OSWrappers24takeFrameBufferSemaphoreEv> + 8021436: e8bd 4008 ldmia.w sp!, {r3, lr} + 802143a: f7e1 bafd b.w 8002a38 <_ZN8touchgfx10OSWrappers24giveFrameBufferSemaphoreEv> + +0802143e <_ZN8touchgfx17LockFreeDMA_QueueD0Ev>: + 802143e: b510 push {r4, lr} + 8021440: 4604 mov r4, r0 + 8021442: 2114 movs r1, #20 + 8021444: f012 ff57 bl 80342f6 <_ZdlPvj> + 8021448: 4620 mov r0, r4 + 802144a: bd10 pop {r4, pc} + +0802144c <_ZN8touchgfx13DMA_Interface5startEv>: + 802144c: b510 push {r4, lr} + 802144e: 4604 mov r4, r0 + 8021450: 6840 ldr r0, [r0, #4] + 8021452: 6803 ldr r3, [r0, #0] + 8021454: 681b ldr r3, [r3, #0] + 8021456: 4798 blx r3 + 8021458: b948 cbnz r0, 802146e <_ZN8touchgfx13DMA_Interface5startEv+0x22> + 802145a: 7a63 ldrb r3, [r4, #9] + 802145c: b13b cbz r3, 802146e <_ZN8touchgfx13DMA_Interface5startEv+0x22> + 802145e: 7a23 ldrb r3, [r4, #8] + 8021460: b92b cbnz r3, 802146e <_ZN8touchgfx13DMA_Interface5startEv+0x22> + 8021462: 6823 ldr r3, [r4, #0] + 8021464: 4620 mov r0, r4 + 8021466: 6a5b ldr r3, [r3, #36] ; 0x24 + 8021468: e8bd 4010 ldmia.w sp!, {r4, lr} + 802146c: 4718 bx r3 + 802146e: bd10 pop {r4, pc} + +08021470 <_ZN8touchgfx13DMA_Interface16executeCompletedEv>: + 8021470: b570 push {r4, r5, r6, lr} + 8021472: 4604 mov r4, r0 + 8021474: 6840 ldr r0, [r0, #4] + 8021476: 6803 ldr r3, [r0, #0] + 8021478: 681b ldr r3, [r3, #0] + 802147a: 4798 blx r3 + 802147c: 4605 mov r5, r0 + 802147e: b930 cbnz r0, 802148e <_ZN8touchgfx13DMA_Interface16executeCompletedEv+0x1e> + 8021480: 7a23 ldrb r3, [r4, #8] + 8021482: b123 cbz r3, 802148e <_ZN8touchgfx13DMA_Interface16executeCompletedEv+0x1e> + 8021484: 6860 ldr r0, [r4, #4] + 8021486: 6803 ldr r3, [r0, #0] + 8021488: 695b ldr r3, [r3, #20] + 802148a: 4798 blx r3 + 802148c: 7225 strb r5, [r4, #8] + 802148e: 6860 ldr r0, [r4, #4] + 8021490: 6803 ldr r3, [r0, #0] + 8021492: 681b ldr r3, [r3, #0] + 8021494: 4798 blx r3 + 8021496: b928 cbnz r0, 80214a4 <_ZN8touchgfx13DMA_Interface16executeCompletedEv+0x34> + 8021498: 6823 ldr r3, [r4, #0] + 802149a: 4620 mov r0, r4 + 802149c: 6a5b ldr r3, [r3, #36] ; 0x24 + 802149e: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} + 80214a2: 4718 bx r3 + 80214a4: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} + 80214a8: f7e1 bad4 b.w 8002a54 <_ZN8touchgfx10OSWrappers31giveFrameBufferSemaphoreFromISREv> + +080214ac <_ZN8touchgfx17LockFreeDMA_QueueC1EPNS_6BlitOpEi>: + 80214ac: b510 push {r4, lr} + 80214ae: 6082 str r2, [r0, #8] + 80214b0: 2200 movs r2, #0 + 80214b2: 4c03 ldr r4, [pc, #12] ; (80214c0 <_ZN8touchgfx17LockFreeDMA_QueueC1EPNS_6BlitOpEi+0x14>) + 80214b4: e9c0 2203 strd r2, r2, [r0, #12] + 80214b8: e9c0 4100 strd r4, r1, [r0] + 80214bc: bd10 pop {r4, pc} + 80214be: bf00 nop + 80214c0: 0803c490 .word 0x0803c490 + +080214c4 <_ZN8touchgfx13DMA_Interface15isDmaQueueEmptyEv>: + 80214c4: 6840 ldr r0, [r0, #4] + 80214c6: 6803 ldr r3, [r0, #0] + 80214c8: 681b ldr r3, [r3, #0] + 80214ca: 4718 bx r3 + +080214cc <_ZNK8touchgfx8TextArea12getWildcard1Ev>: + 80214cc: 2000 movs r0, #0 + 80214ce: 4770 bx lr + +080214d0 <_ZNK8touchgfx8TextArea12getAlignmentEv>: + 80214d0: 4b07 ldr r3, [pc, #28] ; (80214f0 <_ZNK8touchgfx8TextArea12getAlignmentEv+0x20>) + 80214d2: 8d82 ldrh r2, [r0, #44] ; 0x2c + 80214d4: 881b ldrh r3, [r3, #0] + 80214d6: 4293 cmp r3, r2 + 80214d8: bf81 itttt hi + 80214da: 4b06 ldrhi r3, [pc, #24] ; (80214f4 <_ZNK8touchgfx8TextArea12getAlignmentEv+0x24>) + 80214dc: 681b ldrhi r3, [r3, #0] + 80214de: eb03 0342 addhi.w r3, r3, r2, lsl #1 + 80214e2: 7858 ldrbhi r0, [r3, #1] + 80214e4: bf8c ite hi + 80214e6: f000 0003 andhi.w r0, r0, #3 + 80214ea: 2000 movls r0, #0 + 80214ec: 4770 bx lr + 80214ee: bf00 nop + 80214f0: 2001e788 .word 0x2001e788 + 80214f4: 2001e784 .word 0x2001e784 + +080214f8 <_ZN8touchgfx8TextAreaD1Ev>: + 80214f8: 4770 bx lr + ... + +080214fc <_ZNK8touchgfx8TextArea13getTextHeightEv>: + 80214fc: 4b11 ldr r3, [pc, #68] ; (8021544 <_ZNK8touchgfx8TextArea13getTextHeightEv+0x48>) + 80214fe: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} + 8021502: 8d81 ldrh r1, [r0, #44] ; 0x2c + 8021504: 4604 mov r4, r0 + 8021506: 881b ldrh r3, [r3, #0] + 8021508: 428b cmp r3, r1 + 802150a: d918 bls.n 802153e <_ZNK8touchgfx8TextArea13getTextHeightEv+0x42> + 802150c: 6803 ldr r3, [r0, #0] + 802150e: 6f9d ldr r5, [r3, #120] ; 0x78 + 8021510: 4b0d ldr r3, [pc, #52] ; (8021548 <_ZNK8touchgfx8TextArea13getTextHeightEv+0x4c>) + 8021512: 6818 ldr r0, [r3, #0] + 8021514: f7e3 fc28 bl 8004d68 <_ZNK8touchgfx5Texts7getTextEt> + 8021518: 6823 ldr r3, [r4, #0] + 802151a: 4606 mov r6, r0 + 802151c: 4620 mov r0, r4 + 802151e: 6fdb ldr r3, [r3, #124] ; 0x7c + 8021520: 4798 blx r3 + 8021522: 6823 ldr r3, [r4, #0] + 8021524: 4607 mov r7, r0 + 8021526: 4620 mov r0, r4 + 8021528: f8d3 3080 ldr.w r3, [r3, #128] ; 0x80 + 802152c: 4798 blx r3 + 802152e: 463a mov r2, r7 + 8021530: 4603 mov r3, r0 + 8021532: 4631 mov r1, r6 + 8021534: 4620 mov r0, r4 + 8021536: 46ac mov ip, r5 + 8021538: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} + 802153c: 4760 bx ip + 802153e: 2000 movs r0, #0 + 8021540: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + 8021544: 2001e788 .word 0x2001e788 + 8021548: 2001e790 .word 0x2001e790 + +0802154c <_ZNK8touchgfx8TextArea12getTextWidthEv>: + 802154c: 4b18 ldr r3, [pc, #96] ; (80215b0 <_ZNK8touchgfx8TextArea12getTextWidthEv+0x64>) + 802154e: e92d 43f7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, lr} + 8021552: 8d81 ldrh r1, [r0, #44] ; 0x2c + 8021554: 4604 mov r4, r0 + 8021556: 881b ldrh r3, [r3, #0] + 8021558: 428b cmp r3, r1 + 802155a: d926 bls.n 80215aa <_ZNK8touchgfx8TextArea12getTextWidthEv+0x5e> + 802155c: 4b15 ldr r3, [pc, #84] ; (80215b4 <_ZNK8touchgfx8TextArea12getTextWidthEv+0x68>) + 802155e: 681b ldr r3, [r3, #0] + 8021560: eb03 0241 add.w r2, r3, r1, lsl #1 + 8021564: f813 0011 ldrb.w r0, [r3, r1, lsl #1] + 8021568: 4b13 ldr r3, [pc, #76] ; (80215b8 <_ZNK8touchgfx8TextArea12getTextWidthEv+0x6c>) + 802156a: 7855 ldrb r5, [r2, #1] + 802156c: 681b ldr r3, [r3, #0] + 802156e: f3c5 0581 ubfx r5, r5, #2, #2 + 8021572: f853 6020 ldr.w r6, [r3, r0, lsl #2] + 8021576: 6833 ldr r3, [r6, #0] + 8021578: 69df ldr r7, [r3, #28] + 802157a: 4b10 ldr r3, [pc, #64] ; (80215bc <_ZNK8touchgfx8TextArea12getTextWidthEv+0x70>) + 802157c: 6818 ldr r0, [r3, #0] + 802157e: f7e3 fbf3 bl 8004d68 <_ZNK8touchgfx5Texts7getTextEt> + 8021582: 6823 ldr r3, [r4, #0] + 8021584: 4680 mov r8, r0 + 8021586: 4620 mov r0, r4 + 8021588: 6fdb ldr r3, [r3, #124] ; 0x7c + 802158a: 4798 blx r3 + 802158c: 6823 ldr r3, [r4, #0] + 802158e: 4681 mov r9, r0 + 8021590: 4620 mov r0, r4 + 8021592: f8d3 3080 ldr.w r3, [r3, #128] ; 0x80 + 8021596: 4798 blx r3 + 8021598: 464b mov r3, r9 + 802159a: 9000 str r0, [sp, #0] + 802159c: 4642 mov r2, r8 + 802159e: 4629 mov r1, r5 + 80215a0: 4630 mov r0, r6 + 80215a2: 47b8 blx r7 + 80215a4: b003 add sp, #12 + 80215a6: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} + 80215aa: 2000 movs r0, #0 + 80215ac: e7fa b.n 80215a4 <_ZNK8touchgfx8TextArea12getTextWidthEv+0x58> + 80215ae: bf00 nop + 80215b0: 2001e788 .word 0x2001e788 + 80215b4: 2001e784 .word 0x2001e784 + 80215b8: 2001e78c .word 0x2001e78c + 80215bc: 2001e790 .word 0x2001e790 + +080215c0 <_ZNK8touchgfx8TextArea19calculateTextHeightEPKtz>: + 80215c0: b40e push {r1, r2, r3} + 80215c2: 4b30 ldr r3, [pc, #192] ; (8021684 <_ZNK8touchgfx8TextArea19calculateTextHeightEPKtz+0xc4>) + 80215c4: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} + 80215c8: 881a ldrh r2, [r3, #0] + 80215ca: b09d sub sp, #116 ; 0x74 + 80215cc: 8d83 ldrh r3, [r0, #44] ; 0x2c + 80215ce: 4604 mov r4, r0 + 80215d0: 429a cmp r2, r3 + 80215d2: d954 bls.n 802167e <_ZNK8touchgfx8TextArea19calculateTextHeightEPKtz+0xbe> + 80215d4: aa26 add r2, sp, #152 ; 0x98 + 80215d6: f8df 90b0 ldr.w r9, [pc, #176] ; 8021688 <_ZNK8touchgfx8TextArea19calculateTextHeightEPKtz+0xc8> + 80215da: f8df 80b0 ldr.w r8, [pc, #176] ; 802168c <_ZNK8touchgfx8TextArea19calculateTextHeightEPKtz+0xcc> + 80215de: 9202 str r2, [sp, #8] + 80215e0: f8d9 2000 ldr.w r2, [r9] + 80215e4: f812 2013 ldrb.w r2, [r2, r3, lsl #1] + 80215e8: f8d8 3000 ldr.w r3, [r8] + 80215ec: f853 5022 ldr.w r5, [r3, r2, lsl #2] + 80215f0: 682b ldr r3, [r5, #0] + 80215f2: 4628 mov r0, r5 + 80215f4: 6b9b ldr r3, [r3, #56] ; 0x38 + 80215f6: 4798 blx r3 + 80215f8: 4606 mov r6, r0 + 80215fa: b207 sxth r7, r0 + 80215fc: a803 add r0, sp, #12 + 80215fe: f003 fe93 bl 8025328 <_ZN8touchgfx12TextProviderC1Ev> + 8021602: 682b ldr r3, [r5, #0] + 8021604: 4628 mov r0, r5 + 8021606: 6cdb ldr r3, [r3, #76] ; 0x4c + 8021608: 4798 blx r3 + 802160a: 682b ldr r3, [r5, #0] + 802160c: 4682 mov sl, r0 + 802160e: 4628 mov r0, r5 + 8021610: 6d1b ldr r3, [r3, #80] ; 0x50 + 8021612: 4798 blx r3 + 8021614: 4653 mov r3, sl + 8021616: 9000 str r0, [sp, #0] + 8021618: a803 add r0, sp, #12 + 802161a: 9a02 ldr r2, [sp, #8] + 802161c: 9925 ldr r1, [sp, #148] ; 0x94 + 802161e: f003 fede bl 80253de <_ZN8touchgfx12TextProvider10initializeEPKtSt9__va_listS2_PKNS_24FontContextualFormsTableE> + 8021622: 8da2 ldrh r2, [r4, #44] ; 0x2c + 8021624: f8d9 3000 ldr.w r3, [r9] + 8021628: f894 c037 ldrb.w ip, [r4, #55] ; 0x37 + 802162c: 8925 ldrh r5, [r4, #8] + 802162e: eb03 0142 add.w r1, r3, r2, lsl #1 + 8021632: f813 0012 ldrb.w r0, [r3, r2, lsl #1] + 8021636: eba5 050c sub.w r5, r5, ip + 802163a: 784a ldrb r2, [r1, #1] + 802163c: f8d8 3000 ldr.w r3, [r8] + 8021640: b22d sxth r5, r5 + 8021642: f894 1039 ldrb.w r1, [r4, #57] ; 0x39 + 8021646: f3c2 0281 ubfx r2, r2, #2, #2 + 802164a: 9500 str r5, [sp, #0] + 802164c: f853 3020 ldr.w r3, [r3, r0, lsl #2] + 8021650: a803 add r0, sp, #12 + 8021652: f001 fc37 bl 8022ec4 <_ZN8touchgfx3LCD11getNumLinesERNS_12TextProviderENS_14WideTextActionEhPKNS_4FontEs> + 8021656: f9b4 2034 ldrsh.w r2, [r4, #52] ; 0x34 + 802165a: b203 sxth r3, r0 + 802165c: 18b9 adds r1, r7, r2 + 802165e: 2900 cmp r1, #0 + 8021660: dd0b ble.n 802167a <_ZNK8touchgfx8TextArea19calculateTextHeightEPKtz+0xba> + 8021662: 3b01 subs r3, #1 + 8021664: fb13 f302 smulbb r3, r3, r2 + 8021668: fb16 3300 smlabb r3, r6, r0, r3 + 802166c: b21f sxth r7, r3 + 802166e: 4638 mov r0, r7 + 8021670: b01d add sp, #116 ; 0x74 + 8021672: e8bd 47f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, lr} + 8021676: b003 add sp, #12 + 8021678: 4770 bx lr + 802167a: 2b00 cmp r3, #0 + 802167c: dcf7 bgt.n 802166e <_ZNK8touchgfx8TextArea19calculateTextHeightEPKtz+0xae> + 802167e: 2700 movs r7, #0 + 8021680: e7f5 b.n 802166e <_ZNK8touchgfx8TextArea19calculateTextHeightEPKtz+0xae> + 8021682: bf00 nop + 8021684: 2001e788 .word 0x2001e788 + 8021688: 2001e784 .word 0x2001e784 + 802168c: 2001e78c .word 0x2001e78c + +08021690 <_ZNK8touchgfx8TextArea21calculateBoundingAreaEv>: + 8021690: 4bbd ldr r3, [pc, #756] ; (8021988 <_ZNK8touchgfx8TextArea21calculateBoundingAreaEv+0x2f8>) + 8021692: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8021696: 460c mov r4, r1 + 8021698: 881b ldrh r3, [r3, #0] + 802169a: 8d89 ldrh r1, [r1, #44] ; 0x2c + 802169c: b0a9 sub sp, #164 ; 0xa4 + 802169e: 4680 mov r8, r0 + 80216a0: 428b cmp r3, r1 + 80216a2: d809 bhi.n 80216b8 <_ZNK8touchgfx8TextArea21calculateBoundingAreaEv+0x28> + 80216a4: 2300 movs r3, #0 + 80216a6: f04f 32ff mov.w r2, #4294967295 + 80216aa: 6083 str r3, [r0, #8] + 80216ac: e9c0 3200 strd r3, r2, [r0] + 80216b0: 4640 mov r0, r8 + 80216b2: b029 add sp, #164 ; 0xa4 + 80216b4: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 80216b8: 4eb4 ldr r6, [pc, #720] ; (802198c <_ZNK8touchgfx8TextArea21calculateBoundingAreaEv+0x2fc>) + 80216ba: 6833 ldr r3, [r6, #0] + 80216bc: f813 2011 ldrb.w r2, [r3, r1, lsl #1] + 80216c0: 4bb3 ldr r3, [pc, #716] ; (8021990 <_ZNK8touchgfx8TextArea21calculateBoundingAreaEv+0x300>) + 80216c2: 681b ldr r3, [r3, #0] + 80216c4: f853 5022 ldr.w r5, [r3, r2, lsl #2] + 80216c8: 4bb2 ldr r3, [pc, #712] ; (8021994 <_ZNK8touchgfx8TextArea21calculateBoundingAreaEv+0x304>) + 80216ca: 6818 ldr r0, [r3, #0] + 80216cc: f7e3 fb4c bl 8004d68 <_ZNK8touchgfx5Texts7getTextEt> + 80216d0: 682b ldr r3, [r5, #0] + 80216d2: 4681 mov r9, r0 + 80216d4: 4628 mov r0, r5 + 80216d6: 6b9b ldr r3, [r3, #56] ; 0x38 + 80216d8: 4798 blx r3 + 80216da: 8ea7 ldrh r7, [r4, #52] ; 0x34 + 80216dc: b203 sxth r3, r0 + 80216de: 4682 mov sl, r0 + 80216e0: 4407 add r7, r0 + 80216e2: a80f add r0, sp, #60 ; 0x3c + 80216e4: 9304 str r3, [sp, #16] + 80216e6: b2bb uxth r3, r7 + 80216e8: 9303 str r3, [sp, #12] + 80216ea: f894 3039 ldrb.w r3, [r4, #57] ; 0x39 + 80216ee: 2b00 cmp r3, #0 + 80216f0: f040 80a5 bne.w 802183e <_ZNK8touchgfx8TextArea21calculateBoundingAreaEv+0x1ae> + 80216f4: f003 fe18 bl 8025328 <_ZN8touchgfx12TextProviderC1Ev> + 80216f8: 682b ldr r3, [r5, #0] + 80216fa: 4628 mov r0, r5 + 80216fc: 6cdb ldr r3, [r3, #76] ; 0x4c + 80216fe: 4798 blx r3 + 8021700: 682b ldr r3, [r5, #0] + 8021702: 4606 mov r6, r0 + 8021704: 4628 mov r0, r5 + 8021706: 6d1b ldr r3, [r3, #80] ; 0x50 + 8021708: 4798 blx r3 + 802170a: 6823 ldr r3, [r4, #0] + 802170c: 4607 mov r7, r0 + 802170e: 4620 mov r0, r4 + 8021710: 6fdb ldr r3, [r3, #124] ; 0x7c + 8021712: 4798 blx r3 + 8021714: 6823 ldr r3, [r4, #0] + 8021716: 4683 mov fp, r0 + 8021718: 4620 mov r0, r4 + 802171a: f8d3 3080 ldr.w r3, [r3, #128] ; 0x80 + 802171e: 4798 blx r3 + 8021720: 463b mov r3, r7 + 8021722: 4649 mov r1, r9 + 8021724: 4632 mov r2, r6 + 8021726: 2600 movs r6, #0 + 8021728: e9cd b000 strd fp, r0, [sp] + 802172c: a80f add r0, sp, #60 ; 0x3c + 802172e: 4637 mov r7, r6 + 8021730: f003 fe6a bl 8025408 <_ZN8touchgfx12TextProvider10initializeEPKtS2_PKNS_24FontContextualFormsTableEz> + 8021734: f894 3038 ldrb.w r3, [r4, #56] ; 0x38 + 8021738: f8df b250 ldr.w fp, [pc, #592] ; 802198c <_ZNK8touchgfx8TextArea21calculateBoundingAreaEv+0x2fc> + 802173c: f013 0ffd tst.w r3, #253 ; 0xfd + 8021740: bf0c ite eq + 8021742: f9b4 900a ldrsheq.w r9, [r4, #10] + 8021746: f9b4 9008 ldrshne.w r9, [r4, #8] + 802174a: 8da2 ldrh r2, [r4, #44] ; 0x2c + 802174c: 4629 mov r1, r5 + 802174e: f8db 3000 ldr.w r3, [fp] + 8021752: a80f add r0, sp, #60 ; 0x3c + 8021754: 3701 adds r7, #1 + 8021756: eb03 0342 add.w r3, r3, r2, lsl #1 + 802175a: f647 72ff movw r2, #32767 ; 0x7fff + 802175e: b2bf uxth r7, r7 + 8021760: 785b ldrb r3, [r3, #1] + 8021762: f3c3 0381 ubfx r3, r3, #2, #2 + 8021766: f001 f8c8 bl 80228fa <_ZN8touchgfx3LCD11stringWidthERNS_12TextProviderERKNS_4FontEih> + 802176a: 9b03 ldr r3, [sp, #12] + 802176c: 4286 cmp r6, r0 + 802176e: eba9 0903 sub.w r9, r9, r3 + 8021772: bfb8 it lt + 8021774: 4606 movlt r6, r0 + 8021776: a80f add r0, sp, #60 ; 0x3c + 8021778: fa0f f989 sxth.w r9, r9 + 802177c: b236 sxth r6, r6 + 802177e: f003 fdfa bl 8025376 <_ZN8touchgfx12TextProvider11endOfStringEv> + 8021782: b918 cbnz r0, 802178c <_ZNK8touchgfx8TextArea21calculateBoundingAreaEv+0xfc> + 8021784: 7a2b ldrb r3, [r5, #8] + 8021786: 444b add r3, r9 + 8021788: 2b00 cmp r3, #0 + 802178a: dcde bgt.n 802174a <_ZNK8touchgfx8TextArea21calculateBoundingAreaEv+0xba> + 802178c: 9b03 ldr r3, [sp, #12] + 802178e: 4620 mov r0, r4 + 8021790: 9a04 ldr r2, [sp, #16] + 8021792: fb13 f707 smulbb r7, r3, r7 + 8021796: 8ea3 ldrh r3, [r4, #52] ; 0x34 + 8021798: f895 9009 ldrb.w r9, [r5, #9] + 802179c: 1aff subs r7, r7, r3 + 802179e: b2bf uxth r7, r7 + 80217a0: b23b sxth r3, r7 + 80217a2: 429a cmp r2, r3 + 80217a4: bfa8 it ge + 80217a6: 4657 movge r7, sl + 80217a8: f894 3038 ldrb.w r3, [r4, #56] ; 0x38 + 80217ac: f013 0ffd tst.w r3, #253 ; 0xfd + 80217b0: 6823 ldr r3, [r4, #0] + 80217b2: 444f add r7, r9 + 80217b4: 6edb ldr r3, [r3, #108] ; 0x6c + 80217b6: bf08 it eq + 80217b8: f9b4 a008 ldrsheq.w sl, [r4, #8] + 80217bc: fa1f f987 uxth.w r9, r7 + 80217c0: bf18 it ne + 80217c2: f9b4 a00a ldrshne.w sl, [r4, #10] + 80217c6: 4798 blx r3 + 80217c8: 2801 cmp r0, #1 + 80217ca: fa0f f789 sxth.w r7, r9 + 80217ce: b2b3 uxth r3, r6 + 80217d0: f000 80e2 beq.w 8021998 <_ZNK8touchgfx8TextArea21calculateBoundingAreaEv+0x308> + 80217d4: 2802 cmp r0, #2 + 80217d6: f894 6037 ldrb.w r6, [r4, #55] ; 0x37 + 80217da: f000 80e3 beq.w 80219a4 <_ZNK8touchgfx8TextArea21calculateBoundingAreaEv+0x314> + 80217de: 7aea ldrb r2, [r5, #11] + 80217e0: b236 sxth r6, r6 + 80217e2: 7b2d ldrb r5, [r5, #12] + 80217e4: 1ab6 subs r6, r6, r2 + 80217e6: 442a add r2, r5 + 80217e8: fa1f fa86 uxth.w sl, r6 + 80217ec: 4413 add r3, r2 + 80217ee: f894 2038 ldrb.w r2, [r4, #56] ; 0x38 + 80217f2: fa0f fb8a sxth.w fp, sl + 80217f6: b29b uxth r3, r3 + 80217f8: 2a02 cmp r2, #2 + 80217fa: b21e sxth r6, r3 + 80217fc: f000 80d6 beq.w 80219ac <_ZNK8touchgfx8TextArea21calculateBoundingAreaEv+0x31c> + 8021800: 2a03 cmp r2, #3 + 8021802: f000 80de beq.w 80219c2 <_ZNK8touchgfx8TextArea21calculateBoundingAreaEv+0x332> + 8021806: 2a01 cmp r2, #1 + 8021808: f040 80e6 bne.w 80219d8 <_ZNK8touchgfx8TextArea21calculateBoundingAreaEv+0x348> + 802180c: 8925 ldrh r5, [r4, #8] + 802180e: 4633 mov r3, r6 + 8021810: 463e mov r6, r7 + 8021812: eba5 0909 sub.w r9, r5, r9 + 8021816: 461f mov r7, r3 + 8021818: 465d mov r5, fp + 802181a: fa0f fb89 sxth.w fp, r9 + 802181e: 4b5d ldr r3, [pc, #372] ; (8021994 <_ZNK8touchgfx8TextArea21calculateBoundingAreaEv+0x304>) + 8021820: 8da1 ldrh r1, [r4, #44] ; 0x2c + 8021822: 6818 ldr r0, [r3, #0] + 8021824: f7e3 faa0 bl 8004d68 <_ZNK8touchgfx5Texts7getTextEt> + 8021828: f8a8 b000 strh.w fp, [r8] + 802182c: f8a8 5002 strh.w r5, [r8, #2] + 8021830: f8a8 6004 strh.w r6, [r8, #4] + 8021834: f8a8 7006 strh.w r7, [r8, #6] + 8021838: f8c8 0008 str.w r0, [r8, #8] + 802183c: e738 b.n 80216b0 <_ZNK8touchgfx8TextArea21calculateBoundingAreaEv+0x20> + 802183e: f003 fd73 bl 8025328 <_ZN8touchgfx12TextProviderC1Ev> + 8021842: 682b ldr r3, [r5, #0] + 8021844: 4628 mov r0, r5 + 8021846: 6cdb ldr r3, [r3, #76] ; 0x4c + 8021848: 4798 blx r3 + 802184a: 682b ldr r3, [r5, #0] + 802184c: 4607 mov r7, r0 + 802184e: 4628 mov r0, r5 + 8021850: 6d1b ldr r3, [r3, #80] ; 0x50 + 8021852: 4798 blx r3 + 8021854: 6823 ldr r3, [r4, #0] + 8021856: 4683 mov fp, r0 + 8021858: 4620 mov r0, r4 + 802185a: 6fdb ldr r3, [r3, #124] ; 0x7c + 802185c: 4798 blx r3 + 802185e: 6822 ldr r2, [r4, #0] + 8021860: 9005 str r0, [sp, #20] + 8021862: 4620 mov r0, r4 + 8021864: f8d2 2080 ldr.w r2, [r2, #128] ; 0x80 + 8021868: 4790 blx r2 + 802186a: 9b05 ldr r3, [sp, #20] + 802186c: 463a mov r2, r7 + 802186e: 4649 mov r1, r9 + 8021870: 9001 str r0, [sp, #4] + 8021872: a80f add r0, sp, #60 ; 0x3c + 8021874: 9300 str r3, [sp, #0] + 8021876: 465b mov r3, fp + 8021878: f003 fdc6 bl 8025408 <_ZN8touchgfx12TextProvider10initializeEPKtS2_PKNS_24FontContextualFormsTableEz> + 802187c: f894 3038 ldrb.w r3, [r4, #56] ; 0x38 + 8021880: f9b4 9008 ldrsh.w r9, [r4, #8] + 8021884: af0f add r7, sp, #60 ; 0x3c + 8021886: f013 0ffd tst.w r3, #253 ; 0xfd + 802188a: f9b4 300a ldrsh.w r3, [r4, #10] + 802188e: 8da1 ldrh r1, [r4, #44] ; 0x2c + 8021890: bf0a itet eq + 8021892: 464a moveq r2, r9 + 8021894: 461a movne r2, r3 + 8021896: 4699 moveq r9, r3 + 8021898: f894 3037 ldrb.w r3, [r4, #55] ; 0x37 + 802189c: f894 0039 ldrb.w r0, [r4, #57] ; 0x39 + 80218a0: 1ad2 subs r2, r2, r3 + 80218a2: 6833 ldr r3, [r6, #0] + 80218a4: f9b4 6034 ldrsh.w r6, [r4, #52] ; 0x34 + 80218a8: eb03 0341 add.w r3, r3, r1, lsl #1 + 80218ac: 7859 ldrb r1, [r3, #1] + 80218ae: 2300 movs r3, #0 + 80218b0: 9707 str r7, [sp, #28] + 80218b2: f3c1 0181 ubfx r1, r1, #2, #2 + 80218b6: f8ad 3018 strh.w r3, [sp, #24] + 80218ba: f88d 0021 strb.w r0, [sp, #33] ; 0x21 + 80218be: f88d 1020 strb.w r1, [sp, #32] + 80218c2: 9509 str r5, [sp, #36] ; 0x24 + 80218c4: f8ad 2028 strh.w r2, [sp, #40] ; 0x28 + 80218c8: f8ad 902a strh.w r9, [sp, #42] ; 0x2a + 80218cc: f8ad 602c strh.w r6, [sp, #44] ; 0x2c + 80218d0: f8ad 302e strh.w r3, [sp, #46] ; 0x2e + 80218d4: f8ad 3030 strh.w r3, [sp, #48] ; 0x30 + 80218d8: f8ad 3032 strh.w r3, [sp, #50] ; 0x32 + 80218dc: f8ad 3034 strh.w r3, [sp, #52] ; 0x34 + 80218e0: f8ad 3036 strh.w r3, [sp, #54] ; 0x36 + 80218e4: f8ad 3038 strh.w r3, [sp, #56] ; 0x38 + 80218e8: f88d 303a strb.w r3, [sp, #58] ; 0x3a + 80218ec: b350 cbz r0, 8021944 <_ZNK8touchgfx8TextArea21calculateBoundingAreaEv+0x2b4> + 80218ee: 682b ldr r3, [r5, #0] + 80218f0: 4628 mov r0, r5 + 80218f2: 695b ldr r3, [r3, #20] + 80218f4: 4798 blx r3 + 80218f6: 4607 mov r7, r0 + 80218f8: b320 cbz r0, 8021944 <_ZNK8touchgfx8TextArea21calculateBoundingAreaEv+0x2b4> + 80218fa: 9809 ldr r0, [sp, #36] ; 0x24 + 80218fc: 4639 mov r1, r7 + 80218fe: 6803 ldr r3, [r0, #0] + 8021900: 68db ldr r3, [r3, #12] + 8021902: 4798 blx r3 + 8021904: 4606 mov r6, r0 + 8021906: b1e8 cbz r0, 8021944 <_ZNK8touchgfx8TextArea21calculateBoundingAreaEv+0x2b4> + 8021908: 7b43 ldrb r3, [r0, #13] + 802190a: 7a82 ldrb r2, [r0, #10] + 802190c: 005b lsls r3, r3, #1 + 802190e: f403 7380 and.w r3, r3, #256 ; 0x100 + 8021912: 4313 orrs r3, r2 + 8021914: f8ad 3038 strh.w r3, [sp, #56] ; 0x38 + 8021918: f89d 3021 ldrb.w r3, [sp, #33] ; 0x21 + 802191c: 2b06 cmp r3, #6 + 802191e: d111 bne.n 8021944 <_ZNK8touchgfx8TextArea21calculateBoundingAreaEv+0x2b4> + 8021920: 9809 ldr r0, [sp, #36] ; 0x24 + 8021922: 4632 mov r2, r6 + 8021924: 4639 mov r1, r7 + 8021926: 6803 ldr r3, [r0, #0] + 8021928: 6c5b ldr r3, [r3, #68] ; 0x44 + 802192a: 4798 blx r3 + 802192c: 7b73 ldrb r3, [r6, #13] + 802192e: 005b lsls r3, r3, #1 + 8021930: f403 7280 and.w r2, r3, #256 ; 0x100 + 8021934: 7ab3 ldrb r3, [r6, #10] + 8021936: 4313 orrs r3, r2 + 8021938: 4418 add r0, r3 + 802193a: f8bd 3038 ldrh.w r3, [sp, #56] ; 0x38 + 802193e: 4418 add r0, r3 + 8021940: f8ad 0038 strh.w r0, [sp, #56] ; 0x38 + 8021944: 2600 movs r6, #0 + 8021946: 4637 mov r7, r6 + 8021948: a806 add r0, sp, #24 + 802194a: 3701 adds r7, #1 + 802194c: f001 f9b7 bl 8022cbe <_ZN8touchgfx3LCD22WideTextInternalStruct23scanStringLengthForLineEv> + 8021950: f8bd 0036 ldrh.w r0, [sp, #54] ; 0x36 + 8021954: 9b03 ldr r3, [sp, #12] + 8021956: b2bf uxth r7, r7 + 8021958: 4286 cmp r6, r0 + 802195a: eba9 0903 sub.w r9, r9, r3 + 802195e: f8bd 3018 ldrh.w r3, [sp, #24] + 8021962: bfb8 it lt + 8021964: 4606 movlt r6, r0 + 8021966: fa0f f989 sxth.w r9, r9 + 802196a: b236 sxth r6, r6 + 802196c: 2b00 cmp r3, #0 + 802196e: f43f af0d beq.w 802178c <_ZNK8touchgfx8TextArea21calculateBoundingAreaEv+0xfc> + 8021972: f89d 303a ldrb.w r3, [sp, #58] ; 0x3a + 8021976: 2b00 cmp r3, #0 + 8021978: f47f af08 bne.w 802178c <_ZNK8touchgfx8TextArea21calculateBoundingAreaEv+0xfc> + 802197c: 7a2b ldrb r3, [r5, #8] + 802197e: 444b add r3, r9 + 8021980: 2b00 cmp r3, #0 + 8021982: dce1 bgt.n 8021948 <_ZNK8touchgfx8TextArea21calculateBoundingAreaEv+0x2b8> + 8021984: e702 b.n 802178c <_ZNK8touchgfx8TextArea21calculateBoundingAreaEv+0xfc> + 8021986: bf00 nop + 8021988: 2001e788 .word 0x2001e788 + 802198c: 2001e784 .word 0x2001e784 + 8021990: 2001e78c .word 0x2001e78c + 8021994: 2001e790 .word 0x2001e790 + 8021998: ebaa 0606 sub.w r6, sl, r6 + 802199c: 2002 movs r0, #2 + 802199e: fb96 f6f0 sdiv r6, r6, r0 + 80219a2: e71c b.n 80217de <_ZNK8touchgfx8TextArea21calculateBoundingAreaEv+0x14e> + 80219a4: 441e add r6, r3 + 80219a6: ebaa 0606 sub.w r6, sl, r6 + 80219aa: e718 b.n 80217de <_ZNK8touchgfx8TextArea21calculateBoundingAreaEv+0x14e> + 80219ac: 8925 ldrh r5, [r4, #8] + 80219ae: 1aed subs r5, r5, r3 + 80219b0: eba5 050a sub.w r5, r5, sl + 80219b4: fa0f fb85 sxth.w fp, r5 + 80219b8: 8965 ldrh r5, [r4, #10] + 80219ba: eba5 0509 sub.w r5, r5, r9 + 80219be: b22d sxth r5, r5 + 80219c0: e72d b.n 802181e <_ZNK8touchgfx8TextArea21calculateBoundingAreaEv+0x18e> + 80219c2: 8965 ldrh r5, [r4, #10] + 80219c4: f04f 0b00 mov.w fp, #0 + 80219c8: 1aed subs r5, r5, r3 + 80219ca: 4633 mov r3, r6 + 80219cc: 463e mov r6, r7 + 80219ce: eba5 050a sub.w r5, r5, sl + 80219d2: 461f mov r7, r3 + 80219d4: b22d sxth r5, r5 + 80219d6: e722 b.n 802181e <_ZNK8touchgfx8TextArea21calculateBoundingAreaEv+0x18e> + 80219d8: 2500 movs r5, #0 + 80219da: e720 b.n 802181e <_ZNK8touchgfx8TextArea21calculateBoundingAreaEv+0x18e> + +080219dc <_ZN8touchgfx8TextAreaD0Ev>: + 80219dc: b510 push {r4, lr} + 80219de: 4604 mov r4, r0 + 80219e0: 2148 movs r1, #72 ; 0x48 + 80219e2: f012 fc88 bl 80342f6 <_ZdlPvj> + 80219e6: 4620 mov r0, r4 + 80219e8: bd10 pop {r4, pc} + ... + +080219ec <_ZNK8touchgfx8TextArea17invalidateContentEv>: + 80219ec: b513 push {r0, r1, r4, lr} + 80219ee: f890 3036 ldrb.w r3, [r0, #54] ; 0x36 + 80219f2: 4604 mov r4, r0 + 80219f4: b1fb cbz r3, 8021a36 <_ZNK8touchgfx8TextArea17invalidateContentEv+0x4a> + 80219f6: 4b16 ldr r3, [pc, #88] ; (8021a50 <_ZNK8touchgfx8TextArea17invalidateContentEv+0x64>) + 80219f8: 8d81 ldrh r1, [r0, #44] ; 0x2c + 80219fa: 881b ldrh r3, [r3, #0] + 80219fc: 428b cmp r3, r1 + 80219fe: d91a bls.n 8021a36 <_ZNK8touchgfx8TextArea17invalidateContentEv+0x4a> + 8021a00: f9b0 3008 ldrsh.w r3, [r0, #8] + 8021a04: 2b00 cmp r3, #0 + 8021a06: dd16 ble.n 8021a36 <_ZNK8touchgfx8TextArea17invalidateContentEv+0x4a> + 8021a08: f9b0 300a ldrsh.w r3, [r0, #10] + 8021a0c: 2b00 cmp r3, #0 + 8021a0e: dd12 ble.n 8021a36 <_ZNK8touchgfx8TextArea17invalidateContentEv+0x4a> + 8021a10: 4b10 ldr r3, [pc, #64] ; (8021a54 <_ZNK8touchgfx8TextArea17invalidateContentEv+0x68>) + 8021a12: 6818 ldr r0, [r3, #0] + 8021a14: f7e3 f9a8 bl 8004d68 <_ZNK8touchgfx5Texts7getTextEt> + 8021a18: f9b4 3042 ldrsh.w r3, [r4, #66] ; 0x42 + 8021a1c: 6822 ldr r2, [r4, #0] + 8021a1e: 2b00 cmp r3, #0 + 8021a20: db06 blt.n 8021a30 <_ZNK8touchgfx8TextArea17invalidateContentEv+0x44> + 8021a22: f9b4 3040 ldrsh.w r3, [r4, #64] ; 0x40 + 8021a26: 2b00 cmp r3, #0 + 8021a28: db02 blt.n 8021a30 <_ZNK8touchgfx8TextArea17invalidateContentEv+0x44> + 8021a2a: 6c63 ldr r3, [r4, #68] ; 0x44 + 8021a2c: 4298 cmp r0, r3 + 8021a2e: d004 beq.n 8021a3a <_ZNK8touchgfx8TextArea17invalidateContentEv+0x4e> + 8021a30: 6953 ldr r3, [r2, #20] + 8021a32: 4620 mov r0, r4 + 8021a34: 4798 blx r3 + 8021a36: b002 add sp, #8 + 8021a38: bd10 pop {r4, pc} + 8021a3a: f104 013c add.w r1, r4, #60 ; 0x3c + 8021a3e: 466b mov r3, sp + 8021a40: 6912 ldr r2, [r2, #16] + 8021a42: c903 ldmia r1, {r0, r1} + 8021a44: e883 0003 stmia.w r3, {r0, r1} + 8021a48: 4619 mov r1, r3 + 8021a4a: 4620 mov r0, r4 + 8021a4c: 4790 blx r2 + 8021a4e: e7f2 b.n 8021a36 <_ZNK8touchgfx8TextArea17invalidateContentEv+0x4a> + 8021a50: 2001e788 .word 0x2001e788 + 8021a54: 2001e790 .word 0x2001e790 + +08021a58 <_ZNK8touchgfx8TextArea4drawERKNS_4RectE>: + 8021a58: 4b45 ldr r3, [pc, #276] ; (8021b70 <_ZNK8touchgfx8TextArea4drawERKNS_4RectE+0x118>) + 8021a5a: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} + 8021a5e: 8d82 ldrh r2, [r0, #44] ; 0x2c + 8021a60: b08e sub sp, #56 ; 0x38 + 8021a62: 881b ldrh r3, [r3, #0] + 8021a64: 4604 mov r4, r0 + 8021a66: 4293 cmp r3, r2 + 8021a68: d97e bls.n 8021b68 <_ZNK8touchgfx8TextArea4drawERKNS_4RectE+0x110> + 8021a6a: 6808 ldr r0, [r1, #0] + 8021a6c: ab05 add r3, sp, #20 + 8021a6e: 6849 ldr r1, [r1, #4] + 8021a70: 4d40 ldr r5, [pc, #256] ; (8021b74 <_ZNK8touchgfx8TextArea4drawERKNS_4RectE+0x11c>) + 8021a72: c303 stmia r3!, {r0, r1} + 8021a74: 4611 mov r1, r2 + 8021a76: 6828 ldr r0, [r5, #0] + 8021a78: f7e3 f976 bl 8004d68 <_ZNK8touchgfx5Texts7getTextEt> + 8021a7c: f9b4 3042 ldrsh.w r3, [r4, #66] ; 0x42 + 8021a80: 2b00 cmp r3, #0 + 8021a82: db11 blt.n 8021aa8 <_ZNK8touchgfx8TextArea4drawERKNS_4RectE+0x50> + 8021a84: f9b4 3040 ldrsh.w r3, [r4, #64] ; 0x40 + 8021a88: 2b00 cmp r3, #0 + 8021a8a: db0d blt.n 8021aa8 <_ZNK8touchgfx8TextArea4drawERKNS_4RectE+0x50> + 8021a8c: 6c63 ldr r3, [r4, #68] ; 0x44 + 8021a8e: 4298 cmp r0, r3 + 8021a90: d10a bne.n 8021aa8 <_ZNK8touchgfx8TextArea4drawERKNS_4RectE+0x50> + 8021a92: f104 023c add.w r2, r4, #60 ; 0x3c + 8021a96: ab09 add r3, sp, #36 ; 0x24 + 8021a98: e892 0003 ldmia.w r2, {r0, r1} + 8021a9c: e883 0003 stmia.w r3, {r0, r1} + 8021aa0: 4619 mov r1, r3 + 8021aa2: a805 add r0, sp, #20 + 8021aa4: f7fe fa22 bl 801feec <_ZN8touchgfx4RectaNERKS0_> + 8021aa8: f9bd 3018 ldrsh.w r3, [sp, #24] + 8021aac: 2b00 cmp r3, #0 + 8021aae: dd5b ble.n 8021b68 <_ZNK8touchgfx8TextArea4drawERKNS_4RectE+0x110> + 8021ab0: f9bd 301a ldrsh.w r3, [sp, #26] + 8021ab4: 2b00 cmp r3, #0 + 8021ab6: dd57 ble.n 8021b68 <_ZNK8touchgfx8TextArea4drawERKNS_4RectE+0x110> + 8021ab8: 4f2f ldr r7, [pc, #188] ; (8021b78 <_ZNK8touchgfx8TextArea4drawERKNS_4RectE+0x120>) + 8021aba: 8da2 ldrh r2, [r4, #44] ; 0x2c + 8021abc: 683b ldr r3, [r7, #0] + 8021abe: f813 2012 ldrb.w r2, [r3, r2, lsl #1] + 8021ac2: 4b2e ldr r3, [pc, #184] ; (8021b7c <_ZNK8touchgfx8TextArea4drawERKNS_4RectE+0x124>) + 8021ac4: 681b ldr r3, [r3, #0] + 8021ac6: f853 6022 ldr.w r6, [r3, r2, lsl #2] + 8021aca: 2e00 cmp r6, #0 + 8021acc: d04c beq.n 8021b68 <_ZNK8touchgfx8TextArea4drawERKNS_4RectE+0x110> + 8021ace: 6823 ldr r3, [r4, #0] + 8021ad0: 4620 mov r0, r4 + 8021ad2: f894 8036 ldrb.w r8, [r4, #54] ; 0x36 + 8021ad6: 6edb ldr r3, [r3, #108] ; 0x6c + 8021ad8: 4798 blx r3 + 8021ada: 8da2 ldrh r2, [r4, #44] ; 0x2c + 8021adc: 683b ldr r3, [r7, #0] + 8021ade: f9b4 c034 ldrsh.w ip, [r4, #52] ; 0x34 + 8021ae2: eb03 0342 add.w r3, r3, r2, lsl #1 + 8021ae6: f894 e038 ldrb.w lr, [r4, #56] ; 0x38 + 8021aea: f894 2039 ldrb.w r2, [r4, #57] ; 0x39 + 8021aee: 785b ldrb r3, [r3, #1] + 8021af0: f894 7037 ldrb.w r7, [r4, #55] ; 0x37 + 8021af4: f3c3 0381 ubfx r3, r3, #2, #2 + 8021af8: 6b21 ldr r1, [r4, #48] ; 0x30 + 8021afa: 9609 str r6, [sp, #36] ; 0x24 + 8021afc: f88d 3029 strb.w r3, [sp, #41] ; 0x29 + 8021b00: 4b1f ldr r3, [pc, #124] ; (8021b80 <_ZNK8touchgfx8TextArea4drawERKNS_4RectE+0x128>) + 8021b02: f88d 0028 strb.w r0, [sp, #40] ; 0x28 + 8021b06: 681b ldr r3, [r3, #0] + 8021b08: f88d e02a strb.w lr, [sp, #42] ; 0x2a + 8021b0c: 910b str r1, [sp, #44] ; 0x2c + 8021b0e: f8ad c030 strh.w ip, [sp, #48] ; 0x30 + 8021b12: f88d 8032 strb.w r8, [sp, #50] ; 0x32 + 8021b16: f88d 7033 strb.w r7, [sp, #51] ; 0x33 + 8021b1a: f88d 2034 strb.w r2, [sp, #52] ; 0x34 + 8021b1e: f893 2058 ldrb.w r2, [r3, #88] ; 0x58 + 8021b22: b10a cbz r2, 8021b28 <_ZNK8touchgfx8TextArea4drawERKNS_4RectE+0xd0> + 8021b24: 6cde ldr r6, [r3, #76] ; 0x4c + 8021b26: b906 cbnz r6, 8021b2a <_ZNK8touchgfx8TextArea4drawERKNS_4RectE+0xd2> + 8021b28: 689e ldr r6, [r3, #8] + 8021b2a: af07 add r7, sp, #28 + 8021b2c: 4621 mov r1, r4 + 8021b2e: 4638 mov r0, r7 + 8021b30: f002 ff6e bl 8024a10 <_ZNK8touchgfx8Drawable15getAbsoluteRectEv> + 8021b34: 8da1 ldrh r1, [r4, #44] ; 0x2c + 8021b36: 6828 ldr r0, [r5, #0] + 8021b38: f7e3 f916 bl 8004d68 <_ZNK8touchgfx5Texts7getTextEt> + 8021b3c: 6823 ldr r3, [r4, #0] + 8021b3e: 4605 mov r5, r0 + 8021b40: 4620 mov r0, r4 + 8021b42: 6fdb ldr r3, [r3, #124] ; 0x7c + 8021b44: 4798 blx r3 + 8021b46: 6823 ldr r3, [r4, #0] + 8021b48: 4680 mov r8, r0 + 8021b4a: 4620 mov r0, r4 + 8021b4c: f8d3 3080 ldr.w r3, [r3, #128] ; 0x80 + 8021b50: 4798 blx r3 + 8021b52: ab09 add r3, sp, #36 ; 0x24 + 8021b54: 9501 str r5, [sp, #4] + 8021b56: 9300 str r3, [sp, #0] + 8021b58: ab05 add r3, sp, #20 + 8021b5a: e9cd 8002 strd r8, r0, [sp, #8] + 8021b5e: 4630 mov r0, r6 + 8021b60: e897 0006 ldmia.w r7, {r1, r2} + 8021b64: f7e3 f8b2 bl 8004ccc <_ZN8touchgfx3LCD10drawStringENS_4RectERKS1_RKNS0_13StringVisualsEPKtz> + 8021b68: b00e add sp, #56 ; 0x38 + 8021b6a: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + 8021b6e: bf00 nop + 8021b70: 2001e788 .word 0x2001e788 + 8021b74: 2001e790 .word 0x2001e790 + 8021b78: 2001e784 .word 0x2001e784 + 8021b7c: 2001e78c .word 0x2001e78c + 8021b80: 2001e734 .word 0x2001e734 + +08021b84 <_ZN8touchgfx8TextArea19resizeToCurrentTextEv>: + 8021b84: b538 push {r3, r4, r5, lr} + 8021b86: 4b0e ldr r3, [pc, #56] ; (8021bc0 <_ZN8touchgfx8TextArea19resizeToCurrentTextEv+0x3c>) + 8021b88: 4604 mov r4, r0 + 8021b8a: 8d82 ldrh r2, [r0, #44] ; 0x2c + 8021b8c: 881b ldrh r3, [r3, #0] + 8021b8e: 429a cmp r2, r3 + 8021b90: d214 bcs.n 8021bbc <_ZN8touchgfx8TextArea19resizeToCurrentTextEv+0x38> + 8021b92: 6803 ldr r3, [r0, #0] + 8021b94: 6f5b ldr r3, [r3, #116] ; 0x74 + 8021b96: 4798 blx r3 + 8021b98: 6823 ldr r3, [r4, #0] + 8021b9a: 4605 mov r5, r0 + 8021b9c: 4620 mov r0, r4 + 8021b9e: 6f1b ldr r3, [r3, #112] ; 0x70 + 8021ba0: 4798 blx r3 + 8021ba2: f894 3038 ldrb.w r3, [r4, #56] ; 0x38 + 8021ba6: b22d sxth r5, r5 + 8021ba8: 4601 mov r1, r0 + 8021baa: f013 0ffd tst.w r3, #253 ; 0xfd + 8021bae: bf06 itte eq + 8021bb0: 4602 moveq r2, r0 + 8021bb2: 4629 moveq r1, r5 + 8021bb4: 462a movne r2, r5 + 8021bb6: 4620 mov r0, r4 + 8021bb8: f7fe fbb2 bl 8020320 <_ZN8touchgfx8Drawable14setWidthHeightEss> + 8021bbc: bd38 pop {r3, r4, r5, pc} + 8021bbe: bf00 nop + 8021bc0: 2001e788 .word 0x2001e788 + +08021bc4 <_ZN8touchgfx8TextArea12setTypedTextERKNS_9TypedTextE>: + 8021bc4: b530 push {r4, r5, lr} + 8021bc6: 888b ldrh r3, [r1, #4] + 8021bc8: b085 sub sp, #20 + 8021bca: 4604 mov r4, r0 + 8021bcc: 8583 strh r3, [r0, #44] ; 0x2c + 8021bce: f9b0 3008 ldrsh.w r3, [r0, #8] + 8021bd2: b923 cbnz r3, 8021bde <_ZN8touchgfx8TextArea12setTypedTextERKNS_9TypedTextE+0x1a> + 8021bd4: f9b0 300a ldrsh.w r3, [r0, #10] + 8021bd8: b90b cbnz r3, 8021bde <_ZN8touchgfx8TextArea12setTypedTextERKNS_9TypedTextE+0x1a> + 8021bda: f7ff ffd3 bl 8021b84 <_ZN8touchgfx8TextArea19resizeToCurrentTextEv> + 8021bde: 6823 ldr r3, [r4, #0] + 8021be0: 466d mov r5, sp + 8021be2: 4621 mov r1, r4 + 8021be4: 343c adds r4, #60 ; 0x3c + 8021be6: 4628 mov r0, r5 + 8021be8: f8d3 3084 ldr.w r3, [r3, #132] ; 0x84 + 8021bec: 4798 blx r3 + 8021bee: e895 0007 ldmia.w r5, {r0, r1, r2} + 8021bf2: e884 0007 stmia.w r4, {r0, r1, r2} + 8021bf6: b005 add sp, #20 + 8021bf8: bd30 pop {r4, r5, pc} + +08021bfa <_ZNK8touchgfx3Box12getSolidRectEv>: + 8021bfa: 2300 movs r3, #0 + 8021bfc: 8083 strh r3, [r0, #4] + 8021bfe: 80c3 strh r3, [r0, #6] + 8021c00: 8003 strh r3, [r0, #0] + 8021c02: 8043 strh r3, [r0, #2] + 8021c04: f891 3026 ldrb.w r3, [r1, #38] ; 0x26 + 8021c08: 2bff cmp r3, #255 ; 0xff + 8021c0a: bf01 itttt eq + 8021c0c: 890b ldrheq r3, [r1, #8] + 8021c0e: 8083 strheq r3, [r0, #4] + 8021c10: 894b ldrheq r3, [r1, #10] + 8021c12: 80c3 strheq r3, [r0, #6] + 8021c14: 4770 bx lr + ... + +08021c18 <_ZNK8touchgfx3Box4drawERKNS_4RectE>: + 8021c18: b537 push {r0, r1, r2, r4, r5, lr} + 8021c1a: 4604 mov r4, r0 + 8021c1c: 466b mov r3, sp + 8021c1e: 6808 ldr r0, [r1, #0] + 8021c20: 6849 ldr r1, [r1, #4] + 8021c22: c303 stmia r3!, {r0, r1} + 8021c24: 6823 ldr r3, [r4, #0] + 8021c26: 4669 mov r1, sp + 8021c28: 4620 mov r0, r4 + 8021c2a: 6adb ldr r3, [r3, #44] ; 0x2c + 8021c2c: 4798 blx r3 + 8021c2e: 4b08 ldr r3, [pc, #32] ; (8021c50 <_ZNK8touchgfx3Box4drawERKNS_4RectE+0x38>) + 8021c30: 681b ldr r3, [r3, #0] + 8021c32: f893 2058 ldrb.w r2, [r3, #88] ; 0x58 + 8021c36: b10a cbz r2, 8021c3c <_ZNK8touchgfx3Box4drawERKNS_4RectE+0x24> + 8021c38: 6cd8 ldr r0, [r3, #76] ; 0x4c + 8021c3a: b900 cbnz r0, 8021c3e <_ZNK8touchgfx3Box4drawERKNS_4RectE+0x26> + 8021c3c: 6898 ldr r0, [r3, #8] + 8021c3e: 6803 ldr r3, [r0, #0] + 8021c40: 4669 mov r1, sp + 8021c42: 6aa2 ldr r2, [r4, #40] ; 0x28 + 8021c44: 6a1d ldr r5, [r3, #32] + 8021c46: f894 3026 ldrb.w r3, [r4, #38] ; 0x26 + 8021c4a: 47a8 blx r5 + 8021c4c: b003 add sp, #12 + 8021c4e: bd30 pop {r4, r5, pc} + 8021c50: 2001e734 .word 0x2001e734 + +08021c54 <_ZN8touchgfx3BoxD1Ev>: + 8021c54: 4770 bx lr + +08021c56 <_ZN8touchgfx3BoxD0Ev>: + 8021c56: b510 push {r4, lr} + 8021c58: 4604 mov r4, r0 + 8021c5a: 212c movs r1, #44 ; 0x2c + 8021c5c: f012 fb4b bl 80342f6 <_ZdlPvj> + 8021c60: 4620 mov r0, r4 + 8021c62: bd10 pop {r4, pc} + +08021c64 <_ZNK8touchgfx3Box17invalidateContentEv>: + 8021c64: f890 2026 ldrb.w r2, [r0, #38] ; 0x26 + 8021c68: b12a cbz r2, 8021c76 <_ZNK8touchgfx3Box17invalidateContentEv+0x12> + 8021c6a: f890 2025 ldrb.w r2, [r0, #37] ; 0x25 + 8021c6e: b112 cbz r2, 8021c76 <_ZNK8touchgfx3Box17invalidateContentEv+0x12> + 8021c70: 6803 ldr r3, [r0, #0] + 8021c72: 695b ldr r3, [r3, #20] + 8021c74: 4718 bx r3 + 8021c76: 4770 bx lr + +08021c78 <_ZNK8touchgfx24TextAreaWithWildcardBase4drawERKNS_4RectE>: + 8021c78: 4b30 ldr r3, [pc, #192] ; (8021d3c <_ZNK8touchgfx24TextAreaWithWildcardBase4drawERKNS_4RectE+0xc4>) + 8021c7a: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} + 8021c7e: 8d82 ldrh r2, [r0, #44] ; 0x2c + 8021c80: b08d sub sp, #52 ; 0x34 + 8021c82: 881b ldrh r3, [r3, #0] + 8021c84: 4604 mov r4, r0 + 8021c86: 460f mov r7, r1 + 8021c88: 4293 cmp r3, r2 + 8021c8a: d954 bls.n 8021d36 <_ZNK8touchgfx24TextAreaWithWildcardBase4drawERKNS_4RectE+0xbe> + 8021c8c: 4b2c ldr r3, [pc, #176] ; (8021d40 <_ZNK8touchgfx24TextAreaWithWildcardBase4drawERKNS_4RectE+0xc8>) + 8021c8e: 6819 ldr r1, [r3, #0] + 8021c90: eb01 0342 add.w r3, r1, r2, lsl #1 + 8021c94: f811 1012 ldrb.w r1, [r1, r2, lsl #1] + 8021c98: 4a2a ldr r2, [pc, #168] ; (8021d44 <_ZNK8touchgfx24TextAreaWithWildcardBase4drawERKNS_4RectE+0xcc>) + 8021c9a: 6812 ldr r2, [r2, #0] + 8021c9c: f852 1021 ldr.w r1, [r2, r1, lsl #2] + 8021ca0: 2900 cmp r1, #0 + 8021ca2: d048 beq.n 8021d36 <_ZNK8touchgfx24TextAreaWithWildcardBase4drawERKNS_4RectE+0xbe> + 8021ca4: 785a ldrb r2, [r3, #1] + 8021ca6: f894 3039 ldrb.w r3, [r4, #57] ; 0x39 + 8021caa: f3c2 0801 ubfx r8, r2, #0, #2 + 8021cae: f3c2 0281 ubfx r2, r2, #2, #2 + 8021cb2: f88d 302c strb.w r3, [sp, #44] ; 0x2c + 8021cb6: 4b24 ldr r3, [pc, #144] ; (8021d48 <_ZNK8touchgfx24TextAreaWithWildcardBase4drawERKNS_4RectE+0xd0>) + 8021cb8: f88d 2021 strb.w r2, [sp, #33] ; 0x21 + 8021cbc: 681a ldr r2, [r3, #0] + 8021cbe: f890 5036 ldrb.w r5, [r0, #54] ; 0x36 + 8021cc2: f9b0 c034 ldrsh.w ip, [r0, #52] ; 0x34 + 8021cc6: f890 e038 ldrb.w lr, [r0, #56] ; 0x38 + 8021cca: 6b26 ldr r6, [r4, #48] ; 0x30 + 8021ccc: f890 0037 ldrb.w r0, [r0, #55] ; 0x37 + 8021cd0: f892 3058 ldrb.w r3, [r2, #88] ; 0x58 + 8021cd4: 9107 str r1, [sp, #28] + 8021cd6: f88d 8020 strb.w r8, [sp, #32] + 8021cda: f88d e022 strb.w lr, [sp, #34] ; 0x22 + 8021cde: 9609 str r6, [sp, #36] ; 0x24 + 8021ce0: f8ad c028 strh.w ip, [sp, #40] ; 0x28 + 8021ce4: f88d 502a strb.w r5, [sp, #42] ; 0x2a + 8021ce8: f88d 002b strb.w r0, [sp, #43] ; 0x2b + 8021cec: b10b cbz r3, 8021cf2 <_ZNK8touchgfx24TextAreaWithWildcardBase4drawERKNS_4RectE+0x7a> + 8021cee: 6cd5 ldr r5, [r2, #76] ; 0x4c + 8021cf0: b905 cbnz r5, 8021cf4 <_ZNK8touchgfx24TextAreaWithWildcardBase4drawERKNS_4RectE+0x7c> + 8021cf2: 6895 ldr r5, [r2, #8] + 8021cf4: ae05 add r6, sp, #20 + 8021cf6: 4621 mov r1, r4 + 8021cf8: 4630 mov r0, r6 + 8021cfa: f002 fe89 bl 8024a10 <_ZNK8touchgfx8Drawable15getAbsoluteRectEv> + 8021cfe: 4b13 ldr r3, [pc, #76] ; (8021d4c <_ZNK8touchgfx24TextAreaWithWildcardBase4drawERKNS_4RectE+0xd4>) + 8021d00: 8da1 ldrh r1, [r4, #44] ; 0x2c + 8021d02: 6818 ldr r0, [r3, #0] + 8021d04: f7e3 f830 bl 8004d68 <_ZNK8touchgfx5Texts7getTextEt> + 8021d08: 6823 ldr r3, [r4, #0] + 8021d0a: 4680 mov r8, r0 + 8021d0c: 4620 mov r0, r4 + 8021d0e: 6fdb ldr r3, [r3, #124] ; 0x7c + 8021d10: 4798 blx r3 + 8021d12: 6823 ldr r3, [r4, #0] + 8021d14: 4681 mov r9, r0 + 8021d16: 4620 mov r0, r4 + 8021d18: f8d3 3080 ldr.w r3, [r3, #128] ; 0x80 + 8021d1c: 4798 blx r3 + 8021d1e: ab07 add r3, sp, #28 + 8021d20: f8cd 8004 str.w r8, [sp, #4] + 8021d24: 9300 str r3, [sp, #0] + 8021d26: 463b mov r3, r7 + 8021d28: e9cd 9002 strd r9, r0, [sp, #8] + 8021d2c: 4628 mov r0, r5 + 8021d2e: e896 0006 ldmia.w r6, {r1, r2} + 8021d32: f7e2 ffcb bl 8004ccc <_ZN8touchgfx3LCD10drawStringENS_4RectERKS1_RKNS0_13StringVisualsEPKtz> + 8021d36: b00d add sp, #52 ; 0x34 + 8021d38: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} + 8021d3c: 2001e788 .word 0x2001e788 + 8021d40: 2001e784 .word 0x2001e784 + 8021d44: 2001e78c .word 0x2001e78c + 8021d48: 2001e734 .word 0x2001e734 + 8021d4c: 2001e790 .word 0x2001e790 + +08021d50 <_ZN8touchgfx5ImageD1Ev>: + 8021d50: 4770 bx lr + +08021d52 <_ZN8touchgfx5Image9setBitmapERKNS_6BitmapE>: + 8021d52: b570 push {r4, r5, r6, lr} + 8021d54: 880b ldrh r3, [r1, #0] + 8021d56: 460d mov r5, r1 + 8021d58: 4604 mov r4, r0 + 8021d5a: 84c3 strh r3, [r0, #38] ; 0x26 + 8021d5c: 4608 mov r0, r1 + 8021d5e: f004 fe7b bl 8026a58 <_ZNK8touchgfx6Bitmap8getWidthEv> + 8021d62: 4606 mov r6, r0 + 8021d64: 4628 mov r0, r5 + 8021d66: f004 feab bl 8026ac0 <_ZNK8touchgfx6Bitmap9getHeightEv> + 8021d6a: 6823 ldr r3, [r4, #0] + 8021d6c: 4605 mov r5, r0 + 8021d6e: 4631 mov r1, r6 + 8021d70: 4620 mov r0, r4 + 8021d72: 6b9b ldr r3, [r3, #56] ; 0x38 + 8021d74: 4798 blx r3 + 8021d76: 6823 ldr r3, [r4, #0] + 8021d78: 4629 mov r1, r5 + 8021d7a: 4620 mov r0, r4 + 8021d7c: 6bdb ldr r3, [r3, #60] ; 0x3c + 8021d7e: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} + 8021d82: 4718 bx r3 + +08021d84 <_ZN8touchgfx5ImageD0Ev>: + 8021d84: b510 push {r4, lr} + 8021d86: 4604 mov r4, r0 + 8021d88: 212c movs r1, #44 ; 0x2c + 8021d8a: f012 fab4 bl 80342f6 <_ZdlPvj> + 8021d8e: 4620 mov r0, r4 + 8021d90: bd10 pop {r4, pc} + +08021d92 <_ZNK8touchgfx5Image12getSolidRectEv>: + 8021d92: b510 push {r4, lr} + 8021d94: f891 3028 ldrb.w r3, [r1, #40] ; 0x28 + 8021d98: 4604 mov r4, r0 + 8021d9a: 2bff cmp r3, #255 ; 0xff + 8021d9c: d006 beq.n 8021dac <_ZNK8touchgfx5Image12getSolidRectEv+0x1a> + 8021d9e: 2300 movs r3, #0 + 8021da0: 8003 strh r3, [r0, #0] + 8021da2: 8043 strh r3, [r0, #2] + 8021da4: 8083 strh r3, [r0, #4] + 8021da6: 80c3 strh r3, [r0, #6] + 8021da8: 4620 mov r0, r4 + 8021daa: bd10 pop {r4, pc} + 8021dac: 3126 adds r1, #38 ; 0x26 + 8021dae: f004 febb bl 8026b28 <_ZNK8touchgfx6Bitmap12getSolidRectEv> + 8021db2: e7f9 b.n 8021da8 <_ZNK8touchgfx5Image12getSolidRectEv+0x16> + +08021db4 <_ZNK8touchgfx5Image17invalidateContentEv>: + 8021db4: f890 2028 ldrb.w r2, [r0, #40] ; 0x28 + 8021db8: b12a cbz r2, 8021dc6 <_ZNK8touchgfx5Image17invalidateContentEv+0x12> + 8021dba: f890 2025 ldrb.w r2, [r0, #37] ; 0x25 + 8021dbe: b112 cbz r2, 8021dc6 <_ZNK8touchgfx5Image17invalidateContentEv+0x12> + 8021dc0: 6803 ldr r3, [r0, #0] + 8021dc2: 695b ldr r3, [r3, #20] + 8021dc4: 4718 bx r3 + 8021dc6: 4770 bx lr + +08021dc8 <_ZNK8touchgfx5Image4drawERKNS_4RectE>: + 8021dc8: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} + 8021dcc: 4604 mov r4, r0 + 8021dce: b088 sub sp, #32 + 8021dd0: 2500 movs r5, #0 + 8021dd2: 460f mov r7, r1 + 8021dd4: f854 3b26 ldr.w r3, [r4], #38 + 8021dd8: a904 add r1, sp, #16 + 8021dda: 4606 mov r6, r0 + 8021ddc: 6adb ldr r3, [r3, #44] ; 0x2c + 8021dde: e9cd 5504 strd r5, r5, [sp, #16] + 8021de2: 4798 blx r3 + 8021de4: 4620 mov r0, r4 + 8021de6: f004 fe37 bl 8026a58 <_ZNK8touchgfx6Bitmap8getWidthEv> + 8021dea: 4680 mov r8, r0 + 8021dec: 4620 mov r0, r4 + 8021dee: f004 fe67 bl 8026ac0 <_ZNK8touchgfx6Bitmap9getHeightEv> + 8021df2: 9506 str r5, [sp, #24] + 8021df4: ad06 add r5, sp, #24 + 8021df6: f8ad 001e strh.w r0, [sp, #30] + 8021dfa: 4639 mov r1, r7 + 8021dfc: f8ad 801c strh.w r8, [sp, #28] + 8021e00: 4628 mov r0, r5 + 8021e02: f7fe f873 bl 801feec <_ZN8touchgfx4RectaNERKS0_> + 8021e06: f9bd 301c ldrsh.w r3, [sp, #28] + 8021e0a: 2b00 cmp r3, #0 + 8021e0c: dd19 ble.n 8021e42 <_ZNK8touchgfx5Image4drawERKNS_4RectE+0x7a> + 8021e0e: f9bd 301e ldrsh.w r3, [sp, #30] + 8021e12: 2b00 cmp r3, #0 + 8021e14: dd15 ble.n 8021e42 <_ZNK8touchgfx5Image4drawERKNS_4RectE+0x7a> + 8021e16: 4b0c ldr r3, [pc, #48] ; (8021e48 <_ZNK8touchgfx5Image4drawERKNS_4RectE+0x80>) + 8021e18: 681b ldr r3, [r3, #0] + 8021e1a: f893 2058 ldrb.w r2, [r3, #88] ; 0x58 + 8021e1e: b10a cbz r2, 8021e24 <_ZNK8touchgfx5Image4drawERKNS_4RectE+0x5c> + 8021e20: 6cd8 ldr r0, [r3, #76] ; 0x4c + 8021e22: b900 cbnz r0, 8021e26 <_ZNK8touchgfx5Image4drawERKNS_4RectE+0x5e> + 8021e24: 6898 ldr r0, [r3, #8] + 8021e26: 2701 movs r7, #1 + 8021e28: 6801 ldr r1, [r0, #0] + 8021e2a: f9bd 3012 ldrsh.w r3, [sp, #18] + 8021e2e: 9702 str r7, [sp, #8] + 8021e30: f896 6028 ldrb.w r6, [r6, #40] ; 0x28 + 8021e34: f9bd 2010 ldrsh.w r2, [sp, #16] + 8021e38: e9cd 5600 strd r5, r6, [sp] + 8021e3c: 688d ldr r5, [r1, #8] + 8021e3e: 4621 mov r1, r4 + 8021e40: 47a8 blx r5 + 8021e42: b008 add sp, #32 + 8021e44: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + 8021e48: 2001e734 .word 0x2001e734 + +08021e4c <_ZN8touchgfx3LCD27supportDynamicBitmapDrawingENS_6Bitmap12BitmapFormatE>: + 8021e4c: b510 push {r4, lr} + 8021e4e: 6803 ldr r3, [r0, #0] + 8021e50: 460c mov r4, r1 + 8021e52: 6adb ldr r3, [r3, #44] ; 0x2c + 8021e54: 4798 blx r3 + 8021e56: 1b03 subs r3, r0, r4 + 8021e58: 4258 negs r0, r3 + 8021e5a: 4158 adcs r0, r3 + 8021e5c: bd10 pop {r4, pc} + ... + +08021e60 <_ZN8touchgfx3LCD15setDefaultColorENS_9colortypeE>: + 8021e60: 4b01 ldr r3, [pc, #4] ; (8021e68 <_ZN8touchgfx3LCD15setDefaultColorENS_9colortypeE+0x8>) + 8021e62: 6019 str r1, [r3, #0] + 8021e64: 4770 bx lr + 8021e66: bf00 nop + 8021e68: 2001e73c .word 0x2001e73c + +08021e6c <_ZN8touchgfx3LCD18drawTextureMapQuadERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht>: + 8021e6c: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8021e70: 4696 mov lr, r2 + 8021e72: b097 sub sp, #92 ; 0x5c + 8021e74: 4605 mov r5, r0 + 8021e76: 4614 mov r4, r2 + 8021e78: 460e mov r6, r1 + 8021e7a: 461f mov r7, r3 + 8021e7c: f10d 0c1c add.w ip, sp, #28 + 8021e80: f8bd 8088 ldrh.w r8, [sp, #136] ; 0x88 + 8021e84: f89d 908c ldrb.w r9, [sp, #140] ; 0x8c + 8021e88: f8bd a090 ldrh.w sl, [sp, #144] ; 0x90 + 8021e8c: e8be 000f ldmia.w lr!, {r0, r1, r2, r3} + 8021e90: e8ac 000f stmia.w ip!, {r0, r1, r2, r3} + 8021e94: f8de 3000 ldr.w r3, [lr] + 8021e98: f104 0e14 add.w lr, r4, #20 + 8021e9c: f8cc 3000 str.w r3, [ip] + 8021ea0: f10d 0c30 add.w ip, sp, #48 ; 0x30 + 8021ea4: e8be 000f ldmia.w lr!, {r0, r1, r2, r3} + 8021ea8: e8ac 000f stmia.w ip!, {r0, r1, r2, r3} + 8021eac: f8de 3000 ldr.w r3, [lr] + 8021eb0: f104 0e28 add.w lr, r4, #40 ; 0x28 + 8021eb4: f8cc 3000 str.w r3, [ip] + 8021eb8: f10d 0c44 add.w ip, sp, #68 ; 0x44 + 8021ebc: e8be 000f ldmia.w lr!, {r0, r1, r2, r3} + 8021ec0: e8ac 000f stmia.w ip!, {r0, r1, r2, r3} + 8021ec4: f8de 3000 ldr.w r3, [lr] + 8021ec8: 4631 mov r1, r6 + 8021eca: 9a21 ldr r2, [sp, #132] ; 0x84 + 8021ecc: 4628 mov r0, r5 + 8021ece: f8cc 3000 str.w r3, [ip] + 8021ed2: 682b ldr r3, [r5, #0] + 8021ed4: 9201 str r2, [sp, #4] + 8021ed6: 9a20 ldr r2, [sp, #128] ; 0x80 + 8021ed8: f8cd 8008 str.w r8, [sp, #8] + 8021edc: 9200 str r2, [sp, #0] + 8021ede: aa07 add r2, sp, #28 + 8021ee0: e9cd 9a03 strd r9, sl, [sp, #12] + 8021ee4: f8d3 b03c ldr.w fp, [r3, #60] ; 0x3c + 8021ee8: 463b mov r3, r7 + 8021eea: 47d8 blx fp + 8021eec: 46a6 mov lr, r4 + 8021eee: f10d 0c1c add.w ip, sp, #28 + 8021ef2: e8be 000f ldmia.w lr!, {r0, r1, r2, r3} + 8021ef6: e8ac 000f stmia.w ip!, {r0, r1, r2, r3} + 8021efa: f8de 3000 ldr.w r3, [lr] + 8021efe: f104 0e28 add.w lr, r4, #40 ; 0x28 + 8021f02: 343c adds r4, #60 ; 0x3c + 8021f04: f8cc 3000 str.w r3, [ip] + 8021f08: f10d 0c30 add.w ip, sp, #48 ; 0x30 + 8021f0c: e8be 000f ldmia.w lr!, {r0, r1, r2, r3} + 8021f10: e8ac 000f stmia.w ip!, {r0, r1, r2, r3} + 8021f14: f8de 3000 ldr.w r3, [lr] + 8021f18: f8cc 3000 str.w r3, [ip] + 8021f1c: f10d 0c44 add.w ip, sp, #68 ; 0x44 + 8021f20: cc0f ldmia r4!, {r0, r1, r2, r3} + 8021f22: e8ac 000f stmia.w ip!, {r0, r1, r2, r3} + 8021f26: 6823 ldr r3, [r4, #0] + 8021f28: 4631 mov r1, r6 + 8021f2a: 4628 mov r0, r5 + 8021f2c: f8cc 3000 str.w r3, [ip] + 8021f30: 682b ldr r3, [r5, #0] + 8021f32: e9cd 9a03 strd r9, sl, [sp, #12] + 8021f36: 9a21 ldr r2, [sp, #132] ; 0x84 + 8021f38: f8cd 8008 str.w r8, [sp, #8] + 8021f3c: 9201 str r2, [sp, #4] + 8021f3e: 9a20 ldr r2, [sp, #128] ; 0x80 + 8021f40: 9200 str r2, [sp, #0] + 8021f42: aa07 add r2, sp, #28 + 8021f44: 6bdc ldr r4, [r3, #60] ; 0x3c + 8021f46: 463b mov r3, r7 + 8021f48: 47a0 blx r4 + 8021f4a: b017 add sp, #92 ; 0x5c + 8021f4c: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + +08021f50 <_ZN8touchgfx3LCD22drawTextureMapScanLineERKNS_14DrawingSurfaceERKNS_9GradientsEPKNS_4EdgeES9_RKNS_14TextureSurfaceERKNS_4RectESF_tht>: + 8021f50: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8021f54: b08d sub sp, #52 ; 0x34 + 8021f56: 4688 mov r8, r1 + 8021f58: f8d3 c000 ldr.w ip, [r3] + 8021f5c: 9916 ldr r1, [sp, #88] ; 0x58 + 8021f5e: f8bd 4070 ldrh.w r4, [sp, #112] ; 0x70 + 8021f62: 680f ldr r7, [r1, #0] + 8021f64: ed92 4a09 vldr s8, [r2, #36] ; 0x24 + 8021f68: eba7 070c sub.w r7, r7, ip + 8021f6c: edd2 4a0b vldr s9, [r2, #44] ; 0x2c + 8021f70: edd3 6a07 vldr s13, [r3, #28] + 8021f74: 42bc cmp r4, r7 + 8021f76: 9918 ldr r1, [sp, #96] ; 0x60 + 8021f78: f8dd a064 ldr.w sl, [sp, #100] ; 0x64 + 8021f7c: bfa8 it ge + 8021f7e: 463c movge r4, r7 + 8021f80: f9b1 9000 ldrsh.w r9, [r1] + 8021f84: f9ba 1000 ldrsh.w r1, [sl] + 8021f88: ee07 4a90 vmov s15, r4 + 8021f8c: eb09 0e0c add.w lr, r9, ip + 8021f90: edd3 1a0a vldr s3, [r3, #40] ; 0x28 + 8021f94: eeb8 5ae7 vcvt.f32.s32 s10, s15 + 8021f98: edd2 7a0d vldr s15, [r2, #52] ; 0x34 + 8021f9c: ed93 2a0d vldr s4, [r3, #52] ; 0x34 + 8021fa0: 4571 cmp r1, lr + 8021fa2: ee25 4a04 vmul.f32 s8, s10, s8 + 8021fa6: ee65 4a24 vmul.f32 s9, s10, s9 + 8021faa: ee25 5a27 vmul.f32 s10, s10, s15 + 8021fae: eef7 7a00 vmov.f32 s15, #112 ; 0x3f800000 1.0 + 8021fb2: ee71 0aa4 vadd.f32 s1, s3, s9 + 8021fb6: ee32 1a05 vadd.f32 s2, s4, s10 + 8021fba: ee87 7aa6 vdiv.f32 s14, s15, s13 + 8021fbe: ee36 0a84 vadd.f32 s0, s13, s8 + 8021fc2: ee61 1a87 vmul.f32 s3, s3, s14 + 8021fc6: ee22 2a07 vmul.f32 s4, s4, s14 + 8021fca: f340 808c ble.w 80220e6 <_ZN8touchgfx3LCD22drawTextureMapScanLineERKNS_14DrawingSurfaceERKNS_9GradientsEPKNS_4EdgeES9_RKNS_14TextureSurfaceERKNS_4RectESF_tht+0x196> + 8021fce: eba1 060e sub.w r6, r1, lr + 8021fd2: fb96 f5f4 sdiv r5, r6, r4 + 8021fd6: ee07 5a10 vmov s14, r5 + 8021fda: 2d00 cmp r5, #0 + 8021fdc: fb04 6615 mls r6, r4, r5, r6 + 8021fe0: eeb8 7ac7 vcvt.f32.s32 s14, s14 + 8021fe4: eea7 0a04 vfma.f32 s0, s14, s8 + 8021fe8: eee7 0a24 vfma.f32 s1, s14, s9 + 8021fec: eea7 1a05 vfma.f32 s2, s14, s10 + 8021ff0: dd12 ble.n 8022018 <_ZN8touchgfx3LCD22drawTextureMapScanLineERKNS_14DrawingSurfaceERKNS_9GradientsEPKNS_4EdgeES9_RKNS_14TextureSurfaceERKNS_4RectESF_tht+0xc8> + 8021ff2: ee70 6a44 vsub.f32 s13, s0, s8 + 8021ff6: ee70 1ae4 vsub.f32 s3, s1, s9 + 8021ffa: ee31 2a45 vsub.f32 s4, s2, s10 + 8021ffe: eef5 6a40 vcmp.f32 s13, #0.0 + 8022002: eef1 fa10 vmrs APSR_nzcv, fpscr + 8022006: bf14 ite ne + 8022008: ee87 7aa6 vdivne.f32 s14, s15, s13 + 802200c: eeb0 7a67 vmoveq.f32 s14, s15 + 8022010: ee61 1a87 vmul.f32 s3, s3, s14 + 8022014: ee22 2a07 vmul.f32 s4, s4, s14 + 8022018: fb05 f204 mul.w r2, r5, r4 + 802201c: 1abf subs r7, r7, r2 + 802201e: 4494 add ip, r2 + 8022020: f8ba 2004 ldrh.w r2, [sl, #4] + 8022024: 4411 add r1, r2 + 8022026: eb09 020c add.w r2, r9, ip + 802202a: b209 sxth r1, r1 + 802202c: 443a add r2, r7 + 802202e: 428a cmp r2, r1 + 8022030: bfc4 itt gt + 8022032: eba1 0209 subgt.w r2, r1, r9 + 8022036: eba2 070c subgt.w r7, r2, ip + 802203a: 2f00 cmp r7, #0 + 802203c: dd50 ble.n 80220e0 <_ZN8touchgfx3LCD22drawTextureMapScanLineERKNS_14DrawingSurfaceERKNS_9GradientsEPKNS_4EdgeES9_RKNS_14TextureSurfaceERKNS_4RectESF_tht+0x190> + 802203e: fb97 f1f4 sdiv r1, r7, r4 + 8022042: fb04 7211 mls r2, r4, r1, r7 + 8022046: b90a cbnz r2, 802204c <_ZN8touchgfx3LCD22drawTextureMapScanLineERKNS_14DrawingSurfaceERKNS_9GradientsEPKNS_4EdgeES9_RKNS_14TextureSurfaceERKNS_4RectESF_tht+0xfc> + 8022048: 3901 subs r1, #1 + 802204a: 4622 mov r2, r4 + 802204c: eec7 3a80 vdiv.f32 s7, s15, s0 + 8022050: 6840 ldr r0, [r0, #4] + 8022052: f89d b06c ldrb.w fp, [sp, #108] ; 0x6c + 8022056: 44b6 add lr, r6 + 8022058: f8d0 a000 ldr.w sl, [r0] + 802205c: 2900 cmp r1, #0 + 802205e: bfcc ite gt + 8022060: 46a1 movgt r9, r4 + 8022062: 4691 movle r9, r2 + 8022064: 900b str r0, [sp, #44] ; 0x2c + 8022066: 9817 ldr r0, [sp, #92] ; 0x5c + 8022068: fb04 e505 mla r5, r4, r5, lr + 802206c: eef0 6a42 vmov.f32 s13, s4 + 8022070: f8cd b024 str.w fp, [sp, #36] ; 0x24 + 8022074: 9008 str r0, [sp, #32] + 8022076: eeb0 7a61 vmov.f32 s14, s3 + 802207a: 9818 ldr r0, [sp, #96] ; 0x60 + 802207c: 695b ldr r3, [r3, #20] + 802207e: eefe 6ac8 vcvt.s32.f32 s13, s13, #16 + 8022082: f9b0 b002 ldrsh.w fp, [r0, #2] + 8022086: eebe 7ac8 vcvt.s32.f32 s14, s14, #16 + 802208a: 980b ldr r0, [sp, #44] ; 0x2c + 802208c: 445b add r3, fp + 802208e: 9307 str r3, [sp, #28] + 8022090: ee16 3a90 vmov r3, s13 + 8022094: e9cd 8505 strd r8, r5, [sp, #20] + 8022098: ee60 2aa3 vmul.f32 s5, s1, s7 + 802209c: ee21 3a23 vmul.f32 s6, s2, s7 + 80220a0: ee72 7ae1 vsub.f32 s15, s5, s3 + 80220a4: eefe 7ac8 vcvt.s32.f32 s15, s15, #16 + 80220a8: ee17 7a90 vmov r7, s15 + 80220ac: ee73 7a42 vsub.f32 s15, s6, s4 + 80220b0: fb97 f7f4 sdiv r7, r7, r4 + 80220b4: eefe 7ac8 vcvt.s32.f32 s15, s15, #16 + 80220b8: ee17 ca90 vmov ip, s15 + 80220bc: fb9c fcf4 sdiv ip, ip, r4 + 80220c0: fb0c 3306 mla r3, ip, r6, r3 + 80220c4: 9302 str r3, [sp, #8] + 80220c6: ee17 3a10 vmov r3, s14 + 80220ca: e9cd 7c03 strd r7, ip, [sp, #12] + 80220ce: fb07 3706 mla r7, r7, r6, r3 + 80220d2: eba9 0306 sub.w r3, r9, r6 + 80220d6: e9cd 4700 strd r4, r7, [sp] + 80220da: f8da 4008 ldr.w r4, [sl, #8] + 80220de: 47a0 blx r4 + 80220e0: b00d add sp, #52 ; 0x34 + 80220e2: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 80220e6: 2500 movs r5, #0 + 80220e8: 462e mov r6, r5 + 80220ea: e799 b.n 8022020 <_ZN8touchgfx3LCD22drawTextureMapScanLineERKNS_14DrawingSurfaceERKNS_9GradientsEPKNS_4EdgeES9_RKNS_14TextureSurfaceERKNS_4RectESF_tht+0xd0> + +080220ec <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht>: + 80220ec: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 80220f0: b0db sub sp, #364 ; 0x16c + 80220f2: 461d mov r5, r3 + 80220f4: 4614 mov r4, r2 + 80220f6: f8bd 3198 ldrh.w r3, [sp, #408] ; 0x198 + 80220fa: 910f str r1, [sp, #60] ; 0x3c + 80220fc: 4629 mov r1, r5 + 80220fe: 930a str r3, [sp, #40] ; 0x28 + 8022100: f89d 319c ldrb.w r3, [sp, #412] ; 0x19c + 8022104: 9009 str r0, [sp, #36] ; 0x24 + 8022106: 930b str r3, [sp, #44] ; 0x2c + 8022108: f8bd 31a0 ldrh.w r3, [sp, #416] ; 0x1a0 + 802210c: f8dd b194 ldr.w fp, [sp, #404] ; 0x194 + 8022110: 9310 str r3, [sp, #64] ; 0x40 + 8022112: 6803 ldr r3, [r0, #0] + 8022114: 6c5f ldr r7, [r3, #68] ; 0x44 + 8022116: e9dd 230a ldrd r2, r3, [sp, #40] ; 0x28 + 802211a: 47b8 blx r7 + 802211c: 9b09 ldr r3, [sp, #36] ; 0x24 + 802211e: 6058 str r0, [r3, #4] + 8022120: 2800 cmp r0, #0 + 8022122: f000 83a1 beq.w 8022868 <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x77c> + 8022126: 682b ldr r3, [r5, #0] + 8022128: eef2 7a04 vmov.f32 s15, #36 ; 0x41200000 10.0 + 802212c: ed94 7a02 vldr s14, [r4, #8] + 8022130: 9314 str r3, [sp, #80] ; 0x50 + 8022132: 686b ldr r3, [r5, #4] + 8022134: eeb4 7ae7 vcmpe.f32 s14, s15 + 8022138: 9315 str r3, [sp, #84] ; 0x54 + 802213a: 4bc1 ldr r3, [pc, #772] ; (8022440 <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x354>) + 802213c: 7819 ldrb r1, [r3, #0] + 802213e: e9d5 2302 ldrd r2, r3, [r5, #8] + 8022142: 2900 cmp r1, #0 + 8022144: bf16 itet ne + 8022146: 4619 movne r1, r3 + 8022148: 4611 moveq r1, r2 + 802214a: 4613 movne r3, r2 + 802214c: eef1 fa10 vmrs APSR_nzcv, fpscr + 8022150: 9116 str r1, [sp, #88] ; 0x58 + 8022152: e9cd 3217 strd r3, r2, [sp, #92] ; 0x5c + 8022156: f240 8387 bls.w 8022868 <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x77c> + 802215a: ed94 7a07 vldr s14, [r4, #28] + 802215e: eeb4 7ae7 vcmpe.f32 s14, s15 + 8022162: eef1 fa10 vmrs APSR_nzcv, fpscr + 8022166: f240 837f bls.w 8022868 <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x77c> + 802216a: ed94 7a0c vldr s14, [r4, #48] ; 0x30 + 802216e: eeb4 7ae7 vcmpe.f32 s14, s15 + 8022172: eef1 fa10 vmrs APSR_nzcv, fpscr + 8022176: f240 8377 bls.w 8022868 <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x77c> + 802217a: 6822 ldr r2, [r4, #0] + 802217c: 4bb1 ldr r3, [pc, #708] ; (8022444 <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x358>) + 802217e: 429a cmp r2, r3 + 8022180: f2c0 8372 blt.w 8022868 <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x77c> + 8022184: 49b0 ldr r1, [pc, #704] ; (8022448 <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x35c>) + 8022186: 6963 ldr r3, [r4, #20] + 8022188: 428a cmp r2, r1 + 802218a: f300 836d bgt.w 8022868 <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x77c> + 802218e: f503 331c add.w r3, r3, #159744 ; 0x27000 + 8022192: 48ae ldr r0, [pc, #696] ; (802244c <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x360>) + 8022194: 33ff adds r3, #255 ; 0xff + 8022196: 4283 cmp r3, r0 + 8022198: f200 8366 bhi.w 8022868 <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x77c> + 802219c: 6aa3 ldr r3, [r4, #40] ; 0x28 + 802219e: 4dac ldr r5, [pc, #688] ; (8022450 <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x364>) + 80221a0: f503 331c add.w r3, r3, #159744 ; 0x27000 + 80221a4: 33ff adds r3, #255 ; 0xff + 80221a6: 42ab cmp r3, r5 + 80221a8: f200 835e bhi.w 8022868 <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x77c> + 80221ac: 6862 ldr r2, [r4, #4] + 80221ae: f502 331c add.w r3, r2, #159744 ; 0x27000 + 80221b2: 33ff adds r3, #255 ; 0xff + 80221b4: 4283 cmp r3, r0 + 80221b6: f200 8357 bhi.w 8022868 <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x77c> + 80221ba: 69a1 ldr r1, [r4, #24] + 80221bc: f501 331c add.w r3, r1, #159744 ; 0x27000 + 80221c0: 33ff adds r3, #255 ; 0xff + 80221c2: 4283 cmp r3, r0 + 80221c4: f200 8350 bhi.w 8022868 <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x77c> + 80221c8: 6ae3 ldr r3, [r4, #44] ; 0x2c + 80221ca: f503 301c add.w r0, r3, #159744 ; 0x27000 + 80221ce: 30ff adds r0, #255 ; 0xff + 80221d0: 42a8 cmp r0, r5 + 80221d2: f200 8349 bhi.w 8022868 <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x77c> + 80221d6: 428a cmp r2, r1 + 80221d8: f280 8110 bge.w 80223fc <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x310> + 80221dc: 429a cmp r2, r3 + 80221de: f300 8119 bgt.w 8022414 <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x328> + 80221e2: 4299 cmp r1, r3 + 80221e4: f280 811d bge.w 8022422 <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x336> + 80221e8: 2502 movs r5, #2 + 80221ea: 2701 movs r7, #1 + 80221ec: 46a9 mov r9, r5 + 80221ee: 46b8 mov r8, r7 + 80221f0: f04f 0a00 mov.w sl, #0 + 80221f4: 4621 mov r1, r4 + 80221f6: a849 add r0, sp, #292 ; 0x124 + 80221f8: f003 fde0 bl 8025dbc <_ZN8touchgfx9GradientsC1EPKNS_7Point3DE> + 80221fc: 4622 mov r2, r4 + 80221fe: 4653 mov r3, sl + 8022200: a949 add r1, sp, #292 ; 0x124 + 8022202: f8cd 9000 str.w r9, [sp] + 8022206: a819 add r0, sp, #100 ; 0x64 + 8022208: f003 ff08 bl 802601c <_ZN8touchgfx4EdgeC1ERKNS_9GradientsEPKNS_7Point3DEii> + 802220c: 4622 mov r2, r4 + 802220e: 4653 mov r3, sl + 8022210: a949 add r1, sp, #292 ; 0x124 + 8022212: f8cd 8000 str.w r8, [sp] + 8022216: a829 add r0, sp, #164 ; 0xa4 + 8022218: f003 ff00 bl 802601c <_ZN8touchgfx4EdgeC1ERKNS_9GradientsEPKNS_7Point3DEii> + 802221c: 4643 mov r3, r8 + 802221e: 4622 mov r2, r4 + 8022220: a949 add r1, sp, #292 ; 0x124 + 8022222: f8cd 9000 str.w r9, [sp] + 8022226: a839 add r0, sp, #228 ; 0xe4 + 8022228: f003 fef8 bl 802601c <_ZN8touchgfx4EdgeC1ERKNS_9GradientsEPKNS_7Point3DEii> + 802222c: 42af cmp r7, r5 + 802222e: af12 add r7, sp, #72 ; 0x48 + 8022230: bfb7 itett lt + 8022232: 2300 movlt r3, #0 + 8022234: 2301 movge r3, #1 + 8022236: ad29 addlt r5, sp, #164 ; 0xa4 + 8022238: ac19 addlt r4, sp, #100 ; 0x64 + 802223a: bfb1 iteee lt + 802223c: 930e strlt r3, [sp, #56] ; 0x38 + 802223e: ad19 addge r5, sp, #100 ; 0x64 + 8022240: 930e strge r3, [sp, #56] ; 0x38 + 8022242: ac29 addge r4, sp, #164 ; 0xa4 + 8022244: 9b0f ldr r3, [sp, #60] ; 0x3c + 8022246: e893 0003 ldmia.w r3, {r0, r1} + 802224a: e887 0003 stmia.w r7, {r0, r1} + 802224e: b928 cbnz r0, 802225c <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x170> + 8022250: 4b80 ldr r3, [pc, #512] ; (8022454 <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x368>) + 8022252: 6818 ldr r0, [r3, #0] + 8022254: 6803 ldr r3, [r0, #0] + 8022256: 6a9b ldr r3, [r3, #40] ; 0x28 + 8022258: 4798 blx r3 + 802225a: 6038 str r0, [r7, #0] + 802225c: 9b64 ldr r3, [sp, #400] ; 0x190 + 802225e: f8bb 0006 ldrh.w r0, [fp, #6] + 8022262: f9b3 3002 ldrsh.w r3, [r3, #2] + 8022266: 9a2f ldr r2, [sp, #188] ; 0xbc + 8022268: 930c str r3, [sp, #48] ; 0x30 + 802226a: 990c ldr r1, [sp, #48] ; 0x30 + 802226c: 6963 ldr r3, [r4, #20] + 802226e: 440b add r3, r1 + 8022270: f9bb 1002 ldrsh.w r1, [fp, #2] + 8022274: 4408 add r0, r1 + 8022276: b200 sxth r0, r0 + 8022278: 4283 cmp r3, r0 + 802227a: 900d str r0, [sp, #52] ; 0x34 + 802227c: f280 80dd bge.w 802243a <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x34e> + 8022280: 428b cmp r3, r1 + 8022282: da08 bge.n 8022296 <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x1aa> + 8022284: 2a00 cmp r2, #0 + 8022286: dd06 ble.n 8022296 <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x1aa> + 8022288: 1acb subs r3, r1, r3 + 802228a: 429a cmp r2, r3 + 802228c: f2c0 80e4 blt.w 8022458 <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x36c> + 8022290: 2b00 cmp r3, #0 + 8022292: f300 80e2 bgt.w 802245a <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x36e> + 8022296: 6967 ldr r7, [r4, #20] + 8022298: f10d 0850 add.w r8, sp, #80 ; 0x50 + 802229c: 9b0c ldr r3, [sp, #48] ; 0x30 + 802229e: 443b add r3, r7 + 80222a0: 461f mov r7, r3 + 80222a2: 9b0d ldr r3, [sp, #52] ; 0x34 + 80222a4: 1bdf subs r7, r3, r7 + 80222a6: 4297 cmp r7, r2 + 80222a8: bfa8 it ge + 80222aa: 4617 movge r7, r2 + 80222ac: 2f00 cmp r7, #0 + 80222ae: f340 8166 ble.w 802257e <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x492> + 80222b2: 9b64 ldr r3, [sp, #400] ; 0x190 + 80222b4: 6829 ldr r1, [r5, #0] + 80222b6: f9b3 2000 ldrsh.w r2, [r3] + 80222ba: f9bb 3000 ldrsh.w r3, [fp] + 80222be: 4411 add r1, r2 + 80222c0: 6820 ldr r0, [r4, #0] + 80222c2: 4299 cmp r1, r3 + 80222c4: dd1a ble.n 80222fc <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x210> + 80222c6: f8bb 1004 ldrh.w r1, [fp, #4] + 80222ca: 4402 add r2, r0 + 80222cc: 440b add r3, r1 + 80222ce: b21b sxth r3, r3 + 80222d0: 429a cmp r2, r3 + 80222d2: dc13 bgt.n 80222fc <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x210> + 80222d4: 9a10 ldr r2, [sp, #64] ; 0x40 + 80222d6: a912 add r1, sp, #72 ; 0x48 + 80222d8: 9b09 ldr r3, [sp, #36] ; 0x24 + 80222da: 9809 ldr r0, [sp, #36] ; 0x24 + 80222dc: 681b ldr r3, [r3, #0] + 80222de: 9206 str r2, [sp, #24] + 80222e0: 9a0b ldr r2, [sp, #44] ; 0x2c + 80222e2: 9500 str r5, [sp, #0] + 80222e4: 9205 str r2, [sp, #20] + 80222e6: 9a0a ldr r2, [sp, #40] ; 0x28 + 80222e8: e9cd b203 strd fp, r2, [sp, #12] + 80222ec: 9a64 ldr r2, [sp, #400] ; 0x190 + 80222ee: e9cd 8201 strd r8, r2, [sp, #4] + 80222f2: aa49 add r2, sp, #292 ; 0x124 + 80222f4: f8d3 9048 ldr.w r9, [r3, #72] ; 0x48 + 80222f8: 4623 mov r3, r4 + 80222fa: 47c8 blx r9 + 80222fc: ed94 7a0a vldr s14, [r4, #40] ; 0x28 + 8022300: edd4 7a0b vldr s15, [r4, #44] ; 0x2c + 8022304: edd4 6a0e vldr s13, [r4, #56] ; 0x38 + 8022308: ee37 7a27 vadd.f32 s14, s14, s15 + 802230c: edd4 7a0d vldr s15, [r4, #52] ; 0x34 + 8022310: 68a1 ldr r1, [r4, #8] + 8022312: ee77 7aa6 vadd.f32 s15, s15, s13 + 8022316: ed94 6a08 vldr s12, [r4, #32] + 802231a: edd4 6a07 vldr s13, [r4, #28] + 802231e: ed84 7a0a vstr s14, [r4, #40] ; 0x28 + 8022322: ee76 6a86 vadd.f32 s13, s13, s12 + 8022326: edc4 7a0d vstr s15, [r4, #52] ; 0x34 + 802232a: e9d4 2300 ldrd r2, r3, [r4] + 802232e: edc4 6a07 vstr s13, [r4, #28] + 8022332: 441a add r2, r3 + 8022334: 6963 ldr r3, [r4, #20] + 8022336: 3301 adds r3, #1 + 8022338: 6022 str r2, [r4, #0] + 802233a: 6163 str r3, [r4, #20] + 802233c: 69a3 ldr r3, [r4, #24] + 802233e: 3b01 subs r3, #1 + 8022340: 61a3 str r3, [r4, #24] + 8022342: 6923 ldr r3, [r4, #16] + 8022344: 440b add r3, r1 + 8022346: 68e1 ldr r1, [r4, #12] + 8022348: 428b cmp r3, r1 + 802234a: 6123 str r3, [r4, #16] + 802234c: db15 blt.n 802237a <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x28e> + 802234e: ed94 6a09 vldr s12, [r4, #36] ; 0x24 + 8022352: 3201 adds r2, #1 + 8022354: 1a5b subs r3, r3, r1 + 8022356: ee76 6a26 vadd.f32 s13, s12, s13 + 802235a: 6022 str r2, [r4, #0] + 802235c: 6123 str r3, [r4, #16] + 802235e: edc4 6a07 vstr s13, [r4, #28] + 8022362: edd4 6a0c vldr s13, [r4, #48] ; 0x30 + 8022366: ee36 7a87 vadd.f32 s14, s13, s14 + 802236a: ed84 7a0a vstr s14, [r4, #40] ; 0x28 + 802236e: ed94 7a0f vldr s14, [r4, #60] ; 0x3c + 8022372: ee77 7a27 vadd.f32 s15, s14, s15 + 8022376: edc4 7a0d vstr s15, [r4, #52] ; 0x34 + 802237a: ed95 7a0a vldr s14, [r5, #40] ; 0x28 + 802237e: edd5 7a0b vldr s15, [r5, #44] ; 0x2c + 8022382: edd5 6a0e vldr s13, [r5, #56] ; 0x38 + 8022386: ee37 7a27 vadd.f32 s14, s14, s15 + 802238a: edd5 7a0d vldr s15, [r5, #52] ; 0x34 + 802238e: 68a9 ldr r1, [r5, #8] + 8022390: ee77 7aa6 vadd.f32 s15, s15, s13 + 8022394: ed95 6a08 vldr s12, [r5, #32] + 8022398: edd5 6a07 vldr s13, [r5, #28] + 802239c: ed85 7a0a vstr s14, [r5, #40] ; 0x28 + 80223a0: ee76 6a86 vadd.f32 s13, s13, s12 + 80223a4: edc5 7a0d vstr s15, [r5, #52] ; 0x34 + 80223a8: e9d5 2300 ldrd r2, r3, [r5] + 80223ac: edc5 6a07 vstr s13, [r5, #28] + 80223b0: 441a add r2, r3 + 80223b2: 696b ldr r3, [r5, #20] + 80223b4: 3301 adds r3, #1 + 80223b6: 602a str r2, [r5, #0] + 80223b8: 616b str r3, [r5, #20] + 80223ba: 69ab ldr r3, [r5, #24] + 80223bc: 3b01 subs r3, #1 + 80223be: 61ab str r3, [r5, #24] + 80223c0: 692b ldr r3, [r5, #16] + 80223c2: 440b add r3, r1 + 80223c4: 68e9 ldr r1, [r5, #12] + 80223c6: 428b cmp r3, r1 + 80223c8: 612b str r3, [r5, #16] + 80223ca: db15 blt.n 80223f8 <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x30c> + 80223cc: ed95 6a09 vldr s12, [r5, #36] ; 0x24 + 80223d0: 3201 adds r2, #1 + 80223d2: 1a5b subs r3, r3, r1 + 80223d4: ee76 6a26 vadd.f32 s13, s12, s13 + 80223d8: 602a str r2, [r5, #0] + 80223da: 612b str r3, [r5, #16] + 80223dc: edc5 6a07 vstr s13, [r5, #28] + 80223e0: edd5 6a0c vldr s13, [r5, #48] ; 0x30 + 80223e4: ee36 7a87 vadd.f32 s14, s13, s14 + 80223e8: ed85 7a0a vstr s14, [r5, #40] ; 0x28 + 80223ec: ed95 7a0f vldr s14, [r5, #60] ; 0x3c + 80223f0: ee77 7a27 vadd.f32 s15, s14, s15 + 80223f4: edc5 7a0d vstr s15, [r5, #52] ; 0x34 + 80223f8: 3f01 subs r7, #1 + 80223fa: e757 b.n 80222ac <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x1c0> + 80223fc: 4299 cmp r1, r3 + 80223fe: dc13 bgt.n 8022428 <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x33c> + 8022400: 429a cmp r2, r3 + 8022402: da14 bge.n 802242e <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x342> + 8022404: 2502 movs r5, #2 + 8022406: 2703 movs r7, #3 + 8022408: f04f 0800 mov.w r8, #0 + 802240c: 46a9 mov r9, r5 + 802240e: f04f 0a01 mov.w sl, #1 + 8022412: e6ef b.n 80221f4 <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x108> + 8022414: 2501 movs r5, #1 + 8022416: 2700 movs r7, #0 + 8022418: 46a9 mov r9, r5 + 802241a: 46b8 mov r8, r7 + 802241c: f04f 0a02 mov.w sl, #2 + 8022420: e6e8 b.n 80221f4 <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x108> + 8022422: 2501 movs r5, #1 + 8022424: 2702 movs r7, #2 + 8022426: e6e1 b.n 80221ec <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x100> + 8022428: 2500 movs r5, #0 + 802242a: 2701 movs r7, #1 + 802242c: e7f4 b.n 8022418 <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x32c> + 802242e: 2702 movs r7, #2 + 8022430: 2503 movs r5, #3 + 8022432: f04f 0900 mov.w r9, #0 + 8022436: 46b8 mov r8, r7 + 8022438: e7e9 b.n 802240e <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x322> + 802243a: 4613 mov r3, r2 + 802243c: e728 b.n 8022290 <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x1a4> + 802243e: bf00 nop + 8022440: 2001e72c .word 0x2001e72c + 8022444: fffd8f01 .word 0xfffd8f01 + 8022448: 00027100 .word 0x00027100 + 802244c: 0004e1ff .word 0x0004e1ff + 8022450: 0004e1fe .word 0x0004e1fe + 8022454: 2001e734 .word 0x2001e734 + 8022458: 4613 mov r3, r2 + 802245a: 992b ldr r1, [sp, #172] ; 0xac + 802245c: 469e mov lr, r3 + 802245e: 9f2e ldr r7, [sp, #184] ; 0xb8 + 8022460: 469c mov ip, r3 + 8022462: 9111 str r1, [sp, #68] ; 0x44 + 8022464: f04f 0900 mov.w r9, #0 + 8022468: eddd 4a34 vldr s9, [sp, #208] ; 0xd0 + 802246c: ed9d 7a33 vldr s14, [sp, #204] ; 0xcc + 8022470: ed9d 4a37 vldr s8, [sp, #220] ; 0xdc + 8022474: eddd 7a36 vldr s15, [sp, #216] ; 0xd8 + 8022478: eddd 3a31 vldr s7, [sp, #196] ; 0xc4 + 802247c: eddd 6a30 vldr s13, [sp, #192] ; 0xc0 + 8022480: ed9d 5a32 vldr s10, [sp, #200] ; 0xc8 + 8022484: eddd 5a35 vldr s11, [sp, #212] ; 0xd4 + 8022488: ed9d 6a38 vldr s12, [sp, #224] ; 0xe0 + 802248c: e9dd 0a29 ldrd r0, sl, [sp, #164] ; 0xa4 + 8022490: e9dd 812c ldrd r8, r1, [sp, #176] ; 0xb0 + 8022494: f1bc 0f00 cmp.w ip, #0 + 8022498: d147 bne.n 802252a <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x43e> + 802249a: eb03 0c07 add.w ip, r3, r7 + 802249e: 1ad7 subs r7, r2, r3 + 80224a0: f1b9 0f00 cmp.w r9, #0 + 80224a4: d009 beq.n 80224ba <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x3ce> + 80224a6: 9029 str r0, [sp, #164] ; 0xa4 + 80224a8: ed8d 7a33 vstr s14, [sp, #204] ; 0xcc + 80224ac: edcd 7a36 vstr s15, [sp, #216] ; 0xd8 + 80224b0: edcd 6a30 vstr s13, [sp, #192] ; 0xc0 + 80224b4: 912d str r1, [sp, #180] ; 0xb4 + 80224b6: e9cd c72e strd ip, r7, [sp, #184] ; 0xb8 + 80224ba: 991b ldr r1, [sp, #108] ; 0x6c + 80224bc: f04f 0800 mov.w r8, #0 + 80224c0: eddd 4a24 vldr s9, [sp, #144] ; 0x90 + 80224c4: 9111 str r1, [sp, #68] ; 0x44 + 80224c6: eddd 6a23 vldr s13, [sp, #140] ; 0x8c + 80224ca: ed9d 4a27 vldr s8, [sp, #156] ; 0x9c + 80224ce: ed9d 7a26 vldr s14, [sp, #152] ; 0x98 + 80224d2: eddd 3a21 vldr s7, [sp, #132] ; 0x84 + 80224d6: eddd 7a20 vldr s15, [sp, #128] ; 0x80 + 80224da: ed9d 5a22 vldr s10, [sp, #136] ; 0x88 + 80224de: eddd 5a25 vldr s11, [sp, #148] ; 0x94 + 80224e2: ed9d 6a28 vldr s12, [sp, #160] ; 0xa0 + 80224e6: e9dd 0a19 ldrd r0, sl, [sp, #100] ; 0x64 + 80224ea: e9dd c71e ldrd ip, r7, [sp, #120] ; 0x78 + 80224ee: e9dd 911c ldrd r9, r1, [sp, #112] ; 0x70 + 80224f2: f1be 0f00 cmp.w lr, #0 + 80224f6: d031 beq.n 802255c <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x470> + 80224f8: 9e11 ldr r6, [sp, #68] ; 0x44 + 80224fa: 4450 add r0, sl + 80224fc: ee76 6aa4 vadd.f32 s13, s13, s9 + 8022500: 4431 add r1, r6 + 8022502: ee37 7a04 vadd.f32 s14, s14, s8 + 8022506: ee77 7aa3 vadd.f32 s15, s15, s7 + 802250a: 4549 cmp r1, r9 + 802250c: db08 blt.n 8022520 <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x434> + 802250e: ee77 7a85 vadd.f32 s15, s15, s10 + 8022512: 3001 adds r0, #1 + 8022514: ee76 6aa5 vadd.f32 s13, s13, s11 + 8022518: eba1 0109 sub.w r1, r1, r9 + 802251c: ee37 7a06 vadd.f32 s14, s14, s12 + 8022520: f10e 3eff add.w lr, lr, #4294967295 + 8022524: f04f 0801 mov.w r8, #1 + 8022528: e7e3 b.n 80224f2 <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x406> + 802252a: 9e11 ldr r6, [sp, #68] ; 0x44 + 802252c: 4450 add r0, sl + 802252e: ee37 7a24 vadd.f32 s14, s14, s9 + 8022532: 4431 add r1, r6 + 8022534: ee77 7a84 vadd.f32 s15, s15, s8 + 8022538: ee76 6aa3 vadd.f32 s13, s13, s7 + 802253c: 4541 cmp r1, r8 + 802253e: db08 blt.n 8022552 <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x466> + 8022540: ee76 6a85 vadd.f32 s13, s13, s10 + 8022544: 3001 adds r0, #1 + 8022546: ee37 7a25 vadd.f32 s14, s14, s11 + 802254a: eba1 0108 sub.w r1, r1, r8 + 802254e: ee77 7a86 vadd.f32 s15, s15, s12 + 8022552: f10c 3cff add.w ip, ip, #4294967295 + 8022556: f04f 0901 mov.w r9, #1 + 802255a: e79b b.n 8022494 <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x3a8> + 802255c: 449c add ip, r3 + 802255e: 1aff subs r7, r7, r3 + 8022560: f1b8 0f00 cmp.w r8, #0 + 8022564: d009 beq.n 802257a <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x48e> + 8022566: 9019 str r0, [sp, #100] ; 0x64 + 8022568: edcd 6a23 vstr s13, [sp, #140] ; 0x8c + 802256c: ed8d 7a26 vstr s14, [sp, #152] ; 0x98 + 8022570: edcd 7a20 vstr s15, [sp, #128] ; 0x80 + 8022574: 911d str r1, [sp, #116] ; 0x74 + 8022576: e9cd c71e strd ip, r7, [sp, #120] ; 0x78 + 802257a: 1ad2 subs r2, r2, r3 + 802257c: e68b b.n 8022296 <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x1aa> + 802257e: 9b0e ldr r3, [sp, #56] ; 0x38 + 8022580: 9a3f ldr r2, [sp, #252] ; 0xfc + 8022582: 2b00 cmp r3, #0 + 8022584: f000 80d1 beq.w 802272a <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x63e> + 8022588: ad19 add r5, sp, #100 ; 0x64 + 802258a: ac39 add r4, sp, #228 ; 0xe4 + 802258c: 9b64 ldr r3, [sp, #400] ; 0x190 + 802258e: f8bb 0006 ldrh.w r0, [fp, #6] + 8022592: f9b3 3002 ldrsh.w r3, [r3, #2] + 8022596: 930c str r3, [sp, #48] ; 0x30 + 8022598: 990c ldr r1, [sp, #48] ; 0x30 + 802259a: 6963 ldr r3, [r4, #20] + 802259c: 440b add r3, r1 + 802259e: f9bb 1002 ldrsh.w r1, [fp, #2] + 80225a2: 4408 add r0, r1 + 80225a4: b200 sxth r0, r0 + 80225a6: 4283 cmp r3, r0 + 80225a8: 900d str r0, [sp, #52] ; 0x34 + 80225aa: f280 80c1 bge.w 8022730 <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x644> + 80225ae: 428b cmp r3, r1 + 80225b0: da08 bge.n 80225c4 <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x4d8> + 80225b2: 2a00 cmp r2, #0 + 80225b4: dd06 ble.n 80225c4 <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x4d8> + 80225b6: 1acb subs r3, r1, r3 + 80225b8: 429a cmp r2, r3 + 80225ba: f2c0 80bb blt.w 8022734 <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x648> + 80225be: 2b00 cmp r3, #0 + 80225c0: f300 80b9 bgt.w 8022736 <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x64a> + 80225c4: 6967 ldr r7, [r4, #20] + 80225c6: f10d 0850 add.w r8, sp, #80 ; 0x50 + 80225ca: 9b0c ldr r3, [sp, #48] ; 0x30 + 80225cc: 443b add r3, r7 + 80225ce: 461f mov r7, r3 + 80225d0: 9b0d ldr r3, [sp, #52] ; 0x34 + 80225d2: 1bdf subs r7, r3, r7 + 80225d4: 4297 cmp r7, r2 + 80225d6: bfa8 it ge + 80225d8: 4617 movge r7, r2 + 80225da: 2f00 cmp r7, #0 + 80225dc: f340 813c ble.w 8022858 <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x76c> + 80225e0: 9b64 ldr r3, [sp, #400] ; 0x190 + 80225e2: 6829 ldr r1, [r5, #0] + 80225e4: f9b3 2000 ldrsh.w r2, [r3] + 80225e8: f9bb 3000 ldrsh.w r3, [fp] + 80225ec: 4411 add r1, r2 + 80225ee: 6820 ldr r0, [r4, #0] + 80225f0: 4299 cmp r1, r3 + 80225f2: dd1a ble.n 802262a <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x53e> + 80225f4: f8bb 1004 ldrh.w r1, [fp, #4] + 80225f8: 4402 add r2, r0 + 80225fa: 440b add r3, r1 + 80225fc: b21b sxth r3, r3 + 80225fe: 429a cmp r2, r3 + 8022600: dc13 bgt.n 802262a <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x53e> + 8022602: 9a10 ldr r2, [sp, #64] ; 0x40 + 8022604: a912 add r1, sp, #72 ; 0x48 + 8022606: 9b09 ldr r3, [sp, #36] ; 0x24 + 8022608: 9809 ldr r0, [sp, #36] ; 0x24 + 802260a: 681b ldr r3, [r3, #0] + 802260c: 9206 str r2, [sp, #24] + 802260e: 9a0b ldr r2, [sp, #44] ; 0x2c + 8022610: 9500 str r5, [sp, #0] + 8022612: 9205 str r2, [sp, #20] + 8022614: 9a0a ldr r2, [sp, #40] ; 0x28 + 8022616: e9cd b203 strd fp, r2, [sp, #12] + 802261a: 9a64 ldr r2, [sp, #400] ; 0x190 + 802261c: e9cd 8201 strd r8, r2, [sp, #4] + 8022620: aa49 add r2, sp, #292 ; 0x124 + 8022622: f8d3 9048 ldr.w r9, [r3, #72] ; 0x48 + 8022626: 4623 mov r3, r4 + 8022628: 47c8 blx r9 + 802262a: ed94 7a0a vldr s14, [r4, #40] ; 0x28 + 802262e: edd4 7a0b vldr s15, [r4, #44] ; 0x2c + 8022632: edd4 6a0e vldr s13, [r4, #56] ; 0x38 + 8022636: ee37 7a27 vadd.f32 s14, s14, s15 + 802263a: edd4 7a0d vldr s15, [r4, #52] ; 0x34 + 802263e: 68a1 ldr r1, [r4, #8] + 8022640: ee77 7aa6 vadd.f32 s15, s15, s13 + 8022644: ed94 6a08 vldr s12, [r4, #32] + 8022648: edd4 6a07 vldr s13, [r4, #28] + 802264c: ed84 7a0a vstr s14, [r4, #40] ; 0x28 + 8022650: ee76 6a86 vadd.f32 s13, s13, s12 + 8022654: edc4 7a0d vstr s15, [r4, #52] ; 0x34 + 8022658: e9d4 2300 ldrd r2, r3, [r4] + 802265c: edc4 6a07 vstr s13, [r4, #28] + 8022660: 441a add r2, r3 + 8022662: 6963 ldr r3, [r4, #20] + 8022664: 3301 adds r3, #1 + 8022666: 6022 str r2, [r4, #0] + 8022668: 6163 str r3, [r4, #20] + 802266a: 69a3 ldr r3, [r4, #24] + 802266c: 3b01 subs r3, #1 + 802266e: 61a3 str r3, [r4, #24] + 8022670: 6923 ldr r3, [r4, #16] + 8022672: 440b add r3, r1 + 8022674: 68e1 ldr r1, [r4, #12] + 8022676: 428b cmp r3, r1 + 8022678: 6123 str r3, [r4, #16] + 802267a: db15 blt.n 80226a8 <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x5bc> + 802267c: ed94 6a09 vldr s12, [r4, #36] ; 0x24 + 8022680: 3201 adds r2, #1 + 8022682: 1a5b subs r3, r3, r1 + 8022684: ee76 6a26 vadd.f32 s13, s12, s13 + 8022688: 6022 str r2, [r4, #0] + 802268a: 6123 str r3, [r4, #16] + 802268c: edc4 6a07 vstr s13, [r4, #28] + 8022690: edd4 6a0c vldr s13, [r4, #48] ; 0x30 + 8022694: ee36 7a87 vadd.f32 s14, s13, s14 + 8022698: ed84 7a0a vstr s14, [r4, #40] ; 0x28 + 802269c: ed94 7a0f vldr s14, [r4, #60] ; 0x3c + 80226a0: ee77 7a27 vadd.f32 s15, s14, s15 + 80226a4: edc4 7a0d vstr s15, [r4, #52] ; 0x34 + 80226a8: ed95 7a0a vldr s14, [r5, #40] ; 0x28 + 80226ac: edd5 7a0b vldr s15, [r5, #44] ; 0x2c + 80226b0: edd5 6a0e vldr s13, [r5, #56] ; 0x38 + 80226b4: ee37 7a27 vadd.f32 s14, s14, s15 + 80226b8: edd5 7a0d vldr s15, [r5, #52] ; 0x34 + 80226bc: 68a9 ldr r1, [r5, #8] + 80226be: ee77 7aa6 vadd.f32 s15, s15, s13 + 80226c2: ed95 6a08 vldr s12, [r5, #32] + 80226c6: edd5 6a07 vldr s13, [r5, #28] + 80226ca: ed85 7a0a vstr s14, [r5, #40] ; 0x28 + 80226ce: ee76 6a86 vadd.f32 s13, s13, s12 + 80226d2: edc5 7a0d vstr s15, [r5, #52] ; 0x34 + 80226d6: e9d5 2300 ldrd r2, r3, [r5] + 80226da: edc5 6a07 vstr s13, [r5, #28] + 80226de: 441a add r2, r3 + 80226e0: 696b ldr r3, [r5, #20] + 80226e2: 3301 adds r3, #1 + 80226e4: 602a str r2, [r5, #0] + 80226e6: 616b str r3, [r5, #20] + 80226e8: 69ab ldr r3, [r5, #24] + 80226ea: 3b01 subs r3, #1 + 80226ec: 61ab str r3, [r5, #24] + 80226ee: 692b ldr r3, [r5, #16] + 80226f0: 440b add r3, r1 + 80226f2: 68e9 ldr r1, [r5, #12] + 80226f4: 428b cmp r3, r1 + 80226f6: 612b str r3, [r5, #16] + 80226f8: db15 blt.n 8022726 <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x63a> + 80226fa: ed95 6a09 vldr s12, [r5, #36] ; 0x24 + 80226fe: 3201 adds r2, #1 + 8022700: 1a5b subs r3, r3, r1 + 8022702: ee76 6a26 vadd.f32 s13, s12, s13 + 8022706: 602a str r2, [r5, #0] + 8022708: 612b str r3, [r5, #16] + 802270a: edc5 6a07 vstr s13, [r5, #28] + 802270e: edd5 6a0c vldr s13, [r5, #48] ; 0x30 + 8022712: ee36 7a87 vadd.f32 s14, s13, s14 + 8022716: ed85 7a0a vstr s14, [r5, #40] ; 0x28 + 802271a: ed95 7a0f vldr s14, [r5, #60] ; 0x3c + 802271e: ee77 7a27 vadd.f32 s15, s14, s15 + 8022722: edc5 7a0d vstr s15, [r5, #52] ; 0x34 + 8022726: 3f01 subs r7, #1 + 8022728: e757 b.n 80225da <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x4ee> + 802272a: ad39 add r5, sp, #228 ; 0xe4 + 802272c: ac19 add r4, sp, #100 ; 0x64 + 802272e: e72d b.n 802258c <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x4a0> + 8022730: 4613 mov r3, r2 + 8022732: e744 b.n 80225be <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x4d2> + 8022734: 4613 mov r3, r2 + 8022736: 9e3b ldr r6, [sp, #236] ; 0xec + 8022738: 469e mov lr, r3 + 802273a: f8dd c0f8 ldr.w ip, [sp, #248] ; 0xf8 + 802273e: 461f mov r7, r3 + 8022740: ed9d 7a43 vldr s14, [sp, #268] ; 0x10c + 8022744: f04f 0900 mov.w r9, #0 + 8022748: eddd 4a44 vldr s9, [sp, #272] ; 0x110 + 802274c: eddd 7a46 vldr s15, [sp, #280] ; 0x118 + 8022750: ed9d 4a47 vldr s8, [sp, #284] ; 0x11c + 8022754: eddd 6a40 vldr s13, [sp, #256] ; 0x100 + 8022758: eddd 3a41 vldr s7, [sp, #260] ; 0x104 + 802275c: 993d ldr r1, [sp, #244] ; 0xf4 + 802275e: f8dd 80f0 ldr.w r8, [sp, #240] ; 0xf0 + 8022762: ed9d 5a42 vldr s10, [sp, #264] ; 0x108 + 8022766: eddd 5a45 vldr s11, [sp, #276] ; 0x114 + 802276a: ed9d 6a48 vldr s12, [sp, #288] ; 0x120 + 802276e: 960e str r6, [sp, #56] ; 0x38 + 8022770: e9dd 0a39 ldrd r0, sl, [sp, #228] ; 0xe4 + 8022774: 2f00 cmp r7, #0 + 8022776: d146 bne.n 8022806 <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x71a> + 8022778: 449c add ip, r3 + 802277a: 1ad7 subs r7, r2, r3 + 802277c: f1b9 0f00 cmp.w r9, #0 + 8022780: d009 beq.n 8022796 <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x6aa> + 8022782: 9039 str r0, [sp, #228] ; 0xe4 + 8022784: 913d str r1, [sp, #244] ; 0xf4 + 8022786: edcd 6a40 vstr s13, [sp, #256] ; 0x100 + 802278a: ed8d 7a43 vstr s14, [sp, #268] ; 0x10c + 802278e: edcd 7a46 vstr s15, [sp, #280] ; 0x118 + 8022792: e9cd c73e strd ip, r7, [sp, #248] ; 0xf8 + 8022796: 991b ldr r1, [sp, #108] ; 0x6c + 8022798: f04f 0800 mov.w r8, #0 + 802279c: eddd 4a24 vldr s9, [sp, #144] ; 0x90 + 80227a0: 910e str r1, [sp, #56] ; 0x38 + 80227a2: eddd 6a23 vldr s13, [sp, #140] ; 0x8c + 80227a6: ed9d 4a27 vldr s8, [sp, #156] ; 0x9c + 80227aa: ed9d 7a26 vldr s14, [sp, #152] ; 0x98 + 80227ae: eddd 3a21 vldr s7, [sp, #132] ; 0x84 + 80227b2: eddd 7a20 vldr s15, [sp, #128] ; 0x80 + 80227b6: ed9d 5a22 vldr s10, [sp, #136] ; 0x88 + 80227ba: eddd 5a25 vldr s11, [sp, #148] ; 0x94 + 80227be: ed9d 6a28 vldr s12, [sp, #160] ; 0xa0 + 80227c2: e9dd 0a19 ldrd r0, sl, [sp, #100] ; 0x64 + 80227c6: e9dd c71e ldrd ip, r7, [sp, #120] ; 0x78 + 80227ca: e9dd 911c ldrd r9, r1, [sp, #112] ; 0x70 + 80227ce: f1be 0f00 cmp.w lr, #0 + 80227d2: d030 beq.n 8022836 <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x74a> + 80227d4: 9e0e ldr r6, [sp, #56] ; 0x38 + 80227d6: 4450 add r0, sl + 80227d8: ee76 6aa4 vadd.f32 s13, s13, s9 + 80227dc: 4431 add r1, r6 + 80227de: ee37 7a04 vadd.f32 s14, s14, s8 + 80227e2: ee77 7aa3 vadd.f32 s15, s15, s7 + 80227e6: 4549 cmp r1, r9 + 80227e8: db08 blt.n 80227fc <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x710> + 80227ea: ee77 7a85 vadd.f32 s15, s15, s10 + 80227ee: 3001 adds r0, #1 + 80227f0: ee76 6aa5 vadd.f32 s13, s13, s11 + 80227f4: eba1 0109 sub.w r1, r1, r9 + 80227f8: ee37 7a06 vadd.f32 s14, s14, s12 + 80227fc: f10e 3eff add.w lr, lr, #4294967295 + 8022800: f04f 0801 mov.w r8, #1 + 8022804: e7e3 b.n 80227ce <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x6e2> + 8022806: 9e0e ldr r6, [sp, #56] ; 0x38 + 8022808: 4450 add r0, sl + 802280a: ee37 7a24 vadd.f32 s14, s14, s9 + 802280e: 4431 add r1, r6 + 8022810: ee77 7a84 vadd.f32 s15, s15, s8 + 8022814: ee76 6aa3 vadd.f32 s13, s13, s7 + 8022818: 4541 cmp r1, r8 + 802281a: db08 blt.n 802282e <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x742> + 802281c: ee76 6a85 vadd.f32 s13, s13, s10 + 8022820: 3001 adds r0, #1 + 8022822: ee37 7a25 vadd.f32 s14, s14, s11 + 8022826: eba1 0108 sub.w r1, r1, r8 + 802282a: ee77 7a86 vadd.f32 s15, s15, s12 + 802282e: 3f01 subs r7, #1 + 8022830: f04f 0901 mov.w r9, #1 + 8022834: e79e b.n 8022774 <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x688> + 8022836: 449c add ip, r3 + 8022838: 1aff subs r7, r7, r3 + 802283a: f1b8 0f00 cmp.w r8, #0 + 802283e: d009 beq.n 8022854 <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x768> + 8022840: 9019 str r0, [sp, #100] ; 0x64 + 8022842: edcd 6a23 vstr s13, [sp, #140] ; 0x8c + 8022846: ed8d 7a26 vstr s14, [sp, #152] ; 0x98 + 802284a: edcd 7a20 vstr s15, [sp, #128] ; 0x80 + 802284e: 911d str r1, [sp, #116] ; 0x74 + 8022850: e9cd c71e strd ip, r7, [sp, #120] ; 0x78 + 8022854: 1ad2 subs r2, r2, r3 + 8022856: e6b5 b.n 80225c4 <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x4d8> + 8022858: 9b0f ldr r3, [sp, #60] ; 0x3c + 802285a: 681b ldr r3, [r3, #0] + 802285c: b923 cbnz r3, 8022868 <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x77c> + 802285e: 4b04 ldr r3, [pc, #16] ; (8022870 <_ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht+0x784>) + 8022860: 6818 ldr r0, [r3, #0] + 8022862: 6803 ldr r3, [r0, #0] + 8022864: 6adb ldr r3, [r3, #44] ; 0x2c + 8022866: 4798 blx r3 + 8022868: b05b add sp, #364 ; 0x16c + 802286a: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 802286e: bf00 nop + 8022870: 2001e734 .word 0x2001e734 + +08022874 <_ZN8touchgfx3LCD22WideTextInternalStructC1ERNS_12TextProviderEtthPKNS_4FontEsNS_14WideTextActionE>: + 8022874: b570 push {r4, r5, r6, lr} + 8022876: 4604 mov r4, r0 + 8022878: 2500 movs r5, #0 + 802287a: 9805 ldr r0, [sp, #20] + 802287c: f89d 601c ldrb.w r6, [sp, #28] + 8022880: 6061 str r1, [r4, #4] + 8022882: 8263 strh r3, [r4, #18] + 8022884: f89d 1010 ldrb.w r1, [sp, #16] + 8022888: f9bd 3018 ldrsh.w r3, [sp, #24] + 802288c: 8025 strh r5, [r4, #0] + 802288e: 7221 strb r1, [r4, #8] + 8022890: 7266 strb r6, [r4, #9] + 8022892: 60e0 str r0, [r4, #12] + 8022894: 8222 strh r2, [r4, #16] + 8022896: 82a3 strh r3, [r4, #20] + 8022898: 82e5 strh r5, [r4, #22] + 802289a: 8325 strh r5, [r4, #24] + 802289c: 8365 strh r5, [r4, #26] + 802289e: 83a5 strh r5, [r4, #28] + 80228a0: 83e5 strh r5, [r4, #30] + 80228a2: 8425 strh r5, [r4, #32] + 80228a4: f884 5022 strb.w r5, [r4, #34] ; 0x22 + 80228a8: b32e cbz r6, 80228f6 <_ZN8touchgfx3LCD22WideTextInternalStructC1ERNS_12TextProviderEtthPKNS_4FontEsNS_14WideTextActionE+0x82> + 80228aa: 6803 ldr r3, [r0, #0] + 80228ac: 695b ldr r3, [r3, #20] + 80228ae: 4798 blx r3 + 80228b0: 4606 mov r6, r0 + 80228b2: b300 cbz r0, 80228f6 <_ZN8touchgfx3LCD22WideTextInternalStructC1ERNS_12TextProviderEtthPKNS_4FontEsNS_14WideTextActionE+0x82> + 80228b4: 68e0 ldr r0, [r4, #12] + 80228b6: 4631 mov r1, r6 + 80228b8: 6803 ldr r3, [r0, #0] + 80228ba: 68db ldr r3, [r3, #12] + 80228bc: 4798 blx r3 + 80228be: 4605 mov r5, r0 + 80228c0: b1c8 cbz r0, 80228f6 <_ZN8touchgfx3LCD22WideTextInternalStructC1ERNS_12TextProviderEtthPKNS_4FontEsNS_14WideTextActionE+0x82> + 80228c2: 7b43 ldrb r3, [r0, #13] + 80228c4: 7a82 ldrb r2, [r0, #10] + 80228c6: 005b lsls r3, r3, #1 + 80228c8: f403 7380 and.w r3, r3, #256 ; 0x100 + 80228cc: 4313 orrs r3, r2 + 80228ce: 8423 strh r3, [r4, #32] + 80228d0: 7a63 ldrb r3, [r4, #9] + 80228d2: 2b06 cmp r3, #6 + 80228d4: d10f bne.n 80228f6 <_ZN8touchgfx3LCD22WideTextInternalStructC1ERNS_12TextProviderEtthPKNS_4FontEsNS_14WideTextActionE+0x82> + 80228d6: 68e0 ldr r0, [r4, #12] + 80228d8: 462a mov r2, r5 + 80228da: 4631 mov r1, r6 + 80228dc: 6803 ldr r3, [r0, #0] + 80228de: 6c5b ldr r3, [r3, #68] ; 0x44 + 80228e0: 4798 blx r3 + 80228e2: 7b6b ldrb r3, [r5, #13] + 80228e4: 005b lsls r3, r3, #1 + 80228e6: f403 7280 and.w r2, r3, #256 ; 0x100 + 80228ea: 7aab ldrb r3, [r5, #10] + 80228ec: 4313 orrs r3, r2 + 80228ee: 4418 add r0, r3 + 80228f0: 8c23 ldrh r3, [r4, #32] + 80228f2: 4418 add r0, r3 + 80228f4: 8420 strh r0, [r4, #32] + 80228f6: 4620 mov r0, r4 + 80228f8: bd70 pop {r4, r5, r6, pc} + +080228fa <_ZN8touchgfx3LCD11stringWidthERNS_12TextProviderERKNS_4FontEih>: + 80228fa: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 80228fe: 2400 movs r4, #0 + 8022900: b085 sub sp, #20 + 8022902: 4681 mov r9, r0 + 8022904: 4688 mov r8, r1 + 8022906: 4692 mov sl, r2 + 8022908: 469b mov fp, r3 + 802290a: 4627 mov r7, r4 + 802290c: 4625 mov r5, r4 + 802290e: 4626 mov r6, r4 + 8022910: 4554 cmp r4, sl + 8022912: da2a bge.n 802296a <_ZN8touchgfx3LCD11stringWidthERNS_12TextProviderERKNS_4FontEih+0x70> + 8022914: 2300 movs r3, #0 + 8022916: 9303 str r3, [sp, #12] + 8022918: f64f 63ff movw r3, #65279 ; 0xfeff + 802291c: 429d cmp r5, r3 + 802291e: d004 beq.n 802292a <_ZN8touchgfx3LCD11stringWidthERNS_12TextProviderERKNS_4FontEih+0x30> + 8022920: f242 030b movw r3, #8203 ; 0x200b + 8022924: 429d cmp r5, r3 + 8022926: bf18 it ne + 8022928: 462f movne r7, r5 + 802292a: ab03 add r3, sp, #12 + 802292c: 4642 mov r2, r8 + 802292e: 4659 mov r1, fp + 8022930: 4648 mov r0, r9 + 8022932: f003 f859 bl 80259e8 <_ZN8touchgfx12TextProvider15getNextLigatureEhPKNS_4FontERPKNS_9GlyphNodeE> + 8022936: 4605 mov r5, r0 + 8022938: b1b8 cbz r0, 802296a <_ZN8touchgfx3LCD11stringWidthERNS_12TextProviderERKNS_4FontEih+0x70> + 802293a: 280a cmp r0, #10 + 802293c: d015 beq.n 802296a <_ZN8touchgfx3LCD11stringWidthERNS_12TextProviderERKNS_4FontEih+0x70> + 802293e: 9a03 ldr r2, [sp, #12] + 8022940: b18a cbz r2, 8022966 <_ZN8touchgfx3LCD11stringWidthERNS_12TextProviderERKNS_4FontEih+0x6c> + 8022942: 7b50 ldrb r0, [r2, #13] + 8022944: 4639 mov r1, r7 + 8022946: 7a93 ldrb r3, [r2, #10] + 8022948: 0040 lsls r0, r0, #1 + 802294a: 8895 ldrh r5, [r2, #4] + 802294c: f400 7080 and.w r0, r0, #256 ; 0x100 + 8022950: 4303 orrs r3, r0 + 8022952: 4640 mov r0, r8 + 8022954: 9301 str r3, [sp, #4] + 8022956: f8d8 3000 ldr.w r3, [r8] + 802295a: 6c5b ldr r3, [r3, #68] ; 0x44 + 802295c: 4798 blx r3 + 802295e: 9b01 ldr r3, [sp, #4] + 8022960: 4418 add r0, r3 + 8022962: 4406 add r6, r0 + 8022964: b2b6 uxth r6, r6 + 8022966: 3401 adds r4, #1 + 8022968: e7d2 b.n 8022910 <_ZN8touchgfx3LCD11stringWidthERNS_12TextProviderERKNS_4FontEih+0x16> + 802296a: 4630 mov r0, r6 + 802296c: b005 add sp, #20 + 802296e: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + +08022972 <_ZN8touchgfx3LCD10rotateRectERNS_4RectERKS1_NS_12TextRotationE>: + 8022972: 2a02 cmp r2, #2 + 8022974: b530 push {r4, r5, lr} + 8022976: d011 beq.n 802299c <_ZN8touchgfx3LCD10rotateRectERNS_4RectERKS1_NS_12TextRotationE+0x2a> + 8022978: 2a03 cmp r2, #3 + 802297a: d01c beq.n 80229b6 <_ZN8touchgfx3LCD10rotateRectERNS_4RectERKS1_NS_12TextRotationE+0x44> + 802297c: 2a01 cmp r2, #1 + 802297e: d10c bne.n 802299a <_ZN8touchgfx3LCD10rotateRectERNS_4RectERKS1_NS_12TextRotationE+0x28> + 8022980: 888b ldrh r3, [r1, #4] + 8022982: 8801 ldrh r1, [r0, #0] + 8022984: f9b0 2004 ldrsh.w r2, [r0, #4] + 8022988: 1a5b subs r3, r3, r1 + 802298a: 8844 ldrh r4, [r0, #2] + 802298c: f9b0 1006 ldrsh.w r1, [r0, #6] + 8022990: 1a9b subs r3, r3, r2 + 8022992: 8004 strh r4, [r0, #0] + 8022994: 8081 strh r1, [r0, #4] + 8022996: 8043 strh r3, [r0, #2] + 8022998: 80c2 strh r2, [r0, #6] + 802299a: bd30 pop {r4, r5, pc} + 802299c: 88cb ldrh r3, [r1, #6] + 802299e: 8842 ldrh r2, [r0, #2] + 80229a0: 1a9b subs r3, r3, r2 + 80229a2: 88c2 ldrh r2, [r0, #6] + 80229a4: 1a9b subs r3, r3, r2 + 80229a6: 888a ldrh r2, [r1, #4] + 80229a8: 8801 ldrh r1, [r0, #0] + 80229aa: 8043 strh r3, [r0, #2] + 80229ac: 1a52 subs r2, r2, r1 + 80229ae: 8881 ldrh r1, [r0, #4] + 80229b0: 1a52 subs r2, r2, r1 + 80229b2: 8002 strh r2, [r0, #0] + 80229b4: e7f1 b.n 802299a <_ZN8touchgfx3LCD10rotateRectERNS_4RectERKS1_NS_12TextRotationE+0x28> + 80229b6: 88cb ldrh r3, [r1, #6] + 80229b8: 8841 ldrh r1, [r0, #2] + 80229ba: f9b0 2006 ldrsh.w r2, [r0, #6] + 80229be: 1a5b subs r3, r3, r1 + 80229c0: f9b0 5000 ldrsh.w r5, [r0] + 80229c4: f9b0 4004 ldrsh.w r4, [r0, #4] + 80229c8: 1a9b subs r3, r3, r2 + 80229ca: 8045 strh r5, [r0, #2] + 80229cc: 8082 strh r2, [r0, #4] + 80229ce: 8003 strh r3, [r0, #0] + 80229d0: 80c4 strh r4, [r0, #6] + 80229d2: e7e2 b.n 802299a <_ZN8touchgfx3LCD10rotateRectERNS_4RectERKS1_NS_12TextRotationE+0x28> + +080229d4 <_ZN8touchgfx3LCD18drawStringInternalEPtPKNS_4RectEssRS3_PKNS0_13StringVisualsEhRNS_12TextProviderEib>: + 80229d4: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 80229d8: b09f sub sp, #124 ; 0x7c + 80229da: 9116 str r1, [sp, #88] ; 0x58 + 80229dc: 9317 str r3, [sp, #92] ; 0x5c + 80229de: 9929 ldr r1, [sp, #164] ; 0xa4 + 80229e0: 9b29 ldr r3, [sp, #164] ; 0xa4 + 80229e2: 8809 ldrh r1, [r1, #0] + 80229e4: 889b ldrh r3, [r3, #4] + 80229e6: f8dd 80a8 ldr.w r8, [sp, #168] ; 0xa8 + 80229ea: 440b add r3, r1 + 80229ec: 9212 str r2, [sp, #72] ; 0x48 + 80229ee: f89d 20b8 ldrb.w r2, [sp, #184] ; 0xb8 + 80229f2: b21b sxth r3, r3 + 80229f4: 9011 str r0, [sp, #68] ; 0x44 + 80229f6: f89d b0ac ldrb.w fp, [sp, #172] ; 0xac + 80229fa: 9310 str r3, [sp, #64] ; 0x40 + 80229fc: f8d8 3000 ldr.w r3, [r8] + 8022a00: f9bd 60a0 ldrsh.w r6, [sp, #160] ; 0xa0 + 8022a04: 7b19 ldrb r1, [r3, #12] + 8022a06: 7adb ldrb r3, [r3, #11] + 8022a08: 9114 str r1, [sp, #80] ; 0x50 + 8022a0a: 9315 str r3, [sp, #84] ; 0x54 + 8022a0c: 2a00 cmp r2, #0 + 8022a0e: d06a beq.n 8022ae6 <_ZN8touchgfx3LCD18drawStringInternalEPtPKNS_4RectEssRS3_PKNS0_13StringVisualsEhRNS_12TextProviderEib+0x112> + 8022a10: f898 3010 ldrb.w r3, [r8, #16] + 8022a14: 9a2d ldr r2, [sp, #180] ; 0xb4 + 8022a16: 2b06 cmp r3, #6 + 8022a18: bf14 ite ne + 8022a1a: 2301 movne r3, #1 + 8022a1c: 2302 moveq r3, #2 + 8022a1e: 4413 add r3, r2 + 8022a20: f04f 0900 mov.w r9, #0 + 8022a24: 930f str r3, [sp, #60] ; 0x3c + 8022a26: 464c mov r4, r9 + 8022a28: f8cd 9038 str.w r9, [sp, #56] ; 0x38 + 8022a2c: f8cd 9034 str.w r9, [sp, #52] ; 0x34 + 8022a30: e9dd 320e ldrd r3, r2, [sp, #56] ; 0x38 + 8022a34: 4293 cmp r3, r2 + 8022a36: f280 808f bge.w 8022b58 <_ZN8touchgfx3LCD18drawStringInternalEPtPKNS_4RectEssRS3_PKNS0_13StringVisualsEhRNS_12TextProviderEib+0x184> + 8022a3a: 2300 movs r3, #0 + 8022a3c: e9cd 331c strd r3, r3, [sp, #112] ; 0x70 + 8022a40: f88d 306f strb.w r3, [sp, #111] ; 0x6f + 8022a44: f64f 63ff movw r3, #65279 ; 0xfeff + 8022a48: 429c cmp r4, r3 + 8022a4a: d006 beq.n 8022a5a <_ZN8touchgfx3LCD18drawStringInternalEPtPKNS_4RectEssRS3_PKNS0_13StringVisualsEhRNS_12TextProviderEib+0x86> + 8022a4c: 9b0d ldr r3, [sp, #52] ; 0x34 + 8022a4e: f242 020b movw r2, #8203 ; 0x200b + 8022a52: 4294 cmp r4, r2 + 8022a54: bf18 it ne + 8022a56: 4623 movne r3, r4 + 8022a58: 930d str r3, [sp, #52] ; 0x34 + 8022a5a: 9b0e ldr r3, [sp, #56] ; 0x38 + 8022a5c: 992d ldr r1, [sp, #180] ; 0xb4 + 8022a5e: f8d8 2000 ldr.w r2, [r8] + 8022a62: 428b cmp r3, r1 + 8022a64: db41 blt.n 8022aea <_ZN8touchgfx3LCD18drawStringInternalEPtPKNS_4RectEssRS3_PKNS0_13StringVisualsEhRNS_12TextProviderEib+0x116> + 8022a66: 6813 ldr r3, [r2, #0] + 8022a68: 4610 mov r0, r2 + 8022a6a: 695b ldr r3, [r3, #20] + 8022a6c: 4798 blx r3 + 8022a6e: 4604 mov r4, r0 + 8022a70: f8d8 0000 ldr.w r0, [r8] + 8022a74: aa1d add r2, sp, #116 ; 0x74 + 8022a76: 4621 mov r1, r4 + 8022a78: 6803 ldr r3, [r0, #0] + 8022a7a: 689d ldr r5, [r3, #8] + 8022a7c: f10d 036f add.w r3, sp, #111 ; 0x6f + 8022a80: 47a8 blx r5 + 8022a82: 901c str r0, [sp, #112] ; 0x70 + 8022a84: f64f 63ff movw r3, #65279 ; 0xfeff + 8022a88: 429c cmp r4, r3 + 8022a8a: f000 80ec beq.w 8022c66 <_ZN8touchgfx3LCD18drawStringInternalEPtPKNS_4RectEssRS3_PKNS0_13StringVisualsEhRNS_12TextProviderEib+0x292> + 8022a8e: f242 030b movw r3, #8203 ; 0x200b + 8022a92: 429c cmp r4, r3 + 8022a94: f000 80e7 beq.w 8022c66 <_ZN8touchgfx3LCD18drawStringInternalEPtPKNS_4RectEssRS3_PKNS0_13StringVisualsEhRNS_12TextProviderEib+0x292> + 8022a98: 2c00 cmp r4, #0 + 8022a9a: f000 80f9 beq.w 8022c90 <_ZN8touchgfx3LCD18drawStringInternalEPtPKNS_4RectEssRS3_PKNS0_13StringVisualsEhRNS_12TextProviderEib+0x2bc> + 8022a9e: 2c0a cmp r4, #10 + 8022aa0: d060 beq.n 8022b64 <_ZN8touchgfx3LCD18drawStringInternalEPtPKNS_4RectEssRS3_PKNS0_13StringVisualsEhRNS_12TextProviderEib+0x190> + 8022aa2: 9a1c ldr r2, [sp, #112] ; 0x70 + 8022aa4: b36a cbz r2, 8022b02 <_ZN8touchgfx3LCD18drawStringInternalEPtPKNS_4RectEssRS3_PKNS0_13StringVisualsEhRNS_12TextProviderEib+0x12e> + 8022aa6: 8894 ldrh r4, [r2, #4] + 8022aa8: f1bb 0f00 cmp.w fp, #0 + 8022aac: d03b beq.n 8022b26 <_ZN8touchgfx3LCD18drawStringInternalEPtPKNS_4RectEssRS3_PKNS0_13StringVisualsEhRNS_12TextProviderEib+0x152> + 8022aae: f892 900d ldrb.w r9, [r2, #13] + 8022ab2: f1bb 0f01 cmp.w fp, #1 + 8022ab6: ea4f 0949 mov.w r9, r9, lsl #1 + 8022aba: f409 7380 and.w r3, r9, #256 ; 0x100 + 8022abe: f892 900a ldrb.w r9, [r2, #10] + 8022ac2: ea49 0903 orr.w r9, r9, r3 + 8022ac6: d134 bne.n 8022b32 <_ZN8touchgfx3LCD18drawStringInternalEPtPKNS_4RectEssRS3_PKNS0_13StringVisualsEhRNS_12TextProviderEib+0x15e> + 8022ac8: 9b0d ldr r3, [sp, #52] ; 0x34 + 8022aca: eba6 0609 sub.w r6, r6, r9 + 8022ace: 2b00 cmp r3, #0 + 8022ad0: d14f bne.n 8022b72 <_ZN8touchgfx3LCD18drawStringInternalEPtPKNS_4RectEssRS3_PKNS0_13StringVisualsEhRNS_12TextProviderEib+0x19e> + 8022ad2: 9a14 ldr r2, [sp, #80] ; 0x50 + 8022ad4: eb09 0306 add.w r3, r9, r6 + 8022ad8: 4413 add r3, r2 + 8022ada: 9a29 ldr r2, [sp, #164] ; 0xa4 + 8022adc: f9b2 2000 ldrsh.w r2, [r2] + 8022ae0: 4293 cmp r3, r2 + 8022ae2: da51 bge.n 8022b88 <_ZN8touchgfx3LCD18drawStringInternalEPtPKNS_4RectEssRS3_PKNS0_13StringVisualsEhRNS_12TextProviderEib+0x1b4> + 8022ae4: e038 b.n 8022b58 <_ZN8touchgfx3LCD18drawStringInternalEPtPKNS_4RectEssRS3_PKNS0_13StringVisualsEhRNS_12TextProviderEib+0x184> + 8022ae6: 9b2d ldr r3, [sp, #180] ; 0xb4 + 8022ae8: e79a b.n 8022a20 <_ZN8touchgfx3LCD18drawStringInternalEPtPKNS_4RectEssRS3_PKNS0_13StringVisualsEhRNS_12TextProviderEib+0x4c> + 8022aea: f10d 036f add.w r3, sp, #111 ; 0x6f + 8022aee: 4659 mov r1, fp + 8022af0: 982c ldr r0, [sp, #176] ; 0xb0 + 8022af2: 9301 str r3, [sp, #4] + 8022af4: ab1d add r3, sp, #116 ; 0x74 + 8022af6: 9300 str r3, [sp, #0] + 8022af8: ab1c add r3, sp, #112 ; 0x70 + 8022afa: f002 ffbe bl 8025a7a <_ZN8touchgfx12TextProvider15getNextLigatureEhPKNS_4FontERPKNS_9GlyphNodeERPKhRh> + 8022afe: 4604 mov r4, r0 + 8022b00: e7c0 b.n 8022a84 <_ZN8touchgfx3LCD18drawStringInternalEPtPKNS_4RectEssRS3_PKNS0_13StringVisualsEhRNS_12TextProviderEib+0xb0> + 8022b02: f8d8 0000 ldr.w r0, [r8] + 8022b06: 6803 ldr r3, [r0, #0] + 8022b08: 691b ldr r3, [r3, #16] + 8022b0a: 4798 blx r3 + 8022b0c: f64f 63ff movw r3, #65279 ; 0xfeff + 8022b10: 4298 cmp r0, r3 + 8022b12: f000 80a8 beq.w 8022c66 <_ZN8touchgfx3LCD18drawStringInternalEPtPKNS_4RectEssRS3_PKNS0_13StringVisualsEhRNS_12TextProviderEib+0x292> + 8022b16: f242 030b movw r3, #8203 ; 0x200b + 8022b1a: 4298 cmp r0, r3 + 8022b1c: f000 80a3 beq.w 8022c66 <_ZN8touchgfx3LCD18drawStringInternalEPtPKNS_4RectEssRS3_PKNS0_13StringVisualsEhRNS_12TextProviderEib+0x292> + 8022b20: f1bb 0f00 cmp.w fp, #0 + 8022b24: d100 bne.n 8022b28 <_ZN8touchgfx3LCD18drawStringInternalEPtPKNS_4RectEssRS3_PKNS0_13StringVisualsEhRNS_12TextProviderEib+0x154> + 8022b26: 444e add r6, r9 + 8022b28: 9a1c ldr r2, [sp, #112] ; 0x70 + 8022b2a: 2a00 cmp r2, #0 + 8022b2c: d1bf bne.n 8022aae <_ZN8touchgfx3LCD18drawStringInternalEPtPKNS_4RectEssRS3_PKNS0_13StringVisualsEhRNS_12TextProviderEib+0xda> + 8022b2e: 4691 mov r9, r2 + 8022b30: e099 b.n 8022c66 <_ZN8touchgfx3LCD18drawStringInternalEPtPKNS_4RectEssRS3_PKNS0_13StringVisualsEhRNS_12TextProviderEib+0x292> + 8022b32: 9b0d ldr r3, [sp, #52] ; 0x34 + 8022b34: 2b00 cmp r3, #0 + 8022b36: f000 80ad beq.w 8022c94 <_ZN8touchgfx3LCD18drawStringInternalEPtPKNS_4RectEssRS3_PKNS0_13StringVisualsEhRNS_12TextProviderEib+0x2c0> + 8022b3a: f1bb 0f00 cmp.w fp, #0 + 8022b3e: d118 bne.n 8022b72 <_ZN8touchgfx3LCD18drawStringInternalEPtPKNS_4RectEssRS3_PKNS0_13StringVisualsEhRNS_12TextProviderEib+0x19e> + 8022b40: f8d8 0000 ldr.w r0, [r8] + 8022b44: 990d ldr r1, [sp, #52] ; 0x34 + 8022b46: 6803 ldr r3, [r0, #0] + 8022b48: 6c5b ldr r3, [r3, #68] ; 0x44 + 8022b4a: 4798 blx r3 + 8022b4c: 4406 add r6, r0 + 8022b4e: 9b15 ldr r3, [sp, #84] ; 0x54 + 8022b50: 9a10 ldr r2, [sp, #64] ; 0x40 + 8022b52: 1af3 subs r3, r6, r3 + 8022b54: 4293 cmp r3, r2 + 8022b56: dd17 ble.n 8022b88 <_ZN8touchgfx3LCD18drawStringInternalEPtPKNS_4RectEssRS3_PKNS0_13StringVisualsEhRNS_12TextProviderEib+0x1b4> + 8022b58: 2c00 cmp r4, #0 + 8022b5a: f000 8099 beq.w 8022c90 <_ZN8touchgfx3LCD18drawStringInternalEPtPKNS_4RectEssRS3_PKNS0_13StringVisualsEhRNS_12TextProviderEib+0x2bc> + 8022b5e: 2c0a cmp r4, #10 + 8022b60: f040 8087 bne.w 8022c72 <_ZN8touchgfx3LCD18drawStringInternalEPtPKNS_4RectEssRS3_PKNS0_13StringVisualsEhRNS_12TextProviderEib+0x29e> + 8022b64: 240a movs r4, #10 + 8022b66: fab4 f084 clz r0, r4 + 8022b6a: 0940 lsrs r0, r0, #5 + 8022b6c: b01f add sp, #124 ; 0x7c + 8022b6e: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 8022b72: f8d8 0000 ldr.w r0, [r8] + 8022b76: 990d ldr r1, [sp, #52] ; 0x34 + 8022b78: 6803 ldr r3, [r0, #0] + 8022b7a: 6c5b ldr r3, [r3, #68] ; 0x44 + 8022b7c: 4798 blx r3 + 8022b7e: f1bb 0f01 cmp.w fp, #1 + 8022b82: eba6 0600 sub.w r6, r6, r0 + 8022b86: d0a4 beq.n 8022ad2 <_ZN8touchgfx3LCD18drawStringInternalEPtPKNS_4RectEssRS3_PKNS0_13StringVisualsEhRNS_12TextProviderEib+0xfe> + 8022b88: 981c ldr r0, [sp, #112] ; 0x70 + 8022b8a: 9b29 ldr r3, [sp, #164] ; 0xa4 + 8022b8c: f990 1009 ldrsb.w r1, [r0, #9] + 8022b90: f9b3 7000 ldrsh.w r7, [r3] + 8022b94: 7b43 ldrb r3, [r0, #13] + 8022b96: 4431 add r1, r6 + 8022b98: 015b lsls r3, r3, #5 + 8022b9a: f403 7280 and.w r2, r3, #256 ; 0x100 + 8022b9e: 7983 ldrb r3, [r0, #6] + 8022ba0: 4313 orrs r3, r2 + 8022ba2: 440b add r3, r1 + 8022ba4: 42bb cmp r3, r7 + 8022ba6: db5e blt.n 8022c66 <_ZN8touchgfx3LCD18drawStringInternalEPtPKNS_4RectEssRS3_PKNS0_13StringVisualsEhRNS_12TextProviderEib+0x292> + 8022ba8: 9b10 ldr r3, [sp, #64] ; 0x40 + 8022baa: 4299 cmp r1, r3 + 8022bac: da5b bge.n 8022c66 <_ZN8touchgfx3LCD18drawStringInternalEPtPKNS_4RectEssRS3_PKNS0_13StringVisualsEhRNS_12TextProviderEib+0x292> + 8022bae: f8d8 0000 ldr.w r0, [r8] + 8022bb2: 42b7 cmp r7, r6 + 8022bb4: 6803 ldr r3, [r0, #0] + 8022bb6: bfcc ite gt + 8022bb8: 1bbf subgt r7, r7, r6 + 8022bba: 2700 movle r7, #0 + 8022bbc: 6b1b ldr r3, [r3, #48] ; 0x30 + 8022bbe: bfc8 it gt + 8022bc0: b2bf uxthgt r7, r7 + 8022bc2: 4798 blx r3 + 8022bc4: 9b1c ldr r3, [sp, #112] ; 0x70 + 8022bc6: 7b5a ldrb r2, [r3, #13] + 8022bc8: 00d1 lsls r1, r2, #3 + 8022bca: f401 7580 and.w r5, r1, #256 ; 0x100 + 8022bce: 7a19 ldrb r1, [r3, #8] + 8022bd0: 4329 orrs r1, r5 + 8022bd2: 0655 lsls r5, r2, #25 + 8022bd4: 9d17 ldr r5, [sp, #92] ; 0x5c + 8022bd6: bf48 it mi + 8022bd8: f5a1 7100 submi.w r1, r1, #512 ; 0x200 + 8022bdc: 4405 add r5, r0 + 8022bde: bf48 it mi + 8022be0: b209 sxthmi r1, r1 + 8022be2: 1a6d subs r5, r5, r1 + 8022be4: 9929 ldr r1, [sp, #164] ; 0xa4 + 8022be6: b2ad uxth r5, r5 + 8022be8: f9b1 1002 ldrsh.w r1, [r1, #2] + 8022bec: fa0f fa85 sxth.w sl, r5 + 8022bf0: 4551 cmp r1, sl + 8022bf2: dd3c ble.n 8022c6e <_ZN8touchgfx3LCD18drawStringInternalEPtPKNS_4RectEssRS3_PKNS0_13StringVisualsEhRNS_12TextProviderEib+0x29a> + 8022bf4: 0112 lsls r2, r2, #4 + 8022bf6: 79d8 ldrb r0, [r3, #7] + 8022bf8: f402 7280 and.w r2, r2, #256 ; 0x100 + 8022bfc: 4302 orrs r2, r0 + 8022bfe: 4492 add sl, r2 + 8022c00: 4551 cmp r1, sl + 8022c02: dc30 bgt.n 8022c66 <_ZN8touchgfx3LCD18drawStringInternalEPtPKNS_4RectEssRS3_PKNS0_13StringVisualsEhRNS_12TextProviderEib+0x292> + 8022c04: 1b4d subs r5, r1, r5 + 8022c06: 468a mov sl, r1 + 8022c08: b22d sxth r5, r5 + 8022c0a: 9319 str r3, [sp, #100] ; 0x64 + 8022c0c: b2ad uxth r5, r5 + 8022c0e: 9b11 ldr r3, [sp, #68] ; 0x44 + 8022c10: f8d8 0000 ldr.w r0, [r8] + 8022c14: 681a ldr r2, [r3, #0] + 8022c16: 6801 ldr r1, [r0, #0] + 8022c18: 6cd3 ldr r3, [r2, #76] ; 0x4c + 8022c1a: 9a1d ldr r2, [sp, #116] ; 0x74 + 8022c1c: 9313 str r3, [sp, #76] ; 0x4c + 8022c1e: 9218 str r2, [sp, #96] ; 0x60 + 8022c20: 6c09 ldr r1, [r1, #64] ; 0x40 + 8022c22: 4788 blx r1 + 8022c24: f898 1006 ldrb.w r1, [r8, #6] + 8022c28: 9b19 ldr r3, [sp, #100] ; 0x64 + 8022c2a: 910b str r1, [sp, #44] ; 0x2c + 8022c2c: f898 100e ldrb.w r1, [r8, #14] + 8022c30: 9a18 ldr r2, [sp, #96] ; 0x60 + 8022c32: 910a str r1, [sp, #40] ; 0x28 + 8022c34: f89d 106f ldrb.w r1, [sp, #111] ; 0x6f + 8022c38: 9109 str r1, [sp, #36] ; 0x24 + 8022c3a: f8d8 1008 ldr.w r1, [r8, #8] + 8022c3e: 9305 str r3, [sp, #20] + 8022c40: 9b29 ldr r3, [sp, #164] ; 0xa4 + 8022c42: 9206 str r2, [sp, #24] + 8022c44: 9304 str r3, [sp, #16] + 8022c46: 9b12 ldr r3, [sp, #72] ; 0x48 + 8022c48: f8cd a004 str.w sl, [sp, #4] + 8022c4c: e9cd 7502 strd r7, r5, [sp, #8] + 8022c50: 4437 add r7, r6 + 8022c52: 9d13 ldr r5, [sp, #76] ; 0x4c + 8022c54: b23f sxth r7, r7 + 8022c56: e9cd 0107 strd r0, r1, [sp, #28] + 8022c5a: 9700 str r7, [sp, #0] + 8022c5c: 9916 ldr r1, [sp, #88] ; 0x58 + 8022c5e: 681a ldr r2, [r3, #0] + 8022c60: 9811 ldr r0, [sp, #68] ; 0x44 + 8022c62: 685b ldr r3, [r3, #4] + 8022c64: 47a8 blx r5 + 8022c66: 9b0e ldr r3, [sp, #56] ; 0x38 + 8022c68: 3301 adds r3, #1 + 8022c6a: 930e str r3, [sp, #56] ; 0x38 + 8022c6c: e6e0 b.n 8022a30 <_ZN8touchgfx3LCD18drawStringInternalEPtPKNS_4RectEssRS3_PKNS0_13StringVisualsEhRNS_12TextProviderEib+0x5c> + 8022c6e: 2500 movs r5, #0 + 8022c70: e7cb b.n 8022c0a <_ZN8touchgfx3LCD18drawStringInternalEPtPKNS_4RectEssRS3_PKNS0_13StringVisualsEhRNS_12TextProviderEib+0x236> + 8022c72: 9d0e ldr r5, [sp, #56] ; 0x38 + 8022c74: 3501 adds r5, #1 + 8022c76: 9b2d ldr r3, [sp, #180] ; 0xb4 + 8022c78: 429d cmp r5, r3 + 8022c7a: f6bf af74 bge.w 8022b66 <_ZN8touchgfx3LCD18drawStringInternalEPtPKNS_4RectEssRS3_PKNS0_13StringVisualsEhRNS_12TextProviderEib+0x192> + 8022c7e: 4659 mov r1, fp + 8022c80: 982c ldr r0, [sp, #176] ; 0xb0 + 8022c82: f7e1 ffdf bl 8004c44 <_ZN8touchgfx12TextProvider15getNextLigatureEh> + 8022c86: 4604 mov r4, r0 + 8022c88: b110 cbz r0, 8022c90 <_ZN8touchgfx3LCD18drawStringInternalEPtPKNS_4RectEssRS3_PKNS0_13StringVisualsEhRNS_12TextProviderEib+0x2bc> + 8022c8a: 280a cmp r0, #10 + 8022c8c: d1f2 bne.n 8022c74 <_ZN8touchgfx3LCD18drawStringInternalEPtPKNS_4RectEssRS3_PKNS0_13StringVisualsEhRNS_12TextProviderEib+0x2a0> + 8022c8e: e769 b.n 8022b64 <_ZN8touchgfx3LCD18drawStringInternalEPtPKNS_4RectEssRS3_PKNS0_13StringVisualsEhRNS_12TextProviderEib+0x190> + 8022c90: 2400 movs r4, #0 + 8022c92: e768 b.n 8022b66 <_ZN8touchgfx3LCD18drawStringInternalEPtPKNS_4RectEssRS3_PKNS0_13StringVisualsEhRNS_12TextProviderEib+0x192> + 8022c94: f1bb 0f00 cmp.w fp, #0 + 8022c98: f43f af59 beq.w 8022b4e <_ZN8touchgfx3LCD18drawStringInternalEPtPKNS_4RectEssRS3_PKNS0_13StringVisualsEhRNS_12TextProviderEib+0x17a> + 8022c9c: e774 b.n 8022b88 <_ZN8touchgfx3LCD18drawStringInternalEPtPKNS_4RectEssRS3_PKNS0_13StringVisualsEhRNS_12TextProviderEib+0x1b4> + +08022c9e <_ZN8touchgfx3LCD22WideTextInternalStruct7addWordEttt>: + 8022c9e: b530 push {r4, r5, lr} + 8022ca0: 8ac4 ldrh r4, [r0, #22] + 8022ca2: 8b45 ldrh r5, [r0, #26] + 8022ca4: 8343 strh r3, [r0, #26] + 8022ca6: 442c add r4, r5 + 8022ca8: 1ae4 subs r4, r4, r3 + 8022caa: 8b83 ldrh r3, [r0, #28] + 8022cac: 82c4 strh r4, [r0, #22] + 8022cae: 8b04 ldrh r4, [r0, #24] + 8022cb0: 4422 add r2, r4 + 8022cb2: 440c add r4, r1 + 8022cb4: 1a59 subs r1, r3, r1 + 8022cb6: 83c2 strh r2, [r0, #30] + 8022cb8: 8304 strh r4, [r0, #24] + 8022cba: 8381 strh r1, [r0, #28] + 8022cbc: bd30 pop {r4, r5, pc} + +08022cbe <_ZN8touchgfx3LCD22WideTextInternalStruct23scanStringLengthForLineEv>: + 8022cbe: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8022cc2: 4604 mov r4, r0 + 8022cc4: 8a47 ldrh r7, [r0, #18] + 8022cc6: 68c0 ldr r0, [r0, #12] + 8022cc8: b085 sub sp, #20 + 8022cca: 6803 ldr r3, [r0, #0] + 8022ccc: 6b9b ldr r3, [r3, #56] ; 0x38 + 8022cce: 4798 blx r3 + 8022cd0: f9b4 6014 ldrsh.w r6, [r4, #20] + 8022cd4: 7a63 ldrb r3, [r4, #9] + 8022cd6: eb06 0640 add.w r6, r6, r0, lsl #1 + 8022cda: 3b01 subs r3, #1 + 8022cdc: 42b7 cmp r7, r6 + 8022cde: bfac ite ge + 8022ce0: f04f 0900 movge.w r9, #0 + 8022ce4: f04f 0901 movlt.w r9, #1 + 8022ce8: 2b05 cmp r3, #5 + 8022cea: d804 bhi.n 8022cf6 <_ZN8touchgfx3LCD22WideTextInternalStruct23scanStringLengthForLineEv+0x38> + 8022cec: e8df f003 tbb [pc, r3] + 8022cf0: 470f0854 .word 0x470f0854 + 8022cf4: 4c4c .short 0x4c4c + 8022cf6: 2500 movs r5, #0 + 8022cf8: 46a9 mov r9, r5 + 8022cfa: 462e mov r6, r5 + 8022cfc: 462f mov r7, r5 + 8022cfe: e00e b.n 8022d1e <_ZN8touchgfx3LCD22WideTextInternalStruct23scanStringLengthForLineEv+0x60> + 8022d00: 42b7 cmp r7, r6 + 8022d02: f04f 0500 mov.w r5, #0 + 8022d06: bfb4 ite lt + 8022d08: 2600 movlt r6, #0 + 8022d0a: 2601 movge r6, #1 + 8022d0c: e7f6 b.n 8022cfc <_ZN8touchgfx3LCD22WideTextInternalStruct23scanStringLengthForLineEv+0x3e> + 8022d0e: 42b7 cmp r7, r6 + 8022d10: 464d mov r5, r9 + 8022d12: f04f 0900 mov.w r9, #0 + 8022d16: bfb4 ite lt + 8022d18: 2600 movlt r6, #0 + 8022d1a: 2601 movge r6, #1 + 8022d1c: 464f mov r7, r9 + 8022d1e: f04f 0800 mov.w r8, #0 + 8022d22: f8a4 8016 strh.w r8, [r4, #22] + 8022d26: f8a4 8018 strh.w r8, [r4, #24] + 8022d2a: f8cd 8004 str.w r8, [sp, #4] + 8022d2e: 2300 movs r3, #0 + 8022d30: 9303 str r3, [sp, #12] + 8022d32: 8823 ldrh r3, [r4, #0] + 8022d34: 2b20 cmp r3, #32 + 8022d36: d033 beq.n 8022da0 <_ZN8touchgfx3LCD22WideTextInternalStruct23scanStringLengthForLineEv+0xe2> + 8022d38: f242 010b movw r1, #8203 ; 0x200b + 8022d3c: 1a5a subs r2, r3, r1 + 8022d3e: f1d2 0a00 rsbs sl, r2, #0 + 8022d42: eb4a 0a02 adc.w sl, sl, r2 + 8022d46: f64f 62ff movw r2, #65279 ; 0xfeff + 8022d4a: 4293 cmp r3, r2 + 8022d4c: d008 beq.n 8022d60 <_ZN8touchgfx3LCD22WideTextInternalStruct23scanStringLengthForLineEv+0xa2> + 8022d4e: 428b cmp r3, r1 + 8022d50: 9a01 ldr r2, [sp, #4] + 8022d52: bf0e itee eq + 8022d54: f04f 0a01 moveq.w sl, #1 + 8022d58: 461a movne r2, r3 + 8022d5a: f04f 0a00 movne.w sl, #0 + 8022d5e: 9201 str r2, [sp, #4] + 8022d60: ab03 add r3, sp, #12 + 8022d62: 68e2 ldr r2, [r4, #12] + 8022d64: 7a21 ldrb r1, [r4, #8] + 8022d66: 6860 ldr r0, [r4, #4] + 8022d68: f002 fe3e bl 80259e8 <_ZN8touchgfx12TextProvider15getNextLigatureEhPKNS_4FontERPKNS_9GlyphNodeE> + 8022d6c: 8020 strh r0, [r4, #0] + 8022d6e: b9d8 cbnz r0, 8022da8 <_ZN8touchgfx3LCD22WideTextInternalStruct23scanStringLengthForLineEv+0xea> + 8022d70: 8ba2 ldrh r2, [r4, #28] + 8022d72: 2300 movs r3, #0 + 8022d74: 4611 mov r1, r2 + 8022d76: 4620 mov r0, r4 + 8022d78: f7ff ff91 bl 8022c9e <_ZN8touchgfx3LCD22WideTextInternalStruct7addWordEttt> + 8022d7c: e06e b.n 8022e5c <_ZN8touchgfx3LCD22WideTextInternalStruct23scanStringLengthForLineEv+0x19e> + 8022d7e: 2500 movs r5, #0 + 8022d80: 2701 movs r7, #1 + 8022d82: 46a9 mov r9, r5 + 8022d84: 462e mov r6, r5 + 8022d86: e7ca b.n 8022d1e <_ZN8touchgfx3LCD22WideTextInternalStruct23scanStringLengthForLineEv+0x60> + 8022d88: 42b7 cmp r7, r6 + 8022d8a: f04f 0500 mov.w r5, #0 + 8022d8e: bfb4 ite lt + 8022d90: 2700 movlt r7, #0 + 8022d92: 2701 movge r7, #1 + 8022d94: 462e mov r6, r5 + 8022d96: e7c2 b.n 8022d1e <_ZN8touchgfx3LCD22WideTextInternalStruct23scanStringLengthForLineEv+0x60> + 8022d98: 2500 movs r5, #0 + 8022d9a: 2601 movs r6, #1 + 8022d9c: 46a9 mov r9, r5 + 8022d9e: e7ad b.n 8022cfc <_ZN8touchgfx3LCD22WideTextInternalStruct23scanStringLengthForLineEv+0x3e> + 8022da0: 9301 str r3, [sp, #4] + 8022da2: f04f 0a01 mov.w sl, #1 + 8022da6: e7db b.n 8022d60 <_ZN8touchgfx3LCD22WideTextInternalStruct23scanStringLengthForLineEv+0xa2> + 8022da8: 8b63 ldrh r3, [r4, #26] + 8022daa: 280a cmp r0, #10 + 8022dac: f103 0301 add.w r3, r3, #1 + 8022db0: 8363 strh r3, [r4, #26] + 8022db2: d0dd beq.n 8022d70 <_ZN8touchgfx3LCD22WideTextInternalStruct23scanStringLengthForLineEv+0xb2> + 8022db4: 9a03 ldr r2, [sp, #12] + 8022db6: bb62 cbnz r2, 8022e12 <_ZN8touchgfx3LCD22WideTextInternalStruct23scanStringLengthForLineEv+0x154> + 8022db8: f64f 63ff movw r3, #65279 ; 0xfeff + 8022dbc: 4298 cmp r0, r3 + 8022dbe: d003 beq.n 8022dc8 <_ZN8touchgfx3LCD22WideTextInternalStruct23scanStringLengthForLineEv+0x10a> + 8022dc0: f242 030b movw r3, #8203 ; 0x200b + 8022dc4: 4298 cmp r0, r3 + 8022dc6: d1b2 bne.n 8022d2e <_ZN8touchgfx3LCD22WideTextInternalStruct23scanStringLengthForLineEv+0x70> + 8022dc8: 8823 ldrh r3, [r4, #0] + 8022dca: 8ba1 ldrh r1, [r4, #28] + 8022dcc: 2b20 cmp r3, #32 + 8022dce: d003 beq.n 8022dd8 <_ZN8touchgfx3LCD22WideTextInternalStruct23scanStringLengthForLineEv+0x11a> + 8022dd0: f242 000b movw r0, #8203 ; 0x200b + 8022dd4: 4283 cmp r3, r0 + 8022dd6: d131 bne.n 8022e3c <_ZN8touchgfx3LCD22WideTextInternalStruct23scanStringLengthForLineEv+0x17e> + 8022dd8: f1ba 0f00 cmp.w sl, #0 + 8022ddc: bf0a itet eq + 8022dde: 4688 moveq r8, r1 + 8022de0: 4650 movne r0, sl + 8022de2: 2001 moveq r0, #1 + 8022de4: 440a add r2, r1 + 8022de6: 8b23 ldrh r3, [r4, #24] + 8022de8: f8b4 c010 ldrh.w ip, [r4, #16] + 8022dec: b292 uxth r2, r2 + 8022dee: 83a2 strh r2, [r4, #28] + 8022df0: 4413 add r3, r2 + 8022df2: f1b9 0f00 cmp.w r9, #0 + 8022df6: d102 bne.n 8022dfe <_ZN8touchgfx3LCD22WideTextInternalStruct23scanStringLengthForLineEv+0x140> + 8022df8: 2d00 cmp r5, #0 + 8022dfa: d042 beq.n 8022e82 <_ZN8touchgfx3LCD22WideTextInternalStruct23scanStringLengthForLineEv+0x1c4> + 8022dfc: b300 cbz r0, 8022e40 <_ZN8touchgfx3LCD22WideTextInternalStruct23scanStringLengthForLineEv+0x182> + 8022dfe: 8c21 ldrh r1, [r4, #32] + 8022e00: 4419 add r1, r3 + 8022e02: 458c cmp ip, r1 + 8022e04: da37 bge.n 8022e76 <_ZN8touchgfx3LCD22WideTextInternalStruct23scanStringLengthForLineEv+0x1b8> + 8022e06: 8ae1 ldrh r1, [r4, #22] + 8022e08: 2900 cmp r1, #0 + 8022e0a: d034 beq.n 8022e76 <_ZN8touchgfx3LCD22WideTextInternalStruct23scanStringLengthForLineEv+0x1b8> + 8022e0c: 4563 cmp r3, ip + 8022e0e: dd8e ble.n 8022d2e <_ZN8touchgfx3LCD22WideTextInternalStruct23scanStringLengthForLineEv+0x70> + 8022e10: e01d b.n 8022e4e <_ZN8touchgfx3LCD22WideTextInternalStruct23scanStringLengthForLineEv+0x190> + 8022e12: 8893 ldrh r3, [r2, #4] + 8022e14: 9901 ldr r1, [sp, #4] + 8022e16: 8023 strh r3, [r4, #0] + 8022e18: f892 b00d ldrb.w fp, [r2, #13] + 8022e1c: ea4f 0b4b mov.w fp, fp, lsl #1 + 8022e20: f40b 7080 and.w r0, fp, #256 ; 0x100 + 8022e24: f892 b00a ldrb.w fp, [r2, #10] + 8022e28: ea4b 0b00 orr.w fp, fp, r0 + 8022e2c: 68e0 ldr r0, [r4, #12] + 8022e2e: 6803 ldr r3, [r0, #0] + 8022e30: 6c5b ldr r3, [r3, #68] ; 0x44 + 8022e32: 4798 blx r3 + 8022e34: eb0b 0200 add.w r2, fp, r0 + 8022e38: b292 uxth r2, r2 + 8022e3a: e7c5 b.n 8022dc8 <_ZN8touchgfx3LCD22WideTextInternalStruct23scanStringLengthForLineEv+0x10a> + 8022e3c: 2000 movs r0, #0 + 8022e3e: e7d1 b.n 8022de4 <_ZN8touchgfx3LCD22WideTextInternalStruct23scanStringLengthForLineEv+0x126> + 8022e40: 4563 cmp r3, ip + 8022e42: f77f af74 ble.w 8022d2e <_ZN8touchgfx3LCD22WideTextInternalStruct23scanStringLengthForLineEv+0x70> + 8022e46: 8ae3 ldrh r3, [r4, #22] + 8022e48: 2b00 cmp r3, #0 + 8022e4a: f43f af70 beq.w 8022d2e <_ZN8touchgfx3LCD22WideTextInternalStruct23scanStringLengthForLineEv+0x70> + 8022e4e: 2301 movs r3, #1 + 8022e50: 8c22 ldrh r2, [r4, #32] + 8022e52: f884 3022 strb.w r3, [r4, #34] ; 0x22 + 8022e56: 8be3 ldrh r3, [r4, #30] + 8022e58: 4413 add r3, r2 + 8022e5a: 83e3 strh r3, [r4, #30] + 8022e5c: 68e0 ldr r0, [r4, #12] + 8022e5e: 6803 ldr r3, [r0, #0] + 8022e60: 6b9b ldr r3, [r3, #56] ; 0x38 + 8022e62: 4798 blx r3 + 8022e64: f9b4 3014 ldrsh.w r3, [r4, #20] + 8022e68: 4418 add r0, r3 + 8022e6a: 8a63 ldrh r3, [r4, #18] + 8022e6c: 1a18 subs r0, r3, r0 + 8022e6e: 8260 strh r0, [r4, #18] + 8022e70: b005 add sp, #20 + 8022e72: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 8022e76: 2300 movs r3, #0 + 8022e78: 4611 mov r1, r2 + 8022e7a: 4620 mov r0, r4 + 8022e7c: f7ff ff0f bl 8022c9e <_ZN8touchgfx3LCD22WideTextInternalStruct7addWordEttt> + 8022e80: e755 b.n 8022d2e <_ZN8touchgfx3LCD22WideTextInternalStruct23scanStringLengthForLineEv+0x70> + 8022e82: 4563 cmp r3, ip + 8022e84: dd14 ble.n 8022eb0 <_ZN8touchgfx3LCD22WideTextInternalStruct23scanStringLengthForLineEv+0x1f2> + 8022e86: b117 cbz r7, 8022e8e <_ZN8touchgfx3LCD22WideTextInternalStruct23scanStringLengthForLineEv+0x1d0> + 8022e88: 2301 movs r3, #1 + 8022e8a: 460a mov r2, r1 + 8022e8c: e772 b.n 8022d74 <_ZN8touchgfx3LCD22WideTextInternalStruct23scanStringLengthForLineEv+0xb6> + 8022e8e: 2e00 cmp r6, #0 + 8022e90: f43f af4d beq.w 8022d2e <_ZN8touchgfx3LCD22WideTextInternalStruct23scanStringLengthForLineEv+0x70> + 8022e94: 2800 cmp r0, #0 + 8022e96: f47f af4a bne.w 8022d2e <_ZN8touchgfx3LCD22WideTextInternalStruct23scanStringLengthForLineEv+0x70> + 8022e9a: f1ba 0f00 cmp.w sl, #0 + 8022e9e: d002 beq.n 8022ea6 <_ZN8touchgfx3LCD22WideTextInternalStruct23scanStringLengthForLineEv+0x1e8> + 8022ea0: 2301 movs r3, #1 + 8022ea2: 4642 mov r2, r8 + 8022ea4: e767 b.n 8022d76 <_ZN8touchgfx3LCD22WideTextInternalStruct23scanStringLengthForLineEv+0xb8> + 8022ea6: 8ae3 ldrh r3, [r4, #22] + 8022ea8: 2b00 cmp r3, #0 + 8022eaa: f43f af40 beq.w 8022d2e <_ZN8touchgfx3LCD22WideTextInternalStruct23scanStringLengthForLineEv+0x70> + 8022eae: e7d5 b.n 8022e5c <_ZN8touchgfx3LCD22WideTextInternalStruct23scanStringLengthForLineEv+0x19e> + 8022eb0: 2800 cmp r0, #0 + 8022eb2: f47f af3c bne.w 8022d2e <_ZN8touchgfx3LCD22WideTextInternalStruct23scanStringLengthForLineEv+0x70> + 8022eb6: f1ba 0f00 cmp.w sl, #0 + 8022eba: f43f af38 beq.w 8022d2e <_ZN8touchgfx3LCD22WideTextInternalStruct23scanStringLengthForLineEv+0x70> + 8022ebe: 2301 movs r3, #1 + 8022ec0: 4642 mov r2, r8 + 8022ec2: e7da b.n 8022e7a <_ZN8touchgfx3LCD22WideTextInternalStruct23scanStringLengthForLineEv+0x1bc> + +08022ec4 <_ZN8touchgfx3LCD11getNumLinesERNS_12TextProviderENS_14WideTextActionEhPKNS_4FontEs>: + 8022ec4: b5f0 push {r4, r5, r6, r7, lr} + 8022ec6: 4605 mov r5, r0 + 8022ec8: b08f sub sp, #60 ; 0x3c + 8022eca: 4617 mov r7, r2 + 8022ecc: 461c mov r4, r3 + 8022ece: 460e mov r6, r1 + 8022ed0: b1d1 cbz r1, 8022f08 <_ZN8touchgfx3LCD11getNumLinesERNS_12TextProviderENS_14WideTextActionEhPKNS_4FontEs+0x44> + 8022ed2: 681b ldr r3, [r3, #0] + 8022ed4: 4620 mov r0, r4 + 8022ed6: 6b9b ldr r3, [r3, #56] ; 0x38 + 8022ed8: 4798 blx r3 + 8022eda: 4240 negs r0, r0 + 8022edc: 9603 str r6, [sp, #12] + 8022ede: f64f 73ff movw r3, #65535 ; 0xffff + 8022ee2: b200 sxth r0, r0 + 8022ee4: 9700 str r7, [sp, #0] + 8022ee6: f8bd 2050 ldrh.w r2, [sp, #80] ; 0x50 + 8022eea: 4629 mov r1, r5 + 8022eec: e9cd 4001 strd r4, r0, [sp, #4] + 8022ef0: 2401 movs r4, #1 + 8022ef2: a805 add r0, sp, #20 + 8022ef4: f7ff fcbe bl 8022874 <_ZN8touchgfx3LCD22WideTextInternalStructC1ERNS_12TextProviderEtthPKNS_4FontEsNS_14WideTextActionE> + 8022ef8: a805 add r0, sp, #20 + 8022efa: f7ff fee0 bl 8022cbe <_ZN8touchgfx3LCD22WideTextInternalStruct23scanStringLengthForLineEv> + 8022efe: f8bd 3014 ldrh.w r3, [sp, #20] + 8022f02: b163 cbz r3, 8022f1e <_ZN8touchgfx3LCD11getNumLinesERNS_12TextProviderENS_14WideTextActionEhPKNS_4FontEs+0x5a> + 8022f04: 3401 adds r4, #1 + 8022f06: e7f7 b.n 8022ef8 <_ZN8touchgfx3LCD11getNumLinesERNS_12TextProviderENS_14WideTextActionEhPKNS_4FontEs+0x34> + 8022f08: 2401 movs r4, #1 + 8022f0a: f002 fe39 bl 8025b80 <_ZN8touchgfx12TextProvider11getNextCharEv> + 8022f0e: 280a cmp r0, #10 + 8022f10: 4628 mov r0, r5 + 8022f12: bf08 it eq + 8022f14: 3401 addeq r4, #1 + 8022f16: f002 fe33 bl 8025b80 <_ZN8touchgfx12TextProvider11getNextCharEv> + 8022f1a: 2800 cmp r0, #0 + 8022f1c: d1f7 bne.n 8022f0e <_ZN8touchgfx3LCD11getNumLinesERNS_12TextProviderENS_14WideTextActionEhPKNS_4FontEs+0x4a> + 8022f1e: b2a0 uxth r0, r4 + 8022f20: b00f add sp, #60 ; 0x3c + 8022f22: bdf0 pop {r4, r5, r6, r7, pc} + +08022f24 <_ZN8touchgfx3LCD13drawStringLTRERKNS_4RectES3_RKNS0_13StringVisualsEPKtSt9__va_list>: + 8022f24: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8022f28: b0e3 sub sp, #396 ; 0x18c + 8022f2a: 461c mov r4, r3 + 8022f2c: 4683 mov fp, r0 + 8022f2e: 4688 mov r8, r1 + 8022f30: 9b6c ldr r3, [sp, #432] ; 0x1b0 + 8022f32: 2b00 cmp r3, #0 + 8022f34: f000 8112 beq.w 802315c <_ZN8touchgfx3LCD13drawStringLTRERKNS_4RectES3_RKNS0_13StringVisualsEPKtSt9__va_list+0x238> + 8022f38: 6823 ldr r3, [r4, #0] + 8022f3a: 2b00 cmp r3, #0 + 8022f3c: f000 810e beq.w 802315c <_ZN8touchgfx3LCD13drawStringLTRERKNS_4RectES3_RKNS0_13StringVisualsEPKtSt9__va_list+0x238> + 8022f40: 7ba3 ldrb r3, [r4, #14] + 8022f42: 2b00 cmp r3, #0 + 8022f44: f000 810a beq.w 802315c <_ZN8touchgfx3LCD13drawStringLTRERKNS_4RectES3_RKNS0_13StringVisualsEPKtSt9__va_list+0x238> + 8022f48: ad0a add r5, sp, #40 ; 0x28 + 8022f4a: 6810 ldr r0, [r2, #0] + 8022f4c: 6851 ldr r1, [r2, #4] + 8022f4e: 462b mov r3, r5 + 8022f50: f9b8 2004 ldrsh.w r2, [r8, #4] + 8022f54: c303 stmia r3!, {r0, r1} + 8022f56: 2100 movs r1, #0 + 8022f58: f9b8 3006 ldrsh.w r3, [r8, #6] + 8022f5c: f8ad 2034 strh.w r2, [sp, #52] ; 0x34 + 8022f60: 4628 mov r0, r5 + 8022f62: 910c str r1, [sp, #48] ; 0x30 + 8022f64: a90c add r1, sp, #48 ; 0x30 + 8022f66: 79a2 ldrb r2, [r4, #6] + 8022f68: f8ad 3036 strh.w r3, [sp, #54] ; 0x36 + 8022f6c: f7ff fd01 bl 8022972 <_ZN8touchgfx3LCD10rotateRectERNS_4RectERKS1_NS_12TextRotationE> + 8022f70: a90c add r1, sp, #48 ; 0x30 + 8022f72: 79a2 ldrb r2, [r4, #6] + 8022f74: 4608 mov r0, r1 + 8022f76: f7ff fcfc bl 8022972 <_ZN8touchgfx3LCD10rotateRectERNS_4RectERKS1_NS_12TextRotationE> + 8022f7a: a817 add r0, sp, #92 ; 0x5c + 8022f7c: f002 f9d4 bl 8025328 <_ZN8touchgfx12TextProviderC1Ev> + 8022f80: 6820 ldr r0, [r4, #0] + 8022f82: 6803 ldr r3, [r0, #0] + 8022f84: 6cdb ldr r3, [r3, #76] ; 0x4c + 8022f86: 4798 blx r3 + 8022f88: 4606 mov r6, r0 + 8022f8a: 6820 ldr r0, [r4, #0] + 8022f8c: 6803 ldr r3, [r0, #0] + 8022f8e: 6d1b ldr r3, [r3, #80] ; 0x50 + 8022f90: 4798 blx r3 + 8022f92: 4633 mov r3, r6 + 8022f94: 9a6d ldr r2, [sp, #436] ; 0x1b4 + 8022f96: 996c ldr r1, [sp, #432] ; 0x1b0 + 8022f98: 9000 str r0, [sp, #0] + 8022f9a: a817 add r0, sp, #92 ; 0x5c + 8022f9c: f002 fa1f bl 80253de <_ZN8touchgfx12TextProvider10initializeEPKtSt9__va_listS2_PKNS_24FontContextualFormsTableE> + 8022fa0: 6820 ldr r0, [r4, #0] + 8022fa2: f894 a004 ldrb.w sl, [r4, #4] + 8022fa6: 6803 ldr r3, [r0, #0] + 8022fa8: 6b9b ldr r3, [r3, #56] ; 0x38 + 8022faa: 4798 blx r3 + 8022fac: f9b4 600c ldrsh.w r6, [r4, #12] + 8022fb0: 6823 ldr r3, [r4, #0] + 8022fb2: 4607 mov r7, r0 + 8022fb4: 4406 add r6, r0 + 8022fb6: a830 add r0, sp, #192 ; 0xc0 + 8022fb8: f893 9009 ldrb.w r9, [r3, #9] + 8022fbc: f002 f9b4 bl 8025328 <_ZN8touchgfx12TextProviderC1Ev> + 8022fc0: 7c23 ldrb r3, [r4, #16] + 8022fc2: b17b cbz r3, 8022fe4 <_ZN8touchgfx3LCD13drawStringLTRERKNS_4RectES3_RKNS0_13StringVisualsEPKtSt9__va_list+0xc0> + 8022fc4: 6820 ldr r0, [r4, #0] + 8022fc6: 6803 ldr r3, [r0, #0] + 8022fc8: 6cdb ldr r3, [r3, #76] ; 0x4c + 8022fca: 4798 blx r3 + 8022fcc: 9009 str r0, [sp, #36] ; 0x24 + 8022fce: 6820 ldr r0, [r4, #0] + 8022fd0: 6802 ldr r2, [r0, #0] + 8022fd2: 6d12 ldr r2, [r2, #80] ; 0x50 + 8022fd4: 4790 blx r2 + 8022fd6: 9b09 ldr r3, [sp, #36] ; 0x24 + 8022fd8: 9000 str r0, [sp, #0] + 8022fda: a830 add r0, sp, #192 ; 0xc0 + 8022fdc: 9a6d ldr r2, [sp, #436] ; 0x1b4 + 8022fde: 996c ldr r1, [sp, #432] ; 0x1b0 + 8022fe0: f002 f9fd bl 80253de <_ZN8touchgfx12TextProvider10initializeEPKtSt9__va_listS2_PKNS_24FontContextualFormsTableE> + 8022fe4: f8bd 1034 ldrh.w r1, [sp, #52] ; 0x34 + 8022fe8: a80e add r0, sp, #56 ; 0x38 + 8022fea: 7be2 ldrb r2, [r4, #15] + 8022fec: f8bd 3036 ldrh.w r3, [sp, #54] ; 0x36 + 8022ff0: 1a8a subs r2, r1, r2 + 8022ff2: 7c21 ldrb r1, [r4, #16] + 8022ff4: 9103 str r1, [sp, #12] + 8022ff6: b292 uxth r2, r2 + 8022ff8: f9b4 100c ldrsh.w r1, [r4, #12] + 8022ffc: 9102 str r1, [sp, #8] + 8022ffe: 6821 ldr r1, [r4, #0] + 8023000: 9101 str r1, [sp, #4] + 8023002: 7961 ldrb r1, [r4, #5] + 8023004: 9100 str r1, [sp, #0] + 8023006: a930 add r1, sp, #192 ; 0xc0 + 8023008: f7ff fc34 bl 8022874 <_ZN8touchgfx3LCD22WideTextInternalStructC1ERNS_12TextProviderEtthPKNS_4FontEsNS_14WideTextActionE> + 802300c: 2e00 cmp r6, #0 + 802300e: dc5b bgt.n 80230c8 <_ZN8touchgfx3LCD13drawStringLTRERKNS_4RectES3_RKNS0_13StringVisualsEPKtSt9__va_list+0x1a4> + 8023010: af17 add r7, sp, #92 ; 0x5c + 8023012: f04f 0900 mov.w r9, #0 + 8023016: 7c23 ldrb r3, [r4, #16] + 8023018: 2b00 cmp r3, #0 + 802301a: f000 80b1 beq.w 8023180 <_ZN8touchgfx3LCD13drawStringLTRERKNS_4RectES3_RKNS0_13StringVisualsEPKtSt9__va_list+0x25c> + 802301e: a80e add r0, sp, #56 ; 0x38 + 8023020: f7ff fe4d bl 8022cbe <_ZN8touchgfx3LCD22WideTextInternalStruct23scanStringLengthForLineEv> + 8023024: f1ba 0f00 cmp.w sl, #0 + 8023028: f000 80a5 beq.w 8023176 <_ZN8touchgfx3LCD13drawStringLTRERKNS_4RectES3_RKNS0_13StringVisualsEPKtSt9__va_list+0x252> + 802302c: 7c23 ldrb r3, [r4, #16] + 802302e: 2264 movs r2, #100 ; 0x64 + 8023030: 4639 mov r1, r7 + 8023032: a849 add r0, sp, #292 ; 0x124 + 8023034: 9309 str r3, [sp, #36] ; 0x24 + 8023036: f011 fd9c bl 8034b72 + 802303a: 9b09 ldr r3, [sp, #36] ; 0x24 + 802303c: 2b00 cmp r3, #0 + 802303e: f000 80a7 beq.w 8023190 <_ZN8touchgfx3LCD13drawStringLTRERKNS_4RectES3_RKNS0_13StringVisualsEPKtSt9__va_list+0x26c> + 8023042: f9bd 3056 ldrsh.w r3, [sp, #86] ; 0x56 + 8023046: 7922 ldrb r2, [r4, #4] + 8023048: 2a01 cmp r2, #1 + 802304a: f040 808a bne.w 8023162 <_ZN8touchgfx3LCD13drawStringLTRERKNS_4RectES3_RKNS0_13StringVisualsEPKtSt9__va_list+0x23e> + 802304e: f9bd 0034 ldrsh.w r0, [sp, #52] ; 0x34 + 8023052: 1ac0 subs r0, r0, r3 + 8023054: 2302 movs r3, #2 + 8023056: fb90 f0f3 sdiv r0, r0, r3 + 802305a: b200 sxth r0, r0 + 802305c: 7c23 ldrb r3, [r4, #16] + 802305e: 2b00 cmp r3, #0 + 8023060: f000 808b beq.w 802317a <_ZN8touchgfx3LCD13drawStringLTRERKNS_4RectES3_RKNS0_13StringVisualsEPKtSt9__va_list+0x256> + 8023064: f8bd 204e ldrh.w r2, [sp, #78] ; 0x4e + 8023068: f89d 105a ldrb.w r1, [sp, #90] ; 0x5a + 802306c: f9bd 3032 ldrsh.w r3, [sp, #50] ; 0x32 + 8023070: e9cd 2105 strd r2, r1, [sp, #20] + 8023074: f8bd 2030 ldrh.w r2, [sp, #48] ; 0x30 + 8023078: 2100 movs r1, #0 + 802307a: 4410 add r0, r2 + 802307c: 4642 mov r2, r8 + 802307e: b200 sxth r0, r0 + 8023080: e9cd 9703 strd r9, r7, [sp, #12] + 8023084: 9000 str r0, [sp, #0] + 8023086: 4658 mov r0, fp + 8023088: e9cd 5401 strd r5, r4, [sp, #4] + 802308c: f7ff fca2 bl 80229d4 <_ZN8touchgfx3LCD18drawStringInternalEPtPKNS_4RectEssRS3_PKNS0_13StringVisualsEhRNS_12TextProviderEib> + 8023090: 2800 cmp r0, #0 + 8023092: d163 bne.n 802315c <_ZN8touchgfx3LCD13drawStringLTRERKNS_4RectES3_RKNS0_13StringVisualsEPKtSt9__va_list+0x238> + 8023094: b2b2 uxth r2, r6 + 8023096: f8bd 3032 ldrh.w r3, [sp, #50] ; 0x32 + 802309a: f8bd 1036 ldrh.w r1, [sp, #54] ; 0x36 + 802309e: 4413 add r3, r2 + 80230a0: 1a8a subs r2, r1, r2 + 80230a2: b21b sxth r3, r3 + 80230a4: f8ad 2036 strh.w r2, [sp, #54] ; 0x36 + 80230a8: f89d 205a ldrb.w r2, [sp, #90] ; 0x5a + 80230ac: f8ad 3032 strh.w r3, [sp, #50] ; 0x32 + 80230b0: 2a00 cmp r2, #0 + 80230b2: d153 bne.n 802315c <_ZN8touchgfx3LCD13drawStringLTRERKNS_4RectES3_RKNS0_13StringVisualsEPKtSt9__va_list+0x238> + 80230b4: 6822 ldr r2, [r4, #0] + 80230b6: 8869 ldrh r1, [r5, #2] + 80230b8: 7a12 ldrb r2, [r2, #8] + 80230ba: 1a9b subs r3, r3, r2 + 80230bc: 88ea ldrh r2, [r5, #6] + 80230be: 440a add r2, r1 + 80230c0: b212 sxth r2, r2 + 80230c2: 4293 cmp r3, r2 + 80230c4: dda7 ble.n 8023016 <_ZN8touchgfx3LCD13drawStringLTRERKNS_4RectES3_RKNS0_13StringVisualsEPKtSt9__va_list+0xf2> + 80230c6: e049 b.n 802315c <_ZN8touchgfx3LCD13drawStringLTRERKNS_4RectES3_RKNS0_13StringVisualsEPKtSt9__va_list+0x238> + 80230c8: 7c23 ldrb r3, [r4, #16] + 80230ca: 444f add r7, r9 + 80230cc: b1c3 cbz r3, 8023100 <_ZN8touchgfx3LCD13drawStringLTRERKNS_4RectES3_RKNS0_13StringVisualsEPKtSt9__va_list+0x1dc> + 80230ce: f64f 79ff movw r9, #65535 ; 0xffff + 80230d2: f9bd 3032 ldrsh.w r3, [sp, #50] ; 0x32 + 80230d6: f9b5 2002 ldrsh.w r2, [r5, #2] + 80230da: 443b add r3, r7 + 80230dc: 4293 cmp r3, r2 + 80230de: da97 bge.n 8023010 <_ZN8touchgfx3LCD13drawStringLTRERKNS_4RectES3_RKNS0_13StringVisualsEPKtSt9__va_list+0xec> + 80230e0: a80e add r0, sp, #56 ; 0x38 + 80230e2: f7ff fdec bl 8022cbe <_ZN8touchgfx3LCD22WideTextInternalStruct23scanStringLengthForLineEv> + 80230e6: f8bd 304e ldrh.w r3, [sp, #78] ; 0x4e + 80230ea: 3b01 subs r3, #1 + 80230ec: b29b uxth r3, r3 + 80230ee: 454b cmp r3, r9 + 80230f0: 9309 str r3, [sp, #36] ; 0x24 + 80230f2: d021 beq.n 8023138 <_ZN8touchgfx3LCD13drawStringLTRERKNS_4RectES3_RKNS0_13StringVisualsEPKtSt9__va_list+0x214> + 80230f4: 7961 ldrb r1, [r4, #5] + 80230f6: a817 add r0, sp, #92 ; 0x5c + 80230f8: f7e1 fda4 bl 8004c44 <_ZN8touchgfx12TextProvider15getNextLigatureEh> + 80230fc: 9b09 ldr r3, [sp, #36] ; 0x24 + 80230fe: e7f4 b.n 80230ea <_ZN8touchgfx3LCD13drawStringLTRERKNS_4RectES3_RKNS0_13StringVisualsEPKtSt9__va_list+0x1c6> + 8023100: fa1f f986 uxth.w r9, r6 + 8023104: f9bd 3032 ldrsh.w r3, [sp, #50] ; 0x32 + 8023108: f9b5 2002 ldrsh.w r2, [r5, #2] + 802310c: 443b add r3, r7 + 802310e: 4293 cmp r3, r2 + 8023110: f6bf af7e bge.w 8023010 <_ZN8touchgfx3LCD13drawStringLTRERKNS_4RectES3_RKNS0_13StringVisualsEPKtSt9__va_list+0xec> + 8023114: a817 add r0, sp, #92 ; 0x5c + 8023116: f002 fd33 bl 8025b80 <_ZN8touchgfx12TextProvider11getNextCharEv> + 802311a: b1f8 cbz r0, 802315c <_ZN8touchgfx3LCD13drawStringLTRERKNS_4RectES3_RKNS0_13StringVisualsEPKtSt9__va_list+0x238> + 802311c: 280a cmp r0, #10 + 802311e: d1f1 bne.n 8023104 <_ZN8touchgfx3LCD13drawStringLTRERKNS_4RectES3_RKNS0_13StringVisualsEPKtSt9__va_list+0x1e0> + 8023120: f8bd 3032 ldrh.w r3, [sp, #50] ; 0x32 + 8023124: 444b add r3, r9 + 8023126: f8ad 3032 strh.w r3, [sp, #50] ; 0x32 + 802312a: f8bd 3036 ldrh.w r3, [sp, #54] ; 0x36 + 802312e: eba3 0309 sub.w r3, r3, r9 + 8023132: f8ad 3036 strh.w r3, [sp, #54] ; 0x36 + 8023136: e7e5 b.n 8023104 <_ZN8touchgfx3LCD13drawStringLTRERKNS_4RectES3_RKNS0_13StringVisualsEPKtSt9__va_list+0x1e0> + 8023138: b2b3 uxth r3, r6 + 802313a: f8bd 2032 ldrh.w r2, [sp, #50] ; 0x32 + 802313e: 441a add r2, r3 + 8023140: f8ad 2032 strh.w r2, [sp, #50] ; 0x32 + 8023144: f8bd 2036 ldrh.w r2, [sp, #54] ; 0x36 + 8023148: 1ad3 subs r3, r2, r3 + 802314a: f8ad 3036 strh.w r3, [sp, #54] ; 0x36 + 802314e: f8bd 3038 ldrh.w r3, [sp, #56] ; 0x38 + 8023152: b11b cbz r3, 802315c <_ZN8touchgfx3LCD13drawStringLTRERKNS_4RectES3_RKNS0_13StringVisualsEPKtSt9__va_list+0x238> + 8023154: f89d 305a ldrb.w r3, [sp, #90] ; 0x5a + 8023158: 2b00 cmp r3, #0 + 802315a: d0ba beq.n 80230d2 <_ZN8touchgfx3LCD13drawStringLTRERKNS_4RectES3_RKNS0_13StringVisualsEPKtSt9__va_list+0x1ae> + 802315c: b063 add sp, #396 ; 0x18c + 802315e: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 8023162: 2a02 cmp r2, #2 + 8023164: d105 bne.n 8023172 <_ZN8touchgfx3LCD13drawStringLTRERKNS_4RectES3_RKNS0_13StringVisualsEPKtSt9__va_list+0x24e> + 8023166: 7be2 ldrb r2, [r4, #15] + 8023168: f8bd 0034 ldrh.w r0, [sp, #52] ; 0x34 + 802316c: 1a80 subs r0, r0, r2 + 802316e: 1ac0 subs r0, r0, r3 + 8023170: e773 b.n 802305a <_ZN8touchgfx3LCD13drawStringLTRERKNS_4RectES3_RKNS0_13StringVisualsEPKtSt9__va_list+0x136> + 8023172: 2000 movs r0, #0 + 8023174: e772 b.n 802305c <_ZN8touchgfx3LCD13drawStringLTRERKNS_4RectES3_RKNS0_13StringVisualsEPKtSt9__va_list+0x138> + 8023176: 7be0 ldrb r0, [r4, #15] + 8023178: e770 b.n 802305c <_ZN8touchgfx3LCD13drawStringLTRERKNS_4RectES3_RKNS0_13StringVisualsEPKtSt9__va_list+0x138> + 802317a: f647 72ff movw r2, #32767 ; 0x7fff + 802317e: e773 b.n 8023068 <_ZN8touchgfx3LCD13drawStringLTRERKNS_4RectES3_RKNS0_13StringVisualsEPKtSt9__va_list+0x144> + 8023180: f1ba 0f00 cmp.w sl, #0 + 8023184: d0f7 beq.n 8023176 <_ZN8touchgfx3LCD13drawStringLTRERKNS_4RectES3_RKNS0_13StringVisualsEPKtSt9__va_list+0x252> + 8023186: 2264 movs r2, #100 ; 0x64 + 8023188: 4639 mov r1, r7 + 802318a: a849 add r0, sp, #292 ; 0x124 + 802318c: f011 fcf1 bl 8034b72 + 8023190: 2300 movs r3, #0 + 8023192: f647 72ff movw r2, #32767 ; 0x7fff + 8023196: 6821 ldr r1, [r4, #0] + 8023198: a849 add r0, sp, #292 ; 0x124 + 802319a: f7ff fbae bl 80228fa <_ZN8touchgfx3LCD11stringWidthERNS_12TextProviderERKNS_4FontEih> + 802319e: b203 sxth r3, r0 + 80231a0: e751 b.n 8023046 <_ZN8touchgfx3LCD13drawStringLTRERKNS_4RectES3_RKNS0_13StringVisualsEPKtSt9__va_list+0x122> + +080231a2 <_ZN8touchgfx3LCD5realXERKNS_4RectEssNS_12TextRotationE>: + 80231a2: 2b03 cmp r3, #3 + 80231a4: d818 bhi.n 80231d8 <_ZN8touchgfx3LCD5realXERKNS_4RectEssNS_12TextRotationE+0x36> + 80231a6: e8df f003 tbb [pc, r3] + 80231aa: 0602 .short 0x0602 + 80231ac: 130d .short 0x130d + 80231ae: f9b0 2000 ldrsh.w r2, [r0] + 80231b2: 1850 adds r0, r2, r1 + 80231b4: 4770 bx lr + 80231b6: 8803 ldrh r3, [r0, #0] + 80231b8: 8880 ldrh r0, [r0, #4] + 80231ba: 4418 add r0, r3 + 80231bc: b200 sxth r0, r0 + 80231be: 1a80 subs r0, r0, r2 + 80231c0: 3801 subs r0, #1 + 80231c2: 4770 bx lr + 80231c4: 8803 ldrh r3, [r0, #0] + 80231c6: 8880 ldrh r0, [r0, #4] + 80231c8: 4418 add r0, r3 + 80231ca: b200 sxth r0, r0 + 80231cc: 1a40 subs r0, r0, r1 + 80231ce: e7f7 b.n 80231c0 <_ZN8touchgfx3LCD5realXERKNS_4RectEssNS_12TextRotationE+0x1e> + 80231d0: f9b0 0000 ldrsh.w r0, [r0] + 80231d4: 4410 add r0, r2 + 80231d6: 4770 bx lr + 80231d8: 2000 movs r0, #0 + 80231da: 4770 bx lr + +080231dc <_ZN8touchgfx3LCD5realYERKNS_4RectEssNS_12TextRotationE>: + 80231dc: 2b03 cmp r3, #3 + 80231de: d817 bhi.n 8023210 <_ZN8touchgfx3LCD5realYERKNS_4RectEssNS_12TextRotationE+0x34> + 80231e0: e8df f003 tbb [pc, r3] + 80231e4: 10090602 .word 0x10090602 + 80231e8: f9b0 1002 ldrsh.w r1, [r0, #2] + 80231ec: 1850 adds r0, r2, r1 + 80231ee: 4770 bx lr + 80231f0: f9b0 2002 ldrsh.w r2, [r0, #2] + 80231f4: e7fa b.n 80231ec <_ZN8touchgfx3LCD5realYERKNS_4RectEssNS_12TextRotationE+0x10> + 80231f6: 8843 ldrh r3, [r0, #2] + 80231f8: 88c0 ldrh r0, [r0, #6] + 80231fa: 4418 add r0, r3 + 80231fc: b200 sxth r0, r0 + 80231fe: 1a80 subs r0, r0, r2 + 8023200: 3801 subs r0, #1 + 8023202: 4770 bx lr + 8023204: 8843 ldrh r3, [r0, #2] + 8023206: 88c0 ldrh r0, [r0, #6] + 8023208: 4418 add r0, r3 + 802320a: b200 sxth r0, r0 + 802320c: 1a40 subs r0, r0, r1 + 802320e: e7f7 b.n 8023200 <_ZN8touchgfx3LCD5realYERKNS_4RectEssNS_12TextRotationE+0x24> + 8023210: 2000 movs r0, #0 + 8023212: 4770 bx lr + +08023214 <_GLOBAL__sub_I__ZN8touchgfx3LCD12defaultColorE>: + 8023214: 4b01 ldr r3, [pc, #4] ; (802321c <_GLOBAL__sub_I__ZN8touchgfx3LCD12defaultColorE+0x8>) + 8023216: 2200 movs r2, #0 + 8023218: 601a str r2, [r3, #0] + 802321a: 4770 bx lr + 802321c: 2001e73c .word 0x2001e73c + +08023220 <_ZN8touchgfx16TouchCalibration4clzuEm>: + 8023220: 4603 mov r3, r0 + 8023222: b1c8 cbz r0, 8023258 <_ZN8touchgfx16TouchCalibration4clzuEm+0x38> + 8023224: 0c02 lsrs r2, r0, #16 + 8023226: 0412 lsls r2, r2, #16 + 8023228: b9a2 cbnz r2, 8023254 <_ZN8touchgfx16TouchCalibration4clzuEm+0x34> + 802322a: 0403 lsls r3, r0, #16 + 802322c: 2010 movs r0, #16 + 802322e: f013 4f7f tst.w r3, #4278190080 ; 0xff000000 + 8023232: bf04 itt eq + 8023234: 021b lsleq r3, r3, #8 + 8023236: 3008 addeq r0, #8 + 8023238: f013 4f70 tst.w r3, #4026531840 ; 0xf0000000 + 802323c: bf04 itt eq + 802323e: 011b lsleq r3, r3, #4 + 8023240: 3004 addeq r0, #4 + 8023242: f013 4f40 tst.w r3, #3221225472 ; 0xc0000000 + 8023246: bf04 itt eq + 8023248: 009b lsleq r3, r3, #2 + 802324a: 3002 addeq r0, #2 + 802324c: 2b00 cmp r3, #0 + 802324e: db04 blt.n 802325a <_ZN8touchgfx16TouchCalibration4clzuEm+0x3a> + 8023250: 3001 adds r0, #1 + 8023252: 4770 bx lr + 8023254: 2000 movs r0, #0 + 8023256: e7ea b.n 802322e <_ZN8touchgfx16TouchCalibration4clzuEm+0xe> + 8023258: 2020 movs r0, #32 + 802325a: 4770 bx lr + +0802325c <_ZN8touchgfx16TouchCalibration7muldivuEmmmmmRm>: + 802325c: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8023260: b087 sub sp, #28 + 8023262: 460d mov r5, r1 + 8023264: 4616 mov r6, r2 + 8023266: 4698 mov r8, r3 + 8023268: 4601 mov r1, r0 + 802326a: e9dd 4710 ldrd r4, r7, [sp, #64] ; 0x40 + 802326e: b120 cbz r0, 802327a <_ZN8touchgfx16TouchCalibration7muldivuEmmmmmRm+0x1e> + 8023270: b11a cbz r2, 802327a <_ZN8touchgfx16TouchCalibration7muldivuEmmmmmRm+0x1e> + 8023272: 2d1f cmp r5, #31 + 8023274: d801 bhi.n 802327a <_ZN8touchgfx16TouchCalibration7muldivuEmmmmmRm+0x1e> + 8023276: 2b1f cmp r3, #31 + 8023278: d904 bls.n 8023284 <_ZN8touchgfx16TouchCalibration7muldivuEmmmmmRm+0x28> + 802327a: 2000 movs r0, #0 + 802327c: 6038 str r0, [r7, #0] + 802327e: b007 add sp, #28 + 8023280: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 8023284: b97d cbnz r5, 80232a6 <_ZN8touchgfx16TouchCalibration7muldivuEmmmmmRm+0x4a> + 8023286: b143 cbz r3, 802329a <_ZN8touchgfx16TouchCalibration7muldivuEmmmmmRm+0x3e> + 8023288: 4602 mov r2, r0 + 802328a: 462b mov r3, r5 + 802328c: 4641 mov r1, r8 + 802328e: 4630 mov r0, r6 + 8023290: e9cd 4700 strd r4, r7, [sp] + 8023294: f7ff ffe2 bl 802325c <_ZN8touchgfx16TouchCalibration7muldivuEmmmmmRm> + 8023298: e7f1 b.n 802327e <_ZN8touchgfx16TouchCalibration7muldivuEmmmmmRm+0x22> + 802329a: f04f 33ff mov.w r3, #4294967295 + 802329e: f06f 4000 mvn.w r0, #2147483648 ; 0x80000000 + 80232a2: 603b str r3, [r7, #0] + 80232a4: e7eb b.n 802327e <_ZN8touchgfx16TouchCalibration7muldivuEmmmmmRm+0x22> + 80232a6: fa32 fa05 lsrs.w sl, r2, r5 + 80232aa: d106 bne.n 80232ba <_ZN8touchgfx16TouchCalibration7muldivuEmmmmmRm+0x5e> + 80232ac: 4346 muls r6, r0 + 80232ae: fbb6 f0f4 udiv r0, r6, r4 + 80232b2: fb04 6610 mls r6, r4, r0, r6 + 80232b6: 603e str r6, [r7, #0] + 80232b8: e7e1 b.n 802327e <_ZN8touchgfx16TouchCalibration7muldivuEmmmmmRm+0x22> + 80232ba: 2201 movs r2, #1 + 80232bc: fa00 fb05 lsl.w fp, r0, r5 + 80232c0: 40aa lsls r2, r5 + 80232c2: fbbb f9f4 udiv r9, fp, r4 + 80232c6: 3a01 subs r2, #1 + 80232c8: fb0a f309 mul.w r3, sl, r9 + 80232cc: fb04 b919 mls r9, r4, r9, fp + 80232d0: 4016 ands r6, r2 + 80232d2: 9303 str r3, [sp, #12] + 80232d4: 4630 mov r0, r6 + 80232d6: f7ff ffa3 bl 8023220 <_ZN8touchgfx16TouchCalibration4clzuEm> + 80232da: 462b mov r3, r5 + 80232dc: 460a mov r2, r1 + 80232de: 4601 mov r1, r0 + 80232e0: 4630 mov r0, r6 + 80232e2: e9cd 4700 strd r4, r7, [sp] + 80232e6: f7ff ffb9 bl 802325c <_ZN8touchgfx16TouchCalibration7muldivuEmmmmmRm> + 80232ea: 4606 mov r6, r0 + 80232ec: 4648 mov r0, r9 + 80232ee: eb05 0108 add.w r1, r5, r8 + 80232f2: f7ff ff95 bl 8023220 <_ZN8touchgfx16TouchCalibration4clzuEm> + 80232f6: ab05 add r3, sp, #20 + 80232f8: 464a mov r2, r9 + 80232fa: e9cd 4300 strd r4, r3, [sp] + 80232fe: 4603 mov r3, r0 + 8023300: 4650 mov r0, sl + 8023302: f7ff ffab bl 802325c <_ZN8touchgfx16TouchCalibration7muldivuEmmmmmRm> + 8023306: 6839 ldr r1, [r7, #0] + 8023308: 9a05 ldr r2, [sp, #20] + 802330a: 9b03 ldr r3, [sp, #12] + 802330c: 4411 add r1, r2 + 802330e: fbb1 f2f4 udiv r2, r1, r4 + 8023312: 18d3 adds r3, r2, r3 + 8023314: fb04 1412 mls r4, r4, r2, r1 + 8023318: 441e add r6, r3 + 802331a: 603c str r4, [r7, #0] + 802331c: 4430 add r0, r6 + 802331e: e7ae b.n 802327e <_ZN8touchgfx16TouchCalibration7muldivuEmmmmmRm+0x22> + +08023320 <_ZN8touchgfx16TouchCalibration6muldivEllllRl>: + 8023320: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} + 8023324: b085 sub sp, #20 + 8023326: f1b0 0900 subs.w r9, r0, #0 + 802332a: 461d mov r5, r3 + 802332c: 4617 mov r7, r2 + 802332e: 9c0c ldr r4, [sp, #48] ; 0x30 + 8023330: bfbb ittet lt + 8023332: f1c9 0900 rsblt r9, r9, #0 + 8023336: f04f 36ff movlt.w r6, #4294967295 + 802333a: 2601 movge r6, #1 + 802333c: 6823 ldrlt r3, [r4, #0] + 802333e: bfbc itt lt + 8023340: 425b neglt r3, r3 + 8023342: 6023 strlt r3, [r4, #0] + 8023344: 2a00 cmp r2, #0 + 8023346: da04 bge.n 8023352 <_ZN8touchgfx16TouchCalibration6muldivEllllRl+0x32> + 8023348: 6823 ldr r3, [r4, #0] + 802334a: 4257 negs r7, r2 + 802334c: 4276 negs r6, r6 + 802334e: 425b negs r3, r3 + 8023350: 6023 str r3, [r4, #0] + 8023352: 2d00 cmp r5, #0 + 8023354: 4638 mov r0, r7 + 8023356: bfba itte lt + 8023358: 426d neglt r5, r5 + 802335a: f04f 38ff movlt.w r8, #4294967295 + 802335e: f04f 0801 movge.w r8, #1 + 8023362: f7ff ff5d bl 8023220 <_ZN8touchgfx16TouchCalibration4clzuEm> + 8023366: ab03 add r3, sp, #12 + 8023368: 463a mov r2, r7 + 802336a: e9cd 5300 strd r5, r3, [sp] + 802336e: 4603 mov r3, r0 + 8023370: 4648 mov r0, r9 + 8023372: f7ff ff73 bl 802325c <_ZN8touchgfx16TouchCalibration7muldivuEmmmmmRm> + 8023376: 6823 ldr r3, [r4, #0] + 8023378: 9a03 ldr r2, [sp, #12] + 802337a: 4546 cmp r6, r8 + 802337c: 441a add r2, r3 + 802337e: fb92 f3f5 sdiv r3, r2, r5 + 8023382: 4418 add r0, r3 + 8023384: fb05 2313 mls r3, r5, r3, r2 + 8023388: bf18 it ne + 802338a: 4240 negne r0, r0 + 802338c: 1c72 adds r2, r6, #1 + 802338e: 6023 str r3, [r4, #0] + 8023390: d105 bne.n 802339e <_ZN8touchgfx16TouchCalibration6muldivEllllRl+0x7e> + 8023392: 2b00 cmp r3, #0 + 8023394: f1c3 0200 rsb r2, r3, #0 + 8023398: db0b blt.n 80233b2 <_ZN8touchgfx16TouchCalibration6muldivEllllRl+0x92> + 802339a: 6022 str r2, [r4, #0] + 802339c: e006 b.n 80233ac <_ZN8touchgfx16TouchCalibration6muldivEllllRl+0x8c> + 802339e: 2e01 cmp r6, #1 + 80233a0: d104 bne.n 80233ac <_ZN8touchgfx16TouchCalibration6muldivEllllRl+0x8c> + 80233a2: 2b00 cmp r3, #0 + 80233a4: da02 bge.n 80233ac <_ZN8touchgfx16TouchCalibration6muldivEllllRl+0x8c> + 80233a6: 442b add r3, r5 + 80233a8: 3801 subs r0, #1 + 80233aa: 6023 str r3, [r4, #0] + 80233ac: b005 add sp, #20 + 80233ae: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} + 80233b2: 3801 subs r0, #1 + 80233b4: 1b52 subs r2, r2, r5 + 80233b6: e7f0 b.n 802339a <_ZN8touchgfx16TouchCalibration6muldivEllllRl+0x7a> + +080233b8 <_ZN8touchgfx16TouchCalibration14translatePointERNS_5PointE>: + 80233b8: e92d 41ff stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, lr} + 80233bc: 4c1c ldr r4, [pc, #112] ; (8023430 <_ZN8touchgfx16TouchCalibration14translatePointERNS_5PointE+0x78>) + 80233be: 4605 mov r5, r0 + 80233c0: 6807 ldr r7, [r0, #0] + 80233c2: 69a3 ldr r3, [r4, #24] + 80233c4: b92b cbnz r3, 80233d2 <_ZN8touchgfx16TouchCalibration14translatePointERNS_5PointE+0x1a> + 80233c6: 6840 ldr r0, [r0, #4] + 80233c8: e9c5 7000 strd r7, r0, [r5] + 80233cc: b004 add sp, #16 + 80233ce: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + 80233d2: f04f 0802 mov.w r8, #2 + 80233d6: 68a2 ldr r2, [r4, #8] + 80233d8: ae04 add r6, sp, #16 + 80233da: 6820 ldr r0, [r4, #0] + 80233dc: fb93 f1f8 sdiv r1, r3, r8 + 80233e0: 440a add r2, r1 + 80233e2: 69e1 ldr r1, [r4, #28] + 80233e4: f846 2d04 str.w r2, [r6, #-4]! + 80233e8: 463a mov r2, r7 + 80233ea: 9600 str r6, [sp, #0] + 80233ec: f7ff ff98 bl 8023320 <_ZN8touchgfx16TouchCalibration6muldivEllllRl> + 80233f0: 69a3 ldr r3, [r4, #24] + 80233f2: 4607 mov r7, r0 + 80233f4: 686a ldr r2, [r5, #4] + 80233f6: 6a21 ldr r1, [r4, #32] + 80233f8: 9600 str r6, [sp, #0] + 80233fa: 6860 ldr r0, [r4, #4] + 80233fc: f7ff ff90 bl 8023320 <_ZN8touchgfx16TouchCalibration6muldivEllllRl> + 8023400: 69a3 ldr r3, [r4, #24] + 8023402: 6962 ldr r2, [r4, #20] + 8023404: 4407 add r7, r0 + 8023406: 6a61 ldr r1, [r4, #36] ; 0x24 + 8023408: 9600 str r6, [sp, #0] + 802340a: 68e0 ldr r0, [r4, #12] + 802340c: fb93 f8f8 sdiv r8, r3, r8 + 8023410: 4442 add r2, r8 + 8023412: 9203 str r2, [sp, #12] + 8023414: 682a ldr r2, [r5, #0] + 8023416: f7ff ff83 bl 8023320 <_ZN8touchgfx16TouchCalibration6muldivEllllRl> + 802341a: 4680 mov r8, r0 + 802341c: 9600 str r6, [sp, #0] + 802341e: 69a3 ldr r3, [r4, #24] + 8023420: 686a ldr r2, [r5, #4] + 8023422: 6aa1 ldr r1, [r4, #40] ; 0x28 + 8023424: 6920 ldr r0, [r4, #16] + 8023426: f7ff ff7b bl 8023320 <_ZN8touchgfx16TouchCalibration6muldivEllllRl> + 802342a: 4440 add r0, r8 + 802342c: e7cc b.n 80233c8 <_ZN8touchgfx16TouchCalibration14translatePointERNS_5PointE+0x10> + 802342e: bf00 nop + 8023430: 2001e740 .word 0x2001e740 + +08023434 <_ZN8touchgfx21DisplayTransformation29transformDisplayToFrameBufferERsS1_>: + 8023434: 4b07 ldr r3, [pc, #28] ; (8023454 <_ZN8touchgfx21DisplayTransformation29transformDisplayToFrameBufferERsS1_+0x20>) + 8023436: 781b ldrb r3, [r3, #0] + 8023438: 2b01 cmp r3, #1 + 802343a: d109 bne.n 8023450 <_ZN8touchgfx21DisplayTransformation29transformDisplayToFrameBufferERsS1_+0x1c> + 802343c: f9b1 3000 ldrsh.w r3, [r1] + 8023440: f9b0 2000 ldrsh.w r2, [r0] + 8023444: 8003 strh r3, [r0, #0] + 8023446: 4b04 ldr r3, [pc, #16] ; (8023458 <_ZN8touchgfx21DisplayTransformation29transformDisplayToFrameBufferERsS1_+0x24>) + 8023448: 881b ldrh r3, [r3, #0] + 802344a: 3b01 subs r3, #1 + 802344c: 1a9b subs r3, r3, r2 + 802344e: 800b strh r3, [r1, #0] + 8023450: 4770 bx lr + 8023452: bf00 nop + 8023454: 2001e72c .word 0x2001e72c + 8023458: 2001e728 .word 0x2001e728 + +0802345c <_ZN8touchgfx21DisplayTransformation29transformFrameBufferToDisplayERsS1_>: + 802345c: 4b07 ldr r3, [pc, #28] ; (802347c <_ZN8touchgfx21DisplayTransformation29transformFrameBufferToDisplayERsS1_+0x20>) + 802345e: b510 push {r4, lr} + 8023460: 781b ldrb r3, [r3, #0] + 8023462: 2b01 cmp r3, #1 + 8023464: d108 bne.n 8023478 <_ZN8touchgfx21DisplayTransformation29transformFrameBufferToDisplayERsS1_+0x1c> + 8023466: 4b06 ldr r3, [pc, #24] ; (8023480 <_ZN8touchgfx21DisplayTransformation29transformFrameBufferToDisplayERsS1_+0x24>) + 8023468: 880c ldrh r4, [r1, #0] + 802346a: 881b ldrh r3, [r3, #0] + 802346c: f9b0 2000 ldrsh.w r2, [r0] + 8023470: 3b01 subs r3, #1 + 8023472: 1b1b subs r3, r3, r4 + 8023474: 8003 strh r3, [r0, #0] + 8023476: 800a strh r2, [r1, #0] + 8023478: bd10 pop {r4, pc} + 802347a: bf00 nop + 802347c: 2001e72c .word 0x2001e72c + 8023480: 2001e728 .word 0x2001e728 + +08023484 <_ZN8touchgfx21DisplayTransformation29transformFrameBufferToDisplayERNS_4RectE>: + 8023484: 4b0a ldr r3, [pc, #40] ; (80234b0 <_ZN8touchgfx21DisplayTransformation29transformFrameBufferToDisplayERNS_4RectE+0x2c>) + 8023486: b510 push {r4, lr} + 8023488: 781b ldrb r3, [r3, #0] + 802348a: 2b01 cmp r3, #1 + 802348c: d10e bne.n 80234ac <_ZN8touchgfx21DisplayTransformation29transformFrameBufferToDisplayERNS_4RectE+0x28> + 802348e: f9b0 1006 ldrsh.w r1, [r0, #6] + 8023492: 8843 ldrh r3, [r0, #2] + 8023494: f9b0 4000 ldrsh.w r4, [r0] + 8023498: 18ca adds r2, r1, r3 + 802349a: 4b06 ldr r3, [pc, #24] ; (80234b4 <_ZN8touchgfx21DisplayTransformation29transformFrameBufferToDisplayERNS_4RectE+0x30>) + 802349c: 8044 strh r4, [r0, #2] + 802349e: 881b ldrh r3, [r3, #0] + 80234a0: 1a9b subs r3, r3, r2 + 80234a2: 8003 strh r3, [r0, #0] + 80234a4: f9b0 3004 ldrsh.w r3, [r0, #4] + 80234a8: 8081 strh r1, [r0, #4] + 80234aa: 80c3 strh r3, [r0, #6] + 80234ac: bd10 pop {r4, pc} + 80234ae: bf00 nop + 80234b0: 2001e72c .word 0x2001e72c + 80234b4: 2001e728 .word 0x2001e728 + +080234b8 <_ZN8touchgfx21DisplayTransformation29transformDisplayToFrameBufferERNS_4RectE>: + 80234b8: 4b08 ldr r3, [pc, #32] ; (80234dc <_ZN8touchgfx21DisplayTransformation29transformDisplayToFrameBufferERNS_4RectE+0x24>) + 80234ba: 781b ldrb r3, [r3, #0] + 80234bc: 2b01 cmp r3, #1 + 80234be: d10c bne.n 80234da <_ZN8touchgfx21DisplayTransformation29transformDisplayToFrameBufferERNS_4RectE+0x22> + 80234c0: 8803 ldrh r3, [r0, #0] + 80234c2: f9b0 1004 ldrsh.w r1, [r0, #4] + 80234c6: 8842 ldrh r2, [r0, #2] + 80234c8: 8002 strh r2, [r0, #0] + 80234ca: 185a adds r2, r3, r1 + 80234cc: 4b04 ldr r3, [pc, #16] ; (80234e0 <_ZN8touchgfx21DisplayTransformation29transformDisplayToFrameBufferERNS_4RectE+0x28>) + 80234ce: 881b ldrh r3, [r3, #0] + 80234d0: 1a9b subs r3, r3, r2 + 80234d2: 8043 strh r3, [r0, #2] + 80234d4: 88c3 ldrh r3, [r0, #6] + 80234d6: 80c1 strh r1, [r0, #6] + 80234d8: 8083 strh r3, [r0, #4] + 80234da: 4770 bx lr + 80234dc: 2001e72c .word 0x2001e72c + 80234e0: 2001e728 .word 0x2001e728 + +080234e4 <_ZN8touchgfx21DisplayTransformation29transformDisplayToFrameBufferERsS1_RKNS_4RectE>: + 80234e4: 4b07 ldr r3, [pc, #28] ; (8023504 <_ZN8touchgfx21DisplayTransformation29transformDisplayToFrameBufferERsS1_RKNS_4RectE+0x20>) + 80234e6: b510 push {r4, lr} + 80234e8: 781b ldrb r3, [r3, #0] + 80234ea: 2b01 cmp r3, #1 + 80234ec: d108 bne.n 8023500 <_ZN8touchgfx21DisplayTransformation29transformDisplayToFrameBufferERsS1_RKNS_4RectE+0x1c> + 80234ee: f9b1 3000 ldrsh.w r3, [r1] + 80234f2: f9b0 4000 ldrsh.w r4, [r0] + 80234f6: 8003 strh r3, [r0, #0] + 80234f8: 8893 ldrh r3, [r2, #4] + 80234fa: 3b01 subs r3, #1 + 80234fc: 1b1b subs r3, r3, r4 + 80234fe: 800b strh r3, [r1, #0] + 8023500: bd10 pop {r4, pc} + 8023502: bf00 nop + 8023504: 2001e72c .word 0x2001e72c + +08023508 <_ZN8touchgfx21DisplayTransformation29transformDisplayToFrameBufferERNS_4RectERKS1_>: + 8023508: 4b0a ldr r3, [pc, #40] ; (8023534 <_ZN8touchgfx21DisplayTransformation29transformDisplayToFrameBufferERNS_4RectERKS1_+0x2c>) + 802350a: 460a mov r2, r1 + 802350c: b510 push {r4, lr} + 802350e: 781b ldrb r3, [r3, #0] + 8023510: 2b01 cmp r3, #1 + 8023512: d10d bne.n 8023530 <_ZN8touchgfx21DisplayTransformation29transformDisplayToFrameBufferERNS_4RectERKS1_+0x28> + 8023514: 8881 ldrh r1, [r0, #4] + 8023516: 8803 ldrh r3, [r0, #0] + 8023518: 440b add r3, r1 + 802351a: 4601 mov r1, r0 + 802351c: 3b01 subs r3, #1 + 802351e: f821 3b02 strh.w r3, [r1], #2 + 8023522: f7ff ffdf bl 80234e4 <_ZN8touchgfx21DisplayTransformation29transformDisplayToFrameBufferERsS1_RKNS_4RectE> + 8023526: f9b0 3004 ldrsh.w r3, [r0, #4] + 802352a: 88c2 ldrh r2, [r0, #6] + 802352c: 80c3 strh r3, [r0, #6] + 802352e: 8082 strh r2, [r0, #4] + 8023530: bd10 pop {r4, pc} + 8023532: bf00 nop + 8023534: 2001e72c .word 0x2001e72c + +08023538 <_ZN8touchgfx11Application13requestRedrawEv>: + 8023538: 4b06 ldr r3, [pc, #24] ; (8023554 <_ZN8touchgfx11Application13requestRedrawEv+0x1c>) + 802353a: 2100 movs r1, #0 + 802353c: f9b3 2000 ldrsh.w r2, [r3] + 8023540: 4b05 ldr r3, [pc, #20] ; (8023558 <_ZN8touchgfx11Application13requestRedrawEv+0x20>) + 8023542: f8c0 1130 str.w r1, [r0, #304] ; 0x130 + 8023546: f9b3 3000 ldrsh.w r3, [r3] + 802354a: f8a0 2134 strh.w r2, [r0, #308] ; 0x134 + 802354e: f8a0 3136 strh.w r3, [r0, #310] ; 0x136 + 8023552: 4770 bx lr + 8023554: 2001e728 .word 0x2001e728 + 8023558: 2001e72a .word 0x2001e72a + +0802355c <_ZN8touchgfx11Application16handleClickEventERKNS_10ClickEventE>: + 802355c: 4b03 ldr r3, [pc, #12] ; (802356c <_ZN8touchgfx11Application16handleClickEventERKNS_10ClickEventE+0x10>) + 802355e: 6818 ldr r0, [r3, #0] + 8023560: b110 cbz r0, 8023568 <_ZN8touchgfx11Application16handleClickEventERKNS_10ClickEventE+0xc> + 8023562: 6803 ldr r3, [r0, #0] + 8023564: 699b ldr r3, [r3, #24] + 8023566: 4718 bx r3 + 8023568: 4770 bx lr + 802356a: bf00 nop + 802356c: 2001e770 .word 0x2001e770 + +08023570 <_ZN8touchgfx11Application29handlePendingScreenTransitionEv>: + 8023570: 4770 bx lr + ... + +08023574 <_ZN8touchgfx11Application4drawEv>: + 8023574: 4b09 ldr r3, [pc, #36] ; (802359c <_ZN8touchgfx11Application4drawEv+0x28>) + 8023576: b507 push {r0, r1, r2, lr} + 8023578: f9b3 2000 ldrsh.w r2, [r3] + 802357c: 2100 movs r1, #0 + 802357e: 4b08 ldr r3, [pc, #32] ; (80235a0 <_ZN8touchgfx11Application4drawEv+0x2c>) + 8023580: 9100 str r1, [sp, #0] + 8023582: 4669 mov r1, sp + 8023584: f9b3 3000 ldrsh.w r3, [r3] + 8023588: f8ad 2004 strh.w r2, [sp, #4] + 802358c: f8ad 3006 strh.w r3, [sp, #6] + 8023590: 6803 ldr r3, [r0, #0] + 8023592: 6c9b ldr r3, [r3, #72] ; 0x48 + 8023594: 4798 blx r3 + 8023596: b003 add sp, #12 + 8023598: f85d fb04 ldr.w pc, [sp], #4 + 802359c: 2001e728 .word 0x2001e728 + 80235a0: 2001e72a .word 0x2001e72a + +080235a4 <_ZN8touchgfx11Application10invalidateEv>: + 80235a4: 4b09 ldr r3, [pc, #36] ; (80235cc <_ZN8touchgfx11Application10invalidateEv+0x28>) + 80235a6: b082 sub sp, #8 + 80235a8: 2100 movs r1, #0 + 80235aa: f9b3 2000 ldrsh.w r2, [r3] + 80235ae: 4b08 ldr r3, [pc, #32] ; (80235d0 <_ZN8touchgfx11Application10invalidateEv+0x2c>) + 80235b0: f8ad 2004 strh.w r2, [sp, #4] + 80235b4: aa02 add r2, sp, #8 + 80235b6: f9b3 3000 ldrsh.w r3, [r3] + 80235ba: 9100 str r1, [sp, #0] + 80235bc: f8ad 3006 strh.w r3, [sp, #6] + 80235c0: 6803 ldr r3, [r0, #0] + 80235c2: e912 0006 ldmdb r2, {r1, r2} + 80235c6: 6c1b ldr r3, [r3, #64] ; 0x40 + 80235c8: b002 add sp, #8 + 80235ca: 4718 bx r3 + 80235cc: 2001e728 .word 0x2001e728 + 80235d0: 2001e72a .word 0x2001e72a + +080235d4 <_ZN8touchgfx11Application15handleDragEventERKNS_9DragEventE>: + 80235d4: 4b03 ldr r3, [pc, #12] ; (80235e4 <_ZN8touchgfx11Application15handleDragEventERKNS_9DragEventE+0x10>) + 80235d6: 6818 ldr r0, [r3, #0] + 80235d8: b110 cbz r0, 80235e0 <_ZN8touchgfx11Application15handleDragEventERKNS_9DragEventE+0xc> + 80235da: 6803 ldr r3, [r0, #0] + 80235dc: 69db ldr r3, [r3, #28] + 80235de: 4718 bx r3 + 80235e0: 4770 bx lr + 80235e2: bf00 nop + 80235e4: 2001e770 .word 0x2001e770 + +080235e8 <_ZN8touchgfx11Application18handleGestureEventERKNS_12GestureEventE>: + 80235e8: 4b03 ldr r3, [pc, #12] ; (80235f8 <_ZN8touchgfx11Application18handleGestureEventERKNS_12GestureEventE+0x10>) + 80235ea: 6818 ldr r0, [r3, #0] + 80235ec: b110 cbz r0, 80235f4 <_ZN8touchgfx11Application18handleGestureEventERKNS_12GestureEventE+0xc> + 80235ee: 6803 ldr r3, [r0, #0] + 80235f0: 6a1b ldr r3, [r3, #32] + 80235f2: 4718 bx r3 + 80235f4: 4770 bx lr + 80235f6: bf00 nop + 80235f8: 2001e770 .word 0x2001e770 + +080235fc <_ZN8touchgfx11Application16clearCachedAreasEv>: + 80235fc: 2300 movs r3, #0 + 80235fe: f8a0 30ec strh.w r3, [r0, #236] ; 0xec + 8023602: 4770 bx lr + +08023604 <_ZN8touchgfx11Application14handleKeyEventEh>: + 8023604: 4b03 ldr r3, [pc, #12] ; (8023614 <_ZN8touchgfx11Application14handleKeyEventEh+0x10>) + 8023606: 6818 ldr r0, [r3, #0] + 8023608: b110 cbz r0, 8023610 <_ZN8touchgfx11Application14handleKeyEventEh+0xc> + 802360a: 6803 ldr r3, [r0, #0] + 802360c: 6a9b ldr r3, [r3, #40] ; 0x28 + 802360e: 4718 bx r3 + 8023610: 4770 bx lr + 8023612: bf00 nop + 8023614: 2001e770 .word 0x2001e770 + +08023618 <_ZN8touchgfx11ApplicationD1Ev>: + 8023618: 4770 bx lr + +0802361a <_ZN8touchgfx11ApplicationD0Ev>: + 802361a: b510 push {r4, lr} + 802361c: 4604 mov r4, r0 + 802361e: f44f 719e mov.w r1, #316 ; 0x13c + 8023622: f010 fe68 bl 80342f6 <_ZdlPvj> + 8023626: 4620 mov r0, r4 + 8023628: bd10 pop {r4, pc} + +0802362a <_ZNK8touchgfx4Rect9intersectERKS0_>: + 802362a: b510 push {r4, lr} + 802362c: f9b1 4000 ldrsh.w r4, [r1] + 8023630: 888a ldrh r2, [r1, #4] + 8023632: f9b0 3000 ldrsh.w r3, [r0] + 8023636: 4422 add r2, r4 + 8023638: b212 sxth r2, r2 + 802363a: 4293 cmp r3, r2 + 802363c: da15 bge.n 802366a <_ZNK8touchgfx4Rect9intersectERKS0_+0x40> + 802363e: 8882 ldrh r2, [r0, #4] + 8023640: 4413 add r3, r2 + 8023642: b21b sxth r3, r3 + 8023644: 429c cmp r4, r3 + 8023646: da10 bge.n 802366a <_ZNK8touchgfx4Rect9intersectERKS0_+0x40> + 8023648: f9b1 3002 ldrsh.w r3, [r1, #2] + 802364c: 88c9 ldrh r1, [r1, #6] + 802364e: f9b0 2002 ldrsh.w r2, [r0, #2] + 8023652: 4419 add r1, r3 + 8023654: b209 sxth r1, r1 + 8023656: 428a cmp r2, r1 + 8023658: da07 bge.n 802366a <_ZNK8touchgfx4Rect9intersectERKS0_+0x40> + 802365a: 88c0 ldrh r0, [r0, #6] + 802365c: 4410 add r0, r2 + 802365e: b200 sxth r0, r0 + 8023660: 4283 cmp r3, r0 + 8023662: bfac ite ge + 8023664: 2000 movge r0, #0 + 8023666: 2001 movlt r0, #1 + 8023668: bd10 pop {r4, pc} + 802366a: 2000 movs r0, #0 + 802366c: e7fc b.n 8023668 <_ZNK8touchgfx4Rect9intersectERKS0_+0x3e> + +0802366e <_ZN8touchgfx4Rect10restrictToEss>: + 802366e: f9b0 3000 ldrsh.w r3, [r0] + 8023672: 2b00 cmp r3, #0 + 8023674: b510 push {r4, lr} + 8023676: da04 bge.n 8023682 <_ZN8touchgfx4Rect10restrictToEss+0x14> + 8023678: 8884 ldrh r4, [r0, #4] + 802367a: 4423 add r3, r4 + 802367c: 8083 strh r3, [r0, #4] + 802367e: 2300 movs r3, #0 + 8023680: 8003 strh r3, [r0, #0] + 8023682: f9b0 4000 ldrsh.w r4, [r0] + 8023686: f9b0 3004 ldrsh.w r3, [r0, #4] + 802368a: 1b09 subs r1, r1, r4 + 802368c: 428b cmp r3, r1 + 802368e: f9b0 3002 ldrsh.w r3, [r0, #2] + 8023692: bfc8 it gt + 8023694: 8081 strhgt r1, [r0, #4] + 8023696: 2b00 cmp r3, #0 + 8023698: da04 bge.n 80236a4 <_ZN8touchgfx4Rect10restrictToEss+0x36> + 802369a: 88c1 ldrh r1, [r0, #6] + 802369c: 440b add r3, r1 + 802369e: 80c3 strh r3, [r0, #6] + 80236a0: 2300 movs r3, #0 + 80236a2: 8043 strh r3, [r0, #2] + 80236a4: f9b0 1002 ldrsh.w r1, [r0, #2] + 80236a8: f9b0 3006 ldrsh.w r3, [r0, #6] + 80236ac: 1a52 subs r2, r2, r1 + 80236ae: 4293 cmp r3, r2 + 80236b0: bfc8 it gt + 80236b2: 80c2 strhgt r2, [r0, #6] + 80236b4: bd10 pop {r4, pc} + ... + +080236b8 <_ZN8touchgfx11Application4drawERNS_4RectE>: + 80236b8: 4b10 ldr r3, [pc, #64] ; (80236fc <_ZN8touchgfx11Application4drawERNS_4RectE+0x44>) + 80236ba: b510 push {r4, lr} + 80236bc: 460c mov r4, r1 + 80236be: f9b3 2000 ldrsh.w r2, [r3] + 80236c2: 4b0f ldr r3, [pc, #60] ; (8023700 <_ZN8touchgfx11Application4drawERNS_4RectE+0x48>) + 80236c4: 4620 mov r0, r4 + 80236c6: f9b3 1000 ldrsh.w r1, [r3] + 80236ca: f7ff ffd0 bl 802366e <_ZN8touchgfx4Rect10restrictToEss> + 80236ce: 4b0d ldr r3, [pc, #52] ; (8023704 <_ZN8touchgfx11Application4drawERNS_4RectE+0x4c>) + 80236d0: 6818 ldr r0, [r3, #0] + 80236d2: b190 cbz r0, 80236fa <_ZN8touchgfx11Application4drawERNS_4RectE+0x42> + 80236d4: 6803 ldr r3, [r0, #0] + 80236d6: 4621 mov r1, r4 + 80236d8: 689b ldr r3, [r3, #8] + 80236da: 4798 blx r3 + 80236dc: 4b0a ldr r3, [pc, #40] ; (8023708 <_ZN8touchgfx11Application4drawERNS_4RectE+0x50>) + 80236de: 6818 ldr r0, [r3, #0] + 80236e0: b118 cbz r0, 80236ea <_ZN8touchgfx11Application4drawERNS_4RectE+0x32> + 80236e2: 6803 ldr r3, [r0, #0] + 80236e4: 4621 mov r1, r4 + 80236e6: 689b ldr r3, [r3, #8] + 80236e8: 4798 blx r3 + 80236ea: 4b08 ldr r3, [pc, #32] ; (802370c <_ZN8touchgfx11Application4drawERNS_4RectE+0x54>) + 80236ec: 4621 mov r1, r4 + 80236ee: 6818 ldr r0, [r3, #0] + 80236f0: 6803 ldr r3, [r0, #0] + 80236f2: e8bd 4010 ldmia.w sp!, {r4, lr} + 80236f6: 69db ldr r3, [r3, #28] + 80236f8: 4718 bx r3 + 80236fa: bd10 pop {r4, pc} + 80236fc: 2001e72a .word 0x2001e72a + 8023700: 2001e728 .word 0x2001e728 + 8023704: 2001e770 .word 0x2001e770 + 8023708: 2001e76c .word 0x2001e76c + 802370c: 2001e734 .word 0x2001e734 + +08023710 <_ZNK8touchgfx4Rect8includesERKS0_>: + 8023710: b5f8 push {r3, r4, r5, r6, r7, lr} + 8023712: 4606 mov r6, r0 + 8023714: 4608 mov r0, r1 + 8023716: 460f mov r7, r1 + 8023718: f7fc fc2b bl 801ff72 <_ZNK8touchgfx4Rect7isEmptyEv> + 802371c: b9e8 cbnz r0, 802375a <_ZNK8touchgfx4Rect8includesERKS0_+0x4a> + 802371e: f9b7 5000 ldrsh.w r5, [r7] + 8023722: f9b6 4000 ldrsh.w r4, [r6] + 8023726: 42a5 cmp r5, r4 + 8023728: db17 blt.n 802375a <_ZNK8touchgfx4Rect8includesERKS0_+0x4a> + 802372a: f9b7 2002 ldrsh.w r2, [r7, #2] + 802372e: f9b6 3002 ldrsh.w r3, [r6, #2] + 8023732: 429a cmp r2, r3 + 8023734: db11 blt.n 802375a <_ZNK8touchgfx4Rect8includesERKS0_+0x4a> + 8023736: 88b9 ldrh r1, [r7, #4] + 8023738: 440d add r5, r1 + 802373a: 88b1 ldrh r1, [r6, #4] + 802373c: 440c add r4, r1 + 802373e: b22d sxth r5, r5 + 8023740: b224 sxth r4, r4 + 8023742: 42a5 cmp r5, r4 + 8023744: dc09 bgt.n 802375a <_ZNK8touchgfx4Rect8includesERKS0_+0x4a> + 8023746: 88f8 ldrh r0, [r7, #6] + 8023748: 4410 add r0, r2 + 802374a: 88f2 ldrh r2, [r6, #6] + 802374c: 4413 add r3, r2 + 802374e: b200 sxth r0, r0 + 8023750: b21b sxth r3, r3 + 8023752: 4298 cmp r0, r3 + 8023754: bfcc ite gt + 8023756: 2000 movgt r0, #0 + 8023758: 2001 movle r0, #1 + 802375a: bdf8 pop {r3, r4, r5, r6, r7, pc} + +0802375c <_ZN8touchgfx4Rect11expandToFitERKS0_>: + 802375c: b5f8 push {r3, r4, r5, r6, r7, lr} + 802375e: 4604 mov r4, r0 + 8023760: 4608 mov r0, r1 + 8023762: 460d mov r5, r1 + 8023764: f7fc fc05 bl 801ff72 <_ZNK8touchgfx4Rect7isEmptyEv> + 8023768: b978 cbnz r0, 802378a <_ZN8touchgfx4Rect11expandToFitERKS0_+0x2e> + 802376a: 4620 mov r0, r4 + 802376c: f7fc fc01 bl 801ff72 <_ZNK8touchgfx4Rect7isEmptyEv> + 8023770: f9b5 6000 ldrsh.w r6, [r5] + 8023774: b150 cbz r0, 802378c <_ZN8touchgfx4Rect11expandToFitERKS0_+0x30> + 8023776: 8026 strh r6, [r4, #0] + 8023778: f9b5 3002 ldrsh.w r3, [r5, #2] + 802377c: 8063 strh r3, [r4, #2] + 802377e: f9b5 3004 ldrsh.w r3, [r5, #4] + 8023782: 80a3 strh r3, [r4, #4] + 8023784: f9b5 3006 ldrsh.w r3, [r5, #6] + 8023788: 80e3 strh r3, [r4, #6] + 802378a: bdf8 pop {r3, r4, r5, r6, r7, pc} + 802378c: f9b4 1000 ldrsh.w r1, [r4] + 8023790: f9b5 2002 ldrsh.w r2, [r5, #2] + 8023794: 42b1 cmp r1, r6 + 8023796: f9b4 3002 ldrsh.w r3, [r4, #2] + 802379a: f8b5 c004 ldrh.w ip, [r5, #4] + 802379e: 460f mov r7, r1 + 80237a0: 88ed ldrh r5, [r5, #6] + 80237a2: bfa8 it ge + 80237a4: 4637 movge r7, r6 + 80237a6: 4293 cmp r3, r2 + 80237a8: 4618 mov r0, r3 + 80237aa: 4466 add r6, ip + 80237ac: f8b4 c004 ldrh.w ip, [r4, #4] + 80237b0: bfa8 it ge + 80237b2: 4610 movge r0, r2 + 80237b4: 442a add r2, r5 + 80237b6: 88e5 ldrh r5, [r4, #6] + 80237b8: 4461 add r1, ip + 80237ba: b236 sxth r6, r6 + 80237bc: 8027 strh r7, [r4, #0] + 80237be: 442b add r3, r5 + 80237c0: b209 sxth r1, r1 + 80237c2: b212 sxth r2, r2 + 80237c4: 8060 strh r0, [r4, #2] + 80237c6: b21b sxth r3, r3 + 80237c8: 428e cmp r6, r1 + 80237ca: bfac ite ge + 80237cc: ebc7 0106 rsbge r1, r7, r6 + 80237d0: ebc7 0101 rsblt r1, r7, r1 + 80237d4: 429a cmp r2, r3 + 80237d6: bfac ite ge + 80237d8: ebc0 0202 rsbge r2, r0, r2 + 80237dc: ebc0 0203 rsblt r2, r0, r3 + 80237e0: 80a1 strh r1, [r4, #4] + 80237e2: 80e2 strh r2, [r4, #6] + 80237e4: e7d1 b.n 802378a <_ZN8touchgfx4Rect11expandToFitERKS0_+0x2e> + ... + +080237e8 <_ZN8touchgfx11Application11getInstanceEv>: + 80237e8: 4b01 ldr r3, [pc, #4] ; (80237f0 <_ZN8touchgfx11Application11getInstanceEv+0x8>) + 80237ea: 6818 ldr r0, [r3, #0] + 80237ec: 4770 bx lr + 80237ee: bf00 nop + 80237f0: 2001e780 .word 0x2001e780 + +080237f4 <_ZN8touchgfx11Application12TimerWidgets10tickActiveEv>: + 80237f4: 2300 movs r3, #0 + 80237f6: b510 push {r4, lr} + 80237f8: f8a0 30a4 strh.w r3, [r0, #164] ; 0xa4 + 80237fc: 4604 mov r4, r0 + 80237fe: f8b0 3080 ldrh.w r3, [r0, #128] ; 0x80 + 8023802: f8a0 30a6 strh.w r3, [r0, #166] ; 0xa6 + 8023806: f8b4 30a4 ldrh.w r3, [r4, #164] ; 0xa4 + 802380a: f8b4 20a6 ldrh.w r2, [r4, #166] ; 0xa6 + 802380e: 429a cmp r2, r3 + 8023810: d90e bls.n 8023830 <_ZN8touchgfx11Application12TimerWidgets10tickActiveEv+0x3c> + 8023812: 18e2 adds r2, r4, r3 + 8023814: f892 2084 ldrb.w r2, [r2, #132] ; 0x84 + 8023818: b122 cbz r2, 8023824 <_ZN8touchgfx11Application12TimerWidgets10tickActiveEv+0x30> + 802381a: f854 0023 ldr.w r0, [r4, r3, lsl #2] + 802381e: 6803 ldr r3, [r0, #0] + 8023820: 6d1b ldr r3, [r3, #80] ; 0x50 + 8023822: 4798 blx r3 + 8023824: f8b4 30a4 ldrh.w r3, [r4, #164] ; 0xa4 + 8023828: 3301 adds r3, #1 + 802382a: f8a4 30a4 strh.w r3, [r4, #164] ; 0xa4 + 802382e: e7ea b.n 8023806 <_ZN8touchgfx11Application12TimerWidgets10tickActiveEv+0x12> + 8023830: bd10 pop {r4, pc} + +08023832 <_ZN8touchgfx11Application12TimerWidgets5clearEv>: + 8023832: 2300 movs r3, #0 + 8023834: f100 0284 add.w r2, r0, #132 ; 0x84 + 8023838: 30a4 adds r0, #164 ; 0xa4 + 802383a: f820 3c24 strh.w r3, [r0, #-36] + 802383e: f802 3b01 strb.w r3, [r2], #1 + 8023842: 4282 cmp r2, r0 + 8023844: d1fb bne.n 802383e <_ZN8touchgfx11Application12TimerWidgets5clearEv+0xc> + 8023846: 4770 bx lr + +08023848 <_ZN8touchgfx11Application12switchScreenEPNS_6ScreenE>: + 8023848: b570 push {r4, r5, r6, lr} + 802384a: 4c0b ldr r4, [pc, #44] ; (8023878 <_ZN8touchgfx11Application12switchScreenEPNS_6ScreenE+0x30>) + 802384c: 4605 mov r5, r0 + 802384e: 460e mov r6, r1 + 8023850: 6820 ldr r0, [r4, #0] + 8023852: b110 cbz r0, 802385a <_ZN8touchgfx11Application12switchScreenEPNS_6ScreenE+0x12> + 8023854: 6803 ldr r3, [r0, #0] + 8023856: 695b ldr r3, [r3, #20] + 8023858: 4798 blx r3 + 802385a: 1d28 adds r0, r5, #4 + 802385c: f7ff ffe9 bl 8023832 <_ZN8touchgfx11Application12TimerWidgets5clearEv> + 8023860: 6026 str r6, [r4, #0] + 8023862: 6833 ldr r3, [r6, #0] + 8023864: 4630 mov r0, r6 + 8023866: 68db ldr r3, [r3, #12] + 8023868: 4798 blx r3 + 802386a: 682b ldr r3, [r5, #0] + 802386c: 4628 mov r0, r5 + 802386e: 6c5b ldr r3, [r3, #68] ; 0x44 + 8023870: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} + 8023874: 4718 bx r3 + 8023876: bf00 nop + 8023878: 2001e770 .word 0x2001e770 + +0802387c <_ZN8touchgfx11Application12TimerWidgets7compactEv>: + 802387c: 2300 movs r3, #0 + 802387e: f8b0 c080 ldrh.w ip, [r0, #128] ; 0x80 + 8023882: f8b0 10a4 ldrh.w r1, [r0, #164] ; 0xa4 + 8023886: 461a mov r2, r3 + 8023888: b5f0 push {r4, r5, r6, r7, lr} + 802388a: 461c mov r4, r3 + 802388c: 461d mov r5, r3 + 802388e: 459c cmp ip, r3 + 8023890: dd1a ble.n 80238c8 <_ZN8touchgfx11Application12TimerWidgets7compactEv+0x4c> + 8023892: 18c6 adds r6, r0, r3 + 8023894: f896 6084 ldrb.w r6, [r6, #132] ; 0x84 + 8023898: b16e cbz r6, 80238b6 <_ZN8touchgfx11Application12TimerWidgets7compactEv+0x3a> + 802389a: 429a cmp r2, r3 + 802389c: d008 beq.n 80238b0 <_ZN8touchgfx11Application12TimerWidgets7compactEv+0x34> + 802389e: f850 7023 ldr.w r7, [r0, r3, lsl #2] + 80238a2: fa1f fe82 uxth.w lr, r2 + 80238a6: f840 702e str.w r7, [r0, lr, lsl #2] + 80238aa: 1887 adds r7, r0, r2 + 80238ac: f887 6084 strb.w r6, [r7, #132] ; 0x84 + 80238b0: 3201 adds r2, #1 + 80238b2: 3301 adds r3, #1 + 80238b4: e7eb b.n 802388e <_ZN8touchgfx11Application12TimerWidgets7compactEv+0x12> + 80238b6: 4299 cmp r1, r3 + 80238b8: f8b0 60a6 ldrh.w r6, [r0, #166] ; 0xa6 + 80238bc: bfa8 it ge + 80238be: 3501 addge r5, #1 + 80238c0: 429e cmp r6, r3 + 80238c2: bfc8 it gt + 80238c4: 3401 addgt r4, #1 + 80238c6: e7f4 b.n 80238b2 <_ZN8touchgfx11Application12TimerWidgets7compactEv+0x36> + 80238c8: f8b0 30a6 ldrh.w r3, [r0, #166] ; 0xa6 + 80238cc: 1b49 subs r1, r1, r5 + 80238ce: 1b1b subs r3, r3, r4 + 80238d0: f8a0 10a4 strh.w r1, [r0, #164] ; 0xa4 + 80238d4: f8a0 30a6 strh.w r3, [r0, #166] ; 0xa6 + 80238d8: f8b0 3080 ldrh.w r3, [r0, #128] ; 0x80 + 80238dc: 4293 cmp r3, r2 + 80238de: dd03 ble.n 80238e8 <_ZN8touchgfx11Application12TimerWidgets7compactEv+0x6c> + 80238e0: 3b01 subs r3, #1 + 80238e2: f8a0 3080 strh.w r3, [r0, #128] ; 0x80 + 80238e6: e7f7 b.n 80238d8 <_ZN8touchgfx11Application12TimerWidgets7compactEv+0x5c> + 80238e8: bdf0 pop {r4, r5, r6, r7, pc} + ... + +080238ec <_ZN8touchgfx11Application15handleTickEventEv>: + 80238ec: b570 push {r4, r5, r6, lr} + 80238ee: 4d16 ldr r5, [pc, #88] ; (8023948 <_ZN8touchgfx11Application15handleTickEventEv+0x5c>) + 80238f0: 4604 mov r4, r0 + 80238f2: 6828 ldr r0, [r5, #0] + 80238f4: b140 cbz r0, 8023908 <_ZN8touchgfx11Application15handleTickEventEv+0x1c> + 80238f6: 7a03 ldrb r3, [r0, #8] + 80238f8: b933 cbnz r3, 8023908 <_ZN8touchgfx11Application15handleTickEventEv+0x1c> + 80238fa: f884 3138 strb.w r3, [r4, #312] ; 0x138 + 80238fe: 6803 ldr r3, [r0, #0] + 8023900: 689b ldr r3, [r3, #8] + 8023902: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} + 8023906: 4718 bx r3 + 8023908: f894 3138 ldrb.w r3, [r4, #312] ; 0x138 + 802390c: 4e0f ldr r6, [pc, #60] ; (802394c <_ZN8touchgfx11Application15handleTickEventEv+0x60>) + 802390e: b973 cbnz r3, 802392e <_ZN8touchgfx11Application15handleTickEventEv+0x42> + 8023910: b168 cbz r0, 802392e <_ZN8touchgfx11Application15handleTickEventEv+0x42> + 8023912: 7a03 ldrb r3, [r0, #8] + 8023914: b15b cbz r3, 802392e <_ZN8touchgfx11Application15handleTickEventEv+0x42> + 8023916: 6830 ldr r0, [r6, #0] + 8023918: b110 cbz r0, 8023920 <_ZN8touchgfx11Application15handleTickEventEv+0x34> + 802391a: 6803 ldr r3, [r0, #0] + 802391c: 691b ldr r3, [r3, #16] + 802391e: 4798 blx r3 + 8023920: 6828 ldr r0, [r5, #0] + 8023922: 6803 ldr r3, [r0, #0] + 8023924: 68db ldr r3, [r3, #12] + 8023926: 4798 blx r3 + 8023928: 2301 movs r3, #1 + 802392a: f884 3138 strb.w r3, [r4, #312] ; 0x138 + 802392e: 3404 adds r4, #4 + 8023930: 4620 mov r0, r4 + 8023932: f7ff ff5f bl 80237f4 <_ZN8touchgfx11Application12TimerWidgets10tickActiveEv> + 8023936: 4620 mov r0, r4 + 8023938: f7ff ffa0 bl 802387c <_ZN8touchgfx11Application12TimerWidgets7compactEv> + 802393c: 6830 ldr r0, [r6, #0] + 802393e: b110 cbz r0, 8023946 <_ZN8touchgfx11Application15handleTickEventEv+0x5a> + 8023940: 6803 ldr r3, [r0, #0] + 8023942: 6a5b ldr r3, [r3, #36] ; 0x24 + 8023944: e7dd b.n 8023902 <_ZN8touchgfx11Application15handleTickEventEv+0x16> + 8023946: bd70 pop {r4, r5, r6, pc} + 8023948: 2001e774 .word 0x2001e774 + 802394c: 2001e770 .word 0x2001e770 + +08023950 <_ZN8touchgfx6VectorINS_4RectELt8EEC1Ev>: + 8023950: 4603 mov r3, r0 + 8023952: f100 0140 add.w r1, r0, #64 ; 0x40 + 8023956: 2200 movs r2, #0 + 8023958: 801a strh r2, [r3, #0] + 802395a: 3308 adds r3, #8 + 802395c: f823 2c06 strh.w r2, [r3, #-6] + 8023960: f823 2c04 strh.w r2, [r3, #-4] + 8023964: f823 2c02 strh.w r2, [r3, #-2] + 8023968: 428b cmp r3, r1 + 802396a: d1f5 bne.n 8023958 <_ZN8touchgfx6VectorINS_4RectELt8EEC1Ev+0x8> + 802396c: f8a0 2040 strh.w r2, [r0, #64] ; 0x40 + 8023970: 4770 bx lr + ... + +08023974 <_ZN8touchgfx11ApplicationC1Ev>: + 8023974: b5f8 push {r3, r4, r5, r6, r7, lr} + 8023976: 4b1d ldr r3, [pc, #116] ; (80239ec <_ZN8touchgfx11ApplicationC1Ev+0x78>) + 8023978: 4606 mov r6, r0 + 802397a: 4604 mov r4, r0 + 802397c: 2500 movs r5, #0 + 802397e: f846 3b04 str.w r3, [r6], #4 + 8023982: 22a8 movs r2, #168 ; 0xa8 + 8023984: 2100 movs r1, #0 + 8023986: 4630 mov r0, r6 + 8023988: f011 f818 bl 80349bc + 802398c: f8a4 5084 strh.w r5, [r4, #132] ; 0x84 + 8023990: f104 00ac add.w r0, r4, #172 ; 0xac + 8023994: 4f16 ldr r7, [pc, #88] ; (80239f0 <_ZN8touchgfx11ApplicationC1Ev+0x7c>) + 8023996: f7ff ffdb bl 8023950 <_ZN8touchgfx6VectorINS_4RectELt8EEC1Ev> + 802399a: f104 00ee add.w r0, r4, #238 ; 0xee + 802399e: f7ff ffd7 bl 8023950 <_ZN8touchgfx6VectorINS_4RectELt8EEC1Ev> + 80239a2: f8a4 5130 strh.w r5, [r4, #304] ; 0x130 + 80239a6: f8a4 5132 strh.w r5, [r4, #306] ; 0x132 + 80239aa: f8a4 5134 strh.w r5, [r4, #308] ; 0x134 + 80239ae: f8a4 5136 strh.w r5, [r4, #310] ; 0x136 + 80239b2: f884 5138 strb.w r5, [r4, #312] ; 0x138 + 80239b6: 490f ldr r1, [pc, #60] ; (80239f4 <_ZN8touchgfx11ApplicationC1Ev+0x80>) + 80239b8: 480f ldr r0, [pc, #60] ; (80239f8 <_ZN8touchgfx11ApplicationC1Ev+0x84>) + 80239ba: f010 fb93 bl 80340e4 + 80239be: 4b0f ldr r3, [pc, #60] ; (80239fc <_ZN8touchgfx11ApplicationC1Ev+0x88>) + 80239c0: b158 cbz r0, 80239da <_ZN8touchgfx11ApplicationC1Ev+0x66> + 80239c2: 801d strh r5, [r3, #0] + 80239c4: 2300 movs r3, #0 + 80239c6: 4a0e ldr r2, [pc, #56] ; (8023a00 <_ZN8touchgfx11ApplicationC1Ev+0x8c>) + 80239c8: 4630 mov r0, r6 + 80239ca: 6013 str r3, [r2, #0] + 80239cc: 4a0d ldr r2, [pc, #52] ; (8023a04 <_ZN8touchgfx11ApplicationC1Ev+0x90>) + 80239ce: 603b str r3, [r7, #0] + 80239d0: 6013 str r3, [r2, #0] + 80239d2: f7ff ff2e bl 8023832 <_ZN8touchgfx11Application12TimerWidgets5clearEv> + 80239d6: 4620 mov r0, r4 + 80239d8: bdf8 pop {r3, r4, r5, r6, r7, pc} + 80239da: f44f 6280 mov.w r2, #1024 ; 0x400 + 80239de: 2002 movs r0, #2 + 80239e0: 801a strh r2, [r3, #0] + 80239e2: 6038 str r0, [r7, #0] + 80239e4: f001 fb26 bl 8025034 <_ZN8touchgfx6Screen4drawEv> + 80239e8: e7ec b.n 80239c4 <_ZN8touchgfx11ApplicationC1Ev+0x50> + 80239ea: bf00 nop + 80239ec: 0803c618 .word 0x0803c618 + 80239f0: 2001e770 .word 0x2001e770 + 80239f4: b5e8b5cd .word 0xb5e8b5cd + 80239f8: f407a5c2 .word 0xf407a5c2 + 80239fc: 20000060 .word 0x20000060 + 8023a00: 2001e780 .word 0x2001e780 + 8023a04: 2001e774 .word 0x2001e774 + +08023a08 <_ZN8touchgfx6VectorINS_4RectELt8EE13quickRemoveAtEt>: + 8023a08: f8b0 3040 ldrh.w r3, [r0, #64] ; 0x40 + 8023a0c: 3b01 subs r3, #1 + 8023a0e: b29b uxth r3, r3 + 8023a10: 428b cmp r3, r1 + 8023a12: f8a0 3040 strh.w r3, [r0, #64] ; 0x40 + 8023a16: b510 push {r4, lr} + 8023a18: d908 bls.n 8023a2c <_ZN8touchgfx6VectorINS_4RectELt8EE13quickRemoveAtEt+0x24> + 8023a1a: eb00 03c3 add.w r3, r0, r3, lsl #3 + 8023a1e: eb00 04c1 add.w r4, r0, r1, lsl #3 + 8023a22: 681a ldr r2, [r3, #0] + 8023a24: f840 2031 str.w r2, [r0, r1, lsl #3] + 8023a28: 685a ldr r2, [r3, #4] + 8023a2a: 6062 str r2, [r4, #4] + 8023a2c: bd10 pop {r4, pc} + ... + +08023a30 <_ZN8touchgfx11Application14invalidateAreaENS_4RectE>: + 8023a30: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8023a34: b08f sub sp, #60 ; 0x3c + 8023a36: 4b8f ldr r3, [pc, #572] ; (8023c74 <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x244>) + 8023a38: 4683 mov fp, r0 + 8023a3a: ac0a add r4, sp, #40 ; 0x28 + 8023a3c: e884 0006 stmia.w r4, {r1, r2} + 8023a40: f9b3 2000 ldrsh.w r2, [r3] + 8023a44: 4620 mov r0, r4 + 8023a46: 4b8c ldr r3, [pc, #560] ; (8023c78 <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x248>) + 8023a48: f9b3 1000 ldrsh.w r1, [r3] + 8023a4c: f7ff fe0f bl 802366e <_ZN8touchgfx4Rect10restrictToEss> + 8023a50: 4620 mov r0, r4 + 8023a52: f7fc fa8e bl 801ff72 <_ZNK8touchgfx4Rect7isEmptyEv> + 8023a56: 2800 cmp r0, #0 + 8023a58: d16a bne.n 8023b30 <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x100> + 8023a5a: 9403 str r4, [sp, #12] + 8023a5c: f8bb 40ec ldrh.w r4, [fp, #236] ; 0xec + 8023a60: f10b 03ac add.w r3, fp, #172 ; 0xac + 8023a64: eb0b 05c4 add.w r5, fp, r4, lsl #3 + 8023a68: 9301 str r3, [sp, #4] + 8023a6a: 35a4 adds r5, #164 ; 0xa4 + 8023a6c: b15c cbz r4, 8023a86 <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x56> + 8023a6e: 4629 mov r1, r5 + 8023a70: 9803 ldr r0, [sp, #12] + 8023a72: f7ff fe4d bl 8023710 <_ZNK8touchgfx4Rect8includesERKS0_> + 8023a76: 3c01 subs r4, #1 + 8023a78: b118 cbz r0, 8023a82 <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x52> + 8023a7a: b2a1 uxth r1, r4 + 8023a7c: 9801 ldr r0, [sp, #4] + 8023a7e: f7ff ffc3 bl 8023a08 <_ZN8touchgfx6VectorINS_4RectELt8EE13quickRemoveAtEt> + 8023a82: 3d08 subs r5, #8 + 8023a84: e7f2 b.n 8023a6c <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x3c> + 8023a86: f8bb a0ec ldrh.w sl, [fp, #236] ; 0xec + 8023a8a: f10a 33ff add.w r3, sl, #4294967295 + 8023a8e: f8cd a010 str.w sl, [sp, #16] + 8023a92: 9302 str r3, [sp, #8] + 8023a94: ea4f 03ca mov.w r3, sl, lsl #3 + 8023a98: f103 04a4 add.w r4, r3, #164 ; 0xa4 + 8023a9c: 9306 str r3, [sp, #24] + 8023a9e: 445c add r4, fp + 8023aa0: 2500 movs r5, #0 + 8023aa2: 4626 mov r6, r4 + 8023aa4: f8cd a014 str.w sl, [sp, #20] + 8023aa8: 462f mov r7, r5 + 8023aaa: 9b05 ldr r3, [sp, #20] + 8023aac: 2b00 cmp r3, #0 + 8023aae: d073 beq.n 8023b98 <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x168> + 8023ab0: 9903 ldr r1, [sp, #12] + 8023ab2: 4630 mov r0, r6 + 8023ab4: f7ff fdb9 bl 802362a <_ZNK8touchgfx4Rect9intersectERKS0_> + 8023ab8: b350 cbz r0, 8023b10 <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0xe0> + 8023aba: f9bd e028 ldrsh.w lr, [sp, #40] ; 0x28 + 8023abe: f9b6 c000 ldrsh.w ip, [r6] + 8023ac2: f9bd 802a ldrsh.w r8, [sp, #42] ; 0x2a + 8023ac6: 45e6 cmp lr, ip + 8023ac8: f9b6 9002 ldrsh.w r9, [r6, #2] + 8023acc: db33 blt.n 8023b36 <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x106> + 8023ace: f8bd 202c ldrh.w r2, [sp, #44] ; 0x2c + 8023ad2: 88b3 ldrh r3, [r6, #4] + 8023ad4: 4472 add r2, lr + 8023ad6: 4463 add r3, ip + 8023ad8: b212 sxth r2, r2 + 8023ada: b21b sxth r3, r3 + 8023adc: 429a cmp r2, r3 + 8023ade: dc2a bgt.n 8023b36 <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x106> + 8023ae0: fa1f f289 uxth.w r2, r9 + 8023ae4: 88f3 ldrh r3, [r6, #6] + 8023ae6: 45c8 cmp r8, r9 + 8023ae8: f8bd 102e ldrh.w r1, [sp, #46] ; 0x2e + 8023aec: 4413 add r3, r2 + 8023aee: fa1f fc88 uxth.w ip, r8 + 8023af2: b29b uxth r3, r3 + 8023af4: fa0f fe83 sxth.w lr, r3 + 8023af8: db0f blt.n 8023b1a <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0xea> + 8023afa: eba3 030c sub.w r3, r3, ip + 8023afe: 1ac9 subs r1, r1, r3 + 8023b00: b209 sxth r1, r1 + 8023b02: 2900 cmp r1, #0 + 8023b04: f8ad 102e strh.w r1, [sp, #46] ; 0x2e + 8023b08: dd12 ble.n 8023b30 <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x100> + 8023b0a: f8ad e02a strh.w lr, [sp, #42] ; 0x2a + 8023b0e: 4605 mov r5, r0 + 8023b10: 9b05 ldr r3, [sp, #20] + 8023b12: 3e08 subs r6, #8 + 8023b14: 3b01 subs r3, #1 + 8023b16: 9305 str r3, [sp, #20] + 8023b18: e7c7 b.n 8023aaa <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x7a> + 8023b1a: 4461 add r1, ip + 8023b1c: b209 sxth r1, r1 + 8023b1e: 4571 cmp r1, lr + 8023b20: dc38 bgt.n 8023b94 <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x164> + 8023b22: eba2 020c sub.w r2, r2, ip + 8023b26: b212 sxth r2, r2 + 8023b28: f8ad 202e strh.w r2, [sp, #46] ; 0x2e + 8023b2c: 2a00 cmp r2, #0 + 8023b2e: dcee bgt.n 8023b0e <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0xde> + 8023b30: b00f add sp, #60 ; 0x3c + 8023b32: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 8023b36: 45c8 cmp r8, r9 + 8023b38: db2c blt.n 8023b94 <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x164> + 8023b3a: 88f3 ldrh r3, [r6, #6] + 8023b3c: 4499 add r9, r3 + 8023b3e: f8bd 302e ldrh.w r3, [sp, #46] ; 0x2e + 8023b42: 4498 add r8, r3 + 8023b44: fa0f f989 sxth.w r9, r9 + 8023b48: fa0f f888 sxth.w r8, r8 + 8023b4c: 45c1 cmp r9, r8 + 8023b4e: db21 blt.n 8023b94 <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x164> + 8023b50: fa1f f28c uxth.w r2, ip + 8023b54: 88b3 ldrh r3, [r6, #4] + 8023b56: 45e6 cmp lr, ip + 8023b58: f8bd 102c ldrh.w r1, [sp, #44] ; 0x2c + 8023b5c: 4413 add r3, r2 + 8023b5e: fa1f f88e uxth.w r8, lr + 8023b62: b29b uxth r3, r3 + 8023b64: fa0f f983 sxth.w r9, r3 + 8023b68: db0a blt.n 8023b80 <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x150> + 8023b6a: eba3 0308 sub.w r3, r3, r8 + 8023b6e: 1ac9 subs r1, r1, r3 + 8023b70: b209 sxth r1, r1 + 8023b72: 2900 cmp r1, #0 + 8023b74: f8ad 102c strh.w r1, [sp, #44] ; 0x2c + 8023b78: ddda ble.n 8023b30 <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x100> + 8023b7a: f8ad 9028 strh.w r9, [sp, #40] ; 0x28 + 8023b7e: e7c6 b.n 8023b0e <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0xde> + 8023b80: 4441 add r1, r8 + 8023b82: b209 sxth r1, r1 + 8023b84: 4549 cmp r1, r9 + 8023b86: dc05 bgt.n 8023b94 <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x164> + 8023b88: eba2 0208 sub.w r2, r2, r8 + 8023b8c: b212 sxth r2, r2 + 8023b8e: f8ad 202c strh.w r2, [sp, #44] ; 0x2c + 8023b92: e7cb b.n 8023b2c <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0xfc> + 8023b94: 4607 mov r7, r0 + 8023b96: e7bb b.n 8023b10 <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0xe0> + 8023b98: 2d00 cmp r5, #0 + 8023b9a: d181 bne.n 8023aa0 <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x70> + 8023b9c: 2f00 cmp r7, #0 + 8023b9e: f000 81dd beq.w 8023f5c <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x52c> + 8023ba2: f9bd 6028 ldrsh.w r6, [sp, #40] ; 0x28 + 8023ba6: f9bd 702a ldrsh.w r7, [sp, #42] ; 0x2a + 8023baa: b2b3 uxth r3, r6 + 8023bac: f8bd a02e ldrh.w sl, [sp, #46] ; 0x2e + 8023bb0: 9305 str r3, [sp, #20] + 8023bb2: 9a05 ldr r2, [sp, #20] + 8023bb4: f8bd 302c ldrh.w r3, [sp, #44] ; 0x2c + 8023bb8: 4413 add r3, r2 + 8023bba: b2ba uxth r2, r7 + 8023bbc: 4492 add sl, r2 + 8023bbe: b29b uxth r3, r3 + 8023bc0: fa1f fa8a uxth.w sl, sl + 8023bc4: fa0f f883 sxth.w r8, r3 + 8023bc8: fa0f f98a sxth.w r9, sl + 8023bcc: e9cd 2307 strd r2, r3, [sp, #28] + 8023bd0: 9b04 ldr r3, [sp, #16] + 8023bd2: 2b00 cmp r3, #0 + 8023bd4: d052 beq.n 8023c7c <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x24c> + 8023bd6: 9903 ldr r1, [sp, #12] + 8023bd8: 4620 mov r0, r4 + 8023bda: f7ff fd26 bl 802362a <_ZNK8touchgfx4Rect9intersectERKS0_> + 8023bde: e9dd 2307 ldrd r2, r3, [sp, #28] + 8023be2: b1c0 cbz r0, 8023c16 <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x1e6> + 8023be4: f9b4 e000 ldrsh.w lr, [r4] + 8023be8: f9b4 1002 ldrsh.w r1, [r4, #2] + 8023bec: 4576 cmp r6, lr + 8023bee: dc22 bgt.n 8023c36 <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x206> + 8023bf0: f8b4 c004 ldrh.w ip, [r4, #4] + 8023bf4: 44f4 add ip, lr + 8023bf6: fa0f fc8c sxth.w ip, ip + 8023bfa: 45e0 cmp r8, ip + 8023bfc: db1b blt.n 8023c36 <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x206> + 8023bfe: 428f cmp r7, r1 + 8023c00: fa1f fc81 uxth.w ip, r1 + 8023c04: 88e1 ldrh r1, [r4, #6] + 8023c06: dc0d bgt.n 8023c24 <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x1f4> + 8023c08: ebaa 0c0c sub.w ip, sl, ip + 8023c0c: f8a4 9002 strh.w r9, [r4, #2] + 8023c10: eba1 010c sub.w r1, r1, ip + 8023c14: 80e1 strh r1, [r4, #6] + 8023c16: 4628 mov r0, r5 + 8023c18: 9904 ldr r1, [sp, #16] + 8023c1a: 3c08 subs r4, #8 + 8023c1c: 4605 mov r5, r0 + 8023c1e: 3901 subs r1, #1 + 8023c20: 9104 str r1, [sp, #16] + 8023c22: e7d3 b.n 8023bcc <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x19c> + 8023c24: 4461 add r1, ip + 8023c26: b209 sxth r1, r1 + 8023c28: 4549 cmp r1, r9 + 8023c2a: dcf5 bgt.n 8023c18 <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x1e8> + 8023c2c: eba2 0c0c sub.w ip, r2, ip + 8023c30: f8a4 c006 strh.w ip, [r4, #6] + 8023c34: e7ef b.n 8023c16 <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x1e6> + 8023c36: 428f cmp r7, r1 + 8023c38: dcee bgt.n 8023c18 <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x1e8> + 8023c3a: f8b4 c006 ldrh.w ip, [r4, #6] + 8023c3e: 4461 add r1, ip + 8023c40: b209 sxth r1, r1 + 8023c42: 4589 cmp r9, r1 + 8023c44: dbe8 blt.n 8023c18 <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x1e8> + 8023c46: 4576 cmp r6, lr + 8023c48: fa1f fc8e uxth.w ip, lr + 8023c4c: 88a1 ldrh r1, [r4, #4] + 8023c4e: dc07 bgt.n 8023c60 <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x230> + 8023c50: eba3 0c0c sub.w ip, r3, ip + 8023c54: f8a4 8000 strh.w r8, [r4] + 8023c58: eba1 010c sub.w r1, r1, ip + 8023c5c: 80a1 strh r1, [r4, #4] + 8023c5e: e7da b.n 8023c16 <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x1e6> + 8023c60: 4461 add r1, ip + 8023c62: b209 sxth r1, r1 + 8023c64: 4588 cmp r8, r1 + 8023c66: dbd7 blt.n 8023c18 <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x1e8> + 8023c68: 9905 ldr r1, [sp, #20] + 8023c6a: eba1 0c0c sub.w ip, r1, ip + 8023c6e: f8a4 c004 strh.w ip, [r4, #4] + 8023c72: e7d0 b.n 8023c16 <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x1e6> + 8023c74: 2001e72a .word 0x2001e72a + 8023c78: 2001e728 .word 0x2001e728 + 8023c7c: 2d00 cmp r5, #0 + 8023c7e: f000 816d beq.w 8023f5c <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x52c> + 8023c82: 9b06 ldr r3, [sp, #24] + 8023c84: 445b add r3, fp + 8023c86: 461c mov r4, r3 + 8023c88: 9b02 ldr r3, [sp, #8] + 8023c8a: 3301 adds r3, #1 + 8023c8c: f000 8166 beq.w 8023f5c <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x52c> + 8023c90: f104 05a4 add.w r5, r4, #164 ; 0xa4 + 8023c94: 9803 ldr r0, [sp, #12] + 8023c96: 4629 mov r1, r5 + 8023c98: f7ff fd3a bl 8023710 <_ZNK8touchgfx4Rect8includesERKS0_> + 8023c9c: b120 cbz r0, 8023ca8 <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x278> + 8023c9e: f8bd 1008 ldrh.w r1, [sp, #8] + 8023ca2: 9801 ldr r0, [sp, #4] + 8023ca4: f7ff feb0 bl 8023a08 <_ZN8touchgfx6VectorINS_4RectELt8EE13quickRemoveAtEt> + 8023ca8: 9903 ldr r1, [sp, #12] + 8023caa: 4628 mov r0, r5 + 8023cac: f7ff fcbd bl 802362a <_ZNK8touchgfx4Rect9intersectERKS0_> + 8023cb0: 2800 cmp r0, #0 + 8023cb2: f000 809c beq.w 8023dee <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x3be> + 8023cb6: f9b4 90a4 ldrsh.w r9, [r4, #164] ; 0xa4 + 8023cba: f9b4 30a8 ldrsh.w r3, [r4, #168] ; 0xa8 + 8023cbe: fa1f f189 uxth.w r1, r9 + 8023cc2: f9bd 0028 ldrsh.w r0, [sp, #40] ; 0x28 + 8023cc6: 9309 str r3, [sp, #36] ; 0x24 + 8023cc8: eb01 0c03 add.w ip, r1, r3 + 8023ccc: b283 uxth r3, r0 + 8023cce: 4548 cmp r0, r9 + 8023cd0: f9bd e02a ldrsh.w lr, [sp, #42] ; 0x2a + 8023cd4: fa1f fa8c uxth.w sl, ip + 8023cd8: f8bd c02c ldrh.w ip, [sp, #44] ; 0x2c + 8023cdc: f9b4 20a6 ldrsh.w r2, [r4, #166] ; 0xa6 + 8023ce0: eb03 050c add.w r5, r3, ip + 8023ce4: b2ad uxth r5, r5 + 8023ce6: 9505 str r5, [sp, #20] + 8023ce8: f9bd 5014 ldrsh.w r5, [sp, #20] + 8023cec: 9504 str r5, [sp, #16] + 8023cee: f8bb 50ec ldrh.w r5, [fp, #236] ; 0xec + 8023cf2: f340 8099 ble.w 8023e28 <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x3f8> + 8023cf6: 1a5b subs r3, r3, r1 + 8023cf8: 4596 cmp lr, r2 + 8023cfa: fa0f f08a sxth.w r0, sl + 8023cfe: b29b uxth r3, r3 + 8023d00: b21e sxth r6, r3 + 8023d02: dd2e ble.n 8023d62 <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x332> + 8023d04: 9f02 ldr r7, [sp, #8] + 8023d06: fa1f fe8e uxth.w lr, lr + 8023d0a: b292 uxth r2, r2 + 8023d0c: f8bd 402e ldrh.w r4, [sp, #46] ; 0x2e + 8023d10: eb0b 08c7 add.w r8, fp, r7, lsl #3 + 8023d14: 9f04 ldr r7, [sp, #16] + 8023d16: ebae 0102 sub.w r1, lr, r2 + 8023d1a: 44a6 add lr, r4 + 8023d1c: 1a3f subs r7, r7, r0 + 8023d1e: f8b8 00b2 ldrh.w r0, [r8, #178] ; 0xb2 + 8023d22: b289 uxth r1, r1 + 8023d24: 4402 add r2, r0 + 8023d26: fa0f fe8e sxth.w lr, lr + 8023d2a: b20d sxth r5, r1 + 8023d2c: b212 sxth r2, r2 + 8023d2e: 436f muls r7, r5 + 8023d30: ebae 0202 sub.w r2, lr, r2 + 8023d34: 4372 muls r2, r6 + 8023d36: 4297 cmp r7, r2 + 8023d38: db09 blt.n 8023d4e <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x31e> + 8023d3a: f8b8 20ac ldrh.w r2, [r8, #172] ; 0xac + 8023d3e: f8a8 50b2 strh.w r5, [r8, #178] ; 0xb2 + 8023d42: 449c add ip, r3 + 8023d44: f8ad 2028 strh.w r2, [sp, #40] ; 0x28 + 8023d48: f8ad c02c strh.w ip, [sp, #44] ; 0x2c + 8023d4c: e686 b.n 8023a5c <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x2c> + 8023d4e: 4421 add r1, r4 + 8023d50: f8b8 30ae ldrh.w r3, [r8, #174] ; 0xae + 8023d54: f8a8 60b0 strh.w r6, [r8, #176] ; 0xb0 + 8023d58: f8ad 102e strh.w r1, [sp, #46] ; 0x2e + 8023d5c: f8ad 302a strh.w r3, [sp, #42] ; 0x2a + 8023d60: e67c b.n 8023a5c <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x2c> + 8023d62: 9f04 ldr r7, [sp, #16] + 8023d64: 42b8 cmp r0, r7 + 8023d66: da27 bge.n 8023db8 <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x388> + 8023d68: 9902 ldr r1, [sp, #8] + 8023d6a: 1a3f subs r7, r7, r0 + 8023d6c: f8bd 502e ldrh.w r5, [sp, #46] ; 0x2e + 8023d70: eb0b 04c1 add.w r4, fp, r1, lsl #3 + 8023d74: eb05 010e add.w r1, r5, lr + 8023d78: fa1f f881 uxth.w r8, r1 + 8023d7c: f8b4 10b2 ldrh.w r1, [r4, #178] ; 0xb2 + 8023d80: 4411 add r1, r2 + 8023d82: fa0f f988 sxth.w r9, r8 + 8023d86: eba2 020e sub.w r2, r2, lr + 8023d8a: eba1 0108 sub.w r1, r1, r8 + 8023d8e: 4372 muls r2, r6 + 8023d90: b289 uxth r1, r1 + 8023d92: fa0f f881 sxth.w r8, r1 + 8023d96: fb08 f707 mul.w r7, r8, r7 + 8023d9a: 42ba cmp r2, r7 + 8023d9c: dc06 bgt.n 8023dac <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x37c> + 8023d9e: f8a4 90ae strh.w r9, [r4, #174] ; 0xae + 8023da2: f8a4 80b2 strh.w r8, [r4, #178] ; 0xb2 + 8023da6: f8b4 20ac ldrh.w r2, [r4, #172] ; 0xac + 8023daa: e7ca b.n 8023d42 <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x312> + 8023dac: 4429 add r1, r5 + 8023dae: f8a4 60b0 strh.w r6, [r4, #176] ; 0xb0 + 8023db2: f8ad 102e strh.w r1, [sp, #46] ; 0x2e + 8023db6: e651 b.n 8023a5c <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x2c> + 8023db8: 9805 ldr r0, [sp, #20] + 8023dba: 2d06 cmp r5, #6 + 8023dbc: ebaa 0000 sub.w r0, sl, r0 + 8023dc0: b280 uxth r0, r0 + 8023dc2: fa0f fe80 sxth.w lr, r0 + 8023dc6: d817 bhi.n 8023df8 <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x3c8> + 8023dc8: 9b04 ldr r3, [sp, #16] + 8023dca: f9b4 10aa ldrsh.w r1, [r4, #170] ; 0xaa + 8023dce: f8a4 30a4 strh.w r3, [r4, #164] ; 0xa4 + 8023dd2: 1c6b adds r3, r5, #1 + 8023dd4: f8a4 e0a8 strh.w lr, [r4, #168] ; 0xa8 + 8023dd8: f8ab 30ec strh.w r3, [fp, #236] ; 0xec + 8023ddc: 9b01 ldr r3, [sp, #4] + 8023dde: 9801 ldr r0, [sp, #4] + 8023de0: eb03 03c5 add.w r3, r3, r5, lsl #3 + 8023de4: f820 9035 strh.w r9, [r0, r5, lsl #3] + 8023de8: 805a strh r2, [r3, #2] + 8023dea: 809e strh r6, [r3, #4] + 8023dec: 80d9 strh r1, [r3, #6] + 8023dee: 9b02 ldr r3, [sp, #8] + 8023df0: 3c08 subs r4, #8 + 8023df2: 3b01 subs r3, #1 + 8023df4: 9302 str r3, [sp, #8] + 8023df6: e747 b.n 8023c88 <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x258> + 8023df8: 9a02 ldr r2, [sp, #8] + 8023dfa: 45b6 cmp lr, r6 + 8023dfc: ea4f 02c2 mov.w r2, r2, lsl #3 + 8023e00: db0d blt.n 8023e1e <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x3ee> + 8023e02: 449c add ip, r3 + 8023e04: 445a add r2, fp + 8023e06: f8ad 9028 strh.w r9, [sp, #40] ; 0x28 + 8023e0a: fa1f fc8c uxth.w ip, ip + 8023e0e: f8a2 e0b0 strh.w lr, [r2, #176] ; 0xb0 + 8023e12: f8ad c02c strh.w ip, [sp, #44] ; 0x2c + 8023e16: 448c add ip, r1 + 8023e18: f8a2 c0ac strh.w ip, [r2, #172] ; 0xac + 8023e1c: e61e b.n 8023a5c <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x2c> + 8023e1e: 445a add r2, fp + 8023e20: 4484 add ip, r0 + 8023e22: f8a2 60b0 strh.w r6, [r2, #176] ; 0xb0 + 8023e26: e78f b.n 8023d48 <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x318> + 8023e28: fa1f f18e uxth.w r1, lr + 8023e2c: f8bd 602e ldrh.w r6, [sp, #46] ; 0x2e + 8023e30: b293 uxth r3, r2 + 8023e32: 4596 cmp lr, r2 + 8023e34: eb01 0806 add.w r8, r1, r6 + 8023e38: 9306 str r3, [sp, #24] + 8023e3a: fa1f f888 uxth.w r8, r8 + 8023e3e: 9f06 ldr r7, [sp, #24] + 8023e40: fa0f f388 sxth.w r3, r8 + 8023e44: 9307 str r3, [sp, #28] + 8023e46: f8b4 30aa ldrh.w r3, [r4, #170] ; 0xaa + 8023e4a: 443b add r3, r7 + 8023e4c: b29b uxth r3, r3 + 8023e4e: 9308 str r3, [sp, #32] + 8023e50: da24 bge.n 8023e9c <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x46c> + 8023e52: 9905 ldr r1, [sp, #20] + 8023e54: eba3 0308 sub.w r3, r3, r8 + 8023e58: eba2 020e sub.w r2, r2, lr + 8023e5c: eba9 0000 sub.w r0, r9, r0 + 8023e60: ebaa 0401 sub.w r4, sl, r1 + 8023e64: b29b uxth r3, r3 + 8023e66: b2a4 uxth r4, r4 + 8023e68: b219 sxth r1, r3 + 8023e6a: b225 sxth r5, r4 + 8023e6c: 4348 muls r0, r1 + 8023e6e: 436a muls r2, r5 + 8023e70: 4282 cmp r2, r0 + 8023e72: 9a02 ldr r2, [sp, #8] + 8023e74: ea4f 02c2 mov.w r2, r2, lsl #3 + 8023e78: 445a add r2, fp + 8023e7a: dc06 bgt.n 8023e8a <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x45a> + 8023e7c: 9b07 ldr r3, [sp, #28] + 8023e7e: 44a4 add ip, r4 + 8023e80: f8a2 10b2 strh.w r1, [r2, #178] ; 0xb2 + 8023e84: f8a2 30ae strh.w r3, [r2, #174] ; 0xae + 8023e88: e75e b.n 8023d48 <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x318> + 8023e8a: 9904 ldr r1, [sp, #16] + 8023e8c: f8a2 50b0 strh.w r5, [r2, #176] ; 0xb0 + 8023e90: f8a2 10ac strh.w r1, [r2, #172] ; 0xac + 8023e94: 4433 add r3, r6 + 8023e96: f8ad 302e strh.w r3, [sp, #46] ; 0x2e + 8023e9a: e5df b.n 8023a5c <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x2c> + 8023e9c: 9f06 ldr r7, [sp, #24] + 8023e9e: 9b04 ldr r3, [sp, #16] + 8023ea0: 1bc9 subs r1, r1, r7 + 8023ea2: fa0f f78a sxth.w r7, sl + 8023ea6: b289 uxth r1, r1 + 8023ea8: 429f cmp r7, r3 + 8023eaa: fa0f fe81 sxth.w lr, r1 + 8023eae: dd23 ble.n 8023ef8 <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x4c8> + 8023eb0: 9a05 ldr r2, [sp, #20] + 8023eb2: eba9 0000 sub.w r0, r9, r0 + 8023eb6: f9bd 3020 ldrsh.w r3, [sp, #32] + 8023eba: ebaa 0202 sub.w r2, sl, r2 + 8023ebe: 9d07 ldr r5, [sp, #28] + 8023ec0: fb0e f000 mul.w r0, lr, r0 + 8023ec4: b292 uxth r2, r2 + 8023ec6: eba5 0a03 sub.w sl, r5, r3 + 8023eca: 9b02 ldr r3, [sp, #8] + 8023ecc: b214 sxth r4, r2 + 8023ece: 00db lsls r3, r3, #3 + 8023ed0: fb04 fa0a mul.w sl, r4, sl + 8023ed4: 445b add r3, fp + 8023ed6: 4550 cmp r0, sl + 8023ed8: db03 blt.n 8023ee2 <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x4b2> + 8023eda: f8a3 e0b2 strh.w lr, [r3, #178] ; 0xb2 + 8023ede: 4494 add ip, r2 + 8023ee0: e732 b.n 8023d48 <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x318> + 8023ee2: 9a04 ldr r2, [sp, #16] + 8023ee4: 4431 add r1, r6 + 8023ee6: f8a3 40b0 strh.w r4, [r3, #176] ; 0xb0 + 8023eea: f8a3 20ac strh.w r2, [r3, #172] ; 0xac + 8023eee: f8b3 30ae ldrh.w r3, [r3, #174] ; 0xae + 8023ef2: f8ad 302a strh.w r3, [sp, #42] ; 0x2a + 8023ef6: e75c b.n 8023db2 <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x382> + 8023ef8: 9b08 ldr r3, [sp, #32] + 8023efa: 2d06 cmp r5, #6 + 8023efc: eba3 0308 sub.w r3, r3, r8 + 8023f00: b29b uxth r3, r3 + 8023f02: b218 sxth r0, r3 + 8023f04: d813 bhi.n 8023f2e <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x4fe> + 8023f06: 9b07 ldr r3, [sp, #28] + 8023f08: f8a4 00aa strh.w r0, [r4, #170] ; 0xaa + 8023f0c: f8a4 30a6 strh.w r3, [r4, #166] ; 0xa6 + 8023f10: 1c6b adds r3, r5, #1 + 8023f12: 9901 ldr r1, [sp, #4] + 8023f14: f8ab 30ec strh.w r3, [fp, #236] ; 0xec + 8023f18: 9b01 ldr r3, [sp, #4] + 8023f1a: f821 9035 strh.w r9, [r1, r5, lsl #3] + 8023f1e: eb03 03c5 add.w r3, r3, r5, lsl #3 + 8023f22: 805a strh r2, [r3, #2] + 8023f24: 9a09 ldr r2, [sp, #36] ; 0x24 + 8023f26: f8a3 e006 strh.w lr, [r3, #6] + 8023f2a: 809a strh r2, [r3, #4] + 8023f2c: e75f b.n 8023dee <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x3be> + 8023f2e: 9c02 ldr r4, [sp, #8] + 8023f30: 4570 cmp r0, lr + 8023f32: ea4f 04c4 mov.w r4, r4, lsl #3 + 8023f36: db0d blt.n 8023f54 <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x524> + 8023f38: 4431 add r1, r6 + 8023f3a: 9b06 ldr r3, [sp, #24] + 8023f3c: 445c add r4, fp + 8023f3e: f8ad 202a strh.w r2, [sp, #42] ; 0x2a + 8023f42: b289 uxth r1, r1 + 8023f44: f8a4 00b2 strh.w r0, [r4, #178] ; 0xb2 + 8023f48: f8ad 102e strh.w r1, [sp, #46] ; 0x2e + 8023f4c: 4419 add r1, r3 + 8023f4e: f8a4 10ae strh.w r1, [r4, #174] ; 0xae + 8023f52: e583 b.n 8023a5c <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x2c> + 8023f54: 445c add r4, fp + 8023f56: f8a4 e0b2 strh.w lr, [r4, #178] ; 0xb2 + 8023f5a: e79b b.n 8023e94 <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x464> + 8023f5c: f8bb 40ec ldrh.w r4, [fp, #236] ; 0xec + 8023f60: f64f 76ff movw r6, #65535 ; 0xffff + 8023f64: 1e65 subs r5, r4, #1 + 8023f66: eb0b 04c4 add.w r4, fp, r4, lsl #3 + 8023f6a: b2ad uxth r5, r5 + 8023f6c: 42b5 cmp r5, r6 + 8023f6e: d044 beq.n 8023ffa <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x5ca> + 8023f70: f9bd 202a ldrsh.w r2, [sp, #42] ; 0x2a + 8023f74: f9b4 00a6 ldrsh.w r0, [r4, #166] ; 0xa6 + 8023f78: f9bd 1028 ldrsh.w r1, [sp, #40] ; 0x28 + 8023f7c: 4282 cmp r2, r0 + 8023f7e: f9b4 70a4 ldrsh.w r7, [r4, #164] ; 0xa4 + 8023f82: d11f bne.n 8023fc4 <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x594> + 8023f84: f9bd c02e ldrsh.w ip, [sp, #46] ; 0x2e + 8023f88: f9b4 30aa ldrsh.w r3, [r4, #170] ; 0xaa + 8023f8c: 459c cmp ip, r3 + 8023f8e: d119 bne.n 8023fc4 <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x594> + 8023f90: f8b4 30a8 ldrh.w r3, [r4, #168] ; 0xa8 + 8023f94: f8bd 202c ldrh.w r2, [sp, #44] ; 0x2c + 8023f98: 19d8 adds r0, r3, r7 + 8023f9a: b200 sxth r0, r0 + 8023f9c: 4288 cmp r0, r1 + 8023f9e: d109 bne.n 8023fb4 <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x584> + 8023fa0: f8ad 7028 strh.w r7, [sp, #40] ; 0x28 + 8023fa4: 4413 add r3, r2 + 8023fa6: f8ad 302c strh.w r3, [sp, #44] ; 0x2c + 8023faa: 4629 mov r1, r5 + 8023fac: 9801 ldr r0, [sp, #4] + 8023fae: f7ff fd2b bl 8023a08 <_ZN8touchgfx6VectorINS_4RectELt8EE13quickRemoveAtEt> + 8023fb2: e003 b.n 8023fbc <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x58c> + 8023fb4: 4411 add r1, r2 + 8023fb6: b209 sxth r1, r1 + 8023fb8: 42b9 cmp r1, r7 + 8023fba: d0f3 beq.n 8023fa4 <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x574> + 8023fbc: 3d01 subs r5, #1 + 8023fbe: 3c08 subs r4, #8 + 8023fc0: b2ad uxth r5, r5 + 8023fc2: e7d3 b.n 8023f6c <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x53c> + 8023fc4: 42b9 cmp r1, r7 + 8023fc6: d1f9 bne.n 8023fbc <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x58c> + 8023fc8: f9bd 102c ldrsh.w r1, [sp, #44] ; 0x2c + 8023fcc: f9b4 30a8 ldrsh.w r3, [r4, #168] ; 0xa8 + 8023fd0: 4299 cmp r1, r3 + 8023fd2: d1f3 bne.n 8023fbc <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x58c> + 8023fd4: f8b4 30aa ldrh.w r3, [r4, #170] ; 0xaa + 8023fd8: f8bd 102e ldrh.w r1, [sp, #46] ; 0x2e + 8023fdc: 181f adds r7, r3, r0 + 8023fde: b23f sxth r7, r7 + 8023fe0: 42ba cmp r2, r7 + 8023fe2: d105 bne.n 8023ff0 <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x5c0> + 8023fe4: f8ad 002a strh.w r0, [sp, #42] ; 0x2a + 8023fe8: 440b add r3, r1 + 8023fea: f8ad 302e strh.w r3, [sp, #46] ; 0x2e + 8023fee: e7dc b.n 8023faa <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x57a> + 8023ff0: 440a add r2, r1 + 8023ff2: b212 sxth r2, r2 + 8023ff4: 4290 cmp r0, r2 + 8023ff6: d1e1 bne.n 8023fbc <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x58c> + 8023ff8: e7f6 b.n 8023fe8 <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x5b8> + 8023ffa: f8bb 60ec ldrh.w r6, [fp, #236] ; 0xec + 8023ffe: 2e07 cmp r6, #7 + 8024000: ea4f 04c6 mov.w r4, r6, lsl #3 + 8024004: d812 bhi.n 802402c <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x5fc> + 8024006: 1c75 adds r5, r6, #1 + 8024008: f9bd 0028 ldrsh.w r0, [sp, #40] ; 0x28 + 802400c: f9bd 102a ldrsh.w r1, [sp, #42] ; 0x2a + 8024010: f8ab 50ec strh.w r5, [fp, #236] ; 0xec + 8024014: 9d01 ldr r5, [sp, #4] + 8024016: f9bd 202c ldrsh.w r2, [sp, #44] ; 0x2c + 802401a: 442c add r4, r5 + 802401c: f9bd 302e ldrsh.w r3, [sp, #46] ; 0x2e + 8024020: f825 0036 strh.w r0, [r5, r6, lsl #3] + 8024024: 8061 strh r1, [r4, #2] + 8024026: 80a2 strh r2, [r4, #4] + 8024028: 80e3 strh r3, [r4, #6] + 802402a: e581 b.n 8023b30 <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x100> + 802402c: f10b 03ac add.w r3, fp, #172 ; 0xac + 8024030: 3e01 subs r6, #1 + 8024032: 445c add r4, fp + 8024034: f06f 4a00 mvn.w sl, #2147483648 ; 0x80000000 + 8024038: f04f 37ff mov.w r7, #4294967295 + 802403c: 2500 movs r5, #0 + 802403e: 9305 str r3, [sp, #20] + 8024040: f9b4 30a8 ldrsh.w r3, [r4, #168] ; 0xa8 + 8024044: 1e72 subs r2, r6, #1 + 8024046: 9302 str r3, [sp, #8] + 8024048: 4691 mov r9, r2 + 802404a: f9b4 30aa ldrsh.w r3, [r4, #170] ; 0xaa + 802404e: 9304 str r3, [sp, #16] + 8024050: f104 03a4 add.w r3, r4, #164 ; 0xa4 + 8024054: f1b9 3fff cmp.w r9, #4294967295 + 8024058: 6818 ldr r0, [r3, #0] + 802405a: f10d 0c30 add.w ip, sp, #48 ; 0x30 + 802405e: 9207 str r2, [sp, #28] + 8024060: bf16 itet ne + 8024062: 9905 ldrne r1, [sp, #20] + 8024064: f8dd e00c ldreq.w lr, [sp, #12] + 8024068: eb01 0ec9 addne.w lr, r1, r9, lsl #3 + 802406c: 9306 str r3, [sp, #24] + 802406e: f8be 1006 ldrh.w r1, [lr, #6] + 8024072: f8be 8004 ldrh.w r8, [lr, #4] + 8024076: fb18 f801 smulbb r8, r8, r1 + 802407a: 6859 ldr r1, [r3, #4] + 802407c: e8ac 0003 stmia.w ip!, {r0, r1} + 8024080: 4671 mov r1, lr + 8024082: a80c add r0, sp, #48 ; 0x30 + 8024084: f7ff fb6a bl 802375c <_ZN8touchgfx4Rect11expandToFitERKS0_> + 8024088: f8bd 1036 ldrh.w r1, [sp, #54] ; 0x36 + 802408c: f8bd 0034 ldrh.w r0, [sp, #52] ; 0x34 + 8024090: f04f 0c08 mov.w ip, #8 + 8024094: 9b04 ldr r3, [sp, #16] + 8024096: 9a02 ldr r2, [sp, #8] + 8024098: fb10 f001 smulbb r0, r0, r1 + 802409c: fb02 8803 mla r8, r2, r3, r8 + 80240a0: eba0 0108 sub.w r1, r0, r8 + 80240a4: fb90 f0fc sdiv r0, r0, ip + 80240a8: 4288 cmp r0, r1 + 80240aa: dc20 bgt.n 80240ee <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x6be> + 80240ac: 4551 cmp r1, sl + 80240ae: e9dd 3206 ldrd r3, r2, [sp, #24] + 80240b2: da03 bge.n 80240bc <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x68c> + 80240b4: b1d9 cbz r1, 80240ee <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x6be> + 80240b6: 468a mov sl, r1 + 80240b8: 464f mov r7, r9 + 80240ba: 4635 mov r5, r6 + 80240bc: f109 39ff add.w r9, r9, #4294967295 + 80240c0: f119 0f02 cmn.w r9, #2 + 80240c4: d1c6 bne.n 8024054 <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x624> + 80240c6: 4616 mov r6, r2 + 80240c8: 3201 adds r2, #1 + 80240ca: f1a4 0408 sub.w r4, r4, #8 + 80240ce: d1b7 bne.n 8024040 <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x610> + 80240d0: 9b01 ldr r3, [sp, #4] + 80240d2: b2ac uxth r4, r5 + 80240d4: 00ed lsls r5, r5, #3 + 80240d6: 1958 adds r0, r3, r5 + 80240d8: 1c7b adds r3, r7, #1 + 80240da: d10b bne.n 80240f4 <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x6c4> + 80240dc: 4601 mov r1, r0 + 80240de: 9803 ldr r0, [sp, #12] + 80240e0: f7ff fb3c bl 802375c <_ZN8touchgfx4Rect11expandToFitERKS0_> + 80240e4: 4621 mov r1, r4 + 80240e6: 9801 ldr r0, [sp, #4] + 80240e8: f7ff fc8e bl 8023a08 <_ZN8touchgfx6VectorINS_4RectELt8EE13quickRemoveAtEt> + 80240ec: e4b6 b.n 8023a5c <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x2c> + 80240ee: 464f mov r7, r9 + 80240f0: 4635 mov r5, r6 + 80240f2: e7ed b.n 80240d0 <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x6a0> + 80240f4: 9b01 ldr r3, [sp, #4] + 80240f6: 00ff lsls r7, r7, #3 + 80240f8: 445d add r5, fp + 80240fa: 19d9 adds r1, r3, r7 + 80240fc: 445f add r7, fp + 80240fe: f7ff fb2d bl 802375c <_ZN8touchgfx4Rect11expandToFitERKS0_> + 8024102: 9b03 ldr r3, [sp, #12] + 8024104: cb03 ldmia r3!, {r0, r1} + 8024106: 9b03 ldr r3, [sp, #12] + 8024108: f8c7 00ac str.w r0, [r7, #172] ; 0xac + 802410c: f8c7 10b0 str.w r1, [r7, #176] ; 0xb0 + 8024110: f855 0fac ldr.w r0, [r5, #172]! + 8024114: 6869 ldr r1, [r5, #4] + 8024116: c303 stmia r3!, {r0, r1} + 8024118: e7e4 b.n 80240e4 <_ZN8touchgfx11Application14invalidateAreaENS_4RectE+0x6b4> + 802411a: bf00 nop + +0802411c <_ZN8touchgfx11Application15drawCachedAreasEv>: + 802411c: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8024120: f500 7698 add.w r6, r0, #304 ; 0x130 + 8024124: b09b sub sp, #108 ; 0x6c + 8024126: 4604 mov r4, r0 + 8024128: 4630 mov r0, r6 + 802412a: f7fb ff22 bl 801ff72 <_ZNK8touchgfx4Rect7isEmptyEv> + 802412e: 4605 mov r5, r0 + 8024130: b948 cbnz r0, 8024146 <_ZN8touchgfx11Application15drawCachedAreasEv+0x2a> + 8024132: 6823 ldr r3, [r4, #0] + 8024134: 4620 mov r0, r4 + 8024136: 6c1b ldr r3, [r3, #64] ; 0x40 + 8024138: e896 0006 ldmia.w r6, {r1, r2} + 802413c: 4798 blx r3 + 802413e: f8c4 5130 str.w r5, [r4, #304] ; 0x130 + 8024142: f8c4 5134 str.w r5, [r4, #308] ; 0x134 + 8024146: 4bc5 ldr r3, [pc, #788] ; (802445c <_ZN8touchgfx11Application15drawCachedAreasEv+0x340>) + 8024148: 681b ldr r3, [r3, #0] + 802414a: 2b00 cmp r3, #0 + 802414c: d03f beq.n 80241ce <_ZN8touchgfx11Application15drawCachedAreasEv+0xb2> + 802414e: 4dc4 ldr r5, [pc, #784] ; (8024460 <_ZN8touchgfx11Application15drawCachedAreasEv+0x344>) + 8024150: 4628 mov r0, r5 + 8024152: f7fb ff0e bl 801ff72 <_ZNK8touchgfx4Rect7isEmptyEv> + 8024156: 4606 mov r6, r0 + 8024158: 2800 cmp r0, #0 + 802415a: d138 bne.n 80241ce <_ZN8touchgfx11Application15drawCachedAreasEv+0xb2> + 802415c: 4628 mov r0, r5 + 802415e: f7ff f991 bl 8023484 <_ZN8touchgfx21DisplayTransformation29transformFrameBufferToDisplayERNS_4RectE> + 8024162: 6823 ldr r3, [r4, #0] + 8024164: 6829 ldr r1, [r5, #0] + 8024166: 4620 mov r0, r4 + 8024168: 6c1b ldr r3, [r3, #64] ; 0x40 + 802416a: 686a ldr r2, [r5, #4] + 802416c: 4798 blx r3 + 802416e: 802e strh r6, [r5, #0] + 8024170: 806e strh r6, [r5, #2] + 8024172: 80ae strh r6, [r5, #4] + 8024174: 80ee strh r6, [r5, #6] + 8024176: f10d 0824 add.w r8, sp, #36 ; 0x24 + 802417a: 4dba ldr r5, [pc, #744] ; (8024464 <_ZN8touchgfx11Application15drawCachedAreasEv+0x348>) + 802417c: 4640 mov r0, r8 + 802417e: f7ff fbe7 bl 8023950 <_ZN8touchgfx6VectorINS_4RectELt8EEC1Ev> + 8024182: 882e ldrh r6, [r5, #0] + 8024184: f8b4 70ec ldrh.w r7, [r4, #236] ; 0xec + 8024188: f104 00ac add.w r0, r4, #172 ; 0xac + 802418c: 4633 mov r3, r6 + 802418e: 42bb cmp r3, r7 + 8024190: d224 bcs.n 80241dc <_ZN8touchgfx11Application15drawCachedAreasEv+0xc0> + 8024192: f8bd 1064 ldrh.w r1, [sp, #100] ; 0x64 + 8024196: 2907 cmp r1, #7 + 8024198: d816 bhi.n 80241c8 <_ZN8touchgfx11Application15drawCachedAreasEv+0xac> + 802419a: eb00 02c3 add.w r2, r0, r3, lsl #3 + 802419e: f930 9033 ldrsh.w r9, [r0, r3, lsl #3] + 80241a2: f9b2 a002 ldrsh.w sl, [r2, #2] + 80241a6: f9b2 e004 ldrsh.w lr, [r2, #4] + 80241aa: f9b2 c006 ldrsh.w ip, [r2, #6] + 80241ae: 1c4a adds r2, r1, #1 + 80241b0: f8ad 2064 strh.w r2, [sp, #100] ; 0x64 + 80241b4: eb08 02c1 add.w r2, r8, r1, lsl #3 + 80241b8: f828 9031 strh.w r9, [r8, r1, lsl #3] + 80241bc: f8a2 a002 strh.w sl, [r2, #2] + 80241c0: f8a2 e004 strh.w lr, [r2, #4] + 80241c4: f8a2 c006 strh.w ip, [r2, #6] + 80241c8: 3301 adds r3, #1 + 80241ca: b29b uxth r3, r3 + 80241cc: e7df b.n 802418e <_ZN8touchgfx11Application15drawCachedAreasEv+0x72> + 80241ce: f8b4 30ec ldrh.w r3, [r4, #236] ; 0xec + 80241d2: 2b00 cmp r3, #0 + 80241d4: d1cf bne.n 8024176 <_ZN8touchgfx11Application15drawCachedAreasEv+0x5a> + 80241d6: b01b add sp, #108 ; 0x6c + 80241d8: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 80241dc: f8b4 312e ldrh.w r3, [r4, #302] ; 0x12e + 80241e0: 42b3 cmp r3, r6 + 80241e2: d90c bls.n 80241fe <_ZN8touchgfx11Application15drawCachedAreasEv+0xe2> + 80241e4: eb04 03c6 add.w r3, r4, r6, lsl #3 + 80241e8: 6822 ldr r2, [r4, #0] + 80241ea: 3601 adds r6, #1 + 80241ec: 4620 mov r0, r4 + 80241ee: 6c17 ldr r7, [r2, #64] ; 0x40 + 80241f0: f8d3 10ee ldr.w r1, [r3, #238] ; 0xee + 80241f4: b2b6 uxth r6, r6 + 80241f6: f8d3 20f2 ldr.w r2, [r3, #242] ; 0xf2 + 80241fa: 47b8 blx r7 + 80241fc: e7ee b.n 80241dc <_ZN8touchgfx11Application15drawCachedAreasEv+0xc0> + 80241fe: 4a9a ldr r2, [pc, #616] ; (8024468 <_ZN8touchgfx11Application15drawCachedAreasEv+0x34c>) + 8024200: 6813 ldr r3, [r2, #0] + 8024202: 4691 mov r9, r2 + 8024204: f893 3048 ldrb.w r3, [r3, #72] ; 0x48 + 8024208: 2b01 cmp r3, #1 + 802420a: f040 80e0 bne.w 80243ce <_ZN8touchgfx11Application15drawCachedAreasEv+0x2b2> + 802420e: 8829 ldrh r1, [r5, #0] + 8024210: 2600 movs r6, #0 + 8024212: f8b4 70ec ldrh.w r7, [r4, #236] ; 0xec + 8024216: eb04 03c1 add.w r3, r4, r1, lsl #3 + 802421a: 33ae adds r3, #174 ; 0xae + 802421c: 428f cmp r7, r1 + 802421e: f103 0308 add.w r3, r3, #8 + 8024222: dd0a ble.n 802423a <_ZN8touchgfx11Application15drawCachedAreasEv+0x11e> + 8024224: f833 2c04 ldrh.w r2, [r3, #-4] + 8024228: 3101 adds r1, #1 + 802422a: f833 0c08 ldrh.w r0, [r3, #-8] + 802422e: 4402 add r2, r0 + 8024230: b212 sxth r2, r2 + 8024232: 4296 cmp r6, r2 + 8024234: bfb8 it lt + 8024236: 4616 movlt r6, r2 + 8024238: e7f0 b.n 802421c <_ZN8touchgfx11Application15drawCachedAreasEv+0x100> + 802423a: 4b8c ldr r3, [pc, #560] ; (802446c <_ZN8touchgfx11Application15drawCachedAreasEv+0x350>) + 802423c: f8df 9228 ldr.w r9, [pc, #552] ; 8024468 <_ZN8touchgfx11Application15drawCachedAreasEv+0x34c> + 8024240: 881b ldrh r3, [r3, #0] + 8024242: 2b0f cmp r3, #15 + 8024244: bf8c ite hi + 8024246: ea4f 0bd3 movhi.w fp, r3, lsr #3 + 802424a: f04f 0b01 movls.w fp, #1 + 802424e: 2300 movs r3, #0 + 8024250: e9cd 3305 strd r3, r3, [sp, #20] + 8024254: f8bd 7016 ldrh.w r7, [sp, #22] + 8024258: f8bd 001a ldrh.w r0, [sp, #26] + 802425c: 4b82 ldr r3, [pc, #520] ; (8024468 <_ZN8touchgfx11Application15drawCachedAreasEv+0x34c>) + 802425e: 4438 add r0, r7 + 8024260: b207 sxth r7, r0 + 8024262: 6818 ldr r0, [r3, #0] + 8024264: 42b7 cmp r7, r6 + 8024266: 6803 ldr r3, [r0, #0] + 8024268: f280 8083 bge.w 8024372 <_ZN8touchgfx11Application15drawCachedAreasEv+0x256> + 802426c: f8d3 309c ldr.w r3, [r3, #156] ; 0x9c + 8024270: 4798 blx r3 + 8024272: eb07 030b add.w r3, r7, fp + 8024276: 4298 cmp r0, r3 + 8024278: da07 bge.n 802428a <_ZN8touchgfx11Application15drawCachedAreasEv+0x16e> + 802427a: 42b0 cmp r0, r6 + 802427c: da05 bge.n 802428a <_ZN8touchgfx11Application15drawCachedAreasEv+0x16e> + 802427e: 4287 cmp r7, r0 + 8024280: dd6c ble.n 802435c <_ZN8touchgfx11Application15drawCachedAreasEv+0x240> + 8024282: 2f00 cmp r7, #0 + 8024284: dd6a ble.n 802435c <_ZN8touchgfx11Application15drawCachedAreasEv+0x240> + 8024286: 4630 mov r0, r6 + 8024288: e004 b.n 8024294 <_ZN8touchgfx11Application15drawCachedAreasEv+0x178> + 802428a: 4287 cmp r7, r0 + 802428c: dcfb bgt.n 8024286 <_ZN8touchgfx11Application15drawCachedAreasEv+0x16a> + 802428e: 42b0 cmp r0, r6 + 8024290: bfa8 it ge + 8024292: 4630 movge r0, r6 + 8024294: 4b76 ldr r3, [pc, #472] ; (8024470 <_ZN8touchgfx11Application15drawCachedAreasEv+0x354>) + 8024296: 1bc0 subs r0, r0, r7 + 8024298: 2200 movs r2, #0 + 802429a: f8ad 7016 strh.w r7, [sp, #22] + 802429e: f9b3 3000 ldrsh.w r3, [r3] + 80242a2: 882f ldrh r7, [r5, #0] + 80242a4: f8ad 2014 strh.w r2, [sp, #20] + 80242a8: f8ad 3018 strh.w r3, [sp, #24] + 80242ac: f8ad 001a strh.w r0, [sp, #26] + 80242b0: f8b4 30ec ldrh.w r3, [r4, #236] ; 0xec + 80242b4: 42bb cmp r3, r7 + 80242b6: d9cd bls.n 8024254 <_ZN8touchgfx11Application15drawCachedAreasEv+0x138> + 80242b8: eb04 02c7 add.w r2, r4, r7, lsl #3 + 80242bc: ab07 add r3, sp, #28 + 80242be: f852 0fac ldr.w r0, [r2, #172]! + 80242c2: 6851 ldr r1, [r2, #4] + 80242c4: c303 stmia r3!, {r0, r1} + 80242c6: a905 add r1, sp, #20 + 80242c8: a807 add r0, sp, #28 + 80242ca: f7ff f9ae bl 802362a <_ZNK8touchgfx4Rect9intersectERKS0_> + 80242ce: 2800 cmp r0, #0 + 80242d0: d04c beq.n 802436c <_ZN8touchgfx11Application15drawCachedAreasEv+0x250> + 80242d2: f9bd 001c ldrsh.w r0, [sp, #28] + 80242d6: f9bd 2014 ldrsh.w r2, [sp, #20] + 80242da: f8bd a020 ldrh.w sl, [sp, #32] + 80242de: 4686 mov lr, r0 + 80242e0: 4290 cmp r0, r2 + 80242e2: f9bd 101e ldrsh.w r1, [sp, #30] + 80242e6: 4450 add r0, sl + 80242e8: f8bd a018 ldrh.w sl, [sp, #24] + 80242ec: bfb8 it lt + 80242ee: 4696 movlt lr, r2 + 80242f0: f9bd 3016 ldrsh.w r3, [sp, #22] + 80242f4: 4452 add r2, sl + 80242f6: b280 uxth r0, r0 + 80242f8: 4299 cmp r1, r3 + 80242fa: 468c mov ip, r1 + 80242fc: b292 uxth r2, r2 + 80242fe: 9302 str r3, [sp, #8] + 8024300: bfb8 it lt + 8024302: 469c movlt ip, r3 + 8024304: b203 sxth r3, r0 + 8024306: fa0f fa82 sxth.w sl, r2 + 802430a: f8ad e01c strh.w lr, [sp, #28] + 802430e: f8ad c01e strh.w ip, [sp, #30] + 8024312: 4553 cmp r3, sl + 8024314: bfb8 it lt + 8024316: 4602 movlt r2, r0 + 8024318: 9b02 ldr r3, [sp, #8] + 802431a: eba2 020e sub.w r2, r2, lr + 802431e: f8ad 2020 strh.w r2, [sp, #32] + 8024322: f8bd 2022 ldrh.w r2, [sp, #34] ; 0x22 + 8024326: 4411 add r1, r2 + 8024328: f8bd 201a ldrh.w r2, [sp, #26] + 802432c: 4413 add r3, r2 + 802432e: b289 uxth r1, r1 + 8024330: b29b uxth r3, r3 + 8024332: b208 sxth r0, r1 + 8024334: b21a sxth r2, r3 + 8024336: 4290 cmp r0, r2 + 8024338: bfb8 it lt + 802433a: 460b movlt r3, r1 + 802433c: eba3 030c sub.w r3, r3, ip + 8024340: f8ad 3022 strh.w r3, [sp, #34] ; 0x22 + 8024344: a807 add r0, sp, #28 + 8024346: f7fb fe14 bl 801ff72 <_ZNK8touchgfx4Rect7isEmptyEv> + 802434a: b920 cbnz r0, 8024356 <_ZN8touchgfx11Application15drawCachedAreasEv+0x23a> + 802434c: 6823 ldr r3, [r4, #0] + 802434e: a907 add r1, sp, #28 + 8024350: 4620 mov r0, r4 + 8024352: 6c9b ldr r3, [r3, #72] ; 0x48 + 8024354: 4798 blx r3 + 8024356: 3701 adds r7, #1 + 8024358: b2bf uxth r7, r7 + 802435a: e7a9 b.n 80242b0 <_ZN8touchgfx11Application15drawCachedAreasEv+0x194> + 802435c: f8d9 0000 ldr.w r0, [r9] + 8024360: 2101 movs r1, #1 + 8024362: 6803 ldr r3, [r0, #0] + 8024364: f8d3 3098 ldr.w r3, [r3, #152] ; 0x98 + 8024368: 4798 blx r3 + 802436a: e773 b.n 8024254 <_ZN8touchgfx11Application15drawCachedAreasEv+0x138> + 802436c: e9cd 0007 strd r0, r0, [sp, #28] + 8024370: e7e8 b.n 8024344 <_ZN8touchgfx11Application15drawCachedAreasEv+0x228> + 8024372: 6a5b ldr r3, [r3, #36] ; 0x24 + 8024374: 4798 blx r3 + 8024376: 4b3f ldr r3, [pc, #252] ; (8024474 <_ZN8touchgfx11Application15drawCachedAreasEv+0x358>) + 8024378: 781b ldrb r3, [r3, #0] + 802437a: 2b00 cmp r3, #0 + 802437c: f43f af2b beq.w 80241d6 <_ZN8touchgfx11Application15drawCachedAreasEv+0xba> + 8024380: 2300 movs r3, #0 + 8024382: f104 00ee add.w r0, r4, #238 ; 0xee + 8024386: f8a4 312e strh.w r3, [r4, #302] ; 0x12e + 802438a: 882b ldrh r3, [r5, #0] + 802438c: f8bd 5064 ldrh.w r5, [sp, #100] ; 0x64 + 8024390: 42ab cmp r3, r5 + 8024392: f4bf af20 bcs.w 80241d6 <_ZN8touchgfx11Application15drawCachedAreasEv+0xba> + 8024396: f8b4 112e ldrh.w r1, [r4, #302] ; 0x12e + 802439a: 2907 cmp r1, #7 + 802439c: d814 bhi.n 80243c8 <_ZN8touchgfx11Application15drawCachedAreasEv+0x2ac> + 802439e: eb08 02c3 add.w r2, r8, r3, lsl #3 + 80243a2: f938 e033 ldrsh.w lr, [r8, r3, lsl #3] + 80243a6: f9b2 c002 ldrsh.w ip, [r2, #2] + 80243aa: f9b2 7004 ldrsh.w r7, [r2, #4] + 80243ae: f9b2 6006 ldrsh.w r6, [r2, #6] + 80243b2: 1c4a adds r2, r1, #1 + 80243b4: f8a4 212e strh.w r2, [r4, #302] ; 0x12e + 80243b8: eb00 02c1 add.w r2, r0, r1, lsl #3 + 80243bc: f820 e031 strh.w lr, [r0, r1, lsl #3] + 80243c0: f8a2 c002 strh.w ip, [r2, #2] + 80243c4: 8097 strh r7, [r2, #4] + 80243c6: 80d6 strh r6, [r2, #6] + 80243c8: 3301 adds r3, #1 + 80243ca: b29b uxth r3, r3 + 80243cc: e7e0 b.n 8024390 <_ZN8touchgfx11Application15drawCachedAreasEv+0x274> + 80243ce: 2b02 cmp r3, #2 + 80243d0: f040 8133 bne.w 802463a <_ZN8touchgfx11Application15drawCachedAreasEv+0x51e> + 80243d4: 4b28 ldr r3, [pc, #160] ; (8024478 <_ZN8touchgfx11Application15drawCachedAreasEv+0x35c>) + 80243d6: f104 0aac add.w sl, r4, #172 ; 0xac + 80243da: 781b ldrb r3, [r3, #0] + 80243dc: 2b01 cmp r3, #1 + 80243de: f000 8098 beq.w 8024512 <_ZN8touchgfx11Application15drawCachedAreasEv+0x3f6> + 80243e2: 882a ldrh r2, [r5, #0] + 80243e4: f8b4 10ec ldrh.w r1, [r4, #236] ; 0xec + 80243e8: 3201 adds r2, #1 + 80243ea: b292 uxth r2, r2 + 80243ec: 2900 cmp r1, #0 + 80243ee: d0c2 beq.n 8024376 <_ZN8touchgfx11Application15drawCachedAreasEv+0x25a> + 80243f0: f8b4 60ae ldrh.w r6, [r4, #174] ; 0xae + 80243f4: 4694 mov ip, r2 + 80243f6: f8b4 30b2 ldrh.w r3, [r4, #178] ; 0xb2 + 80243fa: f04f 0900 mov.w r9, #0 + 80243fe: 441e add r6, r3 + 8024400: b236 sxth r6, r6 + 8024402: fa1f f38c uxth.w r3, ip + 8024406: ea4f 07c9 mov.w r7, r9, lsl #3 + 802440a: 4299 cmp r1, r3 + 802440c: f240 80be bls.w 802458c <_ZN8touchgfx11Application15drawCachedAreasEv+0x470> + 8024410: 4427 add r7, r4 + 8024412: eb04 0ecc add.w lr, r4, ip, lsl #3 + 8024416: f9b7 30ae ldrsh.w r3, [r7, #174] ; 0xae + 802441a: f9be 00ae ldrsh.w r0, [lr, #174] ; 0xae + 802441e: 4283 cmp r3, r0 + 8024420: f340 80a0 ble.w 8024564 <_ZN8touchgfx11Application15drawCachedAreasEv+0x448> + 8024424: f8be 60b2 ldrh.w r6, [lr, #178] ; 0xb2 + 8024428: 46e1 mov r9, ip + 802442a: 4406 add r6, r0 + 802442c: b236 sxth r6, r6 + 802442e: 429e cmp r6, r3 + 8024430: bfa8 it ge + 8024432: 461e movge r6, r3 + 8024434: f10c 0c01 add.w ip, ip, #1 + 8024438: e7e3 b.n 8024402 <_ZN8touchgfx11Application15drawCachedAreasEv+0x2e6> + 802443a: d10a bne.n 8024452 <_ZN8touchgfx11Application15drawCachedAreasEv+0x336> + 802443c: 4562 cmp r2, ip + 802443e: f9b6 00b2 ldrsh.w r0, [r6, #178] ; 0xb2 + 8024442: f9be 10b2 ldrsh.w r1, [lr, #178] ; 0xb2 + 8024446: bfb8 it lt + 8024448: 4662 movlt r2, ip + 802444a: 4288 cmp r0, r1 + 802444c: bfb8 it lt + 802444e: 461f movlt r7, r3 + 8024450: e086 b.n 8024560 <_ZN8touchgfx11Application15drawCachedAreasEv+0x444> + 8024452: 428a cmp r2, r1 + 8024454: bfb8 it lt + 8024456: 460a movlt r2, r1 + 8024458: e082 b.n 8024560 <_ZN8touchgfx11Application15drawCachedAreasEv+0x444> + 802445a: bf00 nop + 802445c: 2001e76c .word 0x2001e76c + 8024460: 2001e778 .word 0x2001e778 + 8024464: 20000060 .word 0x20000060 + 8024468: 2001e734 .word 0x2001e734 + 802446c: 2001e72a .word 0x2001e72a + 8024470: 2001e728 .word 0x2001e728 + 8024474: 2001e732 .word 0x2001e732 + 8024478: 2001e72c .word 0x2001e72c + 802447c: 19a1 adds r1, r4, r6 + 802447e: ab07 add r3, sp, #28 + 8024480: f851 0fac ldr.w r0, [r1, #172]! + 8024484: 6849 ldr r1, [r1, #4] + 8024486: c303 stmia r3!, {r0, r1} + 8024488: f9bd 3020 ldrsh.w r3, [sp, #32] + 802448c: a807 add r0, sp, #28 + 802448e: f8bd 101c ldrh.w r1, [sp, #28] + 8024492: 2b13 cmp r3, #19 + 8024494: 440b add r3, r1 + 8024496: bfd8 it le + 8024498: f9bd 201c ldrshle.w r2, [sp, #28] + 802449c: 1a9b subs r3, r3, r2 + 802449e: f8ad 201c strh.w r2, [sp, #28] + 80244a2: f8ad 3020 strh.w r3, [sp, #32] + 80244a6: f7ff f807 bl 80234b8 <_ZN8touchgfx21DisplayTransformation29transformDisplayToFrameBufferERNS_4RectE> + 80244aa: a807 add r0, sp, #28 + 80244ac: f7fb fd61 bl 801ff72 <_ZNK8touchgfx4Rect7isEmptyEv> + 80244b0: bb78 cbnz r0, 8024512 <_ZN8touchgfx11Application15drawCachedAreasEv+0x3f6> + 80244b2: f9bd c022 ldrsh.w ip, [sp, #34] ; 0x22 + 80244b6: 4426 add r6, r4 + 80244b8: f8d9 0000 ldr.w r0, [r9] + 80244bc: f1bc 0f14 cmp.w ip, #20 + 80244c0: f8bd 3020 ldrh.w r3, [sp, #32] + 80244c4: f8d0 e000 ldr.w lr, [r0] + 80244c8: bfa8 it ge + 80244ca: f04f 0c14 movge.w ip, #20 + 80244ce: f8bd 201e ldrh.w r2, [sp, #30] + 80244d2: f8bd 101c ldrh.w r1, [sp, #28] + 80244d6: fa1f fc8c uxth.w ip, ip + 80244da: f8cd c000 str.w ip, [sp] + 80244de: f8de b090 ldr.w fp, [lr, #144] ; 0x90 + 80244e2: 47d8 blx fp + 80244e4: 4683 mov fp, r0 + 80244e6: f8ad 0022 strh.w r0, [sp, #34] ; 0x22 + 80244ea: a807 add r0, sp, #28 + 80244ec: f7fe ffca bl 8023484 <_ZN8touchgfx21DisplayTransformation29transformFrameBufferToDisplayERNS_4RectE> + 80244f0: 6823 ldr r3, [r4, #0] + 80244f2: 4620 mov r0, r4 + 80244f4: a907 add r1, sp, #28 + 80244f6: 6c9b ldr r3, [r3, #72] ; 0x48 + 80244f8: 4798 blx r3 + 80244fa: f8b6 00b0 ldrh.w r0, [r6, #176] ; 0xb0 + 80244fe: eba0 000b sub.w r0, r0, fp + 8024502: b200 sxth r0, r0 + 8024504: f8a6 00b0 strh.w r0, [r6, #176] ; 0xb0 + 8024508: b918 cbnz r0, 8024512 <_ZN8touchgfx11Application15drawCachedAreasEv+0x3f6> + 802450a: b2b9 uxth r1, r7 + 802450c: 4650 mov r0, sl + 802450e: f7ff fa7b bl 8023a08 <_ZN8touchgfx6VectorINS_4RectELt8EE13quickRemoveAtEt> + 8024512: f8b4 b0ec ldrh.w fp, [r4, #236] ; 0xec + 8024516: f1bb 0f00 cmp.w fp, #0 + 802451a: f43f af2c beq.w 8024376 <_ZN8touchgfx11Application15drawCachedAreasEv+0x25a> + 802451e: 882b ldrh r3, [r5, #0] + 8024520: 2700 movs r7, #0 + 8024522: f9b4 20ac ldrsh.w r2, [r4, #172] ; 0xac + 8024526: 3301 adds r3, #1 + 8024528: b29b uxth r3, r3 + 802452a: b299 uxth r1, r3 + 802452c: 00fe lsls r6, r7, #3 + 802452e: 458b cmp fp, r1 + 8024530: d9a4 bls.n 802447c <_ZN8touchgfx11Application15drawCachedAreasEv+0x360> + 8024532: 4426 add r6, r4 + 8024534: eb04 0ec3 add.w lr, r4, r3, lsl #3 + 8024538: f8b6 10ac ldrh.w r1, [r6, #172] ; 0xac + 802453c: f8b6 00b0 ldrh.w r0, [r6, #176] ; 0xb0 + 8024540: f9be c0ac ldrsh.w ip, [lr, #172] ; 0xac + 8024544: 4408 add r0, r1 + 8024546: f8be 10b0 ldrh.w r1, [lr, #176] ; 0xb0 + 802454a: 4461 add r1, ip + 802454c: b200 sxth r0, r0 + 802454e: b209 sxth r1, r1 + 8024550: 4288 cmp r0, r1 + 8024552: f6bf af72 bge.w 802443a <_ZN8touchgfx11Application15drawCachedAreasEv+0x31e> + 8024556: 4584 cmp ip, r0 + 8024558: 4662 mov r2, ip + 802455a: 461f mov r7, r3 + 802455c: bfb8 it lt + 802455e: 4602 movlt r2, r0 + 8024560: 3301 adds r3, #1 + 8024562: e7e2 b.n 802452a <_ZN8touchgfx11Application15drawCachedAreasEv+0x40e> + 8024564: d10e bne.n 8024584 <_ZN8touchgfx11Application15drawCachedAreasEv+0x468> + 8024566: f9be 00b0 ldrsh.w r0, [lr, #176] ; 0xb0 + 802456a: f8be e0b2 ldrh.w lr, [lr, #178] ; 0xb2 + 802456e: f9b7 70b0 ldrsh.w r7, [r7, #176] ; 0xb0 + 8024572: 4473 add r3, lr + 8024574: b21b sxth r3, r3 + 8024576: 429e cmp r6, r3 + 8024578: bfa8 it ge + 802457a: 461e movge r6, r3 + 802457c: 4287 cmp r7, r0 + 802457e: bfb8 it lt + 8024580: 46e1 movlt r9, ip + 8024582: e757 b.n 8024434 <_ZN8touchgfx11Application15drawCachedAreasEv+0x318> + 8024584: 4286 cmp r6, r0 + 8024586: bfa8 it ge + 8024588: 4606 movge r6, r0 + 802458a: e753 b.n 8024434 <_ZN8touchgfx11Application15drawCachedAreasEv+0x318> + 802458c: eb0a 0007 add.w r0, sl, r7 + 8024590: 4427 add r7, r4 + 8024592: f9b7 b0b2 ldrsh.w fp, [r7, #178] ; 0xb2 + 8024596: f1bb 0f13 cmp.w fp, #19 + 802459a: bfdc itt le + 802459c: f8b7 60ae ldrhle.w r6, [r7, #174] ; 0xae + 80245a0: 445e addle r6, fp + 80245a2: e9cd 2102 strd r2, r1, [sp, #8] + 80245a6: bfd8 it le + 80245a8: b236 sxthle r6, r6 + 80245aa: f7fb fce2 bl 801ff72 <_ZNK8touchgfx4Rect7isEmptyEv> + 80245ae: e9dd 2102 ldrd r2, r1, [sp, #8] + 80245b2: 2800 cmp r0, #0 + 80245b4: f47f af1a bne.w 80243ec <_ZN8touchgfx11Application15drawCachedAreasEv+0x2d0> + 80245b8: f9b7 20ae ldrsh.w r2, [r7, #174] ; 0xae + 80245bc: fa1f fb8b uxth.w fp, fp + 80245c0: f8ad 0022 strh.w r0, [sp, #34] ; 0x22 + 80245c4: 1ab6 subs r6, r6, r2 + 80245c6: 4829 ldr r0, [pc, #164] ; (802466c <_ZN8touchgfx11Application15drawCachedAreasEv+0x550>) + 80245c8: f9b7 10ac ldrsh.w r1, [r7, #172] ; 0xac + 80245cc: 2e14 cmp r6, #20 + 80245ce: f9b7 30b0 ldrsh.w r3, [r7, #176] ; 0xb0 + 80245d2: 6800 ldr r0, [r0, #0] + 80245d4: bfa8 it ge + 80245d6: 2614 movge r6, #20 + 80245d8: f8ad 101c strh.w r1, [sp, #28] + 80245dc: f8ad 201e strh.w r2, [sp, #30] + 80245e0: b289 uxth r1, r1 + 80245e2: f8ad 3020 strh.w r3, [sp, #32] + 80245e6: b2b6 uxth r6, r6 + 80245e8: f8d0 c000 ldr.w ip, [r0] + 80245ec: b292 uxth r2, r2 + 80245ee: 455e cmp r6, fp + 80245f0: bf94 ite ls + 80245f2: 9600 strls r6, [sp, #0] + 80245f4: f8cd b000 strhi.w fp, [sp] + 80245f8: b29b uxth r3, r3 + 80245fa: f8dc 6090 ldr.w r6, [ip, #144] ; 0x90 + 80245fe: 47b0 blx r6 + 8024600: 6823 ldr r3, [r4, #0] + 8024602: f8ad 0022 strh.w r0, [sp, #34] ; 0x22 + 8024606: a907 add r1, sp, #28 + 8024608: 6c9b ldr r3, [r3, #72] ; 0x48 + 802460a: 4620 mov r0, r4 + 802460c: 4798 blx r3 + 802460e: f8bd 1022 ldrh.w r1, [sp, #34] ; 0x22 + 8024612: f8b7 30b2 ldrh.w r3, [r7, #178] ; 0xb2 + 8024616: f8b7 20ae ldrh.w r2, [r7, #174] ; 0xae + 802461a: 1a5b subs r3, r3, r1 + 802461c: 440a add r2, r1 + 802461e: b21b sxth r3, r3 + 8024620: f8a7 20ae strh.w r2, [r7, #174] ; 0xae + 8024624: f8a7 30b2 strh.w r3, [r7, #178] ; 0xb2 + 8024628: 2b00 cmp r3, #0 + 802462a: f47f aeda bne.w 80243e2 <_ZN8touchgfx11Application15drawCachedAreasEv+0x2c6> + 802462e: fa1f f189 uxth.w r1, r9 + 8024632: 4650 mov r0, sl + 8024634: f7ff f9e8 bl 8023a08 <_ZN8touchgfx6VectorINS_4RectELt8EE13quickRemoveAtEt> + 8024638: e6d3 b.n 80243e2 <_ZN8touchgfx11Application15drawCachedAreasEv+0x2c6> + 802463a: 882e ldrh r6, [r5, #0] + 802463c: f8b4 30ec ldrh.w r3, [r4, #236] ; 0xec + 8024640: 42b3 cmp r3, r6 + 8024642: f67f ae98 bls.w 8024376 <_ZN8touchgfx11Application15drawCachedAreasEv+0x25a> + 8024646: eb04 02c6 add.w r2, r4, r6, lsl #3 + 802464a: ab07 add r3, sp, #28 + 802464c: f852 0fac ldr.w r0, [r2, #172]! + 8024650: 6851 ldr r1, [r2, #4] + 8024652: c303 stmia r3!, {r0, r1} + 8024654: a807 add r0, sp, #28 + 8024656: f7fb fc8c bl 801ff72 <_ZNK8touchgfx4Rect7isEmptyEv> + 802465a: b920 cbnz r0, 8024666 <_ZN8touchgfx11Application15drawCachedAreasEv+0x54a> + 802465c: 6823 ldr r3, [r4, #0] + 802465e: a907 add r1, sp, #28 + 8024660: 4620 mov r0, r4 + 8024662: 6c9b ldr r3, [r3, #72] ; 0x48 + 8024664: 4798 blx r3 + 8024666: 3601 adds r6, #1 + 8024668: b2b6 uxth r6, r6 + 802466a: e7e7 b.n 802463c <_ZN8touchgfx11Application15drawCachedAreasEv+0x520> + 802466c: 2001e734 .word 0x2001e734 + +08024670 <_GLOBAL__sub_I__ZN8touchgfx11Application8instanceE>: + 8024670: 4b03 ldr r3, [pc, #12] ; (8024680 <_GLOBAL__sub_I__ZN8touchgfx11Application8instanceE+0x10>) + 8024672: 2200 movs r2, #0 + 8024674: 801a strh r2, [r3, #0] + 8024676: 805a strh r2, [r3, #2] + 8024678: 809a strh r2, [r3, #4] + 802467a: 80da strh r2, [r3, #6] + 802467c: 4770 bx lr + 802467e: bf00 nop + 8024680: 2001e778 .word 0x2001e778 + +08024684 <_ZNK8touchgfx4Font17getStringWidthLTREhPKtSt9__va_list>: + 8024684: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8024688: b09d sub sp, #116 ; 0x74 + 802468a: 4606 mov r6, r0 + 802468c: 4614 mov r4, r2 + 802468e: 468a mov sl, r1 + 8024690: a803 add r0, sp, #12 + 8024692: 461d mov r5, r3 + 8024694: f000 fe48 bl 8025328 <_ZN8touchgfx12TextProviderC1Ev> + 8024698: 6833 ldr r3, [r6, #0] + 802469a: 4630 mov r0, r6 + 802469c: f242 0b0b movw fp, #8203 ; 0x200b + 80246a0: 6cdb ldr r3, [r3, #76] ; 0x4c + 80246a2: 4798 blx r3 + 80246a4: 6833 ldr r3, [r6, #0] + 80246a6: 4607 mov r7, r0 + 80246a8: 4630 mov r0, r6 + 80246aa: 6d1b ldr r3, [r3, #80] ; 0x50 + 80246ac: 4798 blx r3 + 80246ae: 462a mov r2, r5 + 80246b0: 2500 movs r5, #0 + 80246b2: 4621 mov r1, r4 + 80246b4: 9000 str r0, [sp, #0] + 80246b6: 463b mov r3, r7 + 80246b8: 462c mov r4, r5 + 80246ba: 46a9 mov r9, r5 + 80246bc: 46a8 mov r8, r5 + 80246be: a803 add r0, sp, #12 + 80246c0: f000 fe8d bl 80253de <_ZN8touchgfx12TextProvider10initializeEPKtSt9__va_listS2_PKNS_24FontContextualFormsTableE> + 80246c4: 2300 movs r3, #0 + 80246c6: 9302 str r3, [sp, #8] + 80246c8: f64f 63ff movw r3, #65279 ; 0xfeff + 80246cc: 429c cmp r4, r3 + 80246ce: d002 beq.n 80246d6 <_ZNK8touchgfx4Font17getStringWidthLTREhPKtSt9__va_list+0x52> + 80246d0: 455c cmp r4, fp + 80246d2: bf18 it ne + 80246d4: 4625 movne r5, r4 + 80246d6: ab02 add r3, sp, #8 + 80246d8: 4632 mov r2, r6 + 80246da: 4651 mov r1, sl + 80246dc: a803 add r0, sp, #12 + 80246de: f001 f983 bl 80259e8 <_ZN8touchgfx12TextProvider15getNextLigatureEhPKNS_4FontERPKNS_9GlyphNodeE> + 80246e2: 4604 mov r4, r0 + 80246e4: b108 cbz r0, 80246ea <_ZNK8touchgfx4Font17getStringWidthLTREhPKtSt9__va_list+0x66> + 80246e6: 280a cmp r0, #10 + 80246e8: d10a bne.n 8024700 <_ZNK8touchgfx4Font17getStringWidthLTREhPKtSt9__va_list+0x7c> + 80246ea: 45c1 cmp r9, r8 + 80246ec: bf38 it cc + 80246ee: 46c1 movcc r9, r8 + 80246f0: f04f 0800 mov.w r8, #0 + 80246f4: 2c00 cmp r4, #0 + 80246f6: d1e5 bne.n 80246c4 <_ZNK8touchgfx4Font17getStringWidthLTREhPKtSt9__va_list+0x40> + 80246f8: 4648 mov r0, r9 + 80246fa: b01d add sp, #116 ; 0x74 + 80246fc: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 8024700: 9a02 ldr r2, [sp, #8] + 8024702: 2a00 cmp r2, #0 + 8024704: d0de beq.n 80246c4 <_ZNK8touchgfx4Font17getStringWidthLTREhPKtSt9__va_list+0x40> + 8024706: 7b57 ldrb r7, [r2, #13] + 8024708: 4629 mov r1, r5 + 802470a: 6833 ldr r3, [r6, #0] + 802470c: 007f lsls r7, r7, #1 + 802470e: 8894 ldrh r4, [r2, #4] + 8024710: 6c5b ldr r3, [r3, #68] ; 0x44 + 8024712: f407 7080 and.w r0, r7, #256 ; 0x100 + 8024716: 7a97 ldrb r7, [r2, #10] + 8024718: 4307 orrs r7, r0 + 802471a: 4630 mov r0, r6 + 802471c: 4798 blx r3 + 802471e: 4438 add r0, r7 + 8024720: 4480 add r8, r0 + 8024722: fa1f f888 uxth.w r8, r8 + 8024726: e7e5 b.n 80246f4 <_ZNK8touchgfx4Font17getStringWidthLTREhPKtSt9__va_list+0x70> + +08024728 <_ZNK8touchgfx4Font12getCharWidthEt>: + 8024728: b508 push {r3, lr} + 802472a: 6803 ldr r3, [r0, #0] + 802472c: 68db ldr r3, [r3, #12] + 802472e: 4798 blx r3 + 8024730: b128 cbz r0, 802473e <_ZNK8touchgfx4Font12getCharWidthEt+0x16> + 8024732: 7b43 ldrb r3, [r0, #13] + 8024734: 7a80 ldrb r0, [r0, #10] + 8024736: 005b lsls r3, r3, #1 + 8024738: f403 7380 and.w r3, r3, #256 ; 0x100 + 802473c: 4318 orrs r0, r3 + 802473e: bd08 pop {r3, pc} + +08024740 <_ZNK8touchgfx4Font16getMaxTextHeightEPKtz>: + 8024740: b40e push {r1, r2, r3} + 8024742: b5f0 push {r4, r5, r6, r7, lr} + 8024744: b09e sub sp, #120 ; 0x78 + 8024746: 4605 mov r5, r0 + 8024748: ab23 add r3, sp, #140 ; 0x8c + 802474a: a805 add r0, sp, #20 + 802474c: f853 4b04 ldr.w r4, [r3], #4 + 8024750: 9303 str r3, [sp, #12] + 8024752: f000 fde9 bl 8025328 <_ZN8touchgfx12TextProviderC1Ev> + 8024756: 682b ldr r3, [r5, #0] + 8024758: 4628 mov r0, r5 + 802475a: 6cdb ldr r3, [r3, #76] ; 0x4c + 802475c: 4798 blx r3 + 802475e: 682b ldr r3, [r5, #0] + 8024760: 4606 mov r6, r0 + 8024762: 4628 mov r0, r5 + 8024764: 6d1b ldr r3, [r3, #80] ; 0x50 + 8024766: 4798 blx r3 + 8024768: 4633 mov r3, r6 + 802476a: 4621 mov r1, r4 + 802476c: ae1e add r6, sp, #120 ; 0x78 + 802476e: 2400 movs r4, #0 + 8024770: 9000 str r0, [sp, #0] + 8024772: 9a03 ldr r2, [sp, #12] + 8024774: a805 add r0, sp, #20 + 8024776: f000 fe32 bl 80253de <_ZN8touchgfx12TextProvider10initializeEPKtSt9__va_listS2_PKNS_24FontContextualFormsTableE> + 802477a: f846 4d68 str.w r4, [r6, #-104]! + 802477e: 462a mov r2, r5 + 8024780: 4633 mov r3, r6 + 8024782: 4621 mov r1, r4 + 8024784: a805 add r0, sp, #20 + 8024786: f001 f92f bl 80259e8 <_ZN8touchgfx12TextProvider15getNextLigatureEhPKNS_4FontERPKNS_9GlyphNodeE> + 802478a: b300 cbz r0, 80247ce <_ZNK8touchgfx4Font16getMaxTextHeightEPKtz+0x8e> + 802478c: 280a cmp r0, #10 + 802478e: d01a beq.n 80247c6 <_ZNK8touchgfx4Font16getMaxTextHeightEPKtz+0x86> + 8024790: 9f04 ldr r7, [sp, #16] + 8024792: b1c7 cbz r7, 80247c6 <_ZNK8touchgfx4Font16getMaxTextHeightEPKtz+0x86> + 8024794: 7b78 ldrb r0, [r7, #13] + 8024796: 7a3b ldrb r3, [r7, #8] + 8024798: 00c1 lsls r1, r0, #3 + 802479a: 88ea ldrh r2, [r5, #6] + 802479c: f401 7180 and.w r1, r1, #256 ; 0x100 + 80247a0: 4319 orrs r1, r3 + 80247a2: 0643 lsls r3, r0, #25 + 80247a4: ea4f 1000 mov.w r0, r0, lsl #4 + 80247a8: bf48 it mi + 80247aa: f5a1 7300 submi.w r3, r1, #512 ; 0x200 + 80247ae: f400 7080 and.w r0, r0, #256 ; 0x100 + 80247b2: bf48 it mi + 80247b4: b219 sxthmi r1, r3 + 80247b6: 79fb ldrb r3, [r7, #7] + 80247b8: 4303 orrs r3, r0 + 80247ba: 4413 add r3, r2 + 80247bc: 1a5b subs r3, r3, r1 + 80247be: b21b sxth r3, r3 + 80247c0: 429c cmp r4, r3 + 80247c2: bfb8 it lt + 80247c4: 461c movlt r4, r3 + 80247c6: 4633 mov r3, r6 + 80247c8: 462a mov r2, r5 + 80247ca: 2100 movs r1, #0 + 80247cc: e7da b.n 8024784 <_ZNK8touchgfx4Font16getMaxTextHeightEPKtz+0x44> + 80247ce: b2a0 uxth r0, r4 + 80247d0: b01e add sp, #120 ; 0x78 + 80247d2: e8bd 40f0 ldmia.w sp!, {r4, r5, r6, r7, lr} + 80247d6: b003 add sp, #12 + 80247d8: 4770 bx lr + +080247da <_ZNK8touchgfx4Font20getMinimumTextHeightEv>: + 80247da: 7a43 ldrb r3, [r0, #9] + 80247dc: 8880 ldrh r0, [r0, #4] + 80247de: 4418 add r0, r3 + 80247e0: b280 uxth r0, r0 + 80247e2: 4770 bx lr + +080247e4 <_ZNK8touchgfx4Font13getFontHeightEv>: + 80247e4: 6803 ldr r3, [r0, #0] + 80247e6: 6b1b ldr r3, [r3, #48] ; 0x30 + 80247e8: 4718 bx r3 + +080247ea <_ZNK8touchgfx4Font16getNumberOfLinesEPKtz>: + 80247ea: b40e push {r1, r2, r3} + 80247ec: b570 push {r4, r5, r6, lr} + 80247ee: b09d sub sp, #116 ; 0x74 + 80247f0: 4604 mov r4, r0 + 80247f2: ab21 add r3, sp, #132 ; 0x84 + 80247f4: a803 add r0, sp, #12 + 80247f6: f853 5b04 ldr.w r5, [r3], #4 + 80247fa: 9302 str r3, [sp, #8] + 80247fc: f000 fd94 bl 8025328 <_ZN8touchgfx12TextProviderC1Ev> + 8024800: 6823 ldr r3, [r4, #0] + 8024802: 4620 mov r0, r4 + 8024804: 6cdb ldr r3, [r3, #76] ; 0x4c + 8024806: 4798 blx r3 + 8024808: 6823 ldr r3, [r4, #0] + 802480a: 4606 mov r6, r0 + 802480c: 4620 mov r0, r4 + 802480e: 6d1b ldr r3, [r3, #80] ; 0x50 + 8024810: 2401 movs r4, #1 + 8024812: 4798 blx r3 + 8024814: 4633 mov r3, r6 + 8024816: 9000 str r0, [sp, #0] + 8024818: 4629 mov r1, r5 + 802481a: 9a02 ldr r2, [sp, #8] + 802481c: a803 add r0, sp, #12 + 802481e: f000 fdde bl 80253de <_ZN8touchgfx12TextProvider10initializeEPKtSt9__va_listS2_PKNS_24FontContextualFormsTableE> + 8024822: a803 add r0, sp, #12 + 8024824: f001 f9ac bl 8025b80 <_ZN8touchgfx12TextProvider11getNextCharEv> + 8024828: b2a3 uxth r3, r4 + 802482a: b138 cbz r0, 802483c <_ZNK8touchgfx4Font16getNumberOfLinesEPKtz+0x52> + 802482c: 280a cmp r0, #10 + 802482e: a803 add r0, sp, #12 + 8024830: bf04 itt eq + 8024832: 3301 addeq r3, #1 + 8024834: b21c sxtheq r4, r3 + 8024836: f001 f9a3 bl 8025b80 <_ZN8touchgfx12TextProvider11getNextCharEv> + 802483a: e7f5 b.n 8024828 <_ZNK8touchgfx4Font16getNumberOfLinesEPKtz+0x3e> + 802483c: 4618 mov r0, r3 + 802483e: b01d add sp, #116 ; 0x74 + 8024840: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} + 8024844: b003 add sp, #12 + 8024846: 4770 bx lr + +08024848 <_ZNK8touchgfx4Font15getSpacingAboveEPKtz>: + 8024848: b40e push {r1, r2, r3} + 802484a: b5f0 push {r4, r5, r6, r7, lr} + 802484c: b09e sub sp, #120 ; 0x78 + 802484e: 4604 mov r4, r0 + 8024850: ab23 add r3, sp, #140 ; 0x8c + 8024852: a805 add r0, sp, #20 + 8024854: f853 5b04 ldr.w r5, [r3], #4 + 8024858: 9303 str r3, [sp, #12] + 802485a: f000 fd65 bl 8025328 <_ZN8touchgfx12TextProviderC1Ev> + 802485e: 6823 ldr r3, [r4, #0] + 8024860: 4620 mov r0, r4 + 8024862: 6cdb ldr r3, [r3, #76] ; 0x4c + 8024864: 4798 blx r3 + 8024866: 6823 ldr r3, [r4, #0] + 8024868: 4606 mov r6, r0 + 802486a: 4620 mov r0, r4 + 802486c: 6d1b ldr r3, [r3, #80] ; 0x50 + 802486e: 4798 blx r3 + 8024870: 4633 mov r3, r6 + 8024872: 4629 mov r1, r5 + 8024874: 9000 str r0, [sp, #0] + 8024876: 9a03 ldr r2, [sp, #12] + 8024878: a805 add r0, sp, #20 + 802487a: f000 fdb0 bl 80253de <_ZN8touchgfx12TextProvider10initializeEPKtSt9__va_listS2_PKNS_24FontContextualFormsTableE> + 802487e: ad1e add r5, sp, #120 ; 0x78 + 8024880: 2100 movs r1, #0 + 8024882: f647 76ff movw r6, #32767 ; 0x7fff + 8024886: 4622 mov r2, r4 + 8024888: a805 add r0, sp, #20 + 802488a: f845 1d68 str.w r1, [r5, #-104]! + 802488e: 462b mov r3, r5 + 8024890: f001 f8aa bl 80259e8 <_ZN8touchgfx12TextProvider15getNextLigatureEhPKNS_4FontERPKNS_9GlyphNodeE> + 8024894: b1d8 cbz r0, 80248ce <_ZNK8touchgfx4Font15getSpacingAboveEPKtz+0x86> + 8024896: 280a cmp r0, #10 + 8024898: d012 beq.n 80248c0 <_ZNK8touchgfx4Font15getSpacingAboveEPKtz+0x78> + 802489a: 9804 ldr r0, [sp, #16] + 802489c: b180 cbz r0, 80248c0 <_ZNK8touchgfx4Font15getSpacingAboveEPKtz+0x78> + 802489e: 7b47 ldrb r7, [r0, #13] + 80248a0: 88e2 ldrh r2, [r4, #6] + 80248a2: 00fb lsls r3, r7, #3 + 80248a4: f403 7180 and.w r1, r3, #256 ; 0x100 + 80248a8: 7a03 ldrb r3, [r0, #8] + 80248aa: 430b orrs r3, r1 + 80248ac: 0679 lsls r1, r7, #25 + 80248ae: bf44 itt mi + 80248b0: f5a3 7300 submi.w r3, r3, #512 ; 0x200 + 80248b4: b21b sxthmi r3, r3 + 80248b6: 1ad3 subs r3, r2, r3 + 80248b8: b21b sxth r3, r3 + 80248ba: 429e cmp r6, r3 + 80248bc: bfa8 it ge + 80248be: 461e movge r6, r3 + 80248c0: 462b mov r3, r5 + 80248c2: 4622 mov r2, r4 + 80248c4: 2100 movs r1, #0 + 80248c6: a805 add r0, sp, #20 + 80248c8: f001 f88e bl 80259e8 <_ZN8touchgfx12TextProvider15getNextLigatureEhPKNS_4FontERPKNS_9GlyphNodeE> + 80248cc: e7e2 b.n 8024894 <_ZNK8touchgfx4Font15getSpacingAboveEPKtz+0x4c> + 80248ce: 4630 mov r0, r6 + 80248d0: b01e add sp, #120 ; 0x78 + 80248d2: e8bd 40f0 ldmia.w sp!, {r4, r5, r6, r7, lr} + 80248d6: b003 add sp, #12 + 80248d8: 4770 bx lr + +080248da <_ZNK8touchgfx8Drawable10invalidateEv>: + 80248da: b513 push {r0, r1, r4, lr} + 80248dc: 6803 ldr r3, [r0, #0] + 80248de: 2400 movs r4, #0 + 80248e0: f9b0 1008 ldrsh.w r1, [r0, #8] + 80248e4: f9b0 200a ldrsh.w r2, [r0, #10] + 80248e8: f8ad 1004 strh.w r1, [sp, #4] + 80248ec: 4669 mov r1, sp + 80248ee: 691b ldr r3, [r3, #16] + 80248f0: 9400 str r4, [sp, #0] + 80248f2: f8ad 2006 strh.w r2, [sp, #6] + 80248f6: 4798 blx r3 + 80248f8: b002 add sp, #8 + 80248fa: bd10 pop {r4, pc} + +080248fc <_ZN8touchgfx8Drawable20getSolidRectAbsoluteEv>: + 80248fc: b538 push {r3, r4, r5, lr} + 80248fe: 680b ldr r3, [r1, #0] + 8024900: 460c mov r4, r1 + 8024902: 4605 mov r5, r0 + 8024904: 68db ldr r3, [r3, #12] + 8024906: 4798 blx r3 + 8024908: 6823 ldr r3, [r4, #0] + 802490a: 4620 mov r0, r4 + 802490c: 4629 mov r1, r5 + 802490e: 6adb ldr r3, [r3, #44] ; 0x2c + 8024910: 4798 blx r3 + 8024912: 4628 mov r0, r5 + 8024914: bd38 pop {r3, r4, r5, pc} + +08024916 <_ZNK8touchgfx8Drawable23translateRectToAbsoluteERNS_4RectE>: + 8024916: b410 push {r4} + 8024918: 880a ldrh r2, [r1, #0] + 802491a: 8884 ldrh r4, [r0, #4] + 802491c: 4422 add r2, r4 + 802491e: 800a strh r2, [r1, #0] + 8024920: 884a ldrh r2, [r1, #2] + 8024922: 88c4 ldrh r4, [r0, #6] + 8024924: 4422 add r2, r4 + 8024926: 804a strh r2, [r1, #2] + 8024928: 6940 ldr r0, [r0, #20] + 802492a: b120 cbz r0, 8024936 <_ZNK8touchgfx8Drawable23translateRectToAbsoluteERNS_4RectE+0x20> + 802492c: 6803 ldr r3, [r0, #0] + 802492e: f85d 4b04 ldr.w r4, [sp], #4 + 8024932: 6adb ldr r3, [r3, #44] ; 0x2c + 8024934: 4718 bx r3 + 8024936: f85d 4b04 ldr.w r4, [sp], #4 + 802493a: 4770 bx lr + +0802493c <_ZNK8touchgfx8Drawable14getVisibleRectERNS_4RectE>: + 802493c: b570 push {r4, r5, r6, lr} + 802493e: 8882 ldrh r2, [r0, #4] + 8024940: 460c mov r4, r1 + 8024942: 880b ldrh r3, [r1, #0] + 8024944: 4605 mov r5, r0 + 8024946: 4413 add r3, r2 + 8024948: 800b strh r3, [r1, #0] + 802494a: 884b ldrh r3, [r1, #2] + 802494c: 88c2 ldrh r2, [r0, #6] + 802494e: 4413 add r3, r2 + 8024950: 804b strh r3, [r1, #2] + 8024952: 1d01 adds r1, r0, #4 + 8024954: 4620 mov r0, r4 + 8024956: f7fb fac9 bl 801feec <_ZN8touchgfx4RectaNERKS0_> + 802495a: f9b4 3004 ldrsh.w r3, [r4, #4] + 802495e: 2b00 cmp r3, #0 + 8024960: dd0b ble.n 802497a <_ZNK8touchgfx8Drawable14getVisibleRectERNS_4RectE+0x3e> + 8024962: f9b4 3006 ldrsh.w r3, [r4, #6] + 8024966: 2b00 cmp r3, #0 + 8024968: dd07 ble.n 802497a <_ZNK8touchgfx8Drawable14getVisibleRectERNS_4RectE+0x3e> + 802496a: 6968 ldr r0, [r5, #20] + 802496c: b128 cbz r0, 802497a <_ZNK8touchgfx8Drawable14getVisibleRectERNS_4RectE+0x3e> + 802496e: 6803 ldr r3, [r0, #0] + 8024970: 4621 mov r1, r4 + 8024972: 6a9b ldr r3, [r3, #40] ; 0x28 + 8024974: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} + 8024978: 4718 bx r3 + 802497a: bd70 pop {r4, r5, r6, pc} + +0802497c <_ZNK8touchgfx8Drawable14invalidateRectERNS_4RectE>: + 802497c: b570 push {r4, r5, r6, lr} + 802497e: 8882 ldrh r2, [r0, #4] + 8024980: 460c mov r4, r1 + 8024982: 880b ldrh r3, [r1, #0] + 8024984: 4605 mov r5, r0 + 8024986: 4413 add r3, r2 + 8024988: 800b strh r3, [r1, #0] + 802498a: 884b ldrh r3, [r1, #2] + 802498c: 88c2 ldrh r2, [r0, #6] + 802498e: 4413 add r3, r2 + 8024990: 804b strh r3, [r1, #2] + 8024992: 1d01 adds r1, r0, #4 + 8024994: 4620 mov r0, r4 + 8024996: f7fb faa9 bl 801feec <_ZN8touchgfx4RectaNERKS0_> + 802499a: f9b4 3004 ldrsh.w r3, [r4, #4] + 802499e: 2b00 cmp r3, #0 + 80249a0: dd19 ble.n 80249d6 <_ZNK8touchgfx8Drawable14invalidateRectERNS_4RectE+0x5a> + 80249a2: f9b4 3006 ldrsh.w r3, [r4, #6] + 80249a6: 2b00 cmp r3, #0 + 80249a8: dd15 ble.n 80249d6 <_ZNK8touchgfx8Drawable14invalidateRectERNS_4RectE+0x5a> + 80249aa: 6968 ldr r0, [r5, #20] + 80249ac: b128 cbz r0, 80249ba <_ZNK8touchgfx8Drawable14invalidateRectERNS_4RectE+0x3e> + 80249ae: 6803 ldr r3, [r0, #0] + 80249b0: 4621 mov r1, r4 + 80249b2: 691b ldr r3, [r3, #16] + 80249b4: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} + 80249b8: 4718 bx r3 + 80249ba: 4b07 ldr r3, [pc, #28] ; (80249d8 <_ZNK8touchgfx8Drawable14invalidateRectERNS_4RectE+0x5c>) + 80249bc: 681b ldr r3, [r3, #0] + 80249be: 3304 adds r3, #4 + 80249c0: 429d cmp r5, r3 + 80249c2: d108 bne.n 80249d6 <_ZNK8touchgfx8Drawable14invalidateRectERNS_4RectE+0x5a> + 80249c4: f7fe ff10 bl 80237e8 <_ZN8touchgfx11Application11getInstanceEv> + 80249c8: 6803 ldr r3, [r0, #0] + 80249ca: 6821 ldr r1, [r4, #0] + 80249cc: 6862 ldr r2, [r4, #4] + 80249ce: 6c1b ldr r3, [r3, #64] ; 0x40 + 80249d0: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} + 80249d4: 4718 bx r3 + 80249d6: bd70 pop {r4, r5, r6, pc} + 80249d8: 2001e770 .word 0x2001e770 + +080249dc <_ZN8touchgfx8Drawable12moveRelativeEss>: + 80249dc: b570 push {r4, r5, r6, lr} + 80249de: 4604 mov r4, r0 + 80249e0: 4616 mov r6, r2 + 80249e2: 460d mov r5, r1 + 80249e4: b901 cbnz r1, 80249e8 <_ZN8touchgfx8Drawable12moveRelativeEss+0xc> + 80249e6: b192 cbz r2, 8024a0e <_ZN8touchgfx8Drawable12moveRelativeEss+0x32> + 80249e8: 6823 ldr r3, [r4, #0] + 80249ea: 4620 mov r0, r4 + 80249ec: 699b ldr r3, [r3, #24] + 80249ee: 4798 blx r3 + 80249f0: 88e2 ldrh r2, [r4, #6] + 80249f2: 88a1 ldrh r1, [r4, #4] + 80249f4: 4620 mov r0, r4 + 80249f6: 4432 add r2, r6 + 80249f8: 4429 add r1, r5 + 80249fa: b212 sxth r2, r2 + 80249fc: b209 sxth r1, r1 + 80249fe: f7df fcc2 bl 8004386 <_ZN8touchgfx8Drawable5setXYEss> + 8024a02: 6823 ldr r3, [r4, #0] + 8024a04: 4620 mov r0, r4 + 8024a06: 699b ldr r3, [r3, #24] + 8024a08: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr} + 8024a0c: 4718 bx r3 + 8024a0e: bd70 pop {r4, r5, r6, pc} + +08024a10 <_ZNK8touchgfx8Drawable15getAbsoluteRectEv>: + 8024a10: b510 push {r4, lr} + 8024a12: 2300 movs r3, #0 + 8024a14: 4604 mov r4, r0 + 8024a16: 4608 mov r0, r1 + 8024a18: f9b1 1008 ldrsh.w r1, [r1, #8] + 8024a1c: 8023 strh r3, [r4, #0] + 8024a1e: f9b0 200a ldrsh.w r2, [r0, #10] + 8024a22: 8063 strh r3, [r4, #2] + 8024a24: 6803 ldr r3, [r0, #0] + 8024a26: 80a1 strh r1, [r4, #4] + 8024a28: 4621 mov r1, r4 + 8024a2a: 80e2 strh r2, [r4, #6] + 8024a2c: 6adb ldr r3, [r3, #44] ; 0x2c + 8024a2e: 4798 blx r3 + 8024a30: 4620 mov r0, r4 + 8024a32: bd10 pop {r4, pc} + +08024a34 <_ZN8touchgfx9ConstFontC1EPKNS_9GlyphNodeEttthhhhhhtt>: + 8024a34: b530 push {r4, r5, lr} + 8024a36: 8083 strh r3, [r0, #4] + 8024a38: f8bd 300c ldrh.w r3, [sp, #12] + 8024a3c: f89d 5018 ldrb.w r5, [sp, #24] + 8024a40: 80c3 strh r3, [r0, #6] + 8024a42: f89d 3010 ldrb.w r3, [sp, #16] + 8024a46: 6141 str r1, [r0, #20] + 8024a48: 7203 strb r3, [r0, #8] + 8024a4a: f89d 3014 ldrb.w r3, [sp, #20] + 8024a4e: 8302 strh r2, [r0, #24] + 8024a50: 7243 strb r3, [r0, #9] + 8024a52: 7a83 ldrb r3, [r0, #10] + 8024a54: f365 0306 bfi r3, r5, #0, #7 + 8024a58: f89d 501c ldrb.w r5, [sp, #28] + 8024a5c: f365 13c7 bfi r3, r5, #7, #1 + 8024a60: 7283 strb r3, [r0, #10] + 8024a62: f89d 3020 ldrb.w r3, [sp, #32] + 8024a66: 72c3 strb r3, [r0, #11] + 8024a68: f89d 3024 ldrb.w r3, [sp, #36] ; 0x24 + 8024a6c: 7303 strb r3, [r0, #12] + 8024a6e: f8bd 3028 ldrh.w r3, [sp, #40] ; 0x28 + 8024a72: 81c3 strh r3, [r0, #14] + 8024a74: f8bd 302c ldrh.w r3, [sp, #44] ; 0x2c + 8024a78: 8203 strh r3, [r0, #16] + 8024a7a: 4b01 ldr r3, [pc, #4] ; (8024a80 <_ZN8touchgfx9ConstFontC1EPKNS_9GlyphNodeEttthhhhhhtt+0x4c>) + 8024a7c: 6003 str r3, [r0, #0] + 8024a7e: bd30 pop {r4, r5, pc} + 8024a80: 0803c6d4 .word 0x0803c6d4 + +08024a84 <_ZNK8touchgfx9ConstFont4findEt>: + 8024a84: b5f0 push {r4, r5, r6, r7, lr} + 8024a86: 6944 ldr r4, [r0, #20] + 8024a88: b3bc cbz r4, 8024afa <_ZNK8touchgfx9ConstFont4findEt+0x76> + 8024a8a: 88a3 ldrh r3, [r4, #4] + 8024a8c: 8b02 ldrh r2, [r0, #24] + 8024a8e: 1acb subs r3, r1, r3 + 8024a90: f102 32ff add.w r2, r2, #4294967295 + 8024a94: d431 bmi.n 8024afa <_ZNK8touchgfx9ConstFont4findEt+0x76> + 8024a96: 4293 cmp r3, r2 + 8024a98: dd0c ble.n 8024ab4 <_ZNK8touchgfx9ConstFont4findEt+0x30> + 8024a9a: 230e movs r3, #14 + 8024a9c: fb03 4302 mla r3, r3, r2, r4 + 8024aa0: 889b ldrh r3, [r3, #4] + 8024aa2: 1a5b subs r3, r3, r1 + 8024aa4: 1ad3 subs r3, r2, r3 + 8024aa6: 429a cmp r2, r3 + 8024aa8: db27 blt.n 8024afa <_ZNK8touchgfx9ConstFont4findEt+0x76> + 8024aaa: 2b00 cmp r3, #0 + 8024aac: bfbc itt lt + 8024aae: 2302 movlt r3, #2 + 8024ab0: fb92 f3f3 sdivlt r3, r2, r3 + 8024ab4: 2500 movs r5, #0 + 8024ab6: 260e movs r6, #14 + 8024ab8: 4295 cmp r5, r2 + 8024aba: dc1e bgt.n 8024afa <_ZNK8touchgfx9ConstFont4findEt+0x76> + 8024abc: fb06 4003 mla r0, r6, r3, r4 + 8024ac0: 8887 ldrh r7, [r0, #4] + 8024ac2: 42b9 cmp r1, r7 + 8024ac4: d01a beq.n 8024afc <_ZNK8touchgfx9ConstFont4findEt+0x78> + 8024ac6: d20d bcs.n 8024ae4 <_ZNK8touchgfx9ConstFont4findEt+0x60> + 8024ac8: 1e5a subs r2, r3, #1 + 8024aca: 4295 cmp r5, r2 + 8024acc: dc15 bgt.n 8024afa <_ZNK8touchgfx9ConstFont4findEt+0x76> + 8024ace: f830 3c0a ldrh.w r3, [r0, #-10] + 8024ad2: 1a5b subs r3, r3, r1 + 8024ad4: 1ad3 subs r3, r2, r3 + 8024ad6: 429a cmp r2, r3 + 8024ad8: db0f blt.n 8024afa <_ZNK8touchgfx9ConstFont4findEt+0x76> + 8024ada: 429d cmp r5, r3 + 8024adc: ddec ble.n 8024ab8 <_ZNK8touchgfx9ConstFont4findEt+0x34> + 8024ade: 1953 adds r3, r2, r5 + 8024ae0: 105b asrs r3, r3, #1 + 8024ae2: e7e9 b.n 8024ab8 <_ZNK8touchgfx9ConstFont4findEt+0x34> + 8024ae4: 1c5d adds r5, r3, #1 + 8024ae6: 42aa cmp r2, r5 + 8024ae8: db07 blt.n 8024afa <_ZNK8touchgfx9ConstFont4findEt+0x76> + 8024aea: 8a43 ldrh r3, [r0, #18] + 8024aec: 1acb subs r3, r1, r3 + 8024aee: 442b add r3, r5 + 8024af0: 429d cmp r5, r3 + 8024af2: dc02 bgt.n 8024afa <_ZNK8touchgfx9ConstFont4findEt+0x76> + 8024af4: 429a cmp r2, r3 + 8024af6: dadf bge.n 8024ab8 <_ZNK8touchgfx9ConstFont4findEt+0x34> + 8024af8: e7f1 b.n 8024ade <_ZNK8touchgfx9ConstFont4findEt+0x5a> + 8024afa: 2000 movs r0, #0 + 8024afc: bdf0 pop {r4, r5, r6, r7, pc} + +08024afe <_ZNK8touchgfx9ConstFont8getGlyphEtRPKhRh>: + 8024afe: b5f8 push {r3, r4, r5, r6, r7, lr} + 8024b00: 4604 mov r4, r0 + 8024b02: 4617 mov r7, r2 + 8024b04: 461e mov r6, r3 + 8024b06: b911 cbnz r1, 8024b0e <_ZNK8touchgfx9ConstFont8getGlyphEtRPKhRh+0x10> + 8024b08: 2500 movs r5, #0 + 8024b0a: 4628 mov r0, r5 + 8024b0c: bdf8 pop {r3, r4, r5, r6, r7, pc} + 8024b0e: 290a cmp r1, #10 + 8024b10: d0fa beq.n 8024b08 <_ZNK8touchgfx9ConstFont8getGlyphEtRPKhRh+0xa> + 8024b12: f64f 62ff movw r2, #65279 ; 0xfeff + 8024b16: 4291 cmp r1, r2 + 8024b18: d0f6 beq.n 8024b08 <_ZNK8touchgfx9ConstFont8getGlyphEtRPKhRh+0xa> + 8024b1a: f242 020b movw r2, #8203 ; 0x200b + 8024b1e: 4291 cmp r1, r2 + 8024b20: d0f2 beq.n 8024b08 <_ZNK8touchgfx9ConstFont8getGlyphEtRPKhRh+0xa> + 8024b22: f7ff ffaf bl 8024a84 <_ZNK8touchgfx9ConstFont4findEt> + 8024b26: 4605 mov r5, r0 + 8024b28: b950 cbnz r0, 8024b40 <_ZNK8touchgfx9ConstFont8getGlyphEtRPKhRh+0x42> + 8024b2a: 6823 ldr r3, [r4, #0] + 8024b2c: 4620 mov r0, r4 + 8024b2e: 691b ldr r3, [r3, #16] + 8024b30: 4798 blx r3 + 8024b32: 4601 mov r1, r0 + 8024b34: 4620 mov r0, r4 + 8024b36: f7ff ffa5 bl 8024a84 <_ZNK8touchgfx9ConstFont4findEt> + 8024b3a: 4605 mov r5, r0 + 8024b3c: 2800 cmp r0, #0 + 8024b3e: d0e3 beq.n 8024b08 <_ZNK8touchgfx9ConstFont8getGlyphEtRPKhRh+0xa> + 8024b40: 6823 ldr r3, [r4, #0] + 8024b42: 4629 mov r1, r5 + 8024b44: 4620 mov r0, r4 + 8024b46: 6d5b ldr r3, [r3, #84] ; 0x54 + 8024b48: 4798 blx r3 + 8024b4a: 6038 str r0, [r7, #0] + 8024b4c: 6823 ldr r3, [r4, #0] + 8024b4e: 4620 mov r0, r4 + 8024b50: 6bdb ldr r3, [r3, #60] ; 0x3c + 8024b52: 4798 blx r3 + 8024b54: 7030 strb r0, [r6, #0] + 8024b56: e7d8 b.n 8024b0a <_ZNK8touchgfx9ConstFont8getGlyphEtRPKhRh+0xc> + +08024b58 <_ZN8touchgfx4clzuEm>: + 8024b58: 4603 mov r3, r0 + 8024b5a: b1c8 cbz r0, 8024b90 <_ZN8touchgfx4clzuEm+0x38> + 8024b5c: 0c02 lsrs r2, r0, #16 + 8024b5e: 0412 lsls r2, r2, #16 + 8024b60: b9a2 cbnz r2, 8024b8c <_ZN8touchgfx4clzuEm+0x34> + 8024b62: 0403 lsls r3, r0, #16 + 8024b64: 2010 movs r0, #16 + 8024b66: f013 4f7f tst.w r3, #4278190080 ; 0xff000000 + 8024b6a: bf04 itt eq + 8024b6c: 021b lsleq r3, r3, #8 + 8024b6e: 3008 addeq r0, #8 + 8024b70: f013 4f70 tst.w r3, #4026531840 ; 0xf0000000 + 8024b74: bf04 itt eq + 8024b76: 011b lsleq r3, r3, #4 + 8024b78: 3004 addeq r0, #4 + 8024b7a: f013 4f40 tst.w r3, #3221225472 ; 0xc0000000 + 8024b7e: bf04 itt eq + 8024b80: 009b lsleq r3, r3, #2 + 8024b82: 3002 addeq r0, #2 + 8024b84: 2b00 cmp r3, #0 + 8024b86: db04 blt.n 8024b92 <_ZN8touchgfx4clzuEm+0x3a> + 8024b88: 3001 adds r0, #1 + 8024b8a: 4770 bx lr + 8024b8c: 2000 movs r0, #0 + 8024b8e: e7ea b.n 8024b66 <_ZN8touchgfx4clzuEm+0xe> + 8024b90: 2020 movs r0, #32 + 8024b92: 4770 bx lr + +08024b94 <_ZN8touchgfx7muldivuEmmmRm>: + 8024b94: e92d 47f3 stmdb sp!, {r0, r1, r4, r5, r6, r7, r8, r9, sl, lr} + 8024b98: 460f mov r7, r1 + 8024b9a: 4615 mov r5, r2 + 8024b9c: 461e mov r6, r3 + 8024b9e: 4601 mov r1, r0 + 8024ba0: b100 cbz r0, 8024ba4 <_ZN8touchgfx7muldivuEmmmRm+0x10> + 8024ba2: b927 cbnz r7, 8024bae <_ZN8touchgfx7muldivuEmmmRm+0x1a> + 8024ba4: 2000 movs r0, #0 + 8024ba6: 6030 str r0, [r6, #0] + 8024ba8: b002 add sp, #8 + 8024baa: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + 8024bae: f7ff ffd3 bl 8024b58 <_ZN8touchgfx4clzuEm> + 8024bb2: b980 cbnz r0, 8024bd6 <_ZN8touchgfx7muldivuEmmmRm+0x42> + 8024bb4: 4638 mov r0, r7 + 8024bb6: f7ff ffcf bl 8024b58 <_ZN8touchgfx4clzuEm> + 8024bba: 2800 cmp r0, #0 + 8024bbc: dd05 ble.n 8024bca <_ZN8touchgfx7muldivuEmmmRm+0x36> + 8024bbe: 4633 mov r3, r6 + 8024bc0: 462a mov r2, r5 + 8024bc2: 4638 mov r0, r7 + 8024bc4: f7ff ffe6 bl 8024b94 <_ZN8touchgfx7muldivuEmmmRm> + 8024bc8: e7ee b.n 8024ba8 <_ZN8touchgfx7muldivuEmmmRm+0x14> + 8024bca: f04f 33ff mov.w r3, #4294967295 + 8024bce: f06f 4000 mvn.w r0, #2147483648 ; 0x80000000 + 8024bd2: 6033 str r3, [r6, #0] + 8024bd4: e7e8 b.n 8024ba8 <_ZN8touchgfx7muldivuEmmmRm+0x14> + 8024bd6: fa37 f800 lsrs.w r8, r7, r0 + 8024bda: fb07 f301 mul.w r3, r7, r1 + 8024bde: d105 bne.n 8024bec <_ZN8touchgfx7muldivuEmmmRm+0x58> + 8024be0: fbb3 f0f5 udiv r0, r3, r5 + 8024be4: fb05 3510 mls r5, r5, r0, r3 + 8024be8: 6035 str r5, [r6, #0] + 8024bea: e7dd b.n 8024ba8 <_ZN8touchgfx7muldivuEmmmRm+0x14> + 8024bec: 2301 movs r3, #1 + 8024bee: fa01 fa00 lsl.w sl, r1, r0 + 8024bf2: 462a mov r2, r5 + 8024bf4: fa03 f000 lsl.w r0, r3, r0 + 8024bf8: 4633 mov r3, r6 + 8024bfa: fbba f9f5 udiv r9, sl, r5 + 8024bfe: 3801 subs r0, #1 + 8024c00: fb08 f409 mul.w r4, r8, r9 + 8024c04: 4038 ands r0, r7 + 8024c06: f7ff ffc5 bl 8024b94 <_ZN8touchgfx7muldivuEmmmRm> + 8024c0a: 462a mov r2, r5 + 8024c0c: 4607 mov r7, r0 + 8024c0e: ab01 add r3, sp, #4 + 8024c10: fb05 a119 mls r1, r5, r9, sl + 8024c14: 4640 mov r0, r8 + 8024c16: f7ff ffbd bl 8024b94 <_ZN8touchgfx7muldivuEmmmRm> + 8024c1a: 9b01 ldr r3, [sp, #4] + 8024c1c: 6832 ldr r2, [r6, #0] + 8024c1e: 441a add r2, r3 + 8024c20: fbb2 f3f5 udiv r3, r2, r5 + 8024c24: 441c add r4, r3 + 8024c26: fb05 2513 mls r5, r5, r3, r2 + 8024c2a: 443c add r4, r7 + 8024c2c: 4420 add r0, r4 + 8024c2e: e7db b.n 8024be8 <_ZN8touchgfx7muldivuEmmmRm+0x54> + +08024c30 <_ZN8touchgfx6muldivElllRl>: + 8024c30: b573 push {r0, r1, r4, r5, r6, lr} + 8024c32: 2800 cmp r0, #0 + 8024c34: 461e mov r6, r3 + 8024c36: bfba itte lt + 8024c38: 4240 neglt r0, r0 + 8024c3a: f04f 34ff movlt.w r4, #4294967295 + 8024c3e: 2401 movge r4, #1 + 8024c40: 2900 cmp r1, #0 + 8024c42: bfbc itt lt + 8024c44: 4249 neglt r1, r1 + 8024c46: 4264 neglt r4, r4 + 8024c48: 2a00 cmp r2, #0 + 8024c4a: bfb6 itet lt + 8024c4c: 4265 neglt r5, r4 + 8024c4e: 4625 movge r5, r4 + 8024c50: 4252 neglt r2, r2 + 8024c52: 4288 cmp r0, r1 + 8024c54: bfc2 ittt gt + 8024c56: 4603 movgt r3, r0 + 8024c58: 4608 movgt r0, r1 + 8024c5a: 4619 movgt r1, r3 + 8024c5c: ab01 add r3, sp, #4 + 8024c5e: f7ff ff99 bl 8024b94 <_ZN8touchgfx7muldivuEmmmRm> + 8024c62: 9b01 ldr r3, [sp, #4] + 8024c64: 4368 muls r0, r5 + 8024c66: 435c muls r4, r3 + 8024c68: 6034 str r4, [r6, #0] + 8024c6a: b002 add sp, #8 + 8024c6c: bd70 pop {r4, r5, r6, pc} + +08024c6e <_ZN8touchgfx6muldivElll>: + 8024c6e: b573 push {r0, r1, r4, r5, r6, lr} + 8024c70: 4606 mov r6, r0 + 8024c72: ab01 add r3, sp, #4 + 8024c74: 460d mov r5, r1 + 8024c76: 4614 mov r4, r2 + 8024c78: f7ff ffda bl 8024c30 <_ZN8touchgfx6muldivElllRl> + 8024c7c: 2e00 cmp r6, #0 + 8024c7e: db20 blt.n 8024cc2 <_ZN8touchgfx6muldivElll+0x54> + 8024c80: bf14 ite ne + 8024c82: 2301 movne r3, #1 + 8024c84: 2300 moveq r3, #0 + 8024c86: 2d00 cmp r5, #0 + 8024c88: db1e blt.n 8024cc8 <_ZN8touchgfx6muldivElll+0x5a> + 8024c8a: bf14 ite ne + 8024c8c: 2201 movne r2, #1 + 8024c8e: 2200 moveq r2, #0 + 8024c90: 2c00 cmp r4, #0 + 8024c92: fb03 f202 mul.w r2, r3, r2 + 8024c96: db1a blt.n 8024cce <_ZN8touchgfx6muldivElll+0x60> + 8024c98: bf14 ite ne + 8024c9a: 2301 movne r3, #1 + 8024c9c: 2300 moveq r3, #0 + 8024c9e: 4353 muls r3, r2 + 8024ca0: 2b01 cmp r3, #1 + 8024ca2: d117 bne.n 8024cd4 <_ZN8touchgfx6muldivElll+0x66> + 8024ca4: 2c00 cmp r4, #0 + 8024ca6: 9b01 ldr r3, [sp, #4] + 8024ca8: bfb8 it lt + 8024caa: 4264 neglt r4, r4 + 8024cac: 2b00 cmp r3, #0 + 8024cae: f104 0401 add.w r4, r4, #1 + 8024cb2: bfb8 it lt + 8024cb4: 425b neglt r3, r3 + 8024cb6: ebb3 0f64 cmp.w r3, r4, asr #1 + 8024cba: db00 blt.n 8024cbe <_ZN8touchgfx6muldivElll+0x50> + 8024cbc: 3001 adds r0, #1 + 8024cbe: b002 add sp, #8 + 8024cc0: bd70 pop {r4, r5, r6, pc} + 8024cc2: f04f 33ff mov.w r3, #4294967295 + 8024cc6: e7de b.n 8024c86 <_ZN8touchgfx6muldivElll+0x18> + 8024cc8: f04f 32ff mov.w r2, #4294967295 + 8024ccc: e7e0 b.n 8024c90 <_ZN8touchgfx6muldivElll+0x22> + 8024cce: f04f 33ff mov.w r3, #4294967295 + 8024cd2: e7e4 b.n 8024c9e <_ZN8touchgfx6muldivElll+0x30> + 8024cd4: 3301 adds r3, #1 + 8024cd6: d1f2 bne.n 8024cbe <_ZN8touchgfx6muldivElll+0x50> + 8024cd8: 9b01 ldr r3, [sp, #4] + 8024cda: 2c00 cmp r4, #0 + 8024cdc: bfb8 it lt + 8024cde: 4264 neglt r4, r4 + 8024ce0: 2b00 cmp r3, #0 + 8024ce2: bfb8 it lt + 8024ce4: 425b neglt r3, r3 + 8024ce6: ebb3 0f64 cmp.w r3, r4, asr #1 + 8024cea: bfc8 it gt + 8024cec: f100 30ff addgt.w r0, r0, #4294967295 + 8024cf0: e7e5 b.n 8024cbe <_ZN8touchgfx6muldivElll+0x50> + +08024cf2 <_ZNK8touchgfx10ClickEvent12getEventTypeEv>: + 8024cf2: 2000 movs r0, #0 + 8024cf4: 4770 bx lr + +08024cf6 <_ZNK8touchgfx9DragEvent12getEventTypeEv>: + 8024cf6: 2001 movs r0, #1 + 8024cf8: 4770 bx lr + +08024cfa <_ZNK8touchgfx12GestureEvent12getEventTypeEv>: + 8024cfa: 2002 movs r0, #2 + 8024cfc: 4770 bx lr + +08024cfe <_ZN8touchgfx6ScreenD1Ev>: + 8024cfe: 4770 bx lr + +08024d00 <_ZN8touchgfx12GestureEventD1Ev>: + 8024d00: 4770 bx lr + +08024d02 <_ZN8touchgfx9DragEventD1Ev>: + 8024d02: 4770 bx lr + +08024d04 <_ZN8touchgfx10ClickEventD1Ev>: + 8024d04: 4770 bx lr + +08024d06 <_ZN8touchgfx10ClickEventD0Ev>: + 8024d06: b510 push {r4, lr} + 8024d08: 4604 mov r4, r0 + 8024d0a: 210c movs r1, #12 + 8024d0c: f00f faf3 bl 80342f6 <_ZdlPvj> + 8024d10: 4620 mov r0, r4 + 8024d12: bd10 pop {r4, pc} + +08024d14 <_ZN8touchgfx9DragEventD0Ev>: + 8024d14: b510 push {r4, lr} + 8024d16: 4604 mov r4, r0 + 8024d18: 2110 movs r1, #16 + 8024d1a: f00f faec bl 80342f6 <_ZdlPvj> + 8024d1e: 4620 mov r0, r4 + 8024d20: bd10 pop {r4, pc} + +08024d22 <_ZN8touchgfx12GestureEventD0Ev>: + 8024d22: b510 push {r4, lr} + 8024d24: 4604 mov r4, r0 + 8024d26: 210c movs r1, #12 + 8024d28: f00f fae5 bl 80342f6 <_ZdlPvj> + 8024d2c: 4620 mov r0, r4 + 8024d2e: bd10 pop {r4, pc} + +08024d30 <_ZN8touchgfx6ScreenD0Ev>: + 8024d30: b510 push {r4, lr} + 8024d32: 4604 mov r4, r0 + 8024d34: 213c movs r1, #60 ; 0x3c + 8024d36: f00f fade bl 80342f6 <_ZdlPvj> + 8024d3a: 4620 mov r0, r4 + 8024d3c: bd10 pop {r4, pc} + ... + +08024d40 <_ZN8touchgfx6Screen18handleGestureEventERKNS_12GestureEventE>: + 8024d40: b530 push {r4, r5, lr} + 8024d42: 460d mov r5, r1 + 8024d44: 6b01 ldr r1, [r0, #48] ; 0x30 + 8024d46: b087 sub sp, #28 + 8024d48: 4604 mov r4, r0 + 8024d4a: b301 cbz r1, 8024d8e <_ZN8touchgfx6Screen18handleGestureEventERKNS_12GestureEventE+0x4e> + 8024d4c: a801 add r0, sp, #4 + 8024d4e: f7ff fe5f bl 8024a10 <_ZNK8touchgfx8Drawable15getAbsoluteRectEv> + 8024d52: 892a ldrh r2, [r5, #8] + 8024d54: f8bd 3004 ldrh.w r3, [sp, #4] + 8024d58: 7928 ldrb r0, [r5, #4] + 8024d5a: 1ad2 subs r2, r2, r3 + 8024d5c: 8ea3 ldrh r3, [r4, #52] ; 0x34 + 8024d5e: f9b5 1006 ldrsh.w r1, [r5, #6] + 8024d62: 441a add r2, r3 + 8024d64: 896b ldrh r3, [r5, #10] + 8024d66: f8bd 5006 ldrh.w r5, [sp, #6] + 8024d6a: f88d 0010 strb.w r0, [sp, #16] + 8024d6e: 1b5b subs r3, r3, r5 + 8024d70: 8ee5 ldrh r5, [r4, #54] ; 0x36 + 8024d72: 6b20 ldr r0, [r4, #48] ; 0x30 + 8024d74: 442b add r3, r5 + 8024d76: 4d07 ldr r5, [pc, #28] ; (8024d94 <_ZN8touchgfx6Screen18handleGestureEventERKNS_12GestureEventE+0x54>) + 8024d78: f8ad 1012 strh.w r1, [sp, #18] + 8024d7c: a903 add r1, sp, #12 + 8024d7e: 9503 str r5, [sp, #12] + 8024d80: f8ad 2014 strh.w r2, [sp, #20] + 8024d84: f8ad 3016 strh.w r3, [sp, #22] + 8024d88: 6803 ldr r3, [r0, #0] + 8024d8a: 6c9b ldr r3, [r3, #72] ; 0x48 + 8024d8c: 4798 blx r3 + 8024d8e: b007 add sp, #28 + 8024d90: bd30 pop {r4, r5, pc} + 8024d92: bf00 nop + 8024d94: 0803c75c .word 0x0803c75c + +08024d98 <_ZN8touchgfx6Screen16handleClickEventERKNS_10ClickEventE>: + 8024d98: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} + 8024d9c: 6b03 ldr r3, [r0, #48] ; 0x30 + 8024d9e: b08a sub sp, #40 ; 0x28 + 8024da0: 4604 mov r4, r0 + 8024da2: 460d mov r5, r1 + 8024da4: b113 cbz r3, 8024dac <_ZN8touchgfx6Screen16handleClickEventERKNS_10ClickEventE+0x14> + 8024da6: 790b ldrb r3, [r1, #4] + 8024da8: 2b00 cmp r3, #0 + 8024daa: d044 beq.n 8024e36 <_ZN8touchgfx6Screen16handleClickEventERKNS_10ClickEventE+0x9e> + 8024dac: f104 0804 add.w r8, r4, #4 + 8024db0: a803 add r0, sp, #12 + 8024db2: 4641 mov r1, r8 + 8024db4: f7ff fe2c bl 8024a10 <_ZNK8touchgfx8Drawable15getAbsoluteRectEv> + 8024db8: 792b ldrb r3, [r5, #4] + 8024dba: f9bd 700c ldrsh.w r7, [sp, #12] + 8024dbe: f9bd 600e ldrsh.w r6, [sp, #14] + 8024dc2: b983 cbnz r3, 8024de6 <_ZN8touchgfx6Screen16handleClickEventERKNS_10ClickEventE+0x4e> + 8024dc4: f104 0336 add.w r3, r4, #54 ; 0x36 + 8024dc8: 892a ldrh r2, [r5, #8] + 8024dca: 88e9 ldrh r1, [r5, #6] + 8024dcc: 4640 mov r0, r8 + 8024dce: 1b92 subs r2, r2, r6 + 8024dd0: 9301 str r3, [sp, #4] + 8024dd2: 1bc9 subs r1, r1, r7 + 8024dd4: f104 0334 add.w r3, r4, #52 ; 0x34 + 8024dd8: b212 sxth r2, r2 + 8024dda: 9300 str r3, [sp, #0] + 8024ddc: b209 sxth r1, r1 + 8024dde: f104 0330 add.w r3, r4, #48 ; 0x30 + 8024de2: f7fa ffa1 bl 801fd28 <_ZN8touchgfx9Container16getLastChildNearEssPPNS_8DrawableEPsS4_> + 8024de6: 6b21 ldr r1, [r4, #48] ; 0x30 + 8024de8: b329 cbz r1, 8024e36 <_ZN8touchgfx6Screen16handleClickEventERKNS_10ClickEventE+0x9e> + 8024dea: a805 add r0, sp, #20 + 8024dec: f7ff fe10 bl 8024a10 <_ZNK8touchgfx8Drawable15getAbsoluteRectEv> + 8024df0: f8bd 2014 ldrh.w r2, [sp, #20] + 8024df4: 792b ldrb r3, [r5, #4] + 8024df6: a907 add r1, sp, #28 + 8024df8: 1abf subs r7, r7, r2 + 8024dfa: 88ea ldrh r2, [r5, #6] + 8024dfc: 6b20 ldr r0, [r4, #48] ; 0x30 + 8024dfe: 4417 add r7, r2 + 8024e00: 8ea2 ldrh r2, [r4, #52] ; 0x34 + 8024e02: f88d 3020 strb.w r3, [sp, #32] + 8024e06: 4417 add r7, r2 + 8024e08: f8bd 2016 ldrh.w r2, [sp, #22] + 8024e0c: 1ab6 subs r6, r6, r2 + 8024e0e: 892a ldrh r2, [r5, #8] + 8024e10: f8ad 7022 strh.w r7, [sp, #34] ; 0x22 + 8024e14: 4416 add r6, r2 + 8024e16: 8ee2 ldrh r2, [r4, #54] ; 0x36 + 8024e18: 4416 add r6, r2 + 8024e1a: 4a08 ldr r2, [pc, #32] ; (8024e3c <_ZN8touchgfx6Screen16handleClickEventERKNS_10ClickEventE+0xa4>) + 8024e1c: f8ad 6024 strh.w r6, [sp, #36] ; 0x24 + 8024e20: 2600 movs r6, #0 + 8024e22: 9207 str r2, [sp, #28] + 8024e24: f8ad 6026 strh.w r6, [sp, #38] ; 0x26 + 8024e28: 6803 ldr r3, [r0, #0] + 8024e2a: 6c5b ldr r3, [r3, #68] ; 0x44 + 8024e2c: 4798 blx r3 + 8024e2e: 792b ldrb r3, [r5, #4] + 8024e30: b10b cbz r3, 8024e36 <_ZN8touchgfx6Screen16handleClickEventERKNS_10ClickEventE+0x9e> + 8024e32: e9c4 660c strd r6, r6, [r4, #48] ; 0x30 + 8024e36: b00a add sp, #40 ; 0x28 + 8024e38: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + 8024e3c: 0803c734 .word 0x0803c734 + +08024e40 <_ZN8touchgfx6Screen15handleDragEventERKNS_9DragEventE>: + 8024e40: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} + 8024e44: 460c mov r4, r1 + 8024e46: 6b01 ldr r1, [r0, #48] ; 0x30 + 8024e48: b088 sub sp, #32 + 8024e4a: 4605 mov r5, r0 + 8024e4c: 2900 cmp r1, #0 + 8024e4e: d06d beq.n 8024f2c <_ZN8touchgfx6Screen15handleDragEventERKNS_9DragEventE+0xec> + 8024e50: 4668 mov r0, sp + 8024e52: f7ff fddd bl 8024a10 <_ZNK8touchgfx8Drawable15getAbsoluteRectEv> + 8024e56: 8ea9 ldrh r1, [r5, #52] ; 0x34 + 8024e58: 88e3 ldrh r3, [r4, #6] + 8024e5a: f9bd 8000 ldrsh.w r8, [sp] + 8024e5e: 440b add r3, r1 + 8024e60: f9bd 7002 ldrsh.w r7, [sp, #2] + 8024e64: b21b sxth r3, r3 + 8024e66: 4543 cmp r3, r8 + 8024e68: db31 blt.n 8024ece <_ZN8touchgfx6Screen15handleDragEventERKNS_9DragEventE+0x8e> + 8024e6a: f8bd c004 ldrh.w ip, [sp, #4] + 8024e6e: 44c4 add ip, r8 + 8024e70: fa0f fc8c sxth.w ip, ip + 8024e74: 4563 cmp r3, ip + 8024e76: da2a bge.n 8024ece <_ZN8touchgfx6Screen15handleDragEventERKNS_9DragEventE+0x8e> + 8024e78: 8eea ldrh r2, [r5, #54] ; 0x36 + 8024e7a: 8926 ldrh r6, [r4, #8] + 8024e7c: 4416 add r6, r2 + 8024e7e: b236 sxth r6, r6 + 8024e80: 42be cmp r6, r7 + 8024e82: db24 blt.n 8024ece <_ZN8touchgfx6Screen15handleDragEventERKNS_9DragEventE+0x8e> + 8024e84: f8bd 0006 ldrh.w r0, [sp, #6] + 8024e88: 4438 add r0, r7 + 8024e8a: b200 sxth r0, r0 + 8024e8c: 4286 cmp r6, r0 + 8024e8e: da1e bge.n 8024ece <_ZN8touchgfx6Screen15handleDragEventERKNS_9DragEventE+0x8e> + 8024e90: 8963 ldrh r3, [r4, #10] + 8024e92: 4419 add r1, r3 + 8024e94: b209 sxth r1, r1 + 8024e96: 4541 cmp r1, r8 + 8024e98: db08 blt.n 8024eac <_ZN8touchgfx6Screen15handleDragEventERKNS_9DragEventE+0x6c> + 8024e9a: 4561 cmp r1, ip + 8024e9c: da06 bge.n 8024eac <_ZN8touchgfx6Screen15handleDragEventERKNS_9DragEventE+0x6c> + 8024e9e: 89a3 ldrh r3, [r4, #12] + 8024ea0: 441a add r2, r3 + 8024ea2: b212 sxth r2, r2 + 8024ea4: 42ba cmp r2, r7 + 8024ea6: db01 blt.n 8024eac <_ZN8touchgfx6Screen15handleDragEventERKNS_9DragEventE+0x6c> + 8024ea8: 4282 cmp r2, r0 + 8024eaa: db10 blt.n 8024ece <_ZN8touchgfx6Screen15handleDragEventERKNS_9DragEventE+0x8e> + 8024eac: 4b21 ldr r3, [pc, #132] ; (8024f34 <_ZN8touchgfx6Screen15handleDragEventERKNS_9DragEventE+0xf4>) + 8024eae: a904 add r1, sp, #16 + 8024eb0: 6b28 ldr r0, [r5, #48] ; 0x30 + 8024eb2: 9304 str r3, [sp, #16] + 8024eb4: 2302 movs r3, #2 + 8024eb6: f88d 3014 strb.w r3, [sp, #20] + 8024eba: 2300 movs r3, #0 + 8024ebc: f8ad 3016 strh.w r3, [sp, #22] + 8024ec0: f8ad 3018 strh.w r3, [sp, #24] + 8024ec4: f8ad 301a strh.w r3, [sp, #26] + 8024ec8: 6803 ldr r3, [r0, #0] + 8024eca: 6c5b ldr r3, [r3, #68] ; 0x44 + 8024ecc: 4798 blx r3 + 8024ece: 1d29 adds r1, r5, #4 + 8024ed0: a802 add r0, sp, #8 + 8024ed2: f7ff fd9d bl 8024a10 <_ZNK8touchgfx8Drawable15getAbsoluteRectEv> + 8024ed6: f8bd 3008 ldrh.w r3, [sp, #8] + 8024eda: 88e0 ldrh r0, [r4, #6] + 8024edc: eba3 0808 sub.w r8, r3, r8 + 8024ee0: f8bd 300a ldrh.w r3, [sp, #10] + 8024ee4: 7921 ldrb r1, [r4, #4] + 8024ee6: fa1f f888 uxth.w r8, r8 + 8024eea: 1bdf subs r7, r3, r7 + 8024eec: f8b5 c034 ldrh.w ip, [r5, #52] ; 0x34 + 8024ef0: b2bb uxth r3, r7 + 8024ef2: 4440 add r0, r8 + 8024ef4: 8922 ldrh r2, [r4, #8] + 8024ef6: 8967 ldrh r7, [r4, #10] + 8024ef8: 4460 add r0, ip + 8024efa: 89a4 ldrh r4, [r4, #12] + 8024efc: 441a add r2, r3 + 8024efe: 8eee ldrh r6, [r5, #54] ; 0x36 + 8024f00: 44b8 add r8, r7 + 8024f02: 4423 add r3, r4 + 8024f04: f8ad 0016 strh.w r0, [sp, #22] + 8024f08: 4432 add r2, r6 + 8024f0a: 44e0 add r8, ip + 8024f0c: 4433 add r3, r6 + 8024f0e: 4c0a ldr r4, [pc, #40] ; (8024f38 <_ZN8touchgfx6Screen15handleDragEventERKNS_9DragEventE+0xf8>) + 8024f10: 6b28 ldr r0, [r5, #48] ; 0x30 + 8024f12: f88d 1014 strb.w r1, [sp, #20] + 8024f16: a904 add r1, sp, #16 + 8024f18: 9404 str r4, [sp, #16] + 8024f1a: f8ad 2018 strh.w r2, [sp, #24] + 8024f1e: f8ad 801a strh.w r8, [sp, #26] + 8024f22: f8ad 301c strh.w r3, [sp, #28] + 8024f26: 6803 ldr r3, [r0, #0] + 8024f28: 6cdb ldr r3, [r3, #76] ; 0x4c + 8024f2a: 4798 blx r3 + 8024f2c: b008 add sp, #32 + 8024f2e: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + 8024f32: bf00 nop + 8024f34: 0803c734 .word 0x0803c734 + 8024f38: 0803c748 .word 0x0803c748 + +08024f3c <_ZN8touchgfx8Drawable20getCachedVisibleRectEv>: + 8024f3c: b537 push {r0, r1, r2, r4, r5, lr} + 8024f3e: 4604 mov r4, r0 + 8024f40: f934 2f0c ldrsh.w r2, [r4, #12]! + 8024f44: 3201 adds r2, #1 + 8024f46: d112 bne.n 8024f6e <_ZN8touchgfx8Drawable20getCachedVisibleRectEv+0x32> + 8024f48: 2500 movs r5, #0 + 8024f4a: f9b0 1008 ldrsh.w r1, [r0, #8] + 8024f4e: f9b0 200a ldrsh.w r2, [r0, #10] + 8024f52: 6803 ldr r3, [r0, #0] + 8024f54: 9500 str r5, [sp, #0] + 8024f56: 466d mov r5, sp + 8024f58: f8ad 1004 strh.w r1, [sp, #4] + 8024f5c: f8ad 2006 strh.w r2, [sp, #6] + 8024f60: 4629 mov r1, r5 + 8024f62: 6a9b ldr r3, [r3, #40] ; 0x28 + 8024f64: 4798 blx r3 + 8024f66: e895 0003 ldmia.w r5, {r0, r1} + 8024f6a: e884 0003 stmia.w r4, {r0, r1} + 8024f6e: 4620 mov r0, r4 + 8024f70: b003 add sp, #12 + 8024f72: bd30 pop {r4, r5, pc} + +08024f74 <_ZN8touchgfx8Drawable13getCachedAbsXEv>: + 8024f74: b513 push {r0, r1, r4, lr} + 8024f76: f9b0 3020 ldrsh.w r3, [r0, #32] + 8024f7a: 4604 mov r4, r0 + 8024f7c: 3301 adds r3, #1 + 8024f7e: d109 bne.n 8024f94 <_ZN8touchgfx8Drawable13getCachedAbsXEv+0x20> + 8024f80: 4601 mov r1, r0 + 8024f82: 4668 mov r0, sp + 8024f84: f7ff fd44 bl 8024a10 <_ZNK8touchgfx8Drawable15getAbsoluteRectEv> + 8024f88: f8bd 3000 ldrh.w r3, [sp] + 8024f8c: 8423 strh r3, [r4, #32] + 8024f8e: f8bd 3002 ldrh.w r3, [sp, #2] + 8024f92: 8463 strh r3, [r4, #34] ; 0x22 + 8024f94: f9b4 0020 ldrsh.w r0, [r4, #32] + 8024f98: b002 add sp, #8 + 8024f9a: bd10 pop {r4, pc} + +08024f9c <_ZN8touchgfx8Drawable13getCachedAbsYEv>: + 8024f9c: b513 push {r0, r1, r4, lr} + 8024f9e: f9b0 3022 ldrsh.w r3, [r0, #34] ; 0x22 + 8024fa2: 4604 mov r4, r0 + 8024fa4: 3301 adds r3, #1 + 8024fa6: d109 bne.n 8024fbc <_ZN8touchgfx8Drawable13getCachedAbsYEv+0x20> + 8024fa8: 4601 mov r1, r0 + 8024faa: 4668 mov r0, sp + 8024fac: f7ff fd30 bl 8024a10 <_ZNK8touchgfx8Drawable15getAbsoluteRectEv> + 8024fb0: f8bd 3000 ldrh.w r3, [sp] + 8024fb4: 8423 strh r3, [r4, #32] + 8024fb6: f8bd 3002 ldrh.w r3, [sp, #2] + 8024fba: 8463 strh r3, [r4, #34] ; 0x22 + 8024fbc: f9b4 0022 ldrsh.w r0, [r4, #34] ; 0x22 + 8024fc0: b002 add sp, #8 + 8024fc2: bd10 pop {r4, pc} + +08024fc4 <_ZN8touchgfx6ScreenC1Ev>: + 8024fc4: b570 push {r4, r5, r6, lr} + 8024fc6: 4b17 ldr r3, [pc, #92] ; (8025024 <_ZN8touchgfx6ScreenC1Ev+0x60>) + 8024fc8: 4605 mov r5, r0 + 8024fca: 4a17 ldr r2, [pc, #92] ; (8025028 <_ZN8touchgfx6ScreenC1Ev+0x64>) + 8024fcc: 2101 movs r1, #1 + 8024fce: f845 3b04 str.w r3, [r5], #4 + 8024fd2: 2300 movs r3, #0 + 8024fd4: 6042 str r2, [r0, #4] + 8024fd6: 4604 mov r4, r0 + 8024fd8: 8103 strh r3, [r0, #8] + 8024fda: 8143 strh r3, [r0, #10] + 8024fdc: 8183 strh r3, [r0, #12] + 8024fde: 81c3 strh r3, [r0, #14] + 8024fe0: 8203 strh r3, [r0, #16] + 8024fe2: 8243 strh r3, [r0, #18] + 8024fe4: 8283 strh r3, [r0, #20] + 8024fe6: 82c3 strh r3, [r0, #22] + 8024fe8: 6203 str r3, [r0, #32] + 8024fea: 8483 strh r3, [r0, #36] ; 0x24 + 8024fec: 84c3 strh r3, [r0, #38] ; 0x26 + 8024fee: f880 3028 strb.w r3, [r0, #40] ; 0x28 + 8024ff2: 6343 str r3, [r0, #52] ; 0x34 + 8024ff4: f880 1029 strb.w r1, [r0, #41] ; 0x29 + 8024ff8: f880 1038 strb.w r1, [r0, #56] ; 0x38 + 8024ffc: e9c0 3306 strd r3, r3, [r0, #24] + 8025000: e9c0 330b strd r3, r3, [r0, #44] ; 0x2c + 8025004: 4b09 ldr r3, [pc, #36] ; (802502c <_ZN8touchgfx6ScreenC1Ev+0x68>) + 8025006: 4628 mov r0, r5 + 8025008: f9b3 6000 ldrsh.w r6, [r3] + 802500c: 6b93 ldr r3, [r2, #56] ; 0x38 + 802500e: 4a08 ldr r2, [pc, #32] ; (8025030 <_ZN8touchgfx6ScreenC1Ev+0x6c>) + 8025010: f9b2 1000 ldrsh.w r1, [r2] + 8025014: 4798 blx r3 + 8025016: 6863 ldr r3, [r4, #4] + 8025018: 4628 mov r0, r5 + 802501a: 4631 mov r1, r6 + 802501c: 6bdb ldr r3, [r3, #60] ; 0x3c + 802501e: 4798 blx r3 + 8025020: 4620 mov r0, r4 + 8025022: bd70 pop {r4, r5, r6, pc} + 8025024: 0803c770 .word 0x0803c770 + 8025028: 0803c328 .word 0x0803c328 + 802502c: 2001e72a .word 0x2001e72a + 8025030: 2001e728 .word 0x2001e728 + +08025034 <_ZN8touchgfx6Screen4drawEv>: + 8025034: 4b09 ldr r3, [pc, #36] ; (802505c <_ZN8touchgfx6Screen4drawEv+0x28>) + 8025036: b507 push {r0, r1, r2, lr} + 8025038: f9b3 2000 ldrsh.w r2, [r3] + 802503c: 2100 movs r1, #0 + 802503e: 4b08 ldr r3, [pc, #32] ; (8025060 <_ZN8touchgfx6Screen4drawEv+0x2c>) + 8025040: 9100 str r1, [sp, #0] + 8025042: 4669 mov r1, sp + 8025044: f9b3 3000 ldrsh.w r3, [r3] + 8025048: f8ad 2004 strh.w r2, [sp, #4] + 802504c: f8ad 3006 strh.w r3, [sp, #6] + 8025050: 6803 ldr r3, [r0, #0] + 8025052: 689b ldr r3, [r3, #8] + 8025054: 4798 blx r3 + 8025056: b003 add sp, #12 + 8025058: f85d fb04 ldr.w pc, [sp], #4 + 802505c: 2001e728 .word 0x2001e728 + 8025060: 2001e72a .word 0x2001e72a + +08025064 <_ZN8touchgfx6Screen5JSMOCERKNS_4RectEPNS_8DrawableE>: + 8025064: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8025068: f9b1 3004 ldrsh.w r3, [r1, #4] + 802506c: b089 sub sp, #36 ; 0x24 + 802506e: 4680 mov r8, r0 + 8025070: 460c mov r4, r1 + 8025072: 2b00 cmp r3, #0 + 8025074: 4615 mov r5, r2 + 8025076: dd0e ble.n 8025096 <_ZN8touchgfx6Screen5JSMOCERKNS_4RectEPNS_8DrawableE+0x32> + 8025078: f9b1 3006 ldrsh.w r3, [r1, #6] + 802507c: 2b00 cmp r3, #0 + 802507e: dd0a ble.n 8025096 <_ZN8touchgfx6Screen5JSMOCERKNS_4RectEPNS_8DrawableE+0x32> + 8025080: 4628 mov r0, r5 + 8025082: f7ff ff5b bl 8024f3c <_ZN8touchgfx8Drawable20getCachedVisibleRectEv> + 8025086: 4621 mov r1, r4 + 8025088: f7fe facf bl 802362a <_ZNK8touchgfx4Rect9intersectERKS0_> + 802508c: 69eb ldr r3, [r5, #28] + 802508e: b928 cbnz r0, 802509c <_ZN8touchgfx6Screen5JSMOCERKNS_4RectEPNS_8DrawableE+0x38> + 8025090: 461d mov r5, r3 + 8025092: 2b00 cmp r3, #0 + 8025094: d1f4 bne.n 8025080 <_ZN8touchgfx6Screen5JSMOCERKNS_4RectEPNS_8DrawableE+0x1c> + 8025096: b009 add sp, #36 ; 0x24 + 8025098: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 802509c: ae04 add r6, sp, #16 + 802509e: 2b00 cmp r3, #0 + 80250a0: f000 80b5 beq.w 802520e <_ZN8touchgfx6Screen5JSMOCERKNS_4RectEPNS_8DrawableE+0x1aa> + 80250a4: 682b ldr r3, [r5, #0] + 80250a6: 4629 mov r1, r5 + 80250a8: a802 add r0, sp, #8 + 80250aa: 68db ldr r3, [r3, #12] + 80250ac: 4798 blx r3 + 80250ae: 4628 mov r0, r5 + 80250b0: f7ff ff60 bl 8024f74 <_ZN8touchgfx8Drawable13getCachedAbsXEv> + 80250b4: f8bd 7008 ldrh.w r7, [sp, #8] + 80250b8: 4407 add r7, r0 + 80250ba: 4628 mov r0, r5 + 80250bc: f7ff ff6e bl 8024f9c <_ZN8touchgfx8Drawable13getCachedAbsYEv> + 80250c0: f8bd 300a ldrh.w r3, [sp, #10] + 80250c4: f9bd 200c ldrsh.w r2, [sp, #12] + 80250c8: b23f sxth r7, r7 + 80250ca: 4418 add r0, r3 + 80250cc: f9bd 300e ldrsh.w r3, [sp, #14] + 80250d0: 4621 mov r1, r4 + 80250d2: f8ad 2014 strh.w r2, [sp, #20] + 80250d6: f8ad 0012 strh.w r0, [sp, #18] + 80250da: 4630 mov r0, r6 + 80250dc: f8ad 3016 strh.w r3, [sp, #22] + 80250e0: f8ad 7010 strh.w r7, [sp, #16] + 80250e4: f7fa ff02 bl 801feec <_ZN8touchgfx4RectaNERKS0_> + 80250e8: 4628 mov r0, r5 + 80250ea: f7ff ff27 bl 8024f3c <_ZN8touchgfx8Drawable20getCachedVisibleRectEv> + 80250ee: ab06 add r3, sp, #24 + 80250f0: 4602 mov r2, r0 + 80250f2: e896 0003 ldmia.w r6, {r0, r1} + 80250f6: e883 0003 stmia.w r3, {r0, r1} + 80250fa: 4611 mov r1, r2 + 80250fc: 4618 mov r0, r3 + 80250fe: f7fa fef5 bl 801feec <_ZN8touchgfx4RectaNERKS0_> + 8025102: f9bd 3018 ldrsh.w r3, [sp, #24] + 8025106: f9b4 1000 ldrsh.w r1, [r4] + 802510a: f9bd a01a ldrsh.w sl, [sp, #26] + 802510e: 4299 cmp r1, r3 + 8025110: f9bd b01c ldrsh.w fp, [sp, #28] + 8025114: f9bd 901e ldrsh.w r9, [sp, #30] + 8025118: d10b bne.n 8025132 <_ZN8touchgfx6Screen5JSMOCERKNS_4RectEPNS_8DrawableE+0xce> + 802511a: f9b4 2002 ldrsh.w r2, [r4, #2] + 802511e: 4552 cmp r2, sl + 8025120: d107 bne.n 8025132 <_ZN8touchgfx6Screen5JSMOCERKNS_4RectEPNS_8DrawableE+0xce> + 8025122: f9b4 2004 ldrsh.w r2, [r4, #4] + 8025126: 455a cmp r2, fp + 8025128: d103 bne.n 8025132 <_ZN8touchgfx6Screen5JSMOCERKNS_4RectEPNS_8DrawableE+0xce> + 802512a: f9b4 2006 ldrsh.w r2, [r4, #6] + 802512e: 454a cmp r2, r9 + 8025130: d06d beq.n 802520e <_ZN8touchgfx6Screen5JSMOCERKNS_4RectEPNS_8DrawableE+0x1aa> + 8025132: f1bb 0f00 cmp.w fp, #0 + 8025136: dd65 ble.n 8025204 <_ZN8touchgfx6Screen5JSMOCERKNS_4RectEPNS_8DrawableE+0x1a0> + 8025138: f1b9 0f00 cmp.w r9, #0 + 802513c: dd62 ble.n 8025204 <_ZN8touchgfx6Screen5JSMOCERKNS_4RectEPNS_8DrawableE+0x1a0> + 802513e: f9b4 2002 ldrsh.w r2, [r4, #2] + 8025142: fa1f f08a uxth.w r0, sl + 8025146: 4552 cmp r2, sl + 8025148: 9000 str r0, [sp, #0] + 802514a: da12 bge.n 8025172 <_ZN8touchgfx6Screen5JSMOCERKNS_4RectEPNS_8DrawableE+0x10e> + 802514c: 9301 str r3, [sp, #4] + 802514e: 9b00 ldr r3, [sp, #0] + 8025150: f9b4 0004 ldrsh.w r0, [r4, #4] + 8025154: f8ad 2012 strh.w r2, [sp, #18] + 8025158: 1a9a subs r2, r3, r2 + 802515a: f8ad 1010 strh.w r1, [sp, #16] + 802515e: 4631 mov r1, r6 + 8025160: f8ad 0014 strh.w r0, [sp, #20] + 8025164: 4640 mov r0, r8 + 8025166: f8ad 2016 strh.w r2, [sp, #22] + 802516a: 69ea ldr r2, [r5, #28] + 802516c: f7ff ff7a bl 8025064 <_ZN8touchgfx6Screen5JSMOCERKNS_4RectEPNS_8DrawableE> + 8025170: 9b01 ldr r3, [sp, #4] + 8025172: f9b4 2000 ldrsh.w r2, [r4] + 8025176: b29f uxth r7, r3 + 8025178: 429a cmp r2, r3 + 802517a: da0d bge.n 8025198 <_ZN8touchgfx6Screen5JSMOCERKNS_4RectEPNS_8DrawableE+0x134> + 802517c: f8ad 2010 strh.w r2, [sp, #16] + 8025180: 1aba subs r2, r7, r2 + 8025182: f8ad a012 strh.w sl, [sp, #18] + 8025186: 4631 mov r1, r6 + 8025188: f8ad 2014 strh.w r2, [sp, #20] + 802518c: 4640 mov r0, r8 + 802518e: f8ad 9016 strh.w r9, [sp, #22] + 8025192: 69ea ldr r2, [r5, #28] + 8025194: f7ff ff66 bl 8025064 <_ZN8touchgfx6Screen5JSMOCERKNS_4RectEPNS_8DrawableE> + 8025198: 8822 ldrh r2, [r4, #0] + 802519a: 445f add r7, fp + 802519c: 88a3 ldrh r3, [r4, #4] + 802519e: b2bf uxth r7, r7 + 80251a0: 4413 add r3, r2 + 80251a2: b23a sxth r2, r7 + 80251a4: b29b uxth r3, r3 + 80251a6: b219 sxth r1, r3 + 80251a8: 4291 cmp r1, r2 + 80251aa: dd0d ble.n 80251c8 <_ZN8touchgfx6Screen5JSMOCERKNS_4RectEPNS_8DrawableE+0x164> + 80251ac: 1bdb subs r3, r3, r7 + 80251ae: f8ad 2010 strh.w r2, [sp, #16] + 80251b2: f8ad a012 strh.w sl, [sp, #18] + 80251b6: 4631 mov r1, r6 + 80251b8: f8ad 3014 strh.w r3, [sp, #20] + 80251bc: 4640 mov r0, r8 + 80251be: f8ad 9016 strh.w r9, [sp, #22] + 80251c2: 69ea ldr r2, [r5, #28] + 80251c4: f7ff ff4e bl 8025064 <_ZN8touchgfx6Screen5JSMOCERKNS_4RectEPNS_8DrawableE> + 80251c8: 88e2 ldrh r2, [r4, #6] + 80251ca: 8863 ldrh r3, [r4, #2] + 80251cc: 4413 add r3, r2 + 80251ce: 9a00 ldr r2, [sp, #0] + 80251d0: 444a add r2, r9 + 80251d2: b29b uxth r3, r3 + 80251d4: fa1f f982 uxth.w r9, r2 + 80251d8: b219 sxth r1, r3 + 80251da: fa0f f289 sxth.w r2, r9 + 80251de: 428a cmp r2, r1 + 80251e0: da15 bge.n 802520e <_ZN8touchgfx6Screen5JSMOCERKNS_4RectEPNS_8DrawableE+0x1aa> + 80251e2: f9b4 1004 ldrsh.w r1, [r4, #4] + 80251e6: eba3 0309 sub.w r3, r3, r9 + 80251ea: f9b4 0000 ldrsh.w r0, [r4] + 80251ee: f8ad 1014 strh.w r1, [sp, #20] + 80251f2: 4631 mov r1, r6 + 80251f4: f8ad 0010 strh.w r0, [sp, #16] + 80251f8: f8ad 2012 strh.w r2, [sp, #18] + 80251fc: f8ad 3016 strh.w r3, [sp, #22] + 8025200: 69ea ldr r2, [r5, #28] + 8025202: e001 b.n 8025208 <_ZN8touchgfx6Screen5JSMOCERKNS_4RectEPNS_8DrawableE+0x1a4> + 8025204: 69ea ldr r2, [r5, #28] + 8025206: 4621 mov r1, r4 + 8025208: 4640 mov r0, r8 + 802520a: f7ff ff2b bl 8025064 <_ZN8touchgfx6Screen5JSMOCERKNS_4RectEPNS_8DrawableE> + 802520e: 4628 mov r0, r5 + 8025210: f7ff fe94 bl 8024f3c <_ZN8touchgfx8Drawable20getCachedVisibleRectEv> + 8025214: 6861 ldr r1, [r4, #4] + 8025216: 4602 mov r2, r0 + 8025218: 4633 mov r3, r6 + 802521a: 6820 ldr r0, [r4, #0] + 802521c: c303 stmia r3!, {r0, r1} + 802521e: 4611 mov r1, r2 + 8025220: 4630 mov r0, r6 + 8025222: f7fa fe63 bl 801feec <_ZN8touchgfx4RectaNERKS0_> + 8025226: f9bd 3014 ldrsh.w r3, [sp, #20] + 802522a: 2b00 cmp r3, #0 + 802522c: f77f af33 ble.w 8025096 <_ZN8touchgfx6Screen5JSMOCERKNS_4RectEPNS_8DrawableE+0x32> + 8025230: f9bd 3016 ldrsh.w r3, [sp, #22] + 8025234: 2b00 cmp r3, #0 + 8025236: f77f af2e ble.w 8025096 <_ZN8touchgfx6Screen5JSMOCERKNS_4RectEPNS_8DrawableE+0x32> + 802523a: 4628 mov r0, r5 + 802523c: f7ff fe9a bl 8024f74 <_ZN8touchgfx8Drawable13getCachedAbsXEv> + 8025240: f8bd 3010 ldrh.w r3, [sp, #16] + 8025244: 1a18 subs r0, r3, r0 + 8025246: f8ad 0010 strh.w r0, [sp, #16] + 802524a: 4628 mov r0, r5 + 802524c: f7ff fea6 bl 8024f9c <_ZN8touchgfx8Drawable13getCachedAbsYEv> + 8025250: f8bd 3012 ldrh.w r3, [sp, #18] + 8025254: 4631 mov r1, r6 + 8025256: 1a18 subs r0, r3, r0 + 8025258: f8ad 0012 strh.w r0, [sp, #18] + 802525c: 4628 mov r0, r5 + 802525e: 682b ldr r3, [r5, #0] + 8025260: 689b ldr r3, [r3, #8] + 8025262: 4798 blx r3 + 8025264: e717 b.n 8025096 <_ZN8touchgfx6Screen5JSMOCERKNS_4RectEPNS_8DrawableE+0x32> + +08025266 <_ZN8touchgfx6Screen9startSMOCERKNS_4RectE>: + 8025266: b570 push {r4, r5, r6, lr} + 8025268: 1d06 adds r6, r0, #4 + 802526a: b086 sub sp, #24 + 802526c: 460c mov r4, r1 + 802526e: 2300 movs r3, #0 + 8025270: 4631 mov r1, r6 + 8025272: 4605 mov r5, r0 + 8025274: a802 add r0, sp, #8 + 8025276: 9301 str r3, [sp, #4] + 8025278: f7ff fbca bl 8024a10 <_ZNK8touchgfx8Drawable15getAbsoluteRectEv> + 802527c: f8bd 3008 ldrh.w r3, [sp, #8] + 8025280: 8822 ldrh r2, [r4, #0] + 8025282: f8bd 100a ldrh.w r1, [sp, #10] + 8025286: 1ad2 subs r2, r2, r3 + 8025288: 8863 ldrh r3, [r4, #2] + 802528a: f9b4 0004 ldrsh.w r0, [r4, #4] + 802528e: 1a5b subs r3, r3, r1 + 8025290: f9b4 1006 ldrsh.w r1, [r4, #6] + 8025294: f8ad 2010 strh.w r2, [sp, #16] + 8025298: aa01 add r2, sp, #4 + 802529a: f8ad 0014 strh.w r0, [sp, #20] + 802529e: 4630 mov r0, r6 + 80252a0: f8ad 1016 strh.w r1, [sp, #22] + 80252a4: a904 add r1, sp, #16 + 80252a6: f8ad 3012 strh.w r3, [sp, #18] + 80252aa: f7fa fef7 bl 802009c <_ZN8touchgfx9Container14setupDrawChainERKNS_4RectEPPNS_8DrawableE> + 80252ae: 9a01 ldr r2, [sp, #4] + 80252b0: b11a cbz r2, 80252ba <_ZN8touchgfx6Screen9startSMOCERKNS_4RectE+0x54> + 80252b2: 4621 mov r1, r4 + 80252b4: 4628 mov r0, r5 + 80252b6: f7ff fed5 bl 8025064 <_ZN8touchgfx6Screen5JSMOCERKNS_4RectEPNS_8DrawableE> + 80252ba: b006 add sp, #24 + 80252bc: bd70 pop {r4, r5, r6, pc} + +080252be <_ZN8touchgfx6Screen4drawERNS_4RectE>: + 80252be: 4602 mov r2, r0 + 80252c0: b530 push {r4, r5, lr} + 80252c2: 4604 mov r4, r0 + 80252c4: b085 sub sp, #20 + 80252c6: f852 0f08 ldr.w r0, [r2, #8]! + 80252ca: 460d mov r5, r1 + 80252cc: 466b mov r3, sp + 80252ce: 6851 ldr r1, [r2, #4] + 80252d0: c303 stmia r3!, {r0, r1} + 80252d2: 4629 mov r1, r5 + 80252d4: 4668 mov r0, sp + 80252d6: f7fa fe09 bl 801feec <_ZN8touchgfx4RectaNERKS0_> + 80252da: f894 3038 ldrb.w r3, [r4, #56] ; 0x38 + 80252de: b12b cbz r3, 80252ec <_ZN8touchgfx6Screen4drawERNS_4RectE+0x2e> + 80252e0: 4669 mov r1, sp + 80252e2: 4620 mov r0, r4 + 80252e4: f7ff ffbf bl 8025266 <_ZN8touchgfx6Screen9startSMOCERKNS_4RectE> + 80252e8: b005 add sp, #20 + 80252ea: bd30 pop {r4, r5, pc} + 80252ec: 3404 adds r4, #4 + 80252ee: a802 add r0, sp, #8 + 80252f0: 4621 mov r1, r4 + 80252f2: f7ff fb8d bl 8024a10 <_ZNK8touchgfx8Drawable15getAbsoluteRectEv> + 80252f6: f8bd 3000 ldrh.w r3, [sp] + 80252fa: f8bd 2008 ldrh.w r2, [sp, #8] + 80252fe: 4669 mov r1, sp + 8025300: 4620 mov r0, r4 + 8025302: 1a9b subs r3, r3, r2 + 8025304: f8bd 200a ldrh.w r2, [sp, #10] + 8025308: f8ad 3000 strh.w r3, [sp] + 802530c: f8bd 3002 ldrh.w r3, [sp, #2] + 8025310: 1a9b subs r3, r3, r2 + 8025312: f8ad 3002 strh.w r3, [sp, #2] + 8025316: f7fa fe88 bl 802002a <_ZNK8touchgfx9Container4drawERKNS_4RectE> + 802531a: e7e5 b.n 80252e8 <_ZN8touchgfx6Screen4drawERNS_4RectE+0x2a> + +0802531c <_ZN8touchgfx6Screen14bindTransitionERNS_10TransitionE>: + 802531c: 460b mov r3, r1 + 802531e: 680a ldr r2, [r1, #0] + 8025320: 1d01 adds r1, r0, #4 + 8025322: 6992 ldr r2, [r2, #24] + 8025324: 4618 mov r0, r3 + 8025326: 4710 bx r2 + +08025328 <_ZN8touchgfx12TextProviderC1Ev>: + 8025328: b538 push {r3, r4, r5, lr} + 802532a: 2500 movs r5, #0 + 802532c: 2302 movs r3, #2 + 802532e: 4604 mov r4, r0 + 8025330: 220e movs r2, #14 + 8025332: 7403 strb r3, [r0, #16] + 8025334: 4629 mov r1, r5 + 8025336: 6145 str r5, [r0, #20] + 8025338: 7605 strb r5, [r0, #24] + 802533a: 83c5 strh r5, [r0, #30] + 802533c: 8405 strh r5, [r0, #32] + 802533e: 86c5 strh r5, [r0, #54] ; 0x36 + 8025340: 8705 strh r5, [r0, #56] ; 0x38 + 8025342: 87c5 strh r5, [r0, #62] ; 0x3e + 8025344: f8a0 5040 strh.w r5, [r0, #64] ; 0x40 + 8025348: e9c0 5500 strd r5, r5, [r0] + 802534c: e9c0 5511 strd r5, r5, [r0, #68] ; 0x44 + 8025350: 304c adds r0, #76 ; 0x4c + 8025352: f00f fb33 bl 80349bc + 8025356: 2301 movs r3, #1 + 8025358: 4620 mov r0, r4 + 802535a: f8a4 505a strh.w r5, [r4, #90] ; 0x5a + 802535e: f8a4 505c strh.w r5, [r4, #92] ; 0x5c + 8025362: f8a4 505e strh.w r5, [r4, #94] ; 0x5e + 8025366: f884 3060 strb.w r3, [r4, #96] ; 0x60 + 802536a: f884 5061 strb.w r5, [r4, #97] ; 0x61 + 802536e: f7df fcab bl 8004cc8 <_ZN8touchgfx12TextProvider18initializeInternalEv> + 8025372: 4620 mov r0, r4 + 8025374: bd38 pop {r3, r4, r5, pc} + +08025376 <_ZN8touchgfx12TextProvider11endOfStringEv>: + 8025376: 8ec3 ldrh r3, [r0, #54] ; 0x36 + 8025378: eb00 0043 add.w r0, r0, r3, lsl #1 + 802537c: 8c40 ldrh r0, [r0, #34] ; 0x22 + 802537e: fab0 f080 clz r0, r0 + 8025382: 0940 lsrs r0, r0, #5 + 8025384: 4770 bx lr + +08025386 <_ZN8touchgfx12TextProvider19getNextCharInternalEv>: + 8025386: b530 push {r4, r5, lr} + 8025388: 2500 movs r5, #0 + 802538a: 2401 movs r4, #1 + 802538c: 6843 ldr r3, [r0, #4] + 802538e: b913 cbnz r3, 8025396 <_ZN8touchgfx12TextProvider19getNextCharInternalEv+0x10> + 8025390: 6803 ldr r3, [r0, #0] + 8025392: b313 cbz r3, 80253da <_ZN8touchgfx12TextProvider19getNextCharInternalEv+0x54> + 8025394: 6043 str r3, [r0, #4] + 8025396: 7e03 ldrb r3, [r0, #24] + 8025398: b143 cbz r3, 80253ac <_ZN8touchgfx12TextProvider19getNextCharInternalEv+0x26> + 802539a: 6943 ldr r3, [r0, #20] + 802539c: b12b cbz r3, 80253aa <_ZN8touchgfx12TextProvider19getNextCharInternalEv+0x24> + 802539e: 881a ldrh r2, [r3, #0] + 80253a0: b11a cbz r2, 80253aa <_ZN8touchgfx12TextProvider19getNextCharInternalEv+0x24> + 80253a2: 1c9a adds r2, r3, #2 + 80253a4: 6142 str r2, [r0, #20] + 80253a6: 8818 ldrh r0, [r3, #0] + 80253a8: bd30 pop {r4, r5, pc} + 80253aa: 7605 strb r5, [r0, #24] + 80253ac: 6843 ldr r3, [r0, #4] + 80253ae: 8819 ldrh r1, [r3, #0] + 80253b0: b199 cbz r1, 80253da <_ZN8touchgfx12TextProvider19getNextCharInternalEv+0x54> + 80253b2: 1c9a adds r2, r3, #2 + 80253b4: 2902 cmp r1, #2 + 80253b6: 6042 str r2, [r0, #4] + 80253b8: d1f5 bne.n 80253a6 <_ZN8touchgfx12TextProvider19getNextCharInternalEv+0x20> + 80253ba: 7c03 ldrb r3, [r0, #16] + 80253bc: 2b01 cmp r3, #1 + 80253be: d8e5 bhi.n 802538c <_ZN8touchgfx12TextProvider19getNextCharInternalEv+0x6> + 80253c0: 1c5a adds r2, r3, #1 + 80253c2: 3302 adds r3, #2 + 80253c4: 7402 strb r2, [r0, #16] + 80253c6: f850 3023 ldr.w r3, [r0, r3, lsl #2] + 80253ca: 6143 str r3, [r0, #20] + 80253cc: 2b00 cmp r3, #0 + 80253ce: d0dd beq.n 802538c <_ZN8touchgfx12TextProvider19getNextCharInternalEv+0x6> + 80253d0: 881b ldrh r3, [r3, #0] + 80253d2: 2b00 cmp r3, #0 + 80253d4: d0da beq.n 802538c <_ZN8touchgfx12TextProvider19getNextCharInternalEv+0x6> + 80253d6: 7604 strb r4, [r0, #24] + 80253d8: e7d8 b.n 802538c <_ZN8touchgfx12TextProvider19getNextCharInternalEv+0x6> + 80253da: 2000 movs r0, #0 + 80253dc: e7e4 b.n 80253a8 <_ZN8touchgfx12TextProvider19getNextCharInternalEv+0x22> + +080253de <_ZN8touchgfx12TextProvider10initializeEPKtSt9__va_listS2_PKNS_24FontContextualFormsTableE>: + 80253de: 6001 str r1, [r0, #0] + 80253e0: 2100 movs r1, #0 + 80253e2: b430 push {r4, r5} + 80253e4: 6041 str r1, [r0, #4] + 80253e6: 6815 ldr r5, [r2, #0] + 80253e8: 6085 str r5, [r0, #8] + 80253ea: 6852 ldr r2, [r2, #4] + 80253ec: 6443 str r3, [r0, #68] ; 0x44 + 80253ee: 9b02 ldr r3, [sp, #8] + 80253f0: 60c2 str r2, [r0, #12] + 80253f2: 7401 strb r1, [r0, #16] + 80253f4: 6141 str r1, [r0, #20] + 80253f6: 7601 strb r1, [r0, #24] + 80253f8: 8701 strh r1, [r0, #56] ; 0x38 + 80253fa: 8401 strh r1, [r0, #32] + 80253fc: f8a0 1040 strh.w r1, [r0, #64] ; 0x40 + 8025400: 6483 str r3, [r0, #72] ; 0x48 + 8025402: bc30 pop {r4, r5} + 8025404: f7df bc60 b.w 8004cc8 <_ZN8touchgfx12TextProvider18initializeInternalEv> + +08025408 <_ZN8touchgfx12TextProvider10initializeEPKtS2_PKNS_24FontContextualFormsTableEz>: + 8025408: b408 push {r3} + 802540a: b510 push {r4, lr} + 802540c: b085 sub sp, #20 + 802540e: ac07 add r4, sp, #28 + 8025410: f854 3b04 ldr.w r3, [r4], #4 + 8025414: 9300 str r3, [sp, #0] + 8025416: 4613 mov r3, r2 + 8025418: 4622 mov r2, r4 + 802541a: 9403 str r4, [sp, #12] + 802541c: f7ff ffdf bl 80253de <_ZN8touchgfx12TextProvider10initializeEPKtSt9__va_listS2_PKNS_24FontContextualFormsTableE> + 8025420: b005 add sp, #20 + 8025422: e8bd 4010 ldmia.w sp!, {r4, lr} + 8025426: b001 add sp, #4 + 8025428: 4770 bx lr + +0802542a <_ZN8touchgfx12TextProvider16adjustHindiGlyphEPKNS_9GlyphNodeE>: + 802542a: b5f0 push {r4, r5, r6, r7, lr} + 802542c: 4605 mov r5, r0 + 802542e: 4608 mov r0, r1 + 8025430: b1f1 cbz r1, 8025470 <_ZN8touchgfx12TextProvider16adjustHindiGlyphEPKNS_9GlyphNodeE+0x46> + 8025432: f105 044c add.w r4, r5, #76 ; 0x4c + 8025436: 460b mov r3, r1 + 8025438: f101 0708 add.w r7, r1, #8 + 802543c: 4622 mov r2, r4 + 802543e: 6818 ldr r0, [r3, #0] + 8025440: 3308 adds r3, #8 + 8025442: f853 1c04 ldr.w r1, [r3, #-4] + 8025446: 4626 mov r6, r4 + 8025448: 42bb cmp r3, r7 + 802544a: c603 stmia r6!, {r0, r1} + 802544c: 4634 mov r4, r6 + 802544e: d1f6 bne.n 802543e <_ZN8touchgfx12TextProvider16adjustHindiGlyphEPKNS_9GlyphNodeE+0x14> + 8025450: 6818 ldr r0, [r3, #0] + 8025452: 6030 str r0, [r6, #0] + 8025454: 4610 mov r0, r2 + 8025456: 889b ldrh r3, [r3, #4] + 8025458: 80b3 strh r3, [r6, #4] + 802545a: f895 3059 ldrb.w r3, [r5, #89] ; 0x59 + 802545e: 015b lsls r3, r3, #5 + 8025460: f403 7180 and.w r1, r3, #256 ; 0x100 + 8025464: f895 3052 ldrb.w r3, [r5, #82] ; 0x52 + 8025468: 430b orrs r3, r1 + 802546a: 425b negs r3, r3 + 802546c: f885 3055 strb.w r3, [r5, #85] ; 0x55 + 8025470: bdf0 pop {r4, r5, r6, r7, pc} + +08025472 <_ZNK8touchgfx12TextProvider15thaiLookupGlyphEPKNS_9GlyphNodeEPKNS_4FontEt>: + 8025472: b538 push {r3, r4, r5, lr} + 8025474: 460c mov r4, r1 + 8025476: 6811 ldr r1, [r2, #0] + 8025478: 4610 mov r0, r2 + 802547a: 68cd ldr r5, [r1, #12] + 802547c: 4619 mov r1, r3 + 802547e: 47a8 blx r5 + 8025480: 2800 cmp r0, #0 + 8025482: bf08 it eq + 8025484: 4620 moveq r0, r4 + 8025486: bd38 pop {r3, r4, r5, pc} + +08025488 <_ZN8touchgfx12TextProvider15adjustThaiGlyphEPKNS_4FontEPKNS_9GlyphNodeE>: + 8025488: b5f8 push {r3, r4, r5, r6, r7, lr} + 802548a: 4604 mov r4, r0 + 802548c: 4615 mov r5, r2 + 802548e: 4608 mov r0, r1 + 8025490: b93a cbnz r2, 80254a2 <_ZN8touchgfx12TextProvider15adjustThaiGlyphEPKNS_4FontEPKNS_9GlyphNodeE+0x1a> + 8025492: f8a4 205a strh.w r2, [r4, #90] ; 0x5a + 8025496: f8a4 205c strh.w r2, [r4, #92] ; 0x5c + 802549a: f8a4 205e strh.w r2, [r4, #94] ; 0x5e + 802549e: 4628 mov r0, r5 + 80254a0: bdf8 pop {r3, r4, r5, r6, r7, pc} + 80254a2: f892 c00d ldrb.w ip, [r2, #13] + 80254a6: f46f 6763 mvn.w r7, #3632 ; 0xe30 + 80254aa: 8893 ldrh r3, [r2, #4] + 80254ac: ea4f 160c mov.w r6, ip, lsl #4 + 80254b0: f406 7280 and.w r2, r6, #256 ; 0x100 + 80254b4: 79ee ldrb r6, [r5, #7] + 80254b6: 4316 orrs r6, r2 + 80254b8: 19da adds r2, r3, r7 + 80254ba: b291 uxth r1, r2 + 80254bc: b2b7 uxth r7, r6 + 80254be: 291d cmp r1, #29 + 80254c0: d87b bhi.n 80255ba <_ZN8touchgfx12TextProvider15adjustThaiGlyphEPKNS_4FontEPKNS_9GlyphNodeE+0x132> + 80254c2: 2201 movs r2, #1 + 80254c4: 10f6 asrs r6, r6, #3 + 80254c6: 408a lsls r2, r1 + 80254c8: 4974 ldr r1, [pc, #464] ; (802569c <_ZN8touchgfx12TextProvider15adjustThaiGlyphEPKNS_4FontEPKNS_9GlyphNodeE+0x214>) + 80254ca: 420a tst r2, r1 + 80254cc: d12e bne.n 802552c <_ZN8touchgfx12TextProvider15adjustThaiGlyphEPKNS_4FontEPKNS_9GlyphNodeE+0xa4> + 80254ce: f412 7f60 tst.w r2, #896 ; 0x380 + 80254d2: d072 beq.n 80255ba <_ZN8touchgfx12TextProvider15adjustThaiGlyphEPKNS_4FontEPKNS_9GlyphNodeE+0x132> + 80254d4: f104 024c add.w r2, r4, #76 ; 0x4c + 80254d8: 462b mov r3, r5 + 80254da: f105 0e08 add.w lr, r5, #8 + 80254de: 4615 mov r5, r2 + 80254e0: 6818 ldr r0, [r3, #0] + 80254e2: 3308 adds r3, #8 + 80254e4: f853 1c04 ldr.w r1, [r3, #-4] + 80254e8: 4694 mov ip, r2 + 80254ea: 4573 cmp r3, lr + 80254ec: e8ac 0003 stmia.w ip!, {r0, r1} + 80254f0: 4662 mov r2, ip + 80254f2: d1f5 bne.n 80254e0 <_ZN8touchgfx12TextProvider15adjustThaiGlyphEPKNS_4FontEPKNS_9GlyphNodeE+0x58> + 80254f4: 6818 ldr r0, [r3, #0] + 80254f6: f8cc 0000 str.w r0, [ip] + 80254fa: 889b ldrh r3, [r3, #4] + 80254fc: f8ac 3004 strh.w r3, [ip, #4] + 8025500: b2b3 uxth r3, r6 + 8025502: f8b4 105c ldrh.w r1, [r4, #92] ; 0x5c + 8025506: f894 0059 ldrb.w r0, [r4, #89] ; 0x59 + 802550a: 1aca subs r2, r1, r3 + 802550c: 1bcf subs r7, r1, r7 + 802550e: f020 0060 bic.w r0, r0, #96 ; 0x60 + 8025512: b292 uxth r2, r2 + 8025514: 1afb subs r3, r7, r3 + 8025516: f884 2054 strb.w r2, [r4, #84] ; 0x54 + 802551a: 10d2 asrs r2, r2, #3 + 802551c: f002 0260 and.w r2, r2, #96 ; 0x60 + 8025520: 4302 orrs r2, r0 + 8025522: f884 2059 strb.w r2, [r4, #89] ; 0x59 + 8025526: f8a4 305c strh.w r3, [r4, #92] ; 0x5c + 802552a: e7b8 b.n 802549e <_ZN8touchgfx12TextProvider15adjustThaiGlyphEPKNS_4FontEPKNS_9GlyphNodeE+0x16> + 802552c: 8ee3 ldrh r3, [r4, #54] ; 0x36 + 802552e: eb04 0343 add.w r3, r4, r3, lsl #1 + 8025532: 8c59 ldrh r1, [r3, #34] ; 0x22 + 8025534: f640 6333 movw r3, #3635 ; 0xe33 + 8025538: 4299 cmp r1, r3 + 802553a: d110 bne.n 802555e <_ZN8touchgfx12TextProvider15adjustThaiGlyphEPKNS_4FontEPKNS_9GlyphNodeE+0xd6> + 802553c: 6803 ldr r3, [r0, #0] + 802553e: 68db ldr r3, [r3, #12] + 8025540: 4798 blx r3 + 8025542: 7b41 ldrb r1, [r0, #13] + 8025544: 00cb lsls r3, r1, #3 + 8025546: f403 7280 and.w r2, r3, #256 ; 0x100 + 802554a: 7a03 ldrb r3, [r0, #8] + 802554c: 0648 lsls r0, r1, #25 + 802554e: ea43 0302 orr.w r3, r3, r2 + 8025552: bf44 itt mi + 8025554: f5a3 7300 submi.w r3, r3, #512 ; 0x200 + 8025558: b21b sxthmi r3, r3 + 802555a: f8a4 305a strh.w r3, [r4, #90] ; 0x5a + 802555e: f8b4 305a ldrh.w r3, [r4, #90] ; 0x5a + 8025562: 462a mov r2, r5 + 8025564: f105 0c08 add.w ip, r5, #8 + 8025568: 443b add r3, r7 + 802556a: 4433 add r3, r6 + 802556c: f104 064c add.w r6, r4, #76 ; 0x4c + 8025570: b29b uxth r3, r3 + 8025572: 4635 mov r5, r6 + 8025574: f8a4 305a strh.w r3, [r4, #90] ; 0x5a + 8025578: 6810 ldr r0, [r2, #0] + 802557a: 3208 adds r2, #8 + 802557c: f852 1c04 ldr.w r1, [r2, #-4] + 8025580: 4637 mov r7, r6 + 8025582: 4562 cmp r2, ip + 8025584: c703 stmia r7!, {r0, r1} + 8025586: 463e mov r6, r7 + 8025588: d1f6 bne.n 8025578 <_ZN8touchgfx12TextProvider15adjustThaiGlyphEPKNS_4FontEPKNS_9GlyphNodeE+0xf0> + 802558a: 6810 ldr r0, [r2, #0] + 802558c: 6038 str r0, [r7, #0] + 802558e: 8892 ldrh r2, [r2, #4] + 8025590: 80ba strh r2, [r7, #4] + 8025592: f884 3054 strb.w r3, [r4, #84] ; 0x54 + 8025596: 10db asrs r3, r3, #3 + 8025598: f894 2059 ldrb.w r2, [r4, #89] ; 0x59 + 802559c: f003 0360 and.w r3, r3, #96 ; 0x60 + 80255a0: f022 0260 bic.w r2, r2, #96 ; 0x60 + 80255a4: 4313 orrs r3, r2 + 80255a6: f894 205e ldrb.w r2, [r4, #94] ; 0x5e + 80255aa: f884 3059 strb.w r3, [r4, #89] ; 0x59 + 80255ae: f894 3055 ldrb.w r3, [r4, #85] ; 0x55 + 80255b2: 1a9b subs r3, r3, r2 + 80255b4: f884 3055 strb.w r3, [r4, #85] ; 0x55 + 80255b8: e771 b.n 802549e <_ZN8touchgfx12TextProvider15adjustThaiGlyphEPKNS_4FontEPKNS_9GlyphNodeE+0x16> + 80255ba: f023 0204 bic.w r2, r3, #4 + 80255be: f640 611b movw r1, #3611 ; 0xe1b + 80255c2: 428a cmp r2, r1 + 80255c4: d003 beq.n 80255ce <_ZN8touchgfx12TextProvider15adjustThaiGlyphEPKNS_4FontEPKNS_9GlyphNodeE+0x146> + 80255c6: f640 621d movw r2, #3613 ; 0xe1d + 80255ca: 4293 cmp r3, r2 + 80255cc: d120 bne.n 8025610 <_ZN8touchgfx12TextProvider15adjustThaiGlyphEPKNS_4FontEPKNS_9GlyphNodeE+0x188> + 80255ce: 3b01 subs r3, #1 + 80255d0: 4602 mov r2, r0 + 80255d2: 4629 mov r1, r5 + 80255d4: 4620 mov r0, r4 + 80255d6: b29b uxth r3, r3 + 80255d8: f7ff ff4b bl 8025472 <_ZNK8touchgfx12TextProvider15thaiLookupGlyphEPKNS_9GlyphNodeEPKNS_4FontEt> + 80255dc: 7b41 ldrb r1, [r0, #13] + 80255de: 00cb lsls r3, r1, #3 + 80255e0: 0649 lsls r1, r1, #25 + 80255e2: f403 7280 and.w r2, r3, #256 ; 0x100 + 80255e6: 7a03 ldrb r3, [r0, #8] + 80255e8: ea43 0302 orr.w r3, r3, r2 + 80255ec: bf44 itt mi + 80255ee: f5a3 7300 submi.w r3, r3, #512 ; 0x200 + 80255f2: b21b sxthmi r3, r3 + 80255f4: f8a4 305a strh.w r3, [r4, #90] ; 0x5a + 80255f8: 7b6b ldrb r3, [r5, #13] + 80255fa: 7aaa ldrb r2, [r5, #10] + 80255fc: 005b lsls r3, r3, #1 + 80255fe: f403 7380 and.w r3, r3, #256 ; 0x100 + 8025602: 4313 orrs r3, r2 + 8025604: 115a asrs r2, r3, #5 + 8025606: eb02 0393 add.w r3, r2, r3, lsr #2 + 802560a: f8a4 305e strh.w r3, [r4, #94] ; 0x5e + 802560e: e035 b.n 802567c <_ZN8touchgfx12TextProvider15adjustThaiGlyphEPKNS_4FontEPKNS_9GlyphNodeE+0x1f4> + 8025610: ea4f 02cc mov.w r2, ip, lsl #3 + 8025614: f01c 0f40 tst.w ip, #64 ; 0x40 + 8025618: f402 7180 and.w r1, r2, #256 ; 0x100 + 802561c: 7a2a ldrb r2, [r5, #8] + 802561e: ea42 0201 orr.w r2, r2, r1 + 8025622: f640 6109 movw r1, #3593 ; 0xe09 + 8025626: bf1c itt ne + 8025628: f5a2 7200 subne.w r2, r2, #512 ; 0x200 + 802562c: b212 sxthne r2, r2 + 802562e: f8a4 205a strh.w r2, [r4, #90] ; 0x5a + 8025632: f023 0210 bic.w r2, r3, #16 + 8025636: 428a cmp r2, r1 + 8025638: d003 beq.n 8025642 <_ZN8touchgfx12TextProvider15adjustThaiGlyphEPKNS_4FontEPKNS_9GlyphNodeE+0x1ba> + 802563a: f640 6213 movw r2, #3603 ; 0xe13 + 802563e: 4293 cmp r3, r2 + 8025640: d129 bne.n 8025696 <_ZN8touchgfx12TextProvider15adjustThaiGlyphEPKNS_4FontEPKNS_9GlyphNodeE+0x20e> + 8025642: 7b6e ldrb r6, [r5, #13] + 8025644: 4629 mov r1, r5 + 8025646: 0076 lsls r6, r6, #1 + 8025648: f406 7280 and.w r2, r6, #256 ; 0x100 + 802564c: 7aae ldrb r6, [r5, #10] + 802564e: 4316 orrs r6, r2 + 8025650: f640 6213 movw r2, #3603 ; 0xe13 + 8025654: 4293 cmp r3, r2 + 8025656: 4602 mov r2, r0 + 8025658: 4620 mov r0, r4 + 802565a: bf16 itet ne + 802565c: f103 33ff addne.w r3, r3, #4294967295 + 8025660: f640 630c movweq r3, #3596 ; 0xe0c + 8025664: b29b uxthne r3, r3 + 8025666: f7ff ff04 bl 8025472 <_ZNK8touchgfx12TextProvider15thaiLookupGlyphEPKNS_9GlyphNodeEPKNS_4FontEt> + 802566a: 7b43 ldrb r3, [r0, #13] + 802566c: 7a82 ldrb r2, [r0, #10] + 802566e: 005b lsls r3, r3, #1 + 8025670: f403 7380 and.w r3, r3, #256 ; 0x100 + 8025674: 4313 orrs r3, r2 + 8025676: 1af6 subs r6, r6, r3 + 8025678: f8a4 605e strh.w r6, [r4, #94] ; 0x5e + 802567c: 7b69 ldrb r1, [r5, #13] + 802567e: 00cb lsls r3, r1, #3 + 8025680: f403 7280 and.w r2, r3, #256 ; 0x100 + 8025684: 7a2b ldrb r3, [r5, #8] + 8025686: 4313 orrs r3, r2 + 8025688: 064a lsls r2, r1, #25 + 802568a: bf44 itt mi + 802568c: f5a3 7300 submi.w r3, r3, #512 ; 0x200 + 8025690: b21b sxthmi r3, r3 + 8025692: 1bdb subs r3, r3, r7 + 8025694: e747 b.n 8025526 <_ZN8touchgfx12TextProvider15adjustThaiGlyphEPKNS_4FontEPKNS_9GlyphNodeE+0x9e> + 8025696: 2300 movs r3, #0 + 8025698: e7b7 b.n 802560a <_ZN8touchgfx12TextProvider15adjustThaiGlyphEPKNS_4FontEPKNS_9GlyphNodeE+0x182> + 802569a: bf00 nop + 802569c: 3fc00079 .word 0x3fc00079 + +080256a0 <_ZN8touchgfx12TextProvider17adjustArabicGlyphEPKNS_4FontEPKNS_9GlyphNodeEt>: + 80256a0: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} + 80256a4: 4604 mov r4, r0 + 80256a6: b942 cbnz r2, 80256ba <_ZN8touchgfx12TextProvider17adjustArabicGlyphEPKNS_4FontEPKNS_9GlyphNodeEt+0x1a> + 80256a8: f44f 4300 mov.w r3, #32768 ; 0x8000 + 80256ac: f8a0 305a strh.w r3, [r0, #90] ; 0x5a + 80256b0: f8a0 305c strh.w r3, [r0, #92] ; 0x5c + 80256b4: f8a4 305e strh.w r3, [r4, #94] ; 0x5e + 80256b8: e047 b.n 802574a <_ZN8touchgfx12TextProvider17adjustArabicGlyphEPKNS_4FontEPKNS_9GlyphNodeEt+0xaa> + 80256ba: 7b51 ldrb r1, [r2, #13] + 80256bc: 8893 ldrh r3, [r2, #4] + 80256be: 010d lsls r5, r1, #4 + 80256c0: f405 7080 and.w r0, r5, #256 ; 0x100 + 80256c4: 79d5 ldrb r5, [r2, #7] + 80256c6: 4305 orrs r5, r0 + 80256c8: 2d04 cmp r5, #4 + 80256ca: bfcc ite gt + 80256cc: ea4f 0e95 movgt.w lr, r5, lsr #2 + 80256d0: f04f 0e01 movle.w lr, #1 + 80256d4: f5b3 6fdd cmp.w r3, #1768 ; 0x6e8 + 80256d8: f200 80ab bhi.w 8025832 <_ZN8touchgfx12TextProvider17adjustArabicGlyphEPKNS_4FontEPKNS_9GlyphNodeEt+0x192> + 80256dc: f240 60e7 movw r0, #1767 ; 0x6e7 + 80256e0: 4283 cmp r3, r0 + 80256e2: d216 bcs.n 8025712 <_ZN8touchgfx12TextProvider17adjustArabicGlyphEPKNS_4FontEPKNS_9GlyphNodeEt+0x72> + 80256e4: f240 605b movw r0, #1627 ; 0x65b + 80256e8: 4283 cmp r3, r0 + 80256ea: d859 bhi.n 80257a0 <_ZN8touchgfx12TextProvider17adjustArabicGlyphEPKNS_4FontEPKNS_9GlyphNodeEt+0x100> + 80256ec: f240 6057 movw r0, #1623 ; 0x657 + 80256f0: 4283 cmp r3, r0 + 80256f2: d20e bcs.n 8025712 <_ZN8touchgfx12TextProvider17adjustArabicGlyphEPKNS_4FontEPKNS_9GlyphNodeEt+0x72> + 80256f4: f5b3 6fca cmp.w r3, #1616 ; 0x650 + 80256f8: d24a bcs.n 8025790 <_ZN8touchgfx12TextProvider17adjustArabicGlyphEPKNS_4FontEPKNS_9GlyphNodeEt+0xf0> + 80256fa: f240 604e movw r0, #1614 ; 0x64e + 80256fe: 4283 cmp r3, r0 + 8025700: d207 bcs.n 8025712 <_ZN8touchgfx12TextProvider17adjustArabicGlyphEPKNS_4FontEPKNS_9GlyphNodeEt+0x72> + 8025702: f240 601a movw r0, #1562 ; 0x61a + 8025706: 4283 cmp r3, r0 + 8025708: d02a beq.n 8025760 <_ZN8touchgfx12TextProvider17adjustArabicGlyphEPKNS_4FontEPKNS_9GlyphNodeEt+0xc0> + 802570a: d821 bhi.n 8025750 <_ZN8touchgfx12TextProvider17adjustArabicGlyphEPKNS_4FontEPKNS_9GlyphNodeEt+0xb0> + 802570c: f5b3 6fc2 cmp.w r3, #1552 ; 0x610 + 8025710: d35b bcc.n 80257ca <_ZN8touchgfx12TextProvider17adjustArabicGlyphEPKNS_4FontEPKNS_9GlyphNodeEt+0x12a> + 8025712: f9b4 305a ldrsh.w r3, [r4, #90] ; 0x5a + 8025716: f513 4f00 cmn.w r3, #32768 ; 0x8000 + 802571a: f040 80d0 bne.w 80258be <_ZN8touchgfx12TextProvider17adjustArabicGlyphEPKNS_4FontEPKNS_9GlyphNodeEt+0x21e> + 802571e: f9b4 005c ldrsh.w r0, [r4, #92] ; 0x5c + 8025722: f510 4f00 cmn.w r0, #32768 ; 0x8000 + 8025726: f040 80ca bne.w 80258be <_ZN8touchgfx12TextProvider17adjustArabicGlyphEPKNS_4FontEPKNS_9GlyphNodeEt+0x21e> + 802572a: 00cb lsls r3, r1, #3 + 802572c: 0649 lsls r1, r1, #25 + 802572e: f403 7080 and.w r0, r3, #256 ; 0x100 + 8025732: 7a13 ldrb r3, [r2, #8] + 8025734: ea43 0300 orr.w r3, r3, r0 + 8025738: bf44 itt mi + 802573a: f5a3 7300 submi.w r3, r3, #512 ; 0x200 + 802573e: b21b sxthmi r3, r3 + 8025740: f8a4 305a strh.w r3, [r4, #90] ; 0x5a + 8025744: 1b5d subs r5, r3, r5 + 8025746: f8a4 505c strh.w r5, [r4, #92] ; 0x5c + 802574a: 4610 mov r0, r2 + 802574c: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} + 8025750: f240 604b movw r0, #1611 ; 0x64b + 8025754: 4283 cmp r3, r0 + 8025756: d338 bcc.n 80257ca <_ZN8touchgfx12TextProvider17adjustArabicGlyphEPKNS_4FontEPKNS_9GlyphNodeEt+0x12a> + 8025758: f240 604c movw r0, #1612 ; 0x64c + 802575c: 4283 cmp r3, r0 + 802575e: d9d8 bls.n 8025712 <_ZN8touchgfx12TextProvider17adjustArabicGlyphEPKNS_4FontEPKNS_9GlyphNodeEt+0x72> + 8025760: f9b4 005a ldrsh.w r0, [r4, #90] ; 0x5a + 8025764: f9b4 305c ldrsh.w r3, [r4, #92] ; 0x5c + 8025768: f510 4f00 cmn.w r0, #32768 ; 0x8000 + 802576c: f040 80f3 bne.w 8025956 <_ZN8touchgfx12TextProvider17adjustArabicGlyphEPKNS_4FontEPKNS_9GlyphNodeEt+0x2b6> + 8025770: f513 4f00 cmn.w r3, #32768 ; 0x8000 + 8025774: f040 80ef bne.w 8025956 <_ZN8touchgfx12TextProvider17adjustArabicGlyphEPKNS_4FontEPKNS_9GlyphNodeEt+0x2b6> + 8025778: 00cb lsls r3, r1, #3 + 802577a: 064e lsls r6, r1, #25 + 802577c: f403 7080 and.w r0, r3, #256 ; 0x100 + 8025780: 7a13 ldrb r3, [r2, #8] + 8025782: ea43 0300 orr.w r3, r3, r0 + 8025786: bf44 itt mi + 8025788: f5a3 7300 submi.w r3, r3, #512 ; 0x200 + 802578c: b21b sxthmi r3, r3 + 802578e: e7d9 b.n 8025744 <_ZN8touchgfx12TextProvider17adjustArabicGlyphEPKNS_4FontEPKNS_9GlyphNodeEt+0xa4> + 8025790: f240 6054 movw r0, #1620 ; 0x654 + 8025794: 4283 cmp r3, r0 + 8025796: d8e3 bhi.n 8025760 <_ZN8touchgfx12TextProvider17adjustArabicGlyphEPKNS_4FontEPKNS_9GlyphNodeEt+0xc0> + 8025798: f5b3 6fca cmp.w r3, #1616 ; 0x650 + 802579c: d9e0 bls.n 8025760 <_ZN8touchgfx12TextProvider17adjustArabicGlyphEPKNS_4FontEPKNS_9GlyphNodeEt+0xc0> + 802579e: e7b8 b.n 8025712 <_ZN8touchgfx12TextProvider17adjustArabicGlyphEPKNS_4FontEPKNS_9GlyphNodeEt+0x72> + 80257a0: f240 6074 movw r0, #1652 ; 0x674 + 80257a4: 4283 cmp r3, r0 + 80257a6: d0b4 beq.n 8025712 <_ZN8touchgfx12TextProvider17adjustArabicGlyphEPKNS_4FontEPKNS_9GlyphNodeEt+0x72> + 80257a8: d82d bhi.n 8025806 <_ZN8touchgfx12TextProvider17adjustArabicGlyphEPKNS_4FontEPKNS_9GlyphNodeEt+0x166> + 80257aa: f240 605e movw r0, #1630 ; 0x65e + 80257ae: 4283 cmp r3, r0 + 80257b0: d804 bhi.n 80257bc <_ZN8touchgfx12TextProvider17adjustArabicGlyphEPKNS_4FontEPKNS_9GlyphNodeEt+0x11c> + 80257b2: f240 605d movw r0, #1629 ; 0x65d + 80257b6: 4283 cmp r3, r0 + 80257b8: d3d2 bcc.n 8025760 <_ZN8touchgfx12TextProvider17adjustArabicGlyphEPKNS_4FontEPKNS_9GlyphNodeEt+0xc0> + 80257ba: e7aa b.n 8025712 <_ZN8touchgfx12TextProvider17adjustArabicGlyphEPKNS_4FontEPKNS_9GlyphNodeEt+0x72> + 80257bc: f240 605f movw r0, #1631 ; 0x65f + 80257c0: 4283 cmp r3, r0 + 80257c2: d0cd beq.n 8025760 <_ZN8touchgfx12TextProvider17adjustArabicGlyphEPKNS_4FontEPKNS_9GlyphNodeEt+0xc0> + 80257c4: f5b3 6fce cmp.w r3, #1648 ; 0x670 + 80257c8: d0a3 beq.n 8025712 <_ZN8touchgfx12TextProvider17adjustArabicGlyphEPKNS_4FontEPKNS_9GlyphNodeEt+0x72> + 80257ca: 00cb lsls r3, r1, #3 + 80257cc: 0649 lsls r1, r1, #25 + 80257ce: f403 7080 and.w r0, r3, #256 ; 0x100 + 80257d2: 7a13 ldrb r3, [r2, #8] + 80257d4: ea43 0300 orr.w r3, r3, r0 + 80257d8: bf44 itt mi + 80257da: f5a3 7300 submi.w r3, r3, #512 ; 0x200 + 80257de: b21b sxthmi r3, r3 + 80257e0: 1b5d subs r5, r3, r5 + 80257e2: f8a4 305a strh.w r3, [r4, #90] ; 0x5a + 80257e6: f8a4 505c strh.w r5, [r4, #92] ; 0x5c + 80257ea: 7b53 ldrb r3, [r2, #13] + 80257ec: 015b lsls r3, r3, #5 + 80257ee: f403 7180 and.w r1, r3, #256 ; 0x100 + 80257f2: 7993 ldrb r3, [r2, #6] + 80257f4: 430b orrs r3, r1 + 80257f6: 2105 movs r1, #5 + 80257f8: 005b lsls r3, r3, #1 + 80257fa: fb93 f3f1 sdiv r3, r3, r1 + 80257fe: f992 1009 ldrsb.w r1, [r2, #9] + 8025802: 440b add r3, r1 + 8025804: e756 b.n 80256b4 <_ZN8touchgfx12TextProvider17adjustArabicGlyphEPKNS_4FontEPKNS_9GlyphNodeEt+0x14> + 8025806: f240 60e2 movw r0, #1762 ; 0x6e2 + 802580a: 4283 cmp r3, r0 + 802580c: d809 bhi.n 8025822 <_ZN8touchgfx12TextProvider17adjustArabicGlyphEPKNS_4FontEPKNS_9GlyphNodeEt+0x182> + 802580e: f240 60df movw r0, #1759 ; 0x6df + 8025812: 4283 cmp r3, r0 + 8025814: f4bf af7d bcs.w 8025712 <_ZN8touchgfx12TextProvider17adjustArabicGlyphEPKNS_4FontEPKNS_9GlyphNodeEt+0x72> + 8025818: f2a3 63d6 subw r3, r3, #1750 ; 0x6d6 + 802581c: 2b05 cmp r3, #5 + 802581e: d8d4 bhi.n 80257ca <_ZN8touchgfx12TextProvider17adjustArabicGlyphEPKNS_4FontEPKNS_9GlyphNodeEt+0x12a> + 8025820: e777 b.n 8025712 <_ZN8touchgfx12TextProvider17adjustArabicGlyphEPKNS_4FontEPKNS_9GlyphNodeEt+0x72> + 8025822: f240 60e3 movw r0, #1763 ; 0x6e3 + 8025826: 4283 cmp r3, r0 + 8025828: d09a beq.n 8025760 <_ZN8touchgfx12TextProvider17adjustArabicGlyphEPKNS_4FontEPKNS_9GlyphNodeEt+0xc0> + 802582a: f240 60e4 movw r0, #1764 ; 0x6e4 + 802582e: 4283 cmp r3, r0 + 8025830: e7ca b.n 80257c8 <_ZN8touchgfx12TextProvider17adjustArabicGlyphEPKNS_4FontEPKNS_9GlyphNodeEt+0x128> + 8025832: f5b3 6f0f cmp.w r3, #2288 ; 0x8f0 + 8025836: d22b bcs.n 8025890 <_ZN8touchgfx12TextProvider17adjustArabicGlyphEPKNS_4FontEPKNS_9GlyphNodeEt+0x1f0> + 8025838: f640 00ed movw r0, #2285 ; 0x8ed + 802583c: 4283 cmp r3, r0 + 802583e: d28f bcs.n 8025760 <_ZN8touchgfx12TextProvider17adjustArabicGlyphEPKNS_4FontEPKNS_9GlyphNodeEt+0xc0> + 8025840: f640 00e5 movw r0, #2277 ; 0x8e5 + 8025844: 4283 cmp r3, r0 + 8025846: d816 bhi.n 8025876 <_ZN8touchgfx12TextProvider17adjustArabicGlyphEPKNS_4FontEPKNS_9GlyphNodeEt+0x1d6> + 8025848: f640 00e4 movw r0, #2276 ; 0x8e4 + 802584c: 4283 cmp r3, r0 + 802584e: f4bf af60 bcs.w 8025712 <_ZN8touchgfx12TextProvider17adjustArabicGlyphEPKNS_4FontEPKNS_9GlyphNodeEt+0x72> + 8025852: f240 60ec movw r0, #1772 ; 0x6ec + 8025856: 4283 cmp r3, r0 + 8025858: d80a bhi.n 8025870 <_ZN8touchgfx12TextProvider17adjustArabicGlyphEPKNS_4FontEPKNS_9GlyphNodeEt+0x1d0> + 802585a: f240 60eb movw r0, #1771 ; 0x6eb + 802585e: 4283 cmp r3, r0 + 8025860: f4bf af57 bcs.w 8025712 <_ZN8touchgfx12TextProvider17adjustArabicGlyphEPKNS_4FontEPKNS_9GlyphNodeEt+0x72> + 8025864: f240 60ea movw r0, #1770 ; 0x6ea + 8025868: 4283 cmp r3, r0 + 802586a: f43f af79 beq.w 8025760 <_ZN8touchgfx12TextProvider17adjustArabicGlyphEPKNS_4FontEPKNS_9GlyphNodeEt+0xc0> + 802586e: e7ac b.n 80257ca <_ZN8touchgfx12TextProvider17adjustArabicGlyphEPKNS_4FontEPKNS_9GlyphNodeEt+0x12a> + 8025870: f240 60ed movw r0, #1773 ; 0x6ed + 8025874: e7f8 b.n 8025868 <_ZN8touchgfx12TextProvider17adjustArabicGlyphEPKNS_4FontEPKNS_9GlyphNodeEt+0x1c8> + 8025876: f640 00e8 movw r0, #2280 ; 0x8e8 + 802587a: 4283 cmp r3, r0 + 802587c: d802 bhi.n 8025884 <_ZN8touchgfx12TextProvider17adjustArabicGlyphEPKNS_4FontEPKNS_9GlyphNodeEt+0x1e4> + 802587e: f640 00e7 movw r0, #2279 ; 0x8e7 + 8025882: e798 b.n 80257b6 <_ZN8touchgfx12TextProvider17adjustArabicGlyphEPKNS_4FontEPKNS_9GlyphNodeEt+0x116> + 8025884: f640 00e9 movw r0, #2281 ; 0x8e9 + 8025888: 4283 cmp r3, r0 + 802588a: f47f af42 bne.w 8025712 <_ZN8touchgfx12TextProvider17adjustArabicGlyphEPKNS_4FontEPKNS_9GlyphNodeEt+0x72> + 802588e: e767 b.n 8025760 <_ZN8touchgfx12TextProvider17adjustArabicGlyphEPKNS_4FontEPKNS_9GlyphNodeEt+0xc0> + 8025890: f640 00f6 movw r0, #2294 ; 0x8f6 + 8025894: 4283 cmp r3, r0 + 8025896: f43f af63 beq.w 8025760 <_ZN8touchgfx12TextProvider17adjustArabicGlyphEPKNS_4FontEPKNS_9GlyphNodeEt+0xc0> + 802589a: d802 bhi.n 80258a2 <_ZN8touchgfx12TextProvider17adjustArabicGlyphEPKNS_4FontEPKNS_9GlyphNodeEt+0x202> + 802589c: f640 00f2 movw r0, #2290 ; 0x8f2 + 80258a0: e7f2 b.n 8025888 <_ZN8touchgfx12TextProvider17adjustArabicGlyphEPKNS_4FontEPKNS_9GlyphNodeEt+0x1e8> + 80258a2: f640 00fa movw r0, #2298 ; 0x8fa + 80258a6: 4283 cmp r3, r0 + 80258a8: d805 bhi.n 80258b6 <_ZN8touchgfx12TextProvider17adjustArabicGlyphEPKNS_4FontEPKNS_9GlyphNodeEt+0x216> + 80258aa: f640 00f9 movw r0, #2297 ; 0x8f9 + 80258ae: 4283 cmp r3, r0 + 80258b0: f4ff af2f bcc.w 8025712 <_ZN8touchgfx12TextProvider17adjustArabicGlyphEPKNS_4FontEPKNS_9GlyphNodeEt+0x72> + 80258b4: e754 b.n 8025760 <_ZN8touchgfx12TextProvider17adjustArabicGlyphEPKNS_4FontEPKNS_9GlyphNodeEt+0xc0> + 80258b6: f640 00fe movw r0, #2302 ; 0x8fe + 80258ba: 4283 cmp r3, r0 + 80258bc: e7af b.n 802581e <_ZN8touchgfx12TextProvider17adjustArabicGlyphEPKNS_4FontEPKNS_9GlyphNodeEt+0x17e> + 80258be: f104 0c4c add.w ip, r4, #76 ; 0x4c + 80258c2: 4617 mov r7, r2 + 80258c4: f102 0808 add.w r8, r2, #8 + 80258c8: 4666 mov r6, ip + 80258ca: 6838 ldr r0, [r7, #0] + 80258cc: 3708 adds r7, #8 + 80258ce: f857 1c04 ldr.w r1, [r7, #-4] + 80258d2: 46e6 mov lr, ip + 80258d4: 4547 cmp r7, r8 + 80258d6: e8ae 0003 stmia.w lr!, {r0, r1} + 80258da: 46f4 mov ip, lr + 80258dc: d1f5 bne.n 80258ca <_ZN8touchgfx12TextProvider17adjustArabicGlyphEPKNS_4FontEPKNS_9GlyphNodeEt+0x22a> + 80258de: 6838 ldr r0, [r7, #0] + 80258e0: f8ce 0000 str.w r0, [lr] + 80258e4: 88b9 ldrh r1, [r7, #4] + 80258e6: f8ae 1004 strh.w r1, [lr, #4] + 80258ea: f9b4 005e ldrsh.w r0, [r4, #94] ; 0x5e + 80258ee: f510 4f00 cmn.w r0, #32768 ; 0x8000 + 80258f2: d009 beq.n 8025908 <_ZN8touchgfx12TextProvider17adjustArabicGlyphEPKNS_4FontEPKNS_9GlyphNodeEt+0x268> + 80258f4: 7b51 ldrb r1, [r2, #13] + 80258f6: 7992 ldrb r2, [r2, #6] + 80258f8: 0149 lsls r1, r1, #5 + 80258fa: f401 7180 and.w r1, r1, #256 ; 0x100 + 80258fe: 4311 orrs r1, r2 + 8025900: eba0 0051 sub.w r0, r0, r1, lsr #1 + 8025904: f884 0055 strb.w r0, [r4, #85] ; 0x55 + 8025908: f513 4f00 cmn.w r3, #32768 ; 0x8000 + 802590c: b2ad uxth r5, r5 + 802590e: d00d beq.n 802592c <_ZN8touchgfx12TextProvider17adjustArabicGlyphEPKNS_4FontEPKNS_9GlyphNodeEt+0x28c> + 8025910: 442b add r3, r5 + 8025912: f894 2059 ldrb.w r2, [r4, #89] ; 0x59 + 8025916: b29b uxth r3, r3 + 8025918: f022 0260 bic.w r2, r2, #96 ; 0x60 + 802591c: f884 3054 strb.w r3, [r4, #84] ; 0x54 + 8025920: 10db asrs r3, r3, #3 + 8025922: f003 0360 and.w r3, r3, #96 ; 0x60 + 8025926: 4313 orrs r3, r2 + 8025928: f884 3059 strb.w r3, [r4, #89] ; 0x59 + 802592c: f894 1059 ldrb.w r1, [r4, #89] ; 0x59 + 8025930: 00cb lsls r3, r1, #3 + 8025932: 064f lsls r7, r1, #25 + 8025934: f403 7280 and.w r2, r3, #256 ; 0x100 + 8025938: f894 3054 ldrb.w r3, [r4, #84] ; 0x54 + 802593c: ea43 0302 orr.w r3, r3, r2 + 8025940: bf44 itt mi + 8025942: f5a3 7300 submi.w r3, r3, #512 ; 0x200 + 8025946: b21b sxthmi r3, r3 + 8025948: f8a4 305a strh.w r3, [r4, #90] ; 0x5a + 802594c: 1b5b subs r3, r3, r5 + 802594e: f8a4 305c strh.w r3, [r4, #92] ; 0x5c + 8025952: 4632 mov r2, r6 + 8025954: e6f9 b.n 802574a <_ZN8touchgfx12TextProvider17adjustArabicGlyphEPKNS_4FontEPKNS_9GlyphNodeEt+0xaa> + 8025956: f104 0c4c add.w ip, r4, #76 ; 0x4c + 802595a: 4617 mov r7, r2 + 802595c: f102 0908 add.w r9, r2, #8 + 8025960: 4666 mov r6, ip + 8025962: 6838 ldr r0, [r7, #0] + 8025964: 3708 adds r7, #8 + 8025966: f857 1c04 ldr.w r1, [r7, #-4] + 802596a: 46e0 mov r8, ip + 802596c: 454f cmp r7, r9 + 802596e: e8a8 0003 stmia.w r8!, {r0, r1} + 8025972: 46c4 mov ip, r8 + 8025974: d1f5 bne.n 8025962 <_ZN8touchgfx12TextProvider17adjustArabicGlyphEPKNS_4FontEPKNS_9GlyphNodeEt+0x2c2> + 8025976: 6838 ldr r0, [r7, #0] + 8025978: f8c8 0000 str.w r0, [r8] + 802597c: 88b9 ldrh r1, [r7, #4] + 802597e: f8a8 1004 strh.w r1, [r8, #4] + 8025982: f9b4 005e ldrsh.w r0, [r4, #94] ; 0x5e + 8025986: f510 4f00 cmn.w r0, #32768 ; 0x8000 + 802598a: d009 beq.n 80259a0 <_ZN8touchgfx12TextProvider17adjustArabicGlyphEPKNS_4FontEPKNS_9GlyphNodeEt+0x300> + 802598c: 7b51 ldrb r1, [r2, #13] + 802598e: 7992 ldrb r2, [r2, #6] + 8025990: 0149 lsls r1, r1, #5 + 8025992: f401 7180 and.w r1, r1, #256 ; 0x100 + 8025996: 4311 orrs r1, r2 + 8025998: eba0 0051 sub.w r0, r0, r1, lsr #1 + 802599c: f884 0055 strb.w r0, [r4, #85] ; 0x55 + 80259a0: f513 4f00 cmn.w r3, #32768 ; 0x8000 + 80259a4: d00e beq.n 80259c4 <_ZN8touchgfx12TextProvider17adjustArabicGlyphEPKNS_4FontEPKNS_9GlyphNodeEt+0x324> + 80259a6: eba3 030e sub.w r3, r3, lr + 80259aa: f894 2059 ldrb.w r2, [r4, #89] ; 0x59 + 80259ae: b29b uxth r3, r3 + 80259b0: f022 0260 bic.w r2, r2, #96 ; 0x60 + 80259b4: f884 3054 strb.w r3, [r4, #84] ; 0x54 + 80259b8: 10db asrs r3, r3, #3 + 80259ba: f003 0360 and.w r3, r3, #96 ; 0x60 + 80259be: 4313 orrs r3, r2 + 80259c0: f884 3059 strb.w r3, [r4, #89] ; 0x59 + 80259c4: f894 1059 ldrb.w r1, [r4, #89] ; 0x59 + 80259c8: 00cb lsls r3, r1, #3 + 80259ca: 0648 lsls r0, r1, #25 + 80259cc: f403 7280 and.w r2, r3, #256 ; 0x100 + 80259d0: f894 3054 ldrb.w r3, [r4, #84] ; 0x54 + 80259d4: ea43 0302 orr.w r3, r3, r2 + 80259d8: bf44 itt mi + 80259da: f5a3 7300 submi.w r3, r3, #512 ; 0x200 + 80259de: b21b sxthmi r3, r3 + 80259e0: 1b5d subs r5, r3, r5 + 80259e2: f8a4 505c strh.w r5, [r4, #92] ; 0x5c + 80259e6: e7b4 b.n 8025952 <_ZN8touchgfx12TextProvider17adjustArabicGlyphEPKNS_4FontEPKNS_9GlyphNodeEt+0x2b2> + +080259e8 <_ZN8touchgfx12TextProvider15getNextLigatureEhPKNS_4FontERPKNS_9GlyphNodeE>: + 80259e8: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} + 80259ec: 461e mov r6, r3 + 80259ee: 8ec3 ldrh r3, [r0, #54] ; 0x36 + 80259f0: 4604 mov r4, r0 + 80259f2: 4617 mov r7, r2 + 80259f4: eb00 0343 add.w r3, r0, r3, lsl #1 + 80259f8: f8b3 8022 ldrh.w r8, [r3, #34] ; 0x22 + 80259fc: f7df f922 bl 8004c44 <_ZN8touchgfx12TextProvider15getNextLigatureEh> + 8025a00: 4605 mov r5, r0 + 8025a02: b918 cbnz r0, 8025a0c <_ZN8touchgfx12TextProvider15getNextLigatureEhPKNS_4FontERPKNS_9GlyphNodeE+0x24> + 8025a04: 6030 str r0, [r6, #0] + 8025a06: 4628 mov r0, r5 + 8025a08: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + 8025a0c: 683b ldr r3, [r7, #0] + 8025a0e: 4601 mov r1, r0 + 8025a10: 4638 mov r0, r7 + 8025a12: 68db ldr r3, [r3, #12] + 8025a14: 4798 blx r3 + 8025a16: f5a8 63c0 sub.w r3, r8, #1536 ; 0x600 + 8025a1a: 4602 mov r2, r0 + 8025a1c: 6030 str r0, [r6, #0] + 8025a1e: f5b3 7f40 cmp.w r3, #768 ; 0x300 + 8025a22: d213 bcs.n 8025a4c <_ZN8touchgfx12TextProvider15getNextLigatureEhPKNS_4FontERPKNS_9GlyphNodeE+0x64> + 8025a24: 4643 mov r3, r8 + 8025a26: 4639 mov r1, r7 + 8025a28: 4620 mov r0, r4 + 8025a2a: f7ff fe39 bl 80256a0 <_ZN8touchgfx12TextProvider17adjustArabicGlyphEPKNS_4FontEPKNS_9GlyphNodeEt> + 8025a2e: 6030 str r0, [r6, #0] + 8025a30: 6833 ldr r3, [r6, #0] + 8025a32: b143 cbz r3, 8025a46 <_ZN8touchgfx12TextProvider15getNextLigatureEhPKNS_4FontERPKNS_9GlyphNodeE+0x5e> + 8025a34: 7b5a ldrb r2, [r3, #13] + 8025a36: 7a9b ldrb r3, [r3, #10] + 8025a38: 0052 lsls r2, r2, #1 + 8025a3a: f402 7280 and.w r2, r2, #256 ; 0x100 + 8025a3e: 4313 orrs r3, r2 + 8025a40: bf0c ite eq + 8025a42: 2301 moveq r3, #1 + 8025a44: 2300 movne r3, #0 + 8025a46: f884 3061 strb.w r3, [r4, #97] ; 0x61 + 8025a4a: e7dc b.n 8025a06 <_ZN8touchgfx12TextProvider15getNextLigatureEhPKNS_4FontERPKNS_9GlyphNodeE+0x1e> + 8025a4c: f5a5 6360 sub.w r3, r5, #3584 ; 0xe00 + 8025a50: b29b uxth r3, r3 + 8025a52: 2b7f cmp r3, #127 ; 0x7f + 8025a54: d804 bhi.n 8025a60 <_ZN8touchgfx12TextProvider15getNextLigatureEhPKNS_4FontERPKNS_9GlyphNodeE+0x78> + 8025a56: 4639 mov r1, r7 + 8025a58: 4620 mov r0, r4 + 8025a5a: f7ff fd15 bl 8025488 <_ZN8touchgfx12TextProvider15adjustThaiGlyphEPKNS_4FontEPKNS_9GlyphNodeE> + 8025a5e: e7e6 b.n 8025a2e <_ZN8touchgfx12TextProvider15getNextLigatureEhPKNS_4FontERPKNS_9GlyphNodeE+0x46> + 8025a60: f894 3061 ldrb.w r3, [r4, #97] ; 0x61 + 8025a64: 2b00 cmp r3, #0 + 8025a66: d0e3 beq.n 8025a30 <_ZN8touchgfx12TextProvider15getNextLigatureEhPKNS_4FontERPKNS_9GlyphNodeE+0x48> + 8025a68: f640 1302 movw r3, #2306 ; 0x902 + 8025a6c: 429d cmp r5, r3 + 8025a6e: d1df bne.n 8025a30 <_ZN8touchgfx12TextProvider15getNextLigatureEhPKNS_4FontERPKNS_9GlyphNodeE+0x48> + 8025a70: 4601 mov r1, r0 + 8025a72: 4620 mov r0, r4 + 8025a74: f7ff fcd9 bl 802542a <_ZN8touchgfx12TextProvider16adjustHindiGlyphEPKNS_9GlyphNodeE> + 8025a78: e7d9 b.n 8025a2e <_ZN8touchgfx12TextProvider15getNextLigatureEhPKNS_4FontERPKNS_9GlyphNodeE+0x46> + +08025a7a <_ZN8touchgfx12TextProvider15getNextLigatureEhPKNS_4FontERPKNS_9GlyphNodeERPKhRh>: + 8025a7a: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} + 8025a7e: 461e mov r6, r3 + 8025a80: 8ec3 ldrh r3, [r0, #54] ; 0x36 + 8025a82: 4604 mov r4, r0 + 8025a84: 4617 mov r7, r2 + 8025a86: eb00 0343 add.w r3, r0, r3, lsl #1 + 8025a8a: f8b3 8022 ldrh.w r8, [r3, #34] ; 0x22 + 8025a8e: f7df f8d9 bl 8004c44 <_ZN8touchgfx12TextProvider15getNextLigatureEh> + 8025a92: 4605 mov r5, r0 + 8025a94: b918 cbnz r0, 8025a9e <_ZN8touchgfx12TextProvider15getNextLigatureEhPKNS_4FontERPKNS_9GlyphNodeERPKhRh+0x24> + 8025a96: 6030 str r0, [r6, #0] + 8025a98: 4628 mov r0, r5 + 8025a9a: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} + 8025a9e: 683b ldr r3, [r7, #0] + 8025aa0: 4601 mov r1, r0 + 8025aa2: 4638 mov r0, r7 + 8025aa4: f8d3 9008 ldr.w r9, [r3, #8] + 8025aa8: e9dd 2308 ldrd r2, r3, [sp, #32] + 8025aac: 47c8 blx r9 + 8025aae: f5a8 63c0 sub.w r3, r8, #1536 ; 0x600 + 8025ab2: 4602 mov r2, r0 + 8025ab4: 6030 str r0, [r6, #0] + 8025ab6: f5b3 7f40 cmp.w r3, #768 ; 0x300 + 8025aba: d213 bcs.n 8025ae4 <_ZN8touchgfx12TextProvider15getNextLigatureEhPKNS_4FontERPKNS_9GlyphNodeERPKhRh+0x6a> + 8025abc: 4643 mov r3, r8 + 8025abe: 4639 mov r1, r7 + 8025ac0: 4620 mov r0, r4 + 8025ac2: f7ff fded bl 80256a0 <_ZN8touchgfx12TextProvider17adjustArabicGlyphEPKNS_4FontEPKNS_9GlyphNodeEt> + 8025ac6: 6030 str r0, [r6, #0] + 8025ac8: 6833 ldr r3, [r6, #0] + 8025aca: b143 cbz r3, 8025ade <_ZN8touchgfx12TextProvider15getNextLigatureEhPKNS_4FontERPKNS_9GlyphNodeERPKhRh+0x64> + 8025acc: 7b5a ldrb r2, [r3, #13] + 8025ace: 7a9b ldrb r3, [r3, #10] + 8025ad0: 0052 lsls r2, r2, #1 + 8025ad2: f402 7280 and.w r2, r2, #256 ; 0x100 + 8025ad6: 4313 orrs r3, r2 + 8025ad8: bf0c ite eq + 8025ada: 2301 moveq r3, #1 + 8025adc: 2300 movne r3, #0 + 8025ade: f884 3061 strb.w r3, [r4, #97] ; 0x61 + 8025ae2: e7d9 b.n 8025a98 <_ZN8touchgfx12TextProvider15getNextLigatureEhPKNS_4FontERPKNS_9GlyphNodeERPKhRh+0x1e> + 8025ae4: f5a5 6360 sub.w r3, r5, #3584 ; 0xe00 + 8025ae8: b29b uxth r3, r3 + 8025aea: 2b7f cmp r3, #127 ; 0x7f + 8025aec: d804 bhi.n 8025af8 <_ZN8touchgfx12TextProvider15getNextLigatureEhPKNS_4FontERPKNS_9GlyphNodeERPKhRh+0x7e> + 8025aee: 4639 mov r1, r7 + 8025af0: 4620 mov r0, r4 + 8025af2: f7ff fcc9 bl 8025488 <_ZN8touchgfx12TextProvider15adjustThaiGlyphEPKNS_4FontEPKNS_9GlyphNodeE> + 8025af6: e7e6 b.n 8025ac6 <_ZN8touchgfx12TextProvider15getNextLigatureEhPKNS_4FontERPKNS_9GlyphNodeERPKhRh+0x4c> + 8025af8: f894 3061 ldrb.w r3, [r4, #97] ; 0x61 + 8025afc: 2b00 cmp r3, #0 + 8025afe: d0e3 beq.n 8025ac8 <_ZN8touchgfx12TextProvider15getNextLigatureEhPKNS_4FontERPKNS_9GlyphNodeERPKhRh+0x4e> + 8025b00: f640 1302 movw r3, #2306 ; 0x902 + 8025b04: 429d cmp r5, r3 + 8025b06: d1df bne.n 8025ac8 <_ZN8touchgfx12TextProvider15getNextLigatureEhPKNS_4FontERPKNS_9GlyphNodeERPKhRh+0x4e> + 8025b08: 4601 mov r1, r0 + 8025b0a: 4620 mov r0, r4 + 8025b0c: f7ff fc8d bl 802542a <_ZN8touchgfx12TextProvider16adjustHindiGlyphEPKNS_9GlyphNodeE> + 8025b10: e7d9 b.n 8025ac6 <_ZN8touchgfx12TextProvider15getNextLigatureEhPKNS_4FontERPKNS_9GlyphNodeERPKhRh+0x4c> + +08025b12 <_ZN8touchgfx12TextProvider15fillInputBufferEv>: + 8025b12: b510 push {r4, lr} + 8025b14: 4604 mov r4, r0 + 8025b16: f8b4 1040 ldrh.w r1, [r4, #64] ; 0x40 + 8025b1a: 8f23 ldrh r3, [r4, #56] ; 0x38 + 8025b1c: b1e1 cbz r1, 8025b58 <_ZN8touchgfx12TextProvider15fillInputBufferEv+0x46> + 8025b1e: 2b0a cmp r3, #10 + 8025b20: d02d beq.n 8025b7e <_ZN8touchgfx12TextProvider15fillInputBufferEv+0x6c> + 8025b22: 8fe2 ldrh r2, [r4, #62] ; 0x3e + 8025b24: 3901 subs r1, #1 + 8025b26: eb04 0042 add.w r0, r4, r2, lsl #1 + 8025b2a: 8f40 ldrh r0, [r0, #58] ; 0x3a + 8025b2c: f8a4 1040 strh.w r1, [r4, #64] ; 0x40 + 8025b30: 1c51 adds r1, r2, #1 + 8025b32: b289 uxth r1, r1 + 8025b34: 2901 cmp r1, #1 + 8025b36: bf8a itet hi + 8025b38: f102 32ff addhi.w r2, r2, #4294967295 + 8025b3c: 87e1 strhls r1, [r4, #62] ; 0x3e + 8025b3e: 87e2 strhhi r2, [r4, #62] ; 0x3e + 8025b40: 1c5a adds r2, r3, #1 + 8025b42: 8722 strh r2, [r4, #56] ; 0x38 + 8025b44: 8ee2 ldrh r2, [r4, #54] ; 0x36 + 8025b46: 4413 add r3, r2 + 8025b48: b29b uxth r3, r3 + 8025b4a: 2b09 cmp r3, #9 + 8025b4c: bf88 it hi + 8025b4e: 3b0a subhi r3, #10 + 8025b50: eb04 0343 add.w r3, r4, r3, lsl #1 + 8025b54: 8458 strh r0, [r3, #34] ; 0x22 + 8025b56: e7de b.n 8025b16 <_ZN8touchgfx12TextProvider15fillInputBufferEv+0x4> + 8025b58: 8f23 ldrh r3, [r4, #56] ; 0x38 + 8025b5a: 2b0a cmp r3, #10 + 8025b5c: d00f beq.n 8025b7e <_ZN8touchgfx12TextProvider15fillInputBufferEv+0x6c> + 8025b5e: 4620 mov r0, r4 + 8025b60: f7ff fc11 bl 8025386 <_ZN8touchgfx12TextProvider19getNextCharInternalEv> + 8025b64: 8f23 ldrh r3, [r4, #56] ; 0x38 + 8025b66: 1c5a adds r2, r3, #1 + 8025b68: 8722 strh r2, [r4, #56] ; 0x38 + 8025b6a: 8ee2 ldrh r2, [r4, #54] ; 0x36 + 8025b6c: 4413 add r3, r2 + 8025b6e: b29b uxth r3, r3 + 8025b70: 2b09 cmp r3, #9 + 8025b72: bf88 it hi + 8025b74: 3b0a subhi r3, #10 + 8025b76: eb04 0343 add.w r3, r4, r3, lsl #1 + 8025b7a: 8458 strh r0, [r3, #34] ; 0x22 + 8025b7c: e7ec b.n 8025b58 <_ZN8touchgfx12TextProvider15fillInputBufferEv+0x46> + 8025b7e: bd10 pop {r4, pc} + +08025b80 <_ZN8touchgfx12TextProvider11getNextCharEv>: + 8025b80: b538 push {r3, r4, r5, lr} + 8025b82: 8ec3 ldrh r3, [r0, #54] ; 0x36 + 8025b84: 4604 mov r4, r0 + 8025b86: eb00 0243 add.w r2, r0, r3, lsl #1 + 8025b8a: 8c55 ldrh r5, [r2, #34] ; 0x22 + 8025b8c: 8f02 ldrh r2, [r0, #56] ; 0x38 + 8025b8e: 3a01 subs r2, #1 + 8025b90: 8702 strh r2, [r0, #56] ; 0x38 + 8025b92: 1c5a adds r2, r3, #1 + 8025b94: b292 uxth r2, r2 + 8025b96: 2a09 cmp r2, #9 + 8025b98: bf8a itet hi + 8025b9a: 3b09 subhi r3, #9 + 8025b9c: 86c2 strhls r2, [r0, #54] ; 0x36 + 8025b9e: 86c3 strhhi r3, [r0, #54] ; 0x36 + 8025ba0: f7ff ffb7 bl 8025b12 <_ZN8touchgfx12TextProvider15fillInputBufferEv> + 8025ba4: 8c23 ldrh r3, [r4, #32] + 8025ba6: 2b01 cmp r3, #1 + 8025ba8: bf9c itt ls + 8025baa: 3301 addls r3, #1 + 8025bac: 8423 strhls r3, [r4, #32] + 8025bae: 8be3 ldrh r3, [r4, #30] + 8025bb0: b90b cbnz r3, 8025bb6 <_ZN8touchgfx12TextProvider11getNextCharEv+0x36> + 8025bb2: 2302 movs r3, #2 + 8025bb4: 83e3 strh r3, [r4, #30] + 8025bb6: 8be3 ldrh r3, [r4, #30] + 8025bb8: 4628 mov r0, r5 + 8025bba: 3b01 subs r3, #1 + 8025bbc: b29b uxth r3, r3 + 8025bbe: 83e3 strh r3, [r4, #30] + 8025bc0: eb04 0443 add.w r4, r4, r3, lsl #1 + 8025bc4: 8365 strh r5, [r4, #26] + 8025bc6: bd38 pop {r3, r4, r5, pc} + +08025bc8 <_ZN8touchgfx12TextProvider22replaceInputCharactersEttPKt>: + 8025bc8: 428a cmp r2, r1 + 8025bca: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} + 8025bce: 8ec7 ldrh r7, [r0, #54] ; 0x36 + 8025bd0: d932 bls.n 8025c38 <_ZN8touchgfx12TextProvider22replaceInputCharactersEttPKt+0x70> + 8025bd2: 8f05 ldrh r5, [r0, #56] ; 0x38 + 8025bd4: 1a54 subs r4, r2, r1 + 8025bd6: f8b0 8040 ldrh.w r8, [r0, #64] ; 0x40 + 8025bda: 19ee adds r6, r5, r7 + 8025bdc: fa1f fe84 uxth.w lr, r4 + 8025be0: f8b0 c03e ldrh.w ip, [r0, #62] ; 0x3e + 8025be4: 3e01 subs r6, #1 + 8025be6: b2b4 uxth r4, r6 + 8025be8: eba4 090e sub.w r9, r4, lr + 8025bec: fa1f f989 uxth.w r9, r9 + 8025bf0: 2c09 cmp r4, #9 + 8025bf2: 4626 mov r6, r4 + 8025bf4: bf88 it hi + 8025bf6: f1a4 060a subhi.w r6, r4, #10 + 8025bfa: f1bc 0f00 cmp.w ip, #0 + 8025bfe: f104 34ff add.w r4, r4, #4294967295 + 8025c02: bf08 it eq + 8025c04: f04f 0c02 moveq.w ip, #2 + 8025c08: eb00 0646 add.w r6, r0, r6, lsl #1 + 8025c0c: b2a4 uxth r4, r4 + 8025c0e: f10c 3cff add.w ip, ip, #4294967295 + 8025c12: f8b6 a022 ldrh.w sl, [r6, #34] ; 0x22 + 8025c16: 454c cmp r4, r9 + 8025c18: fa1f fc8c uxth.w ip, ip + 8025c1c: eb00 064c add.w r6, r0, ip, lsl #1 + 8025c20: f8a6 a03a strh.w sl, [r6, #58] ; 0x3a + 8025c24: d1e4 bne.n 8025bf0 <_ZN8touchgfx12TextProvider22replaceInputCharactersEttPKt+0x28> + 8025c26: eba5 050e sub.w r5, r5, lr + 8025c2a: eb0e 0408 add.w r4, lr, r8 + 8025c2e: f8a0 c03e strh.w ip, [r0, #62] ; 0x3e + 8025c32: 8705 strh r5, [r0, #56] ; 0x38 + 8025c34: f8a0 4040 strh.w r4, [r0, #64] ; 0x40 + 8025c38: 8f04 ldrh r4, [r0, #56] ; 0x38 + 8025c3a: 250a movs r5, #10 + 8025c3c: 1a64 subs r4, r4, r1 + 8025c3e: 4439 add r1, r7 + 8025c40: b289 uxth r1, r1 + 8025c42: 8704 strh r4, [r0, #56] ; 0x38 + 8025c44: 2909 cmp r1, #9 + 8025c46: bf88 it hi + 8025c48: 390a subhi r1, #10 + 8025c4a: 86c1 strh r1, [r0, #54] ; 0x36 + 8025c4c: b18a cbz r2, 8025c72 <_ZN8touchgfx12TextProvider22replaceInputCharactersEttPKt+0xaa> + 8025c4e: 8f01 ldrh r1, [r0, #56] ; 0x38 + 8025c50: 3a01 subs r2, #1 + 8025c52: 3101 adds r1, #1 + 8025c54: b292 uxth r2, r2 + 8025c56: f833 4012 ldrh.w r4, [r3, r2, lsl #1] + 8025c5a: 8701 strh r1, [r0, #56] ; 0x38 + 8025c5c: 8ec1 ldrh r1, [r0, #54] ; 0x36 + 8025c5e: b901 cbnz r1, 8025c62 <_ZN8touchgfx12TextProvider22replaceInputCharactersEttPKt+0x9a> + 8025c60: 86c5 strh r5, [r0, #54] ; 0x36 + 8025c62: 8ec1 ldrh r1, [r0, #54] ; 0x36 + 8025c64: 3901 subs r1, #1 + 8025c66: b289 uxth r1, r1 + 8025c68: 86c1 strh r1, [r0, #54] ; 0x36 + 8025c6a: eb00 0141 add.w r1, r0, r1, lsl #1 + 8025c6e: 844c strh r4, [r1, #34] ; 0x22 + 8025c70: e7ec b.n 8025c4c <_ZN8touchgfx12TextProvider22replaceInputCharactersEttPKt+0x84> + 8025c72: e8bd 47f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, lr} + 8025c76: f7ff bf4c b.w 8025b12 <_ZN8touchgfx12TextProvider15fillInputBufferEv> + +08025c7a <_ZN8touchgfx12TextProvider13gsubRuleMatchEPKtttt>: + 8025c7a: b570 push {r4, r5, r6, lr} + 8025c7c: 2500 movs r5, #0 + 8025c7e: 4295 cmp r5, r2 + 8025c80: d011 beq.n 8025ca6 <_ZN8touchgfx12TextProvider13gsubRuleMatchEPKtttt+0x2c> + 8025c82: 8bc4 ldrh r4, [r0, #30] + 8025c84: f831 6b02 ldrh.w r6, [r1], #2 + 8025c88: 4414 add r4, r2 + 8025c8a: 3c01 subs r4, #1 + 8025c8c: 1b64 subs r4, r4, r5 + 8025c8e: b2a4 uxth r4, r4 + 8025c90: 2c01 cmp r4, #1 + 8025c92: bf88 it hi + 8025c94: 3c02 subhi r4, #2 + 8025c96: eb00 0444 add.w r4, r0, r4, lsl #1 + 8025c9a: 8b64 ldrh r4, [r4, #26] + 8025c9c: 42b4 cmp r4, r6 + 8025c9e: d117 bne.n 8025cd0 <_ZN8touchgfx12TextProvider13gsubRuleMatchEPKtttt+0x56> + 8025ca0: 3501 adds r5, #1 + 8025ca2: b2ad uxth r5, r5 + 8025ca4: e7eb b.n 8025c7e <_ZN8touchgfx12TextProvider13gsubRuleMatchEPKtttt+0x4> + 8025ca6: f8bd 2010 ldrh.w r2, [sp, #16] + 8025caa: 2400 movs r4, #0 + 8025cac: 4413 add r3, r2 + 8025cae: b2a2 uxth r2, r4 + 8025cb0: 429a cmp r2, r3 + 8025cb2: da0f bge.n 8025cd4 <_ZN8touchgfx12TextProvider13gsubRuleMatchEPKtttt+0x5a> + 8025cb4: 8ec6 ldrh r6, [r0, #54] ; 0x36 + 8025cb6: f831 5014 ldrh.w r5, [r1, r4, lsl #1] + 8025cba: 3401 adds r4, #1 + 8025cbc: 4432 add r2, r6 + 8025cbe: b292 uxth r2, r2 + 8025cc0: 2a09 cmp r2, #9 + 8025cc2: bf88 it hi + 8025cc4: 3a0a subhi r2, #10 + 8025cc6: eb00 0242 add.w r2, r0, r2, lsl #1 + 8025cca: 8c52 ldrh r2, [r2, #34] ; 0x22 + 8025ccc: 42aa cmp r2, r5 + 8025cce: d0ee beq.n 8025cae <_ZN8touchgfx12TextProvider13gsubRuleMatchEPKtttt+0x34> + 8025cd0: 2000 movs r0, #0 + 8025cd2: bd70 pop {r4, r5, r6, pc} + 8025cd4: 2001 movs r0, #1 + 8025cd6: e7fc b.n 8025cd2 <_ZN8touchgfx12TextProvider13gsubRuleMatchEPKtttt+0x58> + +08025cd8 <_ZN8touchgfx12TextProvider14applyGsubRulesEPKtt>: + 8025cd8: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8025cdc: 4605 mov r5, r0 + 8025cde: 4616 mov r6, r2 + 8025ce0: 1c8c adds r4, r1, #2 + 8025ce2: 8809 ldrh r1, [r1, #0] + 8025ce4: ea4f 3a11 mov.w sl, r1, lsr #12 + 8025ce8: f834 301a ldrh.w r3, [r4, sl, lsl #1] + 8025cec: 42b3 cmp r3, r6 + 8025cee: d124 bne.n 8025d3a <_ZN8touchgfx12TextProvider14applyGsubRulesEPKtt+0x62> + 8025cf0: f3c1 2903 ubfx r9, r1, #8, #4 + 8025cf4: f3c1 1803 ubfx r8, r1, #4, #4 + 8025cf8: f001 070f and.w r7, r1, #15 + 8025cfc: 4652 mov r2, sl + 8025cfe: f8cd 8000 str.w r8, [sp] + 8025d02: 464b mov r3, r9 + 8025d04: 4621 mov r1, r4 + 8025d06: 4628 mov r0, r5 + 8025d08: f7ff ffb7 bl 8025c7a <_ZN8touchgfx12TextProvider13gsubRuleMatchEPKtttt> + 8025d0c: 4683 mov fp, r0 + 8025d0e: b168 cbz r0, 8025d2c <_ZN8touchgfx12TextProvider14applyGsubRulesEPKtt+0x54> + 8025d10: eb0a 0109 add.w r1, sl, r9 + 8025d14: 463a mov r2, r7 + 8025d16: 4628 mov r0, r5 + 8025d18: 4441 add r1, r8 + 8025d1a: eb04 0341 add.w r3, r4, r1, lsl #1 + 8025d1e: 4649 mov r1, r9 + 8025d20: f7ff ff52 bl 8025bc8 <_ZN8touchgfx12TextProvider22replaceInputCharactersEttPKt> + 8025d24: 4658 mov r0, fp + 8025d26: b003 add sp, #12 + 8025d28: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 8025d2c: eb07 010a add.w r1, r7, sl + 8025d30: 4449 add r1, r9 + 8025d32: 4441 add r1, r8 + 8025d34: eb04 0141 add.w r1, r4, r1, lsl #1 + 8025d38: e7d2 b.n 8025ce0 <_ZN8touchgfx12TextProvider14applyGsubRulesEPKtt+0x8> + 8025d3a: f04f 0b00 mov.w fp, #0 + 8025d3e: e7f1 b.n 8025d24 <_ZN8touchgfx12TextProvider14applyGsubRulesEPKtt+0x4c> + +08025d40 <_ZNK8touchgfx12TextProvider21gsubTableBinarySearchEtPKtt>: + 8025d40: b570 push {r4, r5, r6, lr} + 8025d42: 8810 ldrh r0, [r2, #0] + 8025d44: 4298 cmp r0, r3 + 8025d46: d817 bhi.n 8025d78 <_ZNK8touchgfx12TextProvider21gsubTableBinarySearchEtPKtt+0x38> + 8025d48: 1e48 subs r0, r1, #1 + 8025d4a: f832 0020 ldrh.w r0, [r2, r0, lsl #2] + 8025d4e: 4298 cmp r0, r3 + 8025d50: d312 bcc.n 8025d78 <_ZNK8touchgfx12TextProvider21gsubTableBinarySearchEtPKtt+0x38> + 8025d52: 2400 movs r4, #0 + 8025d54: 428c cmp r4, r1 + 8025d56: d20f bcs.n 8025d78 <_ZNK8touchgfx12TextProvider21gsubTableBinarySearchEtPKtt+0x38> + 8025d58: 1860 adds r0, r4, r1 + 8025d5a: 1040 asrs r0, r0, #1 + 8025d5c: f832 6020 ldrh.w r6, [r2, r0, lsl #2] + 8025d60: 0085 lsls r5, r0, #2 + 8025d62: 42b3 cmp r3, r6 + 8025d64: d902 bls.n 8025d6c <_ZNK8touchgfx12TextProvider21gsubTableBinarySearchEtPKtt+0x2c> + 8025d66: 3001 adds r0, #1 + 8025d68: b284 uxth r4, r0 + 8025d6a: e7f3 b.n 8025d54 <_ZNK8touchgfx12TextProvider21gsubTableBinarySearchEtPKtt+0x14> + 8025d6c: d201 bcs.n 8025d72 <_ZNK8touchgfx12TextProvider21gsubTableBinarySearchEtPKtt+0x32> + 8025d6e: b281 uxth r1, r0 + 8025d70: e7f0 b.n 8025d54 <_ZNK8touchgfx12TextProvider21gsubTableBinarySearchEtPKtt+0x14> + 8025d72: 442a add r2, r5 + 8025d74: 8850 ldrh r0, [r2, #2] + 8025d76: bd70 pop {r4, r5, r6, pc} + 8025d78: 2000 movs r0, #0 + 8025d7a: e7fc b.n 8025d76 <_ZNK8touchgfx12TextProvider21gsubTableBinarySearchEtPKtt+0x36> + +08025d7c <_ZN8touchgfx12TextProvider16substituteGlyphsEv>: + 8025d7c: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} + 8025d80: 6c45 ldr r5, [r0, #68] ; 0x44 + 8025d82: 4604 mov r4, r0 + 8025d84: 260b movs r6, #11 + 8025d86: 886f ldrh r7, [r5, #2] + 8025d88: 087f lsrs r7, r7, #1 + 8025d8a: 3e01 subs r6, #1 + 8025d8c: d013 beq.n 8025db6 <_ZN8touchgfx12TextProvider16substituteGlyphsEv+0x3a> + 8025d8e: 8ee3 ldrh r3, [r4, #54] ; 0x36 + 8025d90: 462a mov r2, r5 + 8025d92: 4639 mov r1, r7 + 8025d94: 4620 mov r0, r4 + 8025d96: eb04 0343 add.w r3, r4, r3, lsl #1 + 8025d9a: f8b3 8022 ldrh.w r8, [r3, #34] ; 0x22 + 8025d9e: 4643 mov r3, r8 + 8025da0: f7ff ffce bl 8025d40 <_ZNK8touchgfx12TextProvider21gsubTableBinarySearchEtPKtt> + 8025da4: b138 cbz r0, 8025db6 <_ZN8touchgfx12TextProvider16substituteGlyphsEv+0x3a> + 8025da6: eb05 0140 add.w r1, r5, r0, lsl #1 + 8025daa: 4642 mov r2, r8 + 8025dac: 4620 mov r0, r4 + 8025dae: f7ff ff93 bl 8025cd8 <_ZN8touchgfx12TextProvider14applyGsubRulesEPKtt> + 8025db2: 2800 cmp r0, #0 + 8025db4: d1e9 bne.n 8025d8a <_ZN8touchgfx12TextProvider16substituteGlyphsEv+0xe> + 8025db6: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + ... + +08025dbc <_ZN8touchgfx9GradientsC1EPKNS_7Point3DE>: + 8025dbc: b570 push {r4, r5, r6, lr} + 8025dbe: 694a ldr r2, [r1, #20] + 8025dc0: 6a8d ldr r5, [r1, #40] ; 0x28 + 8025dc2: 684b ldr r3, [r1, #4] + 8025dc4: 1b54 subs r4, r2, r5 + 8025dc6: 6ace ldr r6, [r1, #44] ; 0x2c + 8025dc8: f000 8106 beq.w 8025fd8 <_ZN8touchgfx9GradientsC1EPKNS_7Point3DE+0x21c> + 8025dcc: 1b9b subs r3, r3, r6 + 8025dce: d003 beq.n 8025dd8 <_ZN8touchgfx9GradientsC1EPKNS_7Point3DE+0x1c> + 8025dd0: 4363 muls r3, r4 + 8025dd2: 2210 movs r2, #16 + 8025dd4: fb93 f3f2 sdiv r3, r3, r2 + 8025dd8: 680c ldr r4, [r1, #0] + 8025dda: 698a ldr r2, [r1, #24] + 8025ddc: 1b65 subs r5, r4, r5 + 8025dde: f000 80fd beq.w 8025fdc <_ZN8touchgfx9GradientsC1EPKNS_7Point3DE+0x220> + 8025de2: 1b92 subs r2, r2, r6 + 8025de4: d003 beq.n 8025dee <_ZN8touchgfx9GradientsC1EPKNS_7Point3DE+0x32> + 8025de6: 436a muls r2, r5 + 8025de8: 2410 movs r4, #16 + 8025dea: fb92 f2f4 sdiv r2, r2, r4 + 8025dee: 1a9b subs r3, r3, r2 + 8025df0: ed9f 4a89 vldr s8, [pc, #548] ; 8026018 <_ZN8touchgfx9GradientsC1EPKNS_7Point3DE+0x25c> + 8025df4: eeb7 7a00 vmov.f32 s14, #112 ; 0x3f800000 1.0 + 8025df8: 460a mov r2, r1 + 8025dfa: ee07 3a90 vmov s15, r3 + 8025dfe: f100 040c add.w r4, r0, #12 + 8025e02: 4603 mov r3, r0 + 8025e04: eef8 7ae7 vcvt.f32.s32 s15, s15 + 8025e08: ee67 7a84 vmul.f32 s15, s15, s8 + 8025e0c: ee87 3a27 vdiv.f32 s6, s14, s15 + 8025e10: eeb1 6a43 vneg.f32 s12, s6 + 8025e14: edd2 7a02 vldr s15, [r2, #8] + 8025e18: 3214 adds r2, #20 + 8025e1a: eec7 6a27 vdiv.f32 s13, s14, s15 + 8025e1e: ece3 6a01 vstmia r3!, {s13} + 8025e22: 429c cmp r4, r3 + 8025e24: ed52 7a02 vldr s15, [r2, #-8] + 8025e28: ee67 7aa6 vmul.f32 s15, s15, s13 + 8025e2c: edc3 7a02 vstr s15, [r3, #8] + 8025e30: ed52 7a01 vldr s15, [r2, #-4] + 8025e34: ee67 7aa6 vmul.f32 s15, s15, s13 + 8025e38: edc3 7a05 vstr s15, [r3, #20] + 8025e3c: d1ea bne.n 8025e14 <_ZN8touchgfx9GradientsC1EPKNS_7Point3DE+0x58> + 8025e3e: 6aca ldr r2, [r1, #44] ; 0x2c + 8025e40: 698b ldr r3, [r1, #24] + 8025e42: edd0 4a02 vldr s9, [r0, #8] + 8025e46: 1a9b subs r3, r3, r2 + 8025e48: edd0 3a00 vldr s7, [r0] + 8025e4c: edd0 6a01 vldr s13, [r0, #4] + 8025e50: ee07 3a90 vmov s15, r3 + 8025e54: 684b ldr r3, [r1, #4] + 8025e56: ee76 6ae4 vsub.f32 s13, s13, s9 + 8025e5a: ed90 5a05 vldr s10, [r0, #20] + 8025e5e: 1a9b subs r3, r3, r2 + 8025e60: eef8 7ae7 vcvt.f32.s32 s15, s15 + 8025e64: ee73 4ae4 vsub.f32 s9, s7, s9 + 8025e68: ed90 2a03 vldr s4, [r0, #12] + 8025e6c: ee07 3a10 vmov s14, r3 + 8025e70: edd0 5a04 vldr s11, [r0, #16] + 8025e74: ee67 7a84 vmul.f32 s15, s15, s8 + 8025e78: ed90 1a07 vldr s2, [r0, #28] + 8025e7c: eeb8 7ac7 vcvt.f32.s32 s14, s14 + 8025e80: edd0 2a06 vldr s5, [r0, #24] + 8025e84: ee75 5ac5 vsub.f32 s11, s11, s10 + 8025e88: ee64 7ae7 vnmul.f32 s15, s9, s15 + 8025e8c: ee27 7a04 vmul.f32 s14, s14, s8 + 8025e90: ee32 5a45 vsub.f32 s10, s4, s10 + 8025e94: eee6 7a87 vfma.f32 s15, s13, s14 + 8025e98: ee67 7a83 vmul.f32 s15, s15, s6 + 8025e9c: edc0 7a09 vstr s15, [r0, #36] ; 0x24 + 8025ea0: 6a8c ldr r4, [r1, #40] ; 0x28 + 8025ea2: 694a ldr r2, [r1, #20] + 8025ea4: 1b13 subs r3, r2, r4 + 8025ea6: ee07 3a10 vmov s14, r3 + 8025eaa: 680b ldr r3, [r1, #0] + 8025eac: eeb8 7ac7 vcvt.f32.s32 s14, s14 + 8025eb0: 1b1b subs r3, r3, r4 + 8025eb2: ee27 7a04 vmul.f32 s14, s14, s8 + 8025eb6: ee64 4ac7 vnmul.f32 s9, s9, s14 + 8025eba: ee07 3a10 vmov s14, r3 + 8025ebe: eeb8 7ac7 vcvt.f32.s32 s14, s14 + 8025ec2: ee27 7a04 vmul.f32 s14, s14, s8 + 8025ec6: eee6 4a87 vfma.f32 s9, s13, s14 + 8025eca: ee64 4a86 vmul.f32 s9, s9, s12 + 8025ece: edc0 4a0a vstr s9, [r0, #40] ; 0x28 + 8025ed2: 6aca ldr r2, [r1, #44] ; 0x2c + 8025ed4: 698b ldr r3, [r1, #24] + 8025ed6: 1a9b subs r3, r3, r2 + 8025ed8: ee06 3a90 vmov s13, r3 + 8025edc: 684b ldr r3, [r1, #4] + 8025ede: 1a9b subs r3, r3, r2 + 8025ee0: eef8 6ae6 vcvt.f32.s32 s13, s13 + 8025ee4: ee07 3a10 vmov s14, r3 + 8025ee8: ee66 6a84 vmul.f32 s13, s13, s8 + 8025eec: eeb8 7ac7 vcvt.f32.s32 s14, s14 + 8025ef0: ee65 6a66 vnmul.f32 s13, s10, s13 + 8025ef4: ee27 7a04 vmul.f32 s14, s14, s8 + 8025ef8: eee5 6a87 vfma.f32 s13, s11, s14 + 8025efc: ee66 6a83 vmul.f32 s13, s13, s6 + 8025f00: edc0 6a0b vstr s13, [r0, #44] ; 0x2c + 8025f04: 6a8c ldr r4, [r1, #40] ; 0x28 + 8025f06: 694a ldr r2, [r1, #20] + 8025f08: 1b13 subs r3, r2, r4 + 8025f0a: ee07 3a10 vmov s14, r3 + 8025f0e: 680b ldr r3, [r1, #0] + 8025f10: eeb8 7ac7 vcvt.f32.s32 s14, s14 + 8025f14: 1b1b subs r3, r3, r4 + 8025f16: ee27 7a04 vmul.f32 s14, s14, s8 + 8025f1a: ee25 5a47 vnmul.f32 s10, s10, s14 + 8025f1e: ee07 3a10 vmov s14, r3 + 8025f22: eeb8 7ac7 vcvt.f32.s32 s14, s14 + 8025f26: ee27 7a04 vmul.f32 s14, s14, s8 + 8025f2a: eea5 5a87 vfma.f32 s10, s11, s14 + 8025f2e: edd0 5a08 vldr s11, [r0, #32] + 8025f32: ee31 1a65 vsub.f32 s2, s2, s11 + 8025f36: ee72 5ae5 vsub.f32 s11, s5, s11 + 8025f3a: ee25 5a06 vmul.f32 s10, s10, s12 + 8025f3e: ed80 5a0c vstr s10, [r0, #48] ; 0x30 + 8025f42: 6aca ldr r2, [r1, #44] ; 0x2c + 8025f44: 698b ldr r3, [r1, #24] + 8025f46: 1a9b subs r3, r3, r2 + 8025f48: ee07 3a10 vmov s14, r3 + 8025f4c: 684b ldr r3, [r1, #4] + 8025f4e: 1a9b subs r3, r3, r2 + 8025f50: eeb8 7ac7 vcvt.f32.s32 s14, s14 + 8025f54: ee01 3a90 vmov s3, r3 + 8025f58: ee27 7a04 vmul.f32 s14, s14, s8 + 8025f5c: eef8 1ae1 vcvt.f32.s32 s3, s3 + 8025f60: ee25 7ac7 vnmul.f32 s14, s11, s14 + 8025f64: ee61 1a84 vmul.f32 s3, s3, s8 + 8025f68: eea1 7a21 vfma.f32 s14, s2, s3 + 8025f6c: ee27 7a03 vmul.f32 s14, s14, s6 + 8025f70: ed80 7a0d vstr s14, [r0, #52] ; 0x34 + 8025f74: 6a8c ldr r4, [r1, #40] ; 0x28 + 8025f76: 694a ldr r2, [r1, #20] + 8025f78: 1b13 subs r3, r2, r4 + 8025f7a: ee03 3a10 vmov s6, r3 + 8025f7e: 680b ldr r3, [r1, #0] + 8025f80: eeb8 3ac3 vcvt.f32.s32 s6, s6 + 8025f84: 1b1b subs r3, r3, r4 + 8025f86: ee23 3a04 vmul.f32 s6, s6, s8 + 8025f8a: ee65 5ac3 vnmul.f32 s11, s11, s6 + 8025f8e: ee03 3a10 vmov s6, r3 + 8025f92: eeb8 3ac3 vcvt.f32.s32 s6, s6 + 8025f96: ee23 4a04 vmul.f32 s8, s6, s8 + 8025f9a: eee1 5a04 vfma.f32 s11, s2, s8 + 8025f9e: ee25 6a86 vmul.f32 s12, s11, s12 + 8025fa2: ee62 5a67 vnmul.f32 s11, s4, s15 + 8025fa6: ed80 6a0e vstr s12, [r0, #56] ; 0x38 + 8025faa: eee3 5aa6 vfma.f32 s11, s7, s13 + 8025fae: eef5 5ac0 vcmpe.f32 s11, #0.0 + 8025fb2: eef1 fa10 vmrs APSR_nzcv, fpscr + 8025fb6: dd13 ble.n 8025fe0 <_ZN8touchgfx9GradientsC1EPKNS_7Point3DE+0x224> + 8025fb8: f44f 4300 mov.w r3, #32768 ; 0x8000 + 8025fbc: ee62 7ae7 vnmul.f32 s15, s5, s15 + 8025fc0: 63c3 str r3, [r0, #60] ; 0x3c + 8025fc2: eee3 7a87 vfma.f32 s15, s7, s14 + 8025fc6: eef5 7ac0 vcmpe.f32 s15, #0.0 + 8025fca: eef1 fa10 vmrs APSR_nzcv, fpscr + 8025fce: dd15 ble.n 8025ffc <_ZN8touchgfx9GradientsC1EPKNS_7Point3DE+0x240> + 8025fd0: f44f 4300 mov.w r3, #32768 ; 0x8000 + 8025fd4: 6403 str r3, [r0, #64] ; 0x40 + 8025fd6: bd70 pop {r4, r5, r6, pc} + 8025fd8: 4623 mov r3, r4 + 8025fda: e6fd b.n 8025dd8 <_ZN8touchgfx9GradientsC1EPKNS_7Point3DE+0x1c> + 8025fdc: 462a mov r2, r5 + 8025fde: e706 b.n 8025dee <_ZN8touchgfx9GradientsC1EPKNS_7Point3DE+0x32> + 8025fe0: d502 bpl.n 8025fe8 <_ZN8touchgfx9GradientsC1EPKNS_7Point3DE+0x22c> + 8025fe2: f647 73ff movw r3, #32767 ; 0x7fff + 8025fe6: e7e9 b.n 8025fbc <_ZN8touchgfx9GradientsC1EPKNS_7Point3DE+0x200> + 8025fe8: ee22 2a64 vnmul.f32 s4, s4, s9 + 8025fec: eea3 2a85 vfma.f32 s4, s7, s10 + 8025ff0: eeb5 2ac0 vcmpe.f32 s4, #0.0 + 8025ff4: eef1 fa10 vmrs APSR_nzcv, fpscr + 8025ff8: dade bge.n 8025fb8 <_ZN8touchgfx9GradientsC1EPKNS_7Point3DE+0x1fc> + 8025ffa: e7f2 b.n 8025fe2 <_ZN8touchgfx9GradientsC1EPKNS_7Point3DE+0x226> + 8025ffc: d502 bpl.n 8026004 <_ZN8touchgfx9GradientsC1EPKNS_7Point3DE+0x248> + 8025ffe: f647 73ff movw r3, #32767 ; 0x7fff + 8026002: e7e7 b.n 8025fd4 <_ZN8touchgfx9GradientsC1EPKNS_7Point3DE+0x218> + 8026004: ee62 4ae4 vnmul.f32 s9, s5, s9 + 8026008: eee3 4a86 vfma.f32 s9, s7, s12 + 802600c: eef5 4ac0 vcmpe.f32 s9, #0.0 + 8026010: eef1 fa10 vmrs APSR_nzcv, fpscr + 8026014: dadc bge.n 8025fd0 <_ZN8touchgfx9GradientsC1EPKNS_7Point3DE+0x214> + 8026016: e7f2 b.n 8025ffe <_ZN8touchgfx9GradientsC1EPKNS_7Point3DE+0x242> + 8026018: 3d800000 .word 0x3d800000 + +0802601c <_ZN8touchgfx4EdgeC1ERKNS_9GradientsEPKNS_7Point3DEii>: + 802601c: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} + 8026020: 2714 movs r7, #20 + 8026022: 435f muls r7, r3 + 8026024: eb02 0c07 add.w ip, r2, r7 + 8026028: f8dc 5004 ldr.w r5, [ip, #4] + 802602c: f115 0e0f adds.w lr, r5, #15 + 8026030: f100 80a2 bmi.w 8026178 <_ZN8touchgfx4EdgeC1ERKNS_9GradientsEPKNS_7Point3DEii+0x15c> + 8026034: ea4f 1e2e mov.w lr, lr, asr #4 + 8026038: 9c08 ldr r4, [sp, #32] + 802603a: 2614 movs r6, #20 + 802603c: f8c0 e014 str.w lr, [r0, #20] + 8026040: 4366 muls r6, r4 + 8026042: eb02 0806 add.w r8, r2, r6 + 8026046: f8d8 5004 ldr.w r5, [r8, #4] + 802604a: f115 040f adds.w r4, r5, #15 + 802604e: f100 809f bmi.w 8026190 <_ZN8touchgfx4EdgeC1ERKNS_9GradientsEPKNS_7Point3DEii+0x174> + 8026052: 1124 asrs r4, r4, #4 + 8026054: eba4 040e sub.w r4, r4, lr + 8026058: 6184 str r4, [r0, #24] + 802605a: 2c00 cmp r4, #0 + 802605c: f000 808a beq.w 8026174 <_ZN8touchgfx4EdgeC1ERKNS_9GradientsEPKNS_7Point3DEii+0x158> + 8026060: f8dc 9004 ldr.w r9, [ip, #4] + 8026064: f8d8 4004 ldr.w r4, [r8, #4] + 8026068: 5995 ldr r5, [r2, r6] + 802606a: eba4 0809 sub.w r8, r4, r9 + 802606e: 59d4 ldr r4, [r2, r7] + 8026070: eba5 0a04 sub.w sl, r5, r4 + 8026074: ea4f 1608 mov.w r6, r8, lsl #4 + 8026078: ea4f 150a mov.w r5, sl, lsl #4 + 802607c: fb0e fe05 mul.w lr, lr, r5 + 8026080: fb0a ee19 mls lr, sl, r9, lr + 8026084: fb08 e404 mla r4, r8, r4, lr + 8026088: 3c01 subs r4, #1 + 802608a: 19a4 adds r4, r4, r6 + 802608c: f100 808c bmi.w 80261a8 <_ZN8touchgfx4EdgeC1ERKNS_9GradientsEPKNS_7Point3DEii+0x18c> + 8026090: fb94 fef6 sdiv lr, r4, r6 + 8026094: fb06 441e mls r4, r6, lr, r4 + 8026098: f8c0 e000 str.w lr, [r0] + 802609c: 6104 str r4, [r0, #16] + 802609e: 2d00 cmp r5, #0 + 80260a0: f2c0 8095 blt.w 80261ce <_ZN8touchgfx4EdgeC1ERKNS_9GradientsEPKNS_7Point3DEii+0x1b2> + 80260a4: fb95 f4f6 sdiv r4, r5, r6 + 80260a8: fb06 5514 mls r5, r6, r4, r5 + 80260ac: 6044 str r4, [r0, #4] + 80260ae: 6085 str r5, [r0, #8] + 80260b0: 60c6 str r6, [r0, #12] + 80260b2: eb01 0383 add.w r3, r1, r3, lsl #2 + 80260b6: f8dc 4004 ldr.w r4, [ip, #4] + 80260ba: 6945 ldr r5, [r0, #20] + 80260bc: 59d2 ldr r2, [r2, r7] + 80260be: ebc4 1405 rsb r4, r4, r5, lsl #4 + 80260c2: eddf 6a4b vldr s13, [pc, #300] ; 80261f0 <_ZN8touchgfx4EdgeC1ERKNS_9GradientsEPKNS_7Point3DEii+0x1d4> + 80260c6: ed91 6a0a vldr s12, [r1, #40] ; 0x28 + 80260ca: ee07 4a10 vmov s14, r4 + 80260ce: 6804 ldr r4, [r0, #0] + 80260d0: ebc2 1204 rsb r2, r2, r4, lsl #4 + 80260d4: eeb8 7ac7 vcvt.f32.s32 s14, s14 + 80260d8: ee07 2a90 vmov s15, r2 + 80260dc: ee27 7a26 vmul.f32 s14, s14, s13 + 80260e0: eef8 7ae7 vcvt.f32.s32 s15, s15 + 80260e4: ee67 7aa6 vmul.f32 s15, s15, s13 + 80260e8: edd3 6a00 vldr s13, [r3] + 80260ec: eee6 6a07 vfma.f32 s13, s12, s14 + 80260f0: ed91 6a09 vldr s12, [r1, #36] ; 0x24 + 80260f4: eee6 6a27 vfma.f32 s13, s12, s15 + 80260f8: edc0 6a07 vstr s13, [r0, #28] + 80260fc: edd0 6a01 vldr s13, [r0, #4] + 8026100: edd1 5a09 vldr s11, [r1, #36] ; 0x24 + 8026104: eef8 6ae6 vcvt.f32.s32 s13, s13 + 8026108: ed91 6a0a vldr s12, [r1, #40] ; 0x28 + 802610c: eea6 6aa5 vfma.f32 s12, s13, s11 + 8026110: ed80 6a08 vstr s12, [r0, #32] + 8026114: 6a4a ldr r2, [r1, #36] ; 0x24 + 8026116: 6242 str r2, [r0, #36] ; 0x24 + 8026118: edd1 5a0c vldr s11, [r1, #48] ; 0x30 + 802611c: ed93 6a03 vldr s12, [r3, #12] + 8026120: eea5 6a87 vfma.f32 s12, s11, s14 + 8026124: edd1 5a0b vldr s11, [r1, #44] ; 0x2c + 8026128: eea5 6aa7 vfma.f32 s12, s11, s15 + 802612c: ed80 6a0a vstr s12, [r0, #40] ; 0x28 + 8026130: edd1 5a0b vldr s11, [r1, #44] ; 0x2c + 8026134: ed91 6a0c vldr s12, [r1, #48] ; 0x30 + 8026138: eea6 6aa5 vfma.f32 s12, s13, s11 + 802613c: ed80 6a0b vstr s12, [r0, #44] ; 0x2c + 8026140: 6aca ldr r2, [r1, #44] ; 0x2c + 8026142: 6302 str r2, [r0, #48] ; 0x30 + 8026144: ed93 6a06 vldr s12, [r3, #24] + 8026148: edd1 5a0e vldr s11, [r1, #56] ; 0x38 + 802614c: eea5 6a87 vfma.f32 s12, s11, s14 + 8026150: eeb0 7a46 vmov.f32 s14, s12 + 8026154: ed91 6a0d vldr s12, [r1, #52] ; 0x34 + 8026158: eea6 7a27 vfma.f32 s14, s12, s15 + 802615c: ed80 7a0d vstr s14, [r0, #52] ; 0x34 + 8026160: ed91 7a0d vldr s14, [r1, #52] ; 0x34 + 8026164: edd1 7a0e vldr s15, [r1, #56] ; 0x38 + 8026168: eee6 7a87 vfma.f32 s15, s13, s14 + 802616c: edc0 7a0e vstr s15, [r0, #56] ; 0x38 + 8026170: 6b4b ldr r3, [r1, #52] ; 0x34 + 8026172: 63c3 str r3, [r0, #60] ; 0x3c + 8026174: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + 8026178: 2410 movs r4, #16 + 802617a: f1c5 0501 rsb r5, r5, #1 + 802617e: fb9e fef4 sdiv lr, lr, r4 + 8026182: f015 050f ands.w r5, r5, #15 + 8026186: bf18 it ne + 8026188: 2501 movne r5, #1 + 802618a: ebae 0e05 sub.w lr, lr, r5 + 802618e: e753 b.n 8026038 <_ZN8touchgfx4EdgeC1ERKNS_9GradientsEPKNS_7Point3DEii+0x1c> + 8026190: f04f 0910 mov.w r9, #16 + 8026194: f1c5 0501 rsb r5, r5, #1 + 8026198: fb94 f4f9 sdiv r4, r4, r9 + 802619c: f015 050f ands.w r5, r5, #15 + 80261a0: bf18 it ne + 80261a2: 2501 movne r5, #1 + 80261a4: 1b64 subs r4, r4, r5 + 80261a6: e755 b.n 8026054 <_ZN8touchgfx4EdgeC1ERKNS_9GradientsEPKNS_7Point3DEii+0x38> + 80261a8: 4264 negs r4, r4 + 80261aa: fb94 fef6 sdiv lr, r4, r6 + 80261ae: f1ce 0800 rsb r8, lr, #0 + 80261b2: fb06 441e mls r4, r6, lr, r4 + 80261b6: f8c0 8000 str.w r8, [r0] + 80261ba: 6104 str r4, [r0, #16] + 80261bc: 2c00 cmp r4, #0 + 80261be: f43f af6e beq.w 802609e <_ZN8touchgfx4EdgeC1ERKNS_9GradientsEPKNS_7Point3DEii+0x82> + 80261c2: ea6f 0e0e mvn.w lr, lr + 80261c6: 1b34 subs r4, r6, r4 + 80261c8: f8c0 e000 str.w lr, [r0] + 80261cc: e766 b.n 802609c <_ZN8touchgfx4EdgeC1ERKNS_9GradientsEPKNS_7Point3DEii+0x80> + 80261ce: 426d negs r5, r5 + 80261d0: fb95 f4f6 sdiv r4, r5, r6 + 80261d4: f1c4 0e00 rsb lr, r4, #0 + 80261d8: fb06 5514 mls r5, r6, r4, r5 + 80261dc: f8c0 e004 str.w lr, [r0, #4] + 80261e0: 6085 str r5, [r0, #8] + 80261e2: 2d00 cmp r5, #0 + 80261e4: f43f af64 beq.w 80260b0 <_ZN8touchgfx4EdgeC1ERKNS_9GradientsEPKNS_7Point3DEii+0x94> + 80261e8: 43e4 mvns r4, r4 + 80261ea: 1b75 subs r5, r6, r5 + 80261ec: 6044 str r4, [r0, #4] + 80261ee: e75e b.n 80260ae <_ZN8touchgfx4EdgeC1ERKNS_9GradientsEPKNS_7Point3DEii+0x92> + 80261f0: 3d800000 .word 0x3d800000 + +080261f4 <_ZN8touchgfx7Unicode6strlenEPKt>: + 80261f4: 4602 mov r2, r0 + 80261f6: b148 cbz r0, 802620c <_ZN8touchgfx7Unicode6strlenEPKt+0x18> + 80261f8: 2300 movs r3, #0 + 80261fa: b298 uxth r0, r3 + 80261fc: 3301 adds r3, #1 + 80261fe: eb02 0143 add.w r1, r2, r3, lsl #1 + 8026202: f831 1c02 ldrh.w r1, [r1, #-2] + 8026206: 2900 cmp r1, #0 + 8026208: d1f7 bne.n 80261fa <_ZN8touchgfx7Unicode6strlenEPKt+0x6> + 802620a: 4770 bx lr + 802620c: 4770 bx lr + +0802620e <_ZN8touchgfx7Unicode7strncpyEPtPKct>: + 802620e: b530 push {r4, r5, lr} + 8026210: 4604 mov r4, r0 + 8026212: b159 cbz r1, 802622c <_ZN8touchgfx7Unicode7strncpyEPtPKct+0x1e> + 8026214: b148 cbz r0, 802622a <_ZN8touchgfx7Unicode7strncpyEPtPKct+0x1c> + 8026216: 2300 movs r3, #0 + 8026218: b298 uxth r0, r3 + 802621a: 4282 cmp r2, r0 + 802621c: d905 bls.n 802622a <_ZN8touchgfx7Unicode7strncpyEPtPKct+0x1c> + 802621e: 5ccd ldrb r5, [r1, r3] + 8026220: f824 5013 strh.w r5, [r4, r3, lsl #1] + 8026224: 3301 adds r3, #1 + 8026226: 2d00 cmp r5, #0 + 8026228: d1f6 bne.n 8026218 <_ZN8touchgfx7Unicode7strncpyEPtPKct+0xa> + 802622a: bd30 pop {r4, r5, pc} + 802622c: 4608 mov r0, r1 + 802622e: e7fc b.n 802622a <_ZN8touchgfx7Unicode7strncpyEPtPKct+0x1c> + +08026230 <_ZN8touchgfx7Unicode4itoaElPtti.part.2>: + 8026230: b5f0 push {r4, r5, r6, r7, lr} + 8026232: b08b sub sp, #44 ; 0x2c + 8026234: 468c mov ip, r1 + 8026236: 4604 mov r4, r0 + 8026238: 2100 movs r1, #0 + 802623a: 261f movs r6, #31 + 802623c: af01 add r7, sp, #4 + 802623e: f88d 1024 strb.w r1, [sp, #36] ; 0x24 + 8026242: 1e71 subs r1, r6, #1 + 8026244: fb94 fef3 sdiv lr, r4, r3 + 8026248: fb03 441e mls r4, r3, lr, r4 + 802624c: ea84 75e4 eor.w r5, r4, r4, asr #31 + 8026250: eba5 75e4 sub.w r5, r5, r4, asr #31 + 8026254: b2ec uxtb r4, r5 + 8026256: 2d09 cmp r5, #9 + 8026258: bfd4 ite le + 802625a: 3430 addle r4, #48 ; 0x30 + 802625c: 3457 addgt r4, #87 ; 0x57 + 802625e: b2e4 uxtb r4, r4 + 8026260: 55bc strb r4, [r7, r6] + 8026262: 4674 mov r4, lr + 8026264: b974 cbnz r4, 8026284 <_ZN8touchgfx7Unicode4itoaElPtti.part.2+0x54> + 8026266: 2800 cmp r0, #0 + 8026268: da05 bge.n 8026276 <_ZN8touchgfx7Unicode4itoaElPtti.part.2+0x46> + 802626a: ab0a add r3, sp, #40 ; 0x28 + 802626c: 4419 add r1, r3 + 802626e: 232d movs r3, #45 ; 0x2d + 8026270: f801 3c24 strb.w r3, [r1, #-36] + 8026274: 1eb1 subs r1, r6, #2 + 8026276: 3101 adds r1, #1 + 8026278: 4660 mov r0, ip + 802627a: 4439 add r1, r7 + 802627c: f7ff ffc7 bl 802620e <_ZN8touchgfx7Unicode7strncpyEPtPKct> + 8026280: b00b add sp, #44 ; 0x2c + 8026282: bdf0 pop {r4, r5, r6, r7, pc} + 8026284: 460e mov r6, r1 + 8026286: e7dc b.n 8026242 <_ZN8touchgfx7Unicode4itoaElPtti.part.2+0x12> + +08026288 <_ZN8touchgfx7Unicode4utoaEmPtti.part.3>: + 8026288: b5f0 push {r4, r5, r6, r7, lr} + 802628a: 468c mov ip, r1 + 802628c: b08b sub sp, #44 ; 0x2c + 802628e: 2100 movs r1, #0 + 8026290: ae01 add r6, sp, #4 + 8026292: f88d 1024 strb.w r1, [sp, #36] ; 0x24 + 8026296: 211f movs r1, #31 + 8026298: fbb0 f7f3 udiv r7, r0, r3 + 802629c: fb03 0517 mls r5, r3, r7, r0 + 80262a0: 4638 mov r0, r7 + 80262a2: b2ec uxtb r4, r5 + 80262a4: 2d09 cmp r5, #9 + 80262a6: bfd4 ite le + 80262a8: 3430 addle r4, #48 ; 0x30 + 80262aa: 3457 addgt r4, #87 ; 0x57 + 80262ac: b2e4 uxtb r4, r4 + 80262ae: 558c strb r4, [r1, r6] + 80262b0: 1e4c subs r4, r1, #1 + 80262b2: b92f cbnz r7, 80262c0 <_ZN8touchgfx7Unicode4utoaEmPtti.part.3+0x38> + 80262b4: 4431 add r1, r6 + 80262b6: 4660 mov r0, ip + 80262b8: f7ff ffa9 bl 802620e <_ZN8touchgfx7Unicode7strncpyEPtPKct> + 80262bc: b00b add sp, #44 ; 0x2c + 80262be: bdf0 pop {r4, r5, r6, r7, pc} + 80262c0: 4621 mov r1, r4 + 80262c2: e7e9 b.n 8026298 <_ZN8touchgfx7Unicode4utoaEmPtti.part.3+0x10> + +080262c4 <_ZN8touchgfx7Unicode4itoaElPtti>: + 80262c4: b410 push {r4} + 80262c6: b131 cbz r1, 80262d6 <_ZN8touchgfx7Unicode4itoaElPtti+0x12> + 80262c8: 1e9c subs r4, r3, #2 + 80262ca: 2c22 cmp r4, #34 ; 0x22 + 80262cc: d803 bhi.n 80262d6 <_ZN8touchgfx7Unicode4itoaElPtti+0x12> + 80262ce: f85d 4b04 ldr.w r4, [sp], #4 + 80262d2: f7ff bfad b.w 8026230 <_ZN8touchgfx7Unicode4itoaElPtti.part.2> + 80262d6: f85d 4b04 ldr.w r4, [sp], #4 + 80262da: 4770 bx lr + +080262dc <_ZN8touchgfx7Unicode13composeStringERPKtttbbibibRitPt>: + 80262dc: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 80262e0: b085 sub sp, #20 + 80262e2: 4691 mov r9, r2 + 80262e4: 6802 ldr r2, [r0, #0] + 80262e6: 4688 mov r8, r1 + 80262e8: 461c mov r4, r3 + 80262ea: f89d 1040 ldrb.w r1, [sp, #64] ; 0x40 + 80262ee: f89d 3048 ldrb.w r3, [sp, #72] ; 0x48 + 80262f2: 4683 mov fp, r0 + 80262f4: 4610 mov r0, r2 + 80262f6: 9103 str r1, [sp, #12] + 80262f8: 9302 str r3, [sp, #8] + 80262fa: 9201 str r2, [sp, #4] + 80262fc: f7ff ff7a bl 80261f4 <_ZN8touchgfx7Unicode6strlenEPKt> + 8026300: f1b8 0f00 cmp.w r8, #0 + 8026304: bf0c ite eq + 8026306: 4684 moveq ip, r0 + 8026308: f100 0c01 addne.w ip, r0, #1 + 802630c: f1b9 0f69 cmp.w r9, #105 ; 0x69 + 8026310: f89d 6038 ldrb.w r6, [sp, #56] ; 0x38 + 8026314: 9f0f ldr r7, [sp, #60] ; 0x3c + 8026316: fa1f fc8c uxth.w ip, ip + 802631a: 9d13 ldr r5, [sp, #76] ; 0x4c + 802631c: f8dd a054 ldr.w sl, [sp, #84] ; 0x54 + 8026320: 9903 ldr r1, [sp, #12] + 8026322: e9dd 2301 ldrd r2, r3, [sp, #4] + 8026326: d041 beq.n 80263ac <_ZN8touchgfx7Unicode13composeStringERPKtttbbibibRitPt+0xd0> + 8026328: d834 bhi.n 8026394 <_ZN8touchgfx7Unicode13composeStringERPKtttbbibibRitPt+0xb8> + 802632a: f1b9 0f63 cmp.w r9, #99 ; 0x63 + 802632e: d059 beq.n 80263e4 <_ZN8touchgfx7Unicode13composeStringERPKtttbbibibRitPt+0x108> + 8026330: f1b9 0f64 cmp.w r9, #100 ; 0x64 + 8026334: d03a beq.n 80263ac <_ZN8touchgfx7Unicode13composeStringERPKtttbbibibRitPt+0xd0> + 8026336: f1b9 0f58 cmp.w r9, #88 ; 0x58 + 802633a: d034 beq.n 80263a6 <_ZN8touchgfx7Unicode13composeStringERPKtttbbibibRitPt+0xca> + 802633c: 2400 movs r4, #0 + 802633e: f8bd 2050 ldrh.w r2, [sp, #80] ; 0x50 + 8026342: 3a01 subs r2, #1 + 8026344: b169 cbz r1, 8026362 <_ZN8touchgfx7Unicode13composeStringERPKtttbbibibRitPt+0x86> + 8026346: 9911 ldr r1, [sp, #68] ; 0x44 + 8026348: 458c cmp ip, r1 + 802634a: da09 bge.n 8026360 <_ZN8touchgfx7Unicode13composeStringERPKtttbbibibRitPt+0x84> + 802634c: eba1 010c sub.w r1, r1, ip + 8026350: b289 uxth r1, r1 + 8026352: b933 cbnz r3, 8026362 <_ZN8touchgfx7Unicode13composeStringERPKtttbbibibRitPt+0x86> + 8026354: 2e00 cmp r6, #0 + 8026356: d051 beq.n 80263fc <_ZN8touchgfx7Unicode13composeStringERPKtttbbibibRitPt+0x120> + 8026358: 2800 cmp r0, #0 + 802635a: d04f beq.n 80263fc <_ZN8touchgfx7Unicode13composeStringERPKtttbbibibRitPt+0x120> + 802635c: 440c add r4, r1 + 802635e: b2a4 uxth r4, r4 + 8026360: 2100 movs r1, #0 + 8026362: 682b ldr r3, [r5, #0] + 8026364: 4293 cmp r3, r2 + 8026366: da07 bge.n 8026378 <_ZN8touchgfx7Unicode13composeStringERPKtttbbibibRitPt+0x9c> + 8026368: f1b8 0f00 cmp.w r8, #0 + 802636c: d004 beq.n 8026378 <_ZN8touchgfx7Unicode13composeStringERPKtttbbibibRitPt+0x9c> + 802636e: f82a 8013 strh.w r8, [sl, r3, lsl #1] + 8026372: 682b ldr r3, [r5, #0] + 8026374: 3301 adds r3, #1 + 8026376: 602b str r3, [r5, #0] + 8026378: 2730 movs r7, #48 ; 0x30 + 802637a: 2c00 cmp r4, #0 + 802637c: d04e beq.n 802641c <_ZN8touchgfx7Unicode13composeStringERPKtttbbibibRitPt+0x140> + 802637e: 682e ldr r6, [r5, #0] + 8026380: 3c01 subs r4, #1 + 8026382: 42b2 cmp r2, r6 + 8026384: b2a4 uxth r4, r4 + 8026386: dd49 ble.n 802641c <_ZN8touchgfx7Unicode13composeStringERPKtttbbibibRitPt+0x140> + 8026388: f82a 7016 strh.w r7, [sl, r6, lsl #1] + 802638c: 682b ldr r3, [r5, #0] + 802638e: 3301 adds r3, #1 + 8026390: 602b str r3, [r5, #0] + 8026392: e7f2 b.n 802637a <_ZN8touchgfx7Unicode13composeStringERPKtttbbibibRitPt+0x9e> + 8026394: f1b9 0f73 cmp.w r9, #115 ; 0x73 + 8026398: d01d beq.n 80263d6 <_ZN8touchgfx7Unicode13composeStringERPKtttbbibibRitPt+0xfa> + 802639a: f1b9 0f78 cmp.w r9, #120 ; 0x78 + 802639e: d002 beq.n 80263a6 <_ZN8touchgfx7Unicode13composeStringERPKtttbbibibRitPt+0xca> + 80263a0: f1b9 0f6f cmp.w r9, #111 ; 0x6f + 80263a4: e7c9 b.n 802633a <_ZN8touchgfx7Unicode13composeStringERPKtttbbibibRitPt+0x5e> + 80263a6: 4684 mov ip, r0 + 80263a8: f04f 0800 mov.w r8, #0 + 80263ac: 2c00 cmp r4, #0 + 80263ae: d0c6 beq.n 802633e <_ZN8touchgfx7Unicode13composeStringERPKtttbbibibRitPt+0x62> + 80263b0: b947 cbnz r7, 80263c4 <_ZN8touchgfx7Unicode13composeStringERPKtttbbibibRitPt+0xe8> + 80263b2: 2801 cmp r0, #1 + 80263b4: d106 bne.n 80263c4 <_ZN8touchgfx7Unicode13composeStringERPKtttbbibibRitPt+0xe8> + 80263b6: 8814 ldrh r4, [r2, #0] + 80263b8: 2c30 cmp r4, #48 ; 0x30 + 80263ba: bf02 ittt eq + 80263bc: 3202 addeq r2, #2 + 80263be: 4638 moveq r0, r7 + 80263c0: f8cb 2000 streq.w r2, [fp] + 80263c4: 45bc cmp ip, r7 + 80263c6: da14 bge.n 80263f2 <_ZN8touchgfx7Unicode13composeStringERPKtttbbibibRitPt+0x116> + 80263c8: b2bf uxth r7, r7 + 80263ca: eba7 040c sub.w r4, r7, ip + 80263ce: 46bc mov ip, r7 + 80263d0: b2a4 uxth r4, r4 + 80263d2: 2600 movs r6, #0 + 80263d4: e7b3 b.n 802633e <_ZN8touchgfx7Unicode13composeStringERPKtttbbibibRitPt+0x62> + 80263d6: 4684 mov ip, r0 + 80263d8: b16c cbz r4, 80263f6 <_ZN8touchgfx7Unicode13composeStringERPKtttbbibibRitPt+0x11a> + 80263da: 42b8 cmp r0, r7 + 80263dc: dd00 ble.n 80263e0 <_ZN8touchgfx7Unicode13composeStringERPKtttbbibibRitPt+0x104> + 80263de: b2b8 uxth r0, r7 + 80263e0: 2400 movs r4, #0 + 80263e2: e003 b.n 80263ec <_ZN8touchgfx7Unicode13composeStringERPKtttbbibibRitPt+0x110> + 80263e4: f04f 0c01 mov.w ip, #1 + 80263e8: 2400 movs r4, #0 + 80263ea: 4660 mov r0, ip + 80263ec: 4626 mov r6, r4 + 80263ee: 46a0 mov r8, r4 + 80263f0: e7a5 b.n 802633e <_ZN8touchgfx7Unicode13composeStringERPKtttbbibibRitPt+0x62> + 80263f2: 2400 movs r4, #0 + 80263f4: e7ed b.n 80263d2 <_ZN8touchgfx7Unicode13composeStringERPKtttbbibibRitPt+0xf6> + 80263f6: 4626 mov r6, r4 + 80263f8: 46a0 mov r8, r4 + 80263fa: e7a0 b.n 802633e <_ZN8touchgfx7Unicode13composeStringERPKtttbbibibRitPt+0x62> + 80263fc: 2900 cmp r1, #0 + 80263fe: d0b0 beq.n 8026362 <_ZN8touchgfx7Unicode13composeStringERPKtttbbibibRitPt+0x86> + 8026400: 2720 movs r7, #32 + 8026402: 682e ldr r6, [r5, #0] + 8026404: 2900 cmp r1, #0 + 8026406: d0ac beq.n 8026362 <_ZN8touchgfx7Unicode13composeStringERPKtttbbibibRitPt+0x86> + 8026408: 3901 subs r1, #1 + 802640a: 4296 cmp r6, r2 + 802640c: b289 uxth r1, r1 + 802640e: daa7 bge.n 8026360 <_ZN8touchgfx7Unicode13composeStringERPKtttbbibibRitPt+0x84> + 8026410: f82a 7016 strh.w r7, [sl, r6, lsl #1] + 8026414: 682b ldr r3, [r5, #0] + 8026416: 3301 adds r3, #1 + 8026418: 602b str r3, [r5, #0] + 802641a: e7f2 b.n 8026402 <_ZN8touchgfx7Unicode13composeStringERPKtttbbibibRitPt+0x126> + 802641c: b188 cbz r0, 8026442 <_ZN8touchgfx7Unicode13composeStringERPKtttbbibibRitPt+0x166> + 802641e: 682b ldr r3, [r5, #0] + 8026420: 3801 subs r0, #1 + 8026422: 429a cmp r2, r3 + 8026424: b280 uxth r0, r0 + 8026426: dd0c ble.n 8026442 <_ZN8touchgfx7Unicode13composeStringERPKtttbbibibRitPt+0x166> + 8026428: f8db 3000 ldr.w r3, [fp] + 802642c: 1c9c adds r4, r3, #2 + 802642e: f8cb 4000 str.w r4, [fp] + 8026432: 881c ldrh r4, [r3, #0] + 8026434: 682b ldr r3, [r5, #0] + 8026436: f82a 4013 strh.w r4, [sl, r3, lsl #1] + 802643a: 682b ldr r3, [r5, #0] + 802643c: 3301 adds r3, #1 + 802643e: 602b str r3, [r5, #0] + 8026440: e7ec b.n 802641c <_ZN8touchgfx7Unicode13composeStringERPKtttbbibibRitPt+0x140> + 8026442: 2620 movs r6, #32 + 8026444: b151 cbz r1, 802645c <_ZN8touchgfx7Unicode13composeStringERPKtttbbibibRitPt+0x180> + 8026446: 6828 ldr r0, [r5, #0] + 8026448: 3901 subs r1, #1 + 802644a: 4282 cmp r2, r0 + 802644c: b289 uxth r1, r1 + 802644e: dd05 ble.n 802645c <_ZN8touchgfx7Unicode13composeStringERPKtttbbibibRitPt+0x180> + 8026450: f82a 6010 strh.w r6, [sl, r0, lsl #1] + 8026454: 682b ldr r3, [r5, #0] + 8026456: 3301 adds r3, #1 + 8026458: 602b str r3, [r5, #0] + 802645a: e7f3 b.n 8026444 <_ZN8touchgfx7Unicode13composeStringERPKtttbbibibRitPt+0x168> + 802645c: b005 add sp, #20 + 802645e: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + +08026462 <_ZN8touchgfx7Unicode22parseFlagsAndPrecisionERPKtRPKcRtRbS8_S8_S8_RiS8_S9_>: + 8026462: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} + 8026466: 2400 movs r4, #0 + 8026468: e9dd 8c07 ldrd r8, ip, [sp, #28] + 802646c: e9dd e609 ldrd lr, r6, [sp, #36] ; 0x24 + 8026470: e9dd 750b ldrd r7, r5, [sp, #44] ; 0x2c + 8026474: 8014 strh r4, [r2, #0] + 8026476: 701c strb r4, [r3, #0] + 8026478: f888 4000 strb.w r4, [r8] + 802647c: f88c 4000 strb.w r4, [ip] + 8026480: f88e 4000 strb.w r4, [lr] + 8026484: 703c strb r4, [r7, #0] + 8026486: 6804 ldr r4, [r0, #0] + 8026488: b1a4 cbz r4, 80264b4 <_ZN8touchgfx7Unicode22parseFlagsAndPrecisionERPKtRPKcRtRbS8_S8_S8_RiS8_S9_+0x52> + 802648a: 8824 ldrh r4, [r4, #0] + 802648c: f04f 0901 mov.w r9, #1 + 8026490: b314 cbz r4, 80264d8 <_ZN8touchgfx7Unicode22parseFlagsAndPrecisionERPKtRPKcRtRbS8_S8_S8_RiS8_S9_+0x76> + 8026492: 2c2b cmp r4, #43 ; 0x2b + 8026494: d001 beq.n 802649a <_ZN8touchgfx7Unicode22parseFlagsAndPrecisionERPKtRPKcRtRbS8_S8_S8_RiS8_S9_+0x38> + 8026496: 2c20 cmp r4, #32 + 8026498: d110 bne.n 80264bc <_ZN8touchgfx7Unicode22parseFlagsAndPrecisionERPKtRPKcRtRbS8_S8_S8_RiS8_S9_+0x5a> + 802649a: 8014 strh r4, [r2, #0] + 802649c: 6804 ldr r4, [r0, #0] + 802649e: b10c cbz r4, 80264a4 <_ZN8touchgfx7Unicode22parseFlagsAndPrecisionERPKtRPKcRtRbS8_S8_S8_RiS8_S9_+0x42> + 80264a0: 3402 adds r4, #2 + 80264a2: 6004 str r4, [r0, #0] + 80264a4: 680c ldr r4, [r1, #0] + 80264a6: b10c cbz r4, 80264ac <_ZN8touchgfx7Unicode22parseFlagsAndPrecisionERPKtRPKcRtRbS8_S8_S8_RiS8_S9_+0x4a> + 80264a8: 3401 adds r4, #1 + 80264aa: 600c str r4, [r1, #0] + 80264ac: 6804 ldr r4, [r0, #0] + 80264ae: b17c cbz r4, 80264d0 <_ZN8touchgfx7Unicode22parseFlagsAndPrecisionERPKtRPKcRtRbS8_S8_S8_RiS8_S9_+0x6e> + 80264b0: 8824 ldrh r4, [r4, #0] + 80264b2: e7ed b.n 8026490 <_ZN8touchgfx7Unicode22parseFlagsAndPrecisionERPKtRPKcRtRbS8_S8_S8_RiS8_S9_+0x2e> + 80264b4: 680c ldr r4, [r1, #0] + 80264b6: b17c cbz r4, 80264d8 <_ZN8touchgfx7Unicode22parseFlagsAndPrecisionERPKtRPKcRtRbS8_S8_S8_RiS8_S9_+0x76> + 80264b8: 7824 ldrb r4, [r4, #0] + 80264ba: e7e7 b.n 802648c <_ZN8touchgfx7Unicode22parseFlagsAndPrecisionERPKtRPKcRtRbS8_S8_S8_RiS8_S9_+0x2a> + 80264bc: 2c2d cmp r4, #45 ; 0x2d + 80264be: d102 bne.n 80264c6 <_ZN8touchgfx7Unicode22parseFlagsAndPrecisionERPKtRPKcRtRbS8_S8_S8_RiS8_S9_+0x64> + 80264c0: f883 9000 strb.w r9, [r3] + 80264c4: e7ea b.n 802649c <_ZN8touchgfx7Unicode22parseFlagsAndPrecisionERPKtRPKcRtRbS8_S8_S8_RiS8_S9_+0x3a> + 80264c6: 2c23 cmp r4, #35 ; 0x23 + 80264c8: d107 bne.n 80264da <_ZN8touchgfx7Unicode22parseFlagsAndPrecisionERPKtRPKcRtRbS8_S8_S8_RiS8_S9_+0x78> + 80264ca: f888 9000 strb.w r9, [r8] + 80264ce: e7e5 b.n 802649c <_ZN8touchgfx7Unicode22parseFlagsAndPrecisionERPKtRPKcRtRbS8_S8_S8_RiS8_S9_+0x3a> + 80264d0: 680c ldr r4, [r1, #0] + 80264d2: b10c cbz r4, 80264d8 <_ZN8touchgfx7Unicode22parseFlagsAndPrecisionERPKtRPKcRtRbS8_S8_S8_RiS8_S9_+0x76> + 80264d4: 7824 ldrb r4, [r4, #0] + 80264d6: e7db b.n 8026490 <_ZN8touchgfx7Unicode22parseFlagsAndPrecisionERPKtRPKcRtRbS8_S8_S8_RiS8_S9_+0x2e> + 80264d8: 2400 movs r4, #0 + 80264da: f1a4 0330 sub.w r3, r4, #48 ; 0x30 + 80264de: 2b09 cmp r3, #9 + 80264e0: d901 bls.n 80264e6 <_ZN8touchgfx7Unicode22parseFlagsAndPrecisionERPKtRPKcRtRbS8_S8_S8_RiS8_S9_+0x84> + 80264e2: 2c2a cmp r4, #42 ; 0x2a + 80264e4: d122 bne.n 802652c <_ZN8touchgfx7Unicode22parseFlagsAndPrecisionERPKtRPKcRtRbS8_S8_S8_RiS8_S9_+0xca> + 80264e6: 2301 movs r3, #1 + 80264e8: 2c30 cmp r4, #48 ; 0x30 + 80264ea: f88e 3000 strb.w r3, [lr] + 80264ee: d10d bne.n 802650c <_ZN8touchgfx7Unicode22parseFlagsAndPrecisionERPKtRPKcRtRbS8_S8_S8_RiS8_S9_+0xaa> + 80264f0: f88c 3000 strb.w r3, [ip] + 80264f4: 6803 ldr r3, [r0, #0] + 80264f6: b10b cbz r3, 80264fc <_ZN8touchgfx7Unicode22parseFlagsAndPrecisionERPKtRPKcRtRbS8_S8_S8_RiS8_S9_+0x9a> + 80264f8: 3302 adds r3, #2 + 80264fa: 6003 str r3, [r0, #0] + 80264fc: 680b ldr r3, [r1, #0] + 80264fe: b10b cbz r3, 8026504 <_ZN8touchgfx7Unicode22parseFlagsAndPrecisionERPKtRPKcRtRbS8_S8_S8_RiS8_S9_+0xa2> + 8026500: 3301 adds r3, #1 + 8026502: 600b str r3, [r1, #0] + 8026504: 6803 ldr r3, [r0, #0] + 8026506: 2b00 cmp r3, #0 + 8026508: d02f beq.n 802656a <_ZN8touchgfx7Unicode22parseFlagsAndPrecisionERPKtRPKcRtRbS8_S8_S8_RiS8_S9_+0x108> + 802650a: 881c ldrh r4, [r3, #0] + 802650c: 2c2a cmp r4, #42 ; 0x2a + 802650e: d135 bne.n 802657c <_ZN8touchgfx7Unicode22parseFlagsAndPrecisionERPKtRPKcRtRbS8_S8_S8_RiS8_S9_+0x11a> + 8026510: f04f 33ff mov.w r3, #4294967295 + 8026514: 6033 str r3, [r6, #0] + 8026516: 6803 ldr r3, [r0, #0] + 8026518: b10b cbz r3, 802651e <_ZN8touchgfx7Unicode22parseFlagsAndPrecisionERPKtRPKcRtRbS8_S8_S8_RiS8_S9_+0xbc> + 802651a: 3302 adds r3, #2 + 802651c: 6003 str r3, [r0, #0] + 802651e: 680b ldr r3, [r1, #0] + 8026520: b10b cbz r3, 8026526 <_ZN8touchgfx7Unicode22parseFlagsAndPrecisionERPKtRPKcRtRbS8_S8_S8_RiS8_S9_+0xc4> + 8026522: 3301 adds r3, #1 + 8026524: 600b str r3, [r1, #0] + 8026526: 6803 ldr r3, [r0, #0] + 8026528: b31b cbz r3, 8026572 <_ZN8touchgfx7Unicode22parseFlagsAndPrecisionERPKtRPKcRtRbS8_S8_S8_RiS8_S9_+0x110> + 802652a: 881c ldrh r4, [r3, #0] + 802652c: 2c2e cmp r4, #46 ; 0x2e + 802652e: d11a bne.n 8026566 <_ZN8touchgfx7Unicode22parseFlagsAndPrecisionERPKtRPKcRtRbS8_S8_S8_RiS8_S9_+0x104> + 8026530: 2301 movs r3, #1 + 8026532: 703b strb r3, [r7, #0] + 8026534: 6803 ldr r3, [r0, #0] + 8026536: b10b cbz r3, 802653c <_ZN8touchgfx7Unicode22parseFlagsAndPrecisionERPKtRPKcRtRbS8_S8_S8_RiS8_S9_+0xda> + 8026538: 3302 adds r3, #2 + 802653a: 6003 str r3, [r0, #0] + 802653c: 680b ldr r3, [r1, #0] + 802653e: b10b cbz r3, 8026544 <_ZN8touchgfx7Unicode22parseFlagsAndPrecisionERPKtRPKcRtRbS8_S8_S8_RiS8_S9_+0xe2> + 8026540: 3301 adds r3, #1 + 8026542: 600b str r3, [r1, #0] + 8026544: 6803 ldr r3, [r0, #0] + 8026546: 2b00 cmp r3, #0 + 8026548: d036 beq.n 80265b8 <_ZN8touchgfx7Unicode22parseFlagsAndPrecisionERPKtRPKcRtRbS8_S8_S8_RiS8_S9_+0x156> + 802654a: 881b ldrh r3, [r3, #0] + 802654c: 2b2a cmp r3, #42 ; 0x2a + 802654e: d137 bne.n 80265c0 <_ZN8touchgfx7Unicode22parseFlagsAndPrecisionERPKtRPKcRtRbS8_S8_S8_RiS8_S9_+0x15e> + 8026550: f04f 33ff mov.w r3, #4294967295 + 8026554: 602b str r3, [r5, #0] + 8026556: 6803 ldr r3, [r0, #0] + 8026558: b10b cbz r3, 802655e <_ZN8touchgfx7Unicode22parseFlagsAndPrecisionERPKtRPKcRtRbS8_S8_S8_RiS8_S9_+0xfc> + 802655a: 3302 adds r3, #2 + 802655c: 6003 str r3, [r0, #0] + 802655e: 680b ldr r3, [r1, #0] + 8026560: b10b cbz r3, 8026566 <_ZN8touchgfx7Unicode22parseFlagsAndPrecisionERPKtRPKcRtRbS8_S8_S8_RiS8_S9_+0x104> + 8026562: 3301 adds r3, #1 + 8026564: 600b str r3, [r1, #0] + 8026566: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} + 802656a: 680c ldr r4, [r1, #0] + 802656c: b134 cbz r4, 802657c <_ZN8touchgfx7Unicode22parseFlagsAndPrecisionERPKtRPKcRtRbS8_S8_S8_RiS8_S9_+0x11a> + 802656e: 7824 ldrb r4, [r4, #0] + 8026570: e7cc b.n 802650c <_ZN8touchgfx7Unicode22parseFlagsAndPrecisionERPKtRPKcRtRbS8_S8_S8_RiS8_S9_+0xaa> + 8026572: 680b ldr r3, [r1, #0] + 8026574: 2b00 cmp r3, #0 + 8026576: d0f6 beq.n 8026566 <_ZN8touchgfx7Unicode22parseFlagsAndPrecisionERPKtRPKcRtRbS8_S8_S8_RiS8_S9_+0x104> + 8026578: 781c ldrb r4, [r3, #0] + 802657a: e7d7 b.n 802652c <_ZN8touchgfx7Unicode22parseFlagsAndPrecisionERPKtRPKcRtRbS8_S8_S8_RiS8_S9_+0xca> + 802657c: 2300 movs r3, #0 + 802657e: 220a movs r2, #10 + 8026580: 6033 str r3, [r6, #0] + 8026582: f1a4 0c30 sub.w ip, r4, #48 ; 0x30 + 8026586: fa1f f38c uxth.w r3, ip + 802658a: 2b09 cmp r3, #9 + 802658c: d8ce bhi.n 802652c <_ZN8touchgfx7Unicode22parseFlagsAndPrecisionERPKtRPKcRtRbS8_S8_S8_RiS8_S9_+0xca> + 802658e: 6833 ldr r3, [r6, #0] + 8026590: fb02 c303 mla r3, r2, r3, ip + 8026594: 6033 str r3, [r6, #0] + 8026596: 6803 ldr r3, [r0, #0] + 8026598: b10b cbz r3, 802659e <_ZN8touchgfx7Unicode22parseFlagsAndPrecisionERPKtRPKcRtRbS8_S8_S8_RiS8_S9_+0x13c> + 802659a: 3302 adds r3, #2 + 802659c: 6003 str r3, [r0, #0] + 802659e: 680b ldr r3, [r1, #0] + 80265a0: b10b cbz r3, 80265a6 <_ZN8touchgfx7Unicode22parseFlagsAndPrecisionERPKtRPKcRtRbS8_S8_S8_RiS8_S9_+0x144> + 80265a2: 3301 adds r3, #1 + 80265a4: 600b str r3, [r1, #0] + 80265a6: 6803 ldr r3, [r0, #0] + 80265a8: b10b cbz r3, 80265ae <_ZN8touchgfx7Unicode22parseFlagsAndPrecisionERPKtRPKcRtRbS8_S8_S8_RiS8_S9_+0x14c> + 80265aa: 881c ldrh r4, [r3, #0] + 80265ac: e7e9 b.n 8026582 <_ZN8touchgfx7Unicode22parseFlagsAndPrecisionERPKtRPKcRtRbS8_S8_S8_RiS8_S9_+0x120> + 80265ae: 680c ldr r4, [r1, #0] + 80265b0: 2c00 cmp r4, #0 + 80265b2: d0e6 beq.n 8026582 <_ZN8touchgfx7Unicode22parseFlagsAndPrecisionERPKtRPKcRtRbS8_S8_S8_RiS8_S9_+0x120> + 80265b4: 7824 ldrb r4, [r4, #0] + 80265b6: e7e4 b.n 8026582 <_ZN8touchgfx7Unicode22parseFlagsAndPrecisionERPKtRPKcRtRbS8_S8_S8_RiS8_S9_+0x120> + 80265b8: 680b ldr r3, [r1, #0] + 80265ba: b10b cbz r3, 80265c0 <_ZN8touchgfx7Unicode22parseFlagsAndPrecisionERPKtRPKcRtRbS8_S8_S8_RiS8_S9_+0x15e> + 80265bc: 781b ldrb r3, [r3, #0] + 80265be: e7c5 b.n 802654c <_ZN8touchgfx7Unicode22parseFlagsAndPrecisionERPKtRPKcRtRbS8_S8_S8_RiS8_S9_+0xea> + 80265c0: 2200 movs r2, #0 + 80265c2: 240a movs r4, #10 + 80265c4: 602a str r2, [r5, #0] + 80265c6: 3b30 subs r3, #48 ; 0x30 + 80265c8: 682a ldr r2, [r5, #0] + 80265ca: b29e uxth r6, r3 + 80265cc: 2e09 cmp r6, #9 + 80265ce: d813 bhi.n 80265f8 <_ZN8touchgfx7Unicode22parseFlagsAndPrecisionERPKtRPKcRtRbS8_S8_S8_RiS8_S9_+0x196> + 80265d0: fb04 3302 mla r3, r4, r2, r3 + 80265d4: 602b str r3, [r5, #0] + 80265d6: 6803 ldr r3, [r0, #0] + 80265d8: b10b cbz r3, 80265de <_ZN8touchgfx7Unicode22parseFlagsAndPrecisionERPKtRPKcRtRbS8_S8_S8_RiS8_S9_+0x17c> + 80265da: 3302 adds r3, #2 + 80265dc: 6003 str r3, [r0, #0] + 80265de: 680b ldr r3, [r1, #0] + 80265e0: b10b cbz r3, 80265e6 <_ZN8touchgfx7Unicode22parseFlagsAndPrecisionERPKtRPKcRtRbS8_S8_S8_RiS8_S9_+0x184> + 80265e2: 3301 adds r3, #1 + 80265e4: 600b str r3, [r1, #0] + 80265e6: 6803 ldr r3, [r0, #0] + 80265e8: b10b cbz r3, 80265ee <_ZN8touchgfx7Unicode22parseFlagsAndPrecisionERPKtRPKcRtRbS8_S8_S8_RiS8_S9_+0x18c> + 80265ea: 881b ldrh r3, [r3, #0] + 80265ec: e7eb b.n 80265c6 <_ZN8touchgfx7Unicode22parseFlagsAndPrecisionERPKtRPKcRtRbS8_S8_S8_RiS8_S9_+0x164> + 80265ee: 680b ldr r3, [r1, #0] + 80265f0: 2b00 cmp r3, #0 + 80265f2: d0e8 beq.n 80265c6 <_ZN8touchgfx7Unicode22parseFlagsAndPrecisionERPKtRPKcRtRbS8_S8_S8_RiS8_S9_+0x164> + 80265f4: 781b ldrb r3, [r3, #0] + 80265f6: e7e6 b.n 80265c6 <_ZN8touchgfx7Unicode22parseFlagsAndPrecisionERPKtRPKcRtRbS8_S8_S8_RiS8_S9_+0x164> + 80265f8: 2a06 cmp r2, #6 + 80265fa: bfa8 it ge + 80265fc: 2206 movge r2, #6 + 80265fe: 602a str r2, [r5, #0] + 8026600: e7b1 b.n 8026566 <_ZN8touchgfx7Unicode22parseFlagsAndPrecisionERPKtRPKcRtRbS8_S8_S8_RiS8_S9_+0x104> + +08026602 <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list>: + 8026602: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8026606: b0a3 sub sp, #140 ; 0x8c + 8026608: 2600 movs r6, #0 + 802660a: 4607 mov r7, r0 + 802660c: 4688 mov r8, r1 + 802660e: f10d 0944 add.w r9, sp, #68 ; 0x44 + 8026612: 4631 mov r1, r6 + 8026614: 9c2c ldr r4, [sp, #176] ; 0xb0 + 8026616: 4648 mov r0, r9 + 8026618: 960d str r6, [sp, #52] ; 0x34 + 802661a: e9cd 3208 strd r3, r2, [sp, #32] + 802661e: 2242 movs r2, #66 ; 0x42 + 8026620: f00e f9cc bl 80349bc + 8026624: b15f cbz r7, 802663e <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0x3c> + 8026626: f108 3aff add.w sl, r8, #4294967295 + 802662a: 9a09 ldr r2, [sp, #36] ; 0x24 + 802662c: 9b0d ldr r3, [sp, #52] ; 0x34 + 802662e: b152 cbz r2, 8026646 <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0x44> + 8026630: 8812 ldrh r2, [r2, #0] + 8026632: b10a cbz r2, 8026638 <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0x36> + 8026634: 459a cmp sl, r3 + 8026636: dc2e bgt.n 8026696 <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0x94> + 8026638: 2200 movs r2, #0 + 802663a: f827 2013 strh.w r2, [r7, r3, lsl #1] + 802663e: 4638 mov r0, r7 + 8026640: b023 add sp, #140 ; 0x8c + 8026642: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 8026646: 9a08 ldr r2, [sp, #32] + 8026648: 2a00 cmp r2, #0 + 802664a: d0f5 beq.n 8026638 <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0x36> + 802664c: 7812 ldrb r2, [r2, #0] + 802664e: e7f0 b.n 8026632 <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0x30> + 8026650: 2d00 cmp r5, #0 + 8026652: d0ea beq.n 802662a <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0x28> + 8026654: 782a ldrb r2, [r5, #0] + 8026656: b142 cbz r2, 802666a <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0x68> + 8026658: 2a25 cmp r2, #37 ; 0x25 + 802665a: d001 beq.n 8026660 <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0x5e> + 802665c: 459a cmp sl, r3 + 802665e: dc08 bgt.n 8026672 <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0x70> + 8026660: f1bb 0f00 cmp.w fp, #0 + 8026664: d121 bne.n 80266aa <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0xa8> + 8026666: 2d00 cmp r5, #0 + 8026668: d0df beq.n 802662a <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0x28> + 802666a: 782a ldrb r2, [r5, #0] + 802666c: f04f 0b00 mov.w fp, #0 + 8026670: e01d b.n 80266ae <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0xac> + 8026672: f1bb 0f00 cmp.w fp, #0 + 8026676: d077 beq.n 8026768 <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0x166> + 8026678: f8bb 2000 ldrh.w r2, [fp] + 802667c: f827 2013 strh.w r2, [r7, r3, lsl #1] + 8026680: f1bb 0f00 cmp.w fp, #0 + 8026684: d002 beq.n 802668c <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0x8a> + 8026686: f10b 0202 add.w r2, fp, #2 + 802668a: 9209 str r2, [sp, #36] ; 0x24 + 802668c: b10d cbz r5, 8026692 <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0x90> + 802668e: 3501 adds r5, #1 + 8026690: 9508 str r5, [sp, #32] + 8026692: 3301 adds r3, #1 + 8026694: 930d str r3, [sp, #52] ; 0x34 + 8026696: 9b0d ldr r3, [sp, #52] ; 0x34 + 8026698: e9dd 5b08 ldrd r5, fp, [sp, #32] + 802669c: f1bb 0f00 cmp.w fp, #0 + 80266a0: d0d6 beq.n 8026650 <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0x4e> + 80266a2: f8bb 2000 ldrh.w r2, [fp] + 80266a6: 2a00 cmp r2, #0 + 80266a8: d1d6 bne.n 8026658 <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0x56> + 80266aa: f8bb 2000 ldrh.w r2, [fp] + 80266ae: 2a00 cmp r2, #0 + 80266b0: d0bb beq.n 802662a <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0x28> + 80266b2: 459a cmp sl, r3 + 80266b4: ddb9 ble.n 802662a <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0x28> + 80266b6: f8ad 6032 strh.w r6, [sp, #50] ; 0x32 + 80266ba: f88d 602d strb.w r6, [sp, #45] ; 0x2d + 80266be: f88d 602e strb.w r6, [sp, #46] ; 0x2e + 80266c2: f88d 602f strb.w r6, [sp, #47] ; 0x2f + 80266c6: f88d 6030 strb.w r6, [sp, #48] ; 0x30 + 80266ca: 960e str r6, [sp, #56] ; 0x38 + 80266cc: f88d 6031 strb.w r6, [sp, #49] ; 0x31 + 80266d0: 960f str r6, [sp, #60] ; 0x3c + 80266d2: f1bb 0f00 cmp.w fp, #0 + 80266d6: d002 beq.n 80266de <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0xdc> + 80266d8: f10b 0302 add.w r3, fp, #2 + 80266dc: 9309 str r3, [sp, #36] ; 0x24 + 80266de: b10d cbz r5, 80266e4 <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0xe2> + 80266e0: 1c6b adds r3, r5, #1 + 80266e2: 9308 str r3, [sp, #32] + 80266e4: ab0f add r3, sp, #60 ; 0x3c + 80266e6: f10d 0232 add.w r2, sp, #50 ; 0x32 + 80266ea: a908 add r1, sp, #32 + 80266ec: a809 add r0, sp, #36 ; 0x24 + 80266ee: 9305 str r3, [sp, #20] + 80266f0: f10d 0331 add.w r3, sp, #49 ; 0x31 + 80266f4: 9304 str r3, [sp, #16] + 80266f6: ab0e add r3, sp, #56 ; 0x38 + 80266f8: 9303 str r3, [sp, #12] + 80266fa: ab0c add r3, sp, #48 ; 0x30 + 80266fc: 9302 str r3, [sp, #8] + 80266fe: f10d 032f add.w r3, sp, #47 ; 0x2f + 8026702: 9301 str r3, [sp, #4] + 8026704: f10d 032e add.w r3, sp, #46 ; 0x2e + 8026708: 9300 str r3, [sp, #0] + 802670a: f10d 032d add.w r3, sp, #45 ; 0x2d + 802670e: f7ff fea8 bl 8026462 <_ZN8touchgfx7Unicode22parseFlagsAndPrecisionERPKtRPKcRtRbS8_S8_S8_RiS8_S9_> + 8026712: 9b0e ldr r3, [sp, #56] ; 0x38 + 8026714: 2b00 cmp r3, #0 + 8026716: bfbf itttt lt + 8026718: 6823 ldrlt r3, [r4, #0] + 802671a: 3404 addlt r4, #4 + 802671c: ea23 73e3 biclt.w r3, r3, r3, asr #31 + 8026720: 930e strlt r3, [sp, #56] ; 0x38 + 8026722: 9b0f ldr r3, [sp, #60] ; 0x3c + 8026724: 2b00 cmp r3, #0 + 8026726: bfbe ittt lt + 8026728: 6823 ldrlt r3, [r4, #0] + 802672a: 3404 addlt r4, #4 + 802672c: ea23 73e3 biclt.w r3, r3, r3, asr #31 + 8026730: e9dd 2108 ldrd r2, r1, [sp, #32] + 8026734: bfb8 it lt + 8026736: 930f strlt r3, [sp, #60] ; 0x3c + 8026738: b1d9 cbz r1, 8026772 <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0x170> + 802673a: 880b ldrh r3, [r1, #0] + 802673c: 2b69 cmp r3, #105 ; 0x69 + 802673e: d01f beq.n 8026780 <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0x17e> + 8026740: d82f bhi.n 80267a2 <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0x1a0> + 8026742: 2b58 cmp r3, #88 ; 0x58 + 8026744: d01c beq.n 8026780 <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0x17e> + 8026746: d818 bhi.n 802677a <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0x178> + 8026748: 2b25 cmp r3, #37 ; 0x25 + 802674a: d034 beq.n 80267b6 <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0x1b4> + 802674c: 9b0d ldr r3, [sp, #52] ; 0x34 + 802674e: e9cd 5b08 strd r5, fp, [sp, #32] + 8026752: f1bb 0f00 cmp.w fp, #0 + 8026756: f000 80b7 beq.w 80268c8 <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0x2c6> + 802675a: f8bb 5000 ldrh.w r5, [fp] + 802675e: f827 5013 strh.w r5, [r7, r3, lsl #1] + 8026762: 3301 adds r3, #1 + 8026764: 930d str r3, [sp, #52] ; 0x34 + 8026766: e029 b.n 80267bc <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0x1ba> + 8026768: b10d cbz r5, 802676e <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0x16c> + 802676a: 782a ldrb r2, [r5, #0] + 802676c: e786 b.n 802667c <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0x7a> + 802676e: 462a mov r2, r5 + 8026770: e784 b.n 802667c <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0x7a> + 8026772: 2a00 cmp r2, #0 + 8026774: d0ea beq.n 802674c <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0x14a> + 8026776: 7813 ldrb r3, [r2, #0] + 8026778: e7e0 b.n 802673c <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0x13a> + 802677a: 3b63 subs r3, #99 ; 0x63 + 802677c: 2b01 cmp r3, #1 + 802677e: d8e5 bhi.n 802674c <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0x14a> + 8026780: f8cd 9040 str.w r9, [sp, #64] ; 0x40 + 8026784: b329 cbz r1, 80267d2 <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0x1d0> + 8026786: 880b ldrh r3, [r1, #0] + 8026788: 2b69 cmp r3, #105 ; 0x69 + 802678a: d063 beq.n 8026854 <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0x252> + 802678c: d825 bhi.n 80267da <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0x1d8> + 802678e: 2b63 cmp r3, #99 ; 0x63 + 8026790: d038 beq.n 8026804 <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0x202> + 8026792: 2b64 cmp r3, #100 ; 0x64 + 8026794: d05e beq.n 8026854 <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0x252> + 8026796: 2b58 cmp r3, #88 ; 0x58 + 8026798: d07a beq.n 8026890 <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0x28e> + 802679a: f8ad 6044 strh.w r6, [sp, #68] ; 0x44 + 802679e: 4625 mov r5, r4 + 80267a0: e036 b.n 8026810 <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0x20e> + 80267a2: 2b73 cmp r3, #115 ; 0x73 + 80267a4: d0ec beq.n 8026780 <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0x17e> + 80267a6: d802 bhi.n 80267ae <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0x1ac> + 80267a8: 2b6f cmp r3, #111 ; 0x6f + 80267aa: d1cf bne.n 802674c <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0x14a> + 80267ac: e7e8 b.n 8026780 <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0x17e> + 80267ae: 2b75 cmp r3, #117 ; 0x75 + 80267b0: d0e6 beq.n 8026780 <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0x17e> + 80267b2: 2b78 cmp r3, #120 ; 0x78 + 80267b4: e7f9 b.n 80267aa <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0x1a8> + 80267b6: 9a0d ldr r2, [sp, #52] ; 0x34 + 80267b8: f827 3012 strh.w r3, [r7, r2, lsl #1] + 80267bc: 9b09 ldr r3, [sp, #36] ; 0x24 + 80267be: b10b cbz r3, 80267c4 <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0x1c2> + 80267c0: 3302 adds r3, #2 + 80267c2: 9309 str r3, [sp, #36] ; 0x24 + 80267c4: 9b08 ldr r3, [sp, #32] + 80267c6: 2b00 cmp r3, #0 + 80267c8: f43f af2f beq.w 802662a <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0x28> + 80267cc: 3301 adds r3, #1 + 80267ce: 9308 str r3, [sp, #32] + 80267d0: e72b b.n 802662a <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0x28> + 80267d2: 2a00 cmp r2, #0 + 80267d4: d0e1 beq.n 802679a <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0x198> + 80267d6: 7813 ldrb r3, [r2, #0] + 80267d8: e7d6 b.n 8026788 <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0x186> + 80267da: 2b73 cmp r3, #115 ; 0x73 + 80267dc: d036 beq.n 802684c <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0x24a> + 80267de: d807 bhi.n 80267f0 <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0x1ee> + 80267e0: 2b6f cmp r3, #111 ; 0x6f + 80267e2: d1da bne.n 802679a <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0x198> + 80267e4: 9a0d ldr r2, [sp, #52] ; 0x34 + 80267e6: 1d25 adds r5, r4, #4 + 80267e8: 2308 movs r3, #8 + 80267ea: eba8 0202 sub.w r2, r8, r2 + 80267ee: e049 b.n 8026884 <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0x282> + 80267f0: 2b75 cmp r3, #117 ; 0x75 + 80267f2: d042 beq.n 802687a <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0x278> + 80267f4: 2b78 cmp r3, #120 ; 0x78 + 80267f6: d1d0 bne.n 802679a <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0x198> + 80267f8: 9a0d ldr r2, [sp, #52] ; 0x34 + 80267fa: 1d25 adds r5, r4, #4 + 80267fc: 2310 movs r3, #16 + 80267fe: eba8 0202 sub.w r2, r8, r2 + 8026802: e03f b.n 8026884 <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0x282> + 8026804: 6823 ldr r3, [r4, #0] + 8026806: 1d25 adds r5, r4, #4 + 8026808: f8ad 6046 strh.w r6, [sp, #70] ; 0x46 + 802680c: f8ad 3044 strh.w r3, [sp, #68] ; 0x44 + 8026810: 9b09 ldr r3, [sp, #36] ; 0x24 + 8026812: f8bd 1032 ldrh.w r1, [sp, #50] ; 0x32 + 8026816: 2b00 cmp r3, #0 + 8026818: d051 beq.n 80268be <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0x2bc> + 802681a: 881a ldrh r2, [r3, #0] + 802681c: a80d add r0, sp, #52 ; 0x34 + 802681e: f89d 3031 ldrb.w r3, [sp, #49] ; 0x31 + 8026822: 462c mov r4, r5 + 8026824: 9005 str r0, [sp, #20] + 8026826: f89d 002d ldrb.w r0, [sp, #45] ; 0x2d + 802682a: 9004 str r0, [sp, #16] + 802682c: 980e ldr r0, [sp, #56] ; 0x38 + 802682e: 9003 str r0, [sp, #12] + 8026830: f89d 0030 ldrb.w r0, [sp, #48] ; 0x30 + 8026834: 9002 str r0, [sp, #8] + 8026836: 980f ldr r0, [sp, #60] ; 0x3c + 8026838: 9001 str r0, [sp, #4] + 802683a: f89d 002f ldrb.w r0, [sp, #47] ; 0x2f + 802683e: e9cd 8706 strd r8, r7, [sp, #24] + 8026842: 9000 str r0, [sp, #0] + 8026844: a810 add r0, sp, #64 ; 0x40 + 8026846: f7ff fd49 bl 80262dc <_ZN8touchgfx7Unicode13composeStringERPKtttbbibibRitPt> + 802684a: e7b7 b.n 80267bc <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0x1ba> + 802684c: 1d25 adds r5, r4, #4 + 802684e: 6823 ldr r3, [r4, #0] + 8026850: 9310 str r3, [sp, #64] ; 0x40 + 8026852: e7dd b.n 8026810 <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0x20e> + 8026854: 9a0d ldr r2, [sp, #52] ; 0x34 + 8026856: 230a movs r3, #10 + 8026858: 4649 mov r1, r9 + 802685a: 6820 ldr r0, [r4, #0] + 802685c: eba8 0202 sub.w r2, r8, r2 + 8026860: 1d25 adds r5, r4, #4 + 8026862: b292 uxth r2, r2 + 8026864: f7ff fce4 bl 8026230 <_ZN8touchgfx7Unicode4itoaElPtti.part.2> + 8026868: f8bd 3044 ldrh.w r3, [sp, #68] ; 0x44 + 802686c: 2b2d cmp r3, #45 ; 0x2d + 802686e: d1cf bne.n 8026810 <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0x20e> + 8026870: f8ad 3032 strh.w r3, [sp, #50] ; 0x32 + 8026874: 9b10 ldr r3, [sp, #64] ; 0x40 + 8026876: 3302 adds r3, #2 + 8026878: e7ea b.n 8026850 <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0x24e> + 802687a: 9a0d ldr r2, [sp, #52] ; 0x34 + 802687c: 1d25 adds r5, r4, #4 + 802687e: 230a movs r3, #10 + 8026880: eba8 0202 sub.w r2, r8, r2 + 8026884: b292 uxth r2, r2 + 8026886: 4649 mov r1, r9 + 8026888: 6820 ldr r0, [r4, #0] + 802688a: f7ff fcfd bl 8026288 <_ZN8touchgfx7Unicode4utoaEmPtti.part.3> + 802688e: e7bf b.n 8026810 <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0x20e> + 8026890: 9a0d ldr r2, [sp, #52] ; 0x34 + 8026892: 2310 movs r3, #16 + 8026894: 4649 mov r1, r9 + 8026896: 6820 ldr r0, [r4, #0] + 8026898: eba8 0202 sub.w r2, r8, r2 + 802689c: 1d25 adds r5, r4, #4 + 802689e: b292 uxth r2, r2 + 80268a0: f7ff fcf2 bl 8026288 <_ZN8touchgfx7Unicode4utoaEmPtti.part.3> + 80268a4: f10d 0242 add.w r2, sp, #66 ; 0x42 + 80268a8: f832 3f02 ldrh.w r3, [r2, #2]! + 80268ac: 2b00 cmp r3, #0 + 80268ae: d0af beq.n 8026810 <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0x20e> + 80268b0: f1a3 0161 sub.w r1, r3, #97 ; 0x61 + 80268b4: 2919 cmp r1, #25 + 80268b6: d8f7 bhi.n 80268a8 <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0x2a6> + 80268b8: 3b20 subs r3, #32 + 80268ba: 8013 strh r3, [r2, #0] + 80268bc: e7f4 b.n 80268a8 <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0x2a6> + 80268be: 9a08 ldr r2, [sp, #32] + 80268c0: 2a00 cmp r2, #0 + 80268c2: d0ab beq.n 802681c <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0x21a> + 80268c4: 7812 ldrb r2, [r2, #0] + 80268c6: e7a9 b.n 802681c <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0x21a> + 80268c8: 2d00 cmp r5, #0 + 80268ca: f43f af48 beq.w 802675e <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0x15c> + 80268ce: 782d ldrb r5, [r5, #0] + 80268d0: e745 b.n 802675e <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list+0x15c> + +080268d2 <_ZN8touchgfx7Unicode9vsnprintfEPttPKcSt9__va_list>: + 80268d2: b507 push {r0, r1, r2, lr} + 80268d4: 9300 str r3, [sp, #0] + 80268d6: 4613 mov r3, r2 + 80268d8: 2200 movs r2, #0 + 80268da: f7ff fe92 bl 8026602 <_ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list> + 80268de: b003 add sp, #12 + 80268e0: f85d fb04 ldr.w pc, [sp], #4 + +080268e4 <_ZN8touchgfx7Unicode8snprintfEPttPKcz>: + 80268e4: b40c push {r2, r3} + 80268e6: b507 push {r0, r1, r2, lr} + 80268e8: ab04 add r3, sp, #16 + 80268ea: f853 2b04 ldr.w r2, [r3], #4 + 80268ee: 9301 str r3, [sp, #4] + 80268f0: f7ff ffef bl 80268d2 <_ZN8touchgfx7Unicode9vsnprintfEPttPKcSt9__va_list> + 80268f4: b003 add sp, #12 + 80268f6: f85d eb04 ldr.w lr, [sp], #4 + 80268fa: b002 add sp, #8 + 80268fc: 4770 bx lr + ... + +08026900 <_ZN8touchgfx11FontManager15setFontProviderEPNS_12FontProviderE>: + 8026900: 4b01 ldr r3, [pc, #4] ; (8026908 <_ZN8touchgfx11FontManager15setFontProviderEPNS_12FontProviderE+0x8>) + 8026902: 6018 str r0, [r3, #0] + 8026904: 4770 bx lr + 8026906: bf00 nop + 8026908: 2001e794 .word 0x2001e794 + +0802690c <_ZN8touchgfx6Bitmap15isDynamicBitmapEt>: + 802690c: 4b06 ldr r3, [pc, #24] ; (8026928 <_ZN8touchgfx6Bitmap15isDynamicBitmapEt+0x1c>) + 802690e: 881a ldrh r2, [r3, #0] + 8026910: 4282 cmp r2, r0 + 8026912: d807 bhi.n 8026924 <_ZN8touchgfx6Bitmap15isDynamicBitmapEt+0x18> + 8026914: 4b05 ldr r3, [pc, #20] ; (802692c <_ZN8touchgfx6Bitmap15isDynamicBitmapEt+0x20>) + 8026916: 881b ldrh r3, [r3, #0] + 8026918: 4413 add r3, r2 + 802691a: 4298 cmp r0, r3 + 802691c: bfac ite ge + 802691e: 2000 movge r0, #0 + 8026920: 2001 movlt r0, #1 + 8026922: 4770 bx lr + 8026924: 2000 movs r0, #0 + 8026926: 4770 bx lr + 8026928: 2001e7b4 .word 0x2001e7b4 + 802692c: 2001e7b8 .word 0x2001e7b8 + +08026930 <_ZN8touchgfx6Bitmap23dynamicBitmapGetAddressEt>: + 8026930: b508 push {r3, lr} + 8026932: 4601 mov r1, r0 + 8026934: f7ff ffea bl 802690c <_ZN8touchgfx6Bitmap15isDynamicBitmapEt> + 8026938: b118 cbz r0, 8026942 <_ZN8touchgfx6Bitmap23dynamicBitmapGetAddressEt+0x12> + 802693a: 4b02 ldr r3, [pc, #8] ; (8026944 <_ZN8touchgfx6Bitmap23dynamicBitmapGetAddressEt+0x14>) + 802693c: 681b ldr r3, [r3, #0] + 802693e: f853 0021 ldr.w r0, [r3, r1, lsl #2] + 8026942: bd08 pop {r3, pc} + 8026944: 2001e798 .word 0x2001e798 + +08026948 <_ZN8touchgfx6Bitmap10clearCacheEv>: + 8026948: b5f0 push {r4, r5, r6, r7, lr} + 802694a: 4c24 ldr r4, [pc, #144] ; (80269dc <_ZN8touchgfx6Bitmap10clearCacheEv+0x94>) + 802694c: 6823 ldr r3, [r4, #0] + 802694e: 2b00 cmp r3, #0 + 8026950: d042 beq.n 80269d8 <_ZN8touchgfx6Bitmap10clearCacheEv+0x90> + 8026952: 4a23 ldr r2, [pc, #140] ; (80269e0 <_ZN8touchgfx6Bitmap10clearCacheEv+0x98>) + 8026954: 4d23 ldr r5, [pc, #140] ; (80269e4 <_ZN8touchgfx6Bitmap10clearCacheEv+0x9c>) + 8026956: 8811 ldrh r1, [r2, #0] + 8026958: f8b5 c000 ldrh.w ip, [r5] + 802695c: 4822 ldr r0, [pc, #136] ; (80269e8 <_ZN8touchgfx6Bitmap10clearCacheEv+0xa0>) + 802695e: 4461 add r1, ip + 8026960: 1c4a adds r2, r1, #1 + 8026962: 008f lsls r7, r1, #2 + 8026964: f022 0201 bic.w r2, r2, #1 + 8026968: 19de adds r6, r3, r7 + 802696a: 0412 lsls r2, r2, #16 + 802696c: 6006 str r6, [r0, #0] + 802696e: 4e1f ldr r6, [pc, #124] ; (80269ec <_ZN8touchgfx6Bitmap10clearCacheEv+0xa4>) + 8026970: 0c12 lsrs r2, r2, #16 + 8026972: eb07 0742 add.w r7, r7, r2, lsl #1 + 8026976: 19da adds r2, r3, r7 + 8026978: 6032 str r2, [r6, #0] + 802697a: 220e movs r2, #14 + 802697c: fb02 f20c mul.w r2, r2, ip + 8026980: 3203 adds r2, #3 + 8026982: f022 0203 bic.w r2, r2, #3 + 8026986: 443a add r2, r7 + 8026988: 4f19 ldr r7, [pc, #100] ; (80269f0 <_ZN8touchgfx6Bitmap10clearCacheEv+0xa8>) + 802698a: 4413 add r3, r2 + 802698c: 603b str r3, [r7, #0] + 802698e: 2300 movs r3, #0 + 8026990: 4f18 ldr r7, [pc, #96] ; (80269f4 <_ZN8touchgfx6Bitmap10clearCacheEv+0xac>) + 8026992: 469c mov ip, r3 + 8026994: 803b strh r3, [r7, #0] + 8026996: 4f18 ldr r7, [pc, #96] ; (80269f8 <_ZN8touchgfx6Bitmap10clearCacheEv+0xb0>) + 8026998: 683f ldr r7, [r7, #0] + 802699a: 1aba subs r2, r7, r2 + 802699c: 4f17 ldr r7, [pc, #92] ; (80269fc <_ZN8touchgfx6Bitmap10clearCacheEv+0xb4>) + 802699e: 603a str r2, [r7, #0] + 80269a0: f64f 77ff movw r7, #65535 ; 0xffff + 80269a4: 4a16 ldr r2, [pc, #88] ; (8026a00 <_ZN8touchgfx6Bitmap10clearCacheEv+0xb8>) + 80269a6: 8013 strh r3, [r2, #0] + 80269a8: 428b cmp r3, r1 + 80269aa: d10d bne.n 80269c8 <_ZN8touchgfx6Bitmap10clearCacheEv+0x80> + 80269ac: 882d ldrh r5, [r5, #0] + 80269ae: 2300 movs r3, #0 + 80269b0: 6830 ldr r0, [r6, #0] + 80269b2: 240e movs r4, #14 + 80269b4: 429d cmp r5, r3 + 80269b6: d90f bls.n 80269d8 <_ZN8touchgfx6Bitmap10clearCacheEv+0x90> + 80269b8: fb04 0203 mla r2, r4, r3, r0 + 80269bc: 3301 adds r3, #1 + 80269be: 7b11 ldrb r1, [r2, #12] + 80269c0: f36f 1145 bfc r1, #5, #1 + 80269c4: 7311 strb r1, [r2, #12] + 80269c6: e7f5 b.n 80269b4 <_ZN8touchgfx6Bitmap10clearCacheEv+0x6c> + 80269c8: 6822 ldr r2, [r4, #0] + 80269ca: f842 c023 str.w ip, [r2, r3, lsl #2] + 80269ce: 6802 ldr r2, [r0, #0] + 80269d0: f822 7013 strh.w r7, [r2, r3, lsl #1] + 80269d4: 3301 adds r3, #1 + 80269d6: e7e7 b.n 80269a8 <_ZN8touchgfx6Bitmap10clearCacheEv+0x60> + 80269d8: bdf0 pop {r4, r5, r6, r7, pc} + 80269da: bf00 nop + 80269dc: 2001e798 .word 0x2001e798 + 80269e0: 2001e7b4 .word 0x2001e7b4 + 80269e4: 2001e7b8 .word 0x2001e7b8 + 80269e8: 2001e7ac .word 0x2001e7ac + 80269ec: 2001e79c .word 0x2001e79c + 80269f0: 2001e7a4 .word 0x2001e7a4 + 80269f4: 2001e7b6 .word 0x2001e7b6 + 80269f8: 2001e7a0 .word 0x2001e7a0 + 80269fc: 2001e7b0 .word 0x2001e7b0 + 8026a00: 2001e7a8 .word 0x2001e7a8 + +08026a04 <_ZN8touchgfx6Bitmap8setCacheEPtmm>: + 8026a04: 4b06 ldr r3, [pc, #24] ; (8026a20 <_ZN8touchgfx6Bitmap8setCacheEPtmm+0x1c>) + 8026a06: 681b ldr r3, [r3, #0] + 8026a08: b943 cbnz r3, 8026a1c <_ZN8touchgfx6Bitmap8setCacheEPtmm+0x18> + 8026a0a: b139 cbz r1, 8026a1c <_ZN8touchgfx6Bitmap8setCacheEPtmm+0x18> + 8026a0c: 4b05 ldr r3, [pc, #20] ; (8026a24 <_ZN8touchgfx6Bitmap8setCacheEPtmm+0x20>) + 8026a0e: 801a strh r2, [r3, #0] + 8026a10: 4b05 ldr r3, [pc, #20] ; (8026a28 <_ZN8touchgfx6Bitmap8setCacheEPtmm+0x24>) + 8026a12: 6019 str r1, [r3, #0] + 8026a14: 4b05 ldr r3, [pc, #20] ; (8026a2c <_ZN8touchgfx6Bitmap8setCacheEPtmm+0x28>) + 8026a16: 6018 str r0, [r3, #0] + 8026a18: f7ff bf96 b.w 8026948 <_ZN8touchgfx6Bitmap10clearCacheEv> + 8026a1c: 4770 bx lr + 8026a1e: bf00 nop + 8026a20: 2001e7a4 .word 0x2001e7a4 + 8026a24: 2001e7b8 .word 0x2001e7b8 + 8026a28: 2001e7a0 .word 0x2001e7a0 + 8026a2c: 2001e798 .word 0x2001e798 + +08026a30 <_ZN8touchgfx6Bitmap22registerBitmapDatabaseEPKNS0_10BitmapDataEtPtmm>: + 8026a30: b470 push {r4, r5, r6} + 8026a32: 4c07 ldr r4, [pc, #28] ; (8026a50 <_ZN8touchgfx6Bitmap22registerBitmapDatabaseEPKNS0_10BitmapDataEtPtmm+0x20>) + 8026a34: 4605 mov r5, r0 + 8026a36: 4610 mov r0, r2 + 8026a38: 9a03 ldr r2, [sp, #12] + 8026a3a: 6826 ldr r6, [r4, #0] + 8026a3c: b936 cbnz r6, 8026a4c <_ZN8touchgfx6Bitmap22registerBitmapDatabaseEPKNS0_10BitmapDataEtPtmm+0x1c> + 8026a3e: 6025 str r5, [r4, #0] + 8026a40: 4c04 ldr r4, [pc, #16] ; (8026a54 <_ZN8touchgfx6Bitmap22registerBitmapDatabaseEPKNS0_10BitmapDataEtPtmm+0x24>) + 8026a42: 8021 strh r1, [r4, #0] + 8026a44: 4619 mov r1, r3 + 8026a46: bc70 pop {r4, r5, r6} + 8026a48: f7ff bfdc b.w 8026a04 <_ZN8touchgfx6Bitmap8setCacheEPtmm> + 8026a4c: bc70 pop {r4, r5, r6} + 8026a4e: 4770 bx lr + 8026a50: 2001e7bc .word 0x2001e7bc + 8026a54: 2001e7b4 .word 0x2001e7b4 + +08026a58 <_ZNK8touchgfx6Bitmap8getWidthEv>: + 8026a58: 4a12 ldr r2, [pc, #72] ; (8026aa4 <_ZNK8touchgfx6Bitmap8getWidthEv+0x4c>) + 8026a5a: 8803 ldrh r3, [r0, #0] + 8026a5c: 8812 ldrh r2, [r2, #0] + 8026a5e: 4293 cmp r3, r2 + 8026a60: d207 bcs.n 8026a72 <_ZNK8touchgfx6Bitmap8getWidthEv+0x1a> + 8026a62: 4a11 ldr r2, [pc, #68] ; (8026aa8 <_ZNK8touchgfx6Bitmap8getWidthEv+0x50>) + 8026a64: 2114 movs r1, #20 + 8026a66: 6812 ldr r2, [r2, #0] + 8026a68: fb01 2303 mla r3, r1, r3, r2 + 8026a6c: f9b3 0008 ldrsh.w r0, [r3, #8] + 8026a70: 4770 bx lr + 8026a72: 490e ldr r1, [pc, #56] ; (8026aac <_ZNK8touchgfx6Bitmap8getWidthEv+0x54>) + 8026a74: 8809 ldrh r1, [r1, #0] + 8026a76: 4411 add r1, r2 + 8026a78: 428b cmp r3, r1 + 8026a7a: da04 bge.n 8026a86 <_ZNK8touchgfx6Bitmap8getWidthEv+0x2e> + 8026a7c: 1a9b subs r3, r3, r2 + 8026a7e: 4a0c ldr r2, [pc, #48] ; (8026ab0 <_ZNK8touchgfx6Bitmap8getWidthEv+0x58>) + 8026a80: 210e movs r1, #14 + 8026a82: 6812 ldr r2, [r2, #0] + 8026a84: e7f0 b.n 8026a68 <_ZNK8touchgfx6Bitmap8getWidthEv+0x10> + 8026a86: f64f 72fe movw r2, #65534 ; 0xfffe + 8026a8a: 4293 cmp r3, r2 + 8026a8c: d108 bne.n 8026aa0 <_ZNK8touchgfx6Bitmap8getWidthEv+0x48> + 8026a8e: 4b09 ldr r3, [pc, #36] ; (8026ab4 <_ZNK8touchgfx6Bitmap8getWidthEv+0x5c>) + 8026a90: 781b ldrb r3, [r3, #0] + 8026a92: b91b cbnz r3, 8026a9c <_ZNK8touchgfx6Bitmap8getWidthEv+0x44> + 8026a94: 4b08 ldr r3, [pc, #32] ; (8026ab8 <_ZNK8touchgfx6Bitmap8getWidthEv+0x60>) + 8026a96: f9b3 0000 ldrsh.w r0, [r3] + 8026a9a: 4770 bx lr + 8026a9c: 4b07 ldr r3, [pc, #28] ; (8026abc <_ZNK8touchgfx6Bitmap8getWidthEv+0x64>) + 8026a9e: e7fa b.n 8026a96 <_ZNK8touchgfx6Bitmap8getWidthEv+0x3e> + 8026aa0: 2000 movs r0, #0 + 8026aa2: 4770 bx lr + 8026aa4: 2001e7b4 .word 0x2001e7b4 + 8026aa8: 2001e7bc .word 0x2001e7bc + 8026aac: 2001e7b8 .word 0x2001e7b8 + 8026ab0: 2001e79c .word 0x2001e79c + 8026ab4: 2001e72c .word 0x2001e72c + 8026ab8: 2001e72e .word 0x2001e72e + 8026abc: 2001e730 .word 0x2001e730 + +08026ac0 <_ZNK8touchgfx6Bitmap9getHeightEv>: + 8026ac0: 4a12 ldr r2, [pc, #72] ; (8026b0c <_ZNK8touchgfx6Bitmap9getHeightEv+0x4c>) + 8026ac2: 8803 ldrh r3, [r0, #0] + 8026ac4: 8812 ldrh r2, [r2, #0] + 8026ac6: 4293 cmp r3, r2 + 8026ac8: d207 bcs.n 8026ada <_ZNK8touchgfx6Bitmap9getHeightEv+0x1a> + 8026aca: 4a11 ldr r2, [pc, #68] ; (8026b10 <_ZNK8touchgfx6Bitmap9getHeightEv+0x50>) + 8026acc: 2114 movs r1, #20 + 8026ace: 6812 ldr r2, [r2, #0] + 8026ad0: fb01 2303 mla r3, r1, r3, r2 + 8026ad4: f9b3 000a ldrsh.w r0, [r3, #10] + 8026ad8: 4770 bx lr + 8026ada: 490e ldr r1, [pc, #56] ; (8026b14 <_ZNK8touchgfx6Bitmap9getHeightEv+0x54>) + 8026adc: 8809 ldrh r1, [r1, #0] + 8026ade: 4411 add r1, r2 + 8026ae0: 428b cmp r3, r1 + 8026ae2: da04 bge.n 8026aee <_ZNK8touchgfx6Bitmap9getHeightEv+0x2e> + 8026ae4: 1a9b subs r3, r3, r2 + 8026ae6: 4a0c ldr r2, [pc, #48] ; (8026b18 <_ZNK8touchgfx6Bitmap9getHeightEv+0x58>) + 8026ae8: 210e movs r1, #14 + 8026aea: 6812 ldr r2, [r2, #0] + 8026aec: e7f0 b.n 8026ad0 <_ZNK8touchgfx6Bitmap9getHeightEv+0x10> + 8026aee: f64f 72fe movw r2, #65534 ; 0xfffe + 8026af2: 4293 cmp r3, r2 + 8026af4: d108 bne.n 8026b08 <_ZNK8touchgfx6Bitmap9getHeightEv+0x48> + 8026af6: 4b09 ldr r3, [pc, #36] ; (8026b1c <_ZNK8touchgfx6Bitmap9getHeightEv+0x5c>) + 8026af8: 781b ldrb r3, [r3, #0] + 8026afa: b91b cbnz r3, 8026b04 <_ZNK8touchgfx6Bitmap9getHeightEv+0x44> + 8026afc: 4b08 ldr r3, [pc, #32] ; (8026b20 <_ZNK8touchgfx6Bitmap9getHeightEv+0x60>) + 8026afe: f9b3 0000 ldrsh.w r0, [r3] + 8026b02: 4770 bx lr + 8026b04: 4b07 ldr r3, [pc, #28] ; (8026b24 <_ZNK8touchgfx6Bitmap9getHeightEv+0x64>) + 8026b06: e7fa b.n 8026afe <_ZNK8touchgfx6Bitmap9getHeightEv+0x3e> + 8026b08: 2000 movs r0, #0 + 8026b0a: 4770 bx lr + 8026b0c: 2001e7b4 .word 0x2001e7b4 + 8026b10: 2001e7bc .word 0x2001e7bc + 8026b14: 2001e7b8 .word 0x2001e7b8 + 8026b18: 2001e79c .word 0x2001e79c + 8026b1c: 2001e72c .word 0x2001e72c + 8026b20: 2001e730 .word 0x2001e730 + 8026b24: 2001e72e .word 0x2001e72e + +08026b28 <_ZNK8touchgfx6Bitmap12getSolidRectEv>: + 8026b28: 4a1f ldr r2, [pc, #124] ; (8026ba8 <_ZNK8touchgfx6Bitmap12getSolidRectEv+0x80>) + 8026b2a: b510 push {r4, lr} + 8026b2c: 880b ldrh r3, [r1, #0] + 8026b2e: 8812 ldrh r2, [r2, #0] + 8026b30: 4293 cmp r3, r2 + 8026b32: d213 bcs.n 8026b5c <_ZNK8touchgfx6Bitmap12getSolidRectEv+0x34> + 8026b34: 4a1d ldr r2, [pc, #116] ; (8026bac <_ZNK8touchgfx6Bitmap12getSolidRectEv+0x84>) + 8026b36: 2114 movs r1, #20 + 8026b38: 6812 ldr r2, [r2, #0] + 8026b3a: fb01 2303 mla r3, r1, r3, r2 + 8026b3e: f9b3 400c ldrsh.w r4, [r3, #12] + 8026b42: f9b3 100e ldrsh.w r1, [r3, #14] + 8026b46: 8a1a ldrh r2, [r3, #16] + 8026b48: 8a5b ldrh r3, [r3, #18] + 8026b4a: f3c2 020c ubfx r2, r2, #0, #13 + 8026b4e: 8004 strh r4, [r0, #0] + 8026b50: f3c3 030c ubfx r3, r3, #0, #13 + 8026b54: 8041 strh r1, [r0, #2] + 8026b56: 8082 strh r2, [r0, #4] + 8026b58: 80c3 strh r3, [r0, #6] + 8026b5a: e00e b.n 8026b7a <_ZNK8touchgfx6Bitmap12getSolidRectEv+0x52> + 8026b5c: 4914 ldr r1, [pc, #80] ; (8026bb0 <_ZNK8touchgfx6Bitmap12getSolidRectEv+0x88>) + 8026b5e: 8809 ldrh r1, [r1, #0] + 8026b60: 4411 add r1, r2 + 8026b62: 428b cmp r3, r1 + 8026b64: da0a bge.n 8026b7c <_ZNK8touchgfx6Bitmap12getSolidRectEv+0x54> + 8026b66: 1a9b subs r3, r3, r2 + 8026b68: 4a12 ldr r2, [pc, #72] ; (8026bb4 <_ZNK8touchgfx6Bitmap12getSolidRectEv+0x8c>) + 8026b6a: 210e movs r1, #14 + 8026b6c: 6812 ldr r2, [r2, #0] + 8026b6e: fb01 2303 mla r3, r1, r3, r2 + 8026b72: 681a ldr r2, [r3, #0] + 8026b74: 6002 str r2, [r0, #0] + 8026b76: 685a ldr r2, [r3, #4] + 8026b78: 6042 str r2, [r0, #4] + 8026b7a: bd10 pop {r4, pc} + 8026b7c: f64f 72fe movw r2, #65534 ; 0xfffe + 8026b80: 4293 cmp r3, r2 + 8026b82: d10b bne.n 8026b9c <_ZNK8touchgfx6Bitmap12getSolidRectEv+0x74> + 8026b84: 4b0c ldr r3, [pc, #48] ; (8026bb8 <_ZNK8touchgfx6Bitmap12getSolidRectEv+0x90>) + 8026b86: f9b3 1000 ldrsh.w r1, [r3] + 8026b8a: 4b0c ldr r3, [pc, #48] ; (8026bbc <_ZNK8touchgfx6Bitmap12getSolidRectEv+0x94>) + 8026b8c: 8081 strh r1, [r0, #4] + 8026b8e: f9b3 2000 ldrsh.w r2, [r3] + 8026b92: 2300 movs r3, #0 + 8026b94: 80c2 strh r2, [r0, #6] + 8026b96: 8003 strh r3, [r0, #0] + 8026b98: 8043 strh r3, [r0, #2] + 8026b9a: e7ee b.n 8026b7a <_ZNK8touchgfx6Bitmap12getSolidRectEv+0x52> + 8026b9c: 2300 movs r3, #0 + 8026b9e: 8003 strh r3, [r0, #0] + 8026ba0: 8043 strh r3, [r0, #2] + 8026ba2: 8083 strh r3, [r0, #4] + 8026ba4: e7d8 b.n 8026b58 <_ZNK8touchgfx6Bitmap12getSolidRectEv+0x30> + 8026ba6: bf00 nop + 8026ba8: 2001e7b4 .word 0x2001e7b4 + 8026bac: 2001e7bc .word 0x2001e7bc + 8026bb0: 2001e7b8 .word 0x2001e7b8 + 8026bb4: 2001e79c .word 0x2001e79c + 8026bb8: 2001e728 .word 0x2001e728 + 8026bbc: 2001e72a .word 0x2001e72a + +08026bc0 <_ZNK8touchgfx6Bitmap20hasTransparentPixelsEv>: + 8026bc0: 4a17 ldr r2, [pc, #92] ; (8026c20 <_ZNK8touchgfx6Bitmap20hasTransparentPixelsEv+0x60>) + 8026bc2: 8803 ldrh r3, [r0, #0] + 8026bc4: 8812 ldrh r2, [r2, #0] + 8026bc6: 4293 cmp r3, r2 + 8026bc8: d213 bcs.n 8026bf2 <_ZNK8touchgfx6Bitmap20hasTransparentPixelsEv+0x32> + 8026bca: 4a16 ldr r2, [pc, #88] ; (8026c24 <_ZNK8touchgfx6Bitmap20hasTransparentPixelsEv+0x64>) + 8026bcc: 2114 movs r1, #20 + 8026bce: 6812 ldr r2, [r2, #0] + 8026bd0: fb01 2303 mla r3, r1, r3, r2 + 8026bd4: 8a1a ldrh r2, [r3, #16] + 8026bd6: 8919 ldrh r1, [r3, #8] + 8026bd8: f3c2 020c ubfx r2, r2, #0, #13 + 8026bdc: 428a cmp r2, r1 + 8026bde: db1d blt.n 8026c1c <_ZNK8touchgfx6Bitmap20hasTransparentPixelsEv+0x5c> + 8026be0: 8a58 ldrh r0, [r3, #18] + 8026be2: f3c0 000c ubfx r0, r0, #0, #13 + 8026be6: 895b ldrh r3, [r3, #10] + 8026be8: 4298 cmp r0, r3 + 8026bea: bfac ite ge + 8026bec: 2000 movge r0, #0 + 8026bee: 2001 movlt r0, #1 + 8026bf0: 4770 bx lr + 8026bf2: 490d ldr r1, [pc, #52] ; (8026c28 <_ZNK8touchgfx6Bitmap20hasTransparentPixelsEv+0x68>) + 8026bf4: 8809 ldrh r1, [r1, #0] + 8026bf6: 4411 add r1, r2 + 8026bf8: 428b cmp r3, r1 + 8026bfa: da0d bge.n 8026c18 <_ZNK8touchgfx6Bitmap20hasTransparentPixelsEv+0x58> + 8026bfc: 1a9b subs r3, r3, r2 + 8026bfe: 4a0b ldr r2, [pc, #44] ; (8026c2c <_ZNK8touchgfx6Bitmap20hasTransparentPixelsEv+0x6c>) + 8026c00: 210e movs r1, #14 + 8026c02: 6812 ldr r2, [r2, #0] + 8026c04: fb01 2303 mla r3, r1, r3, r2 + 8026c08: f9b3 1004 ldrsh.w r1, [r3, #4] + 8026c0c: 891a ldrh r2, [r3, #8] + 8026c0e: 4291 cmp r1, r2 + 8026c10: db04 blt.n 8026c1c <_ZNK8touchgfx6Bitmap20hasTransparentPixelsEv+0x5c> + 8026c12: f9b3 0006 ldrsh.w r0, [r3, #6] + 8026c16: e7e6 b.n 8026be6 <_ZNK8touchgfx6Bitmap20hasTransparentPixelsEv+0x26> + 8026c18: 2000 movs r0, #0 + 8026c1a: 4770 bx lr + 8026c1c: 2001 movs r0, #1 + 8026c1e: 4770 bx lr + 8026c20: 2001e7b4 .word 0x2001e7b4 + 8026c24: 2001e7bc .word 0x2001e7bc + 8026c28: 2001e7b8 .word 0x2001e7b8 + 8026c2c: 2001e79c .word 0x2001e79c + +08026c30 <_ZNK8touchgfx6Bitmap7getDataEv>: + 8026c30: 4a12 ldr r2, [pc, #72] ; (8026c7c <_ZNK8touchgfx6Bitmap7getDataEv+0x4c>) + 8026c32: 8803 ldrh r3, [r0, #0] + 8026c34: 8811 ldrh r1, [r2, #0] + 8026c36: 428b cmp r3, r1 + 8026c38: d20b bcs.n 8026c52 <_ZNK8touchgfx6Bitmap7getDataEv+0x22> + 8026c3a: 4a11 ldr r2, [pc, #68] ; (8026c80 <_ZNK8touchgfx6Bitmap7getDataEv+0x50>) + 8026c3c: 6812 ldr r2, [r2, #0] + 8026c3e: b112 cbz r2, 8026c46 <_ZNK8touchgfx6Bitmap7getDataEv+0x16> + 8026c40: f852 0023 ldr.w r0, [r2, r3, lsl #2] + 8026c44: b9c0 cbnz r0, 8026c78 <_ZNK8touchgfx6Bitmap7getDataEv+0x48> + 8026c46: 4a0f ldr r2, [pc, #60] ; (8026c84 <_ZNK8touchgfx6Bitmap7getDataEv+0x54>) + 8026c48: 6811 ldr r1, [r2, #0] + 8026c4a: 2214 movs r2, #20 + 8026c4c: 4353 muls r3, r2 + 8026c4e: 58c8 ldr r0, [r1, r3] + 8026c50: 4770 bx lr + 8026c52: 4a0d ldr r2, [pc, #52] ; (8026c88 <_ZNK8touchgfx6Bitmap7getDataEv+0x58>) + 8026c54: 8812 ldrh r2, [r2, #0] + 8026c56: 440a add r2, r1 + 8026c58: 4293 cmp r3, r2 + 8026c5a: da04 bge.n 8026c66 <_ZNK8touchgfx6Bitmap7getDataEv+0x36> + 8026c5c: 4a08 ldr r2, [pc, #32] ; (8026c80 <_ZNK8touchgfx6Bitmap7getDataEv+0x50>) + 8026c5e: 6812 ldr r2, [r2, #0] + 8026c60: f852 0023 ldr.w r0, [r2, r3, lsl #2] + 8026c64: 4770 bx lr + 8026c66: f64f 72fe movw r2, #65534 ; 0xfffe + 8026c6a: 4293 cmp r3, r2 + 8026c6c: d103 bne.n 8026c76 <_ZNK8touchgfx6Bitmap7getDataEv+0x46> + 8026c6e: 4b07 ldr r3, [pc, #28] ; (8026c8c <_ZNK8touchgfx6Bitmap7getDataEv+0x5c>) + 8026c70: 681b ldr r3, [r3, #0] + 8026c72: 6c58 ldr r0, [r3, #68] ; 0x44 + 8026c74: 4770 bx lr + 8026c76: 2000 movs r0, #0 + 8026c78: 4770 bx lr + 8026c7a: bf00 nop + 8026c7c: 2001e7b4 .word 0x2001e7b4 + 8026c80: 2001e798 .word 0x2001e798 + 8026c84: 2001e7bc .word 0x2001e7bc + 8026c88: 2001e7b8 .word 0x2001e7b8 + 8026c8c: 2001e734 .word 0x2001e734 + +08026c90 <_ZNK8touchgfx6Bitmap12getExtraDataEv>: + 8026c90: 4b24 ldr r3, [pc, #144] ; (8026d24 <_ZNK8touchgfx6Bitmap12getExtraDataEv+0x94>) + 8026c92: 8802 ldrh r2, [r0, #0] + 8026c94: 8818 ldrh r0, [r3, #0] + 8026c96: 4282 cmp r2, r0 + 8026c98: d221 bcs.n 8026cde <_ZNK8touchgfx6Bitmap12getExtraDataEv+0x4e> + 8026c9a: 4b23 ldr r3, [pc, #140] ; (8026d28 <_ZNK8touchgfx6Bitmap12getExtraDataEv+0x98>) + 8026c9c: 6819 ldr r1, [r3, #0] + 8026c9e: 2314 movs r3, #20 + 8026ca0: fb03 1302 mla r3, r3, r2, r1 + 8026ca4: 6858 ldr r0, [r3, #4] + 8026ca6: 2800 cmp r0, #0 + 8026ca8: d03a beq.n 8026d20 <_ZNK8touchgfx6Bitmap12getExtraDataEv+0x90> + 8026caa: 4920 ldr r1, [pc, #128] ; (8026d2c <_ZNK8touchgfx6Bitmap12getExtraDataEv+0x9c>) + 8026cac: 6809 ldr r1, [r1, #0] + 8026cae: 2900 cmp r1, #0 + 8026cb0: d036 beq.n 8026d20 <_ZNK8touchgfx6Bitmap12getExtraDataEv+0x90> + 8026cb2: f851 1022 ldr.w r1, [r1, r2, lsl #2] + 8026cb6: 2900 cmp r1, #0 + 8026cb8: d032 beq.n 8026d20 <_ZNK8touchgfx6Bitmap12getExtraDataEv+0x90> + 8026cba: 891a ldrh r2, [r3, #8] + 8026cbc: 8958 ldrh r0, [r3, #10] + 8026cbe: 4350 muls r0, r2 + 8026cc0: 7c5a ldrb r2, [r3, #17] + 8026cc2: 7cdb ldrb r3, [r3, #19] + 8026cc4: 0952 lsrs r2, r2, #5 + 8026cc6: f3c3 1342 ubfx r3, r3, #5, #3 + 8026cca: ea43 03c2 orr.w r3, r3, r2, lsl #3 + 8026cce: 2b0b cmp r3, #11 + 8026cd0: bf18 it ne + 8026cd2: 0040 lslne r0, r0, #1 + 8026cd4: 3003 adds r0, #3 + 8026cd6: f020 0003 bic.w r0, r0, #3 + 8026cda: 4408 add r0, r1 + 8026cdc: 4770 bx lr + 8026cde: 4b14 ldr r3, [pc, #80] ; (8026d30 <_ZNK8touchgfx6Bitmap12getExtraDataEv+0xa0>) + 8026ce0: 881b ldrh r3, [r3, #0] + 8026ce2: 4403 add r3, r0 + 8026ce4: 429a cmp r2, r3 + 8026ce6: da1a bge.n 8026d1e <_ZNK8touchgfx6Bitmap12getExtraDataEv+0x8e> + 8026ce8: 4b12 ldr r3, [pc, #72] ; (8026d34 <_ZNK8touchgfx6Bitmap12getExtraDataEv+0xa4>) + 8026cea: 1a10 subs r0, r2, r0 + 8026cec: 210e movs r1, #14 + 8026cee: 681b ldr r3, [r3, #0] + 8026cf0: fb01 3000 mla r0, r1, r0, r3 + 8026cf4: 7b03 ldrb r3, [r0, #12] + 8026cf6: f003 031f and.w r3, r3, #31 + 8026cfa: 2b0b cmp r3, #11 + 8026cfc: d10b bne.n 8026d16 <_ZNK8touchgfx6Bitmap12getExtraDataEv+0x86> + 8026cfe: 8903 ldrh r3, [r0, #8] + 8026d00: 8940 ldrh r0, [r0, #10] + 8026d02: 4358 muls r0, r3 + 8026d04: 4b09 ldr r3, [pc, #36] ; (8026d2c <_ZNK8touchgfx6Bitmap12getExtraDataEv+0x9c>) + 8026d06: 3003 adds r0, #3 + 8026d08: 6819 ldr r1, [r3, #0] + 8026d0a: f020 0303 bic.w r3, r0, #3 + 8026d0e: f851 0022 ldr.w r0, [r1, r2, lsl #2] + 8026d12: 4418 add r0, r3 + 8026d14: 4770 bx lr + 8026d16: 2b0d cmp r3, #13 + 8026d18: d101 bne.n 8026d1e <_ZNK8touchgfx6Bitmap12getExtraDataEv+0x8e> + 8026d1a: 300d adds r0, #13 + 8026d1c: 4770 bx lr + 8026d1e: 2000 movs r0, #0 + 8026d20: 4770 bx lr + 8026d22: bf00 nop + 8026d24: 2001e7b4 .word 0x2001e7b4 + 8026d28: 2001e7bc .word 0x2001e7bc + 8026d2c: 2001e798 .word 0x2001e798 + 8026d30: 2001e7b8 .word 0x2001e7b8 + 8026d34: 2001e79c .word 0x2001e79c + +08026d38 <_ZNK8touchgfx6Bitmap9getFormatEv>: + 8026d38: 4a17 ldr r2, [pc, #92] ; (8026d98 <_ZNK8touchgfx6Bitmap9getFormatEv+0x60>) + 8026d3a: b510 push {r4, lr} + 8026d3c: 8803 ldrh r3, [r0, #0] + 8026d3e: 8812 ldrh r2, [r2, #0] + 8026d40: 4293 cmp r3, r2 + 8026d42: d20c bcs.n 8026d5e <_ZNK8touchgfx6Bitmap9getFormatEv+0x26> + 8026d44: 4a15 ldr r2, [pc, #84] ; (8026d9c <_ZNK8touchgfx6Bitmap9getFormatEv+0x64>) + 8026d46: 2114 movs r1, #20 + 8026d48: 6812 ldr r2, [r2, #0] + 8026d4a: fb01 2303 mla r3, r1, r3, r2 + 8026d4e: 7c58 ldrb r0, [r3, #17] + 8026d50: 0942 lsrs r2, r0, #5 + 8026d52: 7cd8 ldrb r0, [r3, #19] + 8026d54: f3c0 1042 ubfx r0, r0, #5, #3 + 8026d58: ea40 00c2 orr.w r0, r0, r2, lsl #3 + 8026d5c: bd10 pop {r4, pc} + 8026d5e: 4910 ldr r1, [pc, #64] ; (8026da0 <_ZNK8touchgfx6Bitmap9getFormatEv+0x68>) + 8026d60: 8809 ldrh r1, [r1, #0] + 8026d62: 4411 add r1, r2 + 8026d64: 428b cmp r3, r1 + 8026d66: da09 bge.n 8026d7c <_ZNK8touchgfx6Bitmap9getFormatEv+0x44> + 8026d68: 1a9b subs r3, r3, r2 + 8026d6a: 4a0e ldr r2, [pc, #56] ; (8026da4 <_ZNK8touchgfx6Bitmap9getFormatEv+0x6c>) + 8026d6c: 210e movs r1, #14 + 8026d6e: 6812 ldr r2, [r2, #0] + 8026d70: fb01 2303 mla r3, r1, r3, r2 + 8026d74: 7b18 ldrb r0, [r3, #12] + 8026d76: f000 001f and.w r0, r0, #31 + 8026d7a: e7ef b.n 8026d5c <_ZNK8touchgfx6Bitmap9getFormatEv+0x24> + 8026d7c: f64f 72fe movw r2, #65534 ; 0xfffe + 8026d80: 4293 cmp r3, r2 + 8026d82: d106 bne.n 8026d92 <_ZNK8touchgfx6Bitmap9getFormatEv+0x5a> + 8026d84: f7dd f9b2 bl 80040ec <_ZN8touchgfx3HAL3lcdEv> + 8026d88: 6803 ldr r3, [r0, #0] + 8026d8a: e8bd 4010 ldmia.w sp!, {r4, lr} + 8026d8e: 6adb ldr r3, [r3, #44] ; 0x2c + 8026d90: 4718 bx r3 + 8026d92: 2000 movs r0, #0 + 8026d94: e7e2 b.n 8026d5c <_ZNK8touchgfx6Bitmap9getFormatEv+0x24> + 8026d96: bf00 nop + 8026d98: 2001e7b4 .word 0x2001e7b4 + 8026d9c: 2001e7bc .word 0x2001e7bc + 8026da0: 2001e7b8 .word 0x2001e7b8 + 8026da4: 2001e79c .word 0x2001e79c + +08026da8 <_ZNK8touchgfx8LCD16bpp8bitDepthEv>: + 8026da8: 2010 movs r0, #16 + 8026daa: 4770 bx lr + +08026dac <_ZNK8touchgfx8LCD16bpp17framebufferFormatEv>: + 8026dac: 2000 movs r0, #0 + 8026dae: 4770 bx lr + +08026db0 <_ZNK8touchgfx8LCD16bpp17framebufferStrideEv>: + 8026db0: 4b02 ldr r3, [pc, #8] ; (8026dbc <_ZNK8touchgfx8LCD16bpp17framebufferStrideEv+0xc>) + 8026db2: 8818 ldrh r0, [r3, #0] + 8026db4: 0040 lsls r0, r0, #1 + 8026db6: b280 uxth r0, r0 + 8026db8: 4770 bx lr + 8026dba: bf00 nop + 8026dbc: 2001e72e .word 0x2001e72e + +08026dc0 <_ZN8touchgfx8LCD16bpp28getTextureMapperDrawScanLineERKNS_14TextureSurfaceEth>: + 8026dc0: 2bff cmp r3, #255 ; 0xff + 8026dc2: d050 beq.n 8026e66 <_ZN8touchgfx8LCD16bpp28getTextureMapperDrawScanLineERKNS_14TextureSurfaceEth+0xa6> + 8026dc4: 2a0b cmp r2, #11 + 8026dc6: d04a beq.n 8026e5e <_ZN8touchgfx8LCD16bpp28getTextureMapperDrawScanLineERKNS_14TextureSurfaceEth+0x9e> + 8026dc8: d80e bhi.n 8026de8 <_ZN8touchgfx8LCD16bpp28getTextureMapperDrawScanLineERKNS_14TextureSurfaceEth+0x28> + 8026dca: 2a03 cmp r2, #3 + 8026dcc: d03f beq.n 8026e4e <_ZN8touchgfx8LCD16bpp28getTextureMapperDrawScanLineERKNS_14TextureSurfaceEth+0x8e> + 8026dce: d804 bhi.n 8026dda <_ZN8touchgfx8LCD16bpp28getTextureMapperDrawScanLineERKNS_14TextureSurfaceEth+0x1a> + 8026dd0: 2a01 cmp r2, #1 + 8026dd2: d03e beq.n 8026e52 <_ZN8touchgfx8LCD16bpp28getTextureMapperDrawScanLineERKNS_14TextureSurfaceEth+0x92> + 8026dd4: d93f bls.n 8026e56 <_ZN8touchgfx8LCD16bpp28getTextureMapperDrawScanLineERKNS_14TextureSurfaceEth+0x96> + 8026dd6: 6b80 ldr r0, [r0, #56] ; 0x38 + 8026dd8: 4770 bx lr + 8026dda: 2a09 cmp r2, #9 + 8026ddc: d03f beq.n 8026e5e <_ZN8touchgfx8LCD16bpp28getTextureMapperDrawScanLineERKNS_14TextureSurfaceEth+0x9e> + 8026dde: d83c bhi.n 8026e5a <_ZN8touchgfx8LCD16bpp28getTextureMapperDrawScanLineERKNS_14TextureSurfaceEth+0x9a> + 8026de0: 2a08 cmp r2, #8 + 8026de2: d03a beq.n 8026e5a <_ZN8touchgfx8LCD16bpp28getTextureMapperDrawScanLineERKNS_14TextureSurfaceEth+0x9a> + 8026de4: 2000 movs r0, #0 + 8026de6: 4770 bx lr + 8026de8: 2a2f cmp r2, #47 ; 0x2f + 8026dea: d024 beq.n 8026e36 <_ZN8touchgfx8LCD16bpp28getTextureMapperDrawScanLineERKNS_14TextureSurfaceEth+0x76> + 8026dec: d80d bhi.n 8026e0a <_ZN8touchgfx8LCD16bpp28getTextureMapperDrawScanLineERKNS_14TextureSurfaceEth+0x4a> + 8026dee: 2a2d cmp r2, #45 ; 0x2d + 8026df0: d014 beq.n 8026e1c <_ZN8touchgfx8LCD16bpp28getTextureMapperDrawScanLineERKNS_14TextureSurfaceEth+0x5c> + 8026df2: d826 bhi.n 8026e42 <_ZN8touchgfx8LCD16bpp28getTextureMapperDrawScanLineERKNS_14TextureSurfaceEth+0x82> + 8026df4: 2a2c cmp r2, #44 ; 0x2c + 8026df6: d1f5 bne.n 8026de4 <_ZN8touchgfx8LCD16bpp28getTextureMapperDrawScanLineERKNS_14TextureSurfaceEth+0x24> + 8026df8: 684b ldr r3, [r1, #4] + 8026dfa: 781b ldrb r3, [r3, #0] + 8026dfc: 2b01 cmp r3, #1 + 8026dfe: d018 beq.n 8026e32 <_ZN8touchgfx8LCD16bpp28getTextureMapperDrawScanLineERKNS_14TextureSurfaceEth+0x72> + 8026e00: d323 bcc.n 8026e4a <_ZN8touchgfx8LCD16bpp28getTextureMapperDrawScanLineERKNS_14TextureSurfaceEth+0x8a> + 8026e02: 2b02 cmp r3, #2 + 8026e04: d1ee bne.n 8026de4 <_ZN8touchgfx8LCD16bpp28getTextureMapperDrawScanLineERKNS_14TextureSurfaceEth+0x24> + 8026e06: 6880 ldr r0, [r0, #8] + 8026e08: 4770 bx lr + 8026e0a: 2a31 cmp r2, #49 ; 0x31 + 8026e0c: d004 beq.n 8026e18 <_ZN8touchgfx8LCD16bpp28getTextureMapperDrawScanLineERKNS_14TextureSurfaceEth+0x58> + 8026e0e: d328 bcc.n 8026e62 <_ZN8touchgfx8LCD16bpp28getTextureMapperDrawScanLineERKNS_14TextureSurfaceEth+0xa2> + 8026e10: 2a32 cmp r2, #50 ; 0x32 + 8026e12: d026 beq.n 8026e62 <_ZN8touchgfx8LCD16bpp28getTextureMapperDrawScanLineERKNS_14TextureSurfaceEth+0xa2> + 8026e14: 2a33 cmp r2, #51 ; 0x33 + 8026e16: d1e5 bne.n 8026de4 <_ZN8touchgfx8LCD16bpp28getTextureMapperDrawScanLineERKNS_14TextureSurfaceEth+0x24> + 8026e18: 6f00 ldr r0, [r0, #112] ; 0x70 + 8026e1a: 4770 bx lr + 8026e1c: 684b ldr r3, [r1, #4] + 8026e1e: 781b ldrb r3, [r3, #0] + 8026e20: 2b01 cmp r3, #1 + 8026e22: d004 beq.n 8026e2e <_ZN8touchgfx8LCD16bpp28getTextureMapperDrawScanLineERKNS_14TextureSurfaceEth+0x6e> + 8026e24: d30b bcc.n 8026e3e <_ZN8touchgfx8LCD16bpp28getTextureMapperDrawScanLineERKNS_14TextureSurfaceEth+0x7e> + 8026e26: 2b02 cmp r3, #2 + 8026e28: d1dc bne.n 8026de4 <_ZN8touchgfx8LCD16bpp28getTextureMapperDrawScanLineERKNS_14TextureSurfaceEth+0x24> + 8026e2a: 6900 ldr r0, [r0, #16] + 8026e2c: 4770 bx lr + 8026e2e: 6a00 ldr r0, [r0, #32] + 8026e30: 4770 bx lr + 8026e32: 6980 ldr r0, [r0, #24] + 8026e34: 4770 bx lr + 8026e36: 684b ldr r3, [r1, #4] + 8026e38: 781b ldrb r3, [r3, #0] + 8026e3a: 2b00 cmp r3, #0 + 8026e3c: d1d2 bne.n 8026de4 <_ZN8touchgfx8LCD16bpp28getTextureMapperDrawScanLineERKNS_14TextureSurfaceEth+0x24> + 8026e3e: 6b00 ldr r0, [r0, #48] ; 0x30 + 8026e40: 4770 bx lr + 8026e42: 684b ldr r3, [r1, #4] + 8026e44: 781b ldrb r3, [r3, #0] + 8026e46: 2b00 cmp r3, #0 + 8026e48: d1cc bne.n 8026de4 <_ZN8touchgfx8LCD16bpp28getTextureMapperDrawScanLineERKNS_14TextureSurfaceEth+0x24> + 8026e4a: 6a80 ldr r0, [r0, #40] ; 0x28 + 8026e4c: 4770 bx lr + 8026e4e: 6c80 ldr r0, [r0, #72] ; 0x48 + 8026e50: 4770 bx lr + 8026e52: 6d00 ldr r0, [r0, #80] ; 0x50 + 8026e54: 4770 bx lr + 8026e56: 6c00 ldr r0, [r0, #64] ; 0x40 + 8026e58: 4770 bx lr + 8026e5a: 6d80 ldr r0, [r0, #88] ; 0x58 + 8026e5c: 4770 bx lr + 8026e5e: 6e00 ldr r0, [r0, #96] ; 0x60 + 8026e60: 4770 bx lr + 8026e62: 6e80 ldr r0, [r0, #104] ; 0x68 + 8026e64: 4770 bx lr + 8026e66: 2a0b cmp r2, #11 + 8026e68: d049 beq.n 8026efe <_ZN8touchgfx8LCD16bpp28getTextureMapperDrawScanLineERKNS_14TextureSurfaceEth+0x13e> + 8026e6a: d80e bhi.n 8026e8a <_ZN8touchgfx8LCD16bpp28getTextureMapperDrawScanLineERKNS_14TextureSurfaceEth+0xca> + 8026e6c: 2a03 cmp r2, #3 + 8026e6e: d040 beq.n 8026ef2 <_ZN8touchgfx8LCD16bpp28getTextureMapperDrawScanLineERKNS_14TextureSurfaceEth+0x132> + 8026e70: d804 bhi.n 8026e7c <_ZN8touchgfx8LCD16bpp28getTextureMapperDrawScanLineERKNS_14TextureSurfaceEth+0xbc> + 8026e72: 2a01 cmp r2, #1 + 8026e74: d03f beq.n 8026ef6 <_ZN8touchgfx8LCD16bpp28getTextureMapperDrawScanLineERKNS_14TextureSurfaceEth+0x136> + 8026e76: d940 bls.n 8026efa <_ZN8touchgfx8LCD16bpp28getTextureMapperDrawScanLineERKNS_14TextureSurfaceEth+0x13a> + 8026e78: 6bc0 ldr r0, [r0, #60] ; 0x3c + 8026e7a: 4770 bx lr + 8026e7c: 2a09 cmp r2, #9 + 8026e7e: d03e beq.n 8026efe <_ZN8touchgfx8LCD16bpp28getTextureMapperDrawScanLineERKNS_14TextureSurfaceEth+0x13e> + 8026e80: d801 bhi.n 8026e86 <_ZN8touchgfx8LCD16bpp28getTextureMapperDrawScanLineERKNS_14TextureSurfaceEth+0xc6> + 8026e82: 2a08 cmp r2, #8 + 8026e84: d1ae bne.n 8026de4 <_ZN8touchgfx8LCD16bpp28getTextureMapperDrawScanLineERKNS_14TextureSurfaceEth+0x24> + 8026e86: 6dc0 ldr r0, [r0, #92] ; 0x5c + 8026e88: 4770 bx lr + 8026e8a: 2a2f cmp r2, #47 ; 0x2f + 8026e8c: d024 beq.n 8026ed8 <_ZN8touchgfx8LCD16bpp28getTextureMapperDrawScanLineERKNS_14TextureSurfaceEth+0x118> + 8026e8e: d80d bhi.n 8026eac <_ZN8touchgfx8LCD16bpp28getTextureMapperDrawScanLineERKNS_14TextureSurfaceEth+0xec> + 8026e90: 2a2d cmp r2, #45 ; 0x2d + 8026e92: d014 beq.n 8026ebe <_ZN8touchgfx8LCD16bpp28getTextureMapperDrawScanLineERKNS_14TextureSurfaceEth+0xfe> + 8026e94: d826 bhi.n 8026ee4 <_ZN8touchgfx8LCD16bpp28getTextureMapperDrawScanLineERKNS_14TextureSurfaceEth+0x124> + 8026e96: 2a2c cmp r2, #44 ; 0x2c + 8026e98: d1a4 bne.n 8026de4 <_ZN8touchgfx8LCD16bpp28getTextureMapperDrawScanLineERKNS_14TextureSurfaceEth+0x24> + 8026e9a: 684b ldr r3, [r1, #4] + 8026e9c: 781b ldrb r3, [r3, #0] + 8026e9e: 2b01 cmp r3, #1 + 8026ea0: d018 beq.n 8026ed4 <_ZN8touchgfx8LCD16bpp28getTextureMapperDrawScanLineERKNS_14TextureSurfaceEth+0x114> + 8026ea2: d324 bcc.n 8026eee <_ZN8touchgfx8LCD16bpp28getTextureMapperDrawScanLineERKNS_14TextureSurfaceEth+0x12e> + 8026ea4: 2b02 cmp r3, #2 + 8026ea6: d19d bne.n 8026de4 <_ZN8touchgfx8LCD16bpp28getTextureMapperDrawScanLineERKNS_14TextureSurfaceEth+0x24> + 8026ea8: 68c0 ldr r0, [r0, #12] + 8026eaa: 4770 bx lr + 8026eac: 2a31 cmp r2, #49 ; 0x31 + 8026eae: d004 beq.n 8026eba <_ZN8touchgfx8LCD16bpp28getTextureMapperDrawScanLineERKNS_14TextureSurfaceEth+0xfa> + 8026eb0: d327 bcc.n 8026f02 <_ZN8touchgfx8LCD16bpp28getTextureMapperDrawScanLineERKNS_14TextureSurfaceEth+0x142> + 8026eb2: 2a32 cmp r2, #50 ; 0x32 + 8026eb4: d025 beq.n 8026f02 <_ZN8touchgfx8LCD16bpp28getTextureMapperDrawScanLineERKNS_14TextureSurfaceEth+0x142> + 8026eb6: 2a33 cmp r2, #51 ; 0x33 + 8026eb8: d194 bne.n 8026de4 <_ZN8touchgfx8LCD16bpp28getTextureMapperDrawScanLineERKNS_14TextureSurfaceEth+0x24> + 8026eba: 6f40 ldr r0, [r0, #116] ; 0x74 + 8026ebc: 4770 bx lr + 8026ebe: 684b ldr r3, [r1, #4] + 8026ec0: 781b ldrb r3, [r3, #0] + 8026ec2: 2b01 cmp r3, #1 + 8026ec4: d004 beq.n 8026ed0 <_ZN8touchgfx8LCD16bpp28getTextureMapperDrawScanLineERKNS_14TextureSurfaceEth+0x110> + 8026ec6: d30b bcc.n 8026ee0 <_ZN8touchgfx8LCD16bpp28getTextureMapperDrawScanLineERKNS_14TextureSurfaceEth+0x120> + 8026ec8: 2b02 cmp r3, #2 + 8026eca: d18b bne.n 8026de4 <_ZN8touchgfx8LCD16bpp28getTextureMapperDrawScanLineERKNS_14TextureSurfaceEth+0x24> + 8026ecc: 6940 ldr r0, [r0, #20] + 8026ece: 4770 bx lr + 8026ed0: 6a40 ldr r0, [r0, #36] ; 0x24 + 8026ed2: 4770 bx lr + 8026ed4: 69c0 ldr r0, [r0, #28] + 8026ed6: 4770 bx lr + 8026ed8: 684b ldr r3, [r1, #4] + 8026eda: 781b ldrb r3, [r3, #0] + 8026edc: 2b00 cmp r3, #0 + 8026ede: d181 bne.n 8026de4 <_ZN8touchgfx8LCD16bpp28getTextureMapperDrawScanLineERKNS_14TextureSurfaceEth+0x24> + 8026ee0: 6b40 ldr r0, [r0, #52] ; 0x34 + 8026ee2: 4770 bx lr + 8026ee4: 684b ldr r3, [r1, #4] + 8026ee6: 781b ldrb r3, [r3, #0] + 8026ee8: 2b00 cmp r3, #0 + 8026eea: f47f af7b bne.w 8026de4 <_ZN8touchgfx8LCD16bpp28getTextureMapperDrawScanLineERKNS_14TextureSurfaceEth+0x24> + 8026eee: 6ac0 ldr r0, [r0, #44] ; 0x2c + 8026ef0: 4770 bx lr + 8026ef2: 6cc0 ldr r0, [r0, #76] ; 0x4c + 8026ef4: 4770 bx lr + 8026ef6: 6d40 ldr r0, [r0, #84] ; 0x54 + 8026ef8: 4770 bx lr + 8026efa: 6c40 ldr r0, [r0, #68] ; 0x44 + 8026efc: 4770 bx lr + 8026efe: 6e40 ldr r0, [r0, #100] ; 0x64 + 8026f00: 4770 bx lr + 8026f02: 6ec0 ldr r0, [r0, #108] ; 0x6c + 8026f04: 4770 bx lr + +08026f06 <_ZN8touchgfx8LCD16bpp49TextureMapper_L8_RGB565_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff>: + 8026f06: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8026f0a: b087 sub sp, #28 + 8026f0c: 9815 ldr r0, [sp, #84] ; 0x54 + 8026f0e: 9205 str r2, [sp, #20] + 8026f10: f89d 2064 ldrb.w r2, [sp, #100] ; 0x64 + 8026f14: 9101 str r1, [sp, #4] + 8026f16: 9202 str r2, [sp, #8] + 8026f18: 6841 ldr r1, [r0, #4] + 8026f1a: f8dd e060 ldr.w lr, [sp, #96] ; 0x60 + 8026f1e: e9dd 2416 ldrd r2, r4, [sp, #88] ; 0x58 + 8026f22: fb01 2404 mla r4, r1, r4, r2 + 8026f26: 6802 ldr r2, [r0, #0] + 8026f28: eb02 0444 add.w r4, r2, r4, lsl #1 + 8026f2c: f8de 2000 ldr.w r2, [lr] + 8026f30: 9203 str r2, [sp, #12] + 8026f32: f8de 2004 ldr.w r2, [lr, #4] + 8026f36: 3204 adds r2, #4 + 8026f38: 9204 str r2, [sp, #16] + 8026f3a: 9a02 ldr r2, [sp, #8] + 8026f3c: 43d6 mvns r6, r2 + 8026f3e: b2f6 uxtb r6, r6 + 8026f40: 9a01 ldr r2, [sp, #4] + 8026f42: 2a00 cmp r2, #0 + 8026f44: dc03 bgt.n 8026f4e <_ZN8touchgfx8LCD16bpp49TextureMapper_L8_RGB565_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x48> + 8026f46: 9a05 ldr r2, [sp, #20] + 8026f48: 2a00 cmp r2, #0 + 8026f4a: f340 8129 ble.w 80271a0 <_ZN8touchgfx8LCD16bpp49TextureMapper_L8_RGB565_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x29a> + 8026f4e: 9a11 ldr r2, [sp, #68] ; 0x44 + 8026f50: f9be c008 ldrsh.w ip, [lr, #8] + 8026f54: f502 4100 add.w r1, r2, #32768 ; 0x8000 + 8026f58: 9a12 ldr r2, [sp, #72] ; 0x48 + 8026f5a: f9be 700c ldrsh.w r7, [lr, #12] + 8026f5e: f502 4200 add.w r2, r2, #32768 ; 0x8000 + 8026f62: 2b00 cmp r3, #0 + 8026f64: dd0e ble.n 8026f84 <_ZN8touchgfx8LCD16bpp49TextureMapper_L8_RGB565_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x7e> + 8026f66: 1408 asrs r0, r1, #16 + 8026f68: d405 bmi.n 8026f76 <_ZN8touchgfx8LCD16bpp49TextureMapper_L8_RGB565_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x70> + 8026f6a: 4560 cmp r0, ip + 8026f6c: da03 bge.n 8026f76 <_ZN8touchgfx8LCD16bpp49TextureMapper_L8_RGB565_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x70> + 8026f6e: 1410 asrs r0, r2, #16 + 8026f70: d401 bmi.n 8026f76 <_ZN8touchgfx8LCD16bpp49TextureMapper_L8_RGB565_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x70> + 8026f72: 42b8 cmp r0, r7 + 8026f74: db07 blt.n 8026f86 <_ZN8touchgfx8LCD16bpp49TextureMapper_L8_RGB565_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x80> + 8026f76: 9813 ldr r0, [sp, #76] ; 0x4c + 8026f78: 3b01 subs r3, #1 + 8026f7a: 3402 adds r4, #2 + 8026f7c: 4401 add r1, r0 + 8026f7e: 9814 ldr r0, [sp, #80] ; 0x50 + 8026f80: 4402 add r2, r0 + 8026f82: e7ee b.n 8026f62 <_ZN8touchgfx8LCD16bpp49TextureMapper_L8_RGB565_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x5c> + 8026f84: d071 beq.n 802706a <_ZN8touchgfx8LCD16bpp49TextureMapper_L8_RGB565_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x164> + 8026f86: 1e58 subs r0, r3, #1 + 8026f88: 9d13 ldr r5, [sp, #76] ; 0x4c + 8026f8a: fb05 1500 mla r5, r5, r0, r1 + 8026f8e: 142d asrs r5, r5, #16 + 8026f90: d45f bmi.n 8027052 <_ZN8touchgfx8LCD16bpp49TextureMapper_L8_RGB565_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x14c> + 8026f92: 4565 cmp r5, ip + 8026f94: da5d bge.n 8027052 <_ZN8touchgfx8LCD16bpp49TextureMapper_L8_RGB565_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x14c> + 8026f96: 9d14 ldr r5, [sp, #80] ; 0x50 + 8026f98: fb05 2000 mla r0, r5, r0, r2 + 8026f9c: 1400 asrs r0, r0, #16 + 8026f9e: d458 bmi.n 8027052 <_ZN8touchgfx8LCD16bpp49TextureMapper_L8_RGB565_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x14c> + 8026fa0: 42b8 cmp r0, r7 + 8026fa2: da56 bge.n 8027052 <_ZN8touchgfx8LCD16bpp49TextureMapper_L8_RGB565_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x14c> + 8026fa4: 4699 mov r9, r3 + 8026fa6: 46a2 mov sl, r4 + 8026fa8: f8bd b008 ldrh.w fp, [sp, #8] + 8026fac: f1b9 0f00 cmp.w r9, #0 + 8026fb0: dd57 ble.n 8027062 <_ZN8touchgfx8LCD16bpp49TextureMapper_L8_RGB565_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x15c> + 8026fb2: ea4f 4c22 mov.w ip, r2, asr #16 + 8026fb6: f9be 7008 ldrsh.w r7, [lr, #8] + 8026fba: 9803 ldr r0, [sp, #12] + 8026fbc: 140d asrs r5, r1, #16 + 8026fbe: f109 39ff add.w r9, r9, #4294967295 + 8026fc2: fb07 000c mla r0, r7, ip, r0 + 8026fc6: 5d40 ldrb r0, [r0, r5] + 8026fc8: 9d04 ldr r5, [sp, #16] + 8026fca: f835 0010 ldrh.w r0, [r5, r0, lsl #1] + 8026fce: f8ba 5000 ldrh.w r5, [sl] + 8026fd2: ea4f 2c20 mov.w ip, r0, asr #8 + 8026fd6: 122f asrs r7, r5, #8 + 8026fd8: ea4f 08e5 mov.w r8, r5, asr #3 + 8026fdc: f00c 0cf8 and.w ip, ip, #248 ; 0xf8 + 8026fe0: f007 07f8 and.w r7, r7, #248 ; 0xf8 + 8026fe4: 00ed lsls r5, r5, #3 + 8026fe6: f008 08fc and.w r8, r8, #252 ; 0xfc + 8026fea: fb17 f706 smulbb r7, r7, r6 + 8026fee: b2ed uxtb r5, r5 + 8026ff0: fb18 f806 smulbb r8, r8, r6 + 8026ff4: fb0c 7c0b mla ip, ip, fp, r7 + 8026ff8: 10c7 asrs r7, r0, #3 + 8026ffa: fb15 f506 smulbb r5, r5, r6 + 8026ffe: 00c0 lsls r0, r0, #3 + 8027000: f007 07fc and.w r7, r7, #252 ; 0xfc + 8027004: fa1f fc8c uxth.w ip, ip + 8027008: b2c0 uxtb r0, r0 + 802700a: fb07 870b mla r7, r7, fp, r8 + 802700e: fb00 500b mla r0, r0, fp, r5 + 8027012: f10c 0501 add.w r5, ip, #1 + 8027016: b2bf uxth r7, r7 + 8027018: b280 uxth r0, r0 + 802701a: eb05 2c1c add.w ip, r5, ip, lsr #8 + 802701e: f107 0801 add.w r8, r7, #1 + 8027022: 1c45 adds r5, r0, #1 + 8027024: eb08 2817 add.w r8, r8, r7, lsr #8 + 8027028: f40c 4c78 and.w ip, ip, #63488 ; 0xf800 + 802702c: eb05 2510 add.w r5, r5, r0, lsr #8 + 8027030: 9813 ldr r0, [sp, #76] ; 0x4c + 8027032: ea4f 1858 mov.w r8, r8, lsr #5 + 8027036: f3c5 25c4 ubfx r5, r5, #11, #5 + 802703a: 4401 add r1, r0 + 802703c: f408 68fc and.w r8, r8, #2016 ; 0x7e0 + 8027040: 9814 ldr r0, [sp, #80] ; 0x50 + 8027042: ea45 0c0c orr.w ip, r5, ip + 8027046: 4402 add r2, r0 + 8027048: ea4c 0c08 orr.w ip, ip, r8 + 802704c: f82a cb02 strh.w ip, [sl], #2 + 8027050: e7ac b.n 8026fac <_ZN8touchgfx8LCD16bpp49TextureMapper_L8_RGB565_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0xa6> + 8027052: f04f 0800 mov.w r8, #0 + 8027056: f8bd a008 ldrh.w sl, [sp, #8] + 802705a: eb03 0008 add.w r0, r3, r8 + 802705e: 2800 cmp r0, #0 + 8027060: dc41 bgt.n 80270e6 <_ZN8touchgfx8LCD16bpp49TextureMapper_L8_RGB565_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1e0> + 8027062: ea23 73e3 bic.w r3, r3, r3, asr #31 + 8027066: eb04 0443 add.w r4, r4, r3, lsl #1 + 802706a: 9b01 ldr r3, [sp, #4] + 802706c: 2b00 cmp r3, #0 + 802706e: f340 8097 ble.w 80271a0 <_ZN8touchgfx8LCD16bpp49TextureMapper_L8_RGB565_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x29a> + 8027072: eeb7 7a00 vmov.f32 s14, #112 ; 0x3f800000 1.0 + 8027076: 9b10 ldr r3, [sp, #64] ; 0x40 + 8027078: ee30 0a04 vadd.f32 s0, s0, s8 + 802707c: ee70 0aa4 vadd.f32 s1, s1, s9 + 8027080: eef0 6a62 vmov.f32 s13, s5 + 8027084: eec7 7a00 vdiv.f32 s15, s14, s0 + 8027088: ee31 1a05 vadd.f32 s2, s2, s10 + 802708c: eefe 6ac8 vcvt.s32.f32 s13, s13, #16 + 8027090: edcd 6a11 vstr s13, [sp, #68] ; 0x44 + 8027094: eef0 6a43 vmov.f32 s13, s6 + 8027098: eefe 6ac8 vcvt.s32.f32 s13, s13, #16 + 802709c: edcd 6a12 vstr s13, [sp, #72] ; 0x48 + 80270a0: ee20 7aa7 vmul.f32 s14, s1, s15 + 80270a4: ee61 7a27 vmul.f32 s15, s2, s15 + 80270a8: ee77 2a62 vsub.f32 s5, s14, s5 + 80270ac: ee37 3ac3 vsub.f32 s6, s15, s6 + 80270b0: eefe 2ac8 vcvt.s32.f32 s5, s5, #16 + 80270b4: eebe 3ac8 vcvt.s32.f32 s6, s6, #16 + 80270b8: ee12 2a90 vmov r2, s5 + 80270bc: eef0 2a47 vmov.f32 s5, s14 + 80270c0: fb92 f3f3 sdiv r3, r2, r3 + 80270c4: ee13 2a10 vmov r2, s6 + 80270c8: 9313 str r3, [sp, #76] ; 0x4c + 80270ca: 9b10 ldr r3, [sp, #64] ; 0x40 + 80270cc: eeb0 3a67 vmov.f32 s6, s15 + 80270d0: fb92 f3f3 sdiv r3, r2, r3 + 80270d4: 9314 str r3, [sp, #80] ; 0x50 + 80270d6: 9b01 ldr r3, [sp, #4] + 80270d8: 9a05 ldr r2, [sp, #20] + 80270da: 3b01 subs r3, #1 + 80270dc: 9301 str r3, [sp, #4] + 80270de: 9b10 ldr r3, [sp, #64] ; 0x40 + 80270e0: bf08 it eq + 80270e2: 4613 moveq r3, r2 + 80270e4: e72c b.n 8026f40 <_ZN8touchgfx8LCD16bpp49TextureMapper_L8_RGB565_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x3a> + 80270e6: 140f asrs r7, r1, #16 + 80270e8: d453 bmi.n 8027192 <_ZN8touchgfx8LCD16bpp49TextureMapper_L8_RGB565_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x28c> + 80270ea: f8de 5008 ldr.w r5, [lr, #8] + 80270ee: 42bd cmp r5, r7 + 80270f0: dd4f ble.n 8027192 <_ZN8touchgfx8LCD16bpp49TextureMapper_L8_RGB565_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x28c> + 80270f2: ea5f 4c22 movs.w ip, r2, asr #16 + 80270f6: d44c bmi.n 8027192 <_ZN8touchgfx8LCD16bpp49TextureMapper_L8_RGB565_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x28c> + 80270f8: f8de 000c ldr.w r0, [lr, #12] + 80270fc: 4560 cmp r0, ip + 80270fe: dd48 ble.n 8027192 <_ZN8touchgfx8LCD16bpp49TextureMapper_L8_RGB565_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x28c> + 8027100: 9803 ldr r0, [sp, #12] + 8027102: b22d sxth r5, r5 + 8027104: fb0c 0505 mla r5, ip, r5, r0 + 8027108: 5de8 ldrb r0, [r5, r7] + 802710a: 9d04 ldr r5, [sp, #16] + 802710c: f835 0010 ldrh.w r0, [r5, r0, lsl #1] + 8027110: f06f 0501 mvn.w r5, #1 + 8027114: fb05 fb08 mul.w fp, r5, r8 + 8027118: ea4f 2c20 mov.w ip, r0, asr #8 + 802711c: f834 500b ldrh.w r5, [r4, fp] + 8027120: f00c 0cf8 and.w ip, ip, #248 ; 0xf8 + 8027124: 122f asrs r7, r5, #8 + 8027126: ea4f 09e5 mov.w r9, r5, asr #3 + 802712a: f007 07f8 and.w r7, r7, #248 ; 0xf8 + 802712e: 00ed lsls r5, r5, #3 + 8027130: f009 09fc and.w r9, r9, #252 ; 0xfc + 8027134: fb17 f706 smulbb r7, r7, r6 + 8027138: b2ed uxtb r5, r5 + 802713a: fb19 f906 smulbb r9, r9, r6 + 802713e: fb0c 7c0a mla ip, ip, sl, r7 + 8027142: 10c7 asrs r7, r0, #3 + 8027144: fb15 f506 smulbb r5, r5, r6 + 8027148: 00c0 lsls r0, r0, #3 + 802714a: f007 07fc and.w r7, r7, #252 ; 0xfc + 802714e: fa1f fc8c uxth.w ip, ip + 8027152: b2c0 uxtb r0, r0 + 8027154: fb07 970a mla r7, r7, sl, r9 + 8027158: fb00 500a mla r0, r0, sl, r5 + 802715c: f10c 0501 add.w r5, ip, #1 + 8027160: b2bf uxth r7, r7 + 8027162: b280 uxth r0, r0 + 8027164: eb05 2c1c add.w ip, r5, ip, lsr #8 + 8027168: f107 0901 add.w r9, r7, #1 + 802716c: 1c45 adds r5, r0, #1 + 802716e: eb09 2917 add.w r9, r9, r7, lsr #8 + 8027172: f40c 4c78 and.w ip, ip, #63488 ; 0xf800 + 8027176: eb05 2510 add.w r5, r5, r0, lsr #8 + 802717a: ea4f 1959 mov.w r9, r9, lsr #5 + 802717e: f3c5 25c4 ubfx r5, r5, #11, #5 + 8027182: f409 69fc and.w r9, r9, #2016 ; 0x7e0 + 8027186: ea45 0c0c orr.w ip, r5, ip + 802718a: ea4c 0c09 orr.w ip, ip, r9 + 802718e: f824 c00b strh.w ip, [r4, fp] + 8027192: 9813 ldr r0, [sp, #76] ; 0x4c + 8027194: f108 38ff add.w r8, r8, #4294967295 + 8027198: 4401 add r1, r0 + 802719a: 9814 ldr r0, [sp, #80] ; 0x50 + 802719c: 4402 add r2, r0 + 802719e: e75c b.n 802705a <_ZN8touchgfx8LCD16bpp49TextureMapper_L8_RGB565_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x154> + 80271a0: b007 add sp, #28 + 80271a2: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + +080271a6 <_ZN8touchgfx8LCD16bpp51TextureMapper_L8_RGB565_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff>: + 80271a6: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 80271aa: b085 sub sp, #20 + 80271ac: 4693 mov fp, r2 + 80271ae: eef7 6a00 vmov.f32 s13, #112 ; 0x3f800000 1.0 + 80271b2: 9e13 ldr r6, [sp, #76] ; 0x4c + 80271b4: 9d16 ldr r5, [sp, #88] ; 0x58 + 80271b6: 6870 ldr r0, [r6, #4] + 80271b8: 9100 str r1, [sp, #0] + 80271ba: e9dd 2414 ldrd r2, r4, [sp, #80] ; 0x50 + 80271be: e9dd ec11 ldrd lr, ip, [sp, #68] ; 0x44 + 80271c2: fb00 2404 mla r4, r0, r4, r2 + 80271c6: 6832 ldr r2, [r6, #0] + 80271c8: eb02 0444 add.w r4, r2, r4, lsl #1 + 80271cc: 682a ldr r2, [r5, #0] + 80271ce: 9201 str r2, [sp, #4] + 80271d0: 686a ldr r2, [r5, #4] + 80271d2: 3204 adds r2, #4 + 80271d4: 9202 str r2, [sp, #8] + 80271d6: 9a00 ldr r2, [sp, #0] + 80271d8: 2a00 cmp r2, #0 + 80271da: dc03 bgt.n 80271e4 <_ZN8touchgfx8LCD16bpp51TextureMapper_L8_RGB565_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x3e> + 80271dc: f1bb 0f00 cmp.w fp, #0 + 80271e0: f340 80a0 ble.w 8027324 <_ZN8touchgfx8LCD16bpp51TextureMapper_L8_RGB565_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x17e> + 80271e4: 9a0f ldr r2, [sp, #60] ; 0x3c + 80271e6: f9b5 9008 ldrsh.w r9, [r5, #8] + 80271ea: f502 4000 add.w r0, r2, #32768 ; 0x8000 + 80271ee: 9a10 ldr r2, [sp, #64] ; 0x40 + 80271f0: f9b5 800c ldrsh.w r8, [r5, #12] + 80271f4: f502 4200 add.w r2, r2, #32768 ; 0x8000 + 80271f8: 2b00 cmp r3, #0 + 80271fa: dd0c ble.n 8027216 <_ZN8touchgfx8LCD16bpp51TextureMapper_L8_RGB565_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x70> + 80271fc: 1406 asrs r6, r0, #16 + 80271fe: d405 bmi.n 802720c <_ZN8touchgfx8LCD16bpp51TextureMapper_L8_RGB565_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x66> + 8027200: 454e cmp r6, r9 + 8027202: da03 bge.n 802720c <_ZN8touchgfx8LCD16bpp51TextureMapper_L8_RGB565_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x66> + 8027204: 1416 asrs r6, r2, #16 + 8027206: d401 bmi.n 802720c <_ZN8touchgfx8LCD16bpp51TextureMapper_L8_RGB565_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x66> + 8027208: 4546 cmp r6, r8 + 802720a: db05 blt.n 8027218 <_ZN8touchgfx8LCD16bpp51TextureMapper_L8_RGB565_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x72> + 802720c: 4470 add r0, lr + 802720e: 4462 add r2, ip + 8027210: 3b01 subs r3, #1 + 8027212: 3402 adds r4, #2 + 8027214: e7f0 b.n 80271f8 <_ZN8touchgfx8LCD16bpp51TextureMapper_L8_RGB565_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x52> + 8027216: d00f beq.n 8027238 <_ZN8touchgfx8LCD16bpp51TextureMapper_L8_RGB565_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x92> + 8027218: 1e5e subs r6, r3, #1 + 802721a: fb0e 0706 mla r7, lr, r6, r0 + 802721e: 143f asrs r7, r7, #16 + 8027220: d541 bpl.n 80272a6 <_ZN8touchgfx8LCD16bpp51TextureMapper_L8_RGB565_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x100> + 8027222: eb04 0643 add.w r6, r4, r3, lsl #1 + 8027226: 4698 mov r8, r3 + 8027228: 9603 str r6, [sp, #12] + 802722a: f1b8 0f00 cmp.w r8, #0 + 802722e: dc59 bgt.n 80272e4 <_ZN8touchgfx8LCD16bpp51TextureMapper_L8_RGB565_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x13e> + 8027230: ea23 73e3 bic.w r3, r3, r3, asr #31 + 8027234: eb04 0443 add.w r4, r4, r3, lsl #1 + 8027238: 9b00 ldr r3, [sp, #0] + 802723a: 2b00 cmp r3, #0 + 802723c: dd72 ble.n 8027324 <_ZN8touchgfx8LCD16bpp51TextureMapper_L8_RGB565_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x17e> + 802723e: ee30 0a04 vadd.f32 s0, s0, s8 + 8027242: 9b0e ldr r3, [sp, #56] ; 0x38 + 8027244: ee70 0aa4 vadd.f32 s1, s1, s9 + 8027248: eeb0 6a62 vmov.f32 s12, s5 + 802724c: eec6 7a80 vdiv.f32 s15, s13, s0 + 8027250: ee31 1a05 vadd.f32 s2, s2, s10 + 8027254: eebe 6ac8 vcvt.s32.f32 s12, s12, #16 + 8027258: ed8d 6a0f vstr s12, [sp, #60] ; 0x3c + 802725c: eeb0 6a43 vmov.f32 s12, s6 + 8027260: eebe 6ac8 vcvt.s32.f32 s12, s12, #16 + 8027264: ed8d 6a10 vstr s12, [sp, #64] ; 0x40 + 8027268: ee20 7aa7 vmul.f32 s14, s1, s15 + 802726c: ee61 7a27 vmul.f32 s15, s2, s15 + 8027270: ee77 2a62 vsub.f32 s5, s14, s5 + 8027274: ee37 3ac3 vsub.f32 s6, s15, s6 + 8027278: eefe 2ac8 vcvt.s32.f32 s5, s5, #16 + 802727c: eebe 3ac8 vcvt.s32.f32 s6, s6, #16 + 8027280: ee12 2a90 vmov r2, s5 + 8027284: eef0 2a47 vmov.f32 s5, s14 + 8027288: fb92 fef3 sdiv lr, r2, r3 + 802728c: ee13 2a10 vmov r2, s6 + 8027290: eeb0 3a67 vmov.f32 s6, s15 + 8027294: fb92 fcf3 sdiv ip, r2, r3 + 8027298: 9b00 ldr r3, [sp, #0] + 802729a: 3b01 subs r3, #1 + 802729c: 9300 str r3, [sp, #0] + 802729e: 9b0e ldr r3, [sp, #56] ; 0x38 + 80272a0: bf08 it eq + 80272a2: 465b moveq r3, fp + 80272a4: e797 b.n 80271d6 <_ZN8touchgfx8LCD16bpp51TextureMapper_L8_RGB565_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x30> + 80272a6: 454f cmp r7, r9 + 80272a8: dabb bge.n 8027222 <_ZN8touchgfx8LCD16bpp51TextureMapper_L8_RGB565_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x7c> + 80272aa: fb0c 2606 mla r6, ip, r6, r2 + 80272ae: 1436 asrs r6, r6, #16 + 80272b0: d4b7 bmi.n 8027222 <_ZN8touchgfx8LCD16bpp51TextureMapper_L8_RGB565_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x7c> + 80272b2: 4546 cmp r6, r8 + 80272b4: dab5 bge.n 8027222 <_ZN8touchgfx8LCD16bpp51TextureMapper_L8_RGB565_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x7c> + 80272b6: 461e mov r6, r3 + 80272b8: 46a0 mov r8, r4 + 80272ba: 2e00 cmp r6, #0 + 80272bc: ddb8 ble.n 8027230 <_ZN8touchgfx8LCD16bpp51TextureMapper_L8_RGB565_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x8a> + 80272be: 1417 asrs r7, r2, #16 + 80272c0: f9b5 a008 ldrsh.w sl, [r5, #8] + 80272c4: 9901 ldr r1, [sp, #4] + 80272c6: ea4f 4920 mov.w r9, r0, asr #16 + 80272ca: 4462 add r2, ip + 80272cc: 4470 add r0, lr + 80272ce: fb0a 1707 mla r7, sl, r7, r1 + 80272d2: 9902 ldr r1, [sp, #8] + 80272d4: 3e01 subs r6, #1 + 80272d6: f817 7009 ldrb.w r7, [r7, r9] + 80272da: f831 7017 ldrh.w r7, [r1, r7, lsl #1] + 80272de: f828 7b02 strh.w r7, [r8], #2 + 80272e2: e7ea b.n 80272ba <_ZN8touchgfx8LCD16bpp51TextureMapper_L8_RGB565_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x114> + 80272e4: ea5f 4920 movs.w r9, r0, asr #16 + 80272e8: d417 bmi.n 802731a <_ZN8touchgfx8LCD16bpp51TextureMapper_L8_RGB565_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x174> + 80272ea: 68ae ldr r6, [r5, #8] + 80272ec: 454e cmp r6, r9 + 80272ee: dd14 ble.n 802731a <_ZN8touchgfx8LCD16bpp51TextureMapper_L8_RGB565_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x174> + 80272f0: ea5f 4a22 movs.w sl, r2, asr #16 + 80272f4: d411 bmi.n 802731a <_ZN8touchgfx8LCD16bpp51TextureMapper_L8_RGB565_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x174> + 80272f6: 68ef ldr r7, [r5, #12] + 80272f8: 4557 cmp r7, sl + 80272fa: dd0e ble.n 802731a <_ZN8touchgfx8LCD16bpp51TextureMapper_L8_RGB565_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x174> + 80272fc: 9f01 ldr r7, [sp, #4] + 80272fe: b236 sxth r6, r6 + 8027300: f06f 0101 mvn.w r1, #1 + 8027304: fb0a 7606 mla r6, sl, r6, r7 + 8027308: 9f02 ldr r7, [sp, #8] + 802730a: f816 6009 ldrb.w r6, [r6, r9] + 802730e: f837 7016 ldrh.w r7, [r7, r6, lsl #1] + 8027312: fb01 f608 mul.w r6, r1, r8 + 8027316: 9903 ldr r1, [sp, #12] + 8027318: 538f strh r7, [r1, r6] + 802731a: 4470 add r0, lr + 802731c: 4462 add r2, ip + 802731e: f108 38ff add.w r8, r8, #4294967295 + 8027322: e782 b.n 802722a <_ZN8touchgfx8LCD16bpp51TextureMapper_L8_RGB565_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x84> + 8027324: b005 add sp, #20 + 8027326: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + +0802732a <_ZN8touchgfx8LCD16bpp49TextureMapper_L8_RGB888_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff>: + 802732a: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 802732e: b087 sub sp, #28 + 8027330: 9c15 ldr r4, [sp, #84] ; 0x54 + 8027332: 9205 str r2, [sp, #20] + 8027334: f89d 2064 ldrb.w r2, [sp, #100] ; 0x64 + 8027338: 9102 str r1, [sp, #8] + 802733a: 9203 str r2, [sp, #12] + 802733c: 6861 ldr r1, [r4, #4] + 802733e: f8dd c060 ldr.w ip, [sp, #96] ; 0x60 + 8027342: e9dd 2016 ldrd r2, r0, [sp, #88] ; 0x58 + 8027346: fb01 2000 mla r0, r1, r0, r2 + 802734a: 6822 ldr r2, [r4, #0] + 802734c: eb02 0240 add.w r2, r2, r0, lsl #1 + 8027350: 9200 str r2, [sp, #0] + 8027352: f8dc 2000 ldr.w r2, [ip] + 8027356: 9204 str r2, [sp, #16] + 8027358: f8dc 2004 ldr.w r2, [ip, #4] + 802735c: 3204 adds r2, #4 + 802735e: 9201 str r2, [sp, #4] + 8027360: 9a03 ldr r2, [sp, #12] + 8027362: 43d5 mvns r5, r2 + 8027364: b2ed uxtb r5, r5 + 8027366: 9a02 ldr r2, [sp, #8] + 8027368: 2a00 cmp r2, #0 + 802736a: dc03 bgt.n 8027374 <_ZN8touchgfx8LCD16bpp49TextureMapper_L8_RGB888_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x4a> + 802736c: 9a05 ldr r2, [sp, #20] + 802736e: 2a00 cmp r2, #0 + 8027370: f340 812c ble.w 80275cc <_ZN8touchgfx8LCD16bpp49TextureMapper_L8_RGB888_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x2a2> + 8027374: 9a11 ldr r2, [sp, #68] ; 0x44 + 8027376: f9bc e008 ldrsh.w lr, [ip, #8] + 802737a: f502 4100 add.w r1, r2, #32768 ; 0x8000 + 802737e: 9a12 ldr r2, [sp, #72] ; 0x48 + 8027380: f9bc 700c ldrsh.w r7, [ip, #12] + 8027384: f502 4200 add.w r2, r2, #32768 ; 0x8000 + 8027388: 2b00 cmp r3, #0 + 802738a: dd10 ble.n 80273ae <_ZN8touchgfx8LCD16bpp49TextureMapper_L8_RGB888_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x84> + 802738c: 140c asrs r4, r1, #16 + 802738e: d405 bmi.n 802739c <_ZN8touchgfx8LCD16bpp49TextureMapper_L8_RGB888_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x72> + 8027390: 4574 cmp r4, lr + 8027392: da03 bge.n 802739c <_ZN8touchgfx8LCD16bpp49TextureMapper_L8_RGB888_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x72> + 8027394: 1414 asrs r4, r2, #16 + 8027396: d401 bmi.n 802739c <_ZN8touchgfx8LCD16bpp49TextureMapper_L8_RGB888_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x72> + 8027398: 42bc cmp r4, r7 + 802739a: db09 blt.n 80273b0 <_ZN8touchgfx8LCD16bpp49TextureMapper_L8_RGB888_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x86> + 802739c: 9c13 ldr r4, [sp, #76] ; 0x4c + 802739e: 3b01 subs r3, #1 + 80273a0: 9800 ldr r0, [sp, #0] + 80273a2: 4421 add r1, r4 + 80273a4: 9c14 ldr r4, [sp, #80] ; 0x50 + 80273a6: 3002 adds r0, #2 + 80273a8: 4422 add r2, r4 + 80273aa: 9000 str r0, [sp, #0] + 80273ac: e7ec b.n 8027388 <_ZN8touchgfx8LCD16bpp49TextureMapper_L8_RGB888_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x5e> + 80273ae: d071 beq.n 8027494 <_ZN8touchgfx8LCD16bpp49TextureMapper_L8_RGB888_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x16a> + 80273b0: 1e5c subs r4, r3, #1 + 80273b2: 9e13 ldr r6, [sp, #76] ; 0x4c + 80273b4: fb06 1604 mla r6, r6, r4, r1 + 80273b8: 1436 asrs r6, r6, #16 + 80273ba: d45d bmi.n 8027478 <_ZN8touchgfx8LCD16bpp49TextureMapper_L8_RGB888_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x14e> + 80273bc: 4576 cmp r6, lr + 80273be: da5b bge.n 8027478 <_ZN8touchgfx8LCD16bpp49TextureMapper_L8_RGB888_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x14e> + 80273c0: 9e14 ldr r6, [sp, #80] ; 0x50 + 80273c2: fb06 2404 mla r4, r6, r4, r2 + 80273c6: 1424 asrs r4, r4, #16 + 80273c8: d456 bmi.n 8027478 <_ZN8touchgfx8LCD16bpp49TextureMapper_L8_RGB888_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x14e> + 80273ca: 42bc cmp r4, r7 + 80273cc: da54 bge.n 8027478 <_ZN8touchgfx8LCD16bpp49TextureMapper_L8_RGB888_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x14e> + 80273ce: 4698 mov r8, r3 + 80273d0: f8dd 9000 ldr.w r9, [sp] + 80273d4: f8bd a00c ldrh.w sl, [sp, #12] + 80273d8: f1b8 0f00 cmp.w r8, #0 + 80273dc: dd54 ble.n 8027488 <_ZN8touchgfx8LCD16bpp49TextureMapper_L8_RGB888_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x15e> + 80273de: f9bc 7008 ldrsh.w r7, [ip, #8] + 80273e2: 1414 asrs r4, r2, #16 + 80273e4: 9804 ldr r0, [sp, #16] + 80273e6: 140e asrs r6, r1, #16 + 80273e8: f108 38ff add.w r8, r8, #4294967295 + 80273ec: fb07 0404 mla r4, r7, r4, r0 + 80273f0: 9801 ldr r0, [sp, #4] + 80273f2: f814 e006 ldrb.w lr, [r4, r6] + 80273f6: f8b9 4000 ldrh.w r4, [r9] + 80273fa: eb0e 0e4e add.w lr, lr, lr, lsl #1 + 80273fe: 1227 asrs r7, r4, #8 + 8027400: eb00 0b0e add.w fp, r0, lr + 8027404: f810 e00e ldrb.w lr, [r0, lr] + 8027408: f007 07f8 and.w r7, r7, #248 ; 0xf8 + 802740c: 9813 ldr r0, [sp, #76] ; 0x4c + 802740e: f89b 6002 ldrb.w r6, [fp, #2] + 8027412: f89b b001 ldrb.w fp, [fp, #1] + 8027416: 4401 add r1, r0 + 8027418: fb16 f60a smulbb r6, r6, sl + 802741c: 9814 ldr r0, [sp, #80] ; 0x50 + 802741e: fb1b fb0a smulbb fp, fp, sl + 8027422: fb07 6705 mla r7, r7, r5, r6 + 8027426: 10e6 asrs r6, r4, #3 + 8027428: 00e4 lsls r4, r4, #3 + 802742a: 4402 add r2, r0 + 802742c: f006 06fc and.w r6, r6, #252 ; 0xfc + 8027430: b2bf uxth r7, r7 + 8027432: b2e4 uxtb r4, r4 + 8027434: fb06 b605 mla r6, r6, r5, fp + 8027438: fb14 f405 smulbb r4, r4, r5 + 802743c: b2b6 uxth r6, r6 + 802743e: fb0e 4e0a mla lr, lr, sl, r4 + 8027442: 1c7c adds r4, r7, #1 + 8027444: f106 0b01 add.w fp, r6, #1 + 8027448: fa1f fe8e uxth.w lr, lr + 802744c: eb04 2717 add.w r7, r4, r7, lsr #8 + 8027450: f10e 0401 add.w r4, lr, #1 + 8027454: eb0b 2b16 add.w fp, fp, r6, lsr #8 + 8027458: f407 4778 and.w r7, r7, #63488 ; 0xf800 + 802745c: eb04 241e add.w r4, r4, lr, lsr #8 + 8027460: ea4f 1b5b mov.w fp, fp, lsr #5 + 8027464: f3c4 24c4 ubfx r4, r4, #11, #5 + 8027468: f40b 6bfc and.w fp, fp, #2016 ; 0x7e0 + 802746c: 4327 orrs r7, r4 + 802746e: ea47 070b orr.w r7, r7, fp + 8027472: f829 7b02 strh.w r7, [r9], #2 + 8027476: e7af b.n 80273d8 <_ZN8touchgfx8LCD16bpp49TextureMapper_L8_RGB888_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0xae> + 8027478: f04f 0e00 mov.w lr, #0 + 802747c: f8bd 900c ldrh.w r9, [sp, #12] + 8027480: eb03 040e add.w r4, r3, lr + 8027484: 2c00 cmp r4, #0 + 8027486: dc43 bgt.n 8027510 <_ZN8touchgfx8LCD16bpp49TextureMapper_L8_RGB888_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1e6> + 8027488: 9a00 ldr r2, [sp, #0] + 802748a: ea23 73e3 bic.w r3, r3, r3, asr #31 + 802748e: eb02 0343 add.w r3, r2, r3, lsl #1 + 8027492: 9300 str r3, [sp, #0] + 8027494: 9b02 ldr r3, [sp, #8] + 8027496: 2b00 cmp r3, #0 + 8027498: f340 8098 ble.w 80275cc <_ZN8touchgfx8LCD16bpp49TextureMapper_L8_RGB888_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x2a2> + 802749c: eeb7 7a00 vmov.f32 s14, #112 ; 0x3f800000 1.0 + 80274a0: 9b10 ldr r3, [sp, #64] ; 0x40 + 80274a2: ee30 0a04 vadd.f32 s0, s0, s8 + 80274a6: ee70 0aa4 vadd.f32 s1, s1, s9 + 80274aa: eef0 6a62 vmov.f32 s13, s5 + 80274ae: eec7 7a00 vdiv.f32 s15, s14, s0 + 80274b2: ee31 1a05 vadd.f32 s2, s2, s10 + 80274b6: eefe 6ac8 vcvt.s32.f32 s13, s13, #16 + 80274ba: edcd 6a11 vstr s13, [sp, #68] ; 0x44 + 80274be: eef0 6a43 vmov.f32 s13, s6 + 80274c2: eefe 6ac8 vcvt.s32.f32 s13, s13, #16 + 80274c6: edcd 6a12 vstr s13, [sp, #72] ; 0x48 + 80274ca: ee20 7aa7 vmul.f32 s14, s1, s15 + 80274ce: ee61 7a27 vmul.f32 s15, s2, s15 + 80274d2: ee77 2a62 vsub.f32 s5, s14, s5 + 80274d6: ee37 3ac3 vsub.f32 s6, s15, s6 + 80274da: eefe 2ac8 vcvt.s32.f32 s5, s5, #16 + 80274de: eebe 3ac8 vcvt.s32.f32 s6, s6, #16 + 80274e2: ee12 2a90 vmov r2, s5 + 80274e6: eef0 2a47 vmov.f32 s5, s14 + 80274ea: fb92 f3f3 sdiv r3, r2, r3 + 80274ee: ee13 2a10 vmov r2, s6 + 80274f2: 9313 str r3, [sp, #76] ; 0x4c + 80274f4: 9b10 ldr r3, [sp, #64] ; 0x40 + 80274f6: eeb0 3a67 vmov.f32 s6, s15 + 80274fa: fb92 f3f3 sdiv r3, r2, r3 + 80274fe: 9314 str r3, [sp, #80] ; 0x50 + 8027500: 9b02 ldr r3, [sp, #8] + 8027502: 9a05 ldr r2, [sp, #20] + 8027504: 3b01 subs r3, #1 + 8027506: 9302 str r3, [sp, #8] + 8027508: 9b10 ldr r3, [sp, #64] ; 0x40 + 802750a: bf08 it eq + 802750c: 4613 moveq r3, r2 + 802750e: e72a b.n 8027366 <_ZN8touchgfx8LCD16bpp49TextureMapper_L8_RGB888_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x3c> + 8027510: 140f asrs r7, r1, #16 + 8027512: d454 bmi.n 80275be <_ZN8touchgfx8LCD16bpp49TextureMapper_L8_RGB888_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x294> + 8027514: f8dc 6008 ldr.w r6, [ip, #8] + 8027518: 42be cmp r6, r7 + 802751a: dd50 ble.n 80275be <_ZN8touchgfx8LCD16bpp49TextureMapper_L8_RGB888_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x294> + 802751c: ea5f 4822 movs.w r8, r2, asr #16 + 8027520: d44d bmi.n 80275be <_ZN8touchgfx8LCD16bpp49TextureMapper_L8_RGB888_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x294> + 8027522: f8dc 400c ldr.w r4, [ip, #12] + 8027526: 4544 cmp r4, r8 + 8027528: dd49 ble.n 80275be <_ZN8touchgfx8LCD16bpp49TextureMapper_L8_RGB888_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x294> + 802752a: 9c04 ldr r4, [sp, #16] + 802752c: b236 sxth r6, r6 + 802752e: f06f 0001 mvn.w r0, #1 + 8027532: fb08 4606 mla r6, r8, r6, r4 + 8027536: 9c01 ldr r4, [sp, #4] + 8027538: fb00 fa0e mul.w sl, r0, lr + 802753c: 9800 ldr r0, [sp, #0] + 802753e: f816 8007 ldrb.w r8, [r6, r7] + 8027542: eb08 0848 add.w r8, r8, r8, lsl #1 + 8027546: eb04 0b08 add.w fp, r4, r8 + 802754a: f830 400a ldrh.w r4, [r0, sl] + 802754e: 9801 ldr r0, [sp, #4] + 8027550: f89b 6002 ldrb.w r6, [fp, #2] + 8027554: 1227 asrs r7, r4, #8 + 8027556: f89b b001 ldrb.w fp, [fp, #1] + 802755a: fb16 f609 smulbb r6, r6, r9 + 802755e: f007 07f8 and.w r7, r7, #248 ; 0xf8 + 8027562: f810 8008 ldrb.w r8, [r0, r8] + 8027566: fb1b fb09 smulbb fp, fp, r9 + 802756a: fb07 6705 mla r7, r7, r5, r6 + 802756e: 10e6 asrs r6, r4, #3 + 8027570: 00e4 lsls r4, r4, #3 + 8027572: 9800 ldr r0, [sp, #0] + 8027574: f006 06fc and.w r6, r6, #252 ; 0xfc + 8027578: b2bf uxth r7, r7 + 802757a: b2e4 uxtb r4, r4 + 802757c: fb06 b605 mla r6, r6, r5, fp + 8027580: fb14 f405 smulbb r4, r4, r5 + 8027584: b2b6 uxth r6, r6 + 8027586: fb08 4809 mla r8, r8, r9, r4 + 802758a: 1c7c adds r4, r7, #1 + 802758c: f106 0b01 add.w fp, r6, #1 + 8027590: fa1f f888 uxth.w r8, r8 + 8027594: eb04 2717 add.w r7, r4, r7, lsr #8 + 8027598: f108 0401 add.w r4, r8, #1 + 802759c: eb0b 2b16 add.w fp, fp, r6, lsr #8 + 80275a0: f407 4778 and.w r7, r7, #63488 ; 0xf800 + 80275a4: eb04 2418 add.w r4, r4, r8, lsr #8 + 80275a8: ea4f 1b5b mov.w fp, fp, lsr #5 + 80275ac: f3c4 24c4 ubfx r4, r4, #11, #5 + 80275b0: f40b 6bfc and.w fp, fp, #2016 ; 0x7e0 + 80275b4: 4327 orrs r7, r4 + 80275b6: ea47 070b orr.w r7, r7, fp + 80275ba: f820 700a strh.w r7, [r0, sl] + 80275be: 9813 ldr r0, [sp, #76] ; 0x4c + 80275c0: f10e 3eff add.w lr, lr, #4294967295 + 80275c4: 4401 add r1, r0 + 80275c6: 9814 ldr r0, [sp, #80] ; 0x50 + 80275c8: 4402 add r2, r0 + 80275ca: e759 b.n 8027480 <_ZN8touchgfx8LCD16bpp49TextureMapper_L8_RGB888_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x156> + 80275cc: b007 add sp, #28 + 80275ce: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + ... + +080275d4 <_ZN8touchgfx8LCD16bpp51TextureMapper_L8_RGB888_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff>: + 80275d4: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 80275d8: b085 sub sp, #20 + 80275da: eef7 6a00 vmov.f32 s13, #112 ; 0x3f800000 1.0 + 80275de: 9e13 ldr r6, [sp, #76] ; 0x4c + 80275e0: 9d16 ldr r5, [sp, #88] ; 0x58 + 80275e2: 9203 str r2, [sp, #12] + 80275e4: 6870 ldr r0, [r6, #4] + 80275e6: 686f ldr r7, [r5, #4] + 80275e8: f8dd c044 ldr.w ip, [sp, #68] ; 0x44 + 80275ec: 3704 adds r7, #4 + 80275ee: 9101 str r1, [sp, #4] + 80275f0: e9dd 2414 ldrd r2, r4, [sp, #80] ; 0x50 + 80275f4: fb00 2404 mla r4, r0, r4, r2 + 80275f8: 6832 ldr r2, [r6, #0] + 80275fa: eb02 0444 add.w r4, r2, r4, lsl #1 + 80275fe: 682a ldr r2, [r5, #0] + 8027600: 9202 str r2, [sp, #8] + 8027602: 9a01 ldr r2, [sp, #4] + 8027604: 2a00 cmp r2, #0 + 8027606: dc03 bgt.n 8027610 <_ZN8touchgfx8LCD16bpp51TextureMapper_L8_RGB888_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x3c> + 8027608: 9a03 ldr r2, [sp, #12] + 802760a: 2a00 cmp r2, #0 + 802760c: f340 80cc ble.w 80277a8 <_ZN8touchgfx8LCD16bpp51TextureMapper_L8_RGB888_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1d4> + 8027610: 9a0f ldr r2, [sp, #60] ; 0x3c + 8027612: f9b5 9008 ldrsh.w r9, [r5, #8] + 8027616: f502 4000 add.w r0, r2, #32768 ; 0x8000 + 802761a: 9a10 ldr r2, [sp, #64] ; 0x40 + 802761c: f9b5 800c ldrsh.w r8, [r5, #12] + 8027620: f502 4200 add.w r2, r2, #32768 ; 0x8000 + 8027624: 2b00 cmp r3, #0 + 8027626: dd0d ble.n 8027644 <_ZN8touchgfx8LCD16bpp51TextureMapper_L8_RGB888_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x70> + 8027628: 1406 asrs r6, r0, #16 + 802762a: d405 bmi.n 8027638 <_ZN8touchgfx8LCD16bpp51TextureMapper_L8_RGB888_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x64> + 802762c: 454e cmp r6, r9 + 802762e: da03 bge.n 8027638 <_ZN8touchgfx8LCD16bpp51TextureMapper_L8_RGB888_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x64> + 8027630: 1416 asrs r6, r2, #16 + 8027632: d401 bmi.n 8027638 <_ZN8touchgfx8LCD16bpp51TextureMapper_L8_RGB888_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x64> + 8027634: 4546 cmp r6, r8 + 8027636: db06 blt.n 8027646 <_ZN8touchgfx8LCD16bpp51TextureMapper_L8_RGB888_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x72> + 8027638: 9e12 ldr r6, [sp, #72] ; 0x48 + 802763a: 4460 add r0, ip + 802763c: 3b01 subs r3, #1 + 802763e: 3402 adds r4, #2 + 8027640: 4432 add r2, r6 + 8027642: e7ef b.n 8027624 <_ZN8touchgfx8LCD16bpp51TextureMapper_L8_RGB888_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x50> + 8027644: d00f beq.n 8027666 <_ZN8touchgfx8LCD16bpp51TextureMapper_L8_RGB888_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x92> + 8027646: 1e5e subs r6, r3, #1 + 8027648: fb0c 0e06 mla lr, ip, r6, r0 + 802764c: ea5f 4e2e movs.w lr, lr, asr #16 + 8027650: d543 bpl.n 80276da <_ZN8touchgfx8LCD16bpp51TextureMapper_L8_RGB888_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x106> + 8027652: 4698 mov r8, r3 + 8027654: eb04 0a43 add.w sl, r4, r3, lsl #1 + 8027658: f1b8 0f00 cmp.w r8, #0 + 802765c: dc71 bgt.n 8027742 <_ZN8touchgfx8LCD16bpp51TextureMapper_L8_RGB888_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x16e> + 802765e: ea23 73e3 bic.w r3, r3, r3, asr #31 + 8027662: eb04 0443 add.w r4, r4, r3, lsl #1 + 8027666: 9b01 ldr r3, [sp, #4] + 8027668: 2b00 cmp r3, #0 + 802766a: f340 809d ble.w 80277a8 <_ZN8touchgfx8LCD16bpp51TextureMapper_L8_RGB888_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1d4> + 802766e: ee30 0a04 vadd.f32 s0, s0, s8 + 8027672: 9b0e ldr r3, [sp, #56] ; 0x38 + 8027674: ee70 0aa4 vadd.f32 s1, s1, s9 + 8027678: eeb0 6a62 vmov.f32 s12, s5 + 802767c: eec6 7a80 vdiv.f32 s15, s13, s0 + 8027680: ee31 1a05 vadd.f32 s2, s2, s10 + 8027684: eebe 6ac8 vcvt.s32.f32 s12, s12, #16 + 8027688: ed8d 6a0f vstr s12, [sp, #60] ; 0x3c + 802768c: eeb0 6a43 vmov.f32 s12, s6 + 8027690: eebe 6ac8 vcvt.s32.f32 s12, s12, #16 + 8027694: ed8d 6a10 vstr s12, [sp, #64] ; 0x40 + 8027698: ee20 7aa7 vmul.f32 s14, s1, s15 + 802769c: ee61 7a27 vmul.f32 s15, s2, s15 + 80276a0: ee77 2a62 vsub.f32 s5, s14, s5 + 80276a4: ee37 3ac3 vsub.f32 s6, s15, s6 + 80276a8: eefe 2ac8 vcvt.s32.f32 s5, s5, #16 + 80276ac: eebe 3ac8 vcvt.s32.f32 s6, s6, #16 + 80276b0: ee12 2a90 vmov r2, s5 + 80276b4: eef0 2a47 vmov.f32 s5, s14 + 80276b8: fb92 fcf3 sdiv ip, r2, r3 + 80276bc: ee13 2a10 vmov r2, s6 + 80276c0: eeb0 3a67 vmov.f32 s6, s15 + 80276c4: fb92 f3f3 sdiv r3, r2, r3 + 80276c8: 9312 str r3, [sp, #72] ; 0x48 + 80276ca: 9b01 ldr r3, [sp, #4] + 80276cc: 9a03 ldr r2, [sp, #12] + 80276ce: 3b01 subs r3, #1 + 80276d0: 9301 str r3, [sp, #4] + 80276d2: 9b0e ldr r3, [sp, #56] ; 0x38 + 80276d4: bf08 it eq + 80276d6: 4613 moveq r3, r2 + 80276d8: e793 b.n 8027602 <_ZN8touchgfx8LCD16bpp51TextureMapper_L8_RGB888_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x2e> + 80276da: 45ce cmp lr, r9 + 80276dc: dab9 bge.n 8027652 <_ZN8touchgfx8LCD16bpp51TextureMapper_L8_RGB888_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x7e> + 80276de: 9912 ldr r1, [sp, #72] ; 0x48 + 80276e0: fb01 2606 mla r6, r1, r6, r2 + 80276e4: 1436 asrs r6, r6, #16 + 80276e6: d4b4 bmi.n 8027652 <_ZN8touchgfx8LCD16bpp51TextureMapper_L8_RGB888_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x7e> + 80276e8: 4546 cmp r6, r8 + 80276ea: dab2 bge.n 8027652 <_ZN8touchgfx8LCD16bpp51TextureMapper_L8_RGB888_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x7e> + 80276ec: 4698 mov r8, r3 + 80276ee: 46a2 mov sl, r4 + 80276f0: f1b8 0f00 cmp.w r8, #0 + 80276f4: ddb3 ble.n 802765e <_ZN8touchgfx8LCD16bpp51TextureMapper_L8_RGB888_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x8a> + 80276f6: f9b5 9008 ldrsh.w r9, [r5, #8] + 80276fa: 1416 asrs r6, r2, #16 + 80276fc: 9902 ldr r1, [sp, #8] + 80276fe: ea4f 4e20 mov.w lr, r0, asr #16 + 8027702: f108 38ff add.w r8, r8, #4294967295 + 8027706: 4460 add r0, ip + 8027708: fb09 1606 mla r6, r9, r6, r1 + 802770c: 4928 ldr r1, [pc, #160] ; (80277b0 <_ZN8touchgfx8LCD16bpp51TextureMapper_L8_RGB888_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1dc>) + 802770e: f816 e00e ldrb.w lr, [r6, lr] + 8027712: eb0e 0e4e add.w lr, lr, lr, lsl #1 + 8027716: eb07 0b0e add.w fp, r7, lr + 802771a: f89b 6001 ldrb.w r6, [fp, #1] + 802771e: f89b 9002 ldrb.w r9, [fp, #2] + 8027722: 00f6 lsls r6, r6, #3 + 8027724: ea01 2909 and.w r9, r1, r9, lsl #8 + 8027728: 9912 ldr r1, [sp, #72] ; 0x48 + 802772a: f406 66fc and.w r6, r6, #2016 ; 0x7e0 + 802772e: 440a add r2, r1 + 8027730: ea49 0606 orr.w r6, r9, r6 + 8027734: f817 900e ldrb.w r9, [r7, lr] + 8027738: ea46 06d9 orr.w r6, r6, r9, lsr #3 + 802773c: f82a 6b02 strh.w r6, [sl], #2 + 8027740: e7d6 b.n 80276f0 <_ZN8touchgfx8LCD16bpp51TextureMapper_L8_RGB888_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x11c> + 8027742: ea5f 4920 movs.w r9, r0, asr #16 + 8027746: d429 bmi.n 802779c <_ZN8touchgfx8LCD16bpp51TextureMapper_L8_RGB888_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1c8> + 8027748: 68ae ldr r6, [r5, #8] + 802774a: 454e cmp r6, r9 + 802774c: dd26 ble.n 802779c <_ZN8touchgfx8LCD16bpp51TextureMapper_L8_RGB888_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1c8> + 802774e: ea5f 4b22 movs.w fp, r2, asr #16 + 8027752: d423 bmi.n 802779c <_ZN8touchgfx8LCD16bpp51TextureMapper_L8_RGB888_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1c8> + 8027754: 68e9 ldr r1, [r5, #12] + 8027756: 4559 cmp r1, fp + 8027758: dd20 ble.n 802779c <_ZN8touchgfx8LCD16bpp51TextureMapper_L8_RGB888_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1c8> + 802775a: fa0f fe86 sxth.w lr, r6 + 802775e: 9902 ldr r1, [sp, #8] + 8027760: fb0b 1e0e mla lr, fp, lr, r1 + 8027764: f06f 0101 mvn.w r1, #1 + 8027768: f81e e009 ldrb.w lr, [lr, r9] + 802776c: fb01 f908 mul.w r9, r1, r8 + 8027770: f2a1 71fe subw r1, r1, #2046 ; 0x7fe + 8027774: eb0e 0e4e add.w lr, lr, lr, lsl #1 + 8027778: eb07 060e add.w r6, r7, lr + 802777c: f896 b002 ldrb.w fp, [r6, #2] + 8027780: 7876 ldrb r6, [r6, #1] + 8027782: ea01 2b0b and.w fp, r1, fp, lsl #8 + 8027786: 00f6 lsls r6, r6, #3 + 8027788: f406 66fc and.w r6, r6, #2016 ; 0x7e0 + 802778c: ea4b 0606 orr.w r6, fp, r6 + 8027790: f817 b00e ldrb.w fp, [r7, lr] + 8027794: ea46 06db orr.w r6, r6, fp, lsr #3 + 8027798: f82a 6009 strh.w r6, [sl, r9] + 802779c: 9912 ldr r1, [sp, #72] ; 0x48 + 802779e: 4460 add r0, ip + 80277a0: f108 38ff add.w r8, r8, #4294967295 + 80277a4: 440a add r2, r1 + 80277a6: e757 b.n 8027658 <_ZN8touchgfx8LCD16bpp51TextureMapper_L8_RGB888_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x84> + 80277a8: b005 add sp, #20 + 80277aa: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 80277ae: bf00 nop + 80277b0: fffff800 .word 0xfffff800 + +080277b4 <_ZN8touchgfx8LCD16bpp54TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff>: + 80277b4: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 80277b8: b087 sub sp, #28 + 80277ba: 468b mov fp, r1 + 80277bc: eef7 6a00 vmov.f32 s13, #112 ; 0x3f800000 1.0 + 80277c0: 9815 ldr r0, [sp, #84] ; 0x54 + 80277c2: 9204 str r2, [sp, #16] + 80277c4: f89d 2064 ldrb.w r2, [sp, #100] ; 0x64 + 80277c8: 6841 ldr r1, [r0, #4] + 80277ca: 9205 str r2, [sp, #20] + 80277cc: f8dd c060 ldr.w ip, [sp, #96] ; 0x60 + 80277d0: e9dd 2416 ldrd r2, r4, [sp, #88] ; 0x58 + 80277d4: fb01 2404 mla r4, r1, r4, r2 + 80277d8: 6802 ldr r2, [r0, #0] + 80277da: eb02 0444 add.w r4, r2, r4, lsl #1 + 80277de: f8dc 2000 ldr.w r2, [ip] + 80277e2: 9201 str r2, [sp, #4] + 80277e4: f8dc 2004 ldr.w r2, [ip, #4] + 80277e8: 3204 adds r2, #4 + 80277ea: 9202 str r2, [sp, #8] + 80277ec: f1bb 0f00 cmp.w fp, #0 + 80277f0: dc03 bgt.n 80277fa <_ZN8touchgfx8LCD16bpp54TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x46> + 80277f2: 9a04 ldr r2, [sp, #16] + 80277f4: 2a00 cmp r2, #0 + 80277f6: f340 8138 ble.w 8027a6a <_ZN8touchgfx8LCD16bpp54TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x2b6> + 80277fa: 9a11 ldr r2, [sp, #68] ; 0x44 + 80277fc: f9bc 7008 ldrsh.w r7, [ip, #8] + 8027800: f502 4000 add.w r0, r2, #32768 ; 0x8000 + 8027804: 9a12 ldr r2, [sp, #72] ; 0x48 + 8027806: f9bc 600c ldrsh.w r6, [ip, #12] + 802780a: f502 4100 add.w r1, r2, #32768 ; 0x8000 + 802780e: 2b00 cmp r3, #0 + 8027810: dd0e ble.n 8027830 <_ZN8touchgfx8LCD16bpp54TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x7c> + 8027812: 1402 asrs r2, r0, #16 + 8027814: d405 bmi.n 8027822 <_ZN8touchgfx8LCD16bpp54TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x6e> + 8027816: 42ba cmp r2, r7 + 8027818: da03 bge.n 8027822 <_ZN8touchgfx8LCD16bpp54TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x6e> + 802781a: 140a asrs r2, r1, #16 + 802781c: d401 bmi.n 8027822 <_ZN8touchgfx8LCD16bpp54TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x6e> + 802781e: 42b2 cmp r2, r6 + 8027820: db07 blt.n 8027832 <_ZN8touchgfx8LCD16bpp54TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x7e> + 8027822: 9a13 ldr r2, [sp, #76] ; 0x4c + 8027824: 3b01 subs r3, #1 + 8027826: 3402 adds r4, #2 + 8027828: 4410 add r0, r2 + 802782a: 9a14 ldr r2, [sp, #80] ; 0x50 + 802782c: 4411 add r1, r2 + 802782e: e7ee b.n 802780e <_ZN8touchgfx8LCD16bpp54TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x5a> + 8027830: d019 beq.n 8027866 <_ZN8touchgfx8LCD16bpp54TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0xb2> + 8027832: 1e5a subs r2, r3, #1 + 8027834: 9d13 ldr r5, [sp, #76] ; 0x4c + 8027836: fb05 0502 mla r5, r5, r2, r0 + 802783a: 142d asrs r5, r5, #16 + 802783c: d409 bmi.n 8027852 <_ZN8touchgfx8LCD16bpp54TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x9e> + 802783e: 42bd cmp r5, r7 + 8027840: da07 bge.n 8027852 <_ZN8touchgfx8LCD16bpp54TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x9e> + 8027842: 9d14 ldr r5, [sp, #80] ; 0x50 + 8027844: fb05 1202 mla r2, r5, r2, r1 + 8027848: 1412 asrs r2, r2, #16 + 802784a: d402 bmi.n 8027852 <_ZN8touchgfx8LCD16bpp54TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x9e> + 802784c: 42b2 cmp r2, r6 + 802784e: f2c0 80ac blt.w 80279aa <_ZN8touchgfx8LCD16bpp54TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1f6> + 8027852: f04f 0e00 mov.w lr, #0 + 8027856: eb03 020e add.w r2, r3, lr + 802785a: 2a00 cmp r2, #0 + 802785c: dc3e bgt.n 80278dc <_ZN8touchgfx8LCD16bpp54TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x128> + 802785e: ea23 73e3 bic.w r3, r3, r3, asr #31 + 8027862: eb04 0443 add.w r4, r4, r3, lsl #1 + 8027866: f1bb 0f00 cmp.w fp, #0 + 802786a: f340 80fe ble.w 8027a6a <_ZN8touchgfx8LCD16bpp54TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x2b6> + 802786e: ee30 0a04 vadd.f32 s0, s0, s8 + 8027872: 9b10 ldr r3, [sp, #64] ; 0x40 + 8027874: ee70 0aa4 vadd.f32 s1, s1, s9 + 8027878: f1bb 0b01 subs.w fp, fp, #1 + 802787c: eeb0 6a62 vmov.f32 s12, s5 + 8027880: eec6 7a80 vdiv.f32 s15, s13, s0 + 8027884: ee31 1a05 vadd.f32 s2, s2, s10 + 8027888: eebe 6ac8 vcvt.s32.f32 s12, s12, #16 + 802788c: ed8d 6a11 vstr s12, [sp, #68] ; 0x44 + 8027890: eeb0 6a43 vmov.f32 s12, s6 + 8027894: eebe 6ac8 vcvt.s32.f32 s12, s12, #16 + 8027898: ed8d 6a12 vstr s12, [sp, #72] ; 0x48 + 802789c: ee20 7aa7 vmul.f32 s14, s1, s15 + 80278a0: ee61 7a27 vmul.f32 s15, s2, s15 + 80278a4: ee77 2a62 vsub.f32 s5, s14, s5 + 80278a8: ee37 3ac3 vsub.f32 s6, s15, s6 + 80278ac: eefe 2ac8 vcvt.s32.f32 s5, s5, #16 + 80278b0: eebe 3ac8 vcvt.s32.f32 s6, s6, #16 + 80278b4: ee12 2a90 vmov r2, s5 + 80278b8: eef0 2a47 vmov.f32 s5, s14 + 80278bc: fb92 f3f3 sdiv r3, r2, r3 + 80278c0: ee13 2a10 vmov r2, s6 + 80278c4: 9313 str r3, [sp, #76] ; 0x4c + 80278c6: 9b10 ldr r3, [sp, #64] ; 0x40 + 80278c8: eeb0 3a67 vmov.f32 s6, s15 + 80278cc: fb92 f3f3 sdiv r3, r2, r3 + 80278d0: 9a04 ldr r2, [sp, #16] + 80278d2: 9314 str r3, [sp, #80] ; 0x50 + 80278d4: 9b10 ldr r3, [sp, #64] ; 0x40 + 80278d6: bf08 it eq + 80278d8: 4613 moveq r3, r2 + 80278da: e787 b.n 80277ec <_ZN8touchgfx8LCD16bpp54TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x38> + 80278dc: 1406 asrs r6, r0, #16 + 80278de: d45d bmi.n 802799c <_ZN8touchgfx8LCD16bpp54TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1e8> + 80278e0: f8dc 5008 ldr.w r5, [ip, #8] + 80278e4: 42b5 cmp r5, r6 + 80278e6: dd59 ble.n 802799c <_ZN8touchgfx8LCD16bpp54TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1e8> + 80278e8: 140f asrs r7, r1, #16 + 80278ea: d457 bmi.n 802799c <_ZN8touchgfx8LCD16bpp54TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1e8> + 80278ec: f8dc 200c ldr.w r2, [ip, #12] + 80278f0: 42ba cmp r2, r7 + 80278f2: dd53 ble.n 802799c <_ZN8touchgfx8LCD16bpp54TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1e8> + 80278f4: 9a01 ldr r2, [sp, #4] + 80278f6: b22d sxth r5, r5 + 80278f8: fb07 2505 mla r5, r7, r5, r2 + 80278fc: 5daa ldrb r2, [r5, r6] + 80278fe: 9d02 ldr r5, [sp, #8] + 8027900: f855 5022 ldr.w r5, [r5, r2, lsl #2] + 8027904: 0e2e lsrs r6, r5, #24 + 8027906: d049 beq.n 802799c <_ZN8touchgfx8LCD16bpp54TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1e8> + 8027908: f06f 0201 mvn.w r2, #1 + 802790c: f3c5 2a07 ubfx sl, r5, #8, #8 + 8027910: fb02 f20e mul.w r2, r2, lr + 8027914: f834 8002 ldrh.w r8, [r4, r2] + 8027918: 9203 str r2, [sp, #12] + 802791a: 9a05 ldr r2, [sp, #20] + 802791c: ea4f 2728 mov.w r7, r8, asr #8 + 8027920: 4356 muls r6, r2 + 8027922: f007 07f8 and.w r7, r7, #248 ; 0xf8 + 8027926: 1c72 adds r2, r6, #1 + 8027928: eb02 2226 add.w r2, r2, r6, asr #8 + 802792c: f3c5 4607 ubfx r6, r5, #16, #8 + 8027930: b2ed uxtb r5, r5 + 8027932: 1212 asrs r2, r2, #8 + 8027934: fa1f f982 uxth.w r9, r2 + 8027938: 43d2 mvns r2, r2 + 802793a: fb16 f609 smulbb r6, r6, r9 + 802793e: b2d2 uxtb r2, r2 + 8027940: fb15 f509 smulbb r5, r5, r9 + 8027944: fb07 6702 mla r7, r7, r2, r6 + 8027948: ea4f 06e8 mov.w r6, r8, asr #3 + 802794c: fb1a fa09 smulbb sl, sl, r9 + 8027950: ea4f 08c8 mov.w r8, r8, lsl #3 + 8027954: b2bf uxth r7, r7 + 8027956: f006 06fc and.w r6, r6, #252 ; 0xfc + 802795a: fa5f f888 uxtb.w r8, r8 + 802795e: fb06 a602 mla r6, r6, r2, sl + 8027962: fb08 5502 mla r5, r8, r2, r5 + 8027966: 1c7a adds r2, r7, #1 + 8027968: b2b6 uxth r6, r6 + 802796a: b2ad uxth r5, r5 + 802796c: eb02 2717 add.w r7, r2, r7, lsr #8 + 8027970: 9a03 ldr r2, [sp, #12] + 8027972: f105 0a01 add.w sl, r5, #1 + 8027976: f407 4778 and.w r7, r7, #63488 ; 0xf800 + 802797a: eb0a 2a15 add.w sl, sl, r5, lsr #8 + 802797e: f3ca 2ac4 ubfx sl, sl, #11, #5 + 8027982: ea4a 0707 orr.w r7, sl, r7 + 8027986: f106 0a01 add.w sl, r6, #1 + 802798a: eb0a 2a16 add.w sl, sl, r6, lsr #8 + 802798e: ea4f 1a5a mov.w sl, sl, lsr #5 + 8027992: f40a 6afc and.w sl, sl, #2016 ; 0x7e0 + 8027996: ea47 070a orr.w r7, r7, sl + 802799a: 52a7 strh r7, [r4, r2] + 802799c: 9a13 ldr r2, [sp, #76] ; 0x4c + 802799e: f10e 3eff add.w lr, lr, #4294967295 + 80279a2: 4410 add r0, r2 + 80279a4: 9a14 ldr r2, [sp, #80] ; 0x50 + 80279a6: 4411 add r1, r2 + 80279a8: e755 b.n 8027856 <_ZN8touchgfx8LCD16bpp54TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0xa2> + 80279aa: f04f 0800 mov.w r8, #0 + 80279ae: eba3 0208 sub.w r2, r3, r8 + 80279b2: 2a00 cmp r2, #0 + 80279b4: f77f af53 ble.w 802785e <_ZN8touchgfx8LCD16bpp54TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0xaa> + 80279b8: f9bc 6008 ldrsh.w r6, [ip, #8] + 80279bc: 140a asrs r2, r1, #16 + 80279be: 9f01 ldr r7, [sp, #4] + 80279c0: 1405 asrs r5, r0, #16 + 80279c2: fb06 7202 mla r2, r6, r2, r7 + 80279c6: 5d52 ldrb r2, [r2, r5] + 80279c8: 9d02 ldr r5, [sp, #8] + 80279ca: f855 5022 ldr.w r5, [r5, r2, lsl #2] + 80279ce: 0e2e lsrs r6, r5, #24 + 80279d0: d044 beq.n 8027a5c <_ZN8touchgfx8LCD16bpp54TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x2a8> + 80279d2: 9a05 ldr r2, [sp, #20] + 80279d4: f3c5 2a07 ubfx sl, r5, #8, #8 + 80279d8: f834 e018 ldrh.w lr, [r4, r8, lsl #1] + 80279dc: 4356 muls r6, r2 + 80279de: ea4f 272e mov.w r7, lr, asr #8 + 80279e2: 1c72 adds r2, r6, #1 + 80279e4: f007 07f8 and.w r7, r7, #248 ; 0xf8 + 80279e8: eb02 2226 add.w r2, r2, r6, asr #8 + 80279ec: f3c5 4607 ubfx r6, r5, #16, #8 + 80279f0: b2ed uxtb r5, r5 + 80279f2: 1212 asrs r2, r2, #8 + 80279f4: fa1f f982 uxth.w r9, r2 + 80279f8: 43d2 mvns r2, r2 + 80279fa: fb16 f609 smulbb r6, r6, r9 + 80279fe: b2d2 uxtb r2, r2 + 8027a00: fb15 f509 smulbb r5, r5, r9 + 8027a04: fb07 6702 mla r7, r7, r2, r6 + 8027a08: ea4f 06ee mov.w r6, lr, asr #3 + 8027a0c: fb1a fa09 smulbb sl, sl, r9 + 8027a10: ea4f 0ece mov.w lr, lr, lsl #3 + 8027a14: b2bf uxth r7, r7 + 8027a16: f006 06fc and.w r6, r6, #252 ; 0xfc + 8027a1a: fa5f fe8e uxtb.w lr, lr + 8027a1e: fb06 a602 mla r6, r6, r2, sl + 8027a22: fb0e 5502 mla r5, lr, r2, r5 + 8027a26: 1c7a adds r2, r7, #1 + 8027a28: b2b6 uxth r6, r6 + 8027a2a: b2ad uxth r5, r5 + 8027a2c: eb02 2717 add.w r7, r2, r7, lsr #8 + 8027a30: f105 0a01 add.w sl, r5, #1 + 8027a34: f407 4778 and.w r7, r7, #63488 ; 0xf800 + 8027a38: eb0a 2a15 add.w sl, sl, r5, lsr #8 + 8027a3c: f3ca 2ac4 ubfx sl, sl, #11, #5 + 8027a40: ea4a 0707 orr.w r7, sl, r7 + 8027a44: f106 0a01 add.w sl, r6, #1 + 8027a48: eb0a 2a16 add.w sl, sl, r6, lsr #8 + 8027a4c: ea4f 1a5a mov.w sl, sl, lsr #5 + 8027a50: f40a 6afc and.w sl, sl, #2016 ; 0x7e0 + 8027a54: ea47 070a orr.w r7, r7, sl + 8027a58: f824 7018 strh.w r7, [r4, r8, lsl #1] + 8027a5c: 9a13 ldr r2, [sp, #76] ; 0x4c + 8027a5e: f108 0801 add.w r8, r8, #1 + 8027a62: 4410 add r0, r2 + 8027a64: 9a14 ldr r2, [sp, #80] ; 0x50 + 8027a66: 4411 add r1, r2 + 8027a68: e7a1 b.n 80279ae <_ZN8touchgfx8LCD16bpp54TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1fa> + 8027a6a: b007 add sp, #28 + 8027a6c: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + +08027a70 <_ZN8touchgfx8LCD16bpp56TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff>: + 8027a70: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8027a74: b085 sub sp, #20 + 8027a76: 468b mov fp, r1 + 8027a78: eef7 6a00 vmov.f32 s13, #112 ; 0x3f800000 1.0 + 8027a7c: 9813 ldr r0, [sp, #76] ; 0x4c + 8027a7e: 9203 str r2, [sp, #12] + 8027a80: 6841 ldr r1, [r0, #4] + 8027a82: f8dd e058 ldr.w lr, [sp, #88] ; 0x58 + 8027a86: e9dd 2414 ldrd r2, r4, [sp, #80] ; 0x50 + 8027a8a: fb01 2404 mla r4, r1, r4, r2 + 8027a8e: 6802 ldr r2, [r0, #0] + 8027a90: eb02 0444 add.w r4, r2, r4, lsl #1 + 8027a94: f8de 2000 ldr.w r2, [lr] + 8027a98: 9200 str r2, [sp, #0] + 8027a9a: f8de 2004 ldr.w r2, [lr, #4] + 8027a9e: 3204 adds r2, #4 + 8027aa0: 9201 str r2, [sp, #4] + 8027aa2: f1bb 0f00 cmp.w fp, #0 + 8027aa6: dc03 bgt.n 8027ab0 <_ZN8touchgfx8LCD16bpp56TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x40> + 8027aa8: 9a03 ldr r2, [sp, #12] + 8027aaa: 2a00 cmp r2, #0 + 8027aac: f340 8153 ble.w 8027d56 <_ZN8touchgfx8LCD16bpp56TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x2e6> + 8027ab0: 9a0f ldr r2, [sp, #60] ; 0x3c + 8027ab2: f9be 7008 ldrsh.w r7, [lr, #8] + 8027ab6: f502 4100 add.w r1, r2, #32768 ; 0x8000 + 8027aba: 9a10 ldr r2, [sp, #64] ; 0x40 + 8027abc: f9be 600c ldrsh.w r6, [lr, #12] + 8027ac0: f502 4200 add.w r2, r2, #32768 ; 0x8000 + 8027ac4: 2b00 cmp r3, #0 + 8027ac6: dd0e ble.n 8027ae6 <_ZN8touchgfx8LCD16bpp56TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x76> + 8027ac8: 1408 asrs r0, r1, #16 + 8027aca: d405 bmi.n 8027ad8 <_ZN8touchgfx8LCD16bpp56TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x68> + 8027acc: 42b8 cmp r0, r7 + 8027ace: da03 bge.n 8027ad8 <_ZN8touchgfx8LCD16bpp56TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x68> + 8027ad0: 1410 asrs r0, r2, #16 + 8027ad2: d401 bmi.n 8027ad8 <_ZN8touchgfx8LCD16bpp56TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x68> + 8027ad4: 42b0 cmp r0, r6 + 8027ad6: db07 blt.n 8027ae8 <_ZN8touchgfx8LCD16bpp56TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x78> + 8027ad8: 9811 ldr r0, [sp, #68] ; 0x44 + 8027ada: 3b01 subs r3, #1 + 8027adc: 3402 adds r4, #2 + 8027ade: 4401 add r1, r0 + 8027ae0: 9812 ldr r0, [sp, #72] ; 0x48 + 8027ae2: 4402 add r2, r0 + 8027ae4: e7ee b.n 8027ac4 <_ZN8touchgfx8LCD16bpp56TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x54> + 8027ae6: d017 beq.n 8027b18 <_ZN8touchgfx8LCD16bpp56TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0xa8> + 8027ae8: 1e58 subs r0, r3, #1 + 8027aea: 9d11 ldr r5, [sp, #68] ; 0x44 + 8027aec: fb05 1500 mla r5, r5, r0, r1 + 8027af0: 142d asrs r5, r5, #16 + 8027af2: d409 bmi.n 8027b08 <_ZN8touchgfx8LCD16bpp56TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x98> + 8027af4: 42bd cmp r5, r7 + 8027af6: da07 bge.n 8027b08 <_ZN8touchgfx8LCD16bpp56TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x98> + 8027af8: 9d12 ldr r5, [sp, #72] ; 0x48 + 8027afa: fb05 2000 mla r0, r5, r0, r2 + 8027afe: 1400 asrs r0, r0, #16 + 8027b00: d402 bmi.n 8027b08 <_ZN8touchgfx8LCD16bpp56TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x98> + 8027b02: 42b0 cmp r0, r6 + 8027b04: f2c0 80bc blt.w 8027c80 <_ZN8touchgfx8LCD16bpp56TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x210> + 8027b08: 2600 movs r6, #0 + 8027b0a: 1998 adds r0, r3, r6 + 8027b0c: 2800 cmp r0, #0 + 8027b0e: dc3e bgt.n 8027b8e <_ZN8touchgfx8LCD16bpp56TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x11e> + 8027b10: ea23 73e3 bic.w r3, r3, r3, asr #31 + 8027b14: eb04 0443 add.w r4, r4, r3, lsl #1 + 8027b18: f1bb 0f00 cmp.w fp, #0 + 8027b1c: f340 811b ble.w 8027d56 <_ZN8touchgfx8LCD16bpp56TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x2e6> + 8027b20: ee30 0a04 vadd.f32 s0, s0, s8 + 8027b24: 9b0e ldr r3, [sp, #56] ; 0x38 + 8027b26: ee70 0aa4 vadd.f32 s1, s1, s9 + 8027b2a: f1bb 0b01 subs.w fp, fp, #1 + 8027b2e: eeb0 6a62 vmov.f32 s12, s5 + 8027b32: eec6 7a80 vdiv.f32 s15, s13, s0 + 8027b36: ee31 1a05 vadd.f32 s2, s2, s10 + 8027b3a: eebe 6ac8 vcvt.s32.f32 s12, s12, #16 + 8027b3e: ed8d 6a0f vstr s12, [sp, #60] ; 0x3c + 8027b42: eeb0 6a43 vmov.f32 s12, s6 + 8027b46: eebe 6ac8 vcvt.s32.f32 s12, s12, #16 + 8027b4a: ed8d 6a10 vstr s12, [sp, #64] ; 0x40 + 8027b4e: ee20 7aa7 vmul.f32 s14, s1, s15 + 8027b52: ee61 7a27 vmul.f32 s15, s2, s15 + 8027b56: ee77 2a62 vsub.f32 s5, s14, s5 + 8027b5a: ee37 3ac3 vsub.f32 s6, s15, s6 + 8027b5e: eefe 2ac8 vcvt.s32.f32 s5, s5, #16 + 8027b62: eebe 3ac8 vcvt.s32.f32 s6, s6, #16 + 8027b66: ee12 2a90 vmov r2, s5 + 8027b6a: eef0 2a47 vmov.f32 s5, s14 + 8027b6e: fb92 f3f3 sdiv r3, r2, r3 + 8027b72: ee13 2a10 vmov r2, s6 + 8027b76: 9311 str r3, [sp, #68] ; 0x44 + 8027b78: 9b0e ldr r3, [sp, #56] ; 0x38 + 8027b7a: eeb0 3a67 vmov.f32 s6, s15 + 8027b7e: fb92 f3f3 sdiv r3, r2, r3 + 8027b82: 9a03 ldr r2, [sp, #12] + 8027b84: 9312 str r3, [sp, #72] ; 0x48 + 8027b86: 9b0e ldr r3, [sp, #56] ; 0x38 + 8027b88: bf08 it eq + 8027b8a: 4613 moveq r3, r2 + 8027b8c: e789 b.n 8027aa2 <_ZN8touchgfx8LCD16bpp56TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x32> + 8027b8e: 140f asrs r7, r1, #16 + 8027b90: d426 bmi.n 8027be0 <_ZN8touchgfx8LCD16bpp56TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x170> + 8027b92: f8de 5008 ldr.w r5, [lr, #8] + 8027b96: 42bd cmp r5, r7 + 8027b98: dd22 ble.n 8027be0 <_ZN8touchgfx8LCD16bpp56TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x170> + 8027b9a: ea5f 4c22 movs.w ip, r2, asr #16 + 8027b9e: d41f bmi.n 8027be0 <_ZN8touchgfx8LCD16bpp56TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x170> + 8027ba0: f8de 000c ldr.w r0, [lr, #12] + 8027ba4: 4560 cmp r0, ip + 8027ba6: dd1b ble.n 8027be0 <_ZN8touchgfx8LCD16bpp56TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x170> + 8027ba8: 9800 ldr r0, [sp, #0] + 8027baa: b22d sxth r5, r5 + 8027bac: fb0c 0505 mla r5, ip, r5, r0 + 8027bb0: 5de8 ldrb r0, [r5, r7] + 8027bb2: 9d01 ldr r5, [sp, #4] + 8027bb4: f855 0020 ldr.w r0, [r5, r0, lsl #2] + 8027bb8: 0e07 lsrs r7, r0, #24 + 8027bba: 2fff cmp r7, #255 ; 0xff + 8027bbc: d116 bne.n 8027bec <_ZN8touchgfx8LCD16bpp56TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x17c> + 8027bbe: f06f 0501 mvn.w r5, #1 + 8027bc2: fb05 f706 mul.w r7, r5, r6 + 8027bc6: f2a5 75fe subw r5, r5, #2046 ; 0x7fe + 8027bca: ea05 2c10 and.w ip, r5, r0, lsr #8 + 8027bce: 0945 lsrs r5, r0, #5 + 8027bd0: f3c0 00c4 ubfx r0, r0, #3, #5 + 8027bd4: f405 65fc and.w r5, r5, #2016 ; 0x7e0 + 8027bd8: ea4c 0505 orr.w r5, ip, r5 + 8027bdc: 4305 orrs r5, r0 + 8027bde: 53e5 strh r5, [r4, r7] + 8027be0: 9811 ldr r0, [sp, #68] ; 0x44 + 8027be2: 3e01 subs r6, #1 + 8027be4: 4401 add r1, r0 + 8027be6: 9812 ldr r0, [sp, #72] ; 0x48 + 8027be8: 4402 add r2, r0 + 8027bea: e78e b.n 8027b0a <_ZN8touchgfx8LCD16bpp56TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x9a> + 8027bec: b2fd uxtb r5, r7 + 8027bee: 2f00 cmp r7, #0 + 8027bf0: d0f6 beq.n 8027be0 <_ZN8touchgfx8LCD16bpp56TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x170> + 8027bf2: f06f 0701 mvn.w r7, #1 + 8027bf6: fa1f f985 uxth.w r9, r5 + 8027bfa: 43ed mvns r5, r5 + 8027bfc: f3c0 2a07 ubfx sl, r0, #8, #8 + 8027c00: 4377 muls r7, r6 + 8027c02: fb1a fa09 smulbb sl, sl, r9 + 8027c06: b2ed uxtb r5, r5 + 8027c08: f834 8007 ldrh.w r8, [r4, r7] + 8027c0c: 9702 str r7, [sp, #8] + 8027c0e: f3c0 4707 ubfx r7, r0, #16, #8 + 8027c12: ea4f 2c28 mov.w ip, r8, asr #8 + 8027c16: fb17 f709 smulbb r7, r7, r9 + 8027c1a: b2c0 uxtb r0, r0 + 8027c1c: f00c 0cf8 and.w ip, ip, #248 ; 0xf8 + 8027c20: fb10 f009 smulbb r0, r0, r9 + 8027c24: fb0c 7c05 mla ip, ip, r5, r7 + 8027c28: ea4f 07e8 mov.w r7, r8, asr #3 + 8027c2c: ea4f 08c8 mov.w r8, r8, lsl #3 + 8027c30: fa1f fc8c uxth.w ip, ip + 8027c34: f007 07fc and.w r7, r7, #252 ; 0xfc + 8027c38: fa5f f888 uxtb.w r8, r8 + 8027c3c: fb07 a705 mla r7, r7, r5, sl + 8027c40: fb08 0005 mla r0, r8, r5, r0 + 8027c44: f10c 0501 add.w r5, ip, #1 + 8027c48: b2bf uxth r7, r7 + 8027c4a: b280 uxth r0, r0 + 8027c4c: eb05 2c1c add.w ip, r5, ip, lsr #8 + 8027c50: f100 0a01 add.w sl, r0, #1 + 8027c54: f40c 4c78 and.w ip, ip, #63488 ; 0xf800 + 8027c58: eb0a 2a10 add.w sl, sl, r0, lsr #8 + 8027c5c: 9802 ldr r0, [sp, #8] + 8027c5e: f3ca 2ac4 ubfx sl, sl, #11, #5 + 8027c62: ea4a 0c0c orr.w ip, sl, ip + 8027c66: f107 0a01 add.w sl, r7, #1 + 8027c6a: eb0a 2a17 add.w sl, sl, r7, lsr #8 + 8027c6e: ea4f 1a5a mov.w sl, sl, lsr #5 + 8027c72: f40a 6afc and.w sl, sl, #2016 ; 0x7e0 + 8027c76: ea4c 0c0a orr.w ip, ip, sl + 8027c7a: f824 c000 strh.w ip, [r4, r0] + 8027c7e: e7af b.n 8027be0 <_ZN8touchgfx8LCD16bpp56TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x170> + 8027c80: f04f 0800 mov.w r8, #0 + 8027c84: eba3 0008 sub.w r0, r3, r8 + 8027c88: 2800 cmp r0, #0 + 8027c8a: f77f af41 ble.w 8027b10 <_ZN8touchgfx8LCD16bpp56TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0xa0> + 8027c8e: f9be 6008 ldrsh.w r6, [lr, #8] + 8027c92: 1410 asrs r0, r2, #16 + 8027c94: 9f00 ldr r7, [sp, #0] + 8027c96: 140d asrs r5, r1, #16 + 8027c98: fb06 7000 mla r0, r6, r0, r7 + 8027c9c: 5d40 ldrb r0, [r0, r5] + 8027c9e: 9d01 ldr r5, [sp, #4] + 8027ca0: f855 5020 ldr.w r5, [r5, r0, lsl #2] + 8027ca4: 0e2e lsrs r6, r5, #24 + 8027ca6: 2eff cmp r6, #255 ; 0xff + 8027ca8: d112 bne.n 8027cd0 <_ZN8touchgfx8LCD16bpp56TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x260> + 8027caa: 482c ldr r0, [pc, #176] ; (8027d5c <_ZN8touchgfx8LCD16bpp56TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x2ec>) + 8027cac: ea00 2615 and.w r6, r0, r5, lsr #8 + 8027cb0: 0968 lsrs r0, r5, #5 + 8027cb2: f3c5 05c4 ubfx r5, r5, #3, #5 + 8027cb6: f400 60fc and.w r0, r0, #2016 ; 0x7e0 + 8027cba: 4330 orrs r0, r6 + 8027cbc: 4328 orrs r0, r5 + 8027cbe: f824 0018 strh.w r0, [r4, r8, lsl #1] + 8027cc2: 9811 ldr r0, [sp, #68] ; 0x44 + 8027cc4: f108 0801 add.w r8, r8, #1 + 8027cc8: 4401 add r1, r0 + 8027cca: 9812 ldr r0, [sp, #72] ; 0x48 + 8027ccc: 4402 add r2, r0 + 8027cce: e7d9 b.n 8027c84 <_ZN8touchgfx8LCD16bpp56TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x214> + 8027cd0: b2f0 uxtb r0, r6 + 8027cd2: 2e00 cmp r6, #0 + 8027cd4: d0f5 beq.n 8027cc2 <_ZN8touchgfx8LCD16bpp56TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x252> + 8027cd6: f834 c018 ldrh.w ip, [r4, r8, lsl #1] + 8027cda: fa1f f980 uxth.w r9, r0 + 8027cde: f3c5 4607 ubfx r6, r5, #16, #8 + 8027ce2: 43c0 mvns r0, r0 + 8027ce4: ea4f 272c mov.w r7, ip, asr #8 + 8027ce8: f3c5 2a07 ubfx sl, r5, #8, #8 + 8027cec: fb16 f609 smulbb r6, r6, r9 + 8027cf0: b2c0 uxtb r0, r0 + 8027cf2: f007 07f8 and.w r7, r7, #248 ; 0xf8 + 8027cf6: b2ed uxtb r5, r5 + 8027cf8: fb1a fa09 smulbb sl, sl, r9 + 8027cfc: fb07 6700 mla r7, r7, r0, r6 + 8027d00: ea4f 06ec mov.w r6, ip, asr #3 + 8027d04: fb15 f509 smulbb r5, r5, r9 + 8027d08: ea4f 0ccc mov.w ip, ip, lsl #3 + 8027d0c: b2bf uxth r7, r7 + 8027d0e: f006 06fc and.w r6, r6, #252 ; 0xfc + 8027d12: fa5f fc8c uxtb.w ip, ip + 8027d16: fb06 a600 mla r6, r6, r0, sl + 8027d1a: fb0c 5500 mla r5, ip, r0, r5 + 8027d1e: 1c78 adds r0, r7, #1 + 8027d20: b2b6 uxth r6, r6 + 8027d22: b2ad uxth r5, r5 + 8027d24: eb00 2717 add.w r7, r0, r7, lsr #8 + 8027d28: f105 0a01 add.w sl, r5, #1 + 8027d2c: f407 4778 and.w r7, r7, #63488 ; 0xf800 + 8027d30: eb0a 2a15 add.w sl, sl, r5, lsr #8 + 8027d34: f3ca 2ac4 ubfx sl, sl, #11, #5 + 8027d38: ea4a 0707 orr.w r7, sl, r7 + 8027d3c: f106 0a01 add.w sl, r6, #1 + 8027d40: eb0a 2a16 add.w sl, sl, r6, lsr #8 + 8027d44: ea4f 1a5a mov.w sl, sl, lsr #5 + 8027d48: f40a 6afc and.w sl, sl, #2016 ; 0x7e0 + 8027d4c: ea47 070a orr.w r7, r7, sl + 8027d50: f824 7018 strh.w r7, [r4, r8, lsl #1] + 8027d54: e7b5 b.n 8027cc2 <_ZN8touchgfx8LCD16bpp56TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x252> + 8027d56: b005 add sp, #20 + 8027d58: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 8027d5c: fffff800 .word 0xfffff800 + +08027d60 <_ZN8touchgfx8LCD16bpp49TextureMapper_RGB565_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff>: + 8027d60: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8027d64: b087 sub sp, #28 + 8027d66: 468b mov fp, r1 + 8027d68: eef7 6a00 vmov.f32 s13, #112 ; 0x3f800000 1.0 + 8027d6c: 9c15 ldr r4, [sp, #84] ; 0x54 + 8027d6e: 9204 str r2, [sp, #16] + 8027d70: f89d 2064 ldrb.w r2, [sp, #100] ; 0x64 + 8027d74: 6861 ldr r1, [r4, #4] + 8027d76: 9205 str r2, [sp, #20] + 8027d78: f8dd e060 ldr.w lr, [sp, #96] ; 0x60 + 8027d7c: e9dd 2016 ldrd r2, r0, [sp, #88] ; 0x58 + 8027d80: fb01 2000 mla r0, r1, r0, r2 + 8027d84: 6822 ldr r2, [r4, #0] + 8027d86: eb02 0040 add.w r0, r2, r0, lsl #1 + 8027d8a: f8de 2000 ldr.w r2, [lr] + 8027d8e: 9201 str r2, [sp, #4] + 8027d90: f8de 2004 ldr.w r2, [lr, #4] + 8027d94: 9202 str r2, [sp, #8] + 8027d96: f1bb 0f00 cmp.w fp, #0 + 8027d9a: dc03 bgt.n 8027da4 <_ZN8touchgfx8LCD16bpp49TextureMapper_RGB565_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x44> + 8027d9c: 9a04 ldr r2, [sp, #16] + 8027d9e: 2a00 cmp r2, #0 + 8027da0: f340 8142 ble.w 8028028 <_ZN8touchgfx8LCD16bpp49TextureMapper_RGB565_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x2c8> + 8027da4: 9a11 ldr r2, [sp, #68] ; 0x44 + 8027da6: f9be 7008 ldrsh.w r7, [lr, #8] + 8027daa: f502 4100 add.w r1, r2, #32768 ; 0x8000 + 8027dae: 9a12 ldr r2, [sp, #72] ; 0x48 + 8027db0: f9be 600c ldrsh.w r6, [lr, #12] + 8027db4: f502 4200 add.w r2, r2, #32768 ; 0x8000 + 8027db8: 2b00 cmp r3, #0 + 8027dba: dd0e ble.n 8027dda <_ZN8touchgfx8LCD16bpp49TextureMapper_RGB565_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x7a> + 8027dbc: 140c asrs r4, r1, #16 + 8027dbe: d405 bmi.n 8027dcc <_ZN8touchgfx8LCD16bpp49TextureMapper_RGB565_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x6c> + 8027dc0: 42bc cmp r4, r7 + 8027dc2: da03 bge.n 8027dcc <_ZN8touchgfx8LCD16bpp49TextureMapper_RGB565_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x6c> + 8027dc4: 1414 asrs r4, r2, #16 + 8027dc6: d401 bmi.n 8027dcc <_ZN8touchgfx8LCD16bpp49TextureMapper_RGB565_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x6c> + 8027dc8: 42b4 cmp r4, r6 + 8027dca: db07 blt.n 8027ddc <_ZN8touchgfx8LCD16bpp49TextureMapper_RGB565_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x7c> + 8027dcc: 9c13 ldr r4, [sp, #76] ; 0x4c + 8027dce: 3b01 subs r3, #1 + 8027dd0: 3002 adds r0, #2 + 8027dd2: 4421 add r1, r4 + 8027dd4: 9c14 ldr r4, [sp, #80] ; 0x50 + 8027dd6: 4422 add r2, r4 + 8027dd8: e7ee b.n 8027db8 <_ZN8touchgfx8LCD16bpp49TextureMapper_RGB565_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x58> + 8027dda: d019 beq.n 8027e10 <_ZN8touchgfx8LCD16bpp49TextureMapper_RGB565_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0xb0> + 8027ddc: 1e5c subs r4, r3, #1 + 8027dde: 9d13 ldr r5, [sp, #76] ; 0x4c + 8027de0: fb05 1504 mla r5, r5, r4, r1 + 8027de4: 142d asrs r5, r5, #16 + 8027de6: d409 bmi.n 8027dfc <_ZN8touchgfx8LCD16bpp49TextureMapper_RGB565_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x9c> + 8027de8: 42bd cmp r5, r7 + 8027dea: da07 bge.n 8027dfc <_ZN8touchgfx8LCD16bpp49TextureMapper_RGB565_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x9c> + 8027dec: 9d14 ldr r5, [sp, #80] ; 0x50 + 8027dee: fb05 2404 mla r4, r5, r4, r2 + 8027df2: 1424 asrs r4, r4, #16 + 8027df4: d402 bmi.n 8027dfc <_ZN8touchgfx8LCD16bpp49TextureMapper_RGB565_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x9c> + 8027df6: 42b4 cmp r4, r6 + 8027df8: f2c0 80b1 blt.w 8027f5e <_ZN8touchgfx8LCD16bpp49TextureMapper_RGB565_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1fe> + 8027dfc: f04f 0800 mov.w r8, #0 + 8027e00: eb03 0408 add.w r4, r3, r8 + 8027e04: 2c00 cmp r4, #0 + 8027e06: dc3e bgt.n 8027e86 <_ZN8touchgfx8LCD16bpp49TextureMapper_RGB565_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x126> + 8027e08: ea23 73e3 bic.w r3, r3, r3, asr #31 + 8027e0c: eb00 0043 add.w r0, r0, r3, lsl #1 + 8027e10: f1bb 0f00 cmp.w fp, #0 + 8027e14: f340 8108 ble.w 8028028 <_ZN8touchgfx8LCD16bpp49TextureMapper_RGB565_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x2c8> + 8027e18: ee30 0a04 vadd.f32 s0, s0, s8 + 8027e1c: 9b10 ldr r3, [sp, #64] ; 0x40 + 8027e1e: ee70 0aa4 vadd.f32 s1, s1, s9 + 8027e22: f1bb 0b01 subs.w fp, fp, #1 + 8027e26: eeb0 6a62 vmov.f32 s12, s5 + 8027e2a: eec6 7a80 vdiv.f32 s15, s13, s0 + 8027e2e: ee31 1a05 vadd.f32 s2, s2, s10 + 8027e32: eebe 6ac8 vcvt.s32.f32 s12, s12, #16 + 8027e36: ed8d 6a11 vstr s12, [sp, #68] ; 0x44 + 8027e3a: eeb0 6a43 vmov.f32 s12, s6 + 8027e3e: eebe 6ac8 vcvt.s32.f32 s12, s12, #16 + 8027e42: ed8d 6a12 vstr s12, [sp, #72] ; 0x48 + 8027e46: ee20 7aa7 vmul.f32 s14, s1, s15 + 8027e4a: ee61 7a27 vmul.f32 s15, s2, s15 + 8027e4e: ee77 2a62 vsub.f32 s5, s14, s5 + 8027e52: ee37 3ac3 vsub.f32 s6, s15, s6 + 8027e56: eefe 2ac8 vcvt.s32.f32 s5, s5, #16 + 8027e5a: eebe 3ac8 vcvt.s32.f32 s6, s6, #16 + 8027e5e: ee12 2a90 vmov r2, s5 + 8027e62: eef0 2a47 vmov.f32 s5, s14 + 8027e66: fb92 f3f3 sdiv r3, r2, r3 + 8027e6a: ee13 2a10 vmov r2, s6 + 8027e6e: 9313 str r3, [sp, #76] ; 0x4c + 8027e70: 9b10 ldr r3, [sp, #64] ; 0x40 + 8027e72: eeb0 3a67 vmov.f32 s6, s15 + 8027e76: fb92 f3f3 sdiv r3, r2, r3 + 8027e7a: 9a04 ldr r2, [sp, #16] + 8027e7c: 9314 str r3, [sp, #80] ; 0x50 + 8027e7e: 9b10 ldr r3, [sp, #64] ; 0x40 + 8027e80: bf08 it eq + 8027e82: 4613 moveq r3, r2 + 8027e84: e787 b.n 8027d96 <_ZN8touchgfx8LCD16bpp49TextureMapper_RGB565_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x36> + 8027e86: 140e asrs r6, r1, #16 + 8027e88: d462 bmi.n 8027f50 <_ZN8touchgfx8LCD16bpp49TextureMapper_RGB565_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1f0> + 8027e8a: f8de 5008 ldr.w r5, [lr, #8] + 8027e8e: 42b5 cmp r5, r6 + 8027e90: dd5e ble.n 8027f50 <_ZN8touchgfx8LCD16bpp49TextureMapper_RGB565_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1f0> + 8027e92: 1417 asrs r7, r2, #16 + 8027e94: d45c bmi.n 8027f50 <_ZN8touchgfx8LCD16bpp49TextureMapper_RGB565_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1f0> + 8027e96: f8de 400c ldr.w r4, [lr, #12] + 8027e9a: 42bc cmp r4, r7 + 8027e9c: dd58 ble.n 8027f50 <_ZN8touchgfx8LCD16bpp49TextureMapper_RGB565_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1f0> + 8027e9e: b22d sxth r5, r5 + 8027ea0: 9c02 ldr r4, [sp, #8] + 8027ea2: fb07 6505 mla r5, r7, r5, r6 + 8027ea6: 5d66 ldrb r6, [r4, r5] + 8027ea8: 2e00 cmp r6, #0 + 8027eaa: d051 beq.n 8027f50 <_ZN8touchgfx8LCD16bpp49TextureMapper_RGB565_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1f0> + 8027eac: 9c01 ldr r4, [sp, #4] + 8027eae: f834 9015 ldrh.w r9, [r4, r5, lsl #1] + 8027eb2: f06f 0401 mvn.w r4, #1 + 8027eb6: fb04 f408 mul.w r4, r4, r8 + 8027eba: ea4f 2c29 mov.w ip, r9, asr #8 + 8027ebe: 5b05 ldrh r5, [r0, r4] + 8027ec0: f00c 0cf8 and.w ip, ip, #248 ; 0xf8 + 8027ec4: 9403 str r4, [sp, #12] + 8027ec6: 9c05 ldr r4, [sp, #20] + 8027ec8: ea4f 0ae5 mov.w sl, r5, asr #3 + 8027ecc: 4366 muls r6, r4 + 8027ece: f00a 0afc and.w sl, sl, #252 ; 0xfc + 8027ed2: 1c74 adds r4, r6, #1 + 8027ed4: eb04 2416 add.w r4, r4, r6, lsr #8 + 8027ed8: 122e asrs r6, r5, #8 + 8027eda: 1224 asrs r4, r4, #8 + 8027edc: f006 06f8 and.w r6, r6, #248 ; 0xf8 + 8027ee0: 00ed lsls r5, r5, #3 + 8027ee2: b2a7 uxth r7, r4 + 8027ee4: 43e4 mvns r4, r4 + 8027ee6: b2ed uxtb r5, r5 + 8027ee8: b2e4 uxtb r4, r4 + 8027eea: fb16 f604 smulbb r6, r6, r4 + 8027eee: fb15 f504 smulbb r5, r5, r4 + 8027ef2: fb0c 6c07 mla ip, ip, r7, r6 + 8027ef6: ea4f 06e9 mov.w r6, r9, asr #3 + 8027efa: fb1a fa04 smulbb sl, sl, r4 + 8027efe: ea4f 09c9 mov.w r9, r9, lsl #3 + 8027f02: fa1f fc8c uxth.w ip, ip + 8027f06: f006 06fc and.w r6, r6, #252 ; 0xfc + 8027f0a: fa5f f989 uxtb.w r9, r9 + 8027f0e: fb06 a607 mla r6, r6, r7, sl + 8027f12: f10c 0401 add.w r4, ip, #1 + 8027f16: fb09 5507 mla r5, r9, r7, r5 + 8027f1a: eb04 2c1c add.w ip, r4, ip, lsr #8 + 8027f1e: 9c03 ldr r4, [sp, #12] + 8027f20: b2ad uxth r5, r5 + 8027f22: b2b6 uxth r6, r6 + 8027f24: f40c 4c78 and.w ip, ip, #63488 ; 0xf800 + 8027f28: f105 0a01 add.w sl, r5, #1 + 8027f2c: eb0a 2a15 add.w sl, sl, r5, lsr #8 + 8027f30: f3ca 2ac4 ubfx sl, sl, #11, #5 + 8027f34: ea4a 0c0c orr.w ip, sl, ip + 8027f38: f106 0a01 add.w sl, r6, #1 + 8027f3c: eb0a 2a16 add.w sl, sl, r6, lsr #8 + 8027f40: ea4f 1a5a mov.w sl, sl, lsr #5 + 8027f44: f40a 6afc and.w sl, sl, #2016 ; 0x7e0 + 8027f48: ea4c 0c0a orr.w ip, ip, sl + 8027f4c: f820 c004 strh.w ip, [r0, r4] + 8027f50: 9c13 ldr r4, [sp, #76] ; 0x4c + 8027f52: f108 38ff add.w r8, r8, #4294967295 + 8027f56: 4421 add r1, r4 + 8027f58: 9c14 ldr r4, [sp, #80] ; 0x50 + 8027f5a: 4422 add r2, r4 + 8027f5c: e750 b.n 8027e00 <_ZN8touchgfx8LCD16bpp49TextureMapper_RGB565_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0xa0> + 8027f5e: f04f 0900 mov.w r9, #0 + 8027f62: eba3 0409 sub.w r4, r3, r9 + 8027f66: 2c00 cmp r4, #0 + 8027f68: f77f af4e ble.w 8027e08 <_ZN8touchgfx8LCD16bpp49TextureMapper_RGB565_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0xa8> + 8027f6c: f9be 6008 ldrsh.w r6, [lr, #8] + 8027f70: 140d asrs r5, r1, #16 + 8027f72: 1414 asrs r4, r2, #16 + 8027f74: fb06 5404 mla r4, r6, r4, r5 + 8027f78: 9d02 ldr r5, [sp, #8] + 8027f7a: 5d2e ldrb r6, [r5, r4] + 8027f7c: 2e00 cmp r6, #0 + 8027f7e: d04c beq.n 802801a <_ZN8touchgfx8LCD16bpp49TextureMapper_RGB565_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x2ba> + 8027f80: 9d01 ldr r5, [sp, #4] + 8027f82: f835 8014 ldrh.w r8, [r5, r4, lsl #1] + 8027f86: 9c05 ldr r4, [sp, #20] + 8027f88: f830 5019 ldrh.w r5, [r0, r9, lsl #1] + 8027f8c: ea4f 2c28 mov.w ip, r8, asr #8 + 8027f90: 4366 muls r6, r4 + 8027f92: ea4f 0ae5 mov.w sl, r5, asr #3 + 8027f96: f00c 0cf8 and.w ip, ip, #248 ; 0xf8 + 8027f9a: 1c74 adds r4, r6, #1 + 8027f9c: f00a 0afc and.w sl, sl, #252 ; 0xfc + 8027fa0: eb04 2416 add.w r4, r4, r6, lsr #8 + 8027fa4: 122e asrs r6, r5, #8 + 8027fa6: 1224 asrs r4, r4, #8 + 8027fa8: f006 06f8 and.w r6, r6, #248 ; 0xf8 + 8027fac: 00ed lsls r5, r5, #3 + 8027fae: b2a7 uxth r7, r4 + 8027fb0: 43e4 mvns r4, r4 + 8027fb2: b2ed uxtb r5, r5 + 8027fb4: b2e4 uxtb r4, r4 + 8027fb6: fb16 f604 smulbb r6, r6, r4 + 8027fba: fb15 f504 smulbb r5, r5, r4 + 8027fbe: fb0c 6c07 mla ip, ip, r7, r6 + 8027fc2: ea4f 06e8 mov.w r6, r8, asr #3 + 8027fc6: fb1a fa04 smulbb sl, sl, r4 + 8027fca: ea4f 08c8 mov.w r8, r8, lsl #3 + 8027fce: fa1f fc8c uxth.w ip, ip + 8027fd2: f006 06fc and.w r6, r6, #252 ; 0xfc + 8027fd6: fa5f f888 uxtb.w r8, r8 + 8027fda: fb06 a607 mla r6, r6, r7, sl + 8027fde: f10c 0401 add.w r4, ip, #1 + 8027fe2: fb08 5507 mla r5, r8, r7, r5 + 8027fe6: eb04 2c1c add.w ip, r4, ip, lsr #8 + 8027fea: b2ad uxth r5, r5 + 8027fec: b2b6 uxth r6, r6 + 8027fee: f40c 4c78 and.w ip, ip, #63488 ; 0xf800 + 8027ff2: f105 0a01 add.w sl, r5, #1 + 8027ff6: eb0a 2a15 add.w sl, sl, r5, lsr #8 + 8027ffa: f3ca 2ac4 ubfx sl, sl, #11, #5 + 8027ffe: ea4a 0c0c orr.w ip, sl, ip + 8028002: f106 0a01 add.w sl, r6, #1 + 8028006: eb0a 2a16 add.w sl, sl, r6, lsr #8 + 802800a: ea4f 1a5a mov.w sl, sl, lsr #5 + 802800e: f40a 6afc and.w sl, sl, #2016 ; 0x7e0 + 8028012: ea4c 0c0a orr.w ip, ip, sl + 8028016: f820 c019 strh.w ip, [r0, r9, lsl #1] + 802801a: 9c13 ldr r4, [sp, #76] ; 0x4c + 802801c: f109 0901 add.w r9, r9, #1 + 8028020: 4421 add r1, r4 + 8028022: 9c14 ldr r4, [sp, #80] ; 0x50 + 8028024: 4422 add r2, r4 + 8028026: e79c b.n 8027f62 <_ZN8touchgfx8LCD16bpp49TextureMapper_RGB565_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x202> + 8028028: b007 add sp, #28 + 802802a: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + +0802802e <_ZN8touchgfx8LCD16bpp51TextureMapper_RGB565_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff>: + 802802e: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8028032: b085 sub sp, #20 + 8028034: 468b mov fp, r1 + 8028036: eef7 6a00 vmov.f32 s13, #112 ; 0x3f800000 1.0 + 802803a: 9c13 ldr r4, [sp, #76] ; 0x4c + 802803c: 9203 str r2, [sp, #12] + 802803e: 6861 ldr r1, [r4, #4] + 8028040: f8dd 8058 ldr.w r8, [sp, #88] ; 0x58 + 8028044: e9dd 2014 ldrd r2, r0, [sp, #80] ; 0x50 + 8028048: fb01 2000 mla r0, r1, r0, r2 + 802804c: 6822 ldr r2, [r4, #0] + 802804e: eb02 0040 add.w r0, r2, r0, lsl #1 + 8028052: f8d8 2000 ldr.w r2, [r8] + 8028056: 9200 str r2, [sp, #0] + 8028058: f8d8 2004 ldr.w r2, [r8, #4] + 802805c: 9201 str r2, [sp, #4] + 802805e: f1bb 0f00 cmp.w fp, #0 + 8028062: dc03 bgt.n 802806c <_ZN8touchgfx8LCD16bpp51TextureMapper_RGB565_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x3e> + 8028064: 9a03 ldr r2, [sp, #12] + 8028066: 2a00 cmp r2, #0 + 8028068: f340 8146 ble.w 80282f8 <_ZN8touchgfx8LCD16bpp51TextureMapper_RGB565_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x2ca> + 802806c: 9a0f ldr r2, [sp, #60] ; 0x3c + 802806e: f9b8 7008 ldrsh.w r7, [r8, #8] + 8028072: f502 4100 add.w r1, r2, #32768 ; 0x8000 + 8028076: 9a10 ldr r2, [sp, #64] ; 0x40 + 8028078: f9b8 600c ldrsh.w r6, [r8, #12] + 802807c: f502 4200 add.w r2, r2, #32768 ; 0x8000 + 8028080: 2b00 cmp r3, #0 + 8028082: dd0e ble.n 80280a2 <_ZN8touchgfx8LCD16bpp51TextureMapper_RGB565_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x74> + 8028084: 140c asrs r4, r1, #16 + 8028086: d405 bmi.n 8028094 <_ZN8touchgfx8LCD16bpp51TextureMapper_RGB565_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x66> + 8028088: 42bc cmp r4, r7 + 802808a: da03 bge.n 8028094 <_ZN8touchgfx8LCD16bpp51TextureMapper_RGB565_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x66> + 802808c: 1414 asrs r4, r2, #16 + 802808e: d401 bmi.n 8028094 <_ZN8touchgfx8LCD16bpp51TextureMapper_RGB565_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x66> + 8028090: 42b4 cmp r4, r6 + 8028092: db07 blt.n 80280a4 <_ZN8touchgfx8LCD16bpp51TextureMapper_RGB565_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x76> + 8028094: 9c11 ldr r4, [sp, #68] ; 0x44 + 8028096: 3b01 subs r3, #1 + 8028098: 3002 adds r0, #2 + 802809a: 4421 add r1, r4 + 802809c: 9c12 ldr r4, [sp, #72] ; 0x48 + 802809e: 4422 add r2, r4 + 80280a0: e7ee b.n 8028080 <_ZN8touchgfx8LCD16bpp51TextureMapper_RGB565_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x52> + 80280a2: d017 beq.n 80280d4 <_ZN8touchgfx8LCD16bpp51TextureMapper_RGB565_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0xa6> + 80280a4: 1e5c subs r4, r3, #1 + 80280a6: 9d11 ldr r5, [sp, #68] ; 0x44 + 80280a8: fb05 1504 mla r5, r5, r4, r1 + 80280ac: 142d asrs r5, r5, #16 + 80280ae: d409 bmi.n 80280c4 <_ZN8touchgfx8LCD16bpp51TextureMapper_RGB565_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x96> + 80280b0: 42bd cmp r5, r7 + 80280b2: da07 bge.n 80280c4 <_ZN8touchgfx8LCD16bpp51TextureMapper_RGB565_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x96> + 80280b4: 9d12 ldr r5, [sp, #72] ; 0x48 + 80280b6: fb05 2404 mla r4, r5, r4, r2 + 80280ba: 1424 asrs r4, r4, #16 + 80280bc: d402 bmi.n 80280c4 <_ZN8touchgfx8LCD16bpp51TextureMapper_RGB565_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x96> + 80280be: 42b4 cmp r4, r6 + 80280c0: f2c0 80b3 blt.w 802822a <_ZN8touchgfx8LCD16bpp51TextureMapper_RGB565_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1fc> + 80280c4: 2600 movs r6, #0 + 80280c6: 199c adds r4, r3, r6 + 80280c8: 2c00 cmp r4, #0 + 80280ca: dc3e bgt.n 802814a <_ZN8touchgfx8LCD16bpp51TextureMapper_RGB565_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x11c> + 80280cc: ea23 73e3 bic.w r3, r3, r3, asr #31 + 80280d0: eb00 0043 add.w r0, r0, r3, lsl #1 + 80280d4: f1bb 0f00 cmp.w fp, #0 + 80280d8: f340 810e ble.w 80282f8 <_ZN8touchgfx8LCD16bpp51TextureMapper_RGB565_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x2ca> + 80280dc: ee30 0a04 vadd.f32 s0, s0, s8 + 80280e0: 9b0e ldr r3, [sp, #56] ; 0x38 + 80280e2: ee70 0aa4 vadd.f32 s1, s1, s9 + 80280e6: f1bb 0b01 subs.w fp, fp, #1 + 80280ea: eeb0 6a62 vmov.f32 s12, s5 + 80280ee: eec6 7a80 vdiv.f32 s15, s13, s0 + 80280f2: ee31 1a05 vadd.f32 s2, s2, s10 + 80280f6: eebe 6ac8 vcvt.s32.f32 s12, s12, #16 + 80280fa: ed8d 6a0f vstr s12, [sp, #60] ; 0x3c + 80280fe: eeb0 6a43 vmov.f32 s12, s6 + 8028102: eebe 6ac8 vcvt.s32.f32 s12, s12, #16 + 8028106: ed8d 6a10 vstr s12, [sp, #64] ; 0x40 + 802810a: ee20 7aa7 vmul.f32 s14, s1, s15 + 802810e: ee61 7a27 vmul.f32 s15, s2, s15 + 8028112: ee77 2a62 vsub.f32 s5, s14, s5 + 8028116: ee37 3ac3 vsub.f32 s6, s15, s6 + 802811a: eefe 2ac8 vcvt.s32.f32 s5, s5, #16 + 802811e: eebe 3ac8 vcvt.s32.f32 s6, s6, #16 + 8028122: ee12 2a90 vmov r2, s5 + 8028126: eef0 2a47 vmov.f32 s5, s14 + 802812a: fb92 f3f3 sdiv r3, r2, r3 + 802812e: ee13 2a10 vmov r2, s6 + 8028132: 9311 str r3, [sp, #68] ; 0x44 + 8028134: 9b0e ldr r3, [sp, #56] ; 0x38 + 8028136: eeb0 3a67 vmov.f32 s6, s15 + 802813a: fb92 f3f3 sdiv r3, r2, r3 + 802813e: 9a03 ldr r2, [sp, #12] + 8028140: 9312 str r3, [sp, #72] ; 0x48 + 8028142: 9b0e ldr r3, [sp, #56] ; 0x38 + 8028144: bf08 it eq + 8028146: 4613 moveq r3, r2 + 8028148: e789 b.n 802805e <_ZN8touchgfx8LCD16bpp51TextureMapper_RGB565_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x30> + 802814a: 140f asrs r7, r1, #16 + 802814c: d418 bmi.n 8028180 <_ZN8touchgfx8LCD16bpp51TextureMapper_RGB565_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x152> + 802814e: f8d8 5008 ldr.w r5, [r8, #8] + 8028152: 42bd cmp r5, r7 + 8028154: dd14 ble.n 8028180 <_ZN8touchgfx8LCD16bpp51TextureMapper_RGB565_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x152> + 8028156: ea5f 4c22 movs.w ip, r2, asr #16 + 802815a: d411 bmi.n 8028180 <_ZN8touchgfx8LCD16bpp51TextureMapper_RGB565_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x152> + 802815c: f8d8 400c ldr.w r4, [r8, #12] + 8028160: 4564 cmp r4, ip + 8028162: dd0d ble.n 8028180 <_ZN8touchgfx8LCD16bpp51TextureMapper_RGB565_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x152> + 8028164: b22d sxth r5, r5 + 8028166: 9c01 ldr r4, [sp, #4] + 8028168: fb0c 7505 mla r5, ip, r5, r7 + 802816c: 5d64 ldrb r4, [r4, r5] + 802816e: 2cff cmp r4, #255 ; 0xff + 8028170: d10c bne.n 802818c <_ZN8touchgfx8LCD16bpp51TextureMapper_RGB565_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x15e> + 8028172: 9c00 ldr r4, [sp, #0] + 8028174: f834 5015 ldrh.w r5, [r4, r5, lsl #1] + 8028178: f06f 0401 mvn.w r4, #1 + 802817c: 4374 muls r4, r6 + 802817e: 5305 strh r5, [r0, r4] + 8028180: 9c11 ldr r4, [sp, #68] ; 0x44 + 8028182: 3e01 subs r6, #1 + 8028184: 4421 add r1, r4 + 8028186: 9c12 ldr r4, [sp, #72] ; 0x48 + 8028188: 4422 add r2, r4 + 802818a: e79c b.n 80280c6 <_ZN8touchgfx8LCD16bpp51TextureMapper_RGB565_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x98> + 802818c: 2c00 cmp r4, #0 + 802818e: d0f7 beq.n 8028180 <_ZN8touchgfx8LCD16bpp51TextureMapper_RGB565_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x152> + 8028190: 9f00 ldr r7, [sp, #0] + 8028192: fa1f fc84 uxth.w ip, r4 + 8028196: 43e4 mvns r4, r4 + 8028198: f837 9015 ldrh.w r9, [r7, r5, lsl #1] + 802819c: f06f 0501 mvn.w r5, #1 + 80281a0: b2e4 uxtb r4, r4 + 80281a2: 4375 muls r5, r6 + 80281a4: ea4f 2e29 mov.w lr, r9, asr #8 + 80281a8: 9502 str r5, [sp, #8] + 80281aa: f00e 0ef8 and.w lr, lr, #248 ; 0xf8 + 80281ae: 5b45 ldrh r5, [r0, r5] + 80281b0: 122f asrs r7, r5, #8 + 80281b2: ea4f 0ae5 mov.w sl, r5, asr #3 + 80281b6: f007 07f8 and.w r7, r7, #248 ; 0xf8 + 80281ba: 00ed lsls r5, r5, #3 + 80281bc: f00a 0afc and.w sl, sl, #252 ; 0xfc + 80281c0: fb17 f704 smulbb r7, r7, r4 + 80281c4: b2ed uxtb r5, r5 + 80281c6: fb1a fa04 smulbb sl, sl, r4 + 80281ca: fb0e 7e0c mla lr, lr, ip, r7 + 80281ce: ea4f 07e9 mov.w r7, r9, asr #3 + 80281d2: fb15 f504 smulbb r5, r5, r4 + 80281d6: ea4f 09c9 mov.w r9, r9, lsl #3 + 80281da: fa1f fe8e uxth.w lr, lr + 80281de: f007 07fc and.w r7, r7, #252 ; 0xfc + 80281e2: fa5f f989 uxtb.w r9, r9 + 80281e6: fb07 a70c mla r7, r7, ip, sl + 80281ea: f10e 0401 add.w r4, lr, #1 + 80281ee: fb09 550c mla r5, r9, ip, r5 + 80281f2: eb04 2e1e add.w lr, r4, lr, lsr #8 + 80281f6: 9c02 ldr r4, [sp, #8] + 80281f8: b2ad uxth r5, r5 + 80281fa: b2bf uxth r7, r7 + 80281fc: f40e 4e78 and.w lr, lr, #63488 ; 0xf800 + 8028200: f105 0a01 add.w sl, r5, #1 + 8028204: eb0a 2a15 add.w sl, sl, r5, lsr #8 + 8028208: f3ca 2ac4 ubfx sl, sl, #11, #5 + 802820c: ea4a 0e0e orr.w lr, sl, lr + 8028210: f107 0a01 add.w sl, r7, #1 + 8028214: eb0a 2a17 add.w sl, sl, r7, lsr #8 + 8028218: ea4f 1a5a mov.w sl, sl, lsr #5 + 802821c: f40a 6afc and.w sl, sl, #2016 ; 0x7e0 + 8028220: ea4e 0e0a orr.w lr, lr, sl + 8028224: f820 e004 strh.w lr, [r0, r4] + 8028228: e7aa b.n 8028180 <_ZN8touchgfx8LCD16bpp51TextureMapper_RGB565_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x152> + 802822a: f04f 0900 mov.w r9, #0 + 802822e: eba3 0409 sub.w r4, r3, r9 + 8028232: 2c00 cmp r4, #0 + 8028234: f77f af4a ble.w 80280cc <_ZN8touchgfx8LCD16bpp51TextureMapper_RGB565_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x9e> + 8028238: 1414 asrs r4, r2, #16 + 802823a: f9b8 6008 ldrsh.w r6, [r8, #8] + 802823e: 140d asrs r5, r1, #16 + 8028240: fb06 5504 mla r5, r6, r4, r5 + 8028244: 9c01 ldr r4, [sp, #4] + 8028246: 5d64 ldrb r4, [r4, r5] + 8028248: 2cff cmp r4, #255 ; 0xff + 802824a: d10b bne.n 8028264 <_ZN8touchgfx8LCD16bpp51TextureMapper_RGB565_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x236> + 802824c: 9c00 ldr r4, [sp, #0] + 802824e: f834 4015 ldrh.w r4, [r4, r5, lsl #1] + 8028252: f820 4019 strh.w r4, [r0, r9, lsl #1] + 8028256: 9c11 ldr r4, [sp, #68] ; 0x44 + 8028258: f109 0901 add.w r9, r9, #1 + 802825c: 4421 add r1, r4 + 802825e: 9c12 ldr r4, [sp, #72] ; 0x48 + 8028260: 4422 add r2, r4 + 8028262: e7e4 b.n 802822e <_ZN8touchgfx8LCD16bpp51TextureMapper_RGB565_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x200> + 8028264: 2c00 cmp r4, #0 + 8028266: d0f6 beq.n 8028256 <_ZN8touchgfx8LCD16bpp51TextureMapper_RGB565_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x228> + 8028268: 9e00 ldr r6, [sp, #0] + 802826a: b2a7 uxth r7, r4 + 802826c: 43e4 mvns r4, r4 + 802826e: f836 e015 ldrh.w lr, [r6, r5, lsl #1] + 8028272: f830 5019 ldrh.w r5, [r0, r9, lsl #1] + 8028276: b2e4 uxtb r4, r4 + 8028278: ea4f 2c2e mov.w ip, lr, asr #8 + 802827c: 122e asrs r6, r5, #8 + 802827e: ea4f 0ae5 mov.w sl, r5, asr #3 + 8028282: f00c 0cf8 and.w ip, ip, #248 ; 0xf8 + 8028286: f006 06f8 and.w r6, r6, #248 ; 0xf8 + 802828a: 00ed lsls r5, r5, #3 + 802828c: f00a 0afc and.w sl, sl, #252 ; 0xfc + 8028290: fb16 f604 smulbb r6, r6, r4 + 8028294: b2ed uxtb r5, r5 + 8028296: fb1a fa04 smulbb sl, sl, r4 + 802829a: fb0c 6c07 mla ip, ip, r7, r6 + 802829e: ea4f 06ee mov.w r6, lr, asr #3 + 80282a2: fb15 f504 smulbb r5, r5, r4 + 80282a6: ea4f 0ece mov.w lr, lr, lsl #3 + 80282aa: fa1f fc8c uxth.w ip, ip + 80282ae: f006 06fc and.w r6, r6, #252 ; 0xfc + 80282b2: fa5f fe8e uxtb.w lr, lr + 80282b6: fb06 a607 mla r6, r6, r7, sl + 80282ba: f10c 0401 add.w r4, ip, #1 + 80282be: fb0e 5507 mla r5, lr, r7, r5 + 80282c2: eb04 2c1c add.w ip, r4, ip, lsr #8 + 80282c6: b2ad uxth r5, r5 + 80282c8: b2b6 uxth r6, r6 + 80282ca: f40c 4c78 and.w ip, ip, #63488 ; 0xf800 + 80282ce: f105 0a01 add.w sl, r5, #1 + 80282d2: eb0a 2a15 add.w sl, sl, r5, lsr #8 + 80282d6: f3ca 2ac4 ubfx sl, sl, #11, #5 + 80282da: ea4a 0c0c orr.w ip, sl, ip + 80282de: f106 0a01 add.w sl, r6, #1 + 80282e2: eb0a 2a16 add.w sl, sl, r6, lsr #8 + 80282e6: ea4f 1a5a mov.w sl, sl, lsr #5 + 80282ea: f40a 6afc and.w sl, sl, #2016 ; 0x7e0 + 80282ee: ea4c 0c0a orr.w ip, ip, sl + 80282f2: f820 c019 strh.w ip, [r0, r9, lsl #1] + 80282f6: e7ae b.n 8028256 <_ZN8touchgfx8LCD16bpp51TextureMapper_RGB565_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x228> + 80282f8: b005 add sp, #20 + 80282fa: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + +080282fe <_ZN8touchgfx8LCD16bpp46TextureMapper_RGB565_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff>: + 80282fe: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8028302: b085 sub sp, #20 + 8028304: 9813 ldr r0, [sp, #76] ; 0x4c + 8028306: 9203 str r2, [sp, #12] + 8028308: f89d 205c ldrb.w r2, [sp, #92] ; 0x5c + 802830c: 9100 str r1, [sp, #0] + 802830e: 9201 str r2, [sp, #4] + 8028310: 6841 ldr r1, [r0, #4] + 8028312: f8dd e058 ldr.w lr, [sp, #88] ; 0x58 + 8028316: e9dd 2414 ldrd r2, r4, [sp, #80] ; 0x50 + 802831a: fb01 2404 mla r4, r1, r4, r2 + 802831e: 6802 ldr r2, [r0, #0] + 8028320: eb02 0444 add.w r4, r2, r4, lsl #1 + 8028324: f8de 2000 ldr.w r2, [lr] + 8028328: 9202 str r2, [sp, #8] + 802832a: 9a01 ldr r2, [sp, #4] + 802832c: 43d6 mvns r6, r2 + 802832e: b2f6 uxtb r6, r6 + 8028330: 9a00 ldr r2, [sp, #0] + 8028332: 2a00 cmp r2, #0 + 8028334: dc03 bgt.n 802833e <_ZN8touchgfx8LCD16bpp46TextureMapper_RGB565_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x40> + 8028336: 9a03 ldr r2, [sp, #12] + 8028338: 2a00 cmp r2, #0 + 802833a: f340 8124 ble.w 8028586 <_ZN8touchgfx8LCD16bpp46TextureMapper_RGB565_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x288> + 802833e: 9a0f ldr r2, [sp, #60] ; 0x3c + 8028340: f9be c008 ldrsh.w ip, [lr, #8] + 8028344: f502 4100 add.w r1, r2, #32768 ; 0x8000 + 8028348: 9a10 ldr r2, [sp, #64] ; 0x40 + 802834a: f9be 700c ldrsh.w r7, [lr, #12] + 802834e: f502 4200 add.w r2, r2, #32768 ; 0x8000 + 8028352: 2b00 cmp r3, #0 + 8028354: dd0e ble.n 8028374 <_ZN8touchgfx8LCD16bpp46TextureMapper_RGB565_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x76> + 8028356: 1408 asrs r0, r1, #16 + 8028358: d405 bmi.n 8028366 <_ZN8touchgfx8LCD16bpp46TextureMapper_RGB565_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x68> + 802835a: 4560 cmp r0, ip + 802835c: da03 bge.n 8028366 <_ZN8touchgfx8LCD16bpp46TextureMapper_RGB565_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x68> + 802835e: 1410 asrs r0, r2, #16 + 8028360: d401 bmi.n 8028366 <_ZN8touchgfx8LCD16bpp46TextureMapper_RGB565_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x68> + 8028362: 42b8 cmp r0, r7 + 8028364: db07 blt.n 8028376 <_ZN8touchgfx8LCD16bpp46TextureMapper_RGB565_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x78> + 8028366: 9811 ldr r0, [sp, #68] ; 0x44 + 8028368: 3b01 subs r3, #1 + 802836a: 3402 adds r4, #2 + 802836c: 4401 add r1, r0 + 802836e: 9812 ldr r0, [sp, #72] ; 0x48 + 8028370: 4402 add r2, r0 + 8028372: e7ee b.n 8028352 <_ZN8touchgfx8LCD16bpp46TextureMapper_RGB565_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x54> + 8028374: d06e beq.n 8028454 <_ZN8touchgfx8LCD16bpp46TextureMapper_RGB565_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x156> + 8028376: 1e58 subs r0, r3, #1 + 8028378: 9d11 ldr r5, [sp, #68] ; 0x44 + 802837a: fb05 1500 mla r5, r5, r0, r1 + 802837e: 142d asrs r5, r5, #16 + 8028380: d45c bmi.n 802843c <_ZN8touchgfx8LCD16bpp46TextureMapper_RGB565_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x13e> + 8028382: 4565 cmp r5, ip + 8028384: da5a bge.n 802843c <_ZN8touchgfx8LCD16bpp46TextureMapper_RGB565_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x13e> + 8028386: 9d12 ldr r5, [sp, #72] ; 0x48 + 8028388: fb05 2000 mla r0, r5, r0, r2 + 802838c: 1400 asrs r0, r0, #16 + 802838e: d455 bmi.n 802843c <_ZN8touchgfx8LCD16bpp46TextureMapper_RGB565_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x13e> + 8028390: 42b8 cmp r0, r7 + 8028392: da53 bge.n 802843c <_ZN8touchgfx8LCD16bpp46TextureMapper_RGB565_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x13e> + 8028394: 4699 mov r9, r3 + 8028396: 46a2 mov sl, r4 + 8028398: f8bd b004 ldrh.w fp, [sp, #4] + 802839c: f1b9 0f00 cmp.w r9, #0 + 80283a0: dd54 ble.n 802844c <_ZN8touchgfx8LCD16bpp46TextureMapper_RGB565_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x14e> + 80283a2: f9be 7008 ldrsh.w r7, [lr, #8] + 80283a6: 140d asrs r5, r1, #16 + 80283a8: 1410 asrs r0, r2, #16 + 80283aa: f109 39ff add.w r9, r9, #4294967295 + 80283ae: fb07 5000 mla r0, r7, r0, r5 + 80283b2: 9d02 ldr r5, [sp, #8] + 80283b4: f835 0010 ldrh.w r0, [r5, r0, lsl #1] + 80283b8: f8ba 5000 ldrh.w r5, [sl] + 80283bc: ea4f 2c20 mov.w ip, r0, asr #8 + 80283c0: 122f asrs r7, r5, #8 + 80283c2: ea4f 08e5 mov.w r8, r5, asr #3 + 80283c6: f00c 0cf8 and.w ip, ip, #248 ; 0xf8 + 80283ca: f007 07f8 and.w r7, r7, #248 ; 0xf8 + 80283ce: 00ed lsls r5, r5, #3 + 80283d0: f008 08fc and.w r8, r8, #252 ; 0xfc + 80283d4: fb17 f706 smulbb r7, r7, r6 + 80283d8: b2ed uxtb r5, r5 + 80283da: fb18 f806 smulbb r8, r8, r6 + 80283de: fb0c 7c0b mla ip, ip, fp, r7 + 80283e2: 10c7 asrs r7, r0, #3 + 80283e4: fb15 f506 smulbb r5, r5, r6 + 80283e8: 00c0 lsls r0, r0, #3 + 80283ea: f007 07fc and.w r7, r7, #252 ; 0xfc + 80283ee: fa1f fc8c uxth.w ip, ip + 80283f2: b2c0 uxtb r0, r0 + 80283f4: fb07 870b mla r7, r7, fp, r8 + 80283f8: fb00 500b mla r0, r0, fp, r5 + 80283fc: f10c 0501 add.w r5, ip, #1 + 8028400: b2bf uxth r7, r7 + 8028402: b280 uxth r0, r0 + 8028404: eb05 2c1c add.w ip, r5, ip, lsr #8 + 8028408: f107 0801 add.w r8, r7, #1 + 802840c: 1c45 adds r5, r0, #1 + 802840e: eb08 2817 add.w r8, r8, r7, lsr #8 + 8028412: f40c 4c78 and.w ip, ip, #63488 ; 0xf800 + 8028416: eb05 2510 add.w r5, r5, r0, lsr #8 + 802841a: 9811 ldr r0, [sp, #68] ; 0x44 + 802841c: ea4f 1858 mov.w r8, r8, lsr #5 + 8028420: f3c5 25c4 ubfx r5, r5, #11, #5 + 8028424: 4401 add r1, r0 + 8028426: f408 68fc and.w r8, r8, #2016 ; 0x7e0 + 802842a: 9812 ldr r0, [sp, #72] ; 0x48 + 802842c: ea45 0c0c orr.w ip, r5, ip + 8028430: 4402 add r2, r0 + 8028432: ea4c 0c08 orr.w ip, ip, r8 + 8028436: f82a cb02 strh.w ip, [sl], #2 + 802843a: e7af b.n 802839c <_ZN8touchgfx8LCD16bpp46TextureMapper_RGB565_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x9e> + 802843c: f04f 0800 mov.w r8, #0 + 8028440: f8bd a004 ldrh.w sl, [sp, #4] + 8028444: eb03 0008 add.w r0, r3, r8 + 8028448: 2800 cmp r0, #0 + 802844a: dc41 bgt.n 80284d0 <_ZN8touchgfx8LCD16bpp46TextureMapper_RGB565_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1d2> + 802844c: ea23 73e3 bic.w r3, r3, r3, asr #31 + 8028450: eb04 0443 add.w r4, r4, r3, lsl #1 + 8028454: 9b00 ldr r3, [sp, #0] + 8028456: 2b00 cmp r3, #0 + 8028458: f340 8095 ble.w 8028586 <_ZN8touchgfx8LCD16bpp46TextureMapper_RGB565_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x288> + 802845c: eeb7 7a00 vmov.f32 s14, #112 ; 0x3f800000 1.0 + 8028460: 9b0e ldr r3, [sp, #56] ; 0x38 + 8028462: ee30 0a04 vadd.f32 s0, s0, s8 + 8028466: ee70 0aa4 vadd.f32 s1, s1, s9 + 802846a: eef0 6a62 vmov.f32 s13, s5 + 802846e: eec7 7a00 vdiv.f32 s15, s14, s0 + 8028472: ee31 1a05 vadd.f32 s2, s2, s10 + 8028476: eefe 6ac8 vcvt.s32.f32 s13, s13, #16 + 802847a: edcd 6a0f vstr s13, [sp, #60] ; 0x3c + 802847e: eef0 6a43 vmov.f32 s13, s6 + 8028482: eefe 6ac8 vcvt.s32.f32 s13, s13, #16 + 8028486: edcd 6a10 vstr s13, [sp, #64] ; 0x40 + 802848a: ee20 7aa7 vmul.f32 s14, s1, s15 + 802848e: ee61 7a27 vmul.f32 s15, s2, s15 + 8028492: ee77 2a62 vsub.f32 s5, s14, s5 + 8028496: ee37 3ac3 vsub.f32 s6, s15, s6 + 802849a: eefe 2ac8 vcvt.s32.f32 s5, s5, #16 + 802849e: eebe 3ac8 vcvt.s32.f32 s6, s6, #16 + 80284a2: ee12 2a90 vmov r2, s5 + 80284a6: eef0 2a47 vmov.f32 s5, s14 + 80284aa: fb92 f3f3 sdiv r3, r2, r3 + 80284ae: ee13 2a10 vmov r2, s6 + 80284b2: 9311 str r3, [sp, #68] ; 0x44 + 80284b4: 9b0e ldr r3, [sp, #56] ; 0x38 + 80284b6: eeb0 3a67 vmov.f32 s6, s15 + 80284ba: fb92 f3f3 sdiv r3, r2, r3 + 80284be: 9312 str r3, [sp, #72] ; 0x48 + 80284c0: 9b00 ldr r3, [sp, #0] + 80284c2: 9a03 ldr r2, [sp, #12] + 80284c4: 3b01 subs r3, #1 + 80284c6: 9300 str r3, [sp, #0] + 80284c8: 9b0e ldr r3, [sp, #56] ; 0x38 + 80284ca: bf08 it eq + 80284cc: 4613 moveq r3, r2 + 80284ce: e72f b.n 8028330 <_ZN8touchgfx8LCD16bpp46TextureMapper_RGB565_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x32> + 80284d0: 140f asrs r7, r1, #16 + 80284d2: d451 bmi.n 8028578 <_ZN8touchgfx8LCD16bpp46TextureMapper_RGB565_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x27a> + 80284d4: f8de 5008 ldr.w r5, [lr, #8] + 80284d8: 42bd cmp r5, r7 + 80284da: dd4d ble.n 8028578 <_ZN8touchgfx8LCD16bpp46TextureMapper_RGB565_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x27a> + 80284dc: ea5f 4c22 movs.w ip, r2, asr #16 + 80284e0: d44a bmi.n 8028578 <_ZN8touchgfx8LCD16bpp46TextureMapper_RGB565_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x27a> + 80284e2: f8de 000c ldr.w r0, [lr, #12] + 80284e6: 4560 cmp r0, ip + 80284e8: dd46 ble.n 8028578 <_ZN8touchgfx8LCD16bpp46TextureMapper_RGB565_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x27a> + 80284ea: b22d sxth r5, r5 + 80284ec: 9802 ldr r0, [sp, #8] + 80284ee: fb0c 7505 mla r5, ip, r5, r7 + 80284f2: f830 0015 ldrh.w r0, [r0, r5, lsl #1] + 80284f6: f06f 0501 mvn.w r5, #1 + 80284fa: fb05 fb08 mul.w fp, r5, r8 + 80284fe: ea4f 2c20 mov.w ip, r0, asr #8 + 8028502: f834 500b ldrh.w r5, [r4, fp] + 8028506: f00c 0cf8 and.w ip, ip, #248 ; 0xf8 + 802850a: 122f asrs r7, r5, #8 + 802850c: ea4f 09e5 mov.w r9, r5, asr #3 + 8028510: f007 07f8 and.w r7, r7, #248 ; 0xf8 + 8028514: 00ed lsls r5, r5, #3 + 8028516: f009 09fc and.w r9, r9, #252 ; 0xfc + 802851a: fb17 f706 smulbb r7, r7, r6 + 802851e: b2ed uxtb r5, r5 + 8028520: fb19 f906 smulbb r9, r9, r6 + 8028524: fb0c 7c0a mla ip, ip, sl, r7 + 8028528: 10c7 asrs r7, r0, #3 + 802852a: fb15 f506 smulbb r5, r5, r6 + 802852e: 00c0 lsls r0, r0, #3 + 8028530: f007 07fc and.w r7, r7, #252 ; 0xfc + 8028534: fa1f fc8c uxth.w ip, ip + 8028538: b2c0 uxtb r0, r0 + 802853a: fb07 970a mla r7, r7, sl, r9 + 802853e: fb00 500a mla r0, r0, sl, r5 + 8028542: f10c 0501 add.w r5, ip, #1 + 8028546: b2bf uxth r7, r7 + 8028548: b280 uxth r0, r0 + 802854a: eb05 2c1c add.w ip, r5, ip, lsr #8 + 802854e: f107 0901 add.w r9, r7, #1 + 8028552: 1c45 adds r5, r0, #1 + 8028554: eb09 2917 add.w r9, r9, r7, lsr #8 + 8028558: f40c 4c78 and.w ip, ip, #63488 ; 0xf800 + 802855c: eb05 2510 add.w r5, r5, r0, lsr #8 + 8028560: ea4f 1959 mov.w r9, r9, lsr #5 + 8028564: f3c5 25c4 ubfx r5, r5, #11, #5 + 8028568: f409 69fc and.w r9, r9, #2016 ; 0x7e0 + 802856c: ea45 0c0c orr.w ip, r5, ip + 8028570: ea4c 0c09 orr.w ip, ip, r9 + 8028574: f824 c00b strh.w ip, [r4, fp] + 8028578: 9811 ldr r0, [sp, #68] ; 0x44 + 802857a: f108 38ff add.w r8, r8, #4294967295 + 802857e: 4401 add r1, r0 + 8028580: 9812 ldr r0, [sp, #72] ; 0x48 + 8028582: 4402 add r2, r0 + 8028584: e75e b.n 8028444 <_ZN8touchgfx8LCD16bpp46TextureMapper_RGB565_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x146> + 8028586: b005 add sp, #20 + 8028588: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + +0802858c <_ZN8touchgfx8LCD16bpp48TextureMapper_RGB565_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff>: + 802858c: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8028590: b085 sub sp, #20 + 8028592: 4693 mov fp, r2 + 8028594: eef7 6a00 vmov.f32 s13, #112 ; 0x3f800000 1.0 + 8028598: 9e13 ldr r6, [sp, #76] ; 0x4c + 802859a: 9d16 ldr r5, [sp, #88] ; 0x58 + 802859c: 6870 ldr r0, [r6, #4] + 802859e: 9101 str r1, [sp, #4] + 80285a0: e9dd 2414 ldrd r2, r4, [sp, #80] ; 0x50 + 80285a4: e9dd ec11 ldrd lr, ip, [sp, #68] ; 0x44 + 80285a8: fb00 2404 mla r4, r0, r4, r2 + 80285ac: 6832 ldr r2, [r6, #0] + 80285ae: eb02 0444 add.w r4, r2, r4, lsl #1 + 80285b2: 682a ldr r2, [r5, #0] + 80285b4: 9202 str r2, [sp, #8] + 80285b6: 9a01 ldr r2, [sp, #4] + 80285b8: 2a00 cmp r2, #0 + 80285ba: dc03 bgt.n 80285c4 <_ZN8touchgfx8LCD16bpp48TextureMapper_RGB565_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x38> + 80285bc: f1bb 0f00 cmp.w fp, #0 + 80285c0: f340 809a ble.w 80286f8 <_ZN8touchgfx8LCD16bpp48TextureMapper_RGB565_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x16c> + 80285c4: 9a0f ldr r2, [sp, #60] ; 0x3c + 80285c6: f9b5 9008 ldrsh.w r9, [r5, #8] + 80285ca: f502 4000 add.w r0, r2, #32768 ; 0x8000 + 80285ce: 9a10 ldr r2, [sp, #64] ; 0x40 + 80285d0: f9b5 800c ldrsh.w r8, [r5, #12] + 80285d4: f502 4200 add.w r2, r2, #32768 ; 0x8000 + 80285d8: 2b00 cmp r3, #0 + 80285da: dd0c ble.n 80285f6 <_ZN8touchgfx8LCD16bpp48TextureMapper_RGB565_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x6a> + 80285dc: 1406 asrs r6, r0, #16 + 80285de: d405 bmi.n 80285ec <_ZN8touchgfx8LCD16bpp48TextureMapper_RGB565_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x60> + 80285e0: 454e cmp r6, r9 + 80285e2: da03 bge.n 80285ec <_ZN8touchgfx8LCD16bpp48TextureMapper_RGB565_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x60> + 80285e4: 1416 asrs r6, r2, #16 + 80285e6: d401 bmi.n 80285ec <_ZN8touchgfx8LCD16bpp48TextureMapper_RGB565_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x60> + 80285e8: 4546 cmp r6, r8 + 80285ea: db05 blt.n 80285f8 <_ZN8touchgfx8LCD16bpp48TextureMapper_RGB565_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x6c> + 80285ec: 4470 add r0, lr + 80285ee: 4462 add r2, ip + 80285f0: 3b01 subs r3, #1 + 80285f2: 3402 adds r4, #2 + 80285f4: e7f0 b.n 80285d8 <_ZN8touchgfx8LCD16bpp48TextureMapper_RGB565_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x4c> + 80285f6: d00f beq.n 8028618 <_ZN8touchgfx8LCD16bpp48TextureMapper_RGB565_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x8c> + 80285f8: 1e5e subs r6, r3, #1 + 80285fa: fb0e 0706 mla r7, lr, r6, r0 + 80285fe: 143f asrs r7, r7, #16 + 8028600: d541 bpl.n 8028686 <_ZN8touchgfx8LCD16bpp48TextureMapper_RGB565_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0xfa> + 8028602: eb04 0643 add.w r6, r4, r3, lsl #1 + 8028606: 4698 mov r8, r3 + 8028608: 9603 str r6, [sp, #12] + 802860a: f1b8 0f00 cmp.w r8, #0 + 802860e: dc56 bgt.n 80286be <_ZN8touchgfx8LCD16bpp48TextureMapper_RGB565_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x132> + 8028610: ea23 73e3 bic.w r3, r3, r3, asr #31 + 8028614: eb04 0443 add.w r4, r4, r3, lsl #1 + 8028618: 9b01 ldr r3, [sp, #4] + 802861a: 2b00 cmp r3, #0 + 802861c: dd6c ble.n 80286f8 <_ZN8touchgfx8LCD16bpp48TextureMapper_RGB565_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x16c> + 802861e: ee30 0a04 vadd.f32 s0, s0, s8 + 8028622: 9b0e ldr r3, [sp, #56] ; 0x38 + 8028624: ee70 0aa4 vadd.f32 s1, s1, s9 + 8028628: eeb0 6a62 vmov.f32 s12, s5 + 802862c: eec6 7a80 vdiv.f32 s15, s13, s0 + 8028630: ee31 1a05 vadd.f32 s2, s2, s10 + 8028634: eebe 6ac8 vcvt.s32.f32 s12, s12, #16 + 8028638: ed8d 6a0f vstr s12, [sp, #60] ; 0x3c + 802863c: eeb0 6a43 vmov.f32 s12, s6 + 8028640: eebe 6ac8 vcvt.s32.f32 s12, s12, #16 + 8028644: ed8d 6a10 vstr s12, [sp, #64] ; 0x40 + 8028648: ee20 7aa7 vmul.f32 s14, s1, s15 + 802864c: ee61 7a27 vmul.f32 s15, s2, s15 + 8028650: ee77 2a62 vsub.f32 s5, s14, s5 + 8028654: ee37 3ac3 vsub.f32 s6, s15, s6 + 8028658: eefe 2ac8 vcvt.s32.f32 s5, s5, #16 + 802865c: eebe 3ac8 vcvt.s32.f32 s6, s6, #16 + 8028660: ee12 2a90 vmov r2, s5 + 8028664: eef0 2a47 vmov.f32 s5, s14 + 8028668: fb92 fef3 sdiv lr, r2, r3 + 802866c: ee13 2a10 vmov r2, s6 + 8028670: eeb0 3a67 vmov.f32 s6, s15 + 8028674: fb92 fcf3 sdiv ip, r2, r3 + 8028678: 9b01 ldr r3, [sp, #4] + 802867a: 3b01 subs r3, #1 + 802867c: 9301 str r3, [sp, #4] + 802867e: 9b0e ldr r3, [sp, #56] ; 0x38 + 8028680: bf08 it eq + 8028682: 465b moveq r3, fp + 8028684: e797 b.n 80285b6 <_ZN8touchgfx8LCD16bpp48TextureMapper_RGB565_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x2a> + 8028686: 454f cmp r7, r9 + 8028688: dabb bge.n 8028602 <_ZN8touchgfx8LCD16bpp48TextureMapper_RGB565_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x76> + 802868a: fb0c 2606 mla r6, ip, r6, r2 + 802868e: 1436 asrs r6, r6, #16 + 8028690: d4b7 bmi.n 8028602 <_ZN8touchgfx8LCD16bpp48TextureMapper_RGB565_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x76> + 8028692: 4546 cmp r6, r8 + 8028694: dab5 bge.n 8028602 <_ZN8touchgfx8LCD16bpp48TextureMapper_RGB565_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x76> + 8028696: 461e mov r6, r3 + 8028698: 46a0 mov r8, r4 + 802869a: 2e00 cmp r6, #0 + 802869c: ddb8 ble.n 8028610 <_ZN8touchgfx8LCD16bpp48TextureMapper_RGB565_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x84> + 802869e: 1417 asrs r7, r2, #16 + 80286a0: f9b5 a008 ldrsh.w sl, [r5, #8] + 80286a4: ea4f 4920 mov.w r9, r0, asr #16 + 80286a8: 9902 ldr r1, [sp, #8] + 80286aa: 4470 add r0, lr + 80286ac: 4462 add r2, ip + 80286ae: fb0a 9707 mla r7, sl, r7, r9 + 80286b2: 3e01 subs r6, #1 + 80286b4: f831 7017 ldrh.w r7, [r1, r7, lsl #1] + 80286b8: f828 7b02 strh.w r7, [r8], #2 + 80286bc: e7ed b.n 802869a <_ZN8touchgfx8LCD16bpp48TextureMapper_RGB565_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x10e> + 80286be: ea5f 4920 movs.w r9, r0, asr #16 + 80286c2: d414 bmi.n 80286ee <_ZN8touchgfx8LCD16bpp48TextureMapper_RGB565_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x162> + 80286c4: 68ae ldr r6, [r5, #8] + 80286c6: 454e cmp r6, r9 + 80286c8: dd11 ble.n 80286ee <_ZN8touchgfx8LCD16bpp48TextureMapper_RGB565_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x162> + 80286ca: ea5f 4a22 movs.w sl, r2, asr #16 + 80286ce: d40e bmi.n 80286ee <_ZN8touchgfx8LCD16bpp48TextureMapper_RGB565_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x162> + 80286d0: 68ef ldr r7, [r5, #12] + 80286d2: 4557 cmp r7, sl + 80286d4: dd0b ble.n 80286ee <_ZN8touchgfx8LCD16bpp48TextureMapper_RGB565_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x162> + 80286d6: b236 sxth r6, r6 + 80286d8: f06f 0101 mvn.w r1, #1 + 80286dc: 9f02 ldr r7, [sp, #8] + 80286de: fb0a 9606 mla r6, sl, r6, r9 + 80286e2: f837 7016 ldrh.w r7, [r7, r6, lsl #1] + 80286e6: fb01 f608 mul.w r6, r1, r8 + 80286ea: 9903 ldr r1, [sp, #12] + 80286ec: 538f strh r7, [r1, r6] + 80286ee: 4470 add r0, lr + 80286f0: 4462 add r2, ip + 80286f2: f108 38ff add.w r8, r8, #4294967295 + 80286f6: e788 b.n 802860a <_ZN8touchgfx8LCD16bpp48TextureMapper_RGB565_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x7e> + 80286f8: b005 add sp, #20 + 80286fa: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + +080286fe <_ZN8touchgfx8LCD16bpp51TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff>: + 80286fe: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8028702: b087 sub sp, #28 + 8028704: 468b mov fp, r1 + 8028706: eef7 6a00 vmov.f32 s13, #112 ; 0x3f800000 1.0 + 802870a: 9815 ldr r0, [sp, #84] ; 0x54 + 802870c: 9203 str r2, [sp, #12] + 802870e: f89d 2064 ldrb.w r2, [sp, #100] ; 0x64 + 8028712: 6841 ldr r1, [r0, #4] + 8028714: 9204 str r2, [sp, #16] + 8028716: f8dd 9060 ldr.w r9, [sp, #96] ; 0x60 + 802871a: e9dd 2516 ldrd r2, r5, [sp, #88] ; 0x58 + 802871e: fb01 2505 mla r5, r1, r5, r2 + 8028722: 6802 ldr r2, [r0, #0] + 8028724: eb02 0545 add.w r5, r2, r5, lsl #1 + 8028728: f8d9 2000 ldr.w r2, [r9] + 802872c: 9201 str r2, [sp, #4] + 802872e: f1bb 0f00 cmp.w fp, #0 + 8028732: dc03 bgt.n 802873c <_ZN8touchgfx8LCD16bpp51TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x3e> + 8028734: 9a03 ldr r2, [sp, #12] + 8028736: 2a00 cmp r2, #0 + 8028738: f340 8158 ble.w 80289ec <_ZN8touchgfx8LCD16bpp51TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x2ee> + 802873c: 9a11 ldr r2, [sp, #68] ; 0x44 + 802873e: f9b9 7008 ldrsh.w r7, [r9, #8] + 8028742: f502 4000 add.w r0, r2, #32768 ; 0x8000 + 8028746: 9a12 ldr r2, [sp, #72] ; 0x48 + 8028748: f9b9 600c ldrsh.w r6, [r9, #12] + 802874c: f502 4100 add.w r1, r2, #32768 ; 0x8000 + 8028750: 2b00 cmp r3, #0 + 8028752: dd0e ble.n 8028772 <_ZN8touchgfx8LCD16bpp51TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x74> + 8028754: 1402 asrs r2, r0, #16 + 8028756: d405 bmi.n 8028764 <_ZN8touchgfx8LCD16bpp51TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x66> + 8028758: 42ba cmp r2, r7 + 802875a: da03 bge.n 8028764 <_ZN8touchgfx8LCD16bpp51TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x66> + 802875c: 140a asrs r2, r1, #16 + 802875e: d401 bmi.n 8028764 <_ZN8touchgfx8LCD16bpp51TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x66> + 8028760: 42b2 cmp r2, r6 + 8028762: db07 blt.n 8028774 <_ZN8touchgfx8LCD16bpp51TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x76> + 8028764: 9a13 ldr r2, [sp, #76] ; 0x4c + 8028766: 3b01 subs r3, #1 + 8028768: 3502 adds r5, #2 + 802876a: 4410 add r0, r2 + 802876c: 9a14 ldr r2, [sp, #80] ; 0x50 + 802876e: 4411 add r1, r2 + 8028770: e7ee b.n 8028750 <_ZN8touchgfx8LCD16bpp51TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x52> + 8028772: d017 beq.n 80287a4 <_ZN8touchgfx8LCD16bpp51TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0xa6> + 8028774: 1e5a subs r2, r3, #1 + 8028776: 9c13 ldr r4, [sp, #76] ; 0x4c + 8028778: fb04 0402 mla r4, r4, r2, r0 + 802877c: 1424 asrs r4, r4, #16 + 802877e: d409 bmi.n 8028794 <_ZN8touchgfx8LCD16bpp51TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x96> + 8028780: 42bc cmp r4, r7 + 8028782: da07 bge.n 8028794 <_ZN8touchgfx8LCD16bpp51TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x96> + 8028784: 9c14 ldr r4, [sp, #80] ; 0x50 + 8028786: fb04 1202 mla r2, r4, r2, r1 + 802878a: 1412 asrs r2, r2, #16 + 802878c: d402 bmi.n 8028794 <_ZN8touchgfx8LCD16bpp51TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x96> + 802878e: 42b2 cmp r2, r6 + 8028790: f2c0 80bf blt.w 8028912 <_ZN8touchgfx8LCD16bpp51TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x214> + 8028794: 2700 movs r7, #0 + 8028796: 19da adds r2, r3, r7 + 8028798: 2a00 cmp r2, #0 + 802879a: dc3e bgt.n 802881a <_ZN8touchgfx8LCD16bpp51TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x11c> + 802879c: ea23 73e3 bic.w r3, r3, r3, asr #31 + 80287a0: eb05 0543 add.w r5, r5, r3, lsl #1 + 80287a4: f1bb 0f00 cmp.w fp, #0 + 80287a8: f340 8120 ble.w 80289ec <_ZN8touchgfx8LCD16bpp51TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x2ee> + 80287ac: ee30 0a04 vadd.f32 s0, s0, s8 + 80287b0: 9b10 ldr r3, [sp, #64] ; 0x40 + 80287b2: ee70 0aa4 vadd.f32 s1, s1, s9 + 80287b6: f1bb 0b01 subs.w fp, fp, #1 + 80287ba: eeb0 6a62 vmov.f32 s12, s5 + 80287be: eec6 7a80 vdiv.f32 s15, s13, s0 + 80287c2: ee31 1a05 vadd.f32 s2, s2, s10 + 80287c6: eebe 6ac8 vcvt.s32.f32 s12, s12, #16 + 80287ca: ed8d 6a11 vstr s12, [sp, #68] ; 0x44 + 80287ce: eeb0 6a43 vmov.f32 s12, s6 + 80287d2: eebe 6ac8 vcvt.s32.f32 s12, s12, #16 + 80287d6: ed8d 6a12 vstr s12, [sp, #72] ; 0x48 + 80287da: ee20 7aa7 vmul.f32 s14, s1, s15 + 80287de: ee61 7a27 vmul.f32 s15, s2, s15 + 80287e2: ee77 2a62 vsub.f32 s5, s14, s5 + 80287e6: ee37 3ac3 vsub.f32 s6, s15, s6 + 80287ea: eefe 2ac8 vcvt.s32.f32 s5, s5, #16 + 80287ee: eebe 3ac8 vcvt.s32.f32 s6, s6, #16 + 80287f2: ee12 2a90 vmov r2, s5 + 80287f6: eef0 2a47 vmov.f32 s5, s14 + 80287fa: fb92 f3f3 sdiv r3, r2, r3 + 80287fe: ee13 2a10 vmov r2, s6 + 8028802: 9313 str r3, [sp, #76] ; 0x4c + 8028804: 9b10 ldr r3, [sp, #64] ; 0x40 + 8028806: eeb0 3a67 vmov.f32 s6, s15 + 802880a: fb92 f3f3 sdiv r3, r2, r3 + 802880e: 9a03 ldr r2, [sp, #12] + 8028810: 9314 str r3, [sp, #80] ; 0x50 + 8028812: 9b10 ldr r3, [sp, #64] ; 0x40 + 8028814: bf08 it eq + 8028816: 4613 moveq r3, r2 + 8028818: e789 b.n 802872e <_ZN8touchgfx8LCD16bpp51TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x30> + 802881a: 1406 asrs r6, r0, #16 + 802881c: d42d bmi.n 802887a <_ZN8touchgfx8LCD16bpp51TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x17c> + 802881e: f8d9 4008 ldr.w r4, [r9, #8] + 8028822: 42b4 cmp r4, r6 + 8028824: dd29 ble.n 802887a <_ZN8touchgfx8LCD16bpp51TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x17c> + 8028826: ea5f 4c21 movs.w ip, r1, asr #16 + 802882a: d426 bmi.n 802887a <_ZN8touchgfx8LCD16bpp51TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x17c> + 802882c: f8d9 200c ldr.w r2, [r9, #12] + 8028830: 4562 cmp r2, ip + 8028832: dd22 ble.n 802887a <_ZN8touchgfx8LCD16bpp51TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x17c> + 8028834: b224 sxth r4, r4 + 8028836: 9a01 ldr r2, [sp, #4] + 8028838: fb0c 6404 mla r4, ip, r4, r6 + 802883c: f852 4024 ldr.w r4, [r2, r4, lsl #2] + 8028840: 0e22 lsrs r2, r4, #24 + 8028842: d01a beq.n 802887a <_ZN8touchgfx8LCD16bpp51TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x17c> + 8028844: 9e04 ldr r6, [sp, #16] + 8028846: 4372 muls r2, r6 + 8028848: 1c56 adds r6, r2, #1 + 802884a: eb06 2222 add.w r2, r6, r2, asr #8 + 802884e: 0a26 lsrs r6, r4, #8 + 8028850: 1212 asrs r2, r2, #8 + 8028852: 9605 str r6, [sp, #20] + 8028854: 2aff cmp r2, #255 ; 0xff + 8028856: d116 bne.n 8028886 <_ZN8touchgfx8LCD16bpp51TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x188> + 8028858: f06f 0201 mvn.w r2, #1 + 802885c: f426 66ff bic.w r6, r6, #2040 ; 0x7f8 + 8028860: fb02 fc07 mul.w ip, r2, r7 + 8028864: 0962 lsrs r2, r4, #5 + 8028866: f026 0607 bic.w r6, r6, #7 + 802886a: f3c4 04c4 ubfx r4, r4, #3, #5 + 802886e: f402 62fc and.w r2, r2, #2016 ; 0x7e0 + 8028872: 4316 orrs r6, r2 + 8028874: 4326 orrs r6, r4 + 8028876: f825 600c strh.w r6, [r5, ip] + 802887a: 9a13 ldr r2, [sp, #76] ; 0x4c + 802887c: 3f01 subs r7, #1 + 802887e: 4410 add r0, r2 + 8028880: 9a14 ldr r2, [sp, #80] ; 0x50 + 8028882: 4411 add r1, r2 + 8028884: e787 b.n 8028796 <_ZN8touchgfx8LCD16bpp51TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x98> + 8028886: f06f 0601 mvn.w r6, #1 + 802888a: fa1f fa82 uxth.w sl, r2 + 802888e: f3c4 4c07 ubfx ip, r4, #16, #8 + 8028892: 43d2 mvns r2, r2 + 8028894: 437e muls r6, r7 + 8028896: b2e4 uxtb r4, r4 + 8028898: fb1c fc0a smulbb ip, ip, sl + 802889c: b2d2 uxtb r2, r2 + 802889e: f835 8006 ldrh.w r8, [r5, r6] + 80288a2: fb14 f40a smulbb r4, r4, sl + 80288a6: 9602 str r6, [sp, #8] + 80288a8: ea4f 2e28 mov.w lr, r8, asr #8 + 80288ac: f89d 6014 ldrb.w r6, [sp, #20] + 80288b0: fb16 f60a smulbb r6, r6, sl + 80288b4: f00e 0ef8 and.w lr, lr, #248 ; 0xf8 + 80288b8: fb0e ce02 mla lr, lr, r2, ip + 80288bc: ea4f 0ce8 mov.w ip, r8, asr #3 + 80288c0: ea4f 08c8 mov.w r8, r8, lsl #3 + 80288c4: fa1f fe8e uxth.w lr, lr + 80288c8: f00c 0cfc and.w ip, ip, #252 ; 0xfc + 80288cc: fa5f f888 uxtb.w r8, r8 + 80288d0: fb0c 6c02 mla ip, ip, r2, r6 + 80288d4: fb08 4402 mla r4, r8, r2, r4 + 80288d8: f10e 0201 add.w r2, lr, #1 + 80288dc: fa1f fc8c uxth.w ip, ip + 80288e0: b2a4 uxth r4, r4 + 80288e2: eb02 2e1e add.w lr, r2, lr, lsr #8 + 80288e6: 9a02 ldr r2, [sp, #8] + 80288e8: 1c66 adds r6, r4, #1 + 80288ea: f40e 4e78 and.w lr, lr, #63488 ; 0xf800 + 80288ee: eb06 2614 add.w r6, r6, r4, lsr #8 + 80288f2: f3c6 26c4 ubfx r6, r6, #11, #5 + 80288f6: ea46 0e0e orr.w lr, r6, lr + 80288fa: f10c 0601 add.w r6, ip, #1 + 80288fe: eb06 261c add.w r6, r6, ip, lsr #8 + 8028902: 0976 lsrs r6, r6, #5 + 8028904: f406 66fc and.w r6, r6, #2016 ; 0x7e0 + 8028908: ea4e 0e06 orr.w lr, lr, r6 + 802890c: f825 e002 strh.w lr, [r5, r2] + 8028910: e7b3 b.n 802887a <_ZN8touchgfx8LCD16bpp51TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x17c> + 8028912: f04f 0800 mov.w r8, #0 + 8028916: eba3 0208 sub.w r2, r3, r8 + 802891a: 2a00 cmp r2, #0 + 802891c: f77f af3e ble.w 802879c <_ZN8touchgfx8LCD16bpp51TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x9e> + 8028920: 1404 asrs r4, r0, #16 + 8028922: f9b9 6008 ldrsh.w r6, [r9, #8] + 8028926: 140a asrs r2, r1, #16 + 8028928: fb06 4202 mla r2, r6, r2, r4 + 802892c: 9c01 ldr r4, [sp, #4] + 802892e: f854 4022 ldr.w r4, [r4, r2, lsl #2] + 8028932: 0e22 lsrs r2, r4, #24 + 8028934: d015 beq.n 8028962 <_ZN8touchgfx8LCD16bpp51TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x264> + 8028936: 9e04 ldr r6, [sp, #16] + 8028938: 4372 muls r2, r6 + 802893a: 1c56 adds r6, r2, #1 + 802893c: eb06 2222 add.w r2, r6, r2, asr #8 + 8028940: 0a26 lsrs r6, r4, #8 + 8028942: 1212 asrs r2, r2, #8 + 8028944: 2aff cmp r2, #255 ; 0xff + 8028946: d113 bne.n 8028970 <_ZN8touchgfx8LCD16bpp51TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x272> + 8028948: 0962 lsrs r2, r4, #5 + 802894a: f426 66ff bic.w r6, r6, #2040 ; 0x7f8 + 802894e: f3c4 04c4 ubfx r4, r4, #3, #5 + 8028952: f402 62fc and.w r2, r2, #2016 ; 0x7e0 + 8028956: f026 0607 bic.w r6, r6, #7 + 802895a: 4316 orrs r6, r2 + 802895c: 4326 orrs r6, r4 + 802895e: f825 6018 strh.w r6, [r5, r8, lsl #1] + 8028962: 9a13 ldr r2, [sp, #76] ; 0x4c + 8028964: f108 0801 add.w r8, r8, #1 + 8028968: 4410 add r0, r2 + 802896a: 9a14 ldr r2, [sp, #80] ; 0x50 + 802896c: 4411 add r1, r2 + 802896e: e7d2 b.n 8028916 <_ZN8touchgfx8LCD16bpp51TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x218> + 8028970: f835 e018 ldrh.w lr, [r5, r8, lsl #1] + 8028974: fa1f fa82 uxth.w sl, r2 + 8028978: f3c4 4707 ubfx r7, r4, #16, #8 + 802897c: 43d2 mvns r2, r2 + 802897e: ea4f 2c2e mov.w ip, lr, asr #8 + 8028982: fb17 f70a smulbb r7, r7, sl + 8028986: b2d2 uxtb r2, r2 + 8028988: f00c 0cf8 and.w ip, ip, #248 ; 0xf8 + 802898c: b2e4 uxtb r4, r4 + 802898e: b2f6 uxtb r6, r6 + 8028990: fb0c 7c02 mla ip, ip, r2, r7 + 8028994: ea4f 07ee mov.w r7, lr, asr #3 + 8028998: fb14 f40a smulbb r4, r4, sl + 802899c: ea4f 0ece mov.w lr, lr, lsl #3 + 80289a0: fa1f fc8c uxth.w ip, ip + 80289a4: f007 07fc and.w r7, r7, #252 ; 0xfc + 80289a8: fb16 f60a smulbb r6, r6, sl + 80289ac: fa5f fe8e uxtb.w lr, lr + 80289b0: fb0e 4402 mla r4, lr, r2, r4 + 80289b4: fb07 6702 mla r7, r7, r2, r6 + 80289b8: f10c 0201 add.w r2, ip, #1 + 80289bc: b2a4 uxth r4, r4 + 80289be: eb02 2c1c add.w ip, r2, ip, lsr #8 + 80289c2: 1c66 adds r6, r4, #1 + 80289c4: b2bf uxth r7, r7 + 80289c6: f40c 4c78 and.w ip, ip, #63488 ; 0xf800 + 80289ca: eb06 2614 add.w r6, r6, r4, lsr #8 + 80289ce: f3c6 26c4 ubfx r6, r6, #11, #5 + 80289d2: ea46 0c0c orr.w ip, r6, ip + 80289d6: 1c7e adds r6, r7, #1 + 80289d8: eb06 2617 add.w r6, r6, r7, lsr #8 + 80289dc: 0976 lsrs r6, r6, #5 + 80289de: f406 66fc and.w r6, r6, #2016 ; 0x7e0 + 80289e2: ea4c 0c06 orr.w ip, ip, r6 + 80289e6: f825 c018 strh.w ip, [r5, r8, lsl #1] + 80289ea: e7ba b.n 8028962 <_ZN8touchgfx8LCD16bpp51TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x264> + 80289ec: b007 add sp, #28 + 80289ee: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + ... + +080289f4 <_ZN8touchgfx8LCD16bpp53TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff>: + 80289f4: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 80289f8: b085 sub sp, #20 + 80289fa: 468b mov fp, r1 + 80289fc: eef7 6a00 vmov.f32 s13, #112 ; 0x3f800000 1.0 + 8028a00: 9813 ldr r0, [sp, #76] ; 0x4c + 8028a02: 9203 str r2, [sp, #12] + 8028a04: 6841 ldr r1, [r0, #4] + 8028a06: f8dd 8058 ldr.w r8, [sp, #88] ; 0x58 + 8028a0a: e9dd 2414 ldrd r2, r4, [sp, #80] ; 0x50 + 8028a0e: fb01 2404 mla r4, r1, r4, r2 + 8028a12: 6802 ldr r2, [r0, #0] + 8028a14: eb02 0444 add.w r4, r2, r4, lsl #1 + 8028a18: f8d8 2000 ldr.w r2, [r8] + 8028a1c: 9201 str r2, [sp, #4] + 8028a1e: f1bb 0f00 cmp.w fp, #0 + 8028a22: dc03 bgt.n 8028a2c <_ZN8touchgfx8LCD16bpp53TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x38> + 8028a24: 9a03 ldr r2, [sp, #12] + 8028a26: 2a00 cmp r2, #0 + 8028a28: f340 814f ble.w 8028cca <_ZN8touchgfx8LCD16bpp53TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x2d6> + 8028a2c: 9a0f ldr r2, [sp, #60] ; 0x3c + 8028a2e: f9b8 7008 ldrsh.w r7, [r8, #8] + 8028a32: f502 4100 add.w r1, r2, #32768 ; 0x8000 + 8028a36: 9a10 ldr r2, [sp, #64] ; 0x40 + 8028a38: f9b8 600c ldrsh.w r6, [r8, #12] + 8028a3c: f502 4200 add.w r2, r2, #32768 ; 0x8000 + 8028a40: 2b00 cmp r3, #0 + 8028a42: dd0e ble.n 8028a62 <_ZN8touchgfx8LCD16bpp53TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x6e> + 8028a44: 1408 asrs r0, r1, #16 + 8028a46: d405 bmi.n 8028a54 <_ZN8touchgfx8LCD16bpp53TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x60> + 8028a48: 42b8 cmp r0, r7 + 8028a4a: da03 bge.n 8028a54 <_ZN8touchgfx8LCD16bpp53TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x60> + 8028a4c: 1410 asrs r0, r2, #16 + 8028a4e: d401 bmi.n 8028a54 <_ZN8touchgfx8LCD16bpp53TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x60> + 8028a50: 42b0 cmp r0, r6 + 8028a52: db07 blt.n 8028a64 <_ZN8touchgfx8LCD16bpp53TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x70> + 8028a54: 9811 ldr r0, [sp, #68] ; 0x44 + 8028a56: 3b01 subs r3, #1 + 8028a58: 3402 adds r4, #2 + 8028a5a: 4401 add r1, r0 + 8028a5c: 9812 ldr r0, [sp, #72] ; 0x48 + 8028a5e: 4402 add r2, r0 + 8028a60: e7ee b.n 8028a40 <_ZN8touchgfx8LCD16bpp53TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x4c> + 8028a62: d017 beq.n 8028a94 <_ZN8touchgfx8LCD16bpp53TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0xa0> + 8028a64: 1e58 subs r0, r3, #1 + 8028a66: 9d11 ldr r5, [sp, #68] ; 0x44 + 8028a68: fb05 1500 mla r5, r5, r0, r1 + 8028a6c: 142d asrs r5, r5, #16 + 8028a6e: d409 bmi.n 8028a84 <_ZN8touchgfx8LCD16bpp53TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x90> + 8028a70: 42bd cmp r5, r7 + 8028a72: da07 bge.n 8028a84 <_ZN8touchgfx8LCD16bpp53TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x90> + 8028a74: 9d12 ldr r5, [sp, #72] ; 0x48 + 8028a76: fb05 2000 mla r0, r5, r0, r2 + 8028a7a: 1400 asrs r0, r0, #16 + 8028a7c: d402 bmi.n 8028a84 <_ZN8touchgfx8LCD16bpp53TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x90> + 8028a7e: 42b0 cmp r0, r6 + 8028a80: f2c0 80ba blt.w 8028bf8 <_ZN8touchgfx8LCD16bpp53TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x204> + 8028a84: 2600 movs r6, #0 + 8028a86: 1998 adds r0, r3, r6 + 8028a88: 2800 cmp r0, #0 + 8028a8a: dc3e bgt.n 8028b0a <_ZN8touchgfx8LCD16bpp53TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x116> + 8028a8c: ea23 73e3 bic.w r3, r3, r3, asr #31 + 8028a90: eb04 0443 add.w r4, r4, r3, lsl #1 + 8028a94: f1bb 0f00 cmp.w fp, #0 + 8028a98: f340 8117 ble.w 8028cca <_ZN8touchgfx8LCD16bpp53TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x2d6> + 8028a9c: ee30 0a04 vadd.f32 s0, s0, s8 + 8028aa0: 9b0e ldr r3, [sp, #56] ; 0x38 + 8028aa2: ee70 0aa4 vadd.f32 s1, s1, s9 + 8028aa6: f1bb 0b01 subs.w fp, fp, #1 + 8028aaa: eeb0 6a62 vmov.f32 s12, s5 + 8028aae: eec6 7a80 vdiv.f32 s15, s13, s0 + 8028ab2: ee31 1a05 vadd.f32 s2, s2, s10 + 8028ab6: eebe 6ac8 vcvt.s32.f32 s12, s12, #16 + 8028aba: ed8d 6a0f vstr s12, [sp, #60] ; 0x3c + 8028abe: eeb0 6a43 vmov.f32 s12, s6 + 8028ac2: eebe 6ac8 vcvt.s32.f32 s12, s12, #16 + 8028ac6: ed8d 6a10 vstr s12, [sp, #64] ; 0x40 + 8028aca: ee20 7aa7 vmul.f32 s14, s1, s15 + 8028ace: ee61 7a27 vmul.f32 s15, s2, s15 + 8028ad2: ee77 2a62 vsub.f32 s5, s14, s5 + 8028ad6: ee37 3ac3 vsub.f32 s6, s15, s6 + 8028ada: eefe 2ac8 vcvt.s32.f32 s5, s5, #16 + 8028ade: eebe 3ac8 vcvt.s32.f32 s6, s6, #16 + 8028ae2: ee12 2a90 vmov r2, s5 + 8028ae6: eef0 2a47 vmov.f32 s5, s14 + 8028aea: fb92 f3f3 sdiv r3, r2, r3 + 8028aee: ee13 2a10 vmov r2, s6 + 8028af2: 9311 str r3, [sp, #68] ; 0x44 + 8028af4: 9b0e ldr r3, [sp, #56] ; 0x38 + 8028af6: eeb0 3a67 vmov.f32 s6, s15 + 8028afa: fb92 f3f3 sdiv r3, r2, r3 + 8028afe: 9a03 ldr r2, [sp, #12] + 8028b00: 9312 str r3, [sp, #72] ; 0x48 + 8028b02: 9b0e ldr r3, [sp, #56] ; 0x38 + 8028b04: bf08 it eq + 8028b06: 4613 moveq r3, r2 + 8028b08: e789 b.n 8028a1e <_ZN8touchgfx8LCD16bpp53TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x2a> + 8028b0a: 140f asrs r7, r1, #16 + 8028b0c: d424 bmi.n 8028b58 <_ZN8touchgfx8LCD16bpp53TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x164> + 8028b0e: f8d8 5008 ldr.w r5, [r8, #8] + 8028b12: 42bd cmp r5, r7 + 8028b14: dd20 ble.n 8028b58 <_ZN8touchgfx8LCD16bpp53TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x164> + 8028b16: ea5f 4c22 movs.w ip, r2, asr #16 + 8028b1a: d41d bmi.n 8028b58 <_ZN8touchgfx8LCD16bpp53TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x164> + 8028b1c: f8d8 000c ldr.w r0, [r8, #12] + 8028b20: 4560 cmp r0, ip + 8028b22: dd19 ble.n 8028b58 <_ZN8touchgfx8LCD16bpp53TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x164> + 8028b24: b22d sxth r5, r5 + 8028b26: 9801 ldr r0, [sp, #4] + 8028b28: fb0c 7505 mla r5, ip, r5, r7 + 8028b2c: f850 0025 ldr.w r0, [r0, r5, lsl #2] + 8028b30: 0e07 lsrs r7, r0, #24 + 8028b32: 2fff cmp r7, #255 ; 0xff + 8028b34: d116 bne.n 8028b64 <_ZN8touchgfx8LCD16bpp53TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x170> + 8028b36: f06f 0501 mvn.w r5, #1 + 8028b3a: fb05 f706 mul.w r7, r5, r6 + 8028b3e: f2a5 75fe subw r5, r5, #2046 ; 0x7fe + 8028b42: ea05 2c10 and.w ip, r5, r0, lsr #8 + 8028b46: 0945 lsrs r5, r0, #5 + 8028b48: f3c0 00c4 ubfx r0, r0, #3, #5 + 8028b4c: f405 65fc and.w r5, r5, #2016 ; 0x7e0 + 8028b50: ea4c 0505 orr.w r5, ip, r5 + 8028b54: 4305 orrs r5, r0 + 8028b56: 53e5 strh r5, [r4, r7] + 8028b58: 9811 ldr r0, [sp, #68] ; 0x44 + 8028b5a: 3e01 subs r6, #1 + 8028b5c: 4401 add r1, r0 + 8028b5e: 9812 ldr r0, [sp, #72] ; 0x48 + 8028b60: 4402 add r2, r0 + 8028b62: e790 b.n 8028a86 <_ZN8touchgfx8LCD16bpp53TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x92> + 8028b64: b2fd uxtb r5, r7 + 8028b66: 2f00 cmp r7, #0 + 8028b68: d0f6 beq.n 8028b58 <_ZN8touchgfx8LCD16bpp53TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x164> + 8028b6a: f06f 0701 mvn.w r7, #1 + 8028b6e: fa1f f985 uxth.w r9, r5 + 8028b72: 43ed mvns r5, r5 + 8028b74: f3c0 2a07 ubfx sl, r0, #8, #8 + 8028b78: 4377 muls r7, r6 + 8028b7a: fb1a fa09 smulbb sl, sl, r9 + 8028b7e: b2ed uxtb r5, r5 + 8028b80: f834 e007 ldrh.w lr, [r4, r7] + 8028b84: 9702 str r7, [sp, #8] + 8028b86: f3c0 4707 ubfx r7, r0, #16, #8 + 8028b8a: ea4f 2c2e mov.w ip, lr, asr #8 + 8028b8e: fb17 f709 smulbb r7, r7, r9 + 8028b92: b2c0 uxtb r0, r0 + 8028b94: f00c 0cf8 and.w ip, ip, #248 ; 0xf8 + 8028b98: fb10 f009 smulbb r0, r0, r9 + 8028b9c: fb0c 7c05 mla ip, ip, r5, r7 + 8028ba0: ea4f 07ee mov.w r7, lr, asr #3 + 8028ba4: ea4f 0ece mov.w lr, lr, lsl #3 + 8028ba8: fa1f fc8c uxth.w ip, ip + 8028bac: f007 07fc and.w r7, r7, #252 ; 0xfc + 8028bb0: fa5f fe8e uxtb.w lr, lr + 8028bb4: fb07 a705 mla r7, r7, r5, sl + 8028bb8: fb0e 0005 mla r0, lr, r5, r0 + 8028bbc: f10c 0501 add.w r5, ip, #1 + 8028bc0: b2bf uxth r7, r7 + 8028bc2: b280 uxth r0, r0 + 8028bc4: eb05 2c1c add.w ip, r5, ip, lsr #8 + 8028bc8: f100 0a01 add.w sl, r0, #1 + 8028bcc: f40c 4c78 and.w ip, ip, #63488 ; 0xf800 + 8028bd0: eb0a 2a10 add.w sl, sl, r0, lsr #8 + 8028bd4: 9802 ldr r0, [sp, #8] + 8028bd6: f3ca 2ac4 ubfx sl, sl, #11, #5 + 8028bda: ea4a 0c0c orr.w ip, sl, ip + 8028bde: f107 0a01 add.w sl, r7, #1 + 8028be2: eb0a 2a17 add.w sl, sl, r7, lsr #8 + 8028be6: ea4f 1a5a mov.w sl, sl, lsr #5 + 8028bea: f40a 6afc and.w sl, sl, #2016 ; 0x7e0 + 8028bee: ea4c 0c0a orr.w ip, ip, sl + 8028bf2: f824 c000 strh.w ip, [r4, r0] + 8028bf6: e7af b.n 8028b58 <_ZN8touchgfx8LCD16bpp53TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x164> + 8028bf8: f04f 0e00 mov.w lr, #0 + 8028bfc: eba3 000e sub.w r0, r3, lr + 8028c00: 2800 cmp r0, #0 + 8028c02: f77f af43 ble.w 8028a8c <_ZN8touchgfx8LCD16bpp53TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x98> + 8028c06: f9b8 6008 ldrsh.w r6, [r8, #8] + 8028c0a: 140d asrs r5, r1, #16 + 8028c0c: 1410 asrs r0, r2, #16 + 8028c0e: fb06 5000 mla r0, r6, r0, r5 + 8028c12: 9d01 ldr r5, [sp, #4] + 8028c14: f855 5020 ldr.w r5, [r5, r0, lsl #2] + 8028c18: 0e2e lsrs r6, r5, #24 + 8028c1a: 2eff cmp r6, #255 ; 0xff + 8028c1c: d112 bne.n 8028c44 <_ZN8touchgfx8LCD16bpp53TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x250> + 8028c1e: 482c ldr r0, [pc, #176] ; (8028cd0 <_ZN8touchgfx8LCD16bpp53TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x2dc>) + 8028c20: ea00 2615 and.w r6, r0, r5, lsr #8 + 8028c24: 0968 lsrs r0, r5, #5 + 8028c26: f3c5 05c4 ubfx r5, r5, #3, #5 + 8028c2a: f400 60fc and.w r0, r0, #2016 ; 0x7e0 + 8028c2e: 4330 orrs r0, r6 + 8028c30: 4328 orrs r0, r5 + 8028c32: f824 001e strh.w r0, [r4, lr, lsl #1] + 8028c36: 9811 ldr r0, [sp, #68] ; 0x44 + 8028c38: f10e 0e01 add.w lr, lr, #1 + 8028c3c: 4401 add r1, r0 + 8028c3e: 9812 ldr r0, [sp, #72] ; 0x48 + 8028c40: 4402 add r2, r0 + 8028c42: e7db b.n 8028bfc <_ZN8touchgfx8LCD16bpp53TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x208> + 8028c44: b2f0 uxtb r0, r6 + 8028c46: 2e00 cmp r6, #0 + 8028c48: d0f5 beq.n 8028c36 <_ZN8touchgfx8LCD16bpp53TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x242> + 8028c4a: f834 c01e ldrh.w ip, [r4, lr, lsl #1] + 8028c4e: fa1f f980 uxth.w r9, r0 + 8028c52: f3c5 4607 ubfx r6, r5, #16, #8 + 8028c56: 43c0 mvns r0, r0 + 8028c58: ea4f 272c mov.w r7, ip, asr #8 + 8028c5c: f3c5 2a07 ubfx sl, r5, #8, #8 + 8028c60: fb16 f609 smulbb r6, r6, r9 + 8028c64: b2c0 uxtb r0, r0 + 8028c66: f007 07f8 and.w r7, r7, #248 ; 0xf8 + 8028c6a: b2ed uxtb r5, r5 + 8028c6c: fb1a fa09 smulbb sl, sl, r9 + 8028c70: fb07 6700 mla r7, r7, r0, r6 + 8028c74: ea4f 06ec mov.w r6, ip, asr #3 + 8028c78: fb15 f509 smulbb r5, r5, r9 + 8028c7c: ea4f 0ccc mov.w ip, ip, lsl #3 + 8028c80: b2bf uxth r7, r7 + 8028c82: f006 06fc and.w r6, r6, #252 ; 0xfc + 8028c86: fa5f fc8c uxtb.w ip, ip + 8028c8a: fb06 a600 mla r6, r6, r0, sl + 8028c8e: fb0c 5500 mla r5, ip, r0, r5 + 8028c92: 1c78 adds r0, r7, #1 + 8028c94: b2b6 uxth r6, r6 + 8028c96: b2ad uxth r5, r5 + 8028c98: eb00 2717 add.w r7, r0, r7, lsr #8 + 8028c9c: f105 0a01 add.w sl, r5, #1 + 8028ca0: f407 4778 and.w r7, r7, #63488 ; 0xf800 + 8028ca4: eb0a 2a15 add.w sl, sl, r5, lsr #8 + 8028ca8: f3ca 2ac4 ubfx sl, sl, #11, #5 + 8028cac: ea4a 0707 orr.w r7, sl, r7 + 8028cb0: f106 0a01 add.w sl, r6, #1 + 8028cb4: eb0a 2a16 add.w sl, sl, r6, lsr #8 + 8028cb8: ea4f 1a5a mov.w sl, sl, lsr #5 + 8028cbc: f40a 6afc and.w sl, sl, #2016 ; 0x7e0 + 8028cc0: ea47 070a orr.w r7, r7, sl + 8028cc4: f824 701e strh.w r7, [r4, lr, lsl #1] + 8028cc8: e7b5 b.n 8028c36 <_ZN8touchgfx8LCD16bpp53TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x242> + 8028cca: b005 add sp, #20 + 8028ccc: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 8028cd0: fffff800 .word 0xfffff800 + +08028cd4 <_ZN8touchgfx8LCD16bpp35TextureMapper_A4_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff>: + 8028cd4: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8028cd8: b087 sub sp, #28 + 8028cda: 468b mov fp, r1 + 8028cdc: eef7 6a00 vmov.f32 s13, #112 ; 0x3f800000 1.0 + 8028ce0: 9815 ldr r0, [sp, #84] ; 0x54 + 8028ce2: 9203 str r2, [sp, #12] + 8028ce4: f89d 2064 ldrb.w r2, [sp, #100] ; 0x64 + 8028ce8: 6841 ldr r1, [r0, #4] + 8028cea: 9204 str r2, [sp, #16] + 8028cec: f8dd 9060 ldr.w r9, [sp, #96] ; 0x60 + 8028cf0: e9dd 2416 ldrd r2, r4, [sp, #88] ; 0x58 + 8028cf4: fb01 2404 mla r4, r1, r4, r2 + 8028cf8: 6802 ldr r2, [r0, #0] + 8028cfa: eb02 0444 add.w r4, r2, r4, lsl #1 + 8028cfe: f8d9 2008 ldr.w r2, [r9, #8] + 8028d02: 3201 adds r2, #1 + 8028d04: f022 0201 bic.w r2, r2, #1 + 8028d08: 9200 str r2, [sp, #0] + 8028d0a: f8d9 2000 ldr.w r2, [r9] + 8028d0e: 9201 str r2, [sp, #4] + 8028d10: f1bb 0f00 cmp.w fp, #0 + 8028d14: dc03 bgt.n 8028d1e <_ZN8touchgfx8LCD16bpp35TextureMapper_A4_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x4a> + 8028d16: 9a03 ldr r2, [sp, #12] + 8028d18: 2a00 cmp r2, #0 + 8028d1a: f340 816a ble.w 8028ff2 <_ZN8touchgfx8LCD16bpp35TextureMapper_A4_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x31e> + 8028d1e: 9a11 ldr r2, [sp, #68] ; 0x44 + 8028d20: f9b9 7008 ldrsh.w r7, [r9, #8] + 8028d24: f502 4000 add.w r0, r2, #32768 ; 0x8000 + 8028d28: 9a12 ldr r2, [sp, #72] ; 0x48 + 8028d2a: f9b9 600c ldrsh.w r6, [r9, #12] + 8028d2e: f502 4100 add.w r1, r2, #32768 ; 0x8000 + 8028d32: 2b00 cmp r3, #0 + 8028d34: dd0e ble.n 8028d54 <_ZN8touchgfx8LCD16bpp35TextureMapper_A4_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x80> + 8028d36: 1402 asrs r2, r0, #16 + 8028d38: d405 bmi.n 8028d46 <_ZN8touchgfx8LCD16bpp35TextureMapper_A4_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x72> + 8028d3a: 42ba cmp r2, r7 + 8028d3c: da03 bge.n 8028d46 <_ZN8touchgfx8LCD16bpp35TextureMapper_A4_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x72> + 8028d3e: 140a asrs r2, r1, #16 + 8028d40: d401 bmi.n 8028d46 <_ZN8touchgfx8LCD16bpp35TextureMapper_A4_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x72> + 8028d42: 42b2 cmp r2, r6 + 8028d44: db07 blt.n 8028d56 <_ZN8touchgfx8LCD16bpp35TextureMapper_A4_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x82> + 8028d46: 9a13 ldr r2, [sp, #76] ; 0x4c + 8028d48: 3b01 subs r3, #1 + 8028d4a: 3402 adds r4, #2 + 8028d4c: 4410 add r0, r2 + 8028d4e: 9a14 ldr r2, [sp, #80] ; 0x50 + 8028d50: 4411 add r1, r2 + 8028d52: e7ee b.n 8028d32 <_ZN8touchgfx8LCD16bpp35TextureMapper_A4_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x5e> + 8028d54: d017 beq.n 8028d86 <_ZN8touchgfx8LCD16bpp35TextureMapper_A4_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0xb2> + 8028d56: 1e5a subs r2, r3, #1 + 8028d58: 9d13 ldr r5, [sp, #76] ; 0x4c + 8028d5a: fb05 0502 mla r5, r5, r2, r0 + 8028d5e: 142d asrs r5, r5, #16 + 8028d60: d409 bmi.n 8028d76 <_ZN8touchgfx8LCD16bpp35TextureMapper_A4_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0xa2> + 8028d62: 42bd cmp r5, r7 + 8028d64: da07 bge.n 8028d76 <_ZN8touchgfx8LCD16bpp35TextureMapper_A4_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0xa2> + 8028d66: 9d14 ldr r5, [sp, #80] ; 0x50 + 8028d68: fb05 1202 mla r2, r5, r2, r1 + 8028d6c: 1412 asrs r2, r2, #16 + 8028d6e: d402 bmi.n 8028d76 <_ZN8touchgfx8LCD16bpp35TextureMapper_A4_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0xa2> + 8028d70: 42b2 cmp r2, r6 + 8028d72: f2c0 80c8 blt.w 8028f06 <_ZN8touchgfx8LCD16bpp35TextureMapper_A4_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x232> + 8028d76: 2700 movs r7, #0 + 8028d78: 19da adds r2, r3, r7 + 8028d7a: 2a00 cmp r2, #0 + 8028d7c: dc3e bgt.n 8028dfc <_ZN8touchgfx8LCD16bpp35TextureMapper_A4_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x128> + 8028d7e: ea23 73e3 bic.w r3, r3, r3, asr #31 + 8028d82: eb04 0443 add.w r4, r4, r3, lsl #1 + 8028d86: f1bb 0f00 cmp.w fp, #0 + 8028d8a: f340 8132 ble.w 8028ff2 <_ZN8touchgfx8LCD16bpp35TextureMapper_A4_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x31e> + 8028d8e: ee30 0a04 vadd.f32 s0, s0, s8 + 8028d92: 9b10 ldr r3, [sp, #64] ; 0x40 + 8028d94: ee70 0aa4 vadd.f32 s1, s1, s9 + 8028d98: f1bb 0b01 subs.w fp, fp, #1 + 8028d9c: eeb0 6a62 vmov.f32 s12, s5 + 8028da0: eec6 7a80 vdiv.f32 s15, s13, s0 + 8028da4: ee31 1a05 vadd.f32 s2, s2, s10 + 8028da8: eebe 6ac8 vcvt.s32.f32 s12, s12, #16 + 8028dac: ed8d 6a11 vstr s12, [sp, #68] ; 0x44 + 8028db0: eeb0 6a43 vmov.f32 s12, s6 + 8028db4: eebe 6ac8 vcvt.s32.f32 s12, s12, #16 + 8028db8: ed8d 6a12 vstr s12, [sp, #72] ; 0x48 + 8028dbc: ee20 7aa7 vmul.f32 s14, s1, s15 + 8028dc0: ee61 7a27 vmul.f32 s15, s2, s15 + 8028dc4: ee77 2a62 vsub.f32 s5, s14, s5 + 8028dc8: ee37 3ac3 vsub.f32 s6, s15, s6 + 8028dcc: eefe 2ac8 vcvt.s32.f32 s5, s5, #16 + 8028dd0: eebe 3ac8 vcvt.s32.f32 s6, s6, #16 + 8028dd4: ee12 2a90 vmov r2, s5 + 8028dd8: eef0 2a47 vmov.f32 s5, s14 + 8028ddc: fb92 f3f3 sdiv r3, r2, r3 + 8028de0: ee13 2a10 vmov r2, s6 + 8028de4: 9313 str r3, [sp, #76] ; 0x4c + 8028de6: 9b10 ldr r3, [sp, #64] ; 0x40 + 8028de8: eeb0 3a67 vmov.f32 s6, s15 + 8028dec: fb92 f3f3 sdiv r3, r2, r3 + 8028df0: 9a03 ldr r2, [sp, #12] + 8028df2: 9314 str r3, [sp, #80] ; 0x50 + 8028df4: 9b10 ldr r3, [sp, #64] ; 0x40 + 8028df6: bf08 it eq + 8028df8: 4613 moveq r3, r2 + 8028dfa: e789 b.n 8028d10 <_ZN8touchgfx8LCD16bpp35TextureMapper_A4_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x3c> + 8028dfc: 1405 asrs r5, r0, #16 + 8028dfe: d436 bmi.n 8028e6e <_ZN8touchgfx8LCD16bpp35TextureMapper_A4_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x19a> + 8028e00: f8d9 2008 ldr.w r2, [r9, #8] + 8028e04: 42aa cmp r2, r5 + 8028e06: dd32 ble.n 8028e6e <_ZN8touchgfx8LCD16bpp35TextureMapper_A4_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x19a> + 8028e08: 140e asrs r6, r1, #16 + 8028e0a: d430 bmi.n 8028e6e <_ZN8touchgfx8LCD16bpp35TextureMapper_A4_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x19a> + 8028e0c: f8d9 200c ldr.w r2, [r9, #12] + 8028e10: 42b2 cmp r2, r6 + 8028e12: dd2c ble.n 8028e6e <_ZN8touchgfx8LCD16bpp35TextureMapper_A4_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x19a> + 8028e14: 9a00 ldr r2, [sp, #0] + 8028e16: fb06 5502 mla r5, r6, r2, r5 + 8028e1a: 9e01 ldr r6, [sp, #4] + 8028e1c: 086a lsrs r2, r5, #1 + 8028e1e: 5cb2 ldrb r2, [r6, r2] + 8028e20: 07ee lsls r6, r5, #31 + 8028e22: bf54 ite pl + 8028e24: f002 020f andpl.w r2, r2, #15 + 8028e28: 1112 asrmi r2, r2, #4 + 8028e2a: eb02 1202 add.w r2, r2, r2, lsl #4 + 8028e2e: b2d2 uxtb r2, r2 + 8028e30: b1ea cbz r2, 8028e6e <_ZN8touchgfx8LCD16bpp35TextureMapper_A4_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x19a> + 8028e32: 9d04 ldr r5, [sp, #16] + 8028e34: 436a muls r2, r5 + 8028e36: 1c55 adds r5, r2, #1 + 8028e38: eb05 2222 add.w r2, r5, r2, asr #8 + 8028e3c: 4d6e ldr r5, [pc, #440] ; (8028ff8 <_ZN8touchgfx8LCD16bpp35TextureMapper_A4_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x324>) + 8028e3e: 1212 asrs r2, r2, #8 + 8028e40: 682d ldr r5, [r5, #0] + 8028e42: 2aff cmp r2, #255 ; 0xff + 8028e44: ea4f 2615 mov.w r6, r5, lsr #8 + 8028e48: 9605 str r6, [sp, #20] + 8028e4a: d116 bne.n 8028e7a <_ZN8touchgfx8LCD16bpp35TextureMapper_A4_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1a6> + 8028e4c: f06f 0201 mvn.w r2, #1 + 8028e50: f426 66ff bic.w r6, r6, #2040 ; 0x7f8 + 8028e54: fb02 fc07 mul.w ip, r2, r7 + 8028e58: 096a lsrs r2, r5, #5 + 8028e5a: f026 0607 bic.w r6, r6, #7 + 8028e5e: f3c5 05c4 ubfx r5, r5, #3, #5 + 8028e62: f402 62fc and.w r2, r2, #2016 ; 0x7e0 + 8028e66: 4316 orrs r6, r2 + 8028e68: 432e orrs r6, r5 + 8028e6a: f824 600c strh.w r6, [r4, ip] + 8028e6e: 9a13 ldr r2, [sp, #76] ; 0x4c + 8028e70: 3f01 subs r7, #1 + 8028e72: 4410 add r0, r2 + 8028e74: 9a14 ldr r2, [sp, #80] ; 0x50 + 8028e76: 4411 add r1, r2 + 8028e78: e77e b.n 8028d78 <_ZN8touchgfx8LCD16bpp35TextureMapper_A4_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0xa4> + 8028e7a: f06f 0601 mvn.w r6, #1 + 8028e7e: fa1f fa82 uxth.w sl, r2 + 8028e82: f3c5 4c07 ubfx ip, r5, #16, #8 + 8028e86: 43d2 mvns r2, r2 + 8028e88: 437e muls r6, r7 + 8028e8a: b2ed uxtb r5, r5 + 8028e8c: fb1c fc0a smulbb ip, ip, sl + 8028e90: b2d2 uxtb r2, r2 + 8028e92: f834 8006 ldrh.w r8, [r4, r6] + 8028e96: fb15 f50a smulbb r5, r5, sl + 8028e9a: 9602 str r6, [sp, #8] + 8028e9c: ea4f 2e28 mov.w lr, r8, asr #8 + 8028ea0: f89d 6014 ldrb.w r6, [sp, #20] + 8028ea4: fb16 f60a smulbb r6, r6, sl + 8028ea8: f00e 0ef8 and.w lr, lr, #248 ; 0xf8 + 8028eac: fb0e ce02 mla lr, lr, r2, ip + 8028eb0: ea4f 0ce8 mov.w ip, r8, asr #3 + 8028eb4: ea4f 08c8 mov.w r8, r8, lsl #3 + 8028eb8: fa1f fe8e uxth.w lr, lr + 8028ebc: f00c 0cfc and.w ip, ip, #252 ; 0xfc + 8028ec0: fa5f f888 uxtb.w r8, r8 + 8028ec4: fb0c 6c02 mla ip, ip, r2, r6 + 8028ec8: fb08 5502 mla r5, r8, r2, r5 + 8028ecc: f10e 0201 add.w r2, lr, #1 + 8028ed0: fa1f fc8c uxth.w ip, ip + 8028ed4: b2ad uxth r5, r5 + 8028ed6: eb02 2e1e add.w lr, r2, lr, lsr #8 + 8028eda: 9a02 ldr r2, [sp, #8] + 8028edc: 1c6e adds r6, r5, #1 + 8028ede: f40e 4e78 and.w lr, lr, #63488 ; 0xf800 + 8028ee2: eb06 2615 add.w r6, r6, r5, lsr #8 + 8028ee6: f3c6 26c4 ubfx r6, r6, #11, #5 + 8028eea: ea46 0e0e orr.w lr, r6, lr + 8028eee: f10c 0601 add.w r6, ip, #1 + 8028ef2: eb06 261c add.w r6, r6, ip, lsr #8 + 8028ef6: 0976 lsrs r6, r6, #5 + 8028ef8: f406 66fc and.w r6, r6, #2016 ; 0x7e0 + 8028efc: ea4e 0e06 orr.w lr, lr, r6 + 8028f00: f824 e002 strh.w lr, [r4, r2] + 8028f04: e7b3 b.n 8028e6e <_ZN8touchgfx8LCD16bpp35TextureMapper_A4_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x19a> + 8028f06: f04f 0800 mov.w r8, #0 + 8028f0a: eba3 0208 sub.w r2, r3, r8 + 8028f0e: 2a00 cmp r2, #0 + 8028f10: f77f af35 ble.w 8028d7e <_ZN8touchgfx8LCD16bpp35TextureMapper_A4_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0xaa> + 8028f14: 1402 asrs r2, r0, #16 + 8028f16: 9e00 ldr r6, [sp, #0] + 8028f18: 140d asrs r5, r1, #16 + 8028f1a: fb06 2505 mla r5, r6, r5, r2 + 8028f1e: 9e01 ldr r6, [sp, #4] + 8028f20: 086a lsrs r2, r5, #1 + 8028f22: 07ed lsls r5, r5, #31 + 8028f24: 5cb2 ldrb r2, [r6, r2] + 8028f26: bf54 ite pl + 8028f28: f002 020f andpl.w r2, r2, #15 + 8028f2c: 1112 asrmi r2, r2, #4 + 8028f2e: eb02 1202 add.w r2, r2, r2, lsl #4 + 8028f32: b2d2 uxtb r2, r2 + 8028f34: b1c2 cbz r2, 8028f68 <_ZN8touchgfx8LCD16bpp35TextureMapper_A4_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x294> + 8028f36: 9d04 ldr r5, [sp, #16] + 8028f38: 436a muls r2, r5 + 8028f3a: 1c55 adds r5, r2, #1 + 8028f3c: eb05 2222 add.w r2, r5, r2, asr #8 + 8028f40: 4d2d ldr r5, [pc, #180] ; (8028ff8 <_ZN8touchgfx8LCD16bpp35TextureMapper_A4_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x324>) + 8028f42: 1212 asrs r2, r2, #8 + 8028f44: 682e ldr r6, [r5, #0] + 8028f46: 2aff cmp r2, #255 ; 0xff + 8028f48: ea4f 2516 mov.w r5, r6, lsr #8 + 8028f4c: d113 bne.n 8028f76 <_ZN8touchgfx8LCD16bpp35TextureMapper_A4_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x2a2> + 8028f4e: 0972 lsrs r2, r6, #5 + 8028f50: f425 65ff bic.w r5, r5, #2040 ; 0x7f8 + 8028f54: f3c6 06c4 ubfx r6, r6, #3, #5 + 8028f58: f402 62fc and.w r2, r2, #2016 ; 0x7e0 + 8028f5c: f025 0507 bic.w r5, r5, #7 + 8028f60: 4315 orrs r5, r2 + 8028f62: 4335 orrs r5, r6 + 8028f64: f824 5018 strh.w r5, [r4, r8, lsl #1] + 8028f68: 9a13 ldr r2, [sp, #76] ; 0x4c + 8028f6a: f108 0801 add.w r8, r8, #1 + 8028f6e: 4410 add r0, r2 + 8028f70: 9a14 ldr r2, [sp, #80] ; 0x50 + 8028f72: 4411 add r1, r2 + 8028f74: e7c9 b.n 8028f0a <_ZN8touchgfx8LCD16bpp35TextureMapper_A4_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x236> + 8028f76: f834 e018 ldrh.w lr, [r4, r8, lsl #1] + 8028f7a: fa1f fa82 uxth.w sl, r2 + 8028f7e: f3c6 4707 ubfx r7, r6, #16, #8 + 8028f82: 43d2 mvns r2, r2 + 8028f84: ea4f 2c2e mov.w ip, lr, asr #8 + 8028f88: fb17 f70a smulbb r7, r7, sl + 8028f8c: b2d2 uxtb r2, r2 + 8028f8e: f00c 0cf8 and.w ip, ip, #248 ; 0xf8 + 8028f92: b2f6 uxtb r6, r6 + 8028f94: b2ed uxtb r5, r5 + 8028f96: fb0c 7c02 mla ip, ip, r2, r7 + 8028f9a: ea4f 07ee mov.w r7, lr, asr #3 + 8028f9e: fb16 f60a smulbb r6, r6, sl + 8028fa2: ea4f 0ece mov.w lr, lr, lsl #3 + 8028fa6: fa1f fc8c uxth.w ip, ip + 8028faa: f007 07fc and.w r7, r7, #252 ; 0xfc + 8028fae: fb15 f50a smulbb r5, r5, sl + 8028fb2: fa5f fe8e uxtb.w lr, lr + 8028fb6: fb0e 6602 mla r6, lr, r2, r6 + 8028fba: fb07 5702 mla r7, r7, r2, r5 + 8028fbe: f10c 0201 add.w r2, ip, #1 + 8028fc2: b2b6 uxth r6, r6 + 8028fc4: eb02 2c1c add.w ip, r2, ip, lsr #8 + 8028fc8: 1c75 adds r5, r6, #1 + 8028fca: b2bf uxth r7, r7 + 8028fcc: f40c 4c78 and.w ip, ip, #63488 ; 0xf800 + 8028fd0: eb05 2516 add.w r5, r5, r6, lsr #8 + 8028fd4: f3c5 25c4 ubfx r5, r5, #11, #5 + 8028fd8: ea45 0c0c orr.w ip, r5, ip + 8028fdc: 1c7d adds r5, r7, #1 + 8028fde: eb05 2517 add.w r5, r5, r7, lsr #8 + 8028fe2: 096d lsrs r5, r5, #5 + 8028fe4: f405 65fc and.w r5, r5, #2016 ; 0x7e0 + 8028fe8: ea4c 0c05 orr.w ip, ip, r5 + 8028fec: f824 c018 strh.w ip, [r4, r8, lsl #1] + 8028ff0: e7ba b.n 8028f68 <_ZN8touchgfx8LCD16bpp35TextureMapper_A4_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x294> + 8028ff2: b007 add sp, #28 + 8028ff4: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 8028ff8: 2001e73c .word 0x2001e73c + +08028ffc <_ZN8touchgfx8LCD16bpp37TextureMapper_A4_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff>: + 8028ffc: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8029000: b087 sub sp, #28 + 8029002: eef7 6a00 vmov.f32 s13, #112 ; 0x3f800000 1.0 + 8029006: f8df 8308 ldr.w r8, [pc, #776] ; 8029310 <_ZN8touchgfx8LCD16bpp37TextureMapper_A4_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x314> + 802900a: 9815 ldr r0, [sp, #84] ; 0x54 + 802900c: 9101 str r1, [sp, #4] + 802900e: 9205 str r2, [sp, #20] + 8029010: 6841 ldr r1, [r0, #4] + 8029012: f8dd b060 ldr.w fp, [sp, #96] ; 0x60 + 8029016: e9dd 2416 ldrd r2, r4, [sp, #88] ; 0x58 + 802901a: fb01 2404 mla r4, r1, r4, r2 + 802901e: 6802 ldr r2, [r0, #0] + 8029020: eb02 0444 add.w r4, r2, r4, lsl #1 + 8029024: f8db 2008 ldr.w r2, [fp, #8] + 8029028: 3201 adds r2, #1 + 802902a: f022 0201 bic.w r2, r2, #1 + 802902e: 9202 str r2, [sp, #8] + 8029030: f8db 2000 ldr.w r2, [fp] + 8029034: 9203 str r2, [sp, #12] + 8029036: 9a01 ldr r2, [sp, #4] + 8029038: 2a00 cmp r2, #0 + 802903a: dc03 bgt.n 8029044 <_ZN8touchgfx8LCD16bpp37TextureMapper_A4_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x48> + 802903c: 9a05 ldr r2, [sp, #20] + 802903e: 2a00 cmp r2, #0 + 8029040: f340 8162 ble.w 8029308 <_ZN8touchgfx8LCD16bpp37TextureMapper_A4_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x30c> + 8029044: 9a11 ldr r2, [sp, #68] ; 0x44 + 8029046: f9bb 7008 ldrsh.w r7, [fp, #8] + 802904a: f502 4000 add.w r0, r2, #32768 ; 0x8000 + 802904e: 9a12 ldr r2, [sp, #72] ; 0x48 + 8029050: f9bb 600c ldrsh.w r6, [fp, #12] + 8029054: f502 4100 add.w r1, r2, #32768 ; 0x8000 + 8029058: 2b00 cmp r3, #0 + 802905a: dd0e ble.n 802907a <_ZN8touchgfx8LCD16bpp37TextureMapper_A4_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x7e> + 802905c: 1402 asrs r2, r0, #16 + 802905e: d405 bmi.n 802906c <_ZN8touchgfx8LCD16bpp37TextureMapper_A4_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x70> + 8029060: 42ba cmp r2, r7 + 8029062: da03 bge.n 802906c <_ZN8touchgfx8LCD16bpp37TextureMapper_A4_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x70> + 8029064: 140a asrs r2, r1, #16 + 8029066: d401 bmi.n 802906c <_ZN8touchgfx8LCD16bpp37TextureMapper_A4_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x70> + 8029068: 42b2 cmp r2, r6 + 802906a: db07 blt.n 802907c <_ZN8touchgfx8LCD16bpp37TextureMapper_A4_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x80> + 802906c: 9a13 ldr r2, [sp, #76] ; 0x4c + 802906e: 3b01 subs r3, #1 + 8029070: 3402 adds r4, #2 + 8029072: 4410 add r0, r2 + 8029074: 9a14 ldr r2, [sp, #80] ; 0x50 + 8029076: 4411 add r1, r2 + 8029078: e7ee b.n 8029058 <_ZN8touchgfx8LCD16bpp37TextureMapper_A4_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x5c> + 802907a: d017 beq.n 80290ac <_ZN8touchgfx8LCD16bpp37TextureMapper_A4_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0xb0> + 802907c: 1e5a subs r2, r3, #1 + 802907e: 9d13 ldr r5, [sp, #76] ; 0x4c + 8029080: fb05 0502 mla r5, r5, r2, r0 + 8029084: 142d asrs r5, r5, #16 + 8029086: d409 bmi.n 802909c <_ZN8touchgfx8LCD16bpp37TextureMapper_A4_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0xa0> + 8029088: 42bd cmp r5, r7 + 802908a: da07 bge.n 802909c <_ZN8touchgfx8LCD16bpp37TextureMapper_A4_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0xa0> + 802908c: 9d14 ldr r5, [sp, #80] ; 0x50 + 802908e: fb05 1202 mla r2, r5, r2, r1 + 8029092: 1412 asrs r2, r2, #16 + 8029094: d402 bmi.n 802909c <_ZN8touchgfx8LCD16bpp37TextureMapper_A4_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0xa0> + 8029096: 42b2 cmp r2, r6 + 8029098: f2c0 80c3 blt.w 8029222 <_ZN8touchgfx8LCD16bpp37TextureMapper_A4_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x226> + 802909c: 2500 movs r5, #0 + 802909e: 195a adds r2, r3, r5 + 80290a0: 2a00 cmp r2, #0 + 80290a2: dc3f bgt.n 8029124 <_ZN8touchgfx8LCD16bpp37TextureMapper_A4_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x128> + 80290a4: ea23 73e3 bic.w r3, r3, r3, asr #31 + 80290a8: eb04 0443 add.w r4, r4, r3, lsl #1 + 80290ac: 9b01 ldr r3, [sp, #4] + 80290ae: 2b00 cmp r3, #0 + 80290b0: f340 812a ble.w 8029308 <_ZN8touchgfx8LCD16bpp37TextureMapper_A4_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x30c> + 80290b4: ee30 0a04 vadd.f32 s0, s0, s8 + 80290b8: 9b10 ldr r3, [sp, #64] ; 0x40 + 80290ba: ee70 0aa4 vadd.f32 s1, s1, s9 + 80290be: eeb0 6a62 vmov.f32 s12, s5 + 80290c2: eec6 7a80 vdiv.f32 s15, s13, s0 + 80290c6: ee31 1a05 vadd.f32 s2, s2, s10 + 80290ca: eebe 6ac8 vcvt.s32.f32 s12, s12, #16 + 80290ce: ed8d 6a11 vstr s12, [sp, #68] ; 0x44 + 80290d2: eeb0 6a43 vmov.f32 s12, s6 + 80290d6: eebe 6ac8 vcvt.s32.f32 s12, s12, #16 + 80290da: ed8d 6a12 vstr s12, [sp, #72] ; 0x48 + 80290de: ee20 7aa7 vmul.f32 s14, s1, s15 + 80290e2: ee61 7a27 vmul.f32 s15, s2, s15 + 80290e6: ee77 2a62 vsub.f32 s5, s14, s5 + 80290ea: ee37 3ac3 vsub.f32 s6, s15, s6 + 80290ee: eefe 2ac8 vcvt.s32.f32 s5, s5, #16 + 80290f2: eebe 3ac8 vcvt.s32.f32 s6, s6, #16 + 80290f6: ee12 2a90 vmov r2, s5 + 80290fa: eef0 2a47 vmov.f32 s5, s14 + 80290fe: fb92 f3f3 sdiv r3, r2, r3 + 8029102: ee13 2a10 vmov r2, s6 + 8029106: 9313 str r3, [sp, #76] ; 0x4c + 8029108: 9b10 ldr r3, [sp, #64] ; 0x40 + 802910a: eeb0 3a67 vmov.f32 s6, s15 + 802910e: fb92 f3f3 sdiv r3, r2, r3 + 8029112: 9314 str r3, [sp, #80] ; 0x50 + 8029114: 9b01 ldr r3, [sp, #4] + 8029116: 9a05 ldr r2, [sp, #20] + 8029118: 3b01 subs r3, #1 + 802911a: 9301 str r3, [sp, #4] + 802911c: 9b10 ldr r3, [sp, #64] ; 0x40 + 802911e: bf08 it eq + 8029120: 4613 moveq r3, r2 + 8029122: e788 b.n 8029036 <_ZN8touchgfx8LCD16bpp37TextureMapper_A4_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x3a> + 8029124: 1406 asrs r6, r0, #16 + 8029126: d42c bmi.n 8029182 <_ZN8touchgfx8LCD16bpp37TextureMapper_A4_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x186> + 8029128: f8db 2008 ldr.w r2, [fp, #8] + 802912c: 42b2 cmp r2, r6 + 802912e: dd28 ble.n 8029182 <_ZN8touchgfx8LCD16bpp37TextureMapper_A4_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x186> + 8029130: 140f asrs r7, r1, #16 + 8029132: d426 bmi.n 8029182 <_ZN8touchgfx8LCD16bpp37TextureMapper_A4_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x186> + 8029134: f8db 200c ldr.w r2, [fp, #12] + 8029138: 42ba cmp r2, r7 + 802913a: dd22 ble.n 8029182 <_ZN8touchgfx8LCD16bpp37TextureMapper_A4_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x186> + 802913c: 9a02 ldr r2, [sp, #8] + 802913e: fb07 6602 mla r6, r7, r2, r6 + 8029142: 9f03 ldr r7, [sp, #12] + 8029144: 0872 lsrs r2, r6, #1 + 8029146: 07f6 lsls r6, r6, #31 + 8029148: 5cba ldrb r2, [r7, r2] + 802914a: bf54 ite pl + 802914c: f002 020f andpl.w r2, r2, #15 + 8029150: 1112 asrmi r2, r2, #4 + 8029152: eb02 1202 add.w r2, r2, r2, lsl #4 + 8029156: b2d2 uxtb r2, r2 + 8029158: 2aff cmp r2, #255 ; 0xff + 802915a: d118 bne.n 802918e <_ZN8touchgfx8LCD16bpp37TextureMapper_A4_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x192> + 802915c: f06f 0601 mvn.w r6, #1 + 8029160: f8d8 2000 ldr.w r2, [r8] + 8029164: fb06 f705 mul.w r7, r6, r5 + 8029168: f2a6 76fe subw r6, r6, #2046 ; 0x7fe + 802916c: ea06 2c12 and.w ip, r6, r2, lsr #8 + 8029170: 0956 lsrs r6, r2, #5 + 8029172: f3c2 02c4 ubfx r2, r2, #3, #5 + 8029176: f406 66fc and.w r6, r6, #2016 ; 0x7e0 + 802917a: ea4c 0606 orr.w r6, ip, r6 + 802917e: 4316 orrs r6, r2 + 8029180: 53e6 strh r6, [r4, r7] + 8029182: 9a13 ldr r2, [sp, #76] ; 0x4c + 8029184: 3d01 subs r5, #1 + 8029186: 4410 add r0, r2 + 8029188: 9a14 ldr r2, [sp, #80] ; 0x50 + 802918a: 4411 add r1, r2 + 802918c: e787 b.n 802909e <_ZN8touchgfx8LCD16bpp37TextureMapper_A4_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0xa2> + 802918e: 2a00 cmp r2, #0 + 8029190: d0f7 beq.n 8029182 <_ZN8touchgfx8LCD16bpp37TextureMapper_A4_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x186> + 8029192: f06f 0601 mvn.w r6, #1 + 8029196: f8d8 c000 ldr.w ip, [r8] + 802919a: fa1f f982 uxth.w r9, r2 + 802919e: 43d2 mvns r2, r2 + 80291a0: 436e muls r6, r5 + 80291a2: f3cc 2a07 ubfx sl, ip, #8, #8 + 80291a6: b2d2 uxtb r2, r2 + 80291a8: f834 e006 ldrh.w lr, [r4, r6] + 80291ac: fb1a fa09 smulbb sl, sl, r9 + 80291b0: 9604 str r6, [sp, #16] + 80291b2: f3cc 4607 ubfx r6, ip, #16, #8 + 80291b6: ea4f 272e mov.w r7, lr, asr #8 + 80291ba: fb16 f609 smulbb r6, r6, r9 + 80291be: fa5f fc8c uxtb.w ip, ip + 80291c2: f007 07f8 and.w r7, r7, #248 ; 0xf8 + 80291c6: fb1c fc09 smulbb ip, ip, r9 + 80291ca: fb07 6702 mla r7, r7, r2, r6 + 80291ce: ea4f 06ee mov.w r6, lr, asr #3 + 80291d2: ea4f 0ece mov.w lr, lr, lsl #3 + 80291d6: b2bf uxth r7, r7 + 80291d8: f006 06fc and.w r6, r6, #252 ; 0xfc + 80291dc: fa5f fe8e uxtb.w lr, lr + 80291e0: fb06 a602 mla r6, r6, r2, sl + 80291e4: fb0e cc02 mla ip, lr, r2, ip + 80291e8: 1c7a adds r2, r7, #1 + 80291ea: b2b6 uxth r6, r6 + 80291ec: fa1f fc8c uxth.w ip, ip + 80291f0: eb02 2717 add.w r7, r2, r7, lsr #8 + 80291f4: 9a04 ldr r2, [sp, #16] + 80291f6: f10c 0a01 add.w sl, ip, #1 + 80291fa: f407 4778 and.w r7, r7, #63488 ; 0xf800 + 80291fe: eb0a 2a1c add.w sl, sl, ip, lsr #8 + 8029202: f3ca 2ac4 ubfx sl, sl, #11, #5 + 8029206: ea4a 0707 orr.w r7, sl, r7 + 802920a: f106 0a01 add.w sl, r6, #1 + 802920e: eb0a 2a16 add.w sl, sl, r6, lsr #8 + 8029212: ea4f 1a5a mov.w sl, sl, lsr #5 + 8029216: f40a 6afc and.w sl, sl, #2016 ; 0x7e0 + 802921a: ea47 070a orr.w r7, r7, sl + 802921e: 52a7 strh r7, [r4, r2] + 8029220: e7af b.n 8029182 <_ZN8touchgfx8LCD16bpp37TextureMapper_A4_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x186> + 8029222: f04f 0e00 mov.w lr, #0 + 8029226: eba3 020e sub.w r2, r3, lr + 802922a: 2a00 cmp r2, #0 + 802922c: f77f af3a ble.w 80290a4 <_ZN8touchgfx8LCD16bpp37TextureMapper_A4_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0xa8> + 8029230: 1402 asrs r2, r0, #16 + 8029232: 9e02 ldr r6, [sp, #8] + 8029234: 140d asrs r5, r1, #16 + 8029236: fb06 2505 mla r5, r6, r5, r2 + 802923a: 9e03 ldr r6, [sp, #12] + 802923c: 086a lsrs r2, r5, #1 + 802923e: 07ed lsls r5, r5, #31 + 8029240: 5cb2 ldrb r2, [r6, r2] + 8029242: bf54 ite pl + 8029244: f002 020f andpl.w r2, r2, #15 + 8029248: 1112 asrmi r2, r2, #4 + 802924a: eb02 1202 add.w r2, r2, r2, lsl #4 + 802924e: b2d2 uxtb r2, r2 + 8029250: 2aff cmp r2, #255 ; 0xff + 8029252: d115 bne.n 8029280 <_ZN8touchgfx8LCD16bpp37TextureMapper_A4_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x284> + 8029254: f8d8 5000 ldr.w r5, [r8] + 8029258: f6a2 02ff subw r2, r2, #2303 ; 0x8ff + 802925c: ea02 2615 and.w r6, r2, r5, lsr #8 + 8029260: 096a lsrs r2, r5, #5 + 8029262: f3c5 05c4 ubfx r5, r5, #3, #5 + 8029266: f402 62fc and.w r2, r2, #2016 ; 0x7e0 + 802926a: 4332 orrs r2, r6 + 802926c: 432a orrs r2, r5 + 802926e: f824 201e strh.w r2, [r4, lr, lsl #1] + 8029272: 9a13 ldr r2, [sp, #76] ; 0x4c + 8029274: f10e 0e01 add.w lr, lr, #1 + 8029278: 4410 add r0, r2 + 802927a: 9a14 ldr r2, [sp, #80] ; 0x50 + 802927c: 4411 add r1, r2 + 802927e: e7d2 b.n 8029226 <_ZN8touchgfx8LCD16bpp37TextureMapper_A4_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x22a> + 8029280: 2a00 cmp r2, #0 + 8029282: d0f6 beq.n 8029272 <_ZN8touchgfx8LCD16bpp37TextureMapper_A4_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x276> + 8029284: f8d8 7000 ldr.w r7, [r8] + 8029288: fa1f f982 uxth.w r9, r2 + 802928c: f834 c01e ldrh.w ip, [r4, lr, lsl #1] + 8029290: 43d2 mvns r2, r2 + 8029292: f3c7 4507 ubfx r5, r7, #16, #8 + 8029296: f3c7 2a07 ubfx sl, r7, #8, #8 + 802929a: ea4f 262c mov.w r6, ip, asr #8 + 802929e: fb15 f509 smulbb r5, r5, r9 + 80292a2: b2d2 uxtb r2, r2 + 80292a4: f006 06f8 and.w r6, r6, #248 ; 0xf8 + 80292a8: b2ff uxtb r7, r7 + 80292aa: fb1a fa09 smulbb sl, sl, r9 + 80292ae: fb06 5602 mla r6, r6, r2, r5 + 80292b2: ea4f 05ec mov.w r5, ip, asr #3 + 80292b6: fb17 f709 smulbb r7, r7, r9 + 80292ba: ea4f 0ccc mov.w ip, ip, lsl #3 + 80292be: b2b6 uxth r6, r6 + 80292c0: f005 05fc and.w r5, r5, #252 ; 0xfc + 80292c4: fa5f fc8c uxtb.w ip, ip + 80292c8: fb05 a502 mla r5, r5, r2, sl + 80292cc: fb0c 7702 mla r7, ip, r2, r7 + 80292d0: 1c72 adds r2, r6, #1 + 80292d2: b2ad uxth r5, r5 + 80292d4: b2bf uxth r7, r7 + 80292d6: eb02 2616 add.w r6, r2, r6, lsr #8 + 80292da: f107 0a01 add.w sl, r7, #1 + 80292de: f406 4678 and.w r6, r6, #63488 ; 0xf800 + 80292e2: eb0a 2a17 add.w sl, sl, r7, lsr #8 + 80292e6: f3ca 2ac4 ubfx sl, sl, #11, #5 + 80292ea: ea4a 0606 orr.w r6, sl, r6 + 80292ee: f105 0a01 add.w sl, r5, #1 + 80292f2: eb0a 2a15 add.w sl, sl, r5, lsr #8 + 80292f6: ea4f 1a5a mov.w sl, sl, lsr #5 + 80292fa: f40a 6afc and.w sl, sl, #2016 ; 0x7e0 + 80292fe: ea46 060a orr.w r6, r6, sl + 8029302: f824 601e strh.w r6, [r4, lr, lsl #1] + 8029306: e7b4 b.n 8029272 <_ZN8touchgfx8LCD16bpp37TextureMapper_A4_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x276> + 8029308: b007 add sp, #28 + 802930a: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 802930e: bf00 nop + 8029310: 2001e73c .word 0x2001e73c + +08029314 <_ZN8touchgfx8LCD16bppD1Ev>: + 8029314: 4770 bx lr + +08029316 <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW9D1Ev>: + 8029316: 4770 bx lr + +08029318 <_ZN8touchgfx8LCD16bpp18DecompressorL8_RLED1Ev>: + 8029318: 4770 bx lr + +0802931a <_ZN8touchgfx8LCD16bpp17DecompressorL8_L4D1Ev>: + 802931a: 4770 bx lr + +0802931c <_ZN8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGAD1Ev>: + 802931c: 4770 bx lr + +0802931e <_ZN8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GAD1Ev>: + 802931e: 4770 bx lr + +08029320 <_ZN8touchgfx8LCD16bpp37TextureMapper_A4_NearestNeighbor_NoGAD1Ev>: + 8029320: 4770 bx lr + +08029322 <_ZN8touchgfx8LCD16bpp35TextureMapper_A4_NearestNeighbor_GAD1Ev>: + 8029322: 4770 bx lr + +08029324 <_ZN8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGAD1Ev>: + 8029324: 4770 bx lr + +08029326 <_ZN8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GAD1Ev>: + 8029326: 4770 bx lr + +08029328 <_ZN8touchgfx8LCD16bpp53TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_NoGAD1Ev>: + 8029328: 4770 bx lr + +0802932a <_ZN8touchgfx8LCD16bpp51TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_GAD1Ev>: + 802932a: 4770 bx lr + +0802932c <_ZN8touchgfx8LCD16bpp54TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGAD1Ev>: + 802932c: 4770 bx lr + +0802932e <_ZN8touchgfx8LCD16bpp52TextureMapper_RGB565_Opaque_BilinearInterpolation_GAD1Ev>: + 802932e: 4770 bx lr + +08029330 <_ZN8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGAD1Ev>: + 8029330: 4770 bx lr + +08029332 <_ZN8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GAD1Ev>: + 8029332: 4770 bx lr + +08029334 <_ZN8touchgfx8LCD16bpp48TextureMapper_RGB565_Opaque_NearestNeighbor_NoGAD1Ev>: + 8029334: 4770 bx lr + +08029336 <_ZN8touchgfx8LCD16bpp46TextureMapper_RGB565_Opaque_NearestNeighbor_GAD1Ev>: + 8029336: 4770 bx lr + +08029338 <_ZN8touchgfx8LCD16bpp51TextureMapper_RGB565_NonOpaque_NearestNeighbor_NoGAD1Ev>: + 8029338: 4770 bx lr + +0802933a <_ZN8touchgfx8LCD16bpp49TextureMapper_RGB565_NonOpaque_NearestNeighbor_GAD1Ev>: + 802933a: 4770 bx lr + +0802933c <_ZN8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGAD1Ev>: + 802933c: 4770 bx lr + +0802933e <_ZN8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GAD1Ev>: + 802933e: 4770 bx lr + +08029340 <_ZN8touchgfx8LCD16bpp56TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_NoGAD1Ev>: + 8029340: 4770 bx lr + +08029342 <_ZN8touchgfx8LCD16bpp54TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_GAD1Ev>: + 8029342: 4770 bx lr + +08029344 <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGAD1Ev>: + 8029344: 4770 bx lr + +08029346 <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GAD1Ev>: + 8029346: 4770 bx lr + +08029348 <_ZN8touchgfx8LCD16bpp51TextureMapper_L8_RGB888_Opaque_NearestNeighbor_NoGAD1Ev>: + 8029348: 4770 bx lr + +0802934a <_ZN8touchgfx8LCD16bpp49TextureMapper_L8_RGB888_Opaque_NearestNeighbor_GAD1Ev>: + 802934a: 4770 bx lr + +0802934c <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGAD1Ev>: + 802934c: 4770 bx lr + +0802934e <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GAD1Ev>: + 802934e: 4770 bx lr + +08029350 <_ZN8touchgfx8LCD16bpp51TextureMapper_L8_RGB565_Opaque_NearestNeighbor_NoGAD1Ev>: + 8029350: 4770 bx lr + +08029352 <_ZN8touchgfx8LCD16bpp49TextureMapper_L8_RGB565_Opaque_NearestNeighbor_GAD1Ev>: + 8029352: 4770 bx lr + +08029354 <_ZN8touchgfx8LCD16bpp29copyFrameBufferRegionToMemoryERKNS_4RectES3_t>: + 8029354: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} + 8029358: b088 sub sp, #32 + 802935a: 4606 mov r6, r0 + 802935c: 4688 mov r8, r1 + 802935e: 4691 mov r9, r2 + 8029360: ac08 add r4, sp, #32 + 8029362: f824 3d0c strh.w r3, [r4, #-12]! + 8029366: 4620 mov r0, r4 + 8029368: f7fd fc62 bl 8026c30 <_ZNK8touchgfx6Bitmap7getDataEv> + 802936c: 6833 ldr r3, [r6, #0] + 802936e: 4605 mov r5, r0 + 8029370: 4620 mov r0, r4 + 8029372: 699f ldr r7, [r3, #24] + 8029374: f7fd fb70 bl 8026a58 <_ZNK8touchgfx6Bitmap8getWidthEv> + 8029378: 4682 mov sl, r0 + 802937a: 4620 mov r0, r4 + 802937c: f7fd fba0 bl 8026ac0 <_ZNK8touchgfx6Bitmap9getHeightEv> + 8029380: 9500 str r5, [sp, #0] + 8029382: 464b mov r3, r9 + 8029384: 4642 mov r2, r8 + 8029386: 4631 mov r1, r6 + 8029388: e9cd a001 strd sl, r0, [sp, #4] + 802938c: a806 add r0, sp, #24 + 802938e: 47b8 blx r7 + 8029390: 4628 mov r0, r5 + 8029392: b008 add sp, #32 + 8029394: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + +08029398 <_ZN8touchgfx8LCD16bpp29copyAreaFromTFTToClientBufferERKNS_4RectE>: + 8029398: e92d 47ff stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, lr} + 802939c: 2300 movs r3, #0 + 802939e: 9300 str r3, [sp, #0] + 80293a0: 4b3d ldr r3, [pc, #244] ; (8029498 <_ZN8touchgfx8LCD16bpp29copyAreaFromTFTToClientBufferERKNS_4RectE+0x100>) + 80293a2: 781b ldrb r3, [r3, #0] + 80293a4: 2b00 cmp r3, #0 + 80293a6: d137 bne.n 8029418 <_ZN8touchgfx8LCD16bpp29copyAreaFromTFTToClientBufferERKNS_4RectE+0x80> + 80293a8: 4a3c ldr r2, [pc, #240] ; (802949c <_ZN8touchgfx8LCD16bpp29copyAreaFromTFTToClientBufferERKNS_4RectE+0x104>) + 80293aa: f9b2 2000 ldrsh.w r2, [r2] + 80293ae: f8ad 2004 strh.w r2, [sp, #4] + 80293b2: 2b00 cmp r3, #0 + 80293b4: d132 bne.n 802941c <_ZN8touchgfx8LCD16bpp29copyAreaFromTFTToClientBufferERKNS_4RectE+0x84> + 80293b6: 4b3a ldr r3, [pc, #232] ; (80294a0 <_ZN8touchgfx8LCD16bpp29copyAreaFromTFTToClientBufferERKNS_4RectE+0x108>) + 80293b8: f9b3 3000 ldrsh.w r3, [r3] + 80293bc: ac02 add r4, sp, #8 + 80293be: 6808 ldr r0, [r1, #0] + 80293c0: f8ad 3006 strh.w r3, [sp, #6] + 80293c4: ab02 add r3, sp, #8 + 80293c6: 6849 ldr r1, [r1, #4] + 80293c8: 4d36 ldr r5, [pc, #216] ; (80294a4 <_ZN8touchgfx8LCD16bpp29copyAreaFromTFTToClientBufferERKNS_4RectE+0x10c>) + 80293ca: c303 stmia r3!, {r0, r1} + 80293cc: 4669 mov r1, sp + 80293ce: 4620 mov r0, r4 + 80293d0: f7fa f89a bl 8023508 <_ZN8touchgfx21DisplayTransformation29transformDisplayToFrameBufferERNS_4RectERKS1_> + 80293d4: 4668 mov r0, sp + 80293d6: f7fa f86f bl 80234b8 <_ZN8touchgfx21DisplayTransformation29transformDisplayToFrameBufferERNS_4RectE> + 80293da: f8bd 3008 ldrh.w r3, [sp, #8] + 80293de: f8bd 2000 ldrh.w r2, [sp] + 80293e2: 462f mov r7, r5 + 80293e4: 6828 ldr r0, [r5, #0] + 80293e6: 4413 add r3, r2 + 80293e8: f8bd 2002 ldrh.w r2, [sp, #2] + 80293ec: f8ad 3008 strh.w r3, [sp, #8] + 80293f0: f8bd 300a ldrh.w r3, [sp, #10] + 80293f4: 4413 add r3, r2 + 80293f6: f8ad 300a strh.w r3, [sp, #10] + 80293fa: 6803 ldr r3, [r0, #0] + 80293fc: 6b9b ldr r3, [r3, #56] ; 0x38 + 80293fe: 4798 blx r3 + 8029400: f010 0f01 tst.w r0, #1 + 8029404: d00c beq.n 8029420 <_ZN8touchgfx8LCD16bpp29copyAreaFromTFTToClientBufferERKNS_4RectE+0x88> + 8029406: 6828 ldr r0, [r5, #0] + 8029408: 6803 ldr r3, [r0, #0] + 802940a: e894 0006 ldmia.w r4, {r1, r2} + 802940e: 6ddb ldr r3, [r3, #92] ; 0x5c + 8029410: 4798 blx r3 + 8029412: b004 add sp, #16 + 8029414: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + 8029418: 4a21 ldr r2, [pc, #132] ; (80294a0 <_ZN8touchgfx8LCD16bpp29copyAreaFromTFTToClientBufferERKNS_4RectE+0x108>) + 802941a: e7c6 b.n 80293aa <_ZN8touchgfx8LCD16bpp29copyAreaFromTFTToClientBufferERKNS_4RectE+0x12> + 802941c: 4b1f ldr r3, [pc, #124] ; (802949c <_ZN8touchgfx8LCD16bpp29copyAreaFromTFTToClientBufferERKNS_4RectE+0x104>) + 802941e: e7cb b.n 80293b8 <_ZN8touchgfx8LCD16bpp29copyAreaFromTFTToClientBufferERKNS_4RectE+0x20> + 8029420: 6838 ldr r0, [r7, #0] + 8029422: f9bd 800c ldrsh.w r8, [sp, #12] + 8029426: 6803 ldr r3, [r0, #0] + 8029428: f9bd 500e ldrsh.w r5, [sp, #14] + 802942c: ea4f 0848 mov.w r8, r8, lsl #1 + 8029430: 6b1b ldr r3, [r3, #48] ; 0x30 + 8029432: 4798 blx r3 + 8029434: f9bd 3008 ldrsh.w r3, [sp, #8] + 8029438: f8bd 200a ldrh.w r2, [sp, #10] + 802943c: f8bd 6004 ldrh.w r6, [sp, #4] + 8029440: fb16 3602 smlabb r6, r6, r2, r3 + 8029444: eb00 0646 add.w r6, r0, r6, lsl #1 + 8029448: 6838 ldr r0, [r7, #0] + 802944a: 6803 ldr r3, [r0, #0] + 802944c: 6a9b ldr r3, [r3, #40] ; 0x28 + 802944e: 4798 blx r3 + 8029450: 4a12 ldr r2, [pc, #72] ; (802949c <_ZN8touchgfx8LCD16bpp29copyAreaFromTFTToClientBufferERKNS_4RectE+0x104>) + 8029452: f9bd 400a ldrsh.w r4, [sp, #10] + 8029456: 8813 ldrh r3, [r2, #0] + 8029458: 4691 mov r9, r2 + 802945a: f9bd 1008 ldrsh.w r1, [sp, #8] + 802945e: 435d muls r5, r3 + 8029460: fb03 1404 mla r4, r3, r4, r1 + 8029464: eb00 0444 add.w r4, r0, r4, lsl #1 + 8029468: eb04 0545 add.w r5, r4, r5, lsl #1 + 802946c: 6838 ldr r0, [r7, #0] + 802946e: 42ac cmp r4, r5 + 8029470: 6803 ldr r3, [r0, #0] + 8029472: d20e bcs.n 8029492 <_ZN8touchgfx8LCD16bpp29copyAreaFromTFTToClientBufferERKNS_4RectE+0xfa> + 8029474: f8d3 a034 ldr.w sl, [r3, #52] ; 0x34 + 8029478: 4632 mov r2, r6 + 802947a: 4643 mov r3, r8 + 802947c: 4621 mov r1, r4 + 802947e: 47d0 blx sl + 8029480: f8b9 3000 ldrh.w r3, [r9] + 8029484: eb04 0443 add.w r4, r4, r3, lsl #1 + 8029488: f9bd 3004 ldrsh.w r3, [sp, #4] + 802948c: eb06 0643 add.w r6, r6, r3, lsl #1 + 8029490: e7ec b.n 802946c <_ZN8touchgfx8LCD16bpp29copyAreaFromTFTToClientBufferERKNS_4RectE+0xd4> + 8029492: 6adb ldr r3, [r3, #44] ; 0x2c + 8029494: 4798 blx r3 + 8029496: e7bc b.n 8029412 <_ZN8touchgfx8LCD16bpp29copyAreaFromTFTToClientBufferERKNS_4RectE+0x7a> + 8029498: 2001e72c .word 0x2001e72c + 802949c: 2001e72e .word 0x2001e72e + 80294a0: 2001e730 .word 0x2001e730 + 80294a4: 2001e734 .word 0x2001e734 + +080294a8 <_ZN8touchgfx8LCD16bpp8blitCopyEPKtRKNS_4RectES5_hb>: + 80294a8: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 80294ac: b08b sub sp, #44 ; 0x2c + 80294ae: 460f mov r7, r1 + 80294b0: 4616 mov r6, r2 + 80294b2: f89d b050 ldrb.w fp, [sp, #80] ; 0x50 + 80294b6: f89d 4054 ldrb.w r4, [sp, #84] ; 0x54 + 80294ba: f1bb 0f00 cmp.w fp, #0 + 80294be: d04a beq.n 8029556 <_ZN8touchgfx8LCD16bpp8blitCopyEPKtRKNS_4RectES5_hb+0xae> + 80294c0: 6810 ldr r0, [r2, #0] + 80294c2: ad06 add r5, sp, #24 + 80294c4: 6851 ldr r1, [r2, #4] + 80294c6: c503 stmia r5!, {r0, r1} + 80294c8: 6818 ldr r0, [r3, #0] + 80294ca: ad08 add r5, sp, #32 + 80294cc: 6859 ldr r1, [r3, #4] + 80294ce: c503 stmia r5!, {r0, r1} + 80294d0: a806 add r0, sp, #24 + 80294d2: f7f9 fff1 bl 80234b8 <_ZN8touchgfx21DisplayTransformation29transformDisplayToFrameBufferERNS_4RectE> + 80294d6: 4631 mov r1, r6 + 80294d8: a808 add r0, sp, #32 + 80294da: f7fa f815 bl 8023508 <_ZN8touchgfx21DisplayTransformation29transformDisplayToFrameBufferERNS_4RectERKS1_> + 80294de: f9bd 2020 ldrsh.w r2, [sp, #32] + 80294e2: f9bd 3022 ldrsh.w r3, [sp, #34] ; 0x22 + 80294e6: f8bd 601c ldrh.w r6, [sp, #28] + 80294ea: f9bd 8024 ldrsh.w r8, [sp, #36] ; 0x24 + 80294ee: fb16 2103 smlabb r1, r6, r3, r2 + 80294f2: f9bd 5026 ldrsh.w r5, [sp, #38] ; 0x26 + 80294f6: eb07 0641 add.w r6, r7, r1, lsl #1 + 80294fa: f8bd 1018 ldrh.w r1, [sp, #24] + 80294fe: 4f5f ldr r7, [pc, #380] ; (802967c <_ZN8touchgfx8LCD16bpp8blitCopyEPKtRKNS_4RectES5_hb+0x1d4>) + 8029500: 440a add r2, r1 + 8029502: 6838 ldr r0, [r7, #0] + 8029504: 46b9 mov r9, r7 + 8029506: f8ad 2020 strh.w r2, [sp, #32] + 802950a: f8bd 201a ldrh.w r2, [sp, #26] + 802950e: 4413 add r3, r2 + 8029510: f8ad 3022 strh.w r3, [sp, #34] ; 0x22 + 8029514: 6803 ldr r3, [r0, #0] + 8029516: 6b9b ldr r3, [r3, #56] ; 0x38 + 8029518: 4798 blx r3 + 802951a: f1bb 0fff cmp.w fp, #255 ; 0xff + 802951e: d11d bne.n 802955c <_ZN8touchgfx8LCD16bpp8blitCopyEPKtRKNS_4RectES5_hb+0xb4> + 8029520: b9fc cbnz r4, 8029562 <_ZN8touchgfx8LCD16bpp8blitCopyEPKtRKNS_4RectES5_hb+0xba> + 8029522: f010 0f01 tst.w r0, #1 + 8029526: d01c beq.n 8029562 <_ZN8touchgfx8LCD16bpp8blitCopyEPKtRKNS_4RectES5_hb+0xba> + 8029528: f8d9 0000 ldr.w r0, [r9] + 802952c: 2700 movs r7, #0 + 802952e: b2ad uxth r5, r5 + 8029530: f8bd 3022 ldrh.w r3, [sp, #34] ; 0x22 + 8029534: 6801 ldr r1, [r0, #0] + 8029536: f8bd 2020 ldrh.w r2, [sp, #32] + 802953a: f8cd b00c str.w fp, [sp, #12] + 802953e: 9501 str r5, [sp, #4] + 8029540: e9cd 4704 strd r4, r7, [sp, #16] + 8029544: f8bd 401c ldrh.w r4, [sp, #28] + 8029548: 9402 str r4, [sp, #8] + 802954a: fa1f f488 uxth.w r4, r8 + 802954e: 9400 str r4, [sp, #0] + 8029550: 6c4c ldr r4, [r1, #68] ; 0x44 + 8029552: 4631 mov r1, r6 + 8029554: 47a0 blx r4 + 8029556: b00b add sp, #44 ; 0x2c + 8029558: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 802955c: f010 0f04 tst.w r0, #4 + 8029560: e7e1 b.n 8029526 <_ZN8touchgfx8LCD16bpp8blitCopyEPKtRKNS_4RectES5_hb+0x7e> + 8029562: f8d9 0000 ldr.w r0, [r9] + 8029566: ea4f 0748 mov.w r7, r8, lsl #1 + 802956a: 6803 ldr r3, [r0, #0] + 802956c: 6a9b ldr r3, [r3, #40] ; 0x28 + 802956e: 4798 blx r3 + 8029570: 4b43 ldr r3, [pc, #268] ; (8029680 <_ZN8touchgfx8LCD16bpp8blitCopyEPKtRKNS_4RectES5_hb+0x1d8>) + 8029572: f9bd 4022 ldrsh.w r4, [sp, #34] ; 0x22 + 8029576: f1bb 0fff cmp.w fp, #255 ; 0xff + 802957a: 881a ldrh r2, [r3, #0] + 802957c: 469a mov sl, r3 + 802957e: f9bd 1020 ldrsh.w r1, [sp, #32] + 8029582: fb05 f502 mul.w r5, r5, r2 + 8029586: fb02 1404 mla r4, r2, r4, r1 + 802958a: eb00 0444 add.w r4, r0, r4, lsl #1 + 802958e: d059 beq.n 8029644 <_ZN8touchgfx8LCD16bpp8blitCopyEPKtRKNS_4RectES5_hb+0x19c> + 8029590: f1cb 09ff rsb r9, fp, #255 ; 0xff + 8029594: eb04 0545 add.w r5, r4, r5, lsl #1 + 8029598: fa1f f28b uxth.w r2, fp + 802959c: 469e mov lr, r3 + 802959e: fa1f f989 uxth.w r9, r9 + 80295a2: 42ac cmp r4, r5 + 80295a4: d264 bcs.n 8029670 <_ZN8touchgfx8LCD16bpp8blitCopyEPKtRKNS_4RectES5_hb+0x1c8> + 80295a6: eb04 0a07 add.w sl, r4, r7 + 80295aa: 4554 cmp r4, sl + 80295ac: d23d bcs.n 802962a <_ZN8touchgfx8LCD16bpp8blitCopyEPKtRKNS_4RectES5_hb+0x182> + 80295ae: 8821 ldrh r1, [r4, #0] + 80295b0: f836 3b02 ldrh.w r3, [r6], #2 + 80295b4: 1208 asrs r0, r1, #8 + 80295b6: ea4f 2c23 mov.w ip, r3, asr #8 + 80295ba: f000 00f8 and.w r0, r0, #248 ; 0xf8 + 80295be: ea4f 0be1 mov.w fp, r1, asr #3 + 80295c2: f00c 0cf8 and.w ip, ip, #248 ; 0xf8 + 80295c6: 00c9 lsls r1, r1, #3 + 80295c8: fb10 f009 smulbb r0, r0, r9 + 80295cc: f00b 0bfc and.w fp, fp, #252 ; 0xfc + 80295d0: b2c9 uxtb r1, r1 + 80295d2: fb0c 0c02 mla ip, ip, r2, r0 + 80295d6: 10d8 asrs r0, r3, #3 + 80295d8: fb1b fb09 smulbb fp, fp, r9 + 80295dc: 00db lsls r3, r3, #3 + 80295de: fa1f fc8c uxth.w ip, ip + 80295e2: f000 00fc and.w r0, r0, #252 ; 0xfc + 80295e6: fb11 f109 smulbb r1, r1, r9 + 80295ea: b2db uxtb r3, r3 + 80295ec: fb00 b002 mla r0, r0, r2, fp + 80295f0: f10c 0b01 add.w fp, ip, #1 + 80295f4: fb03 1302 mla r3, r3, r2, r1 + 80295f8: eb0b 2c1c add.w ip, fp, ip, lsr #8 + 80295fc: b29b uxth r3, r3 + 80295fe: b280 uxth r0, r0 + 8029600: f40c 4b78 and.w fp, ip, #63488 ; 0xf800 + 8029604: f103 0c01 add.w ip, r3, #1 + 8029608: eb0c 2c13 add.w ip, ip, r3, lsr #8 + 802960c: 1c43 adds r3, r0, #1 + 802960e: eb03 2010 add.w r0, r3, r0, lsr #8 + 8029612: f3cc 2cc4 ubfx ip, ip, #11, #5 + 8029616: 0940 lsrs r0, r0, #5 + 8029618: ea4c 0c0b orr.w ip, ip, fp + 802961c: f400 60fc and.w r0, r0, #2016 ; 0x7e0 + 8029620: ea4c 0c00 orr.w ip, ip, r0 + 8029624: f824 cb02 strh.w ip, [r4], #2 + 8029628: e7bf b.n 80295aa <_ZN8touchgfx8LCD16bpp8blitCopyEPKtRKNS_4RectES5_hb+0x102> + 802962a: f8be 3000 ldrh.w r3, [lr] + 802962e: eba3 0308 sub.w r3, r3, r8 + 8029632: eb04 0443 add.w r4, r4, r3, lsl #1 + 8029636: f9bd 301c ldrsh.w r3, [sp, #28] + 802963a: eba3 0308 sub.w r3, r3, r8 + 802963e: eb06 0643 add.w r6, r6, r3, lsl #1 + 8029642: e7ae b.n 80295a2 <_ZN8touchgfx8LCD16bpp8blitCopyEPKtRKNS_4RectES5_hb+0xfa> + 8029644: eb04 0545 add.w r5, r4, r5, lsl #1 + 8029648: f8d9 0000 ldr.w r0, [r9] + 802964c: 42ac cmp r4, r5 + 802964e: 6803 ldr r3, [r0, #0] + 8029650: d20e bcs.n 8029670 <_ZN8touchgfx8LCD16bpp8blitCopyEPKtRKNS_4RectES5_hb+0x1c8> + 8029652: f8d3 8034 ldr.w r8, [r3, #52] ; 0x34 + 8029656: 4632 mov r2, r6 + 8029658: 463b mov r3, r7 + 802965a: 4621 mov r1, r4 + 802965c: 47c0 blx r8 + 802965e: f8ba 3000 ldrh.w r3, [sl] + 8029662: eb04 0443 add.w r4, r4, r3, lsl #1 + 8029666: f9bd 301c ldrsh.w r3, [sp, #28] + 802966a: eb06 0643 add.w r6, r6, r3, lsl #1 + 802966e: e7eb b.n 8029648 <_ZN8touchgfx8LCD16bpp8blitCopyEPKtRKNS_4RectES5_hb+0x1a0> + 8029670: 4b02 ldr r3, [pc, #8] ; (802967c <_ZN8touchgfx8LCD16bpp8blitCopyEPKtRKNS_4RectES5_hb+0x1d4>) + 8029672: 6818 ldr r0, [r3, #0] + 8029674: 6803 ldr r3, [r0, #0] + 8029676: 6adb ldr r3, [r3, #44] ; 0x2c + 8029678: 4798 blx r3 + 802967a: e76c b.n 8029556 <_ZN8touchgfx8LCD16bpp8blitCopyEPKtRKNS_4RectES5_hb+0xae> + 802967c: 2001e734 .word 0x2001e734 + 8029680: 2001e72e .word 0x2001e72e + +08029684 <_ZN8touchgfx8LCD16bppD0Ev>: + 8029684: b510 push {r4, lr} + 8029686: 4604 mov r4, r0 + 8029688: 2184 movs r1, #132 ; 0x84 + 802968a: f00a fe34 bl 80342f6 <_ZdlPvj> + 802968e: 4620 mov r0, r4 + 8029690: bd10 pop {r4, pc} + +08029692 <_ZN8touchgfx8LCD16bpp17DecompressorL8_L4D0Ev>: + 8029692: b510 push {r4, lr} + 8029694: 4604 mov r4, r0 + 8029696: 2104 movs r1, #4 + 8029698: f00a fe2d bl 80342f6 <_ZdlPvj> + 802969c: 4620 mov r0, r4 + 802969e: bd10 pop {r4, pc} + +080296a0 <_ZN8touchgfx8LCD16bpp18DecompressorL8_RLED0Ev>: + 80296a0: b510 push {r4, lr} + 80296a2: 4604 mov r4, r0 + 80296a4: 2104 movs r1, #4 + 80296a6: f00a fe26 bl 80342f6 <_ZdlPvj> + 80296aa: 4620 mov r0, r4 + 80296ac: bd10 pop {r4, pc} + +080296ae <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW9D0Ev>: + 80296ae: b510 push {r4, lr} + 80296b0: 4604 mov r4, r0 + 80296b2: f640 0144 movw r1, #2116 ; 0x844 + 80296b6: f00a fe1e bl 80342f6 <_ZdlPvj> + 80296ba: 4620 mov r0, r4 + 80296bc: bd10 pop {r4, pc} + +080296be <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGAD0Ev>: + 80296be: b510 push {r4, lr} + 80296c0: 4604 mov r4, r0 + 80296c2: 2104 movs r1, #4 + 80296c4: f00a fe17 bl 80342f6 <_ZdlPvj> + 80296c8: 4620 mov r0, r4 + 80296ca: bd10 pop {r4, pc} + +080296cc <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GAD0Ev>: + 80296cc: b510 push {r4, lr} + 80296ce: 4604 mov r4, r0 + 80296d0: 2104 movs r1, #4 + 80296d2: f00a fe10 bl 80342f6 <_ZdlPvj> + 80296d6: 4620 mov r0, r4 + 80296d8: bd10 pop {r4, pc} + +080296da <_ZN8touchgfx8LCD16bpp51TextureMapper_L8_RGB565_Opaque_NearestNeighbor_NoGAD0Ev>: + 80296da: b510 push {r4, lr} + 80296dc: 4604 mov r4, r0 + 80296de: 2104 movs r1, #4 + 80296e0: f00a fe09 bl 80342f6 <_ZdlPvj> + 80296e4: 4620 mov r0, r4 + 80296e6: bd10 pop {r4, pc} + +080296e8 <_ZN8touchgfx8LCD16bpp49TextureMapper_L8_RGB565_Opaque_NearestNeighbor_GAD0Ev>: + 80296e8: b510 push {r4, lr} + 80296ea: 4604 mov r4, r0 + 80296ec: 2104 movs r1, #4 + 80296ee: f00a fe02 bl 80342f6 <_ZdlPvj> + 80296f2: 4620 mov r0, r4 + 80296f4: bd10 pop {r4, pc} + +080296f6 <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGAD0Ev>: + 80296f6: b510 push {r4, lr} + 80296f8: 4604 mov r4, r0 + 80296fa: 2104 movs r1, #4 + 80296fc: f00a fdfb bl 80342f6 <_ZdlPvj> + 8029700: 4620 mov r0, r4 + 8029702: bd10 pop {r4, pc} + +08029704 <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GAD0Ev>: + 8029704: b510 push {r4, lr} + 8029706: 4604 mov r4, r0 + 8029708: 2104 movs r1, #4 + 802970a: f00a fdf4 bl 80342f6 <_ZdlPvj> + 802970e: 4620 mov r0, r4 + 8029710: bd10 pop {r4, pc} + +08029712 <_ZN8touchgfx8LCD16bpp51TextureMapper_L8_RGB888_Opaque_NearestNeighbor_NoGAD0Ev>: + 8029712: b510 push {r4, lr} + 8029714: 4604 mov r4, r0 + 8029716: 2104 movs r1, #4 + 8029718: f00a fded bl 80342f6 <_ZdlPvj> + 802971c: 4620 mov r0, r4 + 802971e: bd10 pop {r4, pc} + +08029720 <_ZN8touchgfx8LCD16bpp49TextureMapper_L8_RGB888_Opaque_NearestNeighbor_GAD0Ev>: + 8029720: b510 push {r4, lr} + 8029722: 4604 mov r4, r0 + 8029724: 2104 movs r1, #4 + 8029726: f00a fde6 bl 80342f6 <_ZdlPvj> + 802972a: 4620 mov r0, r4 + 802972c: bd10 pop {r4, pc} + +0802972e <_ZN8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGAD0Ev>: + 802972e: b510 push {r4, lr} + 8029730: 4604 mov r4, r0 + 8029732: 2104 movs r1, #4 + 8029734: f00a fddf bl 80342f6 <_ZdlPvj> + 8029738: 4620 mov r0, r4 + 802973a: bd10 pop {r4, pc} + +0802973c <_ZN8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GAD0Ev>: + 802973c: b510 push {r4, lr} + 802973e: 4604 mov r4, r0 + 8029740: 2104 movs r1, #4 + 8029742: f00a fdd8 bl 80342f6 <_ZdlPvj> + 8029746: 4620 mov r0, r4 + 8029748: bd10 pop {r4, pc} + +0802974a <_ZN8touchgfx8LCD16bpp56TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_NoGAD0Ev>: + 802974a: b510 push {r4, lr} + 802974c: 4604 mov r4, r0 + 802974e: 2104 movs r1, #4 + 8029750: f00a fdd1 bl 80342f6 <_ZdlPvj> + 8029754: 4620 mov r0, r4 + 8029756: bd10 pop {r4, pc} + +08029758 <_ZN8touchgfx8LCD16bpp54TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_GAD0Ev>: + 8029758: b510 push {r4, lr} + 802975a: 4604 mov r4, r0 + 802975c: 2104 movs r1, #4 + 802975e: f00a fdca bl 80342f6 <_ZdlPvj> + 8029762: 4620 mov r0, r4 + 8029764: bd10 pop {r4, pc} + +08029766 <_ZN8touchgfx8LCD16bpp54TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGAD0Ev>: + 8029766: b510 push {r4, lr} + 8029768: 4604 mov r4, r0 + 802976a: 2104 movs r1, #4 + 802976c: f00a fdc3 bl 80342f6 <_ZdlPvj> + 8029770: 4620 mov r0, r4 + 8029772: bd10 pop {r4, pc} + +08029774 <_ZN8touchgfx8LCD16bpp52TextureMapper_RGB565_Opaque_BilinearInterpolation_GAD0Ev>: + 8029774: b510 push {r4, lr} + 8029776: 4604 mov r4, r0 + 8029778: 2104 movs r1, #4 + 802977a: f00a fdbc bl 80342f6 <_ZdlPvj> + 802977e: 4620 mov r0, r4 + 8029780: bd10 pop {r4, pc} + +08029782 <_ZN8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGAD0Ev>: + 8029782: b510 push {r4, lr} + 8029784: 4604 mov r4, r0 + 8029786: 2104 movs r1, #4 + 8029788: f00a fdb5 bl 80342f6 <_ZdlPvj> + 802978c: 4620 mov r0, r4 + 802978e: bd10 pop {r4, pc} + +08029790 <_ZN8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GAD0Ev>: + 8029790: b510 push {r4, lr} + 8029792: 4604 mov r4, r0 + 8029794: 2104 movs r1, #4 + 8029796: f00a fdae bl 80342f6 <_ZdlPvj> + 802979a: 4620 mov r0, r4 + 802979c: bd10 pop {r4, pc} + +0802979e <_ZN8touchgfx8LCD16bpp48TextureMapper_RGB565_Opaque_NearestNeighbor_NoGAD0Ev>: + 802979e: b510 push {r4, lr} + 80297a0: 4604 mov r4, r0 + 80297a2: 2104 movs r1, #4 + 80297a4: f00a fda7 bl 80342f6 <_ZdlPvj> + 80297a8: 4620 mov r0, r4 + 80297aa: bd10 pop {r4, pc} + +080297ac <_ZN8touchgfx8LCD16bpp46TextureMapper_RGB565_Opaque_NearestNeighbor_GAD0Ev>: + 80297ac: b510 push {r4, lr} + 80297ae: 4604 mov r4, r0 + 80297b0: 2104 movs r1, #4 + 80297b2: f00a fda0 bl 80342f6 <_ZdlPvj> + 80297b6: 4620 mov r0, r4 + 80297b8: bd10 pop {r4, pc} + +080297ba <_ZN8touchgfx8LCD16bpp51TextureMapper_RGB565_NonOpaque_NearestNeighbor_NoGAD0Ev>: + 80297ba: b510 push {r4, lr} + 80297bc: 4604 mov r4, r0 + 80297be: 2104 movs r1, #4 + 80297c0: f00a fd99 bl 80342f6 <_ZdlPvj> + 80297c4: 4620 mov r0, r4 + 80297c6: bd10 pop {r4, pc} + +080297c8 <_ZN8touchgfx8LCD16bpp49TextureMapper_RGB565_NonOpaque_NearestNeighbor_GAD0Ev>: + 80297c8: b510 push {r4, lr} + 80297ca: 4604 mov r4, r0 + 80297cc: 2104 movs r1, #4 + 80297ce: f00a fd92 bl 80342f6 <_ZdlPvj> + 80297d2: 4620 mov r0, r4 + 80297d4: bd10 pop {r4, pc} + +080297d6 <_ZN8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGAD0Ev>: + 80297d6: b510 push {r4, lr} + 80297d8: 4604 mov r4, r0 + 80297da: 2104 movs r1, #4 + 80297dc: f00a fd8b bl 80342f6 <_ZdlPvj> + 80297e0: 4620 mov r0, r4 + 80297e2: bd10 pop {r4, pc} + +080297e4 <_ZN8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GAD0Ev>: + 80297e4: b510 push {r4, lr} + 80297e6: 4604 mov r4, r0 + 80297e8: 2104 movs r1, #4 + 80297ea: f00a fd84 bl 80342f6 <_ZdlPvj> + 80297ee: 4620 mov r0, r4 + 80297f0: bd10 pop {r4, pc} + +080297f2 <_ZN8touchgfx8LCD16bpp53TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_NoGAD0Ev>: + 80297f2: b510 push {r4, lr} + 80297f4: 4604 mov r4, r0 + 80297f6: 2104 movs r1, #4 + 80297f8: f00a fd7d bl 80342f6 <_ZdlPvj> + 80297fc: 4620 mov r0, r4 + 80297fe: bd10 pop {r4, pc} + +08029800 <_ZN8touchgfx8LCD16bpp51TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_GAD0Ev>: + 8029800: b510 push {r4, lr} + 8029802: 4604 mov r4, r0 + 8029804: 2104 movs r1, #4 + 8029806: f00a fd76 bl 80342f6 <_ZdlPvj> + 802980a: 4620 mov r0, r4 + 802980c: bd10 pop {r4, pc} + +0802980e <_ZN8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGAD0Ev>: + 802980e: b510 push {r4, lr} + 8029810: 4604 mov r4, r0 + 8029812: 2104 movs r1, #4 + 8029814: f00a fd6f bl 80342f6 <_ZdlPvj> + 8029818: 4620 mov r0, r4 + 802981a: bd10 pop {r4, pc} + +0802981c <_ZN8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GAD0Ev>: + 802981c: b510 push {r4, lr} + 802981e: 4604 mov r4, r0 + 8029820: 2104 movs r1, #4 + 8029822: f00a fd68 bl 80342f6 <_ZdlPvj> + 8029826: 4620 mov r0, r4 + 8029828: bd10 pop {r4, pc} + +0802982a <_ZN8touchgfx8LCD16bpp37TextureMapper_A4_NearestNeighbor_NoGAD0Ev>: + 802982a: b510 push {r4, lr} + 802982c: 4604 mov r4, r0 + 802982e: 2104 movs r1, #4 + 8029830: f00a fd61 bl 80342f6 <_ZdlPvj> + 8029834: 4620 mov r0, r4 + 8029836: bd10 pop {r4, pc} + +08029838 <_ZN8touchgfx8LCD16bpp35TextureMapper_A4_NearestNeighbor_GAD0Ev>: + 8029838: b510 push {r4, lr} + 802983a: 4604 mov r4, r0 + 802983c: 2104 movs r1, #4 + 802983e: f00a fd5a bl 80342f6 <_ZdlPvj> + 8029842: 4620 mov r0, r4 + 8029844: bd10 pop {r4, pc} + ... + +08029848 <_ZN8touchgfx8LCD16bpp18DecompressorL8_RLE14blitCopyRGB565EPKhS3_RKNS_4RectES6_h>: + 8029848: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 802984c: b08f sub sp, #60 ; 0x3c + 802984e: 461c mov r4, r3 + 8029850: 9205 str r2, [sp, #20] + 8029852: f89d 2064 ldrb.w r2, [sp, #100] ; 0x64 + 8029856: 9100 str r1, [sp, #0] + 8029858: 9b18 ldr r3, [sp, #96] ; 0x60 + 802985a: 9201 str r2, [sp, #4] + 802985c: 2a00 cmp r2, #0 + 802985e: f000 8116 beq.w 8029a8e <_ZN8touchgfx8LCD16bpp18DecompressorL8_RLE14blitCopyRGB565EPKhS3_RKNS_4RectES6_h+0x246> + 8029862: 6820 ldr r0, [r4, #0] + 8029864: aa0a add r2, sp, #40 ; 0x28 + 8029866: 6861 ldr r1, [r4, #4] + 8029868: c203 stmia r2!, {r0, r1} + 802986a: 6818 ldr r0, [r3, #0] + 802986c: aa0c add r2, sp, #48 ; 0x30 + 802986e: 6859 ldr r1, [r3, #4] + 8029870: c203 stmia r2!, {r0, r1} + 8029872: a80a add r0, sp, #40 ; 0x28 + 8029874: f7f9 fe20 bl 80234b8 <_ZN8touchgfx21DisplayTransformation29transformDisplayToFrameBufferERNS_4RectE> + 8029878: 4621 mov r1, r4 + 802987a: a80c add r0, sp, #48 ; 0x30 + 802987c: f7f9 fe44 bl 8023508 <_ZN8touchgfx21DisplayTransformation29transformDisplayToFrameBufferERNS_4RectERKS1_> + 8029880: f9bd 602c ldrsh.w r6, [sp, #44] ; 0x2c + 8029884: f9bd 502e ldrsh.w r5, [sp, #46] ; 0x2e + 8029888: f5b6 6f80 cmp.w r6, #1024 ; 0x400 + 802988c: f8bd 0030 ldrh.w r0, [sp, #48] ; 0x30 + 8029890: bfdb ittet le + 8029892: b2b3 uxthle r3, r6 + 8029894: f44f 6280 movle.w r2, #1024 ; 0x400 + 8029898: 2301 movgt r3, #1 + 802989a: fb92 f3f3 sdivle r3, r2, r3 + 802989e: f9bd 2032 ldrsh.w r2, [sp, #50] ; 0x32 + 80298a2: 441d add r5, r3 + 80298a4: fb92 f1f3 sdiv r1, r2, r3 + 80298a8: fa1f fc81 uxth.w ip, r1 + 80298ac: 3d01 subs r5, #1 + 80298ae: fb0c 2413 mls r4, ip, r3, r2 + 80298b2: 4661 mov r1, ip + 80298b4: fb14 f406 smulbb r4, r4, r6 + 80298b8: 4404 add r4, r0 + 80298ba: fb95 f5f3 sdiv r5, r5, r3 + 80298be: b2a4 uxth r4, r4 + 80298c0: b131 cbz r1, 80298d0 <_ZN8touchgfx8LCD16bpp18DecompressorL8_RLE14blitCopyRGB565EPKhS3_RKNS_4RectES6_h+0x88> + 80298c2: 9b05 ldr r3, [sp, #20] + 80298c4: 9900 ldr r1, [sp, #0] + 80298c6: f853 302c ldr.w r3, [r3, ip, lsl #2] + 80298ca: ba1b rev r3, r3 + 80298cc: 4419 add r1, r3 + 80298ce: 9100 str r1, [sp, #0] + 80298d0: f8bd 3028 ldrh.w r3, [sp, #40] ; 0x28 + 80298d4: b2ad uxth r5, r5 + 80298d6: f9bd 8034 ldrsh.w r8, [sp, #52] ; 0x34 + 80298da: 4418 add r0, r3 + 80298dc: f8bd 302a ldrh.w r3, [sp, #42] ; 0x2a + 80298e0: f9bd 6036 ldrsh.w r6, [sp, #54] ; 0x36 + 80298e4: 00ad lsls r5, r5, #2 + 80298e6: 441a add r2, r3 + 80298e8: 4b6a ldr r3, [pc, #424] ; (8029a94 <_ZN8touchgfx8LCD16bpp18DecompressorL8_RLE14blitCopyRGB565EPKhS3_RKNS_4RectES6_h+0x24c>) + 80298ea: f8ad 0030 strh.w r0, [sp, #48] ; 0x30 + 80298ee: 6818 ldr r0, [r3, #0] + 80298f0: f8ad 2032 strh.w r2, [sp, #50] ; 0x32 + 80298f4: 6803 ldr r3, [r0, #0] + 80298f6: 6a9b ldr r3, [r3, #40] ; 0x28 + 80298f8: 4798 blx r3 + 80298fa: 4967 ldr r1, [pc, #412] ; (8029a98 <_ZN8touchgfx8LCD16bpp18DecompressorL8_RLE14blitCopyRGB565EPKhS3_RKNS_4RectES6_h+0x250>) + 80298fc: f9bd 2032 ldrsh.w r2, [sp, #50] ; 0x32 + 8029900: 2c00 cmp r4, #0 + 8029902: 880b ldrh r3, [r1, #0] + 8029904: f9bd c030 ldrsh.w ip, [sp, #48] ; 0x30 + 8029908: bf0c ite eq + 802990a: 46c6 moveq lr, r8 + 802990c: f04f 0e00 movne.w lr, #0 + 8029910: 9109 str r1, [sp, #36] ; 0x24 + 8029912: fb03 c202 mla r2, r3, r2, ip + 8029916: f8bd 1004 ldrh.w r1, [sp, #4] + 802991a: 4373 muls r3, r6 + 802991c: fa1f fe8e uxth.w lr, lr + 8029920: eb00 0042 add.w r0, r0, r2, lsl #1 + 8029924: 9103 str r1, [sp, #12] + 8029926: eb00 0343 add.w r3, r0, r3, lsl #1 + 802992a: 9306 str r3, [sp, #24] + 802992c: 1d2b adds r3, r5, #4 + 802992e: 9307 str r3, [sp, #28] + 8029930: 9b01 ldr r3, [sp, #4] + 8029932: f1c3 02ff rsb r2, r3, #255 ; 0xff + 8029936: 2300 movs r3, #0 + 8029938: b292 uxth r2, r2 + 802993a: 9302 str r3, [sp, #8] + 802993c: 9204 str r2, [sp, #16] + 802993e: 9a06 ldr r2, [sp, #24] + 8029940: 4282 cmp r2, r0 + 8029942: f240 809f bls.w 8029a84 <_ZN8touchgfx8LCD16bpp18DecompressorL8_RLE14blitCopyRGB565EPKhS3_RKNS_4RectES6_h+0x23c> + 8029946: b963 cbnz r3, 8029962 <_ZN8touchgfx8LCD16bpp18DecompressorL8_RLE14blitCopyRGB565EPKhS3_RKNS_4RectES6_h+0x11a> + 8029948: 9b00 ldr r3, [sp, #0] + 802994a: 781a ldrb r2, [r3, #0] + 802994c: 0993 lsrs r3, r2, #6 + 802994e: f002 023f and.w r2, r2, #63 ; 0x3f + 8029952: 9202 str r2, [sp, #8] + 8029954: 1e5a subs r2, r3, #1 + 8029956: 2a02 cmp r2, #2 + 8029958: d815 bhi.n 8029986 <_ZN8touchgfx8LCD16bpp18DecompressorL8_RLE14blitCopyRGB565EPKhS3_RKNS_4RectES6_h+0x13e> + 802995a: 9a00 ldr r2, [sp, #0] + 802995c: b29b uxth r3, r3 + 802995e: 3201 adds r2, #1 + 8029960: 9200 str r2, [sp, #0] + 8029962: b1b4 cbz r4, 8029992 <_ZN8touchgfx8LCD16bpp18DecompressorL8_RLE14blitCopyRGB565EPKhS3_RKNS_4RectES6_h+0x14a> + 8029964: 429c cmp r4, r3 + 8029966: bf91 iteee ls + 8029968: 1b1c subls r4, r3, r4 + 802996a: 1ae4 subhi r4, r4, r3 + 802996c: 4671 movhi r1, lr + 802996e: f04f 0a00 movhi.w sl, #0 + 8029972: bf9b ittet ls + 8029974: fa1f fa84 uxthls.w sl, r4 + 8029978: 2400 movls r4, #0 + 802997a: b2a4 uxthhi r4, r4 + 802997c: fa1f f188 uxthls.w r1, r8 + 8029980: 4653 mov r3, sl + 8029982: 468e mov lr, r1 + 8029984: e7db b.n 802993e <_ZN8touchgfx8LCD16bpp18DecompressorL8_RLE14blitCopyRGB565EPKhS3_RKNS_4RectES6_h+0xf6> + 8029986: 9a00 ldr r2, [sp, #0] + 8029988: 9b00 ldr r3, [sp, #0] + 802998a: 3202 adds r2, #2 + 802998c: 785b ldrb r3, [r3, #1] + 802998e: 9200 str r2, [sp, #0] + 8029990: e7e7 b.n 8029962 <_ZN8touchgfx8LCD16bpp18DecompressorL8_RLE14blitCopyRGB565EPKhS3_RKNS_4RectES6_h+0x11a> + 8029992: 2202 movs r2, #2 + 8029994: 9907 ldr r1, [sp, #28] + 8029996: 4573 cmp r3, lr + 8029998: 4615 mov r5, r2 + 802999a: 9a02 ldr r2, [sp, #8] + 802999c: bf24 itt cs + 802999e: eba3 0a0e subcs.w sl, r3, lr + 80299a2: 46f1 movcs r9, lr + 80299a4: fb15 1202 smlabb r2, r5, r2, r1 + 80299a8: 9905 ldr r1, [sp, #20] + 80299aa: bf34 ite cc + 80299ac: 4699 movcc r9, r3 + 80299ae: fa1f fa8a uxthcs.w sl, sl + 80299b2: f831 c002 ldrh.w ip, [r1, r2] + 80299b6: bf38 it cc + 80299b8: ebae 0103 subcc.w r1, lr, r3 + 80299bc: 9a01 ldr r2, [sp, #4] + 80299be: bf2e itee cs + 80299c0: 4621 movcs r1, r4 + 80299c2: b289 uxthcc r1, r1 + 80299c4: 46a2 movcc sl, r4 + 80299c6: 2aff cmp r2, #255 ; 0xff + 80299c8: ea4f 0949 mov.w r9, r9, lsl #1 + 80299cc: d105 bne.n 80299da <_ZN8touchgfx8LCD16bpp18DecompressorL8_RLE14blitCopyRGB565EPKhS3_RKNS_4RectES6_h+0x192> + 80299ce: 4481 add r9, r0 + 80299d0: 4581 cmp r9, r0 + 80299d2: d045 beq.n 8029a60 <_ZN8touchgfx8LCD16bpp18DecompressorL8_RLE14blitCopyRGB565EPKhS3_RKNS_4RectES6_h+0x218> + 80299d4: f820 cb02 strh.w ip, [r0], #2 + 80299d8: e7fa b.n 80299d0 <_ZN8touchgfx8LCD16bpp18DecompressorL8_RLE14blitCopyRGB565EPKhS3_RKNS_4RectES6_h+0x188> + 80299da: ea4f 222c mov.w r2, ip, asr #8 + 80299de: 9d03 ldr r5, [sp, #12] + 80299e0: ea4f 0bec mov.w fp, ip, asr #3 + 80299e4: 4481 add r9, r0 + 80299e6: ea4f 0ccc mov.w ip, ip, lsl #3 + 80299ea: f002 02f8 and.w r2, r2, #248 ; 0xf8 + 80299ee: f00b 0bfc and.w fp, fp, #252 ; 0xfc + 80299f2: fa5f fc8c uxtb.w ip, ip + 80299f6: 436a muls r2, r5 + 80299f8: fb0b fb05 mul.w fp, fp, r5 + 80299fc: fb0c fc05 mul.w ip, ip, r5 + 8029a00: 9208 str r2, [sp, #32] + 8029a02: 4581 cmp r9, r0 + 8029a04: d02c beq.n 8029a60 <_ZN8touchgfx8LCD16bpp18DecompressorL8_RLE14blitCopyRGB565EPKhS3_RKNS_4RectES6_h+0x218> + 8029a06: 8802 ldrh r2, [r0, #0] + 8029a08: 9d04 ldr r5, [sp, #16] + 8029a0a: 1216 asrs r6, r2, #8 + 8029a0c: 9f04 ldr r7, [sp, #16] + 8029a0e: f006 06f8 and.w r6, r6, #248 ; 0xf8 + 8029a12: fb16 f605 smulbb r6, r6, r5 + 8029a16: 9d08 ldr r5, [sp, #32] + 8029a18: 442e add r6, r5 + 8029a1a: 10d5 asrs r5, r2, #3 + 8029a1c: 00d2 lsls r2, r2, #3 + 8029a1e: b2b6 uxth r6, r6 + 8029a20: f005 05fc and.w r5, r5, #252 ; 0xfc + 8029a24: b2d2 uxtb r2, r2 + 8029a26: fb15 f507 smulbb r5, r5, r7 + 8029a2a: fb12 f207 smulbb r2, r2, r7 + 8029a2e: 1c77 adds r7, r6, #1 + 8029a30: 445d add r5, fp + 8029a32: 4462 add r2, ip + 8029a34: eb07 2616 add.w r6, r7, r6, lsr #8 + 8029a38: b2ad uxth r5, r5 + 8029a3a: b292 uxth r2, r2 + 8029a3c: f406 4678 and.w r6, r6, #63488 ; 0xf800 + 8029a40: 1c57 adds r7, r2, #1 + 8029a42: eb07 2212 add.w r2, r7, r2, lsr #8 + 8029a46: f3c2 22c4 ubfx r2, r2, #11, #5 + 8029a4a: 4316 orrs r6, r2 + 8029a4c: 1c6a adds r2, r5, #1 + 8029a4e: eb02 2515 add.w r5, r2, r5, lsr #8 + 8029a52: 096d lsrs r5, r5, #5 + 8029a54: f405 65fc and.w r5, r5, #2016 ; 0x7e0 + 8029a58: 432e orrs r6, r5 + 8029a5a: f820 6b02 strh.w r6, [r0], #2 + 8029a5e: e7d0 b.n 8029a02 <_ZN8touchgfx8LCD16bpp18DecompressorL8_RLE14blitCopyRGB565EPKhS3_RKNS_4RectES6_h+0x1ba> + 8029a60: 4573 cmp r3, lr + 8029a62: d38d bcc.n 8029980 <_ZN8touchgfx8LCD16bpp18DecompressorL8_RLE14blitCopyRGB565EPKhS3_RKNS_4RectES6_h+0x138> + 8029a64: fa1f f188 uxth.w r1, r8 + 8029a68: f8bd 402c ldrh.w r4, [sp, #44] ; 0x2c + 8029a6c: 9b09 ldr r3, [sp, #36] ; 0x24 + 8029a6e: 1a64 subs r4, r4, r1 + 8029a70: 881b ldrh r3, [r3, #0] + 8029a72: b2a4 uxth r4, r4 + 8029a74: eba3 0308 sub.w r3, r3, r8 + 8029a78: 2c00 cmp r4, #0 + 8029a7a: eb00 0043 add.w r0, r0, r3, lsl #1 + 8029a7e: bf18 it ne + 8029a80: 2100 movne r1, #0 + 8029a82: e77d b.n 8029980 <_ZN8touchgfx8LCD16bpp18DecompressorL8_RLE14blitCopyRGB565EPKhS3_RKNS_4RectES6_h+0x138> + 8029a84: 4b03 ldr r3, [pc, #12] ; (8029a94 <_ZN8touchgfx8LCD16bpp18DecompressorL8_RLE14blitCopyRGB565EPKhS3_RKNS_4RectES6_h+0x24c>) + 8029a86: 6818 ldr r0, [r3, #0] + 8029a88: 6803 ldr r3, [r0, #0] + 8029a8a: 6adb ldr r3, [r3, #44] ; 0x2c + 8029a8c: 4798 blx r3 + 8029a8e: b00f add sp, #60 ; 0x3c + 8029a90: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 8029a94: 2001e734 .word 0x2001e734 + 8029a98: 2001e72e .word 0x2001e72e + +08029a9c <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW914blitCopyRGB565EPKhS3_RKNS_4RectES6_h>: + 8029a9c: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8029aa0: b09f sub sp, #124 ; 0x7c + 8029aa2: 461d mov r5, r3 + 8029aa4: 4604 mov r4, r0 + 8029aa6: 9b28 ldr r3, [sp, #160] ; 0xa0 + 8029aa8: e9cd 1213 strd r1, r2, [sp, #76] ; 0x4c + 8029aac: f89d 20a4 ldrb.w r2, [sp, #164] ; 0xa4 + 8029ab0: 9209 str r2, [sp, #36] ; 0x24 + 8029ab2: 2a00 cmp r2, #0 + 8029ab4: f000 81ed beq.w 8029e92 <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW914blitCopyRGB565EPKhS3_RKNS_4RectES6_h+0x3f6> + 8029ab8: 6828 ldr r0, [r5, #0] + 8029aba: aa1a add r2, sp, #104 ; 0x68 + 8029abc: 6869 ldr r1, [r5, #4] + 8029abe: c203 stmia r2!, {r0, r1} + 8029ac0: 6818 ldr r0, [r3, #0] + 8029ac2: aa1c add r2, sp, #112 ; 0x70 + 8029ac4: 6859 ldr r1, [r3, #4] + 8029ac6: c203 stmia r2!, {r0, r1} + 8029ac8: a81a add r0, sp, #104 ; 0x68 + 8029aca: f7f9 fcf5 bl 80234b8 <_ZN8touchgfx21DisplayTransformation29transformDisplayToFrameBufferERNS_4RectE> + 8029ace: 4629 mov r1, r5 + 8029ad0: a81c add r0, sp, #112 ; 0x70 + 8029ad2: f7f9 fd19 bl 8023508 <_ZN8touchgfx21DisplayTransformation29transformDisplayToFrameBufferERNS_4RectERKS1_> + 8029ad6: f9bd 306c ldrsh.w r3, [sp, #108] ; 0x6c + 8029ada: f9bd 806e ldrsh.w r8, [sp, #110] ; 0x6e + 8029ade: f5b3 6f80 cmp.w r3, #1024 ; 0x400 + 8029ae2: f9bd 6076 ldrsh.w r6, [sp, #118] ; 0x76 + 8029ae6: bfdb ittet le + 8029ae8: b29a uxthle r2, r3 + 8029aea: f44f 6180 movle.w r1, #1024 ; 0x400 + 8029aee: 2201 movgt r2, #1 + 8029af0: fb91 f2f2 sdivle r2, r1, r2 + 8029af4: 9202 str r2, [sp, #8] + 8029af6: 9802 ldr r0, [sp, #8] + 8029af8: f9bd 2072 ldrsh.w r2, [sp, #114] ; 0x72 + 8029afc: 9902 ldr r1, [sp, #8] + 8029afe: fb92 f0f0 sdiv r0, r2, r0 + 8029b02: b280 uxth r0, r0 + 8029b04: 4488 add r8, r1 + 8029b06: 9010 str r0, [sp, #64] ; 0x40 + 8029b08: f108 38ff add.w r8, r8, #4294967295 + 8029b0c: 9802 ldr r0, [sp, #8] + 8029b0e: 9d10 ldr r5, [sp, #64] ; 0x40 + 8029b10: fb05 2510 mls r5, r5, r0, r2 + 8029b14: fb98 f8f1 sdiv r8, r8, r1 + 8029b18: fb15 f503 smulbb r5, r5, r3 + 8029b1c: f8bd 1070 ldrh.w r1, [sp, #112] ; 0x70 + 8029b20: f8bd 3068 ldrh.w r3, [sp, #104] ; 0x68 + 8029b24: f108 0801 add.w r8, r8, #1 + 8029b28: 440d add r5, r1 + 8029b2a: 4419 add r1, r3 + 8029b2c: f8bd 306a ldrh.w r3, [sp, #106] ; 0x6a + 8029b30: fa1f f888 uxth.w r8, r8 + 8029b34: 441a add r2, r3 + 8029b36: f9bd 3074 ldrsh.w r3, [sp, #116] ; 0x74 + 8029b3a: f8ad 1070 strh.w r1, [sp, #112] ; 0x70 + 8029b3e: b2ad uxth r5, r5 + 8029b40: 9304 str r3, [sp, #16] + 8029b42: 4b94 ldr r3, [pc, #592] ; (8029d94 <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW914blitCopyRGB565EPKhS3_RKNS_4RectES6_h+0x2f8>) + 8029b44: f8ad 2072 strh.w r2, [sp, #114] ; 0x72 + 8029b48: 6818 ldr r0, [r3, #0] + 8029b4a: 6803 ldr r3, [r0, #0] + 8029b4c: 6a9b ldr r3, [r3, #40] ; 0x28 + 8029b4e: 4798 blx r3 + 8029b50: 4b91 ldr r3, [pc, #580] ; (8029d98 <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW914blitCopyRGB565EPKhS3_RKNS_4RectES6_h+0x2fc>) + 8029b52: f9bd 1072 ldrsh.w r1, [sp, #114] ; 0x72 + 8029b56: 2d00 cmp r5, #0 + 8029b58: 881a ldrh r2, [r3, #0] + 8029b5a: f9bd 7070 ldrsh.w r7, [sp, #112] ; 0x70 + 8029b5e: fb02 f606 mul.w r6, r2, r6 + 8029b62: fb02 7101 mla r1, r2, r1, r7 + 8029b66: 9318 str r3, [sp, #96] ; 0x60 + 8029b68: eb00 0041 add.w r0, r0, r1, lsl #1 + 8029b6c: f8bd 3024 ldrh.w r3, [sp, #36] ; 0x24 + 8029b70: f04f 0100 mov.w r1, #0 + 8029b74: eb00 0246 add.w r2, r0, r6, lsl #1 + 8029b78: 930f str r3, [sp, #60] ; 0x3c + 8029b7a: 4b88 ldr r3, [pc, #544] ; (8029d9c <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW914blitCopyRGB565EPKhS3_RKNS_4RectES6_h+0x300>) + 8029b7c: 920a str r2, [sp, #40] ; 0x28 + 8029b7e: 9a14 ldr r2, [sp, #80] ; 0x50 + 8029b80: eba3 0304 sub.w r3, r3, r4 + 8029b84: 910d str r1, [sp, #52] ; 0x34 + 8029b86: eb02 0888 add.w r8, r2, r8, lsl #2 + 8029b8a: 9319 str r3, [sp, #100] ; 0x64 + 8029b8c: f108 0204 add.w r2, r8, #4 + 8029b90: 9211 str r2, [sp, #68] ; 0x44 + 8029b92: 9a09 ldr r2, [sp, #36] ; 0x24 + 8029b94: f1c2 02ff rsb r2, r2, #255 ; 0xff + 8029b98: 9215 str r2, [sp, #84] ; 0x54 + 8029b9a: 9a04 ldr r2, [sp, #16] + 8029b9c: bf18 it ne + 8029b9e: 2200 movne r2, #0 + 8029ba0: b292 uxth r2, r2 + 8029ba2: 9910 ldr r1, [sp, #64] ; 0x40 + 8029ba4: 9b0d ldr r3, [sp, #52] ; 0x34 + 8029ba6: fa11 f383 uxtah r3, r1, r3 + 8029baa: 9914 ldr r1, [sp, #80] ; 0x50 + 8029bac: eb01 0383 add.w r3, r1, r3, lsl #2 + 8029bb0: 3304 adds r3, #4 + 8029bb2: 9306 str r3, [sp, #24] + 8029bb4: 9b0a ldr r3, [sp, #40] ; 0x28 + 8029bb6: 4283 cmp r3, r0 + 8029bb8: f240 8166 bls.w 8029e88 <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW914blitCopyRGB565EPKhS3_RKNS_4RectES6_h+0x3ec> + 8029bbc: f8bd 306c ldrh.w r3, [sp, #108] ; 0x6c + 8029bc0: f04f 0a01 mov.w sl, #1 + 8029bc4: 9902 ldr r1, [sp, #8] + 8029bc6: 9e06 ldr r6, [sp, #24] + 8029bc8: 46d3 mov fp, sl + 8029bca: 4657 mov r7, sl + 8029bcc: 7836 ldrb r6, [r6, #0] + 8029bce: fbb5 f3f3 udiv r3, r5, r3 + 8029bd2: 1acb subs r3, r1, r3 + 8029bd4: 9612 str r6, [sp, #72] ; 0x48 + 8029bd6: 3601 adds r6, #1 + 8029bd8: b29b uxth r3, r3 + 8029bda: 9605 str r6, [sp, #20] + 8029bdc: 9316 str r3, [sp, #88] ; 0x58 + 8029bde: 9b06 ldr r3, [sp, #24] + 8029be0: 7859 ldrb r1, [r3, #1] + 8029be2: 789b ldrb r3, [r3, #2] + 8029be4: 021b lsls r3, r3, #8 + 8029be6: ea43 4301 orr.w r3, r3, r1, lsl #16 + 8029bea: 9906 ldr r1, [sp, #24] + 8029bec: 78c9 ldrb r1, [r1, #3] + 8029bee: 430b orrs r3, r1 + 8029bf0: 9913 ldr r1, [sp, #76] ; 0x4c + 8029bf2: 4419 add r1, r3 + 8029bf4: 1c4e adds r6, r1, #1 + 8029bf6: 7849 ldrb r1, [r1, #1] + 8029bf8: 9603 str r6, [sp, #12] + 8029bfa: 0209 lsls r1, r1, #8 + 8029bfc: 9e13 ldr r6, [sp, #76] ; 0x4c + 8029bfe: f401 71ff and.w r1, r1, #510 ; 0x1fe + 8029c02: 5cf3 ldrb r3, [r6, r3] + 8029c04: 4319 orrs r1, r3 + 8029c06: b28b uxth r3, r1 + 8029c08: f884 1804 strb.w r1, [r4, #2052] ; 0x804 + 8029c0c: 930c str r3, [sp, #48] ; 0x30 + 8029c0e: 2300 movs r3, #0 + 8029c10: 9307 str r3, [sp, #28] + 8029c12: 469c mov ip, r3 + 8029c14: f8bd 3054 ldrh.w r3, [sp, #84] ; 0x54 + 8029c18: 930e str r3, [sp, #56] ; 0x38 + 8029c1a: 2d00 cmp r5, #0 + 8029c1c: d07e beq.n 8029d1c <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW914blitCopyRGB565EPKhS3_RKNS_4RectES6_h+0x280> + 8029c1e: 42af cmp r7, r5 + 8029c20: d26e bcs.n 8029d00 <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW914blitCopyRGB565EPKhS3_RKNS_4RectES6_h+0x264> + 8029c22: 9b0a ldr r3, [sp, #40] ; 0x28 + 8029c24: 1bed subs r5, r5, r7 + 8029c26: 9201 str r2, [sp, #4] + 8029c28: 4283 cmp r3, r0 + 8029c2a: b2ad uxth r5, r5 + 8029c2c: d802 bhi.n 8029c34 <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW914blitCopyRGB565EPKhS3_RKNS_4RectES6_h+0x198> + 8029c2e: e073 b.n 8029d18 <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW914blitCopyRGB565EPKhS3_RKNS_4RectES6_h+0x27c> + 8029c30: 2b00 cmp r3, #0 + 8029c32: d15f bne.n 8029cf4 <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW914blitCopyRGB565EPKhS3_RKNS_4RectES6_h+0x258> + 8029c34: 9b03 ldr r3, [sp, #12] + 8029c36: f1cb 0207 rsb r2, fp, #7 + 8029c3a: 785b ldrb r3, [r3, #1] + 8029c3c: 4093 lsls r3, r2 + 8029c3e: 005b lsls r3, r3, #1 + 8029c40: f403 72ff and.w r2, r3, #510 ; 0x1fe + 8029c44: 9b03 ldr r3, [sp, #12] + 8029c46: 781b ldrb r3, [r3, #0] + 8029c48: fa43 f30b asr.w r3, r3, fp + 8029c4c: b2db uxtb r3, r3 + 8029c4e: 4313 orrs r3, r2 + 8029c50: f10b 0201 add.w r2, fp, #1 + 8029c54: fa5f fb82 uxtb.w fp, r2 + 8029c58: 9a03 ldr r2, [sp, #12] + 8029c5a: b29f uxth r7, r3 + 8029c5c: f1bb 0f08 cmp.w fp, #8 + 8029c60: bf13 iteet ne + 8029c62: 3201 addne r2, #1 + 8029c64: 3202 addeq r2, #2 + 8029c66: f04f 0b00 moveq.w fp, #0 + 8029c6a: 9203 strne r2, [sp, #12] + 8029c6c: bf08 it eq + 8029c6e: 9203 streq r2, [sp, #12] + 8029c70: 9a12 ldr r2, [sp, #72] ; 0x48 + 8029c72: 42ba cmp r2, r7 + 8029c74: d309 bcc.n 8029c8a <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW914blitCopyRGB565EPKhS3_RKNS_4RectES6_h+0x1ee> + 8029c76: f884 3804 strb.w r3, [r4, #2052] ; 0x804 + 8029c7a: 2301 movs r3, #1 + 8029c7c: 9a05 ldr r2, [sp, #20] + 8029c7e: f5b2 7f00 cmp.w r2, #512 ; 0x200 + 8029c82: d30e bcc.n 8029ca2 <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW914blitCopyRGB565EPKhS3_RKNS_4RectES6_h+0x206> + 8029c84: 469a mov sl, r3 + 8029c86: 2600 movs r6, #0 + 8029c88: e035 b.n 8029cf6 <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW914blitCopyRGB565EPKhS3_RKNS_4RectES6_h+0x25a> + 8029c8a: 9b05 ldr r3, [sp, #20] + 8029c8c: 429f cmp r7, r3 + 8029c8e: d318 bcc.n 8029cc2 <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW914blitCopyRGB565EPKhS3_RKNS_4RectES6_h+0x226> + 8029c90: eb04 030a add.w r3, r4, sl + 8029c94: f894 2804 ldrb.w r2, [r4, #2052] ; 0x804 + 8029c98: f883 2804 strb.w r2, [r3, #2052] ; 0x804 + 8029c9c: f10a 0301 add.w r3, sl, #1 + 8029ca0: b29b uxth r3, r3 + 8029ca2: 9a05 ldr r2, [sp, #20] + 8029ca4: f894 6804 ldrb.w r6, [r4, #2052] ; 0x804 + 8029ca8: eb04 0282 add.w r2, r4, r2, lsl #2 + 8029cac: 990c ldr r1, [sp, #48] ; 0x30 + 8029cae: 7116 strb r6, [r2, #4] + 8029cb0: f10a 0601 add.w r6, sl, #1 + 8029cb4: 80d1 strh r1, [r2, #6] + 8029cb6: 7156 strb r6, [r2, #5] + 8029cb8: 9a05 ldr r2, [sp, #20] + 8029cba: 3201 adds r2, #1 + 8029cbc: b292 uxth r2, r2 + 8029cbe: 9205 str r2, [sp, #20] + 8029cc0: e7e0 b.n 8029c84 <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW914blitCopyRGB565EPKhS3_RKNS_4RectES6_h+0x1e8> + 8029cc2: eb04 0387 add.w r3, r4, r7, lsl #2 + 8029cc6: 463a mov r2, r7 + 8029cc8: 795b ldrb r3, [r3, #5] + 8029cca: f603 0604 addw r6, r3, #2052 ; 0x804 + 8029cce: 4426 add r6, r4 + 8029cd0: 9919 ldr r1, [sp, #100] ; 0x64 + 8029cd2: eb01 0c06 add.w ip, r1, r6 + 8029cd6: f1bc 0f00 cmp.w ip, #0 + 8029cda: dd07 ble.n 8029cec <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW914blitCopyRGB565EPKhS3_RKNS_4RectES6_h+0x250> + 8029cdc: eb04 0282 add.w r2, r4, r2, lsl #2 + 8029ce0: f892 c004 ldrb.w ip, [r2, #4] + 8029ce4: f806 cd01 strb.w ip, [r6, #-1]! + 8029ce8: 88d2 ldrh r2, [r2, #6] + 8029cea: e7f1 b.n 8029cd0 <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW914blitCopyRGB565EPKhS3_RKNS_4RectES6_h+0x234> + 8029cec: f884 2804 strb.w r2, [r4, #2052] ; 0x804 + 8029cf0: b29b uxth r3, r3 + 8029cf2: e7c3 b.n 8029c7c <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW914blitCopyRGB565EPKhS3_RKNS_4RectES6_h+0x1e0> + 8029cf4: 9f0c ldr r7, [sp, #48] ; 0x30 + 8029cf6: 970c str r7, [sp, #48] ; 0x30 + 8029cf8: 46b4 mov ip, r6 + 8029cfa: 9a01 ldr r2, [sp, #4] + 8029cfc: 461f mov r7, r3 + 8029cfe: e78c b.n 8029c1a <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW914blitCopyRGB565EPKhS3_RKNS_4RectES6_h+0x17e> + 8029d00: 1b7b subs r3, r7, r5 + 8029d02: eb0c 0605 add.w r6, ip, r5 + 8029d06: f8bd 2010 ldrh.w r2, [sp, #16] + 8029d0a: b29b uxth r3, r3 + 8029d0c: b2b6 uxth r6, r6 + 8029d0e: 9201 str r2, [sp, #4] + 8029d10: 2500 movs r5, #0 + 8029d12: 9a0a ldr r2, [sp, #40] ; 0x28 + 8029d14: 4282 cmp r2, r0 + 8029d16: d88b bhi.n 8029c30 <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW914blitCopyRGB565EPKhS3_RKNS_4RectES6_h+0x194> + 8029d18: 9a01 ldr r2, [sp, #4] + 8029d1a: e74b b.n 8029bb4 <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW914blitCopyRGB565EPKhS3_RKNS_4RectES6_h+0x118> + 8029d1c: 4297 cmp r7, r2 + 8029d1e: d332 bcc.n 8029d86 <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW914blitCopyRGB565EPKhS3_RKNS_4RectES6_h+0x2ea> + 8029d20: 1abb subs r3, r7, r2 + 8029d22: 9208 str r2, [sp, #32] + 8029d24: 9501 str r5, [sp, #4] + 8029d26: b29b uxth r3, r3 + 8029d28: 9909 ldr r1, [sp, #36] ; 0x24 + 8029d2a: 29ff cmp r1, #255 ; 0xff + 8029d2c: 9908 ldr r1, [sp, #32] + 8029d2e: eb0c 0601 add.w r6, ip, r1 + 8029d32: d135 bne.n 8029da0 <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW914blitCopyRGB565EPKhS3_RKNS_4RectES6_h+0x304> + 8029d34: f1a0 0e02 sub.w lr, r0, #2 + 8029d38: b2b6 uxth r6, r6 + 8029d3a: 45b4 cmp ip, r6 + 8029d3c: f040 808c bne.w 8029e58 <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW914blitCopyRGB565EPKhS3_RKNS_4RectES6_h+0x3bc> + 8029d40: 9908 ldr r1, [sp, #32] + 8029d42: 4297 cmp r7, r2 + 8029d44: eb00 0041 add.w r0, r0, r1, lsl #1 + 8029d48: d3e2 bcc.n 8029d10 <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW914blitCopyRGB565EPKhS3_RKNS_4RectES6_h+0x274> + 8029d4a: 9a18 ldr r2, [sp, #96] ; 0x60 + 8029d4c: 9904 ldr r1, [sp, #16] + 8029d4e: 8812 ldrh r2, [r2, #0] + 8029d50: 1a52 subs r2, r2, r1 + 8029d52: 9916 ldr r1, [sp, #88] ; 0x58 + 8029d54: eb00 0042 add.w r0, r0, r2, lsl #1 + 8029d58: 9a07 ldr r2, [sp, #28] + 8029d5a: 3201 adds r2, #1 + 8029d5c: 428a cmp r2, r1 + 8029d5e: 9207 str r2, [sp, #28] + 8029d60: f040 8087 bne.w 8029e72 <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW914blitCopyRGB565EPKhS3_RKNS_4RectES6_h+0x3d6> + 8029d64: f8bd 5070 ldrh.w r5, [sp, #112] ; 0x70 + 8029d68: f8bd 7068 ldrh.w r7, [sp, #104] ; 0x68 + 8029d6c: 9b04 ldr r3, [sp, #16] + 8029d6e: 1bed subs r5, r5, r7 + 8029d70: b2ad uxth r5, r5 + 8029d72: 2d00 cmp r5, #0 + 8029d74: bf08 it eq + 8029d76: 461a moveq r2, r3 + 8029d78: 9b0d ldr r3, [sp, #52] ; 0x34 + 8029d7a: bf18 it ne + 8029d7c: 2200 movne r2, #0 + 8029d7e: 3301 adds r3, #1 + 8029d80: b292 uxth r2, r2 + 8029d82: 930d str r3, [sp, #52] ; 0x34 + 8029d84: e70d b.n 8029ba2 <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW914blitCopyRGB565EPKhS3_RKNS_4RectES6_h+0x106> + 8029d86: 1bd1 subs r1, r2, r7 + 8029d88: 9708 str r7, [sp, #32] + 8029d8a: b28b uxth r3, r1 + 8029d8c: 9301 str r3, [sp, #4] + 8029d8e: 462b mov r3, r5 + 8029d90: e7ca b.n 8029d28 <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW914blitCopyRGB565EPKhS3_RKNS_4RectES6_h+0x28c> + 8029d92: bf00 nop + 8029d94: 2001e734 .word 0x2001e734 + 8029d98: 2001e72e .word 0x2001e72e + 8029d9c: fffff7fb .word 0xfffff7fb + 8029da0: b2b6 uxth r6, r6 + 8029da2: 900b str r0, [sp, #44] ; 0x2c + 8029da4: 45b4 cmp ip, r6 + 8029da6: d0cb beq.n 8029d40 <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW914blitCopyRGB565EPKhS3_RKNS_4RectES6_h+0x2a4> + 8029da8: f10c 0101 add.w r1, ip, #1 + 8029dac: 44a4 add ip, r4 + 8029dae: 9117 str r1, [sp, #92] ; 0x5c + 8029db0: f89c 5804 ldrb.w r5, [ip, #2052] ; 0x804 + 8029db4: 9911 ldr r1, [sp, #68] ; 0x44 + 8029db6: f831 5015 ldrh.w r5, [r1, r5, lsl #1] + 8029dba: 990b ldr r1, [sp, #44] ; 0x2c + 8029dbc: ea4f 2825 mov.w r8, r5, asr #8 + 8029dc0: f8b1 c000 ldrh.w ip, [r1] + 8029dc4: 990e ldr r1, [sp, #56] ; 0x38 + 8029dc6: f008 08f8 and.w r8, r8, #248 ; 0xf8 + 8029dca: ea4f 2e2c mov.w lr, ip, asr #8 + 8029dce: ea4f 09ec mov.w r9, ip, asr #3 + 8029dd2: f00e 0ef8 and.w lr, lr, #248 ; 0xf8 + 8029dd6: ea4f 0ccc mov.w ip, ip, lsl #3 + 8029dda: f009 09fc and.w r9, r9, #252 ; 0xfc + 8029dde: fb1e fe01 smulbb lr, lr, r1 + 8029de2: 990f ldr r1, [sp, #60] ; 0x3c + 8029de4: fa5f fc8c uxtb.w ip, ip + 8029de8: fb08 e801 mla r8, r8, r1, lr + 8029dec: ea4f 0ee5 mov.w lr, r5, asr #3 + 8029df0: 990e ldr r1, [sp, #56] ; 0x38 + 8029df2: 00ed lsls r5, r5, #3 + 8029df4: f00e 0efc and.w lr, lr, #252 ; 0xfc + 8029df8: fa1f f888 uxth.w r8, r8 + 8029dfc: fb19 f901 smulbb r9, r9, r1 + 8029e00: 990f ldr r1, [sp, #60] ; 0x3c + 8029e02: b2ed uxtb r5, r5 + 8029e04: fb0e 9e01 mla lr, lr, r1, r9 + 8029e08: 990e ldr r1, [sp, #56] ; 0x38 + 8029e0a: fb1c fc01 smulbb ip, ip, r1 + 8029e0e: 990f ldr r1, [sp, #60] ; 0x3c + 8029e10: fa1f fe8e uxth.w lr, lr + 8029e14: fb05 c501 mla r5, r5, r1, ip + 8029e18: f108 0c01 add.w ip, r8, #1 + 8029e1c: f10e 0901 add.w r9, lr, #1 + 8029e20: 990b ldr r1, [sp, #44] ; 0x2c + 8029e22: b2ad uxth r5, r5 + 8029e24: eb0c 2818 add.w r8, ip, r8, lsr #8 + 8029e28: f105 0c01 add.w ip, r5, #1 + 8029e2c: eb09 291e add.w r9, r9, lr, lsr #8 + 8029e30: f408 4878 and.w r8, r8, #63488 ; 0xf800 + 8029e34: eb0c 2c15 add.w ip, ip, r5, lsr #8 + 8029e38: ea4f 1959 mov.w r9, r9, lsr #5 + 8029e3c: f3cc 2cc4 ubfx ip, ip, #11, #5 + 8029e40: f409 69fc and.w r9, r9, #2016 ; 0x7e0 + 8029e44: ea4c 0808 orr.w r8, ip, r8 + 8029e48: f8bd c05c ldrh.w ip, [sp, #92] ; 0x5c + 8029e4c: ea48 0809 orr.w r8, r8, r9 + 8029e50: f821 8b02 strh.w r8, [r1], #2 + 8029e54: 910b str r1, [sp, #44] ; 0x2c + 8029e56: e7a5 b.n 8029da4 <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW914blitCopyRGB565EPKhS3_RKNS_4RectES6_h+0x308> + 8029e58: f10c 0801 add.w r8, ip, #1 + 8029e5c: 44a4 add ip, r4 + 8029e5e: 9911 ldr r1, [sp, #68] ; 0x44 + 8029e60: f89c 5804 ldrb.w r5, [ip, #2052] ; 0x804 + 8029e64: fa1f fc88 uxth.w ip, r8 + 8029e68: f831 5015 ldrh.w r5, [r1, r5, lsl #1] + 8029e6c: f82e 5f02 strh.w r5, [lr, #2]! + 8029e70: e763 b.n 8029d3a <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW914blitCopyRGB565EPKhS3_RKNS_4RectES6_h+0x29e> + 8029e72: f8bd 2010 ldrh.w r2, [sp, #16] + 8029e76: f8bd 506c ldrh.w r5, [sp, #108] ; 0x6c + 8029e7a: 1aad subs r5, r5, r2 + 8029e7c: b2ad uxth r5, r5 + 8029e7e: 2d00 cmp r5, #0 + 8029e80: bf18 it ne + 8029e82: 2200 movne r2, #0 + 8029e84: 9201 str r2, [sp, #4] + 8029e86: e744 b.n 8029d12 <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW914blitCopyRGB565EPKhS3_RKNS_4RectES6_h+0x276> + 8029e88: 4b03 ldr r3, [pc, #12] ; (8029e98 <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW914blitCopyRGB565EPKhS3_RKNS_4RectES6_h+0x3fc>) + 8029e8a: 6818 ldr r0, [r3, #0] + 8029e8c: 6803 ldr r3, [r0, #0] + 8029e8e: 6adb ldr r3, [r3, #44] ; 0x2c + 8029e90: 4798 blx r3 + 8029e92: b01f add sp, #124 ; 0x7c + 8029e94: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 8029e98: 2001e734 .word 0x2001e734 + +08029e9c <_ZN8touchgfx8LCD16bpp18DecompressorL8_RLE16blitCopyARGB8888EPKhS3_RKNS_4RectES6_h>: + 8029e9c: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8029ea0: b08f sub sp, #60 ; 0x3c + 8029ea2: 461c mov r4, r3 + 8029ea4: 460f mov r7, r1 + 8029ea6: 9203 str r2, [sp, #12] + 8029ea8: f89d 2064 ldrb.w r2, [sp, #100] ; 0x64 + 8029eac: 9b18 ldr r3, [sp, #96] ; 0x60 + 8029eae: 9202 str r2, [sp, #8] + 8029eb0: 2a00 cmp r2, #0 + 8029eb2: f000 8128 beq.w 802a106 <_ZN8touchgfx8LCD16bpp18DecompressorL8_RLE16blitCopyARGB8888EPKhS3_RKNS_4RectES6_h+0x26a> + 8029eb6: 6820 ldr r0, [r4, #0] + 8029eb8: aa0a add r2, sp, #40 ; 0x28 + 8029eba: 6861 ldr r1, [r4, #4] + 8029ebc: c203 stmia r2!, {r0, r1} + 8029ebe: 6818 ldr r0, [r3, #0] + 8029ec0: aa0c add r2, sp, #48 ; 0x30 + 8029ec2: 6859 ldr r1, [r3, #4] + 8029ec4: c203 stmia r2!, {r0, r1} + 8029ec6: a80a add r0, sp, #40 ; 0x28 + 8029ec8: f7f9 faf6 bl 80234b8 <_ZN8touchgfx21DisplayTransformation29transformDisplayToFrameBufferERNS_4RectE> + 8029ecc: 4621 mov r1, r4 + 8029ece: a80c add r0, sp, #48 ; 0x30 + 8029ed0: f7f9 fb1a bl 8023508 <_ZN8touchgfx21DisplayTransformation29transformDisplayToFrameBufferERNS_4RectERKS1_> + 8029ed4: f9bd 602c ldrsh.w r6, [sp, #44] ; 0x2c + 8029ed8: f9bd 502e ldrsh.w r5, [sp, #46] ; 0x2e + 8029edc: f5b6 6f80 cmp.w r6, #1024 ; 0x400 + 8029ee0: f8bd 0030 ldrh.w r0, [sp, #48] ; 0x30 + 8029ee4: bfdb ittet le + 8029ee6: b2b3 uxthle r3, r6 + 8029ee8: f44f 6280 movle.w r2, #1024 ; 0x400 + 8029eec: 2301 movgt r3, #1 + 8029eee: fb92 f3f3 sdivle r3, r2, r3 + 8029ef2: f9bd 2032 ldrsh.w r2, [sp, #50] ; 0x32 + 8029ef6: 441d add r5, r3 + 8029ef8: fb92 f1f3 sdiv r1, r2, r3 + 8029efc: fa1f fc81 uxth.w ip, r1 + 8029f00: 3d01 subs r5, #1 + 8029f02: fb0c 2413 mls r4, ip, r3, r2 + 8029f06: 4661 mov r1, ip + 8029f08: fb14 f406 smulbb r4, r4, r6 + 8029f0c: 4404 add r4, r0 + 8029f0e: fb95 f5f3 sdiv r5, r5, r3 + 8029f12: b2a4 uxth r4, r4 + 8029f14: b121 cbz r1, 8029f20 <_ZN8touchgfx8LCD16bpp18DecompressorL8_RLE16blitCopyARGB8888EPKhS3_RKNS_4RectES6_h+0x84> + 8029f16: 9b03 ldr r3, [sp, #12] + 8029f18: f853 302c ldr.w r3, [r3, ip, lsl #2] + 8029f1c: ba1b rev r3, r3 + 8029f1e: 441f add r7, r3 + 8029f20: f8bd 3028 ldrh.w r3, [sp, #40] ; 0x28 + 8029f24: b2ad uxth r5, r5 + 8029f26: f9bd 9034 ldrsh.w r9, [sp, #52] ; 0x34 + 8029f2a: 4418 add r0, r3 + 8029f2c: f8bd 302a ldrh.w r3, [sp, #42] ; 0x2a + 8029f30: f9bd 6036 ldrsh.w r6, [sp, #54] ; 0x36 + 8029f34: 00ad lsls r5, r5, #2 + 8029f36: 441a add r2, r3 + 8029f38: 4b74 ldr r3, [pc, #464] ; (802a10c <_ZN8touchgfx8LCD16bpp18DecompressorL8_RLE16blitCopyARGB8888EPKhS3_RKNS_4RectES6_h+0x270>) + 8029f3a: f8ad 0030 strh.w r0, [sp, #48] ; 0x30 + 8029f3e: 6818 ldr r0, [r3, #0] + 8029f40: f8ad 2032 strh.w r2, [sp, #50] ; 0x32 + 8029f44: 6803 ldr r3, [r0, #0] + 8029f46: 6a9b ldr r3, [r3, #40] ; 0x28 + 8029f48: 4798 blx r3 + 8029f4a: 4a71 ldr r2, [pc, #452] ; (802a110 <_ZN8touchgfx8LCD16bpp18DecompressorL8_RLE16blitCopyARGB8888EPKhS3_RKNS_4RectES6_h+0x274>) + 8029f4c: f9bd 1032 ldrsh.w r1, [sp, #50] ; 0x32 + 8029f50: 2c00 cmp r4, #0 + 8029f52: 8813 ldrh r3, [r2, #0] + 8029f54: f9bd c030 ldrsh.w ip, [sp, #48] ; 0x30 + 8029f58: bf0c ite eq + 8029f5a: 46c8 moveq r8, r9 + 8029f5c: f04f 0800 movne.w r8, #0 + 8029f60: 9209 str r2, [sp, #36] ; 0x24 + 8029f62: fb03 c101 mla r1, r3, r1, ip + 8029f66: 4373 muls r3, r6 + 8029f68: fa1f f888 uxth.w r8, r8 + 8029f6c: eb00 0041 add.w r0, r0, r1, lsl #1 + 8029f70: eb00 0343 add.w r3, r0, r3, lsl #1 + 8029f74: 9304 str r3, [sp, #16] + 8029f76: 1d2b adds r3, r5, #4 + 8029f78: 9305 str r3, [sp, #20] + 8029f7a: 2300 movs r3, #0 + 8029f7c: 9301 str r3, [sp, #4] + 8029f7e: 9a04 ldr r2, [sp, #16] + 8029f80: 4282 cmp r2, r0 + 8029f82: f240 80bb bls.w 802a0fc <_ZN8touchgfx8LCD16bpp18DecompressorL8_RLE16blitCopyARGB8888EPKhS3_RKNS_4RectES6_h+0x260> + 8029f86: b95b cbnz r3, 8029fa0 <_ZN8touchgfx8LCD16bpp18DecompressorL8_RLE16blitCopyARGB8888EPKhS3_RKNS_4RectES6_h+0x104> + 8029f88: 783a ldrb r2, [r7, #0] + 8029f8a: 0993 lsrs r3, r2, #6 + 8029f8c: f002 023f and.w r2, r2, #63 ; 0x3f + 8029f90: 9201 str r2, [sp, #4] + 8029f92: 1e5a subs r2, r3, #1 + 8029f94: 2a02 cmp r2, #2 + 8029f96: bf8d iteet hi + 8029f98: 787b ldrbhi r3, [r7, #1] + 8029f9a: 3701 addls r7, #1 + 8029f9c: b29b uxthls r3, r3 + 8029f9e: 3702 addhi r7, #2 + 8029fa0: b184 cbz r4, 8029fc4 <_ZN8touchgfx8LCD16bpp18DecompressorL8_RLE16blitCopyARGB8888EPKhS3_RKNS_4RectES6_h+0x128> + 8029fa2: 429c cmp r4, r3 + 8029fa4: bf91 iteee ls + 8029fa6: 1b1c subls r4, r3, r4 + 8029fa8: 1ae4 subhi r4, r4, r3 + 8029faa: 46c4 movhi ip, r8 + 8029fac: f04f 0a00 movhi.w sl, #0 + 8029fb0: bf9b ittet ls + 8029fb2: fa1f fa84 uxthls.w sl, r4 + 8029fb6: 2400 movls r4, #0 + 8029fb8: b2a4 uxthhi r4, r4 + 8029fba: fa1f fc89 uxthls.w ip, r9 + 8029fbe: 4653 mov r3, sl + 8029fc0: 46e0 mov r8, ip + 8029fc2: e7dc b.n 8029f7e <_ZN8touchgfx8LCD16bpp18DecompressorL8_RLE16blitCopyARGB8888EPKhS3_RKNS_4RectES6_h+0xe2> + 8029fc4: 2204 movs r2, #4 + 8029fc6: 9905 ldr r1, [sp, #20] + 8029fc8: 4543 cmp r3, r8 + 8029fca: 4615 mov r5, r2 + 8029fcc: 9a01 ldr r2, [sp, #4] + 8029fce: bf24 itt cs + 8029fd0: eba3 0a08 subcs.w sl, r3, r8 + 8029fd4: 46c6 movcs lr, r8 + 8029fd6: fb15 1202 smlabb r2, r5, r2, r1 + 8029fda: 9903 ldr r1, [sp, #12] + 8029fdc: bf3c itt cc + 8029fde: eba8 0c03 subcc.w ip, r8, r3 + 8029fe2: 469e movcc lr, r3 + 8029fe4: 588a ldr r2, [r1, r2] + 8029fe6: bf26 itte cs + 8029fe8: fa1f fa8a uxthcs.w sl, sl + 8029fec: 46a4 movcs ip, r4 + 8029fee: fa1f fc8c uxthcc.w ip, ip + 8029ff2: ea4f 6112 mov.w r1, r2, lsr #24 + 8029ff6: bf38 it cc + 8029ff8: 46a2 movcc sl, r4 + 8029ffa: ea4f 0e4e mov.w lr, lr, lsl #1 + 8029ffe: 2900 cmp r1, #0 + 802a000: d066 beq.n 802a0d0 <_ZN8touchgfx8LCD16bpp18DecompressorL8_RLE16blitCopyARGB8888EPKhS3_RKNS_4RectES6_h+0x234> + 802a002: 29ff cmp r1, #255 ; 0xff + 802a004: ea4f 2612 mov.w r6, r2, lsr #8 + 802a008: d114 bne.n 802a034 <_ZN8touchgfx8LCD16bpp18DecompressorL8_RLE16blitCopyARGB8888EPKhS3_RKNS_4RectES6_h+0x198> + 802a00a: 9d02 ldr r5, [sp, #8] + 802a00c: 2dff cmp r5, #255 ; 0xff + 802a00e: d111 bne.n 802a034 <_ZN8touchgfx8LCD16bpp18DecompressorL8_RLE16blitCopyARGB8888EPKhS3_RKNS_4RectES6_h+0x198> + 802a010: 0951 lsrs r1, r2, #5 + 802a012: f426 66ff bic.w r6, r6, #2040 ; 0x7f8 + 802a016: f3c2 02c4 ubfx r2, r2, #3, #5 + 802a01a: 4486 add lr, r0 + 802a01c: f401 61fc and.w r1, r1, #2016 ; 0x7e0 + 802a020: f026 0607 bic.w r6, r6, #7 + 802a024: 430e orrs r6, r1 + 802a026: 4316 orrs r6, r2 + 802a028: b2b6 uxth r6, r6 + 802a02a: 4586 cmp lr, r0 + 802a02c: d051 beq.n 802a0d2 <_ZN8touchgfx8LCD16bpp18DecompressorL8_RLE16blitCopyARGB8888EPKhS3_RKNS_4RectES6_h+0x236> + 802a02e: f820 6b02 strh.w r6, [r0], #2 + 802a032: e7fa b.n 802a02a <_ZN8touchgfx8LCD16bpp18DecompressorL8_RLE16blitCopyARGB8888EPKhS3_RKNS_4RectES6_h+0x18e> + 802a034: 9d02 ldr r5, [sp, #8] + 802a036: b2f6 uxtb r6, r6 + 802a038: 4486 add lr, r0 + 802a03a: 4369 muls r1, r5 + 802a03c: 1c4d adds r5, r1, #1 + 802a03e: eb05 2521 add.w r5, r5, r1, asr #8 + 802a042: f3c2 4107 ubfx r1, r2, #16, #8 + 802a046: b2d2 uxtb r2, r2 + 802a048: 122d asrs r5, r5, #8 + 802a04a: ea6f 0b05 mvn.w fp, r5 + 802a04e: b2ad uxth r5, r5 + 802a050: fb11 f105 smulbb r1, r1, r5 + 802a054: fa5f fb8b uxtb.w fp, fp + 802a058: fb16 f605 smulbb r6, r6, r5 + 802a05c: fb12 f205 smulbb r2, r2, r5 + 802a060: b289 uxth r1, r1 + 802a062: b2b6 uxth r6, r6 + 802a064: b292 uxth r2, r2 + 802a066: 9106 str r1, [sp, #24] + 802a068: 9607 str r6, [sp, #28] + 802a06a: 9208 str r2, [sp, #32] + 802a06c: 4586 cmp lr, r0 + 802a06e: d030 beq.n 802a0d2 <_ZN8touchgfx8LCD16bpp18DecompressorL8_RLE16blitCopyARGB8888EPKhS3_RKNS_4RectES6_h+0x236> + 802a070: 8802 ldrh r2, [r0, #0] + 802a072: 9906 ldr r1, [sp, #24] + 802a074: 1216 asrs r6, r2, #8 + 802a076: 10d5 asrs r5, r2, #3 + 802a078: f006 06f8 and.w r6, r6, #248 ; 0xf8 + 802a07c: 00d2 lsls r2, r2, #3 + 802a07e: f005 05fc and.w r5, r5, #252 ; 0xfc + 802a082: ea46 1656 orr.w r6, r6, r6, lsr #5 + 802a086: b2d2 uxtb r2, r2 + 802a088: fb06 160b mla r6, r6, fp, r1 + 802a08c: ea45 1595 orr.w r5, r5, r5, lsr #6 + 802a090: 9907 ldr r1, [sp, #28] + 802a092: ea42 1252 orr.w r2, r2, r2, lsr #5 + 802a096: b2b6 uxth r6, r6 + 802a098: fb05 150b mla r5, r5, fp, r1 + 802a09c: 9908 ldr r1, [sp, #32] + 802a09e: fb02 120b mla r2, r2, fp, r1 + 802a0a2: 1c71 adds r1, r6, #1 + 802a0a4: b2ad uxth r5, r5 + 802a0a6: b292 uxth r2, r2 + 802a0a8: eb01 2616 add.w r6, r1, r6, lsr #8 + 802a0ac: 1c51 adds r1, r2, #1 + 802a0ae: f406 4678 and.w r6, r6, #63488 ; 0xf800 + 802a0b2: eb01 2212 add.w r2, r1, r2, lsr #8 + 802a0b6: f3c2 22c4 ubfx r2, r2, #11, #5 + 802a0ba: 4316 orrs r6, r2 + 802a0bc: 1c6a adds r2, r5, #1 + 802a0be: eb02 2515 add.w r5, r2, r5, lsr #8 + 802a0c2: 096d lsrs r5, r5, #5 + 802a0c4: f405 65fc and.w r5, r5, #2016 ; 0x7e0 + 802a0c8: 432e orrs r6, r5 + 802a0ca: f820 6b02 strh.w r6, [r0], #2 + 802a0ce: e7cd b.n 802a06c <_ZN8touchgfx8LCD16bpp18DecompressorL8_RLE16blitCopyARGB8888EPKhS3_RKNS_4RectES6_h+0x1d0> + 802a0d0: 4470 add r0, lr + 802a0d2: 4543 cmp r3, r8 + 802a0d4: f4ff af73 bcc.w 8029fbe <_ZN8touchgfx8LCD16bpp18DecompressorL8_RLE16blitCopyARGB8888EPKhS3_RKNS_4RectES6_h+0x122> + 802a0d8: fa1f fc89 uxth.w ip, r9 + 802a0dc: f8bd 402c ldrh.w r4, [sp, #44] ; 0x2c + 802a0e0: 9b09 ldr r3, [sp, #36] ; 0x24 + 802a0e2: eba4 040c sub.w r4, r4, ip + 802a0e6: 881b ldrh r3, [r3, #0] + 802a0e8: b2a4 uxth r4, r4 + 802a0ea: eba3 0309 sub.w r3, r3, r9 + 802a0ee: 2c00 cmp r4, #0 + 802a0f0: eb00 0043 add.w r0, r0, r3, lsl #1 + 802a0f4: bf18 it ne + 802a0f6: f04f 0c00 movne.w ip, #0 + 802a0fa: e760 b.n 8029fbe <_ZN8touchgfx8LCD16bpp18DecompressorL8_RLE16blitCopyARGB8888EPKhS3_RKNS_4RectES6_h+0x122> + 802a0fc: 4b03 ldr r3, [pc, #12] ; (802a10c <_ZN8touchgfx8LCD16bpp18DecompressorL8_RLE16blitCopyARGB8888EPKhS3_RKNS_4RectES6_h+0x270>) + 802a0fe: 6818 ldr r0, [r3, #0] + 802a100: 6803 ldr r3, [r0, #0] + 802a102: 6adb ldr r3, [r3, #44] ; 0x2c + 802a104: 4798 blx r3 + 802a106: b00f add sp, #60 ; 0x3c + 802a108: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 802a10c: 2001e734 .word 0x2001e734 + 802a110: 2001e72e .word 0x2001e72e + +0802a114 <_ZN8touchgfx8LCD16bpp18DecompressorL8_RLE14blitCopyRGB888EPKhS3_RKNS_4RectES6_h>: + 802a114: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 802a118: b093 sub sp, #76 ; 0x4c + 802a11a: 461c mov r4, r3 + 802a11c: 9205 str r2, [sp, #20] + 802a11e: f89d 2074 ldrb.w r2, [sp, #116] ; 0x74 + 802a122: 9101 str r1, [sp, #4] + 802a124: 9b1c ldr r3, [sp, #112] ; 0x70 + 802a126: 9202 str r2, [sp, #8] + 802a128: 2a00 cmp r2, #0 + 802a12a: f000 812e beq.w 802a38a <_ZN8touchgfx8LCD16bpp18DecompressorL8_RLE14blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0x276> + 802a12e: 6820 ldr r0, [r4, #0] + 802a130: aa0e add r2, sp, #56 ; 0x38 + 802a132: 6861 ldr r1, [r4, #4] + 802a134: c203 stmia r2!, {r0, r1} + 802a136: 6818 ldr r0, [r3, #0] + 802a138: aa10 add r2, sp, #64 ; 0x40 + 802a13a: 6859 ldr r1, [r3, #4] + 802a13c: c203 stmia r2!, {r0, r1} + 802a13e: a80e add r0, sp, #56 ; 0x38 + 802a140: f7f9 f9ba bl 80234b8 <_ZN8touchgfx21DisplayTransformation29transformDisplayToFrameBufferERNS_4RectE> + 802a144: 4621 mov r1, r4 + 802a146: a810 add r0, sp, #64 ; 0x40 + 802a148: f7f9 f9de bl 8023508 <_ZN8touchgfx21DisplayTransformation29transformDisplayToFrameBufferERNS_4RectERKS1_> + 802a14c: f9bd 603c ldrsh.w r6, [sp, #60] ; 0x3c + 802a150: f9bd 503e ldrsh.w r5, [sp, #62] ; 0x3e + 802a154: f5b6 6f80 cmp.w r6, #1024 ; 0x400 + 802a158: f8bd 0040 ldrh.w r0, [sp, #64] ; 0x40 + 802a15c: bfdb ittet le + 802a15e: b2b3 uxthle r3, r6 + 802a160: f44f 6280 movle.w r2, #1024 ; 0x400 + 802a164: 2301 movgt r3, #1 + 802a166: fb92 f3f3 sdivle r3, r2, r3 + 802a16a: f9bd 2042 ldrsh.w r2, [sp, #66] ; 0x42 + 802a16e: 441d add r5, r3 + 802a170: fb92 f1f3 sdiv r1, r2, r3 + 802a174: fa1f fc81 uxth.w ip, r1 + 802a178: 3d01 subs r5, #1 + 802a17a: fb0c 2413 mls r4, ip, r3, r2 + 802a17e: 4661 mov r1, ip + 802a180: fb14 f406 smulbb r4, r4, r6 + 802a184: 4404 add r4, r0 + 802a186: fb95 f5f3 sdiv r5, r5, r3 + 802a18a: b2a4 uxth r4, r4 + 802a18c: b131 cbz r1, 802a19c <_ZN8touchgfx8LCD16bpp18DecompressorL8_RLE14blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0x88> + 802a18e: 9b05 ldr r3, [sp, #20] + 802a190: 9901 ldr r1, [sp, #4] + 802a192: f853 302c ldr.w r3, [r3, ip, lsl #2] + 802a196: ba1b rev r3, r3 + 802a198: 4419 add r1, r3 + 802a19a: 9101 str r1, [sp, #4] + 802a19c: f8bd 3038 ldrh.w r3, [sp, #56] ; 0x38 + 802a1a0: b2ad uxth r5, r5 + 802a1a2: f9bd b044 ldrsh.w fp, [sp, #68] ; 0x44 + 802a1a6: 4418 add r0, r3 + 802a1a8: f8bd 303a ldrh.w r3, [sp, #58] ; 0x3a + 802a1ac: f9bd 6046 ldrsh.w r6, [sp, #70] ; 0x46 + 802a1b0: 00ad lsls r5, r5, #2 + 802a1b2: 441a add r2, r3 + 802a1b4: 4b76 ldr r3, [pc, #472] ; (802a390 <_ZN8touchgfx8LCD16bpp18DecompressorL8_RLE14blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0x27c>) + 802a1b6: f8ad 0040 strh.w r0, [sp, #64] ; 0x40 + 802a1ba: 6818 ldr r0, [r3, #0] + 802a1bc: f8ad 2042 strh.w r2, [sp, #66] ; 0x42 + 802a1c0: 6803 ldr r3, [r0, #0] + 802a1c2: 6a9b ldr r3, [r3, #40] ; 0x28 + 802a1c4: 4798 blx r3 + 802a1c6: 4973 ldr r1, [pc, #460] ; (802a394 <_ZN8touchgfx8LCD16bpp18DecompressorL8_RLE14blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0x280>) + 802a1c8: f9bd c040 ldrsh.w ip, [sp, #64] ; 0x40 + 802a1cc: 2c00 cmp r4, #0 + 802a1ce: 880b ldrh r3, [r1, #0] + 802a1d0: f9bd 2042 ldrsh.w r2, [sp, #66] ; 0x42 + 802a1d4: 910d str r1, [sp, #52] ; 0x34 + 802a1d6: fb03 c202 mla r2, r3, r2, ip + 802a1da: bf08 it eq + 802a1dc: 46dc moveq ip, fp + 802a1de: fb03 f306 mul.w r3, r3, r6 + 802a1e2: bf18 it ne + 802a1e4: f04f 0c00 movne.w ip, #0 + 802a1e8: eb00 0042 add.w r0, r0, r2, lsl #1 + 802a1ec: f8bd 1008 ldrh.w r1, [sp, #8] + 802a1f0: fa1f fc8c uxth.w ip, ip + 802a1f4: eb00 0343 add.w r3, r0, r3, lsl #1 + 802a1f8: 9106 str r1, [sp, #24] + 802a1fa: 9308 str r3, [sp, #32] + 802a1fc: 1d2b adds r3, r5, #4 + 802a1fe: 9309 str r3, [sp, #36] ; 0x24 + 802a200: 9b02 ldr r3, [sp, #8] + 802a202: 43da mvns r2, r3 + 802a204: 2300 movs r3, #0 + 802a206: b2d2 uxtb r2, r2 + 802a208: 9303 str r3, [sp, #12] + 802a20a: 9207 str r2, [sp, #28] + 802a20c: 9a08 ldr r2, [sp, #32] + 802a20e: 4282 cmp r2, r0 + 802a210: f240 80b6 bls.w 802a380 <_ZN8touchgfx8LCD16bpp18DecompressorL8_RLE14blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0x26c> + 802a214: b963 cbnz r3, 802a230 <_ZN8touchgfx8LCD16bpp18DecompressorL8_RLE14blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0x11c> + 802a216: 9b01 ldr r3, [sp, #4] + 802a218: 781a ldrb r2, [r3, #0] + 802a21a: 0993 lsrs r3, r2, #6 + 802a21c: f002 023f and.w r2, r2, #63 ; 0x3f + 802a220: 9203 str r2, [sp, #12] + 802a222: 1e5a subs r2, r3, #1 + 802a224: 2a02 cmp r2, #2 + 802a226: d815 bhi.n 802a254 <_ZN8touchgfx8LCD16bpp18DecompressorL8_RLE14blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0x140> + 802a228: 9a01 ldr r2, [sp, #4] + 802a22a: b29b uxth r3, r3 + 802a22c: 3201 adds r2, #1 + 802a22e: 9201 str r2, [sp, #4] + 802a230: b1b4 cbz r4, 802a260 <_ZN8touchgfx8LCD16bpp18DecompressorL8_RLE14blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0x14c> + 802a232: 429c cmp r4, r3 + 802a234: bf91 iteee ls + 802a236: 1b1c subls r4, r3, r4 + 802a238: 1ae4 subhi r4, r4, r3 + 802a23a: 4666 movhi r6, ip + 802a23c: f04f 0800 movhi.w r8, #0 + 802a240: bf9b ittet ls + 802a242: fa1f f884 uxthls.w r8, r4 + 802a246: 2400 movls r4, #0 + 802a248: b2a4 uxthhi r4, r4 + 802a24a: fa1f f68b uxthls.w r6, fp + 802a24e: 4643 mov r3, r8 + 802a250: 46b4 mov ip, r6 + 802a252: e7db b.n 802a20c <_ZN8touchgfx8LCD16bpp18DecompressorL8_RLE14blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0xf8> + 802a254: 9a01 ldr r2, [sp, #4] + 802a256: 9b01 ldr r3, [sp, #4] + 802a258: 3202 adds r2, #2 + 802a25a: 785b ldrb r3, [r3, #1] + 802a25c: 9201 str r2, [sp, #4] + 802a25e: e7e7 b.n 802a230 <_ZN8touchgfx8LCD16bpp18DecompressorL8_RLE14blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0x11c> + 802a260: 2203 movs r2, #3 + 802a262: 9909 ldr r1, [sp, #36] ; 0x24 + 802a264: 4563 cmp r3, ip + 802a266: 4615 mov r5, r2 + 802a268: 9a03 ldr r2, [sp, #12] + 802a26a: bf2c ite cs + 802a26c: eba3 080c subcs.w r8, r3, ip + 802a270: ebac 0603 subcc.w r6, ip, r3 + 802a274: fb15 1202 smlabb r2, r5, r2, r1 + 802a278: 9905 ldr r1, [sp, #20] + 802a27a: bf24 itt cs + 802a27c: fa1f f888 uxthcs.w r8, r8 + 802a280: 46e1 movcs r9, ip + 802a282: eb01 0502 add.w r5, r1, r2 + 802a286: 9902 ldr r1, [sp, #8] + 802a288: bf2f iteee cs + 802a28a: 4626 movcs r6, r4 + 802a28c: b2b6 uxthcc r6, r6 + 802a28e: 4699 movcc r9, r3 + 802a290: 46a0 movcc r8, r4 + 802a292: 29ff cmp r1, #255 ; 0xff + 802a294: d04a beq.n 802a32c <_ZN8touchgfx8LCD16bpp18DecompressorL8_RLE14blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0x218> + 802a296: 9f06 ldr r7, [sp, #24] + 802a298: 46ca mov sl, r9 + 802a29a: 78a9 ldrb r1, [r5, #2] + 802a29c: 9004 str r0, [sp, #16] + 802a29e: 4379 muls r1, r7 + 802a2a0: 910a str r1, [sp, #40] ; 0x28 + 802a2a2: 7869 ldrb r1, [r5, #1] + 802a2a4: 4379 muls r1, r7 + 802a2a6: 910b str r1, [sp, #44] ; 0x2c + 802a2a8: 9905 ldr r1, [sp, #20] + 802a2aa: 5c8a ldrb r2, [r1, r2] + 802a2ac: 437a muls r2, r7 + 802a2ae: 920c str r2, [sp, #48] ; 0x30 + 802a2b0: f1ba 0f00 cmp.w sl, #0 + 802a2b4: d03d beq.n 802a332 <_ZN8touchgfx8LCD16bpp18DecompressorL8_RLE14blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0x21e> + 802a2b6: 9a04 ldr r2, [sp, #16] + 802a2b8: f10a 3aff add.w sl, sl, #4294967295 + 802a2bc: 9f07 ldr r7, [sp, #28] + 802a2be: 8812 ldrh r2, [r2, #0] + 802a2c0: fa1f fa8a uxth.w sl, sl + 802a2c4: 46be mov lr, r7 + 802a2c6: 9f0a ldr r7, [sp, #40] ; 0x28 + 802a2c8: 1215 asrs r5, r2, #8 + 802a2ca: 10d1 asrs r1, r2, #3 + 802a2cc: f005 05f8 and.w r5, r5, #248 ; 0xf8 + 802a2d0: 00d2 lsls r2, r2, #3 + 802a2d2: f001 01fc and.w r1, r1, #252 ; 0xfc + 802a2d6: ea45 1555 orr.w r5, r5, r5, lsr #5 + 802a2da: b2d2 uxtb r2, r2 + 802a2dc: fb05 750e mla r5, r5, lr, r7 + 802a2e0: ea41 1191 orr.w r1, r1, r1, lsr #6 + 802a2e4: 9f0b ldr r7, [sp, #44] ; 0x2c + 802a2e6: ea42 1252 orr.w r2, r2, r2, lsr #5 + 802a2ea: b2ad uxth r5, r5 + 802a2ec: fb01 710e mla r1, r1, lr, r7 + 802a2f0: 9f0c ldr r7, [sp, #48] ; 0x30 + 802a2f2: fb02 720e mla r2, r2, lr, r7 + 802a2f6: f105 0e01 add.w lr, r5, #1 + 802a2fa: b289 uxth r1, r1 + 802a2fc: b292 uxth r2, r2 + 802a2fe: eb0e 2515 add.w r5, lr, r5, lsr #8 + 802a302: f102 0e01 add.w lr, r2, #1 + 802a306: f405 4578 and.w r5, r5, #63488 ; 0xf800 + 802a30a: eb0e 2212 add.w r2, lr, r2, lsr #8 + 802a30e: f3c2 22c4 ubfx r2, r2, #11, #5 + 802a312: 4315 orrs r5, r2 + 802a314: 1c4a adds r2, r1, #1 + 802a316: eb02 2111 add.w r1, r2, r1, lsr #8 + 802a31a: 9a04 ldr r2, [sp, #16] + 802a31c: 0949 lsrs r1, r1, #5 + 802a31e: f401 61fc and.w r1, r1, #2016 ; 0x7e0 + 802a322: 430d orrs r5, r1 + 802a324: f822 5b02 strh.w r5, [r2], #2 + 802a328: 9204 str r2, [sp, #16] + 802a32a: e7c1 b.n 802a2b0 <_ZN8touchgfx8LCD16bpp18DecompressorL8_RLE14blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0x19c> + 802a32c: 4649 mov r1, r9 + 802a32e: 4686 mov lr, r0 + 802a330: b999 cbnz r1, 802a35a <_ZN8touchgfx8LCD16bpp18DecompressorL8_RLE14blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0x246> + 802a332: 4563 cmp r3, ip + 802a334: eb00 0049 add.w r0, r0, r9, lsl #1 + 802a338: d389 bcc.n 802a24e <_ZN8touchgfx8LCD16bpp18DecompressorL8_RLE14blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0x13a> + 802a33a: fa1f f68b uxth.w r6, fp + 802a33e: f8bd 403c ldrh.w r4, [sp, #60] ; 0x3c + 802a342: 9b0d ldr r3, [sp, #52] ; 0x34 + 802a344: 1ba4 subs r4, r4, r6 + 802a346: 881b ldrh r3, [r3, #0] + 802a348: b2a4 uxth r4, r4 + 802a34a: eba3 030b sub.w r3, r3, fp + 802a34e: 2c00 cmp r4, #0 + 802a350: eb00 0043 add.w r0, r0, r3, lsl #1 + 802a354: bf18 it ne + 802a356: 2600 movne r6, #0 + 802a358: e779 b.n 802a24e <_ZN8touchgfx8LCD16bpp18DecompressorL8_RLE14blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0x13a> + 802a35a: 78aa ldrb r2, [r5, #2] + 802a35c: 3901 subs r1, #1 + 802a35e: 4f0e ldr r7, [pc, #56] ; (802a398 <_ZN8touchgfx8LCD16bpp18DecompressorL8_RLE14blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0x284>) + 802a360: b289 uxth r1, r1 + 802a362: ea07 2a02 and.w sl, r7, r2, lsl #8 + 802a366: 786a ldrb r2, [r5, #1] + 802a368: 00d2 lsls r2, r2, #3 + 802a36a: f402 62fc and.w r2, r2, #2016 ; 0x7e0 + 802a36e: ea4a 0202 orr.w r2, sl, r2 + 802a372: f895 a000 ldrb.w sl, [r5] + 802a376: ea42 02da orr.w r2, r2, sl, lsr #3 + 802a37a: f82e 2b02 strh.w r2, [lr], #2 + 802a37e: e7d7 b.n 802a330 <_ZN8touchgfx8LCD16bpp18DecompressorL8_RLE14blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0x21c> + 802a380: 4b03 ldr r3, [pc, #12] ; (802a390 <_ZN8touchgfx8LCD16bpp18DecompressorL8_RLE14blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0x27c>) + 802a382: 6818 ldr r0, [r3, #0] + 802a384: 6803 ldr r3, [r0, #0] + 802a386: 6adb ldr r3, [r3, #44] ; 0x2c + 802a388: 4798 blx r3 + 802a38a: b013 add sp, #76 ; 0x4c + 802a38c: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 802a390: 2001e734 .word 0x2001e734 + 802a394: 2001e72e .word 0x2001e72e + 802a398: fffff800 .word 0xfffff800 + +0802a39c <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW916blitCopyARGB8888EPKhS3_RKNS_4RectES6_h>: + 802a39c: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 802a3a0: b09d sub sp, #116 ; 0x74 + 802a3a2: 461c mov r4, r3 + 802a3a4: 4683 mov fp, r0 + 802a3a6: 9b26 ldr r3, [sp, #152] ; 0x98 + 802a3a8: e9cd 1211 strd r1, r2, [sp, #68] ; 0x44 + 802a3ac: f89d 209c ldrb.w r2, [sp, #156] ; 0x9c + 802a3b0: 920e str r2, [sp, #56] ; 0x38 + 802a3b2: 2a00 cmp r2, #0 + 802a3b4: f000 81e4 beq.w 802a780 <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW916blitCopyARGB8888EPKhS3_RKNS_4RectES6_h+0x3e4> + 802a3b8: 6820 ldr r0, [r4, #0] + 802a3ba: aa18 add r2, sp, #96 ; 0x60 + 802a3bc: 6861 ldr r1, [r4, #4] + 802a3be: c203 stmia r2!, {r0, r1} + 802a3c0: 6818 ldr r0, [r3, #0] + 802a3c2: aa1a add r2, sp, #104 ; 0x68 + 802a3c4: 6859 ldr r1, [r3, #4] + 802a3c6: c203 stmia r2!, {r0, r1} + 802a3c8: a818 add r0, sp, #96 ; 0x60 + 802a3ca: f7f9 f875 bl 80234b8 <_ZN8touchgfx21DisplayTransformation29transformDisplayToFrameBufferERNS_4RectE> + 802a3ce: 4621 mov r1, r4 + 802a3d0: a81a add r0, sp, #104 ; 0x68 + 802a3d2: f7f9 f899 bl 8023508 <_ZN8touchgfx21DisplayTransformation29transformDisplayToFrameBufferERNS_4RectERKS1_> + 802a3d6: f9bd 3064 ldrsh.w r3, [sp, #100] ; 0x64 + 802a3da: f9bd 4066 ldrsh.w r4, [sp, #102] ; 0x66 + 802a3de: f5b3 6f80 cmp.w r3, #1024 ; 0x400 + 802a3e2: f9bd 606e ldrsh.w r6, [sp, #110] ; 0x6e + 802a3e6: bfdb ittet le + 802a3e8: b29a uxthle r2, r3 + 802a3ea: f44f 6180 movle.w r1, #1024 ; 0x400 + 802a3ee: 2201 movgt r2, #1 + 802a3f0: fb91 f2f2 sdivle r2, r1, r2 + 802a3f4: 9202 str r2, [sp, #8] + 802a3f6: 9802 ldr r0, [sp, #8] + 802a3f8: f9bd 206a ldrsh.w r2, [sp, #106] ; 0x6a + 802a3fc: 9902 ldr r1, [sp, #8] + 802a3fe: fb92 f0f0 sdiv r0, r2, r0 + 802a402: b280 uxth r0, r0 + 802a404: 440c add r4, r1 + 802a406: 900f str r0, [sp, #60] ; 0x3c + 802a408: 3c01 subs r4, #1 + 802a40a: 9802 ldr r0, [sp, #8] + 802a40c: 9d0f ldr r5, [sp, #60] ; 0x3c + 802a40e: fb05 2510 mls r5, r5, r0, r2 + 802a412: fb94 f4f1 sdiv r4, r4, r1 + 802a416: fb15 f503 smulbb r5, r5, r3 + 802a41a: f8bd 1068 ldrh.w r1, [sp, #104] ; 0x68 + 802a41e: f8bd 3060 ldrh.w r3, [sp, #96] ; 0x60 + 802a422: 3401 adds r4, #1 + 802a424: 440d add r5, r1 + 802a426: 4419 add r1, r3 + 802a428: f8bd 3062 ldrh.w r3, [sp, #98] ; 0x62 + 802a42c: b2a4 uxth r4, r4 + 802a42e: 441a add r2, r3 + 802a430: f9bd 306c ldrsh.w r3, [sp, #108] ; 0x6c + 802a434: f8ad 1068 strh.w r1, [sp, #104] ; 0x68 + 802a438: 00a4 lsls r4, r4, #2 + 802a43a: 9306 str r3, [sp, #24] + 802a43c: b2ad uxth r5, r5 + 802a43e: 4bb3 ldr r3, [pc, #716] ; (802a70c <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW916blitCopyARGB8888EPKhS3_RKNS_4RectES6_h+0x370>) + 802a440: f8ad 206a strh.w r2, [sp, #106] ; 0x6a + 802a444: 6818 ldr r0, [r3, #0] + 802a446: 6803 ldr r3, [r0, #0] + 802a448: 6a9b ldr r3, [r3, #40] ; 0x28 + 802a44a: 4798 blx r3 + 802a44c: 4bb0 ldr r3, [pc, #704] ; (802a710 <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW916blitCopyARGB8888EPKhS3_RKNS_4RectES6_h+0x374>) + 802a44e: f9bd 106a ldrsh.w r1, [sp, #106] ; 0x6a + 802a452: 2d00 cmp r5, #0 + 802a454: 881a ldrh r2, [r3, #0] + 802a456: f9bd 7068 ldrsh.w r7, [sp, #104] ; 0x68 + 802a45a: fb02 f606 mul.w r6, r2, r6 + 802a45e: fb02 7101 mla r1, r2, r1, r7 + 802a462: 9316 str r3, [sp, #88] ; 0x58 + 802a464: eb00 0841 add.w r8, r0, r1, lsl #1 + 802a468: 4baa ldr r3, [pc, #680] ; (802a714 <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW916blitCopyARGB8888EPKhS3_RKNS_4RectES6_h+0x378>) + 802a46a: bf18 it ne + 802a46c: 2100 movne r1, #0 + 802a46e: eb08 0246 add.w r2, r8, r6, lsl #1 + 802a472: eba3 030b sub.w r3, r3, fp + 802a476: 920a str r2, [sp, #40] ; 0x28 + 802a478: f104 0204 add.w r2, r4, #4 + 802a47c: 9317 str r3, [sp, #92] ; 0x5c + 802a47e: 9213 str r2, [sp, #76] ; 0x4c + 802a480: 9a06 ldr r2, [sp, #24] + 802a482: bf08 it eq + 802a484: 4611 moveq r1, r2 + 802a486: 2200 movs r2, #0 + 802a488: b289 uxth r1, r1 + 802a48a: 920d str r2, [sp, #52] ; 0x34 + 802a48c: 9a0f ldr r2, [sp, #60] ; 0x3c + 802a48e: 9b0d ldr r3, [sp, #52] ; 0x34 + 802a490: fa12 f383 uxtah r3, r2, r3 + 802a494: 9a12 ldr r2, [sp, #72] ; 0x48 + 802a496: eb02 0383 add.w r3, r2, r3, lsl #2 + 802a49a: 3304 adds r3, #4 + 802a49c: 9308 str r3, [sp, #32] + 802a49e: 9b0a ldr r3, [sp, #40] ; 0x28 + 802a4a0: 4543 cmp r3, r8 + 802a4a2: f240 8168 bls.w 802a776 <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW916blitCopyARGB8888EPKhS3_RKNS_4RectES6_h+0x3da> + 802a4a6: f8bd 3064 ldrh.w r3, [sp, #100] ; 0x64 + 802a4aa: f04f 0e01 mov.w lr, #1 + 802a4ae: 9a02 ldr r2, [sp, #8] + 802a4b0: 9808 ldr r0, [sp, #32] + 802a4b2: fbb5 f3f3 udiv r3, r5, r3 + 802a4b6: 1ad3 subs r3, r2, r3 + 802a4b8: 7800 ldrb r0, [r0, #0] + 802a4ba: b29b uxth r3, r3 + 802a4bc: 9010 str r0, [sp, #64] ; 0x40 + 802a4be: 3001 adds r0, #1 + 802a4c0: 9314 str r3, [sp, #80] ; 0x50 + 802a4c2: 9b08 ldr r3, [sp, #32] + 802a4c4: 9007 str r0, [sp, #28] + 802a4c6: 785a ldrb r2, [r3, #1] + 802a4c8: 789b ldrb r3, [r3, #2] + 802a4ca: 021b lsls r3, r3, #8 + 802a4cc: ea43 4302 orr.w r3, r3, r2, lsl #16 + 802a4d0: 9a08 ldr r2, [sp, #32] + 802a4d2: 78d2 ldrb r2, [r2, #3] + 802a4d4: 4313 orrs r3, r2 + 802a4d6: 9a11 ldr r2, [sp, #68] ; 0x44 + 802a4d8: 441a add r2, r3 + 802a4da: 1c50 adds r0, r2, #1 + 802a4dc: 7852 ldrb r2, [r2, #1] + 802a4de: 9005 str r0, [sp, #20] + 802a4e0: 0212 lsls r2, r2, #8 + 802a4e2: 9811 ldr r0, [sp, #68] ; 0x44 + 802a4e4: f402 72ff and.w r2, r2, #510 ; 0x1fe + 802a4e8: 5cc3 ldrb r3, [r0, r3] + 802a4ea: 431a orrs r2, r3 + 802a4ec: b293 uxth r3, r2 + 802a4ee: f88b 2804 strb.w r2, [fp, #2052] ; 0x804 + 802a4f2: 930b str r3, [sp, #44] ; 0x2c + 802a4f4: 2300 movs r3, #0 + 802a4f6: 9309 str r3, [sp, #36] ; 0x24 + 802a4f8: 2301 movs r3, #1 + 802a4fa: 9301 str r3, [sp, #4] + 802a4fc: 9304 str r3, [sp, #16] + 802a4fe: 2300 movs r3, #0 + 802a500: 9303 str r3, [sp, #12] + 802a502: 2d00 cmp r5, #0 + 802a504: d07d beq.n 802a602 <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW916blitCopyARGB8888EPKhS3_RKNS_4RectES6_h+0x266> + 802a506: 45ae cmp lr, r5 + 802a508: d26c bcs.n 802a5e4 <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW916blitCopyARGB8888EPKhS3_RKNS_4RectES6_h+0x248> + 802a50a: 9b0a ldr r3, [sp, #40] ; 0x28 + 802a50c: eba5 050e sub.w r5, r5, lr + 802a510: 460c mov r4, r1 + 802a512: 4543 cmp r3, r8 + 802a514: b2ad uxth r5, r5 + 802a516: d802 bhi.n 802a51e <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW916blitCopyARGB8888EPKhS3_RKNS_4RectES6_h+0x182> + 802a518: e071 b.n 802a5fe <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW916blitCopyARGB8888EPKhS3_RKNS_4RectES6_h+0x262> + 802a51a: 2b00 cmp r3, #0 + 802a51c: d15d bne.n 802a5da <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW916blitCopyARGB8888EPKhS3_RKNS_4RectES6_h+0x23e> + 802a51e: 9b05 ldr r3, [sp, #20] + 802a520: 9a04 ldr r2, [sp, #16] + 802a522: 785b ldrb r3, [r3, #1] + 802a524: f1c2 0207 rsb r2, r2, #7 + 802a528: 9904 ldr r1, [sp, #16] + 802a52a: 4093 lsls r3, r2 + 802a52c: 005b lsls r3, r3, #1 + 802a52e: f403 72ff and.w r2, r3, #510 ; 0x1fe + 802a532: 9b05 ldr r3, [sp, #20] + 802a534: 781b ldrb r3, [r3, #0] + 802a536: 410b asrs r3, r1 + 802a538: 3101 adds r1, #1 + 802a53a: b2c9 uxtb r1, r1 + 802a53c: b2db uxtb r3, r3 + 802a53e: 2908 cmp r1, #8 + 802a540: 9104 str r1, [sp, #16] + 802a542: 9905 ldr r1, [sp, #20] + 802a544: ea43 0302 orr.w r3, r3, r2 + 802a548: bf0c ite eq + 802a54a: 3102 addeq r1, #2 + 802a54c: 3101 addne r1, #1 + 802a54e: b29a uxth r2, r3 + 802a550: bf05 ittet eq + 802a552: 9105 streq r1, [sp, #20] + 802a554: 2100 moveq r1, #0 + 802a556: 9105 strne r1, [sp, #20] + 802a558: 9104 streq r1, [sp, #16] + 802a55a: 9910 ldr r1, [sp, #64] ; 0x40 + 802a55c: 4291 cmp r1, r2 + 802a55e: d30a bcc.n 802a576 <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW916blitCopyARGB8888EPKhS3_RKNS_4RectES6_h+0x1da> + 802a560: f88b 3804 strb.w r3, [fp, #2052] ; 0x804 + 802a564: 2301 movs r3, #1 + 802a566: 9907 ldr r1, [sp, #28] + 802a568: f5b1 7f00 cmp.w r1, #512 ; 0x200 + 802a56c: d30f bcc.n 802a58e <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW916blitCopyARGB8888EPKhS3_RKNS_4RectES6_h+0x1f2> + 802a56e: 2100 movs r1, #0 + 802a570: 9301 str r3, [sp, #4] + 802a572: 9103 str r1, [sp, #12] + 802a574: e032 b.n 802a5dc <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW916blitCopyARGB8888EPKhS3_RKNS_4RectES6_h+0x240> + 802a576: 9b07 ldr r3, [sp, #28] + 802a578: 429a cmp r2, r3 + 802a57a: d318 bcc.n 802a5ae <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW916blitCopyARGB8888EPKhS3_RKNS_4RectES6_h+0x212> + 802a57c: 9b01 ldr r3, [sp, #4] + 802a57e: f89b 1804 ldrb.w r1, [fp, #2052] ; 0x804 + 802a582: 445b add r3, fp + 802a584: f883 1804 strb.w r1, [r3, #2052] ; 0x804 + 802a588: 9b01 ldr r3, [sp, #4] + 802a58a: 3301 adds r3, #1 + 802a58c: b29b uxth r3, r3 + 802a58e: 9907 ldr r1, [sp, #28] + 802a590: f89b 0804 ldrb.w r0, [fp, #2052] ; 0x804 + 802a594: eb0b 0181 add.w r1, fp, r1, lsl #2 + 802a598: 7108 strb r0, [r1, #4] + 802a59a: 980b ldr r0, [sp, #44] ; 0x2c + 802a59c: 80c8 strh r0, [r1, #6] + 802a59e: 9801 ldr r0, [sp, #4] + 802a5a0: 3001 adds r0, #1 + 802a5a2: 7148 strb r0, [r1, #5] + 802a5a4: 9907 ldr r1, [sp, #28] + 802a5a6: 3101 adds r1, #1 + 802a5a8: b289 uxth r1, r1 + 802a5aa: 9107 str r1, [sp, #28] + 802a5ac: e7df b.n 802a56e <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW916blitCopyARGB8888EPKhS3_RKNS_4RectES6_h+0x1d2> + 802a5ae: eb0b 0382 add.w r3, fp, r2, lsl #2 + 802a5b2: 4611 mov r1, r2 + 802a5b4: 795b ldrb r3, [r3, #5] + 802a5b6: f603 0004 addw r0, r3, #2052 ; 0x804 + 802a5ba: 4458 add r0, fp + 802a5bc: 9e17 ldr r6, [sp, #92] ; 0x5c + 802a5be: 4406 add r6, r0 + 802a5c0: 2e00 cmp r6, #0 + 802a5c2: dd06 ble.n 802a5d2 <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW916blitCopyARGB8888EPKhS3_RKNS_4RectES6_h+0x236> + 802a5c4: eb0b 0181 add.w r1, fp, r1, lsl #2 + 802a5c8: 790e ldrb r6, [r1, #4] + 802a5ca: f800 6d01 strb.w r6, [r0, #-1]! + 802a5ce: 88c9 ldrh r1, [r1, #6] + 802a5d0: e7f4 b.n 802a5bc <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW916blitCopyARGB8888EPKhS3_RKNS_4RectES6_h+0x220> + 802a5d2: f88b 1804 strb.w r1, [fp, #2052] ; 0x804 + 802a5d6: b29b uxth r3, r3 + 802a5d8: e7c5 b.n 802a566 <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW916blitCopyARGB8888EPKhS3_RKNS_4RectES6_h+0x1ca> + 802a5da: 9a0b ldr r2, [sp, #44] ; 0x2c + 802a5dc: 4621 mov r1, r4 + 802a5de: 920b str r2, [sp, #44] ; 0x2c + 802a5e0: 469e mov lr, r3 + 802a5e2: e78e b.n 802a502 <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW916blitCopyARGB8888EPKhS3_RKNS_4RectES6_h+0x166> + 802a5e4: 9a03 ldr r2, [sp, #12] + 802a5e6: ebae 0305 sub.w r3, lr, r5 + 802a5ea: f8bd 4018 ldrh.w r4, [sp, #24] + 802a5ee: 442a add r2, r5 + 802a5f0: b29b uxth r3, r3 + 802a5f2: b292 uxth r2, r2 + 802a5f4: 9203 str r2, [sp, #12] + 802a5f6: 2500 movs r5, #0 + 802a5f8: 9a0a ldr r2, [sp, #40] ; 0x28 + 802a5fa: 4542 cmp r2, r8 + 802a5fc: d88d bhi.n 802a51a <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW916blitCopyARGB8888EPKhS3_RKNS_4RectES6_h+0x17e> + 802a5fe: 4621 mov r1, r4 + 802a600: e74d b.n 802a49e <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW916blitCopyARGB8888EPKhS3_RKNS_4RectES6_h+0x102> + 802a602: 458e cmp lr, r1 + 802a604: f04f 0900 mov.w r9, #0 + 802a608: bf2b itete cs + 802a60a: ebae 0301 subcs.w r3, lr, r1 + 802a60e: eba1 040e subcc.w r4, r1, lr + 802a612: 462c movcs r4, r5 + 802a614: 462b movcc r3, r5 + 802a616: bf27 ittee cs + 802a618: b29b uxthcs r3, r3 + 802a61a: 910c strcs r1, [sp, #48] ; 0x30 + 802a61c: b2a4 uxthcc r4, r4 + 802a61e: f8cd e030 strcc.w lr, [sp, #48] ; 0x30 + 802a622: 9a03 ldr r2, [sp, #12] + 802a624: 980c ldr r0, [sp, #48] ; 0x30 + 802a626: 444a add r2, r9 + 802a628: 4548 cmp r0, r9 + 802a62a: b292 uxth r2, r2 + 802a62c: d074 beq.n 802a718 <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW916blitCopyARGB8888EPKhS3_RKNS_4RectES6_h+0x37c> + 802a62e: 2004 movs r0, #4 + 802a630: 445a add r2, fp + 802a632: 4605 mov r5, r0 + 802a634: f892 2804 ldrb.w r2, [r2, #2052] ; 0x804 + 802a638: 9813 ldr r0, [sp, #76] ; 0x4c + 802a63a: fb15 0202 smlabb r2, r5, r2, r0 + 802a63e: 9812 ldr r0, [sp, #72] ; 0x48 + 802a640: 5880 ldr r0, [r0, r2] + 802a642: ea5f 6a10 movs.w sl, r0, lsr #24 + 802a646: d014 beq.n 802a672 <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW916blitCopyARGB8888EPKhS3_RKNS_4RectES6_h+0x2d6> + 802a648: f1ba 0fff cmp.w sl, #255 ; 0xff + 802a64c: ea4f 2510 mov.w r5, r0, lsr #8 + 802a650: d112 bne.n 802a678 <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW916blitCopyARGB8888EPKhS3_RKNS_4RectES6_h+0x2dc> + 802a652: 9a0e ldr r2, [sp, #56] ; 0x38 + 802a654: 2aff cmp r2, #255 ; 0xff + 802a656: d10f bne.n 802a678 <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW916blitCopyARGB8888EPKhS3_RKNS_4RectES6_h+0x2dc> + 802a658: 0942 lsrs r2, r0, #5 + 802a65a: f425 65ff bic.w r5, r5, #2040 ; 0x7f8 + 802a65e: f3c0 00c4 ubfx r0, r0, #3, #5 + 802a662: f402 62fc and.w r2, r2, #2016 ; 0x7e0 + 802a666: f025 0507 bic.w r5, r5, #7 + 802a66a: 4315 orrs r5, r2 + 802a66c: 4305 orrs r5, r0 + 802a66e: f828 5019 strh.w r5, [r8, r9, lsl #1] + 802a672: f109 0901 add.w r9, r9, #1 + 802a676: e7d4 b.n 802a622 <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW916blitCopyARGB8888EPKhS3_RKNS_4RectES6_h+0x286> + 802a678: f838 c019 ldrh.w ip, [r8, r9, lsl #1] + 802a67c: b2ed uxtb r5, r5 + 802a67e: ea4f 06ec mov.w r6, ip, asr #3 + 802a682: ea4f 272c mov.w r7, ip, asr #8 + 802a686: f006 02fc and.w r2, r6, #252 ; 0xfc + 802a68a: ea4f 0ccc mov.w ip, ip, lsl #3 + 802a68e: f3c0 4607 ubfx r6, r0, #16, #8 + 802a692: f007 07f8 and.w r7, r7, #248 ; 0xf8 + 802a696: 9215 str r2, [sp, #84] ; 0x54 + 802a698: fa5f fc8c uxtb.w ip, ip + 802a69c: 9a0e ldr r2, [sp, #56] ; 0x38 + 802a69e: b2c0 uxtb r0, r0 + 802a6a0: ea47 1757 orr.w r7, r7, r7, lsr #5 + 802a6a4: fb02 fa0a mul.w sl, r2, sl + 802a6a8: ea4c 1c5c orr.w ip, ip, ip, lsr #5 + 802a6ac: f10a 0201 add.w r2, sl, #1 + 802a6b0: eb02 222a add.w r2, r2, sl, asr #8 + 802a6b4: 1212 asrs r2, r2, #8 + 802a6b6: fa1f fa82 uxth.w sl, r2 + 802a6ba: 43d2 mvns r2, r2 + 802a6bc: fb16 f60a smulbb r6, r6, sl + 802a6c0: b2d2 uxtb r2, r2 + 802a6c2: fb10 f00a smulbb r0, r0, sl + 802a6c6: fb07 6702 mla r7, r7, r2, r6 + 802a6ca: 9e15 ldr r6, [sp, #84] ; 0x54 + 802a6cc: fb0c 0002 mla r0, ip, r2, r0 + 802a6d0: fb15 f50a smulbb r5, r5, sl + 802a6d4: b2bf uxth r7, r7 + 802a6d6: b280 uxth r0, r0 + 802a6d8: ea46 1696 orr.w r6, r6, r6, lsr #6 + 802a6dc: fb06 5602 mla r6, r6, r2, r5 + 802a6e0: 1c7a adds r2, r7, #1 + 802a6e2: 1c45 adds r5, r0, #1 + 802a6e4: eb02 2717 add.w r7, r2, r7, lsr #8 + 802a6e8: eb05 2510 add.w r5, r5, r0, lsr #8 + 802a6ec: b2b6 uxth r6, r6 + 802a6ee: f407 4778 and.w r7, r7, #63488 ; 0xf800 + 802a6f2: f3c5 25c4 ubfx r5, r5, #11, #5 + 802a6f6: 432f orrs r7, r5 + 802a6f8: 1c75 adds r5, r6, #1 + 802a6fa: eb05 2516 add.w r5, r5, r6, lsr #8 + 802a6fe: 096d lsrs r5, r5, #5 + 802a700: f405 65fc and.w r5, r5, #2016 ; 0x7e0 + 802a704: 432f orrs r7, r5 + 802a706: f828 7019 strh.w r7, [r8, r9, lsl #1] + 802a70a: e7b2 b.n 802a672 <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW916blitCopyARGB8888EPKhS3_RKNS_4RectES6_h+0x2d6> + 802a70c: 2001e734 .word 0x2001e734 + 802a710: 2001e72e .word 0x2001e72e + 802a714: fffff7fb .word 0xfffff7fb + 802a718: 9203 str r2, [sp, #12] + 802a71a: 458e cmp lr, r1 + 802a71c: 9a0c ldr r2, [sp, #48] ; 0x30 + 802a71e: eb08 0842 add.w r8, r8, r2, lsl #1 + 802a722: f4ff af68 bcc.w 802a5f6 <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW916blitCopyARGB8888EPKhS3_RKNS_4RectES6_h+0x25a> + 802a726: 9a16 ldr r2, [sp, #88] ; 0x58 + 802a728: 9906 ldr r1, [sp, #24] + 802a72a: 8812 ldrh r2, [r2, #0] + 802a72c: 1a52 subs r2, r2, r1 + 802a72e: 9914 ldr r1, [sp, #80] ; 0x50 + 802a730: eb08 0842 add.w r8, r8, r2, lsl #1 + 802a734: 9a09 ldr r2, [sp, #36] ; 0x24 + 802a736: 3201 adds r2, #1 + 802a738: 428a cmp r2, r1 + 802a73a: 9209 str r2, [sp, #36] ; 0x24 + 802a73c: d111 bne.n 802a762 <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW916blitCopyARGB8888EPKhS3_RKNS_4RectES6_h+0x3c6> + 802a73e: f8bd 5068 ldrh.w r5, [sp, #104] ; 0x68 + 802a742: f8bd 9060 ldrh.w r9, [sp, #96] ; 0x60 + 802a746: 9b06 ldr r3, [sp, #24] + 802a748: eba5 0509 sub.w r5, r5, r9 + 802a74c: b2ad uxth r5, r5 + 802a74e: 2d00 cmp r5, #0 + 802a750: bf08 it eq + 802a752: 4619 moveq r1, r3 + 802a754: 9b0d ldr r3, [sp, #52] ; 0x34 + 802a756: bf18 it ne + 802a758: 2100 movne r1, #0 + 802a75a: 3301 adds r3, #1 + 802a75c: b289 uxth r1, r1 + 802a75e: 930d str r3, [sp, #52] ; 0x34 + 802a760: e694 b.n 802a48c <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW916blitCopyARGB8888EPKhS3_RKNS_4RectES6_h+0xf0> + 802a762: f8bd 4018 ldrh.w r4, [sp, #24] + 802a766: f8bd 5064 ldrh.w r5, [sp, #100] ; 0x64 + 802a76a: 1b2d subs r5, r5, r4 + 802a76c: b2ad uxth r5, r5 + 802a76e: 2d00 cmp r5, #0 + 802a770: bf18 it ne + 802a772: 2400 movne r4, #0 + 802a774: e740 b.n 802a5f8 <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW916blitCopyARGB8888EPKhS3_RKNS_4RectES6_h+0x25c> + 802a776: 4b04 ldr r3, [pc, #16] ; (802a788 <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW916blitCopyARGB8888EPKhS3_RKNS_4RectES6_h+0x3ec>) + 802a778: 6818 ldr r0, [r3, #0] + 802a77a: 6803 ldr r3, [r0, #0] + 802a77c: 6adb ldr r3, [r3, #44] ; 0x2c + 802a77e: 4798 blx r3 + 802a780: b01d add sp, #116 ; 0x74 + 802a782: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 802a786: bf00 nop + 802a788: 2001e734 .word 0x2001e734 + +0802a78c <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW914blitCopyRGB888EPKhS3_RKNS_4RectES6_h>: + 802a78c: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 802a790: b09f sub sp, #124 ; 0x7c + 802a792: 461d mov r5, r3 + 802a794: 4604 mov r4, r0 + 802a796: 9b28 ldr r3, [sp, #160] ; 0xa0 + 802a798: e9cd 1213 strd r1, r2, [sp, #76] ; 0x4c + 802a79c: f89d 20a4 ldrb.w r2, [sp, #164] ; 0xa4 + 802a7a0: 920a str r2, [sp, #40] ; 0x28 + 802a7a2: 2a00 cmp r2, #0 + 802a7a4: f000 81fe beq.w 802aba4 <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW914blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0x418> + 802a7a8: 6828 ldr r0, [r5, #0] + 802a7aa: aa1a add r2, sp, #104 ; 0x68 + 802a7ac: 6869 ldr r1, [r5, #4] + 802a7ae: c203 stmia r2!, {r0, r1} + 802a7b0: 6818 ldr r0, [r3, #0] + 802a7b2: aa1c add r2, sp, #112 ; 0x70 + 802a7b4: 6859 ldr r1, [r3, #4] + 802a7b6: c203 stmia r2!, {r0, r1} + 802a7b8: a81a add r0, sp, #104 ; 0x68 + 802a7ba: f7f8 fe7d bl 80234b8 <_ZN8touchgfx21DisplayTransformation29transformDisplayToFrameBufferERNS_4RectE> + 802a7be: 4629 mov r1, r5 + 802a7c0: a81c add r0, sp, #112 ; 0x70 + 802a7c2: f7f8 fea1 bl 8023508 <_ZN8touchgfx21DisplayTransformation29transformDisplayToFrameBufferERNS_4RectERKS1_> + 802a7c6: f9bd 306c ldrsh.w r3, [sp, #108] ; 0x6c + 802a7ca: f9bd 606e ldrsh.w r6, [sp, #110] ; 0x6e + 802a7ce: f5b3 6f80 cmp.w r3, #1024 ; 0x400 + 802a7d2: f9bd 7076 ldrsh.w r7, [sp, #118] ; 0x76 + 802a7d6: bfdb ittet le + 802a7d8: b29a uxthle r2, r3 + 802a7da: f44f 6180 movle.w r1, #1024 ; 0x400 + 802a7de: 2201 movgt r2, #1 + 802a7e0: fb91 f2f2 sdivle r2, r1, r2 + 802a7e4: 9201 str r2, [sp, #4] + 802a7e6: 9801 ldr r0, [sp, #4] + 802a7e8: f9bd 2072 ldrsh.w r2, [sp, #114] ; 0x72 + 802a7ec: 9901 ldr r1, [sp, #4] + 802a7ee: fb92 f0f0 sdiv r0, r2, r0 + 802a7f2: b280 uxth r0, r0 + 802a7f4: 440e add r6, r1 + 802a7f6: 9010 str r0, [sp, #64] ; 0x40 + 802a7f8: 3e01 subs r6, #1 + 802a7fa: 9801 ldr r0, [sp, #4] + 802a7fc: 9d10 ldr r5, [sp, #64] ; 0x40 + 802a7fe: fb05 2510 mls r5, r5, r0, r2 + 802a802: fb96 f6f1 sdiv r6, r6, r1 + 802a806: fb15 f503 smulbb r5, r5, r3 + 802a80a: f8bd 1070 ldrh.w r1, [sp, #112] ; 0x70 + 802a80e: f8bd 3068 ldrh.w r3, [sp, #104] ; 0x68 + 802a812: 3601 adds r6, #1 + 802a814: 440d add r5, r1 + 802a816: 4419 add r1, r3 + 802a818: f8bd 306a ldrh.w r3, [sp, #106] ; 0x6a + 802a81c: b2b6 uxth r6, r6 + 802a81e: 441a add r2, r3 + 802a820: f9bd 3074 ldrsh.w r3, [sp, #116] ; 0x74 + 802a824: f8ad 1070 strh.w r1, [sp, #112] ; 0x70 + 802a828: b2ad uxth r5, r5 + 802a82a: 9304 str r3, [sp, #16] + 802a82c: 4b96 ldr r3, [pc, #600] ; (802aa88 <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW914blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0x2fc>) + 802a82e: f8ad 2072 strh.w r2, [sp, #114] ; 0x72 + 802a832: 6818 ldr r0, [r3, #0] + 802a834: 6803 ldr r3, [r0, #0] + 802a836: 6a9b ldr r3, [r3, #40] ; 0x28 + 802a838: 4798 blx r3 + 802a83a: 4b94 ldr r3, [pc, #592] ; (802aa8c <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW914blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0x300>) + 802a83c: f9bd 1072 ldrsh.w r1, [sp, #114] ; 0x72 + 802a840: 2d00 cmp r5, #0 + 802a842: 881a ldrh r2, [r3, #0] + 802a844: f9bd c070 ldrsh.w ip, [sp, #112] ; 0x70 + 802a848: fb02 f707 mul.w r7, r2, r7 + 802a84c: fb02 c101 mla r1, r2, r1, ip + 802a850: 9318 str r3, [sp, #96] ; 0x60 + 802a852: eb00 0b41 add.w fp, r0, r1, lsl #1 + 802a856: 4b8e ldr r3, [pc, #568] ; (802aa90 <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW914blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0x304>) + 802a858: bf18 it ne + 802a85a: 2100 movne r1, #0 + 802a85c: eb0b 0247 add.w r2, fp, r7, lsl #1 + 802a860: eba3 0304 sub.w r3, r3, r4 + 802a864: 920b str r2, [sp, #44] ; 0x2c + 802a866: 9a14 ldr r2, [sp, #80] ; 0x50 + 802a868: 9319 str r3, [sp, #100] ; 0x64 + 802a86a: eb02 0686 add.w r6, r2, r6, lsl #2 + 802a86e: f106 0204 add.w r2, r6, #4 + 802a872: 9206 str r2, [sp, #24] + 802a874: 9a0a ldr r2, [sp, #40] ; 0x28 + 802a876: ea6f 0202 mvn.w r2, r2 + 802a87a: b2d2 uxtb r2, r2 + 802a87c: 9215 str r2, [sp, #84] ; 0x54 + 802a87e: 9a04 ldr r2, [sp, #16] + 802a880: bf08 it eq + 802a882: 4611 moveq r1, r2 + 802a884: 2200 movs r2, #0 + 802a886: b289 uxth r1, r1 + 802a888: 920d str r2, [sp, #52] ; 0x34 + 802a88a: 9a10 ldr r2, [sp, #64] ; 0x40 + 802a88c: 9b0d ldr r3, [sp, #52] ; 0x34 + 802a88e: fa12 f383 uxtah r3, r2, r3 + 802a892: 9a14 ldr r2, [sp, #80] ; 0x50 + 802a894: eb02 0383 add.w r3, r2, r3, lsl #2 + 802a898: 3304 adds r3, #4 + 802a89a: 9307 str r3, [sp, #28] + 802a89c: 9b0b ldr r3, [sp, #44] ; 0x2c + 802a89e: 455b cmp r3, fp + 802a8a0: f240 817b bls.w 802ab9a <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW914blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0x40e> + 802a8a4: f8bd 306c ldrh.w r3, [sp, #108] ; 0x6c + 802a8a8: f04f 0801 mov.w r8, #1 + 802a8ac: 9a01 ldr r2, [sp, #4] + 802a8ae: 9807 ldr r0, [sp, #28] + 802a8b0: 46c4 mov ip, r8 + 802a8b2: f8cd 8008 str.w r8, [sp, #8] + 802a8b6: 7800 ldrb r0, [r0, #0] + 802a8b8: fbb5 f3f3 udiv r3, r5, r3 + 802a8bc: 1ad3 subs r3, r2, r3 + 802a8be: 9011 str r0, [sp, #68] ; 0x44 + 802a8c0: 3001 adds r0, #1 + 802a8c2: b29b uxth r3, r3 + 802a8c4: 9005 str r0, [sp, #20] + 802a8c6: 9316 str r3, [sp, #88] ; 0x58 + 802a8c8: 9b07 ldr r3, [sp, #28] + 802a8ca: 785a ldrb r2, [r3, #1] + 802a8cc: 789b ldrb r3, [r3, #2] + 802a8ce: 021b lsls r3, r3, #8 + 802a8d0: ea43 4302 orr.w r3, r3, r2, lsl #16 + 802a8d4: 9a07 ldr r2, [sp, #28] + 802a8d6: 78d2 ldrb r2, [r2, #3] + 802a8d8: 4313 orrs r3, r2 + 802a8da: 9a13 ldr r2, [sp, #76] ; 0x4c + 802a8dc: 441a add r2, r3 + 802a8de: 1c50 adds r0, r2, #1 + 802a8e0: 7852 ldrb r2, [r2, #1] + 802a8e2: 9003 str r0, [sp, #12] + 802a8e4: 0212 lsls r2, r2, #8 + 802a8e6: 9813 ldr r0, [sp, #76] ; 0x4c + 802a8e8: f402 72ff and.w r2, r2, #510 ; 0x1fe + 802a8ec: 5cc3 ldrb r3, [r0, r3] + 802a8ee: 431a orrs r2, r3 + 802a8f0: b293 uxth r3, r2 + 802a8f2: f884 2804 strb.w r2, [r4, #2052] ; 0x804 + 802a8f6: 930c str r3, [sp, #48] ; 0x30 + 802a8f8: 2300 movs r3, #0 + 802a8fa: 9308 str r3, [sp, #32] + 802a8fc: 461a mov r2, r3 + 802a8fe: f8bd 3028 ldrh.w r3, [sp, #40] ; 0x28 + 802a902: 930e str r3, [sp, #56] ; 0x38 + 802a904: f8bd 3054 ldrh.w r3, [sp, #84] ; 0x54 + 802a908: 930f str r3, [sp, #60] ; 0x3c + 802a90a: 2d00 cmp r5, #0 + 802a90c: d07d beq.n 802aa0a <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW914blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0x27e> + 802a90e: 45ac cmp ip, r5 + 802a910: d26d bcs.n 802a9ee <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW914blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0x262> + 802a912: 9b0b ldr r3, [sp, #44] ; 0x2c + 802a914: eba5 050c sub.w r5, r5, ip + 802a918: 4608 mov r0, r1 + 802a91a: 455b cmp r3, fp + 802a91c: b2ad uxth r5, r5 + 802a91e: d802 bhi.n 802a926 <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW914blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0x19a> + 802a920: e071 b.n 802aa06 <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW914blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0x27a> + 802a922: 2b00 cmp r3, #0 + 802a924: d15d bne.n 802a9e2 <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW914blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0x256> + 802a926: 9b03 ldr r3, [sp, #12] + 802a928: 9a02 ldr r2, [sp, #8] + 802a92a: 785b ldrb r3, [r3, #1] + 802a92c: f1c2 0207 rsb r2, r2, #7 + 802a930: 9902 ldr r1, [sp, #8] + 802a932: 4093 lsls r3, r2 + 802a934: 005b lsls r3, r3, #1 + 802a936: f403 72ff and.w r2, r3, #510 ; 0x1fe + 802a93a: 9b03 ldr r3, [sp, #12] + 802a93c: 781b ldrb r3, [r3, #0] + 802a93e: 410b asrs r3, r1 + 802a940: 3101 adds r1, #1 + 802a942: b2c9 uxtb r1, r1 + 802a944: b2db uxtb r3, r3 + 802a946: 2908 cmp r1, #8 + 802a948: 9102 str r1, [sp, #8] + 802a94a: 9903 ldr r1, [sp, #12] + 802a94c: ea43 0302 orr.w r3, r3, r2 + 802a950: bf0c ite eq + 802a952: 3102 addeq r1, #2 + 802a954: 3101 addne r1, #1 + 802a956: b29a uxth r2, r3 + 802a958: bf05 ittet eq + 802a95a: 9103 streq r1, [sp, #12] + 802a95c: 2100 moveq r1, #0 + 802a95e: 9103 strne r1, [sp, #12] + 802a960: 9102 streq r1, [sp, #8] + 802a962: 9911 ldr r1, [sp, #68] ; 0x44 + 802a964: 4291 cmp r1, r2 + 802a966: d30a bcc.n 802a97e <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW914blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0x1f2> + 802a968: f884 3804 strb.w r3, [r4, #2052] ; 0x804 + 802a96c: 2301 movs r3, #1 + 802a96e: 9905 ldr r1, [sp, #20] + 802a970: f5b1 7f00 cmp.w r1, #512 ; 0x200 + 802a974: d30f bcc.n 802a996 <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW914blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0x20a> + 802a976: 2100 movs r1, #0 + 802a978: 4698 mov r8, r3 + 802a97a: 9100 str r1, [sp, #0] + 802a97c: e032 b.n 802a9e4 <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW914blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0x258> + 802a97e: 9b05 ldr r3, [sp, #20] + 802a980: 429a cmp r2, r3 + 802a982: d318 bcc.n 802a9b6 <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW914blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0x22a> + 802a984: eb04 0308 add.w r3, r4, r8 + 802a988: f894 1804 ldrb.w r1, [r4, #2052] ; 0x804 + 802a98c: f883 1804 strb.w r1, [r3, #2052] ; 0x804 + 802a990: f108 0301 add.w r3, r8, #1 + 802a994: b29b uxth r3, r3 + 802a996: 9905 ldr r1, [sp, #20] + 802a998: f894 6804 ldrb.w r6, [r4, #2052] ; 0x804 + 802a99c: eb04 0181 add.w r1, r4, r1, lsl #2 + 802a9a0: 710e strb r6, [r1, #4] + 802a9a2: 9e0c ldr r6, [sp, #48] ; 0x30 + 802a9a4: 80ce strh r6, [r1, #6] + 802a9a6: f108 0601 add.w r6, r8, #1 + 802a9aa: 714e strb r6, [r1, #5] + 802a9ac: 9905 ldr r1, [sp, #20] + 802a9ae: 3101 adds r1, #1 + 802a9b0: b289 uxth r1, r1 + 802a9b2: 9105 str r1, [sp, #20] + 802a9b4: e7df b.n 802a976 <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW914blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0x1ea> + 802a9b6: eb04 0382 add.w r3, r4, r2, lsl #2 + 802a9ba: 4611 mov r1, r2 + 802a9bc: 795b ldrb r3, [r3, #5] + 802a9be: f603 0604 addw r6, r3, #2052 ; 0x804 + 802a9c2: 4426 add r6, r4 + 802a9c4: 9f19 ldr r7, [sp, #100] ; 0x64 + 802a9c6: 4437 add r7, r6 + 802a9c8: 2f00 cmp r7, #0 + 802a9ca: dd06 ble.n 802a9da <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW914blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0x24e> + 802a9cc: eb04 0181 add.w r1, r4, r1, lsl #2 + 802a9d0: 790f ldrb r7, [r1, #4] + 802a9d2: f806 7d01 strb.w r7, [r6, #-1]! + 802a9d6: 88c9 ldrh r1, [r1, #6] + 802a9d8: e7f4 b.n 802a9c4 <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW914blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0x238> + 802a9da: f884 1804 strb.w r1, [r4, #2052] ; 0x804 + 802a9de: b29b uxth r3, r3 + 802a9e0: e7c5 b.n 802a96e <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW914blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0x1e2> + 802a9e2: 9a0c ldr r2, [sp, #48] ; 0x30 + 802a9e4: 920c str r2, [sp, #48] ; 0x30 + 802a9e6: 4601 mov r1, r0 + 802a9e8: 9a00 ldr r2, [sp, #0] + 802a9ea: 469c mov ip, r3 + 802a9ec: e78d b.n 802a90a <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW914blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0x17e> + 802a9ee: ebac 0305 sub.w r3, ip, r5 + 802a9f2: 1957 adds r7, r2, r5 + 802a9f4: f8bd 0010 ldrh.w r0, [sp, #16] + 802a9f8: b2ba uxth r2, r7 + 802a9fa: b29b uxth r3, r3 + 802a9fc: 9200 str r2, [sp, #0] + 802a9fe: 2500 movs r5, #0 + 802aa00: 9a0b ldr r2, [sp, #44] ; 0x2c + 802aa02: 455a cmp r2, fp + 802aa04: d88d bhi.n 802a922 <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW914blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0x196> + 802aa06: 4601 mov r1, r0 + 802aa08: e748 b.n 802a89c <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW914blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0x110> + 802aa0a: 458c cmp ip, r1 + 802aa0c: bf27 ittee cs + 802aa0e: ebac 0301 subcs.w r3, ip, r1 + 802aa12: 4628 movcs r0, r5 + 802aa14: eba1 000c subcc.w r0, r1, ip + 802aa18: 462b movcc r3, r5 + 802aa1a: 9d0a ldr r5, [sp, #40] ; 0x28 + 802aa1c: bf27 ittee cs + 802aa1e: b29b uxthcs r3, r3 + 802aa20: 9109 strcs r1, [sp, #36] ; 0x24 + 802aa22: b280 uxthcc r0, r0 + 802aa24: f8cd c024 strcc.w ip, [sp, #36] ; 0x24 + 802aa28: 2dff cmp r5, #255 ; 0xff + 802aa2a: 9d09 ldr r5, [sp, #36] ; 0x24 + 802aa2c: eb02 0705 add.w r7, r2, r5 + 802aa30: b2bd uxth r5, r7 + 802aa32: 9500 str r5, [sp, #0] + 802aa34: d12e bne.n 802aa94 <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW914blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0x308> + 802aa36: 465e mov r6, fp + 802aa38: 9d00 ldr r5, [sp, #0] + 802aa3a: 42aa cmp r2, r5 + 802aa3c: f040 8083 bne.w 802ab46 <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW914blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0x3ba> + 802aa40: 9a09 ldr r2, [sp, #36] ; 0x24 + 802aa42: 458c cmp ip, r1 + 802aa44: eb0b 0b42 add.w fp, fp, r2, lsl #1 + 802aa48: d3d9 bcc.n 802a9fe <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW914blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0x272> + 802aa4a: 9a18 ldr r2, [sp, #96] ; 0x60 + 802aa4c: 9904 ldr r1, [sp, #16] + 802aa4e: 8812 ldrh r2, [r2, #0] + 802aa50: 1a52 subs r2, r2, r1 + 802aa52: 9916 ldr r1, [sp, #88] ; 0x58 + 802aa54: eb0b 0b42 add.w fp, fp, r2, lsl #1 + 802aa58: 9a08 ldr r2, [sp, #32] + 802aa5a: 3201 adds r2, #1 + 802aa5c: 428a cmp r2, r1 + 802aa5e: 9208 str r2, [sp, #32] + 802aa60: f040 8091 bne.w 802ab86 <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW914blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0x3fa> + 802aa64: f8bd 5070 ldrh.w r5, [sp, #112] ; 0x70 + 802aa68: f8bd c068 ldrh.w ip, [sp, #104] ; 0x68 + 802aa6c: 9b04 ldr r3, [sp, #16] + 802aa6e: eba5 050c sub.w r5, r5, ip + 802aa72: b2ad uxth r5, r5 + 802aa74: 2d00 cmp r5, #0 + 802aa76: bf08 it eq + 802aa78: 4619 moveq r1, r3 + 802aa7a: 9b0d ldr r3, [sp, #52] ; 0x34 + 802aa7c: bf18 it ne + 802aa7e: 2100 movne r1, #0 + 802aa80: 3301 adds r3, #1 + 802aa82: b289 uxth r1, r1 + 802aa84: 930d str r3, [sp, #52] ; 0x34 + 802aa86: e700 b.n 802a88a <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW914blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0xfe> + 802aa88: 2001e734 .word 0x2001e734 + 802aa8c: 2001e72e .word 0x2001e72e + 802aa90: fffff7fb .word 0xfffff7fb + 802aa94: 46d9 mov r9, fp + 802aa96: 9d00 ldr r5, [sp, #0] + 802aa98: 42aa cmp r2, r5 + 802aa9a: d0d1 beq.n 802aa40 <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW914blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0x2b4> + 802aa9c: 1c55 adds r5, r2, #1 + 802aa9e: 4422 add r2, r4 + 802aaa0: f892 e804 ldrb.w lr, [r2, #2052] ; 0x804 + 802aaa4: 9a06 ldr r2, [sp, #24] + 802aaa6: eb0e 0e4e add.w lr, lr, lr, lsl #1 + 802aaaa: 9517 str r5, [sp, #92] ; 0x5c + 802aaac: 4472 add r2, lr + 802aaae: 9212 str r2, [sp, #72] ; 0x48 + 802aab0: f8b9 2000 ldrh.w r2, [r9] + 802aab4: 9f12 ldr r7, [sp, #72] ; 0x48 + 802aab6: 1216 asrs r6, r2, #8 + 802aab8: f897 a002 ldrb.w sl, [r7, #2] + 802aabc: 10d5 asrs r5, r2, #3 + 802aabe: 9f0e ldr r7, [sp, #56] ; 0x38 + 802aac0: f006 06f8 and.w r6, r6, #248 ; 0xf8 + 802aac4: f005 05fc and.w r5, r5, #252 ; 0xfc + 802aac8: 00d2 lsls r2, r2, #3 + 802aaca: fb1a fa07 smulbb sl, sl, r7 + 802aace: ea46 1656 orr.w r6, r6, r6, lsr #5 + 802aad2: 9f0f ldr r7, [sp, #60] ; 0x3c + 802aad4: ea45 1595 orr.w r5, r5, r5, lsr #6 + 802aad8: b2d2 uxtb r2, r2 + 802aada: fb06 a607 mla r6, r6, r7, sl + 802aade: 9f12 ldr r7, [sp, #72] ; 0x48 + 802aae0: ea42 1252 orr.w r2, r2, r2, lsr #5 + 802aae4: f897 a001 ldrb.w sl, [r7, #1] + 802aae8: b2b6 uxth r6, r6 + 802aaea: 9f0e ldr r7, [sp, #56] ; 0x38 + 802aaec: fb1a fa07 smulbb sl, sl, r7 + 802aaf0: 9f0f ldr r7, [sp, #60] ; 0x3c + 802aaf2: fb05 a507 mla r5, r5, r7, sl + 802aaf6: 9f06 ldr r7, [sp, #24] + 802aaf8: f106 0a01 add.w sl, r6, #1 + 802aafc: f817 e00e ldrb.w lr, [r7, lr] + 802ab00: b2ad uxth r5, r5 + 802ab02: 9f0e ldr r7, [sp, #56] ; 0x38 + 802ab04: eb0a 2616 add.w r6, sl, r6, lsr #8 + 802ab08: f105 0a01 add.w sl, r5, #1 + 802ab0c: fb1e fe07 smulbb lr, lr, r7 + 802ab10: 9f0f ldr r7, [sp, #60] ; 0x3c + 802ab12: eb0a 2a15 add.w sl, sl, r5, lsr #8 + 802ab16: f406 4678 and.w r6, r6, #63488 ; 0xf800 + 802ab1a: fb02 e207 mla r2, r2, r7, lr + 802ab1e: ea4f 1a5a mov.w sl, sl, lsr #5 + 802ab22: b292 uxth r2, r2 + 802ab24: f40a 6afc and.w sl, sl, #2016 ; 0x7e0 + 802ab28: f102 0e01 add.w lr, r2, #1 + 802ab2c: eb0e 2e12 add.w lr, lr, r2, lsr #8 + 802ab30: f8bd 205c ldrh.w r2, [sp, #92] ; 0x5c + 802ab34: f3ce 2ec4 ubfx lr, lr, #11, #5 + 802ab38: ea4e 0606 orr.w r6, lr, r6 + 802ab3c: ea46 060a orr.w r6, r6, sl + 802ab40: f829 6b02 strh.w r6, [r9], #2 + 802ab44: e7a7 b.n 802aa96 <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW914blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0x30a> + 802ab46: f102 0e01 add.w lr, r2, #1 + 802ab4a: 4422 add r2, r4 + 802ab4c: 9f06 ldr r7, [sp, #24] + 802ab4e: f892 5804 ldrb.w r5, [r2, #2052] ; 0x804 + 802ab52: 9a06 ldr r2, [sp, #24] + 802ab54: eb05 0545 add.w r5, r5, r5, lsl #1 + 802ab58: eb02 0a05 add.w sl, r2, r5 + 802ab5c: 4a13 ldr r2, [pc, #76] ; (802abac <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW914blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0x420>) + 802ab5e: f89a 9002 ldrb.w r9, [sl, #2] + 802ab62: ea02 2909 and.w r9, r2, r9, lsl #8 + 802ab66: f89a 2001 ldrb.w r2, [sl, #1] + 802ab6a: 00d2 lsls r2, r2, #3 + 802ab6c: f402 62fc and.w r2, r2, #2016 ; 0x7e0 + 802ab70: ea49 0202 orr.w r2, r9, r2 + 802ab74: f817 9005 ldrb.w r9, [r7, r5] + 802ab78: ea42 02d9 orr.w r2, r2, r9, lsr #3 + 802ab7c: f826 2b02 strh.w r2, [r6], #2 + 802ab80: fa1f f28e uxth.w r2, lr + 802ab84: e758 b.n 802aa38 <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW914blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0x2ac> + 802ab86: f8bd 0010 ldrh.w r0, [sp, #16] + 802ab8a: f8bd 506c ldrh.w r5, [sp, #108] ; 0x6c + 802ab8e: 1a2d subs r5, r5, r0 + 802ab90: b2ad uxth r5, r5 + 802ab92: 2d00 cmp r5, #0 + 802ab94: bf18 it ne + 802ab96: 2000 movne r0, #0 + 802ab98: e732 b.n 802aa00 <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW914blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0x274> + 802ab9a: 4b05 ldr r3, [pc, #20] ; (802abb0 <_ZN8touchgfx8LCD16bpp19DecompressorL8_LZW914blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0x424>) + 802ab9c: 6818 ldr r0, [r3, #0] + 802ab9e: 6803 ldr r3, [r0, #0] + 802aba0: 6adb ldr r3, [r3, #44] ; 0x2c + 802aba2: 4798 blx r3 + 802aba4: b01f add sp, #124 ; 0x7c + 802aba6: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 802abaa: bf00 nop + 802abac: fffff800 .word 0xfffff800 + 802abb0: 2001e734 .word 0x2001e734 + +0802abb4 <_ZN8touchgfx8LCD16bpp29copyFrameBufferRegionToMemoryERKNS_4RectES3_Phss>: + 802abb4: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 802abb8: b091 sub sp, #68 ; 0x44 + 802abba: 469b mov fp, r3 + 802abbc: 4616 mov r6, r2 + 802abbe: f9b3 2000 ldrsh.w r2, [r3] + 802abc2: f10d 0828 add.w r8, sp, #40 ; 0x28 + 802abc6: f9b3 3002 ldrsh.w r3, [r3, #2] + 802abca: f9bd 906c ldrsh.w r9, [sp, #108] ; 0x6c + 802abce: 4604 mov r4, r0 + 802abd0: f9bd 7070 ldrsh.w r7, [sp, #112] ; 0x70 + 802abd4: 4640 mov r0, r8 + 802abd6: 460d mov r5, r1 + 802abd8: 4659 mov r1, fp + 802abda: f8ad 2028 strh.w r2, [sp, #40] ; 0x28 + 802abde: f8ad 302a strh.w r3, [sp, #42] ; 0x2a + 802abe2: f8ad 902c strh.w r9, [sp, #44] ; 0x2c + 802abe6: f8ad 702e strh.w r7, [sp, #46] ; 0x2e + 802abea: f7f5 f97f bl 801feec <_ZN8touchgfx4RectaNERKS0_> + 802abee: 4631 mov r1, r6 + 802abf0: 4640 mov r0, r8 + 802abf2: f7f5 f97b bl 801feec <_ZN8touchgfx4RectaNERKS0_> + 802abf6: 4b74 ldr r3, [pc, #464] ; (802adc8 <_ZN8touchgfx8LCD16bpp29copyFrameBufferRegionToMemoryERKNS_4RectES3_Phss+0x214>) + 802abf8: 8818 ldrh r0, [r3, #0] + 802abfa: 4b74 ldr r3, [pc, #464] ; (802adcc <_ZN8touchgfx8LCD16bpp29copyFrameBufferRegionToMemoryERKNS_4RectES3_Phss+0x218>) + 802abfc: b202 sxth r2, r0 + 802abfe: 8819 ldrh r1, [r3, #0] + 802ac00: f9bd 3028 ldrsh.w r3, [sp, #40] ; 0x28 + 802ac04: b20e sxth r6, r1 + 802ac06: 2b00 cmp r3, #0 + 802ac08: da07 bge.n 802ac1a <_ZN8touchgfx8LCD16bpp29copyFrameBufferRegionToMemoryERKNS_4RectES3_Phss+0x66> + 802ac0a: f8bd c02c ldrh.w ip, [sp, #44] ; 0x2c + 802ac0e: 4463 add r3, ip + 802ac10: f8ad 302c strh.w r3, [sp, #44] ; 0x2c + 802ac14: 2300 movs r3, #0 + 802ac16: f8ad 3028 strh.w r3, [sp, #40] ; 0x28 + 802ac1a: f9bd 3028 ldrsh.w r3, [sp, #40] ; 0x28 + 802ac1e: f9bd c02c ldrsh.w ip, [sp, #44] ; 0x2c + 802ac22: 1ad2 subs r2, r2, r3 + 802ac24: 4594 cmp ip, r2 + 802ac26: bfc4 itt gt + 802ac28: 1ac2 subgt r2, r0, r3 + 802ac2a: f8ad 202c strhgt.w r2, [sp, #44] ; 0x2c + 802ac2e: f9bd 202a ldrsh.w r2, [sp, #42] ; 0x2a + 802ac32: 2a00 cmp r2, #0 + 802ac34: da07 bge.n 802ac46 <_ZN8touchgfx8LCD16bpp29copyFrameBufferRegionToMemoryERKNS_4RectES3_Phss+0x92> + 802ac36: f8bd c02e ldrh.w ip, [sp, #46] ; 0x2e + 802ac3a: 4462 add r2, ip + 802ac3c: f8ad 202e strh.w r2, [sp, #46] ; 0x2e + 802ac40: 2200 movs r2, #0 + 802ac42: f8ad 202a strh.w r2, [sp, #42] ; 0x2a + 802ac46: f9bd a02a ldrsh.w sl, [sp, #42] ; 0x2a + 802ac4a: f9bd 202e ldrsh.w r2, [sp, #46] ; 0x2e + 802ac4e: eba6 060a sub.w r6, r6, sl + 802ac52: 42b2 cmp r2, r6 + 802ac54: bfc4 itt gt + 802ac56: eba1 020a subgt.w r2, r1, sl + 802ac5a: f8ad 202e strhgt.w r2, [sp, #46] ; 0x2e + 802ac5e: 4a5c ldr r2, [pc, #368] ; (802add0 <_ZN8touchgfx8LCD16bpp29copyFrameBufferRegionToMemoryERKNS_4RectES3_Phss+0x21c>) + 802ac60: 7812 ldrb r2, [r2, #0] + 802ac62: b9a2 cbnz r2, 802ac8e <_ZN8touchgfx8LCD16bpp29copyFrameBufferRegionToMemoryERKNS_4RectES3_Phss+0xda> + 802ac64: f9bd 602c ldrsh.w r6, [sp, #44] ; 0x2c + 802ac68: 4286 cmp r6, r0 + 802ac6a: 4640 mov r0, r8 + 802ac6c: 9303 str r3, [sp, #12] + 802ac6e: bf14 ite ne + 802ac70: 2600 movne r6, #0 + 802ac72: 2601 moveq r6, #1 + 802ac74: f7f5 f97d bl 801ff72 <_ZNK8touchgfx4Rect7isEmptyEv> + 802ac78: 9b03 ldr r3, [sp, #12] + 802ac7a: b160 cbz r0, 802ac96 <_ZN8touchgfx8LCD16bpp29copyFrameBufferRegionToMemoryERKNS_4RectES3_Phss+0xe2> + 802ac7c: 2300 movs r3, #0 + 802ac7e: 8023 strh r3, [r4, #0] + 802ac80: 8063 strh r3, [r4, #2] + 802ac82: 80a3 strh r3, [r4, #4] + 802ac84: 4620 mov r0, r4 + 802ac86: 80e3 strh r3, [r4, #6] + 802ac88: b011 add sp, #68 ; 0x44 + 802ac8a: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 802ac8e: f9bd 602e ldrsh.w r6, [sp, #46] ; 0x2e + 802ac92: 428e cmp r6, r1 + 802ac94: e7e9 b.n 802ac6a <_ZN8touchgfx8LCD16bpp29copyFrameBufferRegionToMemoryERKNS_4RectES3_Phss+0xb6> + 802ac96: f9bd 202c ldrsh.w r2, [sp, #44] ; 0x2c + 802ac9a: a90e add r1, sp, #56 ; 0x38 + 802ac9c: 900e str r0, [sp, #56] ; 0x38 + 802ac9e: a80c add r0, sp, #48 ; 0x30 + 802aca0: 9205 str r2, [sp, #20] + 802aca2: f9bd 202e ldrsh.w r2, [sp, #46] ; 0x2e + 802aca6: f8ad 903c strh.w r9, [sp, #60] ; 0x3c + 802acaa: 9206 str r2, [sp, #24] + 802acac: f8bb 2000 ldrh.w r2, [fp] + 802acb0: f8ad 703e strh.w r7, [sp, #62] ; 0x3e + 802acb4: 1a9b subs r3, r3, r2 + 802acb6: b21b sxth r3, r3 + 802acb8: 9303 str r3, [sp, #12] + 802acba: f8bb 3002 ldrh.w r3, [fp, #2] + 802acbe: f8df b118 ldr.w fp, [pc, #280] ; 802add8 <_ZN8touchgfx8LCD16bpp29copyFrameBufferRegionToMemoryERKNS_4RectES3_Phss+0x224> + 802acc2: ebaa 0a03 sub.w sl, sl, r3 + 802acc6: fa0f f38a sxth.w r3, sl + 802acca: 9304 str r3, [sp, #16] + 802accc: 9b03 ldr r3, [sp, #12] + 802acce: f8ad 3030 strh.w r3, [sp, #48] ; 0x30 + 802acd2: 9b04 ldr r3, [sp, #16] + 802acd4: f8ad 3032 strh.w r3, [sp, #50] ; 0x32 + 802acd8: 9b05 ldr r3, [sp, #20] + 802acda: f8ad 3034 strh.w r3, [sp, #52] ; 0x34 + 802acde: 9b06 ldr r3, [sp, #24] + 802ace0: f8ad 3036 strh.w r3, [sp, #54] ; 0x36 + 802ace4: f7f8 fc10 bl 8023508 <_ZN8touchgfx21DisplayTransformation29transformDisplayToFrameBufferERNS_4RectERKS1_> + 802ace8: 4640 mov r0, r8 + 802acea: f7f8 fbe5 bl 80234b8 <_ZN8touchgfx21DisplayTransformation29transformDisplayToFrameBufferERNS_4RectE> + 802acee: a80e add r0, sp, #56 ; 0x38 + 802acf0: f7f8 fbe2 bl 80234b8 <_ZN8touchgfx21DisplayTransformation29transformDisplayToFrameBufferERNS_4RectE> + 802acf4: 4b37 ldr r3, [pc, #220] ; (802add4 <_ZN8touchgfx8LCD16bpp29copyFrameBufferRegionToMemoryERKNS_4RectES3_Phss+0x220>) + 802acf6: 4628 mov r0, r5 + 802acf8: f9bd a03c ldrsh.w sl, [sp, #60] ; 0x3c + 802acfc: 881b ldrh r3, [r3, #0] + 802acfe: 9307 str r3, [sp, #28] + 802ad00: 682b ldr r3, [r5, #0] + 802ad02: 6b1b ldr r3, [r3, #48] ; 0x30 + 802ad04: 4798 blx r3 + 802ad06: f8bd 5032 ldrh.w r5, [sp, #50] ; 0x32 + 802ad0a: f9bd 3030 ldrsh.w r3, [sp, #48] ; 0x30 + 802ad0e: 4681 mov r9, r0 + 802ad10: f8db 0000 ldr.w r0, [fp] + 802ad14: fb1a 3305 smlabb r3, sl, r5, r3 + 802ad18: 9d1a ldr r5, [sp, #104] ; 0x68 + 802ad1a: eb05 0543 add.w r5, r5, r3, lsl #1 + 802ad1e: 6803 ldr r3, [r0, #0] + 802ad20: 6b1b ldr r3, [r3, #48] ; 0x30 + 802ad22: 4798 blx r3 + 802ad24: 4607 mov r7, r0 + 802ad26: f8db 0000 ldr.w r0, [fp] + 802ad2a: f9bd 1028 ldrsh.w r1, [sp, #40] ; 0x28 + 802ad2e: f9bd 202a ldrsh.w r2, [sp, #42] ; 0x2a + 802ad32: 6803 ldr r3, [r0, #0] + 802ad34: 9109 str r1, [sp, #36] ; 0x24 + 802ad36: 9208 str r2, [sp, #32] + 802ad38: 6b9b ldr r3, [r3, #56] ; 0x38 + 802ad3a: 4798 blx r3 + 802ad3c: f010 0f01 tst.w r0, #1 + 802ad40: e9dd 2108 ldrd r2, r1, [sp, #32] + 802ad44: d012 beq.n 802ad6c <_ZN8touchgfx8LCD16bpp29copyFrameBufferRegionToMemoryERKNS_4RectES3_Phss+0x1b8> + 802ad46: f8db 0000 ldr.w r0, [fp] + 802ad4a: f9bd 2034 ldrsh.w r2, [sp, #52] ; 0x34 + 802ad4e: 6803 ldr r3, [r0, #0] + 802ad50: 9200 str r2, [sp, #0] + 802ad52: 6ede ldr r6, [r3, #108] ; 0x6c + 802ad54: 462b mov r3, r5 + 802ad56: e898 0006 ldmia.w r8, {r1, r2} + 802ad5a: 47b0 blx r6 + 802ad5c: 9b03 ldr r3, [sp, #12] + 802ad5e: 8023 strh r3, [r4, #0] + 802ad60: 9b04 ldr r3, [sp, #16] + 802ad62: 8063 strh r3, [r4, #2] + 802ad64: 9b05 ldr r3, [sp, #20] + 802ad66: 80a3 strh r3, [r4, #4] + 802ad68: 9b06 ldr r3, [sp, #24] + 802ad6a: e78b b.n 802ac84 <_ZN8touchgfx8LCD16bpp29copyFrameBufferRegionToMemoryERKNS_4RectES3_Phss+0xd0> + 802ad6c: fb09 f202 mul.w r2, r9, r2 + 802ad70: f9bd 3036 ldrsh.w r3, [sp, #54] ; 0x36 + 802ad74: eb02 0141 add.w r1, r2, r1, lsl #1 + 802ad78: 440f add r7, r1 + 802ad7a: b166 cbz r6, 802ad96 <_ZN8touchgfx8LCD16bpp29copyFrameBufferRegionToMemoryERKNS_4RectES3_Phss+0x1e2> + 802ad7c: 9a07 ldr r2, [sp, #28] + 802ad7e: 4592 cmp sl, r2 + 802ad80: d109 bne.n 802ad96 <_ZN8touchgfx8LCD16bpp29copyFrameBufferRegionToMemoryERKNS_4RectES3_Phss+0x1e2> + 802ad82: f8db 0000 ldr.w r0, [fp] + 802ad86: fb09 f303 mul.w r3, r9, r3 + 802ad8a: 4629 mov r1, r5 + 802ad8c: 6802 ldr r2, [r0, #0] + 802ad8e: 6b56 ldr r6, [r2, #52] ; 0x34 + 802ad90: 463a mov r2, r7 + 802ad92: 47b0 blx r6 + 802ad94: e7e2 b.n 802ad5c <_ZN8touchgfx8LCD16bpp29copyFrameBufferRegionToMemoryERKNS_4RectES3_Phss+0x1a8> + 802ad96: fb0a f303 mul.w r3, sl, r3 + 802ad9a: ea4f 064a mov.w r6, sl, lsl #1 + 802ad9e: f8df b038 ldr.w fp, [pc, #56] ; 802add8 <_ZN8touchgfx8LCD16bpp29copyFrameBufferRegionToMemoryERKNS_4RectES3_Phss+0x224> + 802ada2: eb05 0843 add.w r8, r5, r3, lsl #1 + 802ada6: 4545 cmp r5, r8 + 802ada8: d2d8 bcs.n 802ad5c <_ZN8touchgfx8LCD16bpp29copyFrameBufferRegionToMemoryERKNS_4RectES3_Phss+0x1a8> + 802adaa: f8db 0000 ldr.w r0, [fp] + 802adae: 4629 mov r1, r5 + 802adb0: f9bd 3034 ldrsh.w r3, [sp, #52] ; 0x34 + 802adb4: 4435 add r5, r6 + 802adb6: 6802 ldr r2, [r0, #0] + 802adb8: 005b lsls r3, r3, #1 + 802adba: f8d2 a034 ldr.w sl, [r2, #52] ; 0x34 + 802adbe: 463a mov r2, r7 + 802adc0: 47d0 blx sl + 802adc2: 444f add r7, r9 + 802adc4: e7ef b.n 802ada6 <_ZN8touchgfx8LCD16bpp29copyFrameBufferRegionToMemoryERKNS_4RectES3_Phss+0x1f2> + 802adc6: bf00 nop + 802adc8: 2001e728 .word 0x2001e728 + 802adcc: 2001e72a .word 0x2001e72a + 802add0: 2001e72c .word 0x2001e72c + 802add4: 2001e72e .word 0x2001e72e + 802add8: 2001e734 .word 0x2001e734 + +0802addc <_ZN8touchgfx8LCD16bpp8fillRectERKNS_4RectENS_9colortypeEh>: + 802addc: b5f0 push {r4, r5, r6, r7, lr} + 802adde: 4606 mov r6, r0 + 802ade0: b087 sub sp, #28 + 802ade2: 460c mov r4, r1 + 802ade4: 4617 mov r7, r2 + 802ade6: 461d mov r5, r3 + 802ade8: b333 cbz r3, 802ae38 <_ZN8touchgfx8LCD16bpp8fillRectERKNS_4RectENS_9colortypeEh+0x5c> + 802adea: 4608 mov r0, r1 + 802adec: f7f5 f8c1 bl 801ff72 <_ZNK8touchgfx4Rect7isEmptyEv> + 802adf0: bb10 cbnz r0, 802ae38 <_ZN8touchgfx8LCD16bpp8fillRectERKNS_4RectENS_9colortypeEh+0x5c> + 802adf2: 6820 ldr r0, [r4, #0] + 802adf4: ab04 add r3, sp, #16 + 802adf6: 6861 ldr r1, [r4, #4] + 802adf8: 4c1b ldr r4, [pc, #108] ; (802ae68 <_ZN8touchgfx8LCD16bpp8fillRectERKNS_4RectENS_9colortypeEh+0x8c>) + 802adfa: c303 stmia r3!, {r0, r1} + 802adfc: a804 add r0, sp, #16 + 802adfe: f7f8 fb5b bl 80234b8 <_ZN8touchgfx21DisplayTransformation29transformDisplayToFrameBufferERNS_4RectE> + 802ae02: 6820 ldr r0, [r4, #0] + 802ae04: 6803 ldr r3, [r0, #0] + 802ae06: 6b9b ldr r3, [r3, #56] ; 0x38 + 802ae08: 4798 blx r3 + 802ae0a: 2dff cmp r5, #255 ; 0xff + 802ae0c: d016 beq.n 802ae3c <_ZN8touchgfx8LCD16bpp8fillRectERKNS_4RectENS_9colortypeEh+0x60> + 802ae0e: f010 0f08 tst.w r0, #8 + 802ae12: 6820 ldr r0, [r4, #0] + 802ae14: d015 beq.n 802ae42 <_ZN8touchgfx8LCD16bpp8fillRectERKNS_4RectENS_9colortypeEh+0x66> + 802ae16: 2400 movs r4, #0 + 802ae18: 6801 ldr r1, [r0, #0] + 802ae1a: f8bd 3012 ldrh.w r3, [sp, #18] + 802ae1e: f8bd 2010 ldrh.w r2, [sp, #16] + 802ae22: e9cd 5402 strd r5, r4, [sp, #8] + 802ae26: f8bd 4016 ldrh.w r4, [sp, #22] + 802ae2a: 9401 str r4, [sp, #4] + 802ae2c: f8bd 4014 ldrh.w r4, [sp, #20] + 802ae30: 9400 str r4, [sp, #0] + 802ae32: 6e0c ldr r4, [r1, #96] ; 0x60 + 802ae34: 4639 mov r1, r7 + 802ae36: 47a0 blx r4 + 802ae38: b007 add sp, #28 + 802ae3a: bdf0 pop {r4, r5, r6, r7, pc} + 802ae3c: f010 0f02 tst.w r0, #2 + 802ae40: e7e7 b.n 802ae12 <_ZN8touchgfx8LCD16bpp8fillRectERKNS_4RectENS_9colortypeEh+0x36> + 802ae42: 6803 ldr r3, [r0, #0] + 802ae44: 6a9b ldr r3, [r3, #40] ; 0x28 + 802ae46: 4798 blx r3 + 802ae48: 4b08 ldr r3, [pc, #32] ; (802ae6c <_ZN8touchgfx8LCD16bpp8fillRectERKNS_4RectENS_9colortypeEh+0x90>) + 802ae4a: 4601 mov r1, r0 + 802ae4c: 4630 mov r0, r6 + 802ae4e: 881a ldrh r2, [r3, #0] + 802ae50: 6833 ldr r3, [r6, #0] + 802ae52: e9cd 7500 strd r7, r5, [sp] + 802ae56: 6a5d ldr r5, [r3, #36] ; 0x24 + 802ae58: ab04 add r3, sp, #16 + 802ae5a: 47a8 blx r5 + 802ae5c: 6820 ldr r0, [r4, #0] + 802ae5e: 6803 ldr r3, [r0, #0] + 802ae60: 6adb ldr r3, [r3, #44] ; 0x2c + 802ae62: 4798 blx r3 + 802ae64: e7e8 b.n 802ae38 <_ZN8touchgfx8LCD16bpp8fillRectERKNS_4RectENS_9colortypeEh+0x5c> + 802ae66: bf00 nop + 802ae68: 2001e734 .word 0x2001e734 + 802ae6c: 2001e72e .word 0x2001e72e + +0802ae70 <_ZN8touchgfx8LCD16bpp10fillBufferEPhtRKNS_4RectENS_9colortypeEh>: + 802ae70: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} + 802ae74: f89d 7024 ldrb.w r7, [sp, #36] ; 0x24 + 802ae78: 4688 mov r8, r1 + 802ae7a: 4614 mov r4, r2 + 802ae7c: 461d mov r5, r3 + 802ae7e: 9e08 ldr r6, [sp, #32] + 802ae80: 2f00 cmp r7, #0 + 802ae82: f000 80ab beq.w 802afdc <_ZN8touchgfx8LCD16bpp10fillBufferEPhtRKNS_4RectENS_9colortypeEh+0x16c> + 802ae86: 4618 mov r0, r3 + 802ae88: f7f5 f873 bl 801ff72 <_ZNK8touchgfx4Rect7isEmptyEv> + 802ae8c: 2800 cmp r0, #0 + 802ae8e: f040 80a5 bne.w 802afdc <_ZN8touchgfx8LCD16bpp10fillBufferEPhtRKNS_4RectENS_9colortypeEh+0x16c> + 802ae92: f9b5 1000 ldrsh.w r1, [r5] + 802ae96: 2fff cmp r7, #255 ; 0xff + 802ae98: f9b5 3002 ldrsh.w r3, [r5, #2] + 802ae9c: f9b5 0004 ldrsh.w r0, [r5, #4] + 802aea0: fb04 1303 mla r3, r4, r3, r1 + 802aea4: f9b5 5006 ldrsh.w r5, [r5, #6] + 802aea8: eba4 0200 sub.w r2, r4, r0 + 802aeac: eb08 0143 add.w r1, r8, r3, lsl #1 + 802aeb0: fb04 f505 mul.w r5, r4, r5 + 802aeb4: ea4f 2816 mov.w r8, r6, lsr #8 + 802aeb8: eb01 0545 add.w r5, r1, r5, lsl #1 + 802aebc: d04a beq.n 802af54 <_ZN8touchgfx8LCD16bpp10fillBufferEPhtRKNS_4RectENS_9colortypeEh+0xe4> + 802aebe: b2bc uxth r4, r7 + 802aec0: f1c7 0cff rsb ip, r7, #255 ; 0xff + 802aec4: f3c6 4e07 ubfx lr, r6, #16, #8 + 802aec8: fa5f f788 uxtb.w r7, r8 + 802aecc: b2f3 uxtb r3, r6 + 802aece: 0040 lsls r0, r0, #1 + 802aed0: fb0e fe04 mul.w lr, lr, r4 + 802aed4: 4367 muls r7, r4 + 802aed6: ea4f 0842 mov.w r8, r2, lsl #1 + 802aeda: 4363 muls r3, r4 + 802aedc: fa1f fc8c uxth.w ip, ip + 802aee0: 42a9 cmp r1, r5 + 802aee2: d27b bcs.n 802afdc <_ZN8touchgfx8LCD16bpp10fillBufferEPhtRKNS_4RectENS_9colortypeEh+0x16c> + 802aee4: eb01 0900 add.w r9, r1, r0 + 802aee8: 4549 cmp r1, r9 + 802aeea: d231 bcs.n 802af50 <_ZN8touchgfx8LCD16bpp10fillBufferEPhtRKNS_4RectENS_9colortypeEh+0xe0> + 802aeec: 880a ldrh r2, [r1, #0] + 802aeee: 1214 asrs r4, r2, #8 + 802aef0: 10d6 asrs r6, r2, #3 + 802aef2: f004 04f8 and.w r4, r4, #248 ; 0xf8 + 802aef6: 00d2 lsls r2, r2, #3 + 802aef8: f006 06fc and.w r6, r6, #252 ; 0xfc + 802aefc: b2d2 uxtb r2, r2 + 802aefe: ea44 1454 orr.w r4, r4, r4, lsr #5 + 802af02: ea42 1252 orr.w r2, r2, r2, lsr #5 + 802af06: fb14 f40c smulbb r4, r4, ip + 802af0a: ea46 1696 orr.w r6, r6, r6, lsr #6 + 802af0e: fb12 f20c smulbb r2, r2, ip + 802af12: fb16 f60c smulbb r6, r6, ip + 802af16: 4474 add r4, lr + 802af18: 441a add r2, r3 + 802af1a: b2a4 uxth r4, r4 + 802af1c: 443e add r6, r7 + 802af1e: b292 uxth r2, r2 + 802af20: f104 0a01 add.w sl, r4, #1 + 802af24: b2b6 uxth r6, r6 + 802af26: eb0a 2414 add.w r4, sl, r4, lsr #8 + 802af2a: f102 0a01 add.w sl, r2, #1 + 802af2e: eb0a 2212 add.w r2, sl, r2, lsr #8 + 802af32: f404 4478 and.w r4, r4, #63488 ; 0xf800 + 802af36: f3c2 22c4 ubfx r2, r2, #11, #5 + 802af3a: 4322 orrs r2, r4 + 802af3c: 1c74 adds r4, r6, #1 + 802af3e: eb04 2616 add.w r6, r4, r6, lsr #8 + 802af42: 0976 lsrs r6, r6, #5 + 802af44: f406 66fc and.w r6, r6, #2016 ; 0x7e0 + 802af48: 4332 orrs r2, r6 + 802af4a: f821 2b02 strh.w r2, [r1], #2 + 802af4e: e7cb b.n 802aee8 <_ZN8touchgfx8LCD16bpp10fillBufferEPhtRKNS_4RectENS_9colortypeEh+0x78> + 802af50: 4441 add r1, r8 + 802af52: e7c5 b.n 802aee0 <_ZN8touchgfx8LCD16bpp10fillBufferEPhtRKNS_4RectENS_9colortypeEh+0x70> + 802af54: 0973 lsrs r3, r6, #5 + 802af56: 4f22 ldr r7, [pc, #136] ; (802afe0 <_ZN8touchgfx8LCD16bpp10fillBufferEPhtRKNS_4RectENS_9colortypeEh+0x170>) + 802af58: f3c6 06c4 ubfx r6, r6, #3, #5 + 802af5c: ea08 0707 and.w r7, r8, r7 + 802af60: f403 63fc and.w r3, r3, #2016 ; 0x7e0 + 802af64: 433b orrs r3, r7 + 802af66: 07e7 lsls r7, r4, #31 + 802af68: ea43 0306 orr.w r3, r3, r6 + 802af6c: b29b uxth r3, r3 + 802af6e: d50b bpl.n 802af88 <_ZN8touchgfx8LCD16bpp10fillBufferEPhtRKNS_4RectENS_9colortypeEh+0x118> + 802af70: 0040 lsls r0, r0, #1 + 802af72: 0052 lsls r2, r2, #1 + 802af74: 42a9 cmp r1, r5 + 802af76: d231 bcs.n 802afdc <_ZN8touchgfx8LCD16bpp10fillBufferEPhtRKNS_4RectENS_9colortypeEh+0x16c> + 802af78: 180c adds r4, r1, r0 + 802af7a: 42a1 cmp r1, r4 + 802af7c: d202 bcs.n 802af84 <_ZN8touchgfx8LCD16bpp10fillBufferEPhtRKNS_4RectENS_9colortypeEh+0x114> + 802af7e: f821 3b02 strh.w r3, [r1], #2 + 802af82: e7fa b.n 802af7a <_ZN8touchgfx8LCD16bpp10fillBufferEPhtRKNS_4RectENS_9colortypeEh+0x10a> + 802af84: 4411 add r1, r2 + 802af86: e7f5 b.n 802af74 <_ZN8touchgfx8LCD16bpp10fillBufferEPhtRKNS_4RectENS_9colortypeEh+0x104> + 802af88: 078e lsls r6, r1, #30 + 802af8a: d008 beq.n 802af9e <_ZN8touchgfx8LCD16bpp10fillBufferEPhtRKNS_4RectENS_9colortypeEh+0x12e> + 802af8c: 0066 lsls r6, r4, #1 + 802af8e: 460a mov r2, r1 + 802af90: 42aa cmp r2, r5 + 802af92: d202 bcs.n 802af9a <_ZN8touchgfx8LCD16bpp10fillBufferEPhtRKNS_4RectENS_9colortypeEh+0x12a> + 802af94: 8013 strh r3, [r2, #0] + 802af96: 4432 add r2, r6 + 802af98: e7fa b.n 802af90 <_ZN8touchgfx8LCD16bpp10fillBufferEPhtRKNS_4RectENS_9colortypeEh+0x120> + 802af9a: 3102 adds r1, #2 + 802af9c: 3801 subs r0, #1 + 802af9e: 07c2 lsls r2, r0, #31 + 802afa0: d50b bpl.n 802afba <_ZN8touchgfx8LCD16bpp10fillBufferEPhtRKNS_4RectENS_9colortypeEh+0x14a> + 802afa2: f100 4200 add.w r2, r0, #2147483648 ; 0x80000000 + 802afa6: 0066 lsls r6, r4, #1 + 802afa8: 3a01 subs r2, #1 + 802afaa: eb01 0242 add.w r2, r1, r2, lsl #1 + 802afae: 42aa cmp r2, r5 + 802afb0: d202 bcs.n 802afb8 <_ZN8touchgfx8LCD16bpp10fillBufferEPhtRKNS_4RectENS_9colortypeEh+0x148> + 802afb2: 8013 strh r3, [r2, #0] + 802afb4: 4432 add r2, r6 + 802afb6: e7fa b.n 802afae <_ZN8touchgfx8LCD16bpp10fillBufferEPhtRKNS_4RectENS_9colortypeEh+0x13e> + 802afb8: 3801 subs r0, #1 + 802afba: b178 cbz r0, 802afdc <_ZN8touchgfx8LCD16bpp10fillBufferEPhtRKNS_4RectENS_9colortypeEh+0x16c> + 802afbc: 1040 asrs r0, r0, #1 + 802afbe: ea43 4303 orr.w r3, r3, r3, lsl #16 + 802afc2: 0080 lsls r0, r0, #2 + 802afc4: 0064 lsls r4, r4, #1 + 802afc6: 42a9 cmp r1, r5 + 802afc8: d208 bcs.n 802afdc <_ZN8touchgfx8LCD16bpp10fillBufferEPhtRKNS_4RectENS_9colortypeEh+0x16c> + 802afca: 180e adds r6, r1, r0 + 802afcc: 460a mov r2, r1 + 802afce: 42b2 cmp r2, r6 + 802afd0: d202 bcs.n 802afd8 <_ZN8touchgfx8LCD16bpp10fillBufferEPhtRKNS_4RectENS_9colortypeEh+0x168> + 802afd2: f842 3b04 str.w r3, [r2], #4 + 802afd6: e7fa b.n 802afce <_ZN8touchgfx8LCD16bpp10fillBufferEPhtRKNS_4RectENS_9colortypeEh+0x15e> + 802afd8: 4421 add r1, r4 + 802afda: e7f4 b.n 802afc6 <_ZN8touchgfx8LCD16bpp10fillBufferEPhtRKNS_4RectENS_9colortypeEh+0x156> + 802afdc: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + 802afe0: 00fff800 .word 0x00fff800 + +0802afe4 <_ZN8touchgfx8LCD16bppC1Ev>: + 802afe4: 2200 movs r2, #0 + 802afe6: 4912 ldr r1, [pc, #72] ; (802b030 <_ZN8touchgfx8LCD16bppC1Ev+0x4c>) + 802afe8: 6042 str r2, [r0, #4] + 802afea: 6001 str r1, [r0, #0] + 802afec: e9c0 2202 strd r2, r2, [r0, #8] + 802aff0: e9c0 2204 strd r2, r2, [r0, #16] + 802aff4: e9c0 2206 strd r2, r2, [r0, #24] + 802aff8: e9c0 2208 strd r2, r2, [r0, #32] + 802affc: e9c0 220a strd r2, r2, [r0, #40] ; 0x28 + 802b000: e9c0 220c strd r2, r2, [r0, #48] ; 0x30 + 802b004: e9c0 220e strd r2, r2, [r0, #56] ; 0x38 + 802b008: e9c0 2210 strd r2, r2, [r0, #64] ; 0x40 + 802b00c: e9c0 2212 strd r2, r2, [r0, #72] ; 0x48 + 802b010: e9c0 2214 strd r2, r2, [r0, #80] ; 0x50 + 802b014: e9c0 2216 strd r2, r2, [r0, #88] ; 0x58 + 802b018: e9c0 2218 strd r2, r2, [r0, #96] ; 0x60 + 802b01c: e9c0 221a strd r2, r2, [r0, #104] ; 0x68 + 802b020: e9c0 221c strd r2, r2, [r0, #112] ; 0x70 + 802b024: e9c0 221e strd r2, r2, [r0, #120] ; 0x78 + 802b028: f8c0 2080 str.w r2, [r0, #128] ; 0x80 + 802b02c: 4770 bx lr + 802b02e: bf00 nop + 802b030: 0803ca28 .word 0x0803ca28 + +0802b034 <_ZN8touchgfx8LCD16bpp16blitCopyARGB8888EPKmRKNS_4RectES5_h>: + 802b034: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 802b038: b08d sub sp, #52 ; 0x34 + 802b03a: 460d mov r5, r1 + 802b03c: 4604 mov r4, r0 + 802b03e: 4699 mov r9, r3 + 802b040: 6808 ldr r0, [r1, #0] + 802b042: ab08 add r3, sp, #32 + 802b044: 6849 ldr r1, [r1, #4] + 802b046: c303 stmia r3!, {r0, r1} + 802b048: 6810 ldr r0, [r2, #0] + 802b04a: ab0a add r3, sp, #40 ; 0x28 + 802b04c: 6851 ldr r1, [r2, #4] + 802b04e: c303 stmia r3!, {r0, r1} + 802b050: a808 add r0, sp, #32 + 802b052: f7f8 fa31 bl 80234b8 <_ZN8touchgfx21DisplayTransformation29transformDisplayToFrameBufferERNS_4RectE> + 802b056: 4629 mov r1, r5 + 802b058: a80a add r0, sp, #40 ; 0x28 + 802b05a: 4d67 ldr r5, [pc, #412] ; (802b1f8 <_ZN8touchgfx8LCD16bpp16blitCopyARGB8888EPKmRKNS_4RectES5_h+0x1c4>) + 802b05c: f7f8 fa54 bl 8023508 <_ZN8touchgfx21DisplayTransformation29transformDisplayToFrameBufferERNS_4RectERKS1_> + 802b060: f9bd 2028 ldrsh.w r2, [sp, #40] ; 0x28 + 802b064: f9bd 302a ldrsh.w r3, [sp, #42] ; 0x2a + 802b068: f8bd 1024 ldrh.w r1, [sp, #36] ; 0x24 + 802b06c: 6828 ldr r0, [r5, #0] + 802b06e: fb11 2103 smlabb r1, r1, r3, r2 + 802b072: f9bd 802c ldrsh.w r8, [sp, #44] ; 0x2c + 802b076: f9bd 602e ldrsh.w r6, [sp, #46] ; 0x2e + 802b07a: eb04 0481 add.w r4, r4, r1, lsl #2 + 802b07e: f8bd 1020 ldrh.w r1, [sp, #32] + 802b082: 440a add r2, r1 + 802b084: f8ad 2028 strh.w r2, [sp, #40] ; 0x28 + 802b088: f8bd 2022 ldrh.w r2, [sp, #34] ; 0x22 + 802b08c: 4413 add r3, r2 + 802b08e: f8ad 302a strh.w r3, [sp, #42] ; 0x2a + 802b092: 6803 ldr r3, [r0, #0] + 802b094: 6b9b ldr r3, [r3, #56] ; 0x38 + 802b096: 4798 blx r3 + 802b098: f1b9 0fff cmp.w r9, #255 ; 0xff + 802b09c: d119 bne.n 802b0d2 <_ZN8touchgfx8LCD16bpp16blitCopyARGB8888EPKmRKNS_4RectES5_h+0x9e> + 802b09e: f010 0f20 tst.w r0, #32 + 802b0a2: 6828 ldr r0, [r5, #0] + 802b0a4: d018 beq.n 802b0d8 <_ZN8touchgfx8LCD16bpp16blitCopyARGB8888EPKmRKNS_4RectES5_h+0xa4> + 802b0a6: 2500 movs r5, #0 + 802b0a8: 6801 ldr r1, [r0, #0] + 802b0aa: b2b6 uxth r6, r6 + 802b0ac: f8bd 302a ldrh.w r3, [sp, #42] ; 0x2a + 802b0b0: f8bd 2028 ldrh.w r2, [sp, #40] ; 0x28 + 802b0b4: 9601 str r6, [sp, #4] + 802b0b6: e9cd 9503 strd r9, r5, [sp, #12] + 802b0ba: f8bd 5024 ldrh.w r5, [sp, #36] ; 0x24 + 802b0be: 9502 str r5, [sp, #8] + 802b0c0: fa1f f588 uxth.w r5, r8 + 802b0c4: 9500 str r5, [sp, #0] + 802b0c6: 6d0d ldr r5, [r1, #80] ; 0x50 + 802b0c8: 4621 mov r1, r4 + 802b0ca: 47a8 blx r5 + 802b0cc: b00d add sp, #52 ; 0x34 + 802b0ce: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 802b0d2: f010 0f40 tst.w r0, #64 ; 0x40 + 802b0d6: e7e4 b.n 802b0a2 <_ZN8touchgfx8LCD16bpp16blitCopyARGB8888EPKmRKNS_4RectES5_h+0x6e> + 802b0d8: 6803 ldr r3, [r0, #0] + 802b0da: 6a9b ldr r3, [r3, #40] ; 0x28 + 802b0dc: 4798 blx r3 + 802b0de: 4947 ldr r1, [pc, #284] ; (802b1fc <_ZN8touchgfx8LCD16bpp16blitCopyARGB8888EPKmRKNS_4RectES5_h+0x1c8>) + 802b0e0: f9bd 202a ldrsh.w r2, [sp, #42] ; 0x2a + 802b0e4: 880b ldrh r3, [r1, #0] + 802b0e6: 468a mov sl, r1 + 802b0e8: f9bd 5028 ldrsh.w r5, [sp, #40] ; 0x28 + 802b0ec: fb03 5202 mla r2, r3, r2, r5 + 802b0f0: 4373 muls r3, r6 + 802b0f2: eb00 0042 add.w r0, r0, r2, lsl #1 + 802b0f6: eb00 0343 add.w r3, r0, r3, lsl #1 + 802b0fa: 9307 str r3, [sp, #28] + 802b0fc: ea4f 0348 mov.w r3, r8, lsl #1 + 802b100: 9306 str r3, [sp, #24] + 802b102: 9b07 ldr r3, [sp, #28] + 802b104: 4298 cmp r0, r3 + 802b106: d270 bcs.n 802b1ea <_ZN8touchgfx8LCD16bpp16blitCopyARGB8888EPKmRKNS_4RectES5_h+0x1b6> + 802b108: 9b06 ldr r3, [sp, #24] + 802b10a: 4621 mov r1, r4 + 802b10c: eb00 0b03 add.w fp, r0, r3 + 802b110: 4558 cmp r0, fp + 802b112: d25d bcs.n 802b1d0 <_ZN8touchgfx8LCD16bpp16blitCopyARGB8888EPKmRKNS_4RectES5_h+0x19c> + 802b114: f851 4b04 ldr.w r4, [r1], #4 + 802b118: 0e23 lsrs r3, r4, #24 + 802b11a: d014 beq.n 802b146 <_ZN8touchgfx8LCD16bpp16blitCopyARGB8888EPKmRKNS_4RectES5_h+0x112> + 802b11c: 2bff cmp r3, #255 ; 0xff + 802b11e: ea4f 2c14 mov.w ip, r4, lsr #8 + 802b122: d112 bne.n 802b14a <_ZN8touchgfx8LCD16bpp16blitCopyARGB8888EPKmRKNS_4RectES5_h+0x116> + 802b124: f1b9 0fff cmp.w r9, #255 ; 0xff + 802b128: d10f bne.n 802b14a <_ZN8touchgfx8LCD16bpp16blitCopyARGB8888EPKmRKNS_4RectES5_h+0x116> + 802b12a: 0963 lsrs r3, r4, #5 + 802b12c: f42c 6cff bic.w ip, ip, #2040 ; 0x7f8 + 802b130: f3c4 04c4 ubfx r4, r4, #3, #5 + 802b134: f403 63fc and.w r3, r3, #2016 ; 0x7e0 + 802b138: f02c 0c07 bic.w ip, ip, #7 + 802b13c: ea43 0c0c orr.w ip, r3, ip + 802b140: ea4c 0404 orr.w r4, ip, r4 + 802b144: 8004 strh r4, [r0, #0] + 802b146: 3002 adds r0, #2 + 802b148: e7e2 b.n 802b110 <_ZN8touchgfx8LCD16bpp16blitCopyARGB8888EPKmRKNS_4RectES5_h+0xdc> + 802b14a: fb09 f303 mul.w r3, r9, r3 + 802b14e: 8807 ldrh r7, [r0, #0] + 802b150: f3c4 4e07 ubfx lr, r4, #16, #8 + 802b154: fa5f fc8c uxtb.w ip, ip + 802b158: 1c5a adds r2, r3, #1 + 802b15a: 123e asrs r6, r7, #8 + 802b15c: 10fd asrs r5, r7, #3 + 802b15e: eb02 2223 add.w r2, r2, r3, asr #8 + 802b162: f006 06f8 and.w r6, r6, #248 ; 0xf8 + 802b166: 00ff lsls r7, r7, #3 + 802b168: f005 05fc and.w r5, r5, #252 ; 0xfc + 802b16c: 1212 asrs r2, r2, #8 + 802b16e: ea46 1656 orr.w r6, r6, r6, lsr #5 + 802b172: b293 uxth r3, r2 + 802b174: 43d2 mvns r2, r2 + 802b176: b2ff uxtb r7, r7 + 802b178: fb1e fe03 smulbb lr, lr, r3 + 802b17c: b2d2 uxtb r2, r2 + 802b17e: fb1c fc03 smulbb ip, ip, r3 + 802b182: b2e4 uxtb r4, r4 + 802b184: fb06 e602 mla r6, r6, r2, lr + 802b188: ea45 1595 orr.w r5, r5, r5, lsr #6 + 802b18c: fb14 f403 smulbb r4, r4, r3 + 802b190: ea47 1757 orr.w r7, r7, r7, lsr #5 + 802b194: b2b6 uxth r6, r6 + 802b196: fb05 c502 mla r5, r5, r2, ip + 802b19a: fb07 4702 mla r7, r7, r2, r4 + 802b19e: f106 0e01 add.w lr, r6, #1 + 802b1a2: b2ad uxth r5, r5 + 802b1a4: b2bf uxth r7, r7 + 802b1a6: eb0e 2616 add.w r6, lr, r6, lsr #8 + 802b1aa: f105 0c01 add.w ip, r5, #1 + 802b1ae: f406 4e78 and.w lr, r6, #63488 ; 0xf800 + 802b1b2: 1c7e adds r6, r7, #1 + 802b1b4: eb0c 2515 add.w r5, ip, r5, lsr #8 + 802b1b8: eb06 2617 add.w r6, r6, r7, lsr #8 + 802b1bc: 096d lsrs r5, r5, #5 + 802b1be: f3c6 26c4 ubfx r6, r6, #11, #5 + 802b1c2: f405 65fc and.w r5, r5, #2016 ; 0x7e0 + 802b1c6: ea46 060e orr.w r6, r6, lr + 802b1ca: 432e orrs r6, r5 + 802b1cc: 8006 strh r6, [r0, #0] + 802b1ce: e7ba b.n 802b146 <_ZN8touchgfx8LCD16bpp16blitCopyARGB8888EPKmRKNS_4RectES5_h+0x112> + 802b1d0: f8ba 3000 ldrh.w r3, [sl] + 802b1d4: f9bd 4024 ldrsh.w r4, [sp, #36] ; 0x24 + 802b1d8: eba3 0308 sub.w r3, r3, r8 + 802b1dc: eba4 0408 sub.w r4, r4, r8 + 802b1e0: eb00 0043 add.w r0, r0, r3, lsl #1 + 802b1e4: eb01 0484 add.w r4, r1, r4, lsl #2 + 802b1e8: e78b b.n 802b102 <_ZN8touchgfx8LCD16bpp16blitCopyARGB8888EPKmRKNS_4RectES5_h+0xce> + 802b1ea: 4b03 ldr r3, [pc, #12] ; (802b1f8 <_ZN8touchgfx8LCD16bpp16blitCopyARGB8888EPKmRKNS_4RectES5_h+0x1c4>) + 802b1ec: 6818 ldr r0, [r3, #0] + 802b1ee: 6803 ldr r3, [r0, #0] + 802b1f0: 6adb ldr r3, [r3, #44] ; 0x2c + 802b1f2: 4798 blx r3 + 802b1f4: e76a b.n 802b0cc <_ZN8touchgfx8LCD16bpp16blitCopyARGB8888EPKmRKNS_4RectES5_h+0x98> + 802b1f6: bf00 nop + 802b1f8: 2001e734 .word 0x2001e734 + 802b1fc: 2001e72e .word 0x2001e72e + +0802b200 <_ZNK8touchgfx8LCD16bpp21blitCopyARGB8888SolidEPKmRKNS_4RectES5_>: + 802b200: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} + 802b204: b085 sub sp, #20 + 802b206: 6810 ldr r0, [r2, #0] + 802b208: 460c mov r4, r1 + 802b20a: 6851 ldr r1, [r2, #4] + 802b20c: 466d mov r5, sp + 802b20e: 4616 mov r6, r2 + 802b210: c503 stmia r5!, {r0, r1} + 802b212: 6818 ldr r0, [r3, #0] + 802b214: 6859 ldr r1, [r3, #4] + 802b216: c503 stmia r5!, {r0, r1} + 802b218: 4668 mov r0, sp + 802b21a: 4d2e ldr r5, [pc, #184] ; (802b2d4 <_ZNK8touchgfx8LCD16bpp21blitCopyARGB8888SolidEPKmRKNS_4RectES5_+0xd4>) + 802b21c: f7f8 f94c bl 80234b8 <_ZN8touchgfx21DisplayTransformation29transformDisplayToFrameBufferERNS_4RectE> + 802b220: 4631 mov r1, r6 + 802b222: a802 add r0, sp, #8 + 802b224: 4e2c ldr r6, [pc, #176] ; (802b2d8 <_ZNK8touchgfx8LCD16bpp21blitCopyARGB8888SolidEPKmRKNS_4RectES5_+0xd8>) + 802b226: f7f8 f96f bl 8023508 <_ZN8touchgfx21DisplayTransformation29transformDisplayToFrameBufferERNS_4RectERKS1_> + 802b22a: f9bd 2008 ldrsh.w r2, [sp, #8] + 802b22e: f9bd 300a ldrsh.w r3, [sp, #10] + 802b232: f8bd 1004 ldrh.w r1, [sp, #4] + 802b236: 6828 ldr r0, [r5, #0] + 802b238: fb11 2103 smlabb r1, r1, r3, r2 + 802b23c: f9bd 700c ldrsh.w r7, [sp, #12] + 802b240: f9bd 800e ldrsh.w r8, [sp, #14] + 802b244: eb04 0481 add.w r4, r4, r1, lsl #2 + 802b248: f8bd 1000 ldrh.w r1, [sp] + 802b24c: 440a add r2, r1 + 802b24e: f8ad 2008 strh.w r2, [sp, #8] + 802b252: f8bd 2002 ldrh.w r2, [sp, #2] + 802b256: 4413 add r3, r2 + 802b258: f8ad 300a strh.w r3, [sp, #10] + 802b25c: 6803 ldr r3, [r0, #0] + 802b25e: 6a9b ldr r3, [r3, #40] ; 0x28 + 802b260: 4798 blx r3 + 802b262: 8833 ldrh r3, [r6, #0] + 802b264: f9bd 200a ldrsh.w r2, [sp, #10] + 802b268: ea4f 0c47 mov.w ip, r7, lsl #1 + 802b26c: f9bd 1008 ldrsh.w r1, [sp, #8] + 802b270: f8df e068 ldr.w lr, [pc, #104] ; 802b2dc <_ZNK8touchgfx8LCD16bpp21blitCopyARGB8888SolidEPKmRKNS_4RectES5_+0xdc> + 802b274: fb03 1202 mla r2, r3, r2, r1 + 802b278: fb08 f303 mul.w r3, r8, r3 + 802b27c: eb00 0042 add.w r0, r0, r2, lsl #1 + 802b280: eb00 0343 add.w r3, r0, r3, lsl #1 + 802b284: 4298 cmp r0, r3 + 802b286: d21d bcs.n 802b2c4 <_ZNK8touchgfx8LCD16bpp21blitCopyARGB8888SolidEPKmRKNS_4RectES5_+0xc4> + 802b288: eb00 080c add.w r8, r0, ip + 802b28c: 4540 cmp r0, r8 + 802b28e: d20f bcs.n 802b2b0 <_ZNK8touchgfx8LCD16bpp21blitCopyARGB8888SolidEPKmRKNS_4RectES5_+0xb0> + 802b290: f854 1b04 ldr.w r1, [r4], #4 + 802b294: ea4f 1951 mov.w r9, r1, lsr #5 + 802b298: ea0e 2211 and.w r2, lr, r1, lsr #8 + 802b29c: f3c1 01c4 ubfx r1, r1, #3, #5 + 802b2a0: f409 69fc and.w r9, r9, #2016 ; 0x7e0 + 802b2a4: ea42 0209 orr.w r2, r2, r9 + 802b2a8: 430a orrs r2, r1 + 802b2aa: f820 2b02 strh.w r2, [r0], #2 + 802b2ae: e7ed b.n 802b28c <_ZNK8touchgfx8LCD16bpp21blitCopyARGB8888SolidEPKmRKNS_4RectES5_+0x8c> + 802b2b0: 8832 ldrh r2, [r6, #0] + 802b2b2: 1bd2 subs r2, r2, r7 + 802b2b4: eb00 0042 add.w r0, r0, r2, lsl #1 + 802b2b8: f9bd 2004 ldrsh.w r2, [sp, #4] + 802b2bc: 1bd2 subs r2, r2, r7 + 802b2be: eb04 0482 add.w r4, r4, r2, lsl #2 + 802b2c2: e7df b.n 802b284 <_ZNK8touchgfx8LCD16bpp21blitCopyARGB8888SolidEPKmRKNS_4RectES5_+0x84> + 802b2c4: 6828 ldr r0, [r5, #0] + 802b2c6: 6803 ldr r3, [r0, #0] + 802b2c8: 6adb ldr r3, [r3, #44] ; 0x2c + 802b2ca: 4798 blx r3 + 802b2cc: b005 add sp, #20 + 802b2ce: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} + 802b2d2: bf00 nop + 802b2d4: 2001e734 .word 0x2001e734 + 802b2d8: 2001e72e .word 0x2001e72e + 802b2dc: fffff800 .word 0xfffff800 + +0802b2e0 <_ZN8touchgfx8LCD16bpp14blitCopyRGB888EPKhRKNS_4RectES5_h>: + 802b2e0: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} + 802b2e4: b08e sub sp, #56 ; 0x38 + 802b2e6: 460e mov r6, r1 + 802b2e8: 4604 mov r4, r0 + 802b2ea: 461d mov r5, r3 + 802b2ec: 6808 ldr r0, [r1, #0] + 802b2ee: ab0a add r3, sp, #40 ; 0x28 + 802b2f0: 6849 ldr r1, [r1, #4] + 802b2f2: f8df 81d4 ldr.w r8, [pc, #468] ; 802b4c8 <_ZN8touchgfx8LCD16bpp14blitCopyRGB888EPKhRKNS_4RectES5_h+0x1e8> + 802b2f6: f8df 91d4 ldr.w r9, [pc, #468] ; 802b4cc <_ZN8touchgfx8LCD16bpp14blitCopyRGB888EPKhRKNS_4RectES5_h+0x1ec> + 802b2fa: c303 stmia r3!, {r0, r1} + 802b2fc: 6810 ldr r0, [r2, #0] + 802b2fe: ab0c add r3, sp, #48 ; 0x30 + 802b300: 6851 ldr r1, [r2, #4] + 802b302: c303 stmia r3!, {r0, r1} + 802b304: a80a add r0, sp, #40 ; 0x28 + 802b306: f7f8 f8d7 bl 80234b8 <_ZN8touchgfx21DisplayTransformation29transformDisplayToFrameBufferERNS_4RectE> + 802b30a: 4631 mov r1, r6 + 802b30c: a80c add r0, sp, #48 ; 0x30 + 802b30e: f7f8 f8fb bl 8023508 <_ZN8touchgfx21DisplayTransformation29transformDisplayToFrameBufferERNS_4RectERKS1_> + 802b312: f9bd 2030 ldrsh.w r2, [sp, #48] ; 0x30 + 802b316: f9bd 3032 ldrsh.w r3, [sp, #50] ; 0x32 + 802b31a: f8bd 102c ldrh.w r1, [sp, #44] ; 0x2c + 802b31e: f8d8 0000 ldr.w r0, [r8] + 802b322: fb11 2103 smlabb r1, r1, r3, r2 + 802b326: f9bd 7034 ldrsh.w r7, [sp, #52] ; 0x34 + 802b32a: f9bd 6036 ldrsh.w r6, [sp, #54] ; 0x36 + 802b32e: eb01 0141 add.w r1, r1, r1, lsl #1 + 802b332: 440c add r4, r1 + 802b334: f8bd 1028 ldrh.w r1, [sp, #40] ; 0x28 + 802b338: 440a add r2, r1 + 802b33a: f8ad 2030 strh.w r2, [sp, #48] ; 0x30 + 802b33e: f8bd 202a ldrh.w r2, [sp, #42] ; 0x2a + 802b342: 4413 add r3, r2 + 802b344: f8ad 3032 strh.w r3, [sp, #50] ; 0x32 + 802b348: 6803 ldr r3, [r0, #0] + 802b34a: 6b9b ldr r3, [r3, #56] ; 0x38 + 802b34c: 4798 blx r3 + 802b34e: 2dff cmp r5, #255 ; 0xff + 802b350: d124 bne.n 802b39c <_ZN8touchgfx8LCD16bpp14blitCopyRGB888EPKhRKNS_4RectES5_h+0xbc> + 802b352: f010 0f01 tst.w r0, #1 + 802b356: f8d8 0000 ldr.w r0, [r8] + 802b35a: d022 beq.n 802b3a2 <_ZN8touchgfx8LCD16bpp14blitCopyRGB888EPKhRKNS_4RectES5_h+0xc2> + 802b35c: 2100 movs r1, #0 + 802b35e: f04f 0e01 mov.w lr, #1 + 802b362: f8d0 c000 ldr.w ip, [r0] + 802b366: b2b6 uxth r6, r6 + 802b368: f8cd e018 str.w lr, [sp, #24] + 802b36c: b2bf uxth r7, r7 + 802b36e: f8bd 3032 ldrh.w r3, [sp, #50] ; 0x32 + 802b372: f8bd 2030 ldrh.w r2, [sp, #48] ; 0x30 + 802b376: e9cd 1107 strd r1, r1, [sp, #28] + 802b37a: f8b9 e000 ldrh.w lr, [r9] + 802b37e: 9503 str r5, [sp, #12] + 802b380: 9601 str r6, [sp, #4] + 802b382: 9700 str r7, [sp, #0] + 802b384: e9cd 1e04 strd r1, lr, [sp, #16] + 802b388: f8bd 102c ldrh.w r1, [sp, #44] ; 0x2c + 802b38c: 9102 str r1, [sp, #8] + 802b38e: 4621 mov r1, r4 + 802b390: f8dc 5040 ldr.w r5, [ip, #64] ; 0x40 + 802b394: 47a8 blx r5 + 802b396: b00e add sp, #56 ; 0x38 + 802b398: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + 802b39c: f010 0f04 tst.w r0, #4 + 802b3a0: e7d9 b.n 802b356 <_ZN8touchgfx8LCD16bpp14blitCopyRGB888EPKhRKNS_4RectES5_h+0x76> + 802b3a2: 6803 ldr r3, [r0, #0] + 802b3a4: 6a9b ldr r3, [r3, #40] ; 0x28 + 802b3a6: 4798 blx r3 + 802b3a8: f8b9 3000 ldrh.w r3, [r9] + 802b3ac: f9bd 2032 ldrsh.w r2, [sp, #50] ; 0x32 + 802b3b0: ea4f 0e47 mov.w lr, r7, lsl #1 + 802b3b4: f9bd 1030 ldrsh.w r1, [sp, #48] ; 0x30 + 802b3b8: 435e muls r6, r3 + 802b3ba: f9bd c02c ldrsh.w ip, [sp, #44] ; 0x2c + 802b3be: 2dff cmp r5, #255 ; 0xff + 802b3c0: fb03 1202 mla r2, r3, r2, r1 + 802b3c4: ebac 0c07 sub.w ip, ip, r7 + 802b3c8: eba3 0707 sub.w r7, r3, r7 + 802b3cc: eb00 0042 add.w r0, r0, r2, lsl #1 + 802b3d0: eb0c 0c4c add.w ip, ip, ip, lsl #1 + 802b3d4: eb00 0646 add.w r6, r0, r6, lsl #1 + 802b3d8: ea4f 0747 mov.w r7, r7, lsl #1 + 802b3dc: d049 beq.n 802b472 <_ZN8touchgfx8LCD16bpp14blitCopyRGB888EPKhRKNS_4RectES5_h+0x192> + 802b3de: 43eb mvns r3, r5 + 802b3e0: fa1f f985 uxth.w r9, r5 + 802b3e4: b2db uxtb r3, r3 + 802b3e6: 42b0 cmp r0, r6 + 802b3e8: d266 bcs.n 802b4b8 <_ZN8touchgfx8LCD16bpp14blitCopyRGB888EPKhRKNS_4RectES5_h+0x1d8> + 802b3ea: eb00 0a0e add.w sl, r0, lr + 802b3ee: 4550 cmp r0, sl + 802b3f0: 4621 mov r1, r4 + 802b3f2: f104 0403 add.w r4, r4, #3 + 802b3f6: d25b bcs.n 802b4b0 <_ZN8touchgfx8LCD16bpp14blitCopyRGB888EPKhRKNS_4RectES5_h+0x1d0> + 802b3f8: 8802 ldrh r2, [r0, #0] + 802b3fa: f814 1c01 ldrb.w r1, [r4, #-1] + 802b3fe: ea4f 2822 mov.w r8, r2, asr #8 + 802b402: fb11 f109 smulbb r1, r1, r9 + 802b406: 10d5 asrs r5, r2, #3 + 802b408: f008 08f8 and.w r8, r8, #248 ; 0xf8 + 802b40c: 00d2 lsls r2, r2, #3 + 802b40e: f005 05fc and.w r5, r5, #252 ; 0xfc + 802b412: ea48 1858 orr.w r8, r8, r8, lsr #5 + 802b416: ea45 1595 orr.w r5, r5, r5, lsr #6 + 802b41a: fb08 1803 mla r8, r8, r3, r1 + 802b41e: f814 1c02 ldrb.w r1, [r4, #-2] + 802b422: b2d2 uxtb r2, r2 + 802b424: fb11 f109 smulbb r1, r1, r9 + 802b428: fa1f f888 uxth.w r8, r8 + 802b42c: ea42 1252 orr.w r2, r2, r2, lsr #5 + 802b430: fb05 1503 mla r5, r5, r3, r1 + 802b434: f814 1c03 ldrb.w r1, [r4, #-3] + 802b438: fb11 f109 smulbb r1, r1, r9 + 802b43c: b2ad uxth r5, r5 + 802b43e: fb02 1203 mla r2, r2, r3, r1 + 802b442: f108 0101 add.w r1, r8, #1 + 802b446: b292 uxth r2, r2 + 802b448: eb01 2818 add.w r8, r1, r8, lsr #8 + 802b44c: 1c51 adds r1, r2, #1 + 802b44e: f408 4878 and.w r8, r8, #63488 ; 0xf800 + 802b452: eb01 2212 add.w r2, r1, r2, lsr #8 + 802b456: 1c69 adds r1, r5, #1 + 802b458: eb01 2515 add.w r5, r1, r5, lsr #8 + 802b45c: f3c2 22c4 ubfx r2, r2, #11, #5 + 802b460: 096d lsrs r5, r5, #5 + 802b462: ea42 0208 orr.w r2, r2, r8 + 802b466: f405 65fc and.w r5, r5, #2016 ; 0x7e0 + 802b46a: 432a orrs r2, r5 + 802b46c: f820 2b02 strh.w r2, [r0], #2 + 802b470: e7bd b.n 802b3ee <_ZN8touchgfx8LCD16bpp14blitCopyRGB888EPKhRKNS_4RectES5_h+0x10e> + 802b472: 4a14 ldr r2, [pc, #80] ; (802b4c4 <_ZN8touchgfx8LCD16bpp14blitCopyRGB888EPKhRKNS_4RectES5_h+0x1e4>) + 802b474: 42b0 cmp r0, r6 + 802b476: d21f bcs.n 802b4b8 <_ZN8touchgfx8LCD16bpp14blitCopyRGB888EPKhRKNS_4RectES5_h+0x1d8> + 802b478: eb00 050e add.w r5, r0, lr + 802b47c: 42a8 cmp r0, r5 + 802b47e: 4621 mov r1, r4 + 802b480: f104 0403 add.w r4, r4, #3 + 802b484: d210 bcs.n 802b4a8 <_ZN8touchgfx8LCD16bpp14blitCopyRGB888EPKhRKNS_4RectES5_h+0x1c8> + 802b486: f814 3c02 ldrb.w r3, [r4, #-2] + 802b48a: f814 1c01 ldrb.w r1, [r4, #-1] + 802b48e: 00db lsls r3, r3, #3 + 802b490: ea02 2101 and.w r1, r2, r1, lsl #8 + 802b494: f403 63fc and.w r3, r3, #2016 ; 0x7e0 + 802b498: 430b orrs r3, r1 + 802b49a: f814 1c03 ldrb.w r1, [r4, #-3] + 802b49e: ea43 03d1 orr.w r3, r3, r1, lsr #3 + 802b4a2: f820 3b02 strh.w r3, [r0], #2 + 802b4a6: e7e9 b.n 802b47c <_ZN8touchgfx8LCD16bpp14blitCopyRGB888EPKhRKNS_4RectES5_h+0x19c> + 802b4a8: 4438 add r0, r7 + 802b4aa: eb01 040c add.w r4, r1, ip + 802b4ae: e7e1 b.n 802b474 <_ZN8touchgfx8LCD16bpp14blitCopyRGB888EPKhRKNS_4RectES5_h+0x194> + 802b4b0: 4438 add r0, r7 + 802b4b2: eb01 040c add.w r4, r1, ip + 802b4b6: e796 b.n 802b3e6 <_ZN8touchgfx8LCD16bpp14blitCopyRGB888EPKhRKNS_4RectES5_h+0x106> + 802b4b8: 4b03 ldr r3, [pc, #12] ; (802b4c8 <_ZN8touchgfx8LCD16bpp14blitCopyRGB888EPKhRKNS_4RectES5_h+0x1e8>) + 802b4ba: 6818 ldr r0, [r3, #0] + 802b4bc: 6803 ldr r3, [r0, #0] + 802b4be: 6adb ldr r3, [r3, #44] ; 0x2c + 802b4c0: 4798 blx r3 + 802b4c2: e768 b.n 802b396 <_ZN8touchgfx8LCD16bpp14blitCopyRGB888EPKhRKNS_4RectES5_h+0xb6> + 802b4c4: fffff800 .word 0xfffff800 + 802b4c8: 2001e734 .word 0x2001e734 + 802b4cc: 2001e72e .word 0x2001e72e + +0802b4d0 <_ZN8touchgfx8LCD16bpp8blitCopyEPKhNS_6Bitmap12BitmapFormatERKNS_4RectES7_hb>: + 802b4d0: b4f0 push {r4, r5, r6, r7} + 802b4d2: 4616 mov r6, r2 + 802b4d4: 461c mov r4, r3 + 802b4d6: 460d mov r5, r1 + 802b4d8: 9a04 ldr r2, [sp, #16] + 802b4da: 2e01 cmp r6, #1 + 802b4dc: f89d 3014 ldrb.w r3, [sp, #20] + 802b4e0: f89d 7018 ldrb.w r7, [sp, #24] + 802b4e4: d012 beq.n 802b50c <_ZN8touchgfx8LCD16bpp8blitCopyEPKhNS_6Bitmap12BitmapFormatERKNS_4RectES7_hb+0x3c> + 802b4e6: d303 bcc.n 802b4f0 <_ZN8touchgfx8LCD16bpp8blitCopyEPKhNS_6Bitmap12BitmapFormatERKNS_4RectES7_hb+0x20> + 802b4e8: 2e02 cmp r6, #2 + 802b4ea: d00a beq.n 802b502 <_ZN8touchgfx8LCD16bpp8blitCopyEPKhNS_6Bitmap12BitmapFormatERKNS_4RectES7_hb+0x32> + 802b4ec: bcf0 pop {r4, r5, r6, r7} + 802b4ee: 4770 bx lr + 802b4f0: 6805 ldr r5, [r0, #0] + 802b4f2: e9cd 3704 strd r3, r7, [sp, #16] + 802b4f6: 68ed ldr r5, [r5, #12] + 802b4f8: 4613 mov r3, r2 + 802b4fa: 4622 mov r2, r4 + 802b4fc: 46ac mov ip, r5 + 802b4fe: bcf0 pop {r4, r5, r6, r7} + 802b500: 4760 bx ip + 802b502: 4621 mov r1, r4 + 802b504: 4628 mov r0, r5 + 802b506: bcf0 pop {r4, r5, r6, r7} + 802b508: f7ff bd94 b.w 802b034 <_ZN8touchgfx8LCD16bpp16blitCopyARGB8888EPKmRKNS_4RectES5_h> + 802b50c: 4621 mov r1, r4 + 802b50e: 4628 mov r0, r5 + 802b510: bcf0 pop {r4, r5, r6, r7} + 802b512: f7ff bee5 b.w 802b2e0 <_ZN8touchgfx8LCD16bpp14blitCopyRGB888EPKhRKNS_4RectES5_h> + ... + +0802b518 <_ZN8touchgfx8LCD16bpp19blitCopyL8_ARGB8888EPKhS2_RKNS_4RectES5_h>: + 802b518: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 802b51c: b093 sub sp, #76 ; 0x4c + 802b51e: 4681 mov r9, r0 + 802b520: 4688 mov r8, r1 + 802b522: 6810 ldr r0, [r2, #0] + 802b524: 6851 ldr r1, [r2, #4] + 802b526: ac0e add r4, sp, #56 ; 0x38 + 802b528: 4616 mov r6, r2 + 802b52a: f89d a070 ldrb.w sl, [sp, #112] ; 0x70 + 802b52e: 4f6b ldr r7, [pc, #428] ; (802b6dc <_ZN8touchgfx8LCD16bpp19blitCopyL8_ARGB8888EPKhS2_RKNS_4RectES5_h+0x1c4>) + 802b530: c403 stmia r4!, {r0, r1} + 802b532: 6818 ldr r0, [r3, #0] + 802b534: ac10 add r4, sp, #64 ; 0x40 + 802b536: 6859 ldr r1, [r3, #4] + 802b538: c403 stmia r4!, {r0, r1} + 802b53a: a80e add r0, sp, #56 ; 0x38 + 802b53c: f7f7 ffbc bl 80234b8 <_ZN8touchgfx21DisplayTransformation29transformDisplayToFrameBufferERNS_4RectE> + 802b540: 4631 mov r1, r6 + 802b542: a810 add r0, sp, #64 ; 0x40 + 802b544: 4e66 ldr r6, [pc, #408] ; (802b6e0 <_ZN8touchgfx8LCD16bpp19blitCopyL8_ARGB8888EPKhS2_RKNS_4RectES5_h+0x1c8>) + 802b546: f7f7 ffdf bl 8023508 <_ZN8touchgfx21DisplayTransformation29transformDisplayToFrameBufferERNS_4RectERKS1_> + 802b54a: f9bd 2040 ldrsh.w r2, [sp, #64] ; 0x40 + 802b54e: f9bd 3042 ldrsh.w r3, [sp, #66] ; 0x42 + 802b552: f8bd 103c ldrh.w r1, [sp, #60] ; 0x3c + 802b556: 6830 ldr r0, [r6, #0] + 802b558: fb11 2103 smlabb r1, r1, r3, r2 + 802b55c: f9bd 4044 ldrsh.w r4, [sp, #68] ; 0x44 + 802b560: f9bd 5046 ldrsh.w r5, [sp, #70] ; 0x46 + 802b564: 4489 add r9, r1 + 802b566: f8bd 1038 ldrh.w r1, [sp, #56] ; 0x38 + 802b56a: 440a add r2, r1 + 802b56c: f8ad 2040 strh.w r2, [sp, #64] ; 0x40 + 802b570: f8bd 203a ldrh.w r2, [sp, #58] ; 0x3a + 802b574: 4413 add r3, r2 + 802b576: f8ad 3042 strh.w r3, [sp, #66] ; 0x42 + 802b57a: 6803 ldr r3, [r0, #0] + 802b57c: 6b9b ldr r3, [r3, #56] ; 0x38 + 802b57e: 4798 blx r3 + 802b580: f010 0f80 tst.w r0, #128 ; 0x80 + 802b584: 6830 ldr r0, [r6, #0] + 802b586: d01d beq.n 802b5c4 <_ZN8touchgfx8LCD16bpp19blitCopyL8_ARGB8888EPKhS2_RKNS_4RectES5_h+0xac> + 802b588: 2200 movs r2, #0 + 802b58a: 6801 ldr r1, [r0, #0] + 802b58c: b2a4 uxth r4, r4 + 802b58e: f8bd 3040 ldrh.w r3, [sp, #64] ; 0x40 + 802b592: b2ad uxth r5, r5 + 802b594: e9cd 2208 strd r2, r2, [sp, #32] + 802b598: 220b movs r2, #11 + 802b59a: 9207 str r2, [sp, #28] + 802b59c: 883a ldrh r2, [r7, #0] + 802b59e: 9502 str r5, [sp, #8] + 802b5a0: 9206 str r2, [sp, #24] + 802b5a2: 2201 movs r2, #1 + 802b5a4: 9401 str r4, [sp, #4] + 802b5a6: e9cd a204 strd sl, r2, [sp, #16] + 802b5aa: f8bd 203c ldrh.w r2, [sp, #60] ; 0x3c + 802b5ae: 9203 str r2, [sp, #12] + 802b5b0: f8bd 2042 ldrh.w r2, [sp, #66] ; 0x42 + 802b5b4: 9200 str r2, [sp, #0] + 802b5b6: 4642 mov r2, r8 + 802b5b8: 6bcc ldr r4, [r1, #60] ; 0x3c + 802b5ba: 4649 mov r1, r9 + 802b5bc: 47a0 blx r4 + 802b5be: b013 add sp, #76 ; 0x4c + 802b5c0: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 802b5c4: 6803 ldr r3, [r0, #0] + 802b5c6: 6a9b ldr r3, [r3, #40] ; 0x28 + 802b5c8: 4798 blx r3 + 802b5ca: 883b ldrh r3, [r7, #0] + 802b5cc: f9bd 2042 ldrsh.w r2, [sp, #66] ; 0x42 + 802b5d0: f04f 0e04 mov.w lr, #4 + 802b5d4: f9bd 1040 ldrsh.w r1, [sp, #64] ; 0x40 + 802b5d8: 435d muls r5, r3 + 802b5da: fb03 1202 mla r2, r3, r2, r1 + 802b5de: eb00 0042 add.w r0, r0, r2, lsl #1 + 802b5e2: eb00 0245 add.w r2, r0, r5, lsl #1 + 802b5e6: 920c str r2, [sp, #48] ; 0x30 + 802b5e8: f9bd 203c ldrsh.w r2, [sp, #60] ; 0x3c + 802b5ec: 1b12 subs r2, r2, r4 + 802b5ee: 920d str r2, [sp, #52] ; 0x34 + 802b5f0: 0062 lsls r2, r4, #1 + 802b5f2: 1b1c subs r4, r3, r4 + 802b5f4: 920a str r2, [sp, #40] ; 0x28 + 802b5f6: 0063 lsls r3, r4, #1 + 802b5f8: 930b str r3, [sp, #44] ; 0x2c + 802b5fa: 9b0c ldr r3, [sp, #48] ; 0x30 + 802b5fc: 4298 cmp r0, r3 + 802b5fe: d266 bcs.n 802b6ce <_ZN8touchgfx8LCD16bpp19blitCopyL8_ARGB8888EPKhS2_RKNS_4RectES5_h+0x1b6> + 802b600: 9b0a ldr r3, [sp, #40] ; 0x28 + 802b602: eb00 0b03 add.w fp, r0, r3 + 802b606: 4558 cmp r0, fp + 802b608: d25c bcs.n 802b6c4 <_ZN8touchgfx8LCD16bpp19blitCopyL8_ARGB8888EPKhS2_RKNS_4RectES5_h+0x1ac> + 802b60a: f819 3b01 ldrb.w r3, [r9], #1 + 802b60e: fb1e e303 smlabb r3, lr, r3, lr + 802b612: f858 2003 ldr.w r2, [r8, r3] + 802b616: 0e11 lsrs r1, r2, #24 + 802b618: d012 beq.n 802b640 <_ZN8touchgfx8LCD16bpp19blitCopyL8_ARGB8888EPKhS2_RKNS_4RectES5_h+0x128> + 802b61a: 29ff cmp r1, #255 ; 0xff + 802b61c: ea4f 2712 mov.w r7, r2, lsr #8 + 802b620: d110 bne.n 802b644 <_ZN8touchgfx8LCD16bpp19blitCopyL8_ARGB8888EPKhS2_RKNS_4RectES5_h+0x12c> + 802b622: f1ba 0fff cmp.w sl, #255 ; 0xff + 802b626: d10d bne.n 802b644 <_ZN8touchgfx8LCD16bpp19blitCopyL8_ARGB8888EPKhS2_RKNS_4RectES5_h+0x12c> + 802b628: 0953 lsrs r3, r2, #5 + 802b62a: f427 67ff bic.w r7, r7, #2040 ; 0x7f8 + 802b62e: f3c2 02c4 ubfx r2, r2, #3, #5 + 802b632: f403 63fc and.w r3, r3, #2016 ; 0x7e0 + 802b636: f027 0707 bic.w r7, r7, #7 + 802b63a: 431f orrs r7, r3 + 802b63c: 433a orrs r2, r7 + 802b63e: 8002 strh r2, [r0, #0] + 802b640: 3002 adds r0, #2 + 802b642: e7e0 b.n 802b606 <_ZN8touchgfx8LCD16bpp19blitCopyL8_ARGB8888EPKhS2_RKNS_4RectES5_h+0xee> + 802b644: fb0a f101 mul.w r1, sl, r1 + 802b648: 8806 ldrh r6, [r0, #0] + 802b64a: f3c2 4c07 ubfx ip, r2, #16, #8 + 802b64e: b2d2 uxtb r2, r2 + 802b650: 1c4b adds r3, r1, #1 + 802b652: 1235 asrs r5, r6, #8 + 802b654: 10f4 asrs r4, r6, #3 + 802b656: eb03 2321 add.w r3, r3, r1, asr #8 + 802b65a: f005 05f8 and.w r5, r5, #248 ; 0xf8 + 802b65e: 00f6 lsls r6, r6, #3 + 802b660: f004 04fc and.w r4, r4, #252 ; 0xfc + 802b664: 121b asrs r3, r3, #8 + 802b666: b2f6 uxtb r6, r6 + 802b668: b299 uxth r1, r3 + 802b66a: 43db mvns r3, r3 + 802b66c: ea45 1555 orr.w r5, r5, r5, lsr #5 + 802b670: fb1c fc01 smulbb ip, ip, r1 + 802b674: b2db uxtb r3, r3 + 802b676: fb12 f201 smulbb r2, r2, r1 + 802b67a: ea46 1656 orr.w r6, r6, r6, lsr #5 + 802b67e: fb05 c503 mla r5, r5, r3, ip + 802b682: b2ff uxtb r7, r7 + 802b684: fb06 2203 mla r2, r6, r3, r2 + 802b688: ea44 1494 orr.w r4, r4, r4, lsr #6 + 802b68c: fb17 f701 smulbb r7, r7, r1 + 802b690: b2ad uxth r5, r5 + 802b692: b292 uxth r2, r2 + 802b694: fb04 7403 mla r4, r4, r3, r7 + 802b698: f105 0c01 add.w ip, r5, #1 + 802b69c: 1c57 adds r7, r2, #1 + 802b69e: eb0c 2515 add.w r5, ip, r5, lsr #8 + 802b6a2: eb07 2712 add.w r7, r7, r2, lsr #8 + 802b6a6: b2a4 uxth r4, r4 + 802b6a8: f405 4578 and.w r5, r5, #63488 ; 0xf800 + 802b6ac: f3c7 27c4 ubfx r7, r7, #11, #5 + 802b6b0: 433d orrs r5, r7 + 802b6b2: 1c67 adds r7, r4, #1 + 802b6b4: eb07 2414 add.w r4, r7, r4, lsr #8 + 802b6b8: 0964 lsrs r4, r4, #5 + 802b6ba: f404 64fc and.w r4, r4, #2016 ; 0x7e0 + 802b6be: 4325 orrs r5, r4 + 802b6c0: 8005 strh r5, [r0, #0] + 802b6c2: e7bd b.n 802b640 <_ZN8touchgfx8LCD16bpp19blitCopyL8_ARGB8888EPKhS2_RKNS_4RectES5_h+0x128> + 802b6c4: 9b0b ldr r3, [sp, #44] ; 0x2c + 802b6c6: 4418 add r0, r3 + 802b6c8: 9b0d ldr r3, [sp, #52] ; 0x34 + 802b6ca: 4499 add r9, r3 + 802b6cc: e795 b.n 802b5fa <_ZN8touchgfx8LCD16bpp19blitCopyL8_ARGB8888EPKhS2_RKNS_4RectES5_h+0xe2> + 802b6ce: 4b04 ldr r3, [pc, #16] ; (802b6e0 <_ZN8touchgfx8LCD16bpp19blitCopyL8_ARGB8888EPKhS2_RKNS_4RectES5_h+0x1c8>) + 802b6d0: 6818 ldr r0, [r3, #0] + 802b6d2: 6803 ldr r3, [r0, #0] + 802b6d4: 6adb ldr r3, [r3, #44] ; 0x2c + 802b6d6: 4798 blx r3 + 802b6d8: e771 b.n 802b5be <_ZN8touchgfx8LCD16bpp19blitCopyL8_ARGB8888EPKhS2_RKNS_4RectES5_h+0xa6> + 802b6da: bf00 nop + 802b6dc: 2001e72e .word 0x2001e72e + 802b6e0: 2001e734 .word 0x2001e734 + +0802b6e4 <_ZN8touchgfx8LCD16bpp17blitCopyL8_RGB565EPKhS2_RKNS_4RectES5_h>: + 802b6e4: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 802b6e8: b087 sub sp, #28 + 802b6ea: 4680 mov r8, r0 + 802b6ec: 460d mov r5, r1 + 802b6ee: 4614 mov r4, r2 + 802b6f0: f89d 6040 ldrb.w r6, [sp, #64] ; 0x40 + 802b6f4: 2e00 cmp r6, #0 + 802b6f6: f000 80b9 beq.w 802b86c <_ZN8touchgfx8LCD16bpp17blitCopyL8_RGB565EPKhS2_RKNS_4RectES5_h+0x188> + 802b6fa: 6810 ldr r0, [r2, #0] + 802b6fc: af02 add r7, sp, #8 + 802b6fe: 6851 ldr r1, [r2, #4] + 802b700: c703 stmia r7!, {r0, r1} + 802b702: 6818 ldr r0, [r3, #0] + 802b704: af04 add r7, sp, #16 + 802b706: 6859 ldr r1, [r3, #4] + 802b708: c703 stmia r7!, {r0, r1} + 802b70a: a802 add r0, sp, #8 + 802b70c: f7f7 fed4 bl 80234b8 <_ZN8touchgfx21DisplayTransformation29transformDisplayToFrameBufferERNS_4RectE> + 802b710: 4621 mov r1, r4 + 802b712: a804 add r0, sp, #16 + 802b714: f7f7 fef8 bl 8023508 <_ZN8touchgfx21DisplayTransformation29transformDisplayToFrameBufferERNS_4RectERKS1_> + 802b718: f9bd 2010 ldrsh.w r2, [sp, #16] + 802b71c: f9bd 3012 ldrsh.w r3, [sp, #18] + 802b720: f8bd 400c ldrh.w r4, [sp, #12] + 802b724: f9bd 7016 ldrsh.w r7, [sp, #22] + 802b728: fb14 2103 smlabb r1, r4, r3, r2 + 802b72c: eb08 0401 add.w r4, r8, r1 + 802b730: f8bd 1008 ldrh.w r1, [sp, #8] + 802b734: f9bd 8014 ldrsh.w r8, [sp, #20] + 802b738: 440a add r2, r1 + 802b73a: ea4f 0a48 mov.w sl, r8, lsl #1 + 802b73e: f8ad 2010 strh.w r2, [sp, #16] + 802b742: f8bd 200a ldrh.w r2, [sp, #10] + 802b746: 4413 add r3, r2 + 802b748: f8ad 3012 strh.w r3, [sp, #18] + 802b74c: 4b49 ldr r3, [pc, #292] ; (802b874 <_ZN8touchgfx8LCD16bpp17blitCopyL8_RGB565EPKhS2_RKNS_4RectES5_h+0x190>) + 802b74e: 6818 ldr r0, [r3, #0] + 802b750: 6803 ldr r3, [r0, #0] + 802b752: 6a9b ldr r3, [r3, #40] ; 0x28 + 802b754: 4798 blx r3 + 802b756: 4b48 ldr r3, [pc, #288] ; (802b878 <_ZN8touchgfx8LCD16bpp17blitCopyL8_RGB565EPKhS2_RKNS_4RectES5_h+0x194>) + 802b758: f9bd 1012 ldrsh.w r1, [sp, #18] + 802b75c: 2eff cmp r6, #255 ; 0xff + 802b75e: 881a ldrh r2, [r3, #0] + 802b760: f9bd c010 ldrsh.w ip, [sp, #16] + 802b764: fb02 c101 mla r1, r2, r1, ip + 802b768: fb02 f207 mul.w r2, r2, r7 + 802b76c: eb00 0041 add.w r0, r0, r1, lsl #1 + 802b770: f105 0104 add.w r1, r5, #4 + 802b774: 461d mov r5, r3 + 802b776: d05a beq.n 802b82e <_ZN8touchgfx8LCD16bpp17blitCopyL8_RGB565EPKhS2_RKNS_4RectES5_h+0x14a> + 802b778: f1c6 0eff rsb lr, r6, #255 ; 0xff + 802b77c: eb00 0242 add.w r2, r0, r2, lsl #1 + 802b780: b2b6 uxth r6, r6 + 802b782: 9301 str r3, [sp, #4] + 802b784: fa1f fe8e uxth.w lr, lr + 802b788: 4282 cmp r2, r0 + 802b78a: d96a bls.n 802b862 <_ZN8touchgfx8LCD16bpp17blitCopyL8_RGB565EPKhS2_RKNS_4RectES5_h+0x17e> + 802b78c: eb00 0b0a add.w fp, r0, sl + 802b790: 4583 cmp fp, r0 + 802b792: d940 bls.n 802b816 <_ZN8touchgfx8LCD16bpp17blitCopyL8_RGB565EPKhS2_RKNS_4RectES5_h+0x132> + 802b794: 8805 ldrh r5, [r0, #0] + 802b796: f814 3b01 ldrb.w r3, [r4], #1 + 802b79a: 122f asrs r7, r5, #8 + 802b79c: f831 3013 ldrh.w r3, [r1, r3, lsl #1] + 802b7a0: ea4f 09e5 mov.w r9, r5, asr #3 + 802b7a4: f007 07f8 and.w r7, r7, #248 ; 0xf8 + 802b7a8: 00ed lsls r5, r5, #3 + 802b7aa: ea4f 2c23 mov.w ip, r3, asr #8 + 802b7ae: f009 09fc and.w r9, r9, #252 ; 0xfc + 802b7b2: fb17 f70e smulbb r7, r7, lr + 802b7b6: b2ed uxtb r5, r5 + 802b7b8: fb19 f90e smulbb r9, r9, lr + 802b7bc: f00c 0cf8 and.w ip, ip, #248 ; 0xf8 + 802b7c0: fb15 f50e smulbb r5, r5, lr + 802b7c4: fb0c 7c06 mla ip, ip, r6, r7 + 802b7c8: 10df asrs r7, r3, #3 + 802b7ca: 00db lsls r3, r3, #3 + 802b7cc: fa1f fc8c uxth.w ip, ip + 802b7d0: f007 07fc and.w r7, r7, #252 ; 0xfc + 802b7d4: b2db uxtb r3, r3 + 802b7d6: fb07 9706 mla r7, r7, r6, r9 + 802b7da: f10c 0901 add.w r9, ip, #1 + 802b7de: fb03 5306 mla r3, r3, r6, r5 + 802b7e2: eb09 2c1c add.w ip, r9, ip, lsr #8 + 802b7e6: b29b uxth r3, r3 + 802b7e8: f40c 4978 and.w r9, ip, #63488 ; 0xf800 + 802b7ec: b2bf uxth r7, r7 + 802b7ee: f103 0c01 add.w ip, r3, #1 + 802b7f2: eb0c 2c13 add.w ip, ip, r3, lsr #8 + 802b7f6: f3cc 2cc4 ubfx ip, ip, #11, #5 + 802b7fa: ea4c 0c09 orr.w ip, ip, r9 + 802b7fe: f107 0901 add.w r9, r7, #1 + 802b802: eb09 2717 add.w r7, r9, r7, lsr #8 + 802b806: 097f lsrs r7, r7, #5 + 802b808: f407 67fc and.w r7, r7, #2016 ; 0x7e0 + 802b80c: ea4c 0c07 orr.w ip, ip, r7 + 802b810: f820 cb02 strh.w ip, [r0], #2 + 802b814: e7bc b.n 802b790 <_ZN8touchgfx8LCD16bpp17blitCopyL8_RGB565EPKhS2_RKNS_4RectES5_h+0xac> + 802b816: 9b01 ldr r3, [sp, #4] + 802b818: 881b ldrh r3, [r3, #0] + 802b81a: eba3 0308 sub.w r3, r3, r8 + 802b81e: eb00 0043 add.w r0, r0, r3, lsl #1 + 802b822: f9bd 300c ldrsh.w r3, [sp, #12] + 802b826: eba3 0308 sub.w r3, r3, r8 + 802b82a: 441c add r4, r3 + 802b82c: e7ac b.n 802b788 <_ZN8touchgfx8LCD16bpp17blitCopyL8_RGB565EPKhS2_RKNS_4RectES5_h+0xa4> + 802b82e: eb00 0242 add.w r2, r0, r2, lsl #1 + 802b832: 4282 cmp r2, r0 + 802b834: d915 bls.n 802b862 <_ZN8touchgfx8LCD16bpp17blitCopyL8_RGB565EPKhS2_RKNS_4RectES5_h+0x17e> + 802b836: eb00 060a add.w r6, r0, sl + 802b83a: 4286 cmp r6, r0 + 802b83c: d906 bls.n 802b84c <_ZN8touchgfx8LCD16bpp17blitCopyL8_RGB565EPKhS2_RKNS_4RectES5_h+0x168> + 802b83e: f814 3b01 ldrb.w r3, [r4], #1 + 802b842: f831 3013 ldrh.w r3, [r1, r3, lsl #1] + 802b846: f820 3b02 strh.w r3, [r0], #2 + 802b84a: e7f6 b.n 802b83a <_ZN8touchgfx8LCD16bpp17blitCopyL8_RGB565EPKhS2_RKNS_4RectES5_h+0x156> + 802b84c: 882b ldrh r3, [r5, #0] + 802b84e: eba3 0308 sub.w r3, r3, r8 + 802b852: eb00 0043 add.w r0, r0, r3, lsl #1 + 802b856: f9bd 300c ldrsh.w r3, [sp, #12] + 802b85a: eba3 0308 sub.w r3, r3, r8 + 802b85e: 441c add r4, r3 + 802b860: e7e7 b.n 802b832 <_ZN8touchgfx8LCD16bpp17blitCopyL8_RGB565EPKhS2_RKNS_4RectES5_h+0x14e> + 802b862: 4b04 ldr r3, [pc, #16] ; (802b874 <_ZN8touchgfx8LCD16bpp17blitCopyL8_RGB565EPKhS2_RKNS_4RectES5_h+0x190>) + 802b864: 6818 ldr r0, [r3, #0] + 802b866: 6803 ldr r3, [r0, #0] + 802b868: 6adb ldr r3, [r3, #44] ; 0x2c + 802b86a: 4798 blx r3 + 802b86c: b007 add sp, #28 + 802b86e: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 802b872: bf00 nop + 802b874: 2001e734 .word 0x2001e734 + 802b878: 2001e72e .word 0x2001e72e + +0802b87c <_ZN8touchgfx8LCD16bpp17blitCopyL8_RGB888EPKhS2_RKNS_4RectES5_h>: + 802b87c: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 802b880: b091 sub sp, #68 ; 0x44 + 802b882: 4680 mov r8, r0 + 802b884: 460f mov r7, r1 + 802b886: 4614 mov r4, r2 + 802b888: f89d 5068 ldrb.w r5, [sp, #104] ; 0x68 + 802b88c: 2d00 cmp r5, #0 + 802b88e: d051 beq.n 802b934 <_ZN8touchgfx8LCD16bpp17blitCopyL8_RGB888EPKhS2_RKNS_4RectES5_h+0xb8> + 802b890: 6810 ldr r0, [r2, #0] + 802b892: ae0c add r6, sp, #48 ; 0x30 + 802b894: 6851 ldr r1, [r2, #4] + 802b896: f8df 9200 ldr.w r9, [pc, #512] ; 802ba98 <_ZN8touchgfx8LCD16bpp17blitCopyL8_RGB888EPKhS2_RKNS_4RectES5_h+0x21c> + 802b89a: c603 stmia r6!, {r0, r1} + 802b89c: 6818 ldr r0, [r3, #0] + 802b89e: ae0e add r6, sp, #56 ; 0x38 + 802b8a0: 6859 ldr r1, [r3, #4] + 802b8a2: c603 stmia r6!, {r0, r1} + 802b8a4: a80c add r0, sp, #48 ; 0x30 + 802b8a6: f7f7 fe07 bl 80234b8 <_ZN8touchgfx21DisplayTransformation29transformDisplayToFrameBufferERNS_4RectE> + 802b8aa: 4621 mov r1, r4 + 802b8ac: a80e add r0, sp, #56 ; 0x38 + 802b8ae: f7f7 fe2b bl 8023508 <_ZN8touchgfx21DisplayTransformation29transformDisplayToFrameBufferERNS_4RectERKS1_> + 802b8b2: f9bd 2038 ldrsh.w r2, [sp, #56] ; 0x38 + 802b8b6: f9bd 303a ldrsh.w r3, [sp, #58] ; 0x3a + 802b8ba: f8bd 1034 ldrh.w r1, [sp, #52] ; 0x34 + 802b8be: f8d9 0000 ldr.w r0, [r9] + 802b8c2: fb11 2103 smlabb r1, r1, r3, r2 + 802b8c6: f9bd 603c ldrsh.w r6, [sp, #60] ; 0x3c + 802b8ca: f9bd a03e ldrsh.w sl, [sp, #62] ; 0x3e + 802b8ce: eb08 0401 add.w r4, r8, r1 + 802b8d2: f8bd 1030 ldrh.w r1, [sp, #48] ; 0x30 + 802b8d6: f8df 81c4 ldr.w r8, [pc, #452] ; 802ba9c <_ZN8touchgfx8LCD16bpp17blitCopyL8_RGB888EPKhS2_RKNS_4RectES5_h+0x220> + 802b8da: 440a add r2, r1 + 802b8dc: f8ad 2038 strh.w r2, [sp, #56] ; 0x38 + 802b8e0: f8bd 2032 ldrh.w r2, [sp, #50] ; 0x32 + 802b8e4: 4413 add r3, r2 + 802b8e6: f8ad 303a strh.w r3, [sp, #58] ; 0x3a + 802b8ea: 6803 ldr r3, [r0, #0] + 802b8ec: 6b9b ldr r3, [r3, #56] ; 0x38 + 802b8ee: 4798 blx r3 + 802b8f0: f010 0f80 tst.w r0, #128 ; 0x80 + 802b8f4: f8d9 0000 ldr.w r0, [r9] + 802b8f8: d01f beq.n 802b93a <_ZN8touchgfx8LCD16bpp17blitCopyL8_RGB888EPKhS2_RKNS_4RectES5_h+0xbe> + 802b8fa: 2200 movs r2, #0 + 802b8fc: 6801 ldr r1, [r0, #0] + 802b8fe: b2b6 uxth r6, r6 + 802b900: f8bd 3038 ldrh.w r3, [sp, #56] ; 0x38 + 802b904: e9cd 2208 strd r2, r2, [sp, #32] + 802b908: 220b movs r2, #11 + 802b90a: 9207 str r2, [sp, #28] + 802b90c: f8b8 2000 ldrh.w r2, [r8] + 802b910: 9601 str r6, [sp, #4] + 802b912: 9206 str r2, [sp, #24] + 802b914: 2201 movs r2, #1 + 802b916: e9cd 5204 strd r5, r2, [sp, #16] + 802b91a: f8bd 2034 ldrh.w r2, [sp, #52] ; 0x34 + 802b91e: 9203 str r2, [sp, #12] + 802b920: fa1f f28a uxth.w r2, sl + 802b924: 9202 str r2, [sp, #8] + 802b926: f8bd 203a ldrh.w r2, [sp, #58] ; 0x3a + 802b92a: 9200 str r2, [sp, #0] + 802b92c: 463a mov r2, r7 + 802b92e: 6bcd ldr r5, [r1, #60] ; 0x3c + 802b930: 4621 mov r1, r4 + 802b932: 47a8 blx r5 + 802b934: b011 add sp, #68 ; 0x44 + 802b936: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 802b93a: 6803 ldr r3, [r0, #0] + 802b93c: ea4f 0946 mov.w r9, r6, lsl #1 + 802b940: 6a9b ldr r3, [r3, #40] ; 0x28 + 802b942: 4798 blx r3 + 802b944: f8b8 2000 ldrh.w r2, [r8] + 802b948: f9bd 303a ldrsh.w r3, [sp, #58] ; 0x3a + 802b94c: 2dff cmp r5, #255 ; 0xff + 802b94e: f9bd 1038 ldrsh.w r1, [sp, #56] ; 0x38 + 802b952: fb0a fa02 mul.w sl, sl, r2 + 802b956: fb02 1303 mla r3, r2, r3, r1 + 802b95a: eb00 0043 add.w r0, r0, r3, lsl #1 + 802b95e: d062 beq.n 802ba26 <_ZN8touchgfx8LCD16bpp17blitCopyL8_RGB888EPKhS2_RKNS_4RectES5_h+0x1aa> + 802b960: ea6f 0c05 mvn.w ip, r5 + 802b964: eb00 034a add.w r3, r0, sl, lsl #1 + 802b968: b2ad uxth r5, r5 + 802b96a: f8cd 802c str.w r8, [sp, #44] ; 0x2c + 802b96e: fa5f fc8c uxtb.w ip, ip + 802b972: 930a str r3, [sp, #40] ; 0x28 + 802b974: 9b0a ldr r3, [sp, #40] ; 0x28 + 802b976: 4298 cmp r0, r3 + 802b978: f080 8085 bcs.w 802ba86 <_ZN8touchgfx8LCD16bpp17blitCopyL8_RGB888EPKhS2_RKNS_4RectES5_h+0x20a> + 802b97c: eb00 0b09 add.w fp, r0, r9 + 802b980: 4558 cmp r0, fp + 802b982: d246 bcs.n 802ba12 <_ZN8touchgfx8LCD16bpp17blitCopyL8_RGB888EPKhS2_RKNS_4RectES5_h+0x196> + 802b984: f814 eb01 ldrb.w lr, [r4], #1 + 802b988: 2303 movs r3, #3 + 802b98a: 2204 movs r2, #4 + 802b98c: fb13 2e0e smlabb lr, r3, lr, r2 + 802b990: 8803 ldrh r3, [r0, #0] + 802b992: eb07 0a0e add.w sl, r7, lr + 802b996: 1219 asrs r1, r3, #8 + 802b998: 10da asrs r2, r3, #3 + 802b99a: f817 e00e ldrb.w lr, [r7, lr] + 802b99e: f89a 8002 ldrb.w r8, [sl, #2] + 802b9a2: f001 01f8 and.w r1, r1, #248 ; 0xf8 + 802b9a6: 00db lsls r3, r3, #3 + 802b9a8: f002 02fc and.w r2, r2, #252 ; 0xfc + 802b9ac: fb18 f805 smulbb r8, r8, r5 + 802b9b0: ea41 1151 orr.w r1, r1, r1, lsr #5 + 802b9b4: fb1e fe05 smulbb lr, lr, r5 + 802b9b8: b2db uxtb r3, r3 + 802b9ba: fb01 810c mla r1, r1, ip, r8 + 802b9be: f89a 8001 ldrb.w r8, [sl, #1] + 802b9c2: ea42 1292 orr.w r2, r2, r2, lsr #6 + 802b9c6: fb18 f805 smulbb r8, r8, r5 + 802b9ca: ea43 1353 orr.w r3, r3, r3, lsr #5 + 802b9ce: b289 uxth r1, r1 + 802b9d0: fb02 820c mla r2, r2, ip, r8 + 802b9d4: fb03 e30c mla r3, r3, ip, lr + 802b9d8: f101 0801 add.w r8, r1, #1 + 802b9dc: b292 uxth r2, r2 + 802b9de: b29b uxth r3, r3 + 802b9e0: eb08 2111 add.w r1, r8, r1, lsr #8 + 802b9e4: f102 0801 add.w r8, r2, #1 + 802b9e8: f103 0e01 add.w lr, r3, #1 + 802b9ec: eb08 2812 add.w r8, r8, r2, lsr #8 + 802b9f0: f401 4178 and.w r1, r1, #63488 ; 0xf800 + 802b9f4: eb0e 2e13 add.w lr, lr, r3, lsr #8 + 802b9f8: ea4f 1858 mov.w r8, r8, lsr #5 + 802b9fc: f3ce 2ec4 ubfx lr, lr, #11, #5 + 802ba00: f408 68fc and.w r8, r8, #2016 ; 0x7e0 + 802ba04: ea4e 0101 orr.w r1, lr, r1 + 802ba08: ea41 0108 orr.w r1, r1, r8 + 802ba0c: f820 1b02 strh.w r1, [r0], #2 + 802ba10: e7b6 b.n 802b980 <_ZN8touchgfx8LCD16bpp17blitCopyL8_RGB888EPKhS2_RKNS_4RectES5_h+0x104> + 802ba12: 9b0b ldr r3, [sp, #44] ; 0x2c + 802ba14: 881b ldrh r3, [r3, #0] + 802ba16: 1b9b subs r3, r3, r6 + 802ba18: eb00 0043 add.w r0, r0, r3, lsl #1 + 802ba1c: f9bd 3034 ldrsh.w r3, [sp, #52] ; 0x34 + 802ba20: 1b9b subs r3, r3, r6 + 802ba22: 441c add r4, r3 + 802ba24: e7a6 b.n 802b974 <_ZN8touchgfx8LCD16bpp17blitCopyL8_RGB888EPKhS2_RKNS_4RectES5_h+0xf8> + 802ba26: eb00 0a4a add.w sl, r0, sl, lsl #1 + 802ba2a: 2203 movs r2, #3 + 802ba2c: 2504 movs r5, #4 + 802ba2e: 4919 ldr r1, [pc, #100] ; (802ba94 <_ZN8touchgfx8LCD16bpp17blitCopyL8_RGB888EPKhS2_RKNS_4RectES5_h+0x218>) + 802ba30: 4550 cmp r0, sl + 802ba32: d228 bcs.n 802ba86 <_ZN8touchgfx8LCD16bpp17blitCopyL8_RGB888EPKhS2_RKNS_4RectES5_h+0x20a> + 802ba34: eb00 0c09 add.w ip, r0, r9 + 802ba38: 4560 cmp r0, ip + 802ba3a: 4623 mov r3, r4 + 802ba3c: d219 bcs.n 802ba72 <_ZN8touchgfx8LCD16bpp17blitCopyL8_RGB888EPKhS2_RKNS_4RectES5_h+0x1f6> + 802ba3e: f893 e000 ldrb.w lr, [r3] + 802ba42: 3401 adds r4, #1 + 802ba44: fb12 5e0e smlabb lr, r2, lr, r5 + 802ba48: eb07 0b0e add.w fp, r7, lr + 802ba4c: f817 e00e ldrb.w lr, [r7, lr] + 802ba50: f89b 3002 ldrb.w r3, [fp, #2] + 802ba54: f89b b001 ldrb.w fp, [fp, #1] + 802ba58: ea01 2303 and.w r3, r1, r3, lsl #8 + 802ba5c: ea4f 0bcb mov.w fp, fp, lsl #3 + 802ba60: f40b 6bfc and.w fp, fp, #2016 ; 0x7e0 + 802ba64: ea43 030b orr.w r3, r3, fp + 802ba68: ea43 03de orr.w r3, r3, lr, lsr #3 + 802ba6c: f820 3b02 strh.w r3, [r0], #2 + 802ba70: e7e2 b.n 802ba38 <_ZN8touchgfx8LCD16bpp17blitCopyL8_RGB888EPKhS2_RKNS_4RectES5_h+0x1bc> + 802ba72: f8b8 3000 ldrh.w r3, [r8] + 802ba76: 1b9b subs r3, r3, r6 + 802ba78: eb00 0043 add.w r0, r0, r3, lsl #1 + 802ba7c: f9bd 3034 ldrsh.w r3, [sp, #52] ; 0x34 + 802ba80: 1b9b subs r3, r3, r6 + 802ba82: 441c add r4, r3 + 802ba84: e7d4 b.n 802ba30 <_ZN8touchgfx8LCD16bpp17blitCopyL8_RGB888EPKhS2_RKNS_4RectES5_h+0x1b4> + 802ba86: 4b04 ldr r3, [pc, #16] ; (802ba98 <_ZN8touchgfx8LCD16bpp17blitCopyL8_RGB888EPKhS2_RKNS_4RectES5_h+0x21c>) + 802ba88: 6818 ldr r0, [r3, #0] + 802ba8a: 6803 ldr r3, [r0, #0] + 802ba8c: 6adb ldr r3, [r3, #44] ; 0x2c + 802ba8e: 4798 blx r3 + 802ba90: e750 b.n 802b934 <_ZN8touchgfx8LCD16bpp17blitCopyL8_RGB888EPKhS2_RKNS_4RectES5_h+0xb8> + 802ba92: bf00 nop + 802ba94: fffff800 .word 0xfffff800 + 802ba98: 2001e734 .word 0x2001e734 + 802ba9c: 2001e72e .word 0x2001e72e + +0802baa0 <_ZN8touchgfx8LCD16bpp10blitCopyL8EPKhS2_RKNS_4RectES5_h>: + 802baa0: b4f0 push {r4, r5, r6, r7} + 802baa2: 460c mov r4, r1 + 802baa4: 4611 mov r1, r2 + 802baa6: f89d 5014 ldrb.w r5, [sp, #20] + 802baaa: 461a mov r2, r3 + 802baac: 780f ldrb r7, [r1, #0] + 802baae: 9b04 ldr r3, [sp, #16] + 802bab0: 2f01 cmp r7, #1 + 802bab2: 784e ldrb r6, [r1, #1] + 802bab4: d036 beq.n 802bb24 <_ZN8touchgfx8LCD16bpp10blitCopyL8EPKhS2_RKNS_4RectES5_h+0x84> + 802bab6: d31e bcc.n 802baf6 <_ZN8touchgfx8LCD16bpp10blitCopyL8EPKhS2_RKNS_4RectES5_h+0x56> + 802bab8: 2f02 cmp r7, #2 + 802baba: d14a bne.n 802bb52 <_ZN8touchgfx8LCD16bpp10blitCopyL8EPKhS2_RKNS_4RectES5_h+0xb2> + 802babc: 2e03 cmp r6, #3 + 802babe: d848 bhi.n 802bb52 <_ZN8touchgfx8LCD16bpp10blitCopyL8EPKhS2_RKNS_4RectES5_h+0xb2> + 802bac0: e8df f006 tbb [pc, r6] + 802bac4: 16140702 .word 0x16140702 + 802bac8: 9504 str r5, [sp, #16] + 802baca: 4620 mov r0, r4 + 802bacc: bcf0 pop {r4, r5, r6, r7} + 802bace: f7ff be09 b.w 802b6e4 <_ZN8touchgfx8LCD16bpp17blitCopyL8_RGB565EPKhS2_RKNS_4RectES5_h> + 802bad2: 6f80 ldr r0, [r0, #120] ; 0x78 + 802bad4: 2800 cmp r0, #0 + 802bad6: d03c beq.n 802bb52 <_ZN8touchgfx8LCD16bpp10blitCopyL8EPKhS2_RKNS_4RectES5_h+0xb2> + 802bad8: 6806 ldr r6, [r0, #0] + 802bada: e9cd 3504 strd r3, r5, [sp, #16] + 802bade: 68b5 ldr r5, [r6, #8] + 802bae0: 4613 mov r3, r2 + 802bae2: 46ac mov ip, r5 + 802bae4: 460a mov r2, r1 + 802bae6: 4621 mov r1, r4 + 802bae8: bcf0 pop {r4, r5, r6, r7} + 802baea: 4760 bx ip + 802baec: 6fc0 ldr r0, [r0, #124] ; 0x7c + 802baee: e7f1 b.n 802bad4 <_ZN8touchgfx8LCD16bpp10blitCopyL8EPKhS2_RKNS_4RectES5_h+0x34> + 802baf0: f8d0 0080 ldr.w r0, [r0, #128] ; 0x80 + 802baf4: e7ee b.n 802bad4 <_ZN8touchgfx8LCD16bpp10blitCopyL8EPKhS2_RKNS_4RectES5_h+0x34> + 802baf6: 2e03 cmp r6, #3 + 802baf8: d82b bhi.n 802bb52 <_ZN8touchgfx8LCD16bpp10blitCopyL8EPKhS2_RKNS_4RectES5_h+0xb2> + 802bafa: e8df f006 tbb [pc, r6] + 802bafe: 0702 .short 0x0702 + 802bb00: 100e .short 0x100e + 802bb02: 9504 str r5, [sp, #16] + 802bb04: 4620 mov r0, r4 + 802bb06: bcf0 pop {r4, r5, r6, r7} + 802bb08: f7ff bd06 b.w 802b518 <_ZN8touchgfx8LCD16bpp19blitCopyL8_ARGB8888EPKhS2_RKNS_4RectES5_h> + 802bb0c: 6f80 ldr r0, [r0, #120] ; 0x78 + 802bb0e: b300 cbz r0, 802bb52 <_ZN8touchgfx8LCD16bpp10blitCopyL8EPKhS2_RKNS_4RectES5_h+0xb2> + 802bb10: 6806 ldr r6, [r0, #0] + 802bb12: e9cd 3504 strd r3, r5, [sp, #16] + 802bb16: 68f5 ldr r5, [r6, #12] + 802bb18: e7e2 b.n 802bae0 <_ZN8touchgfx8LCD16bpp10blitCopyL8EPKhS2_RKNS_4RectES5_h+0x40> + 802bb1a: 6fc0 ldr r0, [r0, #124] ; 0x7c + 802bb1c: e7f7 b.n 802bb0e <_ZN8touchgfx8LCD16bpp10blitCopyL8EPKhS2_RKNS_4RectES5_h+0x6e> + 802bb1e: f8d0 0080 ldr.w r0, [r0, #128] ; 0x80 + 802bb22: e7f4 b.n 802bb0e <_ZN8touchgfx8LCD16bpp10blitCopyL8EPKhS2_RKNS_4RectES5_h+0x6e> + 802bb24: 2e03 cmp r6, #3 + 802bb26: d814 bhi.n 802bb52 <_ZN8touchgfx8LCD16bpp10blitCopyL8EPKhS2_RKNS_4RectES5_h+0xb2> + 802bb28: e8df f006 tbb [pc, r6] + 802bb2c: 100e0702 .word 0x100e0702 + 802bb30: 9504 str r5, [sp, #16] + 802bb32: 4620 mov r0, r4 + 802bb34: bcf0 pop {r4, r5, r6, r7} + 802bb36: f7ff bea1 b.w 802b87c <_ZN8touchgfx8LCD16bpp17blitCopyL8_RGB888EPKhS2_RKNS_4RectES5_h> + 802bb3a: 6f80 ldr r0, [r0, #120] ; 0x78 + 802bb3c: b148 cbz r0, 802bb52 <_ZN8touchgfx8LCD16bpp10blitCopyL8EPKhS2_RKNS_4RectES5_h+0xb2> + 802bb3e: 6806 ldr r6, [r0, #0] + 802bb40: e9cd 3504 strd r3, r5, [sp, #16] + 802bb44: 6935 ldr r5, [r6, #16] + 802bb46: e7cb b.n 802bae0 <_ZN8touchgfx8LCD16bpp10blitCopyL8EPKhS2_RKNS_4RectES5_h+0x40> + 802bb48: 6fc0 ldr r0, [r0, #124] ; 0x7c + 802bb4a: e7f7 b.n 802bb3c <_ZN8touchgfx8LCD16bpp10blitCopyL8EPKhS2_RKNS_4RectES5_h+0x9c> + 802bb4c: f8d0 0080 ldr.w r0, [r0, #128] ; 0x80 + 802bb50: e7f4 b.n 802bb3c <_ZN8touchgfx8LCD16bpp10blitCopyL8EPKhS2_RKNS_4RectES5_h+0x9c> + 802bb52: bcf0 pop {r4, r5, r6, r7} + 802bb54: 4770 bx lr + ... + +0802bb58 <_ZN8touchgfx8LCD16bpp21blitCopyAlphaPerPixelEPKtPKhRKNS_4RectES7_h>: + 802bb58: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 802bb5c: b087 sub sp, #28 + 802bb5e: 4604 mov r4, r0 + 802bb60: 460e mov r6, r1 + 802bb62: 6810 ldr r0, [r2, #0] + 802bb64: 6851 ldr r1, [r2, #4] + 802bb66: ad02 add r5, sp, #8 + 802bb68: 4617 mov r7, r2 + 802bb6a: f89d a040 ldrb.w sl, [sp, #64] ; 0x40 + 802bb6e: f8df 9230 ldr.w r9, [pc, #560] ; 802bda0 <_ZN8touchgfx8LCD16bpp21blitCopyAlphaPerPixelEPKtPKhRKNS_4RectES7_h+0x248> + 802bb72: c503 stmia r5!, {r0, r1} + 802bb74: 6818 ldr r0, [r3, #0] + 802bb76: ad04 add r5, sp, #16 + 802bb78: 6859 ldr r1, [r3, #4] + 802bb7a: c503 stmia r5!, {r0, r1} + 802bb7c: a802 add r0, sp, #8 + 802bb7e: f7f7 fc9b bl 80234b8 <_ZN8touchgfx21DisplayTransformation29transformDisplayToFrameBufferERNS_4RectE> + 802bb82: 4639 mov r1, r7 + 802bb84: a804 add r0, sp, #16 + 802bb86: f7f7 fcbf bl 8023508 <_ZN8touchgfx21DisplayTransformation29transformDisplayToFrameBufferERNS_4RectERKS1_> + 802bb8a: f9bd 2010 ldrsh.w r2, [sp, #16] + 802bb8e: f9bd 3012 ldrsh.w r3, [sp, #18] + 802bb92: f8bd 100c ldrh.w r1, [sp, #12] + 802bb96: f9bd 8014 ldrsh.w r8, [sp, #20] + 802bb9a: fb11 2103 smlabb r1, r1, r3, r2 + 802bb9e: f9bd 5016 ldrsh.w r5, [sp, #22] + 802bba2: eb04 0441 add.w r4, r4, r1, lsl #1 + 802bba6: 440e add r6, r1 + 802bba8: f8bd 1008 ldrh.w r1, [sp, #8] + 802bbac: 440a add r2, r1 + 802bbae: f8ad 2010 strh.w r2, [sp, #16] + 802bbb2: f8bd 200a ldrh.w r2, [sp, #10] + 802bbb6: 4413 add r3, r2 + 802bbb8: f8ad 3012 strh.w r3, [sp, #18] + 802bbbc: 4b77 ldr r3, [pc, #476] ; (802bd9c <_ZN8touchgfx8LCD16bpp21blitCopyAlphaPerPixelEPKtPKhRKNS_4RectES7_h+0x244>) + 802bbbe: 6818 ldr r0, [r3, #0] + 802bbc0: 6803 ldr r3, [r0, #0] + 802bbc2: 6a9b ldr r3, [r3, #40] ; 0x28 + 802bbc4: 4798 blx r3 + 802bbc6: f8b9 b000 ldrh.w fp, [r9] + 802bbca: f9bd 3012 ldrsh.w r3, [sp, #18] + 802bbce: f1ba 0fff cmp.w sl, #255 ; 0xff + 802bbd2: f9bd 2010 ldrsh.w r2, [sp, #16] + 802bbd6: fb05 f50b mul.w r5, r5, fp + 802bbda: fb0b 2303 mla r3, fp, r3, r2 + 802bbde: eb00 0043 add.w r0, r0, r3, lsl #1 + 802bbe2: ea4f 0348 mov.w r3, r8, lsl #1 + 802bbe6: 9300 str r3, [sp, #0] + 802bbe8: d069 beq.n 802bcbe <_ZN8touchgfx8LCD16bpp21blitCopyAlphaPerPixelEPKtPKhRKNS_4RectES7_h+0x166> + 802bbea: eb00 0b45 add.w fp, r0, r5, lsl #1 + 802bbee: 4558 cmp r0, fp + 802bbf0: f080 80cc bcs.w 802bd8c <_ZN8touchgfx8LCD16bpp21blitCopyAlphaPerPixelEPKtPKhRKNS_4RectES7_h+0x234> + 802bbf4: 9b00 ldr r3, [sp, #0] + 802bbf6: 4631 mov r1, r6 + 802bbf8: 18c3 adds r3, r0, r3 + 802bbfa: 9301 str r3, [sp, #4] + 802bbfc: 9b01 ldr r3, [sp, #4] + 802bbfe: 4298 cmp r0, r3 + 802bc00: d24f bcs.n 802bca2 <_ZN8touchgfx8LCD16bpp21blitCopyAlphaPerPixelEPKtPKhRKNS_4RectES7_h+0x14a> + 802bc02: f811 2b01 ldrb.w r2, [r1], #1 + 802bc06: 2a00 cmp r2, #0 + 802bc08: d048 beq.n 802bc9c <_ZN8touchgfx8LCD16bpp21blitCopyAlphaPerPixelEPKtPKhRKNS_4RectES7_h+0x144> + 802bc0a: fb0a f202 mul.w r2, sl, r2 + 802bc0e: 1c53 adds r3, r2, #1 + 802bc10: eb03 2312 add.w r3, r3, r2, lsr #8 + 802bc14: 121b asrs r3, r3, #8 + 802bc16: d041 beq.n 802bc9c <_ZN8touchgfx8LCD16bpp21blitCopyAlphaPerPixelEPKtPKhRKNS_4RectES7_h+0x144> + 802bc18: 8802 ldrh r2, [r0, #0] + 802bc1a: b29e uxth r6, r3 + 802bc1c: f8b4 c000 ldrh.w ip, [r4] + 802bc20: 43db mvns r3, r3 + 802bc22: 1215 asrs r5, r2, #8 + 802bc24: b2db uxtb r3, r3 + 802bc26: ea4f 272c mov.w r7, ip, asr #8 + 802bc2a: f005 05f8 and.w r5, r5, #248 ; 0xf8 + 802bc2e: ea4f 0ee2 mov.w lr, r2, asr #3 + 802bc32: fb15 f503 smulbb r5, r5, r3 + 802bc36: f007 07f8 and.w r7, r7, #248 ; 0xf8 + 802bc3a: 00d2 lsls r2, r2, #3 + 802bc3c: f00e 0efc and.w lr, lr, #252 ; 0xfc + 802bc40: fb07 5706 mla r7, r7, r6, r5 + 802bc44: ea4f 05ec mov.w r5, ip, asr #3 + 802bc48: b2d2 uxtb r2, r2 + 802bc4a: ea4f 0ccc mov.w ip, ip, lsl #3 + 802bc4e: f005 05fc and.w r5, r5, #252 ; 0xfc + 802bc52: fb1e fe03 smulbb lr, lr, r3 + 802bc56: b2bf uxth r7, r7 + 802bc58: fb12 f203 smulbb r2, r2, r3 + 802bc5c: fa5f fc8c uxtb.w ip, ip + 802bc60: fb05 e506 mla r5, r5, r6, lr + 802bc64: f107 0e01 add.w lr, r7, #1 + 802bc68: fb0c 2c06 mla ip, ip, r6, r2 + 802bc6c: eb0e 2717 add.w r7, lr, r7, lsr #8 + 802bc70: fa1f fc8c uxth.w ip, ip + 802bc74: f407 4e78 and.w lr, r7, #63488 ; 0xf800 + 802bc78: b2ad uxth r5, r5 + 802bc7a: f10c 0701 add.w r7, ip, #1 + 802bc7e: eb07 271c add.w r7, r7, ip, lsr #8 + 802bc82: f3c7 27c4 ubfx r7, r7, #11, #5 + 802bc86: ea47 070e orr.w r7, r7, lr + 802bc8a: f105 0e01 add.w lr, r5, #1 + 802bc8e: eb0e 2515 add.w r5, lr, r5, lsr #8 + 802bc92: 096d lsrs r5, r5, #5 + 802bc94: f405 65fc and.w r5, r5, #2016 ; 0x7e0 + 802bc98: 432f orrs r7, r5 + 802bc9a: 8007 strh r7, [r0, #0] + 802bc9c: 3002 adds r0, #2 + 802bc9e: 3402 adds r4, #2 + 802bca0: e7ac b.n 802bbfc <_ZN8touchgfx8LCD16bpp21blitCopyAlphaPerPixelEPKtPKhRKNS_4RectES7_h+0xa4> + 802bca2: f8b9 3000 ldrh.w r3, [r9] + 802bca6: f9bd 600c ldrsh.w r6, [sp, #12] + 802bcaa: eba3 0308 sub.w r3, r3, r8 + 802bcae: eba6 0608 sub.w r6, r6, r8 + 802bcb2: eb00 0043 add.w r0, r0, r3, lsl #1 + 802bcb6: eb04 0446 add.w r4, r4, r6, lsl #1 + 802bcba: 440e add r6, r1 + 802bcbc: e797 b.n 802bbee <_ZN8touchgfx8LCD16bpp21blitCopyAlphaPerPixelEPKtPKhRKNS_4RectES7_h+0x96> + 802bcbe: eb00 0545 add.w r5, r0, r5, lsl #1 + 802bcc2: 42a8 cmp r0, r5 + 802bcc4: d262 bcs.n 802bd8c <_ZN8touchgfx8LCD16bpp21blitCopyAlphaPerPixelEPKtPKhRKNS_4RectES7_h+0x234> + 802bcc6: 9b00 ldr r3, [sp, #0] + 802bcc8: 4631 mov r1, r6 + 802bcca: eb00 0b03 add.w fp, r0, r3 + 802bcce: 4558 cmp r0, fp + 802bcd0: d24e bcs.n 802bd70 <_ZN8touchgfx8LCD16bpp21blitCopyAlphaPerPixelEPKtPKhRKNS_4RectES7_h+0x218> + 802bcd2: f811 3b01 ldrb.w r3, [r1], #1 + 802bcd6: b12b cbz r3, 802bce4 <_ZN8touchgfx8LCD16bpp21blitCopyAlphaPerPixelEPKtPKhRKNS_4RectES7_h+0x18c> + 802bcd8: 2bff cmp r3, #255 ; 0xff + 802bcda: f8b4 e000 ldrh.w lr, [r4] + 802bcde: d104 bne.n 802bcea <_ZN8touchgfx8LCD16bpp21blitCopyAlphaPerPixelEPKtPKhRKNS_4RectES7_h+0x192> + 802bce0: f8a0 e000 strh.w lr, [r0] + 802bce4: 3002 adds r0, #2 + 802bce6: 3402 adds r4, #2 + 802bce8: e7f1 b.n 802bcce <_ZN8touchgfx8LCD16bpp21blitCopyAlphaPerPixelEPKtPKhRKNS_4RectES7_h+0x176> + 802bcea: 8802 ldrh r2, [r0, #0] + 802bcec: b29f uxth r7, r3 + 802bcee: 43db mvns r3, r3 + 802bcf0: ea4f 2c2e mov.w ip, lr, asr #8 + 802bcf4: 1216 asrs r6, r2, #8 + 802bcf6: b2db uxtb r3, r3 + 802bcf8: f00c 0cf8 and.w ip, ip, #248 ; 0xf8 + 802bcfc: f006 06f8 and.w r6, r6, #248 ; 0xf8 + 802bd00: ea4f 0ae2 mov.w sl, r2, asr #3 + 802bd04: 00d2 lsls r2, r2, #3 + 802bd06: fb16 f603 smulbb r6, r6, r3 + 802bd0a: f00a 0afc and.w sl, sl, #252 ; 0xfc + 802bd0e: b2d2 uxtb r2, r2 + 802bd10: fb0c 6c07 mla ip, ip, r7, r6 + 802bd14: ea4f 06ee mov.w r6, lr, asr #3 + 802bd18: fb1a fa03 smulbb sl, sl, r3 + 802bd1c: ea4f 0ece mov.w lr, lr, lsl #3 + 802bd20: fa1f fc8c uxth.w ip, ip + 802bd24: f006 06fc and.w r6, r6, #252 ; 0xfc + 802bd28: fb12 f303 smulbb r3, r2, r3 + 802bd2c: fa5f fe8e uxtb.w lr, lr + 802bd30: fb06 a607 mla r6, r6, r7, sl + 802bd34: f10c 0201 add.w r2, ip, #1 + 802bd38: fb0e 3307 mla r3, lr, r7, r3 + 802bd3c: b2b6 uxth r6, r6 + 802bd3e: b29b uxth r3, r3 + 802bd40: eb02 2c1c add.w ip, r2, ip, lsr #8 + 802bd44: f106 0a01 add.w sl, r6, #1 + 802bd48: f40c 4278 and.w r2, ip, #63488 ; 0xf800 + 802bd4c: f103 0c01 add.w ip, r3, #1 + 802bd50: eb0a 2616 add.w r6, sl, r6, lsr #8 + 802bd54: eb0c 2c13 add.w ip, ip, r3, lsr #8 + 802bd58: 0976 lsrs r6, r6, #5 + 802bd5a: f3cc 2cc4 ubfx ip, ip, #11, #5 + 802bd5e: f406 66fc and.w r6, r6, #2016 ; 0x7e0 + 802bd62: ea4c 0c02 orr.w ip, ip, r2 + 802bd66: ea4c 0c06 orr.w ip, ip, r6 + 802bd6a: f8a0 c000 strh.w ip, [r0] + 802bd6e: e7b9 b.n 802bce4 <_ZN8touchgfx8LCD16bpp21blitCopyAlphaPerPixelEPKtPKhRKNS_4RectES7_h+0x18c> + 802bd70: f8b9 3000 ldrh.w r3, [r9] + 802bd74: f9bd 600c ldrsh.w r6, [sp, #12] + 802bd78: eba3 0308 sub.w r3, r3, r8 + 802bd7c: eba6 0608 sub.w r6, r6, r8 + 802bd80: eb00 0043 add.w r0, r0, r3, lsl #1 + 802bd84: eb04 0446 add.w r4, r4, r6, lsl #1 + 802bd88: 440e add r6, r1 + 802bd8a: e79a b.n 802bcc2 <_ZN8touchgfx8LCD16bpp21blitCopyAlphaPerPixelEPKtPKhRKNS_4RectES7_h+0x16a> + 802bd8c: 4b03 ldr r3, [pc, #12] ; (802bd9c <_ZN8touchgfx8LCD16bpp21blitCopyAlphaPerPixelEPKtPKhRKNS_4RectES7_h+0x244>) + 802bd8e: 6818 ldr r0, [r3, #0] + 802bd90: 6803 ldr r3, [r0, #0] + 802bd92: 6adb ldr r3, [r3, #44] ; 0x2c + 802bd94: 4798 blx r3 + 802bd96: b007 add sp, #28 + 802bd98: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 802bd9c: 2001e734 .word 0x2001e734 + 802bda0: 2001e72e .word 0x2001e72e + +0802bda4 <_ZN8touchgfx8LCD16bpp17drawPartialBitmapERKNS_6BitmapEssRKNS_4RectEhb>: + 802bda4: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 802bda8: b089 sub sp, #36 ; 0x24 + 802bdaa: 4682 mov sl, r0 + 802bdac: 460f mov r7, r1 + 802bdae: 4691 mov r9, r2 + 802bdb0: f89d 604c ldrb.w r6, [sp, #76] ; 0x4c + 802bdb4: 4698 mov r8, r3 + 802bdb6: 9c12 ldr r4, [sp, #72] ; 0x48 + 802bdb8: 2e00 cmp r6, #0 + 802bdba: d03d beq.n 802be38 <_ZN8touchgfx8LCD16bpp17drawPartialBitmapERKNS_6BitmapEssRKNS_4RectEhb+0x94> + 802bdbc: 4608 mov r0, r1 + 802bdbe: f7fa fe4b bl 8026a58 <_ZNK8touchgfx6Bitmap8getWidthEv> + 802bdc2: 4605 mov r5, r0 + 802bdc4: 4638 mov r0, r7 + 802bdc6: f7fa fe7b bl 8026ac0 <_ZNK8touchgfx6Bitmap9getHeightEv> + 802bdca: f8ad 000e strh.w r0, [sp, #14] + 802bdce: 4638 mov r0, r7 + 802bdd0: f8ad 9008 strh.w r9, [sp, #8] + 802bdd4: f8ad 500c strh.w r5, [sp, #12] + 802bdd8: f8ad 800a strh.w r8, [sp, #10] + 802bddc: f7fa ff28 bl 8026c30 <_ZNK8touchgfx6Bitmap7getDataEv> + 802bde0: 4605 mov r5, r0 + 802bde2: 4638 mov r0, r7 + 802bde4: f7fa ff54 bl 8026c90 <_ZNK8touchgfx6Bitmap12getExtraDataEv> + 802bde8: 4681 mov r9, r0 + 802bdea: 4638 mov r0, r7 + 802bdec: f7fa ffa4 bl 8026d38 <_ZNK8touchgfx6Bitmap9getFormatEv> + 802bdf0: 280b cmp r0, #11 + 802bdf2: d821 bhi.n 802be38 <_ZN8touchgfx8LCD16bpp17drawPartialBitmapERKNS_6BitmapEssRKNS_4RectEhb+0x94> + 802bdf4: e8df f000 tbb [pc, r0] + 802bdf8: 2006aebe .word 0x2006aebe + 802bdfc: 20202020 .word 0x20202020 + 802be00: b5202020 .word 0xb5202020 + 802be04: 4bb0 ldr r3, [pc, #704] ; (802c0c8 <_ZN8touchgfx8LCD16bpp17drawPartialBitmapERKNS_6BitmapEssRKNS_4RectEhb+0x324>) + 802be06: 6818 ldr r0, [r3, #0] + 802be08: 6803 ldr r3, [r0, #0] + 802be0a: 6b9b ldr r3, [r3, #56] ; 0x38 + 802be0c: 4798 blx r3 + 802be0e: 2eff cmp r6, #255 ; 0xff + 802be10: d101 bne.n 802be16 <_ZN8touchgfx8LCD16bpp17drawPartialBitmapERKNS_6BitmapEssRKNS_4RectEhb+0x72> + 802be12: 0683 lsls r3, r0, #26 + 802be14: d506 bpl.n 802be24 <_ZN8touchgfx8LCD16bpp17drawPartialBitmapERKNS_6BitmapEssRKNS_4RectEhb+0x80> + 802be16: 4633 mov r3, r6 + 802be18: 4622 mov r2, r4 + 802be1a: a902 add r1, sp, #8 + 802be1c: 4628 mov r0, r5 + 802be1e: f7ff f909 bl 802b034 <_ZN8touchgfx8LCD16bpp16blitCopyARGB8888EPKmRKNS_4RectES5_h> + 802be22: e009 b.n 802be38 <_ZN8touchgfx8LCD16bpp17drawPartialBitmapERKNS_6BitmapEssRKNS_4RectEhb+0x94> + 802be24: 4638 mov r0, r7 + 802be26: f7fa fecb bl 8026bc0 <_ZNK8touchgfx6Bitmap20hasTransparentPixelsEv> + 802be2a: b940 cbnz r0, 802be3e <_ZN8touchgfx8LCD16bpp17drawPartialBitmapERKNS_6BitmapEssRKNS_4RectEhb+0x9a> + 802be2c: 4623 mov r3, r4 + 802be2e: aa02 add r2, sp, #8 + 802be30: 4629 mov r1, r5 + 802be32: 4650 mov r0, sl + 802be34: f7ff f9e4 bl 802b200 <_ZNK8touchgfx8LCD16bpp21blitCopyARGB8888SolidEPKmRKNS_4RectES5_> + 802be38: b009 add sp, #36 ; 0x24 + 802be3a: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 802be3e: f10d 0818 add.w r8, sp, #24 + 802be42: 4639 mov r1, r7 + 802be44: af04 add r7, sp, #16 + 802be46: 4640 mov r0, r8 + 802be48: f7fa fe6e bl 8026b28 <_ZNK8touchgfx6Bitmap12getSolidRectEv> + 802be4c: e898 0003 ldmia.w r8, {r0, r1} + 802be50: e887 0003 stmia.w r7, {r0, r1} + 802be54: 4638 mov r0, r7 + 802be56: 4621 mov r1, r4 + 802be58: f7f4 f848 bl 801feec <_ZN8touchgfx4RectaNERKS0_> + 802be5c: 4638 mov r0, r7 + 802be5e: f7f4 f888 bl 801ff72 <_ZNK8touchgfx4Rect7isEmptyEv> + 802be62: 2800 cmp r0, #0 + 802be64: d1d7 bne.n 802be16 <_ZN8touchgfx8LCD16bpp17drawPartialBitmapERKNS_6BitmapEssRKNS_4RectEhb+0x72> + 802be66: f9bd 3012 ldrsh.w r3, [sp, #18] + 802be6a: f9b4 2002 ldrsh.w r2, [r4, #2] + 802be6e: 4293 cmp r3, r2 + 802be70: dd12 ble.n 802be98 <_ZN8touchgfx8LCD16bpp17drawPartialBitmapERKNS_6BitmapEssRKNS_4RectEhb+0xf4> + 802be72: 1a9b subs r3, r3, r2 + 802be74: f9b4 0000 ldrsh.w r0, [r4] + 802be78: f9b4 1004 ldrsh.w r1, [r4, #4] + 802be7c: f8ad 0018 strh.w r0, [sp, #24] + 802be80: 4628 mov r0, r5 + 802be82: f8ad 201a strh.w r2, [sp, #26] + 802be86: 4642 mov r2, r8 + 802be88: f8ad 101c strh.w r1, [sp, #28] + 802be8c: a902 add r1, sp, #8 + 802be8e: f8ad 301e strh.w r3, [sp, #30] + 802be92: 4633 mov r3, r6 + 802be94: f7ff f8ce bl 802b034 <_ZN8touchgfx8LCD16bpp16blitCopyARGB8888EPKmRKNS_4RectES5_h> + 802be98: f9bd 3010 ldrsh.w r3, [sp, #16] + 802be9c: f9b4 2000 ldrsh.w r2, [r4] + 802bea0: 4293 cmp r3, r2 + 802bea2: dd12 ble.n 802beca <_ZN8touchgfx8LCD16bpp17drawPartialBitmapERKNS_6BitmapEssRKNS_4RectEhb+0x126> + 802bea4: 1a9b subs r3, r3, r2 + 802bea6: f9bd 0012 ldrsh.w r0, [sp, #18] + 802beaa: f9bd 1016 ldrsh.w r1, [sp, #22] + 802beae: f8ad 2018 strh.w r2, [sp, #24] + 802beb2: 4642 mov r2, r8 + 802beb4: f8ad 001a strh.w r0, [sp, #26] + 802beb8: 4628 mov r0, r5 + 802beba: f8ad 301c strh.w r3, [sp, #28] + 802bebe: 23ff movs r3, #255 ; 0xff + 802bec0: f8ad 101e strh.w r1, [sp, #30] + 802bec4: a902 add r1, sp, #8 + 802bec6: f7ff f8b5 bl 802b034 <_ZN8touchgfx8LCD16bpp16blitCopyARGB8888EPKmRKNS_4RectES5_h> + 802beca: 463b mov r3, r7 + 802becc: aa02 add r2, sp, #8 + 802bece: 4629 mov r1, r5 + 802bed0: 4650 mov r0, sl + 802bed2: f7ff f995 bl 802b200 <_ZNK8touchgfx8LCD16bpp21blitCopyARGB8888SolidEPKmRKNS_4RectES5_> + 802bed6: 88a2 ldrh r2, [r4, #4] + 802bed8: 8823 ldrh r3, [r4, #0] + 802beda: f8bd 1014 ldrh.w r1, [sp, #20] + 802bede: 4413 add r3, r2 + 802bee0: f8bd 2010 ldrh.w r2, [sp, #16] + 802bee4: 440a add r2, r1 + 802bee6: b29b uxth r3, r3 + 802bee8: b292 uxth r2, r2 + 802beea: b218 sxth r0, r3 + 802beec: b211 sxth r1, r2 + 802beee: 4288 cmp r0, r1 + 802bef0: dd12 ble.n 802bf18 <_ZN8touchgfx8LCD16bpp17drawPartialBitmapERKNS_6BitmapEssRKNS_4RectEhb+0x174> + 802bef2: 1a9b subs r3, r3, r2 + 802bef4: f9bd 0016 ldrsh.w r0, [sp, #22] + 802bef8: f9bd 6012 ldrsh.w r6, [sp, #18] + 802befc: 4642 mov r2, r8 + 802befe: f8ad 1018 strh.w r1, [sp, #24] + 802bf02: a902 add r1, sp, #8 + 802bf04: f8ad 301c strh.w r3, [sp, #28] + 802bf08: 23ff movs r3, #255 ; 0xff + 802bf0a: f8ad 001e strh.w r0, [sp, #30] + 802bf0e: 4628 mov r0, r5 + 802bf10: f8ad 601a strh.w r6, [sp, #26] + 802bf14: f7ff f88e bl 802b034 <_ZN8touchgfx8LCD16bpp16blitCopyARGB8888EPKmRKNS_4RectES5_h> + 802bf18: 88e2 ldrh r2, [r4, #6] + 802bf1a: 8863 ldrh r3, [r4, #2] + 802bf1c: f8bd 1016 ldrh.w r1, [sp, #22] + 802bf20: 4413 add r3, r2 + 802bf22: f8bd 2012 ldrh.w r2, [sp, #18] + 802bf26: 440a add r2, r1 + 802bf28: b29b uxth r3, r3 + 802bf2a: b292 uxth r2, r2 + 802bf2c: b218 sxth r0, r3 + 802bf2e: b211 sxth r1, r2 + 802bf30: 4288 cmp r0, r1 + 802bf32: dd81 ble.n 802be38 <_ZN8touchgfx8LCD16bpp17drawPartialBitmapERKNS_6BitmapEssRKNS_4RectEhb+0x94> + 802bf34: 1a9b subs r3, r3, r2 + 802bf36: f9b4 6000 ldrsh.w r6, [r4] + 802bf3a: f9b4 0004 ldrsh.w r0, [r4, #4] + 802bf3e: 4642 mov r2, r8 + 802bf40: f8ad 301e strh.w r3, [sp, #30] + 802bf44: 23ff movs r3, #255 ; 0xff + 802bf46: f8ad 6018 strh.w r6, [sp, #24] + 802bf4a: f8ad 101a strh.w r1, [sp, #26] + 802bf4e: f8ad 001c strh.w r0, [sp, #28] + 802bf52: e762 b.n 802be1a <_ZN8touchgfx8LCD16bpp17drawPartialBitmapERKNS_6BitmapEssRKNS_4RectEhb+0x76> + 802bf54: 4633 mov r3, r6 + 802bf56: 4622 mov r2, r4 + 802bf58: a902 add r1, sp, #8 + 802bf5a: 4628 mov r0, r5 + 802bf5c: f7ff f9c0 bl 802b2e0 <_ZN8touchgfx8LCD16bpp14blitCopyRGB888EPKhRKNS_4RectES5_h> + 802bf60: e76a b.n 802be38 <_ZN8touchgfx8LCD16bpp17drawPartialBitmapERKNS_6BitmapEssRKNS_4RectEhb+0x94> + 802bf62: e9cd 4600 strd r4, r6, [sp] + 802bf66: ab02 add r3, sp, #8 + 802bf68: 464a mov r2, r9 + 802bf6a: 4629 mov r1, r5 + 802bf6c: 4650 mov r0, sl + 802bf6e: f7ff fd97 bl 802baa0 <_ZN8touchgfx8LCD16bpp10blitCopyL8EPKhS2_RKNS_4RectES5_h> + 802bf72: e761 b.n 802be38 <_ZN8touchgfx8LCD16bpp17drawPartialBitmapERKNS_6BitmapEssRKNS_4RectEhb+0x94> + 802bf74: 4638 mov r0, r7 + 802bf76: f7fa fe23 bl 8026bc0 <_ZNK8touchgfx6Bitmap20hasTransparentPixelsEv> + 802bf7a: b950 cbnz r0, 802bf92 <_ZN8touchgfx8LCD16bpp17drawPartialBitmapERKNS_6BitmapEssRKNS_4RectEhb+0x1ee> + 802bf7c: f8da 3000 ldr.w r3, [sl] + 802bf80: aa02 add r2, sp, #8 + 802bf82: 4629 mov r1, r5 + 802bf84: e9cd 6000 strd r6, r0, [sp] + 802bf88: 4650 mov r0, sl + 802bf8a: 68de ldr r6, [r3, #12] + 802bf8c: 4623 mov r3, r4 + 802bf8e: 47b0 blx r6 + 802bf90: e752 b.n 802be38 <_ZN8touchgfx8LCD16bpp17drawPartialBitmapERKNS_6BitmapEssRKNS_4RectEhb+0x94> + 802bf92: f10d 0818 add.w r8, sp, #24 + 802bf96: 4639 mov r1, r7 + 802bf98: af04 add r7, sp, #16 + 802bf9a: 4640 mov r0, r8 + 802bf9c: f7fa fdc4 bl 8026b28 <_ZNK8touchgfx6Bitmap12getSolidRectEv> + 802bfa0: e898 0003 ldmia.w r8, {r0, r1} + 802bfa4: e887 0003 stmia.w r7, {r0, r1} + 802bfa8: 4638 mov r0, r7 + 802bfaa: 4621 mov r1, r4 + 802bfac: f7f3 ff9e bl 801feec <_ZN8touchgfx4RectaNERKS0_> + 802bfb0: 4638 mov r0, r7 + 802bfb2: f7f3 ffde bl 801ff72 <_ZNK8touchgfx4Rect7isEmptyEv> + 802bfb6: b138 cbz r0, 802bfc8 <_ZN8touchgfx8LCD16bpp17drawPartialBitmapERKNS_6BitmapEssRKNS_4RectEhb+0x224> + 802bfb8: 4623 mov r3, r4 + 802bfba: 9600 str r6, [sp, #0] + 802bfbc: aa02 add r2, sp, #8 + 802bfbe: 4649 mov r1, r9 + 802bfc0: 4628 mov r0, r5 + 802bfc2: f7ff fdc9 bl 802bb58 <_ZN8touchgfx8LCD16bpp21blitCopyAlphaPerPixelEPKtPKhRKNS_4RectES7_h> + 802bfc6: e737 b.n 802be38 <_ZN8touchgfx8LCD16bpp17drawPartialBitmapERKNS_6BitmapEssRKNS_4RectEhb+0x94> + 802bfc8: f8da 3000 ldr.w r3, [sl] + 802bfcc: aa02 add r2, sp, #8 + 802bfce: 4629 mov r1, r5 + 802bfd0: e9cd 6000 strd r6, r0, [sp] + 802bfd4: 4650 mov r0, sl + 802bfd6: f8d3 b00c ldr.w fp, [r3, #12] + 802bfda: 463b mov r3, r7 + 802bfdc: 47d8 blx fp + 802bfde: f9bd 3012 ldrsh.w r3, [sp, #18] + 802bfe2: f9b4 2002 ldrsh.w r2, [r4, #2] + 802bfe6: 4293 cmp r3, r2 + 802bfe8: dd13 ble.n 802c012 <_ZN8touchgfx8LCD16bpp17drawPartialBitmapERKNS_6BitmapEssRKNS_4RectEhb+0x26e> + 802bfea: f9b4 0000 ldrsh.w r0, [r4] + 802bfee: 1a9b subs r3, r3, r2 + 802bff0: f9b4 1004 ldrsh.w r1, [r4, #4] + 802bff4: f8ad 0018 strh.w r0, [sp, #24] + 802bff8: 4628 mov r0, r5 + 802bffa: f8ad 201a strh.w r2, [sp, #26] + 802bffe: aa02 add r2, sp, #8 + 802c000: f8ad 101c strh.w r1, [sp, #28] + 802c004: 4649 mov r1, r9 + 802c006: f8ad 301e strh.w r3, [sp, #30] + 802c00a: 4643 mov r3, r8 + 802c00c: 9600 str r6, [sp, #0] + 802c00e: f7ff fda3 bl 802bb58 <_ZN8touchgfx8LCD16bpp21blitCopyAlphaPerPixelEPKtPKhRKNS_4RectES7_h> + 802c012: f9bd 3010 ldrsh.w r3, [sp, #16] + 802c016: f9b4 2000 ldrsh.w r2, [r4] + 802c01a: 4293 cmp r3, r2 + 802c01c: dd13 ble.n 802c046 <_ZN8touchgfx8LCD16bpp17drawPartialBitmapERKNS_6BitmapEssRKNS_4RectEhb+0x2a2> + 802c01e: 1a9b subs r3, r3, r2 + 802c020: f9bd 0012 ldrsh.w r0, [sp, #18] + 802c024: f9bd 1016 ldrsh.w r1, [sp, #22] + 802c028: f8ad 2018 strh.w r2, [sp, #24] + 802c02c: aa02 add r2, sp, #8 + 802c02e: f8ad 001a strh.w r0, [sp, #26] + 802c032: 4628 mov r0, r5 + 802c034: f8ad 301c strh.w r3, [sp, #28] + 802c038: 4643 mov r3, r8 + 802c03a: f8ad 101e strh.w r1, [sp, #30] + 802c03e: 4649 mov r1, r9 + 802c040: 9600 str r6, [sp, #0] + 802c042: f7ff fd89 bl 802bb58 <_ZN8touchgfx8LCD16bpp21blitCopyAlphaPerPixelEPKtPKhRKNS_4RectES7_h> + 802c046: 88a2 ldrh r2, [r4, #4] + 802c048: 8823 ldrh r3, [r4, #0] + 802c04a: f8bd 1014 ldrh.w r1, [sp, #20] + 802c04e: 4413 add r3, r2 + 802c050: f8bd 2010 ldrh.w r2, [sp, #16] + 802c054: 440a add r2, r1 + 802c056: b29b uxth r3, r3 + 802c058: b292 uxth r2, r2 + 802c05a: b218 sxth r0, r3 + 802c05c: b211 sxth r1, r2 + 802c05e: 4288 cmp r0, r1 + 802c060: dd13 ble.n 802c08a <_ZN8touchgfx8LCD16bpp17drawPartialBitmapERKNS_6BitmapEssRKNS_4RectEhb+0x2e6> + 802c062: 1a9b subs r3, r3, r2 + 802c064: f9bd 0016 ldrsh.w r0, [sp, #22] + 802c068: f9bd 7012 ldrsh.w r7, [sp, #18] + 802c06c: aa02 add r2, sp, #8 + 802c06e: f8ad 1018 strh.w r1, [sp, #24] + 802c072: 4649 mov r1, r9 + 802c074: f8ad 301c strh.w r3, [sp, #28] + 802c078: 4643 mov r3, r8 + 802c07a: f8ad 001e strh.w r0, [sp, #30] + 802c07e: 4628 mov r0, r5 + 802c080: 9600 str r6, [sp, #0] + 802c082: f8ad 701a strh.w r7, [sp, #26] + 802c086: f7ff fd67 bl 802bb58 <_ZN8touchgfx8LCD16bpp21blitCopyAlphaPerPixelEPKtPKhRKNS_4RectES7_h> + 802c08a: 88e2 ldrh r2, [r4, #6] + 802c08c: 8863 ldrh r3, [r4, #2] + 802c08e: f8bd 1016 ldrh.w r1, [sp, #22] + 802c092: 4413 add r3, r2 + 802c094: f8bd 2012 ldrh.w r2, [sp, #18] + 802c098: 440a add r2, r1 + 802c09a: b29b uxth r3, r3 + 802c09c: b292 uxth r2, r2 + 802c09e: b218 sxth r0, r3 + 802c0a0: b211 sxth r1, r2 + 802c0a2: 4288 cmp r0, r1 + 802c0a4: f77f aec8 ble.w 802be38 <_ZN8touchgfx8LCD16bpp17drawPartialBitmapERKNS_6BitmapEssRKNS_4RectEhb+0x94> + 802c0a8: f9b4 7000 ldrsh.w r7, [r4] + 802c0ac: 1a9b subs r3, r3, r2 + 802c0ae: f9b4 0004 ldrsh.w r0, [r4, #4] + 802c0b2: f8ad 301e strh.w r3, [sp, #30] + 802c0b6: 4643 mov r3, r8 + 802c0b8: f8ad 7018 strh.w r7, [sp, #24] + 802c0bc: f8ad 101a strh.w r1, [sp, #26] + 802c0c0: f8ad 001c strh.w r0, [sp, #28] + 802c0c4: 9600 str r6, [sp, #0] + 802c0c6: e779 b.n 802bfbc <_ZN8touchgfx8LCD16bpp17drawPartialBitmapERKNS_6BitmapEssRKNS_4RectEhb+0x218> + 802c0c8: 2001e734 .word 0x2001e734 + +0802c0cc <_ZN8touchgfx8LCD16bpp9nextPixelEbNS_12TextRotationE>: + 802c0cc: b180 cbz r0, 802c0f0 <_ZN8touchgfx8LCD16bpp9nextPixelEbNS_12TextRotationE+0x24> + 802c0ce: 2903 cmp r1, #3 + 802c0d0: d81c bhi.n 802c10c <_ZN8touchgfx8LCD16bpp9nextPixelEbNS_12TextRotationE+0x40> + 802c0d2: e8df f001 tbb [pc, r1] + 802c0d6: 1d02 .short 0x1d02 + 802c0d8: 1f08 .short 0x1f08 + 802c0da: 4b10 ldr r3, [pc, #64] ; (802c11c <_ZN8touchgfx8LCD16bpp9nextPixelEbNS_12TextRotationE+0x50>) + 802c0dc: 8818 ldrh r0, [r3, #0] + 802c0de: f3c0 000e ubfx r0, r0, #0, #15 + 802c0e2: 4240 negs r0, r0 + 802c0e4: 4770 bx lr + 802c0e6: 4b0d ldr r3, [pc, #52] ; (802c11c <_ZN8touchgfx8LCD16bpp9nextPixelEbNS_12TextRotationE+0x50>) + 802c0e8: 8818 ldrh r0, [r3, #0] + 802c0ea: f3c0 000e ubfx r0, r0, #0, #15 + 802c0ee: 4770 bx lr + 802c0f0: 2903 cmp r1, #3 + 802c0f2: d80b bhi.n 802c10c <_ZN8touchgfx8LCD16bpp9nextPixelEbNS_12TextRotationE+0x40> + 802c0f4: a301 add r3, pc, #4 ; (adr r3, 802c0fc <_ZN8touchgfx8LCD16bpp9nextPixelEbNS_12TextRotationE+0x30>) + 802c0f6: f853 f021 ldr.w pc, [r3, r1, lsl #2] + 802c0fa: bf00 nop + 802c0fc: 0802c111 .word 0x0802c111 + 802c100: 0802c0e7 .word 0x0802c0e7 + 802c104: 0802c115 .word 0x0802c115 + 802c108: 0802c0db .word 0x0802c0db + 802c10c: 2000 movs r0, #0 + 802c10e: 4770 bx lr + 802c110: 2001 movs r0, #1 + 802c112: 4770 bx lr + 802c114: f04f 30ff mov.w r0, #4294967295 + 802c118: 4770 bx lr + 802c11a: bf00 nop + 802c11c: 2001e72e .word 0x2001e72e + +0802c120 <_ZN8touchgfx8LCD16bpp8nextLineEbNS_12TextRotationE>: + 802c120: b180 cbz r0, 802c144 <_ZN8touchgfx8LCD16bpp8nextLineEbNS_12TextRotationE+0x24> + 802c122: 2903 cmp r1, #3 + 802c124: d81c bhi.n 802c160 <_ZN8touchgfx8LCD16bpp8nextLineEbNS_12TextRotationE+0x40> + 802c126: e8df f001 tbb [pc, r1] + 802c12a: 021d .short 0x021d + 802c12c: 071f .short 0x071f + 802c12e: 4b10 ldr r3, [pc, #64] ; (802c170 <_ZN8touchgfx8LCD16bpp8nextLineEbNS_12TextRotationE+0x50>) + 802c130: 8818 ldrh r0, [r3, #0] + 802c132: f3c0 000e ubfx r0, r0, #0, #15 + 802c136: 4770 bx lr + 802c138: 4b0d ldr r3, [pc, #52] ; (802c170 <_ZN8touchgfx8LCD16bpp8nextLineEbNS_12TextRotationE+0x50>) + 802c13a: 8818 ldrh r0, [r3, #0] + 802c13c: f3c0 000e ubfx r0, r0, #0, #15 + 802c140: 4240 negs r0, r0 + 802c142: 4770 bx lr + 802c144: 2903 cmp r1, #3 + 802c146: d80b bhi.n 802c160 <_ZN8touchgfx8LCD16bpp8nextLineEbNS_12TextRotationE+0x40> + 802c148: a301 add r3, pc, #4 ; (adr r3, 802c150 <_ZN8touchgfx8LCD16bpp8nextLineEbNS_12TextRotationE+0x30>) + 802c14a: f853 f021 ldr.w pc, [r3, r1, lsl #2] + 802c14e: bf00 nop + 802c150: 0802c12f .word 0x0802c12f + 802c154: 0802c169 .word 0x0802c169 + 802c158: 0802c139 .word 0x0802c139 + 802c15c: 0802c165 .word 0x0802c165 + 802c160: 2000 movs r0, #0 + 802c162: 4770 bx lr + 802c164: 2001 movs r0, #1 + 802c166: 4770 bx lr + 802c168: f04f 30ff mov.w r0, #4294967295 + 802c16c: 4770 bx lr + 802c16e: bf00 nop + 802c170: 2001e72e .word 0x2001e72e + +0802c174 <_ZN8touchgfx8LCD16bpp9drawGlyphEPtNS_4RectEssttRKS2_PKNS_9GlyphNodeEPKhhNS_9colortypeEhhNS_12TextRotationE>: + 802c174: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 802c178: b099 sub sp, #100 ; 0x64 + 802c17a: 910b str r1, [sp, #44] ; 0x2c + 802c17c: a914 add r1, sp, #80 ; 0x50 + 802c17e: f9bd 4088 ldrsh.w r4, [sp, #136] ; 0x88 + 802c182: f8bd 5090 ldrh.w r5, [sp, #144] ; 0x90 + 802c186: f8bd 6094 ldrh.w r6, [sp, #148] ; 0x94 + 802c18a: f89d 80ac ldrb.w r8, [sp, #172] ; 0xac + 802c18e: f89d a0b4 ldrb.w sl, [sp, #180] ; 0xb4 + 802c192: e881 000c stmia.w r1, {r2, r3} + 802c196: f9bd 308c ldrsh.w r3, [sp, #140] ; 0x8c + 802c19a: e9dd 2126 ldrd r2, r1, [sp, #152] ; 0x98 + 802c19e: 9309 str r3, [sp, #36] ; 0x24 + 802c1a0: f891 900d ldrb.w r9, [r1, #13] + 802c1a4: f89d 30a4 ldrb.w r3, [sp, #164] ; 0xa4 + 802c1a8: ea4f 1749 mov.w r7, r9, lsl #5 + 802c1ac: 9310 str r3, [sp, #64] ; 0x40 + 802c1ae: f89d 30b0 ldrb.w r3, [sp, #176] ; 0xb0 + 802c1b2: 930c str r3, [sp, #48] ; 0x30 + 802c1b4: f407 7380 and.w r3, r7, #256 ; 0x100 + 802c1b8: 798f ldrb r7, [r1, #6] + 802c1ba: 431f orrs r7, r3 + 802c1bc: f000 8195 beq.w 802c4ea <_ZN8touchgfx8LCD16bpp9drawGlyphEPtNS_4RectEssttRKS2_PKNS_9GlyphNodeEPKhhNS_9colortypeEhhNS_12TextRotationE+0x376> + 802c1c0: ea4f 1909 mov.w r9, r9, lsl #4 + 802c1c4: f409 7380 and.w r3, r9, #256 ; 0x100 + 802c1c8: f891 9007 ldrb.w r9, [r1, #7] + 802c1cc: ea59 0903 orrs.w r9, r9, r3 + 802c1d0: f000 818b beq.w 802c4ea <_ZN8touchgfx8LCD16bpp9drawGlyphEPtNS_4RectEssttRKS2_PKNS_9GlyphNodeEPKhhNS_9colortypeEhhNS_12TextRotationE+0x376> + 802c1d4: f991 3009 ldrsb.w r3, [r1, #9] + 802c1d8: b29b uxth r3, r3 + 802c1da: 2d00 cmp r5, #0 + 802c1dc: f000 812e beq.w 802c43c <_ZN8touchgfx8LCD16bpp9drawGlyphEPtNS_4RectEssttRKS2_PKNS_9GlyphNodeEPKhhNS_9colortypeEhhNS_12TextRotationE+0x2c8> + 802c1e0: 1aed subs r5, r5, r3 + 802c1e2: b2ad uxth r5, r5 + 802c1e4: 042b lsls r3, r5, #16 + 802c1e6: d502 bpl.n 802c1ee <_ZN8touchgfx8LCD16bpp9drawGlyphEPtNS_4RectEssttRKS2_PKNS_9GlyphNodeEPKhhNS_9colortypeEhhNS_12TextRotationE+0x7a> + 802c1e8: 1b64 subs r4, r4, r5 + 802c1ea: 2500 movs r5, #0 + 802c1ec: b224 sxth r4, r4 + 802c1ee: f9b2 1000 ldrsh.w r1, [r2] + 802c1f2: a814 add r0, sp, #80 ; 0x50 + 802c1f4: f8cd 9028 str.w r9, [sp, #40] ; 0x28 + 802c1f8: 428c cmp r4, r1 + 802c1fa: b28b uxth r3, r1 + 802c1fc: bfbf itttt lt + 802c1fe: 18ed addlt r5, r5, r3 + 802c200: 1b2c sublt r4, r5, r4 + 802c202: b2a5 uxthlt r5, r4 + 802c204: 460c movlt r4, r1 + 802c206: 8891 ldrh r1, [r2, #4] + 802c208: 440b add r3, r1 + 802c20a: 4621 mov r1, r4 + 802c20c: b21b sxth r3, r3 + 802c20e: 930f str r3, [sp, #60] ; 0x3c + 802c210: 88d3 ldrh r3, [r2, #6] + 802c212: 8852 ldrh r2, [r2, #2] + 802c214: 4413 add r3, r2 + 802c216: 9a09 ldr r2, [sp, #36] ; 0x24 + 802c218: b21b sxth r3, r3 + 802c21a: 930d str r3, [sp, #52] ; 0x34 + 802c21c: 4bbd ldr r3, [pc, #756] ; (802c514 <_ZN8touchgfx8LCD16bpp9drawGlyphEPtNS_4RectEssttRKS2_PKNS_9GlyphNodeEPKhhNS_9colortypeEhhNS_12TextRotationE+0x3a0>) + 802c21e: f893 b000 ldrb.w fp, [r3] + 802c222: f10b 3cff add.w ip, fp, #4294967295 + 802c226: f1dc 0300 rsbs r3, ip, #0 + 802c22a: eb43 030c adc.w r3, r3, ip + 802c22e: 930e str r3, [sp, #56] ; 0x38 + 802c230: 4653 mov r3, sl + 802c232: f7f6 ffb6 bl 80231a2 <_ZN8touchgfx3LCD5realXERKNS_4RectEssNS_12TextRotationE> + 802c236: 4621 mov r1, r4 + 802c238: f8ad 005c strh.w r0, [sp, #92] ; 0x5c + 802c23c: 4653 mov r3, sl + 802c23e: 9a09 ldr r2, [sp, #36] ; 0x24 + 802c240: a814 add r0, sp, #80 ; 0x50 + 802c242: f7f6 ffcb bl 80231dc <_ZN8touchgfx3LCD5realYERKNS_4RectEssNS_12TextRotationE> + 802c246: a918 add r1, sp, #96 ; 0x60 + 802c248: f821 0d02 strh.w r0, [r1, #-2]! + 802c24c: a817 add r0, sp, #92 ; 0x5c + 802c24e: f7f7 f8f1 bl 8023434 <_ZN8touchgfx21DisplayTransformation29transformDisplayToFrameBufferERsS1_> + 802c252: f1ba 0f00 cmp.w sl, #0 + 802c256: f040 80f4 bne.w 802c442 <_ZN8touchgfx8LCD16bpp9drawGlyphEPtNS_4RectEssttRKS2_PKNS_9GlyphNodeEPKhhNS_9colortypeEhhNS_12TextRotationE+0x2ce> + 802c25a: f1bb 0f01 cmp.w fp, #1 + 802c25e: f040 80f8 bne.w 802c452 <_ZN8touchgfx8LCD16bpp9drawGlyphEPtNS_4RectEssttRKS2_PKNS_9GlyphNodeEPKhhNS_9colortypeEhhNS_12TextRotationE+0x2de> + 802c262: 9b10 ldr r3, [sp, #64] ; 0x40 + 802c264: 2b00 cmp r3, #0 + 802c266: f040 8145 bne.w 802c4f4 <_ZN8touchgfx8LCD16bpp9drawGlyphEPtNS_4RectEssttRKS2_PKNS_9GlyphNodeEPKhhNS_9colortypeEhhNS_12TextRotationE+0x380> + 802c26a: b2ba uxth r2, r7 + 802c26c: b905 cbnz r5, 802c270 <_ZN8touchgfx8LCD16bpp9drawGlyphEPtNS_4RectEssttRKS2_PKNS_9GlyphNodeEPKhhNS_9colortypeEhhNS_12TextRotationE+0xfc> + 802c26e: b16e cbz r6, 802c28c <_ZN8touchgfx8LCD16bpp9drawGlyphEPtNS_4RectEssttRKS2_PKNS_9GlyphNodeEPKhhNS_9colortypeEhhNS_12TextRotationE+0x118> + 802c270: fb06 5302 mla r3, r6, r2, r5 + 802c274: 9828 ldr r0, [sp, #160] ; 0xa0 + 802c276: 4631 mov r1, r6 + 802c278: fb08 f303 mul.w r3, r8, r3 + 802c27c: f003 0607 and.w r6, r3, #7 + 802c280: eb00 03d3 add.w r3, r0, r3, lsr #3 + 802c284: 9328 str r3, [sp, #160] ; 0xa0 + 802c286: eba9 0301 sub.w r3, r9, r1 + 802c28a: 930a str r3, [sp, #40] ; 0x28 + 802c28c: 4651 mov r1, sl + 802c28e: 980e ldr r0, [sp, #56] ; 0x38 + 802c290: f7ff ff1c bl 802c0cc <_ZN8touchgfx8LCD16bpp9nextPixelEbNS_12TextRotationE> + 802c294: 4681 mov r9, r0 + 802c296: 980e ldr r0, [sp, #56] ; 0x38 + 802c298: f7ff ff42 bl 802c120 <_ZN8touchgfx8LCD16bpp8nextLineEbNS_12TextRotationE> + 802c29c: 9b0d ldr r3, [sp, #52] ; 0x34 + 802c29e: 9909 ldr r1, [sp, #36] ; 0x24 + 802c2a0: 4683 mov fp, r0 + 802c2a2: eba3 0a01 sub.w sl, r3, r1 + 802c2a6: 9b0a ldr r3, [sp, #40] ; 0x28 + 802c2a8: 459a cmp sl, r3 + 802c2aa: bfa8 it ge + 802c2ac: 469a movge sl, r3 + 802c2ae: f1ba 0f00 cmp.w sl, #0 + 802c2b2: f340 811a ble.w 802c4ea <_ZN8touchgfx8LCD16bpp9drawGlyphEPtNS_4RectEssttRKS2_PKNS_9GlyphNodeEPKhhNS_9colortypeEhhNS_12TextRotationE+0x376> + 802c2b6: 1b64 subs r4, r4, r5 + 802c2b8: 9b0f ldr r3, [sp, #60] ; 0x3c + 802c2ba: 1b1c subs r4, r3, r4 + 802c2bc: 42bc cmp r4, r7 + 802c2be: bfd4 ite le + 802c2c0: ebc5 0504 rsble r5, r5, r4 + 802c2c4: ebc5 0507 rsbgt r5, r5, r7 + 802c2c8: 2d00 cmp r5, #0 + 802c2ca: f340 810e ble.w 802c4ea <_ZN8touchgfx8LCD16bpp9drawGlyphEPtNS_4RectEssttRKS2_PKNS_9GlyphNodeEPKhhNS_9colortypeEhhNS_12TextRotationE+0x376> + 802c2ce: 1b52 subs r2, r2, r5 + 802c2d0: fb08 f302 mul.w r3, r8, r2 + 802c2d4: 930f str r3, [sp, #60] ; 0x3c + 802c2d6: 9b0b ldr r3, [sp, #44] ; 0x2c + 802c2d8: 2b00 cmp r3, #0 + 802c2da: f040 8116 bne.w 802c50a <_ZN8touchgfx8LCD16bpp9drawGlyphEPtNS_4RectEssttRKS2_PKNS_9GlyphNodeEPKhhNS_9colortypeEhhNS_12TextRotationE+0x396> + 802c2de: 4b8e ldr r3, [pc, #568] ; (802c518 <_ZN8touchgfx8LCD16bpp9drawGlyphEPtNS_4RectEssttRKS2_PKNS_9GlyphNodeEPKhhNS_9colortypeEhhNS_12TextRotationE+0x3a4>) + 802c2e0: 6818 ldr r0, [r3, #0] + 802c2e2: 6803 ldr r3, [r0, #0] + 802c2e4: 6a9b ldr r3, [r3, #40] ; 0x28 + 802c2e6: 4798 blx r3 + 802c2e8: 2301 movs r3, #1 + 802c2ea: 4a8c ldr r2, [pc, #560] ; (802c51c <_ZN8touchgfx8LCD16bpp9drawGlyphEPtNS_4RectEssttRKS2_PKNS_9GlyphNodeEPKhhNS_9colortypeEhhNS_12TextRotationE+0x3a8>) + 802c2ec: fa03 f308 lsl.w r3, r3, r8 + 802c2f0: 8811 ldrh r1, [r2, #0] + 802c2f2: f9bd 205c ldrsh.w r2, [sp, #92] ; 0x5c + 802c2f6: 3b01 subs r3, #1 + 802c2f8: b2db uxtb r3, r3 + 802c2fa: 930e str r3, [sp, #56] ; 0x38 + 802c2fc: f9bd 305e ldrsh.w r3, [sp, #94] ; 0x5e + 802c300: fb01 2303 mla r3, r1, r3, r2 + 802c304: eb00 0343 add.w r3, r0, r3, lsl #1 + 802c308: 930a str r3, [sp, #40] ; 0x28 + 802c30a: 9b2a ldr r3, [sp, #168] ; 0xa8 + 802c30c: f3c3 4307 ubfx r3, r3, #16, #8 + 802c310: 9313 str r3, [sp, #76] ; 0x4c + 802c312: 9b2a ldr r3, [sp, #168] ; 0xa8 + 802c314: 0a19 lsrs r1, r3, #8 + 802c316: b2cb uxtb r3, r1 + 802c318: 9312 str r3, [sp, #72] ; 0x48 + 802c31a: 9b2a ldr r3, [sp, #168] ; 0xa8 + 802c31c: b2db uxtb r3, r3 + 802c31e: 9311 str r3, [sp, #68] ; 0x44 + 802c320: 9b2a ldr r3, [sp, #168] ; 0xa8 + 802c322: 095a lsrs r2, r3, #5 + 802c324: 4b7e ldr r3, [pc, #504] ; (802c520 <_ZN8touchgfx8LCD16bpp9drawGlyphEPtNS_4RectEssttRKS2_PKNS_9GlyphNodeEPKhhNS_9colortypeEhhNS_12TextRotationE+0x3ac>) + 802c326: f402 62fc and.w r2, r2, #2016 ; 0x7e0 + 802c32a: 400b ands r3, r1 + 802c32c: 4313 orrs r3, r2 + 802c32e: 9a2a ldr r2, [sp, #168] ; 0xa8 + 802c330: f3c2 02c4 ubfx r2, r2, #3, #5 + 802c334: 4313 orrs r3, r2 + 802c336: b29b uxth r3, r3 + 802c338: 9310 str r3, [sp, #64] ; 0x40 + 802c33a: 9b28 ldr r3, [sp, #160] ; 0xa0 + 802c33c: 781a ldrb r2, [r3, #0] + 802c33e: ea4f 0349 mov.w r3, r9, lsl #1 + 802c342: fb05 b919 mls r9, r5, r9, fp + 802c346: 4132 asrs r2, r6 + 802c348: fb03 fb05 mul.w fp, r3, r5 + 802c34c: 930d str r3, [sp, #52] ; 0x34 + 802c34e: b2d2 uxtb r2, r2 + 802c350: eb0b 0b49 add.w fp, fp, r9, lsl #1 + 802c354: f11a 3aff adds.w sl, sl, #4294967295 + 802c358: f0c0 80f5 bcc.w 802c546 <_ZN8touchgfx8LCD16bpp9drawGlyphEPtNS_4RectEssttRKS2_PKNS_9GlyphNodeEPKhhNS_9colortypeEhhNS_12TextRotationE+0x3d2> + 802c35c: 46ae mov lr, r5 + 802c35e: f8dd c028 ldr.w ip, [sp, #40] ; 0x28 + 802c362: f11e 3eff adds.w lr, lr, #4294967295 + 802c366: f0c0 80dd bcc.w 802c524 <_ZN8touchgfx8LCD16bpp9drawGlyphEPtNS_4RectEssttRKS2_PKNS_9GlyphNodeEPKhhNS_9colortypeEhhNS_12TextRotationE+0x3b0> + 802c36a: 9b0e ldr r3, [sp, #56] ; 0x38 + 802c36c: 4013 ands r3, r2 + 802c36e: d055 beq.n 802c41c <_ZN8touchgfx8LCD16bpp9drawGlyphEPtNS_4RectEssttRKS2_PKNS_9GlyphNodeEPKhhNS_9colortypeEhhNS_12TextRotationE+0x2a8> + 802c370: 20ff movs r0, #255 ; 0xff + 802c372: 990e ldr r1, [sp, #56] ; 0x38 + 802c374: fb90 f1f1 sdiv r1, r0, r1 + 802c378: 434b muls r3, r1 + 802c37a: 2bfe cmp r3, #254 ; 0xfe + 802c37c: dd03 ble.n 802c386 <_ZN8touchgfx8LCD16bpp9drawGlyphEPtNS_4RectEssttRKS2_PKNS_9GlyphNodeEPKhhNS_9colortypeEhhNS_12TextRotationE+0x212> + 802c37e: 990c ldr r1, [sp, #48] ; 0x30 + 802c380: 4281 cmp r1, r0 + 802c382: f000 80c4 beq.w 802c50e <_ZN8touchgfx8LCD16bpp9drawGlyphEPtNS_4RectEssttRKS2_PKNS_9GlyphNodeEPKhhNS_9colortypeEhhNS_12TextRotationE+0x39a> + 802c386: 990c ldr r1, [sp, #48] ; 0x30 + 802c388: f8bc 4000 ldrh.w r4, [ip] + 802c38c: fb11 f303 smulbb r3, r1, r3 + 802c390: 1220 asrs r0, r4, #8 + 802c392: b29b uxth r3, r3 + 802c394: f000 00f8 and.w r0, r0, #248 ; 0xf8 + 802c398: 1c59 adds r1, r3, #1 + 802c39a: ea40 1050 orr.w r0, r0, r0, lsr #5 + 802c39e: eb01 2313 add.w r3, r1, r3, lsr #8 + 802c3a2: 10e1 asrs r1, r4, #3 + 802c3a4: f3c3 2307 ubfx r3, r3, #8, #8 + 802c3a8: 00e4 lsls r4, r4, #3 + 802c3aa: f001 01fc and.w r1, r1, #252 ; 0xfc + 802c3ae: b29f uxth r7, r3 + 802c3b0: 43db mvns r3, r3 + 802c3b2: ea41 1191 orr.w r1, r1, r1, lsr #6 + 802c3b6: b2db uxtb r3, r3 + 802c3b8: b2e4 uxtb r4, r4 + 802c3ba: 9309 str r3, [sp, #36] ; 0x24 + 802c3bc: 9b13 ldr r3, [sp, #76] ; 0x4c + 802c3be: ea44 1454 orr.w r4, r4, r4, lsr #5 + 802c3c2: fb13 f907 smulbb r9, r3, r7 + 802c3c6: 9b09 ldr r3, [sp, #36] ; 0x24 + 802c3c8: fb00 9003 mla r0, r0, r3, r9 + 802c3cc: 9b12 ldr r3, [sp, #72] ; 0x48 + 802c3ce: fb13 f907 smulbb r9, r3, r7 + 802c3d2: 9b09 ldr r3, [sp, #36] ; 0x24 + 802c3d4: b280 uxth r0, r0 + 802c3d6: fb01 9103 mla r1, r1, r3, r9 + 802c3da: 9b11 ldr r3, [sp, #68] ; 0x44 + 802c3dc: fb13 f707 smulbb r7, r3, r7 + 802c3e0: 9b09 ldr r3, [sp, #36] ; 0x24 + 802c3e2: b289 uxth r1, r1 + 802c3e4: fb04 7403 mla r4, r4, r3, r7 + 802c3e8: 1c43 adds r3, r0, #1 + 802c3ea: b2a4 uxth r4, r4 + 802c3ec: eb03 2010 add.w r0, r3, r0, lsr #8 + 802c3f0: f104 0901 add.w r9, r4, #1 + 802c3f4: f400 4078 and.w r0, r0, #63488 ; 0xf800 + 802c3f8: eb09 2914 add.w r9, r9, r4, lsr #8 + 802c3fc: f3c9 29c4 ubfx r9, r9, #11, #5 + 802c400: ea49 0000 orr.w r0, r9, r0 + 802c404: f101 0901 add.w r9, r1, #1 + 802c408: eb09 2911 add.w r9, r9, r1, lsr #8 + 802c40c: ea4f 1959 mov.w r9, r9, lsr #5 + 802c410: f409 69fc and.w r9, r9, #2016 ; 0x7e0 + 802c414: ea40 0009 orr.w r0, r0, r9 + 802c418: f8ac 0000 strh.w r0, [ip] + 802c41c: 4446 add r6, r8 + 802c41e: b2b6 uxth r6, r6 + 802c420: 2e07 cmp r6, #7 + 802c422: bf89 itett hi + 802c424: 9b28 ldrhi r3, [sp, #160] ; 0xa0 + 802c426: fa42 f208 asrls.w r2, r2, r8 + 802c42a: 2600 movhi r6, #0 + 802c42c: 785a ldrbhi r2, [r3, #1] + 802c42e: bf8a itet hi + 802c430: 3301 addhi r3, #1 + 802c432: b2d2 uxtbls r2, r2 + 802c434: 9328 strhi r3, [sp, #160] ; 0xa0 + 802c436: 9b0d ldr r3, [sp, #52] ; 0x34 + 802c438: 449c add ip, r3 + 802c43a: e792 b.n 802c362 <_ZN8touchgfx8LCD16bpp9drawGlyphEPtNS_4RectEssttRKS2_PKNS_9GlyphNodeEPKhhNS_9colortypeEhhNS_12TextRotationE+0x1ee> + 802c43c: 441c add r4, r3 + 802c43e: b224 sxth r4, r4 + 802c440: e6d5 b.n 802c1ee <_ZN8touchgfx8LCD16bpp9drawGlyphEPtNS_4RectEssttRKS2_PKNS_9GlyphNodeEPKhhNS_9colortypeEhhNS_12TextRotationE+0x7a> + 802c442: f1ba 0f01 cmp.w sl, #1 + 802c446: f47f af0c bne.w 802c262 <_ZN8touchgfx8LCD16bpp9drawGlyphEPtNS_4RectEssttRKS2_PKNS_9GlyphNodeEPKhhNS_9colortypeEhhNS_12TextRotationE+0xee> + 802c44a: f1bb 0f01 cmp.w fp, #1 + 802c44e: f47f af08 bne.w 802c262 <_ZN8touchgfx8LCD16bpp9drawGlyphEPtNS_4RectEssttRKS2_PKNS_9GlyphNodeEPKhhNS_9colortypeEhhNS_12TextRotationE+0xee> + 802c452: f8df b0c4 ldr.w fp, [pc, #196] ; 802c518 <_ZN8touchgfx8LCD16bpp9drawGlyphEPtNS_4RectEssttRKS2_PKNS_9GlyphNodeEPKhhNS_9colortypeEhhNS_12TextRotationE+0x3a4> + 802c456: f8db 0000 ldr.w r0, [fp] + 802c45a: 6803 ldr r3, [r0, #0] + 802c45c: 6b9b ldr r3, [r3, #56] ; 0x38 + 802c45e: 4798 blx r3 + 802c460: f410 7380 ands.w r3, r0, #256 ; 0x100 + 802c464: 465a mov r2, fp + 802c466: d006 beq.n 802c476 <_ZN8touchgfx8LCD16bpp9drawGlyphEPtNS_4RectEssttRKS2_PKNS_9GlyphNodeEPKhhNS_9colortypeEhhNS_12TextRotationE+0x302> + 802c468: f1b8 0f04 cmp.w r8, #4 + 802c46c: d140 bne.n 802c4f0 <_ZN8touchgfx8LCD16bpp9drawGlyphEPtNS_4RectEssttRKS2_PKNS_9GlyphNodeEPKhhNS_9colortypeEhhNS_12TextRotationE+0x37c> + 802c46e: 9b10 ldr r3, [sp, #64] ; 0x40 + 802c470: 3300 adds r3, #0 + 802c472: bf18 it ne + 802c474: 2301 movne r3, #1 + 802c476: 0580 lsls r0, r0, #22 + 802c478: d56e bpl.n 802c558 <_ZN8touchgfx8LCD16bpp9drawGlyphEPtNS_4RectEssttRKS2_PKNS_9GlyphNodeEPKhhNS_9colortypeEhhNS_12TextRotationE+0x3e4> + 802c47a: f1b8 0f08 cmp.w r8, #8 + 802c47e: d16b bne.n 802c558 <_ZN8touchgfx8LCD16bpp9drawGlyphEPtNS_4RectEssttRKS2_PKNS_9GlyphNodeEPKhhNS_9colortypeEhhNS_12TextRotationE+0x3e4> + 802c480: 2b00 cmp r3, #0 + 802c482: bf0c ite eq + 802c484: f44f 7100 moveq.w r1, #512 ; 0x200 + 802c488: f44f 7180 movne.w r1, #256 ; 0x100 + 802c48c: 2d00 cmp r5, #0 + 802c48e: f47f aee8 bne.w 802c262 <_ZN8touchgfx8LCD16bpp9drawGlyphEPtNS_4RectEssttRKS2_PKNS_9GlyphNodeEPKhhNS_9colortypeEhhNS_12TextRotationE+0xee> + 802c492: 2e00 cmp r6, #0 + 802c494: f47f aee5 bne.w 802c262 <_ZN8touchgfx8LCD16bpp9drawGlyphEPtNS_4RectEssttRKS2_PKNS_9GlyphNodeEPKhhNS_9colortypeEhhNS_12TextRotationE+0xee> + 802c498: 19e3 adds r3, r4, r7 + 802c49a: 980f ldr r0, [sp, #60] ; 0x3c + 802c49c: 4283 cmp r3, r0 + 802c49e: f73f aee0 bgt.w 802c262 <_ZN8touchgfx8LCD16bpp9drawGlyphEPtNS_4RectEssttRKS2_PKNS_9GlyphNodeEPKhhNS_9colortypeEhhNS_12TextRotationE+0xee> + 802c4a2: 9b09 ldr r3, [sp, #36] ; 0x24 + 802c4a4: 980d ldr r0, [sp, #52] ; 0x34 + 802c4a6: 444b add r3, r9 + 802c4a8: 4283 cmp r3, r0 + 802c4aa: f73f aeda bgt.w 802c262 <_ZN8touchgfx8LCD16bpp9drawGlyphEPtNS_4RectEssttRKS2_PKNS_9GlyphNodeEPKhhNS_9colortypeEhhNS_12TextRotationE+0xee> + 802c4ae: b2bf uxth r7, r7 + 802c4b0: f1b8 0f08 cmp.w r8, #8 + 802c4b4: 6810 ldr r0, [r2, #0] + 802c4b6: f04f 0500 mov.w r5, #0 + 802c4ba: bf18 it ne + 802c4bc: 3701 addne r7, #1 + 802c4be: f8bd 305e ldrh.w r3, [sp, #94] ; 0x5e + 802c4c2: 6804 ldr r4, [r0, #0] + 802c4c4: bf18 it ne + 802c4c6: f027 0701 bicne.w r7, r7, #1 + 802c4ca: f8bd 205c ldrh.w r2, [sp, #92] ; 0x5c + 802c4ce: e9cd 1505 strd r1, r5, [sp, #20] + 802c4d2: 990c ldr r1, [sp, #48] ; 0x30 + 802c4d4: bf18 it ne + 802c4d6: b2bf uxthne r7, r7 + 802c4d8: 9104 str r1, [sp, #16] + 802c4da: 992a ldr r1, [sp, #168] ; 0xa8 + 802c4dc: e9cd 7900 strd r7, r9, [sp] + 802c4e0: e9cd 7102 strd r7, r1, [sp, #8] + 802c4e4: 9928 ldr r1, [sp, #160] ; 0xa0 + 802c4e6: 6d64 ldr r4, [r4, #84] ; 0x54 + 802c4e8: 47a0 blx r4 + 802c4ea: b019 add sp, #100 ; 0x64 + 802c4ec: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 802c4f0: 2300 movs r3, #0 + 802c4f2: e7c0 b.n 802c476 <_ZN8touchgfx8LCD16bpp9drawGlyphEPtNS_4RectEssttRKS2_PKNS_9GlyphNodeEPKhhNS_9colortypeEhhNS_12TextRotationE+0x302> + 802c4f4: 2208 movs r2, #8 + 802c4f6: fb92 f3f8 sdiv r3, r2, r8 + 802c4fa: 1e5a subs r2, r3, #1 + 802c4fc: 443a add r2, r7 + 802c4fe: fb92 f2f3 sdiv r2, r2, r3 + 802c502: fb12 f203 smulbb r2, r2, r3 + 802c506: b292 uxth r2, r2 + 802c508: e6b0 b.n 802c26c <_ZN8touchgfx8LCD16bpp9drawGlyphEPtNS_4RectEssttRKS2_PKNS_9GlyphNodeEPKhhNS_9colortypeEhhNS_12TextRotationE+0xf8> + 802c50a: 980b ldr r0, [sp, #44] ; 0x2c + 802c50c: e6ec b.n 802c2e8 <_ZN8touchgfx8LCD16bpp9drawGlyphEPtNS_4RectEssttRKS2_PKNS_9GlyphNodeEPKhhNS_9colortypeEhhNS_12TextRotationE+0x174> + 802c50e: 9810 ldr r0, [sp, #64] ; 0x40 + 802c510: e782 b.n 802c418 <_ZN8touchgfx8LCD16bpp9drawGlyphEPtNS_4RectEssttRKS2_PKNS_9GlyphNodeEPKhhNS_9colortypeEhhNS_12TextRotationE+0x2a4> + 802c512: bf00 nop + 802c514: 2001e72c .word 0x2001e72c + 802c518: 2001e734 .word 0x2001e734 + 802c51c: 2001e72e .word 0x2001e72e + 802c520: 00fff800 .word 0x00fff800 + 802c524: 9b0f ldr r3, [sp, #60] ; 0x3c + 802c526: b153 cbz r3, 802c53e <_ZN8touchgfx8LCD16bpp9drawGlyphEPtNS_4RectEssttRKS2_PKNS_9GlyphNodeEPKhhNS_9colortypeEhhNS_12TextRotationE+0x3ca> + 802c528: 441e add r6, r3 + 802c52a: 9b28 ldr r3, [sp, #160] ; 0xa0 + 802c52c: b2b6 uxth r6, r6 + 802c52e: eb03 03d6 add.w r3, r3, r6, lsr #3 + 802c532: f006 0607 and.w r6, r6, #7 + 802c536: 781a ldrb r2, [r3, #0] + 802c538: 9328 str r3, [sp, #160] ; 0xa0 + 802c53a: 4132 asrs r2, r6 + 802c53c: b2d2 uxtb r2, r2 + 802c53e: 9b0a ldr r3, [sp, #40] ; 0x28 + 802c540: 445b add r3, fp + 802c542: 930a str r3, [sp, #40] ; 0x28 + 802c544: e706 b.n 802c354 <_ZN8touchgfx8LCD16bpp9drawGlyphEPtNS_4RectEssttRKS2_PKNS_9GlyphNodeEPKhhNS_9colortypeEhhNS_12TextRotationE+0x1e0> + 802c546: 9b0b ldr r3, [sp, #44] ; 0x2c + 802c548: 2b00 cmp r3, #0 + 802c54a: d1ce bne.n 802c4ea <_ZN8touchgfx8LCD16bpp9drawGlyphEPtNS_4RectEssttRKS2_PKNS_9GlyphNodeEPKhhNS_9colortypeEhhNS_12TextRotationE+0x376> + 802c54c: 4b05 ldr r3, [pc, #20] ; (802c564 <_ZN8touchgfx8LCD16bpp9drawGlyphEPtNS_4RectEssttRKS2_PKNS_9GlyphNodeEPKhhNS_9colortypeEhhNS_12TextRotationE+0x3f0>) + 802c54e: 6818 ldr r0, [r3, #0] + 802c550: 6803 ldr r3, [r0, #0] + 802c552: 6adb ldr r3, [r3, #44] ; 0x2c + 802c554: 4798 blx r3 + 802c556: e7c8 b.n 802c4ea <_ZN8touchgfx8LCD16bpp9drawGlyphEPtNS_4RectEssttRKS2_PKNS_9GlyphNodeEPKhhNS_9colortypeEhhNS_12TextRotationE+0x376> + 802c558: 2b00 cmp r3, #0 + 802c55a: f43f ae82 beq.w 802c262 <_ZN8touchgfx8LCD16bpp9drawGlyphEPtNS_4RectEssttRKS2_PKNS_9GlyphNodeEPKhhNS_9colortypeEhhNS_12TextRotationE+0xee> + 802c55e: f44f 7180 mov.w r1, #256 ; 0x100 + 802c562: e793 b.n 802c48c <_ZN8touchgfx8LCD16bpp9drawGlyphEPtNS_4RectEssttRKS2_PKNS_9GlyphNodeEPKhhNS_9colortypeEhhNS_12TextRotationE+0x318> + 802c564: 2001e734 .word 0x2001e734 + +0802c568 <_ZN8touchgfx8LCD16bpp50enableTextureMapperL8_RGB565_BilinearInterpolationEv>: + 802c568: b538 push {r3, r4, r5, lr} + 802c56a: 4c15 ldr r4, [pc, #84] ; (802c5c0 <_ZN8touchgfx8LCD16bpp50enableTextureMapperL8_RGB565_BilinearInterpolationEv+0x58>) + 802c56c: 4605 mov r5, r0 + 802c56e: 7823 ldrb r3, [r4, #0] + 802c570: f3bf 8f5b dmb ish + 802c574: 07da lsls r2, r3, #31 + 802c576: d40b bmi.n 802c590 <_ZN8touchgfx8LCD16bpp50enableTextureMapperL8_RGB565_BilinearInterpolationEv+0x28> + 802c578: 4620 mov r0, r4 + 802c57a: f007 febe bl 80342fa <__cxa_guard_acquire> + 802c57e: b138 cbz r0, 802c590 <_ZN8touchgfx8LCD16bpp50enableTextureMapperL8_RGB565_BilinearInterpolationEv+0x28> + 802c580: 4620 mov r0, r4 + 802c582: f007 fec6 bl 8034312 <__cxa_guard_release> + 802c586: 4a0f ldr r2, [pc, #60] ; (802c5c4 <_ZN8touchgfx8LCD16bpp50enableTextureMapperL8_RGB565_BilinearInterpolationEv+0x5c>) + 802c588: 490f ldr r1, [pc, #60] ; (802c5c8 <_ZN8touchgfx8LCD16bpp50enableTextureMapperL8_RGB565_BilinearInterpolationEv+0x60>) + 802c58a: 4810 ldr r0, [pc, #64] ; (802c5cc <_ZN8touchgfx8LCD16bpp50enableTextureMapperL8_RGB565_BilinearInterpolationEv+0x64>) + 802c58c: f007 feae bl 80342ec <__aeabi_atexit> + 802c590: 4c0f ldr r4, [pc, #60] ; (802c5d0 <_ZN8touchgfx8LCD16bpp50enableTextureMapperL8_RGB565_BilinearInterpolationEv+0x68>) + 802c592: 7823 ldrb r3, [r4, #0] + 802c594: f3bf 8f5b dmb ish + 802c598: 07db lsls r3, r3, #31 + 802c59a: d40b bmi.n 802c5b4 <_ZN8touchgfx8LCD16bpp50enableTextureMapperL8_RGB565_BilinearInterpolationEv+0x4c> + 802c59c: 4620 mov r0, r4 + 802c59e: f007 feac bl 80342fa <__cxa_guard_acquire> + 802c5a2: b138 cbz r0, 802c5b4 <_ZN8touchgfx8LCD16bpp50enableTextureMapperL8_RGB565_BilinearInterpolationEv+0x4c> + 802c5a4: 4620 mov r0, r4 + 802c5a6: f007 feb4 bl 8034312 <__cxa_guard_release> + 802c5aa: 4a06 ldr r2, [pc, #24] ; (802c5c4 <_ZN8touchgfx8LCD16bpp50enableTextureMapperL8_RGB565_BilinearInterpolationEv+0x5c>) + 802c5ac: 4909 ldr r1, [pc, #36] ; (802c5d4 <_ZN8touchgfx8LCD16bpp50enableTextureMapperL8_RGB565_BilinearInterpolationEv+0x6c>) + 802c5ae: 480a ldr r0, [pc, #40] ; (802c5d8 <_ZN8touchgfx8LCD16bpp50enableTextureMapperL8_RGB565_BilinearInterpolationEv+0x70>) + 802c5b0: f007 fe9c bl 80342ec <__aeabi_atexit> + 802c5b4: 4b05 ldr r3, [pc, #20] ; (802c5cc <_ZN8touchgfx8LCD16bpp50enableTextureMapperL8_RGB565_BilinearInterpolationEv+0x64>) + 802c5b6: 612b str r3, [r5, #16] + 802c5b8: 4b07 ldr r3, [pc, #28] ; (802c5d8 <_ZN8touchgfx8LCD16bpp50enableTextureMapperL8_RGB565_BilinearInterpolationEv+0x70>) + 802c5ba: 616b str r3, [r5, #20] + 802c5bc: bd38 pop {r3, r4, r5, pc} + 802c5be: bf00 nop + 802c5c0: 2001e80c .word 0x2001e80c + 802c5c4: 20000000 .word 0x20000000 + 802c5c8: 0802934f .word 0x0802934f + 802c5cc: 200000ac .word 0x200000ac + 802c5d0: 2001e810 .word 0x2001e810 + 802c5d4: 0802934d .word 0x0802934d + 802c5d8: 200000b0 .word 0x200000b0 + +0802c5dc <_ZN8touchgfx8LCD16bpp44enableTextureMapperL8_RGB565_NearestNeighborEv>: + 802c5dc: b538 push {r3, r4, r5, lr} + 802c5de: 4c15 ldr r4, [pc, #84] ; (802c634 <_ZN8touchgfx8LCD16bpp44enableTextureMapperL8_RGB565_NearestNeighborEv+0x58>) + 802c5e0: 4605 mov r5, r0 + 802c5e2: 7823 ldrb r3, [r4, #0] + 802c5e4: f3bf 8f5b dmb ish + 802c5e8: 07da lsls r2, r3, #31 + 802c5ea: d40b bmi.n 802c604 <_ZN8touchgfx8LCD16bpp44enableTextureMapperL8_RGB565_NearestNeighborEv+0x28> + 802c5ec: 4620 mov r0, r4 + 802c5ee: f007 fe84 bl 80342fa <__cxa_guard_acquire> + 802c5f2: b138 cbz r0, 802c604 <_ZN8touchgfx8LCD16bpp44enableTextureMapperL8_RGB565_NearestNeighborEv+0x28> + 802c5f4: 4620 mov r0, r4 + 802c5f6: f007 fe8c bl 8034312 <__cxa_guard_release> + 802c5fa: 4a0f ldr r2, [pc, #60] ; (802c638 <_ZN8touchgfx8LCD16bpp44enableTextureMapperL8_RGB565_NearestNeighborEv+0x5c>) + 802c5fc: 490f ldr r1, [pc, #60] ; (802c63c <_ZN8touchgfx8LCD16bpp44enableTextureMapperL8_RGB565_NearestNeighborEv+0x60>) + 802c5fe: 4810 ldr r0, [pc, #64] ; (802c640 <_ZN8touchgfx8LCD16bpp44enableTextureMapperL8_RGB565_NearestNeighborEv+0x64>) + 802c600: f007 fe74 bl 80342ec <__aeabi_atexit> + 802c604: 4c0f ldr r4, [pc, #60] ; (802c644 <_ZN8touchgfx8LCD16bpp44enableTextureMapperL8_RGB565_NearestNeighborEv+0x68>) + 802c606: 7823 ldrb r3, [r4, #0] + 802c608: f3bf 8f5b dmb ish + 802c60c: 07db lsls r3, r3, #31 + 802c60e: d40b bmi.n 802c628 <_ZN8touchgfx8LCD16bpp44enableTextureMapperL8_RGB565_NearestNeighborEv+0x4c> + 802c610: 4620 mov r0, r4 + 802c612: f007 fe72 bl 80342fa <__cxa_guard_acquire> + 802c616: b138 cbz r0, 802c628 <_ZN8touchgfx8LCD16bpp44enableTextureMapperL8_RGB565_NearestNeighborEv+0x4c> + 802c618: 4620 mov r0, r4 + 802c61a: f007 fe7a bl 8034312 <__cxa_guard_release> + 802c61e: 4a06 ldr r2, [pc, #24] ; (802c638 <_ZN8touchgfx8LCD16bpp44enableTextureMapperL8_RGB565_NearestNeighborEv+0x5c>) + 802c620: 4909 ldr r1, [pc, #36] ; (802c648 <_ZN8touchgfx8LCD16bpp44enableTextureMapperL8_RGB565_NearestNeighborEv+0x6c>) + 802c622: 480a ldr r0, [pc, #40] ; (802c64c <_ZN8touchgfx8LCD16bpp44enableTextureMapperL8_RGB565_NearestNeighborEv+0x70>) + 802c624: f007 fe62 bl 80342ec <__aeabi_atexit> + 802c628: 4b05 ldr r3, [pc, #20] ; (802c640 <_ZN8touchgfx8LCD16bpp44enableTextureMapperL8_RGB565_NearestNeighborEv+0x64>) + 802c62a: 60ab str r3, [r5, #8] + 802c62c: 4b07 ldr r3, [pc, #28] ; (802c64c <_ZN8touchgfx8LCD16bpp44enableTextureMapperL8_RGB565_NearestNeighborEv+0x70>) + 802c62e: 60eb str r3, [r5, #12] + 802c630: bd38 pop {r3, r4, r5, pc} + 802c632: bf00 nop + 802c634: 2001e7e4 .word 0x2001e7e4 + 802c638: 20000000 .word 0x20000000 + 802c63c: 08029353 .word 0x08029353 + 802c640: 20000084 .word 0x20000084 + 802c644: 2001e7e8 .word 0x2001e7e8 + 802c648: 08029351 .word 0x08029351 + 802c64c: 20000088 .word 0x20000088 + +0802c650 <_ZN8touchgfx8LCD16bpp28enableTextureMapperL8_RGB565Ev>: + 802c650: b510 push {r4, lr} + 802c652: 4604 mov r4, r0 + 802c654: f7ff ff88 bl 802c568 <_ZN8touchgfx8LCD16bpp50enableTextureMapperL8_RGB565_BilinearInterpolationEv> + 802c658: 4620 mov r0, r4 + 802c65a: e8bd 4010 ldmia.w sp!, {r4, lr} + 802c65e: f7ff bfbd b.w 802c5dc <_ZN8touchgfx8LCD16bpp44enableTextureMapperL8_RGB565_NearestNeighborEv> + ... + +0802c664 <_ZN8touchgfx8LCD16bpp50enableTextureMapperL8_RGB888_BilinearInterpolationEv>: + 802c664: b538 push {r3, r4, r5, lr} + 802c666: 4c15 ldr r4, [pc, #84] ; (802c6bc <_ZN8touchgfx8LCD16bpp50enableTextureMapperL8_RGB888_BilinearInterpolationEv+0x58>) + 802c668: 4605 mov r5, r0 + 802c66a: 7823 ldrb r3, [r4, #0] + 802c66c: f3bf 8f5b dmb ish + 802c670: 07da lsls r2, r3, #31 + 802c672: d40b bmi.n 802c68c <_ZN8touchgfx8LCD16bpp50enableTextureMapperL8_RGB888_BilinearInterpolationEv+0x28> + 802c674: 4620 mov r0, r4 + 802c676: f007 fe40 bl 80342fa <__cxa_guard_acquire> + 802c67a: b138 cbz r0, 802c68c <_ZN8touchgfx8LCD16bpp50enableTextureMapperL8_RGB888_BilinearInterpolationEv+0x28> + 802c67c: 4620 mov r0, r4 + 802c67e: f007 fe48 bl 8034312 <__cxa_guard_release> + 802c682: 4a0f ldr r2, [pc, #60] ; (802c6c0 <_ZN8touchgfx8LCD16bpp50enableTextureMapperL8_RGB888_BilinearInterpolationEv+0x5c>) + 802c684: 490f ldr r1, [pc, #60] ; (802c6c4 <_ZN8touchgfx8LCD16bpp50enableTextureMapperL8_RGB888_BilinearInterpolationEv+0x60>) + 802c686: 4810 ldr r0, [pc, #64] ; (802c6c8 <_ZN8touchgfx8LCD16bpp50enableTextureMapperL8_RGB888_BilinearInterpolationEv+0x64>) + 802c688: f007 fe30 bl 80342ec <__aeabi_atexit> + 802c68c: 4c0f ldr r4, [pc, #60] ; (802c6cc <_ZN8touchgfx8LCD16bpp50enableTextureMapperL8_RGB888_BilinearInterpolationEv+0x68>) + 802c68e: 7823 ldrb r3, [r4, #0] + 802c690: f3bf 8f5b dmb ish + 802c694: 07db lsls r3, r3, #31 + 802c696: d40b bmi.n 802c6b0 <_ZN8touchgfx8LCD16bpp50enableTextureMapperL8_RGB888_BilinearInterpolationEv+0x4c> + 802c698: 4620 mov r0, r4 + 802c69a: f007 fe2e bl 80342fa <__cxa_guard_acquire> + 802c69e: b138 cbz r0, 802c6b0 <_ZN8touchgfx8LCD16bpp50enableTextureMapperL8_RGB888_BilinearInterpolationEv+0x4c> + 802c6a0: 4620 mov r0, r4 + 802c6a2: f007 fe36 bl 8034312 <__cxa_guard_release> + 802c6a6: 4a06 ldr r2, [pc, #24] ; (802c6c0 <_ZN8touchgfx8LCD16bpp50enableTextureMapperL8_RGB888_BilinearInterpolationEv+0x5c>) + 802c6a8: 4909 ldr r1, [pc, #36] ; (802c6d0 <_ZN8touchgfx8LCD16bpp50enableTextureMapperL8_RGB888_BilinearInterpolationEv+0x6c>) + 802c6aa: 480a ldr r0, [pc, #40] ; (802c6d4 <_ZN8touchgfx8LCD16bpp50enableTextureMapperL8_RGB888_BilinearInterpolationEv+0x70>) + 802c6ac: f007 fe1e bl 80342ec <__aeabi_atexit> + 802c6b0: 4b05 ldr r3, [pc, #20] ; (802c6c8 <_ZN8touchgfx8LCD16bpp50enableTextureMapperL8_RGB888_BilinearInterpolationEv+0x64>) + 802c6b2: 622b str r3, [r5, #32] + 802c6b4: 4b07 ldr r3, [pc, #28] ; (802c6d4 <_ZN8touchgfx8LCD16bpp50enableTextureMapperL8_RGB888_BilinearInterpolationEv+0x70>) + 802c6b6: 626b str r3, [r5, #36] ; 0x24 + 802c6b8: bd38 pop {r3, r4, r5, pc} + 802c6ba: bf00 nop + 802c6bc: 2001e814 .word 0x2001e814 + 802c6c0: 20000000 .word 0x20000000 + 802c6c4: 08029347 .word 0x08029347 + 802c6c8: 200000b4 .word 0x200000b4 + 802c6cc: 2001e818 .word 0x2001e818 + 802c6d0: 08029345 .word 0x08029345 + 802c6d4: 200000b8 .word 0x200000b8 + +0802c6d8 <_ZN8touchgfx8LCD16bpp44enableTextureMapperL8_RGB888_NearestNeighborEv>: + 802c6d8: b538 push {r3, r4, r5, lr} + 802c6da: 4c15 ldr r4, [pc, #84] ; (802c730 <_ZN8touchgfx8LCD16bpp44enableTextureMapperL8_RGB888_NearestNeighborEv+0x58>) + 802c6dc: 4605 mov r5, r0 + 802c6de: 7823 ldrb r3, [r4, #0] + 802c6e0: f3bf 8f5b dmb ish + 802c6e4: 07da lsls r2, r3, #31 + 802c6e6: d40b bmi.n 802c700 <_ZN8touchgfx8LCD16bpp44enableTextureMapperL8_RGB888_NearestNeighborEv+0x28> + 802c6e8: 4620 mov r0, r4 + 802c6ea: f007 fe06 bl 80342fa <__cxa_guard_acquire> + 802c6ee: b138 cbz r0, 802c700 <_ZN8touchgfx8LCD16bpp44enableTextureMapperL8_RGB888_NearestNeighborEv+0x28> + 802c6f0: 4620 mov r0, r4 + 802c6f2: f007 fe0e bl 8034312 <__cxa_guard_release> + 802c6f6: 4a0f ldr r2, [pc, #60] ; (802c734 <_ZN8touchgfx8LCD16bpp44enableTextureMapperL8_RGB888_NearestNeighborEv+0x5c>) + 802c6f8: 490f ldr r1, [pc, #60] ; (802c738 <_ZN8touchgfx8LCD16bpp44enableTextureMapperL8_RGB888_NearestNeighborEv+0x60>) + 802c6fa: 4810 ldr r0, [pc, #64] ; (802c73c <_ZN8touchgfx8LCD16bpp44enableTextureMapperL8_RGB888_NearestNeighborEv+0x64>) + 802c6fc: f007 fdf6 bl 80342ec <__aeabi_atexit> + 802c700: 4c0f ldr r4, [pc, #60] ; (802c740 <_ZN8touchgfx8LCD16bpp44enableTextureMapperL8_RGB888_NearestNeighborEv+0x68>) + 802c702: 7823 ldrb r3, [r4, #0] + 802c704: f3bf 8f5b dmb ish + 802c708: 07db lsls r3, r3, #31 + 802c70a: d40b bmi.n 802c724 <_ZN8touchgfx8LCD16bpp44enableTextureMapperL8_RGB888_NearestNeighborEv+0x4c> + 802c70c: 4620 mov r0, r4 + 802c70e: f007 fdf4 bl 80342fa <__cxa_guard_acquire> + 802c712: b138 cbz r0, 802c724 <_ZN8touchgfx8LCD16bpp44enableTextureMapperL8_RGB888_NearestNeighborEv+0x4c> + 802c714: 4620 mov r0, r4 + 802c716: f007 fdfc bl 8034312 <__cxa_guard_release> + 802c71a: 4a06 ldr r2, [pc, #24] ; (802c734 <_ZN8touchgfx8LCD16bpp44enableTextureMapperL8_RGB888_NearestNeighborEv+0x5c>) + 802c71c: 4909 ldr r1, [pc, #36] ; (802c744 <_ZN8touchgfx8LCD16bpp44enableTextureMapperL8_RGB888_NearestNeighborEv+0x6c>) + 802c71e: 480a ldr r0, [pc, #40] ; (802c748 <_ZN8touchgfx8LCD16bpp44enableTextureMapperL8_RGB888_NearestNeighborEv+0x70>) + 802c720: f007 fde4 bl 80342ec <__aeabi_atexit> + 802c724: 4b05 ldr r3, [pc, #20] ; (802c73c <_ZN8touchgfx8LCD16bpp44enableTextureMapperL8_RGB888_NearestNeighborEv+0x64>) + 802c726: 61ab str r3, [r5, #24] + 802c728: 4b07 ldr r3, [pc, #28] ; (802c748 <_ZN8touchgfx8LCD16bpp44enableTextureMapperL8_RGB888_NearestNeighborEv+0x70>) + 802c72a: 61eb str r3, [r5, #28] + 802c72c: bd38 pop {r3, r4, r5, pc} + 802c72e: bf00 nop + 802c730: 2001e7ec .word 0x2001e7ec + 802c734: 20000000 .word 0x20000000 + 802c738: 0802934b .word 0x0802934b + 802c73c: 2000008c .word 0x2000008c + 802c740: 2001e7f0 .word 0x2001e7f0 + 802c744: 08029349 .word 0x08029349 + 802c748: 20000090 .word 0x20000090 + +0802c74c <_ZN8touchgfx8LCD16bpp28enableTextureMapperL8_RGB888Ev>: + 802c74c: b510 push {r4, lr} + 802c74e: 4604 mov r4, r0 + 802c750: f7ff ff88 bl 802c664 <_ZN8touchgfx8LCD16bpp50enableTextureMapperL8_RGB888_BilinearInterpolationEv> + 802c754: 4620 mov r0, r4 + 802c756: e8bd 4010 ldmia.w sp!, {r4, lr} + 802c75a: f7ff bfbd b.w 802c6d8 <_ZN8touchgfx8LCD16bpp44enableTextureMapperL8_RGB888_NearestNeighborEv> + ... + +0802c760 <_ZN8touchgfx8LCD16bpp52enableTextureMapperL8_ARGB8888_BilinearInterpolationEv>: + 802c760: b538 push {r3, r4, r5, lr} + 802c762: 4c15 ldr r4, [pc, #84] ; (802c7b8 <_ZN8touchgfx8LCD16bpp52enableTextureMapperL8_ARGB8888_BilinearInterpolationEv+0x58>) + 802c764: 4605 mov r5, r0 + 802c766: 7823 ldrb r3, [r4, #0] + 802c768: f3bf 8f5b dmb ish + 802c76c: 07da lsls r2, r3, #31 + 802c76e: d40b bmi.n 802c788 <_ZN8touchgfx8LCD16bpp52enableTextureMapperL8_ARGB8888_BilinearInterpolationEv+0x28> + 802c770: 4620 mov r0, r4 + 802c772: f007 fdc2 bl 80342fa <__cxa_guard_acquire> + 802c776: b138 cbz r0, 802c788 <_ZN8touchgfx8LCD16bpp52enableTextureMapperL8_ARGB8888_BilinearInterpolationEv+0x28> + 802c778: 4620 mov r0, r4 + 802c77a: f007 fdca bl 8034312 <__cxa_guard_release> + 802c77e: 4a0f ldr r2, [pc, #60] ; (802c7bc <_ZN8touchgfx8LCD16bpp52enableTextureMapperL8_ARGB8888_BilinearInterpolationEv+0x5c>) + 802c780: 490f ldr r1, [pc, #60] ; (802c7c0 <_ZN8touchgfx8LCD16bpp52enableTextureMapperL8_ARGB8888_BilinearInterpolationEv+0x60>) + 802c782: 4810 ldr r0, [pc, #64] ; (802c7c4 <_ZN8touchgfx8LCD16bpp52enableTextureMapperL8_ARGB8888_BilinearInterpolationEv+0x64>) + 802c784: f007 fdb2 bl 80342ec <__aeabi_atexit> + 802c788: 4c0f ldr r4, [pc, #60] ; (802c7c8 <_ZN8touchgfx8LCD16bpp52enableTextureMapperL8_ARGB8888_BilinearInterpolationEv+0x68>) + 802c78a: 7823 ldrb r3, [r4, #0] + 802c78c: f3bf 8f5b dmb ish + 802c790: 07db lsls r3, r3, #31 + 802c792: d40b bmi.n 802c7ac <_ZN8touchgfx8LCD16bpp52enableTextureMapperL8_ARGB8888_BilinearInterpolationEv+0x4c> + 802c794: 4620 mov r0, r4 + 802c796: f007 fdb0 bl 80342fa <__cxa_guard_acquire> + 802c79a: b138 cbz r0, 802c7ac <_ZN8touchgfx8LCD16bpp52enableTextureMapperL8_ARGB8888_BilinearInterpolationEv+0x4c> + 802c79c: 4620 mov r0, r4 + 802c79e: f007 fdb8 bl 8034312 <__cxa_guard_release> + 802c7a2: 4a06 ldr r2, [pc, #24] ; (802c7bc <_ZN8touchgfx8LCD16bpp52enableTextureMapperL8_ARGB8888_BilinearInterpolationEv+0x5c>) + 802c7a4: 4909 ldr r1, [pc, #36] ; (802c7cc <_ZN8touchgfx8LCD16bpp52enableTextureMapperL8_ARGB8888_BilinearInterpolationEv+0x6c>) + 802c7a6: 480a ldr r0, [pc, #40] ; (802c7d0 <_ZN8touchgfx8LCD16bpp52enableTextureMapperL8_ARGB8888_BilinearInterpolationEv+0x70>) + 802c7a8: f007 fda0 bl 80342ec <__aeabi_atexit> + 802c7ac: 4b05 ldr r3, [pc, #20] ; (802c7c4 <_ZN8touchgfx8LCD16bpp52enableTextureMapperL8_ARGB8888_BilinearInterpolationEv+0x64>) + 802c7ae: 632b str r3, [r5, #48] ; 0x30 + 802c7b0: 4b07 ldr r3, [pc, #28] ; (802c7d0 <_ZN8touchgfx8LCD16bpp52enableTextureMapperL8_ARGB8888_BilinearInterpolationEv+0x70>) + 802c7b2: 636b str r3, [r5, #52] ; 0x34 + 802c7b4: bd38 pop {r3, r4, r5, pc} + 802c7b6: bf00 nop + 802c7b8: 2001e824 .word 0x2001e824 + 802c7bc: 20000000 .word 0x20000000 + 802c7c0: 0802933f .word 0x0802933f + 802c7c4: 200000c4 .word 0x200000c4 + 802c7c8: 2001e828 .word 0x2001e828 + 802c7cc: 0802933d .word 0x0802933d + 802c7d0: 200000c8 .word 0x200000c8 + +0802c7d4 <_ZN8touchgfx8LCD16bpp46enableTextureMapperL8_ARGB8888_NearestNeighborEv>: + 802c7d4: b538 push {r3, r4, r5, lr} + 802c7d6: 4c15 ldr r4, [pc, #84] ; (802c82c <_ZN8touchgfx8LCD16bpp46enableTextureMapperL8_ARGB8888_NearestNeighborEv+0x58>) + 802c7d8: 4605 mov r5, r0 + 802c7da: 7823 ldrb r3, [r4, #0] + 802c7dc: f3bf 8f5b dmb ish + 802c7e0: 07da lsls r2, r3, #31 + 802c7e2: d40b bmi.n 802c7fc <_ZN8touchgfx8LCD16bpp46enableTextureMapperL8_ARGB8888_NearestNeighborEv+0x28> + 802c7e4: 4620 mov r0, r4 + 802c7e6: f007 fd88 bl 80342fa <__cxa_guard_acquire> + 802c7ea: b138 cbz r0, 802c7fc <_ZN8touchgfx8LCD16bpp46enableTextureMapperL8_ARGB8888_NearestNeighborEv+0x28> + 802c7ec: 4620 mov r0, r4 + 802c7ee: f007 fd90 bl 8034312 <__cxa_guard_release> + 802c7f2: 4a0f ldr r2, [pc, #60] ; (802c830 <_ZN8touchgfx8LCD16bpp46enableTextureMapperL8_ARGB8888_NearestNeighborEv+0x5c>) + 802c7f4: 490f ldr r1, [pc, #60] ; (802c834 <_ZN8touchgfx8LCD16bpp46enableTextureMapperL8_ARGB8888_NearestNeighborEv+0x60>) + 802c7f6: 4810 ldr r0, [pc, #64] ; (802c838 <_ZN8touchgfx8LCD16bpp46enableTextureMapperL8_ARGB8888_NearestNeighborEv+0x64>) + 802c7f8: f007 fd78 bl 80342ec <__aeabi_atexit> + 802c7fc: 4c0f ldr r4, [pc, #60] ; (802c83c <_ZN8touchgfx8LCD16bpp46enableTextureMapperL8_ARGB8888_NearestNeighborEv+0x68>) + 802c7fe: 7823 ldrb r3, [r4, #0] + 802c800: f3bf 8f5b dmb ish + 802c804: 07db lsls r3, r3, #31 + 802c806: d40b bmi.n 802c820 <_ZN8touchgfx8LCD16bpp46enableTextureMapperL8_ARGB8888_NearestNeighborEv+0x4c> + 802c808: 4620 mov r0, r4 + 802c80a: f007 fd76 bl 80342fa <__cxa_guard_acquire> + 802c80e: b138 cbz r0, 802c820 <_ZN8touchgfx8LCD16bpp46enableTextureMapperL8_ARGB8888_NearestNeighborEv+0x4c> + 802c810: 4620 mov r0, r4 + 802c812: f007 fd7e bl 8034312 <__cxa_guard_release> + 802c816: 4a06 ldr r2, [pc, #24] ; (802c830 <_ZN8touchgfx8LCD16bpp46enableTextureMapperL8_ARGB8888_NearestNeighborEv+0x5c>) + 802c818: 4909 ldr r1, [pc, #36] ; (802c840 <_ZN8touchgfx8LCD16bpp46enableTextureMapperL8_ARGB8888_NearestNeighborEv+0x6c>) + 802c81a: 480a ldr r0, [pc, #40] ; (802c844 <_ZN8touchgfx8LCD16bpp46enableTextureMapperL8_ARGB8888_NearestNeighborEv+0x70>) + 802c81c: f007 fd66 bl 80342ec <__aeabi_atexit> + 802c820: 4b05 ldr r3, [pc, #20] ; (802c838 <_ZN8touchgfx8LCD16bpp46enableTextureMapperL8_ARGB8888_NearestNeighborEv+0x64>) + 802c822: 62ab str r3, [r5, #40] ; 0x28 + 802c824: 4b07 ldr r3, [pc, #28] ; (802c844 <_ZN8touchgfx8LCD16bpp46enableTextureMapperL8_ARGB8888_NearestNeighborEv+0x70>) + 802c826: 62eb str r3, [r5, #44] ; 0x2c + 802c828: bd38 pop {r3, r4, r5, pc} + 802c82a: bf00 nop + 802c82c: 2001e7f4 .word 0x2001e7f4 + 802c830: 20000000 .word 0x20000000 + 802c834: 08029343 .word 0x08029343 + 802c838: 20000094 .word 0x20000094 + 802c83c: 2001e7f8 .word 0x2001e7f8 + 802c840: 08029341 .word 0x08029341 + 802c844: 20000098 .word 0x20000098 + +0802c848 <_ZN8touchgfx8LCD16bpp30enableTextureMapperL8_ARGB8888Ev>: + 802c848: b510 push {r4, lr} + 802c84a: 4604 mov r4, r0 + 802c84c: f7ff ff88 bl 802c760 <_ZN8touchgfx8LCD16bpp52enableTextureMapperL8_ARGB8888_BilinearInterpolationEv> + 802c850: 4620 mov r0, r4 + 802c852: e8bd 4010 ldmia.w sp!, {r4, lr} + 802c856: f7ff bfbd b.w 802c7d4 <_ZN8touchgfx8LCD16bpp46enableTextureMapperL8_ARGB8888_NearestNeighborEv> + ... + +0802c85c <_ZN8touchgfx8LCD16bpp54enableTextureMapperRGB565_Opaque_BilinearInterpolationEv>: + 802c85c: b538 push {r3, r4, r5, lr} + 802c85e: 4c15 ldr r4, [pc, #84] ; (802c8b4 <_ZN8touchgfx8LCD16bpp54enableTextureMapperRGB565_Opaque_BilinearInterpolationEv+0x58>) + 802c860: 4605 mov r5, r0 + 802c862: 7823 ldrb r3, [r4, #0] + 802c864: f3bf 8f5b dmb ish + 802c868: 07da lsls r2, r3, #31 + 802c86a: d40b bmi.n 802c884 <_ZN8touchgfx8LCD16bpp54enableTextureMapperRGB565_Opaque_BilinearInterpolationEv+0x28> + 802c86c: 4620 mov r0, r4 + 802c86e: f007 fd44 bl 80342fa <__cxa_guard_acquire> + 802c872: b138 cbz r0, 802c884 <_ZN8touchgfx8LCD16bpp54enableTextureMapperRGB565_Opaque_BilinearInterpolationEv+0x28> + 802c874: 4620 mov r0, r4 + 802c876: f007 fd4c bl 8034312 <__cxa_guard_release> + 802c87a: 4a0f ldr r2, [pc, #60] ; (802c8b8 <_ZN8touchgfx8LCD16bpp54enableTextureMapperRGB565_Opaque_BilinearInterpolationEv+0x5c>) + 802c87c: 490f ldr r1, [pc, #60] ; (802c8bc <_ZN8touchgfx8LCD16bpp54enableTextureMapperRGB565_Opaque_BilinearInterpolationEv+0x60>) + 802c87e: 4810 ldr r0, [pc, #64] ; (802c8c0 <_ZN8touchgfx8LCD16bpp54enableTextureMapperRGB565_Opaque_BilinearInterpolationEv+0x64>) + 802c880: f007 fd34 bl 80342ec <__aeabi_atexit> + 802c884: 4c0f ldr r4, [pc, #60] ; (802c8c4 <_ZN8touchgfx8LCD16bpp54enableTextureMapperRGB565_Opaque_BilinearInterpolationEv+0x68>) + 802c886: 7823 ldrb r3, [r4, #0] + 802c888: f3bf 8f5b dmb ish + 802c88c: 07db lsls r3, r3, #31 + 802c88e: d40b bmi.n 802c8a8 <_ZN8touchgfx8LCD16bpp54enableTextureMapperRGB565_Opaque_BilinearInterpolationEv+0x4c> + 802c890: 4620 mov r0, r4 + 802c892: f007 fd32 bl 80342fa <__cxa_guard_acquire> + 802c896: b138 cbz r0, 802c8a8 <_ZN8touchgfx8LCD16bpp54enableTextureMapperRGB565_Opaque_BilinearInterpolationEv+0x4c> + 802c898: 4620 mov r0, r4 + 802c89a: f007 fd3a bl 8034312 <__cxa_guard_release> + 802c89e: 4a06 ldr r2, [pc, #24] ; (802c8b8 <_ZN8touchgfx8LCD16bpp54enableTextureMapperRGB565_Opaque_BilinearInterpolationEv+0x5c>) + 802c8a0: 4909 ldr r1, [pc, #36] ; (802c8c8 <_ZN8touchgfx8LCD16bpp54enableTextureMapperRGB565_Opaque_BilinearInterpolationEv+0x6c>) + 802c8a2: 480a ldr r0, [pc, #40] ; (802c8cc <_ZN8touchgfx8LCD16bpp54enableTextureMapperRGB565_Opaque_BilinearInterpolationEv+0x70>) + 802c8a4: f007 fd22 bl 80342ec <__aeabi_atexit> + 802c8a8: 4b05 ldr r3, [pc, #20] ; (802c8c0 <_ZN8touchgfx8LCD16bpp54enableTextureMapperRGB565_Opaque_BilinearInterpolationEv+0x64>) + 802c8aa: 652b str r3, [r5, #80] ; 0x50 + 802c8ac: 4b07 ldr r3, [pc, #28] ; (802c8cc <_ZN8touchgfx8LCD16bpp54enableTextureMapperRGB565_Opaque_BilinearInterpolationEv+0x70>) + 802c8ae: 656b str r3, [r5, #84] ; 0x54 + 802c8b0: bd38 pop {r3, r4, r5, pc} + 802c8b2: bf00 nop + 802c8b4: 2001e82c .word 0x2001e82c + 802c8b8: 20000000 .word 0x20000000 + 802c8bc: 0802932f .word 0x0802932f + 802c8c0: 200000cc .word 0x200000cc + 802c8c4: 2001e830 .word 0x2001e830 + 802c8c8: 0802932d .word 0x0802932d + 802c8cc: 200000d0 .word 0x200000d0 + +0802c8d0 <_ZN8touchgfx8LCD16bpp57enableTextureMapperRGB565_NonOpaque_BilinearInterpolationEv>: + 802c8d0: b538 push {r3, r4, r5, lr} + 802c8d2: 4c15 ldr r4, [pc, #84] ; (802c928 <_ZN8touchgfx8LCD16bpp57enableTextureMapperRGB565_NonOpaque_BilinearInterpolationEv+0x58>) + 802c8d4: 4605 mov r5, r0 + 802c8d6: 7823 ldrb r3, [r4, #0] + 802c8d8: f3bf 8f5b dmb ish + 802c8dc: 07da lsls r2, r3, #31 + 802c8de: d40b bmi.n 802c8f8 <_ZN8touchgfx8LCD16bpp57enableTextureMapperRGB565_NonOpaque_BilinearInterpolationEv+0x28> + 802c8e0: 4620 mov r0, r4 + 802c8e2: f007 fd0a bl 80342fa <__cxa_guard_acquire> + 802c8e6: b138 cbz r0, 802c8f8 <_ZN8touchgfx8LCD16bpp57enableTextureMapperRGB565_NonOpaque_BilinearInterpolationEv+0x28> + 802c8e8: 4620 mov r0, r4 + 802c8ea: f007 fd12 bl 8034312 <__cxa_guard_release> + 802c8ee: 4a0f ldr r2, [pc, #60] ; (802c92c <_ZN8touchgfx8LCD16bpp57enableTextureMapperRGB565_NonOpaque_BilinearInterpolationEv+0x5c>) + 802c8f0: 490f ldr r1, [pc, #60] ; (802c930 <_ZN8touchgfx8LCD16bpp57enableTextureMapperRGB565_NonOpaque_BilinearInterpolationEv+0x60>) + 802c8f2: 4810 ldr r0, [pc, #64] ; (802c934 <_ZN8touchgfx8LCD16bpp57enableTextureMapperRGB565_NonOpaque_BilinearInterpolationEv+0x64>) + 802c8f4: f007 fcfa bl 80342ec <__aeabi_atexit> + 802c8f8: 4c0f ldr r4, [pc, #60] ; (802c938 <_ZN8touchgfx8LCD16bpp57enableTextureMapperRGB565_NonOpaque_BilinearInterpolationEv+0x68>) + 802c8fa: 7823 ldrb r3, [r4, #0] + 802c8fc: f3bf 8f5b dmb ish + 802c900: 07db lsls r3, r3, #31 + 802c902: d40b bmi.n 802c91c <_ZN8touchgfx8LCD16bpp57enableTextureMapperRGB565_NonOpaque_BilinearInterpolationEv+0x4c> + 802c904: 4620 mov r0, r4 + 802c906: f007 fcf8 bl 80342fa <__cxa_guard_acquire> + 802c90a: b138 cbz r0, 802c91c <_ZN8touchgfx8LCD16bpp57enableTextureMapperRGB565_NonOpaque_BilinearInterpolationEv+0x4c> + 802c90c: 4620 mov r0, r4 + 802c90e: f007 fd00 bl 8034312 <__cxa_guard_release> + 802c912: 4a06 ldr r2, [pc, #24] ; (802c92c <_ZN8touchgfx8LCD16bpp57enableTextureMapperRGB565_NonOpaque_BilinearInterpolationEv+0x5c>) + 802c914: 4909 ldr r1, [pc, #36] ; (802c93c <_ZN8touchgfx8LCD16bpp57enableTextureMapperRGB565_NonOpaque_BilinearInterpolationEv+0x6c>) + 802c916: 480a ldr r0, [pc, #40] ; (802c940 <_ZN8touchgfx8LCD16bpp57enableTextureMapperRGB565_NonOpaque_BilinearInterpolationEv+0x70>) + 802c918: f007 fce8 bl 80342ec <__aeabi_atexit> + 802c91c: 4b05 ldr r3, [pc, #20] ; (802c934 <_ZN8touchgfx8LCD16bpp57enableTextureMapperRGB565_NonOpaque_BilinearInterpolationEv+0x64>) + 802c91e: 64ab str r3, [r5, #72] ; 0x48 + 802c920: 4b07 ldr r3, [pc, #28] ; (802c940 <_ZN8touchgfx8LCD16bpp57enableTextureMapperRGB565_NonOpaque_BilinearInterpolationEv+0x70>) + 802c922: 64eb str r3, [r5, #76] ; 0x4c + 802c924: bd38 pop {r3, r4, r5, pc} + 802c926: bf00 nop + 802c928: 2001e834 .word 0x2001e834 + 802c92c: 20000000 .word 0x20000000 + 802c930: 08029333 .word 0x08029333 + 802c934: 200000d4 .word 0x200000d4 + 802c938: 2001e838 .word 0x2001e838 + 802c93c: 08029331 .word 0x08029331 + 802c940: 200000d8 .word 0x200000d8 + +0802c944 <_ZN8touchgfx8LCD16bpp48enableTextureMapperRGB565_Opaque_NearestNeighborEv>: + 802c944: b538 push {r3, r4, r5, lr} + 802c946: 4c15 ldr r4, [pc, #84] ; (802c99c <_ZN8touchgfx8LCD16bpp48enableTextureMapperRGB565_Opaque_NearestNeighborEv+0x58>) + 802c948: 4605 mov r5, r0 + 802c94a: 7823 ldrb r3, [r4, #0] + 802c94c: f3bf 8f5b dmb ish + 802c950: 07da lsls r2, r3, #31 + 802c952: d40b bmi.n 802c96c <_ZN8touchgfx8LCD16bpp48enableTextureMapperRGB565_Opaque_NearestNeighborEv+0x28> + 802c954: 4620 mov r0, r4 + 802c956: f007 fcd0 bl 80342fa <__cxa_guard_acquire> + 802c95a: b138 cbz r0, 802c96c <_ZN8touchgfx8LCD16bpp48enableTextureMapperRGB565_Opaque_NearestNeighborEv+0x28> + 802c95c: 4620 mov r0, r4 + 802c95e: f007 fcd8 bl 8034312 <__cxa_guard_release> + 802c962: 4a0f ldr r2, [pc, #60] ; (802c9a0 <_ZN8touchgfx8LCD16bpp48enableTextureMapperRGB565_Opaque_NearestNeighborEv+0x5c>) + 802c964: 490f ldr r1, [pc, #60] ; (802c9a4 <_ZN8touchgfx8LCD16bpp48enableTextureMapperRGB565_Opaque_NearestNeighborEv+0x60>) + 802c966: 4810 ldr r0, [pc, #64] ; (802c9a8 <_ZN8touchgfx8LCD16bpp48enableTextureMapperRGB565_Opaque_NearestNeighborEv+0x64>) + 802c968: f007 fcc0 bl 80342ec <__aeabi_atexit> + 802c96c: 4c0f ldr r4, [pc, #60] ; (802c9ac <_ZN8touchgfx8LCD16bpp48enableTextureMapperRGB565_Opaque_NearestNeighborEv+0x68>) + 802c96e: 7823 ldrb r3, [r4, #0] + 802c970: f3bf 8f5b dmb ish + 802c974: 07db lsls r3, r3, #31 + 802c976: d40b bmi.n 802c990 <_ZN8touchgfx8LCD16bpp48enableTextureMapperRGB565_Opaque_NearestNeighborEv+0x4c> + 802c978: 4620 mov r0, r4 + 802c97a: f007 fcbe bl 80342fa <__cxa_guard_acquire> + 802c97e: b138 cbz r0, 802c990 <_ZN8touchgfx8LCD16bpp48enableTextureMapperRGB565_Opaque_NearestNeighborEv+0x4c> + 802c980: 4620 mov r0, r4 + 802c982: f007 fcc6 bl 8034312 <__cxa_guard_release> + 802c986: 4a06 ldr r2, [pc, #24] ; (802c9a0 <_ZN8touchgfx8LCD16bpp48enableTextureMapperRGB565_Opaque_NearestNeighborEv+0x5c>) + 802c988: 4909 ldr r1, [pc, #36] ; (802c9b0 <_ZN8touchgfx8LCD16bpp48enableTextureMapperRGB565_Opaque_NearestNeighborEv+0x6c>) + 802c98a: 480a ldr r0, [pc, #40] ; (802c9b4 <_ZN8touchgfx8LCD16bpp48enableTextureMapperRGB565_Opaque_NearestNeighborEv+0x70>) + 802c98c: f007 fcae bl 80342ec <__aeabi_atexit> + 802c990: 4b05 ldr r3, [pc, #20] ; (802c9a8 <_ZN8touchgfx8LCD16bpp48enableTextureMapperRGB565_Opaque_NearestNeighborEv+0x64>) + 802c992: 642b str r3, [r5, #64] ; 0x40 + 802c994: 4b07 ldr r3, [pc, #28] ; (802c9b4 <_ZN8touchgfx8LCD16bpp48enableTextureMapperRGB565_Opaque_NearestNeighborEv+0x70>) + 802c996: 646b str r3, [r5, #68] ; 0x44 + 802c998: bd38 pop {r3, r4, r5, pc} + 802c99a: bf00 nop + 802c99c: 2001e7fc .word 0x2001e7fc + 802c9a0: 20000000 .word 0x20000000 + 802c9a4: 08029337 .word 0x08029337 + 802c9a8: 2000009c .word 0x2000009c + 802c9ac: 2001e800 .word 0x2001e800 + 802c9b0: 08029335 .word 0x08029335 + 802c9b4: 200000a0 .word 0x200000a0 + +0802c9b8 <_ZN8touchgfx8LCD16bpp51enableTextureMapperRGB565_NonOpaque_NearestNeighborEv>: + 802c9b8: b538 push {r3, r4, r5, lr} + 802c9ba: 4c15 ldr r4, [pc, #84] ; (802ca10 <_ZN8touchgfx8LCD16bpp51enableTextureMapperRGB565_NonOpaque_NearestNeighborEv+0x58>) + 802c9bc: 4605 mov r5, r0 + 802c9be: 7823 ldrb r3, [r4, #0] + 802c9c0: f3bf 8f5b dmb ish + 802c9c4: 07da lsls r2, r3, #31 + 802c9c6: d40b bmi.n 802c9e0 <_ZN8touchgfx8LCD16bpp51enableTextureMapperRGB565_NonOpaque_NearestNeighborEv+0x28> + 802c9c8: 4620 mov r0, r4 + 802c9ca: f007 fc96 bl 80342fa <__cxa_guard_acquire> + 802c9ce: b138 cbz r0, 802c9e0 <_ZN8touchgfx8LCD16bpp51enableTextureMapperRGB565_NonOpaque_NearestNeighborEv+0x28> + 802c9d0: 4620 mov r0, r4 + 802c9d2: f007 fc9e bl 8034312 <__cxa_guard_release> + 802c9d6: 4a0f ldr r2, [pc, #60] ; (802ca14 <_ZN8touchgfx8LCD16bpp51enableTextureMapperRGB565_NonOpaque_NearestNeighborEv+0x5c>) + 802c9d8: 490f ldr r1, [pc, #60] ; (802ca18 <_ZN8touchgfx8LCD16bpp51enableTextureMapperRGB565_NonOpaque_NearestNeighborEv+0x60>) + 802c9da: 4810 ldr r0, [pc, #64] ; (802ca1c <_ZN8touchgfx8LCD16bpp51enableTextureMapperRGB565_NonOpaque_NearestNeighborEv+0x64>) + 802c9dc: f007 fc86 bl 80342ec <__aeabi_atexit> + 802c9e0: 4c0f ldr r4, [pc, #60] ; (802ca20 <_ZN8touchgfx8LCD16bpp51enableTextureMapperRGB565_NonOpaque_NearestNeighborEv+0x68>) + 802c9e2: 7823 ldrb r3, [r4, #0] + 802c9e4: f3bf 8f5b dmb ish + 802c9e8: 07db lsls r3, r3, #31 + 802c9ea: d40b bmi.n 802ca04 <_ZN8touchgfx8LCD16bpp51enableTextureMapperRGB565_NonOpaque_NearestNeighborEv+0x4c> + 802c9ec: 4620 mov r0, r4 + 802c9ee: f007 fc84 bl 80342fa <__cxa_guard_acquire> + 802c9f2: b138 cbz r0, 802ca04 <_ZN8touchgfx8LCD16bpp51enableTextureMapperRGB565_NonOpaque_NearestNeighborEv+0x4c> + 802c9f4: 4620 mov r0, r4 + 802c9f6: f007 fc8c bl 8034312 <__cxa_guard_release> + 802c9fa: 4a06 ldr r2, [pc, #24] ; (802ca14 <_ZN8touchgfx8LCD16bpp51enableTextureMapperRGB565_NonOpaque_NearestNeighborEv+0x5c>) + 802c9fc: 4909 ldr r1, [pc, #36] ; (802ca24 <_ZN8touchgfx8LCD16bpp51enableTextureMapperRGB565_NonOpaque_NearestNeighborEv+0x6c>) + 802c9fe: 480a ldr r0, [pc, #40] ; (802ca28 <_ZN8touchgfx8LCD16bpp51enableTextureMapperRGB565_NonOpaque_NearestNeighborEv+0x70>) + 802ca00: f007 fc74 bl 80342ec <__aeabi_atexit> + 802ca04: 4b05 ldr r3, [pc, #20] ; (802ca1c <_ZN8touchgfx8LCD16bpp51enableTextureMapperRGB565_NonOpaque_NearestNeighborEv+0x64>) + 802ca06: 63ab str r3, [r5, #56] ; 0x38 + 802ca08: 4b07 ldr r3, [pc, #28] ; (802ca28 <_ZN8touchgfx8LCD16bpp51enableTextureMapperRGB565_NonOpaque_NearestNeighborEv+0x70>) + 802ca0a: 63eb str r3, [r5, #60] ; 0x3c + 802ca0c: bd38 pop {r3, r4, r5, pc} + 802ca0e: bf00 nop + 802ca10: 2001e81c .word 0x2001e81c + 802ca14: 20000000 .word 0x20000000 + 802ca18: 0802933b .word 0x0802933b + 802ca1c: 200000bc .word 0x200000bc + 802ca20: 2001e820 .word 0x2001e820 + 802ca24: 08029339 .word 0x08029339 + 802ca28: 200000c0 .word 0x200000c0 + +0802ca2c <_ZN8touchgfx8LCD16bpp25enableTextureMapperRGB565Ev>: + 802ca2c: b510 push {r4, lr} + 802ca2e: 4604 mov r4, r0 + 802ca30: f7ff ff14 bl 802c85c <_ZN8touchgfx8LCD16bpp54enableTextureMapperRGB565_Opaque_BilinearInterpolationEv> + 802ca34: 4620 mov r0, r4 + 802ca36: f7ff ff85 bl 802c944 <_ZN8touchgfx8LCD16bpp48enableTextureMapperRGB565_Opaque_NearestNeighborEv> + 802ca3a: 4620 mov r0, r4 + 802ca3c: f7ff ff48 bl 802c8d0 <_ZN8touchgfx8LCD16bpp57enableTextureMapperRGB565_NonOpaque_BilinearInterpolationEv> + 802ca40: 4620 mov r0, r4 + 802ca42: e8bd 4010 ldmia.w sp!, {r4, lr} + 802ca46: f7ff bfb7 b.w 802c9b8 <_ZN8touchgfx8LCD16bpp51enableTextureMapperRGB565_NonOpaque_NearestNeighborEv> + ... + +0802ca4c <_ZN8touchgfx8LCD16bpp49enableTextureMapperARGB8888_BilinearInterpolationEv>: + 802ca4c: b538 push {r3, r4, r5, lr} + 802ca4e: 4c15 ldr r4, [pc, #84] ; (802caa4 <_ZN8touchgfx8LCD16bpp49enableTextureMapperARGB8888_BilinearInterpolationEv+0x58>) + 802ca50: 4605 mov r5, r0 + 802ca52: 7823 ldrb r3, [r4, #0] + 802ca54: f3bf 8f5b dmb ish + 802ca58: 07da lsls r2, r3, #31 + 802ca5a: d40b bmi.n 802ca74 <_ZN8touchgfx8LCD16bpp49enableTextureMapperARGB8888_BilinearInterpolationEv+0x28> + 802ca5c: 4620 mov r0, r4 + 802ca5e: f007 fc4c bl 80342fa <__cxa_guard_acquire> + 802ca62: b138 cbz r0, 802ca74 <_ZN8touchgfx8LCD16bpp49enableTextureMapperARGB8888_BilinearInterpolationEv+0x28> + 802ca64: 4620 mov r0, r4 + 802ca66: f007 fc54 bl 8034312 <__cxa_guard_release> + 802ca6a: 4a0f ldr r2, [pc, #60] ; (802caa8 <_ZN8touchgfx8LCD16bpp49enableTextureMapperARGB8888_BilinearInterpolationEv+0x5c>) + 802ca6c: 490f ldr r1, [pc, #60] ; (802caac <_ZN8touchgfx8LCD16bpp49enableTextureMapperARGB8888_BilinearInterpolationEv+0x60>) + 802ca6e: 4810 ldr r0, [pc, #64] ; (802cab0 <_ZN8touchgfx8LCD16bpp49enableTextureMapperARGB8888_BilinearInterpolationEv+0x64>) + 802ca70: f007 fc3c bl 80342ec <__aeabi_atexit> + 802ca74: 4c0f ldr r4, [pc, #60] ; (802cab4 <_ZN8touchgfx8LCD16bpp49enableTextureMapperARGB8888_BilinearInterpolationEv+0x68>) + 802ca76: 7823 ldrb r3, [r4, #0] + 802ca78: f3bf 8f5b dmb ish + 802ca7c: 07db lsls r3, r3, #31 + 802ca7e: d40b bmi.n 802ca98 <_ZN8touchgfx8LCD16bpp49enableTextureMapperARGB8888_BilinearInterpolationEv+0x4c> + 802ca80: 4620 mov r0, r4 + 802ca82: f007 fc3a bl 80342fa <__cxa_guard_acquire> + 802ca86: b138 cbz r0, 802ca98 <_ZN8touchgfx8LCD16bpp49enableTextureMapperARGB8888_BilinearInterpolationEv+0x4c> + 802ca88: 4620 mov r0, r4 + 802ca8a: f007 fc42 bl 8034312 <__cxa_guard_release> + 802ca8e: 4a06 ldr r2, [pc, #24] ; (802caa8 <_ZN8touchgfx8LCD16bpp49enableTextureMapperARGB8888_BilinearInterpolationEv+0x5c>) + 802ca90: 4909 ldr r1, [pc, #36] ; (802cab8 <_ZN8touchgfx8LCD16bpp49enableTextureMapperARGB8888_BilinearInterpolationEv+0x6c>) + 802ca92: 480a ldr r0, [pc, #40] ; (802cabc <_ZN8touchgfx8LCD16bpp49enableTextureMapperARGB8888_BilinearInterpolationEv+0x70>) + 802ca94: f007 fc2a bl 80342ec <__aeabi_atexit> + 802ca98: 4b05 ldr r3, [pc, #20] ; (802cab0 <_ZN8touchgfx8LCD16bpp49enableTextureMapperARGB8888_BilinearInterpolationEv+0x64>) + 802ca9a: 662b str r3, [r5, #96] ; 0x60 + 802ca9c: 4b07 ldr r3, [pc, #28] ; (802cabc <_ZN8touchgfx8LCD16bpp49enableTextureMapperARGB8888_BilinearInterpolationEv+0x70>) + 802ca9e: 666b str r3, [r5, #100] ; 0x64 + 802caa0: bd38 pop {r3, r4, r5, pc} + 802caa2: bf00 nop + 802caa4: 2001e804 .word 0x2001e804 + 802caa8: 20000000 .word 0x20000000 + 802caac: 08029327 .word 0x08029327 + 802cab0: 200000a4 .word 0x200000a4 + 802cab4: 2001e808 .word 0x2001e808 + 802cab8: 08029325 .word 0x08029325 + 802cabc: 200000a8 .word 0x200000a8 + +0802cac0 <_ZN8touchgfx8LCD16bpp43enableTextureMapperARGB8888_NearestNeighborEv>: + 802cac0: b538 push {r3, r4, r5, lr} + 802cac2: 4c15 ldr r4, [pc, #84] ; (802cb18 <_ZN8touchgfx8LCD16bpp43enableTextureMapperARGB8888_NearestNeighborEv+0x58>) + 802cac4: 4605 mov r5, r0 + 802cac6: 7823 ldrb r3, [r4, #0] + 802cac8: f3bf 8f5b dmb ish + 802cacc: 07da lsls r2, r3, #31 + 802cace: d40b bmi.n 802cae8 <_ZN8touchgfx8LCD16bpp43enableTextureMapperARGB8888_NearestNeighborEv+0x28> + 802cad0: 4620 mov r0, r4 + 802cad2: f007 fc12 bl 80342fa <__cxa_guard_acquire> + 802cad6: b138 cbz r0, 802cae8 <_ZN8touchgfx8LCD16bpp43enableTextureMapperARGB8888_NearestNeighborEv+0x28> + 802cad8: 4620 mov r0, r4 + 802cada: f007 fc1a bl 8034312 <__cxa_guard_release> + 802cade: 4a0f ldr r2, [pc, #60] ; (802cb1c <_ZN8touchgfx8LCD16bpp43enableTextureMapperARGB8888_NearestNeighborEv+0x5c>) + 802cae0: 490f ldr r1, [pc, #60] ; (802cb20 <_ZN8touchgfx8LCD16bpp43enableTextureMapperARGB8888_NearestNeighborEv+0x60>) + 802cae2: 4810 ldr r0, [pc, #64] ; (802cb24 <_ZN8touchgfx8LCD16bpp43enableTextureMapperARGB8888_NearestNeighborEv+0x64>) + 802cae4: f007 fc02 bl 80342ec <__aeabi_atexit> + 802cae8: 4c0f ldr r4, [pc, #60] ; (802cb28 <_ZN8touchgfx8LCD16bpp43enableTextureMapperARGB8888_NearestNeighborEv+0x68>) + 802caea: 7823 ldrb r3, [r4, #0] + 802caec: f3bf 8f5b dmb ish + 802caf0: 07db lsls r3, r3, #31 + 802caf2: d40b bmi.n 802cb0c <_ZN8touchgfx8LCD16bpp43enableTextureMapperARGB8888_NearestNeighborEv+0x4c> + 802caf4: 4620 mov r0, r4 + 802caf6: f007 fc00 bl 80342fa <__cxa_guard_acquire> + 802cafa: b138 cbz r0, 802cb0c <_ZN8touchgfx8LCD16bpp43enableTextureMapperARGB8888_NearestNeighborEv+0x4c> + 802cafc: 4620 mov r0, r4 + 802cafe: f007 fc08 bl 8034312 <__cxa_guard_release> + 802cb02: 4a06 ldr r2, [pc, #24] ; (802cb1c <_ZN8touchgfx8LCD16bpp43enableTextureMapperARGB8888_NearestNeighborEv+0x5c>) + 802cb04: 4909 ldr r1, [pc, #36] ; (802cb2c <_ZN8touchgfx8LCD16bpp43enableTextureMapperARGB8888_NearestNeighborEv+0x6c>) + 802cb06: 480a ldr r0, [pc, #40] ; (802cb30 <_ZN8touchgfx8LCD16bpp43enableTextureMapperARGB8888_NearestNeighborEv+0x70>) + 802cb08: f007 fbf0 bl 80342ec <__aeabi_atexit> + 802cb0c: 4b05 ldr r3, [pc, #20] ; (802cb24 <_ZN8touchgfx8LCD16bpp43enableTextureMapperARGB8888_NearestNeighborEv+0x64>) + 802cb0e: 65ab str r3, [r5, #88] ; 0x58 + 802cb10: 4b07 ldr r3, [pc, #28] ; (802cb30 <_ZN8touchgfx8LCD16bpp43enableTextureMapperARGB8888_NearestNeighborEv+0x70>) + 802cb12: 65eb str r3, [r5, #92] ; 0x5c + 802cb14: bd38 pop {r3, r4, r5, pc} + 802cb16: bf00 nop + 802cb18: 2001e7dc .word 0x2001e7dc + 802cb1c: 20000000 .word 0x20000000 + 802cb20: 0802932b .word 0x0802932b + 802cb24: 2000007c .word 0x2000007c + 802cb28: 2001e7e0 .word 0x2001e7e0 + 802cb2c: 08029329 .word 0x08029329 + 802cb30: 20000080 .word 0x20000080 + +0802cb34 <_ZN8touchgfx8LCD16bpp27enableTextureMapperARGB8888Ev>: + 802cb34: b510 push {r4, lr} + 802cb36: 4604 mov r4, r0 + 802cb38: f7ff ff88 bl 802ca4c <_ZN8touchgfx8LCD16bpp49enableTextureMapperARGB8888_BilinearInterpolationEv> + 802cb3c: 4620 mov r0, r4 + 802cb3e: e8bd 4010 ldmia.w sp!, {r4, lr} + 802cb42: f7ff bfbd b.w 802cac0 <_ZN8touchgfx8LCD16bpp43enableTextureMapperARGB8888_NearestNeighborEv> + ... + +0802cb48 <_ZN8touchgfx8LCD16bpp43enableTextureMapperA4_BilinearInterpolationEv>: + 802cb48: b538 push {r3, r4, r5, lr} + 802cb4a: 4c15 ldr r4, [pc, #84] ; (802cba0 <_ZN8touchgfx8LCD16bpp43enableTextureMapperA4_BilinearInterpolationEv+0x58>) + 802cb4c: 4605 mov r5, r0 + 802cb4e: 7823 ldrb r3, [r4, #0] + 802cb50: f3bf 8f5b dmb ish + 802cb54: 07da lsls r2, r3, #31 + 802cb56: d40b bmi.n 802cb70 <_ZN8touchgfx8LCD16bpp43enableTextureMapperA4_BilinearInterpolationEv+0x28> + 802cb58: 4620 mov r0, r4 + 802cb5a: f007 fbce bl 80342fa <__cxa_guard_acquire> + 802cb5e: b138 cbz r0, 802cb70 <_ZN8touchgfx8LCD16bpp43enableTextureMapperA4_BilinearInterpolationEv+0x28> + 802cb60: 4620 mov r0, r4 + 802cb62: f007 fbd6 bl 8034312 <__cxa_guard_release> + 802cb66: 4a0f ldr r2, [pc, #60] ; (802cba4 <_ZN8touchgfx8LCD16bpp43enableTextureMapperA4_BilinearInterpolationEv+0x5c>) + 802cb68: 490f ldr r1, [pc, #60] ; (802cba8 <_ZN8touchgfx8LCD16bpp43enableTextureMapperA4_BilinearInterpolationEv+0x60>) + 802cb6a: 4810 ldr r0, [pc, #64] ; (802cbac <_ZN8touchgfx8LCD16bpp43enableTextureMapperA4_BilinearInterpolationEv+0x64>) + 802cb6c: f007 fbbe bl 80342ec <__aeabi_atexit> + 802cb70: 4c0f ldr r4, [pc, #60] ; (802cbb0 <_ZN8touchgfx8LCD16bpp43enableTextureMapperA4_BilinearInterpolationEv+0x68>) + 802cb72: 7823 ldrb r3, [r4, #0] + 802cb74: f3bf 8f5b dmb ish + 802cb78: 07db lsls r3, r3, #31 + 802cb7a: d40b bmi.n 802cb94 <_ZN8touchgfx8LCD16bpp43enableTextureMapperA4_BilinearInterpolationEv+0x4c> + 802cb7c: 4620 mov r0, r4 + 802cb7e: f007 fbbc bl 80342fa <__cxa_guard_acquire> + 802cb82: b138 cbz r0, 802cb94 <_ZN8touchgfx8LCD16bpp43enableTextureMapperA4_BilinearInterpolationEv+0x4c> + 802cb84: 4620 mov r0, r4 + 802cb86: f007 fbc4 bl 8034312 <__cxa_guard_release> + 802cb8a: 4a06 ldr r2, [pc, #24] ; (802cba4 <_ZN8touchgfx8LCD16bpp43enableTextureMapperA4_BilinearInterpolationEv+0x5c>) + 802cb8c: 4909 ldr r1, [pc, #36] ; (802cbb4 <_ZN8touchgfx8LCD16bpp43enableTextureMapperA4_BilinearInterpolationEv+0x6c>) + 802cb8e: 480a ldr r0, [pc, #40] ; (802cbb8 <_ZN8touchgfx8LCD16bpp43enableTextureMapperA4_BilinearInterpolationEv+0x70>) + 802cb90: f007 fbac bl 80342ec <__aeabi_atexit> + 802cb94: 4b05 ldr r3, [pc, #20] ; (802cbac <_ZN8touchgfx8LCD16bpp43enableTextureMapperA4_BilinearInterpolationEv+0x64>) + 802cb96: 672b str r3, [r5, #112] ; 0x70 + 802cb98: 4b07 ldr r3, [pc, #28] ; (802cbb8 <_ZN8touchgfx8LCD16bpp43enableTextureMapperA4_BilinearInterpolationEv+0x70>) + 802cb9a: 676b str r3, [r5, #116] ; 0x74 + 802cb9c: bd38 pop {r3, r4, r5, pc} + 802cb9e: bf00 nop + 802cba0: 2001e7d4 .word 0x2001e7d4 + 802cba4: 20000000 .word 0x20000000 + 802cba8: 0802931f .word 0x0802931f + 802cbac: 20000074 .word 0x20000074 + 802cbb0: 2001e7d8 .word 0x2001e7d8 + 802cbb4: 0802931d .word 0x0802931d + 802cbb8: 20000078 .word 0x20000078 + +0802cbbc <_ZN8touchgfx8LCD16bpp37enableTextureMapperA4_NearestNeighborEv>: + 802cbbc: b538 push {r3, r4, r5, lr} + 802cbbe: 4c15 ldr r4, [pc, #84] ; (802cc14 <_ZN8touchgfx8LCD16bpp37enableTextureMapperA4_NearestNeighborEv+0x58>) + 802cbc0: 4605 mov r5, r0 + 802cbc2: 7823 ldrb r3, [r4, #0] + 802cbc4: f3bf 8f5b dmb ish + 802cbc8: 07da lsls r2, r3, #31 + 802cbca: d40b bmi.n 802cbe4 <_ZN8touchgfx8LCD16bpp37enableTextureMapperA4_NearestNeighborEv+0x28> + 802cbcc: 4620 mov r0, r4 + 802cbce: f007 fb94 bl 80342fa <__cxa_guard_acquire> + 802cbd2: b138 cbz r0, 802cbe4 <_ZN8touchgfx8LCD16bpp37enableTextureMapperA4_NearestNeighborEv+0x28> + 802cbd4: 4620 mov r0, r4 + 802cbd6: f007 fb9c bl 8034312 <__cxa_guard_release> + 802cbda: 4a0f ldr r2, [pc, #60] ; (802cc18 <_ZN8touchgfx8LCD16bpp37enableTextureMapperA4_NearestNeighborEv+0x5c>) + 802cbdc: 490f ldr r1, [pc, #60] ; (802cc1c <_ZN8touchgfx8LCD16bpp37enableTextureMapperA4_NearestNeighborEv+0x60>) + 802cbde: 4810 ldr r0, [pc, #64] ; (802cc20 <_ZN8touchgfx8LCD16bpp37enableTextureMapperA4_NearestNeighborEv+0x64>) + 802cbe0: f007 fb84 bl 80342ec <__aeabi_atexit> + 802cbe4: 4c0f ldr r4, [pc, #60] ; (802cc24 <_ZN8touchgfx8LCD16bpp37enableTextureMapperA4_NearestNeighborEv+0x68>) + 802cbe6: 7823 ldrb r3, [r4, #0] + 802cbe8: f3bf 8f5b dmb ish + 802cbec: 07db lsls r3, r3, #31 + 802cbee: d40b bmi.n 802cc08 <_ZN8touchgfx8LCD16bpp37enableTextureMapperA4_NearestNeighborEv+0x4c> + 802cbf0: 4620 mov r0, r4 + 802cbf2: f007 fb82 bl 80342fa <__cxa_guard_acquire> + 802cbf6: b138 cbz r0, 802cc08 <_ZN8touchgfx8LCD16bpp37enableTextureMapperA4_NearestNeighborEv+0x4c> + 802cbf8: 4620 mov r0, r4 + 802cbfa: f007 fb8a bl 8034312 <__cxa_guard_release> + 802cbfe: 4a06 ldr r2, [pc, #24] ; (802cc18 <_ZN8touchgfx8LCD16bpp37enableTextureMapperA4_NearestNeighborEv+0x5c>) + 802cc00: 4909 ldr r1, [pc, #36] ; (802cc28 <_ZN8touchgfx8LCD16bpp37enableTextureMapperA4_NearestNeighborEv+0x6c>) + 802cc02: 480a ldr r0, [pc, #40] ; (802cc2c <_ZN8touchgfx8LCD16bpp37enableTextureMapperA4_NearestNeighborEv+0x70>) + 802cc04: f007 fb72 bl 80342ec <__aeabi_atexit> + 802cc08: 4b05 ldr r3, [pc, #20] ; (802cc20 <_ZN8touchgfx8LCD16bpp37enableTextureMapperA4_NearestNeighborEv+0x64>) + 802cc0a: 66ab str r3, [r5, #104] ; 0x68 + 802cc0c: 4b07 ldr r3, [pc, #28] ; (802cc2c <_ZN8touchgfx8LCD16bpp37enableTextureMapperA4_NearestNeighborEv+0x70>) + 802cc0e: 66eb str r3, [r5, #108] ; 0x6c + 802cc10: bd38 pop {r3, r4, r5, pc} + 802cc12: bf00 nop + 802cc14: 2001e7cc .word 0x2001e7cc + 802cc18: 20000000 .word 0x20000000 + 802cc1c: 08029323 .word 0x08029323 + 802cc20: 2000006c .word 0x2000006c + 802cc24: 2001e7d0 .word 0x2001e7d0 + 802cc28: 08029321 .word 0x08029321 + 802cc2c: 20000070 .word 0x20000070 + +0802cc30 <_ZN8touchgfx8LCD16bpp21enableTextureMapperA4Ev>: + 802cc30: b510 push {r4, lr} + 802cc32: 4604 mov r4, r0 + 802cc34: f7ff ff88 bl 802cb48 <_ZN8touchgfx8LCD16bpp43enableTextureMapperA4_BilinearInterpolationEv> + 802cc38: 4620 mov r0, r4 + 802cc3a: e8bd 4010 ldmia.w sp!, {r4, lr} + 802cc3e: f7ff bfbd b.w 802cbbc <_ZN8touchgfx8LCD16bpp37enableTextureMapperA4_NearestNeighborEv> + +0802cc42 <_ZN8touchgfx8LCD16bpp22enableTextureMapperAllEv>: + 802cc42: b510 push {r4, lr} + 802cc44: 4604 mov r4, r0 + 802cc46: f7ff fff3 bl 802cc30 <_ZN8touchgfx8LCD16bpp21enableTextureMapperA4Ev> + 802cc4a: 4620 mov r0, r4 + 802cc4c: f7ff ff72 bl 802cb34 <_ZN8touchgfx8LCD16bpp27enableTextureMapperARGB8888Ev> + 802cc50: 4620 mov r0, r4 + 802cc52: f7ff fdf9 bl 802c848 <_ZN8touchgfx8LCD16bpp30enableTextureMapperL8_ARGB8888Ev> + 802cc56: 4620 mov r0, r4 + 802cc58: f7ff fcfa bl 802c650 <_ZN8touchgfx8LCD16bpp28enableTextureMapperL8_RGB565Ev> + 802cc5c: 4620 mov r0, r4 + 802cc5e: f7ff fd75 bl 802c74c <_ZN8touchgfx8LCD16bpp28enableTextureMapperL8_RGB888Ev> + 802cc62: 4620 mov r0, r4 + 802cc64: e8bd 4010 ldmia.w sp!, {r4, lr} + 802cc68: f7ff bee0 b.w 802ca2c <_ZN8touchgfx8LCD16bpp25enableTextureMapperRGB565Ev> + +0802cc6c <_ZN8touchgfx8LCD16bpp23enableDecompressorL8_L4Ev>: + 802cc6c: b538 push {r3, r4, r5, lr} + 802cc6e: 4c0b ldr r4, [pc, #44] ; (802cc9c <_ZN8touchgfx8LCD16bpp23enableDecompressorL8_L4Ev+0x30>) + 802cc70: 4605 mov r5, r0 + 802cc72: 7823 ldrb r3, [r4, #0] + 802cc74: f3bf 8f5b dmb ish + 802cc78: 07db lsls r3, r3, #31 + 802cc7a: d40b bmi.n 802cc94 <_ZN8touchgfx8LCD16bpp23enableDecompressorL8_L4Ev+0x28> + 802cc7c: 4620 mov r0, r4 + 802cc7e: f007 fb3c bl 80342fa <__cxa_guard_acquire> + 802cc82: b138 cbz r0, 802cc94 <_ZN8touchgfx8LCD16bpp23enableDecompressorL8_L4Ev+0x28> + 802cc84: 4620 mov r0, r4 + 802cc86: f007 fb44 bl 8034312 <__cxa_guard_release> + 802cc8a: 4a05 ldr r2, [pc, #20] ; (802cca0 <_ZN8touchgfx8LCD16bpp23enableDecompressorL8_L4Ev+0x34>) + 802cc8c: 4905 ldr r1, [pc, #20] ; (802cca4 <_ZN8touchgfx8LCD16bpp23enableDecompressorL8_L4Ev+0x38>) + 802cc8e: 4806 ldr r0, [pc, #24] ; (802cca8 <_ZN8touchgfx8LCD16bpp23enableDecompressorL8_L4Ev+0x3c>) + 802cc90: f007 fb2c bl 80342ec <__aeabi_atexit> + 802cc94: 4b04 ldr r3, [pc, #16] ; (802cca8 <_ZN8touchgfx8LCD16bpp23enableDecompressorL8_L4Ev+0x3c>) + 802cc96: 67ab str r3, [r5, #120] ; 0x78 + 802cc98: bd38 pop {r3, r4, r5, pc} + 802cc9a: bf00 nop + 802cc9c: 2001e7c0 .word 0x2001e7c0 + 802cca0: 20000000 .word 0x20000000 + 802cca4: 0802931b .word 0x0802931b + 802cca8: 20000064 .word 0x20000064 + +0802ccac <_ZN8touchgfx8LCD16bpp24enableDecompressorL8_RLEEv>: + 802ccac: b538 push {r3, r4, r5, lr} + 802ccae: 4c0b ldr r4, [pc, #44] ; (802ccdc <_ZN8touchgfx8LCD16bpp24enableDecompressorL8_RLEEv+0x30>) + 802ccb0: 4605 mov r5, r0 + 802ccb2: 7823 ldrb r3, [r4, #0] + 802ccb4: f3bf 8f5b dmb ish + 802ccb8: 07db lsls r3, r3, #31 + 802ccba: d40b bmi.n 802ccd4 <_ZN8touchgfx8LCD16bpp24enableDecompressorL8_RLEEv+0x28> + 802ccbc: 4620 mov r0, r4 + 802ccbe: f007 fb1c bl 80342fa <__cxa_guard_acquire> + 802ccc2: b138 cbz r0, 802ccd4 <_ZN8touchgfx8LCD16bpp24enableDecompressorL8_RLEEv+0x28> + 802ccc4: 4620 mov r0, r4 + 802ccc6: f007 fb24 bl 8034312 <__cxa_guard_release> + 802ccca: 4a05 ldr r2, [pc, #20] ; (802cce0 <_ZN8touchgfx8LCD16bpp24enableDecompressorL8_RLEEv+0x34>) + 802cccc: 4905 ldr r1, [pc, #20] ; (802cce4 <_ZN8touchgfx8LCD16bpp24enableDecompressorL8_RLEEv+0x38>) + 802ccce: 4806 ldr r0, [pc, #24] ; (802cce8 <_ZN8touchgfx8LCD16bpp24enableDecompressorL8_RLEEv+0x3c>) + 802ccd0: f007 fb0c bl 80342ec <__aeabi_atexit> + 802ccd4: 4b04 ldr r3, [pc, #16] ; (802cce8 <_ZN8touchgfx8LCD16bpp24enableDecompressorL8_RLEEv+0x3c>) + 802ccd6: 67eb str r3, [r5, #124] ; 0x7c + 802ccd8: bd38 pop {r3, r4, r5, pc} + 802ccda: bf00 nop + 802ccdc: 2001e7c4 .word 0x2001e7c4 + 802cce0: 20000000 .word 0x20000000 + 802cce4: 08029319 .word 0x08029319 + 802cce8: 20000068 .word 0x20000068 + +0802ccec <_ZN8touchgfx8LCD16bpp25enableDecompressorL8_LZW9Ev>: + 802ccec: b570 push {r4, r5, r6, lr} + 802ccee: 4d0d ldr r5, [pc, #52] ; (802cd24 <_ZN8touchgfx8LCD16bpp25enableDecompressorL8_LZW9Ev+0x38>) + 802ccf0: 4606 mov r6, r0 + 802ccf2: 4c0d ldr r4, [pc, #52] ; (802cd28 <_ZN8touchgfx8LCD16bpp25enableDecompressorL8_LZW9Ev+0x3c>) + 802ccf4: 782b ldrb r3, [r5, #0] + 802ccf6: f3bf 8f5b dmb ish + 802ccfa: f013 0f01 tst.w r3, #1 + 802ccfe: d10d bne.n 802cd1c <_ZN8touchgfx8LCD16bpp25enableDecompressorL8_LZW9Ev+0x30> + 802cd00: 4628 mov r0, r5 + 802cd02: f007 fafa bl 80342fa <__cxa_guard_acquire> + 802cd06: b148 cbz r0, 802cd1c <_ZN8touchgfx8LCD16bpp25enableDecompressorL8_LZW9Ev+0x30> + 802cd08: 4b08 ldr r3, [pc, #32] ; (802cd2c <_ZN8touchgfx8LCD16bpp25enableDecompressorL8_LZW9Ev+0x40>) + 802cd0a: 4628 mov r0, r5 + 802cd0c: 6023 str r3, [r4, #0] + 802cd0e: f007 fb00 bl 8034312 <__cxa_guard_release> + 802cd12: 4a07 ldr r2, [pc, #28] ; (802cd30 <_ZN8touchgfx8LCD16bpp25enableDecompressorL8_LZW9Ev+0x44>) + 802cd14: 4620 mov r0, r4 + 802cd16: 4907 ldr r1, [pc, #28] ; (802cd34 <_ZN8touchgfx8LCD16bpp25enableDecompressorL8_LZW9Ev+0x48>) + 802cd18: f007 fae8 bl 80342ec <__aeabi_atexit> + 802cd1c: f8c6 4080 str.w r4, [r6, #128] ; 0x80 + 802cd20: bd70 pop {r4, r5, r6, pc} + 802cd22: bf00 nop + 802cd24: 2001e7c8 .word 0x2001e7c8 + 802cd28: 2001e83c .word 0x2001e83c + 802cd2c: 0803c7dc .word 0x0803c7dc + 802cd30: 20000000 .word 0x20000000 + 802cd34: 08029317 .word 0x08029317 + +0802cd38 <_ZN8touchgfx8LCD16bpp24enableDecompressorL8_AllEv>: + 802cd38: b510 push {r4, lr} + 802cd3a: 4604 mov r4, r0 + 802cd3c: f7ff ff96 bl 802cc6c <_ZN8touchgfx8LCD16bpp23enableDecompressorL8_L4Ev> + 802cd40: 4620 mov r0, r4 + 802cd42: f7ff ffb3 bl 802ccac <_ZN8touchgfx8LCD16bpp24enableDecompressorL8_RLEEv> + 802cd46: 4620 mov r0, r4 + 802cd48: e8bd 4010 ldmia.w sp!, {r4, lr} + 802cd4c: f7ff bfce b.w 802ccec <_ZN8touchgfx8LCD16bpp25enableDecompressorL8_LZW9Ev> + +0802cd50 <_ZNK8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhPKtssiihhh>: + 802cd50: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 802cd54: e9dd 450b ldrd r4, r5, [sp, #44] ; 0x2c + 802cd58: f9bd e024 ldrsh.w lr, [sp, #36] ; 0x24 + 802cd5c: 2d00 cmp r5, #0 + 802cd5e: f9bd b028 ldrsh.w fp, [sp, #40] ; 0x28 + 802cd62: fb05 4c0e mla ip, r5, lr, r4 + 802cd66: f89d 9034 ldrb.w r9, [sp, #52] ; 0x34 + 802cd6a: f89d 7038 ldrb.w r7, [sp, #56] ; 0x38 + 802cd6e: f89d 603c ldrb.w r6, [sp, #60] ; 0x3c + 802cd72: eb02 0a0c add.w sl, r2, ip + 802cd76: 8808 ldrh r0, [r1, #0] + 802cd78: f2c0 80b0 blt.w 802cedc <_ZNK8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhPKtssiihhh+0x18c> + 802cd7c: 45ab cmp fp, r5 + 802cd7e: f340 80ad ble.w 802cedc <_ZNK8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhPKtssiihhh+0x18c> + 802cd82: 2c00 cmp r4, #0 + 802cd84: f2c0 80a8 blt.w 802ced8 <_ZNK8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhPKtssiihhh+0x188> + 802cd88: 45a6 cmp lr, r4 + 802cd8a: f340 80a5 ble.w 802ced8 <_ZNK8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhPKtssiihhh+0x188> + 802cd8e: f812 200c ldrb.w r2, [r2, ip] + 802cd92: f833 8012 ldrh.w r8, [r3, r2, lsl #1] + 802cd96: 1c62 adds r2, r4, #1 + 802cd98: f100 80a3 bmi.w 802cee2 <_ZNK8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhPKtssiihhh+0x192> + 802cd9c: 4596 cmp lr, r2 + 802cd9e: f340 80a0 ble.w 802cee2 <_ZNK8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhPKtssiihhh+0x192> + 802cda2: f1b9 0f00 cmp.w r9, #0 + 802cda6: f000 809c beq.w 802cee2 <_ZNK8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhPKtssiihhh+0x192> + 802cdaa: f89a 2001 ldrb.w r2, [sl, #1] + 802cdae: f833 c012 ldrh.w ip, [r3, r2, lsl #1] + 802cdb2: 3501 adds r5, #1 + 802cdb4: f100 8099 bmi.w 802ceea <_ZNK8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhPKtssiihhh+0x19a> + 802cdb8: 45ab cmp fp, r5 + 802cdba: f340 8096 ble.w 802ceea <_ZNK8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhPKtssiihhh+0x19a> + 802cdbe: 2f00 cmp r7, #0 + 802cdc0: f000 8093 beq.w 802ceea <_ZNK8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhPKtssiihhh+0x19a> + 802cdc4: 2c00 cmp r4, #0 + 802cdc6: f2c0 808e blt.w 802cee6 <_ZNK8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhPKtssiihhh+0x196> + 802cdca: 45a6 cmp lr, r4 + 802cdcc: f340 808b ble.w 802cee6 <_ZNK8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhPKtssiihhh+0x196> + 802cdd0: f81a 200e ldrb.w r2, [sl, lr] + 802cdd4: f833 5012 ldrh.w r5, [r3, r2, lsl #1] + 802cdd8: 3401 adds r4, #1 + 802cdda: f100 8089 bmi.w 802cef0 <_ZNK8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhPKtssiihhh+0x1a0> + 802cdde: 45a6 cmp lr, r4 + 802cde0: f340 8086 ble.w 802cef0 <_ZNK8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhPKtssiihhh+0x1a0> + 802cde4: f1b9 0f00 cmp.w r9, #0 + 802cde8: f000 8082 beq.w 802cef0 <_ZNK8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhPKtssiihhh+0x1a0> + 802cdec: 44d6 add lr, sl + 802cdee: f89e 2001 ldrb.w r2, [lr, #1] + 802cdf2: f833 3012 ldrh.w r3, [r3, r2, lsl #1] + 802cdf6: ea4f 4408 mov.w r4, r8, lsl #16 + 802cdfa: f428 68fc bic.w r8, r8, #2016 ; 0x7e0 + 802cdfe: fb19 fe07 smulbb lr, r9, r7 + 802ce02: f1c7 0210 rsb r2, r7, #16 + 802ce06: f004 64fc and.w r4, r4, #132120576 ; 0x7e00000 + 802ce0a: f3ce 0ec7 ubfx lr, lr, #3, #8 + 802ce0e: eba2 0209 sub.w r2, r2, r9 + 802ce12: ea44 0808 orr.w r8, r4, r8 + 802ce16: ea4f 440c mov.w r4, ip, lsl #16 + 802ce1a: f42c 6cfc bic.w ip, ip, #2016 ; 0x7e0 + 802ce1e: eb0e 0242 add.w r2, lr, r2, lsl #1 + 802ce22: f004 64fc and.w r4, r4, #132120576 ; 0x7e00000 + 802ce26: ebce 0747 rsb r7, lr, r7, lsl #1 + 802ce2a: ea44 0c0c orr.w ip, r4, ip + 802ce2e: ebce 0449 rsb r4, lr, r9, lsl #1 + 802ce32: fb04 f40c mul.w r4, r4, ip + 802ce36: fb02 4808 mla r8, r2, r8, r4 + 802ce3a: 041a lsls r2, r3, #16 + 802ce3c: f423 63fc bic.w r3, r3, #2016 ; 0x7e0 + 802ce40: b2b4 uxth r4, r6 + 802ce42: f002 62fc and.w r2, r2, #132120576 ; 0x7e00000 + 802ce46: 43f6 mvns r6, r6 + 802ce48: 4313 orrs r3, r2 + 802ce4a: 042a lsls r2, r5, #16 + 802ce4c: f425 65fc bic.w r5, r5, #2016 ; 0x7e0 + 802ce50: b2f6 uxtb r6, r6 + 802ce52: f002 62fc and.w r2, r2, #132120576 ; 0x7e00000 + 802ce56: fb0e 8303 mla r3, lr, r3, r8 + 802ce5a: 432a orrs r2, r5 + 802ce5c: fb07 3202 mla r2, r7, r2, r3 + 802ce60: 10c7 asrs r7, r0, #3 + 802ce62: 0d53 lsrs r3, r2, #21 + 802ce64: f007 07fc and.w r7, r7, #252 ; 0xfc + 802ce68: 0952 lsrs r2, r2, #5 + 802ce6a: fb17 f706 smulbb r7, r7, r6 + 802ce6e: f403 63fc and.w r3, r3, #2016 ; 0x7e0 + 802ce72: f422 62fc bic.w r2, r2, #2016 ; 0x7e0 + 802ce76: 431a orrs r2, r3 + 802ce78: b293 uxth r3, r2 + 802ce7a: 1202 asrs r2, r0, #8 + 802ce7c: 121d asrs r5, r3, #8 + 802ce7e: f002 02f8 and.w r2, r2, #248 ; 0xf8 + 802ce82: 00c0 lsls r0, r0, #3 + 802ce84: f005 05f8 and.w r5, r5, #248 ; 0xf8 + 802ce88: fb12 f206 smulbb r2, r2, r6 + 802ce8c: b2c0 uxtb r0, r0 + 802ce8e: fb05 2504 mla r5, r5, r4, r2 + 802ce92: 10da asrs r2, r3, #3 + 802ce94: fb10 f006 smulbb r0, r0, r6 + 802ce98: 00db lsls r3, r3, #3 + 802ce9a: b2ad uxth r5, r5 + 802ce9c: f002 02fc and.w r2, r2, #252 ; 0xfc + 802cea0: b2db uxtb r3, r3 + 802cea2: fb02 7204 mla r2, r2, r4, r7 + 802cea6: fb03 0004 mla r0, r3, r4, r0 + 802ceaa: 1c6b adds r3, r5, #1 + 802ceac: b292 uxth r2, r2 + 802ceae: b280 uxth r0, r0 + 802ceb0: eb03 2515 add.w r5, r3, r5, lsr #8 + 802ceb4: 1c43 adds r3, r0, #1 + 802ceb6: f405 4578 and.w r5, r5, #63488 ; 0xf800 + 802ceba: eb03 2310 add.w r3, r3, r0, lsr #8 + 802cebe: 1c50 adds r0, r2, #1 + 802cec0: eb00 2212 add.w r2, r0, r2, lsr #8 + 802cec4: f3c3 23c4 ubfx r3, r3, #11, #5 + 802cec8: 0952 lsrs r2, r2, #5 + 802ceca: 432b orrs r3, r5 + 802cecc: f402 62fc and.w r2, r2, #2016 ; 0x7e0 + 802ced0: 4313 orrs r3, r2 + 802ced2: 800b strh r3, [r1, #0] + 802ced4: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 802ced8: 4680 mov r8, r0 + 802ceda: e75c b.n 802cd96 <_ZNK8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhPKtssiihhh+0x46> + 802cedc: 4684 mov ip, r0 + 802cede: 4680 mov r8, r0 + 802cee0: e767 b.n 802cdb2 <_ZNK8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhPKtssiihhh+0x62> + 802cee2: 4684 mov ip, r0 + 802cee4: e765 b.n 802cdb2 <_ZNK8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhPKtssiihhh+0x62> + 802cee6: 4605 mov r5, r0 + 802cee8: e776 b.n 802cdd8 <_ZNK8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhPKtssiihhh+0x88> + 802ceea: 4603 mov r3, r0 + 802ceec: 4605 mov r5, r0 + 802ceee: e782 b.n 802cdf6 <_ZNK8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhPKtssiihhh+0xa6> + 802cef0: 4603 mov r3, r0 + 802cef2: e780 b.n 802cdf6 <_ZNK8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhPKtssiihhh+0xa6> + +0802cef4 <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff>: + 802cef4: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 802cef8: b099 sub sp, #100 ; 0x64 + 802cefa: 9215 str r2, [sp, #84] ; 0x54 + 802cefc: 9309 str r3, [sp, #36] ; 0x24 + 802cefe: 9a27 ldr r2, [sp, #156] ; 0x9c + 802cf00: f89d 30ac ldrb.w r3, [sp, #172] ; 0xac + 802cf04: 9016 str r0, [sp, #88] ; 0x58 + 802cf06: 930d str r3, [sp, #52] ; 0x34 + 802cf08: 6850 ldr r0, [r2, #4] + 802cf0a: 910c str r1, [sp, #48] ; 0x30 + 802cf0c: 6812 ldr r2, [r2, #0] + 802cf0e: e9dd 1328 ldrd r1, r3, [sp, #160] ; 0xa0 + 802cf12: e9dd a523 ldrd sl, r5, [sp, #140] ; 0x8c + 802cf16: fb00 1303 mla r3, r0, r3, r1 + 802cf1a: eb02 0843 add.w r8, r2, r3, lsl #1 + 802cf1e: 9b2a ldr r3, [sp, #168] ; 0xa8 + 802cf20: 681b ldr r3, [r3, #0] + 802cf22: 930b str r3, [sp, #44] ; 0x2c + 802cf24: 9b2a ldr r3, [sp, #168] ; 0xa8 + 802cf26: 685e ldr r6, [r3, #4] + 802cf28: 9b0d ldr r3, [sp, #52] ; 0x34 + 802cf2a: 3604 adds r6, #4 + 802cf2c: 43db mvns r3, r3 + 802cf2e: b2db uxtb r3, r3 + 802cf30: 930a str r3, [sp, #40] ; 0x28 + 802cf32: 9b0c ldr r3, [sp, #48] ; 0x30 + 802cf34: 2b00 cmp r3, #0 + 802cf36: dc03 bgt.n 802cf40 <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x4c> + 802cf38: 9b15 ldr r3, [sp, #84] ; 0x54 + 802cf3a: 2b00 cmp r3, #0 + 802cf3c: f340 8225 ble.w 802d38a <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x496> + 802cf40: 9b2a ldr r3, [sp, #168] ; 0xa8 + 802cf42: f9b3 1008 ldrsh.w r1, [r3, #8] + 802cf46: f9b3 200c ldrsh.w r2, [r3, #12] + 802cf4a: 1e48 subs r0, r1, #1 + 802cf4c: 1e57 subs r7, r2, #1 + 802cf4e: 9b09 ldr r3, [sp, #36] ; 0x24 + 802cf50: 2b00 cmp r3, #0 + 802cf52: f340 80e3 ble.w 802d11c <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x228> + 802cf56: ea5f 4c2a movs.w ip, sl, asr #16 + 802cf5a: ea4f 4325 mov.w r3, r5, asr #16 + 802cf5e: d406 bmi.n 802cf6e <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x7a> + 802cf60: 4584 cmp ip, r0 + 802cf62: da04 bge.n 802cf6e <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x7a> + 802cf64: 2b00 cmp r3, #0 + 802cf66: db02 blt.n 802cf6e <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x7a> + 802cf68: 42bb cmp r3, r7 + 802cf6a: f2c0 80d8 blt.w 802d11e <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x22a> + 802cf6e: f11c 0c01 adds.w ip, ip, #1 + 802cf72: f100 80c9 bmi.w 802d108 <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x214> + 802cf76: 4561 cmp r1, ip + 802cf78: f2c0 80c6 blt.w 802d108 <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x214> + 802cf7c: 3301 adds r3, #1 + 802cf7e: f100 80c3 bmi.w 802d108 <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x214> + 802cf82: 429a cmp r2, r3 + 802cf84: f2c0 80c0 blt.w 802d108 <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x214> + 802cf88: f8dd b024 ldr.w fp, [sp, #36] ; 0x24 + 802cf8c: 4647 mov r7, r8 + 802cf8e: f1bb 0f00 cmp.w fp, #0 + 802cf92: f340 80e3 ble.w 802d15c <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x268> + 802cf96: 9a2a ldr r2, [sp, #168] ; 0xa8 + 802cf98: ea4f 4c25 mov.w ip, r5, asr #16 + 802cf9c: 9b2a ldr r3, [sp, #168] ; 0xa8 + 802cf9e: f3ca 3003 ubfx r0, sl, #12, #4 + 802cfa2: f8d2 e00c ldr.w lr, [r2, #12] + 802cfa6: ea5f 422a movs.w r2, sl, asr #16 + 802cfaa: f3c5 3103 ubfx r1, r5, #12, #4 + 802cfae: 689b ldr r3, [r3, #8] + 802cfb0: f100 8121 bmi.w 802d1f6 <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x302> + 802cfb4: f103 39ff add.w r9, r3, #4294967295 + 802cfb8: 454a cmp r2, r9 + 802cfba: f280 811c bge.w 802d1f6 <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x302> + 802cfbe: f1bc 0f00 cmp.w ip, #0 + 802cfc2: f2c0 8118 blt.w 802d1f6 <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x302> + 802cfc6: f10e 39ff add.w r9, lr, #4294967295 + 802cfca: 45cc cmp ip, r9 + 802cfcc: f280 8113 bge.w 802d1f6 <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x302> + 802cfd0: b21b sxth r3, r3 + 802cfd2: 9c0b ldr r4, [sp, #44] ; 0x2c + 802cfd4: fb0c 2203 mla r2, ip, r3, r2 + 802cfd8: eb04 0902 add.w r9, r4, r2 + 802cfdc: 5ca2 ldrb r2, [r4, r2] + 802cfde: f836 e012 ldrh.w lr, [r6, r2, lsl #1] + 802cfe2: 2800 cmp r0, #0 + 802cfe4: f000 80fe beq.w 802d1e4 <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x2f0> + 802cfe8: f899 2001 ldrb.w r2, [r9, #1] + 802cfec: f836 2012 ldrh.w r2, [r6, r2, lsl #1] + 802cff0: 9211 str r2, [sp, #68] ; 0x44 + 802cff2: b151 cbz r1, 802d00a <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x116> + 802cff4: eb09 0203 add.w r2, r9, r3 + 802cff8: f819 3003 ldrb.w r3, [r9, r3] + 802cffc: f836 3013 ldrh.w r3, [r6, r3, lsl #1] + 802d000: 930f str r3, [sp, #60] ; 0x3c + 802d002: 7853 ldrb r3, [r2, #1] + 802d004: f836 3013 ldrh.w r3, [r6, r3, lsl #1] + 802d008: 9312 str r3, [sp, #72] ; 0x48 + 802d00a: 9b11 ldr r3, [sp, #68] ; 0x44 + 802d00c: fb10 f201 smulbb r2, r0, r1 + 802d010: 9c12 ldr r4, [sp, #72] ; 0x48 + 802d012: ea4f 4c03 mov.w ip, r3, lsl #16 + 802d016: f423 63fc bic.w r3, r3, #2016 ; 0x7e0 + 802d01a: f424 64fc bic.w r4, r4, #2016 ; 0x7e0 + 802d01e: 10d2 asrs r2, r2, #3 + 802d020: f00c 6cfc and.w ip, ip, #132120576 ; 0x7e00000 + 802d024: ebc2 0940 rsb r9, r2, r0, lsl #1 + 802d028: ea4c 0c03 orr.w ip, ip, r3 + 802d02c: 9b12 ldr r3, [sp, #72] ; 0x48 + 802d02e: 041b lsls r3, r3, #16 + 802d030: f003 63fc and.w r3, r3, #132120576 ; 0x7e00000 + 802d034: 4323 orrs r3, r4 + 802d036: 9c0a ldr r4, [sp, #40] ; 0x28 + 802d038: 4353 muls r3, r2 + 802d03a: fb09 330c mla r3, r9, ip, r3 + 802d03e: ea4f 4c0e mov.w ip, lr, lsl #16 + 802d042: f42e 6efc bic.w lr, lr, #2016 ; 0x7e0 + 802d046: f00c 6cfc and.w ip, ip, #132120576 ; 0x7e00000 + 802d04a: ea4c 0e0e orr.w lr, ip, lr + 802d04e: f1c1 0c10 rsb ip, r1, #16 + 802d052: ebac 0c00 sub.w ip, ip, r0 + 802d056: eb02 0c4c add.w ip, r2, ip, lsl #1 + 802d05a: ebc2 0241 rsb r2, r2, r1, lsl #1 + 802d05e: fb0c 3c0e mla ip, ip, lr, r3 + 802d062: 9b0f ldr r3, [sp, #60] ; 0x3c + 802d064: 0418 lsls r0, r3, #16 + 802d066: f423 63fc bic.w r3, r3, #2016 ; 0x7e0 + 802d06a: f000 60fc and.w r0, r0, #132120576 ; 0x7e00000 + 802d06e: 4318 orrs r0, r3 + 802d070: fb02 c200 mla r2, r2, r0, ip + 802d074: 8838 ldrh r0, [r7, #0] + 802d076: 0d53 lsrs r3, r2, #21 + 802d078: 0952 lsrs r2, r2, #5 + 802d07a: f403 63fc and.w r3, r3, #2016 ; 0x7e0 + 802d07e: 1201 asrs r1, r0, #8 + 802d080: f422 62fc bic.w r2, r2, #2016 ; 0x7e0 + 802d084: ea4f 0ee0 mov.w lr, r0, asr #3 + 802d088: f001 01f8 and.w r1, r1, #248 ; 0xf8 + 802d08c: 00c0 lsls r0, r0, #3 + 802d08e: 431a orrs r2, r3 + 802d090: f8bd 3034 ldrh.w r3, [sp, #52] ; 0x34 + 802d094: fb11 f104 smulbb r1, r1, r4 + 802d098: f00e 0efc and.w lr, lr, #252 ; 0xfc + 802d09c: b292 uxth r2, r2 + 802d09e: fb1e fe04 smulbb lr, lr, r4 + 802d0a2: b2c0 uxtb r0, r0 + 802d0a4: ea4f 2c22 mov.w ip, r2, asr #8 + 802d0a8: fb10 f004 smulbb r0, r0, r4 + 802d0ac: f00c 0cf8 and.w ip, ip, #248 ; 0xf8 + 802d0b0: fb0c 1c03 mla ip, ip, r3, r1 + 802d0b4: 10d1 asrs r1, r2, #3 + 802d0b6: 00d2 lsls r2, r2, #3 + 802d0b8: f001 01fc and.w r1, r1, #252 ; 0xfc + 802d0bc: fa1f fc8c uxth.w ip, ip + 802d0c0: b2d2 uxtb r2, r2 + 802d0c2: fb01 e103 mla r1, r1, r3, lr + 802d0c6: fb02 0303 mla r3, r2, r3, r0 + 802d0ca: b289 uxth r1, r1 + 802d0cc: b29a uxth r2, r3 + 802d0ce: f10c 0301 add.w r3, ip, #1 + 802d0d2: eb03 2c1c add.w ip, r3, ip, lsr #8 + 802d0d6: 1c53 adds r3, r2, #1 + 802d0d8: eb03 2312 add.w r3, r3, r2, lsr #8 + 802d0dc: 1c4a adds r2, r1, #1 + 802d0de: f40c 4c78 and.w ip, ip, #63488 ; 0xf800 + 802d0e2: eb02 2111 add.w r1, r2, r1, lsr #8 + 802d0e6: f3c3 23c4 ubfx r3, r3, #11, #5 + 802d0ea: 0949 lsrs r1, r1, #5 + 802d0ec: ea43 030c orr.w r3, r3, ip + 802d0f0: f401 61fc and.w r1, r1, #2016 ; 0x7e0 + 802d0f4: 430b orrs r3, r1 + 802d0f6: 803b strh r3, [r7, #0] + 802d0f8: 9b25 ldr r3, [sp, #148] ; 0x94 + 802d0fa: 3702 adds r7, #2 + 802d0fc: f10b 3bff add.w fp, fp, #4294967295 + 802d100: 449a add sl, r3 + 802d102: 9b26 ldr r3, [sp, #152] ; 0x98 + 802d104: 441d add r5, r3 + 802d106: e742 b.n 802cf8e <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x9a> + 802d108: 9b25 ldr r3, [sp, #148] ; 0x94 + 802d10a: f108 0802 add.w r8, r8, #2 + 802d10e: 449a add sl, r3 + 802d110: 9b26 ldr r3, [sp, #152] ; 0x98 + 802d112: 441d add r5, r3 + 802d114: 9b09 ldr r3, [sp, #36] ; 0x24 + 802d116: 3b01 subs r3, #1 + 802d118: 9309 str r3, [sp, #36] ; 0x24 + 802d11a: e718 b.n 802cf4e <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x5a> + 802d11c: d023 beq.n 802d166 <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x272> + 802d11e: 9b09 ldr r3, [sp, #36] ; 0x24 + 802d120: 9825 ldr r0, [sp, #148] ; 0x94 + 802d122: 3b01 subs r3, #1 + 802d124: fb00 a003 mla r0, r0, r3, sl + 802d128: 1400 asrs r0, r0, #16 + 802d12a: f53f af2d bmi.w 802cf88 <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x94> + 802d12e: 3901 subs r1, #1 + 802d130: 4288 cmp r0, r1 + 802d132: f6bf af29 bge.w 802cf88 <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x94> + 802d136: 9926 ldr r1, [sp, #152] ; 0x98 + 802d138: fb01 5303 mla r3, r1, r3, r5 + 802d13c: 141b asrs r3, r3, #16 + 802d13e: f53f af23 bmi.w 802cf88 <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x94> + 802d142: 3a01 subs r2, #1 + 802d144: 4293 cmp r3, r2 + 802d146: f6bf af1f bge.w 802cf88 <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x94> + 802d14a: f8dd e024 ldr.w lr, [sp, #36] ; 0x24 + 802d14e: f8bd 9034 ldrh.w r9, [sp, #52] ; 0x34 + 802d152: f8cd 8038 str.w r8, [sp, #56] ; 0x38 + 802d156: f1be 0f00 cmp.w lr, #0 + 802d15a: dc6c bgt.n 802d236 <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x342> + 802d15c: 9b09 ldr r3, [sp, #36] ; 0x24 + 802d15e: ea23 74e3 bic.w r4, r3, r3, asr #31 + 802d162: eb08 0844 add.w r8, r8, r4, lsl #1 + 802d166: 9b0c ldr r3, [sp, #48] ; 0x30 + 802d168: 2b00 cmp r3, #0 + 802d16a: f340 810e ble.w 802d38a <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x496> + 802d16e: eeb7 7a00 vmov.f32 s14, #112 ; 0x3f800000 1.0 + 802d172: 9b22 ldr r3, [sp, #136] ; 0x88 + 802d174: ee30 0a04 vadd.f32 s0, s0, s8 + 802d178: ee70 0aa4 vadd.f32 s1, s1, s9 + 802d17c: eef0 6a62 vmov.f32 s13, s5 + 802d180: eec7 7a00 vdiv.f32 s15, s14, s0 + 802d184: ee31 1a05 vadd.f32 s2, s2, s10 + 802d188: eefe 6ac8 vcvt.s32.f32 s13, s13, #16 + 802d18c: ee16 aa90 vmov sl, s13 + 802d190: eef0 6a43 vmov.f32 s13, s6 + 802d194: eefe 6ac8 vcvt.s32.f32 s13, s13, #16 + 802d198: ee16 5a90 vmov r5, s13 + 802d19c: ee20 7aa7 vmul.f32 s14, s1, s15 + 802d1a0: ee61 7a27 vmul.f32 s15, s2, s15 + 802d1a4: ee77 2a62 vsub.f32 s5, s14, s5 + 802d1a8: ee37 3ac3 vsub.f32 s6, s15, s6 + 802d1ac: eefe 2ac8 vcvt.s32.f32 s5, s5, #16 + 802d1b0: eebe 3ac8 vcvt.s32.f32 s6, s6, #16 + 802d1b4: ee12 2a90 vmov r2, s5 + 802d1b8: eef0 2a47 vmov.f32 s5, s14 + 802d1bc: fb92 f3f3 sdiv r3, r2, r3 + 802d1c0: ee13 2a10 vmov r2, s6 + 802d1c4: 9325 str r3, [sp, #148] ; 0x94 + 802d1c6: 9b22 ldr r3, [sp, #136] ; 0x88 + 802d1c8: eeb0 3a67 vmov.f32 s6, s15 + 802d1cc: fb92 f3f3 sdiv r3, r2, r3 + 802d1d0: 9326 str r3, [sp, #152] ; 0x98 + 802d1d2: 9b0c ldr r3, [sp, #48] ; 0x30 + 802d1d4: 9a15 ldr r2, [sp, #84] ; 0x54 + 802d1d6: 3b01 subs r3, #1 + 802d1d8: 930c str r3, [sp, #48] ; 0x30 + 802d1da: 9b22 ldr r3, [sp, #136] ; 0x88 + 802d1dc: bf08 it eq + 802d1de: 4613 moveq r3, r2 + 802d1e0: 9309 str r3, [sp, #36] ; 0x24 + 802d1e2: e6a6 b.n 802cf32 <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x3e> + 802d1e4: 2900 cmp r1, #0 + 802d1e6: f43f af10 beq.w 802d00a <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x116> + 802d1ea: f819 3003 ldrb.w r3, [r9, r3] + 802d1ee: f836 3013 ldrh.w r3, [r6, r3, lsl #1] + 802d1f2: 930f str r3, [sp, #60] ; 0x3c + 802d1f4: e709 b.n 802d00a <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x116> + 802d1f6: f112 0901 adds.w r9, r2, #1 + 802d1fa: f53f af7d bmi.w 802d0f8 <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x204> + 802d1fe: 454b cmp r3, r9 + 802d200: f6ff af7a blt.w 802d0f8 <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x204> + 802d204: f11c 0901 adds.w r9, ip, #1 + 802d208: f53f af76 bmi.w 802d0f8 <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x204> + 802d20c: 45ce cmp lr, r9 + 802d20e: f6ff af73 blt.w 802d0f8 <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x204> + 802d212: 9c0d ldr r4, [sp, #52] ; 0x34 + 802d214: b21b sxth r3, r3 + 802d216: 9202 str r2, [sp, #8] + 802d218: fa0f f28e sxth.w r2, lr + 802d21c: 9300 str r3, [sp, #0] + 802d21e: 4633 mov r3, r6 + 802d220: 9201 str r2, [sp, #4] + 802d222: 9a0b ldr r2, [sp, #44] ; 0x2c + 802d224: e9cd 1405 strd r1, r4, [sp, #20] + 802d228: e9cd c003 strd ip, r0, [sp, #12] + 802d22c: 4639 mov r1, r7 + 802d22e: 9816 ldr r0, [sp, #88] ; 0x58 + 802d230: f7ff fd8e bl 802cd50 <_ZNK8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhPKtssiihhh> + 802d234: e760 b.n 802d0f8 <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x204> + 802d236: 9b2a ldr r3, [sp, #168] ; 0xa8 + 802d238: ea4f 422a mov.w r2, sl, asr #16 + 802d23c: 1429 asrs r1, r5, #16 + 802d23e: 9c0b ldr r4, [sp, #44] ; 0x2c + 802d240: f9b3 3008 ldrsh.w r3, [r3, #8] + 802d244: f3ca 3c03 ubfx ip, sl, #12, #4 + 802d248: f3c5 3003 ubfx r0, r5, #12, #4 + 802d24c: fb03 2101 mla r1, r3, r1, r2 + 802d250: 9a0b ldr r2, [sp, #44] ; 0x2c + 802d252: 440a add r2, r1 + 802d254: 5c61 ldrb r1, [r4, r1] + 802d256: f836 1011 ldrh.w r1, [r6, r1, lsl #1] + 802d25a: f1bc 0f00 cmp.w ip, #0 + 802d25e: f000 808c beq.w 802d37a <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x486> + 802d262: 7857 ldrb r7, [r2, #1] + 802d264: f836 4017 ldrh.w r4, [r6, r7, lsl #1] + 802d268: 9413 str r4, [sp, #76] ; 0x4c + 802d26a: b140 cbz r0, 802d27e <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x38a> + 802d26c: 18d7 adds r7, r2, r3 + 802d26e: 5cd3 ldrb r3, [r2, r3] + 802d270: f836 3013 ldrh.w r3, [r6, r3, lsl #1] + 802d274: 9310 str r3, [sp, #64] ; 0x40 + 802d276: 787b ldrb r3, [r7, #1] + 802d278: f836 3013 ldrh.w r3, [r6, r3, lsl #1] + 802d27c: 9314 str r3, [sp, #80] ; 0x50 + 802d27e: 9b13 ldr r3, [sp, #76] ; 0x4c + 802d280: fb1c f200 smulbb r2, ip, r0 + 802d284: 9c14 ldr r4, [sp, #80] ; 0x50 + 802d286: f10e 3eff add.w lr, lr, #4294967295 + 802d28a: 041f lsls r7, r3, #16 + 802d28c: f423 63fc bic.w r3, r3, #2016 ; 0x7e0 + 802d290: 10d2 asrs r2, r2, #3 + 802d292: f424 6bfc bic.w fp, r4, #2016 ; 0x7e0 + 802d296: f007 67fc and.w r7, r7, #132120576 ; 0x7e00000 + 802d29a: 431f orrs r7, r3 + 802d29c: ebc2 034c rsb r3, r2, ip, lsl #1 + 802d2a0: 9317 str r3, [sp, #92] ; 0x5c + 802d2a2: 9b14 ldr r3, [sp, #80] ; 0x50 + 802d2a4: 9c17 ldr r4, [sp, #92] ; 0x5c + 802d2a6: 041b lsls r3, r3, #16 + 802d2a8: f003 63fc and.w r3, r3, #132120576 ; 0x7e00000 + 802d2ac: ea43 030b orr.w r3, r3, fp + 802d2b0: ea4f 4b01 mov.w fp, r1, lsl #16 + 802d2b4: f421 61fc bic.w r1, r1, #2016 ; 0x7e0 + 802d2b8: 4353 muls r3, r2 + 802d2ba: fb04 3707 mla r7, r4, r7, r3 + 802d2be: f00b 63fc and.w r3, fp, #132120576 ; 0x7e00000 + 802d2c2: 9c0a ldr r4, [sp, #40] ; 0x28 + 802d2c4: ea43 0b01 orr.w fp, r3, r1 + 802d2c8: f1c0 0110 rsb r1, r0, #16 + 802d2cc: 9b10 ldr r3, [sp, #64] ; 0x40 + 802d2ce: eba1 0c0c sub.w ip, r1, ip + 802d2d2: eb02 0c4c add.w ip, r2, ip, lsl #1 + 802d2d6: ebc2 0240 rsb r2, r2, r0, lsl #1 + 802d2da: fb0c 770b mla r7, ip, fp, r7 + 802d2de: ea4f 4c03 mov.w ip, r3, lsl #16 + 802d2e2: f423 6bfc bic.w fp, r3, #2016 ; 0x7e0 + 802d2e6: f00c 6cfc and.w ip, ip, #132120576 ; 0x7e00000 + 802d2ea: ea4c 0c0b orr.w ip, ip, fp + 802d2ee: fb02 770c mla r7, r2, ip, r7 + 802d2f2: 9a0e ldr r2, [sp, #56] ; 0x38 + 802d2f4: 0d79 lsrs r1, r7, #21 + 802d2f6: 8812 ldrh r2, [r2, #0] + 802d2f8: 097f lsrs r7, r7, #5 + 802d2fa: f401 61fc and.w r1, r1, #2016 ; 0x7e0 + 802d2fe: f427 67fc bic.w r7, r7, #2016 ; 0x7e0 + 802d302: 430f orrs r7, r1 + 802d304: 1211 asrs r1, r2, #8 + 802d306: b2bb uxth r3, r7 + 802d308: f001 01f8 and.w r1, r1, #248 ; 0xf8 + 802d30c: 10d7 asrs r7, r2, #3 + 802d30e: fb11 f104 smulbb r1, r1, r4 + 802d312: 1218 asrs r0, r3, #8 + 802d314: 00d2 lsls r2, r2, #3 + 802d316: f007 07fc and.w r7, r7, #252 ; 0xfc + 802d31a: f000 00f8 and.w r0, r0, #248 ; 0xf8 + 802d31e: fb17 f704 smulbb r7, r7, r4 + 802d322: b2d2 uxtb r2, r2 + 802d324: fb00 1009 mla r0, r0, r9, r1 + 802d328: 10d9 asrs r1, r3, #3 + 802d32a: fb12 f204 smulbb r2, r2, r4 + 802d32e: 00db lsls r3, r3, #3 + 802d330: f001 01fc and.w r1, r1, #252 ; 0xfc + 802d334: b280 uxth r0, r0 + 802d336: b2db uxtb r3, r3 + 802d338: fb01 7109 mla r1, r1, r9, r7 + 802d33c: fb03 2309 mla r3, r3, r9, r2 + 802d340: 1c42 adds r2, r0, #1 + 802d342: b289 uxth r1, r1 + 802d344: b29b uxth r3, r3 + 802d346: eb02 2010 add.w r0, r2, r0, lsr #8 + 802d34a: 1c4f adds r7, r1, #1 + 802d34c: 1c5a adds r2, r3, #1 + 802d34e: eb07 2111 add.w r1, r7, r1, lsr #8 + 802d352: f400 4078 and.w r0, r0, #63488 ; 0xf800 + 802d356: eb02 2213 add.w r2, r2, r3, lsr #8 + 802d35a: 9b0e ldr r3, [sp, #56] ; 0x38 + 802d35c: 0949 lsrs r1, r1, #5 + 802d35e: f3c2 22c4 ubfx r2, r2, #11, #5 + 802d362: f401 61fc and.w r1, r1, #2016 ; 0x7e0 + 802d366: 4310 orrs r0, r2 + 802d368: 4308 orrs r0, r1 + 802d36a: f823 0b02 strh.w r0, [r3], #2 + 802d36e: 930e str r3, [sp, #56] ; 0x38 + 802d370: 9b25 ldr r3, [sp, #148] ; 0x94 + 802d372: 449a add sl, r3 + 802d374: 9b26 ldr r3, [sp, #152] ; 0x98 + 802d376: 441d add r5, r3 + 802d378: e6ed b.n 802d156 <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x262> + 802d37a: 2800 cmp r0, #0 + 802d37c: f43f af7f beq.w 802d27e <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x38a> + 802d380: 5cd3 ldrb r3, [r2, r3] + 802d382: f836 3013 ldrh.w r3, [r6, r3, lsl #1] + 802d386: 9310 str r3, [sp, #64] ; 0x40 + 802d388: e779 b.n 802d27e <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x38a> + 802d38a: b019 add sp, #100 ; 0x64 + 802d38c: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + +0802d390 <_ZNK8touchgfx8LCD16bpp57TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKtssiihh>: + 802d390: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} + 802d394: e9dd 480a ldrd r4, r8, [sp, #40] ; 0x28 + 802d398: f9bd e020 ldrsh.w lr, [sp, #32] + 802d39c: f1b8 0f00 cmp.w r8, #0 + 802d3a0: f9bd a024 ldrsh.w sl, [sp, #36] ; 0x24 + 802d3a4: fb08 470e mla r7, r8, lr, r4 + 802d3a8: f89d 5030 ldrb.w r5, [sp, #48] ; 0x30 + 802d3ac: f89d 6034 ldrb.w r6, [sp, #52] ; 0x34 + 802d3b0: eb02 0907 add.w r9, r2, r7 + 802d3b4: 8808 ldrh r0, [r1, #0] + 802d3b6: db67 blt.n 802d488 <_ZNK8touchgfx8LCD16bpp57TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKtssiihh+0xf8> + 802d3b8: 45c2 cmp sl, r8 + 802d3ba: dd65 ble.n 802d488 <_ZNK8touchgfx8LCD16bpp57TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKtssiihh+0xf8> + 802d3bc: 2c00 cmp r4, #0 + 802d3be: db61 blt.n 802d484 <_ZNK8touchgfx8LCD16bpp57TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKtssiihh+0xf4> + 802d3c0: 45a6 cmp lr, r4 + 802d3c2: dd5f ble.n 802d484 <_ZNK8touchgfx8LCD16bpp57TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKtssiihh+0xf4> + 802d3c4: 5dd2 ldrb r2, [r2, r7] + 802d3c6: f833 c012 ldrh.w ip, [r3, r2, lsl #1] + 802d3ca: 1c62 adds r2, r4, #1 + 802d3cc: d45f bmi.n 802d48e <_ZNK8touchgfx8LCD16bpp57TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKtssiihh+0xfe> + 802d3ce: 4596 cmp lr, r2 + 802d3d0: dd5d ble.n 802d48e <_ZNK8touchgfx8LCD16bpp57TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKtssiihh+0xfe> + 802d3d2: 2d00 cmp r5, #0 + 802d3d4: d05b beq.n 802d48e <_ZNK8touchgfx8LCD16bpp57TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKtssiihh+0xfe> + 802d3d6: f899 2001 ldrb.w r2, [r9, #1] + 802d3da: f833 7012 ldrh.w r7, [r3, r2, lsl #1] + 802d3de: f118 0801 adds.w r8, r8, #1 + 802d3e2: d458 bmi.n 802d496 <_ZNK8touchgfx8LCD16bpp57TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKtssiihh+0x106> + 802d3e4: 45c2 cmp sl, r8 + 802d3e6: dd56 ble.n 802d496 <_ZNK8touchgfx8LCD16bpp57TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKtssiihh+0x106> + 802d3e8: 2e00 cmp r6, #0 + 802d3ea: d054 beq.n 802d496 <_ZNK8touchgfx8LCD16bpp57TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKtssiihh+0x106> + 802d3ec: 2c00 cmp r4, #0 + 802d3ee: db50 blt.n 802d492 <_ZNK8touchgfx8LCD16bpp57TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKtssiihh+0x102> + 802d3f0: 45a6 cmp lr, r4 + 802d3f2: dd4e ble.n 802d492 <_ZNK8touchgfx8LCD16bpp57TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKtssiihh+0x102> + 802d3f4: f819 200e ldrb.w r2, [r9, lr] + 802d3f8: f833 2012 ldrh.w r2, [r3, r2, lsl #1] + 802d3fc: 3401 adds r4, #1 + 802d3fe: d407 bmi.n 802d410 <_ZNK8touchgfx8LCD16bpp57TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKtssiihh+0x80> + 802d400: 45a6 cmp lr, r4 + 802d402: dd05 ble.n 802d410 <_ZNK8touchgfx8LCD16bpp57TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKtssiihh+0x80> + 802d404: b125 cbz r5, 802d410 <_ZNK8touchgfx8LCD16bpp57TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKtssiihh+0x80> + 802d406: 44ce add lr, r9 + 802d408: f89e 0001 ldrb.w r0, [lr, #1] + 802d40c: f833 0010 ldrh.w r0, [r3, r0, lsl #1] + 802d410: fb15 f406 smulbb r4, r5, r6 + 802d414: ea4f 430c mov.w r3, ip, lsl #16 + 802d418: ea4f 4e07 mov.w lr, r7, lsl #16 + 802d41c: f42c 6cfc bic.w ip, ip, #2016 ; 0x7e0 + 802d420: f003 63fc and.w r3, r3, #132120576 ; 0x7e00000 + 802d424: f3c4 04c7 ubfx r4, r4, #3, #8 + 802d428: f00e 6efc and.w lr, lr, #132120576 ; 0x7e00000 + 802d42c: f427 67fc bic.w r7, r7, #2016 ; 0x7e0 + 802d430: ea43 0c0c orr.w ip, r3, ip + 802d434: f1c6 0310 rsb r3, r6, #16 + 802d438: ea4e 0707 orr.w r7, lr, r7 + 802d43c: ebc4 0646 rsb r6, r4, r6, lsl #1 + 802d440: 1b5b subs r3, r3, r5 + 802d442: ebc4 0545 rsb r5, r4, r5, lsl #1 + 802d446: eb04 0343 add.w r3, r4, r3, lsl #1 + 802d44a: 437d muls r5, r7 + 802d44c: fb03 5c0c mla ip, r3, ip, r5 + 802d450: 0403 lsls r3, r0, #16 + 802d452: f420 60fc bic.w r0, r0, #2016 ; 0x7e0 + 802d456: f003 63fc and.w r3, r3, #132120576 ; 0x7e00000 + 802d45a: 4318 orrs r0, r3 + 802d45c: 0413 lsls r3, r2, #16 + 802d45e: f422 62fc bic.w r2, r2, #2016 ; 0x7e0 + 802d462: f003 63fc and.w r3, r3, #132120576 ; 0x7e00000 + 802d466: fb04 c000 mla r0, r4, r0, ip + 802d46a: 4313 orrs r3, r2 + 802d46c: fb06 0003 mla r0, r6, r3, r0 + 802d470: 0d43 lsrs r3, r0, #21 + 802d472: 0940 lsrs r0, r0, #5 + 802d474: f403 63fc and.w r3, r3, #2016 ; 0x7e0 + 802d478: f420 60fc bic.w r0, r0, #2016 ; 0x7e0 + 802d47c: 4318 orrs r0, r3 + 802d47e: 8008 strh r0, [r1, #0] + 802d480: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + 802d484: 4684 mov ip, r0 + 802d486: e7a0 b.n 802d3ca <_ZNK8touchgfx8LCD16bpp57TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKtssiihh+0x3a> + 802d488: 4607 mov r7, r0 + 802d48a: 4684 mov ip, r0 + 802d48c: e7a7 b.n 802d3de <_ZNK8touchgfx8LCD16bpp57TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKtssiihh+0x4e> + 802d48e: 4607 mov r7, r0 + 802d490: e7a5 b.n 802d3de <_ZNK8touchgfx8LCD16bpp57TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKtssiihh+0x4e> + 802d492: 4602 mov r2, r0 + 802d494: e7b2 b.n 802d3fc <_ZNK8touchgfx8LCD16bpp57TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKtssiihh+0x6c> + 802d496: 4602 mov r2, r0 + 802d498: e7ba b.n 802d410 <_ZNK8touchgfx8LCD16bpp57TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKtssiihh+0x80> + +0802d49a <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff>: + 802d49a: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 802d49e: b093 sub sp, #76 ; 0x4c + 802d4a0: eef7 6a00 vmov.f32 s13, #112 ; 0x3f800000 1.0 + 802d4a4: 920f str r2, [sp, #60] ; 0x3c + 802d4a6: 9a21 ldr r2, [sp, #132] ; 0x84 + 802d4a8: 9010 str r0, [sp, #64] ; 0x40 + 802d4aa: 9108 str r1, [sp, #32] + 802d4ac: 6850 ldr r0, [r2, #4] + 802d4ae: 9306 str r3, [sp, #24] + 802d4b0: 6812 ldr r2, [r2, #0] + 802d4b2: e9dd 1322 ldrd r1, r3, [sp, #136] ; 0x88 + 802d4b6: e9dd 461d ldrd r4, r6, [sp, #116] ; 0x74 + 802d4ba: fb00 1303 mla r3, r0, r3, r1 + 802d4be: eb02 0943 add.w r9, r2, r3, lsl #1 + 802d4c2: 9b24 ldr r3, [sp, #144] ; 0x90 + 802d4c4: 681b ldr r3, [r3, #0] + 802d4c6: 9307 str r3, [sp, #28] + 802d4c8: 9b24 ldr r3, [sp, #144] ; 0x90 + 802d4ca: 685f ldr r7, [r3, #4] + 802d4cc: 3704 adds r7, #4 + 802d4ce: 9b08 ldr r3, [sp, #32] + 802d4d0: 2b00 cmp r3, #0 + 802d4d2: dc03 bgt.n 802d4dc <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x42> + 802d4d4: 9b0f ldr r3, [sp, #60] ; 0x3c + 802d4d6: 2b00 cmp r3, #0 + 802d4d8: f340 81b2 ble.w 802d840 <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x3a6> + 802d4dc: 9b24 ldr r3, [sp, #144] ; 0x90 + 802d4de: f9b3 1008 ldrsh.w r1, [r3, #8] + 802d4e2: f9b3 200c ldrsh.w r2, [r3, #12] + 802d4e6: 1e48 subs r0, r1, #1 + 802d4e8: f102 3cff add.w ip, r2, #4294967295 + 802d4ec: 9b06 ldr r3, [sp, #24] + 802d4ee: 2b00 cmp r3, #0 + 802d4f0: f340 80a9 ble.w 802d646 <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1ac> + 802d4f4: ea5f 4e24 movs.w lr, r4, asr #16 + 802d4f8: ea4f 4326 mov.w r3, r6, asr #16 + 802d4fc: d406 bmi.n 802d50c <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x72> + 802d4fe: 4586 cmp lr, r0 + 802d500: da04 bge.n 802d50c <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x72> + 802d502: 2b00 cmp r3, #0 + 802d504: db02 blt.n 802d50c <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x72> + 802d506: 4563 cmp r3, ip + 802d508: f2c0 809e blt.w 802d648 <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1ae> + 802d50c: f11e 0e01 adds.w lr, lr, #1 + 802d510: f100 808f bmi.w 802d632 <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x198> + 802d514: 4571 cmp r1, lr + 802d516: f2c0 808c blt.w 802d632 <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x198> + 802d51a: 3301 adds r3, #1 + 802d51c: f100 8089 bmi.w 802d632 <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x198> + 802d520: 429a cmp r2, r3 + 802d522: f2c0 8086 blt.w 802d632 <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x198> + 802d526: f8dd b018 ldr.w fp, [sp, #24] + 802d52a: 46c8 mov r8, r9 + 802d52c: f1bb 0f00 cmp.w fp, #0 + 802d530: f340 80a6 ble.w 802d680 <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1e6> + 802d534: 9a24 ldr r2, [sp, #144] ; 0x90 + 802d536: ea4f 4c26 mov.w ip, r6, asr #16 + 802d53a: 9b24 ldr r3, [sp, #144] ; 0x90 + 802d53c: f3c4 3003 ubfx r0, r4, #12, #4 + 802d540: f8d2 e00c ldr.w lr, [r2, #12] + 802d544: 1422 asrs r2, r4, #16 + 802d546: f3c6 3103 ubfx r1, r6, #12, #4 + 802d54a: 689b ldr r3, [r3, #8] + 802d54c: f100 80e3 bmi.w 802d716 <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x27c> + 802d550: f103 3aff add.w sl, r3, #4294967295 + 802d554: 4552 cmp r2, sl + 802d556: f280 80de bge.w 802d716 <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x27c> + 802d55a: f1bc 0f00 cmp.w ip, #0 + 802d55e: f2c0 80da blt.w 802d716 <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x27c> + 802d562: f10e 3aff add.w sl, lr, #4294967295 + 802d566: 45d4 cmp ip, sl + 802d568: f280 80d5 bge.w 802d716 <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x27c> + 802d56c: b21b sxth r3, r3 + 802d56e: 9d07 ldr r5, [sp, #28] + 802d570: fb0c 2203 mla r2, ip, r3, r2 + 802d574: eb05 0a02 add.w sl, r5, r2 + 802d578: 5caa ldrb r2, [r5, r2] + 802d57a: f837 e012 ldrh.w lr, [r7, r2, lsl #1] + 802d57e: 2800 cmp r0, #0 + 802d580: f000 80c0 beq.w 802d704 <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x26a> + 802d584: f89a 2001 ldrb.w r2, [sl, #1] + 802d588: f837 2012 ldrh.w r2, [r7, r2, lsl #1] + 802d58c: 920b str r2, [sp, #44] ; 0x2c + 802d58e: b151 cbz r1, 802d5a6 <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x10c> + 802d590: eb0a 0203 add.w r2, sl, r3 + 802d594: f81a 3003 ldrb.w r3, [sl, r3] + 802d598: f837 3013 ldrh.w r3, [r7, r3, lsl #1] + 802d59c: 9309 str r3, [sp, #36] ; 0x24 + 802d59e: 7853 ldrb r3, [r2, #1] + 802d5a0: f837 3013 ldrh.w r3, [r7, r3, lsl #1] + 802d5a4: 930c str r3, [sp, #48] ; 0x30 + 802d5a6: 9b0b ldr r3, [sp, #44] ; 0x2c + 802d5a8: fb10 f201 smulbb r2, r0, r1 + 802d5ac: 9d0c ldr r5, [sp, #48] ; 0x30 + 802d5ae: ea4f 4c03 mov.w ip, r3, lsl #16 + 802d5b2: f423 63fc bic.w r3, r3, #2016 ; 0x7e0 + 802d5b6: f425 65fc bic.w r5, r5, #2016 ; 0x7e0 + 802d5ba: 10d2 asrs r2, r2, #3 + 802d5bc: f00c 6cfc and.w ip, ip, #132120576 ; 0x7e00000 + 802d5c0: ebc2 0a40 rsb sl, r2, r0, lsl #1 + 802d5c4: ea4c 0c03 orr.w ip, ip, r3 + 802d5c8: 9b0c ldr r3, [sp, #48] ; 0x30 + 802d5ca: 041b lsls r3, r3, #16 + 802d5cc: f003 63fc and.w r3, r3, #132120576 ; 0x7e00000 + 802d5d0: 432b orrs r3, r5 + 802d5d2: 4353 muls r3, r2 + 802d5d4: fb0a 330c mla r3, sl, ip, r3 + 802d5d8: ea4f 4c0e mov.w ip, lr, lsl #16 + 802d5dc: f42e 6efc bic.w lr, lr, #2016 ; 0x7e0 + 802d5e0: f00c 6cfc and.w ip, ip, #132120576 ; 0x7e00000 + 802d5e4: ea4c 0e0e orr.w lr, ip, lr + 802d5e8: f1c1 0c10 rsb ip, r1, #16 + 802d5ec: ebac 0c00 sub.w ip, ip, r0 + 802d5f0: eb02 0c4c add.w ip, r2, ip, lsl #1 + 802d5f4: ebc2 0241 rsb r2, r2, r1, lsl #1 + 802d5f8: fb0c 3c0e mla ip, ip, lr, r3 + 802d5fc: 9b09 ldr r3, [sp, #36] ; 0x24 + 802d5fe: 0418 lsls r0, r3, #16 + 802d600: f423 63fc bic.w r3, r3, #2016 ; 0x7e0 + 802d604: f000 60fc and.w r0, r0, #132120576 ; 0x7e00000 + 802d608: 4318 orrs r0, r3 + 802d60a: fb02 c200 mla r2, r2, r0, ip + 802d60e: 0d53 lsrs r3, r2, #21 + 802d610: 0952 lsrs r2, r2, #5 + 802d612: f403 63fc and.w r3, r3, #2016 ; 0x7e0 + 802d616: f422 62fc bic.w r2, r2, #2016 ; 0x7e0 + 802d61a: 431a orrs r2, r3 + 802d61c: f8a8 2000 strh.w r2, [r8] + 802d620: 9b1f ldr r3, [sp, #124] ; 0x7c + 802d622: f108 0802 add.w r8, r8, #2 + 802d626: f10b 3bff add.w fp, fp, #4294967295 + 802d62a: 441c add r4, r3 + 802d62c: 9b20 ldr r3, [sp, #128] ; 0x80 + 802d62e: 441e add r6, r3 + 802d630: e77c b.n 802d52c <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x92> + 802d632: 9b1f ldr r3, [sp, #124] ; 0x7c + 802d634: f109 0902 add.w r9, r9, #2 + 802d638: 441c add r4, r3 + 802d63a: 9b20 ldr r3, [sp, #128] ; 0x80 + 802d63c: 441e add r6, r3 + 802d63e: 9b06 ldr r3, [sp, #24] + 802d640: 3b01 subs r3, #1 + 802d642: 9306 str r3, [sp, #24] + 802d644: e752 b.n 802d4ec <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x52> + 802d646: d020 beq.n 802d68a <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1f0> + 802d648: 9b06 ldr r3, [sp, #24] + 802d64a: 981f ldr r0, [sp, #124] ; 0x7c + 802d64c: 3b01 subs r3, #1 + 802d64e: fb00 4003 mla r0, r0, r3, r4 + 802d652: 1400 asrs r0, r0, #16 + 802d654: f53f af67 bmi.w 802d526 <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x8c> + 802d658: 3901 subs r1, #1 + 802d65a: 4288 cmp r0, r1 + 802d65c: f6bf af63 bge.w 802d526 <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x8c> + 802d660: 9920 ldr r1, [sp, #128] ; 0x80 + 802d662: fb01 6303 mla r3, r1, r3, r6 + 802d666: 141b asrs r3, r3, #16 + 802d668: f53f af5d bmi.w 802d526 <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x8c> + 802d66c: 3a01 subs r2, #1 + 802d66e: 4293 cmp r3, r2 + 802d670: f6bf af59 bge.w 802d526 <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x8c> + 802d674: f8dd 8018 ldr.w r8, [sp, #24] + 802d678: 46ca mov sl, r9 + 802d67a: f1b8 0f00 cmp.w r8, #0 + 802d67e: dc67 bgt.n 802d750 <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x2b6> + 802d680: 9b06 ldr r3, [sp, #24] + 802d682: ea23 75e3 bic.w r5, r3, r3, asr #31 + 802d686: eb09 0945 add.w r9, r9, r5, lsl #1 + 802d68a: 9b08 ldr r3, [sp, #32] + 802d68c: 2b00 cmp r3, #0 + 802d68e: f340 80d7 ble.w 802d840 <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x3a6> + 802d692: ee30 0a04 vadd.f32 s0, s0, s8 + 802d696: 9b1c ldr r3, [sp, #112] ; 0x70 + 802d698: ee70 0aa4 vadd.f32 s1, s1, s9 + 802d69c: eeb0 6a62 vmov.f32 s12, s5 + 802d6a0: eec6 7a80 vdiv.f32 s15, s13, s0 + 802d6a4: ee31 1a05 vadd.f32 s2, s2, s10 + 802d6a8: eebe 6ac8 vcvt.s32.f32 s12, s12, #16 + 802d6ac: ee16 4a10 vmov r4, s12 + 802d6b0: eeb0 6a43 vmov.f32 s12, s6 + 802d6b4: eebe 6ac8 vcvt.s32.f32 s12, s12, #16 + 802d6b8: ee16 6a10 vmov r6, s12 + 802d6bc: ee20 7aa7 vmul.f32 s14, s1, s15 + 802d6c0: ee61 7a27 vmul.f32 s15, s2, s15 + 802d6c4: ee77 2a62 vsub.f32 s5, s14, s5 + 802d6c8: ee37 3ac3 vsub.f32 s6, s15, s6 + 802d6cc: eefe 2ac8 vcvt.s32.f32 s5, s5, #16 + 802d6d0: eebe 3ac8 vcvt.s32.f32 s6, s6, #16 + 802d6d4: ee12 2a90 vmov r2, s5 + 802d6d8: eef0 2a47 vmov.f32 s5, s14 + 802d6dc: fb92 f3f3 sdiv r3, r2, r3 + 802d6e0: ee13 2a10 vmov r2, s6 + 802d6e4: 931f str r3, [sp, #124] ; 0x7c + 802d6e6: 9b1c ldr r3, [sp, #112] ; 0x70 + 802d6e8: eeb0 3a67 vmov.f32 s6, s15 + 802d6ec: fb92 f3f3 sdiv r3, r2, r3 + 802d6f0: 9320 str r3, [sp, #128] ; 0x80 + 802d6f2: 9b08 ldr r3, [sp, #32] + 802d6f4: 9a0f ldr r2, [sp, #60] ; 0x3c + 802d6f6: 3b01 subs r3, #1 + 802d6f8: 9308 str r3, [sp, #32] + 802d6fa: 9b1c ldr r3, [sp, #112] ; 0x70 + 802d6fc: bf08 it eq + 802d6fe: 4613 moveq r3, r2 + 802d700: 9306 str r3, [sp, #24] + 802d702: e6e4 b.n 802d4ce <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x34> + 802d704: 2900 cmp r1, #0 + 802d706: f43f af4e beq.w 802d5a6 <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x10c> + 802d70a: f81a 3003 ldrb.w r3, [sl, r3] + 802d70e: f837 3013 ldrh.w r3, [r7, r3, lsl #1] + 802d712: 9309 str r3, [sp, #36] ; 0x24 + 802d714: e747 b.n 802d5a6 <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x10c> + 802d716: f112 0a01 adds.w sl, r2, #1 + 802d71a: d481 bmi.n 802d620 <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x186> + 802d71c: 4553 cmp r3, sl + 802d71e: f6ff af7f blt.w 802d620 <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x186> + 802d722: f11c 0a01 adds.w sl, ip, #1 + 802d726: f53f af7b bmi.w 802d620 <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x186> + 802d72a: 45d6 cmp lr, sl + 802d72c: f6ff af78 blt.w 802d620 <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x186> + 802d730: b21b sxth r3, r3 + 802d732: e9cd 2c02 strd r2, ip, [sp, #8] + 802d736: fa0f f28e sxth.w r2, lr + 802d73a: 9300 str r3, [sp, #0] + 802d73c: 463b mov r3, r7 + 802d73e: 9201 str r2, [sp, #4] + 802d740: 9a07 ldr r2, [sp, #28] + 802d742: e9cd 0104 strd r0, r1, [sp, #16] + 802d746: 4641 mov r1, r8 + 802d748: 9810 ldr r0, [sp, #64] ; 0x40 + 802d74a: f7ff fe21 bl 802d390 <_ZNK8touchgfx8LCD16bpp57TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKtssiihh> + 802d74e: e767 b.n 802d620 <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x186> + 802d750: 9b24 ldr r3, [sp, #144] ; 0x90 + 802d752: 1422 asrs r2, r4, #16 + 802d754: 1431 asrs r1, r6, #16 + 802d756: 9d07 ldr r5, [sp, #28] + 802d758: f9b3 3008 ldrsh.w r3, [r3, #8] + 802d75c: f3c4 3e03 ubfx lr, r4, #12, #4 + 802d760: f3c6 3003 ubfx r0, r6, #12, #4 + 802d764: fb03 2101 mla r1, r3, r1, r2 + 802d768: 9a07 ldr r2, [sp, #28] + 802d76a: 440a add r2, r1 + 802d76c: 5c69 ldrb r1, [r5, r1] + 802d76e: f837 1011 ldrh.w r1, [r7, r1, lsl #1] + 802d772: f1be 0f00 cmp.w lr, #0 + 802d776: d05c beq.n 802d832 <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x398> + 802d778: f892 c001 ldrb.w ip, [r2, #1] + 802d77c: f837 501c ldrh.w r5, [r7, ip, lsl #1] + 802d780: 950d str r5, [sp, #52] ; 0x34 + 802d782: b150 cbz r0, 802d79a <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x300> + 802d784: eb02 0c03 add.w ip, r2, r3 + 802d788: 5cd3 ldrb r3, [r2, r3] + 802d78a: f837 3013 ldrh.w r3, [r7, r3, lsl #1] + 802d78e: 930a str r3, [sp, #40] ; 0x28 + 802d790: f89c 3001 ldrb.w r3, [ip, #1] + 802d794: f837 3013 ldrh.w r3, [r7, r3, lsl #1] + 802d798: 930e str r3, [sp, #56] ; 0x38 + 802d79a: 9b0d ldr r3, [sp, #52] ; 0x34 + 802d79c: fb1e f200 smulbb r2, lr, r0 + 802d7a0: 9d0e ldr r5, [sp, #56] ; 0x38 + 802d7a2: f108 38ff add.w r8, r8, #4294967295 + 802d7a6: ea4f 4c03 mov.w ip, r3, lsl #16 + 802d7aa: f423 63fc bic.w r3, r3, #2016 ; 0x7e0 + 802d7ae: 10d2 asrs r2, r2, #3 + 802d7b0: f425 6bfc bic.w fp, r5, #2016 ; 0x7e0 + 802d7b4: f00c 6cfc and.w ip, ip, #132120576 ; 0x7e00000 + 802d7b8: ea4c 0c03 orr.w ip, ip, r3 + 802d7bc: ebc2 034e rsb r3, r2, lr, lsl #1 + 802d7c0: 9311 str r3, [sp, #68] ; 0x44 + 802d7c2: 9b0e ldr r3, [sp, #56] ; 0x38 + 802d7c4: 9d11 ldr r5, [sp, #68] ; 0x44 + 802d7c6: 041b lsls r3, r3, #16 + 802d7c8: f003 63fc and.w r3, r3, #132120576 ; 0x7e00000 + 802d7cc: ea43 030b orr.w r3, r3, fp + 802d7d0: ea4f 4b01 mov.w fp, r1, lsl #16 + 802d7d4: f421 61fc bic.w r1, r1, #2016 ; 0x7e0 + 802d7d8: 4353 muls r3, r2 + 802d7da: fb05 3c0c mla ip, r5, ip, r3 + 802d7de: f00b 63fc and.w r3, fp, #132120576 ; 0x7e00000 + 802d7e2: ea43 0b01 orr.w fp, r3, r1 + 802d7e6: f1c0 0110 rsb r1, r0, #16 + 802d7ea: 9b0a ldr r3, [sp, #40] ; 0x28 + 802d7ec: eba1 0e0e sub.w lr, r1, lr + 802d7f0: eb02 0e4e add.w lr, r2, lr, lsl #1 + 802d7f4: ebc2 0240 rsb r2, r2, r0, lsl #1 + 802d7f8: fb0e cc0b mla ip, lr, fp, ip + 802d7fc: ea4f 4b03 mov.w fp, r3, lsl #16 + 802d800: f423 6efc bic.w lr, r3, #2016 ; 0x7e0 + 802d804: f00b 6bfc and.w fp, fp, #132120576 ; 0x7e00000 + 802d808: ea4b 0e0e orr.w lr, fp, lr + 802d80c: fb02 cc0e mla ip, r2, lr, ip + 802d810: ea4f 535c mov.w r3, ip, lsr #21 + 802d814: ea4f 1c5c mov.w ip, ip, lsr #5 + 802d818: f403 63fc and.w r3, r3, #2016 ; 0x7e0 + 802d81c: f42c 6cfc bic.w ip, ip, #2016 ; 0x7e0 + 802d820: ea43 0c0c orr.w ip, r3, ip + 802d824: 9b1f ldr r3, [sp, #124] ; 0x7c + 802d826: 441c add r4, r3 + 802d828: 9b20 ldr r3, [sp, #128] ; 0x80 + 802d82a: f82a cb02 strh.w ip, [sl], #2 + 802d82e: 441e add r6, r3 + 802d830: e723 b.n 802d67a <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1e0> + 802d832: 2800 cmp r0, #0 + 802d834: d0b1 beq.n 802d79a <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x300> + 802d836: 5cd3 ldrb r3, [r2, r3] + 802d838: f837 3013 ldrh.w r3, [r7, r3, lsl #1] + 802d83c: 930a str r3, [sp, #40] ; 0x28 + 802d83e: e7ac b.n 802d79a <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x300> + 802d840: b013 add sp, #76 ; 0x4c + 802d842: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + +0802d846 <_ZNK8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhS4_ssiihhh>: + 802d846: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 802d84a: 880d ldrh r5, [r1, #0] + 802d84c: b087 sub sp, #28 + 802d84e: 10ef asrs r7, r5, #3 + 802d850: 9103 str r1, [sp, #12] + 802d852: ea4f 2a25 mov.w sl, r5, asr #8 + 802d856: f9bd 9040 ldrsh.w r9, [sp, #64] ; 0x40 + 802d85a: 00ed lsls r5, r5, #3 + 802d85c: f007 07fc and.w r7, r7, #252 ; 0xfc + 802d860: f00a 0af8 and.w sl, sl, #248 ; 0xf8 + 802d864: f9bd b044 ldrsh.w fp, [sp, #68] ; 0x44 + 802d868: b2ed uxtb r5, r5 + 802d86a: 9701 str r7, [sp, #4] + 802d86c: f89d 4050 ldrb.w r4, [sp, #80] ; 0x50 + 802d870: 9502 str r5, [sp, #8] + 802d872: 9d01 ldr r5, [sp, #4] + 802d874: 9902 ldr r1, [sp, #8] + 802d876: 022d lsls r5, r5, #8 + 802d878: f89d e054 ldrb.w lr, [sp, #84] ; 0x54 + 802d87c: f89d 8058 ldrb.w r8, [sp, #88] ; 0x58 + 802d880: ea45 450a orr.w r5, r5, sl, lsl #16 + 802d884: e9dd 0612 ldrd r0, r6, [sp, #72] ; 0x48 + 802d888: 430d orrs r5, r1 + 802d88a: fb06 0709 mla r7, r6, r9, r0 + 802d88e: 2e00 cmp r6, #0 + 802d890: 9505 str r5, [sp, #20] + 802d892: eb02 0c07 add.w ip, r2, r7 + 802d896: f2c0 80b6 blt.w 802da06 <_ZNK8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhS4_ssiihhh+0x1c0> + 802d89a: 45b3 cmp fp, r6 + 802d89c: f340 80b3 ble.w 802da06 <_ZNK8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhS4_ssiihhh+0x1c0> + 802d8a0: 2800 cmp r0, #0 + 802d8a2: f2c0 80ae blt.w 802da02 <_ZNK8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhS4_ssiihhh+0x1bc> + 802d8a6: 4581 cmp r9, r0 + 802d8a8: f340 80ab ble.w 802da02 <_ZNK8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhS4_ssiihhh+0x1bc> + 802d8ac: 5dd7 ldrb r7, [r2, r7] + 802d8ae: eb07 0747 add.w r7, r7, r7, lsl #1 + 802d8b2: 441f add r7, r3 + 802d8b4: 1c42 adds r2, r0, #1 + 802d8b6: f100 80a9 bmi.w 802da0c <_ZNK8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhS4_ssiihhh+0x1c6> + 802d8ba: 4591 cmp r9, r2 + 802d8bc: f340 80a6 ble.w 802da0c <_ZNK8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhS4_ssiihhh+0x1c6> + 802d8c0: 2c00 cmp r4, #0 + 802d8c2: f000 80a3 beq.w 802da0c <_ZNK8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhS4_ssiihhh+0x1c6> + 802d8c6: f89c 5001 ldrb.w r5, [ip, #1] + 802d8ca: eb05 0545 add.w r5, r5, r5, lsl #1 + 802d8ce: 441d add r5, r3 + 802d8d0: 3601 adds r6, #1 + 802d8d2: f100 809f bmi.w 802da14 <_ZNK8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhS4_ssiihhh+0x1ce> + 802d8d6: 45b3 cmp fp, r6 + 802d8d8: f340 809c ble.w 802da14 <_ZNK8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhS4_ssiihhh+0x1ce> + 802d8dc: f1be 0f00 cmp.w lr, #0 + 802d8e0: f000 8098 beq.w 802da14 <_ZNK8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhS4_ssiihhh+0x1ce> + 802d8e4: 2800 cmp r0, #0 + 802d8e6: f2c0 8093 blt.w 802da10 <_ZNK8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhS4_ssiihhh+0x1ca> + 802d8ea: 4581 cmp r9, r0 + 802d8ec: f340 8090 ble.w 802da10 <_ZNK8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhS4_ssiihhh+0x1ca> + 802d8f0: f81c 6009 ldrb.w r6, [ip, r9] + 802d8f4: eb06 0646 add.w r6, r6, r6, lsl #1 + 802d8f8: 441e add r6, r3 + 802d8fa: 3001 adds r0, #1 + 802d8fc: f100 808d bmi.w 802da1a <_ZNK8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhS4_ssiihhh+0x1d4> + 802d900: 4581 cmp r9, r0 + 802d902: f340 808a ble.w 802da1a <_ZNK8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhS4_ssiihhh+0x1d4> + 802d906: 2c00 cmp r4, #0 + 802d908: f000 8087 beq.w 802da1a <_ZNK8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhS4_ssiihhh+0x1d4> + 802d90c: 44e1 add r9, ip + 802d90e: f899 2001 ldrb.w r2, [r9, #1] + 802d912: eb02 0242 add.w r2, r2, r2, lsl #1 + 802d916: 4413 add r3, r2 + 802d918: b2a4 uxth r4, r4 + 802d91a: f897 c002 ldrb.w ip, [r7, #2] + 802d91e: fa1f fe8e uxth.w lr, lr + 802d922: 9901 ldr r1, [sp, #4] + 802d924: fb04 fb0e mul.w fp, r4, lr + 802d928: 0124 lsls r4, r4, #4 + 802d92a: ebcb 1e0e rsb lr, fp, lr, lsl #4 + 802d92e: f5c4 7980 rsb r9, r4, #256 ; 0x100 + 802d932: eba4 040b sub.w r4, r4, fp + 802d936: fa1f f08e uxth.w r0, lr + 802d93a: b2a2 uxth r2, r4 + 802d93c: 78ac ldrb r4, [r5, #2] + 802d93e: eba9 0900 sub.w r9, r9, r0 + 802d942: fa1f fe88 uxth.w lr, r8 + 802d946: 4354 muls r4, r2 + 802d948: ea6f 0808 mvn.w r8, r8 + 802d94c: fa1f f989 uxth.w r9, r9 + 802d950: fa5f f888 uxtb.w r8, r8 + 802d954: fb09 440c mla r4, r9, ip, r4 + 802d958: f896 c002 ldrb.w ip, [r6, #2] + 802d95c: fb1a fa08 smulbb sl, sl, r8 + 802d960: fb00 440c mla r4, r0, ip, r4 + 802d964: f893 c002 ldrb.w ip, [r3, #2] + 802d968: fb0b 4c0c mla ip, fp, ip, r4 + 802d96c: 787c ldrb r4, [r7, #1] + 802d96e: 783f ldrb r7, [r7, #0] + 802d970: f3cc 2c07 ubfx ip, ip, #8, #8 + 802d974: fb0c ac0e mla ip, ip, lr, sl + 802d978: f895 a001 ldrb.w sl, [r5, #1] + 802d97c: 782d ldrb r5, [r5, #0] + 802d97e: fb02 fa0a mul.w sl, r2, sl + 802d982: fa1f fc8c uxth.w ip, ip + 802d986: 436a muls r2, r5 + 802d988: 7835 ldrb r5, [r6, #0] + 802d98a: fb09 aa04 mla sl, r9, r4, sl + 802d98e: 7874 ldrb r4, [r6, #1] + 802d990: fb09 2207 mla r2, r9, r7, r2 + 802d994: fb00 aa04 mla sl, r0, r4, sl + 802d998: 785c ldrb r4, [r3, #1] + 802d99a: fb00 2005 mla r0, r0, r5, r2 + 802d99e: 781b ldrb r3, [r3, #0] + 802d9a0: fb0b a404 mla r4, fp, r4, sl + 802d9a4: fb11 fa08 smulbb sl, r1, r8 + 802d9a8: fb0b 0b03 mla fp, fp, r3, r0 + 802d9ac: 9b02 ldr r3, [sp, #8] + 802d9ae: f3c4 2407 ubfx r4, r4, #8, #8 + 802d9b2: fb13 f808 smulbb r8, r3, r8 + 802d9b6: f3cb 2b07 ubfx fp, fp, #8, #8 + 802d9ba: fb04 a40e mla r4, r4, lr, sl + 802d9be: f10c 0301 add.w r3, ip, #1 + 802d9c2: fb0b 8e0e mla lr, fp, lr, r8 + 802d9c6: b2a4 uxth r4, r4 + 802d9c8: fa1f fe8e uxth.w lr, lr + 802d9cc: eb03 2c1c add.w ip, r3, ip, lsr #8 + 802d9d0: f104 0a01 add.w sl, r4, #1 + 802d9d4: f40c 4378 and.w r3, ip, #63488 ; 0xf800 + 802d9d8: f10e 0c01 add.w ip, lr, #1 + 802d9dc: eb0a 2414 add.w r4, sl, r4, lsr #8 + 802d9e0: eb0c 2c1e add.w ip, ip, lr, lsr #8 + 802d9e4: 0964 lsrs r4, r4, #5 + 802d9e6: f3cc 2cc4 ubfx ip, ip, #11, #5 + 802d9ea: f404 64fc and.w r4, r4, #2016 ; 0x7e0 + 802d9ee: ea4c 0c03 orr.w ip, ip, r3 + 802d9f2: 9b03 ldr r3, [sp, #12] + 802d9f4: ea4c 0c04 orr.w ip, ip, r4 + 802d9f8: f8a3 c000 strh.w ip, [r3] + 802d9fc: b007 add sp, #28 + 802d9fe: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 802da02: af05 add r7, sp, #20 + 802da04: e756 b.n 802d8b4 <_ZNK8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhS4_ssiihhh+0x6e> + 802da06: ad05 add r5, sp, #20 + 802da08: 462f mov r7, r5 + 802da0a: e761 b.n 802d8d0 <_ZNK8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhS4_ssiihhh+0x8a> + 802da0c: ad05 add r5, sp, #20 + 802da0e: e75f b.n 802d8d0 <_ZNK8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhS4_ssiihhh+0x8a> + 802da10: ae05 add r6, sp, #20 + 802da12: e772 b.n 802d8fa <_ZNK8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhS4_ssiihhh+0xb4> + 802da14: ab05 add r3, sp, #20 + 802da16: 461e mov r6, r3 + 802da18: e77e b.n 802d918 <_ZNK8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhS4_ssiihhh+0xd2> + 802da1a: ab05 add r3, sp, #20 + 802da1c: e77c b.n 802d918 <_ZNK8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhS4_ssiihhh+0xd2> + +0802da1e <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff>: + 802da1e: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 802da22: b095 sub sp, #84 ; 0x54 + 802da24: 9212 str r2, [sp, #72] ; 0x48 + 802da26: 9309 str r3, [sp, #36] ; 0x24 + 802da28: 9a23 ldr r2, [sp, #140] ; 0x8c + 802da2a: f89d 309c ldrb.w r3, [sp, #156] ; 0x9c + 802da2e: 9013 str r0, [sp, #76] ; 0x4c + 802da30: 930f str r3, [sp, #60] ; 0x3c + 802da32: 6850 ldr r0, [r2, #4] + 802da34: 910e str r1, [sp, #56] ; 0x38 + 802da36: 6812 ldr r2, [r2, #0] + 802da38: e9dd 1324 ldrd r1, r3, [sp, #144] ; 0x90 + 802da3c: fb00 1303 mla r3, r0, r3, r1 + 802da40: eb02 0343 add.w r3, r2, r3, lsl #1 + 802da44: 930a str r3, [sp, #40] ; 0x28 + 802da46: 9b26 ldr r3, [sp, #152] ; 0x98 + 802da48: 681b ldr r3, [r3, #0] + 802da4a: 930d str r3, [sp, #52] ; 0x34 + 802da4c: 9b26 ldr r3, [sp, #152] ; 0x98 + 802da4e: 685c ldr r4, [r3, #4] + 802da50: 9b0f ldr r3, [sp, #60] ; 0x3c + 802da52: 3404 adds r4, #4 + 802da54: 43db mvns r3, r3 + 802da56: b2db uxtb r3, r3 + 802da58: 930b str r3, [sp, #44] ; 0x2c + 802da5a: 9b0e ldr r3, [sp, #56] ; 0x38 + 802da5c: 2b00 cmp r3, #0 + 802da5e: dc03 bgt.n 802da68 <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x4a> + 802da60: 9b12 ldr r3, [sp, #72] ; 0x48 + 802da62: 2b00 cmp r3, #0 + 802da64: f340 8255 ble.w 802df12 <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x4f4> + 802da68: 9b26 ldr r3, [sp, #152] ; 0x98 + 802da6a: f9b3 1008 ldrsh.w r1, [r3, #8] + 802da6e: f9b3 200c ldrsh.w r2, [r3, #12] + 802da72: 1e48 subs r0, r1, #1 + 802da74: 1e55 subs r5, r2, #1 + 802da76: 9b09 ldr r3, [sp, #36] ; 0x24 + 802da78: 2b00 cmp r3, #0 + 802da7a: f340 80f9 ble.w 802dc70 <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x252> + 802da7e: 9e1f ldr r6, [sp, #124] ; 0x7c + 802da80: 9b20 ldr r3, [sp, #128] ; 0x80 + 802da82: 1436 asrs r6, r6, #16 + 802da84: ea4f 4323 mov.w r3, r3, asr #16 + 802da88: d406 bmi.n 802da98 <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x7a> + 802da8a: 4286 cmp r6, r0 + 802da8c: da04 bge.n 802da98 <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x7a> + 802da8e: 2b00 cmp r3, #0 + 802da90: db02 blt.n 802da98 <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x7a> + 802da92: 42ab cmp r3, r5 + 802da94: f2c0 80ed blt.w 802dc72 <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x254> + 802da98: 3601 adds r6, #1 + 802da9a: f100 80da bmi.w 802dc52 <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x234> + 802da9e: 42b1 cmp r1, r6 + 802daa0: f2c0 80d7 blt.w 802dc52 <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x234> + 802daa4: 3301 adds r3, #1 + 802daa6: f100 80d4 bmi.w 802dc52 <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x234> + 802daaa: 429a cmp r2, r3 + 802daac: f2c0 80d1 blt.w 802dc52 <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x234> + 802dab0: 9b09 ldr r3, [sp, #36] ; 0x24 + 802dab2: 9311 str r3, [sp, #68] ; 0x44 + 802dab4: 9b0a ldr r3, [sp, #40] ; 0x28 + 802dab6: 930c str r3, [sp, #48] ; 0x30 + 802dab8: 9b11 ldr r3, [sp, #68] ; 0x44 + 802daba: 2b00 cmp r3, #0 + 802dabc: f340 80fa ble.w 802dcb4 <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x296> + 802dac0: 9826 ldr r0, [sp, #152] ; 0x98 + 802dac2: 9b20 ldr r3, [sp, #128] ; 0x80 + 802dac4: 9a20 ldr r2, [sp, #128] ; 0x80 + 802dac6: 68c6 ldr r6, [r0, #12] + 802dac8: 141d asrs r5, r3, #16 + 802daca: 981f ldr r0, [sp, #124] ; 0x7c + 802dacc: f3c2 3103 ubfx r1, r2, #12, #4 + 802dad0: 9b1f ldr r3, [sp, #124] ; 0x7c + 802dad2: 9a26 ldr r2, [sp, #152] ; 0x98 + 802dad4: 1400 asrs r0, r0, #16 + 802dad6: f3c3 3303 ubfx r3, r3, #12, #4 + 802dada: 6892 ldr r2, [r2, #8] + 802dadc: f100 813e bmi.w 802dd5c <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x33e> + 802dae0: 1e57 subs r7, r2, #1 + 802dae2: 42b8 cmp r0, r7 + 802dae4: f280 813a bge.w 802dd5c <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x33e> + 802dae8: 2d00 cmp r5, #0 + 802daea: f2c0 8137 blt.w 802dd5c <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x33e> + 802daee: 1e77 subs r7, r6, #1 + 802daf0: 42bd cmp r5, r7 + 802daf2: f280 8133 bge.w 802dd5c <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x33e> + 802daf6: b212 sxth r2, r2 + 802daf8: fb05 0002 mla r0, r5, r2, r0 + 802dafc: 9d0d ldr r5, [sp, #52] ; 0x34 + 802dafe: f815 a000 ldrb.w sl, [r5, r0] + 802db02: 182e adds r6, r5, r0 + 802db04: eb0a 0a4a add.w sl, sl, sl, lsl #1 + 802db08: eb04 050a add.w r5, r4, sl + 802db0c: 2b00 cmp r3, #0 + 802db0e: f000 8117 beq.w 802dd40 <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x322> + 802db12: f896 c001 ldrb.w ip, [r6, #1] + 802db16: eb0c 0c4c add.w ip, ip, ip, lsl #1 + 802db1a: 44a4 add ip, r4 + 802db1c: 2900 cmp r1, #0 + 802db1e: f000 8117 beq.w 802dd50 <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x332> + 802db22: 18b0 adds r0, r6, r2 + 802db24: 5cb2 ldrb r2, [r6, r2] + 802db26: 7840 ldrb r0, [r0, #1] + 802db28: eb02 0242 add.w r2, r2, r2, lsl #1 + 802db2c: eb00 0040 add.w r0, r0, r0, lsl #1 + 802db30: 4422 add r2, r4 + 802db32: 4420 add r0, r4 + 802db34: b29b uxth r3, r3 + 802db36: f89c 7002 ldrb.w r7, [ip, #2] + 802db3a: b289 uxth r1, r1 + 802db3c: f895 b002 ldrb.w fp, [r5, #2] + 802db40: 9e0c ldr r6, [sp, #48] ; 0x30 + 802db42: fb03 f901 mul.w r9, r3, r1 + 802db46: 011b lsls r3, r3, #4 + 802db48: f8b6 e000 ldrh.w lr, [r6] + 802db4c: ebc9 1101 rsb r1, r9, r1, lsl #4 + 802db50: f5c3 7880 rsb r8, r3, #256 ; 0x100 + 802db54: eba3 0309 sub.w r3, r3, r9 + 802db58: f8bd 603c ldrh.w r6, [sp, #60] ; 0x3c + 802db5c: b289 uxth r1, r1 + 802db5e: f814 a00a ldrb.w sl, [r4, sl] + 802db62: b29b uxth r3, r3 + 802db64: eba8 0801 sub.w r8, r8, r1 + 802db68: 435f muls r7, r3 + 802db6a: fa1f f888 uxth.w r8, r8 + 802db6e: 9310 str r3, [sp, #64] ; 0x40 + 802db70: 9b0b ldr r3, [sp, #44] ; 0x2c + 802db72: fb08 770b mla r7, r8, fp, r7 + 802db76: f892 b002 ldrb.w fp, [r2, #2] + 802db7a: fb01 770b mla r7, r1, fp, r7 + 802db7e: f890 b002 ldrb.w fp, [r0, #2] + 802db82: fb09 770b mla r7, r9, fp, r7 + 802db86: ea4f 2b2e mov.w fp, lr, asr #8 + 802db8a: f00b 0bf8 and.w fp, fp, #248 ; 0xf8 + 802db8e: f3c7 2707 ubfx r7, r7, #8, #8 + 802db92: fb1b fb03 smulbb fp, fp, r3 + 802db96: 9b10 ldr r3, [sp, #64] ; 0x40 + 802db98: fb07 b706 mla r7, r7, r6, fp + 802db9c: f895 b001 ldrb.w fp, [r5, #1] + 802dba0: f89c 5001 ldrb.w r5, [ip, #1] + 802dba4: f89c c000 ldrb.w ip, [ip] + 802dba8: b2bf uxth r7, r7 + 802dbaa: 435d muls r5, r3 + 802dbac: 9b0b ldr r3, [sp, #44] ; 0x2c + 802dbae: fb08 550b mla r5, r8, fp, r5 + 802dbb2: f892 b001 ldrb.w fp, [r2, #1] + 802dbb6: fb01 550b mla r5, r1, fp, r5 + 802dbba: f890 b001 ldrb.w fp, [r0, #1] + 802dbbe: fb09 550b mla r5, r9, fp, r5 + 802dbc2: ea4f 0bee mov.w fp, lr, asr #3 + 802dbc6: ea4f 0ece mov.w lr, lr, lsl #3 + 802dbca: f00b 0bfc and.w fp, fp, #252 ; 0xfc + 802dbce: f3c5 2507 ubfx r5, r5, #8, #8 + 802dbd2: fa5f fe8e uxtb.w lr, lr + 802dbd6: fb1b fb03 smulbb fp, fp, r3 + 802dbda: 9b10 ldr r3, [sp, #64] ; 0x40 + 802dbdc: fb03 f30c mul.w r3, r3, ip + 802dbe0: f892 c000 ldrb.w ip, [r2] + 802dbe4: fb05 b506 mla r5, r5, r6, fp + 802dbe8: fb08 330a mla r3, r8, sl, r3 + 802dbec: b2ad uxth r5, r5 + 802dbee: fb01 330c mla r3, r1, ip, r3 + 802dbf2: f890 c000 ldrb.w ip, [r0] + 802dbf6: f105 0b01 add.w fp, r5, #1 + 802dbfa: fb09 3c0c mla ip, r9, ip, r3 + 802dbfe: 9b0b ldr r3, [sp, #44] ; 0x2c + 802dc00: eb0b 2515 add.w r5, fp, r5, lsr #8 + 802dc04: fb1e fe03 smulbb lr, lr, r3 + 802dc08: f3cc 2c07 ubfx ip, ip, #8, #8 + 802dc0c: 1c7b adds r3, r7, #1 + 802dc0e: 096d lsrs r5, r5, #5 + 802dc10: fb0c e606 mla r6, ip, r6, lr + 802dc14: eb03 2717 add.w r7, r3, r7, lsr #8 + 802dc18: f405 65fc and.w r5, r5, #2016 ; 0x7e0 + 802dc1c: b2b6 uxth r6, r6 + 802dc1e: f407 4378 and.w r3, r7, #63488 ; 0xf800 + 802dc22: 1c77 adds r7, r6, #1 + 802dc24: eb07 2716 add.w r7, r7, r6, lsr #8 + 802dc28: f3c7 27c4 ubfx r7, r7, #11, #5 + 802dc2c: 431f orrs r7, r3 + 802dc2e: 9b0c ldr r3, [sp, #48] ; 0x30 + 802dc30: 433d orrs r5, r7 + 802dc32: 801d strh r5, [r3, #0] + 802dc34: 9b0c ldr r3, [sp, #48] ; 0x30 + 802dc36: 9a21 ldr r2, [sp, #132] ; 0x84 + 802dc38: 3302 adds r3, #2 + 802dc3a: 930c str r3, [sp, #48] ; 0x30 + 802dc3c: 9b1f ldr r3, [sp, #124] ; 0x7c + 802dc3e: 4413 add r3, r2 + 802dc40: 9a22 ldr r2, [sp, #136] ; 0x88 + 802dc42: 931f str r3, [sp, #124] ; 0x7c + 802dc44: 9b20 ldr r3, [sp, #128] ; 0x80 + 802dc46: 4413 add r3, r2 + 802dc48: 9320 str r3, [sp, #128] ; 0x80 + 802dc4a: 9b11 ldr r3, [sp, #68] ; 0x44 + 802dc4c: 3b01 subs r3, #1 + 802dc4e: 9311 str r3, [sp, #68] ; 0x44 + 802dc50: e732 b.n 802dab8 <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x9a> + 802dc52: 9b1f ldr r3, [sp, #124] ; 0x7c + 802dc54: 9e21 ldr r6, [sp, #132] ; 0x84 + 802dc56: 4433 add r3, r6 + 802dc58: 9e22 ldr r6, [sp, #136] ; 0x88 + 802dc5a: 931f str r3, [sp, #124] ; 0x7c + 802dc5c: 9b20 ldr r3, [sp, #128] ; 0x80 + 802dc5e: 4433 add r3, r6 + 802dc60: 9320 str r3, [sp, #128] ; 0x80 + 802dc62: 9b09 ldr r3, [sp, #36] ; 0x24 + 802dc64: 3b01 subs r3, #1 + 802dc66: 9309 str r3, [sp, #36] ; 0x24 + 802dc68: 9b0a ldr r3, [sp, #40] ; 0x28 + 802dc6a: 3302 adds r3, #2 + 802dc6c: 930a str r3, [sp, #40] ; 0x28 + 802dc6e: e702 b.n 802da76 <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x58> + 802dc70: d027 beq.n 802dcc2 <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x2a4> + 802dc72: 9b09 ldr r3, [sp, #36] ; 0x24 + 802dc74: 9821 ldr r0, [sp, #132] ; 0x84 + 802dc76: 3b01 subs r3, #1 + 802dc78: 9d1f ldr r5, [sp, #124] ; 0x7c + 802dc7a: fb00 5003 mla r0, r0, r3, r5 + 802dc7e: 1400 asrs r0, r0, #16 + 802dc80: f53f af16 bmi.w 802dab0 <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x92> + 802dc84: 3901 subs r1, #1 + 802dc86: 4288 cmp r0, r1 + 802dc88: f6bf af12 bge.w 802dab0 <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x92> + 802dc8c: 9922 ldr r1, [sp, #136] ; 0x88 + 802dc8e: 9820 ldr r0, [sp, #128] ; 0x80 + 802dc90: fb01 0303 mla r3, r1, r3, r0 + 802dc94: 141b asrs r3, r3, #16 + 802dc96: f53f af0b bmi.w 802dab0 <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x92> + 802dc9a: 3a01 subs r2, #1 + 802dc9c: 4293 cmp r3, r2 + 802dc9e: f6bf af07 bge.w 802dab0 <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x92> + 802dca2: 9b09 ldr r3, [sp, #36] ; 0x24 + 802dca4: f8bd a03c ldrh.w sl, [sp, #60] ; 0x3c + 802dca8: 9311 str r3, [sp, #68] ; 0x44 + 802dcaa: 9b0a ldr r3, [sp, #40] ; 0x28 + 802dcac: 930c str r3, [sp, #48] ; 0x30 + 802dcae: 9b11 ldr r3, [sp, #68] ; 0x44 + 802dcb0: 2b00 cmp r3, #0 + 802dcb2: dc70 bgt.n 802dd96 <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x378> + 802dcb4: 9b09 ldr r3, [sp, #36] ; 0x24 + 802dcb6: 9a0a ldr r2, [sp, #40] ; 0x28 + 802dcb8: ea23 73e3 bic.w r3, r3, r3, asr #31 + 802dcbc: eb02 0343 add.w r3, r2, r3, lsl #1 + 802dcc0: 930a str r3, [sp, #40] ; 0x28 + 802dcc2: 9b0e ldr r3, [sp, #56] ; 0x38 + 802dcc4: 2b00 cmp r3, #0 + 802dcc6: f340 8124 ble.w 802df12 <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x4f4> + 802dcca: eeb7 7a00 vmov.f32 s14, #112 ; 0x3f800000 1.0 + 802dcce: 9b1e ldr r3, [sp, #120] ; 0x78 + 802dcd0: ee30 0a04 vadd.f32 s0, s0, s8 + 802dcd4: ee70 0aa4 vadd.f32 s1, s1, s9 + 802dcd8: eef0 6a62 vmov.f32 s13, s5 + 802dcdc: eec7 7a00 vdiv.f32 s15, s14, s0 + 802dce0: ee31 1a05 vadd.f32 s2, s2, s10 + 802dce4: eefe 6ac8 vcvt.s32.f32 s13, s13, #16 + 802dce8: edcd 6a1f vstr s13, [sp, #124] ; 0x7c + 802dcec: eef0 6a43 vmov.f32 s13, s6 + 802dcf0: eefe 6ac8 vcvt.s32.f32 s13, s13, #16 + 802dcf4: edcd 6a20 vstr s13, [sp, #128] ; 0x80 + 802dcf8: ee20 7aa7 vmul.f32 s14, s1, s15 + 802dcfc: ee61 7a27 vmul.f32 s15, s2, s15 + 802dd00: ee77 2a62 vsub.f32 s5, s14, s5 + 802dd04: ee37 3ac3 vsub.f32 s6, s15, s6 + 802dd08: eefe 2ac8 vcvt.s32.f32 s5, s5, #16 + 802dd0c: eebe 3ac8 vcvt.s32.f32 s6, s6, #16 + 802dd10: ee12 2a90 vmov r2, s5 + 802dd14: eef0 2a47 vmov.f32 s5, s14 + 802dd18: fb92 f3f3 sdiv r3, r2, r3 + 802dd1c: ee13 2a10 vmov r2, s6 + 802dd20: 9321 str r3, [sp, #132] ; 0x84 + 802dd22: 9b1e ldr r3, [sp, #120] ; 0x78 + 802dd24: eeb0 3a67 vmov.f32 s6, s15 + 802dd28: fb92 f3f3 sdiv r3, r2, r3 + 802dd2c: 9322 str r3, [sp, #136] ; 0x88 + 802dd2e: 9b0e ldr r3, [sp, #56] ; 0x38 + 802dd30: 9a12 ldr r2, [sp, #72] ; 0x48 + 802dd32: 3b01 subs r3, #1 + 802dd34: 930e str r3, [sp, #56] ; 0x38 + 802dd36: 9b1e ldr r3, [sp, #120] ; 0x78 + 802dd38: bf08 it eq + 802dd3a: 4613 moveq r3, r2 + 802dd3c: 9309 str r3, [sp, #36] ; 0x24 + 802dd3e: e68c b.n 802da5a <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x3c> + 802dd40: b149 cbz r1, 802dd56 <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x338> + 802dd42: 5cb2 ldrb r2, [r6, r2] + 802dd44: 4628 mov r0, r5 + 802dd46: eb02 0242 add.w r2, r2, r2, lsl #1 + 802dd4a: 4422 add r2, r4 + 802dd4c: 46ac mov ip, r5 + 802dd4e: e6f1 b.n 802db34 <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x116> + 802dd50: 4628 mov r0, r5 + 802dd52: 462a mov r2, r5 + 802dd54: e6ee b.n 802db34 <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x116> + 802dd56: 4628 mov r0, r5 + 802dd58: 462a mov r2, r5 + 802dd5a: e7f7 b.n 802dd4c <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x32e> + 802dd5c: 1c47 adds r7, r0, #1 + 802dd5e: f53f af69 bmi.w 802dc34 <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x216> + 802dd62: 42ba cmp r2, r7 + 802dd64: f6ff af66 blt.w 802dc34 <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x216> + 802dd68: 1c6f adds r7, r5, #1 + 802dd6a: f53f af63 bmi.w 802dc34 <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x216> + 802dd6e: 42be cmp r6, r7 + 802dd70: f6ff af60 blt.w 802dc34 <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x216> + 802dd74: 9f0f ldr r7, [sp, #60] ; 0x3c + 802dd76: b236 sxth r6, r6 + 802dd78: b212 sxth r2, r2 + 802dd7a: 9002 str r0, [sp, #8] + 802dd7c: 9601 str r6, [sp, #4] + 802dd7e: 9200 str r2, [sp, #0] + 802dd80: 9813 ldr r0, [sp, #76] ; 0x4c + 802dd82: e9cd 1705 strd r1, r7, [sp, #20] + 802dd86: e9cd 5303 strd r5, r3, [sp, #12] + 802dd8a: e9dd 120c ldrd r1, r2, [sp, #48] ; 0x30 + 802dd8e: 4623 mov r3, r4 + 802dd90: f7ff fd59 bl 802d846 <_ZNK8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhS4_ssiihhh> + 802dd94: e74e b.n 802dc34 <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x216> + 802dd96: 9a20 ldr r2, [sp, #128] ; 0x80 + 802dd98: 9820 ldr r0, [sp, #128] ; 0x80 + 802dd9a: f3c2 3103 ubfx r1, r2, #12, #4 + 802dd9e: 9d1f ldr r5, [sp, #124] ; 0x7c + 802dda0: 9a26 ldr r2, [sp, #152] ; 0x98 + 802dda2: 1400 asrs r0, r0, #16 + 802dda4: 142d asrs r5, r5, #16 + 802dda6: 9b1f ldr r3, [sp, #124] ; 0x7c + 802dda8: f9b2 2008 ldrsh.w r2, [r2, #8] + 802ddac: f3c3 3303 ubfx r3, r3, #12, #4 + 802ddb0: fb02 5000 mla r0, r2, r0, r5 + 802ddb4: 9d0d ldr r5, [sp, #52] ; 0x34 + 802ddb6: f815 9000 ldrb.w r9, [r5, r0] + 802ddba: 182e adds r6, r5, r0 + 802ddbc: eb09 0949 add.w r9, r9, r9, lsl #1 + 802ddc0: eb04 0509 add.w r5, r4, r9 + 802ddc4: 2b00 cmp r3, #0 + 802ddc6: f000 8096 beq.w 802def6 <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x4d8> + 802ddca: 7877 ldrb r7, [r6, #1] + 802ddcc: eb07 0747 add.w r7, r7, r7, lsl #1 + 802ddd0: 4427 add r7, r4 + 802ddd2: 2900 cmp r1, #0 + 802ddd4: f000 8097 beq.w 802df06 <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x4e8> + 802ddd8: 18b0 adds r0, r6, r2 + 802ddda: 5cb2 ldrb r2, [r6, r2] + 802dddc: 7840 ldrb r0, [r0, #1] + 802ddde: eb02 0242 add.w r2, r2, r2, lsl #1 + 802dde2: eb00 0040 add.w r0, r0, r0, lsl #1 + 802dde6: 4422 add r2, r4 + 802dde8: 4420 add r0, r4 + 802ddea: b29b uxth r3, r3 + 802ddec: 9e0c ldr r6, [sp, #48] ; 0x30 + 802ddee: b289 uxth r1, r1 + 802ddf0: f895 b002 ldrb.w fp, [r5, #2] + 802ddf4: f8b6 c000 ldrh.w ip, [r6] + 802ddf8: fb03 f801 mul.w r8, r3, r1 + 802ddfc: 011b lsls r3, r3, #4 + 802ddfe: 78be ldrb r6, [r7, #2] + 802de00: ebc8 1101 rsb r1, r8, r1, lsl #4 + 802de04: f5c3 7e80 rsb lr, r3, #256 ; 0x100 + 802de08: eba3 0308 sub.w r3, r3, r8 + 802de0c: f814 9009 ldrb.w r9, [r4, r9] + 802de10: b289 uxth r1, r1 + 802de12: b29b uxth r3, r3 + 802de14: ebae 0e01 sub.w lr, lr, r1 + 802de18: 435e muls r6, r3 + 802de1a: fa1f fe8e uxth.w lr, lr + 802de1e: 9310 str r3, [sp, #64] ; 0x40 + 802de20: 9b0b ldr r3, [sp, #44] ; 0x2c + 802de22: fb0e 660b mla r6, lr, fp, r6 + 802de26: f892 b002 ldrb.w fp, [r2, #2] + 802de2a: fb01 660b mla r6, r1, fp, r6 + 802de2e: f890 b002 ldrb.w fp, [r0, #2] + 802de32: fb08 660b mla r6, r8, fp, r6 + 802de36: ea4f 2b2c mov.w fp, ip, asr #8 + 802de3a: f00b 0bf8 and.w fp, fp, #248 ; 0xf8 + 802de3e: f3c6 2607 ubfx r6, r6, #8, #8 + 802de42: fb1b fb03 smulbb fp, fp, r3 + 802de46: 9b10 ldr r3, [sp, #64] ; 0x40 + 802de48: fb06 b60a mla r6, r6, sl, fp + 802de4c: f895 b001 ldrb.w fp, [r5, #1] + 802de50: 787d ldrb r5, [r7, #1] + 802de52: 783f ldrb r7, [r7, #0] + 802de54: b2b6 uxth r6, r6 + 802de56: 435d muls r5, r3 + 802de58: 9b0b ldr r3, [sp, #44] ; 0x2c + 802de5a: fb0e 550b mla r5, lr, fp, r5 + 802de5e: f892 b001 ldrb.w fp, [r2, #1] + 802de62: fb01 550b mla r5, r1, fp, r5 + 802de66: f890 b001 ldrb.w fp, [r0, #1] + 802de6a: fb08 550b mla r5, r8, fp, r5 + 802de6e: ea4f 0bec mov.w fp, ip, asr #3 + 802de72: ea4f 0ccc mov.w ip, ip, lsl #3 + 802de76: f00b 0bfc and.w fp, fp, #252 ; 0xfc + 802de7a: f3c5 2507 ubfx r5, r5, #8, #8 + 802de7e: fa5f fc8c uxtb.w ip, ip + 802de82: fb1b fb03 smulbb fp, fp, r3 + 802de86: 9b10 ldr r3, [sp, #64] ; 0x40 + 802de88: 437b muls r3, r7 + 802de8a: 7817 ldrb r7, [r2, #0] + 802de8c: fb05 b50a mla r5, r5, sl, fp + 802de90: fb0e 3309 mla r3, lr, r9, r3 + 802de94: b2ad uxth r5, r5 + 802de96: fb01 3307 mla r3, r1, r7, r3 + 802de9a: 7807 ldrb r7, [r0, #0] + 802de9c: f105 0b01 add.w fp, r5, #1 + 802dea0: fb08 3707 mla r7, r8, r7, r3 + 802dea4: 9b0b ldr r3, [sp, #44] ; 0x2c + 802dea6: eb0b 2515 add.w r5, fp, r5, lsr #8 + 802deaa: fb1c fc03 smulbb ip, ip, r3 + 802deae: f3c7 2707 ubfx r7, r7, #8, #8 + 802deb2: 1c73 adds r3, r6, #1 + 802deb4: 096d lsrs r5, r5, #5 + 802deb6: fb07 c70a mla r7, r7, sl, ip + 802deba: eb03 2616 add.w r6, r3, r6, lsr #8 + 802debe: f405 65fc and.w r5, r5, #2016 ; 0x7e0 + 802dec2: b2bf uxth r7, r7 + 802dec4: 9b0c ldr r3, [sp, #48] ; 0x30 + 802dec6: f406 4678 and.w r6, r6, #63488 ; 0xf800 + 802deca: 1c7a adds r2, r7, #1 + 802decc: eb02 2217 add.w r2, r2, r7, lsr #8 + 802ded0: f3c2 22c4 ubfx r2, r2, #11, #5 + 802ded4: 4316 orrs r6, r2 + 802ded6: 9a21 ldr r2, [sp, #132] ; 0x84 + 802ded8: 432e orrs r6, r5 + 802deda: f823 6b02 strh.w r6, [r3], #2 + 802dede: 930c str r3, [sp, #48] ; 0x30 + 802dee0: 9b1f ldr r3, [sp, #124] ; 0x7c + 802dee2: 4413 add r3, r2 + 802dee4: 9a22 ldr r2, [sp, #136] ; 0x88 + 802dee6: 931f str r3, [sp, #124] ; 0x7c + 802dee8: 9b20 ldr r3, [sp, #128] ; 0x80 + 802deea: 4413 add r3, r2 + 802deec: 9320 str r3, [sp, #128] ; 0x80 + 802deee: 9b11 ldr r3, [sp, #68] ; 0x44 + 802def0: 3b01 subs r3, #1 + 802def2: 9311 str r3, [sp, #68] ; 0x44 + 802def4: e6db b.n 802dcae <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x290> + 802def6: b149 cbz r1, 802df0c <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x4ee> + 802def8: 5cb2 ldrb r2, [r6, r2] + 802defa: 4628 mov r0, r5 + 802defc: eb02 0242 add.w r2, r2, r2, lsl #1 + 802df00: 4422 add r2, r4 + 802df02: 462f mov r7, r5 + 802df04: e771 b.n 802ddea <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x3cc> + 802df06: 4628 mov r0, r5 + 802df08: 462a mov r2, r5 + 802df0a: e76e b.n 802ddea <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x3cc> + 802df0c: 4628 mov r0, r5 + 802df0e: 462a mov r2, r5 + 802df10: e7f7 b.n 802df02 <_ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x4e4> + 802df12: b015 add sp, #84 ; 0x54 + 802df14: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + +0802df18 <_ZNK8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhS4_ssiihh>: + 802df18: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} + 802df1c: 880f ldrh r7, [r1, #0] + 802df1e: f9bd e030 ldrsh.w lr, [sp, #48] ; 0x30 + 802df22: 023c lsls r4, r7, #8 + 802df24: f9bd 9034 ldrsh.w r9, [sp, #52] ; 0x34 + 802df28: f89d 0040 ldrb.w r0, [sp, #64] ; 0x40 + 802df2c: f404 0b78 and.w fp, r4, #16252928 ; 0xf80000 + 802df30: 017c lsls r4, r7, #5 + 802df32: 00ff lsls r7, r7, #3 + 802df34: f89d 6044 ldrb.w r6, [sp, #68] ; 0x44 + 802df38: f404 447c and.w r4, r4, #64512 ; 0xfc00 + 802df3c: b2ff uxtb r7, r7 + 802df3e: ea4b 0404 orr.w r4, fp, r4 + 802df42: e9dd c50e ldrd ip, r5, [sp, #56] ; 0x38 + 802df46: 4327 orrs r7, r4 + 802df48: fb05 ca0e mla sl, r5, lr, ip + 802df4c: 2d00 cmp r5, #0 + 802df4e: 9701 str r7, [sp, #4] + 802df50: eb02 080a add.w r8, r2, sl + 802df54: db7e blt.n 802e054 <_ZNK8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhS4_ssiihh+0x13c> + 802df56: 45a9 cmp r9, r5 + 802df58: dd7c ble.n 802e054 <_ZNK8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhS4_ssiihh+0x13c> + 802df5a: f1bc 0f00 cmp.w ip, #0 + 802df5e: db77 blt.n 802e050 <_ZNK8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhS4_ssiihh+0x138> + 802df60: 45e6 cmp lr, ip + 802df62: dd75 ble.n 802e050 <_ZNK8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhS4_ssiihh+0x138> + 802df64: f812 700a ldrb.w r7, [r2, sl] + 802df68: eb07 0747 add.w r7, r7, r7, lsl #1 + 802df6c: 441f add r7, r3 + 802df6e: f11c 0201 adds.w r2, ip, #1 + 802df72: d472 bmi.n 802e05a <_ZNK8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhS4_ssiihh+0x142> + 802df74: 4596 cmp lr, r2 + 802df76: dd70 ble.n 802e05a <_ZNK8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhS4_ssiihh+0x142> + 802df78: 2800 cmp r0, #0 + 802df7a: d06e beq.n 802e05a <_ZNK8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhS4_ssiihh+0x142> + 802df7c: f898 4001 ldrb.w r4, [r8, #1] + 802df80: eb04 0444 add.w r4, r4, r4, lsl #1 + 802df84: 441c add r4, r3 + 802df86: 3501 adds r5, #1 + 802df88: d46b bmi.n 802e062 <_ZNK8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhS4_ssiihh+0x14a> + 802df8a: 45a9 cmp r9, r5 + 802df8c: dd69 ble.n 802e062 <_ZNK8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhS4_ssiihh+0x14a> + 802df8e: 2e00 cmp r6, #0 + 802df90: d067 beq.n 802e062 <_ZNK8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhS4_ssiihh+0x14a> + 802df92: f1bc 0f00 cmp.w ip, #0 + 802df96: db62 blt.n 802e05e <_ZNK8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhS4_ssiihh+0x146> + 802df98: 45e6 cmp lr, ip + 802df9a: dd60 ble.n 802e05e <_ZNK8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhS4_ssiihh+0x146> + 802df9c: f818 500e ldrb.w r5, [r8, lr] + 802dfa0: eb05 0545 add.w r5, r5, r5, lsl #1 + 802dfa4: 441d add r5, r3 + 802dfa6: f11c 0201 adds.w r2, ip, #1 + 802dfaa: d45d bmi.n 802e068 <_ZNK8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhS4_ssiihh+0x150> + 802dfac: 4596 cmp lr, r2 + 802dfae: dd5b ble.n 802e068 <_ZNK8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhS4_ssiihh+0x150> + 802dfb0: 2800 cmp r0, #0 + 802dfb2: d059 beq.n 802e068 <_ZNK8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhS4_ssiihh+0x150> + 802dfb4: 44c6 add lr, r8 + 802dfb6: f89e 2001 ldrb.w r2, [lr, #1] + 802dfba: eb02 0242 add.w r2, r2, r2, lsl #1 + 802dfbe: 4413 add r3, r2 + 802dfc0: b280 uxth r0, r0 + 802dfc2: f897 e002 ldrb.w lr, [r7, #2] + 802dfc6: b2b2 uxth r2, r6 + 802dfc8: f897 9000 ldrb.w r9, [r7] + 802dfcc: 787f ldrb r7, [r7, #1] + 802dfce: fb00 f602 mul.w r6, r0, r2 + 802dfd2: 0100 lsls r0, r0, #4 + 802dfd4: ebc6 1202 rsb r2, r6, r2, lsl #4 + 802dfd8: f5c0 7880 rsb r8, r0, #256 ; 0x100 + 802dfdc: 1b80 subs r0, r0, r6 + 802dfde: fa1f fc82 uxth.w ip, r2 + 802dfe2: b282 uxth r2, r0 + 802dfe4: 78a0 ldrb r0, [r4, #2] + 802dfe6: eba8 080c sub.w r8, r8, ip + 802dfea: 4350 muls r0, r2 + 802dfec: fa1f f888 uxth.w r8, r8 + 802dff0: fb08 0e0e mla lr, r8, lr, r0 + 802dff4: 78a8 ldrb r0, [r5, #2] + 802dff6: fb0c e000 mla r0, ip, r0, lr + 802dffa: f893 e002 ldrb.w lr, [r3, #2] + 802dffe: fb06 0e0e mla lr, r6, lr, r0 + 802e002: f40e 4078 and.w r0, lr, #63488 ; 0xf800 + 802e006: f894 e000 ldrb.w lr, [r4] + 802e00a: fb02 fe0e mul.w lr, r2, lr + 802e00e: fb08 e909 mla r9, r8, r9, lr + 802e012: f895 e000 ldrb.w lr, [r5] + 802e016: fb0c 990e mla r9, ip, lr, r9 + 802e01a: f893 e000 ldrb.w lr, [r3] + 802e01e: 785b ldrb r3, [r3, #1] + 802e020: fb06 9e0e mla lr, r6, lr, r9 + 802e024: f3ce 2ec4 ubfx lr, lr, #11, #5 + 802e028: ea4e 0e00 orr.w lr, lr, r0 + 802e02c: 7860 ldrb r0, [r4, #1] + 802e02e: 4350 muls r0, r2 + 802e030: 786a ldrb r2, [r5, #1] + 802e032: fb08 0007 mla r0, r8, r7, r0 + 802e036: fb0c 0202 mla r2, ip, r2, r0 + 802e03a: fb06 2303 mla r3, r6, r3, r2 + 802e03e: 095b lsrs r3, r3, #5 + 802e040: f403 63fc and.w r3, r3, #2016 ; 0x7e0 + 802e044: ea4e 0303 orr.w r3, lr, r3 + 802e048: 800b strh r3, [r1, #0] + 802e04a: b003 add sp, #12 + 802e04c: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 802e050: af01 add r7, sp, #4 + 802e052: e78c b.n 802df6e <_ZNK8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhS4_ssiihh+0x56> + 802e054: ac01 add r4, sp, #4 + 802e056: 4627 mov r7, r4 + 802e058: e795 b.n 802df86 <_ZNK8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhS4_ssiihh+0x6e> + 802e05a: ac01 add r4, sp, #4 + 802e05c: e793 b.n 802df86 <_ZNK8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhS4_ssiihh+0x6e> + 802e05e: ad01 add r5, sp, #4 + 802e060: e7a1 b.n 802dfa6 <_ZNK8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhS4_ssiihh+0x8e> + 802e062: ab01 add r3, sp, #4 + 802e064: 461d mov r5, r3 + 802e066: e7ab b.n 802dfc0 <_ZNK8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhS4_ssiihh+0xa8> + 802e068: ab01 add r3, sp, #4 + 802e06a: e7a9 b.n 802dfc0 <_ZNK8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhS4_ssiihh+0xa8> + +0802e06c <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff>: + 802e06c: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 802e070: b08f sub sp, #60 ; 0x3c + 802e072: 920c str r2, [sp, #48] ; 0x30 + 802e074: 9a1d ldr r2, [sp, #116] ; 0x74 + 802e076: 900d str r0, [sp, #52] ; 0x34 + 802e078: 910a str r1, [sp, #40] ; 0x28 + 802e07a: 6850 ldr r0, [r2, #4] + 802e07c: 9306 str r3, [sp, #24] + 802e07e: 6812 ldr r2, [r2, #0] + 802e080: e9dd 131e ldrd r1, r3, [sp, #120] ; 0x78 + 802e084: e9dd b519 ldrd fp, r5, [sp, #100] ; 0x64 + 802e088: fb00 1303 mla r3, r0, r3, r1 + 802e08c: eb02 0343 add.w r3, r2, r3, lsl #1 + 802e090: 9307 str r3, [sp, #28] + 802e092: 9b20 ldr r3, [sp, #128] ; 0x80 + 802e094: 681b ldr r3, [r3, #0] + 802e096: 9308 str r3, [sp, #32] + 802e098: 9b20 ldr r3, [sp, #128] ; 0x80 + 802e09a: 685c ldr r4, [r3, #4] + 802e09c: 3404 adds r4, #4 + 802e09e: 9b0a ldr r3, [sp, #40] ; 0x28 + 802e0a0: 2b00 cmp r3, #0 + 802e0a2: dc03 bgt.n 802e0ac <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x40> + 802e0a4: 9b0c ldr r3, [sp, #48] ; 0x30 + 802e0a6: 2b00 cmp r3, #0 + 802e0a8: f340 81d5 ble.w 802e456 <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x3ea> + 802e0ac: 9b20 ldr r3, [sp, #128] ; 0x80 + 802e0ae: f9b3 1008 ldrsh.w r1, [r3, #8] + 802e0b2: f9b3 200c ldrsh.w r2, [r3, #12] + 802e0b6: 1e48 subs r0, r1, #1 + 802e0b8: 1e56 subs r6, r2, #1 + 802e0ba: 9b06 ldr r3, [sp, #24] + 802e0bc: 2b00 cmp r3, #0 + 802e0be: f340 80b6 ble.w 802e22e <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1c2> + 802e0c2: ea5f 472b movs.w r7, fp, asr #16 + 802e0c6: ea4f 4325 mov.w r3, r5, asr #16 + 802e0ca: d406 bmi.n 802e0da <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x6e> + 802e0cc: 4287 cmp r7, r0 + 802e0ce: da04 bge.n 802e0da <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x6e> + 802e0d0: 2b00 cmp r3, #0 + 802e0d2: db02 blt.n 802e0da <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x6e> + 802e0d4: 42b3 cmp r3, r6 + 802e0d6: f2c0 80ab blt.w 802e230 <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1c4> + 802e0da: 3701 adds r7, #1 + 802e0dc: f100 809c bmi.w 802e218 <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1ac> + 802e0e0: 42b9 cmp r1, r7 + 802e0e2: f2c0 8099 blt.w 802e218 <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1ac> + 802e0e6: 3301 adds r3, #1 + 802e0e8: f100 8096 bmi.w 802e218 <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1ac> + 802e0ec: 429a cmp r2, r3 + 802e0ee: f2c0 8093 blt.w 802e218 <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1ac> + 802e0f2: 9b06 ldr r3, [sp, #24] + 802e0f4: 930b str r3, [sp, #44] ; 0x2c + 802e0f6: 9b07 ldr r3, [sp, #28] + 802e0f8: 9309 str r3, [sp, #36] ; 0x24 + 802e0fa: 9b0b ldr r3, [sp, #44] ; 0x2c + 802e0fc: 2b00 cmp r3, #0 + 802e0fe: f340 80b4 ble.w 802e26a <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1fe> + 802e102: 9820 ldr r0, [sp, #128] ; 0x80 + 802e104: 142e asrs r6, r5, #16 + 802e106: 9a20 ldr r2, [sp, #128] ; 0x80 + 802e108: f3cb 3303 ubfx r3, fp, #12, #4 + 802e10c: 68c7 ldr r7, [r0, #12] + 802e10e: ea5f 402b movs.w r0, fp, asr #16 + 802e112: f3c5 3103 ubfx r1, r5, #12, #4 + 802e116: 6892 ldr r2, [r2, #8] + 802e118: f100 80fb bmi.w 802e312 <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x2a6> + 802e11c: f102 3cff add.w ip, r2, #4294967295 + 802e120: 4560 cmp r0, ip + 802e122: f280 80f6 bge.w 802e312 <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x2a6> + 802e126: 2e00 cmp r6, #0 + 802e128: f2c0 80f3 blt.w 802e312 <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x2a6> + 802e12c: f107 3cff add.w ip, r7, #4294967295 + 802e130: 4566 cmp r6, ip + 802e132: f280 80ee bge.w 802e312 <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x2a6> + 802e136: b212 sxth r2, r2 + 802e138: fb06 0002 mla r0, r6, r2, r0 + 802e13c: 9e08 ldr r6, [sp, #32] + 802e13e: 1837 adds r7, r6, r0 + 802e140: 5c30 ldrb r0, [r6, r0] + 802e142: eb00 0840 add.w r8, r0, r0, lsl #1 + 802e146: eb04 0c08 add.w ip, r4, r8 + 802e14a: 2b00 cmp r3, #0 + 802e14c: f000 80d3 beq.w 802e2f6 <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x28a> + 802e150: 787e ldrb r6, [r7, #1] + 802e152: eb06 0646 add.w r6, r6, r6, lsl #1 + 802e156: 4426 add r6, r4 + 802e158: 2900 cmp r1, #0 + 802e15a: f000 80d4 beq.w 802e306 <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x29a> + 802e15e: 18b8 adds r0, r7, r2 + 802e160: 5cba ldrb r2, [r7, r2] + 802e162: 7840 ldrb r0, [r0, #1] + 802e164: eb02 0242 add.w r2, r2, r2, lsl #1 + 802e168: eb00 0040 add.w r0, r0, r0, lsl #1 + 802e16c: 4422 add r2, r4 + 802e16e: 4420 add r0, r4 + 802e170: b29b uxth r3, r3 + 802e172: 78b7 ldrb r7, [r6, #2] + 802e174: b289 uxth r1, r1 + 802e176: f89c a002 ldrb.w sl, [ip, #2] + 802e17a: f89c c001 ldrb.w ip, [ip, #1] + 802e17e: fb03 f901 mul.w r9, r3, r1 + 802e182: 011b lsls r3, r3, #4 + 802e184: ebc9 1101 rsb r1, r9, r1, lsl #4 + 802e188: f5c3 7e80 rsb lr, r3, #256 ; 0x100 + 802e18c: eba3 0309 sub.w r3, r3, r9 + 802e190: b289 uxth r1, r1 + 802e192: b29b uxth r3, r3 + 802e194: ebae 0e01 sub.w lr, lr, r1 + 802e198: 435f muls r7, r3 + 802e19a: fa1f fe8e uxth.w lr, lr + 802e19e: fb0e 770a mla r7, lr, sl, r7 + 802e1a2: f892 a002 ldrb.w sl, [r2, #2] + 802e1a6: fb01 770a mla r7, r1, sl, r7 + 802e1aa: f890 a002 ldrb.w sl, [r0, #2] + 802e1ae: fb09 7a0a mla sl, r9, sl, r7 + 802e1b2: f814 7008 ldrb.w r7, [r4, r8] + 802e1b6: f896 8000 ldrb.w r8, [r6] + 802e1ba: 7876 ldrb r6, [r6, #1] + 802e1bc: f40a 4a78 and.w sl, sl, #63488 ; 0xf800 + 802e1c0: fb03 f808 mul.w r8, r3, r8 + 802e1c4: 4373 muls r3, r6 + 802e1c6: fb0e 8807 mla r8, lr, r7, r8 + 802e1ca: 7817 ldrb r7, [r2, #0] + 802e1cc: fb0e 330c mla r3, lr, ip, r3 + 802e1d0: fb01 8807 mla r8, r1, r7, r8 + 802e1d4: 7807 ldrb r7, [r0, #0] + 802e1d6: fb09 8707 mla r7, r9, r7, r8 + 802e1da: f3c7 27c4 ubfx r7, r7, #11, #5 + 802e1de: ea47 070a orr.w r7, r7, sl + 802e1e2: f892 a001 ldrb.w sl, [r2, #1] + 802e1e6: fb01 310a mla r1, r1, sl, r3 + 802e1ea: f890 a001 ldrb.w sl, [r0, #1] + 802e1ee: 9b09 ldr r3, [sp, #36] ; 0x24 + 802e1f0: fb09 1a0a mla sl, r9, sl, r1 + 802e1f4: ea4f 1a5a mov.w sl, sl, lsr #5 + 802e1f8: f40a 6afc and.w sl, sl, #2016 ; 0x7e0 + 802e1fc: ea47 070a orr.w r7, r7, sl + 802e200: 801f strh r7, [r3, #0] + 802e202: 9b09 ldr r3, [sp, #36] ; 0x24 + 802e204: 3302 adds r3, #2 + 802e206: 9309 str r3, [sp, #36] ; 0x24 + 802e208: 9b1b ldr r3, [sp, #108] ; 0x6c + 802e20a: 449b add fp, r3 + 802e20c: 9b1c ldr r3, [sp, #112] ; 0x70 + 802e20e: 441d add r5, r3 + 802e210: 9b0b ldr r3, [sp, #44] ; 0x2c + 802e212: 3b01 subs r3, #1 + 802e214: 930b str r3, [sp, #44] ; 0x2c + 802e216: e770 b.n 802e0fa <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x8e> + 802e218: 9b1b ldr r3, [sp, #108] ; 0x6c + 802e21a: 449b add fp, r3 + 802e21c: 9b1c ldr r3, [sp, #112] ; 0x70 + 802e21e: 441d add r5, r3 + 802e220: 9b06 ldr r3, [sp, #24] + 802e222: 3b01 subs r3, #1 + 802e224: 9306 str r3, [sp, #24] + 802e226: 9b07 ldr r3, [sp, #28] + 802e228: 3302 adds r3, #2 + 802e22a: 9307 str r3, [sp, #28] + 802e22c: e745 b.n 802e0ba <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x4e> + 802e22e: d023 beq.n 802e278 <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x20c> + 802e230: 9b06 ldr r3, [sp, #24] + 802e232: 981b ldr r0, [sp, #108] ; 0x6c + 802e234: 3b01 subs r3, #1 + 802e236: fb00 b003 mla r0, r0, r3, fp + 802e23a: 1400 asrs r0, r0, #16 + 802e23c: f53f af59 bmi.w 802e0f2 <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x86> + 802e240: 3901 subs r1, #1 + 802e242: 4288 cmp r0, r1 + 802e244: f6bf af55 bge.w 802e0f2 <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x86> + 802e248: 991c ldr r1, [sp, #112] ; 0x70 + 802e24a: fb01 5303 mla r3, r1, r3, r5 + 802e24e: 141b asrs r3, r3, #16 + 802e250: f53f af4f bmi.w 802e0f2 <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x86> + 802e254: 3a01 subs r2, #1 + 802e256: 4293 cmp r3, r2 + 802e258: f6bf af4b bge.w 802e0f2 <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x86> + 802e25c: 9b06 ldr r3, [sp, #24] + 802e25e: 9309 str r3, [sp, #36] ; 0x24 + 802e260: 9b07 ldr r3, [sp, #28] + 802e262: 930b str r3, [sp, #44] ; 0x2c + 802e264: 9b09 ldr r3, [sp, #36] ; 0x24 + 802e266: 2b00 cmp r3, #0 + 802e268: dc70 bgt.n 802e34c <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x2e0> + 802e26a: 9b06 ldr r3, [sp, #24] + 802e26c: 9a07 ldr r2, [sp, #28] + 802e26e: ea23 73e3 bic.w r3, r3, r3, asr #31 + 802e272: eb02 0343 add.w r3, r2, r3, lsl #1 + 802e276: 9307 str r3, [sp, #28] + 802e278: 9b0a ldr r3, [sp, #40] ; 0x28 + 802e27a: 2b00 cmp r3, #0 + 802e27c: f340 80eb ble.w 802e456 <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x3ea> + 802e280: eeb7 7a00 vmov.f32 s14, #112 ; 0x3f800000 1.0 + 802e284: 9b18 ldr r3, [sp, #96] ; 0x60 + 802e286: ee30 0a04 vadd.f32 s0, s0, s8 + 802e28a: ee70 0aa4 vadd.f32 s1, s1, s9 + 802e28e: eef0 6a62 vmov.f32 s13, s5 + 802e292: eec7 7a00 vdiv.f32 s15, s14, s0 + 802e296: ee31 1a05 vadd.f32 s2, s2, s10 + 802e29a: eefe 6ac8 vcvt.s32.f32 s13, s13, #16 + 802e29e: ee16 ba90 vmov fp, s13 + 802e2a2: eef0 6a43 vmov.f32 s13, s6 + 802e2a6: eefe 6ac8 vcvt.s32.f32 s13, s13, #16 + 802e2aa: ee16 5a90 vmov r5, s13 + 802e2ae: ee20 7aa7 vmul.f32 s14, s1, s15 + 802e2b2: ee61 7a27 vmul.f32 s15, s2, s15 + 802e2b6: ee77 2a62 vsub.f32 s5, s14, s5 + 802e2ba: ee37 3ac3 vsub.f32 s6, s15, s6 + 802e2be: eefe 2ac8 vcvt.s32.f32 s5, s5, #16 + 802e2c2: eebe 3ac8 vcvt.s32.f32 s6, s6, #16 + 802e2c6: ee12 2a90 vmov r2, s5 + 802e2ca: eef0 2a47 vmov.f32 s5, s14 + 802e2ce: fb92 f3f3 sdiv r3, r2, r3 + 802e2d2: ee13 2a10 vmov r2, s6 + 802e2d6: 931b str r3, [sp, #108] ; 0x6c + 802e2d8: 9b18 ldr r3, [sp, #96] ; 0x60 + 802e2da: eeb0 3a67 vmov.f32 s6, s15 + 802e2de: fb92 f3f3 sdiv r3, r2, r3 + 802e2e2: 931c str r3, [sp, #112] ; 0x70 + 802e2e4: 9b0a ldr r3, [sp, #40] ; 0x28 + 802e2e6: 9a0c ldr r2, [sp, #48] ; 0x30 + 802e2e8: 3b01 subs r3, #1 + 802e2ea: 930a str r3, [sp, #40] ; 0x28 + 802e2ec: 9b18 ldr r3, [sp, #96] ; 0x60 + 802e2ee: bf08 it eq + 802e2f0: 4613 moveq r3, r2 + 802e2f2: 9306 str r3, [sp, #24] + 802e2f4: e6d3 b.n 802e09e <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x32> + 802e2f6: b149 cbz r1, 802e30c <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x2a0> + 802e2f8: 5cba ldrb r2, [r7, r2] + 802e2fa: 4660 mov r0, ip + 802e2fc: eb02 0242 add.w r2, r2, r2, lsl #1 + 802e300: 4422 add r2, r4 + 802e302: 4666 mov r6, ip + 802e304: e734 b.n 802e170 <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x104> + 802e306: 4660 mov r0, ip + 802e308: 4662 mov r2, ip + 802e30a: e731 b.n 802e170 <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x104> + 802e30c: 4660 mov r0, ip + 802e30e: 4662 mov r2, ip + 802e310: e7f7 b.n 802e302 <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x296> + 802e312: f110 0c01 adds.w ip, r0, #1 + 802e316: f53f af74 bmi.w 802e202 <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x196> + 802e31a: 4562 cmp r2, ip + 802e31c: f6ff af71 blt.w 802e202 <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x196> + 802e320: f116 0c01 adds.w ip, r6, #1 + 802e324: f53f af6d bmi.w 802e202 <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x196> + 802e328: 4567 cmp r7, ip + 802e32a: f6ff af6a blt.w 802e202 <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x196> + 802e32e: b23f sxth r7, r7 + 802e330: b212 sxth r2, r2 + 802e332: 9701 str r7, [sp, #4] + 802e334: 9200 str r2, [sp, #0] + 802e336: e9cd 3104 strd r3, r1, [sp, #16] + 802e33a: e9cd 0602 strd r0, r6, [sp, #8] + 802e33e: 4623 mov r3, r4 + 802e340: 980d ldr r0, [sp, #52] ; 0x34 + 802e342: e9dd 2108 ldrd r2, r1, [sp, #32] + 802e346: f7ff fde7 bl 802df18 <_ZNK8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhS4_ssiihh> + 802e34a: e75a b.n 802e202 <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x196> + 802e34c: 9a20 ldr r2, [sp, #128] ; 0x80 + 802e34e: ea4f 462b mov.w r6, fp, asr #16 + 802e352: 1428 asrs r0, r5, #16 + 802e354: f3cb 3303 ubfx r3, fp, #12, #4 + 802e358: f9b2 2008 ldrsh.w r2, [r2, #8] + 802e35c: f3c5 3103 ubfx r1, r5, #12, #4 + 802e360: fb02 6000 mla r0, r2, r0, r6 + 802e364: 9e08 ldr r6, [sp, #32] + 802e366: f816 8000 ldrb.w r8, [r6, r0] + 802e36a: 1837 adds r7, r6, r0 + 802e36c: eb08 0848 add.w r8, r8, r8, lsl #1 + 802e370: eb04 0c08 add.w ip, r4, r8 + 802e374: 2b00 cmp r3, #0 + 802e376: d060 beq.n 802e43a <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x3ce> + 802e378: 787e ldrb r6, [r7, #1] + 802e37a: eb06 0646 add.w r6, r6, r6, lsl #1 + 802e37e: 4426 add r6, r4 + 802e380: 2900 cmp r1, #0 + 802e382: d062 beq.n 802e44a <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x3de> + 802e384: 18b8 adds r0, r7, r2 + 802e386: 5cba ldrb r2, [r7, r2] + 802e388: 7840 ldrb r0, [r0, #1] + 802e38a: eb02 0242 add.w r2, r2, r2, lsl #1 + 802e38e: eb00 0040 add.w r0, r0, r0, lsl #1 + 802e392: 4422 add r2, r4 + 802e394: 4420 add r0, r4 + 802e396: b29b uxth r3, r3 + 802e398: 78b7 ldrb r7, [r6, #2] + 802e39a: b289 uxth r1, r1 + 802e39c: f89c a002 ldrb.w sl, [ip, #2] + 802e3a0: f89c c001 ldrb.w ip, [ip, #1] + 802e3a4: fb03 f901 mul.w r9, r3, r1 + 802e3a8: 011b lsls r3, r3, #4 + 802e3aa: ebc9 1101 rsb r1, r9, r1, lsl #4 + 802e3ae: f5c3 7e80 rsb lr, r3, #256 ; 0x100 + 802e3b2: eba3 0309 sub.w r3, r3, r9 + 802e3b6: b289 uxth r1, r1 + 802e3b8: b29b uxth r3, r3 + 802e3ba: ebae 0e01 sub.w lr, lr, r1 + 802e3be: 435f muls r7, r3 + 802e3c0: fa1f fe8e uxth.w lr, lr + 802e3c4: fb0e 770a mla r7, lr, sl, r7 + 802e3c8: f892 a002 ldrb.w sl, [r2, #2] + 802e3cc: fb01 770a mla r7, r1, sl, r7 + 802e3d0: f890 a002 ldrb.w sl, [r0, #2] + 802e3d4: fb09 7a0a mla sl, r9, sl, r7 + 802e3d8: f814 7008 ldrb.w r7, [r4, r8] + 802e3dc: f896 8000 ldrb.w r8, [r6] + 802e3e0: 7876 ldrb r6, [r6, #1] + 802e3e2: f40a 4a78 and.w sl, sl, #63488 ; 0xf800 + 802e3e6: fb03 f808 mul.w r8, r3, r8 + 802e3ea: 4373 muls r3, r6 + 802e3ec: 7856 ldrb r6, [r2, #1] + 802e3ee: fb0e 8807 mla r8, lr, r7, r8 + 802e3f2: 7817 ldrb r7, [r2, #0] + 802e3f4: fb0e 330c mla r3, lr, ip, r3 + 802e3f8: fb01 8807 mla r8, r1, r7, r8 + 802e3fc: 7807 ldrb r7, [r0, #0] + 802e3fe: fb01 3306 mla r3, r1, r6, r3 + 802e402: fb09 8707 mla r7, r9, r7, r8 + 802e406: f3c7 27c4 ubfx r7, r7, #11, #5 + 802e40a: ea47 070a orr.w r7, r7, sl + 802e40e: f890 a001 ldrb.w sl, [r0, #1] + 802e412: fb09 3a0a mla sl, r9, sl, r3 + 802e416: 9b0b ldr r3, [sp, #44] ; 0x2c + 802e418: ea4f 1a5a mov.w sl, sl, lsr #5 + 802e41c: f40a 6afc and.w sl, sl, #2016 ; 0x7e0 + 802e420: ea47 070a orr.w r7, r7, sl + 802e424: f823 7b02 strh.w r7, [r3], #2 + 802e428: 930b str r3, [sp, #44] ; 0x2c + 802e42a: 9b1b ldr r3, [sp, #108] ; 0x6c + 802e42c: 449b add fp, r3 + 802e42e: 9b1c ldr r3, [sp, #112] ; 0x70 + 802e430: 441d add r5, r3 + 802e432: 9b09 ldr r3, [sp, #36] ; 0x24 + 802e434: 3b01 subs r3, #1 + 802e436: 9309 str r3, [sp, #36] ; 0x24 + 802e438: e714 b.n 802e264 <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1f8> + 802e43a: b149 cbz r1, 802e450 <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x3e4> + 802e43c: 5cba ldrb r2, [r7, r2] + 802e43e: 4660 mov r0, ip + 802e440: eb02 0242 add.w r2, r2, r2, lsl #1 + 802e444: 4422 add r2, r4 + 802e446: 4666 mov r6, ip + 802e448: e7a5 b.n 802e396 <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x32a> + 802e44a: 4660 mov r0, ip + 802e44c: 4662 mov r2, ip + 802e44e: e7a2 b.n 802e396 <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x32a> + 802e450: 4660 mov r0, ip + 802e452: 4662 mov r2, ip + 802e454: e7f7 b.n 802e446 <_ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x3da> + 802e456: b00f add sp, #60 ; 0x3c + 802e458: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + +0802e45c <_ZNK8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhPKmssiihhh>: + 802e45c: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 802e460: b085 sub sp, #20 + 802e462: e9dd 7410 ldrd r7, r4, [sp, #64] ; 0x40 + 802e466: f9bd c038 ldrsh.w ip, [sp, #56] ; 0x38 + 802e46a: 9102 str r1, [sp, #8] + 802e46c: 2c00 cmp r4, #0 + 802e46e: fb04 710c mla r1, r4, ip, r7 + 802e472: f9bd 803c ldrsh.w r8, [sp, #60] ; 0x3c + 802e476: f89d 6048 ldrb.w r6, [sp, #72] ; 0x48 + 802e47a: f89d 004c ldrb.w r0, [sp, #76] ; 0x4c + 802e47e: eb02 0e01 add.w lr, r2, r1 + 802e482: f2c0 8122 blt.w 802e6ca <_ZNK8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhPKmssiihhh+0x26e> + 802e486: 45a0 cmp r8, r4 + 802e488: f340 811f ble.w 802e6ca <_ZNK8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhPKmssiihhh+0x26e> + 802e48c: 2f00 cmp r7, #0 + 802e48e: f2c0 811a blt.w 802e6c6 <_ZNK8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhPKmssiihhh+0x26a> + 802e492: 45bc cmp ip, r7 + 802e494: f340 8117 ble.w 802e6c6 <_ZNK8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhPKmssiihhh+0x26a> + 802e498: 5c52 ldrb r2, [r2, r1] + 802e49a: f853 5022 ldr.w r5, [r3, r2, lsl #2] + 802e49e: 1c7a adds r2, r7, #1 + 802e4a0: f100 8116 bmi.w 802e6d0 <_ZNK8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhPKmssiihhh+0x274> + 802e4a4: 4594 cmp ip, r2 + 802e4a6: f340 8113 ble.w 802e6d0 <_ZNK8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhPKmssiihhh+0x274> + 802e4aa: 2e00 cmp r6, #0 + 802e4ac: f000 8112 beq.w 802e6d4 <_ZNK8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhPKmssiihhh+0x278> + 802e4b0: f89e 2001 ldrb.w r2, [lr, #1] + 802e4b4: f853 1022 ldr.w r1, [r3, r2, lsl #2] + 802e4b8: 3401 adds r4, #1 + 802e4ba: f100 810f bmi.w 802e6dc <_ZNK8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhPKmssiihhh+0x280> + 802e4be: 45a0 cmp r8, r4 + 802e4c0: f340 810c ble.w 802e6dc <_ZNK8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhPKmssiihhh+0x280> + 802e4c4: 2800 cmp r0, #0 + 802e4c6: f000 810c beq.w 802e6e2 <_ZNK8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhPKmssiihhh+0x286> + 802e4ca: 2f00 cmp r7, #0 + 802e4cc: f2c0 8104 blt.w 802e6d8 <_ZNK8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhPKmssiihhh+0x27c> + 802e4d0: 45bc cmp ip, r7 + 802e4d2: f340 8101 ble.w 802e6d8 <_ZNK8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhPKmssiihhh+0x27c> + 802e4d6: f81e 200c ldrb.w r2, [lr, ip] + 802e4da: f853 4022 ldr.w r4, [r3, r2, lsl #2] + 802e4de: 3701 adds r7, #1 + 802e4e0: f100 8102 bmi.w 802e6e8 <_ZNK8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhPKmssiihhh+0x28c> + 802e4e4: 45bc cmp ip, r7 + 802e4e6: f340 80ff ble.w 802e6e8 <_ZNK8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhPKmssiihhh+0x28c> + 802e4ea: 2e00 cmp r6, #0 + 802e4ec: f000 80fe beq.w 802e6ec <_ZNK8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhPKmssiihhh+0x290> + 802e4f0: 44f4 add ip, lr + 802e4f2: f89c 2001 ldrb.w r2, [ip, #1] + 802e4f6: f853 2022 ldr.w r2, [r3, r2, lsl #2] + 802e4fa: b2b6 uxth r6, r6 + 802e4fc: b280 uxth r0, r0 + 802e4fe: ea4f 6a11 mov.w sl, r1, lsr #24 + 802e502: fb00 fe06 mul.w lr, r0, r6 + 802e506: 0136 lsls r6, r6, #4 + 802e508: ea4f 6b15 mov.w fp, r5, lsr #24 + 802e50c: ebce 1000 rsb r0, lr, r0, lsl #4 + 802e510: eba6 070e sub.w r7, r6, lr + 802e514: f5c6 7380 rsb r3, r6, #256 ; 0x100 + 802e518: ea4f 6914 mov.w r9, r4, lsr #24 + 802e51c: b280 uxth r0, r0 + 802e51e: b2bf uxth r7, r7 + 802e520: 1a1b subs r3, r3, r0 + 802e522: ea4f 6812 mov.w r8, r2, lsr #24 + 802e526: fb0a f607 mul.w r6, sl, r7 + 802e52a: b29b uxth r3, r3 + 802e52c: fb0b 6603 mla r6, fp, r3, r6 + 802e530: fb00 6609 mla r6, r0, r9, r6 + 802e534: fb0e 6608 mla r6, lr, r8, r6 + 802e538: f3c6 2607 ubfx r6, r6, #8, #8 + 802e53c: 9600 str r6, [sp, #0] + 802e53e: 2e00 cmp r6, #0 + 802e540: f000 80be beq.w 802e6c0 <_ZNK8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhPKmssiihhh+0x264> + 802e544: f005 1cff and.w ip, r5, #16711935 ; 0xff00ff + 802e548: f405 457f and.w r5, r5, #65280 ; 0xff00 + 802e54c: 9e02 ldr r6, [sp, #8] + 802e54e: fb0b fc0c mul.w ip, fp, ip + 802e552: fb0b f505 mul.w r5, fp, r5 + 802e556: 8836 ldrh r6, [r6, #0] + 802e558: ea4f 2b1c mov.w fp, ip, lsr #8 + 802e55c: f10c 1c01 add.w ip, ip, #65537 ; 0x10001 + 802e560: 9501 str r5, [sp, #4] + 802e562: f00b 1bff and.w fp, fp, #16711935 ; 0xff00ff + 802e566: 44dc add ip, fp + 802e568: ea4f 2c1c mov.w ip, ip, lsr #8 + 802e56c: f00c 15ff and.w r5, ip, #16711935 ; 0xff00ff + 802e570: 9503 str r5, [sp, #12] + 802e572: 9d01 ldr r5, [sp, #4] + 802e574: f505 7c80 add.w ip, r5, #256 ; 0x100 + 802e578: eb0c 2515 add.w r5, ip, r5, lsr #8 + 802e57c: f001 1cff and.w ip, r1, #16711935 ; 0xff00ff + 802e580: f401 417f and.w r1, r1, #65280 ; 0xff00 + 802e584: fb0a fc0c mul.w ip, sl, ip + 802e588: ea4f 2b15 mov.w fp, r5, lsr #8 + 802e58c: fb0a fa01 mul.w sl, sl, r1 + 802e590: ea4f 251c mov.w r5, ip, lsr #8 + 802e594: f10c 1c01 add.w ip, ip, #65537 ; 0x10001 + 802e598: f50a 7180 add.w r1, sl, #256 ; 0x100 + 802e59c: f005 15ff and.w r5, r5, #16711935 ; 0xff00ff + 802e5a0: eb01 2a1a add.w sl, r1, sl, lsr #8 + 802e5a4: 4465 add r5, ip + 802e5a6: f004 1cff and.w ip, r4, #16711935 ; 0xff00ff + 802e5aa: f404 447f and.w r4, r4, #65280 ; 0xff00 + 802e5ae: ea4f 2a1a mov.w sl, sl, lsr #8 + 802e5b2: fb09 fc0c mul.w ip, r9, ip + 802e5b6: 0a2d lsrs r5, r5, #8 + 802e5b8: fb09 f904 mul.w r9, r9, r4 + 802e5bc: f40a 4a7f and.w sl, sl, #65280 ; 0xff00 + 802e5c0: ea4f 211c mov.w r1, ip, lsr #8 + 802e5c4: f005 15ff and.w r5, r5, #16711935 ; 0xff00ff + 802e5c8: f509 7480 add.w r4, r9, #256 ; 0x100 + 802e5cc: f10c 1c01 add.w ip, ip, #65537 ; 0x10001 + 802e5d0: f001 11ff and.w r1, r1, #16711935 ; 0xff00ff + 802e5d4: 437d muls r5, r7 + 802e5d6: eb04 2919 add.w r9, r4, r9, lsr #8 + 802e5da: f002 14ff and.w r4, r2, #16711935 ; 0xff00ff + 802e5de: f402 427f and.w r2, r2, #65280 ; 0xff00 + 802e5e2: 4461 add r1, ip + 802e5e4: fb08 f404 mul.w r4, r8, r4 + 802e5e8: ea4f 2919 mov.w r9, r9, lsr #8 + 802e5ec: fb08 f802 mul.w r8, r8, r2 + 802e5f0: 0a09 lsrs r1, r1, #8 + 802e5f2: 0a22 lsrs r2, r4, #8 + 802e5f4: f104 1401 add.w r4, r4, #65537 ; 0x10001 + 802e5f8: f001 11ff and.w r1, r1, #16711935 ; 0xff00ff + 802e5fc: fb07 f70a mul.w r7, r7, sl + 802e600: f002 12ff and.w r2, r2, #16711935 ; 0xff00ff + 802e604: 4414 add r4, r2 + 802e606: f508 7280 add.w r2, r8, #256 ; 0x100 + 802e60a: 0a24 lsrs r4, r4, #8 + 802e60c: eb02 2818 add.w r8, r2, r8, lsr #8 + 802e610: 9a03 ldr r2, [sp, #12] + 802e612: f004 14ff and.w r4, r4, #16711935 ; 0xff00ff + 802e616: fb02 5503 mla r5, r2, r3, r5 + 802e61a: ea4f 2818 mov.w r8, r8, lsr #8 + 802e61e: 9a00 ldr r2, [sp, #0] + 802e620: fb04 540e mla r4, r4, lr, r5 + 802e624: f408 487f and.w r8, r8, #65280 ; 0xff00 + 802e628: 1235 asrs r5, r6, #8 + 802e62a: fb01 4100 mla r1, r1, r0, r4 + 802e62e: f005 05f8 and.w r5, r5, #248 ; 0xf8 + 802e632: 0a09 lsrs r1, r1, #8 + 802e634: f001 14ff and.w r4, r1, #16711935 ; 0xff00ff + 802e638: f40b 417f and.w r1, fp, #65280 ; 0xff00 + 802e63c: fb03 7101 mla r1, r3, r1, r7 + 802e640: fb0e 1e08 mla lr, lr, r8, r1 + 802e644: f409 417f and.w r1, r9, #65280 ; 0xff00 + 802e648: fb00 e101 mla r1, r0, r1, lr + 802e64c: f89d 0050 ldrb.w r0, [sp, #80] ; 0x50 + 802e650: b287 uxth r7, r0 + 802e652: 0a09 lsrs r1, r1, #8 + 802e654: 437a muls r2, r7 + 802e656: f401 417f and.w r1, r1, #65280 ; 0xff00 + 802e65a: 1c53 adds r3, r2, #1 + 802e65c: 4321 orrs r1, r4 + 802e65e: eb03 2312 add.w r3, r3, r2, lsr #8 + 802e662: 0c0a lsrs r2, r1, #16 + 802e664: f3c1 2407 ubfx r4, r1, #8, #8 + 802e668: ea6f 2313 mvn.w r3, r3, lsr #8 + 802e66c: b2c8 uxtb r0, r1 + 802e66e: fb12 f207 smulbb r2, r2, r7 + 802e672: fb14 f407 smulbb r4, r4, r7 + 802e676: b2db uxtb r3, r3 + 802e678: fb10 f007 smulbb r0, r0, r7 + 802e67c: fb05 2503 mla r5, r5, r3, r2 + 802e680: 10f2 asrs r2, r6, #3 + 802e682: 00f6 lsls r6, r6, #3 + 802e684: f002 02fc and.w r2, r2, #252 ; 0xfc + 802e688: b2ad uxth r5, r5 + 802e68a: b2f6 uxtb r6, r6 + 802e68c: fb02 4203 mla r2, r2, r3, r4 + 802e690: fb06 0303 mla r3, r6, r3, r0 + 802e694: b294 uxth r4, r2 + 802e696: b299 uxth r1, r3 + 802e698: 1c6b adds r3, r5, #1 + 802e69a: 1c62 adds r2, r4, #1 + 802e69c: eb03 2515 add.w r5, r3, r5, lsr #8 + 802e6a0: 1c4b adds r3, r1, #1 + 802e6a2: eb02 2214 add.w r2, r2, r4, lsr #8 + 802e6a6: eb03 2311 add.w r3, r3, r1, lsr #8 + 802e6aa: f405 4578 and.w r5, r5, #63488 ; 0xf800 + 802e6ae: 0952 lsrs r2, r2, #5 + 802e6b0: f3c3 23c4 ubfx r3, r3, #11, #5 + 802e6b4: f402 62fc and.w r2, r2, #2016 ; 0x7e0 + 802e6b8: 432b orrs r3, r5 + 802e6ba: 4313 orrs r3, r2 + 802e6bc: 9a02 ldr r2, [sp, #8] + 802e6be: 8013 strh r3, [r2, #0] + 802e6c0: b005 add sp, #20 + 802e6c2: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 802e6c6: 2500 movs r5, #0 + 802e6c8: e6e9 b.n 802e49e <_ZNK8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhPKmssiihhh+0x42> + 802e6ca: 2100 movs r1, #0 + 802e6cc: 460d mov r5, r1 + 802e6ce: e6f3 b.n 802e4b8 <_ZNK8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhPKmssiihhh+0x5c> + 802e6d0: 2100 movs r1, #0 + 802e6d2: e6f1 b.n 802e4b8 <_ZNK8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhPKmssiihhh+0x5c> + 802e6d4: 4631 mov r1, r6 + 802e6d6: e6ef b.n 802e4b8 <_ZNK8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhPKmssiihhh+0x5c> + 802e6d8: 2400 movs r4, #0 + 802e6da: e700 b.n 802e4de <_ZNK8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhPKmssiihhh+0x82> + 802e6dc: 2200 movs r2, #0 + 802e6de: 4614 mov r4, r2 + 802e6e0: e70b b.n 802e4fa <_ZNK8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhPKmssiihhh+0x9e> + 802e6e2: 4602 mov r2, r0 + 802e6e4: 4604 mov r4, r0 + 802e6e6: e708 b.n 802e4fa <_ZNK8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhPKmssiihhh+0x9e> + 802e6e8: 2200 movs r2, #0 + 802e6ea: e706 b.n 802e4fa <_ZNK8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhPKmssiihhh+0x9e> + 802e6ec: 4632 mov r2, r6 + 802e6ee: e704 b.n 802e4fa <_ZNK8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhPKmssiihhh+0x9e> + +0802e6f0 <_ZN8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff>: + 802e6f0: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 802e6f4: b09f sub sp, #124 ; 0x7c + 802e6f6: 921b str r2, [sp, #108] ; 0x6c + 802e6f8: 9309 str r3, [sp, #36] ; 0x24 + 802e6fa: 9a2d ldr r2, [sp, #180] ; 0xb4 + 802e6fc: f89d 30c4 ldrb.w r3, [sp, #196] ; 0xc4 + 802e700: 901d str r0, [sp, #116] ; 0x74 + 802e702: 931c str r3, [sp, #112] ; 0x70 + 802e704: 6850 ldr r0, [r2, #4] + 802e706: 9119 str r1, [sp, #100] ; 0x64 + 802e708: 6812 ldr r2, [r2, #0] + 802e70a: 9d2a ldr r5, [sp, #168] ; 0xa8 + 802e70c: e9dd 132e ldrd r1, r3, [sp, #184] ; 0xb8 + 802e710: fb00 1303 mla r3, r0, r3, r1 + 802e714: eb02 0343 add.w r3, r2, r3, lsl #1 + 802e718: 930c str r3, [sp, #48] ; 0x30 + 802e71a: 9b30 ldr r3, [sp, #192] ; 0xc0 + 802e71c: 681b ldr r3, [r3, #0] + 802e71e: 9312 str r3, [sp, #72] ; 0x48 + 802e720: 9b30 ldr r3, [sp, #192] ; 0xc0 + 802e722: 685e ldr r6, [r3, #4] + 802e724: f8bd 3070 ldrh.w r3, [sp, #112] ; 0x70 + 802e728: 3604 adds r6, #4 + 802e72a: 930d str r3, [sp, #52] ; 0x34 + 802e72c: 9b19 ldr r3, [sp, #100] ; 0x64 + 802e72e: 2b00 cmp r3, #0 + 802e730: dc03 bgt.n 802e73a <_ZN8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x4a> + 802e732: 9b1b ldr r3, [sp, #108] ; 0x6c + 802e734: 2b00 cmp r3, #0 + 802e736: f340 8387 ble.w 802ee48 <_ZN8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x758> + 802e73a: 9b30 ldr r3, [sp, #192] ; 0xc0 + 802e73c: f9b3 1008 ldrsh.w r1, [r3, #8] + 802e740: f9b3 200c ldrsh.w r2, [r3, #12] + 802e744: 1e48 subs r0, r1, #1 + 802e746: 1e57 subs r7, r2, #1 + 802e748: 9b09 ldr r3, [sp, #36] ; 0x24 + 802e74a: 2b00 cmp r3, #0 + 802e74c: f340 8194 ble.w 802ea78 <_ZN8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x388> + 802e750: 9c29 ldr r4, [sp, #164] ; 0xa4 + 802e752: 142b asrs r3, r5, #16 + 802e754: ea5f 4c24 movs.w ip, r4, asr #16 + 802e758: d406 bmi.n 802e768 <_ZN8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x78> + 802e75a: 4584 cmp ip, r0 + 802e75c: da04 bge.n 802e768 <_ZN8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x78> + 802e75e: 2b00 cmp r3, #0 + 802e760: db02 blt.n 802e768 <_ZN8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x78> + 802e762: 42bb cmp r3, r7 + 802e764: f2c0 8189 blt.w 802ea7a <_ZN8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x38a> + 802e768: f11c 0c01 adds.w ip, ip, #1 + 802e76c: f100 8177 bmi.w 802ea5e <_ZN8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x36e> + 802e770: 4561 cmp r1, ip + 802e772: f2c0 8174 blt.w 802ea5e <_ZN8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x36e> + 802e776: 3301 adds r3, #1 + 802e778: f100 8171 bmi.w 802ea5e <_ZN8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x36e> + 802e77c: 429a cmp r2, r3 + 802e77e: f2c0 816e blt.w 802ea5e <_ZN8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x36e> + 802e782: 9b09 ldr r3, [sp, #36] ; 0x24 + 802e784: 9f0c ldr r7, [sp, #48] ; 0x30 + 802e786: 931a str r3, [sp, #104] ; 0x68 + 802e788: 9b1a ldr r3, [sp, #104] ; 0x68 + 802e78a: 2b00 cmp r3, #0 + 802e78c: f340 8193 ble.w 802eab6 <_ZN8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x3c6> + 802e790: 9b29 ldr r3, [sp, #164] ; 0xa4 + 802e792: ea4f 4c25 mov.w ip, r5, asr #16 + 802e796: f3c5 3103 ubfx r1, r5, #12, #4 + 802e79a: f3c3 3203 ubfx r2, r3, #12, #4 + 802e79e: 9b30 ldr r3, [sp, #192] ; 0xc0 + 802e7a0: e9d3 0e02 ldrd r0, lr, [r3, #8] + 802e7a4: 9b29 ldr r3, [sp, #164] ; 0xa4 + 802e7a6: 141b asrs r3, r3, #16 + 802e7a8: f100 81d6 bmi.w 802eb58 <_ZN8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x468> + 802e7ac: f100 38ff add.w r8, r0, #4294967295 + 802e7b0: 4543 cmp r3, r8 + 802e7b2: f280 81d1 bge.w 802eb58 <_ZN8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x468> + 802e7b6: f1bc 0f00 cmp.w ip, #0 + 802e7ba: f2c0 81cd blt.w 802eb58 <_ZN8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x468> + 802e7be: f10e 38ff add.w r8, lr, #4294967295 + 802e7c2: 45c4 cmp ip, r8 + 802e7c4: f280 81c8 bge.w 802eb58 <_ZN8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x468> + 802e7c8: b200 sxth r0, r0 + 802e7ca: 9c12 ldr r4, [sp, #72] ; 0x48 + 802e7cc: fb0c 3300 mla r3, ip, r0, r3 + 802e7d0: eb04 0803 add.w r8, r4, r3 + 802e7d4: 5ce3 ldrb r3, [r4, r3] + 802e7d6: f856 3023 ldr.w r3, [r6, r3, lsl #2] + 802e7da: ea4f 6e13 mov.w lr, r3, lsr #24 + 802e7de: 2a00 cmp r2, #0 + 802e7e0: f000 81af beq.w 802eb42 <_ZN8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x452> + 802e7e4: f898 c001 ldrb.w ip, [r8, #1] + 802e7e8: f856 402c ldr.w r4, [r6, ip, lsl #2] + 802e7ec: 940e str r4, [sp, #56] ; 0x38 + 802e7ee: 0e24 lsrs r4, r4, #24 + 802e7f0: 9415 str r4, [sp, #84] ; 0x54 + 802e7f2: b179 cbz r1, 802e814 <_ZN8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x124> + 802e7f4: eb08 0c00 add.w ip, r8, r0 + 802e7f8: f818 0000 ldrb.w r0, [r8, r0] + 802e7fc: f856 0020 ldr.w r0, [r6, r0, lsl #2] + 802e800: 900a str r0, [sp, #40] ; 0x28 + 802e802: 0e00 lsrs r0, r0, #24 + 802e804: 9013 str r0, [sp, #76] ; 0x4c + 802e806: f89c 0001 ldrb.w r0, [ip, #1] + 802e80a: f856 0020 ldr.w r0, [r6, r0, lsl #2] + 802e80e: 900f str r0, [sp, #60] ; 0x3c + 802e810: 0e00 lsrs r0, r0, #24 + 802e812: 9016 str r0, [sp, #88] ; 0x58 + 802e814: b292 uxth r2, r2 + 802e816: 9815 ldr r0, [sp, #84] ; 0x54 + 802e818: b289 uxth r1, r1 + 802e81a: 9c13 ldr r4, [sp, #76] ; 0x4c + 802e81c: fb02 f901 mul.w r9, r2, r1 + 802e820: 0112 lsls r2, r2, #4 + 802e822: ebc9 1101 rsb r1, r9, r1, lsl #4 + 802e826: eba2 0809 sub.w r8, r2, r9 + 802e82a: f5c2 7280 rsb r2, r2, #256 ; 0x100 + 802e82e: b289 uxth r1, r1 + 802e830: fa1f f888 uxth.w r8, r8 + 802e834: 1a52 subs r2, r2, r1 + 802e836: fb08 f000 mul.w r0, r8, r0 + 802e83a: b292 uxth r2, r2 + 802e83c: fb02 000e mla r0, r2, lr, r0 + 802e840: fb01 0004 mla r0, r1, r4, r0 + 802e844: 9c16 ldr r4, [sp, #88] ; 0x58 + 802e846: fb09 0004 mla r0, r9, r4, r0 + 802e84a: f3c0 2007 ubfx r0, r0, #8, #8 + 802e84e: 2800 cmp r0, #0 + 802e850: f000 80fa beq.w 802ea48 <_ZN8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x358> + 802e854: f1be 0fff cmp.w lr, #255 ; 0xff + 802e858: d01b beq.n 802e892 <_ZN8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1a2> + 802e85a: f003 1aff and.w sl, r3, #16711935 ; 0xff00ff + 802e85e: f403 437f and.w r3, r3, #65280 ; 0xff00 + 802e862: fb0e fa0a mul.w sl, lr, sl + 802e866: fb0e fe03 mul.w lr, lr, r3 + 802e86a: ea4f 231a mov.w r3, sl, lsr #8 + 802e86e: f10a 1a01 add.w sl, sl, #65537 ; 0x10001 + 802e872: f50e 7c80 add.w ip, lr, #256 ; 0x100 + 802e876: f003 13ff and.w r3, r3, #16711935 ; 0xff00ff + 802e87a: eb0c 2c1e add.w ip, ip, lr, lsr #8 + 802e87e: 4453 add r3, sl + 802e880: ea4f 2c1c mov.w ip, ip, lsr #8 + 802e884: 0a1b lsrs r3, r3, #8 + 802e886: f40c 4c7f and.w ip, ip, #65280 ; 0xff00 + 802e88a: f003 13ff and.w r3, r3, #16711935 ; 0xff00ff + 802e88e: ea43 030c orr.w r3, r3, ip + 802e892: 9c15 ldr r4, [sp, #84] ; 0x54 + 802e894: 2cff cmp r4, #255 ; 0xff + 802e896: d021 beq.n 802e8dc <_ZN8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1ec> + 802e898: 9c0e ldr r4, [sp, #56] ; 0x38 + 802e89a: f004 1bff and.w fp, r4, #16711935 ; 0xff00ff + 802e89e: 9c15 ldr r4, [sp, #84] ; 0x54 + 802e8a0: fb04 fb0b mul.w fp, r4, fp + 802e8a4: 9c0e ldr r4, [sp, #56] ; 0x38 + 802e8a6: f404 4a7f and.w sl, r4, #65280 ; 0xff00 + 802e8aa: 9c15 ldr r4, [sp, #84] ; 0x54 + 802e8ac: ea4f 2e1b mov.w lr, fp, lsr #8 + 802e8b0: f10b 1b01 add.w fp, fp, #65537 ; 0x10001 + 802e8b4: fb04 fa0a mul.w sl, r4, sl + 802e8b8: f00e 1eff and.w lr, lr, #16711935 ; 0xff00ff + 802e8bc: f50a 7c80 add.w ip, sl, #256 ; 0x100 + 802e8c0: 44de add lr, fp + 802e8c2: eb0c 2a1a add.w sl, ip, sl, lsr #8 + 802e8c6: ea4f 2e1e mov.w lr, lr, lsr #8 + 802e8ca: ea4f 2a1a mov.w sl, sl, lsr #8 + 802e8ce: f00e 1eff and.w lr, lr, #16711935 ; 0xff00ff + 802e8d2: f40a 4a7f and.w sl, sl, #65280 ; 0xff00 + 802e8d6: ea4e 040a orr.w r4, lr, sl + 802e8da: 940e str r4, [sp, #56] ; 0x38 + 802e8dc: 9c13 ldr r4, [sp, #76] ; 0x4c + 802e8de: 2cff cmp r4, #255 ; 0xff + 802e8e0: d021 beq.n 802e926 <_ZN8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x236> + 802e8e2: 9c0a ldr r4, [sp, #40] ; 0x28 + 802e8e4: f004 1bff and.w fp, r4, #16711935 ; 0xff00ff + 802e8e8: 9c13 ldr r4, [sp, #76] ; 0x4c + 802e8ea: fb04 fb0b mul.w fp, r4, fp + 802e8ee: 9c0a ldr r4, [sp, #40] ; 0x28 + 802e8f0: f404 4a7f and.w sl, r4, #65280 ; 0xff00 + 802e8f4: 9c13 ldr r4, [sp, #76] ; 0x4c + 802e8f6: ea4f 2e1b mov.w lr, fp, lsr #8 + 802e8fa: f10b 1b01 add.w fp, fp, #65537 ; 0x10001 + 802e8fe: fb04 fa0a mul.w sl, r4, sl + 802e902: f00e 1eff and.w lr, lr, #16711935 ; 0xff00ff + 802e906: f50a 7c80 add.w ip, sl, #256 ; 0x100 + 802e90a: 44de add lr, fp + 802e90c: eb0c 2a1a add.w sl, ip, sl, lsr #8 + 802e910: ea4f 2e1e mov.w lr, lr, lsr #8 + 802e914: ea4f 2a1a mov.w sl, sl, lsr #8 + 802e918: f00e 1eff and.w lr, lr, #16711935 ; 0xff00ff + 802e91c: f40a 4a7f and.w sl, sl, #65280 ; 0xff00 + 802e920: ea4e 040a orr.w r4, lr, sl + 802e924: 940a str r4, [sp, #40] ; 0x28 + 802e926: 9c16 ldr r4, [sp, #88] ; 0x58 + 802e928: 2cff cmp r4, #255 ; 0xff + 802e92a: d021 beq.n 802e970 <_ZN8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x280> + 802e92c: 9c0f ldr r4, [sp, #60] ; 0x3c + 802e92e: f004 1bff and.w fp, r4, #16711935 ; 0xff00ff + 802e932: 9c16 ldr r4, [sp, #88] ; 0x58 + 802e934: fb04 fb0b mul.w fp, r4, fp + 802e938: 9c0f ldr r4, [sp, #60] ; 0x3c + 802e93a: f404 4a7f and.w sl, r4, #65280 ; 0xff00 + 802e93e: 9c16 ldr r4, [sp, #88] ; 0x58 + 802e940: ea4f 2e1b mov.w lr, fp, lsr #8 + 802e944: f10b 1b01 add.w fp, fp, #65537 ; 0x10001 + 802e948: fb04 fa0a mul.w sl, r4, sl + 802e94c: f00e 1eff and.w lr, lr, #16711935 ; 0xff00ff + 802e950: f50a 7c80 add.w ip, sl, #256 ; 0x100 + 802e954: 44de add lr, fp + 802e956: eb0c 2a1a add.w sl, ip, sl, lsr #8 + 802e95a: ea4f 2e1e mov.w lr, lr, lsr #8 + 802e95e: ea4f 2a1a mov.w sl, sl, lsr #8 + 802e962: f00e 1eff and.w lr, lr, #16711935 ; 0xff00ff + 802e966: f40a 4a7f and.w sl, sl, #65280 ; 0xff00 + 802e96a: ea4e 040a orr.w r4, lr, sl + 802e96e: 940f str r4, [sp, #60] ; 0x3c + 802e970: 9c0e ldr r4, [sp, #56] ; 0x38 + 802e972: f003 1eff and.w lr, r3, #16711935 ; 0xff00ff + 802e976: f403 437f and.w r3, r3, #65280 ; 0xff00 + 802e97a: f004 1cff and.w ip, r4, #16711935 ; 0xff00ff + 802e97e: 9c0a ldr r4, [sp, #40] ; 0x28 + 802e980: fb08 fc0c mul.w ip, r8, ip + 802e984: fb02 cc0e mla ip, r2, lr, ip + 802e988: f004 1eff and.w lr, r4, #16711935 ; 0xff00ff + 802e98c: 9c0f ldr r4, [sp, #60] ; 0x3c + 802e98e: fb01 cc0e mla ip, r1, lr, ip + 802e992: f004 1eff and.w lr, r4, #16711935 ; 0xff00ff + 802e996: 9c0e ldr r4, [sp, #56] ; 0x38 + 802e998: fb09 cc0e mla ip, r9, lr, ip + 802e99c: f404 4e7f and.w lr, r4, #65280 ; 0xff00 + 802e9a0: 9c0d ldr r4, [sp, #52] ; 0x34 + 802e9a2: fb08 f80e mul.w r8, r8, lr + 802e9a6: ea4f 2c1c mov.w ip, ip, lsr #8 + 802e9aa: fb02 8303 mla r3, r2, r3, r8 + 802e9ae: 9a0a ldr r2, [sp, #40] ; 0x28 + 802e9b0: f00c 1cff and.w ip, ip, #16711935 ; 0xff00ff + 802e9b4: f402 4a7f and.w sl, r2, #65280 ; 0xff00 + 802e9b8: 9a0f ldr r2, [sp, #60] ; 0x3c + 802e9ba: fb01 330a mla r3, r1, sl, r3 + 802e9be: f402 417f and.w r1, r2, #65280 ; 0xff00 + 802e9c2: 9a0d ldr r2, [sp, #52] ; 0x34 + 802e9c4: fb09 3901 mla r9, r9, r1, r3 + 802e9c8: 883b ldrh r3, [r7, #0] + 802e9ca: 4342 muls r2, r0 + 802e9cc: ea4f 2919 mov.w r9, r9, lsr #8 + 802e9d0: 1c50 adds r0, r2, #1 + 802e9d2: 1219 asrs r1, r3, #8 + 802e9d4: f409 497f and.w r9, r9, #65280 ; 0xff00 + 802e9d8: eb00 2012 add.w r0, r0, r2, lsr #8 + 802e9dc: f001 01f8 and.w r1, r1, #248 ; 0xf8 + 802e9e0: ea4c 0c09 orr.w ip, ip, r9 + 802e9e4: ea6f 2010 mvn.w r0, r0, lsr #8 + 802e9e8: ea4f 421c mov.w r2, ip, lsr #16 + 802e9ec: f3cc 2e07 ubfx lr, ip, #8, #8 + 802e9f0: b2c0 uxtb r0, r0 + 802e9f2: fb12 f204 smulbb r2, r2, r4 + 802e9f6: fa5f fc8c uxtb.w ip, ip + 802e9fa: fb1e fe04 smulbb lr, lr, r4 + 802e9fe: fb01 2100 mla r1, r1, r0, r2 + 802ea02: 10da asrs r2, r3, #3 + 802ea04: fb1c fc04 smulbb ip, ip, r4 + 802ea08: 00db lsls r3, r3, #3 + 802ea0a: b289 uxth r1, r1 + 802ea0c: f002 02fc and.w r2, r2, #252 ; 0xfc + 802ea10: b2db uxtb r3, r3 + 802ea12: fb02 e200 mla r2, r2, r0, lr + 802ea16: fb03 c300 mla r3, r3, r0, ip + 802ea1a: b292 uxth r2, r2 + 802ea1c: fa1f fc83 uxth.w ip, r3 + 802ea20: 1c4b adds r3, r1, #1 + 802ea22: eb03 2111 add.w r1, r3, r1, lsr #8 + 802ea26: f10c 0301 add.w r3, ip, #1 + 802ea2a: eb03 231c add.w r3, r3, ip, lsr #8 + 802ea2e: f401 4178 and.w r1, r1, #63488 ; 0xf800 + 802ea32: f3c3 23c4 ubfx r3, r3, #11, #5 + 802ea36: 430b orrs r3, r1 + 802ea38: 1c51 adds r1, r2, #1 + 802ea3a: eb01 2212 add.w r2, r1, r2, lsr #8 + 802ea3e: 0952 lsrs r2, r2, #5 + 802ea40: f402 62fc and.w r2, r2, #2016 ; 0x7e0 + 802ea44: 4313 orrs r3, r2 + 802ea46: 803b strh r3, [r7, #0] + 802ea48: 9b2b ldr r3, [sp, #172] ; 0xac + 802ea4a: 3702 adds r7, #2 + 802ea4c: 9a29 ldr r2, [sp, #164] ; 0xa4 + 802ea4e: 441a add r2, r3 + 802ea50: 9b2c ldr r3, [sp, #176] ; 0xb0 + 802ea52: 441d add r5, r3 + 802ea54: 9b1a ldr r3, [sp, #104] ; 0x68 + 802ea56: 9229 str r2, [sp, #164] ; 0xa4 + 802ea58: 3b01 subs r3, #1 + 802ea5a: 931a str r3, [sp, #104] ; 0x68 + 802ea5c: e694 b.n 802e788 <_ZN8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x98> + 802ea5e: 9b2b ldr r3, [sp, #172] ; 0xac + 802ea60: 9c29 ldr r4, [sp, #164] ; 0xa4 + 802ea62: 441c add r4, r3 + 802ea64: 9b2c ldr r3, [sp, #176] ; 0xb0 + 802ea66: 441d add r5, r3 + 802ea68: 9b09 ldr r3, [sp, #36] ; 0x24 + 802ea6a: 9429 str r4, [sp, #164] ; 0xa4 + 802ea6c: 3b01 subs r3, #1 + 802ea6e: 9309 str r3, [sp, #36] ; 0x24 + 802ea70: 9b0c ldr r3, [sp, #48] ; 0x30 + 802ea72: 3302 adds r3, #2 + 802ea74: 930c str r3, [sp, #48] ; 0x30 + 802ea76: e667 b.n 802e748 <_ZN8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x58> + 802ea78: d024 beq.n 802eac4 <_ZN8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x3d4> + 802ea7a: 9b09 ldr r3, [sp, #36] ; 0x24 + 802ea7c: 982b ldr r0, [sp, #172] ; 0xac + 802ea7e: 3b01 subs r3, #1 + 802ea80: 9c29 ldr r4, [sp, #164] ; 0xa4 + 802ea82: fb00 4003 mla r0, r0, r3, r4 + 802ea86: 1400 asrs r0, r0, #16 + 802ea88: f53f ae7b bmi.w 802e782 <_ZN8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x92> + 802ea8c: 3901 subs r1, #1 + 802ea8e: 4288 cmp r0, r1 + 802ea90: f6bf ae77 bge.w 802e782 <_ZN8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x92> + 802ea94: 992c ldr r1, [sp, #176] ; 0xb0 + 802ea96: fb01 5303 mla r3, r1, r3, r5 + 802ea9a: 141b asrs r3, r3, #16 + 802ea9c: f53f ae71 bmi.w 802e782 <_ZN8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x92> + 802eaa0: 3a01 subs r2, #1 + 802eaa2: 4293 cmp r3, r2 + 802eaa4: f6bf ae6d bge.w 802e782 <_ZN8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x92> + 802eaa8: f8dd b024 ldr.w fp, [sp, #36] ; 0x24 + 802eaac: f8dd 9030 ldr.w r9, [sp, #48] ; 0x30 + 802eab0: f1bb 0f00 cmp.w fp, #0 + 802eab4: dc70 bgt.n 802eb98 <_ZN8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x4a8> + 802eab6: 9b09 ldr r3, [sp, #36] ; 0x24 + 802eab8: ea23 74e3 bic.w r4, r3, r3, asr #31 + 802eabc: 9b0c ldr r3, [sp, #48] ; 0x30 + 802eabe: eb03 0344 add.w r3, r3, r4, lsl #1 + 802eac2: 930c str r3, [sp, #48] ; 0x30 + 802eac4: 9b19 ldr r3, [sp, #100] ; 0x64 + 802eac6: 2b00 cmp r3, #0 + 802eac8: f340 81be ble.w 802ee48 <_ZN8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x758> + 802eacc: eeb7 7a00 vmov.f32 s14, #112 ; 0x3f800000 1.0 + 802ead0: 9b28 ldr r3, [sp, #160] ; 0xa0 + 802ead2: ee30 0a04 vadd.f32 s0, s0, s8 + 802ead6: ee70 0aa4 vadd.f32 s1, s1, s9 + 802eada: eef0 6a62 vmov.f32 s13, s5 + 802eade: eec7 7a00 vdiv.f32 s15, s14, s0 + 802eae2: ee31 1a05 vadd.f32 s2, s2, s10 + 802eae6: eefe 6ac8 vcvt.s32.f32 s13, s13, #16 + 802eaea: edcd 6a29 vstr s13, [sp, #164] ; 0xa4 + 802eaee: eef0 6a43 vmov.f32 s13, s6 + 802eaf2: eefe 6ac8 vcvt.s32.f32 s13, s13, #16 + 802eaf6: ee16 5a90 vmov r5, s13 + 802eafa: ee20 7aa7 vmul.f32 s14, s1, s15 + 802eafe: ee61 7a27 vmul.f32 s15, s2, s15 + 802eb02: ee77 2a62 vsub.f32 s5, s14, s5 + 802eb06: ee37 3ac3 vsub.f32 s6, s15, s6 + 802eb0a: eefe 2ac8 vcvt.s32.f32 s5, s5, #16 + 802eb0e: eebe 3ac8 vcvt.s32.f32 s6, s6, #16 + 802eb12: ee12 2a90 vmov r2, s5 + 802eb16: eef0 2a47 vmov.f32 s5, s14 + 802eb1a: fb92 f3f3 sdiv r3, r2, r3 + 802eb1e: ee13 2a10 vmov r2, s6 + 802eb22: 932b str r3, [sp, #172] ; 0xac + 802eb24: 9b28 ldr r3, [sp, #160] ; 0xa0 + 802eb26: eeb0 3a67 vmov.f32 s6, s15 + 802eb2a: fb92 f3f3 sdiv r3, r2, r3 + 802eb2e: 932c str r3, [sp, #176] ; 0xb0 + 802eb30: 9b19 ldr r3, [sp, #100] ; 0x64 + 802eb32: 9a1b ldr r2, [sp, #108] ; 0x6c + 802eb34: 3b01 subs r3, #1 + 802eb36: 9319 str r3, [sp, #100] ; 0x64 + 802eb38: 9b28 ldr r3, [sp, #160] ; 0xa0 + 802eb3a: bf08 it eq + 802eb3c: 4613 moveq r3, r2 + 802eb3e: 9309 str r3, [sp, #36] ; 0x24 + 802eb40: e5f4 b.n 802e72c <_ZN8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x3c> + 802eb42: 2900 cmp r1, #0 + 802eb44: f43f ae66 beq.w 802e814 <_ZN8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x124> + 802eb48: f818 0000 ldrb.w r0, [r8, r0] + 802eb4c: f856 0020 ldr.w r0, [r6, r0, lsl #2] + 802eb50: 900a str r0, [sp, #40] ; 0x28 + 802eb52: 0e00 lsrs r0, r0, #24 + 802eb54: 9013 str r0, [sp, #76] ; 0x4c + 802eb56: e65d b.n 802e814 <_ZN8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x124> + 802eb58: f113 0801 adds.w r8, r3, #1 + 802eb5c: f53f af74 bmi.w 802ea48 <_ZN8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x358> + 802eb60: 4540 cmp r0, r8 + 802eb62: f6ff af71 blt.w 802ea48 <_ZN8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x358> + 802eb66: f11c 0801 adds.w r8, ip, #1 + 802eb6a: f53f af6d bmi.w 802ea48 <_ZN8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x358> + 802eb6e: 45c6 cmp lr, r8 + 802eb70: f6ff af6a blt.w 802ea48 <_ZN8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x358> + 802eb74: 9c1c ldr r4, [sp, #112] ; 0x70 + 802eb76: b200 sxth r0, r0 + 802eb78: 9302 str r3, [sp, #8] + 802eb7a: fa0f f38e sxth.w r3, lr + 802eb7e: 9000 str r0, [sp, #0] + 802eb80: 9301 str r3, [sp, #4] + 802eb82: 4633 mov r3, r6 + 802eb84: 981d ldr r0, [sp, #116] ; 0x74 + 802eb86: e9cd 1405 strd r1, r4, [sp, #20] + 802eb8a: e9cd c203 strd ip, r2, [sp, #12] + 802eb8e: 4639 mov r1, r7 + 802eb90: 9a12 ldr r2, [sp, #72] ; 0x48 + 802eb92: f7ff fc63 bl 802e45c <_ZNK8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhPKmssiihhh> + 802eb96: e757 b.n 802ea48 <_ZN8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x358> + 802eb98: 9b29 ldr r3, [sp, #164] ; 0xa4 + 802eb9a: f3c5 3003 ubfx r0, r5, #12, #4 + 802eb9e: 9c29 ldr r4, [sp, #164] ; 0xa4 + 802eba0: f3c3 3203 ubfx r2, r3, #12, #4 + 802eba4: 9b30 ldr r3, [sp, #192] ; 0xc0 + 802eba6: 1427 asrs r7, r4, #16 + 802eba8: 9c12 ldr r4, [sp, #72] ; 0x48 + 802ebaa: f9b3 1008 ldrsh.w r1, [r3, #8] + 802ebae: 142b asrs r3, r5, #16 + 802ebb0: fb01 7303 mla r3, r1, r3, r7 + 802ebb4: 18e7 adds r7, r4, r3 + 802ebb6: 5ce3 ldrb r3, [r4, r3] + 802ebb8: f856 3023 ldr.w r3, [r6, r3, lsl #2] + 802ebbc: ea4f 6c13 mov.w ip, r3, lsr #24 + 802ebc0: 2a00 cmp r2, #0 + 802ebc2: f000 8137 beq.w 802ee34 <_ZN8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x744> + 802ebc6: f897 e001 ldrb.w lr, [r7, #1] + 802ebca: f856 402e ldr.w r4, [r6, lr, lsl #2] + 802ebce: 9410 str r4, [sp, #64] ; 0x40 + 802ebd0: 0e24 lsrs r4, r4, #24 + 802ebd2: 9417 str r4, [sp, #92] ; 0x5c + 802ebd4: b170 cbz r0, 802ebf4 <_ZN8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x504> + 802ebd6: eb07 0e01 add.w lr, r7, r1 + 802ebda: 5c79 ldrb r1, [r7, r1] + 802ebdc: f856 1021 ldr.w r1, [r6, r1, lsl #2] + 802ebe0: 910b str r1, [sp, #44] ; 0x2c + 802ebe2: 0e09 lsrs r1, r1, #24 + 802ebe4: 9114 str r1, [sp, #80] ; 0x50 + 802ebe6: f89e 1001 ldrb.w r1, [lr, #1] + 802ebea: f856 1021 ldr.w r1, [r6, r1, lsl #2] + 802ebee: 9111 str r1, [sp, #68] ; 0x44 + 802ebf0: 0e09 lsrs r1, r1, #24 + 802ebf2: 9118 str r1, [sp, #96] ; 0x60 + 802ebf4: b292 uxth r2, r2 + 802ebf6: 9917 ldr r1, [sp, #92] ; 0x5c + 802ebf8: b280 uxth r0, r0 + 802ebfa: 9c14 ldr r4, [sp, #80] ; 0x50 + 802ebfc: fb02 f800 mul.w r8, r2, r0 + 802ec00: 0112 lsls r2, r2, #4 + 802ec02: ebc8 1000 rsb r0, r8, r0, lsl #4 + 802ec06: eba2 0e08 sub.w lr, r2, r8 + 802ec0a: f5c2 7280 rsb r2, r2, #256 ; 0x100 + 802ec0e: b280 uxth r0, r0 + 802ec10: fa1f fe8e uxth.w lr, lr + 802ec14: 1a12 subs r2, r2, r0 + 802ec16: fb0e f101 mul.w r1, lr, r1 + 802ec1a: b292 uxth r2, r2 + 802ec1c: fb02 110c mla r1, r2, ip, r1 + 802ec20: fb00 1104 mla r1, r0, r4, r1 + 802ec24: 9c18 ldr r4, [sp, #96] ; 0x60 + 802ec26: fb08 1104 mla r1, r8, r4, r1 + 802ec2a: f3c1 2107 ubfx r1, r1, #8, #8 + 802ec2e: 2900 cmp r1, #0 + 802ec30: f000 80f5 beq.w 802ee1e <_ZN8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x72e> + 802ec34: f1bc 0fff cmp.w ip, #255 ; 0xff + 802ec38: d019 beq.n 802ec6e <_ZN8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x57e> + 802ec3a: f003 1aff and.w sl, r3, #16711935 ; 0xff00ff + 802ec3e: f403 437f and.w r3, r3, #65280 ; 0xff00 + 802ec42: fb0c fa0a mul.w sl, ip, sl + 802ec46: fb0c fc03 mul.w ip, ip, r3 + 802ec4a: ea4f 231a mov.w r3, sl, lsr #8 + 802ec4e: f10a 1a01 add.w sl, sl, #65537 ; 0x10001 + 802ec52: f50c 7780 add.w r7, ip, #256 ; 0x100 + 802ec56: f003 13ff and.w r3, r3, #16711935 ; 0xff00ff + 802ec5a: eb07 271c add.w r7, r7, ip, lsr #8 + 802ec5e: 4453 add r3, sl + 802ec60: 0a3f lsrs r7, r7, #8 + 802ec62: 0a1b lsrs r3, r3, #8 + 802ec64: f407 477f and.w r7, r7, #65280 ; 0xff00 + 802ec68: f003 13ff and.w r3, r3, #16711935 ; 0xff00ff + 802ec6c: 433b orrs r3, r7 + 802ec6e: 9c17 ldr r4, [sp, #92] ; 0x5c + 802ec70: 2cff cmp r4, #255 ; 0xff + 802ec72: d020 beq.n 802ecb6 <_ZN8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x5c6> + 802ec74: 9c10 ldr r4, [sp, #64] ; 0x40 + 802ec76: f004 17ff and.w r7, r4, #16711935 ; 0xff00ff + 802ec7a: 9c17 ldr r4, [sp, #92] ; 0x5c + 802ec7c: 4367 muls r7, r4 + 802ec7e: 9c10 ldr r4, [sp, #64] ; 0x40 + 802ec80: ea4f 2c17 mov.w ip, r7, lsr #8 + 802ec84: f404 4a7f and.w sl, r4, #65280 ; 0xff00 + 802ec88: 9c17 ldr r4, [sp, #92] ; 0x5c + 802ec8a: f107 1701 add.w r7, r7, #65537 ; 0x10001 + 802ec8e: f00c 1cff and.w ip, ip, #16711935 ; 0xff00ff + 802ec92: fb04 fa0a mul.w sl, r4, sl + 802ec96: 44bc add ip, r7 + 802ec98: f50a 7780 add.w r7, sl, #256 ; 0x100 + 802ec9c: ea4f 2c1c mov.w ip, ip, lsr #8 + 802eca0: eb07 2a1a add.w sl, r7, sl, lsr #8 + 802eca4: f00c 1cff and.w ip, ip, #16711935 ; 0xff00ff + 802eca8: ea4f 2a1a mov.w sl, sl, lsr #8 + 802ecac: f40a 4a7f and.w sl, sl, #65280 ; 0xff00 + 802ecb0: ea4c 040a orr.w r4, ip, sl + 802ecb4: 9410 str r4, [sp, #64] ; 0x40 + 802ecb6: 9c14 ldr r4, [sp, #80] ; 0x50 + 802ecb8: 2cff cmp r4, #255 ; 0xff + 802ecba: d020 beq.n 802ecfe <_ZN8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x60e> + 802ecbc: 9c0b ldr r4, [sp, #44] ; 0x2c + 802ecbe: f004 17ff and.w r7, r4, #16711935 ; 0xff00ff + 802ecc2: 9c14 ldr r4, [sp, #80] ; 0x50 + 802ecc4: 4367 muls r7, r4 + 802ecc6: 9c0b ldr r4, [sp, #44] ; 0x2c + 802ecc8: ea4f 2c17 mov.w ip, r7, lsr #8 + 802eccc: f404 4a7f and.w sl, r4, #65280 ; 0xff00 + 802ecd0: 9c14 ldr r4, [sp, #80] ; 0x50 + 802ecd2: f107 1701 add.w r7, r7, #65537 ; 0x10001 + 802ecd6: f00c 1cff and.w ip, ip, #16711935 ; 0xff00ff + 802ecda: fb04 fa0a mul.w sl, r4, sl + 802ecde: 44bc add ip, r7 + 802ece0: f50a 7780 add.w r7, sl, #256 ; 0x100 + 802ece4: ea4f 2c1c mov.w ip, ip, lsr #8 + 802ece8: eb07 2a1a add.w sl, r7, sl, lsr #8 + 802ecec: f00c 1cff and.w ip, ip, #16711935 ; 0xff00ff + 802ecf0: ea4f 2a1a mov.w sl, sl, lsr #8 + 802ecf4: f40a 4a7f and.w sl, sl, #65280 ; 0xff00 + 802ecf8: ea4c 040a orr.w r4, ip, sl + 802ecfc: 940b str r4, [sp, #44] ; 0x2c + 802ecfe: 9c18 ldr r4, [sp, #96] ; 0x60 + 802ed00: 2cff cmp r4, #255 ; 0xff + 802ed02: d020 beq.n 802ed46 <_ZN8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x656> + 802ed04: 9c11 ldr r4, [sp, #68] ; 0x44 + 802ed06: f004 17ff and.w r7, r4, #16711935 ; 0xff00ff + 802ed0a: 9c18 ldr r4, [sp, #96] ; 0x60 + 802ed0c: 4367 muls r7, r4 + 802ed0e: 9c11 ldr r4, [sp, #68] ; 0x44 + 802ed10: ea4f 2c17 mov.w ip, r7, lsr #8 + 802ed14: f404 4a7f and.w sl, r4, #65280 ; 0xff00 + 802ed18: 9c18 ldr r4, [sp, #96] ; 0x60 + 802ed1a: f107 1701 add.w r7, r7, #65537 ; 0x10001 + 802ed1e: f00c 1cff and.w ip, ip, #16711935 ; 0xff00ff + 802ed22: fb04 fa0a mul.w sl, r4, sl + 802ed26: 44bc add ip, r7 + 802ed28: f50a 7780 add.w r7, sl, #256 ; 0x100 + 802ed2c: ea4f 2c1c mov.w ip, ip, lsr #8 + 802ed30: eb07 2a1a add.w sl, r7, sl, lsr #8 + 802ed34: f00c 1cff and.w ip, ip, #16711935 ; 0xff00ff + 802ed38: ea4f 2a1a mov.w sl, sl, lsr #8 + 802ed3c: f40a 4a7f and.w sl, sl, #65280 ; 0xff00 + 802ed40: ea4c 040a orr.w r4, ip, sl + 802ed44: 9411 str r4, [sp, #68] ; 0x44 + 802ed46: 9c10 ldr r4, [sp, #64] ; 0x40 + 802ed48: f003 1cff and.w ip, r3, #16711935 ; 0xff00ff + 802ed4c: f403 437f and.w r3, r3, #65280 ; 0xff00 + 802ed50: f004 17ff and.w r7, r4, #16711935 ; 0xff00ff + 802ed54: 9c0b ldr r4, [sp, #44] ; 0x2c + 802ed56: fb0e f707 mul.w r7, lr, r7 + 802ed5a: fb02 770c mla r7, r2, ip, r7 + 802ed5e: f004 1cff and.w ip, r4, #16711935 ; 0xff00ff + 802ed62: 9c11 ldr r4, [sp, #68] ; 0x44 + 802ed64: fb00 770c mla r7, r0, ip, r7 + 802ed68: f004 1cff and.w ip, r4, #16711935 ; 0xff00ff + 802ed6c: 9c10 ldr r4, [sp, #64] ; 0x40 + 802ed6e: fb08 770c mla r7, r8, ip, r7 + 802ed72: f404 4c7f and.w ip, r4, #65280 ; 0xff00 + 802ed76: 9c0d ldr r4, [sp, #52] ; 0x34 + 802ed78: fb0e fe0c mul.w lr, lr, ip + 802ed7c: 0a3f lsrs r7, r7, #8 + 802ed7e: fb02 e303 mla r3, r2, r3, lr + 802ed82: 9a0b ldr r2, [sp, #44] ; 0x2c + 802ed84: f007 17ff and.w r7, r7, #16711935 ; 0xff00ff + 802ed88: f402 4a7f and.w sl, r2, #65280 ; 0xff00 + 802ed8c: 9a11 ldr r2, [sp, #68] ; 0x44 + 802ed8e: fb00 330a mla r3, r0, sl, r3 + 802ed92: f402 4c7f and.w ip, r2, #65280 ; 0xff00 + 802ed96: f8b9 0000 ldrh.w r0, [r9] + 802ed9a: fb08 3c0c mla ip, r8, ip, r3 + 802ed9e: 9b0d ldr r3, [sp, #52] ; 0x34 + 802eda0: 1202 asrs r2, r0, #8 + 802eda2: 434b muls r3, r1 + 802eda4: ea4f 2c1c mov.w ip, ip, lsr #8 + 802eda8: f002 02f8 and.w r2, r2, #248 ; 0xf8 + 802edac: f40c 4c7f and.w ip, ip, #65280 ; 0xff00 + 802edb0: 1c59 adds r1, r3, #1 + 802edb2: ea47 070c orr.w r7, r7, ip + 802edb6: eb01 2113 add.w r1, r1, r3, lsr #8 + 802edba: 0c3b lsrs r3, r7, #16 + 802edbc: ea6f 2111 mvn.w r1, r1, lsr #8 + 802edc0: f3c7 2c07 ubfx ip, r7, #8, #8 + 802edc4: b2ff uxtb r7, r7 + 802edc6: fb13 f304 smulbb r3, r3, r4 + 802edca: b2c9 uxtb r1, r1 + 802edcc: fb1c fc04 smulbb ip, ip, r4 + 802edd0: fb02 3201 mla r2, r2, r1, r3 + 802edd4: 10c3 asrs r3, r0, #3 + 802edd6: fb17 f704 smulbb r7, r7, r4 + 802edda: 00c0 lsls r0, r0, #3 + 802eddc: b292 uxth r2, r2 + 802edde: f003 03fc and.w r3, r3, #252 ; 0xfc + 802ede2: b2c0 uxtb r0, r0 + 802ede4: fb03 c301 mla r3, r3, r1, ip + 802ede8: f102 0c01 add.w ip, r2, #1 + 802edec: fb00 7001 mla r0, r0, r1, r7 + 802edf0: eb0c 2212 add.w r2, ip, r2, lsr #8 + 802edf4: b280 uxth r0, r0 + 802edf6: f402 4c78 and.w ip, r2, #63488 ; 0xf800 + 802edfa: b29b uxth r3, r3 + 802edfc: 1c42 adds r2, r0, #1 + 802edfe: eb02 2210 add.w r2, r2, r0, lsr #8 + 802ee02: f3c2 22c4 ubfx r2, r2, #11, #5 + 802ee06: ea42 020c orr.w r2, r2, ip + 802ee0a: f103 0c01 add.w ip, r3, #1 + 802ee0e: eb0c 2313 add.w r3, ip, r3, lsr #8 + 802ee12: 095b lsrs r3, r3, #5 + 802ee14: f403 63fc and.w r3, r3, #2016 ; 0x7e0 + 802ee18: 431a orrs r2, r3 + 802ee1a: f8a9 2000 strh.w r2, [r9] + 802ee1e: 9b2b ldr r3, [sp, #172] ; 0xac + 802ee20: f109 0902 add.w r9, r9, #2 + 802ee24: 9a29 ldr r2, [sp, #164] ; 0xa4 + 802ee26: f10b 3bff add.w fp, fp, #4294967295 + 802ee2a: 441a add r2, r3 + 802ee2c: 9b2c ldr r3, [sp, #176] ; 0xb0 + 802ee2e: 9229 str r2, [sp, #164] ; 0xa4 + 802ee30: 441d add r5, r3 + 802ee32: e63d b.n 802eab0 <_ZN8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x3c0> + 802ee34: 2800 cmp r0, #0 + 802ee36: f43f aedd beq.w 802ebf4 <_ZN8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x504> + 802ee3a: 5c79 ldrb r1, [r7, r1] + 802ee3c: f856 1021 ldr.w r1, [r6, r1, lsl #2] + 802ee40: 910b str r1, [sp, #44] ; 0x2c + 802ee42: 0e09 lsrs r1, r1, #24 + 802ee44: 9114 str r1, [sp, #80] ; 0x50 + 802ee46: e6d5 b.n 802ebf4 <_ZN8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x504> + 802ee48: b01f add sp, #124 ; 0x7c + 802ee4a: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + +0802ee4e <_ZNK8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKmssiihh>: + 802ee4e: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 802ee52: b089 sub sp, #36 ; 0x24 + 802ee54: 9101 str r1, [sp, #4] + 802ee56: 9801 ldr r0, [sp, #4] + 802ee58: f9bd c048 ldrsh.w ip, [sp, #72] ; 0x48 + 802ee5c: 8800 ldrh r0, [r0, #0] + 802ee5e: f9bd 804c ldrsh.w r8, [sp, #76] ; 0x4c + 802ee62: 1206 asrs r6, r0, #8 + 802ee64: f89d 5058 ldrb.w r5, [sp, #88] ; 0x58 + 802ee68: f89d 405c ldrb.w r4, [sp, #92] ; 0x5c + 802ee6c: f006 06f8 and.w r6, r6, #248 ; 0xf8 + 802ee70: 9602 str r6, [sp, #8] + 802ee72: 10c6 asrs r6, r0, #3 + 802ee74: 00c0 lsls r0, r0, #3 + 802ee76: f006 06fc and.w r6, r6, #252 ; 0xfc + 802ee7a: b2c0 uxtb r0, r0 + 802ee7c: 9603 str r6, [sp, #12] + 802ee7e: 9004 str r0, [sp, #16] + 802ee80: e9dd 1714 ldrd r1, r7, [sp, #80] ; 0x50 + 802ee84: fb07 100c mla r0, r7, ip, r1 + 802ee88: 2f00 cmp r7, #0 + 802ee8a: eb02 0e00 add.w lr, r2, r0 + 802ee8e: f2c0 810a blt.w 802f0a6 <_ZNK8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKmssiihh+0x258> + 802ee92: 45b8 cmp r8, r7 + 802ee94: f340 8107 ble.w 802f0a6 <_ZNK8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKmssiihh+0x258> + 802ee98: 2900 cmp r1, #0 + 802ee9a: f2c0 8102 blt.w 802f0a2 <_ZNK8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKmssiihh+0x254> + 802ee9e: 458c cmp ip, r1 + 802eea0: f340 80ff ble.w 802f0a2 <_ZNK8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKmssiihh+0x254> + 802eea4: 5c12 ldrb r2, [r2, r0] + 802eea6: f853 0022 ldr.w r0, [r3, r2, lsl #2] + 802eeaa: 1c4a adds r2, r1, #1 + 802eeac: f100 80fe bmi.w 802f0ac <_ZNK8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKmssiihh+0x25e> + 802eeb0: 4594 cmp ip, r2 + 802eeb2: f340 80fb ble.w 802f0ac <_ZNK8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKmssiihh+0x25e> + 802eeb6: 2d00 cmp r5, #0 + 802eeb8: f000 80fa beq.w 802f0b0 <_ZNK8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKmssiihh+0x262> + 802eebc: f89e 2001 ldrb.w r2, [lr, #1] + 802eec0: f853 6022 ldr.w r6, [r3, r2, lsl #2] + 802eec4: 3701 adds r7, #1 + 802eec6: f100 80f7 bmi.w 802f0b8 <_ZNK8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKmssiihh+0x26a> + 802eeca: 45b8 cmp r8, r7 + 802eecc: f340 80f4 ble.w 802f0b8 <_ZNK8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKmssiihh+0x26a> + 802eed0: 2c00 cmp r4, #0 + 802eed2: f000 80f4 beq.w 802f0be <_ZNK8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKmssiihh+0x270> + 802eed6: 2900 cmp r1, #0 + 802eed8: eb0e 020c add.w r2, lr, ip + 802eedc: f2c0 80ea blt.w 802f0b4 <_ZNK8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKmssiihh+0x266> + 802eee0: 458c cmp ip, r1 + 802eee2: f340 80e7 ble.w 802f0b4 <_ZNK8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKmssiihh+0x266> + 802eee6: f81e 700c ldrb.w r7, [lr, ip] + 802eeea: f853 7027 ldr.w r7, [r3, r7, lsl #2] + 802eeee: 3101 adds r1, #1 + 802eef0: f100 80e8 bmi.w 802f0c4 <_ZNK8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKmssiihh+0x276> + 802eef4: 458c cmp ip, r1 + 802eef6: f340 80e5 ble.w 802f0c4 <_ZNK8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKmssiihh+0x276> + 802eefa: 2d00 cmp r5, #0 + 802eefc: f000 80e4 beq.w 802f0c8 <_ZNK8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKmssiihh+0x27a> + 802ef00: 7852 ldrb r2, [r2, #1] + 802ef02: f853 1022 ldr.w r1, [r3, r2, lsl #2] + 802ef06: 0e0b lsrs r3, r1, #24 + 802ef08: f007 1cff and.w ip, r7, #16711935 ; 0xff00ff + 802ef0c: ea4f 6a10 mov.w sl, r0, lsr #24 + 802ef10: 9300 str r3, [sp, #0] + 802ef12: b2a4 uxth r4, r4 + 802ef14: b2ab uxth r3, r5 + 802ef16: f000 15ff and.w r5, r0, #16711935 ; 0xff00ff + 802ef1a: ea4f 6b16 mov.w fp, r6, lsr #24 + 802ef1e: fb03 f904 mul.w r9, r3, r4 + 802ef22: 011b lsls r3, r3, #4 + 802ef24: fb0a f505 mul.w r5, sl, r5 + 802ef28: ea4f 6817 mov.w r8, r7, lsr #24 + 802ef2c: eba3 0e09 sub.w lr, r3, r9 + 802ef30: f5c3 7280 rsb r2, r3, #256 ; 0x100 + 802ef34: f400 437f and.w r3, r0, #65280 ; 0xff00 + 802ef38: 0a28 lsrs r0, r5, #8 + 802ef3a: f105 1501 add.w r5, r5, #65537 ; 0x10001 + 802ef3e: f407 477f and.w r7, r7, #65280 ; 0xff00 + 802ef42: f000 10ff and.w r0, r0, #16711935 ; 0xff00ff + 802ef46: fb0a f303 mul.w r3, sl, r3 + 802ef4a: fb08 f707 mul.w r7, r8, r7 + 802ef4e: ebc9 1404 rsb r4, r9, r4, lsl #4 + 802ef52: 4405 add r5, r0 + 802ef54: fb08 fc0c mul.w ip, r8, ip + 802ef58: b2a4 uxth r4, r4 + 802ef5a: 0a2d lsrs r5, r5, #8 + 802ef5c: fa1f fe8e uxth.w lr, lr + 802ef60: 1b12 subs r2, r2, r4 + 802ef62: f005 10ff and.w r0, r5, #16711935 ; 0xff00ff + 802ef66: b292 uxth r2, r2 + 802ef68: 9005 str r0, [sp, #20] + 802ef6a: f503 7080 add.w r0, r3, #256 ; 0x100 + 802ef6e: eb00 2313 add.w r3, r0, r3, lsr #8 + 802ef72: ea4f 201c mov.w r0, ip, lsr #8 + 802ef76: f10c 1c01 add.w ip, ip, #65537 ; 0x10001 + 802ef7a: 0a1b lsrs r3, r3, #8 + 802ef7c: f000 10ff and.w r0, r0, #16711935 ; 0xff00ff + 802ef80: 9306 str r3, [sp, #24] + 802ef82: f006 13ff and.w r3, r6, #16711935 ; 0xff00ff + 802ef86: f406 467f and.w r6, r6, #65280 ; 0xff00 + 802ef8a: 4460 add r0, ip + 802ef8c: fb0b f303 mul.w r3, fp, r3 + 802ef90: fb0b f606 mul.w r6, fp, r6 + 802ef94: 0a00 lsrs r0, r0, #8 + 802ef96: 0a1d lsrs r5, r3, #8 + 802ef98: f103 1301 add.w r3, r3, #65537 ; 0x10001 + 802ef9c: f000 10ff and.w r0, r0, #16711935 ; 0xff00ff + 802efa0: f005 15ff and.w r5, r5, #16711935 ; 0xff00ff + 802efa4: 441d add r5, r3 + 802efa6: f506 7380 add.w r3, r6, #256 ; 0x100 + 802efaa: eb03 2616 add.w r6, r3, r6, lsr #8 + 802efae: f507 7380 add.w r3, r7, #256 ; 0x100 + 802efb2: 0a2d lsrs r5, r5, #8 + 802efb4: eb03 2317 add.w r3, r3, r7, lsr #8 + 802efb8: f001 17ff and.w r7, r1, #16711935 ; 0xff00ff + 802efbc: f005 15ff and.w r5, r5, #16711935 ; 0xff00ff + 802efc0: 0a36 lsrs r6, r6, #8 + 802efc2: 0a1b lsrs r3, r3, #8 + 802efc4: fb05 f50e mul.w r5, r5, lr + 802efc8: f406 467f and.w r6, r6, #65280 ; 0xff00 + 802efcc: 9307 str r3, [sp, #28] + 802efce: 0e0b lsrs r3, r1, #24 + 802efd0: f401 417f and.w r1, r1, #65280 ; 0xff00 + 802efd4: fb0e f606 mul.w r6, lr, r6 + 802efd8: 435f muls r7, r3 + 802efda: 4359 muls r1, r3 + 802efdc: 9b05 ldr r3, [sp, #20] + 802efde: ea4f 2c17 mov.w ip, r7, lsr #8 + 802efe2: f107 1701 add.w r7, r7, #65537 ; 0x10001 + 802efe6: fb03 5502 mla r5, r3, r2, r5 + 802efea: 9b06 ldr r3, [sp, #24] + 802efec: f00c 1cff and.w ip, ip, #16711935 ; 0xff00ff + 802eff0: fb0e fe0b mul.w lr, lr, fp + 802eff4: 44bc add ip, r7 + 802eff6: f501 7780 add.w r7, r1, #256 ; 0x100 + 802effa: ea4f 2c1c mov.w ip, ip, lsr #8 + 802effe: eb07 2111 add.w r1, r7, r1, lsr #8 + 802f002: f00c 1cff and.w ip, ip, #16711935 ; 0xff00ff + 802f006: 0a09 lsrs r1, r1, #8 + 802f008: fb0c 5509 mla r5, ip, r9, r5 + 802f00c: f401 417f and.w r1, r1, #65280 ; 0xff00 + 802f010: fb00 5504 mla r5, r0, r4, r5 + 802f014: f403 407f and.w r0, r3, #65280 ; 0xff00 + 802f018: 9b07 ldr r3, [sp, #28] + 802f01a: fb02 6000 mla r0, r2, r0, r6 + 802f01e: 0a2d lsrs r5, r5, #8 + 802f020: fb02 e20a mla r2, r2, sl, lr + 802f024: f403 437f and.w r3, r3, #65280 ; 0xff00 + 802f028: fb09 0001 mla r0, r9, r1, r0 + 802f02c: f005 15ff and.w r5, r5, #16711935 ; 0xff00ff + 802f030: fb04 0003 mla r0, r4, r3, r0 + 802f034: 9b00 ldr r3, [sp, #0] + 802f036: fb04 2408 mla r4, r4, r8, r2 + 802f03a: 9a04 ldr r2, [sp, #16] + 802f03c: 0a00 lsrs r0, r0, #8 + 802f03e: fb09 4903 mla r9, r9, r3, r4 + 802f042: 9b02 ldr r3, [sp, #8] + 802f044: f400 407f and.w r0, r0, #65280 ; 0xff00 + 802f048: ea6f 2929 mvn.w r9, r9, asr #8 + 802f04c: 4305 orrs r5, r0 + 802f04e: fa5f f989 uxtb.w r9, r9 + 802f052: fb03 f109 mul.w r1, r3, r9 + 802f056: 9b03 ldr r3, [sp, #12] + 802f058: fb03 f309 mul.w r3, r3, r9 + 802f05c: fb02 f909 mul.w r9, r2, r9 + 802f060: 1c4a adds r2, r1, #1 + 802f062: 1c58 adds r0, r3, #1 + 802f064: eb02 2111 add.w r1, r2, r1, lsr #8 + 802f068: eb00 2013 add.w r0, r0, r3, lsr #8 + 802f06c: 0c2a lsrs r2, r5, #16 + 802f06e: 0a2b lsrs r3, r5, #8 + 802f070: eb02 2211 add.w r2, r2, r1, lsr #8 + 802f074: eb03 2310 add.w r3, r3, r0, lsr #8 + 802f078: 0212 lsls r2, r2, #8 + 802f07a: 00db lsls r3, r3, #3 + 802f07c: f402 4278 and.w r2, r2, #63488 ; 0xf800 + 802f080: f403 63fc and.w r3, r3, #2016 ; 0x7e0 + 802f084: 4313 orrs r3, r2 + 802f086: f109 0201 add.w r2, r9, #1 + 802f08a: eb02 2919 add.w r9, r2, r9, lsr #8 + 802f08e: eb05 2519 add.w r5, r5, r9, lsr #8 + 802f092: f3c5 05c4 ubfx r5, r5, #3, #5 + 802f096: 431d orrs r5, r3 + 802f098: 9b01 ldr r3, [sp, #4] + 802f09a: 801d strh r5, [r3, #0] + 802f09c: b009 add sp, #36 ; 0x24 + 802f09e: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 802f0a2: 2000 movs r0, #0 + 802f0a4: e701 b.n 802eeaa <_ZNK8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKmssiihh+0x5c> + 802f0a6: 2600 movs r6, #0 + 802f0a8: 4630 mov r0, r6 + 802f0aa: e70b b.n 802eec4 <_ZNK8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKmssiihh+0x76> + 802f0ac: 2600 movs r6, #0 + 802f0ae: e709 b.n 802eec4 <_ZNK8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKmssiihh+0x76> + 802f0b0: 462e mov r6, r5 + 802f0b2: e707 b.n 802eec4 <_ZNK8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKmssiihh+0x76> + 802f0b4: 2700 movs r7, #0 + 802f0b6: e71a b.n 802eeee <_ZNK8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKmssiihh+0xa0> + 802f0b8: 2100 movs r1, #0 + 802f0ba: 460f mov r7, r1 + 802f0bc: e723 b.n 802ef06 <_ZNK8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKmssiihh+0xb8> + 802f0be: 4621 mov r1, r4 + 802f0c0: 4627 mov r7, r4 + 802f0c2: e720 b.n 802ef06 <_ZNK8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKmssiihh+0xb8> + 802f0c4: 2100 movs r1, #0 + 802f0c6: e71e b.n 802ef06 <_ZNK8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKmssiihh+0xb8> + 802f0c8: 4629 mov r1, r5 + 802f0ca: e71c b.n 802ef06 <_ZNK8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKmssiihh+0xb8> + +0802f0cc <_ZN8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff>: + 802f0cc: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 802f0d0: b09b sub sp, #108 ; 0x6c + 802f0d2: 9218 str r2, [sp, #96] ; 0x60 + 802f0d4: 9a29 ldr r2, [sp, #164] ; 0xa4 + 802f0d6: 9019 str r0, [sp, #100] ; 0x64 + 802f0d8: 9116 str r1, [sp, #88] ; 0x58 + 802f0da: 6850 ldr r0, [r2, #4] + 802f0dc: 9307 str r3, [sp, #28] + 802f0de: 6812 ldr r2, [r2, #0] + 802f0e0: 9d26 ldr r5, [sp, #152] ; 0x98 + 802f0e2: e9dd 132a ldrd r1, r3, [sp, #168] ; 0xa8 + 802f0e6: fb00 1303 mla r3, r0, r3, r1 + 802f0ea: eb02 0343 add.w r3, r2, r3, lsl #1 + 802f0ee: 930a str r3, [sp, #40] ; 0x28 + 802f0f0: 9b2c ldr r3, [sp, #176] ; 0xb0 + 802f0f2: 681b ldr r3, [r3, #0] + 802f0f4: 930f str r3, [sp, #60] ; 0x3c + 802f0f6: 9b2c ldr r3, [sp, #176] ; 0xb0 + 802f0f8: 685e ldr r6, [r3, #4] + 802f0fa: 3604 adds r6, #4 + 802f0fc: 9b16 ldr r3, [sp, #88] ; 0x58 + 802f0fe: 2b00 cmp r3, #0 + 802f100: dc03 bgt.n 802f10a <_ZN8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x3e> + 802f102: 9b18 ldr r3, [sp, #96] ; 0x60 + 802f104: 2b00 cmp r3, #0 + 802f106: f340 8373 ble.w 802f7f0 <_ZN8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x724> + 802f10a: 9b2c ldr r3, [sp, #176] ; 0xb0 + 802f10c: f9b3 1008 ldrsh.w r1, [r3, #8] + 802f110: f9b3 200c ldrsh.w r2, [r3, #12] + 802f114: 1e48 subs r0, r1, #1 + 802f116: 1e57 subs r7, r2, #1 + 802f118: 9b07 ldr r3, [sp, #28] + 802f11a: 2b00 cmp r3, #0 + 802f11c: f340 818f ble.w 802f43e <_ZN8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x372> + 802f120: 9c25 ldr r4, [sp, #148] ; 0x94 + 802f122: 142b asrs r3, r5, #16 + 802f124: ea5f 4c24 movs.w ip, r4, asr #16 + 802f128: d406 bmi.n 802f138 <_ZN8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x6c> + 802f12a: 4584 cmp ip, r0 + 802f12c: da04 bge.n 802f138 <_ZN8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x6c> + 802f12e: 2b00 cmp r3, #0 + 802f130: db02 blt.n 802f138 <_ZN8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x6c> + 802f132: 42bb cmp r3, r7 + 802f134: f2c0 8184 blt.w 802f440 <_ZN8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x374> + 802f138: f11c 0c01 adds.w ip, ip, #1 + 802f13c: f100 8172 bmi.w 802f424 <_ZN8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x358> + 802f140: 4561 cmp r1, ip + 802f142: f2c0 816f blt.w 802f424 <_ZN8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x358> + 802f146: 3301 adds r3, #1 + 802f148: f100 816c bmi.w 802f424 <_ZN8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x358> + 802f14c: 429a cmp r2, r3 + 802f14e: f2c0 8169 blt.w 802f424 <_ZN8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x358> + 802f152: 9b07 ldr r3, [sp, #28] + 802f154: 9f0a ldr r7, [sp, #40] ; 0x28 + 802f156: 9317 str r3, [sp, #92] ; 0x5c + 802f158: 9b17 ldr r3, [sp, #92] ; 0x5c + 802f15a: 2b00 cmp r3, #0 + 802f15c: f340 818e ble.w 802f47c <_ZN8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x3b0> + 802f160: 9b25 ldr r3, [sp, #148] ; 0x94 + 802f162: ea4f 4c25 mov.w ip, r5, asr #16 + 802f166: f3c5 3003 ubfx r0, r5, #12, #4 + 802f16a: f3c3 3203 ubfx r2, r3, #12, #4 + 802f16e: 9b2c ldr r3, [sp, #176] ; 0xb0 + 802f170: e9d3 1e02 ldrd r1, lr, [r3, #8] + 802f174: 9b25 ldr r3, [sp, #148] ; 0x94 + 802f176: 141b asrs r3, r3, #16 + 802f178: f100 81d1 bmi.w 802f51e <_ZN8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x452> + 802f17c: f101 38ff add.w r8, r1, #4294967295 + 802f180: 4543 cmp r3, r8 + 802f182: f280 81cc bge.w 802f51e <_ZN8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x452> + 802f186: f1bc 0f00 cmp.w ip, #0 + 802f18a: f2c0 81c8 blt.w 802f51e <_ZN8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x452> + 802f18e: f10e 38ff add.w r8, lr, #4294967295 + 802f192: 45c4 cmp ip, r8 + 802f194: f280 81c3 bge.w 802f51e <_ZN8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x452> + 802f198: b209 sxth r1, r1 + 802f19a: 9c0f ldr r4, [sp, #60] ; 0x3c + 802f19c: fb0c 3301 mla r3, ip, r1, r3 + 802f1a0: eb04 0803 add.w r8, r4, r3 + 802f1a4: 5ce3 ldrb r3, [r4, r3] + 802f1a6: f856 3023 ldr.w r3, [r6, r3, lsl #2] + 802f1aa: ea4f 6e13 mov.w lr, r3, lsr #24 + 802f1ae: 2a00 cmp r2, #0 + 802f1b0: f000 81aa beq.w 802f508 <_ZN8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x43c> + 802f1b4: f898 c001 ldrb.w ip, [r8, #1] + 802f1b8: f856 402c ldr.w r4, [r6, ip, lsl #2] + 802f1bc: 940b str r4, [sp, #44] ; 0x2c + 802f1be: 0e24 lsrs r4, r4, #24 + 802f1c0: 9412 str r4, [sp, #72] ; 0x48 + 802f1c2: b178 cbz r0, 802f1e4 <_ZN8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x118> + 802f1c4: eb08 0c01 add.w ip, r8, r1 + 802f1c8: f818 1001 ldrb.w r1, [r8, r1] + 802f1cc: f856 1021 ldr.w r1, [r6, r1, lsl #2] + 802f1d0: 9108 str r1, [sp, #32] + 802f1d2: 0e09 lsrs r1, r1, #24 + 802f1d4: 9110 str r1, [sp, #64] ; 0x40 + 802f1d6: f89c 1001 ldrb.w r1, [ip, #1] + 802f1da: f856 1021 ldr.w r1, [r6, r1, lsl #2] + 802f1de: 910c str r1, [sp, #48] ; 0x30 + 802f1e0: 0e09 lsrs r1, r1, #24 + 802f1e2: 9113 str r1, [sp, #76] ; 0x4c + 802f1e4: b292 uxth r2, r2 + 802f1e6: 9912 ldr r1, [sp, #72] ; 0x48 + 802f1e8: b280 uxth r0, r0 + 802f1ea: 9c10 ldr r4, [sp, #64] ; 0x40 + 802f1ec: fb02 f900 mul.w r9, r2, r0 + 802f1f0: 0112 lsls r2, r2, #4 + 802f1f2: ebc9 1000 rsb r0, r9, r0, lsl #4 + 802f1f6: eba2 0809 sub.w r8, r2, r9 + 802f1fa: f5c2 7280 rsb r2, r2, #256 ; 0x100 + 802f1fe: b280 uxth r0, r0 + 802f200: fa1f f888 uxth.w r8, r8 + 802f204: 1a12 subs r2, r2, r0 + 802f206: fb08 f101 mul.w r1, r8, r1 + 802f20a: b292 uxth r2, r2 + 802f20c: fb02 110e mla r1, r2, lr, r1 + 802f210: fb00 1104 mla r1, r0, r4, r1 + 802f214: 9c13 ldr r4, [sp, #76] ; 0x4c + 802f216: fb09 1104 mla r1, r9, r4, r1 + 802f21a: f3c1 2107 ubfx r1, r1, #8, #8 + 802f21e: 2900 cmp r1, #0 + 802f220: f000 80f5 beq.w 802f40e <_ZN8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x342> + 802f224: f1be 0fff cmp.w lr, #255 ; 0xff + 802f228: d01b beq.n 802f262 <_ZN8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x196> + 802f22a: f003 1aff and.w sl, r3, #16711935 ; 0xff00ff + 802f22e: f403 437f and.w r3, r3, #65280 ; 0xff00 + 802f232: fb0e fa0a mul.w sl, lr, sl + 802f236: fb0e fe03 mul.w lr, lr, r3 + 802f23a: ea4f 231a mov.w r3, sl, lsr #8 + 802f23e: f10a 1a01 add.w sl, sl, #65537 ; 0x10001 + 802f242: f50e 7c80 add.w ip, lr, #256 ; 0x100 + 802f246: f003 13ff and.w r3, r3, #16711935 ; 0xff00ff + 802f24a: eb0c 2c1e add.w ip, ip, lr, lsr #8 + 802f24e: 4453 add r3, sl + 802f250: ea4f 2c1c mov.w ip, ip, lsr #8 + 802f254: 0a1b lsrs r3, r3, #8 + 802f256: f40c 4c7f and.w ip, ip, #65280 ; 0xff00 + 802f25a: f003 13ff and.w r3, r3, #16711935 ; 0xff00ff + 802f25e: ea43 030c orr.w r3, r3, ip + 802f262: 9c12 ldr r4, [sp, #72] ; 0x48 + 802f264: 2cff cmp r4, #255 ; 0xff + 802f266: d021 beq.n 802f2ac <_ZN8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1e0> + 802f268: 9c0b ldr r4, [sp, #44] ; 0x2c + 802f26a: f004 1bff and.w fp, r4, #16711935 ; 0xff00ff + 802f26e: 9c12 ldr r4, [sp, #72] ; 0x48 + 802f270: fb04 fb0b mul.w fp, r4, fp + 802f274: 9c0b ldr r4, [sp, #44] ; 0x2c + 802f276: f404 4a7f and.w sl, r4, #65280 ; 0xff00 + 802f27a: 9c12 ldr r4, [sp, #72] ; 0x48 + 802f27c: ea4f 2e1b mov.w lr, fp, lsr #8 + 802f280: f10b 1b01 add.w fp, fp, #65537 ; 0x10001 + 802f284: fb04 fa0a mul.w sl, r4, sl + 802f288: f00e 1eff and.w lr, lr, #16711935 ; 0xff00ff + 802f28c: f50a 7c80 add.w ip, sl, #256 ; 0x100 + 802f290: 44de add lr, fp + 802f292: eb0c 2a1a add.w sl, ip, sl, lsr #8 + 802f296: ea4f 2e1e mov.w lr, lr, lsr #8 + 802f29a: ea4f 2a1a mov.w sl, sl, lsr #8 + 802f29e: f00e 1eff and.w lr, lr, #16711935 ; 0xff00ff + 802f2a2: f40a 4a7f and.w sl, sl, #65280 ; 0xff00 + 802f2a6: ea4e 040a orr.w r4, lr, sl + 802f2aa: 940b str r4, [sp, #44] ; 0x2c + 802f2ac: 9c10 ldr r4, [sp, #64] ; 0x40 + 802f2ae: 2cff cmp r4, #255 ; 0xff + 802f2b0: d021 beq.n 802f2f6 <_ZN8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x22a> + 802f2b2: 9c08 ldr r4, [sp, #32] + 802f2b4: f004 1bff and.w fp, r4, #16711935 ; 0xff00ff + 802f2b8: 9c10 ldr r4, [sp, #64] ; 0x40 + 802f2ba: fb04 fb0b mul.w fp, r4, fp + 802f2be: 9c08 ldr r4, [sp, #32] + 802f2c0: f404 4a7f and.w sl, r4, #65280 ; 0xff00 + 802f2c4: 9c10 ldr r4, [sp, #64] ; 0x40 + 802f2c6: ea4f 2e1b mov.w lr, fp, lsr #8 + 802f2ca: f10b 1b01 add.w fp, fp, #65537 ; 0x10001 + 802f2ce: fb04 fa0a mul.w sl, r4, sl + 802f2d2: f00e 1eff and.w lr, lr, #16711935 ; 0xff00ff + 802f2d6: f50a 7c80 add.w ip, sl, #256 ; 0x100 + 802f2da: 44de add lr, fp + 802f2dc: eb0c 2a1a add.w sl, ip, sl, lsr #8 + 802f2e0: ea4f 2e1e mov.w lr, lr, lsr #8 + 802f2e4: ea4f 2a1a mov.w sl, sl, lsr #8 + 802f2e8: f00e 1eff and.w lr, lr, #16711935 ; 0xff00ff + 802f2ec: f40a 4a7f and.w sl, sl, #65280 ; 0xff00 + 802f2f0: ea4e 040a orr.w r4, lr, sl + 802f2f4: 9408 str r4, [sp, #32] + 802f2f6: 9c13 ldr r4, [sp, #76] ; 0x4c + 802f2f8: 2cff cmp r4, #255 ; 0xff + 802f2fa: d021 beq.n 802f340 <_ZN8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x274> + 802f2fc: 9c0c ldr r4, [sp, #48] ; 0x30 + 802f2fe: f004 1bff and.w fp, r4, #16711935 ; 0xff00ff + 802f302: 9c13 ldr r4, [sp, #76] ; 0x4c + 802f304: fb04 fb0b mul.w fp, r4, fp + 802f308: 9c0c ldr r4, [sp, #48] ; 0x30 + 802f30a: f404 4a7f and.w sl, r4, #65280 ; 0xff00 + 802f30e: 9c13 ldr r4, [sp, #76] ; 0x4c + 802f310: ea4f 2e1b mov.w lr, fp, lsr #8 + 802f314: f10b 1b01 add.w fp, fp, #65537 ; 0x10001 + 802f318: fb04 fa0a mul.w sl, r4, sl + 802f31c: f00e 1eff and.w lr, lr, #16711935 ; 0xff00ff + 802f320: f50a 7c80 add.w ip, sl, #256 ; 0x100 + 802f324: 44de add lr, fp + 802f326: eb0c 2a1a add.w sl, ip, sl, lsr #8 + 802f32a: ea4f 2e1e mov.w lr, lr, lsr #8 + 802f32e: ea4f 2a1a mov.w sl, sl, lsr #8 + 802f332: f00e 1eff and.w lr, lr, #16711935 ; 0xff00ff + 802f336: f40a 4a7f and.w sl, sl, #65280 ; 0xff00 + 802f33a: ea4e 040a orr.w r4, lr, sl + 802f33e: 940c str r4, [sp, #48] ; 0x30 + 802f340: 9c0b ldr r4, [sp, #44] ; 0x2c + 802f342: f003 1eff and.w lr, r3, #16711935 ; 0xff00ff + 802f346: f403 437f and.w r3, r3, #65280 ; 0xff00 + 802f34a: 43c9 mvns r1, r1 + 802f34c: f004 1cff and.w ip, r4, #16711935 ; 0xff00ff + 802f350: 9c08 ldr r4, [sp, #32] + 802f352: fb08 fc0c mul.w ip, r8, ip + 802f356: fb02 cc0e mla ip, r2, lr, ip + 802f35a: f004 1eff and.w lr, r4, #16711935 ; 0xff00ff + 802f35e: 9c0c ldr r4, [sp, #48] ; 0x30 + 802f360: fb00 cc0e mla ip, r0, lr, ip + 802f364: f004 1eff and.w lr, r4, #16711935 ; 0xff00ff + 802f368: 9c0b ldr r4, [sp, #44] ; 0x2c + 802f36a: fb09 cc0e mla ip, r9, lr, ip + 802f36e: f404 4e7f and.w lr, r4, #65280 ; 0xff00 + 802f372: fb08 f80e mul.w r8, r8, lr + 802f376: ea4f 2c1c mov.w ip, ip, lsr #8 + 802f37a: fa5f fe81 uxtb.w lr, r1 + 802f37e: fb02 8303 mla r3, r2, r3, r8 + 802f382: 9a08 ldr r2, [sp, #32] + 802f384: f8b7 8000 ldrh.w r8, [r7] + 802f388: f00c 1cff and.w ip, ip, #16711935 ; 0xff00ff + 802f38c: f402 4a7f and.w sl, r2, #65280 ; 0xff00 + 802f390: 9a0c ldr r2, [sp, #48] ; 0x30 + 802f392: ea4f 01c8 mov.w r1, r8, lsl #3 + 802f396: fb00 330a mla r3, r0, sl, r3 + 802f39a: f402 407f and.w r0, r2, #65280 ; 0xff00 + 802f39e: ea4f 2228 mov.w r2, r8, asr #8 + 802f3a2: fb09 3900 mla r9, r9, r0, r3 + 802f3a6: ea4f 00e8 mov.w r0, r8, asr #3 + 802f3aa: f002 02f8 and.w r2, r2, #248 ; 0xf8 + 802f3ae: b2c9 uxtb r1, r1 + 802f3b0: ea4f 2919 mov.w r9, r9, lsr #8 + 802f3b4: f000 00fc and.w r0, r0, #252 ; 0xfc + 802f3b8: fb02 f20e mul.w r2, r2, lr + 802f3bc: f409 497f and.w r9, r9, #65280 ; 0xff00 + 802f3c0: fb00 f00e mul.w r0, r0, lr + 802f3c4: 1c53 adds r3, r2, #1 + 802f3c6: fb01 f10e mul.w r1, r1, lr + 802f3ca: ea4c 0c09 orr.w ip, ip, r9 + 802f3ce: eb03 2212 add.w r2, r3, r2, lsr #8 + 802f3d2: ea4f 431c mov.w r3, ip, lsr #16 + 802f3d6: eb03 2312 add.w r3, r3, r2, lsr #8 + 802f3da: 4a60 ldr r2, [pc, #384] ; (802f55c <_ZN8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x490>) + 802f3dc: b2db uxtb r3, r3 + 802f3de: ea02 2203 and.w r2, r2, r3, lsl #8 + 802f3e2: 1c43 adds r3, r0, #1 + 802f3e4: eb03 2010 add.w r0, r3, r0, lsr #8 + 802f3e8: ea4f 231c mov.w r3, ip, lsr #8 + 802f3ec: eb03 2310 add.w r3, r3, r0, lsr #8 + 802f3f0: 00db lsls r3, r3, #3 + 802f3f2: f403 63fc and.w r3, r3, #2016 ; 0x7e0 + 802f3f6: 4313 orrs r3, r2 + 802f3f8: 1c4a adds r2, r1, #1 + 802f3fa: eb02 2111 add.w r1, r2, r1, lsr #8 + 802f3fe: eb0c 2c11 add.w ip, ip, r1, lsr #8 + 802f402: f3cc 0cc4 ubfx ip, ip, #3, #5 + 802f406: ea4c 0c03 orr.w ip, ip, r3 + 802f40a: f8a7 c000 strh.w ip, [r7] + 802f40e: 9b27 ldr r3, [sp, #156] ; 0x9c + 802f410: 3702 adds r7, #2 + 802f412: 9a25 ldr r2, [sp, #148] ; 0x94 + 802f414: 441a add r2, r3 + 802f416: 9b28 ldr r3, [sp, #160] ; 0xa0 + 802f418: 441d add r5, r3 + 802f41a: 9b17 ldr r3, [sp, #92] ; 0x5c + 802f41c: 9225 str r2, [sp, #148] ; 0x94 + 802f41e: 3b01 subs r3, #1 + 802f420: 9317 str r3, [sp, #92] ; 0x5c + 802f422: e699 b.n 802f158 <_ZN8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x8c> + 802f424: 9b27 ldr r3, [sp, #156] ; 0x9c + 802f426: 9c25 ldr r4, [sp, #148] ; 0x94 + 802f428: 441c add r4, r3 + 802f42a: 9b28 ldr r3, [sp, #160] ; 0xa0 + 802f42c: 441d add r5, r3 + 802f42e: 9b07 ldr r3, [sp, #28] + 802f430: 9425 str r4, [sp, #148] ; 0x94 + 802f432: 3b01 subs r3, #1 + 802f434: 9307 str r3, [sp, #28] + 802f436: 9b0a ldr r3, [sp, #40] ; 0x28 + 802f438: 3302 adds r3, #2 + 802f43a: 930a str r3, [sp, #40] ; 0x28 + 802f43c: e66c b.n 802f118 <_ZN8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x4c> + 802f43e: d024 beq.n 802f48a <_ZN8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x3be> + 802f440: 9b07 ldr r3, [sp, #28] + 802f442: 9827 ldr r0, [sp, #156] ; 0x9c + 802f444: 3b01 subs r3, #1 + 802f446: 9c25 ldr r4, [sp, #148] ; 0x94 + 802f448: fb00 4003 mla r0, r0, r3, r4 + 802f44c: 1400 asrs r0, r0, #16 + 802f44e: f53f ae80 bmi.w 802f152 <_ZN8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x86> + 802f452: 3901 subs r1, #1 + 802f454: 4288 cmp r0, r1 + 802f456: f6bf ae7c bge.w 802f152 <_ZN8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x86> + 802f45a: 9928 ldr r1, [sp, #160] ; 0xa0 + 802f45c: fb01 5303 mla r3, r1, r3, r5 + 802f460: 141b asrs r3, r3, #16 + 802f462: f53f ae76 bmi.w 802f152 <_ZN8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x86> + 802f466: 3a01 subs r2, #1 + 802f468: 4293 cmp r3, r2 + 802f46a: f6bf ae72 bge.w 802f152 <_ZN8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x86> + 802f46e: f8dd b01c ldr.w fp, [sp, #28] + 802f472: f8dd 9028 ldr.w r9, [sp, #40] ; 0x28 + 802f476: f1bb 0f00 cmp.w fp, #0 + 802f47a: dc71 bgt.n 802f560 <_ZN8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x494> + 802f47c: 9b07 ldr r3, [sp, #28] + 802f47e: ea23 74e3 bic.w r4, r3, r3, asr #31 + 802f482: 9b0a ldr r3, [sp, #40] ; 0x28 + 802f484: eb03 0344 add.w r3, r3, r4, lsl #1 + 802f488: 930a str r3, [sp, #40] ; 0x28 + 802f48a: 9b16 ldr r3, [sp, #88] ; 0x58 + 802f48c: 2b00 cmp r3, #0 + 802f48e: f340 81af ble.w 802f7f0 <_ZN8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x724> + 802f492: eeb7 7a00 vmov.f32 s14, #112 ; 0x3f800000 1.0 + 802f496: 9b24 ldr r3, [sp, #144] ; 0x90 + 802f498: ee30 0a04 vadd.f32 s0, s0, s8 + 802f49c: ee70 0aa4 vadd.f32 s1, s1, s9 + 802f4a0: eef0 6a62 vmov.f32 s13, s5 + 802f4a4: eec7 7a00 vdiv.f32 s15, s14, s0 + 802f4a8: ee31 1a05 vadd.f32 s2, s2, s10 + 802f4ac: eefe 6ac8 vcvt.s32.f32 s13, s13, #16 + 802f4b0: edcd 6a25 vstr s13, [sp, #148] ; 0x94 + 802f4b4: eef0 6a43 vmov.f32 s13, s6 + 802f4b8: eefe 6ac8 vcvt.s32.f32 s13, s13, #16 + 802f4bc: ee16 5a90 vmov r5, s13 + 802f4c0: ee20 7aa7 vmul.f32 s14, s1, s15 + 802f4c4: ee61 7a27 vmul.f32 s15, s2, s15 + 802f4c8: ee77 2a62 vsub.f32 s5, s14, s5 + 802f4cc: ee37 3ac3 vsub.f32 s6, s15, s6 + 802f4d0: eefe 2ac8 vcvt.s32.f32 s5, s5, #16 + 802f4d4: eebe 3ac8 vcvt.s32.f32 s6, s6, #16 + 802f4d8: ee12 2a90 vmov r2, s5 + 802f4dc: eef0 2a47 vmov.f32 s5, s14 + 802f4e0: fb92 f3f3 sdiv r3, r2, r3 + 802f4e4: ee13 2a10 vmov r2, s6 + 802f4e8: 9327 str r3, [sp, #156] ; 0x9c + 802f4ea: 9b24 ldr r3, [sp, #144] ; 0x90 + 802f4ec: eeb0 3a67 vmov.f32 s6, s15 + 802f4f0: fb92 f3f3 sdiv r3, r2, r3 + 802f4f4: 9328 str r3, [sp, #160] ; 0xa0 + 802f4f6: 9b16 ldr r3, [sp, #88] ; 0x58 + 802f4f8: 9a18 ldr r2, [sp, #96] ; 0x60 + 802f4fa: 3b01 subs r3, #1 + 802f4fc: 9316 str r3, [sp, #88] ; 0x58 + 802f4fe: 9b24 ldr r3, [sp, #144] ; 0x90 + 802f500: bf08 it eq + 802f502: 4613 moveq r3, r2 + 802f504: 9307 str r3, [sp, #28] + 802f506: e5f9 b.n 802f0fc <_ZN8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x30> + 802f508: 2800 cmp r0, #0 + 802f50a: f43f ae6b beq.w 802f1e4 <_ZN8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x118> + 802f50e: f818 1001 ldrb.w r1, [r8, r1] + 802f512: f856 1021 ldr.w r1, [r6, r1, lsl #2] + 802f516: 9108 str r1, [sp, #32] + 802f518: 0e09 lsrs r1, r1, #24 + 802f51a: 9110 str r1, [sp, #64] ; 0x40 + 802f51c: e662 b.n 802f1e4 <_ZN8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x118> + 802f51e: f113 0801 adds.w r8, r3, #1 + 802f522: f53f af74 bmi.w 802f40e <_ZN8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x342> + 802f526: 4541 cmp r1, r8 + 802f528: f6ff af71 blt.w 802f40e <_ZN8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x342> + 802f52c: f11c 0801 adds.w r8, ip, #1 + 802f530: f53f af6d bmi.w 802f40e <_ZN8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x342> + 802f534: 45c6 cmp lr, r8 + 802f536: f6ff af6a blt.w 802f40e <_ZN8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x342> + 802f53a: b209 sxth r1, r1 + 802f53c: e9cd 3c02 strd r3, ip, [sp, #8] + 802f540: fa0f f38e sxth.w r3, lr + 802f544: 9100 str r1, [sp, #0] + 802f546: 4639 mov r1, r7 + 802f548: 9301 str r3, [sp, #4] + 802f54a: 4633 mov r3, r6 + 802f54c: e9cd 2004 strd r2, r0, [sp, #16] + 802f550: 9a0f ldr r2, [sp, #60] ; 0x3c + 802f552: 9819 ldr r0, [sp, #100] ; 0x64 + 802f554: f7ff fc7b bl 802ee4e <_ZNK8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKmssiihh> + 802f558: e759 b.n 802f40e <_ZN8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x342> + 802f55a: bf00 nop + 802f55c: fffff800 .word 0xfffff800 + 802f560: 9b25 ldr r3, [sp, #148] ; 0x94 + 802f562: f3c5 3003 ubfx r0, r5, #12, #4 + 802f566: 9c25 ldr r4, [sp, #148] ; 0x94 + 802f568: f3c3 3203 ubfx r2, r3, #12, #4 + 802f56c: 9b2c ldr r3, [sp, #176] ; 0xb0 + 802f56e: 1427 asrs r7, r4, #16 + 802f570: 9c0f ldr r4, [sp, #60] ; 0x3c + 802f572: f9b3 1008 ldrsh.w r1, [r3, #8] + 802f576: 142b asrs r3, r5, #16 + 802f578: fb01 7303 mla r3, r1, r3, r7 + 802f57c: 18e7 adds r7, r4, r3 + 802f57e: 5ce3 ldrb r3, [r4, r3] + 802f580: f856 3023 ldr.w r3, [r6, r3, lsl #2] + 802f584: ea4f 6c13 mov.w ip, r3, lsr #24 + 802f588: 2a00 cmp r2, #0 + 802f58a: f000 8127 beq.w 802f7dc <_ZN8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x710> + 802f58e: f897 e001 ldrb.w lr, [r7, #1] + 802f592: f856 402e ldr.w r4, [r6, lr, lsl #2] + 802f596: 940d str r4, [sp, #52] ; 0x34 + 802f598: 0e24 lsrs r4, r4, #24 + 802f59a: 9414 str r4, [sp, #80] ; 0x50 + 802f59c: b170 cbz r0, 802f5bc <_ZN8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x4f0> + 802f59e: eb07 0e01 add.w lr, r7, r1 + 802f5a2: 5c79 ldrb r1, [r7, r1] + 802f5a4: f856 1021 ldr.w r1, [r6, r1, lsl #2] + 802f5a8: 9109 str r1, [sp, #36] ; 0x24 + 802f5aa: 0e09 lsrs r1, r1, #24 + 802f5ac: 9111 str r1, [sp, #68] ; 0x44 + 802f5ae: f89e 1001 ldrb.w r1, [lr, #1] + 802f5b2: f856 1021 ldr.w r1, [r6, r1, lsl #2] + 802f5b6: 910e str r1, [sp, #56] ; 0x38 + 802f5b8: 0e09 lsrs r1, r1, #24 + 802f5ba: 9115 str r1, [sp, #84] ; 0x54 + 802f5bc: b292 uxth r2, r2 + 802f5be: 9c11 ldr r4, [sp, #68] ; 0x44 + 802f5c0: b280 uxth r0, r0 + 802f5c2: fb02 f800 mul.w r8, r2, r0 + 802f5c6: 0112 lsls r2, r2, #4 + 802f5c8: ebc8 1000 rsb r0, r8, r0, lsl #4 + 802f5cc: eba2 0e08 sub.w lr, r2, r8 + 802f5d0: f5c2 7180 rsb r1, r2, #256 ; 0x100 + 802f5d4: 9a14 ldr r2, [sp, #80] ; 0x50 + 802f5d6: b280 uxth r0, r0 + 802f5d8: fa1f fe8e uxth.w lr, lr + 802f5dc: 1a09 subs r1, r1, r0 + 802f5de: fb0e f202 mul.w r2, lr, r2 + 802f5e2: b289 uxth r1, r1 + 802f5e4: fb01 220c mla r2, r1, ip, r2 + 802f5e8: fb00 2204 mla r2, r0, r4, r2 + 802f5ec: 9c15 ldr r4, [sp, #84] ; 0x54 + 802f5ee: fb08 2204 mla r2, r8, r4, r2 + 802f5f2: f3c2 2207 ubfx r2, r2, #8, #8 + 802f5f6: 2a00 cmp r2, #0 + 802f5f8: f000 80e5 beq.w 802f7c6 <_ZN8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x6fa> + 802f5fc: f1bc 0fff cmp.w ip, #255 ; 0xff + 802f600: d019 beq.n 802f636 <_ZN8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x56a> + 802f602: f003 1aff and.w sl, r3, #16711935 ; 0xff00ff + 802f606: f403 437f and.w r3, r3, #65280 ; 0xff00 + 802f60a: fb0c fa0a mul.w sl, ip, sl + 802f60e: fb0c fc03 mul.w ip, ip, r3 + 802f612: ea4f 231a mov.w r3, sl, lsr #8 + 802f616: f10a 1a01 add.w sl, sl, #65537 ; 0x10001 + 802f61a: f50c 7780 add.w r7, ip, #256 ; 0x100 + 802f61e: f003 13ff and.w r3, r3, #16711935 ; 0xff00ff + 802f622: eb07 271c add.w r7, r7, ip, lsr #8 + 802f626: 4453 add r3, sl + 802f628: 0a3f lsrs r7, r7, #8 + 802f62a: 0a1b lsrs r3, r3, #8 + 802f62c: f407 477f and.w r7, r7, #65280 ; 0xff00 + 802f630: f003 13ff and.w r3, r3, #16711935 ; 0xff00ff + 802f634: 433b orrs r3, r7 + 802f636: 9c14 ldr r4, [sp, #80] ; 0x50 + 802f638: 2cff cmp r4, #255 ; 0xff + 802f63a: d020 beq.n 802f67e <_ZN8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x5b2> + 802f63c: 9c0d ldr r4, [sp, #52] ; 0x34 + 802f63e: f004 17ff and.w r7, r4, #16711935 ; 0xff00ff + 802f642: 9c14 ldr r4, [sp, #80] ; 0x50 + 802f644: 4367 muls r7, r4 + 802f646: 9c0d ldr r4, [sp, #52] ; 0x34 + 802f648: ea4f 2c17 mov.w ip, r7, lsr #8 + 802f64c: f404 4a7f and.w sl, r4, #65280 ; 0xff00 + 802f650: 9c14 ldr r4, [sp, #80] ; 0x50 + 802f652: f107 1701 add.w r7, r7, #65537 ; 0x10001 + 802f656: f00c 1cff and.w ip, ip, #16711935 ; 0xff00ff + 802f65a: fb04 fa0a mul.w sl, r4, sl + 802f65e: 44bc add ip, r7 + 802f660: f50a 7780 add.w r7, sl, #256 ; 0x100 + 802f664: ea4f 2c1c mov.w ip, ip, lsr #8 + 802f668: eb07 2a1a add.w sl, r7, sl, lsr #8 + 802f66c: f00c 1cff and.w ip, ip, #16711935 ; 0xff00ff + 802f670: ea4f 2a1a mov.w sl, sl, lsr #8 + 802f674: f40a 4a7f and.w sl, sl, #65280 ; 0xff00 + 802f678: ea4c 040a orr.w r4, ip, sl + 802f67c: 940d str r4, [sp, #52] ; 0x34 + 802f67e: 9c11 ldr r4, [sp, #68] ; 0x44 + 802f680: 2cff cmp r4, #255 ; 0xff + 802f682: d020 beq.n 802f6c6 <_ZN8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x5fa> + 802f684: 9c09 ldr r4, [sp, #36] ; 0x24 + 802f686: f004 17ff and.w r7, r4, #16711935 ; 0xff00ff + 802f68a: 9c11 ldr r4, [sp, #68] ; 0x44 + 802f68c: 4367 muls r7, r4 + 802f68e: 9c09 ldr r4, [sp, #36] ; 0x24 + 802f690: ea4f 2c17 mov.w ip, r7, lsr #8 + 802f694: f404 4a7f and.w sl, r4, #65280 ; 0xff00 + 802f698: 9c11 ldr r4, [sp, #68] ; 0x44 + 802f69a: f107 1701 add.w r7, r7, #65537 ; 0x10001 + 802f69e: f00c 1cff and.w ip, ip, #16711935 ; 0xff00ff + 802f6a2: fb04 fa0a mul.w sl, r4, sl + 802f6a6: 44bc add ip, r7 + 802f6a8: f50a 7780 add.w r7, sl, #256 ; 0x100 + 802f6ac: ea4f 2c1c mov.w ip, ip, lsr #8 + 802f6b0: eb07 2a1a add.w sl, r7, sl, lsr #8 + 802f6b4: f00c 1cff and.w ip, ip, #16711935 ; 0xff00ff + 802f6b8: ea4f 2a1a mov.w sl, sl, lsr #8 + 802f6bc: f40a 4a7f and.w sl, sl, #65280 ; 0xff00 + 802f6c0: ea4c 040a orr.w r4, ip, sl + 802f6c4: 9409 str r4, [sp, #36] ; 0x24 + 802f6c6: 9c15 ldr r4, [sp, #84] ; 0x54 + 802f6c8: 2cff cmp r4, #255 ; 0xff + 802f6ca: d020 beq.n 802f70e <_ZN8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x642> + 802f6cc: 9c0e ldr r4, [sp, #56] ; 0x38 + 802f6ce: f004 17ff and.w r7, r4, #16711935 ; 0xff00ff + 802f6d2: 9c15 ldr r4, [sp, #84] ; 0x54 + 802f6d4: 4367 muls r7, r4 + 802f6d6: 9c0e ldr r4, [sp, #56] ; 0x38 + 802f6d8: ea4f 2c17 mov.w ip, r7, lsr #8 + 802f6dc: f404 4a7f and.w sl, r4, #65280 ; 0xff00 + 802f6e0: 9c15 ldr r4, [sp, #84] ; 0x54 + 802f6e2: f107 1701 add.w r7, r7, #65537 ; 0x10001 + 802f6e6: f00c 1cff and.w ip, ip, #16711935 ; 0xff00ff + 802f6ea: fb04 fa0a mul.w sl, r4, sl + 802f6ee: 44bc add ip, r7 + 802f6f0: f50a 7780 add.w r7, sl, #256 ; 0x100 + 802f6f4: ea4f 2c1c mov.w ip, ip, lsr #8 + 802f6f8: eb07 2a1a add.w sl, r7, sl, lsr #8 + 802f6fc: f00c 1cff and.w ip, ip, #16711935 ; 0xff00ff + 802f700: ea4f 2a1a mov.w sl, sl, lsr #8 + 802f704: f40a 4a7f and.w sl, sl, #65280 ; 0xff00 + 802f708: ea4c 040a orr.w r4, ip, sl + 802f70c: 940e str r4, [sp, #56] ; 0x38 + 802f70e: 9c0d ldr r4, [sp, #52] ; 0x34 + 802f710: f003 1cff and.w ip, r3, #16711935 ; 0xff00ff + 802f714: f403 437f and.w r3, r3, #65280 ; 0xff00 + 802f718: 43d2 mvns r2, r2 + 802f71a: f004 17ff and.w r7, r4, #16711935 ; 0xff00ff + 802f71e: 9c09 ldr r4, [sp, #36] ; 0x24 + 802f720: b2d2 uxtb r2, r2 + 802f722: fb0e f707 mul.w r7, lr, r7 + 802f726: fb01 770c mla r7, r1, ip, r7 + 802f72a: f004 1cff and.w ip, r4, #16711935 ; 0xff00ff + 802f72e: 9c0e ldr r4, [sp, #56] ; 0x38 + 802f730: fb00 770c mla r7, r0, ip, r7 + 802f734: f004 1cff and.w ip, r4, #16711935 ; 0xff00ff + 802f738: 9c0d ldr r4, [sp, #52] ; 0x34 + 802f73a: fb08 770c mla r7, r8, ip, r7 + 802f73e: f404 4c7f and.w ip, r4, #65280 ; 0xff00 + 802f742: fb0e fe0c mul.w lr, lr, ip + 802f746: 0a3f lsrs r7, r7, #8 + 802f748: fb01 e303 mla r3, r1, r3, lr + 802f74c: 9909 ldr r1, [sp, #36] ; 0x24 + 802f74e: f007 17ff and.w r7, r7, #16711935 ; 0xff00ff + 802f752: f401 4a7f and.w sl, r1, #65280 ; 0xff00 + 802f756: 990e ldr r1, [sp, #56] ; 0x38 + 802f758: fb00 330a mla r3, r0, sl, r3 + 802f75c: f401 4c7f and.w ip, r1, #65280 ; 0xff00 + 802f760: fb08 3c0c mla ip, r8, ip, r3 + 802f764: f8b9 3000 ldrh.w r3, [r9] + 802f768: 1218 asrs r0, r3, #8 + 802f76a: 10d9 asrs r1, r3, #3 + 802f76c: ea4f 2c1c mov.w ip, ip, lsr #8 + 802f770: f000 00f8 and.w r0, r0, #248 ; 0xf8 + 802f774: 00db lsls r3, r3, #3 + 802f776: f001 01fc and.w r1, r1, #252 ; 0xfc + 802f77a: 4350 muls r0, r2 + 802f77c: f40c 4c7f and.w ip, ip, #65280 ; 0xff00 + 802f780: b2db uxtb r3, r3 + 802f782: 4351 muls r1, r2 + 802f784: ea47 070c orr.w r7, r7, ip + 802f788: 4353 muls r3, r2 + 802f78a: 1c42 adds r2, r0, #1 + 802f78c: eb02 2010 add.w r0, r2, r0, lsr #8 + 802f790: 0c3a lsrs r2, r7, #16 + 802f792: eb02 2010 add.w r0, r2, r0, lsr #8 + 802f796: 4a18 ldr r2, [pc, #96] ; (802f7f8 <_ZN8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x72c>) + 802f798: b2c0 uxtb r0, r0 + 802f79a: ea02 2000 and.w r0, r2, r0, lsl #8 + 802f79e: 1c4a adds r2, r1, #1 + 802f7a0: eb02 2111 add.w r1, r2, r1, lsr #8 + 802f7a4: 0a3a lsrs r2, r7, #8 + 802f7a6: eb02 2111 add.w r1, r2, r1, lsr #8 + 802f7aa: 00c9 lsls r1, r1, #3 + 802f7ac: f401 61fc and.w r1, r1, #2016 ; 0x7e0 + 802f7b0: 4301 orrs r1, r0 + 802f7b2: 1c58 adds r0, r3, #1 + 802f7b4: eb00 2013 add.w r0, r0, r3, lsr #8 + 802f7b8: eb07 2710 add.w r7, r7, r0, lsr #8 + 802f7bc: f3c7 00c4 ubfx r0, r7, #3, #5 + 802f7c0: 4308 orrs r0, r1 + 802f7c2: f8a9 0000 strh.w r0, [r9] + 802f7c6: 9b27 ldr r3, [sp, #156] ; 0x9c + 802f7c8: f109 0902 add.w r9, r9, #2 + 802f7cc: 9a25 ldr r2, [sp, #148] ; 0x94 + 802f7ce: f10b 3bff add.w fp, fp, #4294967295 + 802f7d2: 441a add r2, r3 + 802f7d4: 9b28 ldr r3, [sp, #160] ; 0xa0 + 802f7d6: 9225 str r2, [sp, #148] ; 0x94 + 802f7d8: 441d add r5, r3 + 802f7da: e64c b.n 802f476 <_ZN8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x3aa> + 802f7dc: 2800 cmp r0, #0 + 802f7de: f43f aeed beq.w 802f5bc <_ZN8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x4f0> + 802f7e2: 5c79 ldrb r1, [r7, r1] + 802f7e4: f856 1021 ldr.w r1, [r6, r1, lsl #2] + 802f7e8: 9109 str r1, [sp, #36] ; 0x24 + 802f7ea: 0e09 lsrs r1, r1, #24 + 802f7ec: 9111 str r1, [sp, #68] ; 0x44 + 802f7ee: e6e5 b.n 802f5bc <_ZN8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x4f0> + 802f7f0: b01b add sp, #108 ; 0x6c + 802f7f2: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 802f7f6: bf00 nop + 802f7f8: fffff800 .word 0xfffff800 + +0802f7fc <_ZNK8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtPKhssiihhh>: + 802f7fc: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 802f800: b085 sub sp, #20 + 802f802: e9dd 7010 ldrd r7, r0, [sp, #64] ; 0x40 + 802f806: f9bd 6038 ldrsh.w r6, [sp, #56] ; 0x38 + 802f80a: 2800 cmp r0, #0 + 802f80c: 9103 str r1, [sp, #12] + 802f80e: fb00 7406 mla r4, r0, r6, r7 + 802f812: f9bd b03c ldrsh.w fp, [sp, #60] ; 0x3c + 802f816: f89d 1048 ldrb.w r1, [sp, #72] ; 0x48 + 802f81a: eb02 0544 add.w r5, r2, r4, lsl #1 + 802f81e: f89d e04c ldrb.w lr, [sp, #76] ; 0x4c + 802f822: eb03 0904 add.w r9, r3, r4 + 802f826: 9501 str r5, [sp, #4] + 802f828: f2c0 8150 blt.w 802facc <_ZNK8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtPKhssiihhh+0x2d0> + 802f82c: 4583 cmp fp, r0 + 802f82e: f340 814d ble.w 802facc <_ZNK8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtPKhssiihhh+0x2d0> + 802f832: 2f00 cmp r7, #0 + 802f834: f2c0 8146 blt.w 802fac4 <_ZNK8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtPKhssiihhh+0x2c8> + 802f838: 42be cmp r6, r7 + 802f83a: f340 8143 ble.w 802fac4 <_ZNK8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtPKhssiihhh+0x2c8> + 802f83e: f813 c004 ldrb.w ip, [r3, r4] + 802f842: f832 3014 ldrh.w r3, [r2, r4, lsl #1] + 802f846: f64f 041f movw r4, #63519 ; 0xf81f + 802f84a: ea4f 02ec mov.w r2, ip, asr #3 + 802f84e: f423 65fc bic.w r5, r3, #2016 ; 0x7e0 + 802f852: f403 63fc and.w r3, r3, #2016 ; 0x7e0 + 802f856: 4355 muls r5, r2 + 802f858: fb0c f203 mul.w r2, ip, r3 + 802f85c: ea04 1355 and.w r3, r4, r5, lsr #5 + 802f860: f605 0501 addw r5, r5, #2049 ; 0x801 + 802f864: 441d add r5, r3 + 802f866: f102 0320 add.w r3, r2, #32 + 802f86a: eb03 2312 add.w r3, r3, r2, lsr #8 + 802f86e: ea04 1455 and.w r4, r4, r5, lsr #5 + 802f872: 0a1b lsrs r3, r3, #8 + 802f874: f403 63fc and.w r3, r3, #2016 ; 0x7e0 + 802f878: 431c orrs r4, r3 + 802f87a: 1c7b adds r3, r7, #1 + 802f87c: f100 812b bmi.w 802fad6 <_ZNK8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtPKhssiihhh+0x2da> + 802f880: 429e cmp r6, r3 + 802f882: f340 8128 ble.w 802fad6 <_ZNK8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtPKhssiihhh+0x2da> + 802f886: 2900 cmp r1, #0 + 802f888: f000 8128 beq.w 802fadc <_ZNK8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtPKhssiihhh+0x2e0> + 802f88c: 9a01 ldr r2, [sp, #4] + 802f88e: f899 3001 ldrb.w r3, [r9, #1] + 802f892: 8855 ldrh r5, [r2, #2] + 802f894: ea4f 08e3 mov.w r8, r3, asr #3 + 802f898: f425 62fc bic.w r2, r5, #2016 ; 0x7e0 + 802f89c: f405 65fc and.w r5, r5, #2016 ; 0x7e0 + 802f8a0: fb08 f802 mul.w r8, r8, r2 + 802f8a4: f64f 021f movw r2, #63519 ; 0xf81f + 802f8a8: 435d muls r5, r3 + 802f8aa: ea02 1a58 and.w sl, r2, r8, lsr #5 + 802f8ae: f608 0801 addw r8, r8, #2049 ; 0x801 + 802f8b2: 44d0 add r8, sl + 802f8b4: f105 0a20 add.w sl, r5, #32 + 802f8b8: eb0a 2515 add.w r5, sl, r5, lsr #8 + 802f8bc: ea02 1258 and.w r2, r2, r8, lsr #5 + 802f8c0: 0a2d lsrs r5, r5, #8 + 802f8c2: f405 65fc and.w r5, r5, #2016 ; 0x7e0 + 802f8c6: 432a orrs r2, r5 + 802f8c8: 3001 adds r0, #1 + 802f8ca: f100 810d bmi.w 802fae8 <_ZNK8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtPKhssiihhh+0x2ec> + 802f8ce: 4583 cmp fp, r0 + 802f8d0: f340 810a ble.w 802fae8 <_ZNK8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtPKhssiihhh+0x2ec> + 802f8d4: f1be 0f00 cmp.w lr, #0 + 802f8d8: f000 810b beq.w 802faf2 <_ZNK8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtPKhssiihhh+0x2f6> + 802f8dc: 2f00 cmp r7, #0 + 802f8de: f2c0 8100 blt.w 802fae2 <_ZNK8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtPKhssiihhh+0x2e6> + 802f8e2: 42be cmp r6, r7 + 802f8e4: f340 80fd ble.w 802fae2 <_ZNK8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtPKhssiihhh+0x2e6> + 802f8e8: 9801 ldr r0, [sp, #4] + 802f8ea: f64f 0b1f movw fp, #63519 ; 0xf81f + 802f8ee: f819 5006 ldrb.w r5, [r9, r6] + 802f8f2: f830 8016 ldrh.w r8, [r0, r6, lsl #1] + 802f8f6: ea4f 0ae5 mov.w sl, r5, asr #3 + 802f8fa: f428 60fc bic.w r0, r8, #2016 ; 0x7e0 + 802f8fe: f408 68fc and.w r8, r8, #2016 ; 0x7e0 + 802f902: fb0a fa00 mul.w sl, sl, r0 + 802f906: fb05 f808 mul.w r8, r5, r8 + 802f90a: ea0b 105a and.w r0, fp, sl, lsr #5 + 802f90e: f60a 0a01 addw sl, sl, #2049 ; 0x801 + 802f912: 4482 add sl, r0 + 802f914: f108 0020 add.w r0, r8, #32 + 802f918: eb00 2018 add.w r0, r0, r8, lsr #8 + 802f91c: ea0b 1b5a and.w fp, fp, sl, lsr #5 + 802f920: 0a00 lsrs r0, r0, #8 + 802f922: f400 60fc and.w r0, r0, #2016 ; 0x7e0 + 802f926: ea4b 0b00 orr.w fp, fp, r0 + 802f92a: 3701 adds r7, #1 + 802f92c: f100 80e6 bmi.w 802fafc <_ZNK8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtPKhssiihhh+0x300> + 802f930: 42be cmp r6, r7 + 802f932: f340 80e3 ble.w 802fafc <_ZNK8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtPKhssiihhh+0x300> + 802f936: 2900 cmp r1, #0 + 802f938: f000 80e3 beq.w 802fb02 <_ZNK8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtPKhssiihhh+0x306> + 802f93c: 3601 adds r6, #1 + 802f93e: 9801 ldr r0, [sp, #4] + 802f940: f819 7006 ldrb.w r7, [r9, r6] + 802f944: f830 0016 ldrh.w r0, [r0, r6, lsl #1] + 802f948: ea4f 09e7 mov.w r9, r7, asr #3 + 802f94c: f420 66fc bic.w r6, r0, #2016 ; 0x7e0 + 802f950: f400 60fc and.w r0, r0, #2016 ; 0x7e0 + 802f954: fb09 f906 mul.w r9, r9, r6 + 802f958: fb07 f800 mul.w r8, r7, r0 + 802f95c: f64f 001f movw r0, #63519 ; 0xf81f + 802f960: ea00 1a59 and.w sl, r0, r9, lsr #5 + 802f964: f609 0901 addw r9, r9, #2049 ; 0x801 + 802f968: 44d1 add r9, sl + 802f96a: ea00 1659 and.w r6, r0, r9, lsr #5 + 802f96e: f108 0020 add.w r0, r8, #32 + 802f972: eb00 2018 add.w r0, r0, r8, lsr #8 + 802f976: 0a00 lsrs r0, r0, #8 + 802f978: f400 60fc and.w r0, r0, #2016 ; 0x7e0 + 802f97c: 4330 orrs r0, r6 + 802f97e: b28e uxth r6, r1 + 802f980: fa1f f98e uxth.w r9, lr + 802f984: ea4f 4a04 mov.w sl, r4, lsl #16 + 802f988: f424 64fc bic.w r4, r4, #2016 ; 0x7e0 + 802f98c: fb06 f809 mul.w r8, r6, r9 + 802f990: 0136 lsls r6, r6, #4 + 802f992: f00a 6afc and.w sl, sl, #132120576 ; 0x7e00000 + 802f996: ebc8 1909 rsb r9, r8, r9, lsl #4 + 802f99a: 9601 str r6, [sp, #4] + 802f99c: ea4a 0404 orr.w r4, sl, r4 + 802f9a0: ea4f 4a02 mov.w sl, r2, lsl #16 + 802f9a4: fa1f f689 uxth.w r6, r9 + 802f9a8: f422 62fc bic.w r2, r2, #2016 ; 0x7e0 + 802f9ac: fb11 f90e smulbb r9, r1, lr + 802f9b0: f00a 6afc and.w sl, sl, #132120576 ; 0x7e00000 + 802f9b4: 9602 str r6, [sp, #8] + 802f9b6: 4626 mov r6, r4 + 802f9b8: f3c9 09c7 ubfx r9, r9, #3, #8 + 802f9bc: f1ce 0410 rsb r4, lr, #16 + 802f9c0: ea4a 0202 orr.w r2, sl, r2 + 802f9c4: ea4f 4a00 mov.w sl, r0, lsl #16 + 802f9c8: 1a64 subs r4, r4, r1 + 802f9ca: ebc9 0141 rsb r1, r9, r1, lsl #1 + 802f9ce: f00a 6afc and.w sl, sl, #132120576 ; 0x7e00000 + 802f9d2: f420 60fc bic.w r0, r0, #2016 ; 0x7e0 + 802f9d6: 434a muls r2, r1 + 802f9d8: eb09 0444 add.w r4, r9, r4, lsl #1 + 802f9dc: ea4a 0000 orr.w r0, sl, r0 + 802f9e0: 9903 ldr r1, [sp, #12] + 802f9e2: fb04 2406 mla r4, r4, r6, r2 + 802f9e6: 9e02 ldr r6, [sp, #8] + 802f9e8: ebc9 0e4e rsb lr, r9, lr, lsl #1 + 802f9ec: fb09 4200 mla r2, r9, r0, r4 + 802f9f0: ea4f 440b mov.w r4, fp, lsl #16 + 802f9f4: f42b 6bfc bic.w fp, fp, #2016 ; 0x7e0 + 802f9f8: 8808 ldrh r0, [r1, #0] + 802f9fa: f004 64fc and.w r4, r4, #132120576 ; 0x7e00000 + 802f9fe: f89d 1050 ldrb.w r1, [sp, #80] ; 0x50 + 802fa02: ea44 0b0b orr.w fp, r4, fp + 802fa06: 9c01 ldr r4, [sp, #4] + 802fa08: b289 uxth r1, r1 + 802fa0a: f5c4 7480 rsb r4, r4, #256 ; 0x100 + 802fa0e: fb0e 2e0b mla lr, lr, fp, r2 + 802fa12: 1ba4 subs r4, r4, r6 + 802fa14: 9e01 ldr r6, [sp, #4] + 802fa16: ea4f 525e mov.w r2, lr, lsr #21 + 802fa1a: eba6 0608 sub.w r6, r6, r8 + 802fa1e: b2a4 uxth r4, r4 + 802fa20: ea4f 1e5e mov.w lr, lr, lsr #5 + 802fa24: f402 62fc and.w r2, r2, #2016 ; 0x7e0 + 802fa28: b2b6 uxth r6, r6 + 802fa2a: f42e 6efc bic.w lr, lr, #2016 ; 0x7e0 + 802fa2e: 4373 muls r3, r6 + 802fa30: ea42 0e0e orr.w lr, r2, lr + 802fa34: fb0c 3304 mla r3, ip, r4, r3 + 802fa38: 9c02 ldr r4, [sp, #8] + 802fa3a: fa1f f28e uxth.w r2, lr + 802fa3e: fb04 3505 mla r5, r4, r5, r3 + 802fa42: 10d4 asrs r4, r2, #3 + 802fa44: fb08 5707 mla r7, r8, r7, r5 + 802fa48: 1215 asrs r5, r2, #8 + 802fa4a: f004 04fc and.w r4, r4, #252 ; 0xfc + 802fa4e: 00d2 lsls r2, r2, #3 + 802fa50: f3c7 2707 ubfx r7, r7, #8, #8 + 802fa54: f005 05f8 and.w r5, r5, #248 ; 0xf8 + 802fa58: b2d2 uxtb r2, r2 + 802fa5a: 434f muls r7, r1 + 802fa5c: 1c7b adds r3, r7, #1 + 802fa5e: eb03 2717 add.w r7, r3, r7, lsr #8 + 802fa62: 1203 asrs r3, r0, #8 + 802fa64: ea6f 2717 mvn.w r7, r7, lsr #8 + 802fa68: f003 03f8 and.w r3, r3, #248 ; 0xf8 + 802fa6c: b2ff uxtb r7, r7 + 802fa6e: fb13 f307 smulbb r3, r3, r7 + 802fa72: fb05 3501 mla r5, r5, r1, r3 + 802fa76: 10c3 asrs r3, r0, #3 + 802fa78: f003 03fc and.w r3, r3, #252 ; 0xfc + 802fa7c: b2ad uxth r5, r5 + 802fa7e: fb13 f307 smulbb r3, r3, r7 + 802fa82: fb04 3401 mla r4, r4, r1, r3 + 802fa86: 00c3 lsls r3, r0, #3 + 802fa88: b2db uxtb r3, r3 + 802fa8a: b2a4 uxth r4, r4 + 802fa8c: fb13 f307 smulbb r3, r3, r7 + 802fa90: fb02 3101 mla r1, r2, r1, r3 + 802fa94: 1c6b adds r3, r5, #1 + 802fa96: 1c62 adds r2, r4, #1 + 802fa98: b289 uxth r1, r1 + 802fa9a: eb03 2515 add.w r5, r3, r5, lsr #8 + 802fa9e: 1c4b adds r3, r1, #1 + 802faa0: eb02 2414 add.w r4, r2, r4, lsr #8 + 802faa4: f405 4578 and.w r5, r5, #63488 ; 0xf800 + 802faa8: 9a03 ldr r2, [sp, #12] + 802faaa: eb03 2311 add.w r3, r3, r1, lsr #8 + 802faae: 0964 lsrs r4, r4, #5 + 802fab0: f3c3 23c4 ubfx r3, r3, #11, #5 + 802fab4: f404 64fc and.w r4, r4, #2016 ; 0x7e0 + 802fab8: 432b orrs r3, r5 + 802faba: 4323 orrs r3, r4 + 802fabc: 8013 strh r3, [r2, #0] + 802fabe: b005 add sp, #20 + 802fac0: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 802fac4: f04f 0c00 mov.w ip, #0 + 802fac8: 4664 mov r4, ip + 802faca: e6d6 b.n 802f87a <_ZNK8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtPKhssiihhh+0x7e> + 802facc: 2300 movs r3, #0 + 802face: 469c mov ip, r3 + 802fad0: 461a mov r2, r3 + 802fad2: 461c mov r4, r3 + 802fad4: e6f8 b.n 802f8c8 <_ZNK8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtPKhssiihhh+0xcc> + 802fad6: 2300 movs r3, #0 + 802fad8: 461a mov r2, r3 + 802fada: e6f5 b.n 802f8c8 <_ZNK8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtPKhssiihhh+0xcc> + 802fadc: 460b mov r3, r1 + 802fade: 460a mov r2, r1 + 802fae0: e6f2 b.n 802f8c8 <_ZNK8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtPKhssiihhh+0xcc> + 802fae2: 2500 movs r5, #0 + 802fae4: 46ab mov fp, r5 + 802fae6: e720 b.n 802f92a <_ZNK8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtPKhssiihhh+0x12e> + 802fae8: 2700 movs r7, #0 + 802faea: 463d mov r5, r7 + 802faec: 4638 mov r0, r7 + 802faee: 46bb mov fp, r7 + 802faf0: e745 b.n 802f97e <_ZNK8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtPKhssiihhh+0x182> + 802faf2: 4677 mov r7, lr + 802faf4: 4675 mov r5, lr + 802faf6: 4670 mov r0, lr + 802faf8: 46f3 mov fp, lr + 802fafa: e740 b.n 802f97e <_ZNK8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtPKhssiihhh+0x182> + 802fafc: 2700 movs r7, #0 + 802fafe: 4638 mov r0, r7 + 802fb00: e73d b.n 802f97e <_ZNK8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtPKhssiihhh+0x182> + 802fb02: 460f mov r7, r1 + 802fb04: 4608 mov r0, r1 + 802fb06: e73a b.n 802f97e <_ZNK8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtPKhssiihhh+0x182> + +0802fb08 <_ZN8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff>: + 802fb08: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 802fb0c: b097 sub sp, #92 ; 0x5c + 802fb0e: 9214 str r2, [sp, #80] ; 0x50 + 802fb10: 9308 str r3, [sp, #32] + 802fb12: 9a25 ldr r2, [sp, #148] ; 0x94 + 802fb14: f89d 30a4 ldrb.w r3, [sp, #164] ; 0xa4 + 802fb18: 9015 str r0, [sp, #84] ; 0x54 + 802fb1a: 9312 str r3, [sp, #72] ; 0x48 + 802fb1c: 6850 ldr r0, [r2, #4] + 802fb1e: 9111 str r1, [sp, #68] ; 0x44 + 802fb20: 6812 ldr r2, [r2, #0] + 802fb22: e9dd 1326 ldrd r1, r3, [sp, #152] ; 0x98 + 802fb26: fb00 1303 mla r3, r0, r3, r1 + 802fb2a: eb02 0343 add.w r3, r2, r3, lsl #1 + 802fb2e: 9309 str r3, [sp, #36] ; 0x24 + 802fb30: 9b28 ldr r3, [sp, #160] ; 0xa0 + 802fb32: 681b ldr r3, [r3, #0] + 802fb34: 930b str r3, [sp, #44] ; 0x2c + 802fb36: 9b28 ldr r3, [sp, #160] ; 0xa0 + 802fb38: 685b ldr r3, [r3, #4] + 802fb3a: 930c str r3, [sp, #48] ; 0x30 + 802fb3c: f8bd 3048 ldrh.w r3, [sp, #72] ; 0x48 + 802fb40: 930a str r3, [sp, #40] ; 0x28 + 802fb42: 9b11 ldr r3, [sp, #68] ; 0x44 + 802fb44: 2b00 cmp r3, #0 + 802fb46: dc03 bgt.n 802fb50 <_ZN8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x48> + 802fb48: 9b14 ldr r3, [sp, #80] ; 0x50 + 802fb4a: 2b00 cmp r3, #0 + 802fb4c: f340 83cd ble.w 80302ea <_ZN8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x7e2> + 802fb50: 9b28 ldr r3, [sp, #160] ; 0xa0 + 802fb52: f9b3 1008 ldrsh.w r1, [r3, #8] + 802fb56: f9b3 200c ldrsh.w r2, [r3, #12] + 802fb5a: 1e48 subs r0, r1, #1 + 802fb5c: 1e55 subs r5, r2, #1 + 802fb5e: 9b08 ldr r3, [sp, #32] + 802fb60: 2b00 cmp r3, #0 + 802fb62: f340 81a5 ble.w 802feb0 <_ZN8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x3a8> + 802fb66: 9e21 ldr r6, [sp, #132] ; 0x84 + 802fb68: 9b22 ldr r3, [sp, #136] ; 0x88 + 802fb6a: 1436 asrs r6, r6, #16 + 802fb6c: ea4f 4323 mov.w r3, r3, asr #16 + 802fb70: d406 bmi.n 802fb80 <_ZN8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x78> + 802fb72: 4286 cmp r6, r0 + 802fb74: da04 bge.n 802fb80 <_ZN8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x78> + 802fb76: 2b00 cmp r3, #0 + 802fb78: db02 blt.n 802fb80 <_ZN8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x78> + 802fb7a: 42ab cmp r3, r5 + 802fb7c: f2c0 8199 blt.w 802feb2 <_ZN8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x3aa> + 802fb80: 3601 adds r6, #1 + 802fb82: f100 8186 bmi.w 802fe92 <_ZN8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x38a> + 802fb86: 42b1 cmp r1, r6 + 802fb88: f2c0 8183 blt.w 802fe92 <_ZN8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x38a> + 802fb8c: 3301 adds r3, #1 + 802fb8e: f100 8180 bmi.w 802fe92 <_ZN8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x38a> + 802fb92: 429a cmp r2, r3 + 802fb94: f2c0 817d blt.w 802fe92 <_ZN8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x38a> + 802fb98: 9b08 ldr r3, [sp, #32] + 802fb9a: f64f 061f movw r6, #63519 ; 0xf81f + 802fb9e: 9f09 ldr r7, [sp, #36] ; 0x24 + 802fba0: 9313 str r3, [sp, #76] ; 0x4c + 802fba2: 9b13 ldr r3, [sp, #76] ; 0x4c + 802fba4: 2b00 cmp r3, #0 + 802fba6: f340 81a6 ble.w 802fef6 <_ZN8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x3ee> + 802fbaa: 9b22 ldr r3, [sp, #136] ; 0x88 + 802fbac: 9d21 ldr r5, [sp, #132] ; 0x84 + 802fbae: 1418 asrs r0, r3, #16 + 802fbb0: 9b21 ldr r3, [sp, #132] ; 0x84 + 802fbb2: 142d asrs r5, r5, #16 + 802fbb4: f3c3 3103 ubfx r1, r3, #12, #4 + 802fbb8: 9b22 ldr r3, [sp, #136] ; 0x88 + 802fbba: f3c3 3c03 ubfx ip, r3, #12, #4 + 802fbbe: 9b28 ldr r3, [sp, #160] ; 0xa0 + 802fbc0: e9d3 2302 ldrd r2, r3, [r3, #8] + 802fbc4: f100 81fa bmi.w 802ffbc <_ZN8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x4b4> + 802fbc8: f102 3eff add.w lr, r2, #4294967295 + 802fbcc: 4575 cmp r5, lr + 802fbce: f280 81f5 bge.w 802ffbc <_ZN8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x4b4> + 802fbd2: 2800 cmp r0, #0 + 802fbd4: f2c0 81f2 blt.w 802ffbc <_ZN8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x4b4> + 802fbd8: f103 3eff add.w lr, r3, #4294967295 + 802fbdc: 4570 cmp r0, lr + 802fbde: f280 81ed bge.w 802ffbc <_ZN8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x4b4> + 802fbe2: b212 sxth r2, r2 + 802fbe4: 9b0c ldr r3, [sp, #48] ; 0x30 + 802fbe6: fa1f fe81 uxth.w lr, r1 + 802fbea: fb00 5002 mla r0, r0, r2, r5 + 802fbee: ea4f 150e mov.w r5, lr, lsl #4 + 802fbf2: eb03 0a00 add.w sl, r3, r0 + 802fbf6: f813 9000 ldrb.w r9, [r3, r0] + 802fbfa: f5c5 7380 rsb r3, r5, #256 ; 0x100 + 802fbfe: f89a 8001 ldrb.w r8, [sl, #1] + 802fc02: b29b uxth r3, r3 + 802fc04: f1bc 0f00 cmp.w ip, #0 + 802fc08: f000 81bb beq.w 802ff82 <_ZN8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x47a> + 802fc0c: f81a 4002 ldrb.w r4, [sl, r2] + 802fc10: eb0a 0b02 add.w fp, sl, r2 + 802fc14: fa1f fa8c uxth.w sl, ip + 802fc18: 940d str r4, [sp, #52] ; 0x34 + 802fc1a: fb0a fe0e mul.w lr, sl, lr + 802fc1e: f89b 4001 ldrb.w r4, [fp, #1] + 802fc22: ebce 1a0a rsb sl, lr, sl, lsl #4 + 802fc26: eba5 050e sub.w r5, r5, lr + 802fc2a: 940e str r4, [sp, #56] ; 0x38 + 802fc2c: fa1f fa8a uxth.w sl, sl + 802fc30: 9c0d ldr r4, [sp, #52] ; 0x34 + 802fc32: b2ad uxth r5, r5 + 802fc34: eba3 030a sub.w r3, r3, sl + 802fc38: fb08 f505 mul.w r5, r8, r5 + 802fc3c: b29b uxth r3, r3 + 802fc3e: fb09 5303 mla r3, r9, r3, r5 + 802fc42: fb0a 3304 mla r3, sl, r4, r3 + 802fc46: 9c0e ldr r4, [sp, #56] ; 0x38 + 802fc48: fb0e 3304 mla r3, lr, r4, r3 + 802fc4c: f3c3 2307 ubfx r3, r3, #8, #8 + 802fc50: 2b00 cmp r3, #0 + 802fc52: f000 8111 beq.w 802fe78 <_ZN8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x370> + 802fc56: 9c0b ldr r4, [sp, #44] ; 0x2c + 802fc58: f1b9 0fff cmp.w r9, #255 ; 0xff + 802fc5c: eb04 0540 add.w r5, r4, r0, lsl #1 + 802fc60: f834 0010 ldrh.w r0, [r4, r0, lsl #1] + 802fc64: f000 8192 beq.w 802ff8c <_ZN8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x484> + 802fc68: f420 6efc bic.w lr, r0, #2016 ; 0x7e0 + 802fc6c: ea4f 0ae9 mov.w sl, r9, asr #3 + 802fc70: f400 60fc and.w r0, r0, #2016 ; 0x7e0 + 802fc74: fb0a fe0e mul.w lr, sl, lr + 802fc78: fb09 f000 mul.w r0, r9, r0 + 802fc7c: ea06 195e and.w r9, r6, lr, lsr #5 + 802fc80: f60e 0e01 addw lr, lr, #2049 ; 0x801 + 802fc84: f100 0b20 add.w fp, r0, #32 + 802fc88: 44ce add lr, r9 + 802fc8a: eb0b 2910 add.w r9, fp, r0, lsr #8 + 802fc8e: ea06 1e5e and.w lr, r6, lr, lsr #5 + 802fc92: ea4f 2919 mov.w r9, r9, lsr #8 + 802fc96: f409 69fc and.w r9, r9, #2016 ; 0x7e0 + 802fc9a: ea4e 0909 orr.w r9, lr, r9 + 802fc9e: f1b8 0fff cmp.w r8, #255 ; 0xff + 802fca2: 8868 ldrh r0, [r5, #2] + 802fca4: d019 beq.n 802fcda <_ZN8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1d2> + 802fca6: f420 6efc bic.w lr, r0, #2016 ; 0x7e0 + 802fcaa: ea4f 0ae8 mov.w sl, r8, asr #3 + 802fcae: f400 60fc and.w r0, r0, #2016 ; 0x7e0 + 802fcb2: fb0a fe0e mul.w lr, sl, lr + 802fcb6: fb08 f800 mul.w r8, r8, r0 + 802fcba: ea06 105e and.w r0, r6, lr, lsr #5 + 802fcbe: f60e 0e01 addw lr, lr, #2049 ; 0x801 + 802fcc2: f108 0b20 add.w fp, r8, #32 + 802fcc6: 4486 add lr, r0 + 802fcc8: eb0b 2018 add.w r0, fp, r8, lsr #8 + 802fccc: ea06 1e5e and.w lr, r6, lr, lsr #5 + 802fcd0: 0a00 lsrs r0, r0, #8 + 802fcd2: f400 60fc and.w r0, r0, #2016 ; 0x7e0 + 802fcd6: ea4e 0000 orr.w r0, lr, r0 + 802fcda: ea4f 4e09 mov.w lr, r9, lsl #16 + 802fcde: f429 69fc bic.w r9, r9, #2016 ; 0x7e0 + 802fce2: ea4f 4a00 mov.w sl, r0, lsl #16 + 802fce6: f420 60fc bic.w r0, r0, #2016 ; 0x7e0 + 802fcea: f00e 6efc and.w lr, lr, #132120576 ; 0x7e00000 + 802fcee: f00a 6afc and.w sl, sl, #132120576 ; 0x7e00000 + 802fcf2: ea4e 0909 orr.w r9, lr, r9 + 802fcf6: ea4a 0000 orr.w r0, sl, r0 + 802fcfa: f1bc 0f00 cmp.w ip, #0 + 802fcfe: f000 8147 beq.w 802ff90 <_ZN8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x488> + 802fd02: f102 4200 add.w r2, r2, #2147483648 ; 0x80000000 + 802fd06: 9c0d ldr r4, [sp, #52] ; 0x34 + 802fd08: 3a01 subs r2, #1 + 802fd0a: 2cff cmp r4, #255 ; 0xff + 802fd0c: ea4f 0242 mov.w r2, r2, lsl #1 + 802fd10: f102 0202 add.w r2, r2, #2 + 802fd14: eb05 0e02 add.w lr, r5, r2 + 802fd18: 5aaa ldrh r2, [r5, r2] + 802fd1a: d018 beq.n 802fd4e <_ZN8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x246> + 802fd1c: f422 65fc bic.w r5, r2, #2016 ; 0x7e0 + 802fd20: f402 62fc and.w r2, r2, #2016 ; 0x7e0 + 802fd24: ea4f 08e4 mov.w r8, r4, asr #3 + 802fd28: fb04 fa02 mul.w sl, r4, r2 + 802fd2c: fb08 f805 mul.w r8, r8, r5 + 802fd30: f10a 0520 add.w r5, sl, #32 + 802fd34: ea06 1258 and.w r2, r6, r8, lsr #5 + 802fd38: f608 0801 addw r8, r8, #2049 ; 0x801 + 802fd3c: eb05 251a add.w r5, r5, sl, lsr #8 + 802fd40: 4442 add r2, r8 + 802fd42: 0a2d lsrs r5, r5, #8 + 802fd44: ea06 1252 and.w r2, r6, r2, lsr #5 + 802fd48: f405 65fc and.w r5, r5, #2016 ; 0x7e0 + 802fd4c: 432a orrs r2, r5 + 802fd4e: 9c0e ldr r4, [sp, #56] ; 0x38 + 802fd50: f8be 5002 ldrh.w r5, [lr, #2] + 802fd54: 2cff cmp r4, #255 ; 0xff + 802fd56: d01a beq.n 802fd8e <_ZN8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x286> + 802fd58: f425 6efc bic.w lr, r5, #2016 ; 0x7e0 + 802fd5c: f405 65fc and.w r5, r5, #2016 ; 0x7e0 + 802fd60: ea4f 08e4 mov.w r8, r4, asr #3 + 802fd64: fb04 fa05 mul.w sl, r4, r5 + 802fd68: fb08 f80e mul.w r8, r8, lr + 802fd6c: f10a 0e20 add.w lr, sl, #32 + 802fd70: ea06 1558 and.w r5, r6, r8, lsr #5 + 802fd74: f608 0801 addw r8, r8, #2049 ; 0x801 + 802fd78: eb0e 2e1a add.w lr, lr, sl, lsr #8 + 802fd7c: 4445 add r5, r8 + 802fd7e: ea4f 2e1e mov.w lr, lr, lsr #8 + 802fd82: ea06 1555 and.w r5, r6, r5, lsr #5 + 802fd86: f40e 6efc and.w lr, lr, #2016 ; 0x7e0 + 802fd8a: ea45 050e orr.w r5, r5, lr + 802fd8e: fb1c fe01 smulbb lr, ip, r1 + 802fd92: f1cc 0810 rsb r8, ip, #16 + 802fd96: ea4f 4a02 mov.w sl, r2, lsl #16 + 802fd9a: f422 62fc bic.w r2, r2, #2016 ; 0x7e0 + 802fd9e: ea4f 0eee mov.w lr, lr, asr #3 + 802fda2: eba8 0801 sub.w r8, r8, r1 + 802fda6: ea4f 4b05 mov.w fp, r5, lsl #16 + 802fdaa: f00a 6afc and.w sl, sl, #132120576 ; 0x7e00000 + 802fdae: ebce 0141 rsb r1, lr, r1, lsl #1 + 802fdb2: f425 65fc bic.w r5, r5, #2016 ; 0x7e0 + 802fdb6: eb0e 0848 add.w r8, lr, r8, lsl #1 + 802fdba: ea4a 0202 orr.w r2, sl, r2 + 802fdbe: 4341 muls r1, r0 + 802fdc0: ebce 0c4c rsb ip, lr, ip, lsl #1 + 802fdc4: f00b 6bfc and.w fp, fp, #132120576 ; 0x7e00000 + 802fdc8: fb09 1108 mla r1, r9, r8, r1 + 802fdcc: ea4b 0505 orr.w r5, fp, r5 + 802fdd0: fb0c 1102 mla r1, ip, r2, r1 + 802fdd4: fb0e 1e05 mla lr, lr, r5, r1 + 802fdd8: ea4f 525e mov.w r2, lr, lsr #21 + 802fddc: ea4f 1e5e mov.w lr, lr, lsr #5 + 802fde0: f402 62fc and.w r2, r2, #2016 ; 0x7e0 + 802fde4: f42e 6efc bic.w lr, lr, #2016 ; 0x7e0 + 802fde8: ea42 0e0e orr.w lr, r2, lr + 802fdec: fa1f f28e uxth.w r2, lr + 802fdf0: 2bff cmp r3, #255 ; 0xff + 802fdf2: d103 bne.n 802fdfc <_ZN8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x2f4> + 802fdf4: 9912 ldr r1, [sp, #72] ; 0x48 + 802fdf6: 29ff cmp r1, #255 ; 0xff + 802fdf8: f000 80de beq.w 802ffb8 <_ZN8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x4b0> + 802fdfc: 990a ldr r1, [sp, #40] ; 0x28 + 802fdfe: 1215 asrs r5, r2, #8 + 802fe00: 8838 ldrh r0, [r7, #0] + 802fe02: 434b muls r3, r1 + 802fe04: f005 05f8 and.w r5, r5, #248 ; 0xf8 + 802fe08: 9c0a ldr r4, [sp, #40] ; 0x28 + 802fe0a: f103 0c01 add.w ip, r3, #1 + 802fe0e: eb0c 2323 add.w r3, ip, r3, asr #8 + 802fe12: ea6f 2323 mvn.w r3, r3, asr #8 + 802fe16: fa5f fc83 uxtb.w ip, r3 + 802fe1a: 1203 asrs r3, r0, #8 + 802fe1c: f003 03f8 and.w r3, r3, #248 ; 0xf8 + 802fe20: fb13 f30c smulbb r3, r3, ip + 802fe24: fb05 3501 mla r5, r5, r1, r3 + 802fe28: 10c3 asrs r3, r0, #3 + 802fe2a: 10d1 asrs r1, r2, #3 + 802fe2c: f003 03fc and.w r3, r3, #252 ; 0xfc + 802fe30: 00d2 lsls r2, r2, #3 + 802fe32: f001 01fc and.w r1, r1, #252 ; 0xfc + 802fe36: b2ad uxth r5, r5 + 802fe38: fb13 f30c smulbb r3, r3, ip + 802fe3c: b2d2 uxtb r2, r2 + 802fe3e: fb01 3104 mla r1, r1, r4, r3 + 802fe42: 00c3 lsls r3, r0, #3 + 802fe44: b2db uxtb r3, r3 + 802fe46: b289 uxth r1, r1 + 802fe48: fb13 f30c smulbb r3, r3, ip + 802fe4c: fb02 3304 mla r3, r2, r4, r3 + 802fe50: b29a uxth r2, r3 + 802fe52: 1c6b adds r3, r5, #1 + 802fe54: eb03 2515 add.w r5, r3, r5, lsr #8 + 802fe58: 1c53 adds r3, r2, #1 + 802fe5a: eb03 2312 add.w r3, r3, r2, lsr #8 + 802fe5e: 1c4a adds r2, r1, #1 + 802fe60: f405 4578 and.w r5, r5, #63488 ; 0xf800 + 802fe64: eb02 2111 add.w r1, r2, r1, lsr #8 + 802fe68: f3c3 23c4 ubfx r3, r3, #11, #5 + 802fe6c: 0949 lsrs r1, r1, #5 + 802fe6e: 432b orrs r3, r5 + 802fe70: f401 61fc and.w r1, r1, #2016 ; 0x7e0 + 802fe74: 430b orrs r3, r1 + 802fe76: 803b strh r3, [r7, #0] + 802fe78: 9b21 ldr r3, [sp, #132] ; 0x84 + 802fe7a: 3702 adds r7, #2 + 802fe7c: 9a23 ldr r2, [sp, #140] ; 0x8c + 802fe7e: 4413 add r3, r2 + 802fe80: 9a22 ldr r2, [sp, #136] ; 0x88 + 802fe82: 9321 str r3, [sp, #132] ; 0x84 + 802fe84: 9b24 ldr r3, [sp, #144] ; 0x90 + 802fe86: 441a add r2, r3 + 802fe88: 9b13 ldr r3, [sp, #76] ; 0x4c + 802fe8a: 3b01 subs r3, #1 + 802fe8c: 9222 str r2, [sp, #136] ; 0x88 + 802fe8e: 9313 str r3, [sp, #76] ; 0x4c + 802fe90: e687 b.n 802fba2 <_ZN8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x9a> + 802fe92: 9b21 ldr r3, [sp, #132] ; 0x84 + 802fe94: 9e23 ldr r6, [sp, #140] ; 0x8c + 802fe96: 9c22 ldr r4, [sp, #136] ; 0x88 + 802fe98: 4433 add r3, r6 + 802fe9a: 9321 str r3, [sp, #132] ; 0x84 + 802fe9c: 9b24 ldr r3, [sp, #144] ; 0x90 + 802fe9e: 441c add r4, r3 + 802fea0: 9b08 ldr r3, [sp, #32] + 802fea2: 3b01 subs r3, #1 + 802fea4: 9422 str r4, [sp, #136] ; 0x88 + 802fea6: 9308 str r3, [sp, #32] + 802fea8: 9b09 ldr r3, [sp, #36] ; 0x24 + 802feaa: 3302 adds r3, #2 + 802feac: 9309 str r3, [sp, #36] ; 0x24 + 802feae: e656 b.n 802fb5e <_ZN8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x56> + 802feb0: d028 beq.n 802ff04 <_ZN8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x3fc> + 802feb2: 9b08 ldr r3, [sp, #32] + 802feb4: 9823 ldr r0, [sp, #140] ; 0x8c + 802feb6: 3b01 subs r3, #1 + 802feb8: 9d21 ldr r5, [sp, #132] ; 0x84 + 802feba: fb00 5003 mla r0, r0, r3, r5 + 802febe: 1400 asrs r0, r0, #16 + 802fec0: f53f ae6a bmi.w 802fb98 <_ZN8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x90> + 802fec4: 3901 subs r1, #1 + 802fec6: 4288 cmp r0, r1 + 802fec8: f6bf ae66 bge.w 802fb98 <_ZN8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x90> + 802fecc: 9924 ldr r1, [sp, #144] ; 0x90 + 802fece: 9822 ldr r0, [sp, #136] ; 0x88 + 802fed0: fb01 0303 mla r3, r1, r3, r0 + 802fed4: 141b asrs r3, r3, #16 + 802fed6: f53f ae5f bmi.w 802fb98 <_ZN8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x90> + 802feda: 3a01 subs r2, #1 + 802fedc: 4293 cmp r3, r2 + 802fede: f6bf ae5b bge.w 802fb98 <_ZN8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x90> + 802fee2: 9b08 ldr r3, [sp, #32] + 802fee4: f64f 061f movw r6, #63519 ; 0xf81f + 802fee8: f8dd e024 ldr.w lr, [sp, #36] ; 0x24 + 802feec: 9313 str r3, [sp, #76] ; 0x4c + 802feee: 9b13 ldr r3, [sp, #76] ; 0x4c + 802fef0: 2b00 cmp r3, #0 + 802fef2: f300 8082 bgt.w 802fffa <_ZN8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x4f2> + 802fef6: 9b08 ldr r3, [sp, #32] + 802fef8: ea23 74e3 bic.w r4, r3, r3, asr #31 + 802fefc: 9b09 ldr r3, [sp, #36] ; 0x24 + 802fefe: eb03 0344 add.w r3, r3, r4, lsl #1 + 802ff02: 9309 str r3, [sp, #36] ; 0x24 + 802ff04: 9b11 ldr r3, [sp, #68] ; 0x44 + 802ff06: 2b00 cmp r3, #0 + 802ff08: f340 81ef ble.w 80302ea <_ZN8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x7e2> + 802ff0c: eeb7 7a00 vmov.f32 s14, #112 ; 0x3f800000 1.0 + 802ff10: 9b20 ldr r3, [sp, #128] ; 0x80 + 802ff12: ee30 0a04 vadd.f32 s0, s0, s8 + 802ff16: ee70 0aa4 vadd.f32 s1, s1, s9 + 802ff1a: eef0 6a62 vmov.f32 s13, s5 + 802ff1e: eec7 7a00 vdiv.f32 s15, s14, s0 + 802ff22: ee31 1a05 vadd.f32 s2, s2, s10 + 802ff26: eefe 6ac8 vcvt.s32.f32 s13, s13, #16 + 802ff2a: edcd 6a21 vstr s13, [sp, #132] ; 0x84 + 802ff2e: eef0 6a43 vmov.f32 s13, s6 + 802ff32: eefe 6ac8 vcvt.s32.f32 s13, s13, #16 + 802ff36: edcd 6a22 vstr s13, [sp, #136] ; 0x88 + 802ff3a: ee20 7aa7 vmul.f32 s14, s1, s15 + 802ff3e: ee61 7a27 vmul.f32 s15, s2, s15 + 802ff42: ee77 2a62 vsub.f32 s5, s14, s5 + 802ff46: ee37 3ac3 vsub.f32 s6, s15, s6 + 802ff4a: eefe 2ac8 vcvt.s32.f32 s5, s5, #16 + 802ff4e: eebe 3ac8 vcvt.s32.f32 s6, s6, #16 + 802ff52: ee12 2a90 vmov r2, s5 + 802ff56: eef0 2a47 vmov.f32 s5, s14 + 802ff5a: fb92 f3f3 sdiv r3, r2, r3 + 802ff5e: ee13 2a10 vmov r2, s6 + 802ff62: 9323 str r3, [sp, #140] ; 0x8c + 802ff64: 9b20 ldr r3, [sp, #128] ; 0x80 + 802ff66: eeb0 3a67 vmov.f32 s6, s15 + 802ff6a: fb92 f3f3 sdiv r3, r2, r3 + 802ff6e: 9324 str r3, [sp, #144] ; 0x90 + 802ff70: 9b11 ldr r3, [sp, #68] ; 0x44 + 802ff72: 9a14 ldr r2, [sp, #80] ; 0x50 + 802ff74: 3b01 subs r3, #1 + 802ff76: 9311 str r3, [sp, #68] ; 0x44 + 802ff78: 9b20 ldr r3, [sp, #128] ; 0x80 + 802ff7a: bf08 it eq + 802ff7c: 4613 moveq r3, r2 + 802ff7e: 9308 str r3, [sp, #32] + 802ff80: e5df b.n 802fb42 <_ZN8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x3a> + 802ff82: fb08 f505 mul.w r5, r8, r5 + 802ff86: fb09 5303 mla r3, r9, r3, r5 + 802ff8a: e65f b.n 802fc4c <_ZN8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x144> + 802ff8c: 4681 mov r9, r0 + 802ff8e: e686 b.n 802fc9e <_ZN8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x196> + 802ff90: f1c1 0210 rsb r2, r1, #16 + 802ff94: 4341 muls r1, r0 + 802ff96: fb09 1902 mla r9, r9, r2, r1 + 802ff9a: ea4f 0949 mov.w r9, r9, lsl #1 + 802ff9e: ea4f 5259 mov.w r2, r9, lsr #21 + 802ffa2: ea4f 1959 mov.w r9, r9, lsr #5 + 802ffa6: f402 62fc and.w r2, r2, #2016 ; 0x7e0 + 802ffaa: f429 69fc bic.w r9, r9, #2016 ; 0x7e0 + 802ffae: ea42 0909 orr.w r9, r2, r9 + 802ffb2: fa1f f289 uxth.w r2, r9 + 802ffb6: e71b b.n 802fdf0 <_ZN8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x2e8> + 802ffb8: 803a strh r2, [r7, #0] + 802ffba: e75d b.n 802fe78 <_ZN8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x370> + 802ffbc: f115 0e01 adds.w lr, r5, #1 + 802ffc0: f53f af5a bmi.w 802fe78 <_ZN8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x370> + 802ffc4: 4572 cmp r2, lr + 802ffc6: f6ff af57 blt.w 802fe78 <_ZN8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x370> + 802ffca: f110 0e01 adds.w lr, r0, #1 + 802ffce: f53f af53 bmi.w 802fe78 <_ZN8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x370> + 802ffd2: 4573 cmp r3, lr + 802ffd4: f6ff af50 blt.w 802fe78 <_ZN8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x370> + 802ffd8: 9c12 ldr r4, [sp, #72] ; 0x48 + 802ffda: b21b sxth r3, r3 + 802ffdc: b212 sxth r2, r2 + 802ffde: 9502 str r5, [sp, #8] + 802ffe0: 9301 str r3, [sp, #4] + 802ffe2: 9200 str r2, [sp, #0] + 802ffe4: e9cd 0103 strd r0, r1, [sp, #12] + 802ffe8: e9cd c405 strd ip, r4, [sp, #20] + 802ffec: e9dd 230b ldrd r2, r3, [sp, #44] ; 0x2c + 802fff0: 4639 mov r1, r7 + 802fff2: 9815 ldr r0, [sp, #84] ; 0x54 + 802fff4: f7ff fc02 bl 802f7fc <_ZNK8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtPKhssiihhh> + 802fff8: e73e b.n 802fe78 <_ZN8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x370> + 802fffa: 9b21 ldr r3, [sp, #132] ; 0x84 + 802fffc: f3c3 3203 ubfx r2, r3, #12, #4 + 8030000: 9b22 ldr r3, [sp, #136] ; 0x88 + 8030002: f3c3 3503 ubfx r5, r3, #12, #4 + 8030006: 9b28 ldr r3, [sp, #160] ; 0xa0 + 8030008: fa1f fc82 uxth.w ip, r2 + 803000c: f9b3 1008 ldrsh.w r1, [r3, #8] + 8030010: 9b22 ldr r3, [sp, #136] ; 0x88 + 8030012: ea4f 100c mov.w r0, ip, lsl #4 + 8030016: 141f asrs r7, r3, #16 + 8030018: 9b21 ldr r3, [sp, #132] ; 0x84 + 803001a: 141b asrs r3, r3, #16 + 803001c: fb01 3707 mla r7, r1, r7, r3 + 8030020: 9b0c ldr r3, [sp, #48] ; 0x30 + 8030022: eb03 0a07 add.w sl, r3, r7 + 8030026: f813 9007 ldrb.w r9, [r3, r7] + 803002a: f5c0 7380 rsb r3, r0, #256 ; 0x100 + 803002e: f89a 8001 ldrb.w r8, [sl, #1] + 8030032: b29b uxth r3, r3 + 8030034: 2d00 cmp r5, #0 + 8030036: f000 813d beq.w 80302b4 <_ZN8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x7ac> + 803003a: f81a 4001 ldrb.w r4, [sl, r1] + 803003e: eb0a 0b01 add.w fp, sl, r1 + 8030042: fa1f fa85 uxth.w sl, r5 + 8030046: 940f str r4, [sp, #60] ; 0x3c + 8030048: fb0a fc0c mul.w ip, sl, ip + 803004c: f89b 4001 ldrb.w r4, [fp, #1] + 8030050: ebcc 1a0a rsb sl, ip, sl, lsl #4 + 8030054: eba0 000c sub.w r0, r0, ip + 8030058: 9410 str r4, [sp, #64] ; 0x40 + 803005a: fa1f fa8a uxth.w sl, sl + 803005e: b280 uxth r0, r0 + 8030060: eba3 030a sub.w r3, r3, sl + 8030064: fb08 f000 mul.w r0, r8, r0 + 8030068: b29b uxth r3, r3 + 803006a: fb09 0303 mla r3, r9, r3, r0 + 803006e: 980f ldr r0, [sp, #60] ; 0x3c + 8030070: fb0a 3300 mla r3, sl, r0, r3 + 8030074: fb0c 3304 mla r3, ip, r4, r3 + 8030078: f3c3 2307 ubfx r3, r3, #8, #8 + 803007c: 2b00 cmp r3, #0 + 803007e: f000 810b beq.w 8030298 <_ZN8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x790> + 8030082: 980b ldr r0, [sp, #44] ; 0x2c + 8030084: f1b9 0fff cmp.w r9, #255 ; 0xff + 8030088: 9c0b ldr r4, [sp, #44] ; 0x2c + 803008a: eb00 0047 add.w r0, r0, r7, lsl #1 + 803008e: f834 7017 ldrh.w r7, [r4, r7, lsl #1] + 8030092: f000 8114 beq.w 80302be <_ZN8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x7b6> + 8030096: f427 6cfc bic.w ip, r7, #2016 ; 0x7e0 + 803009a: ea4f 0ae9 mov.w sl, r9, asr #3 + 803009e: f407 67fc and.w r7, r7, #2016 ; 0x7e0 + 80300a2: fb0a fc0c mul.w ip, sl, ip + 80300a6: fb09 f707 mul.w r7, r9, r7 + 80300aa: ea06 195c and.w r9, r6, ip, lsr #5 + 80300ae: f60c 0c01 addw ip, ip, #2049 ; 0x801 + 80300b2: f107 0b20 add.w fp, r7, #32 + 80300b6: 44cc add ip, r9 + 80300b8: eb0b 2917 add.w r9, fp, r7, lsr #8 + 80300bc: ea06 1c5c and.w ip, r6, ip, lsr #5 + 80300c0: ea4f 2919 mov.w r9, r9, lsr #8 + 80300c4: f409 69fc and.w r9, r9, #2016 ; 0x7e0 + 80300c8: ea4c 0909 orr.w r9, ip, r9 + 80300cc: f1b8 0fff cmp.w r8, #255 ; 0xff + 80300d0: 8847 ldrh r7, [r0, #2] + 80300d2: d019 beq.n 8030108 <_ZN8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x600> + 80300d4: f427 6cfc bic.w ip, r7, #2016 ; 0x7e0 + 80300d8: ea4f 0ae8 mov.w sl, r8, asr #3 + 80300dc: f407 67fc and.w r7, r7, #2016 ; 0x7e0 + 80300e0: fb0a fc0c mul.w ip, sl, ip + 80300e4: fb08 f807 mul.w r8, r8, r7 + 80300e8: ea06 175c and.w r7, r6, ip, lsr #5 + 80300ec: f60c 0c01 addw ip, ip, #2049 ; 0x801 + 80300f0: f108 0b20 add.w fp, r8, #32 + 80300f4: 44bc add ip, r7 + 80300f6: eb0b 2718 add.w r7, fp, r8, lsr #8 + 80300fa: ea06 1c5c and.w ip, r6, ip, lsr #5 + 80300fe: 0a3f lsrs r7, r7, #8 + 8030100: f407 67fc and.w r7, r7, #2016 ; 0x7e0 + 8030104: ea4c 0707 orr.w r7, ip, r7 + 8030108: ea4f 4c09 mov.w ip, r9, lsl #16 + 803010c: f429 69fc bic.w r9, r9, #2016 ; 0x7e0 + 8030110: ea4f 4a07 mov.w sl, r7, lsl #16 + 8030114: f427 67fc bic.w r7, r7, #2016 ; 0x7e0 + 8030118: f00c 6cfc and.w ip, ip, #132120576 ; 0x7e00000 + 803011c: f00a 6afc and.w sl, sl, #132120576 ; 0x7e00000 + 8030120: ea4c 0909 orr.w r9, ip, r9 + 8030124: ea4a 0707 orr.w r7, sl, r7 + 8030128: 2d00 cmp r5, #0 + 803012a: f000 80ca beq.w 80302c2 <_ZN8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x7ba> + 803012e: f101 4100 add.w r1, r1, #2147483648 ; 0x80000000 + 8030132: 3901 subs r1, #1 + 8030134: 0049 lsls r1, r1, #1 + 8030136: 3102 adds r1, #2 + 8030138: eb00 0c01 add.w ip, r0, r1 + 803013c: 5a41 ldrh r1, [r0, r1] + 803013e: 980f ldr r0, [sp, #60] ; 0x3c + 8030140: 28ff cmp r0, #255 ; 0xff + 8030142: d019 beq.n 8030178 <_ZN8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x670> + 8030144: f421 60fc bic.w r0, r1, #2016 ; 0x7e0 + 8030148: 9c0f ldr r4, [sp, #60] ; 0x3c + 803014a: f401 61fc and.w r1, r1, #2016 ; 0x7e0 + 803014e: ea4f 08e4 mov.w r8, r4, asr #3 + 8030152: fb04 fa01 mul.w sl, r4, r1 + 8030156: fb08 f800 mul.w r8, r8, r0 + 803015a: f10a 0020 add.w r0, sl, #32 + 803015e: ea06 1158 and.w r1, r6, r8, lsr #5 + 8030162: f608 0801 addw r8, r8, #2049 ; 0x801 + 8030166: eb00 201a add.w r0, r0, sl, lsr #8 + 803016a: 4441 add r1, r8 + 803016c: 0a00 lsrs r0, r0, #8 + 803016e: ea06 1151 and.w r1, r6, r1, lsr #5 + 8030172: f400 60fc and.w r0, r0, #2016 ; 0x7e0 + 8030176: 4301 orrs r1, r0 + 8030178: 9c10 ldr r4, [sp, #64] ; 0x40 + 803017a: f8bc 0002 ldrh.w r0, [ip, #2] + 803017e: 2cff cmp r4, #255 ; 0xff + 8030180: d01a beq.n 80301b8 <_ZN8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x6b0> + 8030182: f420 6cfc bic.w ip, r0, #2016 ; 0x7e0 + 8030186: f400 60fc and.w r0, r0, #2016 ; 0x7e0 + 803018a: ea4f 08e4 mov.w r8, r4, asr #3 + 803018e: fb04 fa00 mul.w sl, r4, r0 + 8030192: fb08 f80c mul.w r8, r8, ip + 8030196: f10a 0c20 add.w ip, sl, #32 + 803019a: ea06 1058 and.w r0, r6, r8, lsr #5 + 803019e: f608 0801 addw r8, r8, #2049 ; 0x801 + 80301a2: eb0c 2c1a add.w ip, ip, sl, lsr #8 + 80301a6: 4440 add r0, r8 + 80301a8: ea4f 2c1c mov.w ip, ip, lsr #8 + 80301ac: ea06 1050 and.w r0, r6, r0, lsr #5 + 80301b0: f40c 6cfc and.w ip, ip, #2016 ; 0x7e0 + 80301b4: ea40 000c orr.w r0, r0, ip + 80301b8: fb15 fc02 smulbb ip, r5, r2 + 80301bc: f1c5 0810 rsb r8, r5, #16 + 80301c0: ea4f 4a01 mov.w sl, r1, lsl #16 + 80301c4: f421 61fc bic.w r1, r1, #2016 ; 0x7e0 + 80301c8: ea4f 0cec mov.w ip, ip, asr #3 + 80301cc: eba8 0802 sub.w r8, r8, r2 + 80301d0: ea4f 4b00 mov.w fp, r0, lsl #16 + 80301d4: f00a 6afc and.w sl, sl, #132120576 ; 0x7e00000 + 80301d8: ebcc 0242 rsb r2, ip, r2, lsl #1 + 80301dc: f420 60fc bic.w r0, r0, #2016 ; 0x7e0 + 80301e0: eb0c 0848 add.w r8, ip, r8, lsl #1 + 80301e4: ea4a 0101 orr.w r1, sl, r1 + 80301e8: 437a muls r2, r7 + 80301ea: ebcc 0545 rsb r5, ip, r5, lsl #1 + 80301ee: f00b 6bfc and.w fp, fp, #132120576 ; 0x7e00000 + 80301f2: fb09 2208 mla r2, r9, r8, r2 + 80301f6: ea4b 0000 orr.w r0, fp, r0 + 80301fa: fb05 2201 mla r2, r5, r1, r2 + 80301fe: fb0c 2200 mla r2, ip, r0, r2 + 8030202: 0d57 lsrs r7, r2, #21 + 8030204: 0952 lsrs r2, r2, #5 + 8030206: f407 67fc and.w r7, r7, #2016 ; 0x7e0 + 803020a: f422 62fc bic.w r2, r2, #2016 ; 0x7e0 + 803020e: 433a orrs r2, r7 + 8030210: 2bff cmp r3, #255 ; 0xff + 8030212: b292 uxth r2, r2 + 8030214: d102 bne.n 803021c <_ZN8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x714> + 8030216: 9912 ldr r1, [sp, #72] ; 0x48 + 8030218: 29ff cmp r1, #255 ; 0xff + 803021a: d063 beq.n 80302e4 <_ZN8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x7dc> + 803021c: 980a ldr r0, [sp, #40] ; 0x28 + 803021e: 1215 asrs r5, r2, #8 + 8030220: f8be 1000 ldrh.w r1, [lr] + 8030224: 4343 muls r3, r0 + 8030226: 9c0a ldr r4, [sp, #40] ; 0x28 + 8030228: 10cf asrs r7, r1, #3 + 803022a: f005 05f8 and.w r5, r5, #248 ; 0xf8 + 803022e: 1c58 adds r0, r3, #1 + 8030230: f007 07fc and.w r7, r7, #252 ; 0xfc + 8030234: eb00 2323 add.w r3, r0, r3, asr #8 + 8030238: 1208 asrs r0, r1, #8 + 803023a: ea6f 2323 mvn.w r3, r3, asr #8 + 803023e: 00c9 lsls r1, r1, #3 + 8030240: f000 00f8 and.w r0, r0, #248 ; 0xf8 + 8030244: b2db uxtb r3, r3 + 8030246: b2c9 uxtb r1, r1 + 8030248: fb10 f003 smulbb r0, r0, r3 + 803024c: fb11 f103 smulbb r1, r1, r3 + 8030250: fb05 0504 mla r5, r5, r4, r0 + 8030254: 10d0 asrs r0, r2, #3 + 8030256: fb17 f703 smulbb r7, r7, r3 + 803025a: 00d2 lsls r2, r2, #3 + 803025c: b2ad uxth r5, r5 + 803025e: f000 00fc and.w r0, r0, #252 ; 0xfc + 8030262: b2d2 uxtb r2, r2 + 8030264: fb00 7004 mla r0, r0, r4, r7 + 8030268: 1c6b adds r3, r5, #1 + 803026a: fb02 1204 mla r2, r2, r4, r1 + 803026e: eb03 2515 add.w r5, r3, r5, lsr #8 + 8030272: b292 uxth r2, r2 + 8030274: b280 uxth r0, r0 + 8030276: f405 4578 and.w r5, r5, #63488 ; 0xf800 + 803027a: 1c57 adds r7, r2, #1 + 803027c: eb07 2712 add.w r7, r7, r2, lsr #8 + 8030280: f3c7 27c4 ubfx r7, r7, #11, #5 + 8030284: 433d orrs r5, r7 + 8030286: 1c47 adds r7, r0, #1 + 8030288: eb07 2710 add.w r7, r7, r0, lsr #8 + 803028c: 097f lsrs r7, r7, #5 + 803028e: f407 67fc and.w r7, r7, #2016 ; 0x7e0 + 8030292: 433d orrs r5, r7 + 8030294: f8ae 5000 strh.w r5, [lr] + 8030298: 9b21 ldr r3, [sp, #132] ; 0x84 + 803029a: f10e 0e02 add.w lr, lr, #2 + 803029e: 9a23 ldr r2, [sp, #140] ; 0x8c + 80302a0: 4413 add r3, r2 + 80302a2: 9a22 ldr r2, [sp, #136] ; 0x88 + 80302a4: 9321 str r3, [sp, #132] ; 0x84 + 80302a6: 9b24 ldr r3, [sp, #144] ; 0x90 + 80302a8: 441a add r2, r3 + 80302aa: 9b13 ldr r3, [sp, #76] ; 0x4c + 80302ac: 3b01 subs r3, #1 + 80302ae: 9222 str r2, [sp, #136] ; 0x88 + 80302b0: 9313 str r3, [sp, #76] ; 0x4c + 80302b2: e61c b.n 802feee <_ZN8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x3e6> + 80302b4: fb08 f000 mul.w r0, r8, r0 + 80302b8: fb09 0303 mla r3, r9, r3, r0 + 80302bc: e6dc b.n 8030078 <_ZN8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x570> + 80302be: 46b9 mov r9, r7 + 80302c0: e704 b.n 80300cc <_ZN8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x5c4> + 80302c2: f1c2 0110 rsb r1, r2, #16 + 80302c6: 437a muls r2, r7 + 80302c8: fb09 2901 mla r9, r9, r1, r2 + 80302cc: ea4f 0949 mov.w r9, r9, lsl #1 + 80302d0: ea4f 5059 mov.w r0, r9, lsr #21 + 80302d4: ea4f 1259 mov.w r2, r9, lsr #5 + 80302d8: f400 60fc and.w r0, r0, #2016 ; 0x7e0 + 80302dc: f422 62fc bic.w r2, r2, #2016 ; 0x7e0 + 80302e0: 4302 orrs r2, r0 + 80302e2: e795 b.n 8030210 <_ZN8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x708> + 80302e4: f8ae 2000 strh.w r2, [lr] + 80302e8: e7d6 b.n 8030298 <_ZN8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x790> + 80302ea: b017 add sp, #92 ; 0x5c + 80302ec: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + +080302f0 <_ZNK8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKtssiihh>: + 80302f0: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 80302f4: b085 sub sp, #20 + 80302f6: e9dd 7010 ldrd r7, r0, [sp, #64] ; 0x40 + 80302fa: f9bd 6038 ldrsh.w r6, [sp, #56] ; 0x38 + 80302fe: 2800 cmp r0, #0 + 8030300: 9103 str r1, [sp, #12] + 8030302: fb00 7406 mla r4, r0, r6, r7 + 8030306: f9bd b03c ldrsh.w fp, [sp, #60] ; 0x3c + 803030a: f89d 1048 ldrb.w r1, [sp, #72] ; 0x48 + 803030e: eb03 0544 add.w r5, r3, r4, lsl #1 + 8030312: f89d e04c ldrb.w lr, [sp, #76] ; 0x4c + 8030316: eb02 0904 add.w r9, r2, r4 + 803031a: 9501 str r5, [sp, #4] + 803031c: f2c0 8141 blt.w 80305a2 <_ZNK8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKtssiihh+0x2b2> + 8030320: 4583 cmp fp, r0 + 8030322: f340 813e ble.w 80305a2 <_ZNK8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKtssiihh+0x2b2> + 8030326: 2f00 cmp r7, #0 + 8030328: f2c0 8137 blt.w 803059a <_ZNK8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKtssiihh+0x2aa> + 803032c: 42be cmp r6, r7 + 803032e: f340 8134 ble.w 803059a <_ZNK8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKtssiihh+0x2aa> + 8030332: f812 c004 ldrb.w ip, [r2, r4] + 8030336: f833 3014 ldrh.w r3, [r3, r4, lsl #1] + 803033a: f64f 041f movw r4, #63519 ; 0xf81f + 803033e: ea4f 02ec mov.w r2, ip, asr #3 + 8030342: f423 65fc bic.w r5, r3, #2016 ; 0x7e0 + 8030346: f403 63fc and.w r3, r3, #2016 ; 0x7e0 + 803034a: 4355 muls r5, r2 + 803034c: fb0c f203 mul.w r2, ip, r3 + 8030350: ea04 1355 and.w r3, r4, r5, lsr #5 + 8030354: f605 0501 addw r5, r5, #2049 ; 0x801 + 8030358: 441d add r5, r3 + 803035a: f102 0320 add.w r3, r2, #32 + 803035e: eb03 2312 add.w r3, r3, r2, lsr #8 + 8030362: ea04 1455 and.w r4, r4, r5, lsr #5 + 8030366: 0a1b lsrs r3, r3, #8 + 8030368: f403 63fc and.w r3, r3, #2016 ; 0x7e0 + 803036c: 431c orrs r4, r3 + 803036e: 1c7b adds r3, r7, #1 + 8030370: f100 811c bmi.w 80305ac <_ZNK8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKtssiihh+0x2bc> + 8030374: 429e cmp r6, r3 + 8030376: f340 8119 ble.w 80305ac <_ZNK8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKtssiihh+0x2bc> + 803037a: 2900 cmp r1, #0 + 803037c: f000 8119 beq.w 80305b2 <_ZNK8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKtssiihh+0x2c2> + 8030380: 9a01 ldr r2, [sp, #4] + 8030382: f899 3001 ldrb.w r3, [r9, #1] + 8030386: 8855 ldrh r5, [r2, #2] + 8030388: ea4f 08e3 mov.w r8, r3, asr #3 + 803038c: f425 62fc bic.w r2, r5, #2016 ; 0x7e0 + 8030390: f405 65fc and.w r5, r5, #2016 ; 0x7e0 + 8030394: fb08 f802 mul.w r8, r8, r2 + 8030398: f64f 021f movw r2, #63519 ; 0xf81f + 803039c: 435d muls r5, r3 + 803039e: ea02 1a58 and.w sl, r2, r8, lsr #5 + 80303a2: f608 0801 addw r8, r8, #2049 ; 0x801 + 80303a6: 44d0 add r8, sl + 80303a8: f105 0a20 add.w sl, r5, #32 + 80303ac: eb0a 2515 add.w r5, sl, r5, lsr #8 + 80303b0: ea02 1258 and.w r2, r2, r8, lsr #5 + 80303b4: 0a2d lsrs r5, r5, #8 + 80303b6: f405 65fc and.w r5, r5, #2016 ; 0x7e0 + 80303ba: 432a orrs r2, r5 + 80303bc: 3001 adds r0, #1 + 80303be: f100 80fe bmi.w 80305be <_ZNK8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKtssiihh+0x2ce> + 80303c2: 4583 cmp fp, r0 + 80303c4: f340 80fb ble.w 80305be <_ZNK8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKtssiihh+0x2ce> + 80303c8: f1be 0f00 cmp.w lr, #0 + 80303cc: f000 80fc beq.w 80305c8 <_ZNK8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKtssiihh+0x2d8> + 80303d0: 2f00 cmp r7, #0 + 80303d2: f2c0 80f1 blt.w 80305b8 <_ZNK8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKtssiihh+0x2c8> + 80303d6: 42be cmp r6, r7 + 80303d8: f340 80ee ble.w 80305b8 <_ZNK8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKtssiihh+0x2c8> + 80303dc: 9801 ldr r0, [sp, #4] + 80303de: f64f 0b1f movw fp, #63519 ; 0xf81f + 80303e2: f819 5006 ldrb.w r5, [r9, r6] + 80303e6: f830 8016 ldrh.w r8, [r0, r6, lsl #1] + 80303ea: ea4f 0ae5 mov.w sl, r5, asr #3 + 80303ee: f428 60fc bic.w r0, r8, #2016 ; 0x7e0 + 80303f2: f408 68fc and.w r8, r8, #2016 ; 0x7e0 + 80303f6: fb0a fa00 mul.w sl, sl, r0 + 80303fa: fb05 f808 mul.w r8, r5, r8 + 80303fe: ea0b 105a and.w r0, fp, sl, lsr #5 + 8030402: f60a 0a01 addw sl, sl, #2049 ; 0x801 + 8030406: 4482 add sl, r0 + 8030408: f108 0020 add.w r0, r8, #32 + 803040c: eb00 2018 add.w r0, r0, r8, lsr #8 + 8030410: ea0b 1b5a and.w fp, fp, sl, lsr #5 + 8030414: 0a00 lsrs r0, r0, #8 + 8030416: f400 60fc and.w r0, r0, #2016 ; 0x7e0 + 803041a: ea4b 0b00 orr.w fp, fp, r0 + 803041e: 3701 adds r7, #1 + 8030420: f100 80d7 bmi.w 80305d2 <_ZNK8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKtssiihh+0x2e2> + 8030424: 42be cmp r6, r7 + 8030426: f340 80d4 ble.w 80305d2 <_ZNK8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKtssiihh+0x2e2> + 803042a: 2900 cmp r1, #0 + 803042c: f000 80d4 beq.w 80305d8 <_ZNK8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKtssiihh+0x2e8> + 8030430: 3601 adds r6, #1 + 8030432: 9801 ldr r0, [sp, #4] + 8030434: f819 7006 ldrb.w r7, [r9, r6] + 8030438: f830 0016 ldrh.w r0, [r0, r6, lsl #1] + 803043c: ea4f 09e7 mov.w r9, r7, asr #3 + 8030440: f420 66fc bic.w r6, r0, #2016 ; 0x7e0 + 8030444: f400 60fc and.w r0, r0, #2016 ; 0x7e0 + 8030448: fb09 f906 mul.w r9, r9, r6 + 803044c: fb07 f800 mul.w r8, r7, r0 + 8030450: f64f 001f movw r0, #63519 ; 0xf81f + 8030454: ea00 1a59 and.w sl, r0, r9, lsr #5 + 8030458: f609 0901 addw r9, r9, #2049 ; 0x801 + 803045c: 44d1 add r9, sl + 803045e: ea00 1659 and.w r6, r0, r9, lsr #5 + 8030462: f108 0020 add.w r0, r8, #32 + 8030466: eb00 2018 add.w r0, r0, r8, lsr #8 + 803046a: 0a00 lsrs r0, r0, #8 + 803046c: f400 60fc and.w r0, r0, #2016 ; 0x7e0 + 8030470: 4330 orrs r0, r6 + 8030472: b28e uxth r6, r1 + 8030474: fa1f f98e uxth.w r9, lr + 8030478: ea4f 4a04 mov.w sl, r4, lsl #16 + 803047c: f424 64fc bic.w r4, r4, #2016 ; 0x7e0 + 8030480: fb06 f809 mul.w r8, r6, r9 + 8030484: 0136 lsls r6, r6, #4 + 8030486: f00a 6afc and.w sl, sl, #132120576 ; 0x7e00000 + 803048a: ebc8 1909 rsb r9, r8, r9, lsl #4 + 803048e: 9601 str r6, [sp, #4] + 8030490: ea4a 0404 orr.w r4, sl, r4 + 8030494: ea4f 4a02 mov.w sl, r2, lsl #16 + 8030498: fa1f f689 uxth.w r6, r9 + 803049c: f422 62fc bic.w r2, r2, #2016 ; 0x7e0 + 80304a0: fb11 f90e smulbb r9, r1, lr + 80304a4: f00a 6afc and.w sl, sl, #132120576 ; 0x7e00000 + 80304a8: 9602 str r6, [sp, #8] + 80304aa: 4626 mov r6, r4 + 80304ac: f3c9 09c7 ubfx r9, r9, #3, #8 + 80304b0: f1ce 0410 rsb r4, lr, #16 + 80304b4: ea4a 0202 orr.w r2, sl, r2 + 80304b8: ea4f 4a00 mov.w sl, r0, lsl #16 + 80304bc: 1a64 subs r4, r4, r1 + 80304be: ebc9 0141 rsb r1, r9, r1, lsl #1 + 80304c2: f00a 6afc and.w sl, sl, #132120576 ; 0x7e00000 + 80304c6: f420 60fc bic.w r0, r0, #2016 ; 0x7e0 + 80304ca: 434a muls r2, r1 + 80304cc: eb09 0444 add.w r4, r9, r4, lsl #1 + 80304d0: ea4a 0000 orr.w r0, sl, r0 + 80304d4: ebc9 0e4e rsb lr, r9, lr, lsl #1 + 80304d8: fb04 2406 mla r4, r4, r6, r2 + 80304dc: 9903 ldr r1, [sp, #12] + 80304de: fb09 4200 mla r2, r9, r0, r4 + 80304e2: ea4f 440b mov.w r4, fp, lsl #16 + 80304e6: 9801 ldr r0, [sp, #4] + 80304e8: f42b 6bfc bic.w fp, fp, #2016 ; 0x7e0 + 80304ec: f004 64fc and.w r4, r4, #132120576 ; 0x7e00000 + 80304f0: 8809 ldrh r1, [r1, #0] + 80304f2: f5c0 7080 rsb r0, r0, #256 ; 0x100 + 80304f6: ea44 0b0b orr.w fp, r4, fp + 80304fa: 9c02 ldr r4, [sp, #8] + 80304fc: 1b00 subs r0, r0, r4 + 80304fe: 9c01 ldr r4, [sp, #4] + 8030500: fb0e 2e0b mla lr, lr, fp, r2 + 8030504: eba4 0608 sub.w r6, r4, r8 + 8030508: b280 uxth r0, r0 + 803050a: ea4f 525e mov.w r2, lr, lsr #21 + 803050e: b2b6 uxth r6, r6 + 8030510: ea4f 1e5e mov.w lr, lr, lsr #5 + 8030514: f402 62fc and.w r2, r2, #2016 ; 0x7e0 + 8030518: 4373 muls r3, r6 + 803051a: f42e 6efc bic.w lr, lr, #2016 ; 0x7e0 + 803051e: fb0c 3300 mla r3, ip, r0, r3 + 8030522: 9802 ldr r0, [sp, #8] + 8030524: ea42 0e0e orr.w lr, r2, lr + 8030528: fb00 3505 mla r5, r0, r5, r3 + 803052c: 120b asrs r3, r1, #8 + 803052e: 10c8 asrs r0, r1, #3 + 8030530: fb08 5707 mla r7, r8, r7, r5 + 8030534: f003 03f8 and.w r3, r3, #248 ; 0xf8 + 8030538: 00c9 lsls r1, r1, #3 + 803053a: f000 00fc and.w r0, r0, #252 ; 0xfc + 803053e: ea6f 2727 mvn.w r7, r7, asr #8 + 8030542: fa1f f28e uxth.w r2, lr + 8030546: b2c9 uxtb r1, r1 + 8030548: b2ff uxtb r7, r7 + 803054a: 437b muls r3, r7 + 803054c: 4378 muls r0, r7 + 803054e: 434f muls r7, r1 + 8030550: 1c59 adds r1, r3, #1 + 8030552: eb01 2113 add.w r1, r1, r3, lsr #8 + 8030556: 1213 asrs r3, r2, #8 + 8030558: f023 0307 bic.w r3, r3, #7 + 803055c: eb03 2311 add.w r3, r3, r1, lsr #8 + 8030560: 1c41 adds r1, r0, #1 + 8030562: eb01 2010 add.w r0, r1, r0, lsr #8 + 8030566: 10d1 asrs r1, r2, #3 + 8030568: 021b lsls r3, r3, #8 + 803056a: f021 0103 bic.w r1, r1, #3 + 803056e: 00d2 lsls r2, r2, #3 + 8030570: f403 4378 and.w r3, r3, #63488 ; 0xf800 + 8030574: eb01 2110 add.w r1, r1, r0, lsr #8 + 8030578: 00c9 lsls r1, r1, #3 + 803057a: f401 61fc and.w r1, r1, #2016 ; 0x7e0 + 803057e: 430b orrs r3, r1 + 8030580: 1c79 adds r1, r7, #1 + 8030582: eb01 2717 add.w r7, r1, r7, lsr #8 + 8030586: eb02 2217 add.w r2, r2, r7, lsr #8 + 803058a: f3c2 02c4 ubfx r2, r2, #3, #5 + 803058e: 431a orrs r2, r3 + 8030590: 9b03 ldr r3, [sp, #12] + 8030592: 801a strh r2, [r3, #0] + 8030594: b005 add sp, #20 + 8030596: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 803059a: f04f 0c00 mov.w ip, #0 + 803059e: 4664 mov r4, ip + 80305a0: e6e5 b.n 803036e <_ZNK8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKtssiihh+0x7e> + 80305a2: 2300 movs r3, #0 + 80305a4: 469c mov ip, r3 + 80305a6: 461a mov r2, r3 + 80305a8: 461c mov r4, r3 + 80305aa: e707 b.n 80303bc <_ZNK8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKtssiihh+0xcc> + 80305ac: 2300 movs r3, #0 + 80305ae: 461a mov r2, r3 + 80305b0: e704 b.n 80303bc <_ZNK8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKtssiihh+0xcc> + 80305b2: 460b mov r3, r1 + 80305b4: 460a mov r2, r1 + 80305b6: e701 b.n 80303bc <_ZNK8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKtssiihh+0xcc> + 80305b8: 2500 movs r5, #0 + 80305ba: 46ab mov fp, r5 + 80305bc: e72f b.n 803041e <_ZNK8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKtssiihh+0x12e> + 80305be: 2700 movs r7, #0 + 80305c0: 463d mov r5, r7 + 80305c2: 4638 mov r0, r7 + 80305c4: 46bb mov fp, r7 + 80305c6: e754 b.n 8030472 <_ZNK8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKtssiihh+0x182> + 80305c8: 4677 mov r7, lr + 80305ca: 4675 mov r5, lr + 80305cc: 4670 mov r0, lr + 80305ce: 46f3 mov fp, lr + 80305d0: e74f b.n 8030472 <_ZNK8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKtssiihh+0x182> + 80305d2: 2700 movs r7, #0 + 80305d4: 4638 mov r0, r7 + 80305d6: e74c b.n 8030472 <_ZNK8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKtssiihh+0x182> + 80305d8: 460f mov r7, r1 + 80305da: 4608 mov r0, r1 + 80305dc: e749 b.n 8030472 <_ZNK8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKtssiihh+0x182> + ... + +080305e0 <_ZN8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff>: + 80305e0: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 80305e4: b093 sub sp, #76 ; 0x4c + 80305e6: 9210 str r2, [sp, #64] ; 0x40 + 80305e8: 9a21 ldr r2, [sp, #132] ; 0x84 + 80305ea: 9011 str r0, [sp, #68] ; 0x44 + 80305ec: 910e str r1, [sp, #56] ; 0x38 + 80305ee: 6850 ldr r0, [r2, #4] + 80305f0: 9306 str r3, [sp, #24] + 80305f2: 6812 ldr r2, [r2, #0] + 80305f4: e9dd 1322 ldrd r1, r3, [sp, #136] ; 0x88 + 80305f8: fb00 1303 mla r3, r0, r3, r1 + 80305fc: eb02 0343 add.w r3, r2, r3, lsl #1 + 8030600: 9307 str r3, [sp, #28] + 8030602: 9b24 ldr r3, [sp, #144] ; 0x90 + 8030604: 681b ldr r3, [r3, #0] + 8030606: 9308 str r3, [sp, #32] + 8030608: 9b24 ldr r3, [sp, #144] ; 0x90 + 803060a: 685b ldr r3, [r3, #4] + 803060c: 9309 str r3, [sp, #36] ; 0x24 + 803060e: 9b0e ldr r3, [sp, #56] ; 0x38 + 8030610: 2b00 cmp r3, #0 + 8030612: dc03 bgt.n 803061c <_ZN8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x3c> + 8030614: 9b10 ldr r3, [sp, #64] ; 0x40 + 8030616: 2b00 cmp r3, #0 + 8030618: f340 83b6 ble.w 8030d88 <_ZN8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x7a8> + 803061c: 9b24 ldr r3, [sp, #144] ; 0x90 + 803061e: f9b3 1008 ldrsh.w r1, [r3, #8] + 8030622: f9b3 200c ldrsh.w r2, [r3, #12] + 8030626: 1e48 subs r0, r1, #1 + 8030628: 1e55 subs r5, r2, #1 + 803062a: 9b06 ldr r3, [sp, #24] + 803062c: 2b00 cmp r3, #0 + 803062e: f340 8165 ble.w 80308fc <_ZN8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x31c> + 8030632: 9e1d ldr r6, [sp, #116] ; 0x74 + 8030634: 9b1e ldr r3, [sp, #120] ; 0x78 + 8030636: 1436 asrs r6, r6, #16 + 8030638: ea4f 4323 mov.w r3, r3, asr #16 + 803063c: d406 bmi.n 803064c <_ZN8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x6c> + 803063e: 4286 cmp r6, r0 + 8030640: da04 bge.n 803064c <_ZN8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x6c> + 8030642: 2b00 cmp r3, #0 + 8030644: db02 blt.n 803064c <_ZN8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x6c> + 8030646: 42ab cmp r3, r5 + 8030648: f2c0 8159 blt.w 80308fe <_ZN8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x31e> + 803064c: 3601 adds r6, #1 + 803064e: f100 8146 bmi.w 80308de <_ZN8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x2fe> + 8030652: 42b1 cmp r1, r6 + 8030654: f2c0 8143 blt.w 80308de <_ZN8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x2fe> + 8030658: 3301 adds r3, #1 + 803065a: f100 8140 bmi.w 80308de <_ZN8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x2fe> + 803065e: 429a cmp r2, r3 + 8030660: f2c0 813d blt.w 80308de <_ZN8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x2fe> + 8030664: 9b06 ldr r3, [sp, #24] + 8030666: f64f 061f movw r6, #63519 ; 0xf81f + 803066a: 9f07 ldr r7, [sp, #28] + 803066c: 930f str r3, [sp, #60] ; 0x3c + 803066e: 9b0f ldr r3, [sp, #60] ; 0x3c + 8030670: 2b00 cmp r3, #0 + 8030672: f340 8166 ble.w 8030942 <_ZN8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x362> + 8030676: 9b1e ldr r3, [sp, #120] ; 0x78 + 8030678: 9d1d ldr r5, [sp, #116] ; 0x74 + 803067a: 1418 asrs r0, r3, #16 + 803067c: 9b1d ldr r3, [sp, #116] ; 0x74 + 803067e: 142d asrs r5, r5, #16 + 8030680: f3c3 3103 ubfx r1, r3, #12, #4 + 8030684: 9b1e ldr r3, [sp, #120] ; 0x78 + 8030686: f3c3 3c03 ubfx ip, r3, #12, #4 + 803068a: 9b24 ldr r3, [sp, #144] ; 0x90 + 803068c: e9d3 2302 ldrd r2, r3, [r3, #8] + 8030690: f100 81f0 bmi.w 8030a74 <_ZN8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x494> + 8030694: f102 3eff add.w lr, r2, #4294967295 + 8030698: 4575 cmp r5, lr + 803069a: f280 81eb bge.w 8030a74 <_ZN8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x494> + 803069e: 2800 cmp r0, #0 + 80306a0: f2c0 81e8 blt.w 8030a74 <_ZN8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x494> + 80306a4: f103 3eff add.w lr, r3, #4294967295 + 80306a8: 4570 cmp r0, lr + 80306aa: f280 81e3 bge.w 8030a74 <_ZN8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x494> + 80306ae: b212 sxth r2, r2 + 80306b0: 9b09 ldr r3, [sp, #36] ; 0x24 + 80306b2: fa1f fe81 uxth.w lr, r1 + 80306b6: fb00 5002 mla r0, r0, r2, r5 + 80306ba: ea4f 150e mov.w r5, lr, lsl #4 + 80306be: eb03 0a00 add.w sl, r3, r0 + 80306c2: f813 9000 ldrb.w r9, [r3, r0] + 80306c6: f5c5 7380 rsb r3, r5, #256 ; 0x100 + 80306ca: f89a 8001 ldrb.w r8, [sl, #1] + 80306ce: b29b uxth r3, r3 + 80306d0: f1bc 0f00 cmp.w ip, #0 + 80306d4: f000 817b beq.w 80309ce <_ZN8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x3ee> + 80306d8: f81a 4002 ldrb.w r4, [sl, r2] + 80306dc: eb0a 0b02 add.w fp, sl, r2 + 80306e0: fa1f fa8c uxth.w sl, ip + 80306e4: 940a str r4, [sp, #40] ; 0x28 + 80306e6: fb0a fe0e mul.w lr, sl, lr + 80306ea: f89b 4001 ldrb.w r4, [fp, #1] + 80306ee: ebce 1a0a rsb sl, lr, sl, lsl #4 + 80306f2: eba5 050e sub.w r5, r5, lr + 80306f6: 940b str r4, [sp, #44] ; 0x2c + 80306f8: fa1f fa8a uxth.w sl, sl + 80306fc: 9c0a ldr r4, [sp, #40] ; 0x28 + 80306fe: b2ad uxth r5, r5 + 8030700: eba3 030a sub.w r3, r3, sl + 8030704: fb08 f505 mul.w r5, r8, r5 + 8030708: b29b uxth r3, r3 + 803070a: fb09 5303 mla r3, r9, r3, r5 + 803070e: fb0a 3304 mla r3, sl, r4, r3 + 8030712: 9c0b ldr r4, [sp, #44] ; 0x2c + 8030714: fb0e 3304 mla r3, lr, r4, r3 + 8030718: f3c3 2307 ubfx r3, r3, #8, #8 + 803071c: 2b00 cmp r3, #0 + 803071e: f000 80d1 beq.w 80308c4 <_ZN8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x2e4> + 8030722: 9c08 ldr r4, [sp, #32] + 8030724: f1b9 0fff cmp.w r9, #255 ; 0xff + 8030728: eb04 0540 add.w r5, r4, r0, lsl #1 + 803072c: f834 0010 ldrh.w r0, [r4, r0, lsl #1] + 8030730: f000 8152 beq.w 80309d8 <_ZN8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x3f8> + 8030734: f420 6efc bic.w lr, r0, #2016 ; 0x7e0 + 8030738: ea4f 0ae9 mov.w sl, r9, asr #3 + 803073c: f400 60fc and.w r0, r0, #2016 ; 0x7e0 + 8030740: fb0a fe0e mul.w lr, sl, lr + 8030744: fb09 f000 mul.w r0, r9, r0 + 8030748: ea06 195e and.w r9, r6, lr, lsr #5 + 803074c: f60e 0e01 addw lr, lr, #2049 ; 0x801 + 8030750: f100 0b20 add.w fp, r0, #32 + 8030754: 44ce add lr, r9 + 8030756: eb0b 2910 add.w r9, fp, r0, lsr #8 + 803075a: ea06 1e5e and.w lr, r6, lr, lsr #5 + 803075e: ea4f 2919 mov.w r9, r9, lsr #8 + 8030762: f409 69fc and.w r9, r9, #2016 ; 0x7e0 + 8030766: ea4e 0909 orr.w r9, lr, r9 + 803076a: f1b8 0fff cmp.w r8, #255 ; 0xff + 803076e: 8868 ldrh r0, [r5, #2] + 8030770: d019 beq.n 80307a6 <_ZN8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1c6> + 8030772: f420 6efc bic.w lr, r0, #2016 ; 0x7e0 + 8030776: ea4f 0ae8 mov.w sl, r8, asr #3 + 803077a: f400 60fc and.w r0, r0, #2016 ; 0x7e0 + 803077e: fb0a fe0e mul.w lr, sl, lr + 8030782: fb08 f800 mul.w r8, r8, r0 + 8030786: ea06 105e and.w r0, r6, lr, lsr #5 + 803078a: f60e 0e01 addw lr, lr, #2049 ; 0x801 + 803078e: f108 0b20 add.w fp, r8, #32 + 8030792: 4486 add lr, r0 + 8030794: eb0b 2018 add.w r0, fp, r8, lsr #8 + 8030798: ea06 1e5e and.w lr, r6, lr, lsr #5 + 803079c: 0a00 lsrs r0, r0, #8 + 803079e: f400 60fc and.w r0, r0, #2016 ; 0x7e0 + 80307a2: ea4e 0000 orr.w r0, lr, r0 + 80307a6: ea4f 4e09 mov.w lr, r9, lsl #16 + 80307aa: f429 69fc bic.w r9, r9, #2016 ; 0x7e0 + 80307ae: ea4f 4a00 mov.w sl, r0, lsl #16 + 80307b2: f420 60fc bic.w r0, r0, #2016 ; 0x7e0 + 80307b6: f00e 6efc and.w lr, lr, #132120576 ; 0x7e00000 + 80307ba: f00a 6afc and.w sl, sl, #132120576 ; 0x7e00000 + 80307be: ea4e 0909 orr.w r9, lr, r9 + 80307c2: ea4a 0000 orr.w r0, sl, r0 + 80307c6: f1bc 0f00 cmp.w ip, #0 + 80307ca: f000 8107 beq.w 80309dc <_ZN8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x3fc> + 80307ce: f102 4200 add.w r2, r2, #2147483648 ; 0x80000000 + 80307d2: 9c0a ldr r4, [sp, #40] ; 0x28 + 80307d4: 3a01 subs r2, #1 + 80307d6: 2cff cmp r4, #255 ; 0xff + 80307d8: ea4f 0242 mov.w r2, r2, lsl #1 + 80307dc: f102 0202 add.w r2, r2, #2 + 80307e0: eb05 0e02 add.w lr, r5, r2 + 80307e4: 5aaa ldrh r2, [r5, r2] + 80307e6: d018 beq.n 803081a <_ZN8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x23a> + 80307e8: f422 65fc bic.w r5, r2, #2016 ; 0x7e0 + 80307ec: f402 62fc and.w r2, r2, #2016 ; 0x7e0 + 80307f0: ea4f 08e4 mov.w r8, r4, asr #3 + 80307f4: fb04 fa02 mul.w sl, r4, r2 + 80307f8: fb08 f805 mul.w r8, r8, r5 + 80307fc: f10a 0520 add.w r5, sl, #32 + 8030800: ea06 1258 and.w r2, r6, r8, lsr #5 + 8030804: f608 0801 addw r8, r8, #2049 ; 0x801 + 8030808: eb05 251a add.w r5, r5, sl, lsr #8 + 803080c: 4442 add r2, r8 + 803080e: 0a2d lsrs r5, r5, #8 + 8030810: ea06 1252 and.w r2, r6, r2, lsr #5 + 8030814: f405 65fc and.w r5, r5, #2016 ; 0x7e0 + 8030818: 432a orrs r2, r5 + 803081a: 9c0b ldr r4, [sp, #44] ; 0x2c + 803081c: f8be 5002 ldrh.w r5, [lr, #2] + 8030820: 2cff cmp r4, #255 ; 0xff + 8030822: d01a beq.n 803085a <_ZN8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x27a> + 8030824: f425 6efc bic.w lr, r5, #2016 ; 0x7e0 + 8030828: f405 65fc and.w r5, r5, #2016 ; 0x7e0 + 803082c: ea4f 08e4 mov.w r8, r4, asr #3 + 8030830: fb04 fa05 mul.w sl, r4, r5 + 8030834: fb08 f80e mul.w r8, r8, lr + 8030838: f10a 0e20 add.w lr, sl, #32 + 803083c: ea06 1558 and.w r5, r6, r8, lsr #5 + 8030840: f608 0801 addw r8, r8, #2049 ; 0x801 + 8030844: eb0e 2e1a add.w lr, lr, sl, lsr #8 + 8030848: 4445 add r5, r8 + 803084a: ea4f 2e1e mov.w lr, lr, lsr #8 + 803084e: ea06 1555 and.w r5, r6, r5, lsr #5 + 8030852: f40e 6efc and.w lr, lr, #2016 ; 0x7e0 + 8030856: ea45 050e orr.w r5, r5, lr + 803085a: fb1c fe01 smulbb lr, ip, r1 + 803085e: f1cc 0810 rsb r8, ip, #16 + 8030862: ea4f 4a02 mov.w sl, r2, lsl #16 + 8030866: f422 62fc bic.w r2, r2, #2016 ; 0x7e0 + 803086a: ea4f 0eee mov.w lr, lr, asr #3 + 803086e: eba8 0801 sub.w r8, r8, r1 + 8030872: ea4f 4b05 mov.w fp, r5, lsl #16 + 8030876: f00a 6afc and.w sl, sl, #132120576 ; 0x7e00000 + 803087a: ebce 0141 rsb r1, lr, r1, lsl #1 + 803087e: f425 65fc bic.w r5, r5, #2016 ; 0x7e0 + 8030882: eb0e 0848 add.w r8, lr, r8, lsl #1 + 8030886: ea4a 0202 orr.w r2, sl, r2 + 803088a: 4341 muls r1, r0 + 803088c: ebce 0c4c rsb ip, lr, ip, lsl #1 + 8030890: f00b 6bfc and.w fp, fp, #132120576 ; 0x7e00000 + 8030894: fb09 1108 mla r1, r9, r8, r1 + 8030898: ea4b 0505 orr.w r5, fp, r5 + 803089c: fb0c 1102 mla r1, ip, r2, r1 + 80308a0: fb0e 1e05 mla lr, lr, r5, r1 + 80308a4: ea4f 525e mov.w r2, lr, lsr #21 + 80308a8: ea4f 1e5e mov.w lr, lr, lsr #5 + 80308ac: f402 62fc and.w r2, r2, #2016 ; 0x7e0 + 80308b0: f42e 6efc bic.w lr, lr, #2016 ; 0x7e0 + 80308b4: ea42 0e0e orr.w lr, r2, lr + 80308b8: fa1f f28e uxth.w r2, lr + 80308bc: 2bff cmp r3, #255 ; 0xff + 80308be: f040 80a1 bne.w 8030a04 <_ZN8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x424> + 80308c2: 803a strh r2, [r7, #0] + 80308c4: 9b1d ldr r3, [sp, #116] ; 0x74 + 80308c6: 3702 adds r7, #2 + 80308c8: 9a1f ldr r2, [sp, #124] ; 0x7c + 80308ca: 4413 add r3, r2 + 80308cc: 9a1e ldr r2, [sp, #120] ; 0x78 + 80308ce: 931d str r3, [sp, #116] ; 0x74 + 80308d0: 9b20 ldr r3, [sp, #128] ; 0x80 + 80308d2: 441a add r2, r3 + 80308d4: 9b0f ldr r3, [sp, #60] ; 0x3c + 80308d6: 3b01 subs r3, #1 + 80308d8: 921e str r2, [sp, #120] ; 0x78 + 80308da: 930f str r3, [sp, #60] ; 0x3c + 80308dc: e6c7 b.n 803066e <_ZN8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x8e> + 80308de: 9b1d ldr r3, [sp, #116] ; 0x74 + 80308e0: 9e1f ldr r6, [sp, #124] ; 0x7c + 80308e2: 9c1e ldr r4, [sp, #120] ; 0x78 + 80308e4: 4433 add r3, r6 + 80308e6: 931d str r3, [sp, #116] ; 0x74 + 80308e8: 9b20 ldr r3, [sp, #128] ; 0x80 + 80308ea: 441c add r4, r3 + 80308ec: 9b06 ldr r3, [sp, #24] + 80308ee: 3b01 subs r3, #1 + 80308f0: 941e str r4, [sp, #120] ; 0x78 + 80308f2: 9306 str r3, [sp, #24] + 80308f4: 9b07 ldr r3, [sp, #28] + 80308f6: 3302 adds r3, #2 + 80308f8: 9307 str r3, [sp, #28] + 80308fa: e696 b.n 803062a <_ZN8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x4a> + 80308fc: d028 beq.n 8030950 <_ZN8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x370> + 80308fe: 9b06 ldr r3, [sp, #24] + 8030900: 981f ldr r0, [sp, #124] ; 0x7c + 8030902: 3b01 subs r3, #1 + 8030904: 9d1d ldr r5, [sp, #116] ; 0x74 + 8030906: fb00 5003 mla r0, r0, r3, r5 + 803090a: 1400 asrs r0, r0, #16 + 803090c: f53f aeaa bmi.w 8030664 <_ZN8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x84> + 8030910: 3901 subs r1, #1 + 8030912: 4288 cmp r0, r1 + 8030914: f6bf aea6 bge.w 8030664 <_ZN8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x84> + 8030918: 9920 ldr r1, [sp, #128] ; 0x80 + 803091a: 981e ldr r0, [sp, #120] ; 0x78 + 803091c: fb01 0303 mla r3, r1, r3, r0 + 8030920: 141b asrs r3, r3, #16 + 8030922: f53f ae9f bmi.w 8030664 <_ZN8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x84> + 8030926: 3a01 subs r2, #1 + 8030928: 4293 cmp r3, r2 + 803092a: f6bf ae9b bge.w 8030664 <_ZN8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x84> + 803092e: 9b06 ldr r3, [sp, #24] + 8030930: f64f 061f movw r6, #63519 ; 0xf81f + 8030934: f8dd e01c ldr.w lr, [sp, #28] + 8030938: 930f str r3, [sp, #60] ; 0x3c + 803093a: 9b0f ldr r3, [sp, #60] ; 0x3c + 803093c: 2b00 cmp r3, #0 + 803093e: f300 80b6 bgt.w 8030aae <_ZN8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x4ce> + 8030942: 9b06 ldr r3, [sp, #24] + 8030944: ea23 74e3 bic.w r4, r3, r3, asr #31 + 8030948: 9b07 ldr r3, [sp, #28] + 803094a: eb03 0344 add.w r3, r3, r4, lsl #1 + 803094e: 9307 str r3, [sp, #28] + 8030950: 9b0e ldr r3, [sp, #56] ; 0x38 + 8030952: 2b00 cmp r3, #0 + 8030954: f340 8218 ble.w 8030d88 <_ZN8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x7a8> + 8030958: eeb7 7a00 vmov.f32 s14, #112 ; 0x3f800000 1.0 + 803095c: 9b1c ldr r3, [sp, #112] ; 0x70 + 803095e: ee30 0a04 vadd.f32 s0, s0, s8 + 8030962: ee70 0aa4 vadd.f32 s1, s1, s9 + 8030966: eef0 6a62 vmov.f32 s13, s5 + 803096a: eec7 7a00 vdiv.f32 s15, s14, s0 + 803096e: ee31 1a05 vadd.f32 s2, s2, s10 + 8030972: eefe 6ac8 vcvt.s32.f32 s13, s13, #16 + 8030976: edcd 6a1d vstr s13, [sp, #116] ; 0x74 + 803097a: eef0 6a43 vmov.f32 s13, s6 + 803097e: eefe 6ac8 vcvt.s32.f32 s13, s13, #16 + 8030982: edcd 6a1e vstr s13, [sp, #120] ; 0x78 + 8030986: ee20 7aa7 vmul.f32 s14, s1, s15 + 803098a: ee61 7a27 vmul.f32 s15, s2, s15 + 803098e: ee77 2a62 vsub.f32 s5, s14, s5 + 8030992: ee37 3ac3 vsub.f32 s6, s15, s6 + 8030996: eefe 2ac8 vcvt.s32.f32 s5, s5, #16 + 803099a: eebe 3ac8 vcvt.s32.f32 s6, s6, #16 + 803099e: ee12 2a90 vmov r2, s5 + 80309a2: eef0 2a47 vmov.f32 s5, s14 + 80309a6: fb92 f3f3 sdiv r3, r2, r3 + 80309aa: ee13 2a10 vmov r2, s6 + 80309ae: 931f str r3, [sp, #124] ; 0x7c + 80309b0: 9b1c ldr r3, [sp, #112] ; 0x70 + 80309b2: eeb0 3a67 vmov.f32 s6, s15 + 80309b6: fb92 f3f3 sdiv r3, r2, r3 + 80309ba: 9320 str r3, [sp, #128] ; 0x80 + 80309bc: 9b0e ldr r3, [sp, #56] ; 0x38 + 80309be: 9a10 ldr r2, [sp, #64] ; 0x40 + 80309c0: 3b01 subs r3, #1 + 80309c2: 930e str r3, [sp, #56] ; 0x38 + 80309c4: 9b1c ldr r3, [sp, #112] ; 0x70 + 80309c6: bf08 it eq + 80309c8: 4613 moveq r3, r2 + 80309ca: 9306 str r3, [sp, #24] + 80309cc: e61f b.n 803060e <_ZN8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x2e> + 80309ce: fb08 f505 mul.w r5, r8, r5 + 80309d2: fb09 5303 mla r3, r9, r3, r5 + 80309d6: e69f b.n 8030718 <_ZN8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x138> + 80309d8: 4681 mov r9, r0 + 80309da: e6c6 b.n 803076a <_ZN8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x18a> + 80309dc: f1c1 0210 rsb r2, r1, #16 + 80309e0: 4341 muls r1, r0 + 80309e2: fb09 1902 mla r9, r9, r2, r1 + 80309e6: ea4f 0949 mov.w r9, r9, lsl #1 + 80309ea: ea4f 5259 mov.w r2, r9, lsr #21 + 80309ee: ea4f 1959 mov.w r9, r9, lsr #5 + 80309f2: f402 62fc and.w r2, r2, #2016 ; 0x7e0 + 80309f6: f429 69fc bic.w r9, r9, #2016 ; 0x7e0 + 80309fa: ea42 0909 orr.w r9, r2, r9 + 80309fe: fa1f f289 uxth.w r2, r9 + 8030a02: e75b b.n 80308bc <_ZN8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x2dc> + 8030a04: f8b7 c000 ldrh.w ip, [r7] + 8030a08: 43db mvns r3, r3 + 8030a0a: ea4f 202c mov.w r0, ip, asr #8 + 8030a0e: fa5f fe83 uxtb.w lr, r3 + 8030a12: f000 00f8 and.w r0, r0, #248 ; 0xf8 + 8030a16: ea4f 05ec mov.w r5, ip, asr #3 + 8030a1a: ea4f 03cc mov.w r3, ip, lsl #3 + 8030a1e: fb00 f00e mul.w r0, r0, lr + 8030a22: f005 05fc and.w r5, r5, #252 ; 0xfc + 8030a26: b2db uxtb r3, r3 + 8030a28: 1c41 adds r1, r0, #1 + 8030a2a: fb05 f50e mul.w r5, r5, lr + 8030a2e: fb03 f30e mul.w r3, r3, lr + 8030a32: eb01 2010 add.w r0, r1, r0, lsr #8 + 8030a36: 1211 asrs r1, r2, #8 + 8030a38: f021 0107 bic.w r1, r1, #7 + 8030a3c: eb01 2110 add.w r1, r1, r0, lsr #8 + 8030a40: 48d3 ldr r0, [pc, #844] ; (8030d90 <_ZN8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x7b0>) + 8030a42: b2c9 uxtb r1, r1 + 8030a44: ea00 2001 and.w r0, r0, r1, lsl #8 + 8030a48: 1c69 adds r1, r5, #1 + 8030a4a: eb01 2515 add.w r5, r1, r5, lsr #8 + 8030a4e: 10d1 asrs r1, r2, #3 + 8030a50: 00d2 lsls r2, r2, #3 + 8030a52: f021 0103 bic.w r1, r1, #3 + 8030a56: eb01 2115 add.w r1, r1, r5, lsr #8 + 8030a5a: 00c9 lsls r1, r1, #3 + 8030a5c: f401 61fc and.w r1, r1, #2016 ; 0x7e0 + 8030a60: 4301 orrs r1, r0 + 8030a62: 1c58 adds r0, r3, #1 + 8030a64: eb00 2313 add.w r3, r0, r3, lsr #8 + 8030a68: eb02 2213 add.w r2, r2, r3, lsr #8 + 8030a6c: f3c2 02c4 ubfx r2, r2, #3, #5 + 8030a70: 430a orrs r2, r1 + 8030a72: e726 b.n 80308c2 <_ZN8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x2e2> + 8030a74: f115 0e01 adds.w lr, r5, #1 + 8030a78: f53f af24 bmi.w 80308c4 <_ZN8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x2e4> + 8030a7c: 4572 cmp r2, lr + 8030a7e: f6ff af21 blt.w 80308c4 <_ZN8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x2e4> + 8030a82: f110 0e01 adds.w lr, r0, #1 + 8030a86: f53f af1d bmi.w 80308c4 <_ZN8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x2e4> + 8030a8a: 4573 cmp r3, lr + 8030a8c: f6ff af1a blt.w 80308c4 <_ZN8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x2e4> + 8030a90: b21b sxth r3, r3 + 8030a92: b212 sxth r2, r2 + 8030a94: 9301 str r3, [sp, #4] + 8030a96: 9200 str r2, [sp, #0] + 8030a98: e9cd 1c04 strd r1, ip, [sp, #16] + 8030a9c: e9cd 5002 strd r5, r0, [sp, #8] + 8030aa0: e9dd 3208 ldrd r3, r2, [sp, #32] + 8030aa4: 4639 mov r1, r7 + 8030aa6: 9811 ldr r0, [sp, #68] ; 0x44 + 8030aa8: f7ff fc22 bl 80302f0 <_ZNK8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKtssiihh> + 8030aac: e70a b.n 80308c4 <_ZN8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x2e4> + 8030aae: 9b1d ldr r3, [sp, #116] ; 0x74 + 8030ab0: f3c3 3203 ubfx r2, r3, #12, #4 + 8030ab4: 9b1e ldr r3, [sp, #120] ; 0x78 + 8030ab6: f3c3 3503 ubfx r5, r3, #12, #4 + 8030aba: 9b24 ldr r3, [sp, #144] ; 0x90 + 8030abc: fa1f fc82 uxth.w ip, r2 + 8030ac0: f9b3 1008 ldrsh.w r1, [r3, #8] + 8030ac4: 9b1e ldr r3, [sp, #120] ; 0x78 + 8030ac6: ea4f 100c mov.w r0, ip, lsl #4 + 8030aca: 141f asrs r7, r3, #16 + 8030acc: 9b1d ldr r3, [sp, #116] ; 0x74 + 8030ace: 141b asrs r3, r3, #16 + 8030ad0: fb01 3707 mla r7, r1, r7, r3 + 8030ad4: 9b09 ldr r3, [sp, #36] ; 0x24 + 8030ad6: eb03 0a07 add.w sl, r3, r7 + 8030ada: f813 9007 ldrb.w r9, [r3, r7] + 8030ade: f5c0 7380 rsb r3, r0, #256 ; 0x100 + 8030ae2: f89a 8001 ldrb.w r8, [sl, #1] + 8030ae6: b29b uxth r3, r3 + 8030ae8: 2d00 cmp r5, #0 + 8030aea: f000 80fe beq.w 8030cea <_ZN8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x70a> + 8030aee: f81a 4001 ldrb.w r4, [sl, r1] + 8030af2: eb0a 0b01 add.w fp, sl, r1 + 8030af6: fa1f fa85 uxth.w sl, r5 + 8030afa: 940c str r4, [sp, #48] ; 0x30 + 8030afc: fb0a fc0c mul.w ip, sl, ip + 8030b00: f89b 4001 ldrb.w r4, [fp, #1] + 8030b04: ebcc 1a0a rsb sl, ip, sl, lsl #4 + 8030b08: eba0 000c sub.w r0, r0, ip + 8030b0c: 940d str r4, [sp, #52] ; 0x34 + 8030b0e: fa1f fa8a uxth.w sl, sl + 8030b12: b280 uxth r0, r0 + 8030b14: eba3 030a sub.w r3, r3, sl + 8030b18: fb08 f000 mul.w r0, r8, r0 + 8030b1c: b29b uxth r3, r3 + 8030b1e: fb09 0303 mla r3, r9, r3, r0 + 8030b22: 980c ldr r0, [sp, #48] ; 0x30 + 8030b24: fb0a 3300 mla r3, sl, r0, r3 + 8030b28: fb0c 3304 mla r3, ip, r4, r3 + 8030b2c: f3c3 2307 ubfx r3, r3, #8, #8 + 8030b30: 2b00 cmp r3, #0 + 8030b32: f000 80cc beq.w 8030cce <_ZN8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x6ee> + 8030b36: 9808 ldr r0, [sp, #32] + 8030b38: f1b9 0fff cmp.w r9, #255 ; 0xff + 8030b3c: 9c08 ldr r4, [sp, #32] + 8030b3e: eb00 0047 add.w r0, r0, r7, lsl #1 + 8030b42: f834 7017 ldrh.w r7, [r4, r7, lsl #1] + 8030b46: f000 80d5 beq.w 8030cf4 <_ZN8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x714> + 8030b4a: f427 6cfc bic.w ip, r7, #2016 ; 0x7e0 + 8030b4e: ea4f 0ae9 mov.w sl, r9, asr #3 + 8030b52: f407 67fc and.w r7, r7, #2016 ; 0x7e0 + 8030b56: fb0a fc0c mul.w ip, sl, ip + 8030b5a: fb09 f707 mul.w r7, r9, r7 + 8030b5e: ea06 195c and.w r9, r6, ip, lsr #5 + 8030b62: f60c 0c01 addw ip, ip, #2049 ; 0x801 + 8030b66: f107 0b20 add.w fp, r7, #32 + 8030b6a: 44cc add ip, r9 + 8030b6c: eb0b 2917 add.w r9, fp, r7, lsr #8 + 8030b70: ea06 1c5c and.w ip, r6, ip, lsr #5 + 8030b74: ea4f 2919 mov.w r9, r9, lsr #8 + 8030b78: f409 69fc and.w r9, r9, #2016 ; 0x7e0 + 8030b7c: ea4c 0909 orr.w r9, ip, r9 + 8030b80: f1b8 0fff cmp.w r8, #255 ; 0xff + 8030b84: 8847 ldrh r7, [r0, #2] + 8030b86: d019 beq.n 8030bbc <_ZN8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x5dc> + 8030b88: f427 6cfc bic.w ip, r7, #2016 ; 0x7e0 + 8030b8c: ea4f 0ae8 mov.w sl, r8, asr #3 + 8030b90: f407 67fc and.w r7, r7, #2016 ; 0x7e0 + 8030b94: fb0a fc0c mul.w ip, sl, ip + 8030b98: fb08 f807 mul.w r8, r8, r7 + 8030b9c: ea06 175c and.w r7, r6, ip, lsr #5 + 8030ba0: f60c 0c01 addw ip, ip, #2049 ; 0x801 + 8030ba4: f108 0b20 add.w fp, r8, #32 + 8030ba8: 44bc add ip, r7 + 8030baa: eb0b 2718 add.w r7, fp, r8, lsr #8 + 8030bae: ea06 1c5c and.w ip, r6, ip, lsr #5 + 8030bb2: 0a3f lsrs r7, r7, #8 + 8030bb4: f407 67fc and.w r7, r7, #2016 ; 0x7e0 + 8030bb8: ea4c 0707 orr.w r7, ip, r7 + 8030bbc: ea4f 4c09 mov.w ip, r9, lsl #16 + 8030bc0: f429 69fc bic.w r9, r9, #2016 ; 0x7e0 + 8030bc4: ea4f 4a07 mov.w sl, r7, lsl #16 + 8030bc8: f427 67fc bic.w r7, r7, #2016 ; 0x7e0 + 8030bcc: f00c 6cfc and.w ip, ip, #132120576 ; 0x7e00000 + 8030bd0: f00a 6afc and.w sl, sl, #132120576 ; 0x7e00000 + 8030bd4: ea4c 0909 orr.w r9, ip, r9 + 8030bd8: ea4a 0707 orr.w r7, sl, r7 + 8030bdc: 2d00 cmp r5, #0 + 8030bde: f000 808b beq.w 8030cf8 <_ZN8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x718> + 8030be2: f101 4100 add.w r1, r1, #2147483648 ; 0x80000000 + 8030be6: 3901 subs r1, #1 + 8030be8: 0049 lsls r1, r1, #1 + 8030bea: 3102 adds r1, #2 + 8030bec: eb00 0c01 add.w ip, r0, r1 + 8030bf0: 5a41 ldrh r1, [r0, r1] + 8030bf2: 980c ldr r0, [sp, #48] ; 0x30 + 8030bf4: 28ff cmp r0, #255 ; 0xff + 8030bf6: d019 beq.n 8030c2c <_ZN8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x64c> + 8030bf8: f421 60fc bic.w r0, r1, #2016 ; 0x7e0 + 8030bfc: 9c0c ldr r4, [sp, #48] ; 0x30 + 8030bfe: f401 61fc and.w r1, r1, #2016 ; 0x7e0 + 8030c02: ea4f 08e4 mov.w r8, r4, asr #3 + 8030c06: fb04 fa01 mul.w sl, r4, r1 + 8030c0a: fb08 f800 mul.w r8, r8, r0 + 8030c0e: f10a 0020 add.w r0, sl, #32 + 8030c12: ea06 1158 and.w r1, r6, r8, lsr #5 + 8030c16: f608 0801 addw r8, r8, #2049 ; 0x801 + 8030c1a: eb00 201a add.w r0, r0, sl, lsr #8 + 8030c1e: 4441 add r1, r8 + 8030c20: 0a00 lsrs r0, r0, #8 + 8030c22: ea06 1151 and.w r1, r6, r1, lsr #5 + 8030c26: f400 60fc and.w r0, r0, #2016 ; 0x7e0 + 8030c2a: 4301 orrs r1, r0 + 8030c2c: 9c0d ldr r4, [sp, #52] ; 0x34 + 8030c2e: f8bc 0002 ldrh.w r0, [ip, #2] + 8030c32: 2cff cmp r4, #255 ; 0xff + 8030c34: d01a beq.n 8030c6c <_ZN8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x68c> + 8030c36: f420 6cfc bic.w ip, r0, #2016 ; 0x7e0 + 8030c3a: f400 60fc and.w r0, r0, #2016 ; 0x7e0 + 8030c3e: ea4f 08e4 mov.w r8, r4, asr #3 + 8030c42: fb04 fa00 mul.w sl, r4, r0 + 8030c46: fb08 f80c mul.w r8, r8, ip + 8030c4a: f10a 0c20 add.w ip, sl, #32 + 8030c4e: ea06 1058 and.w r0, r6, r8, lsr #5 + 8030c52: f608 0801 addw r8, r8, #2049 ; 0x801 + 8030c56: eb0c 2c1a add.w ip, ip, sl, lsr #8 + 8030c5a: 4440 add r0, r8 + 8030c5c: ea4f 2c1c mov.w ip, ip, lsr #8 + 8030c60: ea06 1050 and.w r0, r6, r0, lsr #5 + 8030c64: f40c 6cfc and.w ip, ip, #2016 ; 0x7e0 + 8030c68: ea40 000c orr.w r0, r0, ip + 8030c6c: fb15 fc02 smulbb ip, r5, r2 + 8030c70: f1c5 0810 rsb r8, r5, #16 + 8030c74: ea4f 4a01 mov.w sl, r1, lsl #16 + 8030c78: f421 61fc bic.w r1, r1, #2016 ; 0x7e0 + 8030c7c: ea4f 0cec mov.w ip, ip, asr #3 + 8030c80: eba8 0802 sub.w r8, r8, r2 + 8030c84: ea4f 4b00 mov.w fp, r0, lsl #16 + 8030c88: f00a 6afc and.w sl, sl, #132120576 ; 0x7e00000 + 8030c8c: ebcc 0242 rsb r2, ip, r2, lsl #1 + 8030c90: f420 60fc bic.w r0, r0, #2016 ; 0x7e0 + 8030c94: eb0c 0848 add.w r8, ip, r8, lsl #1 + 8030c98: ea4a 0101 orr.w r1, sl, r1 + 8030c9c: 437a muls r2, r7 + 8030c9e: ebcc 0545 rsb r5, ip, r5, lsl #1 + 8030ca2: f00b 6bfc and.w fp, fp, #132120576 ; 0x7e00000 + 8030ca6: fb09 2208 mla r2, r9, r8, r2 + 8030caa: ea4b 0000 orr.w r0, fp, r0 + 8030cae: fb05 2201 mla r2, r5, r1, r2 + 8030cb2: fb0c 2200 mla r2, ip, r0, r2 + 8030cb6: 0d57 lsrs r7, r2, #21 + 8030cb8: 0952 lsrs r2, r2, #5 + 8030cba: f407 67fc and.w r7, r7, #2016 ; 0x7e0 + 8030cbe: f422 62fc bic.w r2, r2, #2016 ; 0x7e0 + 8030cc2: 433a orrs r2, r7 + 8030cc4: 2bff cmp r3, #255 ; 0xff + 8030cc6: b292 uxth r2, r2 + 8030cc8: d127 bne.n 8030d1a <_ZN8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x73a> + 8030cca: f8ae 2000 strh.w r2, [lr] + 8030cce: 9b1d ldr r3, [sp, #116] ; 0x74 + 8030cd0: f10e 0e02 add.w lr, lr, #2 + 8030cd4: 9a1f ldr r2, [sp, #124] ; 0x7c + 8030cd6: 4413 add r3, r2 + 8030cd8: 9a1e ldr r2, [sp, #120] ; 0x78 + 8030cda: 931d str r3, [sp, #116] ; 0x74 + 8030cdc: 9b20 ldr r3, [sp, #128] ; 0x80 + 8030cde: 441a add r2, r3 + 8030ce0: 9b0f ldr r3, [sp, #60] ; 0x3c + 8030ce2: 3b01 subs r3, #1 + 8030ce4: 921e str r2, [sp, #120] ; 0x78 + 8030ce6: 930f str r3, [sp, #60] ; 0x3c + 8030ce8: e627 b.n 803093a <_ZN8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x35a> + 8030cea: fb08 f000 mul.w r0, r8, r0 + 8030cee: fb09 0303 mla r3, r9, r3, r0 + 8030cf2: e71b b.n 8030b2c <_ZN8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x54c> + 8030cf4: 46b9 mov r9, r7 + 8030cf6: e743 b.n 8030b80 <_ZN8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x5a0> + 8030cf8: f1c2 0110 rsb r1, r2, #16 + 8030cfc: 437a muls r2, r7 + 8030cfe: fb09 2901 mla r9, r9, r1, r2 + 8030d02: ea4f 0949 mov.w r9, r9, lsl #1 + 8030d06: ea4f 5059 mov.w r0, r9, lsr #21 + 8030d0a: ea4f 1259 mov.w r2, r9, lsr #5 + 8030d0e: f400 60fc and.w r0, r0, #2016 ; 0x7e0 + 8030d12: f422 62fc bic.w r2, r2, #2016 ; 0x7e0 + 8030d16: 4302 orrs r2, r0 + 8030d18: e7d4 b.n 8030cc4 <_ZN8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x6e4> + 8030d1a: f8be 7000 ldrh.w r7, [lr] + 8030d1e: 43db mvns r3, r3 + 8030d20: 4c1b ldr r4, [pc, #108] ; (8030d90 <_ZN8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x7b0>) + 8030d22: 1238 asrs r0, r7, #8 + 8030d24: fa5f fc83 uxtb.w ip, r3 + 8030d28: f000 00f8 and.w r0, r0, #248 ; 0xf8 + 8030d2c: 10fd asrs r5, r7, #3 + 8030d2e: 00fb lsls r3, r7, #3 + 8030d30: fb00 f00c mul.w r0, r0, ip + 8030d34: f005 05fc and.w r5, r5, #252 ; 0xfc + 8030d38: b2db uxtb r3, r3 + 8030d3a: fb05 f10c mul.w r1, r5, ip + 8030d3e: 1c45 adds r5, r0, #1 + 8030d40: fb03 f30c mul.w r3, r3, ip + 8030d44: eb05 2010 add.w r0, r5, r0, lsr #8 + 8030d48: 1215 asrs r5, r2, #8 + 8030d4a: f025 0507 bic.w r5, r5, #7 + 8030d4e: eb05 2010 add.w r0, r5, r0, lsr #8 + 8030d52: 1c4d adds r5, r1, #1 + 8030d54: eb05 2511 add.w r5, r5, r1, lsr #8 + 8030d58: 10d1 asrs r1, r2, #3 + 8030d5a: b2c0 uxtb r0, r0 + 8030d5c: f021 0103 bic.w r1, r1, #3 + 8030d60: 00d2 lsls r2, r2, #3 + 8030d62: ea04 2000 and.w r0, r4, r0, lsl #8 + 8030d66: eb01 2115 add.w r1, r1, r5, lsr #8 + 8030d6a: 00c9 lsls r1, r1, #3 + 8030d6c: f401 61fc and.w r1, r1, #2016 ; 0x7e0 + 8030d70: 4308 orrs r0, r1 + 8030d72: 1c59 adds r1, r3, #1 + 8030d74: eb01 2313 add.w r3, r1, r3, lsr #8 + 8030d78: eb02 2313 add.w r3, r2, r3, lsr #8 + 8030d7c: f3c3 03c4 ubfx r3, r3, #3, #5 + 8030d80: 4318 orrs r0, r3 + 8030d82: f8ae 0000 strh.w r0, [lr] + 8030d86: e7a2 b.n 8030cce <_ZN8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x6ee> + 8030d88: b013 add sp, #76 ; 0x4c + 8030d8a: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 8030d8e: bf00 nop + 8030d90: fffff800 .word 0xfffff800 + +08030d94 <_ZNK8touchgfx8LCD16bpp52TextureMapper_RGB565_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtssiihhh>: + 8030d94: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} + 8030d98: e9dd 4509 ldrd r4, r5, [sp, #36] ; 0x24 + 8030d9c: f9bd a020 ldrsh.w sl, [sp, #32] + 8030da0: fb05 4c03 mla ip, r5, r3, r4 + 8030da4: 2d00 cmp r5, #0 + 8030da6: f89d 902c ldrb.w r9, [sp, #44] ; 0x2c + 8030daa: f89d 7030 ldrb.w r7, [sp, #48] ; 0x30 + 8030dae: eb02 0e4c add.w lr, r2, ip, lsl #1 + 8030db2: f89d 6034 ldrb.w r6, [sp, #52] ; 0x34 + 8030db6: 8808 ldrh r0, [r1, #0] + 8030db8: f2c0 80a7 blt.w 8030f0a <_ZNK8touchgfx8LCD16bpp52TextureMapper_RGB565_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtssiihhh+0x176> + 8030dbc: 45aa cmp sl, r5 + 8030dbe: f340 80a4 ble.w 8030f0a <_ZNK8touchgfx8LCD16bpp52TextureMapper_RGB565_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtssiihhh+0x176> + 8030dc2: 2c00 cmp r4, #0 + 8030dc4: f2c0 809f blt.w 8030f06 <_ZNK8touchgfx8LCD16bpp52TextureMapper_RGB565_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtssiihhh+0x172> + 8030dc8: 42a3 cmp r3, r4 + 8030dca: f340 809c ble.w 8030f06 <_ZNK8touchgfx8LCD16bpp52TextureMapper_RGB565_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtssiihhh+0x172> + 8030dce: f832 801c ldrh.w r8, [r2, ip, lsl #1] + 8030dd2: 1c62 adds r2, r4, #1 + 8030dd4: f100 809c bmi.w 8030f10 <_ZNK8touchgfx8LCD16bpp52TextureMapper_RGB565_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtssiihhh+0x17c> + 8030dd8: 4293 cmp r3, r2 + 8030dda: f340 8099 ble.w 8030f10 <_ZNK8touchgfx8LCD16bpp52TextureMapper_RGB565_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtssiihhh+0x17c> + 8030dde: f1b9 0f00 cmp.w r9, #0 + 8030de2: f000 8095 beq.w 8030f10 <_ZNK8touchgfx8LCD16bpp52TextureMapper_RGB565_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtssiihhh+0x17c> + 8030de6: f8be c002 ldrh.w ip, [lr, #2] + 8030dea: 3501 adds r5, #1 + 8030dec: f100 8094 bmi.w 8030f18 <_ZNK8touchgfx8LCD16bpp52TextureMapper_RGB565_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtssiihhh+0x184> + 8030df0: 45aa cmp sl, r5 + 8030df2: f340 8091 ble.w 8030f18 <_ZNK8touchgfx8LCD16bpp52TextureMapper_RGB565_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtssiihhh+0x184> + 8030df6: 2f00 cmp r7, #0 + 8030df8: f000 808e beq.w 8030f18 <_ZNK8touchgfx8LCD16bpp52TextureMapper_RGB565_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtssiihhh+0x184> + 8030dfc: 2c00 cmp r4, #0 + 8030dfe: f2c0 8089 blt.w 8030f14 <_ZNK8touchgfx8LCD16bpp52TextureMapper_RGB565_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtssiihhh+0x180> + 8030e02: 42a3 cmp r3, r4 + 8030e04: f340 8086 ble.w 8030f14 <_ZNK8touchgfx8LCD16bpp52TextureMapper_RGB565_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtssiihhh+0x180> + 8030e08: f83e 5013 ldrh.w r5, [lr, r3, lsl #1] + 8030e0c: 3401 adds r4, #1 + 8030e0e: f100 8086 bmi.w 8030f1e <_ZNK8touchgfx8LCD16bpp52TextureMapper_RGB565_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtssiihhh+0x18a> + 8030e12: 42a3 cmp r3, r4 + 8030e14: f340 8083 ble.w 8030f1e <_ZNK8touchgfx8LCD16bpp52TextureMapper_RGB565_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtssiihhh+0x18a> + 8030e18: f1b9 0f00 cmp.w r9, #0 + 8030e1c: d07f beq.n 8030f1e <_ZNK8touchgfx8LCD16bpp52TextureMapper_RGB565_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtssiihhh+0x18a> + 8030e1e: 3301 adds r3, #1 + 8030e20: f83e 3013 ldrh.w r3, [lr, r3, lsl #1] + 8030e24: ea4f 4408 mov.w r4, r8, lsl #16 + 8030e28: f428 68fc bic.w r8, r8, #2016 ; 0x7e0 + 8030e2c: fb19 fe07 smulbb lr, r9, r7 + 8030e30: f1c7 0210 rsb r2, r7, #16 + 8030e34: f004 64fc and.w r4, r4, #132120576 ; 0x7e00000 + 8030e38: f3ce 0ec7 ubfx lr, lr, #3, #8 + 8030e3c: eba2 0209 sub.w r2, r2, r9 + 8030e40: ea44 0808 orr.w r8, r4, r8 + 8030e44: ea4f 440c mov.w r4, ip, lsl #16 + 8030e48: f42c 6cfc bic.w ip, ip, #2016 ; 0x7e0 + 8030e4c: eb0e 0242 add.w r2, lr, r2, lsl #1 + 8030e50: f004 64fc and.w r4, r4, #132120576 ; 0x7e00000 + 8030e54: ebce 0747 rsb r7, lr, r7, lsl #1 + 8030e58: ea44 0c0c orr.w ip, r4, ip + 8030e5c: ebce 0449 rsb r4, lr, r9, lsl #1 + 8030e60: fb04 f40c mul.w r4, r4, ip + 8030e64: fb02 4808 mla r8, r2, r8, r4 + 8030e68: 041a lsls r2, r3, #16 + 8030e6a: f423 63fc bic.w r3, r3, #2016 ; 0x7e0 + 8030e6e: b2b4 uxth r4, r6 + 8030e70: f002 62fc and.w r2, r2, #132120576 ; 0x7e00000 + 8030e74: 43f6 mvns r6, r6 + 8030e76: 4313 orrs r3, r2 + 8030e78: 042a lsls r2, r5, #16 + 8030e7a: f425 65fc bic.w r5, r5, #2016 ; 0x7e0 + 8030e7e: b2f6 uxtb r6, r6 + 8030e80: f002 62fc and.w r2, r2, #132120576 ; 0x7e00000 + 8030e84: fb0e 8303 mla r3, lr, r3, r8 + 8030e88: 432a orrs r2, r5 + 8030e8a: fb07 3202 mla r2, r7, r2, r3 + 8030e8e: 10c7 asrs r7, r0, #3 + 8030e90: 0d53 lsrs r3, r2, #21 + 8030e92: f007 07fc and.w r7, r7, #252 ; 0xfc + 8030e96: 0952 lsrs r2, r2, #5 + 8030e98: fb17 f706 smulbb r7, r7, r6 + 8030e9c: f403 63fc and.w r3, r3, #2016 ; 0x7e0 + 8030ea0: f422 62fc bic.w r2, r2, #2016 ; 0x7e0 + 8030ea4: 431a orrs r2, r3 + 8030ea6: b293 uxth r3, r2 + 8030ea8: 1202 asrs r2, r0, #8 + 8030eaa: 121d asrs r5, r3, #8 + 8030eac: f002 02f8 and.w r2, r2, #248 ; 0xf8 + 8030eb0: 00c0 lsls r0, r0, #3 + 8030eb2: f005 05f8 and.w r5, r5, #248 ; 0xf8 + 8030eb6: fb12 f206 smulbb r2, r2, r6 + 8030eba: b2c0 uxtb r0, r0 + 8030ebc: fb05 2504 mla r5, r5, r4, r2 + 8030ec0: 10da asrs r2, r3, #3 + 8030ec2: fb10 f006 smulbb r0, r0, r6 + 8030ec6: 00db lsls r3, r3, #3 + 8030ec8: b2ad uxth r5, r5 + 8030eca: f002 02fc and.w r2, r2, #252 ; 0xfc + 8030ece: b2db uxtb r3, r3 + 8030ed0: fb02 7204 mla r2, r2, r4, r7 + 8030ed4: fb03 0004 mla r0, r3, r4, r0 + 8030ed8: 1c6b adds r3, r5, #1 + 8030eda: b292 uxth r2, r2 + 8030edc: b280 uxth r0, r0 + 8030ede: eb03 2515 add.w r5, r3, r5, lsr #8 + 8030ee2: 1c43 adds r3, r0, #1 + 8030ee4: f405 4578 and.w r5, r5, #63488 ; 0xf800 + 8030ee8: eb03 2310 add.w r3, r3, r0, lsr #8 + 8030eec: 1c50 adds r0, r2, #1 + 8030eee: eb00 2212 add.w r2, r0, r2, lsr #8 + 8030ef2: f3c3 23c4 ubfx r3, r3, #11, #5 + 8030ef6: 0952 lsrs r2, r2, #5 + 8030ef8: 432b orrs r3, r5 + 8030efa: f402 62fc and.w r2, r2, #2016 ; 0x7e0 + 8030efe: 4313 orrs r3, r2 + 8030f00: 800b strh r3, [r1, #0] + 8030f02: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + 8030f06: 4680 mov r8, r0 + 8030f08: e763 b.n 8030dd2 <_ZNK8touchgfx8LCD16bpp52TextureMapper_RGB565_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtssiihhh+0x3e> + 8030f0a: 4684 mov ip, r0 + 8030f0c: 4680 mov r8, r0 + 8030f0e: e76c b.n 8030dea <_ZNK8touchgfx8LCD16bpp52TextureMapper_RGB565_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtssiihhh+0x56> + 8030f10: 4684 mov ip, r0 + 8030f12: e76a b.n 8030dea <_ZNK8touchgfx8LCD16bpp52TextureMapper_RGB565_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtssiihhh+0x56> + 8030f14: 4605 mov r5, r0 + 8030f16: e779 b.n 8030e0c <_ZNK8touchgfx8LCD16bpp52TextureMapper_RGB565_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtssiihhh+0x78> + 8030f18: 4603 mov r3, r0 + 8030f1a: 4605 mov r5, r0 + 8030f1c: e782 b.n 8030e24 <_ZNK8touchgfx8LCD16bpp52TextureMapper_RGB565_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtssiihhh+0x90> + 8030f1e: 4603 mov r3, r0 + 8030f20: e780 b.n 8030e24 <_ZNK8touchgfx8LCD16bpp52TextureMapper_RGB565_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtssiihhh+0x90> + +08030f22 <_ZN8touchgfx8LCD16bpp52TextureMapper_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff>: + 8030f22: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8030f26: b093 sub sp, #76 ; 0x4c + 8030f28: 461d mov r5, r3 + 8030f2a: 9210 str r2, [sp, #64] ; 0x40 + 8030f2c: 9b21 ldr r3, [sp, #132] ; 0x84 + 8030f2e: f89d 2094 ldrb.w r2, [sp, #148] ; 0x94 + 8030f32: 910a str r1, [sp, #40] ; 0x28 + 8030f34: 920b str r2, [sp, #44] ; 0x2c + 8030f36: 6859 ldr r1, [r3, #4] + 8030f38: 681b ldr r3, [r3, #0] + 8030f3a: 9011 str r0, [sp, #68] ; 0x44 + 8030f3c: e9dd 2722 ldrd r2, r7, [sp, #136] ; 0x88 + 8030f40: e9dd 461d ldrd r4, r6, [sp, #116] ; 0x74 + 8030f44: fb01 2707 mla r7, r1, r7, r2 + 8030f48: eb03 0347 add.w r3, r3, r7, lsl #1 + 8030f4c: 9307 str r3, [sp, #28] + 8030f4e: 9b24 ldr r3, [sp, #144] ; 0x90 + 8030f50: 681b ldr r3, [r3, #0] + 8030f52: 9309 str r3, [sp, #36] ; 0x24 + 8030f54: 9b0b ldr r3, [sp, #44] ; 0x2c + 8030f56: 43db mvns r3, r3 + 8030f58: b2db uxtb r3, r3 + 8030f5a: 9308 str r3, [sp, #32] + 8030f5c: 9b0a ldr r3, [sp, #40] ; 0x28 + 8030f5e: 2b00 cmp r3, #0 + 8030f60: dc03 bgt.n 8030f6a <_ZN8touchgfx8LCD16bpp52TextureMapper_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x48> + 8030f62: 9b10 ldr r3, [sp, #64] ; 0x40 + 8030f64: 2b00 cmp r3, #0 + 8030f66: f340 8205 ble.w 8031374 <_ZN8touchgfx8LCD16bpp52TextureMapper_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x452> + 8030f6a: 9b24 ldr r3, [sp, #144] ; 0x90 + 8030f6c: f9b3 1008 ldrsh.w r1, [r3, #8] + 8030f70: f9b3 200c ldrsh.w r2, [r3, #12] + 8030f74: 1e48 subs r0, r1, #1 + 8030f76: f102 3cff add.w ip, r2, #4294967295 + 8030f7a: 2d00 cmp r5, #0 + 8030f7c: f340 80da ble.w 8031134 <_ZN8touchgfx8LCD16bpp52TextureMapper_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x212> + 8030f80: ea5f 4e24 movs.w lr, r4, asr #16 + 8030f84: ea4f 4326 mov.w r3, r6, asr #16 + 8030f88: d406 bmi.n 8030f98 <_ZN8touchgfx8LCD16bpp52TextureMapper_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x76> + 8030f8a: 4586 cmp lr, r0 + 8030f8c: da04 bge.n 8030f98 <_ZN8touchgfx8LCD16bpp52TextureMapper_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x76> + 8030f8e: 2b00 cmp r3, #0 + 8030f90: db02 blt.n 8030f98 <_ZN8touchgfx8LCD16bpp52TextureMapper_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x76> + 8030f92: 4563 cmp r3, ip + 8030f94: f2c0 80cf blt.w 8031136 <_ZN8touchgfx8LCD16bpp52TextureMapper_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x214> + 8030f98: f11e 0e01 adds.w lr, lr, #1 + 8030f9c: f100 80c1 bmi.w 8031122 <_ZN8touchgfx8LCD16bpp52TextureMapper_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x200> + 8030fa0: 4571 cmp r1, lr + 8030fa2: f2c0 80be blt.w 8031122 <_ZN8touchgfx8LCD16bpp52TextureMapper_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x200> + 8030fa6: 3301 adds r3, #1 + 8030fa8: f100 80bb bmi.w 8031122 <_ZN8touchgfx8LCD16bpp52TextureMapper_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x200> + 8030fac: 429a cmp r2, r3 + 8030fae: f2c0 80b8 blt.w 8031122 <_ZN8touchgfx8LCD16bpp52TextureMapper_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x200> + 8030fb2: 46a9 mov r9, r5 + 8030fb4: f8dd 801c ldr.w r8, [sp, #28] + 8030fb8: f1b9 0f00 cmp.w r9, #0 + 8030fbc: f340 80d8 ble.w 8031170 <_ZN8touchgfx8LCD16bpp52TextureMapper_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x24e> + 8030fc0: 9b24 ldr r3, [sp, #144] ; 0x90 + 8030fc2: 1421 asrs r1, r4, #16 + 8030fc4: ea4f 4026 mov.w r0, r6, asr #16 + 8030fc8: f3c4 3203 ubfx r2, r4, #12, #4 + 8030fcc: f3c6 3c03 ubfx ip, r6, #12, #4 + 8030fd0: e9d3 e302 ldrd lr, r3, [r3, #8] + 8030fd4: f100 8112 bmi.w 80311fc <_ZN8touchgfx8LCD16bpp52TextureMapper_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x2da> + 8030fd8: f10e 3aff add.w sl, lr, #4294967295 + 8030fdc: 4551 cmp r1, sl + 8030fde: f280 810d bge.w 80311fc <_ZN8touchgfx8LCD16bpp52TextureMapper_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x2da> + 8030fe2: 2800 cmp r0, #0 + 8030fe4: f2c0 810a blt.w 80311fc <_ZN8touchgfx8LCD16bpp52TextureMapper_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x2da> + 8030fe8: f103 3aff add.w sl, r3, #4294967295 + 8030fec: 4550 cmp r0, sl + 8030fee: f280 8105 bge.w 80311fc <_ZN8touchgfx8LCD16bpp52TextureMapper_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x2da> + 8030ff2: fa0f f38e sxth.w r3, lr + 8030ff6: fb00 1103 mla r1, r0, r3, r1 + 8030ffa: 9809 ldr r0, [sp, #36] ; 0x24 + 8030ffc: eb00 0a41 add.w sl, r0, r1, lsl #1 + 8031000: f830 e011 ldrh.w lr, [r0, r1, lsl #1] + 8031004: f8ba 1002 ldrh.w r1, [sl, #2] + 8031008: f1bc 0f00 cmp.w ip, #0 + 803100c: d007 beq.n 803101e <_ZN8touchgfx8LCD16bpp52TextureMapper_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0xfc> + 803100e: 005b lsls r3, r3, #1 + 8031010: eb0a 0003 add.w r0, sl, r3 + 8031014: f83a 3003 ldrh.w r3, [sl, r3] + 8031018: 930c str r3, [sp, #48] ; 0x30 + 803101a: 8843 ldrh r3, [r0, #2] + 803101c: 930d str r3, [sp, #52] ; 0x34 + 803101e: ea4f 400e mov.w r0, lr, lsl #16 + 8031022: f42e 6efc bic.w lr, lr, #2016 ; 0x7e0 + 8031026: fb12 f30c smulbb r3, r2, ip + 803102a: ea4f 4a01 mov.w sl, r1, lsl #16 + 803102e: f000 60fc and.w r0, r0, #132120576 ; 0x7e00000 + 8031032: f421 61fc bic.w r1, r1, #2016 ; 0x7e0 + 8031036: 10db asrs r3, r3, #3 + 8031038: f00a 6afc and.w sl, sl, #132120576 ; 0x7e00000 + 803103c: ea40 000e orr.w r0, r0, lr + 8031040: f1cc 0e10 rsb lr, ip, #16 + 8031044: ea4a 0101 orr.w r1, sl, r1 + 8031048: 9f08 ldr r7, [sp, #32] + 803104a: ebae 0e02 sub.w lr, lr, r2 + 803104e: ebc3 0242 rsb r2, r3, r2, lsl #1 + 8031052: eb03 0e4e add.w lr, r3, lr, lsl #1 + 8031056: 4351 muls r1, r2 + 8031058: 9a0d ldr r2, [sp, #52] ; 0x34 + 803105a: fb0e 1e00 mla lr, lr, r0, r1 + 803105e: 990c ldr r1, [sp, #48] ; 0x30 + 8031060: 0410 lsls r0, r2, #16 + 8031062: f422 62fc bic.w r2, r2, #2016 ; 0x7e0 + 8031066: f000 60fc and.w r0, r0, #132120576 ; 0x7e00000 + 803106a: 4310 orrs r0, r2 + 803106c: 9a0c ldr r2, [sp, #48] ; 0x30 + 803106e: 0412 lsls r2, r2, #16 + 8031070: fb03 e000 mla r0, r3, r0, lr + 8031074: f421 6efc bic.w lr, r1, #2016 ; 0x7e0 + 8031078: ebc3 034c rsb r3, r3, ip, lsl #1 + 803107c: f002 62fc and.w r2, r2, #132120576 ; 0x7e00000 + 8031080: ea42 020e orr.w r2, r2, lr + 8031084: fb03 0302 mla r3, r3, r2, r0 + 8031088: f8b8 0000 ldrh.w r0, [r8] + 803108c: 0d5a lsrs r2, r3, #21 + 803108e: 095b lsrs r3, r3, #5 + 8031090: f402 62fc and.w r2, r2, #2016 ; 0x7e0 + 8031094: 1201 asrs r1, r0, #8 + 8031096: f423 63fc bic.w r3, r3, #2016 ; 0x7e0 + 803109a: ea4f 0ee0 mov.w lr, r0, asr #3 + 803109e: f001 01f8 and.w r1, r1, #248 ; 0xf8 + 80310a2: 00c0 lsls r0, r0, #3 + 80310a4: 4313 orrs r3, r2 + 80310a6: f8bd 202c ldrh.w r2, [sp, #44] ; 0x2c + 80310aa: fb11 f107 smulbb r1, r1, r7 + 80310ae: b2c0 uxtb r0, r0 + 80310b0: b29b uxth r3, r3 + 80310b2: f00e 0efc and.w lr, lr, #252 ; 0xfc + 80310b6: fb10 f007 smulbb r0, r0, r7 + 80310ba: fb1e fe07 smulbb lr, lr, r7 + 80310be: ea4f 2c23 mov.w ip, r3, asr #8 + 80310c2: f00c 0cf8 and.w ip, ip, #248 ; 0xf8 + 80310c6: fb0c 1c02 mla ip, ip, r2, r1 + 80310ca: 10d9 asrs r1, r3, #3 + 80310cc: 00db lsls r3, r3, #3 + 80310ce: fa1f fc8c uxth.w ip, ip + 80310d2: f001 01fc and.w r1, r1, #252 ; 0xfc + 80310d6: b2db uxtb r3, r3 + 80310d8: fb01 e102 mla r1, r1, r2, lr + 80310dc: fb03 0302 mla r3, r3, r2, r0 + 80310e0: b289 uxth r1, r1 + 80310e2: b29a uxth r2, r3 + 80310e4: f10c 0301 add.w r3, ip, #1 + 80310e8: eb03 2c1c add.w ip, r3, ip, lsr #8 + 80310ec: 1c53 adds r3, r2, #1 + 80310ee: eb03 2312 add.w r3, r3, r2, lsr #8 + 80310f2: 1c4a adds r2, r1, #1 + 80310f4: f40c 4c78 and.w ip, ip, #63488 ; 0xf800 + 80310f8: eb02 2111 add.w r1, r2, r1, lsr #8 + 80310fc: f3c3 23c4 ubfx r3, r3, #11, #5 + 8031100: 0949 lsrs r1, r1, #5 + 8031102: ea43 030c orr.w r3, r3, ip + 8031106: f401 61fc and.w r1, r1, #2016 ; 0x7e0 + 803110a: 430b orrs r3, r1 + 803110c: f8a8 3000 strh.w r3, [r8] + 8031110: 9b1f ldr r3, [sp, #124] ; 0x7c + 8031112: f108 0802 add.w r8, r8, #2 + 8031116: f109 39ff add.w r9, r9, #4294967295 + 803111a: 441c add r4, r3 + 803111c: 9b20 ldr r3, [sp, #128] ; 0x80 + 803111e: 441e add r6, r3 + 8031120: e74a b.n 8030fb8 <_ZN8touchgfx8LCD16bpp52TextureMapper_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x96> + 8031122: 9b1f ldr r3, [sp, #124] ; 0x7c + 8031124: 3d01 subs r5, #1 + 8031126: 441c add r4, r3 + 8031128: 9b20 ldr r3, [sp, #128] ; 0x80 + 803112a: 441e add r6, r3 + 803112c: 9b07 ldr r3, [sp, #28] + 803112e: 3302 adds r3, #2 + 8031130: 9307 str r3, [sp, #28] + 8031132: e722 b.n 8030f7a <_ZN8touchgfx8LCD16bpp52TextureMapper_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x58> + 8031134: d022 beq.n 803117c <_ZN8touchgfx8LCD16bpp52TextureMapper_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x25a> + 8031136: 1e6b subs r3, r5, #1 + 8031138: 981f ldr r0, [sp, #124] ; 0x7c + 803113a: fb00 4003 mla r0, r0, r3, r4 + 803113e: 1400 asrs r0, r0, #16 + 8031140: f53f af37 bmi.w 8030fb2 <_ZN8touchgfx8LCD16bpp52TextureMapper_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x90> + 8031144: 3901 subs r1, #1 + 8031146: 4288 cmp r0, r1 + 8031148: f6bf af33 bge.w 8030fb2 <_ZN8touchgfx8LCD16bpp52TextureMapper_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x90> + 803114c: 9920 ldr r1, [sp, #128] ; 0x80 + 803114e: fb01 6303 mla r3, r1, r3, r6 + 8031152: 141b asrs r3, r3, #16 + 8031154: f53f af2d bmi.w 8030fb2 <_ZN8touchgfx8LCD16bpp52TextureMapper_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x90> + 8031158: 3a01 subs r2, #1 + 803115a: 4293 cmp r3, r2 + 803115c: f6bf af29 bge.w 8030fb2 <_ZN8touchgfx8LCD16bpp52TextureMapper_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x90> + 8031160: 46a8 mov r8, r5 + 8031162: f8dd 901c ldr.w r9, [sp, #28] + 8031166: f8bd a02c ldrh.w sl, [sp, #44] ; 0x2c + 803116a: f1b8 0f00 cmp.w r8, #0 + 803116e: dc60 bgt.n 8031232 <_ZN8touchgfx8LCD16bpp52TextureMapper_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x310> + 8031170: 9b07 ldr r3, [sp, #28] + 8031172: ea25 75e5 bic.w r5, r5, r5, asr #31 + 8031176: eb03 0345 add.w r3, r3, r5, lsl #1 + 803117a: 9307 str r3, [sp, #28] + 803117c: 9b0a ldr r3, [sp, #40] ; 0x28 + 803117e: 2b00 cmp r3, #0 + 8031180: f340 80f8 ble.w 8031374 <_ZN8touchgfx8LCD16bpp52TextureMapper_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x452> + 8031184: eeb7 7a00 vmov.f32 s14, #112 ; 0x3f800000 1.0 + 8031188: 9b1c ldr r3, [sp, #112] ; 0x70 + 803118a: ee30 0a04 vadd.f32 s0, s0, s8 + 803118e: ee70 0aa4 vadd.f32 s1, s1, s9 + 8031192: eef0 6a62 vmov.f32 s13, s5 + 8031196: eec7 7a00 vdiv.f32 s15, s14, s0 + 803119a: ee31 1a05 vadd.f32 s2, s2, s10 + 803119e: eefe 6ac8 vcvt.s32.f32 s13, s13, #16 + 80311a2: ee16 4a90 vmov r4, s13 + 80311a6: eef0 6a43 vmov.f32 s13, s6 + 80311aa: eefe 6ac8 vcvt.s32.f32 s13, s13, #16 + 80311ae: ee16 6a90 vmov r6, s13 + 80311b2: ee20 7aa7 vmul.f32 s14, s1, s15 + 80311b6: ee61 7a27 vmul.f32 s15, s2, s15 + 80311ba: ee77 2a62 vsub.f32 s5, s14, s5 + 80311be: ee37 3ac3 vsub.f32 s6, s15, s6 + 80311c2: eefe 2ac8 vcvt.s32.f32 s5, s5, #16 + 80311c6: eebe 3ac8 vcvt.s32.f32 s6, s6, #16 + 80311ca: ee12 2a90 vmov r2, s5 + 80311ce: eef0 2a47 vmov.f32 s5, s14 + 80311d2: fb92 f3f3 sdiv r3, r2, r3 + 80311d6: ee13 2a10 vmov r2, s6 + 80311da: 931f str r3, [sp, #124] ; 0x7c + 80311dc: 9b1c ldr r3, [sp, #112] ; 0x70 + 80311de: eeb0 3a67 vmov.f32 s6, s15 + 80311e2: fb92 f3f3 sdiv r3, r2, r3 + 80311e6: 9320 str r3, [sp, #128] ; 0x80 + 80311e8: 9b0a ldr r3, [sp, #40] ; 0x28 + 80311ea: 9a10 ldr r2, [sp, #64] ; 0x40 + 80311ec: 3b01 subs r3, #1 + 80311ee: 930a str r3, [sp, #40] ; 0x28 + 80311f0: bf08 it eq + 80311f2: 4615 moveq r5, r2 + 80311f4: 9b1c ldr r3, [sp, #112] ; 0x70 + 80311f6: bf18 it ne + 80311f8: 461d movne r5, r3 + 80311fa: e6af b.n 8030f5c <_ZN8touchgfx8LCD16bpp52TextureMapper_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x3a> + 80311fc: f111 0a01 adds.w sl, r1, #1 + 8031200: d486 bmi.n 8031110 <_ZN8touchgfx8LCD16bpp52TextureMapper_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1ee> + 8031202: 45d6 cmp lr, sl + 8031204: db84 blt.n 8031110 <_ZN8touchgfx8LCD16bpp52TextureMapper_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1ee> + 8031206: f110 0a01 adds.w sl, r0, #1 + 803120a: d481 bmi.n 8031110 <_ZN8touchgfx8LCD16bpp52TextureMapper_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1ee> + 803120c: 4553 cmp r3, sl + 803120e: f6ff af7f blt.w 8031110 <_ZN8touchgfx8LCD16bpp52TextureMapper_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1ee> + 8031212: 9f0b ldr r7, [sp, #44] ; 0x2c + 8031214: b21b sxth r3, r3 + 8031216: 9101 str r1, [sp, #4] + 8031218: 4641 mov r1, r8 + 803121a: 9300 str r3, [sp, #0] + 803121c: fa0f f38e sxth.w r3, lr + 8031220: e9cd 0202 strd r0, r2, [sp, #8] + 8031224: e9cd c704 strd ip, r7, [sp, #16] + 8031228: 9a09 ldr r2, [sp, #36] ; 0x24 + 803122a: 9811 ldr r0, [sp, #68] ; 0x44 + 803122c: f7ff fdb2 bl 8030d94 <_ZNK8touchgfx8LCD16bpp52TextureMapper_RGB565_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtssiihhh> + 8031230: e76e b.n 8031110 <_ZN8touchgfx8LCD16bpp52TextureMapper_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1ee> + 8031232: 9b24 ldr r3, [sp, #144] ; 0x90 + 8031234: 1430 asrs r0, r6, #16 + 8031236: 9f09 ldr r7, [sp, #36] ; 0x24 + 8031238: f3c6 3e03 ubfx lr, r6, #12, #4 + 803123c: f9b3 1008 ldrsh.w r1, [r3, #8] + 8031240: 1423 asrs r3, r4, #16 + 8031242: f3c4 3203 ubfx r2, r4, #12, #4 + 8031246: fb01 3000 mla r0, r1, r0, r3 + 803124a: 9b09 ldr r3, [sp, #36] ; 0x24 + 803124c: eb03 0340 add.w r3, r3, r0, lsl #1 + 8031250: f837 c010 ldrh.w ip, [r7, r0, lsl #1] + 8031254: 8858 ldrh r0, [r3, #2] + 8031256: f1be 0f00 cmp.w lr, #0 + 803125a: d00b beq.n 8031274 <_ZN8touchgfx8LCD16bpp52TextureMapper_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x352> + 803125c: f101 4100 add.w r1, r1, #2147483648 ; 0x80000000 + 8031260: 3901 subs r1, #1 + 8031262: 0049 lsls r1, r1, #1 + 8031264: 3102 adds r1, #2 + 8031266: eb03 0b01 add.w fp, r3, r1 + 803126a: 5a5b ldrh r3, [r3, r1] + 803126c: 930e str r3, [sp, #56] ; 0x38 + 803126e: f8bb 3002 ldrh.w r3, [fp, #2] + 8031272: 930f str r3, [sp, #60] ; 0x3c + 8031274: ea4f 410c mov.w r1, ip, lsl #16 + 8031278: f42c 6cfc bic.w ip, ip, #2016 ; 0x7e0 + 803127c: fb12 f30e smulbb r3, r2, lr + 8031280: ea4f 4b00 mov.w fp, r0, lsl #16 + 8031284: f001 61fc and.w r1, r1, #132120576 ; 0x7e00000 + 8031288: f420 60fc bic.w r0, r0, #2016 ; 0x7e0 + 803128c: 10db asrs r3, r3, #3 + 803128e: f00b 6bfc and.w fp, fp, #132120576 ; 0x7e00000 + 8031292: ea41 010c orr.w r1, r1, ip + 8031296: f1ce 0c10 rsb ip, lr, #16 + 803129a: ea4b 0000 orr.w r0, fp, r0 + 803129e: 9f08 ldr r7, [sp, #32] + 80312a0: ebac 0c02 sub.w ip, ip, r2 + 80312a4: ebc3 0242 rsb r2, r3, r2, lsl #1 + 80312a8: f108 38ff add.w r8, r8, #4294967295 + 80312ac: 4350 muls r0, r2 + 80312ae: eb03 0c4c add.w ip, r3, ip, lsl #1 + 80312b2: 9a0f ldr r2, [sp, #60] ; 0x3c + 80312b4: fb0c 0c01 mla ip, ip, r1, r0 + 80312b8: 980e ldr r0, [sp, #56] ; 0x38 + 80312ba: ea4f 4b02 mov.w fp, r2, lsl #16 + 80312be: f422 61fc bic.w r1, r2, #2016 ; 0x7e0 + 80312c2: 9a0e ldr r2, [sp, #56] ; 0x38 + 80312c4: f420 60fc bic.w r0, r0, #2016 ; 0x7e0 + 80312c8: f00b 6bfc and.w fp, fp, #132120576 ; 0x7e00000 + 80312cc: 0412 lsls r2, r2, #16 + 80312ce: ea4b 0101 orr.w r1, fp, r1 + 80312d2: f002 62fc and.w r2, r2, #132120576 ; 0x7e00000 + 80312d6: fb03 c101 mla r1, r3, r1, ip + 80312da: ebc3 034e rsb r3, r3, lr, lsl #1 + 80312de: 4302 orrs r2, r0 + 80312e0: fb03 1202 mla r2, r3, r2, r1 + 80312e4: ea4f 5b52 mov.w fp, r2, lsr #21 + 80312e8: 0952 lsrs r2, r2, #5 + 80312ea: f40b 6bfc and.w fp, fp, #2016 ; 0x7e0 + 80312ee: f422 63fc bic.w r3, r2, #2016 ; 0x7e0 + 80312f2: f8b9 2000 ldrh.w r2, [r9] + 80312f6: ea4b 0303 orr.w r3, fp, r3 + 80312fa: 1211 asrs r1, r2, #8 + 80312fc: ea4f 0ce2 mov.w ip, r2, asr #3 + 8031300: b29b uxth r3, r3 + 8031302: f001 01f8 and.w r1, r1, #248 ; 0xf8 + 8031306: 00d2 lsls r2, r2, #3 + 8031308: f00c 0cfc and.w ip, ip, #252 ; 0xfc + 803130c: fb11 f107 smulbb r1, r1, r7 + 8031310: 1218 asrs r0, r3, #8 + 8031312: fb1c fc07 smulbb ip, ip, r7 + 8031316: b2d2 uxtb r2, r2 + 8031318: f000 00f8 and.w r0, r0, #248 ; 0xf8 + 803131c: fb12 f207 smulbb r2, r2, r7 + 8031320: fb00 100a mla r0, r0, sl, r1 + 8031324: 10d9 asrs r1, r3, #3 + 8031326: 00db lsls r3, r3, #3 + 8031328: f001 01fc and.w r1, r1, #252 ; 0xfc + 803132c: b280 uxth r0, r0 + 803132e: b2db uxtb r3, r3 + 8031330: fb01 c10a mla r1, r1, sl, ip + 8031334: fb03 230a mla r3, r3, sl, r2 + 8031338: 1c42 adds r2, r0, #1 + 803133a: b289 uxth r1, r1 + 803133c: b29b uxth r3, r3 + 803133e: eb02 2010 add.w r0, r2, r0, lsr #8 + 8031342: f101 0c01 add.w ip, r1, #1 + 8031346: 1c5a adds r2, r3, #1 + 8031348: eb0c 2c11 add.w ip, ip, r1, lsr #8 + 803134c: f400 4078 and.w r0, r0, #63488 ; 0xf800 + 8031350: eb02 2213 add.w r2, r2, r3, lsr #8 + 8031354: 9b1f ldr r3, [sp, #124] ; 0x7c + 8031356: ea4f 1c5c mov.w ip, ip, lsr #5 + 803135a: f3c2 22c4 ubfx r2, r2, #11, #5 + 803135e: 441c add r4, r3 + 8031360: f40c 6cfc and.w ip, ip, #2016 ; 0x7e0 + 8031364: 9b20 ldr r3, [sp, #128] ; 0x80 + 8031366: 4310 orrs r0, r2 + 8031368: 441e add r6, r3 + 803136a: ea40 000c orr.w r0, r0, ip + 803136e: f829 0b02 strh.w r0, [r9], #2 + 8031372: e6fa b.n 803116a <_ZN8touchgfx8LCD16bpp52TextureMapper_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x248> + 8031374: b013 add sp, #76 ; 0x4c + 8031376: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + +0803137a <_ZNK8touchgfx8LCD16bpp54TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKtssiihh>: + 803137a: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} + 803137e: e9dd 4e08 ldrd r4, lr, [sp, #32] + 8031382: f9bd 901c ldrsh.w r9, [sp, #28] + 8031386: fb0e 4703 mla r7, lr, r3, r4 + 803138a: f1be 0f00 cmp.w lr, #0 + 803138e: f89d 5028 ldrb.w r5, [sp, #40] ; 0x28 + 8031392: f89d 602c ldrb.w r6, [sp, #44] ; 0x2c + 8031396: eb02 0847 add.w r8, r2, r7, lsl #1 + 803139a: 8808 ldrh r0, [r1, #0] + 803139c: db60 blt.n 8031460 <_ZNK8touchgfx8LCD16bpp54TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKtssiihh+0xe6> + 803139e: 45f1 cmp r9, lr + 80313a0: dd5e ble.n 8031460 <_ZNK8touchgfx8LCD16bpp54TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKtssiihh+0xe6> + 80313a2: 2c00 cmp r4, #0 + 80313a4: db5a blt.n 803145c <_ZNK8touchgfx8LCD16bpp54TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKtssiihh+0xe2> + 80313a6: 42a3 cmp r3, r4 + 80313a8: dd58 ble.n 803145c <_ZNK8touchgfx8LCD16bpp54TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKtssiihh+0xe2> + 80313aa: f832 c017 ldrh.w ip, [r2, r7, lsl #1] + 80313ae: 1c62 adds r2, r4, #1 + 80313b0: d459 bmi.n 8031466 <_ZNK8touchgfx8LCD16bpp54TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKtssiihh+0xec> + 80313b2: 4293 cmp r3, r2 + 80313b4: dd57 ble.n 8031466 <_ZNK8touchgfx8LCD16bpp54TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKtssiihh+0xec> + 80313b6: 2d00 cmp r5, #0 + 80313b8: d055 beq.n 8031466 <_ZNK8touchgfx8LCD16bpp54TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKtssiihh+0xec> + 80313ba: f8b8 7002 ldrh.w r7, [r8, #2] + 80313be: f11e 0e01 adds.w lr, lr, #1 + 80313c2: d454 bmi.n 803146e <_ZNK8touchgfx8LCD16bpp54TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKtssiihh+0xf4> + 80313c4: 45f1 cmp r9, lr + 80313c6: dd52 ble.n 803146e <_ZNK8touchgfx8LCD16bpp54TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKtssiihh+0xf4> + 80313c8: 2e00 cmp r6, #0 + 80313ca: d050 beq.n 803146e <_ZNK8touchgfx8LCD16bpp54TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKtssiihh+0xf4> + 80313cc: 2c00 cmp r4, #0 + 80313ce: db4c blt.n 803146a <_ZNK8touchgfx8LCD16bpp54TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKtssiihh+0xf0> + 80313d0: 42a3 cmp r3, r4 + 80313d2: dd4a ble.n 803146a <_ZNK8touchgfx8LCD16bpp54TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKtssiihh+0xf0> + 80313d4: f838 2013 ldrh.w r2, [r8, r3, lsl #1] + 80313d8: 3401 adds r4, #1 + 80313da: d405 bmi.n 80313e8 <_ZNK8touchgfx8LCD16bpp54TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKtssiihh+0x6e> + 80313dc: 42a3 cmp r3, r4 + 80313de: dd03 ble.n 80313e8 <_ZNK8touchgfx8LCD16bpp54TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKtssiihh+0x6e> + 80313e0: b115 cbz r5, 80313e8 <_ZNK8touchgfx8LCD16bpp54TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKtssiihh+0x6e> + 80313e2: 3301 adds r3, #1 + 80313e4: f838 0013 ldrh.w r0, [r8, r3, lsl #1] + 80313e8: fb15 f406 smulbb r4, r5, r6 + 80313ec: ea4f 430c mov.w r3, ip, lsl #16 + 80313f0: ea4f 4e07 mov.w lr, r7, lsl #16 + 80313f4: f42c 6cfc bic.w ip, ip, #2016 ; 0x7e0 + 80313f8: f003 63fc and.w r3, r3, #132120576 ; 0x7e00000 + 80313fc: f3c4 04c7 ubfx r4, r4, #3, #8 + 8031400: f00e 6efc and.w lr, lr, #132120576 ; 0x7e00000 + 8031404: f427 67fc bic.w r7, r7, #2016 ; 0x7e0 + 8031408: ea43 0c0c orr.w ip, r3, ip + 803140c: f1c6 0310 rsb r3, r6, #16 + 8031410: ea4e 0707 orr.w r7, lr, r7 + 8031414: ebc4 0646 rsb r6, r4, r6, lsl #1 + 8031418: 1b5b subs r3, r3, r5 + 803141a: ebc4 0545 rsb r5, r4, r5, lsl #1 + 803141e: eb04 0343 add.w r3, r4, r3, lsl #1 + 8031422: 437d muls r5, r7 + 8031424: fb03 5c0c mla ip, r3, ip, r5 + 8031428: 0403 lsls r3, r0, #16 + 803142a: f420 60fc bic.w r0, r0, #2016 ; 0x7e0 + 803142e: f003 63fc and.w r3, r3, #132120576 ; 0x7e00000 + 8031432: 4318 orrs r0, r3 + 8031434: 0413 lsls r3, r2, #16 + 8031436: f422 62fc bic.w r2, r2, #2016 ; 0x7e0 + 803143a: f003 63fc and.w r3, r3, #132120576 ; 0x7e00000 + 803143e: fb04 c000 mla r0, r4, r0, ip + 8031442: 4313 orrs r3, r2 + 8031444: fb06 0003 mla r0, r6, r3, r0 + 8031448: 0d43 lsrs r3, r0, #21 + 803144a: 0940 lsrs r0, r0, #5 + 803144c: f403 63fc and.w r3, r3, #2016 ; 0x7e0 + 8031450: f420 60fc bic.w r0, r0, #2016 ; 0x7e0 + 8031454: 4318 orrs r0, r3 + 8031456: 8008 strh r0, [r1, #0] + 8031458: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} + 803145c: 4684 mov ip, r0 + 803145e: e7a6 b.n 80313ae <_ZNK8touchgfx8LCD16bpp54TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKtssiihh+0x34> + 8031460: 4607 mov r7, r0 + 8031462: 4684 mov ip, r0 + 8031464: e7ab b.n 80313be <_ZNK8touchgfx8LCD16bpp54TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKtssiihh+0x44> + 8031466: 4607 mov r7, r0 + 8031468: e7a9 b.n 80313be <_ZNK8touchgfx8LCD16bpp54TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKtssiihh+0x44> + 803146a: 4602 mov r2, r0 + 803146c: e7b4 b.n 80313d8 <_ZNK8touchgfx8LCD16bpp54TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKtssiihh+0x5e> + 803146e: 4602 mov r2, r0 + 8031470: e7ba b.n 80313e8 <_ZNK8touchgfx8LCD16bpp54TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKtssiihh+0x6e> + +08031472 <_ZN8touchgfx8LCD16bpp54TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff>: + 8031472: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8031476: b08f sub sp, #60 ; 0x3c + 8031478: 461d mov r5, r3 + 803147a: 9b1d ldr r3, [sp, #116] ; 0x74 + 803147c: 9107 str r1, [sp, #28] + 803147e: 920c str r2, [sp, #48] ; 0x30 + 8031480: 6859 ldr r1, [r3, #4] + 8031482: 681b ldr r3, [r3, #0] + 8031484: 900d str r0, [sp, #52] ; 0x34 + 8031486: e9dd 271e ldrd r2, r7, [sp, #120] ; 0x78 + 803148a: e9dd 4619 ldrd r4, r6, [sp, #100] ; 0x64 + 803148e: fb01 2707 mla r7, r1, r7, r2 + 8031492: eb03 0747 add.w r7, r3, r7, lsl #1 + 8031496: 9b20 ldr r3, [sp, #128] ; 0x80 + 8031498: f8d3 8000 ldr.w r8, [r3] + 803149c: 9b07 ldr r3, [sp, #28] + 803149e: 2b00 cmp r3, #0 + 80314a0: dc03 bgt.n 80314aa <_ZN8touchgfx8LCD16bpp54TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x38> + 80314a2: 9b0c ldr r3, [sp, #48] ; 0x30 + 80314a4: 2b00 cmp r3, #0 + 80314a6: f340 8182 ble.w 80317ae <_ZN8touchgfx8LCD16bpp54TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x33c> + 80314aa: 9b20 ldr r3, [sp, #128] ; 0x80 + 80314ac: f9b3 1008 ldrsh.w r1, [r3, #8] + 80314b0: f9b3 200c ldrsh.w r2, [r3, #12] + 80314b4: 1e48 subs r0, r1, #1 + 80314b6: f102 3cff add.w ip, r2, #4294967295 + 80314ba: 2d00 cmp r5, #0 + 80314bc: f340 809b ble.w 80315f6 <_ZN8touchgfx8LCD16bpp54TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x184> + 80314c0: ea5f 4e24 movs.w lr, r4, asr #16 + 80314c4: ea4f 4326 mov.w r3, r6, asr #16 + 80314c8: d406 bmi.n 80314d8 <_ZN8touchgfx8LCD16bpp54TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x66> + 80314ca: 4586 cmp lr, r0 + 80314cc: da04 bge.n 80314d8 <_ZN8touchgfx8LCD16bpp54TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x66> + 80314ce: 2b00 cmp r3, #0 + 80314d0: db02 blt.n 80314d8 <_ZN8touchgfx8LCD16bpp54TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x66> + 80314d2: 4563 cmp r3, ip + 80314d4: f2c0 8090 blt.w 80315f8 <_ZN8touchgfx8LCD16bpp54TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x186> + 80314d8: f11e 0e01 adds.w lr, lr, #1 + 80314dc: f100 8084 bmi.w 80315e8 <_ZN8touchgfx8LCD16bpp54TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x176> + 80314e0: 4571 cmp r1, lr + 80314e2: f2c0 8081 blt.w 80315e8 <_ZN8touchgfx8LCD16bpp54TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x176> + 80314e6: 3301 adds r3, #1 + 80314e8: d47e bmi.n 80315e8 <_ZN8touchgfx8LCD16bpp54TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x176> + 80314ea: 429a cmp r2, r3 + 80314ec: db7c blt.n 80315e8 <_ZN8touchgfx8LCD16bpp54TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x176> + 80314ee: 46aa mov sl, r5 + 80314f0: 46b9 mov r9, r7 + 80314f2: f1ba 0f00 cmp.w sl, #0 + 80314f6: f340 8099 ble.w 803162c <_ZN8touchgfx8LCD16bpp54TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1ba> + 80314fa: 9b20 ldr r3, [sp, #128] ; 0x80 + 80314fc: 1421 asrs r1, r4, #16 + 80314fe: ea4f 4026 mov.w r0, r6, asr #16 + 8031502: f3c4 3203 ubfx r2, r4, #12, #4 + 8031506: f3c6 3c03 ubfx ip, r6, #12, #4 + 803150a: e9d3 e302 ldrd lr, r3, [r3, #8] + 803150e: f100 80d1 bmi.w 80316b4 <_ZN8touchgfx8LCD16bpp54TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x242> + 8031512: f10e 3bff add.w fp, lr, #4294967295 + 8031516: 4559 cmp r1, fp + 8031518: f280 80cc bge.w 80316b4 <_ZN8touchgfx8LCD16bpp54TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x242> + 803151c: 2800 cmp r0, #0 + 803151e: f2c0 80c9 blt.w 80316b4 <_ZN8touchgfx8LCD16bpp54TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x242> + 8031522: f103 3bff add.w fp, r3, #4294967295 + 8031526: 4558 cmp r0, fp + 8031528: f280 80c4 bge.w 80316b4 <_ZN8touchgfx8LCD16bpp54TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x242> + 803152c: fa0f fe8e sxth.w lr, lr + 8031530: fb00 110e mla r1, r0, lr, r1 + 8031534: eb08 0041 add.w r0, r8, r1, lsl #1 + 8031538: f838 b011 ldrh.w fp, [r8, r1, lsl #1] + 803153c: 8841 ldrh r1, [r0, #2] + 803153e: f1bc 0f00 cmp.w ip, #0 + 8031542: d00b beq.n 803155c <_ZN8touchgfx8LCD16bpp54TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0xea> + 8031544: f10e 4300 add.w r3, lr, #2147483648 ; 0x80000000 + 8031548: 3b01 subs r3, #1 + 803154a: 005b lsls r3, r3, #1 + 803154c: 3302 adds r3, #2 + 803154e: eb00 0e03 add.w lr, r0, r3 + 8031552: 5ac3 ldrh r3, [r0, r3] + 8031554: 9308 str r3, [sp, #32] + 8031556: f8be 3002 ldrh.w r3, [lr, #2] + 803155a: 9309 str r3, [sp, #36] ; 0x24 + 803155c: ea4f 400b mov.w r0, fp, lsl #16 + 8031560: f42b 6bfc bic.w fp, fp, #2016 ; 0x7e0 + 8031564: fb12 f30c smulbb r3, r2, ip + 8031568: f1cc 0e10 rsb lr, ip, #16 + 803156c: f000 60fc and.w r0, r0, #132120576 ; 0x7e00000 + 8031570: 10db asrs r3, r3, #3 + 8031572: ebae 0e02 sub.w lr, lr, r2 + 8031576: ea40 000b orr.w r0, r0, fp + 803157a: ea4f 4b01 mov.w fp, r1, lsl #16 + 803157e: f421 61fc bic.w r1, r1, #2016 ; 0x7e0 + 8031582: ebc3 0242 rsb r2, r3, r2, lsl #1 + 8031586: f00b 6bfc and.w fp, fp, #132120576 ; 0x7e00000 + 803158a: eb03 0e4e add.w lr, r3, lr, lsl #1 + 803158e: ea4b 0101 orr.w r1, fp, r1 + 8031592: 4351 muls r1, r2 + 8031594: 9a09 ldr r2, [sp, #36] ; 0x24 + 8031596: fb0e 1e00 mla lr, lr, r0, r1 + 803159a: 0410 lsls r0, r2, #16 + 803159c: f422 62fc bic.w r2, r2, #2016 ; 0x7e0 + 80315a0: 9908 ldr r1, [sp, #32] + 80315a2: f000 60fc and.w r0, r0, #132120576 ; 0x7e00000 + 80315a6: 4310 orrs r0, r2 + 80315a8: 9a08 ldr r2, [sp, #32] + 80315aa: 0412 lsls r2, r2, #16 + 80315ac: fb03 e000 mla r0, r3, r0, lr + 80315b0: f421 6efc bic.w lr, r1, #2016 ; 0x7e0 + 80315b4: ebc3 034c rsb r3, r3, ip, lsl #1 + 80315b8: f002 62fc and.w r2, r2, #132120576 ; 0x7e00000 + 80315bc: ea42 020e orr.w r2, r2, lr + 80315c0: fb03 0302 mla r3, r3, r2, r0 + 80315c4: 0d5a lsrs r2, r3, #21 + 80315c6: 095b lsrs r3, r3, #5 + 80315c8: f402 62fc and.w r2, r2, #2016 ; 0x7e0 + 80315cc: f423 63fc bic.w r3, r3, #2016 ; 0x7e0 + 80315d0: 4313 orrs r3, r2 + 80315d2: f8a9 3000 strh.w r3, [r9] + 80315d6: 9b1b ldr r3, [sp, #108] ; 0x6c + 80315d8: f109 0902 add.w r9, r9, #2 + 80315dc: f10a 3aff add.w sl, sl, #4294967295 + 80315e0: 441c add r4, r3 + 80315e2: 9b1c ldr r3, [sp, #112] ; 0x70 + 80315e4: 441e add r6, r3 + 80315e6: e784 b.n 80314f2 <_ZN8touchgfx8LCD16bpp54TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x80> + 80315e8: 9b1b ldr r3, [sp, #108] ; 0x6c + 80315ea: 3d01 subs r5, #1 + 80315ec: 3702 adds r7, #2 + 80315ee: 441c add r4, r3 + 80315f0: 9b1c ldr r3, [sp, #112] ; 0x70 + 80315f2: 441e add r6, r3 + 80315f4: e761 b.n 80314ba <_ZN8touchgfx8LCD16bpp54TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x48> + 80315f6: d01d beq.n 8031634 <_ZN8touchgfx8LCD16bpp54TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1c2> + 80315f8: 1e6b subs r3, r5, #1 + 80315fa: 981b ldr r0, [sp, #108] ; 0x6c + 80315fc: fb00 4003 mla r0, r0, r3, r4 + 8031600: 1400 asrs r0, r0, #16 + 8031602: f53f af74 bmi.w 80314ee <_ZN8touchgfx8LCD16bpp54TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x7c> + 8031606: 3901 subs r1, #1 + 8031608: 4288 cmp r0, r1 + 803160a: f6bf af70 bge.w 80314ee <_ZN8touchgfx8LCD16bpp54TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x7c> + 803160e: 991c ldr r1, [sp, #112] ; 0x70 + 8031610: fb01 6303 mla r3, r1, r3, r6 + 8031614: 141b asrs r3, r3, #16 + 8031616: f53f af6a bmi.w 80314ee <_ZN8touchgfx8LCD16bpp54TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x7c> + 803161a: 3a01 subs r2, #1 + 803161c: 4293 cmp r3, r2 + 803161e: f6bf af66 bge.w 80314ee <_ZN8touchgfx8LCD16bpp54TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x7c> + 8031622: 46a9 mov r9, r5 + 8031624: 46ba mov sl, r7 + 8031626: f1b9 0f00 cmp.w r9, #0 + 803162a: dc5b bgt.n 80316e4 <_ZN8touchgfx8LCD16bpp54TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x272> + 803162c: ea25 75e5 bic.w r5, r5, r5, asr #31 + 8031630: eb07 0745 add.w r7, r7, r5, lsl #1 + 8031634: 9b07 ldr r3, [sp, #28] + 8031636: 2b00 cmp r3, #0 + 8031638: f340 80b9 ble.w 80317ae <_ZN8touchgfx8LCD16bpp54TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x33c> + 803163c: eeb7 7a00 vmov.f32 s14, #112 ; 0x3f800000 1.0 + 8031640: 9b18 ldr r3, [sp, #96] ; 0x60 + 8031642: ee30 0a04 vadd.f32 s0, s0, s8 + 8031646: ee70 0aa4 vadd.f32 s1, s1, s9 + 803164a: eef0 6a62 vmov.f32 s13, s5 + 803164e: eec7 7a00 vdiv.f32 s15, s14, s0 + 8031652: ee31 1a05 vadd.f32 s2, s2, s10 + 8031656: eefe 6ac8 vcvt.s32.f32 s13, s13, #16 + 803165a: ee16 4a90 vmov r4, s13 + 803165e: eef0 6a43 vmov.f32 s13, s6 + 8031662: eefe 6ac8 vcvt.s32.f32 s13, s13, #16 + 8031666: ee16 6a90 vmov r6, s13 + 803166a: ee20 7aa7 vmul.f32 s14, s1, s15 + 803166e: ee61 7a27 vmul.f32 s15, s2, s15 + 8031672: ee77 2a62 vsub.f32 s5, s14, s5 + 8031676: ee37 3ac3 vsub.f32 s6, s15, s6 + 803167a: eefe 2ac8 vcvt.s32.f32 s5, s5, #16 + 803167e: eebe 3ac8 vcvt.s32.f32 s6, s6, #16 + 8031682: ee12 2a90 vmov r2, s5 + 8031686: eef0 2a47 vmov.f32 s5, s14 + 803168a: fb92 f3f3 sdiv r3, r2, r3 + 803168e: ee13 2a10 vmov r2, s6 + 8031692: 931b str r3, [sp, #108] ; 0x6c + 8031694: 9b18 ldr r3, [sp, #96] ; 0x60 + 8031696: eeb0 3a67 vmov.f32 s6, s15 + 803169a: fb92 f3f3 sdiv r3, r2, r3 + 803169e: 931c str r3, [sp, #112] ; 0x70 + 80316a0: 9b07 ldr r3, [sp, #28] + 80316a2: 9a0c ldr r2, [sp, #48] ; 0x30 + 80316a4: 3b01 subs r3, #1 + 80316a6: 9307 str r3, [sp, #28] + 80316a8: bf08 it eq + 80316aa: 4615 moveq r5, r2 + 80316ac: 9b18 ldr r3, [sp, #96] ; 0x60 + 80316ae: bf18 it ne + 80316b0: 461d movne r5, r3 + 80316b2: e6f3 b.n 803149c <_ZN8touchgfx8LCD16bpp54TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x2a> + 80316b4: f111 0b01 adds.w fp, r1, #1 + 80316b8: d48d bmi.n 80315d6 <_ZN8touchgfx8LCD16bpp54TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x164> + 80316ba: 45de cmp lr, fp + 80316bc: db8b blt.n 80315d6 <_ZN8touchgfx8LCD16bpp54TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x164> + 80316be: f110 0b01 adds.w fp, r0, #1 + 80316c2: d488 bmi.n 80315d6 <_ZN8touchgfx8LCD16bpp54TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x164> + 80316c4: 455b cmp r3, fp + 80316c6: db86 blt.n 80315d6 <_ZN8touchgfx8LCD16bpp54TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x164> + 80316c8: b21b sxth r3, r3 + 80316ca: e9cd 1001 strd r1, r0, [sp, #4] + 80316ce: e9cd 2c03 strd r2, ip, [sp, #12] + 80316d2: 9300 str r3, [sp, #0] + 80316d4: 4642 mov r2, r8 + 80316d6: fa0f f38e sxth.w r3, lr + 80316da: 4649 mov r1, r9 + 80316dc: 980d ldr r0, [sp, #52] ; 0x34 + 80316de: f7ff fe4c bl 803137a <_ZNK8touchgfx8LCD16bpp54TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKtssiihh> + 80316e2: e778 b.n 80315d6 <_ZN8touchgfx8LCD16bpp54TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x164> + 80316e4: 9b20 ldr r3, [sp, #128] ; 0x80 + 80316e6: 1420 asrs r0, r4, #16 + 80316e8: 1431 asrs r1, r6, #16 + 80316ea: f3c6 3e03 ubfx lr, r6, #12, #4 + 80316ee: f9b3 3008 ldrsh.w r3, [r3, #8] + 80316f2: f3c4 3203 ubfx r2, r4, #12, #4 + 80316f6: fb03 0101 mla r1, r3, r1, r0 + 80316fa: eb08 0041 add.w r0, r8, r1, lsl #1 + 80316fe: f838 c011 ldrh.w ip, [r8, r1, lsl #1] + 8031702: 8841 ldrh r1, [r0, #2] + 8031704: f1be 0f00 cmp.w lr, #0 + 8031708: d00b beq.n 8031722 <_ZN8touchgfx8LCD16bpp54TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x2b0> + 803170a: f103 4300 add.w r3, r3, #2147483648 ; 0x80000000 + 803170e: 3b01 subs r3, #1 + 8031710: 005b lsls r3, r3, #1 + 8031712: 3302 adds r3, #2 + 8031714: eb00 0b03 add.w fp, r0, r3 + 8031718: 5ac3 ldrh r3, [r0, r3] + 803171a: 930a str r3, [sp, #40] ; 0x28 + 803171c: f8bb 3002 ldrh.w r3, [fp, #2] + 8031720: 930b str r3, [sp, #44] ; 0x2c + 8031722: ea4f 400c mov.w r0, ip, lsl #16 + 8031726: f42c 6cfc bic.w ip, ip, #2016 ; 0x7e0 + 803172a: fb12 f30e smulbb r3, r2, lr + 803172e: ea4f 4b01 mov.w fp, r1, lsl #16 + 8031732: f000 60fc and.w r0, r0, #132120576 ; 0x7e00000 + 8031736: f421 61fc bic.w r1, r1, #2016 ; 0x7e0 + 803173a: 10db asrs r3, r3, #3 + 803173c: f00b 6bfc and.w fp, fp, #132120576 ; 0x7e00000 + 8031740: ea40 000c orr.w r0, r0, ip + 8031744: f1ce 0c10 rsb ip, lr, #16 + 8031748: ea4b 0101 orr.w r1, fp, r1 + 803174c: f109 39ff add.w r9, r9, #4294967295 + 8031750: ebac 0c02 sub.w ip, ip, r2 + 8031754: ebc3 0242 rsb r2, r3, r2, lsl #1 + 8031758: eb03 0c4c add.w ip, r3, ip, lsl #1 + 803175c: 4351 muls r1, r2 + 803175e: 9a0b ldr r2, [sp, #44] ; 0x2c + 8031760: fb0c 1c00 mla ip, ip, r0, r1 + 8031764: 990a ldr r1, [sp, #40] ; 0x28 + 8031766: ea4f 4b02 mov.w fp, r2, lsl #16 + 803176a: f422 60fc bic.w r0, r2, #2016 ; 0x7e0 + 803176e: 9a0a ldr r2, [sp, #40] ; 0x28 + 8031770: f00b 6bfc and.w fp, fp, #132120576 ; 0x7e00000 + 8031774: 0412 lsls r2, r2, #16 + 8031776: ea4b 0000 orr.w r0, fp, r0 + 803177a: f421 6bfc bic.w fp, r1, #2016 ; 0x7e0 + 803177e: f002 62fc and.w r2, r2, #132120576 ; 0x7e00000 + 8031782: fb03 c000 mla r0, r3, r0, ip + 8031786: ebc3 034e rsb r3, r3, lr, lsl #1 + 803178a: ea42 0b0b orr.w fp, r2, fp + 803178e: fb03 000b mla r0, r3, fp, r0 + 8031792: 0d43 lsrs r3, r0, #21 + 8031794: 0940 lsrs r0, r0, #5 + 8031796: f403 63fc and.w r3, r3, #2016 ; 0x7e0 + 803179a: f420 60fc bic.w r0, r0, #2016 ; 0x7e0 + 803179e: 4318 orrs r0, r3 + 80317a0: 9b1b ldr r3, [sp, #108] ; 0x6c + 80317a2: 441c add r4, r3 + 80317a4: 9b1c ldr r3, [sp, #112] ; 0x70 + 80317a6: f82a 0b02 strh.w r0, [sl], #2 + 80317aa: 441e add r6, r3 + 80317ac: e73b b.n 8031626 <_ZN8touchgfx8LCD16bpp54TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1b4> + 80317ae: b00f add sp, #60 ; 0x3c + 80317b0: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + +080317b4 <_ZNK8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKmssiihhh>: + 80317b4: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 80317b8: b085 sub sp, #20 + 80317ba: e9dd 740f ldrd r7, r4, [sp, #60] ; 0x3c + 80317be: 9102 str r1, [sp, #8] + 80317c0: 2c00 cmp r4, #0 + 80317c2: fb04 7103 mla r1, r4, r3, r7 + 80317c6: f9bd e038 ldrsh.w lr, [sp, #56] ; 0x38 + 80317ca: f89d 6044 ldrb.w r6, [sp, #68] ; 0x44 + 80317ce: eb02 0c81 add.w ip, r2, r1, lsl #2 + 80317d2: f89d 0048 ldrb.w r0, [sp, #72] ; 0x48 + 80317d6: f2c0 811b blt.w 8031a10 <_ZNK8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKmssiihhh+0x25c> + 80317da: 45a6 cmp lr, r4 + 80317dc: f340 8118 ble.w 8031a10 <_ZNK8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKmssiihhh+0x25c> + 80317e0: 2f00 cmp r7, #0 + 80317e2: f2c0 8113 blt.w 8031a0c <_ZNK8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKmssiihhh+0x258> + 80317e6: 42bb cmp r3, r7 + 80317e8: f340 8110 ble.w 8031a0c <_ZNK8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKmssiihhh+0x258> + 80317ec: f852 5021 ldr.w r5, [r2, r1, lsl #2] + 80317f0: 1c7a adds r2, r7, #1 + 80317f2: f100 8110 bmi.w 8031a16 <_ZNK8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKmssiihhh+0x262> + 80317f6: 4293 cmp r3, r2 + 80317f8: f340 810d ble.w 8031a16 <_ZNK8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKmssiihhh+0x262> + 80317fc: 2e00 cmp r6, #0 + 80317fe: f000 810c beq.w 8031a1a <_ZNK8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKmssiihhh+0x266> + 8031802: f8dc 1004 ldr.w r1, [ip, #4] + 8031806: 3401 adds r4, #1 + 8031808: f100 810b bmi.w 8031a22 <_ZNK8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKmssiihhh+0x26e> + 803180c: 45a6 cmp lr, r4 + 803180e: f340 8108 ble.w 8031a22 <_ZNK8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKmssiihhh+0x26e> + 8031812: 2800 cmp r0, #0 + 8031814: f000 8108 beq.w 8031a28 <_ZNK8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKmssiihhh+0x274> + 8031818: 2f00 cmp r7, #0 + 803181a: f2c0 8100 blt.w 8031a1e <_ZNK8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKmssiihhh+0x26a> + 803181e: 42bb cmp r3, r7 + 8031820: f340 80fd ble.w 8031a1e <_ZNK8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKmssiihhh+0x26a> + 8031824: f85c 4023 ldr.w r4, [ip, r3, lsl #2] + 8031828: 3701 adds r7, #1 + 803182a: f100 8100 bmi.w 8031a2e <_ZNK8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKmssiihhh+0x27a> + 803182e: 42bb cmp r3, r7 + 8031830: f340 80fd ble.w 8031a2e <_ZNK8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKmssiihhh+0x27a> + 8031834: 2e00 cmp r6, #0 + 8031836: f000 80fc beq.w 8031a32 <_ZNK8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKmssiihhh+0x27e> + 803183a: 3301 adds r3, #1 + 803183c: f85c 2023 ldr.w r2, [ip, r3, lsl #2] + 8031840: b2b6 uxth r6, r6 + 8031842: b280 uxth r0, r0 + 8031844: ea4f 6a11 mov.w sl, r1, lsr #24 + 8031848: fb00 fe06 mul.w lr, r0, r6 + 803184c: 0136 lsls r6, r6, #4 + 803184e: ea4f 6b15 mov.w fp, r5, lsr #24 + 8031852: ebce 1000 rsb r0, lr, r0, lsl #4 + 8031856: eba6 070e sub.w r7, r6, lr + 803185a: f5c6 7380 rsb r3, r6, #256 ; 0x100 + 803185e: ea4f 6914 mov.w r9, r4, lsr #24 + 8031862: b280 uxth r0, r0 + 8031864: b2bf uxth r7, r7 + 8031866: 1a1b subs r3, r3, r0 + 8031868: ea4f 6812 mov.w r8, r2, lsr #24 + 803186c: fb0a f607 mul.w r6, sl, r7 + 8031870: b29b uxth r3, r3 + 8031872: fb0b 6603 mla r6, fp, r3, r6 + 8031876: fb00 6609 mla r6, r0, r9, r6 + 803187a: fb0e 6608 mla r6, lr, r8, r6 + 803187e: f3c6 2607 ubfx r6, r6, #8, #8 + 8031882: 9600 str r6, [sp, #0] + 8031884: 2e00 cmp r6, #0 + 8031886: f000 80be beq.w 8031a06 <_ZNK8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKmssiihhh+0x252> + 803188a: f005 1cff and.w ip, r5, #16711935 ; 0xff00ff + 803188e: f405 457f and.w r5, r5, #65280 ; 0xff00 + 8031892: 9e02 ldr r6, [sp, #8] + 8031894: fb0b fc0c mul.w ip, fp, ip + 8031898: fb0b f505 mul.w r5, fp, r5 + 803189c: 8836 ldrh r6, [r6, #0] + 803189e: ea4f 2b1c mov.w fp, ip, lsr #8 + 80318a2: f10c 1c01 add.w ip, ip, #65537 ; 0x10001 + 80318a6: 9501 str r5, [sp, #4] + 80318a8: f00b 1bff and.w fp, fp, #16711935 ; 0xff00ff + 80318ac: 44dc add ip, fp + 80318ae: ea4f 2c1c mov.w ip, ip, lsr #8 + 80318b2: f00c 15ff and.w r5, ip, #16711935 ; 0xff00ff + 80318b6: 9503 str r5, [sp, #12] + 80318b8: 9d01 ldr r5, [sp, #4] + 80318ba: f505 7c80 add.w ip, r5, #256 ; 0x100 + 80318be: eb0c 2515 add.w r5, ip, r5, lsr #8 + 80318c2: f001 1cff and.w ip, r1, #16711935 ; 0xff00ff + 80318c6: f401 417f and.w r1, r1, #65280 ; 0xff00 + 80318ca: fb0a fc0c mul.w ip, sl, ip + 80318ce: ea4f 2b15 mov.w fp, r5, lsr #8 + 80318d2: fb0a fa01 mul.w sl, sl, r1 + 80318d6: ea4f 251c mov.w r5, ip, lsr #8 + 80318da: f10c 1c01 add.w ip, ip, #65537 ; 0x10001 + 80318de: f50a 7180 add.w r1, sl, #256 ; 0x100 + 80318e2: f005 15ff and.w r5, r5, #16711935 ; 0xff00ff + 80318e6: eb01 2a1a add.w sl, r1, sl, lsr #8 + 80318ea: 4465 add r5, ip + 80318ec: f004 1cff and.w ip, r4, #16711935 ; 0xff00ff + 80318f0: f404 447f and.w r4, r4, #65280 ; 0xff00 + 80318f4: ea4f 2a1a mov.w sl, sl, lsr #8 + 80318f8: fb09 fc0c mul.w ip, r9, ip + 80318fc: 0a2d lsrs r5, r5, #8 + 80318fe: fb09 f904 mul.w r9, r9, r4 + 8031902: f40a 4a7f and.w sl, sl, #65280 ; 0xff00 + 8031906: ea4f 211c mov.w r1, ip, lsr #8 + 803190a: f005 15ff and.w r5, r5, #16711935 ; 0xff00ff + 803190e: f509 7480 add.w r4, r9, #256 ; 0x100 + 8031912: f10c 1c01 add.w ip, ip, #65537 ; 0x10001 + 8031916: f001 11ff and.w r1, r1, #16711935 ; 0xff00ff + 803191a: 437d muls r5, r7 + 803191c: eb04 2919 add.w r9, r4, r9, lsr #8 + 8031920: f002 14ff and.w r4, r2, #16711935 ; 0xff00ff + 8031924: f402 427f and.w r2, r2, #65280 ; 0xff00 + 8031928: 4461 add r1, ip + 803192a: fb08 f404 mul.w r4, r8, r4 + 803192e: ea4f 2919 mov.w r9, r9, lsr #8 + 8031932: fb08 f802 mul.w r8, r8, r2 + 8031936: 0a09 lsrs r1, r1, #8 + 8031938: 0a22 lsrs r2, r4, #8 + 803193a: f104 1401 add.w r4, r4, #65537 ; 0x10001 + 803193e: f001 11ff and.w r1, r1, #16711935 ; 0xff00ff + 8031942: fb07 f70a mul.w r7, r7, sl + 8031946: f002 12ff and.w r2, r2, #16711935 ; 0xff00ff + 803194a: 4414 add r4, r2 + 803194c: f508 7280 add.w r2, r8, #256 ; 0x100 + 8031950: 0a24 lsrs r4, r4, #8 + 8031952: eb02 2818 add.w r8, r2, r8, lsr #8 + 8031956: 9a03 ldr r2, [sp, #12] + 8031958: f004 14ff and.w r4, r4, #16711935 ; 0xff00ff + 803195c: fb02 5503 mla r5, r2, r3, r5 + 8031960: ea4f 2818 mov.w r8, r8, lsr #8 + 8031964: 9a00 ldr r2, [sp, #0] + 8031966: fb04 540e mla r4, r4, lr, r5 + 803196a: f408 487f and.w r8, r8, #65280 ; 0xff00 + 803196e: 1235 asrs r5, r6, #8 + 8031970: fb01 4100 mla r1, r1, r0, r4 + 8031974: f005 05f8 and.w r5, r5, #248 ; 0xf8 + 8031978: 0a09 lsrs r1, r1, #8 + 803197a: f001 14ff and.w r4, r1, #16711935 ; 0xff00ff + 803197e: f40b 417f and.w r1, fp, #65280 ; 0xff00 + 8031982: fb03 7101 mla r1, r3, r1, r7 + 8031986: fb0e 1e08 mla lr, lr, r8, r1 + 803198a: f409 417f and.w r1, r9, #65280 ; 0xff00 + 803198e: fb00 e101 mla r1, r0, r1, lr + 8031992: f89d 004c ldrb.w r0, [sp, #76] ; 0x4c + 8031996: b287 uxth r7, r0 + 8031998: 0a09 lsrs r1, r1, #8 + 803199a: 437a muls r2, r7 + 803199c: f401 417f and.w r1, r1, #65280 ; 0xff00 + 80319a0: 1c53 adds r3, r2, #1 + 80319a2: 4321 orrs r1, r4 + 80319a4: eb03 2312 add.w r3, r3, r2, lsr #8 + 80319a8: 0c0a lsrs r2, r1, #16 + 80319aa: f3c1 2407 ubfx r4, r1, #8, #8 + 80319ae: ea6f 2313 mvn.w r3, r3, lsr #8 + 80319b2: b2c8 uxtb r0, r1 + 80319b4: fb12 f207 smulbb r2, r2, r7 + 80319b8: fb14 f407 smulbb r4, r4, r7 + 80319bc: b2db uxtb r3, r3 + 80319be: fb10 f007 smulbb r0, r0, r7 + 80319c2: fb05 2503 mla r5, r5, r3, r2 + 80319c6: 10f2 asrs r2, r6, #3 + 80319c8: 00f6 lsls r6, r6, #3 + 80319ca: f002 02fc and.w r2, r2, #252 ; 0xfc + 80319ce: b2ad uxth r5, r5 + 80319d0: b2f6 uxtb r6, r6 + 80319d2: fb02 4203 mla r2, r2, r3, r4 + 80319d6: fb06 0303 mla r3, r6, r3, r0 + 80319da: b294 uxth r4, r2 + 80319dc: b299 uxth r1, r3 + 80319de: 1c6b adds r3, r5, #1 + 80319e0: 1c62 adds r2, r4, #1 + 80319e2: eb03 2515 add.w r5, r3, r5, lsr #8 + 80319e6: 1c4b adds r3, r1, #1 + 80319e8: eb02 2214 add.w r2, r2, r4, lsr #8 + 80319ec: eb03 2311 add.w r3, r3, r1, lsr #8 + 80319f0: f405 4578 and.w r5, r5, #63488 ; 0xf800 + 80319f4: 0952 lsrs r2, r2, #5 + 80319f6: f3c3 23c4 ubfx r3, r3, #11, #5 + 80319fa: f402 62fc and.w r2, r2, #2016 ; 0x7e0 + 80319fe: 432b orrs r3, r5 + 8031a00: 4313 orrs r3, r2 + 8031a02: 9a02 ldr r2, [sp, #8] + 8031a04: 8013 strh r3, [r2, #0] + 8031a06: b005 add sp, #20 + 8031a08: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 8031a0c: 2500 movs r5, #0 + 8031a0e: e6ef b.n 80317f0 <_ZNK8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKmssiihhh+0x3c> + 8031a10: 2100 movs r1, #0 + 8031a12: 460d mov r5, r1 + 8031a14: e6f7 b.n 8031806 <_ZNK8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKmssiihhh+0x52> + 8031a16: 2100 movs r1, #0 + 8031a18: e6f5 b.n 8031806 <_ZNK8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKmssiihhh+0x52> + 8031a1a: 4631 mov r1, r6 + 8031a1c: e6f3 b.n 8031806 <_ZNK8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKmssiihhh+0x52> + 8031a1e: 2400 movs r4, #0 + 8031a20: e702 b.n 8031828 <_ZNK8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKmssiihhh+0x74> + 8031a22: 2200 movs r2, #0 + 8031a24: 4614 mov r4, r2 + 8031a26: e70b b.n 8031840 <_ZNK8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKmssiihhh+0x8c> + 8031a28: 4602 mov r2, r0 + 8031a2a: 4604 mov r4, r0 + 8031a2c: e708 b.n 8031840 <_ZNK8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKmssiihhh+0x8c> + 8031a2e: 2200 movs r2, #0 + 8031a30: e706 b.n 8031840 <_ZNK8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKmssiihhh+0x8c> + 8031a32: 4632 mov r2, r6 + 8031a34: e704 b.n 8031840 <_ZNK8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKmssiihhh+0x8c> + +08031a36 <_ZN8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff>: + 8031a36: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8031a3a: b09d sub sp, #116 ; 0x74 + 8031a3c: 9219 str r2, [sp, #100] ; 0x64 + 8031a3e: 9307 str r3, [sp, #28] + 8031a40: 9a2b ldr r2, [sp, #172] ; 0xac + 8031a42: f89d 30bc ldrb.w r3, [sp, #188] ; 0xbc + 8031a46: 901b str r0, [sp, #108] ; 0x6c + 8031a48: 931a str r3, [sp, #104] ; 0x68 + 8031a4a: 6850 ldr r0, [r2, #4] + 8031a4c: 9117 str r1, [sp, #92] ; 0x5c + 8031a4e: 6812 ldr r2, [r2, #0] + 8031a50: e9dd 132c ldrd r1, r3, [sp, #176] ; 0xb0 + 8031a54: e9dd 4627 ldrd r4, r6, [sp, #156] ; 0x9c + 8031a58: fb00 1303 mla r3, r0, r3, r1 + 8031a5c: eb02 0343 add.w r3, r2, r3, lsl #1 + 8031a60: 930a str r3, [sp, #40] ; 0x28 + 8031a62: 9b2e ldr r3, [sp, #184] ; 0xb8 + 8031a64: 681b ldr r3, [r3, #0] + 8031a66: 9310 str r3, [sp, #64] ; 0x40 + 8031a68: f8bd 3068 ldrh.w r3, [sp, #104] ; 0x68 + 8031a6c: 930b str r3, [sp, #44] ; 0x2c + 8031a6e: 9b17 ldr r3, [sp, #92] ; 0x5c + 8031a70: 2b00 cmp r3, #0 + 8031a72: dc03 bgt.n 8031a7c <_ZN8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x46> + 8031a74: 9b19 ldr r3, [sp, #100] ; 0x64 + 8031a76: 2b00 cmp r3, #0 + 8031a78: f340 8375 ble.w 8032166 <_ZN8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x730> + 8031a7c: 9b2e ldr r3, [sp, #184] ; 0xb8 + 8031a7e: f9b3 1008 ldrsh.w r1, [r3, #8] + 8031a82: f9b3 200c ldrsh.w r2, [r3, #12] + 8031a86: 1e48 subs r0, r1, #1 + 8031a88: 1e57 subs r7, r2, #1 + 8031a8a: 9b07 ldr r3, [sp, #28] + 8031a8c: 2b00 cmp r3, #0 + 8031a8e: f340 818e ble.w 8031dae <_ZN8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x378> + 8031a92: ea5f 4c24 movs.w ip, r4, asr #16 + 8031a96: ea4f 4326 mov.w r3, r6, asr #16 + 8031a9a: d406 bmi.n 8031aaa <_ZN8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x74> + 8031a9c: 4584 cmp ip, r0 + 8031a9e: da04 bge.n 8031aaa <_ZN8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x74> + 8031aa0: 2b00 cmp r3, #0 + 8031aa2: db02 blt.n 8031aaa <_ZN8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x74> + 8031aa4: 42bb cmp r3, r7 + 8031aa6: f2c0 8183 blt.w 8031db0 <_ZN8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x37a> + 8031aaa: f11c 0c01 adds.w ip, ip, #1 + 8031aae: f100 8173 bmi.w 8031d98 <_ZN8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x362> + 8031ab2: 4561 cmp r1, ip + 8031ab4: f2c0 8170 blt.w 8031d98 <_ZN8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x362> + 8031ab8: 3301 adds r3, #1 + 8031aba: f100 816d bmi.w 8031d98 <_ZN8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x362> + 8031abe: 429a cmp r2, r3 + 8031ac0: f2c0 816a blt.w 8031d98 <_ZN8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x362> + 8031ac4: 9b07 ldr r3, [sp, #28] + 8031ac6: 9f0a ldr r7, [sp, #40] ; 0x28 + 8031ac8: 9318 str r3, [sp, #96] ; 0x60 + 8031aca: 9b18 ldr r3, [sp, #96] ; 0x60 + 8031acc: 2b00 cmp r3, #0 + 8031ace: f340 818c ble.w 8031dea <_ZN8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x3b4> + 8031ad2: 9a2e ldr r2, [sp, #184] ; 0xb8 + 8031ad4: ea4f 4c26 mov.w ip, r6, asr #16 + 8031ad8: 9b2e ldr r3, [sp, #184] ; 0xb8 + 8031ada: f3c4 3003 ubfx r0, r4, #12, #4 + 8031ade: f8d2 e00c ldr.w lr, [r2, #12] + 8031ae2: 1422 asrs r2, r4, #16 + 8031ae4: f3c6 3103 ubfx r1, r6, #12, #4 + 8031ae8: 689b ldr r3, [r3, #8] + 8031aea: f100 81cd bmi.w 8031e88 <_ZN8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x452> + 8031aee: f103 38ff add.w r8, r3, #4294967295 + 8031af2: 4542 cmp r2, r8 + 8031af4: f280 81c8 bge.w 8031e88 <_ZN8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x452> + 8031af8: f1bc 0f00 cmp.w ip, #0 + 8031afc: f2c0 81c4 blt.w 8031e88 <_ZN8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x452> + 8031b00: f10e 38ff add.w r8, lr, #4294967295 + 8031b04: 45c4 cmp ip, r8 + 8031b06: f280 81bf bge.w 8031e88 <_ZN8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x452> + 8031b0a: b21b sxth r3, r3 + 8031b0c: 9d10 ldr r5, [sp, #64] ; 0x40 + 8031b0e: fb0c 2203 mla r2, ip, r3, r2 + 8031b12: eb05 0882 add.w r8, r5, r2, lsl #2 + 8031b16: f855 2022 ldr.w r2, [r5, r2, lsl #2] + 8031b1a: ea4f 6e12 mov.w lr, r2, lsr #24 + 8031b1e: 2800 cmp r0, #0 + 8031b20: f000 81a9 beq.w 8031e76 <_ZN8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x440> + 8031b24: f8d8 5004 ldr.w r5, [r8, #4] + 8031b28: 950c str r5, [sp, #48] ; 0x30 + 8031b2a: 0e2d lsrs r5, r5, #24 + 8031b2c: 9513 str r5, [sp, #76] ; 0x4c + 8031b2e: b181 cbz r1, 8031b52 <_ZN8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x11c> + 8031b30: f103 4380 add.w r3, r3, #1073741824 ; 0x40000000 + 8031b34: 3b01 subs r3, #1 + 8031b36: 009b lsls r3, r3, #2 + 8031b38: 3304 adds r3, #4 + 8031b3a: eb08 0c03 add.w ip, r8, r3 + 8031b3e: f858 3003 ldr.w r3, [r8, r3] + 8031b42: 9308 str r3, [sp, #32] + 8031b44: 0e1b lsrs r3, r3, #24 + 8031b46: 9311 str r3, [sp, #68] ; 0x44 + 8031b48: f8dc 3004 ldr.w r3, [ip, #4] + 8031b4c: 930d str r3, [sp, #52] ; 0x34 + 8031b4e: 0e1b lsrs r3, r3, #24 + 8031b50: 9314 str r3, [sp, #80] ; 0x50 + 8031b52: b280 uxth r0, r0 + 8031b54: 9d11 ldr r5, [sp, #68] ; 0x44 + 8031b56: b289 uxth r1, r1 + 8031b58: fb00 f901 mul.w r9, r0, r1 + 8031b5c: 0100 lsls r0, r0, #4 + 8031b5e: ebc9 1101 rsb r1, r9, r1, lsl #4 + 8031b62: eba0 0809 sub.w r8, r0, r9 + 8031b66: f5c0 7380 rsb r3, r0, #256 ; 0x100 + 8031b6a: 9813 ldr r0, [sp, #76] ; 0x4c + 8031b6c: b289 uxth r1, r1 + 8031b6e: fa1f f888 uxth.w r8, r8 + 8031b72: 1a5b subs r3, r3, r1 + 8031b74: fb08 f000 mul.w r0, r8, r0 + 8031b78: b29b uxth r3, r3 + 8031b7a: fb03 000e mla r0, r3, lr, r0 + 8031b7e: fb01 0005 mla r0, r1, r5, r0 + 8031b82: 9d14 ldr r5, [sp, #80] ; 0x50 + 8031b84: fb09 0005 mla r0, r9, r5, r0 + 8031b88: f3c0 2007 ubfx r0, r0, #8, #8 + 8031b8c: 2800 cmp r0, #0 + 8031b8e: f000 80fa beq.w 8031d86 <_ZN8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x350> + 8031b92: f1be 0fff cmp.w lr, #255 ; 0xff + 8031b96: d01b beq.n 8031bd0 <_ZN8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x19a> + 8031b98: f002 1aff and.w sl, r2, #16711935 ; 0xff00ff + 8031b9c: f402 427f and.w r2, r2, #65280 ; 0xff00 + 8031ba0: fb0e fa0a mul.w sl, lr, sl + 8031ba4: fb0e fe02 mul.w lr, lr, r2 + 8031ba8: ea4f 221a mov.w r2, sl, lsr #8 + 8031bac: f10a 1a01 add.w sl, sl, #65537 ; 0x10001 + 8031bb0: f50e 7c80 add.w ip, lr, #256 ; 0x100 + 8031bb4: f002 12ff and.w r2, r2, #16711935 ; 0xff00ff + 8031bb8: eb0c 2c1e add.w ip, ip, lr, lsr #8 + 8031bbc: 4452 add r2, sl + 8031bbe: ea4f 2c1c mov.w ip, ip, lsr #8 + 8031bc2: 0a12 lsrs r2, r2, #8 + 8031bc4: f40c 4c7f and.w ip, ip, #65280 ; 0xff00 + 8031bc8: f002 12ff and.w r2, r2, #16711935 ; 0xff00ff + 8031bcc: ea42 020c orr.w r2, r2, ip + 8031bd0: 9d13 ldr r5, [sp, #76] ; 0x4c + 8031bd2: 2dff cmp r5, #255 ; 0xff + 8031bd4: d021 beq.n 8031c1a <_ZN8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1e4> + 8031bd6: 9d0c ldr r5, [sp, #48] ; 0x30 + 8031bd8: f005 1bff and.w fp, r5, #16711935 ; 0xff00ff + 8031bdc: 9d13 ldr r5, [sp, #76] ; 0x4c + 8031bde: fb05 fb0b mul.w fp, r5, fp + 8031be2: 9d0c ldr r5, [sp, #48] ; 0x30 + 8031be4: f405 4a7f and.w sl, r5, #65280 ; 0xff00 + 8031be8: 9d13 ldr r5, [sp, #76] ; 0x4c + 8031bea: ea4f 2e1b mov.w lr, fp, lsr #8 + 8031bee: f10b 1b01 add.w fp, fp, #65537 ; 0x10001 + 8031bf2: fb05 fa0a mul.w sl, r5, sl + 8031bf6: f00e 1eff and.w lr, lr, #16711935 ; 0xff00ff + 8031bfa: f50a 7c80 add.w ip, sl, #256 ; 0x100 + 8031bfe: 44de add lr, fp + 8031c00: eb0c 2a1a add.w sl, ip, sl, lsr #8 + 8031c04: ea4f 2e1e mov.w lr, lr, lsr #8 + 8031c08: ea4f 2a1a mov.w sl, sl, lsr #8 + 8031c0c: f00e 1eff and.w lr, lr, #16711935 ; 0xff00ff + 8031c10: f40a 4a7f and.w sl, sl, #65280 ; 0xff00 + 8031c14: ea4e 050a orr.w r5, lr, sl + 8031c18: 950c str r5, [sp, #48] ; 0x30 + 8031c1a: 9d11 ldr r5, [sp, #68] ; 0x44 + 8031c1c: 2dff cmp r5, #255 ; 0xff + 8031c1e: d021 beq.n 8031c64 <_ZN8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x22e> + 8031c20: 9d08 ldr r5, [sp, #32] + 8031c22: f005 1bff and.w fp, r5, #16711935 ; 0xff00ff + 8031c26: 9d11 ldr r5, [sp, #68] ; 0x44 + 8031c28: fb05 fb0b mul.w fp, r5, fp + 8031c2c: 9d08 ldr r5, [sp, #32] + 8031c2e: f405 4a7f and.w sl, r5, #65280 ; 0xff00 + 8031c32: 9d11 ldr r5, [sp, #68] ; 0x44 + 8031c34: ea4f 2e1b mov.w lr, fp, lsr #8 + 8031c38: f10b 1b01 add.w fp, fp, #65537 ; 0x10001 + 8031c3c: fb05 fa0a mul.w sl, r5, sl + 8031c40: f00e 1eff and.w lr, lr, #16711935 ; 0xff00ff + 8031c44: f50a 7c80 add.w ip, sl, #256 ; 0x100 + 8031c48: 44de add lr, fp + 8031c4a: eb0c 2a1a add.w sl, ip, sl, lsr #8 + 8031c4e: ea4f 2e1e mov.w lr, lr, lsr #8 + 8031c52: ea4f 2a1a mov.w sl, sl, lsr #8 + 8031c56: f00e 1eff and.w lr, lr, #16711935 ; 0xff00ff + 8031c5a: f40a 4a7f and.w sl, sl, #65280 ; 0xff00 + 8031c5e: ea4e 050a orr.w r5, lr, sl + 8031c62: 9508 str r5, [sp, #32] + 8031c64: 9d14 ldr r5, [sp, #80] ; 0x50 + 8031c66: 2dff cmp r5, #255 ; 0xff + 8031c68: d021 beq.n 8031cae <_ZN8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x278> + 8031c6a: 9d0d ldr r5, [sp, #52] ; 0x34 + 8031c6c: f005 1bff and.w fp, r5, #16711935 ; 0xff00ff + 8031c70: 9d14 ldr r5, [sp, #80] ; 0x50 + 8031c72: fb05 fb0b mul.w fp, r5, fp + 8031c76: 9d0d ldr r5, [sp, #52] ; 0x34 + 8031c78: f405 4a7f and.w sl, r5, #65280 ; 0xff00 + 8031c7c: 9d14 ldr r5, [sp, #80] ; 0x50 + 8031c7e: ea4f 2e1b mov.w lr, fp, lsr #8 + 8031c82: f10b 1b01 add.w fp, fp, #65537 ; 0x10001 + 8031c86: fb05 fa0a mul.w sl, r5, sl + 8031c8a: f00e 1eff and.w lr, lr, #16711935 ; 0xff00ff + 8031c8e: f50a 7c80 add.w ip, sl, #256 ; 0x100 + 8031c92: 44de add lr, fp + 8031c94: eb0c 2a1a add.w sl, ip, sl, lsr #8 + 8031c98: ea4f 2e1e mov.w lr, lr, lsr #8 + 8031c9c: ea4f 2a1a mov.w sl, sl, lsr #8 + 8031ca0: f00e 1eff and.w lr, lr, #16711935 ; 0xff00ff + 8031ca4: f40a 4a7f and.w sl, sl, #65280 ; 0xff00 + 8031ca8: ea4e 050a orr.w r5, lr, sl + 8031cac: 950d str r5, [sp, #52] ; 0x34 + 8031cae: 9d0c ldr r5, [sp, #48] ; 0x30 + 8031cb0: f002 1eff and.w lr, r2, #16711935 ; 0xff00ff + 8031cb4: f402 427f and.w r2, r2, #65280 ; 0xff00 + 8031cb8: f005 1cff and.w ip, r5, #16711935 ; 0xff00ff + 8031cbc: 9d08 ldr r5, [sp, #32] + 8031cbe: fb08 fc0c mul.w ip, r8, ip + 8031cc2: fb03 cc0e mla ip, r3, lr, ip + 8031cc6: f005 1eff and.w lr, r5, #16711935 ; 0xff00ff + 8031cca: 9d0d ldr r5, [sp, #52] ; 0x34 + 8031ccc: fb01 cc0e mla ip, r1, lr, ip + 8031cd0: f005 1eff and.w lr, r5, #16711935 ; 0xff00ff + 8031cd4: 9d0c ldr r5, [sp, #48] ; 0x30 + 8031cd6: fb09 cc0e mla ip, r9, lr, ip + 8031cda: f405 4e7f and.w lr, r5, #65280 ; 0xff00 + 8031cde: 9d0b ldr r5, [sp, #44] ; 0x2c + 8031ce0: fb08 f80e mul.w r8, r8, lr + 8031ce4: ea4f 2c1c mov.w ip, ip, lsr #8 + 8031ce8: fb03 8202 mla r2, r3, r2, r8 + 8031cec: 9b08 ldr r3, [sp, #32] + 8031cee: f00c 1cff and.w ip, ip, #16711935 ; 0xff00ff + 8031cf2: f403 4a7f and.w sl, r3, #65280 ; 0xff00 + 8031cf6: 9b0d ldr r3, [sp, #52] ; 0x34 + 8031cf8: fb01 220a mla r2, r1, sl, r2 + 8031cfc: f403 417f and.w r1, r3, #65280 ; 0xff00 + 8031d00: 883b ldrh r3, [r7, #0] + 8031d02: fb09 2901 mla r9, r9, r1, r2 + 8031d06: 9a0b ldr r2, [sp, #44] ; 0x2c + 8031d08: 1219 asrs r1, r3, #8 + 8031d0a: 4342 muls r2, r0 + 8031d0c: ea4f 2919 mov.w r9, r9, lsr #8 + 8031d10: f001 01f8 and.w r1, r1, #248 ; 0xf8 + 8031d14: 1c50 adds r0, r2, #1 + 8031d16: f409 497f and.w r9, r9, #65280 ; 0xff00 + 8031d1a: eb00 2012 add.w r0, r0, r2, lsr #8 + 8031d1e: ea4c 0c09 orr.w ip, ip, r9 + 8031d22: ea6f 2010 mvn.w r0, r0, lsr #8 + 8031d26: ea4f 421c mov.w r2, ip, lsr #16 + 8031d2a: f3cc 2e07 ubfx lr, ip, #8, #8 + 8031d2e: fa5f fc8c uxtb.w ip, ip + 8031d32: fb12 f205 smulbb r2, r2, r5 + 8031d36: b2c0 uxtb r0, r0 + 8031d38: fb1c fc05 smulbb ip, ip, r5 + 8031d3c: fb01 2100 mla r1, r1, r0, r2 + 8031d40: 10da asrs r2, r3, #3 + 8031d42: fb1e fe05 smulbb lr, lr, r5 + 8031d46: 00db lsls r3, r3, #3 + 8031d48: b289 uxth r1, r1 + 8031d4a: f002 02fc and.w r2, r2, #252 ; 0xfc + 8031d4e: b2db uxtb r3, r3 + 8031d50: fb02 e200 mla r2, r2, r0, lr + 8031d54: fb03 c300 mla r3, r3, r0, ip + 8031d58: b292 uxth r2, r2 + 8031d5a: fa1f fc83 uxth.w ip, r3 + 8031d5e: 1c4b adds r3, r1, #1 + 8031d60: eb03 2111 add.w r1, r3, r1, lsr #8 + 8031d64: f10c 0301 add.w r3, ip, #1 + 8031d68: eb03 231c add.w r3, r3, ip, lsr #8 + 8031d6c: f401 4178 and.w r1, r1, #63488 ; 0xf800 + 8031d70: f3c3 23c4 ubfx r3, r3, #11, #5 + 8031d74: 430b orrs r3, r1 + 8031d76: 1c51 adds r1, r2, #1 + 8031d78: eb01 2212 add.w r2, r1, r2, lsr #8 + 8031d7c: 0952 lsrs r2, r2, #5 + 8031d7e: f402 62fc and.w r2, r2, #2016 ; 0x7e0 + 8031d82: 4313 orrs r3, r2 + 8031d84: 803b strh r3, [r7, #0] + 8031d86: 9b29 ldr r3, [sp, #164] ; 0xa4 + 8031d88: 3702 adds r7, #2 + 8031d8a: 441c add r4, r3 + 8031d8c: 9b2a ldr r3, [sp, #168] ; 0xa8 + 8031d8e: 441e add r6, r3 + 8031d90: 9b18 ldr r3, [sp, #96] ; 0x60 + 8031d92: 3b01 subs r3, #1 + 8031d94: 9318 str r3, [sp, #96] ; 0x60 + 8031d96: e698 b.n 8031aca <_ZN8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x94> + 8031d98: 9b29 ldr r3, [sp, #164] ; 0xa4 + 8031d9a: 441c add r4, r3 + 8031d9c: 9b2a ldr r3, [sp, #168] ; 0xa8 + 8031d9e: 441e add r6, r3 + 8031da0: 9b07 ldr r3, [sp, #28] + 8031da2: 3b01 subs r3, #1 + 8031da4: 9307 str r3, [sp, #28] + 8031da6: 9b0a ldr r3, [sp, #40] ; 0x28 + 8031da8: 3302 adds r3, #2 + 8031daa: 930a str r3, [sp, #40] ; 0x28 + 8031dac: e66d b.n 8031a8a <_ZN8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x54> + 8031dae: d023 beq.n 8031df8 <_ZN8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x3c2> + 8031db0: 9b07 ldr r3, [sp, #28] + 8031db2: 9829 ldr r0, [sp, #164] ; 0xa4 + 8031db4: 3b01 subs r3, #1 + 8031db6: fb00 4003 mla r0, r0, r3, r4 + 8031dba: 1400 asrs r0, r0, #16 + 8031dbc: f53f ae82 bmi.w 8031ac4 <_ZN8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x8e> + 8031dc0: 3901 subs r1, #1 + 8031dc2: 4288 cmp r0, r1 + 8031dc4: f6bf ae7e bge.w 8031ac4 <_ZN8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x8e> + 8031dc8: 992a ldr r1, [sp, #168] ; 0xa8 + 8031dca: fb01 6303 mla r3, r1, r3, r6 + 8031dce: 141b asrs r3, r3, #16 + 8031dd0: f53f ae78 bmi.w 8031ac4 <_ZN8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x8e> + 8031dd4: 3a01 subs r2, #1 + 8031dd6: 4293 cmp r3, r2 + 8031dd8: f6bf ae74 bge.w 8031ac4 <_ZN8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x8e> + 8031ddc: f8dd b01c ldr.w fp, [sp, #28] + 8031de0: f8dd 9028 ldr.w r9, [sp, #40] ; 0x28 + 8031de4: f1bb 0f00 cmp.w fp, #0 + 8031de8: dc6c bgt.n 8031ec4 <_ZN8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x48e> + 8031dea: 9b07 ldr r3, [sp, #28] + 8031dec: ea23 75e3 bic.w r5, r3, r3, asr #31 + 8031df0: 9b0a ldr r3, [sp, #40] ; 0x28 + 8031df2: eb03 0345 add.w r3, r3, r5, lsl #1 + 8031df6: 930a str r3, [sp, #40] ; 0x28 + 8031df8: 9b17 ldr r3, [sp, #92] ; 0x5c + 8031dfa: 2b00 cmp r3, #0 + 8031dfc: f340 81b3 ble.w 8032166 <_ZN8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x730> + 8031e00: eeb7 7a00 vmov.f32 s14, #112 ; 0x3f800000 1.0 + 8031e04: 9b26 ldr r3, [sp, #152] ; 0x98 + 8031e06: ee30 0a04 vadd.f32 s0, s0, s8 + 8031e0a: ee70 0aa4 vadd.f32 s1, s1, s9 + 8031e0e: eef0 6a62 vmov.f32 s13, s5 + 8031e12: eec7 7a00 vdiv.f32 s15, s14, s0 + 8031e16: ee31 1a05 vadd.f32 s2, s2, s10 + 8031e1a: eefe 6ac8 vcvt.s32.f32 s13, s13, #16 + 8031e1e: ee16 4a90 vmov r4, s13 + 8031e22: eef0 6a43 vmov.f32 s13, s6 + 8031e26: eefe 6ac8 vcvt.s32.f32 s13, s13, #16 + 8031e2a: ee16 6a90 vmov r6, s13 + 8031e2e: ee20 7aa7 vmul.f32 s14, s1, s15 + 8031e32: ee61 7a27 vmul.f32 s15, s2, s15 + 8031e36: ee77 2a62 vsub.f32 s5, s14, s5 + 8031e3a: ee37 3ac3 vsub.f32 s6, s15, s6 + 8031e3e: eefe 2ac8 vcvt.s32.f32 s5, s5, #16 + 8031e42: eebe 3ac8 vcvt.s32.f32 s6, s6, #16 + 8031e46: ee12 2a90 vmov r2, s5 + 8031e4a: eef0 2a47 vmov.f32 s5, s14 + 8031e4e: fb92 f3f3 sdiv r3, r2, r3 + 8031e52: ee13 2a10 vmov r2, s6 + 8031e56: 9329 str r3, [sp, #164] ; 0xa4 + 8031e58: 9b26 ldr r3, [sp, #152] ; 0x98 + 8031e5a: eeb0 3a67 vmov.f32 s6, s15 + 8031e5e: fb92 f3f3 sdiv r3, r2, r3 + 8031e62: 932a str r3, [sp, #168] ; 0xa8 + 8031e64: 9b17 ldr r3, [sp, #92] ; 0x5c + 8031e66: 9a19 ldr r2, [sp, #100] ; 0x64 + 8031e68: 3b01 subs r3, #1 + 8031e6a: 9317 str r3, [sp, #92] ; 0x5c + 8031e6c: 9b26 ldr r3, [sp, #152] ; 0x98 + 8031e6e: bf08 it eq + 8031e70: 4613 moveq r3, r2 + 8031e72: 9307 str r3, [sp, #28] + 8031e74: e5fb b.n 8031a6e <_ZN8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x38> + 8031e76: 2900 cmp r1, #0 + 8031e78: f43f ae6b beq.w 8031b52 <_ZN8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x11c> + 8031e7c: f858 3023 ldr.w r3, [r8, r3, lsl #2] + 8031e80: 9308 str r3, [sp, #32] + 8031e82: 0e1b lsrs r3, r3, #24 + 8031e84: 9311 str r3, [sp, #68] ; 0x44 + 8031e86: e664 b.n 8031b52 <_ZN8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x11c> + 8031e88: f112 0801 adds.w r8, r2, #1 + 8031e8c: f53f af7b bmi.w 8031d86 <_ZN8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x350> + 8031e90: 4543 cmp r3, r8 + 8031e92: f6ff af78 blt.w 8031d86 <_ZN8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x350> + 8031e96: f11c 0801 adds.w r8, ip, #1 + 8031e9a: f53f af74 bmi.w 8031d86 <_ZN8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x350> + 8031e9e: 45c6 cmp lr, r8 + 8031ea0: f6ff af71 blt.w 8031d86 <_ZN8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x350> + 8031ea4: 9d1a ldr r5, [sp, #104] ; 0x68 + 8031ea6: b21b sxth r3, r3 + 8031ea8: 9201 str r2, [sp, #4] + 8031eaa: fa0f f28e sxth.w r2, lr + 8031eae: e9cd 1504 strd r1, r5, [sp, #16] + 8031eb2: e9cd c002 strd ip, r0, [sp, #8] + 8031eb6: 9200 str r2, [sp, #0] + 8031eb8: 4639 mov r1, r7 + 8031eba: 9a10 ldr r2, [sp, #64] ; 0x40 + 8031ebc: 981b ldr r0, [sp, #108] ; 0x6c + 8031ebe: f7ff fc79 bl 80317b4 <_ZNK8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKmssiihhh> + 8031ec2: e760 b.n 8031d86 <_ZN8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x350> + 8031ec4: 9b2e ldr r3, [sp, #184] ; 0xb8 + 8031ec6: 1427 asrs r7, r4, #16 + 8031ec8: 9d10 ldr r5, [sp, #64] ; 0x40 + 8031eca: f3c4 3203 ubfx r2, r4, #12, #4 + 8031ece: f9b3 1008 ldrsh.w r1, [r3, #8] + 8031ed2: 1433 asrs r3, r6, #16 + 8031ed4: f3c6 3003 ubfx r0, r6, #12, #4 + 8031ed8: fb01 7303 mla r3, r1, r3, r7 + 8031edc: eb05 0783 add.w r7, r5, r3, lsl #2 + 8031ee0: f855 3023 ldr.w r3, [r5, r3, lsl #2] + 8031ee4: ea4f 6c13 mov.w ip, r3, lsr #24 + 8031ee8: 2a00 cmp r2, #0 + 8031eea: f000 8133 beq.w 8032154 <_ZN8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x71e> + 8031eee: 687d ldr r5, [r7, #4] + 8031ef0: 950e str r5, [sp, #56] ; 0x38 + 8031ef2: 0e2d lsrs r5, r5, #24 + 8031ef4: 9515 str r5, [sp, #84] ; 0x54 + 8031ef6: b178 cbz r0, 8031f18 <_ZN8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x4e2> + 8031ef8: f101 4180 add.w r1, r1, #1073741824 ; 0x40000000 + 8031efc: 3901 subs r1, #1 + 8031efe: 0089 lsls r1, r1, #2 + 8031f00: 3104 adds r1, #4 + 8031f02: eb07 0e01 add.w lr, r7, r1 + 8031f06: 5879 ldr r1, [r7, r1] + 8031f08: 9109 str r1, [sp, #36] ; 0x24 + 8031f0a: 0e09 lsrs r1, r1, #24 + 8031f0c: 9112 str r1, [sp, #72] ; 0x48 + 8031f0e: f8de 1004 ldr.w r1, [lr, #4] + 8031f12: 910f str r1, [sp, #60] ; 0x3c + 8031f14: 0e09 lsrs r1, r1, #24 + 8031f16: 9116 str r1, [sp, #88] ; 0x58 + 8031f18: b292 uxth r2, r2 + 8031f1a: 9915 ldr r1, [sp, #84] ; 0x54 + 8031f1c: b280 uxth r0, r0 + 8031f1e: 9d12 ldr r5, [sp, #72] ; 0x48 + 8031f20: fb02 f800 mul.w r8, r2, r0 + 8031f24: 0112 lsls r2, r2, #4 + 8031f26: ebc8 1000 rsb r0, r8, r0, lsl #4 + 8031f2a: eba2 0e08 sub.w lr, r2, r8 + 8031f2e: f5c2 7280 rsb r2, r2, #256 ; 0x100 + 8031f32: b280 uxth r0, r0 + 8031f34: fa1f fe8e uxth.w lr, lr + 8031f38: 1a12 subs r2, r2, r0 + 8031f3a: fb0e f101 mul.w r1, lr, r1 + 8031f3e: b292 uxth r2, r2 + 8031f40: fb02 110c mla r1, r2, ip, r1 + 8031f44: fb00 1105 mla r1, r0, r5, r1 + 8031f48: 9d16 ldr r5, [sp, #88] ; 0x58 + 8031f4a: fb08 1105 mla r1, r8, r5, r1 + 8031f4e: f3c1 2107 ubfx r1, r1, #8, #8 + 8031f52: 2900 cmp r1, #0 + 8031f54: f000 80f5 beq.w 8032142 <_ZN8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x70c> + 8031f58: f1bc 0fff cmp.w ip, #255 ; 0xff + 8031f5c: d019 beq.n 8031f92 <_ZN8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x55c> + 8031f5e: f003 1aff and.w sl, r3, #16711935 ; 0xff00ff + 8031f62: f403 437f and.w r3, r3, #65280 ; 0xff00 + 8031f66: fb0c fa0a mul.w sl, ip, sl + 8031f6a: fb0c fc03 mul.w ip, ip, r3 + 8031f6e: ea4f 231a mov.w r3, sl, lsr #8 + 8031f72: f10a 1a01 add.w sl, sl, #65537 ; 0x10001 + 8031f76: f50c 7780 add.w r7, ip, #256 ; 0x100 + 8031f7a: f003 13ff and.w r3, r3, #16711935 ; 0xff00ff + 8031f7e: eb07 271c add.w r7, r7, ip, lsr #8 + 8031f82: 4453 add r3, sl + 8031f84: 0a3f lsrs r7, r7, #8 + 8031f86: 0a1b lsrs r3, r3, #8 + 8031f88: f407 477f and.w r7, r7, #65280 ; 0xff00 + 8031f8c: f003 13ff and.w r3, r3, #16711935 ; 0xff00ff + 8031f90: 433b orrs r3, r7 + 8031f92: 9d15 ldr r5, [sp, #84] ; 0x54 + 8031f94: 2dff cmp r5, #255 ; 0xff + 8031f96: d020 beq.n 8031fda <_ZN8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x5a4> + 8031f98: 9d0e ldr r5, [sp, #56] ; 0x38 + 8031f9a: f005 17ff and.w r7, r5, #16711935 ; 0xff00ff + 8031f9e: 9d15 ldr r5, [sp, #84] ; 0x54 + 8031fa0: 436f muls r7, r5 + 8031fa2: 9d0e ldr r5, [sp, #56] ; 0x38 + 8031fa4: ea4f 2c17 mov.w ip, r7, lsr #8 + 8031fa8: f405 4a7f and.w sl, r5, #65280 ; 0xff00 + 8031fac: 9d15 ldr r5, [sp, #84] ; 0x54 + 8031fae: f107 1701 add.w r7, r7, #65537 ; 0x10001 + 8031fb2: f00c 1cff and.w ip, ip, #16711935 ; 0xff00ff + 8031fb6: fb05 fa0a mul.w sl, r5, sl + 8031fba: 44bc add ip, r7 + 8031fbc: f50a 7780 add.w r7, sl, #256 ; 0x100 + 8031fc0: ea4f 2c1c mov.w ip, ip, lsr #8 + 8031fc4: eb07 2a1a add.w sl, r7, sl, lsr #8 + 8031fc8: f00c 1cff and.w ip, ip, #16711935 ; 0xff00ff + 8031fcc: ea4f 2a1a mov.w sl, sl, lsr #8 + 8031fd0: f40a 4a7f and.w sl, sl, #65280 ; 0xff00 + 8031fd4: ea4c 050a orr.w r5, ip, sl + 8031fd8: 950e str r5, [sp, #56] ; 0x38 + 8031fda: 9d12 ldr r5, [sp, #72] ; 0x48 + 8031fdc: 2dff cmp r5, #255 ; 0xff + 8031fde: d020 beq.n 8032022 <_ZN8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x5ec> + 8031fe0: 9d09 ldr r5, [sp, #36] ; 0x24 + 8031fe2: f005 17ff and.w r7, r5, #16711935 ; 0xff00ff + 8031fe6: 9d12 ldr r5, [sp, #72] ; 0x48 + 8031fe8: 436f muls r7, r5 + 8031fea: 9d09 ldr r5, [sp, #36] ; 0x24 + 8031fec: ea4f 2c17 mov.w ip, r7, lsr #8 + 8031ff0: f405 4a7f and.w sl, r5, #65280 ; 0xff00 + 8031ff4: 9d12 ldr r5, [sp, #72] ; 0x48 + 8031ff6: f107 1701 add.w r7, r7, #65537 ; 0x10001 + 8031ffa: f00c 1cff and.w ip, ip, #16711935 ; 0xff00ff + 8031ffe: fb05 fa0a mul.w sl, r5, sl + 8032002: 44bc add ip, r7 + 8032004: f50a 7780 add.w r7, sl, #256 ; 0x100 + 8032008: ea4f 2c1c mov.w ip, ip, lsr #8 + 803200c: eb07 2a1a add.w sl, r7, sl, lsr #8 + 8032010: f00c 1cff and.w ip, ip, #16711935 ; 0xff00ff + 8032014: ea4f 2a1a mov.w sl, sl, lsr #8 + 8032018: f40a 4a7f and.w sl, sl, #65280 ; 0xff00 + 803201c: ea4c 050a orr.w r5, ip, sl + 8032020: 9509 str r5, [sp, #36] ; 0x24 + 8032022: 9d16 ldr r5, [sp, #88] ; 0x58 + 8032024: 2dff cmp r5, #255 ; 0xff + 8032026: d020 beq.n 803206a <_ZN8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x634> + 8032028: 9d0f ldr r5, [sp, #60] ; 0x3c + 803202a: f005 17ff and.w r7, r5, #16711935 ; 0xff00ff + 803202e: 9d16 ldr r5, [sp, #88] ; 0x58 + 8032030: 436f muls r7, r5 + 8032032: 9d0f ldr r5, [sp, #60] ; 0x3c + 8032034: ea4f 2c17 mov.w ip, r7, lsr #8 + 8032038: f405 4a7f and.w sl, r5, #65280 ; 0xff00 + 803203c: 9d16 ldr r5, [sp, #88] ; 0x58 + 803203e: f107 1701 add.w r7, r7, #65537 ; 0x10001 + 8032042: f00c 1cff and.w ip, ip, #16711935 ; 0xff00ff + 8032046: fb05 fa0a mul.w sl, r5, sl + 803204a: 44bc add ip, r7 + 803204c: f50a 7780 add.w r7, sl, #256 ; 0x100 + 8032050: ea4f 2c1c mov.w ip, ip, lsr #8 + 8032054: eb07 2a1a add.w sl, r7, sl, lsr #8 + 8032058: f00c 1cff and.w ip, ip, #16711935 ; 0xff00ff + 803205c: ea4f 2a1a mov.w sl, sl, lsr #8 + 8032060: f40a 4a7f and.w sl, sl, #65280 ; 0xff00 + 8032064: ea4c 050a orr.w r5, ip, sl + 8032068: 950f str r5, [sp, #60] ; 0x3c + 803206a: 9d0e ldr r5, [sp, #56] ; 0x38 + 803206c: f003 1cff and.w ip, r3, #16711935 ; 0xff00ff + 8032070: f403 437f and.w r3, r3, #65280 ; 0xff00 + 8032074: f005 17ff and.w r7, r5, #16711935 ; 0xff00ff + 8032078: 9d09 ldr r5, [sp, #36] ; 0x24 + 803207a: fb0e f707 mul.w r7, lr, r7 + 803207e: fb02 770c mla r7, r2, ip, r7 + 8032082: f005 1cff and.w ip, r5, #16711935 ; 0xff00ff + 8032086: 9d0f ldr r5, [sp, #60] ; 0x3c + 8032088: fb00 770c mla r7, r0, ip, r7 + 803208c: f005 1cff and.w ip, r5, #16711935 ; 0xff00ff + 8032090: 9d0e ldr r5, [sp, #56] ; 0x38 + 8032092: fb08 770c mla r7, r8, ip, r7 + 8032096: f405 4c7f and.w ip, r5, #65280 ; 0xff00 + 803209a: 9d0b ldr r5, [sp, #44] ; 0x2c + 803209c: fb0e fe0c mul.w lr, lr, ip + 80320a0: 0a3f lsrs r7, r7, #8 + 80320a2: fb02 e303 mla r3, r2, r3, lr + 80320a6: 9a09 ldr r2, [sp, #36] ; 0x24 + 80320a8: f007 17ff and.w r7, r7, #16711935 ; 0xff00ff + 80320ac: f402 4a7f and.w sl, r2, #65280 ; 0xff00 + 80320b0: 9a0f ldr r2, [sp, #60] ; 0x3c + 80320b2: fb00 330a mla r3, r0, sl, r3 + 80320b6: f402 4c7f and.w ip, r2, #65280 ; 0xff00 + 80320ba: f8b9 0000 ldrh.w r0, [r9] + 80320be: fb08 3c0c mla ip, r8, ip, r3 + 80320c2: 9b0b ldr r3, [sp, #44] ; 0x2c + 80320c4: 1202 asrs r2, r0, #8 + 80320c6: 4359 muls r1, r3 + 80320c8: ea4f 2c1c mov.w ip, ip, lsr #8 + 80320cc: f002 02f8 and.w r2, r2, #248 ; 0xf8 + 80320d0: f40c 4c7f and.w ip, ip, #65280 ; 0xff00 + 80320d4: 1c4b adds r3, r1, #1 + 80320d6: ea47 070c orr.w r7, r7, ip + 80320da: eb03 2111 add.w r1, r3, r1, lsr #8 + 80320de: 0c3b lsrs r3, r7, #16 + 80320e0: ea6f 2111 mvn.w r1, r1, lsr #8 + 80320e4: f3c7 2c07 ubfx ip, r7, #8, #8 + 80320e8: b2ff uxtb r7, r7 + 80320ea: fb13 f305 smulbb r3, r3, r5 + 80320ee: b2c9 uxtb r1, r1 + 80320f0: fb17 f705 smulbb r7, r7, r5 + 80320f4: fb02 3201 mla r2, r2, r1, r3 + 80320f8: 10c3 asrs r3, r0, #3 + 80320fa: fb1c fc05 smulbb ip, ip, r5 + 80320fe: 00c0 lsls r0, r0, #3 + 8032100: b292 uxth r2, r2 + 8032102: f003 03fc and.w r3, r3, #252 ; 0xfc + 8032106: b2c0 uxtb r0, r0 + 8032108: fb03 c301 mla r3, r3, r1, ip + 803210c: fb00 7001 mla r0, r0, r1, r7 + 8032110: 1c51 adds r1, r2, #1 + 8032112: b29b uxth r3, r3 + 8032114: b280 uxth r0, r0 + 8032116: eb01 2212 add.w r2, r1, r2, lsr #8 + 803211a: f100 0c01 add.w ip, r0, #1 + 803211e: f402 4278 and.w r2, r2, #63488 ; 0xf800 + 8032122: eb0c 2c10 add.w ip, ip, r0, lsr #8 + 8032126: f3cc 2cc4 ubfx ip, ip, #11, #5 + 803212a: ea4c 0202 orr.w r2, ip, r2 + 803212e: f103 0c01 add.w ip, r3, #1 + 8032132: eb0c 2313 add.w r3, ip, r3, lsr #8 + 8032136: 095b lsrs r3, r3, #5 + 8032138: f403 63fc and.w r3, r3, #2016 ; 0x7e0 + 803213c: 431a orrs r2, r3 + 803213e: f8a9 2000 strh.w r2, [r9] + 8032142: 9b29 ldr r3, [sp, #164] ; 0xa4 + 8032144: f109 0902 add.w r9, r9, #2 + 8032148: f10b 3bff add.w fp, fp, #4294967295 + 803214c: 441c add r4, r3 + 803214e: 9b2a ldr r3, [sp, #168] ; 0xa8 + 8032150: 441e add r6, r3 + 8032152: e647 b.n 8031de4 <_ZN8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x3ae> + 8032154: 2800 cmp r0, #0 + 8032156: f43f aedf beq.w 8031f18 <_ZN8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x4e2> + 803215a: f857 1021 ldr.w r1, [r7, r1, lsl #2] + 803215e: 9109 str r1, [sp, #36] ; 0x24 + 8032160: 0e09 lsrs r1, r1, #24 + 8032162: 9112 str r1, [sp, #72] ; 0x48 + 8032164: e6d8 b.n 8031f18 <_ZN8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x4e2> + 8032166: b01d add sp, #116 ; 0x74 + 8032168: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + +0803216c <_ZNK8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKmssiihh>: + 803216c: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8032170: b085 sub sp, #20 + 8032172: e9dd 740f ldrd r7, r4, [sp, #60] ; 0x3c + 8032176: 9102 str r1, [sp, #8] + 8032178: 2c00 cmp r4, #0 + 803217a: fb04 7103 mla r1, r4, r3, r7 + 803217e: f9bd e038 ldrsh.w lr, [sp, #56] ; 0x38 + 8032182: f89d 6044 ldrb.w r6, [sp, #68] ; 0x44 + 8032186: eb02 0c81 add.w ip, r2, r1, lsl #2 + 803218a: f89d 0048 ldrb.w r0, [sp, #72] ; 0x48 + 803218e: f2c0 810c blt.w 80323aa <_ZNK8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKmssiihh+0x23e> + 8032192: 45a6 cmp lr, r4 + 8032194: f340 8109 ble.w 80323aa <_ZNK8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKmssiihh+0x23e> + 8032198: 2f00 cmp r7, #0 + 803219a: f2c0 8104 blt.w 80323a6 <_ZNK8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKmssiihh+0x23a> + 803219e: 42bb cmp r3, r7 + 80321a0: f340 8101 ble.w 80323a6 <_ZNK8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKmssiihh+0x23a> + 80321a4: f852 5021 ldr.w r5, [r2, r1, lsl #2] + 80321a8: 1c7a adds r2, r7, #1 + 80321aa: f100 8101 bmi.w 80323b0 <_ZNK8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKmssiihh+0x244> + 80321ae: 4293 cmp r3, r2 + 80321b0: f340 80fe ble.w 80323b0 <_ZNK8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKmssiihh+0x244> + 80321b4: 2e00 cmp r6, #0 + 80321b6: f000 80fd beq.w 80323b4 <_ZNK8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKmssiihh+0x248> + 80321ba: f8dc 1004 ldr.w r1, [ip, #4] + 80321be: 3401 adds r4, #1 + 80321c0: f100 80fc bmi.w 80323bc <_ZNK8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKmssiihh+0x250> + 80321c4: 45a6 cmp lr, r4 + 80321c6: f340 80f9 ble.w 80323bc <_ZNK8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKmssiihh+0x250> + 80321ca: 2800 cmp r0, #0 + 80321cc: f000 80f9 beq.w 80323c2 <_ZNK8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKmssiihh+0x256> + 80321d0: 2f00 cmp r7, #0 + 80321d2: eb0c 0283 add.w r2, ip, r3, lsl #2 + 80321d6: f2c0 80ef blt.w 80323b8 <_ZNK8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKmssiihh+0x24c> + 80321da: 42bb cmp r3, r7 + 80321dc: f340 80ec ble.w 80323b8 <_ZNK8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKmssiihh+0x24c> + 80321e0: f85c 4023 ldr.w r4, [ip, r3, lsl #2] + 80321e4: 3701 adds r7, #1 + 80321e6: f100 80ef bmi.w 80323c8 <_ZNK8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKmssiihh+0x25c> + 80321ea: 42bb cmp r3, r7 + 80321ec: f340 80ec ble.w 80323c8 <_ZNK8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKmssiihh+0x25c> + 80321f0: 2e00 cmp r6, #0 + 80321f2: f000 80eb beq.w 80323cc <_ZNK8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKmssiihh+0x260> + 80321f6: 6852 ldr r2, [r2, #4] + 80321f8: b2b6 uxth r6, r6 + 80321fa: b280 uxth r0, r0 + 80321fc: ea4f 6a11 mov.w sl, r1, lsr #24 + 8032200: fb00 fe06 mul.w lr, r0, r6 + 8032204: 0136 lsls r6, r6, #4 + 8032206: ea4f 6b15 mov.w fp, r5, lsr #24 + 803220a: ebce 1000 rsb r0, lr, r0, lsl #4 + 803220e: eba6 070e sub.w r7, r6, lr + 8032212: f5c6 7380 rsb r3, r6, #256 ; 0x100 + 8032216: ea4f 6914 mov.w r9, r4, lsr #24 + 803221a: b280 uxth r0, r0 + 803221c: b2bf uxth r7, r7 + 803221e: 1a1b subs r3, r3, r0 + 8032220: ea4f 6812 mov.w r8, r2, lsr #24 + 8032224: fb07 f60a mul.w r6, r7, sl + 8032228: b29b uxth r3, r3 + 803222a: fb0b 6603 mla r6, fp, r3, r6 + 803222e: fb00 6609 mla r6, r0, r9, r6 + 8032232: fb0e 6608 mla r6, lr, r8, r6 + 8032236: f3c6 2607 ubfx r6, r6, #8, #8 + 803223a: 9600 str r6, [sp, #0] + 803223c: 2e00 cmp r6, #0 + 803223e: f000 80af beq.w 80323a0 <_ZNK8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKmssiihh+0x234> + 8032242: f005 1cff and.w ip, r5, #16711935 ; 0xff00ff + 8032246: f405 457f and.w r5, r5, #65280 ; 0xff00 + 803224a: 9e02 ldr r6, [sp, #8] + 803224c: fb0b fc0c mul.w ip, fp, ip + 8032250: fb0b f505 mul.w r5, fp, r5 + 8032254: 8836 ldrh r6, [r6, #0] + 8032256: ea4f 2b1c mov.w fp, ip, lsr #8 + 803225a: f10c 1c01 add.w ip, ip, #65537 ; 0x10001 + 803225e: 9501 str r5, [sp, #4] + 8032260: f00b 1bff and.w fp, fp, #16711935 ; 0xff00ff + 8032264: 44dc add ip, fp + 8032266: ea4f 2c1c mov.w ip, ip, lsr #8 + 803226a: f00c 15ff and.w r5, ip, #16711935 ; 0xff00ff + 803226e: 9503 str r5, [sp, #12] + 8032270: 9d01 ldr r5, [sp, #4] + 8032272: f505 7c80 add.w ip, r5, #256 ; 0x100 + 8032276: eb0c 2515 add.w r5, ip, r5, lsr #8 + 803227a: f001 1cff and.w ip, r1, #16711935 ; 0xff00ff + 803227e: f401 417f and.w r1, r1, #65280 ; 0xff00 + 8032282: fb0a fc0c mul.w ip, sl, ip + 8032286: ea4f 2b15 mov.w fp, r5, lsr #8 + 803228a: fb0a fa01 mul.w sl, sl, r1 + 803228e: ea4f 251c mov.w r5, ip, lsr #8 + 8032292: f10c 1c01 add.w ip, ip, #65537 ; 0x10001 + 8032296: f50a 7180 add.w r1, sl, #256 ; 0x100 + 803229a: f005 15ff and.w r5, r5, #16711935 ; 0xff00ff + 803229e: eb01 2a1a add.w sl, r1, sl, lsr #8 + 80322a2: 4465 add r5, ip + 80322a4: f004 1cff and.w ip, r4, #16711935 ; 0xff00ff + 80322a8: f404 447f and.w r4, r4, #65280 ; 0xff00 + 80322ac: ea4f 2a1a mov.w sl, sl, lsr #8 + 80322b0: fb09 fc0c mul.w ip, r9, ip + 80322b4: 0a2d lsrs r5, r5, #8 + 80322b6: fb09 f904 mul.w r9, r9, r4 + 80322ba: f40a 4a7f and.w sl, sl, #65280 ; 0xff00 + 80322be: ea4f 211c mov.w r1, ip, lsr #8 + 80322c2: f005 15ff and.w r5, r5, #16711935 ; 0xff00ff + 80322c6: f509 7480 add.w r4, r9, #256 ; 0x100 + 80322ca: f10c 1c01 add.w ip, ip, #65537 ; 0x10001 + 80322ce: f001 11ff and.w r1, r1, #16711935 ; 0xff00ff + 80322d2: 437d muls r5, r7 + 80322d4: eb04 2919 add.w r9, r4, r9, lsr #8 + 80322d8: f002 14ff and.w r4, r2, #16711935 ; 0xff00ff + 80322dc: f402 427f and.w r2, r2, #65280 ; 0xff00 + 80322e0: 4461 add r1, ip + 80322e2: fb08 f404 mul.w r4, r8, r4 + 80322e6: ea4f 2919 mov.w r9, r9, lsr #8 + 80322ea: fb08 f802 mul.w r8, r8, r2 + 80322ee: 0a09 lsrs r1, r1, #8 + 80322f0: 0a22 lsrs r2, r4, #8 + 80322f2: f104 1401 add.w r4, r4, #65537 ; 0x10001 + 80322f6: f001 11ff and.w r1, r1, #16711935 ; 0xff00ff + 80322fa: fb07 f70a mul.w r7, r7, sl + 80322fe: f002 12ff and.w r2, r2, #16711935 ; 0xff00ff + 8032302: 4414 add r4, r2 + 8032304: f508 7280 add.w r2, r8, #256 ; 0x100 + 8032308: 0a24 lsrs r4, r4, #8 + 803230a: eb02 2818 add.w r8, r2, r8, lsr #8 + 803230e: 9a03 ldr r2, [sp, #12] + 8032310: f004 14ff and.w r4, r4, #16711935 ; 0xff00ff + 8032314: fb02 5503 mla r5, r2, r3, r5 + 8032318: ea4f 2818 mov.w r8, r8, lsr #8 + 803231c: fb04 540e mla r4, r4, lr, r5 + 8032320: f408 487f and.w r8, r8, #65280 ; 0xff00 + 8032324: fb01 4100 mla r1, r1, r0, r4 + 8032328: 0a09 lsrs r1, r1, #8 + 803232a: f001 14ff and.w r4, r1, #16711935 ; 0xff00ff + 803232e: f40b 417f and.w r1, fp, #65280 ; 0xff00 + 8032332: fb03 7101 mla r1, r3, r1, r7 + 8032336: 9b00 ldr r3, [sp, #0] + 8032338: fb0e 1e08 mla lr, lr, r8, r1 + 803233c: f409 417f and.w r1, r9, #65280 ; 0xff00 + 8032340: 43da mvns r2, r3 + 8032342: 1233 asrs r3, r6, #8 + 8032344: fb00 e101 mla r1, r0, r1, lr + 8032348: 10f0 asrs r0, r6, #3 + 803234a: b2d2 uxtb r2, r2 + 803234c: f003 03f8 and.w r3, r3, #248 ; 0xf8 + 8032350: 0a09 lsrs r1, r1, #8 + 8032352: f000 00fc and.w r0, r0, #252 ; 0xfc + 8032356: 00f6 lsls r6, r6, #3 + 8032358: 4353 muls r3, r2 + 803235a: f401 417f and.w r1, r1, #65280 ; 0xff00 + 803235e: 4350 muls r0, r2 + 8032360: b2f6 uxtb r6, r6 + 8032362: 4321 orrs r1, r4 + 8032364: 4356 muls r6, r2 + 8032366: 1c5a adds r2, r3, #1 + 8032368: eb02 2213 add.w r2, r2, r3, lsr #8 + 803236c: 0c0b lsrs r3, r1, #16 + 803236e: eb03 2312 add.w r3, r3, r2, lsr #8 + 8032372: 1c42 adds r2, r0, #1 + 8032374: eb02 2010 add.w r0, r2, r0, lsr #8 + 8032378: 0a0a lsrs r2, r1, #8 + 803237a: 021b lsls r3, r3, #8 + 803237c: eb02 2210 add.w r2, r2, r0, lsr #8 + 8032380: f403 4378 and.w r3, r3, #63488 ; 0xf800 + 8032384: 00d2 lsls r2, r2, #3 + 8032386: f402 62fc and.w r2, r2, #2016 ; 0x7e0 + 803238a: 4313 orrs r3, r2 + 803238c: 1c72 adds r2, r6, #1 + 803238e: eb02 2616 add.w r6, r2, r6, lsr #8 + 8032392: eb01 2116 add.w r1, r1, r6, lsr #8 + 8032396: f3c1 01c4 ubfx r1, r1, #3, #5 + 803239a: 4319 orrs r1, r3 + 803239c: 9b02 ldr r3, [sp, #8] + 803239e: 8019 strh r1, [r3, #0] + 80323a0: b005 add sp, #20 + 80323a2: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 80323a6: 2500 movs r5, #0 + 80323a8: e6fe b.n 80321a8 <_ZNK8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKmssiihh+0x3c> + 80323aa: 2100 movs r1, #0 + 80323ac: 460d mov r5, r1 + 80323ae: e706 b.n 80321be <_ZNK8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKmssiihh+0x52> + 80323b0: 2100 movs r1, #0 + 80323b2: e704 b.n 80321be <_ZNK8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKmssiihh+0x52> + 80323b4: 4631 mov r1, r6 + 80323b6: e702 b.n 80321be <_ZNK8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKmssiihh+0x52> + 80323b8: 2400 movs r4, #0 + 80323ba: e713 b.n 80321e4 <_ZNK8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKmssiihh+0x78> + 80323bc: 2200 movs r2, #0 + 80323be: 4614 mov r4, r2 + 80323c0: e71a b.n 80321f8 <_ZNK8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKmssiihh+0x8c> + 80323c2: 4602 mov r2, r0 + 80323c4: 4604 mov r4, r0 + 80323c6: e717 b.n 80321f8 <_ZNK8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKmssiihh+0x8c> + 80323c8: 2200 movs r2, #0 + 80323ca: e715 b.n 80321f8 <_ZNK8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKmssiihh+0x8c> + 80323cc: 4632 mov r2, r6 + 80323ce: e713 b.n 80321f8 <_ZNK8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKmssiihh+0x8c> + +080323d0 <_ZN8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff>: + 80323d0: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 80323d4: b09b sub sp, #108 ; 0x6c + 80323d6: 9218 str r2, [sp, #96] ; 0x60 + 80323d8: 9a29 ldr r2, [sp, #164] ; 0xa4 + 80323da: 9019 str r0, [sp, #100] ; 0x64 + 80323dc: 9116 str r1, [sp, #88] ; 0x58 + 80323de: 6850 ldr r0, [r2, #4] + 80323e0: 9307 str r3, [sp, #28] + 80323e2: 6812 ldr r2, [r2, #0] + 80323e4: e9dd 132a ldrd r1, r3, [sp, #168] ; 0xa8 + 80323e8: e9dd 4625 ldrd r4, r6, [sp, #148] ; 0x94 + 80323ec: fb00 1303 mla r3, r0, r3, r1 + 80323f0: eb02 0343 add.w r3, r2, r3, lsl #1 + 80323f4: 930a str r3, [sp, #40] ; 0x28 + 80323f6: 9b2c ldr r3, [sp, #176] ; 0xb0 + 80323f8: 681b ldr r3, [r3, #0] + 80323fa: 930f str r3, [sp, #60] ; 0x3c + 80323fc: 9b16 ldr r3, [sp, #88] ; 0x58 + 80323fe: 2b00 cmp r3, #0 + 8032400: dc03 bgt.n 803240a <_ZN8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x3a> + 8032402: 9b18 ldr r3, [sp, #96] ; 0x60 + 8032404: 2b00 cmp r3, #0 + 8032406: f340 8387 ble.w 8032b18 <_ZN8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x748> + 803240a: 9b2c ldr r3, [sp, #176] ; 0xb0 + 803240c: f9b3 1008 ldrsh.w r1, [r3, #8] + 8032410: f9b3 200c ldrsh.w r2, [r3, #12] + 8032414: 1e48 subs r0, r1, #1 + 8032416: 1e57 subs r7, r2, #1 + 8032418: 9b07 ldr r3, [sp, #28] + 803241a: 2b00 cmp r3, #0 + 803241c: f340 8166 ble.w 80326ec <_ZN8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x31c> + 8032420: ea5f 4c24 movs.w ip, r4, asr #16 + 8032424: ea4f 4326 mov.w r3, r6, asr #16 + 8032428: d406 bmi.n 8032438 <_ZN8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x68> + 803242a: 4584 cmp ip, r0 + 803242c: da04 bge.n 8032438 <_ZN8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x68> + 803242e: 2b00 cmp r3, #0 + 8032430: db02 blt.n 8032438 <_ZN8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x68> + 8032432: 42bb cmp r3, r7 + 8032434: f2c0 815b blt.w 80326ee <_ZN8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x31e> + 8032438: f11c 0c01 adds.w ip, ip, #1 + 803243c: f100 814b bmi.w 80326d6 <_ZN8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x306> + 8032440: 4561 cmp r1, ip + 8032442: f2c0 8148 blt.w 80326d6 <_ZN8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x306> + 8032446: 3301 adds r3, #1 + 8032448: f100 8145 bmi.w 80326d6 <_ZN8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x306> + 803244c: 429a cmp r2, r3 + 803244e: f2c0 8142 blt.w 80326d6 <_ZN8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x306> + 8032452: 9b07 ldr r3, [sp, #28] + 8032454: 9f0a ldr r7, [sp, #40] ; 0x28 + 8032456: 9317 str r3, [sp, #92] ; 0x5c + 8032458: 9b17 ldr r3, [sp, #92] ; 0x5c + 803245a: 2b00 cmp r3, #0 + 803245c: f340 8165 ble.w 803272a <_ZN8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x35a> + 8032460: 9a2c ldr r2, [sp, #176] ; 0xb0 + 8032462: ea4f 4c26 mov.w ip, r6, asr #16 + 8032466: 9b2c ldr r3, [sp, #176] ; 0xb0 + 8032468: f3c4 3103 ubfx r1, r4, #12, #4 + 803246c: f8d2 e00c ldr.w lr, [r2, #12] + 8032470: 1422 asrs r2, r4, #16 + 8032472: f3c6 3003 ubfx r0, r6, #12, #4 + 8032476: 689b ldr r3, [r3, #8] + 8032478: f100 81d5 bmi.w 8032826 <_ZN8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x456> + 803247c: f103 38ff add.w r8, r3, #4294967295 + 8032480: 4542 cmp r2, r8 + 8032482: f280 81d0 bge.w 8032826 <_ZN8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x456> + 8032486: f1bc 0f00 cmp.w ip, #0 + 803248a: f2c0 81cc blt.w 8032826 <_ZN8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x456> + 803248e: f10e 38ff add.w r8, lr, #4294967295 + 8032492: 45c4 cmp ip, r8 + 8032494: f280 81c7 bge.w 8032826 <_ZN8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x456> + 8032498: b21b sxth r3, r3 + 803249a: 9d0f ldr r5, [sp, #60] ; 0x3c + 803249c: fb0c 2203 mla r2, ip, r3, r2 + 80324a0: eb05 0882 add.w r8, r5, r2, lsl #2 + 80324a4: f855 2022 ldr.w r2, [r5, r2, lsl #2] + 80324a8: ea4f 6e12 mov.w lr, r2, lsr #24 + 80324ac: 2900 cmp r1, #0 + 80324ae: f000 8182 beq.w 80327b6 <_ZN8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x3e6> + 80324b2: f8d8 5004 ldr.w r5, [r8, #4] + 80324b6: 950b str r5, [sp, #44] ; 0x2c + 80324b8: 0e2d lsrs r5, r5, #24 + 80324ba: 9512 str r5, [sp, #72] ; 0x48 + 80324bc: b180 cbz r0, 80324e0 <_ZN8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x110> + 80324be: f103 4380 add.w r3, r3, #1073741824 ; 0x40000000 + 80324c2: 3b01 subs r3, #1 + 80324c4: 009b lsls r3, r3, #2 + 80324c6: 3304 adds r3, #4 + 80324c8: eb08 0c03 add.w ip, r8, r3 + 80324cc: f858 3003 ldr.w r3, [r8, r3] + 80324d0: 9308 str r3, [sp, #32] + 80324d2: 0e1b lsrs r3, r3, #24 + 80324d4: 9310 str r3, [sp, #64] ; 0x40 + 80324d6: f8dc 3004 ldr.w r3, [ip, #4] + 80324da: 930c str r3, [sp, #48] ; 0x30 + 80324dc: 0e1b lsrs r3, r3, #24 + 80324de: 9313 str r3, [sp, #76] ; 0x4c + 80324e0: b289 uxth r1, r1 + 80324e2: 9b12 ldr r3, [sp, #72] ; 0x48 + 80324e4: b280 uxth r0, r0 + 80324e6: 9d10 ldr r5, [sp, #64] ; 0x40 + 80324e8: fb01 f900 mul.w r9, r1, r0 + 80324ec: 0109 lsls r1, r1, #4 + 80324ee: ebc9 1000 rsb r0, r9, r0, lsl #4 + 80324f2: eba1 0809 sub.w r8, r1, r9 + 80324f6: f5c1 7180 rsb r1, r1, #256 ; 0x100 + 80324fa: b280 uxth r0, r0 + 80324fc: fa1f f888 uxth.w r8, r8 + 8032500: 1a09 subs r1, r1, r0 + 8032502: fb08 f303 mul.w r3, r8, r3 + 8032506: b289 uxth r1, r1 + 8032508: fb01 330e mla r3, r1, lr, r3 + 803250c: fb00 3305 mla r3, r0, r5, r3 + 8032510: 9d13 ldr r5, [sp, #76] ; 0x4c + 8032512: fb09 3305 mla r3, r9, r5, r3 + 8032516: f3c3 2307 ubfx r3, r3, #8, #8 + 803251a: 2b00 cmp r3, #0 + 803251c: f000 80d2 beq.w 80326c4 <_ZN8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x2f4> + 8032520: f1be 0fff cmp.w lr, #255 ; 0xff + 8032524: d01b beq.n 803255e <_ZN8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x18e> + 8032526: f002 1aff and.w sl, r2, #16711935 ; 0xff00ff + 803252a: f402 427f and.w r2, r2, #65280 ; 0xff00 + 803252e: fb0e fa0a mul.w sl, lr, sl + 8032532: fb0e fe02 mul.w lr, lr, r2 + 8032536: ea4f 221a mov.w r2, sl, lsr #8 + 803253a: f10a 1a01 add.w sl, sl, #65537 ; 0x10001 + 803253e: f50e 7c80 add.w ip, lr, #256 ; 0x100 + 8032542: f002 12ff and.w r2, r2, #16711935 ; 0xff00ff + 8032546: eb0c 2c1e add.w ip, ip, lr, lsr #8 + 803254a: 4452 add r2, sl + 803254c: ea4f 2c1c mov.w ip, ip, lsr #8 + 8032550: 0a12 lsrs r2, r2, #8 + 8032552: f40c 4c7f and.w ip, ip, #65280 ; 0xff00 + 8032556: f002 12ff and.w r2, r2, #16711935 ; 0xff00ff + 803255a: ea42 020c orr.w r2, r2, ip + 803255e: 9d12 ldr r5, [sp, #72] ; 0x48 + 8032560: 2dff cmp r5, #255 ; 0xff + 8032562: d021 beq.n 80325a8 <_ZN8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1d8> + 8032564: 9d0b ldr r5, [sp, #44] ; 0x2c + 8032566: f005 1bff and.w fp, r5, #16711935 ; 0xff00ff + 803256a: 9d12 ldr r5, [sp, #72] ; 0x48 + 803256c: fb05 fb0b mul.w fp, r5, fp + 8032570: 9d0b ldr r5, [sp, #44] ; 0x2c + 8032572: f405 4a7f and.w sl, r5, #65280 ; 0xff00 + 8032576: 9d12 ldr r5, [sp, #72] ; 0x48 + 8032578: ea4f 2e1b mov.w lr, fp, lsr #8 + 803257c: f10b 1b01 add.w fp, fp, #65537 ; 0x10001 + 8032580: fb05 fa0a mul.w sl, r5, sl + 8032584: f00e 1eff and.w lr, lr, #16711935 ; 0xff00ff + 8032588: f50a 7c80 add.w ip, sl, #256 ; 0x100 + 803258c: 44de add lr, fp + 803258e: eb0c 2a1a add.w sl, ip, sl, lsr #8 + 8032592: ea4f 2e1e mov.w lr, lr, lsr #8 + 8032596: ea4f 2a1a mov.w sl, sl, lsr #8 + 803259a: f00e 1eff and.w lr, lr, #16711935 ; 0xff00ff + 803259e: f40a 4a7f and.w sl, sl, #65280 ; 0xff00 + 80325a2: ea4e 050a orr.w r5, lr, sl + 80325a6: 950b str r5, [sp, #44] ; 0x2c + 80325a8: 9d10 ldr r5, [sp, #64] ; 0x40 + 80325aa: 2dff cmp r5, #255 ; 0xff + 80325ac: d021 beq.n 80325f2 <_ZN8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x222> + 80325ae: 9d08 ldr r5, [sp, #32] + 80325b0: f005 1bff and.w fp, r5, #16711935 ; 0xff00ff + 80325b4: 9d10 ldr r5, [sp, #64] ; 0x40 + 80325b6: fb05 fb0b mul.w fp, r5, fp + 80325ba: 9d08 ldr r5, [sp, #32] + 80325bc: f405 4e7f and.w lr, r5, #65280 ; 0xff00 + 80325c0: 9d10 ldr r5, [sp, #64] ; 0x40 + 80325c2: fb05 fa0e mul.w sl, r5, lr + 80325c6: ea4f 2e1b mov.w lr, fp, lsr #8 + 80325ca: f10b 1b01 add.w fp, fp, #65537 ; 0x10001 + 80325ce: f00e 1eff and.w lr, lr, #16711935 ; 0xff00ff + 80325d2: f50a 7c80 add.w ip, sl, #256 ; 0x100 + 80325d6: 44de add lr, fp + 80325d8: eb0c 2a1a add.w sl, ip, sl, lsr #8 + 80325dc: ea4f 2e1e mov.w lr, lr, lsr #8 + 80325e0: ea4f 2a1a mov.w sl, sl, lsr #8 + 80325e4: f00e 1eff and.w lr, lr, #16711935 ; 0xff00ff + 80325e8: f40a 4a7f and.w sl, sl, #65280 ; 0xff00 + 80325ec: ea4e 050a orr.w r5, lr, sl + 80325f0: 9508 str r5, [sp, #32] + 80325f2: 9d13 ldr r5, [sp, #76] ; 0x4c + 80325f4: 2dff cmp r5, #255 ; 0xff + 80325f6: d021 beq.n 803263c <_ZN8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x26c> + 80325f8: 9d0c ldr r5, [sp, #48] ; 0x30 + 80325fa: f005 1bff and.w fp, r5, #16711935 ; 0xff00ff + 80325fe: 9d13 ldr r5, [sp, #76] ; 0x4c + 8032600: fb05 fb0b mul.w fp, r5, fp + 8032604: 9d0c ldr r5, [sp, #48] ; 0x30 + 8032606: f405 4a7f and.w sl, r5, #65280 ; 0xff00 + 803260a: 9d13 ldr r5, [sp, #76] ; 0x4c + 803260c: ea4f 2e1b mov.w lr, fp, lsr #8 + 8032610: f10b 1b01 add.w fp, fp, #65537 ; 0x10001 + 8032614: fb05 fa0a mul.w sl, r5, sl + 8032618: f00e 1eff and.w lr, lr, #16711935 ; 0xff00ff + 803261c: f50a 7c80 add.w ip, sl, #256 ; 0x100 + 8032620: 44de add lr, fp + 8032622: eb0c 2a1a add.w sl, ip, sl, lsr #8 + 8032626: ea4f 2e1e mov.w lr, lr, lsr #8 + 803262a: ea4f 2a1a mov.w sl, sl, lsr #8 + 803262e: f00e 1eff and.w lr, lr, #16711935 ; 0xff00ff + 8032632: f40a 4a7f and.w sl, sl, #65280 ; 0xff00 + 8032636: ea4e 050a orr.w r5, lr, sl + 803263a: 950c str r5, [sp, #48] ; 0x30 + 803263c: 9d0b ldr r5, [sp, #44] ; 0x2c + 803263e: f002 1eff and.w lr, r2, #16711935 ; 0xff00ff + 8032642: f402 427f and.w r2, r2, #65280 ; 0xff00 + 8032646: 2bff cmp r3, #255 ; 0xff + 8032648: f005 1cff and.w ip, r5, #16711935 ; 0xff00ff + 803264c: 9d08 ldr r5, [sp, #32] + 803264e: fb08 fc0c mul.w ip, r8, ip + 8032652: fb01 cc0e mla ip, r1, lr, ip + 8032656: f005 1eff and.w lr, r5, #16711935 ; 0xff00ff + 803265a: 9d0c ldr r5, [sp, #48] ; 0x30 + 803265c: fb00 cc0e mla ip, r0, lr, ip + 8032660: f005 1eff and.w lr, r5, #16711935 ; 0xff00ff + 8032664: 9d0b ldr r5, [sp, #44] ; 0x2c + 8032666: fb09 cc0e mla ip, r9, lr, ip + 803266a: f405 4e7f and.w lr, r5, #65280 ; 0xff00 + 803266e: fb08 f80e mul.w r8, r8, lr + 8032672: ea4f 2c1c mov.w ip, ip, lsr #8 + 8032676: fb01 8202 mla r2, r1, r2, r8 + 803267a: 9908 ldr r1, [sp, #32] + 803267c: f00c 1cff and.w ip, ip, #16711935 ; 0xff00ff + 8032680: f401 4a7f and.w sl, r1, #65280 ; 0xff00 + 8032684: 990c ldr r1, [sp, #48] ; 0x30 + 8032686: fb00 220a mla r2, r0, sl, r2 + 803268a: f401 407f and.w r0, r1, #65280 ; 0xff00 + 803268e: fb09 2900 mla r9, r9, r0, r2 + 8032692: ea4f 2919 mov.w r9, r9, lsr #8 + 8032696: f409 497f and.w r9, r9, #65280 ; 0xff00 + 803269a: ea4c 0c09 orr.w ip, ip, r9 + 803269e: ea4f 221c mov.w r2, ip, lsr #8 + 80326a2: f040 8091 bne.w 80327c8 <_ZN8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x3f8> + 80326a6: ea4f 135c mov.w r3, ip, lsr #5 + 80326aa: f422 62ff bic.w r2, r2, #2040 ; 0x7f8 + 80326ae: f403 63fc and.w r3, r3, #2016 ; 0x7e0 + 80326b2: f022 0207 bic.w r2, r2, #7 + 80326b6: 431a orrs r2, r3 + 80326b8: f3cc 0cc4 ubfx ip, ip, #3, #5 + 80326bc: ea4c 0c02 orr.w ip, ip, r2 + 80326c0: f8a7 c000 strh.w ip, [r7] + 80326c4: 9b27 ldr r3, [sp, #156] ; 0x9c + 80326c6: 3702 adds r7, #2 + 80326c8: 441c add r4, r3 + 80326ca: 9b28 ldr r3, [sp, #160] ; 0xa0 + 80326cc: 441e add r6, r3 + 80326ce: 9b17 ldr r3, [sp, #92] ; 0x5c + 80326d0: 3b01 subs r3, #1 + 80326d2: 9317 str r3, [sp, #92] ; 0x5c + 80326d4: e6c0 b.n 8032458 <_ZN8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x88> + 80326d6: 9b27 ldr r3, [sp, #156] ; 0x9c + 80326d8: 441c add r4, r3 + 80326da: 9b28 ldr r3, [sp, #160] ; 0xa0 + 80326dc: 441e add r6, r3 + 80326de: 9b07 ldr r3, [sp, #28] + 80326e0: 3b01 subs r3, #1 + 80326e2: 9307 str r3, [sp, #28] + 80326e4: 9b0a ldr r3, [sp, #40] ; 0x28 + 80326e6: 3302 adds r3, #2 + 80326e8: 930a str r3, [sp, #40] ; 0x28 + 80326ea: e695 b.n 8032418 <_ZN8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x48> + 80326ec: d024 beq.n 8032738 <_ZN8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x368> + 80326ee: 9b07 ldr r3, [sp, #28] + 80326f0: 9827 ldr r0, [sp, #156] ; 0x9c + 80326f2: 3b01 subs r3, #1 + 80326f4: fb00 4003 mla r0, r0, r3, r4 + 80326f8: 1400 asrs r0, r0, #16 + 80326fa: f53f aeaa bmi.w 8032452 <_ZN8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x82> + 80326fe: 3901 subs r1, #1 + 8032700: 4288 cmp r0, r1 + 8032702: f6bf aea6 bge.w 8032452 <_ZN8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x82> + 8032706: 9928 ldr r1, [sp, #160] ; 0xa0 + 8032708: fb01 6303 mla r3, r1, r3, r6 + 803270c: 141b asrs r3, r3, #16 + 803270e: f53f aea0 bmi.w 8032452 <_ZN8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x82> + 8032712: 3a01 subs r2, #1 + 8032714: 4293 cmp r3, r2 + 8032716: f6bf ae9c bge.w 8032452 <_ZN8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x82> + 803271a: f8dd b01c ldr.w fp, [sp, #28] + 803271e: f8dd 8028 ldr.w r8, [sp, #40] ; 0x28 + 8032722: f1bb 0f00 cmp.w fp, #0 + 8032726: f300 809a bgt.w 803285e <_ZN8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x48e> + 803272a: 9b07 ldr r3, [sp, #28] + 803272c: ea23 75e3 bic.w r5, r3, r3, asr #31 + 8032730: 9b0a ldr r3, [sp, #40] ; 0x28 + 8032732: eb03 0345 add.w r3, r3, r5, lsl #1 + 8032736: 930a str r3, [sp, #40] ; 0x28 + 8032738: 9b16 ldr r3, [sp, #88] ; 0x58 + 803273a: 2b00 cmp r3, #0 + 803273c: f340 81ec ble.w 8032b18 <_ZN8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x748> + 8032740: eeb7 7a00 vmov.f32 s14, #112 ; 0x3f800000 1.0 + 8032744: 9b24 ldr r3, [sp, #144] ; 0x90 + 8032746: ee30 0a04 vadd.f32 s0, s0, s8 + 803274a: ee70 0aa4 vadd.f32 s1, s1, s9 + 803274e: eef0 6a62 vmov.f32 s13, s5 + 8032752: eec7 7a00 vdiv.f32 s15, s14, s0 + 8032756: ee31 1a05 vadd.f32 s2, s2, s10 + 803275a: eefe 6ac8 vcvt.s32.f32 s13, s13, #16 + 803275e: ee16 4a90 vmov r4, s13 + 8032762: eef0 6a43 vmov.f32 s13, s6 + 8032766: eefe 6ac8 vcvt.s32.f32 s13, s13, #16 + 803276a: ee16 6a90 vmov r6, s13 + 803276e: ee20 7aa7 vmul.f32 s14, s1, s15 + 8032772: ee61 7a27 vmul.f32 s15, s2, s15 + 8032776: ee77 2a62 vsub.f32 s5, s14, s5 + 803277a: ee37 3ac3 vsub.f32 s6, s15, s6 + 803277e: eefe 2ac8 vcvt.s32.f32 s5, s5, #16 + 8032782: eebe 3ac8 vcvt.s32.f32 s6, s6, #16 + 8032786: ee12 2a90 vmov r2, s5 + 803278a: eef0 2a47 vmov.f32 s5, s14 + 803278e: fb92 f3f3 sdiv r3, r2, r3 + 8032792: ee13 2a10 vmov r2, s6 + 8032796: 9327 str r3, [sp, #156] ; 0x9c + 8032798: 9b24 ldr r3, [sp, #144] ; 0x90 + 803279a: eeb0 3a67 vmov.f32 s6, s15 + 803279e: fb92 f3f3 sdiv r3, r2, r3 + 80327a2: 9328 str r3, [sp, #160] ; 0xa0 + 80327a4: 9b16 ldr r3, [sp, #88] ; 0x58 + 80327a6: 9a18 ldr r2, [sp, #96] ; 0x60 + 80327a8: 3b01 subs r3, #1 + 80327aa: 9316 str r3, [sp, #88] ; 0x58 + 80327ac: 9b24 ldr r3, [sp, #144] ; 0x90 + 80327ae: bf08 it eq + 80327b0: 4613 moveq r3, r2 + 80327b2: 9307 str r3, [sp, #28] + 80327b4: e622 b.n 80323fc <_ZN8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x2c> + 80327b6: 2800 cmp r0, #0 + 80327b8: f43f ae92 beq.w 80324e0 <_ZN8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x110> + 80327bc: f858 3023 ldr.w r3, [r8, r3, lsl #2] + 80327c0: 9308 str r3, [sp, #32] + 80327c2: 0e1b lsrs r3, r3, #24 + 80327c4: 9310 str r3, [sp, #64] ; 0x40 + 80327c6: e68b b.n 80324e0 <_ZN8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x110> + 80327c8: 8839 ldrh r1, [r7, #0] + 80327ca: 43db mvns r3, r3 + 80327cc: 4dd4 ldr r5, [pc, #848] ; (8032b20 <_ZN8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x750>) + 80327ce: ea4f 2e21 mov.w lr, r1, asr #8 + 80327d2: fa5f f883 uxtb.w r8, r3 + 80327d6: f00e 0ef8 and.w lr, lr, #248 ; 0xf8 + 80327da: 10c8 asrs r0, r1, #3 + 80327dc: 00cb lsls r3, r1, #3 + 80327de: fb0e fe08 mul.w lr, lr, r8 + 80327e2: f000 00fc and.w r0, r0, #252 ; 0xfc + 80327e6: b2db uxtb r3, r3 + 80327e8: f10e 0101 add.w r1, lr, #1 + 80327ec: fb00 f008 mul.w r0, r0, r8 + 80327f0: fb03 f308 mul.w r3, r3, r8 + 80327f4: eb01 2e1e add.w lr, r1, lr, lsr #8 + 80327f8: ea4f 411c mov.w r1, ip, lsr #16 + 80327fc: eb01 211e add.w r1, r1, lr, lsr #8 + 8032800: f100 0e01 add.w lr, r0, #1 + 8032804: eb0e 2010 add.w r0, lr, r0, lsr #8 + 8032808: b2c9 uxtb r1, r1 + 803280a: eb02 2210 add.w r2, r2, r0, lsr #8 + 803280e: ea05 2101 and.w r1, r5, r1, lsl #8 + 8032812: 00d2 lsls r2, r2, #3 + 8032814: f402 62fc and.w r2, r2, #2016 ; 0x7e0 + 8032818: 430a orrs r2, r1 + 803281a: 1c59 adds r1, r3, #1 + 803281c: eb01 2313 add.w r3, r1, r3, lsr #8 + 8032820: eb0c 2c13 add.w ip, ip, r3, lsr #8 + 8032824: e748 b.n 80326b8 <_ZN8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x2e8> + 8032826: f112 0801 adds.w r8, r2, #1 + 803282a: f53f af4b bmi.w 80326c4 <_ZN8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x2f4> + 803282e: 4543 cmp r3, r8 + 8032830: f6ff af48 blt.w 80326c4 <_ZN8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x2f4> + 8032834: f11c 0801 adds.w r8, ip, #1 + 8032838: f53f af44 bmi.w 80326c4 <_ZN8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x2f4> + 803283c: 45c6 cmp lr, r8 + 803283e: f6ff af41 blt.w 80326c4 <_ZN8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x2f4> + 8032842: b21b sxth r3, r3 + 8032844: e9cd 2c01 strd r2, ip, [sp, #4] + 8032848: fa0f f28e sxth.w r2, lr + 803284c: e9cd 1003 strd r1, r0, [sp, #12] + 8032850: 9200 str r2, [sp, #0] + 8032852: 4639 mov r1, r7 + 8032854: 9a0f ldr r2, [sp, #60] ; 0x3c + 8032856: 9819 ldr r0, [sp, #100] ; 0x64 + 8032858: f7ff fc88 bl 803216c <_ZNK8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKmssiihh> + 803285c: e732 b.n 80326c4 <_ZN8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x2f4> + 803285e: 9b2c ldr r3, [sp, #176] ; 0xb0 + 8032860: 1421 asrs r1, r4, #16 + 8032862: 9d0f ldr r5, [sp, #60] ; 0x3c + 8032864: f3c4 3203 ubfx r2, r4, #12, #4 + 8032868: f9b3 7008 ldrsh.w r7, [r3, #8] + 803286c: 1433 asrs r3, r6, #16 + 803286e: f3c6 3003 ubfx r0, r6, #12, #4 + 8032872: fb07 1303 mla r3, r7, r3, r1 + 8032876: 990f ldr r1, [sp, #60] ; 0x3c + 8032878: eb01 0183 add.w r1, r1, r3, lsl #2 + 803287c: f855 3023 ldr.w r3, [r5, r3, lsl #2] + 8032880: ea4f 6c13 mov.w ip, r3, lsr #24 + 8032884: 2a00 cmp r2, #0 + 8032886: f000 8108 beq.w 8032a9a <_ZN8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x6ca> + 803288a: 684d ldr r5, [r1, #4] + 803288c: 950d str r5, [sp, #52] ; 0x34 + 803288e: 0e2d lsrs r5, r5, #24 + 8032890: 9514 str r5, [sp, #80] ; 0x50 + 8032892: b178 cbz r0, 80328b4 <_ZN8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x4e4> + 8032894: f107 4780 add.w r7, r7, #1073741824 ; 0x40000000 + 8032898: 3f01 subs r7, #1 + 803289a: 00bf lsls r7, r7, #2 + 803289c: 3704 adds r7, #4 + 803289e: eb01 0e07 add.w lr, r1, r7 + 80328a2: 59c9 ldr r1, [r1, r7] + 80328a4: 9109 str r1, [sp, #36] ; 0x24 + 80328a6: 0e09 lsrs r1, r1, #24 + 80328a8: 9111 str r1, [sp, #68] ; 0x44 + 80328aa: f8de 1004 ldr.w r1, [lr, #4] + 80328ae: 910e str r1, [sp, #56] ; 0x38 + 80328b0: 0e09 lsrs r1, r1, #24 + 80328b2: 9115 str r1, [sp, #84] ; 0x54 + 80328b4: b292 uxth r2, r2 + 80328b6: 9d11 ldr r5, [sp, #68] ; 0x44 + 80328b8: b280 uxth r0, r0 + 80328ba: fb02 f900 mul.w r9, r2, r0 + 80328be: 0112 lsls r2, r2, #4 + 80328c0: ebc9 1000 rsb r0, r9, r0, lsl #4 + 80328c4: eba2 0e09 sub.w lr, r2, r9 + 80328c8: f5c2 7180 rsb r1, r2, #256 ; 0x100 + 80328cc: 9a14 ldr r2, [sp, #80] ; 0x50 + 80328ce: b280 uxth r0, r0 + 80328d0: fa1f fe8e uxth.w lr, lr + 80328d4: 1a09 subs r1, r1, r0 + 80328d6: fb0e f202 mul.w r2, lr, r2 + 80328da: b289 uxth r1, r1 + 80328dc: fb01 220c mla r2, r1, ip, r2 + 80328e0: fb00 2205 mla r2, r0, r5, r2 + 80328e4: 9d15 ldr r5, [sp, #84] ; 0x54 + 80328e6: fb09 2205 mla r2, r9, r5, r2 + 80328ea: f3c2 2207 ubfx r2, r2, #8, #8 + 80328ee: 2a00 cmp r2, #0 + 80328f0: f000 80ca beq.w 8032a88 <_ZN8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x6b8> + 80328f4: f1bc 0fff cmp.w ip, #255 ; 0xff + 80328f8: d019 beq.n 803292e <_ZN8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x55e> + 80328fa: f003 1aff and.w sl, r3, #16711935 ; 0xff00ff + 80328fe: f403 437f and.w r3, r3, #65280 ; 0xff00 + 8032902: fb0c fa0a mul.w sl, ip, sl + 8032906: fb0c fc03 mul.w ip, ip, r3 + 803290a: ea4f 231a mov.w r3, sl, lsr #8 + 803290e: f10a 1a01 add.w sl, sl, #65537 ; 0x10001 + 8032912: f50c 7780 add.w r7, ip, #256 ; 0x100 + 8032916: f003 13ff and.w r3, r3, #16711935 ; 0xff00ff + 803291a: eb07 271c add.w r7, r7, ip, lsr #8 + 803291e: 4453 add r3, sl + 8032920: 0a3f lsrs r7, r7, #8 + 8032922: 0a1b lsrs r3, r3, #8 + 8032924: f407 477f and.w r7, r7, #65280 ; 0xff00 + 8032928: f003 13ff and.w r3, r3, #16711935 ; 0xff00ff + 803292c: 433b orrs r3, r7 + 803292e: 9d14 ldr r5, [sp, #80] ; 0x50 + 8032930: 2dff cmp r5, #255 ; 0xff + 8032932: d020 beq.n 8032976 <_ZN8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x5a6> + 8032934: 9d0d ldr r5, [sp, #52] ; 0x34 + 8032936: f005 17ff and.w r7, r5, #16711935 ; 0xff00ff + 803293a: 9d14 ldr r5, [sp, #80] ; 0x50 + 803293c: 436f muls r7, r5 + 803293e: 9d0d ldr r5, [sp, #52] ; 0x34 + 8032940: ea4f 2c17 mov.w ip, r7, lsr #8 + 8032944: f405 4a7f and.w sl, r5, #65280 ; 0xff00 + 8032948: 9d14 ldr r5, [sp, #80] ; 0x50 + 803294a: f107 1701 add.w r7, r7, #65537 ; 0x10001 + 803294e: f00c 1cff and.w ip, ip, #16711935 ; 0xff00ff + 8032952: fb05 fa0a mul.w sl, r5, sl + 8032956: 44bc add ip, r7 + 8032958: f50a 7780 add.w r7, sl, #256 ; 0x100 + 803295c: ea4f 2c1c mov.w ip, ip, lsr #8 + 8032960: eb07 2a1a add.w sl, r7, sl, lsr #8 + 8032964: f00c 1cff and.w ip, ip, #16711935 ; 0xff00ff + 8032968: ea4f 2a1a mov.w sl, sl, lsr #8 + 803296c: f40a 4a7f and.w sl, sl, #65280 ; 0xff00 + 8032970: ea4c 050a orr.w r5, ip, sl + 8032974: 950d str r5, [sp, #52] ; 0x34 + 8032976: 9d11 ldr r5, [sp, #68] ; 0x44 + 8032978: 2dff cmp r5, #255 ; 0xff + 803297a: d020 beq.n 80329be <_ZN8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x5ee> + 803297c: 9d09 ldr r5, [sp, #36] ; 0x24 + 803297e: f005 17ff and.w r7, r5, #16711935 ; 0xff00ff + 8032982: 9d11 ldr r5, [sp, #68] ; 0x44 + 8032984: 436f muls r7, r5 + 8032986: 9d09 ldr r5, [sp, #36] ; 0x24 + 8032988: f405 4c7f and.w ip, r5, #65280 ; 0xff00 + 803298c: 9d11 ldr r5, [sp, #68] ; 0x44 + 803298e: fb05 fa0c mul.w sl, r5, ip + 8032992: ea4f 2c17 mov.w ip, r7, lsr #8 + 8032996: f107 1701 add.w r7, r7, #65537 ; 0x10001 + 803299a: f00c 1cff and.w ip, ip, #16711935 ; 0xff00ff + 803299e: 44bc add ip, r7 + 80329a0: f50a 7780 add.w r7, sl, #256 ; 0x100 + 80329a4: eb07 2a1a add.w sl, r7, sl, lsr #8 + 80329a8: ea4f 2c1c mov.w ip, ip, lsr #8 + 80329ac: ea4f 2a1a mov.w sl, sl, lsr #8 + 80329b0: f00c 1cff and.w ip, ip, #16711935 ; 0xff00ff + 80329b4: f40a 4a7f and.w sl, sl, #65280 ; 0xff00 + 80329b8: ea4c 050a orr.w r5, ip, sl + 80329bc: 9509 str r5, [sp, #36] ; 0x24 + 80329be: 9d15 ldr r5, [sp, #84] ; 0x54 + 80329c0: 2dff cmp r5, #255 ; 0xff + 80329c2: d020 beq.n 8032a06 <_ZN8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x636> + 80329c4: 9d0e ldr r5, [sp, #56] ; 0x38 + 80329c6: f005 17ff and.w r7, r5, #16711935 ; 0xff00ff + 80329ca: 9d15 ldr r5, [sp, #84] ; 0x54 + 80329cc: 436f muls r7, r5 + 80329ce: 9d0e ldr r5, [sp, #56] ; 0x38 + 80329d0: ea4f 2c17 mov.w ip, r7, lsr #8 + 80329d4: f405 4a7f and.w sl, r5, #65280 ; 0xff00 + 80329d8: 9d15 ldr r5, [sp, #84] ; 0x54 + 80329da: f107 1701 add.w r7, r7, #65537 ; 0x10001 + 80329de: f00c 1cff and.w ip, ip, #16711935 ; 0xff00ff + 80329e2: fb05 fa0a mul.w sl, r5, sl + 80329e6: 44bc add ip, r7 + 80329e8: f50a 7780 add.w r7, sl, #256 ; 0x100 + 80329ec: ea4f 2c1c mov.w ip, ip, lsr #8 + 80329f0: eb07 2a1a add.w sl, r7, sl, lsr #8 + 80329f4: f00c 1cff and.w ip, ip, #16711935 ; 0xff00ff + 80329f8: ea4f 2a1a mov.w sl, sl, lsr #8 + 80329fc: f40a 4a7f and.w sl, sl, #65280 ; 0xff00 + 8032a00: ea4c 050a orr.w r5, ip, sl + 8032a04: 950e str r5, [sp, #56] ; 0x38 + 8032a06: 9d0d ldr r5, [sp, #52] ; 0x34 + 8032a08: f003 1cff and.w ip, r3, #16711935 ; 0xff00ff + 8032a0c: f403 437f and.w r3, r3, #65280 ; 0xff00 + 8032a10: 2aff cmp r2, #255 ; 0xff + 8032a12: f005 17ff and.w r7, r5, #16711935 ; 0xff00ff + 8032a16: 9d09 ldr r5, [sp, #36] ; 0x24 + 8032a18: fb0e f707 mul.w r7, lr, r7 + 8032a1c: fb01 770c mla r7, r1, ip, r7 + 8032a20: f005 1cff and.w ip, r5, #16711935 ; 0xff00ff + 8032a24: 9d0e ldr r5, [sp, #56] ; 0x38 + 8032a26: fb00 770c mla r7, r0, ip, r7 + 8032a2a: f005 1cff and.w ip, r5, #16711935 ; 0xff00ff + 8032a2e: 9d0d ldr r5, [sp, #52] ; 0x34 + 8032a30: fb09 770c mla r7, r9, ip, r7 + 8032a34: f405 4c7f and.w ip, r5, #65280 ; 0xff00 + 8032a38: fb0e fe0c mul.w lr, lr, ip + 8032a3c: ea4f 2717 mov.w r7, r7, lsr #8 + 8032a40: fb01 e303 mla r3, r1, r3, lr + 8032a44: 9909 ldr r1, [sp, #36] ; 0x24 + 8032a46: f007 17ff and.w r7, r7, #16711935 ; 0xff00ff + 8032a4a: f401 4a7f and.w sl, r1, #65280 ; 0xff00 + 8032a4e: 990e ldr r1, [sp, #56] ; 0x38 + 8032a50: fb00 330a mla r3, r0, sl, r3 + 8032a54: f401 4c7f and.w ip, r1, #65280 ; 0xff00 + 8032a58: fb09 3c0c mla ip, r9, ip, r3 + 8032a5c: ea4f 2c1c mov.w ip, ip, lsr #8 + 8032a60: f40c 4c7f and.w ip, ip, #65280 ; 0xff00 + 8032a64: ea47 070c orr.w r7, r7, ip + 8032a68: ea4f 2317 mov.w r3, r7, lsr #8 + 8032a6c: d11e bne.n 8032aac <_ZN8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x6dc> + 8032a6e: 097a lsrs r2, r7, #5 + 8032a70: f423 63ff bic.w r3, r3, #2040 ; 0x7f8 + 8032a74: f3c7 07c4 ubfx r7, r7, #3, #5 + 8032a78: f402 62fc and.w r2, r2, #2016 ; 0x7e0 + 8032a7c: f023 0307 bic.w r3, r3, #7 + 8032a80: 4313 orrs r3, r2 + 8032a82: 431f orrs r7, r3 + 8032a84: f8a8 7000 strh.w r7, [r8] + 8032a88: 9b27 ldr r3, [sp, #156] ; 0x9c + 8032a8a: f108 0802 add.w r8, r8, #2 + 8032a8e: f10b 3bff add.w fp, fp, #4294967295 + 8032a92: 441c add r4, r3 + 8032a94: 9b28 ldr r3, [sp, #160] ; 0xa0 + 8032a96: 441e add r6, r3 + 8032a98: e643 b.n 8032722 <_ZN8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x352> + 8032a9a: 2800 cmp r0, #0 + 8032a9c: f43f af0a beq.w 80328b4 <_ZN8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x4e4> + 8032aa0: f851 1027 ldr.w r1, [r1, r7, lsl #2] + 8032aa4: 9109 str r1, [sp, #36] ; 0x24 + 8032aa6: 0e09 lsrs r1, r1, #24 + 8032aa8: 9111 str r1, [sp, #68] ; 0x44 + 8032aaa: e703 b.n 80328b4 <_ZN8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x4e4> + 8032aac: f8b8 1000 ldrh.w r1, [r8] + 8032ab0: 43d2 mvns r2, r2 + 8032ab2: ea4f 2c21 mov.w ip, r1, asr #8 + 8032ab6: fa5f fe82 uxtb.w lr, r2 + 8032aba: f00c 0cf8 and.w ip, ip, #248 ; 0xf8 + 8032abe: 10c8 asrs r0, r1, #3 + 8032ac0: 00ca lsls r2, r1, #3 + 8032ac2: fb0c fc0e mul.w ip, ip, lr + 8032ac6: f000 00fc and.w r0, r0, #252 ; 0xfc + 8032aca: b2d2 uxtb r2, r2 + 8032acc: f10c 0101 add.w r1, ip, #1 + 8032ad0: fb00 f00e mul.w r0, r0, lr + 8032ad4: fb02 f20e mul.w r2, r2, lr + 8032ad8: eb01 2c1c add.w ip, r1, ip, lsr #8 + 8032adc: 0c39 lsrs r1, r7, #16 + 8032ade: eb01 2c1c add.w ip, r1, ip, lsr #8 + 8032ae2: 490f ldr r1, [pc, #60] ; (8032b20 <_ZN8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x750>) + 8032ae4: fa5f fc8c uxtb.w ip, ip + 8032ae8: ea01 2c0c and.w ip, r1, ip, lsl #8 + 8032aec: 1c41 adds r1, r0, #1 + 8032aee: eb01 2010 add.w r0, r1, r0, lsr #8 + 8032af2: 1c51 adds r1, r2, #1 + 8032af4: eb03 2010 add.w r0, r3, r0, lsr #8 + 8032af8: eb01 2212 add.w r2, r1, r2, lsr #8 + 8032afc: 00c0 lsls r0, r0, #3 + 8032afe: eb07 2712 add.w r7, r7, r2, lsr #8 + 8032b02: f400 60fc and.w r0, r0, #2016 ; 0x7e0 + 8032b06: f3c7 07c4 ubfx r7, r7, #3, #5 + 8032b0a: ea4c 0c00 orr.w ip, ip, r0 + 8032b0e: ea47 0c0c orr.w ip, r7, ip + 8032b12: f8a8 c000 strh.w ip, [r8] + 8032b16: e7b7 b.n 8032a88 <_ZN8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x6b8> + 8032b18: b01b add sp, #108 ; 0x6c + 8032b1a: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 8032b1e: bf00 nop + 8032b20: fffff800 .word 0xfffff800 + +08032b24 <_ZNK8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtsssiihhh>: + 8032b24: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} + 8032b28: e9dd 050a ldrd r0, r5, [sp, #40] ; 0x28 + 8032b2c: f9bd 8020 ldrsh.w r8, [sp, #32] + 8032b30: 2d00 cmp r5, #0 + 8032b32: f9bd 9024 ldrsh.w r9, [sp, #36] ; 0x24 + 8032b36: f89d 7030 ldrb.w r7, [sp, #48] ; 0x30 + 8032b3a: fb05 0e03 mla lr, r5, r3, r0 + 8032b3e: f89d c034 ldrb.w ip, [sp, #52] ; 0x34 + 8032b42: f2c0 808c blt.w 8032c5e <_ZNK8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtsssiihhh+0x13a> + 8032b46: 45a9 cmp r9, r5 + 8032b48: f340 8089 ble.w 8032c5e <_ZNK8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtsssiihhh+0x13a> + 8032b4c: 2800 cmp r0, #0 + 8032b4e: f2c0 8084 blt.w 8032c5a <_ZNK8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtsssiihhh+0x136> + 8032b52: 4580 cmp r8, r0 + 8032b54: f340 8081 ble.w 8032c5a <_ZNK8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtsssiihhh+0x136> + 8032b58: ea4f 045e mov.w r4, lr, lsr #1 + 8032b5c: f01e 0f01 tst.w lr, #1 + 8032b60: 5d16 ldrb r6, [r2, r4] + 8032b62: bf0c ite eq + 8032b64: f006 060f andeq.w r6, r6, #15 + 8032b68: 1136 asrne r6, r6, #4 + 8032b6a: eb06 1606 add.w r6, r6, r6, lsl #4 + 8032b6e: b2f6 uxtb r6, r6 + 8032b70: 1c44 adds r4, r0, #1 + 8032b72: d477 bmi.n 8032c64 <_ZNK8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtsssiihhh+0x140> + 8032b74: 45a0 cmp r8, r4 + 8032b76: dd75 ble.n 8032c64 <_ZNK8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtsssiihhh+0x140> + 8032b78: 2f00 cmp r7, #0 + 8032b7a: d075 beq.n 8032c68 <_ZNK8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtsssiihhh+0x144> + 8032b7c: f10e 0a01 add.w sl, lr, #1 + 8032b80: ea4f 045a mov.w r4, sl, lsr #1 + 8032b84: f01a 0f01 tst.w sl, #1 + 8032b88: 5d14 ldrb r4, [r2, r4] + 8032b8a: bf0c ite eq + 8032b8c: f004 040f andeq.w r4, r4, #15 + 8032b90: 1124 asrne r4, r4, #4 + 8032b92: eb04 1404 add.w r4, r4, r4, lsl #4 + 8032b96: b2e4 uxtb r4, r4 + 8032b98: 3501 adds r5, #1 + 8032b9a: d469 bmi.n 8032c70 <_ZNK8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtsssiihhh+0x14c> + 8032b9c: 45a9 cmp r9, r5 + 8032b9e: dd67 ble.n 8032c70 <_ZNK8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtsssiihhh+0x14c> + 8032ba0: f1bc 0f00 cmp.w ip, #0 + 8032ba4: d067 beq.n 8032c76 <_ZNK8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtsssiihhh+0x152> + 8032ba6: 2800 cmp r0, #0 + 8032ba8: db60 blt.n 8032c6c <_ZNK8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtsssiihhh+0x148> + 8032baa: 4580 cmp r8, r0 + 8032bac: dd5e ble.n 8032c6c <_ZNK8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtsssiihhh+0x148> + 8032bae: eb03 090e add.w r9, r3, lr + 8032bb2: ea4f 0559 mov.w r5, r9, lsr #1 + 8032bb6: f019 0f01 tst.w r9, #1 + 8032bba: 5d55 ldrb r5, [r2, r5] + 8032bbc: bf0c ite eq + 8032bbe: f005 050f andeq.w r5, r5, #15 + 8032bc2: 112d asrne r5, r5, #4 + 8032bc4: eb05 1505 add.w r5, r5, r5, lsl #4 + 8032bc8: b2ed uxtb r5, r5 + 8032bca: 3001 adds r0, #1 + 8032bcc: d456 bmi.n 8032c7c <_ZNK8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtsssiihhh+0x158> + 8032bce: 4580 cmp r8, r0 + 8032bd0: dd54 ble.n 8032c7c <_ZNK8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtsssiihhh+0x158> + 8032bd2: 2f00 cmp r7, #0 + 8032bd4: d054 beq.n 8032c80 <_ZNK8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtsssiihhh+0x15c> + 8032bd6: 3301 adds r3, #1 + 8032bd8: 449e add lr, r3 + 8032bda: ea4f 035e mov.w r3, lr, lsr #1 + 8032bde: f01e 0f01 tst.w lr, #1 + 8032be2: 5cd0 ldrb r0, [r2, r3] + 8032be4: bf0c ite eq + 8032be6: f000 000f andeq.w r0, r0, #15 + 8032bea: 1100 asrne r0, r0, #4 + 8032bec: eb00 1000 add.w r0, r0, r0, lsl #4 + 8032bf0: b2c3 uxtb r3, r0 + 8032bf2: b2ba uxth r2, r7 + 8032bf4: fa1f fc8c uxth.w ip, ip + 8032bf8: fb02 f00c mul.w r0, r2, ip + 8032bfc: 0112 lsls r2, r2, #4 + 8032bfe: ebc0 1c0c rsb ip, r0, ip, lsl #4 + 8032c02: f5c2 7780 rsb r7, r2, #256 ; 0x100 + 8032c06: 1a12 subs r2, r2, r0 + 8032c08: fa1f fc8c uxth.w ip, ip + 8032c0c: b292 uxth r2, r2 + 8032c0e: eba7 070c sub.w r7, r7, ip + 8032c12: 4362 muls r2, r4 + 8032c14: b2bf uxth r7, r7 + 8032c16: fb06 2207 mla r2, r6, r7, r2 + 8032c1a: fb0c 2505 mla r5, ip, r5, r2 + 8032c1e: fb00 5303 mla r3, r0, r3, r5 + 8032c22: f3c3 2307 ubfx r3, r3, #8, #8 + 8032c26: b1b3 cbz r3, 8032c56 <_ZNK8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtsssiihhh+0x132> + 8032c28: f89d 2038 ldrb.w r2, [sp, #56] ; 0x38 + 8032c2c: 435a muls r2, r3 + 8032c2e: 1c53 adds r3, r2, #1 + 8032c30: eb03 2312 add.w r3, r3, r2, lsr #8 + 8032c34: 4a2d ldr r2, [pc, #180] ; (8032cec <_ZNK8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtsssiihhh+0x1c8>) + 8032c36: 121b asrs r3, r3, #8 + 8032c38: 6812 ldr r2, [r2, #0] + 8032c3a: 2bff cmp r3, #255 ; 0xff + 8032c3c: ea4f 2612 mov.w r6, r2, lsr #8 + 8032c40: d120 bne.n 8032c84 <_ZNK8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtsssiihhh+0x160> + 8032c42: 0950 lsrs r0, r2, #5 + 8032c44: 4b2a ldr r3, [pc, #168] ; (8032cf0 <_ZNK8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtsssiihhh+0x1cc>) + 8032c46: f3c2 02c4 ubfx r2, r2, #3, #5 + 8032c4a: f400 60fc and.w r0, r0, #2016 ; 0x7e0 + 8032c4e: 4033 ands r3, r6 + 8032c50: 4318 orrs r0, r3 + 8032c52: 4302 orrs r2, r0 + 8032c54: 800a strh r2, [r1, #0] + 8032c56: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + 8032c5a: 2600 movs r6, #0 + 8032c5c: e788 b.n 8032b70 <_ZNK8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtsssiihhh+0x4c> + 8032c5e: 2400 movs r4, #0 + 8032c60: 4626 mov r6, r4 + 8032c62: e799 b.n 8032b98 <_ZNK8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtsssiihhh+0x74> + 8032c64: 2400 movs r4, #0 + 8032c66: e797 b.n 8032b98 <_ZNK8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtsssiihhh+0x74> + 8032c68: 463c mov r4, r7 + 8032c6a: e795 b.n 8032b98 <_ZNK8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtsssiihhh+0x74> + 8032c6c: 2500 movs r5, #0 + 8032c6e: e7ac b.n 8032bca <_ZNK8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtsssiihhh+0xa6> + 8032c70: 2300 movs r3, #0 + 8032c72: 461d mov r5, r3 + 8032c74: e7bd b.n 8032bf2 <_ZNK8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtsssiihhh+0xce> + 8032c76: 4663 mov r3, ip + 8032c78: 4665 mov r5, ip + 8032c7a: e7ba b.n 8032bf2 <_ZNK8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtsssiihhh+0xce> + 8032c7c: 2300 movs r3, #0 + 8032c7e: e7b8 b.n 8032bf2 <_ZNK8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtsssiihhh+0xce> + 8032c80: 463b mov r3, r7 + 8032c82: e7b6 b.n 8032bf2 <_ZNK8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtsssiihhh+0xce> + 8032c84: 880d ldrh r5, [r1, #0] + 8032c86: b29f uxth r7, r3 + 8032c88: f3c2 4007 ubfx r0, r2, #16, #8 + 8032c8c: 43db mvns r3, r3 + 8032c8e: 122c asrs r4, r5, #8 + 8032c90: fb10 f007 smulbb r0, r0, r7 + 8032c94: b2db uxtb r3, r3 + 8032c96: f004 04f8 and.w r4, r4, #248 ; 0xf8 + 8032c9a: b2f6 uxtb r6, r6 + 8032c9c: b2d2 uxtb r2, r2 + 8032c9e: fb04 0403 mla r4, r4, r3, r0 + 8032ca2: 10e8 asrs r0, r5, #3 + 8032ca4: fb12 f207 smulbb r2, r2, r7 + 8032ca8: 00ed lsls r5, r5, #3 + 8032caa: f000 00fc and.w r0, r0, #252 ; 0xfc + 8032cae: b2a4 uxth r4, r4 + 8032cb0: fb16 f607 smulbb r6, r6, r7 + 8032cb4: b2ed uxtb r5, r5 + 8032cb6: fb00 6603 mla r6, r0, r3, r6 + 8032cba: fb05 2303 mla r3, r5, r3, r2 + 8032cbe: b2b0 uxth r0, r6 + 8032cc0: b29a uxth r2, r3 + 8032cc2: 1c63 adds r3, r4, #1 + 8032cc4: eb03 2414 add.w r4, r3, r4, lsr #8 + 8032cc8: 1c53 adds r3, r2, #1 + 8032cca: eb03 2312 add.w r3, r3, r2, lsr #8 + 8032cce: 1c42 adds r2, r0, #1 + 8032cd0: f404 4478 and.w r4, r4, #63488 ; 0xf800 + 8032cd4: eb02 2010 add.w r0, r2, r0, lsr #8 + 8032cd8: f3c3 23c4 ubfx r3, r3, #11, #5 + 8032cdc: 0940 lsrs r0, r0, #5 + 8032cde: 4323 orrs r3, r4 + 8032ce0: f400 60fc and.w r0, r0, #2016 ; 0x7e0 + 8032ce4: 4303 orrs r3, r0 + 8032ce6: 800b strh r3, [r1, #0] + 8032ce8: e7b5 b.n 8032c56 <_ZNK8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtsssiihhh+0x132> + 8032cea: bf00 nop + 8032cec: 2001e73c .word 0x2001e73c + 8032cf0: 00fff800 .word 0x00fff800 + +08032cf4 <_ZN8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff>: + 8032cf4: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8032cf8: b097 sub sp, #92 ; 0x5c + 8032cfa: 9214 str r2, [sp, #80] ; 0x50 + 8032cfc: 9309 str r3, [sp, #36] ; 0x24 + 8032cfe: 9a25 ldr r2, [sp, #148] ; 0x94 + 8032d00: f89d 30a4 ldrb.w r3, [sp, #164] ; 0xa4 + 8032d04: 9015 str r0, [sp, #84] ; 0x54 + 8032d06: 910d str r1, [sp, #52] ; 0x34 + 8032d08: 6850 ldr r0, [r2, #4] + 8032d0a: 930f str r3, [sp, #60] ; 0x3c + 8032d0c: 6812 ldr r2, [r2, #0] + 8032d0e: e9dd 1326 ldrd r1, r3, [sp, #152] ; 0x98 + 8032d12: e9dd 4621 ldrd r4, r6, [sp, #132] ; 0x84 + 8032d16: fb00 1303 mla r3, r0, r3, r1 + 8032d1a: eb02 0943 add.w r9, r2, r3, lsl #1 + 8032d1e: 9b28 ldr r3, [sp, #160] ; 0xa0 + 8032d20: 689b ldr r3, [r3, #8] + 8032d22: 3301 adds r3, #1 + 8032d24: f023 0301 bic.w r3, r3, #1 + 8032d28: 930a str r3, [sp, #40] ; 0x28 + 8032d2a: 9b28 ldr r3, [sp, #160] ; 0xa0 + 8032d2c: 681f ldr r7, [r3, #0] + 8032d2e: 9b0d ldr r3, [sp, #52] ; 0x34 + 8032d30: 2b00 cmp r3, #0 + 8032d32: dc03 bgt.n 8032d3c <_ZN8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x48> + 8032d34: 9b14 ldr r3, [sp, #80] ; 0x50 + 8032d36: 2b00 cmp r3, #0 + 8032d38: f340 8289 ble.w 803324e <_ZN8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x55a> + 8032d3c: 9b28 ldr r3, [sp, #160] ; 0xa0 + 8032d3e: f9b3 1008 ldrsh.w r1, [r3, #8] + 8032d42: f9b3 200c ldrsh.w r2, [r3, #12] + 8032d46: 1e48 subs r0, r1, #1 + 8032d48: f102 3cff add.w ip, r2, #4294967295 + 8032d4c: 9b09 ldr r3, [sp, #36] ; 0x24 + 8032d4e: 2b00 cmp r3, #0 + 8032d50: f340 80c5 ble.w 8032ede <_ZN8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1ea> + 8032d54: ea5f 4e24 movs.w lr, r4, asr #16 + 8032d58: ea4f 4326 mov.w r3, r6, asr #16 + 8032d5c: d406 bmi.n 8032d6c <_ZN8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x78> + 8032d5e: 4586 cmp lr, r0 + 8032d60: da04 bge.n 8032d6c <_ZN8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x78> + 8032d62: 2b00 cmp r3, #0 + 8032d64: db02 blt.n 8032d6c <_ZN8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x78> + 8032d66: 4563 cmp r3, ip + 8032d68: f2c0 80ba blt.w 8032ee0 <_ZN8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1ec> + 8032d6c: f11e 0e01 adds.w lr, lr, #1 + 8032d70: f100 80ab bmi.w 8032eca <_ZN8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1d6> + 8032d74: 4571 cmp r1, lr + 8032d76: f2c0 80a8 blt.w 8032eca <_ZN8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1d6> + 8032d7a: 3301 adds r3, #1 + 8032d7c: f100 80a5 bmi.w 8032eca <_ZN8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1d6> + 8032d80: 429a cmp r2, r3 + 8032d82: f2c0 80a2 blt.w 8032eca <_ZN8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1d6> + 8032d86: 9b09 ldr r3, [sp, #36] ; 0x24 + 8032d88: 46c8 mov r8, r9 + 8032d8a: f9bd a028 ldrsh.w sl, [sp, #40] ; 0x28 + 8032d8e: 930e str r3, [sp, #56] ; 0x38 + 8032d90: 9b0e ldr r3, [sp, #56] ; 0x38 + 8032d92: 2b00 cmp r3, #0 + 8032d94: f340 80c4 ble.w 8032f20 <_ZN8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x22c> + 8032d98: 9b28 ldr r3, [sp, #160] ; 0xa0 + 8032d9a: 1430 asrs r0, r6, #16 + 8032d9c: f3c4 3203 ubfx r2, r4, #12, #4 + 8032da0: f3c6 3103 ubfx r1, r6, #12, #4 + 8032da4: e9d3 ce02 ldrd ip, lr, [r3, #8] + 8032da8: 1423 asrs r3, r4, #16 + 8032daa: f100 814f bmi.w 803304c <_ZN8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x358> + 8032dae: f10c 3bff add.w fp, ip, #4294967295 + 8032db2: 455b cmp r3, fp + 8032db4: f280 814a bge.w 803304c <_ZN8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x358> + 8032db8: 2800 cmp r0, #0 + 8032dba: f2c0 8147 blt.w 803304c <_ZN8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x358> + 8032dbe: f10e 3bff add.w fp, lr, #4294967295 + 8032dc2: 4558 cmp r0, fp + 8032dc4: f280 8142 bge.w 803304c <_ZN8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x358> + 8032dc8: 9d0a ldr r5, [sp, #40] ; 0x28 + 8032dca: fb00 3305 mla r3, r0, r5, r3 + 8032dce: 0858 lsrs r0, r3, #1 + 8032dd0: 07dd lsls r5, r3, #31 + 8032dd2: f817 c000 ldrb.w ip, [r7, r0] + 8032dd6: bf54 ite pl + 8032dd8: f00c 0c0f andpl.w ip, ip, #15 + 8032ddc: ea4f 1c2c movmi.w ip, ip, asr #4 + 8032de0: eb0c 1c0c add.w ip, ip, ip, lsl #4 + 8032de4: fa5f fc8c uxtb.w ip, ip + 8032de8: 2a00 cmp r2, #0 + 8032dea: f000 80dd beq.w 8032fa8 <_ZN8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x2b4> + 8032dee: 1c58 adds r0, r3, #1 + 8032df0: ea4f 0e50 mov.w lr, r0, lsr #1 + 8032df4: 07c0 lsls r0, r0, #31 + 8032df6: f817 e00e ldrb.w lr, [r7, lr] + 8032dfa: bf54 ite pl + 8032dfc: f00e 0e0f andpl.w lr, lr, #15 + 8032e00: ea4f 1e2e movmi.w lr, lr, asr #4 + 8032e04: eb0e 1e0e add.w lr, lr, lr, lsl #4 + 8032e08: fa5f f08e uxtb.w r0, lr + 8032e0c: 9010 str r0, [sp, #64] ; 0x40 + 8032e0e: b1d9 cbz r1, 8032e48 <_ZN8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x154> + 8032e10: 4453 add r3, sl + 8032e12: 0858 lsrs r0, r3, #1 + 8032e14: 07dd lsls r5, r3, #31 + 8032e16: f103 0301 add.w r3, r3, #1 + 8032e1a: 5c38 ldrb r0, [r7, r0] + 8032e1c: bf54 ite pl + 8032e1e: f000 000f andpl.w r0, r0, #15 + 8032e22: 1100 asrmi r0, r0, #4 + 8032e24: 07dd lsls r5, r3, #31 + 8032e26: eb00 1000 add.w r0, r0, r0, lsl #4 + 8032e2a: b2c0 uxtb r0, r0 + 8032e2c: 900b str r0, [sp, #44] ; 0x2c + 8032e2e: ea4f 0053 mov.w r0, r3, lsr #1 + 8032e32: f817 e000 ldrb.w lr, [r7, r0] + 8032e36: bf54 ite pl + 8032e38: f00e 030f andpl.w r3, lr, #15 + 8032e3c: ea4f 132e movmi.w r3, lr, asr #4 + 8032e40: eb03 1303 add.w r3, r3, r3, lsl #4 + 8032e44: b2db uxtb r3, r3 + 8032e46: 9311 str r3, [sp, #68] ; 0x44 + 8032e48: b292 uxth r2, r2 + 8032e4a: 9d10 ldr r5, [sp, #64] ; 0x40 + 8032e4c: b289 uxth r1, r1 + 8032e4e: fb02 f301 mul.w r3, r2, r1 + 8032e52: 0112 lsls r2, r2, #4 + 8032e54: ebc3 1101 rsb r1, r3, r1, lsl #4 + 8032e58: f5c2 7080 rsb r0, r2, #256 ; 0x100 + 8032e5c: 1ad2 subs r2, r2, r3 + 8032e5e: b289 uxth r1, r1 + 8032e60: b292 uxth r2, r2 + 8032e62: 1a40 subs r0, r0, r1 + 8032e64: 436a muls r2, r5 + 8032e66: b280 uxth r0, r0 + 8032e68: fb0c 2c00 mla ip, ip, r0, r2 + 8032e6c: 9a0b ldr r2, [sp, #44] ; 0x2c + 8032e6e: fb01 c102 mla r1, r1, r2, ip + 8032e72: 9a11 ldr r2, [sp, #68] ; 0x44 + 8032e74: fb03 1302 mla r3, r3, r2, r1 + 8032e78: f3c3 2307 ubfx r3, r3, #8, #8 + 8032e7c: b1db cbz r3, 8032eb6 <_ZN8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1c2> + 8032e7e: 9a0f ldr r2, [sp, #60] ; 0x3c + 8032e80: 4353 muls r3, r2 + 8032e82: 1c5a adds r2, r3, #1 + 8032e84: eb02 2313 add.w r3, r2, r3, lsr #8 + 8032e88: 4ac6 ldr r2, [pc, #792] ; (80331a4 <_ZN8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x4b0>) + 8032e8a: 121b asrs r3, r3, #8 + 8032e8c: 6812 ldr r2, [r2, #0] + 8032e8e: 2bff cmp r3, #255 ; 0xff + 8032e90: ea4f 2c12 mov.w ip, r2, lsr #8 + 8032e94: f040 8099 bne.w 8032fca <_ZN8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x2d6> + 8032e98: 0953 lsrs r3, r2, #5 + 8032e9a: f42c 6cff bic.w ip, ip, #2040 ; 0x7f8 + 8032e9e: f3c2 02c4 ubfx r2, r2, #3, #5 + 8032ea2: f403 63fc and.w r3, r3, #2016 ; 0x7e0 + 8032ea6: f02c 0c07 bic.w ip, ip, #7 + 8032eaa: ea43 0c0c orr.w ip, r3, ip + 8032eae: ea4c 0202 orr.w r2, ip, r2 + 8032eb2: f8a8 2000 strh.w r2, [r8] + 8032eb6: 9b23 ldr r3, [sp, #140] ; 0x8c + 8032eb8: f108 0802 add.w r8, r8, #2 + 8032ebc: 441c add r4, r3 + 8032ebe: 9b24 ldr r3, [sp, #144] ; 0x90 + 8032ec0: 441e add r6, r3 + 8032ec2: 9b0e ldr r3, [sp, #56] ; 0x38 + 8032ec4: 3b01 subs r3, #1 + 8032ec6: 930e str r3, [sp, #56] ; 0x38 + 8032ec8: e762 b.n 8032d90 <_ZN8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x9c> + 8032eca: 9b23 ldr r3, [sp, #140] ; 0x8c + 8032ecc: f109 0902 add.w r9, r9, #2 + 8032ed0: 441c add r4, r3 + 8032ed2: 9b24 ldr r3, [sp, #144] ; 0x90 + 8032ed4: 441e add r6, r3 + 8032ed6: 9b09 ldr r3, [sp, #36] ; 0x24 + 8032ed8: 3b01 subs r3, #1 + 8032eda: 9309 str r3, [sp, #36] ; 0x24 + 8032edc: e736 b.n 8032d4c <_ZN8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x58> + 8032ede: d024 beq.n 8032f2a <_ZN8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x236> + 8032ee0: 9b09 ldr r3, [sp, #36] ; 0x24 + 8032ee2: 9823 ldr r0, [sp, #140] ; 0x8c + 8032ee4: 3b01 subs r3, #1 + 8032ee6: fb00 4003 mla r0, r0, r3, r4 + 8032eea: 1400 asrs r0, r0, #16 + 8032eec: f53f af4b bmi.w 8032d86 <_ZN8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x92> + 8032ef0: 3901 subs r1, #1 + 8032ef2: 4288 cmp r0, r1 + 8032ef4: f6bf af47 bge.w 8032d86 <_ZN8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x92> + 8032ef8: 9924 ldr r1, [sp, #144] ; 0x90 + 8032efa: fb01 6303 mla r3, r1, r3, r6 + 8032efe: 141b asrs r3, r3, #16 + 8032f00: f53f af41 bmi.w 8032d86 <_ZN8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x92> + 8032f04: 3a01 subs r2, #1 + 8032f06: 4293 cmp r3, r2 + 8032f08: f6bf af3d bge.w 8032d86 <_ZN8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x92> + 8032f0c: f9bd 3028 ldrsh.w r3, [sp, #40] ; 0x28 + 8032f10: 46c8 mov r8, r9 + 8032f12: f8dd b024 ldr.w fp, [sp, #36] ; 0x24 + 8032f16: 930e str r3, [sp, #56] ; 0x38 + 8032f18: f1bb 0f00 cmp.w fp, #0 + 8032f1c: f300 80b7 bgt.w 803308e <_ZN8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x39a> + 8032f20: 9b09 ldr r3, [sp, #36] ; 0x24 + 8032f22: ea23 75e3 bic.w r5, r3, r3, asr #31 + 8032f26: eb09 0945 add.w r9, r9, r5, lsl #1 + 8032f2a: 9b0d ldr r3, [sp, #52] ; 0x34 + 8032f2c: 2b00 cmp r3, #0 + 8032f2e: f340 818e ble.w 803324e <_ZN8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x55a> + 8032f32: eeb7 7a00 vmov.f32 s14, #112 ; 0x3f800000 1.0 + 8032f36: 9b20 ldr r3, [sp, #128] ; 0x80 + 8032f38: ee30 0a04 vadd.f32 s0, s0, s8 + 8032f3c: ee70 0aa4 vadd.f32 s1, s1, s9 + 8032f40: eef0 6a62 vmov.f32 s13, s5 + 8032f44: eec7 7a00 vdiv.f32 s15, s14, s0 + 8032f48: ee31 1a05 vadd.f32 s2, s2, s10 + 8032f4c: eefe 6ac8 vcvt.s32.f32 s13, s13, #16 + 8032f50: ee16 4a90 vmov r4, s13 + 8032f54: eef0 6a43 vmov.f32 s13, s6 + 8032f58: eefe 6ac8 vcvt.s32.f32 s13, s13, #16 + 8032f5c: ee16 6a90 vmov r6, s13 + 8032f60: ee20 7aa7 vmul.f32 s14, s1, s15 + 8032f64: ee61 7a27 vmul.f32 s15, s2, s15 + 8032f68: ee77 2a62 vsub.f32 s5, s14, s5 + 8032f6c: ee37 3ac3 vsub.f32 s6, s15, s6 + 8032f70: eefe 2ac8 vcvt.s32.f32 s5, s5, #16 + 8032f74: eebe 3ac8 vcvt.s32.f32 s6, s6, #16 + 8032f78: ee12 2a90 vmov r2, s5 + 8032f7c: eef0 2a47 vmov.f32 s5, s14 + 8032f80: fb92 f3f3 sdiv r3, r2, r3 + 8032f84: ee13 2a10 vmov r2, s6 + 8032f88: 9323 str r3, [sp, #140] ; 0x8c + 8032f8a: 9b20 ldr r3, [sp, #128] ; 0x80 + 8032f8c: eeb0 3a67 vmov.f32 s6, s15 + 8032f90: fb92 f3f3 sdiv r3, r2, r3 + 8032f94: 9324 str r3, [sp, #144] ; 0x90 + 8032f96: 9b0d ldr r3, [sp, #52] ; 0x34 + 8032f98: 9a14 ldr r2, [sp, #80] ; 0x50 + 8032f9a: 3b01 subs r3, #1 + 8032f9c: 930d str r3, [sp, #52] ; 0x34 + 8032f9e: 9b20 ldr r3, [sp, #128] ; 0x80 + 8032fa0: bf08 it eq + 8032fa2: 4613 moveq r3, r2 + 8032fa4: 9309 str r3, [sp, #36] ; 0x24 + 8032fa6: e6c2 b.n 8032d2e <_ZN8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x3a> + 8032fa8: 2900 cmp r1, #0 + 8032faa: f43f af4d beq.w 8032e48 <_ZN8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x154> + 8032fae: eb0a 0003 add.w r0, sl, r3 + 8032fb2: 0843 lsrs r3, r0, #1 + 8032fb4: 07c0 lsls r0, r0, #31 + 8032fb6: 5cfb ldrb r3, [r7, r3] + 8032fb8: bf54 ite pl + 8032fba: f003 030f andpl.w r3, r3, #15 + 8032fbe: 111b asrmi r3, r3, #4 + 8032fc0: eb03 1303 add.w r3, r3, r3, lsl #4 + 8032fc4: b2db uxtb r3, r3 + 8032fc6: 930b str r3, [sp, #44] ; 0x2c + 8032fc8: e73e b.n 8032e48 <_ZN8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x154> + 8032fca: f8b8 e000 ldrh.w lr, [r8] + 8032fce: fa1f fb83 uxth.w fp, r3 + 8032fd2: f3c2 4107 ubfx r1, r2, #16, #8 + 8032fd6: 43db mvns r3, r3 + 8032fd8: ea4f 202e mov.w r0, lr, asr #8 + 8032fdc: fb11 f10b smulbb r1, r1, fp + 8032fe0: b2db uxtb r3, r3 + 8032fe2: f000 00f8 and.w r0, r0, #248 ; 0xf8 + 8032fe6: fa5f fc8c uxtb.w ip, ip + 8032fea: b2d2 uxtb r2, r2 + 8032fec: fb00 1003 mla r0, r0, r3, r1 + 8032ff0: ea4f 01ee mov.w r1, lr, asr #3 + 8032ff4: fb1c fc0b smulbb ip, ip, fp + 8032ff8: ea4f 0ece mov.w lr, lr, lsl #3 + 8032ffc: b280 uxth r0, r0 + 8032ffe: f001 01fc and.w r1, r1, #252 ; 0xfc + 8033002: fb12 fb0b smulbb fp, r2, fp + 8033006: fa5f fe8e uxtb.w lr, lr + 803300a: fb01 cc03 mla ip, r1, r3, ip + 803300e: fb0e bb03 mla fp, lr, r3, fp + 8033012: 1c43 adds r3, r0, #1 + 8033014: fa1f fc8c uxth.w ip, ip + 8033018: fa1f fb8b uxth.w fp, fp + 803301c: eb03 2010 add.w r0, r3, r0, lsr #8 + 8033020: f10c 0101 add.w r1, ip, #1 + 8033024: f400 4378 and.w r3, r0, #63488 ; 0xf800 + 8033028: f10b 0001 add.w r0, fp, #1 + 803302c: eb01 2c1c add.w ip, r1, ip, lsr #8 + 8033030: eb00 201b add.w r0, r0, fp, lsr #8 + 8033034: ea4f 1c5c mov.w ip, ip, lsr #5 + 8033038: f3c0 20c4 ubfx r0, r0, #11, #5 + 803303c: f40c 6cfc and.w ip, ip, #2016 ; 0x7e0 + 8033040: 4318 orrs r0, r3 + 8033042: ea40 000c orr.w r0, r0, ip + 8033046: f8a8 0000 strh.w r0, [r8] + 803304a: e734 b.n 8032eb6 <_ZN8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1c2> + 803304c: f113 0b01 adds.w fp, r3, #1 + 8033050: f53f af31 bmi.w 8032eb6 <_ZN8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1c2> + 8033054: 45dc cmp ip, fp + 8033056: f6ff af2e blt.w 8032eb6 <_ZN8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1c2> + 803305a: f110 0b01 adds.w fp, r0, #1 + 803305e: f53f af2a bmi.w 8032eb6 <_ZN8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1c2> + 8033062: 45de cmp lr, fp + 8033064: f6ff af27 blt.w 8032eb6 <_ZN8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1c2> + 8033068: 9302 str r3, [sp, #8] + 803306a: fa0f f38e sxth.w r3, lr + 803306e: 9d0f ldr r5, [sp, #60] ; 0x3c + 8033070: 9301 str r3, [sp, #4] + 8033072: fa0f f38c sxth.w r3, ip + 8033076: e9cd 0203 strd r0, r2, [sp, #12] + 803307a: e9cd 1505 strd r1, r5, [sp, #20] + 803307e: 9300 str r3, [sp, #0] + 8033080: 463a mov r2, r7 + 8033082: 4653 mov r3, sl + 8033084: 4641 mov r1, r8 + 8033086: 9815 ldr r0, [sp, #84] ; 0x54 + 8033088: f7ff fd4c bl 8032b24 <_ZNK8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtsssiihhh> + 803308c: e713 b.n 8032eb6 <_ZN8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1c2> + 803308e: 1422 asrs r2, r4, #16 + 8033090: 9d0a ldr r5, [sp, #40] ; 0x28 + 8033092: 1433 asrs r3, r6, #16 + 8033094: f3c4 3103 ubfx r1, r4, #12, #4 + 8033098: f3c6 3003 ubfx r0, r6, #12, #4 + 803309c: fb05 2303 mla r3, r5, r3, r2 + 80330a0: 085a lsrs r2, r3, #1 + 80330a2: 07dd lsls r5, r3, #31 + 80330a4: 5cba ldrb r2, [r7, r2] + 80330a6: bf54 ite pl + 80330a8: f002 020f andpl.w r2, r2, #15 + 80330ac: 1112 asrmi r2, r2, #4 + 80330ae: eb02 1202 add.w r2, r2, r2, lsl #4 + 80330b2: b2d2 uxtb r2, r2 + 80330b4: 2900 cmp r1, #0 + 80330b6: d077 beq.n 80331a8 <_ZN8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x4b4> + 80330b8: f103 0e01 add.w lr, r3, #1 + 80330bc: ea4f 0c5e mov.w ip, lr, lsr #1 + 80330c0: f01e 0f01 tst.w lr, #1 + 80330c4: f817 c00c ldrb.w ip, [r7, ip] + 80330c8: bf0c ite eq + 80330ca: f00c 0c0f andeq.w ip, ip, #15 + 80330ce: ea4f 1c2c movne.w ip, ip, asr #4 + 80330d2: eb0c 1c0c add.w ip, ip, ip, lsl #4 + 80330d6: fa5f f58c uxtb.w r5, ip + 80330da: 9512 str r5, [sp, #72] ; 0x48 + 80330dc: b308 cbz r0, 8033122 <_ZN8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x42e> + 80330de: 9d0e ldr r5, [sp, #56] ; 0x38 + 80330e0: 442b add r3, r5 + 80330e2: ea4f 0c53 mov.w ip, r3, lsr #1 + 80330e6: 07dd lsls r5, r3, #31 + 80330e8: f103 0301 add.w r3, r3, #1 + 80330ec: f817 c00c ldrb.w ip, [r7, ip] + 80330f0: bf54 ite pl + 80330f2: f00c 0c0f andpl.w ip, ip, #15 + 80330f6: ea4f 1c2c movmi.w ip, ip, asr #4 + 80330fa: eb0c 1c0c add.w ip, ip, ip, lsl #4 + 80330fe: fa5f f58c uxtb.w r5, ip + 8033102: ea4f 0c53 mov.w ip, r3, lsr #1 + 8033106: 950c str r5, [sp, #48] ; 0x30 + 8033108: 07dd lsls r5, r3, #31 + 803310a: f817 c00c ldrb.w ip, [r7, ip] + 803310e: bf54 ite pl + 8033110: f00c 0c0f andpl.w ip, ip, #15 + 8033114: ea4f 1c2c movmi.w ip, ip, asr #4 + 8033118: eb0c 1c0c add.w ip, ip, ip, lsl #4 + 803311c: fa5f f38c uxtb.w r3, ip + 8033120: 9313 str r3, [sp, #76] ; 0x4c + 8033122: b289 uxth r1, r1 + 8033124: 9d12 ldr r5, [sp, #72] ; 0x48 + 8033126: b280 uxth r0, r0 + 8033128: fb01 f300 mul.w r3, r1, r0 + 803312c: 0109 lsls r1, r1, #4 + 803312e: ebc3 1000 rsb r0, r3, r0, lsl #4 + 8033132: f5c1 7c80 rsb ip, r1, #256 ; 0x100 + 8033136: 1ac9 subs r1, r1, r3 + 8033138: b280 uxth r0, r0 + 803313a: b289 uxth r1, r1 + 803313c: ebac 0c00 sub.w ip, ip, r0 + 8033140: 4369 muls r1, r5 + 8033142: fa1f fc8c uxth.w ip, ip + 8033146: fb02 120c mla r2, r2, ip, r1 + 803314a: 990c ldr r1, [sp, #48] ; 0x30 + 803314c: fb00 2001 mla r0, r0, r1, r2 + 8033150: 9a13 ldr r2, [sp, #76] ; 0x4c + 8033152: fb03 0302 mla r3, r3, r2, r0 + 8033156: f3c3 2307 ubfx r3, r3, #8, #8 + 803315a: b1d3 cbz r3, 8033192 <_ZN8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x49e> + 803315c: 9a0f ldr r2, [sp, #60] ; 0x3c + 803315e: 4353 muls r3, r2 + 8033160: 1c5a adds r2, r3, #1 + 8033162: eb02 2313 add.w r3, r2, r3, lsr #8 + 8033166: 4a0f ldr r2, [pc, #60] ; (80331a4 <_ZN8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x4b0>) + 8033168: 121b asrs r3, r3, #8 + 803316a: 6812 ldr r2, [r2, #0] + 803316c: 2bff cmp r3, #255 ; 0xff + 803316e: ea4f 2c12 mov.w ip, r2, lsr #8 + 8033172: d12d bne.n 80331d0 <_ZN8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x4dc> + 8033174: 0953 lsrs r3, r2, #5 + 8033176: f42c 6cff bic.w ip, ip, #2040 ; 0x7f8 + 803317a: f3c2 02c4 ubfx r2, r2, #3, #5 + 803317e: f403 63fc and.w r3, r3, #2016 ; 0x7e0 + 8033182: f02c 0c07 bic.w ip, ip, #7 + 8033186: ea43 0c0c orr.w ip, r3, ip + 803318a: ea4c 0202 orr.w r2, ip, r2 + 803318e: f8a8 2000 strh.w r2, [r8] + 8033192: 9b23 ldr r3, [sp, #140] ; 0x8c + 8033194: f108 0802 add.w r8, r8, #2 + 8033198: f10b 3bff add.w fp, fp, #4294967295 + 803319c: 441c add r4, r3 + 803319e: 9b24 ldr r3, [sp, #144] ; 0x90 + 80331a0: 441e add r6, r3 + 80331a2: e6b9 b.n 8032f18 <_ZN8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x224> + 80331a4: 2001e73c .word 0x2001e73c + 80331a8: 2800 cmp r0, #0 + 80331aa: d0ba beq.n 8033122 <_ZN8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x42e> + 80331ac: 9d0e ldr r5, [sp, #56] ; 0x38 + 80331ae: 442b add r3, r5 + 80331b0: ea4f 0c53 mov.w ip, r3, lsr #1 + 80331b4: 07db lsls r3, r3, #31 + 80331b6: f817 c00c ldrb.w ip, [r7, ip] + 80331ba: bf54 ite pl + 80331bc: f00c 0c0f andpl.w ip, ip, #15 + 80331c0: ea4f 1c2c movmi.w ip, ip, asr #4 + 80331c4: eb0c 1c0c add.w ip, ip, ip, lsl #4 + 80331c8: fa5f f38c uxtb.w r3, ip + 80331cc: 930c str r3, [sp, #48] ; 0x30 + 80331ce: e7a8 b.n 8033122 <_ZN8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x42e> + 80331d0: f8b8 e000 ldrh.w lr, [r8] + 80331d4: fa1f fa83 uxth.w sl, r3 + 80331d8: f3c2 4107 ubfx r1, r2, #16, #8 + 80331dc: 43db mvns r3, r3 + 80331de: ea4f 202e mov.w r0, lr, asr #8 + 80331e2: fb11 f10a smulbb r1, r1, sl + 80331e6: b2db uxtb r3, r3 + 80331e8: f000 00f8 and.w r0, r0, #248 ; 0xf8 + 80331ec: b2d2 uxtb r2, r2 + 80331ee: fa5f fc8c uxtb.w ip, ip + 80331f2: fb00 1003 mla r0, r0, r3, r1 + 80331f6: ea4f 01ee mov.w r1, lr, asr #3 + 80331fa: fb12 f20a smulbb r2, r2, sl + 80331fe: ea4f 0ece mov.w lr, lr, lsl #3 + 8033202: b280 uxth r0, r0 + 8033204: f001 01fc and.w r1, r1, #252 ; 0xfc + 8033208: fb1c fc0a smulbb ip, ip, sl + 803320c: fa5f fe8e uxtb.w lr, lr + 8033210: fb0e 2203 mla r2, lr, r3, r2 + 8033214: fb01 cc03 mla ip, r1, r3, ip + 8033218: 1c43 adds r3, r0, #1 + 803321a: b292 uxth r2, r2 + 803321c: eb03 2010 add.w r0, r3, r0, lsr #8 + 8033220: 1c51 adds r1, r2, #1 + 8033222: fa1f fc8c uxth.w ip, ip + 8033226: f400 4078 and.w r0, r0, #63488 ; 0xf800 + 803322a: eb01 2112 add.w r1, r1, r2, lsr #8 + 803322e: f3c1 21c4 ubfx r1, r1, #11, #5 + 8033232: 4308 orrs r0, r1 + 8033234: f10c 0101 add.w r1, ip, #1 + 8033238: eb01 2c1c add.w ip, r1, ip, lsr #8 + 803323c: ea4f 1c5c mov.w ip, ip, lsr #5 + 8033240: f40c 6cfc and.w ip, ip, #2016 ; 0x7e0 + 8033244: ea40 000c orr.w r0, r0, ip + 8033248: f8a8 0000 strh.w r0, [r8] + 803324c: e7a1 b.n 8033192 <_ZN8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x49e> + 803324e: b017 add sp, #92 ; 0x5c + 8033250: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + +08033254 <_ZNK8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKtsssiihh>: + 8033254: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} + 8033258: e9dd 050a ldrd r0, r5, [sp, #40] ; 0x28 + 803325c: f9bd 8020 ldrsh.w r8, [sp, #32] + 8033260: 2d00 cmp r5, #0 + 8033262: f9bd 9024 ldrsh.w r9, [sp, #36] ; 0x24 + 8033266: f89d 7030 ldrb.w r7, [sp, #48] ; 0x30 + 803326a: fb05 0e03 mla lr, r5, r3, r0 + 803326e: f89d c034 ldrb.w ip, [sp, #52] ; 0x34 + 8033272: f2c0 80b0 blt.w 80333d6 <_ZNK8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKtsssiihh+0x182> + 8033276: 45a9 cmp r9, r5 + 8033278: f340 80ad ble.w 80333d6 <_ZNK8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKtsssiihh+0x182> + 803327c: 2800 cmp r0, #0 + 803327e: f2c0 80a8 blt.w 80333d2 <_ZNK8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKtsssiihh+0x17e> + 8033282: 4580 cmp r8, r0 + 8033284: f340 80a5 ble.w 80333d2 <_ZNK8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKtsssiihh+0x17e> + 8033288: ea4f 045e mov.w r4, lr, lsr #1 + 803328c: f01e 0f01 tst.w lr, #1 + 8033290: 5d16 ldrb r6, [r2, r4] + 8033292: bf0c ite eq + 8033294: f006 060f andeq.w r6, r6, #15 + 8033298: 1136 asrne r6, r6, #4 + 803329a: eb06 1606 add.w r6, r6, r6, lsl #4 + 803329e: b2f6 uxtb r6, r6 + 80332a0: 1c44 adds r4, r0, #1 + 80332a2: f100 809b bmi.w 80333dc <_ZNK8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKtsssiihh+0x188> + 80332a6: 45a0 cmp r8, r4 + 80332a8: f340 8098 ble.w 80333dc <_ZNK8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKtsssiihh+0x188> + 80332ac: 2f00 cmp r7, #0 + 80332ae: f000 8097 beq.w 80333e0 <_ZNK8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKtsssiihh+0x18c> + 80332b2: f10e 0a01 add.w sl, lr, #1 + 80332b6: ea4f 045a mov.w r4, sl, lsr #1 + 80332ba: f01a 0f01 tst.w sl, #1 + 80332be: 5d14 ldrb r4, [r2, r4] + 80332c0: bf0c ite eq + 80332c2: f004 040f andeq.w r4, r4, #15 + 80332c6: 1124 asrne r4, r4, #4 + 80332c8: eb04 1404 add.w r4, r4, r4, lsl #4 + 80332cc: b2e4 uxtb r4, r4 + 80332ce: 3501 adds r5, #1 + 80332d0: f100 808a bmi.w 80333e8 <_ZNK8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKtsssiihh+0x194> + 80332d4: 45a9 cmp r9, r5 + 80332d6: f340 8087 ble.w 80333e8 <_ZNK8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKtsssiihh+0x194> + 80332da: f1bc 0f00 cmp.w ip, #0 + 80332de: f000 8086 beq.w 80333ee <_ZNK8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKtsssiihh+0x19a> + 80332e2: 2800 cmp r0, #0 + 80332e4: db7e blt.n 80333e4 <_ZNK8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKtsssiihh+0x190> + 80332e6: 4580 cmp r8, r0 + 80332e8: dd7c ble.n 80333e4 <_ZNK8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKtsssiihh+0x190> + 80332ea: eb03 090e add.w r9, r3, lr + 80332ee: ea4f 0559 mov.w r5, r9, lsr #1 + 80332f2: f019 0f01 tst.w r9, #1 + 80332f6: 5d55 ldrb r5, [r2, r5] + 80332f8: bf0c ite eq + 80332fa: f005 050f andeq.w r5, r5, #15 + 80332fe: 112d asrne r5, r5, #4 + 8033300: eb05 1505 add.w r5, r5, r5, lsl #4 + 8033304: b2ed uxtb r5, r5 + 8033306: 3001 adds r0, #1 + 8033308: d474 bmi.n 80333f4 <_ZNK8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKtsssiihh+0x1a0> + 803330a: 4580 cmp r8, r0 + 803330c: dd72 ble.n 80333f4 <_ZNK8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKtsssiihh+0x1a0> + 803330e: 2f00 cmp r7, #0 + 8033310: d072 beq.n 80333f8 <_ZNK8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKtsssiihh+0x1a4> + 8033312: 3301 adds r3, #1 + 8033314: 449e add lr, r3 + 8033316: ea4f 035e mov.w r3, lr, lsr #1 + 803331a: f01e 0f01 tst.w lr, #1 + 803331e: 5cd0 ldrb r0, [r2, r3] + 8033320: bf0c ite eq + 8033322: f000 000f andeq.w r0, r0, #15 + 8033326: 1100 asrne r0, r0, #4 + 8033328: eb00 1000 add.w r0, r0, r0, lsl #4 + 803332c: b2c3 uxtb r3, r0 + 803332e: b2ba uxth r2, r7 + 8033330: fa1f fc8c uxth.w ip, ip + 8033334: fb02 f00c mul.w r0, r2, ip + 8033338: 0112 lsls r2, r2, #4 + 803333a: ebc0 1c0c rsb ip, r0, ip, lsl #4 + 803333e: f5c2 7780 rsb r7, r2, #256 ; 0x100 + 8033342: 1a12 subs r2, r2, r0 + 8033344: fa1f fc8c uxth.w ip, ip + 8033348: b292 uxth r2, r2 + 803334a: eba7 070c sub.w r7, r7, ip + 803334e: 4362 muls r2, r4 + 8033350: b2bf uxth r7, r7 + 8033352: fb06 2207 mla r2, r6, r7, r2 + 8033356: fb0c 2505 mla r5, ip, r5, r2 + 803335a: fb00 5303 mla r3, r0, r3, r5 + 803335e: f3c3 2307 ubfx r3, r3, #8, #8 + 8033362: b3a3 cbz r3, 80333ce <_ZNK8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKtsssiihh+0x17a> + 8033364: 4a25 ldr r2, [pc, #148] ; (80333fc <_ZNK8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKtsssiihh+0x1a8>) + 8033366: 880e ldrh r6, [r1, #0] + 8033368: 6815 ldr r5, [r2, #0] + 803336a: b29a uxth r2, r3 + 803336c: 1234 asrs r4, r6, #8 + 803336e: 43db mvns r3, r3 + 8033370: f3c5 4007 ubfx r0, r5, #16, #8 + 8033374: f3c5 2707 ubfx r7, r5, #8, #8 + 8033378: b2db uxtb r3, r3 + 803337a: f004 04f8 and.w r4, r4, #248 ; 0xf8 + 803337e: fb10 f002 smulbb r0, r0, r2 + 8033382: b2ed uxtb r5, r5 + 8033384: fb17 f702 smulbb r7, r7, r2 + 8033388: fb04 0403 mla r4, r4, r3, r0 + 803338c: 10f0 asrs r0, r6, #3 + 803338e: fb15 f202 smulbb r2, r5, r2 + 8033392: 00f6 lsls r6, r6, #3 + 8033394: f000 00fc and.w r0, r0, #252 ; 0xfc + 8033398: b2a4 uxth r4, r4 + 803339a: b2f6 uxtb r6, r6 + 803339c: fb00 7003 mla r0, r0, r3, r7 + 80333a0: fb06 2303 mla r3, r6, r3, r2 + 80333a4: b280 uxth r0, r0 + 80333a6: b29a uxth r2, r3 + 80333a8: 1c63 adds r3, r4, #1 + 80333aa: eb03 2414 add.w r4, r3, r4, lsr #8 + 80333ae: 1c53 adds r3, r2, #1 + 80333b0: eb03 2312 add.w r3, r3, r2, lsr #8 + 80333b4: 1c42 adds r2, r0, #1 + 80333b6: f404 4478 and.w r4, r4, #63488 ; 0xf800 + 80333ba: eb02 2010 add.w r0, r2, r0, lsr #8 + 80333be: f3c3 23c4 ubfx r3, r3, #11, #5 + 80333c2: 0940 lsrs r0, r0, #5 + 80333c4: 4323 orrs r3, r4 + 80333c6: f400 60fc and.w r0, r0, #2016 ; 0x7e0 + 80333ca: 4303 orrs r3, r0 + 80333cc: 800b strh r3, [r1, #0] + 80333ce: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + 80333d2: 2600 movs r6, #0 + 80333d4: e764 b.n 80332a0 <_ZNK8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKtsssiihh+0x4c> + 80333d6: 2400 movs r4, #0 + 80333d8: 4626 mov r6, r4 + 80333da: e778 b.n 80332ce <_ZNK8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKtsssiihh+0x7a> + 80333dc: 2400 movs r4, #0 + 80333de: e776 b.n 80332ce <_ZNK8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKtsssiihh+0x7a> + 80333e0: 463c mov r4, r7 + 80333e2: e774 b.n 80332ce <_ZNK8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKtsssiihh+0x7a> + 80333e4: 2500 movs r5, #0 + 80333e6: e78e b.n 8033306 <_ZNK8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKtsssiihh+0xb2> + 80333e8: 2300 movs r3, #0 + 80333ea: 461d mov r5, r3 + 80333ec: e79f b.n 803332e <_ZNK8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKtsssiihh+0xda> + 80333ee: 4663 mov r3, ip + 80333f0: 4665 mov r5, ip + 80333f2: e79c b.n 803332e <_ZNK8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKtsssiihh+0xda> + 80333f4: 2300 movs r3, #0 + 80333f6: e79a b.n 803332e <_ZNK8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKtsssiihh+0xda> + 80333f8: 463b mov r3, r7 + 80333fa: e798 b.n 803332e <_ZNK8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKtsssiihh+0xda> + 80333fc: 2001e73c .word 0x2001e73c + +08033400 <_ZN8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff>: + 8033400: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8033404: b093 sub sp, #76 ; 0x4c + 8033406: 461d mov r5, r3 + 8033408: 920c str r2, [sp, #48] ; 0x30 + 803340a: 9a21 ldr r2, [sp, #132] ; 0x84 + 803340c: 9011 str r0, [sp, #68] ; 0x44 + 803340e: 9107 str r1, [sp, #28] + 8033410: 6850 ldr r0, [r2, #4] + 8033412: 6812 ldr r2, [r2, #0] + 8033414: e9dd 1322 ldrd r1, r3, [sp, #136] ; 0x88 + 8033418: e9dd 461d ldrd r4, r6, [sp, #116] ; 0x74 + 803341c: fb00 1303 mla r3, r0, r3, r1 + 8033420: eb02 0943 add.w r9, r2, r3, lsl #1 + 8033424: 9b24 ldr r3, [sp, #144] ; 0x90 + 8033426: 689b ldr r3, [r3, #8] + 8033428: 3301 adds r3, #1 + 803342a: f023 0301 bic.w r3, r3, #1 + 803342e: 9306 str r3, [sp, #24] + 8033430: 9b24 ldr r3, [sp, #144] ; 0x90 + 8033432: 681f ldr r7, [r3, #0] + 8033434: 9b07 ldr r3, [sp, #28] + 8033436: 2b00 cmp r3, #0 + 8033438: dc03 bgt.n 8033442 <_ZN8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x42> + 803343a: 9b0c ldr r3, [sp, #48] ; 0x30 + 803343c: 2b00 cmp r3, #0 + 803343e: f340 8267 ble.w 8033910 <_ZN8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x510> + 8033442: 9b24 ldr r3, [sp, #144] ; 0x90 + 8033444: f9b3 1008 ldrsh.w r1, [r3, #8] + 8033448: f9b3 200c ldrsh.w r2, [r3, #12] + 803344c: 1e48 subs r0, r1, #1 + 803344e: f102 3cff add.w ip, r2, #4294967295 + 8033452: 2d00 cmp r5, #0 + 8033454: f340 80b7 ble.w 80335c6 <_ZN8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1c6> + 8033458: ea5f 4e24 movs.w lr, r4, asr #16 + 803345c: ea4f 4326 mov.w r3, r6, asr #16 + 8033460: d406 bmi.n 8033470 <_ZN8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x70> + 8033462: 4586 cmp lr, r0 + 8033464: da04 bge.n 8033470 <_ZN8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x70> + 8033466: 2b00 cmp r3, #0 + 8033468: db02 blt.n 8033470 <_ZN8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x70> + 803346a: 4563 cmp r3, ip + 803346c: f2c0 80ac blt.w 80335c8 <_ZN8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1c8> + 8033470: f11e 0e01 adds.w lr, lr, #1 + 8033474: f100 809f bmi.w 80335b6 <_ZN8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1b6> + 8033478: 4571 cmp r1, lr + 803347a: f2c0 809c blt.w 80335b6 <_ZN8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1b6> + 803347e: 3301 adds r3, #1 + 8033480: f100 8099 bmi.w 80335b6 <_ZN8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1b6> + 8033484: 429a cmp r2, r3 + 8033486: f2c0 8096 blt.w 80335b6 <_ZN8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1b6> + 803348a: 46c8 mov r8, r9 + 803348c: f9bd a018 ldrsh.w sl, [sp, #24] + 8033490: 9509 str r5, [sp, #36] ; 0x24 + 8033492: 9b09 ldr r3, [sp, #36] ; 0x24 + 8033494: 2b00 cmp r3, #0 + 8033496: f340 80b5 ble.w 8033604 <_ZN8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x204> + 803349a: f3c4 3303 ubfx r3, r4, #12, #4 + 803349e: 1430 asrs r0, r6, #16 + 80334a0: f3c6 3103 ubfx r1, r6, #12, #4 + 80334a4: 9308 str r3, [sp, #32] + 80334a6: 9b24 ldr r3, [sp, #144] ; 0x90 + 80334a8: e9d3 ce02 ldrd ip, lr, [r3, #8] + 80334ac: 1423 asrs r3, r4, #16 + 80334ae: f100 813f bmi.w 8033730 <_ZN8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x330> + 80334b2: f10c 3bff add.w fp, ip, #4294967295 + 80334b6: 455b cmp r3, fp + 80334b8: f280 813a bge.w 8033730 <_ZN8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x330> + 80334bc: 2800 cmp r0, #0 + 80334be: f2c0 8137 blt.w 8033730 <_ZN8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x330> + 80334c2: f10e 3bff add.w fp, lr, #4294967295 + 80334c6: 4558 cmp r0, fp + 80334c8: f280 8132 bge.w 8033730 <_ZN8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x330> + 80334cc: 9a06 ldr r2, [sp, #24] + 80334ce: fb00 3302 mla r3, r0, r2, r3 + 80334d2: 0858 lsrs r0, r3, #1 + 80334d4: 07da lsls r2, r3, #31 + 80334d6: 9a08 ldr r2, [sp, #32] + 80334d8: f817 c000 ldrb.w ip, [r7, r0] + 80334dc: bf54 ite pl + 80334de: f00c 0c0f andpl.w ip, ip, #15 + 80334e2: ea4f 1c2c movmi.w ip, ip, asr #4 + 80334e6: eb0c 1c0c add.w ip, ip, ip, lsl #4 + 80334ea: fa5f fc8c uxtb.w ip, ip + 80334ee: 2a00 cmp r2, #0 + 80334f0: f000 80cc beq.w 803368c <_ZN8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x28c> + 80334f4: 1c58 adds r0, r3, #1 + 80334f6: ea4f 0e50 mov.w lr, r0, lsr #1 + 80334fa: 07c0 lsls r0, r0, #31 + 80334fc: f817 e00e ldrb.w lr, [r7, lr] + 8033500: bf54 ite pl + 8033502: f00e 0e0f andpl.w lr, lr, #15 + 8033506: ea4f 1e2e movmi.w lr, lr, asr #4 + 803350a: eb0e 1e0e add.w lr, lr, lr, lsl #4 + 803350e: fa5f fe8e uxtb.w lr, lr + 8033512: f8cd e034 str.w lr, [sp, #52] ; 0x34 + 8033516: b1b9 cbz r1, 8033548 <_ZN8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x148> + 8033518: 4453 add r3, sl + 803351a: 0858 lsrs r0, r3, #1 + 803351c: 07da lsls r2, r3, #31 + 803351e: 5c38 ldrb r0, [r7, r0] + 8033520: bf54 ite pl + 8033522: f000 000f andpl.w r0, r0, #15 + 8033526: 1100 asrmi r0, r0, #4 + 8033528: eb00 1000 add.w r0, r0, r0, lsl #4 + 803352c: b2c0 uxtb r0, r0 + 803352e: 900a str r0, [sp, #40] ; 0x28 + 8033530: 1c58 adds r0, r3, #1 + 8033532: 0843 lsrs r3, r0, #1 + 8033534: 07c2 lsls r2, r0, #31 + 8033536: 5cfb ldrb r3, [r7, r3] + 8033538: bf54 ite pl + 803353a: f003 030f andpl.w r3, r3, #15 + 803353e: 111b asrmi r3, r3, #4 + 8033540: eb03 1303 add.w r3, r3, r3, lsl #4 + 8033544: b2db uxtb r3, r3 + 8033546: 930e str r3, [sp, #56] ; 0x38 + 8033548: f8bd 2020 ldrh.w r2, [sp, #32] + 803354c: b289 uxth r1, r1 + 803354e: fb02 f301 mul.w r3, r2, r1 + 8033552: 0112 lsls r2, r2, #4 + 8033554: ebc3 1101 rsb r1, r3, r1, lsl #4 + 8033558: f5c2 7080 rsb r0, r2, #256 ; 0x100 + 803355c: 1ad2 subs r2, r2, r3 + 803355e: b289 uxth r1, r1 + 8033560: b292 uxth r2, r2 + 8033562: 1a40 subs r0, r0, r1 + 8033564: fa1f fe80 uxth.w lr, r0 + 8033568: 980d ldr r0, [sp, #52] ; 0x34 + 803356a: 4342 muls r2, r0 + 803356c: fb0c 2c0e mla ip, ip, lr, r2 + 8033570: 9a0a ldr r2, [sp, #40] ; 0x28 + 8033572: fb01 c102 mla r1, r1, r2, ip + 8033576: 9a0e ldr r2, [sp, #56] ; 0x38 + 8033578: fb03 1302 mla r3, r3, r2, r1 + 803357c: f3c3 2307 ubfx r3, r3, #8, #8 + 8033580: 2bff cmp r3, #255 ; 0xff + 8033582: f040 8094 bne.w 80336ae <_ZN8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x2ae> + 8033586: 4bbf ldr r3, [pc, #764] ; (8033884 <_ZN8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x484>) + 8033588: 681a ldr r2, [r3, #0] + 803358a: 4bbf ldr r3, [pc, #764] ; (8033888 <_ZN8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x488>) + 803358c: 0951 lsrs r1, r2, #5 + 803358e: ea03 2312 and.w r3, r3, r2, lsr #8 + 8033592: f3c2 02c4 ubfx r2, r2, #3, #5 + 8033596: f401 61fc and.w r1, r1, #2016 ; 0x7e0 + 803359a: 430b orrs r3, r1 + 803359c: 4313 orrs r3, r2 + 803359e: f8a8 3000 strh.w r3, [r8] + 80335a2: 9b1f ldr r3, [sp, #124] ; 0x7c + 80335a4: f108 0802 add.w r8, r8, #2 + 80335a8: 441c add r4, r3 + 80335aa: 9b20 ldr r3, [sp, #128] ; 0x80 + 80335ac: 441e add r6, r3 + 80335ae: 9b09 ldr r3, [sp, #36] ; 0x24 + 80335b0: 3b01 subs r3, #1 + 80335b2: 9309 str r3, [sp, #36] ; 0x24 + 80335b4: e76d b.n 8033492 <_ZN8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x92> + 80335b6: 9b1f ldr r3, [sp, #124] ; 0x7c + 80335b8: 3d01 subs r5, #1 + 80335ba: f109 0902 add.w r9, r9, #2 + 80335be: 441c add r4, r3 + 80335c0: 9b20 ldr r3, [sp, #128] ; 0x80 + 80335c2: 441e add r6, r3 + 80335c4: e745 b.n 8033452 <_ZN8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x52> + 80335c6: d021 beq.n 803360c <_ZN8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x20c> + 80335c8: 1e6b subs r3, r5, #1 + 80335ca: 981f ldr r0, [sp, #124] ; 0x7c + 80335cc: fb00 4003 mla r0, r0, r3, r4 + 80335d0: 1400 asrs r0, r0, #16 + 80335d2: f53f af5a bmi.w 803348a <_ZN8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x8a> + 80335d6: 3901 subs r1, #1 + 80335d8: 4288 cmp r0, r1 + 80335da: f6bf af56 bge.w 803348a <_ZN8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x8a> + 80335de: 9920 ldr r1, [sp, #128] ; 0x80 + 80335e0: fb01 6303 mla r3, r1, r3, r6 + 80335e4: 141b asrs r3, r3, #16 + 80335e6: f53f af50 bmi.w 803348a <_ZN8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x8a> + 80335ea: 3a01 subs r2, #1 + 80335ec: 4293 cmp r3, r2 + 80335ee: f6bf af4c bge.w 803348a <_ZN8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x8a> + 80335f2: f9bd 3018 ldrsh.w r3, [sp, #24] + 80335f6: 46a8 mov r8, r5 + 80335f8: 46ce mov lr, r9 + 80335fa: 9308 str r3, [sp, #32] + 80335fc: f1b8 0f00 cmp.w r8, #0 + 8033600: f300 80b6 bgt.w 8033770 <_ZN8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x370> + 8033604: ea25 75e5 bic.w r5, r5, r5, asr #31 + 8033608: eb09 0945 add.w r9, r9, r5, lsl #1 + 803360c: 9b07 ldr r3, [sp, #28] + 803360e: 2b00 cmp r3, #0 + 8033610: f340 817e ble.w 8033910 <_ZN8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x510> + 8033614: eeb7 7a00 vmov.f32 s14, #112 ; 0x3f800000 1.0 + 8033618: 9b1c ldr r3, [sp, #112] ; 0x70 + 803361a: ee30 0a04 vadd.f32 s0, s0, s8 + 803361e: ee70 0aa4 vadd.f32 s1, s1, s9 + 8033622: eef0 6a62 vmov.f32 s13, s5 + 8033626: eec7 7a00 vdiv.f32 s15, s14, s0 + 803362a: ee31 1a05 vadd.f32 s2, s2, s10 + 803362e: eefe 6ac8 vcvt.s32.f32 s13, s13, #16 + 8033632: ee16 4a90 vmov r4, s13 + 8033636: eef0 6a43 vmov.f32 s13, s6 + 803363a: eefe 6ac8 vcvt.s32.f32 s13, s13, #16 + 803363e: ee16 6a90 vmov r6, s13 + 8033642: ee20 7aa7 vmul.f32 s14, s1, s15 + 8033646: ee61 7a27 vmul.f32 s15, s2, s15 + 803364a: ee77 2a62 vsub.f32 s5, s14, s5 + 803364e: ee37 3ac3 vsub.f32 s6, s15, s6 + 8033652: eefe 2ac8 vcvt.s32.f32 s5, s5, #16 + 8033656: eebe 3ac8 vcvt.s32.f32 s6, s6, #16 + 803365a: ee12 2a90 vmov r2, s5 + 803365e: eef0 2a47 vmov.f32 s5, s14 + 8033662: fb92 f3f3 sdiv r3, r2, r3 + 8033666: ee13 2a10 vmov r2, s6 + 803366a: 931f str r3, [sp, #124] ; 0x7c + 803366c: 9b1c ldr r3, [sp, #112] ; 0x70 + 803366e: eeb0 3a67 vmov.f32 s6, s15 + 8033672: fb92 f3f3 sdiv r3, r2, r3 + 8033676: 9320 str r3, [sp, #128] ; 0x80 + 8033678: 9b07 ldr r3, [sp, #28] + 803367a: 9a0c ldr r2, [sp, #48] ; 0x30 + 803367c: 3b01 subs r3, #1 + 803367e: 9307 str r3, [sp, #28] + 8033680: bf08 it eq + 8033682: 4615 moveq r5, r2 + 8033684: 9b1c ldr r3, [sp, #112] ; 0x70 + 8033686: bf18 it ne + 8033688: 461d movne r5, r3 + 803368a: e6d3 b.n 8033434 <_ZN8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x34> + 803368c: 2900 cmp r1, #0 + 803368e: f43f af5b beq.w 8033548 <_ZN8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x148> + 8033692: eb0a 0003 add.w r0, sl, r3 + 8033696: 0843 lsrs r3, r0, #1 + 8033698: 07c0 lsls r0, r0, #31 + 803369a: 5cfb ldrb r3, [r7, r3] + 803369c: bf54 ite pl + 803369e: f003 030f andpl.w r3, r3, #15 + 80336a2: 111b asrmi r3, r3, #4 + 80336a4: eb03 1303 add.w r3, r3, r3, lsl #4 + 80336a8: b2db uxtb r3, r3 + 80336aa: 930a str r3, [sp, #40] ; 0x28 + 80336ac: e74c b.n 8033548 <_ZN8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x148> + 80336ae: 2b00 cmp r3, #0 + 80336b0: f43f af77 beq.w 80335a2 <_ZN8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1a2> + 80336b4: 4a73 ldr r2, [pc, #460] ; (8033884 <_ZN8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x484>) + 80336b6: fa1f fe83 uxth.w lr, r3 + 80336ba: f8b8 c000 ldrh.w ip, [r8] + 80336be: 43db mvns r3, r3 + 80336c0: 6810 ldr r0, [r2, #0] + 80336c2: ea4f 212c mov.w r1, ip, asr #8 + 80336c6: f3c0 4207 ubfx r2, r0, #16, #8 + 80336ca: b2db uxtb r3, r3 + 80336cc: f001 01f8 and.w r1, r1, #248 ; 0xf8 + 80336d0: f3c0 2b07 ubfx fp, r0, #8, #8 + 80336d4: fb12 f20e smulbb r2, r2, lr + 80336d8: b2c0 uxtb r0, r0 + 80336da: fb1b fb0e smulbb fp, fp, lr + 80336de: fb01 2103 mla r1, r1, r3, r2 + 80336e2: ea4f 02ec mov.w r2, ip, asr #3 + 80336e6: fb10 fe0e smulbb lr, r0, lr + 80336ea: ea4f 0ccc mov.w ip, ip, lsl #3 + 80336ee: b289 uxth r1, r1 + 80336f0: f002 02fc and.w r2, r2, #252 ; 0xfc + 80336f4: fa5f fc8c uxtb.w ip, ip + 80336f8: fb02 b203 mla r2, r2, r3, fp + 80336fc: 1c48 adds r0, r1, #1 + 80336fe: fb0c e303 mla r3, ip, r3, lr + 8033702: b292 uxth r2, r2 + 8033704: b29b uxth r3, r3 + 8033706: eb00 2111 add.w r1, r0, r1, lsr #8 + 803370a: f102 0b01 add.w fp, r2, #1 + 803370e: f401 4078 and.w r0, r1, #63488 ; 0xf800 + 8033712: 1c59 adds r1, r3, #1 + 8033714: eb0b 2212 add.w r2, fp, r2, lsr #8 + 8033718: eb01 2113 add.w r1, r1, r3, lsr #8 + 803371c: 0952 lsrs r2, r2, #5 + 803371e: f3c1 21c4 ubfx r1, r1, #11, #5 + 8033722: f402 62fc and.w r2, r2, #2016 ; 0x7e0 + 8033726: 4301 orrs r1, r0 + 8033728: 4311 orrs r1, r2 + 803372a: f8a8 1000 strh.w r1, [r8] + 803372e: e738 b.n 80335a2 <_ZN8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1a2> + 8033730: f113 0b01 adds.w fp, r3, #1 + 8033734: f53f af35 bmi.w 80335a2 <_ZN8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1a2> + 8033738: 45dc cmp ip, fp + 803373a: f6ff af32 blt.w 80335a2 <_ZN8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1a2> + 803373e: f110 0b01 adds.w fp, r0, #1 + 8033742: f53f af2e bmi.w 80335a2 <_ZN8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1a2> + 8033746: 45de cmp lr, fp + 8033748: f6ff af2b blt.w 80335a2 <_ZN8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1a2> + 803374c: 9302 str r3, [sp, #8] + 803374e: fa0f f38e sxth.w r3, lr + 8033752: 9a08 ldr r2, [sp, #32] + 8033754: 9301 str r3, [sp, #4] + 8033756: fa0f f38c sxth.w r3, ip + 803375a: 9105 str r1, [sp, #20] + 803375c: 4641 mov r1, r8 + 803375e: 9300 str r3, [sp, #0] + 8033760: 4653 mov r3, sl + 8033762: e9cd 0203 strd r0, r2, [sp, #12] + 8033766: 463a mov r2, r7 + 8033768: 9811 ldr r0, [sp, #68] ; 0x44 + 803376a: f7ff fd73 bl 8033254 <_ZNK8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKtsssiihh> + 803376e: e718 b.n 80335a2 <_ZN8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1a2> + 8033770: 1422 asrs r2, r4, #16 + 8033772: 9906 ldr r1, [sp, #24] + 8033774: 1433 asrs r3, r6, #16 + 8033776: f3c4 3003 ubfx r0, r4, #12, #4 + 803377a: f3c6 3c03 ubfx ip, r6, #12, #4 + 803377e: fb01 2303 mla r3, r1, r3, r2 + 8033782: 085a lsrs r2, r3, #1 + 8033784: 07d9 lsls r1, r3, #31 + 8033786: 5cba ldrb r2, [r7, r2] + 8033788: bf54 ite pl + 803378a: f002 020f andpl.w r2, r2, #15 + 803378e: 1112 asrmi r2, r2, #4 + 8033790: eb02 1202 add.w r2, r2, r2, lsl #4 + 8033794: b2d2 uxtb r2, r2 + 8033796: 2800 cmp r0, #0 + 8033798: d063 beq.n 8033862 <_ZN8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x462> + 803379a: f103 0a01 add.w sl, r3, #1 + 803379e: ea4f 015a mov.w r1, sl, lsr #1 + 80337a2: f01a 0f01 tst.w sl, #1 + 80337a6: 5c79 ldrb r1, [r7, r1] + 80337a8: bf0c ite eq + 80337aa: f001 010f andeq.w r1, r1, #15 + 80337ae: 1109 asrne r1, r1, #4 + 80337b0: eb01 1101 add.w r1, r1, r1, lsl #4 + 80337b4: b2c9 uxtb r1, r1 + 80337b6: 910f str r1, [sp, #60] ; 0x3c + 80337b8: f1bc 0f00 cmp.w ip, #0 + 80337bc: d01a beq.n 80337f4 <_ZN8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x3f4> + 80337be: 9908 ldr r1, [sp, #32] + 80337c0: 440b add r3, r1 + 80337c2: 0859 lsrs r1, r3, #1 + 80337c4: f013 0f01 tst.w r3, #1 + 80337c8: f103 0301 add.w r3, r3, #1 + 80337cc: 5c79 ldrb r1, [r7, r1] + 80337ce: bf0c ite eq + 80337d0: f001 010f andeq.w r1, r1, #15 + 80337d4: 1109 asrne r1, r1, #4 + 80337d6: eb01 1101 add.w r1, r1, r1, lsl #4 + 80337da: b2c9 uxtb r1, r1 + 80337dc: 910b str r1, [sp, #44] ; 0x2c + 80337de: 0859 lsrs r1, r3, #1 + 80337e0: 07db lsls r3, r3, #31 + 80337e2: 5c79 ldrb r1, [r7, r1] + 80337e4: bf54 ite pl + 80337e6: f001 010f andpl.w r1, r1, #15 + 80337ea: 1109 asrmi r1, r1, #4 + 80337ec: eb01 1101 add.w r1, r1, r1, lsl #4 + 80337f0: b2c9 uxtb r1, r1 + 80337f2: 9110 str r1, [sp, #64] ; 0x40 + 80337f4: b280 uxth r0, r0 + 80337f6: fa1f fc8c uxth.w ip, ip + 80337fa: fb00 f30c mul.w r3, r0, ip + 80337fe: 0100 lsls r0, r0, #4 + 8033800: ebc3 1c0c rsb ip, r3, ip, lsl #4 + 8033804: f5c0 7180 rsb r1, r0, #256 ; 0x100 + 8033808: 1ac0 subs r0, r0, r3 + 803380a: fa1f fc8c uxth.w ip, ip + 803380e: b280 uxth r0, r0 + 8033810: eba1 010c sub.w r1, r1, ip + 8033814: fa1f fa81 uxth.w sl, r1 + 8033818: 990f ldr r1, [sp, #60] ; 0x3c + 803381a: 4348 muls r0, r1 + 803381c: 990b ldr r1, [sp, #44] ; 0x2c + 803381e: fb02 020a mla r2, r2, sl, r0 + 8033822: fb0c 2c01 mla ip, ip, r1, r2 + 8033826: 9a10 ldr r2, [sp, #64] ; 0x40 + 8033828: fb03 c302 mla r3, r3, r2, ip + 803382c: f3c3 2307 ubfx r3, r3, #8, #8 + 8033830: 2bff cmp r3, #255 ; 0xff + 8033832: d12b bne.n 803388c <_ZN8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x48c> + 8033834: 4b13 ldr r3, [pc, #76] ; (8033884 <_ZN8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x484>) + 8033836: 681a ldr r2, [r3, #0] + 8033838: 4b13 ldr r3, [pc, #76] ; (8033888 <_ZN8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x488>) + 803383a: 0951 lsrs r1, r2, #5 + 803383c: ea03 2312 and.w r3, r3, r2, lsr #8 + 8033840: f3c2 02c4 ubfx r2, r2, #3, #5 + 8033844: f401 61fc and.w r1, r1, #2016 ; 0x7e0 + 8033848: 430b orrs r3, r1 + 803384a: 4313 orrs r3, r2 + 803384c: f8ae 3000 strh.w r3, [lr] + 8033850: 9b1f ldr r3, [sp, #124] ; 0x7c + 8033852: f10e 0e02 add.w lr, lr, #2 + 8033856: f108 38ff add.w r8, r8, #4294967295 + 803385a: 441c add r4, r3 + 803385c: 9b20 ldr r3, [sp, #128] ; 0x80 + 803385e: 441e add r6, r3 + 8033860: e6cc b.n 80335fc <_ZN8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x1fc> + 8033862: f1bc 0f00 cmp.w ip, #0 + 8033866: d0c5 beq.n 80337f4 <_ZN8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x3f4> + 8033868: 9908 ldr r1, [sp, #32] + 803386a: 440b add r3, r1 + 803386c: 0859 lsrs r1, r3, #1 + 803386e: 07db lsls r3, r3, #31 + 8033870: 5c79 ldrb r1, [r7, r1] + 8033872: bf54 ite pl + 8033874: f001 010f andpl.w r1, r1, #15 + 8033878: 1109 asrmi r1, r1, #4 + 803387a: eb01 1101 add.w r1, r1, r1, lsl #4 + 803387e: b2c9 uxtb r1, r1 + 8033880: 910b str r1, [sp, #44] ; 0x2c + 8033882: e7b7 b.n 80337f4 <_ZN8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x3f4> + 8033884: 2001e73c .word 0x2001e73c + 8033888: fffff800 .word 0xfffff800 + 803388c: 2b00 cmp r3, #0 + 803388e: d0df beq.n 8033850 <_ZN8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x450> + 8033890: 4a21 ldr r2, [pc, #132] ; (8033918 <_ZN8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x518>) + 8033892: fa1f fa83 uxth.w sl, r3 + 8033896: f8be c000 ldrh.w ip, [lr] + 803389a: 43db mvns r3, r3 + 803389c: 6810 ldr r0, [r2, #0] + 803389e: ea4f 212c mov.w r1, ip, asr #8 + 80338a2: f3c0 4207 ubfx r2, r0, #16, #8 + 80338a6: b2db uxtb r3, r3 + 80338a8: f001 01f8 and.w r1, r1, #248 ; 0xf8 + 80338ac: f3c0 2b07 ubfx fp, r0, #8, #8 + 80338b0: fb12 f20a smulbb r2, r2, sl + 80338b4: b2c0 uxtb r0, r0 + 80338b6: fb1b fb0a smulbb fp, fp, sl + 80338ba: fb01 2103 mla r1, r1, r3, r2 + 80338be: ea4f 02ec mov.w r2, ip, asr #3 + 80338c2: fb10 f00a smulbb r0, r0, sl + 80338c6: ea4f 0ccc mov.w ip, ip, lsl #3 + 80338ca: b289 uxth r1, r1 + 80338cc: f002 02fc and.w r2, r2, #252 ; 0xfc + 80338d0: fa5f fc8c uxtb.w ip, ip + 80338d4: fb02 b203 mla r2, r2, r3, fp + 80338d8: fb0c 0003 mla r0, ip, r3, r0 + 80338dc: 1c4b adds r3, r1, #1 + 80338de: b292 uxth r2, r2 + 80338e0: b280 uxth r0, r0 + 80338e2: eb03 2111 add.w r1, r3, r1, lsr #8 + 80338e6: f100 0b01 add.w fp, r0, #1 + 80338ea: f401 4178 and.w r1, r1, #63488 ; 0xf800 + 80338ee: eb0b 2b10 add.w fp, fp, r0, lsr #8 + 80338f2: f3cb 2bc4 ubfx fp, fp, #11, #5 + 80338f6: ea4b 0101 orr.w r1, fp, r1 + 80338fa: f102 0b01 add.w fp, r2, #1 + 80338fe: eb0b 2212 add.w r2, fp, r2, lsr #8 + 8033902: 0952 lsrs r2, r2, #5 + 8033904: f402 62fc and.w r2, r2, #2016 ; 0x7e0 + 8033908: 4311 orrs r1, r2 + 803390a: f8ae 1000 strh.w r1, [lr] + 803390e: e79f b.n 8033850 <_ZN8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff+0x450> + 8033910: b013 add sp, #76 ; 0x4c + 8033912: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 8033916: bf00 nop + 8033918: 2001e73c .word 0x2001e73c + +0803391c <_ZNK8touchgfx8LCD16bpp17DecompressorL8_L416blendPixelRGB565Ettii>: + 803391c: b570 push {r4, r5, r6, lr} + 803391e: 1208 asrs r0, r1, #8 + 8033920: f8bd 5010 ldrh.w r5, [sp, #16] + 8033924: b29e uxth r6, r3 + 8033926: 1213 asrs r3, r2, #8 + 8033928: f000 00f8 and.w r0, r0, #248 ; 0xf8 + 803392c: 10cc asrs r4, r1, #3 + 803392e: f003 03f8 and.w r3, r3, #248 ; 0xf8 + 8033932: 00c9 lsls r1, r1, #3 + 8033934: fb10 f006 smulbb r0, r0, r6 + 8033938: f004 04fc and.w r4, r4, #252 ; 0xfc + 803393c: fb13 f305 smulbb r3, r3, r5 + 8033940: fb14 f406 smulbb r4, r4, r6 + 8033944: 4418 add r0, r3 + 8033946: 10d3 asrs r3, r2, #3 + 8033948: 00d2 lsls r2, r2, #3 + 803394a: f003 03fc and.w r3, r3, #252 ; 0xfc + 803394e: b280 uxth r0, r0 + 8033950: b2d2 uxtb r2, r2 + 8033952: fb13 f305 smulbb r3, r3, r5 + 8033956: fb12 f205 smulbb r2, r2, r5 + 803395a: 441c add r4, r3 + 803395c: b2cb uxtb r3, r1 + 803395e: fb13 f306 smulbb r3, r3, r6 + 8033962: b2a4 uxth r4, r4 + 8033964: 4413 add r3, r2 + 8033966: 1c42 adds r2, r0, #1 + 8033968: b29b uxth r3, r3 + 803396a: eb02 2010 add.w r0, r2, r0, lsr #8 + 803396e: f400 4278 and.w r2, r0, #63488 ; 0xf800 + 8033972: 1c58 adds r0, r3, #1 + 8033974: eb00 2013 add.w r0, r0, r3, lsr #8 + 8033978: f3c0 20c4 ubfx r0, r0, #11, #5 + 803397c: 4310 orrs r0, r2 + 803397e: 1c62 adds r2, r4, #1 + 8033980: eb02 2414 add.w r4, r2, r4, lsr #8 + 8033984: 0964 lsrs r4, r4, #5 + 8033986: f404 64fc and.w r4, r4, #2016 ; 0x7e0 + 803398a: 4320 orrs r0, r4 + 803398c: bd70 pop {r4, r5, r6, pc} + ... + +08033990 <_ZN8touchgfx8LCD16bpp17DecompressorL8_L414blitCopyRGB565EPKhS3_RKNS_4RectES6_h>: + 8033990: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8033994: b08f sub sp, #60 ; 0x3c + 8033996: 461c mov r4, r3 + 8033998: 460d mov r5, r1 + 803399a: 4616 mov r6, r2 + 803399c: f89d 7064 ldrb.w r7, [sp, #100] ; 0x64 + 80339a0: 9004 str r0, [sp, #16] + 80339a2: 9b18 ldr r3, [sp, #96] ; 0x60 + 80339a4: 2f00 cmp r7, #0 + 80339a6: f000 80f6 beq.w 8033b96 <_ZN8touchgfx8LCD16bpp17DecompressorL8_L414blitCopyRGB565EPKhS3_RKNS_4RectES6_h+0x206> + 80339aa: 6820 ldr r0, [r4, #0] + 80339ac: aa0a add r2, sp, #40 ; 0x28 + 80339ae: 6861 ldr r1, [r4, #4] + 80339b0: f04f 0802 mov.w r8, #2 + 80339b4: 3604 adds r6, #4 + 80339b6: c203 stmia r2!, {r0, r1} + 80339b8: 6818 ldr r0, [r3, #0] + 80339ba: aa0c add r2, sp, #48 ; 0x30 + 80339bc: 6859 ldr r1, [r3, #4] + 80339be: c203 stmia r2!, {r0, r1} + 80339c0: a80a add r0, sp, #40 ; 0x28 + 80339c2: f7ef fd79 bl 80234b8 <_ZN8touchgfx21DisplayTransformation29transformDisplayToFrameBufferERNS_4RectE> + 80339c6: 4621 mov r1, r4 + 80339c8: a80c add r0, sp, #48 ; 0x30 + 80339ca: f7ef fd9d bl 8023508 <_ZN8touchgfx21DisplayTransformation29transformDisplayToFrameBufferERNS_4RectERKS1_> + 80339ce: f9bd 2030 ldrsh.w r2, [sp, #48] ; 0x30 + 80339d2: f9bd b036 ldrsh.w fp, [sp, #54] ; 0x36 + 80339d6: f002 0301 and.w r3, r2, #1 + 80339da: f9bd 9034 ldrsh.w r9, [sp, #52] ; 0x34 + 80339de: 9306 str r3, [sp, #24] + 80339e0: f9bd 302c ldrsh.w r3, [sp, #44] ; 0x2c + 80339e4: f003 0101 and.w r1, r3, #1 + 80339e8: 9105 str r1, [sp, #20] + 80339ea: 9805 ldr r0, [sp, #20] + 80339ec: f9bd 1032 ldrsh.w r1, [sp, #50] ; 0x32 + 80339f0: 4403 add r3, r0 + 80339f2: fb01 2303 mla r3, r1, r3, r2 + 80339f6: fb93 f3f8 sdiv r3, r3, r8 + 80339fa: 441d add r5, r3 + 80339fc: f8bd 3028 ldrh.w r3, [sp, #40] ; 0x28 + 8033a00: 441a add r2, r3 + 8033a02: f8bd 302a ldrh.w r3, [sp, #42] ; 0x2a + 8033a06: 4419 add r1, r3 + 8033a08: 4b64 ldr r3, [pc, #400] ; (8033b9c <_ZN8touchgfx8LCD16bpp17DecompressorL8_L414blitCopyRGB565EPKhS3_RKNS_4RectES6_h+0x20c>) + 8033a0a: f8ad 2030 strh.w r2, [sp, #48] ; 0x30 + 8033a0e: 6818 ldr r0, [r3, #0] + 8033a10: f8ad 1032 strh.w r1, [sp, #50] ; 0x32 + 8033a14: 6803 ldr r3, [r0, #0] + 8033a16: 6a9b ldr r3, [r3, #40] ; 0x28 + 8033a18: 4798 blx r3 + 8033a1a: 4a61 ldr r2, [pc, #388] ; (8033ba0 <_ZN8touchgfx8LCD16bpp17DecompressorL8_L414blitCopyRGB565EPKhS3_RKNS_4RectES6_h+0x210>) + 8033a1c: f9bd 4032 ldrsh.w r4, [sp, #50] ; 0x32 + 8033a20: 2fff cmp r7, #255 ; 0xff + 8033a22: 8813 ldrh r3, [r2, #0] + 8033a24: 4611 mov r1, r2 + 8033a26: f9bd a030 ldrsh.w sl, [sp, #48] ; 0x30 + 8033a2a: fb03 fb0b mul.w fp, r3, fp + 8033a2e: fb03 a404 mla r4, r3, r4, sl + 8033a32: eb00 0444 add.w r4, r0, r4, lsl #1 + 8033a36: d06b beq.n 8033b10 <_ZN8touchgfx8LCD16bpp17DecompressorL8_L414blitCopyRGB565EPKhS3_RKNS_4RectES6_h+0x180> + 8033a38: f1c7 03ff rsb r3, r7, #255 ; 0xff + 8033a3c: f8cd 8024 str.w r8, [sp, #36] ; 0x24 + 8033a40: 9303 str r3, [sp, #12] + 8033a42: eb04 034b add.w r3, r4, fp, lsl #1 + 8033a46: e9cd 3207 strd r3, r2, [sp, #28] + 8033a4a: 9b07 ldr r3, [sp, #28] + 8033a4c: 42a3 cmp r3, r4 + 8033a4e: f240 809d bls.w 8033b8c <_ZN8touchgfx8LCD16bpp17DecompressorL8_L414blitCopyRGB565EPKhS3_RKNS_4RectES6_h+0x1fc> + 8033a52: 9b06 ldr r3, [sp, #24] + 8033a54: 2b00 cmp r3, #0 + 8033a56: d039 beq.n 8033acc <_ZN8touchgfx8LCD16bpp17DecompressorL8_L414blitCopyRGB565EPKhS3_RKNS_4RectES6_h+0x13c> + 8033a58: 782b ldrb r3, [r5, #0] + 8033a5a: f105 0801 add.w r8, r5, #1 + 8033a5e: f109 3bff add.w fp, r9, #4294967295 + 8033a62: 8822 ldrh r2, [r4, #0] + 8033a64: f003 030f and.w r3, r3, #15 + 8033a68: 9804 ldr r0, [sp, #16] + 8033a6a: f836 1013 ldrh.w r1, [r6, r3, lsl #1] + 8033a6e: 9b03 ldr r3, [sp, #12] + 8033a70: 9300 str r3, [sp, #0] + 8033a72: 463b mov r3, r7 + 8033a74: f7ff ff52 bl 803391c <_ZNK8touchgfx8LCD16bpp17DecompressorL8_L416blendPixelRGB565Ettii> + 8033a78: f824 0b02 strh.w r0, [r4], #2 + 8033a7c: f1bb 0f01 cmp.w fp, #1 + 8033a80: 46a2 mov sl, r4 + 8033a82: f104 0404 add.w r4, r4, #4 + 8033a86: dd24 ble.n 8033ad2 <_ZN8touchgfx8LCD16bpp17DecompressorL8_L414blitCopyRGB565EPKhS3_RKNS_4RectES6_h+0x142> + 8033a88: f898 3000 ldrb.w r3, [r8] + 8033a8c: f1ab 0b02 sub.w fp, fp, #2 + 8033a90: f834 2c04 ldrh.w r2, [r4, #-4] + 8033a94: 091b lsrs r3, r3, #4 + 8033a96: 9804 ldr r0, [sp, #16] + 8033a98: f836 1013 ldrh.w r1, [r6, r3, lsl #1] + 8033a9c: 9b03 ldr r3, [sp, #12] + 8033a9e: 9300 str r3, [sp, #0] + 8033aa0: 463b mov r3, r7 + 8033aa2: f7ff ff3b bl 803391c <_ZNK8touchgfx8LCD16bpp17DecompressorL8_L416blendPixelRGB565Ettii> + 8033aa6: f824 0c04 strh.w r0, [r4, #-4] + 8033aaa: f818 3b01 ldrb.w r3, [r8], #1 + 8033aae: f834 2c02 ldrh.w r2, [r4, #-2] + 8033ab2: f003 030f and.w r3, r3, #15 + 8033ab6: 9804 ldr r0, [sp, #16] + 8033ab8: f836 1013 ldrh.w r1, [r6, r3, lsl #1] + 8033abc: 9b03 ldr r3, [sp, #12] + 8033abe: 9300 str r3, [sp, #0] + 8033ac0: 463b mov r3, r7 + 8033ac2: f7ff ff2b bl 803391c <_ZNK8touchgfx8LCD16bpp17DecompressorL8_L416blendPixelRGB565Ettii> + 8033ac6: f824 0c02 strh.w r0, [r4, #-2] + 8033aca: e7d7 b.n 8033a7c <_ZN8touchgfx8LCD16bpp17DecompressorL8_L414blitCopyRGB565EPKhS3_RKNS_4RectES6_h+0xec> + 8033acc: 46a8 mov r8, r5 + 8033ace: 46cb mov fp, r9 + 8033ad0: e7d4 b.n 8033a7c <_ZN8touchgfx8LCD16bpp17DecompressorL8_L414blitCopyRGB565EPKhS3_RKNS_4RectES6_h+0xec> + 8033ad2: d10e bne.n 8033af2 <_ZN8touchgfx8LCD16bpp17DecompressorL8_L414blitCopyRGB565EPKhS3_RKNS_4RectES6_h+0x162> + 8033ad4: f898 3000 ldrb.w r3, [r8] + 8033ad8: f8ba 2000 ldrh.w r2, [sl] + 8033adc: 091b lsrs r3, r3, #4 + 8033ade: 9804 ldr r0, [sp, #16] + 8033ae0: f836 1013 ldrh.w r1, [r6, r3, lsl #1] + 8033ae4: 9b03 ldr r3, [sp, #12] + 8033ae6: 9300 str r3, [sp, #0] + 8033ae8: 463b mov r3, r7 + 8033aea: f7ff ff17 bl 803391c <_ZNK8touchgfx8LCD16bpp17DecompressorL8_L416blendPixelRGB565Ettii> + 8033aee: f82a 0b02 strh.w r0, [sl], #2 + 8033af2: 9b08 ldr r3, [sp, #32] + 8033af4: 9a05 ldr r2, [sp, #20] + 8033af6: 881c ldrh r4, [r3, #0] + 8033af8: f9bd 302c ldrsh.w r3, [sp, #44] ; 0x2c + 8033afc: eba4 0409 sub.w r4, r4, r9 + 8033b00: 4413 add r3, r2 + 8033b02: 9a09 ldr r2, [sp, #36] ; 0x24 + 8033b04: eb0a 0444 add.w r4, sl, r4, lsl #1 + 8033b08: fb93 f3f2 sdiv r3, r3, r2 + 8033b0c: 441d add r5, r3 + 8033b0e: e79c b.n 8033a4a <_ZN8touchgfx8LCD16bpp17DecompressorL8_L414blitCopyRGB565EPKhS3_RKNS_4RectES6_h+0xba> + 8033b10: eb04 0b4b add.w fp, r4, fp, lsl #1 + 8033b14: 45a3 cmp fp, r4 + 8033b16: d939 bls.n 8033b8c <_ZN8touchgfx8LCD16bpp17DecompressorL8_L414blitCopyRGB565EPKhS3_RKNS_4RectES6_h+0x1fc> + 8033b18: 9b06 ldr r3, [sp, #24] + 8033b1a: b1fb cbz r3, 8033b5c <_ZN8touchgfx8LCD16bpp17DecompressorL8_L414blitCopyRGB565EPKhS3_RKNS_4RectES6_h+0x1cc> + 8033b1c: 782b ldrb r3, [r5, #0] + 8033b1e: 1c6a adds r2, r5, #1 + 8033b20: f109 30ff add.w r0, r9, #4294967295 + 8033b24: 3402 adds r4, #2 + 8033b26: f003 030f and.w r3, r3, #15 + 8033b2a: f836 3013 ldrh.w r3, [r6, r3, lsl #1] + 8033b2e: f824 3c02 strh.w r3, [r4, #-2] + 8033b32: 2801 cmp r0, #1 + 8033b34: 4623 mov r3, r4 + 8033b36: f104 0404 add.w r4, r4, #4 + 8033b3a: dd12 ble.n 8033b62 <_ZN8touchgfx8LCD16bpp17DecompressorL8_L414blitCopyRGB565EPKhS3_RKNS_4RectES6_h+0x1d2> + 8033b3c: 7813 ldrb r3, [r2, #0] + 8033b3e: 3802 subs r0, #2 + 8033b40: 091b lsrs r3, r3, #4 + 8033b42: f836 3013 ldrh.w r3, [r6, r3, lsl #1] + 8033b46: f824 3c04 strh.w r3, [r4, #-4] + 8033b4a: f812 3b01 ldrb.w r3, [r2], #1 + 8033b4e: f003 030f and.w r3, r3, #15 + 8033b52: f836 3013 ldrh.w r3, [r6, r3, lsl #1] + 8033b56: f824 3c02 strh.w r3, [r4, #-2] + 8033b5a: e7ea b.n 8033b32 <_ZN8touchgfx8LCD16bpp17DecompressorL8_L414blitCopyRGB565EPKhS3_RKNS_4RectES6_h+0x1a2> + 8033b5c: 462a mov r2, r5 + 8033b5e: 4648 mov r0, r9 + 8033b60: e7e7 b.n 8033b32 <_ZN8touchgfx8LCD16bpp17DecompressorL8_L414blitCopyRGB565EPKhS3_RKNS_4RectES6_h+0x1a2> + 8033b62: d106 bne.n 8033b72 <_ZN8touchgfx8LCD16bpp17DecompressorL8_L414blitCopyRGB565EPKhS3_RKNS_4RectES6_h+0x1e2> + 8033b64: 7812 ldrb r2, [r2, #0] + 8033b66: 3302 adds r3, #2 + 8033b68: 0912 lsrs r2, r2, #4 + 8033b6a: f836 2012 ldrh.w r2, [r6, r2, lsl #1] + 8033b6e: f823 2c02 strh.w r2, [r3, #-2] + 8033b72: 880c ldrh r4, [r1, #0] + 8033b74: 9a05 ldr r2, [sp, #20] + 8033b76: eba4 0409 sub.w r4, r4, r9 + 8033b7a: eb03 0444 add.w r4, r3, r4, lsl #1 + 8033b7e: f9bd 302c ldrsh.w r3, [sp, #44] ; 0x2c + 8033b82: 4413 add r3, r2 + 8033b84: fb93 f3f8 sdiv r3, r3, r8 + 8033b88: 441d add r5, r3 + 8033b8a: e7c3 b.n 8033b14 <_ZN8touchgfx8LCD16bpp17DecompressorL8_L414blitCopyRGB565EPKhS3_RKNS_4RectES6_h+0x184> + 8033b8c: 4b03 ldr r3, [pc, #12] ; (8033b9c <_ZN8touchgfx8LCD16bpp17DecompressorL8_L414blitCopyRGB565EPKhS3_RKNS_4RectES6_h+0x20c>) + 8033b8e: 6818 ldr r0, [r3, #0] + 8033b90: 6803 ldr r3, [r0, #0] + 8033b92: 6adb ldr r3, [r3, #44] ; 0x2c + 8033b94: 4798 blx r3 + 8033b96: b00f add sp, #60 ; 0x3c + 8033b98: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 8033b9c: 2001e734 .word 0x2001e734 + 8033ba0: 2001e72e .word 0x2001e72e + +08033ba4 <_ZNK8touchgfx8LCD16bpp17DecompressorL8_L418blendPixelARGB8888Emtih>: + 8033ba4: b5f0 push {r4, r5, r6, r7, lr} + 8033ba6: f89d 5014 ldrb.w r5, [sp, #20] + 8033baa: 0a0f lsrs r7, r1, #8 + 8033bac: 2dff cmp r5, #255 ; 0xff + 8033bae: d10c bne.n 8033bca <_ZNK8touchgfx8LCD16bpp17DecompressorL8_L418blendPixelARGB8888Emtih+0x26> + 8033bb0: 2bff cmp r3, #255 ; 0xff + 8033bb2: d10a bne.n 8033bca <_ZNK8touchgfx8LCD16bpp17DecompressorL8_L418blendPixelARGB8888Emtih+0x26> + 8033bb4: 0948 lsrs r0, r1, #5 + 8033bb6: 4b25 ldr r3, [pc, #148] ; (8033c4c <_ZNK8touchgfx8LCD16bpp17DecompressorL8_L418blendPixelARGB8888Emtih+0xa8>) + 8033bb8: f3c1 01c4 ubfx r1, r1, #3, #5 + 8033bbc: f400 60fc and.w r0, r0, #2016 ; 0x7e0 + 8033bc0: 403b ands r3, r7 + 8033bc2: 4318 orrs r0, r3 + 8033bc4: 4308 orrs r0, r1 + 8033bc6: b280 uxth r0, r0 + 8033bc8: bdf0 pop {r4, r5, r6, r7, pc} + 8033bca: fb15 f503 smulbb r5, r5, r3 + 8033bce: 1214 asrs r4, r2, #8 + 8033bd0: 10d6 asrs r6, r2, #3 + 8033bd2: b2ab uxth r3, r5 + 8033bd4: f004 04f8 and.w r4, r4, #248 ; 0xf8 + 8033bd8: 00d0 lsls r0, r2, #3 + 8033bda: f3c1 4207 ubfx r2, r1, #16, #8 + 8033bde: 1c5d adds r5, r3, #1 + 8033be0: ea44 1454 orr.w r4, r4, r4, lsr #5 + 8033be4: b2c0 uxtb r0, r0 + 8033be6: f006 06fc and.w r6, r6, #252 ; 0xfc + 8033bea: eb05 2513 add.w r5, r5, r3, lsr #8 + 8033bee: ea46 1696 orr.w r6, r6, r6, lsr #6 + 8033bf2: f3c5 2507 ubfx r5, r5, #8, #8 + 8033bf6: fa1f fc85 uxth.w ip, r5 + 8033bfa: 43ed mvns r5, r5 + 8033bfc: fb12 f20c smulbb r2, r2, ip + 8033c00: b2eb uxtb r3, r5 + 8033c02: b2fd uxtb r5, r7 + 8033c04: fb04 2403 mla r4, r4, r3, r2 + 8033c08: ea40 1250 orr.w r2, r0, r0, lsr #5 + 8033c0c: fb15 f50c smulbb r5, r5, ip + 8033c10: b2c8 uxtb r0, r1 + 8033c12: b2a4 uxth r4, r4 + 8033c14: fb10 f00c smulbb r0, r0, ip + 8033c18: fb06 5503 mla r5, r6, r3, r5 + 8033c1c: fb02 0003 mla r0, r2, r3, r0 + 8033c20: b2ad uxth r5, r5 + 8033c22: b283 uxth r3, r0 + 8033c24: 1c60 adds r0, r4, #1 + 8033c26: eb00 2414 add.w r4, r0, r4, lsr #8 + 8033c2a: 1c58 adds r0, r3, #1 + 8033c2c: eb00 2013 add.w r0, r0, r3, lsr #8 + 8033c30: 1c6b adds r3, r5, #1 + 8033c32: f404 4478 and.w r4, r4, #63488 ; 0xf800 + 8033c36: eb03 2515 add.w r5, r3, r5, lsr #8 + 8033c3a: f3c0 20c4 ubfx r0, r0, #11, #5 + 8033c3e: 096d lsrs r5, r5, #5 + 8033c40: 4320 orrs r0, r4 + 8033c42: f405 65fc and.w r5, r5, #2016 ; 0x7e0 + 8033c46: 4328 orrs r0, r5 + 8033c48: e7be b.n 8033bc8 <_ZNK8touchgfx8LCD16bpp17DecompressorL8_L418blendPixelARGB8888Emtih+0x24> + 8033c4a: bf00 nop + 8033c4c: 00fff800 .word 0x00fff800 + +08033c50 <_ZN8touchgfx8LCD16bpp17DecompressorL8_L416blitCopyARGB8888EPKhS3_RKNS_4RectES6_h>: + 8033c50: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8033c54: 461c mov r4, r3 + 8033c56: b08d sub sp, #52 ; 0x34 + 8033c58: 460d mov r5, r1 + 8033c5a: 4616 mov r6, r2 + 8033c5c: 9b16 ldr r3, [sp, #88] ; 0x58 + 8033c5e: 4680 mov r8, r0 + 8033c60: 6861 ldr r1, [r4, #4] + 8033c62: aa08 add r2, sp, #32 + 8033c64: 6820 ldr r0, [r4, #0] + 8033c66: f04f 0a02 mov.w sl, #2 + 8033c6a: f89d 905c ldrb.w r9, [sp, #92] ; 0x5c + 8033c6e: 3604 adds r6, #4 + 8033c70: c203 stmia r2!, {r0, r1} + 8033c72: 6818 ldr r0, [r3, #0] + 8033c74: aa0a add r2, sp, #40 ; 0x28 + 8033c76: 6859 ldr r1, [r3, #4] + 8033c78: c203 stmia r2!, {r0, r1} + 8033c7a: a808 add r0, sp, #32 + 8033c7c: f7ef fc1c bl 80234b8 <_ZN8touchgfx21DisplayTransformation29transformDisplayToFrameBufferERNS_4RectE> + 8033c80: 4621 mov r1, r4 + 8033c82: a80a add r0, sp, #40 ; 0x28 + 8033c84: f7ef fc40 bl 8023508 <_ZN8touchgfx21DisplayTransformation29transformDisplayToFrameBufferERNS_4RectERKS1_> + 8033c88: f9bd 2028 ldrsh.w r2, [sp, #40] ; 0x28 + 8033c8c: f9bd 702e ldrsh.w r7, [sp, #46] ; 0x2e + 8033c90: f002 0301 and.w r3, r2, #1 + 8033c94: f9bd b02c ldrsh.w fp, [sp, #44] ; 0x2c + 8033c98: 9303 str r3, [sp, #12] + 8033c9a: f9bd 3024 ldrsh.w r3, [sp, #36] ; 0x24 + 8033c9e: f003 0101 and.w r1, r3, #1 + 8033ca2: 9102 str r1, [sp, #8] + 8033ca4: 9802 ldr r0, [sp, #8] + 8033ca6: f9bd 102a ldrsh.w r1, [sp, #42] ; 0x2a + 8033caa: 4403 add r3, r0 + 8033cac: fb01 2303 mla r3, r1, r3, r2 + 8033cb0: fb93 f3fa sdiv r3, r3, sl + 8033cb4: 441d add r5, r3 + 8033cb6: f8bd 3020 ldrh.w r3, [sp, #32] + 8033cba: 441a add r2, r3 + 8033cbc: f8bd 3022 ldrh.w r3, [sp, #34] ; 0x22 + 8033cc0: f8ad 2028 strh.w r2, [sp, #40] ; 0x28 + 8033cc4: 4419 add r1, r3 + 8033cc6: 4a3e ldr r2, [pc, #248] ; (8033dc0 <_ZN8touchgfx8LCD16bpp17DecompressorL8_L416blitCopyARGB8888EPKhS3_RKNS_4RectES6_h+0x170>) + 8033cc8: f8ad 102a strh.w r1, [sp, #42] ; 0x2a + 8033ccc: 6810 ldr r0, [r2, #0] + 8033cce: 9205 str r2, [sp, #20] + 8033cd0: 6803 ldr r3, [r0, #0] + 8033cd2: 6a9b ldr r3, [r3, #40] ; 0x28 + 8033cd4: 4798 blx r3 + 8033cd6: 4b3b ldr r3, [pc, #236] ; (8033dc4 <_ZN8touchgfx8LCD16bpp17DecompressorL8_L416blitCopyARGB8888EPKhS3_RKNS_4RectES6_h+0x174>) + 8033cd8: f9bd 402a ldrsh.w r4, [sp, #42] ; 0x2a + 8033cdc: 8819 ldrh r1, [r3, #0] + 8033cde: f9bd c028 ldrsh.w ip, [sp, #40] ; 0x28 + 8033ce2: 434f muls r7, r1 + 8033ce4: fb01 c404 mla r4, r1, r4, ip + 8033ce8: eb00 0444 add.w r4, r0, r4, lsl #1 + 8033cec: eb04 0247 add.w r2, r4, r7, lsl #1 + 8033cf0: e9cd 3a06 strd r3, sl, [sp, #24] + 8033cf4: 9204 str r2, [sp, #16] + 8033cf6: 9b04 ldr r3, [sp, #16] + 8033cf8: 429c cmp r4, r3 + 8033cfa: d258 bcs.n 8033dae <_ZN8touchgfx8LCD16bpp17DecompressorL8_L416blitCopyARGB8888EPKhS3_RKNS_4RectES6_h+0x15e> + 8033cfc: 9b03 ldr r3, [sp, #12] + 8033cfe: 2b00 cmp r3, #0 + 8033d00: d034 beq.n 8033d6c <_ZN8touchgfx8LCD16bpp17DecompressorL8_L416blitCopyARGB8888EPKhS3_RKNS_4RectES6_h+0x11c> + 8033d02: 782b ldrb r3, [r5, #0] + 8033d04: 1c6f adds r7, r5, #1 + 8033d06: f003 030f and.w r3, r3, #15 + 8033d0a: f856 1023 ldr.w r1, [r6, r3, lsl #2] + 8033d0e: 0e0b lsrs r3, r1, #24 + 8033d10: d006 beq.n 8033d20 <_ZN8touchgfx8LCD16bpp17DecompressorL8_L416blitCopyARGB8888EPKhS3_RKNS_4RectES6_h+0xd0> + 8033d12: 8822 ldrh r2, [r4, #0] + 8033d14: 4640 mov r0, r8 + 8033d16: 9300 str r3, [sp, #0] + 8033d18: 464b mov r3, r9 + 8033d1a: f7ff ff43 bl 8033ba4 <_ZNK8touchgfx8LCD16bpp17DecompressorL8_L418blendPixelARGB8888Emtih> + 8033d1e: 8020 strh r0, [r4, #0] + 8033d20: 3402 adds r4, #2 + 8033d22: f10b 3aff add.w sl, fp, #4294967295 + 8033d26: f1ba 0f01 cmp.w sl, #1 + 8033d2a: dd22 ble.n 8033d72 <_ZN8touchgfx8LCD16bpp17DecompressorL8_L416blitCopyARGB8888EPKhS3_RKNS_4RectES6_h+0x122> + 8033d2c: 783b ldrb r3, [r7, #0] + 8033d2e: 091b lsrs r3, r3, #4 + 8033d30: f856 1023 ldr.w r1, [r6, r3, lsl #2] + 8033d34: 0e0b lsrs r3, r1, #24 + 8033d36: d006 beq.n 8033d46 <_ZN8touchgfx8LCD16bpp17DecompressorL8_L416blitCopyARGB8888EPKhS3_RKNS_4RectES6_h+0xf6> + 8033d38: 8822 ldrh r2, [r4, #0] + 8033d3a: 4640 mov r0, r8 + 8033d3c: 9300 str r3, [sp, #0] + 8033d3e: 464b mov r3, r9 + 8033d40: f7ff ff30 bl 8033ba4 <_ZNK8touchgfx8LCD16bpp17DecompressorL8_L418blendPixelARGB8888Emtih> + 8033d44: 8020 strh r0, [r4, #0] + 8033d46: f817 3b01 ldrb.w r3, [r7], #1 + 8033d4a: f003 030f and.w r3, r3, #15 + 8033d4e: f856 1023 ldr.w r1, [r6, r3, lsl #2] + 8033d52: 0e0b lsrs r3, r1, #24 + 8033d54: d006 beq.n 8033d64 <_ZN8touchgfx8LCD16bpp17DecompressorL8_L416blitCopyARGB8888EPKhS3_RKNS_4RectES6_h+0x114> + 8033d56: 8862 ldrh r2, [r4, #2] + 8033d58: 4640 mov r0, r8 + 8033d5a: 9300 str r3, [sp, #0] + 8033d5c: 464b mov r3, r9 + 8033d5e: f7ff ff21 bl 8033ba4 <_ZNK8touchgfx8LCD16bpp17DecompressorL8_L418blendPixelARGB8888Emtih> + 8033d62: 8060 strh r0, [r4, #2] + 8033d64: 3404 adds r4, #4 + 8033d66: f1aa 0a02 sub.w sl, sl, #2 + 8033d6a: e7dc b.n 8033d26 <_ZN8touchgfx8LCD16bpp17DecompressorL8_L416blitCopyARGB8888EPKhS3_RKNS_4RectES6_h+0xd6> + 8033d6c: 462f mov r7, r5 + 8033d6e: 46da mov sl, fp + 8033d70: e7d9 b.n 8033d26 <_ZN8touchgfx8LCD16bpp17DecompressorL8_L416blitCopyARGB8888EPKhS3_RKNS_4RectES6_h+0xd6> + 8033d72: d10d bne.n 8033d90 <_ZN8touchgfx8LCD16bpp17DecompressorL8_L416blitCopyARGB8888EPKhS3_RKNS_4RectES6_h+0x140> + 8033d74: 783b ldrb r3, [r7, #0] + 8033d76: 091b lsrs r3, r3, #4 + 8033d78: f856 1023 ldr.w r1, [r6, r3, lsl #2] + 8033d7c: 0e0b lsrs r3, r1, #24 + 8033d7e: d006 beq.n 8033d8e <_ZN8touchgfx8LCD16bpp17DecompressorL8_L416blitCopyARGB8888EPKhS3_RKNS_4RectES6_h+0x13e> + 8033d80: 8822 ldrh r2, [r4, #0] + 8033d82: 4640 mov r0, r8 + 8033d84: 9300 str r3, [sp, #0] + 8033d86: 464b mov r3, r9 + 8033d88: f7ff ff0c bl 8033ba4 <_ZNK8touchgfx8LCD16bpp17DecompressorL8_L418blendPixelARGB8888Emtih> + 8033d8c: 8020 strh r0, [r4, #0] + 8033d8e: 3402 adds r4, #2 + 8033d90: 9b06 ldr r3, [sp, #24] + 8033d92: 9a02 ldr r2, [sp, #8] + 8033d94: 881b ldrh r3, [r3, #0] + 8033d96: eba3 030b sub.w r3, r3, fp + 8033d9a: eb04 0443 add.w r4, r4, r3, lsl #1 + 8033d9e: f9bd 3024 ldrsh.w r3, [sp, #36] ; 0x24 + 8033da2: 4413 add r3, r2 + 8033da4: 9a07 ldr r2, [sp, #28] + 8033da6: fb93 f3f2 sdiv r3, r3, r2 + 8033daa: 441d add r5, r3 + 8033dac: e7a3 b.n 8033cf6 <_ZN8touchgfx8LCD16bpp17DecompressorL8_L416blitCopyARGB8888EPKhS3_RKNS_4RectES6_h+0xa6> + 8033dae: 9b05 ldr r3, [sp, #20] + 8033db0: 6818 ldr r0, [r3, #0] + 8033db2: 6803 ldr r3, [r0, #0] + 8033db4: 6adb ldr r3, [r3, #44] ; 0x2c + 8033db6: 4798 blx r3 + 8033db8: b00d add sp, #52 ; 0x34 + 8033dba: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 8033dbe: bf00 nop + 8033dc0: 2001e734 .word 0x2001e734 + 8033dc4: 2001e72e .word 0x2001e72e + +08033dc8 <_ZNK8touchgfx8LCD16bpp17DecompressorL8_L416blendPixelRGB888EPKhthh>: + 8033dc8: b570 push {r4, r5, r6, lr} + 8033dca: 1214 asrs r4, r2, #8 + 8033dcc: 788d ldrb r5, [r1, #2] + 8033dce: f89d 6010 ldrb.w r6, [sp, #16] + 8033dd2: 10d0 asrs r0, r2, #3 + 8033dd4: f004 04f8 and.w r4, r4, #248 ; 0xf8 + 8033dd8: 00d2 lsls r2, r2, #3 + 8033dda: fb15 f503 smulbb r5, r5, r3 + 8033dde: f000 00fc and.w r0, r0, #252 ; 0xfc + 8033de2: ea44 1454 orr.w r4, r4, r4, lsr #5 + 8033de6: b2d2 uxtb r2, r2 + 8033de8: fb04 5506 mla r5, r4, r6, r5 + 8033dec: 784c ldrb r4, [r1, #1] + 8033dee: 7809 ldrb r1, [r1, #0] + 8033df0: ea40 1090 orr.w r0, r0, r0, lsr #6 + 8033df4: fb14 f403 smulbb r4, r4, r3 + 8033df8: ea42 1252 orr.w r2, r2, r2, lsr #5 + 8033dfc: fb11 f303 smulbb r3, r1, r3 + 8033e00: b2ad uxth r5, r5 + 8033e02: fb00 4406 mla r4, r0, r6, r4 + 8033e06: fb02 3306 mla r3, r2, r6, r3 + 8033e0a: 1c68 adds r0, r5, #1 + 8033e0c: b2a4 uxth r4, r4 + 8033e0e: b29b uxth r3, r3 + 8033e10: eb00 2515 add.w r5, r0, r5, lsr #8 + 8033e14: 1c62 adds r2, r4, #1 + 8033e16: 1c58 adds r0, r3, #1 + 8033e18: eb02 2414 add.w r4, r2, r4, lsr #8 + 8033e1c: f405 4578 and.w r5, r5, #63488 ; 0xf800 + 8033e20: eb00 2013 add.w r0, r0, r3, lsr #8 + 8033e24: 0964 lsrs r4, r4, #5 + 8033e26: f3c0 20c4 ubfx r0, r0, #11, #5 + 8033e2a: f404 64fc and.w r4, r4, #2016 ; 0x7e0 + 8033e2e: 4328 orrs r0, r5 + 8033e30: 4320 orrs r0, r4 + 8033e32: bd70 pop {r4, r5, r6, pc} + +08033e34 <_ZN8touchgfx8LCD16bpp17DecompressorL8_L414blitCopyRGB888EPKhS3_RKNS_4RectES6_h>: + 8033e34: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8033e38: b08f sub sp, #60 ; 0x3c + 8033e3a: 461c mov r4, r3 + 8033e3c: 4682 mov sl, r0 + 8033e3e: 460e mov r6, r1 + 8033e40: f89d 7064 ldrb.w r7, [sp, #100] ; 0x64 + 8033e44: 4615 mov r5, r2 + 8033e46: 9b18 ldr r3, [sp, #96] ; 0x60 + 8033e48: 2f00 cmp r7, #0 + 8033e4a: f000 8141 beq.w 80340d0 <_ZN8touchgfx8LCD16bpp17DecompressorL8_L414blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0x29c> + 8033e4e: 6820 ldr r0, [r4, #0] + 8033e50: aa0a add r2, sp, #40 ; 0x28 + 8033e52: 6861 ldr r1, [r4, #4] + 8033e54: f04f 0802 mov.w r8, #2 + 8033e58: 3504 adds r5, #4 + 8033e5a: c203 stmia r2!, {r0, r1} + 8033e5c: 6818 ldr r0, [r3, #0] + 8033e5e: aa0c add r2, sp, #48 ; 0x30 + 8033e60: 6859 ldr r1, [r3, #4] + 8033e62: c203 stmia r2!, {r0, r1} + 8033e64: a80a add r0, sp, #40 ; 0x28 + 8033e66: f7ef fb27 bl 80234b8 <_ZN8touchgfx21DisplayTransformation29transformDisplayToFrameBufferERNS_4RectE> + 8033e6a: 4621 mov r1, r4 + 8033e6c: a80c add r0, sp, #48 ; 0x30 + 8033e6e: f7ef fb4b bl 8023508 <_ZN8touchgfx21DisplayTransformation29transformDisplayToFrameBufferERNS_4RectERKS1_> + 8033e72: f9bd 2030 ldrsh.w r2, [sp, #48] ; 0x30 + 8033e76: f9bd b036 ldrsh.w fp, [sp, #54] ; 0x36 + 8033e7a: f002 0301 and.w r3, r2, #1 + 8033e7e: 9306 str r3, [sp, #24] + 8033e80: f9bd 302c ldrsh.w r3, [sp, #44] ; 0x2c + 8033e84: f003 0101 and.w r1, r3, #1 + 8033e88: 9105 str r1, [sp, #20] + 8033e8a: 9805 ldr r0, [sp, #20] + 8033e8c: f9bd 1032 ldrsh.w r1, [sp, #50] ; 0x32 + 8033e90: 4403 add r3, r0 + 8033e92: fb01 2303 mla r3, r1, r3, r2 + 8033e96: fb93 f3f8 sdiv r3, r3, r8 + 8033e9a: 441e add r6, r3 + 8033e9c: f8bd 3028 ldrh.w r3, [sp, #40] ; 0x28 + 8033ea0: 441a add r2, r3 + 8033ea2: f8bd 302a ldrh.w r3, [sp, #42] ; 0x2a + 8033ea6: 4419 add r1, r3 + 8033ea8: f9bd 3034 ldrsh.w r3, [sp, #52] ; 0x34 + 8033eac: f8ad 2030 strh.w r2, [sp, #48] ; 0x30 + 8033eb0: 9303 str r3, [sp, #12] + 8033eb2: 4b89 ldr r3, [pc, #548] ; (80340d8 <_ZN8touchgfx8LCD16bpp17DecompressorL8_L414blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0x2a4>) + 8033eb4: f8ad 1032 strh.w r1, [sp, #50] ; 0x32 + 8033eb8: 6818 ldr r0, [r3, #0] + 8033eba: 6803 ldr r3, [r0, #0] + 8033ebc: 6a9b ldr r3, [r3, #40] ; 0x28 + 8033ebe: 4798 blx r3 + 8033ec0: 4a86 ldr r2, [pc, #536] ; (80340dc <_ZN8touchgfx8LCD16bpp17DecompressorL8_L414blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0x2a8>) + 8033ec2: f9bd 4032 ldrsh.w r4, [sp, #50] ; 0x32 + 8033ec6: 2fff cmp r7, #255 ; 0xff + 8033ec8: 8813 ldrh r3, [r2, #0] + 8033eca: 4694 mov ip, r2 + 8033ecc: f9bd 9030 ldrsh.w r9, [sp, #48] ; 0x30 + 8033ed0: fb03 9404 mla r4, r3, r4, r9 + 8033ed4: fb03 f30b mul.w r3, r3, fp + 8033ed8: eb00 0444 add.w r4, r0, r4, lsl #1 + 8033edc: d071 beq.n 8033fc2 <_ZN8touchgfx8LCD16bpp17DecompressorL8_L414blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0x18e> + 8033ede: 43f9 mvns r1, r7 + 8033ee0: eb04 0343 add.w r3, r4, r3, lsl #1 + 8033ee4: f8cd 8024 str.w r8, [sp, #36] ; 0x24 + 8033ee8: b2c9 uxtb r1, r1 + 8033eea: e9cd 3207 strd r3, r2, [sp, #28] + 8033eee: 9104 str r1, [sp, #16] + 8033ef0: 9b07 ldr r3, [sp, #28] + 8033ef2: 42a3 cmp r3, r4 + 8033ef4: f240 80e7 bls.w 80340c6 <_ZN8touchgfx8LCD16bpp17DecompressorL8_L414blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0x292> + 8033ef8: 9b06 ldr r3, [sp, #24] + 8033efa: 2b00 cmp r3, #0 + 8033efc: d03d beq.n 8033f7a <_ZN8touchgfx8LCD16bpp17DecompressorL8_L414blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0x146> + 8033efe: 7831 ldrb r1, [r6, #0] + 8033f00: 4650 mov r0, sl + 8033f02: 9b04 ldr r3, [sp, #16] + 8033f04: f106 0801 add.w r8, r6, #1 + 8033f08: f001 010f and.w r1, r1, #15 + 8033f0c: 8822 ldrh r2, [r4, #0] + 8033f0e: 9300 str r3, [sp, #0] + 8033f10: 463b mov r3, r7 + 8033f12: eb01 0141 add.w r1, r1, r1, lsl #1 + 8033f16: 4429 add r1, r5 + 8033f18: f7ff ff56 bl 8033dc8 <_ZNK8touchgfx8LCD16bpp17DecompressorL8_L416blendPixelRGB888EPKhthh> + 8033f1c: 9b03 ldr r3, [sp, #12] + 8033f1e: f824 0b02 strh.w r0, [r4], #2 + 8033f22: f103 3bff add.w fp, r3, #4294967295 + 8033f26: f1bb 0f01 cmp.w fp, #1 + 8033f2a: 46a1 mov r9, r4 + 8033f2c: f104 0404 add.w r4, r4, #4 + 8033f30: dd27 ble.n 8033f82 <_ZN8touchgfx8LCD16bpp17DecompressorL8_L414blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0x14e> + 8033f32: f898 1000 ldrb.w r1, [r8] + 8033f36: 4650 mov r0, sl + 8033f38: 9b04 ldr r3, [sp, #16] + 8033f3a: f1ab 0b02 sub.w fp, fp, #2 + 8033f3e: 0909 lsrs r1, r1, #4 + 8033f40: f834 2c04 ldrh.w r2, [r4, #-4] + 8033f44: 9300 str r3, [sp, #0] + 8033f46: 463b mov r3, r7 + 8033f48: eb01 0141 add.w r1, r1, r1, lsl #1 + 8033f4c: 4429 add r1, r5 + 8033f4e: f7ff ff3b bl 8033dc8 <_ZNK8touchgfx8LCD16bpp17DecompressorL8_L416blendPixelRGB888EPKhthh> + 8033f52: f824 0c04 strh.w r0, [r4, #-4] + 8033f56: f818 1b01 ldrb.w r1, [r8], #1 + 8033f5a: 4650 mov r0, sl + 8033f5c: 9b04 ldr r3, [sp, #16] + 8033f5e: f001 010f and.w r1, r1, #15 + 8033f62: f834 2c02 ldrh.w r2, [r4, #-2] + 8033f66: 9300 str r3, [sp, #0] + 8033f68: 463b mov r3, r7 + 8033f6a: eb01 0141 add.w r1, r1, r1, lsl #1 + 8033f6e: 4429 add r1, r5 + 8033f70: f7ff ff2a bl 8033dc8 <_ZNK8touchgfx8LCD16bpp17DecompressorL8_L416blendPixelRGB888EPKhthh> + 8033f74: f824 0c02 strh.w r0, [r4, #-2] + 8033f78: e7d5 b.n 8033f26 <_ZN8touchgfx8LCD16bpp17DecompressorL8_L414blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0xf2> + 8033f7a: 46b0 mov r8, r6 + 8033f7c: f8dd b00c ldr.w fp, [sp, #12] + 8033f80: e7d1 b.n 8033f26 <_ZN8touchgfx8LCD16bpp17DecompressorL8_L414blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0xf2> + 8033f82: d10f bne.n 8033fa4 <_ZN8touchgfx8LCD16bpp17DecompressorL8_L414blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0x170> + 8033f84: f898 1000 ldrb.w r1, [r8] + 8033f88: 4650 mov r0, sl + 8033f8a: 9b04 ldr r3, [sp, #16] + 8033f8c: 0909 lsrs r1, r1, #4 + 8033f8e: f8b9 2000 ldrh.w r2, [r9] + 8033f92: 9300 str r3, [sp, #0] + 8033f94: 463b mov r3, r7 + 8033f96: eb01 0141 add.w r1, r1, r1, lsl #1 + 8033f9a: 4429 add r1, r5 + 8033f9c: f7ff ff14 bl 8033dc8 <_ZNK8touchgfx8LCD16bpp17DecompressorL8_L416blendPixelRGB888EPKhthh> + 8033fa0: f829 0b02 strh.w r0, [r9], #2 + 8033fa4: 9b08 ldr r3, [sp, #32] + 8033fa6: 9a05 ldr r2, [sp, #20] + 8033fa8: 881c ldrh r4, [r3, #0] + 8033faa: 9b03 ldr r3, [sp, #12] + 8033fac: 1ae4 subs r4, r4, r3 + 8033fae: f9bd 302c ldrsh.w r3, [sp, #44] ; 0x2c + 8033fb2: 4413 add r3, r2 + 8033fb4: 9a09 ldr r2, [sp, #36] ; 0x24 + 8033fb6: eb09 0444 add.w r4, r9, r4, lsl #1 + 8033fba: fb93 f3f2 sdiv r3, r3, r2 + 8033fbe: 441e add r6, r3 + 8033fc0: e796 b.n 8033ef0 <_ZN8touchgfx8LCD16bpp17DecompressorL8_L414blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0xbc> + 8033fc2: eb04 0343 add.w r3, r4, r3, lsl #1 + 8033fc6: 4f46 ldr r7, [pc, #280] ; (80340e0 <_ZN8touchgfx8LCD16bpp17DecompressorL8_L414blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0x2ac>) + 8033fc8: 42a3 cmp r3, r4 + 8033fca: d97c bls.n 80340c6 <_ZN8touchgfx8LCD16bpp17DecompressorL8_L414blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0x292> + 8033fcc: 9a06 ldr r2, [sp, #24] + 8033fce: 2a00 cmp r2, #0 + 8033fd0: d054 beq.n 803407c <_ZN8touchgfx8LCD16bpp17DecompressorL8_L414blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0x248> + 8033fd2: 7830 ldrb r0, [r6, #0] + 8033fd4: 1c71 adds r1, r6, #1 + 8033fd6: f000 000f and.w r0, r0, #15 + 8033fda: eb00 0040 add.w r0, r0, r0, lsl #1 + 8033fde: eb05 0e00 add.w lr, r5, r0 + 8033fe2: 5c28 ldrb r0, [r5, r0] + 8033fe4: f89e 2002 ldrb.w r2, [lr, #2] + 8033fe8: f89e e001 ldrb.w lr, [lr, #1] + 8033fec: ea07 2202 and.w r2, r7, r2, lsl #8 + 8033ff0: ea4f 0ece mov.w lr, lr, lsl #3 + 8033ff4: f40e 6efc and.w lr, lr, #2016 ; 0x7e0 + 8033ff8: ea42 020e orr.w r2, r2, lr + 8033ffc: ea42 02d0 orr.w r2, r2, r0, lsr #3 + 8034000: f824 2b02 strh.w r2, [r4], #2 + 8034004: 9a03 ldr r2, [sp, #12] + 8034006: f102 3eff add.w lr, r2, #4294967295 + 803400a: f1be 0f01 cmp.w lr, #1 + 803400e: 4620 mov r0, r4 + 8034010: f104 0404 add.w r4, r4, #4 + 8034014: dd36 ble.n 8034084 <_ZN8touchgfx8LCD16bpp17DecompressorL8_L414blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0x250> + 8034016: 7808 ldrb r0, [r1, #0] + 8034018: f1ae 0e02 sub.w lr, lr, #2 + 803401c: 0900 lsrs r0, r0, #4 + 803401e: eb00 0040 add.w r0, r0, r0, lsl #1 + 8034022: eb05 0a00 add.w sl, r5, r0 + 8034026: f89a 2001 ldrb.w r2, [sl, #1] + 803402a: f89a 9002 ldrb.w r9, [sl, #2] + 803402e: 00d2 lsls r2, r2, #3 + 8034030: ea07 2909 and.w r9, r7, r9, lsl #8 + 8034034: f402 62fc and.w r2, r2, #2016 ; 0x7e0 + 8034038: ea49 0202 orr.w r2, r9, r2 + 803403c: f815 9000 ldrb.w r9, [r5, r0] + 8034040: ea42 02d9 orr.w r2, r2, r9, lsr #3 + 8034044: f824 2c04 strh.w r2, [r4, #-4] + 8034048: f811 0b01 ldrb.w r0, [r1], #1 + 803404c: f000 000f and.w r0, r0, #15 + 8034050: eb00 0040 add.w r0, r0, r0, lsl #1 + 8034054: eb05 0a00 add.w sl, r5, r0 + 8034058: f89a 2001 ldrb.w r2, [sl, #1] + 803405c: f89a 9002 ldrb.w r9, [sl, #2] + 8034060: 00d2 lsls r2, r2, #3 + 8034062: ea07 2909 and.w r9, r7, r9, lsl #8 + 8034066: f402 62fc and.w r2, r2, #2016 ; 0x7e0 + 803406a: ea49 0202 orr.w r2, r9, r2 + 803406e: f815 9000 ldrb.w r9, [r5, r0] + 8034072: ea42 02d9 orr.w r2, r2, r9, lsr #3 + 8034076: f824 2c02 strh.w r2, [r4, #-2] + 803407a: e7c6 b.n 803400a <_ZN8touchgfx8LCD16bpp17DecompressorL8_L414blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0x1d6> + 803407c: 4631 mov r1, r6 + 803407e: f8dd e00c ldr.w lr, [sp, #12] + 8034082: e7c2 b.n 803400a <_ZN8touchgfx8LCD16bpp17DecompressorL8_L414blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0x1d6> + 8034084: d111 bne.n 80340aa <_ZN8touchgfx8LCD16bpp17DecompressorL8_L414blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0x276> + 8034086: 7809 ldrb r1, [r1, #0] + 8034088: 0909 lsrs r1, r1, #4 + 803408a: eb01 0141 add.w r1, r1, r1, lsl #1 + 803408e: 186c adds r4, r5, r1 + 8034090: 5c69 ldrb r1, [r5, r1] + 8034092: 78a2 ldrb r2, [r4, #2] + 8034094: 7864 ldrb r4, [r4, #1] + 8034096: ea07 2202 and.w r2, r7, r2, lsl #8 + 803409a: 00e4 lsls r4, r4, #3 + 803409c: f404 64fc and.w r4, r4, #2016 ; 0x7e0 + 80340a0: 4322 orrs r2, r4 + 80340a2: ea42 02d1 orr.w r2, r2, r1, lsr #3 + 80340a6: f820 2b02 strh.w r2, [r0], #2 + 80340aa: 9a03 ldr r2, [sp, #12] + 80340ac: f8bc 4000 ldrh.w r4, [ip] + 80340b0: 9905 ldr r1, [sp, #20] + 80340b2: 1aa4 subs r4, r4, r2 + 80340b4: f9bd 202c ldrsh.w r2, [sp, #44] ; 0x2c + 80340b8: 440a add r2, r1 + 80340ba: eb00 0444 add.w r4, r0, r4, lsl #1 + 80340be: fb92 f2f8 sdiv r2, r2, r8 + 80340c2: 4416 add r6, r2 + 80340c4: e780 b.n 8033fc8 <_ZN8touchgfx8LCD16bpp17DecompressorL8_L414blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0x194> + 80340c6: 4b04 ldr r3, [pc, #16] ; (80340d8 <_ZN8touchgfx8LCD16bpp17DecompressorL8_L414blitCopyRGB888EPKhS3_RKNS_4RectES6_h+0x2a4>) + 80340c8: 6818 ldr r0, [r3, #0] + 80340ca: 6803 ldr r3, [r0, #0] + 80340cc: 6adb ldr r3, [r3, #44] ; 0x2c + 80340ce: 4798 blx r3 + 80340d0: b00f add sp, #60 ; 0x3c + 80340d2: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 80340d6: bf00 nop + 80340d8: 2001e734 .word 0x2001e734 + 80340dc: 2001e72e .word 0x2001e72e + 80340e0: fffff800 .word 0xfffff800 + +080340e4 : + 80340e4: 4a20 ldr r2, [pc, #128] ; (8034168 ) + 80340e6: b530 push {r4, r5, lr} + 80340e8: 6813 ldr r3, [r2, #0] + 80340ea: f64f 74f0 movw r4, #65520 ; 0xfff0 + 80340ee: f24c 2540 movw r5, #49728 ; 0xc240 + 80340f2: f023 0301 bic.w r3, r3, #1 + 80340f6: 6013 str r3, [r2, #0] + 80340f8: 4b1c ldr r3, [pc, #112] ; (803416c ) + 80340fa: 681a ldr r2, [r3, #0] + 80340fc: 4022 ands r2, r4 + 80340fe: 42aa cmp r2, r5 + 8034100: d005 beq.n 803410e + 8034102: 681b ldr r3, [r3, #0] + 8034104: f24c 2270 movw r2, #49776 ; 0xc270 + 8034108: 4023 ands r3, r4 + 803410a: 4293 cmp r3, r2 + 803410c: d124 bne.n 8034158 + 803410e: 4b18 ldr r3, [pc, #96] ; (8034170 ) + 8034110: 681b ldr r3, [r3, #0] + 8034112: bb0b cbnz r3, 8034158 + 8034114: 4b17 ldr r3, [pc, #92] ; (8034174 ) + 8034116: 681a ldr r2, [r3, #0] + 8034118: f3c2 020b ubfx r2, r2, #0, #12 + 803411c: f5b2 6f8a cmp.w r2, #1104 ; 0x450 + 8034120: d00d beq.n 803413e + 8034122: 681a ldr r2, [r3, #0] + 8034124: f240 4483 movw r4, #1155 ; 0x483 + 8034128: f3c2 020b ubfx r2, r2, #0, #12 + 803412c: 42a2 cmp r2, r4 + 803412e: d006 beq.n 803413e + 8034130: 681b ldr r3, [r3, #0] + 8034132: f240 4285 movw r2, #1157 ; 0x485 + 8034136: f3c3 030b ubfx r3, r3, #0, #12 + 803413a: 4293 cmp r3, r2 + 803413c: d10c bne.n 8034158 + 803413e: 4b0e ldr r3, [pc, #56] ; (8034178 ) + 8034140: 2201 movs r2, #1 + 8034142: 601a str r2, [r3, #0] + 8034144: 681a ldr r2, [r3, #0] + 8034146: 2a00 cmp r2, #0 + 8034148: d1fc bne.n 8034144 + 803414a: 4b0c ldr r3, [pc, #48] ; (803417c ) + 803414c: 6018 str r0, [r3, #0] + 803414e: 6818 ldr r0, [r3, #0] + 8034150: 1a43 subs r3, r0, r1 + 8034152: 4258 negs r0, r3 + 8034154: 4158 adcs r0, r3 + 8034156: bd30 pop {r4, r5, pc} + 8034158: 4b09 ldr r3, [pc, #36] ; (8034180 ) + 803415a: 2201 movs r2, #1 + 803415c: 601a str r2, [r3, #0] + 803415e: 681a ldr r2, [r3, #0] + 8034160: 2a00 cmp r2, #0 + 8034162: d1fc bne.n 803415e + 8034164: 4b07 ldr r3, [pc, #28] ; (8034184 ) + 8034166: e7f1 b.n 803414c + 8034168: e0002000 .word 0xe0002000 + 803416c: e000ed00 .word 0xe000ed00 + 8034170: e0042000 .word 0xe0042000 + 8034174: 5c001000 .word 0x5c001000 + 8034178: 58024c08 .word 0x58024c08 + 803417c: 58024c00 .word 0x58024c00 + 8034180: 40023008 .word 0x40023008 + 8034184: 40023000 .word 0x40023000 + +08034188 <_ZN8touchgfx8Gestures21registerEventListenerERNS_15UIEventListenerE>: + 8034188: 6101 str r1, [r0, #16] + 803418a: 4770 bx lr + +0803418c <_ZN8touchgfx8Gestures4tickEv>: + 803418c: 7b83 ldrb r3, [r0, #14] + 803418e: b14b cbz r3, 80341a4 <_ZN8touchgfx8Gestures4tickEv+0x18> + 8034190: 8903 ldrh r3, [r0, #8] + 8034192: 3301 adds r3, #1 + 8034194: b29b uxth r3, r3 + 8034196: 2b07 cmp r3, #7 + 8034198: 8103 strh r3, [r0, #8] + 803419a: bf81 itttt hi + 803419c: 2300 movhi r3, #0 + 803419e: 8143 strhhi r3, [r0, #10] + 80341a0: 8183 strhhi r3, [r0, #12] + 80341a2: 7383 strbhi r3, [r0, #14] + 80341a4: 4770 bx lr + ... + +080341a8 <_ZN8touchgfx8Gestures17registerDragEventEtttt>: + 80341a8: e92d 41ff stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, lr} + 80341ac: 4698 mov r8, r3 + 80341ae: 8883 ldrh r3, [r0, #4] + 80341b0: 4604 mov r4, r0 + 80341b2: 4617 mov r7, r2 + 80341b4: f8ad 3006 strh.w r3, [sp, #6] + 80341b8: eba8 0303 sub.w r3, r8, r3 + 80341bc: 4a19 ldr r2, [pc, #100] ; (8034224 <_ZN8touchgfx8Gestures17registerDragEventEtttt+0x7c>) + 80341be: 460e mov r6, r1 + 80341c0: b21b sxth r3, r3 + 80341c2: 88c1 ldrh r1, [r0, #6] + 80341c4: 9200 str r2, [sp, #0] + 80341c6: 2000 movs r0, #0 + 80341c8: 2b00 cmp r3, #0 + 80341ca: 8aa2 ldrh r2, [r4, #20] + 80341cc: f8bd 5028 ldrh.w r5, [sp, #40] ; 0x28 + 80341d0: bfb8 it lt + 80341d2: 425b neglt r3, r3 + 80341d4: f88d 0004 strb.w r0, [sp, #4] + 80341d8: f8ad 1008 strh.w r1, [sp, #8] + 80341dc: b21b sxth r3, r3 + 80341de: f8ad 800a strh.w r8, [sp, #10] + 80341e2: f8ad 500c strh.w r5, [sp, #12] + 80341e6: 4293 cmp r3, r2 + 80341e8: dc07 bgt.n 80341fa <_ZN8touchgfx8Gestures17registerDragEventEtttt+0x52> + 80341ea: 1a69 subs r1, r5, r1 + 80341ec: b209 sxth r1, r1 + 80341ee: 2900 cmp r1, #0 + 80341f0: bfb8 it lt + 80341f2: 4249 neglt r1, r1 + 80341f4: b209 sxth r1, r1 + 80341f6: 428a cmp r2, r1 + 80341f8: da10 bge.n 803421c <_ZN8touchgfx8Gestures17registerDragEventEtttt+0x74> + 80341fa: 6920 ldr r0, [r4, #16] + 80341fc: 4669 mov r1, sp + 80341fe: eba8 0606 sub.w r6, r8, r6 + 8034202: 1bef subs r7, r5, r7 + 8034204: 6803 ldr r3, [r0, #0] + 8034206: 685b ldr r3, [r3, #4] + 8034208: 4798 blx r3 + 803420a: 2300 movs r3, #0 + 803420c: 2001 movs r0, #1 + 803420e: 8166 strh r6, [r4, #10] + 8034210: 8123 strh r3, [r4, #8] + 8034212: 81a7 strh r7, [r4, #12] + 8034214: f8a4 8004 strh.w r8, [r4, #4] + 8034218: 80e5 strh r5, [r4, #6] + 803421a: 73a0 strb r0, [r4, #14] + 803421c: b004 add sp, #16 + 803421e: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + 8034222: bf00 nop + 8034224: 0803c748 .word 0x0803c748 + +08034228 <_ZN8touchgfx8Gestures18registerClickEventENS_10ClickEvent14ClickEventTypeEtt>: + 8034228: b5f0 push {r4, r5, r6, r7, lr} + 803422a: 461e mov r6, r3 + 803422c: 1e4b subs r3, r1, #1 + 803422e: b085 sub sp, #20 + 8034230: 4604 mov r4, r0 + 8034232: 2b01 cmp r3, #1 + 8034234: 460d mov r5, r1 + 8034236: 4617 mov r7, r2 + 8034238: d84b bhi.n 80342d2 <_ZN8touchgfx8Gestures18registerClickEventENS_10ClickEvent14ClickEventTypeEtt+0xaa> + 803423a: f9b0 200a ldrsh.w r2, [r0, #10] + 803423e: 1cd3 adds r3, r2, #3 + 8034240: b29b uxth r3, r3 + 8034242: 2b06 cmp r3, #6 + 8034244: d916 bls.n 8034274 <_ZN8touchgfx8Gestures18registerClickEventENS_10ClickEvent14ClickEventTypeEtt+0x4c> + 8034246: f8df c0a0 ldr.w ip, [pc, #160] ; 80342e8 <_ZN8touchgfx8Gestures18registerClickEventENS_10ClickEvent14ClickEventTypeEtt+0xc0> + 803424a: f9b4 1004 ldrsh.w r1, [r4, #4] + 803424e: f8cd c004 str.w ip, [sp, #4] + 8034252: f04f 0c00 mov.w ip, #0 + 8034256: f9b4 3006 ldrsh.w r3, [r4, #6] + 803425a: 6900 ldr r0, [r0, #16] + 803425c: f8ad 100c strh.w r1, [sp, #12] + 8034260: a901 add r1, sp, #4 + 8034262: f88d c008 strb.w ip, [sp, #8] + 8034266: f8ad 200a strh.w r2, [sp, #10] + 803426a: f8ad 300e strh.w r3, [sp, #14] + 803426e: 6803 ldr r3, [r0, #0] + 8034270: 689b ldr r3, [r3, #8] + 8034272: 4798 blx r3 + 8034274: f9b4 200c ldrsh.w r2, [r4, #12] + 8034278: 1cd3 adds r3, r2, #3 + 803427a: b29b uxth r3, r3 + 803427c: 2b06 cmp r3, #6 + 803427e: d916 bls.n 80342ae <_ZN8touchgfx8Gestures18registerClickEventENS_10ClickEvent14ClickEventTypeEtt+0x86> + 8034280: f8df c064 ldr.w ip, [pc, #100] ; 80342e8 <_ZN8touchgfx8Gestures18registerClickEventENS_10ClickEvent14ClickEventTypeEtt+0xc0> + 8034284: f9b4 1004 ldrsh.w r1, [r4, #4] + 8034288: f8cd c004 str.w ip, [sp, #4] + 803428c: f04f 0c01 mov.w ip, #1 + 8034290: f9b4 3006 ldrsh.w r3, [r4, #6] + 8034294: 6920 ldr r0, [r4, #16] + 8034296: f8ad 100c strh.w r1, [sp, #12] + 803429a: a901 add r1, sp, #4 + 803429c: f88d c008 strb.w ip, [sp, #8] + 80342a0: f8ad 200a strh.w r2, [sp, #10] + 80342a4: f8ad 300e strh.w r3, [sp, #14] + 80342a8: 6803 ldr r3, [r0, #0] + 80342aa: 689b ldr r3, [r3, #8] + 80342ac: 4798 blx r3 + 80342ae: 4b0d ldr r3, [pc, #52] ; (80342e4 <_ZN8touchgfx8Gestures18registerClickEventENS_10ClickEvent14ClickEventTypeEtt+0xbc>) + 80342b0: a901 add r1, sp, #4 + 80342b2: 6920 ldr r0, [r4, #16] + 80342b4: 9301 str r3, [sp, #4] + 80342b6: 2300 movs r3, #0 + 80342b8: f88d 5008 strb.w r5, [sp, #8] + 80342bc: f8ad 700a strh.w r7, [sp, #10] + 80342c0: f8ad 600c strh.w r6, [sp, #12] + 80342c4: f8ad 300e strh.w r3, [sp, #14] + 80342c8: 6803 ldr r3, [r0, #0] + 80342ca: 681b ldr r3, [r3, #0] + 80342cc: 4798 blx r3 + 80342ce: b005 add sp, #20 + 80342d0: bdf0 pop {r4, r5, r6, r7, pc} + 80342d2: 2900 cmp r1, #0 + 80342d4: d1eb bne.n 80342ae <_ZN8touchgfx8Gestures18registerClickEventENS_10ClickEvent14ClickEventTypeEtt+0x86> + 80342d6: 80a2 strh r2, [r4, #4] + 80342d8: 80c6 strh r6, [r0, #6] + 80342da: 60a1 str r1, [r4, #8] + 80342dc: 81a1 strh r1, [r4, #12] + 80342de: 73a1 strb r1, [r4, #14] + 80342e0: e7e5 b.n 80342ae <_ZN8touchgfx8Gestures18registerClickEventENS_10ClickEvent14ClickEventTypeEtt+0x86> + 80342e2: bf00 nop + 80342e4: 0803c734 .word 0x0803c734 + 80342e8: 0803c75c .word 0x0803c75c + +080342ec <__aeabi_atexit>: + 80342ec: 460b mov r3, r1 + 80342ee: 4601 mov r1, r0 + 80342f0: 4618 mov r0, r3 + 80342f2: f000 b94d b.w 8034590 <__cxa_atexit> + +080342f6 <_ZdlPvj>: + 80342f6: f000 b812 b.w 803431e <_ZdlPv> + +080342fa <__cxa_guard_acquire>: + 80342fa: 6803 ldr r3, [r0, #0] + 80342fc: 07db lsls r3, r3, #31 + 80342fe: d406 bmi.n 803430e <__cxa_guard_acquire+0x14> + 8034300: 7843 ldrb r3, [r0, #1] + 8034302: b103 cbz r3, 8034306 <__cxa_guard_acquire+0xc> + 8034304: deff udf #255 ; 0xff + 8034306: 2301 movs r3, #1 + 8034308: 7043 strb r3, [r0, #1] + 803430a: 4618 mov r0, r3 + 803430c: 4770 bx lr + 803430e: 2000 movs r0, #0 + 8034310: 4770 bx lr + +08034312 <__cxa_guard_release>: + 8034312: 2301 movs r3, #1 + 8034314: 6003 str r3, [r0, #0] + 8034316: 4770 bx lr + +08034318 <__cxa_pure_virtual>: + 8034318: b508 push {r3, lr} + 803431a: f000 f80f bl 803433c <_ZSt9terminatev> + +0803431e <_ZdlPv>: + 803431e: f000 b845 b.w 80343ac + +08034322 <_ZN10__cxxabiv111__terminateEPFvvE>: + 8034322: b508 push {r3, lr} + 8034324: 4780 blx r0 + 8034326: f000 f80e bl 8034346 + ... + +0803432c <_ZSt13get_terminatev>: + 803432c: 4b02 ldr r3, [pc, #8] ; (8034338 <_ZSt13get_terminatev+0xc>) + 803432e: 6818 ldr r0, [r3, #0] + 8034330: f3bf 8f5b dmb ish + 8034334: 4770 bx lr + 8034336: bf00 nop + 8034338: 200000dc .word 0x200000dc + +0803433c <_ZSt9terminatev>: + 803433c: b508 push {r3, lr} + 803433e: f7ff fff5 bl 803432c <_ZSt13get_terminatev> + 8034342: f7ff ffee bl 8034322 <_ZN10__cxxabiv111__terminateEPFvvE> + +08034346 : + 8034346: b508 push {r3, lr} + 8034348: 2006 movs r0, #6 + 803434a: f000 fb79 bl 8034a40 + 803434e: 2001 movs r0, #1 + 8034350: f7cd fd48 bl 8001de4 <_exit> + +08034354 <__assert_func>: + 8034354: b51f push {r0, r1, r2, r3, r4, lr} + 8034356: 4614 mov r4, r2 + 8034358: 461a mov r2, r3 + 803435a: 4b09 ldr r3, [pc, #36] ; (8034380 <__assert_func+0x2c>) + 803435c: 681b ldr r3, [r3, #0] + 803435e: 4605 mov r5, r0 + 8034360: 68d8 ldr r0, [r3, #12] + 8034362: b14c cbz r4, 8034378 <__assert_func+0x24> + 8034364: 4b07 ldr r3, [pc, #28] ; (8034384 <__assert_func+0x30>) + 8034366: 9100 str r1, [sp, #0] + 8034368: e9cd 3401 strd r3, r4, [sp, #4] + 803436c: 4906 ldr r1, [pc, #24] ; (8034388 <__assert_func+0x34>) + 803436e: 462b mov r3, r5 + 8034370: f000 f9c0 bl 80346f4 + 8034374: f7ff ffe7 bl 8034346 + 8034378: 4b04 ldr r3, [pc, #16] ; (803438c <__assert_func+0x38>) + 803437a: 461c mov r4, r3 + 803437c: e7f3 b.n 8034366 <__assert_func+0x12> + 803437e: bf00 nop + 8034380: 20000138 .word 0x20000138 + 8034384: 0803ca78 .word 0x0803ca78 + 8034388: 0803ca85 .word 0x0803ca85 + 803438c: 0803b391 .word 0x0803b391 + +08034390 : + 8034390: 2300 movs r3, #0 + 8034392: 4601 mov r1, r0 + 8034394: 461a mov r2, r3 + 8034396: 4618 mov r0, r3 + 8034398: f000 bbfa b.w 8034b90 <__register_exitproc> + +0803439c : + 803439c: 4b02 ldr r3, [pc, #8] ; (80343a8 ) + 803439e: 4601 mov r1, r0 + 80343a0: 6818 ldr r0, [r3, #0] + 80343a2: f000 b82b b.w 80343fc <_malloc_r> + 80343a6: bf00 nop + 80343a8: 20000138 .word 0x20000138 + +080343ac : + 80343ac: 4b02 ldr r3, [pc, #8] ; (80343b8 ) + 80343ae: 4601 mov r1, r0 + 80343b0: 6818 ldr r0, [r3, #0] + 80343b2: f000 bc4b b.w 8034c4c <_free_r> + 80343b6: bf00 nop + 80343b8: 20000138 .word 0x20000138 + +080343bc : + 80343bc: b570 push {r4, r5, r6, lr} + 80343be: 4e0e ldr r6, [pc, #56] ; (80343f8 ) + 80343c0: 460c mov r4, r1 + 80343c2: 6831 ldr r1, [r6, #0] + 80343c4: 4605 mov r5, r0 + 80343c6: b911 cbnz r1, 80343ce + 80343c8: f000 fb8a bl 8034ae0 <_sbrk_r> + 80343cc: 6030 str r0, [r6, #0] + 80343ce: 4621 mov r1, r4 + 80343d0: 4628 mov r0, r5 + 80343d2: f000 fb85 bl 8034ae0 <_sbrk_r> + 80343d6: 1c43 adds r3, r0, #1 + 80343d8: d00a beq.n 80343f0 + 80343da: 1cc4 adds r4, r0, #3 + 80343dc: f024 0403 bic.w r4, r4, #3 + 80343e0: 42a0 cmp r0, r4 + 80343e2: d007 beq.n 80343f4 + 80343e4: 1a21 subs r1, r4, r0 + 80343e6: 4628 mov r0, r5 + 80343e8: f000 fb7a bl 8034ae0 <_sbrk_r> + 80343ec: 3001 adds r0, #1 + 80343ee: d101 bne.n 80343f4 + 80343f0: f04f 34ff mov.w r4, #4294967295 + 80343f4: 4620 mov r0, r4 + 80343f6: bd70 pop {r4, r5, r6, pc} + 80343f8: 2001f084 .word 0x2001f084 + +080343fc <_malloc_r>: + 80343fc: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} + 8034400: 1ccd adds r5, r1, #3 + 8034402: f025 0503 bic.w r5, r5, #3 + 8034406: 3508 adds r5, #8 + 8034408: 2d0c cmp r5, #12 + 803440a: bf38 it cc + 803440c: 250c movcc r5, #12 + 803440e: 2d00 cmp r5, #0 + 8034410: 4607 mov r7, r0 + 8034412: db01 blt.n 8034418 <_malloc_r+0x1c> + 8034414: 42a9 cmp r1, r5 + 8034416: d905 bls.n 8034424 <_malloc_r+0x28> + 8034418: 230c movs r3, #12 + 803441a: 603b str r3, [r7, #0] + 803441c: 2600 movs r6, #0 + 803441e: 4630 mov r0, r6 + 8034420: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} + 8034424: f8df 80d0 ldr.w r8, [pc, #208] ; 80344f8 <_malloc_r+0xfc> + 8034428: f000 f868 bl 80344fc <__malloc_lock> + 803442c: f8d8 3000 ldr.w r3, [r8] + 8034430: 461c mov r4, r3 + 8034432: bb5c cbnz r4, 803448c <_malloc_r+0x90> + 8034434: 4629 mov r1, r5 + 8034436: 4638 mov r0, r7 + 8034438: f7ff ffc0 bl 80343bc + 803443c: 1c43 adds r3, r0, #1 + 803443e: 4604 mov r4, r0 + 8034440: d155 bne.n 80344ee <_malloc_r+0xf2> + 8034442: f8d8 4000 ldr.w r4, [r8] + 8034446: 4626 mov r6, r4 + 8034448: 2e00 cmp r6, #0 + 803444a: d145 bne.n 80344d8 <_malloc_r+0xdc> + 803444c: 2c00 cmp r4, #0 + 803444e: d048 beq.n 80344e2 <_malloc_r+0xe6> + 8034450: 6823 ldr r3, [r4, #0] + 8034452: 4631 mov r1, r6 + 8034454: 4638 mov r0, r7 + 8034456: eb04 0903 add.w r9, r4, r3 + 803445a: f000 fb41 bl 8034ae0 <_sbrk_r> + 803445e: 4581 cmp r9, r0 + 8034460: d13f bne.n 80344e2 <_malloc_r+0xe6> + 8034462: 6821 ldr r1, [r4, #0] + 8034464: 1a6d subs r5, r5, r1 + 8034466: 4629 mov r1, r5 + 8034468: 4638 mov r0, r7 + 803446a: f7ff ffa7 bl 80343bc + 803446e: 3001 adds r0, #1 + 8034470: d037 beq.n 80344e2 <_malloc_r+0xe6> + 8034472: 6823 ldr r3, [r4, #0] + 8034474: 442b add r3, r5 + 8034476: 6023 str r3, [r4, #0] + 8034478: f8d8 3000 ldr.w r3, [r8] + 803447c: 2b00 cmp r3, #0 + 803447e: d038 beq.n 80344f2 <_malloc_r+0xf6> + 8034480: 685a ldr r2, [r3, #4] + 8034482: 42a2 cmp r2, r4 + 8034484: d12b bne.n 80344de <_malloc_r+0xe2> + 8034486: 2200 movs r2, #0 + 8034488: 605a str r2, [r3, #4] + 803448a: e00f b.n 80344ac <_malloc_r+0xb0> + 803448c: 6822 ldr r2, [r4, #0] + 803448e: 1b52 subs r2, r2, r5 + 8034490: d41f bmi.n 80344d2 <_malloc_r+0xd6> + 8034492: 2a0b cmp r2, #11 + 8034494: d917 bls.n 80344c6 <_malloc_r+0xca> + 8034496: 1961 adds r1, r4, r5 + 8034498: 42a3 cmp r3, r4 + 803449a: 6025 str r5, [r4, #0] + 803449c: bf18 it ne + 803449e: 6059 strne r1, [r3, #4] + 80344a0: 6863 ldr r3, [r4, #4] + 80344a2: bf08 it eq + 80344a4: f8c8 1000 streq.w r1, [r8] + 80344a8: 5162 str r2, [r4, r5] + 80344aa: 604b str r3, [r1, #4] + 80344ac: 4638 mov r0, r7 + 80344ae: f104 060b add.w r6, r4, #11 + 80344b2: f000 f829 bl 8034508 <__malloc_unlock> + 80344b6: f026 0607 bic.w r6, r6, #7 + 80344ba: 1d23 adds r3, r4, #4 + 80344bc: 1af2 subs r2, r6, r3 + 80344be: d0ae beq.n 803441e <_malloc_r+0x22> + 80344c0: 1b9b subs r3, r3, r6 + 80344c2: 50a3 str r3, [r4, r2] + 80344c4: e7ab b.n 803441e <_malloc_r+0x22> + 80344c6: 42a3 cmp r3, r4 + 80344c8: 6862 ldr r2, [r4, #4] + 80344ca: d1dd bne.n 8034488 <_malloc_r+0x8c> + 80344cc: f8c8 2000 str.w r2, [r8] + 80344d0: e7ec b.n 80344ac <_malloc_r+0xb0> + 80344d2: 4623 mov r3, r4 + 80344d4: 6864 ldr r4, [r4, #4] + 80344d6: e7ac b.n 8034432 <_malloc_r+0x36> + 80344d8: 4634 mov r4, r6 + 80344da: 6876 ldr r6, [r6, #4] + 80344dc: e7b4 b.n 8034448 <_malloc_r+0x4c> + 80344de: 4613 mov r3, r2 + 80344e0: e7cc b.n 803447c <_malloc_r+0x80> + 80344e2: 230c movs r3, #12 + 80344e4: 603b str r3, [r7, #0] + 80344e6: 4638 mov r0, r7 + 80344e8: f000 f80e bl 8034508 <__malloc_unlock> + 80344ec: e797 b.n 803441e <_malloc_r+0x22> + 80344ee: 6025 str r5, [r4, #0] + 80344f0: e7dc b.n 80344ac <_malloc_r+0xb0> + 80344f2: 605b str r3, [r3, #4] + 80344f4: deff udf #255 ; 0xff + 80344f6: bf00 nop + 80344f8: 2001f080 .word 0x2001f080 + +080344fc <__malloc_lock>: + 80344fc: 4801 ldr r0, [pc, #4] ; (8034504 <__malloc_lock+0x8>) + 80344fe: f000 bb36 b.w 8034b6e <__retarget_lock_acquire_recursive> + 8034502: bf00 nop + 8034504: 2001f1c5 .word 0x2001f1c5 + +08034508 <__malloc_unlock>: + 8034508: 4801 ldr r0, [pc, #4] ; (8034510 <__malloc_unlock+0x8>) + 803450a: f000 bb31 b.w 8034b70 <__retarget_lock_release_recursive> + 803450e: bf00 nop + 8034510: 2001f1c5 .word 0x2001f1c5 + +08034514 : + 8034514: 4b16 ldr r3, [pc, #88] ; (8034570 ) + 8034516: b510 push {r4, lr} + 8034518: 681c ldr r4, [r3, #0] + 803451a: 6b23 ldr r3, [r4, #48] ; 0x30 + 803451c: b9b3 cbnz r3, 803454c + 803451e: 2018 movs r0, #24 + 8034520: f7ff ff3c bl 803439c + 8034524: 4602 mov r2, r0 + 8034526: 6320 str r0, [r4, #48] ; 0x30 + 8034528: b920 cbnz r0, 8034534 + 803452a: 4b12 ldr r3, [pc, #72] ; (8034574 ) + 803452c: 4812 ldr r0, [pc, #72] ; (8034578 ) + 803452e: 2152 movs r1, #82 ; 0x52 + 8034530: f7ff ff10 bl 8034354 <__assert_func> + 8034534: 4911 ldr r1, [pc, #68] ; (803457c ) + 8034536: 4b12 ldr r3, [pc, #72] ; (8034580 ) + 8034538: e9c0 1300 strd r1, r3, [r0] + 803453c: 4b11 ldr r3, [pc, #68] ; (8034584 ) + 803453e: 6083 str r3, [r0, #8] + 8034540: 230b movs r3, #11 + 8034542: 8183 strh r3, [r0, #12] + 8034544: 2100 movs r1, #0 + 8034546: 2001 movs r0, #1 + 8034548: e9c2 0104 strd r0, r1, [r2, #16] + 803454c: 6b21 ldr r1, [r4, #48] ; 0x30 + 803454e: 480e ldr r0, [pc, #56] ; (8034588 ) + 8034550: 690b ldr r3, [r1, #16] + 8034552: 694c ldr r4, [r1, #20] + 8034554: 4a0d ldr r2, [pc, #52] ; (803458c ) + 8034556: 4358 muls r0, r3 + 8034558: fb02 0004 mla r0, r2, r4, r0 + 803455c: fba3 3202 umull r3, r2, r3, r2 + 8034560: 3301 adds r3, #1 + 8034562: eb40 0002 adc.w r0, r0, r2 + 8034566: e9c1 3004 strd r3, r0, [r1, #16] + 803456a: f020 4000 bic.w r0, r0, #2147483648 ; 0x80000000 + 803456e: bd10 pop {r4, pc} + 8034570: 20000138 .word 0x20000138 + 8034574: 0803cab4 .word 0x0803cab4 + 8034578: 0803cacb .word 0x0803cacb + 803457c: abcd330e .word 0xabcd330e + 8034580: e66d1234 .word 0xe66d1234 + 8034584: 0005deec .word 0x0005deec + 8034588: 5851f42d .word 0x5851f42d + 803458c: 4c957f2d .word 0x4c957f2d + +08034590 <__cxa_atexit>: + 8034590: b510 push {r4, lr} + 8034592: 4c05 ldr r4, [pc, #20] ; (80345a8 <__cxa_atexit+0x18>) + 8034594: 4613 mov r3, r2 + 8034596: b12c cbz r4, 80345a4 <__cxa_atexit+0x14> + 8034598: 460a mov r2, r1 + 803459a: 4601 mov r1, r0 + 803459c: 2002 movs r0, #2 + 803459e: f000 faf7 bl 8034b90 <__register_exitproc> + 80345a2: bd10 pop {r4, pc} + 80345a4: 4620 mov r0, r4 + 80345a6: e7fc b.n 80345a2 <__cxa_atexit+0x12> + 80345a8: 08034b91 .word 0x08034b91 + +080345ac : + 80345ac: 2300 movs r3, #0 + 80345ae: b510 push {r4, lr} + 80345b0: 4604 mov r4, r0 + 80345b2: e9c0 3300 strd r3, r3, [r0] + 80345b6: e9c0 3304 strd r3, r3, [r0, #16] + 80345ba: 6083 str r3, [r0, #8] + 80345bc: 8181 strh r1, [r0, #12] + 80345be: 6643 str r3, [r0, #100] ; 0x64 + 80345c0: 81c2 strh r2, [r0, #14] + 80345c2: 6183 str r3, [r0, #24] + 80345c4: 4619 mov r1, r3 + 80345c6: 2208 movs r2, #8 + 80345c8: 305c adds r0, #92 ; 0x5c + 80345ca: f000 f9f7 bl 80349bc + 80345ce: 4b0d ldr r3, [pc, #52] ; (8034604 ) + 80345d0: 6263 str r3, [r4, #36] ; 0x24 + 80345d2: 4b0d ldr r3, [pc, #52] ; (8034608 ) + 80345d4: 62a3 str r3, [r4, #40] ; 0x28 + 80345d6: 4b0d ldr r3, [pc, #52] ; (803460c ) + 80345d8: 62e3 str r3, [r4, #44] ; 0x2c + 80345da: 4b0d ldr r3, [pc, #52] ; (8034610 ) + 80345dc: 6323 str r3, [r4, #48] ; 0x30 + 80345de: 4b0d ldr r3, [pc, #52] ; (8034614 ) + 80345e0: 6224 str r4, [r4, #32] + 80345e2: 429c cmp r4, r3 + 80345e4: d006 beq.n 80345f4 + 80345e6: f103 0268 add.w r2, r3, #104 ; 0x68 + 80345ea: 4294 cmp r4, r2 + 80345ec: d002 beq.n 80345f4 + 80345ee: 33d0 adds r3, #208 ; 0xd0 + 80345f0: 429c cmp r4, r3 + 80345f2: d105 bne.n 8034600 + 80345f4: f104 0058 add.w r0, r4, #88 ; 0x58 + 80345f8: e8bd 4010 ldmia.w sp!, {r4, lr} + 80345fc: f000 bab6 b.w 8034b6c <__retarget_lock_init_recursive> + 8034600: bd10 pop {r4, pc} + 8034602: bf00 nop + 8034604: 080347b9 .word 0x080347b9 + 8034608: 080347db .word 0x080347db + 803460c: 08034813 .word 0x08034813 + 8034610: 08034837 .word 0x08034837 + 8034614: 2001f088 .word 0x2001f088 + +08034618 : + 8034618: 4a02 ldr r2, [pc, #8] ; (8034624 ) + 803461a: 4903 ldr r1, [pc, #12] ; (8034628 ) + 803461c: 4803 ldr r0, [pc, #12] ; (803462c ) + 803461e: f000 b87b b.w 8034718 <_fwalk_sglue> + 8034622: bf00 nop + 8034624: 200000e0 .word 0x200000e0 + 8034628: 08035649 .word 0x08035649 + 803462c: 200000ec .word 0x200000ec + +08034630 : + 8034630: 6841 ldr r1, [r0, #4] + 8034632: 4b0c ldr r3, [pc, #48] ; (8034664 ) + 8034634: 4299 cmp r1, r3 + 8034636: b510 push {r4, lr} + 8034638: 4604 mov r4, r0 + 803463a: d001 beq.n 8034640 + 803463c: f001 f804 bl 8035648 <_fflush_r> + 8034640: 68a1 ldr r1, [r4, #8] + 8034642: 4b09 ldr r3, [pc, #36] ; (8034668 ) + 8034644: 4299 cmp r1, r3 + 8034646: d002 beq.n 803464e + 8034648: 4620 mov r0, r4 + 803464a: f000 fffd bl 8035648 <_fflush_r> + 803464e: 68e1 ldr r1, [r4, #12] + 8034650: 4b06 ldr r3, [pc, #24] ; (803466c ) + 8034652: 4299 cmp r1, r3 + 8034654: d004 beq.n 8034660 + 8034656: 4620 mov r0, r4 + 8034658: e8bd 4010 ldmia.w sp!, {r4, lr} + 803465c: f000 bff4 b.w 8035648 <_fflush_r> + 8034660: bd10 pop {r4, pc} + 8034662: bf00 nop + 8034664: 2001f088 .word 0x2001f088 + 8034668: 2001f0f0 .word 0x2001f0f0 + 803466c: 2001f158 .word 0x2001f158 + +08034670 : + 8034670: b510 push {r4, lr} + 8034672: 4b0b ldr r3, [pc, #44] ; (80346a0 ) + 8034674: 4c0b ldr r4, [pc, #44] ; (80346a4 ) + 8034676: 4a0c ldr r2, [pc, #48] ; (80346a8 ) + 8034678: 601a str r2, [r3, #0] + 803467a: 4620 mov r0, r4 + 803467c: 2200 movs r2, #0 + 803467e: 2104 movs r1, #4 + 8034680: f7ff ff94 bl 80345ac + 8034684: f104 0068 add.w r0, r4, #104 ; 0x68 + 8034688: 2201 movs r2, #1 + 803468a: 2109 movs r1, #9 + 803468c: f7ff ff8e bl 80345ac + 8034690: f104 00d0 add.w r0, r4, #208 ; 0xd0 + 8034694: 2202 movs r2, #2 + 8034696: e8bd 4010 ldmia.w sp!, {r4, lr} + 803469a: 2112 movs r1, #18 + 803469c: f7ff bf86 b.w 80345ac + 80346a0: 2001f1c0 .word 0x2001f1c0 + 80346a4: 2001f088 .word 0x2001f088 + 80346a8: 08034619 .word 0x08034619 + +080346ac <__sfp_lock_acquire>: + 80346ac: 4801 ldr r0, [pc, #4] ; (80346b4 <__sfp_lock_acquire+0x8>) + 80346ae: f000 ba5e b.w 8034b6e <__retarget_lock_acquire_recursive> + 80346b2: bf00 nop + 80346b4: 2001f1c6 .word 0x2001f1c6 + +080346b8 <__sfp_lock_release>: + 80346b8: 4801 ldr r0, [pc, #4] ; (80346c0 <__sfp_lock_release+0x8>) + 80346ba: f000 ba59 b.w 8034b70 <__retarget_lock_release_recursive> + 80346be: bf00 nop + 80346c0: 2001f1c6 .word 0x2001f1c6 + +080346c4 <__sinit>: + 80346c4: b510 push {r4, lr} + 80346c6: 4604 mov r4, r0 + 80346c8: f7ff fff0 bl 80346ac <__sfp_lock_acquire> + 80346cc: 6a23 ldr r3, [r4, #32] + 80346ce: b11b cbz r3, 80346d8 <__sinit+0x14> + 80346d0: e8bd 4010 ldmia.w sp!, {r4, lr} + 80346d4: f7ff bff0 b.w 80346b8 <__sfp_lock_release> + 80346d8: 4b04 ldr r3, [pc, #16] ; (80346ec <__sinit+0x28>) + 80346da: 6223 str r3, [r4, #32] + 80346dc: 4b04 ldr r3, [pc, #16] ; (80346f0 <__sinit+0x2c>) + 80346de: 681b ldr r3, [r3, #0] + 80346e0: 2b00 cmp r3, #0 + 80346e2: d1f5 bne.n 80346d0 <__sinit+0xc> + 80346e4: f7ff ffc4 bl 8034670 + 80346e8: e7f2 b.n 80346d0 <__sinit+0xc> + 80346ea: bf00 nop + 80346ec: 08034631 .word 0x08034631 + 80346f0: 2001f1c0 .word 0x2001f1c0 + +080346f4 : + 80346f4: b40e push {r1, r2, r3} + 80346f6: b503 push {r0, r1, lr} + 80346f8: 4601 mov r1, r0 + 80346fa: ab03 add r3, sp, #12 + 80346fc: 4805 ldr r0, [pc, #20] ; (8034714 ) + 80346fe: f853 2b04 ldr.w r2, [r3], #4 + 8034702: 6800 ldr r0, [r0, #0] + 8034704: 9301 str r3, [sp, #4] + 8034706: f000 fc6f bl 8034fe8 <_vfiprintf_r> + 803470a: b002 add sp, #8 + 803470c: f85d eb04 ldr.w lr, [sp], #4 + 8034710: b003 add sp, #12 + 8034712: 4770 bx lr + 8034714: 20000138 .word 0x20000138 + +08034718 <_fwalk_sglue>: + 8034718: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} + 803471c: 4607 mov r7, r0 + 803471e: 4688 mov r8, r1 + 8034720: 4614 mov r4, r2 + 8034722: 2600 movs r6, #0 + 8034724: e9d4 9501 ldrd r9, r5, [r4, #4] + 8034728: f1b9 0901 subs.w r9, r9, #1 + 803472c: d505 bpl.n 803473a <_fwalk_sglue+0x22> + 803472e: 6824 ldr r4, [r4, #0] + 8034730: 2c00 cmp r4, #0 + 8034732: d1f7 bne.n 8034724 <_fwalk_sglue+0xc> + 8034734: 4630 mov r0, r6 + 8034736: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} + 803473a: 89ab ldrh r3, [r5, #12] + 803473c: 2b01 cmp r3, #1 + 803473e: d907 bls.n 8034750 <_fwalk_sglue+0x38> + 8034740: f9b5 300e ldrsh.w r3, [r5, #14] + 8034744: 3301 adds r3, #1 + 8034746: d003 beq.n 8034750 <_fwalk_sglue+0x38> + 8034748: 4629 mov r1, r5 + 803474a: 4638 mov r0, r7 + 803474c: 47c0 blx r8 + 803474e: 4306 orrs r6, r0 + 8034750: 3568 adds r5, #104 ; 0x68 + 8034752: e7e9 b.n 8034728 <_fwalk_sglue+0x10> + +08034754 : + 8034754: b40f push {r0, r1, r2, r3} + 8034756: b507 push {r0, r1, r2, lr} + 8034758: 4906 ldr r1, [pc, #24] ; (8034774 ) + 803475a: ab04 add r3, sp, #16 + 803475c: 6808 ldr r0, [r1, #0] + 803475e: f853 2b04 ldr.w r2, [r3], #4 + 8034762: 6881 ldr r1, [r0, #8] + 8034764: 9301 str r3, [sp, #4] + 8034766: f000 fc3f bl 8034fe8 <_vfiprintf_r> + 803476a: b003 add sp, #12 + 803476c: f85d eb04 ldr.w lr, [sp], #4 + 8034770: b004 add sp, #16 + 8034772: 4770 bx lr + 8034774: 20000138 .word 0x20000138 + +08034778 : + 8034778: b40e push {r1, r2, r3} + 803477a: b500 push {lr} + 803477c: b09c sub sp, #112 ; 0x70 + 803477e: ab1d add r3, sp, #116 ; 0x74 + 8034780: 9002 str r0, [sp, #8] + 8034782: 9006 str r0, [sp, #24] + 8034784: f06f 4100 mvn.w r1, #2147483648 ; 0x80000000 + 8034788: 4809 ldr r0, [pc, #36] ; (80347b0 ) + 803478a: 9107 str r1, [sp, #28] + 803478c: 9104 str r1, [sp, #16] + 803478e: 4909 ldr r1, [pc, #36] ; (80347b4 ) + 8034790: f853 2b04 ldr.w r2, [r3], #4 + 8034794: 9105 str r1, [sp, #20] + 8034796: 6800 ldr r0, [r0, #0] + 8034798: 9301 str r3, [sp, #4] + 803479a: a902 add r1, sp, #8 + 803479c: f000 fafc bl 8034d98 <_svfiprintf_r> + 80347a0: 9b02 ldr r3, [sp, #8] + 80347a2: 2200 movs r2, #0 + 80347a4: 701a strb r2, [r3, #0] + 80347a6: b01c add sp, #112 ; 0x70 + 80347a8: f85d eb04 ldr.w lr, [sp], #4 + 80347ac: b003 add sp, #12 + 80347ae: 4770 bx lr + 80347b0: 20000138 .word 0x20000138 + 80347b4: ffff0208 .word 0xffff0208 + +080347b8 <__sread>: + 80347b8: b510 push {r4, lr} + 80347ba: 460c mov r4, r1 + 80347bc: f9b1 100e ldrsh.w r1, [r1, #14] + 80347c0: f000 f968 bl 8034a94 <_read_r> + 80347c4: 2800 cmp r0, #0 + 80347c6: bfab itete ge + 80347c8: 6d63 ldrge r3, [r4, #84] ; 0x54 + 80347ca: 89a3 ldrhlt r3, [r4, #12] + 80347cc: 181b addge r3, r3, r0 + 80347ce: f423 5380 biclt.w r3, r3, #4096 ; 0x1000 + 80347d2: bfac ite ge + 80347d4: 6563 strge r3, [r4, #84] ; 0x54 + 80347d6: 81a3 strhlt r3, [r4, #12] + 80347d8: bd10 pop {r4, pc} + +080347da <__swrite>: + 80347da: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} + 80347de: 461f mov r7, r3 + 80347e0: 898b ldrh r3, [r1, #12] + 80347e2: 05db lsls r3, r3, #23 + 80347e4: 4605 mov r5, r0 + 80347e6: 460c mov r4, r1 + 80347e8: 4616 mov r6, r2 + 80347ea: d505 bpl.n 80347f8 <__swrite+0x1e> + 80347ec: f9b1 100e ldrsh.w r1, [r1, #14] + 80347f0: 2302 movs r3, #2 + 80347f2: 2200 movs r2, #0 + 80347f4: f000 f93c bl 8034a70 <_lseek_r> + 80347f8: 89a3 ldrh r3, [r4, #12] + 80347fa: f9b4 100e ldrsh.w r1, [r4, #14] + 80347fe: f423 5380 bic.w r3, r3, #4096 ; 0x1000 + 8034802: 81a3 strh r3, [r4, #12] + 8034804: 4632 mov r2, r6 + 8034806: 463b mov r3, r7 + 8034808: 4628 mov r0, r5 + 803480a: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} + 803480e: f000 b977 b.w 8034b00 <_write_r> + +08034812 <__sseek>: + 8034812: b510 push {r4, lr} + 8034814: 460c mov r4, r1 + 8034816: f9b1 100e ldrsh.w r1, [r1, #14] + 803481a: f000 f929 bl 8034a70 <_lseek_r> + 803481e: 1c43 adds r3, r0, #1 + 8034820: 89a3 ldrh r3, [r4, #12] + 8034822: bf15 itete ne + 8034824: 6560 strne r0, [r4, #84] ; 0x54 + 8034826: f423 5380 biceq.w r3, r3, #4096 ; 0x1000 + 803482a: f443 5380 orrne.w r3, r3, #4096 ; 0x1000 + 803482e: 81a3 strheq r3, [r4, #12] + 8034830: bf18 it ne + 8034832: 81a3 strhne r3, [r4, #12] + 8034834: bd10 pop {r4, pc} + +08034836 <__sclose>: + 8034836: f9b1 100e ldrsh.w r1, [r1, #14] + 803483a: f000 b909 b.w 8034a50 <_close_r> + +0803483e <__swbuf_r>: + 803483e: b5f8 push {r3, r4, r5, r6, r7, lr} + 8034840: 460e mov r6, r1 + 8034842: 4614 mov r4, r2 + 8034844: 4605 mov r5, r0 + 8034846: b118 cbz r0, 8034850 <__swbuf_r+0x12> + 8034848: 6a03 ldr r3, [r0, #32] + 803484a: b90b cbnz r3, 8034850 <__swbuf_r+0x12> + 803484c: f7ff ff3a bl 80346c4 <__sinit> + 8034850: 69a3 ldr r3, [r4, #24] + 8034852: 60a3 str r3, [r4, #8] + 8034854: 89a3 ldrh r3, [r4, #12] + 8034856: 071a lsls r2, r3, #28 + 8034858: d525 bpl.n 80348a6 <__swbuf_r+0x68> + 803485a: 6923 ldr r3, [r4, #16] + 803485c: b31b cbz r3, 80348a6 <__swbuf_r+0x68> + 803485e: 6823 ldr r3, [r4, #0] + 8034860: 6922 ldr r2, [r4, #16] + 8034862: 1a98 subs r0, r3, r2 + 8034864: 6963 ldr r3, [r4, #20] + 8034866: b2f6 uxtb r6, r6 + 8034868: 4283 cmp r3, r0 + 803486a: 4637 mov r7, r6 + 803486c: dc04 bgt.n 8034878 <__swbuf_r+0x3a> + 803486e: 4621 mov r1, r4 + 8034870: 4628 mov r0, r5 + 8034872: f000 fee9 bl 8035648 <_fflush_r> + 8034876: b9e0 cbnz r0, 80348b2 <__swbuf_r+0x74> + 8034878: 68a3 ldr r3, [r4, #8] + 803487a: 3b01 subs r3, #1 + 803487c: 60a3 str r3, [r4, #8] + 803487e: 6823 ldr r3, [r4, #0] + 8034880: 1c5a adds r2, r3, #1 + 8034882: 6022 str r2, [r4, #0] + 8034884: 701e strb r6, [r3, #0] + 8034886: 6962 ldr r2, [r4, #20] + 8034888: 1c43 adds r3, r0, #1 + 803488a: 429a cmp r2, r3 + 803488c: d004 beq.n 8034898 <__swbuf_r+0x5a> + 803488e: 89a3 ldrh r3, [r4, #12] + 8034890: 07db lsls r3, r3, #31 + 8034892: d506 bpl.n 80348a2 <__swbuf_r+0x64> + 8034894: 2e0a cmp r6, #10 + 8034896: d104 bne.n 80348a2 <__swbuf_r+0x64> + 8034898: 4621 mov r1, r4 + 803489a: 4628 mov r0, r5 + 803489c: f000 fed4 bl 8035648 <_fflush_r> + 80348a0: b938 cbnz r0, 80348b2 <__swbuf_r+0x74> + 80348a2: 4638 mov r0, r7 + 80348a4: bdf8 pop {r3, r4, r5, r6, r7, pc} + 80348a6: 4621 mov r1, r4 + 80348a8: 4628 mov r0, r5 + 80348aa: f000 f805 bl 80348b8 <__swsetup_r> + 80348ae: 2800 cmp r0, #0 + 80348b0: d0d5 beq.n 803485e <__swbuf_r+0x20> + 80348b2: f04f 37ff mov.w r7, #4294967295 + 80348b6: e7f4 b.n 80348a2 <__swbuf_r+0x64> + +080348b8 <__swsetup_r>: + 80348b8: b538 push {r3, r4, r5, lr} + 80348ba: 4b2a ldr r3, [pc, #168] ; (8034964 <__swsetup_r+0xac>) + 80348bc: 4605 mov r5, r0 + 80348be: 6818 ldr r0, [r3, #0] + 80348c0: 460c mov r4, r1 + 80348c2: b118 cbz r0, 80348cc <__swsetup_r+0x14> + 80348c4: 6a03 ldr r3, [r0, #32] + 80348c6: b90b cbnz r3, 80348cc <__swsetup_r+0x14> + 80348c8: f7ff fefc bl 80346c4 <__sinit> + 80348cc: 89a3 ldrh r3, [r4, #12] + 80348ce: f9b4 200c ldrsh.w r2, [r4, #12] + 80348d2: 0718 lsls r0, r3, #28 + 80348d4: d422 bmi.n 803491c <__swsetup_r+0x64> + 80348d6: 06d9 lsls r1, r3, #27 + 80348d8: d407 bmi.n 80348ea <__swsetup_r+0x32> + 80348da: 2309 movs r3, #9 + 80348dc: 602b str r3, [r5, #0] + 80348de: f042 0340 orr.w r3, r2, #64 ; 0x40 + 80348e2: 81a3 strh r3, [r4, #12] + 80348e4: f04f 30ff mov.w r0, #4294967295 + 80348e8: e034 b.n 8034954 <__swsetup_r+0x9c> + 80348ea: 0758 lsls r0, r3, #29 + 80348ec: d512 bpl.n 8034914 <__swsetup_r+0x5c> + 80348ee: 6b61 ldr r1, [r4, #52] ; 0x34 + 80348f0: b141 cbz r1, 8034904 <__swsetup_r+0x4c> + 80348f2: f104 0344 add.w r3, r4, #68 ; 0x44 + 80348f6: 4299 cmp r1, r3 + 80348f8: d002 beq.n 8034900 <__swsetup_r+0x48> + 80348fa: 4628 mov r0, r5 + 80348fc: f000 f9a6 bl 8034c4c <_free_r> + 8034900: 2300 movs r3, #0 + 8034902: 6363 str r3, [r4, #52] ; 0x34 + 8034904: 89a3 ldrh r3, [r4, #12] + 8034906: f023 0324 bic.w r3, r3, #36 ; 0x24 + 803490a: 81a3 strh r3, [r4, #12] + 803490c: 2300 movs r3, #0 + 803490e: 6063 str r3, [r4, #4] + 8034910: 6923 ldr r3, [r4, #16] + 8034912: 6023 str r3, [r4, #0] + 8034914: 89a3 ldrh r3, [r4, #12] + 8034916: f043 0308 orr.w r3, r3, #8 + 803491a: 81a3 strh r3, [r4, #12] + 803491c: 6923 ldr r3, [r4, #16] + 803491e: b94b cbnz r3, 8034934 <__swsetup_r+0x7c> + 8034920: 89a3 ldrh r3, [r4, #12] + 8034922: f403 7320 and.w r3, r3, #640 ; 0x280 + 8034926: f5b3 7f00 cmp.w r3, #512 ; 0x200 + 803492a: d003 beq.n 8034934 <__swsetup_r+0x7c> + 803492c: 4621 mov r1, r4 + 803492e: 4628 mov r0, r5 + 8034930: f000 fed8 bl 80356e4 <__smakebuf_r> + 8034934: 89a0 ldrh r0, [r4, #12] + 8034936: f9b4 200c ldrsh.w r2, [r4, #12] + 803493a: f010 0301 ands.w r3, r0, #1 + 803493e: d00a beq.n 8034956 <__swsetup_r+0x9e> + 8034940: 2300 movs r3, #0 + 8034942: 60a3 str r3, [r4, #8] + 8034944: 6963 ldr r3, [r4, #20] + 8034946: 425b negs r3, r3 + 8034948: 61a3 str r3, [r4, #24] + 803494a: 6923 ldr r3, [r4, #16] + 803494c: b943 cbnz r3, 8034960 <__swsetup_r+0xa8> + 803494e: f010 0080 ands.w r0, r0, #128 ; 0x80 + 8034952: d1c4 bne.n 80348de <__swsetup_r+0x26> + 8034954: bd38 pop {r3, r4, r5, pc} + 8034956: 0781 lsls r1, r0, #30 + 8034958: bf58 it pl + 803495a: 6963 ldrpl r3, [r4, #20] + 803495c: 60a3 str r3, [r4, #8] + 803495e: e7f4 b.n 803494a <__swsetup_r+0x92> + 8034960: 2000 movs r0, #0 + 8034962: e7f7 b.n 8034954 <__swsetup_r+0x9c> + 8034964: 20000138 .word 0x20000138 + +08034968 : + 8034968: b510 push {r4, lr} + 803496a: 3901 subs r1, #1 + 803496c: 4402 add r2, r0 + 803496e: 4290 cmp r0, r2 + 8034970: d101 bne.n 8034976 + 8034972: 2000 movs r0, #0 + 8034974: e005 b.n 8034982 + 8034976: 7803 ldrb r3, [r0, #0] + 8034978: f811 4f01 ldrb.w r4, [r1, #1]! + 803497c: 42a3 cmp r3, r4 + 803497e: d001 beq.n 8034984 + 8034980: 1b18 subs r0, r3, r4 + 8034982: bd10 pop {r4, pc} + 8034984: 3001 adds r0, #1 + 8034986: e7f2 b.n 803496e + +08034988 : + 8034988: 4288 cmp r0, r1 + 803498a: b510 push {r4, lr} + 803498c: eb01 0402 add.w r4, r1, r2 + 8034990: d902 bls.n 8034998 + 8034992: 4284 cmp r4, r0 + 8034994: 4623 mov r3, r4 + 8034996: d807 bhi.n 80349a8 + 8034998: 1e43 subs r3, r0, #1 + 803499a: 42a1 cmp r1, r4 + 803499c: d008 beq.n 80349b0 + 803499e: f811 2b01 ldrb.w r2, [r1], #1 + 80349a2: f803 2f01 strb.w r2, [r3, #1]! + 80349a6: e7f8 b.n 803499a + 80349a8: 4402 add r2, r0 + 80349aa: 4601 mov r1, r0 + 80349ac: 428a cmp r2, r1 + 80349ae: d100 bne.n 80349b2 + 80349b0: bd10 pop {r4, pc} + 80349b2: f813 4d01 ldrb.w r4, [r3, #-1]! + 80349b6: f802 4d01 strb.w r4, [r2, #-1]! + 80349ba: e7f7 b.n 80349ac + +080349bc : + 80349bc: 4402 add r2, r0 + 80349be: 4603 mov r3, r0 + 80349c0: 4293 cmp r3, r2 + 80349c2: d100 bne.n 80349c6 + 80349c4: 4770 bx lr + 80349c6: f803 1b01 strb.w r1, [r3], #1 + 80349ca: e7f9 b.n 80349c0 + +080349cc : + 80349cc: b510 push {r4, lr} + 80349ce: b16a cbz r2, 80349ec + 80349d0: 3901 subs r1, #1 + 80349d2: 1884 adds r4, r0, r2 + 80349d4: f810 2b01 ldrb.w r2, [r0], #1 + 80349d8: f811 3f01 ldrb.w r3, [r1, #1]! + 80349dc: 429a cmp r2, r3 + 80349de: d103 bne.n 80349e8 + 80349e0: 42a0 cmp r0, r4 + 80349e2: d001 beq.n 80349e8 + 80349e4: 2a00 cmp r2, #0 + 80349e6: d1f5 bne.n 80349d4 + 80349e8: 1ad0 subs r0, r2, r3 + 80349ea: bd10 pop {r4, pc} + 80349ec: 4610 mov r0, r2 + 80349ee: e7fc b.n 80349ea + +080349f0 <_raise_r>: + 80349f0: 291f cmp r1, #31 + 80349f2: b538 push {r3, r4, r5, lr} + 80349f4: 4604 mov r4, r0 + 80349f6: 460d mov r5, r1 + 80349f8: d904 bls.n 8034a04 <_raise_r+0x14> + 80349fa: 2316 movs r3, #22 + 80349fc: 6003 str r3, [r0, #0] + 80349fe: f04f 30ff mov.w r0, #4294967295 + 8034a02: bd38 pop {r3, r4, r5, pc} + 8034a04: 6bc2 ldr r2, [r0, #60] ; 0x3c + 8034a06: b112 cbz r2, 8034a0e <_raise_r+0x1e> + 8034a08: f852 3021 ldr.w r3, [r2, r1, lsl #2] + 8034a0c: b94b cbnz r3, 8034a22 <_raise_r+0x32> + 8034a0e: 4620 mov r0, r4 + 8034a10: f000 f864 bl 8034adc <_getpid_r> + 8034a14: 462a mov r2, r5 + 8034a16: 4601 mov r1, r0 + 8034a18: 4620 mov r0, r4 + 8034a1a: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} + 8034a1e: f000 b84b b.w 8034ab8 <_kill_r> + 8034a22: 2b01 cmp r3, #1 + 8034a24: d00a beq.n 8034a3c <_raise_r+0x4c> + 8034a26: 1c59 adds r1, r3, #1 + 8034a28: d103 bne.n 8034a32 <_raise_r+0x42> + 8034a2a: 2316 movs r3, #22 + 8034a2c: 6003 str r3, [r0, #0] + 8034a2e: 2001 movs r0, #1 + 8034a30: e7e7 b.n 8034a02 <_raise_r+0x12> + 8034a32: 2400 movs r4, #0 + 8034a34: f842 4025 str.w r4, [r2, r5, lsl #2] + 8034a38: 4628 mov r0, r5 + 8034a3a: 4798 blx r3 + 8034a3c: 2000 movs r0, #0 + 8034a3e: e7e0 b.n 8034a02 <_raise_r+0x12> + +08034a40 : + 8034a40: 4b02 ldr r3, [pc, #8] ; (8034a4c ) + 8034a42: 4601 mov r1, r0 + 8034a44: 6818 ldr r0, [r3, #0] + 8034a46: f7ff bfd3 b.w 80349f0 <_raise_r> + 8034a4a: bf00 nop + 8034a4c: 20000138 .word 0x20000138 + +08034a50 <_close_r>: + 8034a50: b538 push {r3, r4, r5, lr} + 8034a52: 4d06 ldr r5, [pc, #24] ; (8034a6c <_close_r+0x1c>) + 8034a54: 2300 movs r3, #0 + 8034a56: 4604 mov r4, r0 + 8034a58: 4608 mov r0, r1 + 8034a5a: 602b str r3, [r5, #0] + 8034a5c: f7cd f9e4 bl 8001e28 <_close> + 8034a60: 1c43 adds r3, r0, #1 + 8034a62: d102 bne.n 8034a6a <_close_r+0x1a> + 8034a64: 682b ldr r3, [r5, #0] + 8034a66: b103 cbz r3, 8034a6a <_close_r+0x1a> + 8034a68: 6023 str r3, [r4, #0] + 8034a6a: bd38 pop {r3, r4, r5, pc} + 8034a6c: 2001e6a4 .word 0x2001e6a4 + +08034a70 <_lseek_r>: + 8034a70: b538 push {r3, r4, r5, lr} + 8034a72: 4d07 ldr r5, [pc, #28] ; (8034a90 <_lseek_r+0x20>) + 8034a74: 4604 mov r4, r0 + 8034a76: 4608 mov r0, r1 + 8034a78: 4611 mov r1, r2 + 8034a7a: 2200 movs r2, #0 + 8034a7c: 602a str r2, [r5, #0] + 8034a7e: 461a mov r2, r3 + 8034a80: f7cd f9dc bl 8001e3c <_lseek> + 8034a84: 1c43 adds r3, r0, #1 + 8034a86: d102 bne.n 8034a8e <_lseek_r+0x1e> + 8034a88: 682b ldr r3, [r5, #0] + 8034a8a: b103 cbz r3, 8034a8e <_lseek_r+0x1e> + 8034a8c: 6023 str r3, [r4, #0] + 8034a8e: bd38 pop {r3, r4, r5, pc} + 8034a90: 2001e6a4 .word 0x2001e6a4 + +08034a94 <_read_r>: + 8034a94: b538 push {r3, r4, r5, lr} + 8034a96: 4d07 ldr r5, [pc, #28] ; (8034ab4 <_read_r+0x20>) + 8034a98: 4604 mov r4, r0 + 8034a9a: 4608 mov r0, r1 + 8034a9c: 4611 mov r1, r2 + 8034a9e: 2200 movs r2, #0 + 8034aa0: 602a str r2, [r5, #0] + 8034aa2: 461a mov r2, r3 + 8034aa4: f7cd f9a4 bl 8001df0 <_read> + 8034aa8: 1c43 adds r3, r0, #1 + 8034aaa: d102 bne.n 8034ab2 <_read_r+0x1e> + 8034aac: 682b ldr r3, [r5, #0] + 8034aae: b103 cbz r3, 8034ab2 <_read_r+0x1e> + 8034ab0: 6023 str r3, [r4, #0] + 8034ab2: bd38 pop {r3, r4, r5, pc} + 8034ab4: 2001e6a4 .word 0x2001e6a4 + +08034ab8 <_kill_r>: + 8034ab8: b538 push {r3, r4, r5, lr} + 8034aba: 4d07 ldr r5, [pc, #28] ; (8034ad8 <_kill_r+0x20>) + 8034abc: 2300 movs r3, #0 + 8034abe: 4604 mov r4, r0 + 8034ac0: 4608 mov r0, r1 + 8034ac2: 4611 mov r1, r2 + 8034ac4: 602b str r3, [r5, #0] + 8034ac6: f7cd f985 bl 8001dd4 <_kill> + 8034aca: 1c43 adds r3, r0, #1 + 8034acc: d102 bne.n 8034ad4 <_kill_r+0x1c> + 8034ace: 682b ldr r3, [r5, #0] + 8034ad0: b103 cbz r3, 8034ad4 <_kill_r+0x1c> + 8034ad2: 6023 str r3, [r4, #0] + 8034ad4: bd38 pop {r3, r4, r5, pc} + 8034ad6: bf00 nop + 8034ad8: 2001e6a4 .word 0x2001e6a4 + +08034adc <_getpid_r>: + 8034adc: f7cd b978 b.w 8001dd0 <_getpid> + +08034ae0 <_sbrk_r>: + 8034ae0: b538 push {r3, r4, r5, lr} + 8034ae2: 4d06 ldr r5, [pc, #24] ; (8034afc <_sbrk_r+0x1c>) + 8034ae4: 2300 movs r3, #0 + 8034ae6: 4604 mov r4, r0 + 8034ae8: 4608 mov r0, r1 + 8034aea: 602b str r3, [r5, #0] + 8034aec: f7cd f9a8 bl 8001e40 <_sbrk> + 8034af0: 1c43 adds r3, r0, #1 + 8034af2: d102 bne.n 8034afa <_sbrk_r+0x1a> + 8034af4: 682b ldr r3, [r5, #0] + 8034af6: b103 cbz r3, 8034afa <_sbrk_r+0x1a> + 8034af8: 6023 str r3, [r4, #0] + 8034afa: bd38 pop {r3, r4, r5, pc} + 8034afc: 2001e6a4 .word 0x2001e6a4 + +08034b00 <_write_r>: + 8034b00: b538 push {r3, r4, r5, lr} + 8034b02: 4d07 ldr r5, [pc, #28] ; (8034b20 <_write_r+0x20>) + 8034b04: 4604 mov r4, r0 + 8034b06: 4608 mov r0, r1 + 8034b08: 4611 mov r1, r2 + 8034b0a: 2200 movs r2, #0 + 8034b0c: 602a str r2, [r5, #0] + 8034b0e: 461a mov r2, r3 + 8034b10: f7cd f97c bl 8001e0c <_write> + 8034b14: 1c43 adds r3, r0, #1 + 8034b16: d102 bne.n 8034b1e <_write_r+0x1e> + 8034b18: 682b ldr r3, [r5, #0] + 8034b1a: b103 cbz r3, 8034b1e <_write_r+0x1e> + 8034b1c: 6023 str r3, [r4, #0] + 8034b1e: bd38 pop {r3, r4, r5, pc} + 8034b20: 2001e6a4 .word 0x2001e6a4 + +08034b24 <__libc_init_array>: + 8034b24: b570 push {r4, r5, r6, lr} + 8034b26: 4d0d ldr r5, [pc, #52] ; (8034b5c <__libc_init_array+0x38>) + 8034b28: 4c0d ldr r4, [pc, #52] ; (8034b60 <__libc_init_array+0x3c>) + 8034b2a: 1b64 subs r4, r4, r5 + 8034b2c: 10a4 asrs r4, r4, #2 + 8034b2e: 2600 movs r6, #0 + 8034b30: 42a6 cmp r6, r4 + 8034b32: d109 bne.n 8034b48 <__libc_init_array+0x24> + 8034b34: 4d0b ldr r5, [pc, #44] ; (8034b64 <__libc_init_array+0x40>) + 8034b36: 4c0c ldr r4, [pc, #48] ; (8034b68 <__libc_init_array+0x44>) + 8034b38: f000 fe6a bl 8035810 <_init> + 8034b3c: 1b64 subs r4, r4, r5 + 8034b3e: 10a4 asrs r4, r4, #2 + 8034b40: 2600 movs r6, #0 + 8034b42: 42a6 cmp r6, r4 + 8034b44: d105 bne.n 8034b52 <__libc_init_array+0x2e> + 8034b46: bd70 pop {r4, r5, r6, pc} + 8034b48: f855 3b04 ldr.w r3, [r5], #4 + 8034b4c: 4798 blx r3 + 8034b4e: 3601 adds r6, #1 + 8034b50: e7ee b.n 8034b30 <__libc_init_array+0xc> + 8034b52: f855 3b04 ldr.w r3, [r5], #4 + 8034b56: 4798 blx r3 + 8034b58: 3601 adds r6, #1 + 8034b5a: e7f2 b.n 8034b42 <__libc_init_array+0x1e> + 8034b5c: 0803cb7c .word 0x0803cb7c + 8034b60: 0803cb7c .word 0x0803cb7c + 8034b64: 0803cb7c .word 0x0803cb7c + 8034b68: 0803cb98 .word 0x0803cb98 + +08034b6c <__retarget_lock_init_recursive>: + 8034b6c: 4770 bx lr + +08034b6e <__retarget_lock_acquire_recursive>: + 8034b6e: 4770 bx lr + +08034b70 <__retarget_lock_release_recursive>: + 8034b70: 4770 bx lr + +08034b72 : + 8034b72: 440a add r2, r1 + 8034b74: 4291 cmp r1, r2 + 8034b76: f100 33ff add.w r3, r0, #4294967295 + 8034b7a: d100 bne.n 8034b7e + 8034b7c: 4770 bx lr + 8034b7e: b510 push {r4, lr} + 8034b80: f811 4b01 ldrb.w r4, [r1], #1 + 8034b84: f803 4f01 strb.w r4, [r3, #1]! + 8034b88: 4291 cmp r1, r2 + 8034b8a: d1f9 bne.n 8034b80 + 8034b8c: bd10 pop {r4, pc} + ... + +08034b90 <__register_exitproc>: + 8034b90: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} + 8034b94: f8df 80b0 ldr.w r8, [pc, #176] ; 8034c48 <__register_exitproc+0xb8> + 8034b98: 4606 mov r6, r0 + 8034b9a: f8d8 0000 ldr.w r0, [r8] + 8034b9e: 461f mov r7, r3 + 8034ba0: 460d mov r5, r1 + 8034ba2: 4691 mov r9, r2 + 8034ba4: f7ff ffe3 bl 8034b6e <__retarget_lock_acquire_recursive> + 8034ba8: 4b23 ldr r3, [pc, #140] ; (8034c38 <__register_exitproc+0xa8>) + 8034baa: 681c ldr r4, [r3, #0] + 8034bac: b934 cbnz r4, 8034bbc <__register_exitproc+0x2c> + 8034bae: 4c23 ldr r4, [pc, #140] ; (8034c3c <__register_exitproc+0xac>) + 8034bb0: 601c str r4, [r3, #0] + 8034bb2: 4b23 ldr r3, [pc, #140] ; (8034c40 <__register_exitproc+0xb0>) + 8034bb4: b113 cbz r3, 8034bbc <__register_exitproc+0x2c> + 8034bb6: 681b ldr r3, [r3, #0] + 8034bb8: f8c4 3088 str.w r3, [r4, #136] ; 0x88 + 8034bbc: 6863 ldr r3, [r4, #4] + 8034bbe: 2b1f cmp r3, #31 + 8034bc0: dd07 ble.n 8034bd2 <__register_exitproc+0x42> + 8034bc2: f8d8 0000 ldr.w r0, [r8] + 8034bc6: f7ff ffd3 bl 8034b70 <__retarget_lock_release_recursive> + 8034bca: f04f 30ff mov.w r0, #4294967295 + 8034bce: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} + 8034bd2: b32e cbz r6, 8034c20 <__register_exitproc+0x90> + 8034bd4: f8d4 0088 ldr.w r0, [r4, #136] ; 0x88 + 8034bd8: b968 cbnz r0, 8034bf6 <__register_exitproc+0x66> + 8034bda: 4b1a ldr r3, [pc, #104] ; (8034c44 <__register_exitproc+0xb4>) + 8034bdc: 2b00 cmp r3, #0 + 8034bde: d0f0 beq.n 8034bc2 <__register_exitproc+0x32> + 8034be0: f44f 7084 mov.w r0, #264 ; 0x108 + 8034be4: f7ff fbda bl 803439c + 8034be8: 2800 cmp r0, #0 + 8034bea: d0ea beq.n 8034bc2 <__register_exitproc+0x32> + 8034bec: 2300 movs r3, #0 + 8034bee: e9c0 3340 strd r3, r3, [r0, #256] ; 0x100 + 8034bf2: f8c4 0088 str.w r0, [r4, #136] ; 0x88 + 8034bf6: 6863 ldr r3, [r4, #4] + 8034bf8: f840 9023 str.w r9, [r0, r3, lsl #2] + 8034bfc: 2201 movs r2, #1 + 8034bfe: 409a lsls r2, r3 + 8034c00: eb00 0183 add.w r1, r0, r3, lsl #2 + 8034c04: f8d0 3100 ldr.w r3, [r0, #256] ; 0x100 + 8034c08: 4313 orrs r3, r2 + 8034c0a: f8c0 3100 str.w r3, [r0, #256] ; 0x100 + 8034c0e: 2e02 cmp r6, #2 + 8034c10: f8c1 7080 str.w r7, [r1, #128] ; 0x80 + 8034c14: bf02 ittt eq + 8034c16: f8d0 3104 ldreq.w r3, [r0, #260] ; 0x104 + 8034c1a: 4313 orreq r3, r2 + 8034c1c: f8c0 3104 streq.w r3, [r0, #260] ; 0x104 + 8034c20: 6863 ldr r3, [r4, #4] + 8034c22: f8d8 0000 ldr.w r0, [r8] + 8034c26: 1c5a adds r2, r3, #1 + 8034c28: 3302 adds r3, #2 + 8034c2a: 6062 str r2, [r4, #4] + 8034c2c: f844 5023 str.w r5, [r4, r3, lsl #2] + 8034c30: f7ff ff9e bl 8034b70 <__retarget_lock_release_recursive> + 8034c34: 2000 movs r0, #0 + 8034c36: e7ca b.n 8034bce <__register_exitproc+0x3e> + 8034c38: 2001f254 .word 0x2001f254 + 8034c3c: 2001f1c8 .word 0x2001f1c8 + 8034c40: 0803cb24 .word 0x0803cb24 + 8034c44: 0803439d .word 0x0803439d + 8034c48: 2000013c .word 0x2000013c + +08034c4c <_free_r>: + 8034c4c: b537 push {r0, r1, r2, r4, r5, lr} + 8034c4e: 2900 cmp r1, #0 + 8034c50: d044 beq.n 8034cdc <_free_r+0x90> + 8034c52: f851 3c04 ldr.w r3, [r1, #-4] + 8034c56: 9001 str r0, [sp, #4] + 8034c58: 2b00 cmp r3, #0 + 8034c5a: f1a1 0404 sub.w r4, r1, #4 + 8034c5e: bfb8 it lt + 8034c60: 18e4 addlt r4, r4, r3 + 8034c62: f7ff fc4b bl 80344fc <__malloc_lock> + 8034c66: 4a1e ldr r2, [pc, #120] ; (8034ce0 <_free_r+0x94>) + 8034c68: 9801 ldr r0, [sp, #4] + 8034c6a: 6813 ldr r3, [r2, #0] + 8034c6c: b933 cbnz r3, 8034c7c <_free_r+0x30> + 8034c6e: 6063 str r3, [r4, #4] + 8034c70: 6014 str r4, [r2, #0] + 8034c72: b003 add sp, #12 + 8034c74: e8bd 4030 ldmia.w sp!, {r4, r5, lr} + 8034c78: f7ff bc46 b.w 8034508 <__malloc_unlock> + 8034c7c: 42a3 cmp r3, r4 + 8034c7e: d908 bls.n 8034c92 <_free_r+0x46> + 8034c80: 6825 ldr r5, [r4, #0] + 8034c82: 1961 adds r1, r4, r5 + 8034c84: 428b cmp r3, r1 + 8034c86: bf01 itttt eq + 8034c88: 6819 ldreq r1, [r3, #0] + 8034c8a: 685b ldreq r3, [r3, #4] + 8034c8c: 1949 addeq r1, r1, r5 + 8034c8e: 6021 streq r1, [r4, #0] + 8034c90: e7ed b.n 8034c6e <_free_r+0x22> + 8034c92: 461a mov r2, r3 + 8034c94: 685b ldr r3, [r3, #4] + 8034c96: b10b cbz r3, 8034c9c <_free_r+0x50> + 8034c98: 42a3 cmp r3, r4 + 8034c9a: d9fa bls.n 8034c92 <_free_r+0x46> + 8034c9c: 6811 ldr r1, [r2, #0] + 8034c9e: 1855 adds r5, r2, r1 + 8034ca0: 42a5 cmp r5, r4 + 8034ca2: d10b bne.n 8034cbc <_free_r+0x70> + 8034ca4: 6824 ldr r4, [r4, #0] + 8034ca6: 4421 add r1, r4 + 8034ca8: 1854 adds r4, r2, r1 + 8034caa: 42a3 cmp r3, r4 + 8034cac: 6011 str r1, [r2, #0] + 8034cae: d1e0 bne.n 8034c72 <_free_r+0x26> + 8034cb0: 681c ldr r4, [r3, #0] + 8034cb2: 685b ldr r3, [r3, #4] + 8034cb4: 6053 str r3, [r2, #4] + 8034cb6: 440c add r4, r1 + 8034cb8: 6014 str r4, [r2, #0] + 8034cba: e7da b.n 8034c72 <_free_r+0x26> + 8034cbc: d902 bls.n 8034cc4 <_free_r+0x78> + 8034cbe: 230c movs r3, #12 + 8034cc0: 6003 str r3, [r0, #0] + 8034cc2: e7d6 b.n 8034c72 <_free_r+0x26> + 8034cc4: 6825 ldr r5, [r4, #0] + 8034cc6: 1961 adds r1, r4, r5 + 8034cc8: 428b cmp r3, r1 + 8034cca: bf04 itt eq + 8034ccc: 6819 ldreq r1, [r3, #0] + 8034cce: 685b ldreq r3, [r3, #4] + 8034cd0: 6063 str r3, [r4, #4] + 8034cd2: bf04 itt eq + 8034cd4: 1949 addeq r1, r1, r5 + 8034cd6: 6021 streq r1, [r4, #0] + 8034cd8: 6054 str r4, [r2, #4] + 8034cda: e7ca b.n 8034c72 <_free_r+0x26> + 8034cdc: b003 add sp, #12 + 8034cde: bd30 pop {r4, r5, pc} + 8034ce0: 2001f080 .word 0x2001f080 + +08034ce4 <__ssputs_r>: + 8034ce4: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} + 8034ce8: 688e ldr r6, [r1, #8] + 8034cea: 461f mov r7, r3 + 8034cec: 42be cmp r6, r7 + 8034cee: 680b ldr r3, [r1, #0] + 8034cf0: 4682 mov sl, r0 + 8034cf2: 460c mov r4, r1 + 8034cf4: 4690 mov r8, r2 + 8034cf6: d82c bhi.n 8034d52 <__ssputs_r+0x6e> + 8034cf8: 898a ldrh r2, [r1, #12] + 8034cfa: f412 6f90 tst.w r2, #1152 ; 0x480 + 8034cfe: d026 beq.n 8034d4e <__ssputs_r+0x6a> + 8034d00: 6965 ldr r5, [r4, #20] + 8034d02: 6909 ldr r1, [r1, #16] + 8034d04: eb05 0545 add.w r5, r5, r5, lsl #1 + 8034d08: eba3 0901 sub.w r9, r3, r1 + 8034d0c: eb05 75d5 add.w r5, r5, r5, lsr #31 + 8034d10: 1c7b adds r3, r7, #1 + 8034d12: 444b add r3, r9 + 8034d14: 106d asrs r5, r5, #1 + 8034d16: 429d cmp r5, r3 + 8034d18: bf38 it cc + 8034d1a: 461d movcc r5, r3 + 8034d1c: 0553 lsls r3, r2, #21 + 8034d1e: d527 bpl.n 8034d70 <__ssputs_r+0x8c> + 8034d20: 4629 mov r1, r5 + 8034d22: f7ff fb6b bl 80343fc <_malloc_r> + 8034d26: 4606 mov r6, r0 + 8034d28: b360 cbz r0, 8034d84 <__ssputs_r+0xa0> + 8034d2a: 6921 ldr r1, [r4, #16] + 8034d2c: 464a mov r2, r9 + 8034d2e: f7ff ff20 bl 8034b72 + 8034d32: 89a3 ldrh r3, [r4, #12] + 8034d34: f423 6390 bic.w r3, r3, #1152 ; 0x480 + 8034d38: f043 0380 orr.w r3, r3, #128 ; 0x80 + 8034d3c: 81a3 strh r3, [r4, #12] + 8034d3e: 6126 str r6, [r4, #16] + 8034d40: 6165 str r5, [r4, #20] + 8034d42: 444e add r6, r9 + 8034d44: eba5 0509 sub.w r5, r5, r9 + 8034d48: 6026 str r6, [r4, #0] + 8034d4a: 60a5 str r5, [r4, #8] + 8034d4c: 463e mov r6, r7 + 8034d4e: 42be cmp r6, r7 + 8034d50: d900 bls.n 8034d54 <__ssputs_r+0x70> + 8034d52: 463e mov r6, r7 + 8034d54: 6820 ldr r0, [r4, #0] + 8034d56: 4632 mov r2, r6 + 8034d58: 4641 mov r1, r8 + 8034d5a: f7ff fe15 bl 8034988 + 8034d5e: 68a3 ldr r3, [r4, #8] + 8034d60: 1b9b subs r3, r3, r6 + 8034d62: 60a3 str r3, [r4, #8] + 8034d64: 6823 ldr r3, [r4, #0] + 8034d66: 4433 add r3, r6 + 8034d68: 6023 str r3, [r4, #0] + 8034d6a: 2000 movs r0, #0 + 8034d6c: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + 8034d70: 462a mov r2, r5 + 8034d72: f000 fd15 bl 80357a0 <_realloc_r> + 8034d76: 4606 mov r6, r0 + 8034d78: 2800 cmp r0, #0 + 8034d7a: d1e0 bne.n 8034d3e <__ssputs_r+0x5a> + 8034d7c: 6921 ldr r1, [r4, #16] + 8034d7e: 4650 mov r0, sl + 8034d80: f7ff ff64 bl 8034c4c <_free_r> + 8034d84: 230c movs r3, #12 + 8034d86: f8ca 3000 str.w r3, [sl] + 8034d8a: 89a3 ldrh r3, [r4, #12] + 8034d8c: f043 0340 orr.w r3, r3, #64 ; 0x40 + 8034d90: 81a3 strh r3, [r4, #12] + 8034d92: f04f 30ff mov.w r0, #4294967295 + 8034d96: e7e9 b.n 8034d6c <__ssputs_r+0x88> + +08034d98 <_svfiprintf_r>: + 8034d98: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8034d9c: 4698 mov r8, r3 + 8034d9e: 898b ldrh r3, [r1, #12] + 8034da0: 061b lsls r3, r3, #24 + 8034da2: b09d sub sp, #116 ; 0x74 + 8034da4: 4607 mov r7, r0 + 8034da6: 460d mov r5, r1 + 8034da8: 4614 mov r4, r2 + 8034daa: d50e bpl.n 8034dca <_svfiprintf_r+0x32> + 8034dac: 690b ldr r3, [r1, #16] + 8034dae: b963 cbnz r3, 8034dca <_svfiprintf_r+0x32> + 8034db0: 2140 movs r1, #64 ; 0x40 + 8034db2: f7ff fb23 bl 80343fc <_malloc_r> + 8034db6: 6028 str r0, [r5, #0] + 8034db8: 6128 str r0, [r5, #16] + 8034dba: b920 cbnz r0, 8034dc6 <_svfiprintf_r+0x2e> + 8034dbc: 230c movs r3, #12 + 8034dbe: 603b str r3, [r7, #0] + 8034dc0: f04f 30ff mov.w r0, #4294967295 + 8034dc4: e0d0 b.n 8034f68 <_svfiprintf_r+0x1d0> + 8034dc6: 2340 movs r3, #64 ; 0x40 + 8034dc8: 616b str r3, [r5, #20] + 8034dca: 2300 movs r3, #0 + 8034dcc: 9309 str r3, [sp, #36] ; 0x24 + 8034dce: 2320 movs r3, #32 + 8034dd0: f88d 3029 strb.w r3, [sp, #41] ; 0x29 + 8034dd4: f8cd 800c str.w r8, [sp, #12] + 8034dd8: 2330 movs r3, #48 ; 0x30 + 8034dda: f8df 81a4 ldr.w r8, [pc, #420] ; 8034f80 <_svfiprintf_r+0x1e8> + 8034dde: f88d 302a strb.w r3, [sp, #42] ; 0x2a + 8034de2: f04f 0901 mov.w r9, #1 + 8034de6: 4623 mov r3, r4 + 8034de8: 469a mov sl, r3 + 8034dea: f813 2b01 ldrb.w r2, [r3], #1 + 8034dee: b10a cbz r2, 8034df4 <_svfiprintf_r+0x5c> + 8034df0: 2a25 cmp r2, #37 ; 0x25 + 8034df2: d1f9 bne.n 8034de8 <_svfiprintf_r+0x50> + 8034df4: ebba 0b04 subs.w fp, sl, r4 + 8034df8: d00b beq.n 8034e12 <_svfiprintf_r+0x7a> + 8034dfa: 465b mov r3, fp + 8034dfc: 4622 mov r2, r4 + 8034dfe: 4629 mov r1, r5 + 8034e00: 4638 mov r0, r7 + 8034e02: f7ff ff6f bl 8034ce4 <__ssputs_r> + 8034e06: 3001 adds r0, #1 + 8034e08: f000 80a9 beq.w 8034f5e <_svfiprintf_r+0x1c6> + 8034e0c: 9a09 ldr r2, [sp, #36] ; 0x24 + 8034e0e: 445a add r2, fp + 8034e10: 9209 str r2, [sp, #36] ; 0x24 + 8034e12: f89a 3000 ldrb.w r3, [sl] + 8034e16: 2b00 cmp r3, #0 + 8034e18: f000 80a1 beq.w 8034f5e <_svfiprintf_r+0x1c6> + 8034e1c: 2300 movs r3, #0 + 8034e1e: f04f 32ff mov.w r2, #4294967295 + 8034e22: e9cd 2305 strd r2, r3, [sp, #20] + 8034e26: f10a 0a01 add.w sl, sl, #1 + 8034e2a: 9304 str r3, [sp, #16] + 8034e2c: 9307 str r3, [sp, #28] + 8034e2e: f88d 3053 strb.w r3, [sp, #83] ; 0x53 + 8034e32: 931a str r3, [sp, #104] ; 0x68 + 8034e34: 4654 mov r4, sl + 8034e36: 2205 movs r2, #5 + 8034e38: f814 1b01 ldrb.w r1, [r4], #1 + 8034e3c: 4850 ldr r0, [pc, #320] ; (8034f80 <_svfiprintf_r+0x1e8>) + 8034e3e: f7cb f9e7 bl 8000210 + 8034e42: 9a04 ldr r2, [sp, #16] + 8034e44: b9d8 cbnz r0, 8034e7e <_svfiprintf_r+0xe6> + 8034e46: 06d0 lsls r0, r2, #27 + 8034e48: bf44 itt mi + 8034e4a: 2320 movmi r3, #32 + 8034e4c: f88d 3053 strbmi.w r3, [sp, #83] ; 0x53 + 8034e50: 0711 lsls r1, r2, #28 + 8034e52: bf44 itt mi + 8034e54: 232b movmi r3, #43 ; 0x2b + 8034e56: f88d 3053 strbmi.w r3, [sp, #83] ; 0x53 + 8034e5a: f89a 3000 ldrb.w r3, [sl] + 8034e5e: 2b2a cmp r3, #42 ; 0x2a + 8034e60: d015 beq.n 8034e8e <_svfiprintf_r+0xf6> + 8034e62: 9a07 ldr r2, [sp, #28] + 8034e64: 4654 mov r4, sl + 8034e66: 2000 movs r0, #0 + 8034e68: f04f 0c0a mov.w ip, #10 + 8034e6c: 4621 mov r1, r4 + 8034e6e: f811 3b01 ldrb.w r3, [r1], #1 + 8034e72: 3b30 subs r3, #48 ; 0x30 + 8034e74: 2b09 cmp r3, #9 + 8034e76: d94d bls.n 8034f14 <_svfiprintf_r+0x17c> + 8034e78: b1b0 cbz r0, 8034ea8 <_svfiprintf_r+0x110> + 8034e7a: 9207 str r2, [sp, #28] + 8034e7c: e014 b.n 8034ea8 <_svfiprintf_r+0x110> + 8034e7e: eba0 0308 sub.w r3, r0, r8 + 8034e82: fa09 f303 lsl.w r3, r9, r3 + 8034e86: 4313 orrs r3, r2 + 8034e88: 9304 str r3, [sp, #16] + 8034e8a: 46a2 mov sl, r4 + 8034e8c: e7d2 b.n 8034e34 <_svfiprintf_r+0x9c> + 8034e8e: 9b03 ldr r3, [sp, #12] + 8034e90: 1d19 adds r1, r3, #4 + 8034e92: 681b ldr r3, [r3, #0] + 8034e94: 9103 str r1, [sp, #12] + 8034e96: 2b00 cmp r3, #0 + 8034e98: bfbb ittet lt + 8034e9a: 425b neglt r3, r3 + 8034e9c: f042 0202 orrlt.w r2, r2, #2 + 8034ea0: 9307 strge r3, [sp, #28] + 8034ea2: 9307 strlt r3, [sp, #28] + 8034ea4: bfb8 it lt + 8034ea6: 9204 strlt r2, [sp, #16] + 8034ea8: 7823 ldrb r3, [r4, #0] + 8034eaa: 2b2e cmp r3, #46 ; 0x2e + 8034eac: d10c bne.n 8034ec8 <_svfiprintf_r+0x130> + 8034eae: 7863 ldrb r3, [r4, #1] + 8034eb0: 2b2a cmp r3, #42 ; 0x2a + 8034eb2: d134 bne.n 8034f1e <_svfiprintf_r+0x186> + 8034eb4: 9b03 ldr r3, [sp, #12] + 8034eb6: 1d1a adds r2, r3, #4 + 8034eb8: 681b ldr r3, [r3, #0] + 8034eba: 9203 str r2, [sp, #12] + 8034ebc: 2b00 cmp r3, #0 + 8034ebe: bfb8 it lt + 8034ec0: f04f 33ff movlt.w r3, #4294967295 + 8034ec4: 3402 adds r4, #2 + 8034ec6: 9305 str r3, [sp, #20] + 8034ec8: f8df a0c4 ldr.w sl, [pc, #196] ; 8034f90 <_svfiprintf_r+0x1f8> + 8034ecc: 7821 ldrb r1, [r4, #0] + 8034ece: 2203 movs r2, #3 + 8034ed0: 4650 mov r0, sl + 8034ed2: f7cb f99d bl 8000210 + 8034ed6: b138 cbz r0, 8034ee8 <_svfiprintf_r+0x150> + 8034ed8: 9b04 ldr r3, [sp, #16] + 8034eda: eba0 000a sub.w r0, r0, sl + 8034ede: 2240 movs r2, #64 ; 0x40 + 8034ee0: 4082 lsls r2, r0 + 8034ee2: 4313 orrs r3, r2 + 8034ee4: 3401 adds r4, #1 + 8034ee6: 9304 str r3, [sp, #16] + 8034ee8: f814 1b01 ldrb.w r1, [r4], #1 + 8034eec: 4825 ldr r0, [pc, #148] ; (8034f84 <_svfiprintf_r+0x1ec>) + 8034eee: f88d 1028 strb.w r1, [sp, #40] ; 0x28 + 8034ef2: 2206 movs r2, #6 + 8034ef4: f7cb f98c bl 8000210 + 8034ef8: 2800 cmp r0, #0 + 8034efa: d038 beq.n 8034f6e <_svfiprintf_r+0x1d6> + 8034efc: 4b22 ldr r3, [pc, #136] ; (8034f88 <_svfiprintf_r+0x1f0>) + 8034efe: bb1b cbnz r3, 8034f48 <_svfiprintf_r+0x1b0> + 8034f00: 9b03 ldr r3, [sp, #12] + 8034f02: 3307 adds r3, #7 + 8034f04: f023 0307 bic.w r3, r3, #7 + 8034f08: 3308 adds r3, #8 + 8034f0a: 9303 str r3, [sp, #12] + 8034f0c: 9b09 ldr r3, [sp, #36] ; 0x24 + 8034f0e: 4433 add r3, r6 + 8034f10: 9309 str r3, [sp, #36] ; 0x24 + 8034f12: e768 b.n 8034de6 <_svfiprintf_r+0x4e> + 8034f14: fb0c 3202 mla r2, ip, r2, r3 + 8034f18: 460c mov r4, r1 + 8034f1a: 2001 movs r0, #1 + 8034f1c: e7a6 b.n 8034e6c <_svfiprintf_r+0xd4> + 8034f1e: 2300 movs r3, #0 + 8034f20: 3401 adds r4, #1 + 8034f22: 9305 str r3, [sp, #20] + 8034f24: 4619 mov r1, r3 + 8034f26: f04f 0c0a mov.w ip, #10 + 8034f2a: 4620 mov r0, r4 + 8034f2c: f810 2b01 ldrb.w r2, [r0], #1 + 8034f30: 3a30 subs r2, #48 ; 0x30 + 8034f32: 2a09 cmp r2, #9 + 8034f34: d903 bls.n 8034f3e <_svfiprintf_r+0x1a6> + 8034f36: 2b00 cmp r3, #0 + 8034f38: d0c6 beq.n 8034ec8 <_svfiprintf_r+0x130> + 8034f3a: 9105 str r1, [sp, #20] + 8034f3c: e7c4 b.n 8034ec8 <_svfiprintf_r+0x130> + 8034f3e: fb0c 2101 mla r1, ip, r1, r2 + 8034f42: 4604 mov r4, r0 + 8034f44: 2301 movs r3, #1 + 8034f46: e7f0 b.n 8034f2a <_svfiprintf_r+0x192> + 8034f48: ab03 add r3, sp, #12 + 8034f4a: 9300 str r3, [sp, #0] + 8034f4c: 462a mov r2, r5 + 8034f4e: 4b0f ldr r3, [pc, #60] ; (8034f8c <_svfiprintf_r+0x1f4>) + 8034f50: a904 add r1, sp, #16 + 8034f52: 4638 mov r0, r7 + 8034f54: f3af 8000 nop.w + 8034f58: 1c42 adds r2, r0, #1 + 8034f5a: 4606 mov r6, r0 + 8034f5c: d1d6 bne.n 8034f0c <_svfiprintf_r+0x174> + 8034f5e: 89ab ldrh r3, [r5, #12] + 8034f60: 065b lsls r3, r3, #25 + 8034f62: f53f af2d bmi.w 8034dc0 <_svfiprintf_r+0x28> + 8034f66: 9809 ldr r0, [sp, #36] ; 0x24 + 8034f68: b01d add sp, #116 ; 0x74 + 8034f6a: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 8034f6e: ab03 add r3, sp, #12 + 8034f70: 9300 str r3, [sp, #0] + 8034f72: 462a mov r2, r5 + 8034f74: 4b05 ldr r3, [pc, #20] ; (8034f8c <_svfiprintf_r+0x1f4>) + 8034f76: a904 add r1, sp, #16 + 8034f78: 4638 mov r0, r7 + 8034f7a: f000 f9bd bl 80352f8 <_printf_i> + 8034f7e: e7eb b.n 8034f58 <_svfiprintf_r+0x1c0> + 8034f80: 0803cb28 .word 0x0803cb28 + 8034f84: 0803cb32 .word 0x0803cb32 + 8034f88: 00000000 .word 0x00000000 + 8034f8c: 08034ce5 .word 0x08034ce5 + 8034f90: 0803cb2e .word 0x0803cb2e + +08034f94 <__sfputc_r>: + 8034f94: 6893 ldr r3, [r2, #8] + 8034f96: 3b01 subs r3, #1 + 8034f98: 2b00 cmp r3, #0 + 8034f9a: b410 push {r4} + 8034f9c: 6093 str r3, [r2, #8] + 8034f9e: da08 bge.n 8034fb2 <__sfputc_r+0x1e> + 8034fa0: 6994 ldr r4, [r2, #24] + 8034fa2: 42a3 cmp r3, r4 + 8034fa4: db01 blt.n 8034faa <__sfputc_r+0x16> + 8034fa6: 290a cmp r1, #10 + 8034fa8: d103 bne.n 8034fb2 <__sfputc_r+0x1e> + 8034faa: f85d 4b04 ldr.w r4, [sp], #4 + 8034fae: f7ff bc46 b.w 803483e <__swbuf_r> + 8034fb2: 6813 ldr r3, [r2, #0] + 8034fb4: 1c58 adds r0, r3, #1 + 8034fb6: 6010 str r0, [r2, #0] + 8034fb8: 7019 strb r1, [r3, #0] + 8034fba: 4608 mov r0, r1 + 8034fbc: f85d 4b04 ldr.w r4, [sp], #4 + 8034fc0: 4770 bx lr + +08034fc2 <__sfputs_r>: + 8034fc2: b5f8 push {r3, r4, r5, r6, r7, lr} + 8034fc4: 4606 mov r6, r0 + 8034fc6: 460f mov r7, r1 + 8034fc8: 4614 mov r4, r2 + 8034fca: 18d5 adds r5, r2, r3 + 8034fcc: 42ac cmp r4, r5 + 8034fce: d101 bne.n 8034fd4 <__sfputs_r+0x12> + 8034fd0: 2000 movs r0, #0 + 8034fd2: e007 b.n 8034fe4 <__sfputs_r+0x22> + 8034fd4: f814 1b01 ldrb.w r1, [r4], #1 + 8034fd8: 463a mov r2, r7 + 8034fda: 4630 mov r0, r6 + 8034fdc: f7ff ffda bl 8034f94 <__sfputc_r> + 8034fe0: 1c43 adds r3, r0, #1 + 8034fe2: d1f3 bne.n 8034fcc <__sfputs_r+0xa> + 8034fe4: bdf8 pop {r3, r4, r5, r6, r7, pc} + ... + +08034fe8 <_vfiprintf_r>: + 8034fe8: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8034fec: 460d mov r5, r1 + 8034fee: b09d sub sp, #116 ; 0x74 + 8034ff0: 4614 mov r4, r2 + 8034ff2: 4698 mov r8, r3 + 8034ff4: 4606 mov r6, r0 + 8034ff6: b118 cbz r0, 8035000 <_vfiprintf_r+0x18> + 8034ff8: 6a03 ldr r3, [r0, #32] + 8034ffa: b90b cbnz r3, 8035000 <_vfiprintf_r+0x18> + 8034ffc: f7ff fb62 bl 80346c4 <__sinit> + 8035000: 6e6b ldr r3, [r5, #100] ; 0x64 + 8035002: 07d9 lsls r1, r3, #31 + 8035004: d405 bmi.n 8035012 <_vfiprintf_r+0x2a> + 8035006: 89ab ldrh r3, [r5, #12] + 8035008: 059a lsls r2, r3, #22 + 803500a: d402 bmi.n 8035012 <_vfiprintf_r+0x2a> + 803500c: 6da8 ldr r0, [r5, #88] ; 0x58 + 803500e: f7ff fdae bl 8034b6e <__retarget_lock_acquire_recursive> + 8035012: 89ab ldrh r3, [r5, #12] + 8035014: 071b lsls r3, r3, #28 + 8035016: d501 bpl.n 803501c <_vfiprintf_r+0x34> + 8035018: 692b ldr r3, [r5, #16] + 803501a: b99b cbnz r3, 8035044 <_vfiprintf_r+0x5c> + 803501c: 4629 mov r1, r5 + 803501e: 4630 mov r0, r6 + 8035020: f7ff fc4a bl 80348b8 <__swsetup_r> + 8035024: b170 cbz r0, 8035044 <_vfiprintf_r+0x5c> + 8035026: 6e6b ldr r3, [r5, #100] ; 0x64 + 8035028: 07dc lsls r4, r3, #31 + 803502a: d504 bpl.n 8035036 <_vfiprintf_r+0x4e> + 803502c: f04f 30ff mov.w r0, #4294967295 + 8035030: b01d add sp, #116 ; 0x74 + 8035032: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 8035036: 89ab ldrh r3, [r5, #12] + 8035038: 0598 lsls r0, r3, #22 + 803503a: d4f7 bmi.n 803502c <_vfiprintf_r+0x44> + 803503c: 6da8 ldr r0, [r5, #88] ; 0x58 + 803503e: f7ff fd97 bl 8034b70 <__retarget_lock_release_recursive> + 8035042: e7f3 b.n 803502c <_vfiprintf_r+0x44> + 8035044: 2300 movs r3, #0 + 8035046: 9309 str r3, [sp, #36] ; 0x24 + 8035048: 2320 movs r3, #32 + 803504a: f88d 3029 strb.w r3, [sp, #41] ; 0x29 + 803504e: f8cd 800c str.w r8, [sp, #12] + 8035052: 2330 movs r3, #48 ; 0x30 + 8035054: f8df 81b0 ldr.w r8, [pc, #432] ; 8035208 <_vfiprintf_r+0x220> + 8035058: f88d 302a strb.w r3, [sp, #42] ; 0x2a + 803505c: f04f 0901 mov.w r9, #1 + 8035060: 4623 mov r3, r4 + 8035062: 469a mov sl, r3 + 8035064: f813 2b01 ldrb.w r2, [r3], #1 + 8035068: b10a cbz r2, 803506e <_vfiprintf_r+0x86> + 803506a: 2a25 cmp r2, #37 ; 0x25 + 803506c: d1f9 bne.n 8035062 <_vfiprintf_r+0x7a> + 803506e: ebba 0b04 subs.w fp, sl, r4 + 8035072: d00b beq.n 803508c <_vfiprintf_r+0xa4> + 8035074: 465b mov r3, fp + 8035076: 4622 mov r2, r4 + 8035078: 4629 mov r1, r5 + 803507a: 4630 mov r0, r6 + 803507c: f7ff ffa1 bl 8034fc2 <__sfputs_r> + 8035080: 3001 adds r0, #1 + 8035082: f000 80a9 beq.w 80351d8 <_vfiprintf_r+0x1f0> + 8035086: 9a09 ldr r2, [sp, #36] ; 0x24 + 8035088: 445a add r2, fp + 803508a: 9209 str r2, [sp, #36] ; 0x24 + 803508c: f89a 3000 ldrb.w r3, [sl] + 8035090: 2b00 cmp r3, #0 + 8035092: f000 80a1 beq.w 80351d8 <_vfiprintf_r+0x1f0> + 8035096: 2300 movs r3, #0 + 8035098: f04f 32ff mov.w r2, #4294967295 + 803509c: e9cd 2305 strd r2, r3, [sp, #20] + 80350a0: f10a 0a01 add.w sl, sl, #1 + 80350a4: 9304 str r3, [sp, #16] + 80350a6: 9307 str r3, [sp, #28] + 80350a8: f88d 3053 strb.w r3, [sp, #83] ; 0x53 + 80350ac: 931a str r3, [sp, #104] ; 0x68 + 80350ae: 4654 mov r4, sl + 80350b0: 2205 movs r2, #5 + 80350b2: f814 1b01 ldrb.w r1, [r4], #1 + 80350b6: 4854 ldr r0, [pc, #336] ; (8035208 <_vfiprintf_r+0x220>) + 80350b8: f7cb f8aa bl 8000210 + 80350bc: 9a04 ldr r2, [sp, #16] + 80350be: b9d8 cbnz r0, 80350f8 <_vfiprintf_r+0x110> + 80350c0: 06d1 lsls r1, r2, #27 + 80350c2: bf44 itt mi + 80350c4: 2320 movmi r3, #32 + 80350c6: f88d 3053 strbmi.w r3, [sp, #83] ; 0x53 + 80350ca: 0713 lsls r3, r2, #28 + 80350cc: bf44 itt mi + 80350ce: 232b movmi r3, #43 ; 0x2b + 80350d0: f88d 3053 strbmi.w r3, [sp, #83] ; 0x53 + 80350d4: f89a 3000 ldrb.w r3, [sl] + 80350d8: 2b2a cmp r3, #42 ; 0x2a + 80350da: d015 beq.n 8035108 <_vfiprintf_r+0x120> + 80350dc: 9a07 ldr r2, [sp, #28] + 80350de: 4654 mov r4, sl + 80350e0: 2000 movs r0, #0 + 80350e2: f04f 0c0a mov.w ip, #10 + 80350e6: 4621 mov r1, r4 + 80350e8: f811 3b01 ldrb.w r3, [r1], #1 + 80350ec: 3b30 subs r3, #48 ; 0x30 + 80350ee: 2b09 cmp r3, #9 + 80350f0: d94d bls.n 803518e <_vfiprintf_r+0x1a6> + 80350f2: b1b0 cbz r0, 8035122 <_vfiprintf_r+0x13a> + 80350f4: 9207 str r2, [sp, #28] + 80350f6: e014 b.n 8035122 <_vfiprintf_r+0x13a> + 80350f8: eba0 0308 sub.w r3, r0, r8 + 80350fc: fa09 f303 lsl.w r3, r9, r3 + 8035100: 4313 orrs r3, r2 + 8035102: 9304 str r3, [sp, #16] + 8035104: 46a2 mov sl, r4 + 8035106: e7d2 b.n 80350ae <_vfiprintf_r+0xc6> + 8035108: 9b03 ldr r3, [sp, #12] + 803510a: 1d19 adds r1, r3, #4 + 803510c: 681b ldr r3, [r3, #0] + 803510e: 9103 str r1, [sp, #12] + 8035110: 2b00 cmp r3, #0 + 8035112: bfbb ittet lt + 8035114: 425b neglt r3, r3 + 8035116: f042 0202 orrlt.w r2, r2, #2 + 803511a: 9307 strge r3, [sp, #28] + 803511c: 9307 strlt r3, [sp, #28] + 803511e: bfb8 it lt + 8035120: 9204 strlt r2, [sp, #16] + 8035122: 7823 ldrb r3, [r4, #0] + 8035124: 2b2e cmp r3, #46 ; 0x2e + 8035126: d10c bne.n 8035142 <_vfiprintf_r+0x15a> + 8035128: 7863 ldrb r3, [r4, #1] + 803512a: 2b2a cmp r3, #42 ; 0x2a + 803512c: d134 bne.n 8035198 <_vfiprintf_r+0x1b0> + 803512e: 9b03 ldr r3, [sp, #12] + 8035130: 1d1a adds r2, r3, #4 + 8035132: 681b ldr r3, [r3, #0] + 8035134: 9203 str r2, [sp, #12] + 8035136: 2b00 cmp r3, #0 + 8035138: bfb8 it lt + 803513a: f04f 33ff movlt.w r3, #4294967295 + 803513e: 3402 adds r4, #2 + 8035140: 9305 str r3, [sp, #20] + 8035142: f8df a0d4 ldr.w sl, [pc, #212] ; 8035218 <_vfiprintf_r+0x230> + 8035146: 7821 ldrb r1, [r4, #0] + 8035148: 2203 movs r2, #3 + 803514a: 4650 mov r0, sl + 803514c: f7cb f860 bl 8000210 + 8035150: b138 cbz r0, 8035162 <_vfiprintf_r+0x17a> + 8035152: 9b04 ldr r3, [sp, #16] + 8035154: eba0 000a sub.w r0, r0, sl + 8035158: 2240 movs r2, #64 ; 0x40 + 803515a: 4082 lsls r2, r0 + 803515c: 4313 orrs r3, r2 + 803515e: 3401 adds r4, #1 + 8035160: 9304 str r3, [sp, #16] + 8035162: f814 1b01 ldrb.w r1, [r4], #1 + 8035166: 4829 ldr r0, [pc, #164] ; (803520c <_vfiprintf_r+0x224>) + 8035168: f88d 1028 strb.w r1, [sp, #40] ; 0x28 + 803516c: 2206 movs r2, #6 + 803516e: f7cb f84f bl 8000210 + 8035172: 2800 cmp r0, #0 + 8035174: d03f beq.n 80351f6 <_vfiprintf_r+0x20e> + 8035176: 4b26 ldr r3, [pc, #152] ; (8035210 <_vfiprintf_r+0x228>) + 8035178: bb1b cbnz r3, 80351c2 <_vfiprintf_r+0x1da> + 803517a: 9b03 ldr r3, [sp, #12] + 803517c: 3307 adds r3, #7 + 803517e: f023 0307 bic.w r3, r3, #7 + 8035182: 3308 adds r3, #8 + 8035184: 9303 str r3, [sp, #12] + 8035186: 9b09 ldr r3, [sp, #36] ; 0x24 + 8035188: 443b add r3, r7 + 803518a: 9309 str r3, [sp, #36] ; 0x24 + 803518c: e768 b.n 8035060 <_vfiprintf_r+0x78> + 803518e: fb0c 3202 mla r2, ip, r2, r3 + 8035192: 460c mov r4, r1 + 8035194: 2001 movs r0, #1 + 8035196: e7a6 b.n 80350e6 <_vfiprintf_r+0xfe> + 8035198: 2300 movs r3, #0 + 803519a: 3401 adds r4, #1 + 803519c: 9305 str r3, [sp, #20] + 803519e: 4619 mov r1, r3 + 80351a0: f04f 0c0a mov.w ip, #10 + 80351a4: 4620 mov r0, r4 + 80351a6: f810 2b01 ldrb.w r2, [r0], #1 + 80351aa: 3a30 subs r2, #48 ; 0x30 + 80351ac: 2a09 cmp r2, #9 + 80351ae: d903 bls.n 80351b8 <_vfiprintf_r+0x1d0> + 80351b0: 2b00 cmp r3, #0 + 80351b2: d0c6 beq.n 8035142 <_vfiprintf_r+0x15a> + 80351b4: 9105 str r1, [sp, #20] + 80351b6: e7c4 b.n 8035142 <_vfiprintf_r+0x15a> + 80351b8: fb0c 2101 mla r1, ip, r1, r2 + 80351bc: 4604 mov r4, r0 + 80351be: 2301 movs r3, #1 + 80351c0: e7f0 b.n 80351a4 <_vfiprintf_r+0x1bc> + 80351c2: ab03 add r3, sp, #12 + 80351c4: 9300 str r3, [sp, #0] + 80351c6: 462a mov r2, r5 + 80351c8: 4b12 ldr r3, [pc, #72] ; (8035214 <_vfiprintf_r+0x22c>) + 80351ca: a904 add r1, sp, #16 + 80351cc: 4630 mov r0, r6 + 80351ce: f3af 8000 nop.w + 80351d2: 4607 mov r7, r0 + 80351d4: 1c78 adds r0, r7, #1 + 80351d6: d1d6 bne.n 8035186 <_vfiprintf_r+0x19e> + 80351d8: 6e6b ldr r3, [r5, #100] ; 0x64 + 80351da: 07d9 lsls r1, r3, #31 + 80351dc: d405 bmi.n 80351ea <_vfiprintf_r+0x202> + 80351de: 89ab ldrh r3, [r5, #12] + 80351e0: 059a lsls r2, r3, #22 + 80351e2: d402 bmi.n 80351ea <_vfiprintf_r+0x202> + 80351e4: 6da8 ldr r0, [r5, #88] ; 0x58 + 80351e6: f7ff fcc3 bl 8034b70 <__retarget_lock_release_recursive> + 80351ea: 89ab ldrh r3, [r5, #12] + 80351ec: 065b lsls r3, r3, #25 + 80351ee: f53f af1d bmi.w 803502c <_vfiprintf_r+0x44> + 80351f2: 9809 ldr r0, [sp, #36] ; 0x24 + 80351f4: e71c b.n 8035030 <_vfiprintf_r+0x48> + 80351f6: ab03 add r3, sp, #12 + 80351f8: 9300 str r3, [sp, #0] + 80351fa: 462a mov r2, r5 + 80351fc: 4b05 ldr r3, [pc, #20] ; (8035214 <_vfiprintf_r+0x22c>) + 80351fe: a904 add r1, sp, #16 + 8035200: 4630 mov r0, r6 + 8035202: f000 f879 bl 80352f8 <_printf_i> + 8035206: e7e4 b.n 80351d2 <_vfiprintf_r+0x1ea> + 8035208: 0803cb28 .word 0x0803cb28 + 803520c: 0803cb32 .word 0x0803cb32 + 8035210: 00000000 .word 0x00000000 + 8035214: 08034fc3 .word 0x08034fc3 + 8035218: 0803cb2e .word 0x0803cb2e + +0803521c <_printf_common>: + 803521c: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} + 8035220: 4616 mov r6, r2 + 8035222: 4699 mov r9, r3 + 8035224: 688a ldr r2, [r1, #8] + 8035226: 690b ldr r3, [r1, #16] + 8035228: f8dd 8020 ldr.w r8, [sp, #32] + 803522c: 4293 cmp r3, r2 + 803522e: bfb8 it lt + 8035230: 4613 movlt r3, r2 + 8035232: 6033 str r3, [r6, #0] + 8035234: f891 2043 ldrb.w r2, [r1, #67] ; 0x43 + 8035238: 4607 mov r7, r0 + 803523a: 460c mov r4, r1 + 803523c: b10a cbz r2, 8035242 <_printf_common+0x26> + 803523e: 3301 adds r3, #1 + 8035240: 6033 str r3, [r6, #0] + 8035242: 6823 ldr r3, [r4, #0] + 8035244: 0699 lsls r1, r3, #26 + 8035246: bf42 ittt mi + 8035248: 6833 ldrmi r3, [r6, #0] + 803524a: 3302 addmi r3, #2 + 803524c: 6033 strmi r3, [r6, #0] + 803524e: 6825 ldr r5, [r4, #0] + 8035250: f015 0506 ands.w r5, r5, #6 + 8035254: d106 bne.n 8035264 <_printf_common+0x48> + 8035256: f104 0a19 add.w sl, r4, #25 + 803525a: 68e3 ldr r3, [r4, #12] + 803525c: 6832 ldr r2, [r6, #0] + 803525e: 1a9b subs r3, r3, r2 + 8035260: 42ab cmp r3, r5 + 8035262: dc26 bgt.n 80352b2 <_printf_common+0x96> + 8035264: f894 2043 ldrb.w r2, [r4, #67] ; 0x43 + 8035268: 1e13 subs r3, r2, #0 + 803526a: 6822 ldr r2, [r4, #0] + 803526c: bf18 it ne + 803526e: 2301 movne r3, #1 + 8035270: 0692 lsls r2, r2, #26 + 8035272: d42b bmi.n 80352cc <_printf_common+0xb0> + 8035274: f104 0243 add.w r2, r4, #67 ; 0x43 + 8035278: 4649 mov r1, r9 + 803527a: 4638 mov r0, r7 + 803527c: 47c0 blx r8 + 803527e: 3001 adds r0, #1 + 8035280: d01e beq.n 80352c0 <_printf_common+0xa4> + 8035282: 6823 ldr r3, [r4, #0] + 8035284: 6922 ldr r2, [r4, #16] + 8035286: f003 0306 and.w r3, r3, #6 + 803528a: 2b04 cmp r3, #4 + 803528c: bf02 ittt eq + 803528e: 68e5 ldreq r5, [r4, #12] + 8035290: 6833 ldreq r3, [r6, #0] + 8035292: 1aed subeq r5, r5, r3 + 8035294: 68a3 ldr r3, [r4, #8] + 8035296: bf0c ite eq + 8035298: ea25 75e5 biceq.w r5, r5, r5, asr #31 + 803529c: 2500 movne r5, #0 + 803529e: 4293 cmp r3, r2 + 80352a0: bfc4 itt gt + 80352a2: 1a9b subgt r3, r3, r2 + 80352a4: 18ed addgt r5, r5, r3 + 80352a6: 2600 movs r6, #0 + 80352a8: 341a adds r4, #26 + 80352aa: 42b5 cmp r5, r6 + 80352ac: d11a bne.n 80352e4 <_printf_common+0xc8> + 80352ae: 2000 movs r0, #0 + 80352b0: e008 b.n 80352c4 <_printf_common+0xa8> + 80352b2: 2301 movs r3, #1 + 80352b4: 4652 mov r2, sl + 80352b6: 4649 mov r1, r9 + 80352b8: 4638 mov r0, r7 + 80352ba: 47c0 blx r8 + 80352bc: 3001 adds r0, #1 + 80352be: d103 bne.n 80352c8 <_printf_common+0xac> + 80352c0: f04f 30ff mov.w r0, #4294967295 + 80352c4: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + 80352c8: 3501 adds r5, #1 + 80352ca: e7c6 b.n 803525a <_printf_common+0x3e> + 80352cc: 18e1 adds r1, r4, r3 + 80352ce: 1c5a adds r2, r3, #1 + 80352d0: 2030 movs r0, #48 ; 0x30 + 80352d2: f881 0043 strb.w r0, [r1, #67] ; 0x43 + 80352d6: 4422 add r2, r4 + 80352d8: f894 1045 ldrb.w r1, [r4, #69] ; 0x45 + 80352dc: f882 1043 strb.w r1, [r2, #67] ; 0x43 + 80352e0: 3302 adds r3, #2 + 80352e2: e7c7 b.n 8035274 <_printf_common+0x58> + 80352e4: 2301 movs r3, #1 + 80352e6: 4622 mov r2, r4 + 80352e8: 4649 mov r1, r9 + 80352ea: 4638 mov r0, r7 + 80352ec: 47c0 blx r8 + 80352ee: 3001 adds r0, #1 + 80352f0: d0e6 beq.n 80352c0 <_printf_common+0xa4> + 80352f2: 3601 adds r6, #1 + 80352f4: e7d9 b.n 80352aa <_printf_common+0x8e> + ... + +080352f8 <_printf_i>: + 80352f8: e92d 47ff stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, lr} + 80352fc: 7e0f ldrb r7, [r1, #24] + 80352fe: 9d0c ldr r5, [sp, #48] ; 0x30 + 8035300: 2f78 cmp r7, #120 ; 0x78 + 8035302: 4691 mov r9, r2 + 8035304: 4680 mov r8, r0 + 8035306: 460c mov r4, r1 + 8035308: 469a mov sl, r3 + 803530a: f101 0243 add.w r2, r1, #67 ; 0x43 + 803530e: d807 bhi.n 8035320 <_printf_i+0x28> + 8035310: 2f62 cmp r7, #98 ; 0x62 + 8035312: d80a bhi.n 803532a <_printf_i+0x32> + 8035314: 2f00 cmp r7, #0 + 8035316: f000 80d4 beq.w 80354c2 <_printf_i+0x1ca> + 803531a: 2f58 cmp r7, #88 ; 0x58 + 803531c: f000 80c0 beq.w 80354a0 <_printf_i+0x1a8> + 8035320: f104 0542 add.w r5, r4, #66 ; 0x42 + 8035324: f884 7042 strb.w r7, [r4, #66] ; 0x42 + 8035328: e03a b.n 80353a0 <_printf_i+0xa8> + 803532a: f1a7 0363 sub.w r3, r7, #99 ; 0x63 + 803532e: 2b15 cmp r3, #21 + 8035330: d8f6 bhi.n 8035320 <_printf_i+0x28> + 8035332: a101 add r1, pc, #4 ; (adr r1, 8035338 <_printf_i+0x40>) + 8035334: f851 f023 ldr.w pc, [r1, r3, lsl #2] + 8035338: 08035391 .word 0x08035391 + 803533c: 080353a5 .word 0x080353a5 + 8035340: 08035321 .word 0x08035321 + 8035344: 08035321 .word 0x08035321 + 8035348: 08035321 .word 0x08035321 + 803534c: 08035321 .word 0x08035321 + 8035350: 080353a5 .word 0x080353a5 + 8035354: 08035321 .word 0x08035321 + 8035358: 08035321 .word 0x08035321 + 803535c: 08035321 .word 0x08035321 + 8035360: 08035321 .word 0x08035321 + 8035364: 080354a9 .word 0x080354a9 + 8035368: 080353d1 .word 0x080353d1 + 803536c: 08035463 .word 0x08035463 + 8035370: 08035321 .word 0x08035321 + 8035374: 08035321 .word 0x08035321 + 8035378: 080354cb .word 0x080354cb + 803537c: 08035321 .word 0x08035321 + 8035380: 080353d1 .word 0x080353d1 + 8035384: 08035321 .word 0x08035321 + 8035388: 08035321 .word 0x08035321 + 803538c: 0803546b .word 0x0803546b + 8035390: 682b ldr r3, [r5, #0] + 8035392: 1d1a adds r2, r3, #4 + 8035394: 681b ldr r3, [r3, #0] + 8035396: 602a str r2, [r5, #0] + 8035398: f104 0542 add.w r5, r4, #66 ; 0x42 + 803539c: f884 3042 strb.w r3, [r4, #66] ; 0x42 + 80353a0: 2301 movs r3, #1 + 80353a2: e09f b.n 80354e4 <_printf_i+0x1ec> + 80353a4: 6820 ldr r0, [r4, #0] + 80353a6: 682b ldr r3, [r5, #0] + 80353a8: 0607 lsls r7, r0, #24 + 80353aa: f103 0104 add.w r1, r3, #4 + 80353ae: 6029 str r1, [r5, #0] + 80353b0: d501 bpl.n 80353b6 <_printf_i+0xbe> + 80353b2: 681e ldr r6, [r3, #0] + 80353b4: e003 b.n 80353be <_printf_i+0xc6> + 80353b6: 0646 lsls r6, r0, #25 + 80353b8: d5fb bpl.n 80353b2 <_printf_i+0xba> + 80353ba: f9b3 6000 ldrsh.w r6, [r3] + 80353be: 2e00 cmp r6, #0 + 80353c0: da03 bge.n 80353ca <_printf_i+0xd2> + 80353c2: 232d movs r3, #45 ; 0x2d + 80353c4: 4276 negs r6, r6 + 80353c6: f884 3043 strb.w r3, [r4, #67] ; 0x43 + 80353ca: 485a ldr r0, [pc, #360] ; (8035534 <_printf_i+0x23c>) + 80353cc: 230a movs r3, #10 + 80353ce: e012 b.n 80353f6 <_printf_i+0xfe> + 80353d0: 682b ldr r3, [r5, #0] + 80353d2: 6820 ldr r0, [r4, #0] + 80353d4: 1d19 adds r1, r3, #4 + 80353d6: 6029 str r1, [r5, #0] + 80353d8: 0605 lsls r5, r0, #24 + 80353da: d501 bpl.n 80353e0 <_printf_i+0xe8> + 80353dc: 681e ldr r6, [r3, #0] + 80353de: e002 b.n 80353e6 <_printf_i+0xee> + 80353e0: 0641 lsls r1, r0, #25 + 80353e2: d5fb bpl.n 80353dc <_printf_i+0xe4> + 80353e4: 881e ldrh r6, [r3, #0] + 80353e6: 4853 ldr r0, [pc, #332] ; (8035534 <_printf_i+0x23c>) + 80353e8: 2f6f cmp r7, #111 ; 0x6f + 80353ea: bf0c ite eq + 80353ec: 2308 moveq r3, #8 + 80353ee: 230a movne r3, #10 + 80353f0: 2100 movs r1, #0 + 80353f2: f884 1043 strb.w r1, [r4, #67] ; 0x43 + 80353f6: 6865 ldr r5, [r4, #4] + 80353f8: 60a5 str r5, [r4, #8] + 80353fa: 2d00 cmp r5, #0 + 80353fc: bfa2 ittt ge + 80353fe: 6821 ldrge r1, [r4, #0] + 8035400: f021 0104 bicge.w r1, r1, #4 + 8035404: 6021 strge r1, [r4, #0] + 8035406: b90e cbnz r6, 803540c <_printf_i+0x114> + 8035408: 2d00 cmp r5, #0 + 803540a: d04b beq.n 80354a4 <_printf_i+0x1ac> + 803540c: 4615 mov r5, r2 + 803540e: fbb6 f1f3 udiv r1, r6, r3 + 8035412: fb03 6711 mls r7, r3, r1, r6 + 8035416: 5dc7 ldrb r7, [r0, r7] + 8035418: f805 7d01 strb.w r7, [r5, #-1]! + 803541c: 4637 mov r7, r6 + 803541e: 42bb cmp r3, r7 + 8035420: 460e mov r6, r1 + 8035422: d9f4 bls.n 803540e <_printf_i+0x116> + 8035424: 2b08 cmp r3, #8 + 8035426: d10b bne.n 8035440 <_printf_i+0x148> + 8035428: 6823 ldr r3, [r4, #0] + 803542a: 07de lsls r6, r3, #31 + 803542c: d508 bpl.n 8035440 <_printf_i+0x148> + 803542e: 6923 ldr r3, [r4, #16] + 8035430: 6861 ldr r1, [r4, #4] + 8035432: 4299 cmp r1, r3 + 8035434: bfde ittt le + 8035436: 2330 movle r3, #48 ; 0x30 + 8035438: f805 3c01 strble.w r3, [r5, #-1] + 803543c: f105 35ff addle.w r5, r5, #4294967295 + 8035440: 1b52 subs r2, r2, r5 + 8035442: 6122 str r2, [r4, #16] + 8035444: f8cd a000 str.w sl, [sp] + 8035448: 464b mov r3, r9 + 803544a: aa03 add r2, sp, #12 + 803544c: 4621 mov r1, r4 + 803544e: 4640 mov r0, r8 + 8035450: f7ff fee4 bl 803521c <_printf_common> + 8035454: 3001 adds r0, #1 + 8035456: d14a bne.n 80354ee <_printf_i+0x1f6> + 8035458: f04f 30ff mov.w r0, #4294967295 + 803545c: b004 add sp, #16 + 803545e: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + 8035462: 6823 ldr r3, [r4, #0] + 8035464: f043 0320 orr.w r3, r3, #32 + 8035468: 6023 str r3, [r4, #0] + 803546a: 4833 ldr r0, [pc, #204] ; (8035538 <_printf_i+0x240>) + 803546c: 2778 movs r7, #120 ; 0x78 + 803546e: f884 7045 strb.w r7, [r4, #69] ; 0x45 + 8035472: 6823 ldr r3, [r4, #0] + 8035474: 6829 ldr r1, [r5, #0] + 8035476: 061f lsls r7, r3, #24 + 8035478: f851 6b04 ldr.w r6, [r1], #4 + 803547c: d402 bmi.n 8035484 <_printf_i+0x18c> + 803547e: 065f lsls r7, r3, #25 + 8035480: bf48 it mi + 8035482: b2b6 uxthmi r6, r6 + 8035484: 07df lsls r7, r3, #31 + 8035486: bf48 it mi + 8035488: f043 0320 orrmi.w r3, r3, #32 + 803548c: 6029 str r1, [r5, #0] + 803548e: bf48 it mi + 8035490: 6023 strmi r3, [r4, #0] + 8035492: b91e cbnz r6, 803549c <_printf_i+0x1a4> + 8035494: 6823 ldr r3, [r4, #0] + 8035496: f023 0320 bic.w r3, r3, #32 + 803549a: 6023 str r3, [r4, #0] + 803549c: 2310 movs r3, #16 + 803549e: e7a7 b.n 80353f0 <_printf_i+0xf8> + 80354a0: 4824 ldr r0, [pc, #144] ; (8035534 <_printf_i+0x23c>) + 80354a2: e7e4 b.n 803546e <_printf_i+0x176> + 80354a4: 4615 mov r5, r2 + 80354a6: e7bd b.n 8035424 <_printf_i+0x12c> + 80354a8: 682b ldr r3, [r5, #0] + 80354aa: 6826 ldr r6, [r4, #0] + 80354ac: 6961 ldr r1, [r4, #20] + 80354ae: 1d18 adds r0, r3, #4 + 80354b0: 6028 str r0, [r5, #0] + 80354b2: 0635 lsls r5, r6, #24 + 80354b4: 681b ldr r3, [r3, #0] + 80354b6: d501 bpl.n 80354bc <_printf_i+0x1c4> + 80354b8: 6019 str r1, [r3, #0] + 80354ba: e002 b.n 80354c2 <_printf_i+0x1ca> + 80354bc: 0670 lsls r0, r6, #25 + 80354be: d5fb bpl.n 80354b8 <_printf_i+0x1c0> + 80354c0: 8019 strh r1, [r3, #0] + 80354c2: 2300 movs r3, #0 + 80354c4: 6123 str r3, [r4, #16] + 80354c6: 4615 mov r5, r2 + 80354c8: e7bc b.n 8035444 <_printf_i+0x14c> + 80354ca: 682b ldr r3, [r5, #0] + 80354cc: 1d1a adds r2, r3, #4 + 80354ce: 602a str r2, [r5, #0] + 80354d0: 681d ldr r5, [r3, #0] + 80354d2: 6862 ldr r2, [r4, #4] + 80354d4: 2100 movs r1, #0 + 80354d6: 4628 mov r0, r5 + 80354d8: f7ca fe9a bl 8000210 + 80354dc: b108 cbz r0, 80354e2 <_printf_i+0x1ea> + 80354de: 1b40 subs r0, r0, r5 + 80354e0: 6060 str r0, [r4, #4] + 80354e2: 6863 ldr r3, [r4, #4] + 80354e4: 6123 str r3, [r4, #16] + 80354e6: 2300 movs r3, #0 + 80354e8: f884 3043 strb.w r3, [r4, #67] ; 0x43 + 80354ec: e7aa b.n 8035444 <_printf_i+0x14c> + 80354ee: 6923 ldr r3, [r4, #16] + 80354f0: 462a mov r2, r5 + 80354f2: 4649 mov r1, r9 + 80354f4: 4640 mov r0, r8 + 80354f6: 47d0 blx sl + 80354f8: 3001 adds r0, #1 + 80354fa: d0ad beq.n 8035458 <_printf_i+0x160> + 80354fc: 6823 ldr r3, [r4, #0] + 80354fe: 079b lsls r3, r3, #30 + 8035500: d413 bmi.n 803552a <_printf_i+0x232> + 8035502: 68e0 ldr r0, [r4, #12] + 8035504: 9b03 ldr r3, [sp, #12] + 8035506: 4298 cmp r0, r3 + 8035508: bfb8 it lt + 803550a: 4618 movlt r0, r3 + 803550c: e7a6 b.n 803545c <_printf_i+0x164> + 803550e: 2301 movs r3, #1 + 8035510: 4632 mov r2, r6 + 8035512: 4649 mov r1, r9 + 8035514: 4640 mov r0, r8 + 8035516: 47d0 blx sl + 8035518: 3001 adds r0, #1 + 803551a: d09d beq.n 8035458 <_printf_i+0x160> + 803551c: 3501 adds r5, #1 + 803551e: 68e3 ldr r3, [r4, #12] + 8035520: 9903 ldr r1, [sp, #12] + 8035522: 1a5b subs r3, r3, r1 + 8035524: 42ab cmp r3, r5 + 8035526: dcf2 bgt.n 803550e <_printf_i+0x216> + 8035528: e7eb b.n 8035502 <_printf_i+0x20a> + 803552a: 2500 movs r5, #0 + 803552c: f104 0619 add.w r6, r4, #25 + 8035530: e7f5 b.n 803551e <_printf_i+0x226> + 8035532: bf00 nop + 8035534: 0803cb39 .word 0x0803cb39 + 8035538: 0803cb4a .word 0x0803cb4a + +0803553c <__sflush_r>: + 803553c: 898a ldrh r2, [r1, #12] + 803553e: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} + 8035542: 4605 mov r5, r0 + 8035544: 0710 lsls r0, r2, #28 + 8035546: 460c mov r4, r1 + 8035548: d458 bmi.n 80355fc <__sflush_r+0xc0> + 803554a: 684b ldr r3, [r1, #4] + 803554c: 2b00 cmp r3, #0 + 803554e: dc05 bgt.n 803555c <__sflush_r+0x20> + 8035550: 6c0b ldr r3, [r1, #64] ; 0x40 + 8035552: 2b00 cmp r3, #0 + 8035554: dc02 bgt.n 803555c <__sflush_r+0x20> + 8035556: 2000 movs r0, #0 + 8035558: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + 803555c: 6ae6 ldr r6, [r4, #44] ; 0x2c + 803555e: 2e00 cmp r6, #0 + 8035560: d0f9 beq.n 8035556 <__sflush_r+0x1a> + 8035562: 2300 movs r3, #0 + 8035564: f412 5280 ands.w r2, r2, #4096 ; 0x1000 + 8035568: 682f ldr r7, [r5, #0] + 803556a: 6a21 ldr r1, [r4, #32] + 803556c: 602b str r3, [r5, #0] + 803556e: d032 beq.n 80355d6 <__sflush_r+0x9a> + 8035570: 6d60 ldr r0, [r4, #84] ; 0x54 + 8035572: 89a3 ldrh r3, [r4, #12] + 8035574: 075a lsls r2, r3, #29 + 8035576: d505 bpl.n 8035584 <__sflush_r+0x48> + 8035578: 6863 ldr r3, [r4, #4] + 803557a: 1ac0 subs r0, r0, r3 + 803557c: 6b63 ldr r3, [r4, #52] ; 0x34 + 803557e: b10b cbz r3, 8035584 <__sflush_r+0x48> + 8035580: 6c23 ldr r3, [r4, #64] ; 0x40 + 8035582: 1ac0 subs r0, r0, r3 + 8035584: 2300 movs r3, #0 + 8035586: 4602 mov r2, r0 + 8035588: 6ae6 ldr r6, [r4, #44] ; 0x2c + 803558a: 6a21 ldr r1, [r4, #32] + 803558c: 4628 mov r0, r5 + 803558e: 47b0 blx r6 + 8035590: 1c43 adds r3, r0, #1 + 8035592: 89a3 ldrh r3, [r4, #12] + 8035594: d106 bne.n 80355a4 <__sflush_r+0x68> + 8035596: 6829 ldr r1, [r5, #0] + 8035598: 291d cmp r1, #29 + 803559a: d82b bhi.n 80355f4 <__sflush_r+0xb8> + 803559c: 4a29 ldr r2, [pc, #164] ; (8035644 <__sflush_r+0x108>) + 803559e: 410a asrs r2, r1 + 80355a0: 07d6 lsls r6, r2, #31 + 80355a2: d427 bmi.n 80355f4 <__sflush_r+0xb8> + 80355a4: 2200 movs r2, #0 + 80355a6: 6062 str r2, [r4, #4] + 80355a8: 04d9 lsls r1, r3, #19 + 80355aa: 6922 ldr r2, [r4, #16] + 80355ac: 6022 str r2, [r4, #0] + 80355ae: d504 bpl.n 80355ba <__sflush_r+0x7e> + 80355b0: 1c42 adds r2, r0, #1 + 80355b2: d101 bne.n 80355b8 <__sflush_r+0x7c> + 80355b4: 682b ldr r3, [r5, #0] + 80355b6: b903 cbnz r3, 80355ba <__sflush_r+0x7e> + 80355b8: 6560 str r0, [r4, #84] ; 0x54 + 80355ba: 6b61 ldr r1, [r4, #52] ; 0x34 + 80355bc: 602f str r7, [r5, #0] + 80355be: 2900 cmp r1, #0 + 80355c0: d0c9 beq.n 8035556 <__sflush_r+0x1a> + 80355c2: f104 0344 add.w r3, r4, #68 ; 0x44 + 80355c6: 4299 cmp r1, r3 + 80355c8: d002 beq.n 80355d0 <__sflush_r+0x94> + 80355ca: 4628 mov r0, r5 + 80355cc: f7ff fb3e bl 8034c4c <_free_r> + 80355d0: 2000 movs r0, #0 + 80355d2: 6360 str r0, [r4, #52] ; 0x34 + 80355d4: e7c0 b.n 8035558 <__sflush_r+0x1c> + 80355d6: 2301 movs r3, #1 + 80355d8: 4628 mov r0, r5 + 80355da: 47b0 blx r6 + 80355dc: 1c41 adds r1, r0, #1 + 80355de: d1c8 bne.n 8035572 <__sflush_r+0x36> + 80355e0: 682b ldr r3, [r5, #0] + 80355e2: 2b00 cmp r3, #0 + 80355e4: d0c5 beq.n 8035572 <__sflush_r+0x36> + 80355e6: 2b1d cmp r3, #29 + 80355e8: d001 beq.n 80355ee <__sflush_r+0xb2> + 80355ea: 2b16 cmp r3, #22 + 80355ec: d101 bne.n 80355f2 <__sflush_r+0xb6> + 80355ee: 602f str r7, [r5, #0] + 80355f0: e7b1 b.n 8035556 <__sflush_r+0x1a> + 80355f2: 89a3 ldrh r3, [r4, #12] + 80355f4: f043 0340 orr.w r3, r3, #64 ; 0x40 + 80355f8: 81a3 strh r3, [r4, #12] + 80355fa: e7ad b.n 8035558 <__sflush_r+0x1c> + 80355fc: 690f ldr r7, [r1, #16] + 80355fe: 2f00 cmp r7, #0 + 8035600: d0a9 beq.n 8035556 <__sflush_r+0x1a> + 8035602: 0793 lsls r3, r2, #30 + 8035604: 680e ldr r6, [r1, #0] + 8035606: bf08 it eq + 8035608: 694b ldreq r3, [r1, #20] + 803560a: 600f str r7, [r1, #0] + 803560c: bf18 it ne + 803560e: 2300 movne r3, #0 + 8035610: eba6 0807 sub.w r8, r6, r7 + 8035614: 608b str r3, [r1, #8] + 8035616: f1b8 0f00 cmp.w r8, #0 + 803561a: dd9c ble.n 8035556 <__sflush_r+0x1a> + 803561c: 6a21 ldr r1, [r4, #32] + 803561e: 6aa6 ldr r6, [r4, #40] ; 0x28 + 8035620: 4643 mov r3, r8 + 8035622: 463a mov r2, r7 + 8035624: 4628 mov r0, r5 + 8035626: 47b0 blx r6 + 8035628: 2800 cmp r0, #0 + 803562a: dc06 bgt.n 803563a <__sflush_r+0xfe> + 803562c: 89a3 ldrh r3, [r4, #12] + 803562e: f043 0340 orr.w r3, r3, #64 ; 0x40 + 8035632: 81a3 strh r3, [r4, #12] + 8035634: f04f 30ff mov.w r0, #4294967295 + 8035638: e78e b.n 8035558 <__sflush_r+0x1c> + 803563a: 4407 add r7, r0 + 803563c: eba8 0800 sub.w r8, r8, r0 + 8035640: e7e9 b.n 8035616 <__sflush_r+0xda> + 8035642: bf00 nop + 8035644: dfbffffe .word 0xdfbffffe + +08035648 <_fflush_r>: + 8035648: b538 push {r3, r4, r5, lr} + 803564a: 690b ldr r3, [r1, #16] + 803564c: 4605 mov r5, r0 + 803564e: 460c mov r4, r1 + 8035650: b913 cbnz r3, 8035658 <_fflush_r+0x10> + 8035652: 2500 movs r5, #0 + 8035654: 4628 mov r0, r5 + 8035656: bd38 pop {r3, r4, r5, pc} + 8035658: b118 cbz r0, 8035662 <_fflush_r+0x1a> + 803565a: 6a03 ldr r3, [r0, #32] + 803565c: b90b cbnz r3, 8035662 <_fflush_r+0x1a> + 803565e: f7ff f831 bl 80346c4 <__sinit> + 8035662: f9b4 300c ldrsh.w r3, [r4, #12] + 8035666: 2b00 cmp r3, #0 + 8035668: d0f3 beq.n 8035652 <_fflush_r+0xa> + 803566a: 6e62 ldr r2, [r4, #100] ; 0x64 + 803566c: 07d0 lsls r0, r2, #31 + 803566e: d404 bmi.n 803567a <_fflush_r+0x32> + 8035670: 0599 lsls r1, r3, #22 + 8035672: d402 bmi.n 803567a <_fflush_r+0x32> + 8035674: 6da0 ldr r0, [r4, #88] ; 0x58 + 8035676: f7ff fa7a bl 8034b6e <__retarget_lock_acquire_recursive> + 803567a: 4628 mov r0, r5 + 803567c: 4621 mov r1, r4 + 803567e: f7ff ff5d bl 803553c <__sflush_r> + 8035682: 6e63 ldr r3, [r4, #100] ; 0x64 + 8035684: 07da lsls r2, r3, #31 + 8035686: 4605 mov r5, r0 + 8035688: d4e4 bmi.n 8035654 <_fflush_r+0xc> + 803568a: 89a3 ldrh r3, [r4, #12] + 803568c: 059b lsls r3, r3, #22 + 803568e: d4e1 bmi.n 8035654 <_fflush_r+0xc> + 8035690: 6da0 ldr r0, [r4, #88] ; 0x58 + 8035692: f7ff fa6d bl 8034b70 <__retarget_lock_release_recursive> + 8035696: e7dd b.n 8035654 <_fflush_r+0xc> + +08035698 <__swhatbuf_r>: + 8035698: b570 push {r4, r5, r6, lr} + 803569a: 460c mov r4, r1 + 803569c: f9b1 100e ldrsh.w r1, [r1, #14] + 80356a0: 2900 cmp r1, #0 + 80356a2: b096 sub sp, #88 ; 0x58 + 80356a4: 4615 mov r5, r2 + 80356a6: 461e mov r6, r3 + 80356a8: da0d bge.n 80356c6 <__swhatbuf_r+0x2e> + 80356aa: 89a3 ldrh r3, [r4, #12] + 80356ac: f013 0f80 tst.w r3, #128 ; 0x80 + 80356b0: f04f 0100 mov.w r1, #0 + 80356b4: bf0c ite eq + 80356b6: f44f 6380 moveq.w r3, #1024 ; 0x400 + 80356ba: 2340 movne r3, #64 ; 0x40 + 80356bc: 2000 movs r0, #0 + 80356be: 6031 str r1, [r6, #0] + 80356c0: 602b str r3, [r5, #0] + 80356c2: b016 add sp, #88 ; 0x58 + 80356c4: bd70 pop {r4, r5, r6, pc} + 80356c6: 466a mov r2, sp + 80356c8: f000 f848 bl 803575c <_fstat_r> + 80356cc: 2800 cmp r0, #0 + 80356ce: dbec blt.n 80356aa <__swhatbuf_r+0x12> + 80356d0: 9901 ldr r1, [sp, #4] + 80356d2: f401 4170 and.w r1, r1, #61440 ; 0xf000 + 80356d6: f5a1 5300 sub.w r3, r1, #8192 ; 0x2000 + 80356da: 4259 negs r1, r3 + 80356dc: 4159 adcs r1, r3 + 80356de: f44f 6380 mov.w r3, #1024 ; 0x400 + 80356e2: e7eb b.n 80356bc <__swhatbuf_r+0x24> + +080356e4 <__smakebuf_r>: + 80356e4: 898b ldrh r3, [r1, #12] + 80356e6: b573 push {r0, r1, r4, r5, r6, lr} + 80356e8: 079d lsls r5, r3, #30 + 80356ea: 4606 mov r6, r0 + 80356ec: 460c mov r4, r1 + 80356ee: d507 bpl.n 8035700 <__smakebuf_r+0x1c> + 80356f0: f104 0347 add.w r3, r4, #71 ; 0x47 + 80356f4: 6023 str r3, [r4, #0] + 80356f6: 6123 str r3, [r4, #16] + 80356f8: 2301 movs r3, #1 + 80356fa: 6163 str r3, [r4, #20] + 80356fc: b002 add sp, #8 + 80356fe: bd70 pop {r4, r5, r6, pc} + 8035700: ab01 add r3, sp, #4 + 8035702: 466a mov r2, sp + 8035704: f7ff ffc8 bl 8035698 <__swhatbuf_r> + 8035708: 9900 ldr r1, [sp, #0] + 803570a: 4605 mov r5, r0 + 803570c: 4630 mov r0, r6 + 803570e: f7fe fe75 bl 80343fc <_malloc_r> + 8035712: b948 cbnz r0, 8035728 <__smakebuf_r+0x44> + 8035714: f9b4 300c ldrsh.w r3, [r4, #12] + 8035718: 059a lsls r2, r3, #22 + 803571a: d4ef bmi.n 80356fc <__smakebuf_r+0x18> + 803571c: f023 0303 bic.w r3, r3, #3 + 8035720: f043 0302 orr.w r3, r3, #2 + 8035724: 81a3 strh r3, [r4, #12] + 8035726: e7e3 b.n 80356f0 <__smakebuf_r+0xc> + 8035728: 89a3 ldrh r3, [r4, #12] + 803572a: 6020 str r0, [r4, #0] + 803572c: f043 0380 orr.w r3, r3, #128 ; 0x80 + 8035730: 81a3 strh r3, [r4, #12] + 8035732: 9b00 ldr r3, [sp, #0] + 8035734: 6163 str r3, [r4, #20] + 8035736: 9b01 ldr r3, [sp, #4] + 8035738: 6120 str r0, [r4, #16] + 803573a: b15b cbz r3, 8035754 <__smakebuf_r+0x70> + 803573c: f9b4 100e ldrsh.w r1, [r4, #14] + 8035740: 4630 mov r0, r6 + 8035742: f000 f81d bl 8035780 <_isatty_r> + 8035746: b128 cbz r0, 8035754 <__smakebuf_r+0x70> + 8035748: 89a3 ldrh r3, [r4, #12] + 803574a: f023 0303 bic.w r3, r3, #3 + 803574e: f043 0301 orr.w r3, r3, #1 + 8035752: 81a3 strh r3, [r4, #12] + 8035754: 89a3 ldrh r3, [r4, #12] + 8035756: 431d orrs r5, r3 + 8035758: 81a5 strh r5, [r4, #12] + 803575a: e7cf b.n 80356fc <__smakebuf_r+0x18> + +0803575c <_fstat_r>: + 803575c: b538 push {r3, r4, r5, lr} + 803575e: 4d07 ldr r5, [pc, #28] ; (803577c <_fstat_r+0x20>) + 8035760: 2300 movs r3, #0 + 8035762: 4604 mov r4, r0 + 8035764: 4608 mov r0, r1 + 8035766: 4611 mov r1, r2 + 8035768: 602b str r3, [r5, #0] + 803576a: f7cc fb60 bl 8001e2e <_fstat> + 803576e: 1c43 adds r3, r0, #1 + 8035770: d102 bne.n 8035778 <_fstat_r+0x1c> + 8035772: 682b ldr r3, [r5, #0] + 8035774: b103 cbz r3, 8035778 <_fstat_r+0x1c> + 8035776: 6023 str r3, [r4, #0] + 8035778: bd38 pop {r3, r4, r5, pc} + 803577a: bf00 nop + 803577c: 2001e6a4 .word 0x2001e6a4 + +08035780 <_isatty_r>: + 8035780: b538 push {r3, r4, r5, lr} + 8035782: 4d06 ldr r5, [pc, #24] ; (803579c <_isatty_r+0x1c>) + 8035784: 2300 movs r3, #0 + 8035786: 4604 mov r4, r0 + 8035788: 4608 mov r0, r1 + 803578a: 602b str r3, [r5, #0] + 803578c: f7cc fb54 bl 8001e38 <_isatty> + 8035790: 1c43 adds r3, r0, #1 + 8035792: d102 bne.n 803579a <_isatty_r+0x1a> + 8035794: 682b ldr r3, [r5, #0] + 8035796: b103 cbz r3, 803579a <_isatty_r+0x1a> + 8035798: 6023 str r3, [r4, #0] + 803579a: bd38 pop {r3, r4, r5, pc} + 803579c: 2001e6a4 .word 0x2001e6a4 + +080357a0 <_realloc_r>: + 80357a0: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} + 80357a4: 4680 mov r8, r0 + 80357a6: 4614 mov r4, r2 + 80357a8: 460e mov r6, r1 + 80357aa: b921 cbnz r1, 80357b6 <_realloc_r+0x16> + 80357ac: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} + 80357b0: 4611 mov r1, r2 + 80357b2: f7fe be23 b.w 80343fc <_malloc_r> + 80357b6: b92a cbnz r2, 80357c4 <_realloc_r+0x24> + 80357b8: f7ff fa48 bl 8034c4c <_free_r> + 80357bc: 4625 mov r5, r4 + 80357be: 4628 mov r0, r5 + 80357c0: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + 80357c4: f000 f81b bl 80357fe <_malloc_usable_size_r> + 80357c8: 4284 cmp r4, r0 + 80357ca: 4607 mov r7, r0 + 80357cc: d802 bhi.n 80357d4 <_realloc_r+0x34> + 80357ce: ebb4 0f50 cmp.w r4, r0, lsr #1 + 80357d2: d812 bhi.n 80357fa <_realloc_r+0x5a> + 80357d4: 4621 mov r1, r4 + 80357d6: 4640 mov r0, r8 + 80357d8: f7fe fe10 bl 80343fc <_malloc_r> + 80357dc: 4605 mov r5, r0 + 80357de: 2800 cmp r0, #0 + 80357e0: d0ed beq.n 80357be <_realloc_r+0x1e> + 80357e2: 42bc cmp r4, r7 + 80357e4: 4622 mov r2, r4 + 80357e6: 4631 mov r1, r6 + 80357e8: bf28 it cs + 80357ea: 463a movcs r2, r7 + 80357ec: f7ff f9c1 bl 8034b72 + 80357f0: 4631 mov r1, r6 + 80357f2: 4640 mov r0, r8 + 80357f4: f7ff fa2a bl 8034c4c <_free_r> + 80357f8: e7e1 b.n 80357be <_realloc_r+0x1e> + 80357fa: 4635 mov r5, r6 + 80357fc: e7df b.n 80357be <_realloc_r+0x1e> + +080357fe <_malloc_usable_size_r>: + 80357fe: f851 3c04 ldr.w r3, [r1, #-4] + 8035802: 1f18 subs r0, r3, #4 + 8035804: 2b00 cmp r3, #0 + 8035806: bfbc itt lt + 8035808: 580b ldrlt r3, [r1, r0] + 803580a: 18c0 addlt r0, r0, r3 + 803580c: 4770 bx lr + ... + +08035810 <_init>: + 8035810: b5f8 push {r3, r4, r5, r6, r7, lr} + 8035812: bf00 nop + 8035814: bcf8 pop {r3, r4, r5, r6, r7} + 8035816: bc08 pop {r3} + 8035818: 469e mov lr, r3 + 803581a: 4770 bx lr + +0803581c <_fini>: + 803581c: b5f8 push {r3, r4, r5, r6, r7, lr} + 803581e: bf00 nop + 8035820: bcf8 pop {r3, r4, r5, r6, r7} + 8035822: bc08 pop {r3} + 8035824: 469e mov lr, r3 + 8035826: 4770 bx lr diff --git a/STM32_Disco746G/STM32CubeIDE/Debug/LightControlConvi_Disco746G.map b/STM32_Disco746G/STM32CubeIDE/Debug/LightControlConvi_Disco746G.map new file mode 100644 index 0000000000000000000000000000000000000000..b051ccf07a954648f174a9974d386be7b4ec75cd --- /dev/null +++ b/STM32_Disco746G/STM32CubeIDE/Debug/LightControlConvi_Disco746G.map @@ -0,0 +1,46840 @@ +Archive member included to satisfy reference by file (symbol) + +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(AbstractPartition.o) + ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o (touchgfx::AbstractPartition::getAllocationCount() const) +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Container.o) + ./Application/User/generated/SliderContainerBase.o (touchgfx::Container::contains(touchgfx::Drawable const&)) +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + ./Application/User/generated/SliderContainerBase.o (touchgfx::Slider::setValue(short)) +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + ./Application/User/TouchGFX/target/TouchGFXHAL.o (touchgfx::HAL::drawDrawableInDynamicBitmap(touchgfx::Drawable&, unsigned short)) +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(DMA.o) + ./Application/User/TouchGFX/target/generated/STM32DMA.o (touchgfx::DMA_Interface::seedExecution()) +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextArea.o) + ./Application/User/generated/SliderContainerBase.o (touchgfx::TextArea::getAlignment() const) +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Box.o) + ./Application/User/generated/MainScreenViewBase.o (vtable for touchgfx::Box) +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextAreaWithWildcard.o) + ./Application/User/generated/SliderContainerBase.o (touchgfx::TextAreaWithWildcardBase::draw(touchgfx::Rect const&) const) +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Image.o) + C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) (touchgfx::Image::setBitmap(touchgfx::Bitmap const&)) +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD.o) + C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextArea.o) (touchgfx::LCD::stringWidth(touchgfx::TextProvider&, touchgfx::Font const&, int, unsigned char)) +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TouchCalibration.o) + C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) (touchgfx::TouchCalibration::translatePoint(touchgfx::Point&)) +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(DisplayTransformation.o) + C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) (touchgfx::DisplayTransformation::transformFrameBufferToDisplay(short&, short&)) +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Application.o) + ./Application/User/generated/FrontendApplicationBase.o (touchgfx::Application::requestRedraw()) +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TypedText.o) + ./Application/User/generated/FontCache.o (touchgfx::TypedText::numberOfTypedTexts) +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Font.o) + ./Application/User/generated/Texts.o (touchgfx::Font::getStringWidthLTR(unsigned char, unsigned short const*, std::__va_list) const) +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Drawable.o) + ./Application/User/generated/SliderContainerBase.o (touchgfx::Drawable::invalidate() const) +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(ConstFont.o) + ./Application/User/generated/GeneratedFont.o (touchgfx::ConstFont::ConstFont(touchgfx::GlyphNode const*, unsigned short, unsigned short, unsigned short, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned short, unsigned short)) +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Utils.o) + ./Application/User/generated/FontCache.o (touchgfx::memset(void*, unsigned char, unsigned long)) +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Screen.o) + ./Application/User/generated/MainScreenViewBase.o (touchgfx::Screen::handleGestureEvent(touchgfx::GestureEvent const&)) +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextProvider.o) + ./Application/User/generated/FontCache.o (touchgfx::TextProvider::TextProvider()) +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextureMapTypes.o) + C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD.o) (touchgfx::Gradients::Gradients(touchgfx::Point3D const*)) +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Unicode.o) + ./Application/User/generated/FontCache.o (touchgfx::Unicode::strlen(unsigned short const*)) +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(FontManager.o) + ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o (touchgfx::FontManager::setFontProvider(touchgfx::FontProvider*)) +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) (touchgfx::Bitmap::dynamicBitmapGetAddress(unsigned short)) +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o (touchgfx::LCD16bpp::LCD16bpp()) +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(stm32_crc_lock.o) + C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Application.o) (CRC_Lock) +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Gestures.o) + C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) (touchgfx::Gestures::registerEventListener(touchgfx::UIEventListener&)) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a(atexit_arm.o) + C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) (__aeabi_atexit) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a(del_ops.o) + ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o (operator delete(void*, unsigned int)) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a(guard.o) + ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o (__cxa_guard_acquire) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a(pure.o) + C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(AbstractPartition.o) (__cxa_pure_virtual) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a(del_op.o) + C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a(del_ops.o) (operator delete(void*)) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a(eh_terminate.o) + C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a(pure.o) (std::terminate()) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a(eh_unex_handler.o) + C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a(eh_terminate.o) (__cxxabiv1::__unexpected_handler) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a(eh_term_handler.o) + C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a(eh_terminate.o) (__cxxabiv1::__terminate_handler) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-abort.o) + C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a(eh_terminate.o) (abort) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-assert.o) + ./Application/User/TouchGFX/target/TouchGFXHAL.o (__assert_func) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-atexit.o) + ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o (atexit) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-atoi.o) + ./Middlewares/LwIP/netif.o (atoi) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-exit.o) + C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/crt0.o (exit) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-malloc.o) + ./Middlewares/LibJPEG/jdatadst.o (malloc) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-mallocr.o) + C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-malloc.o) (_malloc_r) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-mlock.o) + C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-mallocr.o) (__malloc_lock) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-rand.o) + ./Middlewares/LwIP/dhcp.o (rand) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-strtol.o) + C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-atoi.o) (_strtol_r) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-cxa_atexit.o) + C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a(atexit_arm.o) (__cxa_atexit) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-ctype_.o) + ./Middlewares/LwIP/ip4_addr.o (_ctype_) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-findfp.o) + C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-exit.o) (__stdio_exit_handler) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fprintf.o) + C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-assert.o) (fiprintf) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fread.o) + ./Middlewares/LibJPEG/jdatasrc.o (fread) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fwalk.o) + C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-findfp.o) (_fwalk_sglue) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fwrite.o) + ./Middlewares/LibJPEG/jdatadst.o (fwrite) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-printf.o) + ./Application/User/LWIP/Target/ethernetif.o (printf) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-refill.o) + C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fread.o) (__srefill_r) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-sprintf.o) + ./Middlewares/LibJPEG/jerror.o (sprintf) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-stdio.o) + C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-findfp.o) (__sread) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-wbuf.o) + C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fwrite.o) (__swbuf_r) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-wsetup.o) + C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fwrite.o) (__swsetup_r) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-memcmp.o) + ./Middlewares/LwIP/bridgeif_fdb.o (memcmp) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-memmove.o) + ./Middlewares/LwIP/def.o (memmove) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-memset.o) + C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/crt0.o (memset) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-strncmp.o) + ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o (strncmp) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-signal.o) + C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-abort.o) (raise) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-closer.o) + C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-stdio.o) (_close_r) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-impure.o) + C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-assert.o) (_impure_ptr) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-lseekr.o) + C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-stdio.o) (_lseek_r) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-readr.o) + C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-stdio.o) (_read_r) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-signalr.o) + C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-signal.o) (_kill_r) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-sbrkr.o) + C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-mallocr.o) (_sbrk_r) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-writer.o) + C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-stdio.o) (_write_r) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-errno.o) + C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-strtol.o) (__errno) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-init.o) + C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/crt0.o (__libc_init_array) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-lock.o) + C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-findfp.o) (__retarget_lock_init_recursive) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-memcpy-stub.o) + ./Middlewares/FreeRTOS/cmsis_os2.o (memcpy) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-strlen.o) + ./Middlewares/LwIP/def.o (strlen) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-__atexit.o) + C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-atexit.o) (__register_exitproc) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-__call_atexit.o) + C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-__atexit.o) (__call_exitprocs) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-freer.o) + C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-malloc.o) (_free_r) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-on_exit_args.o) + C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-cxa_atexit.o) (__on_exit_args) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-nano-svfprintf.o) + C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-sprintf.o) (_svfprintf_r) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-nano-vfprintf.o) + C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fprintf.o) (_vfprintf_r) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-nano-vfprintf_i.o) + C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-nano-svfprintf.o) (_printf_i) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fflush.o) + C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-refill.o) (__sflush_r) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fvwrite.o) + C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-nano-vfprintf.o) (__sfvwrite_r) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-makebuf.o) + C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-refill.o) (__smakebuf_r) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fstatr.o) + C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-makebuf.o) (_fstat_r) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-isattyr.o) + C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-makebuf.o) (_isatty_r) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-memchr.o) + C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-nano-svfprintf.o) (memchr) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-reallocr.o) + C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-nano-svfprintf.o) (_realloc_r) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-msizer.o) + C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-reallocr.o) (_malloc_usable_size_r) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_arm_muldf3.o) + ./Middlewares/LibJPEG/jcdctmgr.o (__aeabi_dmul) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_arm_addsubdf3.o) + ./Middlewares/LibJPEG/jcdctmgr.o (__aeabi_ui2d) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_arm_muldivdf3.o) + ./Middlewares/LibJPEG/jcdctmgr.o (__aeabi_ddiv) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_arm_truncdfsf2.o) + ./Middlewares/LibJPEG/jcdctmgr.o (__aeabi_d2f) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_aeabi_ldivmod.o) + ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o (__aeabi_ldivmod) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_aeabi_uldivmod.o) + ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o (__aeabi_uldivmod) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_udivmoddi4.o) + C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_aeabi_ldivmod.o) (__udivmoddi4) +C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_dvmd_tls.o) + C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_aeabi_ldivmod.o) (__aeabi_ldiv0) + +Discarded input sections + + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard/crti.o + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard/crti.o + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard/crti.o + .rodata 0x0000000000000000 0x24 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard/crtbegin.o + .text 0x0000000000000000 0x7c C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/crt0.o + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/crt0.o + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/crt0.o + .ARM.extab 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/crt0.o + .ARM.exidx 0x0000000000000000 0x10 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/crt0.o + .debug_line 0x0000000000000000 0x76 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/crt0.o + .debug_line_str + 0x0000000000000000 0xdd C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/crt0.o + .debug_info 0x0000000000000000 0x24 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/crt0.o + .debug_abbrev 0x0000000000000000 0x14 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/crt0.o + .debug_aranges + 0x0000000000000000 0x20 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/crt0.o + .debug_str 0x0000000000000000 0xe2 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/crt0.o + .ARM.attributes + 0x0000000000000000 0x1c C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/crt0.o + .group 0x0000000000000000 0xc ./Application/User/Core/freertos.o + .group 0x0000000000000000 0xc ./Application/User/Core/freertos.o + .group 0x0000000000000000 0xc ./Application/User/Core/freertos.o + .group 0x0000000000000000 0xc ./Application/User/Core/freertos.o + .group 0x0000000000000000 0xc ./Application/User/Core/freertos.o + .group 0x0000000000000000 0xc ./Application/User/Core/freertos.o + .group 0x0000000000000000 0xc ./Application/User/Core/freertos.o + .group 0x0000000000000000 0xc ./Application/User/Core/freertos.o + .group 0x0000000000000000 0xc ./Application/User/Core/freertos.o + .group 0x0000000000000000 0xc ./Application/User/Core/freertos.o + .group 0x0000000000000000 0xc ./Application/User/Core/freertos.o + .group 0x0000000000000000 0xc ./Application/User/Core/freertos.o + .group 0x0000000000000000 0xc ./Application/User/Core/freertos.o + .group 0x0000000000000000 0xc ./Application/User/Core/freertos.o + .group 0x0000000000000000 0xc ./Application/User/Core/freertos.o + .group 0x0000000000000000 0xc ./Application/User/Core/freertos.o + .group 0x0000000000000000 0xc ./Application/User/Core/freertos.o + .group 0x0000000000000000 0xc ./Application/User/Core/freertos.o + .group 0x0000000000000000 0xc ./Application/User/Core/freertos.o + .group 0x0000000000000000 0xc ./Application/User/Core/freertos.o + .group 0x0000000000000000 0xc ./Application/User/Core/freertos.o + .group 0x0000000000000000 0xc ./Application/User/Core/freertos.o + .group 0x0000000000000000 0xc ./Application/User/Core/freertos.o + .group 0x0000000000000000 0xc ./Application/User/Core/freertos.o + .group 0x0000000000000000 0xc ./Application/User/Core/freertos.o + .group 0x0000000000000000 0xc ./Application/User/Core/freertos.o + .group 0x0000000000000000 0xc ./Application/User/Core/freertos.o + .group 0x0000000000000000 0xc ./Application/User/Core/freertos.o + .group 0x0000000000000000 0xc ./Application/User/Core/freertos.o + .group 0x0000000000000000 0xc ./Application/User/Core/freertos.o + .group 0x0000000000000000 0xc ./Application/User/Core/freertos.o + .group 0x0000000000000000 0xc ./Application/User/Core/freertos.o + .group 0x0000000000000000 0xc ./Application/User/Core/freertos.o + .group 0x0000000000000000 0xc ./Application/User/Core/freertos.o + .group 0x0000000000000000 0xc ./Application/User/Core/freertos.o + .group 0x0000000000000000 0xc ./Application/User/Core/freertos.o + .group 0x0000000000000000 0xc ./Application/User/Core/freertos.o + .group 0x0000000000000000 0xc ./Application/User/Core/freertos.o + .group 0x0000000000000000 0xc ./Application/User/Core/freertos.o + .group 0x0000000000000000 0xc ./Application/User/Core/freertos.o + .group 0x0000000000000000 0xc ./Application/User/Core/freertos.o + .group 0x0000000000000000 0xc ./Application/User/Core/freertos.o + .group 0x0000000000000000 0xc ./Application/User/Core/freertos.o + .group 0x0000000000000000 0xc ./Application/User/Core/freertos.o + .group 0x0000000000000000 0xc ./Application/User/Core/freertos.o + .group 0x0000000000000000 0xc ./Application/User/Core/freertos.o + .group 0x0000000000000000 0xc ./Application/User/Core/freertos.o + .group 0x0000000000000000 0xc ./Application/User/Core/freertos.o + .group 0x0000000000000000 0xc ./Application/User/Core/freertos.o + .group 0x0000000000000000 0xc ./Application/User/Core/freertos.o + .group 0x0000000000000000 0xc ./Application/User/Core/freertos.o + .group 0x0000000000000000 0xc ./Application/User/Core/freertos.o + .group 0x0000000000000000 0xc ./Application/User/Core/freertos.o + .group 0x0000000000000000 0xc ./Application/User/Core/freertos.o + .group 0x0000000000000000 0xc ./Application/User/Core/freertos.o + .group 0x0000000000000000 0xc ./Application/User/Core/freertos.o + .group 0x0000000000000000 0xc ./Application/User/Core/freertos.o + .group 0x0000000000000000 0xc ./Application/User/Core/freertos.o + .group 0x0000000000000000 0xc ./Application/User/Core/freertos.o + .group 0x0000000000000000 0xc ./Application/User/Core/freertos.o + .text 0x0000000000000000 0x0 ./Application/User/Core/freertos.o + .data 0x0000000000000000 0x0 ./Application/User/Core/freertos.o + .bss 0x0000000000000000 0x0 ./Application/User/Core/freertos.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/main.o + .text 0x0000000000000000 0x0 ./Application/User/Core/main.o + .data 0x0000000000000000 0x0 ./Application/User/Core/main.o + .bss 0x0000000000000000 0x0 ./Application/User/Core/main.o + .debug_macro 0x0000000000000000 0xaae ./Application/User/Core/main.o + .debug_macro 0x0000000000000000 0x2bf ./Application/User/Core/main.o + .debug_macro 0x0000000000000000 0x2e ./Application/User/Core/main.o + .debug_macro 0x0000000000000000 0x3b ./Application/User/Core/main.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/Core/main.o + .debug_macro 0x0000000000000000 0x8e ./Application/User/Core/main.o + .debug_macro 0x0000000000000000 0x51 ./Application/User/Core/main.o + .debug_macro 0x0000000000000000 0x103 ./Application/User/Core/main.o + .debug_macro 0x0000000000000000 0x6a ./Application/User/Core/main.o + .debug_macro 0x0000000000000000 0x1df ./Application/User/Core/main.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/Core/main.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/Core/main.o + .debug_macro 0x0000000000000000 0xd9 ./Application/User/Core/main.o + .debug_macro 0x0000000000000000 0x12cd ./Application/User/Core/main.o + .debug_macro 0x0000000000000000 0x11f ./Application/User/Core/main.o + .debug_macro 0x0000000000000000 0x19 ./Application/User/Core/main.o + .debug_macro 0x0000000000000000 0x1920a ./Application/User/Core/main.o + .debug_macro 0x0000000000000000 0x6d ./Application/User/Core/main.o + .debug_macro 0x0000000000000000 0x3749 ./Application/User/Core/main.o + .debug_macro 0x0000000000000000 0x174 ./Application/User/Core/main.o + .debug_macro 0x0000000000000000 0x63 ./Application/User/Core/main.o + .debug_macro 0x0000000000000000 0x18ad ./Application/User/Core/main.o + .debug_macro 0x0000000000000000 0x6c4 ./Application/User/Core/main.o + .debug_macro 0x0000000000000000 0x185 ./Application/User/Core/main.o + .debug_macro 0x0000000000000000 0x115 ./Application/User/Core/main.o + .debug_macro 0x0000000000000000 0x1fd ./Application/User/Core/main.o + .debug_macro 0x0000000000000000 0xa5 ./Application/User/Core/main.o + .debug_macro 0x0000000000000000 0x24f ./Application/User/Core/main.o + .debug_macro 0x0000000000000000 0x41 ./Application/User/Core/main.o + .debug_macro 0x0000000000000000 0x58 ./Application/User/Core/main.o + .debug_macro 0x0000000000000000 0x236 ./Application/User/Core/main.o + .debug_macro 0x0000000000000000 0xc7 ./Application/User/Core/main.o + .debug_macro 0x0000000000000000 0x4c ./Application/User/Core/main.o + .debug_macro 0x0000000000000000 0x208 ./Application/User/Core/main.o + .debug_macro 0x0000000000000000 0xd44 ./Application/User/Core/main.o + .debug_macro 0x0000000000000000 0x14e ./Application/User/Core/main.o + .debug_macro 0x0000000000000000 0x25a ./Application/User/Core/main.o + .debug_macro 0x0000000000000000 0x12 ./Application/User/Core/main.o + .debug_macro 0x0000000000000000 0x504 ./Application/User/Core/main.o + .debug_macro 0x0000000000000000 0x22c ./Application/User/Core/main.o + .debug_macro 0x0000000000000000 0x61 ./Application/User/Core/main.o + .debug_macro 0x0000000000000000 0xa5 ./Application/User/Core/main.o + .debug_macro 0x0000000000000000 0x198 ./Application/User/Core/main.o + .debug_macro 0x0000000000000000 0xd6 ./Application/User/Core/main.o + .debug_macro 0x0000000000000000 0x12e ./Application/User/Core/main.o + .debug_macro 0x0000000000000000 0x108 ./Application/User/Core/main.o + .debug_macro 0x0000000000000000 0x35 ./Application/User/Core/main.o + .debug_macro 0x0000000000000000 0x2d4 ./Application/User/Core/main.o + .debug_macro 0x0000000000000000 0xa7c ./Application/User/Core/main.o + .debug_macro 0x0000000000000000 0x59 ./Application/User/Core/main.o + .debug_macro 0x0000000000000000 0x14d ./Application/User/Core/main.o + .debug_macro 0x0000000000000000 0xac ./Application/User/Core/main.o + .debug_macro 0x0000000000000000 0x15a ./Application/User/Core/main.o + .debug_macro 0x0000000000000000 0xc9 ./Application/User/Core/main.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/Core/main.o + .debug_macro 0x0000000000000000 0x26 ./Application/User/Core/main.o + .debug_macro 0x0000000000000000 0x49b ./Application/User/Core/main.o + .debug_macro 0x0000000000000000 0xb5 ./Application/User/Core/main.o + .debug_macro 0x0000000000000000 0xaa ./Application/User/Core/main.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_msp.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_msp.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_msp.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_msp.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_msp.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_msp.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_msp.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_msp.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_msp.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_msp.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_msp.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_msp.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_msp.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_msp.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_msp.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_msp.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_msp.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_msp.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_msp.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_msp.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_msp.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_msp.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_msp.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_msp.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_msp.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_msp.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_msp.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_msp.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_msp.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_msp.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_msp.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_msp.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_msp.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_msp.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_msp.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_msp.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_msp.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_msp.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_msp.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_msp.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_msp.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_msp.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_msp.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_msp.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_msp.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_msp.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_msp.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_msp.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_msp.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_msp.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_msp.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_msp.o + .text 0x0000000000000000 0x0 ./Application/User/Core/stm32f7xx_hal_msp.o + .data 0x0000000000000000 0x0 ./Application/User/Core/stm32f7xx_hal_msp.o + .bss 0x0000000000000000 0x0 ./Application/User/Core/stm32f7xx_hal_msp.o + .text.HAL_CRC_MspDeInit + 0x0000000000000000 0x1c ./Application/User/Core/stm32f7xx_hal_msp.o + .text.HAL_DMA2D_MspDeInit + 0x0000000000000000 0x24 ./Application/User/Core/stm32f7xx_hal_msp.o + .text.HAL_LTDC_MspDeInit + 0x0000000000000000 0x6c ./Application/User/Core/stm32f7xx_hal_msp.o + .text.HAL_TIM_Base_MspDeInit + 0x0000000000000000 0x60 ./Application/User/Core/stm32f7xx_hal_msp.o + .text.HAL_SDRAM_MspDeInit + 0x0000000000000000 0x74 ./Application/User/Core/stm32f7xx_hal_msp.o + .bss.FMC_DeInitialized + 0x0000000000000000 0x4 ./Application/User/Core/stm32f7xx_hal_msp.o + .debug_macro 0x0000000000000000 0xaae ./Application/User/Core/stm32f7xx_hal_msp.o + .debug_macro 0x0000000000000000 0x2bf ./Application/User/Core/stm32f7xx_hal_msp.o + .debug_macro 0x0000000000000000 0x2e ./Application/User/Core/stm32f7xx_hal_msp.o + .debug_macro 0x0000000000000000 0x3b ./Application/User/Core/stm32f7xx_hal_msp.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/Core/stm32f7xx_hal_msp.o + .debug_macro 0x0000000000000000 0x8e ./Application/User/Core/stm32f7xx_hal_msp.o + .debug_macro 0x0000000000000000 0x51 ./Application/User/Core/stm32f7xx_hal_msp.o + .debug_macro 0x0000000000000000 0x103 ./Application/User/Core/stm32f7xx_hal_msp.o + .debug_macro 0x0000000000000000 0x6a ./Application/User/Core/stm32f7xx_hal_msp.o + .debug_macro 0x0000000000000000 0x1df ./Application/User/Core/stm32f7xx_hal_msp.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/Core/stm32f7xx_hal_msp.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/Core/stm32f7xx_hal_msp.o + .debug_macro 0x0000000000000000 0xd9 ./Application/User/Core/stm32f7xx_hal_msp.o + .debug_macro 0x0000000000000000 0x12cd ./Application/User/Core/stm32f7xx_hal_msp.o + .debug_macro 0x0000000000000000 0x11f ./Application/User/Core/stm32f7xx_hal_msp.o + .debug_macro 0x0000000000000000 0x19 ./Application/User/Core/stm32f7xx_hal_msp.o + .debug_macro 0x0000000000000000 0x1920a ./Application/User/Core/stm32f7xx_hal_msp.o + .debug_macro 0x0000000000000000 0x6d ./Application/User/Core/stm32f7xx_hal_msp.o + .debug_macro 0x0000000000000000 0x3749 ./Application/User/Core/stm32f7xx_hal_msp.o + .debug_macro 0x0000000000000000 0x174 ./Application/User/Core/stm32f7xx_hal_msp.o + .debug_macro 0x0000000000000000 0x63 ./Application/User/Core/stm32f7xx_hal_msp.o + .debug_macro 0x0000000000000000 0x18ad ./Application/User/Core/stm32f7xx_hal_msp.o + .debug_macro 0x0000000000000000 0x6c4 ./Application/User/Core/stm32f7xx_hal_msp.o + .debug_macro 0x0000000000000000 0x185 ./Application/User/Core/stm32f7xx_hal_msp.o + .debug_macro 0x0000000000000000 0x115 ./Application/User/Core/stm32f7xx_hal_msp.o + .debug_macro 0x0000000000000000 0x1fd ./Application/User/Core/stm32f7xx_hal_msp.o + .debug_macro 0x0000000000000000 0xa5 ./Application/User/Core/stm32f7xx_hal_msp.o + .debug_macro 0x0000000000000000 0x24f ./Application/User/Core/stm32f7xx_hal_msp.o + .debug_macro 0x0000000000000000 0x41 ./Application/User/Core/stm32f7xx_hal_msp.o + .debug_macro 0x0000000000000000 0x58 ./Application/User/Core/stm32f7xx_hal_msp.o + .debug_macro 0x0000000000000000 0x236 ./Application/User/Core/stm32f7xx_hal_msp.o + .debug_macro 0x0000000000000000 0xc7 ./Application/User/Core/stm32f7xx_hal_msp.o + .debug_macro 0x0000000000000000 0x4c ./Application/User/Core/stm32f7xx_hal_msp.o + .debug_macro 0x0000000000000000 0x208 ./Application/User/Core/stm32f7xx_hal_msp.o + .debug_macro 0x0000000000000000 0xd44 ./Application/User/Core/stm32f7xx_hal_msp.o + .debug_macro 0x0000000000000000 0x14e ./Application/User/Core/stm32f7xx_hal_msp.o + .debug_macro 0x0000000000000000 0x25a ./Application/User/Core/stm32f7xx_hal_msp.o + .debug_macro 0x0000000000000000 0x12 ./Application/User/Core/stm32f7xx_hal_msp.o + .debug_macro 0x0000000000000000 0x504 ./Application/User/Core/stm32f7xx_hal_msp.o + .debug_macro 0x0000000000000000 0x22c ./Application/User/Core/stm32f7xx_hal_msp.o + .debug_macro 0x0000000000000000 0x61 ./Application/User/Core/stm32f7xx_hal_msp.o + .debug_macro 0x0000000000000000 0xa5 ./Application/User/Core/stm32f7xx_hal_msp.o + .debug_macro 0x0000000000000000 0x198 ./Application/User/Core/stm32f7xx_hal_msp.o + .debug_macro 0x0000000000000000 0xd6 ./Application/User/Core/stm32f7xx_hal_msp.o + .debug_macro 0x0000000000000000 0x12e ./Application/User/Core/stm32f7xx_hal_msp.o + .debug_macro 0x0000000000000000 0x108 ./Application/User/Core/stm32f7xx_hal_msp.o + .debug_macro 0x0000000000000000 0x35 ./Application/User/Core/stm32f7xx_hal_msp.o + .debug_macro 0x0000000000000000 0x2d4 ./Application/User/Core/stm32f7xx_hal_msp.o + .debug_macro 0x0000000000000000 0xa7c ./Application/User/Core/stm32f7xx_hal_msp.o + .debug_macro 0x0000000000000000 0x59 ./Application/User/Core/stm32f7xx_hal_msp.o + .debug_macro 0x0000000000000000 0x14d ./Application/User/Core/stm32f7xx_hal_msp.o + .debug_macro 0x0000000000000000 0xac ./Application/User/Core/stm32f7xx_hal_msp.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .text 0x0000000000000000 0x0 ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .data 0x0000000000000000 0x0 ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .bss 0x0000000000000000 0x0 ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .text.HAL_SuspendTick + 0x0000000000000000 0x14 ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .text.HAL_ResumeTick + 0x0000000000000000 0x14 ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .debug_macro 0x0000000000000000 0xaae ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .debug_macro 0x0000000000000000 0x2bf ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .debug_macro 0x0000000000000000 0x2e ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .debug_macro 0x0000000000000000 0x3b ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .debug_macro 0x0000000000000000 0x8e ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .debug_macro 0x0000000000000000 0x51 ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .debug_macro 0x0000000000000000 0x103 ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .debug_macro 0x0000000000000000 0x6a ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .debug_macro 0x0000000000000000 0x1df ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .debug_macro 0x0000000000000000 0xd9 ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .debug_macro 0x0000000000000000 0x12cd ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .debug_macro 0x0000000000000000 0x11f ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .debug_macro 0x0000000000000000 0x19 ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .debug_macro 0x0000000000000000 0x1920a ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .debug_macro 0x0000000000000000 0x6d ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .debug_macro 0x0000000000000000 0x3749 ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .debug_macro 0x0000000000000000 0x174 ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .debug_macro 0x0000000000000000 0x63 ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .debug_macro 0x0000000000000000 0x18ad ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .debug_macro 0x0000000000000000 0x6c4 ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .debug_macro 0x0000000000000000 0x185 ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .debug_macro 0x0000000000000000 0x115 ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .debug_macro 0x0000000000000000 0x1fd ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .debug_macro 0x0000000000000000 0xa5 ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .debug_macro 0x0000000000000000 0x24f ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .debug_macro 0x0000000000000000 0x41 ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .debug_macro 0x0000000000000000 0x58 ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .debug_macro 0x0000000000000000 0x236 ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .debug_macro 0x0000000000000000 0xc7 ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .debug_macro 0x0000000000000000 0x4c ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .debug_macro 0x0000000000000000 0x208 ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .debug_macro 0x0000000000000000 0xd44 ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .debug_macro 0x0000000000000000 0x14e ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .debug_macro 0x0000000000000000 0x25a ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .debug_macro 0x0000000000000000 0x12 ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .debug_macro 0x0000000000000000 0x504 ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .debug_macro 0x0000000000000000 0x22c ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .debug_macro 0x0000000000000000 0x61 ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .debug_macro 0x0000000000000000 0xa5 ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .debug_macro 0x0000000000000000 0x198 ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .debug_macro 0x0000000000000000 0xd6 ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .debug_macro 0x0000000000000000 0x12e ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .debug_macro 0x0000000000000000 0x108 ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .debug_macro 0x0000000000000000 0x35 ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .debug_macro 0x0000000000000000 0x2d4 ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .debug_macro 0x0000000000000000 0xa7c ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .debug_macro 0x0000000000000000 0x59 ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .debug_macro 0x0000000000000000 0x14d ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_it.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_it.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_it.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_it.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_it.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_it.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_it.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_it.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_it.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_it.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_it.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_it.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_it.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_it.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_it.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_it.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_it.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_it.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_it.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_it.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_it.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_it.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_it.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_it.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_it.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_it.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_it.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_it.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_it.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_it.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_it.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_it.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_it.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_it.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_it.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_it.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_it.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_it.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_it.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_it.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_it.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_it.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_it.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_it.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_it.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_it.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_it.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_it.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_it.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_it.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_it.o + .group 0x0000000000000000 0xc ./Application/User/Core/stm32f7xx_it.o + .text 0x0000000000000000 0x0 ./Application/User/Core/stm32f7xx_it.o + .data 0x0000000000000000 0x0 ./Application/User/Core/stm32f7xx_it.o + .bss 0x0000000000000000 0x0 ./Application/User/Core/stm32f7xx_it.o + .debug_macro 0x0000000000000000 0xaae ./Application/User/Core/stm32f7xx_it.o + .debug_macro 0x0000000000000000 0x2bf ./Application/User/Core/stm32f7xx_it.o + .debug_macro 0x0000000000000000 0x2e ./Application/User/Core/stm32f7xx_it.o + .debug_macro 0x0000000000000000 0x3b ./Application/User/Core/stm32f7xx_it.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/Core/stm32f7xx_it.o + .debug_macro 0x0000000000000000 0x8e ./Application/User/Core/stm32f7xx_it.o + .debug_macro 0x0000000000000000 0x51 ./Application/User/Core/stm32f7xx_it.o + .debug_macro 0x0000000000000000 0x103 ./Application/User/Core/stm32f7xx_it.o + .debug_macro 0x0000000000000000 0x6a ./Application/User/Core/stm32f7xx_it.o + .debug_macro 0x0000000000000000 0x1df ./Application/User/Core/stm32f7xx_it.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/Core/stm32f7xx_it.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/Core/stm32f7xx_it.o + .debug_macro 0x0000000000000000 0xd9 ./Application/User/Core/stm32f7xx_it.o + .debug_macro 0x0000000000000000 0x12cd ./Application/User/Core/stm32f7xx_it.o + .debug_macro 0x0000000000000000 0x11f ./Application/User/Core/stm32f7xx_it.o + .debug_macro 0x0000000000000000 0x19 ./Application/User/Core/stm32f7xx_it.o + .debug_macro 0x0000000000000000 0x1920a ./Application/User/Core/stm32f7xx_it.o + .debug_macro 0x0000000000000000 0x6d ./Application/User/Core/stm32f7xx_it.o + .debug_macro 0x0000000000000000 0x3749 ./Application/User/Core/stm32f7xx_it.o + .debug_macro 0x0000000000000000 0x174 ./Application/User/Core/stm32f7xx_it.o + .debug_macro 0x0000000000000000 0x63 ./Application/User/Core/stm32f7xx_it.o + .debug_macro 0x0000000000000000 0x18ad ./Application/User/Core/stm32f7xx_it.o + .debug_macro 0x0000000000000000 0x6c4 ./Application/User/Core/stm32f7xx_it.o + .debug_macro 0x0000000000000000 0x185 ./Application/User/Core/stm32f7xx_it.o + .debug_macro 0x0000000000000000 0x115 ./Application/User/Core/stm32f7xx_it.o + .debug_macro 0x0000000000000000 0x1fd ./Application/User/Core/stm32f7xx_it.o + .debug_macro 0x0000000000000000 0xa5 ./Application/User/Core/stm32f7xx_it.o + .debug_macro 0x0000000000000000 0x24f ./Application/User/Core/stm32f7xx_it.o + .debug_macro 0x0000000000000000 0x41 ./Application/User/Core/stm32f7xx_it.o + .debug_macro 0x0000000000000000 0x58 ./Application/User/Core/stm32f7xx_it.o + .debug_macro 0x0000000000000000 0x236 ./Application/User/Core/stm32f7xx_it.o + .debug_macro 0x0000000000000000 0xc7 ./Application/User/Core/stm32f7xx_it.o + .debug_macro 0x0000000000000000 0x4c ./Application/User/Core/stm32f7xx_it.o + .debug_macro 0x0000000000000000 0x208 ./Application/User/Core/stm32f7xx_it.o + .debug_macro 0x0000000000000000 0xd44 ./Application/User/Core/stm32f7xx_it.o + .debug_macro 0x0000000000000000 0x14e ./Application/User/Core/stm32f7xx_it.o + .debug_macro 0x0000000000000000 0x25a ./Application/User/Core/stm32f7xx_it.o + .debug_macro 0x0000000000000000 0x12 ./Application/User/Core/stm32f7xx_it.o + .debug_macro 0x0000000000000000 0x504 ./Application/User/Core/stm32f7xx_it.o + .debug_macro 0x0000000000000000 0x22c ./Application/User/Core/stm32f7xx_it.o + .debug_macro 0x0000000000000000 0x61 ./Application/User/Core/stm32f7xx_it.o + .debug_macro 0x0000000000000000 0xa5 ./Application/User/Core/stm32f7xx_it.o + .debug_macro 0x0000000000000000 0x198 ./Application/User/Core/stm32f7xx_it.o + .debug_macro 0x0000000000000000 0xd6 ./Application/User/Core/stm32f7xx_it.o + .debug_macro 0x0000000000000000 0x12e ./Application/User/Core/stm32f7xx_it.o + .debug_macro 0x0000000000000000 0x108 ./Application/User/Core/stm32f7xx_it.o + .debug_macro 0x0000000000000000 0x35 ./Application/User/Core/stm32f7xx_it.o + .debug_macro 0x0000000000000000 0x2d4 ./Application/User/Core/stm32f7xx_it.o + .debug_macro 0x0000000000000000 0xa7c ./Application/User/Core/stm32f7xx_it.o + .debug_macro 0x0000000000000000 0x59 ./Application/User/Core/stm32f7xx_it.o + .debug_macro 0x0000000000000000 0x14d ./Application/User/Core/stm32f7xx_it.o + .debug_macro 0x0000000000000000 0xac ./Application/User/Core/stm32f7xx_it.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/syscalls.o + .text 0x0000000000000000 0x0 ./Application/User/Core/syscalls.o + .data 0x0000000000000000 0x0 ./Application/User/Core/syscalls.o + .bss 0x0000000000000000 0x0 ./Application/User/Core/syscalls.o + .text.initialise_monitor_handles + 0x0000000000000000 0x2 ./Application/User/Core/syscalls.o + .text._open 0x0000000000000000 0xa ./Application/User/Core/syscalls.o + .text._wait 0x0000000000000000 0x10 ./Application/User/Core/syscalls.o + .text._unlink 0x0000000000000000 0x10 ./Application/User/Core/syscalls.o + .text._times 0x0000000000000000 0x6 ./Application/User/Core/syscalls.o + .text._stat 0x0000000000000000 0xa ./Application/User/Core/syscalls.o + .text._link 0x0000000000000000 0x10 ./Application/User/Core/syscalls.o + .text._fork 0x0000000000000000 0x10 ./Application/User/Core/syscalls.o + .text._execve 0x0000000000000000 0x10 ./Application/User/Core/syscalls.o + .bss.__env 0x0000000000000000 0x4 ./Application/User/Core/syscalls.o + .data.environ 0x0000000000000000 0x4 ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0xaae ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x2a ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x43 ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x34 ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x174 ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x369 ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x43 ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x34 ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x58 ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x8e ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x177 ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x35 ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x6a ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x52 ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x52 ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x3d ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x35 ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x29 ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x2bf ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x2e ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x3b ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x103 ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x1df ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0xd9 ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x12cd ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x11f ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x19 ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x1920a ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x6d ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x3749 ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x18ad ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x6c4 ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x185 ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x115 ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x1fd ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0xa5 ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x24f ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x41 ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x58 ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x236 ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0xc7 ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x4c ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x208 ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0xd44 ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x14e ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x25a ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x12 ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x504 ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x22c ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x61 ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0xa5 ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x198 ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0xd6 ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x12e ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x108 ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x35 ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x2d4 ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0xa7c ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x59 ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x14d ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0xac ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x147 ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x28 ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x17 ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x460 ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x43 ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x7c ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x17 ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x118 ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x19 ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x11f ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x82 ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x66 ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000000000 0x739 ./Application/User/Core/syscalls.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/Core/sysmem.o + .text 0x0000000000000000 0x0 ./Application/User/Core/sysmem.o + .data 0x0000000000000000 0x0 ./Application/User/Core/sysmem.o + .bss 0x0000000000000000 0x0 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0xaae ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x2bf ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x2e ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x3b ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x8e ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x51 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x103 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x6a ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x1df ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0xd9 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x12cd ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x11f ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x19 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x1920a ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x6d ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x3749 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x174 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x63 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x18ad ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x6c4 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x185 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x115 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x1fd ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0xa5 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x24f ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x41 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x58 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x236 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0xc7 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x4c ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x208 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0xd44 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x14e ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x25a ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x12 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x504 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x22c ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x61 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0xa5 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x198 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0xd6 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x12e ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x108 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x35 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x2d4 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0xa7c ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x59 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x14d ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0xac ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0xd0 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x2a ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x61 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x43 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x34 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x35 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x43 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x34 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x58 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x8e ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x177 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x369 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x29 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x147 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x52 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x52 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0xc1 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x3d ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0xc8 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x35 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x28 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x17 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x460 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x43 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x7c ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x17 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x118 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x19 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x11f ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x82 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x66 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x739 ./Application/User/Core/sysmem.o + .debug_macro 0x0000000000000000 0x31a ./Application/User/Core/sysmem.o + .group 0x0000000000000000 0xc ./Application/User/LIBJPEG/App/libjpeg.o + .group 0x0000000000000000 0xc ./Application/User/LIBJPEG/App/libjpeg.o + .group 0x0000000000000000 0xc ./Application/User/LIBJPEG/App/libjpeg.o + .group 0x0000000000000000 0xc ./Application/User/LIBJPEG/App/libjpeg.o + .group 0x0000000000000000 0xc ./Application/User/LIBJPEG/App/libjpeg.o + .group 0x0000000000000000 0xc ./Application/User/LIBJPEG/App/libjpeg.o + .group 0x0000000000000000 0xc ./Application/User/LIBJPEG/App/libjpeg.o + .group 0x0000000000000000 0xc ./Application/User/LIBJPEG/App/libjpeg.o + .group 0x0000000000000000 0xc ./Application/User/LIBJPEG/App/libjpeg.o + .group 0x0000000000000000 0xc ./Application/User/LIBJPEG/App/libjpeg.o + .group 0x0000000000000000 0xc ./Application/User/LIBJPEG/App/libjpeg.o + .group 0x0000000000000000 0xc ./Application/User/LIBJPEG/App/libjpeg.o + .group 0x0000000000000000 0xc ./Application/User/LIBJPEG/App/libjpeg.o + .group 0x0000000000000000 0xc ./Application/User/LIBJPEG/App/libjpeg.o + .group 0x0000000000000000 0xc ./Application/User/LIBJPEG/App/libjpeg.o + .group 0x0000000000000000 0xc ./Application/User/LIBJPEG/App/libjpeg.o + .group 0x0000000000000000 0xc ./Application/User/LIBJPEG/App/libjpeg.o + .group 0x0000000000000000 0xc ./Application/User/LIBJPEG/App/libjpeg.o + .group 0x0000000000000000 0xc ./Application/User/LIBJPEG/App/libjpeg.o + .group 0x0000000000000000 0xc ./Application/User/LIBJPEG/App/libjpeg.o + .group 0x0000000000000000 0xc ./Application/User/LIBJPEG/App/libjpeg.o + .group 0x0000000000000000 0xc ./Application/User/LIBJPEG/App/libjpeg.o + .group 0x0000000000000000 0xc ./Application/User/LIBJPEG/App/libjpeg.o + .group 0x0000000000000000 0xc ./Application/User/LIBJPEG/App/libjpeg.o + .group 0x0000000000000000 0xc ./Application/User/LIBJPEG/App/libjpeg.o + .group 0x0000000000000000 0xc ./Application/User/LIBJPEG/App/libjpeg.o + .group 0x0000000000000000 0xc ./Application/User/LIBJPEG/App/libjpeg.o + .group 0x0000000000000000 0xc ./Application/User/LIBJPEG/App/libjpeg.o + .group 0x0000000000000000 0xc ./Application/User/LIBJPEG/App/libjpeg.o + .group 0x0000000000000000 0xc ./Application/User/LIBJPEG/App/libjpeg.o + .group 0x0000000000000000 0xc ./Application/User/LIBJPEG/App/libjpeg.o + .group 0x0000000000000000 0xc ./Application/User/LIBJPEG/App/libjpeg.o + .group 0x0000000000000000 0xc ./Application/User/LIBJPEG/App/libjpeg.o + .group 0x0000000000000000 0xc ./Application/User/LIBJPEG/App/libjpeg.o + .group 0x0000000000000000 0xc ./Application/User/LIBJPEG/App/libjpeg.o + .group 0x0000000000000000 0xc ./Application/User/LIBJPEG/App/libjpeg.o + .group 0x0000000000000000 0xc ./Application/User/LIBJPEG/App/libjpeg.o + .group 0x0000000000000000 0xc ./Application/User/LIBJPEG/App/libjpeg.o + .group 0x0000000000000000 0xc ./Application/User/LIBJPEG/App/libjpeg.o + .group 0x0000000000000000 0xc ./Application/User/LIBJPEG/App/libjpeg.o + .group 0x0000000000000000 0xc ./Application/User/LIBJPEG/App/libjpeg.o + .group 0x0000000000000000 0xc ./Application/User/LIBJPEG/App/libjpeg.o + .group 0x0000000000000000 0xc ./Application/User/LIBJPEG/App/libjpeg.o + .text 0x0000000000000000 0x0 ./Application/User/LIBJPEG/App/libjpeg.o + .data 0x0000000000000000 0x0 ./Application/User/LIBJPEG/App/libjpeg.o + .bss 0x0000000000000000 0x0 ./Application/User/LIBJPEG/App/libjpeg.o + .debug_macro 0x0000000000000000 0xaae ./Application/User/LIBJPEG/App/libjpeg.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/LIBJPEG/App/libjpeg.o + .debug_macro 0x0000000000000000 0x5b ./Application/User/LIBJPEG/App/libjpeg.o + .debug_macro 0x0000000000000000 0x2a ./Application/User/LIBJPEG/App/libjpeg.o + .debug_macro 0x0000000000000000 0x94 ./Application/User/LIBJPEG/App/libjpeg.o + .debug_macro 0x0000000000000000 0x43 ./Application/User/LIBJPEG/App/libjpeg.o + .debug_macro 0x0000000000000000 0x34 ./Application/User/LIBJPEG/App/libjpeg.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/LIBJPEG/App/libjpeg.o + .debug_macro 0x0000000000000000 0x57 ./Application/User/LIBJPEG/App/libjpeg.o + .debug_macro 0x0000000000000000 0x369 ./Application/User/LIBJPEG/App/libjpeg.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/LIBJPEG/App/libjpeg.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/LIBJPEG/App/libjpeg.o + .debug_macro 0x0000000000000000 0x43 ./Application/User/LIBJPEG/App/libjpeg.o + .debug_macro 0x0000000000000000 0x34 ./Application/User/LIBJPEG/App/libjpeg.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/LIBJPEG/App/libjpeg.o + .debug_macro 0x0000000000000000 0x58 ./Application/User/LIBJPEG/App/libjpeg.o + .debug_macro 0x0000000000000000 0x8e ./Application/User/LIBJPEG/App/libjpeg.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/LIBJPEG/App/libjpeg.o + .debug_macro 0x0000000000000000 0x177 ./Application/User/LIBJPEG/App/libjpeg.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/LIBJPEG/App/libjpeg.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/LIBJPEG/App/libjpeg.o + .debug_macro 0x0000000000000000 0x147 ./Application/User/LIBJPEG/App/libjpeg.o + .debug_macro 0x0000000000000000 0x103 ./Application/User/LIBJPEG/App/libjpeg.o + .debug_macro 0x0000000000000000 0x6a ./Application/User/LIBJPEG/App/libjpeg.o + .debug_macro 0x0000000000000000 0x1df ./Application/User/LIBJPEG/App/libjpeg.o + .debug_macro 0x0000000000000000 0x14b ./Application/User/LIBJPEG/App/libjpeg.o + .debug_macro 0x0000000000000000 0x15a ./Application/User/LIBJPEG/App/libjpeg.o + .debug_macro 0x0000000000000000 0xc9 ./Application/User/LIBJPEG/App/libjpeg.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/LIBJPEG/App/libjpeg.o + .debug_macro 0x0000000000000000 0x26 ./Application/User/LIBJPEG/App/libjpeg.o + .debug_macro 0x0000000000000000 0x49b ./Application/User/LIBJPEG/App/libjpeg.o + .debug_macro 0x0000000000000000 0xb5 ./Application/User/LIBJPEG/App/libjpeg.o + .debug_macro 0x0000000000000000 0xaa ./Application/User/LIBJPEG/App/libjpeg.o + .debug_macro 0x0000000000000000 0x66 ./Application/User/LIBJPEG/App/libjpeg.o + .debug_macro 0x0000000000000000 0x74 ./Application/User/LIBJPEG/App/libjpeg.o + .debug_macro 0x0000000000000000 0xdd ./Application/User/LIBJPEG/App/libjpeg.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/LIBJPEG/App/libjpeg.o + .debug_macro 0x0000000000000000 0x64 ./Application/User/LIBJPEG/App/libjpeg.o + .debug_macro 0x0000000000000000 0x67 ./Application/User/LIBJPEG/App/libjpeg.o + .debug_macro 0x0000000000000000 0xe6 ./Application/User/LIBJPEG/App/libjpeg.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/App/lwip.o + .text 0x0000000000000000 0x0 ./Application/User/LWIP/App/lwip.o + .data 0x0000000000000000 0x0 ./Application/User/LWIP/App/lwip.o + .bss 0x0000000000000000 0x0 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0xaae ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x2bf ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x2e ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x3b ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x8e ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x51 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x103 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x6a ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x1df ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0xd9 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x12cd ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x11f ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x19 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x1920a ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x6d ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x3749 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x174 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x63 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x18ad ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x6c4 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x185 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x115 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x1fd ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0xa5 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x24f ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x41 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x58 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x236 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0xc7 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x4c ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x208 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0xd44 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x14e ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x25a ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x12 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x504 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x22c ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x61 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0xa5 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x198 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0xd6 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x12e ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x108 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x35 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x2d4 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0xa7c ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x59 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x14d ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0xac ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0xd0 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x2a ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x61 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x43 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x34 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x35 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x43 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x34 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x58 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x8e ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x177 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x369 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x29 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x147 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x52 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x52 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0xc1 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x3d ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0xc8 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x35 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x28 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x17 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x460 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x43 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x7c ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x17 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x118 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x19 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x11f ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x82 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x66 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x739 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x3f ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x25 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x15b ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0xb3 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x6a ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x1bd ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x169 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x13d ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0xa0 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x28 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x46 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x2e ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0xea ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x4d ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x29 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x14b ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x15a ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0xc9 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x26 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x49b ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0xb5 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0xaa ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x66 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x74 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0xdd ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x73 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/LWIP/App/lwip.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .group 0x0000000000000000 0xc ./Application/User/LWIP/Target/ethernetif.o + .text 0x0000000000000000 0x0 ./Application/User/LWIP/Target/ethernetif.o + .data 0x0000000000000000 0x0 ./Application/User/LWIP/Target/ethernetif.o + .bss 0x0000000000000000 0x0 ./Application/User/LWIP/Target/ethernetif.o + .text.HAL_ETH_MspDeInit + 0x0000000000000000 0x5c ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0xaae ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x2bf ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x2e ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x3b ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x8e ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x51 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x103 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x6a ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x1df ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0xd9 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x12cd ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x11f ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x19 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x1920a ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x6d ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x3749 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x174 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x63 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x18ad ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x6c4 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x185 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x115 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x1fd ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0xa5 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x24f ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x41 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x58 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x236 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0xc7 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x4c ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x208 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0xd44 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x14e ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x25a ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x12 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x504 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x22c ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x61 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0xa5 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x198 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0xd6 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x12e ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x108 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x35 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x2d4 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0xa7c ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x59 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x14d ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0xac ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0xd6 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x2a ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x61 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x43 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x34 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x35 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x43 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x34 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x58 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x8e ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x177 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x369 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x29 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x147 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x52 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x52 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0xc1 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x3d ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0xc8 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x35 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x28 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x17 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x460 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x43 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x7c ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x17 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x118 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x19 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x11f ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x82 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x66 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x739 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x14b ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x15a ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0xc9 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x26 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x49b ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0xb5 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0xaa ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x66 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x74 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0xdd ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x73 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x6a ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x169 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x3f ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x25 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x15b ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x13d ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x46 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0xa0 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x28 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x20 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/LWIP/Target/ethernetif.o + .text 0x0000000000000000 0x14 ./Application/User/Startup/startup_stm32f746nghx.o + .data 0x0000000000000000 0x0 ./Application/User/Startup/startup_stm32f746nghx.o + .bss 0x0000000000000000 0x0 ./Application/User/Startup/startup_stm32f746nghx.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/App/app_touchgfx.o + .text 0x0000000000000000 0x0 ./Application/User/TouchGFX/App/app_touchgfx.o + .data 0x0000000000000000 0x0 ./Application/User/TouchGFX/App/app_touchgfx.o + .bss 0x0000000000000000 0x0 ./Application/User/TouchGFX/App/app_touchgfx.o + .text.MX_TouchGFX_Process + 0x0000000000000000 0x4 ./Application/User/TouchGFX/App/app_touchgfx.o + .debug_macro 0x0000000000000000 0xaae ./Application/User/TouchGFX/App/app_touchgfx.o + .group 0x0000000000000000 0x8 ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .group 0x0000000000000000 0x8 ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .group 0x0000000000000000 0x10 ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .text 0x0000000000000000 0x0 ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .data 0x0000000000000000 0x0 ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .bss 0x0000000000000000 0x0 ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .debug_macro 0x0000000000000000 0x5b ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .debug_macro 0x0000000000000000 0x2a ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .debug_macro 0x0000000000000000 0x94 ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .debug_macro 0x0000000000000000 0x43 ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .debug_macro 0x0000000000000000 0x57 ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .debug_macro 0x0000000000000000 0x103 ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .debug_macro 0x0000000000000000 0x6a ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .debug_macro 0x0000000000000000 0x1df ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .debug_macro 0x0000000000000000 0x34 ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .debug_macro 0x0000000000000000 0x52 ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .debug_macro 0x0000000000000000 0x52 ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .debug_macro 0x0000000000000000 0xcf ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .debug_macro 0x0000000000000000 0x3d ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .group 0x0000000000000000 0x10 ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/STM32TouchController.o + .text 0x0000000000000000 0x0 ./Application/User/TouchGFX/target/STM32TouchController.o + .data 0x0000000000000000 0x0 ./Application/User/TouchGFX/target/STM32TouchController.o + .bss 0x0000000000000000 0x0 ./Application/User/TouchGFX/target/STM32TouchController.o + .text.TS_IO_Delay + 0x0000000000000000 0x4 ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0xb86 ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0x5b ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0x2a ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0x94 ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0x43 ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0x34 ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0x57 ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0x103 ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0x6a ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0x1df ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0x99 ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0x1b2 ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0x3ed ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0x17b ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0x38c ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0x43 ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0x34 ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0x52 ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0x52 ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0xcf ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0x3d ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0x18a ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0x58 ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0x2bf ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0x2e ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0x3b ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0xd9 ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0x11f ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0x19 ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0x1920a ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0x6d ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0x3749 ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0x5d ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0x18ad ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0x6c4 ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0x185 ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0x115 ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0x1fd ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0xa5 ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0x24f ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0x41 ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0x58 ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0x236 ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0xc7 ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0x4c ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0x208 ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0xd44 ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0x14e ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0x25a ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0x12 ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0x504 ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0x22c ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0x61 ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0xa5 ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0x198 ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0xd6 ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0x12e ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0x108 ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0x35 ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0x2d4 ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0xa7c ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0x59 ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x0000000000000000 0x14d ./Application/User/TouchGFX/target/STM32TouchController.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .text 0x0000000000000000 0x0 ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .data 0x0000000000000000 0x0 ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .bss 0x0000000000000000 0x0 ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .debug_macro 0x0000000000000000 0xb86 ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .debug_macro 0x0000000000000000 0x2e ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .debug_macro 0x0000000000000000 0x3b ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .debug_macro 0x0000000000000000 0x8e ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .debug_macro 0x0000000000000000 0x51 ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .debug_macro 0x0000000000000000 0x103 ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .debug_macro 0x0000000000000000 0x6a ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .debug_macro 0x0000000000000000 0x1df ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .debug_macro 0x0000000000000000 0xd9 ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .debug_macro 0x0000000000000000 0x12cd ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .debug_macro 0x0000000000000000 0x11f ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .debug_macro 0x0000000000000000 0x19 ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .debug_macro 0x0000000000000000 0x1920a ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .debug_macro 0x0000000000000000 0x6d ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .debug_macro 0x0000000000000000 0x2bf ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .debug_macro 0x0000000000000000 0x3749 ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .debug_macro 0x0000000000000000 0x17b ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .debug_macro 0x0000000000000000 0x63 ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .debug_macro 0x0000000000000000 0x18ad ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .debug_macro 0x0000000000000000 0x6c4 ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .debug_macro 0x0000000000000000 0x185 ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .debug_macro 0x0000000000000000 0x115 ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .debug_macro 0x0000000000000000 0x1fd ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .debug_macro 0x0000000000000000 0xa5 ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .debug_macro 0x0000000000000000 0x24f ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .debug_macro 0x0000000000000000 0x41 ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .debug_macro 0x0000000000000000 0x58 ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .debug_macro 0x0000000000000000 0x236 ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .debug_macro 0x0000000000000000 0xc7 ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .debug_macro 0x0000000000000000 0x4c ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .debug_macro 0x0000000000000000 0x208 ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .debug_macro 0x0000000000000000 0xd44 ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .debug_macro 0x0000000000000000 0x14e ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .debug_macro 0x0000000000000000 0x25a ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .debug_macro 0x0000000000000000 0x12 ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .debug_macro 0x0000000000000000 0x504 ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .debug_macro 0x0000000000000000 0x22c ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .debug_macro 0x0000000000000000 0x61 ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .debug_macro 0x0000000000000000 0xa5 ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .debug_macro 0x0000000000000000 0x198 ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .debug_macro 0x0000000000000000 0xd6 ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .debug_macro 0x0000000000000000 0x12e ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .debug_macro 0x0000000000000000 0x108 ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .debug_macro 0x0000000000000000 0x35 ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .debug_macro 0x0000000000000000 0x2d4 ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .debug_macro 0x0000000000000000 0xa7c ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .debug_macro 0x0000000000000000 0x59 ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .debug_macro 0x0000000000000000 0x14d ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .group 0x0000000000000000 0x8 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0x8 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0x8 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0x8 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0x8 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0x8 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0x10 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0x8 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + .text 0x0000000000000000 0x0 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .data 0x0000000000000000 0x0 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .bss 0x0000000000000000 0x0 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0xb86 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x5b ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x2a ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x94 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x43 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x34 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x57 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x103 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x6a ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x1df ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x99 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x1b2 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x3ed ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x17b ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x38c ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x43 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x34 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x52 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x52 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0xcf ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x3d ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x18a ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x58 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x2e ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x3b ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0xd9 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x12cd ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x11f ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x19 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x1920a ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x6d ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x2bf ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x3749 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x5d ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x18ad ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x6c4 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x185 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x115 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x1fd ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0xa5 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x24f ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x41 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x58 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x236 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0xc7 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x4c ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x208 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0xd44 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x14e ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x25a ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x12 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x504 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x22c ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x61 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0xa5 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x198 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0xd6 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x12e ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x108 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x35 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x2d4 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0xa7c ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x59 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x14d ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x14b ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x15a ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0xc9 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x26 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0x49b ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0xb5 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x0000000000000000 0xaa ./Application/User/TouchGFX/target/TouchGFXHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/OSWrappers.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/OSWrappers.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/OSWrappers.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/OSWrappers.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/OSWrappers.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/OSWrappers.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/OSWrappers.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/OSWrappers.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/OSWrappers.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/OSWrappers.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/OSWrappers.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/OSWrappers.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/OSWrappers.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/OSWrappers.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/OSWrappers.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/OSWrappers.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/OSWrappers.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/OSWrappers.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/OSWrappers.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/OSWrappers.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/OSWrappers.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/OSWrappers.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/OSWrappers.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/OSWrappers.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/OSWrappers.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/OSWrappers.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/OSWrappers.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/OSWrappers.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/OSWrappers.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/OSWrappers.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/OSWrappers.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/OSWrappers.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/OSWrappers.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/OSWrappers.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/OSWrappers.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/OSWrappers.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/OSWrappers.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/OSWrappers.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/OSWrappers.o + .text 0x0000000000000000 0x0 ./Application/User/TouchGFX/target/generated/OSWrappers.o + .data 0x0000000000000000 0x0 ./Application/User/TouchGFX/target/generated/OSWrappers.o + .bss 0x0000000000000000 0x0 ./Application/User/TouchGFX/target/generated/OSWrappers.o + .text._ZN8touchgfx10OSWrappers19signalRenderingDoneEv + 0x0000000000000000 0x2 ./Application/User/TouchGFX/target/generated/OSWrappers.o + .text._ZN8touchgfx10OSWrappers9taskDelayEt + 0x0000000000000000 0x4 ./Application/User/TouchGFX/target/generated/OSWrappers.o + .text._ZN8touchgfx10OSWrappers9taskYieldEv + 0x0000000000000000 0x4 ./Application/User/TouchGFX/target/generated/OSWrappers.o + .debug_macro 0x0000000000000000 0xb86 ./Application/User/TouchGFX/target/generated/OSWrappers.o + .debug_macro 0x0000000000000000 0x1b2 ./Application/User/TouchGFX/target/generated/OSWrappers.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/TouchGFX/target/generated/OSWrappers.o + .debug_macro 0x0000000000000000 0x3ed ./Application/User/TouchGFX/target/generated/OSWrappers.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/TouchGFX/target/generated/OSWrappers.o + .debug_macro 0x0000000000000000 0x5b ./Application/User/TouchGFX/target/generated/OSWrappers.o + .debug_macro 0x0000000000000000 0x2a ./Application/User/TouchGFX/target/generated/OSWrappers.o + .debug_macro 0x0000000000000000 0x94 ./Application/User/TouchGFX/target/generated/OSWrappers.o + .debug_macro 0x0000000000000000 0x43 ./Application/User/TouchGFX/target/generated/OSWrappers.o + .debug_macro 0x0000000000000000 0x34 ./Application/User/TouchGFX/target/generated/OSWrappers.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/TouchGFX/target/generated/OSWrappers.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/TouchGFX/target/generated/OSWrappers.o + .debug_macro 0x0000000000000000 0x57 ./Application/User/TouchGFX/target/generated/OSWrappers.o + .debug_macro 0x0000000000000000 0x103 ./Application/User/TouchGFX/target/generated/OSWrappers.o + .debug_macro 0x0000000000000000 0x6a ./Application/User/TouchGFX/target/generated/OSWrappers.o + .debug_macro 0x0000000000000000 0x1df ./Application/User/TouchGFX/target/generated/OSWrappers.o + .debug_macro 0x0000000000000000 0x99 ./Application/User/TouchGFX/target/generated/OSWrappers.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/TouchGFX/target/generated/OSWrappers.o + .debug_macro 0x0000000000000000 0x17b ./Application/User/TouchGFX/target/generated/OSWrappers.o + .debug_macro 0x0000000000000000 0x38c ./Application/User/TouchGFX/target/generated/OSWrappers.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/TouchGFX/target/generated/OSWrappers.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/TouchGFX/target/generated/OSWrappers.o + .debug_macro 0x0000000000000000 0x43 ./Application/User/TouchGFX/target/generated/OSWrappers.o + .debug_macro 0x0000000000000000 0x34 ./Application/User/TouchGFX/target/generated/OSWrappers.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/TouchGFX/target/generated/OSWrappers.o + .debug_macro 0x0000000000000000 0x52 ./Application/User/TouchGFX/target/generated/OSWrappers.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/TouchGFX/target/generated/OSWrappers.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/TouchGFX/target/generated/OSWrappers.o + .debug_macro 0x0000000000000000 0x52 ./Application/User/TouchGFX/target/generated/OSWrappers.o + .debug_macro 0x0000000000000000 0xcf ./Application/User/TouchGFX/target/generated/OSWrappers.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/TouchGFX/target/generated/OSWrappers.o + .debug_macro 0x0000000000000000 0x3d ./Application/User/TouchGFX/target/generated/OSWrappers.o + .debug_macro 0x0000000000000000 0x18a ./Application/User/TouchGFX/target/generated/OSWrappers.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/TouchGFX/target/generated/OSWrappers.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/TouchGFX/target/generated/OSWrappers.o + .debug_macro 0x0000000000000000 0x58 ./Application/User/TouchGFX/target/generated/OSWrappers.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/TouchGFX/target/generated/OSWrappers.o + .debug_macro 0x0000000000000000 0x74 ./Application/User/TouchGFX/target/generated/OSWrappers.o + .group 0x0000000000000000 0x8 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0x8 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0x8 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/STM32DMA.o + .text 0x0000000000000000 0x0 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .data 0x0000000000000000 0x0 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .bss 0x0000000000000000 0x0 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .text._ZN8touchgfx5paint12setL8PaletteEPKh + 0x0000000000000000 0x18 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .text._ZN8touchgfx5paint8tearDownEv + 0x0000000000000000 0x14 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .text._ZN8touchgfx5paint6rgb56513lineFromColorEPtjmhm + 0x0000000000000000 0x54 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .text._ZN8touchgfx5paint6rgb56514lineFromRGB565EPtPKtjh + 0x0000000000000000 0x4c ./Application/User/TouchGFX/target/generated/STM32DMA.o + .text._ZN8touchgfx5paint6rgb56516lineFromARGB8888EPtPKmjh + 0x0000000000000000 0x38 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .text._ZN8touchgfx5paint6rgb56516lineFromL8RGB888EPtPKhjh + 0x0000000000000000 0x94 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .text._ZN8touchgfx5paint6rgb56518lineFromL8ARGB8888EPtPKhjh + 0x0000000000000000 0x88 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .bss._ZN8touchgfx5paint12_GLOBAL__N_112L8ClutLoadedE + 0x0000000000000000 0x4 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .bss._ZN8touchgfx5paint12_GLOBAL__N_16L8CLUTE + 0x0000000000000000 0x4 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0xb86 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x2bf ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x2e ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x3b ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x8e ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x51 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x103 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x6a ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x1df ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0xd9 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x12cd ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x11f ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x19 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x1920a ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x6d ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x3749 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x17b ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x63 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x18ad ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x6c4 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x185 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x115 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x1fd ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0xa5 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x24f ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x41 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x58 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x236 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0xc7 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x4c ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x208 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0xd44 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x14e ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x25a ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x12 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x504 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x22c ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x61 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0xa5 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x198 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0xd6 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x12e ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x108 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x35 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x2d4 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0xa7c ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x59 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x14d ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x61 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x2a ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x43 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x34 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x99 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x1b2 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x3ed ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x38c ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x43 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x34 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x52 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x52 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0xcf ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x3d ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x18a ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000000000 0x58 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .group 0x0000000000000000 0x8 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .group 0x0000000000000000 0x8 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .group 0x0000000000000000 0x10 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .group 0x0000000000000000 0x8 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .group 0x0000000000000000 0x8 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .text 0x0000000000000000 0x0 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .data 0x0000000000000000 0x0 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .bss 0x0000000000000000 0x0 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .rodata.jpeg_read_file.str1.1 + 0x0000000000000000 0x61 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .text.jpeg_read_file + 0x0000000000000000 0x1c ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .debug_macro 0x0000000000000000 0xb86 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .debug_macro 0x0000000000000000 0x5b ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .debug_macro 0x0000000000000000 0x2a ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .debug_macro 0x0000000000000000 0x94 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .debug_macro 0x0000000000000000 0x43 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .debug_macro 0x0000000000000000 0x34 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .debug_macro 0x0000000000000000 0x57 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .debug_macro 0x0000000000000000 0x38c ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .debug_macro 0x0000000000000000 0x43 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .debug_macro 0x0000000000000000 0x34 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .debug_macro 0x0000000000000000 0x58 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .debug_macro 0x0000000000000000 0x8e ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .debug_macro 0x0000000000000000 0x177 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .debug_macro 0x0000000000000000 0x103 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .debug_macro 0x0000000000000000 0x6a ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .debug_macro 0x0000000000000000 0x1df ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .debug_macro 0x0000000000000000 0x14b ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .debug_macro 0x0000000000000000 0x15a ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .debug_macro 0x0000000000000000 0xc9 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .debug_macro 0x0000000000000000 0x26 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .debug_macro 0x0000000000000000 0x49b ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .debug_macro 0x0000000000000000 0xb5 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .debug_macro 0x0000000000000000 0xaa ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .debug_macro 0x0000000000000000 0x66 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .debug_macro 0x0000000000000000 0x74 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .debug_macro 0x0000000000000000 0xdd ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .debug_macro 0x0000000000000000 0x64 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .debug_macro 0x0000000000000000 0x1b2 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .debug_macro 0x0000000000000000 0x3ed ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .debug_macro 0x0000000000000000 0x29 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .debug_macro 0x0000000000000000 0x20 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .debug_macro 0x0000000000000000 0x67 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .debug_macro 0x0000000000000000 0xe6 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .debug_macro 0x0000000000000000 0x99 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .group 0x0000000000000000 0x8 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0x8 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0x8 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0x8 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0x8 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0x8 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0x8 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0x8 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0x8 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0x8 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0x8 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0x8 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0x14 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0x14 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0x14 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0x14 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0x8 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0x8 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .text 0x0000000000000000 0x0 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .data 0x0000000000000000 0x0 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .bss 0x0000000000000000 0x0 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0xb86 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0x58 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0x5b ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0x2a ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0x94 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0x43 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0x34 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0x57 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0x103 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0x6a ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0x1df ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0x99 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0x1b2 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0x3ed ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0x17b ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0x38c ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0x43 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0x34 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0x52 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0x52 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0xcf ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0x3d ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0x18a ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0x2bf ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0x2e ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0x3b ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0xd9 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0x12cd ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0x11f ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0x19 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0x1920a ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0x6d ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0x3749 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0x5d ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0x18ad ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0x6c4 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0x185 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0x115 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0x1fd ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0xa5 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0x24f ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0x41 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0x58 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0x236 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0xc7 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0x4c ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0x208 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0xd44 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0x14e ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0x25a ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0x12 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0x504 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0x22c ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0x61 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0xa5 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0x198 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0xd6 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0x12e ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0x108 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0x35 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0x2d4 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0xa7c ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0x59 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000000000 0x14d ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .group 0x0000000000000000 0x8 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0x8 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0x8 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0x8 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0x8 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0x8 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0x10 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0x10 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0x8 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0x8 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0x8 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .text 0x0000000000000000 0x0 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .data 0x0000000000000000 0x0 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .bss 0x0000000000000000 0x0 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .text._ZN8touchgfx3HAL21setDisplayOrientationENS_18DisplayOrientationE + 0x0000000000000000 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .text._ZN8touchgfx3HAL9sampleKeyERh + 0x0000000000000000 0x4 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .text._ZN8touchgfx3HAL19setAnimationStorageEPv + 0x0000000000000000 0x14 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .text._ZNK8touchgfx3HAL18getFlashDataReaderEv + 0x0000000000000000 0x4 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .text._ZN8touchgfx3HAL9taskDelayEt + 0x0000000000000000 0xa ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .text._ZN8touchgfx3HAL17getTFTCurrentLineEv + 0x0000000000000000 0x6 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .text._ZN8touchgfx3HAL10getDMATypeEv + 0x0000000000000000 0x8 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .text._ZN20TouchGFXGeneratedHALD2Ev + 0x0000000000000000 0x2 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .text._ZN8touchgfx3HAL15backPorchExitedEv + 0x0000000000000000 0x16 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .text._ZN20TouchGFXGeneratedHAL16flushFrameBufferEv + 0x0000000000000000 0x4 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .text._ZN20TouchGFXGeneratedHALD0Ev + 0x0000000000000000 0xe ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .text._ZN8touchgfx3HAL11getBlitCapsEv + 0x0000000000000000 0x12 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .text._ZN8touchgfx3HAL31performDisplayOrientationChangeEv + 0x0000000000000000 0x48 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .rodata._ZN8touchgfx3HAL28setFrameBufferStartAddressesEPvS1_S1_.str1.1 + 0x0000000000000000 0xcb ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .text._ZN8touchgfx3HAL28setFrameBufferStartAddressesEPvS1_S1_ + 0x0000000000000000 0x40 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .rodata._ZN8touchgfx3HAL18setFrameBufferSizeEtt.str1.1 + 0x0000000000000000 0xa6 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .text._ZN8touchgfx3HAL18setFrameBufferSizeEtt + 0x0000000000000000 0x44 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .text._ZN8touchgfx15VideoController11getInstanceEv + 0x0000000000000000 0x8 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .rodata._ZTV20TouchGFXGeneratedHAL + 0x0000000000000000 0xd8 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0xb86 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x5b ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x2a ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x94 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x43 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x34 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x57 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x103 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x6a ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x1df ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x99 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x1b2 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x3ed ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x17b ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x38c ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x43 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x34 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x52 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x52 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0xcf ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x3d ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x18a ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x58 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x58 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x8e ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x177 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x35 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x20 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x14b ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x15a ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0xc9 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x26 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x49b ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0xb5 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0xaa ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x66 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x74 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0xdd ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x2e ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x3b ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x12cd ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x11f ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x19 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x1920a ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x6d ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x2bf ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x3749 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x5d ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x18ad ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x6c4 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x185 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x115 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x1fd ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0xa5 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x24f ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x41 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x58 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x236 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0xc7 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x4c ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x208 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0xd44 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x14e ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x25a ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x12 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x504 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x22c ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x61 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0xa5 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x198 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0xd6 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x12e ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x108 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x35 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x2d4 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0xa7c ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x59 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x0000000000000000 0x14d ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .group 0x0000000000000000 0x10 ./Application/User/generated/ApplicationFontProvider.o + .group 0x0000000000000000 0xc ./Application/User/generated/ApplicationFontProvider.o + .group 0x0000000000000000 0xc ./Application/User/generated/ApplicationFontProvider.o + .group 0x0000000000000000 0xc ./Application/User/generated/ApplicationFontProvider.o + .group 0x0000000000000000 0xc ./Application/User/generated/ApplicationFontProvider.o + .group 0x0000000000000000 0xc ./Application/User/generated/ApplicationFontProvider.o + .group 0x0000000000000000 0xc ./Application/User/generated/ApplicationFontProvider.o + .group 0x0000000000000000 0xc ./Application/User/generated/ApplicationFontProvider.o + .group 0x0000000000000000 0xc ./Application/User/generated/ApplicationFontProvider.o + .group 0x0000000000000000 0xc ./Application/User/generated/ApplicationFontProvider.o + .group 0x0000000000000000 0xc ./Application/User/generated/ApplicationFontProvider.o + .group 0x0000000000000000 0xc ./Application/User/generated/ApplicationFontProvider.o + .group 0x0000000000000000 0xc ./Application/User/generated/ApplicationFontProvider.o + .group 0x0000000000000000 0xc ./Application/User/generated/ApplicationFontProvider.o + .group 0x0000000000000000 0xc ./Application/User/generated/ApplicationFontProvider.o + .group 0x0000000000000000 0xc ./Application/User/generated/ApplicationFontProvider.o + .group 0x0000000000000000 0xc ./Application/User/generated/ApplicationFontProvider.o + .text 0x0000000000000000 0x0 ./Application/User/generated/ApplicationFontProvider.o + .data 0x0000000000000000 0x0 ./Application/User/generated/ApplicationFontProvider.o + .bss 0x0000000000000000 0x0 ./Application/User/generated/ApplicationFontProvider.o + .debug_macro 0x0000000000000000 0xb86 ./Application/User/generated/ApplicationFontProvider.o + .debug_macro 0x0000000000000000 0x58 ./Application/User/generated/ApplicationFontProvider.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/generated/ApplicationFontProvider.o + .debug_macro 0x0000000000000000 0x5b ./Application/User/generated/ApplicationFontProvider.o + .debug_macro 0x0000000000000000 0x2a ./Application/User/generated/ApplicationFontProvider.o + .debug_macro 0x0000000000000000 0x94 ./Application/User/generated/ApplicationFontProvider.o + .debug_macro 0x0000000000000000 0x43 ./Application/User/generated/ApplicationFontProvider.o + .debug_macro 0x0000000000000000 0x34 ./Application/User/generated/ApplicationFontProvider.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/generated/ApplicationFontProvider.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/generated/ApplicationFontProvider.o + .debug_macro 0x0000000000000000 0x57 ./Application/User/generated/ApplicationFontProvider.o + .debug_macro 0x0000000000000000 0x103 ./Application/User/generated/ApplicationFontProvider.o + .debug_macro 0x0000000000000000 0x6a ./Application/User/generated/ApplicationFontProvider.o + .debug_macro 0x0000000000000000 0x1df ./Application/User/generated/ApplicationFontProvider.o + .debug_macro 0x0000000000000000 0x99 ./Application/User/generated/ApplicationFontProvider.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/generated/ApplicationFontProvider.o + .group 0x0000000000000000 0xc ./Application/User/generated/BitmapDatabase.o + .group 0x0000000000000000 0xc ./Application/User/generated/BitmapDatabase.o + .group 0x0000000000000000 0xc ./Application/User/generated/BitmapDatabase.o + .group 0x0000000000000000 0xc ./Application/User/generated/BitmapDatabase.o + .group 0x0000000000000000 0xc ./Application/User/generated/BitmapDatabase.o + .group 0x0000000000000000 0xc ./Application/User/generated/BitmapDatabase.o + .group 0x0000000000000000 0xc ./Application/User/generated/BitmapDatabase.o + .group 0x0000000000000000 0xc ./Application/User/generated/BitmapDatabase.o + .group 0x0000000000000000 0xc ./Application/User/generated/BitmapDatabase.o + .group 0x0000000000000000 0xc ./Application/User/generated/BitmapDatabase.o + .group 0x0000000000000000 0xc ./Application/User/generated/BitmapDatabase.o + .group 0x0000000000000000 0xc ./Application/User/generated/BitmapDatabase.o + .group 0x0000000000000000 0xc ./Application/User/generated/BitmapDatabase.o + .group 0x0000000000000000 0xc ./Application/User/generated/BitmapDatabase.o + .group 0x0000000000000000 0xc ./Application/User/generated/BitmapDatabase.o + .text 0x0000000000000000 0x0 ./Application/User/generated/BitmapDatabase.o + .data 0x0000000000000000 0x0 ./Application/User/generated/BitmapDatabase.o + .bss 0x0000000000000000 0x0 ./Application/User/generated/BitmapDatabase.o + .debug_macro 0x0000000000000000 0xb86 ./Application/User/generated/BitmapDatabase.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/generated/BitmapDatabase.o + .debug_macro 0x0000000000000000 0x5b ./Application/User/generated/BitmapDatabase.o + .debug_macro 0x0000000000000000 0x2a ./Application/User/generated/BitmapDatabase.o + .debug_macro 0x0000000000000000 0x94 ./Application/User/generated/BitmapDatabase.o + .debug_macro 0x0000000000000000 0x43 ./Application/User/generated/BitmapDatabase.o + .debug_macro 0x0000000000000000 0x34 ./Application/User/generated/BitmapDatabase.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/generated/BitmapDatabase.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/generated/BitmapDatabase.o + .debug_macro 0x0000000000000000 0x57 ./Application/User/generated/BitmapDatabase.o + .debug_macro 0x0000000000000000 0x103 ./Application/User/generated/BitmapDatabase.o + .debug_macro 0x0000000000000000 0x6a ./Application/User/generated/BitmapDatabase.o + .debug_macro 0x0000000000000000 0x1df ./Application/User/generated/BitmapDatabase.o + .debug_macro 0x0000000000000000 0x99 ./Application/User/generated/BitmapDatabase.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/generated/BitmapDatabase.o + .group 0x0000000000000000 0x8 ./Application/User/generated/CachedFont.o + .group 0x0000000000000000 0x8 ./Application/User/generated/CachedFont.o + .group 0x0000000000000000 0x8 ./Application/User/generated/CachedFont.o + .group 0x0000000000000000 0x8 ./Application/User/generated/CachedFont.o + .group 0x0000000000000000 0x8 ./Application/User/generated/CachedFont.o + .group 0x0000000000000000 0x8 ./Application/User/generated/CachedFont.o + .group 0x0000000000000000 0x8 ./Application/User/generated/CachedFont.o + .group 0x0000000000000000 0x8 ./Application/User/generated/CachedFont.o + .group 0x0000000000000000 0x8 ./Application/User/generated/CachedFont.o + .group 0x0000000000000000 0x10 ./Application/User/generated/CachedFont.o + .group 0x0000000000000000 0x8 ./Application/User/generated/CachedFont.o + .group 0x0000000000000000 0x8 ./Application/User/generated/CachedFont.o + .group 0x0000000000000000 0xc ./Application/User/generated/CachedFont.o + .group 0x0000000000000000 0xc ./Application/User/generated/CachedFont.o + .group 0x0000000000000000 0xc ./Application/User/generated/CachedFont.o + .group 0x0000000000000000 0xc ./Application/User/generated/CachedFont.o + .group 0x0000000000000000 0xc ./Application/User/generated/CachedFont.o + .group 0x0000000000000000 0xc ./Application/User/generated/CachedFont.o + .group 0x0000000000000000 0xc ./Application/User/generated/CachedFont.o + .group 0x0000000000000000 0xc ./Application/User/generated/CachedFont.o + .group 0x0000000000000000 0xc ./Application/User/generated/CachedFont.o + .group 0x0000000000000000 0xc ./Application/User/generated/CachedFont.o + .group 0x0000000000000000 0xc ./Application/User/generated/CachedFont.o + .group 0x0000000000000000 0xc ./Application/User/generated/CachedFont.o + .group 0x0000000000000000 0xc ./Application/User/generated/CachedFont.o + .group 0x0000000000000000 0xc ./Application/User/generated/CachedFont.o + .group 0x0000000000000000 0xc ./Application/User/generated/CachedFont.o + .group 0x0000000000000000 0xc ./Application/User/generated/CachedFont.o + .text 0x0000000000000000 0x0 ./Application/User/generated/CachedFont.o + .data 0x0000000000000000 0x0 ./Application/User/generated/CachedFont.o + .bss 0x0000000000000000 0x0 ./Application/User/generated/CachedFont.o + .text._ZN8touchgfx10CachedFont12setGSUBTableEPKt + 0x0000000000000000 0x4 ./Application/User/generated/CachedFont.o + .text._ZN8touchgfx10CachedFont23setContextualFormsTableEPKNS_24FontContextualFormsTableE + 0x0000000000000000 0x4 ./Application/User/generated/CachedFont.o + .text._ZNK8touchgfx10CachedFont12getPixelDataEPKNS_9GlyphNodeE + 0x0000000000000000 0x14 ./Application/User/generated/CachedFont.o + .text._ZNK8touchgfx10CachedFont10getKerningEtPKNS_9GlyphNodeE + 0x0000000000000000 0x4 ./Application/User/generated/CachedFont.o + .text._ZN8touchgfx10CachedFontD2Ev + 0x0000000000000000 0x2 ./Application/User/generated/CachedFont.o + .text._ZNK8touchgfx10CachedFont8getGlyphEtRPKhRh + 0x0000000000000000 0x7c ./Application/User/generated/CachedFont.o + .text._ZN8touchgfx10CachedFontD0Ev + 0x0000000000000000 0xe ./Application/User/generated/CachedFont.o + .text._ZNK8touchgfx10CachedFont12getGSUBTableEv + 0x0000000000000000 0x10 ./Application/User/generated/CachedFont.o + .text._ZNK8touchgfx10CachedFont23getContextualFormsTableEv + 0x0000000000000000 0x10 ./Application/User/generated/CachedFont.o + .rodata._ZTVN8touchgfx10CachedFontE + 0x0000000000000000 0x68 ./Application/User/generated/CachedFont.o + .debug_macro 0x0000000000000000 0xb86 ./Application/User/generated/CachedFont.o + .debug_macro 0x0000000000000000 0x58 ./Application/User/generated/CachedFont.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/generated/CachedFont.o + .debug_macro 0x0000000000000000 0x5b ./Application/User/generated/CachedFont.o + .debug_macro 0x0000000000000000 0x2a ./Application/User/generated/CachedFont.o + .debug_macro 0x0000000000000000 0x94 ./Application/User/generated/CachedFont.o + .debug_macro 0x0000000000000000 0x43 ./Application/User/generated/CachedFont.o + .debug_macro 0x0000000000000000 0x34 ./Application/User/generated/CachedFont.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/generated/CachedFont.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/generated/CachedFont.o + .debug_macro 0x0000000000000000 0x57 ./Application/User/generated/CachedFont.o + .debug_macro 0x0000000000000000 0x103 ./Application/User/generated/CachedFont.o + .debug_macro 0x0000000000000000 0x6a ./Application/User/generated/CachedFont.o + .debug_macro 0x0000000000000000 0x1df ./Application/User/generated/CachedFont.o + .debug_macro 0x0000000000000000 0x99 ./Application/User/generated/CachedFont.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/generated/CachedFont.o + .group 0x0000000000000000 0x10 ./Application/User/generated/FontCache.o + .group 0x0000000000000000 0xc ./Application/User/generated/FontCache.o + .group 0x0000000000000000 0xc ./Application/User/generated/FontCache.o + .group 0x0000000000000000 0xc ./Application/User/generated/FontCache.o + .group 0x0000000000000000 0xc ./Application/User/generated/FontCache.o + .group 0x0000000000000000 0xc ./Application/User/generated/FontCache.o + .group 0x0000000000000000 0xc ./Application/User/generated/FontCache.o + .group 0x0000000000000000 0xc ./Application/User/generated/FontCache.o + .group 0x0000000000000000 0xc ./Application/User/generated/FontCache.o + .group 0x0000000000000000 0xc ./Application/User/generated/FontCache.o + .group 0x0000000000000000 0xc ./Application/User/generated/FontCache.o + .group 0x0000000000000000 0xc ./Application/User/generated/FontCache.o + .group 0x0000000000000000 0xc ./Application/User/generated/FontCache.o + .group 0x0000000000000000 0xc ./Application/User/generated/FontCache.o + .group 0x0000000000000000 0xc ./Application/User/generated/FontCache.o + .group 0x0000000000000000 0xc ./Application/User/generated/FontCache.o + .group 0x0000000000000000 0xc ./Application/User/generated/FontCache.o + .group 0x0000000000000000 0xc ./Application/User/generated/FontCache.o + .group 0x0000000000000000 0xc ./Application/User/generated/FontCache.o + .group 0x0000000000000000 0xc ./Application/User/generated/FontCache.o + .group 0x0000000000000000 0xc ./Application/User/generated/FontCache.o + .group 0x0000000000000000 0xc ./Application/User/generated/FontCache.o + .group 0x0000000000000000 0xc ./Application/User/generated/FontCache.o + .group 0x0000000000000000 0xc ./Application/User/generated/FontCache.o + .group 0x0000000000000000 0xc ./Application/User/generated/FontCache.o + .group 0x0000000000000000 0xc ./Application/User/generated/FontCache.o + .group 0x0000000000000000 0xc ./Application/User/generated/FontCache.o + .group 0x0000000000000000 0xc ./Application/User/generated/FontCache.o + .group 0x0000000000000000 0xc ./Application/User/generated/FontCache.o + .group 0x0000000000000000 0xc ./Application/User/generated/FontCache.o + .group 0x0000000000000000 0xc ./Application/User/generated/FontCache.o + .group 0x0000000000000000 0xc ./Application/User/generated/FontCache.o + .group 0x0000000000000000 0xc ./Application/User/generated/FontCache.o + .group 0x0000000000000000 0xc ./Application/User/generated/FontCache.o + .group 0x0000000000000000 0xc ./Application/User/generated/FontCache.o + .group 0x0000000000000000 0xc ./Application/User/generated/FontCache.o + .text 0x0000000000000000 0x0 ./Application/User/generated/FontCache.o + .data 0x0000000000000000 0x0 ./Application/User/generated/FontCache.o + .bss 0x0000000000000000 0x0 ./Application/User/generated/FontCache.o + .text._ZN8touchgfx9FontCache12getGlyphSizeEPKNS_9GlyphNodeE.isra.0 + 0x0000000000000000 0x30 ./Application/User/generated/FontCache.o + .text._ZN8touchgfx9FontCacheC2Ev + 0x0000000000000000 0xe ./Application/User/generated/FontCache.o + .text._ZN8touchgfx9FontCache5clearEb + 0x0000000000000000 0x20 ./Application/User/generated/FontCache.o + .text._ZN8touchgfx9FontCache9setMemoryEPhm + 0x0000000000000000 0xa ./Application/User/generated/FontCache.o + .text._ZN8touchgfx9FontCache9setReaderEPNS_14FontDataReaderE + 0x0000000000000000 0x4 ./Application/User/generated/FontCache.o + .text._ZNK8touchgfx9FontCache8getGlyphEtt + 0x0000000000000000 0x12 ./Application/User/generated/FontCache.o + .text._ZN8touchgfx9FontCache4openEv + 0x0000000000000000 0xc ./Application/User/generated/FontCache.o + .text._ZN8touchgfx9FontCache5closeEv + 0x0000000000000000 0xc ./Application/User/generated/FontCache.o + .text._ZNK8touchgfx9FontCache8containsEtt + 0x0000000000000000 0x16 ./Application/User/generated/FontCache.o + .text._ZN8touchgfx9FontCache16sortSortedStringEi + 0x0000000000000000 0x3a ./Application/User/generated/FontCache.o + .text._ZN8touchgfx9FontCache18createSortedStringEPKt + 0x0000000000000000 0x3e ./Application/User/generated/FontCache.o + .rodata._ZN8touchgfx9FontCache21createSortedLigaturesEPNS_10CachedFontENS_9TypedTextEPKtz.str1.1 + 0x0000000000000000 0x10d ./Application/User/generated/FontCache.o + .text._ZN8touchgfx9FontCache21createSortedLigaturesEPNS_10CachedFontENS_9TypedTextEPKtz + 0x0000000000000000 0xd0 ./Application/User/generated/FontCache.o + .text._ZN8touchgfx9FontCache11setPositionEm + 0x0000000000000000 0xc ./Application/User/generated/FontCache.o + .text._ZN8touchgfx9FontCache8readDataEPvm + 0x0000000000000000 0xc ./Application/User/generated/FontCache.o + .text._ZN8touchgfx9FontCache9copyGlyphEPhttRb + 0x0000000000000000 0x84 ./Application/User/generated/FontCache.o + .text._ZN8touchgfx9FontCache6insertEttRb + 0x0000000000000000 0x30 ./Application/User/generated/FontCache.o + .text._ZN8touchgfx9FontCache9cacheDataEPNS_9GlyphNodeE + 0x0000000000000000 0x40 ./Application/User/generated/FontCache.o + .rodata._ZN8touchgfx9FontCache17cacheSortedStringENS_9TypedTextE.str1.1 + 0x0000000000000000 0x73 ./Application/User/generated/FontCache.o + .text._ZN8touchgfx9FontCache17cacheSortedStringENS_9TypedTextE + 0x0000000000000000 0x150 ./Application/User/generated/FontCache.o + .text._ZN8touchgfx9FontCache11cacheStringENS_9TypedTextEPKt + 0x0000000000000000 0x40 ./Application/User/generated/FontCache.o + .text._ZN8touchgfx9FontCache14cacheLigaturesEPNS_10CachedFontENS_9TypedTextEPKt + 0x0000000000000000 0x54 ./Application/User/generated/FontCache.o + .text._ZN8touchgfx9FontCache20initializeCachedFontENS_9TypedTextEPNS_10CachedFontEb + 0x0000000000000000 0x1e0 ./Application/User/generated/FontCache.o + .debug_macro 0x0000000000000000 0xb86 ./Application/User/generated/FontCache.o + .debug_macro 0x0000000000000000 0x1b2 ./Application/User/generated/FontCache.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/generated/FontCache.o + .debug_macro 0x0000000000000000 0x3ed ./Application/User/generated/FontCache.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/generated/FontCache.o + .debug_macro 0x0000000000000000 0x5b ./Application/User/generated/FontCache.o + .debug_macro 0x0000000000000000 0x2a ./Application/User/generated/FontCache.o + .debug_macro 0x0000000000000000 0x94 ./Application/User/generated/FontCache.o + .debug_macro 0x0000000000000000 0x43 ./Application/User/generated/FontCache.o + .debug_macro 0x0000000000000000 0x34 ./Application/User/generated/FontCache.o + .debug_macro 0x0000000000000000 0x17b ./Application/User/generated/FontCache.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/generated/FontCache.o + .debug_macro 0x0000000000000000 0x43 ./Application/User/generated/FontCache.o + .debug_macro 0x0000000000000000 0x57 ./Application/User/generated/FontCache.o + .debug_macro 0x0000000000000000 0x34 ./Application/User/generated/FontCache.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/generated/FontCache.o + .debug_macro 0x0000000000000000 0x58 ./Application/User/generated/FontCache.o + .debug_macro 0x0000000000000000 0x8e ./Application/User/generated/FontCache.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/generated/FontCache.o + .debug_macro 0x0000000000000000 0x177 ./Application/User/generated/FontCache.o + .debug_macro 0x0000000000000000 0x38c ./Application/User/generated/FontCache.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/generated/FontCache.o + .debug_macro 0x0000000000000000 0x35 ./Application/User/generated/FontCache.o + .debug_macro 0x0000000000000000 0x20 ./Application/User/generated/FontCache.o + .debug_macro 0x0000000000000000 0x58 ./Application/User/generated/FontCache.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/generated/FontCache.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/generated/FontCache.o + .debug_macro 0x0000000000000000 0x103 ./Application/User/generated/FontCache.o + .debug_macro 0x0000000000000000 0x6a ./Application/User/generated/FontCache.o + .debug_macro 0x0000000000000000 0x1df ./Application/User/generated/FontCache.o + .debug_macro 0x0000000000000000 0x99 ./Application/User/generated/FontCache.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/generated/FontCache.o + .group 0x0000000000000000 0xc ./Application/User/generated/Font_verdana_10_4bpp_0.o + .group 0x0000000000000000 0xc ./Application/User/generated/Font_verdana_10_4bpp_0.o + .group 0x0000000000000000 0xc ./Application/User/generated/Font_verdana_10_4bpp_0.o + .group 0x0000000000000000 0xc ./Application/User/generated/Font_verdana_10_4bpp_0.o + .group 0x0000000000000000 0xc ./Application/User/generated/Font_verdana_10_4bpp_0.o + .group 0x0000000000000000 0xc ./Application/User/generated/Font_verdana_10_4bpp_0.o + .group 0x0000000000000000 0xc ./Application/User/generated/Font_verdana_10_4bpp_0.o + .group 0x0000000000000000 0xc ./Application/User/generated/Font_verdana_10_4bpp_0.o + .group 0x0000000000000000 0xc ./Application/User/generated/Font_verdana_10_4bpp_0.o + .group 0x0000000000000000 0xc ./Application/User/generated/Font_verdana_10_4bpp_0.o + .group 0x0000000000000000 0xc ./Application/User/generated/Font_verdana_10_4bpp_0.o + .group 0x0000000000000000 0xc ./Application/User/generated/Font_verdana_10_4bpp_0.o + .group 0x0000000000000000 0xc ./Application/User/generated/Font_verdana_10_4bpp_0.o + .group 0x0000000000000000 0xc ./Application/User/generated/Font_verdana_10_4bpp_0.o + .group 0x0000000000000000 0xc ./Application/User/generated/Font_verdana_10_4bpp_0.o + .text 0x0000000000000000 0x0 ./Application/User/generated/Font_verdana_10_4bpp_0.o + .data 0x0000000000000000 0x0 ./Application/User/generated/Font_verdana_10_4bpp_0.o + .bss 0x0000000000000000 0x0 ./Application/User/generated/Font_verdana_10_4bpp_0.o + .debug_macro 0x0000000000000000 0xb86 ./Application/User/generated/Font_verdana_10_4bpp_0.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/generated/Font_verdana_10_4bpp_0.o + .debug_macro 0x0000000000000000 0x5b ./Application/User/generated/Font_verdana_10_4bpp_0.o + .debug_macro 0x0000000000000000 0x2a ./Application/User/generated/Font_verdana_10_4bpp_0.o + .debug_macro 0x0000000000000000 0x94 ./Application/User/generated/Font_verdana_10_4bpp_0.o + .debug_macro 0x0000000000000000 0x43 ./Application/User/generated/Font_verdana_10_4bpp_0.o + .debug_macro 0x0000000000000000 0x34 ./Application/User/generated/Font_verdana_10_4bpp_0.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/generated/Font_verdana_10_4bpp_0.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/generated/Font_verdana_10_4bpp_0.o + .debug_macro 0x0000000000000000 0x57 ./Application/User/generated/Font_verdana_10_4bpp_0.o + .debug_macro 0x0000000000000000 0x103 ./Application/User/generated/Font_verdana_10_4bpp_0.o + .debug_macro 0x0000000000000000 0x6a ./Application/User/generated/Font_verdana_10_4bpp_0.o + .debug_macro 0x0000000000000000 0x1df ./Application/User/generated/Font_verdana_10_4bpp_0.o + .debug_macro 0x0000000000000000 0x99 ./Application/User/generated/Font_verdana_10_4bpp_0.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/generated/Font_verdana_10_4bpp_0.o + .group 0x0000000000000000 0xc ./Application/User/generated/Font_verdana_20_4bpp_0.o + .group 0x0000000000000000 0xc ./Application/User/generated/Font_verdana_20_4bpp_0.o + .group 0x0000000000000000 0xc ./Application/User/generated/Font_verdana_20_4bpp_0.o + .group 0x0000000000000000 0xc ./Application/User/generated/Font_verdana_20_4bpp_0.o + .group 0x0000000000000000 0xc ./Application/User/generated/Font_verdana_20_4bpp_0.o + .group 0x0000000000000000 0xc ./Application/User/generated/Font_verdana_20_4bpp_0.o + .group 0x0000000000000000 0xc ./Application/User/generated/Font_verdana_20_4bpp_0.o + .group 0x0000000000000000 0xc ./Application/User/generated/Font_verdana_20_4bpp_0.o + .group 0x0000000000000000 0xc ./Application/User/generated/Font_verdana_20_4bpp_0.o + .group 0x0000000000000000 0xc ./Application/User/generated/Font_verdana_20_4bpp_0.o + .group 0x0000000000000000 0xc ./Application/User/generated/Font_verdana_20_4bpp_0.o + .group 0x0000000000000000 0xc ./Application/User/generated/Font_verdana_20_4bpp_0.o + .group 0x0000000000000000 0xc ./Application/User/generated/Font_verdana_20_4bpp_0.o + .group 0x0000000000000000 0xc ./Application/User/generated/Font_verdana_20_4bpp_0.o + .group 0x0000000000000000 0xc ./Application/User/generated/Font_verdana_20_4bpp_0.o + .text 0x0000000000000000 0x0 ./Application/User/generated/Font_verdana_20_4bpp_0.o + .data 0x0000000000000000 0x0 ./Application/User/generated/Font_verdana_20_4bpp_0.o + .bss 0x0000000000000000 0x0 ./Application/User/generated/Font_verdana_20_4bpp_0.o + .debug_macro 0x0000000000000000 0xb86 ./Application/User/generated/Font_verdana_20_4bpp_0.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/generated/Font_verdana_20_4bpp_0.o + .debug_macro 0x0000000000000000 0x5b ./Application/User/generated/Font_verdana_20_4bpp_0.o + .debug_macro 0x0000000000000000 0x2a ./Application/User/generated/Font_verdana_20_4bpp_0.o + .debug_macro 0x0000000000000000 0x94 ./Application/User/generated/Font_verdana_20_4bpp_0.o + .debug_macro 0x0000000000000000 0x43 ./Application/User/generated/Font_verdana_20_4bpp_0.o + .debug_macro 0x0000000000000000 0x34 ./Application/User/generated/Font_verdana_20_4bpp_0.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/generated/Font_verdana_20_4bpp_0.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/generated/Font_verdana_20_4bpp_0.o + .debug_macro 0x0000000000000000 0x57 ./Application/User/generated/Font_verdana_20_4bpp_0.o + .debug_macro 0x0000000000000000 0x103 ./Application/User/generated/Font_verdana_20_4bpp_0.o + .debug_macro 0x0000000000000000 0x6a ./Application/User/generated/Font_verdana_20_4bpp_0.o + .debug_macro 0x0000000000000000 0x1df ./Application/User/generated/Font_verdana_20_4bpp_0.o + .debug_macro 0x0000000000000000 0x99 ./Application/User/generated/Font_verdana_20_4bpp_0.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/generated/Font_verdana_20_4bpp_0.o + .group 0x0000000000000000 0xc ./Application/User/generated/Font_verdana_40_4bpp_0.o + .group 0x0000000000000000 0xc ./Application/User/generated/Font_verdana_40_4bpp_0.o + .group 0x0000000000000000 0xc ./Application/User/generated/Font_verdana_40_4bpp_0.o + .group 0x0000000000000000 0xc ./Application/User/generated/Font_verdana_40_4bpp_0.o + .group 0x0000000000000000 0xc ./Application/User/generated/Font_verdana_40_4bpp_0.o + .group 0x0000000000000000 0xc ./Application/User/generated/Font_verdana_40_4bpp_0.o + .group 0x0000000000000000 0xc ./Application/User/generated/Font_verdana_40_4bpp_0.o + .group 0x0000000000000000 0xc ./Application/User/generated/Font_verdana_40_4bpp_0.o + .group 0x0000000000000000 0xc ./Application/User/generated/Font_verdana_40_4bpp_0.o + .group 0x0000000000000000 0xc ./Application/User/generated/Font_verdana_40_4bpp_0.o + .group 0x0000000000000000 0xc ./Application/User/generated/Font_verdana_40_4bpp_0.o + .group 0x0000000000000000 0xc ./Application/User/generated/Font_verdana_40_4bpp_0.o + .group 0x0000000000000000 0xc ./Application/User/generated/Font_verdana_40_4bpp_0.o + .group 0x0000000000000000 0xc ./Application/User/generated/Font_verdana_40_4bpp_0.o + .group 0x0000000000000000 0xc ./Application/User/generated/Font_verdana_40_4bpp_0.o + .text 0x0000000000000000 0x0 ./Application/User/generated/Font_verdana_40_4bpp_0.o + .data 0x0000000000000000 0x0 ./Application/User/generated/Font_verdana_40_4bpp_0.o + .bss 0x0000000000000000 0x0 ./Application/User/generated/Font_verdana_40_4bpp_0.o + .debug_macro 0x0000000000000000 0xb86 ./Application/User/generated/Font_verdana_40_4bpp_0.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/generated/Font_verdana_40_4bpp_0.o + .debug_macro 0x0000000000000000 0x5b ./Application/User/generated/Font_verdana_40_4bpp_0.o + .debug_macro 0x0000000000000000 0x2a ./Application/User/generated/Font_verdana_40_4bpp_0.o + .debug_macro 0x0000000000000000 0x94 ./Application/User/generated/Font_verdana_40_4bpp_0.o + .debug_macro 0x0000000000000000 0x43 ./Application/User/generated/Font_verdana_40_4bpp_0.o + .debug_macro 0x0000000000000000 0x34 ./Application/User/generated/Font_verdana_40_4bpp_0.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/generated/Font_verdana_40_4bpp_0.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/generated/Font_verdana_40_4bpp_0.o + .debug_macro 0x0000000000000000 0x57 ./Application/User/generated/Font_verdana_40_4bpp_0.o + .debug_macro 0x0000000000000000 0x103 ./Application/User/generated/Font_verdana_40_4bpp_0.o + .debug_macro 0x0000000000000000 0x6a ./Application/User/generated/Font_verdana_40_4bpp_0.o + .debug_macro 0x0000000000000000 0x1df ./Application/User/generated/Font_verdana_40_4bpp_0.o + .debug_macro 0x0000000000000000 0x99 ./Application/User/generated/Font_verdana_40_4bpp_0.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/generated/Font_verdana_40_4bpp_0.o + .group 0x0000000000000000 0x8 ./Application/User/generated/FrontendApplicationBase.o + .group 0x0000000000000000 0x8 ./Application/User/generated/FrontendApplicationBase.o + .group 0x0000000000000000 0x8 ./Application/User/generated/FrontendApplicationBase.o + .group 0x0000000000000000 0x8 ./Application/User/generated/FrontendApplicationBase.o + .group 0x0000000000000000 0x8 ./Application/User/generated/FrontendApplicationBase.o + .group 0x0000000000000000 0x8 ./Application/User/generated/FrontendApplicationBase.o + .group 0x0000000000000000 0x10 ./Application/User/generated/FrontendApplicationBase.o + .group 0x0000000000000000 0x10 ./Application/User/generated/FrontendApplicationBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/FrontendApplicationBase.o + .group 0x0000000000000000 0x8 ./Application/User/generated/FrontendApplicationBase.o + .group 0x0000000000000000 0x10 ./Application/User/generated/FrontendApplicationBase.o + .group 0x0000000000000000 0x10 ./Application/User/generated/FrontendApplicationBase.o + .group 0x0000000000000000 0x8 ./Application/User/generated/FrontendApplicationBase.o + .group 0x0000000000000000 0x8 ./Application/User/generated/FrontendApplicationBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/FrontendApplicationBase.o + .group 0x0000000000000000 0x8 ./Application/User/generated/FrontendApplicationBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/FrontendApplicationBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/FrontendApplicationBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/FrontendApplicationBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/FrontendApplicationBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/FrontendApplicationBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/FrontendApplicationBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/FrontendApplicationBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/FrontendApplicationBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/FrontendApplicationBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/FrontendApplicationBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/FrontendApplicationBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/FrontendApplicationBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/FrontendApplicationBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/FrontendApplicationBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/FrontendApplicationBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/FrontendApplicationBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/FrontendApplicationBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/FrontendApplicationBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/FrontendApplicationBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/FrontendApplicationBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/FrontendApplicationBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/FrontendApplicationBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/FrontendApplicationBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/FrontendApplicationBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/FrontendApplicationBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/FrontendApplicationBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/FrontendApplicationBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/FrontendApplicationBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/FrontendApplicationBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/FrontendApplicationBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/FrontendApplicationBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/FrontendApplicationBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/FrontendApplicationBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/FrontendApplicationBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/FrontendApplicationBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/FrontendApplicationBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/FrontendApplicationBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/FrontendApplicationBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/FrontendApplicationBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/FrontendApplicationBase.o + .text 0x0000000000000000 0x0 ./Application/User/generated/FrontendApplicationBase.o + .data 0x0000000000000000 0x0 ./Application/User/generated/FrontendApplicationBase.o + .bss 0x0000000000000000 0x0 ./Application/User/generated/FrontendApplicationBase.o + .text._ZN8touchgfx14MVPApplicationD2Ev + 0x0000000000000000 0x2 ./Application/User/generated/FrontendApplicationBase.o + .text._ZN8touchgfx14MVPApplicationD0Ev + 0x0000000000000000 0x10 ./Application/User/generated/FrontendApplicationBase.o + .debug_macro 0x0000000000000000 0xb86 ./Application/User/generated/FrontendApplicationBase.o + .debug_macro 0x0000000000000000 0x1b2 ./Application/User/generated/FrontendApplicationBase.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/generated/FrontendApplicationBase.o + .debug_macro 0x0000000000000000 0x3ed ./Application/User/generated/FrontendApplicationBase.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/generated/FrontendApplicationBase.o + .debug_macro 0x0000000000000000 0x5b ./Application/User/generated/FrontendApplicationBase.o + .debug_macro 0x0000000000000000 0x2a ./Application/User/generated/FrontendApplicationBase.o + .debug_macro 0x0000000000000000 0x94 ./Application/User/generated/FrontendApplicationBase.o + .debug_macro 0x0000000000000000 0x43 ./Application/User/generated/FrontendApplicationBase.o + .debug_macro 0x0000000000000000 0x34 ./Application/User/generated/FrontendApplicationBase.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/generated/FrontendApplicationBase.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/generated/FrontendApplicationBase.o + .debug_macro 0x0000000000000000 0x57 ./Application/User/generated/FrontendApplicationBase.o + .debug_macro 0x0000000000000000 0x103 ./Application/User/generated/FrontendApplicationBase.o + .debug_macro 0x0000000000000000 0x6a ./Application/User/generated/FrontendApplicationBase.o + .debug_macro 0x0000000000000000 0x1df ./Application/User/generated/FrontendApplicationBase.o + .debug_macro 0x0000000000000000 0x99 ./Application/User/generated/FrontendApplicationBase.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/generated/FrontendApplicationBase.o + .debug_macro 0x0000000000000000 0x58 ./Application/User/generated/FrontendApplicationBase.o + .debug_macro 0x0000000000000000 0x17b ./Application/User/generated/FrontendApplicationBase.o + .debug_macro 0x0000000000000000 0x38c ./Application/User/generated/FrontendApplicationBase.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/generated/FrontendApplicationBase.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/generated/FrontendApplicationBase.o + .debug_macro 0x0000000000000000 0x43 ./Application/User/generated/FrontendApplicationBase.o + .debug_macro 0x0000000000000000 0x34 ./Application/User/generated/FrontendApplicationBase.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/generated/FrontendApplicationBase.o + .debug_macro 0x0000000000000000 0x52 ./Application/User/generated/FrontendApplicationBase.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/generated/FrontendApplicationBase.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/generated/FrontendApplicationBase.o + .debug_macro 0x0000000000000000 0x52 ./Application/User/generated/FrontendApplicationBase.o + .debug_macro 0x0000000000000000 0xcf ./Application/User/generated/FrontendApplicationBase.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/generated/FrontendApplicationBase.o + .debug_macro 0x0000000000000000 0x3d ./Application/User/generated/FrontendApplicationBase.o + .debug_macro 0x0000000000000000 0x18a ./Application/User/generated/FrontendApplicationBase.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/generated/FrontendApplicationBase.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/generated/FrontendApplicationBase.o + .group 0x0000000000000000 0x8 ./Application/User/generated/GeneratedFont.o + .group 0x0000000000000000 0x8 ./Application/User/generated/GeneratedFont.o + .group 0x0000000000000000 0x8 ./Application/User/generated/GeneratedFont.o + .group 0x0000000000000000 0x8 ./Application/User/generated/GeneratedFont.o + .group 0x0000000000000000 0x8 ./Application/User/generated/GeneratedFont.o + .group 0x0000000000000000 0x8 ./Application/User/generated/GeneratedFont.o + .group 0x0000000000000000 0x8 ./Application/User/generated/GeneratedFont.o + .group 0x0000000000000000 0x8 ./Application/User/generated/GeneratedFont.o + .group 0x0000000000000000 0x8 ./Application/User/generated/GeneratedFont.o + .group 0x0000000000000000 0x10 ./Application/User/generated/GeneratedFont.o + .group 0x0000000000000000 0x10 ./Application/User/generated/GeneratedFont.o + .group 0x0000000000000000 0xc ./Application/User/generated/GeneratedFont.o + .group 0x0000000000000000 0xc ./Application/User/generated/GeneratedFont.o + .group 0x0000000000000000 0xc ./Application/User/generated/GeneratedFont.o + .group 0x0000000000000000 0xc ./Application/User/generated/GeneratedFont.o + .group 0x0000000000000000 0xc ./Application/User/generated/GeneratedFont.o + .group 0x0000000000000000 0xc ./Application/User/generated/GeneratedFont.o + .group 0x0000000000000000 0xc ./Application/User/generated/GeneratedFont.o + .group 0x0000000000000000 0xc ./Application/User/generated/GeneratedFont.o + .group 0x0000000000000000 0xc ./Application/User/generated/GeneratedFont.o + .group 0x0000000000000000 0xc ./Application/User/generated/GeneratedFont.o + .group 0x0000000000000000 0xc ./Application/User/generated/GeneratedFont.o + .group 0x0000000000000000 0xc ./Application/User/generated/GeneratedFont.o + .group 0x0000000000000000 0xc ./Application/User/generated/GeneratedFont.o + .group 0x0000000000000000 0xc ./Application/User/generated/GeneratedFont.o + .group 0x0000000000000000 0xc ./Application/User/generated/GeneratedFont.o + .group 0x0000000000000000 0xc ./Application/User/generated/GeneratedFont.o + .text 0x0000000000000000 0x0 ./Application/User/generated/GeneratedFont.o + .data 0x0000000000000000 0x0 ./Application/User/generated/GeneratedFont.o + .bss 0x0000000000000000 0x0 ./Application/User/generated/GeneratedFont.o + .text._ZNK8touchgfx4Font8getGlyphEt + 0x0000000000000000 0x20 ./Application/User/generated/GeneratedFont.o + .text._ZNK8touchgfx4Font15getFallbackCharEv + 0x0000000000000000 0x4 ./Application/User/generated/GeneratedFont.o + .text._ZNK8touchgfx4Font15getEllipsisCharEv + 0x0000000000000000 0x4 ./Application/User/generated/GeneratedFont.o + .text._ZNK8touchgfx4Font11getBaselineEv + 0x0000000000000000 0x4 ./Application/User/generated/GeneratedFont.o + .text._ZNK8touchgfx4Font9getHeightEv + 0x0000000000000000 0x4 ./Application/User/generated/GeneratedFont.o + .text._ZNK8touchgfx4Font15getBitsPerPixelEv + 0x0000000000000000 0x8 ./Application/User/generated/GeneratedFont.o + .text._ZNK8touchgfx4Font15getByteAlignRowEv + 0x0000000000000000 0x6 ./Application/User/generated/GeneratedFont.o + .text._ZN8touchgfx9FusedFontD2Ev + 0x0000000000000000 0x2 ./Application/User/generated/GeneratedFont.o + .text._ZNK8touchgfx9FusedFont8getGlyphEtRPKhRh + 0x0000000000000000 0x2c ./Application/User/generated/GeneratedFont.o + .text._ZN8touchgfx9FusedFontD0Ev + 0x0000000000000000 0xe ./Application/User/generated/GeneratedFont.o + .rodata._ZTVN8touchgfx9FusedFontE + 0x0000000000000000 0x60 ./Application/User/generated/GeneratedFont.o + .debug_macro 0x0000000000000000 0xb86 ./Application/User/generated/GeneratedFont.o + .debug_macro 0x0000000000000000 0x58 ./Application/User/generated/GeneratedFont.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/generated/GeneratedFont.o + .debug_macro 0x0000000000000000 0x5b ./Application/User/generated/GeneratedFont.o + .debug_macro 0x0000000000000000 0x2a ./Application/User/generated/GeneratedFont.o + .debug_macro 0x0000000000000000 0x94 ./Application/User/generated/GeneratedFont.o + .debug_macro 0x0000000000000000 0x43 ./Application/User/generated/GeneratedFont.o + .debug_macro 0x0000000000000000 0x34 ./Application/User/generated/GeneratedFont.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/generated/GeneratedFont.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/generated/GeneratedFont.o + .debug_macro 0x0000000000000000 0x57 ./Application/User/generated/GeneratedFont.o + .debug_macro 0x0000000000000000 0x103 ./Application/User/generated/GeneratedFont.o + .debug_macro 0x0000000000000000 0x6a ./Application/User/generated/GeneratedFont.o + .debug_macro 0x0000000000000000 0x1df ./Application/User/generated/GeneratedFont.o + .debug_macro 0x0000000000000000 0x99 ./Application/User/generated/GeneratedFont.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/generated/GeneratedFont.o + .group 0x0000000000000000 0xc ./Application/User/generated/Kerning_verdana_10_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Kerning_verdana_10_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Kerning_verdana_10_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Kerning_verdana_10_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Kerning_verdana_10_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Kerning_verdana_10_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Kerning_verdana_10_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Kerning_verdana_10_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Kerning_verdana_10_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Kerning_verdana_10_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Kerning_verdana_10_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Kerning_verdana_10_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Kerning_verdana_10_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Kerning_verdana_10_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Kerning_verdana_10_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Kerning_verdana_10_4bpp.o + .text 0x0000000000000000 0x0 ./Application/User/generated/Kerning_verdana_10_4bpp.o + .data 0x0000000000000000 0x0 ./Application/User/generated/Kerning_verdana_10_4bpp.o + .bss 0x0000000000000000 0x0 ./Application/User/generated/Kerning_verdana_10_4bpp.o + .debug_macro 0x0000000000000000 0xb86 ./Application/User/generated/Kerning_verdana_10_4bpp.o + .debug_macro 0x0000000000000000 0x58 ./Application/User/generated/Kerning_verdana_10_4bpp.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/generated/Kerning_verdana_10_4bpp.o + .debug_macro 0x0000000000000000 0x5b ./Application/User/generated/Kerning_verdana_10_4bpp.o + .debug_macro 0x0000000000000000 0x2a ./Application/User/generated/Kerning_verdana_10_4bpp.o + .debug_macro 0x0000000000000000 0x94 ./Application/User/generated/Kerning_verdana_10_4bpp.o + .debug_macro 0x0000000000000000 0x43 ./Application/User/generated/Kerning_verdana_10_4bpp.o + .debug_macro 0x0000000000000000 0x34 ./Application/User/generated/Kerning_verdana_10_4bpp.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/generated/Kerning_verdana_10_4bpp.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/generated/Kerning_verdana_10_4bpp.o + .debug_macro 0x0000000000000000 0x57 ./Application/User/generated/Kerning_verdana_10_4bpp.o + .debug_macro 0x0000000000000000 0x103 ./Application/User/generated/Kerning_verdana_10_4bpp.o + .debug_macro 0x0000000000000000 0x6a ./Application/User/generated/Kerning_verdana_10_4bpp.o + .debug_macro 0x0000000000000000 0x1df ./Application/User/generated/Kerning_verdana_10_4bpp.o + .debug_macro 0x0000000000000000 0x99 ./Application/User/generated/Kerning_verdana_10_4bpp.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/generated/Kerning_verdana_10_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Kerning_verdana_20_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Kerning_verdana_20_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Kerning_verdana_20_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Kerning_verdana_20_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Kerning_verdana_20_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Kerning_verdana_20_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Kerning_verdana_20_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Kerning_verdana_20_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Kerning_verdana_20_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Kerning_verdana_20_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Kerning_verdana_20_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Kerning_verdana_20_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Kerning_verdana_20_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Kerning_verdana_20_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Kerning_verdana_20_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Kerning_verdana_20_4bpp.o + .text 0x0000000000000000 0x0 ./Application/User/generated/Kerning_verdana_20_4bpp.o + .data 0x0000000000000000 0x0 ./Application/User/generated/Kerning_verdana_20_4bpp.o + .bss 0x0000000000000000 0x0 ./Application/User/generated/Kerning_verdana_20_4bpp.o + .debug_macro 0x0000000000000000 0xb86 ./Application/User/generated/Kerning_verdana_20_4bpp.o + .debug_macro 0x0000000000000000 0x58 ./Application/User/generated/Kerning_verdana_20_4bpp.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/generated/Kerning_verdana_20_4bpp.o + .debug_macro 0x0000000000000000 0x5b ./Application/User/generated/Kerning_verdana_20_4bpp.o + .debug_macro 0x0000000000000000 0x2a ./Application/User/generated/Kerning_verdana_20_4bpp.o + .debug_macro 0x0000000000000000 0x94 ./Application/User/generated/Kerning_verdana_20_4bpp.o + .debug_macro 0x0000000000000000 0x43 ./Application/User/generated/Kerning_verdana_20_4bpp.o + .debug_macro 0x0000000000000000 0x34 ./Application/User/generated/Kerning_verdana_20_4bpp.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/generated/Kerning_verdana_20_4bpp.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/generated/Kerning_verdana_20_4bpp.o + .debug_macro 0x0000000000000000 0x57 ./Application/User/generated/Kerning_verdana_20_4bpp.o + .debug_macro 0x0000000000000000 0x103 ./Application/User/generated/Kerning_verdana_20_4bpp.o + .debug_macro 0x0000000000000000 0x6a ./Application/User/generated/Kerning_verdana_20_4bpp.o + .debug_macro 0x0000000000000000 0x1df ./Application/User/generated/Kerning_verdana_20_4bpp.o + .debug_macro 0x0000000000000000 0x99 ./Application/User/generated/Kerning_verdana_20_4bpp.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/generated/Kerning_verdana_20_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Kerning_verdana_40_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Kerning_verdana_40_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Kerning_verdana_40_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Kerning_verdana_40_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Kerning_verdana_40_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Kerning_verdana_40_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Kerning_verdana_40_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Kerning_verdana_40_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Kerning_verdana_40_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Kerning_verdana_40_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Kerning_verdana_40_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Kerning_verdana_40_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Kerning_verdana_40_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Kerning_verdana_40_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Kerning_verdana_40_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Kerning_verdana_40_4bpp.o + .text 0x0000000000000000 0x0 ./Application/User/generated/Kerning_verdana_40_4bpp.o + .data 0x0000000000000000 0x0 ./Application/User/generated/Kerning_verdana_40_4bpp.o + .bss 0x0000000000000000 0x0 ./Application/User/generated/Kerning_verdana_40_4bpp.o + .debug_macro 0x0000000000000000 0xb86 ./Application/User/generated/Kerning_verdana_40_4bpp.o + .debug_macro 0x0000000000000000 0x58 ./Application/User/generated/Kerning_verdana_40_4bpp.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/generated/Kerning_verdana_40_4bpp.o + .debug_macro 0x0000000000000000 0x5b ./Application/User/generated/Kerning_verdana_40_4bpp.o + .debug_macro 0x0000000000000000 0x2a ./Application/User/generated/Kerning_verdana_40_4bpp.o + .debug_macro 0x0000000000000000 0x94 ./Application/User/generated/Kerning_verdana_40_4bpp.o + .debug_macro 0x0000000000000000 0x43 ./Application/User/generated/Kerning_verdana_40_4bpp.o + .debug_macro 0x0000000000000000 0x34 ./Application/User/generated/Kerning_verdana_40_4bpp.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/generated/Kerning_verdana_40_4bpp.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/generated/Kerning_verdana_40_4bpp.o + .debug_macro 0x0000000000000000 0x57 ./Application/User/generated/Kerning_verdana_40_4bpp.o + .debug_macro 0x0000000000000000 0x103 ./Application/User/generated/Kerning_verdana_40_4bpp.o + .debug_macro 0x0000000000000000 0x6a ./Application/User/generated/Kerning_verdana_40_4bpp.o + .debug_macro 0x0000000000000000 0x1df ./Application/User/generated/Kerning_verdana_40_4bpp.o + .debug_macro 0x0000000000000000 0x99 ./Application/User/generated/Kerning_verdana_40_4bpp.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/generated/Kerning_verdana_40_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/LanguageGb.o + .group 0x0000000000000000 0xc ./Application/User/generated/LanguageGb.o + .group 0x0000000000000000 0xc ./Application/User/generated/LanguageGb.o + .group 0x0000000000000000 0xc ./Application/User/generated/LanguageGb.o + .group 0x0000000000000000 0xc ./Application/User/generated/LanguageGb.o + .group 0x0000000000000000 0xc ./Application/User/generated/LanguageGb.o + .group 0x0000000000000000 0xc ./Application/User/generated/LanguageGb.o + .group 0x0000000000000000 0xc ./Application/User/generated/LanguageGb.o + .group 0x0000000000000000 0xc ./Application/User/generated/LanguageGb.o + .group 0x0000000000000000 0xc ./Application/User/generated/LanguageGb.o + .group 0x0000000000000000 0xc ./Application/User/generated/LanguageGb.o + .group 0x0000000000000000 0xc ./Application/User/generated/LanguageGb.o + .group 0x0000000000000000 0xc ./Application/User/generated/LanguageGb.o + .group 0x0000000000000000 0xc ./Application/User/generated/LanguageGb.o + .group 0x0000000000000000 0xc ./Application/User/generated/LanguageGb.o + .group 0x0000000000000000 0xc ./Application/User/generated/LanguageGb.o + .text 0x0000000000000000 0x0 ./Application/User/generated/LanguageGb.o + .data 0x0000000000000000 0x0 ./Application/User/generated/LanguageGb.o + .bss 0x0000000000000000 0x0 ./Application/User/generated/LanguageGb.o + .debug_macro 0x0000000000000000 0xb86 ./Application/User/generated/LanguageGb.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/generated/LanguageGb.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/generated/LanguageGb.o + .debug_macro 0x0000000000000000 0x8e ./Application/User/generated/LanguageGb.o + .debug_macro 0x0000000000000000 0x51 ./Application/User/generated/LanguageGb.o + .debug_macro 0x0000000000000000 0x103 ./Application/User/generated/LanguageGb.o + .debug_macro 0x0000000000000000 0x6a ./Application/User/generated/LanguageGb.o + .debug_macro 0x0000000000000000 0x1df ./Application/User/generated/LanguageGb.o + .debug_macro 0x0000000000000000 0x58 ./Application/User/generated/LanguageGb.o + .debug_macro 0x0000000000000000 0x61 ./Application/User/generated/LanguageGb.o + .debug_macro 0x0000000000000000 0x2a ./Application/User/generated/LanguageGb.o + .debug_macro 0x0000000000000000 0x43 ./Application/User/generated/LanguageGb.o + .debug_macro 0x0000000000000000 0x34 ./Application/User/generated/LanguageGb.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/generated/LanguageGb.o + .debug_macro 0x0000000000000000 0x99 ./Application/User/generated/LanguageGb.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/generated/LanguageGb.o + .group 0x0000000000000000 0x8 ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0x8 ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0x8 ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0x8 ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0x8 ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0x8 ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0x8 ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0x8 ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0x8 ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0x8 ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0x8 ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0x8 ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0x8 ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0x8 ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0x8 ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0x8 ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0x8 ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0x8 ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0x8 ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0x8 ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0x8 ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0x8 ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0x8 ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0x8 ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0x8 ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0x8 ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0x10 ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0x10 ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0x8 ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0x8 ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0x8 ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0x8 ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0x14 ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/MainScreenViewBase.o + .text 0x0000000000000000 0x0 ./Application/User/generated/MainScreenViewBase.o + .data 0x0000000000000000 0x0 ./Application/User/generated/MainScreenViewBase.o + .bss 0x0000000000000000 0x0 ./Application/User/generated/MainScreenViewBase.o + .text._ZN8touchgfx4ViewI19MainScreenPresenterED2Ev + 0x0000000000000000 0x2 ./Application/User/generated/MainScreenViewBase.o + .text._ZN8touchgfx4ViewI19MainScreenPresenterED0Ev + 0x0000000000000000 0xe ./Application/User/generated/MainScreenViewBase.o + .debug_macro 0x0000000000000000 0xb86 ./Application/User/generated/MainScreenViewBase.o + .debug_macro 0x0000000000000000 0x1b2 ./Application/User/generated/MainScreenViewBase.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/generated/MainScreenViewBase.o + .debug_macro 0x0000000000000000 0x3ed ./Application/User/generated/MainScreenViewBase.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/generated/MainScreenViewBase.o + .debug_macro 0x0000000000000000 0x5b ./Application/User/generated/MainScreenViewBase.o + .debug_macro 0x0000000000000000 0x2a ./Application/User/generated/MainScreenViewBase.o + .debug_macro 0x0000000000000000 0x94 ./Application/User/generated/MainScreenViewBase.o + .debug_macro 0x0000000000000000 0x43 ./Application/User/generated/MainScreenViewBase.o + .debug_macro 0x0000000000000000 0x34 ./Application/User/generated/MainScreenViewBase.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/generated/MainScreenViewBase.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/generated/MainScreenViewBase.o + .debug_macro 0x0000000000000000 0x57 ./Application/User/generated/MainScreenViewBase.o + .debug_macro 0x0000000000000000 0x103 ./Application/User/generated/MainScreenViewBase.o + .debug_macro 0x0000000000000000 0x6a ./Application/User/generated/MainScreenViewBase.o + .debug_macro 0x0000000000000000 0x1df ./Application/User/generated/MainScreenViewBase.o + .debug_macro 0x0000000000000000 0x99 ./Application/User/generated/MainScreenViewBase.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/generated/MainScreenViewBase.o + .debug_macro 0x0000000000000000 0x58 ./Application/User/generated/MainScreenViewBase.o + .debug_macro 0x0000000000000000 0x17b ./Application/User/generated/MainScreenViewBase.o + .debug_macro 0x0000000000000000 0x38c ./Application/User/generated/MainScreenViewBase.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/generated/MainScreenViewBase.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/generated/MainScreenViewBase.o + .debug_macro 0x0000000000000000 0x43 ./Application/User/generated/MainScreenViewBase.o + .debug_macro 0x0000000000000000 0x34 ./Application/User/generated/MainScreenViewBase.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/generated/MainScreenViewBase.o + .debug_macro 0x0000000000000000 0x52 ./Application/User/generated/MainScreenViewBase.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/generated/MainScreenViewBase.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/generated/MainScreenViewBase.o + .debug_macro 0x0000000000000000 0x52 ./Application/User/generated/MainScreenViewBase.o + .debug_macro 0x0000000000000000 0xcf ./Application/User/generated/MainScreenViewBase.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/generated/MainScreenViewBase.o + .debug_macro 0x0000000000000000 0x3d ./Application/User/generated/MainScreenViewBase.o + .debug_macro 0x0000000000000000 0x18a ./Application/User/generated/MainScreenViewBase.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/generated/MainScreenViewBase.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/generated/MainScreenViewBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/SVGDatabase.o + .group 0x0000000000000000 0xc ./Application/User/generated/SVGDatabase.o + .group 0x0000000000000000 0xc ./Application/User/generated/SVGDatabase.o + .group 0x0000000000000000 0xc ./Application/User/generated/SVGDatabase.o + .group 0x0000000000000000 0xc ./Application/User/generated/SVGDatabase.o + .group 0x0000000000000000 0xc ./Application/User/generated/SVGDatabase.o + .group 0x0000000000000000 0xc ./Application/User/generated/SVGDatabase.o + .group 0x0000000000000000 0xc ./Application/User/generated/SVGDatabase.o + .group 0x0000000000000000 0xc ./Application/User/generated/SVGDatabase.o + .group 0x0000000000000000 0xc ./Application/User/generated/SVGDatabase.o + .group 0x0000000000000000 0xc ./Application/User/generated/SVGDatabase.o + .group 0x0000000000000000 0xc ./Application/User/generated/SVGDatabase.o + .group 0x0000000000000000 0xc ./Application/User/generated/SVGDatabase.o + .group 0x0000000000000000 0xc ./Application/User/generated/SVGDatabase.o + .group 0x0000000000000000 0xc ./Application/User/generated/SVGDatabase.o + .text 0x0000000000000000 0x0 ./Application/User/generated/SVGDatabase.o + .data 0x0000000000000000 0x0 ./Application/User/generated/SVGDatabase.o + .bss 0x0000000000000000 0x0 ./Application/User/generated/SVGDatabase.o + .text._ZN11SVGDatabase11getInstanceEv + 0x0000000000000000 0x4 ./Application/User/generated/SVGDatabase.o + .text._ZN11SVGDatabase15getInstanceSizeEv + 0x0000000000000000 0x4 ./Application/User/generated/SVGDatabase.o + .debug_info 0x0000000000000000 0x403 ./Application/User/generated/SVGDatabase.o + .debug_abbrev 0x0000000000000000 0x13e ./Application/User/generated/SVGDatabase.o + .debug_aranges + 0x0000000000000000 0x28 ./Application/User/generated/SVGDatabase.o + .debug_rnglists + 0x0000000000000000 0x19 ./Application/User/generated/SVGDatabase.o + .debug_macro 0x0000000000000000 0xc7 ./Application/User/generated/SVGDatabase.o + .debug_macro 0x0000000000000000 0xb86 ./Application/User/generated/SVGDatabase.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/generated/SVGDatabase.o + .debug_macro 0x0000000000000000 0x5b ./Application/User/generated/SVGDatabase.o + .debug_macro 0x0000000000000000 0x2a ./Application/User/generated/SVGDatabase.o + .debug_macro 0x0000000000000000 0x94 ./Application/User/generated/SVGDatabase.o + .debug_macro 0x0000000000000000 0x43 ./Application/User/generated/SVGDatabase.o + .debug_macro 0x0000000000000000 0x34 ./Application/User/generated/SVGDatabase.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/generated/SVGDatabase.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/generated/SVGDatabase.o + .debug_macro 0x0000000000000000 0x57 ./Application/User/generated/SVGDatabase.o + .debug_macro 0x0000000000000000 0x103 ./Application/User/generated/SVGDatabase.o + .debug_macro 0x0000000000000000 0x6a ./Application/User/generated/SVGDatabase.o + .debug_macro 0x0000000000000000 0x1df ./Application/User/generated/SVGDatabase.o + .debug_macro 0x0000000000000000 0x99 ./Application/User/generated/SVGDatabase.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/generated/SVGDatabase.o + .debug_line 0x0000000000000000 0x630 ./Application/User/generated/SVGDatabase.o + .debug_str 0x0000000000000000 0x502c ./Application/User/generated/SVGDatabase.o + .comment 0x0000000000000000 0x44 ./Application/User/generated/SVGDatabase.o + .debug_frame 0x0000000000000000 0x30 ./Application/User/generated/SVGDatabase.o + .ARM.attributes + 0x0000000000000000 0x34 ./Application/User/generated/SVGDatabase.o + .group 0x0000000000000000 0x8 ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0x8 ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0x8 ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0x8 ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0x8 ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0x8 ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0x8 ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0x8 ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0x8 ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0x8 ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0x8 ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0x8 ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0x8 ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0x8 ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0x10 ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0x8 ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0x8 ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0x8 ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0x8 ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0x8 ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0x8 ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0x8 ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0x10 ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0x10 ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0x8 ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0x8 ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0x8 ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0x8 ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0x8 ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0x8 ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/SliderContainerBase.o + .text 0x0000000000000000 0x0 ./Application/User/generated/SliderContainerBase.o + .data 0x0000000000000000 0x0 ./Application/User/generated/SliderContainerBase.o + .bss 0x0000000000000000 0x0 ./Application/User/generated/SliderContainerBase.o + .text._ZN8touchgfx8Drawable13getFirstChildEv + 0x0000000000000000 0x4 ./Application/User/generated/SliderContainerBase.o + .text._ZN8touchgfx8Drawable4setXEs + 0x0000000000000000 0x4 ./Application/User/generated/SliderContainerBase.o + .text._ZN8touchgfx8Drawable4setYEs + 0x0000000000000000 0x4 ./Application/User/generated/SliderContainerBase.o + .text._ZN8touchgfx8Drawable8setWidthEs + 0x0000000000000000 0x4 ./Application/User/generated/SliderContainerBase.o + .text._ZN8touchgfx8Drawable9setHeightEs + 0x0000000000000000 0x4 ./Application/User/generated/SliderContainerBase.o + .text._ZN8touchgfx8Drawable20childGeometryChangedEv + 0x0000000000000000 0x2 ./Application/User/generated/SliderContainerBase.o + .text._ZN8touchgfx8Drawable16handleClickEventERKNS_10ClickEventE + 0x0000000000000000 0x2 ./Application/User/generated/SliderContainerBase.o + .text._ZN8touchgfx8Drawable18handleGestureEventERKNS_12GestureEventE + 0x0000000000000000 0x2 ./Application/User/generated/SliderContainerBase.o + .text._ZN8touchgfx8Drawable15handleDragEventERKNS_9DragEventE + 0x0000000000000000 0x2 ./Application/User/generated/SliderContainerBase.o + .text._ZN8touchgfx8Drawable15handleTickEventEv + 0x0000000000000000 0x2 ./Application/User/generated/SliderContainerBase.o + .text._ZN8touchgfx8Drawable6moveToEss + 0x0000000000000000 0x18 ./Application/User/generated/SliderContainerBase.o + .text._ZN8touchgfx8Drawable14setupDrawChainERKNS_4RectEPPS0_ + 0x0000000000000000 0x14 ./Application/User/generated/SliderContainerBase.o + .text._ZN8touchgfx6Widget12getLastChildEssPPNS_8DrawableE + 0x0000000000000000 0x10 ./Application/User/generated/SliderContainerBase.o + .text._ZN8touchgfx9TypedTextD2Ev + 0x0000000000000000 0x2 ./Application/User/generated/SliderContainerBase.o + .text._ZN8touchgfx9TypedTextD0Ev + 0x0000000000000000 0xe ./Application/User/generated/SliderContainerBase.o + .text._ZNK8touchgfx8Drawable17invalidateContentEv + 0x0000000000000000 0xe ./Application/User/generated/SliderContainerBase.o + .text._ZN8touchgfx8Drawable5setXYEss + 0x0000000000000000 0x1a ./Application/User/generated/SliderContainerBase.o + .text._ZN8touchgfx8Drawable11setPositionEssss + 0x0000000000000000 0x26 ./Application/User/generated/SliderContainerBase.o + .rodata._ZTVN8touchgfx9TypedTextE + 0x0000000000000000 0x10 ./Application/User/generated/SliderContainerBase.o + .debug_macro 0x0000000000000000 0xb86 ./Application/User/generated/SliderContainerBase.o + .debug_macro 0x0000000000000000 0x1b2 ./Application/User/generated/SliderContainerBase.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/generated/SliderContainerBase.o + .debug_macro 0x0000000000000000 0x3ed ./Application/User/generated/SliderContainerBase.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/generated/SliderContainerBase.o + .debug_macro 0x0000000000000000 0x5b ./Application/User/generated/SliderContainerBase.o + .debug_macro 0x0000000000000000 0x2a ./Application/User/generated/SliderContainerBase.o + .debug_macro 0x0000000000000000 0x94 ./Application/User/generated/SliderContainerBase.o + .debug_macro 0x0000000000000000 0x43 ./Application/User/generated/SliderContainerBase.o + .debug_macro 0x0000000000000000 0x34 ./Application/User/generated/SliderContainerBase.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/generated/SliderContainerBase.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/generated/SliderContainerBase.o + .debug_macro 0x0000000000000000 0x57 ./Application/User/generated/SliderContainerBase.o + .debug_macro 0x0000000000000000 0x103 ./Application/User/generated/SliderContainerBase.o + .debug_macro 0x0000000000000000 0x6a ./Application/User/generated/SliderContainerBase.o + .debug_macro 0x0000000000000000 0x1df ./Application/User/generated/SliderContainerBase.o + .debug_macro 0x0000000000000000 0x99 ./Application/User/generated/SliderContainerBase.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/generated/SliderContainerBase.o + .debug_macro 0x0000000000000000 0x58 ./Application/User/generated/SliderContainerBase.o + .debug_macro 0x0000000000000000 0x17b ./Application/User/generated/SliderContainerBase.o + .debug_macro 0x0000000000000000 0x38c ./Application/User/generated/SliderContainerBase.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/generated/SliderContainerBase.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/generated/SliderContainerBase.o + .debug_macro 0x0000000000000000 0x43 ./Application/User/generated/SliderContainerBase.o + .debug_macro 0x0000000000000000 0x34 ./Application/User/generated/SliderContainerBase.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/generated/SliderContainerBase.o + .debug_macro 0x0000000000000000 0x52 ./Application/User/generated/SliderContainerBase.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/generated/SliderContainerBase.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/generated/SliderContainerBase.o + .debug_macro 0x0000000000000000 0x52 ./Application/User/generated/SliderContainerBase.o + .debug_macro 0x0000000000000000 0xcf ./Application/User/generated/SliderContainerBase.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/generated/SliderContainerBase.o + .debug_macro 0x0000000000000000 0x3d ./Application/User/generated/SliderContainerBase.o + .debug_macro 0x0000000000000000 0x18a ./Application/User/generated/SliderContainerBase.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/generated/SliderContainerBase.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/generated/SliderContainerBase.o + .group 0x0000000000000000 0xc ./Application/User/generated/Table_verdana_10_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Table_verdana_10_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Table_verdana_10_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Table_verdana_10_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Table_verdana_10_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Table_verdana_10_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Table_verdana_10_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Table_verdana_10_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Table_verdana_10_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Table_verdana_10_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Table_verdana_10_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Table_verdana_10_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Table_verdana_10_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Table_verdana_10_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Table_verdana_10_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Table_verdana_10_4bpp.o + .text 0x0000000000000000 0x0 ./Application/User/generated/Table_verdana_10_4bpp.o + .data 0x0000000000000000 0x0 ./Application/User/generated/Table_verdana_10_4bpp.o + .bss 0x0000000000000000 0x0 ./Application/User/generated/Table_verdana_10_4bpp.o + .debug_macro 0x0000000000000000 0xb86 ./Application/User/generated/Table_verdana_10_4bpp.o + .debug_macro 0x0000000000000000 0x58 ./Application/User/generated/Table_verdana_10_4bpp.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/generated/Table_verdana_10_4bpp.o + .debug_macro 0x0000000000000000 0x5b ./Application/User/generated/Table_verdana_10_4bpp.o + .debug_macro 0x0000000000000000 0x2a ./Application/User/generated/Table_verdana_10_4bpp.o + .debug_macro 0x0000000000000000 0x94 ./Application/User/generated/Table_verdana_10_4bpp.o + .debug_macro 0x0000000000000000 0x43 ./Application/User/generated/Table_verdana_10_4bpp.o + .debug_macro 0x0000000000000000 0x34 ./Application/User/generated/Table_verdana_10_4bpp.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/generated/Table_verdana_10_4bpp.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/generated/Table_verdana_10_4bpp.o + .debug_macro 0x0000000000000000 0x57 ./Application/User/generated/Table_verdana_10_4bpp.o + .debug_macro 0x0000000000000000 0x103 ./Application/User/generated/Table_verdana_10_4bpp.o + .debug_macro 0x0000000000000000 0x6a ./Application/User/generated/Table_verdana_10_4bpp.o + .debug_macro 0x0000000000000000 0x1df ./Application/User/generated/Table_verdana_10_4bpp.o + .debug_macro 0x0000000000000000 0x99 ./Application/User/generated/Table_verdana_10_4bpp.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/generated/Table_verdana_10_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Table_verdana_20_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Table_verdana_20_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Table_verdana_20_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Table_verdana_20_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Table_verdana_20_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Table_verdana_20_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Table_verdana_20_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Table_verdana_20_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Table_verdana_20_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Table_verdana_20_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Table_verdana_20_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Table_verdana_20_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Table_verdana_20_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Table_verdana_20_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Table_verdana_20_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Table_verdana_20_4bpp.o + .text 0x0000000000000000 0x0 ./Application/User/generated/Table_verdana_20_4bpp.o + .data 0x0000000000000000 0x0 ./Application/User/generated/Table_verdana_20_4bpp.o + .bss 0x0000000000000000 0x0 ./Application/User/generated/Table_verdana_20_4bpp.o + .debug_macro 0x0000000000000000 0xb86 ./Application/User/generated/Table_verdana_20_4bpp.o + .debug_macro 0x0000000000000000 0x58 ./Application/User/generated/Table_verdana_20_4bpp.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/generated/Table_verdana_20_4bpp.o + .debug_macro 0x0000000000000000 0x5b ./Application/User/generated/Table_verdana_20_4bpp.o + .debug_macro 0x0000000000000000 0x2a ./Application/User/generated/Table_verdana_20_4bpp.o + .debug_macro 0x0000000000000000 0x94 ./Application/User/generated/Table_verdana_20_4bpp.o + .debug_macro 0x0000000000000000 0x43 ./Application/User/generated/Table_verdana_20_4bpp.o + .debug_macro 0x0000000000000000 0x34 ./Application/User/generated/Table_verdana_20_4bpp.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/generated/Table_verdana_20_4bpp.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/generated/Table_verdana_20_4bpp.o + .debug_macro 0x0000000000000000 0x57 ./Application/User/generated/Table_verdana_20_4bpp.o + .debug_macro 0x0000000000000000 0x103 ./Application/User/generated/Table_verdana_20_4bpp.o + .debug_macro 0x0000000000000000 0x6a ./Application/User/generated/Table_verdana_20_4bpp.o + .debug_macro 0x0000000000000000 0x1df ./Application/User/generated/Table_verdana_20_4bpp.o + .debug_macro 0x0000000000000000 0x99 ./Application/User/generated/Table_verdana_20_4bpp.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/generated/Table_verdana_20_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Table_verdana_40_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Table_verdana_40_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Table_verdana_40_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Table_verdana_40_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Table_verdana_40_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Table_verdana_40_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Table_verdana_40_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Table_verdana_40_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Table_verdana_40_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Table_verdana_40_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Table_verdana_40_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Table_verdana_40_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Table_verdana_40_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Table_verdana_40_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Table_verdana_40_4bpp.o + .group 0x0000000000000000 0xc ./Application/User/generated/Table_verdana_40_4bpp.o + .text 0x0000000000000000 0x0 ./Application/User/generated/Table_verdana_40_4bpp.o + .data 0x0000000000000000 0x0 ./Application/User/generated/Table_verdana_40_4bpp.o + .bss 0x0000000000000000 0x0 ./Application/User/generated/Table_verdana_40_4bpp.o + .debug_macro 0x0000000000000000 0xb86 ./Application/User/generated/Table_verdana_40_4bpp.o + .debug_macro 0x0000000000000000 0x58 ./Application/User/generated/Table_verdana_40_4bpp.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/generated/Table_verdana_40_4bpp.o + .debug_macro 0x0000000000000000 0x5b ./Application/User/generated/Table_verdana_40_4bpp.o + .debug_macro 0x0000000000000000 0x2a ./Application/User/generated/Table_verdana_40_4bpp.o + .debug_macro 0x0000000000000000 0x94 ./Application/User/generated/Table_verdana_40_4bpp.o + .debug_macro 0x0000000000000000 0x43 ./Application/User/generated/Table_verdana_40_4bpp.o + .debug_macro 0x0000000000000000 0x34 ./Application/User/generated/Table_verdana_40_4bpp.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/generated/Table_verdana_40_4bpp.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/generated/Table_verdana_40_4bpp.o + .debug_macro 0x0000000000000000 0x57 ./Application/User/generated/Table_verdana_40_4bpp.o + .debug_macro 0x0000000000000000 0x103 ./Application/User/generated/Table_verdana_40_4bpp.o + .debug_macro 0x0000000000000000 0x6a ./Application/User/generated/Table_verdana_40_4bpp.o + .debug_macro 0x0000000000000000 0x1df ./Application/User/generated/Table_verdana_40_4bpp.o + .debug_macro 0x0000000000000000 0x99 ./Application/User/generated/Table_verdana_40_4bpp.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/generated/Table_verdana_40_4bpp.o + .group 0x0000000000000000 0x8 ./Application/User/generated/Texts.o + .group 0x0000000000000000 0x8 ./Application/User/generated/Texts.o + .group 0x0000000000000000 0x8 ./Application/User/generated/Texts.o + .group 0x0000000000000000 0x8 ./Application/User/generated/Texts.o + .group 0x0000000000000000 0x8 ./Application/User/generated/Texts.o + .group 0x0000000000000000 0x8 ./Application/User/generated/Texts.o + .group 0x0000000000000000 0x8 ./Application/User/generated/Texts.o + .group 0x0000000000000000 0x8 ./Application/User/generated/Texts.o + .group 0x0000000000000000 0x8 ./Application/User/generated/Texts.o + .group 0x0000000000000000 0x8 ./Application/User/generated/Texts.o + .group 0x0000000000000000 0xc ./Application/User/generated/Texts.o + .group 0x0000000000000000 0xc ./Application/User/generated/Texts.o + .group 0x0000000000000000 0xc ./Application/User/generated/Texts.o + .group 0x0000000000000000 0xc ./Application/User/generated/Texts.o + .group 0x0000000000000000 0xc ./Application/User/generated/Texts.o + .group 0x0000000000000000 0xc ./Application/User/generated/Texts.o + .group 0x0000000000000000 0xc ./Application/User/generated/Texts.o + .group 0x0000000000000000 0xc ./Application/User/generated/Texts.o + .group 0x0000000000000000 0xc ./Application/User/generated/Texts.o + .group 0x0000000000000000 0xc ./Application/User/generated/Texts.o + .group 0x0000000000000000 0xc ./Application/User/generated/Texts.o + .group 0x0000000000000000 0xc ./Application/User/generated/Texts.o + .group 0x0000000000000000 0xc ./Application/User/generated/Texts.o + .group 0x0000000000000000 0xc ./Application/User/generated/Texts.o + .group 0x0000000000000000 0xc ./Application/User/generated/Texts.o + .group 0x0000000000000000 0xc ./Application/User/generated/Texts.o + .group 0x0000000000000000 0xc ./Application/User/generated/Texts.o + .group 0x0000000000000000 0xc ./Application/User/generated/Texts.o + .group 0x0000000000000000 0xc ./Application/User/generated/Texts.o + .group 0x0000000000000000 0xc ./Application/User/generated/Texts.o + .group 0x0000000000000000 0xc ./Application/User/generated/Texts.o + .group 0x0000000000000000 0xc ./Application/User/generated/Texts.o + .group 0x0000000000000000 0xc ./Application/User/generated/Texts.o + .group 0x0000000000000000 0xc ./Application/User/generated/Texts.o + .group 0x0000000000000000 0xc ./Application/User/generated/Texts.o + .group 0x0000000000000000 0xc ./Application/User/generated/Texts.o + .group 0x0000000000000000 0xc ./Application/User/generated/Texts.o + .group 0x0000000000000000 0xc ./Application/User/generated/Texts.o + .group 0x0000000000000000 0xc ./Application/User/generated/Texts.o + .group 0x0000000000000000 0xc ./Application/User/generated/Texts.o + .group 0x0000000000000000 0xc ./Application/User/generated/Texts.o + .group 0x0000000000000000 0xc ./Application/User/generated/Texts.o + .group 0x0000000000000000 0xc ./Application/User/generated/Texts.o + .group 0x0000000000000000 0xc ./Application/User/generated/Texts.o + .group 0x0000000000000000 0xc ./Application/User/generated/Texts.o + .group 0x0000000000000000 0xc ./Application/User/generated/Texts.o + .text 0x0000000000000000 0x0 ./Application/User/generated/Texts.o + .data 0x0000000000000000 0x0 ./Application/User/generated/Texts.o + .bss 0x0000000000000000 0x0 ./Application/User/generated/Texts.o + .text._ZNK8touchgfx4Font8getGlyphEt + 0x0000000000000000 0x20 ./Application/User/generated/Texts.o + .text._ZNK8touchgfx4Font15getFallbackCharEv + 0x0000000000000000 0x4 ./Application/User/generated/Texts.o + .text._ZNK8touchgfx4Font15getEllipsisCharEv + 0x0000000000000000 0x4 ./Application/User/generated/Texts.o + .text._ZNK8touchgfx4Font11getBaselineEv + 0x0000000000000000 0x4 ./Application/User/generated/Texts.o + .text._ZNK8touchgfx4Font9getHeightEv + 0x0000000000000000 0x4 ./Application/User/generated/Texts.o + .text._ZNK8touchgfx4Font15getBitsPerPixelEv + 0x0000000000000000 0x8 ./Application/User/generated/Texts.o + .text._ZNK8touchgfx4Font15getByteAlignRowEv + 0x0000000000000000 0x6 ./Application/User/generated/Texts.o + .text._ZNK8touchgfx4Font10getKerningEtPKNS_9GlyphNodeE + 0x0000000000000000 0x4 ./Application/User/generated/Texts.o + .text._ZN8touchgfx5Texts14setTranslationEtPKv + 0x0000000000000000 0xc ./Application/User/generated/Texts.o + .rodata._ZTVN8touchgfx4FontE + 0x0000000000000000 0x5c ./Application/User/generated/Texts.o + .debug_macro 0x0000000000000000 0xb86 ./Application/User/generated/Texts.o + .debug_macro 0x0000000000000000 0x58 ./Application/User/generated/Texts.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/generated/Texts.o + .debug_macro 0x0000000000000000 0x5b ./Application/User/generated/Texts.o + .debug_macro 0x0000000000000000 0x2a ./Application/User/generated/Texts.o + .debug_macro 0x0000000000000000 0x94 ./Application/User/generated/Texts.o + .debug_macro 0x0000000000000000 0x43 ./Application/User/generated/Texts.o + .debug_macro 0x0000000000000000 0x34 ./Application/User/generated/Texts.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/generated/Texts.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/generated/Texts.o + .debug_macro 0x0000000000000000 0x57 ./Application/User/generated/Texts.o + .debug_macro 0x0000000000000000 0x103 ./Application/User/generated/Texts.o + .debug_macro 0x0000000000000000 0x6a ./Application/User/generated/Texts.o + .debug_macro 0x0000000000000000 0x1df ./Application/User/generated/Texts.o + .debug_macro 0x0000000000000000 0x99 ./Application/User/generated/Texts.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/generated/Texts.o + .debug_macro 0x0000000000000000 0x1b2 ./Application/User/generated/Texts.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/generated/Texts.o + .debug_macro 0x0000000000000000 0x3ed ./Application/User/generated/Texts.o + .debug_macro 0x0000000000000000 0x17b ./Application/User/generated/Texts.o + .debug_macro 0x0000000000000000 0x38c ./Application/User/generated/Texts.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/generated/Texts.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/generated/Texts.o + .debug_macro 0x0000000000000000 0x43 ./Application/User/generated/Texts.o + .debug_macro 0x0000000000000000 0x34 ./Application/User/generated/Texts.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/generated/Texts.o + .debug_macro 0x0000000000000000 0x52 ./Application/User/generated/Texts.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/generated/Texts.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/generated/Texts.o + .debug_macro 0x0000000000000000 0x52 ./Application/User/generated/Texts.o + .debug_macro 0x0000000000000000 0xcf ./Application/User/generated/Texts.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/generated/Texts.o + .debug_macro 0x0000000000000000 0x3d ./Application/User/generated/Texts.o + .debug_macro 0x0000000000000000 0x18a ./Application/User/generated/Texts.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/generated/Texts.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/generated/Texts.o + .group 0x0000000000000000 0xc ./Application/User/generated/TypedTextDatabase.o + .group 0x0000000000000000 0xc ./Application/User/generated/TypedTextDatabase.o + .group 0x0000000000000000 0xc ./Application/User/generated/TypedTextDatabase.o + .group 0x0000000000000000 0xc ./Application/User/generated/TypedTextDatabase.o + .group 0x0000000000000000 0xc ./Application/User/generated/TypedTextDatabase.o + .group 0x0000000000000000 0xc ./Application/User/generated/TypedTextDatabase.o + .group 0x0000000000000000 0xc ./Application/User/generated/TypedTextDatabase.o + .group 0x0000000000000000 0xc ./Application/User/generated/TypedTextDatabase.o + .group 0x0000000000000000 0xc ./Application/User/generated/TypedTextDatabase.o + .group 0x0000000000000000 0xc ./Application/User/generated/TypedTextDatabase.o + .group 0x0000000000000000 0xc ./Application/User/generated/TypedTextDatabase.o + .group 0x0000000000000000 0xc ./Application/User/generated/TypedTextDatabase.o + .group 0x0000000000000000 0xc ./Application/User/generated/TypedTextDatabase.o + .group 0x0000000000000000 0xc ./Application/User/generated/TypedTextDatabase.o + .group 0x0000000000000000 0xc ./Application/User/generated/TypedTextDatabase.o + .group 0x0000000000000000 0xc ./Application/User/generated/TypedTextDatabase.o + .text 0x0000000000000000 0x0 ./Application/User/generated/TypedTextDatabase.o + .data 0x0000000000000000 0x0 ./Application/User/generated/TypedTextDatabase.o + .bss 0x0000000000000000 0x0 ./Application/User/generated/TypedTextDatabase.o + .text._ZN17TypedTextDatabase11getInstanceEt + 0x0000000000000000 0x8 ./Application/User/generated/TypedTextDatabase.o + .text._ZN17TypedTextDatabase7setFontEtPKN8touchgfx4FontE + 0x0000000000000000 0x14 ./Application/User/generated/TypedTextDatabase.o + .text._ZN17TypedTextDatabase9resetFontEt + 0x0000000000000000 0x30 ./Application/User/generated/TypedTextDatabase.o + .debug_macro 0x0000000000000000 0xb86 ./Application/User/generated/TypedTextDatabase.o + .debug_macro 0x0000000000000000 0x58 ./Application/User/generated/TypedTextDatabase.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/generated/TypedTextDatabase.o + .debug_macro 0x0000000000000000 0x5b ./Application/User/generated/TypedTextDatabase.o + .debug_macro 0x0000000000000000 0x2a ./Application/User/generated/TypedTextDatabase.o + .debug_macro 0x0000000000000000 0x94 ./Application/User/generated/TypedTextDatabase.o + .debug_macro 0x0000000000000000 0x43 ./Application/User/generated/TypedTextDatabase.o + .debug_macro 0x0000000000000000 0x34 ./Application/User/generated/TypedTextDatabase.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/generated/TypedTextDatabase.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/generated/TypedTextDatabase.o + .debug_macro 0x0000000000000000 0x57 ./Application/User/generated/TypedTextDatabase.o + .debug_macro 0x0000000000000000 0x103 ./Application/User/generated/TypedTextDatabase.o + .debug_macro 0x0000000000000000 0x6a ./Application/User/generated/TypedTextDatabase.o + .debug_macro 0x0000000000000000 0x1df ./Application/User/generated/TypedTextDatabase.o + .debug_macro 0x0000000000000000 0x99 ./Application/User/generated/TypedTextDatabase.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/generated/TypedTextDatabase.o + .group 0x0000000000000000 0x8 ./Application/User/generated/UnmappedDataFont.o + .group 0x0000000000000000 0x8 ./Application/User/generated/UnmappedDataFont.o + .group 0x0000000000000000 0x8 ./Application/User/generated/UnmappedDataFont.o + .group 0x0000000000000000 0x8 ./Application/User/generated/UnmappedDataFont.o + .group 0x0000000000000000 0x8 ./Application/User/generated/UnmappedDataFont.o + .group 0x0000000000000000 0x8 ./Application/User/generated/UnmappedDataFont.o + .group 0x0000000000000000 0x8 ./Application/User/generated/UnmappedDataFont.o + .group 0x0000000000000000 0x8 ./Application/User/generated/UnmappedDataFont.o + .group 0x0000000000000000 0x8 ./Application/User/generated/UnmappedDataFont.o + .group 0x0000000000000000 0x10 ./Application/User/generated/UnmappedDataFont.o + .group 0x0000000000000000 0xc ./Application/User/generated/UnmappedDataFont.o + .group 0x0000000000000000 0xc ./Application/User/generated/UnmappedDataFont.o + .group 0x0000000000000000 0xc ./Application/User/generated/UnmappedDataFont.o + .group 0x0000000000000000 0xc ./Application/User/generated/UnmappedDataFont.o + .group 0x0000000000000000 0xc ./Application/User/generated/UnmappedDataFont.o + .group 0x0000000000000000 0xc ./Application/User/generated/UnmappedDataFont.o + .group 0x0000000000000000 0xc ./Application/User/generated/UnmappedDataFont.o + .group 0x0000000000000000 0xc ./Application/User/generated/UnmappedDataFont.o + .group 0x0000000000000000 0xc ./Application/User/generated/UnmappedDataFont.o + .group 0x0000000000000000 0xc ./Application/User/generated/UnmappedDataFont.o + .group 0x0000000000000000 0xc ./Application/User/generated/UnmappedDataFont.o + .group 0x0000000000000000 0xc ./Application/User/generated/UnmappedDataFont.o + .group 0x0000000000000000 0xc ./Application/User/generated/UnmappedDataFont.o + .group 0x0000000000000000 0xc ./Application/User/generated/UnmappedDataFont.o + .group 0x0000000000000000 0xc ./Application/User/generated/UnmappedDataFont.o + .group 0x0000000000000000 0xc ./Application/User/generated/UnmappedDataFont.o + .text 0x0000000000000000 0x0 ./Application/User/generated/UnmappedDataFont.o + .data 0x0000000000000000 0x0 ./Application/User/generated/UnmappedDataFont.o + .bss 0x0000000000000000 0x0 ./Application/User/generated/UnmappedDataFont.o + .text._ZNK8touchgfx4Font8getGlyphEt + 0x0000000000000000 0x20 ./Application/User/generated/UnmappedDataFont.o + .text._ZNK8touchgfx4Font15getFallbackCharEv + 0x0000000000000000 0x4 ./Application/User/generated/UnmappedDataFont.o + .text._ZNK8touchgfx4Font15getEllipsisCharEv + 0x0000000000000000 0x4 ./Application/User/generated/UnmappedDataFont.o + .text._ZNK8touchgfx4Font11getBaselineEv + 0x0000000000000000 0x4 ./Application/User/generated/UnmappedDataFont.o + .text._ZNK8touchgfx4Font9getHeightEv + 0x0000000000000000 0x4 ./Application/User/generated/UnmappedDataFont.o + .text._ZNK8touchgfx4Font15getBitsPerPixelEv + 0x0000000000000000 0x8 ./Application/User/generated/UnmappedDataFont.o + .text._ZNK8touchgfx4Font15getByteAlignRowEv + 0x0000000000000000 0x6 ./Application/User/generated/UnmappedDataFont.o + .text._ZNK8touchgfx16UnmappedDataFont12getGSUBTableEv + 0x0000000000000000 0x4 ./Application/User/generated/UnmappedDataFont.o + .text._ZNK8touchgfx16UnmappedDataFont23getContextualFormsTableEv + 0x0000000000000000 0x4 ./Application/User/generated/UnmappedDataFont.o + .text._ZNK8touchgfx16UnmappedDataFont8getGlyphEtRPKhRh + 0x0000000000000000 0x4 ./Application/User/generated/UnmappedDataFont.o + .text._ZNK8touchgfx16UnmappedDataFont12getPixelDataEPKNS_9GlyphNodeE + 0x0000000000000000 0x10 ./Application/User/generated/UnmappedDataFont.o + .text._ZNK8touchgfx16UnmappedDataFont10getKerningEtPKNS_9GlyphNodeE + 0x0000000000000000 0x3a ./Application/User/generated/UnmappedDataFont.o + .text._ZN8touchgfx16UnmappedDataFontD2Ev + 0x0000000000000000 0x2 ./Application/User/generated/UnmappedDataFont.o + .text._ZN8touchgfx16UnmappedDataFontD0Ev + 0x0000000000000000 0xe ./Application/User/generated/UnmappedDataFont.o + .text._ZN8touchgfx16UnmappedDataFontC2EPKNS_9GlyphNodeEPKtttthhhhhhPKPKhPKNS_11KerningNodeEttS5_PKNS_24FontContextualFormsTableE + 0x0000000000000000 0x64 ./Application/User/generated/UnmappedDataFont.o + .text._ZNK8touchgfx16UnmappedDataFont13lookupUnicodeEt + 0x0000000000000000 0x76 ./Application/User/generated/UnmappedDataFont.o + .bss._ZN8touchgfx16UnmappedDataFont15glyphNodeBufferE + 0x0000000000000000 0xe ./Application/User/generated/UnmappedDataFont.o + .rodata._ZTVN8touchgfx16UnmappedDataFontE + 0x0000000000000000 0x60 ./Application/User/generated/UnmappedDataFont.o + .debug_info 0x0000000000000000 0x1b7b ./Application/User/generated/UnmappedDataFont.o + .debug_abbrev 0x0000000000000000 0x657 ./Application/User/generated/UnmappedDataFont.o + .debug_loclists + 0x0000000000000000 0x49b ./Application/User/generated/UnmappedDataFont.o + .debug_aranges + 0x0000000000000000 0x98 ./Application/User/generated/UnmappedDataFont.o + .debug_rnglists + 0x0000000000000000 0xa0 ./Application/User/generated/UnmappedDataFont.o + .debug_macro 0x0000000000000000 0xf8 ./Application/User/generated/UnmappedDataFont.o + .debug_macro 0x0000000000000000 0xb86 ./Application/User/generated/UnmappedDataFont.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/generated/UnmappedDataFont.o + .debug_macro 0x0000000000000000 0x5b ./Application/User/generated/UnmappedDataFont.o + .debug_macro 0x0000000000000000 0x2a ./Application/User/generated/UnmappedDataFont.o + .debug_macro 0x0000000000000000 0x94 ./Application/User/generated/UnmappedDataFont.o + .debug_macro 0x0000000000000000 0x43 ./Application/User/generated/UnmappedDataFont.o + .debug_macro 0x0000000000000000 0x34 ./Application/User/generated/UnmappedDataFont.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/generated/UnmappedDataFont.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/generated/UnmappedDataFont.o + .debug_macro 0x0000000000000000 0x57 ./Application/User/generated/UnmappedDataFont.o + .debug_macro 0x0000000000000000 0x103 ./Application/User/generated/UnmappedDataFont.o + .debug_macro 0x0000000000000000 0x6a ./Application/User/generated/UnmappedDataFont.o + .debug_macro 0x0000000000000000 0x1df ./Application/User/generated/UnmappedDataFont.o + .debug_macro 0x0000000000000000 0x99 ./Application/User/generated/UnmappedDataFont.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/generated/UnmappedDataFont.o + .debug_macro 0x0000000000000000 0x58 ./Application/User/generated/UnmappedDataFont.o + .debug_line 0x0000000000000000 0xa82 ./Application/User/generated/UnmappedDataFont.o + .debug_str 0x0000000000000000 0x66e8 ./Application/User/generated/UnmappedDataFont.o + .comment 0x0000000000000000 0x44 ./Application/User/generated/UnmappedDataFont.o + .debug_frame 0x0000000000000000 0x148 ./Application/User/generated/UnmappedDataFont.o + .ARM.attributes + 0x0000000000000000 0x34 ./Application/User/generated/UnmappedDataFont.o + .group 0x0000000000000000 0xc ./Application/User/generated/image_Blue_Slider_Vertical_Small_Indicators_Slider3_Vertical_Round_nob.o + .group 0x0000000000000000 0xc ./Application/User/generated/image_Blue_Slider_Vertical_Small_Indicators_Slider3_Vertical_Round_nob.o + .text 0x0000000000000000 0x0 ./Application/User/generated/image_Blue_Slider_Vertical_Small_Indicators_Slider3_Vertical_Round_nob.o + .data 0x0000000000000000 0x0 ./Application/User/generated/image_Blue_Slider_Vertical_Small_Indicators_Slider3_Vertical_Round_nob.o + .bss 0x0000000000000000 0x0 ./Application/User/generated/image_Blue_Slider_Vertical_Small_Indicators_Slider3_Vertical_Round_nob.o + .debug_macro 0x0000000000000000 0xb86 ./Application/User/generated/image_Blue_Slider_Vertical_Small_Indicators_Slider3_Vertical_Round_nob.o + .debug_macro 0x0000000000000000 0x99 ./Application/User/generated/image_Blue_Slider_Vertical_Small_Indicators_Slider3_Vertical_Round_nob.o + .group 0x0000000000000000 0xc ./Application/User/generated/image_Blue_Slider_Vertical_Small_Slider3_Vertical_Round_back.o + .group 0x0000000000000000 0xc ./Application/User/generated/image_Blue_Slider_Vertical_Small_Slider3_Vertical_Round_back.o + .text 0x0000000000000000 0x0 ./Application/User/generated/image_Blue_Slider_Vertical_Small_Slider3_Vertical_Round_back.o + .data 0x0000000000000000 0x0 ./Application/User/generated/image_Blue_Slider_Vertical_Small_Slider3_Vertical_Round_back.o + .bss 0x0000000000000000 0x0 ./Application/User/generated/image_Blue_Slider_Vertical_Small_Slider3_Vertical_Round_back.o + .debug_macro 0x0000000000000000 0xb86 ./Application/User/generated/image_Blue_Slider_Vertical_Small_Slider3_Vertical_Round_back.o + .debug_macro 0x0000000000000000 0x99 ./Application/User/generated/image_Blue_Slider_Vertical_Small_Slider3_Vertical_Round_back.o + .group 0x0000000000000000 0xc ./Application/User/generated/image_Blue_Slider_Vertical_Small_Slider3_Vertical_Round_fill.o + .group 0x0000000000000000 0xc ./Application/User/generated/image_Blue_Slider_Vertical_Small_Slider3_Vertical_Round_fill.o + .text 0x0000000000000000 0x0 ./Application/User/generated/image_Blue_Slider_Vertical_Small_Slider3_Vertical_Round_fill.o + .data 0x0000000000000000 0x0 ./Application/User/generated/image_Blue_Slider_Vertical_Small_Slider3_Vertical_Round_fill.o + .bss 0x0000000000000000 0x0 ./Application/User/generated/image_Blue_Slider_Vertical_Small_Slider3_Vertical_Round_fill.o + .debug_macro 0x0000000000000000 0xb86 ./Application/User/generated/image_Blue_Slider_Vertical_Small_Slider3_Vertical_Round_fill.o + .debug_macro 0x0000000000000000 0x99 ./Application/User/generated/image_Blue_Slider_Vertical_Small_Slider3_Vertical_Round_fill.o + .group 0x0000000000000000 0x8 ./Application/User/gui/FrontendApplication.o + .group 0x0000000000000000 0x8 ./Application/User/gui/FrontendApplication.o + .group 0x0000000000000000 0x10 ./Application/User/gui/FrontendApplication.o + .group 0x0000000000000000 0xc ./Application/User/gui/FrontendApplication.o + .group 0x0000000000000000 0xc ./Application/User/gui/FrontendApplication.o + .group 0x0000000000000000 0x8 ./Application/User/gui/FrontendApplication.o + .group 0x0000000000000000 0xc ./Application/User/gui/FrontendApplication.o + .group 0x0000000000000000 0xc ./Application/User/gui/FrontendApplication.o + .group 0x0000000000000000 0xc ./Application/User/gui/FrontendApplication.o + .group 0x0000000000000000 0xc ./Application/User/gui/FrontendApplication.o + .group 0x0000000000000000 0xc ./Application/User/gui/FrontendApplication.o + .group 0x0000000000000000 0xc ./Application/User/gui/FrontendApplication.o + .group 0x0000000000000000 0xc ./Application/User/gui/FrontendApplication.o + .group 0x0000000000000000 0xc ./Application/User/gui/FrontendApplication.o + .group 0x0000000000000000 0xc ./Application/User/gui/FrontendApplication.o + .group 0x0000000000000000 0xc ./Application/User/gui/FrontendApplication.o + .group 0x0000000000000000 0xc ./Application/User/gui/FrontendApplication.o + .group 0x0000000000000000 0xc ./Application/User/gui/FrontendApplication.o + .group 0x0000000000000000 0xc ./Application/User/gui/FrontendApplication.o + .group 0x0000000000000000 0xc ./Application/User/gui/FrontendApplication.o + .group 0x0000000000000000 0xc ./Application/User/gui/FrontendApplication.o + .group 0x0000000000000000 0xc ./Application/User/gui/FrontendApplication.o + .group 0x0000000000000000 0xc ./Application/User/gui/FrontendApplication.o + .group 0x0000000000000000 0xc ./Application/User/gui/FrontendApplication.o + .group 0x0000000000000000 0xc ./Application/User/gui/FrontendApplication.o + .group 0x0000000000000000 0xc ./Application/User/gui/FrontendApplication.o + .group 0x0000000000000000 0xc ./Application/User/gui/FrontendApplication.o + .group 0x0000000000000000 0xc ./Application/User/gui/FrontendApplication.o + .group 0x0000000000000000 0xc ./Application/User/gui/FrontendApplication.o + .group 0x0000000000000000 0xc ./Application/User/gui/FrontendApplication.o + .group 0x0000000000000000 0xc ./Application/User/gui/FrontendApplication.o + .group 0x0000000000000000 0xc ./Application/User/gui/FrontendApplication.o + .group 0x0000000000000000 0xc ./Application/User/gui/FrontendApplication.o + .group 0x0000000000000000 0xc ./Application/User/gui/FrontendApplication.o + .group 0x0000000000000000 0xc ./Application/User/gui/FrontendApplication.o + .group 0x0000000000000000 0xc ./Application/User/gui/FrontendApplication.o + .group 0x0000000000000000 0xc ./Application/User/gui/FrontendApplication.o + .group 0x0000000000000000 0xc ./Application/User/gui/FrontendApplication.o + .group 0x0000000000000000 0xc ./Application/User/gui/FrontendApplication.o + .group 0x0000000000000000 0xc ./Application/User/gui/FrontendApplication.o + .group 0x0000000000000000 0xc ./Application/User/gui/FrontendApplication.o + .group 0x0000000000000000 0xc ./Application/User/gui/FrontendApplication.o + .group 0x0000000000000000 0xc ./Application/User/gui/FrontendApplication.o + .text 0x0000000000000000 0x0 ./Application/User/gui/FrontendApplication.o + .data 0x0000000000000000 0x0 ./Application/User/gui/FrontendApplication.o + .bss 0x0000000000000000 0x0 ./Application/User/gui/FrontendApplication.o + .text._ZN8touchgfx11Application15appSwitchScreenEh + 0x0000000000000000 0x2 ./Application/User/gui/FrontendApplication.o + .text._ZN8touchgfx11Application13requestRedrawERNS_4RectE + 0x0000000000000000 0xc ./Application/User/gui/FrontendApplication.o + .text._ZN23FrontendApplicationBase19changeToStartScreenEv + 0x0000000000000000 0x4 ./Application/User/gui/FrontendApplication.o + .text._ZN8touchgfx14MVPApplication29handlePendingScreenTransitionEv + 0x0000000000000000 0x24 ./Application/User/gui/FrontendApplication.o + .debug_macro 0x0000000000000000 0xb86 ./Application/User/gui/FrontendApplication.o + .debug_macro 0x0000000000000000 0x1b2 ./Application/User/gui/FrontendApplication.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/gui/FrontendApplication.o + .debug_macro 0x0000000000000000 0x3ed ./Application/User/gui/FrontendApplication.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/gui/FrontendApplication.o + .debug_macro 0x0000000000000000 0x5b ./Application/User/gui/FrontendApplication.o + .debug_macro 0x0000000000000000 0x2a ./Application/User/gui/FrontendApplication.o + .debug_macro 0x0000000000000000 0x94 ./Application/User/gui/FrontendApplication.o + .debug_macro 0x0000000000000000 0x43 ./Application/User/gui/FrontendApplication.o + .debug_macro 0x0000000000000000 0x34 ./Application/User/gui/FrontendApplication.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/gui/FrontendApplication.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/gui/FrontendApplication.o + .debug_macro 0x0000000000000000 0x57 ./Application/User/gui/FrontendApplication.o + .debug_macro 0x0000000000000000 0x103 ./Application/User/gui/FrontendApplication.o + .debug_macro 0x0000000000000000 0x6a ./Application/User/gui/FrontendApplication.o + .debug_macro 0x0000000000000000 0x1df ./Application/User/gui/FrontendApplication.o + .debug_macro 0x0000000000000000 0x99 ./Application/User/gui/FrontendApplication.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/gui/FrontendApplication.o + .debug_macro 0x0000000000000000 0x58 ./Application/User/gui/FrontendApplication.o + .debug_macro 0x0000000000000000 0x17b ./Application/User/gui/FrontendApplication.o + .debug_macro 0x0000000000000000 0x38c ./Application/User/gui/FrontendApplication.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/gui/FrontendApplication.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/gui/FrontendApplication.o + .debug_macro 0x0000000000000000 0x43 ./Application/User/gui/FrontendApplication.o + .debug_macro 0x0000000000000000 0x34 ./Application/User/gui/FrontendApplication.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/gui/FrontendApplication.o + .debug_macro 0x0000000000000000 0x52 ./Application/User/gui/FrontendApplication.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/gui/FrontendApplication.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/gui/FrontendApplication.o + .debug_macro 0x0000000000000000 0x52 ./Application/User/gui/FrontendApplication.o + .debug_macro 0x0000000000000000 0xcf ./Application/User/gui/FrontendApplication.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/gui/FrontendApplication.o + .debug_macro 0x0000000000000000 0x3d ./Application/User/gui/FrontendApplication.o + .debug_macro 0x0000000000000000 0x18a ./Application/User/gui/FrontendApplication.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/gui/FrontendApplication.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/gui/FrontendApplication.o + .group 0x0000000000000000 0x10 ./Application/User/gui/MainScreenPresenter.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenPresenter.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenPresenter.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenPresenter.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenPresenter.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenPresenter.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenPresenter.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenPresenter.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenPresenter.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenPresenter.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenPresenter.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenPresenter.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenPresenter.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenPresenter.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenPresenter.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenPresenter.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenPresenter.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenPresenter.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenPresenter.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenPresenter.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenPresenter.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenPresenter.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenPresenter.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenPresenter.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenPresenter.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenPresenter.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenPresenter.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenPresenter.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenPresenter.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenPresenter.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenPresenter.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenPresenter.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenPresenter.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenPresenter.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenPresenter.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenPresenter.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenPresenter.o + .text 0x0000000000000000 0x0 ./Application/User/gui/MainScreenPresenter.o + .data 0x0000000000000000 0x0 ./Application/User/gui/MainScreenPresenter.o + .bss 0x0000000000000000 0x0 ./Application/User/gui/MainScreenPresenter.o + .debug_macro 0x0000000000000000 0xb86 ./Application/User/gui/MainScreenPresenter.o + .debug_macro 0x0000000000000000 0x1b2 ./Application/User/gui/MainScreenPresenter.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/gui/MainScreenPresenter.o + .debug_macro 0x0000000000000000 0x3ed ./Application/User/gui/MainScreenPresenter.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/gui/MainScreenPresenter.o + .debug_macro 0x0000000000000000 0x5b ./Application/User/gui/MainScreenPresenter.o + .debug_macro 0x0000000000000000 0x2a ./Application/User/gui/MainScreenPresenter.o + .debug_macro 0x0000000000000000 0x94 ./Application/User/gui/MainScreenPresenter.o + .debug_macro 0x0000000000000000 0x43 ./Application/User/gui/MainScreenPresenter.o + .debug_macro 0x0000000000000000 0x34 ./Application/User/gui/MainScreenPresenter.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/gui/MainScreenPresenter.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/gui/MainScreenPresenter.o + .debug_macro 0x0000000000000000 0x57 ./Application/User/gui/MainScreenPresenter.o + .debug_macro 0x0000000000000000 0x103 ./Application/User/gui/MainScreenPresenter.o + .debug_macro 0x0000000000000000 0x6a ./Application/User/gui/MainScreenPresenter.o + .debug_macro 0x0000000000000000 0x1df ./Application/User/gui/MainScreenPresenter.o + .debug_macro 0x0000000000000000 0x99 ./Application/User/gui/MainScreenPresenter.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/gui/MainScreenPresenter.o + .debug_macro 0x0000000000000000 0x58 ./Application/User/gui/MainScreenPresenter.o + .debug_macro 0x0000000000000000 0x17b ./Application/User/gui/MainScreenPresenter.o + .debug_macro 0x0000000000000000 0x38c ./Application/User/gui/MainScreenPresenter.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/gui/MainScreenPresenter.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/gui/MainScreenPresenter.o + .debug_macro 0x0000000000000000 0x43 ./Application/User/gui/MainScreenPresenter.o + .debug_macro 0x0000000000000000 0x34 ./Application/User/gui/MainScreenPresenter.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/gui/MainScreenPresenter.o + .debug_macro 0x0000000000000000 0x52 ./Application/User/gui/MainScreenPresenter.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/gui/MainScreenPresenter.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/gui/MainScreenPresenter.o + .debug_macro 0x0000000000000000 0x52 ./Application/User/gui/MainScreenPresenter.o + .debug_macro 0x0000000000000000 0xcf ./Application/User/gui/MainScreenPresenter.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/gui/MainScreenPresenter.o + .debug_macro 0x0000000000000000 0x3d ./Application/User/gui/MainScreenPresenter.o + .debug_macro 0x0000000000000000 0x18a ./Application/User/gui/MainScreenPresenter.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/gui/MainScreenPresenter.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/gui/MainScreenPresenter.o + .group 0x0000000000000000 0x8 ./Application/User/gui/MainScreenView.o + .group 0x0000000000000000 0x8 ./Application/User/gui/MainScreenView.o + .group 0x0000000000000000 0x8 ./Application/User/gui/MainScreenView.o + .group 0x0000000000000000 0x14 ./Application/User/gui/MainScreenView.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenView.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenView.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenView.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenView.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenView.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenView.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenView.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenView.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenView.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenView.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenView.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenView.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenView.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenView.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenView.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenView.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenView.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenView.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenView.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenView.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenView.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenView.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenView.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenView.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenView.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenView.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenView.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenView.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenView.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenView.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenView.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenView.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenView.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenView.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenView.o + .group 0x0000000000000000 0xc ./Application/User/gui/MainScreenView.o + .text 0x0000000000000000 0x0 ./Application/User/gui/MainScreenView.o + .data 0x0000000000000000 0x0 ./Application/User/gui/MainScreenView.o + .bss 0x0000000000000000 0x0 ./Application/User/gui/MainScreenView.o + .text._ZN8touchgfx6Screen15afterTransitionEv + 0x0000000000000000 0x2 ./Application/User/gui/MainScreenView.o + .text._ZN8touchgfx6Screen15handleTickEventEv + 0x0000000000000000 0x2 ./Application/User/gui/MainScreenView.o + .text._ZN8touchgfx6Screen14handleKeyEventEh + 0x0000000000000000 0x2 ./Application/User/gui/MainScreenView.o + .debug_macro 0x0000000000000000 0xb86 ./Application/User/gui/MainScreenView.o + .debug_macro 0x0000000000000000 0x1b2 ./Application/User/gui/MainScreenView.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/gui/MainScreenView.o + .debug_macro 0x0000000000000000 0x3ed ./Application/User/gui/MainScreenView.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/gui/MainScreenView.o + .debug_macro 0x0000000000000000 0x5b ./Application/User/gui/MainScreenView.o + .debug_macro 0x0000000000000000 0x2a ./Application/User/gui/MainScreenView.o + .debug_macro 0x0000000000000000 0x94 ./Application/User/gui/MainScreenView.o + .debug_macro 0x0000000000000000 0x43 ./Application/User/gui/MainScreenView.o + .debug_macro 0x0000000000000000 0x34 ./Application/User/gui/MainScreenView.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/gui/MainScreenView.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/gui/MainScreenView.o + .debug_macro 0x0000000000000000 0x57 ./Application/User/gui/MainScreenView.o + .debug_macro 0x0000000000000000 0x103 ./Application/User/gui/MainScreenView.o + .debug_macro 0x0000000000000000 0x6a ./Application/User/gui/MainScreenView.o + .debug_macro 0x0000000000000000 0x1df ./Application/User/gui/MainScreenView.o + .debug_macro 0x0000000000000000 0x99 ./Application/User/gui/MainScreenView.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/gui/MainScreenView.o + .debug_macro 0x0000000000000000 0x58 ./Application/User/gui/MainScreenView.o + .debug_macro 0x0000000000000000 0x17b ./Application/User/gui/MainScreenView.o + .debug_macro 0x0000000000000000 0x38c ./Application/User/gui/MainScreenView.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/gui/MainScreenView.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/gui/MainScreenView.o + .debug_macro 0x0000000000000000 0x43 ./Application/User/gui/MainScreenView.o + .debug_macro 0x0000000000000000 0x34 ./Application/User/gui/MainScreenView.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/gui/MainScreenView.o + .debug_macro 0x0000000000000000 0x52 ./Application/User/gui/MainScreenView.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/gui/MainScreenView.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/gui/MainScreenView.o + .debug_macro 0x0000000000000000 0x52 ./Application/User/gui/MainScreenView.o + .debug_macro 0x0000000000000000 0xcf ./Application/User/gui/MainScreenView.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/gui/MainScreenView.o + .debug_macro 0x0000000000000000 0x3d ./Application/User/gui/MainScreenView.o + .debug_macro 0x0000000000000000 0x18a ./Application/User/gui/MainScreenView.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/gui/MainScreenView.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/gui/MainScreenView.o + .group 0x0000000000000000 0xc ./Application/User/gui/Model.o + .group 0x0000000000000000 0xc ./Application/User/gui/Model.o + .group 0x0000000000000000 0xc ./Application/User/gui/Model.o + .group 0x0000000000000000 0xc ./Application/User/gui/Model.o + .group 0x0000000000000000 0xc ./Application/User/gui/Model.o + .group 0x0000000000000000 0xc ./Application/User/gui/Model.o + .group 0x0000000000000000 0xc ./Application/User/gui/Model.o + .group 0x0000000000000000 0xc ./Application/User/gui/Model.o + .group 0x0000000000000000 0xc ./Application/User/gui/Model.o + .group 0x0000000000000000 0xc ./Application/User/gui/Model.o + .group 0x0000000000000000 0xc ./Application/User/gui/Model.o + .group 0x0000000000000000 0xc ./Application/User/gui/Model.o + .group 0x0000000000000000 0xc ./Application/User/gui/Model.o + .group 0x0000000000000000 0xc ./Application/User/gui/Model.o + .group 0x0000000000000000 0xc ./Application/User/gui/Model.o + .group 0x0000000000000000 0xc ./Application/User/gui/Model.o + .group 0x0000000000000000 0xc ./Application/User/gui/Model.o + .group 0x0000000000000000 0xc ./Application/User/gui/Model.o + .group 0x0000000000000000 0xc ./Application/User/gui/Model.o + .group 0x0000000000000000 0xc ./Application/User/gui/Model.o + .group 0x0000000000000000 0xc ./Application/User/gui/Model.o + .group 0x0000000000000000 0xc ./Application/User/gui/Model.o + .group 0x0000000000000000 0xc ./Application/User/gui/Model.o + .group 0x0000000000000000 0xc ./Application/User/gui/Model.o + .group 0x0000000000000000 0xc ./Application/User/gui/Model.o + .group 0x0000000000000000 0xc ./Application/User/gui/Model.o + .group 0x0000000000000000 0xc ./Application/User/gui/Model.o + .group 0x0000000000000000 0xc ./Application/User/gui/Model.o + .group 0x0000000000000000 0xc ./Application/User/gui/Model.o + .group 0x0000000000000000 0xc ./Application/User/gui/Model.o + .group 0x0000000000000000 0xc ./Application/User/gui/Model.o + .group 0x0000000000000000 0xc ./Application/User/gui/Model.o + .group 0x0000000000000000 0xc ./Application/User/gui/Model.o + .group 0x0000000000000000 0xc ./Application/User/gui/Model.o + .group 0x0000000000000000 0xc ./Application/User/gui/Model.o + .group 0x0000000000000000 0xc ./Application/User/gui/Model.o + .group 0x0000000000000000 0xc ./Application/User/gui/Model.o + .group 0x0000000000000000 0xc ./Application/User/gui/Model.o + .group 0x0000000000000000 0xc ./Application/User/gui/Model.o + .group 0x0000000000000000 0xc ./Application/User/gui/Model.o + .group 0x0000000000000000 0xc ./Application/User/gui/Model.o + .group 0x0000000000000000 0xc ./Application/User/gui/Model.o + .group 0x0000000000000000 0xc ./Application/User/gui/Model.o + .group 0x0000000000000000 0xc ./Application/User/gui/Model.o + .group 0x0000000000000000 0xc ./Application/User/gui/Model.o + .group 0x0000000000000000 0xc ./Application/User/gui/Model.o + .group 0x0000000000000000 0xc ./Application/User/gui/Model.o + .group 0x0000000000000000 0xc ./Application/User/gui/Model.o + .group 0x0000000000000000 0xc ./Application/User/gui/Model.o + .group 0x0000000000000000 0xc ./Application/User/gui/Model.o + .group 0x0000000000000000 0xc ./Application/User/gui/Model.o + .group 0x0000000000000000 0xc ./Application/User/gui/Model.o + .group 0x0000000000000000 0xc ./Application/User/gui/Model.o + .text 0x0000000000000000 0x0 ./Application/User/gui/Model.o + .data 0x0000000000000000 0x0 ./Application/User/gui/Model.o + .bss 0x0000000000000000 0x0 ./Application/User/gui/Model.o + .debug_macro 0x0000000000000000 0xb86 ./Application/User/gui/Model.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/gui/Model.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/gui/Model.o + .debug_macro 0x0000000000000000 0x8e ./Application/User/gui/Model.o + .debug_macro 0x0000000000000000 0x51 ./Application/User/gui/Model.o + .debug_macro 0x0000000000000000 0x103 ./Application/User/gui/Model.o + .debug_macro 0x0000000000000000 0x6a ./Application/User/gui/Model.o + .debug_macro 0x0000000000000000 0x1df ./Application/User/gui/Model.o + .debug_macro 0x0000000000000000 0x2bf ./Application/User/gui/Model.o + .debug_macro 0x0000000000000000 0x2e ./Application/User/gui/Model.o + .debug_macro 0x0000000000000000 0x3b ./Application/User/gui/Model.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/gui/Model.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/gui/Model.o + .debug_macro 0x0000000000000000 0xd9 ./Application/User/gui/Model.o + .debug_macro 0x0000000000000000 0x12cd ./Application/User/gui/Model.o + .debug_macro 0x0000000000000000 0x11f ./Application/User/gui/Model.o + .debug_macro 0x0000000000000000 0x19 ./Application/User/gui/Model.o + .debug_macro 0x0000000000000000 0x1920a ./Application/User/gui/Model.o + .debug_macro 0x0000000000000000 0x6d ./Application/User/gui/Model.o + .debug_macro 0x0000000000000000 0x3749 ./Application/User/gui/Model.o + .debug_macro 0x0000000000000000 0x17b ./Application/User/gui/Model.o + .debug_macro 0x0000000000000000 0x63 ./Application/User/gui/Model.o + .debug_macro 0x0000000000000000 0x18ad ./Application/User/gui/Model.o + .debug_macro 0x0000000000000000 0x6c4 ./Application/User/gui/Model.o + .debug_macro 0x0000000000000000 0x185 ./Application/User/gui/Model.o + .debug_macro 0x0000000000000000 0x115 ./Application/User/gui/Model.o + .debug_macro 0x0000000000000000 0x1fd ./Application/User/gui/Model.o + .debug_macro 0x0000000000000000 0xa5 ./Application/User/gui/Model.o + .debug_macro 0x0000000000000000 0x24f ./Application/User/gui/Model.o + .debug_macro 0x0000000000000000 0x41 ./Application/User/gui/Model.o + .debug_macro 0x0000000000000000 0x58 ./Application/User/gui/Model.o + .debug_macro 0x0000000000000000 0x236 ./Application/User/gui/Model.o + .debug_macro 0x0000000000000000 0xc7 ./Application/User/gui/Model.o + .debug_macro 0x0000000000000000 0x4c ./Application/User/gui/Model.o + .debug_macro 0x0000000000000000 0x208 ./Application/User/gui/Model.o + .debug_macro 0x0000000000000000 0xd44 ./Application/User/gui/Model.o + .debug_macro 0x0000000000000000 0x14e ./Application/User/gui/Model.o + .debug_macro 0x0000000000000000 0x25a ./Application/User/gui/Model.o + .debug_macro 0x0000000000000000 0x12 ./Application/User/gui/Model.o + .debug_macro 0x0000000000000000 0x504 ./Application/User/gui/Model.o + .debug_macro 0x0000000000000000 0x22c ./Application/User/gui/Model.o + .debug_macro 0x0000000000000000 0x61 ./Application/User/gui/Model.o + .debug_macro 0x0000000000000000 0xa5 ./Application/User/gui/Model.o + .debug_macro 0x0000000000000000 0x198 ./Application/User/gui/Model.o + .debug_macro 0x0000000000000000 0xd6 ./Application/User/gui/Model.o + .debug_macro 0x0000000000000000 0x12e ./Application/User/gui/Model.o + .debug_macro 0x0000000000000000 0x108 ./Application/User/gui/Model.o + .debug_macro 0x0000000000000000 0x35 ./Application/User/gui/Model.o + .debug_macro 0x0000000000000000 0x2d4 ./Application/User/gui/Model.o + .debug_macro 0x0000000000000000 0xa7c ./Application/User/gui/Model.o + .debug_macro 0x0000000000000000 0x59 ./Application/User/gui/Model.o + .debug_macro 0x0000000000000000 0x14d ./Application/User/gui/Model.o + .debug_macro 0x0000000000000000 0xac ./Application/User/gui/Model.o + .group 0x0000000000000000 0x8 ./Application/User/gui/SliderContainer.o + .group 0x0000000000000000 0x8 ./Application/User/gui/SliderContainer.o + .group 0x0000000000000000 0x8 ./Application/User/gui/SliderContainer.o + .group 0x0000000000000000 0x8 ./Application/User/gui/SliderContainer.o + .group 0x0000000000000000 0x8 ./Application/User/gui/SliderContainer.o + .group 0x0000000000000000 0x8 ./Application/User/gui/SliderContainer.o + .group 0x0000000000000000 0x8 ./Application/User/gui/SliderContainer.o + .group 0x0000000000000000 0x8 ./Application/User/gui/SliderContainer.o + .group 0x0000000000000000 0x8 ./Application/User/gui/SliderContainer.o + .group 0x0000000000000000 0x8 ./Application/User/gui/SliderContainer.o + .group 0x0000000000000000 0x8 ./Application/User/gui/SliderContainer.o + .group 0x0000000000000000 0x14 ./Application/User/gui/SliderContainer.o + .group 0x0000000000000000 0x8 ./Application/User/gui/SliderContainer.o + .group 0x0000000000000000 0x8 ./Application/User/gui/SliderContainer.o + .group 0x0000000000000000 0xc ./Application/User/gui/SliderContainer.o + .group 0x0000000000000000 0xc ./Application/User/gui/SliderContainer.o + .group 0x0000000000000000 0xc ./Application/User/gui/SliderContainer.o + .group 0x0000000000000000 0xc ./Application/User/gui/SliderContainer.o + .group 0x0000000000000000 0xc ./Application/User/gui/SliderContainer.o + .group 0x0000000000000000 0xc ./Application/User/gui/SliderContainer.o + .group 0x0000000000000000 0xc ./Application/User/gui/SliderContainer.o + .group 0x0000000000000000 0xc ./Application/User/gui/SliderContainer.o + .group 0x0000000000000000 0xc ./Application/User/gui/SliderContainer.o + .group 0x0000000000000000 0xc ./Application/User/gui/SliderContainer.o + .group 0x0000000000000000 0xc ./Application/User/gui/SliderContainer.o + .group 0x0000000000000000 0xc ./Application/User/gui/SliderContainer.o + .group 0x0000000000000000 0xc ./Application/User/gui/SliderContainer.o + .group 0x0000000000000000 0xc ./Application/User/gui/SliderContainer.o + .group 0x0000000000000000 0xc ./Application/User/gui/SliderContainer.o + .group 0x0000000000000000 0xc ./Application/User/gui/SliderContainer.o + .group 0x0000000000000000 0xc ./Application/User/gui/SliderContainer.o + .group 0x0000000000000000 0xc ./Application/User/gui/SliderContainer.o + .group 0x0000000000000000 0xc ./Application/User/gui/SliderContainer.o + .group 0x0000000000000000 0xc ./Application/User/gui/SliderContainer.o + .group 0x0000000000000000 0xc ./Application/User/gui/SliderContainer.o + .group 0x0000000000000000 0xc ./Application/User/gui/SliderContainer.o + .group 0x0000000000000000 0xc ./Application/User/gui/SliderContainer.o + .group 0x0000000000000000 0xc ./Application/User/gui/SliderContainer.o + .group 0x0000000000000000 0xc ./Application/User/gui/SliderContainer.o + .group 0x0000000000000000 0xc ./Application/User/gui/SliderContainer.o + .group 0x0000000000000000 0xc ./Application/User/gui/SliderContainer.o + .group 0x0000000000000000 0xc ./Application/User/gui/SliderContainer.o + .group 0x0000000000000000 0xc ./Application/User/gui/SliderContainer.o + .group 0x0000000000000000 0xc ./Application/User/gui/SliderContainer.o + .group 0x0000000000000000 0xc ./Application/User/gui/SliderContainer.o + .group 0x0000000000000000 0xc ./Application/User/gui/SliderContainer.o + .group 0x0000000000000000 0xc ./Application/User/gui/SliderContainer.o + .group 0x0000000000000000 0xc ./Application/User/gui/SliderContainer.o + .group 0x0000000000000000 0xc ./Application/User/gui/SliderContainer.o + .group 0x0000000000000000 0xc ./Application/User/gui/SliderContainer.o + .text 0x0000000000000000 0x0 ./Application/User/gui/SliderContainer.o + .data 0x0000000000000000 0x0 ./Application/User/gui/SliderContainer.o + .bss 0x0000000000000000 0x0 ./Application/User/gui/SliderContainer.o + .text._ZN8touchgfx8Drawable4setXEs + 0x0000000000000000 0x4 ./Application/User/gui/SliderContainer.o + .text._ZN8touchgfx8Drawable4setYEs + 0x0000000000000000 0x4 ./Application/User/gui/SliderContainer.o + .text._ZN8touchgfx8Drawable8setWidthEs + 0x0000000000000000 0x4 ./Application/User/gui/SliderContainer.o + .text._ZN8touchgfx8Drawable9setHeightEs + 0x0000000000000000 0x4 ./Application/User/gui/SliderContainer.o + .text._ZN8touchgfx8Drawable20childGeometryChangedEv + 0x0000000000000000 0x2 ./Application/User/gui/SliderContainer.o + .text._ZN8touchgfx8Drawable16handleClickEventERKNS_10ClickEventE + 0x0000000000000000 0x2 ./Application/User/gui/SliderContainer.o + .text._ZN8touchgfx8Drawable18handleGestureEventERKNS_12GestureEventE + 0x0000000000000000 0x2 ./Application/User/gui/SliderContainer.o + .text._ZN8touchgfx8Drawable15handleDragEventERKNS_9DragEventE + 0x0000000000000000 0x2 ./Application/User/gui/SliderContainer.o + .text._ZN8touchgfx8Drawable15handleTickEventEv + 0x0000000000000000 0x2 ./Application/User/gui/SliderContainer.o + .text._ZN8touchgfx8Drawable6moveToEss + 0x0000000000000000 0x18 ./Application/User/gui/SliderContainer.o + .text._ZN8touchgfx9Container13getFirstChildEv + 0x0000000000000000 0x4 ./Application/User/gui/SliderContainer.o + .text._ZN15SliderContainerD2Ev + 0x0000000000000000 0x14 ./Application/User/gui/SliderContainer.o + .text._ZN15SliderContainerD0Ev + 0x0000000000000000 0x16 ./Application/User/gui/SliderContainer.o + .text._ZNK8touchgfx8Drawable17invalidateContentEv + 0x0000000000000000 0xe ./Application/User/gui/SliderContainer.o + .text._ZN19SliderContainerBase21emitUpdatePwmCallbackEh + 0x0000000000000000 0x2a ./Application/User/gui/SliderContainer.o + .debug_macro 0x0000000000000000 0xb86 ./Application/User/gui/SliderContainer.o + .debug_macro 0x0000000000000000 0x1b2 ./Application/User/gui/SliderContainer.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/gui/SliderContainer.o + .debug_macro 0x0000000000000000 0x3ed ./Application/User/gui/SliderContainer.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/gui/SliderContainer.o + .debug_macro 0x0000000000000000 0x5b ./Application/User/gui/SliderContainer.o + .debug_macro 0x0000000000000000 0x2a ./Application/User/gui/SliderContainer.o + .debug_macro 0x0000000000000000 0x94 ./Application/User/gui/SliderContainer.o + .debug_macro 0x0000000000000000 0x43 ./Application/User/gui/SliderContainer.o + .debug_macro 0x0000000000000000 0x34 ./Application/User/gui/SliderContainer.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/gui/SliderContainer.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/gui/SliderContainer.o + .debug_macro 0x0000000000000000 0x57 ./Application/User/gui/SliderContainer.o + .debug_macro 0x0000000000000000 0x103 ./Application/User/gui/SliderContainer.o + .debug_macro 0x0000000000000000 0x6a ./Application/User/gui/SliderContainer.o + .debug_macro 0x0000000000000000 0x1df ./Application/User/gui/SliderContainer.o + .debug_macro 0x0000000000000000 0x99 ./Application/User/gui/SliderContainer.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/gui/SliderContainer.o + .debug_macro 0x0000000000000000 0x58 ./Application/User/gui/SliderContainer.o + .debug_macro 0x0000000000000000 0x17b ./Application/User/gui/SliderContainer.o + .debug_macro 0x0000000000000000 0x38c ./Application/User/gui/SliderContainer.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/gui/SliderContainer.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/gui/SliderContainer.o + .debug_macro 0x0000000000000000 0x43 ./Application/User/gui/SliderContainer.o + .debug_macro 0x0000000000000000 0x34 ./Application/User/gui/SliderContainer.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/gui/SliderContainer.o + .debug_macro 0x0000000000000000 0x52 ./Application/User/gui/SliderContainer.o + .debug_macro 0x0000000000000000 0x22 ./Application/User/gui/SliderContainer.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/gui/SliderContainer.o + .debug_macro 0x0000000000000000 0x52 ./Application/User/gui/SliderContainer.o + .debug_macro 0x0000000000000000 0xcf ./Application/User/gui/SliderContainer.o + .debug_macro 0x0000000000000000 0x1c ./Application/User/gui/SliderContainer.o + .debug_macro 0x0000000000000000 0x3d ./Application/User/gui/SliderContainer.o + .debug_macro 0x0000000000000000 0x18a ./Application/User/gui/SliderContainer.o + .debug_macro 0x0000000000000000 0x16 ./Application/User/gui/SliderContainer.o + .debug_macro 0x0000000000000000 0x10 ./Application/User/gui/SliderContainer.o + .group 0x0000000000000000 0xc ./Drivers/BSP/Components/lan8742.o + .group 0x0000000000000000 0xc ./Drivers/BSP/Components/lan8742.o + .group 0x0000000000000000 0xc ./Drivers/BSP/Components/lan8742.o + .group 0x0000000000000000 0xc ./Drivers/BSP/Components/lan8742.o + .group 0x0000000000000000 0xc ./Drivers/BSP/Components/lan8742.o + .group 0x0000000000000000 0xc ./Drivers/BSP/Components/lan8742.o + .group 0x0000000000000000 0xc ./Drivers/BSP/Components/lan8742.o + .group 0x0000000000000000 0xc ./Drivers/BSP/Components/lan8742.o + .text 0x0000000000000000 0x0 ./Drivers/BSP/Components/lan8742.o + .data 0x0000000000000000 0x0 ./Drivers/BSP/Components/lan8742.o + .bss 0x0000000000000000 0x0 ./Drivers/BSP/Components/lan8742.o + .text.LAN8742_DeInit + 0x0000000000000000 0x1e ./Drivers/BSP/Components/lan8742.o + .text.LAN8742_DisablePowerDownMode + 0x0000000000000000 0x38 ./Drivers/BSP/Components/lan8742.o + .text.LAN8742_EnablePowerDownMode + 0x0000000000000000 0x38 ./Drivers/BSP/Components/lan8742.o + .text.LAN8742_StartAutoNego + 0x0000000000000000 0x38 ./Drivers/BSP/Components/lan8742.o + .text.LAN8742_SetLinkState + 0x0000000000000000 0x5c ./Drivers/BSP/Components/lan8742.o + .text.LAN8742_EnableLoopbackMode + 0x0000000000000000 0x38 ./Drivers/BSP/Components/lan8742.o + .text.LAN8742_DisableLoopbackMode + 0x0000000000000000 0x38 ./Drivers/BSP/Components/lan8742.o + .text.LAN8742_EnableIT + 0x0000000000000000 0x3c ./Drivers/BSP/Components/lan8742.o + .text.LAN8742_DisableIT + 0x0000000000000000 0x3c ./Drivers/BSP/Components/lan8742.o + .text.LAN8742_ClearIT + 0x0000000000000000 0x20 ./Drivers/BSP/Components/lan8742.o + .text.LAN8742_GetITStatus + 0x0000000000000000 0x2a ./Drivers/BSP/Components/lan8742.o + .debug_macro 0x0000000000000000 0xaae ./Drivers/BSP/Components/lan8742.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/BSP/Components/lan8742.o + .debug_macro 0x0000000000000000 0x8e ./Drivers/BSP/Components/lan8742.o + .debug_macro 0x0000000000000000 0x51 ./Drivers/BSP/Components/lan8742.o + .debug_macro 0x0000000000000000 0x103 ./Drivers/BSP/Components/lan8742.o + .debug_macro 0x0000000000000000 0x6a ./Drivers/BSP/Components/lan8742.o + .debug_macro 0x0000000000000000 0x1df ./Drivers/BSP/Components/lan8742.o + .group 0x0000000000000000 0xc ./Drivers/BSP/stm32746g_discovery_qspi.o + .group 0x0000000000000000 0xc ./Drivers/BSP/stm32746g_discovery_qspi.o + .group 0x0000000000000000 0xc ./Drivers/BSP/stm32746g_discovery_qspi.o + .group 0x0000000000000000 0xc ./Drivers/BSP/stm32746g_discovery_qspi.o + .group 0x0000000000000000 0xc ./Drivers/BSP/stm32746g_discovery_qspi.o + .group 0x0000000000000000 0xc ./Drivers/BSP/stm32746g_discovery_qspi.o + .group 0x0000000000000000 0xc ./Drivers/BSP/stm32746g_discovery_qspi.o + .group 0x0000000000000000 0xc ./Drivers/BSP/stm32746g_discovery_qspi.o + .group 0x0000000000000000 0xc ./Drivers/BSP/stm32746g_discovery_qspi.o + .group 0x0000000000000000 0xc ./Drivers/BSP/stm32746g_discovery_qspi.o + .group 0x0000000000000000 0xc ./Drivers/BSP/stm32746g_discovery_qspi.o + .group 0x0000000000000000 0xc ./Drivers/BSP/stm32746g_discovery_qspi.o + .group 0x0000000000000000 0xc ./Drivers/BSP/stm32746g_discovery_qspi.o + .group 0x0000000000000000 0xc ./Drivers/BSP/stm32746g_discovery_qspi.o + .group 0x0000000000000000 0xc ./Drivers/BSP/stm32746g_discovery_qspi.o + .group 0x0000000000000000 0xc ./Drivers/BSP/stm32746g_discovery_qspi.o + .group 0x0000000000000000 0xc ./Drivers/BSP/stm32746g_discovery_qspi.o + .group 0x0000000000000000 0xc ./Drivers/BSP/stm32746g_discovery_qspi.o + .group 0x0000000000000000 0xc ./Drivers/BSP/stm32746g_discovery_qspi.o + .group 0x0000000000000000 0xc ./Drivers/BSP/stm32746g_discovery_qspi.o + .group 0x0000000000000000 0xc ./Drivers/BSP/stm32746g_discovery_qspi.o + .group 0x0000000000000000 0xc ./Drivers/BSP/stm32746g_discovery_qspi.o + .group 0x0000000000000000 0xc ./Drivers/BSP/stm32746g_discovery_qspi.o + .group 0x0000000000000000 0xc ./Drivers/BSP/stm32746g_discovery_qspi.o + .group 0x0000000000000000 0xc ./Drivers/BSP/stm32746g_discovery_qspi.o + .group 0x0000000000000000 0xc ./Drivers/BSP/stm32746g_discovery_qspi.o + .group 0x0000000000000000 0xc ./Drivers/BSP/stm32746g_discovery_qspi.o + .group 0x0000000000000000 0xc ./Drivers/BSP/stm32746g_discovery_qspi.o + .group 0x0000000000000000 0xc ./Drivers/BSP/stm32746g_discovery_qspi.o + .group 0x0000000000000000 0xc ./Drivers/BSP/stm32746g_discovery_qspi.o + .group 0x0000000000000000 0xc ./Drivers/BSP/stm32746g_discovery_qspi.o + .group 0x0000000000000000 0xc ./Drivers/BSP/stm32746g_discovery_qspi.o + .group 0x0000000000000000 0xc ./Drivers/BSP/stm32746g_discovery_qspi.o + .group 0x0000000000000000 0xc ./Drivers/BSP/stm32746g_discovery_qspi.o + .group 0x0000000000000000 0xc ./Drivers/BSP/stm32746g_discovery_qspi.o + .group 0x0000000000000000 0xc ./Drivers/BSP/stm32746g_discovery_qspi.o + .group 0x0000000000000000 0xc ./Drivers/BSP/stm32746g_discovery_qspi.o + .group 0x0000000000000000 0xc ./Drivers/BSP/stm32746g_discovery_qspi.o + .group 0x0000000000000000 0xc ./Drivers/BSP/stm32746g_discovery_qspi.o + .group 0x0000000000000000 0xc ./Drivers/BSP/stm32746g_discovery_qspi.o + .group 0x0000000000000000 0xc ./Drivers/BSP/stm32746g_discovery_qspi.o + .group 0x0000000000000000 0xc ./Drivers/BSP/stm32746g_discovery_qspi.o + .group 0x0000000000000000 0xc ./Drivers/BSP/stm32746g_discovery_qspi.o + .group 0x0000000000000000 0xc ./Drivers/BSP/stm32746g_discovery_qspi.o + .group 0x0000000000000000 0xc ./Drivers/BSP/stm32746g_discovery_qspi.o + .group 0x0000000000000000 0xc ./Drivers/BSP/stm32746g_discovery_qspi.o + .group 0x0000000000000000 0xc ./Drivers/BSP/stm32746g_discovery_qspi.o + .group 0x0000000000000000 0xc ./Drivers/BSP/stm32746g_discovery_qspi.o + .group 0x0000000000000000 0xc ./Drivers/BSP/stm32746g_discovery_qspi.o + .group 0x0000000000000000 0xc ./Drivers/BSP/stm32746g_discovery_qspi.o + .group 0x0000000000000000 0xc ./Drivers/BSP/stm32746g_discovery_qspi.o + .group 0x0000000000000000 0xc ./Drivers/BSP/stm32746g_discovery_qspi.o + .group 0x0000000000000000 0xc ./Drivers/BSP/stm32746g_discovery_qspi.o + .text 0x0000000000000000 0x0 ./Drivers/BSP/stm32746g_discovery_qspi.o + .data 0x0000000000000000 0x0 ./Drivers/BSP/stm32746g_discovery_qspi.o + .bss 0x0000000000000000 0x0 ./Drivers/BSP/stm32746g_discovery_qspi.o + .text.BSP_QSPI_Read + 0x0000000000000000 0x7c ./Drivers/BSP/stm32746g_discovery_qspi.o + .text.BSP_QSPI_Write + 0x0000000000000000 0x98 ./Drivers/BSP/stm32746g_discovery_qspi.o + .text.BSP_QSPI_Erase_Block + 0x0000000000000000 0x5c ./Drivers/BSP/stm32746g_discovery_qspi.o + .text.BSP_QSPI_Erase_Chip + 0x0000000000000000 0x54 ./Drivers/BSP/stm32746g_discovery_qspi.o + .text.BSP_QSPI_GetStatus + 0x0000000000000000 0x70 ./Drivers/BSP/stm32746g_discovery_qspi.o + .text.BSP_QSPI_GetInfo + 0x0000000000000000 0x1e ./Drivers/BSP/stm32746g_discovery_qspi.o + .text.BSP_QSPI_MspDeInit + 0x0000000000000000 0x6c ./Drivers/BSP/stm32746g_discovery_qspi.o + .text.BSP_QSPI_DeInit + 0x0000000000000000 0x2c ./Drivers/BSP/stm32746g_discovery_qspi.o + .debug_macro 0x0000000000000000 0xaae ./Drivers/BSP/stm32746g_discovery_qspi.o + .debug_macro 0x0000000000000000 0x2bf ./Drivers/BSP/stm32746g_discovery_qspi.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/BSP/stm32746g_discovery_qspi.o + .debug_macro 0x0000000000000000 0x3b ./Drivers/BSP/stm32746g_discovery_qspi.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/BSP/stm32746g_discovery_qspi.o + .debug_macro 0x0000000000000000 0x8e ./Drivers/BSP/stm32746g_discovery_qspi.o + .debug_macro 0x0000000000000000 0x51 ./Drivers/BSP/stm32746g_discovery_qspi.o + .debug_macro 0x0000000000000000 0x103 ./Drivers/BSP/stm32746g_discovery_qspi.o + .debug_macro 0x0000000000000000 0x6a ./Drivers/BSP/stm32746g_discovery_qspi.o + .debug_macro 0x0000000000000000 0x1df ./Drivers/BSP/stm32746g_discovery_qspi.o + .debug_macro 0x0000000000000000 0x1c ./Drivers/BSP/stm32746g_discovery_qspi.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/BSP/stm32746g_discovery_qspi.o + .debug_macro 0x0000000000000000 0xd9 ./Drivers/BSP/stm32746g_discovery_qspi.o + .debug_macro 0x0000000000000000 0x12cd ./Drivers/BSP/stm32746g_discovery_qspi.o + .debug_macro 0x0000000000000000 0x11f ./Drivers/BSP/stm32746g_discovery_qspi.o + .debug_macro 0x0000000000000000 0x19 ./Drivers/BSP/stm32746g_discovery_qspi.o + .debug_macro 0x0000000000000000 0x1920a ./Drivers/BSP/stm32746g_discovery_qspi.o + .debug_macro 0x0000000000000000 0x6d ./Drivers/BSP/stm32746g_discovery_qspi.o + .debug_macro 0x0000000000000000 0x3749 ./Drivers/BSP/stm32746g_discovery_qspi.o + .debug_macro 0x0000000000000000 0x174 ./Drivers/BSP/stm32746g_discovery_qspi.o + .debug_macro 0x0000000000000000 0x63 ./Drivers/BSP/stm32746g_discovery_qspi.o + .debug_macro 0x0000000000000000 0x18ad ./Drivers/BSP/stm32746g_discovery_qspi.o + .debug_macro 0x0000000000000000 0x6c4 ./Drivers/BSP/stm32746g_discovery_qspi.o + .debug_macro 0x0000000000000000 0x185 ./Drivers/BSP/stm32746g_discovery_qspi.o + .debug_macro 0x0000000000000000 0x115 ./Drivers/BSP/stm32746g_discovery_qspi.o + .debug_macro 0x0000000000000000 0x1fd ./Drivers/BSP/stm32746g_discovery_qspi.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/BSP/stm32746g_discovery_qspi.o + .debug_macro 0x0000000000000000 0x24f ./Drivers/BSP/stm32746g_discovery_qspi.o + .debug_macro 0x0000000000000000 0x41 ./Drivers/BSP/stm32746g_discovery_qspi.o + .debug_macro 0x0000000000000000 0x58 ./Drivers/BSP/stm32746g_discovery_qspi.o + .debug_macro 0x0000000000000000 0x236 ./Drivers/BSP/stm32746g_discovery_qspi.o + .debug_macro 0x0000000000000000 0xc7 ./Drivers/BSP/stm32746g_discovery_qspi.o + .debug_macro 0x0000000000000000 0x4c ./Drivers/BSP/stm32746g_discovery_qspi.o + .debug_macro 0x0000000000000000 0x208 ./Drivers/BSP/stm32746g_discovery_qspi.o + .debug_macro 0x0000000000000000 0xd44 ./Drivers/BSP/stm32746g_discovery_qspi.o + .debug_macro 0x0000000000000000 0x14e ./Drivers/BSP/stm32746g_discovery_qspi.o + .debug_macro 0x0000000000000000 0x25a ./Drivers/BSP/stm32746g_discovery_qspi.o + .debug_macro 0x0000000000000000 0x12 ./Drivers/BSP/stm32746g_discovery_qspi.o + .debug_macro 0x0000000000000000 0x504 ./Drivers/BSP/stm32746g_discovery_qspi.o + .debug_macro 0x0000000000000000 0x22c ./Drivers/BSP/stm32746g_discovery_qspi.o + .debug_macro 0x0000000000000000 0x61 ./Drivers/BSP/stm32746g_discovery_qspi.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/BSP/stm32746g_discovery_qspi.o + .debug_macro 0x0000000000000000 0x198 ./Drivers/BSP/stm32746g_discovery_qspi.o + .debug_macro 0x0000000000000000 0xd6 ./Drivers/BSP/stm32746g_discovery_qspi.o + .debug_macro 0x0000000000000000 0x12e ./Drivers/BSP/stm32746g_discovery_qspi.o + .debug_macro 0x0000000000000000 0x108 ./Drivers/BSP/stm32746g_discovery_qspi.o + .debug_macro 0x0000000000000000 0x35 ./Drivers/BSP/stm32746g_discovery_qspi.o + .debug_macro 0x0000000000000000 0x2d4 ./Drivers/BSP/stm32746g_discovery_qspi.o + .debug_macro 0x0000000000000000 0xa7c ./Drivers/BSP/stm32746g_discovery_qspi.o + .debug_macro 0x0000000000000000 0x59 ./Drivers/BSP/stm32746g_discovery_qspi.o + .debug_macro 0x0000000000000000 0x14d ./Drivers/BSP/stm32746g_discovery_qspi.o + .debug_macro 0x0000000000000000 0x1ed ./Drivers/BSP/stm32746g_discovery_qspi.o + .debug_macro 0x0000000000000000 0xb8 ./Drivers/BSP/stm32746g_discovery_qspi.o + .group 0x0000000000000000 0xc ./Drivers/CMSIS/system_stm32f7xx.o + .group 0x0000000000000000 0xc ./Drivers/CMSIS/system_stm32f7xx.o + .group 0x0000000000000000 0xc ./Drivers/CMSIS/system_stm32f7xx.o + .group 0x0000000000000000 0xc ./Drivers/CMSIS/system_stm32f7xx.o + .group 0x0000000000000000 0xc ./Drivers/CMSIS/system_stm32f7xx.o + .group 0x0000000000000000 0xc ./Drivers/CMSIS/system_stm32f7xx.o + .group 0x0000000000000000 0xc ./Drivers/CMSIS/system_stm32f7xx.o + .group 0x0000000000000000 0xc ./Drivers/CMSIS/system_stm32f7xx.o + .group 0x0000000000000000 0xc ./Drivers/CMSIS/system_stm32f7xx.o + .group 0x0000000000000000 0xc ./Drivers/CMSIS/system_stm32f7xx.o + .group 0x0000000000000000 0xc ./Drivers/CMSIS/system_stm32f7xx.o + .group 0x0000000000000000 0xc ./Drivers/CMSIS/system_stm32f7xx.o + .group 0x0000000000000000 0xc ./Drivers/CMSIS/system_stm32f7xx.o + .group 0x0000000000000000 0xc ./Drivers/CMSIS/system_stm32f7xx.o + .group 0x0000000000000000 0xc ./Drivers/CMSIS/system_stm32f7xx.o + .group 0x0000000000000000 0xc ./Drivers/CMSIS/system_stm32f7xx.o + .group 0x0000000000000000 0xc ./Drivers/CMSIS/system_stm32f7xx.o + .group 0x0000000000000000 0xc ./Drivers/CMSIS/system_stm32f7xx.o + .group 0x0000000000000000 0xc ./Drivers/CMSIS/system_stm32f7xx.o + .group 0x0000000000000000 0xc ./Drivers/CMSIS/system_stm32f7xx.o + .group 0x0000000000000000 0xc ./Drivers/CMSIS/system_stm32f7xx.o + .group 0x0000000000000000 0xc ./Drivers/CMSIS/system_stm32f7xx.o + .group 0x0000000000000000 0xc ./Drivers/CMSIS/system_stm32f7xx.o + .group 0x0000000000000000 0xc ./Drivers/CMSIS/system_stm32f7xx.o + .group 0x0000000000000000 0xc ./Drivers/CMSIS/system_stm32f7xx.o + .group 0x0000000000000000 0xc ./Drivers/CMSIS/system_stm32f7xx.o + .group 0x0000000000000000 0xc ./Drivers/CMSIS/system_stm32f7xx.o + .group 0x0000000000000000 0xc ./Drivers/CMSIS/system_stm32f7xx.o + .group 0x0000000000000000 0xc ./Drivers/CMSIS/system_stm32f7xx.o + .group 0x0000000000000000 0xc ./Drivers/CMSIS/system_stm32f7xx.o + .group 0x0000000000000000 0xc ./Drivers/CMSIS/system_stm32f7xx.o + .group 0x0000000000000000 0xc ./Drivers/CMSIS/system_stm32f7xx.o + .group 0x0000000000000000 0xc ./Drivers/CMSIS/system_stm32f7xx.o + .group 0x0000000000000000 0xc ./Drivers/CMSIS/system_stm32f7xx.o + .group 0x0000000000000000 0xc ./Drivers/CMSIS/system_stm32f7xx.o + .group 0x0000000000000000 0xc ./Drivers/CMSIS/system_stm32f7xx.o + .group 0x0000000000000000 0xc ./Drivers/CMSIS/system_stm32f7xx.o + .group 0x0000000000000000 0xc ./Drivers/CMSIS/system_stm32f7xx.o + .group 0x0000000000000000 0xc ./Drivers/CMSIS/system_stm32f7xx.o + .group 0x0000000000000000 0xc ./Drivers/CMSIS/system_stm32f7xx.o + .group 0x0000000000000000 0xc ./Drivers/CMSIS/system_stm32f7xx.o + .group 0x0000000000000000 0xc ./Drivers/CMSIS/system_stm32f7xx.o + .group 0x0000000000000000 0xc ./Drivers/CMSIS/system_stm32f7xx.o + .group 0x0000000000000000 0xc ./Drivers/CMSIS/system_stm32f7xx.o + .group 0x0000000000000000 0xc ./Drivers/CMSIS/system_stm32f7xx.o + .group 0x0000000000000000 0xc ./Drivers/CMSIS/system_stm32f7xx.o + .group 0x0000000000000000 0xc ./Drivers/CMSIS/system_stm32f7xx.o + .group 0x0000000000000000 0xc ./Drivers/CMSIS/system_stm32f7xx.o + .group 0x0000000000000000 0xc ./Drivers/CMSIS/system_stm32f7xx.o + .group 0x0000000000000000 0xc ./Drivers/CMSIS/system_stm32f7xx.o + .group 0x0000000000000000 0xc ./Drivers/CMSIS/system_stm32f7xx.o + .text 0x0000000000000000 0x0 ./Drivers/CMSIS/system_stm32f7xx.o + .data 0x0000000000000000 0x0 ./Drivers/CMSIS/system_stm32f7xx.o + .bss 0x0000000000000000 0x0 ./Drivers/CMSIS/system_stm32f7xx.o + .text.SystemCoreClockUpdate + 0x0000000000000000 0x70 ./Drivers/CMSIS/system_stm32f7xx.o + .debug_macro 0x0000000000000000 0xaae ./Drivers/CMSIS/system_stm32f7xx.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/CMSIS/system_stm32f7xx.o + .debug_macro 0x0000000000000000 0x3b ./Drivers/CMSIS/system_stm32f7xx.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/CMSIS/system_stm32f7xx.o + .debug_macro 0x0000000000000000 0x8e ./Drivers/CMSIS/system_stm32f7xx.o + .debug_macro 0x0000000000000000 0x51 ./Drivers/CMSIS/system_stm32f7xx.o + .debug_macro 0x0000000000000000 0x103 ./Drivers/CMSIS/system_stm32f7xx.o + .debug_macro 0x0000000000000000 0x6a ./Drivers/CMSIS/system_stm32f7xx.o + .debug_macro 0x0000000000000000 0x1df ./Drivers/CMSIS/system_stm32f7xx.o + .debug_macro 0x0000000000000000 0x1c ./Drivers/CMSIS/system_stm32f7xx.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/CMSIS/system_stm32f7xx.o + .debug_macro 0x0000000000000000 0xd9 ./Drivers/CMSIS/system_stm32f7xx.o + .debug_macro 0x0000000000000000 0x12cd ./Drivers/CMSIS/system_stm32f7xx.o + .debug_macro 0x0000000000000000 0x11f ./Drivers/CMSIS/system_stm32f7xx.o + .debug_macro 0x0000000000000000 0x19 ./Drivers/CMSIS/system_stm32f7xx.o + .debug_macro 0x0000000000000000 0x1920a ./Drivers/CMSIS/system_stm32f7xx.o + .debug_macro 0x0000000000000000 0x6d ./Drivers/CMSIS/system_stm32f7xx.o + .debug_macro 0x0000000000000000 0x2bf ./Drivers/CMSIS/system_stm32f7xx.o + .debug_macro 0x0000000000000000 0x3749 ./Drivers/CMSIS/system_stm32f7xx.o + .debug_macro 0x0000000000000000 0x174 ./Drivers/CMSIS/system_stm32f7xx.o + .debug_macro 0x0000000000000000 0x63 ./Drivers/CMSIS/system_stm32f7xx.o + .debug_macro 0x0000000000000000 0x18ad ./Drivers/CMSIS/system_stm32f7xx.o + .debug_macro 0x0000000000000000 0x6c4 ./Drivers/CMSIS/system_stm32f7xx.o + .debug_macro 0x0000000000000000 0x185 ./Drivers/CMSIS/system_stm32f7xx.o + .debug_macro 0x0000000000000000 0x115 ./Drivers/CMSIS/system_stm32f7xx.o + .debug_macro 0x0000000000000000 0x1fd ./Drivers/CMSIS/system_stm32f7xx.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/CMSIS/system_stm32f7xx.o + .debug_macro 0x0000000000000000 0x24f ./Drivers/CMSIS/system_stm32f7xx.o + .debug_macro 0x0000000000000000 0x41 ./Drivers/CMSIS/system_stm32f7xx.o + .debug_macro 0x0000000000000000 0x58 ./Drivers/CMSIS/system_stm32f7xx.o + .debug_macro 0x0000000000000000 0x236 ./Drivers/CMSIS/system_stm32f7xx.o + .debug_macro 0x0000000000000000 0xc7 ./Drivers/CMSIS/system_stm32f7xx.o + .debug_macro 0x0000000000000000 0x4c ./Drivers/CMSIS/system_stm32f7xx.o + .debug_macro 0x0000000000000000 0x208 ./Drivers/CMSIS/system_stm32f7xx.o + .debug_macro 0x0000000000000000 0xd44 ./Drivers/CMSIS/system_stm32f7xx.o + .debug_macro 0x0000000000000000 0x14e ./Drivers/CMSIS/system_stm32f7xx.o + .debug_macro 0x0000000000000000 0x25a ./Drivers/CMSIS/system_stm32f7xx.o + .debug_macro 0x0000000000000000 0x12 ./Drivers/CMSIS/system_stm32f7xx.o + .debug_macro 0x0000000000000000 0x504 ./Drivers/CMSIS/system_stm32f7xx.o + .debug_macro 0x0000000000000000 0x22c ./Drivers/CMSIS/system_stm32f7xx.o + .debug_macro 0x0000000000000000 0x61 ./Drivers/CMSIS/system_stm32f7xx.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/CMSIS/system_stm32f7xx.o + .debug_macro 0x0000000000000000 0x198 ./Drivers/CMSIS/system_stm32f7xx.o + .debug_macro 0x0000000000000000 0xd6 ./Drivers/CMSIS/system_stm32f7xx.o + .debug_macro 0x0000000000000000 0x12e ./Drivers/CMSIS/system_stm32f7xx.o + .debug_macro 0x0000000000000000 0x108 ./Drivers/CMSIS/system_stm32f7xx.o + .debug_macro 0x0000000000000000 0x35 ./Drivers/CMSIS/system_stm32f7xx.o + .debug_macro 0x0000000000000000 0x2d4 ./Drivers/CMSIS/system_stm32f7xx.o + .debug_macro 0x0000000000000000 0xa7c ./Drivers/CMSIS/system_stm32f7xx.o + .debug_macro 0x0000000000000000 0x59 ./Drivers/CMSIS/system_stm32f7xx.o + .debug_macro 0x0000000000000000 0x14d ./Drivers/CMSIS/system_stm32f7xx.o + .group 0x0000000000000000 0xc ./Drivers/Components/ft5336.o + .group 0x0000000000000000 0xc ./Drivers/Components/ft5336.o + .group 0x0000000000000000 0xc ./Drivers/Components/ft5336.o + .group 0x0000000000000000 0xc ./Drivers/Components/ft5336.o + .group 0x0000000000000000 0xc ./Drivers/Components/ft5336.o + .group 0x0000000000000000 0xc ./Drivers/Components/ft5336.o + .group 0x0000000000000000 0xc ./Drivers/Components/ft5336.o + .group 0x0000000000000000 0xc ./Drivers/Components/ft5336.o + .group 0x0000000000000000 0xc ./Drivers/Components/ft5336.o + .text 0x0000000000000000 0x0 ./Drivers/Components/ft5336.o + .data 0x0000000000000000 0x0 ./Drivers/Components/ft5336.o + .bss 0x0000000000000000 0x0 ./Drivers/Components/ft5336.o + .debug_macro 0x0000000000000000 0xaae ./Drivers/Components/ft5336.o + .debug_macro 0x0000000000000000 0x10 ./Drivers/Components/ft5336.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/Components/ft5336.o + .debug_macro 0x0000000000000000 0x8e ./Drivers/Components/ft5336.o + .debug_macro 0x0000000000000000 0x51 ./Drivers/Components/ft5336.o + .debug_macro 0x0000000000000000 0x103 ./Drivers/Components/ft5336.o + .debug_macro 0x0000000000000000 0x6a ./Drivers/Components/ft5336.o + .debug_macro 0x0000000000000000 0x1df ./Drivers/Components/ft5336.o + .debug_macro 0x0000000000000000 0x39e ./Drivers/Components/ft5336.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .text 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .data 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .bss 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .text.HAL_MspInit + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .text.HAL_MspDeInit + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .text.HAL_DeInit + 0x0000000000000000 0x2c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .text.HAL_InitTick + 0x0000000000000000 0x48 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .text.HAL_GetTickPrio + 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .text.HAL_SetTickFreq + 0x0000000000000000 0x28 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .text.HAL_GetTickFreq + 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .text.HAL_SuspendTick + 0x0000000000000000 0xe ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .text.HAL_ResumeTick + 0x0000000000000000 0xe ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .text.HAL_GetHalVersion + 0x0000000000000000 0x8 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .text.HAL_GetREVID + 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .text.HAL_GetDEVID + 0x0000000000000000 0x10 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .text.HAL_GetUIDw0 + 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .text.HAL_GetUIDw1 + 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .text.HAL_GetUIDw2 + 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .text.HAL_DBGMCU_EnableDBGSleepMode + 0x0000000000000000 0x10 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .text.HAL_DBGMCU_DisableDBGSleepMode + 0x0000000000000000 0x10 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .text.HAL_DBGMCU_EnableDBGStopMode + 0x0000000000000000 0x10 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .text.HAL_DBGMCU_DisableDBGStopMode + 0x0000000000000000 0x10 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .text.HAL_DBGMCU_EnableDBGStandbyMode + 0x0000000000000000 0x10 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .text.HAL_DBGMCU_DisableDBGStandbyMode + 0x0000000000000000 0x10 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .text.HAL_EnableCompensationCell + 0x0000000000000000 0x10 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .text.HAL_DisableCompensationCell + 0x0000000000000000 0x10 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .text.HAL_EnableFMCMemorySwapping + 0x0000000000000000 0x10 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .text.HAL_DisableFMCMemorySwapping + 0x0000000000000000 0x10 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .debug_macro 0x0000000000000000 0xaae ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .debug_macro 0x0000000000000000 0x2bf ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .debug_macro 0x0000000000000000 0x3b ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .debug_macro 0x0000000000000000 0x8e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .debug_macro 0x0000000000000000 0x51 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .debug_macro 0x0000000000000000 0x103 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .debug_macro 0x0000000000000000 0x6a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .debug_macro 0x0000000000000000 0x1df ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .debug_macro 0x0000000000000000 0x1c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .debug_macro 0x0000000000000000 0xd9 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .debug_macro 0x0000000000000000 0x12cd ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .debug_macro 0x0000000000000000 0x11f ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .debug_macro 0x0000000000000000 0x19 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .debug_macro 0x0000000000000000 0x1920a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .debug_macro 0x0000000000000000 0x6d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .debug_macro 0x0000000000000000 0x3749 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .debug_macro 0x0000000000000000 0x174 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .debug_macro 0x0000000000000000 0x63 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .debug_macro 0x0000000000000000 0x18ad ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .debug_macro 0x0000000000000000 0x6c4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .debug_macro 0x0000000000000000 0x185 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .debug_macro 0x0000000000000000 0x115 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .debug_macro 0x0000000000000000 0x1fd ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .debug_macro 0x0000000000000000 0x24f ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .debug_macro 0x0000000000000000 0x41 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .debug_macro 0x0000000000000000 0x58 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .debug_macro 0x0000000000000000 0x236 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .debug_macro 0x0000000000000000 0xc7 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .debug_macro 0x0000000000000000 0x4c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .debug_macro 0x0000000000000000 0x208 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .debug_macro 0x0000000000000000 0xd44 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .debug_macro 0x0000000000000000 0x14e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .debug_macro 0x0000000000000000 0x25a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .debug_macro 0x0000000000000000 0x12 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .debug_macro 0x0000000000000000 0x504 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .debug_macro 0x0000000000000000 0x22c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .debug_macro 0x0000000000000000 0x61 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .debug_macro 0x0000000000000000 0x198 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .debug_macro 0x0000000000000000 0xd6 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .debug_macro 0x0000000000000000 0x12e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .debug_macro 0x0000000000000000 0x108 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .debug_macro 0x0000000000000000 0x35 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .debug_macro 0x0000000000000000 0x2d4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .debug_macro 0x0000000000000000 0xa7c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .debug_macro 0x0000000000000000 0x59 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .debug_macro 0x0000000000000000 0x14d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .text 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .data 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .bss 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .text.HAL_NVIC_SystemReset + 0x0000000000000000 0x24 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .text.HAL_SYSTICK_Config + 0x0000000000000000 0x28 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .text.HAL_NVIC_GetPriorityGrouping + 0x0000000000000000 0x10 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .text.HAL_NVIC_GetPriority + 0x0000000000000000 0x58 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .text.HAL_NVIC_SetPendingIRQ + 0x0000000000000000 0x1c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .text.HAL_NVIC_GetPendingIRQ + 0x0000000000000000 0x24 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .text.HAL_NVIC_ClearPendingIRQ + 0x0000000000000000 0x1c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .text.HAL_NVIC_GetActive + 0x0000000000000000 0x24 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .text.HAL_SYSTICK_CLKSourceConfig + 0x0000000000000000 0x16 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .text.HAL_SYSTICK_Callback + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .text.HAL_SYSTICK_IRQHandler + 0x0000000000000000 0x8 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .debug_macro 0x0000000000000000 0xaae ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x2bf ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x3b ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x8e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x51 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x103 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x6a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x1df ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x1c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .debug_macro 0x0000000000000000 0xd9 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x12cd ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x11f ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x19 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x1920a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x6d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x3749 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x174 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x63 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x18ad ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x6c4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x185 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x115 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x1fd ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x24f ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x41 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x58 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x236 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .debug_macro 0x0000000000000000 0xc7 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x4c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x208 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .debug_macro 0x0000000000000000 0xd44 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x14e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x25a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x12 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x504 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x22c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x61 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x198 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .debug_macro 0x0000000000000000 0xd6 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x12e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x108 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x35 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x2d4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .debug_macro 0x0000000000000000 0xa7c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x59 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x14d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .text 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .data 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .bss 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .text.CRC_Handle_8 + 0x0000000000000000 0x72 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .text.CRC_Handle_16 + 0x0000000000000000 0x2e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .text.HAL_CRC_MspInit + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .text.HAL_CRC_MspDeInit + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .text.HAL_CRC_DeInit + 0x0000000000000000 0x32 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .text.HAL_CRC_Accumulate + 0x0000000000000000 0x40 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .text.HAL_CRC_Calculate + 0x0000000000000000 0x48 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .text.HAL_CRC_GetState + 0x0000000000000000 0x4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .debug_macro 0x0000000000000000 0xaae ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .debug_macro 0x0000000000000000 0x2bf ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .debug_macro 0x0000000000000000 0x3b ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .debug_macro 0x0000000000000000 0x8e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .debug_macro 0x0000000000000000 0x51 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .debug_macro 0x0000000000000000 0x103 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .debug_macro 0x0000000000000000 0x6a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .debug_macro 0x0000000000000000 0x1df ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .debug_macro 0x0000000000000000 0x1c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .debug_macro 0x0000000000000000 0xd9 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .debug_macro 0x0000000000000000 0x12cd ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .debug_macro 0x0000000000000000 0x11f ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .debug_macro 0x0000000000000000 0x19 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .debug_macro 0x0000000000000000 0x1920a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .debug_macro 0x0000000000000000 0x6d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .debug_macro 0x0000000000000000 0x3749 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .debug_macro 0x0000000000000000 0x174 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .debug_macro 0x0000000000000000 0x63 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .debug_macro 0x0000000000000000 0x18ad ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .debug_macro 0x0000000000000000 0x6c4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .debug_macro 0x0000000000000000 0x185 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .debug_macro 0x0000000000000000 0x115 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .debug_macro 0x0000000000000000 0x1fd ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .debug_macro 0x0000000000000000 0x24f ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .debug_macro 0x0000000000000000 0x41 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .debug_macro 0x0000000000000000 0x58 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .debug_macro 0x0000000000000000 0x236 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .debug_macro 0x0000000000000000 0xc7 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .debug_macro 0x0000000000000000 0x4c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .debug_macro 0x0000000000000000 0x208 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .debug_macro 0x0000000000000000 0xd44 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .debug_macro 0x0000000000000000 0x14e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .debug_macro 0x0000000000000000 0x25a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .debug_macro 0x0000000000000000 0x12 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .debug_macro 0x0000000000000000 0x504 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .debug_macro 0x0000000000000000 0x22c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .debug_macro 0x0000000000000000 0x61 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .debug_macro 0x0000000000000000 0x198 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .debug_macro 0x0000000000000000 0xd6 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .debug_macro 0x0000000000000000 0x12e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .debug_macro 0x0000000000000000 0x108 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .debug_macro 0x0000000000000000 0x35 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .debug_macro 0x0000000000000000 0x2d4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .debug_macro 0x0000000000000000 0xa7c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .debug_macro 0x0000000000000000 0x59 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .debug_macro 0x0000000000000000 0x14d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .text 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .data 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .bss 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .text.HAL_CRCEx_Input_Data_Reverse + 0x0000000000000000 0x18 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .text.HAL_CRCEx_Output_Data_Reverse + 0x0000000000000000 0x18 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .debug_macro 0x0000000000000000 0xaae ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .debug_macro 0x0000000000000000 0x2bf ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .debug_macro 0x0000000000000000 0x3b ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .debug_macro 0x0000000000000000 0x8e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .debug_macro 0x0000000000000000 0x51 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .debug_macro 0x0000000000000000 0x103 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .debug_macro 0x0000000000000000 0x6a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .debug_macro 0x0000000000000000 0x1df ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .debug_macro 0x0000000000000000 0x1c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .debug_macro 0x0000000000000000 0xd9 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .debug_macro 0x0000000000000000 0x12cd ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .debug_macro 0x0000000000000000 0x11f ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .debug_macro 0x0000000000000000 0x19 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .debug_macro 0x0000000000000000 0x1920a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .debug_macro 0x0000000000000000 0x6d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .debug_macro 0x0000000000000000 0x3749 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .debug_macro 0x0000000000000000 0x174 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .debug_macro 0x0000000000000000 0x63 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .debug_macro 0x0000000000000000 0x18ad ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .debug_macro 0x0000000000000000 0x6c4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .debug_macro 0x0000000000000000 0x185 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .debug_macro 0x0000000000000000 0x115 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .debug_macro 0x0000000000000000 0x1fd ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .debug_macro 0x0000000000000000 0x24f ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .debug_macro 0x0000000000000000 0x41 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .debug_macro 0x0000000000000000 0x58 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .debug_macro 0x0000000000000000 0x236 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .debug_macro 0x0000000000000000 0xc7 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .debug_macro 0x0000000000000000 0x4c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .debug_macro 0x0000000000000000 0x208 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .debug_macro 0x0000000000000000 0xd44 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .debug_macro 0x0000000000000000 0x14e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .debug_macro 0x0000000000000000 0x25a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .debug_macro 0x0000000000000000 0x12 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .debug_macro 0x0000000000000000 0x504 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .debug_macro 0x0000000000000000 0x22c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .debug_macro 0x0000000000000000 0x61 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .debug_macro 0x0000000000000000 0x198 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .debug_macro 0x0000000000000000 0xd6 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .debug_macro 0x0000000000000000 0x12e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .debug_macro 0x0000000000000000 0x108 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .debug_macro 0x0000000000000000 0x35 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .debug_macro 0x0000000000000000 0x2d4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .debug_macro 0x0000000000000000 0xa7c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .debug_macro 0x0000000000000000 0x59 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .debug_macro 0x0000000000000000 0x14d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .text 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .data 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .bss 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .text.DMA_CalcBaseAndBitshift + 0x0000000000000000 0x2c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .text.HAL_DMA_Init + 0x0000000000000000 0xfc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .text.HAL_DMA_DeInit + 0x0000000000000000 0x54 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .text.HAL_DMA_Start + 0x0000000000000000 0x54 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .text.HAL_DMA_Start_IT + 0x0000000000000000 0x7a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .text.HAL_DMA_Abort_IT + 0x0000000000000000 0x24 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .text.HAL_DMA_PollForTransfer + 0x0000000000000000 0x10e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .text.HAL_DMA_IRQHandler + 0x0000000000000000 0x17c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .text.HAL_DMA_RegisterCallback + 0x0000000000000000 0x4e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .text.HAL_DMA_UnRegisterCallback + 0x0000000000000000 0x62 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .text.HAL_DMA_GetState + 0x0000000000000000 0x6 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .text.HAL_DMA_GetError + 0x0000000000000000 0x4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .rodata.flagBitshiftOffset.0 + 0x0000000000000000 0x8 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .debug_macro 0x0000000000000000 0xaae ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .debug_macro 0x0000000000000000 0x2bf ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .debug_macro 0x0000000000000000 0x3b ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .debug_macro 0x0000000000000000 0x8e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .debug_macro 0x0000000000000000 0x51 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .debug_macro 0x0000000000000000 0x103 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .debug_macro 0x0000000000000000 0x6a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .debug_macro 0x0000000000000000 0x1df ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .debug_macro 0x0000000000000000 0x1c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .debug_macro 0x0000000000000000 0xd9 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .debug_macro 0x0000000000000000 0x12cd ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .debug_macro 0x0000000000000000 0x11f ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .debug_macro 0x0000000000000000 0x19 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .debug_macro 0x0000000000000000 0x1920a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .debug_macro 0x0000000000000000 0x6d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .debug_macro 0x0000000000000000 0x3749 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .debug_macro 0x0000000000000000 0x174 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .debug_macro 0x0000000000000000 0x63 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .debug_macro 0x0000000000000000 0x18ad ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .debug_macro 0x0000000000000000 0x6c4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .debug_macro 0x0000000000000000 0x185 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .debug_macro 0x0000000000000000 0x115 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .debug_macro 0x0000000000000000 0x1fd ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .debug_macro 0x0000000000000000 0x24f ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .debug_macro 0x0000000000000000 0x41 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .debug_macro 0x0000000000000000 0x58 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .debug_macro 0x0000000000000000 0x236 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .debug_macro 0x0000000000000000 0xc7 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .debug_macro 0x0000000000000000 0x4c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .debug_macro 0x0000000000000000 0x208 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .debug_macro 0x0000000000000000 0xd44 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .debug_macro 0x0000000000000000 0x14e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .debug_macro 0x0000000000000000 0x25a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .debug_macro 0x0000000000000000 0x12 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .debug_macro 0x0000000000000000 0x504 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .debug_macro 0x0000000000000000 0x22c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .debug_macro 0x0000000000000000 0x61 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .debug_macro 0x0000000000000000 0x198 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .debug_macro 0x0000000000000000 0xd6 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .debug_macro 0x0000000000000000 0x12e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .debug_macro 0x0000000000000000 0x108 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .debug_macro 0x0000000000000000 0x35 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .debug_macro 0x0000000000000000 0x2d4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .debug_macro 0x0000000000000000 0xa7c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .debug_macro 0x0000000000000000 0x59 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .debug_macro 0x0000000000000000 0x14d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .text 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .data 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .bss 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .text.DMA2D_SetConfig + 0x0000000000000000 0x84 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .text.HAL_DMA2D_MspInit + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .text.HAL_DMA2D_MspDeInit + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .text.HAL_DMA2D_Start + 0x0000000000000000 0x34 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .text.HAL_DMA2D_Start_IT + 0x0000000000000000 0x3c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .text.HAL_DMA2D_BlendingStart + 0x0000000000000000 0x3a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .text.HAL_DMA2D_BlendingStart_IT + 0x0000000000000000 0x42 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .text.HAL_DMA2D_Abort + 0x0000000000000000 0x56 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .text.HAL_DMA2D_Suspend + 0x0000000000000000 0x5e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .text.HAL_DMA2D_Resume + 0x0000000000000000 0x1e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .text.HAL_DMA2D_EnableCLUT + 0x0000000000000000 0x34 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .text.HAL_DMA2D_CLUTStartLoad + 0x0000000000000000 0x58 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .text.HAL_DMA2D_CLUTStartLoad_IT + 0x0000000000000000 0x68 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .text.HAL_DMA2D_CLUTLoad + 0x0000000000000000 0x64 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .text.HAL_DMA2D_CLUTLoad_IT + 0x0000000000000000 0x74 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .text.HAL_DMA2D_CLUTLoading_Abort + 0x0000000000000000 0x5a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .text.HAL_DMA2D_DeInit + 0x0000000000000000 0x68 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .text.HAL_DMA2D_CLUTLoading_Suspend + 0x0000000000000000 0x82 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .text.HAL_DMA2D_CLUTLoading_Resume + 0x0000000000000000 0x2a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .text.HAL_DMA2D_PollForTransfer + 0x0000000000000000 0xf8 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .text.HAL_DMA2D_ConfigCLUT + 0x0000000000000000 0x5c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .text.HAL_DMA2D_ProgramLineEvent + 0x0000000000000000 0x36 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .text.HAL_DMA2D_EnableDeadTime + 0x0000000000000000 0x2a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .text.HAL_DMA2D_DisableDeadTime + 0x0000000000000000 0x2a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .text.HAL_DMA2D_ConfigDeadTime + 0x0000000000000000 0x2e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .text.HAL_DMA2D_GetState + 0x0000000000000000 0x6 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .text.HAL_DMA2D_GetError + 0x0000000000000000 0x4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .debug_macro 0x0000000000000000 0xaae ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .debug_macro 0x0000000000000000 0x2bf ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .debug_macro 0x0000000000000000 0x3b ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .debug_macro 0x0000000000000000 0x8e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .debug_macro 0x0000000000000000 0x51 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .debug_macro 0x0000000000000000 0x103 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .debug_macro 0x0000000000000000 0x6a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .debug_macro 0x0000000000000000 0x1df ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .debug_macro 0x0000000000000000 0x1c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .debug_macro 0x0000000000000000 0xd9 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .debug_macro 0x0000000000000000 0x12cd ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .debug_macro 0x0000000000000000 0x11f ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .debug_macro 0x0000000000000000 0x19 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .debug_macro 0x0000000000000000 0x1920a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .debug_macro 0x0000000000000000 0x6d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .debug_macro 0x0000000000000000 0x3749 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .debug_macro 0x0000000000000000 0x174 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .debug_macro 0x0000000000000000 0x63 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .debug_macro 0x0000000000000000 0x18ad ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .debug_macro 0x0000000000000000 0x6c4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .debug_macro 0x0000000000000000 0x185 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .debug_macro 0x0000000000000000 0x115 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .debug_macro 0x0000000000000000 0x1fd ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .debug_macro 0x0000000000000000 0x24f ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .debug_macro 0x0000000000000000 0x41 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .debug_macro 0x0000000000000000 0x58 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .debug_macro 0x0000000000000000 0x236 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .debug_macro 0x0000000000000000 0xc7 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .debug_macro 0x0000000000000000 0x4c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .debug_macro 0x0000000000000000 0x208 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .debug_macro 0x0000000000000000 0xd44 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .debug_macro 0x0000000000000000 0x14e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .debug_macro 0x0000000000000000 0x25a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .debug_macro 0x0000000000000000 0x12 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .debug_macro 0x0000000000000000 0x504 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .debug_macro 0x0000000000000000 0x22c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .debug_macro 0x0000000000000000 0x61 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .debug_macro 0x0000000000000000 0x198 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .debug_macro 0x0000000000000000 0xd6 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .debug_macro 0x0000000000000000 0x12e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .debug_macro 0x0000000000000000 0x108 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .debug_macro 0x0000000000000000 0x35 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .debug_macro 0x0000000000000000 0x2d4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .debug_macro 0x0000000000000000 0xa7c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .debug_macro 0x0000000000000000 0x59 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .debug_macro 0x0000000000000000 0x14d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .text 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .data 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .bss 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .text.HAL_DMAEx_MultiBufferStart + 0x0000000000000000 0x5c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .text.HAL_DMAEx_MultiBufferStart_IT + 0x0000000000000000 0xa9c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .text.HAL_DMAEx_ChangeMemory + 0x0000000000000000 0xe ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .debug_info 0x0000000000000000 0x585 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .debug_abbrev 0x0000000000000000 0x1b9 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .debug_loclists + 0x0000000000000000 0x335 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .debug_aranges + 0x0000000000000000 0x30 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .debug_rnglists + 0x0000000000000000 0x40 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x235 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0xaae ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x2bf ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x3b ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x8e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x51 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x103 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x6a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x1df ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x1c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0xd9 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x12cd ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x11f ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x19 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x1920a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x6d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x3749 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x174 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x63 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x18ad ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x6c4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x185 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x115 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x1fd ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x24f ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x41 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x58 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x236 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0xc7 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x4c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x208 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0xd44 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x14e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x25a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x12 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x504 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x22c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x61 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x198 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0xd6 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x12e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x108 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x35 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x2d4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0xa7c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x59 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x14d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .debug_line 0x0000000000000000 0x10f8 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .debug_str 0x0000000000000000 0xf100e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .comment 0x0000000000000000 0x44 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .debug_frame 0x0000000000000000 0x58 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .ARM.attributes + 0x0000000000000000 0x34 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .text 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .data 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .bss 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .debug_info 0x0000000000000000 0x70 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .debug_abbrev 0x0000000000000000 0x28 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .debug_aranges + 0x0000000000000000 0x18 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .debug_macro 0x0000000000000000 0x236 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .debug_macro 0x0000000000000000 0xaae ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .debug_macro 0x0000000000000000 0x2bf ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .debug_macro 0x0000000000000000 0x3b ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .debug_macro 0x0000000000000000 0x8e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .debug_macro 0x0000000000000000 0x51 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .debug_macro 0x0000000000000000 0x103 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .debug_macro 0x0000000000000000 0x6a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .debug_macro 0x0000000000000000 0x1df ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .debug_macro 0x0000000000000000 0x1c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .debug_macro 0x0000000000000000 0xd9 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .debug_macro 0x0000000000000000 0x12cd ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .debug_macro 0x0000000000000000 0x11f ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .debug_macro 0x0000000000000000 0x19 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .debug_macro 0x0000000000000000 0x1920a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .debug_macro 0x0000000000000000 0x6d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .debug_macro 0x0000000000000000 0x3749 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .debug_macro 0x0000000000000000 0x174 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .debug_macro 0x0000000000000000 0x63 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .debug_macro 0x0000000000000000 0x18ad ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .debug_macro 0x0000000000000000 0x6c4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .debug_macro 0x0000000000000000 0x185 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .debug_macro 0x0000000000000000 0x115 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .debug_macro 0x0000000000000000 0x1fd ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .debug_macro 0x0000000000000000 0x24f ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .debug_macro 0x0000000000000000 0x41 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .debug_macro 0x0000000000000000 0x58 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .debug_macro 0x0000000000000000 0x236 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .debug_macro 0x0000000000000000 0xc7 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .debug_macro 0x0000000000000000 0x4c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .debug_macro 0x0000000000000000 0x208 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .debug_macro 0x0000000000000000 0xd44 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .debug_macro 0x0000000000000000 0x14e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .debug_macro 0x0000000000000000 0x25a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .debug_macro 0x0000000000000000 0x12 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .debug_macro 0x0000000000000000 0x504 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .debug_macro 0x0000000000000000 0x22c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .debug_macro 0x0000000000000000 0x61 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .debug_macro 0x0000000000000000 0x198 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .debug_macro 0x0000000000000000 0xd6 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .debug_macro 0x0000000000000000 0x12e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .debug_macro 0x0000000000000000 0x108 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .debug_macro 0x0000000000000000 0x35 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .debug_macro 0x0000000000000000 0x2d4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .debug_macro 0x0000000000000000 0xa7c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .debug_macro 0x0000000000000000 0x59 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .debug_macro 0x0000000000000000 0x14d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .debug_line 0x0000000000000000 0x86f ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .debug_str 0x0000000000000000 0xf0c75 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .comment 0x0000000000000000 0x44 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .ARM.attributes + 0x0000000000000000 0x34 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .text 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .data 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .bss 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .text.HAL_ETH_RxLinkCallback + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .text.HAL_ETH_RxAllocateCallback + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .text.HAL_ETH_TxFreeCallback + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .text.HAL_ETH_MspInit + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .text.HAL_ETH_MspDeInit + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .text.HAL_ETH_DeInit + 0x0000000000000000 0x16 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .text.HAL_ETH_Start + 0x0000000000000000 0x6c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .text.HAL_ETH_Stop + 0x0000000000000000 0x64 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .text.HAL_ETH_Transmit + 0x0000000000000000 0xb0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .text.HAL_ETH_RegisterRxAllocateCallback + 0x0000000000000000 0xe ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .text.HAL_ETH_UnRegisterRxAllocateCallback + 0x0000000000000000 0x10 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .text.HAL_ETH_RegisterRxLinkCallback + 0x0000000000000000 0xe ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .text.HAL_ETH_UnRegisterRxLinkCallback + 0x0000000000000000 0x10 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .text.HAL_ETH_GetRxDataErrorCode + 0x0000000000000000 0x14 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .text.HAL_ETH_RegisterTxFreeCallback + 0x0000000000000000 0xe ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .text.HAL_ETH_UnRegisterTxFreeCallback + 0x0000000000000000 0x10 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .text.HAL_ETH_TxCpltCallback + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .text.HAL_ETH_RxCpltCallback + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .text.HAL_ETH_ErrorCallback + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .text.HAL_ETH_GetDMAConfig + 0x0000000000000000 0xae ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .text.HAL_ETH_SetDMAConfig + 0x0000000000000000 0x18 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .text.HAL_ETH_SetMACFilterConfig + 0x0000000000000000 0x70 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .text.HAL_ETH_GetMACFilterConfig + 0x0000000000000000 0x66 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .text.HAL_ETH_SetSourceMACAddrMatch + 0x0000000000000000 0x24 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .text.HAL_ETH_SetHashTable + 0x0000000000000000 0x32 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .text.HAL_ETH_SetRxVLANIdentifier + 0x0000000000000000 0x2e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .text.HAL_ETH_EnterPowerDownMode + 0x0000000000000000 0x28 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .text.HAL_ETH_ExitPowerDownMode + 0x0000000000000000 0x44 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .text.HAL_ETH_SetWakeUpFilter + 0x0000000000000000 0x24 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .text.HAL_ETH_GetState + 0x0000000000000000 0x6 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .text.HAL_ETH_GetError + 0x0000000000000000 0x6 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .text.HAL_ETH_GetMACError + 0x0000000000000000 0x6 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .text.HAL_ETH_GetMACWakeUpSource + 0x0000000000000000 0x6 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .debug_macro 0x0000000000000000 0xaae ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .debug_macro 0x0000000000000000 0x2bf ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .debug_macro 0x0000000000000000 0x3b ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .debug_macro 0x0000000000000000 0x8e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .debug_macro 0x0000000000000000 0x51 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .debug_macro 0x0000000000000000 0x103 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .debug_macro 0x0000000000000000 0x6a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .debug_macro 0x0000000000000000 0x1df ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .debug_macro 0x0000000000000000 0x1c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .debug_macro 0x0000000000000000 0xd9 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .debug_macro 0x0000000000000000 0x12cd ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .debug_macro 0x0000000000000000 0x11f ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .debug_macro 0x0000000000000000 0x19 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .debug_macro 0x0000000000000000 0x1920a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .debug_macro 0x0000000000000000 0x6d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .debug_macro 0x0000000000000000 0x3749 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .debug_macro 0x0000000000000000 0x174 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .debug_macro 0x0000000000000000 0x63 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .debug_macro 0x0000000000000000 0x18ad ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .debug_macro 0x0000000000000000 0x6c4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .debug_macro 0x0000000000000000 0x185 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .debug_macro 0x0000000000000000 0x115 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .debug_macro 0x0000000000000000 0x1fd ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .debug_macro 0x0000000000000000 0x24f ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .debug_macro 0x0000000000000000 0x41 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .debug_macro 0x0000000000000000 0x58 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .debug_macro 0x0000000000000000 0x236 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .debug_macro 0x0000000000000000 0xc7 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .debug_macro 0x0000000000000000 0x4c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .debug_macro 0x0000000000000000 0x208 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .debug_macro 0x0000000000000000 0xd44 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .debug_macro 0x0000000000000000 0x14e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .debug_macro 0x0000000000000000 0x25a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .debug_macro 0x0000000000000000 0x12 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .debug_macro 0x0000000000000000 0x504 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .debug_macro 0x0000000000000000 0x22c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .debug_macro 0x0000000000000000 0x61 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .debug_macro 0x0000000000000000 0x198 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .debug_macro 0x0000000000000000 0xd6 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .debug_macro 0x0000000000000000 0x12e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .debug_macro 0x0000000000000000 0x108 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .debug_macro 0x0000000000000000 0x35 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .debug_macro 0x0000000000000000 0x2d4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .debug_macro 0x0000000000000000 0xa7c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .debug_macro 0x0000000000000000 0x59 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .debug_macro 0x0000000000000000 0x14d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .text 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .data 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .bss 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .text.HAL_EXTI_SetConfigLine + 0x0000000000000000 0xa0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .text.HAL_EXTI_GetConfigLine + 0x0000000000000000 0x8c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .text.HAL_EXTI_ClearConfigLine + 0x0000000000000000 0x6c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .text.HAL_EXTI_RegisterCallback + 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .text.HAL_EXTI_GetHandle + 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .text.HAL_EXTI_IRQHandler + 0x0000000000000000 0x20 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .text.HAL_EXTI_GetPending + 0x0000000000000000 0x1c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .text.HAL_EXTI_ClearPending + 0x0000000000000000 0x14 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .text.HAL_EXTI_GenerateSWI + 0x0000000000000000 0x14 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .debug_info 0x0000000000000000 0x570 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .debug_abbrev 0x0000000000000000 0x1f3 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .debug_loclists + 0x0000000000000000 0x355 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .debug_aranges + 0x0000000000000000 0x60 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .debug_rnglists + 0x0000000000000000 0x45 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .debug_macro 0x0000000000000000 0x235 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .debug_macro 0x0000000000000000 0xaae ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .debug_macro 0x0000000000000000 0x2bf ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .debug_macro 0x0000000000000000 0x3b ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .debug_macro 0x0000000000000000 0x8e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .debug_macro 0x0000000000000000 0x51 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .debug_macro 0x0000000000000000 0x103 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .debug_macro 0x0000000000000000 0x6a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .debug_macro 0x0000000000000000 0x1df ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .debug_macro 0x0000000000000000 0x1c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .debug_macro 0x0000000000000000 0xd9 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .debug_macro 0x0000000000000000 0x12cd ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .debug_macro 0x0000000000000000 0x11f ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .debug_macro 0x0000000000000000 0x19 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .debug_macro 0x0000000000000000 0x1920a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .debug_macro 0x0000000000000000 0x6d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .debug_macro 0x0000000000000000 0x3749 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .debug_macro 0x0000000000000000 0x174 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .debug_macro 0x0000000000000000 0x63 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .debug_macro 0x0000000000000000 0x18ad ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .debug_macro 0x0000000000000000 0x6c4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .debug_macro 0x0000000000000000 0x185 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .debug_macro 0x0000000000000000 0x115 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .debug_macro 0x0000000000000000 0x1fd ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .debug_macro 0x0000000000000000 0x24f ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .debug_macro 0x0000000000000000 0x41 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .debug_macro 0x0000000000000000 0x58 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .debug_macro 0x0000000000000000 0x236 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .debug_macro 0x0000000000000000 0xc7 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .debug_macro 0x0000000000000000 0x4c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .debug_macro 0x0000000000000000 0x208 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .debug_macro 0x0000000000000000 0xd44 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .debug_macro 0x0000000000000000 0x14e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .debug_macro 0x0000000000000000 0x25a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .debug_macro 0x0000000000000000 0x12 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .debug_macro 0x0000000000000000 0x504 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .debug_macro 0x0000000000000000 0x22c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .debug_macro 0x0000000000000000 0x61 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .debug_macro 0x0000000000000000 0x198 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .debug_macro 0x0000000000000000 0xd6 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .debug_macro 0x0000000000000000 0x12e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .debug_macro 0x0000000000000000 0x108 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .debug_macro 0x0000000000000000 0x35 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .debug_macro 0x0000000000000000 0x2d4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .debug_macro 0x0000000000000000 0xa7c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .debug_macro 0x0000000000000000 0x59 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .debug_macro 0x0000000000000000 0x14d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .debug_line 0x0000000000000000 0xc6b ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .debug_str 0x0000000000000000 0xf0ea6 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .comment 0x0000000000000000 0x44 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .debug_frame 0x0000000000000000 0xc4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .ARM.attributes + 0x0000000000000000 0x34 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .text 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .data 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .bss 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .text.FLASH_Program_DoubleWord + 0x0000000000000000 0x30 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .text.FLASH_Program_Word + 0x0000000000000000 0x28 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .text.FLASH_Program_HalfWord + 0x0000000000000000 0x28 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .text.FLASH_Program_Byte + 0x0000000000000000 0x24 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .text.FLASH_SetErrorCode + 0x0000000000000000 0x64 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .text.HAL_FLASH_Program_IT + 0x0000000000000000 0x68 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .text.HAL_FLASH_EndOfOperationCallback + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .text.HAL_FLASH_OperationErrorCallback + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .text.HAL_FLASH_IRQHandler + 0x0000000000000000 0xe4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .text.HAL_FLASH_Unlock + 0x0000000000000000 0x24 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .text.HAL_FLASH_Lock + 0x0000000000000000 0x14 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .text.HAL_FLASH_OB_Unlock + 0x0000000000000000 0x24 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .text.HAL_FLASH_OB_Lock + 0x0000000000000000 0x14 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .text.HAL_FLASH_GetError + 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .text.FLASH_WaitForLastOperation + 0x0000000000000000 0x58 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .text.HAL_FLASH_Program + 0x0000000000000000 0x7c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .text.HAL_FLASH_OB_Launch + 0x0000000000000000 0x18 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .bss.pFlash 0x0000000000000000 0x1c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .debug_info 0x0000000000000000 0x746 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .debug_abbrev 0x0000000000000000 0x2df ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .debug_loclists + 0x0000000000000000 0x1dd ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .debug_aranges + 0x0000000000000000 0x98 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .debug_rnglists + 0x0000000000000000 0x6e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .debug_macro 0x0000000000000000 0x241 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .debug_macro 0x0000000000000000 0xaae ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .debug_macro 0x0000000000000000 0x2bf ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .debug_macro 0x0000000000000000 0x3b ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .debug_macro 0x0000000000000000 0x8e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .debug_macro 0x0000000000000000 0x51 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .debug_macro 0x0000000000000000 0x103 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .debug_macro 0x0000000000000000 0x6a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .debug_macro 0x0000000000000000 0x1df ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .debug_macro 0x0000000000000000 0x1c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .debug_macro 0x0000000000000000 0xd9 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .debug_macro 0x0000000000000000 0x12cd ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .debug_macro 0x0000000000000000 0x11f ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .debug_macro 0x0000000000000000 0x19 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .debug_macro 0x0000000000000000 0x1920a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .debug_macro 0x0000000000000000 0x6d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .debug_macro 0x0000000000000000 0x3749 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .debug_macro 0x0000000000000000 0x174 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .debug_macro 0x0000000000000000 0x63 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .debug_macro 0x0000000000000000 0x18ad ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .debug_macro 0x0000000000000000 0x6c4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .debug_macro 0x0000000000000000 0x185 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .debug_macro 0x0000000000000000 0x115 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .debug_macro 0x0000000000000000 0x1fd ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .debug_macro 0x0000000000000000 0x24f ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .debug_macro 0x0000000000000000 0x41 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .debug_macro 0x0000000000000000 0x58 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .debug_macro 0x0000000000000000 0x236 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .debug_macro 0x0000000000000000 0xc7 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .debug_macro 0x0000000000000000 0x4c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .debug_macro 0x0000000000000000 0x208 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .debug_macro 0x0000000000000000 0xd44 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .debug_macro 0x0000000000000000 0x14e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .debug_macro 0x0000000000000000 0x25a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .debug_macro 0x0000000000000000 0x12 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .debug_macro 0x0000000000000000 0x504 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .debug_macro 0x0000000000000000 0x22c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .debug_macro 0x0000000000000000 0x61 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .debug_macro 0x0000000000000000 0x198 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .debug_macro 0x0000000000000000 0xd6 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .debug_macro 0x0000000000000000 0x12e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .debug_macro 0x0000000000000000 0x108 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .debug_macro 0x0000000000000000 0x35 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .debug_macro 0x0000000000000000 0x2d4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .debug_macro 0x0000000000000000 0xa7c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .debug_macro 0x0000000000000000 0x59 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .debug_macro 0x0000000000000000 0x14d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .debug_line 0x0000000000000000 0xe43 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .debug_str 0x0000000000000000 0xf1043 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .comment 0x0000000000000000 0x44 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .debug_frame 0x0000000000000000 0x160 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .ARM.attributes + 0x0000000000000000 0x34 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .text 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .data 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .bss 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .text.FLASH_MassErase + 0x0000000000000000 0x28 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .text.HAL_FLASHEx_OBProgram + 0x0000000000000000 0xf0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .text.HAL_FLASHEx_OBGetConfig + 0x0000000000000000 0x50 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .text.FLASH_Erase_Sector + 0x0000000000000000 0x40 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .text.HAL_FLASHEx_Erase + 0x0000000000000000 0x9c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .text.HAL_FLASHEx_Erase_IT + 0x0000000000000000 0x58 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .debug_info 0x0000000000000000 0xa26 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .debug_abbrev 0x0000000000000000 0x2f1 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .debug_loclists + 0x0000000000000000 0x3c2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .debug_aranges + 0x0000000000000000 0x48 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .debug_rnglists + 0x0000000000000000 0x72 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x241 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0xaae ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x2bf ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x3b ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x8e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x51 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x103 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x6a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x1df ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x1c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0xd9 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x12cd ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x11f ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x19 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x1920a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x6d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x3749 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x174 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x63 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x18ad ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x6c4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x185 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x115 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x1fd ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x24f ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x41 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x58 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x236 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0xc7 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x4c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x208 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0xd44 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x14e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x25a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x12 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x504 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x22c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x61 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x198 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0xd6 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x12e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x108 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x35 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x2d4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0xa7c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x59 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x14d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .debug_line 0x0000000000000000 0xda5 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .debug_str 0x0000000000000000 0xf10e0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .comment 0x0000000000000000 0x44 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .debug_frame 0x0000000000000000 0x98 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .ARM.attributes + 0x0000000000000000 0x34 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .text 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .data 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .bss 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .text.HAL_GPIO_LockPin + 0x0000000000000000 0x2a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .text.HAL_GPIO_EXTI_Callback + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .text.HAL_GPIO_EXTI_IRQHandler + 0x0000000000000000 0x18 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .debug_macro 0x0000000000000000 0xaae ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x2bf ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x3b ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x8e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x51 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x103 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x6a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x1df ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x1c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .debug_macro 0x0000000000000000 0xd9 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x12cd ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x11f ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x19 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x1920a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x6d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x3749 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x174 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x63 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x18ad ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x6c4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x185 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x115 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x1fd ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x24f ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x41 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x58 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x236 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .debug_macro 0x0000000000000000 0xc7 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x4c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x208 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .debug_macro 0x0000000000000000 0xd44 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x14e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x25a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x12 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x504 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x22c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x61 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x198 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .debug_macro 0x0000000000000000 0xd6 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x12e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x108 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x35 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x2d4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .debug_macro 0x0000000000000000 0xa7c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x59 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x14d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .data 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .bss 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.I2C_Enable_IRQ + 0x0000000000000000 0x74 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.I2C_Disable_IRQ + 0x0000000000000000 0x42 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.I2C_WaitOnRXNEFlagUntilTimeout + 0x0000000000000000 0x8c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.I2C_ConvertOtherXferOptions + 0x0000000000000000 0x1a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.HAL_I2C_MspInit + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.HAL_I2C_MspDeInit + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.HAL_I2C_Master_Transmit + 0x0000000000000000 0x12c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.HAL_I2C_Master_Receive + 0x0000000000000000 0x130 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.HAL_I2C_Slave_Transmit + 0x0000000000000000 0x14c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.HAL_I2C_Slave_Receive + 0x0000000000000000 0x140 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.HAL_I2C_Master_Transmit_IT + 0x0000000000000000 0x84 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.HAL_I2C_Master_Receive_IT + 0x0000000000000000 0x84 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.HAL_I2C_Slave_Transmit_IT + 0x0000000000000000 0x58 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.HAL_I2C_Slave_Receive_IT + 0x0000000000000000 0x58 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.HAL_I2C_Master_Transmit_DMA + 0x0000000000000000 0x12c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.HAL_I2C_Master_Receive_DMA + 0x0000000000000000 0x12c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.HAL_I2C_Slave_Transmit_DMA + 0x0000000000000000 0xd0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.HAL_I2C_Slave_Receive_DMA + 0x0000000000000000 0xd4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.HAL_I2C_Mem_Write_IT + 0x0000000000000000 0xa8 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.HAL_I2C_Mem_Read_IT + 0x0000000000000000 0xa4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.HAL_I2C_Mem_Write_DMA + 0x0000000000000000 0x11c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.HAL_I2C_Mem_Read_DMA + 0x0000000000000000 0x11c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.HAL_I2C_IsDeviceReady + 0x0000000000000000 0x13a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.HAL_I2C_Master_Seq_Transmit_IT + 0x0000000000000000 0xa4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.HAL_I2C_Master_Seq_Transmit_DMA + 0x0000000000000000 0x154 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.HAL_I2C_Master_Seq_Receive_IT + 0x0000000000000000 0xa4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.HAL_I2C_Master_Seq_Receive_DMA + 0x0000000000000000 0x154 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.HAL_I2C_Slave_Seq_Transmit_IT + 0x0000000000000000 0xc4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.HAL_I2C_Slave_Seq_Transmit_DMA + 0x0000000000000000 0x16c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.HAL_I2C_Slave_Seq_Receive_IT + 0x0000000000000000 0xc0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.HAL_I2C_Slave_Seq_Receive_DMA + 0x0000000000000000 0x168 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.HAL_I2C_EnableListen_IT + 0x0000000000000000 0x28 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.HAL_I2C_DisableListen_IT + 0x0000000000000000 0x38 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.HAL_I2C_Master_Abort_IT + 0x0000000000000000 0x78 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.HAL_I2C_EV_IRQHandler + 0x0000000000000000 0xe ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.HAL_I2C_MasterTxCpltCallback + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.HAL_I2C_MasterRxCpltCallback + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.I2C_ITMasterSeqCplt + 0x0000000000000000 0x44 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.HAL_I2C_SlaveTxCpltCallback + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.HAL_I2C_SlaveRxCpltCallback + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.I2C_ITSlaveSeqCplt + 0x0000000000000000 0x6c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.I2C_DMASlaveTransmitCplt + 0x0000000000000000 0x1a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.I2C_DMASlaveReceiveCplt + 0x0000000000000000 0x22 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.HAL_I2C_AddrCallback + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.I2C_ITAddrCplt.constprop.0 + 0x0000000000000000 0x88 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.HAL_I2C_ListenCpltCallback + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.I2C_ITListenCplt + 0x0000000000000000 0x60 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.HAL_I2C_MemTxCpltCallback + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.HAL_I2C_MemRxCpltCallback + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.HAL_I2C_ErrorCallback + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.HAL_I2C_AbortCpltCallback + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.I2C_TreatErrorCallback + 0x0000000000000000 0x2c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.I2C_ITError + 0x0000000000000000 0xe4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.I2C_ITMasterCplt + 0x0000000000000000 0xee ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.I2C_Master_ISR_IT + 0x0000000000000000 0x122 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.I2C_Master_ISR_DMA + 0x0000000000000000 0x104 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.I2C_DMAError + 0x0000000000000000 0x42 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.I2C_DMAMasterTransmitCplt + 0x0000000000000000 0x54 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.I2C_DMAMasterReceiveCplt + 0x0000000000000000 0x54 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.I2C_Mem_ISR_IT + 0x0000000000000000 0x10c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.I2C_Mem_ISR_DMA + 0x0000000000000000 0x124 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.HAL_I2C_ER_IRQHandler + 0x0000000000000000 0x60 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.I2C_ITSlaveCplt.constprop.0 + 0x0000000000000000 0x12c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.I2C_Slave_ISR_DMA + 0x0000000000000000 0xf8 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.I2C_Slave_ISR_IT + 0x0000000000000000 0x112 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.I2C_DMAAbort + 0x0000000000000000 0x16 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.HAL_I2C_GetState + 0x0000000000000000 0x6 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.HAL_I2C_GetMode + 0x0000000000000000 0x6 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.HAL_I2C_GetError + 0x0000000000000000 0x4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .debug_macro 0x0000000000000000 0xaae ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x2bf ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x3b ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x8e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x51 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x103 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x6a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x1df ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x1c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .debug_macro 0x0000000000000000 0xd9 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x12cd ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x11f ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x19 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x1920a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x6d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x3749 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x174 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x63 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x18ad ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x6c4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x185 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x115 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x1fd ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x24f ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x41 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x58 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x236 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .debug_macro 0x0000000000000000 0xc7 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x4c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x208 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .debug_macro 0x0000000000000000 0xd44 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x14e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x25a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x12 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x504 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x22c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x61 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x198 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .debug_macro 0x0000000000000000 0xd6 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x12e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x108 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x35 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x2d4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .debug_macro 0x0000000000000000 0xa7c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x59 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x14d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .text 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .data 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .bss 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .text.HAL_I2CEx_EnableFastModePlus + 0x0000000000000000 0x2c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .text.HAL_I2CEx_DisableFastModePlus + 0x0000000000000000 0x2c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0xaae ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x2bf ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x3b ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x8e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x51 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x103 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x6a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x1df ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x1c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0xd9 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x12cd ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x11f ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x19 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x1920a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x6d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x3749 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x174 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x63 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x18ad ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x6c4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x185 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x115 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x1fd ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x24f ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x41 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x58 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x236 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0xc7 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x4c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x208 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0xd44 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x14e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x25a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x12 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x504 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x22c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x61 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x198 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0xd6 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x12e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x108 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x35 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x2d4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0xa7c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x59 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x14d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .text 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .data 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .bss 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .text.HAL_LTDC_MspInit + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .text.HAL_LTDC_MspDeInit + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .text.HAL_LTDC_DeInit + 0x0000000000000000 0x64 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .text.HAL_LTDC_LineEventCallback + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .text.HAL_LTDC_ConfigColorKeying + 0x0000000000000000 0x3a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .text.HAL_LTDC_ConfigCLUT + 0x0000000000000000 0x70 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .text.HAL_LTDC_EnableColorKeying + 0x0000000000000000 0x30 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .text.HAL_LTDC_DisableColorKeying + 0x0000000000000000 0x30 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .text.HAL_LTDC_EnableCLUT + 0x0000000000000000 0x30 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .text.HAL_LTDC_DisableCLUT + 0x0000000000000000 0x30 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .text.HAL_LTDC_EnableDither + 0x0000000000000000 0x30 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .text.HAL_LTDC_DisableDither + 0x0000000000000000 0x30 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .text.HAL_LTDC_SetWindowSize + 0x0000000000000000 0x5a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .text.HAL_LTDC_SetWindowPosition + 0x0000000000000000 0x52 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .text.HAL_LTDC_SetPixelFormat + 0x0000000000000000 0x40 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .text.HAL_LTDC_SetAlpha + 0x0000000000000000 0x40 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .text.HAL_LTDC_SetAddress + 0x0000000000000000 0x40 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .text.HAL_LTDC_SetPitch + 0x0000000000000000 0x78 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .text.HAL_LTDC_Reload + 0x0000000000000000 0x2c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .text.HAL_LTDC_ConfigLayer_NoReload + 0x0000000000000000 0x54 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .text.HAL_LTDC_SetWindowSize_NoReload + 0x0000000000000000 0x5a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .text.HAL_LTDC_SetWindowPosition_NoReload + 0x0000000000000000 0x52 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .text.HAL_LTDC_SetPixelFormat_NoReload + 0x0000000000000000 0x3c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .text.HAL_LTDC_SetAlpha_NoReload + 0x0000000000000000 0x3c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .text.HAL_LTDC_SetAddress_NoReload + 0x0000000000000000 0x3c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .text.HAL_LTDC_SetPitch_NoReload + 0x0000000000000000 0x60 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .text.HAL_LTDC_ConfigColorKeying_NoReload + 0x0000000000000000 0x32 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .text.HAL_LTDC_EnableColorKeying_NoReload + 0x0000000000000000 0x2e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .text.HAL_LTDC_DisableColorKeying_NoReload + 0x0000000000000000 0x2e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .text.HAL_LTDC_EnableCLUT_NoReload + 0x0000000000000000 0x2e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .text.HAL_LTDC_DisableCLUT_NoReload + 0x0000000000000000 0x2e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .text.HAL_LTDC_GetState + 0x0000000000000000 0x6 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .text.HAL_LTDC_GetError + 0x0000000000000000 0x6 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .debug_macro 0x0000000000000000 0xaae ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .debug_macro 0x0000000000000000 0x2bf ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .debug_macro 0x0000000000000000 0x3b ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .debug_macro 0x0000000000000000 0x8e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .debug_macro 0x0000000000000000 0x51 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .debug_macro 0x0000000000000000 0x103 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .debug_macro 0x0000000000000000 0x6a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .debug_macro 0x0000000000000000 0x1df ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .debug_macro 0x0000000000000000 0x1c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .debug_macro 0x0000000000000000 0xd9 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .debug_macro 0x0000000000000000 0x12cd ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .debug_macro 0x0000000000000000 0x11f ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .debug_macro 0x0000000000000000 0x19 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .debug_macro 0x0000000000000000 0x1920a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .debug_macro 0x0000000000000000 0x6d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .debug_macro 0x0000000000000000 0x3749 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .debug_macro 0x0000000000000000 0x174 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .debug_macro 0x0000000000000000 0x63 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .debug_macro 0x0000000000000000 0x18ad ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .debug_macro 0x0000000000000000 0x6c4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .debug_macro 0x0000000000000000 0x185 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .debug_macro 0x0000000000000000 0x115 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .debug_macro 0x0000000000000000 0x1fd ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .debug_macro 0x0000000000000000 0x24f ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .debug_macro 0x0000000000000000 0x41 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .debug_macro 0x0000000000000000 0x58 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .debug_macro 0x0000000000000000 0x236 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .debug_macro 0x0000000000000000 0xc7 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .debug_macro 0x0000000000000000 0x4c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .debug_macro 0x0000000000000000 0x208 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .debug_macro 0x0000000000000000 0xd44 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .debug_macro 0x0000000000000000 0x14e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .debug_macro 0x0000000000000000 0x25a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .debug_macro 0x0000000000000000 0x12 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .debug_macro 0x0000000000000000 0x504 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .debug_macro 0x0000000000000000 0x22c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .debug_macro 0x0000000000000000 0x61 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .debug_macro 0x0000000000000000 0x198 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .debug_macro 0x0000000000000000 0xd6 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .debug_macro 0x0000000000000000 0x12e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .debug_macro 0x0000000000000000 0x108 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .debug_macro 0x0000000000000000 0x35 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .debug_macro 0x0000000000000000 0x2d4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .debug_macro 0x0000000000000000 0xa7c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .debug_macro 0x0000000000000000 0x59 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .debug_macro 0x0000000000000000 0x14d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .text 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .data 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .bss 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .debug_info 0x0000000000000000 0x70 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .debug_abbrev 0x0000000000000000 0x28 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .debug_aranges + 0x0000000000000000 0x18 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .debug_macro 0x0000000000000000 0x235 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .debug_macro 0x0000000000000000 0xaae ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .debug_macro 0x0000000000000000 0x2bf ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .debug_macro 0x0000000000000000 0x3b ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .debug_macro 0x0000000000000000 0x8e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .debug_macro 0x0000000000000000 0x51 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .debug_macro 0x0000000000000000 0x103 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .debug_macro 0x0000000000000000 0x6a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .debug_macro 0x0000000000000000 0x1df ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .debug_macro 0x0000000000000000 0x1c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .debug_macro 0x0000000000000000 0xd9 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .debug_macro 0x0000000000000000 0x12cd ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .debug_macro 0x0000000000000000 0x11f ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .debug_macro 0x0000000000000000 0x19 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .debug_macro 0x0000000000000000 0x1920a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .debug_macro 0x0000000000000000 0x6d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .debug_macro 0x0000000000000000 0x3749 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .debug_macro 0x0000000000000000 0x174 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .debug_macro 0x0000000000000000 0x63 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .debug_macro 0x0000000000000000 0x18ad ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .debug_macro 0x0000000000000000 0x6c4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .debug_macro 0x0000000000000000 0x185 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .debug_macro 0x0000000000000000 0x115 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .debug_macro 0x0000000000000000 0x1fd ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .debug_macro 0x0000000000000000 0x24f ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .debug_macro 0x0000000000000000 0x41 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .debug_macro 0x0000000000000000 0x58 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .debug_macro 0x0000000000000000 0x236 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .debug_macro 0x0000000000000000 0xc7 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .debug_macro 0x0000000000000000 0x4c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .debug_macro 0x0000000000000000 0x208 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .debug_macro 0x0000000000000000 0xd44 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .debug_macro 0x0000000000000000 0x14e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .debug_macro 0x0000000000000000 0x25a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .debug_macro 0x0000000000000000 0x12 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .debug_macro 0x0000000000000000 0x504 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .debug_macro 0x0000000000000000 0x22c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .debug_macro 0x0000000000000000 0x61 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .debug_macro 0x0000000000000000 0x198 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .debug_macro 0x0000000000000000 0xd6 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .debug_macro 0x0000000000000000 0x12e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .debug_macro 0x0000000000000000 0x108 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .debug_macro 0x0000000000000000 0x35 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .debug_macro 0x0000000000000000 0x2d4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .debug_macro 0x0000000000000000 0xa7c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .debug_macro 0x0000000000000000 0x59 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .debug_macro 0x0000000000000000 0x14d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .debug_line 0x0000000000000000 0x873 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .debug_str 0x0000000000000000 0xf0c79 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .comment 0x0000000000000000 0x44 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .ARM.attributes + 0x0000000000000000 0x34 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .text 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .data 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .bss 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .text.HAL_PWR_DeInit + 0x0000000000000000 0x18 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .text.HAL_PWR_EnableBkUpAccess + 0x0000000000000000 0x10 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .text.HAL_PWR_DisableBkUpAccess + 0x0000000000000000 0x10 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .text.HAL_PWR_ConfigPVD + 0x0000000000000000 0x70 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .text.HAL_PWR_EnablePVD + 0x0000000000000000 0x10 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .text.HAL_PWR_DisablePVD + 0x0000000000000000 0x10 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .text.HAL_PWR_EnableWakeUpPin + 0x0000000000000000 0x20 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .text.HAL_PWR_DisableWakeUpPin + 0x0000000000000000 0x10 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .text.HAL_PWR_EnterSLEEPMode + 0x0000000000000000 0x28 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .text.HAL_PWR_EnterSTOPMode + 0x0000000000000000 0x40 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .text.HAL_PWR_EnterSTANDBYMode + 0x0000000000000000 0x20 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .text.HAL_PWR_PVDCallback + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .text.HAL_PWR_PVD_IRQHandler + 0x0000000000000000 0x1c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .text.HAL_PWR_EnableSleepOnExit + 0x0000000000000000 0x10 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .text.HAL_PWR_DisableSleepOnExit + 0x0000000000000000 0x10 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .text.HAL_PWR_EnableSEVOnPend + 0x0000000000000000 0x10 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .text.HAL_PWR_DisableSEVOnPend + 0x0000000000000000 0x10 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .debug_info 0x0000000000000000 0x944 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .debug_abbrev 0x0000000000000000 0x1d2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .debug_loclists + 0x0000000000000000 0x84 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .debug_aranges + 0x0000000000000000 0xa0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .debug_rnglists + 0x0000000000000000 0x73 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x253 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .debug_macro 0x0000000000000000 0xaae ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x2bf ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x3b ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x8e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x51 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x103 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x6a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x1df ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x1c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .debug_macro 0x0000000000000000 0xd9 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x12cd ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x11f ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x19 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x1920a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x6d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x3749 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x174 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x63 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x18ad ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x6c4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x185 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x115 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x1fd ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x24f ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x41 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x58 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x236 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .debug_macro 0x0000000000000000 0xc7 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x4c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x208 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .debug_macro 0x0000000000000000 0xd44 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x14e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x25a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x12 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x504 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x22c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x61 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x198 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .debug_macro 0x0000000000000000 0xd6 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x12e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x108 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x35 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x2d4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .debug_macro 0x0000000000000000 0xa7c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x59 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x14d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .debug_line 0x0000000000000000 0xaf3 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .debug_str 0x0000000000000000 0xf11c1 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .comment 0x0000000000000000 0x44 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .debug_frame 0x0000000000000000 0x128 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .ARM.attributes + 0x0000000000000000 0x34 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .text 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .data 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .bss 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .text.HAL_PWREx_EnableBkUpReg + 0x0000000000000000 0x38 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .text.HAL_PWREx_DisableBkUpReg + 0x0000000000000000 0x3c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .text.HAL_PWREx_EnableFlashPowerDown + 0x0000000000000000 0x10 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .text.HAL_PWREx_DisableFlashPowerDown + 0x0000000000000000 0x10 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .text.HAL_PWREx_EnableMainRegulatorLowVoltage + 0x0000000000000000 0x10 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .text.HAL_PWREx_DisableMainRegulatorLowVoltage + 0x0000000000000000 0x10 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .text.HAL_PWREx_EnableLowRegulatorLowVoltage + 0x0000000000000000 0x10 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .text.HAL_PWREx_DisableLowRegulatorLowVoltage + 0x0000000000000000 0x10 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .text.HAL_PWREx_DisableOverDrive + 0x0000000000000000 0x70 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .text.HAL_PWREx_EnterUnderDriveSTOPMode + 0x0000000000000000 0x90 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .text.HAL_PWREx_GetVoltageRange + 0x0000000000000000 0x10 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .text.HAL_PWREx_ControlVoltageScaling + 0x0000000000000000 0xac ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0xaae ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x2bf ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x3b ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x8e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x51 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x103 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x6a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x1df ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x1c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0xd9 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x12cd ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x11f ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x19 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x1920a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x6d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x3749 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x174 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x63 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x18ad ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x6c4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x185 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x115 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x1fd ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x24f ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x41 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x58 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x236 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0xc7 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x4c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x208 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0xd44 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x14e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x25a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x12 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x504 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x22c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x61 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x198 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0xd6 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x12e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x108 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x35 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x2d4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0xa7c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x59 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x14d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .text 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .data 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .bss 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .text.QSPI_DMARxCplt + 0x0000000000000000 0x12 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .text.QSPI_DMATxCplt + 0x0000000000000000 0x12 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .text.QSPI_WaitFlagStateUntilTimeout_CPUCycle.constprop.0 + 0x0000000000000000 0x40 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .text.HAL_QSPI_MspInit + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .text.HAL_QSPI_MspDeInit + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .text.HAL_QSPI_Command_IT + 0x0000000000000000 0x70 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .text.HAL_QSPI_Transmit_IT + 0x0000000000000000 0x6a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .text.HAL_QSPI_Receive_IT + 0x0000000000000000 0x74 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .text.HAL_QSPI_Transmit_DMA + 0x0000000000000000 0x10c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .text.HAL_QSPI_Receive_DMA + 0x0000000000000000 0x114 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .text.HAL_QSPI_AutoPolling_IT + 0x0000000000000000 0x88 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .text.HAL_QSPI_ErrorCallback + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .text.QSPI_DMAAbortCplt + 0x0000000000000000 0x36 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .text.HAL_QSPI_AbortCpltCallback + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .text.HAL_QSPI_CmdCpltCallback + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .text.HAL_QSPI_RxCpltCallback + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .text.HAL_QSPI_TxCpltCallback + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .text.HAL_QSPI_RxHalfCpltCallback + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .text.QSPI_DMARxHalfCplt + 0x0000000000000000 0xa ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .text.HAL_QSPI_TxHalfCpltCallback + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .text.QSPI_DMATxHalfCplt + 0x0000000000000000 0xa ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .text.HAL_QSPI_FifoThresholdCallback + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .text.HAL_QSPI_StatusMatchCallback + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .text.HAL_QSPI_TimeOutCallback + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .text.HAL_QSPI_GetState + 0x0000000000000000 0x6 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .text.HAL_QSPI_GetError + 0x0000000000000000 0x4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .text.HAL_QSPI_Abort_IT + 0x0000000000000000 0x74 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .text.HAL_QSPI_IRQHandler + 0x0000000000000000 0x1ec ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .text.QSPI_DMAError + 0x0000000000000000 0x30 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .text.HAL_QSPI_SetTimeout + 0x0000000000000000 0x4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .text.HAL_QSPI_SetFifoThreshold + 0x0000000000000000 0x3c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .text.HAL_QSPI_GetFifoThreshold + 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .text.HAL_QSPI_SetFlashID + 0x0000000000000000 0x38 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .debug_macro 0x0000000000000000 0xaae ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .debug_macro 0x0000000000000000 0x2bf ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .debug_macro 0x0000000000000000 0x3b ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .debug_macro 0x0000000000000000 0x8e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .debug_macro 0x0000000000000000 0x51 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .debug_macro 0x0000000000000000 0x103 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .debug_macro 0x0000000000000000 0x6a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .debug_macro 0x0000000000000000 0x1df ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .debug_macro 0x0000000000000000 0x1c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .debug_macro 0x0000000000000000 0xd9 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .debug_macro 0x0000000000000000 0x12cd ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .debug_macro 0x0000000000000000 0x11f ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .debug_macro 0x0000000000000000 0x19 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .debug_macro 0x0000000000000000 0x1920a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .debug_macro 0x0000000000000000 0x6d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .debug_macro 0x0000000000000000 0x3749 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .debug_macro 0x0000000000000000 0x174 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .debug_macro 0x0000000000000000 0x63 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .debug_macro 0x0000000000000000 0x18ad ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .debug_macro 0x0000000000000000 0x6c4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .debug_macro 0x0000000000000000 0x185 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .debug_macro 0x0000000000000000 0x115 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .debug_macro 0x0000000000000000 0x1fd ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .debug_macro 0x0000000000000000 0x24f ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .debug_macro 0x0000000000000000 0x41 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .debug_macro 0x0000000000000000 0x58 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .debug_macro 0x0000000000000000 0x236 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .debug_macro 0x0000000000000000 0xc7 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .debug_macro 0x0000000000000000 0x4c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .debug_macro 0x0000000000000000 0x208 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .debug_macro 0x0000000000000000 0xd44 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .debug_macro 0x0000000000000000 0x14e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .debug_macro 0x0000000000000000 0x25a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .debug_macro 0x0000000000000000 0x12 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .debug_macro 0x0000000000000000 0x504 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .debug_macro 0x0000000000000000 0x22c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .debug_macro 0x0000000000000000 0x61 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .debug_macro 0x0000000000000000 0x198 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .debug_macro 0x0000000000000000 0xd6 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .debug_macro 0x0000000000000000 0x12e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .debug_macro 0x0000000000000000 0x108 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .debug_macro 0x0000000000000000 0x35 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .debug_macro 0x0000000000000000 0x2d4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .debug_macro 0x0000000000000000 0xa7c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .debug_macro 0x0000000000000000 0x59 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .debug_macro 0x0000000000000000 0x14d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .text 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .data 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .bss 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .text.HAL_RCC_DeInit + 0x0000000000000000 0x134 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .text.HAL_RCC_MCOConfig + 0x0000000000000000 0x94 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .text.HAL_RCC_EnableCSS + 0x0000000000000000 0x10 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .text.HAL_RCC_DisableCSS + 0x0000000000000000 0x10 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .text.HAL_RCC_GetPCLK2Freq + 0x0000000000000000 0x20 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .text.HAL_RCC_GetOscConfig + 0x0000000000000000 0x88 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .text.HAL_RCC_CSSCallback + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .text.HAL_RCC_NMI_IRQHandler + 0x0000000000000000 0x18 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .debug_macro 0x0000000000000000 0xaae ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x2bf ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x3b ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x8e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x51 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x103 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x6a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x1df ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x1c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .debug_macro 0x0000000000000000 0xd9 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x12cd ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x11f ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x19 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x1920a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x6d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x3749 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x174 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x63 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x18ad ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x6c4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x185 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x115 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x1fd ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x24f ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x41 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x58 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x236 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .debug_macro 0x0000000000000000 0xc7 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x4c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x208 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .debug_macro 0x0000000000000000 0xd44 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x14e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x25a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x12 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x504 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x22c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x61 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x198 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .debug_macro 0x0000000000000000 0xd6 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x12e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x108 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x35 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x2d4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .debug_macro 0x0000000000000000 0xa7c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x59 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x14d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .text 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .data 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .bss 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .text.HAL_RCCEx_GetPeriphCLKConfig + 0x0000000000000000 0x158 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .text.HAL_RCCEx_GetPeriphCLKFreq + 0x0000000000000000 0xd0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .text.HAL_RCCEx_EnablePLLI2S + 0x0000000000000000 0x6c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .text.HAL_RCCEx_DisablePLLI2S + 0x0000000000000000 0x30 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .text.HAL_RCCEx_EnablePLLSAI + 0x0000000000000000 0x6c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .text.HAL_RCCEx_DisablePLLSAI + 0x0000000000000000 0x30 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0xaae ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x2bf ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x3b ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x8e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x51 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x103 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x6a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x1df ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x1c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0xd9 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x12cd ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x11f ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x19 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x1920a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x6d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x3749 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x174 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x63 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x18ad ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x6c4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x185 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x115 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x1fd ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x24f ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x41 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x58 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x236 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0xc7 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x4c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x208 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0xd44 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x14e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x25a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x12 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x504 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x22c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x61 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x198 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0xd6 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x12e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x108 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x35 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x2d4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0xa7c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x59 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x14d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .text 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .data 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .bss 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .text.HAL_SDRAM_MspInit + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .text.HAL_SDRAM_MspDeInit + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .text.HAL_SDRAM_DeInit + 0x0000000000000000 0x1c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .text.HAL_SDRAM_RefreshErrorCallback + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .text.HAL_SDRAM_IRQHandler + 0x0000000000000000 0x1c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .text.HAL_SDRAM_DMA_XferCpltCallback + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .text.SDRAM_DMACpltProt + 0x0000000000000000 0x1a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .text.SDRAM_DMACplt + 0x0000000000000000 0x1a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .text.HAL_SDRAM_DMA_XferErrorCallback + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .text.SDRAM_DMAError + 0x0000000000000000 0x1a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .text.HAL_SDRAM_Read_8b + 0x0000000000000000 0x52 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .text.HAL_SDRAM_Write_8b + 0x0000000000000000 0x52 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .text.HAL_SDRAM_Read_16b + 0x0000000000000000 0x72 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .text.HAL_SDRAM_Write_16b + 0x0000000000000000 0x80 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .text.HAL_SDRAM_Read_32b + 0x0000000000000000 0x48 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .text.HAL_SDRAM_Write_32b + 0x0000000000000000 0x46 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .text.HAL_SDRAM_Read_DMA + 0x0000000000000000 0x60 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .text.HAL_SDRAM_Write_DMA + 0x0000000000000000 0x58 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .text.HAL_SDRAM_WriteProtection_Enable + 0x0000000000000000 0x32 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .text.HAL_SDRAM_WriteProtection_Disable + 0x0000000000000000 0x2e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .text.HAL_SDRAM_SetAutoRefreshNumber + 0x0000000000000000 0x30 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .text.HAL_SDRAM_GetModeStatus + 0x0000000000000000 0x8 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .text.HAL_SDRAM_GetState + 0x0000000000000000 0x6 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .debug_macro 0x0000000000000000 0xaae ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .debug_macro 0x0000000000000000 0x2bf ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .debug_macro 0x0000000000000000 0x3b ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .debug_macro 0x0000000000000000 0x8e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .debug_macro 0x0000000000000000 0x51 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .debug_macro 0x0000000000000000 0x103 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .debug_macro 0x0000000000000000 0x6a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .debug_macro 0x0000000000000000 0x1df ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .debug_macro 0x0000000000000000 0x1c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .debug_macro 0x0000000000000000 0xd9 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .debug_macro 0x0000000000000000 0x12cd ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .debug_macro 0x0000000000000000 0x11f ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .debug_macro 0x0000000000000000 0x19 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .debug_macro 0x0000000000000000 0x1920a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .debug_macro 0x0000000000000000 0x6d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .debug_macro 0x0000000000000000 0x3749 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .debug_macro 0x0000000000000000 0x174 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .debug_macro 0x0000000000000000 0x63 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .debug_macro 0x0000000000000000 0x18ad ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .debug_macro 0x0000000000000000 0x6c4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .debug_macro 0x0000000000000000 0x185 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .debug_macro 0x0000000000000000 0x115 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .debug_macro 0x0000000000000000 0x1fd ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .debug_macro 0x0000000000000000 0x24f ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .debug_macro 0x0000000000000000 0x41 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .debug_macro 0x0000000000000000 0x58 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .debug_macro 0x0000000000000000 0x236 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .debug_macro 0x0000000000000000 0xc7 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .debug_macro 0x0000000000000000 0x4c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .debug_macro 0x0000000000000000 0x208 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .debug_macro 0x0000000000000000 0xd44 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .debug_macro 0x0000000000000000 0x14e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .debug_macro 0x0000000000000000 0x25a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .debug_macro 0x0000000000000000 0x12 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .debug_macro 0x0000000000000000 0x504 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .debug_macro 0x0000000000000000 0x22c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .debug_macro 0x0000000000000000 0x61 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .debug_macro 0x0000000000000000 0x198 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .debug_macro 0x0000000000000000 0xd6 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .debug_macro 0x0000000000000000 0x12e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .debug_macro 0x0000000000000000 0x108 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .debug_macro 0x0000000000000000 0x35 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .debug_macro 0x0000000000000000 0x2d4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .debug_macro 0x0000000000000000 0xa7c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .debug_macro 0x0000000000000000 0x59 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .debug_macro 0x0000000000000000 0x14d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .data 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .bss 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_Base_MspInit + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_Base_MspDeInit + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_Base_DeInit + 0x0000000000000000 0x66 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_Base_Start + 0x0000000000000000 0x74 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_Base_Stop + 0x0000000000000000 0x28 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_Base_Stop_IT + 0x0000000000000000 0x30 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_Base_Start_DMA + 0x0000000000000000 0xb8 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_Base_Stop_DMA + 0x0000000000000000 0x3c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_OC_MspInit + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_OC_MspDeInit + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_OC_DeInit + 0x0000000000000000 0x66 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_PWM_MspDeInit + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_PWM_DeInit + 0x0000000000000000 0x66 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_IC_MspInit + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_IC_MspDeInit + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_IC_DeInit + 0x0000000000000000 0x66 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_OnePulse_MspInit + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_OnePulse_MspDeInit + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_OnePulse_DeInit + 0x0000000000000000 0x4e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_OnePulse_Start + 0x0000000000000000 0x84 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_OnePulse_Stop + 0x0000000000000000 0x7c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_OnePulse_Start_IT + 0x0000000000000000 0x94 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_OnePulse_Stop_IT + 0x0000000000000000 0x8c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_Encoder_MspInit + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_Encoder_MspDeInit + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_Encoder_DeInit + 0x0000000000000000 0x4e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_Encoder_Start + 0x0000000000000000 0xb2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_Encoder_Stop + 0x0000000000000000 0x72 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_Encoder_Start_IT + 0x0000000000000000 0xda ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_Encoder_Stop_IT + 0x0000000000000000 0x98 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_Encoder_Start_DMA + 0x0000000000000000 0x1a8 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_Encoder_Stop_DMA + 0x0000000000000000 0xb6 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_DMABurst_MultiWriteStart + 0x0000000000000000 0xd4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_DMABurst_WriteStart + 0x0000000000000000 0x14 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_DMABurst_WriteStop + 0x0000000000000000 0x68 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_DMABurst_MultiReadStart + 0x0000000000000000 0xd4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_DMABurst_ReadStart + 0x0000000000000000 0x14 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_DMABurst_ReadStop + 0x0000000000000000 0x4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_GenerateEvent + 0x0000000000000000 0x24 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_ConfigTI1Input + 0x0000000000000000 0x10 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_ReadCapturedValue + 0x0000000000000000 0x2c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_PeriodElapsedCallback + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.TIM_DMAPeriodElapsedCplt + 0x0000000000000000 0x16 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_PeriodElapsedHalfCpltCallback + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.TIM_DMAPeriodElapsedHalfCplt + 0x0000000000000000 0xa ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.TIM_DMACaptureCplt + 0x0000000000000000 0x7a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_IC_CaptureHalfCpltCallback + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.TIM_DMACaptureHalfCplt + 0x0000000000000000 0x38 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.TIM_DMADelayPulseCplt + 0x0000000000000000 0x6a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_PWM_PulseFinishedHalfCpltCallback + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.TIM_DMADelayPulseHalfCplt + 0x0000000000000000 0x38 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.TIM_DMATriggerCplt + 0x0000000000000000 0x16 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_TriggerHalfCpltCallback + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.TIM_DMATriggerHalfCplt + 0x0000000000000000 0xa ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_ErrorCallback + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.TIM_DMAError + 0x0000000000000000 0x5a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_Base_GetState + 0x0000000000000000 0x6 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_OC_GetState + 0x0000000000000000 0x6 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_PWM_GetState + 0x0000000000000000 0x6 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_IC_GetState + 0x0000000000000000 0x6 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_OnePulse_GetState + 0x0000000000000000 0x6 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_Encoder_GetState + 0x0000000000000000 0x6 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_GetActiveChannel + 0x0000000000000000 0x4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_GetChannelState + 0x0000000000000000 0x3a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_DMABurstState + 0x0000000000000000 0x6 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_OC_Init + 0x0000000000000000 0x60 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_IC_Init + 0x0000000000000000 0x60 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_OnePulse_Init + 0x0000000000000000 0x5a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_Encoder_Init + 0x0000000000000000 0xa8 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_OC_ConfigChannel + 0x0000000000000000 0x64 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.TIM_TI1_SetConfig + 0x0000000000000000 0x74 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_IC_ConfigChannel + 0x0000000000000000 0x12a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_OnePulse_ConfigChannel + 0x0000000000000000 0x110 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_ConfigOCrefClear + 0x0000000000000000 0x10c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.TIM_SlaveTimer_SetConfig.constprop.0 + 0x0000000000000000 0xc8 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_SlaveConfigSynchro_IT + 0x0000000000000000 0x4e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_SlaveConfigSynchro + 0x0000000000000000 0x4e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_OC_Stop + 0x0000000000000000 0x98 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_PWM_Stop + 0x0000000000000000 0x4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_OC_Start_IT + 0x0000000000000000 0x144 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_PWM_Start_IT + 0x0000000000000000 0x4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_OC_Stop_IT + 0x0000000000000000 0xbc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_PWM_Stop_IT + 0x0000000000000000 0x4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_OC_Start_DMA + 0x0000000000000000 0x208 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_PWM_Start_DMA + 0x0000000000000000 0x4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_OC_Stop_DMA + 0x0000000000000000 0xd0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_PWM_Stop_DMA + 0x0000000000000000 0x4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_IC_Start + 0x0000000000000000 0x128 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_IC_Stop + 0x0000000000000000 0x86 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_IC_Start_IT + 0x0000000000000000 0x160 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_IC_Stop_IT + 0x0000000000000000 0x9e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_IC_Start_DMA + 0x0000000000000000 0x220 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_IC_Stop_DMA + 0x0000000000000000 0xa8 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .debug_macro 0x0000000000000000 0xaae ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .debug_macro 0x0000000000000000 0x2bf ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .debug_macro 0x0000000000000000 0x3b ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .debug_macro 0x0000000000000000 0x8e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .debug_macro 0x0000000000000000 0x51 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .debug_macro 0x0000000000000000 0x103 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .debug_macro 0x0000000000000000 0x6a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .debug_macro 0x0000000000000000 0x1df ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .debug_macro 0x0000000000000000 0x1c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .debug_macro 0x0000000000000000 0xd9 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .debug_macro 0x0000000000000000 0x12cd ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .debug_macro 0x0000000000000000 0x11f ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .debug_macro 0x0000000000000000 0x19 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .debug_macro 0x0000000000000000 0x1920a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .debug_macro 0x0000000000000000 0x6d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .debug_macro 0x0000000000000000 0x3749 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .debug_macro 0x0000000000000000 0x174 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .debug_macro 0x0000000000000000 0x63 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .debug_macro 0x0000000000000000 0x18ad ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .debug_macro 0x0000000000000000 0x6c4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .debug_macro 0x0000000000000000 0x185 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .debug_macro 0x0000000000000000 0x115 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .debug_macro 0x0000000000000000 0x1fd ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .debug_macro 0x0000000000000000 0x24f ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .debug_macro 0x0000000000000000 0x41 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .debug_macro 0x0000000000000000 0x58 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .debug_macro 0x0000000000000000 0x236 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .debug_macro 0x0000000000000000 0xc7 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .debug_macro 0x0000000000000000 0x4c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .debug_macro 0x0000000000000000 0x208 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .debug_macro 0x0000000000000000 0xd44 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .debug_macro 0x0000000000000000 0x14e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .debug_macro 0x0000000000000000 0x25a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .debug_macro 0x0000000000000000 0x12 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .debug_macro 0x0000000000000000 0x504 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .debug_macro 0x0000000000000000 0x22c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .debug_macro 0x0000000000000000 0x61 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .debug_macro 0x0000000000000000 0x198 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .debug_macro 0x0000000000000000 0xd6 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .debug_macro 0x0000000000000000 0x12e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .debug_macro 0x0000000000000000 0x108 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .debug_macro 0x0000000000000000 0x35 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .debug_macro 0x0000000000000000 0x2d4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .debug_macro 0x0000000000000000 0xa7c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .debug_macro 0x0000000000000000 0x59 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .debug_macro 0x0000000000000000 0x14d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .text 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .data 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .bss 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .text.TIM_CCxNChannelCmd + 0x0000000000000000 0x1c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .text.TIM_DMAErrorCCxN + 0x0000000000000000 0x42 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .text.TIM_DMADelayPulseNCplt + 0x0000000000000000 0x6a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .text.HAL_TIMEx_HallSensor_MspInit + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .text.HAL_TIMEx_HallSensor_Init + 0x0000000000000000 0xc6 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .text.HAL_TIMEx_HallSensor_MspDeInit + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .text.HAL_TIMEx_HallSensor_DeInit + 0x0000000000000000 0x4e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .text.HAL_TIMEx_HallSensor_Start + 0x0000000000000000 0xac ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .text.HAL_TIMEx_HallSensor_Stop + 0x0000000000000000 0x42 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .text.HAL_TIMEx_HallSensor_Start_IT + 0x0000000000000000 0xb4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .text.HAL_TIMEx_HallSensor_Stop_IT + 0x0000000000000000 0x4a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .text.HAL_TIMEx_HallSensor_Start_DMA + 0x0000000000000000 0xdc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .text.HAL_TIMEx_HallSensor_Stop_DMA + 0x0000000000000000 0x4a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .text.HAL_TIMEx_OCN_Start + 0x0000000000000000 0xc0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .text.HAL_TIMEx_OCN_Stop + 0x0000000000000000 0x6c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .text.HAL_TIMEx_OCN_Start_IT + 0x0000000000000000 0xe8 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .text.HAL_TIMEx_OCN_Stop_IT + 0x0000000000000000 0xa4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .text.HAL_TIMEx_OCN_Start_DMA + 0x0000000000000000 0x180 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .text.HAL_TIMEx_OCN_Stop_DMA + 0x0000000000000000 0xa0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .text.HAL_TIMEx_PWMN_Start + 0x0000000000000000 0x4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .text.HAL_TIMEx_PWMN_Stop + 0x0000000000000000 0x4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .text.HAL_TIMEx_PWMN_Start_IT + 0x0000000000000000 0x4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .text.HAL_TIMEx_PWMN_Stop_IT + 0x0000000000000000 0x4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .text.HAL_TIMEx_PWMN_Start_DMA + 0x0000000000000000 0x4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .text.HAL_TIMEx_PWMN_Stop_DMA + 0x0000000000000000 0x4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .text.HAL_TIMEx_OnePulseN_Start + 0x0000000000000000 0x6a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .text.HAL_TIMEx_OnePulseN_Stop + 0x0000000000000000 0x6c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .text.HAL_TIMEx_OnePulseN_Start_IT + 0x0000000000000000 0x7a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .text.HAL_TIMEx_OnePulseN_Stop_IT + 0x0000000000000000 0x7c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .text.HAL_TIMEx_ConfigCommutEvent + 0x0000000000000000 0x5a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .text.HAL_TIMEx_ConfigCommutEvent_IT + 0x0000000000000000 0x5a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .text.HAL_TIMEx_ConfigCommutEvent_DMA + 0x0000000000000000 0x74 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .text.HAL_TIMEx_RemapConfig + 0x0000000000000000 0x20 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .text.HAL_TIMEx_GroupChannel5 + 0x0000000000000000 0x30 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .text.TIMEx_DMACommutationCplt + 0x0000000000000000 0x10 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .text.HAL_TIMEx_CommutHalfCpltCallback + 0x0000000000000000 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .text.TIMEx_DMACommutationHalfCplt + 0x0000000000000000 0x10 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .text.HAL_TIMEx_HallSensor_GetState + 0x0000000000000000 0x6 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .text.HAL_TIMEx_GetChannelNState + 0x0000000000000000 0x24 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0xaae ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x2bf ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x3b ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x8e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x51 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x103 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x6a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x1df ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x1c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0xd9 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x12cd ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x11f ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x19 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x1920a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x6d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x3749 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x174 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x63 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x18ad ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x6c4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x185 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x115 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x1fd ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x24f ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x41 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x58 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x236 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0xc7 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x4c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x208 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0xd44 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x14e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x25a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x12 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x504 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x22c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x61 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x198 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0xd6 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x12e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x108 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x35 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x2d4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0xa7c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x59 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x14d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .text 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .data 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .bss 0x0000000000000000 0x0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .text.FMC_NORSRAM_Init + 0x0000000000000000 0x88 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .text.FMC_NORSRAM_DeInit + 0x0000000000000000 0x32 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .text.FMC_NORSRAM_Timing_Init + 0x0000000000000000 0x56 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .text.FMC_NORSRAM_Extended_Timing_Init + 0x0000000000000000 0x3c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .text.FMC_NORSRAM_WriteOperation_Enable + 0x0000000000000000 0x10 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .text.FMC_NORSRAM_WriteOperation_Disable + 0x0000000000000000 0x10 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .text.FMC_NAND_Init + 0x0000000000000000 0x34 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .text.FMC_NAND_CommonSpace_Timing_Init + 0x0000000000000000 0x1c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .text.FMC_NAND_AttributeSpace_Timing_Init + 0x0000000000000000 0x1c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .text.FMC_NAND_DeInit + 0x0000000000000000 0x1c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .text.FMC_NAND_ECC_Enable + 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .text.FMC_NAND_ECC_Disable + 0x0000000000000000 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .text.FMC_NAND_GetECC + 0x0000000000000000 0x32 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .text.FMC_SDRAM_DeInit + 0x0000000000000000 0x1e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .text.FMC_SDRAM_WriteProtection_Enable + 0x0000000000000000 0x10 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .text.FMC_SDRAM_WriteProtection_Disable + 0x0000000000000000 0x10 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .text.FMC_SDRAM_SetAutoRefreshNumber + 0x0000000000000000 0x12 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .text.FMC_SDRAM_GetModeStatus + 0x0000000000000000 0xe ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .debug_macro 0x0000000000000000 0xaae ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .debug_macro 0x0000000000000000 0x2bf ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .debug_macro 0x0000000000000000 0x3b ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .debug_macro 0x0000000000000000 0x8e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .debug_macro 0x0000000000000000 0x51 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .debug_macro 0x0000000000000000 0x103 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .debug_macro 0x0000000000000000 0x6a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .debug_macro 0x0000000000000000 0x1df ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .debug_macro 0x0000000000000000 0x1c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .debug_macro 0x0000000000000000 0xd9 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .debug_macro 0x0000000000000000 0x12cd ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .debug_macro 0x0000000000000000 0x11f ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .debug_macro 0x0000000000000000 0x19 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .debug_macro 0x0000000000000000 0x1920a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .debug_macro 0x0000000000000000 0x6d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .debug_macro 0x0000000000000000 0x3749 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .debug_macro 0x0000000000000000 0x174 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .debug_macro 0x0000000000000000 0x63 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .debug_macro 0x0000000000000000 0x18ad ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .debug_macro 0x0000000000000000 0x6c4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .debug_macro 0x0000000000000000 0x185 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .debug_macro 0x0000000000000000 0x115 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .debug_macro 0x0000000000000000 0x1fd ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .debug_macro 0x0000000000000000 0x24f ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .debug_macro 0x0000000000000000 0x41 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .debug_macro 0x0000000000000000 0x58 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .debug_macro 0x0000000000000000 0x236 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .debug_macro 0x0000000000000000 0xc7 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .debug_macro 0x0000000000000000 0x4c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .debug_macro 0x0000000000000000 0x208 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .debug_macro 0x0000000000000000 0xd44 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .debug_macro 0x0000000000000000 0x14e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .debug_macro 0x0000000000000000 0x25a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .debug_macro 0x0000000000000000 0x12 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .debug_macro 0x0000000000000000 0x504 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .debug_macro 0x0000000000000000 0x22c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .debug_macro 0x0000000000000000 0x61 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .debug_macro 0x0000000000000000 0x198 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .debug_macro 0x0000000000000000 0xd6 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .debug_macro 0x0000000000000000 0x12e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .debug_macro 0x0000000000000000 0x108 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .debug_macro 0x0000000000000000 0x35 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .debug_macro 0x0000000000000000 0x2d4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .debug_macro 0x0000000000000000 0xa7c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .debug_macro 0x0000000000000000 0x59 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .debug_macro 0x0000000000000000 0x14d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/cmsis_os2.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/cmsis_os2.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/cmsis_os2.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/cmsis_os2.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/cmsis_os2.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/cmsis_os2.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/cmsis_os2.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/cmsis_os2.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/cmsis_os2.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/cmsis_os2.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/cmsis_os2.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/cmsis_os2.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/cmsis_os2.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/cmsis_os2.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/cmsis_os2.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/cmsis_os2.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/cmsis_os2.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/cmsis_os2.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/cmsis_os2.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/cmsis_os2.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/cmsis_os2.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/cmsis_os2.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/cmsis_os2.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/cmsis_os2.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/cmsis_os2.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/cmsis_os2.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/cmsis_os2.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/cmsis_os2.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/cmsis_os2.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/cmsis_os2.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/cmsis_os2.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/cmsis_os2.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/cmsis_os2.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/cmsis_os2.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/cmsis_os2.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/cmsis_os2.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/cmsis_os2.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/cmsis_os2.o + .text 0x0000000000000000 0x0 ./Middlewares/FreeRTOS/cmsis_os2.o + .data 0x0000000000000000 0x0 ./Middlewares/FreeRTOS/cmsis_os2.o + .bss 0x0000000000000000 0x0 ./Middlewares/FreeRTOS/cmsis_os2.o + .text.TimerCallback + 0x0000000000000000 0x14 ./Middlewares/FreeRTOS/cmsis_os2.o + .rodata.osKernelGetInfo.str1.1 + 0x0000000000000000 0x11 ./Middlewares/FreeRTOS/cmsis_os2.o + .text.osKernelGetInfo + 0x0000000000000000 0x2c ./Middlewares/FreeRTOS/cmsis_os2.o + .text.osKernelGetState + 0x0000000000000000 0x20 ./Middlewares/FreeRTOS/cmsis_os2.o + .text.osKernelLock + 0x0000000000000000 0x44 ./Middlewares/FreeRTOS/cmsis_os2.o + .text.osKernelUnlock + 0x0000000000000000 0x50 ./Middlewares/FreeRTOS/cmsis_os2.o + .text.osKernelRestoreLock + 0x0000000000000000 0x5c ./Middlewares/FreeRTOS/cmsis_os2.o + .text.osKernelGetTickFreq + 0x0000000000000000 0x6 ./Middlewares/FreeRTOS/cmsis_os2.o + .text.osKernelGetSysTimerCount + 0x0000000000000000 0x34 ./Middlewares/FreeRTOS/cmsis_os2.o + .text.osKernelGetSysTimerFreq + 0x0000000000000000 0xc ./Middlewares/FreeRTOS/cmsis_os2.o + .text.osThreadGetName + 0x0000000000000000 0x28 ./Middlewares/FreeRTOS/cmsis_os2.o + .text.osThreadGetId + 0x0000000000000000 0x4 ./Middlewares/FreeRTOS/cmsis_os2.o + .text.osThreadGetState + 0x0000000000000000 0x3c ./Middlewares/FreeRTOS/cmsis_os2.o + .text.osThreadGetStackSpace + 0x0000000000000000 0x28 ./Middlewares/FreeRTOS/cmsis_os2.o + .text.osThreadSetPriority + 0x0000000000000000 0x3c ./Middlewares/FreeRTOS/cmsis_os2.o + .text.osThreadGetPriority + 0x0000000000000000 0x2c ./Middlewares/FreeRTOS/cmsis_os2.o + .text.osThreadYield + 0x0000000000000000 0x3c ./Middlewares/FreeRTOS/cmsis_os2.o + .text.osThreadSuspend + 0x0000000000000000 0x38 ./Middlewares/FreeRTOS/cmsis_os2.o + .text.osThreadResume + 0x0000000000000000 0x38 ./Middlewares/FreeRTOS/cmsis_os2.o + .text.osThreadExit + 0x0000000000000000 0xa ./Middlewares/FreeRTOS/cmsis_os2.o + .text.osThreadTerminate + 0x0000000000000000 0x4c ./Middlewares/FreeRTOS/cmsis_os2.o + .text.osThreadGetCount + 0x0000000000000000 0x28 ./Middlewares/FreeRTOS/cmsis_os2.o + .text.osThreadEnumerate + 0x0000000000000000 0x80 ./Middlewares/FreeRTOS/cmsis_os2.o + .text.osThreadFlagsSet + 0x0000000000000000 0x90 ./Middlewares/FreeRTOS/cmsis_os2.o + .text.osThreadFlagsClear + 0x0000000000000000 0x68 ./Middlewares/FreeRTOS/cmsis_os2.o + .text.osThreadFlagsGet + 0x0000000000000000 0x48 ./Middlewares/FreeRTOS/cmsis_os2.o + .text.osThreadFlagsWait + 0x0000000000000000 0xb4 ./Middlewares/FreeRTOS/cmsis_os2.o + .text.osDelayUntil + 0x0000000000000000 0x48 ./Middlewares/FreeRTOS/cmsis_os2.o + .text.osTimerNew + 0x0000000000000000 0x7c ./Middlewares/FreeRTOS/cmsis_os2.o + .text.osTimerGetName + 0x0000000000000000 0x28 ./Middlewares/FreeRTOS/cmsis_os2.o + .text.osTimerStart + 0x0000000000000000 0x4c ./Middlewares/FreeRTOS/cmsis_os2.o + .text.osTimerStop + 0x0000000000000000 0x58 ./Middlewares/FreeRTOS/cmsis_os2.o + .text.osTimerIsRunning + 0x0000000000000000 0x28 ./Middlewares/FreeRTOS/cmsis_os2.o + .text.osTimerDelete + 0x0000000000000000 0x60 ./Middlewares/FreeRTOS/cmsis_os2.o + .text.osEventFlagsNew + 0x0000000000000000 0x3c ./Middlewares/FreeRTOS/cmsis_os2.o + .text.osEventFlagsSet + 0x0000000000000000 0x70 ./Middlewares/FreeRTOS/cmsis_os2.o + .text.osEventFlagsClear + 0x0000000000000000 0x5c ./Middlewares/FreeRTOS/cmsis_os2.o + .text.osEventFlagsGet + 0x0000000000000000 0x34 ./Middlewares/FreeRTOS/cmsis_os2.o + .text.osEventFlagsWait + 0x0000000000000000 0x6c ./Middlewares/FreeRTOS/cmsis_os2.o + .text.osEventFlagsDelete + 0x0000000000000000 0x38 ./Middlewares/FreeRTOS/cmsis_os2.o + .text.osMutexGetOwner + 0x0000000000000000 0x2c ./Middlewares/FreeRTOS/cmsis_os2.o + .text.osMutexDelete + 0x0000000000000000 0x48 ./Middlewares/FreeRTOS/cmsis_os2.o + .text.osSemaphoreGetCount + 0x0000000000000000 0x30 ./Middlewares/FreeRTOS/cmsis_os2.o + .text.osSemaphoreDelete + 0x0000000000000000 0x44 ./Middlewares/FreeRTOS/cmsis_os2.o + .text.osMessageQueueGetCapacity + 0x0000000000000000 0x6 ./Middlewares/FreeRTOS/cmsis_os2.o + .text.osMessageQueueGetMsgSize + 0x0000000000000000 0x6 ./Middlewares/FreeRTOS/cmsis_os2.o + .text.osMessageQueueGetCount + 0x0000000000000000 0x4 ./Middlewares/FreeRTOS/cmsis_os2.o + .text.osMessageQueueGetSpace + 0x0000000000000000 0x4c ./Middlewares/FreeRTOS/cmsis_os2.o + .text.osMessageQueueReset + 0x0000000000000000 0x38 ./Middlewares/FreeRTOS/cmsis_os2.o + .text.osMessageQueueDelete + 0x0000000000000000 0x4 ./Middlewares/FreeRTOS/cmsis_os2.o + .text.vApplicationIdleHook + 0x0000000000000000 0x2 ./Middlewares/FreeRTOS/cmsis_os2.o + .rodata.CSWTCH.104 + 0x0000000000000000 0x5 ./Middlewares/FreeRTOS/cmsis_os2.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/FreeRTOS/cmsis_os2.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/FreeRTOS/cmsis_os2.o + .debug_macro 0x0000000000000000 0x5b ./Middlewares/FreeRTOS/cmsis_os2.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/FreeRTOS/cmsis_os2.o + .debug_macro 0x0000000000000000 0x94 ./Middlewares/FreeRTOS/cmsis_os2.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/FreeRTOS/cmsis_os2.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/FreeRTOS/cmsis_os2.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/FreeRTOS/cmsis_os2.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/FreeRTOS/cmsis_os2.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/FreeRTOS/cmsis_os2.o + .debug_macro 0x0000000000000000 0x57 ./Middlewares/FreeRTOS/cmsis_os2.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/FreeRTOS/cmsis_os2.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/FreeRTOS/cmsis_os2.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/FreeRTOS/cmsis_os2.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/FreeRTOS/cmsis_os2.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/FreeRTOS/cmsis_os2.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/FreeRTOS/cmsis_os2.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/FreeRTOS/cmsis_os2.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/FreeRTOS/cmsis_os2.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/FreeRTOS/cmsis_os2.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/FreeRTOS/cmsis_os2.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/FreeRTOS/cmsis_os2.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/FreeRTOS/cmsis_os2.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/FreeRTOS/cmsis_os2.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/FreeRTOS/cmsis_os2.o + .debug_macro 0x0000000000000000 0x74 ./Middlewares/FreeRTOS/cmsis_os2.o + .debug_macro 0x0000000000000000 0xd3 ./Middlewares/FreeRTOS/cmsis_os2.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/FreeRTOS/cmsis_os2.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/FreeRTOS/cmsis_os2.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/FreeRTOS/cmsis_os2.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/FreeRTOS/cmsis_os2.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/FreeRTOS/cmsis_os2.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/FreeRTOS/cmsis_os2.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/FreeRTOS/cmsis_os2.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/FreeRTOS/cmsis_os2.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/croutine.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/croutine.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/croutine.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/croutine.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/croutine.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/croutine.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/croutine.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/croutine.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/croutine.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/croutine.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/croutine.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/croutine.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/croutine.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/croutine.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/croutine.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/croutine.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/croutine.o + .text 0x0000000000000000 0x0 ./Middlewares/FreeRTOS/croutine.o + .data 0x0000000000000000 0x0 ./Middlewares/FreeRTOS/croutine.o + .bss 0x0000000000000000 0x0 ./Middlewares/FreeRTOS/croutine.o + .debug_info 0x0000000000000000 0x77 ./Middlewares/FreeRTOS/croutine.o + .debug_abbrev 0x0000000000000000 0x28 ./Middlewares/FreeRTOS/croutine.o + .debug_aranges + 0x0000000000000000 0x18 ./Middlewares/FreeRTOS/croutine.o + .debug_macro 0x0000000000000000 0xe3 ./Middlewares/FreeRTOS/croutine.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/FreeRTOS/croutine.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/FreeRTOS/croutine.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/FreeRTOS/croutine.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/FreeRTOS/croutine.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/FreeRTOS/croutine.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/FreeRTOS/croutine.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/FreeRTOS/croutine.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/FreeRTOS/croutine.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/FreeRTOS/croutine.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/FreeRTOS/croutine.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/FreeRTOS/croutine.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/FreeRTOS/croutine.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/FreeRTOS/croutine.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/FreeRTOS/croutine.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/FreeRTOS/croutine.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/FreeRTOS/croutine.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/FreeRTOS/croutine.o + .debug_line 0x0000000000000000 0x59c ./Middlewares/FreeRTOS/croutine.o + .debug_str 0x0000000000000000 0x8335 ./Middlewares/FreeRTOS/croutine.o + .comment 0x0000000000000000 0x44 ./Middlewares/FreeRTOS/croutine.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/FreeRTOS/croutine.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/event_groups.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/event_groups.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/event_groups.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/event_groups.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/event_groups.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/event_groups.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/event_groups.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/event_groups.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/event_groups.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/event_groups.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/event_groups.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/event_groups.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/event_groups.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/event_groups.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/event_groups.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/event_groups.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/event_groups.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/event_groups.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/event_groups.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/event_groups.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/event_groups.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/event_groups.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/event_groups.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/event_groups.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/event_groups.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/event_groups.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/event_groups.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/event_groups.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/event_groups.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/event_groups.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/event_groups.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/event_groups.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/event_groups.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/event_groups.o + .text 0x0000000000000000 0x0 ./Middlewares/FreeRTOS/event_groups.o + .data 0x0000000000000000 0x0 ./Middlewares/FreeRTOS/event_groups.o + .bss 0x0000000000000000 0x0 ./Middlewares/FreeRTOS/event_groups.o + .text.xEventGroupCreateStatic + 0x0000000000000000 0x50 ./Middlewares/FreeRTOS/event_groups.o + .text.xEventGroupCreate + 0x0000000000000000 0x1c ./Middlewares/FreeRTOS/event_groups.o + .text.xEventGroupWaitBits + 0x0000000000000000 0x11e ./Middlewares/FreeRTOS/event_groups.o + .text.xEventGroupClearBits + 0x0000000000000000 0x4e ./Middlewares/FreeRTOS/event_groups.o + .text.vEventGroupClearBitsCallback + 0x0000000000000000 0x4 ./Middlewares/FreeRTOS/event_groups.o + .text.xEventGroupClearBitsFromISR + 0x0000000000000000 0x10 ./Middlewares/FreeRTOS/event_groups.o + .text.xEventGroupGetBitsFromISR + 0x0000000000000000 0x20 ./Middlewares/FreeRTOS/event_groups.o + .text.xEventGroupSetBits + 0x0000000000000000 0x8e ./Middlewares/FreeRTOS/event_groups.o + .text.xEventGroupSync + 0x0000000000000000 0xdc ./Middlewares/FreeRTOS/event_groups.o + .text.vEventGroupSetBitsCallback + 0x0000000000000000 0x4 ./Middlewares/FreeRTOS/event_groups.o + .text.vEventGroupDelete + 0x0000000000000000 0x48 ./Middlewares/FreeRTOS/event_groups.o + .text.xEventGroupSetBitsFromISR + 0x0000000000000000 0x10 ./Middlewares/FreeRTOS/event_groups.o + .text.uxEventGroupGetNumber + 0x0000000000000000 0x6 ./Middlewares/FreeRTOS/event_groups.o + .text.vEventGroupSetNumber + 0x0000000000000000 0x4 ./Middlewares/FreeRTOS/event_groups.o + .debug_info 0x0000000000000000 0x106d ./Middlewares/FreeRTOS/event_groups.o + .debug_abbrev 0x0000000000000000 0x400 ./Middlewares/FreeRTOS/event_groups.o + .debug_loclists + 0x0000000000000000 0x72f ./Middlewares/FreeRTOS/event_groups.o + .debug_aranges + 0x0000000000000000 0x88 ./Middlewares/FreeRTOS/event_groups.o + .debug_rnglists + 0x0000000000000000 0x8b ./Middlewares/FreeRTOS/event_groups.o + .debug_macro 0x0000000000000000 0x1e2 ./Middlewares/FreeRTOS/event_groups.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/FreeRTOS/event_groups.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/FreeRTOS/event_groups.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/FreeRTOS/event_groups.o + .debug_macro 0x0000000000000000 0x5b ./Middlewares/FreeRTOS/event_groups.o + .debug_macro 0x0000000000000000 0x94 ./Middlewares/FreeRTOS/event_groups.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/FreeRTOS/event_groups.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/FreeRTOS/event_groups.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/FreeRTOS/event_groups.o + .debug_macro 0x0000000000000000 0x10e ./Middlewares/FreeRTOS/event_groups.o + .debug_macro 0x0000000000000000 0x8d ./Middlewares/FreeRTOS/event_groups.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/FreeRTOS/event_groups.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/FreeRTOS/event_groups.o + .debug_macro 0x0000000000000000 0x57 ./Middlewares/FreeRTOS/event_groups.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/FreeRTOS/event_groups.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/FreeRTOS/event_groups.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/FreeRTOS/event_groups.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/FreeRTOS/event_groups.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/FreeRTOS/event_groups.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/FreeRTOS/event_groups.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/FreeRTOS/event_groups.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/FreeRTOS/event_groups.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/FreeRTOS/event_groups.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/FreeRTOS/event_groups.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/FreeRTOS/event_groups.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/FreeRTOS/event_groups.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/FreeRTOS/event_groups.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/FreeRTOS/event_groups.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/FreeRTOS/event_groups.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/FreeRTOS/event_groups.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/FreeRTOS/event_groups.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/FreeRTOS/event_groups.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/FreeRTOS/event_groups.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/FreeRTOS/event_groups.o + .debug_macro 0x0000000000000000 0x91 ./Middlewares/FreeRTOS/event_groups.o + .debug_line 0x0000000000000000 0xf1c ./Middlewares/FreeRTOS/event_groups.o + .debug_str 0x0000000000000000 0xbe9e ./Middlewares/FreeRTOS/event_groups.o + .comment 0x0000000000000000 0x44 ./Middlewares/FreeRTOS/event_groups.o + .debug_frame 0x0000000000000000 0x160 ./Middlewares/FreeRTOS/event_groups.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/FreeRTOS/event_groups.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/heap_4.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/heap_4.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/heap_4.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/heap_4.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/heap_4.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/heap_4.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/heap_4.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/heap_4.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/heap_4.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/heap_4.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/heap_4.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/heap_4.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/heap_4.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/heap_4.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/heap_4.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/heap_4.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/heap_4.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/heap_4.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/heap_4.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/heap_4.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/heap_4.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/heap_4.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/heap_4.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/heap_4.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/heap_4.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/heap_4.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/heap_4.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/heap_4.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/heap_4.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/heap_4.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/heap_4.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/heap_4.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/heap_4.o + .text 0x0000000000000000 0x0 ./Middlewares/FreeRTOS/heap_4.o + .data 0x0000000000000000 0x0 ./Middlewares/FreeRTOS/heap_4.o + .bss 0x0000000000000000 0x0 ./Middlewares/FreeRTOS/heap_4.o + .text.xPortGetFreeHeapSize + 0x0000000000000000 0xc ./Middlewares/FreeRTOS/heap_4.o + .text.xPortGetMinimumEverFreeHeapSize + 0x0000000000000000 0xc ./Middlewares/FreeRTOS/heap_4.o + .text.vPortInitialiseBlocks + 0x0000000000000000 0x2 ./Middlewares/FreeRTOS/heap_4.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/FreeRTOS/heap_4.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/FreeRTOS/heap_4.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/FreeRTOS/heap_4.o + .debug_macro 0x0000000000000000 0x5b ./Middlewares/FreeRTOS/heap_4.o + .debug_macro 0x0000000000000000 0x94 ./Middlewares/FreeRTOS/heap_4.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/FreeRTOS/heap_4.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/FreeRTOS/heap_4.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/FreeRTOS/heap_4.o + .debug_macro 0x0000000000000000 0x10e ./Middlewares/FreeRTOS/heap_4.o + .debug_macro 0x0000000000000000 0x8d ./Middlewares/FreeRTOS/heap_4.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/FreeRTOS/heap_4.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/FreeRTOS/heap_4.o + .debug_macro 0x0000000000000000 0x57 ./Middlewares/FreeRTOS/heap_4.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/FreeRTOS/heap_4.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/FreeRTOS/heap_4.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/FreeRTOS/heap_4.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/FreeRTOS/heap_4.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/FreeRTOS/heap_4.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/FreeRTOS/heap_4.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/FreeRTOS/heap_4.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/FreeRTOS/heap_4.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/FreeRTOS/heap_4.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/FreeRTOS/heap_4.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/FreeRTOS/heap_4.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/FreeRTOS/heap_4.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/FreeRTOS/heap_4.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/FreeRTOS/heap_4.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/FreeRTOS/heap_4.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/FreeRTOS/heap_4.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/FreeRTOS/heap_4.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/FreeRTOS/heap_4.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/FreeRTOS/heap_4.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/FreeRTOS/heap_4.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/list.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/list.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/list.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/list.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/list.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/list.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/list.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/list.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/list.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/list.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/list.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/list.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/list.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/list.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/list.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/list.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/list.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/list.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/list.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/list.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/list.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/list.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/list.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/list.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/list.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/list.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/list.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/list.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/list.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/list.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/list.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/list.o + .text 0x0000000000000000 0x0 ./Middlewares/FreeRTOS/list.o + .data 0x0000000000000000 0x0 ./Middlewares/FreeRTOS/list.o + .bss 0x0000000000000000 0x0 ./Middlewares/FreeRTOS/list.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/FreeRTOS/list.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/FreeRTOS/list.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/FreeRTOS/list.o + .debug_macro 0x0000000000000000 0x5b ./Middlewares/FreeRTOS/list.o + .debug_macro 0x0000000000000000 0x94 ./Middlewares/FreeRTOS/list.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/FreeRTOS/list.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/FreeRTOS/list.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/FreeRTOS/list.o + .debug_macro 0x0000000000000000 0x10e ./Middlewares/FreeRTOS/list.o + .debug_macro 0x0000000000000000 0x8d ./Middlewares/FreeRTOS/list.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/FreeRTOS/list.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/FreeRTOS/list.o + .debug_macro 0x0000000000000000 0x57 ./Middlewares/FreeRTOS/list.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/FreeRTOS/list.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/FreeRTOS/list.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/FreeRTOS/list.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/FreeRTOS/list.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/FreeRTOS/list.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/FreeRTOS/list.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/FreeRTOS/list.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/FreeRTOS/list.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/FreeRTOS/list.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/FreeRTOS/list.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/FreeRTOS/list.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/FreeRTOS/list.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/FreeRTOS/list.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/FreeRTOS/list.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/FreeRTOS/list.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/FreeRTOS/list.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/FreeRTOS/list.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/FreeRTOS/list.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/FreeRTOS/list.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/port.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/port.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/port.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/port.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/port.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/port.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/port.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/port.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/port.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/port.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/port.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/port.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/port.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/port.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/port.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/port.o + .text 0x0000000000000000 0x0 ./Middlewares/FreeRTOS/port.o + .data 0x0000000000000000 0x0 ./Middlewares/FreeRTOS/port.o + .bss 0x0000000000000000 0x0 ./Middlewares/FreeRTOS/port.o + .text.vPortEndScheduler + 0x0000000000000000 0x28 ./Middlewares/FreeRTOS/port.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/FreeRTOS/port.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/FreeRTOS/port.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/FreeRTOS/port.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/FreeRTOS/port.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/FreeRTOS/port.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/FreeRTOS/port.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/FreeRTOS/port.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/FreeRTOS/port.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/FreeRTOS/port.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/FreeRTOS/port.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/FreeRTOS/port.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/FreeRTOS/port.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/FreeRTOS/port.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/FreeRTOS/port.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/FreeRTOS/port.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/FreeRTOS/port.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/queue.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/queue.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/queue.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/queue.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/queue.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/queue.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/queue.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/queue.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/queue.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/queue.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/queue.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/queue.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/queue.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/queue.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/queue.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/queue.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/queue.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/queue.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/queue.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/queue.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/queue.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/queue.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/queue.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/queue.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/queue.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/queue.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/queue.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/queue.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/queue.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/queue.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/queue.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/queue.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/queue.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/queue.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/queue.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/queue.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/queue.o + .text 0x0000000000000000 0x0 ./Middlewares/FreeRTOS/queue.o + .data 0x0000000000000000 0x0 ./Middlewares/FreeRTOS/queue.o + .bss 0x0000000000000000 0x0 ./Middlewares/FreeRTOS/queue.o + .text.xQueueGetMutexHolder + 0x0000000000000000 0x1a ./Middlewares/FreeRTOS/queue.o + .text.xQueueGetMutexHolderFromISR + 0x0000000000000000 0x24 ./Middlewares/FreeRTOS/queue.o + .text.xQueuePeek + 0x0000000000000000 0x14a ./Middlewares/FreeRTOS/queue.o + .text.xQueuePeekFromISR + 0x0000000000000000 0x86 ./Middlewares/FreeRTOS/queue.o + .text.uxQueueMessagesWaiting + 0x0000000000000000 0x2e ./Middlewares/FreeRTOS/queue.o + .text.uxQueueSpacesAvailable + 0x0000000000000000 0x32 ./Middlewares/FreeRTOS/queue.o + .text.uxQueueMessagesWaitingFromISR + 0x0000000000000000 0x1c ./Middlewares/FreeRTOS/queue.o + .text.uxQueueGetQueueNumber + 0x0000000000000000 0x4 ./Middlewares/FreeRTOS/queue.o + .text.vQueueSetQueueNumber + 0x0000000000000000 0x4 ./Middlewares/FreeRTOS/queue.o + .text.ucQueueGetQueueType + 0x0000000000000000 0x6 ./Middlewares/FreeRTOS/queue.o + .text.xQueueIsQueueEmptyFromISR + 0x0000000000000000 0x22 ./Middlewares/FreeRTOS/queue.o + .text.xQueueIsQueueFullFromISR + 0x0000000000000000 0x24 ./Middlewares/FreeRTOS/queue.o + .text.pcQueueGetName + 0x0000000000000000 0x24 ./Middlewares/FreeRTOS/queue.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/FreeRTOS/queue.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/FreeRTOS/queue.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/FreeRTOS/queue.o + .debug_macro 0x0000000000000000 0x5b ./Middlewares/FreeRTOS/queue.o + .debug_macro 0x0000000000000000 0x94 ./Middlewares/FreeRTOS/queue.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/FreeRTOS/queue.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/FreeRTOS/queue.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/FreeRTOS/queue.o + .debug_macro 0x0000000000000000 0x10e ./Middlewares/FreeRTOS/queue.o + .debug_macro 0x0000000000000000 0x8d ./Middlewares/FreeRTOS/queue.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/FreeRTOS/queue.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/FreeRTOS/queue.o + .debug_macro 0x0000000000000000 0x57 ./Middlewares/FreeRTOS/queue.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/FreeRTOS/queue.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/FreeRTOS/queue.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/FreeRTOS/queue.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/FreeRTOS/queue.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/FreeRTOS/queue.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/FreeRTOS/queue.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/FreeRTOS/queue.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/FreeRTOS/queue.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/FreeRTOS/queue.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/FreeRTOS/queue.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/FreeRTOS/queue.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/FreeRTOS/queue.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/FreeRTOS/queue.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/FreeRTOS/queue.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/FreeRTOS/queue.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/FreeRTOS/queue.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/FreeRTOS/queue.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/FreeRTOS/queue.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/FreeRTOS/queue.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/FreeRTOS/queue.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/FreeRTOS/queue.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/FreeRTOS/queue.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/FreeRTOS/queue.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/stream_buffer.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/stream_buffer.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/stream_buffer.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/stream_buffer.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/stream_buffer.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/stream_buffer.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/stream_buffer.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/stream_buffer.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/stream_buffer.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/stream_buffer.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/stream_buffer.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/stream_buffer.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/stream_buffer.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/stream_buffer.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/stream_buffer.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/stream_buffer.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/stream_buffer.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/stream_buffer.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/stream_buffer.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/stream_buffer.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/stream_buffer.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/stream_buffer.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/stream_buffer.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/stream_buffer.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/stream_buffer.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/stream_buffer.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/stream_buffer.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/stream_buffer.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/stream_buffer.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/stream_buffer.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/stream_buffer.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/stream_buffer.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/stream_buffer.o + .text 0x0000000000000000 0x0 ./Middlewares/FreeRTOS/stream_buffer.o + .data 0x0000000000000000 0x0 ./Middlewares/FreeRTOS/stream_buffer.o + .bss 0x0000000000000000 0x0 ./Middlewares/FreeRTOS/stream_buffer.o + .text.prvBytesInBuffer + 0x0000000000000000 0x12 ./Middlewares/FreeRTOS/stream_buffer.o + .text.prvReadBytesFromBuffer + 0x0000000000000000 0x84 ./Middlewares/FreeRTOS/stream_buffer.o + .text.prvInitialiseNewStreamBuffer + 0x0000000000000000 0x4a ./Middlewares/FreeRTOS/stream_buffer.o + .text.prvWriteBytesToBuffer.part.0 + 0x0000000000000000 0x7a ./Middlewares/FreeRTOS/stream_buffer.o + .text.prvWriteMessageToBuffer + 0x0000000000000000 0x58 ./Middlewares/FreeRTOS/stream_buffer.o + .text.xStreamBufferGenericCreate + 0x0000000000000000 0x84 ./Middlewares/FreeRTOS/stream_buffer.o + .text.xStreamBufferGenericCreateStatic + 0x0000000000000000 0xb6 ./Middlewares/FreeRTOS/stream_buffer.o + .text.vStreamBufferDelete + 0x0000000000000000 0x2a ./Middlewares/FreeRTOS/stream_buffer.o + .text.xStreamBufferReset + 0x0000000000000000 0x50 ./Middlewares/FreeRTOS/stream_buffer.o + .text.xStreamBufferSetTriggerLevel + 0x0000000000000000 0x2c ./Middlewares/FreeRTOS/stream_buffer.o + .text.xStreamBufferSpacesAvailable + 0x0000000000000000 0x2c ./Middlewares/FreeRTOS/stream_buffer.o + .text.xStreamBufferBytesAvailable + 0x0000000000000000 0x1c ./Middlewares/FreeRTOS/stream_buffer.o + .text.xStreamBufferSend + 0x0000000000000000 0x11a ./Middlewares/FreeRTOS/stream_buffer.o + .text.xStreamBufferSendFromISR + 0x0000000000000000 0xa6 ./Middlewares/FreeRTOS/stream_buffer.o + .text.xStreamBufferReceive + 0x0000000000000000 0xfe ./Middlewares/FreeRTOS/stream_buffer.o + .text.xStreamBufferNextMessageLengthBytes + 0x0000000000000000 0x5e ./Middlewares/FreeRTOS/stream_buffer.o + .text.xStreamBufferReceiveFromISR + 0x0000000000000000 0xc4 ./Middlewares/FreeRTOS/stream_buffer.o + .text.xStreamBufferIsEmpty + 0x0000000000000000 0x24 ./Middlewares/FreeRTOS/stream_buffer.o + .text.xStreamBufferIsFull + 0x0000000000000000 0x30 ./Middlewares/FreeRTOS/stream_buffer.o + .text.xStreamBufferSendCompletedFromISR + 0x0000000000000000 0x54 ./Middlewares/FreeRTOS/stream_buffer.o + .text.xStreamBufferReceiveCompletedFromISR + 0x0000000000000000 0x54 ./Middlewares/FreeRTOS/stream_buffer.o + .text.uxStreamBufferGetStreamBufferNumber + 0x0000000000000000 0x4 ./Middlewares/FreeRTOS/stream_buffer.o + .text.vStreamBufferSetStreamBufferNumber + 0x0000000000000000 0x4 ./Middlewares/FreeRTOS/stream_buffer.o + .text.ucStreamBufferGetStreamBufferType + 0x0000000000000000 0x8 ./Middlewares/FreeRTOS/stream_buffer.o + .debug_info 0x0000000000000000 0x1db6 ./Middlewares/FreeRTOS/stream_buffer.o + .debug_abbrev 0x0000000000000000 0x457 ./Middlewares/FreeRTOS/stream_buffer.o + .debug_loclists + 0x0000000000000000 0xec5 ./Middlewares/FreeRTOS/stream_buffer.o + .debug_aranges + 0x0000000000000000 0xd8 ./Middlewares/FreeRTOS/stream_buffer.o + .debug_rnglists + 0x0000000000000000 0xda ./Middlewares/FreeRTOS/stream_buffer.o + .debug_macro 0x0000000000000000 0x1e0 ./Middlewares/FreeRTOS/stream_buffer.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/FreeRTOS/stream_buffer.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/FreeRTOS/stream_buffer.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/FreeRTOS/stream_buffer.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/FreeRTOS/stream_buffer.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/FreeRTOS/stream_buffer.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/FreeRTOS/stream_buffer.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/FreeRTOS/stream_buffer.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/FreeRTOS/stream_buffer.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/FreeRTOS/stream_buffer.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/FreeRTOS/stream_buffer.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/FreeRTOS/stream_buffer.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/FreeRTOS/stream_buffer.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/FreeRTOS/stream_buffer.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/FreeRTOS/stream_buffer.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/FreeRTOS/stream_buffer.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/FreeRTOS/stream_buffer.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/FreeRTOS/stream_buffer.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/FreeRTOS/stream_buffer.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/FreeRTOS/stream_buffer.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/FreeRTOS/stream_buffer.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/FreeRTOS/stream_buffer.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/FreeRTOS/stream_buffer.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/FreeRTOS/stream_buffer.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/FreeRTOS/stream_buffer.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/FreeRTOS/stream_buffer.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/FreeRTOS/stream_buffer.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/FreeRTOS/stream_buffer.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/FreeRTOS/stream_buffer.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/FreeRTOS/stream_buffer.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/FreeRTOS/stream_buffer.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/FreeRTOS/stream_buffer.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/FreeRTOS/stream_buffer.o + .debug_macro 0x0000000000000000 0x18 ./Middlewares/FreeRTOS/stream_buffer.o + .debug_line 0x0000000000000000 0x19db ./Middlewares/FreeRTOS/stream_buffer.o + .debug_str 0x0000000000000000 0xbf70 ./Middlewares/FreeRTOS/stream_buffer.o + .comment 0x0000000000000000 0x44 ./Middlewares/FreeRTOS/stream_buffer.o + .debug_frame 0x0000000000000000 0x294 ./Middlewares/FreeRTOS/stream_buffer.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/FreeRTOS/stream_buffer.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/tasks.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/tasks.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/tasks.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/tasks.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/tasks.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/tasks.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/tasks.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/tasks.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/tasks.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/tasks.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/tasks.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/tasks.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/tasks.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/tasks.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/tasks.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/tasks.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/tasks.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/tasks.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/tasks.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/tasks.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/tasks.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/tasks.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/tasks.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/tasks.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/tasks.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/tasks.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/tasks.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/tasks.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/tasks.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/tasks.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/tasks.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/tasks.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/tasks.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/tasks.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/tasks.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/tasks.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/tasks.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/tasks.o + .text 0x0000000000000000 0x0 ./Middlewares/FreeRTOS/tasks.o + .data 0x0000000000000000 0x0 ./Middlewares/FreeRTOS/tasks.o + .bss 0x0000000000000000 0x0 ./Middlewares/FreeRTOS/tasks.o + .text.prvTaskIsTaskSuspended + 0x0000000000000000 0x3c ./Middlewares/FreeRTOS/tasks.o + .text.vTaskDelete + 0x0000000000000000 0xb4 ./Middlewares/FreeRTOS/tasks.o + .text.eTaskGetState + 0x0000000000000000 0x88 ./Middlewares/FreeRTOS/tasks.o + .text.uxTaskPriorityGet + 0x0000000000000000 0x20 ./Middlewares/FreeRTOS/tasks.o + .text.uxTaskPriorityGetFromISR + 0x0000000000000000 0x34 ./Middlewares/FreeRTOS/tasks.o + .text.vTaskPrioritySet + 0x0000000000000000 0xc8 ./Middlewares/FreeRTOS/tasks.o + .text.vTaskResume + 0x0000000000000000 0x8c ./Middlewares/FreeRTOS/tasks.o + .text.xTaskResumeFromISR + 0x0000000000000000 0xa8 ./Middlewares/FreeRTOS/tasks.o + .text.vTaskEndScheduler + 0x0000000000000000 0x24 ./Middlewares/FreeRTOS/tasks.o + .text.uxTaskGetNumberOfTasks + 0x0000000000000000 0xc ./Middlewares/FreeRTOS/tasks.o + .text.pcTaskGetName + 0x0000000000000000 0x28 ./Middlewares/FreeRTOS/tasks.o + .text.vTaskDelayUntil + 0x0000000000000000 0xa0 ./Middlewares/FreeRTOS/tasks.o + .text.xTaskGetApplicationTaskTag + 0x0000000000000000 0x20 ./Middlewares/FreeRTOS/tasks.o + .text.xTaskGetApplicationTaskTagFromISR + 0x0000000000000000 0x2c ./Middlewares/FreeRTOS/tasks.o + .text.vTaskSuspend + 0x0000000000000000 0xb8 ./Middlewares/FreeRTOS/tasks.o + .text.vTaskPlaceOnUnorderedEventList + 0x0000000000000000 0x60 ./Middlewares/FreeRTOS/tasks.o + .text.vTaskRemoveFromUnorderedEventList + 0x0000000000000000 0x90 ./Middlewares/FreeRTOS/tasks.o + .text.vTaskSetTimeOutState + 0x0000000000000000 0x3c ./Middlewares/FreeRTOS/tasks.o + .text.uxTaskGetTaskNumber + 0x0000000000000000 0x6 ./Middlewares/FreeRTOS/tasks.o + .text.vTaskSetTaskNumber + 0x0000000000000000 0x6 ./Middlewares/FreeRTOS/tasks.o + .text.vTaskGetInfo + 0x0000000000000000 0x78 ./Middlewares/FreeRTOS/tasks.o + .text.prvListTasksWithinSingleList + 0x0000000000000000 0x5c ./Middlewares/FreeRTOS/tasks.o + .text.uxTaskGetSystemState + 0x0000000000000000 0xa0 ./Middlewares/FreeRTOS/tasks.o + .text.uxTaskGetStackHighWaterMark + 0x0000000000000000 0x20 ./Middlewares/FreeRTOS/tasks.o + .text.uxTaskResetEventItemValue + 0x0000000000000000 0x18 ./Middlewares/FreeRTOS/tasks.o + .text.ulTaskNotifyTake + 0x0000000000000000 0x64 ./Middlewares/FreeRTOS/tasks.o + .text.xTaskNotifyWait + 0x0000000000000000 0x8c ./Middlewares/FreeRTOS/tasks.o + .text.xTaskGenericNotify + 0x0000000000000000 0xf8 ./Middlewares/FreeRTOS/tasks.o + .text.xTaskGenericNotifyFromISR + 0x0000000000000000 0x12c ./Middlewares/FreeRTOS/tasks.o + .text.vTaskNotifyGiveFromISR + 0x0000000000000000 0xd4 ./Middlewares/FreeRTOS/tasks.o + .text.xTaskNotifyStateClear + 0x0000000000000000 0x30 ./Middlewares/FreeRTOS/tasks.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/FreeRTOS/tasks.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/FreeRTOS/tasks.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/FreeRTOS/tasks.o + .debug_macro 0x0000000000000000 0x5b ./Middlewares/FreeRTOS/tasks.o + .debug_macro 0x0000000000000000 0x94 ./Middlewares/FreeRTOS/tasks.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/FreeRTOS/tasks.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/FreeRTOS/tasks.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/FreeRTOS/tasks.o + .debug_macro 0x0000000000000000 0x10e ./Middlewares/FreeRTOS/tasks.o + .debug_macro 0x0000000000000000 0x8d ./Middlewares/FreeRTOS/tasks.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/FreeRTOS/tasks.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/FreeRTOS/tasks.o + .debug_macro 0x0000000000000000 0x57 ./Middlewares/FreeRTOS/tasks.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/FreeRTOS/tasks.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/FreeRTOS/tasks.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/FreeRTOS/tasks.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/FreeRTOS/tasks.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/FreeRTOS/tasks.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/FreeRTOS/tasks.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/FreeRTOS/tasks.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/FreeRTOS/tasks.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/FreeRTOS/tasks.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/FreeRTOS/tasks.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/FreeRTOS/tasks.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/FreeRTOS/tasks.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/FreeRTOS/tasks.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/FreeRTOS/tasks.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/FreeRTOS/tasks.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/FreeRTOS/tasks.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/FreeRTOS/tasks.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/FreeRTOS/tasks.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/FreeRTOS/tasks.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/FreeRTOS/tasks.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/FreeRTOS/tasks.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/FreeRTOS/tasks.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/FreeRTOS/tasks.o + .debug_macro 0x0000000000000000 0x91 ./Middlewares/FreeRTOS/tasks.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/timers.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/timers.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/timers.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/timers.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/timers.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/timers.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/timers.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/timers.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/timers.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/timers.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/timers.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/timers.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/timers.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/timers.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/timers.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/timers.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/timers.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/timers.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/timers.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/timers.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/timers.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/timers.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/timers.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/timers.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/timers.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/timers.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/timers.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/timers.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/timers.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/timers.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/timers.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/timers.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/timers.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/timers.o + .group 0x0000000000000000 0xc ./Middlewares/FreeRTOS/timers.o + .text 0x0000000000000000 0x0 ./Middlewares/FreeRTOS/timers.o + .data 0x0000000000000000 0x0 ./Middlewares/FreeRTOS/timers.o + .bss 0x0000000000000000 0x0 ./Middlewares/FreeRTOS/timers.o + .text.prvInitialiseNewTimer + 0x0000000000000000 0x50 ./Middlewares/FreeRTOS/timers.o + .text.xTimerCreate + 0x0000000000000000 0x34 ./Middlewares/FreeRTOS/timers.o + .text.xTimerCreateStatic + 0x0000000000000000 0x56 ./Middlewares/FreeRTOS/timers.o + .text.xTimerGetTimerDaemonTaskHandle + 0x0000000000000000 0x24 ./Middlewares/FreeRTOS/timers.o + .text.xTimerGetPeriod + 0x0000000000000000 0x1c ./Middlewares/FreeRTOS/timers.o + .text.vTimerSetReloadMode + 0x0000000000000000 0x3e ./Middlewares/FreeRTOS/timers.o + .text.xTimerGetExpiryTime + 0x0000000000000000 0x1c ./Middlewares/FreeRTOS/timers.o + .text.pcTimerGetName + 0x0000000000000000 0x1c ./Middlewares/FreeRTOS/timers.o + .text.xTimerIsTimerActive + 0x0000000000000000 0x34 ./Middlewares/FreeRTOS/timers.o + .text.pvTimerGetTimerID + 0x0000000000000000 0x2e ./Middlewares/FreeRTOS/timers.o + .text.vTimerSetTimerID + 0x0000000000000000 0x2c ./Middlewares/FreeRTOS/timers.o + .text.xTimerPendFunctionCallFromISR + 0x0000000000000000 0x28 ./Middlewares/FreeRTOS/timers.o + .text.xTimerPendFunctionCall + 0x0000000000000000 0x44 ./Middlewares/FreeRTOS/timers.o + .text.uxTimerGetTimerNumber + 0x0000000000000000 0x4 ./Middlewares/FreeRTOS/timers.o + .text.vTimerSetTimerNumber + 0x0000000000000000 0x4 ./Middlewares/FreeRTOS/timers.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/FreeRTOS/timers.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/FreeRTOS/timers.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/FreeRTOS/timers.o + .debug_macro 0x0000000000000000 0x5b ./Middlewares/FreeRTOS/timers.o + .debug_macro 0x0000000000000000 0x94 ./Middlewares/FreeRTOS/timers.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/FreeRTOS/timers.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/FreeRTOS/timers.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/FreeRTOS/timers.o + .debug_macro 0x0000000000000000 0x10e ./Middlewares/FreeRTOS/timers.o + .debug_macro 0x0000000000000000 0x8d ./Middlewares/FreeRTOS/timers.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/FreeRTOS/timers.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/FreeRTOS/timers.o + .debug_macro 0x0000000000000000 0x57 ./Middlewares/FreeRTOS/timers.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/FreeRTOS/timers.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/FreeRTOS/timers.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/FreeRTOS/timers.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/FreeRTOS/timers.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/FreeRTOS/timers.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/FreeRTOS/timers.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/FreeRTOS/timers.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/FreeRTOS/timers.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/FreeRTOS/timers.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/FreeRTOS/timers.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/FreeRTOS/timers.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/FreeRTOS/timers.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/FreeRTOS/timers.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/FreeRTOS/timers.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/FreeRTOS/timers.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/FreeRTOS/timers.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/FreeRTOS/timers.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/FreeRTOS/timers.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/FreeRTOS/timers.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/FreeRTOS/timers.o + .debug_macro 0x0000000000000000 0x87 ./Middlewares/FreeRTOS/timers.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jaricom.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jaricom.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jaricom.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jaricom.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jaricom.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jaricom.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jaricom.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jaricom.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jaricom.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jaricom.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jaricom.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jaricom.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jaricom.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jaricom.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jaricom.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jaricom.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jaricom.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jaricom.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jaricom.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jaricom.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jaricom.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jaricom.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jaricom.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jaricom.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jaricom.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jaricom.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jaricom.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jaricom.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jaricom.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jaricom.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jaricom.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jaricom.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jaricom.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jaricom.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jaricom.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jaricom.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jaricom.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jaricom.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jaricom.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jaricom.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jaricom.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jaricom.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jaricom.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jaricom.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jaricom.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jaricom.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jaricom.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jaricom.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jaricom.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jaricom.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jaricom.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jaricom.o + .text 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jaricom.o + .data 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jaricom.o + .bss 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jaricom.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LibJPEG/jaricom.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jaricom.o + .debug_macro 0x0000000000000000 0x5b ./Middlewares/LibJPEG/jaricom.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LibJPEG/jaricom.o + .debug_macro 0x0000000000000000 0x94 ./Middlewares/LibJPEG/jaricom.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jaricom.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jaricom.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jaricom.o + .debug_macro 0x0000000000000000 0x57 ./Middlewares/LibJPEG/jaricom.o + .debug_macro 0x0000000000000000 0x97 ./Middlewares/LibJPEG/jaricom.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LibJPEG/jaricom.o + .debug_macro 0x0000000000000000 0xfd ./Middlewares/LibJPEG/jaricom.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jaricom.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jaricom.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jaricom.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jaricom.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jaricom.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LibJPEG/jaricom.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LibJPEG/jaricom.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jaricom.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LibJPEG/jaricom.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jaricom.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jaricom.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LibJPEG/jaricom.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LibJPEG/jaricom.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LibJPEG/jaricom.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LibJPEG/jaricom.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/LibJPEG/jaricom.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/LibJPEG/jaricom.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/LibJPEG/jaricom.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jaricom.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/LibJPEG/jaricom.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/LibJPEG/jaricom.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/LibJPEG/jaricom.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jaricom.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LibJPEG/jaricom.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jaricom.o + .debug_macro 0x0000000000000000 0x74 ./Middlewares/LibJPEG/jaricom.o + .debug_macro 0x0000000000000000 0xdd ./Middlewares/LibJPEG/jaricom.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jaricom.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jaricom.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LibJPEG/jaricom.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jaricom.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LibJPEG/jaricom.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jaricom.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LibJPEG/jaricom.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jaricom.o + .debug_macro 0x0000000000000000 0xe6 ./Middlewares/LibJPEG/jaricom.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapimin.o + .text 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jcapimin.o + .data 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jcapimin.o + .bss 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jcapimin.o + .text.jpeg_CreateCompress + 0x0000000000000000 0xb4 ./Middlewares/LibJPEG/jcapimin.o + .text.jpeg_destroy_compress + 0x0000000000000000 0x4 ./Middlewares/LibJPEG/jcapimin.o + .text.jpeg_abort_compress + 0x0000000000000000 0x4 ./Middlewares/LibJPEG/jcapimin.o + .text.jpeg_suppress_tables + 0x0000000000000000 0x36 ./Middlewares/LibJPEG/jcapimin.o + .text.jpeg_finish_compress + 0x0000000000000000 0xa6 ./Middlewares/LibJPEG/jcapimin.o + .text.jpeg_write_marker + 0x0000000000000000 0x50 ./Middlewares/LibJPEG/jcapimin.o + .text.jpeg_write_m_header + 0x0000000000000000 0x3a ./Middlewares/LibJPEG/jcapimin.o + .text.jpeg_write_m_byte + 0x0000000000000000 0x8 ./Middlewares/LibJPEG/jcapimin.o + .text.jpeg_write_tables + 0x0000000000000000 0x42 ./Middlewares/LibJPEG/jcapimin.o + .debug_info 0x0000000000000000 0x18ce ./Middlewares/LibJPEG/jcapimin.o + .debug_abbrev 0x0000000000000000 0x328 ./Middlewares/LibJPEG/jcapimin.o + .debug_loclists + 0x0000000000000000 0x2a9 ./Middlewares/LibJPEG/jcapimin.o + .debug_aranges + 0x0000000000000000 0x60 ./Middlewares/LibJPEG/jcapimin.o + .debug_rnglists + 0x0000000000000000 0x51 ./Middlewares/LibJPEG/jcapimin.o + .debug_macro 0x0000000000000000 0x284 ./Middlewares/LibJPEG/jcapimin.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LibJPEG/jcapimin.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jcapimin.o + .debug_macro 0x0000000000000000 0x5b ./Middlewares/LibJPEG/jcapimin.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LibJPEG/jcapimin.o + .debug_macro 0x0000000000000000 0x94 ./Middlewares/LibJPEG/jcapimin.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jcapimin.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jcapimin.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcapimin.o + .debug_macro 0x0000000000000000 0x57 ./Middlewares/LibJPEG/jcapimin.o + .debug_macro 0x0000000000000000 0x97 ./Middlewares/LibJPEG/jcapimin.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LibJPEG/jcapimin.o + .debug_macro 0x0000000000000000 0xfd ./Middlewares/LibJPEG/jcapimin.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jcapimin.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcapimin.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jcapimin.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jcapimin.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jcapimin.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LibJPEG/jcapimin.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LibJPEG/jcapimin.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jcapimin.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LibJPEG/jcapimin.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcapimin.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcapimin.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LibJPEG/jcapimin.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LibJPEG/jcapimin.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LibJPEG/jcapimin.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LibJPEG/jcapimin.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/LibJPEG/jcapimin.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/LibJPEG/jcapimin.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/LibJPEG/jcapimin.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jcapimin.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/LibJPEG/jcapimin.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/LibJPEG/jcapimin.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/LibJPEG/jcapimin.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jcapimin.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LibJPEG/jcapimin.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jcapimin.o + .debug_macro 0x0000000000000000 0x74 ./Middlewares/LibJPEG/jcapimin.o + .debug_macro 0x0000000000000000 0xdd ./Middlewares/LibJPEG/jcapimin.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jcapimin.o + .debug_macro 0x0000000000000000 0x6b ./Middlewares/LibJPEG/jcapimin.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcapimin.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LibJPEG/jcapimin.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcapimin.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LibJPEG/jcapimin.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcapimin.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LibJPEG/jcapimin.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcapimin.o + .debug_macro 0x0000000000000000 0x124 ./Middlewares/LibJPEG/jcapimin.o + .debug_macro 0x0000000000000000 0xe6 ./Middlewares/LibJPEG/jcapimin.o + .debug_macro 0x0000000000000000 0x8f ./Middlewares/LibJPEG/jcapimin.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jcapimin.o + .debug_line 0x0000000000000000 0xbfe ./Middlewares/LibJPEG/jcapimin.o + .debug_str 0x0000000000000000 0xf265 ./Middlewares/LibJPEG/jcapimin.o + .comment 0x0000000000000000 0x44 ./Middlewares/LibJPEG/jcapimin.o + .debug_frame 0x0000000000000000 0x100 ./Middlewares/LibJPEG/jcapimin.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jcapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcapistd.o + .text 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jcapistd.o + .data 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jcapistd.o + .bss 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jcapistd.o + .text.jpeg_start_compress + 0x0000000000000000 0x58 ./Middlewares/LibJPEG/jcapistd.o + .text.jpeg_write_scanlines + 0x0000000000000000 0x86 ./Middlewares/LibJPEG/jcapistd.o + .text.jpeg_write_raw_data + 0x0000000000000000 0x8e ./Middlewares/LibJPEG/jcapistd.o + .debug_info 0x0000000000000000 0x1624 ./Middlewares/LibJPEG/jcapistd.o + .debug_abbrev 0x0000000000000000 0x264 ./Middlewares/LibJPEG/jcapistd.o + .debug_loclists + 0x0000000000000000 0x125 ./Middlewares/LibJPEG/jcapistd.o + .debug_aranges + 0x0000000000000000 0x30 ./Middlewares/LibJPEG/jcapistd.o + .debug_rnglists + 0x0000000000000000 0x21 ./Middlewares/LibJPEG/jcapistd.o + .debug_macro 0x0000000000000000 0x284 ./Middlewares/LibJPEG/jcapistd.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LibJPEG/jcapistd.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jcapistd.o + .debug_macro 0x0000000000000000 0x5b ./Middlewares/LibJPEG/jcapistd.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LibJPEG/jcapistd.o + .debug_macro 0x0000000000000000 0x94 ./Middlewares/LibJPEG/jcapistd.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jcapistd.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jcapistd.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcapistd.o + .debug_macro 0x0000000000000000 0x57 ./Middlewares/LibJPEG/jcapistd.o + .debug_macro 0x0000000000000000 0x97 ./Middlewares/LibJPEG/jcapistd.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LibJPEG/jcapistd.o + .debug_macro 0x0000000000000000 0xfd ./Middlewares/LibJPEG/jcapistd.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jcapistd.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcapistd.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jcapistd.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jcapistd.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jcapistd.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LibJPEG/jcapistd.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LibJPEG/jcapistd.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jcapistd.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LibJPEG/jcapistd.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcapistd.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcapistd.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LibJPEG/jcapistd.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LibJPEG/jcapistd.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LibJPEG/jcapistd.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LibJPEG/jcapistd.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/LibJPEG/jcapistd.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/LibJPEG/jcapistd.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/LibJPEG/jcapistd.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jcapistd.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/LibJPEG/jcapistd.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/LibJPEG/jcapistd.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/LibJPEG/jcapistd.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jcapistd.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LibJPEG/jcapistd.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jcapistd.o + .debug_macro 0x0000000000000000 0x74 ./Middlewares/LibJPEG/jcapistd.o + .debug_macro 0x0000000000000000 0xdd ./Middlewares/LibJPEG/jcapistd.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jcapistd.o + .debug_macro 0x0000000000000000 0x6b ./Middlewares/LibJPEG/jcapistd.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcapistd.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LibJPEG/jcapistd.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcapistd.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LibJPEG/jcapistd.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcapistd.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LibJPEG/jcapistd.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcapistd.o + .debug_macro 0x0000000000000000 0x124 ./Middlewares/LibJPEG/jcapistd.o + .debug_macro 0x0000000000000000 0xe6 ./Middlewares/LibJPEG/jcapistd.o + .debug_macro 0x0000000000000000 0x8f ./Middlewares/LibJPEG/jcapistd.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jcapistd.o + .debug_line 0x0000000000000000 0x9ec ./Middlewares/LibJPEG/jcapistd.o + .debug_str 0x0000000000000000 0xf1c3 ./Middlewares/LibJPEG/jcapistd.o + .comment 0x0000000000000000 0x44 ./Middlewares/LibJPEG/jcapistd.o + .debug_frame 0x0000000000000000 0x70 ./Middlewares/LibJPEG/jcapistd.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jcapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcarith.o + .text 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jcarith.o + .data 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jcarith.o + .bss 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jcarith.o + .text.start_pass + 0x0000000000000000 0x124 ./Middlewares/LibJPEG/jcarith.o + .text.emit_byte + 0x0000000000000000 0x30 ./Middlewares/LibJPEG/jcarith.o + .text.finish_pass + 0x0000000000000000 0x134 ./Middlewares/LibJPEG/jcarith.o + .text.arith_encode + 0x0000000000000000 0x144 ./Middlewares/LibJPEG/jcarith.o + .text.emit_restart + 0x0000000000000000 0x9c ./Middlewares/LibJPEG/jcarith.o + .text.encode_mcu + 0x0000000000000000 0x2ac ./Middlewares/LibJPEG/jcarith.o + .text.encode_mcu_AC_refine + 0x0000000000000000 0x146 ./Middlewares/LibJPEG/jcarith.o + .text.encode_mcu_DC_refine + 0x0000000000000000 0x64 ./Middlewares/LibJPEG/jcarith.o + .text.encode_mcu_AC_first + 0x0000000000000000 0x19e ./Middlewares/LibJPEG/jcarith.o + .text.encode_mcu_DC_first + 0x0000000000000000 0x172 ./Middlewares/LibJPEG/jcarith.o + .text.jinit_arith_encoder + 0x0000000000000000 0x38 ./Middlewares/LibJPEG/jcarith.o + .debug_info 0x0000000000000000 0x2556 ./Middlewares/LibJPEG/jcarith.o + .debug_abbrev 0x0000000000000000 0x3be ./Middlewares/LibJPEG/jcarith.o + .debug_loclists + 0x0000000000000000 0x1142 ./Middlewares/LibJPEG/jcarith.o + .debug_aranges + 0x0000000000000000 0x70 ./Middlewares/LibJPEG/jcarith.o + .debug_rnglists + 0x0000000000000000 0x63 ./Middlewares/LibJPEG/jcarith.o + .debug_macro 0x0000000000000000 0x29c ./Middlewares/LibJPEG/jcarith.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LibJPEG/jcarith.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jcarith.o + .debug_macro 0x0000000000000000 0x5b ./Middlewares/LibJPEG/jcarith.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LibJPEG/jcarith.o + .debug_macro 0x0000000000000000 0x94 ./Middlewares/LibJPEG/jcarith.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jcarith.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jcarith.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcarith.o + .debug_macro 0x0000000000000000 0x57 ./Middlewares/LibJPEG/jcarith.o + .debug_macro 0x0000000000000000 0x97 ./Middlewares/LibJPEG/jcarith.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LibJPEG/jcarith.o + .debug_macro 0x0000000000000000 0xfd ./Middlewares/LibJPEG/jcarith.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jcarith.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcarith.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jcarith.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jcarith.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jcarith.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LibJPEG/jcarith.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LibJPEG/jcarith.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jcarith.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LibJPEG/jcarith.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcarith.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcarith.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LibJPEG/jcarith.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LibJPEG/jcarith.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LibJPEG/jcarith.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LibJPEG/jcarith.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/LibJPEG/jcarith.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/LibJPEG/jcarith.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/LibJPEG/jcarith.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jcarith.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/LibJPEG/jcarith.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/LibJPEG/jcarith.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/LibJPEG/jcarith.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jcarith.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LibJPEG/jcarith.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jcarith.o + .debug_macro 0x0000000000000000 0x74 ./Middlewares/LibJPEG/jcarith.o + .debug_macro 0x0000000000000000 0xdd ./Middlewares/LibJPEG/jcarith.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jcarith.o + .debug_macro 0x0000000000000000 0x6b ./Middlewares/LibJPEG/jcarith.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcarith.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LibJPEG/jcarith.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcarith.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LibJPEG/jcarith.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcarith.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LibJPEG/jcarith.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcarith.o + .debug_macro 0x0000000000000000 0x124 ./Middlewares/LibJPEG/jcarith.o + .debug_macro 0x0000000000000000 0xe6 ./Middlewares/LibJPEG/jcarith.o + .debug_macro 0x0000000000000000 0x8f ./Middlewares/LibJPEG/jcarith.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jcarith.o + .debug_line 0x0000000000000000 0x174f ./Middlewares/LibJPEG/jcarith.o + .debug_str 0x0000000000000000 0xf2d4 ./Middlewares/LibJPEG/jcarith.o + .comment 0x0000000000000000 0x44 ./Middlewares/LibJPEG/jcarith.o + .debug_frame 0x0000000000000000 0x1c0 ./Middlewares/LibJPEG/jcarith.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jcarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccoefct.o + .text 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jccoefct.o + .data 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jccoefct.o + .bss 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jccoefct.o + .text.start_iMCU_row + 0x0000000000000000 0x2e ./Middlewares/LibJPEG/jccoefct.o + .text.start_pass_coef + 0x0000000000000000 0x74 ./Middlewares/LibJPEG/jccoefct.o + .text.compress_output + 0x0000000000000000 0x116 ./Middlewares/LibJPEG/jccoefct.o + .text.compress_first_pass + 0x0000000000000000 0x196 ./Middlewares/LibJPEG/jccoefct.o + .text.compress_data + 0x0000000000000000 0x196 ./Middlewares/LibJPEG/jccoefct.o + .text.jinit_c_coef_controller + 0x0000000000000000 0x94 ./Middlewares/LibJPEG/jccoefct.o + .debug_info 0x0000000000000000 0x1be4 ./Middlewares/LibJPEG/jccoefct.o + .debug_abbrev 0x0000000000000000 0x36e ./Middlewares/LibJPEG/jccoefct.o + .debug_loclists + 0x0000000000000000 0x7b2 ./Middlewares/LibJPEG/jccoefct.o + .debug_aranges + 0x0000000000000000 0x48 ./Middlewares/LibJPEG/jccoefct.o + .debug_rnglists + 0x0000000000000000 0x41 ./Middlewares/LibJPEG/jccoefct.o + .debug_macro 0x0000000000000000 0x28a ./Middlewares/LibJPEG/jccoefct.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LibJPEG/jccoefct.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jccoefct.o + .debug_macro 0x0000000000000000 0x5b ./Middlewares/LibJPEG/jccoefct.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LibJPEG/jccoefct.o + .debug_macro 0x0000000000000000 0x94 ./Middlewares/LibJPEG/jccoefct.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jccoefct.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jccoefct.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jccoefct.o + .debug_macro 0x0000000000000000 0x57 ./Middlewares/LibJPEG/jccoefct.o + .debug_macro 0x0000000000000000 0x97 ./Middlewares/LibJPEG/jccoefct.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LibJPEG/jccoefct.o + .debug_macro 0x0000000000000000 0xfd ./Middlewares/LibJPEG/jccoefct.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jccoefct.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jccoefct.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jccoefct.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jccoefct.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jccoefct.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LibJPEG/jccoefct.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LibJPEG/jccoefct.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jccoefct.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LibJPEG/jccoefct.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jccoefct.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jccoefct.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LibJPEG/jccoefct.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LibJPEG/jccoefct.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LibJPEG/jccoefct.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LibJPEG/jccoefct.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/LibJPEG/jccoefct.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/LibJPEG/jccoefct.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/LibJPEG/jccoefct.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jccoefct.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/LibJPEG/jccoefct.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/LibJPEG/jccoefct.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/LibJPEG/jccoefct.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jccoefct.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LibJPEG/jccoefct.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jccoefct.o + .debug_macro 0x0000000000000000 0x74 ./Middlewares/LibJPEG/jccoefct.o + .debug_macro 0x0000000000000000 0xdd ./Middlewares/LibJPEG/jccoefct.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jccoefct.o + .debug_macro 0x0000000000000000 0x6b ./Middlewares/LibJPEG/jccoefct.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jccoefct.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LibJPEG/jccoefct.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jccoefct.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LibJPEG/jccoefct.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jccoefct.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LibJPEG/jccoefct.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jccoefct.o + .debug_macro 0x0000000000000000 0x124 ./Middlewares/LibJPEG/jccoefct.o + .debug_macro 0x0000000000000000 0xe6 ./Middlewares/LibJPEG/jccoefct.o + .debug_macro 0x0000000000000000 0x8f ./Middlewares/LibJPEG/jccoefct.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jccoefct.o + .debug_line 0x0000000000000000 0x1013 ./Middlewares/LibJPEG/jccoefct.o + .debug_str 0x0000000000000000 0xf314 ./Middlewares/LibJPEG/jccoefct.o + .comment 0x0000000000000000 0x44 ./Middlewares/LibJPEG/jccoefct.o + .debug_frame 0x0000000000000000 0x128 ./Middlewares/LibJPEG/jccoefct.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jccoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jccolor.o + .text 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jccolor.o + .data 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jccolor.o + .bss 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jccolor.o + .text.rgb_ycc_start + 0x0000000000000000 0x9c ./Middlewares/LibJPEG/jccolor.o + .text.rgb_ycc_convert + 0x0000000000000000 0xba ./Middlewares/LibJPEG/jccolor.o + .text.rgb_gray_convert + 0x0000000000000000 0x60 ./Middlewares/LibJPEG/jccolor.o + .text.cmyk_ycck_convert + 0x0000000000000000 0xf2 ./Middlewares/LibJPEG/jccolor.o + .text.grayscale_convert + 0x0000000000000000 0x32 ./Middlewares/LibJPEG/jccolor.o + .text.rgb_convert + 0x0000000000000000 0x5c ./Middlewares/LibJPEG/jccolor.o + .text.null_convert + 0x0000000000000000 0x48 ./Middlewares/LibJPEG/jccolor.o + .text.null_method + 0x0000000000000000 0x2 ./Middlewares/LibJPEG/jccolor.o + .text.jinit_color_converter + 0x0000000000000000 0x168 ./Middlewares/LibJPEG/jccolor.o + .debug_info 0x0000000000000000 0x1bc6 ./Middlewares/LibJPEG/jccolor.o + .debug_abbrev 0x0000000000000000 0x2da ./Middlewares/LibJPEG/jccolor.o + .debug_loclists + 0x0000000000000000 0x857 ./Middlewares/LibJPEG/jccolor.o + .debug_aranges + 0x0000000000000000 0x60 ./Middlewares/LibJPEG/jccolor.o + .debug_rnglists + 0x0000000000000000 0x47 ./Middlewares/LibJPEG/jccolor.o + .debug_macro 0x0000000000000000 0x2d8 ./Middlewares/LibJPEG/jccolor.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LibJPEG/jccolor.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jccolor.o + .debug_macro 0x0000000000000000 0x5b ./Middlewares/LibJPEG/jccolor.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LibJPEG/jccolor.o + .debug_macro 0x0000000000000000 0x94 ./Middlewares/LibJPEG/jccolor.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jccolor.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jccolor.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jccolor.o + .debug_macro 0x0000000000000000 0x57 ./Middlewares/LibJPEG/jccolor.o + .debug_macro 0x0000000000000000 0x97 ./Middlewares/LibJPEG/jccolor.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LibJPEG/jccolor.o + .debug_macro 0x0000000000000000 0xfd ./Middlewares/LibJPEG/jccolor.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jccolor.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jccolor.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jccolor.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jccolor.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jccolor.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LibJPEG/jccolor.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LibJPEG/jccolor.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jccolor.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LibJPEG/jccolor.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jccolor.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jccolor.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LibJPEG/jccolor.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LibJPEG/jccolor.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LibJPEG/jccolor.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LibJPEG/jccolor.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/LibJPEG/jccolor.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/LibJPEG/jccolor.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/LibJPEG/jccolor.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jccolor.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/LibJPEG/jccolor.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/LibJPEG/jccolor.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/LibJPEG/jccolor.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jccolor.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LibJPEG/jccolor.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jccolor.o + .debug_macro 0x0000000000000000 0x74 ./Middlewares/LibJPEG/jccolor.o + .debug_macro 0x0000000000000000 0xdd ./Middlewares/LibJPEG/jccolor.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jccolor.o + .debug_macro 0x0000000000000000 0x6b ./Middlewares/LibJPEG/jccolor.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jccolor.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LibJPEG/jccolor.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jccolor.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LibJPEG/jccolor.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jccolor.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LibJPEG/jccolor.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jccolor.o + .debug_macro 0x0000000000000000 0x124 ./Middlewares/LibJPEG/jccolor.o + .debug_macro 0x0000000000000000 0xe6 ./Middlewares/LibJPEG/jccolor.o + .debug_macro 0x0000000000000000 0x8f ./Middlewares/LibJPEG/jccolor.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jccolor.o + .debug_line 0x0000000000000000 0x10de ./Middlewares/LibJPEG/jccolor.o + .debug_str 0x0000000000000000 0xf3ca ./Middlewares/LibJPEG/jccolor.o + .comment 0x0000000000000000 0x44 ./Middlewares/LibJPEG/jccolor.o + .debug_frame 0x0000000000000000 0x14c ./Middlewares/LibJPEG/jccolor.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jccolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcdctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcdctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcdctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcdctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcdctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcdctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcdctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcdctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcdctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcdctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcdctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcdctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcdctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcdctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcdctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcdctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcdctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcdctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcdctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcdctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcdctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcdctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcdctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcdctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcdctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcdctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcdctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcdctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcdctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcdctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcdctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcdctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcdctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcdctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcdctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcdctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcdctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcdctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcdctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcdctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcdctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcdctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcdctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcdctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcdctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcdctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcdctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcdctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcdctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcdctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcdctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcdctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcdctmgr.o + .text 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jcdctmgr.o + .data 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jcdctmgr.o + .bss 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jcdctmgr.o + .text.forward_DCT + 0x0000000000000000 0x8e ./Middlewares/LibJPEG/jcdctmgr.o + .text.forward_DCT_float + 0x0000000000000000 0x88 ./Middlewares/LibJPEG/jcdctmgr.o + .text.start_pass_fdctmgr + 0x0000000000000000 0x414 ./Middlewares/LibJPEG/jcdctmgr.o + .text.jinit_forward_dct + 0x0000000000000000 0x38 ./Middlewares/LibJPEG/jcdctmgr.o + .rodata.aanscalefactor.0 + 0x0000000000000000 0x40 ./Middlewares/LibJPEG/jcdctmgr.o + .rodata.aanscales.1 + 0x0000000000000000 0x80 ./Middlewares/LibJPEG/jcdctmgr.o + .debug_info 0x0000000000000000 0x1dd0 ./Middlewares/LibJPEG/jcdctmgr.o + .debug_abbrev 0x0000000000000000 0x2dd ./Middlewares/LibJPEG/jcdctmgr.o + .debug_loclists + 0x0000000000000000 0x45f ./Middlewares/LibJPEG/jcdctmgr.o + .debug_aranges + 0x0000000000000000 0x38 ./Middlewares/LibJPEG/jcdctmgr.o + .debug_rnglists + 0x0000000000000000 0x4e ./Middlewares/LibJPEG/jcdctmgr.o + .debug_macro 0x0000000000000000 0x2a0 ./Middlewares/LibJPEG/jcdctmgr.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LibJPEG/jcdctmgr.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jcdctmgr.o + .debug_macro 0x0000000000000000 0x5b ./Middlewares/LibJPEG/jcdctmgr.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LibJPEG/jcdctmgr.o + .debug_macro 0x0000000000000000 0x94 ./Middlewares/LibJPEG/jcdctmgr.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jcdctmgr.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jcdctmgr.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcdctmgr.o + .debug_macro 0x0000000000000000 0x57 ./Middlewares/LibJPEG/jcdctmgr.o + .debug_macro 0x0000000000000000 0x97 ./Middlewares/LibJPEG/jcdctmgr.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LibJPEG/jcdctmgr.o + .debug_macro 0x0000000000000000 0xfd ./Middlewares/LibJPEG/jcdctmgr.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jcdctmgr.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcdctmgr.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jcdctmgr.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jcdctmgr.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jcdctmgr.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LibJPEG/jcdctmgr.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LibJPEG/jcdctmgr.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jcdctmgr.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LibJPEG/jcdctmgr.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcdctmgr.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcdctmgr.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LibJPEG/jcdctmgr.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LibJPEG/jcdctmgr.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LibJPEG/jcdctmgr.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LibJPEG/jcdctmgr.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/LibJPEG/jcdctmgr.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/LibJPEG/jcdctmgr.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/LibJPEG/jcdctmgr.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jcdctmgr.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/LibJPEG/jcdctmgr.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/LibJPEG/jcdctmgr.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/LibJPEG/jcdctmgr.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jcdctmgr.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LibJPEG/jcdctmgr.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jcdctmgr.o + .debug_macro 0x0000000000000000 0x74 ./Middlewares/LibJPEG/jcdctmgr.o + .debug_macro 0x0000000000000000 0xdd ./Middlewares/LibJPEG/jcdctmgr.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jcdctmgr.o + .debug_macro 0x0000000000000000 0x6b ./Middlewares/LibJPEG/jcdctmgr.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcdctmgr.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LibJPEG/jcdctmgr.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcdctmgr.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LibJPEG/jcdctmgr.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcdctmgr.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LibJPEG/jcdctmgr.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcdctmgr.o + .debug_macro 0x0000000000000000 0x124 ./Middlewares/LibJPEG/jcdctmgr.o + .debug_macro 0x0000000000000000 0xe6 ./Middlewares/LibJPEG/jcdctmgr.o + .debug_macro 0x0000000000000000 0x8f ./Middlewares/LibJPEG/jcdctmgr.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jcdctmgr.o + .debug_macro 0x0000000000000000 0x40 ./Middlewares/LibJPEG/jcdctmgr.o + .debug_line 0x0000000000000000 0xe63 ./Middlewares/LibJPEG/jcdctmgr.o + .debug_str 0x0000000000000000 0xf64d ./Middlewares/LibJPEG/jcdctmgr.o + .comment 0x0000000000000000 0x44 ./Middlewares/LibJPEG/jcdctmgr.o + .debug_frame 0x0000000000000000 0xe0 ./Middlewares/LibJPEG/jcdctmgr.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jcdctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jchuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jchuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jchuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jchuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jchuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jchuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jchuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jchuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jchuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jchuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jchuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jchuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jchuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jchuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jchuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jchuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jchuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jchuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jchuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jchuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jchuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jchuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jchuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jchuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jchuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jchuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jchuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jchuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jchuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jchuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jchuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jchuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jchuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jchuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jchuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jchuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jchuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jchuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jchuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jchuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jchuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jchuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jchuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jchuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jchuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jchuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jchuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jchuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jchuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jchuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jchuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jchuff.o + .text 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jchuff.o + .data 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jchuff.o + .bss 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jchuff.o + .text.dump_buffer_s + 0x0000000000000000 0x1a ./Middlewares/LibJPEG/jchuff.o + .text.dump_buffer_e + 0x0000000000000000 0x24 ./Middlewares/LibJPEG/jchuff.o + .text.emit_bits_s + 0x0000000000000000 0x8a ./Middlewares/LibJPEG/jchuff.o + .text.emit_bits_e + 0x0000000000000000 0x82 ./Middlewares/LibJPEG/jchuff.o + .text.encode_mcu_huff + 0x0000000000000000 0x260 ./Middlewares/LibJPEG/jchuff.o + .text.encode_mcu_gather + 0x0000000000000000 0x15a ./Middlewares/LibJPEG/jchuff.o + .text.jpeg_make_c_derived_tbl + 0x0000000000000000 0x154 ./Middlewares/LibJPEG/jchuff.o + .text.start_pass_huff + 0x0000000000000000 0x180 ./Middlewares/LibJPEG/jchuff.o + .text.jpeg_gen_optimal_table + 0x0000000000000000 0x1a8 ./Middlewares/LibJPEG/jchuff.o + .text.emit_ac_symbol + 0x0000000000000000 0x32 ./Middlewares/LibJPEG/jchuff.o + .text.emit_buffered_bits + 0x0000000000000000 0x20 ./Middlewares/LibJPEG/jchuff.o + .text.emit_eobrun + 0x0000000000000000 0x52 ./Middlewares/LibJPEG/jchuff.o + .text.emit_restart_e + 0x0000000000000000 0x72 ./Middlewares/LibJPEG/jchuff.o + .text.encode_mcu_DC_first + 0x0000000000000000 0xf6 ./Middlewares/LibJPEG/jchuff.o + .text.encode_mcu_DC_refine + 0x0000000000000000 0x7a ./Middlewares/LibJPEG/jchuff.o + .text.encode_mcu_AC_first + 0x0000000000000000 0x124 ./Middlewares/LibJPEG/jchuff.o + .text.finish_pass_gather + 0x0000000000000000 0xe4 ./Middlewares/LibJPEG/jchuff.o + .text.encode_mcu_AC_refine + 0x0000000000000000 0x18a ./Middlewares/LibJPEG/jchuff.o + .text.finish_pass_huff + 0x0000000000000000 0x98 ./Middlewares/LibJPEG/jchuff.o + .text.jinit_huff_encoder + 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jchuff.o + .debug_info 0x0000000000000000 0x2eae ./Middlewares/LibJPEG/jchuff.o + .debug_abbrev 0x0000000000000000 0x482 ./Middlewares/LibJPEG/jchuff.o + .debug_loclists + 0x0000000000000000 0x1534 ./Middlewares/LibJPEG/jchuff.o + .debug_aranges + 0x0000000000000000 0xb8 ./Middlewares/LibJPEG/jchuff.o + .debug_rnglists + 0x0000000000000000 0x14b ./Middlewares/LibJPEG/jchuff.o + .debug_macro 0x0000000000000000 0x2ba ./Middlewares/LibJPEG/jchuff.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LibJPEG/jchuff.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jchuff.o + .debug_macro 0x0000000000000000 0x5b ./Middlewares/LibJPEG/jchuff.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LibJPEG/jchuff.o + .debug_macro 0x0000000000000000 0x94 ./Middlewares/LibJPEG/jchuff.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jchuff.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jchuff.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jchuff.o + .debug_macro 0x0000000000000000 0x57 ./Middlewares/LibJPEG/jchuff.o + .debug_macro 0x0000000000000000 0x97 ./Middlewares/LibJPEG/jchuff.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LibJPEG/jchuff.o + .debug_macro 0x0000000000000000 0xfd ./Middlewares/LibJPEG/jchuff.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jchuff.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jchuff.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jchuff.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jchuff.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jchuff.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LibJPEG/jchuff.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LibJPEG/jchuff.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jchuff.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LibJPEG/jchuff.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jchuff.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jchuff.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LibJPEG/jchuff.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LibJPEG/jchuff.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LibJPEG/jchuff.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LibJPEG/jchuff.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/LibJPEG/jchuff.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/LibJPEG/jchuff.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/LibJPEG/jchuff.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jchuff.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/LibJPEG/jchuff.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/LibJPEG/jchuff.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/LibJPEG/jchuff.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jchuff.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LibJPEG/jchuff.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jchuff.o + .debug_macro 0x0000000000000000 0x74 ./Middlewares/LibJPEG/jchuff.o + .debug_macro 0x0000000000000000 0xdd ./Middlewares/LibJPEG/jchuff.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jchuff.o + .debug_macro 0x0000000000000000 0x6b ./Middlewares/LibJPEG/jchuff.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jchuff.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LibJPEG/jchuff.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jchuff.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LibJPEG/jchuff.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jchuff.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LibJPEG/jchuff.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jchuff.o + .debug_macro 0x0000000000000000 0x124 ./Middlewares/LibJPEG/jchuff.o + .debug_macro 0x0000000000000000 0xe6 ./Middlewares/LibJPEG/jchuff.o + .debug_macro 0x0000000000000000 0x8f ./Middlewares/LibJPEG/jchuff.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jchuff.o + .debug_line 0x0000000000000000 0x1f86 ./Middlewares/LibJPEG/jchuff.o + .debug_str 0x0000000000000000 0xf6b6 ./Middlewares/LibJPEG/jchuff.o + .comment 0x0000000000000000 0x44 ./Middlewares/LibJPEG/jchuff.o + .debug_frame 0x0000000000000000 0x314 ./Middlewares/LibJPEG/jchuff.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jchuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcinit.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcinit.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcinit.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcinit.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcinit.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcinit.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcinit.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcinit.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcinit.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcinit.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcinit.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcinit.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcinit.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcinit.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcinit.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcinit.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcinit.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcinit.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcinit.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcinit.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcinit.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcinit.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcinit.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcinit.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcinit.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcinit.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcinit.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcinit.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcinit.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcinit.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcinit.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcinit.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcinit.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcinit.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcinit.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcinit.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcinit.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcinit.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcinit.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcinit.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcinit.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcinit.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcinit.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcinit.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcinit.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcinit.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcinit.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcinit.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcinit.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcinit.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcinit.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcinit.o + .text 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jcinit.o + .data 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jcinit.o + .bss 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jcinit.o + .text.jinit_compress_master + 0x0000000000000000 0x7c ./Middlewares/LibJPEG/jcinit.o + .debug_info 0x0000000000000000 0x127e ./Middlewares/LibJPEG/jcinit.o + .debug_abbrev 0x0000000000000000 0x223 ./Middlewares/LibJPEG/jcinit.o + .debug_loclists + 0x0000000000000000 0x4d ./Middlewares/LibJPEG/jcinit.o + .debug_aranges + 0x0000000000000000 0x20 ./Middlewares/LibJPEG/jcinit.o + .debug_rnglists + 0x0000000000000000 0x13 ./Middlewares/LibJPEG/jcinit.o + .debug_macro 0x0000000000000000 0x284 ./Middlewares/LibJPEG/jcinit.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LibJPEG/jcinit.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jcinit.o + .debug_macro 0x0000000000000000 0x5b ./Middlewares/LibJPEG/jcinit.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LibJPEG/jcinit.o + .debug_macro 0x0000000000000000 0x94 ./Middlewares/LibJPEG/jcinit.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jcinit.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jcinit.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcinit.o + .debug_macro 0x0000000000000000 0x57 ./Middlewares/LibJPEG/jcinit.o + .debug_macro 0x0000000000000000 0x97 ./Middlewares/LibJPEG/jcinit.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LibJPEG/jcinit.o + .debug_macro 0x0000000000000000 0xfd ./Middlewares/LibJPEG/jcinit.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jcinit.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcinit.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jcinit.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jcinit.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jcinit.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LibJPEG/jcinit.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LibJPEG/jcinit.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jcinit.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LibJPEG/jcinit.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcinit.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcinit.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LibJPEG/jcinit.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LibJPEG/jcinit.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LibJPEG/jcinit.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LibJPEG/jcinit.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/LibJPEG/jcinit.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/LibJPEG/jcinit.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/LibJPEG/jcinit.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jcinit.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/LibJPEG/jcinit.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/LibJPEG/jcinit.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/LibJPEG/jcinit.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jcinit.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LibJPEG/jcinit.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jcinit.o + .debug_macro 0x0000000000000000 0x74 ./Middlewares/LibJPEG/jcinit.o + .debug_macro 0x0000000000000000 0xdd ./Middlewares/LibJPEG/jcinit.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jcinit.o + .debug_macro 0x0000000000000000 0x6b ./Middlewares/LibJPEG/jcinit.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcinit.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LibJPEG/jcinit.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcinit.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LibJPEG/jcinit.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcinit.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LibJPEG/jcinit.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcinit.o + .debug_macro 0x0000000000000000 0x124 ./Middlewares/LibJPEG/jcinit.o + .debug_macro 0x0000000000000000 0xe6 ./Middlewares/LibJPEG/jcinit.o + .debug_macro 0x0000000000000000 0x8f ./Middlewares/LibJPEG/jcinit.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jcinit.o + .debug_line 0x0000000000000000 0x8b6 ./Middlewares/LibJPEG/jcinit.o + .debug_str 0x0000000000000000 0xe934 ./Middlewares/LibJPEG/jcinit.o + .comment 0x0000000000000000 0x44 ./Middlewares/LibJPEG/jcinit.o + .debug_frame 0x0000000000000000 0x38 ./Middlewares/LibJPEG/jcinit.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jcinit.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmainct.o + .text 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jcmainct.o + .data 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jcmainct.o + .bss 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jcmainct.o + .text.process_data_simple_main + 0x0000000000000000 0x92 ./Middlewares/LibJPEG/jcmainct.o + .text.start_pass_main + 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jcmainct.o + .text.jinit_c_main_controller + 0x0000000000000000 0x6c ./Middlewares/LibJPEG/jcmainct.o + .debug_info 0x0000000000000000 0x165f ./Middlewares/LibJPEG/jcmainct.o + .debug_abbrev 0x0000000000000000 0x2dd ./Middlewares/LibJPEG/jcmainct.o + .debug_loclists + 0x0000000000000000 0x19b ./Middlewares/LibJPEG/jcmainct.o + .debug_aranges + 0x0000000000000000 0x30 ./Middlewares/LibJPEG/jcmainct.o + .debug_rnglists + 0x0000000000000000 0x2c ./Middlewares/LibJPEG/jcmainct.o + .debug_macro 0x0000000000000000 0x28a ./Middlewares/LibJPEG/jcmainct.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LibJPEG/jcmainct.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jcmainct.o + .debug_macro 0x0000000000000000 0x5b ./Middlewares/LibJPEG/jcmainct.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LibJPEG/jcmainct.o + .debug_macro 0x0000000000000000 0x94 ./Middlewares/LibJPEG/jcmainct.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jcmainct.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jcmainct.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcmainct.o + .debug_macro 0x0000000000000000 0x57 ./Middlewares/LibJPEG/jcmainct.o + .debug_macro 0x0000000000000000 0x97 ./Middlewares/LibJPEG/jcmainct.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LibJPEG/jcmainct.o + .debug_macro 0x0000000000000000 0xfd ./Middlewares/LibJPEG/jcmainct.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jcmainct.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcmainct.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jcmainct.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jcmainct.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jcmainct.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LibJPEG/jcmainct.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LibJPEG/jcmainct.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jcmainct.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LibJPEG/jcmainct.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcmainct.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcmainct.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LibJPEG/jcmainct.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LibJPEG/jcmainct.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LibJPEG/jcmainct.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LibJPEG/jcmainct.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/LibJPEG/jcmainct.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/LibJPEG/jcmainct.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/LibJPEG/jcmainct.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jcmainct.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/LibJPEG/jcmainct.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/LibJPEG/jcmainct.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/LibJPEG/jcmainct.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jcmainct.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LibJPEG/jcmainct.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jcmainct.o + .debug_macro 0x0000000000000000 0x74 ./Middlewares/LibJPEG/jcmainct.o + .debug_macro 0x0000000000000000 0xdd ./Middlewares/LibJPEG/jcmainct.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jcmainct.o + .debug_macro 0x0000000000000000 0x6b ./Middlewares/LibJPEG/jcmainct.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcmainct.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LibJPEG/jcmainct.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcmainct.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LibJPEG/jcmainct.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcmainct.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LibJPEG/jcmainct.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcmainct.o + .debug_macro 0x0000000000000000 0x124 ./Middlewares/LibJPEG/jcmainct.o + .debug_macro 0x0000000000000000 0xe6 ./Middlewares/LibJPEG/jcmainct.o + .debug_macro 0x0000000000000000 0x8f ./Middlewares/LibJPEG/jcmainct.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jcmainct.o + .debug_line 0x0000000000000000 0x9da ./Middlewares/LibJPEG/jcmainct.o + .debug_str 0x0000000000000000 0xf1f8 ./Middlewares/LibJPEG/jcmainct.o + .comment 0x0000000000000000 0x44 ./Middlewares/LibJPEG/jcmainct.o + .debug_frame 0x0000000000000000 0x8c ./Middlewares/LibJPEG/jcmainct.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jcmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmarker.o + .text 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jcmarker.o + .data 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jcmarker.o + .bss 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jcmarker.o + .text.emit_byte + 0x0000000000000000 0x2e ./Middlewares/LibJPEG/jcmarker.o + .text.emit_marker + 0x0000000000000000 0x18 ./Middlewares/LibJPEG/jcmarker.o + .text.write_file_trailer + 0x0000000000000000 0x6 ./Middlewares/LibJPEG/jcmarker.o + .text.emit_2bytes + 0x0000000000000000 0x1a ./Middlewares/LibJPEG/jcmarker.o + .text.write_marker_header + 0x0000000000000000 0x2e ./Middlewares/LibJPEG/jcmarker.o + .text.emit_dqt + 0x0000000000000000 0xa8 ./Middlewares/LibJPEG/jcmarker.o + .text.emit_dht + 0x0000000000000000 0x8c ./Middlewares/LibJPEG/jcmarker.o + .text.write_tables_only + 0x0000000000000000 0x5e ./Middlewares/LibJPEG/jcmarker.o + .text.emit_sof + 0x0000000000000000 0x8c ./Middlewares/LibJPEG/jcmarker.o + .text.write_scan_header + 0x0000000000000000 0x1d2 ./Middlewares/LibJPEG/jcmarker.o + .text.write_frame_header + 0x0000000000000000 0xf6 ./Middlewares/LibJPEG/jcmarker.o + .text.write_file_header + 0x0000000000000000 0x10a ./Middlewares/LibJPEG/jcmarker.o + .text.write_marker_byte + 0x0000000000000000 0x4 ./Middlewares/LibJPEG/jcmarker.o + .text.jinit_marker_writer + 0x0000000000000000 0x50 ./Middlewares/LibJPEG/jcmarker.o + .debug_info 0x0000000000000000 0x24f1 ./Middlewares/LibJPEG/jcmarker.o + .debug_abbrev 0x0000000000000000 0x457 ./Middlewares/LibJPEG/jcmarker.o + .debug_loclists + 0x0000000000000000 0x6fb ./Middlewares/LibJPEG/jcmarker.o + .debug_aranges + 0x0000000000000000 0x88 ./Middlewares/LibJPEG/jcmarker.o + .debug_rnglists + 0x0000000000000000 0xb7 ./Middlewares/LibJPEG/jcmarker.o + .debug_macro 0x0000000000000000 0x284 ./Middlewares/LibJPEG/jcmarker.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LibJPEG/jcmarker.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jcmarker.o + .debug_macro 0x0000000000000000 0x5b ./Middlewares/LibJPEG/jcmarker.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LibJPEG/jcmarker.o + .debug_macro 0x0000000000000000 0x94 ./Middlewares/LibJPEG/jcmarker.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jcmarker.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jcmarker.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcmarker.o + .debug_macro 0x0000000000000000 0x57 ./Middlewares/LibJPEG/jcmarker.o + .debug_macro 0x0000000000000000 0x97 ./Middlewares/LibJPEG/jcmarker.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LibJPEG/jcmarker.o + .debug_macro 0x0000000000000000 0xfd ./Middlewares/LibJPEG/jcmarker.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jcmarker.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcmarker.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jcmarker.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jcmarker.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jcmarker.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LibJPEG/jcmarker.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LibJPEG/jcmarker.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jcmarker.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LibJPEG/jcmarker.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcmarker.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcmarker.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LibJPEG/jcmarker.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LibJPEG/jcmarker.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LibJPEG/jcmarker.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LibJPEG/jcmarker.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/LibJPEG/jcmarker.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/LibJPEG/jcmarker.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/LibJPEG/jcmarker.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jcmarker.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/LibJPEG/jcmarker.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/LibJPEG/jcmarker.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/LibJPEG/jcmarker.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jcmarker.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LibJPEG/jcmarker.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jcmarker.o + .debug_macro 0x0000000000000000 0x74 ./Middlewares/LibJPEG/jcmarker.o + .debug_macro 0x0000000000000000 0xdd ./Middlewares/LibJPEG/jcmarker.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jcmarker.o + .debug_macro 0x0000000000000000 0x6b ./Middlewares/LibJPEG/jcmarker.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcmarker.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LibJPEG/jcmarker.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcmarker.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LibJPEG/jcmarker.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcmarker.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LibJPEG/jcmarker.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcmarker.o + .debug_macro 0x0000000000000000 0x124 ./Middlewares/LibJPEG/jcmarker.o + .debug_macro 0x0000000000000000 0xe6 ./Middlewares/LibJPEG/jcmarker.o + .debug_macro 0x0000000000000000 0x8f ./Middlewares/LibJPEG/jcmarker.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jcmarker.o + .debug_line 0x0000000000000000 0x1030 ./Middlewares/LibJPEG/jcmarker.o + .debug_str 0x0000000000000000 0xf3db ./Middlewares/LibJPEG/jcmarker.o + .comment 0x0000000000000000 0x44 ./Middlewares/LibJPEG/jcmarker.o + .debug_frame 0x0000000000000000 0x1e8 ./Middlewares/LibJPEG/jcmarker.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jcmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcmaster.o + .text 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jcmaster.o + .data 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jcmaster.o + .bss 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jcmaster.o + .text.validate_script + 0x0000000000000000 0x262 ./Middlewares/LibJPEG/jcmaster.o + .text.select_scan_parameters + 0x0000000000000000 0xa4 ./Middlewares/LibJPEG/jcmaster.o + .text.pass_startup + 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jcmaster.o + .text.finish_pass_master + 0x0000000000000000 0x48 ./Middlewares/LibJPEG/jcmaster.o + .text.per_scan_setup + 0x0000000000000000 0x12a ./Middlewares/LibJPEG/jcmaster.o + .text.prepare_for_pass + 0x0000000000000000 0x130 ./Middlewares/LibJPEG/jcmaster.o + .text.jpeg_calc_jpeg_dimensions + 0x0000000000000000 0x1da ./Middlewares/LibJPEG/jcmaster.o + .text.jinit_c_master_control + 0x0000000000000000 0x3b4 ./Middlewares/LibJPEG/jcmaster.o + .debug_info 0x0000000000000000 0x1f09 ./Middlewares/LibJPEG/jcmaster.o + .debug_abbrev 0x0000000000000000 0x3d0 ./Middlewares/LibJPEG/jcmaster.o + .debug_loclists + 0x0000000000000000 0x541 ./Middlewares/LibJPEG/jcmaster.o + .debug_aranges + 0x0000000000000000 0x58 ./Middlewares/LibJPEG/jcmaster.o + .debug_rnglists + 0x0000000000000000 0x74 ./Middlewares/LibJPEG/jcmaster.o + .debug_macro 0x0000000000000000 0x28b ./Middlewares/LibJPEG/jcmaster.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LibJPEG/jcmaster.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jcmaster.o + .debug_macro 0x0000000000000000 0x5b ./Middlewares/LibJPEG/jcmaster.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LibJPEG/jcmaster.o + .debug_macro 0x0000000000000000 0x94 ./Middlewares/LibJPEG/jcmaster.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jcmaster.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jcmaster.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcmaster.o + .debug_macro 0x0000000000000000 0x57 ./Middlewares/LibJPEG/jcmaster.o + .debug_macro 0x0000000000000000 0x97 ./Middlewares/LibJPEG/jcmaster.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LibJPEG/jcmaster.o + .debug_macro 0x0000000000000000 0xfd ./Middlewares/LibJPEG/jcmaster.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jcmaster.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcmaster.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jcmaster.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jcmaster.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jcmaster.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LibJPEG/jcmaster.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LibJPEG/jcmaster.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jcmaster.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LibJPEG/jcmaster.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcmaster.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcmaster.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LibJPEG/jcmaster.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LibJPEG/jcmaster.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LibJPEG/jcmaster.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LibJPEG/jcmaster.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/LibJPEG/jcmaster.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/LibJPEG/jcmaster.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/LibJPEG/jcmaster.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jcmaster.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/LibJPEG/jcmaster.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/LibJPEG/jcmaster.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/LibJPEG/jcmaster.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jcmaster.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LibJPEG/jcmaster.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jcmaster.o + .debug_macro 0x0000000000000000 0x74 ./Middlewares/LibJPEG/jcmaster.o + .debug_macro 0x0000000000000000 0xdd ./Middlewares/LibJPEG/jcmaster.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jcmaster.o + .debug_macro 0x0000000000000000 0x6b ./Middlewares/LibJPEG/jcmaster.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcmaster.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LibJPEG/jcmaster.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcmaster.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LibJPEG/jcmaster.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcmaster.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LibJPEG/jcmaster.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcmaster.o + .debug_macro 0x0000000000000000 0x124 ./Middlewares/LibJPEG/jcmaster.o + .debug_macro 0x0000000000000000 0xe6 ./Middlewares/LibJPEG/jcmaster.o + .debug_macro 0x0000000000000000 0x8f ./Middlewares/LibJPEG/jcmaster.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jcmaster.o + .debug_line 0x0000000000000000 0x15f9 ./Middlewares/LibJPEG/jcmaster.o + .debug_str 0x0000000000000000 0xf390 ./Middlewares/LibJPEG/jcmaster.o + .comment 0x0000000000000000 0x44 ./Middlewares/LibJPEG/jcmaster.o + .debug_frame 0x0000000000000000 0x124 ./Middlewares/LibJPEG/jcmaster.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jcmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcomapi.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcomapi.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcomapi.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcomapi.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcomapi.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcomapi.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcomapi.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcomapi.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcomapi.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcomapi.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcomapi.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcomapi.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcomapi.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcomapi.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcomapi.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcomapi.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcomapi.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcomapi.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcomapi.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcomapi.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcomapi.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcomapi.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcomapi.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcomapi.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcomapi.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcomapi.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcomapi.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcomapi.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcomapi.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcomapi.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcomapi.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcomapi.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcomapi.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcomapi.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcomapi.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcomapi.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcomapi.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcomapi.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcomapi.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcomapi.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcomapi.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcomapi.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcomapi.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcomapi.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcomapi.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcomapi.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcomapi.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcomapi.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcomapi.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcomapi.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcomapi.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcomapi.o + .text 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jcomapi.o + .data 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jcomapi.o + .bss 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jcomapi.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LibJPEG/jcomapi.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jcomapi.o + .debug_macro 0x0000000000000000 0x5b ./Middlewares/LibJPEG/jcomapi.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LibJPEG/jcomapi.o + .debug_macro 0x0000000000000000 0x94 ./Middlewares/LibJPEG/jcomapi.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jcomapi.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jcomapi.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcomapi.o + .debug_macro 0x0000000000000000 0x57 ./Middlewares/LibJPEG/jcomapi.o + .debug_macro 0x0000000000000000 0x97 ./Middlewares/LibJPEG/jcomapi.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LibJPEG/jcomapi.o + .debug_macro 0x0000000000000000 0xfd ./Middlewares/LibJPEG/jcomapi.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jcomapi.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcomapi.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jcomapi.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jcomapi.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jcomapi.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LibJPEG/jcomapi.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LibJPEG/jcomapi.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jcomapi.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LibJPEG/jcomapi.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcomapi.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcomapi.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LibJPEG/jcomapi.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LibJPEG/jcomapi.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LibJPEG/jcomapi.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LibJPEG/jcomapi.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/LibJPEG/jcomapi.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/LibJPEG/jcomapi.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/LibJPEG/jcomapi.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jcomapi.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/LibJPEG/jcomapi.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/LibJPEG/jcomapi.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/LibJPEG/jcomapi.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jcomapi.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LibJPEG/jcomapi.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jcomapi.o + .debug_macro 0x0000000000000000 0x74 ./Middlewares/LibJPEG/jcomapi.o + .debug_macro 0x0000000000000000 0xdd ./Middlewares/LibJPEG/jcomapi.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jcomapi.o + .debug_macro 0x0000000000000000 0x6b ./Middlewares/LibJPEG/jcomapi.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcomapi.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LibJPEG/jcomapi.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcomapi.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LibJPEG/jcomapi.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcomapi.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LibJPEG/jcomapi.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcomapi.o + .debug_macro 0x0000000000000000 0x124 ./Middlewares/LibJPEG/jcomapi.o + .debug_macro 0x0000000000000000 0xe6 ./Middlewares/LibJPEG/jcomapi.o + .debug_macro 0x0000000000000000 0x8f ./Middlewares/LibJPEG/jcomapi.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jcomapi.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcparam.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcparam.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcparam.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcparam.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcparam.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcparam.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcparam.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcparam.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcparam.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcparam.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcparam.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcparam.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcparam.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcparam.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcparam.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcparam.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcparam.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcparam.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcparam.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcparam.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcparam.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcparam.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcparam.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcparam.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcparam.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcparam.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcparam.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcparam.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcparam.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcparam.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcparam.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcparam.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcparam.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcparam.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcparam.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcparam.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcparam.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcparam.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcparam.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcparam.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcparam.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcparam.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcparam.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcparam.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcparam.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcparam.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcparam.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcparam.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcparam.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcparam.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcparam.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcparam.o + .text 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jcparam.o + .data 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jcparam.o + .bss 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jcparam.o + .text.add_huff_table + 0x0000000000000000 0x64 ./Middlewares/LibJPEG/jcparam.o + .text.fill_dc_scans + 0x0000000000000000 0x4e ./Middlewares/LibJPEG/jcparam.o + .text.jpeg_add_quant_table + 0x0000000000000000 0x84 ./Middlewares/LibJPEG/jcparam.o + .text.jpeg_default_qtables + 0x0000000000000000 0x2c ./Middlewares/LibJPEG/jcparam.o + .text.jpeg_set_linear_quality + 0x0000000000000000 0x30 ./Middlewares/LibJPEG/jcparam.o + .text.jpeg_quality_scaling + 0x0000000000000000 0x24 ./Middlewares/LibJPEG/jcparam.o + .text.jpeg_set_quality + 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcparam.o + .text.jpeg_set_colorspace + 0x0000000000000000 0x1b6 ./Middlewares/LibJPEG/jcparam.o + .text.jpeg_default_colorspace + 0x0000000000000000 0x32 ./Middlewares/LibJPEG/jcparam.o + .text.jpeg_set_defaults + 0x0000000000000000 0xfc ./Middlewares/LibJPEG/jcparam.o + .text.jpeg_simple_progression + 0x0000000000000000 0x1a8 ./Middlewares/LibJPEG/jcparam.o + .rodata.bits_ac_chrominance.1 + 0x0000000000000000 0x11 ./Middlewares/LibJPEG/jcparam.o + .rodata.bits_ac_luminance.5 + 0x0000000000000000 0x11 ./Middlewares/LibJPEG/jcparam.o + .rodata.bits_dc_chrominance.3 + 0x0000000000000000 0x11 ./Middlewares/LibJPEG/jcparam.o + .rodata.bits_dc_luminance.7 + 0x0000000000000000 0x11 ./Middlewares/LibJPEG/jcparam.o + .rodata.std_chrominance_quant_tbl + 0x0000000000000000 0x100 ./Middlewares/LibJPEG/jcparam.o + .rodata.std_luminance_quant_tbl + 0x0000000000000000 0x100 ./Middlewares/LibJPEG/jcparam.o + .rodata.val_ac_chrominance.0 + 0x0000000000000000 0xa2 ./Middlewares/LibJPEG/jcparam.o + .rodata.val_ac_luminance.4 + 0x0000000000000000 0xa2 ./Middlewares/LibJPEG/jcparam.o + .rodata.val_dc_chrominance.2 + 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcparam.o + .rodata.val_dc_luminance.6 + 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcparam.o + .debug_info 0x0000000000000000 0x2277 ./Middlewares/LibJPEG/jcparam.o + .debug_abbrev 0x0000000000000000 0x465 ./Middlewares/LibJPEG/jcparam.o + .debug_loclists + 0x0000000000000000 0x9a0 ./Middlewares/LibJPEG/jcparam.o + .debug_aranges + 0x0000000000000000 0x70 ./Middlewares/LibJPEG/jcparam.o + .debug_rnglists + 0x0000000000000000 0xc9 ./Middlewares/LibJPEG/jcparam.o + .debug_macro 0x0000000000000000 0x28b ./Middlewares/LibJPEG/jcparam.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LibJPEG/jcparam.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jcparam.o + .debug_macro 0x0000000000000000 0x5b ./Middlewares/LibJPEG/jcparam.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LibJPEG/jcparam.o + .debug_macro 0x0000000000000000 0x94 ./Middlewares/LibJPEG/jcparam.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jcparam.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jcparam.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcparam.o + .debug_macro 0x0000000000000000 0x57 ./Middlewares/LibJPEG/jcparam.o + .debug_macro 0x0000000000000000 0x97 ./Middlewares/LibJPEG/jcparam.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LibJPEG/jcparam.o + .debug_macro 0x0000000000000000 0xfd ./Middlewares/LibJPEG/jcparam.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jcparam.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcparam.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jcparam.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jcparam.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jcparam.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LibJPEG/jcparam.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LibJPEG/jcparam.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jcparam.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LibJPEG/jcparam.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcparam.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcparam.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LibJPEG/jcparam.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LibJPEG/jcparam.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LibJPEG/jcparam.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LibJPEG/jcparam.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/LibJPEG/jcparam.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/LibJPEG/jcparam.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/LibJPEG/jcparam.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jcparam.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/LibJPEG/jcparam.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/LibJPEG/jcparam.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/LibJPEG/jcparam.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jcparam.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LibJPEG/jcparam.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jcparam.o + .debug_macro 0x0000000000000000 0x74 ./Middlewares/LibJPEG/jcparam.o + .debug_macro 0x0000000000000000 0xdd ./Middlewares/LibJPEG/jcparam.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jcparam.o + .debug_macro 0x0000000000000000 0x6b ./Middlewares/LibJPEG/jcparam.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcparam.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LibJPEG/jcparam.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcparam.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LibJPEG/jcparam.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcparam.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LibJPEG/jcparam.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcparam.o + .debug_macro 0x0000000000000000 0x124 ./Middlewares/LibJPEG/jcparam.o + .debug_macro 0x0000000000000000 0xe6 ./Middlewares/LibJPEG/jcparam.o + .debug_macro 0x0000000000000000 0x8f ./Middlewares/LibJPEG/jcparam.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jcparam.o + .debug_line 0x0000000000000000 0x10c7 ./Middlewares/LibJPEG/jcparam.o + .debug_str 0x0000000000000000 0xf4c7 ./Middlewares/LibJPEG/jcparam.o + .comment 0x0000000000000000 0x44 ./Middlewares/LibJPEG/jcparam.o + .debug_frame 0x0000000000000000 0x158 ./Middlewares/LibJPEG/jcparam.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jcparam.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcprepct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcprepct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcprepct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcprepct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcprepct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcprepct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcprepct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcprepct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcprepct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcprepct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcprepct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcprepct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcprepct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcprepct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcprepct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcprepct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcprepct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcprepct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcprepct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcprepct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcprepct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcprepct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcprepct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcprepct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcprepct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcprepct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcprepct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcprepct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcprepct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcprepct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcprepct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcprepct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcprepct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcprepct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcprepct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcprepct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcprepct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcprepct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcprepct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcprepct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcprepct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcprepct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcprepct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcprepct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcprepct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcprepct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcprepct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcprepct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcprepct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcprepct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcprepct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcprepct.o + .text 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jcprepct.o + .data 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jcprepct.o + .bss 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jcprepct.o + .text.start_pass_prep + 0x0000000000000000 0x28 ./Middlewares/LibJPEG/jcprepct.o + .text.expand_bottom_edge + 0x0000000000000000 0x30 ./Middlewares/LibJPEG/jcprepct.o + .text.pre_process_data + 0x0000000000000000 0x114 ./Middlewares/LibJPEG/jcprepct.o + .text.pre_process_context + 0x0000000000000000 0x132 ./Middlewares/LibJPEG/jcprepct.o + .text.jinit_c_prep_controller + 0x0000000000000000 0x144 ./Middlewares/LibJPEG/jcprepct.o + .debug_info 0x0000000000000000 0x1a68 ./Middlewares/LibJPEG/jcprepct.o + .debug_abbrev 0x0000000000000000 0x365 ./Middlewares/LibJPEG/jcprepct.o + .debug_loclists + 0x0000000000000000 0x57b ./Middlewares/LibJPEG/jcprepct.o + .debug_aranges + 0x0000000000000000 0x40 ./Middlewares/LibJPEG/jcprepct.o + .debug_rnglists + 0x0000000000000000 0x4d ./Middlewares/LibJPEG/jcprepct.o + .debug_macro 0x0000000000000000 0x28a ./Middlewares/LibJPEG/jcprepct.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LibJPEG/jcprepct.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jcprepct.o + .debug_macro 0x0000000000000000 0x5b ./Middlewares/LibJPEG/jcprepct.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LibJPEG/jcprepct.o + .debug_macro 0x0000000000000000 0x94 ./Middlewares/LibJPEG/jcprepct.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jcprepct.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jcprepct.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcprepct.o + .debug_macro 0x0000000000000000 0x57 ./Middlewares/LibJPEG/jcprepct.o + .debug_macro 0x0000000000000000 0x97 ./Middlewares/LibJPEG/jcprepct.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LibJPEG/jcprepct.o + .debug_macro 0x0000000000000000 0xfd ./Middlewares/LibJPEG/jcprepct.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jcprepct.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcprepct.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jcprepct.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jcprepct.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jcprepct.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LibJPEG/jcprepct.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LibJPEG/jcprepct.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jcprepct.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LibJPEG/jcprepct.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcprepct.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcprepct.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LibJPEG/jcprepct.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LibJPEG/jcprepct.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LibJPEG/jcprepct.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LibJPEG/jcprepct.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/LibJPEG/jcprepct.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/LibJPEG/jcprepct.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/LibJPEG/jcprepct.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jcprepct.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/LibJPEG/jcprepct.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/LibJPEG/jcprepct.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/LibJPEG/jcprepct.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jcprepct.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LibJPEG/jcprepct.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jcprepct.o + .debug_macro 0x0000000000000000 0x74 ./Middlewares/LibJPEG/jcprepct.o + .debug_macro 0x0000000000000000 0xdd ./Middlewares/LibJPEG/jcprepct.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jcprepct.o + .debug_macro 0x0000000000000000 0x6b ./Middlewares/LibJPEG/jcprepct.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcprepct.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LibJPEG/jcprepct.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcprepct.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LibJPEG/jcprepct.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcprepct.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LibJPEG/jcprepct.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcprepct.o + .debug_macro 0x0000000000000000 0x124 ./Middlewares/LibJPEG/jcprepct.o + .debug_macro 0x0000000000000000 0xe6 ./Middlewares/LibJPEG/jcprepct.o + .debug_macro 0x0000000000000000 0x8f ./Middlewares/LibJPEG/jcprepct.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jcprepct.o + .debug_line 0x0000000000000000 0xd5c ./Middlewares/LibJPEG/jcprepct.o + .debug_str 0x0000000000000000 0xf2f4 ./Middlewares/LibJPEG/jcprepct.o + .comment 0x0000000000000000 0x44 ./Middlewares/LibJPEG/jcprepct.o + .debug_frame 0x0000000000000000 0xe4 ./Middlewares/LibJPEG/jcprepct.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jcprepct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jcsample.o + .text 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jcsample.o + .data 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jcsample.o + .bss 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jcsample.o + .text.start_pass_downsample + 0x0000000000000000 0x2 ./Middlewares/LibJPEG/jcsample.o + .text.expand_right_edge + 0x0000000000000000 0x30 ./Middlewares/LibJPEG/jcsample.o + .text.sep_downsample + 0x0000000000000000 0x50 ./Middlewares/LibJPEG/jcsample.o + .text.int_downsample + 0x0000000000000000 0xac ./Middlewares/LibJPEG/jcsample.o + .text.h2v1_downsample + 0x0000000000000000 0x5e ./Middlewares/LibJPEG/jcsample.o + .text.h2v2_downsample + 0x0000000000000000 0x82 ./Middlewares/LibJPEG/jcsample.o + .text.h2v2_smooth_downsample + 0x0000000000000000 0x190 ./Middlewares/LibJPEG/jcsample.o + .text.fullsize_smooth_downsample + 0x0000000000000000 0xf8 ./Middlewares/LibJPEG/jcsample.o + .text.fullsize_downsample + 0x0000000000000000 0x36 ./Middlewares/LibJPEG/jcsample.o + .text.jinit_downsampler + 0x0000000000000000 0x140 ./Middlewares/LibJPEG/jcsample.o + .debug_info 0x0000000000000000 0x1ebe ./Middlewares/LibJPEG/jcsample.o + .debug_abbrev 0x0000000000000000 0x334 ./Middlewares/LibJPEG/jcsample.o + .debug_loclists + 0x0000000000000000 0xf64 ./Middlewares/LibJPEG/jcsample.o + .debug_aranges + 0x0000000000000000 0x68 ./Middlewares/LibJPEG/jcsample.o + .debug_rnglists + 0x0000000000000000 0x4e ./Middlewares/LibJPEG/jcsample.o + .debug_macro 0x0000000000000000 0x284 ./Middlewares/LibJPEG/jcsample.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LibJPEG/jcsample.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jcsample.o + .debug_macro 0x0000000000000000 0x5b ./Middlewares/LibJPEG/jcsample.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LibJPEG/jcsample.o + .debug_macro 0x0000000000000000 0x94 ./Middlewares/LibJPEG/jcsample.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jcsample.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jcsample.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcsample.o + .debug_macro 0x0000000000000000 0x57 ./Middlewares/LibJPEG/jcsample.o + .debug_macro 0x0000000000000000 0x97 ./Middlewares/LibJPEG/jcsample.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LibJPEG/jcsample.o + .debug_macro 0x0000000000000000 0xfd ./Middlewares/LibJPEG/jcsample.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jcsample.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcsample.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jcsample.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jcsample.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jcsample.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LibJPEG/jcsample.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LibJPEG/jcsample.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jcsample.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LibJPEG/jcsample.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcsample.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcsample.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LibJPEG/jcsample.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LibJPEG/jcsample.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LibJPEG/jcsample.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LibJPEG/jcsample.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/LibJPEG/jcsample.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/LibJPEG/jcsample.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/LibJPEG/jcsample.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jcsample.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/LibJPEG/jcsample.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/LibJPEG/jcsample.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/LibJPEG/jcsample.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jcsample.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LibJPEG/jcsample.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jcsample.o + .debug_macro 0x0000000000000000 0x74 ./Middlewares/LibJPEG/jcsample.o + .debug_macro 0x0000000000000000 0xdd ./Middlewares/LibJPEG/jcsample.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jcsample.o + .debug_macro 0x0000000000000000 0x6b ./Middlewares/LibJPEG/jcsample.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcsample.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LibJPEG/jcsample.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcsample.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LibJPEG/jcsample.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcsample.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LibJPEG/jcsample.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jcsample.o + .debug_macro 0x0000000000000000 0x124 ./Middlewares/LibJPEG/jcsample.o + .debug_macro 0x0000000000000000 0xe6 ./Middlewares/LibJPEG/jcsample.o + .debug_macro 0x0000000000000000 0x8f ./Middlewares/LibJPEG/jcsample.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jcsample.o + .debug_line 0x0000000000000000 0x1303 ./Middlewares/LibJPEG/jcsample.o + .debug_str 0x0000000000000000 0xf3e7 ./Middlewares/LibJPEG/jcsample.o + .comment 0x0000000000000000 0x44 ./Middlewares/LibJPEG/jcsample.o + .debug_frame 0x0000000000000000 0x1ac ./Middlewares/LibJPEG/jcsample.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jcsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jctrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jctrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jctrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jctrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jctrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jctrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jctrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jctrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jctrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jctrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jctrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jctrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jctrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jctrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jctrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jctrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jctrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jctrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jctrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jctrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jctrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jctrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jctrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jctrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jctrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jctrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jctrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jctrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jctrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jctrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jctrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jctrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jctrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jctrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jctrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jctrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jctrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jctrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jctrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jctrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jctrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jctrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jctrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jctrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jctrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jctrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jctrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jctrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jctrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jctrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jctrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jctrans.o + .text 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jctrans.o + .data 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jctrans.o + .bss 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jctrans.o + .text.start_iMCU_row + 0x0000000000000000 0x2e ./Middlewares/LibJPEG/jctrans.o + .text.start_pass_coef + 0x0000000000000000 0x24 ./Middlewares/LibJPEG/jctrans.o + .text.compress_output + 0x0000000000000000 0x18c ./Middlewares/LibJPEG/jctrans.o + .text.jpeg_write_coefficients + 0x0000000000000000 0xc0 ./Middlewares/LibJPEG/jctrans.o + .text.jpeg_copy_critical_parameters + 0x0000000000000000 0x18e ./Middlewares/LibJPEG/jctrans.o + .debug_info 0x0000000000000000 0x264a ./Middlewares/LibJPEG/jctrans.o + .debug_abbrev 0x0000000000000000 0x3f2 ./Middlewares/LibJPEG/jctrans.o + .debug_loclists + 0x0000000000000000 0x44f ./Middlewares/LibJPEG/jctrans.o + .debug_aranges + 0x0000000000000000 0x40 ./Middlewares/LibJPEG/jctrans.o + .debug_rnglists + 0x0000000000000000 0x3c ./Middlewares/LibJPEG/jctrans.o + .debug_macro 0x0000000000000000 0x284 ./Middlewares/LibJPEG/jctrans.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LibJPEG/jctrans.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jctrans.o + .debug_macro 0x0000000000000000 0x5b ./Middlewares/LibJPEG/jctrans.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LibJPEG/jctrans.o + .debug_macro 0x0000000000000000 0x94 ./Middlewares/LibJPEG/jctrans.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jctrans.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jctrans.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jctrans.o + .debug_macro 0x0000000000000000 0x57 ./Middlewares/LibJPEG/jctrans.o + .debug_macro 0x0000000000000000 0x97 ./Middlewares/LibJPEG/jctrans.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LibJPEG/jctrans.o + .debug_macro 0x0000000000000000 0xfd ./Middlewares/LibJPEG/jctrans.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jctrans.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jctrans.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jctrans.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jctrans.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jctrans.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LibJPEG/jctrans.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LibJPEG/jctrans.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jctrans.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LibJPEG/jctrans.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jctrans.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jctrans.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LibJPEG/jctrans.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LibJPEG/jctrans.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LibJPEG/jctrans.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LibJPEG/jctrans.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/LibJPEG/jctrans.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/LibJPEG/jctrans.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/LibJPEG/jctrans.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jctrans.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/LibJPEG/jctrans.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/LibJPEG/jctrans.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/LibJPEG/jctrans.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jctrans.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LibJPEG/jctrans.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jctrans.o + .debug_macro 0x0000000000000000 0x74 ./Middlewares/LibJPEG/jctrans.o + .debug_macro 0x0000000000000000 0xdd ./Middlewares/LibJPEG/jctrans.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jctrans.o + .debug_macro 0x0000000000000000 0x6b ./Middlewares/LibJPEG/jctrans.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jctrans.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LibJPEG/jctrans.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jctrans.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LibJPEG/jctrans.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jctrans.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LibJPEG/jctrans.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jctrans.o + .debug_macro 0x0000000000000000 0x124 ./Middlewares/LibJPEG/jctrans.o + .debug_macro 0x0000000000000000 0xe6 ./Middlewares/LibJPEG/jctrans.o + .debug_macro 0x0000000000000000 0x8f ./Middlewares/LibJPEG/jctrans.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jctrans.o + .debug_line 0x0000000000000000 0xdfb ./Middlewares/LibJPEG/jctrans.o + .debug_str 0x0000000000000000 0xf9d6 ./Middlewares/LibJPEG/jctrans.o + .comment 0x0000000000000000 0x44 ./Middlewares/LibJPEG/jctrans.o + .debug_frame 0x0000000000000000 0xc0 ./Middlewares/LibJPEG/jctrans.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jctrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapimin.o + .text 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jdapimin.o + .data 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jdapimin.o + .bss 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jdapimin.o + .text.jpeg_abort_decompress + 0x0000000000000000 0x4 ./Middlewares/LibJPEG/jdapimin.o + .text.jpeg_input_complete + 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jdapimin.o + .text.jpeg_has_multiple_scans + 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jdapimin.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LibJPEG/jdapimin.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jdapimin.o + .debug_macro 0x0000000000000000 0x5b ./Middlewares/LibJPEG/jdapimin.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LibJPEG/jdapimin.o + .debug_macro 0x0000000000000000 0x94 ./Middlewares/LibJPEG/jdapimin.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jdapimin.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jdapimin.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdapimin.o + .debug_macro 0x0000000000000000 0x57 ./Middlewares/LibJPEG/jdapimin.o + .debug_macro 0x0000000000000000 0x97 ./Middlewares/LibJPEG/jdapimin.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LibJPEG/jdapimin.o + .debug_macro 0x0000000000000000 0xfd ./Middlewares/LibJPEG/jdapimin.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jdapimin.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdapimin.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jdapimin.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jdapimin.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jdapimin.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LibJPEG/jdapimin.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LibJPEG/jdapimin.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jdapimin.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LibJPEG/jdapimin.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdapimin.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdapimin.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LibJPEG/jdapimin.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LibJPEG/jdapimin.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LibJPEG/jdapimin.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LibJPEG/jdapimin.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/LibJPEG/jdapimin.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/LibJPEG/jdapimin.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/LibJPEG/jdapimin.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jdapimin.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/LibJPEG/jdapimin.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/LibJPEG/jdapimin.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/LibJPEG/jdapimin.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jdapimin.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LibJPEG/jdapimin.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jdapimin.o + .debug_macro 0x0000000000000000 0x74 ./Middlewares/LibJPEG/jdapimin.o + .debug_macro 0x0000000000000000 0xdd ./Middlewares/LibJPEG/jdapimin.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jdapimin.o + .debug_macro 0x0000000000000000 0x6b ./Middlewares/LibJPEG/jdapimin.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdapimin.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LibJPEG/jdapimin.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdapimin.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LibJPEG/jdapimin.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdapimin.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LibJPEG/jdapimin.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdapimin.o + .debug_macro 0x0000000000000000 0x124 ./Middlewares/LibJPEG/jdapimin.o + .debug_macro 0x0000000000000000 0xe6 ./Middlewares/LibJPEG/jdapimin.o + .debug_macro 0x0000000000000000 0x8f ./Middlewares/LibJPEG/jdapimin.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jdapimin.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdapistd.o + .text 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jdapistd.o + .data 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jdapistd.o + .bss 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jdapistd.o + .text.jpeg_read_raw_data + 0x0000000000000000 0x80 ./Middlewares/LibJPEG/jdapistd.o + .text.jpeg_start_output + 0x0000000000000000 0x42 ./Middlewares/LibJPEG/jdapistd.o + .text.jpeg_finish_output + 0x0000000000000000 0x5a ./Middlewares/LibJPEG/jdapistd.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LibJPEG/jdapistd.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jdapistd.o + .debug_macro 0x0000000000000000 0x5b ./Middlewares/LibJPEG/jdapistd.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LibJPEG/jdapistd.o + .debug_macro 0x0000000000000000 0x94 ./Middlewares/LibJPEG/jdapistd.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jdapistd.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jdapistd.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdapistd.o + .debug_macro 0x0000000000000000 0x57 ./Middlewares/LibJPEG/jdapistd.o + .debug_macro 0x0000000000000000 0x97 ./Middlewares/LibJPEG/jdapistd.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LibJPEG/jdapistd.o + .debug_macro 0x0000000000000000 0xfd ./Middlewares/LibJPEG/jdapistd.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jdapistd.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdapistd.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jdapistd.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jdapistd.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jdapistd.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LibJPEG/jdapistd.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LibJPEG/jdapistd.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jdapistd.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LibJPEG/jdapistd.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdapistd.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdapistd.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LibJPEG/jdapistd.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LibJPEG/jdapistd.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LibJPEG/jdapistd.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LibJPEG/jdapistd.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/LibJPEG/jdapistd.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/LibJPEG/jdapistd.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/LibJPEG/jdapistd.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jdapistd.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/LibJPEG/jdapistd.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/LibJPEG/jdapistd.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/LibJPEG/jdapistd.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jdapistd.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LibJPEG/jdapistd.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jdapistd.o + .debug_macro 0x0000000000000000 0x74 ./Middlewares/LibJPEG/jdapistd.o + .debug_macro 0x0000000000000000 0xdd ./Middlewares/LibJPEG/jdapistd.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jdapistd.o + .debug_macro 0x0000000000000000 0x6b ./Middlewares/LibJPEG/jdapistd.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdapistd.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LibJPEG/jdapistd.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdapistd.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LibJPEG/jdapistd.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdapistd.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LibJPEG/jdapistd.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdapistd.o + .debug_macro 0x0000000000000000 0x124 ./Middlewares/LibJPEG/jdapistd.o + .debug_macro 0x0000000000000000 0xe6 ./Middlewares/LibJPEG/jdapistd.o + .debug_macro 0x0000000000000000 0x8f ./Middlewares/LibJPEG/jdapistd.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jdapistd.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdarith.o + .text 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jdarith.o + .data 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jdarith.o + .bss 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jdarith.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LibJPEG/jdarith.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jdarith.o + .debug_macro 0x0000000000000000 0x5b ./Middlewares/LibJPEG/jdarith.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LibJPEG/jdarith.o + .debug_macro 0x0000000000000000 0x94 ./Middlewares/LibJPEG/jdarith.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jdarith.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jdarith.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdarith.o + .debug_macro 0x0000000000000000 0x57 ./Middlewares/LibJPEG/jdarith.o + .debug_macro 0x0000000000000000 0x97 ./Middlewares/LibJPEG/jdarith.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LibJPEG/jdarith.o + .debug_macro 0x0000000000000000 0xfd ./Middlewares/LibJPEG/jdarith.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jdarith.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdarith.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jdarith.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jdarith.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jdarith.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LibJPEG/jdarith.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LibJPEG/jdarith.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jdarith.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LibJPEG/jdarith.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdarith.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdarith.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LibJPEG/jdarith.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LibJPEG/jdarith.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LibJPEG/jdarith.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LibJPEG/jdarith.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/LibJPEG/jdarith.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/LibJPEG/jdarith.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/LibJPEG/jdarith.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jdarith.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/LibJPEG/jdarith.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/LibJPEG/jdarith.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/LibJPEG/jdarith.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jdarith.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LibJPEG/jdarith.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jdarith.o + .debug_macro 0x0000000000000000 0x74 ./Middlewares/LibJPEG/jdarith.o + .debug_macro 0x0000000000000000 0xdd ./Middlewares/LibJPEG/jdarith.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jdarith.o + .debug_macro 0x0000000000000000 0x6b ./Middlewares/LibJPEG/jdarith.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdarith.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LibJPEG/jdarith.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdarith.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LibJPEG/jdarith.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdarith.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LibJPEG/jdarith.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdarith.o + .debug_macro 0x0000000000000000 0x124 ./Middlewares/LibJPEG/jdarith.o + .debug_macro 0x0000000000000000 0xe6 ./Middlewares/LibJPEG/jdarith.o + .debug_macro 0x0000000000000000 0x8f ./Middlewares/LibJPEG/jdarith.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jdarith.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatadst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatadst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatadst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatadst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatadst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatadst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatadst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatadst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatadst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatadst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatadst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatadst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatadst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatadst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatadst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatadst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatadst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatadst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatadst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatadst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatadst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatadst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatadst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatadst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatadst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatadst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatadst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatadst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatadst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatadst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatadst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatadst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatadst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatadst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatadst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatadst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatadst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatadst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatadst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatadst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatadst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatadst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatadst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatadst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatadst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatadst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatadst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatadst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatadst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatadst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatadst.o + .text 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jdatadst.o + .data 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jdatadst.o + .bss 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jdatadst.o + .text.init_destination + 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jdatadst.o + .text.init_mem_destination + 0x0000000000000000 0x2 ./Middlewares/LibJPEG/jdatadst.o + .text.term_mem_destination + 0x0000000000000000 0x14 ./Middlewares/LibJPEG/jdatadst.o + .text.empty_output_buffer + 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jdatadst.o + .text.empty_mem_output_buffer + 0x0000000000000000 0x48 ./Middlewares/LibJPEG/jdatadst.o + .text.term_destination + 0x0000000000000000 0x30 ./Middlewares/LibJPEG/jdatadst.o + .text.jpeg_stdio_dest + 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jdatadst.o + .text.jpeg_mem_dest + 0x0000000000000000 0x84 ./Middlewares/LibJPEG/jdatadst.o + .debug_info 0x0000000000000000 0x1c19 ./Middlewares/LibJPEG/jdatadst.o + .debug_abbrev 0x0000000000000000 0x35f ./Middlewares/LibJPEG/jdatadst.o + .debug_loclists + 0x0000000000000000 0x1e0 ./Middlewares/LibJPEG/jdatadst.o + .debug_aranges + 0x0000000000000000 0x58 ./Middlewares/LibJPEG/jdatadst.o + .debug_rnglists + 0x0000000000000000 0x4a ./Middlewares/LibJPEG/jdatadst.o + .debug_macro 0x0000000000000000 0x279 ./Middlewares/LibJPEG/jdatadst.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LibJPEG/jdatadst.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jdatadst.o + .debug_macro 0x0000000000000000 0x5b ./Middlewares/LibJPEG/jdatadst.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LibJPEG/jdatadst.o + .debug_macro 0x0000000000000000 0x94 ./Middlewares/LibJPEG/jdatadst.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jdatadst.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jdatadst.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdatadst.o + .debug_macro 0x0000000000000000 0x57 ./Middlewares/LibJPEG/jdatadst.o + .debug_macro 0x0000000000000000 0x97 ./Middlewares/LibJPEG/jdatadst.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LibJPEG/jdatadst.o + .debug_macro 0x0000000000000000 0xfd ./Middlewares/LibJPEG/jdatadst.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jdatadst.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdatadst.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jdatadst.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jdatadst.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jdatadst.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LibJPEG/jdatadst.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LibJPEG/jdatadst.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jdatadst.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LibJPEG/jdatadst.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdatadst.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdatadst.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LibJPEG/jdatadst.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LibJPEG/jdatadst.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LibJPEG/jdatadst.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LibJPEG/jdatadst.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/LibJPEG/jdatadst.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/LibJPEG/jdatadst.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/LibJPEG/jdatadst.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jdatadst.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/LibJPEG/jdatadst.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/LibJPEG/jdatadst.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/LibJPEG/jdatadst.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jdatadst.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LibJPEG/jdatadst.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jdatadst.o + .debug_macro 0x0000000000000000 0x74 ./Middlewares/LibJPEG/jdatadst.o + .debug_macro 0x0000000000000000 0xdd ./Middlewares/LibJPEG/jdatadst.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jdatadst.o + .debug_macro 0x0000000000000000 0x64 ./Middlewares/LibJPEG/jdatadst.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdatadst.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LibJPEG/jdatadst.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdatadst.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LibJPEG/jdatadst.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdatadst.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LibJPEG/jdatadst.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdatadst.o + .debug_macro 0x0000000000000000 0x67 ./Middlewares/LibJPEG/jdatadst.o + .debug_macro 0x0000000000000000 0xe6 ./Middlewares/LibJPEG/jdatadst.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jdatadst.o + .debug_line 0x0000000000000000 0xae9 ./Middlewares/LibJPEG/jdatadst.o + .debug_str 0x0000000000000000 0xef8e ./Middlewares/LibJPEG/jdatadst.o + .comment 0x0000000000000000 0x44 ./Middlewares/LibJPEG/jdatadst.o + .debug_frame 0x0000000000000000 0xe8 ./Middlewares/LibJPEG/jdatadst.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jdatadst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatasrc.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatasrc.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatasrc.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatasrc.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatasrc.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatasrc.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatasrc.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatasrc.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatasrc.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatasrc.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatasrc.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatasrc.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatasrc.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatasrc.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatasrc.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatasrc.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatasrc.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatasrc.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatasrc.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatasrc.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatasrc.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatasrc.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatasrc.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatasrc.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatasrc.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatasrc.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatasrc.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatasrc.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatasrc.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatasrc.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatasrc.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatasrc.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatasrc.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatasrc.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatasrc.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatasrc.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatasrc.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatasrc.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatasrc.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatasrc.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatasrc.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatasrc.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatasrc.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatasrc.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatasrc.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatasrc.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatasrc.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatasrc.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatasrc.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatasrc.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdatasrc.o + .text 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jdatasrc.o + .data 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jdatasrc.o + .bss 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jdatasrc.o + .text.init_source + 0x0000000000000000 0x8 ./Middlewares/LibJPEG/jdatasrc.o + .text.fill_input_buffer + 0x0000000000000000 0x52 ./Middlewares/LibJPEG/jdatasrc.o + .text.jpeg_stdio_src + 0x0000000000000000 0x60 ./Middlewares/LibJPEG/jdatasrc.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LibJPEG/jdatasrc.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jdatasrc.o + .debug_macro 0x0000000000000000 0x5b ./Middlewares/LibJPEG/jdatasrc.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LibJPEG/jdatasrc.o + .debug_macro 0x0000000000000000 0x94 ./Middlewares/LibJPEG/jdatasrc.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jdatasrc.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jdatasrc.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdatasrc.o + .debug_macro 0x0000000000000000 0x57 ./Middlewares/LibJPEG/jdatasrc.o + .debug_macro 0x0000000000000000 0x97 ./Middlewares/LibJPEG/jdatasrc.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LibJPEG/jdatasrc.o + .debug_macro 0x0000000000000000 0xfd ./Middlewares/LibJPEG/jdatasrc.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jdatasrc.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdatasrc.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jdatasrc.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jdatasrc.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jdatasrc.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LibJPEG/jdatasrc.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LibJPEG/jdatasrc.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jdatasrc.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LibJPEG/jdatasrc.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdatasrc.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdatasrc.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LibJPEG/jdatasrc.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LibJPEG/jdatasrc.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LibJPEG/jdatasrc.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LibJPEG/jdatasrc.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/LibJPEG/jdatasrc.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/LibJPEG/jdatasrc.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/LibJPEG/jdatasrc.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jdatasrc.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/LibJPEG/jdatasrc.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/LibJPEG/jdatasrc.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/LibJPEG/jdatasrc.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jdatasrc.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LibJPEG/jdatasrc.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jdatasrc.o + .debug_macro 0x0000000000000000 0x74 ./Middlewares/LibJPEG/jdatasrc.o + .debug_macro 0x0000000000000000 0xdd ./Middlewares/LibJPEG/jdatasrc.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jdatasrc.o + .debug_macro 0x0000000000000000 0x64 ./Middlewares/LibJPEG/jdatasrc.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdatasrc.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LibJPEG/jdatasrc.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdatasrc.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LibJPEG/jdatasrc.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdatasrc.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LibJPEG/jdatasrc.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdatasrc.o + .debug_macro 0x0000000000000000 0x67 ./Middlewares/LibJPEG/jdatasrc.o + .debug_macro 0x0000000000000000 0xe6 ./Middlewares/LibJPEG/jdatasrc.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jdatasrc.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcoefct.o + .text 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jdcoefct.o + .data 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jdcoefct.o + .bss 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jdcoefct.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LibJPEG/jdcoefct.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jdcoefct.o + .debug_macro 0x0000000000000000 0x5b ./Middlewares/LibJPEG/jdcoefct.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LibJPEG/jdcoefct.o + .debug_macro 0x0000000000000000 0x94 ./Middlewares/LibJPEG/jdcoefct.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jdcoefct.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jdcoefct.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdcoefct.o + .debug_macro 0x0000000000000000 0x57 ./Middlewares/LibJPEG/jdcoefct.o + .debug_macro 0x0000000000000000 0x97 ./Middlewares/LibJPEG/jdcoefct.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LibJPEG/jdcoefct.o + .debug_macro 0x0000000000000000 0xfd ./Middlewares/LibJPEG/jdcoefct.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jdcoefct.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdcoefct.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jdcoefct.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jdcoefct.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jdcoefct.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LibJPEG/jdcoefct.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LibJPEG/jdcoefct.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jdcoefct.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LibJPEG/jdcoefct.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdcoefct.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdcoefct.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LibJPEG/jdcoefct.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LibJPEG/jdcoefct.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LibJPEG/jdcoefct.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LibJPEG/jdcoefct.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/LibJPEG/jdcoefct.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/LibJPEG/jdcoefct.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/LibJPEG/jdcoefct.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jdcoefct.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/LibJPEG/jdcoefct.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/LibJPEG/jdcoefct.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/LibJPEG/jdcoefct.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jdcoefct.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LibJPEG/jdcoefct.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jdcoefct.o + .debug_macro 0x0000000000000000 0x74 ./Middlewares/LibJPEG/jdcoefct.o + .debug_macro 0x0000000000000000 0xdd ./Middlewares/LibJPEG/jdcoefct.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jdcoefct.o + .debug_macro 0x0000000000000000 0x6b ./Middlewares/LibJPEG/jdcoefct.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdcoefct.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LibJPEG/jdcoefct.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdcoefct.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LibJPEG/jdcoefct.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdcoefct.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LibJPEG/jdcoefct.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdcoefct.o + .debug_macro 0x0000000000000000 0x124 ./Middlewares/LibJPEG/jdcoefct.o + .debug_macro 0x0000000000000000 0xe6 ./Middlewares/LibJPEG/jdcoefct.o + .debug_macro 0x0000000000000000 0x8f ./Middlewares/LibJPEG/jdcoefct.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jdcoefct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdcolor.o + .text 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jdcolor.o + .data 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jdcolor.o + .bss 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jdcolor.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LibJPEG/jdcolor.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jdcolor.o + .debug_macro 0x0000000000000000 0x5b ./Middlewares/LibJPEG/jdcolor.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LibJPEG/jdcolor.o + .debug_macro 0x0000000000000000 0x94 ./Middlewares/LibJPEG/jdcolor.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jdcolor.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jdcolor.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdcolor.o + .debug_macro 0x0000000000000000 0x57 ./Middlewares/LibJPEG/jdcolor.o + .debug_macro 0x0000000000000000 0x97 ./Middlewares/LibJPEG/jdcolor.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LibJPEG/jdcolor.o + .debug_macro 0x0000000000000000 0xfd ./Middlewares/LibJPEG/jdcolor.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jdcolor.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdcolor.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jdcolor.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jdcolor.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jdcolor.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LibJPEG/jdcolor.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LibJPEG/jdcolor.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jdcolor.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LibJPEG/jdcolor.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdcolor.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdcolor.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LibJPEG/jdcolor.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LibJPEG/jdcolor.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LibJPEG/jdcolor.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LibJPEG/jdcolor.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/LibJPEG/jdcolor.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/LibJPEG/jdcolor.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/LibJPEG/jdcolor.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jdcolor.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/LibJPEG/jdcolor.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/LibJPEG/jdcolor.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/LibJPEG/jdcolor.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jdcolor.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LibJPEG/jdcolor.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jdcolor.o + .debug_macro 0x0000000000000000 0x74 ./Middlewares/LibJPEG/jdcolor.o + .debug_macro 0x0000000000000000 0xdd ./Middlewares/LibJPEG/jdcolor.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jdcolor.o + .debug_macro 0x0000000000000000 0x6b ./Middlewares/LibJPEG/jdcolor.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdcolor.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LibJPEG/jdcolor.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdcolor.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LibJPEG/jdcolor.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdcolor.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LibJPEG/jdcolor.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdcolor.o + .debug_macro 0x0000000000000000 0x124 ./Middlewares/LibJPEG/jdcolor.o + .debug_macro 0x0000000000000000 0xe6 ./Middlewares/LibJPEG/jdcolor.o + .debug_macro 0x0000000000000000 0x8f ./Middlewares/LibJPEG/jdcolor.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jdcolor.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jddctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jddctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jddctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jddctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jddctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jddctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jddctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jddctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jddctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jddctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jddctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jddctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jddctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jddctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jddctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jddctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jddctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jddctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jddctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jddctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jddctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jddctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jddctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jddctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jddctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jddctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jddctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jddctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jddctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jddctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jddctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jddctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jddctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jddctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jddctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jddctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jddctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jddctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jddctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jddctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jddctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jddctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jddctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jddctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jddctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jddctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jddctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jddctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jddctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jddctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jddctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jddctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jddctmgr.o + .text 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jddctmgr.o + .data 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jddctmgr.o + .bss 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jddctmgr.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LibJPEG/jddctmgr.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jddctmgr.o + .debug_macro 0x0000000000000000 0x5b ./Middlewares/LibJPEG/jddctmgr.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LibJPEG/jddctmgr.o + .debug_macro 0x0000000000000000 0x94 ./Middlewares/LibJPEG/jddctmgr.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jddctmgr.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jddctmgr.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jddctmgr.o + .debug_macro 0x0000000000000000 0x57 ./Middlewares/LibJPEG/jddctmgr.o + .debug_macro 0x0000000000000000 0x97 ./Middlewares/LibJPEG/jddctmgr.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LibJPEG/jddctmgr.o + .debug_macro 0x0000000000000000 0xfd ./Middlewares/LibJPEG/jddctmgr.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jddctmgr.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jddctmgr.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jddctmgr.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jddctmgr.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jddctmgr.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LibJPEG/jddctmgr.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LibJPEG/jddctmgr.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jddctmgr.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LibJPEG/jddctmgr.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jddctmgr.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jddctmgr.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LibJPEG/jddctmgr.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LibJPEG/jddctmgr.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LibJPEG/jddctmgr.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LibJPEG/jddctmgr.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/LibJPEG/jddctmgr.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/LibJPEG/jddctmgr.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/LibJPEG/jddctmgr.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jddctmgr.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/LibJPEG/jddctmgr.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/LibJPEG/jddctmgr.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/LibJPEG/jddctmgr.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jddctmgr.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LibJPEG/jddctmgr.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jddctmgr.o + .debug_macro 0x0000000000000000 0x74 ./Middlewares/LibJPEG/jddctmgr.o + .debug_macro 0x0000000000000000 0xdd ./Middlewares/LibJPEG/jddctmgr.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jddctmgr.o + .debug_macro 0x0000000000000000 0x6b ./Middlewares/LibJPEG/jddctmgr.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jddctmgr.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LibJPEG/jddctmgr.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jddctmgr.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LibJPEG/jddctmgr.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jddctmgr.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LibJPEG/jddctmgr.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jddctmgr.o + .debug_macro 0x0000000000000000 0x124 ./Middlewares/LibJPEG/jddctmgr.o + .debug_macro 0x0000000000000000 0xe6 ./Middlewares/LibJPEG/jddctmgr.o + .debug_macro 0x0000000000000000 0x8f ./Middlewares/LibJPEG/jddctmgr.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jddctmgr.o + .debug_macro 0x0000000000000000 0x40 ./Middlewares/LibJPEG/jddctmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdhuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdhuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdhuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdhuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdhuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdhuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdhuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdhuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdhuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdhuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdhuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdhuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdhuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdhuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdhuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdhuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdhuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdhuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdhuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdhuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdhuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdhuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdhuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdhuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdhuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdhuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdhuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdhuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdhuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdhuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdhuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdhuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdhuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdhuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdhuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdhuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdhuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdhuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdhuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdhuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdhuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdhuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdhuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdhuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdhuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdhuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdhuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdhuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdhuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdhuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdhuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdhuff.o + .text 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jdhuff.o + .data 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jdhuff.o + .bss 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jdhuff.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LibJPEG/jdhuff.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jdhuff.o + .debug_macro 0x0000000000000000 0x5b ./Middlewares/LibJPEG/jdhuff.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LibJPEG/jdhuff.o + .debug_macro 0x0000000000000000 0x94 ./Middlewares/LibJPEG/jdhuff.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jdhuff.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jdhuff.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdhuff.o + .debug_macro 0x0000000000000000 0x57 ./Middlewares/LibJPEG/jdhuff.o + .debug_macro 0x0000000000000000 0x97 ./Middlewares/LibJPEG/jdhuff.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LibJPEG/jdhuff.o + .debug_macro 0x0000000000000000 0xfd ./Middlewares/LibJPEG/jdhuff.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jdhuff.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdhuff.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jdhuff.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jdhuff.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jdhuff.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LibJPEG/jdhuff.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LibJPEG/jdhuff.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jdhuff.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LibJPEG/jdhuff.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdhuff.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdhuff.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LibJPEG/jdhuff.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LibJPEG/jdhuff.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LibJPEG/jdhuff.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LibJPEG/jdhuff.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/LibJPEG/jdhuff.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/LibJPEG/jdhuff.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/LibJPEG/jdhuff.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jdhuff.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/LibJPEG/jdhuff.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/LibJPEG/jdhuff.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/LibJPEG/jdhuff.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jdhuff.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LibJPEG/jdhuff.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jdhuff.o + .debug_macro 0x0000000000000000 0x74 ./Middlewares/LibJPEG/jdhuff.o + .debug_macro 0x0000000000000000 0xdd ./Middlewares/LibJPEG/jdhuff.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jdhuff.o + .debug_macro 0x0000000000000000 0x6b ./Middlewares/LibJPEG/jdhuff.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdhuff.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LibJPEG/jdhuff.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdhuff.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LibJPEG/jdhuff.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdhuff.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LibJPEG/jdhuff.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdhuff.o + .debug_macro 0x0000000000000000 0x124 ./Middlewares/LibJPEG/jdhuff.o + .debug_macro 0x0000000000000000 0xe6 ./Middlewares/LibJPEG/jdhuff.o + .debug_macro 0x0000000000000000 0x8f ./Middlewares/LibJPEG/jdhuff.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jdhuff.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdinput.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdinput.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdinput.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdinput.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdinput.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdinput.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdinput.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdinput.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdinput.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdinput.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdinput.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdinput.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdinput.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdinput.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdinput.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdinput.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdinput.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdinput.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdinput.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdinput.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdinput.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdinput.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdinput.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdinput.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdinput.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdinput.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdinput.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdinput.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdinput.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdinput.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdinput.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdinput.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdinput.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdinput.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdinput.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdinput.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdinput.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdinput.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdinput.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdinput.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdinput.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdinput.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdinput.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdinput.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdinput.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdinput.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdinput.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdinput.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdinput.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdinput.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdinput.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdinput.o + .text 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jdinput.o + .data 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jdinput.o + .bss 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jdinput.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LibJPEG/jdinput.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jdinput.o + .debug_macro 0x0000000000000000 0x5b ./Middlewares/LibJPEG/jdinput.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LibJPEG/jdinput.o + .debug_macro 0x0000000000000000 0x94 ./Middlewares/LibJPEG/jdinput.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jdinput.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jdinput.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdinput.o + .debug_macro 0x0000000000000000 0x57 ./Middlewares/LibJPEG/jdinput.o + .debug_macro 0x0000000000000000 0x97 ./Middlewares/LibJPEG/jdinput.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LibJPEG/jdinput.o + .debug_macro 0x0000000000000000 0xfd ./Middlewares/LibJPEG/jdinput.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jdinput.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdinput.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jdinput.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jdinput.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jdinput.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LibJPEG/jdinput.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LibJPEG/jdinput.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jdinput.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LibJPEG/jdinput.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdinput.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdinput.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LibJPEG/jdinput.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LibJPEG/jdinput.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LibJPEG/jdinput.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LibJPEG/jdinput.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/LibJPEG/jdinput.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/LibJPEG/jdinput.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/LibJPEG/jdinput.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jdinput.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/LibJPEG/jdinput.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/LibJPEG/jdinput.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/LibJPEG/jdinput.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jdinput.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LibJPEG/jdinput.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jdinput.o + .debug_macro 0x0000000000000000 0x74 ./Middlewares/LibJPEG/jdinput.o + .debug_macro 0x0000000000000000 0xdd ./Middlewares/LibJPEG/jdinput.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jdinput.o + .debug_macro 0x0000000000000000 0x6b ./Middlewares/LibJPEG/jdinput.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdinput.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LibJPEG/jdinput.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdinput.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LibJPEG/jdinput.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdinput.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LibJPEG/jdinput.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdinput.o + .debug_macro 0x0000000000000000 0x124 ./Middlewares/LibJPEG/jdinput.o + .debug_macro 0x0000000000000000 0xe6 ./Middlewares/LibJPEG/jdinput.o + .debug_macro 0x0000000000000000 0x8f ./Middlewares/LibJPEG/jdinput.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jdinput.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmainct.o + .text 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jdmainct.o + .data 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jdmainct.o + .bss 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jdmainct.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LibJPEG/jdmainct.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jdmainct.o + .debug_macro 0x0000000000000000 0x5b ./Middlewares/LibJPEG/jdmainct.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LibJPEG/jdmainct.o + .debug_macro 0x0000000000000000 0x94 ./Middlewares/LibJPEG/jdmainct.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jdmainct.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jdmainct.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdmainct.o + .debug_macro 0x0000000000000000 0x57 ./Middlewares/LibJPEG/jdmainct.o + .debug_macro 0x0000000000000000 0x97 ./Middlewares/LibJPEG/jdmainct.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LibJPEG/jdmainct.o + .debug_macro 0x0000000000000000 0xfd ./Middlewares/LibJPEG/jdmainct.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jdmainct.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdmainct.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jdmainct.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jdmainct.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jdmainct.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LibJPEG/jdmainct.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LibJPEG/jdmainct.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jdmainct.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LibJPEG/jdmainct.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdmainct.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdmainct.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LibJPEG/jdmainct.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LibJPEG/jdmainct.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LibJPEG/jdmainct.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LibJPEG/jdmainct.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/LibJPEG/jdmainct.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/LibJPEG/jdmainct.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/LibJPEG/jdmainct.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jdmainct.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/LibJPEG/jdmainct.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/LibJPEG/jdmainct.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/LibJPEG/jdmainct.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jdmainct.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LibJPEG/jdmainct.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jdmainct.o + .debug_macro 0x0000000000000000 0x74 ./Middlewares/LibJPEG/jdmainct.o + .debug_macro 0x0000000000000000 0xdd ./Middlewares/LibJPEG/jdmainct.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jdmainct.o + .debug_macro 0x0000000000000000 0x6b ./Middlewares/LibJPEG/jdmainct.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdmainct.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LibJPEG/jdmainct.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdmainct.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LibJPEG/jdmainct.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdmainct.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LibJPEG/jdmainct.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdmainct.o + .debug_macro 0x0000000000000000 0x124 ./Middlewares/LibJPEG/jdmainct.o + .debug_macro 0x0000000000000000 0xe6 ./Middlewares/LibJPEG/jdmainct.o + .debug_macro 0x0000000000000000 0x8f ./Middlewares/LibJPEG/jdmainct.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jdmainct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmarker.o + .text 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jdmarker.o + .data 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jdmarker.o + .bss 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jdmarker.o + .text.save_marker + 0x0000000000000000 0x170 ./Middlewares/LibJPEG/jdmarker.o + .text.jpeg_save_markers + 0x0000000000000000 0x84 ./Middlewares/LibJPEG/jdmarker.o + .text.jpeg_set_marker_processor + 0x0000000000000000 0x2e ./Middlewares/LibJPEG/jdmarker.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LibJPEG/jdmarker.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jdmarker.o + .debug_macro 0x0000000000000000 0x5b ./Middlewares/LibJPEG/jdmarker.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LibJPEG/jdmarker.o + .debug_macro 0x0000000000000000 0x94 ./Middlewares/LibJPEG/jdmarker.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jdmarker.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jdmarker.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdmarker.o + .debug_macro 0x0000000000000000 0x57 ./Middlewares/LibJPEG/jdmarker.o + .debug_macro 0x0000000000000000 0x97 ./Middlewares/LibJPEG/jdmarker.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LibJPEG/jdmarker.o + .debug_macro 0x0000000000000000 0xfd ./Middlewares/LibJPEG/jdmarker.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jdmarker.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdmarker.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jdmarker.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jdmarker.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jdmarker.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LibJPEG/jdmarker.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LibJPEG/jdmarker.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jdmarker.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LibJPEG/jdmarker.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdmarker.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdmarker.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LibJPEG/jdmarker.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LibJPEG/jdmarker.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LibJPEG/jdmarker.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LibJPEG/jdmarker.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/LibJPEG/jdmarker.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/LibJPEG/jdmarker.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/LibJPEG/jdmarker.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jdmarker.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/LibJPEG/jdmarker.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/LibJPEG/jdmarker.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/LibJPEG/jdmarker.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jdmarker.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LibJPEG/jdmarker.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jdmarker.o + .debug_macro 0x0000000000000000 0x74 ./Middlewares/LibJPEG/jdmarker.o + .debug_macro 0x0000000000000000 0xdd ./Middlewares/LibJPEG/jdmarker.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jdmarker.o + .debug_macro 0x0000000000000000 0x6b ./Middlewares/LibJPEG/jdmarker.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdmarker.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LibJPEG/jdmarker.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdmarker.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LibJPEG/jdmarker.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdmarker.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LibJPEG/jdmarker.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdmarker.o + .debug_macro 0x0000000000000000 0x124 ./Middlewares/LibJPEG/jdmarker.o + .debug_macro 0x0000000000000000 0xe6 ./Middlewares/LibJPEG/jdmarker.o + .debug_macro 0x0000000000000000 0x8f ./Middlewares/LibJPEG/jdmarker.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jdmarker.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmaster.o + .text 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jdmaster.o + .data 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jdmaster.o + .bss 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jdmaster.o + .text.jpeg_new_colormap + 0x0000000000000000 0x4a ./Middlewares/LibJPEG/jdmaster.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LibJPEG/jdmaster.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jdmaster.o + .debug_macro 0x0000000000000000 0x5b ./Middlewares/LibJPEG/jdmaster.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LibJPEG/jdmaster.o + .debug_macro 0x0000000000000000 0x94 ./Middlewares/LibJPEG/jdmaster.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jdmaster.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jdmaster.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdmaster.o + .debug_macro 0x0000000000000000 0x57 ./Middlewares/LibJPEG/jdmaster.o + .debug_macro 0x0000000000000000 0x97 ./Middlewares/LibJPEG/jdmaster.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LibJPEG/jdmaster.o + .debug_macro 0x0000000000000000 0xfd ./Middlewares/LibJPEG/jdmaster.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jdmaster.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdmaster.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jdmaster.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jdmaster.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jdmaster.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LibJPEG/jdmaster.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LibJPEG/jdmaster.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jdmaster.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LibJPEG/jdmaster.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdmaster.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdmaster.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LibJPEG/jdmaster.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LibJPEG/jdmaster.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LibJPEG/jdmaster.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LibJPEG/jdmaster.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/LibJPEG/jdmaster.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/LibJPEG/jdmaster.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/LibJPEG/jdmaster.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jdmaster.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/LibJPEG/jdmaster.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/LibJPEG/jdmaster.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/LibJPEG/jdmaster.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jdmaster.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LibJPEG/jdmaster.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jdmaster.o + .debug_macro 0x0000000000000000 0x74 ./Middlewares/LibJPEG/jdmaster.o + .debug_macro 0x0000000000000000 0xdd ./Middlewares/LibJPEG/jdmaster.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jdmaster.o + .debug_macro 0x0000000000000000 0x6b ./Middlewares/LibJPEG/jdmaster.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdmaster.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LibJPEG/jdmaster.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdmaster.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LibJPEG/jdmaster.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdmaster.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LibJPEG/jdmaster.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdmaster.o + .debug_macro 0x0000000000000000 0x124 ./Middlewares/LibJPEG/jdmaster.o + .debug_macro 0x0000000000000000 0xe6 ./Middlewares/LibJPEG/jdmaster.o + .debug_macro 0x0000000000000000 0x8f ./Middlewares/LibJPEG/jdmaster.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jdmaster.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmerge.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmerge.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmerge.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmerge.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmerge.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmerge.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmerge.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmerge.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmerge.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmerge.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmerge.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmerge.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmerge.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmerge.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmerge.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmerge.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmerge.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmerge.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmerge.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmerge.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmerge.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmerge.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmerge.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmerge.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmerge.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmerge.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmerge.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmerge.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmerge.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmerge.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmerge.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmerge.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmerge.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmerge.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmerge.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmerge.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmerge.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmerge.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmerge.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmerge.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmerge.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmerge.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmerge.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmerge.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmerge.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmerge.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmerge.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmerge.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmerge.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmerge.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmerge.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdmerge.o + .text 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jdmerge.o + .data 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jdmerge.o + .bss 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jdmerge.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LibJPEG/jdmerge.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jdmerge.o + .debug_macro 0x0000000000000000 0x5b ./Middlewares/LibJPEG/jdmerge.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LibJPEG/jdmerge.o + .debug_macro 0x0000000000000000 0x94 ./Middlewares/LibJPEG/jdmerge.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jdmerge.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jdmerge.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdmerge.o + .debug_macro 0x0000000000000000 0x57 ./Middlewares/LibJPEG/jdmerge.o + .debug_macro 0x0000000000000000 0x97 ./Middlewares/LibJPEG/jdmerge.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LibJPEG/jdmerge.o + .debug_macro 0x0000000000000000 0xfd ./Middlewares/LibJPEG/jdmerge.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jdmerge.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdmerge.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jdmerge.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jdmerge.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jdmerge.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LibJPEG/jdmerge.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LibJPEG/jdmerge.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jdmerge.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LibJPEG/jdmerge.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdmerge.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdmerge.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LibJPEG/jdmerge.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LibJPEG/jdmerge.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LibJPEG/jdmerge.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LibJPEG/jdmerge.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/LibJPEG/jdmerge.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/LibJPEG/jdmerge.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/LibJPEG/jdmerge.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jdmerge.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/LibJPEG/jdmerge.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/LibJPEG/jdmerge.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/LibJPEG/jdmerge.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jdmerge.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LibJPEG/jdmerge.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jdmerge.o + .debug_macro 0x0000000000000000 0x74 ./Middlewares/LibJPEG/jdmerge.o + .debug_macro 0x0000000000000000 0xdd ./Middlewares/LibJPEG/jdmerge.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jdmerge.o + .debug_macro 0x0000000000000000 0x6b ./Middlewares/LibJPEG/jdmerge.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdmerge.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LibJPEG/jdmerge.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdmerge.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LibJPEG/jdmerge.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdmerge.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LibJPEG/jdmerge.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdmerge.o + .debug_macro 0x0000000000000000 0x124 ./Middlewares/LibJPEG/jdmerge.o + .debug_macro 0x0000000000000000 0xe6 ./Middlewares/LibJPEG/jdmerge.o + .debug_macro 0x0000000000000000 0x8f ./Middlewares/LibJPEG/jdmerge.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jdmerge.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdpostct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdpostct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdpostct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdpostct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdpostct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdpostct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdpostct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdpostct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdpostct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdpostct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdpostct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdpostct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdpostct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdpostct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdpostct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdpostct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdpostct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdpostct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdpostct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdpostct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdpostct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdpostct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdpostct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdpostct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdpostct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdpostct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdpostct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdpostct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdpostct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdpostct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdpostct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdpostct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdpostct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdpostct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdpostct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdpostct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdpostct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdpostct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdpostct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdpostct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdpostct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdpostct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdpostct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdpostct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdpostct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdpostct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdpostct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdpostct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdpostct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdpostct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdpostct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdpostct.o + .text 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jdpostct.o + .data 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jdpostct.o + .bss 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jdpostct.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LibJPEG/jdpostct.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jdpostct.o + .debug_macro 0x0000000000000000 0x5b ./Middlewares/LibJPEG/jdpostct.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LibJPEG/jdpostct.o + .debug_macro 0x0000000000000000 0x94 ./Middlewares/LibJPEG/jdpostct.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jdpostct.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jdpostct.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdpostct.o + .debug_macro 0x0000000000000000 0x57 ./Middlewares/LibJPEG/jdpostct.o + .debug_macro 0x0000000000000000 0x97 ./Middlewares/LibJPEG/jdpostct.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LibJPEG/jdpostct.o + .debug_macro 0x0000000000000000 0xfd ./Middlewares/LibJPEG/jdpostct.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jdpostct.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdpostct.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jdpostct.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jdpostct.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jdpostct.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LibJPEG/jdpostct.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LibJPEG/jdpostct.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jdpostct.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LibJPEG/jdpostct.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdpostct.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdpostct.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LibJPEG/jdpostct.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LibJPEG/jdpostct.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LibJPEG/jdpostct.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LibJPEG/jdpostct.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/LibJPEG/jdpostct.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/LibJPEG/jdpostct.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/LibJPEG/jdpostct.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jdpostct.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/LibJPEG/jdpostct.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/LibJPEG/jdpostct.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/LibJPEG/jdpostct.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jdpostct.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LibJPEG/jdpostct.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jdpostct.o + .debug_macro 0x0000000000000000 0x74 ./Middlewares/LibJPEG/jdpostct.o + .debug_macro 0x0000000000000000 0xdd ./Middlewares/LibJPEG/jdpostct.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jdpostct.o + .debug_macro 0x0000000000000000 0x6b ./Middlewares/LibJPEG/jdpostct.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdpostct.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LibJPEG/jdpostct.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdpostct.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LibJPEG/jdpostct.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdpostct.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LibJPEG/jdpostct.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdpostct.o + .debug_macro 0x0000000000000000 0x124 ./Middlewares/LibJPEG/jdpostct.o + .debug_macro 0x0000000000000000 0xe6 ./Middlewares/LibJPEG/jdpostct.o + .debug_macro 0x0000000000000000 0x8f ./Middlewares/LibJPEG/jdpostct.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jdpostct.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdsample.o + .text 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jdsample.o + .data 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jdsample.o + .bss 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jdsample.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LibJPEG/jdsample.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jdsample.o + .debug_macro 0x0000000000000000 0x5b ./Middlewares/LibJPEG/jdsample.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LibJPEG/jdsample.o + .debug_macro 0x0000000000000000 0x94 ./Middlewares/LibJPEG/jdsample.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jdsample.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jdsample.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdsample.o + .debug_macro 0x0000000000000000 0x57 ./Middlewares/LibJPEG/jdsample.o + .debug_macro 0x0000000000000000 0x97 ./Middlewares/LibJPEG/jdsample.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LibJPEG/jdsample.o + .debug_macro 0x0000000000000000 0xfd ./Middlewares/LibJPEG/jdsample.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jdsample.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdsample.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jdsample.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jdsample.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jdsample.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LibJPEG/jdsample.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LibJPEG/jdsample.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jdsample.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LibJPEG/jdsample.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdsample.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdsample.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LibJPEG/jdsample.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LibJPEG/jdsample.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LibJPEG/jdsample.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LibJPEG/jdsample.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/LibJPEG/jdsample.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/LibJPEG/jdsample.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/LibJPEG/jdsample.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jdsample.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/LibJPEG/jdsample.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/LibJPEG/jdsample.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/LibJPEG/jdsample.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jdsample.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LibJPEG/jdsample.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jdsample.o + .debug_macro 0x0000000000000000 0x74 ./Middlewares/LibJPEG/jdsample.o + .debug_macro 0x0000000000000000 0xdd ./Middlewares/LibJPEG/jdsample.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jdsample.o + .debug_macro 0x0000000000000000 0x6b ./Middlewares/LibJPEG/jdsample.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdsample.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LibJPEG/jdsample.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdsample.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LibJPEG/jdsample.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdsample.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LibJPEG/jdsample.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdsample.o + .debug_macro 0x0000000000000000 0x124 ./Middlewares/LibJPEG/jdsample.o + .debug_macro 0x0000000000000000 0xe6 ./Middlewares/LibJPEG/jdsample.o + .debug_macro 0x0000000000000000 0x8f ./Middlewares/LibJPEG/jdsample.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jdsample.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdtrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdtrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdtrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdtrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdtrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdtrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdtrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdtrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdtrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdtrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdtrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdtrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdtrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdtrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdtrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdtrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdtrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdtrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdtrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdtrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdtrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdtrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdtrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdtrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdtrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdtrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdtrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdtrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdtrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdtrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdtrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdtrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdtrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdtrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdtrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdtrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdtrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdtrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdtrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdtrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdtrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdtrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdtrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdtrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdtrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdtrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdtrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdtrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdtrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdtrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdtrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jdtrans.o + .text 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jdtrans.o + .data 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jdtrans.o + .bss 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jdtrans.o + .text.jpeg_read_coefficients + 0x0000000000000000 0xea ./Middlewares/LibJPEG/jdtrans.o + .debug_info 0x0000000000000000 0x17af ./Middlewares/LibJPEG/jdtrans.o + .debug_abbrev 0x0000000000000000 0x298 ./Middlewares/LibJPEG/jdtrans.o + .debug_loclists + 0x0000000000000000 0x93 ./Middlewares/LibJPEG/jdtrans.o + .debug_aranges + 0x0000000000000000 0x20 ./Middlewares/LibJPEG/jdtrans.o + .debug_rnglists + 0x0000000000000000 0x2e ./Middlewares/LibJPEG/jdtrans.o + .debug_macro 0x0000000000000000 0x284 ./Middlewares/LibJPEG/jdtrans.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LibJPEG/jdtrans.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jdtrans.o + .debug_macro 0x0000000000000000 0x5b ./Middlewares/LibJPEG/jdtrans.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LibJPEG/jdtrans.o + .debug_macro 0x0000000000000000 0x94 ./Middlewares/LibJPEG/jdtrans.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jdtrans.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jdtrans.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdtrans.o + .debug_macro 0x0000000000000000 0x57 ./Middlewares/LibJPEG/jdtrans.o + .debug_macro 0x0000000000000000 0x97 ./Middlewares/LibJPEG/jdtrans.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LibJPEG/jdtrans.o + .debug_macro 0x0000000000000000 0xfd ./Middlewares/LibJPEG/jdtrans.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jdtrans.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdtrans.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jdtrans.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jdtrans.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jdtrans.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LibJPEG/jdtrans.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LibJPEG/jdtrans.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jdtrans.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LibJPEG/jdtrans.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdtrans.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdtrans.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LibJPEG/jdtrans.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LibJPEG/jdtrans.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LibJPEG/jdtrans.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LibJPEG/jdtrans.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/LibJPEG/jdtrans.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/LibJPEG/jdtrans.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/LibJPEG/jdtrans.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jdtrans.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/LibJPEG/jdtrans.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/LibJPEG/jdtrans.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/LibJPEG/jdtrans.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jdtrans.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LibJPEG/jdtrans.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jdtrans.o + .debug_macro 0x0000000000000000 0x74 ./Middlewares/LibJPEG/jdtrans.o + .debug_macro 0x0000000000000000 0xdd ./Middlewares/LibJPEG/jdtrans.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jdtrans.o + .debug_macro 0x0000000000000000 0x6b ./Middlewares/LibJPEG/jdtrans.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdtrans.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LibJPEG/jdtrans.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdtrans.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LibJPEG/jdtrans.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdtrans.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LibJPEG/jdtrans.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jdtrans.o + .debug_macro 0x0000000000000000 0x124 ./Middlewares/LibJPEG/jdtrans.o + .debug_macro 0x0000000000000000 0xe6 ./Middlewares/LibJPEG/jdtrans.o + .debug_macro 0x0000000000000000 0x8f ./Middlewares/LibJPEG/jdtrans.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jdtrans.o + .debug_line 0x0000000000000000 0x98b ./Middlewares/LibJPEG/jdtrans.o + .debug_str 0x0000000000000000 0xf43e ./Middlewares/LibJPEG/jdtrans.o + .comment 0x0000000000000000 0x44 ./Middlewares/LibJPEG/jdtrans.o + .debug_frame 0x0000000000000000 0x28 ./Middlewares/LibJPEG/jdtrans.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jdtrans.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jerror.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jerror.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jerror.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jerror.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jerror.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jerror.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jerror.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jerror.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jerror.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jerror.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jerror.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jerror.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jerror.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jerror.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jerror.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jerror.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jerror.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jerror.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jerror.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jerror.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jerror.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jerror.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jerror.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jerror.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jerror.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jerror.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jerror.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jerror.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jerror.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jerror.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jerror.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jerror.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jerror.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jerror.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jerror.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jerror.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jerror.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jerror.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jerror.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jerror.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jerror.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jerror.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jerror.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jerror.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jerror.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jerror.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jerror.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jerror.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jerror.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jerror.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jerror.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jerror.o + .text 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jerror.o + .data 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jerror.o + .bss 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jerror.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LibJPEG/jerror.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jerror.o + .debug_macro 0x0000000000000000 0x5b ./Middlewares/LibJPEG/jerror.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LibJPEG/jerror.o + .debug_macro 0x0000000000000000 0x94 ./Middlewares/LibJPEG/jerror.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jerror.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jerror.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jerror.o + .debug_macro 0x0000000000000000 0x57 ./Middlewares/LibJPEG/jerror.o + .debug_macro 0x0000000000000000 0x97 ./Middlewares/LibJPEG/jerror.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LibJPEG/jerror.o + .debug_macro 0x0000000000000000 0xfd ./Middlewares/LibJPEG/jerror.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jerror.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jerror.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jerror.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jerror.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jerror.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LibJPEG/jerror.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LibJPEG/jerror.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jerror.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LibJPEG/jerror.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jerror.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jerror.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LibJPEG/jerror.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LibJPEG/jerror.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LibJPEG/jerror.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LibJPEG/jerror.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/LibJPEG/jerror.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/LibJPEG/jerror.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/LibJPEG/jerror.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jerror.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/LibJPEG/jerror.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/LibJPEG/jerror.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/LibJPEG/jerror.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jerror.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LibJPEG/jerror.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jerror.o + .debug_macro 0x0000000000000000 0x74 ./Middlewares/LibJPEG/jerror.o + .debug_macro 0x0000000000000000 0xdd ./Middlewares/LibJPEG/jerror.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jerror.o + .debug_macro 0x0000000000000000 0x64 ./Middlewares/LibJPEG/jerror.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jerror.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LibJPEG/jerror.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jerror.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LibJPEG/jerror.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jerror.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LibJPEG/jerror.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jerror.o + .debug_macro 0x0000000000000000 0x67 ./Middlewares/LibJPEG/jerror.o + .debug_macro 0x0000000000000000 0xe6 ./Middlewares/LibJPEG/jerror.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jerror.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctflt.o + .text 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jfdctflt.o + .data 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jfdctflt.o + .bss 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jfdctflt.o + .text.jpeg_fdct_float + 0x0000000000000000 0x20c ./Middlewares/LibJPEG/jfdctflt.o + .debug_info 0x0000000000000000 0x2ae ./Middlewares/LibJPEG/jfdctflt.o + .debug_abbrev 0x0000000000000000 0xaf ./Middlewares/LibJPEG/jfdctflt.o + .debug_loclists + 0x0000000000000000 0x47c ./Middlewares/LibJPEG/jfdctflt.o + .debug_aranges + 0x0000000000000000 0x20 ./Middlewares/LibJPEG/jfdctflt.o + .debug_rnglists + 0x0000000000000000 0x14 ./Middlewares/LibJPEG/jfdctflt.o + .debug_macro 0x0000000000000000 0x28d ./Middlewares/LibJPEG/jfdctflt.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LibJPEG/jfdctflt.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jfdctflt.o + .debug_macro 0x0000000000000000 0x5b ./Middlewares/LibJPEG/jfdctflt.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LibJPEG/jfdctflt.o + .debug_macro 0x0000000000000000 0x94 ./Middlewares/LibJPEG/jfdctflt.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jfdctflt.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jfdctflt.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jfdctflt.o + .debug_macro 0x0000000000000000 0x57 ./Middlewares/LibJPEG/jfdctflt.o + .debug_macro 0x0000000000000000 0x97 ./Middlewares/LibJPEG/jfdctflt.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LibJPEG/jfdctflt.o + .debug_macro 0x0000000000000000 0xfd ./Middlewares/LibJPEG/jfdctflt.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jfdctflt.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jfdctflt.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jfdctflt.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jfdctflt.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jfdctflt.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LibJPEG/jfdctflt.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LibJPEG/jfdctflt.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jfdctflt.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LibJPEG/jfdctflt.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jfdctflt.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jfdctflt.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LibJPEG/jfdctflt.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LibJPEG/jfdctflt.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LibJPEG/jfdctflt.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LibJPEG/jfdctflt.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/LibJPEG/jfdctflt.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/LibJPEG/jfdctflt.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/LibJPEG/jfdctflt.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jfdctflt.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/LibJPEG/jfdctflt.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/LibJPEG/jfdctflt.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/LibJPEG/jfdctflt.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jfdctflt.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LibJPEG/jfdctflt.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jfdctflt.o + .debug_macro 0x0000000000000000 0x74 ./Middlewares/LibJPEG/jfdctflt.o + .debug_macro 0x0000000000000000 0xdd ./Middlewares/LibJPEG/jfdctflt.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jfdctflt.o + .debug_macro 0x0000000000000000 0x6b ./Middlewares/LibJPEG/jfdctflt.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jfdctflt.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LibJPEG/jfdctflt.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jfdctflt.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LibJPEG/jfdctflt.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jfdctflt.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LibJPEG/jfdctflt.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jfdctflt.o + .debug_macro 0x0000000000000000 0x124 ./Middlewares/LibJPEG/jfdctflt.o + .debug_macro 0x0000000000000000 0xe6 ./Middlewares/LibJPEG/jfdctflt.o + .debug_macro 0x0000000000000000 0x8f ./Middlewares/LibJPEG/jfdctflt.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jfdctflt.o + .debug_macro 0x0000000000000000 0x40 ./Middlewares/LibJPEG/jfdctflt.o + .debug_line 0x0000000000000000 0xdbe ./Middlewares/LibJPEG/jfdctflt.o + .debug_str 0x0000000000000000 0xdec7 ./Middlewares/LibJPEG/jfdctflt.o + .comment 0x0000000000000000 0x44 ./Middlewares/LibJPEG/jfdctflt.o + .debug_frame 0x0000000000000000 0x30 ./Middlewares/LibJPEG/jfdctflt.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jfdctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctfst.o + .text 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jfdctfst.o + .data 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jfdctfst.o + .bss 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jfdctfst.o + .text.jpeg_fdct_ifast + 0x0000000000000000 0x1a2 ./Middlewares/LibJPEG/jfdctfst.o + .debug_info 0x0000000000000000 0x2ca ./Middlewares/LibJPEG/jfdctfst.o + .debug_abbrev 0x0000000000000000 0x9f ./Middlewares/LibJPEG/jfdctfst.o + .debug_loclists + 0x0000000000000000 0x402 ./Middlewares/LibJPEG/jfdctfst.o + .debug_aranges + 0x0000000000000000 0x20 ./Middlewares/LibJPEG/jfdctfst.o + .debug_rnglists + 0x0000000000000000 0x14 ./Middlewares/LibJPEG/jfdctfst.o + .debug_macro 0x0000000000000000 0x2bd ./Middlewares/LibJPEG/jfdctfst.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LibJPEG/jfdctfst.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jfdctfst.o + .debug_macro 0x0000000000000000 0x5b ./Middlewares/LibJPEG/jfdctfst.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LibJPEG/jfdctfst.o + .debug_macro 0x0000000000000000 0x94 ./Middlewares/LibJPEG/jfdctfst.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jfdctfst.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jfdctfst.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jfdctfst.o + .debug_macro 0x0000000000000000 0x57 ./Middlewares/LibJPEG/jfdctfst.o + .debug_macro 0x0000000000000000 0x97 ./Middlewares/LibJPEG/jfdctfst.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LibJPEG/jfdctfst.o + .debug_macro 0x0000000000000000 0xfd ./Middlewares/LibJPEG/jfdctfst.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jfdctfst.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jfdctfst.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jfdctfst.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jfdctfst.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jfdctfst.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LibJPEG/jfdctfst.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LibJPEG/jfdctfst.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jfdctfst.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LibJPEG/jfdctfst.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jfdctfst.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jfdctfst.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LibJPEG/jfdctfst.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LibJPEG/jfdctfst.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LibJPEG/jfdctfst.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LibJPEG/jfdctfst.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/LibJPEG/jfdctfst.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/LibJPEG/jfdctfst.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/LibJPEG/jfdctfst.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jfdctfst.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/LibJPEG/jfdctfst.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/LibJPEG/jfdctfst.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/LibJPEG/jfdctfst.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jfdctfst.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LibJPEG/jfdctfst.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jfdctfst.o + .debug_macro 0x0000000000000000 0x74 ./Middlewares/LibJPEG/jfdctfst.o + .debug_macro 0x0000000000000000 0xdd ./Middlewares/LibJPEG/jfdctfst.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jfdctfst.o + .debug_macro 0x0000000000000000 0x6b ./Middlewares/LibJPEG/jfdctfst.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jfdctfst.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LibJPEG/jfdctfst.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jfdctfst.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LibJPEG/jfdctfst.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jfdctfst.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LibJPEG/jfdctfst.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jfdctfst.o + .debug_macro 0x0000000000000000 0x124 ./Middlewares/LibJPEG/jfdctfst.o + .debug_macro 0x0000000000000000 0xe6 ./Middlewares/LibJPEG/jfdctfst.o + .debug_macro 0x0000000000000000 0x8f ./Middlewares/LibJPEG/jfdctfst.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jfdctfst.o + .debug_macro 0x0000000000000000 0x40 ./Middlewares/LibJPEG/jfdctfst.o + .debug_line 0x0000000000000000 0xda5 ./Middlewares/LibJPEG/jfdctfst.o + .debug_str 0x0000000000000000 0xdfc5 ./Middlewares/LibJPEG/jfdctfst.o + .comment 0x0000000000000000 0x44 ./Middlewares/LibJPEG/jfdctfst.o + .debug_frame 0x0000000000000000 0x3c ./Middlewares/LibJPEG/jfdctfst.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jfdctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jfdctint.o + .text 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jfdctint.o + .data 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jfdctint.o + .bss 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jfdctint.o + .text.jpeg_fdct_islow + 0x0000000000000000 0x244 ./Middlewares/LibJPEG/jfdctint.o + .text.jpeg_fdct_7x7 + 0x0000000000000000 0x234 ./Middlewares/LibJPEG/jfdctint.o + .text.jpeg_fdct_6x6 + 0x0000000000000000 0x190 ./Middlewares/LibJPEG/jfdctint.o + .text.jpeg_fdct_5x5 + 0x0000000000000000 0x154 ./Middlewares/LibJPEG/jfdctint.o + .text.jpeg_fdct_4x4 + 0x0000000000000000 0xf4 ./Middlewares/LibJPEG/jfdctint.o + .text.jpeg_fdct_3x3 + 0x0000000000000000 0xc8 ./Middlewares/LibJPEG/jfdctint.o + .text.jpeg_fdct_2x2 + 0x0000000000000000 0x48 ./Middlewares/LibJPEG/jfdctint.o + .text.jpeg_fdct_1x1 + 0x0000000000000000 0x1e ./Middlewares/LibJPEG/jfdctint.o + .text.jpeg_fdct_9x9 + 0x0000000000000000 0x2a0 ./Middlewares/LibJPEG/jfdctint.o + .text.jpeg_fdct_10x10 + 0x0000000000000000 0x30c ./Middlewares/LibJPEG/jfdctint.o + .text.jpeg_fdct_11x11 + 0x0000000000000000 0x428 ./Middlewares/LibJPEG/jfdctint.o + .text.jpeg_fdct_12x12 + 0x0000000000000000 0x3c0 ./Middlewares/LibJPEG/jfdctint.o + .text.jpeg_fdct_13x13 + 0x0000000000000000 0x4bc ./Middlewares/LibJPEG/jfdctint.o + .text.jpeg_fdct_14x14 + 0x0000000000000000 0x444 ./Middlewares/LibJPEG/jfdctint.o + .text.jpeg_fdct_15x15 + 0x0000000000000000 0x448 ./Middlewares/LibJPEG/jfdctint.o + .text.jpeg_fdct_16x16 + 0x0000000000000000 0x538 ./Middlewares/LibJPEG/jfdctint.o + .text.jpeg_fdct_16x8 + 0x0000000000000000 0x3dc ./Middlewares/LibJPEG/jfdctint.o + .text.jpeg_fdct_14x7 + 0x0000000000000000 0x318 ./Middlewares/LibJPEG/jfdctint.o + .text.jpeg_fdct_12x6 + 0x0000000000000000 0x288 ./Middlewares/LibJPEG/jfdctint.o + .text.jpeg_fdct_10x5 + 0x0000000000000000 0x228 ./Middlewares/LibJPEG/jfdctint.o + .text.jpeg_fdct_8x4 + 0x0000000000000000 0x1a8 ./Middlewares/LibJPEG/jfdctint.o + .text.jpeg_fdct_6x3 + 0x0000000000000000 0x12a ./Middlewares/LibJPEG/jfdctint.o + .text.jpeg_fdct_4x2 + 0x0000000000000000 0xb8 ./Middlewares/LibJPEG/jfdctint.o + .text.jpeg_fdct_2x1 + 0x0000000000000000 0x2c ./Middlewares/LibJPEG/jfdctint.o + .text.jpeg_fdct_8x16 + 0x0000000000000000 0x408 ./Middlewares/LibJPEG/jfdctint.o + .text.jpeg_fdct_7x14 + 0x0000000000000000 0x370 ./Middlewares/LibJPEG/jfdctint.o + .text.jpeg_fdct_6x12 + 0x0000000000000000 0x2a8 ./Middlewares/LibJPEG/jfdctint.o + .text.jpeg_fdct_5x10 + 0x0000000000000000 0x238 ./Middlewares/LibJPEG/jfdctint.o + .text.jpeg_fdct_4x8 + 0x0000000000000000 0x1ac ./Middlewares/LibJPEG/jfdctint.o + .text.jpeg_fdct_3x6 + 0x0000000000000000 0x130 ./Middlewares/LibJPEG/jfdctint.o + .text.jpeg_fdct_2x4 + 0x0000000000000000 0xa0 ./Middlewares/LibJPEG/jfdctint.o + .text.jpeg_fdct_1x2 + 0x0000000000000000 0x2c ./Middlewares/LibJPEG/jfdctint.o + .debug_info 0x0000000000000000 0x2e30 ./Middlewares/LibJPEG/jfdctint.o + .debug_abbrev 0x0000000000000000 0x16a ./Middlewares/LibJPEG/jfdctint.o + .debug_loclists + 0x0000000000000000 0x810b ./Middlewares/LibJPEG/jfdctint.o + .debug_aranges + 0x0000000000000000 0x118 ./Middlewares/LibJPEG/jfdctint.o + .debug_rnglists + 0x0000000000000000 0xe9 ./Middlewares/LibJPEG/jfdctint.o + .debug_macro 0x0000000000000000 0x2e8 ./Middlewares/LibJPEG/jfdctint.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LibJPEG/jfdctint.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jfdctint.o + .debug_macro 0x0000000000000000 0x5b ./Middlewares/LibJPEG/jfdctint.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LibJPEG/jfdctint.o + .debug_macro 0x0000000000000000 0x94 ./Middlewares/LibJPEG/jfdctint.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jfdctint.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jfdctint.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jfdctint.o + .debug_macro 0x0000000000000000 0x57 ./Middlewares/LibJPEG/jfdctint.o + .debug_macro 0x0000000000000000 0x97 ./Middlewares/LibJPEG/jfdctint.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LibJPEG/jfdctint.o + .debug_macro 0x0000000000000000 0xfd ./Middlewares/LibJPEG/jfdctint.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jfdctint.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jfdctint.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jfdctint.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jfdctint.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jfdctint.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LibJPEG/jfdctint.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LibJPEG/jfdctint.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jfdctint.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LibJPEG/jfdctint.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jfdctint.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jfdctint.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LibJPEG/jfdctint.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LibJPEG/jfdctint.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LibJPEG/jfdctint.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LibJPEG/jfdctint.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/LibJPEG/jfdctint.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/LibJPEG/jfdctint.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/LibJPEG/jfdctint.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jfdctint.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/LibJPEG/jfdctint.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/LibJPEG/jfdctint.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/LibJPEG/jfdctint.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jfdctint.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LibJPEG/jfdctint.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jfdctint.o + .debug_macro 0x0000000000000000 0x74 ./Middlewares/LibJPEG/jfdctint.o + .debug_macro 0x0000000000000000 0xdd ./Middlewares/LibJPEG/jfdctint.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jfdctint.o + .debug_macro 0x0000000000000000 0x6b ./Middlewares/LibJPEG/jfdctint.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jfdctint.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LibJPEG/jfdctint.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jfdctint.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LibJPEG/jfdctint.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jfdctint.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LibJPEG/jfdctint.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jfdctint.o + .debug_macro 0x0000000000000000 0x124 ./Middlewares/LibJPEG/jfdctint.o + .debug_macro 0x0000000000000000 0xe6 ./Middlewares/LibJPEG/jfdctint.o + .debug_macro 0x0000000000000000 0x8f ./Middlewares/LibJPEG/jfdctint.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jfdctint.o + .debug_macro 0x0000000000000000 0x40 ./Middlewares/LibJPEG/jfdctint.o + .debug_line 0x0000000000000000 0x9e47 ./Middlewares/LibJPEG/jfdctint.o + .debug_str 0x0000000000000000 0xe2a6 ./Middlewares/LibJPEG/jfdctint.o + .comment 0x0000000000000000 0x44 ./Middlewares/LibJPEG/jfdctint.o + .debug_frame 0x0000000000000000 0x578 ./Middlewares/LibJPEG/jfdctint.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jfdctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctflt.o + .text 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jidctflt.o + .data 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jidctflt.o + .bss 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jidctflt.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LibJPEG/jidctflt.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jidctflt.o + .debug_macro 0x0000000000000000 0x5b ./Middlewares/LibJPEG/jidctflt.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LibJPEG/jidctflt.o + .debug_macro 0x0000000000000000 0x94 ./Middlewares/LibJPEG/jidctflt.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jidctflt.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jidctflt.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jidctflt.o + .debug_macro 0x0000000000000000 0x57 ./Middlewares/LibJPEG/jidctflt.o + .debug_macro 0x0000000000000000 0x97 ./Middlewares/LibJPEG/jidctflt.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LibJPEG/jidctflt.o + .debug_macro 0x0000000000000000 0xfd ./Middlewares/LibJPEG/jidctflt.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jidctflt.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jidctflt.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jidctflt.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jidctflt.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jidctflt.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LibJPEG/jidctflt.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LibJPEG/jidctflt.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jidctflt.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LibJPEG/jidctflt.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jidctflt.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jidctflt.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LibJPEG/jidctflt.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LibJPEG/jidctflt.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LibJPEG/jidctflt.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LibJPEG/jidctflt.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/LibJPEG/jidctflt.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/LibJPEG/jidctflt.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/LibJPEG/jidctflt.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jidctflt.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/LibJPEG/jidctflt.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/LibJPEG/jidctflt.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/LibJPEG/jidctflt.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jidctflt.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LibJPEG/jidctflt.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jidctflt.o + .debug_macro 0x0000000000000000 0x74 ./Middlewares/LibJPEG/jidctflt.o + .debug_macro 0x0000000000000000 0xdd ./Middlewares/LibJPEG/jidctflt.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jidctflt.o + .debug_macro 0x0000000000000000 0x6b ./Middlewares/LibJPEG/jidctflt.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jidctflt.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LibJPEG/jidctflt.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jidctflt.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LibJPEG/jidctflt.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jidctflt.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LibJPEG/jidctflt.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jidctflt.o + .debug_macro 0x0000000000000000 0x124 ./Middlewares/LibJPEG/jidctflt.o + .debug_macro 0x0000000000000000 0xe6 ./Middlewares/LibJPEG/jidctflt.o + .debug_macro 0x0000000000000000 0x8f ./Middlewares/LibJPEG/jidctflt.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jidctflt.o + .debug_macro 0x0000000000000000 0x40 ./Middlewares/LibJPEG/jidctflt.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctfst.o + .text 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jidctfst.o + .data 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jidctfst.o + .bss 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jidctfst.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LibJPEG/jidctfst.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jidctfst.o + .debug_macro 0x0000000000000000 0x5b ./Middlewares/LibJPEG/jidctfst.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LibJPEG/jidctfst.o + .debug_macro 0x0000000000000000 0x94 ./Middlewares/LibJPEG/jidctfst.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jidctfst.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jidctfst.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jidctfst.o + .debug_macro 0x0000000000000000 0x57 ./Middlewares/LibJPEG/jidctfst.o + .debug_macro 0x0000000000000000 0x97 ./Middlewares/LibJPEG/jidctfst.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LibJPEG/jidctfst.o + .debug_macro 0x0000000000000000 0xfd ./Middlewares/LibJPEG/jidctfst.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jidctfst.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jidctfst.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jidctfst.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jidctfst.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jidctfst.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LibJPEG/jidctfst.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LibJPEG/jidctfst.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jidctfst.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LibJPEG/jidctfst.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jidctfst.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jidctfst.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LibJPEG/jidctfst.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LibJPEG/jidctfst.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LibJPEG/jidctfst.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LibJPEG/jidctfst.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/LibJPEG/jidctfst.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/LibJPEG/jidctfst.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/LibJPEG/jidctfst.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jidctfst.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/LibJPEG/jidctfst.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/LibJPEG/jidctfst.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/LibJPEG/jidctfst.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jidctfst.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LibJPEG/jidctfst.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jidctfst.o + .debug_macro 0x0000000000000000 0x74 ./Middlewares/LibJPEG/jidctfst.o + .debug_macro 0x0000000000000000 0xdd ./Middlewares/LibJPEG/jidctfst.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jidctfst.o + .debug_macro 0x0000000000000000 0x6b ./Middlewares/LibJPEG/jidctfst.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jidctfst.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LibJPEG/jidctfst.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jidctfst.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LibJPEG/jidctfst.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jidctfst.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LibJPEG/jidctfst.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jidctfst.o + .debug_macro 0x0000000000000000 0x124 ./Middlewares/LibJPEG/jidctfst.o + .debug_macro 0x0000000000000000 0xe6 ./Middlewares/LibJPEG/jidctfst.o + .debug_macro 0x0000000000000000 0x8f ./Middlewares/LibJPEG/jidctfst.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jidctfst.o + .debug_macro 0x0000000000000000 0x40 ./Middlewares/LibJPEG/jidctfst.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jidctint.o + .text 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jidctint.o + .data 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jidctint.o + .bss 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jidctint.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LibJPEG/jidctint.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jidctint.o + .debug_macro 0x0000000000000000 0x5b ./Middlewares/LibJPEG/jidctint.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LibJPEG/jidctint.o + .debug_macro 0x0000000000000000 0x94 ./Middlewares/LibJPEG/jidctint.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jidctint.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jidctint.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jidctint.o + .debug_macro 0x0000000000000000 0x57 ./Middlewares/LibJPEG/jidctint.o + .debug_macro 0x0000000000000000 0x97 ./Middlewares/LibJPEG/jidctint.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LibJPEG/jidctint.o + .debug_macro 0x0000000000000000 0xfd ./Middlewares/LibJPEG/jidctint.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jidctint.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jidctint.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jidctint.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jidctint.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jidctint.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LibJPEG/jidctint.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LibJPEG/jidctint.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jidctint.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LibJPEG/jidctint.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jidctint.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jidctint.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LibJPEG/jidctint.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LibJPEG/jidctint.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LibJPEG/jidctint.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LibJPEG/jidctint.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/LibJPEG/jidctint.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/LibJPEG/jidctint.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/LibJPEG/jidctint.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jidctint.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/LibJPEG/jidctint.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/LibJPEG/jidctint.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/LibJPEG/jidctint.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jidctint.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LibJPEG/jidctint.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jidctint.o + .debug_macro 0x0000000000000000 0x74 ./Middlewares/LibJPEG/jidctint.o + .debug_macro 0x0000000000000000 0xdd ./Middlewares/LibJPEG/jidctint.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jidctint.o + .debug_macro 0x0000000000000000 0x6b ./Middlewares/LibJPEG/jidctint.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jidctint.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LibJPEG/jidctint.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jidctint.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LibJPEG/jidctint.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jidctint.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LibJPEG/jidctint.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jidctint.o + .debug_macro 0x0000000000000000 0x124 ./Middlewares/LibJPEG/jidctint.o + .debug_macro 0x0000000000000000 0xe6 ./Middlewares/LibJPEG/jidctint.o + .debug_macro 0x0000000000000000 0x8f ./Middlewares/LibJPEG/jidctint.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jidctint.o + .debug_macro 0x0000000000000000 0x40 ./Middlewares/LibJPEG/jidctint.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemmgr.o + .text 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jmemmgr.o + .data 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jmemmgr.o + .bss 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jmemmgr.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LibJPEG/jmemmgr.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jmemmgr.o + .debug_macro 0x0000000000000000 0x5b ./Middlewares/LibJPEG/jmemmgr.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LibJPEG/jmemmgr.o + .debug_macro 0x0000000000000000 0x94 ./Middlewares/LibJPEG/jmemmgr.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jmemmgr.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jmemmgr.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jmemmgr.o + .debug_macro 0x0000000000000000 0x57 ./Middlewares/LibJPEG/jmemmgr.o + .debug_macro 0x0000000000000000 0x97 ./Middlewares/LibJPEG/jmemmgr.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LibJPEG/jmemmgr.o + .debug_macro 0x0000000000000000 0xfd ./Middlewares/LibJPEG/jmemmgr.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jmemmgr.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jmemmgr.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jmemmgr.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jmemmgr.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jmemmgr.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LibJPEG/jmemmgr.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LibJPEG/jmemmgr.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jmemmgr.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LibJPEG/jmemmgr.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jmemmgr.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jmemmgr.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LibJPEG/jmemmgr.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LibJPEG/jmemmgr.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LibJPEG/jmemmgr.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LibJPEG/jmemmgr.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/LibJPEG/jmemmgr.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/LibJPEG/jmemmgr.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/LibJPEG/jmemmgr.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jmemmgr.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/LibJPEG/jmemmgr.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/LibJPEG/jmemmgr.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/LibJPEG/jmemmgr.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jmemmgr.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LibJPEG/jmemmgr.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jmemmgr.o + .debug_macro 0x0000000000000000 0x74 ./Middlewares/LibJPEG/jmemmgr.o + .debug_macro 0x0000000000000000 0xdd ./Middlewares/LibJPEG/jmemmgr.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jmemmgr.o + .debug_macro 0x0000000000000000 0x6b ./Middlewares/LibJPEG/jmemmgr.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jmemmgr.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LibJPEG/jmemmgr.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jmemmgr.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LibJPEG/jmemmgr.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jmemmgr.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LibJPEG/jmemmgr.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jmemmgr.o + .debug_macro 0x0000000000000000 0x124 ./Middlewares/LibJPEG/jmemmgr.o + .debug_macro 0x0000000000000000 0xe6 ./Middlewares/LibJPEG/jmemmgr.o + .debug_macro 0x0000000000000000 0x8f ./Middlewares/LibJPEG/jmemmgr.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jmemmgr.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemnobs.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemnobs.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemnobs.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemnobs.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemnobs.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemnobs.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemnobs.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemnobs.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemnobs.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemnobs.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemnobs.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemnobs.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemnobs.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemnobs.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemnobs.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemnobs.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemnobs.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemnobs.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemnobs.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemnobs.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemnobs.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemnobs.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemnobs.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemnobs.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemnobs.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemnobs.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemnobs.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemnobs.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemnobs.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemnobs.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemnobs.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemnobs.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemnobs.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemnobs.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemnobs.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemnobs.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemnobs.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemnobs.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemnobs.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemnobs.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemnobs.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemnobs.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemnobs.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemnobs.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemnobs.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemnobs.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemnobs.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemnobs.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemnobs.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemnobs.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemnobs.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jmemnobs.o + .text 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jmemnobs.o + .data 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jmemnobs.o + .bss 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jmemnobs.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LibJPEG/jmemnobs.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jmemnobs.o + .debug_macro 0x0000000000000000 0x5b ./Middlewares/LibJPEG/jmemnobs.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LibJPEG/jmemnobs.o + .debug_macro 0x0000000000000000 0x94 ./Middlewares/LibJPEG/jmemnobs.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jmemnobs.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jmemnobs.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jmemnobs.o + .debug_macro 0x0000000000000000 0x57 ./Middlewares/LibJPEG/jmemnobs.o + .debug_macro 0x0000000000000000 0x97 ./Middlewares/LibJPEG/jmemnobs.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LibJPEG/jmemnobs.o + .debug_macro 0x0000000000000000 0xfd ./Middlewares/LibJPEG/jmemnobs.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jmemnobs.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jmemnobs.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jmemnobs.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jmemnobs.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jmemnobs.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LibJPEG/jmemnobs.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LibJPEG/jmemnobs.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jmemnobs.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LibJPEG/jmemnobs.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jmemnobs.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jmemnobs.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LibJPEG/jmemnobs.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LibJPEG/jmemnobs.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LibJPEG/jmemnobs.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LibJPEG/jmemnobs.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/LibJPEG/jmemnobs.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/LibJPEG/jmemnobs.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/LibJPEG/jmemnobs.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jmemnobs.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/LibJPEG/jmemnobs.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/LibJPEG/jmemnobs.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/LibJPEG/jmemnobs.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jmemnobs.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LibJPEG/jmemnobs.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jmemnobs.o + .debug_macro 0x0000000000000000 0x74 ./Middlewares/LibJPEG/jmemnobs.o + .debug_macro 0x0000000000000000 0xdd ./Middlewares/LibJPEG/jmemnobs.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jmemnobs.o + .debug_macro 0x0000000000000000 0x6b ./Middlewares/LibJPEG/jmemnobs.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jmemnobs.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LibJPEG/jmemnobs.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jmemnobs.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LibJPEG/jmemnobs.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jmemnobs.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LibJPEG/jmemnobs.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jmemnobs.o + .debug_macro 0x0000000000000000 0x124 ./Middlewares/LibJPEG/jmemnobs.o + .debug_macro 0x0000000000000000 0xe6 ./Middlewares/LibJPEG/jmemnobs.o + .debug_macro 0x0000000000000000 0x8f ./Middlewares/LibJPEG/jmemnobs.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jmemnobs.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant1.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant1.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant1.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant1.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant1.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant1.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant1.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant1.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant1.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant1.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant1.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant1.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant1.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant1.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant1.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant1.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant1.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant1.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant1.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant1.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant1.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant1.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant1.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant1.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant1.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant1.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant1.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant1.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant1.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant1.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant1.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant1.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant1.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant1.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant1.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant1.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant1.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant1.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant1.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant1.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant1.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant1.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant1.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant1.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant1.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant1.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant1.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant1.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant1.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant1.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant1.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant1.o + .text 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jquant1.o + .data 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jquant1.o + .bss 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jquant1.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LibJPEG/jquant1.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jquant1.o + .debug_macro 0x0000000000000000 0x5b ./Middlewares/LibJPEG/jquant1.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LibJPEG/jquant1.o + .debug_macro 0x0000000000000000 0x94 ./Middlewares/LibJPEG/jquant1.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jquant1.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jquant1.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jquant1.o + .debug_macro 0x0000000000000000 0x57 ./Middlewares/LibJPEG/jquant1.o + .debug_macro 0x0000000000000000 0x97 ./Middlewares/LibJPEG/jquant1.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LibJPEG/jquant1.o + .debug_macro 0x0000000000000000 0xfd ./Middlewares/LibJPEG/jquant1.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jquant1.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jquant1.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jquant1.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jquant1.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jquant1.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LibJPEG/jquant1.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LibJPEG/jquant1.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jquant1.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LibJPEG/jquant1.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jquant1.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jquant1.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LibJPEG/jquant1.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LibJPEG/jquant1.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LibJPEG/jquant1.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LibJPEG/jquant1.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/LibJPEG/jquant1.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/LibJPEG/jquant1.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/LibJPEG/jquant1.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jquant1.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/LibJPEG/jquant1.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/LibJPEG/jquant1.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/LibJPEG/jquant1.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jquant1.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LibJPEG/jquant1.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jquant1.o + .debug_macro 0x0000000000000000 0x74 ./Middlewares/LibJPEG/jquant1.o + .debug_macro 0x0000000000000000 0xdd ./Middlewares/LibJPEG/jquant1.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jquant1.o + .debug_macro 0x0000000000000000 0x6b ./Middlewares/LibJPEG/jquant1.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jquant1.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LibJPEG/jquant1.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jquant1.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LibJPEG/jquant1.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jquant1.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LibJPEG/jquant1.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jquant1.o + .debug_macro 0x0000000000000000 0x124 ./Middlewares/LibJPEG/jquant1.o + .debug_macro 0x0000000000000000 0xe6 ./Middlewares/LibJPEG/jquant1.o + .debug_macro 0x0000000000000000 0x8f ./Middlewares/LibJPEG/jquant1.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jquant1.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant2.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant2.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant2.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant2.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant2.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant2.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant2.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant2.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant2.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant2.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant2.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant2.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant2.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant2.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant2.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant2.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant2.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant2.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant2.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant2.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant2.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant2.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant2.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant2.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant2.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant2.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant2.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant2.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant2.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant2.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant2.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant2.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant2.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant2.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant2.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant2.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant2.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant2.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant2.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant2.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant2.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant2.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant2.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant2.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant2.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant2.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant2.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant2.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant2.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant2.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant2.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jquant2.o + .text 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jquant2.o + .data 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jquant2.o + .bss 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jquant2.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LibJPEG/jquant2.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jquant2.o + .debug_macro 0x0000000000000000 0x5b ./Middlewares/LibJPEG/jquant2.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LibJPEG/jquant2.o + .debug_macro 0x0000000000000000 0x94 ./Middlewares/LibJPEG/jquant2.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jquant2.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jquant2.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jquant2.o + .debug_macro 0x0000000000000000 0x57 ./Middlewares/LibJPEG/jquant2.o + .debug_macro 0x0000000000000000 0x97 ./Middlewares/LibJPEG/jquant2.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LibJPEG/jquant2.o + .debug_macro 0x0000000000000000 0xfd ./Middlewares/LibJPEG/jquant2.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jquant2.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jquant2.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jquant2.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jquant2.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jquant2.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LibJPEG/jquant2.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LibJPEG/jquant2.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jquant2.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LibJPEG/jquant2.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jquant2.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jquant2.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LibJPEG/jquant2.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LibJPEG/jquant2.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LibJPEG/jquant2.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LibJPEG/jquant2.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/LibJPEG/jquant2.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/LibJPEG/jquant2.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/LibJPEG/jquant2.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jquant2.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/LibJPEG/jquant2.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/LibJPEG/jquant2.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/LibJPEG/jquant2.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jquant2.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LibJPEG/jquant2.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jquant2.o + .debug_macro 0x0000000000000000 0x74 ./Middlewares/LibJPEG/jquant2.o + .debug_macro 0x0000000000000000 0xdd ./Middlewares/LibJPEG/jquant2.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jquant2.o + .debug_macro 0x0000000000000000 0x6b ./Middlewares/LibJPEG/jquant2.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jquant2.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LibJPEG/jquant2.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jquant2.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LibJPEG/jquant2.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jquant2.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LibJPEG/jquant2.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jquant2.o + .debug_macro 0x0000000000000000 0x124 ./Middlewares/LibJPEG/jquant2.o + .debug_macro 0x0000000000000000 0xe6 ./Middlewares/LibJPEG/jquant2.o + .debug_macro 0x0000000000000000 0x8f ./Middlewares/LibJPEG/jquant2.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jquant2.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jutils.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jutils.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jutils.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jutils.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jutils.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jutils.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jutils.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jutils.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jutils.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jutils.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jutils.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jutils.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jutils.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jutils.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jutils.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jutils.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jutils.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jutils.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jutils.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jutils.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jutils.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jutils.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jutils.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jutils.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jutils.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jutils.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jutils.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jutils.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jutils.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jutils.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jutils.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jutils.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jutils.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jutils.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jutils.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jutils.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jutils.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jutils.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jutils.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jutils.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jutils.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jutils.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jutils.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jutils.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jutils.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jutils.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jutils.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jutils.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jutils.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jutils.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jutils.o + .group 0x0000000000000000 0xc ./Middlewares/LibJPEG/jutils.o + .text 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jutils.o + .data 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jutils.o + .bss 0x0000000000000000 0x0 ./Middlewares/LibJPEG/jutils.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LibJPEG/jutils.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jutils.o + .debug_macro 0x0000000000000000 0x5b ./Middlewares/LibJPEG/jutils.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LibJPEG/jutils.o + .debug_macro 0x0000000000000000 0x94 ./Middlewares/LibJPEG/jutils.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jutils.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jutils.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jutils.o + .debug_macro 0x0000000000000000 0x57 ./Middlewares/LibJPEG/jutils.o + .debug_macro 0x0000000000000000 0x97 ./Middlewares/LibJPEG/jutils.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LibJPEG/jutils.o + .debug_macro 0x0000000000000000 0xfd ./Middlewares/LibJPEG/jutils.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jutils.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jutils.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LibJPEG/jutils.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LibJPEG/jutils.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jutils.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LibJPEG/jutils.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LibJPEG/jutils.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jutils.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LibJPEG/jutils.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jutils.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jutils.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LibJPEG/jutils.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LibJPEG/jutils.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LibJPEG/jutils.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LibJPEG/jutils.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/LibJPEG/jutils.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/LibJPEG/jutils.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/LibJPEG/jutils.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LibJPEG/jutils.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/LibJPEG/jutils.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/LibJPEG/jutils.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/LibJPEG/jutils.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jutils.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LibJPEG/jutils.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LibJPEG/jutils.o + .debug_macro 0x0000000000000000 0x74 ./Middlewares/LibJPEG/jutils.o + .debug_macro 0x0000000000000000 0xdd ./Middlewares/LibJPEG/jutils.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LibJPEG/jutils.o + .debug_macro 0x0000000000000000 0x6b ./Middlewares/LibJPEG/jutils.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jutils.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LibJPEG/jutils.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jutils.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LibJPEG/jutils.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jutils.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LibJPEG/jutils.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LibJPEG/jutils.o + .debug_macro 0x0000000000000000 0x124 ./Middlewares/LibJPEG/jutils.o + .debug_macro 0x0000000000000000 0xe6 ./Middlewares/LibJPEG/jutils.o + .debug_macro 0x0000000000000000 0x8f ./Middlewares/LibJPEG/jutils.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LibJPEG/jutils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/altcp.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/altcp.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/altcp.o + .debug_info 0x0000000000000000 0x77 ./Middlewares/LwIP/altcp.o + .debug_abbrev 0x0000000000000000 0x28 ./Middlewares/LwIP/altcp.o + .debug_aranges + 0x0000000000000000 0x18 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x4e1 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/altcp.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/altcp.o + .debug_line 0x0000000000000000 0xc74 ./Middlewares/LwIP/altcp.o + .debug_str 0x0000000000000000 0xf9ba6 ./Middlewares/LwIP/altcp.o + .comment 0x0000000000000000 0x44 ./Middlewares/LwIP/altcp.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LwIP/altcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_alloc.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/altcp_alloc.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/altcp_alloc.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/altcp_alloc.o + .debug_info 0x0000000000000000 0x77 ./Middlewares/LwIP/altcp_alloc.o + .debug_abbrev 0x0000000000000000 0x28 ./Middlewares/LwIP/altcp_alloc.o + .debug_aranges + 0x0000000000000000 0x18 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x4e1 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/altcp_alloc.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/altcp_alloc.o + .debug_line 0x0000000000000000 0xc7a ./Middlewares/LwIP/altcp_alloc.o + .debug_str 0x0000000000000000 0xf9bac ./Middlewares/LwIP/altcp_alloc.o + .comment 0x0000000000000000 0x44 ./Middlewares/LwIP/altcp_alloc.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LwIP/altcp_alloc.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/altcp_tcp.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/altcp_tcp.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/altcp_tcp.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/altcp_tcp.o + .debug_info 0x0000000000000000 0x77 ./Middlewares/LwIP/altcp_tcp.o + .debug_abbrev 0x0000000000000000 0x28 ./Middlewares/LwIP/altcp_tcp.o + .debug_aranges + 0x0000000000000000 0x18 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x4e1 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/altcp_tcp.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/altcp_tcp.o + .debug_line 0x0000000000000000 0xc78 ./Middlewares/LwIP/altcp_tcp.o + .debug_str 0x0000000000000000 0xf9baa ./Middlewares/LwIP/altcp_tcp.o + .comment 0x0000000000000000 0x44 ./Middlewares/LwIP/altcp_tcp.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LwIP/altcp_tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_lib.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/api_lib.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/api_lib.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/api_lib.o + .text.netconn_apimsg + 0x0000000000000000 0x14 ./Middlewares/LwIP/api_lib.o + .rodata.netconn_tcp_recvd_msg.str1.1 + 0x0000000000000000 0xcf ./Middlewares/LwIP/api_lib.o + .text.netconn_tcp_recvd_msg + 0x0000000000000000 0x44 ./Middlewares/LwIP/api_lib.o + .rodata.netconn_close_shutdown.str1.1 + 0x0000000000000000 0x1c ./Middlewares/LwIP/api_lib.o + .text.netconn_close_shutdown + 0x0000000000000000 0x44 ./Middlewares/LwIP/api_lib.o + .rodata.netconn_new_with_proto_and_callback.str1.1 + 0x0000000000000000 0x70 ./Middlewares/LwIP/api_lib.o + .text.netconn_new_with_proto_and_callback + 0x0000000000000000 0xb4 ./Middlewares/LwIP/api_lib.o + .text.netconn_prepare_delete + 0x0000000000000000 0x20 ./Middlewares/LwIP/api_lib.o + .text.netconn_delete + 0x0000000000000000 0x1c ./Middlewares/LwIP/api_lib.o + .rodata.netconn_getaddr.str1.1 + 0x0000000000000000 0x5a ./Middlewares/LwIP/api_lib.o + .text.netconn_getaddr + 0x0000000000000000 0x64 ./Middlewares/LwIP/api_lib.o + .rodata.netconn_bind.str1.1 + 0x0000000000000000 0x1b ./Middlewares/LwIP/api_lib.o + .text.netconn_bind + 0x0000000000000000 0x4c ./Middlewares/LwIP/api_lib.o + .rodata.netconn_bind_if.str1.1 + 0x0000000000000000 0x1e ./Middlewares/LwIP/api_lib.o + .text.netconn_bind_if + 0x0000000000000000 0x40 ./Middlewares/LwIP/api_lib.o + .rodata.netconn_connect.str1.1 + 0x0000000000000000 0x1e ./Middlewares/LwIP/api_lib.o + .text.netconn_connect + 0x0000000000000000 0x4c ./Middlewares/LwIP/api_lib.o + .rodata.netconn_disconnect.str1.1 + 0x0000000000000000 0x21 ./Middlewares/LwIP/api_lib.o + .text.netconn_disconnect + 0x0000000000000000 0x3c ./Middlewares/LwIP/api_lib.o + .rodata.netconn_listen_with_backlog.str1.1 + 0x0000000000000000 0x1d ./Middlewares/LwIP/api_lib.o + .text.netconn_listen_with_backlog + 0x0000000000000000 0x3c ./Middlewares/LwIP/api_lib.o + .text.netconn_tcp_recvd + 0x0000000000000000 0x3c ./Middlewares/LwIP/api_lib.o + .rodata.netconn_send.str1.1 + 0x0000000000000000 0x1b ./Middlewares/LwIP/api_lib.o + .text.netconn_send + 0x0000000000000000 0x3c ./Middlewares/LwIP/api_lib.o + .text.netconn_sendto + 0x0000000000000000 0x14 ./Middlewares/LwIP/api_lib.o + .rodata.netconn_write_vectors_partly.str1.1 + 0x0000000000000000 0x61 ./Middlewares/LwIP/api_lib.o + .text.netconn_write_vectors_partly + 0x0000000000000000 0xd8 ./Middlewares/LwIP/api_lib.o + .text.netconn_write_partly + 0x0000000000000000 0x18 ./Middlewares/LwIP/api_lib.o + .text.netconn_close + 0x0000000000000000 0x6 ./Middlewares/LwIP/api_lib.o + .text.netconn_err + 0x0000000000000000 0x1e ./Middlewares/LwIP/api_lib.o + .rodata.netconn_accept.str1.1 + 0x0000000000000000 0x3d ./Middlewares/LwIP/api_lib.o + .text.netconn_accept + 0x0000000000000000 0xb0 ./Middlewares/LwIP/api_lib.o + .rodata.netconn_recv_data.str1.1 + 0x0000000000000000 0x45 ./Middlewares/LwIP/api_lib.o + .text.netconn_recv_data + 0x0000000000000000 0xec ./Middlewares/LwIP/api_lib.o + .rodata.netconn_recv_udp_raw_netbuf.str1.1 + 0x0000000000000000 0x2a ./Middlewares/LwIP/api_lib.o + .text.netconn_recv_udp_raw_netbuf + 0x0000000000000000 0x38 ./Middlewares/LwIP/api_lib.o + .text.netconn_recv_udp_raw_netbuf_flags + 0x0000000000000000 0x38 ./Middlewares/LwIP/api_lib.o + .text.netconn_recv_data_tcp + 0x0000000000000000 0x94 ./Middlewares/LwIP/api_lib.o + .text.netconn_recv_tcp_pbuf + 0x0000000000000000 0x38 ./Middlewares/LwIP/api_lib.o + .text.netconn_recv_tcp_pbuf_flags + 0x0000000000000000 0x38 ./Middlewares/LwIP/api_lib.o + .rodata.netconn_recv.str1.1 + 0x0000000000000000 0xa ./Middlewares/LwIP/api_lib.o + .text.netconn_recv + 0x0000000000000000 0xa4 ./Middlewares/LwIP/api_lib.o + .text.netconn_shutdown + 0x0000000000000000 0x14 ./Middlewares/LwIP/api_lib.o + .debug_info 0x0000000000000000 0x26fc ./Middlewares/LwIP/api_lib.o + .debug_abbrev 0x0000000000000000 0x4ed ./Middlewares/LwIP/api_lib.o + .debug_loclists + 0x0000000000000000 0xdf2 ./Middlewares/LwIP/api_lib.o + .debug_aranges + 0x0000000000000000 0xf8 ./Middlewares/LwIP/api_lib.o + .debug_rnglists + 0x0000000000000000 0xd3 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x7b2 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0xb3 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x1c3 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x169 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x3a ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x74 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0xdd ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x73 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0xda ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x3f ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x25 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x15b ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x149 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0xa0 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0xea ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x4d ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x23 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x70 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0xf9 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x1d7 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/api_lib.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LwIP/api_lib.o + .debug_line 0x0000000000000000 0x228e ./Middlewares/LwIP/api_lib.o + .debug_str 0x0000000000000000 0x106445 ./Middlewares/LwIP/api_lib.o + .comment 0x0000000000000000 0x44 ./Middlewares/LwIP/api_lib.o + .debug_frame 0x0000000000000000 0x370 ./Middlewares/LwIP/api_lib.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LwIP/api_lib.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/api_msg.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/api_msg.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/api_msg.o + .rodata.recv_udp.str1.1 + 0x0000000000000000 0x10a ./Middlewares/LwIP/api_msg.o + .text.recv_udp + 0x0000000000000000 0xbc ./Middlewares/LwIP/api_msg.o + .text.setup_tcp + 0x0000000000000000 0x44 ./Middlewares/LwIP/api_msg.o + .rodata.lwip_netconn_do_connected.str1.1 + 0x0000000000000000 0x79 ./Middlewares/LwIP/api_msg.o + .text.lwip_netconn_do_connected + 0x0000000000000000 0xac ./Middlewares/LwIP/api_msg.o + .rodata.lwip_netconn_do_writemore.str1.1 + 0x0000000000000000 0xec ./Middlewares/LwIP/api_msg.o + .text.lwip_netconn_do_writemore + 0x0000000000000000 0x250 ./Middlewares/LwIP/api_msg.o + .rodata.lwip_netconn_do_close_internal.str1.1 + 0x0000000000000000 0x85 ./Middlewares/LwIP/api_msg.o + .text.lwip_netconn_do_close_internal + 0x0000000000000000 0x1e8 ./Middlewares/LwIP/api_msg.o + .text.poll_tcp + 0x0000000000000000 0x78 ./Middlewares/LwIP/api_msg.o + .text.sent_tcp + 0x0000000000000000 0x6c ./Middlewares/LwIP/api_msg.o + .rodata.recv_tcp.str1.1 + 0x0000000000000000 0x77 ./Middlewares/LwIP/api_msg.o + .text.recv_tcp + 0x0000000000000000 0xd0 ./Middlewares/LwIP/api_msg.o + .rodata.err_tcp.str1.1 + 0x0000000000000000 0x43 ./Middlewares/LwIP/api_msg.o + .text.err_tcp 0x0000000000000000 0x138 ./Middlewares/LwIP/api_msg.o + .rodata.lwip_netconn_is_err_msg.str1.1 + 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .text.lwip_netconn_is_err_msg + 0x0000000000000000 0x54 ./Middlewares/LwIP/api_msg.o + .text.lwip_netconn_do_newconn + 0x0000000000000000 0x60 ./Middlewares/LwIP/api_msg.o + .rodata.netconn_alloc.str1.1 + 0x0000000000000000 0x26 ./Middlewares/LwIP/api_msg.o + .text.netconn_alloc + 0x0000000000000000 0x8c ./Middlewares/LwIP/api_msg.o + .rodata.netconn_free.str1.1 + 0x0000000000000000 0xa4 ./Middlewares/LwIP/api_msg.o + .text.netconn_free + 0x0000000000000000 0x78 ./Middlewares/LwIP/api_msg.o + .text.netconn_drain + 0x0000000000000000 0x9e ./Middlewares/LwIP/api_msg.o + .rodata.accept_function.str1.1 + 0x0000000000000000 0x27 ./Middlewares/LwIP/api_msg.o + .text.accept_function + 0x0000000000000000 0xf4 ./Middlewares/LwIP/api_msg.o + .rodata.lwip_netconn_do_delconn.str1.1 + 0x0000000000000000 0x36 ./Middlewares/LwIP/api_msg.o + .text.lwip_netconn_do_delconn + 0x0000000000000000 0x10c ./Middlewares/LwIP/api_msg.o + .text.lwip_netconn_do_bind + 0x0000000000000000 0x34 ./Middlewares/LwIP/api_msg.o + .text.lwip_netconn_do_bind_if + 0x0000000000000000 0x38 ./Middlewares/LwIP/api_msg.o + .rodata.lwip_netconn_do_connect.str1.1 + 0x0000000000000000 0x15 ./Middlewares/LwIP/api_msg.o + .text.lwip_netconn_do_connect + 0x0000000000000000 0xe0 ./Middlewares/LwIP/api_msg.o + .text.lwip_netconn_do_disconnect + 0x0000000000000000 0x22 ./Middlewares/LwIP/api_msg.o + .text.lwip_netconn_do_listen + 0x0000000000000000 0xb8 ./Middlewares/LwIP/api_msg.o + .text.lwip_netconn_do_send + 0x0000000000000000 0x3c ./Middlewares/LwIP/api_msg.o + .text.lwip_netconn_do_recv + 0x0000000000000000 0x36 ./Middlewares/LwIP/api_msg.o + .rodata.lwip_netconn_do_write.str1.1 + 0x0000000000000000 0x14 ./Middlewares/LwIP/api_msg.o + .text.lwip_netconn_do_write + 0x0000000000000000 0xcc ./Middlewares/LwIP/api_msg.o + .rodata.lwip_netconn_do_getaddr.str1.1 + 0x0000000000000000 0x15 ./Middlewares/LwIP/api_msg.o + .text.lwip_netconn_do_getaddr + 0x0000000000000000 0x74 ./Middlewares/LwIP/api_msg.o + .text.lwip_netconn_do_close + 0x0000000000000000 0xbc ./Middlewares/LwIP/api_msg.o + .rodata.CSWTCH.14 + 0x0000000000000000 0xc ./Middlewares/LwIP/api_msg.o + .rodata.netconn_aborted + 0x0000000000000000 0x1 ./Middlewares/LwIP/api_msg.o + .rodata.netconn_closed + 0x0000000000000000 0x1 ./Middlewares/LwIP/api_msg.o + .rodata.netconn_reset + 0x0000000000000000 0x1 ./Middlewares/LwIP/api_msg.o + .debug_info 0x0000000000000000 0x35a9 ./Middlewares/LwIP/api_msg.o + .debug_abbrev 0x0000000000000000 0x4db ./Middlewares/LwIP/api_msg.o + .debug_loclists + 0x0000000000000000 0xfff ./Middlewares/LwIP/api_msg.o + .debug_aranges + 0x0000000000000000 0xe8 ./Middlewares/LwIP/api_msg.o + .debug_rnglists + 0x0000000000000000 0x135 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x78f ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x1c3 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x169 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x74 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0xdd ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x73 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0xb9 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x3f ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x25 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x15b ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x13d ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x40 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0xda ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x23 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0xa0 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0xea ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x4d ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x70 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0xf9 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/api_msg.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LwIP/api_msg.o + .debug_line 0x0000000000000000 0x2b34 ./Middlewares/LwIP/api_msg.o + .debug_str 0x0000000000000000 0x10512b ./Middlewares/LwIP/api_msg.o + .comment 0x0000000000000000 0x44 ./Middlewares/LwIP/api_msg.o + .debug_frame 0x0000000000000000 0x394 ./Middlewares/LwIP/api_msg.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LwIP/api_msg.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/auth.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/auth.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/auth.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/auth.o + .debug_info 0x0000000000000000 0x77 ./Middlewares/LwIP/auth.o + .debug_abbrev 0x0000000000000000 0x28 ./Middlewares/LwIP/auth.o + .debug_aranges + 0x0000000000000000 0x18 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x4f0 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/auth.o + .debug_macro 0x0000000000000000 0x2f ./Middlewares/LwIP/auth.o + .debug_line 0x0000000000000000 0xcbf ./Middlewares/LwIP/auth.o + .debug_str 0x0000000000000000 0xf9c6c ./Middlewares/LwIP/auth.o + .comment 0x0000000000000000 0x44 ./Middlewares/LwIP/auth.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LwIP/auth.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/autoip.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/autoip.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/autoip.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/autoip.o + .debug_info 0x0000000000000000 0x77 ./Middlewares/LwIP/autoip.o + .debug_abbrev 0x0000000000000000 0x28 ./Middlewares/LwIP/autoip.o + .debug_aranges + 0x0000000000000000 0x18 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x4e1 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/autoip.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/autoip.o + .debug_line 0x0000000000000000 0xc7a ./Middlewares/LwIP/autoip.o + .debug_str 0x0000000000000000 0xf9bac ./Middlewares/LwIP/autoip.o + .comment 0x0000000000000000 0x44 ./Middlewares/LwIP/autoip.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LwIP/autoip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/bridgeif.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/bridgeif.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/bridgeif.o + .debug_info 0x0000000000000000 0x77 ./Middlewares/LwIP/bridgeif.o + .debug_abbrev 0x0000000000000000 0x28 ./Middlewares/LwIP/bridgeif.o + .debug_aranges + 0x0000000000000000 0x18 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x700 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x46 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x74 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0xdd ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x73 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x1c3 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x169 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0xb9 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x3f ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x25 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x15b ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x13d ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0xa0 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0xc0 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/bridgeif.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LwIP/bridgeif.o + .debug_line 0x0000000000000000 0xfec ./Middlewares/LwIP/bridgeif.o + .debug_str 0x0000000000000000 0x102d67 ./Middlewares/LwIP/bridgeif.o + .comment 0x0000000000000000 0x44 ./Middlewares/LwIP/bridgeif.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LwIP/bridgeif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/bridgeif_fdb.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/bridgeif_fdb.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/bridgeif_fdb.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/bridgeif_fdb.o + .rodata.bridgeif_age_tmr.str1.1 + 0x0000000000000000 0xbe ./Middlewares/LwIP/bridgeif_fdb.o + .text.bridgeif_age_tmr + 0x0000000000000000 0x58 ./Middlewares/LwIP/bridgeif_fdb.o + .text.bridgeif_fdb_update_src + 0x0000000000000000 0x78 ./Middlewares/LwIP/bridgeif_fdb.o + .text.bridgeif_fdb_get_dst_ports + 0x0000000000000000 0x44 ./Middlewares/LwIP/bridgeif_fdb.o + .rodata.bridgeif_fdb_init.str1.1 + 0x0000000000000000 0x1d ./Middlewares/LwIP/bridgeif_fdb.o + .text.bridgeif_fdb_init + 0x0000000000000000 0x50 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_info 0x0000000000000000 0x5da ./Middlewares/LwIP/bridgeif_fdb.o + .debug_abbrev 0x0000000000000000 0x235 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_loclists + 0x0000000000000000 0x1fd ./Middlewares/LwIP/bridgeif_fdb.o + .debug_aranges + 0x0000000000000000 0x38 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_rnglists + 0x0000000000000000 0x3d ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x46 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x74 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0xdd ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x73 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x1c3 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x169 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0xb9 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x3f ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x25 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x15b ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x13d ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_line 0x0000000000000000 0x12ba ./Middlewares/LwIP/bridgeif_fdb.o + .debug_str 0x0000000000000000 0x1024e3 ./Middlewares/LwIP/bridgeif_fdb.o + .comment 0x0000000000000000 0x44 ./Middlewares/LwIP/bridgeif_fdb.o + .debug_frame 0x0000000000000000 0x98 ./Middlewares/LwIP/bridgeif_fdb.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LwIP/bridgeif_fdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ccp.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/ccp.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/ccp.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/ccp.o + .debug_info 0x0000000000000000 0x77 ./Middlewares/LwIP/ccp.o + .debug_abbrev 0x0000000000000000 0x28 ./Middlewares/LwIP/ccp.o + .debug_aranges + 0x0000000000000000 0x18 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x4f0 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/ccp.o + .debug_macro 0x0000000000000000 0x2f ./Middlewares/LwIP/ccp.o + .debug_line 0x0000000000000000 0xcbe ./Middlewares/LwIP/ccp.o + .debug_str 0x0000000000000000 0xf9c6b ./Middlewares/LwIP/ccp.o + .comment 0x0000000000000000 0x44 ./Middlewares/LwIP/ccp.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LwIP/ccp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-md5.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/chap-md5.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/chap-md5.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/chap-md5.o + .debug_info 0x0000000000000000 0x77 ./Middlewares/LwIP/chap-md5.o + .debug_abbrev 0x0000000000000000 0x28 ./Middlewares/LwIP/chap-md5.o + .debug_aranges + 0x0000000000000000 0x18 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x4f0 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/chap-md5.o + .debug_macro 0x0000000000000000 0x2f ./Middlewares/LwIP/chap-md5.o + .debug_line 0x0000000000000000 0xcc3 ./Middlewares/LwIP/chap-md5.o + .debug_str 0x0000000000000000 0xf9c70 ./Middlewares/LwIP/chap-md5.o + .comment 0x0000000000000000 0x44 ./Middlewares/LwIP/chap-md5.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LwIP/chap-md5.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap-new.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/chap-new.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/chap-new.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/chap-new.o + .debug_info 0x0000000000000000 0x77 ./Middlewares/LwIP/chap-new.o + .debug_abbrev 0x0000000000000000 0x28 ./Middlewares/LwIP/chap-new.o + .debug_aranges + 0x0000000000000000 0x18 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x4f0 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/chap-new.o + .debug_macro 0x0000000000000000 0x2f ./Middlewares/LwIP/chap-new.o + .debug_line 0x0000000000000000 0xcc3 ./Middlewares/LwIP/chap-new.o + .debug_str 0x0000000000000000 0xf9c70 ./Middlewares/LwIP/chap-new.o + .comment 0x0000000000000000 0x44 ./Middlewares/LwIP/chap-new.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LwIP/chap-new.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/chap_ms.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/chap_ms.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/chap_ms.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/chap_ms.o + .debug_info 0x0000000000000000 0x77 ./Middlewares/LwIP/chap_ms.o + .debug_abbrev 0x0000000000000000 0x28 ./Middlewares/LwIP/chap_ms.o + .debug_aranges + 0x0000000000000000 0x18 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x4f0 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/chap_ms.o + .debug_macro 0x0000000000000000 0x2f ./Middlewares/LwIP/chap_ms.o + .debug_line 0x0000000000000000 0xcc2 ./Middlewares/LwIP/chap_ms.o + .debug_str 0x0000000000000000 0xf9c6f ./Middlewares/LwIP/chap_ms.o + .comment 0x0000000000000000 0x44 ./Middlewares/LwIP/chap_ms.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LwIP/chap_ms.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/def.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/def.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/def.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/def.o + .text.lwip_strnstr + 0x0000000000000000 0x40 ./Middlewares/LwIP/def.o + .text.lwip_stricmp + 0x0000000000000000 0x2e ./Middlewares/LwIP/def.o + .text.lwip_strnicmp + 0x0000000000000000 0x3a ./Middlewares/LwIP/def.o + .text.lwip_itoa + 0x0000000000000000 0x64 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/def.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LwIP/def.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/demand.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/demand.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/demand.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/demand.o + .debug_info 0x0000000000000000 0x77 ./Middlewares/LwIP/demand.o + .debug_abbrev 0x0000000000000000 0x28 ./Middlewares/LwIP/demand.o + .debug_aranges + 0x0000000000000000 0x18 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x4f0 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/demand.o + .debug_macro 0x0000000000000000 0x2f ./Middlewares/LwIP/demand.o + .debug_line 0x0000000000000000 0xcc1 ./Middlewares/LwIP/demand.o + .debug_str 0x0000000000000000 0xf9c6e ./Middlewares/LwIP/demand.o + .comment 0x0000000000000000 0x44 ./Middlewares/LwIP/demand.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LwIP/demand.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/dhcp.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/dhcp.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/dhcp.o + .text.dhcp_set_struct + 0x0000000000000000 0x5c ./Middlewares/LwIP/dhcp.o + .text.dhcp_cleanup + 0x0000000000000000 0x30 ./Middlewares/LwIP/dhcp.o + .text.dhcp_inform + 0x0000000000000000 0xa4 ./Middlewares/LwIP/dhcp.o + .text.dhcp_release + 0x0000000000000000 0xa ./Middlewares/LwIP/dhcp.o + .text.dhcp_stop + 0x0000000000000000 0x4 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x3f ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x25 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x15b ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0xb3 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x1c3 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x169 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x13d ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0xa0 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0xea ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x4d ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x46 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LwIP/dhcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dhcp6.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/dhcp6.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/dhcp6.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/dhcp6.o + .debug_info 0x0000000000000000 0x77 ./Middlewares/LwIP/dhcp6.o + .debug_abbrev 0x0000000000000000 0x28 ./Middlewares/LwIP/dhcp6.o + .debug_aranges + 0x0000000000000000 0x18 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x4e1 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/dhcp6.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/dhcp6.o + .debug_line 0x0000000000000000 0xc79 ./Middlewares/LwIP/dhcp6.o + .debug_str 0x0000000000000000 0xf9bab ./Middlewares/LwIP/dhcp6.o + .comment 0x0000000000000000 0x44 ./Middlewares/LwIP/dhcp6.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LwIP/dhcp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/dns.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/dns.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/dns.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/dns.o + .debug_info 0x0000000000000000 0x77 ./Middlewares/LwIP/dns.o + .debug_abbrev 0x0000000000000000 0x28 ./Middlewares/LwIP/dns.o + .debug_aranges + 0x0000000000000000 0x18 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x4e1 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/dns.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/dns.o + .debug_line 0x0000000000000000 0xc72 ./Middlewares/LwIP/dns.o + .debug_str 0x0000000000000000 0xf9ba4 ./Middlewares/LwIP/dns.o + .comment 0x0000000000000000 0x44 ./Middlewares/LwIP/dns.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LwIP/dns.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eap.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/eap.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/eap.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/eap.o + .debug_info 0x0000000000000000 0x77 ./Middlewares/LwIP/eap.o + .debug_abbrev 0x0000000000000000 0x28 ./Middlewares/LwIP/eap.o + .debug_aranges + 0x0000000000000000 0x18 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x4f0 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/eap.o + .debug_macro 0x0000000000000000 0x2f ./Middlewares/LwIP/eap.o + .debug_line 0x0000000000000000 0xcbe ./Middlewares/LwIP/eap.o + .debug_str 0x0000000000000000 0xf9c6b ./Middlewares/LwIP/eap.o + .comment 0x0000000000000000 0x44 ./Middlewares/LwIP/eap.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LwIP/eap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ecp.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/ecp.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/ecp.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/ecp.o + .debug_info 0x0000000000000000 0x77 ./Middlewares/LwIP/ecp.o + .debug_abbrev 0x0000000000000000 0x28 ./Middlewares/LwIP/ecp.o + .debug_aranges + 0x0000000000000000 0x18 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x4f0 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/ecp.o + .debug_macro 0x0000000000000000 0x2f ./Middlewares/LwIP/ecp.o + .debug_line 0x0000000000000000 0xcbe ./Middlewares/LwIP/ecp.o + .debug_str 0x0000000000000000 0xf9c6b ./Middlewares/LwIP/ecp.o + .comment 0x0000000000000000 0x44 ./Middlewares/LwIP/ecp.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LwIP/ecp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/err.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/err.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/err.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/err.o + .text.err_to_errno + 0x0000000000000000 0x1c ./Middlewares/LwIP/err.o + .rodata.err_to_errno_table + 0x0000000000000000 0x44 ./Middlewares/LwIP/err.o + .debug_info 0x0000000000000000 0x106 ./Middlewares/LwIP/err.o + .debug_abbrev 0x0000000000000000 0x94 ./Middlewares/LwIP/err.o + .debug_loclists + 0x0000000000000000 0x23 ./Middlewares/LwIP/err.o + .debug_aranges + 0x0000000000000000 0x20 ./Middlewares/LwIP/err.o + .debug_rnglists + 0x0000000000000000 0x13 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x5b0 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x74 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0xdd ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x73 ./Middlewares/LwIP/err.o + .debug_macro 0x0000000000000000 0x320 ./Middlewares/LwIP/err.o + .debug_line 0x0000000000000000 0xe38 ./Middlewares/LwIP/err.o + .debug_str 0x0000000000000000 0xff254 ./Middlewares/LwIP/err.o + .comment 0x0000000000000000 0x44 ./Middlewares/LwIP/err.o + .debug_frame 0x0000000000000000 0x20 ./Middlewares/LwIP/err.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LwIP/err.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/etharp.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/etharp.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/etharp.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/etharp.o + .rodata.etharp_find_addr.str1.1 + 0x0000000000000000 0x22 ./Middlewares/LwIP/etharp.o + .text.etharp_find_addr + 0x0000000000000000 0x64 ./Middlewares/LwIP/etharp.o + .text.etharp_get_entry + 0x0000000000000000 0x84 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0xb3 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x1bd ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x169 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x3f ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x25 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x15b ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x13d ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0xa0 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x46 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0xc0 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0xea ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x4d ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/etharp.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LwIP/etharp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethernet.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/ethernet.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/ethernet.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0xb3 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x1c3 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x169 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x3f ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x25 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x15b ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x13d ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x46 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0xa0 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0xea ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0xc0 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LwIP/ethernet.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ethip6.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/ethip6.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/ethip6.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/ethip6.o + .debug_info 0x0000000000000000 0x77 ./Middlewares/LwIP/ethip6.o + .debug_abbrev 0x0000000000000000 0x28 ./Middlewares/LwIP/ethip6.o + .debug_aranges + 0x0000000000000000 0x18 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x4e1 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/ethip6.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/ethip6.o + .debug_line 0x0000000000000000 0xc7a ./Middlewares/LwIP/ethip6.o + .debug_str 0x0000000000000000 0xf9bac ./Middlewares/LwIP/ethip6.o + .comment 0x0000000000000000 0x44 ./Middlewares/LwIP/ethip6.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LwIP/ethip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/eui64.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/eui64.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/eui64.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/eui64.o + .debug_info 0x0000000000000000 0x77 ./Middlewares/LwIP/eui64.o + .debug_abbrev 0x0000000000000000 0x28 ./Middlewares/LwIP/eui64.o + .debug_aranges + 0x0000000000000000 0x18 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x4f0 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/eui64.o + .debug_macro 0x0000000000000000 0x2f ./Middlewares/LwIP/eui64.o + .debug_line 0x0000000000000000 0xcc0 ./Middlewares/LwIP/eui64.o + .debug_str 0x0000000000000000 0xf9c6d ./Middlewares/LwIP/eui64.o + .comment 0x0000000000000000 0x44 ./Middlewares/LwIP/eui64.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LwIP/eui64.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/fsm.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/fsm.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/fsm.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/fsm.o + .debug_info 0x0000000000000000 0x77 ./Middlewares/LwIP/fsm.o + .debug_abbrev 0x0000000000000000 0x28 ./Middlewares/LwIP/fsm.o + .debug_aranges + 0x0000000000000000 0x18 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x4f0 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/fsm.o + .debug_macro 0x0000000000000000 0x2f ./Middlewares/LwIP/fsm.o + .debug_line 0x0000000000000000 0xcbe ./Middlewares/LwIP/fsm.o + .debug_str 0x0000000000000000 0xf9c6b ./Middlewares/LwIP/fsm.o + .comment 0x0000000000000000 0x44 ./Middlewares/LwIP/fsm.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LwIP/fsm.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/icmp.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/icmp.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0xb3 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x1c3 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x169 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x3f ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x25 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x15b ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x13d ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x70 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0xa0 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0xea ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/icmp.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LwIP/icmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/icmp6.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/icmp6.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/icmp6.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/icmp6.o + .debug_info 0x0000000000000000 0x77 ./Middlewares/LwIP/icmp6.o + .debug_abbrev 0x0000000000000000 0x28 ./Middlewares/LwIP/icmp6.o + .debug_aranges + 0x0000000000000000 0x18 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x4e1 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/icmp6.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/icmp6.o + .debug_line 0x0000000000000000 0xc79 ./Middlewares/LwIP/icmp6.o + .debug_str 0x0000000000000000 0xf9bab ./Middlewares/LwIP/icmp6.o + .comment 0x0000000000000000 0x44 ./Middlewares/LwIP/icmp6.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LwIP/icmp6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/if_api.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/if_api.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/if_api.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/if_api.o + .text.lwip_if_indextoname + 0x0000000000000000 0x10 ./Middlewares/LwIP/if_api.o + .text.lwip_if_nametoindex + 0x0000000000000000 0x4 ./Middlewares/LwIP/if_api.o + .debug_info 0x0000000000000000 0x100 ./Middlewares/LwIP/if_api.o + .debug_abbrev 0x0000000000000000 0xae ./Middlewares/LwIP/if_api.o + .debug_loclists + 0x0000000000000000 0x3a ./Middlewares/LwIP/if_api.o + .debug_aranges + 0x0000000000000000 0x28 ./Middlewares/LwIP/if_api.o + .debug_rnglists + 0x0000000000000000 0x19 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x6a7 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x320 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x1c3 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x169 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0xb9 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x3f ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x25 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x15b ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x13d ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0xf4 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x401 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x74 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0xdd ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x73 ./Middlewares/LwIP/if_api.o + .debug_macro 0x0000000000000000 0x24 ./Middlewares/LwIP/if_api.o + .debug_line 0x0000000000000000 0xf7b ./Middlewares/LwIP/if_api.o + .debug_str 0x0000000000000000 0x103bd8 ./Middlewares/LwIP/if_api.o + .comment 0x0000000000000000 0x44 ./Middlewares/LwIP/if_api.o + .debug_frame 0x0000000000000000 0x30 ./Middlewares/LwIP/if_api.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LwIP/if_api.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/igmp.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/igmp.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/igmp.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/igmp.o + .debug_info 0x0000000000000000 0x77 ./Middlewares/LwIP/igmp.o + .debug_abbrev 0x0000000000000000 0x28 ./Middlewares/LwIP/igmp.o + .debug_aranges + 0x0000000000000000 0x18 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x4e1 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/igmp.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/igmp.o + .debug_line 0x0000000000000000 0xc78 ./Middlewares/LwIP/igmp.o + .debug_str 0x0000000000000000 0xf9baa ./Middlewares/LwIP/igmp.o + .comment 0x0000000000000000 0x44 ./Middlewares/LwIP/igmp.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LwIP/igmp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet6.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/inet6.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/inet6.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/inet6.o + .debug_info 0x0000000000000000 0x77 ./Middlewares/LwIP/inet6.o + .debug_abbrev 0x0000000000000000 0x28 ./Middlewares/LwIP/inet6.o + .debug_aranges + 0x0000000000000000 0x18 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x4e1 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/inet6.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/inet6.o + .debug_line 0x0000000000000000 0xc79 ./Middlewares/LwIP/inet6.o + .debug_str 0x0000000000000000 0xf9bab ./Middlewares/LwIP/inet6.o + .comment 0x0000000000000000 0x44 ./Middlewares/LwIP/inet6.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LwIP/inet6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/inet_chksum.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/inet_chksum.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/inet_chksum.o + .text.lwip_standard_chksum + 0x0000000000000000 0x54 ./Middlewares/LwIP/inet_chksum.o + .text.inet_chksum_pseudo + 0x0000000000000000 0x92 ./Middlewares/LwIP/inet_chksum.o + .text.ip_chksum_pseudo + 0x0000000000000000 0x4 ./Middlewares/LwIP/inet_chksum.o + .rodata.inet_chksum_pseudo_partial.str1.1 + 0x0000000000000000 0xba ./Middlewares/LwIP/inet_chksum.o + .text.inet_chksum_pseudo_partial + 0x0000000000000000 0xd4 ./Middlewares/LwIP/inet_chksum.o + .text.ip_chksum_pseudo_partial + 0x0000000000000000 0x4 ./Middlewares/LwIP/inet_chksum.o + .text.inet_chksum + 0x0000000000000000 0xc ./Middlewares/LwIP/inet_chksum.o + .text.inet_chksum_pbuf + 0x0000000000000000 0x44 ./Middlewares/LwIP/inet_chksum.o + .debug_info 0x0000000000000000 0x85b ./Middlewares/LwIP/inet_chksum.o + .debug_abbrev 0x0000000000000000 0x277 ./Middlewares/LwIP/inet_chksum.o + .debug_loclists + 0x0000000000000000 0x61f ./Middlewares/LwIP/inet_chksum.o + .debug_aranges + 0x0000000000000000 0x50 ./Middlewares/LwIP/inet_chksum.o + .debug_rnglists + 0x0000000000000000 0x5c ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x569 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0xb3 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x1c3 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x169 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/inet_chksum.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LwIP/inet_chksum.o + .debug_line 0x0000000000000000 0x10d9 ./Middlewares/LwIP/inet_chksum.o + .debug_str 0x0000000000000000 0xfbf6f ./Middlewares/LwIP/inet_chksum.o + .comment 0x0000000000000000 0x44 ./Middlewares/LwIP/inet_chksum.o + .debug_frame 0x0000000000000000 0xd4 ./Middlewares/LwIP/inet_chksum.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LwIP/inet_chksum.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/init.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/init.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/init.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x5e ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x3f ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x25 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x15b ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x74 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0xdd ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x73 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0xb9 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x1c3 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x169 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x13d ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0xf4 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x320 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x401 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0xa0 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0xea ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x4d ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x70 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0xf9 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x1d7 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x46 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x40 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0xda ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/init.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/ip.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/ip.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x1c3 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x169 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0xb3 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x3f ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x25 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x15b ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x13d ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0xa0 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000000000 0xea ./Middlewares/LwIP/ip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/ip4.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/ip4.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/ip4.o + .text.ip4_output + 0x0000000000000000 0x58 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0xb3 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x1c3 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x169 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x3f ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x25 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x15b ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x13d ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0xa0 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0xea ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x70 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x4d ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0xf9 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x1d7 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ip4.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LwIP/ip4.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/ip4_addr.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/ip4_addr.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/ip4_addr.o + .text.ip4_addr_netmask_valid + 0x0000000000000000 0x2c ./Middlewares/LwIP/ip4_addr.o + .rodata.ip4addr_aton.str1.1 + 0x0000000000000000 0xbc ./Middlewares/LwIP/ip4_addr.o + .text.ip4addr_aton + 0x0000000000000000 0x138 ./Middlewares/LwIP/ip4_addr.o + .text.ipaddr_addr + 0x0000000000000000 0x18 ./Middlewares/LwIP/ip4_addr.o + .text.ip4addr_ntoa_r + 0x0000000000000000 0x92 ./Middlewares/LwIP/ip4_addr.o + .text.ip4addr_ntoa + 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_addr.o + .bss.str.0 0x0000000000000000 0x10 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x1c3 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x169 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0xb9 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x3f ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x25 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x15b ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000000000 0x13d ./Middlewares/LwIP/ip4_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip4_frag.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/ip4_frag.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/ip4_frag.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0xb9 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x1c3 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x169 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x3f ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x25 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x15b ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x13d ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0xa0 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0xea ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x70 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LwIP/ip4_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/ip6.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/ip6.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/ip6.o + .debug_info 0x0000000000000000 0x77 ./Middlewares/LwIP/ip6.o + .debug_abbrev 0x0000000000000000 0x28 ./Middlewares/LwIP/ip6.o + .debug_aranges + 0x0000000000000000 0x18 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x4e1 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/ip6.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/ip6.o + .debug_line 0x0000000000000000 0xc77 ./Middlewares/LwIP/ip6.o + .debug_str 0x0000000000000000 0xf9ba9 ./Middlewares/LwIP/ip6.o + .comment 0x0000000000000000 0x44 ./Middlewares/LwIP/ip6.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LwIP/ip6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_addr.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/ip6_addr.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/ip6_addr.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/ip6_addr.o + .debug_info 0x0000000000000000 0x77 ./Middlewares/LwIP/ip6_addr.o + .debug_abbrev 0x0000000000000000 0x28 ./Middlewares/LwIP/ip6_addr.o + .debug_aranges + 0x0000000000000000 0x18 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x4e1 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/ip6_addr.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/ip6_addr.o + .debug_line 0x0000000000000000 0xc7c ./Middlewares/LwIP/ip6_addr.o + .debug_str 0x0000000000000000 0xf9bae ./Middlewares/LwIP/ip6_addr.o + .comment 0x0000000000000000 0x44 ./Middlewares/LwIP/ip6_addr.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LwIP/ip6_addr.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ip6_frag.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/ip6_frag.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/ip6_frag.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/ip6_frag.o + .debug_info 0x0000000000000000 0x77 ./Middlewares/LwIP/ip6_frag.o + .debug_abbrev 0x0000000000000000 0x28 ./Middlewares/LwIP/ip6_frag.o + .debug_aranges + 0x0000000000000000 0x18 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x619 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0xb3 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x1c3 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x169 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x3f ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x25 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x15b ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x13d ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0xa0 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0xea ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ip6_frag.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LwIP/ip6_frag.o + .debug_line 0x0000000000000000 0xe04 ./Middlewares/LwIP/ip6_frag.o + .debug_str 0x0000000000000000 0xfdc17 ./Middlewares/LwIP/ip6_frag.o + .comment 0x0000000000000000 0x44 ./Middlewares/LwIP/ip6_frag.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LwIP/ip6_frag.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipcp.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/ipcp.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/ipcp.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/ipcp.o + .debug_info 0x0000000000000000 0x77 ./Middlewares/LwIP/ipcp.o + .debug_abbrev 0x0000000000000000 0x28 ./Middlewares/LwIP/ipcp.o + .debug_aranges + 0x0000000000000000 0x18 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x4f0 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/ipcp.o + .debug_macro 0x0000000000000000 0x2f ./Middlewares/LwIP/ipcp.o + .debug_line 0x0000000000000000 0xcbf ./Middlewares/LwIP/ipcp.o + .debug_str 0x0000000000000000 0xf9c6c ./Middlewares/LwIP/ipcp.o + .comment 0x0000000000000000 0x44 ./Middlewares/LwIP/ipcp.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LwIP/ipcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ipv6cp.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/ipv6cp.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/ipv6cp.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/ipv6cp.o + .debug_info 0x0000000000000000 0x77 ./Middlewares/LwIP/ipv6cp.o + .debug_abbrev 0x0000000000000000 0x28 ./Middlewares/LwIP/ipv6cp.o + .debug_aranges + 0x0000000000000000 0x18 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x4f1 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/ipv6cp.o + .debug_macro 0x0000000000000000 0x2f ./Middlewares/LwIP/ipv6cp.o + .debug_line 0x0000000000000000 0xcc1 ./Middlewares/LwIP/ipv6cp.o + .debug_str 0x0000000000000000 0xf9c6e ./Middlewares/LwIP/ipv6cp.o + .comment 0x0000000000000000 0x44 ./Middlewares/LwIP/ipv6cp.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LwIP/ipv6cp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lcp.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/lcp.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/lcp.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/lcp.o + .debug_info 0x0000000000000000 0x77 ./Middlewares/LwIP/lcp.o + .debug_abbrev 0x0000000000000000 0x28 ./Middlewares/LwIP/lcp.o + .debug_aranges + 0x0000000000000000 0x18 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x4f0 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/lcp.o + .debug_macro 0x0000000000000000 0x2f ./Middlewares/LwIP/lcp.o + .debug_line 0x0000000000000000 0xcbe ./Middlewares/LwIP/lcp.o + .debug_str 0x0000000000000000 0xf9c6b ./Middlewares/LwIP/lcp.o + .comment 0x0000000000000000 0x44 ./Middlewares/LwIP/lcp.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LwIP/lcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/lowpan6.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/lowpan6.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/lowpan6.o + .debug_info 0x0000000000000000 0x77 ./Middlewares/LwIP/lowpan6.o + .debug_abbrev 0x0000000000000000 0x28 ./Middlewares/LwIP/lowpan6.o + .debug_aranges + 0x0000000000000000 0x18 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x4fa ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/lowpan6.o + .debug_macro 0x0000000000000000 0x46 ./Middlewares/LwIP/lowpan6.o + .debug_line 0x0000000000000000 0xccb ./Middlewares/LwIP/lowpan6.o + .debug_str 0x0000000000000000 0xf9d83 ./Middlewares/LwIP/lowpan6.o + .comment 0x0000000000000000 0x44 ./Middlewares/LwIP/lowpan6.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LwIP/lowpan6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_ble.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/lowpan6_ble.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/lowpan6_ble.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/lowpan6_ble.o + .debug_info 0x0000000000000000 0x77 ./Middlewares/LwIP/lowpan6_ble.o + .debug_abbrev 0x0000000000000000 0x28 ./Middlewares/LwIP/lowpan6_ble.o + .debug_aranges + 0x0000000000000000 0x18 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x4fa ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/lowpan6_ble.o + .debug_macro 0x0000000000000000 0x46 ./Middlewares/LwIP/lowpan6_ble.o + .debug_line 0x0000000000000000 0xcd3 ./Middlewares/LwIP/lowpan6_ble.o + .debug_str 0x0000000000000000 0xf9d8b ./Middlewares/LwIP/lowpan6_ble.o + .comment 0x0000000000000000 0x44 ./Middlewares/LwIP/lowpan6_ble.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LwIP/lowpan6_ble.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/lowpan6_common.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/lowpan6_common.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/lowpan6_common.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/lowpan6_common.o + .debug_info 0x0000000000000000 0x77 ./Middlewares/LwIP/lowpan6_common.o + .debug_abbrev 0x0000000000000000 0x28 ./Middlewares/LwIP/lowpan6_common.o + .debug_aranges + 0x0000000000000000 0x18 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x4fa ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/lowpan6_common.o + .debug_macro 0x0000000000000000 0x46 ./Middlewares/LwIP/lowpan6_common.o + .debug_line 0x0000000000000000 0xcd9 ./Middlewares/LwIP/lowpan6_common.o + .debug_str 0x0000000000000000 0xf9d91 ./Middlewares/LwIP/lowpan6_common.o + .comment 0x0000000000000000 0x44 ./Middlewares/LwIP/lowpan6_common.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LwIP/lowpan6_common.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/magic.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/magic.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/magic.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/magic.o + .debug_info 0x0000000000000000 0x77 ./Middlewares/LwIP/magic.o + .debug_abbrev 0x0000000000000000 0x28 ./Middlewares/LwIP/magic.o + .debug_aranges + 0x0000000000000000 0x18 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x4f0 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/magic.o + .debug_macro 0x0000000000000000 0x2f ./Middlewares/LwIP/magic.o + .debug_line 0x0000000000000000 0xcc0 ./Middlewares/LwIP/magic.o + .debug_str 0x0000000000000000 0xf9c6d ./Middlewares/LwIP/magic.o + .comment 0x0000000000000000 0x44 ./Middlewares/LwIP/magic.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LwIP/magic.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mem.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/mem.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/mem.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/mem.o + .text.mem_calloc + 0x0000000000000000 0x26 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x74 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0xdd ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x73 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x3f ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x25 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x15b ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LwIP/mem.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/memp.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/memp.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/memp.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x3f ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x25 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x15b ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x74 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0xdd ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x73 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0xb9 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x1c3 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x169 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x13d ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0xa0 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0xea ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x4d ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x70 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0xf9 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x1d7 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x40 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x23 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0xf4 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x320 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x401 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x24 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x46 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/memp.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/memp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mld6.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/mld6.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/mld6.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/mld6.o + .debug_info 0x0000000000000000 0x77 ./Middlewares/LwIP/mld6.o + .debug_abbrev 0x0000000000000000 0x28 ./Middlewares/LwIP/mld6.o + .debug_aranges + 0x0000000000000000 0x18 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x4e1 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/mld6.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/mld6.o + .debug_line 0x0000000000000000 0xc78 ./Middlewares/LwIP/mld6.o + .debug_str 0x0000000000000000 0xf9baa ./Middlewares/LwIP/mld6.o + .comment 0x0000000000000000 0x44 ./Middlewares/LwIP/mld6.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LwIP/mld6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mppe.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/mppe.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/mppe.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/mppe.o + .debug_info 0x0000000000000000 0x77 ./Middlewares/LwIP/mppe.o + .debug_abbrev 0x0000000000000000 0x28 ./Middlewares/LwIP/mppe.o + .debug_aranges + 0x0000000000000000 0x18 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x4f0 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/mppe.o + .debug_macro 0x0000000000000000 0x2f ./Middlewares/LwIP/mppe.o + .debug_line 0x0000000000000000 0xcbf ./Middlewares/LwIP/mppe.o + .debug_str 0x0000000000000000 0xf9c6c ./Middlewares/LwIP/mppe.o + .comment 0x0000000000000000 0x44 ./Middlewares/LwIP/mppe.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LwIP/mppe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/mqtt.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/mqtt.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/mqtt.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/mqtt.o + .text.mqtt_ringbuf_put + 0x0000000000000000 0x16 ./Middlewares/LwIP/mqtt.o + .text.mqtt_output_append_u16 + 0x0000000000000000 0x14 ./Middlewares/LwIP/mqtt.o + .text.mqtt_output_append_string + 0x0000000000000000 0x28 ./Middlewares/LwIP/mqtt.o + .rodata.mqtt_append_request.str1.1 + 0x0000000000000000 0xe3 ./Middlewares/LwIP/mqtt.o + .text.mqtt_append_request + 0x0000000000000000 0x4c ./Middlewares/LwIP/mqtt.o + .rodata.mqtt_ringbuf_advance_get_idx.str1.1 + 0x0000000000000000 0x3d ./Middlewares/LwIP/mqtt.o + .text.mqtt_ringbuf_advance_get_idx + 0x0000000000000000 0x34 ./Middlewares/LwIP/mqtt.o + .rodata.mqtt_take_request.str1.1 + 0x0000000000000000 0x20 ./Middlewares/LwIP/mqtt.o + .text.mqtt_take_request + 0x0000000000000000 0x54 ./Middlewares/LwIP/mqtt.o + .rodata.mqtt_close.str1.1 + 0x0000000000000000 0x1b ./Middlewares/LwIP/mqtt.o + .text.mqtt_close + 0x0000000000000000 0x80 ./Middlewares/LwIP/mqtt.o + .rodata.mqtt_tcp_err_cb.str1.1 + 0x0000000000000000 0x20 ./Middlewares/LwIP/mqtt.o + .text.mqtt_tcp_err_cb + 0x0000000000000000 0x34 ./Middlewares/LwIP/mqtt.o + .text.mqtt_output_append_fixed_header.constprop.0 + 0x0000000000000000 0x3c ./Middlewares/LwIP/mqtt.o + .text.mqtt_create_request.constprop.0 + 0x0000000000000000 0x28 ./Middlewares/LwIP/mqtt.o + .text.mqtt_output_check_space + 0x0000000000000000 0x2c ./Middlewares/LwIP/mqtt.o + .text.mqtt_output_send + 0x0000000000000000 0xb2 ./Middlewares/LwIP/mqtt.o + .text.mqtt_tcp_poll_cb + 0x0000000000000000 0x12 ./Middlewares/LwIP/mqtt.o + .text.mqtt_tcp_connect_cb + 0x0000000000000000 0x58 ./Middlewares/LwIP/mqtt.o + .text.pub_ack_rec_rel_response.isra.0 + 0x0000000000000000 0x42 ./Middlewares/LwIP/mqtt.o + .rodata.mqtt_cyclic_timer.str1.1 + 0x0000000000000000 0x22 ./Middlewares/LwIP/mqtt.o + .text.mqtt_cyclic_timer + 0x0000000000000000 0xf4 ./Middlewares/LwIP/mqtt.o + .rodata.mqtt_message_received.str1.1 + 0x0000000000000000 0x65 ./Middlewares/LwIP/mqtt.o + .text.mqtt_message_received + 0x0000000000000000 0x220 ./Middlewares/LwIP/mqtt.o + .rodata.mqtt_tcp_recv_cb.str1.1 + 0x0000000000000000 0x47 ./Middlewares/LwIP/mqtt.o + .text.mqtt_tcp_recv_cb + 0x0000000000000000 0x19c ./Middlewares/LwIP/mqtt.o + .text.mqtt_tcp_sent_cb + 0x0000000000000000 0x3c ./Middlewares/LwIP/mqtt.o + .rodata.mqtt_publish.str1.1 + 0x0000000000000000 0xa0 ./Middlewares/LwIP/mqtt.o + .text.mqtt_publish + 0x0000000000000000 0x154 ./Middlewares/LwIP/mqtt.o + .rodata.mqtt_sub_unsub.str1.1 + 0x0000000000000000 0xa1 ./Middlewares/LwIP/mqtt.o + .text.mqtt_sub_unsub + 0x0000000000000000 0x150 ./Middlewares/LwIP/mqtt.o + .rodata.mqtt_set_inpub_callback.str1.1 + 0x0000000000000000 0x28 ./Middlewares/LwIP/mqtt.o + .text.mqtt_set_inpub_callback + 0x0000000000000000 0x30 ./Middlewares/LwIP/mqtt.o + .text.mqtt_client_new + 0x0000000000000000 0xa ./Middlewares/LwIP/mqtt.o + .text.mqtt_client_free + 0x0000000000000000 0x4 ./Middlewares/LwIP/mqtt.o + .rodata.mqtt_client_connect.str1.1 + 0x0000000000000000 0x2cc ./Middlewares/LwIP/mqtt.o + .text.mqtt_client_connect + 0x0000000000000000 0x2f8 ./Middlewares/LwIP/mqtt.o + .rodata.mqtt_disconnect.str1.1 + 0x0000000000000000 0x20 ./Middlewares/LwIP/mqtt.o + .text.mqtt_disconnect + 0x0000000000000000 0x34 ./Middlewares/LwIP/mqtt.o + .rodata.mqtt_client_is_connected.str1.1 + 0x0000000000000000 0x29 ./Middlewares/LwIP/mqtt.o + .text.mqtt_client_is_connected + 0x0000000000000000 0x2c ./Middlewares/LwIP/mqtt.o + .debug_info 0x0000000000000000 0x3225 ./Middlewares/LwIP/mqtt.o + .debug_abbrev 0x0000000000000000 0x59e ./Middlewares/LwIP/mqtt.o + .debug_loclists + 0x0000000000000000 0x1832 ./Middlewares/LwIP/mqtt.o + .debug_aranges + 0x0000000000000000 0xf0 ./Middlewares/LwIP/mqtt.o + .debug_rnglists + 0x0000000000000000 0x1e0 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x777 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x1c3 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x169 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x1e ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0xb9 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x3f ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x25 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x15b ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x13d ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0xa0 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0xea ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x70 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0xf9 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x74 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0xdd ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x73 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/mqtt.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LwIP/mqtt.o + .debug_line 0x0000000000000000 0x29a2 ./Middlewares/LwIP/mqtt.o + .debug_str 0x0000000000000000 0x104b42 ./Middlewares/LwIP/mqtt.o + .comment 0x0000000000000000 0x44 ./Middlewares/LwIP/mqtt.o + .debug_frame 0x0000000000000000 0x3b0 ./Middlewares/LwIP/mqtt.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LwIP/mqtt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/multilink.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/multilink.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/multilink.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/multilink.o + .debug_info 0x0000000000000000 0x77 ./Middlewares/LwIP/multilink.o + .debug_abbrev 0x0000000000000000 0x28 ./Middlewares/LwIP/multilink.o + .debug_aranges + 0x0000000000000000 0x18 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x4f0 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/multilink.o + .debug_macro 0x0000000000000000 0x2f ./Middlewares/LwIP/multilink.o + .debug_line 0x0000000000000000 0xcc4 ./Middlewares/LwIP/multilink.o + .debug_str 0x0000000000000000 0xf9c71 ./Middlewares/LwIP/multilink.o + .comment 0x0000000000000000 0x44 ./Middlewares/LwIP/multilink.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LwIP/multilink.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/nd6.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/nd6.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/nd6.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/nd6.o + .debug_info 0x0000000000000000 0x77 ./Middlewares/LwIP/nd6.o + .debug_abbrev 0x0000000000000000 0x28 ./Middlewares/LwIP/nd6.o + .debug_aranges + 0x0000000000000000 0x18 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x4e1 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/nd6.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/nd6.o + .debug_line 0x0000000000000000 0xc77 ./Middlewares/LwIP/nd6.o + .debug_str 0x0000000000000000 0xf9ba9 ./Middlewares/LwIP/nd6.o + .comment 0x0000000000000000 0x44 ./Middlewares/LwIP/nd6.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LwIP/nd6.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netbuf.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/netbuf.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/netbuf.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/netbuf.o + .text.netbuf_new + 0x0000000000000000 0x18 ./Middlewares/LwIP/netbuf.o + .text.netbuf_delete + 0x0000000000000000 0x22 ./Middlewares/LwIP/netbuf.o + .rodata.netbuf_alloc.str1.1 + 0x0000000000000000 0xe8 ./Middlewares/LwIP/netbuf.o + .text.netbuf_alloc + 0x0000000000000000 0x5c ./Middlewares/LwIP/netbuf.o + .rodata.netbuf_free.str1.1 + 0x0000000000000000 0x19 ./Middlewares/LwIP/netbuf.o + .text.netbuf_free + 0x0000000000000000 0x34 ./Middlewares/LwIP/netbuf.o + .rodata.netbuf_ref.str1.1 + 0x0000000000000000 0x18 ./Middlewares/LwIP/netbuf.o + .text.netbuf_ref + 0x0000000000000000 0x54 ./Middlewares/LwIP/netbuf.o + .rodata.netbuf_chain.str1.1 + 0x0000000000000000 0x36 ./Middlewares/LwIP/netbuf.o + .text.netbuf_chain + 0x0000000000000000 0x4c ./Middlewares/LwIP/netbuf.o + .rodata.netbuf_data.str1.1 + 0x0000000000000000 0x4f ./Middlewares/LwIP/netbuf.o + .text.netbuf_data + 0x0000000000000000 0x58 ./Middlewares/LwIP/netbuf.o + .rodata.netbuf_next.str1.1 + 0x0000000000000000 0x19 ./Middlewares/LwIP/netbuf.o + .text.netbuf_next + 0x0000000000000000 0x38 ./Middlewares/LwIP/netbuf.o + .rodata.netbuf_first.str1.1 + 0x0000000000000000 0x1a ./Middlewares/LwIP/netbuf.o + .text.netbuf_first + 0x0000000000000000 0x20 ./Middlewares/LwIP/netbuf.o + .debug_info 0x0000000000000000 0x854 ./Middlewares/LwIP/netbuf.o + .debug_abbrev 0x0000000000000000 0x1f9 ./Middlewares/LwIP/netbuf.o + .debug_loclists + 0x0000000000000000 0x2b8 ./Middlewares/LwIP/netbuf.o + .debug_aranges + 0x0000000000000000 0x60 ./Middlewares/LwIP/netbuf.o + .debug_rnglists + 0x0000000000000000 0x43 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x5b8 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0xb3 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x1c3 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x169 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x3a ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x3f ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x25 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x15b ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/netbuf.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LwIP/netbuf.o + .debug_line 0x0000000000000000 0x1223 ./Middlewares/LwIP/netbuf.o + .debug_str 0x0000000000000000 0xfcc37 ./Middlewares/LwIP/netbuf.o + .comment 0x0000000000000000 0x44 ./Middlewares/LwIP/netbuf.o + .debug_frame 0x0000000000000000 0x10c ./Middlewares/LwIP/netbuf.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LwIP/netbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netdb.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/netdb.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/netdb.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/netdb.o + .debug_info 0x0000000000000000 0x77 ./Middlewares/LwIP/netdb.o + .debug_abbrev 0x0000000000000000 0x28 ./Middlewares/LwIP/netdb.o + .debug_aranges + 0x0000000000000000 0x18 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x4eb ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/netdb.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/netdb.o + .debug_line 0x0000000000000000 0xc7e ./Middlewares/LwIP/netdb.o + .debug_str 0x0000000000000000 0xf9bb7 ./Middlewares/LwIP/netdb.o + .comment 0x0000000000000000 0x44 ./Middlewares/LwIP/netdb.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LwIP/netdb.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netif.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/netif.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/netif.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/netif.o + .rodata.netif_input.str1.1 + 0x0000000000000000 0x35 ./Middlewares/LwIP/netif.o + .text.netif_input + 0x0000000000000000 0x50 ./Middlewares/LwIP/netif.o + .rodata.netif_set_ipaddr.str1.1 + 0x0000000000000000 0x20 ./Middlewares/LwIP/netif.o + .text.netif_set_ipaddr + 0x0000000000000000 0x3c ./Middlewares/LwIP/netif.o + .rodata.netif_set_netmask.str1.1 + 0x0000000000000000 0x21 ./Middlewares/LwIP/netif.o + .text.netif_set_netmask + 0x0000000000000000 0x34 ./Middlewares/LwIP/netif.o + .rodata.netif_set_gw.str1.1 + 0x0000000000000000 0x1c ./Middlewares/LwIP/netif.o + .text.netif_set_gw + 0x0000000000000000 0x34 ./Middlewares/LwIP/netif.o + .text.netif_add_noaddr + 0x0000000000000000 0x18 ./Middlewares/LwIP/netif.o + .text.netif_remove + 0x0000000000000000 0x60 ./Middlewares/LwIP/netif.o + .text.netif_index_to_name + 0x0000000000000000 0x26 ./Middlewares/LwIP/netif.o + .text.netif_find + 0x0000000000000000 0x40 ./Middlewares/LwIP/netif.o + .text.netif_name_to_index + 0x0000000000000000 0x12 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x1c3 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x169 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0xb9 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x3f ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x25 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x15b ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x13d ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0xa0 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0xea ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x70 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0xf9 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x1d7 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x4d ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0xc0 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x46 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x74 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0xdd ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x73 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000000000 0x2f ./Middlewares/LwIP/netif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/netifapi.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/netifapi.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/netifapi.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/netifapi.o + .debug_info 0x0000000000000000 0x77 ./Middlewares/LwIP/netifapi.o + .debug_abbrev 0x0000000000000000 0x28 ./Middlewares/LwIP/netifapi.o + .debug_aranges + 0x0000000000000000 0x18 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x4e1 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/netifapi.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/netifapi.o + .debug_line 0x0000000000000000 0xc76 ./Middlewares/LwIP/netifapi.o + .debug_str 0x0000000000000000 0xf9ba8 ./Middlewares/LwIP/netifapi.o + .comment 0x0000000000000000 0x44 ./Middlewares/LwIP/netifapi.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LwIP/netifapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pbuf.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/pbuf.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/pbuf.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/pbuf.o + .text.pbuf_skip_const + 0x0000000000000000 0x16 ./Middlewares/LwIP/pbuf.o + .text.pbuf_add_header_force + 0x0000000000000000 0x6 ./Middlewares/LwIP/pbuf.o + .text.pbuf_header + 0x0000000000000000 0x10 ./Middlewares/LwIP/pbuf.o + .text.pbuf_free_header + 0x0000000000000000 0x30 ./Middlewares/LwIP/pbuf.o + .rodata.pbuf_dechain.str1.1 + 0x0000000000000000 0x37 ./Middlewares/LwIP/pbuf.o + .text.pbuf_dechain + 0x0000000000000000 0x6c ./Middlewares/LwIP/pbuf.o + .rodata.pbuf_get_contiguous.str1.1 + 0x0000000000000000 0x46 ./Middlewares/LwIP/pbuf.o + .text.pbuf_get_contiguous + 0x0000000000000000 0x80 ./Middlewares/LwIP/pbuf.o + .text.pbuf_skip + 0x0000000000000000 0x4 ./Middlewares/LwIP/pbuf.o + .rodata.pbuf_take.str1.1 + 0x0000000000000000 0x80 ./Middlewares/LwIP/pbuf.o + .text.pbuf_take + 0x0000000000000000 0xbc ./Middlewares/LwIP/pbuf.o + .rodata.pbuf_take_at.str1.1 + 0x0000000000000000 0x17 ./Middlewares/LwIP/pbuf.o + .text.pbuf_take_at + 0x0000000000000000 0x80 ./Middlewares/LwIP/pbuf.o + .text.pbuf_coalesce + 0x0000000000000000 0x28 ./Middlewares/LwIP/pbuf.o + .text.pbuf_try_get_at + 0x0000000000000000 0x26 ./Middlewares/LwIP/pbuf.o + .text.pbuf_get_at + 0x0000000000000000 0xe ./Middlewares/LwIP/pbuf.o + .text.pbuf_put_at + 0x0000000000000000 0x20 ./Middlewares/LwIP/pbuf.o + .text.pbuf_memcmp + 0x0000000000000000 0x4e ./Middlewares/LwIP/pbuf.o + .text.pbuf_memfind + 0x0000000000000000 0x3c ./Middlewares/LwIP/pbuf.o + .text.pbuf_strstr + 0x0000000000000000 0x3e ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0xb3 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x3f ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x25 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x15b ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x74 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0xdd ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x73 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x1c3 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x169 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x13d ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0xa0 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0xea ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x70 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0xf9 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x1d7 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/pbuf.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/ppp.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/ppp.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/ppp.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/ppp.o + .debug_info 0x0000000000000000 0x77 ./Middlewares/LwIP/ppp.o + .debug_abbrev 0x0000000000000000 0x28 ./Middlewares/LwIP/ppp.o + .debug_aranges + 0x0000000000000000 0x18 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x4f0 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/ppp.o + .debug_macro 0x0000000000000000 0x2f ./Middlewares/LwIP/ppp.o + .debug_line 0x0000000000000000 0xcbe ./Middlewares/LwIP/ppp.o + .debug_str 0x0000000000000000 0xf9c6b ./Middlewares/LwIP/ppp.o + .comment 0x0000000000000000 0x44 ./Middlewares/LwIP/ppp.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LwIP/ppp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppapi.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/pppapi.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/pppapi.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/pppapi.o + .debug_info 0x0000000000000000 0x77 ./Middlewares/LwIP/pppapi.o + .debug_abbrev 0x0000000000000000 0x28 ./Middlewares/LwIP/pppapi.o + .debug_aranges + 0x0000000000000000 0x18 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x4f0 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/pppapi.o + .debug_macro 0x0000000000000000 0x2f ./Middlewares/LwIP/pppapi.o + .debug_line 0x0000000000000000 0xcc1 ./Middlewares/LwIP/pppapi.o + .debug_str 0x0000000000000000 0xf9c6e ./Middlewares/LwIP/pppapi.o + .comment 0x0000000000000000 0x44 ./Middlewares/LwIP/pppapi.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LwIP/pppapi.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppcrypt.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/pppcrypt.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/pppcrypt.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/pppcrypt.o + .debug_info 0x0000000000000000 0x77 ./Middlewares/LwIP/pppcrypt.o + .debug_abbrev 0x0000000000000000 0x28 ./Middlewares/LwIP/pppcrypt.o + .debug_aranges + 0x0000000000000000 0x18 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x4f0 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/pppcrypt.o + .debug_macro 0x0000000000000000 0x2f ./Middlewares/LwIP/pppcrypt.o + .debug_line 0x0000000000000000 0xcc3 ./Middlewares/LwIP/pppcrypt.o + .debug_str 0x0000000000000000 0xf9c70 ./Middlewares/LwIP/pppcrypt.o + .comment 0x0000000000000000 0x44 ./Middlewares/LwIP/pppcrypt.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LwIP/pppcrypt.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppoe.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/pppoe.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/pppoe.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/pppoe.o + .debug_info 0x0000000000000000 0x77 ./Middlewares/LwIP/pppoe.o + .debug_abbrev 0x0000000000000000 0x28 ./Middlewares/LwIP/pppoe.o + .debug_aranges + 0x0000000000000000 0x18 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x4f0 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/pppoe.o + .debug_macro 0x0000000000000000 0x2f ./Middlewares/LwIP/pppoe.o + .debug_line 0x0000000000000000 0xcc0 ./Middlewares/LwIP/pppoe.o + .debug_str 0x0000000000000000 0xf9c6d ./Middlewares/LwIP/pppoe.o + .comment 0x0000000000000000 0x44 ./Middlewares/LwIP/pppoe.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LwIP/pppoe.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppol2tp.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/pppol2tp.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/pppol2tp.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/pppol2tp.o + .debug_info 0x0000000000000000 0x77 ./Middlewares/LwIP/pppol2tp.o + .debug_abbrev 0x0000000000000000 0x28 ./Middlewares/LwIP/pppol2tp.o + .debug_aranges + 0x0000000000000000 0x18 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x4f0 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/pppol2tp.o + .debug_macro 0x0000000000000000 0x2f ./Middlewares/LwIP/pppol2tp.o + .debug_line 0x0000000000000000 0xcc3 ./Middlewares/LwIP/pppol2tp.o + .debug_str 0x0000000000000000 0xf9c70 ./Middlewares/LwIP/pppol2tp.o + .comment 0x0000000000000000 0x44 ./Middlewares/LwIP/pppol2tp.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LwIP/pppol2tp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/pppos.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/pppos.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/pppos.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/pppos.o + .debug_info 0x0000000000000000 0x77 ./Middlewares/LwIP/pppos.o + .debug_abbrev 0x0000000000000000 0x28 ./Middlewares/LwIP/pppos.o + .debug_aranges + 0x0000000000000000 0x18 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x4f0 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/pppos.o + .debug_macro 0x0000000000000000 0x2f ./Middlewares/LwIP/pppos.o + .debug_line 0x0000000000000000 0xcc0 ./Middlewares/LwIP/pppos.o + .debug_str 0x0000000000000000 0xf9c6d ./Middlewares/LwIP/pppos.o + .comment 0x0000000000000000 0x44 ./Middlewares/LwIP/pppos.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LwIP/pppos.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/raw.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/raw.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/raw.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/raw.o + .debug_info 0x0000000000000000 0x77 ./Middlewares/LwIP/raw.o + .debug_abbrev 0x0000000000000000 0x28 ./Middlewares/LwIP/raw.o + .debug_aranges + 0x0000000000000000 0x18 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x4e1 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/raw.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/raw.o + .debug_line 0x0000000000000000 0xc72 ./Middlewares/LwIP/raw.o + .debug_str 0x0000000000000000 0xf9ba4 ./Middlewares/LwIP/raw.o + .comment 0x0000000000000000 0x44 ./Middlewares/LwIP/raw.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LwIP/raw.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/slipif.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/slipif.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/slipif.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/slipif.o + .rodata.slipif_rxbyte_input.str1.1 + 0x0000000000000000 0xcf ./Middlewares/LwIP/slipif.o + .text.slipif_rxbyte_input + 0x0000000000000000 0xf8 ./Middlewares/LwIP/slipif.o + .text.slipif_loop_thread + 0x0000000000000000 0x22 ./Middlewares/LwIP/slipif.o + .rodata.slipif_output_v4.str1.1 + 0x0000000000000000 0xa ./Middlewares/LwIP/slipif.o + .text.slipif_output_v4 + 0x0000000000000000 0x9c ./Middlewares/LwIP/slipif.o + .rodata.slipif_init.str1.1 + 0x0000000000000000 0x2b ./Middlewares/LwIP/slipif.o + .text.slipif_init + 0x0000000000000000 0x90 ./Middlewares/LwIP/slipif.o + .text.slipif_poll + 0x0000000000000000 0x58 ./Middlewares/LwIP/slipif.o + .debug_info 0x0000000000000000 0xc2d ./Middlewares/LwIP/slipif.o + .debug_abbrev 0x0000000000000000 0x386 ./Middlewares/LwIP/slipif.o + .debug_loclists + 0x0000000000000000 0x2c0 ./Middlewares/LwIP/slipif.o + .debug_aranges + 0x0000000000000000 0x40 ./Middlewares/LwIP/slipif.o + .debug_rnglists + 0x0000000000000000 0x54 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x67e ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x1c3 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x169 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0xb9 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x3f ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x25 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x15b ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x13d ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0xc0 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x74 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0xdd ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/slipif.o + .debug_macro 0x0000000000000000 0x73 ./Middlewares/LwIP/slipif.o + .debug_line 0x0000000000000000 0x12e9 ./Middlewares/LwIP/slipif.o + .debug_str 0x0000000000000000 0x1025f2 ./Middlewares/LwIP/slipif.o + .comment 0x0000000000000000 0x44 ./Middlewares/LwIP/slipif.o + .debug_frame 0x0000000000000000 0xb8 ./Middlewares/LwIP/slipif.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LwIP/slipif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sockets.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/sockets.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/sockets.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/sockets.o + .text.get_socket + 0x0000000000000000 0x24 ./Middlewares/LwIP/sockets.o + .rodata.alloc_socket.str1.1 + 0x0000000000000000 0xca ./Middlewares/LwIP/sockets.o + .text.alloc_socket + 0x0000000000000000 0x80 ./Middlewares/LwIP/sockets.o + .text.lwip_selscan + 0x0000000000000000 0x11c ./Middlewares/LwIP/sockets.o + .rodata.lwip_pollscan.str1.1 + 0x0000000000000000 0x25 ./Middlewares/LwIP/sockets.o + .text.lwip_pollscan + 0x0000000000000000 0x128 ./Middlewares/LwIP/sockets.o + .text.lwip_link_select_cb + 0x0000000000000000 0x28 ./Middlewares/LwIP/sockets.o + .rodata.lwip_unlink_select_cb.str1.1 + 0x0000000000000000 0x30 ./Middlewares/LwIP/sockets.o + .text.lwip_unlink_select_cb + 0x0000000000000000 0x6c ./Middlewares/LwIP/sockets.o + .text.lwip_getaddrname + 0x0000000000000000 0x70 ./Middlewares/LwIP/sockets.o + .rodata.lwip_recv_tcp.str1.1 + 0x0000000000000000 0x71 ./Middlewares/LwIP/sockets.o + .text.lwip_recv_tcp + 0x0000000000000000 0x154 ./Middlewares/LwIP/sockets.o + .rodata.event_callback.str1.1 + 0x0000000000000000 0xe ./Middlewares/LwIP/sockets.o + .text.event_callback + 0x0000000000000000 0x164 ./Middlewares/LwIP/sockets.o + .rodata.lwip_sockopt_to_ipopt.str1.1 + 0x0000000000000000 0x16 ./Middlewares/LwIP/sockets.o + .text.lwip_sockopt_to_ipopt + 0x0000000000000000 0x2c ./Middlewares/LwIP/sockets.o + .rodata.lwip_sock_make_addr.constprop.0.isra.0.str1.1 + 0x0000000000000000 0x1d ./Middlewares/LwIP/sockets.o + .text.lwip_sock_make_addr.constprop.0.isra.0 + 0x0000000000000000 0x70 ./Middlewares/LwIP/sockets.o + .rodata.lwip_recvfrom_udp_raw.constprop.0.str1.1 + 0x0000000000000000 0x35 ./Middlewares/LwIP/sockets.o + .text.lwip_recvfrom_udp_raw.constprop.0 + 0x0000000000000000 0xec ./Middlewares/LwIP/sockets.o + .text.free_socket + 0x0000000000000000 0x36 ./Middlewares/LwIP/sockets.o + .text.lwip_socket_thread_init + 0x0000000000000000 0x2 ./Middlewares/LwIP/sockets.o + .text.lwip_socket_thread_cleanup + 0x0000000000000000 0x2 ./Middlewares/LwIP/sockets.o + .text.lwip_socket_dbg_get_socket + 0x0000000000000000 0x14 ./Middlewares/LwIP/sockets.o + .rodata.lwip_accept.str1.1 + 0x0000000000000000 0x25 ./Middlewares/LwIP/sockets.o + .text.lwip_accept + 0x0000000000000000 0x14c ./Middlewares/LwIP/sockets.o + .rodata.lwip_bind.str1.1 + 0x0000000000000000 0x1b ./Middlewares/LwIP/sockets.o + .text.lwip_bind + 0x0000000000000000 0x6c ./Middlewares/LwIP/sockets.o + .rodata.lwip_close.str1.1 + 0x0000000000000000 0x17 ./Middlewares/LwIP/sockets.o + .text.lwip_close + 0x0000000000000000 0x70 ./Middlewares/LwIP/sockets.o + .rodata.lwip_connect.str1.1 + 0x0000000000000000 0x1e ./Middlewares/LwIP/sockets.o + .text.lwip_connect + 0x0000000000000000 0x74 ./Middlewares/LwIP/sockets.o + .text.lwip_listen + 0x0000000000000000 0x48 ./Middlewares/LwIP/sockets.o + .text.lwip_recvfrom + 0x0000000000000000 0xb8 ./Middlewares/LwIP/sockets.o + .text.lwip_read + 0x0000000000000000 0x12 ./Middlewares/LwIP/sockets.o + .text.lwip_recv + 0x0000000000000000 0x10 ./Middlewares/LwIP/sockets.o + .rodata.lwip_recvmsg.str1.1 + 0x0000000000000000 0x46 ./Middlewares/LwIP/sockets.o + .text.lwip_recvmsg + 0x0000000000000000 0x12c ./Middlewares/LwIP/sockets.o + .text.lwip_readv + 0x0000000000000000 0x22 ./Middlewares/LwIP/sockets.o + .rodata.lwip_sendmsg.str1.1 + 0x0000000000000000 0xa4 ./Middlewares/LwIP/sockets.o + .text.lwip_sendmsg + 0x0000000000000000 0x1b4 ./Middlewares/LwIP/sockets.o + .rodata.lwip_sendto.str1.1 + 0x0000000000000000 0x1d ./Middlewares/LwIP/sockets.o + .text.lwip_sendto + 0x0000000000000000 0xe8 ./Middlewares/LwIP/sockets.o + .text.lwip_send + 0x0000000000000000 0x70 ./Middlewares/LwIP/sockets.o + .text.lwip_socket + 0x0000000000000000 0x74 ./Middlewares/LwIP/sockets.o + .text.lwip_write + 0x0000000000000000 0x6 ./Middlewares/LwIP/sockets.o + .text.lwip_writev + 0x0000000000000000 0x22 ./Middlewares/LwIP/sockets.o + .text.lwip_select + 0x0000000000000000 0x278 ./Middlewares/LwIP/sockets.o + .rodata.lwip_poll.str1.1 + 0x0000000000000000 0x17 ./Middlewares/LwIP/sockets.o + .text.lwip_poll + 0x0000000000000000 0xb0 ./Middlewares/LwIP/sockets.o + .text.lwip_shutdown + 0x0000000000000000 0x64 ./Middlewares/LwIP/sockets.o + .text.lwip_getpeername + 0x0000000000000000 0x6 ./Middlewares/LwIP/sockets.o + .text.lwip_getsockname + 0x0000000000000000 0x6 ./Middlewares/LwIP/sockets.o + .text.lwip_getsockopt + 0x0000000000000000 0x1b4 ./Middlewares/LwIP/sockets.o + .rodata.lwip_setsockopt.str1.1 + 0x0000000000000000 0x2a ./Middlewares/LwIP/sockets.o + .text.lwip_setsockopt + 0x0000000000000000 0x1c8 ./Middlewares/LwIP/sockets.o + .text.lwip_ioctl + 0x0000000000000000 0x40 ./Middlewares/LwIP/sockets.o + .text.lwip_fcntl + 0x0000000000000000 0x90 ./Middlewares/LwIP/sockets.o + .text.lwip_inet_ntop + 0x0000000000000000 0x34 ./Middlewares/LwIP/sockets.o + .text.lwip_inet_pton + 0x0000000000000000 0x20 ./Middlewares/LwIP/sockets.o + .bss.select_cb_list + 0x0000000000000000 0x4 ./Middlewares/LwIP/sockets.o + .bss.sockets 0x0000000000000000 0x40 ./Middlewares/LwIP/sockets.o + .rodata.CSWTCH.140 + 0x0000000000000000 0x3 ./Middlewares/LwIP/sockets.o + .rodata.CSWTCH.141 + 0x0000000000000000 0x3 ./Middlewares/LwIP/sockets.o + .debug_info 0x0000000000000000 0x5402 ./Middlewares/LwIP/sockets.o + .debug_abbrev 0x0000000000000000 0x543 ./Middlewares/LwIP/sockets.o + .debug_loclists + 0x0000000000000000 0x2dc0 ./Middlewares/LwIP/sockets.o + .debug_aranges + 0x0000000000000000 0x168 ./Middlewares/LwIP/sockets.o + .debug_rnglists + 0x0000000000000000 0x2e4 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x88a ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x1c3 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x169 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0xb9 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x3f ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x25 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x15b ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x13d ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0xf4 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x320 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x401 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x74 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0xdd ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x73 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x24 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x40 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0xda ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0xa0 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0xea ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x70 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0xf9 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x4d ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/sockets.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/sockets.o + .debug_line 0x0000000000000000 0x3a05 ./Middlewares/LwIP/sockets.o + .debug_str 0x0000000000000000 0x10808f ./Middlewares/LwIP/sockets.o + .comment 0x0000000000000000 0x44 ./Middlewares/LwIP/sockets.o + .debug_frame 0x0000000000000000 0x588 ./Middlewares/LwIP/sockets.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LwIP/sockets.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/stats.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/stats.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/stats.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/stats.o + .debug_info 0x0000000000000000 0x77 ./Middlewares/LwIP/stats.o + .debug_abbrev 0x0000000000000000 0x28 ./Middlewares/LwIP/stats.o + .debug_aranges + 0x0000000000000000 0x18 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x4e1 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/stats.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/stats.o + .debug_line 0x0000000000000000 0xc74 ./Middlewares/LwIP/stats.o + .debug_str 0x0000000000000000 0xf9ba6 ./Middlewares/LwIP/stats.o + .comment 0x0000000000000000 0x44 ./Middlewares/LwIP/stats.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LwIP/stats.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/sys.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/sys.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/sys.o + .text.sys_msleep + 0x0000000000000000 0x22 ./Middlewares/LwIP/sys.o + .debug_info 0x0000000000000000 0x266 ./Middlewares/LwIP/sys.o + .debug_abbrev 0x0000000000000000 0x11d ./Middlewares/LwIP/sys.o + .debug_loclists + 0x0000000000000000 0x2b ./Middlewares/LwIP/sys.o + .debug_aranges + 0x0000000000000000 0x20 ./Middlewares/LwIP/sys.o + .debug_rnglists + 0x0000000000000000 0x13 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x597 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x74 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0xdd ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/sys.o + .debug_macro 0x0000000000000000 0x73 ./Middlewares/LwIP/sys.o + .debug_line 0x0000000000000000 0xe32 ./Middlewares/LwIP/sys.o + .debug_str 0x0000000000000000 0xfead5 ./Middlewares/LwIP/sys.o + .comment 0x0000000000000000 0x44 ./Middlewares/LwIP/sys.o + .debug_frame 0x0000000000000000 0x2c ./Middlewares/LwIP/sys.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LwIP/sys.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/sys_arch.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/sys_arch.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/sys_arch.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/sys_arch.o + .text.sys_mbox_free + 0x0000000000000000 0x14 ./Middlewares/LwIP/sys_arch.o + .text.sys_mbox_post + 0x0000000000000000 0x1c ./Middlewares/LwIP/sys_arch.o + .text.sys_mbox_trypost_fromisr + 0x0000000000000000 0x4 ./Middlewares/LwIP/sys_arch.o + .text.sys_arch_mbox_tryfetch + 0x0000000000000000 0x16 ./Middlewares/LwIP/sys_arch.o + .text.sys_mbox_set_invalid + 0x0000000000000000 0x6 ./Middlewares/LwIP/sys_arch.o + .text.sys_sem_new + 0x0000000000000000 0x26 ./Middlewares/LwIP/sys_arch.o + .text.sys_arch_sem_wait + 0x0000000000000000 0x36 ./Middlewares/LwIP/sys_arch.o + .text.sys_sem_signal + 0x0000000000000000 0x6 ./Middlewares/LwIP/sys_arch.o + .text.sys_sem_free + 0x0000000000000000 0x6 ./Middlewares/LwIP/sys_arch.o + .text.sys_sem_valid + 0x0000000000000000 0xa ./Middlewares/LwIP/sys_arch.o + .text.sys_sem_set_invalid + 0x0000000000000000 0x6 ./Middlewares/LwIP/sys_arch.o + .text.sys_mutex_free + 0x0000000000000000 0x6 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x5b ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x94 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x10e ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x8d ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x57 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x5d ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x74 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0xdd ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x73 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x3f ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x25 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x0000000000000000 0x15b ./Middlewares/LwIP/sys_arch.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/tcp.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/tcp.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/tcp.o + .text.tcp_new_port + 0x0000000000000000 0x50 ./Middlewares/LwIP/tcp.o + .rodata.tcp_bind.str1.1 + 0x0000000000000000 0x3e ./Middlewares/LwIP/tcp.o + .text.tcp_bind + 0x0000000000000000 0xac ./Middlewares/LwIP/tcp.o + .text.tcp_bind_netif + 0x0000000000000000 0xe ./Middlewares/LwIP/tcp.o + .rodata.tcp_listen_with_backlog_and_err.str1.1 + 0x0000000000000000 0x64 ./Middlewares/LwIP/tcp.o + .text.tcp_listen_with_backlog_and_err + 0x0000000000000000 0xcc ./Middlewares/LwIP/tcp.o + .text.tcp_listen_with_backlog + 0x0000000000000000 0x6 ./Middlewares/LwIP/tcp.o + .text.tcp_txnow + 0x0000000000000000 0x20 ./Middlewares/LwIP/tcp.o + .rodata.tcp_setprio.str1.1 + 0x0000000000000000 0x19 ./Middlewares/LwIP/tcp.o + .text.tcp_setprio + 0x0000000000000000 0x20 ./Middlewares/LwIP/tcp.o + .text.tcp_arg 0x0000000000000000 0x6 ./Middlewares/LwIP/tcp.o + .rodata.tcp_recv.str1.1 + 0x0000000000000000 0x27 ./Middlewares/LwIP/tcp.o + .text.tcp_recv + 0x0000000000000000 0x30 ./Middlewares/LwIP/tcp.o + .rodata.tcp_sent.str1.1 + 0x0000000000000000 0x27 ./Middlewares/LwIP/tcp.o + .text.tcp_sent + 0x0000000000000000 0x30 ./Middlewares/LwIP/tcp.o + .rodata.tcp_err.str1.1 + 0x0000000000000000 0x26 ./Middlewares/LwIP/tcp.o + .text.tcp_err 0x0000000000000000 0x30 ./Middlewares/LwIP/tcp.o + .text.tcp_accept + 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .rodata.tcp_poll.str1.1 + 0x0000000000000000 0x34 ./Middlewares/LwIP/tcp.o + .text.tcp_poll + 0x0000000000000000 0x48 ./Middlewares/LwIP/tcp.o + .rodata.tcp_connect.str1.1 + 0x0000000000000000 0x65 ./Middlewares/LwIP/tcp.o + .text.tcp_connect + 0x0000000000000000 0x130 ./Middlewares/LwIP/tcp.o + .text.tcp_debug_state_str + 0x0000000000000000 0xc ./Middlewares/LwIP/tcp.o + .text.tcp_tcp_get_tcp_addrinfo + 0x0000000000000000 0x2a ./Middlewares/LwIP/tcp.o + .rodata.tcp_accept_null.str1.1 + 0x0000000000000000 0x1d ./Middlewares/LwIP/tcp.o + .text.tcp_accept_null + 0x0000000000000000 0x2c ./Middlewares/LwIP/tcp.o + .text.tcp_new 0x0000000000000000 0x6 ./Middlewares/LwIP/tcp.o + .text.tcp_new_ip_type + 0x0000000000000000 0x6 ./Middlewares/LwIP/tcp.o + .rodata.tcp_shutdown.str1.1 + 0x0000000000000000 0x1a ./Middlewares/LwIP/tcp.o + .text.tcp_shutdown + 0x0000000000000000 0x70 ./Middlewares/LwIP/tcp.o + .rodata.str1.1 + 0x0000000000000000 0x68 ./Middlewares/LwIP/tcp.o + .rodata.tcp_state_str + 0x0000000000000000 0x2c ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x3f ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x25 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x15b ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0xb3 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x1c3 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x169 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x149 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0xa0 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0xea ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x70 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0xf9 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x1d7 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LwIP/tcp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_in.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/tcp_in.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/tcp_in.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0xb3 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x1c3 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x169 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x3f ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x25 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x15b ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x13d ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0xa0 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0xea ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x70 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0xf9 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x1d7 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LwIP/tcp_in.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcp_out.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/tcp_out.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/tcp_out.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/tcp_out.o + .rodata.tcp_pbuf_prealloc.str1.1 + 0x0000000000000000 0x33 ./Middlewares/LwIP/tcp_out.o + .text.tcp_pbuf_prealloc + 0x0000000000000000 0xa4 ./Middlewares/LwIP/tcp_out.o + .rodata.tcp_write.str1.1 + 0x0000000000000000 0x249 ./Middlewares/LwIP/tcp_out.o + .text.tcp_write + 0x0000000000000000 0x53c ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0xb3 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x1c3 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x169 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x3f ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x25 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x15b ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x13d ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0xa0 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0xea ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x70 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0xf9 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x1d7 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LwIP/tcp_out.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/tcpip.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/tcpip.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/tcpip.o + .text.pbuf_free_int + 0x0000000000000000 0x4 ./Middlewares/LwIP/tcpip.o + .text.tcpip_callback + 0x0000000000000000 0x50 ./Middlewares/LwIP/tcpip.o + .text.tcpip_send_msg_wait_sem + 0x0000000000000000 0x20 ./Middlewares/LwIP/tcpip.o + .text.tcpip_api_call + 0x0000000000000000 0x24 ./Middlewares/LwIP/tcpip.o + .text.tcpip_callbackmsg_new + 0x0000000000000000 0x18 ./Middlewares/LwIP/tcpip.o + .text.tcpip_callbackmsg_delete + 0x0000000000000000 0x8 ./Middlewares/LwIP/tcpip.o + .text.tcpip_callbackmsg_trycallback + 0x0000000000000000 0x38 ./Middlewares/LwIP/tcpip.o + .text.tcpip_callbackmsg_trycallback_fromisr + 0x0000000000000000 0x38 ./Middlewares/LwIP/tcpip.o + .text.pbuf_free_callback + 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .text.mem_free_callback + 0x0000000000000000 0xc ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x74 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0xdd ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x73 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x1c3 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x169 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0xb9 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x3f ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x25 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x15b ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x13d ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x5e ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0xa0 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0xea ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x46 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/tcpip.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/timeouts.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/timeouts.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/timeouts.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/timeouts.o + .text.sys_untimeout + 0x0000000000000000 0x3c ./Middlewares/LwIP/timeouts.o + .text.sys_restart_timeouts + 0x0000000000000000 0x24 ./Middlewares/LwIP/timeouts.o + .rodata.lwip_num_cyclic_timers + 0x0000000000000000 0x4 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x14b ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x15a ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0xc9 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x26 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x49b ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0xb5 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0xaa ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x74 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0xdd ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x73 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0xb9 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x1c3 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x169 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x3f ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x25 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x15b ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x13d ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0xa0 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0xea ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x70 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0xf9 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x1d7 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x46 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x4d ./Middlewares/LwIP/timeouts.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/timeouts.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/udp.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/udp.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/udp.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/udp.o + .rodata.udp_sendto.str1.1 + 0x0000000000000000 0x4c ./Middlewares/LwIP/udp.o + .text.udp_sendto + 0x0000000000000000 0x78 ./Middlewares/LwIP/udp.o + .rodata.udp_send.str1.1 + 0x0000000000000000 0x2d ./Middlewares/LwIP/udp.o + .text.udp_send + 0x0000000000000000 0x44 ./Middlewares/LwIP/udp.o + .text.udp_bind_netif + 0x0000000000000000 0xe ./Middlewares/LwIP/udp.o + .rodata.udp_disconnect.str1.1 + 0x0000000000000000 0x1c ./Middlewares/LwIP/udp.o + .text.udp_disconnect + 0x0000000000000000 0x30 ./Middlewares/LwIP/udp.o + .text.udp_new_ip_type + 0x0000000000000000 0x4 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0xb3 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x1c3 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x169 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x3f ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x25 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x15b ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x13d ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0xa0 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0xea ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x4d ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x70 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0xc0 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x2f ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/udp.o + .debug_macro 0x0000000000000000 0x20 ./Middlewares/LwIP/udp.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/upap.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/upap.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/upap.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/upap.o + .debug_info 0x0000000000000000 0x77 ./Middlewares/LwIP/upap.o + .debug_abbrev 0x0000000000000000 0x28 ./Middlewares/LwIP/upap.o + .debug_aranges + 0x0000000000000000 0x18 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x4f0 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/upap.o + .debug_macro 0x0000000000000000 0x2f ./Middlewares/LwIP/upap.o + .debug_line 0x0000000000000000 0xcbf ./Middlewares/LwIP/upap.o + .debug_str 0x0000000000000000 0xf9c6c ./Middlewares/LwIP/upap.o + .comment 0x0000000000000000 0x44 ./Middlewares/LwIP/upap.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LwIP/upap.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/utils.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/utils.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/utils.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/utils.o + .debug_info 0x0000000000000000 0x77 ./Middlewares/LwIP/utils.o + .debug_abbrev 0x0000000000000000 0x28 ./Middlewares/LwIP/utils.o + .debug_aranges + 0x0000000000000000 0x18 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x4f0 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/utils.o + .debug_macro 0x0000000000000000 0x2f ./Middlewares/LwIP/utils.o + .debug_line 0x0000000000000000 0xcc0 ./Middlewares/LwIP/utils.o + .debug_str 0x0000000000000000 0xf9c6d ./Middlewares/LwIP/utils.o + .comment 0x0000000000000000 0x44 ./Middlewares/LwIP/utils.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LwIP/utils.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/vj.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/vj.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/vj.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/vj.o + .debug_info 0x0000000000000000 0x77 ./Middlewares/LwIP/vj.o + .debug_abbrev 0x0000000000000000 0x28 ./Middlewares/LwIP/vj.o + .debug_aranges + 0x0000000000000000 0x18 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x4f0 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/vj.o + .debug_macro 0x0000000000000000 0x2f ./Middlewares/LwIP/vj.o + .debug_line 0x0000000000000000 0xcbd ./Middlewares/LwIP/vj.o + .debug_str 0x0000000000000000 0xf9c6a ./Middlewares/LwIP/vj.o + .comment 0x0000000000000000 0x44 ./Middlewares/LwIP/vj.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LwIP/vj.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .group 0x0000000000000000 0xc ./Middlewares/LwIP/zepif.o + .text 0x0000000000000000 0x0 ./Middlewares/LwIP/zepif.o + .data 0x0000000000000000 0x0 ./Middlewares/LwIP/zepif.o + .bss 0x0000000000000000 0x0 ./Middlewares/LwIP/zepif.o + .debug_info 0x0000000000000000 0x77 ./Middlewares/LwIP/zepif.o + .debug_abbrev 0x0000000000000000 0x28 ./Middlewares/LwIP/zepif.o + .debug_aranges + 0x0000000000000000 0x18 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x4fe ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0xaae ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x2bf ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x2e ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x3b ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x51 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x103 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x6a ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x1df ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0xd9 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x12cd ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x1920a ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x6d ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x3749 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x174 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x63 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x18ad ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x6c4 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x185 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x115 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x1fd ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x24f ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x41 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x236 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0xc7 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x208 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0xd44 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x14e ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x25a ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x12 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x504 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x22c ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0xa5 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x198 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0xd6 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x12e ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x108 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x2d4 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0xa7c ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x59 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x14d ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0xac ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0xd0 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x2a ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x61 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x34 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x58 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x8e ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x177 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x369 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x29 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x147 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x22 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x52 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0xc1 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x1c ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x3d ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0xc8 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x16 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x35 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x28 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x10 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x460 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x43 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x7c ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x17 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x118 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x19 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x11f ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x82 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x66 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x739 ./Middlewares/LwIP/zepif.o + .debug_macro 0x0000000000000000 0x4c ./Middlewares/LwIP/zepif.o + .debug_line 0x0000000000000000 0xcd4 ./Middlewares/LwIP/zepif.o + .debug_str 0x0000000000000000 0xf9d93 ./Middlewares/LwIP/zepif.o + .comment 0x0000000000000000 0x44 ./Middlewares/LwIP/zepif.o + .ARM.attributes + 0x0000000000000000 0x34 ./Middlewares/LwIP/zepif.o + .text 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(AbstractPartition.o) + .data 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(AbstractPartition.o) + .bss 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(AbstractPartition.o) + .text._ZN8touchgfx17AbstractPartitionD0Ev + 0x0000000000000000 0xe C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(AbstractPartition.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Container.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Container.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Container.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Container.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Container.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Container.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Container.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Container.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Container.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Container.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Container.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Container.o) + .group 0x0000000000000000 0x10 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Container.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Container.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Container.o) + .text 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Container.o) + .data 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Container.o) + .bss 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Container.o) + .text._ZNK8touchgfx8Drawable17invalidateContentEv + 0x0000000000000000 0xe C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Container.o) + .text._ZN8touchgfx8Drawable4setXEs + 0x0000000000000000 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Container.o) + .text._ZN8touchgfx8Drawable4setYEs + 0x0000000000000000 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Container.o) + .text._ZN8touchgfx8Drawable8setWidthEs + 0x0000000000000000 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Container.o) + .text._ZN8touchgfx8Drawable9setHeightEs + 0x0000000000000000 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Container.o) + .text._ZN8touchgfx8Drawable20childGeometryChangedEv + 0x0000000000000000 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Container.o) + .text._ZN8touchgfx8Drawable16handleClickEventERKNS_10ClickEventE + 0x0000000000000000 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Container.o) + .text._ZN8touchgfx8Drawable18handleGestureEventERKNS_12GestureEventE + 0x0000000000000000 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Container.o) + .text._ZN8touchgfx8Drawable15handleDragEventERKNS_9DragEventE + 0x0000000000000000 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Container.o) + .text._ZN8touchgfx8Drawable15handleTickEventEv + 0x0000000000000000 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Container.o) + .text._ZN8touchgfx8Drawable6moveToEss + 0x0000000000000000 0x18 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Container.o) + .text._ZN8touchgfx9Container13getFirstChildEv + 0x0000000000000000 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Container.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + .group 0x0000000000000000 0x10 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + .group 0x0000000000000000 0xc C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + .group 0x0000000000000000 0xc C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + .group 0x0000000000000000 0xc C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + .text 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + .data 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + .bss 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + .text._ZNK8touchgfx8Drawable17invalidateContentEv + 0x0000000000000000 0xe C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + .text._ZN8touchgfx8Drawable13getFirstChildEv + 0x0000000000000000 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + .text._ZN8touchgfx8Drawable4setXEs + 0x0000000000000000 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + .text._ZN8touchgfx8Drawable4setYEs + 0x0000000000000000 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + .text._ZN8touchgfx8Drawable8setWidthEs + 0x0000000000000000 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + .text._ZN8touchgfx8Drawable9setHeightEs + 0x0000000000000000 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + .text._ZN8touchgfx8Drawable20childGeometryChangedEv + 0x0000000000000000 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + .text._ZN8touchgfx8Drawable16handleClickEventERKNS_10ClickEventE + 0x0000000000000000 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + .text._ZN8touchgfx8Drawable18handleGestureEventERKNS_12GestureEventE + 0x0000000000000000 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + .text._ZN8touchgfx8Drawable15handleDragEventERKNS_9DragEventE + 0x0000000000000000 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + .text._ZN8touchgfx8Drawable15handleTickEventEv + 0x0000000000000000 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + .text._ZN8touchgfx8Drawable6moveToEss + 0x0000000000000000 0x18 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + .text._ZN8touchgfx8Drawable14setupDrawChainERKNS_4RectEPPS0_ + 0x0000000000000000 0x14 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + .text._ZN8touchgfx9Container13getFirstChildEv + 0x0000000000000000 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + .text._ZN8touchgfx6Widget12getLastChildEssPPNS_8DrawableE + 0x0000000000000000 0x10 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + .text._ZN8touchgfx8Drawable5setXYEss + 0x0000000000000000 0x1a C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + .text._ZN8touchgfx6Slider10setBitmapsEttt + 0x0000000000000000 0x20 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + .group 0x0000000000000000 0xc C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + .group 0x0000000000000000 0xc C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + .group 0x0000000000000000 0xc C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + .group 0x0000000000000000 0xc C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + .group 0x0000000000000000 0xc C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + .group 0x0000000000000000 0xc C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + .group 0x0000000000000000 0xc C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + .text 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + .data 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + .bss 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + .text._ZN8touchgfx3HAL21setDisplayOrientationENS_18DisplayOrientationE + 0x0000000000000000 0xc C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + .text._ZN8touchgfx3HAL18setFrameBufferSizeEtt + 0x0000000000000000 0x14 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + .text._ZN8touchgfx3HAL9sampleKeyERh + 0x0000000000000000 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + .text._ZN8touchgfx3HAL28setFrameBufferStartAddressesEPvS1_S1_ + 0x0000000000000000 0x24 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + .text._ZN8touchgfx3HAL19setAnimationStorageEPv + 0x0000000000000000 0x14 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + .text._ZNK8touchgfx3HAL18getFlashDataReaderEv + 0x0000000000000000 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + .text._ZN8touchgfx3HAL9taskDelayEt + 0x0000000000000000 0xa C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + .text._ZN8touchgfx3HAL17getTFTCurrentLineEv + 0x0000000000000000 0x6 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + .text._ZN8touchgfx3HAL10getDMATypeEv + 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + .text._ZN8touchgfx3HAL15InvalidateCacheEv + 0x0000000000000000 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + .text._ZN8touchgfx3HAL10FlushCacheEv + 0x0000000000000000 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + .text._ZN8touchgfx3HAL11getBlitCapsEv + 0x0000000000000000 0x12 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + .text._ZN8touchgfx3HAL31performDisplayOrientationChangeEv + 0x0000000000000000 0x48 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + .text._ZN8touchgfx4RectaNERKS0_ + 0x0000000000000000 0x86 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + .text._ZN8touchgfx8Drawable5setXYEss + 0x0000000000000000 0x1a C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + .text._ZN8touchgfx3HAL3lcdEv + 0x0000000000000000 0x18 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + .text._ZNK8touchgfx3HAL11getBitDepthENS_6Bitmap12BitmapFormatE + 0x0000000000000000 0x10 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + .text._ZNK8touchgfx3HAL13getDstAddressEttPttNS_6Bitmap12BitmapFormatE + 0x0000000000000000 0x24 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + .text._ZN8touchgfx3HAL15backPorchExitedEv + 0x0000000000000000 0x16 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + .text._ZN8touchgfx3HAL12getCPUCyclesEv + 0x0000000000000000 0xc C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + .text._ZN8touchgfx3HAL33lockFrameBufferForRenderingMethodENS0_15RenderingMethodE + 0x0000000000000000 0x34 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + .rodata._ZTVN8touchgfx3HALE + 0x0000000000000000 0xd8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(DMA.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(DMA.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(DMA.o) + .group 0x0000000000000000 0x10 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(DMA.o) + .text 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(DMA.o) + .data 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(DMA.o) + .bss 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(DMA.o) + .text._ZN8touchgfx13DMA_Interface5flushEv + 0x0000000000000000 0x6 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(DMA.o) + .text._ZN8touchgfx13DMA_Interface10initializeEv + 0x0000000000000000 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(DMA.o) + .text._ZN8touchgfx13DMA_Interface10getDMATypeEv + 0x0000000000000000 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(DMA.o) + .text._ZN8touchgfx13DMA_Interface14isDmaQueueFullEv + 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(DMA.o) + .rodata._ZTVN8touchgfx13DMA_InterfaceE + 0x0000000000000000 0x50 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(DMA.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextArea.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextArea.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextArea.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextArea.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextArea.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextArea.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextArea.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextArea.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextArea.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextArea.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextArea.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextArea.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextArea.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextArea.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextArea.o) + .group 0x0000000000000000 0xc C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextArea.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextArea.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextArea.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextArea.o) + .group 0x0000000000000000 0x10 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextArea.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextArea.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextArea.o) + .text 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextArea.o) + .data 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextArea.o) + .bss 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextArea.o) + .text._ZN8touchgfx8Drawable13getFirstChildEv + 0x0000000000000000 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextArea.o) + .text._ZN8touchgfx8Drawable4setXEs + 0x0000000000000000 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextArea.o) + .text._ZN8touchgfx8Drawable4setYEs + 0x0000000000000000 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextArea.o) + .text._ZN8touchgfx8Drawable20childGeometryChangedEv + 0x0000000000000000 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextArea.o) + .text._ZN8touchgfx8Drawable16handleClickEventERKNS_10ClickEventE + 0x0000000000000000 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextArea.o) + .text._ZN8touchgfx8Drawable18handleGestureEventERKNS_12GestureEventE + 0x0000000000000000 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextArea.o) + .text._ZN8touchgfx8Drawable15handleDragEventERKNS_9DragEventE + 0x0000000000000000 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextArea.o) + .text._ZN8touchgfx8Drawable15handleTickEventEv + 0x0000000000000000 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextArea.o) + .text._ZN8touchgfx8Drawable6moveToEss + 0x0000000000000000 0x18 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextArea.o) + .text._ZN8touchgfx8Drawable14setupDrawChainERKNS_4RectEPPS0_ + 0x0000000000000000 0x14 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextArea.o) + .text._ZN8touchgfx6Widget12getLastChildEssPPNS_8DrawableE + 0x0000000000000000 0x10 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextArea.o) + .text._ZN8touchgfx8TextArea8setWidthEs + 0x0000000000000000 0x24 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextArea.o) + .text._ZN8touchgfx8TextArea9setHeightEs + 0x0000000000000000 0x24 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextArea.o) + .text._ZNK8touchgfx8TextArea12getSolidRectEv + 0x0000000000000000 0xc C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextArea.o) + .text._ZN8touchgfx8TextArea8setAlphaEh + 0x0000000000000000 0x6 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextArea.o) + .text._ZN8touchgfx8TextArea12setBaselineYEs + 0x0000000000000000 0x38 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextArea.o) + .text._ZN8touchgfx8TextArea13setXBaselineYEss + 0x0000000000000000 0x1a C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextArea.o) + .text._ZNK8touchgfx8TextArea12getWildcard2Ev + 0x0000000000000000 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextArea.o) + .text._ZN8touchgfx4RectaNERKS0_ + 0x0000000000000000 0x86 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextArea.o) + .text._ZN8touchgfx8Drawable14setWidthHeightEss + 0x0000000000000000 0x1a C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextArea.o) + .text._ZN8touchgfx8TextArea32resizeToCurrentTextWithAlignmentEv + 0x0000000000000000 0xfc C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextArea.o) + .text._ZN8touchgfx8TextArea25resizeHeightToCurrentTextEv + 0x0000000000000000 0x34 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextArea.o) + .text._ZN8touchgfx8TextArea37resizeHeightToCurrentTextWithRotationEv + 0x0000000000000000 0x68 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextArea.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Box.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Box.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Box.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Box.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Box.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Box.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Box.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Box.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Box.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Box.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Box.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Box.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Box.o) + .group 0x0000000000000000 0x10 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Box.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Box.o) + .text 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Box.o) + .data 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Box.o) + .bss 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Box.o) + .text._ZN8touchgfx8Drawable13getFirstChildEv + 0x0000000000000000 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Box.o) + .text._ZN8touchgfx8Drawable4setXEs + 0x0000000000000000 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Box.o) + .text._ZN8touchgfx8Drawable4setYEs + 0x0000000000000000 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Box.o) + .text._ZN8touchgfx8Drawable8setWidthEs + 0x0000000000000000 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Box.o) + .text._ZN8touchgfx8Drawable9setHeightEs + 0x0000000000000000 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Box.o) + .text._ZN8touchgfx8Drawable20childGeometryChangedEv + 0x0000000000000000 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Box.o) + .text._ZN8touchgfx8Drawable16handleClickEventERKNS_10ClickEventE + 0x0000000000000000 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Box.o) + .text._ZN8touchgfx8Drawable18handleGestureEventERKNS_12GestureEventE + 0x0000000000000000 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Box.o) + .text._ZN8touchgfx8Drawable15handleDragEventERKNS_9DragEventE + 0x0000000000000000 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Box.o) + .text._ZN8touchgfx8Drawable15handleTickEventEv + 0x0000000000000000 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Box.o) + .text._ZN8touchgfx8Drawable6moveToEss + 0x0000000000000000 0x18 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Box.o) + .text._ZN8touchgfx8Drawable14setupDrawChainERKNS_4RectEPPS0_ + 0x0000000000000000 0x14 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Box.o) + .text._ZN8touchgfx6Widget12getLastChildEssPPNS_8DrawableE + 0x0000000000000000 0x10 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Box.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextAreaWithWildcard.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextAreaWithWildcard.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextAreaWithWildcard.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextAreaWithWildcard.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextAreaWithWildcard.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextAreaWithWildcard.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextAreaWithWildcard.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextAreaWithWildcard.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextAreaWithWildcard.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextAreaWithWildcard.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextAreaWithWildcard.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextAreaWithWildcard.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextAreaWithWildcard.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextAreaWithWildcard.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextAreaWithWildcard.o) + .group 0x0000000000000000 0xc C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextAreaWithWildcard.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextAreaWithWildcard.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextAreaWithWildcard.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextAreaWithWildcard.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextAreaWithWildcard.o) + .group 0x0000000000000000 0x10 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextAreaWithWildcard.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextAreaWithWildcard.o) + .text 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextAreaWithWildcard.o) + .data 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextAreaWithWildcard.o) + .bss 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextAreaWithWildcard.o) + .text._ZN8touchgfx8Drawable13getFirstChildEv + 0x0000000000000000 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextAreaWithWildcard.o) + .text._ZN8touchgfx8Drawable4setXEs + 0x0000000000000000 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextAreaWithWildcard.o) + .text._ZN8touchgfx8Drawable4setYEs + 0x0000000000000000 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextAreaWithWildcard.o) + .text._ZN8touchgfx8Drawable20childGeometryChangedEv + 0x0000000000000000 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextAreaWithWildcard.o) + .text._ZN8touchgfx8Drawable16handleClickEventERKNS_10ClickEventE + 0x0000000000000000 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextAreaWithWildcard.o) + .text._ZN8touchgfx8Drawable18handleGestureEventERKNS_12GestureEventE + 0x0000000000000000 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextAreaWithWildcard.o) + .text._ZN8touchgfx8Drawable15handleDragEventERKNS_9DragEventE + 0x0000000000000000 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextAreaWithWildcard.o) + .text._ZN8touchgfx8Drawable15handleTickEventEv + 0x0000000000000000 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextAreaWithWildcard.o) + .text._ZN8touchgfx8Drawable6moveToEss + 0x0000000000000000 0x18 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextAreaWithWildcard.o) + .text._ZN8touchgfx8Drawable14setupDrawChainERKNS_4RectEPPS0_ + 0x0000000000000000 0x14 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextAreaWithWildcard.o) + .text._ZN8touchgfx6Widget12getLastChildEssPPNS_8DrawableE + 0x0000000000000000 0x10 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextAreaWithWildcard.o) + .text._ZN8touchgfx8TextArea8setWidthEs + 0x0000000000000000 0x24 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextAreaWithWildcard.o) + .text._ZN8touchgfx8TextArea9setHeightEs + 0x0000000000000000 0x24 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextAreaWithWildcard.o) + .text._ZNK8touchgfx8TextArea12getSolidRectEv + 0x0000000000000000 0xc C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextAreaWithWildcard.o) + .text._ZN8touchgfx8TextArea8setAlphaEh + 0x0000000000000000 0x6 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextAreaWithWildcard.o) + .text._ZN8touchgfx8TextArea12setBaselineYEs + 0x0000000000000000 0x38 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextAreaWithWildcard.o) + .text._ZN8touchgfx8TextArea13setXBaselineYEss + 0x0000000000000000 0x1a C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextAreaWithWildcard.o) + .text._ZNK8touchgfx8TextArea12getWildcard1Ev + 0x0000000000000000 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextAreaWithWildcard.o) + .text._ZNK8touchgfx8TextArea12getWildcard2Ev + 0x0000000000000000 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextAreaWithWildcard.o) + .text._ZNK8touchgfx24TextAreaWithWildcardBase21calculateBoundingAreaEv + 0x0000000000000000 0xe C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextAreaWithWildcard.o) + .text._ZN8touchgfx24TextAreaWithWildcardBaseD2Ev + 0x0000000000000000 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextAreaWithWildcard.o) + .text._ZN8touchgfx24TextAreaWithWildcardBaseD0Ev + 0x0000000000000000 0xe C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextAreaWithWildcard.o) + .text._ZNK8touchgfx24TextAreaWithWildcardBase17invalidateContentEv + 0x0000000000000000 0xe C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextAreaWithWildcard.o) + .rodata._ZTVN8touchgfx24TextAreaWithWildcardBaseE + 0x0000000000000000 0x90 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextAreaWithWildcard.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Image.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Image.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Image.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Image.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Image.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Image.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Image.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Image.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Image.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Image.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Image.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Image.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Image.o) + .group 0x0000000000000000 0x10 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Image.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Image.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Image.o) + .text 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Image.o) + .data 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Image.o) + .bss 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Image.o) + .text._ZN8touchgfx8Drawable13getFirstChildEv + 0x0000000000000000 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Image.o) + .text._ZN8touchgfx8Drawable4setXEs + 0x0000000000000000 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Image.o) + .text._ZN8touchgfx8Drawable4setYEs + 0x0000000000000000 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Image.o) + .text._ZN8touchgfx8Drawable8setWidthEs + 0x0000000000000000 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Image.o) + .text._ZN8touchgfx8Drawable9setHeightEs + 0x0000000000000000 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Image.o) + .text._ZN8touchgfx8Drawable20childGeometryChangedEv + 0x0000000000000000 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Image.o) + .text._ZN8touchgfx8Drawable16handleClickEventERKNS_10ClickEventE + 0x0000000000000000 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Image.o) + .text._ZN8touchgfx8Drawable18handleGestureEventERKNS_12GestureEventE + 0x0000000000000000 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Image.o) + .text._ZN8touchgfx8Drawable15handleDragEventERKNS_9DragEventE + 0x0000000000000000 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Image.o) + .text._ZN8touchgfx8Drawable15handleTickEventEv + 0x0000000000000000 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Image.o) + .text._ZN8touchgfx8Drawable6moveToEss + 0x0000000000000000 0x18 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Image.o) + .text._ZN8touchgfx8Drawable14setupDrawChainERKNS_4RectEPPS0_ + 0x0000000000000000 0x14 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Image.o) + .text._ZN8touchgfx6Widget12getLastChildEssPPNS_8DrawableE + 0x0000000000000000 0x10 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Image.o) + .text._ZN8touchgfx4RectaNERKS0_ + 0x0000000000000000 0x86 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Image.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD.o) + .group 0x0000000000000000 0xc C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD.o) + .text 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD.o) + .data 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD.o) + .bss 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD.o) + .text._ZN8touchgfx3LCD28getTextureMapperDrawScanLineERKNS_14TextureSurfaceEth + 0x0000000000000000 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD.o) + .text._ZN8touchgfx3LCD21drawStringRTLInternalERsPKNS_4FontEhRNS_12TextProviderEitPKNS0_24DrawStringInternalStructE + 0x0000000000000000 0xda C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD.o) + .text._ZN8touchgfx3LCD17drawStringRTLLineERsPKNS_4FontEhRNS_12TextProviderEibPKNS0_24DrawStringInternalStructE + 0x0000000000000000 0x6dc C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD.o) + .text._ZN8touchgfx3LCD13drawStringRTLERKNS_4RectES3_RKNS0_13StringVisualsEPKtSt9__va_list + 0x0000000000000000 0x2ae C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD.o) + .rodata._ZTVN8touchgfx3LCDE + 0x0000000000000000 0x58 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD.o) + .text 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TouchCalibration.o) + .data 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TouchCalibration.o) + .bss 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TouchCalibration.o) + .text._ZN8touchgfx16TouchCalibration20setCalibrationMatrixEPKNS_5PointES3_ + 0x0000000000000000 0x158 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TouchCalibration.o) + .text 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(DisplayTransformation.o) + .data 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(DisplayTransformation.o) + .bss 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(DisplayTransformation.o) + .text._ZN8touchgfx21DisplayTransformation29transformDisplayToFrameBufferERfS1_RKNS_4RectE + 0x0000000000000000 0x38 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(DisplayTransformation.o) + .text._ZN8touchgfx21DisplayTransformation29transformDisplayToFrameBufferERfS1_ + 0x0000000000000000 0x2c C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(DisplayTransformation.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Application.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Application.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Application.o) + .group 0x0000000000000000 0x10 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Application.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Application.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Application.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Application.o) + .group 0x0000000000000000 0xc C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Application.o) + .group 0x0000000000000000 0xc C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Application.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Application.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Application.o) + .text 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Application.o) + .data 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Application.o) + .bss 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Application.o) + .text._ZN8touchgfx11Application19changeToStartScreenEv + 0x0000000000000000 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Application.o) + .text._ZN8touchgfx11Application15appSwitchScreenEh + 0x0000000000000000 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Application.o) + .text._ZN8touchgfx11Application13requestRedrawERNS_4RectE + 0x0000000000000000 0xc C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Application.o) + .text._ZNK8touchgfx4Rect7isEmptyEv + 0x0000000000000000 0x1a C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Application.o) + .text._ZN8touchgfx11Application41copyInvalidatedAreasFromTFTToClientBufferEv + 0x0000000000000000 0x50 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Application.o) + .text._ZN8touchgfx11Application12TimerWidgets6removeEPKNS_8DrawableE + 0x0000000000000000 0x32 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Application.o) + .text._ZNK8touchgfx11Application12TimerWidgets10getCounterEPKNS_8DrawableE + 0x0000000000000000 0x2a C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Application.o) + .text._ZNK8touchgfx11Application12TimerWidgets29getNumberOfActiveTimerWidgetsEv + 0x0000000000000000 0x20 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Application.o) + .text._ZN8touchgfx11Application12TimerWidgets3addEPNS_8DrawableE + 0x0000000000000000 0x62 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Application.o) + .text 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TypedText.o) + .data 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TypedText.o) + .bss 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TypedText.o) + .text 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Font.o) + .data 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Font.o) + .bss 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Font.o) + .text._ZNK8touchgfx4Font17getStringWidthRTLEhPKtSt9__va_list + 0x0000000000000000 0x5e C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Font.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Drawable.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Drawable.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Drawable.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Drawable.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Drawable.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Drawable.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Drawable.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Drawable.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Drawable.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Drawable.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Drawable.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Drawable.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Drawable.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Drawable.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Drawable.o) + .text 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Drawable.o) + .data 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Drawable.o) + .bss 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Drawable.o) + .text._ZNK8touchgfx8Drawable17invalidateContentEv + 0x0000000000000000 0xe C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Drawable.o) + .text._ZN8touchgfx8Drawable13getFirstChildEv + 0x0000000000000000 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Drawable.o) + .text._ZN8touchgfx8Drawable4setXEs + 0x0000000000000000 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Drawable.o) + .text._ZN8touchgfx8Drawable4setYEs + 0x0000000000000000 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Drawable.o) + .text._ZN8touchgfx8Drawable8setWidthEs + 0x0000000000000000 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Drawable.o) + .text._ZN8touchgfx8Drawable9setHeightEs + 0x0000000000000000 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Drawable.o) + .text._ZN8touchgfx8Drawable20childGeometryChangedEv + 0x0000000000000000 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Drawable.o) + .text._ZN8touchgfx8Drawable16handleClickEventERKNS_10ClickEventE + 0x0000000000000000 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Drawable.o) + .text._ZN8touchgfx8Drawable18handleGestureEventERKNS_12GestureEventE + 0x0000000000000000 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Drawable.o) + .text._ZN8touchgfx8Drawable15handleDragEventERKNS_9DragEventE + 0x0000000000000000 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Drawable.o) + .text._ZN8touchgfx8Drawable15handleTickEventEv + 0x0000000000000000 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Drawable.o) + .text._ZN8touchgfx8Drawable6moveToEss + 0x0000000000000000 0x18 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Drawable.o) + .text._ZN8touchgfx8Drawable14setupDrawChainERKNS_4RectEPPS0_ + 0x0000000000000000 0x14 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Drawable.o) + .text._ZN8touchgfx4RectaNERKS0_ + 0x0000000000000000 0x86 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Drawable.o) + .text._ZN8touchgfx8Drawable5setXYEss + 0x0000000000000000 0x1a C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Drawable.o) + .text._ZN8touchgfx8Drawable6expandEi + 0x0000000000000000 0x54 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Drawable.o) + .text._ZN8touchgfx8Drawable19drawToDynamicBitmapEt + 0x0000000000000000 0x20 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Drawable.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(ConstFont.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(ConstFont.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(ConstFont.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(ConstFont.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(ConstFont.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(ConstFont.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(ConstFont.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(ConstFont.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(ConstFont.o) + .text 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(ConstFont.o) + .data 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(ConstFont.o) + .bss 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(ConstFont.o) + .text._ZNK8touchgfx4Font8getGlyphEt + 0x0000000000000000 0x1e C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(ConstFont.o) + .text._ZNK8touchgfx4Font15getFallbackCharEv + 0x0000000000000000 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(ConstFont.o) + .text._ZNK8touchgfx4Font15getEllipsisCharEv + 0x0000000000000000 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(ConstFont.o) + .text._ZNK8touchgfx4Font11getBaselineEv + 0x0000000000000000 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(ConstFont.o) + .text._ZNK8touchgfx4Font9getHeightEv + 0x0000000000000000 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(ConstFont.o) + .text._ZNK8touchgfx4Font15getBitsPerPixelEv + 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(ConstFont.o) + .text._ZNK8touchgfx4Font15getByteAlignRowEv + 0x0000000000000000 0x6 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(ConstFont.o) + .text._ZNK8touchgfx4Font12getGSUBTableEv + 0x0000000000000000 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(ConstFont.o) + .text._ZNK8touchgfx4Font23getContextualFormsTableEv + 0x0000000000000000 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(ConstFont.o) + .text 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Utils.o) + .data 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Utils.o) + .bss 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Utils.o) + .text._ZN8touchgfx6memsetEPvhm + 0x0000000000000000 0xe C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Utils.o) + .text._ZN8touchgfx34lookupNearestNeighborRenderVariantERKNS_6BitmapE + 0x0000000000000000 0x20 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Utils.o) + .text._ZN8touchgfx27lookupBilinearRenderVariantERKNS_6BitmapE + 0x0000000000000000 0x24 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Utils.o) + .text._ZN8touchgfx3clzEl + 0x0000000000000000 0x10 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Utils.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Screen.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Screen.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Screen.o) + .group 0x0000000000000000 0x10 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Screen.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Screen.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Screen.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Screen.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Screen.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Screen.o) + .group 0x0000000000000000 0x10 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Screen.o) + .group 0x0000000000000000 0x10 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Screen.o) + .group 0x0000000000000000 0x10 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Screen.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Screen.o) + .group 0x0000000000000000 0xc C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Screen.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Screen.o) + .group 0x0000000000000000 0xc C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Screen.o) + .group 0x0000000000000000 0xc C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Screen.o) + .group 0x0000000000000000 0xc C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Screen.o) + .group 0x0000000000000000 0xc C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Screen.o) + .group 0x0000000000000000 0xc C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Screen.o) + .text 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Screen.o) + .data 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Screen.o) + .bss 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Screen.o) + .text._ZN8touchgfx6Screen11setupScreenEv + 0x0000000000000000 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Screen.o) + .text._ZN8touchgfx6Screen15afterTransitionEv + 0x0000000000000000 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Screen.o) + .text._ZN8touchgfx6Screen14tearDownScreenEv + 0x0000000000000000 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Screen.o) + .text._ZN8touchgfx6Screen15handleTickEventEv + 0x0000000000000000 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Screen.o) + .text._ZN8touchgfx6Screen14handleKeyEventEh + 0x0000000000000000 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Screen.o) + .text._ZNK8touchgfx4Rect9intersectERKS0_ + 0x0000000000000000 0x44 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Screen.o) + .text._ZN8touchgfx4RectaNERKS0_ + 0x0000000000000000 0x74 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Screen.o) + .text._ZN8touchgfx6Screen14useSMOCDrawingEb + 0x0000000000000000 0x6 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Screen.o) + .text 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextProvider.o) + .data 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextProvider.o) + .bss 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextProvider.o) + .text._ZN8touchgfx12TextProvider20unicodeConverterInitEv + 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextProvider.o) + .text._ZN8touchgfx12TextProvider16unicodeConverterEh + 0x0000000000000000 0x8b0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextProvider.o) + .text 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextureMapTypes.o) + .data 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextureMapTypes.o) + .bss 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextureMapTypes.o) + .text 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Unicode.o) + .data 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Unicode.o) + .bss 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Unicode.o) + .text._ZN8touchgfx7Unicode6strlenEPKc + 0x0000000000000000 0x18 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Unicode.o) + .text._ZN8touchgfx7Unicode7strncpyEPtPKtt + 0x0000000000000000 0x24 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Unicode.o) + .text._ZN8touchgfx7Unicode4utoaEmPtti + 0x0000000000000000 0x18 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Unicode.o) + .text._ZN8touchgfx7Unicode4atoiEPKt + 0x0000000000000000 0x1e C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Unicode.o) + .text._ZN8touchgfx7Unicode9vsnprintfEPttPKtSt9__va_list + 0x0000000000000000 0x10 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Unicode.o) + .text._ZN8touchgfx7Unicode8snprintfEPttPKtz + 0x0000000000000000 0x1a C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Unicode.o) + .text._ZN8touchgfx7Unicode14snprintfFloatsEPttPKtPKcPKf + 0x0000000000000000 0x3b8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Unicode.o) + .text._ZN8touchgfx7Unicode14snprintfFloatsEPttPKtPKf + 0x0000000000000000 0x10 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Unicode.o) + .text._ZN8touchgfx7Unicode14snprintfFloatsEPttPKcPKf + 0x0000000000000000 0x12 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Unicode.o) + .text._ZN8touchgfx7Unicode7strncmpEPKtS2_t + 0x0000000000000000 0x44 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Unicode.o) + .text._ZN8touchgfx7Unicode11skip_spacesEPKt + 0x0000000000000000 0xe C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Unicode.o) + .text._ZN8touchgfx7Unicode15skip_whitespaceEPKt + 0x0000000000000000 0x20 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Unicode.o) + .text._ZN8touchgfx7Unicode25strncmp_ignore_whitespaceEPKtS2_t + 0x0000000000000000 0x46 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Unicode.o) + .text._ZN8touchgfx7Unicode8fromUTF8EPKhPtt + 0x0000000000000000 0x7e C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Unicode.o) + .text._ZN8touchgfx7Unicode6toUTF8EPKtPht + 0x0000000000000000 0x82 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Unicode.o) + .text 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(FontManager.o) + .data 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(FontManager.o) + .bss 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(FontManager.o) + .text._ZN8touchgfx11FontManager7getFontEt + 0x0000000000000000 0x14 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(FontManager.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + .group 0x0000000000000000 0xc C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + .group 0x0000000000000000 0xc C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + .group 0x0000000000000000 0xc C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + .group 0x0000000000000000 0xc C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + .group 0x0000000000000000 0xc C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + .text 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + .data 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + .bss 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + .text._ZN8touchgfx4RectaNERKS0_ + 0x0000000000000000 0x86 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + .text._ZNK8touchgfx4Rect7isEmptyEv + 0x0000000000000000 0x1a C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + .text._ZNK8touchgfx4Rect8includesERKS0_ + 0x0000000000000000 0x4c C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + .text._ZN8touchgfx4Rect11expandToFitERKS0_ + 0x0000000000000000 0x8a C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + .text._ZN8touchgfx3HAL3lcdEv + 0x0000000000000000 0x18 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + .text._ZN8touchgfx6Bitmap11removeCacheEv + 0x0000000000000000 0x4c C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + .text._ZN8touchgfx6Bitmap31dynamicBitmapGetCustomSubformatEt + 0x0000000000000000 0x30 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + .text._ZN8touchgfx6Bitmap31dynamicBitmapGetNumberOfBitmapsEv + 0x0000000000000000 0x30 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + .text._ZN8touchgfx6Bitmap25dynamicBitmapSetSolidRectEtRKNS_4RectE + 0x0000000000000000 0x38 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + .text._ZN8touchgfx6Bitmap25dynamicBitmapAddSolidRectEtRKNS_4RectE + 0x0000000000000000 0x128 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + .text._ZN8touchgfx6Bitmap17copyBitmapToCacheEtPh + 0x0000000000000000 0x1d0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + .text._ZN8touchgfx6Bitmap15decompressL8_L4EPht + 0x0000000000000000 0xac C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + .text._ZN8touchgfx6Bitmap16decompressL8_RLEEPht + 0x0000000000000000 0xd0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + .text._ZN8touchgfx15BlockDataReader4readEv + 0x0000000000000000 0x34 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + .text._ZN8touchgfx15BlockDataReader4nextEv + 0x0000000000000000 0x14 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + .text._ZN8touchgfx6Bitmap17decompressL8_LZW9EPhtPt + 0x0000000000000000 0x208 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + .text._ZN8touchgfx6Bitmap15getSizeOfBitmapEt + 0x0000000000000000 0x148 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + .text._ZN8touchgfx6Bitmap19getSizeOfBitmapDataEt + 0x0000000000000000 0xac C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + .text._ZN8touchgfx6Bitmap24getSizeOfBitmapExtraDataEt + 0x0000000000000000 0xb8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + .text._ZN8touchgfx6Bitmap21isCustomDynamicBitmapEt + 0x0000000000000000 0x34 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + .text._ZN8touchgfx6Bitmap17cacheRemoveBitmapEt + 0x0000000000000000 0xbc C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + .text._ZN8touchgfx6Bitmap19dynamicBitmapDeleteEt + 0x0000000000000000 0x3c C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + .text._ZN8touchgfx6Bitmap15cacheGetAddressEt + 0x0000000000000000 0x1c C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + .text._ZN8touchgfx6Bitmap13cacheIsCachedEt + 0x0000000000000000 0x24 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + .text._ZN8touchgfx6Bitmap18cacheReplaceBitmapEtt + 0x0000000000000000 0xa0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + .text._ZN8touchgfx6Bitmap12compactCacheEv + 0x0000000000000000 0x124 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + .text._ZN8touchgfx6Bitmap13cacheInternalEtmb + 0x0000000000000000 0xac C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + .text._ZN8touchgfx6Bitmap10decompressEtPt + 0x0000000000000000 0x134 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + .text._ZN8touchgfx6Bitmap5cacheEt + 0x0000000000000000 0x3c C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + .text._ZN8touchgfx6Bitmap8cacheAllEv + 0x0000000000000000 0x2c C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + .text._ZN8touchgfx6Bitmap21dynamicBitmapFillRectEtRKNS_4RectENS_9colortypeEh + 0x0000000000000000 0x66 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + .text._ZN8touchgfx6Bitmap17dynamicBitmapFillEtNS_9colortypeEh + 0x0000000000000000 0x3c C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + .text._ZN8touchgfx6Bitmap24firstFreeDynamicBitmapIdEv + 0x0000000000000000 0x2c C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + .text._ZN8touchgfx6Bitmap23dynamicBitmapCreateCopyEt + 0x0000000000000000 0x17c C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + .text._ZN8touchgfx6Bitmap21dynamicBitmapCreateL8EttNS0_10ClutFormatEt + 0x0000000000000000 0xbc C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + .text._ZN8touchgfx6Bitmap19dynamicBitmapCreateEttNS0_12BitmapFormatENS0_10ClutFormatE + 0x0000000000000000 0xb8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + .text._ZN8touchgfx6Bitmap25dynamicBitmapCreateCustomEtthm + 0x0000000000000000 0x98 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + .text._ZN8touchgfx6Bitmap27dynamicBitmapCreateExternalEttPKvNS0_12BitmapFormatEh + 0x0000000000000000 0x78 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .group 0x0000000000000000 0xc C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .group 0x0000000000000000 0xc C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .group 0x0000000000000000 0x10 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .group 0x0000000000000000 0x10 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .group 0x0000000000000000 0x10 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .group 0x0000000000000000 0x10 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .group 0x0000000000000000 0x10 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .group 0x0000000000000000 0x10 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .group 0x0000000000000000 0x10 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .group 0x0000000000000000 0x10 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .group 0x0000000000000000 0x10 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .group 0x0000000000000000 0x10 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .group 0x0000000000000000 0x10 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .group 0x0000000000000000 0x10 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .group 0x0000000000000000 0x10 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .group 0x0000000000000000 0x10 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .group 0x0000000000000000 0x10 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .group 0x0000000000000000 0x10 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .group 0x0000000000000000 0x10 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .group 0x0000000000000000 0x10 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .group 0x0000000000000000 0x10 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .group 0x0000000000000000 0x10 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .group 0x0000000000000000 0x10 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .group 0x0000000000000000 0x10 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .group 0x0000000000000000 0x10 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .group 0x0000000000000000 0x10 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .group 0x0000000000000000 0x10 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .group 0x0000000000000000 0x10 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .group 0x0000000000000000 0x10 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .group 0x0000000000000000 0x10 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .group 0x0000000000000000 0x10 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .group 0x0000000000000000 0x10 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .group 0x0000000000000000 0x10 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .group 0x0000000000000000 0x10 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .text 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .data 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .bss 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .text._ZN8touchgfx3LCD27supportDynamicBitmapDrawingENS_6Bitmap12BitmapFormatE + 0x0000000000000000 0x12 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .text._ZN8touchgfx3LCD15setDefaultColorENS_9colortypeE + 0x0000000000000000 0xc C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .text._ZN8touchgfx4RectaNERKS0_ + 0x0000000000000000 0x86 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .text._ZNK8touchgfx4Rect7isEmptyEv + 0x0000000000000000 0x1a C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .text 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(stm32_crc_lock.o) + .data 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(stm32_crc_lock.o) + .bss 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(stm32_crc_lock.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Gestures.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Gestures.o) + .group 0x0000000000000000 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Gestures.o) + .group 0x0000000000000000 0x10 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Gestures.o) + .group 0x0000000000000000 0x10 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Gestures.o) + .group 0x0000000000000000 0x10 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Gestures.o) + .group 0x0000000000000000 0xc C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Gestures.o) + .group 0x0000000000000000 0xc C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Gestures.o) + .group 0x0000000000000000 0xc C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Gestures.o) + .text 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Gestures.o) + .data 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Gestures.o) + .bss 0x0000000000000000 0x0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Gestures.o) + .text._ZNK8touchgfx9DragEvent12getEventTypeEv + 0x0000000000000000 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Gestures.o) + .text._ZNK8touchgfx12GestureEvent12getEventTypeEv + 0x0000000000000000 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Gestures.o) + .text._ZNK8touchgfx10ClickEvent12getEventTypeEv + 0x0000000000000000 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Gestures.o) + .text._ZN8touchgfx10ClickEventD2Ev + 0x0000000000000000 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Gestures.o) + .text._ZN8touchgfx12GestureEventD2Ev + 0x0000000000000000 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Gestures.o) + .text._ZN8touchgfx9DragEventD2Ev + 0x0000000000000000 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Gestures.o) + .text._ZN8touchgfx9DragEventD0Ev + 0x0000000000000000 0xe C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Gestures.o) + .text._ZN8touchgfx12GestureEventD0Ev + 0x0000000000000000 0xe C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Gestures.o) + .text._ZN8touchgfx10ClickEventD0Ev + 0x0000000000000000 0xe C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Gestures.o) + .rodata._ZTVN8touchgfx9DragEventE + 0x0000000000000000 0x14 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Gestures.o) + .rodata._ZTVN8touchgfx12GestureEventE + 0x0000000000000000 0x14 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Gestures.o) + .rodata._ZTVN8touchgfx10ClickEventE + 0x0000000000000000 0x14 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Gestures.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a(atexit_arm.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a(atexit_arm.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a(atexit_arm.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a(del_ops.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a(del_ops.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a(del_ops.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a(guard.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a(guard.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a(guard.o) + .text.__cxa_guard_abort + 0x0000000000000000 0x6 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a(guard.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a(pure.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a(pure.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a(pure.o) + .text.__cxa_deleted_virtual + 0x0000000000000000 0x6 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a(pure.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a(del_op.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a(del_op.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a(del_op.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a(eh_terminate.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a(eh_terminate.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a(eh_terminate.o) + .text._ZSt13set_terminatePFvvE + 0x0000000000000000 0x28 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a(eh_terminate.o) + .text._ZN10__cxxabiv112__unexpectedEPFvvE + 0x0000000000000000 0x8 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a(eh_terminate.o) + .text._ZSt14set_unexpectedPFvvE + 0x0000000000000000 0x28 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a(eh_terminate.o) + .text._ZSt14get_unexpectedv + 0x0000000000000000 0x10 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a(eh_terminate.o) + .text._ZSt10unexpectedv + 0x0000000000000000 0xa C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a(eh_terminate.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a(eh_unex_handler.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a(eh_unex_handler.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a(eh_unex_handler.o) + .data._ZN10__cxxabiv120__unexpected_handlerE + 0x0000000000000000 0x4 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a(eh_unex_handler.o) + .ARM.attributes + 0x0000000000000000 0x34 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a(eh_unex_handler.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a(eh_term_handler.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a(eh_term_handler.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a(eh_term_handler.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-abort.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-abort.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-abort.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-assert.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-assert.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-assert.o) + .text.__assert + 0x0000000000000000 0xa C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-assert.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-atexit.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-atexit.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-atexit.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-atoi.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-atoi.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-atoi.o) + .text.atoi 0x0000000000000000 0x8 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-atoi.o) + .text._atoi_r 0x0000000000000000 0x8 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-atoi.o) + .debug_frame 0x0000000000000000 0x30 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-atoi.o) + .ARM.attributes + 0x0000000000000000 0x34 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-atoi.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-exit.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-exit.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-exit.o) + .text.exit 0x0000000000000000 0x24 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-exit.o) + .debug_frame 0x0000000000000000 0x28 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-exit.o) + .ARM.attributes + 0x0000000000000000 0x34 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-exit.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-malloc.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-malloc.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-malloc.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-mallocr.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-mallocr.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-mallocr.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-mlock.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-mlock.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-mlock.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-rand.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-rand.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-rand.o) + .text.srand 0x0000000000000000 0x5c C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-rand.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-strtol.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-strtol.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-strtol.o) + .text._strtol_l.constprop.0 + 0x0000000000000000 0x104 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-strtol.o) + .text._strtol_r + 0x0000000000000000 0x4 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-strtol.o) + .text.strtol_l + 0x0000000000000000 0x14 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-strtol.o) + .text.strtol 0x0000000000000000 0x14 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-strtol.o) + .debug_frame 0x0000000000000000 0x64 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-strtol.o) + .ARM.attributes + 0x0000000000000000 0x34 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-strtol.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-cxa_atexit.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-cxa_atexit.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-cxa_atexit.o) + .rodata.__cxa_atexit_dummy + 0x0000000000000000 0x4 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-cxa_atexit.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-ctype_.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-ctype_.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-ctype_.o) + .rodata._ctype_ + 0x0000000000000000 0x101 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-ctype_.o) + .ARM.attributes + 0x0000000000000000 0x34 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-ctype_.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-findfp.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-findfp.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-findfp.o) + .text.__fp_lock + 0x0000000000000000 0x18 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-findfp.o) + .text.__fp_unlock + 0x0000000000000000 0x18 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-findfp.o) + .text.__sfp 0x0000000000000000 0xa8 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-findfp.o) + .text.__fp_lock_all + 0x0000000000000000 0x1c C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-findfp.o) + .text.__fp_unlock_all + 0x0000000000000000 0x1c C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-findfp.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fprintf.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fprintf.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fprintf.o) + .text._fprintf_r + 0x0000000000000000 0x1a C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fprintf.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fread.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fread.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fread.o) + .text._fread_r + 0x0000000000000000 0xb8 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fread.o) + .text.fread 0x0000000000000000 0x1c C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fread.o) + .debug_frame 0x0000000000000000 0x54 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fread.o) + .ARM.attributes + 0x0000000000000000 0x34 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fread.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fwalk.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fwalk.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fwalk.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fwrite.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fwrite.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fwrite.o) + .text._fwrite_r + 0x0000000000000000 0x96 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fwrite.o) + .text.fwrite 0x0000000000000000 0x1c C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fwrite.o) + .debug_frame 0x0000000000000000 0x4c C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fwrite.o) + .ARM.attributes + 0x0000000000000000 0x34 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fwrite.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-printf.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-printf.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-printf.o) + .text._printf_r + 0x0000000000000000 0x1c C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-printf.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-refill.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-refill.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-refill.o) + .text.lflush 0x0000000000000000 0x1c C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-refill.o) + .text.__srefill_r + 0x0000000000000000 0xf0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-refill.o) + .debug_frame 0x0000000000000000 0x40 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-refill.o) + .ARM.attributes + 0x0000000000000000 0x34 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-refill.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-sprintf.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-sprintf.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-sprintf.o) + .text._sprintf_r + 0x0000000000000000 0x38 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-sprintf.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-stdio.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-stdio.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-stdio.o) + .text.__seofread + 0x0000000000000000 0x4 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-stdio.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-wbuf.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-wbuf.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-wbuf.o) + .text.__swbuf 0x0000000000000000 0x10 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-wbuf.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-wsetup.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-wsetup.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-wsetup.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-memcmp.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-memcmp.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-memcmp.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-memmove.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-memmove.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-memmove.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-memset.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-memset.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-memset.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-strncmp.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-strncmp.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-strncmp.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-signal.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-signal.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-signal.o) + .text._init_signal_r + 0x0000000000000000 0x28 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-signal.o) + .text._signal_r + 0x0000000000000000 0x30 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-signal.o) + .text.__sigtramp_r + 0x0000000000000000 0x48 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-signal.o) + .text.signal 0x0000000000000000 0x10 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-signal.o) + .text._init_signal + 0x0000000000000000 0xc C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-signal.o) + .text.__sigtramp + 0x0000000000000000 0x10 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-signal.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-closer.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-closer.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-closer.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-impure.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-impure.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-impure.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-lseekr.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-lseekr.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-lseekr.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-readr.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-readr.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-readr.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-signalr.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-signalr.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-signalr.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-sbrkr.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-sbrkr.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-sbrkr.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-writer.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-writer.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-writer.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-errno.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-errno.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-errno.o) + .text.__errno 0x0000000000000000 0xc C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-errno.o) + .debug_frame 0x0000000000000000 0x20 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-errno.o) + .ARM.attributes + 0x0000000000000000 0x34 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-errno.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-init.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-init.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-init.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-lock.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-lock.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-lock.o) + .text.__retarget_lock_init + 0x0000000000000000 0x2 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-lock.o) + .text.__retarget_lock_close + 0x0000000000000000 0x2 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-lock.o) + .text.__retarget_lock_close_recursive + 0x0000000000000000 0x2 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-lock.o) + .text.__retarget_lock_acquire + 0x0000000000000000 0x2 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-lock.o) + .text.__retarget_lock_try_acquire + 0x0000000000000000 0x4 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-lock.o) + .text.__retarget_lock_try_acquire_recursive + 0x0000000000000000 0x4 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-lock.o) + .text.__retarget_lock_release + 0x0000000000000000 0x2 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-lock.o) + .bss.__lock___arc4random_mutex + 0x0000000000000000 0x1 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-lock.o) + .bss.__lock___at_quick_exit_mutex + 0x0000000000000000 0x1 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-lock.o) + .bss.__lock___dd_hash_mutex + 0x0000000000000000 0x1 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-lock.o) + .bss.__lock___env_recursive_mutex + 0x0000000000000000 0x1 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-lock.o) + .bss.__lock___tz_mutex + 0x0000000000000000 0x1 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-lock.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-memcpy-stub.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-memcpy-stub.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-memcpy-stub.o) + .text 0x0000000000000000 0x10 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-strlen.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-strlen.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-strlen.o) + .ARM.attributes + 0x0000000000000000 0x17 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-strlen.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-__atexit.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-__atexit.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-__atexit.o) + .data.__atexit_dummy + 0x0000000000000000 0x4 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-__atexit.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-__call_atexit.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-__call_atexit.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-__call_atexit.o) + .text.__call_exitprocs + 0x0000000000000000 0xb8 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-__call_atexit.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-freer.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-freer.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-freer.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-on_exit_args.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-on_exit_args.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-on_exit_args.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-nano-svfprintf.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-nano-svfprintf.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-nano-svfprintf.o) + .text.__ssprint_r + 0x0000000000000000 0xfa C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-nano-svfprintf.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-nano-vfprintf.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-nano-vfprintf.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-nano-vfprintf.o) + .text.__sprint_r + 0x0000000000000000 0x1a C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-nano-vfprintf.o) + .text.vfprintf + 0x0000000000000000 0x14 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-nano-vfprintf.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-nano-vfprintf_i.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-nano-vfprintf_i.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-nano-vfprintf_i.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fflush.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fflush.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fflush.o) + .text.fflush 0x0000000000000000 0x28 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fflush.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fvwrite.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fvwrite.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fvwrite.o) + .text.__sfvwrite_r + 0x0000000000000000 0x294 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fvwrite.o) + .debug_frame 0x0000000000000000 0x3c C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fvwrite.o) + .ARM.attributes + 0x0000000000000000 0x34 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fvwrite.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-makebuf.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-makebuf.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-makebuf.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fstatr.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fstatr.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fstatr.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-isattyr.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-isattyr.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-isattyr.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-memchr.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-memchr.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-reallocr.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-reallocr.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-reallocr.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-msizer.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-msizer.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-msizer.o) + .text 0x0000000000000000 0x254 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_arm_muldf3.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_arm_muldf3.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_arm_muldf3.o) + .debug_frame 0x0000000000000000 0x30 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_arm_muldf3.o) + .ARM.attributes + 0x0000000000000000 0x1e C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_arm_muldf3.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_arm_addsubdf3.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_arm_addsubdf3.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_arm_muldivdf3.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_arm_muldivdf3.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_arm_truncdfsf2.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_arm_truncdfsf2.o) + .text 0x0000000000000000 0xa0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_aeabi_ldivmod.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_aeabi_ldivmod.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_aeabi_ldivmod.o) + .debug_frame 0x0000000000000000 0x44 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_aeabi_ldivmod.o) + .ARM.attributes + 0x0000000000000000 0x1e C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_aeabi_ldivmod.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_aeabi_uldivmod.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_aeabi_uldivmod.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_udivmoddi4.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_udivmoddi4.o) + .ARM.extab 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_udivmoddi4.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_dvmd_tls.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_dvmd_tls.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard/crtend.o + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard/crtend.o + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard/crtend.o + .rodata 0x0000000000000000 0x24 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard/crtend.o + .eh_frame 0x0000000000000000 0x4 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard/crtend.o + .comment 0x0000000000000000 0x44 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard/crtend.o + .ARM.attributes + 0x0000000000000000 0x34 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard/crtend.o + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard/crtn.o + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard/crtn.o + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard/crtn.o + +Memory Configuration + +Name Origin Length Attributes +RAM 0x0000000020000000 0x0000000000050000 xrw +FLASH 0x0000000008000000 0x0000000000100000 xr +QUADSPI 0x0000000090000000 0x0000000001000000 r +SDRAM 0x00000000c0000000 0x0000000000800000 xrw +*default* 0x0000000000000000 0xffffffffffffffff + +Linker script and memory map + +LOAD C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard/crti.o +LOAD C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard/crtbegin.o +LOAD C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/crt0.o +LOAD ./Application/User/Core/freertos.o +LOAD ./Application/User/Core/main.o +LOAD ./Application/User/Core/stm32f7xx_hal_msp.o +LOAD ./Application/User/Core/stm32f7xx_hal_timebase_tim.o +LOAD ./Application/User/Core/stm32f7xx_it.o +LOAD ./Application/User/Core/syscalls.o +LOAD ./Application/User/Core/sysmem.o +LOAD ./Application/User/LIBJPEG/App/libjpeg.o +LOAD ./Application/User/LWIP/App/lwip.o +LOAD ./Application/User/LWIP/Target/ethernetif.o +LOAD ./Application/User/Startup/startup_stm32f746nghx.o +LOAD ./Application/User/TouchGFX/App/app_touchgfx.o +LOAD ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o +LOAD ./Application/User/TouchGFX/target/STM32TouchController.o +LOAD ./Application/User/TouchGFX/target/TouchGFXGPIO.o +LOAD ./Application/User/TouchGFX/target/TouchGFXHAL.o +LOAD ./Application/User/TouchGFX/target/generated/OSWrappers.o +LOAD ./Application/User/TouchGFX/target/generated/STM32DMA.o +LOAD ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o +LOAD ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o +LOAD ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o +LOAD ./Application/User/generated/ApplicationFontProvider.o +LOAD ./Application/User/generated/BitmapDatabase.o +LOAD ./Application/User/generated/CachedFont.o +LOAD ./Application/User/generated/FontCache.o +LOAD ./Application/User/generated/Font_verdana_10_4bpp_0.o +LOAD ./Application/User/generated/Font_verdana_20_4bpp_0.o +LOAD ./Application/User/generated/Font_verdana_40_4bpp_0.o +LOAD ./Application/User/generated/FrontendApplicationBase.o +LOAD ./Application/User/generated/GeneratedFont.o +LOAD ./Application/User/generated/Kerning_verdana_10_4bpp.o +LOAD ./Application/User/generated/Kerning_verdana_20_4bpp.o +LOAD ./Application/User/generated/Kerning_verdana_40_4bpp.o +LOAD ./Application/User/generated/LanguageGb.o +LOAD ./Application/User/generated/MainScreenViewBase.o +LOAD ./Application/User/generated/SVGDatabase.o +LOAD ./Application/User/generated/SliderContainerBase.o +LOAD ./Application/User/generated/Table_verdana_10_4bpp.o +LOAD ./Application/User/generated/Table_verdana_20_4bpp.o +LOAD ./Application/User/generated/Table_verdana_40_4bpp.o +LOAD ./Application/User/generated/Texts.o +LOAD ./Application/User/generated/TypedTextDatabase.o +LOAD ./Application/User/generated/UnmappedDataFont.o +LOAD ./Application/User/generated/image_Blue_Slider_Vertical_Small_Indicators_Slider3_Vertical_Round_nob.o +LOAD ./Application/User/generated/image_Blue_Slider_Vertical_Small_Slider3_Vertical_Round_back.o +LOAD ./Application/User/generated/image_Blue_Slider_Vertical_Small_Slider3_Vertical_Round_fill.o +LOAD ./Application/User/gui/FrontendApplication.o +LOAD ./Application/User/gui/MainScreenPresenter.o +LOAD ./Application/User/gui/MainScreenView.o +LOAD ./Application/User/gui/Model.o +LOAD ./Application/User/gui/SliderContainer.o +LOAD ./Drivers/BSP/Components/lan8742.o +LOAD ./Drivers/BSP/stm32746g_discovery_qspi.o +LOAD ./Drivers/CMSIS/system_stm32f7xx.o +LOAD ./Drivers/Components/ft5336.o +LOAD ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o +LOAD ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o +LOAD ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o +LOAD ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o +LOAD ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o +LOAD ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o +LOAD ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o +LOAD ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o +LOAD ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o +LOAD ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o +LOAD ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o +LOAD ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o +LOAD ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o +LOAD ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o +LOAD ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o +LOAD ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o +LOAD ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc_ex.o +LOAD ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr.o +LOAD ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o +LOAD ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o +LOAD ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o +LOAD ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o +LOAD ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o +LOAD ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o +LOAD ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o +LOAD ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o +LOAD ./Middlewares/FreeRTOS/cmsis_os2.o +LOAD ./Middlewares/FreeRTOS/croutine.o +LOAD ./Middlewares/FreeRTOS/event_groups.o +LOAD ./Middlewares/FreeRTOS/heap_4.o +LOAD ./Middlewares/FreeRTOS/list.o +LOAD ./Middlewares/FreeRTOS/port.o +LOAD ./Middlewares/FreeRTOS/queue.o +LOAD ./Middlewares/FreeRTOS/stream_buffer.o +LOAD ./Middlewares/FreeRTOS/tasks.o +LOAD ./Middlewares/FreeRTOS/timers.o +LOAD ./Middlewares/LibJPEG/jaricom.o +LOAD ./Middlewares/LibJPEG/jcapimin.o +LOAD ./Middlewares/LibJPEG/jcapistd.o +LOAD ./Middlewares/LibJPEG/jcarith.o +LOAD ./Middlewares/LibJPEG/jccoefct.o +LOAD ./Middlewares/LibJPEG/jccolor.o +LOAD ./Middlewares/LibJPEG/jcdctmgr.o +LOAD ./Middlewares/LibJPEG/jchuff.o +LOAD ./Middlewares/LibJPEG/jcinit.o +LOAD ./Middlewares/LibJPEG/jcmainct.o +LOAD ./Middlewares/LibJPEG/jcmarker.o +LOAD ./Middlewares/LibJPEG/jcmaster.o +LOAD ./Middlewares/LibJPEG/jcomapi.o +LOAD ./Middlewares/LibJPEG/jcparam.o +LOAD ./Middlewares/LibJPEG/jcprepct.o +LOAD ./Middlewares/LibJPEG/jcsample.o +LOAD ./Middlewares/LibJPEG/jctrans.o +LOAD ./Middlewares/LibJPEG/jdapimin.o +LOAD ./Middlewares/LibJPEG/jdapistd.o +LOAD ./Middlewares/LibJPEG/jdarith.o +LOAD ./Middlewares/LibJPEG/jdatadst.o +LOAD ./Middlewares/LibJPEG/jdatasrc.o +LOAD ./Middlewares/LibJPEG/jdcoefct.o +LOAD ./Middlewares/LibJPEG/jdcolor.o +LOAD ./Middlewares/LibJPEG/jddctmgr.o +LOAD ./Middlewares/LibJPEG/jdhuff.o +LOAD ./Middlewares/LibJPEG/jdinput.o +LOAD ./Middlewares/LibJPEG/jdmainct.o +LOAD ./Middlewares/LibJPEG/jdmarker.o +LOAD ./Middlewares/LibJPEG/jdmaster.o +LOAD ./Middlewares/LibJPEG/jdmerge.o +LOAD ./Middlewares/LibJPEG/jdpostct.o +LOAD ./Middlewares/LibJPEG/jdsample.o +LOAD ./Middlewares/LibJPEG/jdtrans.o +LOAD ./Middlewares/LibJPEG/jerror.o +LOAD ./Middlewares/LibJPEG/jfdctflt.o +LOAD ./Middlewares/LibJPEG/jfdctfst.o +LOAD ./Middlewares/LibJPEG/jfdctint.o +LOAD ./Middlewares/LibJPEG/jidctflt.o +LOAD ./Middlewares/LibJPEG/jidctfst.o +LOAD ./Middlewares/LibJPEG/jidctint.o +LOAD ./Middlewares/LibJPEG/jmemmgr.o +LOAD ./Middlewares/LibJPEG/jmemnobs.o +LOAD ./Middlewares/LibJPEG/jquant1.o +LOAD ./Middlewares/LibJPEG/jquant2.o +LOAD ./Middlewares/LibJPEG/jutils.o +LOAD ./Middlewares/LwIP/altcp.o +LOAD ./Middlewares/LwIP/altcp_alloc.o +LOAD ./Middlewares/LwIP/altcp_tcp.o +LOAD ./Middlewares/LwIP/api_lib.o +LOAD ./Middlewares/LwIP/api_msg.o +LOAD ./Middlewares/LwIP/auth.o +LOAD ./Middlewares/LwIP/autoip.o +LOAD ./Middlewares/LwIP/bridgeif.o +LOAD ./Middlewares/LwIP/bridgeif_fdb.o +LOAD ./Middlewares/LwIP/ccp.o +LOAD ./Middlewares/LwIP/chap-md5.o +LOAD ./Middlewares/LwIP/chap-new.o +LOAD ./Middlewares/LwIP/chap_ms.o +LOAD ./Middlewares/LwIP/def.o +LOAD ./Middlewares/LwIP/demand.o +LOAD ./Middlewares/LwIP/dhcp.o +LOAD ./Middlewares/LwIP/dhcp6.o +LOAD ./Middlewares/LwIP/dns.o +LOAD ./Middlewares/LwIP/eap.o +LOAD ./Middlewares/LwIP/ecp.o +LOAD ./Middlewares/LwIP/err.o +LOAD ./Middlewares/LwIP/etharp.o +LOAD ./Middlewares/LwIP/ethernet.o +LOAD ./Middlewares/LwIP/ethip6.o +LOAD ./Middlewares/LwIP/eui64.o +LOAD ./Middlewares/LwIP/fsm.o +LOAD ./Middlewares/LwIP/icmp.o +LOAD ./Middlewares/LwIP/icmp6.o +LOAD ./Middlewares/LwIP/if_api.o +LOAD ./Middlewares/LwIP/igmp.o +LOAD ./Middlewares/LwIP/inet6.o +LOAD ./Middlewares/LwIP/inet_chksum.o +LOAD ./Middlewares/LwIP/init.o +LOAD ./Middlewares/LwIP/ip.o +LOAD ./Middlewares/LwIP/ip4.o +LOAD ./Middlewares/LwIP/ip4_addr.o +LOAD ./Middlewares/LwIP/ip4_frag.o +LOAD ./Middlewares/LwIP/ip6.o +LOAD ./Middlewares/LwIP/ip6_addr.o +LOAD ./Middlewares/LwIP/ip6_frag.o +LOAD ./Middlewares/LwIP/ipcp.o +LOAD ./Middlewares/LwIP/ipv6cp.o +LOAD ./Middlewares/LwIP/lcp.o +LOAD ./Middlewares/LwIP/lowpan6.o +LOAD ./Middlewares/LwIP/lowpan6_ble.o +LOAD ./Middlewares/LwIP/lowpan6_common.o +LOAD ./Middlewares/LwIP/magic.o +LOAD ./Middlewares/LwIP/mem.o +LOAD ./Middlewares/LwIP/memp.o +LOAD ./Middlewares/LwIP/mld6.o +LOAD ./Middlewares/LwIP/mppe.o +LOAD ./Middlewares/LwIP/mqtt.o +LOAD ./Middlewares/LwIP/multilink.o +LOAD ./Middlewares/LwIP/nd6.o +LOAD ./Middlewares/LwIP/netbuf.o +LOAD ./Middlewares/LwIP/netdb.o +LOAD ./Middlewares/LwIP/netif.o +LOAD ./Middlewares/LwIP/netifapi.o +LOAD ./Middlewares/LwIP/pbuf.o +LOAD ./Middlewares/LwIP/ppp.o +LOAD ./Middlewares/LwIP/pppapi.o +LOAD ./Middlewares/LwIP/pppcrypt.o +LOAD ./Middlewares/LwIP/pppoe.o +LOAD ./Middlewares/LwIP/pppol2tp.o +LOAD ./Middlewares/LwIP/pppos.o +LOAD ./Middlewares/LwIP/raw.o +LOAD ./Middlewares/LwIP/slipif.o +LOAD ./Middlewares/LwIP/sockets.o +LOAD ./Middlewares/LwIP/stats.o +LOAD ./Middlewares/LwIP/sys.o +LOAD ./Middlewares/LwIP/sys_arch.o +LOAD ./Middlewares/LwIP/tcp.o +LOAD ./Middlewares/LwIP/tcp_in.o +LOAD ./Middlewares/LwIP/tcp_out.o +LOAD ./Middlewares/LwIP/tcpip.o +LOAD ./Middlewares/LwIP/timeouts.o +LOAD ./Middlewares/LwIP/udp.o +LOAD ./Middlewares/LwIP/upap.o +LOAD ./Middlewares/LwIP/utils.o +LOAD ./Middlewares/LwIP/vj.o +LOAD ./Middlewares/LwIP/zepif.o +LOAD C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a +START GROUP +LOAD C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a +LOAD C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libsupc++_nano.a +END GROUP +LOAD C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a +LOAD C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libm.a +LOAD C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a +START GROUP +LOAD C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a +LOAD C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a +END GROUP +START GROUP +LOAD C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a +LOAD C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a +LOAD C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libnosys.a +END GROUP +START GROUP +LOAD C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a +LOAD C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a +LOAD C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libnosys.a +END GROUP +LOAD C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard/crtend.o +LOAD C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard/crtn.o + 0x0000000020050000 _estack = (ORIGIN (RAM) + LENGTH (RAM)) + 0x0000000000000a00 _Min_Heap_Size = 0xa00 + 0x0000000000000a00 _Min_Stack_Size = 0xa00 + +.isr_vector 0x0000000008000000 0x1c8 + 0x0000000008000000 . = ALIGN (0x4) + *(.isr_vector) + .isr_vector 0x0000000008000000 0x1c8 ./Application/User/Startup/startup_stm32f746nghx.o + 0x0000000008000000 g_pfnVectors + 0x00000000080001c8 . = ALIGN (0x4) + +.text 0x00000000080001d0 0x35658 + 0x00000000080001d0 . = ALIGN (0x4) + *(.text) + .text 0x00000000080001d0 0x40 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard/crtbegin.o + .text 0x0000000008000210 0xa0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-memchr.o) + 0x0000000008000210 memchr + .text 0x00000000080002b0 0x378 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_arm_addsubdf3.o) + 0x00000000080002b0 __aeabi_drsub + 0x00000000080002b8 __aeabi_dsub + 0x00000000080002b8 __subdf3 + 0x00000000080002bc __aeabi_dadd + 0x00000000080002bc __adddf3 + 0x0000000008000534 __floatunsidf + 0x0000000008000534 __aeabi_ui2d + 0x0000000008000554 __floatsidf + 0x0000000008000554 __aeabi_i2d + 0x0000000008000578 __aeabi_f2d + 0x0000000008000578 __extendsfdf2 + 0x00000000080005bc __floatundidf + 0x00000000080005bc __aeabi_ul2d + 0x00000000080005cc __floatdidf + 0x00000000080005cc __aeabi_l2d + .text 0x0000000008000628 0x424 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_arm_muldivdf3.o) + 0x0000000008000628 __aeabi_dmul + 0x0000000008000628 __muldf3 + 0x000000000800087c __divdf3 + 0x000000000800087c __aeabi_ddiv + .text 0x0000000008000a4c 0xa0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_arm_truncdfsf2.o) + 0x0000000008000a4c __truncdfsf2 + 0x0000000008000a4c __aeabi_d2f + .text 0x0000000008000aec 0x30 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_aeabi_uldivmod.o) + 0x0000000008000aec __aeabi_uldivmod + .text 0x0000000008000b1c 0x2c8 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_udivmoddi4.o) + 0x0000000008000b1c __udivmoddi4 + .text 0x0000000008000de4 0x4 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_dvmd_tls.o) + 0x0000000008000de4 __aeabi_idiv0 + 0x0000000008000de4 __aeabi_ldiv0 + *(.text*) + .text.vApplicationIdleHook + 0x0000000008000de8 0xc ./Application/User/Core/freertos.o + 0x0000000008000de8 vApplicationIdleHook + .text.StartDefaultTask + 0x0000000008000df4 0xe ./Application/User/Core/main.o + 0x0000000008000df4 StartDefaultTask + *fill* 0x0000000008000e02 0x2 + .text.StartTask04 + 0x0000000008000e04 0xc8 ./Application/User/Core/main.o + 0x0000000008000e04 StartTask04 + .text.SystemClock_Config + 0x0000000008000ecc 0x98 ./Application/User/Core/main.o + 0x0000000008000ecc SystemClock_Config + .text.startup.main + 0x0000000008000f64 0x6e4 ./Application/User/Core/main.o + 0x0000000008000f64 main + .text.HAL_TIM_PeriodElapsedCallback + 0x0000000008001648 0x14 ./Application/User/Core/main.o + 0x0000000008001648 HAL_TIM_PeriodElapsedCallback + .text.Error_Handler + 0x000000000800165c 0x2 ./Application/User/Core/main.o + 0x000000000800165c Error_Handler + *fill* 0x000000000800165e 0x2 + .text.HAL_MspInit + 0x0000000008001660 0x3c ./Application/User/Core/stm32f7xx_hal_msp.o + 0x0000000008001660 HAL_MspInit + .text.HAL_CRC_MspInit + 0x000000000800169c 0x2c ./Application/User/Core/stm32f7xx_hal_msp.o + 0x000000000800169c HAL_CRC_MspInit + .text.HAL_DMA2D_MspInit + 0x00000000080016c8 0x40 ./Application/User/Core/stm32f7xx_hal_msp.o + 0x00000000080016c8 HAL_DMA2D_MspInit + .text.HAL_I2C_MspInit + 0x0000000008001708 0x88 ./Application/User/Core/stm32f7xx_hal_msp.o + 0x0000000008001708 HAL_I2C_MspInit + .text.HAL_I2C_MspDeInit + 0x0000000008001790 0x38 ./Application/User/Core/stm32f7xx_hal_msp.o + 0x0000000008001790 HAL_I2C_MspDeInit + .text.HAL_LTDC_MspInit + 0x00000000080017c8 0x15c ./Application/User/Core/stm32f7xx_hal_msp.o + 0x00000000080017c8 HAL_LTDC_MspInit + .text.HAL_QSPI_MspInit + 0x0000000008001924 0xdc ./Application/User/Core/stm32f7xx_hal_msp.o + 0x0000000008001924 HAL_QSPI_MspInit + .text.HAL_QSPI_MspDeInit + 0x0000000008001a00 0x48 ./Application/User/Core/stm32f7xx_hal_msp.o + 0x0000000008001a00 HAL_QSPI_MspDeInit + .text.HAL_TIM_Base_MspInit + 0x0000000008001a48 0x8c ./Application/User/Core/stm32f7xx_hal_msp.o + 0x0000000008001a48 HAL_TIM_Base_MspInit + .text.HAL_TIM_MspPostInit + 0x0000000008001ad4 0x154 ./Application/User/Core/stm32f7xx_hal_msp.o + 0x0000000008001ad4 HAL_TIM_MspPostInit + .text.HAL_SDRAM_MspInit + 0x0000000008001c28 0xd0 ./Application/User/Core/stm32f7xx_hal_msp.o + 0x0000000008001c28 HAL_SDRAM_MspInit + .text.HAL_InitTick + 0x0000000008001cf8 0x9c ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + 0x0000000008001cf8 HAL_InitTick + .text.NMI_Handler + 0x0000000008001d94 0x2 ./Application/User/Core/stm32f7xx_it.o + 0x0000000008001d94 NMI_Handler + .text.HardFault_Handler + 0x0000000008001d96 0x2 ./Application/User/Core/stm32f7xx_it.o + 0x0000000008001d96 HardFault_Handler + .text.MemManage_Handler + 0x0000000008001d98 0x2 ./Application/User/Core/stm32f7xx_it.o + 0x0000000008001d98 MemManage_Handler + .text.BusFault_Handler + 0x0000000008001d9a 0x2 ./Application/User/Core/stm32f7xx_it.o + 0x0000000008001d9a BusFault_Handler + .text.UsageFault_Handler + 0x0000000008001d9c 0x2 ./Application/User/Core/stm32f7xx_it.o + 0x0000000008001d9c UsageFault_Handler + .text.DebugMon_Handler + 0x0000000008001d9e 0x2 ./Application/User/Core/stm32f7xx_it.o + 0x0000000008001d9e DebugMon_Handler + .text.TIM6_DAC_IRQHandler + 0x0000000008001da0 0xc ./Application/User/Core/stm32f7xx_it.o + 0x0000000008001da0 TIM6_DAC_IRQHandler + .text.ETH_IRQHandler + 0x0000000008001dac 0xc ./Application/User/Core/stm32f7xx_it.o + 0x0000000008001dac ETH_IRQHandler + .text.LTDC_IRQHandler + 0x0000000008001db8 0xc ./Application/User/Core/stm32f7xx_it.o + 0x0000000008001db8 LTDC_IRQHandler + .text.DMA2D_IRQHandler + 0x0000000008001dc4 0xc ./Application/User/Core/stm32f7xx_it.o + 0x0000000008001dc4 DMA2D_IRQHandler + .text._getpid 0x0000000008001dd0 0x4 ./Application/User/Core/syscalls.o + 0x0000000008001dd0 _getpid + .text._kill 0x0000000008001dd4 0x10 ./Application/User/Core/syscalls.o + 0x0000000008001dd4 _kill + .text._exit 0x0000000008001de4 0xc ./Application/User/Core/syscalls.o + 0x0000000008001de4 _exit + .text._read 0x0000000008001df0 0x1c ./Application/User/Core/syscalls.o + 0x0000000008001df0 _read + .text._write 0x0000000008001e0c 0x1c ./Application/User/Core/syscalls.o + 0x0000000008001e0c _write + .text._close 0x0000000008001e28 0x6 ./Application/User/Core/syscalls.o + 0x0000000008001e28 _close + .text._fstat 0x0000000008001e2e 0xa ./Application/User/Core/syscalls.o + 0x0000000008001e2e _fstat + .text._isatty 0x0000000008001e38 0x4 ./Application/User/Core/syscalls.o + 0x0000000008001e38 _isatty + .text._lseek 0x0000000008001e3c 0x4 ./Application/User/Core/syscalls.o + 0x0000000008001e3c _lseek + .text._sbrk 0x0000000008001e40 0x40 ./Application/User/Core/sysmem.o + 0x0000000008001e40 _sbrk + .text.MX_LIBJPEG_Init + 0x0000000008001e80 0x2 ./Application/User/LIBJPEG/App/libjpeg.o + 0x0000000008001e80 MX_LIBJPEG_Init + .text.ethernet_link_status_updated + 0x0000000008001e82 0x2 ./Application/User/LWIP/App/lwip.o + .text.MX_LWIP_Init + 0x0000000008001e84 0xa8 ./Application/User/LWIP/App/lwip.o + 0x0000000008001e84 MX_LWIP_Init + .text.ETH_PHY_IO_DeInit + 0x0000000008001f2c 0x4 ./Application/User/LWIP/Target/ethernetif.o + 0x0000000008001f2c ETH_PHY_IO_DeInit + .text.low_level_output + 0x0000000008001f30 0x80 ./Application/User/LWIP/Target/ethernetif.o + .text.ETH_PHY_IO_GetTick + 0x0000000008001fb0 0x4 ./Application/User/LWIP/Target/ethernetif.o + 0x0000000008001fb0 ETH_PHY_IO_GetTick + .text.ETH_PHY_IO_Init + 0x0000000008001fb4 0x10 ./Application/User/LWIP/Target/ethernetif.o + 0x0000000008001fb4 ETH_PHY_IO_Init + .text.ETH_PHY_IO_ReadReg + 0x0000000008001fc4 0x1c ./Application/User/LWIP/Target/ethernetif.o + 0x0000000008001fc4 ETH_PHY_IO_ReadReg + .text.ETH_PHY_IO_WriteReg + 0x0000000008001fe0 0x1c ./Application/User/LWIP/Target/ethernetif.o + 0x0000000008001fe0 ETH_PHY_IO_WriteReg + .text.pbuf_free_custom + 0x0000000008001ffc 0x30 ./Application/User/LWIP/Target/ethernetif.o + 0x0000000008001ffc pbuf_free_custom + .text.ethernetif_input + 0x000000000800202c 0x58 ./Application/User/LWIP/Target/ethernetif.o + 0x000000000800202c ethernetif_input + .text.HAL_ETH_RxCpltCallback + 0x0000000008002084 0xc ./Application/User/LWIP/Target/ethernetif.o + 0x0000000008002084 HAL_ETH_RxCpltCallback + .text.HAL_ETH_TxCpltCallback + 0x0000000008002090 0xc ./Application/User/LWIP/Target/ethernetif.o + 0x0000000008002090 HAL_ETH_TxCpltCallback + .text.HAL_ETH_ErrorCallback + 0x000000000800209c 0x1c ./Application/User/LWIP/Target/ethernetif.o + 0x000000000800209c HAL_ETH_ErrorCallback + .text.ethernetif_init + 0x00000000080020b8 0x1c8 ./Application/User/LWIP/Target/ethernetif.o + 0x00000000080020b8 ethernetif_init + .text.sys_now 0x0000000008002280 0x4 ./Application/User/LWIP/Target/ethernetif.o + 0x0000000008002280 sys_now + .text.HAL_ETH_MspInit + 0x0000000008002284 0xf0 ./Application/User/LWIP/Target/ethernetif.o + 0x0000000008002284 HAL_ETH_MspInit + .text.ethernet_link_thread + 0x0000000008002374 0xa8 ./Application/User/LWIP/Target/ethernetif.o + 0x0000000008002374 ethernet_link_thread + .text.HAL_ETH_RxAllocateCallback + 0x000000000800241c 0x44 ./Application/User/LWIP/Target/ethernetif.o + 0x000000000800241c HAL_ETH_RxAllocateCallback + .text.HAL_ETH_RxLinkCallback + 0x0000000008002460 0x54 ./Application/User/LWIP/Target/ethernetif.o + 0x0000000008002460 HAL_ETH_RxLinkCallback + .text.HAL_ETH_TxFreeCallback + 0x00000000080024b4 0x4 ./Application/User/LWIP/Target/ethernetif.o + 0x00000000080024b4 HAL_ETH_TxFreeCallback + .text.Reset_Handler + 0x00000000080024b8 0x50 ./Application/User/Startup/startup_stm32f746nghx.o + 0x00000000080024b8 Reset_Handler + .text.Default_Handler + 0x0000000008002508 0x2 ./Application/User/Startup/startup_stm32f746nghx.o + 0x0000000008002508 RTC_Alarm_IRQHandler + 0x0000000008002508 EXTI2_IRQHandler + 0x0000000008002508 TIM8_CC_IRQHandler + 0x0000000008002508 UART8_IRQHandler + 0x0000000008002508 SPI4_IRQHandler + 0x0000000008002508 TIM1_CC_IRQHandler + 0x0000000008002508 DMA2_Stream5_IRQHandler + 0x0000000008002508 DMA1_Stream5_IRQHandler + 0x0000000008002508 PVD_IRQHandler + 0x0000000008002508 TAMP_STAMP_IRQHandler + 0x0000000008002508 CAN2_RX1_IRQHandler + 0x0000000008002508 EXTI3_IRQHandler + 0x0000000008002508 TIM8_TRG_COM_TIM14_IRQHandler + 0x0000000008002508 TIM1_UP_TIM10_IRQHandler + 0x0000000008002508 TIM8_UP_TIM13_IRQHandler + 0x0000000008002508 I2C3_ER_IRQHandler + 0x0000000008002508 EXTI0_IRQHandler + 0x0000000008002508 I2C2_EV_IRQHandler + 0x0000000008002508 DMA1_Stream2_IRQHandler + 0x0000000008002508 CAN1_RX0_IRQHandler + 0x0000000008002508 FPU_IRQHandler + 0x0000000008002508 OTG_HS_WKUP_IRQHandler + 0x0000000008002508 LTDC_ER_IRQHandler + 0x0000000008002508 CAN2_SCE_IRQHandler + 0x0000000008002508 DMA2_Stream2_IRQHandler + 0x0000000008002508 SPI1_IRQHandler + 0x0000000008002508 TIM1_BRK_TIM9_IRQHandler + 0x0000000008002508 DCMI_IRQHandler + 0x0000000008002508 CAN2_RX0_IRQHandler + 0x0000000008002508 DMA2_Stream3_IRQHandler + 0x0000000008002508 SAI2_IRQHandler + 0x0000000008002508 USART6_IRQHandler + 0x0000000008002508 USART3_IRQHandler + 0x0000000008002508 CAN1_RX1_IRQHandler + 0x0000000008002508 UART5_IRQHandler + 0x0000000008002508 DMA2_Stream0_IRQHandler + 0x0000000008002508 TIM4_IRQHandler + 0x0000000008002508 QUADSPI_IRQHandler + 0x0000000008002508 I2C1_EV_IRQHandler + 0x0000000008002508 DMA1_Stream6_IRQHandler + 0x0000000008002508 DMA1_Stream1_IRQHandler + 0x0000000008002508 UART4_IRQHandler + 0x0000000008002508 TIM3_IRQHandler + 0x0000000008002508 RCC_IRQHandler + 0x0000000008002508 TIM8_BRK_TIM12_IRQHandler + 0x0000000008002508 Default_Handler + 0x0000000008002508 CEC_IRQHandler + 0x0000000008002508 EXTI15_10_IRQHandler + 0x0000000008002508 ADC_IRQHandler + 0x0000000008002508 DMA1_Stream7_IRQHandler + 0x0000000008002508 SPI5_IRQHandler + 0x0000000008002508 TIM7_IRQHandler + 0x0000000008002508 SDMMC1_IRQHandler + 0x0000000008002508 CAN2_TX_IRQHandler + 0x0000000008002508 TIM5_IRQHandler + 0x0000000008002508 DMA2_Stream7_IRQHandler + 0x0000000008002508 I2C3_EV_IRQHandler + 0x0000000008002508 EXTI9_5_IRQHandler + 0x0000000008002508 RTC_WKUP_IRQHandler + 0x0000000008002508 ETH_WKUP_IRQHandler + 0x0000000008002508 SPDIF_RX_IRQHandler + 0x0000000008002508 SPI2_IRQHandler + 0x0000000008002508 OTG_HS_EP1_IN_IRQHandler + 0x0000000008002508 DMA1_Stream0_IRQHandler + 0x0000000008002508 CAN1_TX_IRQHandler + 0x0000000008002508 EXTI4_IRQHandler + 0x0000000008002508 RNG_IRQHandler + 0x0000000008002508 OTG_HS_EP1_OUT_IRQHandler + 0x0000000008002508 WWDG_IRQHandler + 0x0000000008002508 SPI6_IRQHandler + 0x0000000008002508 I2C4_EV_IRQHandler + 0x0000000008002508 TIM2_IRQHandler + 0x0000000008002508 OTG_FS_WKUP_IRQHandler + 0x0000000008002508 TIM1_TRG_COM_TIM11_IRQHandler + 0x0000000008002508 OTG_HS_IRQHandler + 0x0000000008002508 EXTI1_IRQHandler + 0x0000000008002508 UART7_IRQHandler + 0x0000000008002508 USART2_IRQHandler + 0x0000000008002508 I2C2_ER_IRQHandler + 0x0000000008002508 DMA2_Stream1_IRQHandler + 0x0000000008002508 CAN1_SCE_IRQHandler + 0x0000000008002508 FLASH_IRQHandler + 0x0000000008002508 DMA2_Stream4_IRQHandler + 0x0000000008002508 USART1_IRQHandler + 0x0000000008002508 OTG_FS_IRQHandler + 0x0000000008002508 SPI3_IRQHandler + 0x0000000008002508 DMA1_Stream4_IRQHandler + 0x0000000008002508 I2C1_ER_IRQHandler + 0x0000000008002508 FMC_IRQHandler + 0x0000000008002508 LPTIM1_IRQHandler + 0x0000000008002508 I2C4_ER_IRQHandler + 0x0000000008002508 DMA2_Stream6_IRQHandler + 0x0000000008002508 SAI1_IRQHandler + 0x0000000008002508 DMA1_Stream3_IRQHandler + .text.MX_TouchGFX_PreOSInit + 0x000000000800250a 0x2 ./Application/User/TouchGFX/App/app_touchgfx.o + 0x000000000800250a MX_TouchGFX_PreOSInit + .text.MX_TouchGFX_Init + 0x000000000800250c 0xe ./Application/User/TouchGFX/App/app_touchgfx.o + 0x000000000800250c MX_TouchGFX_Init + .text.TouchGFX_Task + 0x000000000800251a 0x4 ./Application/User/TouchGFX/App/app_touchgfx.o + 0x000000000800251a TouchGFX_Task + .text._ZN8touchgfx18MCUInstrumentation13getCCConsumedEv + 0x000000000800251e 0x4 ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + 0x000000000800251e touchgfx::MCUInstrumentation::getCCConsumed() + .text._ZN8touchgfx18MCUInstrumentation13setCCConsumedEm + 0x0000000008002522 0x4 ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + 0x0000000008002522 touchgfx::MCUInstrumentation::setCCConsumed(unsigned long) + *fill* 0x0000000008002526 0x2 + .text._ZN8touchgfx25CortexMMCUInstrumentation4initEv + 0x0000000008002528 0x30 ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + 0x0000000008002528 touchgfx::CortexMMCUInstrumentation::init() + .text._ZN8touchgfx25CortexMMCUInstrumentation12getElapsedUSEjjj + 0x0000000008002558 0xc ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + 0x0000000008002558 touchgfx::CortexMMCUInstrumentation::getElapsedUS(unsigned int, unsigned int, unsigned int) + .text._ZN8touchgfx25CortexMMCUInstrumentation12getCPUCyclesEv + 0x0000000008002564 0xc ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + 0x0000000008002564 touchgfx::CortexMMCUInstrumentation::getCPUCycles() + .text._ZN8touchgfx25CortexMMCUInstrumentationD2Ev + 0x0000000008002570 0x2 ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + 0x0000000008002570 touchgfx::CortexMMCUInstrumentation::~CortexMMCUInstrumentation() + 0x0000000008002570 touchgfx::CortexMMCUInstrumentation::~CortexMMCUInstrumentation() + .text._ZN8touchgfx25CortexMMCUInstrumentationD0Ev + 0x0000000008002572 0xe ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + 0x0000000008002572 touchgfx::CortexMMCUInstrumentation::~CortexMMCUInstrumentation() + .text._ZN8touchgfx25CortexMMCUInstrumentation12setMCUActiveEb + 0x0000000008002580 0x1e ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + 0x0000000008002580 touchgfx::CortexMMCUInstrumentation::setMCUActive(bool) + *fill* 0x000000000800259e 0x2 + .text._ZN20STM32TouchController4initEv + 0x00000000080025a0 0x14 ./Application/User/TouchGFX/target/STM32TouchController.o + 0x00000000080025a0 STM32TouchController::init() + .text._ZN20STM32TouchControllerD2Ev + 0x00000000080025b4 0x2 ./Application/User/TouchGFX/target/STM32TouchController.o + 0x00000000080025b4 STM32TouchController::~STM32TouchController() + 0x00000000080025b4 STM32TouchController::~STM32TouchController() + .text._ZN20STM32TouchControllerD0Ev + 0x00000000080025b6 0xe ./Application/User/TouchGFX/target/STM32TouchController.o + 0x00000000080025b6 STM32TouchController::~STM32TouchController() + .text._ZN20STM32TouchController11sampleTouchERlS0_ + 0x00000000080025c4 0x30 ./Application/User/TouchGFX/target/STM32TouchController.o + 0x00000000080025c4 STM32TouchController::sampleTouch(long&, long&) + .text.TS_IO_Write + 0x00000000080025f4 0x34 ./Application/User/TouchGFX/target/STM32TouchController.o + 0x00000000080025f4 TS_IO_Write + .text.TS_IO_Read + 0x0000000008002628 0x38 ./Application/User/TouchGFX/target/STM32TouchController.o + 0x0000000008002628 TS_IO_Read + .text._ZN8touchgfx4GPIO3setENS0_7GPIO_IDE + 0x0000000008002660 0x60 ./Application/User/TouchGFX/target/TouchGFXGPIO.o + 0x0000000008002660 touchgfx::GPIO::set(touchgfx::GPIO::GPIO_ID) + .text._ZN8touchgfx4GPIO5clearENS0_7GPIO_IDE + 0x00000000080026c0 0x60 ./Application/User/TouchGFX/target/TouchGFXGPIO.o + 0x00000000080026c0 touchgfx::GPIO::clear(touchgfx::GPIO::GPIO_ID) + .text._ZN8touchgfx4GPIO6toggleENS0_7GPIO_IDE + 0x0000000008002720 0x34 ./Application/User/TouchGFX/target/TouchGFXGPIO.o + 0x0000000008002720 touchgfx::GPIO::toggle(touchgfx::GPIO::GPIO_ID) + .text._ZN8touchgfx4GPIO3getENS0_7GPIO_IDE + 0x0000000008002754 0x40 ./Application/User/TouchGFX/target/TouchGFXGPIO.o + 0x0000000008002754 touchgfx::GPIO::get(touchgfx::GPIO::GPIO_ID) + .text._ZN8touchgfx4GPIO4initEv + 0x0000000008002794 0x28 ./Application/User/TouchGFX/target/TouchGFXGPIO.o + 0x0000000008002794 touchgfx::GPIO::init() + .text._ZN8touchgfx3HAL21setDisplayOrientationENS_18DisplayOrientationE + 0x00000000080027bc 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + 0x00000000080027bc touchgfx::HAL::setDisplayOrientation(touchgfx::DisplayOrientation) + .text._ZN8touchgfx3HAL9sampleKeyERh + 0x00000000080027c8 0x4 ./Application/User/TouchGFX/target/TouchGFXHAL.o + 0x00000000080027c8 touchgfx::HAL::sampleKey(unsigned char&) + .text._ZN8touchgfx3HAL19setAnimationStorageEPv + 0x00000000080027cc 0x14 ./Application/User/TouchGFX/target/TouchGFXHAL.o + 0x00000000080027cc touchgfx::HAL::setAnimationStorage(void*) + .text._ZNK8touchgfx3HAL18getFlashDataReaderEv + 0x00000000080027e0 0x4 ./Application/User/TouchGFX/target/TouchGFXHAL.o + 0x00000000080027e0 touchgfx::HAL::getFlashDataReader() const + .text._ZN8touchgfx3HAL9taskDelayEt + 0x00000000080027e4 0xa ./Application/User/TouchGFX/target/TouchGFXHAL.o + 0x00000000080027e4 touchgfx::HAL::taskDelay(unsigned short) + .text._ZN8touchgfx3HAL17getTFTCurrentLineEv + 0x00000000080027ee 0x6 ./Application/User/TouchGFX/target/TouchGFXHAL.o + 0x00000000080027ee touchgfx::HAL::getTFTCurrentLine() + .text._ZN8touchgfx3HAL10getDMATypeEv + 0x00000000080027f4 0x8 ./Application/User/TouchGFX/target/TouchGFXHAL.o + 0x00000000080027f4 touchgfx::HAL::getDMAType() + .text._ZN11TouchGFXHALD2Ev + 0x00000000080027fc 0x2 ./Application/User/TouchGFX/target/TouchGFXHAL.o + 0x00000000080027fc TouchGFXHAL::~TouchGFXHAL() + 0x00000000080027fc TouchGFXHAL::~TouchGFXHAL() + *fill* 0x00000000080027fe 0x2 + .text._ZN11TouchGFXHAL10initializeEv + 0x0000000008002800 0x38 ./Application/User/TouchGFX/target/TouchGFXHAL.o + 0x0000000008002800 TouchGFXHAL::initialize() + .text._ZNK11TouchGFXHAL17getTFTFrameBufferEv + 0x0000000008002838 0x4 ./Application/User/TouchGFX/target/TouchGFXHAL.o + 0x0000000008002838 TouchGFXHAL::getTFTFrameBuffer() const + .text._ZN11TouchGFXHAL17setTFTFrameBufferEPt + 0x000000000800283c 0x4 ./Application/User/TouchGFX/target/TouchGFXHAL.o + 0x000000000800283c TouchGFXHAL::setTFTFrameBuffer(unsigned short*) + .text._ZN11TouchGFXHAL16flushFrameBufferERKN8touchgfx4RectE + 0x0000000008002840 0x4c ./Application/User/TouchGFX/target/TouchGFXHAL.o + 0x0000000008002840 TouchGFXHAL::flushFrameBuffer(touchgfx::Rect const&) + .text._ZN11TouchGFXHAL9blockCopyEPvPKvm + 0x000000000800288c 0x4 ./Application/User/TouchGFX/target/TouchGFXHAL.o + 0x000000000800288c TouchGFXHAL::blockCopy(void*, void const*, unsigned long) + .text._ZN11TouchGFXHAL19configureInterruptsEv + 0x0000000008002890 0x4 ./Application/User/TouchGFX/target/TouchGFXHAL.o + 0x0000000008002890 TouchGFXHAL::configureInterrupts() + .text._ZN11TouchGFXHAL16enableInterruptsEv + 0x0000000008002894 0x4 ./Application/User/TouchGFX/target/TouchGFXHAL.o + 0x0000000008002894 TouchGFXHAL::enableInterrupts() + .text._ZN11TouchGFXHAL17disableInterruptsEv + 0x0000000008002898 0x4 ./Application/User/TouchGFX/target/TouchGFXHAL.o + 0x0000000008002898 TouchGFXHAL::disableInterrupts() + .text._ZN11TouchGFXHAL28enableLCDControllerInterruptEv + 0x000000000800289c 0x4 ./Application/User/TouchGFX/target/TouchGFXHAL.o + 0x000000000800289c TouchGFXHAL::enableLCDControllerInterrupt() + .text._ZN8touchgfx3HAL15backPorchExitedEv + 0x00000000080028a0 0x16 ./Application/User/TouchGFX/target/TouchGFXHAL.o + 0x00000000080028a0 touchgfx::HAL::backPorchExited() + .text._ZN11TouchGFXHAL16flushFrameBufferEv + 0x00000000080028b6 0x4 ./Application/User/TouchGFX/target/TouchGFXHAL.o + 0x00000000080028b6 TouchGFXHAL::flushFrameBuffer() + .text._ZN11TouchGFXHALD0Ev + 0x00000000080028ba 0xe ./Application/User/TouchGFX/target/TouchGFXHAL.o + 0x00000000080028ba TouchGFXHAL::~TouchGFXHAL() + .text._ZN8touchgfx3HAL11getBlitCapsEv + 0x00000000080028c8 0x12 ./Application/User/TouchGFX/target/TouchGFXHAL.o + 0x00000000080028c8 touchgfx::HAL::getBlitCaps() + *fill* 0x00000000080028da 0x2 + .text._ZN8touchgfx3HAL31performDisplayOrientationChangeEv + 0x00000000080028dc 0x48 ./Application/User/TouchGFX/target/TouchGFXHAL.o + 0x00000000080028dc touchgfx::HAL::performDisplayOrientationChange() + .text._ZN8touchgfx3HAL28setFrameBufferStartAddressesEPvS1_S1_ + 0x0000000008002924 0x40 ./Application/User/TouchGFX/target/TouchGFXHAL.o + 0x0000000008002924 touchgfx::HAL::setFrameBufferStartAddresses(void*, void*, void*) + .text._ZN8touchgfx3HAL18setFrameBufferSizeEtt + 0x0000000008002964 0x44 ./Application/User/TouchGFX/target/TouchGFXHAL.o + 0x0000000008002964 touchgfx::HAL::setFrameBufferSize(unsigned short, unsigned short) + .text.IdleTaskHook + 0x00000000080029a8 0x18 ./Application/User/TouchGFX/target/TouchGFXHAL.o + 0x00000000080029a8 IdleTaskHook + .text.startup._GLOBAL__sub_I_instrumentation + 0x00000000080029c0 0x18 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .text._ZN8touchgfx10OSWrappers10initializeEv + 0x00000000080029d8 0x50 ./Application/User/TouchGFX/target/generated/OSWrappers.o + 0x00000000080029d8 touchgfx::OSWrappers::initialize() + .text._ZN8touchgfx10OSWrappers24takeFrameBufferSemaphoreEv + 0x0000000008002a28 0x10 ./Application/User/TouchGFX/target/generated/OSWrappers.o + 0x0000000008002a28 touchgfx::OSWrappers::takeFrameBufferSemaphore() + .text._ZN8touchgfx10OSWrappers24giveFrameBufferSemaphoreEv + 0x0000000008002a38 0xc ./Application/User/TouchGFX/target/generated/OSWrappers.o + 0x0000000008002a38 touchgfx::OSWrappers::giveFrameBufferSemaphore() + .text._ZN8touchgfx10OSWrappers27tryTakeFrameBufferSemaphoreEv + 0x0000000008002a44 0x10 ./Application/User/TouchGFX/target/generated/OSWrappers.o + 0x0000000008002a44 touchgfx::OSWrappers::tryTakeFrameBufferSemaphore() + .text._ZN8touchgfx10OSWrappers31giveFrameBufferSemaphoreFromISREv + 0x0000000008002a54 0x4 ./Application/User/TouchGFX/target/generated/OSWrappers.o + 0x0000000008002a54 touchgfx::OSWrappers::giveFrameBufferSemaphoreFromISR() + .text._ZN8touchgfx10OSWrappers11signalVSyncEv + 0x0000000008002a58 0x18 ./Application/User/TouchGFX/target/generated/OSWrappers.o + 0x0000000008002a58 touchgfx::OSWrappers::signalVSync() + .text._ZN8touchgfx10OSWrappers12waitForVSyncEv + 0x0000000008002a70 0x28 ./Application/User/TouchGFX/target/generated/OSWrappers.o + 0x0000000008002a70 touchgfx::OSWrappers::waitForVSync() + .text._ZN8touchgfx13DMA_Interface5flushEv + 0x0000000008002a98 0x6 ./Application/User/TouchGFX/target/generated/STM32DMA.o + 0x0000000008002a98 touchgfx::DMA_Interface::flush() + .text._ZN8STM32DMA10getDMATypeEv + 0x0000000008002a9e 0x4 ./Application/User/TouchGFX/target/generated/STM32DMA.o + 0x0000000008002a9e STM32DMA::getDMAType() + .text._ZN8STM32DMA18signalDMAInterruptEv + 0x0000000008002aa2 0x6 ./Application/User/TouchGFX/target/generated/STM32DMA.o + 0x0000000008002aa2 STM32DMA::signalDMAInterrupt() + .text._ZN8STM32DMA10initializeEv + 0x0000000008002aa8 0x48 ./Application/User/TouchGFX/target/generated/STM32DMA.o + 0x0000000008002aa8 STM32DMA::initialize() + .text._ZN8STM32DMA11getBlitCapsEv + 0x0000000008002af0 0x6 ./Application/User/TouchGFX/target/generated/STM32DMA.o + 0x0000000008002af0 STM32DMA::getBlitCaps() + *fill* 0x0000000008002af6 0x2 + .text._ZN8STM32DMAD2Ev + 0x0000000008002af8 0x20 ./Application/User/TouchGFX/target/generated/STM32DMA.o + 0x0000000008002af8 STM32DMA::~STM32DMA() + 0x0000000008002af8 STM32DMA::~STM32DMA() + .text._ZN8STM32DMAD0Ev + 0x0000000008002b18 0x16 ./Application/User/TouchGFX/target/generated/STM32DMA.o + 0x0000000008002b18 STM32DMA::~STM32DMA() + *fill* 0x0000000008002b2e 0x2 + .text.DMA2D_XferCpltCallback + 0x0000000008002b30 0x10 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .text._ZN8STM32DMAC2Ev + 0x0000000008002b40 0x34 ./Application/User/TouchGFX/target/generated/STM32DMA.o + 0x0000000008002b40 STM32DMA::STM32DMA() + 0x0000000008002b40 STM32DMA::STM32DMA() + .text._ZN8STM32DMA22getChromARTInputFormatEN8touchgfx6Bitmap12BitmapFormatE + 0x0000000008002b74 0x40 ./Application/User/TouchGFX/target/generated/STM32DMA.o + 0x0000000008002b74 STM32DMA::getChromARTInputFormat(touchgfx::Bitmap::BitmapFormat) + .text._ZN8STM32DMA23getChromARTOutputFormatEN8touchgfx6Bitmap12BitmapFormatE + 0x0000000008002bb4 0x3c ./Application/User/TouchGFX/target/generated/STM32DMA.o + 0x0000000008002bb4 STM32DMA::getChromARTOutputFormat(touchgfx::Bitmap::BitmapFormat) + .text._ZN8STM32DMA13setupDataCopyERKN8touchgfx6BlitOpE + 0x0000000008002bf0 0x15c ./Application/User/TouchGFX/target/generated/STM32DMA.o + 0x0000000008002bf0 STM32DMA::setupDataCopy(touchgfx::BlitOp const&) + .text._ZN8STM32DMA13setupDataFillERKN8touchgfx6BlitOpE + 0x0000000008002d4c 0x78 ./Application/User/TouchGFX/target/generated/STM32DMA.o + 0x0000000008002d4c STM32DMA::setupDataFill(touchgfx::BlitOp const&) + .text._ZNK20SoftwareMJPEGDecoder21getCurrentFrameNumberEv + 0x0000000008002dc4 0x4 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + 0x0000000008002dc4 SoftwareMJPEGDecoder::getCurrentFrameNumber() const + .text._ZN20SoftwareMJPEGDecoder12getLastErrorEv + 0x0000000008002dc8 0x6 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + 0x0000000008002dc8 SoftwareMJPEGDecoder::getLastError() + .text._ZN20SoftwareMJPEGDecoder8hasVideoEv + 0x0000000008002dce 0x12 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + 0x0000000008002dce SoftwareMJPEGDecoder::hasVideo() + .text._ZN20SoftwareMJPEGDecoder17getNumberOfFramesEv + 0x0000000008002de0 0x4 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + 0x0000000008002de0 SoftwareMJPEGDecoder::getNumberOfFrames() + .text._ZN20SoftwareMJPEGDecoder12getVideoInfoEPN8touchgfx16VideoInformationE + 0x0000000008002de4 0xe ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + 0x0000000008002de4 SoftwareMJPEGDecoder::getVideoInfo(touchgfx::VideoInformation*) + .text._ZN20SoftwareMJPEGDecoderD2Ev + 0x0000000008002df2 0x2 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + 0x0000000008002df2 SoftwareMJPEGDecoder::~SoftwareMJPEGDecoder() + 0x0000000008002df2 SoftwareMJPEGDecoder::~SoftwareMJPEGDecoder() + .text._ZN20SoftwareMJPEGDecoder15decodeThumbnailEmPhtt + 0x0000000008002df4 0x1c ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + 0x0000000008002df4 SoftwareMJPEGDecoder::decodeThumbnail(unsigned long, unsigned char*, unsigned short, unsigned short) + .text._ZN20SoftwareMJPEGDecoderD0Ev + 0x0000000008002e10 0xe ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + 0x0000000008002e10 SoftwareMJPEGDecoder::~SoftwareMJPEGDecoder() + *fill* 0x0000000008002e1e 0x2 + .text._ZN20SoftwareMJPEGDecoder16decodeMJPEGFrameEPKhmPhttm.part.0 + 0x0000000008002e20 0xc8 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .text._ZN20SoftwareMJPEGDecoderC2EPh + 0x0000000008002ee8 0x30 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + 0x0000000008002ee8 SoftwareMJPEGDecoder::SoftwareMJPEGDecoder(unsigned char*) + 0x0000000008002ee8 SoftwareMJPEGDecoder::SoftwareMJPEGDecoder(unsigned char*) + .text._ZN20SoftwareMJPEGDecoder7compareEmPKcm + 0x0000000008002f18 0x20 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + 0x0000000008002f18 SoftwareMJPEGDecoder::compare(unsigned long, char const*, unsigned long) + .text._ZN20SoftwareMJPEGDecoder6getU32Em + 0x0000000008002f38 0x2a ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + 0x0000000008002f38 SoftwareMJPEGDecoder::getU32(unsigned long) + .text._ZN20SoftwareMJPEGDecoder6getU16Em + 0x0000000008002f62 0x1c ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + 0x0000000008002f62 SoftwareMJPEGDecoder::getU16(unsigned long) + *fill* 0x0000000008002f7e 0x2 + .text._ZN20SoftwareMJPEGDecoder8readDataEmm + 0x0000000008002f80 0x58 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + 0x0000000008002f80 SoftwareMJPEGDecoder::readData(unsigned long, unsigned long) + .text._ZN20SoftwareMJPEGDecoder13gotoNextFrameEv + 0x0000000008002fd8 0xa4 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + 0x0000000008002fd8 SoftwareMJPEGDecoder::gotoNextFrame() + .text._ZN20SoftwareMJPEGDecoder11decodeFrameERKN8touchgfx4RectEPhm + 0x000000000800307c 0x138 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + 0x000000000800307c SoftwareMJPEGDecoder::decodeFrame(touchgfx::Rect const&, unsigned char*, unsigned long) + .text._ZN20SoftwareMJPEGDecoder9gotoFrameEm + 0x00000000080031b4 0x4a ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + 0x00000000080031b4 SoftwareMJPEGDecoder::gotoFrame(unsigned long) + *fill* 0x00000000080031fe 0x2 + .text._ZN20SoftwareMJPEGDecoder15readVideoHeaderEv + 0x0000000008003200 0x1dc ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + 0x0000000008003200 SoftwareMJPEGDecoder::readVideoHeader() + .text._ZN20SoftwareMJPEGDecoder12setVideoDataEPKhm + 0x00000000080033dc 0xc ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + 0x00000000080033dc SoftwareMJPEGDecoder::setVideoData(unsigned char const*, unsigned long) + .text._ZN20SoftwareMJPEGDecoder12setVideoDataERN8touchgfx15VideoDataReaderE + 0x00000000080033e8 0x1e ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + 0x00000000080033e8 SoftwareMJPEGDecoder::setVideoData(touchgfx::VideoDataReader&) + .text._ZN20SoftwareMJPEGDecoder16decodeMJPEGFrameEPKhmPhttm + 0x0000000008003406 0x1c ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + 0x0000000008003406 SoftwareMJPEGDecoder::decodeMJPEGFrame(unsigned char const*, unsigned long, unsigned char*, unsigned short, unsigned short, unsigned long) + *fill* 0x0000000008003422 0x2 + .text._ZN20SoftwareMJPEGDecoder15decodeNextFrameEPhttm + 0x0000000008003424 0xc8 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + 0x0000000008003424 SoftwareMJPEGDecoder::decodeNextFrame(unsigned char*, unsigned short, unsigned short, unsigned long) + .text._ZNK8touchgfx9PartitionINS_4meta8TypeListINS_12NoTransitionENS2_INS1_3NilES4_EEEELt1EE8capacityEv + 0x00000000080034ec 0x4 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + 0x00000000080034ec touchgfx::Partition >, (unsigned short)1>::capacity() const + .text._ZN8touchgfx9PartitionINS_4meta8TypeListINS_12NoTransitionENS2_INS1_3NilES4_EEEELt1EE12element_sizeEv + 0x00000000080034f0 0x4 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + 0x00000000080034f0 touchgfx::Partition >, (unsigned short)1>::element_size() + .text._ZN8touchgfx9PartitionINS_4meta8TypeListINS_12NoTransitionENS2_INS1_3NilES4_EEEELt1EE7elementEt + 0x00000000080034f4 0xa ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + 0x00000000080034f4 touchgfx::Partition >, (unsigned short)1>::element(unsigned short) + .text._ZNK8touchgfx9PartitionINS_4meta8TypeListINS_12NoTransitionENS2_INS1_3NilES4_EEEELt1EE7elementEt + 0x00000000080034fe 0xa ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + 0x00000000080034fe touchgfx::Partition >, (unsigned short)1>::element(unsigned short) const + .text._ZNK8touchgfx9PartitionINS_4meta8TypeListI14MainScreenViewNS2_INS1_3NilES4_EEEELt1EE8capacityEv + 0x0000000008003508 0x4 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + 0x0000000008003508 touchgfx::Partition >, (unsigned short)1>::capacity() const + .text._ZN8touchgfx9PartitionINS_4meta8TypeListI14MainScreenViewNS2_INS1_3NilES4_EEEELt1EE12element_sizeEv + 0x000000000800350c 0x6 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + 0x000000000800350c touchgfx::Partition >, (unsigned short)1>::element_size() + .text._ZN8touchgfx9PartitionINS_4meta8TypeListI14MainScreenViewNS2_INS1_3NilES4_EEEELt1EE7elementEt + 0x0000000008003512 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + 0x0000000008003512 touchgfx::Partition >, (unsigned short)1>::element(unsigned short) + .text._ZNK8touchgfx9PartitionINS_4meta8TypeListI14MainScreenViewNS2_INS1_3NilES4_EEEELt1EE7elementEt + 0x000000000800351e 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + 0x000000000800351e touchgfx::Partition >, (unsigned short)1>::element(unsigned short) const + .text._ZNK8touchgfx9PartitionINS_4meta8TypeListI19MainScreenPresenterNS2_INS1_3NilES4_EEEELt1EE8capacityEv + 0x000000000800352a 0x4 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + 0x000000000800352a touchgfx::Partition >, (unsigned short)1>::capacity() const + .text._ZN8touchgfx9PartitionINS_4meta8TypeListI19MainScreenPresenterNS2_INS1_3NilES4_EEEELt1EE12element_sizeEv + 0x000000000800352e 0x4 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + 0x000000000800352e touchgfx::Partition >, (unsigned short)1>::element_size() + .text._ZN8touchgfx9PartitionINS_4meta8TypeListI19MainScreenPresenterNS2_INS1_3NilES4_EEEELt1EE7elementEt + 0x0000000008003532 0x8 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + 0x0000000008003532 touchgfx::Partition >, (unsigned short)1>::element(unsigned short) + .text._ZNK8touchgfx9PartitionINS_4meta8TypeListI19MainScreenPresenterNS2_INS1_3NilES4_EEEELt1EE7elementEt + 0x000000000800353a 0x8 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + 0x000000000800353a touchgfx::Partition >, (unsigned short)1>::element(unsigned short) const + .text._ZN16FrontendHeapBase15gotoStartScreenER19FrontendApplication + 0x0000000008003542 0x6 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + 0x0000000008003542 FrontendHeapBase::gotoStartScreen(FrontendApplication&) + .text._ZN8touchgfx9PartitionINS_4meta8TypeListINS_12NoTransitionENS2_INS1_3NilES4_EEEELt1EED2Ev + 0x0000000008003548 0x14 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + 0x0000000008003548 touchgfx::Partition >, (unsigned short)1>::~Partition() + 0x0000000008003548 touchgfx::Partition >, (unsigned short)1>::~Partition() + .text._ZN8touchgfx9PartitionINS_4meta8TypeListINS_12NoTransitionENS2_INS1_3NilES4_EEEELt1EED0Ev + 0x000000000800355c 0x14 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + 0x000000000800355c touchgfx::Partition >, (unsigned short)1>::~Partition() + .text._ZN8touchgfx9PartitionINS_4meta8TypeListI14MainScreenViewNS2_INS1_3NilES4_EEEELt1EED2Ev + 0x0000000008003570 0x14 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + 0x0000000008003570 touchgfx::Partition >, (unsigned short)1>::~Partition() + 0x0000000008003570 touchgfx::Partition >, (unsigned short)1>::~Partition() + .text._ZN8touchgfx9PartitionINS_4meta8TypeListI14MainScreenViewNS2_INS1_3NilES4_EEEELt1EED0Ev + 0x0000000008003584 0x16 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + 0x0000000008003584 touchgfx::Partition >, (unsigned short)1>::~Partition() + *fill* 0x000000000800359a 0x2 + .text._ZN8touchgfx9PartitionINS_4meta8TypeListI19MainScreenPresenterNS2_INS1_3NilES4_EEEELt1EED2Ev + 0x000000000800359c 0x14 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + 0x000000000800359c touchgfx::Partition >, (unsigned short)1>::~Partition() + 0x000000000800359c touchgfx::Partition >, (unsigned short)1>::~Partition() + .text._ZN8touchgfx9PartitionINS_4meta8TypeListI19MainScreenPresenterNS2_INS1_3NilES4_EEEELt1EED0Ev + 0x00000000080035b0 0x14 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + 0x00000000080035b0 touchgfx::Partition >, (unsigned short)1>::~Partition() + .text._ZN12FrontendHeapD2Ev + 0x00000000080035c4 0x2c ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + 0x00000000080035c4 FrontendHeap::~FrontendHeap() + 0x00000000080035c4 FrontendHeap::~FrontendHeap() + .text.__tcf_0 0x00000000080035f0 0x10 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .text._ZN12FrontendHeapD0Ev + 0x0000000008003600 0x16 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + 0x0000000008003600 FrontendHeap::~FrontendHeap() + *fill* 0x0000000008003616 0x2 + .text.touchgfx_init + 0x0000000008003618 0xe4 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + 0x0000000008003618 touchgfx_init + .text.touchgfx_components_init + 0x00000000080036fc 0x2 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + 0x00000000080036fc touchgfx_components_init + *fill* 0x00000000080036fe 0x2 + .text.touchgfx_taskEntry + 0x0000000008003700 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + 0x0000000008003700 touchgfx_taskEntry + .text.startup._GLOBAL__sub_I_touchgfx_init + 0x000000000800370c 0xc4 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .text.exit._GLOBAL__sub_D_touchgfx_init + 0x00000000080037d0 0xc ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .text._ZN20TouchGFXGeneratedHAL19configureInterruptsEv + 0x00000000080037dc 0x14 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + 0x00000000080037dc TouchGFXGeneratedHAL::configureInterrupts() + .text._ZN20TouchGFXGeneratedHAL28enableLCDControllerInterruptEv + 0x00000000080037f0 0x34 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + 0x00000000080037f0 TouchGFXGeneratedHAL::enableLCDControllerInterrupt() + .text._ZNK20TouchGFXGeneratedHAL17getTFTFrameBufferEv + 0x0000000008003824 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + 0x0000000008003824 TouchGFXGeneratedHAL::getTFTFrameBuffer() const + .text._ZN20TouchGFXGeneratedHAL17setTFTFrameBufferEPt + 0x0000000008003830 0x10 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + 0x0000000008003830 TouchGFXGeneratedHAL::setTFTFrameBuffer(unsigned short*) + .text._ZN20TouchGFXGeneratedHAL15InvalidateCacheEv + 0x0000000008003840 0x50 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + 0x0000000008003840 TouchGFXGeneratedHAL::InvalidateCache() + 0x0000000008003840 TouchGFXGeneratedHAL::FlushCache() + .text._ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EED2Ev + 0x0000000008003890 0x2 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + 0x0000000008003890 DoubleBufferedVideoController<1ul, 480ul, 272ul, 960ul, (touchgfx::Bitmap::BitmapFormat)0>::~DoubleBufferedVideoController() + 0x0000000008003890 DoubleBufferedVideoController<1ul, 480ul, 272ul, 960ul, (touchgfx::Bitmap::BitmapFormat)0>::~DoubleBufferedVideoController() + .text._ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE21unregisterVideoWidgetEm + 0x0000000008003892 0x16 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + 0x0000000008003892 DoubleBufferedVideoController<1ul, 480ul, 272ul, 960ul, (touchgfx::Bitmap::BitmapFormat)0>::unregisterVideoWidget(unsigned long) + .text._ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE4drawEmRKNS0_4RectERKNS0_11VideoWidgetE + 0x00000000080038a8 0x2 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + 0x00000000080038a8 DoubleBufferedVideoController<1ul, 480ul, 272ul, 960ul, (touchgfx::Bitmap::BitmapFormat)0>::draw(unsigned long, touchgfx::Rect const&, touchgfx::VideoWidget const&) + *fill* 0x00000000080038aa 0x2 + .text._ZN20TouchGFXGeneratedHAL10initializeEv + 0x00000000080038ac 0x4c ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + 0x00000000080038ac TouchGFXGeneratedHAL::initialize() + .text._ZN20TouchGFXGeneratedHAL10beginFrameEv + 0x00000000080038f8 0x4 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + 0x00000000080038f8 TouchGFXGeneratedHAL::beginFrame() + .text._ZN20TouchGFXGeneratedHAL8endFrameEv + 0x00000000080038fc 0x4 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + 0x00000000080038fc TouchGFXGeneratedHAL::endFrame() + .text._ZN20TouchGFXGeneratedHAL16flushFrameBufferERKN8touchgfx4RectE + 0x0000000008003900 0x4 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + 0x0000000008003900 TouchGFXGeneratedHAL::flushFrameBuffer(touchgfx::Rect const&) + .text._ZN20TouchGFXGeneratedHAL9blockCopyEPvPKvm + 0x0000000008003904 0x4 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + 0x0000000008003904 TouchGFXGeneratedHAL::blockCopy(void*, void const*, unsigned long) + .text._ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EED0Ev + 0x0000000008003908 0xe ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + 0x0000000008003908 DoubleBufferedVideoController<1ul, 480ul, 272ul, 960ul, (touchgfx::Bitmap::BitmapFormat)0>::~DoubleBufferedVideoController() + *fill* 0x0000000008003916 0x2 + .text._ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE12getIsPlayingEm + 0x0000000008003918 0x24 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + 0x0000000008003918 DoubleBufferedVideoController<1ul, 480ul, 272ul, 960ul, (touchgfx::Bitmap::BitmapFormat)0>::getIsPlaying(unsigned long) + .text._ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE19getVideoInformationEmPNS0_16VideoInformationE + 0x000000000800393c 0x2c ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + 0x000000000800393c DoubleBufferedVideoController<1ul, 480ul, 272ul, 960ul, (touchgfx::Bitmap::BitmapFormat)0>::getVideoInformation(unsigned long, touchgfx::VideoInformation*) + .text._ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE21getCurrentFrameNumberEm + 0x0000000008003968 0x20 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + 0x0000000008003968 DoubleBufferedVideoController<1ul, 480ul, 272ul, 960ul, (touchgfx::Bitmap::BitmapFormat)0>::getCurrentFrameNumber(unsigned long) + .text._ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE12setFrameRateEmmm + 0x0000000008003988 0x28 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + 0x0000000008003988 DoubleBufferedVideoController<1ul, 480ul, 272ul, 960ul, (touchgfx::Bitmap::BitmapFormat)0>::setFrameRate(unsigned long, unsigned long, unsigned long) + .text._ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE10setCommandEmNS0_15VideoController7CommandEm + 0x00000000080039b0 0xb0 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + 0x00000000080039b0 DoubleBufferedVideoController<1ul, 480ul, 272ul, 960ul, (touchgfx::Bitmap::BitmapFormat)0>::setCommand(unsigned long, touchgfx::VideoController::Command, unsigned long) + .text._ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE11updateFrameEmRNS0_11VideoWidgetE + 0x0000000008003a60 0xe0 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + 0x0000000008003a60 DoubleBufferedVideoController<1ul, 480ul, 272ul, 960ul, (touchgfx::Bitmap::BitmapFormat)0>::updateFrame(unsigned long, touchgfx::VideoWidget&) + .text._ZN20TouchGFXGeneratedHAL16enableInterruptsEv + 0x0000000008003b40 0x14 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + 0x0000000008003b40 TouchGFXGeneratedHAL::enableInterrupts() + .text._ZN20TouchGFXGeneratedHAL17disableInterruptsEv + 0x0000000008003b54 0x28 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + 0x0000000008003b54 TouchGFXGeneratedHAL::disableInterrupts() + .text._ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE19registerVideoWidgetERNS0_11VideoWidgetE + 0x0000000008003b7c 0x88 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + 0x0000000008003b7c DoubleBufferedVideoController<1ul, 480ul, 272ul, 960ul, (touchgfx::Bitmap::BitmapFormat)0>::registerVideoWidget(touchgfx::VideoWidget&) + .text.HAL_LTDC_LineEventCallback + 0x0000000008003c04 0x64 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + 0x0000000008003c04 HAL_LTDC_LineEventCallback + .text._ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE16decoderTaskEntryEv + 0x0000000008003c68 0xc6 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + 0x0000000008003c68 DoubleBufferedVideoController<1ul, 480ul, 272ul, 960ul, (touchgfx::Bitmap::BitmapFormat)0>::decoderTaskEntry() + *fill* 0x0000000008003d2e 0x2 + .text.videoTaskFunc + 0x0000000008003d30 0xc ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + 0x0000000008003d30 videoTaskFunc + .text._ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE10clearStateEm + 0x0000000008003d3c 0x42 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + 0x0000000008003d3c DoubleBufferedVideoController<1ul, 480ul, 272ul, 960ul, (touchgfx::Bitmap::BitmapFormat)0>::clearState(unsigned long) + .text._ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE12setVideoDataEmRNS0_15VideoDataReaderE + 0x0000000008003d7e 0x1e ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + 0x0000000008003d7e DoubleBufferedVideoController<1ul, 480ul, 272ul, 960ul, (touchgfx::Bitmap::BitmapFormat)0>::setVideoData(unsigned long, touchgfx::VideoDataReader&) + .text._ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE12setVideoDataEmPKhm + 0x0000000008003d9c 0x20 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + 0x0000000008003d9c DoubleBufferedVideoController<1ul, 480ul, 272ul, 960ul, (touchgfx::Bitmap::BitmapFormat)0>::setVideoData(unsigned long, unsigned char const*, unsigned long) + .text.startup._GLOBAL__sub_I_lineBuffer + 0x0000000008003dbc 0x6c ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .text._ZN23ApplicationFontProviderD2Ev + 0x0000000008003e28 0x2 ./Application/User/generated/ApplicationFontProvider.o + 0x0000000008003e28 ApplicationFontProvider::~ApplicationFontProvider() + 0x0000000008003e28 ApplicationFontProvider::~ApplicationFontProvider() + .text._ZN23ApplicationFontProviderD0Ev + 0x0000000008003e2a 0xe ./Application/User/generated/ApplicationFontProvider.o + 0x0000000008003e2a ApplicationFontProvider::~ApplicationFontProvider() + .text._ZN23ApplicationFontProvider7getFontEt + 0x0000000008003e38 0x28 ./Application/User/generated/ApplicationFontProvider.o + 0x0000000008003e38 ApplicationFontProvider::getFont(unsigned short) + .text._ZN14BitmapDatabase11getInstanceEv + 0x0000000008003e60 0x8 ./Application/User/generated/BitmapDatabase.o + 0x0000000008003e60 BitmapDatabase::getInstance() + .text._ZN14BitmapDatabase15getInstanceSizeEv + 0x0000000008003e68 0x4 ./Application/User/generated/BitmapDatabase.o + 0x0000000008003e68 BitmapDatabase::getInstanceSize() + .text._ZNK8touchgfx4Font8getGlyphEt + 0x0000000008003e6c 0x20 ./Application/User/generated/CachedFont.o + 0x0000000008003e6c touchgfx::Font::getGlyph(unsigned short) const + .text._ZNK8touchgfx4Font15getFallbackCharEv + 0x0000000008003e8c 0x4 ./Application/User/generated/CachedFont.o + 0x0000000008003e8c touchgfx::Font::getFallbackChar() const + .text._ZNK8touchgfx4Font15getEllipsisCharEv + 0x0000000008003e90 0x4 ./Application/User/generated/CachedFont.o + 0x0000000008003e90 touchgfx::Font::getEllipsisChar() const + .text._ZNK8touchgfx4Font11getBaselineEv + 0x0000000008003e94 0x4 ./Application/User/generated/CachedFont.o + 0x0000000008003e94 touchgfx::Font::getBaseline() const + .text._ZNK8touchgfx4Font9getHeightEv + 0x0000000008003e98 0x4 ./Application/User/generated/CachedFont.o + 0x0000000008003e98 touchgfx::Font::getHeight() const + .text._ZNK8touchgfx4Font15getBitsPerPixelEv + 0x0000000008003e9c 0x8 ./Application/User/generated/CachedFont.o + 0x0000000008003e9c touchgfx::Font::getBitsPerPixel() const + .text._ZNK8touchgfx4Font15getByteAlignRowEv + 0x0000000008003ea4 0x6 ./Application/User/generated/CachedFont.o + 0x0000000008003ea4 touchgfx::Font::getByteAlignRow() const + .text._ZN8touchgfx9TypedTextD2Ev + 0x0000000008003eaa 0x2 ./Application/User/generated/FontCache.o + 0x0000000008003eaa touchgfx::TypedText::~TypedText() + 0x0000000008003eaa touchgfx::TypedText::~TypedText() + .text._ZN8touchgfx9TypedTextD0Ev + 0x0000000008003eac 0xe ./Application/User/generated/FontCache.o + 0x0000000008003eac touchgfx::TypedText::~TypedText() + .text._ZN8touchgfx11Application19changeToStartScreenEv + 0x0000000008003eba 0x2 ./Application/User/generated/FrontendApplicationBase.o + 0x0000000008003eba touchgfx::Application::changeToStartScreen() + .text._ZN8touchgfx11Application15appSwitchScreenEh + 0x0000000008003ebc 0x2 ./Application/User/generated/FrontendApplicationBase.o + 0x0000000008003ebc touchgfx::Application::appSwitchScreen(unsigned char) + .text._ZN8touchgfx11Application13requestRedrawERNS_4RectE + 0x0000000008003ebe 0xc ./Application/User/generated/FrontendApplicationBase.o + 0x0000000008003ebe touchgfx::Application::requestRedraw(touchgfx::Rect&) + .text._ZN8touchgfx10Transition8tearDownEv + 0x0000000008003eca 0x2 ./Application/User/generated/FrontendApplicationBase.o + 0x0000000008003eca touchgfx::Transition::tearDown() + .text._ZN8touchgfx10Transition4initEv + 0x0000000008003ecc 0x2 ./Application/User/generated/FrontendApplicationBase.o + 0x0000000008003ecc touchgfx::Transition::init() + .text._ZN8touchgfx10Transition18setScreenContainerERNS_9ContainerE + 0x0000000008003ece 0x4 ./Application/User/generated/FrontendApplicationBase.o + 0x0000000008003ece touchgfx::Transition::setScreenContainer(touchgfx::Container&) + .text._ZN23FrontendApplicationBaseD2Ev + 0x0000000008003ed2 0x2 ./Application/User/generated/FrontendApplicationBase.o + 0x0000000008003ed2 FrontendApplicationBase::~FrontendApplicationBase() + 0x0000000008003ed2 FrontendApplicationBase::~FrontendApplicationBase() + .text._ZN23FrontendApplicationBase19changeToStartScreenEv + 0x0000000008003ed4 0x20 ./Application/User/generated/FrontendApplicationBase.o + 0x0000000008003ed4 FrontendApplicationBase::changeToStartScreen() + .text._ZN8touchgfx12NoTransition15handleTickEventEv + 0x0000000008003ef4 0x6 ./Application/User/generated/FrontendApplicationBase.o + 0x0000000008003ef4 touchgfx::NoTransition::handleTickEvent() + .text._ZN8touchgfx12NoTransitionD2Ev + 0x0000000008003efa 0x2 ./Application/User/generated/FrontendApplicationBase.o + 0x0000000008003efa touchgfx::NoTransition::~NoTransition() + 0x0000000008003efa touchgfx::NoTransition::~NoTransition() + .text._ZN8touchgfx8CallbackI23FrontendApplicationBasevvvED2Ev + 0x0000000008003efc 0x2 ./Application/User/generated/FrontendApplicationBase.o + 0x0000000008003efc touchgfx::Callback::~Callback() + 0x0000000008003efc touchgfx::Callback::~Callback() + .text._ZN8touchgfx8CallbackI23FrontendApplicationBasevvvE7executeEv + 0x0000000008003efe 0x20 ./Application/User/generated/FrontendApplicationBase.o + 0x0000000008003efe touchgfx::Callback::execute() + .text._ZNK8touchgfx8CallbackI23FrontendApplicationBasevvvE7isValidEv + 0x0000000008003f1e 0x18 ./Application/User/generated/FrontendApplicationBase.o + 0x0000000008003f1e touchgfx::Callback::isValid() const + .text._ZN8touchgfx12NoTransitionD0Ev + 0x0000000008003f36 0xe ./Application/User/generated/FrontendApplicationBase.o + 0x0000000008003f36 touchgfx::NoTransition::~NoTransition() + .text._ZN8touchgfx8CallbackI23FrontendApplicationBasevvvED0Ev + 0x0000000008003f44 0xe ./Application/User/generated/FrontendApplicationBase.o + 0x0000000008003f44 touchgfx::Callback::~Callback() + .text._ZN23FrontendApplicationBaseD0Ev + 0x0000000008003f52 0x10 ./Application/User/generated/FrontendApplicationBase.o + 0x0000000008003f52 FrontendApplicationBase::~FrontendApplicationBase() + .text._ZN8touchgfx10Transition10invalidateEv + 0x0000000008003f62 0x10 ./Application/User/generated/FrontendApplicationBase.o + 0x0000000008003f62 touchgfx::Transition::invalidate() + .text._ZN8touchgfx14MVPApplication29handlePendingScreenTransitionEv + 0x0000000008003f72 0x24 ./Application/User/generated/FrontendApplicationBase.o + 0x0000000008003f72 touchgfx::MVPApplication::handlePendingScreenTransition() + *fill* 0x0000000008003f96 0x2 + .text._ZN23FrontendApplicationBase36gotoMainScreenScreenNoTransitionImplEv + 0x0000000008003f98 0x154 ./Application/User/generated/FrontendApplicationBase.o + 0x0000000008003f98 FrontendApplicationBase::gotoMainScreenScreenNoTransitionImpl() + .text._ZN8touchgfx3HAL3lcdEv + 0x00000000080040ec 0x18 ./Application/User/generated/FrontendApplicationBase.o + 0x00000000080040ec touchgfx::HAL::lcd() + .text._ZN23FrontendApplicationBaseC2ER5ModelR12FrontendHeap + 0x0000000008004104 0x60 ./Application/User/generated/FrontendApplicationBase.o + 0x0000000008004104 FrontendApplicationBase::FrontendApplicationBase(Model&, FrontendHeap&) + 0x0000000008004104 FrontendApplicationBase::FrontendApplicationBase(Model&, FrontendHeap&) + .text._ZN23FrontendApplicationBase32gotoMainScreenScreenNoTransitionEv + 0x0000000008004164 0x20 ./Application/User/generated/FrontendApplicationBase.o + 0x0000000008004164 FrontendApplicationBase::gotoMainScreenScreenNoTransition() + .text._ZNK8touchgfx13GeneratedFont12getGSUBTableEv + 0x0000000008004184 0x4 ./Application/User/generated/GeneratedFont.o + 0x0000000008004184 touchgfx::GeneratedFont::getGSUBTable() const + .text._ZNK8touchgfx13GeneratedFont23getContextualFormsTableEv + 0x0000000008004188 0x4 ./Application/User/generated/GeneratedFont.o + 0x0000000008004188 touchgfx::GeneratedFont::getContextualFormsTable() const + .text._ZN8touchgfx13GeneratedFontD2Ev + 0x000000000800418c 0x2 ./Application/User/generated/GeneratedFont.o + 0x000000000800418c touchgfx::GeneratedFont::~GeneratedFont() + 0x000000000800418c touchgfx::GeneratedFont::~GeneratedFont() + .text._ZNK8touchgfx13GeneratedFont12getPixelDataEPKNS_9GlyphNodeE + 0x000000000800418e 0x10 ./Application/User/generated/GeneratedFont.o + 0x000000000800418e touchgfx::GeneratedFont::getPixelData(touchgfx::GlyphNode const*) const + .text._ZNK8touchgfx13GeneratedFont10getKerningEtPKNS_9GlyphNodeE + 0x000000000800419e 0x3a ./Application/User/generated/GeneratedFont.o + 0x000000000800419e touchgfx::GeneratedFont::getKerning(unsigned short, touchgfx::GlyphNode const*) const + .text._ZN8touchgfx13GeneratedFontD0Ev + 0x00000000080041d8 0xe ./Application/User/generated/GeneratedFont.o + 0x00000000080041d8 touchgfx::GeneratedFont::~GeneratedFont() + *fill* 0x00000000080041e6 0x2 + .text._ZN8touchgfx13GeneratedFontC2EPKNS_9GlyphNodeEttthhhhhhPKPKhPKNS_11KerningNodeEttPKtPKNS_24FontContextualFormsTableE + 0x00000000080041e8 0x60 ./Application/User/generated/GeneratedFont.o + 0x00000000080041e8 touchgfx::GeneratedFont::GeneratedFont(touchgfx::GlyphNode const*, unsigned short, unsigned short, unsigned short, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char const* const*, touchgfx::KerningNode const*, unsigned short, unsigned short, unsigned short const*, touchgfx::FontContextualFormsTable const*) + 0x00000000080041e8 touchgfx::GeneratedFont::GeneratedFont(touchgfx::GlyphNode const*, unsigned short, unsigned short, unsigned short, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char const* const*, touchgfx::KerningNode const*, unsigned short, unsigned short, unsigned short const*, touchgfx::FontContextualFormsTable const*) + .text._ZN8touchgfx8Drawable13getFirstChildEv + 0x0000000008004248 0x4 ./Application/User/generated/MainScreenViewBase.o + 0x0000000008004248 touchgfx::Drawable::getFirstChild() + .text._ZN8touchgfx8Drawable4setXEs + 0x000000000800424c 0x4 ./Application/User/generated/MainScreenViewBase.o + 0x000000000800424c touchgfx::Drawable::setX(short) + .text._ZN8touchgfx8Drawable4setYEs + 0x0000000008004250 0x4 ./Application/User/generated/MainScreenViewBase.o + 0x0000000008004250 touchgfx::Drawable::setY(short) + .text._ZN8touchgfx8Drawable8setWidthEs + 0x0000000008004254 0x4 ./Application/User/generated/MainScreenViewBase.o + 0x0000000008004254 touchgfx::Drawable::setWidth(short) + .text._ZN8touchgfx8Drawable9setHeightEs + 0x0000000008004258 0x4 ./Application/User/generated/MainScreenViewBase.o + 0x0000000008004258 touchgfx::Drawable::setHeight(short) + .text._ZN8touchgfx8Drawable20childGeometryChangedEv + 0x000000000800425c 0x2 ./Application/User/generated/MainScreenViewBase.o + 0x000000000800425c touchgfx::Drawable::childGeometryChanged() + .text._ZN8touchgfx8Drawable16handleClickEventERKNS_10ClickEventE + 0x000000000800425e 0x2 ./Application/User/generated/MainScreenViewBase.o + 0x000000000800425e touchgfx::Drawable::handleClickEvent(touchgfx::ClickEvent const&) + .text._ZN8touchgfx8Drawable18handleGestureEventERKNS_12GestureEventE + 0x0000000008004260 0x2 ./Application/User/generated/MainScreenViewBase.o + 0x0000000008004260 touchgfx::Drawable::handleGestureEvent(touchgfx::GestureEvent const&) + .text._ZN8touchgfx8Drawable15handleDragEventERKNS_9DragEventE + 0x0000000008004262 0x2 ./Application/User/generated/MainScreenViewBase.o + 0x0000000008004262 touchgfx::Drawable::handleDragEvent(touchgfx::DragEvent const&) + .text._ZN8touchgfx8Drawable15handleTickEventEv + 0x0000000008004264 0x2 ./Application/User/generated/MainScreenViewBase.o + 0x0000000008004264 touchgfx::Drawable::handleTickEvent() + .text._ZN8touchgfx8Drawable6moveToEss + 0x0000000008004266 0x18 ./Application/User/generated/MainScreenViewBase.o + 0x0000000008004266 touchgfx::Drawable::moveTo(short, short) + .text._ZN8touchgfx8Drawable14setupDrawChainERKNS_4RectEPPS0_ + 0x000000000800427e 0x14 ./Application/User/generated/MainScreenViewBase.o + 0x000000000800427e touchgfx::Drawable::setupDrawChain(touchgfx::Rect const&, touchgfx::Drawable**) + .text._ZN8touchgfx6Screen11setupScreenEv + 0x0000000008004292 0x2 ./Application/User/generated/MainScreenViewBase.o + 0x0000000008004292 touchgfx::Screen::setupScreen() + .text._ZN8touchgfx6Screen15afterTransitionEv + 0x0000000008004294 0x2 ./Application/User/generated/MainScreenViewBase.o + 0x0000000008004294 touchgfx::Screen::afterTransition() + .text._ZN8touchgfx6Screen14tearDownScreenEv + 0x0000000008004296 0x2 ./Application/User/generated/MainScreenViewBase.o + 0x0000000008004296 touchgfx::Screen::tearDownScreen() + .text._ZN8touchgfx6Screen15handleTickEventEv + 0x0000000008004298 0x2 ./Application/User/generated/MainScreenViewBase.o + 0x0000000008004298 touchgfx::Screen::handleTickEvent() + .text._ZN8touchgfx6Screen14handleKeyEventEh + 0x000000000800429a 0x2 ./Application/User/generated/MainScreenViewBase.o + 0x000000000800429a touchgfx::Screen::handleKeyEvent(unsigned char) + .text._ZN8touchgfx6Widget12getLastChildEssPPNS_8DrawableE + 0x000000000800429c 0x10 ./Application/User/generated/MainScreenViewBase.o + 0x000000000800429c touchgfx::Widget::getLastChild(short, short, touchgfx::Drawable**) + .text._ZN18MainScreenViewBase10updatePwm1Eh + 0x00000000080042ac 0x2 ./Application/User/generated/MainScreenViewBase.o + 0x00000000080042ac MainScreenViewBase::updatePwm1(unsigned char) + .text._ZN18MainScreenViewBase10updatePwm2Eh + 0x00000000080042ae 0x2 ./Application/User/generated/MainScreenViewBase.o + 0x00000000080042ae MainScreenViewBase::updatePwm2(unsigned char) + .text._ZN18MainScreenViewBase10updatePwm3Eh + 0x00000000080042b0 0x2 ./Application/User/generated/MainScreenViewBase.o + 0x00000000080042b0 MainScreenViewBase::updatePwm3(unsigned char) + .text._ZN18MainScreenViewBase10updatePwm4Eh + 0x00000000080042b2 0x2 ./Application/User/generated/MainScreenViewBase.o + 0x00000000080042b2 MainScreenViewBase::updatePwm4(unsigned char) + .text._ZN18MainScreenViewBase10updatePwm5Eh + 0x00000000080042b4 0x2 ./Application/User/generated/MainScreenViewBase.o + 0x00000000080042b4 MainScreenViewBase::updatePwm5(unsigned char) + .text._ZN18MainScreenViewBase10updatePwm6Eh + 0x00000000080042b6 0x2 ./Application/User/generated/MainScreenViewBase.o + 0x00000000080042b6 MainScreenViewBase::updatePwm6(unsigned char) + .text._ZN18MainScreenViewBase10updatePwm7Eh + 0x00000000080042b8 0x2 ./Application/User/generated/MainScreenViewBase.o + 0x00000000080042b8 MainScreenViewBase::updatePwm7(unsigned char) + .text._ZN18MainScreenViewBase10updatePwm8Eh + 0x00000000080042ba 0x2 ./Application/User/generated/MainScreenViewBase.o + 0x00000000080042ba MainScreenViewBase::updatePwm8(unsigned char) + .text._ZN18MainScreenViewBase40sliderContainer1UpdatePwmCallbackHandlerEh + 0x00000000080042bc 0x6 ./Application/User/generated/MainScreenViewBase.o + 0x00000000080042bc MainScreenViewBase::sliderContainer1UpdatePwmCallbackHandler(unsigned char) + .text._ZN18MainScreenViewBase40sliderContainer2UpdatePwmCallbackHandlerEh + 0x00000000080042c2 0x6 ./Application/User/generated/MainScreenViewBase.o + 0x00000000080042c2 MainScreenViewBase::sliderContainer2UpdatePwmCallbackHandler(unsigned char) + .text._ZN18MainScreenViewBase40sliderContainer3UpdatePwmCallbackHandlerEh + 0x00000000080042c8 0x6 ./Application/User/generated/MainScreenViewBase.o + 0x00000000080042c8 MainScreenViewBase::sliderContainer3UpdatePwmCallbackHandler(unsigned char) + .text._ZN18MainScreenViewBase40sliderContainer4UpdatePwmCallbackHandlerEh + 0x00000000080042ce 0x6 ./Application/User/generated/MainScreenViewBase.o + 0x00000000080042ce MainScreenViewBase::sliderContainer4UpdatePwmCallbackHandler(unsigned char) + .text._ZN18MainScreenViewBase40sliderContainer5UpdatePwmCallbackHandlerEh + 0x00000000080042d4 0x6 ./Application/User/generated/MainScreenViewBase.o + 0x00000000080042d4 MainScreenViewBase::sliderContainer5UpdatePwmCallbackHandler(unsigned char) + .text._ZN18MainScreenViewBase40sliderContainer6UpdatePwmCallbackHandlerEh + 0x00000000080042da 0x6 ./Application/User/generated/MainScreenViewBase.o + 0x00000000080042da MainScreenViewBase::sliderContainer6UpdatePwmCallbackHandler(unsigned char) + .text._ZN18MainScreenViewBase40sliderContainer7UpdatePwmCallbackHandlerEh + 0x00000000080042e0 0x6 ./Application/User/generated/MainScreenViewBase.o + 0x00000000080042e0 MainScreenViewBase::sliderContainer7UpdatePwmCallbackHandler(unsigned char) + .text._ZN18MainScreenViewBase40sliderContainer8UpdatePwmCallbackHandlerEh + 0x00000000080042e6 0x6 ./Application/User/generated/MainScreenViewBase.o + 0x00000000080042e6 MainScreenViewBase::sliderContainer8UpdatePwmCallbackHandler(unsigned char) + .text._ZN8touchgfx8CallbackI18MainScreenViewBasehvvED2Ev + 0x00000000080042ec 0x2 ./Application/User/generated/MainScreenViewBase.o + 0x00000000080042ec touchgfx::Callback::~Callback() + 0x00000000080042ec touchgfx::Callback::~Callback() + .text._ZN8touchgfx8CallbackI18MainScreenViewBasehvvE7executeEh + 0x00000000080042ee 0x1e ./Application/User/generated/MainScreenViewBase.o + 0x00000000080042ee touchgfx::Callback::execute(unsigned char) + .text._ZNK8touchgfx8CallbackI18MainScreenViewBasehvvE7isValidEv + 0x000000000800430c 0x18 ./Application/User/generated/MainScreenViewBase.o + 0x000000000800430c touchgfx::Callback::isValid() const + .text._ZN8touchgfx8CallbackI18MainScreenViewBasehvvED0Ev + 0x0000000008004324 0xe ./Application/User/generated/MainScreenViewBase.o + 0x0000000008004324 touchgfx::Callback::~Callback() + .text._ZN18MainScreenViewBase11setupScreenEv + 0x0000000008004332 0x46 ./Application/User/generated/MainScreenViewBase.o + 0x0000000008004332 MainScreenViewBase::setupScreen() + .text._ZNK8touchgfx8Drawable17invalidateContentEv + 0x0000000008004378 0xe ./Application/User/generated/MainScreenViewBase.o + 0x0000000008004378 touchgfx::Drawable::invalidateContent() const + .text._ZN8touchgfx8Drawable5setXYEss + 0x0000000008004386 0x1a ./Application/User/generated/MainScreenViewBase.o + 0x0000000008004386 touchgfx::Drawable::setXY(short, short) + .text._ZN8touchgfx8Drawable11setPositionEssss + 0x00000000080043a0 0x26 ./Application/User/generated/MainScreenViewBase.o + 0x00000000080043a0 touchgfx::Drawable::setPosition(short, short, short, short) + *fill* 0x00000000080043c6 0x2 + .text._ZN8touchgfx3BoxC2Ev + 0x00000000080043c8 0x2c ./Application/User/generated/MainScreenViewBase.o + 0x00000000080043c8 touchgfx::Box::Box() + 0x00000000080043c8 touchgfx::Box::Box() + .text._ZN15SliderContainerD2Ev + 0x00000000080043f4 0x14 ./Application/User/generated/MainScreenViewBase.o + 0x00000000080043f4 SliderContainer::~SliderContainer() + 0x00000000080043f4 SliderContainer::~SliderContainer() + .text._ZN18MainScreenViewBaseD2Ev + 0x0000000008004408 0x50 ./Application/User/generated/MainScreenViewBase.o + 0x0000000008004408 MainScreenViewBase::~MainScreenViewBase() + 0x0000000008004408 MainScreenViewBase::~MainScreenViewBase() + .text._ZN18MainScreenViewBaseD0Ev + 0x0000000008004458 0x16 ./Application/User/generated/MainScreenViewBase.o + 0x0000000008004458 MainScreenViewBase::~MainScreenViewBase() + .text._ZN15SliderContainerD0Ev + 0x000000000800446e 0x16 ./Application/User/generated/MainScreenViewBase.o + 0x000000000800446e SliderContainer::~SliderContainer() + .text._ZN18MainScreenViewBaseC2Ev + 0x0000000008004484 0x25c ./Application/User/generated/MainScreenViewBase.o + 0x0000000008004484 MainScreenViewBase::MainScreenViewBase() + 0x0000000008004484 MainScreenViewBase::MainScreenViewBase() + .text._ZN8touchgfx9Container13getFirstChildEv + 0x00000000080046e0 0x4 ./Application/User/generated/SliderContainerBase.o + 0x00000000080046e0 touchgfx::Container::getFirstChild() + .text._ZN8touchgfx8TextArea8setWidthEs + 0x00000000080046e4 0x24 ./Application/User/generated/SliderContainerBase.o + 0x00000000080046e4 touchgfx::TextArea::setWidth(short) + .text._ZN8touchgfx8TextArea9setHeightEs + 0x0000000008004708 0x24 ./Application/User/generated/SliderContainerBase.o + 0x0000000008004708 touchgfx::TextArea::setHeight(short) + .text._ZNK8touchgfx8TextArea12getSolidRectEv + 0x000000000800472c 0xc ./Application/User/generated/SliderContainerBase.o + 0x000000000800472c touchgfx::TextArea::getSolidRect() const + .text._ZN8touchgfx8TextArea8setAlphaEh + 0x0000000008004738 0x6 ./Application/User/generated/SliderContainerBase.o + 0x0000000008004738 touchgfx::TextArea::setAlpha(unsigned char) + .text._ZN8touchgfx8TextArea13setXBaselineYEss + 0x000000000800473e 0x1a ./Application/User/generated/SliderContainerBase.o + 0x000000000800473e touchgfx::TextArea::setXBaselineY(short, short) + .text._ZNK8touchgfx8TextArea12getWildcard2Ev + 0x0000000008004758 0x4 ./Application/User/generated/SliderContainerBase.o + 0x0000000008004758 touchgfx::TextArea::getWildcard2() const + .text._ZNK8touchgfx23TextAreaWithOneWildcard12getWildcard1Ev + 0x000000000800475c 0x4 ./Application/User/generated/SliderContainerBase.o + 0x000000000800475c touchgfx::TextAreaWithOneWildcard::getWildcard1() const + .text._ZN19SliderContainerBaseD2Ev + 0x0000000008004760 0x2 ./Application/User/generated/SliderContainerBase.o + 0x0000000008004760 SliderContainerBase::~SliderContainerBase() + 0x0000000008004760 SliderContainerBase::~SliderContainerBase() + .text._ZN19SliderContainerBase10initializeEv + 0x0000000008004762 0x2 ./Application/User/generated/SliderContainerBase.o + 0x0000000008004762 SliderContainerBase::initialize() + .text._ZN8touchgfx8CallbackI19SliderContainerBaseRKNS_6SliderEivED2Ev + 0x0000000008004764 0x2 ./Application/User/generated/SliderContainerBase.o + 0x0000000008004764 touchgfx::Callback::~Callback() + 0x0000000008004764 touchgfx::Callback::~Callback() + .text._ZN8touchgfx23TextAreaWithOneWildcardD2Ev + 0x0000000008004766 0x2 ./Application/User/generated/SliderContainerBase.o + 0x0000000008004766 touchgfx::TextAreaWithOneWildcard::~TextAreaWithOneWildcard() + 0x0000000008004766 touchgfx::TextAreaWithOneWildcard::~TextAreaWithOneWildcard() + .text._ZN8touchgfx8CallbackI19SliderContainerBaseRKNS_6SliderEivE7executeES4_i + 0x0000000008004768 0x1c ./Application/User/generated/SliderContainerBase.o + 0x0000000008004768 touchgfx::Callback::execute(touchgfx::Slider const&, int) + .text._ZNK8touchgfx8CallbackI19SliderContainerBaseRKNS_6SliderEivE7isValidEv + 0x0000000008004784 0x18 ./Application/User/generated/SliderContainerBase.o + 0x0000000008004784 touchgfx::Callback::isValid() const + .text._ZN8touchgfx23TextAreaWithOneWildcardD0Ev + 0x000000000800479c 0xe ./Application/User/generated/SliderContainerBase.o + 0x000000000800479c touchgfx::TextAreaWithOneWildcard::~TextAreaWithOneWildcard() + .text._ZN8touchgfx8CallbackI19SliderContainerBaseRKNS_6SliderEivED0Ev + 0x00000000080047aa 0xe ./Application/User/generated/SliderContainerBase.o + 0x00000000080047aa touchgfx::Callback::~Callback() + .text._ZN19SliderContainerBaseD0Ev + 0x00000000080047b8 0x10 ./Application/User/generated/SliderContainerBase.o + 0x00000000080047b8 SliderContainerBase::~SliderContainerBase() + .text._ZNK8touchgfx24TextAreaWithWildcardBase17invalidateContentEv + 0x00000000080047c8 0x8 ./Application/User/generated/SliderContainerBase.o + 0x00000000080047c8 touchgfx::TextAreaWithWildcardBase::invalidateContent() const + .text._ZN19SliderContainerBase21emitUpdatePwmCallbackEh + 0x00000000080047d0 0x2a ./Application/User/generated/SliderContainerBase.o + 0x00000000080047d0 SliderContainerBase::emitUpdatePwmCallback(unsigned char) + *fill* 0x00000000080047fa 0x2 + .text._ZN19SliderContainerBase33sliderValueChangedCallbackHandlerERKN8touchgfx6SliderEi + 0x00000000080047fc 0x3c ./Application/User/generated/SliderContainerBase.o + 0x00000000080047fc SliderContainerBase::sliderValueChangedCallbackHandler(touchgfx::Slider const&, int) + .text._ZN8touchgfx8TextArea12setBaselineYEs + 0x0000000008004838 0x6c ./Application/User/generated/SliderContainerBase.o + 0x0000000008004838 touchgfx::TextArea::setBaselineY(short) + .text._ZNK8touchgfx24TextAreaWithWildcardBase21calculateBoundingAreaEv + 0x00000000080048a4 0xe ./Application/User/generated/SliderContainerBase.o + 0x00000000080048a4 touchgfx::TextAreaWithWildcardBase::calculateBoundingArea() const + *fill* 0x00000000080048b2 0x2 + .text._ZN8touchgfx8TextAreaC2Ev + 0x00000000080048b4 0x44 ./Application/User/generated/SliderContainerBase.o + 0x00000000080048b4 touchgfx::TextArea::TextArea() + 0x00000000080048b4 touchgfx::TextArea::TextArea() + .text._ZN19SliderContainerBaseC2Ev + 0x00000000080048f8 0x1a0 ./Application/User/generated/SliderContainerBase.o + 0x00000000080048f8 SliderContainerBase::SliderContainerBase() + 0x00000000080048f8 SliderContainerBase::SliderContainerBase() + .text.__tcf_0 0x0000000008004a98 0x2 ./Application/User/generated/Table_verdana_10_4bpp.o + *fill* 0x0000000008004a9a 0x2 + .text._Z23getFont_verdana_10_4bppv + 0x0000000008004a9c 0x78 ./Application/User/generated/Table_verdana_10_4bpp.o + 0x0000000008004a9c getFont_verdana_10_4bpp() + .text.__tcf_0 0x0000000008004b14 0x2 ./Application/User/generated/Table_verdana_20_4bpp.o + *fill* 0x0000000008004b16 0x2 + .text._Z23getFont_verdana_20_4bppv + 0x0000000008004b18 0x74 ./Application/User/generated/Table_verdana_20_4bpp.o + 0x0000000008004b18 getFont_verdana_20_4bpp() + .text.__tcf_0 0x0000000008004b8c 0x2 ./Application/User/generated/Table_verdana_40_4bpp.o + *fill* 0x0000000008004b8e 0x2 + .text._Z23getFont_verdana_40_4bppv + 0x0000000008004b90 0x74 ./Application/User/generated/Table_verdana_40_4bpp.o + 0x0000000008004b90 getFont_verdana_40_4bpp() + .text._ZNK8touchgfx4Font12getGSUBTableEv + 0x0000000008004c04 0x4 ./Application/User/generated/Texts.o + 0x0000000008004c04 touchgfx::Font::getGSUBTable() const + .text._ZNK8touchgfx4Font23getContextualFormsTableEv + 0x0000000008004c08 0x4 ./Application/User/generated/Texts.o + 0x0000000008004c08 touchgfx::Font::getContextualFormsTable() const + .text._ZNK8touchgfx4Font14getStringWidthEPKtz + 0x0000000008004c0c 0x1c ./Application/User/generated/Texts.o + 0x0000000008004c0c touchgfx::Font::getStringWidth(unsigned short const*, ...) const + .text._ZNK8touchgfx4Font14getStringWidthEhPKtz + 0x0000000008004c28 0x1a ./Application/User/generated/Texts.o + 0x0000000008004c28 touchgfx::Font::getStringWidth(unsigned char, unsigned short const*, ...) const + *fill* 0x0000000008004c42 0x2 + .text._ZN8touchgfx12TextProvider15getNextLigatureEh + 0x0000000008004c44 0x84 ./Application/User/generated/Texts.o + 0x0000000008004c44 touchgfx::TextProvider::getNextLigature(unsigned char) + .text._ZN8touchgfx12TextProvider18initializeInternalEv + 0x0000000008004cc8 0x4 ./Application/User/generated/Texts.o + 0x0000000008004cc8 touchgfx::TextProvider::initializeInternal() + .text._ZN8touchgfx3LCD10drawStringENS_4RectERKS1_RKNS0_13StringVisualsEPKtz + 0x0000000008004ccc 0x22 ./Application/User/generated/Texts.o + 0x0000000008004ccc touchgfx::LCD::drawString(touchgfx::Rect, touchgfx::Rect const&, touchgfx::LCD::StringVisuals const&, unsigned short const*, ...) + *fill* 0x0000000008004cee 0x2 + .text._ZN8touchgfx5Texts11setLanguageEt + 0x0000000008004cf0 0x78 ./Application/User/generated/Texts.o + 0x0000000008004cf0 touchgfx::Texts::setLanguage(unsigned short) + .text._ZNK8touchgfx5Texts7getTextEt + 0x0000000008004d68 0x1c ./Application/User/generated/Texts.o + 0x0000000008004d68 touchgfx::Texts::getText(unsigned short) const + .text._ZN17TypedTextDatabase15getInstanceSizeEv + 0x0000000008004d84 0x4 ./Application/User/generated/TypedTextDatabase.o + 0x0000000008004d84 TypedTextDatabase::getInstanceSize() + .text._ZN17TypedTextDatabase8getFontsEv + 0x0000000008004d88 0x8 ./Application/User/generated/TypedTextDatabase.o + 0x0000000008004d88 TypedTextDatabase::getFonts() + .text.startup._GLOBAL__sub_I_touchgfx_fonts + 0x0000000008004d90 0x1c ./Application/User/generated/TypedTextDatabase.o + .text._ZN19FrontendApplicationD2Ev + 0x0000000008004dac 0x2 ./Application/User/gui/FrontendApplication.o + 0x0000000008004dac FrontendApplication::~FrontendApplication() + 0x0000000008004dac FrontendApplication::~FrontendApplication() + .text._ZN19FrontendApplicationD0Ev + 0x0000000008004dae 0x10 ./Application/User/gui/FrontendApplication.o + 0x0000000008004dae FrontendApplication::~FrontendApplication() + .text._ZN19FrontendApplication15handleTickEventEv + 0x0000000008004dbe 0x16 ./Application/User/gui/FrontendApplication.o + 0x0000000008004dbe FrontendApplication::handleTickEvent() + .text._ZN19FrontendApplicationC2ER5ModelR12FrontendHeap + 0x0000000008004dd4 0x14 ./Application/User/gui/FrontendApplication.o + 0x0000000008004dd4 FrontendApplication::FrontendApplication(Model&, FrontendHeap&) + 0x0000000008004dd4 FrontendApplication::FrontendApplication(Model&, FrontendHeap&) + .text._ZN19MainScreenPresenterD2Ev + 0x0000000008004de8 0x6 ./Application/User/gui/MainScreenPresenter.o + 0x0000000008004de8 MainScreenPresenter::~MainScreenPresenter() + 0x0000000008004de8 MainScreenPresenter::~MainScreenPresenter() + 0x0000000008004dea non-virtual thunk to MainScreenPresenter::~MainScreenPresenter() + .text._ZN19MainScreenPresenter8activateEv + 0x0000000008004dee 0x2 ./Application/User/gui/MainScreenPresenter.o + 0x0000000008004dee MainScreenPresenter::activate() + 0x0000000008004dee MainScreenPresenter::deactivate() + .text._ZN19MainScreenPresenterD0Ev + 0x0000000008004df0 0x14 ./Application/User/gui/MainScreenPresenter.o + 0x0000000008004df0 MainScreenPresenter::~MainScreenPresenter() + 0x0000000008004dfe non-virtual thunk to MainScreenPresenter::~MainScreenPresenter() + .text._ZN19MainScreenPresenter18SetPwmValueFromHmiEhh + 0x0000000008004e04 0x6 ./Application/User/gui/MainScreenPresenter.o + 0x0000000008004e04 MainScreenPresenter::SetPwmValueFromHmi(unsigned char, unsigned char) + *fill* 0x0000000008004e0a 0x2 + .text._ZN19MainScreenPresenterC2ER14MainScreenView + 0x0000000008004e0c 0x1c ./Application/User/gui/MainScreenPresenter.o + 0x0000000008004e0c MainScreenPresenter::MainScreenPresenter(MainScreenView&) + 0x0000000008004e0c MainScreenPresenter::MainScreenPresenter(MainScreenView&) + .text._ZN14MainScreenView14tearDownScreenEv + 0x0000000008004e28 0x2 ./Application/User/gui/MainScreenView.o + 0x0000000008004e28 MainScreenView::tearDownScreen() + .text._ZN14MainScreenView10updatePwm1Eh + 0x0000000008004e2a 0xc ./Application/User/gui/MainScreenView.o + 0x0000000008004e2a MainScreenView::updatePwm1(unsigned char) + .text._ZN14MainScreenView10updatePwm2Eh + 0x0000000008004e36 0xc ./Application/User/gui/MainScreenView.o + 0x0000000008004e36 MainScreenView::updatePwm2(unsigned char) + .text._ZN14MainScreenView10updatePwm3Eh + 0x0000000008004e42 0xc ./Application/User/gui/MainScreenView.o + 0x0000000008004e42 MainScreenView::updatePwm3(unsigned char) + .text._ZN14MainScreenView10updatePwm4Eh + 0x0000000008004e4e 0xc ./Application/User/gui/MainScreenView.o + 0x0000000008004e4e MainScreenView::updatePwm4(unsigned char) + .text._ZN14MainScreenView10updatePwm5Eh + 0x0000000008004e5a 0xc ./Application/User/gui/MainScreenView.o + 0x0000000008004e5a MainScreenView::updatePwm5(unsigned char) + .text._ZN14MainScreenView10updatePwm6Eh + 0x0000000008004e66 0xc ./Application/User/gui/MainScreenView.o + 0x0000000008004e66 MainScreenView::updatePwm6(unsigned char) + .text._ZN14MainScreenView10updatePwm7Eh + 0x0000000008004e72 0xc ./Application/User/gui/MainScreenView.o + 0x0000000008004e72 MainScreenView::updatePwm7(unsigned char) + .text._ZN14MainScreenView10updatePwm8Eh + 0x0000000008004e7e 0xc ./Application/User/gui/MainScreenView.o + 0x0000000008004e7e MainScreenView::updatePwm8(unsigned char) + *fill* 0x0000000008004e8a 0x2 + .text._ZN14MainScreenViewD2Ev + 0x0000000008004e8c 0x14 ./Application/User/gui/MainScreenView.o + 0x0000000008004e8c MainScreenView::~MainScreenView() + 0x0000000008004e8c MainScreenView::~MainScreenView() + .text._ZN14MainScreenViewD0Ev + 0x0000000008004ea0 0x16 ./Application/User/gui/MainScreenView.o + 0x0000000008004ea0 MainScreenView::~MainScreenView() + *fill* 0x0000000008004eb6 0x2 + .text._ZN14MainScreenViewC2Ev + 0x0000000008004eb8 0x14 ./Application/User/gui/MainScreenView.o + 0x0000000008004eb8 MainScreenView::MainScreenView() + 0x0000000008004eb8 MainScreenView::MainScreenView() + .text._ZN14MainScreenView11setupScreenEv + 0x0000000008004ecc 0x4 ./Application/User/gui/MainScreenView.o + 0x0000000008004ecc MainScreenView::setupScreen() + .text._ZN5ModelC2Ev + 0x0000000008004ed0 0x6 ./Application/User/gui/Model.o + 0x0000000008004ed0 Model::Model() + 0x0000000008004ed0 Model::Model() + .text._ZN5Model4tickEv + 0x0000000008004ed6 0x2 ./Application/User/gui/Model.o + 0x0000000008004ed6 Model::tick() + .text._ZN5Model18SetPwmValueFromHmiEhh + 0x0000000008004ed8 0x24 ./Application/User/gui/Model.o + 0x0000000008004ed8 Model::SetPwmValueFromHmi(unsigned char, unsigned char) + .text._ZN15SliderContainer9updatePwmEv + 0x0000000008004efc 0x2 ./Application/User/gui/SliderContainer.o + 0x0000000008004efc SliderContainer::updatePwm() + .text._ZN15SliderContainer8setIndexEh + 0x0000000008004efe 0x22 ./Application/User/gui/SliderContainer.o + 0x0000000008004efe SliderContainer::setIndex(unsigned char) + .text._ZN15SliderContainerC2Ev + 0x0000000008004f20 0x14 ./Application/User/gui/SliderContainer.o + 0x0000000008004f20 SliderContainer::SliderContainer() + 0x0000000008004f20 SliderContainer::SliderContainer() + .text._ZN15SliderContainer10initializeEv + 0x0000000008004f34 0x4 ./Application/User/gui/SliderContainer.o + 0x0000000008004f34 SliderContainer::initialize() + .text.LAN8742_RegisterBusIO + 0x0000000008004f38 0x28 ./Drivers/BSP/Components/lan8742.o + 0x0000000008004f38 LAN8742_RegisterBusIO + .text.LAN8742_Init + 0x0000000008004f60 0xc2 ./Drivers/BSP/Components/lan8742.o + 0x0000000008004f60 LAN8742_Init + .text.LAN8742_GetLinkState + 0x0000000008005022 0x94 ./Drivers/BSP/Components/lan8742.o + 0x0000000008005022 LAN8742_GetLinkState + *fill* 0x00000000080050b6 0x2 + .text.QSPI_AutoPollingMemReady.constprop.0 + 0x00000000080050b8 0x54 ./Drivers/BSP/stm32746g_discovery_qspi.o + .text.QSPI_WriteEnable.constprop.0 + 0x000000000800510c 0x70 ./Drivers/BSP/stm32746g_discovery_qspi.o + .text.BSP_QSPI_EnableMemoryMappedMode + 0x000000000800517c 0x4c ./Drivers/BSP/stm32746g_discovery_qspi.o + 0x000000000800517c BSP_QSPI_EnableMemoryMappedMode + .text.BSP_QSPI_MspInit + 0x00000000080051c8 0x128 ./Drivers/BSP/stm32746g_discovery_qspi.o + 0x00000000080051c8 BSP_QSPI_MspInit + .text.BSP_QSPI_Init + 0x00000000080052f0 0x130 ./Drivers/BSP/stm32746g_discovery_qspi.o + 0x00000000080052f0 BSP_QSPI_Init + .text.SystemInit + 0x0000000008005420 0x4c ./Drivers/CMSIS/system_stm32f7xx.o + 0x0000000008005420 SystemInit + .text.ft5336_Reset + 0x000000000800546c 0x2 ./Drivers/Components/ft5336.o + 0x000000000800546c ft5336_Reset + .text.ft5336_TS_ITStatus + 0x000000000800546e 0x4 ./Drivers/Components/ft5336.o + 0x000000000800546e ft5336_TS_ITStatus + *fill* 0x0000000008005472 0x2 + .text.ft5336_ReadID + 0x0000000008005474 0x44 ./Drivers/Components/ft5336.o + 0x0000000008005474 ft5336_ReadID + .text.ft5336_TS_DetectTouch + 0x00000000080054b8 0x44 ./Drivers/Components/ft5336.o + 0x00000000080054b8 ft5336_TS_DetectTouch + .text.ft5336_TS_GetXY + 0x00000000080054fc 0xcc ./Drivers/Components/ft5336.o + 0x00000000080054fc ft5336_TS_GetXY + .text.ft5336_TS_EnableIT + 0x00000000080055c8 0xa ./Drivers/Components/ft5336.o + 0x00000000080055c8 ft5336_TS_EnableIT + .text.ft5336_TS_DisableIT + 0x00000000080055d2 0xa ./Drivers/Components/ft5336.o + 0x00000000080055d2 ft5336_TS_DisableIT + .text.ft5336_TS_Start + 0x00000000080055dc 0x4 ./Drivers/Components/ft5336.o + 0x00000000080055dc ft5336_TS_Start + .text.ft5336_TS_ClearIT + 0x00000000080055e0 0x2 ./Drivers/Components/ft5336.o + 0x00000000080055e0 ft5336_TS_ClearIT + *fill* 0x00000000080055e2 0x2 + .text.ft5336_Init + 0x00000000080055e4 0x10 ./Drivers/Components/ft5336.o + 0x00000000080055e4 ft5336_Init + .text.HAL_Init + 0x00000000080055f4 0x24 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + 0x00000000080055f4 HAL_Init + .text.HAL_IncTick + 0x0000000008005618 0x18 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + 0x0000000008005618 HAL_IncTick + .text.HAL_GetTick + 0x0000000008005630 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + 0x0000000008005630 HAL_GetTick + .text.HAL_Delay + 0x000000000800563c 0x24 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + 0x000000000800563c HAL_Delay + .text.HAL_NVIC_SetPriorityGrouping + 0x0000000008005660 0x24 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + 0x0000000008005660 HAL_NVIC_SetPriorityGrouping + .text.HAL_NVIC_SetPriority + 0x0000000008005684 0x64 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + 0x0000000008005684 HAL_NVIC_SetPriority + .text.HAL_NVIC_EnableIRQ + 0x00000000080056e8 0x1c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + 0x00000000080056e8 HAL_NVIC_EnableIRQ + .text.HAL_NVIC_DisableIRQ + 0x0000000008005704 0x24 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + 0x0000000008005704 HAL_NVIC_DisableIRQ + .text.HAL_MPU_Disable + 0x0000000008005728 0x1c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + 0x0000000008005728 HAL_MPU_Disable + .text.HAL_MPU_Enable + 0x0000000008005744 0x20 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + 0x0000000008005744 HAL_MPU_Enable + .text.HAL_MPU_ConfigRegion + 0x0000000008005764 0x58 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + 0x0000000008005764 HAL_MPU_ConfigRegion + .text.HAL_CRC_Init + 0x00000000080057bc 0x74 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + 0x00000000080057bc HAL_CRC_Init + .text.HAL_CRCEx_Polynomial_Set + 0x0000000008005830 0x48 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + 0x0000000008005830 HAL_CRCEx_Polynomial_Set + .text.HAL_DMA_Abort + 0x0000000008005878 0x7e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + 0x0000000008005878 HAL_DMA_Abort + .text.HAL_DMA2D_Init + 0x00000000080058f6 0x58 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + 0x00000000080058f6 HAL_DMA2D_Init + .text.HAL_DMA2D_LineEventCallback + 0x000000000800594e 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + 0x000000000800594e HAL_DMA2D_LineEventCallback + .text.HAL_DMA2D_CLUTLoadingCpltCallback + 0x0000000008005950 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + 0x0000000008005950 HAL_DMA2D_CLUTLoadingCpltCallback + .text.HAL_DMA2D_IRQHandler + 0x0000000008005952 0x114 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + 0x0000000008005952 HAL_DMA2D_IRQHandler + *fill* 0x0000000008005a66 0x2 + .text.HAL_DMA2D_ConfigLayer + 0x0000000008005a68 0x90 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + 0x0000000008005a68 HAL_DMA2D_ConfigLayer + .text.ETH_Prepare_Tx_Descriptors + 0x0000000008005af8 0x150 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .text.ETH_SetMACConfig + 0x0000000008005c48 0xe4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .text.ETH_SetDMAConfig + 0x0000000008005d2c 0xa4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .text.ETH_FlushTransmitFIFO + 0x0000000008005dd0 0x2e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + *fill* 0x0000000008005dfe 0x2 + .text.ETH_UpdateDescriptor + 0x0000000008005e00 0x90 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .text.HAL_ETH_Init + 0x0000000008005e90 0x1d4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + 0x0000000008005e90 HAL_ETH_Init + .text.HAL_ETH_Start_IT + 0x0000000008006064 0xa2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + 0x0000000008006064 HAL_ETH_Start_IT + .text.HAL_ETH_Stop_IT + 0x0000000008006106 0x8a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + 0x0000000008006106 HAL_ETH_Stop_IT + .text.HAL_ETH_Transmit_IT + 0x0000000008006190 0x64 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + 0x0000000008006190 HAL_ETH_Transmit_IT + .text.HAL_ETH_ReadData + 0x00000000080061f4 0xf8 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + 0x00000000080061f4 HAL_ETH_ReadData + .text.HAL_ETH_ReleaseTxPacket + 0x00000000080062ec 0x56 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + 0x00000000080062ec HAL_ETH_ReleaseTxPacket + .text.HAL_ETH_PMTCallback + 0x0000000008006342 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + 0x0000000008006342 HAL_ETH_PMTCallback + .text.HAL_ETH_WakeUpCallback + 0x0000000008006344 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + 0x0000000008006344 HAL_ETH_WakeUpCallback + *fill* 0x0000000008006346 0x2 + .text.HAL_ETH_IRQHandler + 0x0000000008006348 0xd8 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + 0x0000000008006348 HAL_ETH_IRQHandler + .text.HAL_ETH_ReadPHYRegister + 0x0000000008006420 0x50 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + 0x0000000008006420 HAL_ETH_ReadPHYRegister + .text.HAL_ETH_WritePHYRegister + 0x0000000008006470 0x4a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + 0x0000000008006470 HAL_ETH_WritePHYRegister + .text.HAL_ETH_GetMACConfig + 0x00000000080064ba 0xc4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + 0x00000000080064ba HAL_ETH_GetMACConfig + .text.HAL_ETH_SetMACConfig + 0x000000000800657e 0x18 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + 0x000000000800657e HAL_ETH_SetMACConfig + *fill* 0x0000000008006596 0x2 + .text.HAL_ETH_SetMDIOClockRange + 0x0000000008006598 0x74 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + 0x0000000008006598 HAL_ETH_SetMDIOClockRange + .text.HAL_ETH_GetDMAError + 0x000000000800660c 0x6 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + 0x000000000800660c HAL_ETH_GetDMAError + *fill* 0x0000000008006612 0x2 + .text.HAL_GPIO_Init + 0x0000000008006614 0x1c4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + 0x0000000008006614 HAL_GPIO_Init + .text.HAL_GPIO_DeInit + 0x00000000080067d8 0x140 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + 0x00000000080067d8 HAL_GPIO_DeInit + .text.HAL_GPIO_ReadPin + 0x0000000008006918 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + 0x0000000008006918 HAL_GPIO_ReadPin + .text.HAL_GPIO_WritePin + 0x0000000008006924 0xa ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + 0x0000000008006924 HAL_GPIO_WritePin + .text.HAL_GPIO_TogglePin + 0x000000000800692e 0x12 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + 0x000000000800692e HAL_GPIO_TogglePin + .text.I2C_Flush_TXDR + 0x0000000008006940 0x1c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.I2C_TransferConfig + 0x000000000800695c 0x2c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.I2C_IsErrorOccurred + 0x0000000008006988 0x100 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.I2C_WaitOnTXISFlagUntilTimeout + 0x0000000008006a88 0x4e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.I2C_WaitOnFlagUntilTimeout + 0x0000000008006ad6 0x54 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.I2C_WaitOnSTOPFlagUntilTimeout + 0x0000000008006b2a 0x4a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .text.HAL_I2C_Init + 0x0000000008006b74 0xa2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + 0x0000000008006b74 HAL_I2C_Init + .text.HAL_I2C_DeInit + 0x0000000008006c16 0x32 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + 0x0000000008006c16 HAL_I2C_DeInit + .text.HAL_I2C_Mem_Write + 0x0000000008006c48 0x1b4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + 0x0000000008006c48 HAL_I2C_Mem_Write + .text.HAL_I2C_Mem_Read + 0x0000000008006dfc 0x1bc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + 0x0000000008006dfc HAL_I2C_Mem_Read + .text.HAL_I2CEx_ConfigAnalogFilter + 0x0000000008006fb8 0x4c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + 0x0000000008006fb8 HAL_I2CEx_ConfigAnalogFilter + .text.HAL_I2CEx_ConfigDigitalFilter + 0x0000000008007004 0x4a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + 0x0000000008007004 HAL_I2CEx_ConfigDigitalFilter + *fill* 0x000000000800704e 0x2 + .text.LTDC_SetConfig + 0x0000000008007050 0x104 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .text.HAL_LTDC_Init + 0x0000000008007154 0xd8 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + 0x0000000008007154 HAL_LTDC_Init + .text.HAL_LTDC_ErrorCallback + 0x000000000800722c 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + 0x000000000800722c HAL_LTDC_ErrorCallback + .text.HAL_LTDC_ReloadEventCallback + 0x000000000800722e 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + 0x000000000800722e HAL_LTDC_ReloadEventCallback + .text.HAL_LTDC_IRQHandler + 0x0000000008007230 0xba ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + 0x0000000008007230 HAL_LTDC_IRQHandler + .text.HAL_LTDC_ConfigLayer + 0x00000000080072ea 0x5a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + 0x00000000080072ea HAL_LTDC_ConfigLayer + .text.HAL_LTDC_ProgramLineEvent + 0x0000000008007344 0x3c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + 0x0000000008007344 HAL_LTDC_ProgramLineEvent + .text.HAL_PWREx_EnableOverDrive + 0x0000000008007380 0x70 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + 0x0000000008007380 HAL_PWREx_EnableOverDrive + .text.QSPI_Config + 0x00000000080073f0 0x174 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .text.QSPI_WaitFlagStateUntilTimeout + 0x0000000008007564 0x4e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + *fill* 0x00000000080075b2 0x2 + .text.HAL_QSPI_Init + 0x00000000080075b4 0xa8 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + 0x00000000080075b4 HAL_QSPI_Init + .text.HAL_QSPI_DeInit + 0x000000000800765c 0x26 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + 0x000000000800765c HAL_QSPI_DeInit + .text.HAL_QSPI_Command + 0x0000000008007682 0x86 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + 0x0000000008007682 HAL_QSPI_Command + .text.HAL_QSPI_AutoPolling + 0x0000000008007708 0xa0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + 0x0000000008007708 HAL_QSPI_AutoPolling + .text.HAL_QSPI_MemoryMapped + 0x00000000080077a8 0x82 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + 0x00000000080077a8 HAL_QSPI_MemoryMapped + .text.HAL_QSPI_Abort + 0x000000000800782a 0x92 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + 0x000000000800782a HAL_QSPI_Abort + .text.HAL_QSPI_Transmit + 0x00000000080078bc 0xb8 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + 0x00000000080078bc HAL_QSPI_Transmit + .text.HAL_QSPI_Receive + 0x0000000008007974 0xc4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + 0x0000000008007974 HAL_QSPI_Receive + .text.HAL_RCC_OscConfig + 0x0000000008007a38 0x374 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + 0x0000000008007a38 HAL_RCC_OscConfig + .text.HAL_RCC_GetSysClockFreq + 0x0000000008007dac 0x5c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + 0x0000000008007dac HAL_RCC_GetSysClockFreq + .text.HAL_RCC_ClockConfig + 0x0000000008007e08 0x13c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + 0x0000000008007e08 HAL_RCC_ClockConfig + .text.HAL_RCC_GetHCLKFreq + 0x0000000008007f44 0xc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + 0x0000000008007f44 HAL_RCC_GetHCLKFreq + .text.HAL_RCC_GetPCLK1Freq + 0x0000000008007f50 0x20 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + 0x0000000008007f50 HAL_RCC_GetPCLK1Freq + .text.HAL_RCC_GetClockConfig + 0x0000000008007f70 0x3c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + 0x0000000008007f70 HAL_RCC_GetClockConfig + .text.HAL_RCCEx_PeriphCLKConfig + 0x0000000008007fac 0x514 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + 0x0000000008007fac HAL_RCCEx_PeriphCLKConfig + .text.HAL_SDRAM_Init + 0x00000000080084c0 0x40 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + 0x00000000080084c0 HAL_SDRAM_Init + .text.HAL_SDRAM_SendCommand + 0x0000000008008500 0x3e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + 0x0000000008008500 HAL_SDRAM_SendCommand + .text.HAL_SDRAM_ProgramRefreshRate + 0x000000000800853e 0x30 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + 0x000000000800853e HAL_SDRAM_ProgramRefreshRate + *fill* 0x000000000800856e 0x2 + .text.TIM_OC1_SetConfig + 0x0000000008008570 0x68 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.TIM_OC3_SetConfig + 0x00000000080085d8 0x70 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.TIM_OC4_SetConfig + 0x0000000008008648 0x50 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.TIM_OC5_SetConfig + 0x0000000008008698 0x50 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.TIM_OC6_SetConfig + 0x00000000080086e8 0x50 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .text.HAL_TIM_Base_Start_IT + 0x0000000008008738 0x7c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + 0x0000000008008738 HAL_TIM_Base_Start_IT + .text.HAL_TIM_PWM_MspInit + 0x00000000080087b4 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + 0x00000000080087b4 HAL_TIM_PWM_MspInit + .text.HAL_TIM_OC_DelayElapsedCallback + 0x00000000080087b6 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + 0x00000000080087b6 HAL_TIM_OC_DelayElapsedCallback + .text.HAL_TIM_IC_CaptureCallback + 0x00000000080087b8 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + 0x00000000080087b8 HAL_TIM_IC_CaptureCallback + .text.HAL_TIM_PWM_PulseFinishedCallback + 0x00000000080087ba 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + 0x00000000080087ba HAL_TIM_PWM_PulseFinishedCallback + .text.HAL_TIM_TriggerCallback + 0x00000000080087bc 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + 0x00000000080087bc HAL_TIM_TriggerCallback + .text.HAL_TIM_IRQHandler + 0x00000000080087be 0x160 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + 0x00000000080087be HAL_TIM_IRQHandler + *fill* 0x000000000800891e 0x2 + .text.TIM_Base_SetConfig + 0x0000000008008920 0xcc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + 0x0000000008008920 TIM_Base_SetConfig + .text.HAL_TIM_Base_Init + 0x00000000080089ec 0x60 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + 0x00000000080089ec HAL_TIM_Base_Init + .text.HAL_TIM_PWM_Init + 0x0000000008008a4c 0x60 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + 0x0000000008008a4c HAL_TIM_PWM_Init + .text.TIM_OC2_SetConfig + 0x0000000008008aac 0x70 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + 0x0000000008008aac TIM_OC2_SetConfig + .text.HAL_TIM_PWM_ConfigChannel + 0x0000000008008b1c 0xfa ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + 0x0000000008008b1c HAL_TIM_PWM_ConfigChannel + .text.TIM_ETR_SetConfig + 0x0000000008008c16 0x14 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + 0x0000000008008c16 TIM_ETR_SetConfig + *fill* 0x0000000008008c2a 0x2 + .text.HAL_TIM_ConfigClockSource + 0x0000000008008c2c 0x134 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + 0x0000000008008c2c HAL_TIM_ConfigClockSource + .text.TIM_CCxChannelCmd + 0x0000000008008d60 0x1c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + 0x0000000008008d60 TIM_CCxChannelCmd + .text.HAL_TIM_OC_Start + 0x0000000008008d7c 0x118 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + 0x0000000008008d7c HAL_TIM_OC_Start + .text.HAL_TIM_PWM_Start + 0x0000000008008e94 0x4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + 0x0000000008008e94 HAL_TIM_PWM_Start + .text.HAL_TIMEx_MasterConfigSynchronization + 0x0000000008008e98 0x98 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + 0x0000000008008e98 HAL_TIMEx_MasterConfigSynchronization + .text.HAL_TIMEx_ConfigBreakDeadTime + 0x0000000008008f30 0x84 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + 0x0000000008008f30 HAL_TIMEx_ConfigBreakDeadTime + .text.HAL_TIMEx_CommutCallback + 0x0000000008008fb4 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + 0x0000000008008fb4 HAL_TIMEx_CommutCallback + .text.HAL_TIMEx_BreakCallback + 0x0000000008008fb6 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + 0x0000000008008fb6 HAL_TIMEx_BreakCallback + .text.HAL_TIMEx_Break2Callback + 0x0000000008008fb8 0x2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + 0x0000000008008fb8 HAL_TIMEx_Break2Callback + .text.FMC_SDRAM_Init + 0x0000000008008fba 0x70 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + 0x0000000008008fba FMC_SDRAM_Init + .text.FMC_SDRAM_Timing_Init + 0x000000000800902a 0x6c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + 0x000000000800902a FMC_SDRAM_Timing_Init + .text.FMC_SDRAM_SendCommand + 0x0000000008009096 0x24 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + 0x0000000008009096 FMC_SDRAM_SendCommand + .text.FMC_SDRAM_ProgramRefreshRate + 0x00000000080090ba 0x14 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + 0x00000000080090ba FMC_SDRAM_ProgramRefreshRate + *fill* 0x00000000080090ce 0x2 + .text.osKernelInitialize + 0x00000000080090d0 0x34 ./Middlewares/FreeRTOS/cmsis_os2.o + 0x00000000080090d0 osKernelInitialize + .text.osKernelStart + 0x0000000008009104 0x40 ./Middlewares/FreeRTOS/cmsis_os2.o + 0x0000000008009104 osKernelStart + .text.osKernelGetTickCount + 0x0000000008009144 0x28 ./Middlewares/FreeRTOS/cmsis_os2.o + 0x0000000008009144 osKernelGetTickCount + .text.osThreadNew + 0x000000000800916c 0xa8 ./Middlewares/FreeRTOS/cmsis_os2.o + 0x000000000800916c osThreadNew + .text.osDelay 0x0000000008009214 0x34 ./Middlewares/FreeRTOS/cmsis_os2.o + 0x0000000008009214 osDelay + .text.osMutexNew + 0x0000000008009248 0x88 ./Middlewares/FreeRTOS/cmsis_os2.o + 0x0000000008009248 osMutexNew + .text.osMutexAcquire + 0x00000000080092d0 0x60 ./Middlewares/FreeRTOS/cmsis_os2.o + 0x00000000080092d0 osMutexAcquire + .text.osMutexRelease + 0x0000000008009330 0x54 ./Middlewares/FreeRTOS/cmsis_os2.o + 0x0000000008009330 osMutexRelease + .text.osSemaphoreNew + 0x0000000008009384 0xac ./Middlewares/FreeRTOS/cmsis_os2.o + 0x0000000008009384 osSemaphoreNew + .text.osSemaphoreAcquire + 0x0000000008009430 0x74 ./Middlewares/FreeRTOS/cmsis_os2.o + 0x0000000008009430 osSemaphoreAcquire + .text.osSemaphoreRelease + 0x00000000080094a4 0x6c ./Middlewares/FreeRTOS/cmsis_os2.o + 0x00000000080094a4 osSemaphoreRelease + .text.osMessageQueueNew + 0x0000000008009510 0x8c ./Middlewares/FreeRTOS/cmsis_os2.o + 0x0000000008009510 osMessageQueueNew + .text.osMessageQueuePut + 0x000000000800959c 0x84 ./Middlewares/FreeRTOS/cmsis_os2.o + 0x000000000800959c osMessageQueuePut + .text.osMessageQueueGet + 0x0000000008009620 0x80 ./Middlewares/FreeRTOS/cmsis_os2.o + 0x0000000008009620 osMessageQueueGet + .text.vApplicationGetIdleTaskMemory + 0x00000000080096a0 0x18 ./Middlewares/FreeRTOS/cmsis_os2.o + 0x00000000080096a0 vApplicationGetIdleTaskMemory + .text.vApplicationGetTimerTaskMemory + 0x00000000080096b8 0x18 ./Middlewares/FreeRTOS/cmsis_os2.o + 0x00000000080096b8 vApplicationGetTimerTaskMemory + .text.prvInsertBlockIntoFreeList + 0x00000000080096d0 0x4c ./Middlewares/FreeRTOS/heap_4.o + .text.pvPortMalloc + 0x000000000800971c 0x12c ./Middlewares/FreeRTOS/heap_4.o + 0x000000000800971c pvPortMalloc + .text.vPortFree + 0x0000000008009848 0x78 ./Middlewares/FreeRTOS/heap_4.o + 0x0000000008009848 vPortFree + .text.vListInitialise + 0x00000000080098c0 0x16 ./Middlewares/FreeRTOS/list.o + 0x00000000080098c0 vListInitialise + .text.vListInitialiseItem + 0x00000000080098d6 0x6 ./Middlewares/FreeRTOS/list.o + 0x00000000080098d6 vListInitialiseItem + .text.vListInsertEnd + 0x00000000080098dc 0x18 ./Middlewares/FreeRTOS/list.o + 0x00000000080098dc vListInsertEnd + .text.vListInsert + 0x00000000080098f4 0x2e ./Middlewares/FreeRTOS/list.o + 0x00000000080098f4 vListInsert + .text.uxListRemove + 0x0000000008009922 0x20 ./Middlewares/FreeRTOS/list.o + 0x0000000008009922 uxListRemove + *fill* 0x0000000008009942 0x2 + .text.prvPortStartFirstTask + 0x0000000008009944 0x28 ./Middlewares/FreeRTOS/port.o + .text.vPortEnableVFP + 0x000000000800996c 0x14 ./Middlewares/FreeRTOS/port.o + .text.prvTaskExitError + 0x0000000008009980 0x48 ./Middlewares/FreeRTOS/port.o + .text.pxPortInitialiseStack + 0x00000000080099c8 0x24 ./Middlewares/FreeRTOS/port.o + 0x00000000080099c8 pxPortInitialiseStack + *fill* 0x00000000080099ec 0x4 + .text.SVC_Handler + 0x00000000080099f0 0x24 ./Middlewares/FreeRTOS/port.o + 0x00000000080099f0 SVC_Handler + .text.vPortEnterCritical + 0x0000000008009a14 0x48 ./Middlewares/FreeRTOS/port.o + 0x0000000008009a14 vPortEnterCritical + .text.vPortExitCritical + 0x0000000008009a5c 0x2c ./Middlewares/FreeRTOS/port.o + 0x0000000008009a5c vPortExitCritical + *fill* 0x0000000008009a88 0x8 + .text.PendSV_Handler + 0x0000000008009a90 0x64 ./Middlewares/FreeRTOS/port.o + 0x0000000008009a90 PendSV_Handler + .text.SysTick_Handler + 0x0000000008009af4 0x30 ./Middlewares/FreeRTOS/port.o + 0x0000000008009af4 SysTick_Handler + .text.vPortSetupTimerInterrupt + 0x0000000008009b24 0x24 ./Middlewares/FreeRTOS/port.o + 0x0000000008009b24 vPortSetupTimerInterrupt + .text.xPortStartScheduler + 0x0000000008009b48 0xcc ./Middlewares/FreeRTOS/port.o + 0x0000000008009b48 xPortStartScheduler + .text.vPortValidateInterruptPriority + 0x0000000008009c14 0x64 ./Middlewares/FreeRTOS/port.o + 0x0000000008009c14 vPortValidateInterruptPriority + .text.prvIsQueueEmpty + 0x0000000008009c78 0x16 ./Middlewares/FreeRTOS/queue.o + .text.prvCopyDataToQueue + 0x0000000008009c8e 0x6a ./Middlewares/FreeRTOS/queue.o + .text.prvCopyDataFromQueue + 0x0000000008009cf8 0x2a ./Middlewares/FreeRTOS/queue.o + .text.prvUnlockQueue + 0x0000000008009d22 0x70 ./Middlewares/FreeRTOS/queue.o + .text.xQueueGenericReset + 0x0000000008009d92 0x82 ./Middlewares/FreeRTOS/queue.o + 0x0000000008009d92 xQueueGenericReset + .text.xQueueGenericCreateStatic.part.0 + 0x0000000008009e14 0x98 ./Middlewares/FreeRTOS/queue.o + .text.xQueueGenericCreateStatic + 0x0000000008009eac 0x28 ./Middlewares/FreeRTOS/queue.o + 0x0000000008009eac xQueueGenericCreateStatic + .text.xQueueGenericCreate + 0x0000000008009ed4 0x52 ./Middlewares/FreeRTOS/queue.o + 0x0000000008009ed4 xQueueGenericCreate + .text.xQueueCreateCountingSemaphoreStatic + 0x0000000008009f26 0x4c ./Middlewares/FreeRTOS/queue.o + 0x0000000008009f26 xQueueCreateCountingSemaphoreStatic + .text.xQueueCreateCountingSemaphore + 0x0000000008009f72 0x44 ./Middlewares/FreeRTOS/queue.o + 0x0000000008009f72 xQueueCreateCountingSemaphore + .text.xQueueGenericSend + 0x0000000008009fb6 0x176 ./Middlewares/FreeRTOS/queue.o + 0x0000000008009fb6 xQueueGenericSend + .text.xQueueCreateMutexStatic + 0x000000000800a12c 0x2a ./Middlewares/FreeRTOS/queue.o + 0x000000000800a12c xQueueCreateMutexStatic + .text.xQueueGiveMutexRecursive + 0x000000000800a156 0x40 ./Middlewares/FreeRTOS/queue.o + 0x000000000800a156 xQueueGiveMutexRecursive + .text.xQueueCreateMutex + 0x000000000800a196 0x3a ./Middlewares/FreeRTOS/queue.o + 0x000000000800a196 xQueueCreateMutex + .text.xQueueGenericSendFromISR + 0x000000000800a1d0 0xd2 ./Middlewares/FreeRTOS/queue.o + 0x000000000800a1d0 xQueueGenericSendFromISR + .text.xQueueGiveFromISR + 0x000000000800a2a2 0xb8 ./Middlewares/FreeRTOS/queue.o + 0x000000000800a2a2 xQueueGiveFromISR + .text.xQueueReceive + 0x000000000800a35a 0x14a ./Middlewares/FreeRTOS/queue.o + 0x000000000800a35a xQueueReceive + .text.xQueueSemaphoreTake + 0x000000000800a4a4 0x196 ./Middlewares/FreeRTOS/queue.o + 0x000000000800a4a4 xQueueSemaphoreTake + .text.xQueueTakeMutexRecursive + 0x000000000800a63a 0x48 ./Middlewares/FreeRTOS/queue.o + 0x000000000800a63a xQueueTakeMutexRecursive + .text.xQueueReceiveFromISR + 0x000000000800a682 0xaa ./Middlewares/FreeRTOS/queue.o + 0x000000000800a682 xQueueReceiveFromISR + .text.vQueueAddToRegistry + 0x000000000800a72c 0x24 ./Middlewares/FreeRTOS/queue.o + 0x000000000800a72c vQueueAddToRegistry + .text.vQueueUnregisterQueue + 0x000000000800a750 0x28 ./Middlewares/FreeRTOS/queue.o + 0x000000000800a750 vQueueUnregisterQueue + .text.vQueueDelete + 0x000000000800a778 0x32 ./Middlewares/FreeRTOS/queue.o + 0x000000000800a778 vQueueDelete + .text.vQueueWaitForMessageRestricted + 0x000000000800a7aa 0x46 ./Middlewares/FreeRTOS/queue.o + 0x000000000800a7aa vQueueWaitForMessageRestricted + .text.prvAddNewTaskToReadyList + 0x000000000800a7f0 0xfc ./Middlewares/FreeRTOS/tasks.o + .text.prvAddCurrentTaskToDelayedList + 0x000000000800a8ec 0x70 ./Middlewares/FreeRTOS/tasks.o + .text.prvResetNextTaskUnblockTime + 0x000000000800a95c 0x24 ./Middlewares/FreeRTOS/tasks.o + .text.prvDeleteTCB + 0x000000000800a980 0x3a ./Middlewares/FreeRTOS/tasks.o + *fill* 0x000000000800a9ba 0x2 + .text.prvIdleTask + 0x000000000800a9bc 0x64 ./Middlewares/FreeRTOS/tasks.o + .text.prvInitialiseNewTask.constprop.0 + 0x000000000800aa20 0x9e ./Middlewares/FreeRTOS/tasks.o + .text.xTaskCreateStatic + 0x000000000800aabe 0x7c ./Middlewares/FreeRTOS/tasks.o + 0x000000000800aabe xTaskCreateStatic + .text.xTaskCreate + 0x000000000800ab3a 0x5a ./Middlewares/FreeRTOS/tasks.o + 0x000000000800ab3a xTaskCreate + .text.vTaskSuspendAll + 0x000000000800ab94 0x10 ./Middlewares/FreeRTOS/tasks.o + 0x000000000800ab94 vTaskSuspendAll + .text.xTaskGetTickCount + 0x000000000800aba4 0xc ./Middlewares/FreeRTOS/tasks.o + 0x000000000800aba4 xTaskGetTickCount + .text.xTaskGetTickCountFromISR + 0x000000000800abb0 0x10 ./Middlewares/FreeRTOS/tasks.o + 0x000000000800abb0 xTaskGetTickCountFromISR + .text.xTaskIncrementTick + 0x000000000800abc0 0x130 ./Middlewares/FreeRTOS/tasks.o + 0x000000000800abc0 xTaskIncrementTick + .text.xTaskResumeAll + 0x000000000800acf0 0xec ./Middlewares/FreeRTOS/tasks.o + 0x000000000800acf0 xTaskResumeAll + .text.vTaskDelay + 0x000000000800addc 0x4c ./Middlewares/FreeRTOS/tasks.o + 0x000000000800addc vTaskDelay + .text.vTaskSetApplicationTaskTag + 0x000000000800ae28 0x20 ./Middlewares/FreeRTOS/tasks.o + 0x000000000800ae28 vTaskSetApplicationTaskTag + .text.xTaskCallApplicationTaskHook + 0x000000000800ae48 0x18 ./Middlewares/FreeRTOS/tasks.o + 0x000000000800ae48 xTaskCallApplicationTaskHook + .text.vTaskStartScheduler + 0x000000000800ae60 0xa4 ./Middlewares/FreeRTOS/tasks.o + 0x000000000800ae60 vTaskStartScheduler + .text.vTaskSwitchContext + 0x000000000800af04 0x8c ./Middlewares/FreeRTOS/tasks.o + 0x000000000800af04 vTaskSwitchContext + .text.vTaskPlaceOnEventList + 0x000000000800af90 0x38 ./Middlewares/FreeRTOS/tasks.o + 0x000000000800af90 vTaskPlaceOnEventList + .text.vTaskPlaceOnEventListRestricted + 0x000000000800afc8 0x40 ./Middlewares/FreeRTOS/tasks.o + 0x000000000800afc8 vTaskPlaceOnEventListRestricted + .text.xTaskRemoveFromEventList + 0x000000000800b008 0x8c ./Middlewares/FreeRTOS/tasks.o + 0x000000000800b008 xTaskRemoveFromEventList + .text.vTaskInternalSetTimeOutState + 0x000000000800b094 0x18 ./Middlewares/FreeRTOS/tasks.o + 0x000000000800b094 vTaskInternalSetTimeOutState + .text.xTaskCheckForTimeOut + 0x000000000800b0ac 0x80 ./Middlewares/FreeRTOS/tasks.o + 0x000000000800b0ac xTaskCheckForTimeOut + .text.vTaskMissedYield + 0x000000000800b12c 0xc ./Middlewares/FreeRTOS/tasks.o + 0x000000000800b12c vTaskMissedYield + .text.xTaskGetCurrentTaskHandle + 0x000000000800b138 0xc ./Middlewares/FreeRTOS/tasks.o + 0x000000000800b138 xTaskGetCurrentTaskHandle + .text.xTaskGetSchedulerState + 0x000000000800b144 0x20 ./Middlewares/FreeRTOS/tasks.o + 0x000000000800b144 xTaskGetSchedulerState + .text.xTaskPriorityInherit + 0x000000000800b164 0x80 ./Middlewares/FreeRTOS/tasks.o + 0x000000000800b164 xTaskPriorityInherit + .text.xTaskPriorityDisinherit + 0x000000000800b1e4 0x90 ./Middlewares/FreeRTOS/tasks.o + 0x000000000800b1e4 xTaskPriorityDisinherit + .text.vTaskPriorityDisinheritAfterTimeout + 0x000000000800b274 0xac ./Middlewares/FreeRTOS/tasks.o + 0x000000000800b274 vTaskPriorityDisinheritAfterTimeout + .text.pvTaskIncrementMutexHeldCount + 0x000000000800b320 0x18 ./Middlewares/FreeRTOS/tasks.o + 0x000000000800b320 pvTaskIncrementMutexHeldCount + .text.prvCheckForValidListAndQueue + 0x000000000800b338 0x68 ./Middlewares/FreeRTOS/timers.o + .text.prvInsertTimerInActiveList + 0x000000000800b3a0 0x3c ./Middlewares/FreeRTOS/timers.o + .text.xTimerCreateTimerTask + 0x000000000800b3dc 0x68 ./Middlewares/FreeRTOS/timers.o + 0x000000000800b3dc xTimerCreateTimerTask + .text.xTimerGenericCommand + 0x000000000800b444 0x58 ./Middlewares/FreeRTOS/timers.o + 0x000000000800b444 xTimerGenericCommand + .text.prvSampleTimeNow + 0x000000000800b49c 0xb0 ./Middlewares/FreeRTOS/timers.o + .text.prvTimerTask + 0x000000000800b54c 0x1d8 ./Middlewares/FreeRTOS/timers.o + .text.jpeg_abort + 0x000000000800b724 0x24 ./Middlewares/LibJPEG/jcomapi.o + 0x000000000800b724 jpeg_abort + .text.jpeg_destroy + 0x000000000800b748 0x14 ./Middlewares/LibJPEG/jcomapi.o + 0x000000000800b748 jpeg_destroy + .text.jpeg_alloc_quant_table + 0x000000000800b75c 0x14 ./Middlewares/LibJPEG/jcomapi.o + 0x000000000800b75c jpeg_alloc_quant_table + .text.jpeg_alloc_huff_table + 0x000000000800b770 0x16 ./Middlewares/LibJPEG/jcomapi.o + 0x000000000800b770 jpeg_alloc_huff_table + .text.jpeg_CreateDecompress + 0x000000000800b786 0x9a ./Middlewares/LibJPEG/jdapimin.o + 0x000000000800b786 jpeg_CreateDecompress + .text.jpeg_destroy_decompress + 0x000000000800b820 0x4 ./Middlewares/LibJPEG/jdapimin.o + 0x000000000800b820 jpeg_destroy_decompress + .text.jpeg_consume_input + 0x000000000800b824 0x168 ./Middlewares/LibJPEG/jdapimin.o + 0x000000000800b824 jpeg_consume_input + .text.jpeg_read_header + 0x000000000800b98c 0x44 ./Middlewares/LibJPEG/jdapimin.o + 0x000000000800b98c jpeg_read_header + .text.jpeg_finish_decompress + 0x000000000800b9d0 0x72 ./Middlewares/LibJPEG/jdapimin.o + 0x000000000800b9d0 jpeg_finish_decompress + .text.output_pass_setup + 0x000000000800ba42 0x92 ./Middlewares/LibJPEG/jdapistd.o + .text.jpeg_start_decompress + 0x000000000800bad4 0x92 ./Middlewares/LibJPEG/jdapistd.o + 0x000000000800bad4 jpeg_start_decompress + .text.jpeg_read_scanlines + 0x000000000800bb66 0x6a ./Middlewares/LibJPEG/jdapistd.o + 0x000000000800bb66 jpeg_read_scanlines + .text.get_byte + 0x000000000800bbd0 0x2c ./Middlewares/LibJPEG/jdarith.o + .text.arith_decode + 0x000000000800bbfc 0xc8 ./Middlewares/LibJPEG/jdarith.o + .text.start_pass + 0x000000000800bcc4 0x224 ./Middlewares/LibJPEG/jdarith.o + .text.process_restart + 0x000000000800bee8 0xa2 ./Middlewares/LibJPEG/jdarith.o + .text.decode_mcu + 0x000000000800bf8a 0x252 ./Middlewares/LibJPEG/jdarith.o + .text.decode_mcu_AC_refine + 0x000000000800c1dc 0x126 ./Middlewares/LibJPEG/jdarith.o + .text.decode_mcu_DC_refine + 0x000000000800c302 0x52 ./Middlewares/LibJPEG/jdarith.o + .text.decode_mcu_AC_first + 0x000000000800c354 0x134 ./Middlewares/LibJPEG/jdarith.o + .text.decode_mcu_DC_first + 0x000000000800c488 0x14c ./Middlewares/LibJPEG/jdarith.o + .text.jinit_arith_decoder + 0x000000000800c5d4 0x64 ./Middlewares/LibJPEG/jdarith.o + 0x000000000800c5d4 jinit_arith_decoder + .text.init_mem_source + 0x000000000800c638 0x2 ./Middlewares/LibJPEG/jdatasrc.o + *fill* 0x000000000800c63a 0x2 + .text.fill_mem_input_buffer + 0x000000000800c63c 0x24 ./Middlewares/LibJPEG/jdatasrc.o + .text.skip_input_data + 0x000000000800c660 0x26 ./Middlewares/LibJPEG/jdatasrc.o + .text.term_source + 0x000000000800c686 0x2 ./Middlewares/LibJPEG/jdatasrc.o + .text.jpeg_mem_src + 0x000000000800c688 0x58 ./Middlewares/LibJPEG/jdatasrc.o + 0x000000000800c688 jpeg_mem_src + .text.start_iMCU_row + 0x000000000800c6e0 0x30 ./Middlewares/LibJPEG/jdcoefct.o + .text.start_input_pass + 0x000000000800c710 0xa ./Middlewares/LibJPEG/jdcoefct.o + .text.dummy_consume_data + 0x000000000800c71a 0x4 ./Middlewares/LibJPEG/jdcoefct.o + .text.consume_data + 0x000000000800c71e 0x134 ./Middlewares/LibJPEG/jdcoefct.o + .text.decompress_data + 0x000000000800c852 0x10c ./Middlewares/LibJPEG/jdcoefct.o + *fill* 0x000000000800c95e 0x2 + .text.start_output_pass + 0x000000000800c960 0xb8 ./Middlewares/LibJPEG/jdcoefct.o + .text.decompress_onepass + 0x000000000800ca18 0x182 ./Middlewares/LibJPEG/jdcoefct.o + .text.decompress_smooth_data + 0x000000000800cb9a 0x426 ./Middlewares/LibJPEG/jdcoefct.o + .text.jinit_d_coef_controller + 0x000000000800cfc0 0xdc ./Middlewares/LibJPEG/jdcoefct.o + 0x000000000800cfc0 jinit_d_coef_controller + .text.build_ycc_rgb_table + 0x000000000800d09c 0xbc ./Middlewares/LibJPEG/jdcolor.o + .text.ycc_rgb_convert + 0x000000000800d158 0xa0 ./Middlewares/LibJPEG/jdcolor.o + .text.rgb_gray_convert + 0x000000000800d1f8 0x66 ./Middlewares/LibJPEG/jdcolor.o + .text.rgb_convert + 0x000000000800d25e 0x50 ./Middlewares/LibJPEG/jdcolor.o + .text.null_convert + 0x000000000800d2ae 0x4a ./Middlewares/LibJPEG/jdcolor.o + .text.gray_rgb_convert + 0x000000000800d2f8 0x38 ./Middlewares/LibJPEG/jdcolor.o + .text.ycck_cmyk_convert + 0x000000000800d330 0xba ./Middlewares/LibJPEG/jdcolor.o + .text.start_pass_dcolor + 0x000000000800d3ea 0x2 ./Middlewares/LibJPEG/jdcolor.o + .text.grayscale_convert + 0x000000000800d3ec 0x1c ./Middlewares/LibJPEG/jdcolor.o + .text.jinit_color_deconverter + 0x000000000800d408 0x158 ./Middlewares/LibJPEG/jdcolor.o + 0x000000000800d408 jinit_color_deconverter + .text.start_pass + 0x000000000800d560 0x388 ./Middlewares/LibJPEG/jddctmgr.o + .text.jinit_inverse_dct + 0x000000000800d8e8 0x54 ./Middlewares/LibJPEG/jddctmgr.o + 0x000000000800d8e8 jinit_inverse_dct + .text.jpeg_fill_bit_buffer + 0x000000000800d93c 0xba ./Middlewares/LibJPEG/jdhuff.o + *fill* 0x000000000800d9f6 0x2 + .text.jpeg_huff_decode + 0x000000000800d9f8 0x98 ./Middlewares/LibJPEG/jdhuff.o + .text.process_restart + 0x000000000800da90 0x4a ./Middlewares/LibJPEG/jdhuff.o + *fill* 0x000000000800dada 0x2 + .text.decode_mcu_DC_first + 0x000000000800dadc 0x174 ./Middlewares/LibJPEG/jdhuff.o + .text.decode_mcu_AC_first + 0x000000000800dc50 0x160 ./Middlewares/LibJPEG/jdhuff.o + .text.decode_mcu_DC_refine + 0x000000000800ddb0 0x94 ./Middlewares/LibJPEG/jdhuff.o + .text.decode_mcu_AC_refine + 0x000000000800de44 0x278 ./Middlewares/LibJPEG/jdhuff.o + .text.decode_mcu_sub + 0x000000000800e0bc 0x2f0 ./Middlewares/LibJPEG/jdhuff.o + .text.decode_mcu + 0x000000000800e3ac 0x2e4 ./Middlewares/LibJPEG/jdhuff.o + .text.jpeg_make_d_derived_tbl + 0x000000000800e690 0x1d8 ./Middlewares/LibJPEG/jdhuff.o + .text.start_pass_huff_decoder + 0x000000000800e868 0x39c ./Middlewares/LibJPEG/jdhuff.o + .text.jinit_huff_decoder + 0x000000000800ec04 0x70 ./Middlewares/LibJPEG/jdhuff.o + 0x000000000800ec04 jinit_huff_decoder + .text.finish_input_pass + 0x000000000800ec74 0x10 ./Middlewares/LibJPEG/jdinput.o + .text.reset_input_controller + 0x000000000800ec84 0x30 ./Middlewares/LibJPEG/jdinput.o + .text.start_input_pass + 0x000000000800ecb4 0x186 ./Middlewares/LibJPEG/jdinput.o + *fill* 0x000000000800ee3a 0x2 + .text.consume_markers + 0x000000000800ee3c 0x330 ./Middlewares/LibJPEG/jdinput.o + .text.jpeg_core_output_dimensions + 0x000000000800f16c 0x1ce ./Middlewares/LibJPEG/jdinput.o + 0x000000000800f16c jpeg_core_output_dimensions + *fill* 0x000000000800f33a 0x2 + .text.jinit_input_controller + 0x000000000800f33c 0x40 ./Middlewares/LibJPEG/jdinput.o + 0x000000000800f33c jinit_input_controller + .text.start_pass_main + 0x000000000800f37c 0x108 ./Middlewares/LibJPEG/jdmainct.o + .text.process_data_simple_main + 0x000000000800f484 0x58 ./Middlewares/LibJPEG/jdmainct.o + .text.process_data_context_main + 0x000000000800f4dc 0x1f4 ./Middlewares/LibJPEG/jdmainct.o + .text.process_data_crank_post + 0x000000000800f6d0 0x1a ./Middlewares/LibJPEG/jdmainct.o + *fill* 0x000000000800f6ea 0x2 + .text.jinit_d_main_controller + 0x000000000800f6ec 0x100 ./Middlewares/LibJPEG/jdmainct.o + 0x000000000800f6ec jinit_d_main_controller + .text.get_sof 0x000000000800f7ec 0x25c ./Middlewares/LibJPEG/jdmarker.o + .text.examine_app0 + 0x000000000800fa48 0x142 ./Middlewares/LibJPEG/jdmarker.o + .text.examine_app14 + 0x000000000800fb8a 0x7a ./Middlewares/LibJPEG/jdmarker.o + .text.get_interesting_appn + 0x000000000800fc04 0xd8 ./Middlewares/LibJPEG/jdmarker.o + .text.skip_variable + 0x000000000800fcdc 0x76 ./Middlewares/LibJPEG/jdmarker.o + .text.next_marker + 0x000000000800fd52 0x8c ./Middlewares/LibJPEG/jdmarker.o + .text.read_restart_marker + 0x000000000800fdde 0x5e ./Middlewares/LibJPEG/jdmarker.o + .text.reset_marker_reader + 0x000000000800fe3c 0x1e ./Middlewares/LibJPEG/jdmarker.o + .text.get_dht 0x000000000800fe5a 0x212 ./Middlewares/LibJPEG/jdmarker.o + .text.read_markers + 0x000000000801006c 0x820 ./Middlewares/LibJPEG/jdmarker.o + .text.jpeg_resync_to_restart + 0x000000000801088c 0xa0 ./Middlewares/LibJPEG/jdmarker.o + 0x000000000801088c jpeg_resync_to_restart + .text.jinit_marker_reader + 0x000000000801092c 0x68 ./Middlewares/LibJPEG/jdmarker.o + 0x000000000801092c jinit_marker_reader + .text.prepare_for_output_pass + 0x0000000008010994 0xfe ./Middlewares/LibJPEG/jdmaster.o + .text.finish_output_pass + 0x0000000008010a92 0x1a ./Middlewares/LibJPEG/jdmaster.o + .text.use_merged_upsample + 0x0000000008010aac 0x98 ./Middlewares/LibJPEG/jdmaster.o + .text.jpeg_calc_output_dimensions + 0x0000000008010b44 0x13a ./Middlewares/LibJPEG/jdmaster.o + 0x0000000008010b44 jpeg_calc_output_dimensions + *fill* 0x0000000008010c7e 0x2 + .text.jinit_master_decompress + 0x0000000008010c80 0x1d0 ./Middlewares/LibJPEG/jdmaster.o + 0x0000000008010c80 jinit_master_decompress + .text.start_pass_merged_upsample + 0x0000000008010e50 0xe ./Middlewares/LibJPEG/jdmerge.o + .text.merged_1v_upsample + 0x0000000008010e5e 0x26 ./Middlewares/LibJPEG/jdmerge.o + .text.h2v1_merged_upsample + 0x0000000008010e84 0x10e ./Middlewares/LibJPEG/jdmerge.o + .text.h2v2_merged_upsample + 0x0000000008010f92 0x180 ./Middlewares/LibJPEG/jdmerge.o + .text.merged_2v_upsample + 0x0000000008011112 0x88 ./Middlewares/LibJPEG/jdmerge.o + *fill* 0x000000000801119a 0x2 + .text.jinit_merged_upsampler + 0x000000000801119c 0x118 ./Middlewares/LibJPEG/jdmerge.o + 0x000000000801119c jinit_merged_upsampler + .text.start_pass_dpost + 0x00000000080112b4 0x7c ./Middlewares/LibJPEG/jdpostct.o + .text.post_process_1pass + 0x0000000008011330 0x60 ./Middlewares/LibJPEG/jdpostct.o + .text.post_process_prepass + 0x0000000008011390 0x8e ./Middlewares/LibJPEG/jdpostct.o + .text.post_process_2pass + 0x000000000801141e 0x7e ./Middlewares/LibJPEG/jdpostct.o + .text.jinit_d_post_controller + 0x000000000801149c 0x6c ./Middlewares/LibJPEG/jdpostct.o + 0x000000000801149c jinit_d_post_controller + .text.start_pass_upsample + 0x0000000008011508 0x10 ./Middlewares/LibJPEG/jdsample.o + .text.sep_upsample + 0x0000000008011518 0xbe ./Middlewares/LibJPEG/jdsample.o + .text.fullsize_upsample + 0x00000000080115d6 0x4 ./Middlewares/LibJPEG/jdsample.o + .text.noop_upsample + 0x00000000080115da 0x6 ./Middlewares/LibJPEG/jdsample.o + .text.h2v1_upsample + 0x00000000080115e0 0x32 ./Middlewares/LibJPEG/jdsample.o + .text.int_upsample + 0x0000000008011612 0x74 ./Middlewares/LibJPEG/jdsample.o + .text.h2v2_upsample + 0x0000000008011686 0x52 ./Middlewares/LibJPEG/jdsample.o + .text.jinit_upsampler + 0x00000000080116d8 0x12c ./Middlewares/LibJPEG/jdsample.o + 0x00000000080116d8 jinit_upsampler + .text.output_message + 0x0000000008011804 0x12 ./Middlewares/LibJPEG/jerror.o + .text.emit_message + 0x0000000008011816 0x30 ./Middlewares/LibJPEG/jerror.o + .text.reset_error_mgr + 0x0000000008011846 0xa ./Middlewares/LibJPEG/jerror.o + .text.format_message + 0x0000000008011850 0x82 ./Middlewares/LibJPEG/jerror.o + .text.error_exit + 0x00000000080118d2 0x14 ./Middlewares/LibJPEG/jerror.o + *fill* 0x00000000080118e6 0x2 + .text.jpeg_std_error + 0x00000000080118e8 0x44 ./Middlewares/LibJPEG/jerror.o + 0x00000000080118e8 jpeg_std_error + .text.jpeg_idct_float + 0x000000000801192c 0x31c ./Middlewares/LibJPEG/jidctflt.o + 0x000000000801192c jpeg_idct_float + .text.jpeg_idct_ifast + 0x0000000008011c48 0x296 ./Middlewares/LibJPEG/jidctfst.o + 0x0000000008011c48 jpeg_idct_ifast + *fill* 0x0000000008011ede 0x2 + .text.jpeg_idct_islow + 0x0000000008011ee0 0x2f8 ./Middlewares/LibJPEG/jidctint.o + 0x0000000008011ee0 jpeg_idct_islow + .text.jpeg_idct_7x7 + 0x00000000080121d8 0x294 ./Middlewares/LibJPEG/jidctint.o + 0x00000000080121d8 jpeg_idct_7x7 + .text.jpeg_idct_6x6 + 0x000000000801246c 0x1ae ./Middlewares/LibJPEG/jidctint.o + 0x000000000801246c jpeg_idct_6x6 + *fill* 0x000000000801261a 0x2 + .text.jpeg_idct_5x5 + 0x000000000801261c 0x180 ./Middlewares/LibJPEG/jidctint.o + 0x000000000801261c jpeg_idct_5x5 + .text.jpeg_idct_4x4 + 0x000000000801279c 0x12c ./Middlewares/LibJPEG/jidctint.o + 0x000000000801279c jpeg_idct_4x4 + .text.jpeg_idct_3x3 + 0x00000000080128c8 0xf4 ./Middlewares/LibJPEG/jidctint.o + 0x00000000080128c8 jpeg_idct_3x3 + .text.jpeg_idct_2x2 + 0x00000000080129bc 0x7c ./Middlewares/LibJPEG/jidctint.o + 0x00000000080129bc jpeg_idct_2x2 + .text.jpeg_idct_1x1 + 0x0000000008012a38 0x22 ./Middlewares/LibJPEG/jidctint.o + 0x0000000008012a38 jpeg_idct_1x1 + *fill* 0x0000000008012a5a 0x2 + .text.jpeg_idct_9x9 + 0x0000000008012a5c 0x2c4 ./Middlewares/LibJPEG/jidctint.o + 0x0000000008012a5c jpeg_idct_9x9 + .text.jpeg_idct_10x10 + 0x0000000008012d20 0x304 ./Middlewares/LibJPEG/jidctint.o + 0x0000000008012d20 jpeg_idct_10x10 + .text.jpeg_idct_11x11 + 0x0000000008013024 0x3fc ./Middlewares/LibJPEG/jidctint.o + 0x0000000008013024 jpeg_idct_11x11 + .text.jpeg_idct_12x12 + 0x0000000008013420 0x3cc ./Middlewares/LibJPEG/jidctint.o + 0x0000000008013420 jpeg_idct_12x12 + .text.jpeg_idct_13x13 + 0x00000000080137ec 0x498 ./Middlewares/LibJPEG/jidctint.o + 0x00000000080137ec jpeg_idct_13x13 + .text.jpeg_idct_14x14 + 0x0000000008013c84 0x448 ./Middlewares/LibJPEG/jidctint.o + 0x0000000008013c84 jpeg_idct_14x14 + .text.jpeg_idct_15x15 + 0x00000000080140cc 0x494 ./Middlewares/LibJPEG/jidctint.o + 0x00000000080140cc jpeg_idct_15x15 + .text.jpeg_idct_16x16 + 0x0000000008014560 0x540 ./Middlewares/LibJPEG/jidctint.o + 0x0000000008014560 jpeg_idct_16x16 + .text.jpeg_idct_16x8 + 0x0000000008014aa0 0x438 ./Middlewares/LibJPEG/jidctint.o + 0x0000000008014aa0 jpeg_idct_16x8 + .text.jpeg_idct_14x7 + 0x0000000008014ed8 0x38c ./Middlewares/LibJPEG/jidctint.o + 0x0000000008014ed8 jpeg_idct_14x7 + .text.jpeg_idct_12x6 + 0x0000000008015264 0x2b8 ./Middlewares/LibJPEG/jidctint.o + 0x0000000008015264 jpeg_idct_12x6 + .text.jpeg_idct_10x5 + 0x000000000801551c 0x250 ./Middlewares/LibJPEG/jidctint.o + 0x000000000801551c jpeg_idct_10x5 + .text.jpeg_idct_8x4 + 0x000000000801576c 0x1ec ./Middlewares/LibJPEG/jidctint.o + 0x000000000801576c jpeg_idct_8x4 + .text.jpeg_idct_6x3 + 0x0000000008015958 0x15a ./Middlewares/LibJPEG/jidctint.o + 0x0000000008015958 jpeg_idct_6x3 + *fill* 0x0000000008015ab2 0x2 + .text.jpeg_idct_4x2 + 0x0000000008015ab4 0xcc ./Middlewares/LibJPEG/jidctint.o + 0x0000000008015ab4 jpeg_idct_4x2 + .text.jpeg_idct_2x1 + 0x0000000008015b80 0x38 ./Middlewares/LibJPEG/jidctint.o + 0x0000000008015b80 jpeg_idct_2x1 + .text.jpeg_idct_8x16 + 0x0000000008015bb8 0x3d8 ./Middlewares/LibJPEG/jidctint.o + 0x0000000008015bb8 jpeg_idct_8x16 + .text.jpeg_idct_7x14 + 0x0000000008015f90 0x370 ./Middlewares/LibJPEG/jidctint.o + 0x0000000008015f90 jpeg_idct_7x14 + .text.jpeg_idct_6x12 + 0x0000000008016300 0x2b8 ./Middlewares/LibJPEG/jidctint.o + 0x0000000008016300 jpeg_idct_6x12 + .text.jpeg_idct_5x10 + 0x00000000080165b8 0x238 ./Middlewares/LibJPEG/jidctint.o + 0x00000000080165b8 jpeg_idct_5x10 + .text.jpeg_idct_4x8 + 0x00000000080167f0 0x218 ./Middlewares/LibJPEG/jidctint.o + 0x00000000080167f0 jpeg_idct_4x8 + .text.jpeg_idct_3x6 + 0x0000000008016a08 0x14e ./Middlewares/LibJPEG/jidctint.o + 0x0000000008016a08 jpeg_idct_3x6 + *fill* 0x0000000008016b56 0x2 + .text.jpeg_idct_2x4 + 0x0000000008016b58 0xd8 ./Middlewares/LibJPEG/jidctint.o + 0x0000000008016b58 jpeg_idct_2x4 + .text.jpeg_idct_1x2 + 0x0000000008016c30 0x38 ./Middlewares/LibJPEG/jidctint.o + 0x0000000008016c30 jpeg_idct_1x2 + .text.out_of_memory + 0x0000000008016c68 0xc ./Middlewares/LibJPEG/jmemmgr.o + .text.do_barray_io + 0x0000000008016c74 0x86 ./Middlewares/LibJPEG/jmemmgr.o + *fill* 0x0000000008016cfa 0x2 + .text.alloc_small + 0x0000000008016cfc 0xcc ./Middlewares/LibJPEG/jmemmgr.o + .text.request_virt_barray + 0x0000000008016dc8 0x4a ./Middlewares/LibJPEG/jmemmgr.o + .text.request_virt_sarray + 0x0000000008016e12 0x4a ./Middlewares/LibJPEG/jmemmgr.o + .text.free_pool + 0x0000000008016e5c 0xa4 ./Middlewares/LibJPEG/jmemmgr.o + .text.self_destruct + 0x0000000008016f00 0x2a ./Middlewares/LibJPEG/jmemmgr.o + .text.access_virt_barray + 0x0000000008016f2a 0x100 ./Middlewares/LibJPEG/jmemmgr.o + .text.alloc_large + 0x000000000801702a 0x6e ./Middlewares/LibJPEG/jmemmgr.o + .text.alloc_barray + 0x0000000008017098 0x70 ./Middlewares/LibJPEG/jmemmgr.o + .text.alloc_sarray + 0x0000000008017108 0x70 ./Middlewares/LibJPEG/jmemmgr.o + .text.realize_virt_arrays + 0x0000000008017178 0x128 ./Middlewares/LibJPEG/jmemmgr.o + .text.access_virt_sarray + 0x00000000080172a0 0x1c2 ./Middlewares/LibJPEG/jmemmgr.o + *fill* 0x0000000008017462 0x2 + .text.jinit_memory_mgr + 0x0000000008017464 0xa4 ./Middlewares/LibJPEG/jmemmgr.o + 0x0000000008017464 jinit_memory_mgr + .text.jpeg_get_small + 0x0000000008017508 0x6 ./Middlewares/LibJPEG/jmemnobs.o + 0x0000000008017508 jpeg_get_small + .text.jpeg_free_small + 0x000000000801750e 0x6 ./Middlewares/LibJPEG/jmemnobs.o + 0x000000000801750e jpeg_free_small + .text.jpeg_get_large + 0x0000000008017514 0x6 ./Middlewares/LibJPEG/jmemnobs.o + 0x0000000008017514 jpeg_get_large + .text.jpeg_free_large + 0x000000000801751a 0x6 ./Middlewares/LibJPEG/jmemnobs.o + 0x000000000801751a jpeg_free_large + .text.jpeg_mem_available + 0x0000000008017520 0x4 ./Middlewares/LibJPEG/jmemnobs.o + 0x0000000008017520 jpeg_mem_available + .text.jpeg_open_backing_store + 0x0000000008017524 0xa ./Middlewares/LibJPEG/jmemnobs.o + 0x0000000008017524 jpeg_open_backing_store + .text.jpeg_mem_init + 0x000000000801752e 0x4 ./Middlewares/LibJPEG/jmemnobs.o + 0x000000000801752e jpeg_mem_init + .text.jpeg_mem_term + 0x0000000008017532 0x2 ./Middlewares/LibJPEG/jmemnobs.o + 0x0000000008017532 jpeg_mem_term + .text.create_colorindex + 0x0000000008017534 0xb8 ./Middlewares/LibJPEG/jquant1.o + .text.color_quantize + 0x00000000080175ec 0x5e ./Middlewares/LibJPEG/jquant1.o + .text.color_quantize3 + 0x000000000801764a 0x5a ./Middlewares/LibJPEG/jquant1.o + .text.quantize3_ord_dither + 0x00000000080176a4 0xb0 ./Middlewares/LibJPEG/jquant1.o + .text.alloc_fs_workspace + 0x0000000008017754 0x2e ./Middlewares/LibJPEG/jquant1.o + .text.finish_pass_1_quant + 0x0000000008017782 0x2 ./Middlewares/LibJPEG/jquant1.o + .text.new_color_map_1_quant + 0x0000000008017784 0xa ./Middlewares/LibJPEG/jquant1.o + *fill* 0x000000000801778e 0x2 + .text.start_pass_1_quant + 0x0000000008017790 0x138 ./Middlewares/LibJPEG/jquant1.o + .text.quantize_fs_dither + 0x00000000080178c8 0x138 ./Middlewares/LibJPEG/jquant1.o + .text.quantize_ord_dither + 0x0000000008017a00 0xae ./Middlewares/LibJPEG/jquant1.o + *fill* 0x0000000008017aae 0x2 + .text.jinit_1pass_quantizer + 0x0000000008017ab0 0x1c4 ./Middlewares/LibJPEG/jquant1.o + 0x0000000008017ab0 jinit_1pass_quantizer + .text.prescan_quantize + 0x0000000008017c74 0x64 ./Middlewares/LibJPEG/jquant2.o + .text.fill_inverse_cmap + 0x0000000008017cd8 0x2a8 ./Middlewares/LibJPEG/jquant2.o + .text.pass2_no_dither + 0x0000000008017f80 0x82 ./Middlewares/LibJPEG/jquant2.o + .text.pass2_fs_dither + 0x0000000008018002 0x202 ./Middlewares/LibJPEG/jquant2.o + .text.init_error_limit + 0x0000000008018204 0x6e ./Middlewares/LibJPEG/jquant2.o + .text.finish_pass2 + 0x0000000008018272 0x2 ./Middlewares/LibJPEG/jquant2.o + .text.new_color_map_2_quant + 0x0000000008018274 0xa ./Middlewares/LibJPEG/jquant2.o + *fill* 0x000000000801827e 0x2 + .text.start_pass_2_quant + 0x0000000008018280 0xd0 ./Middlewares/LibJPEG/jquant2.o + .text.update_box.isra.0 + 0x0000000008018350 0x22a ./Middlewares/LibJPEG/jquant2.o + .text.finish_pass1 + 0x000000000801857a 0x242 ./Middlewares/LibJPEG/jquant2.o + .text.jinit_2pass_quantizer + 0x00000000080187bc 0xd8 ./Middlewares/LibJPEG/jquant2.o + 0x00000000080187bc jinit_2pass_quantizer + .text.jdiv_round_up + 0x0000000008018894 0xa ./Middlewares/LibJPEG/jutils.o + 0x0000000008018894 jdiv_round_up + .text.jround_up + 0x000000000801889e 0x10 ./Middlewares/LibJPEG/jutils.o + 0x000000000801889e jround_up + .text.jcopy_sample_rows + 0x00000000080188ae 0x24 ./Middlewares/LibJPEG/jutils.o + 0x00000000080188ae jcopy_sample_rows + .text.jcopy_block_row + 0x00000000080188d2 0xc ./Middlewares/LibJPEG/jutils.o + 0x00000000080188d2 jcopy_block_row + .text.lwip_htons + 0x00000000080188de 0x6 ./Middlewares/LwIP/def.o + 0x00000000080188de lwip_htons + .text.lwip_htonl + 0x00000000080188e4 0x4 ./Middlewares/LwIP/def.o + 0x00000000080188e4 lwip_htonl + .text.dhcp_set_state + 0x00000000080188e8 0x10 ./Middlewares/LwIP/dhcp.o + .text.dhcp_option_short + 0x00000000080188f8 0x38 ./Middlewares/LwIP/dhcp.o + .text.dhcp_option + 0x0000000008018930 0x3c ./Middlewares/LwIP/dhcp.o + .text.dhcp_option_byte + 0x000000000801896c 0x30 ./Middlewares/LwIP/dhcp.o + .text.dhcp_option_long + 0x000000000801899c 0x48 ./Middlewares/LwIP/dhcp.o + .text.dhcp_create_msg + 0x00000000080189e4 0x124 ./Middlewares/LwIP/dhcp.o + .text.dhcp_option_trailer + 0x0000000008018b08 0x3e ./Middlewares/LwIP/dhcp.o + *fill* 0x0000000008018b46 0x2 + .text.dhcp_discover + 0x0000000008018b48 0xf0 ./Middlewares/LwIP/dhcp.o + .text.dhcp_check + 0x0000000008018c38 0x2a ./Middlewares/LwIP/dhcp.o + *fill* 0x0000000008018c62 0x2 + .text.dhcp_bind + 0x0000000008018c64 0x104 ./Middlewares/LwIP/dhcp.o + .text.dhcp_inc_pcb_refcount + 0x0000000008018d68 0x74 ./Middlewares/LwIP/dhcp.o + .text.dhcp_dec_pcb_refcount + 0x0000000008018ddc 0x40 ./Middlewares/LwIP/dhcp.o + .text.dhcp_reboot.isra.0 + 0x0000000008018e1c 0x100 ./Middlewares/LwIP/dhcp.o + .text.dhcp_handle_ack.isra.0 + 0x0000000008018f1c 0x68 ./Middlewares/LwIP/dhcp.o + .text.dhcp_select.isra.0 + 0x0000000008018f84 0x164 ./Middlewares/LwIP/dhcp.o + .text.dhcp_recv + 0x00000000080190e8 0x41c ./Middlewares/LwIP/dhcp.o + .text.dhcp_network_changed + 0x0000000008019504 0x58 ./Middlewares/LwIP/dhcp.o + 0x0000000008019504 dhcp_network_changed + .text.dhcp_arp_reply + 0x000000000801955c 0xc4 ./Middlewares/LwIP/dhcp.o + 0x000000000801955c dhcp_arp_reply + .text.dhcp_renew + 0x0000000008019620 0xe4 ./Middlewares/LwIP/dhcp.o + 0x0000000008019620 dhcp_renew + .text.dhcp_supplied_address + 0x0000000008019704 0x1e ./Middlewares/LwIP/dhcp.o + 0x0000000008019704 dhcp_supplied_address + *fill* 0x0000000008019722 0x2 + .text.dhcp_release_and_stop + 0x0000000008019724 0xbc ./Middlewares/LwIP/dhcp.o + 0x0000000008019724 dhcp_release_and_stop + .text.dhcp_start + 0x00000000080197e0 0xa8 ./Middlewares/LwIP/dhcp.o + 0x00000000080197e0 dhcp_start + .text.dhcp_coarse_tmr + 0x0000000008019888 0x178 ./Middlewares/LwIP/dhcp.o + 0x0000000008019888 dhcp_coarse_tmr + .text.dhcp_fine_tmr + 0x0000000008019a00 0x9c ./Middlewares/LwIP/dhcp.o + 0x0000000008019a00 dhcp_fine_tmr + .text.etharp_free_entry + 0x0000000008019a9c 0x28 ./Middlewares/LwIP/etharp.o + .text.etharp_find_entry + 0x0000000008019ac4 0x128 ./Middlewares/LwIP/etharp.o + .text.etharp_raw + 0x0000000008019bec 0xdc ./Middlewares/LwIP/etharp.o + .text.etharp_cleanup_netif + 0x0000000008019cc8 0x28 ./Middlewares/LwIP/etharp.o + 0x0000000008019cc8 etharp_cleanup_netif + .text.etharp_input + 0x0000000008019cf0 0x15c ./Middlewares/LwIP/etharp.o + 0x0000000008019cf0 etharp_input + .text.etharp_request + 0x0000000008019e4c 0x2c ./Middlewares/LwIP/etharp.o + 0x0000000008019e4c etharp_request + .text.etharp_tmr + 0x0000000008019e78 0x54 ./Middlewares/LwIP/etharp.o + 0x0000000008019e78 etharp_tmr + .text.etharp_output_to_arp_index + 0x0000000008019ecc 0xac ./Middlewares/LwIP/etharp.o + .text.etharp_query + 0x0000000008019f78 0x134 ./Middlewares/LwIP/etharp.o + 0x0000000008019f78 etharp_query + .text.etharp_output + 0x000000000801a0ac 0x13c ./Middlewares/LwIP/etharp.o + 0x000000000801a0ac etharp_output + .text.ethernet_input + 0x000000000801a1e8 0xa0 ./Middlewares/LwIP/ethernet.o + 0x000000000801a1e8 ethernet_input + .text.ethernet_output + 0x000000000801a288 0x70 ./Middlewares/LwIP/ethernet.o + 0x000000000801a288 ethernet_output + .text.icmp_send_response + 0x000000000801a2f8 0x90 ./Middlewares/LwIP/icmp.o + .text.icmp_input + 0x000000000801a388 0x12c ./Middlewares/LwIP/icmp.o + 0x000000000801a388 icmp_input + .text.icmp_dest_unreach + 0x000000000801a4b4 0x8 ./Middlewares/LwIP/icmp.o + 0x000000000801a4b4 icmp_dest_unreach + .text.icmp_time_exceeded + 0x000000000801a4bc 0x8 ./Middlewares/LwIP/icmp.o + 0x000000000801a4bc icmp_time_exceeded + .text.lwip_init + 0x000000000801a4c4 0x22 ./Middlewares/LwIP/init.o + 0x000000000801a4c4 lwip_init + *fill* 0x000000000801a4e6 0x2 + .text.ip4_input_accept + 0x000000000801a4e8 0x34 ./Middlewares/LwIP/ip4.o + .text.ip4_route + 0x000000000801a51c 0x5c ./Middlewares/LwIP/ip4.o + 0x000000000801a51c ip4_route + .text.ip4_input + 0x000000000801a578 0x188 ./Middlewares/LwIP/ip4.o + 0x000000000801a578 ip4_input + .text.ip4_output_if_src + 0x000000000801a700 0xf8 ./Middlewares/LwIP/ip4.o + 0x000000000801a700 ip4_output_if_src + .text.ip4_output_if + 0x000000000801a7f8 0x22 ./Middlewares/LwIP/ip4.o + 0x000000000801a7f8 ip4_output_if + .text.ip4_addr_isbroadcast_u32 + 0x000000000801a81a 0x36 ./Middlewares/LwIP/ip4_addr.o + 0x000000000801a81a ip4_addr_isbroadcast_u32 + .text.ip_reass_dequeue_datagram + 0x000000000801a850 0x44 ./Middlewares/LwIP/ip4_frag.o + .text.ip_reass_free_complete_datagram + 0x000000000801a894 0xe8 ./Middlewares/LwIP/ip4_frag.o + .text.ip_reass_remove_oldest_datagram + 0x000000000801a97c 0x78 ./Middlewares/LwIP/ip4_frag.o + .text.ip_frag_free_pbuf_custom_ref + 0x000000000801a9f4 0x2c ./Middlewares/LwIP/ip4_frag.o + .text.ipfrag_free_pbuf_custom + 0x000000000801aa20 0x34 ./Middlewares/LwIP/ip4_frag.o + .text.ip_reass_tmr + 0x000000000801aa54 0x2c ./Middlewares/LwIP/ip4_frag.o + 0x000000000801aa54 ip_reass_tmr + .text.ip4_reass + 0x000000000801aa80 0x3b0 ./Middlewares/LwIP/ip4_frag.o + 0x000000000801aa80 ip4_reass + .text.ip4_frag + 0x000000000801ae30 0x1d8 ./Middlewares/LwIP/ip4_frag.o + 0x000000000801ae30 ip4_frag + .text.mem_init + 0x000000000801b008 0x70 ./Middlewares/LwIP/mem.o + 0x000000000801b008 mem_init + .text.mem_free + 0x000000000801b078 0x1b8 ./Middlewares/LwIP/mem.o + 0x000000000801b078 mem_free + .text.mem_trim + 0x000000000801b230 0x16c ./Middlewares/LwIP/mem.o + 0x000000000801b230 mem_trim + .text.mem_malloc + 0x000000000801b39c 0x160 ./Middlewares/LwIP/mem.o + 0x000000000801b39c mem_malloc + .text.do_memp_malloc_pool + 0x000000000801b4fc 0x3c ./Middlewares/LwIP/memp.o + .text.do_memp_free_pool + 0x000000000801b538 0x38 ./Middlewares/LwIP/memp.o + .text.memp_init_pool + 0x000000000801b570 0x26 ./Middlewares/LwIP/memp.o + 0x000000000801b570 memp_init_pool + *fill* 0x000000000801b596 0x2 + .text.memp_init + 0x000000000801b598 0x1c ./Middlewares/LwIP/memp.o + 0x000000000801b598 memp_init + .text.memp_malloc_pool + 0x000000000801b5b4 0x2c ./Middlewares/LwIP/memp.o + 0x000000000801b5b4 memp_malloc_pool + .text.memp_malloc + 0x000000000801b5e0 0x38 ./Middlewares/LwIP/memp.o + 0x000000000801b5e0 memp_malloc + .text.memp_free_pool + 0x000000000801b618 0x28 ./Middlewares/LwIP/memp.o + 0x000000000801b618 memp_free_pool + .text.memp_free + 0x000000000801b640 0x30 ./Middlewares/LwIP/memp.o + 0x000000000801b640 memp_free + .text.netif_null_output_ip4 + 0x000000000801b670 0x6 ./Middlewares/LwIP/netif.o + *fill* 0x000000000801b676 0x2 + .text.netif_issue_reports + 0x000000000801b678 0x44 ./Middlewares/LwIP/netif.o + .text.netif_do_set_ipaddr.isra.0 + 0x000000000801b6bc 0x50 ./Middlewares/LwIP/netif.o + .text.netif_init + 0x000000000801b70c 0x2 ./Middlewares/LwIP/netif.o + 0x000000000801b70c netif_init + *fill* 0x000000000801b70e 0x2 + .text.netif_set_addr + 0x000000000801b710 0x58 ./Middlewares/LwIP/netif.o + 0x000000000801b710 netif_set_addr + .text.netif_add + 0x000000000801b768 0x12c ./Middlewares/LwIP/netif.o + 0x000000000801b768 netif_add + .text.netif_set_default + 0x000000000801b894 0xc ./Middlewares/LwIP/netif.o + 0x000000000801b894 netif_set_default + .text.netif_set_up + 0x000000000801b8a0 0x34 ./Middlewares/LwIP/netif.o + 0x000000000801b8a0 netif_set_up + .text.netif_set_down + 0x000000000801b8d4 0x38 ./Middlewares/LwIP/netif.o + 0x000000000801b8d4 netif_set_down + .text.netif_set_link_up + 0x000000000801b90c 0x50 ./Middlewares/LwIP/netif.o + 0x000000000801b90c netif_set_link_up + .text.netif_set_link_down + 0x000000000801b95c 0x34 ./Middlewares/LwIP/netif.o + 0x000000000801b95c netif_set_link_down + .text.netif_set_link_callback + 0x000000000801b990 0x6 ./Middlewares/LwIP/netif.o + 0x000000000801b990 netif_set_link_callback + *fill* 0x000000000801b996 0x2 + .text.netif_get_by_index + 0x000000000801b998 0x20 ./Middlewares/LwIP/netif.o + 0x000000000801b998 netif_get_by_index + .text.pbuf_free_ooseq_callback + 0x000000000801b9b8 0x30 ./Middlewares/LwIP/pbuf.o + .text.pbuf_add_header_impl + 0x000000000801b9e8 0x64 ./Middlewares/LwIP/pbuf.o + .text.pbuf_alloc_reference + 0x000000000801ba4c 0x48 ./Middlewares/LwIP/pbuf.o + 0x000000000801ba4c pbuf_alloc_reference + .text.pbuf_alloced_custom + 0x000000000801ba94 0x34 ./Middlewares/LwIP/pbuf.o + 0x000000000801ba94 pbuf_alloced_custom + .text.pbuf_add_header + 0x000000000801bac8 0x6 ./Middlewares/LwIP/pbuf.o + 0x000000000801bac8 pbuf_add_header + *fill* 0x000000000801bace 0x2 + .text.pbuf_remove_header + 0x000000000801bad0 0x58 ./Middlewares/LwIP/pbuf.o + 0x000000000801bad0 pbuf_remove_header + .text.pbuf_header_force + 0x000000000801bb28 0x10 ./Middlewares/LwIP/pbuf.o + 0x000000000801bb28 pbuf_header_force + .text.pbuf_free + 0x000000000801bb38 0xd0 ./Middlewares/LwIP/pbuf.o + 0x000000000801bb38 pbuf_free + .text.pbuf_alloc + 0x000000000801bc08 0x124 ./Middlewares/LwIP/pbuf.o + 0x000000000801bc08 pbuf_alloc + .text.pbuf_realloc + 0x000000000801bd2c 0xb0 ./Middlewares/LwIP/pbuf.o + 0x000000000801bd2c pbuf_realloc + .text.pbuf_clen + 0x000000000801bddc 0x10 ./Middlewares/LwIP/pbuf.o + 0x000000000801bddc pbuf_clen + .text.pbuf_ref + 0x000000000801bdec 0x38 ./Middlewares/LwIP/pbuf.o + 0x000000000801bdec pbuf_ref + .text.pbuf_cat + 0x000000000801be24 0x74 ./Middlewares/LwIP/pbuf.o + 0x000000000801be24 pbuf_cat + .text.pbuf_chain + 0x000000000801be98 0x12 ./Middlewares/LwIP/pbuf.o + 0x000000000801be98 pbuf_chain + *fill* 0x000000000801beaa 0x2 + .text.pbuf_copy + 0x000000000801beac 0x104 ./Middlewares/LwIP/pbuf.o + 0x000000000801beac pbuf_copy + .text.pbuf_copy_partial + 0x000000000801bfb0 0x8c ./Middlewares/LwIP/pbuf.o + 0x000000000801bfb0 pbuf_copy_partial + .text.pbuf_clone + 0x000000000801c03c 0x38 ./Middlewares/LwIP/pbuf.o + 0x000000000801c03c pbuf_clone + .text.sys_mbox_new + 0x000000000801c074 0x1a ./Middlewares/LwIP/sys_arch.o + 0x000000000801c074 sys_mbox_new + .text.sys_mbox_trypost + 0x000000000801c08e 0x1e ./Middlewares/LwIP/sys_arch.o + 0x000000000801c08e sys_mbox_trypost + .text.sys_arch_mbox_fetch + 0x000000000801c0ac 0x3c ./Middlewares/LwIP/sys_arch.o + 0x000000000801c0ac sys_arch_mbox_fetch + .text.sys_mbox_valid + 0x000000000801c0e8 0xa ./Middlewares/LwIP/sys_arch.o + 0x000000000801c0e8 sys_mbox_valid + *fill* 0x000000000801c0f2 0x2 + .text.sys_init + 0x000000000801c0f4 0x14 ./Middlewares/LwIP/sys_arch.o + 0x000000000801c0f4 sys_init + .text.sys_mutex_new + 0x000000000801c108 0x16 ./Middlewares/LwIP/sys_arch.o + 0x000000000801c108 sys_mutex_new + .text.sys_mutex_lock + 0x000000000801c11e 0xa ./Middlewares/LwIP/sys_arch.o + 0x000000000801c11e sys_mutex_lock + .text.sys_mutex_unlock + 0x000000000801c128 0x6 ./Middlewares/LwIP/sys_arch.o + 0x000000000801c128 sys_mutex_unlock + .text.sys_thread_new + 0x000000000801c12e 0x2c ./Middlewares/LwIP/sys_arch.o + 0x000000000801c12e sys_thread_new + *fill* 0x000000000801c15a 0x2 + .text.sys_arch_protect + 0x000000000801c15c 0x18 ./Middlewares/LwIP/sys_arch.o + 0x000000000801c15c sys_arch_protect + .text.sys_arch_unprotect + 0x000000000801c174 0xc ./Middlewares/LwIP/sys_arch.o + 0x000000000801c174 sys_arch_unprotect + .text.tcp_close_shutdown_fin + 0x000000000801c180 0x60 ./Middlewares/LwIP/tcp.o + .text.tcp_init + 0x000000000801c1e0 0x18 ./Middlewares/LwIP/tcp.o + 0x000000000801c1e0 tcp_init + .text.tcp_free + 0x000000000801c1f8 0x30 ./Middlewares/LwIP/tcp.o + 0x000000000801c1f8 tcp_free + .text.tcp_update_rcv_ann_wnd + 0x000000000801c228 0x6c ./Middlewares/LwIP/tcp.o + 0x000000000801c228 tcp_update_rcv_ann_wnd + .text.tcp_recved + 0x000000000801c294 0x7c ./Middlewares/LwIP/tcp.o + 0x000000000801c294 tcp_recved + .text.tcp_seg_free + 0x000000000801c310 0x1c ./Middlewares/LwIP/tcp.o + 0x000000000801c310 tcp_seg_free + .text.tcp_segs_free + 0x000000000801c32c 0x10 ./Middlewares/LwIP/tcp.o + 0x000000000801c32c tcp_segs_free + .text.tcp_seg_copy + 0x000000000801c33c 0x48 ./Middlewares/LwIP/tcp.o + 0x000000000801c33c tcp_seg_copy + .text.tcp_next_iss + 0x000000000801c384 0x34 ./Middlewares/LwIP/tcp.o + 0x000000000801c384 tcp_next_iss + .text.tcp_eff_send_mss_netif + 0x000000000801c3b8 0x3c ./Middlewares/LwIP/tcp.o + 0x000000000801c3b8 tcp_eff_send_mss_netif + .text.tcp_free_ooseq + 0x000000000801c3f4 0x12 ./Middlewares/LwIP/tcp.o + 0x000000000801c3f4 tcp_free_ooseq + *fill* 0x000000000801c406 0x2 + .text.tcp_pcb_purge + 0x000000000801c408 0x64 ./Middlewares/LwIP/tcp.o + 0x000000000801c408 tcp_pcb_purge + .text.tcp_pcb_remove + 0x000000000801c46c 0xcc ./Middlewares/LwIP/tcp.o + 0x000000000801c46c tcp_pcb_remove + .text.tcp_abandon + 0x000000000801c538 0x104 ./Middlewares/LwIP/tcp.o + 0x000000000801c538 tcp_abandon + .text.tcp_abort + 0x000000000801c63c 0x6 ./Middlewares/LwIP/tcp.o + 0x000000000801c63c tcp_abort + *fill* 0x000000000801c642 0x2 + .text.tcp_netif_ip_addr_changed_pcblist + 0x000000000801c644 0x3c ./Middlewares/LwIP/tcp.o + .text.tcp_netif_ip_addr_changed + 0x000000000801c680 0x48 ./Middlewares/LwIP/tcp.o + 0x000000000801c680 tcp_netif_ip_addr_changed + .text.tcp_kill_state + 0x000000000801c6c8 0x3c ./Middlewares/LwIP/tcp.o + .text.tcp_alloc + 0x000000000801c704 0x134 ./Middlewares/LwIP/tcp.o + 0x000000000801c704 tcp_alloc + .text.tcp_close_shutdown + 0x000000000801c838 0x164 ./Middlewares/LwIP/tcp.o + .text.tcp_close + 0x000000000801c99c 0x3c ./Middlewares/LwIP/tcp.o + 0x000000000801c99c tcp_close + .text.tcp_recv_null + 0x000000000801c9d8 0x48 ./Middlewares/LwIP/tcp.o + 0x000000000801c9d8 tcp_recv_null + .text.tcp_process_refused_data + 0x000000000801ca20 0x88 ./Middlewares/LwIP/tcp.o + 0x000000000801ca20 tcp_process_refused_data + .text.tcp_fasttmr + 0x000000000801caa8 0x80 ./Middlewares/LwIP/tcp.o + 0x000000000801caa8 tcp_fasttmr + .text.tcp_slowtmr + 0x000000000801cb28 0x434 ./Middlewares/LwIP/tcp.o + 0x000000000801cb28 tcp_slowtmr + .text.tcp_tmr 0x000000000801cf5c 0x24 ./Middlewares/LwIP/tcp.o + 0x000000000801cf5c tcp_tmr + .text.tcp_get_next_optbyte + 0x000000000801cf80 0x38 ./Middlewares/LwIP/tcp_in.o + .text.tcp_oos_insert_segment + 0x000000000801cfb8 0x94 ./Middlewares/LwIP/tcp_in.o + .text.tcp_parseopt + 0x000000000801d04c 0x90 ./Middlewares/LwIP/tcp_in.o + .text.tcp_input_delayed_close + 0x000000000801d0dc 0x58 ./Middlewares/LwIP/tcp_in.o + .text.tcp_free_acked_segments.constprop.0 + 0x000000000801d134 0xc4 ./Middlewares/LwIP/tcp_in.o + .text.tcp_receive + 0x000000000801d1f8 0x85c ./Middlewares/LwIP/tcp_in.o + .text.tcp_input + 0x000000000801da54 0xafc ./Middlewares/LwIP/tcp_in.o + 0x000000000801da54 tcp_input + .text.tcp_trigger_input_pcb_close + 0x000000000801e550 0x10 ./Middlewares/LwIP/tcp_in.o + 0x000000000801e550 tcp_trigger_input_pcb_close + .text.tcp_output_segment_busy + 0x000000000801e560 0x2c ./Middlewares/LwIP/tcp_out.o + .text.tcp_create_segment + 0x000000000801e58c 0xe4 ./Middlewares/LwIP/tcp_out.o + .text.tcp_output_alloc_header_common.constprop.0 + 0x000000000801e670 0x84 ./Middlewares/LwIP/tcp_out.o + .text.tcp_output_alloc_header.constprop.0 + 0x000000000801e6f4 0x4c ./Middlewares/LwIP/tcp_out.o + .text.tcp_output_fill_options.constprop.0 + 0x000000000801e740 0x20 ./Middlewares/LwIP/tcp_out.o + .text.tcp_output_control_segment + 0x000000000801e760 0x70 ./Middlewares/LwIP/tcp_out.o + .text.tcp_split_unsent_seg + 0x000000000801e7d0 0x198 ./Middlewares/LwIP/tcp_out.o + 0x000000000801e7d0 tcp_split_unsent_seg + .text.tcp_enqueue_flags + 0x000000000801e968 0x128 ./Middlewares/LwIP/tcp_out.o + 0x000000000801e968 tcp_enqueue_flags + .text.tcp_send_fin + 0x000000000801ea90 0x60 ./Middlewares/LwIP/tcp_out.o + 0x000000000801ea90 tcp_send_fin + .text.tcp_rexmit_rto_prepare + 0x000000000801eaf0 0x88 ./Middlewares/LwIP/tcp_out.o + 0x000000000801eaf0 tcp_rexmit_rto_prepare + .text.tcp_rexmit + 0x000000000801eb78 0x80 ./Middlewares/LwIP/tcp_out.o + 0x000000000801eb78 tcp_rexmit + .text.tcp_rexmit_fast + 0x000000000801ebf8 0x68 ./Middlewares/LwIP/tcp_out.o + 0x000000000801ebf8 tcp_rexmit_fast + .text.tcp_rst 0x000000000801ec60 0x8c ./Middlewares/LwIP/tcp_out.o + 0x000000000801ec60 tcp_rst + .text.tcp_send_empty_ack + 0x000000000801ecec 0x64 ./Middlewares/LwIP/tcp_out.o + 0x000000000801ecec tcp_send_empty_ack + .text.tcp_output + 0x000000000801ed50 0x354 ./Middlewares/LwIP/tcp_out.o + 0x000000000801ed50 tcp_output + .text.tcp_rexmit_rto_commit + 0x000000000801f0a4 0x38 ./Middlewares/LwIP/tcp_out.o + 0x000000000801f0a4 tcp_rexmit_rto_commit + .text.tcp_rexmit_rto + 0x000000000801f0dc 0x34 ./Middlewares/LwIP/tcp_out.o + 0x000000000801f0dc tcp_rexmit_rto + .text.tcp_keepalive + 0x000000000801f110 0x50 ./Middlewares/LwIP/tcp_out.o + 0x000000000801f110 tcp_keepalive + .text.tcp_zero_window_probe + 0x000000000801f160 0xc8 ./Middlewares/LwIP/tcp_out.o + 0x000000000801f160 tcp_zero_window_probe + .text.tcpip_thread + 0x000000000801f228 0xd0 ./Middlewares/LwIP/tcpip.o + .text.tcpip_inpkt + 0x000000000801f2f8 0x58 ./Middlewares/LwIP/tcpip.o + 0x000000000801f2f8 tcpip_inpkt + .text.tcpip_input + 0x000000000801f350 0x1c ./Middlewares/LwIP/tcpip.o + 0x000000000801f350 tcpip_input + .text.tcpip_try_callback + 0x000000000801f36c 0x58 ./Middlewares/LwIP/tcpip.o + 0x000000000801f36c tcpip_try_callback + .text.tcpip_init + 0x000000000801f3c4 0x80 ./Middlewares/LwIP/tcpip.o + 0x000000000801f3c4 tcpip_init + .text.sys_timeout_abs + 0x000000000801f444 0x64 ./Middlewares/LwIP/timeouts.o + .text.lwip_cyclic_timer + 0x000000000801f4a8 0x34 ./Middlewares/LwIP/timeouts.o + .text.sys_timeout + 0x000000000801f4dc 0x3c ./Middlewares/LwIP/timeouts.o + 0x000000000801f4dc sys_timeout + .text.tcp_timer_needed + 0x000000000801f518 0x34 ./Middlewares/LwIP/timeouts.o + 0x000000000801f518 tcp_timer_needed + .text.tcpip_tcp_timer + 0x000000000801f54c 0x38 ./Middlewares/LwIP/timeouts.o + .text.sys_timeouts_init + 0x000000000801f584 0x24 ./Middlewares/LwIP/timeouts.o + 0x000000000801f584 sys_timeouts_init + .text.sys_check_timeouts + 0x000000000801f5a8 0x44 ./Middlewares/LwIP/timeouts.o + 0x000000000801f5a8 sys_check_timeouts + .text.sys_timeouts_sleeptime + 0x000000000801f5ec 0x24 ./Middlewares/LwIP/timeouts.o + 0x000000000801f5ec sys_timeouts_sleeptime + .text.udp_init + 0x000000000801f610 0x18 ./Middlewares/LwIP/udp.o + 0x000000000801f610 udp_init + .text.udp_input + 0x000000000801f628 0x1b0 ./Middlewares/LwIP/udp.o + 0x000000000801f628 udp_input + .text.udp_bind + 0x000000000801f7d8 0xc0 ./Middlewares/LwIP/udp.o + 0x000000000801f7d8 udp_bind + .text.udp_sendto_if_src + 0x000000000801f898 0x130 ./Middlewares/LwIP/udp.o + 0x000000000801f898 udp_sendto_if_src + .text.udp_sendto_if + 0x000000000801f9c8 0x80 ./Middlewares/LwIP/udp.o + 0x000000000801f9c8 udp_sendto_if + .text.udp_connect + 0x000000000801fa48 0x78 ./Middlewares/LwIP/udp.o + 0x000000000801fa48 udp_connect + .text.udp_recv + 0x000000000801fac0 0x24 ./Middlewares/LwIP/udp.o + 0x000000000801fac0 udp_recv + .text.udp_remove + 0x000000000801fae4 0x4c ./Middlewares/LwIP/udp.o + 0x000000000801fae4 udp_remove + .text.udp_new 0x000000000801fb30 0x1c ./Middlewares/LwIP/udp.o + 0x000000000801fb30 udp_new + .text.udp_netif_ip_addr_changed + 0x000000000801fb4c 0x2c ./Middlewares/LwIP/udp.o + 0x000000000801fb4c udp_netif_ip_addr_changed + .text._ZNK8touchgfx17AbstractPartition18getAllocationCountEv + 0x000000000801fb78 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(AbstractPartition.o) + 0x000000000801fb78 touchgfx::AbstractPartition::getAllocationCount() const + .text._ZN8touchgfx17AbstractPartition7indexOfEPKv + 0x000000000801fb7c 0x22 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(AbstractPartition.o) + 0x000000000801fb7c touchgfx::AbstractPartition::indexOf(void const*) + .text._ZN8touchgfx17AbstractPartition5clearEv + 0x000000000801fb9e 0x6 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(AbstractPartition.o) + 0x000000000801fb9e touchgfx::AbstractPartition::clear() + .text._ZN8touchgfx17AbstractPartition8allocateEt + 0x000000000801fba4 0x14 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(AbstractPartition.o) + 0x000000000801fba4 touchgfx::AbstractPartition::allocate(unsigned short) + .text._ZN8touchgfx17AbstractPartition10allocateAtEtt + 0x000000000801fbb8 0x6 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(AbstractPartition.o) + 0x000000000801fbb8 touchgfx::AbstractPartition::allocateAt(unsigned short, unsigned short) + .text._ZN8touchgfx17AbstractPartitionD2Ev + 0x000000000801fbbe 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(AbstractPartition.o) + 0x000000000801fbbe touchgfx::AbstractPartition::~AbstractPartition() + 0x000000000801fbbe touchgfx::AbstractPartition::~AbstractPartition() + .text._ZN8touchgfx17AbstractPartitionC2Ev + 0x000000000801fbc0 0x10 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(AbstractPartition.o) + 0x000000000801fbc0 touchgfx::AbstractPartition::AbstractPartition() + 0x000000000801fbc0 touchgfx::AbstractPartition::AbstractPartition() + .text._ZN8touchgfx9Container8containsERKNS_8DrawableE + 0x000000000801fbd0 0x14 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Container.o) + 0x000000000801fbd0 touchgfx::Container::contains(touchgfx::Drawable const&) + .text._ZN8touchgfx9Container3addERNS_8DrawableE + 0x000000000801fbe4 0x1a C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Container.o) + 0x000000000801fbe4 touchgfx::Container::add(touchgfx::Drawable&) + .text._ZN8touchgfx9Container9removeAllEv + 0x000000000801fbfe 0x12 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Container.o) + 0x000000000801fbfe touchgfx::Container::removeAll() + .text._ZN8touchgfx9Container6unlinkEv + 0x000000000801fc10 0x6 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Container.o) + 0x000000000801fc10 touchgfx::Container::unlink() + .text._ZNK8touchgfx9Container12getSolidRectEv + 0x000000000801fc16 0xc C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Container.o) + 0x000000000801fc16 touchgfx::Container::getSolidRect() const + .text._ZN8touchgfx9Container20moveChildrenRelativeEss + 0x000000000801fc22 0x1c C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Container.o) + 0x000000000801fc22 touchgfx::Container::moveChildrenRelative(short, short) + .text._ZN8touchgfx9Container12forEachChildEPNS_15GenericCallbackIRNS_8DrawableEvvEE + 0x000000000801fc3e 0x18 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Container.o) + 0x000000000801fc3e touchgfx::Container::forEachChild(touchgfx::GenericCallback*) + .text._ZN8touchgfx9ContainerD2Ev + 0x000000000801fc56 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Container.o) + 0x000000000801fc56 touchgfx::Container::~Container() + 0x000000000801fc56 touchgfx::Container::~Container() + .text._ZN8touchgfx9ContainerD0Ev + 0x000000000801fc58 0xe C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Container.o) + 0x000000000801fc58 touchgfx::Container::~Container() + .text._ZN8touchgfx9Container6removeERNS_8DrawableE + 0x000000000801fc66 0x2e C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Container.o) + 0x000000000801fc66 touchgfx::Container::remove(touchgfx::Drawable&) + .text._ZN8touchgfx9Container6insertEPNS_8DrawableERS1_ + 0x000000000801fc94 0x34 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Container.o) + 0x000000000801fc94 touchgfx::Container::insert(touchgfx::Drawable*, touchgfx::Drawable&) + .text._ZN8touchgfx9Container12getLastChildEssPPNS_8DrawableE + 0x000000000801fcc8 0x60 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Container.o) + 0x000000000801fcc8 touchgfx::Container::getLastChild(short, short, touchgfx::Drawable**) + .text._ZN8touchgfx9Container16getLastChildNearEssPPNS_8DrawableEPsS4_ + 0x000000000801fd28 0x1c4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Container.o) + 0x000000000801fd28 touchgfx::Container::getLastChildNear(short, short, touchgfx::Drawable**, short*, short*) + .text._ZN8touchgfx4RectaNERKS0_ + 0x000000000801feec 0x86 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Container.o) + 0x000000000801feec touchgfx::Rect::operator&=(touchgfx::Rect const&) + .text._ZNK8touchgfx4Rect7isEmptyEv + 0x000000000801ff72 0x1a C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Container.o) + 0x000000000801ff72 touchgfx::Rect::isEmpty() const + .text._ZNK8touchgfx9Container16getContainedAreaEv + 0x000000000801ff8c 0x9e C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Container.o) + 0x000000000801ff8c touchgfx::Container::getContainedArea() const + .text._ZNK8touchgfx9Container4drawERKNS_4RectE + 0x000000000802002a 0x72 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Container.o) + 0x000000000802002a touchgfx::Container::draw(touchgfx::Rect const&) const + .text._ZN8touchgfx9Container14setupDrawChainERKNS_4RectEPPNS_8DrawableE + 0x000000000802009c 0x5a C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Container.o) + 0x000000000802009c touchgfx::Container::setupDrawChain(touchgfx::Rect const&, touchgfx::Drawable**) + .text._ZNK8touchgfx6Slider15getIndicatorMinEv + 0x00000000080200f6 0x6 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + 0x00000000080200f6 touchgfx::Slider::getIndicatorMin() const + .text._ZNK8touchgfx6Slider15getIndicatorMaxEv + 0x00000000080200fc 0x6 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + 0x00000000080200fc touchgfx::Slider::getIndicatorMax() const + .text._ZNK8touchgfx6Slider11getMinValueEv + 0x0000000008020102 0x6 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + 0x0000000008020102 touchgfx::Slider::getMinValue() const + .text._ZNK8touchgfx6Slider11getMaxValueEv + 0x0000000008020108 0x6 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + 0x0000000008020108 touchgfx::Slider::getMaxValue() const + .text._ZN8touchgfx6Slider8setValueEs + 0x000000000802010e 0x18 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + 0x000000000802010e touchgfx::Slider::setValue(short) + .text._ZN8touchgfx6Slider15handleDragEventERKNS_9DragEventE + 0x0000000008020126 0x2c C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + 0x0000000008020126 touchgfx::Slider::handleDragEvent(touchgfx::DragEvent const&) + .text._ZNK8touchgfx6Slider18getIndicatorRadiusEv + 0x0000000008020152 0x18 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + 0x0000000008020152 touchgfx::Slider::getIndicatorRadius() const + .text._ZN8touchgfx6Slider13setValueRangeEsss + 0x000000000802016a 0x14 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + 0x000000000802016a touchgfx::Slider::setValueRange(short, short, short) + .text._ZN8touchgfx6Slider13setValueRangeEss + 0x000000000802017e 0x22 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + 0x000000000802017e touchgfx::Slider::setValueRange(short, short) + .text._ZNK8touchgfx6Slider29getIndicatorPositionRangeSizeEv + 0x00000000080201a0 0xc C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + 0x00000000080201a0 touchgfx::Slider::getIndicatorPositionRangeSize() const + .text._ZNK8touchgfx6Slider17getValueRangeSizeEv + 0x00000000080201ac 0xc C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + 0x00000000080201ac touchgfx::Slider::getValueRangeSize() const + .text._ZN8touchgfx6SliderD2Ev + 0x00000000080201b8 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + 0x00000000080201b8 touchgfx::Slider::~Slider() + 0x00000000080201b8 touchgfx::Slider::~Slider() + .text._ZN8touchgfx6SliderD0Ev + 0x00000000080201ba 0xe C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + 0x00000000080201ba touchgfx::Slider::~Slider() + .text._ZNK8touchgfx6Slider15valueToPositionEi + 0x00000000080201c8 0x54 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + 0x00000000080201c8 touchgfx::Slider::valueToPosition(int) const + .text._ZNK8touchgfx6Slider15positionToValueEs + 0x000000000802021c 0x50 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + 0x000000000802021c touchgfx::Slider::positionToValue(short) const + .text._ZN8touchgfx6Slider16handleClickEventERKNS_10ClickEventE + 0x000000000802026c 0x84 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + 0x000000000802026c touchgfx::Slider::handleClickEvent(touchgfx::ClickEvent const&) + .text._ZN8touchgfx8DrawableC2Ev + 0x00000000080202f0 0x30 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + 0x00000000080202f0 touchgfx::Drawable::Drawable() + 0x00000000080202f0 touchgfx::Drawable::Drawable() + .text._ZN8touchgfx8Drawable14setWidthHeightEss + 0x0000000008020320 0x1a C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + 0x0000000008020320 touchgfx::Drawable::setWidthHeight(short, short) + .text._ZN8touchgfx6Slider23updateIndicatorPositionEs + 0x000000000802033a 0xee C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + 0x000000000802033a touchgfx::Slider::updateIndicatorPosition(short) + .text._ZN8touchgfx8Drawable11setPositionERKS0_ + 0x0000000008020428 0x24 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + 0x0000000008020428 touchgfx::Drawable::setPosition(touchgfx::Drawable const&) + .text._ZN8touchgfx6Slider21setupHorizontalSliderEsssss + 0x000000000802044c 0x8e C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + 0x000000000802044c touchgfx::Slider::setupHorizontalSlider(short, short, short, short, short) + .text._ZN8touchgfx6Slider19setupVerticalSliderEsssss + 0x00000000080204da 0x7a C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + 0x00000000080204da touchgfx::Slider::setupVerticalSlider(short, short, short, short, short) + .text._ZN8touchgfx5ImageC2ERKNS_6BitmapE + 0x0000000008020554 0x34 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + 0x0000000008020554 touchgfx::Image::Image(touchgfx::Bitmap const&) + 0x0000000008020554 touchgfx::Image::Image(touchgfx::Bitmap const&) + .text._ZN8touchgfx6SliderC2Ev + 0x0000000008020588 0xb4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + 0x0000000008020588 touchgfx::Slider::Slider() + 0x0000000008020588 touchgfx::Slider::Slider() + .text._ZN8touchgfx6Slider10setBitmapsERKNS_6BitmapES3_S3_ + 0x000000000802063c 0x68 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + 0x000000000802063c touchgfx::Slider::setBitmaps(touchgfx::Bitmap const&, touchgfx::Bitmap const&, touchgfx::Bitmap const&) + .text._ZN8touchgfx3HAL27drawDrawableInDynamicBitmapERNS_8DrawableEt + 0x00000000080206a4 0x16 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + 0x00000000080206a4 touchgfx::HAL::drawDrawableInDynamicBitmap(touchgfx::Drawable&, unsigned short) + .text._ZN8touchgfx3HAL16flushFrameBufferEv + 0x00000000080206ba 0xc C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + 0x00000000080206ba touchgfx::HAL::flushFrameBuffer() + .text._ZN8touchgfx3HAL16flushFrameBufferERKNS_4RectE + 0x00000000080206c6 0xc C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + 0x00000000080206c6 touchgfx::HAL::flushFrameBuffer(touchgfx::Rect const&) + .text._ZN8touchgfx3HAL17allowDMATransfersEv + 0x00000000080206d2 0xe C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + 0x00000000080206d2 touchgfx::HAL::allowDMATransfers() + .text._ZN8touchgfx3HAL8flushDMAEv + 0x00000000080206e0 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + 0x00000000080206e0 touchgfx::HAL::flushDMA() + .text._ZN8touchgfx3HAL8blitCopyEPKtttttthbtNS_6Bitmap12BitmapFormatES4_b + 0x00000000080206e8 0x4a C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + 0x00000000080206e8 touchgfx::HAL::blitCopy(unsigned short const*, unsigned short, unsigned short, unsigned short, unsigned short, unsigned short, unsigned char, bool, unsigned short, touchgfx::Bitmap::BitmapFormat, touchgfx::Bitmap::BitmapFormat, bool) + *fill* 0x0000000008020732 0x2 + .text._ZN8touchgfx3HAL10beginFrameEv + 0x0000000008020734 0x18 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + 0x0000000008020734 touchgfx::HAL::beginFrame() + .text._ZN8touchgfx3HAL8endFrameEv + 0x000000000802074c 0x1a C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + 0x000000000802074c touchgfx::HAL::endFrame() + .text._ZN8touchgfx3HAL10initializeEv + 0x0000000008020766 0x28 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + 0x0000000008020766 touchgfx::HAL::initialize() + .text._ZN8touchgfx3HAL9taskEntryEv + 0x000000000802078e 0x1e C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + 0x000000000802078e touchgfx::HAL::taskEntry() + .text._ZN8touchgfx3HAL4tickEv + 0x00000000080207ac 0x180 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + 0x00000000080207ac touchgfx::HAL::tick() + .text._ZN8touchgfx3HAL17unlockFrameBufferEv + 0x000000000802092c 0x10 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + 0x000000000802092c touchgfx::HAL::unlockFrameBuffer() + .text._ZN8touchgfx3HAL21registerEventListenerERNS_15UIEventListenerE + 0x000000000802093c 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + 0x000000000802093c touchgfx::HAL::registerEventListener(touchgfx::UIEventListener&) + .text._ZN8touchgfx3HAL5touchEll + 0x0000000008020944 0x66 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + 0x0000000008020944 touchgfx::HAL::touch(long, long) + .text._ZN8touchgfx3HAL9blockCopyEPvPKvm + 0x00000000080209aa 0x98 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + 0x00000000080209aa touchgfx::HAL::blockCopy(void*, void const*, unsigned long) + .text._ZN8touchgfx3HAL7noTouchEv + 0x0000000008020a42 0x22 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + 0x0000000008020a42 touchgfx::HAL::noTouch() + .text._ZN8touchgfx3HAL27configurePartialFrameBufferEtttt + 0x0000000008020a64 0x6c C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + 0x0000000008020a64 touchgfx::HAL::configurePartialFrameBuffer(unsigned short, unsigned short, unsigned short, unsigned short) + .text._ZN8touchgfx3HAL8blitCopyEPKtttttthbb + 0x0000000008020ad0 0x5c C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + 0x0000000008020ad0 touchgfx::HAL::blitCopy(unsigned short const*, unsigned short, unsigned short, unsigned short, unsigned short, unsigned short, unsigned char, bool, bool) + .text._ZN8touchgfx3HAL16blitCopyARGB8888EPKtttttthb + 0x0000000008020b2c 0x64 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + 0x0000000008020b2c touchgfx::HAL::blitCopyARGB8888(unsigned short const*, unsigned short, unsigned short, unsigned short, unsigned short, unsigned short, unsigned char, bool) + .text._ZN8touchgfx3HAL8blitFillENS_9colortypeEtttthb + 0x0000000008020b90 0x54 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + 0x0000000008020b90 touchgfx::HAL::blitFill(touchgfx::colortype, unsigned short, unsigned short, unsigned short, unsigned short, unsigned char, bool) + .text._ZN8touchgfx3HAL27drawDrawableInDynamicBitmapERNS_8DrawableEtRKNS_4RectE + 0x0000000008020be4 0x1c0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + 0x0000000008020be4 touchgfx::HAL::drawDrawableInDynamicBitmap(touchgfx::Drawable&, unsigned short, touchgfx::Rect const&) + .text._ZN8touchgfx3HAL20getClientFrameBufferEv + 0x0000000008020da4 0x24 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + 0x0000000008020da4 touchgfx::HAL::getClientFrameBuffer() + .text._ZN8touchgfx3HAL12blitCopyWordEPKttttttt + 0x0000000008020dc8 0x6a C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + 0x0000000008020dc8 touchgfx::HAL::blitCopyWord(unsigned short const*, unsigned short, unsigned short, unsigned short, unsigned short, unsigned short, unsigned short) + .text._ZN8touchgfx3HAL12blitFillWordEtttttt + 0x0000000008020e32 0x68 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + 0x0000000008020e32 touchgfx::HAL::blitFillWord(unsigned short, unsigned short, unsigned short, unsigned short, unsigned short, unsigned short) + *fill* 0x0000000008020e9a 0x2 + .text._ZN8touchgfx3HAL8blitCopyEPKtPKhttttthbtNS_6Bitmap12BitmapFormatES6_b + 0x0000000008020e9c 0xc8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + 0x0000000008020e9c touchgfx::HAL::blitCopy(unsigned short const*, unsigned char const*, unsigned short, unsigned short, unsigned short, unsigned short, unsigned short, unsigned char, bool, unsigned short, touchgfx::Bitmap::BitmapFormat, touchgfx::Bitmap::BitmapFormat, bool) + .text._ZN8touchgfx3HAL8blitFillENS_9colortypeEtttthtNS_6Bitmap12BitmapFormatEb + 0x0000000008020f64 0x90 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + 0x0000000008020f64 touchgfx::HAL::blitFill(touchgfx::colortype, unsigned short, unsigned short, unsigned short, unsigned short, unsigned char, unsigned short, touchgfx::Bitmap::BitmapFormat, bool) + .text._ZNK8touchgfx3HAL13getDstAddressEttPt + 0x0000000008020ff4 0x38 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + 0x0000000008020ff4 touchgfx::HAL::getDstAddress(unsigned short, unsigned short, unsigned short*) const + .text._ZN8touchgfx3HAL13blitCopyGlyphEPKhtttttNS_9colortypeEhNS_14BlitOperationsEb + 0x000000000802102c 0x84 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + 0x000000000802102c touchgfx::HAL::blitCopyGlyph(unsigned char const*, unsigned short, unsigned short, unsigned short, unsigned short, unsigned short, touchgfx::colortype, unsigned char, touchgfx::BlitOperations, bool) + .text._ZN8touchgfx3HAL20copyFBRegionToMemoryENS_4RectE + 0x00000000080210b0 0x84 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + 0x00000000080210b0 touchgfx::HAL::copyFBRegionToMemory(touchgfx::Rect) + .text._ZN8touchgfx3HAL20copyFBRegionToMemoryENS_4RectEPtm + 0x0000000008021134 0x8c C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + 0x0000000008021134 touchgfx::HAL::copyFBRegionToMemory(touchgfx::Rect, unsigned short*, unsigned long) + .text._ZN8touchgfx3HAL25copyFromTFTToClientBufferENS_4RectE + 0x00000000080211c0 0x40 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + 0x00000000080211c0 touchgfx::HAL::copyFromTFTToClientBuffer(touchgfx::Rect) + .text._ZN8touchgfx3HAL16swapFrameBuffersEv + 0x0000000008021200 0x34 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + 0x0000000008021200 touchgfx::HAL::swapFrameBuffers() + .text._ZN8touchgfx3HAL12setMCUActiveEb + 0x0000000008021234 0x30 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + 0x0000000008021234 touchgfx::HAL::setMCUActive(bool) + .text._ZN8touchgfx3HAL18setRenderingMethodENS0_15RenderingMethodE + 0x0000000008021264 0x24 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + 0x0000000008021264 touchgfx::HAL::setRenderingMethod(touchgfx::HAL::RenderingMethod) + .text._ZN8touchgfx3HAL15lockFrameBufferEv + 0x0000000008021288 0x3c C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + 0x0000000008021288 touchgfx::HAL::lockFrameBuffer() + .text._ZN8touchgfx17LockFreeDMA_Queue7isEmptyEv + 0x00000000080212c4 0xc C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(DMA.o) + 0x00000000080212c4 touchgfx::LockFreeDMA_Queue::isEmpty() + .text._ZN8touchgfx17LockFreeDMA_Queue6isFullEv + 0x00000000080212d0 0x18 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(DMA.o) + 0x00000000080212d0 touchgfx::LockFreeDMA_Queue::isFull() + .text._ZN8touchgfx17LockFreeDMA_Queue5firstEv + 0x00000000080212e8 0xc C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(DMA.o) + 0x00000000080212e8 touchgfx::LockFreeDMA_Queue::first() + .text._ZN8touchgfx13DMA_Interface13seedExecutionEv + 0x00000000080212f4 0x6 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(DMA.o) + 0x00000000080212f4 touchgfx::DMA_Interface::seedExecution() + .text._ZN8touchgfx13DMA_Interface7executeEv + 0x00000000080212fa 0x8c C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(DMA.o) + 0x00000000080212fa touchgfx::DMA_Interface::execute() + .text._ZN8touchgfx13DMA_Interface11enableAlphaEh + 0x0000000008021386 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(DMA.o) + 0x0000000008021386 touchgfx::DMA_Interface::enableCopyWithTransparentPixels(unsigned char) + 0x0000000008021386 touchgfx::DMA_Interface::enableAlpha(unsigned char) + .text._ZN8touchgfx13DMA_Interface12disableAlphaEv + 0x0000000008021388 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(DMA.o) + 0x0000000008021388 touchgfx::DMA_Interface::disableAlpha() + .text._ZN8touchgfx17LockFreeDMA_QueueD2Ev + 0x000000000802138a 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(DMA.o) + 0x000000000802138a touchgfx::LockFreeDMA_Queue::~LockFreeDMA_Queue() + 0x000000000802138a touchgfx::LockFreeDMA_Queue::~LockFreeDMA_Queue() + .text._ZN8touchgfx17LockFreeDMA_Queue10pushCopyOfERKNS_6BlitOpE + 0x000000000802138c 0x44 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(DMA.o) + 0x000000000802138c touchgfx::LockFreeDMA_Queue::pushCopyOf(touchgfx::BlitOp const&) + .text._ZN8touchgfx17LockFreeDMA_Queue3popEv + 0x00000000080213d0 0x14 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(DMA.o) + 0x00000000080213d0 touchgfx::LockFreeDMA_Queue::pop() + .text._ZN8touchgfx13DMA_Interface10addToQueueERKNS_6BlitOpE + 0x00000000080213e4 0x4c C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(DMA.o) + 0x00000000080213e4 touchgfx::DMA_Interface::addToQueue(touchgfx::BlitOp const&) + .text._ZN8touchgfx13DMA_Interface27waitForFrameBufferSemaphoreEv + 0x0000000008021430 0xe C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(DMA.o) + 0x0000000008021430 touchgfx::DMA_Interface::waitForFrameBufferSemaphore() + .text._ZN8touchgfx17LockFreeDMA_QueueD0Ev + 0x000000000802143e 0xe C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(DMA.o) + 0x000000000802143e touchgfx::LockFreeDMA_Queue::~LockFreeDMA_Queue() + .text._ZN8touchgfx13DMA_Interface5startEv + 0x000000000802144c 0x24 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(DMA.o) + 0x000000000802144c touchgfx::DMA_Interface::start() + .text._ZN8touchgfx13DMA_Interface16executeCompletedEv + 0x0000000008021470 0x3c C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(DMA.o) + 0x0000000008021470 touchgfx::DMA_Interface::executeCompleted() + .text._ZN8touchgfx17LockFreeDMA_QueueC2EPNS_6BlitOpEi + 0x00000000080214ac 0x18 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(DMA.o) + 0x00000000080214ac touchgfx::LockFreeDMA_Queue::LockFreeDMA_Queue(touchgfx::BlitOp*, int) + 0x00000000080214ac touchgfx::LockFreeDMA_Queue::LockFreeDMA_Queue(touchgfx::BlitOp*, int) + .text._ZN8touchgfx13DMA_Interface15isDmaQueueEmptyEv + 0x00000000080214c4 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(DMA.o) + 0x00000000080214c4 touchgfx::DMA_Interface::isDmaQueueEmpty() + .text._ZNK8touchgfx8TextArea12getWildcard1Ev + 0x00000000080214cc 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextArea.o) + 0x00000000080214cc touchgfx::TextArea::getWildcard1() const + .text._ZNK8touchgfx8TextArea12getAlignmentEv + 0x00000000080214d0 0x28 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextArea.o) + 0x00000000080214d0 touchgfx::TextArea::getAlignment() const + .text._ZN8touchgfx8TextAreaD2Ev + 0x00000000080214f8 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextArea.o) + 0x00000000080214f8 touchgfx::TextArea::~TextArea() + 0x00000000080214f8 touchgfx::TextArea::~TextArea() + *fill* 0x00000000080214fa 0x2 + .text._ZNK8touchgfx8TextArea13getTextHeightEv + 0x00000000080214fc 0x50 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextArea.o) + 0x00000000080214fc touchgfx::TextArea::getTextHeight() const + .text._ZNK8touchgfx8TextArea12getTextWidthEv + 0x000000000802154c 0x74 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextArea.o) + 0x000000000802154c touchgfx::TextArea::getTextWidth() const + .text._ZNK8touchgfx8TextArea19calculateTextHeightEPKtz + 0x00000000080215c0 0xd0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextArea.o) + 0x00000000080215c0 touchgfx::TextArea::calculateTextHeight(unsigned short const*, ...) const + .text._ZNK8touchgfx8TextArea21calculateBoundingAreaEv + 0x0000000008021690 0x34c C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextArea.o) + 0x0000000008021690 touchgfx::TextArea::calculateBoundingArea() const + .text._ZN8touchgfx8TextAreaD0Ev + 0x00000000080219dc 0xe C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextArea.o) + 0x00000000080219dc touchgfx::TextArea::~TextArea() + *fill* 0x00000000080219ea 0x2 + .text._ZNK8touchgfx8TextArea17invalidateContentEv + 0x00000000080219ec 0x6c C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextArea.o) + 0x00000000080219ec touchgfx::TextArea::invalidateContent() const + .text._ZNK8touchgfx8TextArea4drawERKNS_4RectE + 0x0000000008021a58 0x12c C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextArea.o) + 0x0000000008021a58 touchgfx::TextArea::draw(touchgfx::Rect const&) const + .text._ZN8touchgfx8TextArea19resizeToCurrentTextEv + 0x0000000008021b84 0x40 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextArea.o) + 0x0000000008021b84 touchgfx::TextArea::resizeToCurrentText() + .text._ZN8touchgfx8TextArea12setTypedTextERKNS_9TypedTextE + 0x0000000008021bc4 0x36 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextArea.o) + 0x0000000008021bc4 touchgfx::TextArea::setTypedText(touchgfx::TypedText const&) + .text._ZNK8touchgfx3Box12getSolidRectEv + 0x0000000008021bfa 0x1c C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Box.o) + 0x0000000008021bfa touchgfx::Box::getSolidRect() const + *fill* 0x0000000008021c16 0x2 + .text._ZNK8touchgfx3Box4drawERKNS_4RectE + 0x0000000008021c18 0x3c C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Box.o) + 0x0000000008021c18 touchgfx::Box::draw(touchgfx::Rect const&) const + .text._ZN8touchgfx3BoxD2Ev + 0x0000000008021c54 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Box.o) + 0x0000000008021c54 touchgfx::Box::~Box() + 0x0000000008021c54 touchgfx::Box::~Box() + .text._ZN8touchgfx3BoxD0Ev + 0x0000000008021c56 0xe C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Box.o) + 0x0000000008021c56 touchgfx::Box::~Box() + .text._ZNK8touchgfx3Box17invalidateContentEv + 0x0000000008021c64 0x14 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Box.o) + 0x0000000008021c64 touchgfx::Box::invalidateContent() const + .text._ZNK8touchgfx24TextAreaWithWildcardBase4drawERKNS_4RectE + 0x0000000008021c78 0xd8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextAreaWithWildcard.o) + 0x0000000008021c78 touchgfx::TextAreaWithWildcardBase::draw(touchgfx::Rect const&) const + .text._ZN8touchgfx5ImageD2Ev + 0x0000000008021d50 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Image.o) + 0x0000000008021d50 touchgfx::Image::~Image() + 0x0000000008021d50 touchgfx::Image::~Image() + .text._ZN8touchgfx5Image9setBitmapERKNS_6BitmapE + 0x0000000008021d52 0x32 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Image.o) + 0x0000000008021d52 touchgfx::Image::setBitmap(touchgfx::Bitmap const&) + .text._ZN8touchgfx5ImageD0Ev + 0x0000000008021d84 0xe C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Image.o) + 0x0000000008021d84 touchgfx::Image::~Image() + .text._ZNK8touchgfx5Image12getSolidRectEv + 0x0000000008021d92 0x22 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Image.o) + 0x0000000008021d92 touchgfx::Image::getSolidRect() const + .text._ZNK8touchgfx5Image17invalidateContentEv + 0x0000000008021db4 0x14 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Image.o) + 0x0000000008021db4 touchgfx::Image::invalidateContent() const + .text._ZNK8touchgfx5Image4drawERKNS_4RectE + 0x0000000008021dc8 0x84 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Image.o) + 0x0000000008021dc8 touchgfx::Image::draw(touchgfx::Rect const&) const + .text._ZN8touchgfx3LCD27supportDynamicBitmapDrawingENS_6Bitmap12BitmapFormatE + 0x0000000008021e4c 0x12 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD.o) + 0x0000000008021e4c touchgfx::LCD::supportDynamicBitmapDrawing(touchgfx::Bitmap::BitmapFormat) + *fill* 0x0000000008021e5e 0x2 + .text._ZN8touchgfx3LCD15setDefaultColorENS_9colortypeE + 0x0000000008021e60 0xc C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD.o) + 0x0000000008021e60 touchgfx::LCD::setDefaultColor(touchgfx::colortype) + .text._ZN8touchgfx3LCD18drawTextureMapQuadERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht + 0x0000000008021e6c 0xe4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD.o) + 0x0000000008021e6c touchgfx::LCD::drawTextureMapQuad(touchgfx::DrawingSurface const&, touchgfx::Point3D const*, touchgfx::TextureSurface const&, touchgfx::Rect const&, touchgfx::Rect const&, unsigned short, unsigned char, unsigned short) + .text._ZN8touchgfx3LCD22drawTextureMapScanLineERKNS_14DrawingSurfaceERKNS_9GradientsEPKNS_4EdgeES9_RKNS_14TextureSurfaceERKNS_4RectESF_tht + 0x0000000008021f50 0x19c C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD.o) + 0x0000000008021f50 touchgfx::LCD::drawTextureMapScanLine(touchgfx::DrawingSurface const&, touchgfx::Gradients const&, touchgfx::Edge const*, touchgfx::Edge const*, touchgfx::TextureSurface const&, touchgfx::Rect const&, touchgfx::Rect const&, unsigned short, unsigned char, unsigned short) + .text._ZN8touchgfx3LCD22drawTextureMapTriangleERKNS_14DrawingSurfaceEPKNS_7Point3DERKNS_14TextureSurfaceERKNS_4RectESC_tht + 0x00000000080220ec 0x788 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD.o) + 0x00000000080220ec touchgfx::LCD::drawTextureMapTriangle(touchgfx::DrawingSurface const&, touchgfx::Point3D const*, touchgfx::TextureSurface const&, touchgfx::Rect const&, touchgfx::Rect const&, unsigned short, unsigned char, unsigned short) + .text._ZN8touchgfx3LCD22WideTextInternalStructC2ERNS_12TextProviderEtthPKNS_4FontEsNS_14WideTextActionE + 0x0000000008022874 0x86 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD.o) + 0x0000000008022874 touchgfx::LCD::WideTextInternalStruct::WideTextInternalStruct(touchgfx::TextProvider&, unsigned short, unsigned short, unsigned char, touchgfx::Font const*, short, touchgfx::WideTextAction) + 0x0000000008022874 touchgfx::LCD::WideTextInternalStruct::WideTextInternalStruct(touchgfx::TextProvider&, unsigned short, unsigned short, unsigned char, touchgfx::Font const*, short, touchgfx::WideTextAction) + .text._ZN8touchgfx3LCD11stringWidthERNS_12TextProviderERKNS_4FontEih + 0x00000000080228fa 0x78 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD.o) + 0x00000000080228fa touchgfx::LCD::stringWidth(touchgfx::TextProvider&, touchgfx::Font const&, int, unsigned char) + .text._ZN8touchgfx3LCD10rotateRectERNS_4RectERKS1_NS_12TextRotationE + 0x0000000008022972 0x62 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD.o) + 0x0000000008022972 touchgfx::LCD::rotateRect(touchgfx::Rect&, touchgfx::Rect const&, touchgfx::TextRotation) + .text._ZN8touchgfx3LCD18drawStringInternalEPtPKNS_4RectEssRS3_PKNS0_13StringVisualsEhRNS_12TextProviderEib + 0x00000000080229d4 0x2ca C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD.o) + 0x00000000080229d4 touchgfx::LCD::drawStringInternal(unsigned short*, touchgfx::Rect const*, short, short, touchgfx::Rect const&, touchgfx::LCD::StringVisuals const*, unsigned char, touchgfx::TextProvider&, int, bool) + .text._ZN8touchgfx3LCD22WideTextInternalStruct7addWordEttt + 0x0000000008022c9e 0x20 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD.o) + 0x0000000008022c9e touchgfx::LCD::WideTextInternalStruct::addWord(unsigned short, unsigned short, unsigned short) + .text._ZN8touchgfx3LCD22WideTextInternalStruct23scanStringLengthForLineEv + 0x0000000008022cbe 0x206 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD.o) + 0x0000000008022cbe touchgfx::LCD::WideTextInternalStruct::scanStringLengthForLine() + .text._ZN8touchgfx3LCD11getNumLinesERNS_12TextProviderENS_14WideTextActionEhPKNS_4FontEs + 0x0000000008022ec4 0x60 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD.o) + 0x0000000008022ec4 touchgfx::LCD::getNumLines(touchgfx::TextProvider&, touchgfx::WideTextAction, unsigned char, touchgfx::Font const*, short) + .text._ZN8touchgfx3LCD13drawStringLTRERKNS_4RectES3_RKNS0_13StringVisualsEPKtSt9__va_list + 0x0000000008022f24 0x27e C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD.o) + 0x0000000008022f24 touchgfx::LCD::drawStringLTR(touchgfx::Rect const&, touchgfx::Rect const&, touchgfx::LCD::StringVisuals const&, unsigned short const*, std::__va_list) + .text._ZN8touchgfx3LCD5realXERKNS_4RectEssNS_12TextRotationE + 0x00000000080231a2 0x3a C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD.o) + 0x00000000080231a2 touchgfx::LCD::realX(touchgfx::Rect const&, short, short, touchgfx::TextRotation) + .text._ZN8touchgfx3LCD5realYERKNS_4RectEssNS_12TextRotationE + 0x00000000080231dc 0x38 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD.o) + 0x00000000080231dc touchgfx::LCD::realY(touchgfx::Rect const&, short, short, touchgfx::TextRotation) + .text.startup._GLOBAL__sub_I__ZN8touchgfx3LCD12defaultColorE + 0x0000000008023214 0xc C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD.o) + .text._ZN8touchgfx16TouchCalibration4clzuEm + 0x0000000008023220 0x3c C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TouchCalibration.o) + 0x0000000008023220 touchgfx::TouchCalibration::clzu(unsigned long) + .text._ZN8touchgfx16TouchCalibration7muldivuEmmmmmRm + 0x000000000802325c 0xc4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TouchCalibration.o) + 0x000000000802325c touchgfx::TouchCalibration::muldivu(unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long&) + .text._ZN8touchgfx16TouchCalibration6muldivEllllRl + 0x0000000008023320 0x98 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TouchCalibration.o) + 0x0000000008023320 touchgfx::TouchCalibration::muldiv(long, long, long, long, long&) + .text._ZN8touchgfx16TouchCalibration14translatePointERNS_5PointE + 0x00000000080233b8 0x7c C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TouchCalibration.o) + 0x00000000080233b8 touchgfx::TouchCalibration::translatePoint(touchgfx::Point&) + .text._ZN8touchgfx21DisplayTransformation29transformDisplayToFrameBufferERsS1_ + 0x0000000008023434 0x28 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(DisplayTransformation.o) + 0x0000000008023434 touchgfx::DisplayTransformation::transformDisplayToFrameBuffer(short&, short&) + .text._ZN8touchgfx21DisplayTransformation29transformFrameBufferToDisplayERsS1_ + 0x000000000802345c 0x28 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(DisplayTransformation.o) + 0x000000000802345c touchgfx::DisplayTransformation::transformFrameBufferToDisplay(short&, short&) + .text._ZN8touchgfx21DisplayTransformation29transformFrameBufferToDisplayERNS_4RectE + 0x0000000008023484 0x34 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(DisplayTransformation.o) + 0x0000000008023484 touchgfx::DisplayTransformation::transformFrameBufferToDisplay(touchgfx::Rect&) + .text._ZN8touchgfx21DisplayTransformation29transformDisplayToFrameBufferERNS_4RectE + 0x00000000080234b8 0x2c C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(DisplayTransformation.o) + 0x00000000080234b8 touchgfx::DisplayTransformation::transformDisplayToFrameBuffer(touchgfx::Rect&) + .text._ZN8touchgfx21DisplayTransformation29transformDisplayToFrameBufferERsS1_RKNS_4RectE + 0x00000000080234e4 0x24 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(DisplayTransformation.o) + 0x00000000080234e4 touchgfx::DisplayTransformation::transformDisplayToFrameBuffer(short&, short&, touchgfx::Rect const&) + .text._ZN8touchgfx21DisplayTransformation29transformDisplayToFrameBufferERNS_4RectERKS1_ + 0x0000000008023508 0x30 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(DisplayTransformation.o) + 0x0000000008023508 touchgfx::DisplayTransformation::transformDisplayToFrameBuffer(touchgfx::Rect&, touchgfx::Rect const&) + .text._ZN8touchgfx11Application13requestRedrawEv + 0x0000000008023538 0x24 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Application.o) + 0x0000000008023538 touchgfx::Application::requestRedraw() + .text._ZN8touchgfx11Application16handleClickEventERKNS_10ClickEventE + 0x000000000802355c 0x14 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Application.o) + 0x000000000802355c touchgfx::Application::handleClickEvent(touchgfx::ClickEvent const&) + .text._ZN8touchgfx11Application29handlePendingScreenTransitionEv + 0x0000000008023570 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Application.o) + 0x0000000008023570 touchgfx::Application::handlePendingScreenTransition() + *fill* 0x0000000008023572 0x2 + .text._ZN8touchgfx11Application4drawEv + 0x0000000008023574 0x30 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Application.o) + 0x0000000008023574 touchgfx::Application::draw() + .text._ZN8touchgfx11Application10invalidateEv + 0x00000000080235a4 0x30 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Application.o) + 0x00000000080235a4 touchgfx::Application::invalidate() + .text._ZN8touchgfx11Application15handleDragEventERKNS_9DragEventE + 0x00000000080235d4 0x14 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Application.o) + 0x00000000080235d4 touchgfx::Application::handleDragEvent(touchgfx::DragEvent const&) + .text._ZN8touchgfx11Application18handleGestureEventERKNS_12GestureEventE + 0x00000000080235e8 0x14 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Application.o) + 0x00000000080235e8 touchgfx::Application::handleGestureEvent(touchgfx::GestureEvent const&) + .text._ZN8touchgfx11Application16clearCachedAreasEv + 0x00000000080235fc 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Application.o) + 0x00000000080235fc touchgfx::Application::clearCachedAreas() + .text._ZN8touchgfx11Application14handleKeyEventEh + 0x0000000008023604 0x14 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Application.o) + 0x0000000008023604 touchgfx::Application::handleKeyEvent(unsigned char) + .text._ZN8touchgfx11ApplicationD2Ev + 0x0000000008023618 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Application.o) + 0x0000000008023618 touchgfx::Application::~Application() + 0x0000000008023618 touchgfx::Application::~Application() + .text._ZN8touchgfx11ApplicationD0Ev + 0x000000000802361a 0x10 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Application.o) + 0x000000000802361a touchgfx::Application::~Application() + .text._ZNK8touchgfx4Rect9intersectERKS0_ + 0x000000000802362a 0x44 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Application.o) + 0x000000000802362a touchgfx::Rect::intersect(touchgfx::Rect const&) const + .text._ZN8touchgfx4Rect10restrictToEss + 0x000000000802366e 0x48 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Application.o) + 0x000000000802366e touchgfx::Rect::restrictTo(short, short) + *fill* 0x00000000080236b6 0x2 + .text._ZN8touchgfx11Application4drawERNS_4RectE + 0x00000000080236b8 0x58 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Application.o) + 0x00000000080236b8 touchgfx::Application::draw(touchgfx::Rect&) + .text._ZNK8touchgfx4Rect8includesERKS0_ + 0x0000000008023710 0x4c C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Application.o) + 0x0000000008023710 touchgfx::Rect::includes(touchgfx::Rect const&) const + .text._ZN8touchgfx4Rect11expandToFitERKS0_ + 0x000000000802375c 0x8a C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Application.o) + 0x000000000802375c touchgfx::Rect::expandToFit(touchgfx::Rect const&) + *fill* 0x00000000080237e6 0x2 + .text._ZN8touchgfx11Application11getInstanceEv + 0x00000000080237e8 0xc C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Application.o) + 0x00000000080237e8 touchgfx::Application::getInstance() + .text._ZN8touchgfx11Application12TimerWidgets10tickActiveEv + 0x00000000080237f4 0x3e C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Application.o) + 0x00000000080237f4 touchgfx::Application::TimerWidgets::tickActive() + .text._ZN8touchgfx11Application12TimerWidgets5clearEv + 0x0000000008023832 0x16 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Application.o) + 0x0000000008023832 touchgfx::Application::TimerWidgets::clear() + .text._ZN8touchgfx11Application12switchScreenEPNS_6ScreenE + 0x0000000008023848 0x34 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Application.o) + 0x0000000008023848 touchgfx::Application::switchScreen(touchgfx::Screen*) + .text._ZN8touchgfx11Application12TimerWidgets7compactEv + 0x000000000802387c 0x6e C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Application.o) + 0x000000000802387c touchgfx::Application::TimerWidgets::compact() + *fill* 0x00000000080238ea 0x2 + .text._ZN8touchgfx11Application15handleTickEventEv + 0x00000000080238ec 0x64 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Application.o) + 0x00000000080238ec touchgfx::Application::handleTickEvent() + .text._ZN8touchgfx6VectorINS_4RectELt8EEC2Ev + 0x0000000008023950 0x22 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Application.o) + 0x0000000008023950 touchgfx::Vector::Vector() + 0x0000000008023950 touchgfx::Vector::Vector() + *fill* 0x0000000008023972 0x2 + .text._ZN8touchgfx11ApplicationC2Ev + 0x0000000008023974 0x94 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Application.o) + 0x0000000008023974 touchgfx::Application::Application() + 0x0000000008023974 touchgfx::Application::Application() + .text._ZN8touchgfx6VectorINS_4RectELt8EE13quickRemoveAtEt + 0x0000000008023a08 0x26 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Application.o) + 0x0000000008023a08 touchgfx::Vector::quickRemoveAt(unsigned short) + *fill* 0x0000000008023a2e 0x2 + .text._ZN8touchgfx11Application14invalidateAreaENS_4RectE + 0x0000000008023a30 0x6ec C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Application.o) + 0x0000000008023a30 touchgfx::Application::invalidateArea(touchgfx::Rect) + .text._ZN8touchgfx11Application15drawCachedAreasEv + 0x000000000802411c 0x554 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Application.o) + 0x000000000802411c touchgfx::Application::drawCachedAreas() + .text.startup._GLOBAL__sub_I__ZN8touchgfx11Application8instanceE + 0x0000000008024670 0x14 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Application.o) + .text._ZNK8touchgfx4Font17getStringWidthLTREhPKtSt9__va_list + 0x0000000008024684 0xa4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Font.o) + 0x0000000008024684 touchgfx::Font::getStringWidthLTR(unsigned char, unsigned short const*, std::__va_list) const + .text._ZNK8touchgfx4Font12getCharWidthEt + 0x0000000008024728 0x18 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Font.o) + 0x0000000008024728 touchgfx::Font::getCharWidth(unsigned short) const + .text._ZNK8touchgfx4Font16getMaxTextHeightEPKtz + 0x0000000008024740 0x9a C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Font.o) + 0x0000000008024740 touchgfx::Font::getMaxTextHeight(unsigned short const*, ...) const + .text._ZNK8touchgfx4Font20getMinimumTextHeightEv + 0x00000000080247da 0xa C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Font.o) + 0x00000000080247da touchgfx::Font::getMinimumTextHeight() const + .text._ZNK8touchgfx4Font13getFontHeightEv + 0x00000000080247e4 0x6 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Font.o) + 0x00000000080247e4 touchgfx::Font::getFontHeight() const + .text._ZNK8touchgfx4Font16getNumberOfLinesEPKtz + 0x00000000080247ea 0x5e C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Font.o) + 0x00000000080247ea touchgfx::Font::getNumberOfLines(unsigned short const*, ...) const + .text._ZNK8touchgfx4Font15getSpacingAboveEPKtz + 0x0000000008024848 0x92 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Font.o) + 0x0000000008024848 touchgfx::Font::getSpacingAbove(unsigned short const*, ...) const + .text._ZNK8touchgfx8Drawable10invalidateEv + 0x00000000080248da 0x22 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Drawable.o) + 0x00000000080248da touchgfx::Drawable::invalidate() const + .text._ZN8touchgfx8Drawable20getSolidRectAbsoluteEv + 0x00000000080248fc 0x1a C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Drawable.o) + 0x00000000080248fc touchgfx::Drawable::getSolidRectAbsolute() + .text._ZNK8touchgfx8Drawable23translateRectToAbsoluteERNS_4RectE + 0x0000000008024916 0x26 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Drawable.o) + 0x0000000008024916 touchgfx::Drawable::translateRectToAbsolute(touchgfx::Rect&) const + .text._ZNK8touchgfx8Drawable14getVisibleRectERNS_4RectE + 0x000000000802493c 0x40 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Drawable.o) + 0x000000000802493c touchgfx::Drawable::getVisibleRect(touchgfx::Rect&) const + .text._ZNK8touchgfx8Drawable14invalidateRectERNS_4RectE + 0x000000000802497c 0x60 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Drawable.o) + 0x000000000802497c touchgfx::Drawable::invalidateRect(touchgfx::Rect&) const + .text._ZN8touchgfx8Drawable12moveRelativeEss + 0x00000000080249dc 0x34 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Drawable.o) + 0x00000000080249dc touchgfx::Drawable::moveRelative(short, short) + .text._ZNK8touchgfx8Drawable15getAbsoluteRectEv + 0x0000000008024a10 0x24 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Drawable.o) + 0x0000000008024a10 touchgfx::Drawable::getAbsoluteRect() const + .text._ZN8touchgfx9ConstFontC2EPKNS_9GlyphNodeEttthhhhhhtt + 0x0000000008024a34 0x50 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(ConstFont.o) + 0x0000000008024a34 touchgfx::ConstFont::ConstFont(touchgfx::GlyphNode const*, unsigned short, unsigned short, unsigned short, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned short, unsigned short) + 0x0000000008024a34 touchgfx::ConstFont::ConstFont(touchgfx::GlyphNode const*, unsigned short, unsigned short, unsigned short, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned short, unsigned short) + .text._ZNK8touchgfx9ConstFont4findEt + 0x0000000008024a84 0x7a C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(ConstFont.o) + 0x0000000008024a84 touchgfx::ConstFont::find(unsigned short) const + .text._ZNK8touchgfx9ConstFont8getGlyphEtRPKhRh + 0x0000000008024afe 0x5a C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(ConstFont.o) + 0x0000000008024afe touchgfx::ConstFont::getGlyph(unsigned short, unsigned char const*&, unsigned char&) const + .text._ZN8touchgfx4clzuEm + 0x0000000008024b58 0x3c C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Utils.o) + 0x0000000008024b58 touchgfx::clzu(unsigned long) + .text._ZN8touchgfx7muldivuEmmmRm + 0x0000000008024b94 0x9c C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Utils.o) + 0x0000000008024b94 touchgfx::muldivu(unsigned long, unsigned long, unsigned long, unsigned long&) + .text._ZN8touchgfx6muldivElllRl + 0x0000000008024c30 0x3e C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Utils.o) + 0x0000000008024c30 touchgfx::muldiv(long, long, long, long&) + .text._ZN8touchgfx6muldivElll + 0x0000000008024c6e 0x84 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Utils.o) + 0x0000000008024c6e touchgfx::muldiv(long, long, long) + .text._ZNK8touchgfx10ClickEvent12getEventTypeEv + 0x0000000008024cf2 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Screen.o) + 0x0000000008024cf2 touchgfx::ClickEvent::getEventType() const + .text._ZNK8touchgfx9DragEvent12getEventTypeEv + 0x0000000008024cf6 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Screen.o) + 0x0000000008024cf6 touchgfx::DragEvent::getEventType() const + .text._ZNK8touchgfx12GestureEvent12getEventTypeEv + 0x0000000008024cfa 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Screen.o) + 0x0000000008024cfa touchgfx::GestureEvent::getEventType() const + .text._ZN8touchgfx6ScreenD2Ev + 0x0000000008024cfe 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Screen.o) + 0x0000000008024cfe touchgfx::Screen::~Screen() + 0x0000000008024cfe touchgfx::Screen::~Screen() + .text._ZN8touchgfx12GestureEventD2Ev + 0x0000000008024d00 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Screen.o) + 0x0000000008024d00 touchgfx::GestureEvent::~GestureEvent() + 0x0000000008024d00 touchgfx::GestureEvent::~GestureEvent() + .text._ZN8touchgfx9DragEventD2Ev + 0x0000000008024d02 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Screen.o) + 0x0000000008024d02 touchgfx::DragEvent::~DragEvent() + 0x0000000008024d02 touchgfx::DragEvent::~DragEvent() + .text._ZN8touchgfx10ClickEventD2Ev + 0x0000000008024d04 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Screen.o) + 0x0000000008024d04 touchgfx::ClickEvent::~ClickEvent() + 0x0000000008024d04 touchgfx::ClickEvent::~ClickEvent() + .text._ZN8touchgfx10ClickEventD0Ev + 0x0000000008024d06 0xe C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Screen.o) + 0x0000000008024d06 touchgfx::ClickEvent::~ClickEvent() + .text._ZN8touchgfx9DragEventD0Ev + 0x0000000008024d14 0xe C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Screen.o) + 0x0000000008024d14 touchgfx::DragEvent::~DragEvent() + .text._ZN8touchgfx12GestureEventD0Ev + 0x0000000008024d22 0xe C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Screen.o) + 0x0000000008024d22 touchgfx::GestureEvent::~GestureEvent() + .text._ZN8touchgfx6ScreenD0Ev + 0x0000000008024d30 0xe C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Screen.o) + 0x0000000008024d30 touchgfx::Screen::~Screen() + *fill* 0x0000000008024d3e 0x2 + .text._ZN8touchgfx6Screen18handleGestureEventERKNS_12GestureEventE + 0x0000000008024d40 0x58 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Screen.o) + 0x0000000008024d40 touchgfx::Screen::handleGestureEvent(touchgfx::GestureEvent const&) + .text._ZN8touchgfx6Screen16handleClickEventERKNS_10ClickEventE + 0x0000000008024d98 0xa8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Screen.o) + 0x0000000008024d98 touchgfx::Screen::handleClickEvent(touchgfx::ClickEvent const&) + .text._ZN8touchgfx6Screen15handleDragEventERKNS_9DragEventE + 0x0000000008024e40 0xfc C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Screen.o) + 0x0000000008024e40 touchgfx::Screen::handleDragEvent(touchgfx::DragEvent const&) + .text._ZN8touchgfx8Drawable20getCachedVisibleRectEv + 0x0000000008024f3c 0x38 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Screen.o) + 0x0000000008024f3c touchgfx::Drawable::getCachedVisibleRect() + .text._ZN8touchgfx8Drawable13getCachedAbsXEv + 0x0000000008024f74 0x28 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Screen.o) + 0x0000000008024f74 touchgfx::Drawable::getCachedAbsX() + .text._ZN8touchgfx8Drawable13getCachedAbsYEv + 0x0000000008024f9c 0x28 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Screen.o) + 0x0000000008024f9c touchgfx::Drawable::getCachedAbsY() + .text._ZN8touchgfx6ScreenC2Ev + 0x0000000008024fc4 0x70 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Screen.o) + 0x0000000008024fc4 touchgfx::Screen::Screen() + 0x0000000008024fc4 touchgfx::Screen::Screen() + .text._ZN8touchgfx6Screen4drawEv + 0x0000000008025034 0x30 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Screen.o) + 0x0000000008025034 touchgfx::Screen::draw() + .text._ZN8touchgfx6Screen5JSMOCERKNS_4RectEPNS_8DrawableE + 0x0000000008025064 0x202 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Screen.o) + 0x0000000008025064 touchgfx::Screen::JSMOC(touchgfx::Rect const&, touchgfx::Drawable*) + .text._ZN8touchgfx6Screen9startSMOCERKNS_4RectE + 0x0000000008025266 0x58 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Screen.o) + 0x0000000008025266 touchgfx::Screen::startSMOC(touchgfx::Rect const&) + .text._ZN8touchgfx6Screen4drawERNS_4RectE + 0x00000000080252be 0x5e C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Screen.o) + 0x00000000080252be touchgfx::Screen::draw(touchgfx::Rect&) + .text._ZN8touchgfx6Screen14bindTransitionERNS_10TransitionE + 0x000000000802531c 0xc C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Screen.o) + 0x000000000802531c touchgfx::Screen::bindTransition(touchgfx::Transition&) + .text._ZN8touchgfx12TextProviderC2Ev + 0x0000000008025328 0x4e C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextProvider.o) + 0x0000000008025328 touchgfx::TextProvider::TextProvider() + 0x0000000008025328 touchgfx::TextProvider::TextProvider() + .text._ZN8touchgfx12TextProvider11endOfStringEv + 0x0000000008025376 0x10 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextProvider.o) + 0x0000000008025376 touchgfx::TextProvider::endOfString() + .text._ZN8touchgfx12TextProvider19getNextCharInternalEv + 0x0000000008025386 0x58 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextProvider.o) + 0x0000000008025386 touchgfx::TextProvider::getNextCharInternal() + .text._ZN8touchgfx12TextProvider10initializeEPKtSt9__va_listS2_PKNS_24FontContextualFormsTableE + 0x00000000080253de 0x2a C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextProvider.o) + 0x00000000080253de touchgfx::TextProvider::initialize(unsigned short const*, std::__va_list, unsigned short const*, touchgfx::FontContextualFormsTable const*) + .text._ZN8touchgfx12TextProvider10initializeEPKtS2_PKNS_24FontContextualFormsTableEz + 0x0000000008025408 0x22 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextProvider.o) + 0x0000000008025408 touchgfx::TextProvider::initialize(unsigned short const*, unsigned short const*, touchgfx::FontContextualFormsTable const*, ...) + .text._ZN8touchgfx12TextProvider16adjustHindiGlyphEPKNS_9GlyphNodeE + 0x000000000802542a 0x48 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextProvider.o) + 0x000000000802542a touchgfx::TextProvider::adjustHindiGlyph(touchgfx::GlyphNode const*) + .text._ZNK8touchgfx12TextProvider15thaiLookupGlyphEPKNS_9GlyphNodeEPKNS_4FontEt + 0x0000000008025472 0x16 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextProvider.o) + 0x0000000008025472 touchgfx::TextProvider::thaiLookupGlyph(touchgfx::GlyphNode const*, touchgfx::Font const*, unsigned short) const + .text._ZN8touchgfx12TextProvider15adjustThaiGlyphEPKNS_4FontEPKNS_9GlyphNodeE + 0x0000000008025488 0x218 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextProvider.o) + 0x0000000008025488 touchgfx::TextProvider::adjustThaiGlyph(touchgfx::Font const*, touchgfx::GlyphNode const*) + .text._ZN8touchgfx12TextProvider17adjustArabicGlyphEPKNS_4FontEPKNS_9GlyphNodeEt + 0x00000000080256a0 0x348 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextProvider.o) + 0x00000000080256a0 touchgfx::TextProvider::adjustArabicGlyph(touchgfx::Font const*, touchgfx::GlyphNode const*, unsigned short) + .text._ZN8touchgfx12TextProvider15getNextLigatureEhPKNS_4FontERPKNS_9GlyphNodeE + 0x00000000080259e8 0x92 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextProvider.o) + 0x00000000080259e8 touchgfx::TextProvider::getNextLigature(unsigned char, touchgfx::Font const*, touchgfx::GlyphNode const*&) + .text._ZN8touchgfx12TextProvider15getNextLigatureEhPKNS_4FontERPKNS_9GlyphNodeERPKhRh + 0x0000000008025a7a 0x98 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextProvider.o) + 0x0000000008025a7a touchgfx::TextProvider::getNextLigature(unsigned char, touchgfx::Font const*, touchgfx::GlyphNode const*&, unsigned char const*&, unsigned char&) + .text._ZN8touchgfx12TextProvider15fillInputBufferEv + 0x0000000008025b12 0x6e C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextProvider.o) + 0x0000000008025b12 touchgfx::TextProvider::fillInputBuffer() + .text._ZN8touchgfx12TextProvider11getNextCharEv + 0x0000000008025b80 0x48 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextProvider.o) + 0x0000000008025b80 touchgfx::TextProvider::getNextChar() + .text._ZN8touchgfx12TextProvider22replaceInputCharactersEttPKt + 0x0000000008025bc8 0xb2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextProvider.o) + 0x0000000008025bc8 touchgfx::TextProvider::replaceInputCharacters(unsigned short, unsigned short, unsigned short const*) + .text._ZN8touchgfx12TextProvider13gsubRuleMatchEPKtttt + 0x0000000008025c7a 0x5e C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextProvider.o) + 0x0000000008025c7a touchgfx::TextProvider::gsubRuleMatch(unsigned short const*, unsigned short, unsigned short, unsigned short) + .text._ZN8touchgfx12TextProvider14applyGsubRulesEPKtt + 0x0000000008025cd8 0x68 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextProvider.o) + 0x0000000008025cd8 touchgfx::TextProvider::applyGsubRules(unsigned short const*, unsigned short) + .text._ZNK8touchgfx12TextProvider21gsubTableBinarySearchEtPKtt + 0x0000000008025d40 0x3c C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextProvider.o) + 0x0000000008025d40 touchgfx::TextProvider::gsubTableBinarySearch(unsigned short, unsigned short const*, unsigned short) const + .text._ZN8touchgfx12TextProvider16substituteGlyphsEv + 0x0000000008025d7c 0x3e C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextProvider.o) + 0x0000000008025d7c touchgfx::TextProvider::substituteGlyphs() + *fill* 0x0000000008025dba 0x2 + .text._ZN8touchgfx9GradientsC2EPKNS_7Point3DE + 0x0000000008025dbc 0x260 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextureMapTypes.o) + 0x0000000008025dbc touchgfx::Gradients::Gradients(touchgfx::Point3D const*) + 0x0000000008025dbc touchgfx::Gradients::Gradients(touchgfx::Point3D const*) + .text._ZN8touchgfx4EdgeC2ERKNS_9GradientsEPKNS_7Point3DEii + 0x000000000802601c 0x1d8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextureMapTypes.o) + 0x000000000802601c touchgfx::Edge::Edge(touchgfx::Gradients const&, touchgfx::Point3D const*, int, int) + 0x000000000802601c touchgfx::Edge::Edge(touchgfx::Gradients const&, touchgfx::Point3D const*, int, int) + .text._ZN8touchgfx7Unicode6strlenEPKt + 0x00000000080261f4 0x1a C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Unicode.o) + 0x00000000080261f4 touchgfx::Unicode::strlen(unsigned short const*) + .text._ZN8touchgfx7Unicode7strncpyEPtPKct + 0x000000000802620e 0x22 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Unicode.o) + 0x000000000802620e touchgfx::Unicode::strncpy(unsigned short*, char const*, unsigned short) + .text._ZN8touchgfx7Unicode4itoaElPtti.part.2 + 0x0000000008026230 0x58 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Unicode.o) + .text._ZN8touchgfx7Unicode4utoaEmPtti.part.3 + 0x0000000008026288 0x3c C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Unicode.o) + .text._ZN8touchgfx7Unicode4itoaElPtti + 0x00000000080262c4 0x18 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Unicode.o) + 0x00000000080262c4 touchgfx::Unicode::itoa(long, unsigned short*, unsigned short, int) + .text._ZN8touchgfx7Unicode13composeStringERPKtttbbibibRitPt + 0x00000000080262dc 0x186 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Unicode.o) + 0x00000000080262dc touchgfx::Unicode::composeString(unsigned short const*&, unsigned short, unsigned short, bool, bool, int, bool, int, bool, int&, unsigned short, unsigned short*) + .text._ZN8touchgfx7Unicode22parseFlagsAndPrecisionERPKtRPKcRtRbS8_S8_S8_RiS8_S9_ + 0x0000000008026462 0x1a0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Unicode.o) + 0x0000000008026462 touchgfx::Unicode::parseFlagsAndPrecision(unsigned short const*&, char const*&, unsigned short&, bool&, bool&, bool&, bool&, int&, bool&, int&) + .text._ZN8touchgfx7Unicode9vsnprintfEPttPKtPKcSt9__va_list + 0x0000000008026602 0x2d0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Unicode.o) + 0x0000000008026602 touchgfx::Unicode::vsnprintf(unsigned short*, unsigned short, unsigned short const*, char const*, std::__va_list) + .text._ZN8touchgfx7Unicode9vsnprintfEPttPKcSt9__va_list + 0x00000000080268d2 0x12 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Unicode.o) + 0x00000000080268d2 touchgfx::Unicode::vsnprintf(unsigned short*, unsigned short, char const*, std::__va_list) + .text._ZN8touchgfx7Unicode8snprintfEPttPKcz + 0x00000000080268e4 0x1a C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Unicode.o) + 0x00000000080268e4 touchgfx::Unicode::snprintf(unsigned short*, unsigned short, char const*, ...) + *fill* 0x00000000080268fe 0x2 + .text._ZN8touchgfx11FontManager15setFontProviderEPNS_12FontProviderE + 0x0000000008026900 0xc C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(FontManager.o) + 0x0000000008026900 touchgfx::FontManager::setFontProvider(touchgfx::FontProvider*) + .text._ZN8touchgfx6Bitmap15isDynamicBitmapEt + 0x000000000802690c 0x24 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + 0x000000000802690c touchgfx::Bitmap::isDynamicBitmap(unsigned short) + .text._ZN8touchgfx6Bitmap23dynamicBitmapGetAddressEt + 0x0000000008026930 0x18 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + 0x0000000008026930 touchgfx::Bitmap::dynamicBitmapGetAddress(unsigned short) + .text._ZN8touchgfx6Bitmap10clearCacheEv + 0x0000000008026948 0xbc C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + 0x0000000008026948 touchgfx::Bitmap::clearCache() + .text._ZN8touchgfx6Bitmap8setCacheEPtmm + 0x0000000008026a04 0x2c C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + 0x0000000008026a04 touchgfx::Bitmap::setCache(unsigned short*, unsigned long, unsigned long) + .text._ZN8touchgfx6Bitmap22registerBitmapDatabaseEPKNS0_10BitmapDataEtPtmm + 0x0000000008026a30 0x28 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + 0x0000000008026a30 touchgfx::Bitmap::registerBitmapDatabase(touchgfx::Bitmap::BitmapData const*, unsigned short, unsigned short*, unsigned long, unsigned long) + .text._ZNK8touchgfx6Bitmap8getWidthEv + 0x0000000008026a58 0x68 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + 0x0000000008026a58 touchgfx::Bitmap::getWidth() const + .text._ZNK8touchgfx6Bitmap9getHeightEv + 0x0000000008026ac0 0x68 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + 0x0000000008026ac0 touchgfx::Bitmap::getHeight() const + .text._ZNK8touchgfx6Bitmap12getSolidRectEv + 0x0000000008026b28 0x98 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + 0x0000000008026b28 touchgfx::Bitmap::getSolidRect() const + .text._ZNK8touchgfx6Bitmap20hasTransparentPixelsEv + 0x0000000008026bc0 0x70 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + 0x0000000008026bc0 touchgfx::Bitmap::hasTransparentPixels() const + .text._ZNK8touchgfx6Bitmap7getDataEv + 0x0000000008026c30 0x60 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + 0x0000000008026c30 touchgfx::Bitmap::getData() const + .text._ZNK8touchgfx6Bitmap12getExtraDataEv + 0x0000000008026c90 0xa8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + 0x0000000008026c90 touchgfx::Bitmap::getExtraData() const + .text._ZNK8touchgfx6Bitmap9getFormatEv + 0x0000000008026d38 0x70 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + 0x0000000008026d38 touchgfx::Bitmap::getFormat() const + .text._ZNK8touchgfx8LCD16bpp8bitDepthEv + 0x0000000008026da8 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x0000000008026da8 touchgfx::LCD16bpp::bitDepth() const + .text._ZNK8touchgfx8LCD16bpp17framebufferFormatEv + 0x0000000008026dac 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x0000000008026dac touchgfx::LCD16bpp::framebufferFormat() const + .text._ZNK8touchgfx8LCD16bpp17framebufferStrideEv + 0x0000000008026db0 0x10 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x0000000008026db0 touchgfx::LCD16bpp::framebufferStride() const + .text._ZN8touchgfx8LCD16bpp28getTextureMapperDrawScanLineERKNS_14TextureSurfaceEth + 0x0000000008026dc0 0x146 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x0000000008026dc0 touchgfx::LCD16bpp::getTextureMapperDrawScanLine(touchgfx::TextureSurface const&, unsigned short, unsigned char) + .text._ZN8touchgfx8LCD16bpp49TextureMapper_L8_RGB565_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff + 0x0000000008026f06 0x2a0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x0000000008026f06 touchgfx::LCD16bpp::TextureMapper_L8_RGB565_Opaque_NearestNeighbor_GA::drawTextureMapScanLineSubdivisions(int, int, int, int, float, float, float, long, long, long, long, float, float, float, float, float, touchgfx::DrawingSurface const&, int, int, touchgfx::TextureSurface const&, unsigned char, float, float, float) + .text._ZN8touchgfx8LCD16bpp51TextureMapper_L8_RGB565_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff + 0x00000000080271a6 0x184 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x00000000080271a6 touchgfx::LCD16bpp::TextureMapper_L8_RGB565_Opaque_NearestNeighbor_NoGA::drawTextureMapScanLineSubdivisions(int, int, int, int, float, float, float, long, long, long, long, float, float, float, float, float, touchgfx::DrawingSurface const&, int, int, touchgfx::TextureSurface const&, unsigned char, float, float, float) + .text._ZN8touchgfx8LCD16bpp49TextureMapper_L8_RGB888_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff + 0x000000000802732a 0x2a8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802732a touchgfx::LCD16bpp::TextureMapper_L8_RGB888_Opaque_NearestNeighbor_GA::drawTextureMapScanLineSubdivisions(int, int, int, int, float, float, float, long, long, long, long, float, float, float, float, float, touchgfx::DrawingSurface const&, int, int, touchgfx::TextureSurface const&, unsigned char, float, float, float) + *fill* 0x00000000080275d2 0x2 + .text._ZN8touchgfx8LCD16bpp51TextureMapper_L8_RGB888_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff + 0x00000000080275d4 0x1e0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x00000000080275d4 touchgfx::LCD16bpp::TextureMapper_L8_RGB888_Opaque_NearestNeighbor_NoGA::drawTextureMapScanLineSubdivisions(int, int, int, int, float, float, float, long, long, long, long, float, float, float, float, float, touchgfx::DrawingSurface const&, int, int, touchgfx::TextureSurface const&, unsigned char, float, float, float) + .text._ZN8touchgfx8LCD16bpp54TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff + 0x00000000080277b4 0x2bc C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x00000000080277b4 touchgfx::LCD16bpp::TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_GA::drawTextureMapScanLineSubdivisions(int, int, int, int, float, float, float, long, long, long, long, float, float, float, float, float, touchgfx::DrawingSurface const&, int, int, touchgfx::TextureSurface const&, unsigned char, float, float, float) + .text._ZN8touchgfx8LCD16bpp56TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff + 0x0000000008027a70 0x2f0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x0000000008027a70 touchgfx::LCD16bpp::TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_NoGA::drawTextureMapScanLineSubdivisions(int, int, int, int, float, float, float, long, long, long, long, float, float, float, float, float, touchgfx::DrawingSurface const&, int, int, touchgfx::TextureSurface const&, unsigned char, float, float, float) + .text._ZN8touchgfx8LCD16bpp49TextureMapper_RGB565_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff + 0x0000000008027d60 0x2ce C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x0000000008027d60 touchgfx::LCD16bpp::TextureMapper_RGB565_NonOpaque_NearestNeighbor_GA::drawTextureMapScanLineSubdivisions(int, int, int, int, float, float, float, long, long, long, long, float, float, float, float, float, touchgfx::DrawingSurface const&, int, int, touchgfx::TextureSurface const&, unsigned char, float, float, float) + .text._ZN8touchgfx8LCD16bpp51TextureMapper_RGB565_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff + 0x000000000802802e 0x2d0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802802e touchgfx::LCD16bpp::TextureMapper_RGB565_NonOpaque_NearestNeighbor_NoGA::drawTextureMapScanLineSubdivisions(int, int, int, int, float, float, float, long, long, long, long, float, float, float, float, float, touchgfx::DrawingSurface const&, int, int, touchgfx::TextureSurface const&, unsigned char, float, float, float) + .text._ZN8touchgfx8LCD16bpp46TextureMapper_RGB565_Opaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff + 0x00000000080282fe 0x28e C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x00000000080282fe touchgfx::LCD16bpp::TextureMapper_RGB565_Opaque_NearestNeighbor_GA::drawTextureMapScanLineSubdivisions(int, int, int, int, float, float, float, long, long, long, long, float, float, float, float, float, touchgfx::DrawingSurface const&, int, int, touchgfx::TextureSurface const&, unsigned char, float, float, float) + .text._ZN8touchgfx8LCD16bpp48TextureMapper_RGB565_Opaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff + 0x000000000802858c 0x172 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802858c touchgfx::LCD16bpp::TextureMapper_RGB565_Opaque_NearestNeighbor_NoGA::drawTextureMapScanLineSubdivisions(int, int, int, int, float, float, float, long, long, long, long, float, float, float, float, float, touchgfx::DrawingSurface const&, int, int, touchgfx::TextureSurface const&, unsigned char, float, float, float) + .text._ZN8touchgfx8LCD16bpp51TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff + 0x00000000080286fe 0x2f4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x00000000080286fe touchgfx::LCD16bpp::TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_GA::drawTextureMapScanLineSubdivisions(int, int, int, int, float, float, float, long, long, long, long, float, float, float, float, float, touchgfx::DrawingSurface const&, int, int, touchgfx::TextureSurface const&, unsigned char, float, float, float) + *fill* 0x00000000080289f2 0x2 + .text._ZN8touchgfx8LCD16bpp53TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff + 0x00000000080289f4 0x2e0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x00000000080289f4 touchgfx::LCD16bpp::TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_NoGA::drawTextureMapScanLineSubdivisions(int, int, int, int, float, float, float, long, long, long, long, float, float, float, float, float, touchgfx::DrawingSurface const&, int, int, touchgfx::TextureSurface const&, unsigned char, float, float, float) + .text._ZN8touchgfx8LCD16bpp35TextureMapper_A4_NearestNeighbor_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff + 0x0000000008028cd4 0x328 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x0000000008028cd4 touchgfx::LCD16bpp::TextureMapper_A4_NearestNeighbor_GA::drawTextureMapScanLineSubdivisions(int, int, int, int, float, float, float, long, long, long, long, float, float, float, float, float, touchgfx::DrawingSurface const&, int, int, touchgfx::TextureSurface const&, unsigned char, float, float, float) + .text._ZN8touchgfx8LCD16bpp37TextureMapper_A4_NearestNeighbor_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff + 0x0000000008028ffc 0x318 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x0000000008028ffc touchgfx::LCD16bpp::TextureMapper_A4_NearestNeighbor_NoGA::drawTextureMapScanLineSubdivisions(int, int, int, int, float, float, float, long, long, long, long, float, float, float, float, float, touchgfx::DrawingSurface const&, int, int, touchgfx::TextureSurface const&, unsigned char, float, float, float) + .text._ZN8touchgfx8LCD16bppD2Ev + 0x0000000008029314 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x0000000008029314 touchgfx::LCD16bpp::~LCD16bpp() + 0x0000000008029314 touchgfx::LCD16bpp::~LCD16bpp() + .text._ZN8touchgfx8LCD16bpp19DecompressorL8_LZW9D2Ev + 0x0000000008029316 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x0000000008029316 touchgfx::LCD16bpp::DecompressorL8_LZW9::~DecompressorL8_LZW9() + 0x0000000008029316 touchgfx::LCD16bpp::DecompressorL8_LZW9::~DecompressorL8_LZW9() + .text._ZN8touchgfx8LCD16bpp18DecompressorL8_RLED2Ev + 0x0000000008029318 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x0000000008029318 touchgfx::LCD16bpp::DecompressorL8_RLE::~DecompressorL8_RLE() + 0x0000000008029318 touchgfx::LCD16bpp::DecompressorL8_RLE::~DecompressorL8_RLE() + .text._ZN8touchgfx8LCD16bpp17DecompressorL8_L4D2Ev + 0x000000000802931a 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802931a touchgfx::LCD16bpp::DecompressorL8_L4::~DecompressorL8_L4() + 0x000000000802931a touchgfx::LCD16bpp::DecompressorL8_L4::~DecompressorL8_L4() + .text._ZN8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGAD2Ev + 0x000000000802931c 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802931c touchgfx::LCD16bpp::TextureMapper_A4_BilinearInterpolation_NoGA::~TextureMapper_A4_BilinearInterpolation_NoGA() + 0x000000000802931c touchgfx::LCD16bpp::TextureMapper_A4_BilinearInterpolation_NoGA::~TextureMapper_A4_BilinearInterpolation_NoGA() + .text._ZN8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GAD2Ev + 0x000000000802931e 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802931e touchgfx::LCD16bpp::TextureMapper_A4_BilinearInterpolation_GA::~TextureMapper_A4_BilinearInterpolation_GA() + 0x000000000802931e touchgfx::LCD16bpp::TextureMapper_A4_BilinearInterpolation_GA::~TextureMapper_A4_BilinearInterpolation_GA() + .text._ZN8touchgfx8LCD16bpp37TextureMapper_A4_NearestNeighbor_NoGAD2Ev + 0x0000000008029320 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x0000000008029320 touchgfx::LCD16bpp::TextureMapper_A4_NearestNeighbor_NoGA::~TextureMapper_A4_NearestNeighbor_NoGA() + 0x0000000008029320 touchgfx::LCD16bpp::TextureMapper_A4_NearestNeighbor_NoGA::~TextureMapper_A4_NearestNeighbor_NoGA() + .text._ZN8touchgfx8LCD16bpp35TextureMapper_A4_NearestNeighbor_GAD2Ev + 0x0000000008029322 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x0000000008029322 touchgfx::LCD16bpp::TextureMapper_A4_NearestNeighbor_GA::~TextureMapper_A4_NearestNeighbor_GA() + 0x0000000008029322 touchgfx::LCD16bpp::TextureMapper_A4_NearestNeighbor_GA::~TextureMapper_A4_NearestNeighbor_GA() + .text._ZN8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGAD2Ev + 0x0000000008029324 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x0000000008029324 touchgfx::LCD16bpp::TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA::~TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA() + 0x0000000008029324 touchgfx::LCD16bpp::TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA::~TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA() + .text._ZN8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GAD2Ev + 0x0000000008029326 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x0000000008029326 touchgfx::LCD16bpp::TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA::~TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA() + 0x0000000008029326 touchgfx::LCD16bpp::TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA::~TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA() + .text._ZN8touchgfx8LCD16bpp53TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_NoGAD2Ev + 0x0000000008029328 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x0000000008029328 touchgfx::LCD16bpp::TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_NoGA::~TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_NoGA() + 0x0000000008029328 touchgfx::LCD16bpp::TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_NoGA::~TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_NoGA() + .text._ZN8touchgfx8LCD16bpp51TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_GAD2Ev + 0x000000000802932a 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802932a touchgfx::LCD16bpp::TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_GA::~TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_GA() + 0x000000000802932a touchgfx::LCD16bpp::TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_GA::~TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_GA() + .text._ZN8touchgfx8LCD16bpp54TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGAD2Ev + 0x000000000802932c 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802932c touchgfx::LCD16bpp::TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA::~TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA() + 0x000000000802932c touchgfx::LCD16bpp::TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA::~TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA() + .text._ZN8touchgfx8LCD16bpp52TextureMapper_RGB565_Opaque_BilinearInterpolation_GAD2Ev + 0x000000000802932e 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802932e touchgfx::LCD16bpp::TextureMapper_RGB565_Opaque_BilinearInterpolation_GA::~TextureMapper_RGB565_Opaque_BilinearInterpolation_GA() + 0x000000000802932e touchgfx::LCD16bpp::TextureMapper_RGB565_Opaque_BilinearInterpolation_GA::~TextureMapper_RGB565_Opaque_BilinearInterpolation_GA() + .text._ZN8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGAD2Ev + 0x0000000008029330 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x0000000008029330 touchgfx::LCD16bpp::TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA::~TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA() + 0x0000000008029330 touchgfx::LCD16bpp::TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA::~TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA() + .text._ZN8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GAD2Ev + 0x0000000008029332 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x0000000008029332 touchgfx::LCD16bpp::TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA::~TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA() + 0x0000000008029332 touchgfx::LCD16bpp::TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA::~TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA() + .text._ZN8touchgfx8LCD16bpp48TextureMapper_RGB565_Opaque_NearestNeighbor_NoGAD2Ev + 0x0000000008029334 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x0000000008029334 touchgfx::LCD16bpp::TextureMapper_RGB565_Opaque_NearestNeighbor_NoGA::~TextureMapper_RGB565_Opaque_NearestNeighbor_NoGA() + 0x0000000008029334 touchgfx::LCD16bpp::TextureMapper_RGB565_Opaque_NearestNeighbor_NoGA::~TextureMapper_RGB565_Opaque_NearestNeighbor_NoGA() + .text._ZN8touchgfx8LCD16bpp46TextureMapper_RGB565_Opaque_NearestNeighbor_GAD2Ev + 0x0000000008029336 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x0000000008029336 touchgfx::LCD16bpp::TextureMapper_RGB565_Opaque_NearestNeighbor_GA::~TextureMapper_RGB565_Opaque_NearestNeighbor_GA() + 0x0000000008029336 touchgfx::LCD16bpp::TextureMapper_RGB565_Opaque_NearestNeighbor_GA::~TextureMapper_RGB565_Opaque_NearestNeighbor_GA() + .text._ZN8touchgfx8LCD16bpp51TextureMapper_RGB565_NonOpaque_NearestNeighbor_NoGAD2Ev + 0x0000000008029338 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x0000000008029338 touchgfx::LCD16bpp::TextureMapper_RGB565_NonOpaque_NearestNeighbor_NoGA::~TextureMapper_RGB565_NonOpaque_NearestNeighbor_NoGA() + 0x0000000008029338 touchgfx::LCD16bpp::TextureMapper_RGB565_NonOpaque_NearestNeighbor_NoGA::~TextureMapper_RGB565_NonOpaque_NearestNeighbor_NoGA() + .text._ZN8touchgfx8LCD16bpp49TextureMapper_RGB565_NonOpaque_NearestNeighbor_GAD2Ev + 0x000000000802933a 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802933a touchgfx::LCD16bpp::TextureMapper_RGB565_NonOpaque_NearestNeighbor_GA::~TextureMapper_RGB565_NonOpaque_NearestNeighbor_GA() + 0x000000000802933a touchgfx::LCD16bpp::TextureMapper_RGB565_NonOpaque_NearestNeighbor_GA::~TextureMapper_RGB565_NonOpaque_NearestNeighbor_GA() + .text._ZN8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGAD2Ev + 0x000000000802933c 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802933c touchgfx::LCD16bpp::TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA::~TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA() + 0x000000000802933c touchgfx::LCD16bpp::TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA::~TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA() + .text._ZN8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GAD2Ev + 0x000000000802933e 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802933e touchgfx::LCD16bpp::TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA::~TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA() + 0x000000000802933e touchgfx::LCD16bpp::TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA::~TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA() + .text._ZN8touchgfx8LCD16bpp56TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_NoGAD2Ev + 0x0000000008029340 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x0000000008029340 touchgfx::LCD16bpp::TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_NoGA::~TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_NoGA() + 0x0000000008029340 touchgfx::LCD16bpp::TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_NoGA::~TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_NoGA() + .text._ZN8touchgfx8LCD16bpp54TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_GAD2Ev + 0x0000000008029342 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x0000000008029342 touchgfx::LCD16bpp::TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_GA::~TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_GA() + 0x0000000008029342 touchgfx::LCD16bpp::TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_GA::~TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_GA() + .text._ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGAD2Ev + 0x0000000008029344 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x0000000008029344 touchgfx::LCD16bpp::TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA::~TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA() + 0x0000000008029344 touchgfx::LCD16bpp::TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA::~TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA() + .text._ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GAD2Ev + 0x0000000008029346 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x0000000008029346 touchgfx::LCD16bpp::TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA::~TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA() + 0x0000000008029346 touchgfx::LCD16bpp::TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA::~TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA() + .text._ZN8touchgfx8LCD16bpp51TextureMapper_L8_RGB888_Opaque_NearestNeighbor_NoGAD2Ev + 0x0000000008029348 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x0000000008029348 touchgfx::LCD16bpp::TextureMapper_L8_RGB888_Opaque_NearestNeighbor_NoGA::~TextureMapper_L8_RGB888_Opaque_NearestNeighbor_NoGA() + 0x0000000008029348 touchgfx::LCD16bpp::TextureMapper_L8_RGB888_Opaque_NearestNeighbor_NoGA::~TextureMapper_L8_RGB888_Opaque_NearestNeighbor_NoGA() + .text._ZN8touchgfx8LCD16bpp49TextureMapper_L8_RGB888_Opaque_NearestNeighbor_GAD2Ev + 0x000000000802934a 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802934a touchgfx::LCD16bpp::TextureMapper_L8_RGB888_Opaque_NearestNeighbor_GA::~TextureMapper_L8_RGB888_Opaque_NearestNeighbor_GA() + 0x000000000802934a touchgfx::LCD16bpp::TextureMapper_L8_RGB888_Opaque_NearestNeighbor_GA::~TextureMapper_L8_RGB888_Opaque_NearestNeighbor_GA() + .text._ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGAD2Ev + 0x000000000802934c 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802934c touchgfx::LCD16bpp::TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA::~TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA() + 0x000000000802934c touchgfx::LCD16bpp::TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA::~TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA() + .text._ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GAD2Ev + 0x000000000802934e 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802934e touchgfx::LCD16bpp::TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA::~TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA() + 0x000000000802934e touchgfx::LCD16bpp::TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA::~TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA() + .text._ZN8touchgfx8LCD16bpp51TextureMapper_L8_RGB565_Opaque_NearestNeighbor_NoGAD2Ev + 0x0000000008029350 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x0000000008029350 touchgfx::LCD16bpp::TextureMapper_L8_RGB565_Opaque_NearestNeighbor_NoGA::~TextureMapper_L8_RGB565_Opaque_NearestNeighbor_NoGA() + 0x0000000008029350 touchgfx::LCD16bpp::TextureMapper_L8_RGB565_Opaque_NearestNeighbor_NoGA::~TextureMapper_L8_RGB565_Opaque_NearestNeighbor_NoGA() + .text._ZN8touchgfx8LCD16bpp49TextureMapper_L8_RGB565_Opaque_NearestNeighbor_GAD2Ev + 0x0000000008029352 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x0000000008029352 touchgfx::LCD16bpp::TextureMapper_L8_RGB565_Opaque_NearestNeighbor_GA::~TextureMapper_L8_RGB565_Opaque_NearestNeighbor_GA() + 0x0000000008029352 touchgfx::LCD16bpp::TextureMapper_L8_RGB565_Opaque_NearestNeighbor_GA::~TextureMapper_L8_RGB565_Opaque_NearestNeighbor_GA() + .text._ZN8touchgfx8LCD16bpp29copyFrameBufferRegionToMemoryERKNS_4RectES3_t + 0x0000000008029354 0x44 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x0000000008029354 touchgfx::LCD16bpp::copyFrameBufferRegionToMemory(touchgfx::Rect const&, touchgfx::Rect const&, unsigned short) + .text._ZN8touchgfx8LCD16bpp29copyAreaFromTFTToClientBufferERKNS_4RectE + 0x0000000008029398 0x110 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x0000000008029398 touchgfx::LCD16bpp::copyAreaFromTFTToClientBuffer(touchgfx::Rect const&) + .text._ZN8touchgfx8LCD16bpp8blitCopyEPKtRKNS_4RectES5_hb + 0x00000000080294a8 0x1dc C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x00000000080294a8 touchgfx::LCD16bpp::blitCopy(unsigned short const*, touchgfx::Rect const&, touchgfx::Rect const&, unsigned char, bool) + .text._ZN8touchgfx8LCD16bppD0Ev + 0x0000000008029684 0xe C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x0000000008029684 touchgfx::LCD16bpp::~LCD16bpp() + .text._ZN8touchgfx8LCD16bpp17DecompressorL8_L4D0Ev + 0x0000000008029692 0xe C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x0000000008029692 touchgfx::LCD16bpp::DecompressorL8_L4::~DecompressorL8_L4() + .text._ZN8touchgfx8LCD16bpp18DecompressorL8_RLED0Ev + 0x00000000080296a0 0xe C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x00000000080296a0 touchgfx::LCD16bpp::DecompressorL8_RLE::~DecompressorL8_RLE() + .text._ZN8touchgfx8LCD16bpp19DecompressorL8_LZW9D0Ev + 0x00000000080296ae 0x10 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x00000000080296ae touchgfx::LCD16bpp::DecompressorL8_LZW9::~DecompressorL8_LZW9() + .text._ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGAD0Ev + 0x00000000080296be 0xe C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x00000000080296be touchgfx::LCD16bpp::TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA::~TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA() + .text._ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GAD0Ev + 0x00000000080296cc 0xe C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x00000000080296cc touchgfx::LCD16bpp::TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA::~TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA() + .text._ZN8touchgfx8LCD16bpp51TextureMapper_L8_RGB565_Opaque_NearestNeighbor_NoGAD0Ev + 0x00000000080296da 0xe C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x00000000080296da touchgfx::LCD16bpp::TextureMapper_L8_RGB565_Opaque_NearestNeighbor_NoGA::~TextureMapper_L8_RGB565_Opaque_NearestNeighbor_NoGA() + .text._ZN8touchgfx8LCD16bpp49TextureMapper_L8_RGB565_Opaque_NearestNeighbor_GAD0Ev + 0x00000000080296e8 0xe C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x00000000080296e8 touchgfx::LCD16bpp::TextureMapper_L8_RGB565_Opaque_NearestNeighbor_GA::~TextureMapper_L8_RGB565_Opaque_NearestNeighbor_GA() + .text._ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGAD0Ev + 0x00000000080296f6 0xe C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x00000000080296f6 touchgfx::LCD16bpp::TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA::~TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA() + .text._ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GAD0Ev + 0x0000000008029704 0xe C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x0000000008029704 touchgfx::LCD16bpp::TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA::~TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA() + .text._ZN8touchgfx8LCD16bpp51TextureMapper_L8_RGB888_Opaque_NearestNeighbor_NoGAD0Ev + 0x0000000008029712 0xe C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x0000000008029712 touchgfx::LCD16bpp::TextureMapper_L8_RGB888_Opaque_NearestNeighbor_NoGA::~TextureMapper_L8_RGB888_Opaque_NearestNeighbor_NoGA() + .text._ZN8touchgfx8LCD16bpp49TextureMapper_L8_RGB888_Opaque_NearestNeighbor_GAD0Ev + 0x0000000008029720 0xe C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x0000000008029720 touchgfx::LCD16bpp::TextureMapper_L8_RGB888_Opaque_NearestNeighbor_GA::~TextureMapper_L8_RGB888_Opaque_NearestNeighbor_GA() + .text._ZN8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGAD0Ev + 0x000000000802972e 0xe C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802972e touchgfx::LCD16bpp::TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA::~TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA() + .text._ZN8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GAD0Ev + 0x000000000802973c 0xe C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802973c touchgfx::LCD16bpp::TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA::~TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA() + .text._ZN8touchgfx8LCD16bpp56TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_NoGAD0Ev + 0x000000000802974a 0xe C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802974a touchgfx::LCD16bpp::TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_NoGA::~TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_NoGA() + .text._ZN8touchgfx8LCD16bpp54TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_GAD0Ev + 0x0000000008029758 0xe C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x0000000008029758 touchgfx::LCD16bpp::TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_GA::~TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_GA() + .text._ZN8touchgfx8LCD16bpp54TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGAD0Ev + 0x0000000008029766 0xe C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x0000000008029766 touchgfx::LCD16bpp::TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA::~TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA() + .text._ZN8touchgfx8LCD16bpp52TextureMapper_RGB565_Opaque_BilinearInterpolation_GAD0Ev + 0x0000000008029774 0xe C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x0000000008029774 touchgfx::LCD16bpp::TextureMapper_RGB565_Opaque_BilinearInterpolation_GA::~TextureMapper_RGB565_Opaque_BilinearInterpolation_GA() + .text._ZN8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGAD0Ev + 0x0000000008029782 0xe C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x0000000008029782 touchgfx::LCD16bpp::TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA::~TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA() + .text._ZN8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GAD0Ev + 0x0000000008029790 0xe C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x0000000008029790 touchgfx::LCD16bpp::TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA::~TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA() + .text._ZN8touchgfx8LCD16bpp48TextureMapper_RGB565_Opaque_NearestNeighbor_NoGAD0Ev + 0x000000000802979e 0xe C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802979e touchgfx::LCD16bpp::TextureMapper_RGB565_Opaque_NearestNeighbor_NoGA::~TextureMapper_RGB565_Opaque_NearestNeighbor_NoGA() + .text._ZN8touchgfx8LCD16bpp46TextureMapper_RGB565_Opaque_NearestNeighbor_GAD0Ev + 0x00000000080297ac 0xe C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x00000000080297ac touchgfx::LCD16bpp::TextureMapper_RGB565_Opaque_NearestNeighbor_GA::~TextureMapper_RGB565_Opaque_NearestNeighbor_GA() + .text._ZN8touchgfx8LCD16bpp51TextureMapper_RGB565_NonOpaque_NearestNeighbor_NoGAD0Ev + 0x00000000080297ba 0xe C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x00000000080297ba touchgfx::LCD16bpp::TextureMapper_RGB565_NonOpaque_NearestNeighbor_NoGA::~TextureMapper_RGB565_NonOpaque_NearestNeighbor_NoGA() + .text._ZN8touchgfx8LCD16bpp49TextureMapper_RGB565_NonOpaque_NearestNeighbor_GAD0Ev + 0x00000000080297c8 0xe C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x00000000080297c8 touchgfx::LCD16bpp::TextureMapper_RGB565_NonOpaque_NearestNeighbor_GA::~TextureMapper_RGB565_NonOpaque_NearestNeighbor_GA() + .text._ZN8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGAD0Ev + 0x00000000080297d6 0xe C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x00000000080297d6 touchgfx::LCD16bpp::TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA::~TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA() + .text._ZN8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GAD0Ev + 0x00000000080297e4 0xe C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x00000000080297e4 touchgfx::LCD16bpp::TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA::~TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA() + .text._ZN8touchgfx8LCD16bpp53TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_NoGAD0Ev + 0x00000000080297f2 0xe C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x00000000080297f2 touchgfx::LCD16bpp::TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_NoGA::~TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_NoGA() + .text._ZN8touchgfx8LCD16bpp51TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_GAD0Ev + 0x0000000008029800 0xe C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x0000000008029800 touchgfx::LCD16bpp::TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_GA::~TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_GA() + .text._ZN8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGAD0Ev + 0x000000000802980e 0xe C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802980e touchgfx::LCD16bpp::TextureMapper_A4_BilinearInterpolation_NoGA::~TextureMapper_A4_BilinearInterpolation_NoGA() + .text._ZN8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GAD0Ev + 0x000000000802981c 0xe C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802981c touchgfx::LCD16bpp::TextureMapper_A4_BilinearInterpolation_GA::~TextureMapper_A4_BilinearInterpolation_GA() + .text._ZN8touchgfx8LCD16bpp37TextureMapper_A4_NearestNeighbor_NoGAD0Ev + 0x000000000802982a 0xe C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802982a touchgfx::LCD16bpp::TextureMapper_A4_NearestNeighbor_NoGA::~TextureMapper_A4_NearestNeighbor_NoGA() + .text._ZN8touchgfx8LCD16bpp35TextureMapper_A4_NearestNeighbor_GAD0Ev + 0x0000000008029838 0xe C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x0000000008029838 touchgfx::LCD16bpp::TextureMapper_A4_NearestNeighbor_GA::~TextureMapper_A4_NearestNeighbor_GA() + *fill* 0x0000000008029846 0x2 + .text._ZN8touchgfx8LCD16bpp18DecompressorL8_RLE14blitCopyRGB565EPKhS3_RKNS_4RectES6_h + 0x0000000008029848 0x254 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x0000000008029848 touchgfx::LCD16bpp::DecompressorL8_RLE::blitCopyRGB565(unsigned char const*, unsigned char const*, touchgfx::Rect const&, touchgfx::Rect const&, unsigned char) + .text._ZN8touchgfx8LCD16bpp19DecompressorL8_LZW914blitCopyRGB565EPKhS3_RKNS_4RectES6_h + 0x0000000008029a9c 0x400 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x0000000008029a9c touchgfx::LCD16bpp::DecompressorL8_LZW9::blitCopyRGB565(unsigned char const*, unsigned char const*, touchgfx::Rect const&, touchgfx::Rect const&, unsigned char) + .text._ZN8touchgfx8LCD16bpp18DecompressorL8_RLE16blitCopyARGB8888EPKhS3_RKNS_4RectES6_h + 0x0000000008029e9c 0x278 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x0000000008029e9c touchgfx::LCD16bpp::DecompressorL8_RLE::blitCopyARGB8888(unsigned char const*, unsigned char const*, touchgfx::Rect const&, touchgfx::Rect const&, unsigned char) + .text._ZN8touchgfx8LCD16bpp18DecompressorL8_RLE14blitCopyRGB888EPKhS3_RKNS_4RectES6_h + 0x000000000802a114 0x288 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802a114 touchgfx::LCD16bpp::DecompressorL8_RLE::blitCopyRGB888(unsigned char const*, unsigned char const*, touchgfx::Rect const&, touchgfx::Rect const&, unsigned char) + .text._ZN8touchgfx8LCD16bpp19DecompressorL8_LZW916blitCopyARGB8888EPKhS3_RKNS_4RectES6_h + 0x000000000802a39c 0x3f0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802a39c touchgfx::LCD16bpp::DecompressorL8_LZW9::blitCopyARGB8888(unsigned char const*, unsigned char const*, touchgfx::Rect const&, touchgfx::Rect const&, unsigned char) + .text._ZN8touchgfx8LCD16bpp19DecompressorL8_LZW914blitCopyRGB888EPKhS3_RKNS_4RectES6_h + 0x000000000802a78c 0x428 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802a78c touchgfx::LCD16bpp::DecompressorL8_LZW9::blitCopyRGB888(unsigned char const*, unsigned char const*, touchgfx::Rect const&, touchgfx::Rect const&, unsigned char) + .text._ZN8touchgfx8LCD16bpp29copyFrameBufferRegionToMemoryERKNS_4RectES3_Phss + 0x000000000802abb4 0x228 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802abb4 touchgfx::LCD16bpp::copyFrameBufferRegionToMemory(touchgfx::Rect const&, touchgfx::Rect const&, unsigned char*, short, short) + .text._ZN8touchgfx8LCD16bpp8fillRectERKNS_4RectENS_9colortypeEh + 0x000000000802addc 0x94 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802addc touchgfx::LCD16bpp::fillRect(touchgfx::Rect const&, touchgfx::colortype, unsigned char) + .text._ZN8touchgfx8LCD16bpp10fillBufferEPhtRKNS_4RectENS_9colortypeEh + 0x000000000802ae70 0x174 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802ae70 touchgfx::LCD16bpp::fillBuffer(unsigned char*, unsigned short, touchgfx::Rect const&, touchgfx::colortype, unsigned char) + .text._ZN8touchgfx8LCD16bppC2Ev + 0x000000000802afe4 0x50 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802afe4 touchgfx::LCD16bpp::LCD16bpp() + 0x000000000802afe4 touchgfx::LCD16bpp::LCD16bpp() + .text._ZN8touchgfx8LCD16bpp16blitCopyARGB8888EPKmRKNS_4RectES5_h + 0x000000000802b034 0x1cc C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802b034 touchgfx::LCD16bpp::blitCopyARGB8888(unsigned long const*, touchgfx::Rect const&, touchgfx::Rect const&, unsigned char) + .text._ZNK8touchgfx8LCD16bpp21blitCopyARGB8888SolidEPKmRKNS_4RectES5_ + 0x000000000802b200 0xe0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802b200 touchgfx::LCD16bpp::blitCopyARGB8888Solid(unsigned long const*, touchgfx::Rect const&, touchgfx::Rect const&) const + .text._ZN8touchgfx8LCD16bpp14blitCopyRGB888EPKhRKNS_4RectES5_h + 0x000000000802b2e0 0x1f0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802b2e0 touchgfx::LCD16bpp::blitCopyRGB888(unsigned char const*, touchgfx::Rect const&, touchgfx::Rect const&, unsigned char) + .text._ZN8touchgfx8LCD16bpp8blitCopyEPKhNS_6Bitmap12BitmapFormatERKNS_4RectES7_hb + 0x000000000802b4d0 0x46 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802b4d0 touchgfx::LCD16bpp::blitCopy(unsigned char const*, touchgfx::Bitmap::BitmapFormat, touchgfx::Rect const&, touchgfx::Rect const&, unsigned char, bool) + *fill* 0x000000000802b516 0x2 + .text._ZN8touchgfx8LCD16bpp19blitCopyL8_ARGB8888EPKhS2_RKNS_4RectES5_h + 0x000000000802b518 0x1cc C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802b518 touchgfx::LCD16bpp::blitCopyL8_ARGB8888(unsigned char const*, unsigned char const*, touchgfx::Rect const&, touchgfx::Rect const&, unsigned char) + .text._ZN8touchgfx8LCD16bpp17blitCopyL8_RGB565EPKhS2_RKNS_4RectES5_h + 0x000000000802b6e4 0x198 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802b6e4 touchgfx::LCD16bpp::blitCopyL8_RGB565(unsigned char const*, unsigned char const*, touchgfx::Rect const&, touchgfx::Rect const&, unsigned char) + .text._ZN8touchgfx8LCD16bpp17blitCopyL8_RGB888EPKhS2_RKNS_4RectES5_h + 0x000000000802b87c 0x224 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802b87c touchgfx::LCD16bpp::blitCopyL8_RGB888(unsigned char const*, unsigned char const*, touchgfx::Rect const&, touchgfx::Rect const&, unsigned char) + .text._ZN8touchgfx8LCD16bpp10blitCopyL8EPKhS2_RKNS_4RectES5_h + 0x000000000802baa0 0xb6 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802baa0 touchgfx::LCD16bpp::blitCopyL8(unsigned char const*, unsigned char const*, touchgfx::Rect const&, touchgfx::Rect const&, unsigned char) + *fill* 0x000000000802bb56 0x2 + .text._ZN8touchgfx8LCD16bpp21blitCopyAlphaPerPixelEPKtPKhRKNS_4RectES7_h + 0x000000000802bb58 0x24c C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802bb58 touchgfx::LCD16bpp::blitCopyAlphaPerPixel(unsigned short const*, unsigned char const*, touchgfx::Rect const&, touchgfx::Rect const&, unsigned char) + .text._ZN8touchgfx8LCD16bpp17drawPartialBitmapERKNS_6BitmapEssRKNS_4RectEhb + 0x000000000802bda4 0x328 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802bda4 touchgfx::LCD16bpp::drawPartialBitmap(touchgfx::Bitmap const&, short, short, touchgfx::Rect const&, unsigned char, bool) + .text._ZN8touchgfx8LCD16bpp9nextPixelEbNS_12TextRotationE + 0x000000000802c0cc 0x54 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802c0cc touchgfx::LCD16bpp::nextPixel(bool, touchgfx::TextRotation) + .text._ZN8touchgfx8LCD16bpp8nextLineEbNS_12TextRotationE + 0x000000000802c120 0x54 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802c120 touchgfx::LCD16bpp::nextLine(bool, touchgfx::TextRotation) + .text._ZN8touchgfx8LCD16bpp9drawGlyphEPtNS_4RectEssttRKS2_PKNS_9GlyphNodeEPKhhNS_9colortypeEhhNS_12TextRotationE + 0x000000000802c174 0x3f4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802c174 touchgfx::LCD16bpp::drawGlyph(unsigned short*, touchgfx::Rect, short, short, unsigned short, unsigned short, touchgfx::Rect const&, touchgfx::GlyphNode const*, unsigned char const*, unsigned char, touchgfx::colortype, unsigned char, unsigned char, touchgfx::TextRotation) + .text._ZN8touchgfx8LCD16bpp50enableTextureMapperL8_RGB565_BilinearInterpolationEv + 0x000000000802c568 0x74 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802c568 touchgfx::LCD16bpp::enableTextureMapperL8_RGB565_BilinearInterpolation() + .text._ZN8touchgfx8LCD16bpp44enableTextureMapperL8_RGB565_NearestNeighborEv + 0x000000000802c5dc 0x74 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802c5dc touchgfx::LCD16bpp::enableTextureMapperL8_RGB565_NearestNeighbor() + .text._ZN8touchgfx8LCD16bpp28enableTextureMapperL8_RGB565Ev + 0x000000000802c650 0x12 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802c650 touchgfx::LCD16bpp::enableTextureMapperL8_RGB565() + *fill* 0x000000000802c662 0x2 + .text._ZN8touchgfx8LCD16bpp50enableTextureMapperL8_RGB888_BilinearInterpolationEv + 0x000000000802c664 0x74 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802c664 touchgfx::LCD16bpp::enableTextureMapperL8_RGB888_BilinearInterpolation() + .text._ZN8touchgfx8LCD16bpp44enableTextureMapperL8_RGB888_NearestNeighborEv + 0x000000000802c6d8 0x74 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802c6d8 touchgfx::LCD16bpp::enableTextureMapperL8_RGB888_NearestNeighbor() + .text._ZN8touchgfx8LCD16bpp28enableTextureMapperL8_RGB888Ev + 0x000000000802c74c 0x12 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802c74c touchgfx::LCD16bpp::enableTextureMapperL8_RGB888() + *fill* 0x000000000802c75e 0x2 + .text._ZN8touchgfx8LCD16bpp52enableTextureMapperL8_ARGB8888_BilinearInterpolationEv + 0x000000000802c760 0x74 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802c760 touchgfx::LCD16bpp::enableTextureMapperL8_ARGB8888_BilinearInterpolation() + .text._ZN8touchgfx8LCD16bpp46enableTextureMapperL8_ARGB8888_NearestNeighborEv + 0x000000000802c7d4 0x74 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802c7d4 touchgfx::LCD16bpp::enableTextureMapperL8_ARGB8888_NearestNeighbor() + .text._ZN8touchgfx8LCD16bpp30enableTextureMapperL8_ARGB8888Ev + 0x000000000802c848 0x12 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802c848 touchgfx::LCD16bpp::enableTextureMapperL8_ARGB8888() + *fill* 0x000000000802c85a 0x2 + .text._ZN8touchgfx8LCD16bpp54enableTextureMapperRGB565_Opaque_BilinearInterpolationEv + 0x000000000802c85c 0x74 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802c85c touchgfx::LCD16bpp::enableTextureMapperRGB565_Opaque_BilinearInterpolation() + .text._ZN8touchgfx8LCD16bpp57enableTextureMapperRGB565_NonOpaque_BilinearInterpolationEv + 0x000000000802c8d0 0x74 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802c8d0 touchgfx::LCD16bpp::enableTextureMapperRGB565_NonOpaque_BilinearInterpolation() + .text._ZN8touchgfx8LCD16bpp48enableTextureMapperRGB565_Opaque_NearestNeighborEv + 0x000000000802c944 0x74 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802c944 touchgfx::LCD16bpp::enableTextureMapperRGB565_Opaque_NearestNeighbor() + .text._ZN8touchgfx8LCD16bpp51enableTextureMapperRGB565_NonOpaque_NearestNeighborEv + 0x000000000802c9b8 0x74 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802c9b8 touchgfx::LCD16bpp::enableTextureMapperRGB565_NonOpaque_NearestNeighbor() + .text._ZN8touchgfx8LCD16bpp25enableTextureMapperRGB565Ev + 0x000000000802ca2c 0x1e C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802ca2c touchgfx::LCD16bpp::enableTextureMapperRGB565() + *fill* 0x000000000802ca4a 0x2 + .text._ZN8touchgfx8LCD16bpp49enableTextureMapperARGB8888_BilinearInterpolationEv + 0x000000000802ca4c 0x74 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802ca4c touchgfx::LCD16bpp::enableTextureMapperARGB8888_BilinearInterpolation() + .text._ZN8touchgfx8LCD16bpp43enableTextureMapperARGB8888_NearestNeighborEv + 0x000000000802cac0 0x74 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802cac0 touchgfx::LCD16bpp::enableTextureMapperARGB8888_NearestNeighbor() + .text._ZN8touchgfx8LCD16bpp27enableTextureMapperARGB8888Ev + 0x000000000802cb34 0x12 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802cb34 touchgfx::LCD16bpp::enableTextureMapperARGB8888() + *fill* 0x000000000802cb46 0x2 + .text._ZN8touchgfx8LCD16bpp43enableTextureMapperA4_BilinearInterpolationEv + 0x000000000802cb48 0x74 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802cb48 touchgfx::LCD16bpp::enableTextureMapperA4_BilinearInterpolation() + .text._ZN8touchgfx8LCD16bpp37enableTextureMapperA4_NearestNeighborEv + 0x000000000802cbbc 0x74 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802cbbc touchgfx::LCD16bpp::enableTextureMapperA4_NearestNeighbor() + .text._ZN8touchgfx8LCD16bpp21enableTextureMapperA4Ev + 0x000000000802cc30 0x12 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802cc30 touchgfx::LCD16bpp::enableTextureMapperA4() + .text._ZN8touchgfx8LCD16bpp22enableTextureMapperAllEv + 0x000000000802cc42 0x2a C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802cc42 touchgfx::LCD16bpp::enableTextureMapperAll() + .text._ZN8touchgfx8LCD16bpp23enableDecompressorL8_L4Ev + 0x000000000802cc6c 0x40 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802cc6c touchgfx::LCD16bpp::enableDecompressorL8_L4() + .text._ZN8touchgfx8LCD16bpp24enableDecompressorL8_RLEEv + 0x000000000802ccac 0x40 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802ccac touchgfx::LCD16bpp::enableDecompressorL8_RLE() + .text._ZN8touchgfx8LCD16bpp25enableDecompressorL8_LZW9Ev + 0x000000000802ccec 0x4c C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802ccec touchgfx::LCD16bpp::enableDecompressorL8_LZW9() + .text._ZN8touchgfx8LCD16bpp24enableDecompressorL8_AllEv + 0x000000000802cd38 0x18 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802cd38 touchgfx::LCD16bpp::enableDecompressorL8_All() + .text._ZNK8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhPKtssiihhh + 0x000000000802cd50 0x1a4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802cd50 touchgfx::LCD16bpp::TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA::writePixelOnEdge(unsigned short*, unsigned char const*, unsigned short const*, short, short, int, int, unsigned char, unsigned char, unsigned char) const + .text._ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff + 0x000000000802cef4 0x49c C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802cef4 touchgfx::LCD16bpp::TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA::drawTextureMapScanLineSubdivisions(int, int, int, int, float, float, float, long, long, long, long, float, float, float, float, float, touchgfx::DrawingSurface const&, int, int, touchgfx::TextureSurface const&, unsigned char, float, float, float) + .text._ZNK8touchgfx8LCD16bpp57TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKtssiihh + 0x000000000802d390 0x10a C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802d390 touchgfx::LCD16bpp::TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA::writePixelOnEdge(unsigned short*, unsigned char const*, unsigned short const*, short, short, int, int, unsigned char, unsigned char) const + .text._ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff + 0x000000000802d49a 0x3ac C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802d49a touchgfx::LCD16bpp::TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA::drawTextureMapScanLineSubdivisions(int, int, int, int, float, float, float, long, long, long, long, float, float, float, float, float, touchgfx::DrawingSurface const&, int, int, touchgfx::TextureSurface const&, unsigned char, float, float, float) + .text._ZNK8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhS4_ssiihhh + 0x000000000802d846 0x1d8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802d846 touchgfx::LCD16bpp::TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA::writePixelOnEdge(unsigned short*, unsigned char const*, unsigned char const*, short, short, int, int, unsigned char, unsigned char, unsigned char) const + .text._ZN8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff + 0x000000000802da1e 0x4fa C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802da1e touchgfx::LCD16bpp::TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA::drawTextureMapScanLineSubdivisions(int, int, int, int, float, float, float, long, long, long, long, float, float, float, float, float, touchgfx::DrawingSurface const&, int, int, touchgfx::TextureSurface const&, unsigned char, float, float, float) + .text._ZNK8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhS4_ssiihh + 0x000000000802df18 0x154 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802df18 touchgfx::LCD16bpp::TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA::writePixelOnEdge(unsigned short*, unsigned char const*, unsigned char const*, short, short, int, int, unsigned char, unsigned char) const + .text._ZN8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff + 0x000000000802e06c 0x3f0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802e06c touchgfx::LCD16bpp::TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA::drawTextureMapScanLineSubdivisions(int, int, int, int, float, float, float, long, long, long, long, float, float, float, float, float, touchgfx::DrawingSurface const&, int, int, touchgfx::TextureSurface const&, unsigned char, float, float, float) + .text._ZNK8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKhPKmssiihhh + 0x000000000802e45c 0x294 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802e45c touchgfx::LCD16bpp::TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA::writePixelOnEdge(unsigned short*, unsigned char const*, unsigned long const*, short, short, int, int, unsigned char, unsigned char, unsigned char) const + .text._ZN8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff + 0x000000000802e6f0 0x75e C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802e6f0 touchgfx::LCD16bpp::TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA::drawTextureMapScanLineSubdivisions(int, int, int, int, float, float, float, long, long, long, long, float, float, float, float, float, touchgfx::DrawingSurface const&, int, int, touchgfx::TextureSurface const&, unsigned char, float, float, float) + .text._ZNK8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKmssiihh + 0x000000000802ee4e 0x27e C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802ee4e touchgfx::LCD16bpp::TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA::writePixelOnEdge(unsigned short*, unsigned char const*, unsigned long const*, short, short, int, int, unsigned char, unsigned char) const + .text._ZN8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff + 0x000000000802f0cc 0x730 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802f0cc touchgfx::LCD16bpp::TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA::drawTextureMapScanLineSubdivisions(int, int, int, int, float, float, float, long, long, long, long, float, float, float, float, float, touchgfx::DrawingSurface const&, int, int, touchgfx::TextureSurface const&, unsigned char, float, float, float) + .text._ZNK8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtPKhssiihhh + 0x000000000802f7fc 0x30c C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802f7fc touchgfx::LCD16bpp::TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA::writePixelOnEdge(unsigned short*, unsigned short const*, unsigned char const*, short, short, int, int, unsigned char, unsigned char, unsigned char) const + .text._ZN8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff + 0x000000000802fb08 0x7e8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000802fb08 touchgfx::LCD16bpp::TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA::drawTextureMapScanLineSubdivisions(int, int, int, int, float, float, float, long, long, long, long, float, float, float, float, float, touchgfx::DrawingSurface const&, int, int, touchgfx::TextureSurface const&, unsigned char, float, float, float) + .text._ZNK8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKhPKtssiihh + 0x00000000080302f0 0x2ee C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x00000000080302f0 touchgfx::LCD16bpp::TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA::writePixelOnEdge(unsigned short*, unsigned char const*, unsigned short const*, short, short, int, int, unsigned char, unsigned char) const + *fill* 0x00000000080305de 0x2 + .text._ZN8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff + 0x00000000080305e0 0x7b4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x00000000080305e0 touchgfx::LCD16bpp::TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA::drawTextureMapScanLineSubdivisions(int, int, int, int, float, float, float, long, long, long, long, float, float, float, float, float, touchgfx::DrawingSurface const&, int, int, touchgfx::TextureSurface const&, unsigned char, float, float, float) + .text._ZNK8touchgfx8LCD16bpp52TextureMapper_RGB565_Opaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtssiihhh + 0x0000000008030d94 0x18e C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x0000000008030d94 touchgfx::LCD16bpp::TextureMapper_RGB565_Opaque_BilinearInterpolation_GA::writePixelOnEdge(unsigned short*, unsigned short const*, short, short, int, int, unsigned char, unsigned char, unsigned char) const + .text._ZN8touchgfx8LCD16bpp52TextureMapper_RGB565_Opaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff + 0x0000000008030f22 0x458 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x0000000008030f22 touchgfx::LCD16bpp::TextureMapper_RGB565_Opaque_BilinearInterpolation_GA::drawTextureMapScanLineSubdivisions(int, int, int, int, float, float, float, long, long, long, long, float, float, float, float, float, touchgfx::DrawingSurface const&, int, int, touchgfx::TextureSurface const&, unsigned char, float, float, float) + .text._ZNK8touchgfx8LCD16bpp54TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKtssiihh + 0x000000000803137a 0xf8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000803137a touchgfx::LCD16bpp::TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA::writePixelOnEdge(unsigned short*, unsigned short const*, short, short, int, int, unsigned char, unsigned char) const + .text._ZN8touchgfx8LCD16bpp54TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff + 0x0000000008031472 0x342 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x0000000008031472 touchgfx::LCD16bpp::TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA::drawTextureMapScanLineSubdivisions(int, int, int, int, float, float, float, long, long, long, long, float, float, float, float, float, touchgfx::DrawingSurface const&, int, int, touchgfx::TextureSurface const&, unsigned char, float, float, float) + .text._ZNK8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA16writePixelOnEdgeEPtPKmssiihhh + 0x00000000080317b4 0x282 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x00000000080317b4 touchgfx::LCD16bpp::TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA::writePixelOnEdge(unsigned short*, unsigned long const*, short, short, int, int, unsigned char, unsigned char, unsigned char) const + .text._ZN8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff + 0x0000000008031a36 0x736 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x0000000008031a36 touchgfx::LCD16bpp::TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA::drawTextureMapScanLineSubdivisions(int, int, int, int, float, float, float, long, long, long, long, float, float, float, float, float, touchgfx::DrawingSurface const&, int, int, touchgfx::TextureSurface const&, unsigned char, float, float, float) + .text._ZNK8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKmssiihh + 0x000000000803216c 0x264 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000803216c touchgfx::LCD16bpp::TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA::writePixelOnEdge(unsigned short*, unsigned long const*, short, short, int, int, unsigned char, unsigned char) const + .text._ZN8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff + 0x00000000080323d0 0x754 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x00000000080323d0 touchgfx::LCD16bpp::TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA::drawTextureMapScanLineSubdivisions(int, int, int, int, float, float, float, long, long, long, long, float, float, float, float, float, touchgfx::DrawingSurface const&, int, int, touchgfx::TextureSurface const&, unsigned char, float, float, float) + .text._ZNK8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA16writePixelOnEdgeEPtPKtsssiihhh + 0x0000000008032b24 0x1d0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x0000000008032b24 touchgfx::LCD16bpp::TextureMapper_A4_BilinearInterpolation_GA::writePixelOnEdge(unsigned short*, unsigned short const*, short, short, short, int, int, unsigned char, unsigned char, unsigned char) const + .text._ZN8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff + 0x0000000008032cf4 0x560 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x0000000008032cf4 touchgfx::LCD16bpp::TextureMapper_A4_BilinearInterpolation_GA::drawTextureMapScanLineSubdivisions(int, int, int, int, float, float, float, long, long, long, long, float, float, float, float, float, touchgfx::DrawingSurface const&, int, int, touchgfx::TextureSurface const&, unsigned char, float, float, float) + .text._ZNK8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA16writePixelOnEdgeEPtPKtsssiihh + 0x0000000008033254 0x1ac C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x0000000008033254 touchgfx::LCD16bpp::TextureMapper_A4_BilinearInterpolation_NoGA::writePixelOnEdge(unsigned short*, unsigned short const*, short, short, short, int, int, unsigned char, unsigned char) const + .text._ZN8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGA34drawTextureMapScanLineSubdivisionsEiiiifffllllfffffRKNS_14DrawingSurfaceEiiRKNS_14TextureSurfaceEhfff + 0x0000000008033400 0x51c C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x0000000008033400 touchgfx::LCD16bpp::TextureMapper_A4_BilinearInterpolation_NoGA::drawTextureMapScanLineSubdivisions(int, int, int, int, float, float, float, long, long, long, long, float, float, float, float, float, touchgfx::DrawingSurface const&, int, int, touchgfx::TextureSurface const&, unsigned char, float, float, float) + .text._ZNK8touchgfx8LCD16bpp17DecompressorL8_L416blendPixelRGB565Ettii + 0x000000000803391c 0x72 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000803391c touchgfx::LCD16bpp::DecompressorL8_L4::blendPixelRGB565(unsigned short, unsigned short, int, int) const + *fill* 0x000000000803398e 0x2 + .text._ZN8touchgfx8LCD16bpp17DecompressorL8_L414blitCopyRGB565EPKhS3_RKNS_4RectES6_h + 0x0000000008033990 0x214 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x0000000008033990 touchgfx::LCD16bpp::DecompressorL8_L4::blitCopyRGB565(unsigned char const*, unsigned char const*, touchgfx::Rect const&, touchgfx::Rect const&, unsigned char) + .text._ZNK8touchgfx8LCD16bpp17DecompressorL8_L418blendPixelARGB8888Emtih + 0x0000000008033ba4 0xac C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x0000000008033ba4 touchgfx::LCD16bpp::DecompressorL8_L4::blendPixelARGB8888(unsigned long, unsigned short, int, unsigned char) const + .text._ZN8touchgfx8LCD16bpp17DecompressorL8_L416blitCopyARGB8888EPKhS3_RKNS_4RectES6_h + 0x0000000008033c50 0x178 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x0000000008033c50 touchgfx::LCD16bpp::DecompressorL8_L4::blitCopyARGB8888(unsigned char const*, unsigned char const*, touchgfx::Rect const&, touchgfx::Rect const&, unsigned char) + .text._ZNK8touchgfx8LCD16bpp17DecompressorL8_L416blendPixelRGB888EPKhthh + 0x0000000008033dc8 0x6c C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x0000000008033dc8 touchgfx::LCD16bpp::DecompressorL8_L4::blendPixelRGB888(unsigned char const*, unsigned short, unsigned char, unsigned char) const + .text._ZN8touchgfx8LCD16bpp17DecompressorL8_L414blitCopyRGB888EPKhS3_RKNS_4RectES6_h + 0x0000000008033e34 0x2b0 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x0000000008033e34 touchgfx::LCD16bpp::DecompressorL8_L4::blitCopyRGB888(unsigned char const*, unsigned char const*, touchgfx::Rect const&, touchgfx::Rect const&, unsigned char) + .text.CRC_Lock + 0x00000000080340e4 0xa4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(stm32_crc_lock.o) + 0x00000000080340e4 CRC_Lock + .text._ZN8touchgfx8Gestures21registerEventListenerERNS_15UIEventListenerE + 0x0000000008034188 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Gestures.o) + 0x0000000008034188 touchgfx::Gestures::registerEventListener(touchgfx::UIEventListener&) + .text._ZN8touchgfx8Gestures4tickEv + 0x000000000803418c 0x1a C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Gestures.o) + 0x000000000803418c touchgfx::Gestures::tick() + *fill* 0x00000000080341a6 0x2 + .text._ZN8touchgfx8Gestures17registerDragEventEtttt + 0x00000000080341a8 0x80 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Gestures.o) + 0x00000000080341a8 touchgfx::Gestures::registerDragEvent(unsigned short, unsigned short, unsigned short, unsigned short) + .text._ZN8touchgfx8Gestures18registerClickEventENS_10ClickEvent14ClickEventTypeEtt + 0x0000000008034228 0xc4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Gestures.o) + 0x0000000008034228 touchgfx::Gestures::registerClickEvent(touchgfx::ClickEvent::ClickEventType, unsigned short, unsigned short) + .text.__aeabi_atexit + 0x00000000080342ec 0xa C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a(atexit_arm.o) + 0x00000000080342ec __aeabi_atexit + .text._ZdlPvj 0x00000000080342f6 0x4 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a(del_ops.o) + 0x00000000080342f6 operator delete(void*, unsigned int) + .text.__cxa_guard_acquire + 0x00000000080342fa 0x18 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a(guard.o) + 0x00000000080342fa __cxa_guard_acquire + .text.__cxa_guard_release + 0x0000000008034312 0x6 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a(guard.o) + 0x0000000008034312 __cxa_guard_release + .text.__cxa_pure_virtual + 0x0000000008034318 0x6 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a(pure.o) + 0x0000000008034318 __cxa_pure_virtual + .text._ZdlPv 0x000000000803431e 0x4 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a(del_op.o) + 0x000000000803431e operator delete(void*) + .text._ZN10__cxxabiv111__terminateEPFvvE + 0x0000000008034322 0x8 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a(eh_terminate.o) + 0x0000000008034322 __cxxabiv1::__terminate(void (*)()) + *fill* 0x000000000803432a 0x2 + .text._ZSt13get_terminatev + 0x000000000803432c 0x10 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a(eh_terminate.o) + 0x000000000803432c std::get_terminate() + .text._ZSt9terminatev + 0x000000000803433c 0xa C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a(eh_terminate.o) + 0x000000000803433c std::terminate() + .text.abort 0x0000000008034346 0xe C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-abort.o) + 0x0000000008034346 abort + .text.__assert_func + 0x0000000008034354 0x3c C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-assert.o) + 0x0000000008034354 __assert_func + .text.atexit 0x0000000008034390 0xc C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-atexit.o) + 0x0000000008034390 atexit + .text.malloc 0x000000000803439c 0x10 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-malloc.o) + 0x000000000803439c malloc + .text.free 0x00000000080343ac 0x10 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-malloc.o) + 0x00000000080343ac free + .text.sbrk_aligned + 0x00000000080343bc 0x40 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-mallocr.o) + .text._malloc_r + 0x00000000080343fc 0x100 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-mallocr.o) + 0x00000000080343fc _malloc_r + .text.__malloc_lock + 0x00000000080344fc 0xc C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-mlock.o) + 0x00000000080344fc __malloc_lock + .text.__malloc_unlock + 0x0000000008034508 0xc C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-mlock.o) + 0x0000000008034508 __malloc_unlock + .text.rand 0x0000000008034514 0x7c C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-rand.o) + 0x0000000008034514 rand + .text.__cxa_atexit + 0x0000000008034590 0x1c C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-cxa_atexit.o) + 0x0000000008034590 __cxa_atexit + .text.std 0x00000000080345ac 0x6c C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-findfp.o) + .text.stdio_exit_handler + 0x0000000008034618 0x18 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-findfp.o) + .text.cleanup_stdio + 0x0000000008034630 0x40 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-findfp.o) + .text.global_stdio_init.part.0 + 0x0000000008034670 0x3c C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-findfp.o) + .text.__sfp_lock_acquire + 0x00000000080346ac 0xc C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-findfp.o) + 0x00000000080346ac __sfp_lock_acquire + .text.__sfp_lock_release + 0x00000000080346b8 0xc C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-findfp.o) + 0x00000000080346b8 __sfp_lock_release + .text.__sinit 0x00000000080346c4 0x30 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-findfp.o) + 0x00000000080346c4 __sinit + .text.fprintf 0x00000000080346f4 0x24 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fprintf.o) + 0x00000000080346f4 fiprintf + 0x00000000080346f4 fprintf + .text._fwalk_sglue + 0x0000000008034718 0x3c C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fwalk.o) + 0x0000000008034718 _fwalk_sglue + .text.printf 0x0000000008034754 0x24 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-printf.o) + 0x0000000008034754 iprintf + 0x0000000008034754 printf + .text.sprintf 0x0000000008034778 0x40 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-sprintf.o) + 0x0000000008034778 siprintf + 0x0000000008034778 sprintf + .text.__sread 0x00000000080347b8 0x22 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-stdio.o) + 0x00000000080347b8 __sread + .text.__swrite + 0x00000000080347da 0x38 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-stdio.o) + 0x00000000080347da __swrite + .text.__sseek 0x0000000008034812 0x24 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-stdio.o) + 0x0000000008034812 __sseek + .text.__sclose + 0x0000000008034836 0x8 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-stdio.o) + 0x0000000008034836 __sclose + .text.__swbuf_r + 0x000000000803483e 0x7a C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-wbuf.o) + 0x000000000803483e __swbuf_r + .text.__swsetup_r + 0x00000000080348b8 0xb0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-wsetup.o) + 0x00000000080348b8 __swsetup_r + .text.memcmp 0x0000000008034968 0x20 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-memcmp.o) + 0x0000000008034968 memcmp + .text.memmove 0x0000000008034988 0x34 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-memmove.o) + 0x0000000008034988 memmove + .text.memset 0x00000000080349bc 0x10 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-memset.o) + 0x00000000080349bc memset + .text.strncmp 0x00000000080349cc 0x24 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-strncmp.o) + 0x00000000080349cc strncmp + .text._raise_r + 0x00000000080349f0 0x50 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-signal.o) + 0x00000000080349f0 _raise_r + .text.raise 0x0000000008034a40 0x10 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-signal.o) + 0x0000000008034a40 raise + .text._close_r + 0x0000000008034a50 0x20 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-closer.o) + 0x0000000008034a50 _close_r + .text._lseek_r + 0x0000000008034a70 0x24 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-lseekr.o) + 0x0000000008034a70 _lseek_r + .text._read_r 0x0000000008034a94 0x24 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-readr.o) + 0x0000000008034a94 _read_r + .text._kill_r 0x0000000008034ab8 0x24 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-signalr.o) + 0x0000000008034ab8 _kill_r + .text._getpid_r + 0x0000000008034adc 0x4 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-signalr.o) + 0x0000000008034adc _getpid_r + .text._sbrk_r 0x0000000008034ae0 0x20 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-sbrkr.o) + 0x0000000008034ae0 _sbrk_r + .text._write_r + 0x0000000008034b00 0x24 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-writer.o) + 0x0000000008034b00 _write_r + .text.__libc_init_array + 0x0000000008034b24 0x48 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-init.o) + 0x0000000008034b24 __libc_init_array + .text.__retarget_lock_init_recursive + 0x0000000008034b6c 0x2 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-lock.o) + 0x0000000008034b6c __retarget_lock_init_recursive + .text.__retarget_lock_acquire_recursive + 0x0000000008034b6e 0x2 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-lock.o) + 0x0000000008034b6e __retarget_lock_acquire_recursive + .text.__retarget_lock_release_recursive + 0x0000000008034b70 0x2 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-lock.o) + 0x0000000008034b70 __retarget_lock_release_recursive + .text.memcpy 0x0000000008034b72 0x1c C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-memcpy-stub.o) + 0x0000000008034b72 memcpy + *fill* 0x0000000008034b8e 0x2 + .text.__register_exitproc + 0x0000000008034b90 0xbc C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-__atexit.o) + 0x0000000008034b90 __register_exitproc + .text._free_r 0x0000000008034c4c 0x98 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-freer.o) + 0x0000000008034c4c _free_r + .text.__ssputs_r + 0x0000000008034ce4 0xb4 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-nano-svfprintf.o) + 0x0000000008034ce4 __ssputs_r + .text._svfprintf_r + 0x0000000008034d98 0x1fc C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-nano-svfprintf.o) + 0x0000000008034d98 _svfiprintf_r + 0x0000000008034d98 _svfprintf_r + .text.__sfputc_r + 0x0000000008034f94 0x2e C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-nano-vfprintf.o) + .text.__sfputs_r + 0x0000000008034fc2 0x24 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-nano-vfprintf.o) + 0x0000000008034fc2 __sfputs_r + *fill* 0x0000000008034fe6 0x2 + .text._vfprintf_r + 0x0000000008034fe8 0x234 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-nano-vfprintf.o) + 0x0000000008034fe8 _vfprintf_r + 0x0000000008034fe8 _vfiprintf_r + .text._printf_common + 0x000000000803521c 0xda C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-nano-vfprintf_i.o) + 0x000000000803521c _printf_common + *fill* 0x00000000080352f6 0x2 + .text._printf_i + 0x00000000080352f8 0x244 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-nano-vfprintf_i.o) + 0x00000000080352f8 _printf_i + .text.__sflush_r + 0x000000000803553c 0x10c C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fflush.o) + 0x000000000803553c __sflush_r + .text._fflush_r + 0x0000000008035648 0x50 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fflush.o) + 0x0000000008035648 _fflush_r + .text.__swhatbuf_r + 0x0000000008035698 0x4c C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-makebuf.o) + 0x0000000008035698 __swhatbuf_r + .text.__smakebuf_r + 0x00000000080356e4 0x78 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-makebuf.o) + 0x00000000080356e4 __smakebuf_r + .text._fstat_r + 0x000000000803575c 0x24 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fstatr.o) + 0x000000000803575c _fstat_r + .text._isatty_r + 0x0000000008035780 0x20 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-isattyr.o) + 0x0000000008035780 _isatty_r + .text._realloc_r + 0x00000000080357a0 0x5e C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-reallocr.o) + 0x00000000080357a0 _realloc_r + .text._malloc_usable_size_r + 0x00000000080357fe 0x10 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-msizer.o) + 0x00000000080357fe _malloc_usable_size_r + *(.glue_7) + .glue_7 0x000000000803580e 0x0 linker stubs + *(.glue_7t) + .glue_7t 0x000000000803580e 0x0 linker stubs + *(.eh_frame) + *fill* 0x000000000803580e 0x2 + .eh_frame 0x0000000008035810 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard/crtbegin.o + *(.init) + .init 0x0000000008035810 0x4 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard/crti.o + 0x0000000008035810 _init + .init 0x0000000008035814 0x8 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard/crtn.o + *(.fini) + .fini 0x000000000803581c 0x4 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard/crti.o + 0x000000000803581c _fini + .fini 0x0000000008035820 0x8 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard/crtn.o + 0x0000000008035828 . = ALIGN (0x4) + 0x0000000008035828 _etext = . + +.vfp11_veneer 0x0000000008035828 0x0 + .vfp11_veneer 0x0000000008035828 0x0 linker stubs + +.v4_bx 0x0000000008035828 0x0 + .v4_bx 0x0000000008035828 0x0 linker stubs + +.iplt 0x0000000008035828 0x0 + .iplt 0x0000000008035828 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard/crtbegin.o + +.rodata 0x0000000008035828 0x7334 + 0x0000000008035828 . = ALIGN (0x4) + *(.rodata) + .rodata 0x0000000008035828 0x40 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Container.o) + *(.rodata*) + .rodata.str1.1 + 0x0000000008035868 0x2c ./Application/User/Core/main.o + .rodata.MainTask_attributes + 0x0000000008035894 0x24 ./Application/User/Core/main.o + 0x0000000008035894 MainTask_attributes + .rodata.TouchGFXTask_attributes + 0x00000000080358b8 0x24 ./Application/User/Core/main.o + 0x00000000080358b8 TouchGFXTask_attributes + .rodata.defaultTask_attributes + 0x00000000080358dc 0x24 ./Application/User/Core/main.o + 0x00000000080358dc defaultTask_attributes + .rodata.videoTask_attributes + 0x0000000008035900 0x24 ./Application/User/Core/main.o + 0x0000000008035900 videoTask_attributes + .rodata.MX_LWIP_Init.str1.1 + 0x0000000008035924 0x8 ./Application/User/LWIP/App/lwip.o + .rodata.ethernetif_init.str1.1 + 0x000000000803592c 0x9b ./Application/User/LWIP/Target/ethernetif.o + 0xa9 (size before relaxing) + *fill* 0x00000000080359c7 0x1 + .rodata.CSWTCH.23 + 0x00000000080359c8 0x6 ./Application/User/LWIP/Target/ethernetif.o + .rodata.CSWTCH.24 + 0x00000000080359ce 0x6 ./Application/User/LWIP/Target/ethernetif.o + .rodata.CSWTCH.38 + 0x00000000080359d4 0x8 ./Application/User/LWIP/Target/ethernetif.o + .rodata.CSWTCH.39 + 0x00000000080359dc 0x8 ./Application/User/LWIP/Target/ethernetif.o + .rodata.memp_RX_POOL + 0x00000000080359e4 0xc ./Application/User/LWIP/Target/ethernetif.o + 0x00000000080359e4 memp_RX_POOL + .rodata._ZTVN8touchgfx25CortexMMCUInstrumentationE + 0x00000000080359f0 0x28 ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + 0x00000000080359f0 vtable for touchgfx::CortexMMCUInstrumentation + .rodata._ZTV20STM32TouchController + 0x0000000008035a18 0x18 ./Application/User/TouchGFX/target/STM32TouchController.o + 0x0000000008035a18 vtable for STM32TouchController + .rodata._ZN8touchgfx3HAL28setFrameBufferStartAddressesEPvS1_S1_.str1.1 + 0x0000000008035a30 0xcb ./Application/User/TouchGFX/target/TouchGFXHAL.o + .rodata._ZN8touchgfx3HAL18setFrameBufferSizeEtt.str1.1 + 0x0000000008035afb 0xa6 ./Application/User/TouchGFX/target/TouchGFXHAL.o + *fill* 0x0000000008035ba1 0x3 + .rodata._ZTV11TouchGFXHAL + 0x0000000008035ba4 0xd8 ./Application/User/TouchGFX/target/TouchGFXHAL.o + 0x0000000008035ba4 vtable for TouchGFXHAL + .rodata._ZN8touchgfx10OSWrappers10initializeEv.str1.1 + 0x0000000008035c7c 0x137 ./Application/User/TouchGFX/target/generated/OSWrappers.o + .rodata._ZN8STM32DMA22getChromARTInputFormatEN8touchgfx6Bitmap12BitmapFormatE.str1.1 + 0x0000000008035db3 0xe0 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .rodata._ZN8STM32DMA23getChromARTOutputFormatEN8touchgfx6Bitmap12BitmapFormatE.str1.1 + 0x0000000008035e93 0x4b ./Application/User/TouchGFX/target/generated/STM32DMA.o + .rodata._ZN8STM32DMA13setupDataCopyERKN8touchgfx6BlitOpE.str1.1 + 0x0000000008035ede 0x58 ./Application/User/TouchGFX/target/generated/STM32DMA.o + *fill* 0x0000000008035f36 0x2 + .rodata._ZTV8STM32DMA + 0x0000000008035f38 0x50 ./Application/User/TouchGFX/target/generated/STM32DMA.o + 0x0000000008035f38 vtable for STM32DMA + .rodata._ZN20SoftwareMJPEGDecoder15decodeThumbnailEmPhtt.str1.1 + 0x0000000008035f88 0xe2 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + 0xe4 (size before relaxing) + .rodata._ZN20SoftwareMJPEGDecoder8readDataEmm.str1.1 + 0x000000000803606a 0x55 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .rodata._ZN20SoftwareMJPEGDecoder13gotoNextFrameEv.str1.1 + 0x00000000080360bf 0x7c ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .rodata._ZN20SoftwareMJPEGDecoder11decodeFrameERKN8touchgfx4RectEPhm.str1.1 + 0x000000000803613b 0xb0 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .rodata._ZN20SoftwareMJPEGDecoder15readVideoHeaderEv.str1.1 + 0x00000000080361eb 0xa3 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .rodata._ZN20SoftwareMJPEGDecoder15decodeNextFrameEPhttm.str1.1 + 0x000000000803628e 0x5b ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + *fill* 0x00000000080362e9 0x3 + .rodata._ZTV20SoftwareMJPEGDecoder + 0x00000000080362ec 0x40 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + 0x00000000080362ec vtable for SoftwareMJPEGDecoder + .rodata._ZTVN8touchgfx9PartitionINS_4meta8TypeListI19MainScreenPresenterNS2_INS1_3NilES4_EEEELt1EEE + 0x000000000803632c 0x34 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + 0x000000000803632c vtable for touchgfx::Partition >, (unsigned short)1> + .rodata._ZTVN8touchgfx9PartitionINS_4meta8TypeListI14MainScreenViewNS2_INS1_3NilES4_EEEELt1EEE + 0x0000000008036360 0x34 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + 0x0000000008036360 vtable for touchgfx::Partition >, (unsigned short)1> + .rodata._ZTVN8touchgfx9PartitionINS_4meta8TypeListINS_12NoTransitionENS2_INS1_3NilES4_EEEELt1EEE + 0x0000000008036394 0x34 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + 0x0000000008036394 vtable for touchgfx::Partition >, (unsigned short)1> + .rodata._ZTV12FrontendHeap + 0x00000000080363c8 0x14 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + 0x00000000080363c8 vtable for FrontendHeap + .rodata._ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE12getIsPlayingEm.str1.1 + 0x00000000080363dc 0x1e3 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .rodata._ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE19getVideoInformationEmPNS0_16VideoInformationE.str1.1 + 0x00000000080365bf 0x1b1 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .rodata._ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE21getCurrentFrameNumberEm.str1.1 + 0x0000000008036770 0x1b8 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .rodata._ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE12setFrameRateEmmm.str1.1 + 0x0000000008036928 0x1bf ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .rodata._ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE10setCommandEmNS0_15VideoController7CommandEm.str1.1 + 0x0000000008036ae7 0x1d7 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .rodata._ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE11updateFrameEmRNS0_11VideoWidgetE.str1.1 + 0x0000000008036cbe 0x1a4 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .rodata._ZN29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE19registerVideoWidgetERNS0_11VideoWidgetE.str1.1 + 0x0000000008036e62 0x3a0 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + *fill* 0x0000000008037202 0x2 + .rodata._ZTV29DoubleBufferedVideoControllerILm1ELm480ELm272ELm960ELN8touchgfx6Bitmap12BitmapFormatE0EE + 0x0000000008037204 0x3c ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + 0x0000000008037204 vtable for DoubleBufferedVideoController<1ul, 480ul, 272ul, 960ul, (touchgfx::Bitmap::BitmapFormat)0> + .rodata._ZTV23ApplicationFontProvider + 0x0000000008037240 0x14 ./Application/User/generated/ApplicationFontProvider.o + 0x0000000008037240 vtable for ApplicationFontProvider + .rodata._ZL15bitmap_database + 0x0000000008037254 0x3c ./Application/User/generated/BitmapDatabase.o + .rodata._ZTVN8touchgfx9TypedTextE + 0x0000000008037290 0x10 ./Application/User/generated/FontCache.o + 0x0000000008037290 vtable for touchgfx::TypedText + .rodata._ZN23FrontendApplicationBase36gotoMainScreenScreenNoTransitionImplEv.str1.1 + 0x00000000080372a0 0x325 ./Application/User/generated/FrontendApplicationBase.o + *fill* 0x00000000080375c5 0x3 + .rodata._ZTVN8touchgfx8CallbackI23FrontendApplicationBasevvvEE + 0x00000000080375c8 0x18 ./Application/User/generated/FrontendApplicationBase.o + 0x00000000080375c8 vtable for touchgfx::Callback + .rodata._ZTV23FrontendApplicationBase + 0x00000000080375e0 0x54 ./Application/User/generated/FrontendApplicationBase.o + 0x00000000080375e0 vtable for FrontendApplicationBase + .rodata._ZTVN8touchgfx12NoTransitionE + 0x0000000008037634 0x24 ./Application/User/generated/FrontendApplicationBase.o + 0x0000000008037634 vtable for touchgfx::NoTransition + .rodata._ZTVN8touchgfx13GeneratedFontE + 0x0000000008037658 0x60 ./Application/User/generated/GeneratedFont.o + 0x0000000008037658 vtable for touchgfx::GeneratedFont + .rodata._ZTVN8touchgfx8CallbackI18MainScreenViewBasehvvEE + 0x00000000080376b8 0x18 ./Application/User/generated/MainScreenViewBase.o + 0x00000000080376b8 vtable for touchgfx::Callback + .rodata._ZTV18MainScreenViewBase + 0x00000000080376d0 0x54 ./Application/User/generated/MainScreenViewBase.o + 0x00000000080376d0 vtable for MainScreenViewBase + .rodata._ZN19SliderContainerBase33sliderValueChangedCallbackHandlerERKN8touchgfx6SliderEi.str1.1 + 0x0000000008037724 0x325 ./Application/User/generated/SliderContainerBase.o + 0x3 (size before relaxing) + .rodata._ZN8touchgfx8TextArea12setBaselineYEs.str1.1 + 0x0000000008037724 0x102 ./Application/User/generated/SliderContainerBase.o + *fill* 0x0000000008037826 0x2 + .rodata._ZTVN8touchgfx23TextAreaWithOneWildcardE + 0x0000000008037828 0x90 ./Application/User/generated/SliderContainerBase.o + 0x0000000008037828 vtable for touchgfx::TextAreaWithOneWildcard + .rodata._ZTVN8touchgfx8CallbackI19SliderContainerBaseRKNS_6SliderEivEE + 0x00000000080378b8 0x18 ./Application/User/generated/SliderContainerBase.o + 0x00000000080378b8 vtable for touchgfx::Callback + .rodata._ZTV19SliderContainerBase + 0x00000000080378d0 0x98 ./Application/User/generated/SliderContainerBase.o + 0x00000000080378d0 vtable for SliderContainerBase + .rodata._ZN8touchgfx12TextProvider15getNextLigatureEh.str1.1 + 0x0000000008037968 0x1de ./Application/User/generated/Texts.o + *fill* 0x0000000008037b46 0x2 + .rodata._ZTV19FrontendApplication + 0x0000000008037b48 0x54 ./Application/User/gui/FrontendApplication.o + 0x0000000008037b48 vtable for FrontendApplication + .rodata._ZTV19MainScreenPresenter + 0x0000000008037b9c 0x2c ./Application/User/gui/MainScreenPresenter.o + 0x0000000008037b9c vtable for MainScreenPresenter + .rodata._ZTV14MainScreenView + 0x0000000008037bc8 0x54 ./Application/User/gui/MainScreenView.o + 0x0000000008037bc8 vtable for MainScreenView + .rodata._ZTV15SliderContainer + 0x0000000008037c1c 0xa0 ./Application/User/gui/SliderContainer.o + 0x0000000008037c1c vtable for SliderContainer + .rodata.AHBPrescTable + 0x0000000008037cbc 0x10 ./Drivers/CMSIS/system_stm32f7xx.o + 0x0000000008037cbc AHBPrescTable + .rodata.APBPrescTable + 0x0000000008037ccc 0x8 ./Drivers/CMSIS/system_stm32f7xx.o + 0x0000000008037ccc APBPrescTable + .rodata.CSWTCH.3 + 0x0000000008037cd4 0x7 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .rodata.vTaskStartScheduler.str1.1 + 0x0000000008037cdb 0x5 ./Middlewares/FreeRTOS/tasks.o + .rodata.prvCheckForValidListAndQueue.str1.1 + 0x0000000008037ce0 0x5 ./Middlewares/FreeRTOS/timers.o + .rodata.xTimerCreateTimerTask.str1.1 + 0x0000000008037ce5 0x8 ./Middlewares/FreeRTOS/timers.o + *fill* 0x0000000008037ced 0x3 + .rodata.jpeg_aritab + 0x0000000008037cf0 0x1c8 ./Middlewares/LibJPEG/jaricom.o + 0x0000000008037cf0 jpeg_aritab + .rodata.mybuffer.0 + 0x0000000008037eb8 0x4 ./Middlewares/LibJPEG/jdatasrc.o + .rodata.CSWTCH.4 + 0x0000000008037ebc 0xc ./Middlewares/LibJPEG/jddctmgr.o + .rodata.aanscalefactor.0 + 0x0000000008037ec8 0x40 ./Middlewares/LibJPEG/jddctmgr.o + .rodata.aanscales.1 + 0x0000000008037f08 0x80 ./Middlewares/LibJPEG/jddctmgr.o + .rodata.bmask 0x0000000008037f88 0x40 ./Middlewares/LibJPEG/jdhuff.o + .rodata.jpeg_zigzag_order + 0x0000000008037fc8 0x100 ./Middlewares/LibJPEG/jdhuff.o + .rodata.jpeg_zigzag_order2 + 0x00000000080380c8 0x10 ./Middlewares/LibJPEG/jdhuff.o + .rodata.jpeg_zigzag_order3 + 0x00000000080380d8 0x24 ./Middlewares/LibJPEG/jdhuff.o + .rodata.jpeg_zigzag_order4 + 0x00000000080380fc 0x40 ./Middlewares/LibJPEG/jdhuff.o + .rodata.jpeg_zigzag_order5 + 0x000000000803813c 0x64 ./Middlewares/LibJPEG/jdhuff.o + .rodata.jpeg_zigzag_order6 + 0x00000000080381a0 0x90 ./Middlewares/LibJPEG/jdhuff.o + .rodata.jpeg_zigzag_order7 + 0x0000000008038230 0xc4 ./Middlewares/LibJPEG/jdhuff.o + .rodata.str1.1 + 0x00000000080382f4 0x124f ./Middlewares/LibJPEG/jerror.o + 0x1255 (size before relaxing) + *fill* 0x0000000008039543 0x1 + .rodata.jpeg_std_message_table + 0x0000000008039544 0x200 ./Middlewares/LibJPEG/jerror.o + 0x0000000008039544 jpeg_std_message_table + .rodata.extra_pool_slop + 0x0000000008039744 0x8 ./Middlewares/LibJPEG/jmemmgr.o + .rodata.first_pool_slop + 0x000000000803974c 0x8 ./Middlewares/LibJPEG/jmemmgr.o + .rodata.RGB_order.0 + 0x0000000008039754 0xc ./Middlewares/LibJPEG/jquant1.o + .rodata.base_dither_matrix + 0x0000000008039760 0x100 ./Middlewares/LibJPEG/jquant1.o + .rodata.jpeg_natural_order + 0x0000000008039860 0x140 ./Middlewares/LibJPEG/jutils.o + 0x0000000008039860 jpeg_natural_order + .rodata.jpeg_natural_order2 + 0x00000000080399a0 0x50 ./Middlewares/LibJPEG/jutils.o + 0x00000000080399a0 jpeg_natural_order2 + .rodata.jpeg_natural_order3 + 0x00000000080399f0 0x64 ./Middlewares/LibJPEG/jutils.o + 0x00000000080399f0 jpeg_natural_order3 + .rodata.jpeg_natural_order4 + 0x0000000008039a54 0x80 ./Middlewares/LibJPEG/jutils.o + 0x0000000008039a54 jpeg_natural_order4 + .rodata.jpeg_natural_order5 + 0x0000000008039ad4 0xa4 ./Middlewares/LibJPEG/jutils.o + 0x0000000008039ad4 jpeg_natural_order5 + .rodata.jpeg_natural_order6 + 0x0000000008039b78 0xd0 ./Middlewares/LibJPEG/jutils.o + 0x0000000008039b78 jpeg_natural_order6 + .rodata.jpeg_natural_order7 + 0x0000000008039c48 0x104 ./Middlewares/LibJPEG/jutils.o + 0x0000000008039c48 jpeg_natural_order7 + .rodata.dhcp_option_short.str1.1 + 0x0000000008039d4c 0xc1 ./Middlewares/LwIP/dhcp.o + 0xe9 (size before relaxing) + .rodata.dhcp_option.str1.1 + 0x0000000008039e0d 0x42 ./Middlewares/LwIP/dhcp.o + .rodata.dhcp_option_byte.str1.1 + 0x0000000008039e4f 0x35 ./Middlewares/LwIP/dhcp.o + .rodata.dhcp_option_long.str1.1 + 0x0000000008039e84 0x3a ./Middlewares/LwIP/dhcp.o + .rodata.dhcp_create_msg.str1.1 + 0x0000000008039ebe 0x7d ./Middlewares/LwIP/dhcp.o + .rodata.dhcp_bind.str1.1 + 0x0000000008039f3b 0x31 ./Middlewares/LwIP/dhcp.o + .rodata.dhcp_inc_pcb_refcount.str1.1 + 0x0000000008039f6c 0x25 ./Middlewares/LwIP/dhcp.o + .rodata.dhcp_dec_pcb_refcount.str1.1 + 0x0000000008039f91 0x24 ./Middlewares/LwIP/dhcp.o + .rodata.dhcp_select.isra.0.str1.1 + 0x0000000008039fb5 0x35 ./Middlewares/LwIP/dhcp.o + .rodata.dhcp_recv.str1.1 + 0x0000000008039fea 0x72 ./Middlewares/LwIP/dhcp.o + .rodata.dhcp_set_struct.str1.1 + 0x000000000803a05c 0x24 ./Middlewares/LwIP/dhcp.o + 0x3f (size before relaxing) + .rodata.dhcp_network_changed.str1.1 + 0x000000000803a080 0x14 ./Middlewares/LwIP/dhcp.o + .rodata.dhcp_start.str1.1 + 0x000000000803a094 0x21 ./Middlewares/LwIP/dhcp.o + .rodata.dhcp_discover_request_options + 0x000000000803a0b5 0x3 ./Middlewares/LwIP/dhcp.o + .rodata.etharp_find_entry.str1.1 + 0x000000000803a0b8 0xc8 ./Middlewares/LwIP/etharp.o + 0xf0 (size before relaxing) + .rodata.etharp_raw.str1.1 + 0x000000000803a180 0x72 ./Middlewares/LwIP/etharp.o + 0x80 (size before relaxing) + .rodata.etharp_get_entry.str1.1 + 0x000000000803a1f2 0x1f ./Middlewares/LwIP/etharp.o + .rodata.etharp_input.str1.1 + 0x000000000803a211 0x24 ./Middlewares/LwIP/etharp.o + .rodata.etharp_output_to_arp_index.str1.1 + 0x000000000803a235 0x30 ./Middlewares/LwIP/etharp.o + .rodata.etharp_query.str1.1 + 0x000000000803a265 0x28 ./Middlewares/LwIP/etharp.o + .rodata.etharp_output.str1.1 + 0x000000000803a28d 0x28 ./Middlewares/LwIP/etharp.o + 0xa (size before relaxing) + .rodata.ethernet_output.str1.1 + 0x000000000803a28d 0xb7 ./Middlewares/LwIP/ethernet.o + 0xdf (size before relaxing) + .rodata.ethbroadcast + 0x000000000803a344 0x6 ./Middlewares/LwIP/ethernet.o + 0x000000000803a344 ethbroadcast + .rodata.ethzero + 0x000000000803a34a 0x6 ./Middlewares/LwIP/ethernet.o + 0x000000000803a34a ethzero + .rodata.icmp_send_response.str1.1 + 0x000000000803a350 0xb2 ./Middlewares/LwIP/icmp.o + 0xda (size before relaxing) + .rodata.icmp_input.str1.1 + 0x000000000803a402 0x67 ./Middlewares/LwIP/icmp.o + .rodata.ip4_output_if_src.str1.1 + 0x000000000803a469 0xbe ./Middlewares/LwIP/ip4.o + 0xe6 (size before relaxing) + *fill* 0x000000000803a527 0x1 + .rodata.ip_addr_any + 0x000000000803a528 0x4 ./Middlewares/LwIP/ip4_addr.o + 0x000000000803a528 ip_addr_any + .rodata.ip_addr_broadcast + 0x000000000803a52c 0x4 ./Middlewares/LwIP/ip4_addr.o + 0x000000000803a52c ip_addr_broadcast + .rodata.ip_reass_dequeue_datagram.str1.1 + 0x000000000803a530 0xa3 ./Middlewares/LwIP/ip4_frag.o + 0xcb (size before relaxing) + .rodata.ip_reass_free_complete_datagram.str1.1 + 0x000000000803a5d3 0x5d ./Middlewares/LwIP/ip4_frag.o + .rodata.ip_frag_free_pbuf_custom_ref.str1.1 + 0x000000000803a630 0x5d ./Middlewares/LwIP/ip4_frag.o + 0xa (size before relaxing) + .rodata.ipfrag_free_pbuf_custom.str1.1 + 0x000000000803a630 0xc ./Middlewares/LwIP/ip4_frag.o + .rodata.ip4_reass.str1.1 + 0x000000000803a63c 0xbf ./Middlewares/LwIP/ip4_frag.o + .rodata.ip4_frag.str1.1 + 0x000000000803a6fb 0x4a ./Middlewares/LwIP/ip4_frag.o + .rodata.mem_init.str1.1 + 0x000000000803a745 0x9b ./Middlewares/LwIP/mem.o + 0xc3 (size before relaxing) + .rodata.mem_free.str1.1 + 0x000000000803a7e0 0x108 ./Middlewares/LwIP/mem.o + .rodata.mem_trim.str1.1 + 0x000000000803a8e8 0x48 ./Middlewares/LwIP/mem.o + .rodata.mem_malloc.str1.1 + 0x000000000803a930 0x9b ./Middlewares/LwIP/mem.o + .rodata.do_memp_malloc_pool.str1.1 + 0x000000000803a9cb 0xa4 ./Middlewares/LwIP/memp.o + 0xcc (size before relaxing) + .rodata.do_memp_free_pool.str1.1 + 0x000000000803aa6f 0x20 ./Middlewares/LwIP/memp.o + .rodata.memp_malloc_pool.str1.1 + 0x000000000803aa8f 0x12 ./Middlewares/LwIP/memp.o + .rodata.memp_malloc.str1.1 + 0x000000000803aaa1 0x1d ./Middlewares/LwIP/memp.o + .rodata.memp_free.str1.1 + 0x000000000803aabe 0x1b ./Middlewares/LwIP/memp.o + *fill* 0x000000000803aad9 0x3 + .rodata.memp_FRAG_PBUF + 0x000000000803aadc 0xc ./Middlewares/LwIP/memp.o + 0x000000000803aadc memp_FRAG_PBUF + .rodata.memp_NETBUF + 0x000000000803aae8 0xc ./Middlewares/LwIP/memp.o + 0x000000000803aae8 memp_NETBUF + .rodata.memp_NETCONN + 0x000000000803aaf4 0xc ./Middlewares/LwIP/memp.o + 0x000000000803aaf4 memp_NETCONN + .rodata.memp_PBUF + 0x000000000803ab00 0xc ./Middlewares/LwIP/memp.o + 0x000000000803ab00 memp_PBUF + .rodata.memp_PBUF_POOL + 0x000000000803ab0c 0xc ./Middlewares/LwIP/memp.o + 0x000000000803ab0c memp_PBUF_POOL + .rodata.memp_REASSDATA + 0x000000000803ab18 0xc ./Middlewares/LwIP/memp.o + 0x000000000803ab18 memp_REASSDATA + .rodata.memp_SYS_TIMEOUT + 0x000000000803ab24 0xc ./Middlewares/LwIP/memp.o + 0x000000000803ab24 memp_SYS_TIMEOUT + .rodata.memp_TCPIP_MSG_API + 0x000000000803ab30 0xc ./Middlewares/LwIP/memp.o + 0x000000000803ab30 memp_TCPIP_MSG_API + .rodata.memp_TCPIP_MSG_INPKT + 0x000000000803ab3c 0xc ./Middlewares/LwIP/memp.o + 0x000000000803ab3c memp_TCPIP_MSG_INPKT + .rodata.memp_TCP_PCB + 0x000000000803ab48 0xc ./Middlewares/LwIP/memp.o + 0x000000000803ab48 memp_TCP_PCB + .rodata.memp_TCP_PCB_LISTEN + 0x000000000803ab54 0xc ./Middlewares/LwIP/memp.o + 0x000000000803ab54 memp_TCP_PCB_LISTEN + .rodata.memp_TCP_SEG + 0x000000000803ab60 0xc ./Middlewares/LwIP/memp.o + 0x000000000803ab60 memp_TCP_SEG + .rodata.memp_UDP_PCB + 0x000000000803ab6c 0xc ./Middlewares/LwIP/memp.o + 0x000000000803ab6c memp_UDP_PCB + .rodata.memp_pools + 0x000000000803ab78 0x34 ./Middlewares/LwIP/memp.o + 0x000000000803ab78 memp_pools + .rodata.netif_issue_reports.str1.1 + 0x000000000803abac 0xa5 ./Middlewares/LwIP/netif.o + 0xcd (size before relaxing) + .rodata.netif_do_set_ipaddr.isra.0.str1.1 + 0x000000000803ac51 0x10 ./Middlewares/LwIP/netif.o + .rodata.netif_add.str1.1 + 0x000000000803ac61 0x7d ./Middlewares/LwIP/netif.o + .rodata.netif_set_up.str1.1 + 0x000000000803acde 0x1c ./Middlewares/LwIP/netif.o + .rodata.netif_set_down.str1.1 + 0x000000000803acfa 0x1e ./Middlewares/LwIP/netif.o + .rodata.netif_set_link_up.str1.1 + 0x000000000803ad18 0x21 ./Middlewares/LwIP/netif.o + .rodata.netif_set_link_down.str1.1 + 0x000000000803ad39 0x23 ./Middlewares/LwIP/netif.o + .rodata.pbuf_add_header_impl.str1.1 + 0x000000000803ad5c 0x81 ./Middlewares/LwIP/pbuf.o + 0xb3 (size before relaxing) + .rodata.pbuf_alloc_reference.str1.1 + 0x000000000803addd 0x12 ./Middlewares/LwIP/pbuf.o + .rodata.pbuf_remove_header.str1.1 + 0x000000000803adef 0x1e ./Middlewares/LwIP/pbuf.o + .rodata.pbuf_free.str1.1 + 0x000000000803ae0d 0x49 ./Middlewares/LwIP/pbuf.o + .rodata.pbuf_alloc.str1.1 + 0x000000000803ae56 0x1b ./Middlewares/LwIP/pbuf.o + .rodata.pbuf_realloc.str1.1 + 0x000000000803ae71 0x4c ./Middlewares/LwIP/pbuf.o + .rodata.pbuf_ref.str1.1 + 0x000000000803aebd 0x12 ./Middlewares/LwIP/pbuf.o + .rodata.pbuf_cat.str1.1 + 0x000000000803aecf 0x72 ./Middlewares/LwIP/pbuf.o + .rodata.pbuf_copy.str1.1 + 0x000000000803af41 0x99 ./Middlewares/LwIP/pbuf.o + .rodata.pbuf_copy_partial.str1.1 + 0x000000000803afda 0x42 ./Middlewares/LwIP/pbuf.o + .rodata.pbuf_clone.str1.1 + 0x000000000803b01c 0x11 ./Middlewares/LwIP/pbuf.o + .rodata.tcp_close_shutdown_fin.str1.1 + 0x000000000803b02d 0x8c ./Middlewares/LwIP/tcp.o + 0xb4 (size before relaxing) + .rodata.tcp_free.str1.1 + 0x000000000803b0b9 0x11 ./Middlewares/LwIP/tcp.o + .rodata.tcp_update_rcv_ann_wnd.str1.1 + 0x000000000803b0ca 0x3e ./Middlewares/LwIP/tcp.o + .rodata.tcp_recved.str1.1 + 0x000000000803b108 0x3e ./Middlewares/LwIP/tcp.o + .rodata.tcp_seg_copy.str1.1 + 0x000000000803b146 0x1a ./Middlewares/LwIP/tcp.o + .rodata.tcp_next_iss.str1.1 + 0x000000000803b160 0x1a ./Middlewares/LwIP/tcp.o + .rodata.tcp_eff_send_mss_netif.str1.1 + 0x000000000803b17a 0x27 ./Middlewares/LwIP/tcp.o + .rodata.tcp_pcb_purge.str1.1 + 0x000000000803b1a1 0x1b ./Middlewares/LwIP/tcp.o + .rodata.tcp_pcb_remove.str1.1 + 0x000000000803b1bc 0x84 ./Middlewares/LwIP/tcp.o + .rodata.tcp_abandon.str1.1 + 0x000000000803b240 0x4a ./Middlewares/LwIP/tcp.o + .rodata.tcp_netif_ip_addr_changed_pcblist.str1.1 + 0x000000000803b28a 0x34 ./Middlewares/LwIP/tcp.o + .rodata.tcp_close_shutdown.str1.1 + 0x000000000803b2be 0x52 ./Middlewares/LwIP/tcp.o + .rodata.tcp_close.str1.1 + 0x000000000803b310 0x17 ./Middlewares/LwIP/tcp.o + .rodata.tcp_recv_null.str1.1 + 0x000000000803b327 0x1b ./Middlewares/LwIP/tcp.o + .rodata.tcp_process_refused_data.str1.1 + 0x000000000803b342 0x26 ./Middlewares/LwIP/tcp.o + .rodata.tcp_slowtmr.str1.1 + 0x000000000803b368 0x1b9 ./Middlewares/LwIP/tcp.o + .rodata.tcp_backoff + 0x000000000803b521 0xd ./Middlewares/LwIP/tcp.o + *fill* 0x000000000803b52e 0x2 + .rodata.tcp_pcb_lists + 0x000000000803b530 0x10 ./Middlewares/LwIP/tcp.o + 0x000000000803b530 tcp_pcb_lists + .rodata.tcp_persist_backoff + 0x000000000803b540 0x7 ./Middlewares/LwIP/tcp.o + .rodata.tcp_oos_insert_segment.str1.1 + 0x000000000803b547 0xa8 ./Middlewares/LwIP/tcp_in.o + 0xd0 (size before relaxing) + .rodata.tcp_parseopt.str1.1 + 0x000000000803b5ef 0x1a ./Middlewares/LwIP/tcp_in.o + .rodata.tcp_input_delayed_close.str1.1 + 0x000000000803b609 0x25 ./Middlewares/LwIP/tcp_in.o + .rodata.tcp_free_acked_segments.constprop.0.str1.1 + 0x000000000803b62e 0x48 ./Middlewares/LwIP/tcp_in.o + .rodata.tcp_receive.str1.1 + 0x000000000803b676 0x117 ./Middlewares/LwIP/tcp_in.o + .rodata.tcp_input.str1.1 + 0x000000000803b78d 0x1ce ./Middlewares/LwIP/tcp_in.o + .rodata.tcp_output_segment_busy.str1.1 + 0x000000000803b95b 0xa9 ./Middlewares/LwIP/tcp_out.o + 0xd1 (size before relaxing) + .rodata.tcp_create_segment.str1.1 + 0x000000000803ba04 0x56 ./Middlewares/LwIP/tcp_out.o + .rodata.tcp_output_alloc_header_common.constprop.0.str1.1 + 0x000000000803ba5a 0x2e ./Middlewares/LwIP/tcp_out.o + .rodata.tcp_output_alloc_header.constprop.0.str1.1 + 0x000000000803ba88 0x25 ./Middlewares/LwIP/tcp_out.o + .rodata.tcp_output_fill_options.constprop.0.str1.1 + 0x000000000803baad 0x26 ./Middlewares/LwIP/tcp_out.o + .rodata.tcp_output_control_segment.str1.1 + 0x000000000803bad3 0x29 ./Middlewares/LwIP/tcp_out.o + .rodata.tcp_split_unsent_seg.str1.1 + 0x000000000803bafc 0x5f ./Middlewares/LwIP/tcp_out.o + .rodata.tcp_enqueue_flags.str1.1 + 0x000000000803bb5b 0x117 ./Middlewares/LwIP/tcp_out.o + .rodata.tcp_send_fin.str1.1 + 0x000000000803bc72 0x1a ./Middlewares/LwIP/tcp_out.o + .rodata.tcp_rexmit_rto_prepare.str1.1 + 0x000000000803bc8c 0x24 ./Middlewares/LwIP/tcp_out.o + .rodata.tcp_rexmit.str1.1 + 0x000000000803bcb0 0x18 ./Middlewares/LwIP/tcp_out.o + .rodata.tcp_rexmit_fast.str1.1 + 0x000000000803bcc8 0x1d ./Middlewares/LwIP/tcp_out.o + .rodata.tcp_rst.str1.1 + 0x000000000803bce5 0x35 ./Middlewares/LwIP/tcp_out.o + .rodata.tcp_send_empty_ack.str1.1 + 0x000000000803bd1a 0x20 ./Middlewares/LwIP/tcp_out.o + .rodata.tcp_output.str1.1 + 0x000000000803bd3a 0x68 ./Middlewares/LwIP/tcp_out.o + .rodata.tcp_rexmit_rto_commit.str1.1 + 0x000000000803bda2 0x23 ./Middlewares/LwIP/tcp_out.o + .rodata.tcp_rexmit_rto.str1.1 + 0x000000000803bdc5 0x1c ./Middlewares/LwIP/tcp_out.o + .rodata.tcp_keepalive.str1.1 + 0x000000000803bde1 0x1b ./Middlewares/LwIP/tcp_out.o + .rodata.tcp_zero_window_probe.str1.1 + 0x000000000803bdfc 0x23 ./Middlewares/LwIP/tcp_out.o + .rodata.tcpip_thread.str1.1 + 0x000000000803be1f 0x9f ./Middlewares/LwIP/tcpip.o + 0xc7 (size before relaxing) + .rodata.tcpip_inpkt.str1.1 + 0x000000000803bebe 0xd ./Middlewares/LwIP/tcpip.o + .rodata.tcpip_init.str1.1 + 0x000000000803becb 0x51 ./Middlewares/LwIP/tcpip.o + .rodata.sys_timeout_abs.str1.1 + 0x000000000803bf1c 0xc2 ./Middlewares/LwIP/timeouts.o + 0xea (size before relaxing) + .rodata.sys_timeout.str1.1 + 0x000000000803bfde 0x36 ./Middlewares/LwIP/timeouts.o + .rodata.lwip_cyclic_timers + 0x000000000803c014 0x28 ./Middlewares/LwIP/timeouts.o + 0x000000000803c014 lwip_cyclic_timers + .rodata.udp_input.str1.1 + 0x000000000803c03c 0xf1 ./Middlewares/LwIP/udp.o + 0x119 (size before relaxing) + .rodata.udp_bind.str1.1 + 0x000000000803c12d 0x16 ./Middlewares/LwIP/udp.o + .rodata.udp_sendto_if_src.str1.1 + 0x000000000803c143 0xd2 ./Middlewares/LwIP/udp.o + .rodata.udp_sendto_if.str1.1 + 0x000000000803c215 0x72 ./Middlewares/LwIP/udp.o + .rodata.udp_connect.str1.1 + 0x000000000803c287 0x35 ./Middlewares/LwIP/udp.o + .rodata.udp_recv.str1.1 + 0x000000000803c2bc 0x16 ./Middlewares/LwIP/udp.o + .rodata.udp_remove.str1.1 + 0x000000000803c2d2 0x18 ./Middlewares/LwIP/udp.o + *fill* 0x000000000803c2ea 0x2 + .rodata._ZTVN8touchgfx17AbstractPartitionE + 0x000000000803c2ec 0x34 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(AbstractPartition.o) + 0x000000000803c2ec vtable for touchgfx::AbstractPartition + .rodata._ZTVN8touchgfx9ContainerE + 0x000000000803c320 0x90 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Container.o) + 0x000000000803c320 vtable for touchgfx::Container + .rodata._ZTVN8touchgfx6SliderE + 0x000000000803c3b0 0xcc C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + 0x000000000803c3b0 vtable for touchgfx::Slider + .rodata.CSWTCH.170 + 0x000000000803c47c 0xc C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + .rodata._ZTVN8touchgfx17LockFreeDMA_QueueE + 0x000000000803c488 0x24 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(DMA.o) + 0x000000000803c488 vtable for touchgfx::LockFreeDMA_Queue + .rodata._ZTVN8touchgfx8TextAreaE + 0x000000000803c4ac 0x90 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextArea.o) + 0x000000000803c4ac vtable for touchgfx::TextArea + .rodata._ZTVN8touchgfx3BoxE + 0x000000000803c53c 0x68 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Box.o) + 0x000000000803c53c vtable for touchgfx::Box + .rodata._ZTVN8touchgfx5ImageE + 0x000000000803c5a4 0x6c C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Image.o) + 0x000000000803c5a4 vtable for touchgfx::Image + .rodata._ZTVN8touchgfx11ApplicationE + 0x000000000803c610 0x54 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Application.o) + 0x000000000803c610 vtable for touchgfx::Application + .rodata._ZTVN8touchgfx8DrawableE + 0x000000000803c664 0x68 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Drawable.o) + 0x000000000803c664 vtable for touchgfx::Drawable + .rodata._ZTVN8touchgfx9ConstFontE + 0x000000000803c6cc 0x60 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(ConstFont.o) + 0x000000000803c6cc vtable for touchgfx::ConstFont + .rodata._ZTVN8touchgfx10ClickEventE + 0x000000000803c72c 0x14 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Screen.o) + 0x000000000803c72c vtable for touchgfx::ClickEvent + .rodata._ZTVN8touchgfx9DragEventE + 0x000000000803c740 0x14 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Screen.o) + 0x000000000803c740 vtable for touchgfx::DragEvent + .rodata._ZTVN8touchgfx12GestureEventE + 0x000000000803c754 0x14 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Screen.o) + 0x000000000803c754 vtable for touchgfx::GestureEvent + .rodata._ZTVN8touchgfx6ScreenE + 0x000000000803c768 0x34 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Screen.o) + 0x000000000803c768 vtable for touchgfx::Screen + .rodata._ZTVN8touchgfx8LCD16bpp17DecompressorL8_L4E + 0x000000000803c79c 0x1c C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000803c79c vtable for touchgfx::LCD16bpp::DecompressorL8_L4 + .rodata._ZTVN8touchgfx8LCD16bpp18DecompressorL8_RLEE + 0x000000000803c7b8 0x1c C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000803c7b8 vtable for touchgfx::LCD16bpp::DecompressorL8_RLE + .rodata._ZTVN8touchgfx8LCD16bpp19DecompressorL8_LZW9E + 0x000000000803c7d4 0x1c C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000803c7d4 vtable for touchgfx::LCD16bpp::DecompressorL8_LZW9 + .rodata._ZTVN8touchgfx8LCD16bpp35TextureMapper_A4_NearestNeighbor_GAE + 0x000000000803c7f0 0x14 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000803c7f0 vtable for touchgfx::LCD16bpp::TextureMapper_A4_NearestNeighbor_GA + .rodata._ZTVN8touchgfx8LCD16bpp37TextureMapper_A4_NearestNeighbor_NoGAE + 0x000000000803c804 0x14 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000803c804 vtable for touchgfx::LCD16bpp::TextureMapper_A4_NearestNeighbor_NoGA + .rodata._ZTVN8touchgfx8LCD16bpp41TextureMapper_A4_BilinearInterpolation_GAE + 0x000000000803c818 0x14 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000803c818 vtable for touchgfx::LCD16bpp::TextureMapper_A4_BilinearInterpolation_GA + .rodata._ZTVN8touchgfx8LCD16bpp43TextureMapper_A4_BilinearInterpolation_NoGAE + 0x000000000803c82c 0x14 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000803c82c vtable for touchgfx::LCD16bpp::TextureMapper_A4_BilinearInterpolation_NoGA + .rodata._ZTVN8touchgfx8LCD16bpp46TextureMapper_RGB565_Opaque_NearestNeighbor_GAE + 0x000000000803c840 0x14 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000803c840 vtable for touchgfx::LCD16bpp::TextureMapper_RGB565_Opaque_NearestNeighbor_GA + .rodata._ZTVN8touchgfx8LCD16bpp48TextureMapper_RGB565_Opaque_NearestNeighbor_NoGAE + 0x000000000803c854 0x14 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000803c854 vtable for touchgfx::LCD16bpp::TextureMapper_RGB565_Opaque_NearestNeighbor_NoGA + .rodata._ZTVN8touchgfx8LCD16bpp49TextureMapper_L8_RGB565_Opaque_NearestNeighbor_GAE + 0x000000000803c868 0x14 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000803c868 vtable for touchgfx::LCD16bpp::TextureMapper_L8_RGB565_Opaque_NearestNeighbor_GA + .rodata._ZTVN8touchgfx8LCD16bpp49TextureMapper_L8_RGB888_Opaque_NearestNeighbor_GAE + 0x000000000803c87c 0x14 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000803c87c vtable for touchgfx::LCD16bpp::TextureMapper_L8_RGB888_Opaque_NearestNeighbor_GA + .rodata._ZTVN8touchgfx8LCD16bpp49TextureMapper_RGB565_NonOpaque_NearestNeighbor_GAE + 0x000000000803c890 0x14 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000803c890 vtable for touchgfx::LCD16bpp::TextureMapper_RGB565_NonOpaque_NearestNeighbor_GA + .rodata._ZTVN8touchgfx8LCD16bpp51TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_GAE + 0x000000000803c8a4 0x14 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000803c8a4 vtable for touchgfx::LCD16bpp::TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_GA + .rodata._ZTVN8touchgfx8LCD16bpp51TextureMapper_L8_RGB565_Opaque_NearestNeighbor_NoGAE + 0x000000000803c8b8 0x14 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000803c8b8 vtable for touchgfx::LCD16bpp::TextureMapper_L8_RGB565_Opaque_NearestNeighbor_NoGA + .rodata._ZTVN8touchgfx8LCD16bpp51TextureMapper_L8_RGB888_Opaque_NearestNeighbor_NoGAE + 0x000000000803c8cc 0x14 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000803c8cc vtable for touchgfx::LCD16bpp::TextureMapper_L8_RGB888_Opaque_NearestNeighbor_NoGA + .rodata._ZTVN8touchgfx8LCD16bpp51TextureMapper_RGB565_NonOpaque_NearestNeighbor_NoGAE + 0x000000000803c8e0 0x14 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000803c8e0 vtable for touchgfx::LCD16bpp::TextureMapper_RGB565_NonOpaque_NearestNeighbor_NoGA + .rodata._ZTVN8touchgfx8LCD16bpp52TextureMapper_RGB565_Opaque_BilinearInterpolation_GAE + 0x000000000803c8f4 0x14 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000803c8f4 vtable for touchgfx::LCD16bpp::TextureMapper_RGB565_Opaque_BilinearInterpolation_GA + .rodata._ZTVN8touchgfx8LCD16bpp53TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_NoGAE + 0x000000000803c908 0x14 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000803c908 vtable for touchgfx::LCD16bpp::TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_NoGA + .rodata._ZTVN8touchgfx8LCD16bpp54TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_GAE + 0x000000000803c91c 0x14 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000803c91c vtable for touchgfx::LCD16bpp::TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_GA + .rodata._ZTVN8touchgfx8LCD16bpp54TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGAE + 0x000000000803c930 0x14 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000803c930 vtable for touchgfx::LCD16bpp::TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA + .rodata._ZTVN8touchgfx8LCD16bpp55TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GAE + 0x000000000803c944 0x14 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000803c944 vtable for touchgfx::LCD16bpp::TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA + .rodata._ZTVN8touchgfx8LCD16bpp55TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GAE + 0x000000000803c958 0x14 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000803c958 vtable for touchgfx::LCD16bpp::TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA + .rodata._ZTVN8touchgfx8LCD16bpp55TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GAE + 0x000000000803c96c 0x14 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000803c96c vtable for touchgfx::LCD16bpp::TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA + .rodata._ZTVN8touchgfx8LCD16bpp56TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_NoGAE + 0x000000000803c980 0x14 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000803c980 vtable for touchgfx::LCD16bpp::TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_NoGA + .rodata._ZTVN8touchgfx8LCD16bpp57TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GAE + 0x000000000803c994 0x14 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000803c994 vtable for touchgfx::LCD16bpp::TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA + .rodata._ZTVN8touchgfx8LCD16bpp57TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGAE + 0x000000000803c9a8 0x14 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000803c9a8 vtable for touchgfx::LCD16bpp::TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA + .rodata._ZTVN8touchgfx8LCD16bpp57TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGAE + 0x000000000803c9bc 0x14 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000803c9bc vtable for touchgfx::LCD16bpp::TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA + .rodata._ZTVN8touchgfx8LCD16bpp57TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGAE + 0x000000000803c9d0 0x14 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000803c9d0 vtable for touchgfx::LCD16bpp::TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA + .rodata._ZTVN8touchgfx8LCD16bpp59TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGAE + 0x000000000803c9e4 0x14 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000803c9e4 vtable for touchgfx::LCD16bpp::TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA + .rodata._ZTVN8touchgfx8LCD16bpp60TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GAE + 0x000000000803c9f8 0x14 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000803c9f8 vtable for touchgfx::LCD16bpp::TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA + .rodata._ZTVN8touchgfx8LCD16bpp62TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGAE + 0x000000000803ca0c 0x14 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000803ca0c vtable for touchgfx::LCD16bpp::TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA + .rodata._ZTVN8touchgfx8LCD16bppE + 0x000000000803ca20 0x58 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + 0x000000000803ca20 vtable for touchgfx::LCD16bpp + .rodata.__assert_func.str1.1 + 0x000000000803ca78 0x3c C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-assert.o) + 0x3d (size before relaxing) + .rodata.srand.str1.1 + 0x000000000803cab4 0x6f C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-rand.o) + *fill* 0x000000000803cb23 0x1 + .rodata.__on_exit_args + 0x000000000803cb24 0x4 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-on_exit_args.o) + 0x000000000803cb24 __on_exit_args + .rodata._svfprintf_r.str1.1 + 0x000000000803cb28 0x11 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-nano-svfprintf.o) + .rodata._vfprintf_r.str1.1 + 0x000000000803cb39 0x11 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-nano-vfprintf.o) + .rodata._printf_i.str1.1 + 0x000000000803cb39 0x22 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-nano-vfprintf_i.o) + 0x000000000803cb5c . = ALIGN (0x4) + *fill* 0x000000000803cb5b 0x1 + +FontSearchFlashSection + 0x000000000803cb5c 0x18 + FontSearchFlashSection + 0x000000000803cb5c 0x4 ./Application/User/generated/Kerning_verdana_10_4bpp.o + 0x000000000803cb5c kerning_verdana_10_4bpp + FontSearchFlashSection + 0x000000000803cb60 0x4 ./Application/User/generated/Kerning_verdana_20_4bpp.o + 0x000000000803cb60 kerning_verdana_20_4bpp + FontSearchFlashSection + 0x000000000803cb64 0x4 ./Application/User/generated/Kerning_verdana_40_4bpp.o + 0x000000000803cb64 kerning_verdana_40_4bpp + FontSearchFlashSection + 0x000000000803cb68 0x4 ./Application/User/generated/Table_verdana_10_4bpp.o + 0x000000000803cb68 unicodes_verdana_10_4bpp + FontSearchFlashSection + 0x000000000803cb6c 0x4 ./Application/User/generated/Table_verdana_20_4bpp.o + 0x000000000803cb6c unicodes_verdana_20_4bpp + FontSearchFlashSection + 0x000000000803cb70 0x4 ./Application/User/generated/Table_verdana_40_4bpp.o + 0x000000000803cb70 unicodes_verdana_40_4bpp + +.ARM.extab 0x000000000803cb74 0x0 + 0x000000000803cb74 . = ALIGN (0x4) + *(.ARM.extab* .gnu.linkonce.armextab.*) + 0x000000000803cb74 . = ALIGN (0x4) + +.ARM 0x000000000803cb74 0x8 + 0x000000000803cb74 . = ALIGN (0x4) + 0x000000000803cb74 __exidx_start = . + *(.ARM.exidx*) + .ARM.exidx 0x000000000803cb74 0x8 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_udivmoddi4.o) + 0x000000000803cb7c __exidx_end = . + 0x000000000803cb7c . = ALIGN (0x4) + +.preinit_array 0x000000000803cb7c 0x0 + 0x000000000803cb7c . = ALIGN (0x4) + 0x000000000803cb7c PROVIDE (__preinit_array_start = .) + *(.preinit_array*) + 0x000000000803cb7c PROVIDE (__preinit_array_end = .) + 0x000000000803cb7c . = ALIGN (0x4) + +.init_array 0x000000000803cb7c 0x1c + 0x000000000803cb7c . = ALIGN (0x4) + 0x000000000803cb7c PROVIDE (__init_array_start = .) + *(SORT_BY_NAME(.init_array.*)) + *(.init_array*) + .init_array 0x000000000803cb7c 0x4 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard/crtbegin.o + .init_array 0x000000000803cb80 0x4 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .init_array 0x000000000803cb84 0x4 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .init_array 0x000000000803cb88 0x4 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .init_array 0x000000000803cb8c 0x4 ./Application/User/generated/TypedTextDatabase.o + .init_array 0x000000000803cb90 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD.o) + .init_array 0x000000000803cb94 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Application.o) + 0x000000000803cb98 PROVIDE (__init_array_end = .) + 0x000000000803cb98 . = ALIGN (0x4) + +.fini_array 0x000000000803cb98 0x8 + 0x000000000803cb98 . = ALIGN (0x4) + [!provide] PROVIDE (__fini_array_start = .) + *(SORT_BY_NAME(.fini_array.*)) + *(.fini_array*) + .fini_array 0x000000000803cb98 0x4 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard/crtbegin.o + .fini_array 0x000000000803cb9c 0x4 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + [!provide] PROVIDE (__fini_array_end = .) + 0x000000000803cba0 . = ALIGN (0x4) + 0x000000000803cba0 _sidata = LOADADDR (.data) + +.data 0x0000000020000000 0x140 load address 0x000000000803cba0 + 0x0000000020000000 . = ALIGN (0x4) + 0x0000000020000000 _sdata = . + *(.data) + .data 0x0000000020000000 0x4 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard/crtbegin.o + 0x0000000020000000 __dso_handle + *(.data*) + .data.LAN8742_IOCtx + 0x0000000020000004 0x14 ./Application/User/LWIP/Target/ethernetif.o + 0x0000000020000004 LAN8742_IOCtx + .data._ZL5dummy + 0x0000000020000018 0x4 ./Application/User/TouchGFX/target/generated/OSWrappers.o + .data._ZL12fontProvider + 0x000000002000001c 0x4 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .data.SystemCoreClock + 0x0000000020000020 0x4 ./Drivers/CMSIS/system_stm32f7xx.o + 0x0000000020000020 SystemCoreClock + .data.ft5336_ts_drv + 0x0000000020000024 0x28 ./Drivers/Components/ft5336.o + 0x0000000020000024 ft5336_ts_drv + .data.uwTickFreq + 0x000000002000004c 0x1 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + 0x000000002000004c uwTickFreq + *fill* 0x000000002000004d 0x3 + .data.uwTickPrio + 0x0000000020000050 0x4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + 0x0000000020000050 uwTickPrio + .data.uxCriticalNesting + 0x0000000020000054 0x4 ./Middlewares/FreeRTOS/port.o + .data.iss.0 0x0000000020000058 0x4 ./Middlewares/LwIP/tcp.o + .data.tcp_port + 0x000000002000005c 0x2 ./Middlewares/LwIP/tcp.o + .data.udp_port + 0x000000002000005e 0x2 ./Middlewares/LwIP/udp.o + .data._ZN8touchgfxL5rectsE + 0x0000000020000060 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Application.o) + *fill* 0x0000000020000062 0x2 + .data._ZZN8touchgfx8LCD16bpp23enableDecompressorL8_L4EvE11decompL8_L4 + 0x0000000020000064 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .data._ZZN8touchgfx8LCD16bpp24enableDecompressorL8_RLEEvE12decompL8_RLE + 0x0000000020000068 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .data._ZZN8touchgfx8LCD16bpp37enableTextureMapperA4_NearestNeighborEvE24tm_A4_NearestNeighbor_GA + 0x000000002000006c 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .data._ZZN8touchgfx8LCD16bpp37enableTextureMapperA4_NearestNeighborEvE26tm_A4_NearestNeighbor_NoGA + 0x0000000020000070 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .data._ZZN8touchgfx8LCD16bpp43enableTextureMapperA4_BilinearInterpolationEvE30tm_A4_BilinearInterpolation_GA + 0x0000000020000074 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .data._ZZN8touchgfx8LCD16bpp43enableTextureMapperA4_BilinearInterpolationEvE32tm_A4_BilinearInterpolation_NoGA + 0x0000000020000078 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .data._ZZN8touchgfx8LCD16bpp43enableTextureMapperARGB8888_NearestNeighborEvE40tm_ARGB8888_NonOpaque_NearestNeighbor_GA + 0x000000002000007c 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .data._ZZN8touchgfx8LCD16bpp43enableTextureMapperARGB8888_NearestNeighborEvE42tm_ARGB8888_NonOpaque_NearestNeighbor_NoGA + 0x0000000020000080 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .data._ZZN8touchgfx8LCD16bpp44enableTextureMapperL8_RGB565_NearestNeighborEvE38tm_L8_RGB565_Opaque_NearestNeighbor_GA + 0x0000000020000084 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .data._ZZN8touchgfx8LCD16bpp44enableTextureMapperL8_RGB565_NearestNeighborEvE40tm_L8_RGB565_Opaque_NearestNeighbor_NoGA + 0x0000000020000088 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .data._ZZN8touchgfx8LCD16bpp44enableTextureMapperL8_RGB888_NearestNeighborEvE38tm_L8_RGB888_Opaque_NearestNeighbor_GA + 0x000000002000008c 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .data._ZZN8touchgfx8LCD16bpp44enableTextureMapperL8_RGB888_NearestNeighborEvE40tm_L8_RGB888_Opaque_NearestNeighbor_NoGA + 0x0000000020000090 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .data._ZZN8touchgfx8LCD16bpp46enableTextureMapperL8_ARGB8888_NearestNeighborEvE43tm_L8_ARGB8888_NonOpaque_NearestNeighbor_GA + 0x0000000020000094 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .data._ZZN8touchgfx8LCD16bpp46enableTextureMapperL8_ARGB8888_NearestNeighborEvE45tm_L8_ARGB8888_NonOpaque_NearestNeighbor_NoGA + 0x0000000020000098 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .data._ZZN8touchgfx8LCD16bpp48enableTextureMapperRGB565_Opaque_NearestNeighborEvE35tm_RGB565_Opaque_NearestNeighbor_GA + 0x000000002000009c 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .data._ZZN8touchgfx8LCD16bpp48enableTextureMapperRGB565_Opaque_NearestNeighborEvE37tm_RGB565_Opaque_NearestNeighbor_NoGA + 0x00000000200000a0 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .data._ZZN8touchgfx8LCD16bpp49enableTextureMapperARGB8888_BilinearInterpolationEvE46tm_ARGB8888_NonOpaque_BilinearInterpolation_GA + 0x00000000200000a4 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .data._ZZN8touchgfx8LCD16bpp49enableTextureMapperARGB8888_BilinearInterpolationEvE48tm_ARGB8888_NonOpaque_BilinearInterpolation_NoGA + 0x00000000200000a8 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .data._ZZN8touchgfx8LCD16bpp50enableTextureMapperL8_RGB565_BilinearInterpolationEvE44tm_L8_RGB565_Opaque_BilinearInterpolation_GA + 0x00000000200000ac 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .data._ZZN8touchgfx8LCD16bpp50enableTextureMapperL8_RGB565_BilinearInterpolationEvE46tm_L8_RGB565_Opaque_BilinearInterpolation_NoGA + 0x00000000200000b0 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .data._ZZN8touchgfx8LCD16bpp50enableTextureMapperL8_RGB888_BilinearInterpolationEvE44tm_L8_RGB888_Opaque_BilinearInterpolation_GA + 0x00000000200000b4 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .data._ZZN8touchgfx8LCD16bpp50enableTextureMapperL8_RGB888_BilinearInterpolationEvE46tm_L8_RGB888_Opaque_BilinearInterpolation_NoGA + 0x00000000200000b8 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .data._ZZN8touchgfx8LCD16bpp51enableTextureMapperRGB565_NonOpaque_NearestNeighborEvE38tm_RGB565_NonOpaque_NearestNeighbor_GA + 0x00000000200000bc 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .data._ZZN8touchgfx8LCD16bpp51enableTextureMapperRGB565_NonOpaque_NearestNeighborEvE40tm_RGB565_NonOpaque_NearestNeighbor_NoGA + 0x00000000200000c0 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .data._ZZN8touchgfx8LCD16bpp52enableTextureMapperL8_ARGB8888_BilinearInterpolationEvE49tm_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA + 0x00000000200000c4 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .data._ZZN8touchgfx8LCD16bpp52enableTextureMapperL8_ARGB8888_BilinearInterpolationEvE51tm_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA + 0x00000000200000c8 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .data._ZZN8touchgfx8LCD16bpp54enableTextureMapperRGB565_Opaque_BilinearInterpolationEvE41tm_RGB565_Opaque_BilinearInterpolation_GA + 0x00000000200000cc 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .data._ZZN8touchgfx8LCD16bpp54enableTextureMapperRGB565_Opaque_BilinearInterpolationEvE43tm_RGB565_Opaque_BilinearInterpolation_NoGA + 0x00000000200000d0 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .data._ZZN8touchgfx8LCD16bpp57enableTextureMapperRGB565_NonOpaque_BilinearInterpolationEvE44tm_RGB565_NonOpaque_BilinearInterpolation_GA + 0x00000000200000d4 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .data._ZZN8touchgfx8LCD16bpp57enableTextureMapperRGB565_NonOpaque_BilinearInterpolationEvE46tm_RGB565_NonOpaque_BilinearInterpolation_NoGA + 0x00000000200000d8 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .data._ZN10__cxxabiv119__terminate_handlerE + 0x00000000200000dc 0x4 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a(eh_term_handler.o) + 0x00000000200000dc __cxxabiv1::__terminate_handler + .data.__sglue 0x00000000200000e0 0xc C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-findfp.o) + 0x00000000200000e0 __sglue + .data._impure_data + 0x00000000200000ec 0x4c C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-impure.o) + 0x00000000200000ec _impure_data + .data._impure_ptr + 0x0000000020000138 0x4 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-impure.o) + 0x0000000020000138 _impure_ptr + .data.__atexit_recursive_mutex + 0x000000002000013c 0x4 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-__call_atexit.o) + 0x000000002000013c __atexit_recursive_mutex + 0x0000000020000140 . = ALIGN (0x4) + 0x0000000020000140 _edata = . + +.igot.plt 0x0000000020000140 0x0 load address 0x000000000803cce0 + .igot.plt 0x0000000020000140 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard/crtbegin.o + +.RxDecripSection + 0x0000000020000140 0xa0 load address 0x000000000803cce0 + .RxDecripSection + 0x0000000020000140 0xa0 ./Application/User/LWIP/Target/ethernetif.o + 0x0000000020000140 DMARxDscrTab + +.TxDecripSection + 0x00000000200001e0 0xa0 load address 0x000000000803cd80 + .TxDecripSection + 0x00000000200001e0 0xa0 ./Application/User/LWIP/Target/ethernetif.o + 0x00000000200001e0 DMATxDscrTab + 0x0000000020000280 . = ALIGN (0x4) + +.bss 0x0000000020000280 0x1f0e0 load address 0x000000000803ce20 + 0x0000000020000280 _sbss = . + 0x0000000020000280 __bss_start__ = _sbss + *(.bss) + .bss 0x0000000020000280 0x1c C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard/crtbegin.o + *(.bss*) + .bss.Command 0x000000002000029c 0x10 ./Application/User/Core/main.o + .bss.MainTaskHandle + 0x00000000200002ac 0x4 ./Application/User/Core/main.o + 0x00000000200002ac MainTaskHandle + .bss.TouchGFXTaskHandle + 0x00000000200002b0 0x4 ./Application/User/Core/main.o + 0x00000000200002b0 TouchGFXTaskHandle + .bss.defaultTaskHandle + 0x00000000200002b4 0x4 ./Application/User/Core/main.o + 0x00000000200002b4 defaultTaskHandle + .bss.hcrc 0x00000000200002b8 0x24 ./Application/User/Core/main.o + 0x00000000200002b8 hcrc + .bss.hdma2d 0x00000000200002dc 0x40 ./Application/User/Core/main.o + 0x00000000200002dc hdma2d + .bss.hi2c3 0x000000002000031c 0x54 ./Application/User/Core/main.o + 0x000000002000031c hi2c3 + .bss.hltdc 0x0000000020000370 0xa8 ./Application/User/Core/main.o + 0x0000000020000370 hltdc + .bss.hqspi 0x0000000020000418 0x4c ./Application/User/Core/main.o + 0x0000000020000418 hqspi + .bss.hsdram1 0x0000000020000464 0x34 ./Application/User/Core/main.o + 0x0000000020000464 hsdram1 + .bss.htim1 0x0000000020000498 0x4c ./Application/User/Core/main.o + 0x0000000020000498 htim1 + .bss.htim12 0x00000000200004e4 0x4c ./Application/User/Core/main.o + 0x00000000200004e4 htim12 + .bss.htim4 0x0000000020000530 0x4c ./Application/User/Core/main.o + 0x0000000020000530 htim4 + .bss.htim5 0x000000002000057c 0x4c ./Application/User/Core/main.o + 0x000000002000057c htim5 + .bss.pwm_dyc 0x00000000200005c8 0x10 ./Application/User/Core/main.o + 0x00000000200005c8 pwm_dyc + .bss.pwm_period + 0x00000000200005d8 0x10 ./Application/User/Core/main.o + 0x00000000200005d8 pwm_period + .bss.videoTaskHandle + 0x00000000200005e8 0x4 ./Application/User/Core/main.o + 0x00000000200005e8 videoTaskHandle + .bss.FMC_Initialized + 0x00000000200005ec 0x4 ./Application/User/Core/stm32f7xx_hal_msp.o + .bss.htim6 0x00000000200005f0 0x4c ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + 0x00000000200005f0 htim6 + .bss.__sbrk_heap_end + 0x000000002000063c 0x4 ./Application/User/Core/sysmem.o + .bss.attributes + 0x0000000020000640 0x24 ./Application/User/LWIP/App/lwip.o + 0x0000000020000640 attributes + .bss.gnetif 0x0000000020000664 0x38 ./Application/User/LWIP/App/lwip.o + 0x0000000020000664 gnetif + .bss.gw 0x000000002000069c 0x4 ./Application/User/LWIP/App/lwip.o + 0x000000002000069c gw + .bss.ipaddr 0x00000000200006a0 0x4 ./Application/User/LWIP/App/lwip.o + 0x00000000200006a0 ipaddr + .bss.netmask 0x00000000200006a4 0x4 ./Application/User/LWIP/App/lwip.o + 0x00000000200006a4 netmask + .bss.LAN8742 0x00000000200006a8 0x20 ./Application/User/LWIP/Target/ethernetif.o + 0x00000000200006a8 LAN8742 + .bss.RxAllocStatus + 0x00000000200006c8 0x1 ./Application/User/LWIP/Target/ethernetif.o + *fill* 0x00000000200006c9 0x3 + .bss.RxPktSemaphore + 0x00000000200006cc 0x4 ./Application/User/LWIP/Target/ethernetif.o + 0x00000000200006cc RxPktSemaphore + .bss.TxConfig 0x00000000200006d0 0x38 ./Application/User/LWIP/Target/ethernetif.o + 0x00000000200006d0 TxConfig + .bss.TxPktSemaphore + 0x0000000020000708 0x4 ./Application/User/LWIP/Target/ethernetif.o + 0x0000000020000708 TxPktSemaphore + .bss.heth 0x000000002000070c 0xb0 ./Application/User/LWIP/Target/ethernetif.o + 0x000000002000070c heth + .bss.memp_memory_RX_POOL_base + 0x00000000200007bc 0x4983 ./Application/User/LWIP/Target/ethernetif.o + 0x00000000200007bc memp_memory_RX_POOL_base + *fill* 0x000000002000513f 0x1 + .bss.memp_tab_RX_POOL + 0x0000000020005140 0x4 ./Application/User/LWIP/Target/ethernetif.o + .bss._ZL8tsDriver + 0x0000000020005144 0x4 ./Application/User/TouchGFX/target/STM32TouchController.o + .bss._ZL19GPIO_InvertedLevels + 0x0000000020005148 0x10 ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .bss.instrumentation + 0x0000000020005158 0xc ./Application/User/TouchGFX/target/TouchGFXHAL.o + 0x0000000020005158 instrumentation + .bss._ZL11vsync_queue + 0x0000000020005164 0x4 ./Application/User/TouchGFX/target/generated/OSWrappers.o + .bss._ZL16frame_buffer_sem + 0x0000000020005168 0x4 ./Application/User/TouchGFX/target/generated/OSWrappers.o + .bss._ZGVZN12FrontendHeap11getInstanceEvE8instance + 0x000000002000516c 0x4 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + 0x000000002000516c guard variable for FrontendHeap::getInstance()::instance + .bss._ZZN12FrontendHeap11getInstanceEvE8instance + 0x0000000020005170 0x1288 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + 0x0000000020005170 FrontendHeap::getInstance()::instance + .bss._ZL2tc 0x00000000200063f8 0x4 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .bss._ZL3dma 0x00000000200063fc 0xda0 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .bss._ZL3hal 0x000000002000719c 0x7c ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .bss._ZL5texts + 0x0000000020007218 0x1 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + *fill* 0x0000000020007219 0x3 + .bss._ZL7display + 0x000000002000721c 0x84 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .bss._ZN12_GLOBAL__N_1L18lcd_int_porch_lineE + 0x00000000200072a0 0x2 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .bss._ZN12_GLOBAL__N_1L19lcd_int_active_lineE + 0x00000000200072a2 0x2 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .bss.lineBuffer + 0x00000000200072a4 0x780 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + 0x00000000200072a4 lineBuffer + .bss.mjpegdecoder1 + 0x0000000020007a24 0x48 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + 0x0000000020007a24 mjpegdecoder1 + .bss.videoController + 0x0000000020007a6c 0x58 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + 0x0000000020007a6c videoController + .bss._ZGVZ23getFont_verdana_10_4bppvE15verdana_10_4bpp + 0x0000000020007ac4 0x4 ./Application/User/generated/Table_verdana_10_4bpp.o + .bss._ZZ23getFont_verdana_10_4bppvE15verdana_10_4bpp + 0x0000000020007ac8 0x2c ./Application/User/generated/Table_verdana_10_4bpp.o + .bss._ZGVZ23getFont_verdana_20_4bppvE15verdana_20_4bpp + 0x0000000020007af4 0x4 ./Application/User/generated/Table_verdana_20_4bpp.o + .bss._ZZ23getFont_verdana_20_4bppvE15verdana_20_4bpp + 0x0000000020007af8 0x2c ./Application/User/generated/Table_verdana_20_4bpp.o + .bss._ZGVZ23getFont_verdana_40_4bppvE15verdana_40_4bpp + 0x0000000020007b24 0x4 ./Application/User/generated/Table_verdana_40_4bpp.o + .bss._ZZ23getFont_verdana_40_4bppvE15verdana_40_4bpp + 0x0000000020007b28 0x2c ./Application/User/generated/Table_verdana_40_4bpp.o + .bss._ZL14languagesArray + 0x0000000020007b54 0x4 ./Application/User/generated/Texts.o + .bss._ZL18currentLanguagePtr + 0x0000000020007b58 0x4 ./Application/User/generated/Texts.o + .bss._ZL22currentLanguageIndices + 0x0000000020007b5c 0x4 ./Application/User/generated/Texts.o + .bss._ZN8touchgfx5Texts15currentLanguageE + 0x0000000020007b60 0x2 ./Application/User/generated/Texts.o + 0x0000000020007b60 touchgfx::Texts::currentLanguage + *fill* 0x0000000020007b62 0x2 + .bss.touchgfx_fonts + 0x0000000020007b64 0xc ./Application/User/generated/TypedTextDatabase.o + 0x0000000020007b64 touchgfx_fonts + .bss.QSPIHandle + 0x0000000020007b70 0x4c ./Drivers/BSP/stm32746g_discovery_qspi.o + 0x0000000020007b70 QSPIHandle + .bss.coord.0 0x0000000020007bbc 0x2 ./Drivers/Components/ft5336.o + .bss.ft5336_handle + 0x0000000020007bbe 0x3 ./Drivers/Components/ft5336.o + *fill* 0x0000000020007bc1 0x3 + .bss.uwTick 0x0000000020007bc4 0x4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + 0x0000000020007bc4 uwTick + .bss.Idle_Stack + 0x0000000020007bc8 0x200 ./Middlewares/FreeRTOS/cmsis_os2.o + .bss.Idle_TCB 0x0000000020007dc8 0x60 ./Middlewares/FreeRTOS/cmsis_os2.o + .bss.KernelState + 0x0000000020007e28 0x4 ./Middlewares/FreeRTOS/cmsis_os2.o + .bss.Timer_Stack + 0x0000000020007e2c 0x400 ./Middlewares/FreeRTOS/cmsis_os2.o + .bss.Timer_TCB + 0x000000002000822c 0x60 ./Middlewares/FreeRTOS/cmsis_os2.o + .bss.pxEnd 0x000000002000828c 0x4 ./Middlewares/FreeRTOS/heap_4.o + .bss.ucHeap 0x0000000020008290 0x124f8 ./Middlewares/FreeRTOS/heap_4.o + .bss.xBlockAllocatedBit + 0x000000002001a788 0x4 ./Middlewares/FreeRTOS/heap_4.o + .bss.xFreeBytesRemaining + 0x000000002001a78c 0x4 ./Middlewares/FreeRTOS/heap_4.o + .bss.xMinimumEverFreeBytesRemaining + 0x000000002001a790 0x4 ./Middlewares/FreeRTOS/heap_4.o + .bss.xStart 0x000000002001a794 0x8 ./Middlewares/FreeRTOS/heap_4.o + .bss.ucMaxSysCallPriority + 0x000000002001a79c 0x1 ./Middlewares/FreeRTOS/port.o + *fill* 0x000000002001a79d 0x3 + .bss.ulMaxPRIGROUPValue + 0x000000002001a7a0 0x4 ./Middlewares/FreeRTOS/port.o + .bss.xQueueRegistry + 0x000000002001a7a4 0x40 ./Middlewares/FreeRTOS/queue.o + 0x000000002001a7a4 xQueueRegistry + .bss.pxCurrentTCB + 0x000000002001a7e4 0x4 ./Middlewares/FreeRTOS/tasks.o + 0x000000002001a7e4 pxCurrentTCB + .bss.pxDelayedTaskList + 0x000000002001a7e8 0x4 ./Middlewares/FreeRTOS/tasks.o + .bss.pxOverflowDelayedTaskList + 0x000000002001a7ec 0x4 ./Middlewares/FreeRTOS/tasks.o + .bss.pxReadyTasksLists + 0x000000002001a7f0 0x460 ./Middlewares/FreeRTOS/tasks.o + .bss.uxCurrentNumberOfTasks + 0x000000002001ac50 0x4 ./Middlewares/FreeRTOS/tasks.o + .bss.uxDeletedTasksWaitingCleanUp + 0x000000002001ac54 0x4 ./Middlewares/FreeRTOS/tasks.o + .bss.uxPendedTicks + 0x000000002001ac58 0x4 ./Middlewares/FreeRTOS/tasks.o + .bss.uxSchedulerSuspended + 0x000000002001ac5c 0x4 ./Middlewares/FreeRTOS/tasks.o + .bss.uxTaskNumber + 0x000000002001ac60 0x4 ./Middlewares/FreeRTOS/tasks.o + .bss.uxTopReadyPriority + 0x000000002001ac64 0x4 ./Middlewares/FreeRTOS/tasks.o + .bss.xDelayedTaskList1 + 0x000000002001ac68 0x14 ./Middlewares/FreeRTOS/tasks.o + .bss.xDelayedTaskList2 + 0x000000002001ac7c 0x14 ./Middlewares/FreeRTOS/tasks.o + .bss.xNextTaskUnblockTime + 0x000000002001ac90 0x4 ./Middlewares/FreeRTOS/tasks.o + .bss.xNumOfOverflows + 0x000000002001ac94 0x4 ./Middlewares/FreeRTOS/tasks.o + .bss.xPendingReadyList + 0x000000002001ac98 0x14 ./Middlewares/FreeRTOS/tasks.o + .bss.xSchedulerRunning + 0x000000002001acac 0x4 ./Middlewares/FreeRTOS/tasks.o + .bss.xSuspendedTaskList + 0x000000002001acb0 0x14 ./Middlewares/FreeRTOS/tasks.o + .bss.xTasksWaitingTermination + 0x000000002001acc4 0x14 ./Middlewares/FreeRTOS/tasks.o + .bss.xTickCount + 0x000000002001acd8 0x4 ./Middlewares/FreeRTOS/tasks.o + .bss.xYieldPending + 0x000000002001acdc 0x4 ./Middlewares/FreeRTOS/tasks.o + .bss.pxCurrentTimerList + 0x000000002001ace0 0x4 ./Middlewares/FreeRTOS/timers.o + .bss.pxOverflowTimerList + 0x000000002001ace4 0x4 ./Middlewares/FreeRTOS/timers.o + .bss.ucStaticTimerQueueStorage.1 + 0x000000002001ace8 0xa0 ./Middlewares/FreeRTOS/timers.o + .bss.xActiveTimerList1 + 0x000000002001ad88 0x14 ./Middlewares/FreeRTOS/timers.o + .bss.xActiveTimerList2 + 0x000000002001ad9c 0x14 ./Middlewares/FreeRTOS/timers.o + .bss.xLastTime.2 + 0x000000002001adb0 0x4 ./Middlewares/FreeRTOS/timers.o + .bss.xStaticTimerQueue.0 + 0x000000002001adb4 0x50 ./Middlewares/FreeRTOS/timers.o + .bss.xTimerQueue + 0x000000002001ae04 0x4 ./Middlewares/FreeRTOS/timers.o + .bss.xTimerTaskHandle + 0x000000002001ae08 0x4 ./Middlewares/FreeRTOS/timers.o + .bss.dhcp_pcb 0x000000002001ae0c 0x4 ./Middlewares/LwIP/dhcp.o + .bss.dhcp_pcb_refcount + 0x000000002001ae10 0x1 ./Middlewares/LwIP/dhcp.o + .bss.dhcp_rx_options_given + 0x000000002001ae11 0x8 ./Middlewares/LwIP/dhcp.o + 0x000000002001ae11 dhcp_rx_options_given + *fill* 0x000000002001ae19 0x3 + .bss.dhcp_rx_options_val + 0x000000002001ae1c 0x20 ./Middlewares/LwIP/dhcp.o + 0x000000002001ae1c dhcp_rx_options_val + .bss.xid.0 0x000000002001ae3c 0x4 ./Middlewares/LwIP/dhcp.o + .bss.arp_table + 0x000000002001ae40 0xf0 ./Middlewares/LwIP/etharp.o + .bss.etharp_cached_entry + 0x000000002001af30 0x1 ./Middlewares/LwIP/etharp.o + *fill* 0x000000002001af31 0x3 + .bss.ip_data 0x000000002001af34 0x18 ./Middlewares/LwIP/ip.o + 0x000000002001af34 ip_data + .bss.ip_id 0x000000002001af4c 0x2 ./Middlewares/LwIP/ip4.o + .bss.ip_reass_pbufcount + 0x000000002001af4e 0x2 ./Middlewares/LwIP/ip4_frag.o + .bss.reassdatagrams + 0x000000002001af50 0x4 ./Middlewares/LwIP/ip4_frag.o + .bss.lfree 0x000000002001af54 0x4 ./Middlewares/LwIP/mem.o + .bss.mem_mutex + 0x000000002001af58 0x4 ./Middlewares/LwIP/mem.o + .bss.ram 0x000000002001af5c 0x4 ./Middlewares/LwIP/mem.o + .bss.ram_end 0x000000002001af60 0x4 ./Middlewares/LwIP/mem.o + .bss.ram_heap 0x000000002001af64 0x653 ./Middlewares/LwIP/mem.o + 0x000000002001af64 ram_heap + .bss.memp_memory_FRAG_PBUF_base + 0x000000002001b5b7 0x16b ./Middlewares/LwIP/memp.o + 0x000000002001b5b7 memp_memory_FRAG_PBUF_base + .bss.memp_memory_NETBUF_base + 0x000000002001b722 0x23 ./Middlewares/LwIP/memp.o + 0x000000002001b722 memp_memory_NETBUF_base + .bss.memp_memory_NETCONN_base + 0x000000002001b745 0xa3 ./Middlewares/LwIP/memp.o + 0x000000002001b745 memp_memory_NETCONN_base + .bss.memp_memory_PBUF_POOL_base + 0x000000002001b7e8 0x2603 ./Middlewares/LwIP/memp.o + 0x000000002001b7e8 memp_memory_PBUF_POOL_base + .bss.memp_memory_PBUF_base + 0x000000002001ddeb 0x103 ./Middlewares/LwIP/memp.o + 0x000000002001ddeb memp_memory_PBUF_base + .bss.memp_memory_REASSDATA_base + 0x000000002001deee 0xa3 ./Middlewares/LwIP/memp.o + 0x000000002001deee memp_memory_REASSDATA_base + .bss.memp_memory_SYS_TIMEOUT_base + 0x000000002001df91 0x53 ./Middlewares/LwIP/memp.o + 0x000000002001df91 memp_memory_SYS_TIMEOUT_base + .bss.memp_memory_TCPIP_MSG_API_base + 0x000000002001dfe4 0x83 ./Middlewares/LwIP/memp.o + 0x000000002001dfe4 memp_memory_TCPIP_MSG_API_base + .bss.memp_memory_TCPIP_MSG_INPKT_base + 0x000000002001e067 0x83 ./Middlewares/LwIP/memp.o + 0x000000002001e067 memp_memory_TCPIP_MSG_INPKT_base + .bss.memp_memory_TCP_PCB_LISTEN_base + 0x000000002001e0ea 0xe3 ./Middlewares/LwIP/memp.o + 0x000000002001e0ea memp_memory_TCP_PCB_LISTEN_base + .bss.memp_memory_TCP_PCB_base + 0x000000002001e1cd 0x30f ./Middlewares/LwIP/memp.o + 0x000000002001e1cd memp_memory_TCP_PCB_base + .bss.memp_memory_TCP_SEG_base + 0x000000002001e4dc 0x103 ./Middlewares/LwIP/memp.o + 0x000000002001e4dc memp_memory_TCP_SEG_base + .bss.memp_memory_UDP_PCB_base + 0x000000002001e5df 0x83 ./Middlewares/LwIP/memp.o + 0x000000002001e5df memp_memory_UDP_PCB_base + *fill* 0x000000002001e662 0x2 + .bss.memp_tab_FRAG_PBUF + 0x000000002001e664 0x4 ./Middlewares/LwIP/memp.o + .bss.memp_tab_NETBUF + 0x000000002001e668 0x4 ./Middlewares/LwIP/memp.o + .bss.memp_tab_NETCONN + 0x000000002001e66c 0x4 ./Middlewares/LwIP/memp.o + .bss.memp_tab_PBUF + 0x000000002001e670 0x4 ./Middlewares/LwIP/memp.o + .bss.memp_tab_PBUF_POOL + 0x000000002001e674 0x4 ./Middlewares/LwIP/memp.o + .bss.memp_tab_REASSDATA + 0x000000002001e678 0x4 ./Middlewares/LwIP/memp.o + .bss.memp_tab_SYS_TIMEOUT + 0x000000002001e67c 0x4 ./Middlewares/LwIP/memp.o + .bss.memp_tab_TCPIP_MSG_API + 0x000000002001e680 0x4 ./Middlewares/LwIP/memp.o + .bss.memp_tab_TCPIP_MSG_INPKT + 0x000000002001e684 0x4 ./Middlewares/LwIP/memp.o + .bss.memp_tab_TCP_PCB + 0x000000002001e688 0x4 ./Middlewares/LwIP/memp.o + .bss.memp_tab_TCP_PCB_LISTEN + 0x000000002001e68c 0x4 ./Middlewares/LwIP/memp.o + .bss.memp_tab_TCP_SEG + 0x000000002001e690 0x4 ./Middlewares/LwIP/memp.o + .bss.memp_tab_UDP_PCB + 0x000000002001e694 0x4 ./Middlewares/LwIP/memp.o + .bss.netif_default + 0x000000002001e698 0x4 ./Middlewares/LwIP/netif.o + 0x000000002001e698 netif_default + .bss.netif_list + 0x000000002001e69c 0x4 ./Middlewares/LwIP/netif.o + 0x000000002001e69c netif_list + .bss.netif_num + 0x000000002001e6a0 0x1 ./Middlewares/LwIP/netif.o + .bss.pbuf_free_ooseq_pending + 0x000000002001e6a1 0x1 ./Middlewares/LwIP/pbuf.o + 0x000000002001e6a1 pbuf_free_ooseq_pending + *fill* 0x000000002001e6a2 0x2 + .bss.errno 0x000000002001e6a4 0x4 ./Middlewares/LwIP/sys_arch.o + 0x000000002001e6a4 errno + .bss.lwip_sys_mutex + 0x000000002001e6a8 0x4 ./Middlewares/LwIP/sys_arch.o + 0x000000002001e6a8 lwip_sys_mutex + .bss.tcp_active_pcbs + 0x000000002001e6ac 0x4 ./Middlewares/LwIP/tcp.o + 0x000000002001e6ac tcp_active_pcbs + .bss.tcp_active_pcbs_changed + 0x000000002001e6b0 0x1 ./Middlewares/LwIP/tcp.o + 0x000000002001e6b0 tcp_active_pcbs_changed + *fill* 0x000000002001e6b1 0x3 + .bss.tcp_bound_pcbs + 0x000000002001e6b4 0x4 ./Middlewares/LwIP/tcp.o + 0x000000002001e6b4 tcp_bound_pcbs + .bss.tcp_listen_pcbs + 0x000000002001e6b8 0x4 ./Middlewares/LwIP/tcp.o + 0x000000002001e6b8 tcp_listen_pcbs + .bss.tcp_ticks + 0x000000002001e6bc 0x4 ./Middlewares/LwIP/tcp.o + 0x000000002001e6bc tcp_ticks + .bss.tcp_timer + 0x000000002001e6c0 0x1 ./Middlewares/LwIP/tcp.o + .bss.tcp_timer_ctr + 0x000000002001e6c1 0x1 ./Middlewares/LwIP/tcp.o + *fill* 0x000000002001e6c2 0x2 + .bss.tcp_tw_pcbs + 0x000000002001e6c4 0x4 ./Middlewares/LwIP/tcp.o + 0x000000002001e6c4 tcp_tw_pcbs + .bss.ackno 0x000000002001e6c8 0x4 ./Middlewares/LwIP/tcp_in.o + .bss.flags 0x000000002001e6cc 0x1 ./Middlewares/LwIP/tcp_in.o + *fill* 0x000000002001e6cd 0x3 + .bss.inseg 0x000000002001e6d0 0x10 ./Middlewares/LwIP/tcp_in.o + .bss.recv_acked + 0x000000002001e6e0 0x2 ./Middlewares/LwIP/tcp_in.o + *fill* 0x000000002001e6e2 0x2 + .bss.recv_data + 0x000000002001e6e4 0x4 ./Middlewares/LwIP/tcp_in.o + .bss.recv_flags + 0x000000002001e6e8 0x1 ./Middlewares/LwIP/tcp_in.o + *fill* 0x000000002001e6e9 0x3 + .bss.seqno 0x000000002001e6ec 0x4 ./Middlewares/LwIP/tcp_in.o + .bss.tcp_input_pcb + 0x000000002001e6f0 0x4 ./Middlewares/LwIP/tcp_in.o + 0x000000002001e6f0 tcp_input_pcb + .bss.tcp_optidx + 0x000000002001e6f4 0x2 ./Middlewares/LwIP/tcp_in.o + *fill* 0x000000002001e6f6 0x2 + .bss.tcphdr 0x000000002001e6f8 0x4 ./Middlewares/LwIP/tcp_in.o + .bss.tcphdr_opt1len + 0x000000002001e6fc 0x2 ./Middlewares/LwIP/tcp_in.o + *fill* 0x000000002001e6fe 0x2 + .bss.tcphdr_opt2 + 0x000000002001e700 0x4 ./Middlewares/LwIP/tcp_in.o + .bss.tcphdr_optlen + 0x000000002001e704 0x2 ./Middlewares/LwIP/tcp_in.o + .bss.tcplen 0x000000002001e706 0x2 ./Middlewares/LwIP/tcp_in.o + .bss.lock_tcpip_core + 0x000000002001e708 0x4 ./Middlewares/LwIP/tcpip.o + 0x000000002001e708 lock_tcpip_core + .bss.tcpip_init_done + 0x000000002001e70c 0x4 ./Middlewares/LwIP/tcpip.o + .bss.tcpip_init_done_arg + 0x000000002001e710 0x4 ./Middlewares/LwIP/tcpip.o + .bss.tcpip_mbox + 0x000000002001e714 0x4 ./Middlewares/LwIP/tcpip.o + .bss.current_timeout_due_time + 0x000000002001e718 0x4 ./Middlewares/LwIP/timeouts.o + .bss.next_timeout + 0x000000002001e71c 0x4 ./Middlewares/LwIP/timeouts.o + .bss.tcpip_tcp_timer_active + 0x000000002001e720 0x4 ./Middlewares/LwIP/timeouts.o + .bss.udp_pcbs 0x000000002001e724 0x4 ./Middlewares/LwIP/udp.o + 0x000000002001e724 udp_pcbs + .bss._ZN8touchgfx3HAL13DISPLAY_WIDTHE + 0x000000002001e728 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + 0x000000002001e728 touchgfx::HAL::DISPLAY_WIDTH + .bss._ZN8touchgfx3HAL14DISPLAY_HEIGHTE + 0x000000002001e72a 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + 0x000000002001e72a touchgfx::HAL::DISPLAY_HEIGHT + .bss._ZN8touchgfx3HAL16DISPLAY_ROTATIONE + 0x000000002001e72c 0x1 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + 0x000000002001e72c touchgfx::HAL::DISPLAY_ROTATION + *fill* 0x000000002001e72d 0x1 + .bss._ZN8touchgfx3HAL18FRAME_BUFFER_WIDTHE + 0x000000002001e72e 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + 0x000000002001e72e touchgfx::HAL::FRAME_BUFFER_WIDTH + .bss._ZN8touchgfx3HAL19FRAME_BUFFER_HEIGHTE + 0x000000002001e730 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + 0x000000002001e730 touchgfx::HAL::FRAME_BUFFER_HEIGHT + .bss._ZN8touchgfx3HAL20USE_DOUBLE_BUFFERINGE + 0x000000002001e732 0x1 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + 0x000000002001e732 touchgfx::HAL::USE_DOUBLE_BUFFERING + .bss._ZN8touchgfx3HAL21USE_ANIMATION_STORAGEE + 0x000000002001e733 0x1 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + 0x000000002001e733 touchgfx::HAL::USE_ANIMATION_STORAGE + .bss._ZN8touchgfx3HAL8instanceE + 0x000000002001e734 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + 0x000000002001e734 touchgfx::HAL::instance + .bss._ZN8touchgfx3HAL9isDrawingE + 0x000000002001e738 0x1 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + 0x000000002001e738 touchgfx::HAL::isDrawing + .bss._ZZN8touchgfx3HAL4tickEvE12touchTickCnt + 0x000000002001e739 0x1 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + *fill* 0x000000002001e73a 0x2 + .bss._ZN8touchgfx3LCD12defaultColorE + 0x000000002001e73c 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD.o) + 0x000000002001e73c touchgfx::LCD::defaultColor + .bss._ZN8touchgfx16TouchCalibration6matrixE + 0x000000002001e740 0x2c C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TouchCalibration.o) + 0x000000002001e740 touchgfx::TouchCalibration::matrix + .bss._ZN8touchgfx11Application12debugPrinterE + 0x000000002001e76c 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Application.o) + 0x000000002001e76c touchgfx::Application::debugPrinter + .bss._ZN8touchgfx11Application13currentScreenE + 0x000000002001e770 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Application.o) + 0x000000002001e770 touchgfx::Application::currentScreen + .bss._ZN8touchgfx11Application17currentTransitionE + 0x000000002001e774 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Application.o) + 0x000000002001e774 touchgfx::Application::currentTransition + .bss._ZN8touchgfx11Application22debugRegionInvalidRectE + 0x000000002001e778 0x8 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Application.o) + 0x000000002001e778 touchgfx::Application::debugRegionInvalidRect + .bss._ZN8touchgfx11Application8instanceE + 0x000000002001e780 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Application.o) + 0x000000002001e780 touchgfx::Application::instance + .bss._ZN8touchgfx9TypedText10typedTextsE + 0x000000002001e784 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TypedText.o) + 0x000000002001e784 touchgfx::TypedText::typedTexts + .bss._ZN8touchgfx9TypedText18numberOfTypedTextsE + 0x000000002001e788 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TypedText.o) + 0x000000002001e788 touchgfx::TypedText::numberOfTypedTexts + *fill* 0x000000002001e78a 0x2 + .bss._ZN8touchgfx9TypedText5fontsE + 0x000000002001e78c 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TypedText.o) + 0x000000002001e78c touchgfx::TypedText::fonts + .bss._ZN8touchgfx9TypedText5textsE + 0x000000002001e790 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TypedText.o) + 0x000000002001e790 touchgfx::TypedText::texts + .bss._ZN8touchgfx11FontManager8providerE + 0x000000002001e794 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(FontManager.o) + 0x000000002001e794 touchgfx::FontManager::provider + .bss._ZN8touchgfx6Bitmap10cacheTableE + 0x000000002001e798 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + 0x000000002001e798 touchgfx::Bitmap::cacheTable + .bss._ZN8touchgfx6Bitmap10dynBitmapsE + 0x000000002001e79c 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + 0x000000002001e79c touchgfx::Bitmap::dynBitmaps + .bss._ZN8touchgfx6Bitmap11totalMemoryE + 0x000000002001e7a0 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + 0x000000002001e7a0 touchgfx::Bitmap::totalMemory + .bss._ZN8touchgfx6Bitmap12nextFreeDataE + 0x000000002001e7a4 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + 0x000000002001e7a4 touchgfx::Bitmap::nextFreeData + .bss._ZN8touchgfx6Bitmap13uncachedCountE + 0x000000002001e7a8 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + 0x000000002001e7a8 touchgfx::Bitmap::uncachedCount + *fill* 0x000000002001e7aa 0x2 + .bss._ZN8touchgfx6Bitmap15allocationTableE + 0x000000002001e7ac 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + 0x000000002001e7ac touchgfx::Bitmap::allocationTable + .bss._ZN8touchgfx6Bitmap15memoryRemainingE + 0x000000002001e7b0 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + 0x000000002001e7b0 touchgfx::Bitmap::memoryRemaining + .bss._ZN8touchgfx6Bitmap15numberOfBitmapsE + 0x000000002001e7b4 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + 0x000000002001e7b4 touchgfx::Bitmap::numberOfBitmaps + .bss._ZN8touchgfx6Bitmap19nextAllocationIndexE + 0x000000002001e7b6 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + 0x000000002001e7b6 touchgfx::Bitmap::nextAllocationIndex + .bss._ZN8touchgfx6Bitmap22numberOfDynamicBitmapsE + 0x000000002001e7b8 0x2 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + 0x000000002001e7b8 touchgfx::Bitmap::numberOfDynamicBitmaps + *fill* 0x000000002001e7ba 0x2 + .bss._ZN8touchgfx6Bitmap7bitmapsE + 0x000000002001e7bc 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + 0x000000002001e7bc touchgfx::Bitmap::bitmaps + .bss._ZGVZN8touchgfx8LCD16bpp23enableDecompressorL8_L4EvE11decompL8_L4 + 0x000000002001e7c0 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .bss._ZGVZN8touchgfx8LCD16bpp24enableDecompressorL8_RLEEvE12decompL8_RLE + 0x000000002001e7c4 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .bss._ZGVZN8touchgfx8LCD16bpp25enableDecompressorL8_LZW9EvE13decompL8_LZW9 + 0x000000002001e7c8 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .bss._ZGVZN8touchgfx8LCD16bpp37enableTextureMapperA4_NearestNeighborEvE24tm_A4_NearestNeighbor_GA + 0x000000002001e7cc 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .bss._ZGVZN8touchgfx8LCD16bpp37enableTextureMapperA4_NearestNeighborEvE26tm_A4_NearestNeighbor_NoGA + 0x000000002001e7d0 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .bss._ZGVZN8touchgfx8LCD16bpp43enableTextureMapperA4_BilinearInterpolationEvE30tm_A4_BilinearInterpolation_GA + 0x000000002001e7d4 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .bss._ZGVZN8touchgfx8LCD16bpp43enableTextureMapperA4_BilinearInterpolationEvE32tm_A4_BilinearInterpolation_NoGA + 0x000000002001e7d8 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .bss._ZGVZN8touchgfx8LCD16bpp43enableTextureMapperARGB8888_NearestNeighborEvE40tm_ARGB8888_NonOpaque_NearestNeighbor_GA + 0x000000002001e7dc 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .bss._ZGVZN8touchgfx8LCD16bpp43enableTextureMapperARGB8888_NearestNeighborEvE42tm_ARGB8888_NonOpaque_NearestNeighbor_NoGA + 0x000000002001e7e0 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .bss._ZGVZN8touchgfx8LCD16bpp44enableTextureMapperL8_RGB565_NearestNeighborEvE38tm_L8_RGB565_Opaque_NearestNeighbor_GA + 0x000000002001e7e4 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .bss._ZGVZN8touchgfx8LCD16bpp44enableTextureMapperL8_RGB565_NearestNeighborEvE40tm_L8_RGB565_Opaque_NearestNeighbor_NoGA + 0x000000002001e7e8 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .bss._ZGVZN8touchgfx8LCD16bpp44enableTextureMapperL8_RGB888_NearestNeighborEvE38tm_L8_RGB888_Opaque_NearestNeighbor_GA + 0x000000002001e7ec 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .bss._ZGVZN8touchgfx8LCD16bpp44enableTextureMapperL8_RGB888_NearestNeighborEvE40tm_L8_RGB888_Opaque_NearestNeighbor_NoGA + 0x000000002001e7f0 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .bss._ZGVZN8touchgfx8LCD16bpp46enableTextureMapperL8_ARGB8888_NearestNeighborEvE43tm_L8_ARGB8888_NonOpaque_NearestNeighbor_GA + 0x000000002001e7f4 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .bss._ZGVZN8touchgfx8LCD16bpp46enableTextureMapperL8_ARGB8888_NearestNeighborEvE45tm_L8_ARGB8888_NonOpaque_NearestNeighbor_NoGA + 0x000000002001e7f8 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .bss._ZGVZN8touchgfx8LCD16bpp48enableTextureMapperRGB565_Opaque_NearestNeighborEvE35tm_RGB565_Opaque_NearestNeighbor_GA + 0x000000002001e7fc 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .bss._ZGVZN8touchgfx8LCD16bpp48enableTextureMapperRGB565_Opaque_NearestNeighborEvE37tm_RGB565_Opaque_NearestNeighbor_NoGA + 0x000000002001e800 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .bss._ZGVZN8touchgfx8LCD16bpp49enableTextureMapperARGB8888_BilinearInterpolationEvE46tm_ARGB8888_NonOpaque_BilinearInterpolation_GA + 0x000000002001e804 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .bss._ZGVZN8touchgfx8LCD16bpp49enableTextureMapperARGB8888_BilinearInterpolationEvE48tm_ARGB8888_NonOpaque_BilinearInterpolation_NoGA + 0x000000002001e808 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .bss._ZGVZN8touchgfx8LCD16bpp50enableTextureMapperL8_RGB565_BilinearInterpolationEvE44tm_L8_RGB565_Opaque_BilinearInterpolation_GA + 0x000000002001e80c 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .bss._ZGVZN8touchgfx8LCD16bpp50enableTextureMapperL8_RGB565_BilinearInterpolationEvE46tm_L8_RGB565_Opaque_BilinearInterpolation_NoGA + 0x000000002001e810 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .bss._ZGVZN8touchgfx8LCD16bpp50enableTextureMapperL8_RGB888_BilinearInterpolationEvE44tm_L8_RGB888_Opaque_BilinearInterpolation_GA + 0x000000002001e814 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .bss._ZGVZN8touchgfx8LCD16bpp50enableTextureMapperL8_RGB888_BilinearInterpolationEvE46tm_L8_RGB888_Opaque_BilinearInterpolation_NoGA + 0x000000002001e818 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .bss._ZGVZN8touchgfx8LCD16bpp51enableTextureMapperRGB565_NonOpaque_NearestNeighborEvE38tm_RGB565_NonOpaque_NearestNeighbor_GA + 0x000000002001e81c 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .bss._ZGVZN8touchgfx8LCD16bpp51enableTextureMapperRGB565_NonOpaque_NearestNeighborEvE40tm_RGB565_NonOpaque_NearestNeighbor_NoGA + 0x000000002001e820 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .bss._ZGVZN8touchgfx8LCD16bpp52enableTextureMapperL8_ARGB8888_BilinearInterpolationEvE49tm_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA + 0x000000002001e824 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .bss._ZGVZN8touchgfx8LCD16bpp52enableTextureMapperL8_ARGB8888_BilinearInterpolationEvE51tm_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA + 0x000000002001e828 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .bss._ZGVZN8touchgfx8LCD16bpp54enableTextureMapperRGB565_Opaque_BilinearInterpolationEvE41tm_RGB565_Opaque_BilinearInterpolation_GA + 0x000000002001e82c 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .bss._ZGVZN8touchgfx8LCD16bpp54enableTextureMapperRGB565_Opaque_BilinearInterpolationEvE43tm_RGB565_Opaque_BilinearInterpolation_NoGA + 0x000000002001e830 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .bss._ZGVZN8touchgfx8LCD16bpp57enableTextureMapperRGB565_NonOpaque_BilinearInterpolationEvE44tm_RGB565_NonOpaque_BilinearInterpolation_GA + 0x000000002001e834 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .bss._ZGVZN8touchgfx8LCD16bpp57enableTextureMapperRGB565_NonOpaque_BilinearInterpolationEvE46tm_RGB565_NonOpaque_BilinearInterpolation_NoGA + 0x000000002001e838 0x4 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .bss._ZZN8touchgfx8LCD16bpp25enableDecompressorL8_LZW9EvE13decompL8_LZW9 + 0x000000002001e83c 0x844 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .bss.__malloc_free_list + 0x000000002001f080 0x4 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-mallocr.o) + 0x000000002001f080 __malloc_free_list + .bss.__malloc_sbrk_start + 0x000000002001f084 0x4 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-mallocr.o) + 0x000000002001f084 __malloc_sbrk_start + .bss.__sf 0x000000002001f088 0x138 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-findfp.o) + 0x000000002001f088 __sf + .bss.__stdio_exit_handler + 0x000000002001f1c0 0x4 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-findfp.o) + 0x000000002001f1c0 __stdio_exit_handler + .bss.__lock___atexit_recursive_mutex + 0x000000002001f1c4 0x1 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-lock.o) + 0x000000002001f1c4 __lock___atexit_recursive_mutex + .bss.__lock___malloc_recursive_mutex + 0x000000002001f1c5 0x1 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-lock.o) + 0x000000002001f1c5 __lock___malloc_recursive_mutex + .bss.__lock___sfp_recursive_mutex + 0x000000002001f1c6 0x1 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-lock.o) + 0x000000002001f1c6 __lock___sfp_recursive_mutex + *fill* 0x000000002001f1c7 0x1 + .bss.__atexit0 + 0x000000002001f1c8 0x8c C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-__atexit.o) + 0x000000002001f1c8 __atexit0 + .bss.__atexit 0x000000002001f254 0x4 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-__call_atexit.o) + 0x000000002001f254 __atexit + .bss._on_exit_args_instance + 0x000000002001f258 0x108 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-on_exit_args.o) + *(COMMON) + 0x000000002001f360 . = ALIGN (0x4) + 0x000000002001f360 _ebss = . + 0x000000002001f360 __bss_end__ = _ebss + +._user_heap_stack + 0x000000002001f360 0x1400 load address 0x000000000803ce20 + 0x000000002001f360 . = ALIGN (0x8) + [!provide] PROVIDE (end = .) + 0x000000002001f360 PROVIDE (_end = .) + 0x000000002001fd60 . = (. + _Min_Heap_Size) + *fill* 0x000000002001f360 0xa00 + 0x0000000020020760 . = (. + _Min_Stack_Size) + *fill* 0x000000002001fd60 0xa00 + 0x0000000020020760 . = ALIGN (0x8) + +/DISCARD/ + libc.a(*) + libm.a(*) + libgcc.a(*) + +.ARM.attributes + 0x0000000000000000 0x30 + *(.ARM.attributes) + .ARM.attributes + 0x0000000000000000 0x1e C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard/crti.o + .ARM.attributes + 0x000000000000001e 0x34 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard/crtbegin.o + .ARM.attributes + 0x0000000000000052 0x34 ./Application/User/Core/freertos.o + .ARM.attributes + 0x0000000000000086 0x34 ./Application/User/Core/main.o + .ARM.attributes + 0x00000000000000ba 0x34 ./Application/User/Core/stm32f7xx_hal_msp.o + .ARM.attributes + 0x00000000000000ee 0x34 ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .ARM.attributes + 0x0000000000000122 0x34 ./Application/User/Core/stm32f7xx_it.o + .ARM.attributes + 0x0000000000000156 0x34 ./Application/User/Core/syscalls.o + .ARM.attributes + 0x000000000000018a 0x34 ./Application/User/Core/sysmem.o + .ARM.attributes + 0x00000000000001be 0x34 ./Application/User/LIBJPEG/App/libjpeg.o + .ARM.attributes + 0x00000000000001f2 0x34 ./Application/User/LWIP/App/lwip.o + .ARM.attributes + 0x0000000000000226 0x34 ./Application/User/LWIP/Target/ethernetif.o + .ARM.attributes + 0x000000000000025a 0x21 ./Application/User/Startup/startup_stm32f746nghx.o + .ARM.attributes + 0x000000000000027b 0x34 ./Application/User/TouchGFX/App/app_touchgfx.o + .ARM.attributes + 0x00000000000002af 0x34 ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .ARM.attributes + 0x00000000000002e3 0x34 ./Application/User/TouchGFX/target/STM32TouchController.o + .ARM.attributes + 0x0000000000000317 0x34 ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .ARM.attributes + 0x000000000000034b 0x34 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .ARM.attributes + 0x000000000000037f 0x34 ./Application/User/TouchGFX/target/generated/OSWrappers.o + .ARM.attributes + 0x00000000000003b3 0x34 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .ARM.attributes + 0x00000000000003e7 0x34 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .ARM.attributes + 0x000000000000041b 0x34 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .ARM.attributes + 0x000000000000044f 0x34 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .ARM.attributes + 0x0000000000000483 0x34 ./Application/User/generated/ApplicationFontProvider.o + .ARM.attributes + 0x00000000000004b7 0x34 ./Application/User/generated/BitmapDatabase.o + .ARM.attributes + 0x00000000000004eb 0x34 ./Application/User/generated/CachedFont.o + .ARM.attributes + 0x000000000000051f 0x34 ./Application/User/generated/FontCache.o + .ARM.attributes + 0x0000000000000553 0x34 ./Application/User/generated/Font_verdana_10_4bpp_0.o + .ARM.attributes + 0x0000000000000587 0x34 ./Application/User/generated/Font_verdana_20_4bpp_0.o + .ARM.attributes + 0x00000000000005bb 0x34 ./Application/User/generated/Font_verdana_40_4bpp_0.o + .ARM.attributes + 0x00000000000005ef 0x34 ./Application/User/generated/FrontendApplicationBase.o + .ARM.attributes + 0x0000000000000623 0x34 ./Application/User/generated/GeneratedFont.o + .ARM.attributes + 0x0000000000000657 0x34 ./Application/User/generated/Kerning_verdana_10_4bpp.o + .ARM.attributes + 0x000000000000068b 0x34 ./Application/User/generated/Kerning_verdana_20_4bpp.o + .ARM.attributes + 0x00000000000006bf 0x34 ./Application/User/generated/Kerning_verdana_40_4bpp.o + .ARM.attributes + 0x00000000000006f3 0x34 ./Application/User/generated/LanguageGb.o + .ARM.attributes + 0x0000000000000727 0x34 ./Application/User/generated/MainScreenViewBase.o + .ARM.attributes + 0x000000000000075b 0x34 ./Application/User/generated/SliderContainerBase.o + .ARM.attributes + 0x000000000000078f 0x34 ./Application/User/generated/Table_verdana_10_4bpp.o + .ARM.attributes + 0x00000000000007c3 0x34 ./Application/User/generated/Table_verdana_20_4bpp.o + .ARM.attributes + 0x00000000000007f7 0x34 ./Application/User/generated/Table_verdana_40_4bpp.o + .ARM.attributes + 0x000000000000082b 0x34 ./Application/User/generated/Texts.o + .ARM.attributes + 0x000000000000085f 0x34 ./Application/User/generated/TypedTextDatabase.o + .ARM.attributes + 0x0000000000000893 0x34 ./Application/User/generated/image_Blue_Slider_Vertical_Small_Indicators_Slider3_Vertical_Round_nob.o + .ARM.attributes + 0x00000000000008c7 0x34 ./Application/User/generated/image_Blue_Slider_Vertical_Small_Slider3_Vertical_Round_back.o + .ARM.attributes + 0x00000000000008fb 0x34 ./Application/User/generated/image_Blue_Slider_Vertical_Small_Slider3_Vertical_Round_fill.o + .ARM.attributes + 0x000000000000092f 0x34 ./Application/User/gui/FrontendApplication.o + .ARM.attributes + 0x0000000000000963 0x34 ./Application/User/gui/MainScreenPresenter.o + .ARM.attributes + 0x0000000000000997 0x34 ./Application/User/gui/MainScreenView.o + .ARM.attributes + 0x00000000000009cb 0x34 ./Application/User/gui/Model.o + .ARM.attributes + 0x00000000000009ff 0x34 ./Application/User/gui/SliderContainer.o + .ARM.attributes + 0x0000000000000a33 0x34 ./Drivers/BSP/Components/lan8742.o + .ARM.attributes + 0x0000000000000a67 0x34 ./Drivers/BSP/stm32746g_discovery_qspi.o + .ARM.attributes + 0x0000000000000a9b 0x34 ./Drivers/CMSIS/system_stm32f7xx.o + .ARM.attributes + 0x0000000000000acf 0x34 ./Drivers/Components/ft5336.o + .ARM.attributes + 0x0000000000000b03 0x34 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .ARM.attributes + 0x0000000000000b37 0x34 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .ARM.attributes + 0x0000000000000b6b 0x34 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .ARM.attributes + 0x0000000000000b9f 0x34 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .ARM.attributes + 0x0000000000000bd3 0x34 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .ARM.attributes + 0x0000000000000c07 0x34 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .ARM.attributes + 0x0000000000000c3b 0x34 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .ARM.attributes + 0x0000000000000c6f 0x34 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .ARM.attributes + 0x0000000000000ca3 0x34 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .ARM.attributes + 0x0000000000000cd7 0x34 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .ARM.attributes + 0x0000000000000d0b 0x34 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .ARM.attributes + 0x0000000000000d3f 0x34 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .ARM.attributes + 0x0000000000000d73 0x34 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .ARM.attributes + 0x0000000000000da7 0x34 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .ARM.attributes + 0x0000000000000ddb 0x34 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .ARM.attributes + 0x0000000000000e0f 0x34 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .ARM.attributes + 0x0000000000000e43 0x34 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .ARM.attributes + 0x0000000000000e77 0x34 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .ARM.attributes + 0x0000000000000eab 0x34 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .ARM.attributes + 0x0000000000000edf 0x34 ./Middlewares/FreeRTOS/cmsis_os2.o + .ARM.attributes + 0x0000000000000f13 0x34 ./Middlewares/FreeRTOS/heap_4.o + .ARM.attributes + 0x0000000000000f47 0x34 ./Middlewares/FreeRTOS/list.o + .ARM.attributes + 0x0000000000000f7b 0x34 ./Middlewares/FreeRTOS/port.o + .ARM.attributes + 0x0000000000000faf 0x34 ./Middlewares/FreeRTOS/queue.o + .ARM.attributes + 0x0000000000000fe3 0x34 ./Middlewares/FreeRTOS/tasks.o + .ARM.attributes + 0x0000000000001017 0x34 ./Middlewares/FreeRTOS/timers.o + .ARM.attributes + 0x000000000000104b 0x34 ./Middlewares/LibJPEG/jaricom.o + .ARM.attributes + 0x000000000000107f 0x34 ./Middlewares/LibJPEG/jcomapi.o + .ARM.attributes + 0x00000000000010b3 0x34 ./Middlewares/LibJPEG/jdapimin.o + .ARM.attributes + 0x00000000000010e7 0x34 ./Middlewares/LibJPEG/jdapistd.o + .ARM.attributes + 0x000000000000111b 0x34 ./Middlewares/LibJPEG/jdarith.o + .ARM.attributes + 0x000000000000114f 0x34 ./Middlewares/LibJPEG/jdatasrc.o + .ARM.attributes + 0x0000000000001183 0x34 ./Middlewares/LibJPEG/jdcoefct.o + .ARM.attributes + 0x00000000000011b7 0x34 ./Middlewares/LibJPEG/jdcolor.o + .ARM.attributes + 0x00000000000011eb 0x34 ./Middlewares/LibJPEG/jddctmgr.o + .ARM.attributes + 0x000000000000121f 0x34 ./Middlewares/LibJPEG/jdhuff.o + .ARM.attributes + 0x0000000000001253 0x34 ./Middlewares/LibJPEG/jdinput.o + .ARM.attributes + 0x0000000000001287 0x34 ./Middlewares/LibJPEG/jdmainct.o + .ARM.attributes + 0x00000000000012bb 0x34 ./Middlewares/LibJPEG/jdmarker.o + .ARM.attributes + 0x00000000000012ef 0x34 ./Middlewares/LibJPEG/jdmaster.o + .ARM.attributes + 0x0000000000001323 0x34 ./Middlewares/LibJPEG/jdmerge.o + .ARM.attributes + 0x0000000000001357 0x34 ./Middlewares/LibJPEG/jdpostct.o + .ARM.attributes + 0x000000000000138b 0x34 ./Middlewares/LibJPEG/jdsample.o + .ARM.attributes + 0x00000000000013bf 0x34 ./Middlewares/LibJPEG/jerror.o + .ARM.attributes + 0x00000000000013f3 0x34 ./Middlewares/LibJPEG/jidctflt.o + .ARM.attributes + 0x0000000000001427 0x34 ./Middlewares/LibJPEG/jidctfst.o + .ARM.attributes + 0x000000000000145b 0x34 ./Middlewares/LibJPEG/jidctint.o + .ARM.attributes + 0x000000000000148f 0x34 ./Middlewares/LibJPEG/jmemmgr.o + .ARM.attributes + 0x00000000000014c3 0x34 ./Middlewares/LibJPEG/jmemnobs.o + .ARM.attributes + 0x00000000000014f7 0x34 ./Middlewares/LibJPEG/jquant1.o + .ARM.attributes + 0x000000000000152b 0x34 ./Middlewares/LibJPEG/jquant2.o + .ARM.attributes + 0x000000000000155f 0x34 ./Middlewares/LibJPEG/jutils.o + .ARM.attributes + 0x0000000000001593 0x34 ./Middlewares/LwIP/def.o + .ARM.attributes + 0x00000000000015c7 0x34 ./Middlewares/LwIP/dhcp.o + .ARM.attributes + 0x00000000000015fb 0x34 ./Middlewares/LwIP/etharp.o + .ARM.attributes + 0x000000000000162f 0x34 ./Middlewares/LwIP/ethernet.o + .ARM.attributes + 0x0000000000001663 0x34 ./Middlewares/LwIP/icmp.o + .ARM.attributes + 0x0000000000001697 0x34 ./Middlewares/LwIP/init.o + .ARM.attributes + 0x00000000000016cb 0x34 ./Middlewares/LwIP/ip.o + .ARM.attributes + 0x00000000000016ff 0x34 ./Middlewares/LwIP/ip4.o + .ARM.attributes + 0x0000000000001733 0x34 ./Middlewares/LwIP/ip4_addr.o + .ARM.attributes + 0x0000000000001767 0x34 ./Middlewares/LwIP/ip4_frag.o + .ARM.attributes + 0x000000000000179b 0x34 ./Middlewares/LwIP/mem.o + .ARM.attributes + 0x00000000000017cf 0x34 ./Middlewares/LwIP/memp.o + .ARM.attributes + 0x0000000000001803 0x34 ./Middlewares/LwIP/netif.o + .ARM.attributes + 0x0000000000001837 0x34 ./Middlewares/LwIP/pbuf.o + .ARM.attributes + 0x000000000000186b 0x34 ./Middlewares/LwIP/sys_arch.o + .ARM.attributes + 0x000000000000189f 0x34 ./Middlewares/LwIP/tcp.o + .ARM.attributes + 0x00000000000018d3 0x34 ./Middlewares/LwIP/tcp_in.o + .ARM.attributes + 0x0000000000001907 0x34 ./Middlewares/LwIP/tcp_out.o + .ARM.attributes + 0x000000000000193b 0x34 ./Middlewares/LwIP/tcpip.o + .ARM.attributes + 0x000000000000196f 0x34 ./Middlewares/LwIP/timeouts.o + .ARM.attributes + 0x00000000000019a3 0x34 ./Middlewares/LwIP/udp.o + .ARM.attributes + 0x00000000000019d7 0x39 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(AbstractPartition.o) + .ARM.attributes + 0x0000000000001a10 0x39 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Container.o) + .ARM.attributes + 0x0000000000001a49 0x39 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + .ARM.attributes + 0x0000000000001a82 0x39 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + .ARM.attributes + 0x0000000000001abb 0x39 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(DMA.o) + .ARM.attributes + 0x0000000000001af4 0x39 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextArea.o) + .ARM.attributes + 0x0000000000001b2d 0x39 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Box.o) + .ARM.attributes + 0x0000000000001b66 0x39 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextAreaWithWildcard.o) + .ARM.attributes + 0x0000000000001b9f 0x39 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Image.o) + .ARM.attributes + 0x0000000000001bd8 0x39 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD.o) + .ARM.attributes + 0x0000000000001c11 0x39 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TouchCalibration.o) + .ARM.attributes + 0x0000000000001c4a 0x39 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(DisplayTransformation.o) + .ARM.attributes + 0x0000000000001c83 0x39 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Application.o) + .ARM.attributes + 0x0000000000001cbc 0x39 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TypedText.o) + .ARM.attributes + 0x0000000000001cf5 0x39 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Font.o) + .ARM.attributes + 0x0000000000001d2e 0x39 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Drawable.o) + .ARM.attributes + 0x0000000000001d67 0x39 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(ConstFont.o) + .ARM.attributes + 0x0000000000001da0 0x39 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Utils.o) + .ARM.attributes + 0x0000000000001dd9 0x39 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Screen.o) + .ARM.attributes + 0x0000000000001e12 0x39 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextProvider.o) + .ARM.attributes + 0x0000000000001e4b 0x39 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextureMapTypes.o) + .ARM.attributes + 0x0000000000001e84 0x39 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Unicode.o) + .ARM.attributes + 0x0000000000001ebd 0x39 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(FontManager.o) + .ARM.attributes + 0x0000000000001ef6 0x39 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + .ARM.attributes + 0x0000000000001f2f 0x39 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .ARM.attributes + 0x0000000000001f68 0x39 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(stm32_crc_lock.o) + .ARM.attributes + 0x0000000000001fa1 0x39 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Gestures.o) + .ARM.attributes + 0x0000000000001fda 0x34 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a(atexit_arm.o) + .ARM.attributes + 0x000000000000200e 0x34 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a(del_ops.o) + .ARM.attributes + 0x0000000000002042 0x34 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a(guard.o) + .ARM.attributes + 0x0000000000002076 0x34 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a(pure.o) + .ARM.attributes + 0x00000000000020aa 0x34 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a(del_op.o) + .ARM.attributes + 0x00000000000020de 0x34 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a(eh_terminate.o) + .ARM.attributes + 0x0000000000002112 0x34 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a(eh_term_handler.o) + .ARM.attributes + 0x0000000000002146 0x34 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-abort.o) + .ARM.attributes + 0x000000000000217a 0x34 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-assert.o) + .ARM.attributes + 0x00000000000021ae 0x34 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-atexit.o) + .ARM.attributes + 0x00000000000021e2 0x34 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-malloc.o) + .ARM.attributes + 0x0000000000002216 0x34 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-mallocr.o) + .ARM.attributes + 0x000000000000224a 0x34 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-mlock.o) + .ARM.attributes + 0x000000000000227e 0x34 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-rand.o) + .ARM.attributes + 0x00000000000022b2 0x34 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-cxa_atexit.o) + .ARM.attributes + 0x00000000000022e6 0x34 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-findfp.o) + .ARM.attributes + 0x000000000000231a 0x34 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fprintf.o) + .ARM.attributes + 0x000000000000234e 0x34 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fwalk.o) + .ARM.attributes + 0x0000000000002382 0x34 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-printf.o) + .ARM.attributes + 0x00000000000023b6 0x34 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-sprintf.o) + .ARM.attributes + 0x00000000000023ea 0x34 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-stdio.o) + .ARM.attributes + 0x000000000000241e 0x34 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-wbuf.o) + .ARM.attributes + 0x0000000000002452 0x34 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-wsetup.o) + .ARM.attributes + 0x0000000000002486 0x34 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-memcmp.o) + .ARM.attributes + 0x00000000000024ba 0x34 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-memmove.o) + .ARM.attributes + 0x00000000000024ee 0x34 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-memset.o) + .ARM.attributes + 0x0000000000002522 0x34 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-strncmp.o) + .ARM.attributes + 0x0000000000002556 0x34 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-signal.o) + .ARM.attributes + 0x000000000000258a 0x34 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-closer.o) + .ARM.attributes + 0x00000000000025be 0x34 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-impure.o) + .ARM.attributes + 0x00000000000025f2 0x34 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-lseekr.o) + .ARM.attributes + 0x0000000000002626 0x34 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-readr.o) + .ARM.attributes + 0x000000000000265a 0x34 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-signalr.o) + .ARM.attributes + 0x000000000000268e 0x34 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-sbrkr.o) + .ARM.attributes + 0x00000000000026c2 0x34 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-writer.o) + .ARM.attributes + 0x00000000000026f6 0x34 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-init.o) + .ARM.attributes + 0x000000000000272a 0x34 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-lock.o) + .ARM.attributes + 0x000000000000275e 0x34 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-memcpy-stub.o) + .ARM.attributes + 0x0000000000002792 0x34 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-__atexit.o) + .ARM.attributes + 0x00000000000027c6 0x34 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-__call_atexit.o) + .ARM.attributes + 0x00000000000027fa 0x34 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-freer.o) + .ARM.attributes + 0x000000000000282e 0x34 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-on_exit_args.o) + .ARM.attributes + 0x0000000000002862 0x34 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-nano-svfprintf.o) + .ARM.attributes + 0x0000000000002896 0x34 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-nano-vfprintf.o) + .ARM.attributes + 0x00000000000028ca 0x34 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-nano-vfprintf_i.o) + .ARM.attributes + 0x00000000000028fe 0x34 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fflush.o) + .ARM.attributes + 0x0000000000002932 0x34 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-makebuf.o) + .ARM.attributes + 0x0000000000002966 0x34 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fstatr.o) + .ARM.attributes + 0x000000000000299a 0x34 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-isattyr.o) + .ARM.attributes + 0x00000000000029ce 0x1c C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-memchr.o) + .ARM.attributes + 0x00000000000029ea 0x34 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-reallocr.o) + .ARM.attributes + 0x0000000000002a1e 0x34 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-msizer.o) + .ARM.attributes + 0x0000000000002a52 0x1e C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_arm_addsubdf3.o) + .ARM.attributes + 0x0000000000002a70 0x1e C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_arm_muldivdf3.o) + .ARM.attributes + 0x0000000000002a8e 0x1e C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_arm_truncdfsf2.o) + .ARM.attributes + 0x0000000000002aac 0x1e C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_aeabi_uldivmod.o) + .ARM.attributes + 0x0000000000002aca 0x34 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_udivmoddi4.o) + .ARM.attributes + 0x0000000000002afe 0x1e C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_dvmd_tls.o) + .ARM.attributes + 0x0000000000002b1c 0x1e C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard/crtn.o + +BufferSection 0x00000000c0000000 0x13ec00 + *(TouchGFX_Framebuffer TouchGFX_Framebuffer.*) + TouchGFX_Framebuffer + 0x00000000c0000000 0x3fc00 ./Application/User/TouchGFX/target/TouchGFXHAL.o + 0x00000000c0000000 animationBuffer + TouchGFX_Framebuffer + 0x00000000c003fc00 0x7f800 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + *(.gnu.linkonce.r.*) + 0x00000000c00bf400 . = ALIGN (0x4) + *(Video_RGB_Buffer Video_RGB_Buffer.*) + Video_RGB_Buffer + 0x00000000c00bf400 0x7f800 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + 0x00000000c00bf400 videoRGBBuffer + *(.gnu.linkonce.r.*) + 0x00000000c013ec00 . = ALIGN (0x4) + +ExtFlashSection + 0x0000000090000000 0x8830 + *(ExtFlashSection ExtFlashSection.*) + ExtFlashSection + 0x0000000090000000 0x1cb0 ./Application/User/generated/image_Blue_Slider_Vertical_Small_Indicators_Slider3_Vertical_Round_nob.o + 0x0000000090000000 image_blue_slider_vertical_small_indicators_slider3_vertical_round_nob + ExtFlashSection + 0x0000000090001cb0 0x35c0 ./Application/User/generated/image_Blue_Slider_Vertical_Small_Slider3_Vertical_Round_back.o + 0x0000000090001cb0 image_blue_slider_vertical_small_slider3_vertical_round_back + ExtFlashSection + 0x0000000090005270 0x35c0 ./Application/User/generated/image_Blue_Slider_Vertical_Small_Slider3_Vertical_Round_fill.o + 0x0000000090005270 image_blue_slider_vertical_small_slider3_vertical_round_fill + *(.gnu.linkonce.r.*) + 0x0000000090008830 . = ALIGN (0x4) + +FontFlashSection + 0x0000000090008830 0x770 + *(FontFlashSection FontFlashSection.*) + FontFlashSection + 0x0000000090008830 0x3e8 ./Application/User/generated/Font_verdana_10_4bpp_0.o + 0x0000000090008830 unicodes_verdana_10_4bpp_0 + FontFlashSection + 0x0000000090008c18 0x46 ./Application/User/generated/Font_verdana_20_4bpp_0.o + 0x0000000090008c18 unicodes_verdana_20_4bpp_0 + *fill* 0x0000000090008c5e 0x2 + FontFlashSection + 0x0000000090008c60 0x117 ./Application/User/generated/Font_verdana_40_4bpp_0.o + 0x0000000090008c60 unicodes_verdana_40_4bpp_0 + *fill* 0x0000000090008d77 0x1 + FontFlashSection + 0x0000000090008d78 0x206 ./Application/User/generated/Table_verdana_10_4bpp.o + 0x0000000090008d78 glyphs_verdana_10_4bpp + *fill* 0x0000000090008f7e 0x2 + FontFlashSection + 0x0000000090008f80 0xe ./Application/User/generated/Table_verdana_20_4bpp.o + 0x0000000090008f80 glyphs_verdana_20_4bpp + *fill* 0x0000000090008f8e 0x2 + FontFlashSection + 0x0000000090008f90 0xe ./Application/User/generated/Table_verdana_40_4bpp.o + 0x0000000090008f90 glyphs_verdana_40_4bpp + *(.gnu.linkonce.r.*) + 0x0000000090008fa0 . = ALIGN (0x4) + *fill* 0x0000000090008f9e 0x2 + +TextFlashSection + 0x0000000090008fa0 0x14 + *(TextFlashSection TextFlashSection.*) + TextFlashSection + 0x0000000090008fa0 0x8 ./Application/User/generated/LanguageGb.o + 0x0000000090008fa0 indicesGb + TextFlashSection + 0x0000000090008fa8 0x4 ./Application/User/generated/Texts.o + 0x0000000090008fa8 texts_all_languages + TextFlashSection + 0x0000000090008fac 0x8 ./Application/User/generated/TypedTextDatabase.o + 0x0000000090008fac typedText_database_DEFAULT + 0x0000000090008fb0 typedTextDatabaseArray + *(.gnu.linkonce.r.*) + 0x0000000090008fb4 . = ALIGN (0x4) +OUTPUT(LightControlConvi_Disco746G.elf elf32-littlearm) +LOAD linker stubs +LOAD C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc.a +LOAD C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libm.a +LOAD C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a + +.rel.dyn 0x0000000090008fb4 0x0 + .rel.iplt 0x0000000090008fb4 0x0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard/crtbegin.o + +.comment 0x0000000000000000 0xc2 + .comment 0x0000000000000000 0x43 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard/crtbegin.o + 0x44 (size before relaxing) + .comment 0x0000000000000043 0x44 ./Application/User/Core/freertos.o + .comment 0x0000000000000043 0x44 ./Application/User/Core/main.o + .comment 0x0000000000000043 0x44 ./Application/User/Core/stm32f7xx_hal_msp.o + .comment 0x0000000000000043 0x44 ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .comment 0x0000000000000043 0x44 ./Application/User/Core/stm32f7xx_it.o + .comment 0x0000000000000043 0x44 ./Application/User/Core/syscalls.o + .comment 0x0000000000000043 0x44 ./Application/User/Core/sysmem.o + .comment 0x0000000000000043 0x44 ./Application/User/LIBJPEG/App/libjpeg.o + .comment 0x0000000000000043 0x44 ./Application/User/LWIP/App/lwip.o + .comment 0x0000000000000043 0x44 ./Application/User/LWIP/Target/ethernetif.o + .comment 0x0000000000000043 0x44 ./Application/User/TouchGFX/App/app_touchgfx.o + .comment 0x0000000000000043 0x44 ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .comment 0x0000000000000043 0x44 ./Application/User/TouchGFX/target/STM32TouchController.o + .comment 0x0000000000000043 0x44 ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .comment 0x0000000000000043 0x44 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .comment 0x0000000000000043 0x44 ./Application/User/TouchGFX/target/generated/OSWrappers.o + .comment 0x0000000000000043 0x44 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .comment 0x0000000000000043 0x44 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .comment 0x0000000000000043 0x44 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .comment 0x0000000000000043 0x44 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .comment 0x0000000000000043 0x44 ./Application/User/generated/ApplicationFontProvider.o + .comment 0x0000000000000043 0x44 ./Application/User/generated/BitmapDatabase.o + .comment 0x0000000000000043 0x44 ./Application/User/generated/CachedFont.o + .comment 0x0000000000000043 0x44 ./Application/User/generated/FontCache.o + .comment 0x0000000000000043 0x44 ./Application/User/generated/Font_verdana_10_4bpp_0.o + .comment 0x0000000000000043 0x44 ./Application/User/generated/Font_verdana_20_4bpp_0.o + .comment 0x0000000000000043 0x44 ./Application/User/generated/Font_verdana_40_4bpp_0.o + .comment 0x0000000000000043 0x44 ./Application/User/generated/FrontendApplicationBase.o + .comment 0x0000000000000043 0x44 ./Application/User/generated/GeneratedFont.o + .comment 0x0000000000000043 0x44 ./Application/User/generated/Kerning_verdana_10_4bpp.o + .comment 0x0000000000000043 0x44 ./Application/User/generated/Kerning_verdana_20_4bpp.o + .comment 0x0000000000000043 0x44 ./Application/User/generated/Kerning_verdana_40_4bpp.o + .comment 0x0000000000000043 0x44 ./Application/User/generated/LanguageGb.o + .comment 0x0000000000000043 0x44 ./Application/User/generated/MainScreenViewBase.o + .comment 0x0000000000000043 0x44 ./Application/User/generated/SliderContainerBase.o + .comment 0x0000000000000043 0x44 ./Application/User/generated/Table_verdana_10_4bpp.o + .comment 0x0000000000000043 0x44 ./Application/User/generated/Table_verdana_20_4bpp.o + .comment 0x0000000000000043 0x44 ./Application/User/generated/Table_verdana_40_4bpp.o + .comment 0x0000000000000043 0x44 ./Application/User/generated/Texts.o + .comment 0x0000000000000043 0x44 ./Application/User/generated/TypedTextDatabase.o + .comment 0x0000000000000043 0x44 ./Application/User/generated/image_Blue_Slider_Vertical_Small_Indicators_Slider3_Vertical_Round_nob.o + .comment 0x0000000000000043 0x44 ./Application/User/generated/image_Blue_Slider_Vertical_Small_Slider3_Vertical_Round_back.o + .comment 0x0000000000000043 0x44 ./Application/User/generated/image_Blue_Slider_Vertical_Small_Slider3_Vertical_Round_fill.o + .comment 0x0000000000000043 0x44 ./Application/User/gui/FrontendApplication.o + .comment 0x0000000000000043 0x44 ./Application/User/gui/MainScreenPresenter.o + .comment 0x0000000000000043 0x44 ./Application/User/gui/MainScreenView.o + .comment 0x0000000000000043 0x44 ./Application/User/gui/Model.o + .comment 0x0000000000000043 0x44 ./Application/User/gui/SliderContainer.o + .comment 0x0000000000000043 0x44 ./Drivers/BSP/Components/lan8742.o + .comment 0x0000000000000043 0x44 ./Drivers/BSP/stm32746g_discovery_qspi.o + .comment 0x0000000000000043 0x44 ./Drivers/CMSIS/system_stm32f7xx.o + .comment 0x0000000000000043 0x44 ./Drivers/Components/ft5336.o + .comment 0x0000000000000043 0x44 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .comment 0x0000000000000043 0x44 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .comment 0x0000000000000043 0x44 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .comment 0x0000000000000043 0x44 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .comment 0x0000000000000043 0x44 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .comment 0x0000000000000043 0x44 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .comment 0x0000000000000043 0x44 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .comment 0x0000000000000043 0x44 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .comment 0x0000000000000043 0x44 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .comment 0x0000000000000043 0x44 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .comment 0x0000000000000043 0x44 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .comment 0x0000000000000043 0x44 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .comment 0x0000000000000043 0x44 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .comment 0x0000000000000043 0x44 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .comment 0x0000000000000043 0x44 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .comment 0x0000000000000043 0x44 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .comment 0x0000000000000043 0x44 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .comment 0x0000000000000043 0x44 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .comment 0x0000000000000043 0x44 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .comment 0x0000000000000043 0x44 ./Middlewares/FreeRTOS/cmsis_os2.o + .comment 0x0000000000000043 0x44 ./Middlewares/FreeRTOS/heap_4.o + .comment 0x0000000000000043 0x44 ./Middlewares/FreeRTOS/list.o + .comment 0x0000000000000043 0x44 ./Middlewares/FreeRTOS/port.o + .comment 0x0000000000000043 0x44 ./Middlewares/FreeRTOS/queue.o + .comment 0x0000000000000043 0x44 ./Middlewares/FreeRTOS/tasks.o + .comment 0x0000000000000043 0x44 ./Middlewares/FreeRTOS/timers.o + .comment 0x0000000000000043 0x44 ./Middlewares/LibJPEG/jaricom.o + .comment 0x0000000000000043 0x44 ./Middlewares/LibJPEG/jcomapi.o + .comment 0x0000000000000043 0x44 ./Middlewares/LibJPEG/jdapimin.o + .comment 0x0000000000000043 0x44 ./Middlewares/LibJPEG/jdapistd.o + .comment 0x0000000000000043 0x44 ./Middlewares/LibJPEG/jdarith.o + .comment 0x0000000000000043 0x44 ./Middlewares/LibJPEG/jdatasrc.o + .comment 0x0000000000000043 0x44 ./Middlewares/LibJPEG/jdcoefct.o + .comment 0x0000000000000043 0x44 ./Middlewares/LibJPEG/jdcolor.o + .comment 0x0000000000000043 0x44 ./Middlewares/LibJPEG/jddctmgr.o + .comment 0x0000000000000043 0x44 ./Middlewares/LibJPEG/jdhuff.o + .comment 0x0000000000000043 0x44 ./Middlewares/LibJPEG/jdinput.o + .comment 0x0000000000000043 0x44 ./Middlewares/LibJPEG/jdmainct.o + .comment 0x0000000000000043 0x44 ./Middlewares/LibJPEG/jdmarker.o + .comment 0x0000000000000043 0x44 ./Middlewares/LibJPEG/jdmaster.o + .comment 0x0000000000000043 0x44 ./Middlewares/LibJPEG/jdmerge.o + .comment 0x0000000000000043 0x44 ./Middlewares/LibJPEG/jdpostct.o + .comment 0x0000000000000043 0x44 ./Middlewares/LibJPEG/jdsample.o + .comment 0x0000000000000043 0x44 ./Middlewares/LibJPEG/jerror.o + .comment 0x0000000000000043 0x44 ./Middlewares/LibJPEG/jidctflt.o + .comment 0x0000000000000043 0x44 ./Middlewares/LibJPEG/jidctfst.o + .comment 0x0000000000000043 0x44 ./Middlewares/LibJPEG/jidctint.o + .comment 0x0000000000000043 0x44 ./Middlewares/LibJPEG/jmemmgr.o + .comment 0x0000000000000043 0x44 ./Middlewares/LibJPEG/jmemnobs.o + .comment 0x0000000000000043 0x44 ./Middlewares/LibJPEG/jquant1.o + .comment 0x0000000000000043 0x44 ./Middlewares/LibJPEG/jquant2.o + .comment 0x0000000000000043 0x44 ./Middlewares/LibJPEG/jutils.o + .comment 0x0000000000000043 0x44 ./Middlewares/LwIP/def.o + .comment 0x0000000000000043 0x44 ./Middlewares/LwIP/dhcp.o + .comment 0x0000000000000043 0x44 ./Middlewares/LwIP/etharp.o + .comment 0x0000000000000043 0x44 ./Middlewares/LwIP/ethernet.o + .comment 0x0000000000000043 0x44 ./Middlewares/LwIP/icmp.o + .comment 0x0000000000000043 0x44 ./Middlewares/LwIP/init.o + .comment 0x0000000000000043 0x44 ./Middlewares/LwIP/ip.o + .comment 0x0000000000000043 0x44 ./Middlewares/LwIP/ip4.o + .comment 0x0000000000000043 0x44 ./Middlewares/LwIP/ip4_addr.o + .comment 0x0000000000000043 0x44 ./Middlewares/LwIP/ip4_frag.o + .comment 0x0000000000000043 0x44 ./Middlewares/LwIP/mem.o + .comment 0x0000000000000043 0x44 ./Middlewares/LwIP/memp.o + .comment 0x0000000000000043 0x44 ./Middlewares/LwIP/netif.o + .comment 0x0000000000000043 0x44 ./Middlewares/LwIP/pbuf.o + .comment 0x0000000000000043 0x44 ./Middlewares/LwIP/sys_arch.o + .comment 0x0000000000000043 0x44 ./Middlewares/LwIP/tcp.o + .comment 0x0000000000000043 0x44 ./Middlewares/LwIP/tcp_in.o + .comment 0x0000000000000043 0x44 ./Middlewares/LwIP/tcp_out.o + .comment 0x0000000000000043 0x44 ./Middlewares/LwIP/tcpip.o + .comment 0x0000000000000043 0x44 ./Middlewares/LwIP/timeouts.o + .comment 0x0000000000000043 0x44 ./Middlewares/LwIP/udp.o + .comment 0x0000000000000043 0x7f C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(AbstractPartition.o) + 0x80 (size before relaxing) + .comment 0x00000000000000c2 0x80 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Container.o) + .comment 0x00000000000000c2 0x80 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Slider.o) + .comment 0x00000000000000c2 0x80 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(HAL.o) + .comment 0x00000000000000c2 0x80 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(DMA.o) + .comment 0x00000000000000c2 0x80 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextArea.o) + .comment 0x00000000000000c2 0x80 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Box.o) + .comment 0x00000000000000c2 0x80 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextAreaWithWildcard.o) + .comment 0x00000000000000c2 0x80 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Image.o) + .comment 0x00000000000000c2 0x80 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD.o) + .comment 0x00000000000000c2 0x80 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TouchCalibration.o) + .comment 0x00000000000000c2 0x80 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(DisplayTransformation.o) + .comment 0x00000000000000c2 0x80 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Application.o) + .comment 0x00000000000000c2 0x80 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TypedText.o) + .comment 0x00000000000000c2 0x80 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Font.o) + .comment 0x00000000000000c2 0x80 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Drawable.o) + .comment 0x00000000000000c2 0x80 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(ConstFont.o) + .comment 0x00000000000000c2 0x80 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Utils.o) + .comment 0x00000000000000c2 0x80 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Screen.o) + .comment 0x00000000000000c2 0x80 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextProvider.o) + .comment 0x00000000000000c2 0x80 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(TextureMapTypes.o) + .comment 0x00000000000000c2 0x80 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Unicode.o) + .comment 0x00000000000000c2 0x80 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(FontManager.o) + .comment 0x00000000000000c2 0x80 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Bitmap.o) + .comment 0x00000000000000c2 0x80 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(LCD16bpp.o) + .comment 0x00000000000000c2 0x80 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(stm32_crc_lock.o) + .comment 0x00000000000000c2 0x80 C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc\libtouchgfx-float-abi-hard.a(Gestures.o) + +.debug_info 0x0000000000000000 0xf7c45 + .debug_info 0x0000000000000000 0x113 ./Application/User/Core/freertos.o + .debug_info 0x0000000000000113 0x3e0e ./Application/User/Core/main.o + .debug_info 0x0000000000003f21 0x299c ./Application/User/Core/stm32f7xx_hal_msp.o + .debug_info 0x00000000000068bd 0xd64 ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .debug_info 0x0000000000007621 0x16a8 ./Application/User/Core/stm32f7xx_it.o + .debug_info 0x0000000000008cc9 0x766 ./Application/User/Core/syscalls.o + .debug_info 0x000000000000942f 0x16a ./Application/User/Core/sysmem.o + .debug_info 0x0000000000009599 0x98 ./Application/User/LIBJPEG/App/libjpeg.o + .debug_info 0x0000000000009631 0x92c ./Application/User/LWIP/App/lwip.o + .debug_info 0x0000000000009f5d 0x3247 ./Application/User/LWIP/Target/ethernetif.o + .debug_info 0x000000000000d1a4 0x23 ./Application/User/Startup/startup_stm32f746nghx.o + .debug_info 0x000000000000d1c7 0xc8 ./Application/User/TouchGFX/App/app_touchgfx.o + .debug_info 0x000000000000d28f 0x82f ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .debug_info 0x000000000000dabe 0x118e ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_info 0x000000000000ec4c 0x45a ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .debug_info 0x000000000000f0a6 0x79f8 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_info 0x0000000000016a9e 0x78a ./Application/User/TouchGFX/target/generated/OSWrappers.o + .debug_info 0x0000000000017228 0x7ac1 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_info 0x000000000001ece9 0x3fd8 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .debug_info 0x0000000000022cc1 0xbcc5 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_info 0x000000000002e986 0xc004 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_info 0x000000000003a98a 0x1162 ./Application/User/generated/ApplicationFontProvider.o + .debug_info 0x000000000003baec 0xcfa ./Application/User/generated/BitmapDatabase.o + .debug_info 0x000000000003c7e6 0x25ef ./Application/User/generated/CachedFont.o + .debug_info 0x000000000003edd5 0x4408 ./Application/User/generated/FontCache.o + .debug_info 0x00000000000431dd 0x1d5 ./Application/User/generated/Font_verdana_10_4bpp_0.o + .debug_info 0x00000000000433b2 0x1d4 ./Application/User/generated/Font_verdana_20_4bpp_0.o + .debug_info 0x0000000000043586 0x1d5 ./Application/User/generated/Font_verdana_40_4bpp_0.o + .debug_info 0x000000000004375b 0xcc0c ./Application/User/generated/FrontendApplicationBase.o + .debug_info 0x0000000000050367 0x1d2c ./Application/User/generated/GeneratedFont.o + .debug_info 0x0000000000052093 0x6d5 ./Application/User/generated/Kerning_verdana_10_4bpp.o + .debug_info 0x0000000000052768 0x6d5 ./Application/User/generated/Kerning_verdana_20_4bpp.o + .debug_info 0x0000000000052e3d 0x6d5 ./Application/User/generated/Kerning_verdana_40_4bpp.o + .debug_info 0x0000000000053512 0x208 ./Application/User/generated/LanguageGb.o + .debug_info 0x000000000005371a 0x8a78 ./Application/User/generated/MainScreenViewBase.o + .debug_info 0x000000000005c192 0x867b ./Application/User/generated/SliderContainerBase.o + .debug_info 0x000000000006480d 0x16f4 ./Application/User/generated/Table_verdana_10_4bpp.o + .debug_info 0x0000000000065f01 0x16f4 ./Application/User/generated/Table_verdana_20_4bpp.o + .debug_info 0x00000000000675f5 0x16f6 ./Application/User/generated/Table_verdana_40_4bpp.o + .debug_info 0x0000000000068ceb 0x3e70 ./Application/User/generated/Texts.o + .debug_info 0x000000000006cb5b 0x16cb ./Application/User/generated/TypedTextDatabase.o + .debug_info 0x000000000006e226 0x5f ./Application/User/generated/image_Blue_Slider_Vertical_Small_Indicators_Slider3_Vertical_Round_nob.o + .debug_info 0x000000000006e285 0x5f ./Application/User/generated/image_Blue_Slider_Vertical_Small_Slider3_Vertical_Round_back.o + .debug_info 0x000000000006e2e4 0x5f ./Application/User/generated/image_Blue_Slider_Vertical_Small_Slider3_Vertical_Round_fill.o + .debug_info 0x000000000006e343 0x3db7 ./Application/User/gui/FrontendApplication.o + .debug_info 0x00000000000720fa 0x679a ./Application/User/gui/MainScreenPresenter.o + .debug_info 0x0000000000078894 0x686b ./Application/User/gui/MainScreenView.o + .debug_info 0x000000000007f0ff 0x2fb ./Application/User/gui/Model.o + .debug_info 0x000000000007f3fa 0x5e93 ./Application/User/gui/SliderContainer.o + .debug_info 0x000000000008528d 0x80d ./Drivers/BSP/Components/lan8742.o + .debug_info 0x0000000000085a9a 0x18e5 ./Drivers/BSP/stm32746g_discovery_qspi.o + .debug_info 0x000000000008737f 0x706 ./Drivers/CMSIS/system_stm32f7xx.o + .debug_info 0x0000000000087a85 0x641 ./Drivers/Components/ft5336.o + .debug_info 0x00000000000880c6 0xb27 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .debug_info 0x0000000000088bed 0x1178 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .debug_info 0x0000000000089d65 0x5d5 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .debug_info 0x000000000008a33a 0x37d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .debug_info 0x000000000008a6b7 0xae5 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .debug_info 0x000000000008b19c 0x11d0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .debug_info 0x000000000008c36c 0x2692 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .debug_info 0x000000000008e9fe 0x728 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .debug_info 0x000000000008f126 0x3ccb ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .debug_info 0x0000000000092df1 0x948 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .debug_info 0x0000000000093739 0x1441 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .debug_info 0x0000000000094b7a 0x9aa ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .debug_info 0x0000000000095524 0x1984 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .debug_info 0x0000000000096ea8 0xb77 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .debug_info 0x0000000000097a1f 0x7ee ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .debug_info 0x000000000009820d 0x1115 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .debug_info 0x0000000000099322 0x4259 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .debug_info 0x000000000009d57b 0x19c6 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .debug_info 0x000000000009ef41 0xc70 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .debug_info 0x000000000009fbb1 0x4ba5 ./Middlewares/FreeRTOS/cmsis_os2.o + .debug_info 0x00000000000a4756 0x4b2 ./Middlewares/FreeRTOS/heap_4.o + .debug_info 0x00000000000a4c08 0x2c3 ./Middlewares/FreeRTOS/list.o + .debug_info 0x00000000000a4ecb 0x54c ./Middlewares/FreeRTOS/port.o + .debug_info 0x00000000000a5417 0x2aaa ./Middlewares/FreeRTOS/queue.o + .debug_info 0x00000000000a7ec1 0x3329 ./Middlewares/FreeRTOS/tasks.o + .debug_info 0x00000000000ab1ea 0x1b8f ./Middlewares/FreeRTOS/timers.o + .debug_info 0x00000000000acd79 0xd3 ./Middlewares/LibJPEG/jaricom.o + .debug_info 0x00000000000ace4c 0x1441 ./Middlewares/LibJPEG/jcomapi.o + .debug_info 0x00000000000ae28d 0x1b3f ./Middlewares/LibJPEG/jdapimin.o + .debug_info 0x00000000000afdcc 0x19a1 ./Middlewares/LibJPEG/jdapistd.o + .debug_info 0x00000000000b176d 0x2411 ./Middlewares/LibJPEG/jdarith.o + .debug_info 0x00000000000b3b7e 0x1c42 ./Middlewares/LibJPEG/jdatasrc.o + .debug_info 0x00000000000b57c0 0x1ff5 ./Middlewares/LibJPEG/jdcoefct.o + .debug_info 0x00000000000b77b5 0x207c ./Middlewares/LibJPEG/jdcolor.o + .debug_info 0x00000000000b9831 0x1e6a ./Middlewares/LibJPEG/jddctmgr.o + .debug_info 0x00000000000bb69b 0x2ead ./Middlewares/LibJPEG/jdhuff.o + .debug_info 0x00000000000be548 0x1c6e ./Middlewares/LibJPEG/jdinput.o + .debug_info 0x00000000000c01b6 0x1e83 ./Middlewares/LibJPEG/jdmainct.o + .debug_info 0x00000000000c2039 0x3039 ./Middlewares/LibJPEG/jdmarker.o + .debug_info 0x00000000000c5072 0x1dd4 ./Middlewares/LibJPEG/jdmaster.o + .debug_info 0x00000000000c6e46 0x1af6 ./Middlewares/LibJPEG/jdmerge.o + .debug_info 0x00000000000c893c 0x1afd ./Middlewares/LibJPEG/jdpostct.o + .debug_info 0x00000000000ca439 0x1db3 ./Middlewares/LibJPEG/jdsample.o + .debug_info 0x00000000000cc1ec 0xa9a ./Middlewares/LibJPEG/jerror.o + .debug_info 0x00000000000ccc86 0x158d ./Middlewares/LibJPEG/jidctflt.o + .debug_info 0x00000000000ce213 0x15b8 ./Middlewares/LibJPEG/jidctfst.o + .debug_info 0x00000000000cf7cb 0x511c ./Middlewares/LibJPEG/jidctint.o + .debug_info 0x00000000000d48e7 0x1cae ./Middlewares/LibJPEG/jmemmgr.o + .debug_info 0x00000000000d6595 0xb0b ./Middlewares/LibJPEG/jmemnobs.o + .debug_info 0x00000000000d70a0 0x27c1 ./Middlewares/LibJPEG/jquant1.o + .debug_info 0x00000000000d9861 0x2eac ./Middlewares/LibJPEG/jquant2.o + .debug_info 0x00000000000dc70d 0x45b ./Middlewares/LibJPEG/jutils.o + .debug_info 0x00000000000dcb68 0x431 ./Middlewares/LwIP/def.o + .debug_info 0x00000000000dcf99 0x2f71 ./Middlewares/LwIP/dhcp.o + .debug_info 0x00000000000dff0a 0x1767 ./Middlewares/LwIP/etharp.o + .debug_info 0x00000000000e1671 0x8b3 ./Middlewares/LwIP/ethernet.o + .debug_info 0x00000000000e1f24 0xbec ./Middlewares/LwIP/icmp.o + .debug_info 0x00000000000e2b10 0x122 ./Middlewares/LwIP/init.o + .debug_info 0x00000000000e2c32 0x532 ./Middlewares/LwIP/ip.o + .debug_info 0x00000000000e3164 0xea0 ./Middlewares/LwIP/ip4.o + .debug_info 0x00000000000e4004 0x7e8 ./Middlewares/LwIP/ip4_addr.o + .debug_info 0x00000000000e47ec 0x1611 ./Middlewares/LwIP/ip4_frag.o + .debug_info 0x00000000000e5dfd 0xe4a ./Middlewares/LwIP/mem.o + .debug_info 0x00000000000e6c47 0x8f8 ./Middlewares/LwIP/memp.o + .debug_info 0x00000000000e753f 0x13cb ./Middlewares/LwIP/netif.o + .debug_info 0x00000000000e890a 0x2a8b ./Middlewares/LwIP/pbuf.o + .debug_info 0x00000000000eb395 0xe5a ./Middlewares/LwIP/sys_arch.o + .debug_info 0x00000000000ec1ef 0x3187 ./Middlewares/LwIP/tcp.o + .debug_info 0x00000000000ef376 0x24da ./Middlewares/LwIP/tcp_in.o + .debug_info 0x00000000000f1850 0x2ed9 ./Middlewares/LwIP/tcp_out.o + .debug_info 0x00000000000f4729 0x11bf ./Middlewares/LwIP/tcpip.o + .debug_info 0x00000000000f58e8 0xeba ./Middlewares/LwIP/timeouts.o + .debug_info 0x00000000000f67a2 0x14a3 ./Middlewares/LwIP/udp.o + +.debug_abbrev 0x0000000000000000 0x1ed60 + .debug_abbrev 0x0000000000000000 0xc1 ./Application/User/Core/freertos.o + .debug_abbrev 0x00000000000000c1 0x436 ./Application/User/Core/main.o + .debug_abbrev 0x00000000000004f7 0x335 ./Application/User/Core/stm32f7xx_hal_msp.o + .debug_abbrev 0x000000000000082c 0x229 ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .debug_abbrev 0x0000000000000a55 0x206 ./Application/User/Core/stm32f7xx_it.o + .debug_abbrev 0x0000000000000c5b 0x229 ./Application/User/Core/syscalls.o + .debug_abbrev 0x0000000000000e84 0xcd ./Application/User/Core/sysmem.o + .debug_abbrev 0x0000000000000f51 0x45 ./Application/User/LIBJPEG/App/libjpeg.o + .debug_abbrev 0x0000000000000f96 0x24e ./Application/User/LWIP/App/lwip.o + .debug_abbrev 0x00000000000011e4 0x527 ./Application/User/LWIP/Target/ethernetif.o + .debug_abbrev 0x000000000000170b 0x12 ./Application/User/Startup/startup_stm32f746nghx.o + .debug_abbrev 0x000000000000171d 0x91 ./Application/User/TouchGFX/App/app_touchgfx.o + .debug_abbrev 0x00000000000017ae 0x3c8 ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .debug_abbrev 0x0000000000001b76 0x536 ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_abbrev 0x00000000000020ac 0x24e ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .debug_abbrev 0x00000000000022fa 0xcdb ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_abbrev 0x0000000000002fd5 0x2be ./Application/User/TouchGFX/target/generated/OSWrappers.o + .debug_abbrev 0x0000000000003293 0xd02 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_abbrev 0x0000000000003f95 0x8e7 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .debug_abbrev 0x000000000000487c 0xea2 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_abbrev 0x000000000000571e 0x101f ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_abbrev 0x000000000000673d 0x4aa ./Application/User/generated/ApplicationFontProvider.o + .debug_abbrev 0x0000000000006be7 0x381 ./Application/User/generated/BitmapDatabase.o + .debug_abbrev 0x0000000000006f68 0x6c3 ./Application/User/generated/CachedFont.o + .debug_abbrev 0x000000000000762b 0x9f2 ./Application/User/generated/FontCache.o + .debug_abbrev 0x000000000000801d 0xb4 ./Application/User/generated/Font_verdana_10_4bpp_0.o + .debug_abbrev 0x00000000000080d1 0xb4 ./Application/User/generated/Font_verdana_20_4bpp_0.o + .debug_abbrev 0x0000000000008185 0xb4 ./Application/User/generated/Font_verdana_40_4bpp_0.o + .debug_abbrev 0x0000000000008239 0xe97 ./Application/User/generated/FrontendApplicationBase.o + .debug_abbrev 0x00000000000090d0 0x5a9 ./Application/User/generated/GeneratedFont.o + .debug_abbrev 0x0000000000009679 0x1cf ./Application/User/generated/Kerning_verdana_10_4bpp.o + .debug_abbrev 0x0000000000009848 0x1cf ./Application/User/generated/Kerning_verdana_20_4bpp.o + .debug_abbrev 0x0000000000009a17 0x1cf ./Application/User/generated/Kerning_verdana_40_4bpp.o + .debug_abbrev 0x0000000000009be6 0xc6 ./Application/User/generated/LanguageGb.o + .debug_abbrev 0x0000000000009cac 0xc42 ./Application/User/generated/MainScreenViewBase.o + .debug_abbrev 0x000000000000a8ee 0xc34 ./Application/User/generated/SliderContainerBase.o + .debug_abbrev 0x000000000000b522 0x51f ./Application/User/generated/Table_verdana_10_4bpp.o + .debug_abbrev 0x000000000000ba41 0x51f ./Application/User/generated/Table_verdana_20_4bpp.o + .debug_abbrev 0x000000000000bf60 0x51f ./Application/User/generated/Table_verdana_40_4bpp.o + .debug_abbrev 0x000000000000c47f 0x962 ./Application/User/generated/Texts.o + .debug_abbrev 0x000000000000cde1 0x565 ./Application/User/generated/TypedTextDatabase.o + .debug_abbrev 0x000000000000d346 0x4c ./Application/User/generated/image_Blue_Slider_Vertical_Small_Indicators_Slider3_Vertical_Round_nob.o + .debug_abbrev 0x000000000000d392 0x4c ./Application/User/generated/image_Blue_Slider_Vertical_Small_Slider3_Vertical_Round_back.o + .debug_abbrev 0x000000000000d3de 0x4c ./Application/User/generated/image_Blue_Slider_Vertical_Small_Slider3_Vertical_Round_fill.o + .debug_abbrev 0x000000000000d42a 0x8eb ./Application/User/gui/FrontendApplication.o + .debug_abbrev 0x000000000000dd15 0xa29 ./Application/User/gui/MainScreenPresenter.o + .debug_abbrev 0x000000000000e73e 0xa3a ./Application/User/gui/MainScreenView.o + .debug_abbrev 0x000000000000f178 0x1e3 ./Application/User/gui/Model.o + .debug_abbrev 0x000000000000f35b 0xa58 ./Application/User/gui/SliderContainer.o + .debug_abbrev 0x000000000000fdb3 0x1be ./Drivers/BSP/Components/lan8742.o + .debug_abbrev 0x000000000000ff71 0x34f ./Drivers/BSP/stm32746g_discovery_qspi.o + .debug_abbrev 0x00000000000102c0 0x141 ./Drivers/CMSIS/system_stm32f7xx.o + .debug_abbrev 0x0000000000010401 0x31f ./Drivers/Components/ft5336.o + .debug_abbrev 0x0000000000010720 0x284 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .debug_abbrev 0x00000000000109a4 0x393 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .debug_abbrev 0x0000000000010d37 0x238 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .debug_abbrev 0x0000000000010f6f 0x16b ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .debug_abbrev 0x00000000000110da 0x341 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .debug_abbrev 0x000000000001141b 0x2b4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .debug_abbrev 0x00000000000116cf 0x3e6 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .debug_abbrev 0x0000000000011ab5 0x202 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .debug_abbrev 0x0000000000011cb7 0x3be ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .debug_abbrev 0x0000000000012075 0x1b2 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .debug_abbrev 0x0000000000012227 0x298 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .debug_abbrev 0x00000000000124bf 0x1ef ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .debug_abbrev 0x00000000000126ae 0x354 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .debug_abbrev 0x0000000000012a02 0x313 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .debug_abbrev 0x0000000000012d15 0x1e3 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .debug_abbrev 0x0000000000012ef8 0x278 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .debug_abbrev 0x0000000000013170 0x392 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .debug_abbrev 0x0000000000013502 0x2eb ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .debug_abbrev 0x00000000000137ed 0x1af ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .debug_abbrev 0x000000000001399c 0x59f ./Middlewares/FreeRTOS/cmsis_os2.o + .debug_abbrev 0x0000000000013f3b 0x288 ./Middlewares/FreeRTOS/heap_4.o + .debug_abbrev 0x00000000000141c3 0x10c ./Middlewares/FreeRTOS/list.o + .debug_abbrev 0x00000000000142cf 0x2c8 ./Middlewares/FreeRTOS/port.o + .debug_abbrev 0x0000000000014597 0x4bd ./Middlewares/FreeRTOS/queue.o + .debug_abbrev 0x0000000000014a54 0x4f8 ./Middlewares/FreeRTOS/tasks.o + .debug_abbrev 0x0000000000014f4c 0x484 ./Middlewares/FreeRTOS/timers.o + .debug_abbrev 0x00000000000153d0 0x79 ./Middlewares/LibJPEG/jaricom.o + .debug_abbrev 0x0000000000015449 0x239 ./Middlewares/LibJPEG/jcomapi.o + .debug_abbrev 0x0000000000015682 0x372 ./Middlewares/LibJPEG/jdapimin.o + .debug_abbrev 0x00000000000159f4 0x299 ./Middlewares/LibJPEG/jdapistd.o + .debug_abbrev 0x0000000000015c8d 0x358 ./Middlewares/LibJPEG/jdarith.o + .debug_abbrev 0x0000000000015fe5 0x31e ./Middlewares/LibJPEG/jdatasrc.o + .debug_abbrev 0x0000000000016303 0x3fe ./Middlewares/LibJPEG/jdcoefct.o + .debug_abbrev 0x0000000000016701 0x39c ./Middlewares/LibJPEG/jdcolor.o + .debug_abbrev 0x0000000000016a9d 0x303 ./Middlewares/LibJPEG/jddctmgr.o + .debug_abbrev 0x0000000000016da0 0x32c ./Middlewares/LibJPEG/jdhuff.o + .debug_abbrev 0x00000000000170cc 0x3fd ./Middlewares/LibJPEG/jdinput.o + .debug_abbrev 0x00000000000174c9 0x345 ./Middlewares/LibJPEG/jdmainct.o + .debug_abbrev 0x000000000001780e 0x49c ./Middlewares/LibJPEG/jdmarker.o + .debug_abbrev 0x0000000000017caa 0x400 ./Middlewares/LibJPEG/jdmaster.o + .debug_abbrev 0x00000000000180aa 0x34f ./Middlewares/LibJPEG/jdmerge.o + .debug_abbrev 0x00000000000183f9 0x291 ./Middlewares/LibJPEG/jdpostct.o + .debug_abbrev 0x000000000001868a 0x320 ./Middlewares/LibJPEG/jdsample.o + .debug_abbrev 0x00000000000189aa 0x264 ./Middlewares/LibJPEG/jerror.o + .debug_abbrev 0x0000000000018c0e 0x211 ./Middlewares/LibJPEG/jidctflt.o + .debug_abbrev 0x0000000000018e1f 0x227 ./Middlewares/LibJPEG/jidctfst.o + .debug_abbrev 0x0000000000019046 0x2a0 ./Middlewares/LibJPEG/jidctint.o + .debug_abbrev 0x00000000000192e6 0x3fb ./Middlewares/LibJPEG/jmemmgr.o + .debug_abbrev 0x00000000000196e1 0x270 ./Middlewares/LibJPEG/jmemnobs.o + .debug_abbrev 0x0000000000019951 0x412 ./Middlewares/LibJPEG/jquant1.o + .debug_abbrev 0x0000000000019d63 0x468 ./Middlewares/LibJPEG/jquant2.o + .debug_abbrev 0x000000000001a1cb 0x185 ./Middlewares/LibJPEG/jutils.o + .debug_abbrev 0x000000000001a350 0x162 ./Middlewares/LwIP/def.o + .debug_abbrev 0x000000000001a4b2 0x530 ./Middlewares/LwIP/dhcp.o + .debug_abbrev 0x000000000001a9e2 0x409 ./Middlewares/LwIP/etharp.o + .debug_abbrev 0x000000000001adeb 0x2cb ./Middlewares/LwIP/ethernet.o + .debug_abbrev 0x000000000001b0b6 0x2fa ./Middlewares/LwIP/icmp.o + .debug_abbrev 0x000000000001b3b0 0xa1 ./Middlewares/LwIP/init.o + .debug_abbrev 0x000000000001b451 0x147 ./Middlewares/LwIP/ip.o + .debug_abbrev 0x000000000001b598 0x31e ./Middlewares/LwIP/ip4.o + .debug_abbrev 0x000000000001b8b6 0x2e1 ./Middlewares/LwIP/ip4_addr.o + .debug_abbrev 0x000000000001bb97 0x423 ./Middlewares/LwIP/ip4_frag.o + .debug_abbrev 0x000000000001bfba 0x2d7 ./Middlewares/LwIP/mem.o + .debug_abbrev 0x000000000001c291 0x2ee ./Middlewares/LwIP/memp.o + .debug_abbrev 0x000000000001c57f 0x482 ./Middlewares/LwIP/netif.o + .debug_abbrev 0x000000000001ca01 0x5b5 ./Middlewares/LwIP/pbuf.o + .debug_abbrev 0x000000000001cfb6 0x2f2 ./Middlewares/LwIP/sys_arch.o + .debug_abbrev 0x000000000001d2a8 0x571 ./Middlewares/LwIP/tcp.o + .debug_abbrev 0x000000000001d819 0x4ba ./Middlewares/LwIP/tcp_in.o + .debug_abbrev 0x000000000001dcd3 0x48c ./Middlewares/LwIP/tcp_out.o + .debug_abbrev 0x000000000001e15f 0x434 ./Middlewares/LwIP/tcpip.o + .debug_abbrev 0x000000000001e593 0x38a ./Middlewares/LwIP/timeouts.o + .debug_abbrev 0x000000000001e91d 0x443 ./Middlewares/LwIP/udp.o + +.debug_aranges 0x0000000000000000 0x41c0 + .debug_aranges + 0x0000000000000000 0x20 ./Application/User/Core/freertos.o + .debug_aranges + 0x0000000000000020 0x48 ./Application/User/Core/main.o + .debug_aranges + 0x0000000000000068 0x98 ./Application/User/Core/stm32f7xx_hal_msp.o + .debug_aranges + 0x0000000000000100 0x30 ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .debug_aranges + 0x0000000000000130 0x60 ./Application/User/Core/stm32f7xx_it.o + .debug_aranges + 0x0000000000000190 0xa8 ./Application/User/Core/syscalls.o + .debug_aranges + 0x0000000000000238 0x20 ./Application/User/Core/sysmem.o + .debug_aranges + 0x0000000000000258 0x20 ./Application/User/LIBJPEG/App/libjpeg.o + .debug_aranges + 0x0000000000000278 0x28 ./Application/User/LWIP/App/lwip.o + .debug_aranges + 0x00000000000002a0 0xb0 ./Application/User/LWIP/Target/ethernetif.o + .debug_aranges + 0x0000000000000350 0x28 ./Application/User/Startup/startup_stm32f746nghx.o + .debug_aranges + 0x0000000000000378 0x38 ./Application/User/TouchGFX/App/app_touchgfx.o + .debug_aranges + 0x00000000000003b0 0x58 ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .debug_aranges + 0x0000000000000408 0x50 ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_aranges + 0x0000000000000458 0x40 ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .debug_aranges + 0x0000000000000498 0xe8 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_aranges + 0x0000000000000580 0x60 ./Application/User/TouchGFX/target/generated/OSWrappers.o + .debug_aranges + 0x00000000000005e0 0xb8 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_aranges + 0x0000000000000698 0xd0 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .debug_aranges + 0x0000000000000768 0xf0 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_aranges + 0x0000000000000858 0x188 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_aranges + 0x00000000000009e0 0x30 ./Application/User/generated/ApplicationFontProvider.o + .debug_aranges + 0x0000000000000a10 0x28 ./Application/User/generated/BitmapDatabase.o + .debug_aranges + 0x0000000000000a38 0x98 ./Application/User/generated/CachedFont.o + .debug_aranges + 0x0000000000000ad0 0xd0 ./Application/User/generated/FontCache.o + .debug_aranges + 0x0000000000000ba0 0x18 ./Application/User/generated/Font_verdana_10_4bpp_0.o + .debug_aranges + 0x0000000000000bb8 0x18 ./Application/User/generated/Font_verdana_20_4bpp_0.o + .debug_aranges + 0x0000000000000bd0 0x18 ./Application/User/generated/Font_verdana_40_4bpp_0.o + .debug_aranges + 0x0000000000000be8 0xd8 ./Application/User/generated/FrontendApplicationBase.o + .debug_aranges + 0x0000000000000cc0 0xa0 ./Application/User/generated/GeneratedFont.o + .debug_aranges + 0x0000000000000d60 0x18 ./Application/User/generated/Kerning_verdana_10_4bpp.o + .debug_aranges + 0x0000000000000d78 0x18 ./Application/User/generated/Kerning_verdana_20_4bpp.o + .debug_aranges + 0x0000000000000d90 0x18 ./Application/User/generated/Kerning_verdana_40_4bpp.o + .debug_aranges + 0x0000000000000da8 0x18 ./Application/User/generated/LanguageGb.o + .debug_aranges + 0x0000000000000dc0 0x1a8 ./Application/User/generated/MainScreenViewBase.o + .debug_aranges + 0x0000000000000f68 0x168 ./Application/User/generated/SliderContainerBase.o + .debug_aranges + 0x00000000000010d0 0x28 ./Application/User/generated/Table_verdana_10_4bpp.o + .debug_aranges + 0x00000000000010f8 0x28 ./Application/User/generated/Table_verdana_20_4bpp.o + .debug_aranges + 0x0000000000001120 0x28 ./Application/User/generated/Table_verdana_40_4bpp.o + .debug_aranges + 0x0000000000001148 0xa8 ./Application/User/generated/Texts.o + .debug_aranges + 0x00000000000011f0 0x48 ./Application/User/generated/TypedTextDatabase.o + .debug_aranges + 0x0000000000001238 0x18 ./Application/User/generated/image_Blue_Slider_Vertical_Small_Indicators_Slider3_Vertical_Round_nob.o + .debug_aranges + 0x0000000000001250 0x18 ./Application/User/generated/image_Blue_Slider_Vertical_Small_Slider3_Vertical_Round_back.o + .debug_aranges + 0x0000000000001268 0x18 ./Application/User/generated/image_Blue_Slider_Vertical_Small_Slider3_Vertical_Round_fill.o + .debug_aranges + 0x0000000000001280 0x58 ./Application/User/gui/FrontendApplication.o + .debug_aranges + 0x00000000000012d8 0x48 ./Application/User/gui/MainScreenPresenter.o + .debug_aranges + 0x0000000000001320 0x98 ./Application/User/gui/MainScreenView.o + .debug_aranges + 0x00000000000013b8 0x30 ./Application/User/gui/Model.o + .debug_aranges + 0x00000000000013e8 0xb0 ./Application/User/gui/SliderContainer.o + .debug_aranges + 0x0000000000001498 0x88 ./Drivers/BSP/Components/lan8742.o + .debug_aranges + 0x0000000000001520 0x80 ./Drivers/BSP/stm32746g_discovery_qspi.o + .debug_aranges + 0x00000000000015a0 0x28 ./Drivers/CMSIS/system_stm32f7xx.o + .debug_aranges + 0x00000000000015c8 0x60 ./Drivers/Components/ft5336.o + .debug_aranges + 0x0000000000001628 0xf8 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .debug_aranges + 0x0000000000001720 0xa8 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .debug_aranges + 0x00000000000017c8 0x58 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .debug_aranges + 0x0000000000001820 0x30 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .debug_aranges + 0x0000000000001850 0x80 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .debug_aranges + 0x00000000000018d0 0x100 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .debug_aranges + 0x00000000000019d0 0x180 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .debug_aranges + 0x0000000000001b50 0x58 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .debug_aranges + 0x0000000000001ba8 0x240 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .debug_aranges + 0x0000000000001de8 0x38 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .debug_aranges + 0x0000000000001e20 0x138 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .debug_aranges + 0x0000000000001f58 0x80 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .debug_aranges + 0x0000000000001fd8 0x118 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .debug_aranges + 0x00000000000020f0 0x88 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .debug_aranges + 0x0000000000002178 0x50 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .debug_aranges + 0x00000000000021c8 0xc8 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .debug_aranges + 0x0000000000002290 0x2a8 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .debug_aranges + 0x0000000000002538 0x120 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .debug_aranges + 0x0000000000002658 0xc8 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .debug_aranges + 0x0000000000002720 0x218 ./Middlewares/FreeRTOS/cmsis_os2.o + .debug_aranges + 0x0000000000002938 0x48 ./Middlewares/FreeRTOS/heap_4.o + .debug_aranges + 0x0000000000002980 0x40 ./Middlewares/FreeRTOS/list.o + .debug_aranges + 0x00000000000029c0 0x80 ./Middlewares/FreeRTOS/port.o + .debug_aranges + 0x0000000000002a40 0x140 ./Middlewares/FreeRTOS/queue.o + .debug_aranges + 0x0000000000002b80 0x200 ./Middlewares/FreeRTOS/tasks.o + .debug_aranges + 0x0000000000002d80 0xc0 ./Middlewares/FreeRTOS/timers.o + .debug_aranges + 0x0000000000002e40 0x18 ./Middlewares/LibJPEG/jaricom.o + .debug_aranges + 0x0000000000002e58 0x38 ./Middlewares/LibJPEG/jcomapi.o + .debug_aranges + 0x0000000000002e90 0x58 ./Middlewares/LibJPEG/jdapimin.o + .debug_aranges + 0x0000000000002ee8 0x48 ./Middlewares/LibJPEG/jdapistd.o + .debug_aranges + 0x0000000000002f30 0x68 ./Middlewares/LibJPEG/jdarith.o + .debug_aranges + 0x0000000000002f98 0x50 ./Middlewares/LibJPEG/jdatasrc.o + .debug_aranges + 0x0000000000002fe8 0x60 ./Middlewares/LibJPEG/jdcoefct.o + .debug_aranges + 0x0000000000003048 0x68 ./Middlewares/LibJPEG/jdcolor.o + .debug_aranges + 0x00000000000030b0 0x28 ./Middlewares/LibJPEG/jddctmgr.o + .debug_aranges + 0x00000000000030d8 0x78 ./Middlewares/LibJPEG/jdhuff.o + .debug_aranges + 0x0000000000003150 0x48 ./Middlewares/LibJPEG/jdinput.o + .debug_aranges + 0x0000000000003198 0x40 ./Middlewares/LibJPEG/jdmainct.o + .debug_aranges + 0x00000000000031d8 0x90 ./Middlewares/LibJPEG/jdmarker.o + .debug_aranges + 0x0000000000003268 0x48 ./Middlewares/LibJPEG/jdmaster.o + .debug_aranges + 0x00000000000032b0 0x48 ./Middlewares/LibJPEG/jdmerge.o + .debug_aranges + 0x00000000000032f8 0x40 ./Middlewares/LibJPEG/jdpostct.o + .debug_aranges + 0x0000000000003338 0x58 ./Middlewares/LibJPEG/jdsample.o + .debug_aranges + 0x0000000000003390 0x48 ./Middlewares/LibJPEG/jerror.o + .debug_aranges + 0x00000000000033d8 0x20 ./Middlewares/LibJPEG/jidctflt.o + .debug_aranges + 0x00000000000033f8 0x20 ./Middlewares/LibJPEG/jidctfst.o + .debug_aranges + 0x0000000000003418 0x118 ./Middlewares/LibJPEG/jidctint.o + .debug_aranges + 0x0000000000003530 0x88 ./Middlewares/LibJPEG/jmemmgr.o + .debug_aranges + 0x00000000000035b8 0x48 ./Middlewares/LibJPEG/jmemnobs.o + .debug_aranges + 0x0000000000003600 0x70 ./Middlewares/LibJPEG/jquant1.o + .debug_aranges + 0x0000000000003670 0x70 ./Middlewares/LibJPEG/jquant2.o + .debug_aranges + 0x00000000000036e0 0x38 ./Middlewares/LibJPEG/jutils.o + .debug_aranges + 0x0000000000003718 0x48 ./Middlewares/LwIP/def.o + .debug_aranges + 0x0000000000003760 0x100 ./Middlewares/LwIP/dhcp.o + .debug_aranges + 0x0000000000003860 0x78 ./Middlewares/LwIP/etharp.o + .debug_aranges + 0x00000000000038d8 0x28 ./Middlewares/LwIP/ethernet.o + .debug_aranges + 0x0000000000003900 0x38 ./Middlewares/LwIP/icmp.o + .debug_aranges + 0x0000000000003938 0x20 ./Middlewares/LwIP/init.o + .debug_aranges + 0x0000000000003958 0x18 ./Middlewares/LwIP/ip.o + .debug_aranges + 0x0000000000003970 0x48 ./Middlewares/LwIP/ip4.o + .debug_aranges + 0x00000000000039b8 0x48 ./Middlewares/LwIP/ip4_addr.o + .debug_aranges + 0x0000000000003a00 0x58 ./Middlewares/LwIP/ip4_frag.o + .debug_aranges + 0x0000000000003a58 0x40 ./Middlewares/LwIP/mem.o + .debug_aranges + 0x0000000000003a98 0x58 ./Middlewares/LwIP/memp.o + .debug_aranges + 0x0000000000003af0 0xc8 ./Middlewares/LwIP/netif.o + .debug_aranges + 0x0000000000003bb8 0x120 ./Middlewares/LwIP/pbuf.o + .debug_aranges + 0x0000000000003cd8 0xc0 ./Middlewares/LwIP/sys_arch.o + .debug_aranges + 0x0000000000003d98 0x188 ./Middlewares/LwIP/tcp.o + .debug_aranges + 0x0000000000003f20 0x58 ./Middlewares/LwIP/tcp_in.o + .debug_aranges + 0x0000000000003f78 0xc0 ./Middlewares/LwIP/tcp_out.o + .debug_aranges + 0x0000000000004038 0x90 ./Middlewares/LwIP/tcpip.o + .debug_aranges + 0x00000000000040c8 0x68 ./Middlewares/LwIP/timeouts.o + .debug_aranges + 0x0000000000004130 0x90 ./Middlewares/LwIP/udp.o + +.debug_rnglists + 0x0000000000000000 0x4c4f + .debug_rnglists + 0x0000000000000000 0x13 ./Application/User/Core/freertos.o + .debug_rnglists + 0x0000000000000013 0x11c ./Application/User/Core/main.o + .debug_rnglists + 0x000000000000012f 0x152 ./Application/User/Core/stm32f7xx_hal_msp.o + .debug_rnglists + 0x0000000000000281 0x32 ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .debug_rnglists + 0x00000000000002b3 0x43 ./Application/User/Core/stm32f7xx_it.o + .debug_rnglists + 0x00000000000002f6 0x79 ./Application/User/Core/syscalls.o + .debug_rnglists + 0x000000000000036f 0x13 ./Application/User/Core/sysmem.o + .debug_rnglists + 0x0000000000000382 0x13 ./Application/User/LIBJPEG/App/libjpeg.o + .debug_rnglists + 0x0000000000000395 0x1a ./Application/User/LWIP/App/lwip.o + .debug_rnglists + 0x00000000000003af 0xd1 ./Application/User/LWIP/Target/ethernetif.o + .debug_rnglists + 0x0000000000000480 0x19 ./Application/User/Startup/startup_stm32f746nghx.o + .debug_rnglists + 0x0000000000000499 0x25 ./Application/User/TouchGFX/App/app_touchgfx.o + .debug_rnglists + 0x00000000000004be 0x5b ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .debug_rnglists + 0x0000000000000519 0x4f ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_rnglists + 0x0000000000000568 0x37 ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .debug_rnglists + 0x000000000000059f 0xf1 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_rnglists + 0x0000000000000690 0x43 ./Application/User/TouchGFX/target/generated/OSWrappers.o + .debug_rnglists + 0x00000000000006d3 0xb9 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_rnglists + 0x000000000000078c 0x127 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .debug_rnglists + 0x00000000000008b3 0x13a ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_rnglists + 0x00000000000009ed 0x1f1 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_rnglists + 0x0000000000000bde 0x1f ./Application/User/generated/ApplicationFontProvider.o + .debug_rnglists + 0x0000000000000bfd 0x19 ./Application/User/generated/BitmapDatabase.o + .debug_rnglists + 0x0000000000000c16 0x6d ./Application/User/generated/CachedFont.o + .debug_rnglists + 0x0000000000000c83 0x1e0 ./Application/User/generated/FontCache.o + .debug_rnglists + 0x0000000000000e63 0x14f ./Application/User/generated/FrontendApplicationBase.o + .debug_rnglists + 0x0000000000000fb2 0x82 ./Application/User/generated/GeneratedFont.o + .debug_rnglists + 0x0000000000001034 0x2fd ./Application/User/generated/MainScreenViewBase.o + .debug_rnglists + 0x0000000000001331 0x2c3 ./Application/User/generated/SliderContainerBase.o + .debug_rnglists + 0x00000000000015f4 0x19 ./Application/User/generated/Table_verdana_10_4bpp.o + .debug_rnglists + 0x000000000000160d 0x19 ./Application/User/generated/Table_verdana_20_4bpp.o + .debug_rnglists + 0x0000000000001626 0x19 ./Application/User/generated/Table_verdana_40_4bpp.o + .debug_rnglists + 0x000000000000163f 0xad ./Application/User/generated/Texts.o + .debug_rnglists + 0x00000000000016ec 0x3d ./Application/User/generated/TypedTextDatabase.o + .debug_rnglists + 0x0000000000001729 0x49 ./Application/User/gui/FrontendApplication.o + .debug_rnglists + 0x0000000000001772 0x3d ./Application/User/gui/MainScreenPresenter.o + .debug_rnglists + 0x00000000000017af 0x6d ./Application/User/gui/MainScreenView.o + .debug_rnglists + 0x000000000000181c 0x1f ./Application/User/gui/Model.o + .debug_rnglists + 0x000000000000183b 0x8b ./Application/User/gui/SliderContainer.o + .debug_rnglists + 0x00000000000018c6 0x63 ./Drivers/BSP/Components/lan8742.o + .debug_rnglists + 0x0000000000001929 0xb3 ./Drivers/BSP/stm32746g_discovery_qspi.o + .debug_rnglists + 0x00000000000019dc 0x19 ./Drivers/CMSIS/system_stm32f7xx.o + .debug_rnglists + 0x00000000000019f5 0x44 ./Drivers/Components/ft5336.o + .debug_rnglists + 0x0000000000001a39 0xb5 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .debug_rnglists + 0x0000000000001aee 0xd3 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .debug_rnglists + 0x0000000000001bc1 0x3d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .debug_rnglists + 0x0000000000001bfe 0x1f ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .debug_rnglists + 0x0000000000001c1d 0x8b ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .debug_rnglists + 0x0000000000001ca8 0xc0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .debug_rnglists + 0x0000000000001d68 0x16a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .debug_rnglists + 0x0000000000001ed2 0x57 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .debug_rnglists + 0x0000000000001f29 0x222 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .debug_rnglists + 0x000000000000214b 0x43 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .debug_rnglists + 0x000000000000218e 0xe8 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .debug_rnglists + 0x0000000000002276 0xa5 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .debug_rnglists + 0x000000000000231b 0xe5 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .debug_rnglists + 0x0000000000002400 0x90 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .debug_rnglists + 0x0000000000002490 0x46 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .debug_rnglists + 0x00000000000024d6 0x92 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .debug_rnglists + 0x0000000000002568 0x2c7 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .debug_rnglists + 0x000000000000282f 0xde ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .debug_rnglists + 0x000000000000290d 0x92 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .debug_rnglists + 0x000000000000299f 0x2ce ./Middlewares/FreeRTOS/cmsis_os2.o + .debug_rnglists + 0x0000000000002c6d 0x32 ./Middlewares/FreeRTOS/heap_4.o + .debug_rnglists + 0x0000000000002c9f 0x2b ./Middlewares/FreeRTOS/list.o + .debug_rnglists + 0x0000000000002cca 0x77 ./Middlewares/FreeRTOS/port.o + .debug_rnglists + 0x0000000000002d41 0x20f ./Middlewares/FreeRTOS/queue.o + .debug_rnglists + 0x0000000000002f50 0x279 ./Middlewares/FreeRTOS/tasks.o + .debug_rnglists + 0x00000000000031c9 0x10a ./Middlewares/FreeRTOS/timers.o + .debug_rnglists + 0x00000000000032d3 0x25 ./Middlewares/LibJPEG/jcomapi.o + .debug_rnglists + 0x00000000000032f8 0x5e ./Middlewares/LibJPEG/jdapimin.o + .debug_rnglists + 0x0000000000003356 0x43 ./Middlewares/LibJPEG/jdapistd.o + .debug_rnglists + 0x0000000000003399 0x7d ./Middlewares/LibJPEG/jdarith.o + .debug_rnglists + 0x0000000000003416 0x37 ./Middlewares/LibJPEG/jdatasrc.o + .debug_rnglists + 0x000000000000344d 0x65 ./Middlewares/LibJPEG/jdcoefct.o + .debug_rnglists + 0x00000000000034b2 0x59 ./Middlewares/LibJPEG/jdcolor.o + .debug_rnglists + 0x000000000000350b 0x1a ./Middlewares/LibJPEG/jddctmgr.o + .debug_rnglists + 0x0000000000003525 0x137 ./Middlewares/LibJPEG/jdhuff.o + .debug_rnglists + 0x000000000000365c 0x64 ./Middlewares/LibJPEG/jdinput.o + .debug_rnglists + 0x00000000000036c0 0x64 ./Middlewares/LibJPEG/jdmainct.o + .debug_rnglists + 0x0000000000003724 0x131 ./Middlewares/LibJPEG/jdmarker.o + .debug_rnglists + 0x0000000000003855 0x68 ./Middlewares/LibJPEG/jdmaster.o + .debug_rnglists + 0x00000000000038bd 0x42 ./Middlewares/LibJPEG/jdmerge.o + .debug_rnglists + 0x00000000000038ff 0x2c ./Middlewares/LibJPEG/jdpostct.o + .debug_rnglists + 0x000000000000392b 0x3f ./Middlewares/LibJPEG/jdsample.o + .debug_rnglists + 0x000000000000396a 0x32 ./Middlewares/LibJPEG/jerror.o + .debug_rnglists + 0x000000000000399c 0x29 ./Middlewares/LibJPEG/jidctflt.o + .debug_rnglists + 0x00000000000039c5 0x2f ./Middlewares/LibJPEG/jidctfst.o + .debug_rnglists + 0x00000000000039f4 0x12e ./Middlewares/LibJPEG/jidctint.o + .debug_rnglists + 0x0000000000003b22 0xb5 ./Middlewares/LibJPEG/jmemmgr.o + .debug_rnglists + 0x0000000000003bd7 0x31 ./Middlewares/LibJPEG/jmemnobs.o + .debug_rnglists + 0x0000000000003c08 0xc6 ./Middlewares/LibJPEG/jquant1.o + .debug_rnglists + 0x0000000000003cce 0x124 ./Middlewares/LibJPEG/jquant2.o + .debug_rnglists + 0x0000000000003df2 0x25 ./Middlewares/LibJPEG/jutils.o + .debug_rnglists + 0x0000000000003e17 0x55 ./Middlewares/LwIP/def.o + .debug_rnglists + 0x0000000000003e6c 0x163 ./Middlewares/LwIP/dhcp.o + .debug_rnglists + 0x0000000000003fcf 0xba ./Middlewares/LwIP/etharp.o + .debug_rnglists + 0x0000000000004089 0x1a ./Middlewares/LwIP/ethernet.o + .debug_rnglists + 0x00000000000040a3 0x42 ./Middlewares/LwIP/icmp.o + .debug_rnglists + 0x00000000000040e5 0x13 ./Middlewares/LwIP/init.o + .debug_rnglists + 0x00000000000040f8 0x5f ./Middlewares/LwIP/ip4.o + .debug_rnglists + 0x0000000000004157 0x33 ./Middlewares/LwIP/ip4_addr.o + .debug_rnglists + 0x000000000000418a 0x85 ./Middlewares/LwIP/ip4_frag.o + .debug_rnglists + 0x000000000000420f 0xc7 ./Middlewares/LwIP/mem.o + .debug_rnglists + 0x00000000000042d6 0x3d ./Middlewares/LwIP/memp.o + .debug_rnglists + 0x0000000000004313 0xda ./Middlewares/LwIP/netif.o + .debug_rnglists + 0x00000000000043ed 0x1d2 ./Middlewares/LwIP/pbuf.o + .debug_rnglists + 0x00000000000045bf 0x8b ./Middlewares/LwIP/sys_arch.o + .debug_rnglists + 0x000000000000464a 0x1d3 ./Middlewares/LwIP/tcp.o + .debug_rnglists + 0x000000000000481d 0x139 ./Middlewares/LwIP/tcp_in.o + .debug_rnglists + 0x0000000000004956 0x17f ./Middlewares/LwIP/tcp_out.o + .debug_rnglists + 0x0000000000004ad5 0x97 ./Middlewares/LwIP/tcpip.o + .debug_rnglists + 0x0000000000004b6c 0x58 ./Middlewares/LwIP/timeouts.o + .debug_rnglists + 0x0000000000004bc4 0x8b ./Middlewares/LwIP/udp.o + +.debug_macro 0x0000000000000000 0x46f9e + .debug_macro 0x0000000000000000 0x2ac ./Application/User/Core/freertos.o + .debug_macro 0x00000000000002ac 0xaae ./Application/User/Core/freertos.o + .debug_macro 0x0000000000000d5a 0x174 ./Application/User/Core/freertos.o + .debug_macro 0x0000000000000ece 0x22 ./Application/User/Core/freertos.o + .debug_macro 0x0000000000000ef0 0x8e ./Application/User/Core/freertos.o + .debug_macro 0x0000000000000f7e 0x51 ./Application/User/Core/freertos.o + .debug_macro 0x0000000000000fcf 0x103 ./Application/User/Core/freertos.o + .debug_macro 0x00000000000010d2 0x6a ./Application/User/Core/freertos.o + .debug_macro 0x000000000000113c 0x1df ./Application/User/Core/freertos.o + .debug_macro 0x000000000000131b 0x14b ./Application/User/Core/freertos.o + .debug_macro 0x0000000000001466 0x15a ./Application/User/Core/freertos.o + .debug_macro 0x00000000000015c0 0xc9 ./Application/User/Core/freertos.o + .debug_macro 0x0000000000001689 0x1c ./Application/User/Core/freertos.o + .debug_macro 0x00000000000016a5 0x26 ./Application/User/Core/freertos.o + .debug_macro 0x00000000000016cb 0x49b ./Application/User/Core/freertos.o + .debug_macro 0x0000000000001b66 0xb5 ./Application/User/Core/freertos.o + .debug_macro 0x0000000000001c1b 0xaa ./Application/User/Core/freertos.o + .debug_macro 0x0000000000001cc5 0x2bf ./Application/User/Core/freertos.o + .debug_macro 0x0000000000001f84 0x2e ./Application/User/Core/freertos.o + .debug_macro 0x0000000000001fb2 0x3b ./Application/User/Core/freertos.o + .debug_macro 0x0000000000001fed 0x1c ./Application/User/Core/freertos.o + .debug_macro 0x0000000000002009 0x22 ./Application/User/Core/freertos.o + .debug_macro 0x000000000000202b 0xd9 ./Application/User/Core/freertos.o + .debug_macro 0x0000000000002104 0x12cd ./Application/User/Core/freertos.o + .debug_macro 0x00000000000033d1 0x11f ./Application/User/Core/freertos.o + .debug_macro 0x00000000000034f0 0x19 ./Application/User/Core/freertos.o + .debug_macro 0x0000000000003509 0x1920a ./Application/User/Core/freertos.o + .debug_macro 0x000000000001c713 0x6d ./Application/User/Core/freertos.o + .debug_macro 0x000000000001c780 0x3749 ./Application/User/Core/freertos.o + .debug_macro 0x000000000001fec9 0x63 ./Application/User/Core/freertos.o + .debug_macro 0x000000000001ff2c 0x18ad ./Application/User/Core/freertos.o + .debug_macro 0x00000000000217d9 0x6c4 ./Application/User/Core/freertos.o + .debug_macro 0x0000000000021e9d 0x185 ./Application/User/Core/freertos.o + .debug_macro 0x0000000000022022 0x115 ./Application/User/Core/freertos.o + .debug_macro 0x0000000000022137 0x1fd ./Application/User/Core/freertos.o + .debug_macro 0x0000000000022334 0xa5 ./Application/User/Core/freertos.o + .debug_macro 0x00000000000223d9 0x24f ./Application/User/Core/freertos.o + .debug_macro 0x0000000000022628 0x41 ./Application/User/Core/freertos.o + .debug_macro 0x0000000000022669 0x58 ./Application/User/Core/freertos.o + .debug_macro 0x00000000000226c1 0x236 ./Application/User/Core/freertos.o + .debug_macro 0x00000000000228f7 0xc7 ./Application/User/Core/freertos.o + .debug_macro 0x00000000000229be 0x4c ./Application/User/Core/freertos.o + .debug_macro 0x0000000000022a0a 0x208 ./Application/User/Core/freertos.o + .debug_macro 0x0000000000022c12 0xd44 ./Application/User/Core/freertos.o + .debug_macro 0x0000000000023956 0x14e ./Application/User/Core/freertos.o + .debug_macro 0x0000000000023aa4 0x25a ./Application/User/Core/freertos.o + .debug_macro 0x0000000000023cfe 0x12 ./Application/User/Core/freertos.o + .debug_macro 0x0000000000023d10 0x504 ./Application/User/Core/freertos.o + .debug_macro 0x0000000000024214 0x22c ./Application/User/Core/freertos.o + .debug_macro 0x0000000000024440 0x61 ./Application/User/Core/freertos.o + .debug_macro 0x00000000000244a1 0xa5 ./Application/User/Core/freertos.o + .debug_macro 0x0000000000024546 0x198 ./Application/User/Core/freertos.o + .debug_macro 0x00000000000246de 0xd6 ./Application/User/Core/freertos.o + .debug_macro 0x00000000000247b4 0x12e ./Application/User/Core/freertos.o + .debug_macro 0x00000000000248e2 0x108 ./Application/User/Core/freertos.o + .debug_macro 0x00000000000249ea 0x35 ./Application/User/Core/freertos.o + .debug_macro 0x0000000000024a1f 0x2d4 ./Application/User/Core/freertos.o + .debug_macro 0x0000000000024cf3 0xa7c ./Application/User/Core/freertos.o + .debug_macro 0x000000000002576f 0x59 ./Application/User/Core/freertos.o + .debug_macro 0x00000000000257c8 0x14d ./Application/User/Core/freertos.o + .debug_macro 0x0000000000025915 0xac ./Application/User/Core/freertos.o + .debug_macro 0x00000000000259c1 0x7c4 ./Application/User/Core/main.o + .debug_macro 0x0000000000026185 0x14b ./Application/User/Core/main.o + .debug_macro 0x00000000000262d0 0x66 ./Application/User/Core/main.o + .debug_macro 0x0000000000026336 0x74 ./Application/User/Core/main.o + .debug_macro 0x00000000000263aa 0xdd ./Application/User/Core/main.o + .debug_macro 0x0000000000026487 0x61 ./Application/User/Core/main.o + .debug_macro 0x00000000000264e8 0x2a ./Application/User/Core/main.o + .debug_macro 0x0000000000026512 0x43 ./Application/User/Core/main.o + .debug_macro 0x0000000000026555 0x34 ./Application/User/Core/main.o + .debug_macro 0x0000000000026589 0x16 ./Application/User/Core/main.o + .debug_macro 0x000000000002659f 0x35 ./Application/User/Core/main.o + .debug_macro 0x00000000000265d4 0x369 ./Application/User/Core/main.o + .debug_macro 0x000000000002693d 0x10 ./Application/User/Core/main.o + .debug_macro 0x000000000002694d 0x16 ./Application/User/Core/main.o + .debug_macro 0x0000000000026963 0x43 ./Application/User/Core/main.o + .debug_macro 0x00000000000269a6 0x34 ./Application/User/Core/main.o + .debug_macro 0x00000000000269da 0x10 ./Application/User/Core/main.o + .debug_macro 0x00000000000269ea 0x58 ./Application/User/Core/main.o + .debug_macro 0x0000000000026a42 0x8e ./Application/User/Core/main.o + .debug_macro 0x0000000000026ad0 0x1c ./Application/User/Core/main.o + .debug_macro 0x0000000000026aec 0x177 ./Application/User/Core/main.o + .debug_macro 0x0000000000026c63 0x16 ./Application/User/Core/main.o + .debug_macro 0x0000000000026c79 0x16 ./Application/User/Core/main.o + .debug_macro 0x0000000000026c8f 0x147 ./Application/User/Core/main.o + .debug_macro 0x0000000000026dd6 0x22 ./Application/User/Core/main.o + .debug_macro 0x0000000000026df8 0x64 ./Application/User/Core/main.o + .debug_macro 0x0000000000026e5c 0x67 ./Application/User/Core/main.o + .debug_macro 0x0000000000026ec3 0xe6 ./Application/User/Core/main.o + .debug_macro 0x0000000000026fa9 0xd6 ./Application/User/Core/main.o + .debug_macro 0x000000000002707f 0x16 ./Application/User/Core/main.o + .debug_macro 0x0000000000027095 0x10 ./Application/User/Core/main.o + .debug_macro 0x00000000000270a5 0x16 ./Application/User/Core/main.o + .debug_macro 0x00000000000270bb 0x16 ./Application/User/Core/main.o + .debug_macro 0x00000000000270d1 0x29 ./Application/User/Core/main.o + .debug_macro 0x00000000000270fa 0x10 ./Application/User/Core/main.o + .debug_macro 0x000000000002710a 0x22 ./Application/User/Core/main.o + .debug_macro 0x000000000002712c 0x10 ./Application/User/Core/main.o + .debug_macro 0x000000000002713c 0x1c ./Application/User/Core/main.o + .debug_macro 0x0000000000027158 0x52 ./Application/User/Core/main.o + .debug_macro 0x00000000000271aa 0x10 ./Application/User/Core/main.o + .debug_macro 0x00000000000271ba 0x52 ./Application/User/Core/main.o + .debug_macro 0x000000000002720c 0xc1 ./Application/User/Core/main.o + .debug_macro 0x00000000000272cd 0x1c ./Application/User/Core/main.o + .debug_macro 0x00000000000272e9 0x3d ./Application/User/Core/main.o + .debug_macro 0x0000000000027326 0xc8 ./Application/User/Core/main.o + .debug_macro 0x00000000000273ee 0x16 ./Application/User/Core/main.o + .debug_macro 0x0000000000027404 0x10 ./Application/User/Core/main.o + .debug_macro 0x0000000000027414 0x10 ./Application/User/Core/main.o + .debug_macro 0x0000000000027424 0x35 ./Application/User/Core/main.o + .debug_macro 0x0000000000027459 0x28 ./Application/User/Core/main.o + .debug_macro 0x0000000000027481 0x10 ./Application/User/Core/main.o + .debug_macro 0x0000000000027491 0x17 ./Application/User/Core/main.o + .debug_macro 0x00000000000274a8 0x10 ./Application/User/Core/main.o + .debug_macro 0x00000000000274b8 0x460 ./Application/User/Core/main.o + .debug_macro 0x0000000000027918 0x43 ./Application/User/Core/main.o + .debug_macro 0x000000000002795b 0x7c ./Application/User/Core/main.o + .debug_macro 0x00000000000279d7 0x17 ./Application/User/Core/main.o + .debug_macro 0x00000000000279ee 0x118 ./Application/User/Core/main.o + .debug_macro 0x0000000000027b06 0x19 ./Application/User/Core/main.o + .debug_macro 0x0000000000027b1f 0x11f ./Application/User/Core/main.o + .debug_macro 0x0000000000027c3e 0x82 ./Application/User/Core/main.o + .debug_macro 0x0000000000027cc0 0x66 ./Application/User/Core/main.o + .debug_macro 0x0000000000027d26 0x739 ./Application/User/Core/main.o + .debug_macro 0x000000000002845f 0x10 ./Application/User/Core/main.o + .debug_macro 0x000000000002846f 0x10 ./Application/User/Core/main.o + .debug_macro 0x000000000002847f 0x3f ./Application/User/Core/main.o + .debug_macro 0x00000000000284be 0x25 ./Application/User/Core/main.o + .debug_macro 0x00000000000284e3 0x15b ./Application/User/Core/main.o + .debug_macro 0x000000000002863e 0x22 ./Application/User/Core/main.o + .debug_macro 0x0000000000028660 0x10 ./Application/User/Core/main.o + .debug_macro 0x0000000000028670 0xb3 ./Application/User/Core/main.o + .debug_macro 0x0000000000028723 0x6a ./Application/User/Core/main.o + .debug_macro 0x000000000002878d 0x1bd ./Application/User/Core/main.o + .debug_macro 0x000000000002894a 0x10 ./Application/User/Core/main.o + .debug_macro 0x000000000002895a 0x169 ./Application/User/Core/main.o + .debug_macro 0x0000000000028ac3 0x13d ./Application/User/Core/main.o + .debug_macro 0x0000000000028c00 0xa0 ./Application/User/Core/main.o + .debug_macro 0x0000000000028ca0 0x28 ./Application/User/Core/main.o + .debug_macro 0x0000000000028cc8 0x46 ./Application/User/Core/main.o + .debug_macro 0x0000000000028d0e 0x22 ./Application/User/Core/main.o + .debug_macro 0x0000000000028d30 0x16 ./Application/User/Core/main.o + .debug_macro 0x0000000000028d46 0x10 ./Application/User/Core/main.o + .debug_macro 0x0000000000028d56 0x2e ./Application/User/Core/main.o + .debug_macro 0x0000000000028d84 0xea ./Application/User/Core/main.o + .debug_macro 0x0000000000028e6e 0x10 ./Application/User/Core/main.o + .debug_macro 0x0000000000028e7e 0x4d ./Application/User/Core/main.o + .debug_macro 0x0000000000028ecb 0x29 ./Application/User/Core/main.o + .debug_macro 0x0000000000028ef4 0x16 ./Application/User/Core/main.o + .debug_macro 0x0000000000028f0a 0x16 ./Application/User/Core/main.o + .debug_macro 0x0000000000028f20 0x73 ./Application/User/Core/main.o + .debug_macro 0x0000000000028f93 0x10 ./Application/User/Core/main.o + .debug_macro 0x0000000000028fa3 0x1c ./Application/User/Core/main.o + .debug_macro 0x0000000000028fbf 0x1ed ./Application/User/Core/main.o + .debug_macro 0x00000000000291ac 0xb8 ./Application/User/Core/main.o + .debug_macro 0x0000000000029264 0x244 ./Application/User/Core/stm32f7xx_hal_msp.o + .debug_macro 0x00000000000294a8 0x235 ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .debug_macro 0x00000000000296dd 0x24e ./Application/User/Core/stm32f7xx_it.o + .debug_macro 0x000000000002992b 0x51c ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000029e47 0x5b ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000029ea2 0x94 ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000029f36 0x57 ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000029f8d 0x10 ./Application/User/Core/syscalls.o + .debug_macro 0x0000000000029f9d 0xcf ./Application/User/Core/syscalls.o + .debug_macro 0x000000000002a06c 0x12c ./Application/User/Core/syscalls.o + .debug_macro 0x000000000002a198 0x5d ./Application/User/Core/syscalls.o + .debug_macro 0x000000000002a1f5 0xd0 ./Application/User/Core/syscalls.o + .debug_macro 0x000000000002a2c5 0x1c ./Application/User/Core/syscalls.o + .debug_macro 0x000000000002a2e1 0x10 ./Application/User/Core/syscalls.o + .debug_macro 0x000000000002a2f1 0xce ./Application/User/Core/syscalls.o + .debug_macro 0x000000000002a3bf 0x31a ./Application/User/Core/syscalls.o + .debug_macro 0x000000000002a6d9 0x190 ./Application/User/Core/syscalls.o + .debug_macro 0x000000000002a869 0x16 ./Application/User/Core/syscalls.o + .debug_macro 0x000000000002a87f 0x4f0 ./Application/User/Core/sysmem.o + .debug_macro 0x000000000002ad6f 0x1c ./Application/User/Core/sysmem.o + .debug_macro 0x000000000002ad8b 0x1fd ./Application/User/LIBJPEG/App/libjpeg.o + .debug_macro 0x000000000002af88 0x97 ./Application/User/LIBJPEG/App/libjpeg.o + .debug_macro 0x000000000002b01f 0xfd ./Application/User/LIBJPEG/App/libjpeg.o + .debug_macro 0x000000000002b11c 0x10 ./Application/User/LIBJPEG/App/libjpeg.o + .debug_macro 0x000000000002b12c 0x751 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x000000000002b87d 0x10 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x000000000002b88d 0x5e ./Application/User/LWIP/App/lwip.o + .debug_macro 0x000000000002b8eb 0x16 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x000000000002b901 0x20 ./Application/User/LWIP/App/lwip.o + .debug_macro 0x000000000002b921 0x71b ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x000000000002c03c 0xb9 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x000000000002c0f5 0x1c3 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x000000000002c2b8 0x464 ./Application/User/LWIP/Target/ethernetif.o + .debug_macro 0x000000000002c71c 0x1b ./Application/User/TouchGFX/App/app_touchgfx.o + .debug_macro 0x000000000002c737 0x2af ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .debug_macro 0x000000000002c9e6 0xb86 ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .debug_macro 0x000000000002d56c 0x34 ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .debug_macro 0x000000000002d5a0 0x16 ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .debug_macro 0x000000000002d5b6 0x1c ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .debug_macro 0x000000000002d5d2 0x99 ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .debug_macro 0x000000000002d66b 0x1c ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .debug_macro 0x000000000002d687 0x1b2 ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .debug_macro 0x000000000002d839 0x10 ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .debug_macro 0x000000000002d849 0x3ed ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .debug_macro 0x000000000002dc36 0x17b ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .debug_macro 0x000000000002ddb1 0x38c ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .debug_macro 0x000000000002e13d 0x43 ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .debug_macro 0x000000000002e180 0x18a ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .debug_macro 0x000000000002e30a 0x10 ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .debug_macro 0x000000000002e31a 0x58 ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .debug_macro 0x000000000002e372 0x4b2 ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x000000000002e824 0x10 ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x000000000002e834 0x39e ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x000000000002ebd2 0x12cd ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_macro 0x000000000002fe9f 0x259 ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .debug_macro 0x00000000000300f8 0xb2 ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .debug_macro 0x00000000000301aa 0x502 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_macro 0x00000000000306ac 0x2ce ./Application/User/TouchGFX/target/generated/OSWrappers.o + .debug_macro 0x000000000003097a 0x10 ./Application/User/TouchGFX/target/generated/OSWrappers.o + .debug_macro 0x000000000003098a 0x499 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_macro 0x0000000000030e23 0x310 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .debug_macro 0x0000000000031133 0x97 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .debug_macro 0x00000000000311ca 0x104 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .debug_macro 0x00000000000312ce 0x139 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .debug_macro 0x0000000000031407 0x10 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .debug_macro 0x0000000000031417 0x35 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .debug_macro 0x000000000003144c 0x1c ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .debug_macro 0x0000000000031468 0xde ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .debug_macro 0x0000000000031546 0x16 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .debug_macro 0x000000000003155c 0x63d ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_macro 0x0000000000031b99 0x737 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x00000000000322d0 0x16 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x00000000000322e6 0x10 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x00000000000322f6 0x34 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x000000000003232a 0xd3 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_macro 0x00000000000323fd 0x116 ./Application/User/generated/ApplicationFontProvider.o + .debug_macro 0x0000000000032513 0xc7 ./Application/User/generated/BitmapDatabase.o + .debug_macro 0x00000000000325da 0x120 ./Application/User/generated/CachedFont.o + .debug_macro 0x00000000000326fa 0x21c ./Application/User/generated/FontCache.o + .debug_macro 0x0000000000032916 0x8e ./Application/User/generated/FontCache.o + .debug_macro 0x00000000000329a4 0x10 ./Application/User/generated/FontCache.o + .debug_macro 0x00000000000329b4 0xb3 ./Application/User/generated/Font_verdana_10_4bpp_0.o + .debug_macro 0x0000000000032a67 0xb3 ./Application/User/generated/Font_verdana_20_4bpp_0.o + .debug_macro 0x0000000000032b1a 0xb3 ./Application/User/generated/Font_verdana_40_4bpp_0.o + .debug_macro 0x0000000000032bcd 0x417 ./Application/User/generated/FrontendApplicationBase.o + .debug_macro 0x0000000000032fe4 0xe4 ./Application/User/generated/GeneratedFont.o + .debug_macro 0x00000000000330c8 0xd0 ./Application/User/generated/Kerning_verdana_10_4bpp.o + .debug_macro 0x0000000000033198 0xd0 ./Application/User/generated/Kerning_verdana_20_4bpp.o + .debug_macro 0x0000000000033268 0xd0 ./Application/User/generated/Kerning_verdana_40_4bpp.o + .debug_macro 0x0000000000033338 0xcc ./Application/User/generated/LanguageGb.o + .debug_macro 0x0000000000033404 0x3c7 ./Application/User/generated/MainScreenViewBase.o + .debug_macro 0x00000000000337cb 0x39f ./Application/User/generated/SliderContainerBase.o + .debug_macro 0x0000000000033b6a 0xe4 ./Application/User/generated/Table_verdana_10_4bpp.o + .debug_macro 0x0000000000033c4e 0xe4 ./Application/User/generated/Table_verdana_20_4bpp.o + .debug_macro 0x0000000000033d32 0xe4 ./Application/User/generated/Table_verdana_40_4bpp.o + .debug_macro 0x0000000000033e16 0x2c3 ./Application/User/generated/Texts.o + .debug_macro 0x00000000000340d9 0x102 ./Application/User/generated/TypedTextDatabase.o + .debug_macro 0x00000000000341db 0x1a ./Application/User/generated/image_Blue_Slider_Vertical_Small_Indicators_Slider3_Vertical_Round_nob.o + .debug_macro 0x00000000000341f5 0x1a ./Application/User/generated/image_Blue_Slider_Vertical_Small_Slider3_Vertical_Round_back.o + .debug_macro 0x000000000003420f 0x1a ./Application/User/generated/image_Blue_Slider_Vertical_Small_Slider3_Vertical_Round_fill.o + .debug_macro 0x0000000000034229 0x33b ./Application/User/gui/FrontendApplication.o + .debug_macro 0x0000000000034564 0x3c7 ./Application/User/gui/MainScreenPresenter.o + .debug_macro 0x000000000003492b 0x3c7 ./Application/User/gui/MainScreenView.o + .debug_macro 0x0000000000034cf2 0x25d ./Application/User/gui/Model.o + .debug_macro 0x0000000000034f4f 0x38b ./Application/User/gui/SliderContainer.o + .debug_macro 0x00000000000352da 0x84 ./Drivers/BSP/Components/lan8742.o + .debug_macro 0x000000000003535e 0x45e ./Drivers/BSP/Components/lan8742.o + .debug_macro 0x00000000000357bc 0x24d ./Drivers/BSP/stm32746g_discovery_qspi.o + .debug_macro 0x0000000000035a09 0x23b ./Drivers/CMSIS/system_stm32f7xx.o + .debug_macro 0x0000000000035c44 0x7b ./Drivers/Components/ft5336.o + .debug_macro 0x0000000000035cbf 0x259 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .debug_macro 0x0000000000035f18 0x235 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .debug_macro 0x000000000003614d 0x235 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .debug_macro 0x0000000000036382 0x235 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .debug_macro 0x00000000000365b7 0x23b ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .debug_macro 0x00000000000367f2 0x244 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .debug_macro 0x0000000000036a36 0x30f ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .debug_macro 0x0000000000036d45 0x23b ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .debug_macro 0x0000000000036f80 0x301 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .debug_macro 0x0000000000037281 0x235 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .debug_macro 0x00000000000374b6 0x23d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .debug_macro 0x00000000000376f3 0x24d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .debug_macro 0x0000000000037940 0x259 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .debug_macro 0x0000000000037b99 0x259 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .debug_macro 0x0000000000037df2 0x235 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .debug_macro 0x0000000000038027 0x235 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .debug_macro 0x000000000003825c 0x236 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .debug_macro 0x0000000000038492 0x235 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .debug_macro 0x00000000000386c7 0x25f ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .debug_macro 0x0000000000038926 0x247 ./Middlewares/FreeRTOS/cmsis_os2.o + .debug_macro 0x0000000000038b6d 0x91 ./Middlewares/FreeRTOS/cmsis_os2.o + .debug_macro 0x0000000000038bfe 0x8d ./Middlewares/FreeRTOS/cmsis_os2.o + .debug_macro 0x0000000000038c8b 0x9a ./Middlewares/FreeRTOS/cmsis_os2.o + .debug_macro 0x0000000000038d25 0x1ae ./Middlewares/FreeRTOS/heap_4.o + .debug_macro 0x0000000000038ed3 0x187 ./Middlewares/FreeRTOS/list.o + .debug_macro 0x000000000003905a 0x184 ./Middlewares/FreeRTOS/port.o + .debug_macro 0x00000000000391de 0x216 ./Middlewares/FreeRTOS/queue.o + .debug_macro 0x00000000000393f4 0x87 ./Middlewares/FreeRTOS/queue.o + .debug_macro 0x000000000003947b 0x27f ./Middlewares/FreeRTOS/tasks.o + .debug_macro 0x00000000000396fa 0x10 ./Middlewares/FreeRTOS/tasks.o + .debug_macro 0x000000000003970a 0x1dc ./Middlewares/FreeRTOS/timers.o + .debug_macro 0x00000000000398e6 0x97 ./Middlewares/FreeRTOS/timers.o + .debug_macro 0x000000000003997d 0x28a ./Middlewares/LibJPEG/jaricom.o + .debug_macro 0x0000000000039c07 0x6b ./Middlewares/LibJPEG/jaricom.o + .debug_macro 0x0000000000039c72 0x124 ./Middlewares/LibJPEG/jaricom.o + .debug_macro 0x0000000000039d96 0x8f ./Middlewares/LibJPEG/jaricom.o + .debug_macro 0x0000000000039e25 0xaa ./Middlewares/LibJPEG/jaricom.o + .debug_macro 0x0000000000039ecf 0x284 ./Middlewares/LibJPEG/jcomapi.o + .debug_macro 0x000000000003a153 0x284 ./Middlewares/LibJPEG/jdapimin.o + .debug_macro 0x000000000003a3d7 0x284 ./Middlewares/LibJPEG/jdapistd.o + .debug_macro 0x000000000003a65b 0x290 ./Middlewares/LibJPEG/jdarith.o + .debug_macro 0x000000000003a8eb 0x279 ./Middlewares/LibJPEG/jdatasrc.o + .debug_macro 0x000000000003ab64 0x2ad ./Middlewares/LibJPEG/jdcoefct.o + .debug_macro 0x000000000003ae11 0x2ae ./Middlewares/LibJPEG/jdcolor.o + .debug_macro 0x000000000003b0bf 0x29a ./Middlewares/LibJPEG/jddctmgr.o + .debug_macro 0x000000000003b359 0x2e1 ./Middlewares/LibJPEG/jdhuff.o + .debug_macro 0x000000000003b63a 0x284 ./Middlewares/LibJPEG/jdinput.o + .debug_macro 0x000000000003b8be 0x299 ./Middlewares/LibJPEG/jdmainct.o + .debug_macro 0x000000000003bb57 0x2c1 ./Middlewares/LibJPEG/jdmarker.o + .debug_macro 0x000000000003be18 0x284 ./Middlewares/LibJPEG/jdmaster.o + .debug_macro 0x000000000003c09c 0x296 ./Middlewares/LibJPEG/jdmerge.o + .debug_macro 0x000000000003c332 0x284 ./Middlewares/LibJPEG/jdpostct.o + .debug_macro 0x000000000003c5b6 0x284 ./Middlewares/LibJPEG/jdsample.o + .debug_macro 0x000000000003c83a 0x28d ./Middlewares/LibJPEG/jerror.o + .debug_macro 0x000000000003cac7 0x10 ./Middlewares/LibJPEG/jerror.o + .debug_macro 0x000000000003cad7 0x293 ./Middlewares/LibJPEG/jidctflt.o + .debug_macro 0x000000000003cd6a 0x2df ./Middlewares/LibJPEG/jidctfst.o + .debug_macro 0x000000000003d049 0x2ef ./Middlewares/LibJPEG/jidctint.o + .debug_macro 0x000000000003d338 0x2a1 ./Middlewares/LibJPEG/jmemmgr.o + .debug_macro 0x000000000003d5d9 0x28e ./Middlewares/LibJPEG/jmemnobs.o + .debug_macro 0x000000000003d867 0x29d ./Middlewares/LibJPEG/jquant1.o + .debug_macro 0x000000000003db04 0x350 ./Middlewares/LibJPEG/jquant2.o + .debug_macro 0x000000000003de54 0x28b ./Middlewares/LibJPEG/jutils.o + .debug_macro 0x000000000003e0df 0x510 ./Middlewares/LwIP/def.o + .debug_macro 0x000000000003e5ef 0x6c4 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x000000000003ecb3 0x2f ./Middlewares/LwIP/dhcp.o + .debug_macro 0x000000000003ece2 0x155 ./Middlewares/LwIP/dhcp.o + .debug_macro 0x000000000003ee37 0x6a0 ./Middlewares/LwIP/etharp.o + .debug_macro 0x000000000003f4d7 0x644 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x000000000003fb1b 0x35 ./Middlewares/LwIP/ethernet.o + .debug_macro 0x000000000003fb50 0x61f ./Middlewares/LwIP/icmp.o + .debug_macro 0x000000000004016f 0x1c ./Middlewares/LwIP/icmp.o + .debug_macro 0x000000000004018b 0x7e6 ./Middlewares/LwIP/init.o + .debug_macro 0x0000000000040971 0x5cb ./Middlewares/LwIP/ip.o + .debug_macro 0x0000000000040f3c 0x6a4 ./Middlewares/LwIP/ip4.o + .debug_macro 0x00000000000415e0 0x16 ./Middlewares/LwIP/ip4.o + .debug_macro 0x00000000000415f6 0x58b ./Middlewares/LwIP/ip4_addr.o + .debug_macro 0x0000000000041b81 0x646 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x00000000000421c7 0x10 ./Middlewares/LwIP/ip4_frag.o + .debug_macro 0x00000000000421d7 0x6ae ./Middlewares/LwIP/mem.o + .debug_macro 0x0000000000042885 0x83f ./Middlewares/LwIP/memp.o + .debug_macro 0x00000000000430c4 0x11b ./Middlewares/LwIP/memp.o + .debug_macro 0x00000000000431df 0xe0 ./Middlewares/LwIP/memp.o + .debug_macro 0x00000000000432bf 0x786 ./Middlewares/LwIP/netif.o + .debug_macro 0x0000000000043a45 0x71e ./Middlewares/LwIP/pbuf.o + .debug_macro 0x0000000000044163 0x5fb ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x000000000004475e 0x11 ./Middlewares/LwIP/sys_arch.o + .debug_macro 0x000000000004476f 0x666 ./Middlewares/LwIP/tcp.o + .debug_macro 0x0000000000044dd5 0x653 ./Middlewares/LwIP/tcp_in.o + .debug_macro 0x0000000000045428 0x661 ./Middlewares/LwIP/tcp_out.o + .debug_macro 0x0000000000045a89 0x704 ./Middlewares/LwIP/tcpip.o + .debug_macro 0x000000000004618d 0x7ae ./Middlewares/LwIP/timeouts.o + .debug_macro 0x000000000004693b 0x663 ./Middlewares/LwIP/udp.o + +.debug_line 0x0000000000000000 0x9d9d1 + .debug_line 0x0000000000000000 0x97b ./Application/User/Core/freertos.o + .debug_line 0x000000000000097b 0x1c29 ./Application/User/Core/main.o + .debug_line 0x00000000000025a4 0x100a ./Application/User/Core/stm32f7xx_hal_msp.o + .debug_line 0x00000000000035ae 0x976 ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .debug_line 0x0000000000003f24 0x969 ./Application/User/Core/stm32f7xx_it.o + .debug_line 0x000000000000488d 0xf18 ./Application/User/Core/syscalls.o + .debug_line 0x00000000000057a5 0xc88 ./Application/User/Core/sysmem.o + .debug_line 0x000000000000642d 0x7b5 ./Application/User/LIBJPEG/App/libjpeg.o + .debug_line 0x0000000000006be2 0x10b9 ./Application/User/LWIP/App/lwip.o + .debug_line 0x0000000000007c9b 0x199a ./Application/User/LWIP/Target/ethernetif.o + .debug_line 0x0000000000009635 0x77 ./Application/User/Startup/startup_stm32f746nghx.o + .debug_line 0x00000000000096ac 0x103 ./Application/User/TouchGFX/App/app_touchgfx.o + .debug_line 0x00000000000097af 0xd09 ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .debug_line 0x000000000000a4b8 0x1225 ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_line 0x000000000000b6dd 0xa69 ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .debug_line 0x000000000000c146 0x1667 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_line 0x000000000000d7ad 0xd0c ./Application/User/TouchGFX/target/generated/OSWrappers.o + .debug_line 0x000000000000e4b9 0x1765 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_line 0x000000000000fc1e 0x167e ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .debug_line 0x000000000001129c 0x1caa ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_line 0x0000000000012f46 0x2530 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_line 0x0000000000015476 0x7af ./Application/User/generated/ApplicationFontProvider.o + .debug_line 0x0000000000015c25 0x66f ./Application/User/generated/BitmapDatabase.o + .debug_line 0x0000000000016294 0x9d1 ./Application/User/generated/CachedFont.o + .debug_line 0x0000000000016c65 0x14f8 ./Application/User/generated/FontCache.o + .debug_line 0x000000000001815d 0x5ba ./Application/User/generated/Font_verdana_10_4bpp_0.o + .debug_line 0x0000000000018717 0x5ba ./Application/User/generated/Font_verdana_20_4bpp_0.o + .debug_line 0x0000000000018cd1 0x5ba ./Application/User/generated/Font_verdana_40_4bpp_0.o + .debug_line 0x000000000001928b 0x1911 ./Application/User/generated/FrontendApplicationBase.o + .debug_line 0x000000000001ab9c 0x98d ./Application/User/generated/GeneratedFont.o + .debug_line 0x000000000001b529 0x629 ./Application/User/generated/Kerning_verdana_10_4bpp.o + .debug_line 0x000000000001bb52 0x629 ./Application/User/generated/Kerning_verdana_20_4bpp.o + .debug_line 0x000000000001c17b 0x629 ./Application/User/generated/Kerning_verdana_40_4bpp.o + .debug_line 0x000000000001c7a4 0x602 ./Application/User/generated/LanguageGb.o + .debug_line 0x000000000001cda6 0x1d67 ./Application/User/generated/MainScreenViewBase.o + .debug_line 0x000000000001eb0d 0x1d80 ./Application/User/generated/SliderContainerBase.o + .debug_line 0x000000000002088d 0x6e1 ./Application/User/generated/Table_verdana_10_4bpp.o + .debug_line 0x0000000000020f6e 0x6e1 ./Application/User/generated/Table_verdana_20_4bpp.o + .debug_line 0x000000000002164f 0x6e1 ./Application/User/generated/Table_verdana_40_4bpp.o + .debug_line 0x0000000000021d30 0xf94 ./Application/User/generated/Texts.o + .debug_line 0x0000000000022cc4 0x7d4 ./Application/User/generated/TypedTextDatabase.o + .debug_line 0x0000000000023498 0x133 ./Application/User/generated/image_Blue_Slider_Vertical_Small_Indicators_Slider3_Vertical_Round_nob.o + .debug_line 0x00000000000235cb 0x129 ./Application/User/generated/image_Blue_Slider_Vertical_Small_Slider3_Vertical_Round_back.o + .debug_line 0x00000000000236f4 0x129 ./Application/User/generated/image_Blue_Slider_Vertical_Small_Slider3_Vertical_Round_fill.o + .debug_line 0x000000000002381d 0x10c5 ./Application/User/gui/FrontendApplication.o + .debug_line 0x00000000000248e2 0x1236 ./Application/User/gui/MainScreenPresenter.o + .debug_line 0x0000000000025b18 0x1329 ./Application/User/gui/MainScreenView.o + .debug_line 0x0000000000026e41 0x94a ./Application/User/gui/Model.o + .debug_line 0x000000000002778b 0x12cd ./Application/User/gui/SliderContainer.o + .debug_line 0x0000000000028a58 0xab2 ./Drivers/BSP/Components/lan8742.o + .debug_line 0x000000000002950a 0x11a0 ./Drivers/BSP/stm32746g_discovery_qspi.o + .debug_line 0x000000000002a6aa 0x946 ./Drivers/CMSIS/system_stm32f7xx.o + .debug_line 0x000000000002aff0 0x774 ./Drivers/Components/ft5336.o + .debug_line 0x000000000002b764 0xc19 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .debug_line 0x000000000002c37d 0xe83 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .debug_line 0x000000000002d200 0xc3b ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .debug_line 0x000000000002de3b 0x96e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .debug_line 0x000000000002e7a9 0x140a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .debug_line 0x000000000002fbb3 0x1953 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .debug_line 0x0000000000031506 0x20fc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .debug_line 0x0000000000033602 0xdf8 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .debug_line 0x00000000000343fa 0x544c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .debug_line 0x0000000000039846 0xa44 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .debug_line 0x000000000003a28a 0x20f1 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .debug_line 0x000000000003c37b 0xc65 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .debug_line 0x000000000003cfe0 0x1cf0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .debug_line 0x000000000003ecd0 0x1336 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .debug_line 0x0000000000040006 0x1130 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .debug_line 0x0000000000041136 0x1339 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .debug_line 0x000000000004246f 0x4c45 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .debug_line 0x00000000000470b4 0x1e06 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .debug_line 0x0000000000048eba 0xd18 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .debug_line 0x0000000000049bd2 0x2edf ./Middlewares/FreeRTOS/cmsis_os2.o + .debug_line 0x000000000004cab1 0xae4 ./Middlewares/FreeRTOS/heap_4.o + .debug_line 0x000000000004d595 0x875 ./Middlewares/FreeRTOS/list.o + .debug_line 0x000000000004de0a 0xa76 ./Middlewares/FreeRTOS/port.o + .debug_line 0x000000000004e880 0x23a3 ./Middlewares/FreeRTOS/queue.o + .debug_line 0x0000000000050c23 0x3087 ./Middlewares/FreeRTOS/tasks.o + .debug_line 0x0000000000053caa 0x1237 ./Middlewares/FreeRTOS/timers.o + .debug_line 0x0000000000054ee1 0x82e ./Middlewares/LibJPEG/jaricom.o + .debug_line 0x000000000005570f 0x932 ./Middlewares/LibJPEG/jcomapi.o + .debug_line 0x0000000000056041 0xc8e ./Middlewares/LibJPEG/jdapimin.o + .debug_line 0x0000000000056ccf 0xbcf ./Middlewares/LibJPEG/jdapistd.o + .debug_line 0x000000000005789e 0x169d ./Middlewares/LibJPEG/jdarith.o + .debug_line 0x0000000000058f3b 0xa76 ./Middlewares/LibJPEG/jdatasrc.o + .debug_line 0x00000000000599b1 0x16e2 ./Middlewares/LibJPEG/jdcoefct.o + .debug_line 0x000000000005b093 0x1106 ./Middlewares/LibJPEG/jdcolor.o + .debug_line 0x000000000005c199 0xb6d ./Middlewares/LibJPEG/jddctmgr.o + .debug_line 0x000000000005cd06 0x257c ./Middlewares/LibJPEG/jdhuff.o + .debug_line 0x000000000005f282 0x1079 ./Middlewares/LibJPEG/jdinput.o + .debug_line 0x00000000000602fb 0xe04 ./Middlewares/LibJPEG/jdmainct.o + .debug_line 0x00000000000610ff 0x2030 ./Middlewares/LibJPEG/jdmarker.o + .debug_line 0x000000000006312f 0xeb8 ./Middlewares/LibJPEG/jdmaster.o + .debug_line 0x0000000000063fe7 0x1014 ./Middlewares/LibJPEG/jdmerge.o + .debug_line 0x0000000000064ffb 0xaeb ./Middlewares/LibJPEG/jdpostct.o + .debug_line 0x0000000000065ae6 0xcba ./Middlewares/LibJPEG/jdsample.o + .debug_line 0x00000000000667a0 0xa59 ./Middlewares/LibJPEG/jerror.o + .debug_line 0x00000000000671f9 0xe03 ./Middlewares/LibJPEG/jidctflt.o + .debug_line 0x0000000000067ffc 0xc56 ./Middlewares/LibJPEG/jidctfst.o + .debug_line 0x0000000000068c52 0xdddd ./Middlewares/LibJPEG/jidctint.o + .debug_line 0x0000000000076a2f 0x160d ./Middlewares/LibJPEG/jmemmgr.o + .debug_line 0x000000000007803c 0x8c6 ./Middlewares/LibJPEG/jmemnobs.o + .debug_line 0x0000000000078902 0x163f ./Middlewares/LibJPEG/jquant1.o + .debug_line 0x0000000000079f41 0x1c15 ./Middlewares/LibJPEG/jquant2.o + .debug_line 0x000000000007bb56 0x91f ./Middlewares/LibJPEG/jutils.o + .debug_line 0x000000000007c475 0xed6 ./Middlewares/LwIP/def.o + .debug_line 0x000000000007d34b 0x2935 ./Middlewares/LwIP/dhcp.o + .debug_line 0x000000000007fc80 0x1a73 ./Middlewares/LwIP/etharp.o + .debug_line 0x00000000000816f3 0x1019 ./Middlewares/LwIP/ethernet.o + .debug_line 0x000000000008270c 0x1173 ./Middlewares/LwIP/icmp.o + .debug_line 0x000000000008387f 0x10ed ./Middlewares/LwIP/init.o + .debug_line 0x000000000008496c 0xda7 ./Middlewares/LwIP/ip.o + .debug_line 0x0000000000085713 0x13ef ./Middlewares/LwIP/ip4.o + .debug_line 0x0000000000086b02 0x117d ./Middlewares/LwIP/ip4_addr.o + .debug_line 0x0000000000087c7f 0x19a9 ./Middlewares/LwIP/ip4_frag.o + .debug_line 0x0000000000089628 0x18ad ./Middlewares/LwIP/mem.o + .debug_line 0x000000000008aed5 0x144e ./Middlewares/LwIP/memp.o + .debug_line 0x000000000008c323 0x1b8f ./Middlewares/LwIP/netif.o + .debug_line 0x000000000008deb2 0x22c6 ./Middlewares/LwIP/pbuf.o + .debug_line 0x0000000000090178 0x120a ./Middlewares/LwIP/sys_arch.o + .debug_line 0x0000000000091382 0x2f4d ./Middlewares/LwIP/tcp.o + .debug_line 0x00000000000942cf 0x28d0 ./Middlewares/LwIP/tcp_in.o + .debug_line 0x0000000000096b9f 0x29a1 ./Middlewares/LwIP/tcp_out.o + .debug_line 0x0000000000099540 0x1518 ./Middlewares/LwIP/tcpip.o + .debug_line 0x000000000009aa58 0x1479 ./Middlewares/LwIP/timeouts.o + .debug_line 0x000000000009bed1 0x1b00 ./Middlewares/LwIP/udp.o + +.debug_str 0x0000000000000000 0x144a9a + .debug_str 0x0000000000000000 0xf451d ./Application/User/Core/freertos.o + 0xf4c0e (size before relaxing) + .debug_str 0x00000000000f451d 0x12187 ./Application/User/Core/main.o + 0x1072c6 (size before relaxing) + .debug_str 0x00000000001066a4 0x472 ./Application/User/Core/stm32f7xx_hal_msp.o + 0xf2c22 (size before relaxing) + .debug_str 0x0000000000106b16 0x146 ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + 0xf1a45 (size before relaxing) + .debug_str 0x0000000000106c5c 0x63c ./Application/User/Core/stm32f7xx_it.o + 0xf1f2c (size before relaxing) + .debug_str 0x0000000000107298 0xf07 ./Application/User/Core/syscalls.o + 0xfab6b (size before relaxing) + .debug_str 0x000000000010819f 0x78 ./Application/User/Core/sysmem.o + 0xfa17c (size before relaxing) + .debug_str 0x0000000000108217 0x6a ./Application/User/LIBJPEG/App/libjpeg.o + 0xc7d0 (size before relaxing) + .debug_str 0x0000000000108281 0x582 ./Application/User/LWIP/App/lwip.o + 0x103d4a (size before relaxing) + .debug_str 0x0000000000108803 0x2789 ./Application/User/LWIP/Target/ethernetif.o + 0x1064b9 (size before relaxing) + .debug_str 0x000000000010af8c 0x40 ./Application/User/Startup/startup_stm32f746nghx.o + 0xa7 (size before relaxing) + .debug_str 0x000000000010afcc 0xb0 ./Application/User/TouchGFX/App/app_touchgfx.o + 0x2efa (size before relaxing) + .debug_str 0x000000000010b07c 0x2fd3 ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + 0x9599 (size before relaxing) + .debug_str 0x000000000010e04f 0x18ff ./Application/User/TouchGFX/target/STM32TouchController.o + 0xf7be7 (size before relaxing) + .debug_str 0x000000000010f94e 0x27a ./Application/User/TouchGFX/target/TouchGFXGPIO.o + 0xf173d (size before relaxing) + .debug_str 0x000000000010fbc8 0x8604 ./Application/User/TouchGFX/target/TouchGFXHAL.o + 0x1029a7 (size before relaxing) + .debug_str 0x00000000001181cc 0x43b ./Application/User/TouchGFX/target/generated/OSWrappers.o + 0x9847 (size before relaxing) + .debug_str 0x0000000000118607 0x86b ./Application/User/TouchGFX/target/generated/STM32DMA.o + 0xff0b4 (size before relaxing) + .debug_str 0x0000000000118e72 0x1d83 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + 0x11132 (size before relaxing) + .debug_str 0x000000000011abf5 0x6266 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + 0x1050fd (size before relaxing) + .debug_str 0x0000000000120e5b 0x1d0a ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + 0x109e18 (size before relaxing) + .debug_str 0x0000000000122b65 0xf7 ./Application/User/generated/ApplicationFontProvider.o + 0x610b (size before relaxing) + .debug_str 0x0000000000122c5c 0x156 ./Application/User/generated/BitmapDatabase.o + 0x605d (size before relaxing) + .debug_str 0x0000000000122db2 0x108c ./Application/User/generated/CachedFont.o + 0x72b0 (size before relaxing) + .debug_str 0x0000000000123e3e 0x59f ./Application/User/generated/FontCache.o + 0xd3dc (size before relaxing) + .debug_str 0x00000000001243dd 0xa7 ./Application/User/generated/Font_verdana_10_4bpp_0.o + 0x4d98 (size before relaxing) + .debug_str 0x0000000000124484 0xa7 ./Application/User/generated/Font_verdana_20_4bpp_0.o + 0x4d98 (size before relaxing) + .debug_str 0x000000000012452b 0xa7 ./Application/User/generated/Font_verdana_40_4bpp_0.o + 0x4d98 (size before relaxing) + .debug_str 0x00000000001245d2 0x2f28 ./Application/User/generated/FrontendApplicationBase.o + 0x19948 (size before relaxing) + .debug_str 0x00000000001274fa 0x1c4 ./Application/User/generated/GeneratedFont.o + 0x653a (size before relaxing) + .debug_str 0x00000000001276be 0xa5 ./Application/User/generated/Kerning_verdana_10_4bpp.o + 0x54cb (size before relaxing) + .debug_str 0x0000000000127763 0xa5 ./Application/User/generated/Kerning_verdana_20_4bpp.o + 0x54cb (size before relaxing) + .debug_str 0x0000000000127808 0xa5 ./Application/User/generated/Kerning_verdana_40_4bpp.o + 0x54cb (size before relaxing) + .debug_str 0x00000000001278ad 0x8a ./Application/User/generated/LanguageGb.o + 0x4ed4 (size before relaxing) + .debug_str 0x0000000000127937 0x8d7 ./Application/User/generated/MainScreenViewBase.o + 0x11fcc (size before relaxing) + .debug_str 0x000000000012820e 0x49e ./Application/User/generated/SliderContainerBase.o + 0x1155c (size before relaxing) + .debug_str 0x00000000001286ac 0x165 ./Application/User/generated/Table_verdana_10_4bpp.o + 0x6413 (size before relaxing) + .debug_str 0x0000000000128811 0xf0 ./Application/User/generated/Table_verdana_20_4bpp.o + 0x6413 (size before relaxing) + .debug_str 0x0000000000128901 0xf0 ./Application/User/generated/Table_verdana_40_4bpp.o + 0x6413 (size before relaxing) + .debug_str 0x00000000001289f1 0x1c9 ./Application/User/generated/Texts.o + 0xdbba (size before relaxing) + .debug_str 0x0000000000128bba 0x146 ./Application/User/generated/TypedTextDatabase.o + 0x6743 (size before relaxing) + .debug_str 0x0000000000128d00 0xc8 ./Application/User/generated/image_Blue_Slider_Vertical_Small_Indicators_Slider3_Vertical_Round_nob.o + 0x38ae (size before relaxing) + .debug_str 0x0000000000128dc8 0xbe ./Application/User/generated/image_Blue_Slider_Vertical_Small_Slider3_Vertical_Round_back.o + 0x389a (size before relaxing) + .debug_str 0x0000000000128e86 0xbe ./Application/User/generated/image_Blue_Slider_Vertical_Small_Slider3_Vertical_Round_fill.o + 0x389a (size before relaxing) + .debug_str 0x0000000000128f44 0xb6 ./Application/User/gui/FrontendApplication.o + 0xddd6 (size before relaxing) + .debug_str 0x0000000000128ffa 0xf7 ./Application/User/gui/MainScreenPresenter.o + 0x118f0 (size before relaxing) + .debug_str 0x00000000001290f1 0xa2 ./Application/User/gui/MainScreenView.o + 0x1186b (size before relaxing) + .debug_str 0x0000000000129193 0x83 ./Application/User/gui/Model.o + 0xf1560 (size before relaxing) + .debug_str 0x0000000000129216 0xa4 ./Application/User/gui/SliderContainer.o + 0x10a40 (size before relaxing) + .debug_str 0x00000000001292ba 0x209 ./Drivers/BSP/Components/lan8742.o + 0x5cd4 (size before relaxing) + .debug_str 0x00000000001294c3 0x3ff ./Drivers/BSP/stm32746g_discovery_qspi.o + 0xf29a0 (size before relaxing) + .debug_str 0x00000000001298c2 0xed ./Drivers/CMSIS/system_stm32f7xx.o + 0xf0f35 (size before relaxing) + .debug_str 0x00000000001299af 0x261 ./Drivers/Components/ft5336.o + 0x542c (size before relaxing) + .debug_str 0x0000000000129c10 0x3bd ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + 0xf18b1 (size before relaxing) + .debug_str 0x0000000000129fcd 0x26c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + 0xf1874 (size before relaxing) + .debug_str 0x000000000012a239 0x10a ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + 0xf0f5b (size before relaxing) + .debug_str 0x000000000012a343 0xba ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + 0xf0f15 (size before relaxing) + .debug_str 0x000000000012a3fd 0x356 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + 0xf125f (size before relaxing) + .debug_str 0x000000000012a753 0x3b4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + 0xf1433 (size before relaxing) + .debug_str 0x000000000012ab07 0xdde ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + 0xf26ed (size before relaxing) + .debug_str 0x000000000012b8e5 0x10b ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + 0xf0fde (size before relaxing) + .debug_str 0x000000000012b9f0 0xdac ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + 0xf2136 (size before relaxing) + .debug_str 0x000000000012c79c 0xda ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + 0xf13dc (size before relaxing) + .debug_str 0x000000000012c876 0x444 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + 0xf14b1 (size before relaxing) + .debug_str 0x000000000012ccba 0x222 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + 0xf118f (size before relaxing) + .debug_str 0x000000000012cedc 0x58d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + 0xf18bb (size before relaxing) + .debug_str 0x000000000012d469 0x23c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + 0xf1293 (size before relaxing) + .debug_str 0x000000000012d6a5 0x186 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + 0xf11ba (size before relaxing) + .debug_str 0x000000000012d82b 0x38d ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + 0xf156d (size before relaxing) + .debug_str 0x000000000012dbb8 0xd7f ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + 0xf2233 (size before relaxing) + .debug_str 0x000000000012e937 0x453 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + 0xf1a89 (size before relaxing) + .debug_str 0x000000000012ed8a 0x7ab ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + 0xf1731 (size before relaxing) + .debug_str 0x000000000012f535 0x2bdb ./Middlewares/FreeRTOS/cmsis_os2.o + 0xec8c (size before relaxing) + .debug_str 0x0000000000132110 0x2f3 ./Middlewares/FreeRTOS/heap_4.o + 0xb222 (size before relaxing) + .debug_str 0x0000000000132403 0x173 ./Middlewares/FreeRTOS/list.o + 0xaa05 (size before relaxing) + .debug_str 0x0000000000132576 0x813 ./Middlewares/FreeRTOS/port.o + 0x85c9 (size before relaxing) + .debug_str 0x0000000000132d89 0x83c ./Middlewares/FreeRTOS/queue.o + 0xc53c (size before relaxing) + .debug_str 0x00000000001335c5 0x106b ./Middlewares/FreeRTOS/tasks.o + 0xd08e (size before relaxing) + .debug_str 0x0000000000134630 0x5e2 ./Middlewares/FreeRTOS/timers.o + 0xca63 (size before relaxing) + .debug_str 0x0000000000134c12 0x1351 ./Middlewares/LibJPEG/jaricom.o + 0xdd1a (size before relaxing) + .debug_str 0x0000000000135f63 0x2ed ./Middlewares/LibJPEG/jcomapi.o + 0xeb2a (size before relaxing) + .debug_str 0x0000000000136250 0xa20 ./Middlewares/LibJPEG/jdapimin.o + 0xf509 (size before relaxing) + .debug_str 0x0000000000136c70 0x113 ./Middlewares/LibJPEG/jdapistd.o + 0xf47e (size before relaxing) + .debug_str 0x0000000000136d83 0x1d7 ./Middlewares/LibJPEG/jdarith.o + 0xf533 (size before relaxing) + .debug_str 0x0000000000136f5a 0x144 ./Middlewares/LibJPEG/jdatasrc.o + 0xf102 (size before relaxing) + .debug_str 0x000000000013709e 0x2e7 ./Middlewares/LibJPEG/jdcoefct.o + 0xed8e (size before relaxing) + .debug_str 0x0000000000137385 0x2cd ./Middlewares/LibJPEG/jdcolor.o + 0xf617 (size before relaxing) + .debug_str 0x0000000000137652 0x4be ./Middlewares/LibJPEG/jddctmgr.o + 0xf823 (size before relaxing) + .debug_str 0x0000000000137b10 0xa4a ./Middlewares/LibJPEG/jdhuff.o + 0xfe92 (size before relaxing) + .debug_str 0x000000000013855a 0x1a4 ./Middlewares/LibJPEG/jdinput.o + 0xf50e (size before relaxing) + .debug_str 0x00000000001386fe 0x252 ./Middlewares/LibJPEG/jdmainct.o + 0xf5a0 (size before relaxing) + .debug_str 0x0000000000138950 0x782 ./Middlewares/LibJPEG/jdmarker.o + 0xfbfd (size before relaxing) + .debug_str 0x00000000001390d2 0x1ea ./Middlewares/LibJPEG/jdmaster.o + 0xf614 (size before relaxing) + .debug_str 0x00000000001392bc 0x1a5 ./Middlewares/LibJPEG/jdmerge.o + 0xed46 (size before relaxing) + .debug_str 0x0000000000139461 0x121 ./Middlewares/LibJPEG/jdpostct.o + 0xf4f3 (size before relaxing) + .debug_str 0x0000000000139582 0x1b1 ./Middlewares/LibJPEG/jdsample.o + 0xf5b6 (size before relaxing) + .debug_str 0x0000000000139733 0x141 ./Middlewares/LibJPEG/jerror.o + 0xe545 (size before relaxing) + .debug_str 0x0000000000139874 0x111 ./Middlewares/LibJPEG/jidctflt.o + 0xed45 (size before relaxing) + .debug_str 0x0000000000139985 0x22c ./Middlewares/LibJPEG/jidctfst.o + 0xeeb2 (size before relaxing) + .debug_str 0x0000000000139bb1 0x2c1 ./Middlewares/LibJPEG/jidctint.o + 0xf112 (size before relaxing) + .debug_str 0x0000000000139e72 0x46b ./Middlewares/LibJPEG/jmemmgr.o + 0xed39 (size before relaxing) + .debug_str 0x000000000013a2dd 0xcd ./Middlewares/LibJPEG/jmemnobs.o + 0xea07 (size before relaxing) + .debug_str 0x000000000013a3aa 0x3a6 ./Middlewares/LibJPEG/jquant1.o + 0xf773 (size before relaxing) + .debug_str 0x000000000013a750 0x6cd ./Middlewares/LibJPEG/jquant2.o + 0xfb70 (size before relaxing) + .debug_str 0x000000000013ae1d 0xf6 ./Middlewares/LibJPEG/jutils.o + 0xde82 (size before relaxing) + .debug_str 0x000000000013af13 0xf7 ./Middlewares/LwIP/def.o + 0xf9fdc (size before relaxing) + .debug_str 0x000000000013b00a 0x1245 ./Middlewares/LwIP/dhcp.o + 0xff933 (size before relaxing) + .debug_str 0x000000000013c24f 0xa80 ./Middlewares/LwIP/etharp.o + 0xff1a4 (size before relaxing) + .debug_str 0x000000000013cccf 0x1c8 ./Middlewares/LwIP/ethernet.o + 0xfe9f0 (size before relaxing) + .debug_str 0x000000000013ce97 0x437 ./Middlewares/LwIP/icmp.o + 0xfe379 (size before relaxing) + .debug_str 0x000000000013d2ce 0x3d00 ./Middlewares/LwIP/init.o + 0x1076f2 (size before relaxing) + .debug_str 0x0000000000140fce 0x7f ./Middlewares/LwIP/ip.o + 0xfdedf (size before relaxing) + .debug_str 0x000000000014104d 0x257 ./Middlewares/LwIP/ip4.o + 0x100462 (size before relaxing) + .debug_str 0x00000000001412a4 0xf0 ./Middlewares/LwIP/ip4_addr.o + 0xfd226 (size before relaxing) + .debug_str 0x0000000000141394 0x482 ./Middlewares/LwIP/ip4_frag.o + 0xfe7a8 (size before relaxing) + .debug_str 0x0000000000141816 0x4cc ./Middlewares/LwIP/mem.o + 0xffd89 (size before relaxing) + .debug_str 0x0000000000141ce2 0xc5e ./Middlewares/LwIP/memp.o + 0x108285 (size before relaxing) + .debug_str 0x0000000000142940 0x2e7 ./Middlewares/LwIP/netif.o + 0x105956 (size before relaxing) + .debug_str 0x0000000000142c27 0x752 ./Middlewares/LwIP/pbuf.o + 0x1054e0 (size before relaxing) + .debug_str 0x0000000000143379 0x1f1 ./Middlewares/LwIP/sys_arch.o + 0x1000e9 (size before relaxing) + .debug_str 0x000000000014356a 0x674 ./Middlewares/LwIP/tcp.o + 0x100775 (size before relaxing) + .debug_str 0x0000000000143bde 0x2e6 ./Middlewares/LwIP/tcp_in.o + 0x10059b (size before relaxing) + .debug_str 0x0000000000143ec4 0x388 ./Middlewares/LwIP/tcp_out.o + 0x100565 (size before relaxing) + .debug_str 0x000000000014424c 0x3eb ./Middlewares/LwIP/tcpip.o + 0x103b43 (size before relaxing) + .debug_str 0x0000000000144637 0x25e ./Middlewares/LwIP/timeouts.o + 0x105894 (size before relaxing) + .debug_str 0x0000000000144895 0x205 ./Middlewares/LwIP/udp.o + 0xfef19 (size before relaxing) + +.debug_frame 0x0000000000000000 0xce84 + .debug_frame 0x0000000000000000 0x20 ./Application/User/Core/freertos.o + .debug_frame 0x0000000000000020 0xac ./Application/User/Core/main.o + .debug_frame 0x00000000000000cc 0x1e4 ./Application/User/Core/stm32f7xx_hal_msp.o + .debug_frame 0x00000000000002b0 0x54 ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .debug_frame 0x0000000000000304 0xb0 ./Application/User/Core/stm32f7xx_it.o + .debug_frame 0x00000000000003b4 0x158 ./Application/User/Core/syscalls.o + .debug_frame 0x000000000000050c 0x28 ./Application/User/Core/sysmem.o + .debug_frame 0x0000000000000534 0x20 ./Application/User/LIBJPEG/App/libjpeg.o + .debug_frame 0x0000000000000554 0x48 ./Application/User/LWIP/App/lwip.o + .debug_frame 0x000000000000059c 0x214 ./Application/User/LWIP/Target/ethernetif.o + .debug_frame 0x00000000000007b0 0x5c ./Application/User/TouchGFX/App/app_touchgfx.o + .debug_frame 0x000000000000080c 0xa0 ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .debug_frame 0x00000000000008ac 0xa8 ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_frame 0x0000000000000954 0x74 ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .debug_frame 0x00000000000009c8 0x208 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_frame 0x0000000000000bd0 0xc4 ./Application/User/TouchGFX/target/generated/OSWrappers.o + .debug_frame 0x0000000000000c94 0x1d8 ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_frame 0x0000000000000e6c 0x27c ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .debug_frame 0x00000000000010e8 0x230 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_frame 0x0000000000001318 0x400 ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_frame 0x0000000000001718 0x50 ./Application/User/generated/ApplicationFontProvider.o + .debug_frame 0x0000000000001768 0x30 ./Application/User/generated/BitmapDatabase.o + .debug_frame 0x0000000000001798 0x140 ./Application/User/generated/CachedFont.o + .debug_frame 0x00000000000018d8 0x294 ./Application/User/generated/FontCache.o + .debug_frame 0x0000000000001b6c 0x208 ./Application/User/generated/FrontendApplicationBase.o + .debug_frame 0x0000000000001d74 0x170 ./Application/User/generated/GeneratedFont.o + .debug_frame 0x0000000000001ee4 0x3f0 ./Application/User/generated/MainScreenViewBase.o + .debug_frame 0x00000000000022d4 0x3b0 ./Application/User/generated/SliderContainerBase.o + .debug_frame 0x0000000000002684 0x40 ./Application/User/generated/Table_verdana_10_4bpp.o + .debug_frame 0x00000000000026c4 0x40 ./Application/User/generated/Table_verdana_20_4bpp.o + .debug_frame 0x0000000000002704 0x40 ./Application/User/generated/Table_verdana_40_4bpp.o + .debug_frame 0x0000000000002744 0x19c ./Application/User/generated/Texts.o + .debug_frame 0x00000000000028e0 0x80 ./Application/User/generated/TypedTextDatabase.o + .debug_frame 0x0000000000002960 0xb4 ./Application/User/gui/FrontendApplication.o + .debug_frame 0x0000000000002a14 0x90 ./Application/User/gui/MainScreenPresenter.o + .debug_frame 0x0000000000002aa4 0x128 ./Application/User/gui/MainScreenView.o + .debug_frame 0x0000000000002bcc 0x40 ./Application/User/gui/Model.o + .debug_frame 0x0000000000002c0c 0x188 ./Application/User/gui/SliderContainer.o + .debug_frame 0x0000000000002d94 0x1c0 ./Drivers/BSP/Components/lan8742.o + .debug_frame 0x0000000000002f54 0x1a8 ./Drivers/BSP/stm32746g_discovery_qspi.o + .debug_frame 0x00000000000030fc 0x30 ./Drivers/CMSIS/system_stm32f7xx.o + .debug_frame 0x000000000000312c 0xe8 ./Drivers/Components/ft5336.o + .debug_frame 0x0000000000003214 0x214 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .debug_frame 0x0000000000003428 0x158 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .debug_frame 0x0000000000003580 0xf0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .debug_frame 0x0000000000003670 0x48 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .debug_frame 0x00000000000036b8 0x16c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .debug_frame 0x0000000000003824 0x32c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .debug_frame 0x0000000000003b50 0x4d4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .debug_frame 0x0000000000004024 0xd4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .debug_frame 0x00000000000040f8 0x914 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .debug_frame 0x0000000000004a0c 0x70 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .debug_frame 0x0000000000004a7c 0x39c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .debug_frame 0x0000000000004e18 0x140 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .debug_frame 0x0000000000004f58 0x424 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .debug_frame 0x000000000000537c 0x148 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .debug_frame 0x00000000000054c4 0xcc ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .debug_frame 0x0000000000005590 0x284 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .debug_frame 0x0000000000005814 0xa24 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .debug_frame 0x0000000000006238 0x3f8 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .debug_frame 0x0000000000006630 0x1e4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .debug_frame 0x0000000000006814 0x678 ./Middlewares/FreeRTOS/cmsis_os2.o + .debug_frame 0x0000000000006e8c 0x98 ./Middlewares/FreeRTOS/heap_4.o + .debug_frame 0x0000000000006f24 0x6c ./Middlewares/FreeRTOS/list.o + .debug_frame 0x0000000000006f90 0x100 ./Middlewares/FreeRTOS/port.o + .debug_frame 0x0000000000007090 0x418 ./Middlewares/FreeRTOS/queue.o + .debug_frame 0x00000000000074a8 0x6d8 ./Middlewares/FreeRTOS/tasks.o + .debug_frame 0x0000000000007b80 0x264 ./Middlewares/FreeRTOS/timers.o + .debug_frame 0x0000000000007de4 0x70 ./Middlewares/LibJPEG/jcomapi.o + .debug_frame 0x0000000000007e54 0xd8 ./Middlewares/LibJPEG/jdapimin.o + .debug_frame 0x0000000000007f2c 0xd0 ./Middlewares/LibJPEG/jdapistd.o + .debug_frame 0x0000000000007ffc 0x1b4 ./Middlewares/LibJPEG/jdarith.o + .debug_frame 0x00000000000081b0 0xcc ./Middlewares/LibJPEG/jdatasrc.o + .debug_frame 0x000000000000827c 0x15c ./Middlewares/LibJPEG/jdcoefct.o + .debug_frame 0x00000000000083d8 0x164 ./Middlewares/LibJPEG/jdcolor.o + .debug_frame 0x000000000000853c 0x78 ./Middlewares/LibJPEG/jddctmgr.o + .debug_frame 0x00000000000085b4 0x20c ./Middlewares/LibJPEG/jdhuff.o + .debug_frame 0x00000000000087c0 0xbc ./Middlewares/LibJPEG/jdinput.o + .debug_frame 0x000000000000887c 0xec ./Middlewares/LibJPEG/jdmainct.o + .debug_frame 0x0000000000008968 0x23c ./Middlewares/LibJPEG/jdmarker.o + .debug_frame 0x0000000000008ba4 0xc4 ./Middlewares/LibJPEG/jdmaster.o + .debug_frame 0x0000000000008c68 0xe4 ./Middlewares/LibJPEG/jdmerge.o + .debug_frame 0x0000000000008d4c 0xd0 ./Middlewares/LibJPEG/jdpostct.o + .debug_frame 0x0000000000008e1c 0x110 ./Middlewares/LibJPEG/jdsample.o + .debug_frame 0x0000000000008f2c 0xb0 ./Middlewares/LibJPEG/jerror.o + .debug_frame 0x0000000000008fdc 0x40 ./Middlewares/LibJPEG/jidctflt.o + .debug_frame 0x000000000000901c 0x40 ./Middlewares/LibJPEG/jidctfst.o + .debug_frame 0x000000000000905c 0x5a8 ./Middlewares/LibJPEG/jidctint.o + .debug_frame 0x0000000000009604 0x1f4 ./Middlewares/LibJPEG/jmemmgr.o + .debug_frame 0x00000000000097f8 0x90 ./Middlewares/LibJPEG/jmemnobs.o + .debug_frame 0x0000000000009888 0x1c8 ./Middlewares/LibJPEG/jquant1.o + .debug_frame 0x0000000000009a50 0x1ac ./Middlewares/LibJPEG/jquant2.o + .debug_frame 0x0000000000009bfc 0x5c ./Middlewares/LibJPEG/jutils.o + .debug_frame 0x0000000000009c58 0xb4 ./Middlewares/LwIP/def.o + .debug_frame 0x0000000000009d0c 0x400 ./Middlewares/LwIP/dhcp.o + .debug_frame 0x000000000000a10c 0x208 ./Middlewares/LwIP/etharp.o + .debug_frame 0x000000000000a314 0x58 ./Middlewares/LwIP/ethernet.o + .debug_frame 0x000000000000a36c 0x88 ./Middlewares/LwIP/icmp.o + .debug_frame 0x000000000000a3f4 0x2c ./Middlewares/LwIP/init.o + .debug_frame 0x000000000000a420 0xe0 ./Middlewares/LwIP/ip4.o + .debug_frame 0x000000000000a500 0xb4 ./Middlewares/LwIP/ip4_addr.o + .debug_frame 0x000000000000a5b4 0x144 ./Middlewares/LwIP/ip4_frag.o + .debug_frame 0x000000000000a6f8 0xd0 ./Middlewares/LwIP/mem.o + .debug_frame 0x000000000000a7c8 0xe8 ./Middlewares/LwIP/memp.o + .debug_frame 0x000000000000a8b0 0x238 ./Middlewares/LwIP/netif.o + .debug_frame 0x000000000000aae8 0x3e0 ./Middlewares/LwIP/pbuf.o + .debug_frame 0x000000000000aec8 0x204 ./Middlewares/LwIP/sys_arch.o + .debug_frame 0x000000000000b0cc 0x554 ./Middlewares/LwIP/tcp.o + .debug_frame 0x000000000000b620 0x130 ./Middlewares/LwIP/tcp_in.o + .debug_frame 0x000000000000b750 0x32c ./Middlewares/LwIP/tcp_out.o + .debug_frame 0x000000000000ba7c 0x178 ./Middlewares/LwIP/tcpip.o + .debug_frame 0x000000000000bbf4 0x144 ./Middlewares/LwIP/timeouts.o + .debug_frame 0x000000000000bd38 0x1bc ./Middlewares/LwIP/udp.o + .debug_frame 0x000000000000bef4 0x20 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a(atexit_arm.o) + .debug_frame 0x000000000000bf14 0x20 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a(del_ops.o) + .debug_frame 0x000000000000bf34 0x40 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a(guard.o) + .debug_frame 0x000000000000bf74 0x40 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a(pure.o) + .debug_frame 0x000000000000bfb4 0x20 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a(del_op.o) + .debug_frame 0x000000000000bfd4 0xb0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libstdc++_nano.a(eh_terminate.o) + .debug_frame 0x000000000000c084 0x28 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-abort.o) + .debug_frame 0x000000000000c0ac 0x40 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-assert.o) + .debug_frame 0x000000000000c0ec 0x20 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-atexit.o) + .debug_frame 0x000000000000c10c 0x30 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-malloc.o) + .debug_frame 0x000000000000c13c 0x50 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-mallocr.o) + .debug_frame 0x000000000000c18c 0x30 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-mlock.o) + .debug_frame 0x000000000000c1bc 0x44 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-rand.o) + .debug_frame 0x000000000000c200 0x28 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-cxa_atexit.o) + .debug_frame 0x000000000000c228 0x144 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-findfp.o) + .debug_frame 0x000000000000c36c 0x64 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fprintf.o) + .debug_frame 0x000000000000c3d0 0x34 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fwalk.o) + .debug_frame 0x000000000000c404 0x6c C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-printf.o) + .debug_frame 0x000000000000c470 0x6c C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-sprintf.o) + .debug_frame 0x000000000000c4dc 0x88 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-stdio.o) + .debug_frame 0x000000000000c564 0x40 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-wbuf.o) + .debug_frame 0x000000000000c5a4 0x2c C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-wsetup.o) + .debug_frame 0x000000000000c5d0 0x28 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-memcmp.o) + .debug_frame 0x000000000000c5f8 0x28 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-memmove.o) + .debug_frame 0x000000000000c620 0x20 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-memset.o) + .debug_frame 0x000000000000c640 0x28 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-strncmp.o) + .debug_frame 0x000000000000c668 0xcc C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-signal.o) + .debug_frame 0x000000000000c734 0x2c C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-closer.o) + .debug_frame 0x000000000000c760 0x2c C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-lseekr.o) + .debug_frame 0x000000000000c78c 0x2c C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-readr.o) + .debug_frame 0x000000000000c7b8 0x3c C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-signalr.o) + .debug_frame 0x000000000000c7f4 0x2c C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-sbrkr.o) + .debug_frame 0x000000000000c820 0x2c C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-writer.o) + .debug_frame 0x000000000000c84c 0x2c C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-init.o) + .debug_frame 0x000000000000c878 0xb0 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-lock.o) + .debug_frame 0x000000000000c928 0x28 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-memcpy-stub.o) + .debug_frame 0x000000000000c950 0x34 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-__atexit.o) + .debug_frame 0x000000000000c984 0x48 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-__call_atexit.o) + .debug_frame 0x000000000000c9cc 0x38 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-freer.o) + .debug_frame 0x000000000000ca04 0x90 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-nano-svfprintf.o) + .debug_frame 0x000000000000ca94 0xa8 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-nano-vfprintf.o) + .debug_frame 0x000000000000cb3c 0x60 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-nano-vfprintf_i.o) + .debug_frame 0x000000000000cb9c 0x5c C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fflush.o) + .debug_frame 0x000000000000cbf8 0x58 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-makebuf.o) + .debug_frame 0x000000000000cc50 0x2c C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fstatr.o) + .debug_frame 0x000000000000cc7c 0x2c C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-isattyr.o) + .debug_frame 0x000000000000cca8 0x3c C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-reallocr.o) + .debug_frame 0x000000000000cce4 0x20 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-msizer.o) + .debug_frame 0x000000000000cd04 0xac C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_arm_addsubdf3.o) + .debug_frame 0x000000000000cdb0 0x50 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_arm_muldivdf3.o) + .debug_frame 0x000000000000ce00 0x24 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_arm_truncdfsf2.o) + .debug_frame 0x000000000000ce24 0x2c C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_aeabi_uldivmod.o) + .debug_frame 0x000000000000ce50 0x34 C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_udivmoddi4.o) + +.debug_loclists + 0x0000000000000000 0x4049c + .debug_loclists + 0x0000000000000000 0x99 ./Application/User/Core/main.o + .debug_loclists + 0x0000000000000099 0x191 ./Application/User/Core/stm32f7xx_hal_msp.o + .debug_loclists + 0x000000000000022a 0xad ./Application/User/Core/stm32f7xx_hal_timebase_tim.o + .debug_loclists + 0x00000000000002d7 0x255 ./Application/User/Core/syscalls.o + .debug_loclists + 0x000000000000052c 0x35 ./Application/User/Core/sysmem.o + .debug_loclists + 0x0000000000000561 0x581 ./Application/User/LWIP/Target/ethernetif.o + .debug_loclists + 0x0000000000000ae2 0x23 ./Application/User/TouchGFX/App/app_touchgfx.o + .debug_loclists + 0x0000000000000b05 0x117 ./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o + .debug_loclists + 0x0000000000000c1c 0x276 ./Application/User/TouchGFX/target/STM32TouchController.o + .debug_loclists + 0x0000000000000e92 0x148 ./Application/User/TouchGFX/target/TouchGFXGPIO.o + .debug_loclists + 0x0000000000000fda 0x5b1 ./Application/User/TouchGFX/target/TouchGFXHAL.o + .debug_loclists + 0x000000000000158b 0x23 ./Application/User/TouchGFX/target/generated/OSWrappers.o + .debug_loclists + 0x00000000000015ae 0x58a ./Application/User/TouchGFX/target/generated/STM32DMA.o + .debug_loclists + 0x0000000000001b38 0xb36 ./Application/User/TouchGFX/target/generated/SoftwareMJPEGDecoder.o + .debug_loclists + 0x000000000000266e 0x582 ./Application/User/TouchGFX/target/generated/TouchGFXConfiguration.o + .debug_loclists + 0x0000000000002bf0 0xfdf ./Application/User/TouchGFX/target/generated/TouchGFXGeneratedHAL.o + .debug_loclists + 0x0000000000003bcf 0xee ./Application/User/generated/ApplicationFontProvider.o + .debug_loclists + 0x0000000000003cbd 0x2e7 ./Application/User/generated/CachedFont.o + .debug_loclists + 0x0000000000003fa4 0xb7f ./Application/User/generated/FontCache.o + .debug_loclists + 0x0000000000004b23 0x4b9 ./Application/User/generated/FrontendApplicationBase.o + .debug_loclists + 0x0000000000004fdc 0x477 ./Application/User/generated/GeneratedFont.o + .debug_loclists + 0x0000000000005453 0xa86 ./Application/User/generated/MainScreenViewBase.o + .debug_loclists + 0x0000000000005ed9 0xd52 ./Application/User/generated/SliderContainerBase.o + .debug_loclists + 0x0000000000006c2b 0x3c ./Application/User/generated/Table_verdana_10_4bpp.o + .debug_loclists + 0x0000000000006c67 0x3c ./Application/User/generated/Table_verdana_20_4bpp.o + .debug_loclists + 0x0000000000006ca3 0x3c ./Application/User/generated/Table_verdana_40_4bpp.o + .debug_loclists + 0x0000000000006cdf 0x320 ./Application/User/generated/Texts.o + .debug_loclists + 0x0000000000006fff 0x98 ./Application/User/generated/TypedTextDatabase.o + .debug_loclists + 0x0000000000007097 0x1ab ./Application/User/gui/FrontendApplication.o + .debug_loclists + 0x0000000000007242 0xb8 ./Application/User/gui/MainScreenPresenter.o + .debug_loclists + 0x00000000000072fa 0x1dd ./Application/User/gui/MainScreenView.o + .debug_loclists + 0x00000000000074d7 0x2e ./Application/User/gui/Model.o + .debug_loclists + 0x0000000000007505 0x1af ./Application/User/gui/SliderContainer.o + .debug_loclists + 0x00000000000076b4 0x2c3 ./Drivers/BSP/Components/lan8742.o + .debug_loclists + 0x0000000000007977 0x1e3 ./Drivers/BSP/stm32746g_discovery_qspi.o + .debug_loclists + 0x0000000000007b5a 0xc4 ./Drivers/CMSIS/system_stm32f7xx.o + .debug_loclists + 0x0000000000007c1e 0x1d8 ./Drivers/Components/ft5336.o + .debug_loclists + 0x0000000000007df6 0xc3 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal.o + .debug_loclists + 0x0000000000007eb9 0x3a9 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_cortex.o + .debug_loclists + 0x0000000000008262 0x2f9 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc.o + .debug_loclists + 0x000000000000855b 0xf1 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_crc_ex.o + .debug_loclists + 0x000000000000864c 0x5f0 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma.o + .debug_loclists + 0x0000000000008c3c 0xfc4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o + .debug_loclists + 0x0000000000009c00 0x10d1 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o + .debug_loclists + 0x000000000000acd1 0x29c ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_gpio.o + .debug_loclists + 0x000000000000af6d 0x2a29 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c.o + .debug_loclists + 0x000000000000d996 0xda ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_i2c_ex.o + .debug_loclists + 0x000000000000da70 0xd2f ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_ltdc.o + .debug_loclists + 0x000000000000e79f 0x1bf ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_pwr_ex.o + .debug_loclists + 0x000000000000e95e 0xcb4 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_qspi.o + .debug_loclists + 0x000000000000f612 0x3a6 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc.o + .debug_loclists + 0x000000000000f9b8 0x4dd ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_rcc_ex.o + .debug_loclists + 0x000000000000fe95 0x858 ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_sdram.o + .debug_loclists + 0x00000000000106ed 0x2ced ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim.o + .debug_loclists + 0x00000000000133da 0xc7e ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_tim_ex.o + .debug_loclists + 0x0000000000014058 0x48f ./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_ll_fmc.o + .debug_loclists + 0x00000000000144e7 0x2581 ./Middlewares/FreeRTOS/cmsis_os2.o + .debug_loclists + 0x0000000000016a68 0x2d7 ./Middlewares/FreeRTOS/heap_4.o + .debug_loclists + 0x0000000000016d3f 0x71 ./Middlewares/FreeRTOS/list.o + .debug_loclists + 0x0000000000016db0 0x71 ./Middlewares/FreeRTOS/port.o + .debug_loclists + 0x0000000000016e21 0x10c9 ./Middlewares/FreeRTOS/queue.o + .debug_loclists + 0x0000000000017eea 0x136e ./Middlewares/FreeRTOS/tasks.o + .debug_loclists + 0x0000000000019258 0x8e5 ./Middlewares/FreeRTOS/timers.o + .debug_loclists + 0x0000000000019b3d 0x96 ./Middlewares/LibJPEG/jcomapi.o + .debug_loclists + 0x0000000000019bd3 0x2d1 ./Middlewares/LibJPEG/jdapimin.o + .debug_loclists + 0x0000000000019ea4 0x157 ./Middlewares/LibJPEG/jdapistd.o + .debug_loclists + 0x0000000000019ffb 0xaab ./Middlewares/LibJPEG/jdarith.o + .debug_loclists + 0x000000000001aaa6 0x15b ./Middlewares/LibJPEG/jdatasrc.o + .debug_loclists + 0x000000000001ac01 0x101c ./Middlewares/LibJPEG/jdcoefct.o + .debug_loclists + 0x000000000001bc1d 0x8d6 ./Middlewares/LibJPEG/jdcolor.o + .debug_loclists + 0x000000000001c4f3 0x2ae ./Middlewares/LibJPEG/jddctmgr.o + .debug_loclists + 0x000000000001c7a1 0x19dd ./Middlewares/LibJPEG/jdhuff.o + .debug_loclists + 0x000000000001e17e 0x2ce ./Middlewares/LibJPEG/jdinput.o + .debug_loclists + 0x000000000001e44c 0x754 ./Middlewares/LibJPEG/jdmainct.o + .debug_loclists + 0x000000000001eba0 0x189a ./Middlewares/LibJPEG/jdmarker.o + .debug_loclists + 0x000000000002043a 0x310 ./Middlewares/LibJPEG/jdmaster.o + .debug_loclists + 0x000000000002074a 0x9ee ./Middlewares/LibJPEG/jdmerge.o + .debug_loclists + 0x0000000000021138 0x331 ./Middlewares/LibJPEG/jdpostct.o + .debug_loclists + 0x0000000000021469 0x589 ./Middlewares/LibJPEG/jdsample.o + .debug_loclists + 0x00000000000219f2 0x1d6 ./Middlewares/LibJPEG/jerror.o + .debug_loclists + 0x0000000000021bc8 0x5fb ./Middlewares/LibJPEG/jidctflt.o + .debug_loclists + 0x00000000000221c3 0xaba ./Middlewares/LibJPEG/jidctfst.o + .debug_loclists + 0x0000000000022c7d 0xfde8 ./Middlewares/LibJPEG/jidctint.o + .debug_loclists + 0x0000000000032a65 0xd52 ./Middlewares/LibJPEG/jmemmgr.o + .debug_loclists + 0x00000000000337b7 0xf2 ./Middlewares/LibJPEG/jmemnobs.o + .debug_loclists + 0x00000000000338a9 0xf55 ./Middlewares/LibJPEG/jquant1.o + .debug_loclists + 0x00000000000347fe 0x1e71 ./Middlewares/LibJPEG/jquant2.o + .debug_loclists + 0x000000000003666f 0x190 ./Middlewares/LibJPEG/jutils.o + .debug_loclists + 0x00000000000367ff 0x3b8 ./Middlewares/LwIP/def.o + .debug_loclists + 0x0000000000036bb7 0x149b ./Middlewares/LwIP/dhcp.o + .debug_loclists + 0x0000000000038052 0x981 ./Middlewares/LwIP/etharp.o + .debug_loclists + 0x00000000000389d3 0x159 ./Middlewares/LwIP/ethernet.o + .debug_loclists + 0x0000000000038b2c 0x20a ./Middlewares/LwIP/icmp.o + .debug_loclists + 0x0000000000038d36 0x36b ./Middlewares/LwIP/ip4.o + .debug_loclists + 0x00000000000390a1 0x32e ./Middlewares/LwIP/ip4_addr.o + .debug_loclists + 0x00000000000393cf 0x976 ./Middlewares/LwIP/ip4_frag.o + .debug_loclists + 0x0000000000039d45 0x57b ./Middlewares/LwIP/mem.o + .debug_loclists + 0x000000000003a2c0 0x227 ./Middlewares/LwIP/memp.o + .debug_loclists + 0x000000000003a4e7 0x6ec ./Middlewares/LwIP/netif.o + .debug_loclists + 0x000000000003abd3 0x15da ./Middlewares/LwIP/pbuf.o + .debug_loclists + 0x000000000003c1ad 0x303 ./Middlewares/LwIP/sys_arch.o + .debug_loclists + 0x000000000003c4b0 0x1420 ./Middlewares/LwIP/tcp.o + .debug_loclists + 0x000000000003d8d0 0x815 ./Middlewares/LwIP/tcp_in.o + .debug_loclists + 0x000000000003e0e5 0x13d1 ./Middlewares/LwIP/tcp_out.o + .debug_loclists + 0x000000000003f4b6 0x3b3 ./Middlewares/LwIP/tcpip.o + .debug_loclists + 0x000000000003f869 0x2ab ./Middlewares/LwIP/timeouts.o + .debug_loclists + 0x000000000003fb14 0x988 ./Middlewares/LwIP/udp.o + +.debug_line_str + 0x0000000000000000 0x9b + .debug_line_str + 0x0000000000000000 0x9b ./Application/User/Startup/startup_stm32f746nghx.o + 0xb3 (size before relaxing) diff --git a/STM32_Disco746G/STM32CubeIDE/Debug/Middlewares/FreeRTOS/subdir.mk b/STM32_Disco746G/STM32CubeIDE/Debug/Middlewares/FreeRTOS/subdir.mk index af8670d03ff4d47e5f8f47c6d50cbbedb14e48e2..9e8d4a3ab42822f8f4b83ef8345a1d5049f345e4 100644 --- a/STM32_Disco746G/STM32CubeIDE/Debug/Middlewares/FreeRTOS/subdir.mk +++ b/STM32_Disco746G/STM32CubeIDE/Debug/Middlewares/FreeRTOS/subdir.mk @@ -1,20 +1,20 @@ ################################################################################ # Automatically-generated file. Do not edit! -# Toolchain: GNU Tools for STM32 (10.3-2021.10) +# Toolchain: GNU Tools for STM32 (11.3.rel1) ################################################################################ # Add inputs and outputs from these tool invocations to the build variables C_SRCS += \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/cmsis_os2.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/FreeRTOS/Source/croutine.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/FreeRTOS/Source/event_groups.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/FreeRTOS/Source/portable/MemMang/heap_4.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/FreeRTOS/Source/list.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1/port.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/FreeRTOS/Source/queue.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/FreeRTOS/Source/stream_buffer.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/FreeRTOS/Source/tasks.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/FreeRTOS/Source/timers.c +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/cmsis_os2.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/FreeRTOS/Source/croutine.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/FreeRTOS/Source/event_groups.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/FreeRTOS/Source/portable/MemMang/heap_4.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/FreeRTOS/Source/list.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1/port.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/FreeRTOS/Source/queue.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/FreeRTOS/Source/stream_buffer.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/FreeRTOS/Source/tasks.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/FreeRTOS/Source/timers.c C_DEPS += \ ./Middlewares/FreeRTOS/cmsis_os2.d \ @@ -42,26 +42,26 @@ OBJS += \ # Each subdirectory must supply rules for building sources it contributes -Middlewares/FreeRTOS/cmsis_os2.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/cmsis_os2.c Middlewares/FreeRTOS/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Middlewares/FreeRTOS/croutine.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/FreeRTOS/Source/croutine.c Middlewares/FreeRTOS/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Middlewares/FreeRTOS/event_groups.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/FreeRTOS/Source/event_groups.c Middlewares/FreeRTOS/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Middlewares/FreeRTOS/heap_4.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/FreeRTOS/Source/portable/MemMang/heap_4.c Middlewares/FreeRTOS/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Middlewares/FreeRTOS/list.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/FreeRTOS/Source/list.c Middlewares/FreeRTOS/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Middlewares/FreeRTOS/port.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1/port.c Middlewares/FreeRTOS/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Middlewares/FreeRTOS/queue.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/FreeRTOS/Source/queue.c Middlewares/FreeRTOS/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Middlewares/FreeRTOS/stream_buffer.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/FreeRTOS/Source/stream_buffer.c Middlewares/FreeRTOS/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Middlewares/FreeRTOS/tasks.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/FreeRTOS/Source/tasks.c Middlewares/FreeRTOS/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Middlewares/FreeRTOS/timers.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/FreeRTOS/Source/timers.c Middlewares/FreeRTOS/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/FreeRTOS/cmsis_os2.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/cmsis_os2.c Middlewares/FreeRTOS/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/FreeRTOS/croutine.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/FreeRTOS/Source/croutine.c Middlewares/FreeRTOS/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/FreeRTOS/event_groups.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/FreeRTOS/Source/event_groups.c Middlewares/FreeRTOS/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/FreeRTOS/heap_4.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/FreeRTOS/Source/portable/MemMang/heap_4.c Middlewares/FreeRTOS/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/FreeRTOS/list.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/FreeRTOS/Source/list.c Middlewares/FreeRTOS/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/FreeRTOS/port.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1/port.c Middlewares/FreeRTOS/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/FreeRTOS/queue.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/FreeRTOS/Source/queue.c Middlewares/FreeRTOS/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/FreeRTOS/stream_buffer.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/FreeRTOS/Source/stream_buffer.c Middlewares/FreeRTOS/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/FreeRTOS/tasks.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/FreeRTOS/Source/tasks.c Middlewares/FreeRTOS/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/FreeRTOS/timers.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/FreeRTOS/Source/timers.c Middlewares/FreeRTOS/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" clean: clean-Middlewares-2f-FreeRTOS diff --git a/STM32_Disco746G/STM32CubeIDE/Debug/Middlewares/LibJPEG/subdir.mk b/STM32_Disco746G/STM32CubeIDE/Debug/Middlewares/LibJPEG/subdir.mk index ffe60c3c38f369479214cd5c5c884948c8e43707..84026bb96cf2dc6bcfe125bd866fb8e220e0fa0b 100644 --- a/STM32_Disco746G/STM32CubeIDE/Debug/Middlewares/LibJPEG/subdir.mk +++ b/STM32_Disco746G/STM32CubeIDE/Debug/Middlewares/LibJPEG/subdir.mk @@ -1,56 +1,56 @@ ################################################################################ # Automatically-generated file. Do not edit! -# Toolchain: GNU Tools for STM32 (10.3-2021.10) +# Toolchain: GNU Tools for STM32 (11.3.rel1) ################################################################################ # Add inputs and outputs from these tool invocations to the build variables C_SRCS += \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jaricom.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jcapimin.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jcapistd.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jcarith.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jccoefct.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jccolor.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jcdctmgr.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jchuff.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jcinit.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jcmainct.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jcmarker.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jcmaster.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jcomapi.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jcparam.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jcprepct.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jcsample.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jctrans.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jdapimin.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jdapistd.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jdarith.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jdatadst.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jdatasrc.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jdcoefct.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jdcolor.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jddctmgr.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jdhuff.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jdinput.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jdmainct.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jdmarker.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jdmaster.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jdmerge.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jdpostct.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jdsample.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jdtrans.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jerror.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jfdctflt.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jfdctfst.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jfdctint.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jidctflt.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jidctfst.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jidctint.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jmemmgr.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jmemnobs.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jquant1.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jquant2.c \ -G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jutils.c +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jaricom.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jcapimin.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jcapistd.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jcarith.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jccoefct.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jccolor.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jcdctmgr.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jchuff.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jcinit.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jcmainct.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jcmarker.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jcmaster.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jcomapi.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jcparam.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jcprepct.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jcsample.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jctrans.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jdapimin.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jdapistd.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jdarith.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jdatadst.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jdatasrc.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jdcoefct.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jdcolor.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jddctmgr.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jdhuff.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jdinput.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jdmainct.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jdmarker.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jdmaster.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jdmerge.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jdpostct.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jdsample.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jdtrans.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jerror.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jfdctflt.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jfdctfst.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jfdctint.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jidctflt.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jidctfst.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jidctint.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jmemmgr.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jmemnobs.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jquant1.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jquant2.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jutils.c C_DEPS += \ ./Middlewares/LibJPEG/jaricom.d \ @@ -150,98 +150,98 @@ OBJS += \ # Each subdirectory must supply rules for building sources it contributes -Middlewares/LibJPEG/jaricom.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jaricom.c Middlewares/LibJPEG/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Middlewares/LibJPEG/jcapimin.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jcapimin.c Middlewares/LibJPEG/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Middlewares/LibJPEG/jcapistd.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jcapistd.c Middlewares/LibJPEG/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Middlewares/LibJPEG/jcarith.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jcarith.c Middlewares/LibJPEG/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Middlewares/LibJPEG/jccoefct.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jccoefct.c Middlewares/LibJPEG/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Middlewares/LibJPEG/jccolor.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jccolor.c Middlewares/LibJPEG/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Middlewares/LibJPEG/jcdctmgr.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jcdctmgr.c Middlewares/LibJPEG/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Middlewares/LibJPEG/jchuff.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jchuff.c Middlewares/LibJPEG/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Middlewares/LibJPEG/jcinit.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jcinit.c Middlewares/LibJPEG/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Middlewares/LibJPEG/jcmainct.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jcmainct.c Middlewares/LibJPEG/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Middlewares/LibJPEG/jcmarker.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jcmarker.c Middlewares/LibJPEG/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Middlewares/LibJPEG/jcmaster.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jcmaster.c Middlewares/LibJPEG/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Middlewares/LibJPEG/jcomapi.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jcomapi.c Middlewares/LibJPEG/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Middlewares/LibJPEG/jcparam.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jcparam.c Middlewares/LibJPEG/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Middlewares/LibJPEG/jcprepct.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jcprepct.c Middlewares/LibJPEG/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Middlewares/LibJPEG/jcsample.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jcsample.c Middlewares/LibJPEG/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Middlewares/LibJPEG/jctrans.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jctrans.c Middlewares/LibJPEG/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Middlewares/LibJPEG/jdapimin.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jdapimin.c Middlewares/LibJPEG/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Middlewares/LibJPEG/jdapistd.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jdapistd.c Middlewares/LibJPEG/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Middlewares/LibJPEG/jdarith.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jdarith.c Middlewares/LibJPEG/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Middlewares/LibJPEG/jdatadst.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jdatadst.c Middlewares/LibJPEG/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Middlewares/LibJPEG/jdatasrc.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jdatasrc.c Middlewares/LibJPEG/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Middlewares/LibJPEG/jdcoefct.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jdcoefct.c Middlewares/LibJPEG/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Middlewares/LibJPEG/jdcolor.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jdcolor.c Middlewares/LibJPEG/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Middlewares/LibJPEG/jddctmgr.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jddctmgr.c Middlewares/LibJPEG/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Middlewares/LibJPEG/jdhuff.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jdhuff.c Middlewares/LibJPEG/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Middlewares/LibJPEG/jdinput.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jdinput.c Middlewares/LibJPEG/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Middlewares/LibJPEG/jdmainct.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jdmainct.c Middlewares/LibJPEG/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Middlewares/LibJPEG/jdmarker.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jdmarker.c Middlewares/LibJPEG/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Middlewares/LibJPEG/jdmaster.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jdmaster.c Middlewares/LibJPEG/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Middlewares/LibJPEG/jdmerge.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jdmerge.c Middlewares/LibJPEG/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Middlewares/LibJPEG/jdpostct.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jdpostct.c Middlewares/LibJPEG/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Middlewares/LibJPEG/jdsample.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jdsample.c Middlewares/LibJPEG/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Middlewares/LibJPEG/jdtrans.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jdtrans.c Middlewares/LibJPEG/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Middlewares/LibJPEG/jerror.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jerror.c Middlewares/LibJPEG/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Middlewares/LibJPEG/jfdctflt.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jfdctflt.c Middlewares/LibJPEG/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Middlewares/LibJPEG/jfdctfst.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jfdctfst.c Middlewares/LibJPEG/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Middlewares/LibJPEG/jfdctint.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jfdctint.c Middlewares/LibJPEG/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Middlewares/LibJPEG/jidctflt.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jidctflt.c Middlewares/LibJPEG/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Middlewares/LibJPEG/jidctfst.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jidctfst.c Middlewares/LibJPEG/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Middlewares/LibJPEG/jidctint.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jidctint.c Middlewares/LibJPEG/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Middlewares/LibJPEG/jmemmgr.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jmemmgr.c Middlewares/LibJPEG/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Middlewares/LibJPEG/jmemnobs.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jmemnobs.c Middlewares/LibJPEG/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Middlewares/LibJPEG/jquant1.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jquant1.c Middlewares/LibJPEG/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Middlewares/LibJPEG/jquant2.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jquant2.c Middlewares/LibJPEG/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" -Middlewares/LibJPEG/jutils.o: G:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jutils.c Middlewares/LibJPEG/subdir.mk - arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LibJPEG/jaricom.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jaricom.c Middlewares/LibJPEG/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LibJPEG/jcapimin.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jcapimin.c Middlewares/LibJPEG/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LibJPEG/jcapistd.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jcapistd.c Middlewares/LibJPEG/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LibJPEG/jcarith.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jcarith.c Middlewares/LibJPEG/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LibJPEG/jccoefct.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jccoefct.c Middlewares/LibJPEG/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LibJPEG/jccolor.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jccolor.c Middlewares/LibJPEG/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LibJPEG/jcdctmgr.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jcdctmgr.c Middlewares/LibJPEG/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LibJPEG/jchuff.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jchuff.c Middlewares/LibJPEG/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LibJPEG/jcinit.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jcinit.c Middlewares/LibJPEG/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LibJPEG/jcmainct.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jcmainct.c Middlewares/LibJPEG/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LibJPEG/jcmarker.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jcmarker.c Middlewares/LibJPEG/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LibJPEG/jcmaster.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jcmaster.c Middlewares/LibJPEG/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LibJPEG/jcomapi.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jcomapi.c Middlewares/LibJPEG/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LibJPEG/jcparam.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jcparam.c Middlewares/LibJPEG/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LibJPEG/jcprepct.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jcprepct.c Middlewares/LibJPEG/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LibJPEG/jcsample.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jcsample.c Middlewares/LibJPEG/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LibJPEG/jctrans.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jctrans.c Middlewares/LibJPEG/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LibJPEG/jdapimin.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jdapimin.c Middlewares/LibJPEG/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LibJPEG/jdapistd.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jdapistd.c Middlewares/LibJPEG/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LibJPEG/jdarith.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jdarith.c Middlewares/LibJPEG/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LibJPEG/jdatadst.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jdatadst.c Middlewares/LibJPEG/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LibJPEG/jdatasrc.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jdatasrc.c Middlewares/LibJPEG/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LibJPEG/jdcoefct.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jdcoefct.c Middlewares/LibJPEG/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LibJPEG/jdcolor.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jdcolor.c Middlewares/LibJPEG/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LibJPEG/jddctmgr.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jddctmgr.c Middlewares/LibJPEG/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LibJPEG/jdhuff.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jdhuff.c Middlewares/LibJPEG/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LibJPEG/jdinput.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jdinput.c Middlewares/LibJPEG/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LibJPEG/jdmainct.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jdmainct.c Middlewares/LibJPEG/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LibJPEG/jdmarker.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jdmarker.c Middlewares/LibJPEG/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LibJPEG/jdmaster.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jdmaster.c Middlewares/LibJPEG/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LibJPEG/jdmerge.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jdmerge.c Middlewares/LibJPEG/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LibJPEG/jdpostct.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jdpostct.c Middlewares/LibJPEG/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LibJPEG/jdsample.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jdsample.c Middlewares/LibJPEG/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LibJPEG/jdtrans.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jdtrans.c Middlewares/LibJPEG/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LibJPEG/jerror.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jerror.c Middlewares/LibJPEG/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LibJPEG/jfdctflt.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jfdctflt.c Middlewares/LibJPEG/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LibJPEG/jfdctfst.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jfdctfst.c Middlewares/LibJPEG/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LibJPEG/jfdctint.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jfdctint.c Middlewares/LibJPEG/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LibJPEG/jidctflt.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jidctflt.c Middlewares/LibJPEG/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LibJPEG/jidctfst.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jidctfst.c Middlewares/LibJPEG/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LibJPEG/jidctint.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jidctint.c Middlewares/LibJPEG/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LibJPEG/jmemmgr.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jmemmgr.c Middlewares/LibJPEG/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LibJPEG/jmemnobs.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jmemnobs.c Middlewares/LibJPEG/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LibJPEG/jquant1.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jquant1.c Middlewares/LibJPEG/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LibJPEG/jquant2.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jquant2.c Middlewares/LibJPEG/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LibJPEG/jutils.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LibJPEG/source/jutils.c Middlewares/LibJPEG/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" clean: clean-Middlewares-2f-LibJPEG diff --git a/STM32_Disco746G/STM32CubeIDE/Debug/Middlewares/LwIP/subdir.mk b/STM32_Disco746G/STM32CubeIDE/Debug/Middlewares/LwIP/subdir.mk new file mode 100644 index 0000000000000000000000000000000000000000..8fa7c3640d2673d1fc1edcb97ed5338bd62683ed --- /dev/null +++ b/STM32_Disco746G/STM32CubeIDE/Debug/Middlewares/LwIP/subdir.mk @@ -0,0 +1,428 @@ +################################################################################ +# Automatically-generated file. Do not edit! +# Toolchain: GNU Tools for STM32 (11.3.rel1) +################################################################################ + +# Add inputs and outputs from these tool invocations to the build variables +C_SRCS += \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/altcp.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/altcp_alloc.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/altcp_tcp.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/api/api_lib.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/api/api_msg.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/auth.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv4/autoip.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/bridgeif.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/bridgeif_fdb.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/ccp.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/chap-md5.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/chap-new.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/chap_ms.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/def.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/demand.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv4/dhcp.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv6/dhcp6.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/dns.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/eap.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/ecp.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/api/err.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv4/etharp.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ethernet.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv6/ethip6.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/eui64.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/fsm.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv4/icmp.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv6/icmp6.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/api/if_api.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv4/igmp.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv6/inet6.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/inet_chksum.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/init.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ip.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv4/ip4.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv4/ip4_addr.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv4/ip4_frag.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv6/ip6.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv6/ip6_addr.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv6/ip6_frag.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/ipcp.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/ipv6cp.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/lcp.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/lowpan6.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/lowpan6_ble.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/lowpan6_common.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/magic.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/mem.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/memp.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv6/mld6.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/mppe.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/apps/mqtt/mqtt.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/multilink.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv6/nd6.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/api/netbuf.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/api/netdb.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/netif.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/api/netifapi.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/pbuf.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/ppp.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/pppapi.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/pppcrypt.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/pppoe.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/pppol2tp.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/pppos.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/raw.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/slipif.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/api/sockets.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/stats.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/sys.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/system/OS/sys_arch.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/tcp.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/tcp_in.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/tcp_out.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/api/tcpip.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/timeouts.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/udp.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/upap.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/utils.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/vj.c \ +C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/zepif.c + +C_DEPS += \ +./Middlewares/LwIP/altcp.d \ +./Middlewares/LwIP/altcp_alloc.d \ +./Middlewares/LwIP/altcp_tcp.d \ +./Middlewares/LwIP/api_lib.d \ +./Middlewares/LwIP/api_msg.d \ +./Middlewares/LwIP/auth.d \ +./Middlewares/LwIP/autoip.d \ +./Middlewares/LwIP/bridgeif.d \ +./Middlewares/LwIP/bridgeif_fdb.d \ +./Middlewares/LwIP/ccp.d \ +./Middlewares/LwIP/chap-md5.d \ +./Middlewares/LwIP/chap-new.d \ +./Middlewares/LwIP/chap_ms.d \ +./Middlewares/LwIP/def.d \ +./Middlewares/LwIP/demand.d \ +./Middlewares/LwIP/dhcp.d \ +./Middlewares/LwIP/dhcp6.d \ +./Middlewares/LwIP/dns.d \ +./Middlewares/LwIP/eap.d \ +./Middlewares/LwIP/ecp.d \ +./Middlewares/LwIP/err.d \ +./Middlewares/LwIP/etharp.d \ +./Middlewares/LwIP/ethernet.d \ +./Middlewares/LwIP/ethip6.d \ +./Middlewares/LwIP/eui64.d \ +./Middlewares/LwIP/fsm.d \ +./Middlewares/LwIP/icmp.d \ +./Middlewares/LwIP/icmp6.d \ +./Middlewares/LwIP/if_api.d \ +./Middlewares/LwIP/igmp.d \ +./Middlewares/LwIP/inet6.d \ +./Middlewares/LwIP/inet_chksum.d \ +./Middlewares/LwIP/init.d \ +./Middlewares/LwIP/ip.d \ +./Middlewares/LwIP/ip4.d \ +./Middlewares/LwIP/ip4_addr.d \ +./Middlewares/LwIP/ip4_frag.d \ +./Middlewares/LwIP/ip6.d \ +./Middlewares/LwIP/ip6_addr.d \ +./Middlewares/LwIP/ip6_frag.d \ +./Middlewares/LwIP/ipcp.d \ +./Middlewares/LwIP/ipv6cp.d \ +./Middlewares/LwIP/lcp.d \ +./Middlewares/LwIP/lowpan6.d \ +./Middlewares/LwIP/lowpan6_ble.d \ +./Middlewares/LwIP/lowpan6_common.d \ +./Middlewares/LwIP/magic.d \ +./Middlewares/LwIP/mem.d \ +./Middlewares/LwIP/memp.d \ +./Middlewares/LwIP/mld6.d \ +./Middlewares/LwIP/mppe.d \ +./Middlewares/LwIP/mqtt.d \ +./Middlewares/LwIP/multilink.d \ +./Middlewares/LwIP/nd6.d \ +./Middlewares/LwIP/netbuf.d \ +./Middlewares/LwIP/netdb.d \ +./Middlewares/LwIP/netif.d \ +./Middlewares/LwIP/netifapi.d \ +./Middlewares/LwIP/pbuf.d \ +./Middlewares/LwIP/ppp.d \ +./Middlewares/LwIP/pppapi.d \ +./Middlewares/LwIP/pppcrypt.d \ +./Middlewares/LwIP/pppoe.d \ +./Middlewares/LwIP/pppol2tp.d \ +./Middlewares/LwIP/pppos.d \ +./Middlewares/LwIP/raw.d \ +./Middlewares/LwIP/slipif.d \ +./Middlewares/LwIP/sockets.d \ +./Middlewares/LwIP/stats.d \ +./Middlewares/LwIP/sys.d \ +./Middlewares/LwIP/sys_arch.d \ +./Middlewares/LwIP/tcp.d \ +./Middlewares/LwIP/tcp_in.d \ +./Middlewares/LwIP/tcp_out.d \ +./Middlewares/LwIP/tcpip.d \ +./Middlewares/LwIP/timeouts.d \ +./Middlewares/LwIP/udp.d \ +./Middlewares/LwIP/upap.d \ +./Middlewares/LwIP/utils.d \ +./Middlewares/LwIP/vj.d \ +./Middlewares/LwIP/zepif.d + +OBJS += \ +./Middlewares/LwIP/altcp.o \ +./Middlewares/LwIP/altcp_alloc.o \ +./Middlewares/LwIP/altcp_tcp.o \ +./Middlewares/LwIP/api_lib.o \ +./Middlewares/LwIP/api_msg.o \ +./Middlewares/LwIP/auth.o \ +./Middlewares/LwIP/autoip.o \ +./Middlewares/LwIP/bridgeif.o \ +./Middlewares/LwIP/bridgeif_fdb.o \ +./Middlewares/LwIP/ccp.o \ +./Middlewares/LwIP/chap-md5.o \ +./Middlewares/LwIP/chap-new.o \ +./Middlewares/LwIP/chap_ms.o \ +./Middlewares/LwIP/def.o \ +./Middlewares/LwIP/demand.o \ +./Middlewares/LwIP/dhcp.o \ +./Middlewares/LwIP/dhcp6.o \ +./Middlewares/LwIP/dns.o \ +./Middlewares/LwIP/eap.o \ +./Middlewares/LwIP/ecp.o \ +./Middlewares/LwIP/err.o \ +./Middlewares/LwIP/etharp.o \ +./Middlewares/LwIP/ethernet.o \ +./Middlewares/LwIP/ethip6.o \ +./Middlewares/LwIP/eui64.o \ +./Middlewares/LwIP/fsm.o \ +./Middlewares/LwIP/icmp.o \ +./Middlewares/LwIP/icmp6.o \ +./Middlewares/LwIP/if_api.o \ +./Middlewares/LwIP/igmp.o \ +./Middlewares/LwIP/inet6.o \ +./Middlewares/LwIP/inet_chksum.o \ +./Middlewares/LwIP/init.o \ +./Middlewares/LwIP/ip.o \ +./Middlewares/LwIP/ip4.o \ +./Middlewares/LwIP/ip4_addr.o \ +./Middlewares/LwIP/ip4_frag.o \ +./Middlewares/LwIP/ip6.o \ +./Middlewares/LwIP/ip6_addr.o \ +./Middlewares/LwIP/ip6_frag.o \ +./Middlewares/LwIP/ipcp.o \ +./Middlewares/LwIP/ipv6cp.o \ +./Middlewares/LwIP/lcp.o \ +./Middlewares/LwIP/lowpan6.o \ +./Middlewares/LwIP/lowpan6_ble.o \ +./Middlewares/LwIP/lowpan6_common.o \ +./Middlewares/LwIP/magic.o \ +./Middlewares/LwIP/mem.o \ +./Middlewares/LwIP/memp.o \ +./Middlewares/LwIP/mld6.o \ +./Middlewares/LwIP/mppe.o \ +./Middlewares/LwIP/mqtt.o \ +./Middlewares/LwIP/multilink.o \ +./Middlewares/LwIP/nd6.o \ +./Middlewares/LwIP/netbuf.o \ +./Middlewares/LwIP/netdb.o \ +./Middlewares/LwIP/netif.o \ +./Middlewares/LwIP/netifapi.o \ +./Middlewares/LwIP/pbuf.o \ +./Middlewares/LwIP/ppp.o \ +./Middlewares/LwIP/pppapi.o \ +./Middlewares/LwIP/pppcrypt.o \ +./Middlewares/LwIP/pppoe.o \ +./Middlewares/LwIP/pppol2tp.o \ +./Middlewares/LwIP/pppos.o \ +./Middlewares/LwIP/raw.o \ +./Middlewares/LwIP/slipif.o \ +./Middlewares/LwIP/sockets.o \ +./Middlewares/LwIP/stats.o \ +./Middlewares/LwIP/sys.o \ +./Middlewares/LwIP/sys_arch.o \ +./Middlewares/LwIP/tcp.o \ +./Middlewares/LwIP/tcp_in.o \ +./Middlewares/LwIP/tcp_out.o \ +./Middlewares/LwIP/tcpip.o \ +./Middlewares/LwIP/timeouts.o \ +./Middlewares/LwIP/udp.o \ +./Middlewares/LwIP/upap.o \ +./Middlewares/LwIP/utils.o \ +./Middlewares/LwIP/vj.o \ +./Middlewares/LwIP/zepif.o + + +# Each subdirectory must supply rules for building sources it contributes +Middlewares/LwIP/altcp.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/altcp.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/altcp_alloc.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/altcp_alloc.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/altcp_tcp.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/altcp_tcp.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/api_lib.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/api/api_lib.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/api_msg.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/api/api_msg.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/auth.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/auth.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/autoip.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv4/autoip.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/bridgeif.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/bridgeif.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/bridgeif_fdb.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/bridgeif_fdb.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/ccp.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/ccp.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/chap-md5.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/chap-md5.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/chap-new.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/chap-new.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/chap_ms.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/chap_ms.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/def.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/def.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/demand.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/demand.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/dhcp.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv4/dhcp.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/dhcp6.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv6/dhcp6.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/dns.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/dns.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/eap.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/eap.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/ecp.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/ecp.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/err.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/api/err.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/etharp.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv4/etharp.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/ethernet.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ethernet.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/ethip6.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv6/ethip6.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/eui64.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/eui64.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/fsm.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/fsm.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/icmp.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv4/icmp.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/icmp6.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv6/icmp6.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/if_api.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/api/if_api.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/igmp.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv4/igmp.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/inet6.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv6/inet6.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/inet_chksum.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/inet_chksum.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/init.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/init.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/ip.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ip.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/ip4.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv4/ip4.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/ip4_addr.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv4/ip4_addr.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/ip4_frag.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv4/ip4_frag.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/ip6.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv6/ip6.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/ip6_addr.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv6/ip6_addr.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/ip6_frag.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv6/ip6_frag.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/ipcp.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/ipcp.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/ipv6cp.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/ipv6cp.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/lcp.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/lcp.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/lowpan6.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/lowpan6.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/lowpan6_ble.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/lowpan6_ble.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/lowpan6_common.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/lowpan6_common.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/magic.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/magic.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/mem.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/mem.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/memp.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/memp.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/mld6.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv6/mld6.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/mppe.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/mppe.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/mqtt.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/apps/mqtt/mqtt.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/multilink.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/multilink.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/nd6.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/ipv6/nd6.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/netbuf.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/api/netbuf.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/netdb.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/api/netdb.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/netif.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/netif.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/netifapi.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/api/netifapi.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/pbuf.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/pbuf.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/ppp.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/ppp.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/pppapi.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/pppapi.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/pppcrypt.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/pppcrypt.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/pppoe.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/pppoe.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/pppol2tp.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/pppol2tp.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/pppos.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/pppos.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/raw.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/raw.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/slipif.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/slipif.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/sockets.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/api/sockets.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/stats.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/stats.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/sys.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/sys.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/sys_arch.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/system/OS/sys_arch.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/tcp.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/tcp.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/tcp_in.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/tcp_in.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/tcp_out.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/tcp_out.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/tcpip.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/api/tcpip.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/timeouts.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/timeouts.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/udp.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/core/udp.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/upap.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/upap.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/utils.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/utils.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/vj.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/ppp/vj.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" +Middlewares/LwIP/zepif.o: C:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/Third_Party/LwIP/src/netif/zepif.c Middlewares/LwIP/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m7 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F746xx -DDEBUG -c -I../../Core/Inc -I../../TouchGFX/App -I../../TouchGFX/target/generated -I../../TouchGFX/target -I../../Drivers/STM32F7xx_HAL_Driver/Inc -I../../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy -I../../Middlewares/Third_Party/FreeRTOS/Source/include -I../../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1 -I../../Drivers/CMSIS/Device/ST/STM32F7xx/Include -I../../Drivers/CMSIS/Include -I../../Middlewares/ST/touchgfx/framework/include -I../../TouchGFX/generated/fonts/include -I../../TouchGFX/generated/gui_generated/include -I../../TouchGFX/generated/images/include -I../../TouchGFX/generated/texts/include -I../../TouchGFX/gui/include -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -I../../Drivers/BSP/STM32746G-Discovery -I../../Drivers/BSP/Components/ft5336 -I../../LIBJPEG/App -I../../LIBJPEG/Target -I../../Middlewares/Third_Party/LibJPEG/include -I../../TouchGFX/generated/videos/include -I../../LWIP/App -I../../LWIP/Target -I../../Middlewares/Third_Party/LwIP/src/include -I../../Middlewares/Third_Party/LwIP/system -I../../Drivers/BSP/Components/lan8742 -I../../Middlewares/Third_Party/LwIP/src/include/netif/ppp -I../../Middlewares/Third_Party/LwIP/src/include/lwip -I../../Middlewares/Third_Party/LwIP/src/include/lwip/apps -I../../Middlewares/Third_Party/LwIP/src/include/lwip/priv -I../../Middlewares/Third_Party/LwIP/src/include/lwip/prot -I../../Middlewares/Third_Party/LwIP/src/include/netif -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/net -I../../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys -I../../Middlewares/Third_Party/LwIP/src/include/compat/stdc -I../../Middlewares/Third_Party/LwIP/system/arch -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -o "$@" + +clean: clean-Middlewares-2f-LwIP + +clean-Middlewares-2f-LwIP: + -$(RM) ./Middlewares/LwIP/altcp.cyclo ./Middlewares/LwIP/altcp.d ./Middlewares/LwIP/altcp.o ./Middlewares/LwIP/altcp.su ./Middlewares/LwIP/altcp_alloc.cyclo ./Middlewares/LwIP/altcp_alloc.d ./Middlewares/LwIP/altcp_alloc.o ./Middlewares/LwIP/altcp_alloc.su ./Middlewares/LwIP/altcp_tcp.cyclo ./Middlewares/LwIP/altcp_tcp.d ./Middlewares/LwIP/altcp_tcp.o ./Middlewares/LwIP/altcp_tcp.su ./Middlewares/LwIP/api_lib.cyclo ./Middlewares/LwIP/api_lib.d ./Middlewares/LwIP/api_lib.o ./Middlewares/LwIP/api_lib.su ./Middlewares/LwIP/api_msg.cyclo ./Middlewares/LwIP/api_msg.d ./Middlewares/LwIP/api_msg.o ./Middlewares/LwIP/api_msg.su ./Middlewares/LwIP/auth.cyclo ./Middlewares/LwIP/auth.d ./Middlewares/LwIP/auth.o ./Middlewares/LwIP/auth.su ./Middlewares/LwIP/autoip.cyclo ./Middlewares/LwIP/autoip.d ./Middlewares/LwIP/autoip.o ./Middlewares/LwIP/autoip.su ./Middlewares/LwIP/bridgeif.cyclo ./Middlewares/LwIP/bridgeif.d ./Middlewares/LwIP/bridgeif.o ./Middlewares/LwIP/bridgeif.su ./Middlewares/LwIP/bridgeif_fdb.cyclo ./Middlewares/LwIP/bridgeif_fdb.d ./Middlewares/LwIP/bridgeif_fdb.o ./Middlewares/LwIP/bridgeif_fdb.su ./Middlewares/LwIP/ccp.cyclo ./Middlewares/LwIP/ccp.d ./Middlewares/LwIP/ccp.o ./Middlewares/LwIP/ccp.su ./Middlewares/LwIP/chap-md5.cyclo ./Middlewares/LwIP/chap-md5.d ./Middlewares/LwIP/chap-md5.o ./Middlewares/LwIP/chap-md5.su ./Middlewares/LwIP/chap-new.cyclo ./Middlewares/LwIP/chap-new.d ./Middlewares/LwIP/chap-new.o ./Middlewares/LwIP/chap-new.su ./Middlewares/LwIP/chap_ms.cyclo ./Middlewares/LwIP/chap_ms.d ./Middlewares/LwIP/chap_ms.o ./Middlewares/LwIP/chap_ms.su ./Middlewares/LwIP/def.cyclo ./Middlewares/LwIP/def.d ./Middlewares/LwIP/def.o ./Middlewares/LwIP/def.su ./Middlewares/LwIP/demand.cyclo ./Middlewares/LwIP/demand.d ./Middlewares/LwIP/demand.o ./Middlewares/LwIP/demand.su ./Middlewares/LwIP/dhcp.cyclo ./Middlewares/LwIP/dhcp.d ./Middlewares/LwIP/dhcp.o ./Middlewares/LwIP/dhcp.su ./Middlewares/LwIP/dhcp6.cyclo ./Middlewares/LwIP/dhcp6.d ./Middlewares/LwIP/dhcp6.o ./Middlewares/LwIP/dhcp6.su ./Middlewares/LwIP/dns.cyclo ./Middlewares/LwIP/dns.d ./Middlewares/LwIP/dns.o ./Middlewares/LwIP/dns.su ./Middlewares/LwIP/eap.cyclo ./Middlewares/LwIP/eap.d ./Middlewares/LwIP/eap.o ./Middlewares/LwIP/eap.su ./Middlewares/LwIP/ecp.cyclo ./Middlewares/LwIP/ecp.d ./Middlewares/LwIP/ecp.o ./Middlewares/LwIP/ecp.su ./Middlewares/LwIP/err.cyclo ./Middlewares/LwIP/err.d ./Middlewares/LwIP/err.o ./Middlewares/LwIP/err.su ./Middlewares/LwIP/etharp.cyclo ./Middlewares/LwIP/etharp.d ./Middlewares/LwIP/etharp.o ./Middlewares/LwIP/etharp.su ./Middlewares/LwIP/ethernet.cyclo ./Middlewares/LwIP/ethernet.d ./Middlewares/LwIP/ethernet.o ./Middlewares/LwIP/ethernet.su ./Middlewares/LwIP/ethip6.cyclo ./Middlewares/LwIP/ethip6.d ./Middlewares/LwIP/ethip6.o ./Middlewares/LwIP/ethip6.su ./Middlewares/LwIP/eui64.cyclo ./Middlewares/LwIP/eui64.d ./Middlewares/LwIP/eui64.o ./Middlewares/LwIP/eui64.su ./Middlewares/LwIP/fsm.cyclo ./Middlewares/LwIP/fsm.d ./Middlewares/LwIP/fsm.o ./Middlewares/LwIP/fsm.su ./Middlewares/LwIP/icmp.cyclo ./Middlewares/LwIP/icmp.d ./Middlewares/LwIP/icmp.o ./Middlewares/LwIP/icmp.su ./Middlewares/LwIP/icmp6.cyclo ./Middlewares/LwIP/icmp6.d ./Middlewares/LwIP/icmp6.o ./Middlewares/LwIP/icmp6.su ./Middlewares/LwIP/if_api.cyclo ./Middlewares/LwIP/if_api.d ./Middlewares/LwIP/if_api.o ./Middlewares/LwIP/if_api.su ./Middlewares/LwIP/igmp.cyclo ./Middlewares/LwIP/igmp.d ./Middlewares/LwIP/igmp.o ./Middlewares/LwIP/igmp.su ./Middlewares/LwIP/inet6.cyclo ./Middlewares/LwIP/inet6.d ./Middlewares/LwIP/inet6.o ./Middlewares/LwIP/inet6.su ./Middlewares/LwIP/inet_chksum.cyclo ./Middlewares/LwIP/inet_chksum.d ./Middlewares/LwIP/inet_chksum.o ./Middlewares/LwIP/inet_chksum.su ./Middlewares/LwIP/init.cyclo ./Middlewares/LwIP/init.d ./Middlewares/LwIP/init.o ./Middlewares/LwIP/init.su ./Middlewares/LwIP/ip.cyclo ./Middlewares/LwIP/ip.d ./Middlewares/LwIP/ip.o ./Middlewares/LwIP/ip.su ./Middlewares/LwIP/ip4.cyclo ./Middlewares/LwIP/ip4.d ./Middlewares/LwIP/ip4.o ./Middlewares/LwIP/ip4.su ./Middlewares/LwIP/ip4_addr.cyclo ./Middlewares/LwIP/ip4_addr.d ./Middlewares/LwIP/ip4_addr.o ./Middlewares/LwIP/ip4_addr.su ./Middlewares/LwIP/ip4_frag.cyclo ./Middlewares/LwIP/ip4_frag.d ./Middlewares/LwIP/ip4_frag.o ./Middlewares/LwIP/ip4_frag.su ./Middlewares/LwIP/ip6.cyclo ./Middlewares/LwIP/ip6.d ./Middlewares/LwIP/ip6.o ./Middlewares/LwIP/ip6.su ./Middlewares/LwIP/ip6_addr.cyclo ./Middlewares/LwIP/ip6_addr.d ./Middlewares/LwIP/ip6_addr.o ./Middlewares/LwIP/ip6_addr.su ./Middlewares/LwIP/ip6_frag.cyclo ./Middlewares/LwIP/ip6_frag.d ./Middlewares/LwIP/ip6_frag.o ./Middlewares/LwIP/ip6_frag.su ./Middlewares/LwIP/ipcp.cyclo ./Middlewares/LwIP/ipcp.d ./Middlewares/LwIP/ipcp.o ./Middlewares/LwIP/ipcp.su ./Middlewares/LwIP/ipv6cp.cyclo ./Middlewares/LwIP/ipv6cp.d ./Middlewares/LwIP/ipv6cp.o ./Middlewares/LwIP/ipv6cp.su ./Middlewares/LwIP/lcp.cyclo ./Middlewares/LwIP/lcp.d ./Middlewares/LwIP/lcp.o ./Middlewares/LwIP/lcp.su ./Middlewares/LwIP/lowpan6.cyclo ./Middlewares/LwIP/lowpan6.d ./Middlewares/LwIP/lowpan6.o ./Middlewares/LwIP/lowpan6.su ./Middlewares/LwIP/lowpan6_ble.cyclo ./Middlewares/LwIP/lowpan6_ble.d ./Middlewares/LwIP/lowpan6_ble.o ./Middlewares/LwIP/lowpan6_ble.su ./Middlewares/LwIP/lowpan6_common.cyclo ./Middlewares/LwIP/lowpan6_common.d ./Middlewares/LwIP/lowpan6_common.o ./Middlewares/LwIP/lowpan6_common.su ./Middlewares/LwIP/magic.cyclo ./Middlewares/LwIP/magic.d ./Middlewares/LwIP/magic.o ./Middlewares/LwIP/magic.su ./Middlewares/LwIP/mem.cyclo ./Middlewares/LwIP/mem.d ./Middlewares/LwIP/mem.o ./Middlewares/LwIP/mem.su ./Middlewares/LwIP/memp.cyclo ./Middlewares/LwIP/memp.d ./Middlewares/LwIP/memp.o ./Middlewares/LwIP/memp.su ./Middlewares/LwIP/mld6.cyclo ./Middlewares/LwIP/mld6.d ./Middlewares/LwIP/mld6.o ./Middlewares/LwIP/mld6.su ./Middlewares/LwIP/mppe.cyclo ./Middlewares/LwIP/mppe.d ./Middlewares/LwIP/mppe.o ./Middlewares/LwIP/mppe.su ./Middlewares/LwIP/mqtt.cyclo ./Middlewares/LwIP/mqtt.d + -$(RM) ./Middlewares/LwIP/mqtt.o ./Middlewares/LwIP/mqtt.su ./Middlewares/LwIP/multilink.cyclo ./Middlewares/LwIP/multilink.d ./Middlewares/LwIP/multilink.o ./Middlewares/LwIP/multilink.su ./Middlewares/LwIP/nd6.cyclo ./Middlewares/LwIP/nd6.d ./Middlewares/LwIP/nd6.o ./Middlewares/LwIP/nd6.su ./Middlewares/LwIP/netbuf.cyclo ./Middlewares/LwIP/netbuf.d ./Middlewares/LwIP/netbuf.o ./Middlewares/LwIP/netbuf.su ./Middlewares/LwIP/netdb.cyclo ./Middlewares/LwIP/netdb.d ./Middlewares/LwIP/netdb.o ./Middlewares/LwIP/netdb.su ./Middlewares/LwIP/netif.cyclo ./Middlewares/LwIP/netif.d ./Middlewares/LwIP/netif.o ./Middlewares/LwIP/netif.su ./Middlewares/LwIP/netifapi.cyclo ./Middlewares/LwIP/netifapi.d ./Middlewares/LwIP/netifapi.o ./Middlewares/LwIP/netifapi.su ./Middlewares/LwIP/pbuf.cyclo ./Middlewares/LwIP/pbuf.d ./Middlewares/LwIP/pbuf.o ./Middlewares/LwIP/pbuf.su ./Middlewares/LwIP/ppp.cyclo ./Middlewares/LwIP/ppp.d ./Middlewares/LwIP/ppp.o ./Middlewares/LwIP/ppp.su ./Middlewares/LwIP/pppapi.cyclo ./Middlewares/LwIP/pppapi.d ./Middlewares/LwIP/pppapi.o ./Middlewares/LwIP/pppapi.su ./Middlewares/LwIP/pppcrypt.cyclo ./Middlewares/LwIP/pppcrypt.d ./Middlewares/LwIP/pppcrypt.o ./Middlewares/LwIP/pppcrypt.su ./Middlewares/LwIP/pppoe.cyclo ./Middlewares/LwIP/pppoe.d ./Middlewares/LwIP/pppoe.o ./Middlewares/LwIP/pppoe.su ./Middlewares/LwIP/pppol2tp.cyclo ./Middlewares/LwIP/pppol2tp.d ./Middlewares/LwIP/pppol2tp.o ./Middlewares/LwIP/pppol2tp.su ./Middlewares/LwIP/pppos.cyclo ./Middlewares/LwIP/pppos.d ./Middlewares/LwIP/pppos.o ./Middlewares/LwIP/pppos.su ./Middlewares/LwIP/raw.cyclo ./Middlewares/LwIP/raw.d ./Middlewares/LwIP/raw.o ./Middlewares/LwIP/raw.su ./Middlewares/LwIP/slipif.cyclo ./Middlewares/LwIP/slipif.d ./Middlewares/LwIP/slipif.o ./Middlewares/LwIP/slipif.su ./Middlewares/LwIP/sockets.cyclo ./Middlewares/LwIP/sockets.d ./Middlewares/LwIP/sockets.o ./Middlewares/LwIP/sockets.su ./Middlewares/LwIP/stats.cyclo ./Middlewares/LwIP/stats.d ./Middlewares/LwIP/stats.o ./Middlewares/LwIP/stats.su ./Middlewares/LwIP/sys.cyclo ./Middlewares/LwIP/sys.d ./Middlewares/LwIP/sys.o ./Middlewares/LwIP/sys.su ./Middlewares/LwIP/sys_arch.cyclo ./Middlewares/LwIP/sys_arch.d ./Middlewares/LwIP/sys_arch.o ./Middlewares/LwIP/sys_arch.su ./Middlewares/LwIP/tcp.cyclo ./Middlewares/LwIP/tcp.d ./Middlewares/LwIP/tcp.o ./Middlewares/LwIP/tcp.su ./Middlewares/LwIP/tcp_in.cyclo ./Middlewares/LwIP/tcp_in.d ./Middlewares/LwIP/tcp_in.o ./Middlewares/LwIP/tcp_in.su ./Middlewares/LwIP/tcp_out.cyclo ./Middlewares/LwIP/tcp_out.d ./Middlewares/LwIP/tcp_out.o ./Middlewares/LwIP/tcp_out.su ./Middlewares/LwIP/tcpip.cyclo ./Middlewares/LwIP/tcpip.d ./Middlewares/LwIP/tcpip.o ./Middlewares/LwIP/tcpip.su ./Middlewares/LwIP/timeouts.cyclo ./Middlewares/LwIP/timeouts.d ./Middlewares/LwIP/timeouts.o ./Middlewares/LwIP/timeouts.su ./Middlewares/LwIP/udp.cyclo ./Middlewares/LwIP/udp.d ./Middlewares/LwIP/udp.o ./Middlewares/LwIP/udp.su ./Middlewares/LwIP/upap.cyclo ./Middlewares/LwIP/upap.d ./Middlewares/LwIP/upap.o ./Middlewares/LwIP/upap.su ./Middlewares/LwIP/utils.cyclo ./Middlewares/LwIP/utils.d ./Middlewares/LwIP/utils.o ./Middlewares/LwIP/utils.su ./Middlewares/LwIP/vj.cyclo ./Middlewares/LwIP/vj.d ./Middlewares/LwIP/vj.o ./Middlewares/LwIP/vj.su ./Middlewares/LwIP/zepif.cyclo ./Middlewares/LwIP/zepif.d ./Middlewares/LwIP/zepif.o ./Middlewares/LwIP/zepif.su + +.PHONY: clean-Middlewares-2f-LwIP + diff --git a/STM32_Disco746G/STM32CubeIDE/Debug/makefile b/STM32_Disco746G/STM32CubeIDE/Debug/makefile index 5eb0a303126bc477e685abe18a374a0acd4b267d..4c60c34853aa152ac41db8aef5e24b4d89253849 100644 --- a/STM32_Disco746G/STM32CubeIDE/Debug/makefile +++ b/STM32_Disco746G/STM32CubeIDE/Debug/makefile @@ -1,6 +1,6 @@ ################################################################################ # Automatically-generated file. Do not edit! -# Toolchain: GNU Tools for STM32 (10.3-2021.10) +# Toolchain: GNU Tools for STM32 (11.3.rel1) ################################################################################ -include ../makefile.init @@ -9,11 +9,13 @@ RM := rm -rf # All of the sources participating in the build are defined here -include sources.mk +-include Middlewares/LwIP/subdir.mk -include Middlewares/LibJPEG/subdir.mk -include Middlewares/FreeRTOS/subdir.mk -include Drivers/STM32F7xx_HAL_Driver/subdir.mk -include Drivers/Components/subdir.mk -include Drivers/CMSIS/subdir.mk +-include Drivers/BSP/Components/subdir.mk -include Drivers/BSP/subdir.mk -include Application/User/gui/subdir.mk -include Application/User/generated/subdir.mk @@ -21,6 +23,8 @@ RM := rm -rf -include Application/User/TouchGFX/target/subdir.mk -include Application/User/TouchGFX/App/subdir.mk -include Application/User/Startup/subdir.mk +-include Application/User/LWIP/Target/subdir.mk +-include Application/User/LWIP/App/subdir.mk -include Application/User/LIBJPEG/App/subdir.mk -include Application/User/Core/subdir.mk -include objects.mk @@ -89,8 +93,8 @@ all: main-build main-build: LightControlConvi_Disco746G.elf secondary-outputs # Tool invocations -LightControlConvi_Disco746G.elf LightControlConvi_Disco746G.map: $(OBJS) $(USER_OBJS) G:\documents\dev\dev\electrolab\LightControlConvi_SW\STM32_Disco746G\STM32CubeIDE\STM32F746NGHX_FLASH.ld makefile objects.list $(OPTIONAL_TOOL_DEPS) - arm-none-eabi-g++ -o "LightControlConvi_Disco746G.elf" @"objects.list" $(USER_OBJS) $(LIBS) -mcpu=cortex-m7 -T"G:\documents\dev\dev\electrolab\LightControlConvi_SW\STM32_Disco746G\STM32CubeIDE\STM32F746NGHX_FLASH.ld" --specs=nosys.specs -Wl,-Map="LightControlConvi_Disco746G.map" -Wl,--gc-sections -static -LC:/Dev/STM32F746-DISCO/stm32f746g_disco/STM32F746G_DISCO/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc -LG:/documents/dev/dev/electrolab/LightControlConvi_SW/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc/ -LC:/git/STM32F746-dk/stm32f746g_disco/STM32F746G_DISCO/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc -LC:/dev/pacman/at/stm32f746g_disco/STM32F746G_DISCO/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc -LC:/Users/savard/Documents/perso/Dev/electrolab/light_control_convi/LightControlConvi_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc -LG:/documents/dev/dev/electrolab/LightControlConvi_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -Wl,--start-group -lc -lm -lstdc++ -lsupc++ -Wl,--end-group +LightControlConvi_Disco746G.elf LightControlConvi_Disco746G.map: $(OBJS) $(USER_OBJS) C:\Users\savard\Documents\perso\Dev\electrolab\lightcontrolconvi_sw\STM32_Disco746G\STM32CubeIDE\STM32F746NGHX_FLASH.ld makefile objects.list $(OPTIONAL_TOOL_DEPS) + arm-none-eabi-g++ -o "LightControlConvi_Disco746G.elf" @"objects.list" $(USER_OBJS) $(LIBS) -mcpu=cortex-m7 -T"C:\Users\savard\Documents\perso\Dev\electrolab\lightcontrolconvi_sw\STM32_Disco746G\STM32CubeIDE\STM32F746NGHX_FLASH.ld" --specs=nosys.specs -Wl,-Map="LightControlConvi_Disco746G.map" -Wl,--gc-sections -static -L"C:\Users\kiatoo\Documents\dev\electrolab\lightcontrolconvi_sw\STM32_Disco746G\Middlewares\ST\touchgfx\lib\core\cortex_m7\gcc" -LC:/Users/savard/Documents/perso/Dev/electrolab/lightcontrolconvi_sw/STM32_Disco746G/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc --specs=nano.specs -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -Wl,--start-group -lc -lm -lstdc++ -lsupc++ -Wl,--end-group @echo 'Finished building target: $@' @echo ' ' diff --git a/STM32_Disco746G/STM32CubeIDE/Debug/objects.list b/STM32_Disco746G/STM32CubeIDE/Debug/objects.list index eaf51b725867790c09e7a2ab40a7007a0c5e41f0..ca49b6958886ad868ef014852f2d662af300aa5d 100644 --- a/STM32_Disco746G/STM32CubeIDE/Debug/objects.list +++ b/STM32_Disco746G/STM32CubeIDE/Debug/objects.list @@ -6,6 +6,8 @@ "./Application/User/Core/syscalls.o" "./Application/User/Core/sysmem.o" "./Application/User/LIBJPEG/App/libjpeg.o" +"./Application/User/LWIP/App/lwip.o" +"./Application/User/LWIP/Target/ethernetif.o" "./Application/User/Startup/startup_stm32f746nghx.o" "./Application/User/TouchGFX/App/app_touchgfx.o" "./Application/User/TouchGFX/target/CortexMMCUInstrumentation.o" @@ -47,6 +49,7 @@ "./Application/User/gui/MainScreenView.o" "./Application/User/gui/Model.o" "./Application/User/gui/SliderContainer.o" +"./Drivers/BSP/Components/lan8742.o" "./Drivers/BSP/stm32746g_discovery_qspi.o" "./Drivers/CMSIS/system_stm32f7xx.o" "./Drivers/Components/ft5336.o" @@ -58,6 +61,7 @@ "./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma2d.o" "./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dma_ex.o" "./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_dsi.o" +"./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_eth.o" "./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_exti.o" "./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash.o" "./Drivers/STM32F7xx_HAL_Driver/stm32f7xx_hal_flash_ex.o" @@ -131,3 +135,84 @@ "./Middlewares/LibJPEG/jquant1.o" "./Middlewares/LibJPEG/jquant2.o" "./Middlewares/LibJPEG/jutils.o" +"./Middlewares/LwIP/altcp.o" +"./Middlewares/LwIP/altcp_alloc.o" +"./Middlewares/LwIP/altcp_tcp.o" +"./Middlewares/LwIP/api_lib.o" +"./Middlewares/LwIP/api_msg.o" +"./Middlewares/LwIP/auth.o" +"./Middlewares/LwIP/autoip.o" +"./Middlewares/LwIP/bridgeif.o" +"./Middlewares/LwIP/bridgeif_fdb.o" +"./Middlewares/LwIP/ccp.o" +"./Middlewares/LwIP/chap-md5.o" +"./Middlewares/LwIP/chap-new.o" +"./Middlewares/LwIP/chap_ms.o" +"./Middlewares/LwIP/def.o" +"./Middlewares/LwIP/demand.o" +"./Middlewares/LwIP/dhcp.o" +"./Middlewares/LwIP/dhcp6.o" +"./Middlewares/LwIP/dns.o" +"./Middlewares/LwIP/eap.o" +"./Middlewares/LwIP/ecp.o" +"./Middlewares/LwIP/err.o" +"./Middlewares/LwIP/etharp.o" +"./Middlewares/LwIP/ethernet.o" +"./Middlewares/LwIP/ethip6.o" +"./Middlewares/LwIP/eui64.o" +"./Middlewares/LwIP/fsm.o" +"./Middlewares/LwIP/icmp.o" +"./Middlewares/LwIP/icmp6.o" +"./Middlewares/LwIP/if_api.o" +"./Middlewares/LwIP/igmp.o" +"./Middlewares/LwIP/inet6.o" +"./Middlewares/LwIP/inet_chksum.o" +"./Middlewares/LwIP/init.o" +"./Middlewares/LwIP/ip.o" +"./Middlewares/LwIP/ip4.o" +"./Middlewares/LwIP/ip4_addr.o" +"./Middlewares/LwIP/ip4_frag.o" +"./Middlewares/LwIP/ip6.o" +"./Middlewares/LwIP/ip6_addr.o" +"./Middlewares/LwIP/ip6_frag.o" +"./Middlewares/LwIP/ipcp.o" +"./Middlewares/LwIP/ipv6cp.o" +"./Middlewares/LwIP/lcp.o" +"./Middlewares/LwIP/lowpan6.o" +"./Middlewares/LwIP/lowpan6_ble.o" +"./Middlewares/LwIP/lowpan6_common.o" +"./Middlewares/LwIP/magic.o" +"./Middlewares/LwIP/mem.o" +"./Middlewares/LwIP/memp.o" +"./Middlewares/LwIP/mld6.o" +"./Middlewares/LwIP/mppe.o" +"./Middlewares/LwIP/mqtt.o" +"./Middlewares/LwIP/multilink.o" +"./Middlewares/LwIP/nd6.o" +"./Middlewares/LwIP/netbuf.o" +"./Middlewares/LwIP/netdb.o" +"./Middlewares/LwIP/netif.o" +"./Middlewares/LwIP/netifapi.o" +"./Middlewares/LwIP/pbuf.o" +"./Middlewares/LwIP/ppp.o" +"./Middlewares/LwIP/pppapi.o" +"./Middlewares/LwIP/pppcrypt.o" +"./Middlewares/LwIP/pppoe.o" +"./Middlewares/LwIP/pppol2tp.o" +"./Middlewares/LwIP/pppos.o" +"./Middlewares/LwIP/raw.o" +"./Middlewares/LwIP/slipif.o" +"./Middlewares/LwIP/sockets.o" +"./Middlewares/LwIP/stats.o" +"./Middlewares/LwIP/sys.o" +"./Middlewares/LwIP/sys_arch.o" +"./Middlewares/LwIP/tcp.o" +"./Middlewares/LwIP/tcp_in.o" +"./Middlewares/LwIP/tcp_out.o" +"./Middlewares/LwIP/tcpip.o" +"./Middlewares/LwIP/timeouts.o" +"./Middlewares/LwIP/udp.o" +"./Middlewares/LwIP/upap.o" +"./Middlewares/LwIP/utils.o" +"./Middlewares/LwIP/vj.o" +"./Middlewares/LwIP/zepif.o" diff --git a/STM32_Disco746G/STM32CubeIDE/Debug/objects.mk b/STM32_Disco746G/STM32CubeIDE/Debug/objects.mk index 08bada1d00c600f0d6e23a3c01f5c32142998e34..d1d64389969e3da76a3c6317ee155843338cafc2 100644 --- a/STM32_Disco746G/STM32CubeIDE/Debug/objects.mk +++ b/STM32_Disco746G/STM32CubeIDE/Debug/objects.mk @@ -1,6 +1,6 @@ ################################################################################ # Automatically-generated file. Do not edit! -# Toolchain: GNU Tools for STM32 (10.3-2021.10) +# Toolchain: GNU Tools for STM32 (11.3.rel1) ################################################################################ USER_OBJS := diff --git a/STM32_Disco746G/STM32CubeIDE/Debug/sources.mk b/STM32_Disco746G/STM32CubeIDE/Debug/sources.mk index 67329b466634307e05305ab821810f214de66331..54a0532e56430d15c0ac011b45b4a3c01a63abce 100644 --- a/STM32_Disco746G/STM32CubeIDE/Debug/sources.mk +++ b/STM32_Disco746G/STM32CubeIDE/Debug/sources.mk @@ -1,6 +1,6 @@ ################################################################################ # Automatically-generated file. Do not edit! -# Toolchain: GNU Tools for STM32 (10.3-2021.10) +# Toolchain: GNU Tools for STM32 (11.3.rel1) ################################################################################ ELF_SRCS := @@ -35,16 +35,20 @@ CPP_DEPS := SUBDIRS := \ Application/User/Core \ Application/User/LIBJPEG/App \ +Application/User/LWIP/App \ +Application/User/LWIP/Target \ Application/User/Startup \ Application/User/TouchGFX/App \ Application/User/TouchGFX/target \ Application/User/TouchGFX/target/generated \ Application/User/generated \ Application/User/gui \ +Drivers/BSP/Components \ Drivers/BSP \ Drivers/CMSIS \ Drivers/Components \ Drivers/STM32F7xx_HAL_Driver \ Middlewares/FreeRTOS \ Middlewares/LibJPEG \ +Middlewares/LwIP \ diff --git a/STM32_Disco746G/TouchGFX/App/app_touchgfx.c b/STM32_Disco746G/TouchGFX/App/app_touchgfx.c index df548fa299db9a8760e4db2e20252b58a5c16c74..cb4457cc8933d580f657f6bba7a400558ef1263a 100644 --- a/STM32_Disco746G/TouchGFX/App/app_touchgfx.c +++ b/STM32_Disco746G/TouchGFX/App/app_touchgfx.c @@ -2,7 +2,7 @@ ****************************************************************************** * File Name : app_touchgfx.c ****************************************************************************** - * This file was created by TouchGFX Generator 4.21.3. This file is only + * This file was created by TouchGFX Generator 4.22.0. This file is only * generated once! Delete this file from your project and re-generate code * using STM32CubeMX or change this file manually to update it. ****************************************************************************** diff --git a/STM32_Disco746G/TouchGFX/App/app_touchgfx.h b/STM32_Disco746G/TouchGFX/App/app_touchgfx.h index a6ee19f60c217b44e8dea0451bbe0104c1262ba3..74d97158e7c6427f6999d18fc3256757cff89283 100644 --- a/STM32_Disco746G/TouchGFX/App/app_touchgfx.h +++ b/STM32_Disco746G/TouchGFX/App/app_touchgfx.h @@ -2,7 +2,7 @@ ****************************************************************************** * File Name : app_touchgfx.h ****************************************************************************** - * This file was created by TouchGFX Generator 4.21.3. This file is only + * This file was created by TouchGFX Generator 4.22.0. This file is only * generated once! Delete this file from your project and re-generate code * using STM32CubeMX or change this file manually to update it. ****************************************************************************** diff --git a/STM32_Disco746G/TouchGFX/ApplicationTemplate.touchgfx.part b/STM32_Disco746G/TouchGFX/ApplicationTemplate.touchgfx.part index 4204d2eebd7846133eebfc1c198e230fa6b60784..716c48d5c5d229c2ca5d4f7a1a8c74ea1493b712 100644 --- a/STM32_Disco746G/TouchGFX/ApplicationTemplate.touchgfx.part +++ b/STM32_Disco746G/TouchGFX/ApplicationTemplate.touchgfx.part @@ -24,7 +24,8 @@ "OptionalComponents": [ ], "AdditionalFeatures": [ - ], + "Video" + ] }, - "Version": "4.21.3" + "Version": "4.22.0" } diff --git a/STM32_Disco746G/TouchGFX/target/generated/DoubleBufferedVideoController.hpp b/STM32_Disco746G/TouchGFX/target/generated/DoubleBufferedVideoController.hpp index c5b678726a255c4c5884d1b61589d4e53f691234..cc4973e7e14eedc56fdfbe8e131a3ac0ea3aa004 100644 --- a/STM32_Disco746G/TouchGFX/target/generated/DoubleBufferedVideoController.hpp +++ b/STM32_Disco746G/TouchGFX/target/generated/DoubleBufferedVideoController.hpp @@ -2,7 +2,7 @@ ****************************************************************************** * File Name : DoubleBufferedVideoController.hpp ****************************************************************************** - * This file is generated by TouchGFX Generator 4.21.3. Please, do not edit! + * This file is generated by TouchGFX Generator 4.22.0. Please, do not edit! ****************************************************************************** * @attention * @@ -177,14 +177,14 @@ public: stream.frameCount = 0; stream.tickCount = 0; // Seek to start of video if stopped - if(stream.isStopped) + if (stream.isStopped) { stream.seek_to_frame = 1; } stream.isStopped = false; // Kick decoder if next buffer is available stream.skip_frames = 0; - if(stream.nextBuffer == 0) + if (stream.nextBuffer == 0) { stream.doDecodeNewFrame = true; SEM_POST(semDecode); @@ -234,7 +234,7 @@ public: // Increase tickCount if playing if (stream.isPlaying) { - stream.tickCount+=HAL::getInstance()->getLCDRefreshCount(); + stream.tickCount += HAL::getInstance()->getLCDRefreshCount(); } // Assume more frames are available, flag is lowered once, when changing to the last frame @@ -246,12 +246,12 @@ public: MUTEX_LOCK(mutexBuffers); // Do nothing if seek to frame - if(stream.seek_to_frame > 0) + if (stream.seek_to_frame > 0) { stream.nextBuffer = 0; } - if(stream.nextBuffer != 0) + if (stream.nextBuffer != 0) { // Use nextBuffer as current stream.currentBuffer = stream.nextBuffer; diff --git a/STM32_Disco746G/TouchGFX/target/generated/MJPEGDecoder.hpp b/STM32_Disco746G/TouchGFX/target/generated/MJPEGDecoder.hpp index e63a3d2bbb82b084747ee17e14a908443e5ca6e8..33a1f5df7e71fb53eaa087c2481fb8f47baa933f 100644 --- a/STM32_Disco746G/TouchGFX/target/generated/MJPEGDecoder.hpp +++ b/STM32_Disco746G/TouchGFX/target/generated/MJPEGDecoder.hpp @@ -2,7 +2,7 @@ ****************************************************************************** * File Name : MJPEGDecoder.hpp ****************************************************************************** - * This file is generated by TouchGFX Generator 4.21.3. Please, do not edit! + * This file is generated by TouchGFX Generator 4.22.0. Please, do not edit! ****************************************************************************** * @attention * diff --git a/STM32_Disco746G/TouchGFX/target/generated/OSWrappers.cpp b/STM32_Disco746G/TouchGFX/target/generated/OSWrappers.cpp index 2d907a5c1ca365f3076688265909712487e7643c..0b2ed7277c6c97da737a1f8882b4956e62a2ebcc 100644 --- a/STM32_Disco746G/TouchGFX/target/generated/OSWrappers.cpp +++ b/STM32_Disco746G/TouchGFX/target/generated/OSWrappers.cpp @@ -2,7 +2,7 @@ ****************************************************************************** * File Name : OSWrappers.cpp ****************************************************************************** - * This file is generated by TouchGFX Generator 4.21.3. Please, do not edit! + * This file is generated by TouchGFX Generator 4.22.0. Please, do not edit! ****************************************************************************** * @attention * @@ -154,4 +154,3 @@ void OSWrappers::taskYield() } /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ - diff --git a/STM32_Disco746G/TouchGFX/target/generated/STM32DMA.cpp b/STM32_Disco746G/TouchGFX/target/generated/STM32DMA.cpp index 6b1d2e81af14b3038ded36c3765d6d8a20f52ad8..e4d37bc026ea3e1c30887ae8c166c04837e368ac 100644 --- a/STM32_Disco746G/TouchGFX/target/generated/STM32DMA.cpp +++ b/STM32_Disco746G/TouchGFX/target/generated/STM32DMA.cpp @@ -3,7 +3,7 @@ ****************************************************************************** * File Name : STM32DMA.cpp ****************************************************************************** - * This file is generated by TouchGFX Generator 4.21.3. Please, do not edit! + * This file is generated by TouchGFX Generator 4.22.0. Please, do not edit! ****************************************************************************** * @attention * @@ -23,7 +23,6 @@ #include #include #include -#include #include /* Makes touchgfx specific types and variables visible to this file */ @@ -261,7 +260,7 @@ void STM32DMA::setupDataCopy(const BlitOp& blitOp) MODIFY_REG(DMA2D->FGPFCCR, (DMA2D_FGPFCCR_CS | DMA2D_FGPFCCR_CCM), (((palette->size - 1) << DMA2D_FGPFCCR_CS_Pos) | (DMA2D_CCM_ARGB8888 << DMA2D_FGPFCCR_CCM_Pos))); break; case Bitmap::CLUT_FORMAT_L8_RGB888: - if(blitOp.alpha == 255) + if (blitOp.alpha == 255) { blend = false; } @@ -283,7 +282,7 @@ void STM32DMA::setupDataCopy(const BlitOp& blitOp) DMA2D->IFCR = (DMA2D_FLAG_CTC); /* Set DMA2D mode */ - if(blend) + if (blend) { WRITE_REG(DMA2D->CR, DMA2D_M2M_BLEND | DMA2D_IT_TC | DMA2D_CR_START); } @@ -399,7 +398,7 @@ const clutData_t* L8CLUT = 0; uint32_t L8ClutLoaded = 0; } // namespace -void setL8Pallette(const uint8_t* const data) +void setL8Palette(const uint8_t* const data) { L8CLUT = reinterpret_cast(data - offsetof(clutData_t, data)); L8ClutLoaded = 0; diff --git a/STM32_Disco746G/TouchGFX/target/generated/STM32DMA.hpp b/STM32_Disco746G/TouchGFX/target/generated/STM32DMA.hpp index 75a2b1e7228ed10db37425de8702a2ff792a2c20..f1a26ae00eedd584ac30ddfc952d6ece00596a99 100644 --- a/STM32_Disco746G/TouchGFX/target/generated/STM32DMA.hpp +++ b/STM32_Disco746G/TouchGFX/target/generated/STM32DMA.hpp @@ -2,7 +2,7 @@ ****************************************************************************** * File Name : STM32DMA.hpp ****************************************************************************** - * This file is generated by TouchGFX Generator 4.21.3. Please, do not edit! + * This file is generated by TouchGFX Generator 4.22.0. Please, do not edit! ****************************************************************************** * @attention * diff --git a/STM32_Disco746G/TouchGFX/target/generated/SoftwareMJPEGDecoder.cpp b/STM32_Disco746G/TouchGFX/target/generated/SoftwareMJPEGDecoder.cpp index ae982bbe8b6b0f1cd894ceb9d0040be003934bed..eae0a93efd123bcf9ebe1da90dddaaa780644385 100644 --- a/STM32_Disco746G/TouchGFX/target/generated/SoftwareMJPEGDecoder.cpp +++ b/STM32_Disco746G/TouchGFX/target/generated/SoftwareMJPEGDecoder.cpp @@ -2,7 +2,7 @@ ****************************************************************************** * File Name : SoftwareMJPEGDecoder.cpp ****************************************************************************** - * This file is generated by TouchGFX Generator 4.21.3. Please, do not edit! + * This file is generated by TouchGFX Generator 4.22.0. Please, do not edit! ****************************************************************************** * @attention * @@ -32,9 +32,6 @@ struct JPEG_RGB uint8_t B; uint8_t G; uint8_t R; -#if VIDEO_DECODE_FORMAT == ARGB8888 - uint8_t X; -#endif }; } // namespace @@ -495,7 +492,13 @@ bool SoftwareMJPEGDecoder::decodeFrame(const touchgfx::Rect& area, uint8_t* fram memcpy(lineptr + startX * 3, lineBuffer + startX * 3, (endX - startX) * 3); lineptr += framebuffer_width * 3; //move to next line #else - memcpy(lineptr + startX, lineBuffer + startX * 4, (endX - startX) * 4); + JPEG_RGB* RGB_matrix = (JPEG_RGB*)lineBuffer; + //loop row RGB888->ARGB8888 for required line part + for (uint32_t counter = startX; counter < endX; counter++) + { + const uint32_t pix = (0xFF << 24) | (RGB_matrix[counter].R << 16) | (RGB_matrix[counter].G << 8) | RGB_matrix[counter].B; + *(lineptr + counter) = pix; + } lineptr += framebuffer_width; //move to next line #endif } diff --git a/STM32_Disco746G/TouchGFX/target/generated/SoftwareMJPEGDecoder.hpp b/STM32_Disco746G/TouchGFX/target/generated/SoftwareMJPEGDecoder.hpp index 8f6b553f1c43a4f88864b8bac711eeefa64eb021..2cb9778fba87af3901f460e515be342ba58a1153 100644 --- a/STM32_Disco746G/TouchGFX/target/generated/SoftwareMJPEGDecoder.hpp +++ b/STM32_Disco746G/TouchGFX/target/generated/SoftwareMJPEGDecoder.hpp @@ -2,7 +2,7 @@ ****************************************************************************** * File Name : SoftwareMJPEGDecoder.hpp ****************************************************************************** - * This file is generated by TouchGFX Generator 4.21.3. Please, do not edit! + * This file is generated by TouchGFX Generator 4.22.0. Please, do not edit! ****************************************************************************** * @attention * diff --git a/STM32_Disco746G/TouchGFX/target/generated/TouchGFXConfiguration.cpp b/STM32_Disco746G/TouchGFX/target/generated/TouchGFXConfiguration.cpp index f858873f6ab36f50213b74185c5befc9a3909bbd..d8af6f2e4fde771225495480e415acb4712ae1fa 100644 --- a/STM32_Disco746G/TouchGFX/target/generated/TouchGFXConfiguration.cpp +++ b/STM32_Disco746G/TouchGFX/target/generated/TouchGFXConfiguration.cpp @@ -2,7 +2,7 @@ ****************************************************************************** * File Name : TouchGFXConfiguration.cpp ****************************************************************************** - * This file is generated by TouchGFX Generator 4.21.3. Please, do not edit! + * This file is generated by TouchGFX Generator 4.22.0. Please, do not edit! ****************************************************************************** * @attention * diff --git a/STM32_Disco746G/TouchGFX/target/generated/TouchGFXGeneratedHAL.cpp b/STM32_Disco746G/TouchGFX/target/generated/TouchGFXGeneratedHAL.cpp index e8995e40273a038513c669c3eed29a3f32ee4d4f..530cadab6cf5020b33338bbd3b07562065e1c1d1 100644 --- a/STM32_Disco746G/TouchGFX/target/generated/TouchGFXGeneratedHAL.cpp +++ b/STM32_Disco746G/TouchGFX/target/generated/TouchGFXGeneratedHAL.cpp @@ -2,7 +2,7 @@ ****************************************************************************** * File Name : TouchGFXGeneratedHAL.cpp ****************************************************************************** - * This file is generated by TouchGFX Generator 4.21.3. Please, do not edit! + * This file is generated by TouchGFX Generator 4.22.0. Please, do not edit! ****************************************************************************** * @attention * @@ -30,7 +30,7 @@ SoftwareMJPEGDecoder mjpegdecoder1((uint8_t*)lineBuffer); LOCATION_PRAGMA_NOLOAD("Video_RGB_Buffer") uint32_t videoRGBBuffer[130560] LOCATION_ATTRIBUTE_NOLOAD("Video_RGB_Buffer"); -DoubleBufferedVideoController<1, 480, 272, 480*2U, Bitmap::RGB565> videoController; +DoubleBufferedVideoController<1, 480, 272, 480 * 2U, Bitmap::RGB565> videoController; //Singleton Factory VideoController& VideoController::getInstance() @@ -45,12 +45,11 @@ using namespace touchgfx; namespace { - // Use the section "TouchGFX_Framebuffer" in the linker script to specify the placement of the buffer - LOCATION_PRAGMA_NOLOAD("TouchGFX_Framebuffer") - uint32_t frameBuf[(480 * 272 * 2 + 3) / 4 * 2] LOCATION_ATTRIBUTE_NOLOAD("TouchGFX_Framebuffer"); - static volatile bool refreshRequested = false; - static uint16_t lcd_int_active_line; - static uint16_t lcd_int_porch_line; +// Use the section "TouchGFX_Framebuffer" in the linker script to specify the placement of the buffer +LOCATION_PRAGMA_NOLOAD("TouchGFX_Framebuffer") +uint32_t frameBuf[(480 * 272 * 2 + 3) / 4 * 2] LOCATION_ATTRIBUTE_NOLOAD("TouchGFX_Framebuffer"); +static uint16_t lcd_int_active_line; +static uint16_t lcd_int_porch_line; } void TouchGFXGeneratedHAL::initialize() @@ -103,10 +102,6 @@ bool TouchGFXGeneratedHAL::beginFrame() void TouchGFXGeneratedHAL::endFrame() { - if (frameBufferUpdatedThisFrame) - { - refreshRequested = true; - } HAL::endFrame(); videoController.endFrame(); } @@ -158,7 +153,7 @@ void TouchGFXGeneratedHAL::FlushCache() } } -extern "C" void videoTaskFunc(void *argument) +extern "C" void videoTaskFunc(void* argument) { videoController.decoderTaskEntry(); } diff --git a/STM32_Disco746G/TouchGFX/target/generated/TouchGFXGeneratedHAL.hpp b/STM32_Disco746G/TouchGFX/target/generated/TouchGFXGeneratedHAL.hpp index 2fc881f48f06762ac7b2d42dd30fa311a1e95d5f..59985829d6c2910e88677f1e450d48fb9f278044 100644 --- a/STM32_Disco746G/TouchGFX/target/generated/TouchGFXGeneratedHAL.hpp +++ b/STM32_Disco746G/TouchGFX/target/generated/TouchGFXGeneratedHAL.hpp @@ -2,7 +2,7 @@ ****************************************************************************** * File Name : TouchGFXGeneratedHAL.hpp ****************************************************************************** - * This file is generated by TouchGFX Generator 4.21.3. Please, do not edit! + * This file is generated by TouchGFX Generator 4.22.0. Please, do not edit! ****************************************************************************** * @attention * diff --git a/STM32_Nucleo207ZG/.settings/language.settings.xml b/STM32_Nucleo207ZG/.settings/language.settings.xml index 80e9c59d69f53b301afaff9c0478a626b1817e81..15577fdf9240510a0415f1d011b4e33d7fb19b66 100644 --- a/STM32_Nucleo207ZG/.settings/language.settings.xml +++ b/STM32_Nucleo207ZG/.settings/language.settings.xml @@ -5,7 +5,7 @@ - + @@ -16,7 +16,7 @@ - +